diff --git a/.pnpm-store/v11/files/00/07213771ccbfdf3b2027e0275cced7836fa7fbbb10d49acf73eb1bb0f8c74c9561c19a3cd491eb5cf92f59502ee0fa977c6c619409dd83d0e7ea3b1ac53e29 b/.pnpm-store/v11/files/00/07213771ccbfdf3b2027e0275cced7836fa7fbbb10d49acf73eb1bb0f8c74c9561c19a3cd491eb5cf92f59502ee0fa977c6c619409dd83d0e7ea3b1ac53e29 new file mode 100644 index 00000000..dcb68334 --- /dev/null +++ b/.pnpm-store/v11/files/00/07213771ccbfdf3b2027e0275cced7836fa7fbbb10d49acf73eb1bb0f8c74c9561c19a3cd491eb5cf92f59502ee0fa977c6c619409dd83d0e7ea3b1ac53e29 @@ -0,0 +1,1525 @@ +exports = module.exports = SemVer + +var debug +/* istanbul ignore next */ +if (typeof process === 'object' && + process.env && + process.env.NODE_DEBUG && + /\bsemver\b/i.test(process.env.NODE_DEBUG)) { + debug = function () { + var args = Array.prototype.slice.call(arguments, 0) + args.unshift('SEMVER') + console.log.apply(console, args) + } +} else { + debug = function () {} +} + +// Note: this is the semver.org version of the spec that it implements +// Not necessarily the package version of this code. +exports.SEMVER_SPEC_VERSION = '2.0.0' + +var MAX_LENGTH = 256 +var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || + /* istanbul ignore next */ 9007199254740991 + +// Max safe segment length for coercion. +var MAX_SAFE_COMPONENT_LENGTH = 16 + +var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6 + +// The actual regexps go on exports.re +var re = exports.re = [] +var safeRe = exports.safeRe = [] +var src = exports.src = [] +var R = 0 + +var LETTERDASHNUMBER = '[a-zA-Z0-9-]' + +// Replace some greedy regex tokens to prevent regex dos issues. These regex are +// used internally via the safeRe object since all inputs in this library get +// normalized first to trim and collapse all extra whitespace. The original +// regexes are exported for userland consumption and lower level usage. A +// future breaking change could export the safer regex only with a note that +// all input should have extra whitespace removed. +var safeRegexReplacements = [ + ['\\s', 1], + ['\\d', MAX_LENGTH], + [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH], +] + +function makeSafeRe (value) { + for (var i = 0; i < safeRegexReplacements.length; i++) { + var token = safeRegexReplacements[i][0] + var max = safeRegexReplacements[i][1] + value = value + .split(token + '*').join(token + '{0,' + max + '}') + .split(token + '+').join(token + '{1,' + max + '}') + } + return value +} + +// The following Regular Expressions can be used for tokenizing, +// validating, and parsing SemVer version strings. + +// ## Numeric Identifier +// A single `0`, or a non-zero digit followed by zero or more digits. + +var NUMERICIDENTIFIER = R++ +src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' +var NUMERICIDENTIFIERLOOSE = R++ +src[NUMERICIDENTIFIERLOOSE] = '\\d+' + +// ## Non-numeric Identifier +// Zero or more digits, followed by a letter or hyphen, and then zero or +// more letters, digits, or hyphens. + +var NONNUMERICIDENTIFIER = R++ +src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-]' + LETTERDASHNUMBER + '*' + +// ## Main Version +// Three dot-separated numeric identifiers. + +var MAINVERSION = R++ +src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')\\.' + + '(' + src[NUMERICIDENTIFIER] + ')' + +var MAINVERSIONLOOSE = R++ +src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + + '(' + src[NUMERICIDENTIFIERLOOSE] + ')' + +// ## Pre-release Version Identifier +// A numeric identifier, or a non-numeric identifier. + +var PRERELEASEIDENTIFIER = R++ +src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +var PRERELEASEIDENTIFIERLOOSE = R++ +src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + + '|' + src[NONNUMERICIDENTIFIER] + ')' + +// ## Pre-release Version +// Hyphen, followed by one or more dot-separated pre-release version +// identifiers. + +var PRERELEASE = R++ +src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + + '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' + +var PRERELEASELOOSE = R++ +src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + + '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' + +// ## Build Metadata Identifier +// Any combination of digits, letters, or hyphens. + +var BUILDIDENTIFIER = R++ +src[BUILDIDENTIFIER] = LETTERDASHNUMBER + '+' + +// ## Build Metadata +// Plus sign, followed by one or more period-separated build metadata +// identifiers. + +var BUILD = R++ +src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + + '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' + +// ## Full Version String +// A main version, followed optionally by a pre-release version and +// build metadata. + +// Note that the only major, minor, patch, and pre-release sections of +// the version string are capturing groups. The build metadata is not a +// capturing group, because it should not ever be used in version +// comparison. + +var FULL = R++ +var FULLPLAIN = 'v?' + src[MAINVERSION] + + src[PRERELEASE] + '?' + + src[BUILD] + '?' + +src[FULL] = '^' + FULLPLAIN + '$' + +// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. +// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty +// common in the npm registry. +var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + + src[PRERELEASELOOSE] + '?' + + src[BUILD] + '?' + +var LOOSE = R++ +src[LOOSE] = '^' + LOOSEPLAIN + '$' + +var GTLT = R++ +src[GTLT] = '((?:<|>)?=?)' + +// Something like "2.*" or "1.2.x". +// Note that "x.x" is a valid xRange identifer, meaning "any version" +// Only the first item is strictly required. +var XRANGEIDENTIFIERLOOSE = R++ +src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' +var XRANGEIDENTIFIER = R++ +src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' + +var XRANGEPLAIN = R++ +src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + + '(?:' + src[PRERELEASE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGEPLAINLOOSE = R++ +src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + + '(?:' + src[PRERELEASELOOSE] + ')?' + + src[BUILD] + '?' + + ')?)?' + +var XRANGE = R++ +src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' +var XRANGELOOSE = R++ +src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' + +// Coercion. +// Extract anything that could conceivably be a part of a valid semver +var COERCE = R++ +src[COERCE] = '(?:^|[^\\d])' + + '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + + '(?:$|[^\\d])' + +// Tilde ranges. +// Meaning is "reasonably at or greater than" +var LONETILDE = R++ +src[LONETILDE] = '(?:~>?)' + +var TILDETRIM = R++ +src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' +re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') +safeRe[TILDETRIM] = new RegExp(makeSafeRe(src[TILDETRIM]), 'g') +var tildeTrimReplace = '$1~' + +var TILDE = R++ +src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' +var TILDELOOSE = R++ +src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' + +// Caret ranges. +// Meaning is "at least and backwards compatible with" +var LONECARET = R++ +src[LONECARET] = '(?:\\^)' + +var CARETTRIM = R++ +src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' +re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') +safeRe[CARETTRIM] = new RegExp(makeSafeRe(src[CARETTRIM]), 'g') +var caretTrimReplace = '$1^' + +var CARET = R++ +src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' +var CARETLOOSE = R++ +src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' + +// A simple gt/lt/eq thing, or just "" to indicate "any version" +var COMPARATORLOOSE = R++ +src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' +var COMPARATOR = R++ +src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' + +// An expression to strip any whitespace between the gtlt and the thing +// it modifies, so that `> 1.2.3` ==> `>1.2.3` +var COMPARATORTRIM = R++ +src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + + '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' + +// this one has to use the /g flag +re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') +safeRe[COMPARATORTRIM] = new RegExp(makeSafeRe(src[COMPARATORTRIM]), 'g') +var comparatorTrimReplace = '$1$2$3' + +// Something like `1.2.3 - 1.2.4` +// Note that these all use the loose form, because they'll be +// checked against either the strict or loose comparator form +// later. +var HYPHENRANGE = R++ +src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAIN] + ')' + + '\\s*$' + +var HYPHENRANGELOOSE = R++ +src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s+-\\s+' + + '(' + src[XRANGEPLAINLOOSE] + ')' + + '\\s*$' + +// Star ranges basically just allow anything at all. +var STAR = R++ +src[STAR] = '(<|>)?=?\\s*\\*' + +// Compile to actual regexp objects. +// All are flag-free, unless they were created above with a flag. +for (var i = 0; i < R; i++) { + debug(i, src[i]) + if (!re[i]) { + re[i] = new RegExp(src[i]) + + // Replace all greedy whitespace to prevent regex dos issues. These regex are + // used internally via the safeRe object since all inputs in this library get + // normalized first to trim and collapse all extra whitespace. The original + // regexes are exported for userland consumption and lower level usage. A + // future breaking change could export the safer regex only with a note that + // all input should have extra whitespace removed. + safeRe[i] = new RegExp(makeSafeRe(src[i])) + } +} + +exports.parse = parse +function parse (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + if (version.length > MAX_LENGTH) { + return null + } + + var r = options.loose ? safeRe[LOOSE] : safeRe[FULL] + if (!r.test(version)) { + return null + } + + try { + return new SemVer(version, options) + } catch (er) { + return null + } +} + +exports.valid = valid +function valid (version, options) { + var v = parse(version, options) + return v ? v.version : null +} + +exports.clean = clean +function clean (version, options) { + var s = parse(version.trim().replace(/^[=v]+/, ''), options) + return s ? s.version : null +} + +exports.SemVer = SemVer + +function SemVer (version, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + if (version instanceof SemVer) { + if (version.loose === options.loose) { + return version + } else { + version = version.version + } + } else if (typeof version !== 'string') { + throw new TypeError('Invalid Version: ' + version) + } + + if (version.length > MAX_LENGTH) { + throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') + } + + if (!(this instanceof SemVer)) { + return new SemVer(version, options) + } + + debug('SemVer', version, options) + this.options = options + this.loose = !!options.loose + + var m = version.trim().match(options.loose ? safeRe[LOOSE] : safeRe[FULL]) + + if (!m) { + throw new TypeError('Invalid Version: ' + version) + } + + this.raw = version + + // these are actually numbers + this.major = +m[1] + this.minor = +m[2] + this.patch = +m[3] + + if (this.major > MAX_SAFE_INTEGER || this.major < 0) { + throw new TypeError('Invalid major version') + } + + if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { + throw new TypeError('Invalid minor version') + } + + if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { + throw new TypeError('Invalid patch version') + } + + // numberify any prerelease numeric ids + if (!m[4]) { + this.prerelease = [] + } else { + this.prerelease = m[4].split('.').map(function (id) { + if (/^[0-9]+$/.test(id)) { + var num = +id + if (num >= 0 && num < MAX_SAFE_INTEGER) { + return num + } + } + return id + }) + } + + this.build = m[5] ? m[5].split('.') : [] + this.format() +} + +SemVer.prototype.format = function () { + this.version = this.major + '.' + this.minor + '.' + this.patch + if (this.prerelease.length) { + this.version += '-' + this.prerelease.join('.') + } + return this.version +} + +SemVer.prototype.toString = function () { + return this.version +} + +SemVer.prototype.compare = function (other) { + debug('SemVer.compare', this.version, this.options, other) + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return this.compareMain(other) || this.comparePre(other) +} + +SemVer.prototype.compareMain = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + return compareIdentifiers(this.major, other.major) || + compareIdentifiers(this.minor, other.minor) || + compareIdentifiers(this.patch, other.patch) +} + +SemVer.prototype.comparePre = function (other) { + if (!(other instanceof SemVer)) { + other = new SemVer(other, this.options) + } + + // NOT having a prerelease is > having one + if (this.prerelease.length && !other.prerelease.length) { + return -1 + } else if (!this.prerelease.length && other.prerelease.length) { + return 1 + } else if (!this.prerelease.length && !other.prerelease.length) { + return 0 + } + + var i = 0 + do { + var a = this.prerelease[i] + var b = other.prerelease[i] + debug('prerelease compare', i, a, b) + if (a === undefined && b === undefined) { + return 0 + } else if (b === undefined) { + return 1 + } else if (a === undefined) { + return -1 + } else if (a === b) { + continue + } else { + return compareIdentifiers(a, b) + } + } while (++i) +} + +// preminor will bump the version up to the next minor release, and immediately +// down to pre-release. premajor and prepatch work the same way. +SemVer.prototype.inc = function (release, identifier) { + switch (release) { + case 'premajor': + this.prerelease.length = 0 + this.patch = 0 + this.minor = 0 + this.major++ + this.inc('pre', identifier) + break + case 'preminor': + this.prerelease.length = 0 + this.patch = 0 + this.minor++ + this.inc('pre', identifier) + break + case 'prepatch': + // If this is already a prerelease, it will bump to the next version + // drop any prereleases that might already exist, since they are not + // relevant at this point. + this.prerelease.length = 0 + this.inc('patch', identifier) + this.inc('pre', identifier) + break + // If the input is a non-prerelease version, this acts the same as + // prepatch. + case 'prerelease': + if (this.prerelease.length === 0) { + this.inc('patch', identifier) + } + this.inc('pre', identifier) + break + + case 'major': + // If this is a pre-major version, bump up to the same major version. + // Otherwise increment major. + // 1.0.0-5 bumps to 1.0.0 + // 1.1.0 bumps to 2.0.0 + if (this.minor !== 0 || + this.patch !== 0 || + this.prerelease.length === 0) { + this.major++ + } + this.minor = 0 + this.patch = 0 + this.prerelease = [] + break + case 'minor': + // If this is a pre-minor version, bump up to the same minor version. + // Otherwise increment minor. + // 1.2.0-5 bumps to 1.2.0 + // 1.2.1 bumps to 1.3.0 + if (this.patch !== 0 || this.prerelease.length === 0) { + this.minor++ + } + this.patch = 0 + this.prerelease = [] + break + case 'patch': + // If this is not a pre-release version, it will increment the patch. + // If it is a pre-release it will bump up to the same patch version. + // 1.2.0-5 patches to 1.2.0 + // 1.2.0 patches to 1.2.1 + if (this.prerelease.length === 0) { + this.patch++ + } + this.prerelease = [] + break + // This probably shouldn't be used publicly. + // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. + case 'pre': + if (this.prerelease.length === 0) { + this.prerelease = [0] + } else { + var i = this.prerelease.length + while (--i >= 0) { + if (typeof this.prerelease[i] === 'number') { + this.prerelease[i]++ + i = -2 + } + } + if (i === -1) { + // didn't increment anything + this.prerelease.push(0) + } + } + if (identifier) { + // 1.2.0-beta.1 bumps to 1.2.0-beta.2, + // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 + if (this.prerelease[0] === identifier) { + if (isNaN(this.prerelease[1])) { + this.prerelease = [identifier, 0] + } + } else { + this.prerelease = [identifier, 0] + } + } + break + + default: + throw new Error('invalid increment argument: ' + release) + } + this.format() + this.raw = this.version + return this +} + +exports.inc = inc +function inc (version, release, loose, identifier) { + if (typeof (loose) === 'string') { + identifier = loose + loose = undefined + } + + try { + return new SemVer(version, loose).inc(release, identifier).version + } catch (er) { + return null + } +} + +exports.diff = diff +function diff (version1, version2) { + if (eq(version1, version2)) { + return null + } else { + var v1 = parse(version1) + var v2 = parse(version2) + var prefix = '' + if (v1.prerelease.length || v2.prerelease.length) { + prefix = 'pre' + var defaultResult = 'prerelease' + } + for (var key in v1) { + if (key === 'major' || key === 'minor' || key === 'patch') { + if (v1[key] !== v2[key]) { + return prefix + key + } + } + } + return defaultResult // may be undefined + } +} + +exports.compareIdentifiers = compareIdentifiers + +var numeric = /^[0-9]+$/ +function compareIdentifiers (a, b) { + var anum = numeric.test(a) + var bnum = numeric.test(b) + + if (anum && bnum) { + a = +a + b = +b + } + + return a === b ? 0 + : (anum && !bnum) ? -1 + : (bnum && !anum) ? 1 + : a < b ? -1 + : 1 +} + +exports.rcompareIdentifiers = rcompareIdentifiers +function rcompareIdentifiers (a, b) { + return compareIdentifiers(b, a) +} + +exports.major = major +function major (a, loose) { + return new SemVer(a, loose).major +} + +exports.minor = minor +function minor (a, loose) { + return new SemVer(a, loose).minor +} + +exports.patch = patch +function patch (a, loose) { + return new SemVer(a, loose).patch +} + +exports.compare = compare +function compare (a, b, loose) { + return new SemVer(a, loose).compare(new SemVer(b, loose)) +} + +exports.compareLoose = compareLoose +function compareLoose (a, b) { + return compare(a, b, true) +} + +exports.rcompare = rcompare +function rcompare (a, b, loose) { + return compare(b, a, loose) +} + +exports.sort = sort +function sort (list, loose) { + return list.sort(function (a, b) { + return exports.compare(a, b, loose) + }) +} + +exports.rsort = rsort +function rsort (list, loose) { + return list.sort(function (a, b) { + return exports.rcompare(a, b, loose) + }) +} + +exports.gt = gt +function gt (a, b, loose) { + return compare(a, b, loose) > 0 +} + +exports.lt = lt +function lt (a, b, loose) { + return compare(a, b, loose) < 0 +} + +exports.eq = eq +function eq (a, b, loose) { + return compare(a, b, loose) === 0 +} + +exports.neq = neq +function neq (a, b, loose) { + return compare(a, b, loose) !== 0 +} + +exports.gte = gte +function gte (a, b, loose) { + return compare(a, b, loose) >= 0 +} + +exports.lte = lte +function lte (a, b, loose) { + return compare(a, b, loose) <= 0 +} + +exports.cmp = cmp +function cmp (a, op, b, loose) { + switch (op) { + case '===': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a === b + + case '!==': + if (typeof a === 'object') + a = a.version + if (typeof b === 'object') + b = b.version + return a !== b + + case '': + case '=': + case '==': + return eq(a, b, loose) + + case '!=': + return neq(a, b, loose) + + case '>': + return gt(a, b, loose) + + case '>=': + return gte(a, b, loose) + + case '<': + return lt(a, b, loose) + + case '<=': + return lte(a, b, loose) + + default: + throw new TypeError('Invalid operator: ' + op) + } +} + +exports.Comparator = Comparator +function Comparator (comp, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (comp instanceof Comparator) { + if (comp.loose === !!options.loose) { + return comp + } else { + comp = comp.value + } + } + + if (!(this instanceof Comparator)) { + return new Comparator(comp, options) + } + + comp = comp.trim().split(/\s+/).join(' ') + debug('comparator', comp, options) + this.options = options + this.loose = !!options.loose + this.parse(comp) + + if (this.semver === ANY) { + this.value = '' + } else { + this.value = this.operator + this.semver.version + } + + debug('comp', this) +} + +var ANY = {} +Comparator.prototype.parse = function (comp) { + var r = this.options.loose ? safeRe[COMPARATORLOOSE] : safeRe[COMPARATOR] + var m = comp.match(r) + + if (!m) { + throw new TypeError('Invalid comparator: ' + comp) + } + + this.operator = m[1] + if (this.operator === '=') { + this.operator = '' + } + + // if it literally is just '>' or '' then allow anything. + if (!m[2]) { + this.semver = ANY + } else { + this.semver = new SemVer(m[2], this.options.loose) + } +} + +Comparator.prototype.toString = function () { + return this.value +} + +Comparator.prototype.test = function (version) { + debug('Comparator.test', version, this.options.loose) + + if (this.semver === ANY) { + return true + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + return cmp(version, this.operator, this.semver, this.options) +} + +Comparator.prototype.intersects = function (comp, options) { + if (!(comp instanceof Comparator)) { + throw new TypeError('a Comparator is required') + } + + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + var rangeTmp + + if (this.operator === '') { + rangeTmp = new Range(comp.value, options) + return satisfies(this.value, rangeTmp, options) + } else if (comp.operator === '') { + rangeTmp = new Range(this.value, options) + return satisfies(comp.semver, rangeTmp, options) + } + + var sameDirectionIncreasing = + (this.operator === '>=' || this.operator === '>') && + (comp.operator === '>=' || comp.operator === '>') + var sameDirectionDecreasing = + (this.operator === '<=' || this.operator === '<') && + (comp.operator === '<=' || comp.operator === '<') + var sameSemVer = this.semver.version === comp.semver.version + var differentDirectionsInclusive = + (this.operator === '>=' || this.operator === '<=') && + (comp.operator === '>=' || comp.operator === '<=') + var oppositeDirectionsLessThan = + cmp(this.semver, '<', comp.semver, options) && + ((this.operator === '>=' || this.operator === '>') && + (comp.operator === '<=' || comp.operator === '<')) + var oppositeDirectionsGreaterThan = + cmp(this.semver, '>', comp.semver, options) && + ((this.operator === '<=' || this.operator === '<') && + (comp.operator === '>=' || comp.operator === '>')) + + return sameDirectionIncreasing || sameDirectionDecreasing || + (sameSemVer && differentDirectionsInclusive) || + oppositeDirectionsLessThan || oppositeDirectionsGreaterThan +} + +exports.Range = Range +function Range (range, options) { + if (!options || typeof options !== 'object') { + options = { + loose: !!options, + includePrerelease: false + } + } + + if (range instanceof Range) { + if (range.loose === !!options.loose && + range.includePrerelease === !!options.includePrerelease) { + return range + } else { + return new Range(range.raw, options) + } + } + + if (range instanceof Comparator) { + return new Range(range.value, options) + } + + if (!(this instanceof Range)) { + return new Range(range, options) + } + + this.options = options + this.loose = !!options.loose + this.includePrerelease = !!options.includePrerelease + + // First reduce all whitespace as much as possible so we do not have to rely + // on potentially slow regexes like \s*. This is then stored and used for + // future error messages as well. + this.raw = range + .trim() + .split(/\s+/) + .join(' ') + + // First, split based on boolean or || + this.set = this.raw.split('||').map(function (range) { + return this.parseRange(range.trim()) + }, this).filter(function (c) { + // throw out any that are not relevant for whatever reason + return c.length + }) + + if (!this.set.length) { + throw new TypeError('Invalid SemVer Range: ' + this.raw) + } + + this.format() +} + +Range.prototype.format = function () { + this.range = this.set.map(function (comps) { + return comps.join(' ').trim() + }).join('||').trim() + return this.range +} + +Range.prototype.toString = function () { + return this.range +} + +Range.prototype.parseRange = function (range) { + var loose = this.options.loose + // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` + var hr = loose ? safeRe[HYPHENRANGELOOSE] : safeRe[HYPHENRANGE] + range = range.replace(hr, hyphenReplace) + debug('hyphen replace', range) + // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` + range = range.replace(safeRe[COMPARATORTRIM], comparatorTrimReplace) + debug('comparator trim', range, safeRe[COMPARATORTRIM]) + + // `~ 1.2.3` => `~1.2.3` + range = range.replace(safeRe[TILDETRIM], tildeTrimReplace) + + // `^ 1.2.3` => `^1.2.3` + range = range.replace(safeRe[CARETTRIM], caretTrimReplace) + + // At this point, the range is completely trimmed and + // ready to be split into comparators. + var compRe = loose ? safeRe[COMPARATORLOOSE] : safeRe[COMPARATOR] + var set = range.split(' ').map(function (comp) { + return parseComparator(comp, this.options) + }, this).join(' ').split(/\s+/) + if (this.options.loose) { + // in loose mode, throw out any that are not valid comparators + set = set.filter(function (comp) { + return !!comp.match(compRe) + }) + } + set = set.map(function (comp) { + return new Comparator(comp, this.options) + }, this) + + return set +} + +Range.prototype.intersects = function (range, options) { + if (!(range instanceof Range)) { + throw new TypeError('a Range is required') + } + + return this.set.some(function (thisComparators) { + return thisComparators.every(function (thisComparator) { + return range.set.some(function (rangeComparators) { + return rangeComparators.every(function (rangeComparator) { + return thisComparator.intersects(rangeComparator, options) + }) + }) + }) + }) +} + +// Mostly just for testing and legacy API reasons +exports.toComparators = toComparators +function toComparators (range, options) { + return new Range(range, options).set.map(function (comp) { + return comp.map(function (c) { + return c.value + }).join(' ').trim().split(' ') + }) +} + +// comprised of xranges, tildes, stars, and gtlt's at this point. +// already replaced the hyphen ranges +// turn into a set of JUST comparators. +function parseComparator (comp, options) { + debug('comp', comp, options) + comp = replaceCarets(comp, options) + debug('caret', comp) + comp = replaceTildes(comp, options) + debug('tildes', comp) + comp = replaceXRanges(comp, options) + debug('xrange', comp) + comp = replaceStars(comp, options) + debug('stars', comp) + return comp +} + +function isX (id) { + return !id || id.toLowerCase() === 'x' || id === '*' +} + +// ~, ~> --> * (any, kinda silly) +// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 +// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 +// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 +// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 +// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 +function replaceTildes (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceTilde(comp, options) + }).join(' ') +} + +function replaceTilde (comp, options) { + var r = options.loose ? safeRe[TILDELOOSE] : safeRe[TILDE] + return comp.replace(r, function (_, M, m, p, pr) { + debug('tilde', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + // ~1.2 == >=1.2.0 <1.3.0 + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else if (pr) { + debug('replaceTilde pr', pr) + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } else { + // ~1.2.3 == >=1.2.3 <1.3.0 + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + + debug('tilde return', ret) + return ret + }) +} + +// ^ --> * (any, kinda silly) +// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 +// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 +// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 +// ^1.2.3 --> >=1.2.3 <2.0.0 +// ^1.2.0 --> >=1.2.0 <2.0.0 +function replaceCarets (comp, options) { + return comp.trim().split(/\s+/).map(function (comp) { + return replaceCaret(comp, options) + }).join(' ') +} + +function replaceCaret (comp, options) { + debug('caret', comp, options) + var r = options.loose ? safeRe[CARETLOOSE] : safeRe[CARET] + return comp.replace(r, function (_, M, m, p, pr) { + debug('caret', comp, _, M, m, p, pr) + var ret + + if (isX(M)) { + ret = '' + } else if (isX(m)) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (isX(p)) { + if (M === '0') { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } else { + ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' + } + } else if (pr) { + debug('replaceCaret pr', pr) + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + '-' + pr + + ' <' + (+M + 1) + '.0.0' + } + } else { + debug('no pr') + if (M === '0') { + if (m === '0') { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + m + '.' + (+p + 1) + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + M + '.' + (+m + 1) + '.0' + } + } else { + ret = '>=' + M + '.' + m + '.' + p + + ' <' + (+M + 1) + '.0.0' + } + } + + debug('caret return', ret) + return ret + }) +} + +function replaceXRanges (comp, options) { + debug('replaceXRanges', comp, options) + return comp.split(/\s+/).map(function (comp) { + return replaceXRange(comp, options) + }).join(' ') +} + +function replaceXRange (comp, options) { + comp = comp.trim() + var r = options.loose ? safeRe[XRANGELOOSE] : safeRe[XRANGE] + return comp.replace(r, function (ret, gtlt, M, m, p, pr) { + debug('xRange', comp, ret, gtlt, M, m, p, pr) + var xM = isX(M) + var xm = xM || isX(m) + var xp = xm || isX(p) + var anyX = xp + + if (gtlt === '=' && anyX) { + gtlt = '' + } + + if (xM) { + if (gtlt === '>' || gtlt === '<') { + // nothing is allowed + ret = '<0.0.0' + } else { + // nothing is forbidden + ret = '*' + } + } else if (gtlt && anyX) { + // we know patch is an x, because we have any x at all. + // replace X with 0 + if (xm) { + m = 0 + } + p = 0 + + if (gtlt === '>') { + // >1 => >=2.0.0 + // >1.2 => >=1.3.0 + // >1.2.3 => >= 1.2.4 + gtlt = '>=' + if (xm) { + M = +M + 1 + m = 0 + p = 0 + } else { + m = +m + 1 + p = 0 + } + } else if (gtlt === '<=') { + // <=0.7.x is actually <0.8.0, since any 0.7.x should + // pass. Similarly, <=7.x is actually <8.0.0, etc. + gtlt = '<' + if (xm) { + M = +M + 1 + } else { + m = +m + 1 + } + } + + ret = gtlt + M + '.' + m + '.' + p + } else if (xm) { + ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' + } else if (xp) { + ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' + } + + debug('xRange return', ret) + + return ret + }) +} + +// Because * is AND-ed with everything else in the comparator, +// and '' means "any version", just remove the *s entirely. +function replaceStars (comp, options) { + debug('replaceStars', comp, options) + // Looseness is ignored here. star is always as loose as it gets! + return comp.trim().replace(safeRe[STAR], '') +} + +// This function is passed to string.replace(safeRe[HYPHENRANGE]) +// M, m, patch, prerelease, build +// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 +// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do +// 1.2 - 3.4 => >=1.2.0 <3.5.0 +function hyphenReplace ($0, + from, fM, fm, fp, fpr, fb, + to, tM, tm, tp, tpr, tb) { + if (isX(fM)) { + from = '' + } else if (isX(fm)) { + from = '>=' + fM + '.0.0' + } else if (isX(fp)) { + from = '>=' + fM + '.' + fm + '.0' + } else { + from = '>=' + from + } + + if (isX(tM)) { + to = '' + } else if (isX(tm)) { + to = '<' + (+tM + 1) + '.0.0' + } else if (isX(tp)) { + to = '<' + tM + '.' + (+tm + 1) + '.0' + } else if (tpr) { + to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr + } else { + to = '<=' + to + } + + return (from + ' ' + to).trim() +} + +// if ANY of the sets match ALL of its comparators, then pass +Range.prototype.test = function (version) { + if (!version) { + return false + } + + if (typeof version === 'string') { + version = new SemVer(version, this.options) + } + + for (var i = 0; i < this.set.length; i++) { + if (testSet(this.set[i], version, this.options)) { + return true + } + } + return false +} + +function testSet (set, version, options) { + for (var i = 0; i < set.length; i++) { + if (!set[i].test(version)) { + return false + } + } + + if (version.prerelease.length && !options.includePrerelease) { + // Find the set of versions that are allowed to have prereleases + // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 + // That should allow `1.2.3-pr.2` to pass. + // However, `1.2.4-alpha.notready` should NOT be allowed, + // even though it's within the range set by the comparators. + for (i = 0; i < set.length; i++) { + debug(set[i].semver) + if (set[i].semver === ANY) { + continue + } + + if (set[i].semver.prerelease.length > 0) { + var allowed = set[i].semver + if (allowed.major === version.major && + allowed.minor === version.minor && + allowed.patch === version.patch) { + return true + } + } + } + + // Version has a -pre, but it's not one of the ones we like. + return false + } + + return true +} + +exports.satisfies = satisfies +function satisfies (version, range, options) { + try { + range = new Range(range, options) + } catch (er) { + return false + } + return range.test(version) +} + +exports.maxSatisfying = maxSatisfying +function maxSatisfying (versions, range, options) { + var max = null + var maxSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!max || maxSV.compare(v) === -1) { + // compare(max, v, true) + max = v + maxSV = new SemVer(max, options) + } + } + }) + return max +} + +exports.minSatisfying = minSatisfying +function minSatisfying (versions, range, options) { + var min = null + var minSV = null + try { + var rangeObj = new Range(range, options) + } catch (er) { + return null + } + versions.forEach(function (v) { + if (rangeObj.test(v)) { + // satisfies(v, range, options) + if (!min || minSV.compare(v) === 1) { + // compare(min, v, true) + min = v + minSV = new SemVer(min, options) + } + } + }) + return min +} + +exports.minVersion = minVersion +function minVersion (range, loose) { + range = new Range(range, loose) + + var minver = new SemVer('0.0.0') + if (range.test(minver)) { + return minver + } + + minver = new SemVer('0.0.0-0') + if (range.test(minver)) { + return minver + } + + minver = null + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + comparators.forEach(function (comparator) { + // Clone to avoid manipulating the comparator's semver object. + var compver = new SemVer(comparator.semver.version) + switch (comparator.operator) { + case '>': + if (compver.prerelease.length === 0) { + compver.patch++ + } else { + compver.prerelease.push(0) + } + compver.raw = compver.format() + /* fallthrough */ + case '': + case '>=': + if (!minver || gt(minver, compver)) { + minver = compver + } + break + case '<': + case '<=': + /* Ignore maximum versions */ + break + /* istanbul ignore next */ + default: + throw new Error('Unexpected operation: ' + comparator.operator) + } + }) + } + + if (minver && range.test(minver)) { + return minver + } + + return null +} + +exports.validRange = validRange +function validRange (range, options) { + try { + // Return '*' instead of '' so that truthiness works. + // This will throw if it's invalid anyway + return new Range(range, options).range || '*' + } catch (er) { + return null + } +} + +// Determine if version is less than all the versions possible in the range +exports.ltr = ltr +function ltr (version, range, options) { + return outside(version, range, '<', options) +} + +// Determine if version is greater than all the versions possible in the range. +exports.gtr = gtr +function gtr (version, range, options) { + return outside(version, range, '>', options) +} + +exports.outside = outside +function outside (version, range, hilo, options) { + version = new SemVer(version, options) + range = new Range(range, options) + + var gtfn, ltefn, ltfn, comp, ecomp + switch (hilo) { + case '>': + gtfn = gt + ltefn = lte + ltfn = lt + comp = '>' + ecomp = '>=' + break + case '<': + gtfn = lt + ltefn = gte + ltfn = gt + comp = '<' + ecomp = '<=' + break + default: + throw new TypeError('Must provide a hilo val of "<" or ">"') + } + + // If it satisifes the range it is not outside + if (satisfies(version, range, options)) { + return false + } + + // From now on, variable terms are as if we're in "gtr" mode. + // but note that everything is flipped for the "ltr" function. + + for (var i = 0; i < range.set.length; ++i) { + var comparators = range.set[i] + + var high = null + var low = null + + comparators.forEach(function (comparator) { + if (comparator.semver === ANY) { + comparator = new Comparator('>=0.0.0') + } + high = high || comparator + low = low || comparator + if (gtfn(comparator.semver, high.semver, options)) { + high = comparator + } else if (ltfn(comparator.semver, low.semver, options)) { + low = comparator + } + }) + + // If the edge version comparator has a operator then our version + // isn't outside it + if (high.operator === comp || high.operator === ecomp) { + return false + } + + // If the lowest version comparator has an operator and our version + // is less than it then it isn't higher than the range + if ((!low.operator || low.operator === comp) && + ltefn(version, low.semver)) { + return false + } else if (low.operator === ecomp && ltfn(version, low.semver)) { + return false + } + } + return true +} + +exports.prerelease = prerelease +function prerelease (version, options) { + var parsed = parse(version, options) + return (parsed && parsed.prerelease.length) ? parsed.prerelease : null +} + +exports.intersects = intersects +function intersects (r1, r2, options) { + r1 = new Range(r1, options) + r2 = new Range(r2, options) + return r1.intersects(r2) +} + +exports.coerce = coerce +function coerce (version) { + if (version instanceof SemVer) { + return version + } + + if (typeof version !== 'string') { + return null + } + + var match = version.match(safeRe[COERCE]) + + if (match == null) { + return null + } + + return parse(match[1] + + '.' + (match[2] || '0') + + '.' + (match[3] || '0')) +} diff --git a/.pnpm-store/v11/files/00/08c9c80ee9610b522c9aff39ede5bb02165ddae41b60b3987cdf86807d1be81723c4e27576e37128801cfaf3c5a43e823f6c81cccb2c34286c53b6f9a09f06 b/.pnpm-store/v11/files/00/08c9c80ee9610b522c9aff39ede5bb02165ddae41b60b3987cdf86807d1be81723c4e27576e37128801cfaf3c5a43e823f6c81cccb2c34286c53b6f9a09f06 new file mode 100644 index 00000000..2ef814a9 --- /dev/null +++ b/.pnpm-store/v11/files/00/08c9c80ee9610b522c9aff39ede5bb02165ddae41b60b3987cdf86807d1be81723c4e27576e37128801cfaf3c5a43e823f6c81cccb2c34286c53b6f9a09f06 @@ -0,0 +1,3 @@ +/// +import { Writable } from "stream"; +export declare const runUseContainer: (strm: Writable, item: any, cb: Function) => void; diff --git a/.pnpm-store/v11/files/00/0af4fc03d2ecf7155b911e07941ea071519cc573fc911548cdad0701587a3617d6dc9954610260c3d1c421adc4799ccec5835ec14b994d5fc5baa8a6f83e0a b/.pnpm-store/v11/files/00/0af4fc03d2ecf7155b911e07941ea071519cc573fc911548cdad0701587a3617d6dc9954610260c3d1c421adc4799ccec5835ec14b994d5fc5baa8a6f83e0a new file mode 100644 index 00000000..06a36865 --- /dev/null +++ b/.pnpm-store/v11/files/00/0af4fc03d2ecf7155b911e07941ea071519cc573fc911548cdad0701587a3617d6dc9954610260c3d1c421adc4799ccec5835ec14b994d5fc5baa8a6f83e0a @@ -0,0 +1,34 @@ +var baseHasIn = require('./_baseHasIn'), + hasPath = require('./_hasPath'); + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +module.exports = hasIn; diff --git a/.pnpm-store/v11/files/00/0dddaba8ddb469c4ef42661d51e8f8e2d29681157dc309a0137140ef5921c46ca8b59dc2c497dd751c0e2c04055bd4f87a5a4342917ef66377d1405bfaf9f0 b/.pnpm-store/v11/files/00/0dddaba8ddb469c4ef42661d51e8f8e2d29681157dc309a0137140ef5921c46ca8b59dc2c497dd751c0e2c04055bd4f87a5a4342917ef66377d1405bfaf9f0 new file mode 100644 index 00000000..6f6fe55d --- /dev/null +++ b/.pnpm-store/v11/files/00/0dddaba8ddb469c4ef42661d51e8f8e2d29681157dc309a0137140ef5921c46ca8b59dc2c497dd751c0e2c04055bd4f87a5a4342917ef66377d1405bfaf9f0 @@ -0,0 +1,74 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _eachOfLimit; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _once = require('./once'); + +var _once2 = _interopRequireDefault(_once); + +var _iterator = require('./iterator'); + +var _iterator2 = _interopRequireDefault(_iterator); + +var _onlyOnce = require('./onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _breakLoop = require('./breakLoop'); + +var _breakLoop2 = _interopRequireDefault(_breakLoop); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _eachOfLimit(limit) { + return function (obj, iteratee, callback) { + callback = (0, _once2.default)(callback || _noop2.default); + if (limit <= 0 || !obj) { + return callback(null); + } + var nextElem = (0, _iterator2.default)(obj); + var done = false; + var running = 0; + var looping = false; + + function iterateeCallback(err, value) { + running -= 1; + if (err) { + done = true; + callback(err); + } else if (value === _breakLoop2.default || done && running <= 0) { + done = true; + return callback(null); + } else if (!looping) { + replenish(); + } + } + + function replenish() { + looping = true; + while (running < limit && !done) { + var elem = nextElem(); + if (elem === null) { + done = true; + if (running <= 0) { + callback(null); + } + return; + } + running += 1; + iteratee(elem.value, elem.key, (0, _onlyOnce2.default)(iterateeCallback)); + } + looping = false; + } + + replenish(); + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/00/1964986d531b57f13008a726001a1e7999d284cf8d03725c57160bc19406a20f8c508b10f838f325f2584daafdbc996c2dc6b0a82a0a8d67ec53898625d83c b/.pnpm-store/v11/files/00/1964986d531b57f13008a726001a1e7999d284cf8d03725c57160bc19406a20f8c508b10f838f325f2584daafdbc996c2dc6b0a82a0a8d67ec53898625d83c new file mode 100644 index 00000000..dfe69b1f --- /dev/null +++ b/.pnpm-store/v11/files/00/1964986d531b57f13008a726001a1e7999d284cf8d03725c57160bc19406a20f8c508b10f838f325f2584daafdbc996c2dc6b0a82a0a8d67ec53898625d83c @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../function')); diff --git a/.pnpm-store/v11/files/00/358a98ebfc5f002d81dba724affd650340bfa0796bef02868fbc94e81cd69c4be7a7e87c324ac43285c4eac8abd61dfd12099a280302bef6ee5b14fd8d0b03 b/.pnpm-store/v11/files/00/358a98ebfc5f002d81dba724affd650340bfa0796bef02868fbc94e81cd69c4be7a7e87c324ac43285c4eac8abd61dfd12099a280302bef6ee5b14fd8d0b03 new file mode 100644 index 00000000..238fcc3c --- /dev/null +++ b/.pnpm-store/v11/files/00/358a98ebfc5f002d81dba724affd650340bfa0796bef02868fbc94e81cd69c4be7a7e87c324ac43285c4eac8abd61dfd12099a280302bef6ee5b14fd8d0b03 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('defaultsAll', require('../defaults')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/00/43663a6ac93db030a9d0e9798d9cf51b4696410ea590cb5dc0b0c4cc1d3241ae8e3b555d7df126adb5ac432efedd39b5c16403bdf44472de9400f2497666f8 b/.pnpm-store/v11/files/00/43663a6ac93db030a9d0e9798d9cf51b4696410ea590cb5dc0b0c4cc1d3241ae8e3b555d7df126adb5ac432efedd39b5c16403bdf44472de9400f2497666f8 new file mode 100644 index 00000000..f843b56f --- /dev/null +++ b/.pnpm-store/v11/files/00/43663a6ac93db030a9d0e9798d9cf51b4696410ea590cb5dc0b0c4cc1d3241ae8e3b555d7df126adb5ac432efedd39b5c16403bdf44472de9400f2497666f8 @@ -0,0 +1,18 @@ +#!/usr/bin/env node +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const _1 = require("."); +const chalk_1 = require("chalk"); +let v = process.argv[2] || ''; +const color = process.argv[3] || ''; +const isStderr = process.argv[4] || ''; +if (color) { + try { + v = chalk_1.default[color](v); + } + catch (err) { + } +} +process.stdin.resume() + .pipe(_1.pt(v)) + .pipe(isStderr ? process.stderr : process.stdout); diff --git a/.pnpm-store/v11/files/00/4b60241f6f527747f2f52cb492319da80abe1da96f414ce473efde488a48a621793bc4d032d7457f164f74aad7f3bf5375861a27347a542aaf0747d6401d3c b/.pnpm-store/v11/files/00/4b60241f6f527747f2f52cb492319da80abe1da96f414ce473efde488a48a621793bc4d032d7457f164f74aad7f3bf5375861a27347a542aaf0747d6401d3c new file mode 100644 index 00000000..60a08e22 --- /dev/null +++ b/.pnpm-store/v11/files/00/4b60241f6f527747f2f52cb492319da80abe1da96f414ce473efde488a48a621793bc4d032d7457f164f74aad7f3bf5375861a27347a542aaf0747d6401d3c @@ -0,0 +1,63 @@ +var apply = require('./_apply'), + arrayPush = require('./_arrayPush'), + baseRest = require('./_baseRest'), + castSlice = require('./_castSlice'), + toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ +function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); +} + +module.exports = spread; diff --git a/.pnpm-store/v11/files/00/529eaec9f92e5710295d9b9bfae941ea0b7dc91deb70de4d14443f73dd018fd1fcfc9e03f773bafdbc1907634b2d65afebaa2ac7137193ba7447ee420b40c2 b/.pnpm-store/v11/files/00/529eaec9f92e5710295d9b9bfae941ea0b7dc91deb70de4d14443f73dd018fd1fcfc9e03f773bafdbc1907634b2d65afebaa2ac7137193ba7447ee420b40c2 new file mode 100644 index 00000000..afd72d0e --- /dev/null +++ b/.pnpm-store/v11/files/00/529eaec9f92e5710295d9b9bfae941ea0b7dc91deb70de4d14443f73dd018fd1fcfc9e03f773bafdbc1907634b2d65afebaa2ac7137193ba7447ee420b40c2 @@ -0,0 +1,12 @@ +language: node_js +node_js: + - 0.6 + - 0.8 + - 0.9 + - 0.10 + - 0.12 + - 4.2.4 + - 5.4.1 + - iojs-1 + - iojs-2 + - iojs-3 diff --git a/.pnpm-store/v11/files/00/67e280a82289a9e6e7064ea530d94b46cf94b6bf90a310cba50e65afe59be32e825d5ea59f3a85474b630854994d6dd8824be05f81c09f75b58699d48ecaf9 b/.pnpm-store/v11/files/00/67e280a82289a9e6e7064ea530d94b46cf94b6bf90a310cba50e65afe59be32e825d5ea59f3a85474b630854994d6dd8824be05f81c09f75b58699d48ecaf9 new file mode 100644 index 00000000..825c6f70 --- /dev/null +++ b/.pnpm-store/v11/files/00/67e280a82289a9e6e7064ea530d94b46cf94b6bf90a310cba50e65afe59be32e825d5ea59f3a85474b630854994d6dd8824be05f81c09f75b58699d48ecaf9 @@ -0,0 +1,19 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const cp = require("child_process"); +const _suman = global.__suman = (global.__suman || {}); +exports.run = function (opts) { + const script = path.resolve(__dirname + '/../../scripts/suman-postinstall.sh'); + console.log('\n'); + console.log(' => Suman will run its postinstall routine.'); + console.log('\n'); + const k = cp.spawn(script); + k.stdout.pipe(process.stdout); + k.stderr.pipe(process.stderr); + k.once('close', function (code) { + process.exit(code || 0); + }); +}; diff --git a/.pnpm-store/v11/files/00/783ce68d26e8508ef044a24da12c7e63e598acb8da73820ec0759c65ae7c31deff6d5102e7e0202e696255dc15e1956303c506537f033cd732d37b2e607c6d-exec b/.pnpm-store/v11/files/00/783ce68d26e8508ef044a24da12c7e63e598acb8da73820ec0759c65ae7c31deff6d5102e7e0202e696255dc15e1956303c506537f033cd732d37b2e607c6d-exec new file mode 100755 index 00000000..d49a7e40 --- /dev/null +++ b/.pnpm-store/v11/files/00/783ce68d26e8508ef044a24da12c7e63e598acb8da73820ec0759c65ae7c31deff6d5102e7e0202e696255dc15e1956303c506537f033cd732d37b2e607c6d-exec @@ -0,0 +1,236 @@ +#!/usr/bin/env node +/* + Copyright JS Foundation and other contributors, https://js.foundation/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/*jslint sloppy:true plusplus:true node:true rhino:true */ +/*global phantom:true */ + +var fs, system, esprima, options, fnames, forceFile, count; + +if (typeof esprima === 'undefined') { + // PhantomJS can only require() relative files + if (typeof phantom === 'object') { + fs = require('fs'); + system = require('system'); + esprima = require('./esprima'); + } else if (typeof require === 'function') { + fs = require('fs'); + try { + esprima = require('esprima'); + } catch (e) { + esprima = require('../'); + } + } else if (typeof load === 'function') { + try { + load('esprima.js'); + } catch (e) { + load('../esprima.js'); + } + } +} + +// Shims to Node.js objects when running under PhantomJS 1.7+. +if (typeof phantom === 'object') { + fs.readFileSync = fs.read; + process = { + argv: [].slice.call(system.args), + exit: phantom.exit, + on: function (evt, callback) { + callback(); + } + }; + process.argv.unshift('phantomjs'); +} + +// Shims to Node.js objects when running under Rhino. +if (typeof console === 'undefined' && typeof process === 'undefined') { + console = { log: print }; + fs = { readFileSync: readFile }; + process = { + argv: arguments, + exit: quit, + on: function (evt, callback) { + callback(); + } + }; + process.argv.unshift('esvalidate.js'); + process.argv.unshift('rhino'); +} + +function showUsage() { + console.log('Usage:'); + console.log(' esvalidate [options] [file.js...]'); + console.log(); + console.log('Available options:'); + console.log(); + console.log(' --format=type Set the report format, plain (default) or junit'); + console.log(' -v, --version Print program version'); + console.log(); + process.exit(1); +} + +options = { + format: 'plain' +}; + +fnames = []; + +process.argv.splice(2).forEach(function (entry) { + + if (forceFile || entry === '-' || entry.slice(0, 1) !== '-') { + fnames.push(entry); + } else if (entry === '-h' || entry === '--help') { + showUsage(); + } else if (entry === '-v' || entry === '--version') { + console.log('ECMAScript Validator (using Esprima version', esprima.version, ')'); + console.log(); + process.exit(0); + } else if (entry.slice(0, 9) === '--format=') { + options.format = entry.slice(9); + if (options.format !== 'plain' && options.format !== 'junit') { + console.log('Error: unknown report format ' + options.format + '.'); + process.exit(1); + } + } else if (entry === '--') { + forceFile = true; + } else { + console.log('Error: unknown option ' + entry + '.'); + process.exit(1); + } +}); + +if (fnames.length === 0) { + fnames.push(''); +} + +if (options.format === 'junit') { + console.log(''); + console.log(''); +} + +count = 0; + +function run(fname, content) { + var timestamp, syntax, name; + try { + if (typeof content !== 'string') { + throw content; + } + + if (content[0] === '#' && content[1] === '!') { + content = '//' + content.substr(2, content.length); + } + + timestamp = Date.now(); + syntax = esprima.parse(content, { tolerant: true }); + + if (options.format === 'junit') { + + name = fname; + if (name.lastIndexOf('/') >= 0) { + name = name.slice(name.lastIndexOf('/') + 1); + } + + console.log(''); + + syntax.errors.forEach(function (error) { + var msg = error.message; + msg = msg.replace(/^Line\ [0-9]*\:\ /, ''); + console.log(' '); + console.log(' ' + + error.message + '(' + name + ':' + error.lineNumber + ')' + + ''); + console.log(' '); + }); + + console.log(''); + + } else if (options.format === 'plain') { + + syntax.errors.forEach(function (error) { + var msg = error.message; + msg = msg.replace(/^Line\ [0-9]*\:\ /, ''); + msg = fname + ':' + error.lineNumber + ': ' + msg; + console.log(msg); + ++count; + }); + + } + } catch (e) { + ++count; + if (options.format === 'junit') { + console.log(''); + console.log(' '); + console.log(' ' + + e.message + '(' + fname + ((e.lineNumber) ? ':' + e.lineNumber : '') + + ')'); + console.log(' '); + console.log(''); + } else { + console.log(fname + ':' + e.lineNumber + ': ' + e.message.replace(/^Line\ [0-9]*\:\ /, '')); + } + } +} + +fnames.forEach(function (fname) { + var content = ''; + try { + if (fname && (fname !== '-' || forceFile)) { + content = fs.readFileSync(fname, 'utf-8'); + } else { + fname = ''; + process.stdin.resume(); + process.stdin.on('data', function(chunk) { + content += chunk; + }); + process.stdin.on('end', function() { + run(fname, content); + }); + return; + } + } catch (e) { + content = e; + } + run(fname, content); +}); + +process.on('exit', function () { + if (options.format === 'junit') { + console.log(''); + } + + if (count > 0) { + process.exit(1); + } + + if (count === 0 && typeof phantom === 'object') { + process.exit(0); + } +}); diff --git a/.pnpm-store/v11/files/00/99e1d1e8c7ec62ee349f48ba78b92a6976e96c1d5ae2b2bacfc30d4b49ab862df32b292a81582dcab696ab63df629e930315f4d5b3e03bc4bb764a6ea8f5a3-exec b/.pnpm-store/v11/files/00/99e1d1e8c7ec62ee349f48ba78b92a6976e96c1d5ae2b2bacfc30d4b49ab862df32b292a81582dcab696ab63df629e930315f4d5b3e03bc4bb764a6ea8f5a3-exec new file mode 100755 index 00000000..b430ee4e --- /dev/null +++ b/.pnpm-store/v11/files/00/99e1d1e8c7ec62ee349f48ba78b92a6976e96c1d5ae2b2bacfc30d4b49ab862df32b292a81582dcab696ab63df629e930315f4d5b3e03bc4bb764a6ea8f5a3-exec @@ -0,0 +1,3 @@ +import { IReporterLoadFn, IReporterLoadFnPre } from "suman-types/dts/reporters"; +export declare const getLogger: (reporterName: string) => any; +export declare const wrapReporter: (reporterName: string, fn: IReporterLoadFn) => IReporterLoadFnPre; diff --git a/.pnpm-store/v11/files/00/9b6a1fc9c321274df44ad094fa1e941e5331ebb55ce9ad1a66c6d4c8be62ecfa70aa00effb022537b5d2018453bb8753da18ab1bcfc719a71938b074eb749c b/.pnpm-store/v11/files/00/9b6a1fc9c321274df44ad094fa1e941e5331ebb55ce9ad1a66c6d4c8be62ecfa70aa00effb022537b5d2018453bb8753da18ab1bcfc719a71938b074eb749c new file mode 100644 index 00000000..7d5511b1 --- /dev/null +++ b/.pnpm-store/v11/files/00/9b6a1fc9c321274df44ad094fa1e941e5331ebb55ce9ad1a66c6d4c8be62ecfa70aa00effb022537b5d2018453bb8753da18ab1bcfc719a71938b074eb749c @@ -0,0 +1,134 @@ + +/** + * Module dependencies. + */ + +var Transport = require('../transport'); +var parser = require('engine.io-parser'); +var util = require('util'); +var debug = require('debug')('engine:ws'); + +/** + * Export the constructor. + */ + +module.exports = WebSocket; + +/** + * WebSocket transport + * + * @param {http.IncomingMessage} + * @api public + */ + +function WebSocket (req) { + Transport.call(this, req); + var self = this; + this.socket = req.websocket; + this.socket.on('message', this.onData.bind(this)); + this.socket.once('close', this.onClose.bind(this)); + this.socket.on('error', this.onError.bind(this)); + this.socket.on('headers', onHeaders); + this.writable = true; + this.perMessageDeflate = null; + + function onHeaders (headers) { + self.emit('headers', headers); + } +} + +/** + * Inherits from Transport. + */ + +util.inherits(WebSocket, Transport); + +/** + * Transport name + * + * @api public + */ + +WebSocket.prototype.name = 'websocket'; + +/** + * Advertise upgrade support. + * + * @api public + */ + +WebSocket.prototype.handlesUpgrades = true; + +/** + * Advertise framing support. + * + * @api public + */ + +WebSocket.prototype.supportsFraming = true; + +/** + * Processes the incoming data. + * + * @param {String} encoded packet + * @api private + */ + +WebSocket.prototype.onData = function (data) { + debug('received "%s"', data); + Transport.prototype.onData.call(this, data); +}; + +/** + * Writes a packet payload. + * + * @param {Array} packets + * @api private + */ + +WebSocket.prototype.send = function (packets) { + var self = this; + + for (var i = 0; i < packets.length; i++) { + var packet = packets[i]; + parser.encodePacket(packet, self.supportsBinary, send); + } + + function send (data) { + debug('writing "%s"', data); + + // always creates a new object since ws modifies it + var opts = {}; + if (packet.options) { + opts.compress = packet.options.compress; + } + + if (self.perMessageDeflate) { + var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length; + if (len < self.perMessageDeflate.threshold) { + opts.compress = false; + } + } + + self.writable = false; + self.socket.send(data, opts, onEnd); + } + + function onEnd (err) { + if (err) return self.onError('write error', err.stack); + self.writable = true; + self.emit('drain'); + } +}; + +/** + * Closes the transport. + * + * @api private + */ + +WebSocket.prototype.doClose = function (fn) { + debug('closing'); + this.socket.close(); + fn && fn(); +}; diff --git a/.pnpm-store/v11/files/00/9c7dc1c3a0148f161f1eb6d20141b7bfbed1cd7bcf0664a815c815f3bf1078f251315d2e11f254ef0aed11fa9991ceac86e7a2344dc78e9c9567ad49821deb b/.pnpm-store/v11/files/00/9c7dc1c3a0148f161f1eb6d20141b7bfbed1cd7bcf0664a815c815f3bf1078f251315d2e11f254ef0aed11fa9991ceac86e7a2344dc78e9c9567ad49821deb new file mode 100644 index 00000000..7044b872 --- /dev/null +++ b/.pnpm-store/v11/files/00/9c7dc1c3a0148f161f1eb6d20141b7bfbed1cd7bcf0664a815c815f3bf1078f251315d2e11f254ef0aed11fa9991ceac86e7a2344dc78e9c9567ad49821deb @@ -0,0 +1,25 @@ +'use strict'; + +var crypto = require('crypto'); + +function md5(bytes) { + if (typeof Buffer.from === 'function') { + // Modern Buffer API + if (Array.isArray(bytes)) { + bytes = Buffer.from(bytes); + } else if (typeof bytes === 'string') { + bytes = Buffer.from(bytes, 'utf8'); + } + } else { + // Pre-v4 Buffer API + if (Array.isArray(bytes)) { + bytes = new Buffer(bytes); + } else if (typeof bytes === 'string') { + bytes = new Buffer(bytes, 'utf8'); + } + } + + return crypto.createHash('md5').update(bytes).digest(); +} + +module.exports = md5; diff --git a/.pnpm-store/v11/files/00/e616ba10b3b84dfbda4f1fe037255a02bead87e1afd03d8796800bda48dc4566a45e483ee5f4cdf4a6bda6e07a58bba05a1e279e445871b5423a194069ab84 b/.pnpm-store/v11/files/00/e616ba10b3b84dfbda4f1fe037255a02bead87e1afd03d8796800bda48dc4566a45e483ee5f4cdf4a6bda6e07a58bba05a1e279e445871b5423a194069ab84 new file mode 100644 index 00000000..bc6c9666 --- /dev/null +++ b/.pnpm-store/v11/files/00/e616ba10b3b84dfbda4f1fe037255a02bead87e1afd03d8796800bda48dc4566a45e483ee5f4cdf4a6bda6e07a58bba05a1e279e445871b5423a194069ab84 @@ -0,0 +1,25 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isAsync = undefined; + +var _asyncify = require('../asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var supportsSymbol = typeof Symbol === 'function'; + +function isAsync(fn) { + return supportsSymbol && fn[Symbol.toStringTag] === 'AsyncFunction'; +} + +function wrapAsync(asyncFn) { + return isAsync(asyncFn) ? (0, _asyncify2.default)(asyncFn) : asyncFn; +} + +exports.default = wrapAsync; +exports.isAsync = isAsync; \ No newline at end of file diff --git a/.pnpm-store/v11/files/01/14131944a88bb00dc4de409555163f65666145061d03dec5addcd0b695704d21d1a320d137bff4381c995b19b366393f099a1c050d10025a45b25b8d4bd2b6 b/.pnpm-store/v11/files/01/14131944a88bb00dc4de409555163f65666145061d03dec5addcd0b695704d21d1a320d137bff4381c995b19b366393f099a1c050d10025a45b25b8d4bd2b6 new file mode 100644 index 00000000..e3a86c46 --- /dev/null +++ b/.pnpm-store/v11/files/01/14131944a88bb00dc4de409555163f65666145061d03dec5addcd0b695704d21d1a320d137bff4381c995b19b366393f099a1c050d10025a45b25b8d4bd2b6 @@ -0,0 +1,9 @@ +var url = require("url") + +function resolveUrl(/* ...urls */) { + return Array.prototype.reduce.call(arguments, function(resolved, nextUrl) { + return url.resolve(resolved, nextUrl) + }) +} + +module.exports = resolveUrl diff --git a/.pnpm-store/v11/files/01/27ebd58649f2b9ac5af8985d2633e54bff10ac520dd3e16f8461002cdd39c77774284da05e963efb4da749249c2d4d84eb429047431d67dc58b8d488f05e4e b/.pnpm-store/v11/files/01/27ebd58649f2b9ac5af8985d2633e54bff10ac520dd3e16f8461002cdd39c77774284da05e963efb4da749249c2d4d84eb429047431d67dc58b8d488f05e4e new file mode 100644 index 00000000..38676956 --- /dev/null +++ b/.pnpm-store/v11/files/01/27ebd58649f2b9ac5af8985d2633e54bff10ac520dd3e16f8461002cdd39c77774284da05e963efb4da749249c2d4d84eb429047431d67dc58b8d488f05e4e @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/01/33d82c638424f9e5a8e213b07cf317b7843c4fb286a393169c2587654e63d798199a78326a74adc6cd52d35d1a2da24c7642dac0c359edd4aa797152443010 b/.pnpm-store/v11/files/01/33d82c638424f9e5a8e213b07cf317b7843c4fb286a393169c2587654e63d798199a78326a74adc6cd52d35d1a2da24c7642dac0c359edd4aa797152443010 new file mode 100644 index 00000000..7fc4a31c --- /dev/null +++ b/.pnpm-store/v11/files/01/33d82c638424f9e5a8e213b07cf317b7843c4fb286a393169c2587654e63d798199a78326a74adc6cd52d35d1a2da24c7642dac0c359edd4aa797152443010 @@ -0,0 +1,110 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const EE = require("events"); +const fs = require("fs"); +const suman_events_1 = require("suman-events"); +const su = require("suman-utils"); +const async = require("async"); +const _suman = global.__suman = (global.__suman || {}); +const handle_runner_request_response_1 = require("../index-helpers/handle-runner-request-response"); +const handle_suman_once_post_1 = require("./handle-suman-once-post"); +const general_1 = require("./general"); +const socketio_child_client_1 = require("../index-helpers/socketio-child-client"); +const reporterRets = _suman.reporterRets = (_suman.reporterRets || []); +const suiteResultEmitter = _suman.suiteResultEmitter = _suman.suiteResultEmitter || new EE(); +const rb = _suman.resultBroadcaster = _suman.resultBroadcaster || new EE(); +const results = _suman.tableResults = _suman.tableResults || []; +let isShutdown = false; +exports.shutdownProcess = function () { + if (isShutdown) { + _suman.log.warning('implementation error, process shutdown has already commenced.'); + return; + } + isShutdown = true; + let fn, resultz; + if (_suman.usingRunner) { + resultz = results.map(i => i.tableData); + fn = handle_runner_request_response_1.handleRequestResponseWithRunner(resultz); + } + else if (_suman.inBrowser) { + resultz = results.map(i => i.tableData); + fn = handle_runner_request_response_1.handleRequestResponseWithRunner(resultz); + } + else { + resultz = results.filter(r => r); + resultz.forEach(function (r) { + rb.emit(String(suman_events_1.events.STANDARD_TABLE), r.tableData, r.exitCode); + }); + fn = handle_suman_once_post_1.oncePostFn; + } + const codes = results.map(i => i.exitCode); + if (su.vgt(6)) { + _suman.log.info(' => All "exit" codes from test suites => ', util.inspect(codes)); + } + const highestExitCode = Math.max.apply(null, codes); + fn(function (err) { + err && _suman.log.error(err.stack || err); + rb.emit(String(suman_events_1.events.META_TEST_ENDED)); + _suman.endLogStream && _suman.endLogStream(); + let waitForStdioToDrain = function (cb) { + if (_suman.inBrowser) { + _suman.log.info('we are in browser no drain needed.'); + return process.nextTick(cb); + } + if (_suman.isStrmDrained) { + _suman.log.info('Log stream is already drained.'); + return process.nextTick(cb); + } + let timedout = false; + let timeout = _suman.usingRunner ? 20 : 10; + let onTimeout = function () { + timedout = true; + cb(null); + }; + let to = setTimeout(onTimeout, timeout); + _suman.drainCallback = function (logpath) { + clearTimeout(to); + _suman.log.warning('Drain callback was actually called.'); + try { + fs.appendFileSync(logpath, 'Drain callback was indeed called.'); + } + finally { + console.log('we are in finally...'); + if (!timedout) { + console.log('finally has not timedout...'); + process.nextTick(cb); + } + } + }; + }; + async.parallel({ + wait: waitForStdioToDrain, + reporters: general_1.makeHandleAsyncReporters(reporterRets), + }, function (err, results) { + const exitCode = String(results.reporters ? results.reporters.exitCode : '0'); + try { + if (window && !window.__karma__) { + const childId = window.__suman.SUMAN_CHILD_ID; + const client = socketio_child_client_1.getClient(); + client.emit('BROWSER_FINISHED', { + childId: childId, + exitCode: exitCode, + type: 'BROWSER_FINISHED', + }, function () { + console.error('"BROWSER_FINISHED" message received by Suman runner.'); + console.error('If you can see this message, it is likely that the Suman runner was not able to close the browser process.'); + }); + } + } + catch (err) { + process.exit(highestExitCode); + } + }); + }); +}; +exports.handleSingleFileShutdown = function () { + suiteResultEmitter.once('suman-test-file-complete', exports.shutdownProcess); +}; diff --git a/.pnpm-store/v11/files/01/41d531b8dda286d2d32dcbb9df2b70f367445bf3ce0419358726c4448203d8adf495b0bb4a797aa0b968fe36ba8627bf34fc2d12776a88942a87fe4d7db5ab b/.pnpm-store/v11/files/01/41d531b8dda286d2d32dcbb9df2b70f367445bf3ce0419358726c4448203d8adf495b0bb4a797aa0b968fe36ba8627bf34fc2d12776a88942a87fe4d7db5ab new file mode 100644 index 00000000..84ee217e --- /dev/null +++ b/.pnpm-store/v11/files/01/41d531b8dda286d2d32dcbb9df2b70f367445bf3ce0419358726c4448203d8adf495b0bb4a797aa0b968fe36ba8627bf34fc2d12776a88942a87fe4d7db5ab @@ -0,0 +1,87 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = transform; + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of `reduce`. Takes an Object or Array, and iterates over each + * element in series, each step potentially mutating an `accumulator` value. + * The type of the accumulator defaults to the type of collection passed in. + * + * @name transform + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {*} [accumulator] - The initial state of the transform. If omitted, + * it will default to an empty Object or Array, depending on the type of `coll` + * @param {AsyncFunction} iteratee - A function applied to each item in the + * collection that potentially modifies the accumulator. + * Invoked with (accumulator, item, key, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Result is the transformed accumulator. + * Invoked with (err, result). + * @example + * + * async.transform([1,2,3], function(acc, item, index, callback) { + * // pointless async: + * process.nextTick(function() { + * acc.push(item * 2) + * callback(null) + * }); + * }, function(err, result) { + * // result is now equal to [2, 4, 6] + * }); + * + * @example + * + * async.transform({a: 1, b: 2, c: 3}, function (obj, val, key, callback) { + * setImmediate(function () { + * obj[key] = val * 2; + * callback(); + * }) + * }, function (err, result) { + * // result is equal to {a: 2, b: 4, c: 6} + * }) + */ +function transform(coll, accumulator, iteratee, callback) { + if (arguments.length <= 3) { + callback = iteratee; + iteratee = accumulator; + accumulator = (0, _isArray2.default)(coll) ? [] : {}; + } + callback = (0, _once2.default)(callback || _noop2.default); + var _iteratee = (0, _wrapAsync2.default)(iteratee); + + (0, _eachOf2.default)(coll, function (v, k, cb) { + _iteratee(accumulator, v, k, cb); + }, function (err) { + callback(err, accumulator); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/01/6b0c8f32b576d33cb0524f77370812573a1c160cbc317f908477bf602257246f58f56eff9b13420e4085828635fafbdcb7ad4b4318f60060cff5e8625d46f3 b/.pnpm-store/v11/files/01/6b0c8f32b576d33cb0524f77370812573a1c160cbc317f908477bf602257246f58f56eff9b13420e4085828635fafbdcb7ad4b4318f60060cff5e8625d46f3 new file mode 100644 index 00000000..6b4e0e16 --- /dev/null +++ b/.pnpm-store/v11/files/01/6b0c8f32b576d33cb0524f77370812573a1c160cbc317f908477bf602257246f58f56eff9b13420e4085828635fafbdcb7ad4b4318f60060cff5e8625d46f3 @@ -0,0 +1,129 @@ +# brace-expansion + +[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), +as known from sh/bash, in JavaScript. + +[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion) +[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion) +[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/) + +[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion) + +## Example + +```js +var expand = require('brace-expansion'); + +expand('file-{a,b,c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('-v{,,}') +// => ['-v', '-v', '-v'] + +expand('file{0..2}.jpg') +// => ['file0.jpg', 'file1.jpg', 'file2.jpg'] + +expand('file-{a..c}.jpg') +// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg'] + +expand('file{2..0}.jpg') +// => ['file2.jpg', 'file1.jpg', 'file0.jpg'] + +expand('file{0..4..2}.jpg') +// => ['file0.jpg', 'file2.jpg', 'file4.jpg'] + +expand('file-{a..e..2}.jpg') +// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg'] + +expand('file{00..10..5}.jpg') +// => ['file00.jpg', 'file05.jpg', 'file10.jpg'] + +expand('{{A..C},{a..c}}') +// => ['A', 'B', 'C', 'a', 'b', 'c'] + +expand('ppp{,config,oe{,conf}}') +// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf'] +``` + +## API + +```js +var expand = require('brace-expansion'); +``` + +### var expanded = expand(str) + +Return an array of all possible and valid expansions of `str`. If none are +found, `[str]` is returned. + +Valid expansions are: + +```js +/^(.*,)+(.+)?$/ +// {a,b,...} +``` + +A comma separated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +A numeric sequence from `x` to `y` inclusive, with optional increment. +If `x` or `y` start with a leading `0`, all the numbers will be padded +to have equal length. Negative numbers and backwards iteration work too. + +```js +/^-?\d+\.\.-?\d+(\.\.-?\d+)?$/ +// {x..y[..incr]} +``` + +An alphabetic sequence from `x` to `y` inclusive, with optional increment. +`x` and `y` must be exactly one character, and if given, `incr` must be a +number. + +For compatibility reasons, the string `${` is not eligible for brace expansion. + +## Installation + +With [npm](https://npmjs.org) do: + +```bash +npm install brace-expansion +``` + +## Contributors + +- [Julian Gruber](https://github.com/juliangruber) +- [Isaac Z. Schlueter](https://github.com/isaacs) + +## Sponsors + +This module is proudly supported by my [Sponsors](https://github.com/juliangruber/sponsors)! + +Do you want to support modules like this to improve their quality, stability and weigh in on new features? Then please consider donating to my [Patreon](https://www.patreon.com/juliangruber). Not sure how much of my modules you're using? Try [feross/thanks](https://github.com/feross/thanks)! + +## License + +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/01/81d67dd0a0e1f854f2585c079e5471214c3cbc1276e5320ff8ad19ebe1eb6fc5f47f56979287a4bbab00ec7294ae7b7d9d7a8a6a95ec87ecf9cb7182330b44-exec b/.pnpm-store/v11/files/01/81d67dd0a0e1f854f2585c079e5471214c3cbc1276e5320ff8ad19ebe1eb6fc5f47f56979287a4bbab00ec7294ae7b7d9d7a8a6a95ec87ecf9cb7182330b44-exec new file mode 100755 index 00000000..b7f2a35c --- /dev/null +++ b/.pnpm-store/v11/files/01/81d67dd0a0e1f854f2585c079e5471214c3cbc1276e5320ff8ad19ebe1eb6fc5f47f56979287a4bbab00ec7294ae7b7d9d7a8a6a95ec87ecf9cb7182330b44-exec @@ -0,0 +1 @@ +Readme file here primarily for version control stability. Treat it like a .gitignore file. \ No newline at end of file diff --git a/.pnpm-store/v11/files/01/97ee41faed7afe0e699471f7ece99a3f3c91e748d37c156d885e9b137ca0f020d946de22e63a5907d9b4a2478d94ff1f56249fa26d1c377fc2231f690d9e2c b/.pnpm-store/v11/files/01/97ee41faed7afe0e699471f7ece99a3f3c91e748d37c156d885e9b137ca0f020d946de22e63a5907d9b4a2478d94ff1f56249fa26d1c377fc2231f690d9e2c new file mode 100644 index 00000000..aca75295 --- /dev/null +++ b/.pnpm-store/v11/files/01/97ee41faed7afe0e699471f7ece99a3f3c91e748d37c156d885e9b137ca0f020d946de22e63a5907d9b4a2478d94ff1f56249fa26d1c377fc2231f690d9e2c @@ -0,0 +1,90 @@ +{ + "name": "class-utils", + "description": "Utils for working with JavaScript classes and prototype methods.", + "version": "0.3.6", + "homepage": "https://github.com/jonschlinkert/class-utils", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "(https://github.com/wtgtybhertgeghgtwtg)" + ], + "repository": "jonschlinkert/class-utils", + "bugs": { + "url": "https://github.com/jonschlinkert/class-utils/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "devDependencies": { + "gulp": "^3.9.1", + "gulp-eslint": "^2.0.0", + "gulp-format-md": "^0.1.7", + "gulp-istanbul": "^0.10.3", + "gulp-mocha": "^2.2.0", + "mocha": "^2.4.5", + "should": "^8.2.2", + "through2": "^2.0.1" + }, + "keywords": [ + "array", + "assign", + "class", + "copy", + "ctor", + "define", + "delegate", + "descriptor", + "extend", + "extends", + "inherit", + "inheritance", + "merge", + "method", + "object", + "prop", + "properties", + "property", + "prototype", + "util", + "utils" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "define-property", + "delegate-properties", + "is-descriptor" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/01/ec67314353989306eb143d7b8d1da050f66bbbb5b9830da5d6b88465d2c37821ddf31b36d18e7c81df6d5099bc0f06bf9e6e096e6ce623c993cc883d900ef1 b/.pnpm-store/v11/files/01/ec67314353989306eb143d7b8d1da050f66bbbb5b9830da5d6b88465d2c37821ddf31b36d18e7c81df6d5099bc0f06bf9e6e096e6ce623c993cc883d900ef1 new file mode 100644 index 00000000..0554fc3f --- /dev/null +++ b/.pnpm-store/v11/files/01/ec67314353989306eb143d7b8d1da050f66bbbb5b9830da5d6b88465d2c37821ddf31b36d18e7c81df6d5099bc0f06bf9e6e096e6ce623c993cc883d900ef1 @@ -0,0 +1,200276 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + +var ts = {}; ((module) => { +"use strict"; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => (__copyProps, mod); // Modified helper to skip setting __esModule. + +// src/typescript/typescript.ts +var typescript_exports = {}; +__export(typescript_exports, { + ANONYMOUS: () => ANONYMOUS, + AccessFlags: () => AccessFlags, + AssertionLevel: () => AssertionLevel, + AssignmentDeclarationKind: () => AssignmentDeclarationKind, + AssignmentKind: () => AssignmentKind, + Associativity: () => Associativity, + BreakpointResolver: () => ts_BreakpointResolver_exports, + BuilderFileEmit: () => BuilderFileEmit, + BuilderProgramKind: () => BuilderProgramKind, + BuilderState: () => BuilderState, + CallHierarchy: () => ts_CallHierarchy_exports, + CharacterCodes: () => CharacterCodes, + CheckFlags: () => CheckFlags, + CheckMode: () => CheckMode, + ClassificationType: () => ClassificationType, + ClassificationTypeNames: () => ClassificationTypeNames, + CommentDirectiveType: () => CommentDirectiveType, + Comparison: () => Comparison, + CompletionInfoFlags: () => CompletionInfoFlags, + CompletionTriggerKind: () => CompletionTriggerKind, + Completions: () => ts_Completions_exports, + ContainerFlags: () => ContainerFlags, + ContextFlags: () => ContextFlags, + Debug: () => Debug, + DiagnosticCategory: () => DiagnosticCategory, + Diagnostics: () => Diagnostics, + DocumentHighlights: () => DocumentHighlights, + ElementFlags: () => ElementFlags, + EmitFlags: () => EmitFlags, + EmitHint: () => EmitHint, + EmitOnly: () => EmitOnly, + EndOfLineState: () => EndOfLineState, + ExitStatus: () => ExitStatus, + ExportKind: () => ExportKind, + Extension: () => Extension, + ExternalEmitHelpers: () => ExternalEmitHelpers, + FileIncludeKind: () => FileIncludeKind, + FilePreprocessingDiagnosticsKind: () => FilePreprocessingDiagnosticsKind, + FileSystemEntryKind: () => FileSystemEntryKind, + FileWatcherEventKind: () => FileWatcherEventKind, + FindAllReferences: () => ts_FindAllReferences_exports, + FlattenLevel: () => FlattenLevel, + FlowFlags: () => FlowFlags, + ForegroundColorEscapeSequences: () => ForegroundColorEscapeSequences, + FunctionFlags: () => FunctionFlags, + GeneratedIdentifierFlags: () => GeneratedIdentifierFlags, + GetLiteralTextFlags: () => GetLiteralTextFlags, + GoToDefinition: () => ts_GoToDefinition_exports, + HighlightSpanKind: () => HighlightSpanKind, + IdentifierNameMap: () => IdentifierNameMap, + ImportKind: () => ImportKind, + ImportsNotUsedAsValues: () => ImportsNotUsedAsValues, + IndentStyle: () => IndentStyle, + IndexFlags: () => IndexFlags, + IndexKind: () => IndexKind, + InferenceFlags: () => InferenceFlags, + InferencePriority: () => InferencePriority, + InlayHintKind: () => InlayHintKind2, + InlayHints: () => ts_InlayHints_exports, + InternalEmitFlags: () => InternalEmitFlags, + InternalNodeBuilderFlags: () => InternalNodeBuilderFlags, + InternalSymbolName: () => InternalSymbolName, + IntersectionFlags: () => IntersectionFlags, + InvalidatedProjectKind: () => InvalidatedProjectKind, + JSDocParsingMode: () => JSDocParsingMode, + JsDoc: () => ts_JsDoc_exports, + JsTyping: () => ts_JsTyping_exports, + JsxEmit: () => JsxEmit, + JsxFlags: () => JsxFlags, + JsxReferenceKind: () => JsxReferenceKind, + LanguageFeatureMinimumTarget: () => LanguageFeatureMinimumTarget, + LanguageServiceMode: () => LanguageServiceMode, + LanguageVariant: () => LanguageVariant, + LexicalEnvironmentFlags: () => LexicalEnvironmentFlags, + ListFormat: () => ListFormat, + LogLevel: () => LogLevel, + MapCode: () => ts_MapCode_exports, + MemberOverrideStatus: () => MemberOverrideStatus, + ModifierFlags: () => ModifierFlags, + ModuleDetectionKind: () => ModuleDetectionKind, + ModuleInstanceState: () => ModuleInstanceState, + ModuleKind: () => ModuleKind, + ModuleResolutionKind: () => ModuleResolutionKind, + ModuleSpecifierEnding: () => ModuleSpecifierEnding, + NavigateTo: () => ts_NavigateTo_exports, + NavigationBar: () => ts_NavigationBar_exports, + NewLineKind: () => NewLineKind, + NodeBuilderFlags: () => NodeBuilderFlags, + NodeCheckFlags: () => NodeCheckFlags, + NodeFactoryFlags: () => NodeFactoryFlags, + NodeFlags: () => NodeFlags, + NodeResolutionFeatures: () => NodeResolutionFeatures, + ObjectFlags: () => ObjectFlags, + OperationCanceledException: () => OperationCanceledException, + OperatorPrecedence: () => OperatorPrecedence, + OrganizeImports: () => ts_OrganizeImports_exports, + OrganizeImportsMode: () => OrganizeImportsMode, + OuterExpressionKinds: () => OuterExpressionKinds, + OutliningElementsCollector: () => ts_OutliningElementsCollector_exports, + OutliningSpanKind: () => OutliningSpanKind, + OutputFileType: () => OutputFileType, + PackageJsonAutoImportPreference: () => PackageJsonAutoImportPreference, + PackageJsonDependencyGroup: () => PackageJsonDependencyGroup, + PatternMatchKind: () => PatternMatchKind, + PollingInterval: () => PollingInterval, + PollingWatchKind: () => PollingWatchKind, + PragmaKindFlags: () => PragmaKindFlags, + PredicateSemantics: () => PredicateSemantics, + PreparePasteEdits: () => ts_preparePasteEdits_exports, + PrivateIdentifierKind: () => PrivateIdentifierKind, + ProcessLevel: () => ProcessLevel, + ProgramUpdateLevel: () => ProgramUpdateLevel, + QuotePreference: () => QuotePreference, + RegularExpressionFlags: () => RegularExpressionFlags, + RelationComparisonResult: () => RelationComparisonResult, + Rename: () => ts_Rename_exports, + ScriptElementKind: () => ScriptElementKind, + ScriptElementKindModifier: () => ScriptElementKindModifier, + ScriptKind: () => ScriptKind, + ScriptSnapshot: () => ScriptSnapshot, + ScriptTarget: () => ScriptTarget, + SemanticClassificationFormat: () => SemanticClassificationFormat, + SemanticMeaning: () => SemanticMeaning, + SemicolonPreference: () => SemicolonPreference, + SignatureCheckMode: () => SignatureCheckMode, + SignatureFlags: () => SignatureFlags, + SignatureHelp: () => ts_SignatureHelp_exports, + SignatureInfo: () => SignatureInfo, + SignatureKind: () => SignatureKind, + SmartSelectionRange: () => ts_SmartSelectionRange_exports, + SnippetKind: () => SnippetKind, + StatisticType: () => StatisticType, + StructureIsReused: () => StructureIsReused, + SymbolAccessibility: () => SymbolAccessibility, + SymbolDisplay: () => ts_SymbolDisplay_exports, + SymbolDisplayPartKind: () => SymbolDisplayPartKind, + SymbolFlags: () => SymbolFlags, + SymbolFormatFlags: () => SymbolFormatFlags, + SyntaxKind: () => SyntaxKind, + Ternary: () => Ternary, + ThrottledCancellationToken: () => ThrottledCancellationToken, + TokenClass: () => TokenClass, + TokenFlags: () => TokenFlags, + TransformFlags: () => TransformFlags, + TypeFacts: () => TypeFacts, + TypeFlags: () => TypeFlags, + TypeFormatFlags: () => TypeFormatFlags, + TypeMapKind: () => TypeMapKind, + TypePredicateKind: () => TypePredicateKind, + TypeReferenceSerializationKind: () => TypeReferenceSerializationKind, + UnionReduction: () => UnionReduction, + UpToDateStatusType: () => UpToDateStatusType, + VarianceFlags: () => VarianceFlags, + Version: () => Version, + VersionRange: () => VersionRange, + WatchDirectoryFlags: () => WatchDirectoryFlags, + WatchDirectoryKind: () => WatchDirectoryKind, + WatchFileKind: () => WatchFileKind, + WatchLogLevel: () => WatchLogLevel, + WatchType: () => WatchType, + accessPrivateIdentifier: () => accessPrivateIdentifier, + addEmitFlags: () => addEmitFlags, + addEmitHelper: () => addEmitHelper, + addEmitHelpers: () => addEmitHelpers, + addInternalEmitFlags: () => addInternalEmitFlags, + addNodeFactoryPatcher: () => addNodeFactoryPatcher, + addObjectAllocatorPatcher: () => addObjectAllocatorPatcher, + addRange: () => addRange, + addRelatedInfo: () => addRelatedInfo, + addSyntheticLeadingComment: () => addSyntheticLeadingComment, + addSyntheticTrailingComment: () => addSyntheticTrailingComment, + addToSeen: () => addToSeen, + advancedAsyncSuperHelper: () => advancedAsyncSuperHelper, + affectsDeclarationPathOptionDeclarations: () => affectsDeclarationPathOptionDeclarations, + affectsEmitOptionDeclarations: () => affectsEmitOptionDeclarations, + allKeysStartWithDot: () => allKeysStartWithDot, + altDirectorySeparator: () => altDirectorySeparator, + and: () => and, + append: () => append, + appendIfUnique: () => appendIfUnique, + arrayFrom: () => arrayFrom, + arrayIsEqualTo: () => arrayIsEqualTo, + arrayIsHomogeneous: () => arrayIsHomogeneous, + arrayOf: () => arrayOf, + arrayReverseIterator: () => arrayReverseIterator, + arrayToMap: () => arrayToMap, + arrayToMultiMap: () => arrayToMultiMap, + arrayToNumericMap: () => arrayToNumericMap, + assertType: () => assertType, + assign: () => assign, + asyncSuperHelper: () => asyncSuperHelper, + attachFileToDiagnostics: () => attachFileToDiagnostics, + base64decode: () => base64decode, + base64encode: () => base64encode, + binarySearch: () => binarySearch, + binarySearchKey: () => binarySearchKey, + bindSourceFile: () => bindSourceFile, + breakIntoCharacterSpans: () => breakIntoCharacterSpans, + breakIntoWordSpans: () => breakIntoWordSpans, + buildLinkParts: () => buildLinkParts, + buildOpts: () => buildOpts, + buildOverload: () => buildOverload, + bundlerModuleNameResolver: () => bundlerModuleNameResolver, + canBeConvertedToAsync: () => canBeConvertedToAsync, + canHaveDecorators: () => canHaveDecorators, + canHaveExportModifier: () => canHaveExportModifier, + canHaveFlowNode: () => canHaveFlowNode, + canHaveIllegalDecorators: () => canHaveIllegalDecorators, + canHaveIllegalModifiers: () => canHaveIllegalModifiers, + canHaveIllegalType: () => canHaveIllegalType, + canHaveIllegalTypeParameters: () => canHaveIllegalTypeParameters, + canHaveJSDoc: () => canHaveJSDoc, + canHaveLocals: () => canHaveLocals, + canHaveModifiers: () => canHaveModifiers, + canHaveModuleSpecifier: () => canHaveModuleSpecifier, + canHaveSymbol: () => canHaveSymbol, + canIncludeBindAndCheckDiagnostics: () => canIncludeBindAndCheckDiagnostics, + canJsonReportNoInputFiles: () => canJsonReportNoInputFiles, + canProduceDiagnostics: () => canProduceDiagnostics, + canUsePropertyAccess: () => canUsePropertyAccess, + canWatchAffectingLocation: () => canWatchAffectingLocation, + canWatchAtTypes: () => canWatchAtTypes, + canWatchDirectoryOrFile: () => canWatchDirectoryOrFile, + canWatchDirectoryOrFilePath: () => canWatchDirectoryOrFilePath, + cartesianProduct: () => cartesianProduct, + cast: () => cast, + chainBundle: () => chainBundle, + chainDiagnosticMessages: () => chainDiagnosticMessages, + changeAnyExtension: () => changeAnyExtension, + changeCompilerHostLikeToUseCache: () => changeCompilerHostLikeToUseCache, + changeExtension: () => changeExtension, + changeFullExtension: () => changeFullExtension, + changesAffectModuleResolution: () => changesAffectModuleResolution, + changesAffectingProgramStructure: () => changesAffectingProgramStructure, + characterCodeToRegularExpressionFlag: () => characterCodeToRegularExpressionFlag, + childIsDecorated: () => childIsDecorated, + classElementOrClassElementParameterIsDecorated: () => classElementOrClassElementParameterIsDecorated, + classHasClassThisAssignment: () => classHasClassThisAssignment, + classHasDeclaredOrExplicitlyAssignedName: () => classHasDeclaredOrExplicitlyAssignedName, + classHasExplicitlyAssignedName: () => classHasExplicitlyAssignedName, + classOrConstructorParameterIsDecorated: () => classOrConstructorParameterIsDecorated, + classicNameResolver: () => classicNameResolver, + classifier: () => ts_classifier_exports, + cleanExtendedConfigCache: () => cleanExtendedConfigCache, + clear: () => clear, + clearMap: () => clearMap, + clearSharedExtendedConfigFileWatcher: () => clearSharedExtendedConfigFileWatcher, + climbPastPropertyAccess: () => climbPastPropertyAccess, + clone: () => clone, + cloneCompilerOptions: () => cloneCompilerOptions, + closeFileWatcher: () => closeFileWatcher, + closeFileWatcherOf: () => closeFileWatcherOf, + codefix: () => ts_codefix_exports, + collapseTextChangeRangesAcrossMultipleVersions: () => collapseTextChangeRangesAcrossMultipleVersions, + collectExternalModuleInfo: () => collectExternalModuleInfo, + combine: () => combine, + combinePaths: () => combinePaths, + commandLineOptionOfCustomType: () => commandLineOptionOfCustomType, + commentPragmas: () => commentPragmas, + commonOptionsWithBuild: () => commonOptionsWithBuild, + compact: () => compact, + compareBooleans: () => compareBooleans, + compareDataObjects: () => compareDataObjects, + compareDiagnostics: () => compareDiagnostics, + compareEmitHelpers: () => compareEmitHelpers, + compareNumberOfDirectorySeparators: () => compareNumberOfDirectorySeparators, + comparePaths: () => comparePaths, + comparePathsCaseInsensitive: () => comparePathsCaseInsensitive, + comparePathsCaseSensitive: () => comparePathsCaseSensitive, + comparePatternKeys: () => comparePatternKeys, + compareProperties: () => compareProperties, + compareStringsCaseInsensitive: () => compareStringsCaseInsensitive, + compareStringsCaseInsensitiveEslintCompatible: () => compareStringsCaseInsensitiveEslintCompatible, + compareStringsCaseSensitive: () => compareStringsCaseSensitive, + compareStringsCaseSensitiveUI: () => compareStringsCaseSensitiveUI, + compareTextSpans: () => compareTextSpans, + compareValues: () => compareValues, + compilerOptionsAffectDeclarationPath: () => compilerOptionsAffectDeclarationPath, + compilerOptionsAffectEmit: () => compilerOptionsAffectEmit, + compilerOptionsAffectSemanticDiagnostics: () => compilerOptionsAffectSemanticDiagnostics, + compilerOptionsDidYouMeanDiagnostics: () => compilerOptionsDidYouMeanDiagnostics, + compilerOptionsIndicateEsModules: () => compilerOptionsIndicateEsModules, + computeCommonSourceDirectoryOfFilenames: () => computeCommonSourceDirectoryOfFilenames, + computeLineAndCharacterOfPosition: () => computeLineAndCharacterOfPosition, + computeLineOfPosition: () => computeLineOfPosition, + computeLineStarts: () => computeLineStarts, + computePositionOfLineAndCharacter: () => computePositionOfLineAndCharacter, + computeSignatureWithDiagnostics: () => computeSignatureWithDiagnostics, + computeSuggestionDiagnostics: () => computeSuggestionDiagnostics, + computedOptions: () => computedOptions, + concatenate: () => concatenate, + concatenateDiagnosticMessageChains: () => concatenateDiagnosticMessageChains, + consumesNodeCoreModules: () => consumesNodeCoreModules, + contains: () => contains, + containsIgnoredPath: () => containsIgnoredPath, + containsObjectRestOrSpread: () => containsObjectRestOrSpread, + containsParseError: () => containsParseError, + containsPath: () => containsPath, + convertCompilerOptionsForTelemetry: () => convertCompilerOptionsForTelemetry, + convertCompilerOptionsFromJson: () => convertCompilerOptionsFromJson, + convertJsonOption: () => convertJsonOption, + convertToBase64: () => convertToBase64, + convertToJson: () => convertToJson, + convertToObject: () => convertToObject, + convertToOptionsWithAbsolutePaths: () => convertToOptionsWithAbsolutePaths, + convertToRelativePath: () => convertToRelativePath, + convertToTSConfig: () => convertToTSConfig, + convertTypeAcquisitionFromJson: () => convertTypeAcquisitionFromJson, + copyComments: () => copyComments, + copyEntries: () => copyEntries, + copyLeadingComments: () => copyLeadingComments, + copyProperties: () => copyProperties, + copyTrailingAsLeadingComments: () => copyTrailingAsLeadingComments, + copyTrailingComments: () => copyTrailingComments, + couldStartTrivia: () => couldStartTrivia, + countWhere: () => countWhere, + createAbstractBuilder: () => createAbstractBuilder, + createAccessorPropertyBackingField: () => createAccessorPropertyBackingField, + createAccessorPropertyGetRedirector: () => createAccessorPropertyGetRedirector, + createAccessorPropertySetRedirector: () => createAccessorPropertySetRedirector, + createBaseNodeFactory: () => createBaseNodeFactory, + createBinaryExpressionTrampoline: () => createBinaryExpressionTrampoline, + createBuilderProgram: () => createBuilderProgram, + createBuilderProgramUsingIncrementalBuildInfo: () => createBuilderProgramUsingIncrementalBuildInfo, + createBuilderStatusReporter: () => createBuilderStatusReporter, + createCacheableExportInfoMap: () => createCacheableExportInfoMap, + createCachedDirectoryStructureHost: () => createCachedDirectoryStructureHost, + createClassifier: () => createClassifier, + createCommentDirectivesMap: () => createCommentDirectivesMap, + createCompilerDiagnostic: () => createCompilerDiagnostic, + createCompilerDiagnosticForInvalidCustomType: () => createCompilerDiagnosticForInvalidCustomType, + createCompilerDiagnosticFromMessageChain: () => createCompilerDiagnosticFromMessageChain, + createCompilerHost: () => createCompilerHost, + createCompilerHostFromProgramHost: () => createCompilerHostFromProgramHost, + createCompilerHostWorker: () => createCompilerHostWorker, + createDetachedDiagnostic: () => createDetachedDiagnostic, + createDiagnosticCollection: () => createDiagnosticCollection, + createDiagnosticForFileFromMessageChain: () => createDiagnosticForFileFromMessageChain, + createDiagnosticForNode: () => createDiagnosticForNode, + createDiagnosticForNodeArray: () => createDiagnosticForNodeArray, + createDiagnosticForNodeArrayFromMessageChain: () => createDiagnosticForNodeArrayFromMessageChain, + createDiagnosticForNodeFromMessageChain: () => createDiagnosticForNodeFromMessageChain, + createDiagnosticForNodeInSourceFile: () => createDiagnosticForNodeInSourceFile, + createDiagnosticForRange: () => createDiagnosticForRange, + createDiagnosticMessageChainFromDiagnostic: () => createDiagnosticMessageChainFromDiagnostic, + createDiagnosticReporter: () => createDiagnosticReporter, + createDocumentPositionMapper: () => createDocumentPositionMapper, + createDocumentRegistry: () => createDocumentRegistry, + createDocumentRegistryInternal: () => createDocumentRegistryInternal, + createEmitAndSemanticDiagnosticsBuilderProgram: () => createEmitAndSemanticDiagnosticsBuilderProgram, + createEmitHelperFactory: () => createEmitHelperFactory, + createEmptyExports: () => createEmptyExports, + createEvaluator: () => createEvaluator, + createExpressionForJsxElement: () => createExpressionForJsxElement, + createExpressionForJsxFragment: () => createExpressionForJsxFragment, + createExpressionForObjectLiteralElementLike: () => createExpressionForObjectLiteralElementLike, + createExpressionForPropertyName: () => createExpressionForPropertyName, + createExpressionFromEntityName: () => createExpressionFromEntityName, + createExternalHelpersImportDeclarationIfNeeded: () => createExternalHelpersImportDeclarationIfNeeded, + createFileDiagnostic: () => createFileDiagnostic, + createFileDiagnosticFromMessageChain: () => createFileDiagnosticFromMessageChain, + createFlowNode: () => createFlowNode, + createForOfBindingStatement: () => createForOfBindingStatement, + createFutureSourceFile: () => createFutureSourceFile, + createGetCanonicalFileName: () => createGetCanonicalFileName, + createGetIsolatedDeclarationErrors: () => createGetIsolatedDeclarationErrors, + createGetSourceFile: () => createGetSourceFile, + createGetSymbolAccessibilityDiagnosticForNode: () => createGetSymbolAccessibilityDiagnosticForNode, + createGetSymbolAccessibilityDiagnosticForNodeName: () => createGetSymbolAccessibilityDiagnosticForNodeName, + createGetSymbolWalker: () => createGetSymbolWalker, + createIncrementalCompilerHost: () => createIncrementalCompilerHost, + createIncrementalProgram: () => createIncrementalProgram, + createJsxFactoryExpression: () => createJsxFactoryExpression, + createLanguageService: () => createLanguageService, + createLanguageServiceSourceFile: () => createLanguageServiceSourceFile, + createMemberAccessForPropertyName: () => createMemberAccessForPropertyName, + createModeAwareCache: () => createModeAwareCache, + createModeAwareCacheKey: () => createModeAwareCacheKey, + createModeMismatchDetails: () => createModeMismatchDetails, + createModuleNotFoundChain: () => createModuleNotFoundChain, + createModuleResolutionCache: () => createModuleResolutionCache, + createModuleResolutionLoader: () => createModuleResolutionLoader, + createModuleResolutionLoaderUsingGlobalCache: () => createModuleResolutionLoaderUsingGlobalCache, + createModuleSpecifierResolutionHost: () => createModuleSpecifierResolutionHost, + createMultiMap: () => createMultiMap, + createNameResolver: () => createNameResolver, + createNodeConverters: () => createNodeConverters, + createNodeFactory: () => createNodeFactory, + createOptionNameMap: () => createOptionNameMap, + createOverload: () => createOverload, + createPackageJsonImportFilter: () => createPackageJsonImportFilter, + createPackageJsonInfo: () => createPackageJsonInfo, + createParenthesizerRules: () => createParenthesizerRules, + createPatternMatcher: () => createPatternMatcher, + createPrinter: () => createPrinter, + createPrinterWithDefaults: () => createPrinterWithDefaults, + createPrinterWithRemoveComments: () => createPrinterWithRemoveComments, + createPrinterWithRemoveCommentsNeverAsciiEscape: () => createPrinterWithRemoveCommentsNeverAsciiEscape, + createPrinterWithRemoveCommentsOmitTrailingSemicolon: () => createPrinterWithRemoveCommentsOmitTrailingSemicolon, + createProgram: () => createProgram, + createProgramDiagnostics: () => createProgramDiagnostics, + createProgramHost: () => createProgramHost, + createPropertyNameNodeForIdentifierOrLiteral: () => createPropertyNameNodeForIdentifierOrLiteral, + createQueue: () => createQueue, + createRange: () => createRange, + createRedirectedBuilderProgram: () => createRedirectedBuilderProgram, + createResolutionCache: () => createResolutionCache, + createRuntimeTypeSerializer: () => createRuntimeTypeSerializer, + createScanner: () => createScanner, + createSemanticDiagnosticsBuilderProgram: () => createSemanticDiagnosticsBuilderProgram, + createSet: () => createSet, + createSolutionBuilder: () => createSolutionBuilder, + createSolutionBuilderHost: () => createSolutionBuilderHost, + createSolutionBuilderWithWatch: () => createSolutionBuilderWithWatch, + createSolutionBuilderWithWatchHost: () => createSolutionBuilderWithWatchHost, + createSortedArray: () => createSortedArray, + createSourceFile: () => createSourceFile, + createSourceMapGenerator: () => createSourceMapGenerator, + createSourceMapSource: () => createSourceMapSource, + createSuperAccessVariableStatement: () => createSuperAccessVariableStatement, + createSymbolTable: () => createSymbolTable, + createSymlinkCache: () => createSymlinkCache, + createSyntacticTypeNodeBuilder: () => createSyntacticTypeNodeBuilder, + createSystemWatchFunctions: () => createSystemWatchFunctions, + createTextChange: () => createTextChange, + createTextChangeFromStartLength: () => createTextChangeFromStartLength, + createTextChangeRange: () => createTextChangeRange, + createTextRangeFromNode: () => createTextRangeFromNode, + createTextRangeFromSpan: () => createTextRangeFromSpan, + createTextSpan: () => createTextSpan, + createTextSpanFromBounds: () => createTextSpanFromBounds, + createTextSpanFromNode: () => createTextSpanFromNode, + createTextSpanFromRange: () => createTextSpanFromRange, + createTextSpanFromStringLiteralLikeContent: () => createTextSpanFromStringLiteralLikeContent, + createTextWriter: () => createTextWriter, + createTokenRange: () => createTokenRange, + createTypeChecker: () => createTypeChecker, + createTypeReferenceDirectiveResolutionCache: () => createTypeReferenceDirectiveResolutionCache, + createTypeReferenceResolutionLoader: () => createTypeReferenceResolutionLoader, + createWatchCompilerHost: () => createWatchCompilerHost2, + createWatchCompilerHostOfConfigFile: () => createWatchCompilerHostOfConfigFile, + createWatchCompilerHostOfFilesAndCompilerOptions: () => createWatchCompilerHostOfFilesAndCompilerOptions, + createWatchFactory: () => createWatchFactory, + createWatchHost: () => createWatchHost, + createWatchProgram: () => createWatchProgram, + createWatchStatusReporter: () => createWatchStatusReporter, + createWriteFileMeasuringIO: () => createWriteFileMeasuringIO, + declarationNameToString: () => declarationNameToString, + decodeMappings: () => decodeMappings, + decodedTextSpanIntersectsWith: () => decodedTextSpanIntersectsWith, + deduplicate: () => deduplicate, + defaultHoverMaximumTruncationLength: () => defaultHoverMaximumTruncationLength, + defaultInitCompilerOptions: () => defaultInitCompilerOptions, + defaultMaximumTruncationLength: () => defaultMaximumTruncationLength, + diagnosticCategoryName: () => diagnosticCategoryName, + diagnosticToString: () => diagnosticToString, + diagnosticsEqualityComparer: () => diagnosticsEqualityComparer, + directoryProbablyExists: () => directoryProbablyExists, + directorySeparator: () => directorySeparator, + displayPart: () => displayPart, + displayPartsToString: () => displayPartsToString, + disposeEmitNodes: () => disposeEmitNodes, + documentSpansEqual: () => documentSpansEqual, + dumpTracingLegend: () => dumpTracingLegend, + elementAt: () => elementAt, + elideNodes: () => elideNodes, + emitDetachedComments: () => emitDetachedComments, + emitFiles: () => emitFiles, + emitFilesAndReportErrors: () => emitFilesAndReportErrors, + emitFilesAndReportErrorsAndGetExitStatus: () => emitFilesAndReportErrorsAndGetExitStatus, + emitModuleKindIsNonNodeESM: () => emitModuleKindIsNonNodeESM, + emitNewLineBeforeLeadingCommentOfPosition: () => emitNewLineBeforeLeadingCommentOfPosition, + emitResolverSkipsTypeChecking: () => emitResolverSkipsTypeChecking, + emitSkippedWithNoDiagnostics: () => emitSkippedWithNoDiagnostics, + emptyArray: () => emptyArray, + emptyFileSystemEntries: () => emptyFileSystemEntries, + emptyMap: () => emptyMap, + emptyOptions: () => emptyOptions, + endsWith: () => endsWith, + ensurePathIsNonModuleName: () => ensurePathIsNonModuleName, + ensureScriptKind: () => ensureScriptKind, + ensureTrailingDirectorySeparator: () => ensureTrailingDirectorySeparator, + entityNameToString: () => entityNameToString, + enumerateInsertsAndDeletes: () => enumerateInsertsAndDeletes, + equalOwnProperties: () => equalOwnProperties, + equateStringsCaseInsensitive: () => equateStringsCaseInsensitive, + equateStringsCaseSensitive: () => equateStringsCaseSensitive, + equateValues: () => equateValues, + escapeJsxAttributeString: () => escapeJsxAttributeString, + escapeLeadingUnderscores: () => escapeLeadingUnderscores, + escapeNonAsciiString: () => escapeNonAsciiString, + escapeSnippetText: () => escapeSnippetText, + escapeString: () => escapeString, + escapeTemplateSubstitution: () => escapeTemplateSubstitution, + evaluatorResult: () => evaluatorResult, + every: () => every, + exclusivelyPrefixedNodeCoreModules: () => exclusivelyPrefixedNodeCoreModules, + executeCommandLine: () => executeCommandLine, + expandPreOrPostfixIncrementOrDecrementExpression: () => expandPreOrPostfixIncrementOrDecrementExpression, + explainFiles: () => explainFiles, + explainIfFileIsRedirectAndImpliedFormat: () => explainIfFileIsRedirectAndImpliedFormat, + exportAssignmentIsAlias: () => exportAssignmentIsAlias, + expressionResultIsUnused: () => expressionResultIsUnused, + extend: () => extend, + extensionFromPath: () => extensionFromPath, + extensionIsTS: () => extensionIsTS, + extensionsNotSupportingExtensionlessResolution: () => extensionsNotSupportingExtensionlessResolution, + externalHelpersModuleNameText: () => externalHelpersModuleNameText, + factory: () => factory, + fileExtensionIs: () => fileExtensionIs, + fileExtensionIsOneOf: () => fileExtensionIsOneOf, + fileIncludeReasonToDiagnostics: () => fileIncludeReasonToDiagnostics, + fileShouldUseJavaScriptRequire: () => fileShouldUseJavaScriptRequire, + filter: () => filter, + filterMutate: () => filterMutate, + filterSemanticDiagnostics: () => filterSemanticDiagnostics, + find: () => find, + findAncestor: () => findAncestor, + findBestPatternMatch: () => findBestPatternMatch, + findChildOfKind: () => findChildOfKind, + findComputedPropertyNameCacheAssignment: () => findComputedPropertyNameCacheAssignment, + findConfigFile: () => findConfigFile, + findConstructorDeclaration: () => findConstructorDeclaration, + findContainingList: () => findContainingList, + findDiagnosticForNode: () => findDiagnosticForNode, + findFirstNonJsxWhitespaceToken: () => findFirstNonJsxWhitespaceToken, + findIndex: () => findIndex, + findLast: () => findLast, + findLastIndex: () => findLastIndex, + findListItemInfo: () => findListItemInfo, + findModifier: () => findModifier, + findNextToken: () => findNextToken, + findPackageJson: () => findPackageJson, + findPackageJsons: () => findPackageJsons, + findPrecedingMatchingToken: () => findPrecedingMatchingToken, + findPrecedingToken: () => findPrecedingToken, + findSuperStatementIndexPath: () => findSuperStatementIndexPath, + findTokenOnLeftOfPosition: () => findTokenOnLeftOfPosition, + findUseStrictPrologue: () => findUseStrictPrologue, + first: () => first, + firstDefined: () => firstDefined, + firstDefinedIterator: () => firstDefinedIterator, + firstIterator: () => firstIterator, + firstOrOnly: () => firstOrOnly, + firstOrUndefined: () => firstOrUndefined, + firstOrUndefinedIterator: () => firstOrUndefinedIterator, + fixupCompilerOptions: () => fixupCompilerOptions, + flatMap: () => flatMap, + flatMapIterator: () => flatMapIterator, + flatMapToMutable: () => flatMapToMutable, + flatten: () => flatten, + flattenCommaList: () => flattenCommaList, + flattenDestructuringAssignment: () => flattenDestructuringAssignment, + flattenDestructuringBinding: () => flattenDestructuringBinding, + flattenDiagnosticMessageText: () => flattenDiagnosticMessageText, + forEach: () => forEach, + forEachAncestor: () => forEachAncestor, + forEachAncestorDirectory: () => forEachAncestorDirectory, + forEachAncestorDirectoryStoppingAtGlobalCache: () => forEachAncestorDirectoryStoppingAtGlobalCache, + forEachChild: () => forEachChild, + forEachChildRecursively: () => forEachChildRecursively, + forEachDynamicImportOrRequireCall: () => forEachDynamicImportOrRequireCall, + forEachEmittedFile: () => forEachEmittedFile, + forEachEnclosingBlockScopeContainer: () => forEachEnclosingBlockScopeContainer, + forEachEntry: () => forEachEntry, + forEachExternalModuleToImportFrom: () => forEachExternalModuleToImportFrom, + forEachImportClauseDeclaration: () => forEachImportClauseDeclaration, + forEachKey: () => forEachKey, + forEachLeadingCommentRange: () => forEachLeadingCommentRange, + forEachNameInAccessChainWalkingLeft: () => forEachNameInAccessChainWalkingLeft, + forEachNameOfDefaultExport: () => forEachNameOfDefaultExport, + forEachOptionsSyntaxByName: () => forEachOptionsSyntaxByName, + forEachProjectReference: () => forEachProjectReference, + forEachPropertyAssignment: () => forEachPropertyAssignment, + forEachResolvedProjectReference: () => forEachResolvedProjectReference, + forEachReturnStatement: () => forEachReturnStatement, + forEachRight: () => forEachRight, + forEachTrailingCommentRange: () => forEachTrailingCommentRange, + forEachTsConfigPropArray: () => forEachTsConfigPropArray, + forEachUnique: () => forEachUnique, + forEachYieldExpression: () => forEachYieldExpression, + formatColorAndReset: () => formatColorAndReset, + formatDiagnostic: () => formatDiagnostic, + formatDiagnostics: () => formatDiagnostics, + formatDiagnosticsWithColorAndContext: () => formatDiagnosticsWithColorAndContext, + formatGeneratedName: () => formatGeneratedName, + formatGeneratedNamePart: () => formatGeneratedNamePart, + formatLocation: () => formatLocation, + formatMessage: () => formatMessage, + formatStringFromArgs: () => formatStringFromArgs, + formatting: () => ts_formatting_exports, + generateDjb2Hash: () => generateDjb2Hash, + generateTSConfig: () => generateTSConfig, + getAdjustedReferenceLocation: () => getAdjustedReferenceLocation, + getAdjustedRenameLocation: () => getAdjustedRenameLocation, + getAliasDeclarationFromName: () => getAliasDeclarationFromName, + getAllAccessorDeclarations: () => getAllAccessorDeclarations, + getAllDecoratorsOfClass: () => getAllDecoratorsOfClass, + getAllDecoratorsOfClassElement: () => getAllDecoratorsOfClassElement, + getAllJSDocTags: () => getAllJSDocTags, + getAllJSDocTagsOfKind: () => getAllJSDocTagsOfKind, + getAllKeys: () => getAllKeys, + getAllProjectOutputs: () => getAllProjectOutputs, + getAllSuperTypeNodes: () => getAllSuperTypeNodes, + getAllowImportingTsExtensions: () => getAllowImportingTsExtensions, + getAllowJSCompilerOption: () => getAllowJSCompilerOption, + getAllowSyntheticDefaultImports: () => getAllowSyntheticDefaultImports, + getAncestor: () => getAncestor, + getAnyExtensionFromPath: () => getAnyExtensionFromPath, + getAreDeclarationMapsEnabled: () => getAreDeclarationMapsEnabled, + getAssignedExpandoInitializer: () => getAssignedExpandoInitializer, + getAssignedName: () => getAssignedName, + getAssignmentDeclarationKind: () => getAssignmentDeclarationKind, + getAssignmentDeclarationPropertyAccessKind: () => getAssignmentDeclarationPropertyAccessKind, + getAssignmentTargetKind: () => getAssignmentTargetKind, + getAutomaticTypeDirectiveNames: () => getAutomaticTypeDirectiveNames, + getBaseFileName: () => getBaseFileName, + getBinaryOperatorPrecedence: () => getBinaryOperatorPrecedence, + getBuildInfo: () => getBuildInfo, + getBuildInfoFileVersionMap: () => getBuildInfoFileVersionMap, + getBuildInfoText: () => getBuildInfoText, + getBuildOrderFromAnyBuildOrder: () => getBuildOrderFromAnyBuildOrder, + getBuilderCreationParameters: () => getBuilderCreationParameters, + getBuilderFileEmit: () => getBuilderFileEmit, + getCanonicalDiagnostic: () => getCanonicalDiagnostic, + getCheckFlags: () => getCheckFlags, + getClassExtendsHeritageElement: () => getClassExtendsHeritageElement, + getClassLikeDeclarationOfSymbol: () => getClassLikeDeclarationOfSymbol, + getCombinedLocalAndExportSymbolFlags: () => getCombinedLocalAndExportSymbolFlags, + getCombinedModifierFlags: () => getCombinedModifierFlags, + getCombinedNodeFlags: () => getCombinedNodeFlags, + getCombinedNodeFlagsAlwaysIncludeJSDoc: () => getCombinedNodeFlagsAlwaysIncludeJSDoc, + getCommentRange: () => getCommentRange, + getCommonSourceDirectory: () => getCommonSourceDirectory, + getCommonSourceDirectoryOfConfig: () => getCommonSourceDirectoryOfConfig, + getCompilerOptionValue: () => getCompilerOptionValue, + getConditions: () => getConditions, + getConfigFileParsingDiagnostics: () => getConfigFileParsingDiagnostics, + getConstantValue: () => getConstantValue, + getContainerFlags: () => getContainerFlags, + getContainerNode: () => getContainerNode, + getContainingClass: () => getContainingClass, + getContainingClassExcludingClassDecorators: () => getContainingClassExcludingClassDecorators, + getContainingClassStaticBlock: () => getContainingClassStaticBlock, + getContainingFunction: () => getContainingFunction, + getContainingFunctionDeclaration: () => getContainingFunctionDeclaration, + getContainingFunctionOrClassStaticBlock: () => getContainingFunctionOrClassStaticBlock, + getContainingNodeArray: () => getContainingNodeArray, + getContainingObjectLiteralElement: () => getContainingObjectLiteralElement, + getContextualTypeFromParent: () => getContextualTypeFromParent, + getContextualTypeFromParentOrAncestorTypeNode: () => getContextualTypeFromParentOrAncestorTypeNode, + getDeclarationDiagnostics: () => getDeclarationDiagnostics, + getDeclarationEmitExtensionForPath: () => getDeclarationEmitExtensionForPath, + getDeclarationEmitOutputFilePath: () => getDeclarationEmitOutputFilePath, + getDeclarationEmitOutputFilePathWorker: () => getDeclarationEmitOutputFilePathWorker, + getDeclarationFileExtension: () => getDeclarationFileExtension, + getDeclarationFromName: () => getDeclarationFromName, + getDeclarationModifierFlagsFromSymbol: () => getDeclarationModifierFlagsFromSymbol, + getDeclarationOfKind: () => getDeclarationOfKind, + getDeclarationsOfKind: () => getDeclarationsOfKind, + getDeclaredExpandoInitializer: () => getDeclaredExpandoInitializer, + getDecorators: () => getDecorators, + getDefaultCompilerOptions: () => getDefaultCompilerOptions2, + getDefaultFormatCodeSettings: () => getDefaultFormatCodeSettings, + getDefaultLibFileName: () => getDefaultLibFileName, + getDefaultLibFilePath: () => getDefaultLibFilePath, + getDefaultLikeExportInfo: () => getDefaultLikeExportInfo, + getDefaultLikeExportNameFromDeclaration: () => getDefaultLikeExportNameFromDeclaration, + getDefaultResolutionModeForFileWorker: () => getDefaultResolutionModeForFileWorker, + getDiagnosticText: () => getDiagnosticText, + getDiagnosticsWithinSpan: () => getDiagnosticsWithinSpan, + getDirectoryPath: () => getDirectoryPath, + getDirectoryToWatchFailedLookupLocation: () => getDirectoryToWatchFailedLookupLocation, + getDirectoryToWatchFailedLookupLocationFromTypeRoot: () => getDirectoryToWatchFailedLookupLocationFromTypeRoot, + getDocumentPositionMapper: () => getDocumentPositionMapper, + getDocumentSpansEqualityComparer: () => getDocumentSpansEqualityComparer, + getESModuleInterop: () => getESModuleInterop, + getEditsForFileRename: () => getEditsForFileRename, + getEffectiveBaseTypeNode: () => getEffectiveBaseTypeNode, + getEffectiveConstraintOfTypeParameter: () => getEffectiveConstraintOfTypeParameter, + getEffectiveContainerForJSDocTemplateTag: () => getEffectiveContainerForJSDocTemplateTag, + getEffectiveImplementsTypeNodes: () => getEffectiveImplementsTypeNodes, + getEffectiveInitializer: () => getEffectiveInitializer, + getEffectiveJSDocHost: () => getEffectiveJSDocHost, + getEffectiveModifierFlags: () => getEffectiveModifierFlags, + getEffectiveModifierFlagsAlwaysIncludeJSDoc: () => getEffectiveModifierFlagsAlwaysIncludeJSDoc, + getEffectiveModifierFlagsNoCache: () => getEffectiveModifierFlagsNoCache, + getEffectiveReturnTypeNode: () => getEffectiveReturnTypeNode, + getEffectiveSetAccessorTypeAnnotationNode: () => getEffectiveSetAccessorTypeAnnotationNode, + getEffectiveTypeAnnotationNode: () => getEffectiveTypeAnnotationNode, + getEffectiveTypeParameterDeclarations: () => getEffectiveTypeParameterDeclarations, + getEffectiveTypeRoots: () => getEffectiveTypeRoots, + getElementOrPropertyAccessArgumentExpressionOrName: () => getElementOrPropertyAccessArgumentExpressionOrName, + getElementOrPropertyAccessName: () => getElementOrPropertyAccessName, + getElementsOfBindingOrAssignmentPattern: () => getElementsOfBindingOrAssignmentPattern, + getEmitDeclarations: () => getEmitDeclarations, + getEmitFlags: () => getEmitFlags, + getEmitHelpers: () => getEmitHelpers, + getEmitModuleDetectionKind: () => getEmitModuleDetectionKind, + getEmitModuleFormatOfFileWorker: () => getEmitModuleFormatOfFileWorker, + getEmitModuleKind: () => getEmitModuleKind, + getEmitModuleResolutionKind: () => getEmitModuleResolutionKind, + getEmitScriptTarget: () => getEmitScriptTarget, + getEmitStandardClassFields: () => getEmitStandardClassFields, + getEnclosingBlockScopeContainer: () => getEnclosingBlockScopeContainer, + getEnclosingContainer: () => getEnclosingContainer, + getEncodedSemanticClassifications: () => getEncodedSemanticClassifications, + getEncodedSyntacticClassifications: () => getEncodedSyntacticClassifications, + getEndLinePosition: () => getEndLinePosition, + getEntityNameFromTypeNode: () => getEntityNameFromTypeNode, + getEntrypointsFromPackageJsonInfo: () => getEntrypointsFromPackageJsonInfo, + getErrorCountForSummary: () => getErrorCountForSummary, + getErrorSpanForNode: () => getErrorSpanForNode, + getErrorSummaryText: () => getErrorSummaryText, + getEscapedTextOfIdentifierOrLiteral: () => getEscapedTextOfIdentifierOrLiteral, + getEscapedTextOfJsxAttributeName: () => getEscapedTextOfJsxAttributeName, + getEscapedTextOfJsxNamespacedName: () => getEscapedTextOfJsxNamespacedName, + getExpandoInitializer: () => getExpandoInitializer, + getExportAssignmentExpression: () => getExportAssignmentExpression, + getExportInfoMap: () => getExportInfoMap, + getExportNeedsImportStarHelper: () => getExportNeedsImportStarHelper, + getExpressionAssociativity: () => getExpressionAssociativity, + getExpressionPrecedence: () => getExpressionPrecedence, + getExternalHelpersModuleName: () => getExternalHelpersModuleName, + getExternalModuleImportEqualsDeclarationExpression: () => getExternalModuleImportEqualsDeclarationExpression, + getExternalModuleName: () => getExternalModuleName, + getExternalModuleNameFromDeclaration: () => getExternalModuleNameFromDeclaration, + getExternalModuleNameFromPath: () => getExternalModuleNameFromPath, + getExternalModuleNameLiteral: () => getExternalModuleNameLiteral, + getExternalModuleRequireArgument: () => getExternalModuleRequireArgument, + getFallbackOptions: () => getFallbackOptions, + getFileEmitOutput: () => getFileEmitOutput, + getFileMatcherPatterns: () => getFileMatcherPatterns, + getFileNamesFromConfigSpecs: () => getFileNamesFromConfigSpecs, + getFileWatcherEventKind: () => getFileWatcherEventKind, + getFilesInErrorForSummary: () => getFilesInErrorForSummary, + getFirstConstructorWithBody: () => getFirstConstructorWithBody, + getFirstIdentifier: () => getFirstIdentifier, + getFirstNonSpaceCharacterPosition: () => getFirstNonSpaceCharacterPosition, + getFirstProjectOutput: () => getFirstProjectOutput, + getFixableErrorSpanExpression: () => getFixableErrorSpanExpression, + getFormatCodeSettingsForWriting: () => getFormatCodeSettingsForWriting, + getFullWidth: () => getFullWidth, + getFunctionFlags: () => getFunctionFlags, + getHeritageClause: () => getHeritageClause, + getHostSignatureFromJSDoc: () => getHostSignatureFromJSDoc, + getIdentifierAutoGenerate: () => getIdentifierAutoGenerate, + getIdentifierGeneratedImportReference: () => getIdentifierGeneratedImportReference, + getIdentifierTypeArguments: () => getIdentifierTypeArguments, + getImmediatelyInvokedFunctionExpression: () => getImmediatelyInvokedFunctionExpression, + getImpliedNodeFormatForEmitWorker: () => getImpliedNodeFormatForEmitWorker, + getImpliedNodeFormatForFile: () => getImpliedNodeFormatForFile, + getImpliedNodeFormatForFileWorker: () => getImpliedNodeFormatForFileWorker, + getImportNeedsImportDefaultHelper: () => getImportNeedsImportDefaultHelper, + getImportNeedsImportStarHelper: () => getImportNeedsImportStarHelper, + getIndentString: () => getIndentString, + getInferredLibraryNameResolveFrom: () => getInferredLibraryNameResolveFrom, + getInitializedVariables: () => getInitializedVariables, + getInitializerOfBinaryExpression: () => getInitializerOfBinaryExpression, + getInitializerOfBindingOrAssignmentElement: () => getInitializerOfBindingOrAssignmentElement, + getInterfaceBaseTypeNodes: () => getInterfaceBaseTypeNodes, + getInternalEmitFlags: () => getInternalEmitFlags, + getInvokedExpression: () => getInvokedExpression, + getIsFileExcluded: () => getIsFileExcluded, + getIsolatedModules: () => getIsolatedModules, + getJSDocAugmentsTag: () => getJSDocAugmentsTag, + getJSDocClassTag: () => getJSDocClassTag, + getJSDocCommentRanges: () => getJSDocCommentRanges, + getJSDocCommentsAndTags: () => getJSDocCommentsAndTags, + getJSDocDeprecatedTag: () => getJSDocDeprecatedTag, + getJSDocDeprecatedTagNoCache: () => getJSDocDeprecatedTagNoCache, + getJSDocEnumTag: () => getJSDocEnumTag, + getJSDocHost: () => getJSDocHost, + getJSDocImplementsTags: () => getJSDocImplementsTags, + getJSDocOverloadTags: () => getJSDocOverloadTags, + getJSDocOverrideTagNoCache: () => getJSDocOverrideTagNoCache, + getJSDocParameterTags: () => getJSDocParameterTags, + getJSDocParameterTagsNoCache: () => getJSDocParameterTagsNoCache, + getJSDocPrivateTag: () => getJSDocPrivateTag, + getJSDocPrivateTagNoCache: () => getJSDocPrivateTagNoCache, + getJSDocProtectedTag: () => getJSDocProtectedTag, + getJSDocProtectedTagNoCache: () => getJSDocProtectedTagNoCache, + getJSDocPublicTag: () => getJSDocPublicTag, + getJSDocPublicTagNoCache: () => getJSDocPublicTagNoCache, + getJSDocReadonlyTag: () => getJSDocReadonlyTag, + getJSDocReadonlyTagNoCache: () => getJSDocReadonlyTagNoCache, + getJSDocReturnTag: () => getJSDocReturnTag, + getJSDocReturnType: () => getJSDocReturnType, + getJSDocRoot: () => getJSDocRoot, + getJSDocSatisfiesExpressionType: () => getJSDocSatisfiesExpressionType, + getJSDocSatisfiesTag: () => getJSDocSatisfiesTag, + getJSDocTags: () => getJSDocTags, + getJSDocTemplateTag: () => getJSDocTemplateTag, + getJSDocThisTag: () => getJSDocThisTag, + getJSDocType: () => getJSDocType, + getJSDocTypeAliasName: () => getJSDocTypeAliasName, + getJSDocTypeAssertionType: () => getJSDocTypeAssertionType, + getJSDocTypeParameterDeclarations: () => getJSDocTypeParameterDeclarations, + getJSDocTypeParameterTags: () => getJSDocTypeParameterTags, + getJSDocTypeParameterTagsNoCache: () => getJSDocTypeParameterTagsNoCache, + getJSDocTypeTag: () => getJSDocTypeTag, + getJSXImplicitImportBase: () => getJSXImplicitImportBase, + getJSXRuntimeImport: () => getJSXRuntimeImport, + getJSXTransformEnabled: () => getJSXTransformEnabled, + getKeyForCompilerOptions: () => getKeyForCompilerOptions, + getLanguageVariant: () => getLanguageVariant, + getLastChild: () => getLastChild, + getLeadingCommentRanges: () => getLeadingCommentRanges, + getLeadingCommentRangesOfNode: () => getLeadingCommentRangesOfNode, + getLeftmostAccessExpression: () => getLeftmostAccessExpression, + getLeftmostExpression: () => getLeftmostExpression, + getLibFileNameFromLibReference: () => getLibFileNameFromLibReference, + getLibNameFromLibReference: () => getLibNameFromLibReference, + getLibraryNameFromLibFileName: () => getLibraryNameFromLibFileName, + getLineAndCharacterOfPosition: () => getLineAndCharacterOfPosition, + getLineInfo: () => getLineInfo, + getLineOfLocalPosition: () => getLineOfLocalPosition, + getLineStartPositionForPosition: () => getLineStartPositionForPosition, + getLineStarts: () => getLineStarts, + getLinesBetweenPositionAndNextNonWhitespaceCharacter: () => getLinesBetweenPositionAndNextNonWhitespaceCharacter, + getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter: () => getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter, + getLinesBetweenPositions: () => getLinesBetweenPositions, + getLinesBetweenRangeEndAndRangeStart: () => getLinesBetweenRangeEndAndRangeStart, + getLinesBetweenRangeEndPositions: () => getLinesBetweenRangeEndPositions, + getLiteralText: () => getLiteralText, + getLocalNameForExternalImport: () => getLocalNameForExternalImport, + getLocalSymbolForExportDefault: () => getLocalSymbolForExportDefault, + getLocaleSpecificMessage: () => getLocaleSpecificMessage, + getLocaleTimeString: () => getLocaleTimeString, + getMappedContextSpan: () => getMappedContextSpan, + getMappedDocumentSpan: () => getMappedDocumentSpan, + getMappedLocation: () => getMappedLocation, + getMatchedFileSpec: () => getMatchedFileSpec, + getMatchedIncludeSpec: () => getMatchedIncludeSpec, + getMeaningFromDeclaration: () => getMeaningFromDeclaration, + getMeaningFromLocation: () => getMeaningFromLocation, + getMembersOfDeclaration: () => getMembersOfDeclaration, + getModeForFileReference: () => getModeForFileReference, + getModeForResolutionAtIndex: () => getModeForResolutionAtIndex, + getModeForUsageLocation: () => getModeForUsageLocation, + getModifiedTime: () => getModifiedTime, + getModifiers: () => getModifiers, + getModuleInstanceState: () => getModuleInstanceState, + getModuleNameStringLiteralAt: () => getModuleNameStringLiteralAt, + getModuleSpecifierEndingPreference: () => getModuleSpecifierEndingPreference, + getModuleSpecifierResolverHost: () => getModuleSpecifierResolverHost, + getNameForExportedSymbol: () => getNameForExportedSymbol, + getNameFromImportAttribute: () => getNameFromImportAttribute, + getNameFromIndexInfo: () => getNameFromIndexInfo, + getNameFromPropertyName: () => getNameFromPropertyName, + getNameOfAccessExpression: () => getNameOfAccessExpression, + getNameOfCompilerOptionValue: () => getNameOfCompilerOptionValue, + getNameOfDeclaration: () => getNameOfDeclaration, + getNameOfExpando: () => getNameOfExpando, + getNameOfJSDocTypedef: () => getNameOfJSDocTypedef, + getNameOfScriptTarget: () => getNameOfScriptTarget, + getNameOrArgument: () => getNameOrArgument, + getNameTable: () => getNameTable, + getNamespaceDeclarationNode: () => getNamespaceDeclarationNode, + getNewLineCharacter: () => getNewLineCharacter, + getNewLineKind: () => getNewLineKind, + getNewLineOrDefaultFromHost: () => getNewLineOrDefaultFromHost, + getNewTargetContainer: () => getNewTargetContainer, + getNextJSDocCommentLocation: () => getNextJSDocCommentLocation, + getNodeChildren: () => getNodeChildren, + getNodeForGeneratedName: () => getNodeForGeneratedName, + getNodeId: () => getNodeId, + getNodeKind: () => getNodeKind, + getNodeModifiers: () => getNodeModifiers, + getNodeModulePathParts: () => getNodeModulePathParts, + getNonAssignedNameOfDeclaration: () => getNonAssignedNameOfDeclaration, + getNonAssignmentOperatorForCompoundAssignment: () => getNonAssignmentOperatorForCompoundAssignment, + getNonAugmentationDeclaration: () => getNonAugmentationDeclaration, + getNonDecoratorTokenPosOfNode: () => getNonDecoratorTokenPosOfNode, + getNonIncrementalBuildInfoRoots: () => getNonIncrementalBuildInfoRoots, + getNonModifierTokenPosOfNode: () => getNonModifierTokenPosOfNode, + getNormalizedAbsolutePath: () => getNormalizedAbsolutePath, + getNormalizedAbsolutePathWithoutRoot: () => getNormalizedAbsolutePathWithoutRoot, + getNormalizedPathComponents: () => getNormalizedPathComponents, + getObjectFlags: () => getObjectFlags, + getOperatorAssociativity: () => getOperatorAssociativity, + getOperatorPrecedence: () => getOperatorPrecedence, + getOptionFromName: () => getOptionFromName, + getOptionsForLibraryResolution: () => getOptionsForLibraryResolution, + getOptionsNameMap: () => getOptionsNameMap, + getOptionsSyntaxByArrayElementValue: () => getOptionsSyntaxByArrayElementValue, + getOptionsSyntaxByValue: () => getOptionsSyntaxByValue, + getOrCreateEmitNode: () => getOrCreateEmitNode, + getOrUpdate: () => getOrUpdate, + getOriginalNode: () => getOriginalNode, + getOriginalNodeId: () => getOriginalNodeId, + getOutputDeclarationFileName: () => getOutputDeclarationFileName, + getOutputDeclarationFileNameWorker: () => getOutputDeclarationFileNameWorker, + getOutputExtension: () => getOutputExtension, + getOutputFileNames: () => getOutputFileNames, + getOutputJSFileNameWorker: () => getOutputJSFileNameWorker, + getOutputPathsFor: () => getOutputPathsFor, + getOwnEmitOutputFilePath: () => getOwnEmitOutputFilePath, + getOwnKeys: () => getOwnKeys, + getOwnValues: () => getOwnValues, + getPackageJsonTypesVersionsPaths: () => getPackageJsonTypesVersionsPaths, + getPackageNameFromTypesPackageName: () => getPackageNameFromTypesPackageName, + getPackageScopeForPath: () => getPackageScopeForPath, + getParameterSymbolFromJSDoc: () => getParameterSymbolFromJSDoc, + getParentNodeInSpan: () => getParentNodeInSpan, + getParseTreeNode: () => getParseTreeNode, + getParsedCommandLineOfConfigFile: () => getParsedCommandLineOfConfigFile, + getPathComponents: () => getPathComponents, + getPathFromPathComponents: () => getPathFromPathComponents, + getPathUpdater: () => getPathUpdater, + getPathsBasePath: () => getPathsBasePath, + getPatternFromSpec: () => getPatternFromSpec, + getPendingEmitKindWithSeen: () => getPendingEmitKindWithSeen, + getPositionOfLineAndCharacter: () => getPositionOfLineAndCharacter, + getPossibleGenericSignatures: () => getPossibleGenericSignatures, + getPossibleOriginalInputExtensionForExtension: () => getPossibleOriginalInputExtensionForExtension, + getPossibleOriginalInputPathWithoutChangingExt: () => getPossibleOriginalInputPathWithoutChangingExt, + getPossibleTypeArgumentsInfo: () => getPossibleTypeArgumentsInfo, + getPreEmitDiagnostics: () => getPreEmitDiagnostics, + getPrecedingNonSpaceCharacterPosition: () => getPrecedingNonSpaceCharacterPosition, + getPrivateIdentifier: () => getPrivateIdentifier, + getProperties: () => getProperties, + getProperty: () => getProperty, + getPropertyAssignmentAliasLikeExpression: () => getPropertyAssignmentAliasLikeExpression, + getPropertyNameForPropertyNameNode: () => getPropertyNameForPropertyNameNode, + getPropertyNameFromType: () => getPropertyNameFromType, + getPropertyNameOfBindingOrAssignmentElement: () => getPropertyNameOfBindingOrAssignmentElement, + getPropertySymbolFromBindingElement: () => getPropertySymbolFromBindingElement, + getPropertySymbolsFromContextualType: () => getPropertySymbolsFromContextualType, + getQuoteFromPreference: () => getQuoteFromPreference, + getQuotePreference: () => getQuotePreference, + getRangesWhere: () => getRangesWhere, + getRefactorContextSpan: () => getRefactorContextSpan, + getReferencedFileLocation: () => getReferencedFileLocation, + getRegexFromPattern: () => getRegexFromPattern, + getRegularExpressionForWildcard: () => getRegularExpressionForWildcard, + getRegularExpressionsForWildcards: () => getRegularExpressionsForWildcards, + getRelativePathFromDirectory: () => getRelativePathFromDirectory, + getRelativePathFromFile: () => getRelativePathFromFile, + getRelativePathToDirectoryOrUrl: () => getRelativePathToDirectoryOrUrl, + getRenameLocation: () => getRenameLocation, + getReplacementSpanForContextToken: () => getReplacementSpanForContextToken, + getResolutionDiagnostic: () => getResolutionDiagnostic, + getResolutionModeOverride: () => getResolutionModeOverride, + getResolveJsonModule: () => getResolveJsonModule, + getResolvePackageJsonExports: () => getResolvePackageJsonExports, + getResolvePackageJsonImports: () => getResolvePackageJsonImports, + getResolvedExternalModuleName: () => getResolvedExternalModuleName, + getResolvedModuleFromResolution: () => getResolvedModuleFromResolution, + getResolvedTypeReferenceDirectiveFromResolution: () => getResolvedTypeReferenceDirectiveFromResolution, + getRestIndicatorOfBindingOrAssignmentElement: () => getRestIndicatorOfBindingOrAssignmentElement, + getRestParameterElementType: () => getRestParameterElementType, + getRightMostAssignedExpression: () => getRightMostAssignedExpression, + getRootDeclaration: () => getRootDeclaration, + getRootDirectoryOfResolutionCache: () => getRootDirectoryOfResolutionCache, + getRootLength: () => getRootLength, + getScriptKind: () => getScriptKind, + getScriptKindFromFileName: () => getScriptKindFromFileName, + getScriptTargetFeatures: () => getScriptTargetFeatures, + getSelectedEffectiveModifierFlags: () => getSelectedEffectiveModifierFlags, + getSelectedSyntacticModifierFlags: () => getSelectedSyntacticModifierFlags, + getSemanticClassifications: () => getSemanticClassifications, + getSemanticJsxChildren: () => getSemanticJsxChildren, + getSetAccessorTypeAnnotationNode: () => getSetAccessorTypeAnnotationNode, + getSetAccessorValueParameter: () => getSetAccessorValueParameter, + getSetExternalModuleIndicator: () => getSetExternalModuleIndicator, + getShebang: () => getShebang, + getSingleVariableOfVariableStatement: () => getSingleVariableOfVariableStatement, + getSnapshotText: () => getSnapshotText, + getSnippetElement: () => getSnippetElement, + getSourceFileOfModule: () => getSourceFileOfModule, + getSourceFileOfNode: () => getSourceFileOfNode, + getSourceFilePathInNewDir: () => getSourceFilePathInNewDir, + getSourceFileVersionAsHashFromText: () => getSourceFileVersionAsHashFromText, + getSourceFilesToEmit: () => getSourceFilesToEmit, + getSourceMapRange: () => getSourceMapRange, + getSourceMapper: () => getSourceMapper, + getSourceTextOfNodeFromSourceFile: () => getSourceTextOfNodeFromSourceFile, + getSpanOfTokenAtPosition: () => getSpanOfTokenAtPosition, + getSpellingSuggestion: () => getSpellingSuggestion, + getStartPositionOfLine: () => getStartPositionOfLine, + getStartPositionOfRange: () => getStartPositionOfRange, + getStartsOnNewLine: () => getStartsOnNewLine, + getStaticPropertiesAndClassStaticBlock: () => getStaticPropertiesAndClassStaticBlock, + getStrictOptionValue: () => getStrictOptionValue, + getStringComparer: () => getStringComparer, + getSubPatternFromSpec: () => getSubPatternFromSpec, + getSuperCallFromStatement: () => getSuperCallFromStatement, + getSuperContainer: () => getSuperContainer, + getSupportedCodeFixes: () => getSupportedCodeFixes, + getSupportedExtensions: () => getSupportedExtensions, + getSupportedExtensionsWithJsonIfResolveJsonModule: () => getSupportedExtensionsWithJsonIfResolveJsonModule, + getSwitchedType: () => getSwitchedType, + getSymbolId: () => getSymbolId, + getSymbolNameForPrivateIdentifier: () => getSymbolNameForPrivateIdentifier, + getSymbolTarget: () => getSymbolTarget, + getSyntacticClassifications: () => getSyntacticClassifications, + getSyntacticModifierFlags: () => getSyntacticModifierFlags, + getSyntacticModifierFlagsNoCache: () => getSyntacticModifierFlagsNoCache, + getSynthesizedDeepClone: () => getSynthesizedDeepClone, + getSynthesizedDeepCloneWithReplacements: () => getSynthesizedDeepCloneWithReplacements, + getSynthesizedDeepClones: () => getSynthesizedDeepClones, + getSynthesizedDeepClonesWithReplacements: () => getSynthesizedDeepClonesWithReplacements, + getSyntheticLeadingComments: () => getSyntheticLeadingComments, + getSyntheticTrailingComments: () => getSyntheticTrailingComments, + getTargetLabel: () => getTargetLabel, + getTargetOfBindingOrAssignmentElement: () => getTargetOfBindingOrAssignmentElement, + getTemporaryModuleResolutionState: () => getTemporaryModuleResolutionState, + getTextOfConstantValue: () => getTextOfConstantValue, + getTextOfIdentifierOrLiteral: () => getTextOfIdentifierOrLiteral, + getTextOfJSDocComment: () => getTextOfJSDocComment, + getTextOfJsxAttributeName: () => getTextOfJsxAttributeName, + getTextOfJsxNamespacedName: () => getTextOfJsxNamespacedName, + getTextOfNode: () => getTextOfNode, + getTextOfNodeFromSourceText: () => getTextOfNodeFromSourceText, + getTextOfPropertyName: () => getTextOfPropertyName, + getThisContainer: () => getThisContainer, + getThisParameter: () => getThisParameter, + getTokenAtPosition: () => getTokenAtPosition, + getTokenPosOfNode: () => getTokenPosOfNode, + getTokenSourceMapRange: () => getTokenSourceMapRange, + getTouchingPropertyName: () => getTouchingPropertyName, + getTouchingToken: () => getTouchingToken, + getTrailingCommentRanges: () => getTrailingCommentRanges, + getTrailingSemicolonDeferringWriter: () => getTrailingSemicolonDeferringWriter, + getTransformers: () => getTransformers, + getTsBuildInfoEmitOutputFilePath: () => getTsBuildInfoEmitOutputFilePath, + getTsConfigObjectLiteralExpression: () => getTsConfigObjectLiteralExpression, + getTsConfigPropArrayElementValue: () => getTsConfigPropArrayElementValue, + getTypeAnnotationNode: () => getTypeAnnotationNode, + getTypeArgumentOrTypeParameterList: () => getTypeArgumentOrTypeParameterList, + getTypeKeywordOfTypeOnlyImport: () => getTypeKeywordOfTypeOnlyImport, + getTypeNode: () => getTypeNode, + getTypeNodeIfAccessible: () => getTypeNodeIfAccessible, + getTypeParameterFromJsDoc: () => getTypeParameterFromJsDoc, + getTypeParameterOwner: () => getTypeParameterOwner, + getTypesPackageName: () => getTypesPackageName, + getUILocale: () => getUILocale, + getUniqueName: () => getUniqueName, + getUniqueSymbolId: () => getUniqueSymbolId, + getUseDefineForClassFields: () => getUseDefineForClassFields, + getWatchErrorSummaryDiagnosticMessage: () => getWatchErrorSummaryDiagnosticMessage, + getWatchFactory: () => getWatchFactory, + group: () => group, + groupBy: () => groupBy, + guessIndentation: () => guessIndentation, + handleNoEmitOptions: () => handleNoEmitOptions, + handleWatchOptionsConfigDirTemplateSubstitution: () => handleWatchOptionsConfigDirTemplateSubstitution, + hasAbstractModifier: () => hasAbstractModifier, + hasAccessorModifier: () => hasAccessorModifier, + hasAmbientModifier: () => hasAmbientModifier, + hasChangesInResolutions: () => hasChangesInResolutions, + hasContextSensitiveParameters: () => hasContextSensitiveParameters, + hasDecorators: () => hasDecorators, + hasDocComment: () => hasDocComment, + hasDynamicName: () => hasDynamicName, + hasEffectiveModifier: () => hasEffectiveModifier, + hasEffectiveModifiers: () => hasEffectiveModifiers, + hasEffectiveReadonlyModifier: () => hasEffectiveReadonlyModifier, + hasExtension: () => hasExtension, + hasImplementationTSFileExtension: () => hasImplementationTSFileExtension, + hasIndexSignature: () => hasIndexSignature, + hasInferredType: () => hasInferredType, + hasInitializer: () => hasInitializer, + hasInvalidEscape: () => hasInvalidEscape, + hasJSDocNodes: () => hasJSDocNodes, + hasJSDocParameterTags: () => hasJSDocParameterTags, + hasJSFileExtension: () => hasJSFileExtension, + hasJsonModuleEmitEnabled: () => hasJsonModuleEmitEnabled, + hasOnlyExpressionInitializer: () => hasOnlyExpressionInitializer, + hasOverrideModifier: () => hasOverrideModifier, + hasPossibleExternalModuleReference: () => hasPossibleExternalModuleReference, + hasProperty: () => hasProperty, + hasPropertyAccessExpressionWithName: () => hasPropertyAccessExpressionWithName, + hasQuestionToken: () => hasQuestionToken, + hasRecordedExternalHelpers: () => hasRecordedExternalHelpers, + hasResolutionModeOverride: () => hasResolutionModeOverride, + hasRestParameter: () => hasRestParameter, + hasScopeMarker: () => hasScopeMarker, + hasStaticModifier: () => hasStaticModifier, + hasSyntacticModifier: () => hasSyntacticModifier, + hasSyntacticModifiers: () => hasSyntacticModifiers, + hasTSFileExtension: () => hasTSFileExtension, + hasTabstop: () => hasTabstop, + hasTrailingDirectorySeparator: () => hasTrailingDirectorySeparator, + hasType: () => hasType, + hasTypeArguments: () => hasTypeArguments, + hasZeroOrOneAsteriskCharacter: () => hasZeroOrOneAsteriskCharacter, + hostGetCanonicalFileName: () => hostGetCanonicalFileName, + hostUsesCaseSensitiveFileNames: () => hostUsesCaseSensitiveFileNames, + idText: () => idText, + identifierIsThisKeyword: () => identifierIsThisKeyword, + identifierToKeywordKind: () => identifierToKeywordKind, + identity: () => identity, + identitySourceMapConsumer: () => identitySourceMapConsumer, + ignoreSourceNewlines: () => ignoreSourceNewlines, + ignoredPaths: () => ignoredPaths, + importFromModuleSpecifier: () => importFromModuleSpecifier, + importSyntaxAffectsModuleResolution: () => importSyntaxAffectsModuleResolution, + indexOfAnyCharCode: () => indexOfAnyCharCode, + indexOfNode: () => indexOfNode, + indicesOf: () => indicesOf, + inferredTypesContainingFile: () => inferredTypesContainingFile, + injectClassNamedEvaluationHelperBlockIfMissing: () => injectClassNamedEvaluationHelperBlockIfMissing, + injectClassThisAssignmentIfMissing: () => injectClassThisAssignmentIfMissing, + insertImports: () => insertImports, + insertSorted: () => insertSorted, + insertStatementAfterCustomPrologue: () => insertStatementAfterCustomPrologue, + insertStatementAfterStandardPrologue: () => insertStatementAfterStandardPrologue, + insertStatementsAfterCustomPrologue: () => insertStatementsAfterCustomPrologue, + insertStatementsAfterStandardPrologue: () => insertStatementsAfterStandardPrologue, + intersperse: () => intersperse, + intrinsicTagNameToString: () => intrinsicTagNameToString, + introducesArgumentsExoticObject: () => introducesArgumentsExoticObject, + inverseJsxOptionMap: () => inverseJsxOptionMap, + isAbstractConstructorSymbol: () => isAbstractConstructorSymbol, + isAbstractModifier: () => isAbstractModifier, + isAccessExpression: () => isAccessExpression, + isAccessibilityModifier: () => isAccessibilityModifier, + isAccessor: () => isAccessor, + isAccessorModifier: () => isAccessorModifier, + isAliasableExpression: () => isAliasableExpression, + isAmbientModule: () => isAmbientModule, + isAmbientPropertyDeclaration: () => isAmbientPropertyDeclaration, + isAnyDirectorySeparator: () => isAnyDirectorySeparator, + isAnyImportOrBareOrAccessedRequire: () => isAnyImportOrBareOrAccessedRequire, + isAnyImportOrReExport: () => isAnyImportOrReExport, + isAnyImportOrRequireStatement: () => isAnyImportOrRequireStatement, + isAnyImportSyntax: () => isAnyImportSyntax, + isAnySupportedFileExtension: () => isAnySupportedFileExtension, + isApplicableVersionedTypesKey: () => isApplicableVersionedTypesKey, + isArgumentExpressionOfElementAccess: () => isArgumentExpressionOfElementAccess, + isArray: () => isArray, + isArrayBindingElement: () => isArrayBindingElement, + isArrayBindingOrAssignmentElement: () => isArrayBindingOrAssignmentElement, + isArrayBindingOrAssignmentPattern: () => isArrayBindingOrAssignmentPattern, + isArrayBindingPattern: () => isArrayBindingPattern, + isArrayLiteralExpression: () => isArrayLiteralExpression, + isArrayLiteralOrObjectLiteralDestructuringPattern: () => isArrayLiteralOrObjectLiteralDestructuringPattern, + isArrayTypeNode: () => isArrayTypeNode, + isArrowFunction: () => isArrowFunction, + isAsExpression: () => isAsExpression, + isAssertClause: () => isAssertClause, + isAssertEntry: () => isAssertEntry, + isAssertionExpression: () => isAssertionExpression, + isAssertsKeyword: () => isAssertsKeyword, + isAssignmentDeclaration: () => isAssignmentDeclaration, + isAssignmentExpression: () => isAssignmentExpression, + isAssignmentOperator: () => isAssignmentOperator, + isAssignmentPattern: () => isAssignmentPattern, + isAssignmentTarget: () => isAssignmentTarget, + isAsteriskToken: () => isAsteriskToken, + isAsyncFunction: () => isAsyncFunction, + isAsyncModifier: () => isAsyncModifier, + isAutoAccessorPropertyDeclaration: () => isAutoAccessorPropertyDeclaration, + isAwaitExpression: () => isAwaitExpression, + isAwaitKeyword: () => isAwaitKeyword, + isBigIntLiteral: () => isBigIntLiteral, + isBinaryExpression: () => isBinaryExpression, + isBinaryLogicalOperator: () => isBinaryLogicalOperator, + isBinaryOperatorToken: () => isBinaryOperatorToken, + isBindableObjectDefinePropertyCall: () => isBindableObjectDefinePropertyCall, + isBindableStaticAccessExpression: () => isBindableStaticAccessExpression, + isBindableStaticElementAccessExpression: () => isBindableStaticElementAccessExpression, + isBindableStaticNameExpression: () => isBindableStaticNameExpression, + isBindingElement: () => isBindingElement, + isBindingElementOfBareOrAccessedRequire: () => isBindingElementOfBareOrAccessedRequire, + isBindingName: () => isBindingName, + isBindingOrAssignmentElement: () => isBindingOrAssignmentElement, + isBindingOrAssignmentPattern: () => isBindingOrAssignmentPattern, + isBindingPattern: () => isBindingPattern, + isBlock: () => isBlock, + isBlockLike: () => isBlockLike, + isBlockOrCatchScoped: () => isBlockOrCatchScoped, + isBlockScope: () => isBlockScope, + isBlockScopedContainerTopLevel: () => isBlockScopedContainerTopLevel, + isBooleanLiteral: () => isBooleanLiteral, + isBreakOrContinueStatement: () => isBreakOrContinueStatement, + isBreakStatement: () => isBreakStatement, + isBuildCommand: () => isBuildCommand, + isBuildInfoFile: () => isBuildInfoFile, + isBuilderProgram: () => isBuilderProgram, + isBundle: () => isBundle, + isCallChain: () => isCallChain, + isCallExpression: () => isCallExpression, + isCallExpressionTarget: () => isCallExpressionTarget, + isCallLikeExpression: () => isCallLikeExpression, + isCallLikeOrFunctionLikeExpression: () => isCallLikeOrFunctionLikeExpression, + isCallOrNewExpression: () => isCallOrNewExpression, + isCallOrNewExpressionTarget: () => isCallOrNewExpressionTarget, + isCallSignatureDeclaration: () => isCallSignatureDeclaration, + isCallToHelper: () => isCallToHelper, + isCaseBlock: () => isCaseBlock, + isCaseClause: () => isCaseClause, + isCaseKeyword: () => isCaseKeyword, + isCaseOrDefaultClause: () => isCaseOrDefaultClause, + isCatchClause: () => isCatchClause, + isCatchClauseVariableDeclaration: () => isCatchClauseVariableDeclaration, + isCatchClauseVariableDeclarationOrBindingElement: () => isCatchClauseVariableDeclarationOrBindingElement, + isCheckJsEnabledForFile: () => isCheckJsEnabledForFile, + isCircularBuildOrder: () => isCircularBuildOrder, + isClassDeclaration: () => isClassDeclaration, + isClassElement: () => isClassElement, + isClassExpression: () => isClassExpression, + isClassInstanceProperty: () => isClassInstanceProperty, + isClassLike: () => isClassLike, + isClassMemberModifier: () => isClassMemberModifier, + isClassNamedEvaluationHelperBlock: () => isClassNamedEvaluationHelperBlock, + isClassOrTypeElement: () => isClassOrTypeElement, + isClassStaticBlockDeclaration: () => isClassStaticBlockDeclaration, + isClassThisAssignmentBlock: () => isClassThisAssignmentBlock, + isColonToken: () => isColonToken, + isCommaExpression: () => isCommaExpression, + isCommaListExpression: () => isCommaListExpression, + isCommaSequence: () => isCommaSequence, + isCommaToken: () => isCommaToken, + isComment: () => isComment, + isCommonJsExportPropertyAssignment: () => isCommonJsExportPropertyAssignment, + isCommonJsExportedExpression: () => isCommonJsExportedExpression, + isCompoundAssignment: () => isCompoundAssignment, + isComputedNonLiteralName: () => isComputedNonLiteralName, + isComputedPropertyName: () => isComputedPropertyName, + isConciseBody: () => isConciseBody, + isConditionalExpression: () => isConditionalExpression, + isConditionalTypeNode: () => isConditionalTypeNode, + isConstAssertion: () => isConstAssertion, + isConstTypeReference: () => isConstTypeReference, + isConstructSignatureDeclaration: () => isConstructSignatureDeclaration, + isConstructorDeclaration: () => isConstructorDeclaration, + isConstructorTypeNode: () => isConstructorTypeNode, + isContextualKeyword: () => isContextualKeyword, + isContinueStatement: () => isContinueStatement, + isCustomPrologue: () => isCustomPrologue, + isDebuggerStatement: () => isDebuggerStatement, + isDeclaration: () => isDeclaration, + isDeclarationBindingElement: () => isDeclarationBindingElement, + isDeclarationFileName: () => isDeclarationFileName, + isDeclarationName: () => isDeclarationName, + isDeclarationNameOfEnumOrNamespace: () => isDeclarationNameOfEnumOrNamespace, + isDeclarationReadonly: () => isDeclarationReadonly, + isDeclarationStatement: () => isDeclarationStatement, + isDeclarationWithTypeParameterChildren: () => isDeclarationWithTypeParameterChildren, + isDeclarationWithTypeParameters: () => isDeclarationWithTypeParameters, + isDecorator: () => isDecorator, + isDecoratorTarget: () => isDecoratorTarget, + isDefaultClause: () => isDefaultClause, + isDefaultImport: () => isDefaultImport, + isDefaultModifier: () => isDefaultModifier, + isDefaultedExpandoInitializer: () => isDefaultedExpandoInitializer, + isDeleteExpression: () => isDeleteExpression, + isDeleteTarget: () => isDeleteTarget, + isDeprecatedDeclaration: () => isDeprecatedDeclaration, + isDestructuringAssignment: () => isDestructuringAssignment, + isDiskPathRoot: () => isDiskPathRoot, + isDoStatement: () => isDoStatement, + isDocumentRegistryEntry: () => isDocumentRegistryEntry, + isDotDotDotToken: () => isDotDotDotToken, + isDottedName: () => isDottedName, + isDynamicName: () => isDynamicName, + isEffectiveExternalModule: () => isEffectiveExternalModule, + isEffectiveStrictModeSourceFile: () => isEffectiveStrictModeSourceFile, + isElementAccessChain: () => isElementAccessChain, + isElementAccessExpression: () => isElementAccessExpression, + isEmittedFileOfProgram: () => isEmittedFileOfProgram, + isEmptyArrayLiteral: () => isEmptyArrayLiteral, + isEmptyBindingElement: () => isEmptyBindingElement, + isEmptyBindingPattern: () => isEmptyBindingPattern, + isEmptyObjectLiteral: () => isEmptyObjectLiteral, + isEmptyStatement: () => isEmptyStatement, + isEmptyStringLiteral: () => isEmptyStringLiteral, + isEntityName: () => isEntityName, + isEntityNameExpression: () => isEntityNameExpression, + isEnumConst: () => isEnumConst, + isEnumDeclaration: () => isEnumDeclaration, + isEnumMember: () => isEnumMember, + isEqualityOperatorKind: () => isEqualityOperatorKind, + isEqualsGreaterThanToken: () => isEqualsGreaterThanToken, + isExclamationToken: () => isExclamationToken, + isExcludedFile: () => isExcludedFile, + isExclusivelyTypeOnlyImportOrExport: () => isExclusivelyTypeOnlyImportOrExport, + isExpandoPropertyDeclaration: () => isExpandoPropertyDeclaration, + isExportAssignment: () => isExportAssignment, + isExportDeclaration: () => isExportDeclaration, + isExportModifier: () => isExportModifier, + isExportName: () => isExportName, + isExportNamespaceAsDefaultDeclaration: () => isExportNamespaceAsDefaultDeclaration, + isExportOrDefaultModifier: () => isExportOrDefaultModifier, + isExportSpecifier: () => isExportSpecifier, + isExportsIdentifier: () => isExportsIdentifier, + isExportsOrModuleExportsOrAlias: () => isExportsOrModuleExportsOrAlias, + isExpression: () => isExpression, + isExpressionNode: () => isExpressionNode, + isExpressionOfExternalModuleImportEqualsDeclaration: () => isExpressionOfExternalModuleImportEqualsDeclaration, + isExpressionOfOptionalChainRoot: () => isExpressionOfOptionalChainRoot, + isExpressionStatement: () => isExpressionStatement, + isExpressionWithTypeArguments: () => isExpressionWithTypeArguments, + isExpressionWithTypeArgumentsInClassExtendsClause: () => isExpressionWithTypeArgumentsInClassExtendsClause, + isExternalModule: () => isExternalModule, + isExternalModuleAugmentation: () => isExternalModuleAugmentation, + isExternalModuleImportEqualsDeclaration: () => isExternalModuleImportEqualsDeclaration, + isExternalModuleIndicator: () => isExternalModuleIndicator, + isExternalModuleNameRelative: () => isExternalModuleNameRelative, + isExternalModuleReference: () => isExternalModuleReference, + isExternalModuleSymbol: () => isExternalModuleSymbol, + isExternalOrCommonJsModule: () => isExternalOrCommonJsModule, + isFileLevelReservedGeneratedIdentifier: () => isFileLevelReservedGeneratedIdentifier, + isFileLevelUniqueName: () => isFileLevelUniqueName, + isFileProbablyExternalModule: () => isFileProbablyExternalModule, + isFirstDeclarationOfSymbolParameter: () => isFirstDeclarationOfSymbolParameter, + isFixablePromiseHandler: () => isFixablePromiseHandler, + isForInOrOfStatement: () => isForInOrOfStatement, + isForInStatement: () => isForInStatement, + isForInitializer: () => isForInitializer, + isForOfStatement: () => isForOfStatement, + isForStatement: () => isForStatement, + isFullSourceFile: () => isFullSourceFile, + isFunctionBlock: () => isFunctionBlock, + isFunctionBody: () => isFunctionBody, + isFunctionDeclaration: () => isFunctionDeclaration, + isFunctionExpression: () => isFunctionExpression, + isFunctionExpressionOrArrowFunction: () => isFunctionExpressionOrArrowFunction, + isFunctionLike: () => isFunctionLike, + isFunctionLikeDeclaration: () => isFunctionLikeDeclaration, + isFunctionLikeKind: () => isFunctionLikeKind, + isFunctionLikeOrClassStaticBlockDeclaration: () => isFunctionLikeOrClassStaticBlockDeclaration, + isFunctionOrConstructorTypeNode: () => isFunctionOrConstructorTypeNode, + isFunctionOrModuleBlock: () => isFunctionOrModuleBlock, + isFunctionSymbol: () => isFunctionSymbol, + isFunctionTypeNode: () => isFunctionTypeNode, + isGeneratedIdentifier: () => isGeneratedIdentifier, + isGeneratedPrivateIdentifier: () => isGeneratedPrivateIdentifier, + isGetAccessor: () => isGetAccessor, + isGetAccessorDeclaration: () => isGetAccessorDeclaration, + isGetOrSetAccessorDeclaration: () => isGetOrSetAccessorDeclaration, + isGlobalScopeAugmentation: () => isGlobalScopeAugmentation, + isGlobalSourceFile: () => isGlobalSourceFile, + isGrammarError: () => isGrammarError, + isHeritageClause: () => isHeritageClause, + isHoistedFunction: () => isHoistedFunction, + isHoistedVariableStatement: () => isHoistedVariableStatement, + isIdentifier: () => isIdentifier, + isIdentifierANonContextualKeyword: () => isIdentifierANonContextualKeyword, + isIdentifierName: () => isIdentifierName, + isIdentifierOrThisTypeNode: () => isIdentifierOrThisTypeNode, + isIdentifierPart: () => isIdentifierPart, + isIdentifierStart: () => isIdentifierStart, + isIdentifierText: () => isIdentifierText, + isIdentifierTypePredicate: () => isIdentifierTypePredicate, + isIdentifierTypeReference: () => isIdentifierTypeReference, + isIfStatement: () => isIfStatement, + isIgnoredFileFromWildCardWatching: () => isIgnoredFileFromWildCardWatching, + isImplicitGlob: () => isImplicitGlob, + isImportAttribute: () => isImportAttribute, + isImportAttributeName: () => isImportAttributeName, + isImportAttributes: () => isImportAttributes, + isImportCall: () => isImportCall, + isImportClause: () => isImportClause, + isImportDeclaration: () => isImportDeclaration, + isImportEqualsDeclaration: () => isImportEqualsDeclaration, + isImportKeyword: () => isImportKeyword, + isImportMeta: () => isImportMeta, + isImportOrExportSpecifier: () => isImportOrExportSpecifier, + isImportOrExportSpecifierName: () => isImportOrExportSpecifierName, + isImportSpecifier: () => isImportSpecifier, + isImportTypeAssertionContainer: () => isImportTypeAssertionContainer, + isImportTypeNode: () => isImportTypeNode, + isImportable: () => isImportable, + isInComment: () => isInComment, + isInCompoundLikeAssignment: () => isInCompoundLikeAssignment, + isInExpressionContext: () => isInExpressionContext, + isInJSDoc: () => isInJSDoc, + isInJSFile: () => isInJSFile, + isInJSXText: () => isInJSXText, + isInJsonFile: () => isInJsonFile, + isInNonReferenceComment: () => isInNonReferenceComment, + isInReferenceComment: () => isInReferenceComment, + isInRightSideOfInternalImportEqualsDeclaration: () => isInRightSideOfInternalImportEqualsDeclaration, + isInString: () => isInString, + isInTemplateString: () => isInTemplateString, + isInTopLevelContext: () => isInTopLevelContext, + isInTypeQuery: () => isInTypeQuery, + isIncrementalBuildInfo: () => isIncrementalBuildInfo, + isIncrementalBundleEmitBuildInfo: () => isIncrementalBundleEmitBuildInfo, + isIncrementalCompilation: () => isIncrementalCompilation, + isIndexSignatureDeclaration: () => isIndexSignatureDeclaration, + isIndexedAccessTypeNode: () => isIndexedAccessTypeNode, + isInferTypeNode: () => isInferTypeNode, + isInfinityOrNaNString: () => isInfinityOrNaNString, + isInitializedProperty: () => isInitializedProperty, + isInitializedVariable: () => isInitializedVariable, + isInsideJsxElement: () => isInsideJsxElement, + isInsideJsxElementOrAttribute: () => isInsideJsxElementOrAttribute, + isInsideNodeModules: () => isInsideNodeModules, + isInsideTemplateLiteral: () => isInsideTemplateLiteral, + isInstanceOfExpression: () => isInstanceOfExpression, + isInstantiatedModule: () => isInstantiatedModule, + isInterfaceDeclaration: () => isInterfaceDeclaration, + isInternalDeclaration: () => isInternalDeclaration, + isInternalModuleImportEqualsDeclaration: () => isInternalModuleImportEqualsDeclaration, + isInternalName: () => isInternalName, + isIntersectionTypeNode: () => isIntersectionTypeNode, + isIntrinsicJsxName: () => isIntrinsicJsxName, + isIterationStatement: () => isIterationStatement, + isJSDoc: () => isJSDoc, + isJSDocAllType: () => isJSDocAllType, + isJSDocAugmentsTag: () => isJSDocAugmentsTag, + isJSDocAuthorTag: () => isJSDocAuthorTag, + isJSDocCallbackTag: () => isJSDocCallbackTag, + isJSDocClassTag: () => isJSDocClassTag, + isJSDocCommentContainingNode: () => isJSDocCommentContainingNode, + isJSDocConstructSignature: () => isJSDocConstructSignature, + isJSDocDeprecatedTag: () => isJSDocDeprecatedTag, + isJSDocEnumTag: () => isJSDocEnumTag, + isJSDocFunctionType: () => isJSDocFunctionType, + isJSDocImplementsTag: () => isJSDocImplementsTag, + isJSDocImportTag: () => isJSDocImportTag, + isJSDocIndexSignature: () => isJSDocIndexSignature, + isJSDocLikeText: () => isJSDocLikeText, + isJSDocLink: () => isJSDocLink, + isJSDocLinkCode: () => isJSDocLinkCode, + isJSDocLinkLike: () => isJSDocLinkLike, + isJSDocLinkPlain: () => isJSDocLinkPlain, + isJSDocMemberName: () => isJSDocMemberName, + isJSDocNameReference: () => isJSDocNameReference, + isJSDocNamepathType: () => isJSDocNamepathType, + isJSDocNamespaceBody: () => isJSDocNamespaceBody, + isJSDocNode: () => isJSDocNode, + isJSDocNonNullableType: () => isJSDocNonNullableType, + isJSDocNullableType: () => isJSDocNullableType, + isJSDocOptionalParameter: () => isJSDocOptionalParameter, + isJSDocOptionalType: () => isJSDocOptionalType, + isJSDocOverloadTag: () => isJSDocOverloadTag, + isJSDocOverrideTag: () => isJSDocOverrideTag, + isJSDocParameterTag: () => isJSDocParameterTag, + isJSDocPrivateTag: () => isJSDocPrivateTag, + isJSDocPropertyLikeTag: () => isJSDocPropertyLikeTag, + isJSDocPropertyTag: () => isJSDocPropertyTag, + isJSDocProtectedTag: () => isJSDocProtectedTag, + isJSDocPublicTag: () => isJSDocPublicTag, + isJSDocReadonlyTag: () => isJSDocReadonlyTag, + isJSDocReturnTag: () => isJSDocReturnTag, + isJSDocSatisfiesExpression: () => isJSDocSatisfiesExpression, + isJSDocSatisfiesTag: () => isJSDocSatisfiesTag, + isJSDocSeeTag: () => isJSDocSeeTag, + isJSDocSignature: () => isJSDocSignature, + isJSDocTag: () => isJSDocTag, + isJSDocTemplateTag: () => isJSDocTemplateTag, + isJSDocThisTag: () => isJSDocThisTag, + isJSDocThrowsTag: () => isJSDocThrowsTag, + isJSDocTypeAlias: () => isJSDocTypeAlias, + isJSDocTypeAssertion: () => isJSDocTypeAssertion, + isJSDocTypeExpression: () => isJSDocTypeExpression, + isJSDocTypeLiteral: () => isJSDocTypeLiteral, + isJSDocTypeTag: () => isJSDocTypeTag, + isJSDocTypedefTag: () => isJSDocTypedefTag, + isJSDocUnknownTag: () => isJSDocUnknownTag, + isJSDocUnknownType: () => isJSDocUnknownType, + isJSDocVariadicType: () => isJSDocVariadicType, + isJSXTagName: () => isJSXTagName, + isJsonEqual: () => isJsonEqual, + isJsonSourceFile: () => isJsonSourceFile, + isJsxAttribute: () => isJsxAttribute, + isJsxAttributeLike: () => isJsxAttributeLike, + isJsxAttributeName: () => isJsxAttributeName, + isJsxAttributes: () => isJsxAttributes, + isJsxCallLike: () => isJsxCallLike, + isJsxChild: () => isJsxChild, + isJsxClosingElement: () => isJsxClosingElement, + isJsxClosingFragment: () => isJsxClosingFragment, + isJsxElement: () => isJsxElement, + isJsxExpression: () => isJsxExpression, + isJsxFragment: () => isJsxFragment, + isJsxNamespacedName: () => isJsxNamespacedName, + isJsxOpeningElement: () => isJsxOpeningElement, + isJsxOpeningFragment: () => isJsxOpeningFragment, + isJsxOpeningLikeElement: () => isJsxOpeningLikeElement, + isJsxOpeningLikeElementTagName: () => isJsxOpeningLikeElementTagName, + isJsxSelfClosingElement: () => isJsxSelfClosingElement, + isJsxSpreadAttribute: () => isJsxSpreadAttribute, + isJsxTagNameExpression: () => isJsxTagNameExpression, + isJsxText: () => isJsxText, + isJumpStatementTarget: () => isJumpStatementTarget, + isKeyword: () => isKeyword, + isKeywordOrPunctuation: () => isKeywordOrPunctuation, + isKnownSymbol: () => isKnownSymbol, + isLabelName: () => isLabelName, + isLabelOfLabeledStatement: () => isLabelOfLabeledStatement, + isLabeledStatement: () => isLabeledStatement, + isLateVisibilityPaintedStatement: () => isLateVisibilityPaintedStatement, + isLeftHandSideExpression: () => isLeftHandSideExpression, + isLet: () => isLet, + isLineBreak: () => isLineBreak, + isLiteralComputedPropertyDeclarationName: () => isLiteralComputedPropertyDeclarationName, + isLiteralExpression: () => isLiteralExpression, + isLiteralExpressionOfObject: () => isLiteralExpressionOfObject, + isLiteralImportTypeNode: () => isLiteralImportTypeNode, + isLiteralKind: () => isLiteralKind, + isLiteralNameOfPropertyDeclarationOrIndexAccess: () => isLiteralNameOfPropertyDeclarationOrIndexAccess, + isLiteralTypeLiteral: () => isLiteralTypeLiteral, + isLiteralTypeNode: () => isLiteralTypeNode, + isLocalName: () => isLocalName, + isLogicalOperator: () => isLogicalOperator, + isLogicalOrCoalescingAssignmentExpression: () => isLogicalOrCoalescingAssignmentExpression, + isLogicalOrCoalescingAssignmentOperator: () => isLogicalOrCoalescingAssignmentOperator, + isLogicalOrCoalescingBinaryExpression: () => isLogicalOrCoalescingBinaryExpression, + isLogicalOrCoalescingBinaryOperator: () => isLogicalOrCoalescingBinaryOperator, + isMappedTypeNode: () => isMappedTypeNode, + isMemberName: () => isMemberName, + isMetaProperty: () => isMetaProperty, + isMethodDeclaration: () => isMethodDeclaration, + isMethodOrAccessor: () => isMethodOrAccessor, + isMethodSignature: () => isMethodSignature, + isMinusToken: () => isMinusToken, + isMissingDeclaration: () => isMissingDeclaration, + isMissingPackageJsonInfo: () => isMissingPackageJsonInfo, + isModifier: () => isModifier, + isModifierKind: () => isModifierKind, + isModifierLike: () => isModifierLike, + isModuleAugmentationExternal: () => isModuleAugmentationExternal, + isModuleBlock: () => isModuleBlock, + isModuleBody: () => isModuleBody, + isModuleDeclaration: () => isModuleDeclaration, + isModuleExportName: () => isModuleExportName, + isModuleExportsAccessExpression: () => isModuleExportsAccessExpression, + isModuleIdentifier: () => isModuleIdentifier, + isModuleName: () => isModuleName, + isModuleOrEnumDeclaration: () => isModuleOrEnumDeclaration, + isModuleReference: () => isModuleReference, + isModuleSpecifierLike: () => isModuleSpecifierLike, + isModuleWithStringLiteralName: () => isModuleWithStringLiteralName, + isNameOfFunctionDeclaration: () => isNameOfFunctionDeclaration, + isNameOfModuleDeclaration: () => isNameOfModuleDeclaration, + isNamedDeclaration: () => isNamedDeclaration, + isNamedEvaluation: () => isNamedEvaluation, + isNamedEvaluationSource: () => isNamedEvaluationSource, + isNamedExportBindings: () => isNamedExportBindings, + isNamedExports: () => isNamedExports, + isNamedImportBindings: () => isNamedImportBindings, + isNamedImports: () => isNamedImports, + isNamedImportsOrExports: () => isNamedImportsOrExports, + isNamedTupleMember: () => isNamedTupleMember, + isNamespaceBody: () => isNamespaceBody, + isNamespaceExport: () => isNamespaceExport, + isNamespaceExportDeclaration: () => isNamespaceExportDeclaration, + isNamespaceImport: () => isNamespaceImport, + isNamespaceReexportDeclaration: () => isNamespaceReexportDeclaration, + isNewExpression: () => isNewExpression, + isNewExpressionTarget: () => isNewExpressionTarget, + isNewScopeNode: () => isNewScopeNode, + isNoSubstitutionTemplateLiteral: () => isNoSubstitutionTemplateLiteral, + isNodeArray: () => isNodeArray, + isNodeArrayMultiLine: () => isNodeArrayMultiLine, + isNodeDescendantOf: () => isNodeDescendantOf, + isNodeKind: () => isNodeKind, + isNodeLikeSystem: () => isNodeLikeSystem, + isNodeModulesDirectory: () => isNodeModulesDirectory, + isNodeWithPossibleHoistedDeclaration: () => isNodeWithPossibleHoistedDeclaration, + isNonContextualKeyword: () => isNonContextualKeyword, + isNonGlobalAmbientModule: () => isNonGlobalAmbientModule, + isNonNullAccess: () => isNonNullAccess, + isNonNullChain: () => isNonNullChain, + isNonNullExpression: () => isNonNullExpression, + isNonStaticMethodOrAccessorWithPrivateName: () => isNonStaticMethodOrAccessorWithPrivateName, + isNotEmittedStatement: () => isNotEmittedStatement, + isNullishCoalesce: () => isNullishCoalesce, + isNumber: () => isNumber, + isNumericLiteral: () => isNumericLiteral, + isNumericLiteralName: () => isNumericLiteralName, + isObjectBindingElementWithoutPropertyName: () => isObjectBindingElementWithoutPropertyName, + isObjectBindingOrAssignmentElement: () => isObjectBindingOrAssignmentElement, + isObjectBindingOrAssignmentPattern: () => isObjectBindingOrAssignmentPattern, + isObjectBindingPattern: () => isObjectBindingPattern, + isObjectLiteralElement: () => isObjectLiteralElement, + isObjectLiteralElementLike: () => isObjectLiteralElementLike, + isObjectLiteralExpression: () => isObjectLiteralExpression, + isObjectLiteralMethod: () => isObjectLiteralMethod, + isObjectLiteralOrClassExpressionMethodOrAccessor: () => isObjectLiteralOrClassExpressionMethodOrAccessor, + isObjectTypeDeclaration: () => isObjectTypeDeclaration, + isOmittedExpression: () => isOmittedExpression, + isOptionalChain: () => isOptionalChain, + isOptionalChainRoot: () => isOptionalChainRoot, + isOptionalDeclaration: () => isOptionalDeclaration, + isOptionalJSDocPropertyLikeTag: () => isOptionalJSDocPropertyLikeTag, + isOptionalTypeNode: () => isOptionalTypeNode, + isOuterExpression: () => isOuterExpression, + isOutermostOptionalChain: () => isOutermostOptionalChain, + isOverrideModifier: () => isOverrideModifier, + isPackageJsonInfo: () => isPackageJsonInfo, + isPackedArrayLiteral: () => isPackedArrayLiteral, + isParameter: () => isParameter, + isParameterPropertyDeclaration: () => isParameterPropertyDeclaration, + isParameterPropertyModifier: () => isParameterPropertyModifier, + isParenthesizedExpression: () => isParenthesizedExpression, + isParenthesizedTypeNode: () => isParenthesizedTypeNode, + isParseTreeNode: () => isParseTreeNode, + isPartOfParameterDeclaration: () => isPartOfParameterDeclaration, + isPartOfTypeNode: () => isPartOfTypeNode, + isPartOfTypeOnlyImportOrExportDeclaration: () => isPartOfTypeOnlyImportOrExportDeclaration, + isPartOfTypeQuery: () => isPartOfTypeQuery, + isPartiallyEmittedExpression: () => isPartiallyEmittedExpression, + isPatternMatch: () => isPatternMatch, + isPinnedComment: () => isPinnedComment, + isPlainJsFile: () => isPlainJsFile, + isPlusToken: () => isPlusToken, + isPossiblyTypeArgumentPosition: () => isPossiblyTypeArgumentPosition, + isPostfixUnaryExpression: () => isPostfixUnaryExpression, + isPrefixUnaryExpression: () => isPrefixUnaryExpression, + isPrimitiveLiteralValue: () => isPrimitiveLiteralValue, + isPrivateIdentifier: () => isPrivateIdentifier, + isPrivateIdentifierClassElementDeclaration: () => isPrivateIdentifierClassElementDeclaration, + isPrivateIdentifierPropertyAccessExpression: () => isPrivateIdentifierPropertyAccessExpression, + isPrivateIdentifierSymbol: () => isPrivateIdentifierSymbol, + isProgramUptoDate: () => isProgramUptoDate, + isPrologueDirective: () => isPrologueDirective, + isPropertyAccessChain: () => isPropertyAccessChain, + isPropertyAccessEntityNameExpression: () => isPropertyAccessEntityNameExpression, + isPropertyAccessExpression: () => isPropertyAccessExpression, + isPropertyAccessOrQualifiedName: () => isPropertyAccessOrQualifiedName, + isPropertyAccessOrQualifiedNameOrImportTypeNode: () => isPropertyAccessOrQualifiedNameOrImportTypeNode, + isPropertyAssignment: () => isPropertyAssignment, + isPropertyDeclaration: () => isPropertyDeclaration, + isPropertyName: () => isPropertyName, + isPropertyNameLiteral: () => isPropertyNameLiteral, + isPropertySignature: () => isPropertySignature, + isPrototypeAccess: () => isPrototypeAccess, + isPrototypePropertyAssignment: () => isPrototypePropertyAssignment, + isPunctuation: () => isPunctuation, + isPushOrUnshiftIdentifier: () => isPushOrUnshiftIdentifier, + isQualifiedName: () => isQualifiedName, + isQuestionDotToken: () => isQuestionDotToken, + isQuestionOrExclamationToken: () => isQuestionOrExclamationToken, + isQuestionOrPlusOrMinusToken: () => isQuestionOrPlusOrMinusToken, + isQuestionToken: () => isQuestionToken, + isReadonlyKeyword: () => isReadonlyKeyword, + isReadonlyKeywordOrPlusOrMinusToken: () => isReadonlyKeywordOrPlusOrMinusToken, + isRecognizedTripleSlashComment: () => isRecognizedTripleSlashComment, + isReferenceFileLocation: () => isReferenceFileLocation, + isReferencedFile: () => isReferencedFile, + isRegularExpressionLiteral: () => isRegularExpressionLiteral, + isRequireCall: () => isRequireCall, + isRequireVariableStatement: () => isRequireVariableStatement, + isRestParameter: () => isRestParameter, + isRestTypeNode: () => isRestTypeNode, + isReturnStatement: () => isReturnStatement, + isReturnStatementWithFixablePromiseHandler: () => isReturnStatementWithFixablePromiseHandler, + isRightSideOfAccessExpression: () => isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression: () => isRightSideOfInstanceofExpression, + isRightSideOfPropertyAccess: () => isRightSideOfPropertyAccess, + isRightSideOfQualifiedName: () => isRightSideOfQualifiedName, + isRightSideOfQualifiedNameOrPropertyAccess: () => isRightSideOfQualifiedNameOrPropertyAccess, + isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName: () => isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName, + isRootedDiskPath: () => isRootedDiskPath, + isSameEntityName: () => isSameEntityName, + isSatisfiesExpression: () => isSatisfiesExpression, + isSemicolonClassElement: () => isSemicolonClassElement, + isSetAccessor: () => isSetAccessor, + isSetAccessorDeclaration: () => isSetAccessorDeclaration, + isShiftOperatorOrHigher: () => isShiftOperatorOrHigher, + isShorthandAmbientModuleSymbol: () => isShorthandAmbientModuleSymbol, + isShorthandPropertyAssignment: () => isShorthandPropertyAssignment, + isSideEffectImport: () => isSideEffectImport, + isSignedNumericLiteral: () => isSignedNumericLiteral, + isSimpleCopiableExpression: () => isSimpleCopiableExpression, + isSimpleInlineableExpression: () => isSimpleInlineableExpression, + isSimpleParameterList: () => isSimpleParameterList, + isSingleOrDoubleQuote: () => isSingleOrDoubleQuote, + isSolutionConfig: () => isSolutionConfig, + isSourceElement: () => isSourceElement, + isSourceFile: () => isSourceFile, + isSourceFileFromLibrary: () => isSourceFileFromLibrary, + isSourceFileJS: () => isSourceFileJS, + isSourceFileNotJson: () => isSourceFileNotJson, + isSourceMapping: () => isSourceMapping, + isSpecialPropertyDeclaration: () => isSpecialPropertyDeclaration, + isSpreadAssignment: () => isSpreadAssignment, + isSpreadElement: () => isSpreadElement, + isStatement: () => isStatement, + isStatementButNotDeclaration: () => isStatementButNotDeclaration, + isStatementOrBlock: () => isStatementOrBlock, + isStatementWithLocals: () => isStatementWithLocals, + isStatic: () => isStatic, + isStaticModifier: () => isStaticModifier, + isString: () => isString, + isStringANonContextualKeyword: () => isStringANonContextualKeyword, + isStringAndEmptyAnonymousObjectIntersection: () => isStringAndEmptyAnonymousObjectIntersection, + isStringDoubleQuoted: () => isStringDoubleQuoted, + isStringLiteral: () => isStringLiteral, + isStringLiteralLike: () => isStringLiteralLike, + isStringLiteralOrJsxExpression: () => isStringLiteralOrJsxExpression, + isStringLiteralOrTemplate: () => isStringLiteralOrTemplate, + isStringOrNumericLiteralLike: () => isStringOrNumericLiteralLike, + isStringOrRegularExpressionOrTemplateLiteral: () => isStringOrRegularExpressionOrTemplateLiteral, + isStringTextContainingNode: () => isStringTextContainingNode, + isSuperCall: () => isSuperCall, + isSuperKeyword: () => isSuperKeyword, + isSuperProperty: () => isSuperProperty, + isSupportedSourceFileName: () => isSupportedSourceFileName, + isSwitchStatement: () => isSwitchStatement, + isSyntaxList: () => isSyntaxList, + isSyntheticExpression: () => isSyntheticExpression, + isSyntheticReference: () => isSyntheticReference, + isTagName: () => isTagName, + isTaggedTemplateExpression: () => isTaggedTemplateExpression, + isTaggedTemplateTag: () => isTaggedTemplateTag, + isTemplateExpression: () => isTemplateExpression, + isTemplateHead: () => isTemplateHead, + isTemplateLiteral: () => isTemplateLiteral, + isTemplateLiteralKind: () => isTemplateLiteralKind, + isTemplateLiteralToken: () => isTemplateLiteralToken, + isTemplateLiteralTypeNode: () => isTemplateLiteralTypeNode, + isTemplateLiteralTypeSpan: () => isTemplateLiteralTypeSpan, + isTemplateMiddle: () => isTemplateMiddle, + isTemplateMiddleOrTemplateTail: () => isTemplateMiddleOrTemplateTail, + isTemplateSpan: () => isTemplateSpan, + isTemplateTail: () => isTemplateTail, + isTextWhiteSpaceLike: () => isTextWhiteSpaceLike, + isThis: () => isThis, + isThisContainerOrFunctionBlock: () => isThisContainerOrFunctionBlock, + isThisIdentifier: () => isThisIdentifier, + isThisInTypeQuery: () => isThisInTypeQuery, + isThisInitializedDeclaration: () => isThisInitializedDeclaration, + isThisInitializedObjectBindingExpression: () => isThisInitializedObjectBindingExpression, + isThisProperty: () => isThisProperty, + isThisTypeNode: () => isThisTypeNode, + isThisTypeParameter: () => isThisTypeParameter, + isThisTypePredicate: () => isThisTypePredicate, + isThrowStatement: () => isThrowStatement, + isToken: () => isToken, + isTokenKind: () => isTokenKind, + isTraceEnabled: () => isTraceEnabled, + isTransientSymbol: () => isTransientSymbol, + isTrivia: () => isTrivia, + isTryStatement: () => isTryStatement, + isTupleTypeNode: () => isTupleTypeNode, + isTypeAlias: () => isTypeAlias, + isTypeAliasDeclaration: () => isTypeAliasDeclaration, + isTypeAssertionExpression: () => isTypeAssertionExpression, + isTypeDeclaration: () => isTypeDeclaration, + isTypeElement: () => isTypeElement, + isTypeKeyword: () => isTypeKeyword, + isTypeKeywordTokenOrIdentifier: () => isTypeKeywordTokenOrIdentifier, + isTypeLiteralNode: () => isTypeLiteralNode, + isTypeNode: () => isTypeNode, + isTypeNodeKind: () => isTypeNodeKind, + isTypeOfExpression: () => isTypeOfExpression, + isTypeOnlyExportDeclaration: () => isTypeOnlyExportDeclaration, + isTypeOnlyImportDeclaration: () => isTypeOnlyImportDeclaration, + isTypeOnlyImportOrExportDeclaration: () => isTypeOnlyImportOrExportDeclaration, + isTypeOperatorNode: () => isTypeOperatorNode, + isTypeParameterDeclaration: () => isTypeParameterDeclaration, + isTypePredicateNode: () => isTypePredicateNode, + isTypeQueryNode: () => isTypeQueryNode, + isTypeReferenceNode: () => isTypeReferenceNode, + isTypeReferenceType: () => isTypeReferenceType, + isTypeUsableAsPropertyName: () => isTypeUsableAsPropertyName, + isUMDExportSymbol: () => isUMDExportSymbol, + isUnaryExpression: () => isUnaryExpression, + isUnaryExpressionWithWrite: () => isUnaryExpressionWithWrite, + isUnicodeIdentifierStart: () => isUnicodeIdentifierStart, + isUnionTypeNode: () => isUnionTypeNode, + isUrl: () => isUrl, + isValidBigIntString: () => isValidBigIntString, + isValidESSymbolDeclaration: () => isValidESSymbolDeclaration, + isValidTypeOnlyAliasUseSite: () => isValidTypeOnlyAliasUseSite, + isValueSignatureDeclaration: () => isValueSignatureDeclaration, + isVarAwaitUsing: () => isVarAwaitUsing, + isVarConst: () => isVarConst, + isVarConstLike: () => isVarConstLike, + isVarUsing: () => isVarUsing, + isVariableDeclaration: () => isVariableDeclaration, + isVariableDeclarationInVariableStatement: () => isVariableDeclarationInVariableStatement, + isVariableDeclarationInitializedToBareOrAccessedRequire: () => isVariableDeclarationInitializedToBareOrAccessedRequire, + isVariableDeclarationInitializedToRequire: () => isVariableDeclarationInitializedToRequire, + isVariableDeclarationList: () => isVariableDeclarationList, + isVariableLike: () => isVariableLike, + isVariableStatement: () => isVariableStatement, + isVoidExpression: () => isVoidExpression, + isWatchSet: () => isWatchSet, + isWhileStatement: () => isWhileStatement, + isWhiteSpaceLike: () => isWhiteSpaceLike, + isWhiteSpaceSingleLine: () => isWhiteSpaceSingleLine, + isWithStatement: () => isWithStatement, + isWriteAccess: () => isWriteAccess, + isWriteOnlyAccess: () => isWriteOnlyAccess, + isYieldExpression: () => isYieldExpression, + jsxModeNeedsExplicitImport: () => jsxModeNeedsExplicitImport, + keywordPart: () => keywordPart, + last: () => last, + lastOrUndefined: () => lastOrUndefined, + length: () => length, + libMap: () => libMap, + libs: () => libs, + lineBreakPart: () => lineBreakPart, + loadModuleFromGlobalCache: () => loadModuleFromGlobalCache, + loadWithModeAwareCache: () => loadWithModeAwareCache, + makeIdentifierFromModuleName: () => makeIdentifierFromModuleName, + makeImport: () => makeImport, + makeStringLiteral: () => makeStringLiteral, + mangleScopedPackageName: () => mangleScopedPackageName, + map: () => map, + mapAllOrFail: () => mapAllOrFail, + mapDefined: () => mapDefined, + mapDefinedIterator: () => mapDefinedIterator, + mapEntries: () => mapEntries, + mapIterator: () => mapIterator, + mapOneOrMany: () => mapOneOrMany, + mapToDisplayParts: () => mapToDisplayParts, + matchFiles: () => matchFiles, + matchPatternOrExact: () => matchPatternOrExact, + matchedText: () => matchedText, + matchesExclude: () => matchesExclude, + matchesExcludeWorker: () => matchesExcludeWorker, + maxBy: () => maxBy, + maybeBind: () => maybeBind, + maybeSetLocalizedDiagnosticMessages: () => maybeSetLocalizedDiagnosticMessages, + memoize: () => memoize, + memoizeOne: () => memoizeOne, + min: () => min, + minAndMax: () => minAndMax, + missingFileModifiedTime: () => missingFileModifiedTime, + modifierToFlag: () => modifierToFlag, + modifiersToFlags: () => modifiersToFlags, + moduleExportNameIsDefault: () => moduleExportNameIsDefault, + moduleExportNameTextEscaped: () => moduleExportNameTextEscaped, + moduleExportNameTextUnescaped: () => moduleExportNameTextUnescaped, + moduleOptionDeclaration: () => moduleOptionDeclaration, + moduleResolutionIsEqualTo: () => moduleResolutionIsEqualTo, + moduleResolutionNameAndModeGetter: () => moduleResolutionNameAndModeGetter, + moduleResolutionOptionDeclarations: () => moduleResolutionOptionDeclarations, + moduleResolutionSupportsPackageJsonExportsAndImports: () => moduleResolutionSupportsPackageJsonExportsAndImports, + moduleResolutionUsesNodeModules: () => moduleResolutionUsesNodeModules, + moduleSpecifierToValidIdentifier: () => moduleSpecifierToValidIdentifier, + moduleSpecifiers: () => ts_moduleSpecifiers_exports, + moduleSupportsImportAttributes: () => moduleSupportsImportAttributes, + moduleSymbolToValidIdentifier: () => moduleSymbolToValidIdentifier, + moveEmitHelpers: () => moveEmitHelpers, + moveRangeEnd: () => moveRangeEnd, + moveRangePastDecorators: () => moveRangePastDecorators, + moveRangePastModifiers: () => moveRangePastModifiers, + moveRangePos: () => moveRangePos, + moveSyntheticComments: () => moveSyntheticComments, + mutateMap: () => mutateMap, + mutateMapSkippingNewValues: () => mutateMapSkippingNewValues, + needsParentheses: () => needsParentheses, + needsScopeMarker: () => needsScopeMarker, + newCaseClauseTracker: () => newCaseClauseTracker, + newPrivateEnvironment: () => newPrivateEnvironment, + noEmitNotification: () => noEmitNotification, + noEmitSubstitution: () => noEmitSubstitution, + noTransformers: () => noTransformers, + noTruncationMaximumTruncationLength: () => noTruncationMaximumTruncationLength, + nodeCanBeDecorated: () => nodeCanBeDecorated, + nodeCoreModules: () => nodeCoreModules, + nodeHasName: () => nodeHasName, + nodeIsDecorated: () => nodeIsDecorated, + nodeIsMissing: () => nodeIsMissing, + nodeIsPresent: () => nodeIsPresent, + nodeIsSynthesized: () => nodeIsSynthesized, + nodeModuleNameResolver: () => nodeModuleNameResolver, + nodeModulesPathPart: () => nodeModulesPathPart, + nodeNextJsonConfigResolver: () => nodeNextJsonConfigResolver, + nodeOrChildIsDecorated: () => nodeOrChildIsDecorated, + nodeOverlapsWithStartEnd: () => nodeOverlapsWithStartEnd, + nodePosToString: () => nodePosToString, + nodeSeenTracker: () => nodeSeenTracker, + nodeStartsNewLexicalEnvironment: () => nodeStartsNewLexicalEnvironment, + noop: () => noop, + noopFileWatcher: () => noopFileWatcher, + normalizePath: () => normalizePath, + normalizeSlashes: () => normalizeSlashes, + normalizeSpans: () => normalizeSpans, + not: () => not, + notImplemented: () => notImplemented, + notImplementedResolver: () => notImplementedResolver, + nullNodeConverters: () => nullNodeConverters, + nullParenthesizerRules: () => nullParenthesizerRules, + nullTransformationContext: () => nullTransformationContext, + objectAllocator: () => objectAllocator, + operatorPart: () => operatorPart, + optionDeclarations: () => optionDeclarations, + optionMapToObject: () => optionMapToObject, + optionsAffectingProgramStructure: () => optionsAffectingProgramStructure, + optionsForBuild: () => optionsForBuild, + optionsForWatch: () => optionsForWatch, + optionsHaveChanges: () => optionsHaveChanges, + or: () => or, + orderedRemoveItem: () => orderedRemoveItem, + orderedRemoveItemAt: () => orderedRemoveItemAt, + packageIdToPackageName: () => packageIdToPackageName, + packageIdToString: () => packageIdToString, + parameterIsThisKeyword: () => parameterIsThisKeyword, + parameterNamePart: () => parameterNamePart, + parseBaseNodeFactory: () => parseBaseNodeFactory, + parseBigInt: () => parseBigInt, + parseBuildCommand: () => parseBuildCommand, + parseCommandLine: () => parseCommandLine, + parseCommandLineWorker: () => parseCommandLineWorker, + parseConfigFileTextToJson: () => parseConfigFileTextToJson, + parseConfigFileWithSystem: () => parseConfigFileWithSystem, + parseConfigHostFromCompilerHostLike: () => parseConfigHostFromCompilerHostLike, + parseCustomTypeOption: () => parseCustomTypeOption, + parseIsolatedEntityName: () => parseIsolatedEntityName, + parseIsolatedJSDocComment: () => parseIsolatedJSDocComment, + parseJSDocTypeExpressionForTests: () => parseJSDocTypeExpressionForTests, + parseJsonConfigFileContent: () => parseJsonConfigFileContent, + parseJsonSourceFileConfigFileContent: () => parseJsonSourceFileConfigFileContent, + parseJsonText: () => parseJsonText, + parseListTypeOption: () => parseListTypeOption, + parseNodeFactory: () => parseNodeFactory, + parseNodeModuleFromPath: () => parseNodeModuleFromPath, + parsePackageName: () => parsePackageName, + parsePseudoBigInt: () => parsePseudoBigInt, + parseValidBigInt: () => parseValidBigInt, + pasteEdits: () => ts_PasteEdits_exports, + patchWriteFileEnsuringDirectory: () => patchWriteFileEnsuringDirectory, + pathContainsNodeModules: () => pathContainsNodeModules, + pathIsAbsolute: () => pathIsAbsolute, + pathIsBareSpecifier: () => pathIsBareSpecifier, + pathIsRelative: () => pathIsRelative, + patternText: () => patternText, + performIncrementalCompilation: () => performIncrementalCompilation, + performance: () => ts_performance_exports, + positionBelongsToNode: () => positionBelongsToNode, + positionIsASICandidate: () => positionIsASICandidate, + positionIsSynthesized: () => positionIsSynthesized, + positionsAreOnSameLine: () => positionsAreOnSameLine, + preProcessFile: () => preProcessFile, + probablyUsesSemicolons: () => probablyUsesSemicolons, + processCommentPragmas: () => processCommentPragmas, + processPragmasIntoFields: () => processPragmasIntoFields, + processTaggedTemplateExpression: () => processTaggedTemplateExpression, + programContainsEsModules: () => programContainsEsModules, + programContainsModules: () => programContainsModules, + projectReferenceIsEqualTo: () => projectReferenceIsEqualTo, + propertyNamePart: () => propertyNamePart, + pseudoBigIntToString: () => pseudoBigIntToString, + punctuationPart: () => punctuationPart, + pushIfUnique: () => pushIfUnique, + quote: () => quote, + quotePreferenceFromString: () => quotePreferenceFromString, + rangeContainsPosition: () => rangeContainsPosition, + rangeContainsPositionExclusive: () => rangeContainsPositionExclusive, + rangeContainsRange: () => rangeContainsRange, + rangeContainsRangeExclusive: () => rangeContainsRangeExclusive, + rangeContainsStartEnd: () => rangeContainsStartEnd, + rangeEndIsOnSameLineAsRangeStart: () => rangeEndIsOnSameLineAsRangeStart, + rangeEndPositionsAreOnSameLine: () => rangeEndPositionsAreOnSameLine, + rangeEquals: () => rangeEquals, + rangeIsOnSingleLine: () => rangeIsOnSingleLine, + rangeOfNode: () => rangeOfNode, + rangeOfTypeParameters: () => rangeOfTypeParameters, + rangeOverlapsWithStartEnd: () => rangeOverlapsWithStartEnd, + rangeStartIsOnSameLineAsRangeEnd: () => rangeStartIsOnSameLineAsRangeEnd, + rangeStartPositionsAreOnSameLine: () => rangeStartPositionsAreOnSameLine, + readBuilderProgram: () => readBuilderProgram, + readConfigFile: () => readConfigFile, + readJson: () => readJson, + readJsonConfigFile: () => readJsonConfigFile, + readJsonOrUndefined: () => readJsonOrUndefined, + reduceEachLeadingCommentRange: () => reduceEachLeadingCommentRange, + reduceEachTrailingCommentRange: () => reduceEachTrailingCommentRange, + reduceLeft: () => reduceLeft, + reduceLeftIterator: () => reduceLeftIterator, + reducePathComponents: () => reducePathComponents, + refactor: () => ts_refactor_exports, + regExpEscape: () => regExpEscape, + regularExpressionFlagToCharacterCode: () => regularExpressionFlagToCharacterCode, + relativeComplement: () => relativeComplement, + removeAllComments: () => removeAllComments, + removeEmitHelper: () => removeEmitHelper, + removeExtension: () => removeExtension, + removeFileExtension: () => removeFileExtension, + removeIgnoredPath: () => removeIgnoredPath, + removeMinAndVersionNumbers: () => removeMinAndVersionNumbers, + removePrefix: () => removePrefix, + removeSuffix: () => removeSuffix, + removeTrailingDirectorySeparator: () => removeTrailingDirectorySeparator, + repeatString: () => repeatString, + replaceElement: () => replaceElement, + replaceFirstStar: () => replaceFirstStar, + resolutionExtensionIsTSOrJson: () => resolutionExtensionIsTSOrJson, + resolveConfigFileProjectName: () => resolveConfigFileProjectName, + resolveJSModule: () => resolveJSModule, + resolveLibrary: () => resolveLibrary, + resolveModuleName: () => resolveModuleName, + resolveModuleNameFromCache: () => resolveModuleNameFromCache, + resolvePackageNameToPackageJson: () => resolvePackageNameToPackageJson, + resolvePath: () => resolvePath, + resolveProjectReferencePath: () => resolveProjectReferencePath, + resolveTripleslashReference: () => resolveTripleslashReference, + resolveTypeReferenceDirective: () => resolveTypeReferenceDirective, + resolvingEmptyArray: () => resolvingEmptyArray, + returnFalse: () => returnFalse, + returnNoopFileWatcher: () => returnNoopFileWatcher, + returnTrue: () => returnTrue, + returnUndefined: () => returnUndefined, + returnsPromise: () => returnsPromise, + rewriteModuleSpecifier: () => rewriteModuleSpecifier, + sameFlatMap: () => sameFlatMap, + sameMap: () => sameMap, + sameMapping: () => sameMapping, + scanTokenAtPosition: () => scanTokenAtPosition, + scanner: () => scanner, + semanticDiagnosticsOptionDeclarations: () => semanticDiagnosticsOptionDeclarations, + serializeCompilerOptions: () => serializeCompilerOptions, + server: () => ts_server_exports4, + servicesVersion: () => servicesVersion, + setCommentRange: () => setCommentRange, + setConfigFileInOptions: () => setConfigFileInOptions, + setConstantValue: () => setConstantValue, + setEmitFlags: () => setEmitFlags, + setGetSourceFileAsHashVersioned: () => setGetSourceFileAsHashVersioned, + setIdentifierAutoGenerate: () => setIdentifierAutoGenerate, + setIdentifierGeneratedImportReference: () => setIdentifierGeneratedImportReference, + setIdentifierTypeArguments: () => setIdentifierTypeArguments, + setInternalEmitFlags: () => setInternalEmitFlags, + setLocalizedDiagnosticMessages: () => setLocalizedDiagnosticMessages, + setNodeChildren: () => setNodeChildren, + setNodeFlags: () => setNodeFlags, + setObjectAllocator: () => setObjectAllocator, + setOriginalNode: () => setOriginalNode, + setParent: () => setParent, + setParentRecursive: () => setParentRecursive, + setPrivateIdentifier: () => setPrivateIdentifier, + setSnippetElement: () => setSnippetElement, + setSourceMapRange: () => setSourceMapRange, + setStackTraceLimit: () => setStackTraceLimit, + setStartsOnNewLine: () => setStartsOnNewLine, + setSyntheticLeadingComments: () => setSyntheticLeadingComments, + setSyntheticTrailingComments: () => setSyntheticTrailingComments, + setSys: () => setSys, + setSysLog: () => setSysLog, + setTextRange: () => setTextRange, + setTextRangeEnd: () => setTextRangeEnd, + setTextRangePos: () => setTextRangePos, + setTextRangePosEnd: () => setTextRangePosEnd, + setTextRangePosWidth: () => setTextRangePosWidth, + setTokenSourceMapRange: () => setTokenSourceMapRange, + setTypeNode: () => setTypeNode, + setUILocale: () => setUILocale, + setValueDeclaration: () => setValueDeclaration, + shouldAllowImportingTsExtension: () => shouldAllowImportingTsExtension, + shouldPreserveConstEnums: () => shouldPreserveConstEnums, + shouldRewriteModuleSpecifier: () => shouldRewriteModuleSpecifier, + shouldUseUriStyleNodeCoreModules: () => shouldUseUriStyleNodeCoreModules, + showModuleSpecifier: () => showModuleSpecifier, + signatureHasRestParameter: () => signatureHasRestParameter, + signatureToDisplayParts: () => signatureToDisplayParts, + single: () => single, + singleElementArray: () => singleElementArray, + singleIterator: () => singleIterator, + singleOrMany: () => singleOrMany, + singleOrUndefined: () => singleOrUndefined, + skipAlias: () => skipAlias, + skipConstraint: () => skipConstraint, + skipOuterExpressions: () => skipOuterExpressions, + skipParentheses: () => skipParentheses, + skipPartiallyEmittedExpressions: () => skipPartiallyEmittedExpressions, + skipTrivia: () => skipTrivia, + skipTypeChecking: () => skipTypeChecking, + skipTypeCheckingIgnoringNoCheck: () => skipTypeCheckingIgnoringNoCheck, + skipTypeParentheses: () => skipTypeParentheses, + skipWhile: () => skipWhile, + sliceAfter: () => sliceAfter, + some: () => some, + sortAndDeduplicate: () => sortAndDeduplicate, + sortAndDeduplicateDiagnostics: () => sortAndDeduplicateDiagnostics, + sourceFileAffectingCompilerOptions: () => sourceFileAffectingCompilerOptions, + sourceFileMayBeEmitted: () => sourceFileMayBeEmitted, + sourceMapCommentRegExp: () => sourceMapCommentRegExp, + sourceMapCommentRegExpDontCareLineStart: () => sourceMapCommentRegExpDontCareLineStart, + spacePart: () => spacePart, + spanMap: () => spanMap, + startEndContainsRange: () => startEndContainsRange, + startEndOverlapsWithStartEnd: () => startEndOverlapsWithStartEnd, + startOnNewLine: () => startOnNewLine, + startTracing: () => startTracing, + startsWith: () => startsWith, + startsWithDirectory: () => startsWithDirectory, + startsWithUnderscore: () => startsWithUnderscore, + startsWithUseStrict: () => startsWithUseStrict, + stringContainsAt: () => stringContainsAt, + stringToToken: () => stringToToken, + stripQuotes: () => stripQuotes, + supportedDeclarationExtensions: () => supportedDeclarationExtensions, + supportedJSExtensionsFlat: () => supportedJSExtensionsFlat, + supportedLocaleDirectories: () => supportedLocaleDirectories, + supportedTSExtensionsFlat: () => supportedTSExtensionsFlat, + supportedTSImplementationExtensions: () => supportedTSImplementationExtensions, + suppressLeadingAndTrailingTrivia: () => suppressLeadingAndTrailingTrivia, + suppressLeadingTrivia: () => suppressLeadingTrivia, + suppressTrailingTrivia: () => suppressTrailingTrivia, + symbolEscapedNameNoDefault: () => symbolEscapedNameNoDefault, + symbolName: () => symbolName, + symbolNameNoDefault: () => symbolNameNoDefault, + symbolToDisplayParts: () => symbolToDisplayParts, + sys: () => sys, + sysLog: () => sysLog, + tagNamesAreEquivalent: () => tagNamesAreEquivalent, + takeWhile: () => takeWhile, + targetOptionDeclaration: () => targetOptionDeclaration, + targetToLibMap: () => targetToLibMap, + testFormatSettings: () => testFormatSettings, + textChangeRangeIsUnchanged: () => textChangeRangeIsUnchanged, + textChangeRangeNewSpan: () => textChangeRangeNewSpan, + textChanges: () => ts_textChanges_exports, + textOrKeywordPart: () => textOrKeywordPart, + textPart: () => textPart, + textRangeContainsPositionInclusive: () => textRangeContainsPositionInclusive, + textRangeContainsTextSpan: () => textRangeContainsTextSpan, + textRangeIntersectsWithTextSpan: () => textRangeIntersectsWithTextSpan, + textSpanContainsPosition: () => textSpanContainsPosition, + textSpanContainsTextRange: () => textSpanContainsTextRange, + textSpanContainsTextSpan: () => textSpanContainsTextSpan, + textSpanEnd: () => textSpanEnd, + textSpanIntersection: () => textSpanIntersection, + textSpanIntersectsWith: () => textSpanIntersectsWith, + textSpanIntersectsWithPosition: () => textSpanIntersectsWithPosition, + textSpanIntersectsWithTextSpan: () => textSpanIntersectsWithTextSpan, + textSpanIsEmpty: () => textSpanIsEmpty, + textSpanOverlap: () => textSpanOverlap, + textSpanOverlapsWith: () => textSpanOverlapsWith, + textSpansEqual: () => textSpansEqual, + textToKeywordObj: () => textToKeywordObj, + timestamp: () => timestamp, + toArray: () => toArray, + toBuilderFileEmit: () => toBuilderFileEmit, + toBuilderStateFileInfoForMultiEmit: () => toBuilderStateFileInfoForMultiEmit, + toEditorSettings: () => toEditorSettings, + toFileNameLowerCase: () => toFileNameLowerCase, + toPath: () => toPath, + toProgramEmitPending: () => toProgramEmitPending, + toSorted: () => toSorted, + tokenIsIdentifierOrKeyword: () => tokenIsIdentifierOrKeyword, + tokenIsIdentifierOrKeywordOrGreaterThan: () => tokenIsIdentifierOrKeywordOrGreaterThan, + tokenToString: () => tokenToString, + trace: () => trace, + tracing: () => tracing, + tracingEnabled: () => tracingEnabled, + transferSourceFileChildren: () => transferSourceFileChildren, + transform: () => transform, + transformClassFields: () => transformClassFields, + transformDeclarations: () => transformDeclarations, + transformECMAScriptModule: () => transformECMAScriptModule, + transformES2015: () => transformES2015, + transformES2016: () => transformES2016, + transformES2017: () => transformES2017, + transformES2018: () => transformES2018, + transformES2019: () => transformES2019, + transformES2020: () => transformES2020, + transformES2021: () => transformES2021, + transformESDecorators: () => transformESDecorators, + transformESNext: () => transformESNext, + transformGenerators: () => transformGenerators, + transformImpliedNodeFormatDependentModule: () => transformImpliedNodeFormatDependentModule, + transformJsx: () => transformJsx, + transformLegacyDecorators: () => transformLegacyDecorators, + transformModule: () => transformModule, + transformNamedEvaluation: () => transformNamedEvaluation, + transformNodes: () => transformNodes, + transformSystemModule: () => transformSystemModule, + transformTypeScript: () => transformTypeScript, + transpile: () => transpile, + transpileDeclaration: () => transpileDeclaration, + transpileModule: () => transpileModule, + transpileOptionValueCompilerOptions: () => transpileOptionValueCompilerOptions, + tryAddToSet: () => tryAddToSet, + tryAndIgnoreErrors: () => tryAndIgnoreErrors, + tryCast: () => tryCast, + tryDirectoryExists: () => tryDirectoryExists, + tryExtractTSExtension: () => tryExtractTSExtension, + tryFileExists: () => tryFileExists, + tryGetClassExtendingExpressionWithTypeArguments: () => tryGetClassExtendingExpressionWithTypeArguments, + tryGetClassImplementingOrExtendingExpressionWithTypeArguments: () => tryGetClassImplementingOrExtendingExpressionWithTypeArguments, + tryGetDirectories: () => tryGetDirectories, + tryGetExtensionFromPath: () => tryGetExtensionFromPath2, + tryGetImportFromModuleSpecifier: () => tryGetImportFromModuleSpecifier, + tryGetJSDocSatisfiesTypeNode: () => tryGetJSDocSatisfiesTypeNode, + tryGetModuleNameFromFile: () => tryGetModuleNameFromFile, + tryGetModuleSpecifierFromDeclaration: () => tryGetModuleSpecifierFromDeclaration, + tryGetNativePerformanceHooks: () => tryGetNativePerformanceHooks, + tryGetPropertyAccessOrIdentifierToString: () => tryGetPropertyAccessOrIdentifierToString, + tryGetPropertyNameOfBindingOrAssignmentElement: () => tryGetPropertyNameOfBindingOrAssignmentElement, + tryGetSourceMappingURL: () => tryGetSourceMappingURL, + tryGetTextOfPropertyName: () => tryGetTextOfPropertyName, + tryParseJson: () => tryParseJson, + tryParsePattern: () => tryParsePattern, + tryParsePatterns: () => tryParsePatterns, + tryParseRawSourceMap: () => tryParseRawSourceMap, + tryReadDirectory: () => tryReadDirectory, + tryReadFile: () => tryReadFile, + tryRemoveDirectoryPrefix: () => tryRemoveDirectoryPrefix, + tryRemoveExtension: () => tryRemoveExtension, + tryRemovePrefix: () => tryRemovePrefix, + tryRemoveSuffix: () => tryRemoveSuffix, + tscBuildOption: () => tscBuildOption, + typeAcquisitionDeclarations: () => typeAcquisitionDeclarations, + typeAliasNamePart: () => typeAliasNamePart, + typeDirectiveIsEqualTo: () => typeDirectiveIsEqualTo, + typeKeywords: () => typeKeywords, + typeParameterNamePart: () => typeParameterNamePart, + typeToDisplayParts: () => typeToDisplayParts, + unchangedPollThresholds: () => unchangedPollThresholds, + unchangedTextChangeRange: () => unchangedTextChangeRange, + unescapeLeadingUnderscores: () => unescapeLeadingUnderscores, + unmangleScopedPackageName: () => unmangleScopedPackageName, + unorderedRemoveItem: () => unorderedRemoveItem, + unprefixedNodeCoreModules: () => unprefixedNodeCoreModules, + unreachableCodeIsError: () => unreachableCodeIsError, + unsetNodeChildren: () => unsetNodeChildren, + unusedLabelIsError: () => unusedLabelIsError, + unwrapInnermostStatementOfLabel: () => unwrapInnermostStatementOfLabel, + unwrapParenthesizedExpression: () => unwrapParenthesizedExpression, + updateErrorForNoInputFiles: () => updateErrorForNoInputFiles, + updateLanguageServiceSourceFile: () => updateLanguageServiceSourceFile, + updateMissingFilePathsWatch: () => updateMissingFilePathsWatch, + updateResolutionField: () => updateResolutionField, + updateSharedExtendedConfigFileWatcher: () => updateSharedExtendedConfigFileWatcher, + updateSourceFile: () => updateSourceFile, + updateWatchingWildcardDirectories: () => updateWatchingWildcardDirectories, + usingSingleLineStringWriter: () => usingSingleLineStringWriter, + utf16EncodeAsString: () => utf16EncodeAsString, + validateLocaleAndSetLanguage: () => validateLocaleAndSetLanguage, + version: () => version, + versionMajorMinor: () => versionMajorMinor, + visitArray: () => visitArray, + visitCommaListElements: () => visitCommaListElements, + visitEachChild: () => visitEachChild, + visitFunctionBody: () => visitFunctionBody, + visitIterationBody: () => visitIterationBody, + visitLexicalEnvironment: () => visitLexicalEnvironment, + visitNode: () => visitNode, + visitNodes: () => visitNodes2, + visitParameterList: () => visitParameterList, + walkUpBindingElementsAndPatterns: () => walkUpBindingElementsAndPatterns, + walkUpOuterExpressions: () => walkUpOuterExpressions, + walkUpParenthesizedExpressions: () => walkUpParenthesizedExpressions, + walkUpParenthesizedTypes: () => walkUpParenthesizedTypes, + walkUpParenthesizedTypesAndGetParentAndChild: () => walkUpParenthesizedTypesAndGetParentAndChild, + whitespaceOrMapCommentRegExp: () => whitespaceOrMapCommentRegExp, + writeCommentRange: () => writeCommentRange, + writeFile: () => writeFile, + writeFileEnsuringDirectories: () => writeFileEnsuringDirectories, + zipWith: () => zipWith +}); +module.exports = __toCommonJS(typescript_exports); + +// src/compiler/corePublic.ts +var versionMajorMinor = "5.9"; +var version = "5.9.3"; +var Comparison = /* @__PURE__ */ ((Comparison3) => { + Comparison3[Comparison3["LessThan"] = -1] = "LessThan"; + Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo"; + Comparison3[Comparison3["GreaterThan"] = 1] = "GreaterThan"; + return Comparison3; +})(Comparison || {}); + +// src/compiler/core.ts +var emptyArray = []; +var emptyMap = /* @__PURE__ */ new Map(); +function length(array) { + return array !== void 0 ? array.length : 0; +} +function forEach(array, callback) { + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const result = callback(array[i], i); + if (result) { + return result; + } + } + } + return void 0; +} +function forEachRight(array, callback) { + if (array !== void 0) { + for (let i = array.length - 1; i >= 0; i--) { + const result = callback(array[i], i); + if (result) { + return result; + } + } + } + return void 0; +} +function firstDefined(array, callback) { + if (array === void 0) { + return void 0; + } + for (let i = 0; i < array.length; i++) { + const result = callback(array[i], i); + if (result !== void 0) { + return result; + } + } + return void 0; +} +function firstDefinedIterator(iter, callback) { + for (const value of iter) { + const result = callback(value); + if (result !== void 0) { + return result; + } + } + return void 0; +} +function reduceLeftIterator(iterator, f, initial) { + let result = initial; + if (iterator) { + let pos = 0; + for (const value of iterator) { + result = f(result, value, pos); + pos++; + } + } + return result; +} +function zipWith(arrayA, arrayB, callback) { + const result = []; + Debug.assertEqual(arrayA.length, arrayB.length); + for (let i = 0; i < arrayA.length; i++) { + result.push(callback(arrayA[i], arrayB[i], i)); + } + return result; +} +function intersperse(input, element) { + if (input.length <= 1) { + return input; + } + const result = []; + for (let i = 0, n = input.length; i < n; i++) { + if (i !== 0) result.push(element); + result.push(input[i]); + } + return result; +} +function every(array, callback) { + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + if (!callback(array[i], i)) { + return false; + } + } + } + return true; +} +function find(array, predicate, startIndex) { + if (array === void 0) return void 0; + for (let i = startIndex ?? 0; i < array.length; i++) { + const value = array[i]; + if (predicate(value, i)) { + return value; + } + } + return void 0; +} +function findLast(array, predicate, startIndex) { + if (array === void 0) return void 0; + for (let i = startIndex ?? array.length - 1; i >= 0; i--) { + const value = array[i]; + if (predicate(value, i)) { + return value; + } + } + return void 0; +} +function findIndex(array, predicate, startIndex) { + if (array === void 0) return -1; + for (let i = startIndex ?? 0; i < array.length; i++) { + if (predicate(array[i], i)) { + return i; + } + } + return -1; +} +function findLastIndex(array, predicate, startIndex) { + if (array === void 0) return -1; + for (let i = startIndex ?? array.length - 1; i >= 0; i--) { + if (predicate(array[i], i)) { + return i; + } + } + return -1; +} +function contains(array, value, equalityComparer = equateValues) { + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + if (equalityComparer(array[i], value)) { + return true; + } + } + } + return false; +} +function indexOfAnyCharCode(text, charCodes, start) { + for (let i = start ?? 0; i < text.length; i++) { + if (contains(charCodes, text.charCodeAt(i))) { + return i; + } + } + return -1; +} +function countWhere(array, predicate) { + let count = 0; + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const v = array[i]; + if (predicate(v, i)) { + count++; + } + } + } + return count; +} +function filter(array, f) { + if (array !== void 0) { + const len = array.length; + let i = 0; + while (i < len && f(array[i])) i++; + if (i < len) { + const result = array.slice(0, i); + i++; + while (i < len) { + const item = array[i]; + if (f(item)) { + result.push(item); + } + i++; + } + return result; + } + } + return array; +} +function filterMutate(array, f) { + let outIndex = 0; + for (let i = 0; i < array.length; i++) { + if (f(array[i], i, array)) { + array[outIndex] = array[i]; + outIndex++; + } + } + array.length = outIndex; +} +function clear(array) { + array.length = 0; +} +function map(array, f) { + let result; + if (array !== void 0) { + result = []; + for (let i = 0; i < array.length; i++) { + result.push(f(array[i], i)); + } + } + return result; +} +function* mapIterator(iter, mapFn) { + for (const x of iter) { + yield mapFn(x); + } +} +function sameMap(array, f) { + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const item = array[i]; + const mapped = f(item, i); + if (item !== mapped) { + const result = array.slice(0, i); + result.push(mapped); + for (i++; i < array.length; i++) { + result.push(f(array[i], i)); + } + return result; + } + } + } + return array; +} +function flatten(array) { + const result = []; + for (let i = 0; i < array.length; i++) { + const v = array[i]; + if (v) { + if (isArray(v)) { + addRange(result, v); + } else { + result.push(v); + } + } + } + return result; +} +function flatMap(array, mapfn) { + let result; + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const v = mapfn(array[i], i); + if (v) { + if (isArray(v)) { + result = addRange(result, v); + } else { + result = append(result, v); + } + } + } + } + return result ?? emptyArray; +} +function flatMapToMutable(array, mapfn) { + const result = []; + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const v = mapfn(array[i], i); + if (v) { + if (isArray(v)) { + addRange(result, v); + } else { + result.push(v); + } + } + } + } + return result; +} +function* flatMapIterator(iter, mapfn) { + for (const x of iter) { + const iter2 = mapfn(x); + if (!iter2) continue; + yield* iter2; + } +} +function sameFlatMap(array, mapfn) { + let result; + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const item = array[i]; + const mapped = mapfn(item, i); + if (result || item !== mapped || isArray(mapped)) { + if (!result) { + result = array.slice(0, i); + } + if (isArray(mapped)) { + addRange(result, mapped); + } else { + result.push(mapped); + } + } + } + } + return result ?? array; +} +function mapAllOrFail(array, mapFn) { + const result = []; + for (let i = 0; i < array.length; i++) { + const mapped = mapFn(array[i], i); + if (mapped === void 0) { + return void 0; + } + result.push(mapped); + } + return result; +} +function mapDefined(array, mapFn) { + const result = []; + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const mapped = mapFn(array[i], i); + if (mapped !== void 0) { + result.push(mapped); + } + } + } + return result; +} +function* mapDefinedIterator(iter, mapFn) { + for (const x of iter) { + const value = mapFn(x); + if (value !== void 0) { + yield value; + } + } +} +function getOrUpdate(map2, key, callback) { + if (map2.has(key)) { + return map2.get(key); + } + const value = callback(); + map2.set(key, value); + return value; +} +function tryAddToSet(set, value) { + if (!set.has(value)) { + set.add(value); + return true; + } + return false; +} +function* singleIterator(value) { + yield value; +} +function spanMap(array, keyfn, mapfn) { + let result; + if (array !== void 0) { + result = []; + const len = array.length; + let previousKey; + let key; + let start = 0; + let pos = 0; + while (start < len) { + while (pos < len) { + const value = array[pos]; + key = keyfn(value, pos); + if (pos === 0) { + previousKey = key; + } else if (key !== previousKey) { + break; + } + pos++; + } + if (start < pos) { + const v = mapfn(array.slice(start, pos), previousKey, start, pos); + if (v) { + result.push(v); + } + start = pos; + } + previousKey = key; + pos++; + } + } + return result; +} +function mapEntries(map2, f) { + if (map2 === void 0) { + return void 0; + } + const result = /* @__PURE__ */ new Map(); + map2.forEach((value, key) => { + const [newKey, newValue] = f(key, value); + result.set(newKey, newValue); + }); + return result; +} +function some(array, predicate) { + if (array !== void 0) { + if (predicate !== void 0) { + for (let i = 0; i < array.length; i++) { + if (predicate(array[i])) { + return true; + } + } + } else { + return array.length > 0; + } + } + return false; +} +function getRangesWhere(arr, pred, cb) { + let start; + for (let i = 0; i < arr.length; i++) { + if (pred(arr[i])) { + start = start === void 0 ? i : start; + } else { + if (start !== void 0) { + cb(start, i); + start = void 0; + } + } + } + if (start !== void 0) cb(start, arr.length); +} +function concatenate(array1, array2) { + if (array2 === void 0 || array2.length === 0) return array1; + if (array1 === void 0 || array1.length === 0) return array2; + return [...array1, ...array2]; +} +function selectIndex(_, i) { + return i; +} +function indicesOf(array) { + return array.map(selectIndex); +} +function deduplicateRelational(array, equalityComparer, comparer) { + const indices = indicesOf(array); + stableSortIndices(array, indices, comparer); + let last2 = array[indices[0]]; + const deduplicated = [indices[0]]; + for (let i = 1; i < indices.length; i++) { + const index = indices[i]; + const item = array[index]; + if (!equalityComparer(last2, item)) { + deduplicated.push(index); + last2 = item; + } + } + deduplicated.sort(); + return deduplicated.map((i) => array[i]); +} +function deduplicateEquality(array, equalityComparer) { + const result = []; + for (let i = 0; i < array.length; i++) { + pushIfUnique(result, array[i], equalityComparer); + } + return result; +} +function deduplicate(array, equalityComparer, comparer) { + return array.length === 0 ? [] : array.length === 1 ? array.slice() : comparer ? deduplicateRelational(array, equalityComparer, comparer) : deduplicateEquality(array, equalityComparer); +} +function deduplicateSorted(array, comparer) { + if (array.length === 0) return emptyArray; + let last2 = array[0]; + const deduplicated = [last2]; + for (let i = 1; i < array.length; i++) { + const next = array[i]; + switch (comparer(next, last2)) { + // equality comparison + case true: + // relational comparison + // falls through + case 0 /* EqualTo */: + continue; + case -1 /* LessThan */: + return Debug.fail("Array is unsorted."); + } + deduplicated.push(last2 = next); + } + return deduplicated; +} +function createSortedArray() { + return []; +} +function insertSorted(array, insert, compare, equalityComparer, allowDuplicates) { + if (array.length === 0) { + array.push(insert); + return true; + } + const insertIndex = binarySearch(array, insert, identity, compare); + if (insertIndex < 0) { + if (equalityComparer && !allowDuplicates) { + const idx = ~insertIndex; + if (idx > 0 && equalityComparer(insert, array[idx - 1])) { + return false; + } + if (idx < array.length && equalityComparer(insert, array[idx])) { + array.splice(idx, 1, insert); + return true; + } + } + array.splice(~insertIndex, 0, insert); + return true; + } + if (allowDuplicates) { + array.splice(insertIndex, 0, insert); + return true; + } + return false; +} +function sortAndDeduplicate(array, comparer, equalityComparer) { + return deduplicateSorted(toSorted(array, comparer), equalityComparer ?? comparer ?? compareStringsCaseSensitive); +} +function arrayIsEqualTo(array1, array2, equalityComparer = equateValues) { + if (array1 === void 0 || array2 === void 0) { + return array1 === array2; + } + if (array1.length !== array2.length) { + return false; + } + for (let i = 0; i < array1.length; i++) { + if (!equalityComparer(array1[i], array2[i], i)) { + return false; + } + } + return true; +} +function compact(array) { + let result; + if (array !== void 0) { + for (let i = 0; i < array.length; i++) { + const v = array[i]; + if (result ?? !v) { + result ?? (result = array.slice(0, i)); + if (v) { + result.push(v); + } + } + } + } + return result ?? array; +} +function relativeComplement(arrayA, arrayB, comparer) { + if (!arrayB || !arrayA || arrayB.length === 0 || arrayA.length === 0) return arrayB; + const result = []; + loopB: + for (let offsetA = 0, offsetB = 0; offsetB < arrayB.length; offsetB++) { + if (offsetB > 0) { + Debug.assertGreaterThanOrEqual(comparer(arrayB[offsetB], arrayB[offsetB - 1]), 0 /* EqualTo */); + } + loopA: + for (const startA = offsetA; offsetA < arrayA.length; offsetA++) { + if (offsetA > startA) { + Debug.assertGreaterThanOrEqual(comparer(arrayA[offsetA], arrayA[offsetA - 1]), 0 /* EqualTo */); + } + switch (comparer(arrayB[offsetB], arrayA[offsetA])) { + case -1 /* LessThan */: + result.push(arrayB[offsetB]); + continue loopB; + case 0 /* EqualTo */: + continue loopB; + case 1 /* GreaterThan */: + continue loopA; + } + } + } + return result; +} +function append(to, value) { + if (value === void 0) return to; + if (to === void 0) return [value]; + to.push(value); + return to; +} +function combine(xs, ys) { + if (xs === void 0) return ys; + if (ys === void 0) return xs; + if (isArray(xs)) return isArray(ys) ? concatenate(xs, ys) : append(xs, ys); + if (isArray(ys)) return append(ys, xs); + return [xs, ys]; +} +function toOffset(array, offset) { + return offset < 0 ? array.length + offset : offset; +} +function addRange(to, from, start, end) { + if (from === void 0 || from.length === 0) return to; + if (to === void 0) return from.slice(start, end); + start = start === void 0 ? 0 : toOffset(from, start); + end = end === void 0 ? from.length : toOffset(from, end); + for (let i = start; i < end && i < from.length; i++) { + if (from[i] !== void 0) { + to.push(from[i]); + } + } + return to; +} +function pushIfUnique(array, toAdd, equalityComparer) { + if (contains(array, toAdd, equalityComparer)) { + return false; + } else { + array.push(toAdd); + return true; + } +} +function appendIfUnique(array, toAdd, equalityComparer) { + if (array !== void 0) { + pushIfUnique(array, toAdd, equalityComparer); + return array; + } else { + return [toAdd]; + } +} +function stableSortIndices(array, indices, comparer) { + indices.sort((x, y) => comparer(array[x], array[y]) || compareValues(x, y)); +} +function toSorted(array, comparer) { + return array.length === 0 ? emptyArray : array.slice().sort(comparer); +} +function* arrayReverseIterator(array) { + for (let i = array.length - 1; i >= 0; i--) { + yield array[i]; + } +} +function rangeEquals(array1, array2, pos, end) { + while (pos < end) { + if (array1[pos] !== array2[pos]) { + return false; + } + pos++; + } + return true; +} +var elementAt = !!Array.prototype.at ? (array, offset) => array == null ? void 0 : array.at(offset) : (array, offset) => { + if (array !== void 0) { + offset = toOffset(array, offset); + if (offset < array.length) { + return array[offset]; + } + } + return void 0; +}; +function firstOrUndefined(array) { + return array === void 0 || array.length === 0 ? void 0 : array[0]; +} +function firstOrUndefinedIterator(iter) { + if (iter !== void 0) { + for (const value of iter) { + return value; + } + } + return void 0; +} +function first(array) { + Debug.assert(array.length !== 0); + return array[0]; +} +function firstIterator(iter) { + for (const value of iter) { + return value; + } + Debug.fail("iterator is empty"); +} +function lastOrUndefined(array) { + return array === void 0 || array.length === 0 ? void 0 : array[array.length - 1]; +} +function last(array) { + Debug.assert(array.length !== 0); + return array[array.length - 1]; +} +function singleOrUndefined(array) { + return array !== void 0 && array.length === 1 ? array[0] : void 0; +} +function single(array) { + return Debug.checkDefined(singleOrUndefined(array)); +} +function singleOrMany(array) { + return array !== void 0 && array.length === 1 ? array[0] : array; +} +function replaceElement(array, index, value) { + const result = array.slice(0); + result[index] = value; + return result; +} +function binarySearch(array, value, keySelector, keyComparer, offset) { + return binarySearchKey(array, keySelector(value), keySelector, keyComparer, offset); +} +function binarySearchKey(array, key, keySelector, keyComparer, offset) { + if (!some(array)) { + return -1; + } + let low = offset ?? 0; + let high = array.length - 1; + while (low <= high) { + const middle = low + (high - low >> 1); + const midKey = keySelector(array[middle], middle); + switch (keyComparer(midKey, key)) { + case -1 /* LessThan */: + low = middle + 1; + break; + case 0 /* EqualTo */: + return middle; + case 1 /* GreaterThan */: + high = middle - 1; + break; + } + } + return ~low; +} +function reduceLeft(array, f, initial, start, count) { + if (array && array.length > 0) { + const size = array.length; + if (size > 0) { + let pos = start === void 0 || start < 0 ? 0 : start; + const end = count === void 0 || pos + count > size - 1 ? size - 1 : pos + count; + let result; + if (arguments.length <= 2) { + result = array[pos]; + pos++; + } else { + result = initial; + } + while (pos <= end) { + result = f(result, array[pos], pos); + pos++; + } + return result; + } + } + return initial; +} +var hasOwnProperty = Object.prototype.hasOwnProperty; +function hasProperty(map2, key) { + return hasOwnProperty.call(map2, key); +} +function getProperty(map2, key) { + return hasOwnProperty.call(map2, key) ? map2[key] : void 0; +} +function getOwnKeys(map2) { + const keys = []; + for (const key in map2) { + if (hasOwnProperty.call(map2, key)) { + keys.push(key); + } + } + return keys; +} +function getAllKeys(obj) { + const result = []; + do { + const names = Object.getOwnPropertyNames(obj); + for (const name of names) { + pushIfUnique(result, name); + } + } while (obj = Object.getPrototypeOf(obj)); + return result; +} +function getOwnValues(collection) { + const values = []; + for (const key in collection) { + if (hasOwnProperty.call(collection, key)) { + values.push(collection[key]); + } + } + return values; +} +function arrayOf(count, f) { + const result = new Array(count); + for (let i = 0; i < count; i++) { + result[i] = f(i); + } + return result; +} +function arrayFrom(iterator, map2) { + const result = []; + for (const value of iterator) { + result.push(map2 ? map2(value) : value); + } + return result; +} +function assign(t, ...args) { + for (const arg of args) { + if (arg === void 0) continue; + for (const p in arg) { + if (hasProperty(arg, p)) { + t[p] = arg[p]; + } + } + } + return t; +} +function equalOwnProperties(left, right, equalityComparer = equateValues) { + if (left === right) return true; + if (!left || !right) return false; + for (const key in left) { + if (hasOwnProperty.call(left, key)) { + if (!hasOwnProperty.call(right, key)) return false; + if (!equalityComparer(left[key], right[key])) return false; + } + } + for (const key in right) { + if (hasOwnProperty.call(right, key)) { + if (!hasOwnProperty.call(left, key)) return false; + } + } + return true; +} +function arrayToMap(array, makeKey, makeValue = identity) { + const result = /* @__PURE__ */ new Map(); + for (let i = 0; i < array.length; i++) { + const value = array[i]; + const key = makeKey(value); + if (key !== void 0) result.set(key, makeValue(value)); + } + return result; +} +function arrayToNumericMap(array, makeKey, makeValue = identity) { + const result = []; + for (let i = 0; i < array.length; i++) { + const value = array[i]; + result[makeKey(value)] = makeValue(value); + } + return result; +} +function arrayToMultiMap(values, makeKey, makeValue = identity) { + const result = createMultiMap(); + for (let i = 0; i < values.length; i++) { + const value = values[i]; + result.add(makeKey(value), makeValue(value)); + } + return result; +} +function group(values, getGroupId, resultSelector = identity) { + return arrayFrom(arrayToMultiMap(values, getGroupId).values(), resultSelector); +} +function groupBy(values, keySelector) { + const result = {}; + if (values !== void 0) { + for (let i = 0; i < values.length; i++) { + const value = values[i]; + const key = `${keySelector(value)}`; + const array = result[key] ?? (result[key] = []); + array.push(value); + } + } + return result; +} +function clone(object) { + const result = {}; + for (const id in object) { + if (hasOwnProperty.call(object, id)) { + result[id] = object[id]; + } + } + return result; +} +function extend(first2, second) { + const result = {}; + for (const id in second) { + if (hasOwnProperty.call(second, id)) { + result[id] = second[id]; + } + } + for (const id in first2) { + if (hasOwnProperty.call(first2, id)) { + result[id] = first2[id]; + } + } + return result; +} +function copyProperties(first2, second) { + for (const id in second) { + if (hasOwnProperty.call(second, id)) { + first2[id] = second[id]; + } + } +} +function maybeBind(obj, fn) { + return fn == null ? void 0 : fn.bind(obj); +} +function createMultiMap() { + const map2 = /* @__PURE__ */ new Map(); + map2.add = multiMapAdd; + map2.remove = multiMapRemove; + return map2; +} +function multiMapAdd(key, value) { + let values = this.get(key); + if (values !== void 0) { + values.push(value); + } else { + this.set(key, values = [value]); + } + return values; +} +function multiMapRemove(key, value) { + const values = this.get(key); + if (values !== void 0) { + unorderedRemoveItem(values, value); + if (!values.length) { + this.delete(key); + } + } +} +function createQueue(items) { + const elements = (items == null ? void 0 : items.slice()) ?? []; + let headIndex = 0; + function isEmpty() { + return headIndex === elements.length; + } + function enqueue(...items2) { + elements.push(...items2); + } + function dequeue() { + if (isEmpty()) { + throw new Error("Queue is empty"); + } + const result = elements[headIndex]; + elements[headIndex] = void 0; + headIndex++; + if (headIndex > 100 && headIndex > elements.length >> 1) { + const newLength = elements.length - headIndex; + elements.copyWithin( + /*target*/ + 0, + /*start*/ + headIndex + ); + elements.length = newLength; + headIndex = 0; + } + return result; + } + return { + enqueue, + dequeue, + isEmpty + }; +} +function createSet(getHashCode, equals) { + const multiMap = /* @__PURE__ */ new Map(); + let size = 0; + function* getElementIterator() { + for (const value of multiMap.values()) { + if (isArray(value)) { + yield* value; + } else { + yield value; + } + } + } + const set = { + has(element) { + const hash = getHashCode(element); + if (!multiMap.has(hash)) return false; + const candidates = multiMap.get(hash); + if (isArray(candidates)) return contains(candidates, element, equals); + return equals(candidates, element); + }, + add(element) { + const hash = getHashCode(element); + if (multiMap.has(hash)) { + const values = multiMap.get(hash); + if (isArray(values)) { + if (!contains(values, element, equals)) { + values.push(element); + size++; + } + } else { + const value = values; + if (!equals(value, element)) { + multiMap.set(hash, [value, element]); + size++; + } + } + } else { + multiMap.set(hash, element); + size++; + } + return this; + }, + delete(element) { + const hash = getHashCode(element); + if (!multiMap.has(hash)) return false; + const candidates = multiMap.get(hash); + if (isArray(candidates)) { + for (let i = 0; i < candidates.length; i++) { + if (equals(candidates[i], element)) { + if (candidates.length === 1) { + multiMap.delete(hash); + } else if (candidates.length === 2) { + multiMap.set(hash, candidates[1 - i]); + } else { + unorderedRemoveItemAt(candidates, i); + } + size--; + return true; + } + } + } else { + const candidate = candidates; + if (equals(candidate, element)) { + multiMap.delete(hash); + size--; + return true; + } + } + return false; + }, + clear() { + multiMap.clear(); + size = 0; + }, + get size() { + return size; + }, + forEach(action) { + for (const elements of arrayFrom(multiMap.values())) { + if (isArray(elements)) { + for (const element of elements) { + action(element, element, set); + } + } else { + const element = elements; + action(element, element, set); + } + } + }, + keys() { + return getElementIterator(); + }, + values() { + return getElementIterator(); + }, + *entries() { + for (const value of getElementIterator()) { + yield [value, value]; + } + }, + [Symbol.iterator]: () => { + return getElementIterator(); + }, + [Symbol.toStringTag]: multiMap[Symbol.toStringTag] + }; + return set; +} +function isArray(value) { + return Array.isArray(value); +} +function toArray(value) { + return isArray(value) ? value : [value]; +} +function isString(text) { + return typeof text === "string"; +} +function isNumber(x) { + return typeof x === "number"; +} +function tryCast(value, test) { + return value !== void 0 && test(value) ? value : void 0; +} +function cast(value, test) { + if (value !== void 0 && test(value)) return value; + return Debug.fail(`Invalid cast. The supplied value ${value} did not pass the test '${Debug.getFunctionName(test)}'.`); +} +function noop(_) { +} +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} +function returnUndefined() { + return void 0; +} +function identity(x) { + return x; +} +function toLowerCase(x) { + return x.toLowerCase(); +} +var fileNameLowerCaseRegExp = /[^\u0130\u0131\u00DFa-z0-9\\/:\-_. ]+/g; +function toFileNameLowerCase(x) { + return fileNameLowerCaseRegExp.test(x) ? x.replace(fileNameLowerCaseRegExp, toLowerCase) : x; +} +function notImplemented() { + throw new Error("Not implemented"); +} +function memoize(callback) { + let value; + return () => { + if (callback) { + value = callback(); + callback = void 0; + } + return value; + }; +} +function memoizeOne(callback) { + const map2 = /* @__PURE__ */ new Map(); + return (arg) => { + const key = `${typeof arg}:${arg}`; + let value = map2.get(key); + if (value === void 0 && !map2.has(key)) { + value = callback(arg); + map2.set(key, value); + } + return value; + }; +} +var AssertionLevel = /* @__PURE__ */ ((AssertionLevel2) => { + AssertionLevel2[AssertionLevel2["None"] = 0] = "None"; + AssertionLevel2[AssertionLevel2["Normal"] = 1] = "Normal"; + AssertionLevel2[AssertionLevel2["Aggressive"] = 2] = "Aggressive"; + AssertionLevel2[AssertionLevel2["VeryAggressive"] = 3] = "VeryAggressive"; + return AssertionLevel2; +})(AssertionLevel || {}); +function equateValues(a, b) { + return a === b; +} +function equateStringsCaseInsensitive(a, b) { + return a === b || a !== void 0 && b !== void 0 && a.toUpperCase() === b.toUpperCase(); +} +function equateStringsCaseSensitive(a, b) { + return equateValues(a, b); +} +function compareComparableValues(a, b) { + return a === b ? 0 /* EqualTo */ : a === void 0 ? -1 /* LessThan */ : b === void 0 ? 1 /* GreaterThan */ : a < b ? -1 /* LessThan */ : 1 /* GreaterThan */; +} +function compareValues(a, b) { + return compareComparableValues(a, b); +} +function compareTextSpans(a, b) { + return compareValues(a == null ? void 0 : a.start, b == null ? void 0 : b.start) || compareValues(a == null ? void 0 : a.length, b == null ? void 0 : b.length); +} +function maxBy(arr, init, mapper) { + for (let i = 0; i < arr.length; i++) { + init = Math.max(init, mapper(arr[i])); + } + return init; +} +function min(items, compare) { + return reduceLeft(items, (x, y) => compare(x, y) === -1 /* LessThan */ ? x : y); +} +function compareStringsCaseInsensitive(a, b) { + if (a === b) return 0 /* EqualTo */; + if (a === void 0) return -1 /* LessThan */; + if (b === void 0) return 1 /* GreaterThan */; + a = a.toUpperCase(); + b = b.toUpperCase(); + return a < b ? -1 /* LessThan */ : a > b ? 1 /* GreaterThan */ : 0 /* EqualTo */; +} +function compareStringsCaseInsensitiveEslintCompatible(a, b) { + if (a === b) return 0 /* EqualTo */; + if (a === void 0) return -1 /* LessThan */; + if (b === void 0) return 1 /* GreaterThan */; + a = a.toLowerCase(); + b = b.toLowerCase(); + return a < b ? -1 /* LessThan */ : a > b ? 1 /* GreaterThan */ : 0 /* EqualTo */; +} +function compareStringsCaseSensitive(a, b) { + return compareComparableValues(a, b); +} +function getStringComparer(ignoreCase) { + return ignoreCase ? compareStringsCaseInsensitive : compareStringsCaseSensitive; +} +var createUIStringComparer = /* @__PURE__ */ (() => { + return createIntlCollatorStringComparer; + function compareWithCallback(a, b, comparer) { + if (a === b) return 0 /* EqualTo */; + if (a === void 0) return -1 /* LessThan */; + if (b === void 0) return 1 /* GreaterThan */; + const value = comparer(a, b); + return value < 0 ? -1 /* LessThan */ : value > 0 ? 1 /* GreaterThan */ : 0 /* EqualTo */; + } + function createIntlCollatorStringComparer(locale) { + const comparer = new Intl.Collator(locale, { usage: "sort", sensitivity: "variant", numeric: true }).compare; + return (a, b) => compareWithCallback(a, b, comparer); + } +})(); +var uiComparerCaseSensitive; +var uiLocale; +function getUILocale() { + return uiLocale; +} +function setUILocale(value) { + if (uiLocale !== value) { + uiLocale = value; + uiComparerCaseSensitive = void 0; + } +} +function compareStringsCaseSensitiveUI(a, b) { + uiComparerCaseSensitive ?? (uiComparerCaseSensitive = createUIStringComparer(uiLocale)); + return uiComparerCaseSensitive(a, b); +} +function compareProperties(a, b, key, comparer) { + return a === b ? 0 /* EqualTo */ : a === void 0 ? -1 /* LessThan */ : b === void 0 ? 1 /* GreaterThan */ : comparer(a[key], b[key]); +} +function compareBooleans(a, b) { + return compareValues(a ? 1 : 0, b ? 1 : 0); +} +function getSpellingSuggestion(name, candidates, getName) { + const maximumLengthDifference = Math.max(2, Math.floor(name.length * 0.34)); + let bestDistance = Math.floor(name.length * 0.4) + 1; + let bestCandidate; + for (const candidate of candidates) { + const candidateName = getName(candidate); + if (candidateName !== void 0 && Math.abs(candidateName.length - name.length) <= maximumLengthDifference) { + if (candidateName === name) { + continue; + } + if (candidateName.length < 3 && candidateName.toLowerCase() !== name.toLowerCase()) { + continue; + } + const distance = levenshteinWithMax(name, candidateName, bestDistance - 0.1); + if (distance === void 0) { + continue; + } + Debug.assert(distance < bestDistance); + bestDistance = distance; + bestCandidate = candidate; + } + } + return bestCandidate; +} +function levenshteinWithMax(s1, s2, max) { + let previous = new Array(s2.length + 1); + let current = new Array(s2.length + 1); + const big = max + 0.01; + for (let i = 0; i <= s2.length; i++) { + previous[i] = i; + } + for (let i = 1; i <= s1.length; i++) { + const c1 = s1.charCodeAt(i - 1); + const minJ = Math.ceil(i > max ? i - max : 1); + const maxJ = Math.floor(s2.length > max + i ? max + i : s2.length); + current[0] = i; + let colMin = i; + for (let j = 1; j < minJ; j++) { + current[j] = big; + } + for (let j = minJ; j <= maxJ; j++) { + const substitutionDistance = s1[i - 1].toLowerCase() === s2[j - 1].toLowerCase() ? previous[j - 1] + 0.1 : previous[j - 1] + 2; + const dist = c1 === s2.charCodeAt(j - 1) ? previous[j - 1] : Math.min( + /*delete*/ + previous[j] + 1, + /*insert*/ + current[j - 1] + 1, + /*substitute*/ + substitutionDistance + ); + current[j] = dist; + colMin = Math.min(colMin, dist); + } + for (let j = maxJ + 1; j <= s2.length; j++) { + current[j] = big; + } + if (colMin > max) { + return void 0; + } + const temp = previous; + previous = current; + current = temp; + } + const res = previous[s2.length]; + return res > max ? void 0 : res; +} +function endsWith(str, suffix, ignoreCase) { + const expectedPos = str.length - suffix.length; + return expectedPos >= 0 && (ignoreCase ? equateStringsCaseInsensitive(str.slice(expectedPos), suffix) : str.indexOf(suffix, expectedPos) === expectedPos); +} +function removeSuffix(str, suffix) { + return endsWith(str, suffix) ? str.slice(0, str.length - suffix.length) : str; +} +function tryRemoveSuffix(str, suffix) { + return endsWith(str, suffix) ? str.slice(0, str.length - suffix.length) : void 0; +} +function removeMinAndVersionNumbers(fileName) { + let end = fileName.length; + for (let pos = end - 1; pos > 0; pos--) { + let ch = fileName.charCodeAt(pos); + if (ch >= 48 /* _0 */ && ch <= 57 /* _9 */) { + do { + --pos; + ch = fileName.charCodeAt(pos); + } while (pos > 0 && ch >= 48 /* _0 */ && ch <= 57 /* _9 */); + } else if (pos > 4 && (ch === 110 /* n */ || ch === 78 /* N */)) { + --pos; + ch = fileName.charCodeAt(pos); + if (ch !== 105 /* i */ && ch !== 73 /* I */) { + break; + } + --pos; + ch = fileName.charCodeAt(pos); + if (ch !== 109 /* m */ && ch !== 77 /* M */) { + break; + } + --pos; + ch = fileName.charCodeAt(pos); + } else { + break; + } + if (ch !== 45 /* minus */ && ch !== 46 /* dot */) { + break; + } + end = pos; + } + return end === fileName.length ? fileName : fileName.slice(0, end); +} +function orderedRemoveItem(array, item) { + for (let i = 0; i < array.length; i++) { + if (array[i] === item) { + orderedRemoveItemAt(array, i); + return true; + } + } + return false; +} +function orderedRemoveItemAt(array, index) { + for (let i = index; i < array.length - 1; i++) { + array[i] = array[i + 1]; + } + array.pop(); +} +function unorderedRemoveItemAt(array, index) { + array[index] = array[array.length - 1]; + array.pop(); +} +function unorderedRemoveItem(array, item) { + return unorderedRemoveFirstItemWhere(array, (element) => element === item); +} +function unorderedRemoveFirstItemWhere(array, predicate) { + for (let i = 0; i < array.length; i++) { + if (predicate(array[i])) { + unorderedRemoveItemAt(array, i); + return true; + } + } + return false; +} +function createGetCanonicalFileName(useCaseSensitiveFileNames2) { + return useCaseSensitiveFileNames2 ? identity : toFileNameLowerCase; +} +function patternText({ prefix, suffix }) { + return `${prefix}*${suffix}`; +} +function matchedText(pattern, candidate) { + Debug.assert(isPatternMatch(pattern, candidate)); + return candidate.substring(pattern.prefix.length, candidate.length - pattern.suffix.length); +} +function findBestPatternMatch(values, getPattern, candidate) { + let matchedValue; + let longestMatchPrefixLength = -1; + for (let i = 0; i < values.length; i++) { + const v = values[i]; + const pattern = getPattern(v); + if (pattern.prefix.length > longestMatchPrefixLength && isPatternMatch(pattern, candidate)) { + longestMatchPrefixLength = pattern.prefix.length; + matchedValue = v; + } + } + return matchedValue; +} +function startsWith(str, prefix, ignoreCase) { + return ignoreCase ? equateStringsCaseInsensitive(str.slice(0, prefix.length), prefix) : str.lastIndexOf(prefix, 0) === 0; +} +function removePrefix(str, prefix) { + return startsWith(str, prefix) ? str.substr(prefix.length) : str; +} +function tryRemovePrefix(str, prefix, getCanonicalFileName = identity) { + return startsWith(getCanonicalFileName(str), getCanonicalFileName(prefix)) ? str.substring(prefix.length) : void 0; +} +function isPatternMatch({ prefix, suffix }, candidate) { + return candidate.length >= prefix.length + suffix.length && startsWith(candidate, prefix) && endsWith(candidate, suffix); +} +function and(f, g) { + return (arg) => f(arg) && g(arg); +} +function or(...fs) { + return (...args) => { + let lastResult; + for (const f of fs) { + lastResult = f(...args); + if (lastResult) { + return lastResult; + } + } + return lastResult; + }; +} +function not(fn) { + return (...args) => !fn(...args); +} +function assertType(_) { +} +function singleElementArray(t) { + return t === void 0 ? void 0 : [t]; +} +function enumerateInsertsAndDeletes(newItems, oldItems, comparer, inserted, deleted, unchanged) { + unchanged ?? (unchanged = noop); + let newIndex = 0; + let oldIndex = 0; + const newLen = newItems.length; + const oldLen = oldItems.length; + let hasChanges = false; + while (newIndex < newLen && oldIndex < oldLen) { + const newItem = newItems[newIndex]; + const oldItem = oldItems[oldIndex]; + const compareResult = comparer(newItem, oldItem); + if (compareResult === -1 /* LessThan */) { + inserted(newItem); + newIndex++; + hasChanges = true; + } else if (compareResult === 1 /* GreaterThan */) { + deleted(oldItem); + oldIndex++; + hasChanges = true; + } else { + unchanged(oldItem, newItem); + newIndex++; + oldIndex++; + } + } + while (newIndex < newLen) { + inserted(newItems[newIndex++]); + hasChanges = true; + } + while (oldIndex < oldLen) { + deleted(oldItems[oldIndex++]); + hasChanges = true; + } + return hasChanges; +} +function cartesianProduct(arrays) { + const result = []; + cartesianProductWorker( + arrays, + result, + /*outer*/ + void 0, + 0 + ); + return result; +} +function cartesianProductWorker(arrays, result, outer, index) { + for (const element of arrays[index]) { + let inner; + if (outer) { + inner = outer.slice(); + inner.push(element); + } else { + inner = [element]; + } + if (index === arrays.length - 1) { + result.push(inner); + } else { + cartesianProductWorker(arrays, result, inner, index + 1); + } + } +} +function takeWhile(array, predicate) { + if (array !== void 0) { + const len = array.length; + let index = 0; + while (index < len && predicate(array[index])) { + index++; + } + return array.slice(0, index); + } +} +function skipWhile(array, predicate) { + if (array !== void 0) { + const len = array.length; + let index = 0; + while (index < len && predicate(array[index])) { + index++; + } + return array.slice(index); + } +} +function isNodeLikeSystem() { + return typeof process !== "undefined" && !!process.nextTick && !process.browser && typeof require !== "undefined"; +} + +// src/compiler/debug.ts +var LogLevel = /* @__PURE__ */ ((LogLevel3) => { + LogLevel3[LogLevel3["Off"] = 0] = "Off"; + LogLevel3[LogLevel3["Error"] = 1] = "Error"; + LogLevel3[LogLevel3["Warning"] = 2] = "Warning"; + LogLevel3[LogLevel3["Info"] = 3] = "Info"; + LogLevel3[LogLevel3["Verbose"] = 4] = "Verbose"; + return LogLevel3; +})(LogLevel || {}); +var Debug; +((Debug2) => { + let currentAssertionLevel = 0 /* None */; + Debug2.currentLogLevel = 2 /* Warning */; + Debug2.isDebugging = false; + function shouldLog(level) { + return Debug2.currentLogLevel <= level; + } + Debug2.shouldLog = shouldLog; + function logMessage(level, s) { + if (Debug2.loggingHost && shouldLog(level)) { + Debug2.loggingHost.log(level, s); + } + } + function log(s) { + logMessage(3 /* Info */, s); + } + Debug2.log = log; + ((_log) => { + function error2(s) { + logMessage(1 /* Error */, s); + } + _log.error = error2; + function warn(s) { + logMessage(2 /* Warning */, s); + } + _log.warn = warn; + function log2(s) { + logMessage(3 /* Info */, s); + } + _log.log = log2; + function trace2(s) { + logMessage(4 /* Verbose */, s); + } + _log.trace = trace2; + })(log = Debug2.log || (Debug2.log = {})); + const assertionCache = {}; + function getAssertionLevel() { + return currentAssertionLevel; + } + Debug2.getAssertionLevel = getAssertionLevel; + function setAssertionLevel(level) { + const prevAssertionLevel = currentAssertionLevel; + currentAssertionLevel = level; + if (level > prevAssertionLevel) { + for (const key of getOwnKeys(assertionCache)) { + const cachedFunc = assertionCache[key]; + if (cachedFunc !== void 0 && Debug2[key] !== cachedFunc.assertion && level >= cachedFunc.level) { + Debug2[key] = cachedFunc; + assertionCache[key] = void 0; + } + } + } + } + Debug2.setAssertionLevel = setAssertionLevel; + function shouldAssert(level) { + return currentAssertionLevel >= level; + } + Debug2.shouldAssert = shouldAssert; + function shouldAssertFunction(level, name) { + if (!shouldAssert(level)) { + assertionCache[name] = { level, assertion: Debug2[name] }; + Debug2[name] = noop; + return false; + } + return true; + } + function fail(message, stackCrawlMark) { + debugger; + const e = new Error(message ? `Debug Failure. ${message}` : "Debug Failure."); + if (Error.captureStackTrace) { + Error.captureStackTrace(e, stackCrawlMark || fail); + } + throw e; + } + Debug2.fail = fail; + function failBadSyntaxKind(node, message, stackCrawlMark) { + return fail( + `${message || "Unexpected node."}\r +Node ${formatSyntaxKind(node.kind)} was unexpected.`, + stackCrawlMark || failBadSyntaxKind + ); + } + Debug2.failBadSyntaxKind = failBadSyntaxKind; + function assert(expression, message, verboseDebugInfo, stackCrawlMark) { + if (!expression) { + message = message ? `False expression: ${message}` : "False expression."; + if (verboseDebugInfo) { + message += "\r\nVerbose Debug Information: " + (typeof verboseDebugInfo === "string" ? verboseDebugInfo : verboseDebugInfo()); + } + fail(message, stackCrawlMark || assert); + } + } + Debug2.assert = assert; + function assertEqual(a, b, msg, msg2, stackCrawlMark) { + if (a !== b) { + const message = msg ? msg2 ? `${msg} ${msg2}` : msg : ""; + fail(`Expected ${a} === ${b}. ${message}`, stackCrawlMark || assertEqual); + } + } + Debug2.assertEqual = assertEqual; + function assertLessThan(a, b, msg, stackCrawlMark) { + if (a >= b) { + fail(`Expected ${a} < ${b}. ${msg || ""}`, stackCrawlMark || assertLessThan); + } + } + Debug2.assertLessThan = assertLessThan; + function assertLessThanOrEqual(a, b, stackCrawlMark) { + if (a > b) { + fail(`Expected ${a} <= ${b}`, stackCrawlMark || assertLessThanOrEqual); + } + } + Debug2.assertLessThanOrEqual = assertLessThanOrEqual; + function assertGreaterThanOrEqual(a, b, stackCrawlMark) { + if (a < b) { + fail(`Expected ${a} >= ${b}`, stackCrawlMark || assertGreaterThanOrEqual); + } + } + Debug2.assertGreaterThanOrEqual = assertGreaterThanOrEqual; + function assertIsDefined(value, message, stackCrawlMark) { + if (value === void 0 || value === null) { + fail(message, stackCrawlMark || assertIsDefined); + } + } + Debug2.assertIsDefined = assertIsDefined; + function checkDefined(value, message, stackCrawlMark) { + assertIsDefined(value, message, stackCrawlMark || checkDefined); + return value; + } + Debug2.checkDefined = checkDefined; + function assertEachIsDefined(value, message, stackCrawlMark) { + for (const v of value) { + assertIsDefined(v, message, stackCrawlMark || assertEachIsDefined); + } + } + Debug2.assertEachIsDefined = assertEachIsDefined; + function checkEachDefined(value, message, stackCrawlMark) { + assertEachIsDefined(value, message, stackCrawlMark || checkEachDefined); + return value; + } + Debug2.checkEachDefined = checkEachDefined; + function assertNever(member, message = "Illegal value:", stackCrawlMark) { + const detail = typeof member === "object" && hasProperty(member, "kind") && hasProperty(member, "pos") ? "SyntaxKind: " + formatSyntaxKind(member.kind) : JSON.stringify(member); + return fail(`${message} ${detail}`, stackCrawlMark || assertNever); + } + Debug2.assertNever = assertNever; + function assertEachNode(nodes, test, message, stackCrawlMark) { + if (shouldAssertFunction(1 /* Normal */, "assertEachNode")) { + assert( + test === void 0 || every(nodes, test), + message || "Unexpected node.", + () => `Node array did not pass test '${getFunctionName(test)}'.`, + stackCrawlMark || assertEachNode + ); + } + } + Debug2.assertEachNode = assertEachNode; + function assertNode(node, test, message, stackCrawlMark) { + if (shouldAssertFunction(1 /* Normal */, "assertNode")) { + assert( + node !== void 0 && (test === void 0 || test(node)), + message || "Unexpected node.", + () => `Node ${formatSyntaxKind(node == null ? void 0 : node.kind)} did not pass test '${getFunctionName(test)}'.`, + stackCrawlMark || assertNode + ); + } + } + Debug2.assertNode = assertNode; + function assertNotNode(node, test, message, stackCrawlMark) { + if (shouldAssertFunction(1 /* Normal */, "assertNotNode")) { + assert( + node === void 0 || test === void 0 || !test(node), + message || "Unexpected node.", + () => `Node ${formatSyntaxKind(node.kind)} should not have passed test '${getFunctionName(test)}'.`, + stackCrawlMark || assertNotNode + ); + } + } + Debug2.assertNotNode = assertNotNode; + function assertOptionalNode(node, test, message, stackCrawlMark) { + if (shouldAssertFunction(1 /* Normal */, "assertOptionalNode")) { + assert( + test === void 0 || node === void 0 || test(node), + message || "Unexpected node.", + () => `Node ${formatSyntaxKind(node == null ? void 0 : node.kind)} did not pass test '${getFunctionName(test)}'.`, + stackCrawlMark || assertOptionalNode + ); + } + } + Debug2.assertOptionalNode = assertOptionalNode; + function assertOptionalToken(node, kind, message, stackCrawlMark) { + if (shouldAssertFunction(1 /* Normal */, "assertOptionalToken")) { + assert( + kind === void 0 || node === void 0 || node.kind === kind, + message || "Unexpected node.", + () => `Node ${formatSyntaxKind(node == null ? void 0 : node.kind)} was not a '${formatSyntaxKind(kind)}' token.`, + stackCrawlMark || assertOptionalToken + ); + } + } + Debug2.assertOptionalToken = assertOptionalToken; + function assertMissingNode(node, message, stackCrawlMark) { + if (shouldAssertFunction(1 /* Normal */, "assertMissingNode")) { + assert( + node === void 0, + message || "Unexpected node.", + () => `Node ${formatSyntaxKind(node.kind)} was unexpected'.`, + stackCrawlMark || assertMissingNode + ); + } + } + Debug2.assertMissingNode = assertMissingNode; + function type(_value) { + } + Debug2.type = type; + function getFunctionName(func) { + if (typeof func !== "function") { + return ""; + } else if (hasProperty(func, "name")) { + return func.name; + } else { + const text = Function.prototype.toString.call(func); + const match = /^function\s+([\w$]+)\s*\(/.exec(text); + return match ? match[1] : ""; + } + } + Debug2.getFunctionName = getFunctionName; + function formatSymbol(symbol) { + return `{ name: ${unescapeLeadingUnderscores(symbol.escapedName)}; flags: ${formatSymbolFlags(symbol.flags)}; declarations: ${map(symbol.declarations, (node) => formatSyntaxKind(node.kind))} }`; + } + Debug2.formatSymbol = formatSymbol; + function formatEnum(value = 0, enumObject, isFlags) { + const members = getEnumMembers(enumObject); + if (value === 0) { + return members.length > 0 && members[0][0] === 0 ? members[0][1] : "0"; + } + if (isFlags) { + const result = []; + let remainingFlags = value; + for (const [enumValue, enumName] of members) { + if (enumValue > value) { + break; + } + if (enumValue !== 0 && enumValue & value) { + result.push(enumName); + remainingFlags &= ~enumValue; + } + } + if (remainingFlags === 0) { + return result.join("|"); + } + } else { + for (const [enumValue, enumName] of members) { + if (enumValue === value) { + return enumName; + } + } + } + return value.toString(); + } + Debug2.formatEnum = formatEnum; + const enumMemberCache = /* @__PURE__ */ new Map(); + function getEnumMembers(enumObject) { + const existing = enumMemberCache.get(enumObject); + if (existing) { + return existing; + } + const result = []; + for (const name in enumObject) { + const value = enumObject[name]; + if (typeof value === "number") { + result.push([value, name]); + } + } + const sorted = toSorted(result, (x, y) => compareValues(x[0], y[0])); + enumMemberCache.set(enumObject, sorted); + return sorted; + } + function formatSyntaxKind(kind) { + return formatEnum( + kind, + SyntaxKind, + /*isFlags*/ + false + ); + } + Debug2.formatSyntaxKind = formatSyntaxKind; + function formatSnippetKind(kind) { + return formatEnum( + kind, + SnippetKind, + /*isFlags*/ + false + ); + } + Debug2.formatSnippetKind = formatSnippetKind; + function formatScriptKind(kind) { + return formatEnum( + kind, + ScriptKind, + /*isFlags*/ + false + ); + } + Debug2.formatScriptKind = formatScriptKind; + function formatNodeFlags(flags) { + return formatEnum( + flags, + NodeFlags, + /*isFlags*/ + true + ); + } + Debug2.formatNodeFlags = formatNodeFlags; + function formatNodeCheckFlags(flags) { + return formatEnum( + flags, + NodeCheckFlags, + /*isFlags*/ + true + ); + } + Debug2.formatNodeCheckFlags = formatNodeCheckFlags; + function formatModifierFlags(flags) { + return formatEnum( + flags, + ModifierFlags, + /*isFlags*/ + true + ); + } + Debug2.formatModifierFlags = formatModifierFlags; + function formatTransformFlags(flags) { + return formatEnum( + flags, + TransformFlags, + /*isFlags*/ + true + ); + } + Debug2.formatTransformFlags = formatTransformFlags; + function formatEmitFlags(flags) { + return formatEnum( + flags, + EmitFlags, + /*isFlags*/ + true + ); + } + Debug2.formatEmitFlags = formatEmitFlags; + function formatSymbolFlags(flags) { + return formatEnum( + flags, + SymbolFlags, + /*isFlags*/ + true + ); + } + Debug2.formatSymbolFlags = formatSymbolFlags; + function formatTypeFlags(flags) { + return formatEnum( + flags, + TypeFlags, + /*isFlags*/ + true + ); + } + Debug2.formatTypeFlags = formatTypeFlags; + function formatSignatureFlags(flags) { + return formatEnum( + flags, + SignatureFlags, + /*isFlags*/ + true + ); + } + Debug2.formatSignatureFlags = formatSignatureFlags; + function formatObjectFlags(flags) { + return formatEnum( + flags, + ObjectFlags, + /*isFlags*/ + true + ); + } + Debug2.formatObjectFlags = formatObjectFlags; + function formatFlowFlags(flags) { + return formatEnum( + flags, + FlowFlags, + /*isFlags*/ + true + ); + } + Debug2.formatFlowFlags = formatFlowFlags; + function formatRelationComparisonResult(result) { + return formatEnum( + result, + RelationComparisonResult, + /*isFlags*/ + true + ); + } + Debug2.formatRelationComparisonResult = formatRelationComparisonResult; + function formatCheckMode(mode) { + return formatEnum( + mode, + CheckMode, + /*isFlags*/ + true + ); + } + Debug2.formatCheckMode = formatCheckMode; + function formatSignatureCheckMode(mode) { + return formatEnum( + mode, + SignatureCheckMode, + /*isFlags*/ + true + ); + } + Debug2.formatSignatureCheckMode = formatSignatureCheckMode; + function formatTypeFacts(facts) { + return formatEnum( + facts, + TypeFacts, + /*isFlags*/ + true + ); + } + Debug2.formatTypeFacts = formatTypeFacts; + let isDebugInfoEnabled = false; + let flowNodeProto; + function attachFlowNodeDebugInfoWorker(flowNode) { + if (!("__debugFlowFlags" in flowNode)) { + Object.defineProperties(flowNode, { + // for use with vscode-js-debug's new customDescriptionGenerator in launch.json + __tsDebuggerDisplay: { + value() { + const flowHeader = this.flags & 2 /* Start */ ? "FlowStart" : this.flags & 4 /* BranchLabel */ ? "FlowBranchLabel" : this.flags & 8 /* LoopLabel */ ? "FlowLoopLabel" : this.flags & 16 /* Assignment */ ? "FlowAssignment" : this.flags & 32 /* TrueCondition */ ? "FlowTrueCondition" : this.flags & 64 /* FalseCondition */ ? "FlowFalseCondition" : this.flags & 128 /* SwitchClause */ ? "FlowSwitchClause" : this.flags & 256 /* ArrayMutation */ ? "FlowArrayMutation" : this.flags & 512 /* Call */ ? "FlowCall" : this.flags & 1024 /* ReduceLabel */ ? "FlowReduceLabel" : this.flags & 1 /* Unreachable */ ? "FlowUnreachable" : "UnknownFlow"; + const remainingFlags = this.flags & ~(2048 /* Referenced */ - 1); + return `${flowHeader}${remainingFlags ? ` (${formatFlowFlags(remainingFlags)})` : ""}`; + } + }, + __debugFlowFlags: { + get() { + return formatEnum( + this.flags, + FlowFlags, + /*isFlags*/ + true + ); + } + }, + __debugToString: { + value() { + return formatControlFlowGraph(this); + } + } + }); + } + } + function attachFlowNodeDebugInfo(flowNode) { + if (isDebugInfoEnabled) { + if (typeof Object.setPrototypeOf === "function") { + if (!flowNodeProto) { + flowNodeProto = Object.create(Object.prototype); + attachFlowNodeDebugInfoWorker(flowNodeProto); + } + Object.setPrototypeOf(flowNode, flowNodeProto); + } else { + attachFlowNodeDebugInfoWorker(flowNode); + } + } + return flowNode; + } + Debug2.attachFlowNodeDebugInfo = attachFlowNodeDebugInfo; + let nodeArrayProto; + function attachNodeArrayDebugInfoWorker(array) { + if (!("__tsDebuggerDisplay" in array)) { + Object.defineProperties(array, { + __tsDebuggerDisplay: { + value(defaultValue) { + defaultValue = String(defaultValue).replace(/(?:,[\s\w]+:[^,]+)+\]$/, "]"); + return `NodeArray ${defaultValue}`; + } + } + }); + } + } + function attachNodeArrayDebugInfo(array) { + if (isDebugInfoEnabled) { + if (typeof Object.setPrototypeOf === "function") { + if (!nodeArrayProto) { + nodeArrayProto = Object.create(Array.prototype); + attachNodeArrayDebugInfoWorker(nodeArrayProto); + } + Object.setPrototypeOf(array, nodeArrayProto); + } else { + attachNodeArrayDebugInfoWorker(array); + } + } + } + Debug2.attachNodeArrayDebugInfo = attachNodeArrayDebugInfo; + function enableDebugInfo() { + if (isDebugInfoEnabled) return; + const weakTypeTextMap = /* @__PURE__ */ new WeakMap(); + const weakNodeTextMap = /* @__PURE__ */ new WeakMap(); + Object.defineProperties(objectAllocator.getSymbolConstructor().prototype, { + // for use with vscode-js-debug's new customDescriptionGenerator in launch.json + __tsDebuggerDisplay: { + value() { + const symbolHeader = this.flags & 33554432 /* Transient */ ? "TransientSymbol" : "Symbol"; + const remainingSymbolFlags = this.flags & ~33554432 /* Transient */; + return `${symbolHeader} '${symbolName(this)}'${remainingSymbolFlags ? ` (${formatSymbolFlags(remainingSymbolFlags)})` : ""}`; + } + }, + __debugFlags: { + get() { + return formatSymbolFlags(this.flags); + } + } + }); + Object.defineProperties(objectAllocator.getTypeConstructor().prototype, { + // for use with vscode-js-debug's new customDescriptionGenerator in launch.json + __tsDebuggerDisplay: { + value() { + const typeHeader = this.flags & 67359327 /* Intrinsic */ ? `IntrinsicType ${this.intrinsicName}${this.debugIntrinsicName ? ` (${this.debugIntrinsicName})` : ""}` : this.flags & 98304 /* Nullable */ ? "NullableType" : this.flags & 384 /* StringOrNumberLiteral */ ? `LiteralType ${JSON.stringify(this.value)}` : this.flags & 2048 /* BigIntLiteral */ ? `LiteralType ${this.value.negative ? "-" : ""}${this.value.base10Value}n` : this.flags & 8192 /* UniqueESSymbol */ ? "UniqueESSymbolType" : this.flags & 32 /* Enum */ ? "EnumType" : this.flags & 1048576 /* Union */ ? "UnionType" : this.flags & 2097152 /* Intersection */ ? "IntersectionType" : this.flags & 4194304 /* Index */ ? "IndexType" : this.flags & 8388608 /* IndexedAccess */ ? "IndexedAccessType" : this.flags & 16777216 /* Conditional */ ? "ConditionalType" : this.flags & 33554432 /* Substitution */ ? "SubstitutionType" : this.flags & 262144 /* TypeParameter */ ? "TypeParameter" : this.flags & 524288 /* Object */ ? this.objectFlags & 3 /* ClassOrInterface */ ? "InterfaceType" : this.objectFlags & 4 /* Reference */ ? "TypeReference" : this.objectFlags & 8 /* Tuple */ ? "TupleType" : this.objectFlags & 16 /* Anonymous */ ? "AnonymousType" : this.objectFlags & 32 /* Mapped */ ? "MappedType" : this.objectFlags & 1024 /* ReverseMapped */ ? "ReverseMappedType" : this.objectFlags & 256 /* EvolvingArray */ ? "EvolvingArrayType" : "ObjectType" : "Type"; + const remainingObjectFlags = this.flags & 524288 /* Object */ ? this.objectFlags & ~1343 /* ObjectTypeKindMask */ : 0; + return `${typeHeader}${this.symbol ? ` '${symbolName(this.symbol)}'` : ""}${remainingObjectFlags ? ` (${formatObjectFlags(remainingObjectFlags)})` : ""}`; + } + }, + __debugFlags: { + get() { + return formatTypeFlags(this.flags); + } + }, + __debugObjectFlags: { + get() { + return this.flags & 524288 /* Object */ ? formatObjectFlags(this.objectFlags) : ""; + } + }, + __debugTypeToString: { + value() { + let text = weakTypeTextMap.get(this); + if (text === void 0) { + text = this.checker.typeToString(this); + weakTypeTextMap.set(this, text); + } + return text; + } + } + }); + Object.defineProperties(objectAllocator.getSignatureConstructor().prototype, { + __debugFlags: { + get() { + return formatSignatureFlags(this.flags); + } + }, + __debugSignatureToString: { + value() { + var _a; + return (_a = this.checker) == null ? void 0 : _a.signatureToString(this); + } + } + }); + const nodeConstructors = [ + objectAllocator.getNodeConstructor(), + objectAllocator.getIdentifierConstructor(), + objectAllocator.getTokenConstructor(), + objectAllocator.getSourceFileConstructor() + ]; + for (const ctor of nodeConstructors) { + if (!hasProperty(ctor.prototype, "__debugKind")) { + Object.defineProperties(ctor.prototype, { + // for use with vscode-js-debug's new customDescriptionGenerator in launch.json + __tsDebuggerDisplay: { + value() { + const nodeHeader = isGeneratedIdentifier(this) ? "GeneratedIdentifier" : isIdentifier(this) ? `Identifier '${idText(this)}'` : isPrivateIdentifier(this) ? `PrivateIdentifier '${idText(this)}'` : isStringLiteral(this) ? `StringLiteral ${JSON.stringify(this.text.length < 10 ? this.text : this.text.slice(10) + "...")}` : isNumericLiteral(this) ? `NumericLiteral ${this.text}` : isBigIntLiteral(this) ? `BigIntLiteral ${this.text}n` : isTypeParameterDeclaration(this) ? "TypeParameterDeclaration" : isParameter(this) ? "ParameterDeclaration" : isConstructorDeclaration(this) ? "ConstructorDeclaration" : isGetAccessorDeclaration(this) ? "GetAccessorDeclaration" : isSetAccessorDeclaration(this) ? "SetAccessorDeclaration" : isCallSignatureDeclaration(this) ? "CallSignatureDeclaration" : isConstructSignatureDeclaration(this) ? "ConstructSignatureDeclaration" : isIndexSignatureDeclaration(this) ? "IndexSignatureDeclaration" : isTypePredicateNode(this) ? "TypePredicateNode" : isTypeReferenceNode(this) ? "TypeReferenceNode" : isFunctionTypeNode(this) ? "FunctionTypeNode" : isConstructorTypeNode(this) ? "ConstructorTypeNode" : isTypeQueryNode(this) ? "TypeQueryNode" : isTypeLiteralNode(this) ? "TypeLiteralNode" : isArrayTypeNode(this) ? "ArrayTypeNode" : isTupleTypeNode(this) ? "TupleTypeNode" : isOptionalTypeNode(this) ? "OptionalTypeNode" : isRestTypeNode(this) ? "RestTypeNode" : isUnionTypeNode(this) ? "UnionTypeNode" : isIntersectionTypeNode(this) ? "IntersectionTypeNode" : isConditionalTypeNode(this) ? "ConditionalTypeNode" : isInferTypeNode(this) ? "InferTypeNode" : isParenthesizedTypeNode(this) ? "ParenthesizedTypeNode" : isThisTypeNode(this) ? "ThisTypeNode" : isTypeOperatorNode(this) ? "TypeOperatorNode" : isIndexedAccessTypeNode(this) ? "IndexedAccessTypeNode" : isMappedTypeNode(this) ? "MappedTypeNode" : isLiteralTypeNode(this) ? "LiteralTypeNode" : isNamedTupleMember(this) ? "NamedTupleMember" : isImportTypeNode(this) ? "ImportTypeNode" : formatSyntaxKind(this.kind); + return `${nodeHeader}${this.flags ? ` (${formatNodeFlags(this.flags)})` : ""}`; + } + }, + __debugKind: { + get() { + return formatSyntaxKind(this.kind); + } + }, + __debugNodeFlags: { + get() { + return formatNodeFlags(this.flags); + } + }, + __debugModifierFlags: { + get() { + return formatModifierFlags(getEffectiveModifierFlagsNoCache(this)); + } + }, + __debugTransformFlags: { + get() { + return formatTransformFlags(this.transformFlags); + } + }, + __debugIsParseTreeNode: { + get() { + return isParseTreeNode(this); + } + }, + __debugEmitFlags: { + get() { + return formatEmitFlags(getEmitFlags(this)); + } + }, + __debugGetText: { + value(includeTrivia) { + if (nodeIsSynthesized(this)) return ""; + let text = weakNodeTextMap.get(this); + if (text === void 0) { + const parseNode = getParseTreeNode(this); + const sourceFile = parseNode && getSourceFileOfNode(parseNode); + text = sourceFile ? getSourceTextOfNodeFromSourceFile(sourceFile, parseNode, includeTrivia) : ""; + weakNodeTextMap.set(this, text); + } + return text; + } + } + }); + } + } + isDebugInfoEnabled = true; + } + Debug2.enableDebugInfo = enableDebugInfo; + function formatVariance(varianceFlags) { + const variance = varianceFlags & 7 /* VarianceMask */; + let result = variance === 0 /* Invariant */ ? "in out" : variance === 3 /* Bivariant */ ? "[bivariant]" : variance === 2 /* Contravariant */ ? "in" : variance === 1 /* Covariant */ ? "out" : variance === 4 /* Independent */ ? "[independent]" : ""; + if (varianceFlags & 8 /* Unmeasurable */) { + result += " (unmeasurable)"; + } else if (varianceFlags & 16 /* Unreliable */) { + result += " (unreliable)"; + } + return result; + } + Debug2.formatVariance = formatVariance; + class DebugTypeMapper { + __debugToString() { + var _a; + type(this); + switch (this.kind) { + case 3 /* Function */: + return ((_a = this.debugInfo) == null ? void 0 : _a.call(this)) || "(function mapper)"; + case 0 /* Simple */: + return `${this.source.__debugTypeToString()} -> ${this.target.__debugTypeToString()}`; + case 1 /* Array */: + return zipWith( + this.sources, + this.targets || map(this.sources, () => "any"), + (s, t) => `${s.__debugTypeToString()} -> ${typeof t === "string" ? t : t.__debugTypeToString()}` + ).join(", "); + case 2 /* Deferred */: + return zipWith( + this.sources, + this.targets, + (s, t) => `${s.__debugTypeToString()} -> ${t().__debugTypeToString()}` + ).join(", "); + case 5 /* Merged */: + case 4 /* Composite */: + return `m1: ${this.mapper1.__debugToString().split("\n").join("\n ")} +m2: ${this.mapper2.__debugToString().split("\n").join("\n ")}`; + default: + return assertNever(this); + } + } + } + Debug2.DebugTypeMapper = DebugTypeMapper; + function attachDebugPrototypeIfDebug(mapper) { + if (Debug2.isDebugging) { + return Object.setPrototypeOf(mapper, DebugTypeMapper.prototype); + } + return mapper; + } + Debug2.attachDebugPrototypeIfDebug = attachDebugPrototypeIfDebug; + function printControlFlowGraph(flowNode) { + return console.log(formatControlFlowGraph(flowNode)); + } + Debug2.printControlFlowGraph = printControlFlowGraph; + function formatControlFlowGraph(flowNode) { + let nextDebugFlowId = -1; + function getDebugFlowNodeId(f) { + if (!f.id) { + f.id = nextDebugFlowId; + nextDebugFlowId--; + } + return f.id; + } + let BoxCharacter; + ((BoxCharacter2) => { + BoxCharacter2["lr"] = "\u2500"; + BoxCharacter2["ud"] = "\u2502"; + BoxCharacter2["dr"] = "\u256D"; + BoxCharacter2["dl"] = "\u256E"; + BoxCharacter2["ul"] = "\u256F"; + BoxCharacter2["ur"] = "\u2570"; + BoxCharacter2["udr"] = "\u251C"; + BoxCharacter2["udl"] = "\u2524"; + BoxCharacter2["dlr"] = "\u252C"; + BoxCharacter2["ulr"] = "\u2534"; + BoxCharacter2["udlr"] = "\u256B"; + })(BoxCharacter || (BoxCharacter = {})); + let Connection; + ((Connection2) => { + Connection2[Connection2["None"] = 0] = "None"; + Connection2[Connection2["Up"] = 1] = "Up"; + Connection2[Connection2["Down"] = 2] = "Down"; + Connection2[Connection2["Left"] = 4] = "Left"; + Connection2[Connection2["Right"] = 8] = "Right"; + Connection2[Connection2["UpDown"] = 3] = "UpDown"; + Connection2[Connection2["LeftRight"] = 12] = "LeftRight"; + Connection2[Connection2["UpLeft"] = 5] = "UpLeft"; + Connection2[Connection2["UpRight"] = 9] = "UpRight"; + Connection2[Connection2["DownLeft"] = 6] = "DownLeft"; + Connection2[Connection2["DownRight"] = 10] = "DownRight"; + Connection2[Connection2["UpDownLeft"] = 7] = "UpDownLeft"; + Connection2[Connection2["UpDownRight"] = 11] = "UpDownRight"; + Connection2[Connection2["UpLeftRight"] = 13] = "UpLeftRight"; + Connection2[Connection2["DownLeftRight"] = 14] = "DownLeftRight"; + Connection2[Connection2["UpDownLeftRight"] = 15] = "UpDownLeftRight"; + Connection2[Connection2["NoChildren"] = 16] = "NoChildren"; + })(Connection || (Connection = {})); + const hasAntecedentFlags = 16 /* Assignment */ | 96 /* Condition */ | 128 /* SwitchClause */ | 256 /* ArrayMutation */ | 512 /* Call */ | 1024 /* ReduceLabel */; + const hasNodeFlags = 2 /* Start */ | 16 /* Assignment */ | 512 /* Call */ | 96 /* Condition */ | 256 /* ArrayMutation */; + const links = /* @__PURE__ */ Object.create( + /*o*/ + null + ); + const nodes = []; + const edges = []; + const root = buildGraphNode(flowNode, /* @__PURE__ */ new Set()); + for (const node of nodes) { + node.text = renderFlowNode(node.flowNode, node.circular); + computeLevel(node); + } + const height = computeHeight(root); + const columnWidths = computeColumnWidths(height); + computeLanes(root, 0); + return renderGraph(); + function isFlowSwitchClause(f) { + return !!(f.flags & 128 /* SwitchClause */); + } + function hasAntecedents(f) { + return !!(f.flags & 12 /* Label */) && !!f.antecedent; + } + function hasAntecedent(f) { + return !!(f.flags & hasAntecedentFlags); + } + function hasNode(f) { + return !!(f.flags & hasNodeFlags); + } + function getChildren(node) { + const children = []; + for (const edge of node.edges) { + if (edge.source === node) { + children.push(edge.target); + } + } + return children; + } + function getParents(node) { + const parents = []; + for (const edge of node.edges) { + if (edge.target === node) { + parents.push(edge.source); + } + } + return parents; + } + function buildGraphNode(flowNode2, seen) { + const id = getDebugFlowNodeId(flowNode2); + let graphNode = links[id]; + if (graphNode && seen.has(flowNode2)) { + graphNode.circular = true; + graphNode = { + id: -1, + flowNode: flowNode2, + edges: [], + text: "", + lane: -1, + endLane: -1, + level: -1, + circular: "circularity" + }; + nodes.push(graphNode); + return graphNode; + } + seen.add(flowNode2); + if (!graphNode) { + links[id] = graphNode = { id, flowNode: flowNode2, edges: [], text: "", lane: -1, endLane: -1, level: -1, circular: false }; + nodes.push(graphNode); + if (hasAntecedents(flowNode2)) { + for (const antecedent of flowNode2.antecedent) { + buildGraphEdge(graphNode, antecedent, seen); + } + } else if (hasAntecedent(flowNode2)) { + buildGraphEdge(graphNode, flowNode2.antecedent, seen); + } + } + seen.delete(flowNode2); + return graphNode; + } + function buildGraphEdge(source, antecedent, seen) { + const target = buildGraphNode(antecedent, seen); + const edge = { source, target }; + edges.push(edge); + source.edges.push(edge); + target.edges.push(edge); + } + function computeLevel(node) { + if (node.level !== -1) { + return node.level; + } + let level = 0; + for (const parent2 of getParents(node)) { + level = Math.max(level, computeLevel(parent2) + 1); + } + return node.level = level; + } + function computeHeight(node) { + let height2 = 0; + for (const child of getChildren(node)) { + height2 = Math.max(height2, computeHeight(child)); + } + return height2 + 1; + } + function computeColumnWidths(height2) { + const columns = fill(Array(height2), 0); + for (const node of nodes) { + columns[node.level] = Math.max(columns[node.level], node.text.length); + } + return columns; + } + function computeLanes(node, lane) { + if (node.lane === -1) { + node.lane = lane; + node.endLane = lane; + const children = getChildren(node); + for (let i = 0; i < children.length; i++) { + if (i > 0) lane++; + const child = children[i]; + computeLanes(child, lane); + if (child.endLane > node.endLane) { + lane = child.endLane; + } + } + node.endLane = lane; + } + } + function getHeader2(flags) { + if (flags & 2 /* Start */) return "Start"; + if (flags & 4 /* BranchLabel */) return "Branch"; + if (flags & 8 /* LoopLabel */) return "Loop"; + if (flags & 16 /* Assignment */) return "Assignment"; + if (flags & 32 /* TrueCondition */) return "True"; + if (flags & 64 /* FalseCondition */) return "False"; + if (flags & 128 /* SwitchClause */) return "SwitchClause"; + if (flags & 256 /* ArrayMutation */) return "ArrayMutation"; + if (flags & 512 /* Call */) return "Call"; + if (flags & 1024 /* ReduceLabel */) return "ReduceLabel"; + if (flags & 1 /* Unreachable */) return "Unreachable"; + throw new Error(); + } + function getNodeText(node) { + const sourceFile = getSourceFileOfNode(node); + return getSourceTextOfNodeFromSourceFile( + sourceFile, + node, + /*includeTrivia*/ + false + ); + } + function renderFlowNode(flowNode2, circular) { + let text = getHeader2(flowNode2.flags); + if (circular) { + text = `${text}#${getDebugFlowNodeId(flowNode2)}`; + } + if (isFlowSwitchClause(flowNode2)) { + const clauses = []; + const { switchStatement, clauseStart, clauseEnd } = flowNode2.node; + for (let i = clauseStart; i < clauseEnd; i++) { + const clause = switchStatement.caseBlock.clauses[i]; + if (isDefaultClause(clause)) { + clauses.push("default"); + } else { + clauses.push(getNodeText(clause.expression)); + } + } + text += ` (${clauses.join(", ")})`; + } else if (hasNode(flowNode2)) { + if (flowNode2.node) { + text += ` (${getNodeText(flowNode2.node)})`; + } + } + return circular === "circularity" ? `Circular(${text})` : text; + } + function renderGraph() { + const columnCount = columnWidths.length; + const laneCount = maxBy(nodes, 0, (n) => n.lane) + 1; + const lanes = fill(Array(laneCount), ""); + const grid = columnWidths.map(() => Array(laneCount)); + const connectors = columnWidths.map(() => fill(Array(laneCount), 0)); + for (const node of nodes) { + grid[node.level][node.lane] = node; + const children = getChildren(node); + for (let i = 0; i < children.length; i++) { + const child = children[i]; + let connector = 8 /* Right */; + if (child.lane === node.lane) connector |= 4 /* Left */; + if (i > 0) connector |= 1 /* Up */; + if (i < children.length - 1) connector |= 2 /* Down */; + connectors[node.level][child.lane] |= connector; + } + if (children.length === 0) { + connectors[node.level][node.lane] |= 16 /* NoChildren */; + } + const parents = getParents(node); + for (let i = 0; i < parents.length; i++) { + const parent2 = parents[i]; + let connector = 4 /* Left */; + if (i > 0) connector |= 1 /* Up */; + if (i < parents.length - 1) connector |= 2 /* Down */; + connectors[node.level - 1][parent2.lane] |= connector; + } + } + for (let column = 0; column < columnCount; column++) { + for (let lane = 0; lane < laneCount; lane++) { + const left = column > 0 ? connectors[column - 1][lane] : 0; + const above = lane > 0 ? connectors[column][lane - 1] : 0; + let connector = connectors[column][lane]; + if (!connector) { + if (left & 8 /* Right */) connector |= 12 /* LeftRight */; + if (above & 2 /* Down */) connector |= 3 /* UpDown */; + connectors[column][lane] = connector; + } + } + } + for (let column = 0; column < columnCount; column++) { + for (let lane = 0; lane < lanes.length; lane++) { + const connector = connectors[column][lane]; + const fill2 = connector & 4 /* Left */ ? "\u2500" /* lr */ : " "; + const node = grid[column][lane]; + if (!node) { + if (column < columnCount - 1) { + writeLane(lane, repeat(fill2, columnWidths[column] + 1)); + } + } else { + writeLane(lane, node.text); + if (column < columnCount - 1) { + writeLane(lane, " "); + writeLane(lane, repeat(fill2, columnWidths[column] - node.text.length)); + } + } + writeLane(lane, getBoxCharacter(connector)); + writeLane(lane, connector & 8 /* Right */ && column < columnCount - 1 && !grid[column + 1][lane] ? "\u2500" /* lr */ : " "); + } + } + return ` +${lanes.join("\n")} +`; + function writeLane(lane, text) { + lanes[lane] += text; + } + } + function getBoxCharacter(connector) { + switch (connector) { + case 3 /* UpDown */: + return "\u2502" /* ud */; + case 12 /* LeftRight */: + return "\u2500" /* lr */; + case 5 /* UpLeft */: + return "\u256F" /* ul */; + case 9 /* UpRight */: + return "\u2570" /* ur */; + case 6 /* DownLeft */: + return "\u256E" /* dl */; + case 10 /* DownRight */: + return "\u256D" /* dr */; + case 7 /* UpDownLeft */: + return "\u2524" /* udl */; + case 11 /* UpDownRight */: + return "\u251C" /* udr */; + case 13 /* UpLeftRight */: + return "\u2534" /* ulr */; + case 14 /* DownLeftRight */: + return "\u252C" /* dlr */; + case 15 /* UpDownLeftRight */: + return "\u256B" /* udlr */; + } + return " "; + } + function fill(array, value) { + if (array.fill) { + array.fill(value); + } else { + for (let i = 0; i < array.length; i++) { + array[i] = value; + } + } + return array; + } + function repeat(ch, length2) { + if (ch.repeat) { + return length2 > 0 ? ch.repeat(length2) : ""; + } + let s = ""; + while (s.length < length2) { + s += ch; + } + return s; + } + } + Debug2.formatControlFlowGraph = formatControlFlowGraph; +})(Debug || (Debug = {})); + +// src/compiler/semver.ts +var versionRegExp = /^(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i; +var prereleaseRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)(?:\.(?:0|[1-9]\d*|[a-z-][a-z0-9-]*))*$/i; +var prereleasePartRegExp = /^(?:0|[1-9]\d*|[a-z-][a-z0-9-]*)$/i; +var buildRegExp = /^[a-z0-9-]+(?:\.[a-z0-9-]+)*$/i; +var buildPartRegExp = /^[a-z0-9-]+$/i; +var numericIdentifierRegExp = /^(?:0|[1-9]\d*)$/; +var _Version = class _Version { + constructor(major, minor = 0, patch = 0, prerelease = "", build2 = "") { + if (typeof major === "string") { + const result = Debug.checkDefined(tryParseComponents(major), "Invalid version"); + ({ major, minor, patch, prerelease, build: build2 } = result); + } + Debug.assert(major >= 0, "Invalid argument: major"); + Debug.assert(minor >= 0, "Invalid argument: minor"); + Debug.assert(patch >= 0, "Invalid argument: patch"); + const prereleaseArray = prerelease ? isArray(prerelease) ? prerelease : prerelease.split(".") : emptyArray; + const buildArray = build2 ? isArray(build2) ? build2 : build2.split(".") : emptyArray; + Debug.assert(every(prereleaseArray, (s) => prereleasePartRegExp.test(s)), "Invalid argument: prerelease"); + Debug.assert(every(buildArray, (s) => buildPartRegExp.test(s)), "Invalid argument: build"); + this.major = major; + this.minor = minor; + this.patch = patch; + this.prerelease = prereleaseArray; + this.build = buildArray; + } + static tryParse(text) { + const result = tryParseComponents(text); + if (!result) return void 0; + const { major, minor, patch, prerelease, build: build2 } = result; + return new _Version(major, minor, patch, prerelease, build2); + } + compareTo(other) { + if (this === other) return 0 /* EqualTo */; + if (other === void 0) return 1 /* GreaterThan */; + return compareValues(this.major, other.major) || compareValues(this.minor, other.minor) || compareValues(this.patch, other.patch) || comparePrereleaseIdentifiers(this.prerelease, other.prerelease); + } + increment(field) { + switch (field) { + case "major": + return new _Version(this.major + 1, 0, 0); + case "minor": + return new _Version(this.major, this.minor + 1, 0); + case "patch": + return new _Version(this.major, this.minor, this.patch + 1); + default: + return Debug.assertNever(field); + } + } + with(fields) { + const { + major = this.major, + minor = this.minor, + patch = this.patch, + prerelease = this.prerelease, + build: build2 = this.build + } = fields; + return new _Version(major, minor, patch, prerelease, build2); + } + toString() { + let result = `${this.major}.${this.minor}.${this.patch}`; + if (some(this.prerelease)) result += `-${this.prerelease.join(".")}`; + if (some(this.build)) result += `+${this.build.join(".")}`; + return result; + } +}; +_Version.zero = new _Version(0, 0, 0, ["0"]); +var Version = _Version; +function tryParseComponents(text) { + const match = versionRegExp.exec(text); + if (!match) return void 0; + const [, major, minor = "0", patch = "0", prerelease = "", build2 = ""] = match; + if (prerelease && !prereleaseRegExp.test(prerelease)) return void 0; + if (build2 && !buildRegExp.test(build2)) return void 0; + return { + major: parseInt(major, 10), + minor: parseInt(minor, 10), + patch: parseInt(patch, 10), + prerelease, + build: build2 + }; +} +function comparePrereleaseIdentifiers(left, right) { + if (left === right) return 0 /* EqualTo */; + if (left.length === 0) return right.length === 0 ? 0 /* EqualTo */ : 1 /* GreaterThan */; + if (right.length === 0) return -1 /* LessThan */; + const length2 = Math.min(left.length, right.length); + for (let i = 0; i < length2; i++) { + const leftIdentifier = left[i]; + const rightIdentifier = right[i]; + if (leftIdentifier === rightIdentifier) continue; + const leftIsNumeric = numericIdentifierRegExp.test(leftIdentifier); + const rightIsNumeric = numericIdentifierRegExp.test(rightIdentifier); + if (leftIsNumeric || rightIsNumeric) { + if (leftIsNumeric !== rightIsNumeric) return leftIsNumeric ? -1 /* LessThan */ : 1 /* GreaterThan */; + const result = compareValues(+leftIdentifier, +rightIdentifier); + if (result) return result; + } else { + const result = compareStringsCaseSensitive(leftIdentifier, rightIdentifier); + if (result) return result; + } + } + return compareValues(left.length, right.length); +} +var VersionRange = class _VersionRange { + constructor(spec) { + this._alternatives = spec ? Debug.checkDefined(parseRange(spec), "Invalid range spec.") : emptyArray; + } + static tryParse(text) { + const sets = parseRange(text); + if (sets) { + const range = new _VersionRange(""); + range._alternatives = sets; + return range; + } + return void 0; + } + /** + * Tests whether a version matches the range. This is equivalent to `satisfies(version, range, { includePrerelease: true })`. + * in `node-semver`. + */ + test(version2) { + if (typeof version2 === "string") version2 = new Version(version2); + return testDisjunction(version2, this._alternatives); + } + toString() { + return formatDisjunction(this._alternatives); + } +}; +var logicalOrRegExp = /\|\|/; +var whitespaceRegExp = /\s+/; +var partialRegExp = /^([x*0]|[1-9]\d*)(?:\.([x*0]|[1-9]\d*)(?:\.([x*0]|[1-9]\d*)(?:-([a-z0-9-.]+))?(?:\+([a-z0-9-.]+))?)?)?$/i; +var hyphenRegExp = /^\s*([a-z0-9-+.*]+)\s+-\s+([a-z0-9-+.*]+)\s*$/i; +var rangeRegExp = /^([~^<>=]|<=|>=)?\s*([a-z0-9-+.*]+)$/i; +function parseRange(text) { + const alternatives = []; + for (let range of text.trim().split(logicalOrRegExp)) { + if (!range) continue; + const comparators = []; + range = range.trim(); + const match = hyphenRegExp.exec(range); + if (match) { + if (!parseHyphen(match[1], match[2], comparators)) return void 0; + } else { + for (const simple of range.split(whitespaceRegExp)) { + const match2 = rangeRegExp.exec(simple.trim()); + if (!match2 || !parseComparator(match2[1], match2[2], comparators)) return void 0; + } + } + alternatives.push(comparators); + } + return alternatives; +} +function parsePartial(text) { + const match = partialRegExp.exec(text); + if (!match) return void 0; + const [, major, minor = "*", patch = "*", prerelease, build2] = match; + const version2 = new Version( + isWildcard(major) ? 0 : parseInt(major, 10), + isWildcard(major) || isWildcard(minor) ? 0 : parseInt(minor, 10), + isWildcard(major) || isWildcard(minor) || isWildcard(patch) ? 0 : parseInt(patch, 10), + prerelease, + build2 + ); + return { version: version2, major, minor, patch }; +} +function parseHyphen(left, right, comparators) { + const leftResult = parsePartial(left); + if (!leftResult) return false; + const rightResult = parsePartial(right); + if (!rightResult) return false; + if (!isWildcard(leftResult.major)) { + comparators.push(createComparator(">=", leftResult.version)); + } + if (!isWildcard(rightResult.major)) { + comparators.push( + isWildcard(rightResult.minor) ? createComparator("<", rightResult.version.increment("major")) : isWildcard(rightResult.patch) ? createComparator("<", rightResult.version.increment("minor")) : createComparator("<=", rightResult.version) + ); + } + return true; +} +function parseComparator(operator, text, comparators) { + const result = parsePartial(text); + if (!result) return false; + const { version: version2, major, minor, patch } = result; + if (!isWildcard(major)) { + switch (operator) { + case "~": + comparators.push(createComparator(">=", version2)); + comparators.push(createComparator( + "<", + version2.increment( + isWildcard(minor) ? "major" : "minor" + ) + )); + break; + case "^": + comparators.push(createComparator(">=", version2)); + comparators.push(createComparator( + "<", + version2.increment( + version2.major > 0 || isWildcard(minor) ? "major" : version2.minor > 0 || isWildcard(patch) ? "minor" : "patch" + ) + )); + break; + case "<": + case ">=": + comparators.push( + isWildcard(minor) || isWildcard(patch) ? createComparator(operator, version2.with({ prerelease: "0" })) : createComparator(operator, version2) + ); + break; + case "<=": + case ">": + comparators.push( + isWildcard(minor) ? createComparator(operator === "<=" ? "<" : ">=", version2.increment("major").with({ prerelease: "0" })) : isWildcard(patch) ? createComparator(operator === "<=" ? "<" : ">=", version2.increment("minor").with({ prerelease: "0" })) : createComparator(operator, version2) + ); + break; + case "=": + case void 0: + if (isWildcard(minor) || isWildcard(patch)) { + comparators.push(createComparator(">=", version2.with({ prerelease: "0" }))); + comparators.push(createComparator("<", version2.increment(isWildcard(minor) ? "major" : "minor").with({ prerelease: "0" }))); + } else { + comparators.push(createComparator("=", version2)); + } + break; + default: + return false; + } + } else if (operator === "<" || operator === ">") { + comparators.push(createComparator("<", Version.zero)); + } + return true; +} +function isWildcard(part) { + return part === "*" || part === "x" || part === "X"; +} +function createComparator(operator, operand) { + return { operator, operand }; +} +function testDisjunction(version2, alternatives) { + if (alternatives.length === 0) return true; + for (const alternative of alternatives) { + if (testAlternative(version2, alternative)) return true; + } + return false; +} +function testAlternative(version2, comparators) { + for (const comparator of comparators) { + if (!testComparator(version2, comparator.operator, comparator.operand)) return false; + } + return true; +} +function testComparator(version2, operator, operand) { + const cmp = version2.compareTo(operand); + switch (operator) { + case "<": + return cmp < 0; + case "<=": + return cmp <= 0; + case ">": + return cmp > 0; + case ">=": + return cmp >= 0; + case "=": + return cmp === 0; + default: + return Debug.assertNever(operator); + } +} +function formatDisjunction(alternatives) { + return map(alternatives, formatAlternative).join(" || ") || "*"; +} +function formatAlternative(comparators) { + return map(comparators, formatComparator).join(" "); +} +function formatComparator(comparator) { + return `${comparator.operator}${comparator.operand}`; +} + +// src/compiler/performanceCore.ts +function tryGetPerformance() { + if (isNodeLikeSystem()) { + try { + const { performance: performance2 } = require("perf_hooks"); + if (performance2) { + return { + shouldWriteNativeEvents: false, + performance: performance2 + }; + } + } catch { + } + } + if (typeof performance === "object") { + return { + shouldWriteNativeEvents: true, + performance + }; + } + return void 0; +} +function tryGetPerformanceHooks() { + const p = tryGetPerformance(); + if (!p) return void 0; + const { shouldWriteNativeEvents, performance: performance2 } = p; + const hooks = { + shouldWriteNativeEvents, + performance: void 0, + performanceTime: void 0 + }; + if (typeof performance2.timeOrigin === "number" && typeof performance2.now === "function") { + hooks.performanceTime = performance2; + } + if (hooks.performanceTime && typeof performance2.mark === "function" && typeof performance2.measure === "function" && typeof performance2.clearMarks === "function" && typeof performance2.clearMeasures === "function") { + hooks.performance = performance2; + } + return hooks; +} +var nativePerformanceHooks = tryGetPerformanceHooks(); +var nativePerformanceTime = nativePerformanceHooks == null ? void 0 : nativePerformanceHooks.performanceTime; +function tryGetNativePerformanceHooks() { + return nativePerformanceHooks; +} +var timestamp = nativePerformanceTime ? () => nativePerformanceTime.now() : Date.now; + +// src/compiler/_namespaces/ts.performance.ts +var ts_performance_exports = {}; +__export(ts_performance_exports, { + clearMarks: () => clearMarks, + clearMeasures: () => clearMeasures, + createTimer: () => createTimer, + createTimerIf: () => createTimerIf, + disable: () => disable, + enable: () => enable, + forEachMark: () => forEachMark, + forEachMeasure: () => forEachMeasure, + getCount: () => getCount, + getDuration: () => getDuration, + isEnabled: () => isEnabled, + mark: () => mark, + measure: () => measure, + nullTimer: () => nullTimer +}); + +// src/compiler/performance.ts +var perfHooks; +var performanceImpl; +function createTimerIf(condition, measureName, startMarkName, endMarkName) { + return condition ? createTimer(measureName, startMarkName, endMarkName) : nullTimer; +} +function createTimer(measureName, startMarkName, endMarkName) { + let enterCount = 0; + return { + enter, + exit + }; + function enter() { + if (++enterCount === 1) { + mark(startMarkName); + } + } + function exit() { + if (--enterCount === 0) { + mark(endMarkName); + measure(measureName, startMarkName, endMarkName); + } else if (enterCount < 0) { + Debug.fail("enter/exit count does not match."); + } + } +} +var nullTimer = { enter: noop, exit: noop }; +var enabled = false; +var timeorigin = timestamp(); +var marks = /* @__PURE__ */ new Map(); +var counts = /* @__PURE__ */ new Map(); +var durations = /* @__PURE__ */ new Map(); +function mark(markName) { + if (enabled) { + const count = counts.get(markName) ?? 0; + counts.set(markName, count + 1); + marks.set(markName, timestamp()); + performanceImpl == null ? void 0 : performanceImpl.mark(markName); + if (typeof onProfilerEvent === "function") { + onProfilerEvent(markName); + } + } +} +function measure(measureName, startMarkName, endMarkName) { + if (enabled) { + const end = (endMarkName !== void 0 ? marks.get(endMarkName) : void 0) ?? timestamp(); + const start = (startMarkName !== void 0 ? marks.get(startMarkName) : void 0) ?? timeorigin; + const previousDuration = durations.get(measureName) || 0; + durations.set(measureName, previousDuration + (end - start)); + performanceImpl == null ? void 0 : performanceImpl.measure(measureName, startMarkName, endMarkName); + } +} +function getCount(markName) { + return counts.get(markName) || 0; +} +function getDuration(measureName) { + return durations.get(measureName) || 0; +} +function forEachMeasure(cb) { + durations.forEach((duration, measureName) => cb(measureName, duration)); +} +function forEachMark(cb) { + marks.forEach((_time, markName) => cb(markName)); +} +function clearMeasures(name) { + if (name !== void 0) durations.delete(name); + else durations.clear(); + performanceImpl == null ? void 0 : performanceImpl.clearMeasures(name); +} +function clearMarks(name) { + if (name !== void 0) { + counts.delete(name); + marks.delete(name); + } else { + counts.clear(); + marks.clear(); + } + performanceImpl == null ? void 0 : performanceImpl.clearMarks(name); +} +function isEnabled() { + return enabled; +} +function enable(system = sys) { + var _a; + if (!enabled) { + enabled = true; + perfHooks || (perfHooks = tryGetNativePerformanceHooks()); + if (perfHooks == null ? void 0 : perfHooks.performance) { + timeorigin = perfHooks.performance.timeOrigin; + if (perfHooks.shouldWriteNativeEvents || ((_a = system == null ? void 0 : system.cpuProfilingEnabled) == null ? void 0 : _a.call(system)) || (system == null ? void 0 : system.debugMode)) { + performanceImpl = perfHooks.performance; + } + } + } + return true; +} +function disable() { + if (enabled) { + marks.clear(); + counts.clear(); + durations.clear(); + performanceImpl = void 0; + enabled = false; + } +} + +// src/compiler/tracing.ts +var tracing; +var tracingEnabled; +((tracingEnabled2) => { + let fs; + let traceCount = 0; + let traceFd = 0; + let mode; + const typeCatalog = []; + let legendPath; + const legend = []; + function startTracing2(tracingMode, traceDir, configFilePath) { + Debug.assert(!tracing, "Tracing already started"); + if (fs === void 0) { + try { + fs = require("fs"); + } catch (e) { + throw new Error(`tracing requires having fs +(original error: ${e.message || e})`); + } + } + mode = tracingMode; + typeCatalog.length = 0; + if (legendPath === void 0) { + legendPath = combinePaths(traceDir, "legend.json"); + } + if (!fs.existsSync(traceDir)) { + fs.mkdirSync(traceDir, { recursive: true }); + } + const countPart = mode === "build" ? `.${process.pid}-${++traceCount}` : mode === "server" ? `.${process.pid}` : ``; + const tracePath = combinePaths(traceDir, `trace${countPart}.json`); + const typesPath = combinePaths(traceDir, `types${countPart}.json`); + legend.push({ + configFilePath, + tracePath, + typesPath + }); + traceFd = fs.openSync(tracePath, "w"); + tracing = tracingEnabled2; + const meta = { cat: "__metadata", ph: "M", ts: 1e3 * timestamp(), pid: 1, tid: 1 }; + fs.writeSync( + traceFd, + "[\n" + [{ name: "process_name", args: { name: "tsc" }, ...meta }, { name: "thread_name", args: { name: "Main" }, ...meta }, { name: "TracingStartedInBrowser", ...meta, cat: "disabled-by-default-devtools.timeline" }].map((v) => JSON.stringify(v)).join(",\n") + ); + } + tracingEnabled2.startTracing = startTracing2; + function stopTracing() { + Debug.assert(tracing, "Tracing is not in progress"); + Debug.assert(!!typeCatalog.length === (mode !== "server")); + fs.writeSync(traceFd, ` +] +`); + fs.closeSync(traceFd); + tracing = void 0; + if (typeCatalog.length) { + dumpTypes(typeCatalog); + } else { + legend[legend.length - 1].typesPath = void 0; + } + } + tracingEnabled2.stopTracing = stopTracing; + function recordType(type) { + if (mode !== "server") { + typeCatalog.push(type); + } + } + tracingEnabled2.recordType = recordType; + let Phase; + ((Phase2) => { + Phase2["Parse"] = "parse"; + Phase2["Program"] = "program"; + Phase2["Bind"] = "bind"; + Phase2["Check"] = "check"; + Phase2["CheckTypes"] = "checkTypes"; + Phase2["Emit"] = "emit"; + Phase2["Session"] = "session"; + })(Phase = tracingEnabled2.Phase || (tracingEnabled2.Phase = {})); + function instant(phase, name, args) { + writeEvent("I", phase, name, args, `"s":"g"`); + } + tracingEnabled2.instant = instant; + const eventStack = []; + function push(phase, name, args, separateBeginAndEnd = false) { + if (separateBeginAndEnd) { + writeEvent("B", phase, name, args); + } + eventStack.push({ phase, name, args, time: 1e3 * timestamp(), separateBeginAndEnd }); + } + tracingEnabled2.push = push; + function pop(results) { + Debug.assert(eventStack.length > 0); + writeStackEvent(eventStack.length - 1, 1e3 * timestamp(), results); + eventStack.length--; + } + tracingEnabled2.pop = pop; + function popAll() { + const endTime = 1e3 * timestamp(); + for (let i = eventStack.length - 1; i >= 0; i--) { + writeStackEvent(i, endTime); + } + eventStack.length = 0; + } + tracingEnabled2.popAll = popAll; + const sampleInterval = 1e3 * 10; + function writeStackEvent(index, endTime, results) { + const { phase, name, args, time, separateBeginAndEnd } = eventStack[index]; + if (separateBeginAndEnd) { + Debug.assert(!results, "`results` are not supported for events with `separateBeginAndEnd`"); + writeEvent( + "E", + phase, + name, + args, + /*extras*/ + void 0, + endTime + ); + } else if (sampleInterval - time % sampleInterval <= endTime - time) { + writeEvent("X", phase, name, { ...args, results }, `"dur":${endTime - time}`, time); + } + } + function writeEvent(eventType, phase, name, args, extras, time = 1e3 * timestamp()) { + if (mode === "server" && phase === "checkTypes" /* CheckTypes */) return; + mark("beginTracing"); + fs.writeSync(traceFd, `, +{"pid":1,"tid":1,"ph":"${eventType}","cat":"${phase}","ts":${time},"name":"${name}"`); + if (extras) fs.writeSync(traceFd, `,${extras}`); + if (args) fs.writeSync(traceFd, `,"args":${JSON.stringify(args)}`); + fs.writeSync(traceFd, `}`); + mark("endTracing"); + measure("Tracing", "beginTracing", "endTracing"); + } + function getLocation(node) { + const file = getSourceFileOfNode(node); + return !file ? void 0 : { + path: file.path, + start: indexFromOne(getLineAndCharacterOfPosition(file, node.pos)), + end: indexFromOne(getLineAndCharacterOfPosition(file, node.end)) + }; + function indexFromOne(lc) { + return { + line: lc.line + 1, + character: lc.character + 1 + }; + } + } + function dumpTypes(types) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s; + mark("beginDumpTypes"); + const typesPath = legend[legend.length - 1].typesPath; + const typesFd = fs.openSync(typesPath, "w"); + const recursionIdentityMap = /* @__PURE__ */ new Map(); + fs.writeSync(typesFd, "["); + const numTypes = types.length; + for (let i = 0; i < numTypes; i++) { + const type = types[i]; + const objectFlags = type.objectFlags; + const symbol = type.aliasSymbol ?? type.symbol; + let display; + if (objectFlags & 16 /* Anonymous */ | type.flags & 2944 /* Literal */) { + try { + display = (_a = type.checker) == null ? void 0 : _a.typeToString(type); + } catch { + display = void 0; + } + } + let indexedAccessProperties = {}; + if (type.flags & 8388608 /* IndexedAccess */) { + const indexedAccessType = type; + indexedAccessProperties = { + indexedAccessObjectType: (_b = indexedAccessType.objectType) == null ? void 0 : _b.id, + indexedAccessIndexType: (_c = indexedAccessType.indexType) == null ? void 0 : _c.id + }; + } + let referenceProperties = {}; + if (objectFlags & 4 /* Reference */) { + const referenceType = type; + referenceProperties = { + instantiatedType: (_d = referenceType.target) == null ? void 0 : _d.id, + typeArguments: (_e = referenceType.resolvedTypeArguments) == null ? void 0 : _e.map((t) => t.id), + referenceLocation: getLocation(referenceType.node) + }; + } + let conditionalProperties = {}; + if (type.flags & 16777216 /* Conditional */) { + const conditionalType = type; + conditionalProperties = { + conditionalCheckType: (_f = conditionalType.checkType) == null ? void 0 : _f.id, + conditionalExtendsType: (_g = conditionalType.extendsType) == null ? void 0 : _g.id, + conditionalTrueType: ((_h = conditionalType.resolvedTrueType) == null ? void 0 : _h.id) ?? -1, + conditionalFalseType: ((_i = conditionalType.resolvedFalseType) == null ? void 0 : _i.id) ?? -1 + }; + } + let substitutionProperties = {}; + if (type.flags & 33554432 /* Substitution */) { + const substitutionType = type; + substitutionProperties = { + substitutionBaseType: (_j = substitutionType.baseType) == null ? void 0 : _j.id, + constraintType: (_k = substitutionType.constraint) == null ? void 0 : _k.id + }; + } + let reverseMappedProperties = {}; + if (objectFlags & 1024 /* ReverseMapped */) { + const reverseMappedType = type; + reverseMappedProperties = { + reverseMappedSourceType: (_l = reverseMappedType.source) == null ? void 0 : _l.id, + reverseMappedMappedType: (_m = reverseMappedType.mappedType) == null ? void 0 : _m.id, + reverseMappedConstraintType: (_n = reverseMappedType.constraintType) == null ? void 0 : _n.id + }; + } + let evolvingArrayProperties = {}; + if (objectFlags & 256 /* EvolvingArray */) { + const evolvingArrayType = type; + evolvingArrayProperties = { + evolvingArrayElementType: evolvingArrayType.elementType.id, + evolvingArrayFinalType: (_o = evolvingArrayType.finalArrayType) == null ? void 0 : _o.id + }; + } + let recursionToken; + const recursionIdentity = type.checker.getRecursionIdentity(type); + if (recursionIdentity) { + recursionToken = recursionIdentityMap.get(recursionIdentity); + if (!recursionToken) { + recursionToken = recursionIdentityMap.size; + recursionIdentityMap.set(recursionIdentity, recursionToken); + } + } + const descriptor = { + id: type.id, + intrinsicName: type.intrinsicName, + symbolName: (symbol == null ? void 0 : symbol.escapedName) && unescapeLeadingUnderscores(symbol.escapedName), + recursionId: recursionToken, + isTuple: objectFlags & 8 /* Tuple */ ? true : void 0, + unionTypes: type.flags & 1048576 /* Union */ ? (_p = type.types) == null ? void 0 : _p.map((t) => t.id) : void 0, + intersectionTypes: type.flags & 2097152 /* Intersection */ ? type.types.map((t) => t.id) : void 0, + aliasTypeArguments: (_q = type.aliasTypeArguments) == null ? void 0 : _q.map((t) => t.id), + keyofType: type.flags & 4194304 /* Index */ ? (_r = type.type) == null ? void 0 : _r.id : void 0, + ...indexedAccessProperties, + ...referenceProperties, + ...conditionalProperties, + ...substitutionProperties, + ...reverseMappedProperties, + ...evolvingArrayProperties, + destructuringPattern: getLocation(type.pattern), + firstDeclaration: getLocation((_s = symbol == null ? void 0 : symbol.declarations) == null ? void 0 : _s[0]), + flags: Debug.formatTypeFlags(type.flags).split("|"), + display + }; + fs.writeSync(typesFd, JSON.stringify(descriptor)); + if (i < numTypes - 1) { + fs.writeSync(typesFd, ",\n"); + } + } + fs.writeSync(typesFd, "]\n"); + fs.closeSync(typesFd); + mark("endDumpTypes"); + measure("Dump types", "beginDumpTypes", "endDumpTypes"); + } + function dumpLegend() { + if (!legendPath) { + return; + } + fs.writeFileSync(legendPath, JSON.stringify(legend)); + } + tracingEnabled2.dumpLegend = dumpLegend; +})(tracingEnabled || (tracingEnabled = {})); +var startTracing = tracingEnabled.startTracing; +var dumpTracingLegend = tracingEnabled.dumpLegend; + +// src/compiler/types.ts +var SyntaxKind = /* @__PURE__ */ ((SyntaxKind5) => { + SyntaxKind5[SyntaxKind5["Unknown"] = 0] = "Unknown"; + SyntaxKind5[SyntaxKind5["EndOfFileToken"] = 1] = "EndOfFileToken"; + SyntaxKind5[SyntaxKind5["SingleLineCommentTrivia"] = 2] = "SingleLineCommentTrivia"; + SyntaxKind5[SyntaxKind5["MultiLineCommentTrivia"] = 3] = "MultiLineCommentTrivia"; + SyntaxKind5[SyntaxKind5["NewLineTrivia"] = 4] = "NewLineTrivia"; + SyntaxKind5[SyntaxKind5["WhitespaceTrivia"] = 5] = "WhitespaceTrivia"; + SyntaxKind5[SyntaxKind5["ShebangTrivia"] = 6] = "ShebangTrivia"; + SyntaxKind5[SyntaxKind5["ConflictMarkerTrivia"] = 7] = "ConflictMarkerTrivia"; + SyntaxKind5[SyntaxKind5["NonTextFileMarkerTrivia"] = 8] = "NonTextFileMarkerTrivia"; + SyntaxKind5[SyntaxKind5["NumericLiteral"] = 9] = "NumericLiteral"; + SyntaxKind5[SyntaxKind5["BigIntLiteral"] = 10] = "BigIntLiteral"; + SyntaxKind5[SyntaxKind5["StringLiteral"] = 11] = "StringLiteral"; + SyntaxKind5[SyntaxKind5["JsxText"] = 12] = "JsxText"; + SyntaxKind5[SyntaxKind5["JsxTextAllWhiteSpaces"] = 13] = "JsxTextAllWhiteSpaces"; + SyntaxKind5[SyntaxKind5["RegularExpressionLiteral"] = 14] = "RegularExpressionLiteral"; + SyntaxKind5[SyntaxKind5["NoSubstitutionTemplateLiteral"] = 15] = "NoSubstitutionTemplateLiteral"; + SyntaxKind5[SyntaxKind5["TemplateHead"] = 16] = "TemplateHead"; + SyntaxKind5[SyntaxKind5["TemplateMiddle"] = 17] = "TemplateMiddle"; + SyntaxKind5[SyntaxKind5["TemplateTail"] = 18] = "TemplateTail"; + SyntaxKind5[SyntaxKind5["OpenBraceToken"] = 19] = "OpenBraceToken"; + SyntaxKind5[SyntaxKind5["CloseBraceToken"] = 20] = "CloseBraceToken"; + SyntaxKind5[SyntaxKind5["OpenParenToken"] = 21] = "OpenParenToken"; + SyntaxKind5[SyntaxKind5["CloseParenToken"] = 22] = "CloseParenToken"; + SyntaxKind5[SyntaxKind5["OpenBracketToken"] = 23] = "OpenBracketToken"; + SyntaxKind5[SyntaxKind5["CloseBracketToken"] = 24] = "CloseBracketToken"; + SyntaxKind5[SyntaxKind5["DotToken"] = 25] = "DotToken"; + SyntaxKind5[SyntaxKind5["DotDotDotToken"] = 26] = "DotDotDotToken"; + SyntaxKind5[SyntaxKind5["SemicolonToken"] = 27] = "SemicolonToken"; + SyntaxKind5[SyntaxKind5["CommaToken"] = 28] = "CommaToken"; + SyntaxKind5[SyntaxKind5["QuestionDotToken"] = 29] = "QuestionDotToken"; + SyntaxKind5[SyntaxKind5["LessThanToken"] = 30] = "LessThanToken"; + SyntaxKind5[SyntaxKind5["LessThanSlashToken"] = 31] = "LessThanSlashToken"; + SyntaxKind5[SyntaxKind5["GreaterThanToken"] = 32] = "GreaterThanToken"; + SyntaxKind5[SyntaxKind5["LessThanEqualsToken"] = 33] = "LessThanEqualsToken"; + SyntaxKind5[SyntaxKind5["GreaterThanEqualsToken"] = 34] = "GreaterThanEqualsToken"; + SyntaxKind5[SyntaxKind5["EqualsEqualsToken"] = 35] = "EqualsEqualsToken"; + SyntaxKind5[SyntaxKind5["ExclamationEqualsToken"] = 36] = "ExclamationEqualsToken"; + SyntaxKind5[SyntaxKind5["EqualsEqualsEqualsToken"] = 37] = "EqualsEqualsEqualsToken"; + SyntaxKind5[SyntaxKind5["ExclamationEqualsEqualsToken"] = 38] = "ExclamationEqualsEqualsToken"; + SyntaxKind5[SyntaxKind5["EqualsGreaterThanToken"] = 39] = "EqualsGreaterThanToken"; + SyntaxKind5[SyntaxKind5["PlusToken"] = 40] = "PlusToken"; + SyntaxKind5[SyntaxKind5["MinusToken"] = 41] = "MinusToken"; + SyntaxKind5[SyntaxKind5["AsteriskToken"] = 42] = "AsteriskToken"; + SyntaxKind5[SyntaxKind5["AsteriskAsteriskToken"] = 43] = "AsteriskAsteriskToken"; + SyntaxKind5[SyntaxKind5["SlashToken"] = 44] = "SlashToken"; + SyntaxKind5[SyntaxKind5["PercentToken"] = 45] = "PercentToken"; + SyntaxKind5[SyntaxKind5["PlusPlusToken"] = 46] = "PlusPlusToken"; + SyntaxKind5[SyntaxKind5["MinusMinusToken"] = 47] = "MinusMinusToken"; + SyntaxKind5[SyntaxKind5["LessThanLessThanToken"] = 48] = "LessThanLessThanToken"; + SyntaxKind5[SyntaxKind5["GreaterThanGreaterThanToken"] = 49] = "GreaterThanGreaterThanToken"; + SyntaxKind5[SyntaxKind5["GreaterThanGreaterThanGreaterThanToken"] = 50] = "GreaterThanGreaterThanGreaterThanToken"; + SyntaxKind5[SyntaxKind5["AmpersandToken"] = 51] = "AmpersandToken"; + SyntaxKind5[SyntaxKind5["BarToken"] = 52] = "BarToken"; + SyntaxKind5[SyntaxKind5["CaretToken"] = 53] = "CaretToken"; + SyntaxKind5[SyntaxKind5["ExclamationToken"] = 54] = "ExclamationToken"; + SyntaxKind5[SyntaxKind5["TildeToken"] = 55] = "TildeToken"; + SyntaxKind5[SyntaxKind5["AmpersandAmpersandToken"] = 56] = "AmpersandAmpersandToken"; + SyntaxKind5[SyntaxKind5["BarBarToken"] = 57] = "BarBarToken"; + SyntaxKind5[SyntaxKind5["QuestionToken"] = 58] = "QuestionToken"; + SyntaxKind5[SyntaxKind5["ColonToken"] = 59] = "ColonToken"; + SyntaxKind5[SyntaxKind5["AtToken"] = 60] = "AtToken"; + SyntaxKind5[SyntaxKind5["QuestionQuestionToken"] = 61] = "QuestionQuestionToken"; + SyntaxKind5[SyntaxKind5["BacktickToken"] = 62] = "BacktickToken"; + SyntaxKind5[SyntaxKind5["HashToken"] = 63] = "HashToken"; + SyntaxKind5[SyntaxKind5["EqualsToken"] = 64] = "EqualsToken"; + SyntaxKind5[SyntaxKind5["PlusEqualsToken"] = 65] = "PlusEqualsToken"; + SyntaxKind5[SyntaxKind5["MinusEqualsToken"] = 66] = "MinusEqualsToken"; + SyntaxKind5[SyntaxKind5["AsteriskEqualsToken"] = 67] = "AsteriskEqualsToken"; + SyntaxKind5[SyntaxKind5["AsteriskAsteriskEqualsToken"] = 68] = "AsteriskAsteriskEqualsToken"; + SyntaxKind5[SyntaxKind5["SlashEqualsToken"] = 69] = "SlashEqualsToken"; + SyntaxKind5[SyntaxKind5["PercentEqualsToken"] = 70] = "PercentEqualsToken"; + SyntaxKind5[SyntaxKind5["LessThanLessThanEqualsToken"] = 71] = "LessThanLessThanEqualsToken"; + SyntaxKind5[SyntaxKind5["GreaterThanGreaterThanEqualsToken"] = 72] = "GreaterThanGreaterThanEqualsToken"; + SyntaxKind5[SyntaxKind5["GreaterThanGreaterThanGreaterThanEqualsToken"] = 73] = "GreaterThanGreaterThanGreaterThanEqualsToken"; + SyntaxKind5[SyntaxKind5["AmpersandEqualsToken"] = 74] = "AmpersandEqualsToken"; + SyntaxKind5[SyntaxKind5["BarEqualsToken"] = 75] = "BarEqualsToken"; + SyntaxKind5[SyntaxKind5["BarBarEqualsToken"] = 76] = "BarBarEqualsToken"; + SyntaxKind5[SyntaxKind5["AmpersandAmpersandEqualsToken"] = 77] = "AmpersandAmpersandEqualsToken"; + SyntaxKind5[SyntaxKind5["QuestionQuestionEqualsToken"] = 78] = "QuestionQuestionEqualsToken"; + SyntaxKind5[SyntaxKind5["CaretEqualsToken"] = 79] = "CaretEqualsToken"; + SyntaxKind5[SyntaxKind5["Identifier"] = 80] = "Identifier"; + SyntaxKind5[SyntaxKind5["PrivateIdentifier"] = 81] = "PrivateIdentifier"; + SyntaxKind5[SyntaxKind5["JSDocCommentTextToken"] = 82] = "JSDocCommentTextToken"; + SyntaxKind5[SyntaxKind5["BreakKeyword"] = 83] = "BreakKeyword"; + SyntaxKind5[SyntaxKind5["CaseKeyword"] = 84] = "CaseKeyword"; + SyntaxKind5[SyntaxKind5["CatchKeyword"] = 85] = "CatchKeyword"; + SyntaxKind5[SyntaxKind5["ClassKeyword"] = 86] = "ClassKeyword"; + SyntaxKind5[SyntaxKind5["ConstKeyword"] = 87] = "ConstKeyword"; + SyntaxKind5[SyntaxKind5["ContinueKeyword"] = 88] = "ContinueKeyword"; + SyntaxKind5[SyntaxKind5["DebuggerKeyword"] = 89] = "DebuggerKeyword"; + SyntaxKind5[SyntaxKind5["DefaultKeyword"] = 90] = "DefaultKeyword"; + SyntaxKind5[SyntaxKind5["DeleteKeyword"] = 91] = "DeleteKeyword"; + SyntaxKind5[SyntaxKind5["DoKeyword"] = 92] = "DoKeyword"; + SyntaxKind5[SyntaxKind5["ElseKeyword"] = 93] = "ElseKeyword"; + SyntaxKind5[SyntaxKind5["EnumKeyword"] = 94] = "EnumKeyword"; + SyntaxKind5[SyntaxKind5["ExportKeyword"] = 95] = "ExportKeyword"; + SyntaxKind5[SyntaxKind5["ExtendsKeyword"] = 96] = "ExtendsKeyword"; + SyntaxKind5[SyntaxKind5["FalseKeyword"] = 97] = "FalseKeyword"; + SyntaxKind5[SyntaxKind5["FinallyKeyword"] = 98] = "FinallyKeyword"; + SyntaxKind5[SyntaxKind5["ForKeyword"] = 99] = "ForKeyword"; + SyntaxKind5[SyntaxKind5["FunctionKeyword"] = 100] = "FunctionKeyword"; + SyntaxKind5[SyntaxKind5["IfKeyword"] = 101] = "IfKeyword"; + SyntaxKind5[SyntaxKind5["ImportKeyword"] = 102] = "ImportKeyword"; + SyntaxKind5[SyntaxKind5["InKeyword"] = 103] = "InKeyword"; + SyntaxKind5[SyntaxKind5["InstanceOfKeyword"] = 104] = "InstanceOfKeyword"; + SyntaxKind5[SyntaxKind5["NewKeyword"] = 105] = "NewKeyword"; + SyntaxKind5[SyntaxKind5["NullKeyword"] = 106] = "NullKeyword"; + SyntaxKind5[SyntaxKind5["ReturnKeyword"] = 107] = "ReturnKeyword"; + SyntaxKind5[SyntaxKind5["SuperKeyword"] = 108] = "SuperKeyword"; + SyntaxKind5[SyntaxKind5["SwitchKeyword"] = 109] = "SwitchKeyword"; + SyntaxKind5[SyntaxKind5["ThisKeyword"] = 110] = "ThisKeyword"; + SyntaxKind5[SyntaxKind5["ThrowKeyword"] = 111] = "ThrowKeyword"; + SyntaxKind5[SyntaxKind5["TrueKeyword"] = 112] = "TrueKeyword"; + SyntaxKind5[SyntaxKind5["TryKeyword"] = 113] = "TryKeyword"; + SyntaxKind5[SyntaxKind5["TypeOfKeyword"] = 114] = "TypeOfKeyword"; + SyntaxKind5[SyntaxKind5["VarKeyword"] = 115] = "VarKeyword"; + SyntaxKind5[SyntaxKind5["VoidKeyword"] = 116] = "VoidKeyword"; + SyntaxKind5[SyntaxKind5["WhileKeyword"] = 117] = "WhileKeyword"; + SyntaxKind5[SyntaxKind5["WithKeyword"] = 118] = "WithKeyword"; + SyntaxKind5[SyntaxKind5["ImplementsKeyword"] = 119] = "ImplementsKeyword"; + SyntaxKind5[SyntaxKind5["InterfaceKeyword"] = 120] = "InterfaceKeyword"; + SyntaxKind5[SyntaxKind5["LetKeyword"] = 121] = "LetKeyword"; + SyntaxKind5[SyntaxKind5["PackageKeyword"] = 122] = "PackageKeyword"; + SyntaxKind5[SyntaxKind5["PrivateKeyword"] = 123] = "PrivateKeyword"; + SyntaxKind5[SyntaxKind5["ProtectedKeyword"] = 124] = "ProtectedKeyword"; + SyntaxKind5[SyntaxKind5["PublicKeyword"] = 125] = "PublicKeyword"; + SyntaxKind5[SyntaxKind5["StaticKeyword"] = 126] = "StaticKeyword"; + SyntaxKind5[SyntaxKind5["YieldKeyword"] = 127] = "YieldKeyword"; + SyntaxKind5[SyntaxKind5["AbstractKeyword"] = 128] = "AbstractKeyword"; + SyntaxKind5[SyntaxKind5["AccessorKeyword"] = 129] = "AccessorKeyword"; + SyntaxKind5[SyntaxKind5["AsKeyword"] = 130] = "AsKeyword"; + SyntaxKind5[SyntaxKind5["AssertsKeyword"] = 131] = "AssertsKeyword"; + SyntaxKind5[SyntaxKind5["AssertKeyword"] = 132] = "AssertKeyword"; + SyntaxKind5[SyntaxKind5["AnyKeyword"] = 133] = "AnyKeyword"; + SyntaxKind5[SyntaxKind5["AsyncKeyword"] = 134] = "AsyncKeyword"; + SyntaxKind5[SyntaxKind5["AwaitKeyword"] = 135] = "AwaitKeyword"; + SyntaxKind5[SyntaxKind5["BooleanKeyword"] = 136] = "BooleanKeyword"; + SyntaxKind5[SyntaxKind5["ConstructorKeyword"] = 137] = "ConstructorKeyword"; + SyntaxKind5[SyntaxKind5["DeclareKeyword"] = 138] = "DeclareKeyword"; + SyntaxKind5[SyntaxKind5["GetKeyword"] = 139] = "GetKeyword"; + SyntaxKind5[SyntaxKind5["InferKeyword"] = 140] = "InferKeyword"; + SyntaxKind5[SyntaxKind5["IntrinsicKeyword"] = 141] = "IntrinsicKeyword"; + SyntaxKind5[SyntaxKind5["IsKeyword"] = 142] = "IsKeyword"; + SyntaxKind5[SyntaxKind5["KeyOfKeyword"] = 143] = "KeyOfKeyword"; + SyntaxKind5[SyntaxKind5["ModuleKeyword"] = 144] = "ModuleKeyword"; + SyntaxKind5[SyntaxKind5["NamespaceKeyword"] = 145] = "NamespaceKeyword"; + SyntaxKind5[SyntaxKind5["NeverKeyword"] = 146] = "NeverKeyword"; + SyntaxKind5[SyntaxKind5["OutKeyword"] = 147] = "OutKeyword"; + SyntaxKind5[SyntaxKind5["ReadonlyKeyword"] = 148] = "ReadonlyKeyword"; + SyntaxKind5[SyntaxKind5["RequireKeyword"] = 149] = "RequireKeyword"; + SyntaxKind5[SyntaxKind5["NumberKeyword"] = 150] = "NumberKeyword"; + SyntaxKind5[SyntaxKind5["ObjectKeyword"] = 151] = "ObjectKeyword"; + SyntaxKind5[SyntaxKind5["SatisfiesKeyword"] = 152] = "SatisfiesKeyword"; + SyntaxKind5[SyntaxKind5["SetKeyword"] = 153] = "SetKeyword"; + SyntaxKind5[SyntaxKind5["StringKeyword"] = 154] = "StringKeyword"; + SyntaxKind5[SyntaxKind5["SymbolKeyword"] = 155] = "SymbolKeyword"; + SyntaxKind5[SyntaxKind5["TypeKeyword"] = 156] = "TypeKeyword"; + SyntaxKind5[SyntaxKind5["UndefinedKeyword"] = 157] = "UndefinedKeyword"; + SyntaxKind5[SyntaxKind5["UniqueKeyword"] = 158] = "UniqueKeyword"; + SyntaxKind5[SyntaxKind5["UnknownKeyword"] = 159] = "UnknownKeyword"; + SyntaxKind5[SyntaxKind5["UsingKeyword"] = 160] = "UsingKeyword"; + SyntaxKind5[SyntaxKind5["FromKeyword"] = 161] = "FromKeyword"; + SyntaxKind5[SyntaxKind5["GlobalKeyword"] = 162] = "GlobalKeyword"; + SyntaxKind5[SyntaxKind5["BigIntKeyword"] = 163] = "BigIntKeyword"; + SyntaxKind5[SyntaxKind5["OverrideKeyword"] = 164] = "OverrideKeyword"; + SyntaxKind5[SyntaxKind5["OfKeyword"] = 165] = "OfKeyword"; + SyntaxKind5[SyntaxKind5["DeferKeyword"] = 166] = "DeferKeyword"; + SyntaxKind5[SyntaxKind5["QualifiedName"] = 167] = "QualifiedName"; + SyntaxKind5[SyntaxKind5["ComputedPropertyName"] = 168] = "ComputedPropertyName"; + SyntaxKind5[SyntaxKind5["TypeParameter"] = 169] = "TypeParameter"; + SyntaxKind5[SyntaxKind5["Parameter"] = 170] = "Parameter"; + SyntaxKind5[SyntaxKind5["Decorator"] = 171] = "Decorator"; + SyntaxKind5[SyntaxKind5["PropertySignature"] = 172] = "PropertySignature"; + SyntaxKind5[SyntaxKind5["PropertyDeclaration"] = 173] = "PropertyDeclaration"; + SyntaxKind5[SyntaxKind5["MethodSignature"] = 174] = "MethodSignature"; + SyntaxKind5[SyntaxKind5["MethodDeclaration"] = 175] = "MethodDeclaration"; + SyntaxKind5[SyntaxKind5["ClassStaticBlockDeclaration"] = 176] = "ClassStaticBlockDeclaration"; + SyntaxKind5[SyntaxKind5["Constructor"] = 177] = "Constructor"; + SyntaxKind5[SyntaxKind5["GetAccessor"] = 178] = "GetAccessor"; + SyntaxKind5[SyntaxKind5["SetAccessor"] = 179] = "SetAccessor"; + SyntaxKind5[SyntaxKind5["CallSignature"] = 180] = "CallSignature"; + SyntaxKind5[SyntaxKind5["ConstructSignature"] = 181] = "ConstructSignature"; + SyntaxKind5[SyntaxKind5["IndexSignature"] = 182] = "IndexSignature"; + SyntaxKind5[SyntaxKind5["TypePredicate"] = 183] = "TypePredicate"; + SyntaxKind5[SyntaxKind5["TypeReference"] = 184] = "TypeReference"; + SyntaxKind5[SyntaxKind5["FunctionType"] = 185] = "FunctionType"; + SyntaxKind5[SyntaxKind5["ConstructorType"] = 186] = "ConstructorType"; + SyntaxKind5[SyntaxKind5["TypeQuery"] = 187] = "TypeQuery"; + SyntaxKind5[SyntaxKind5["TypeLiteral"] = 188] = "TypeLiteral"; + SyntaxKind5[SyntaxKind5["ArrayType"] = 189] = "ArrayType"; + SyntaxKind5[SyntaxKind5["TupleType"] = 190] = "TupleType"; + SyntaxKind5[SyntaxKind5["OptionalType"] = 191] = "OptionalType"; + SyntaxKind5[SyntaxKind5["RestType"] = 192] = "RestType"; + SyntaxKind5[SyntaxKind5["UnionType"] = 193] = "UnionType"; + SyntaxKind5[SyntaxKind5["IntersectionType"] = 194] = "IntersectionType"; + SyntaxKind5[SyntaxKind5["ConditionalType"] = 195] = "ConditionalType"; + SyntaxKind5[SyntaxKind5["InferType"] = 196] = "InferType"; + SyntaxKind5[SyntaxKind5["ParenthesizedType"] = 197] = "ParenthesizedType"; + SyntaxKind5[SyntaxKind5["ThisType"] = 198] = "ThisType"; + SyntaxKind5[SyntaxKind5["TypeOperator"] = 199] = "TypeOperator"; + SyntaxKind5[SyntaxKind5["IndexedAccessType"] = 200] = "IndexedAccessType"; + SyntaxKind5[SyntaxKind5["MappedType"] = 201] = "MappedType"; + SyntaxKind5[SyntaxKind5["LiteralType"] = 202] = "LiteralType"; + SyntaxKind5[SyntaxKind5["NamedTupleMember"] = 203] = "NamedTupleMember"; + SyntaxKind5[SyntaxKind5["TemplateLiteralType"] = 204] = "TemplateLiteralType"; + SyntaxKind5[SyntaxKind5["TemplateLiteralTypeSpan"] = 205] = "TemplateLiteralTypeSpan"; + SyntaxKind5[SyntaxKind5["ImportType"] = 206] = "ImportType"; + SyntaxKind5[SyntaxKind5["ObjectBindingPattern"] = 207] = "ObjectBindingPattern"; + SyntaxKind5[SyntaxKind5["ArrayBindingPattern"] = 208] = "ArrayBindingPattern"; + SyntaxKind5[SyntaxKind5["BindingElement"] = 209] = "BindingElement"; + SyntaxKind5[SyntaxKind5["ArrayLiteralExpression"] = 210] = "ArrayLiteralExpression"; + SyntaxKind5[SyntaxKind5["ObjectLiteralExpression"] = 211] = "ObjectLiteralExpression"; + SyntaxKind5[SyntaxKind5["PropertyAccessExpression"] = 212] = "PropertyAccessExpression"; + SyntaxKind5[SyntaxKind5["ElementAccessExpression"] = 213] = "ElementAccessExpression"; + SyntaxKind5[SyntaxKind5["CallExpression"] = 214] = "CallExpression"; + SyntaxKind5[SyntaxKind5["NewExpression"] = 215] = "NewExpression"; + SyntaxKind5[SyntaxKind5["TaggedTemplateExpression"] = 216] = "TaggedTemplateExpression"; + SyntaxKind5[SyntaxKind5["TypeAssertionExpression"] = 217] = "TypeAssertionExpression"; + SyntaxKind5[SyntaxKind5["ParenthesizedExpression"] = 218] = "ParenthesizedExpression"; + SyntaxKind5[SyntaxKind5["FunctionExpression"] = 219] = "FunctionExpression"; + SyntaxKind5[SyntaxKind5["ArrowFunction"] = 220] = "ArrowFunction"; + SyntaxKind5[SyntaxKind5["DeleteExpression"] = 221] = "DeleteExpression"; + SyntaxKind5[SyntaxKind5["TypeOfExpression"] = 222] = "TypeOfExpression"; + SyntaxKind5[SyntaxKind5["VoidExpression"] = 223] = "VoidExpression"; + SyntaxKind5[SyntaxKind5["AwaitExpression"] = 224] = "AwaitExpression"; + SyntaxKind5[SyntaxKind5["PrefixUnaryExpression"] = 225] = "PrefixUnaryExpression"; + SyntaxKind5[SyntaxKind5["PostfixUnaryExpression"] = 226] = "PostfixUnaryExpression"; + SyntaxKind5[SyntaxKind5["BinaryExpression"] = 227] = "BinaryExpression"; + SyntaxKind5[SyntaxKind5["ConditionalExpression"] = 228] = "ConditionalExpression"; + SyntaxKind5[SyntaxKind5["TemplateExpression"] = 229] = "TemplateExpression"; + SyntaxKind5[SyntaxKind5["YieldExpression"] = 230] = "YieldExpression"; + SyntaxKind5[SyntaxKind5["SpreadElement"] = 231] = "SpreadElement"; + SyntaxKind5[SyntaxKind5["ClassExpression"] = 232] = "ClassExpression"; + SyntaxKind5[SyntaxKind5["OmittedExpression"] = 233] = "OmittedExpression"; + SyntaxKind5[SyntaxKind5["ExpressionWithTypeArguments"] = 234] = "ExpressionWithTypeArguments"; + SyntaxKind5[SyntaxKind5["AsExpression"] = 235] = "AsExpression"; + SyntaxKind5[SyntaxKind5["NonNullExpression"] = 236] = "NonNullExpression"; + SyntaxKind5[SyntaxKind5["MetaProperty"] = 237] = "MetaProperty"; + SyntaxKind5[SyntaxKind5["SyntheticExpression"] = 238] = "SyntheticExpression"; + SyntaxKind5[SyntaxKind5["SatisfiesExpression"] = 239] = "SatisfiesExpression"; + SyntaxKind5[SyntaxKind5["TemplateSpan"] = 240] = "TemplateSpan"; + SyntaxKind5[SyntaxKind5["SemicolonClassElement"] = 241] = "SemicolonClassElement"; + SyntaxKind5[SyntaxKind5["Block"] = 242] = "Block"; + SyntaxKind5[SyntaxKind5["EmptyStatement"] = 243] = "EmptyStatement"; + SyntaxKind5[SyntaxKind5["VariableStatement"] = 244] = "VariableStatement"; + SyntaxKind5[SyntaxKind5["ExpressionStatement"] = 245] = "ExpressionStatement"; + SyntaxKind5[SyntaxKind5["IfStatement"] = 246] = "IfStatement"; + SyntaxKind5[SyntaxKind5["DoStatement"] = 247] = "DoStatement"; + SyntaxKind5[SyntaxKind5["WhileStatement"] = 248] = "WhileStatement"; + SyntaxKind5[SyntaxKind5["ForStatement"] = 249] = "ForStatement"; + SyntaxKind5[SyntaxKind5["ForInStatement"] = 250] = "ForInStatement"; + SyntaxKind5[SyntaxKind5["ForOfStatement"] = 251] = "ForOfStatement"; + SyntaxKind5[SyntaxKind5["ContinueStatement"] = 252] = "ContinueStatement"; + SyntaxKind5[SyntaxKind5["BreakStatement"] = 253] = "BreakStatement"; + SyntaxKind5[SyntaxKind5["ReturnStatement"] = 254] = "ReturnStatement"; + SyntaxKind5[SyntaxKind5["WithStatement"] = 255] = "WithStatement"; + SyntaxKind5[SyntaxKind5["SwitchStatement"] = 256] = "SwitchStatement"; + SyntaxKind5[SyntaxKind5["LabeledStatement"] = 257] = "LabeledStatement"; + SyntaxKind5[SyntaxKind5["ThrowStatement"] = 258] = "ThrowStatement"; + SyntaxKind5[SyntaxKind5["TryStatement"] = 259] = "TryStatement"; + SyntaxKind5[SyntaxKind5["DebuggerStatement"] = 260] = "DebuggerStatement"; + SyntaxKind5[SyntaxKind5["VariableDeclaration"] = 261] = "VariableDeclaration"; + SyntaxKind5[SyntaxKind5["VariableDeclarationList"] = 262] = "VariableDeclarationList"; + SyntaxKind5[SyntaxKind5["FunctionDeclaration"] = 263] = "FunctionDeclaration"; + SyntaxKind5[SyntaxKind5["ClassDeclaration"] = 264] = "ClassDeclaration"; + SyntaxKind5[SyntaxKind5["InterfaceDeclaration"] = 265] = "InterfaceDeclaration"; + SyntaxKind5[SyntaxKind5["TypeAliasDeclaration"] = 266] = "TypeAliasDeclaration"; + SyntaxKind5[SyntaxKind5["EnumDeclaration"] = 267] = "EnumDeclaration"; + SyntaxKind5[SyntaxKind5["ModuleDeclaration"] = 268] = "ModuleDeclaration"; + SyntaxKind5[SyntaxKind5["ModuleBlock"] = 269] = "ModuleBlock"; + SyntaxKind5[SyntaxKind5["CaseBlock"] = 270] = "CaseBlock"; + SyntaxKind5[SyntaxKind5["NamespaceExportDeclaration"] = 271] = "NamespaceExportDeclaration"; + SyntaxKind5[SyntaxKind5["ImportEqualsDeclaration"] = 272] = "ImportEqualsDeclaration"; + SyntaxKind5[SyntaxKind5["ImportDeclaration"] = 273] = "ImportDeclaration"; + SyntaxKind5[SyntaxKind5["ImportClause"] = 274] = "ImportClause"; + SyntaxKind5[SyntaxKind5["NamespaceImport"] = 275] = "NamespaceImport"; + SyntaxKind5[SyntaxKind5["NamedImports"] = 276] = "NamedImports"; + SyntaxKind5[SyntaxKind5["ImportSpecifier"] = 277] = "ImportSpecifier"; + SyntaxKind5[SyntaxKind5["ExportAssignment"] = 278] = "ExportAssignment"; + SyntaxKind5[SyntaxKind5["ExportDeclaration"] = 279] = "ExportDeclaration"; + SyntaxKind5[SyntaxKind5["NamedExports"] = 280] = "NamedExports"; + SyntaxKind5[SyntaxKind5["NamespaceExport"] = 281] = "NamespaceExport"; + SyntaxKind5[SyntaxKind5["ExportSpecifier"] = 282] = "ExportSpecifier"; + SyntaxKind5[SyntaxKind5["MissingDeclaration"] = 283] = "MissingDeclaration"; + SyntaxKind5[SyntaxKind5["ExternalModuleReference"] = 284] = "ExternalModuleReference"; + SyntaxKind5[SyntaxKind5["JsxElement"] = 285] = "JsxElement"; + SyntaxKind5[SyntaxKind5["JsxSelfClosingElement"] = 286] = "JsxSelfClosingElement"; + SyntaxKind5[SyntaxKind5["JsxOpeningElement"] = 287] = "JsxOpeningElement"; + SyntaxKind5[SyntaxKind5["JsxClosingElement"] = 288] = "JsxClosingElement"; + SyntaxKind5[SyntaxKind5["JsxFragment"] = 289] = "JsxFragment"; + SyntaxKind5[SyntaxKind5["JsxOpeningFragment"] = 290] = "JsxOpeningFragment"; + SyntaxKind5[SyntaxKind5["JsxClosingFragment"] = 291] = "JsxClosingFragment"; + SyntaxKind5[SyntaxKind5["JsxAttribute"] = 292] = "JsxAttribute"; + SyntaxKind5[SyntaxKind5["JsxAttributes"] = 293] = "JsxAttributes"; + SyntaxKind5[SyntaxKind5["JsxSpreadAttribute"] = 294] = "JsxSpreadAttribute"; + SyntaxKind5[SyntaxKind5["JsxExpression"] = 295] = "JsxExpression"; + SyntaxKind5[SyntaxKind5["JsxNamespacedName"] = 296] = "JsxNamespacedName"; + SyntaxKind5[SyntaxKind5["CaseClause"] = 297] = "CaseClause"; + SyntaxKind5[SyntaxKind5["DefaultClause"] = 298] = "DefaultClause"; + SyntaxKind5[SyntaxKind5["HeritageClause"] = 299] = "HeritageClause"; + SyntaxKind5[SyntaxKind5["CatchClause"] = 300] = "CatchClause"; + SyntaxKind5[SyntaxKind5["ImportAttributes"] = 301] = "ImportAttributes"; + SyntaxKind5[SyntaxKind5["ImportAttribute"] = 302] = "ImportAttribute"; + SyntaxKind5[SyntaxKind5["AssertClause"] = 301 /* ImportAttributes */] = "AssertClause"; + SyntaxKind5[SyntaxKind5["AssertEntry"] = 302 /* ImportAttribute */] = "AssertEntry"; + SyntaxKind5[SyntaxKind5["ImportTypeAssertionContainer"] = 303] = "ImportTypeAssertionContainer"; + SyntaxKind5[SyntaxKind5["PropertyAssignment"] = 304] = "PropertyAssignment"; + SyntaxKind5[SyntaxKind5["ShorthandPropertyAssignment"] = 305] = "ShorthandPropertyAssignment"; + SyntaxKind5[SyntaxKind5["SpreadAssignment"] = 306] = "SpreadAssignment"; + SyntaxKind5[SyntaxKind5["EnumMember"] = 307] = "EnumMember"; + SyntaxKind5[SyntaxKind5["SourceFile"] = 308] = "SourceFile"; + SyntaxKind5[SyntaxKind5["Bundle"] = 309] = "Bundle"; + SyntaxKind5[SyntaxKind5["JSDocTypeExpression"] = 310] = "JSDocTypeExpression"; + SyntaxKind5[SyntaxKind5["JSDocNameReference"] = 311] = "JSDocNameReference"; + SyntaxKind5[SyntaxKind5["JSDocMemberName"] = 312] = "JSDocMemberName"; + SyntaxKind5[SyntaxKind5["JSDocAllType"] = 313] = "JSDocAllType"; + SyntaxKind5[SyntaxKind5["JSDocUnknownType"] = 314] = "JSDocUnknownType"; + SyntaxKind5[SyntaxKind5["JSDocNullableType"] = 315] = "JSDocNullableType"; + SyntaxKind5[SyntaxKind5["JSDocNonNullableType"] = 316] = "JSDocNonNullableType"; + SyntaxKind5[SyntaxKind5["JSDocOptionalType"] = 317] = "JSDocOptionalType"; + SyntaxKind5[SyntaxKind5["JSDocFunctionType"] = 318] = "JSDocFunctionType"; + SyntaxKind5[SyntaxKind5["JSDocVariadicType"] = 319] = "JSDocVariadicType"; + SyntaxKind5[SyntaxKind5["JSDocNamepathType"] = 320] = "JSDocNamepathType"; + SyntaxKind5[SyntaxKind5["JSDoc"] = 321] = "JSDoc"; + SyntaxKind5[SyntaxKind5["JSDocComment"] = 321 /* JSDoc */] = "JSDocComment"; + SyntaxKind5[SyntaxKind5["JSDocText"] = 322] = "JSDocText"; + SyntaxKind5[SyntaxKind5["JSDocTypeLiteral"] = 323] = "JSDocTypeLiteral"; + SyntaxKind5[SyntaxKind5["JSDocSignature"] = 324] = "JSDocSignature"; + SyntaxKind5[SyntaxKind5["JSDocLink"] = 325] = "JSDocLink"; + SyntaxKind5[SyntaxKind5["JSDocLinkCode"] = 326] = "JSDocLinkCode"; + SyntaxKind5[SyntaxKind5["JSDocLinkPlain"] = 327] = "JSDocLinkPlain"; + SyntaxKind5[SyntaxKind5["JSDocTag"] = 328] = "JSDocTag"; + SyntaxKind5[SyntaxKind5["JSDocAugmentsTag"] = 329] = "JSDocAugmentsTag"; + SyntaxKind5[SyntaxKind5["JSDocImplementsTag"] = 330] = "JSDocImplementsTag"; + SyntaxKind5[SyntaxKind5["JSDocAuthorTag"] = 331] = "JSDocAuthorTag"; + SyntaxKind5[SyntaxKind5["JSDocDeprecatedTag"] = 332] = "JSDocDeprecatedTag"; + SyntaxKind5[SyntaxKind5["JSDocClassTag"] = 333] = "JSDocClassTag"; + SyntaxKind5[SyntaxKind5["JSDocPublicTag"] = 334] = "JSDocPublicTag"; + SyntaxKind5[SyntaxKind5["JSDocPrivateTag"] = 335] = "JSDocPrivateTag"; + SyntaxKind5[SyntaxKind5["JSDocProtectedTag"] = 336] = "JSDocProtectedTag"; + SyntaxKind5[SyntaxKind5["JSDocReadonlyTag"] = 337] = "JSDocReadonlyTag"; + SyntaxKind5[SyntaxKind5["JSDocOverrideTag"] = 338] = "JSDocOverrideTag"; + SyntaxKind5[SyntaxKind5["JSDocCallbackTag"] = 339] = "JSDocCallbackTag"; + SyntaxKind5[SyntaxKind5["JSDocOverloadTag"] = 340] = "JSDocOverloadTag"; + SyntaxKind5[SyntaxKind5["JSDocEnumTag"] = 341] = "JSDocEnumTag"; + SyntaxKind5[SyntaxKind5["JSDocParameterTag"] = 342] = "JSDocParameterTag"; + SyntaxKind5[SyntaxKind5["JSDocReturnTag"] = 343] = "JSDocReturnTag"; + SyntaxKind5[SyntaxKind5["JSDocThisTag"] = 344] = "JSDocThisTag"; + SyntaxKind5[SyntaxKind5["JSDocTypeTag"] = 345] = "JSDocTypeTag"; + SyntaxKind5[SyntaxKind5["JSDocTemplateTag"] = 346] = "JSDocTemplateTag"; + SyntaxKind5[SyntaxKind5["JSDocTypedefTag"] = 347] = "JSDocTypedefTag"; + SyntaxKind5[SyntaxKind5["JSDocSeeTag"] = 348] = "JSDocSeeTag"; + SyntaxKind5[SyntaxKind5["JSDocPropertyTag"] = 349] = "JSDocPropertyTag"; + SyntaxKind5[SyntaxKind5["JSDocThrowsTag"] = 350] = "JSDocThrowsTag"; + SyntaxKind5[SyntaxKind5["JSDocSatisfiesTag"] = 351] = "JSDocSatisfiesTag"; + SyntaxKind5[SyntaxKind5["JSDocImportTag"] = 352] = "JSDocImportTag"; + SyntaxKind5[SyntaxKind5["SyntaxList"] = 353] = "SyntaxList"; + SyntaxKind5[SyntaxKind5["NotEmittedStatement"] = 354] = "NotEmittedStatement"; + SyntaxKind5[SyntaxKind5["NotEmittedTypeElement"] = 355] = "NotEmittedTypeElement"; + SyntaxKind5[SyntaxKind5["PartiallyEmittedExpression"] = 356] = "PartiallyEmittedExpression"; + SyntaxKind5[SyntaxKind5["CommaListExpression"] = 357] = "CommaListExpression"; + SyntaxKind5[SyntaxKind5["SyntheticReferenceExpression"] = 358] = "SyntheticReferenceExpression"; + SyntaxKind5[SyntaxKind5["Count"] = 359] = "Count"; + SyntaxKind5[SyntaxKind5["FirstAssignment"] = 64 /* EqualsToken */] = "FirstAssignment"; + SyntaxKind5[SyntaxKind5["LastAssignment"] = 79 /* CaretEqualsToken */] = "LastAssignment"; + SyntaxKind5[SyntaxKind5["FirstCompoundAssignment"] = 65 /* PlusEqualsToken */] = "FirstCompoundAssignment"; + SyntaxKind5[SyntaxKind5["LastCompoundAssignment"] = 79 /* CaretEqualsToken */] = "LastCompoundAssignment"; + SyntaxKind5[SyntaxKind5["FirstReservedWord"] = 83 /* BreakKeyword */] = "FirstReservedWord"; + SyntaxKind5[SyntaxKind5["LastReservedWord"] = 118 /* WithKeyword */] = "LastReservedWord"; + SyntaxKind5[SyntaxKind5["FirstKeyword"] = 83 /* BreakKeyword */] = "FirstKeyword"; + SyntaxKind5[SyntaxKind5["LastKeyword"] = 166 /* DeferKeyword */] = "LastKeyword"; + SyntaxKind5[SyntaxKind5["FirstFutureReservedWord"] = 119 /* ImplementsKeyword */] = "FirstFutureReservedWord"; + SyntaxKind5[SyntaxKind5["LastFutureReservedWord"] = 127 /* YieldKeyword */] = "LastFutureReservedWord"; + SyntaxKind5[SyntaxKind5["FirstTypeNode"] = 183 /* TypePredicate */] = "FirstTypeNode"; + SyntaxKind5[SyntaxKind5["LastTypeNode"] = 206 /* ImportType */] = "LastTypeNode"; + SyntaxKind5[SyntaxKind5["FirstPunctuation"] = 19 /* OpenBraceToken */] = "FirstPunctuation"; + SyntaxKind5[SyntaxKind5["LastPunctuation"] = 79 /* CaretEqualsToken */] = "LastPunctuation"; + SyntaxKind5[SyntaxKind5["FirstToken"] = 0 /* Unknown */] = "FirstToken"; + SyntaxKind5[SyntaxKind5["LastToken"] = 166 /* LastKeyword */] = "LastToken"; + SyntaxKind5[SyntaxKind5["FirstTriviaToken"] = 2 /* SingleLineCommentTrivia */] = "FirstTriviaToken"; + SyntaxKind5[SyntaxKind5["LastTriviaToken"] = 7 /* ConflictMarkerTrivia */] = "LastTriviaToken"; + SyntaxKind5[SyntaxKind5["FirstLiteralToken"] = 9 /* NumericLiteral */] = "FirstLiteralToken"; + SyntaxKind5[SyntaxKind5["LastLiteralToken"] = 15 /* NoSubstitutionTemplateLiteral */] = "LastLiteralToken"; + SyntaxKind5[SyntaxKind5["FirstTemplateToken"] = 15 /* NoSubstitutionTemplateLiteral */] = "FirstTemplateToken"; + SyntaxKind5[SyntaxKind5["LastTemplateToken"] = 18 /* TemplateTail */] = "LastTemplateToken"; + SyntaxKind5[SyntaxKind5["FirstBinaryOperator"] = 30 /* LessThanToken */] = "FirstBinaryOperator"; + SyntaxKind5[SyntaxKind5["LastBinaryOperator"] = 79 /* CaretEqualsToken */] = "LastBinaryOperator"; + SyntaxKind5[SyntaxKind5["FirstStatement"] = 244 /* VariableStatement */] = "FirstStatement"; + SyntaxKind5[SyntaxKind5["LastStatement"] = 260 /* DebuggerStatement */] = "LastStatement"; + SyntaxKind5[SyntaxKind5["FirstNode"] = 167 /* QualifiedName */] = "FirstNode"; + SyntaxKind5[SyntaxKind5["FirstJSDocNode"] = 310 /* JSDocTypeExpression */] = "FirstJSDocNode"; + SyntaxKind5[SyntaxKind5["LastJSDocNode"] = 352 /* JSDocImportTag */] = "LastJSDocNode"; + SyntaxKind5[SyntaxKind5["FirstJSDocTagNode"] = 328 /* JSDocTag */] = "FirstJSDocTagNode"; + SyntaxKind5[SyntaxKind5["LastJSDocTagNode"] = 352 /* JSDocImportTag */] = "LastJSDocTagNode"; + SyntaxKind5[SyntaxKind5["FirstContextualKeyword"] = 128 /* AbstractKeyword */] = "FirstContextualKeyword"; + SyntaxKind5[SyntaxKind5["LastContextualKeyword"] = 166 /* LastKeyword */] = "LastContextualKeyword"; + return SyntaxKind5; +})(SyntaxKind || {}); +var NodeFlags = /* @__PURE__ */ ((NodeFlags3) => { + NodeFlags3[NodeFlags3["None"] = 0] = "None"; + NodeFlags3[NodeFlags3["Let"] = 1] = "Let"; + NodeFlags3[NodeFlags3["Const"] = 2] = "Const"; + NodeFlags3[NodeFlags3["Using"] = 4] = "Using"; + NodeFlags3[NodeFlags3["AwaitUsing"] = 6] = "AwaitUsing"; + NodeFlags3[NodeFlags3["NestedNamespace"] = 8] = "NestedNamespace"; + NodeFlags3[NodeFlags3["Synthesized"] = 16] = "Synthesized"; + NodeFlags3[NodeFlags3["Namespace"] = 32] = "Namespace"; + NodeFlags3[NodeFlags3["OptionalChain"] = 64] = "OptionalChain"; + NodeFlags3[NodeFlags3["ExportContext"] = 128] = "ExportContext"; + NodeFlags3[NodeFlags3["ContainsThis"] = 256] = "ContainsThis"; + NodeFlags3[NodeFlags3["HasImplicitReturn"] = 512] = "HasImplicitReturn"; + NodeFlags3[NodeFlags3["HasExplicitReturn"] = 1024] = "HasExplicitReturn"; + NodeFlags3[NodeFlags3["GlobalAugmentation"] = 2048] = "GlobalAugmentation"; + NodeFlags3[NodeFlags3["HasAsyncFunctions"] = 4096] = "HasAsyncFunctions"; + NodeFlags3[NodeFlags3["DisallowInContext"] = 8192] = "DisallowInContext"; + NodeFlags3[NodeFlags3["YieldContext"] = 16384] = "YieldContext"; + NodeFlags3[NodeFlags3["DecoratorContext"] = 32768] = "DecoratorContext"; + NodeFlags3[NodeFlags3["AwaitContext"] = 65536] = "AwaitContext"; + NodeFlags3[NodeFlags3["DisallowConditionalTypesContext"] = 131072] = "DisallowConditionalTypesContext"; + NodeFlags3[NodeFlags3["ThisNodeHasError"] = 262144] = "ThisNodeHasError"; + NodeFlags3[NodeFlags3["JavaScriptFile"] = 524288] = "JavaScriptFile"; + NodeFlags3[NodeFlags3["ThisNodeOrAnySubNodesHasError"] = 1048576] = "ThisNodeOrAnySubNodesHasError"; + NodeFlags3[NodeFlags3["HasAggregatedChildData"] = 2097152] = "HasAggregatedChildData"; + NodeFlags3[NodeFlags3["PossiblyContainsDynamicImport"] = 4194304] = "PossiblyContainsDynamicImport"; + NodeFlags3[NodeFlags3["PossiblyContainsImportMeta"] = 8388608] = "PossiblyContainsImportMeta"; + NodeFlags3[NodeFlags3["JSDoc"] = 16777216] = "JSDoc"; + NodeFlags3[NodeFlags3["Ambient"] = 33554432] = "Ambient"; + NodeFlags3[NodeFlags3["InWithStatement"] = 67108864] = "InWithStatement"; + NodeFlags3[NodeFlags3["JsonFile"] = 134217728] = "JsonFile"; + NodeFlags3[NodeFlags3["TypeCached"] = 268435456] = "TypeCached"; + NodeFlags3[NodeFlags3["Deprecated"] = 536870912] = "Deprecated"; + NodeFlags3[NodeFlags3["BlockScoped"] = 7] = "BlockScoped"; + NodeFlags3[NodeFlags3["Constant"] = 6] = "Constant"; + NodeFlags3[NodeFlags3["ReachabilityCheckFlags"] = 1536] = "ReachabilityCheckFlags"; + NodeFlags3[NodeFlags3["ReachabilityAndEmitFlags"] = 5632] = "ReachabilityAndEmitFlags"; + NodeFlags3[NodeFlags3["ContextFlags"] = 101441536] = "ContextFlags"; + NodeFlags3[NodeFlags3["TypeExcludesFlags"] = 81920] = "TypeExcludesFlags"; + NodeFlags3[NodeFlags3["PermanentlySetIncrementalFlags"] = 12582912] = "PermanentlySetIncrementalFlags"; + NodeFlags3[NodeFlags3["IdentifierHasExtendedUnicodeEscape"] = 256 /* ContainsThis */] = "IdentifierHasExtendedUnicodeEscape"; + NodeFlags3[NodeFlags3["IdentifierIsInJSDocNamespace"] = 4096 /* HasAsyncFunctions */] = "IdentifierIsInJSDocNamespace"; + return NodeFlags3; +})(NodeFlags || {}); +var ModifierFlags = /* @__PURE__ */ ((ModifierFlags3) => { + ModifierFlags3[ModifierFlags3["None"] = 0] = "None"; + ModifierFlags3[ModifierFlags3["Public"] = 1] = "Public"; + ModifierFlags3[ModifierFlags3["Private"] = 2] = "Private"; + ModifierFlags3[ModifierFlags3["Protected"] = 4] = "Protected"; + ModifierFlags3[ModifierFlags3["Readonly"] = 8] = "Readonly"; + ModifierFlags3[ModifierFlags3["Override"] = 16] = "Override"; + ModifierFlags3[ModifierFlags3["Export"] = 32] = "Export"; + ModifierFlags3[ModifierFlags3["Abstract"] = 64] = "Abstract"; + ModifierFlags3[ModifierFlags3["Ambient"] = 128] = "Ambient"; + ModifierFlags3[ModifierFlags3["Static"] = 256] = "Static"; + ModifierFlags3[ModifierFlags3["Accessor"] = 512] = "Accessor"; + ModifierFlags3[ModifierFlags3["Async"] = 1024] = "Async"; + ModifierFlags3[ModifierFlags3["Default"] = 2048] = "Default"; + ModifierFlags3[ModifierFlags3["Const"] = 4096] = "Const"; + ModifierFlags3[ModifierFlags3["In"] = 8192] = "In"; + ModifierFlags3[ModifierFlags3["Out"] = 16384] = "Out"; + ModifierFlags3[ModifierFlags3["Decorator"] = 32768] = "Decorator"; + ModifierFlags3[ModifierFlags3["Deprecated"] = 65536] = "Deprecated"; + ModifierFlags3[ModifierFlags3["JSDocPublic"] = 8388608] = "JSDocPublic"; + ModifierFlags3[ModifierFlags3["JSDocPrivate"] = 16777216] = "JSDocPrivate"; + ModifierFlags3[ModifierFlags3["JSDocProtected"] = 33554432] = "JSDocProtected"; + ModifierFlags3[ModifierFlags3["JSDocReadonly"] = 67108864] = "JSDocReadonly"; + ModifierFlags3[ModifierFlags3["JSDocOverride"] = 134217728] = "JSDocOverride"; + ModifierFlags3[ModifierFlags3["SyntacticOrJSDocModifiers"] = 31] = "SyntacticOrJSDocModifiers"; + ModifierFlags3[ModifierFlags3["SyntacticOnlyModifiers"] = 65504] = "SyntacticOnlyModifiers"; + ModifierFlags3[ModifierFlags3["SyntacticModifiers"] = 65535] = "SyntacticModifiers"; + ModifierFlags3[ModifierFlags3["JSDocCacheOnlyModifiers"] = 260046848] = "JSDocCacheOnlyModifiers"; + ModifierFlags3[ModifierFlags3["JSDocOnlyModifiers"] = 65536 /* Deprecated */] = "JSDocOnlyModifiers"; + ModifierFlags3[ModifierFlags3["NonCacheOnlyModifiers"] = 131071] = "NonCacheOnlyModifiers"; + ModifierFlags3[ModifierFlags3["HasComputedJSDocModifiers"] = 268435456] = "HasComputedJSDocModifiers"; + ModifierFlags3[ModifierFlags3["HasComputedFlags"] = 536870912] = "HasComputedFlags"; + ModifierFlags3[ModifierFlags3["AccessibilityModifier"] = 7] = "AccessibilityModifier"; + ModifierFlags3[ModifierFlags3["ParameterPropertyModifier"] = 31] = "ParameterPropertyModifier"; + ModifierFlags3[ModifierFlags3["NonPublicAccessibilityModifier"] = 6] = "NonPublicAccessibilityModifier"; + ModifierFlags3[ModifierFlags3["TypeScriptModifier"] = 28895] = "TypeScriptModifier"; + ModifierFlags3[ModifierFlags3["ExportDefault"] = 2080] = "ExportDefault"; + ModifierFlags3[ModifierFlags3["All"] = 131071] = "All"; + ModifierFlags3[ModifierFlags3["Modifier"] = 98303] = "Modifier"; + return ModifierFlags3; +})(ModifierFlags || {}); +var JsxFlags = /* @__PURE__ */ ((JsxFlags2) => { + JsxFlags2[JsxFlags2["None"] = 0] = "None"; + JsxFlags2[JsxFlags2["IntrinsicNamedElement"] = 1] = "IntrinsicNamedElement"; + JsxFlags2[JsxFlags2["IntrinsicIndexedElement"] = 2] = "IntrinsicIndexedElement"; + JsxFlags2[JsxFlags2["IntrinsicElement"] = 3] = "IntrinsicElement"; + return JsxFlags2; +})(JsxFlags || {}); +var RelationComparisonResult = /* @__PURE__ */ ((RelationComparisonResult3) => { + RelationComparisonResult3[RelationComparisonResult3["None"] = 0] = "None"; + RelationComparisonResult3[RelationComparisonResult3["Succeeded"] = 1] = "Succeeded"; + RelationComparisonResult3[RelationComparisonResult3["Failed"] = 2] = "Failed"; + RelationComparisonResult3[RelationComparisonResult3["ReportsUnmeasurable"] = 8] = "ReportsUnmeasurable"; + RelationComparisonResult3[RelationComparisonResult3["ReportsUnreliable"] = 16] = "ReportsUnreliable"; + RelationComparisonResult3[RelationComparisonResult3["ReportsMask"] = 24] = "ReportsMask"; + RelationComparisonResult3[RelationComparisonResult3["ComplexityOverflow"] = 32] = "ComplexityOverflow"; + RelationComparisonResult3[RelationComparisonResult3["StackDepthOverflow"] = 64] = "StackDepthOverflow"; + RelationComparisonResult3[RelationComparisonResult3["Overflow"] = 96] = "Overflow"; + return RelationComparisonResult3; +})(RelationComparisonResult || {}); +var PredicateSemantics = /* @__PURE__ */ ((PredicateSemantics2) => { + PredicateSemantics2[PredicateSemantics2["None"] = 0] = "None"; + PredicateSemantics2[PredicateSemantics2["Always"] = 1] = "Always"; + PredicateSemantics2[PredicateSemantics2["Never"] = 2] = "Never"; + PredicateSemantics2[PredicateSemantics2["Sometimes"] = 3] = "Sometimes"; + return PredicateSemantics2; +})(PredicateSemantics || {}); +var GeneratedIdentifierFlags = /* @__PURE__ */ ((GeneratedIdentifierFlags2) => { + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["None"] = 0] = "None"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["Auto"] = 1] = "Auto"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["Loop"] = 2] = "Loop"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["Unique"] = 3] = "Unique"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["Node"] = 4] = "Node"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["KindMask"] = 7] = "KindMask"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["ReservedInNestedScopes"] = 8] = "ReservedInNestedScopes"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["Optimistic"] = 16] = "Optimistic"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["FileLevel"] = 32] = "FileLevel"; + GeneratedIdentifierFlags2[GeneratedIdentifierFlags2["AllowNameSubstitution"] = 64] = "AllowNameSubstitution"; + return GeneratedIdentifierFlags2; +})(GeneratedIdentifierFlags || {}); +var RegularExpressionFlags = /* @__PURE__ */ ((RegularExpressionFlags2) => { + RegularExpressionFlags2[RegularExpressionFlags2["None"] = 0] = "None"; + RegularExpressionFlags2[RegularExpressionFlags2["HasIndices"] = 1] = "HasIndices"; + RegularExpressionFlags2[RegularExpressionFlags2["Global"] = 2] = "Global"; + RegularExpressionFlags2[RegularExpressionFlags2["IgnoreCase"] = 4] = "IgnoreCase"; + RegularExpressionFlags2[RegularExpressionFlags2["Multiline"] = 8] = "Multiline"; + RegularExpressionFlags2[RegularExpressionFlags2["DotAll"] = 16] = "DotAll"; + RegularExpressionFlags2[RegularExpressionFlags2["Unicode"] = 32] = "Unicode"; + RegularExpressionFlags2[RegularExpressionFlags2["UnicodeSets"] = 64] = "UnicodeSets"; + RegularExpressionFlags2[RegularExpressionFlags2["Sticky"] = 128] = "Sticky"; + RegularExpressionFlags2[RegularExpressionFlags2["AnyUnicodeMode"] = 96] = "AnyUnicodeMode"; + RegularExpressionFlags2[RegularExpressionFlags2["Modifiers"] = 28] = "Modifiers"; + return RegularExpressionFlags2; +})(RegularExpressionFlags || {}); +var TokenFlags = /* @__PURE__ */ ((TokenFlags2) => { + TokenFlags2[TokenFlags2["None"] = 0] = "None"; + TokenFlags2[TokenFlags2["PrecedingLineBreak"] = 1] = "PrecedingLineBreak"; + TokenFlags2[TokenFlags2["PrecedingJSDocComment"] = 2] = "PrecedingJSDocComment"; + TokenFlags2[TokenFlags2["Unterminated"] = 4] = "Unterminated"; + TokenFlags2[TokenFlags2["ExtendedUnicodeEscape"] = 8] = "ExtendedUnicodeEscape"; + TokenFlags2[TokenFlags2["Scientific"] = 16] = "Scientific"; + TokenFlags2[TokenFlags2["Octal"] = 32] = "Octal"; + TokenFlags2[TokenFlags2["HexSpecifier"] = 64] = "HexSpecifier"; + TokenFlags2[TokenFlags2["BinarySpecifier"] = 128] = "BinarySpecifier"; + TokenFlags2[TokenFlags2["OctalSpecifier"] = 256] = "OctalSpecifier"; + TokenFlags2[TokenFlags2["ContainsSeparator"] = 512] = "ContainsSeparator"; + TokenFlags2[TokenFlags2["UnicodeEscape"] = 1024] = "UnicodeEscape"; + TokenFlags2[TokenFlags2["ContainsInvalidEscape"] = 2048] = "ContainsInvalidEscape"; + TokenFlags2[TokenFlags2["HexEscape"] = 4096] = "HexEscape"; + TokenFlags2[TokenFlags2["ContainsLeadingZero"] = 8192] = "ContainsLeadingZero"; + TokenFlags2[TokenFlags2["ContainsInvalidSeparator"] = 16384] = "ContainsInvalidSeparator"; + TokenFlags2[TokenFlags2["PrecedingJSDocLeadingAsterisks"] = 32768] = "PrecedingJSDocLeadingAsterisks"; + TokenFlags2[TokenFlags2["BinaryOrOctalSpecifier"] = 384] = "BinaryOrOctalSpecifier"; + TokenFlags2[TokenFlags2["WithSpecifier"] = 448] = "WithSpecifier"; + TokenFlags2[TokenFlags2["StringLiteralFlags"] = 7176] = "StringLiteralFlags"; + TokenFlags2[TokenFlags2["NumericLiteralFlags"] = 25584] = "NumericLiteralFlags"; + TokenFlags2[TokenFlags2["TemplateLiteralLikeFlags"] = 7176] = "TemplateLiteralLikeFlags"; + TokenFlags2[TokenFlags2["IsInvalid"] = 26656] = "IsInvalid"; + return TokenFlags2; +})(TokenFlags || {}); +var FlowFlags = /* @__PURE__ */ ((FlowFlags2) => { + FlowFlags2[FlowFlags2["Unreachable"] = 1] = "Unreachable"; + FlowFlags2[FlowFlags2["Start"] = 2] = "Start"; + FlowFlags2[FlowFlags2["BranchLabel"] = 4] = "BranchLabel"; + FlowFlags2[FlowFlags2["LoopLabel"] = 8] = "LoopLabel"; + FlowFlags2[FlowFlags2["Assignment"] = 16] = "Assignment"; + FlowFlags2[FlowFlags2["TrueCondition"] = 32] = "TrueCondition"; + FlowFlags2[FlowFlags2["FalseCondition"] = 64] = "FalseCondition"; + FlowFlags2[FlowFlags2["SwitchClause"] = 128] = "SwitchClause"; + FlowFlags2[FlowFlags2["ArrayMutation"] = 256] = "ArrayMutation"; + FlowFlags2[FlowFlags2["Call"] = 512] = "Call"; + FlowFlags2[FlowFlags2["ReduceLabel"] = 1024] = "ReduceLabel"; + FlowFlags2[FlowFlags2["Referenced"] = 2048] = "Referenced"; + FlowFlags2[FlowFlags2["Shared"] = 4096] = "Shared"; + FlowFlags2[FlowFlags2["Label"] = 12] = "Label"; + FlowFlags2[FlowFlags2["Condition"] = 96] = "Condition"; + return FlowFlags2; +})(FlowFlags || {}); +var CommentDirectiveType = /* @__PURE__ */ ((CommentDirectiveType2) => { + CommentDirectiveType2[CommentDirectiveType2["ExpectError"] = 0] = "ExpectError"; + CommentDirectiveType2[CommentDirectiveType2["Ignore"] = 1] = "Ignore"; + return CommentDirectiveType2; +})(CommentDirectiveType || {}); +var OperationCanceledException = class { +}; +var FileIncludeKind = /* @__PURE__ */ ((FileIncludeKind2) => { + FileIncludeKind2[FileIncludeKind2["RootFile"] = 0] = "RootFile"; + FileIncludeKind2[FileIncludeKind2["SourceFromProjectReference"] = 1] = "SourceFromProjectReference"; + FileIncludeKind2[FileIncludeKind2["OutputFromProjectReference"] = 2] = "OutputFromProjectReference"; + FileIncludeKind2[FileIncludeKind2["Import"] = 3] = "Import"; + FileIncludeKind2[FileIncludeKind2["ReferenceFile"] = 4] = "ReferenceFile"; + FileIncludeKind2[FileIncludeKind2["TypeReferenceDirective"] = 5] = "TypeReferenceDirective"; + FileIncludeKind2[FileIncludeKind2["LibFile"] = 6] = "LibFile"; + FileIncludeKind2[FileIncludeKind2["LibReferenceDirective"] = 7] = "LibReferenceDirective"; + FileIncludeKind2[FileIncludeKind2["AutomaticTypeDirectiveFile"] = 8] = "AutomaticTypeDirectiveFile"; + return FileIncludeKind2; +})(FileIncludeKind || {}); +var FilePreprocessingDiagnosticsKind = /* @__PURE__ */ ((FilePreprocessingDiagnosticsKind2) => { + FilePreprocessingDiagnosticsKind2[FilePreprocessingDiagnosticsKind2["FilePreprocessingLibReferenceDiagnostic"] = 0] = "FilePreprocessingLibReferenceDiagnostic"; + FilePreprocessingDiagnosticsKind2[FilePreprocessingDiagnosticsKind2["FilePreprocessingFileExplainingDiagnostic"] = 1] = "FilePreprocessingFileExplainingDiagnostic"; + FilePreprocessingDiagnosticsKind2[FilePreprocessingDiagnosticsKind2["ResolutionDiagnostics"] = 2] = "ResolutionDiagnostics"; + return FilePreprocessingDiagnosticsKind2; +})(FilePreprocessingDiagnosticsKind || {}); +var EmitOnly = /* @__PURE__ */ ((EmitOnly4) => { + EmitOnly4[EmitOnly4["Js"] = 0] = "Js"; + EmitOnly4[EmitOnly4["Dts"] = 1] = "Dts"; + EmitOnly4[EmitOnly4["BuilderSignature"] = 2] = "BuilderSignature"; + return EmitOnly4; +})(EmitOnly || {}); +var StructureIsReused = /* @__PURE__ */ ((StructureIsReused2) => { + StructureIsReused2[StructureIsReused2["Not"] = 0] = "Not"; + StructureIsReused2[StructureIsReused2["SafeModules"] = 1] = "SafeModules"; + StructureIsReused2[StructureIsReused2["Completely"] = 2] = "Completely"; + return StructureIsReused2; +})(StructureIsReused || {}); +var ExitStatus = /* @__PURE__ */ ((ExitStatus2) => { + ExitStatus2[ExitStatus2["Success"] = 0] = "Success"; + ExitStatus2[ExitStatus2["DiagnosticsPresent_OutputsSkipped"] = 1] = "DiagnosticsPresent_OutputsSkipped"; + ExitStatus2[ExitStatus2["DiagnosticsPresent_OutputsGenerated"] = 2] = "DiagnosticsPresent_OutputsGenerated"; + ExitStatus2[ExitStatus2["InvalidProject_OutputsSkipped"] = 3] = "InvalidProject_OutputsSkipped"; + ExitStatus2[ExitStatus2["ProjectReferenceCycle_OutputsSkipped"] = 4] = "ProjectReferenceCycle_OutputsSkipped"; + return ExitStatus2; +})(ExitStatus || {}); +var MemberOverrideStatus = /* @__PURE__ */ ((MemberOverrideStatus2) => { + MemberOverrideStatus2[MemberOverrideStatus2["Ok"] = 0] = "Ok"; + MemberOverrideStatus2[MemberOverrideStatus2["NeedsOverride"] = 1] = "NeedsOverride"; + MemberOverrideStatus2[MemberOverrideStatus2["HasInvalidOverride"] = 2] = "HasInvalidOverride"; + return MemberOverrideStatus2; +})(MemberOverrideStatus || {}); +var UnionReduction = /* @__PURE__ */ ((UnionReduction2) => { + UnionReduction2[UnionReduction2["None"] = 0] = "None"; + UnionReduction2[UnionReduction2["Literal"] = 1] = "Literal"; + UnionReduction2[UnionReduction2["Subtype"] = 2] = "Subtype"; + return UnionReduction2; +})(UnionReduction || {}); +var IntersectionFlags = /* @__PURE__ */ ((IntersectionFlags2) => { + IntersectionFlags2[IntersectionFlags2["None"] = 0] = "None"; + IntersectionFlags2[IntersectionFlags2["NoSupertypeReduction"] = 1] = "NoSupertypeReduction"; + IntersectionFlags2[IntersectionFlags2["NoConstraintReduction"] = 2] = "NoConstraintReduction"; + return IntersectionFlags2; +})(IntersectionFlags || {}); +var ContextFlags = /* @__PURE__ */ ((ContextFlags3) => { + ContextFlags3[ContextFlags3["None"] = 0] = "None"; + ContextFlags3[ContextFlags3["Signature"] = 1] = "Signature"; + ContextFlags3[ContextFlags3["NoConstraints"] = 2] = "NoConstraints"; + ContextFlags3[ContextFlags3["Completions"] = 4] = "Completions"; + ContextFlags3[ContextFlags3["SkipBindingPatterns"] = 8] = "SkipBindingPatterns"; + return ContextFlags3; +})(ContextFlags || {}); +var NodeBuilderFlags = /* @__PURE__ */ ((NodeBuilderFlags2) => { + NodeBuilderFlags2[NodeBuilderFlags2["None"] = 0] = "None"; + NodeBuilderFlags2[NodeBuilderFlags2["NoTruncation"] = 1] = "NoTruncation"; + NodeBuilderFlags2[NodeBuilderFlags2["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; + NodeBuilderFlags2[NodeBuilderFlags2["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; + NodeBuilderFlags2[NodeBuilderFlags2["UseStructuralFallback"] = 8] = "UseStructuralFallback"; + NodeBuilderFlags2[NodeBuilderFlags2["ForbidIndexedAccessSymbolReferences"] = 16] = "ForbidIndexedAccessSymbolReferences"; + NodeBuilderFlags2[NodeBuilderFlags2["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; + NodeBuilderFlags2[NodeBuilderFlags2["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; + NodeBuilderFlags2[NodeBuilderFlags2["UseOnlyExternalAliasing"] = 128] = "UseOnlyExternalAliasing"; + NodeBuilderFlags2[NodeBuilderFlags2["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; + NodeBuilderFlags2[NodeBuilderFlags2["WriteTypeParametersInQualifiedName"] = 512] = "WriteTypeParametersInQualifiedName"; + NodeBuilderFlags2[NodeBuilderFlags2["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; + NodeBuilderFlags2[NodeBuilderFlags2["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; + NodeBuilderFlags2[NodeBuilderFlags2["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; + NodeBuilderFlags2[NodeBuilderFlags2["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; + NodeBuilderFlags2[NodeBuilderFlags2["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; + NodeBuilderFlags2[NodeBuilderFlags2["UseSingleQuotesForStringLiteralType"] = 268435456] = "UseSingleQuotesForStringLiteralType"; + NodeBuilderFlags2[NodeBuilderFlags2["NoTypeReduction"] = 536870912] = "NoTypeReduction"; + NodeBuilderFlags2[NodeBuilderFlags2["OmitThisParameter"] = 33554432] = "OmitThisParameter"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowThisInObjectLiteral"] = 32768] = "AllowThisInObjectLiteral"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowQualifiedNameInPlaceOfIdentifier"] = 65536] = "AllowQualifiedNameInPlaceOfIdentifier"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowAnonymousIdentifier"] = 131072] = "AllowAnonymousIdentifier"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowEmptyUnionOrIntersection"] = 262144] = "AllowEmptyUnionOrIntersection"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowEmptyTuple"] = 524288] = "AllowEmptyTuple"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowEmptyIndexInfoType"] = 2097152] = "AllowEmptyIndexInfoType"; + NodeBuilderFlags2[NodeBuilderFlags2["AllowNodeModulesRelativePaths"] = 67108864] = "AllowNodeModulesRelativePaths"; + NodeBuilderFlags2[NodeBuilderFlags2["IgnoreErrors"] = 70221824] = "IgnoreErrors"; + NodeBuilderFlags2[NodeBuilderFlags2["InObjectTypeLiteral"] = 4194304] = "InObjectTypeLiteral"; + NodeBuilderFlags2[NodeBuilderFlags2["InTypeAlias"] = 8388608] = "InTypeAlias"; + NodeBuilderFlags2[NodeBuilderFlags2["InInitialEntityName"] = 16777216] = "InInitialEntityName"; + return NodeBuilderFlags2; +})(NodeBuilderFlags || {}); +var InternalNodeBuilderFlags = /* @__PURE__ */ ((InternalNodeBuilderFlags2) => { + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["None"] = 0] = "None"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["WriteComputedProps"] = 1] = "WriteComputedProps"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["NoSyntacticPrinter"] = 2] = "NoSyntacticPrinter"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["DoNotIncludeSymbolChain"] = 4] = "DoNotIncludeSymbolChain"; + InternalNodeBuilderFlags2[InternalNodeBuilderFlags2["AllowUnresolvedNames"] = 8] = "AllowUnresolvedNames"; + return InternalNodeBuilderFlags2; +})(InternalNodeBuilderFlags || {}); +var TypeFormatFlags = /* @__PURE__ */ ((TypeFormatFlags2) => { + TypeFormatFlags2[TypeFormatFlags2["None"] = 0] = "None"; + TypeFormatFlags2[TypeFormatFlags2["NoTruncation"] = 1] = "NoTruncation"; + TypeFormatFlags2[TypeFormatFlags2["WriteArrayAsGenericType"] = 2] = "WriteArrayAsGenericType"; + TypeFormatFlags2[TypeFormatFlags2["GenerateNamesForShadowedTypeParams"] = 4] = "GenerateNamesForShadowedTypeParams"; + TypeFormatFlags2[TypeFormatFlags2["UseStructuralFallback"] = 8] = "UseStructuralFallback"; + TypeFormatFlags2[TypeFormatFlags2["WriteTypeArgumentsOfSignature"] = 32] = "WriteTypeArgumentsOfSignature"; + TypeFormatFlags2[TypeFormatFlags2["UseFullyQualifiedType"] = 64] = "UseFullyQualifiedType"; + TypeFormatFlags2[TypeFormatFlags2["SuppressAnyReturnType"] = 256] = "SuppressAnyReturnType"; + TypeFormatFlags2[TypeFormatFlags2["MultilineObjectLiterals"] = 1024] = "MultilineObjectLiterals"; + TypeFormatFlags2[TypeFormatFlags2["WriteClassExpressionAsTypeLiteral"] = 2048] = "WriteClassExpressionAsTypeLiteral"; + TypeFormatFlags2[TypeFormatFlags2["UseTypeOfFunction"] = 4096] = "UseTypeOfFunction"; + TypeFormatFlags2[TypeFormatFlags2["OmitParameterModifiers"] = 8192] = "OmitParameterModifiers"; + TypeFormatFlags2[TypeFormatFlags2["UseAliasDefinedOutsideCurrentScope"] = 16384] = "UseAliasDefinedOutsideCurrentScope"; + TypeFormatFlags2[TypeFormatFlags2["UseSingleQuotesForStringLiteralType"] = 268435456] = "UseSingleQuotesForStringLiteralType"; + TypeFormatFlags2[TypeFormatFlags2["NoTypeReduction"] = 536870912] = "NoTypeReduction"; + TypeFormatFlags2[TypeFormatFlags2["OmitThisParameter"] = 33554432] = "OmitThisParameter"; + TypeFormatFlags2[TypeFormatFlags2["AllowUniqueESSymbolType"] = 1048576] = "AllowUniqueESSymbolType"; + TypeFormatFlags2[TypeFormatFlags2["AddUndefined"] = 131072] = "AddUndefined"; + TypeFormatFlags2[TypeFormatFlags2["WriteArrowStyleSignature"] = 262144] = "WriteArrowStyleSignature"; + TypeFormatFlags2[TypeFormatFlags2["InArrayType"] = 524288] = "InArrayType"; + TypeFormatFlags2[TypeFormatFlags2["InElementType"] = 2097152] = "InElementType"; + TypeFormatFlags2[TypeFormatFlags2["InFirstTypeArgument"] = 4194304] = "InFirstTypeArgument"; + TypeFormatFlags2[TypeFormatFlags2["InTypeAlias"] = 8388608] = "InTypeAlias"; + TypeFormatFlags2[TypeFormatFlags2["NodeBuilderFlagsMask"] = 848330095] = "NodeBuilderFlagsMask"; + return TypeFormatFlags2; +})(TypeFormatFlags || {}); +var SymbolFormatFlags = /* @__PURE__ */ ((SymbolFormatFlags2) => { + SymbolFormatFlags2[SymbolFormatFlags2["None"] = 0] = "None"; + SymbolFormatFlags2[SymbolFormatFlags2["WriteTypeParametersOrArguments"] = 1] = "WriteTypeParametersOrArguments"; + SymbolFormatFlags2[SymbolFormatFlags2["UseOnlyExternalAliasing"] = 2] = "UseOnlyExternalAliasing"; + SymbolFormatFlags2[SymbolFormatFlags2["AllowAnyNodeKind"] = 4] = "AllowAnyNodeKind"; + SymbolFormatFlags2[SymbolFormatFlags2["UseAliasDefinedOutsideCurrentScope"] = 8] = "UseAliasDefinedOutsideCurrentScope"; + SymbolFormatFlags2[SymbolFormatFlags2["WriteComputedProps"] = 16] = "WriteComputedProps"; + SymbolFormatFlags2[SymbolFormatFlags2["DoNotIncludeSymbolChain"] = 32] = "DoNotIncludeSymbolChain"; + return SymbolFormatFlags2; +})(SymbolFormatFlags || {}); +var SymbolAccessibility = /* @__PURE__ */ ((SymbolAccessibility2) => { + SymbolAccessibility2[SymbolAccessibility2["Accessible"] = 0] = "Accessible"; + SymbolAccessibility2[SymbolAccessibility2["NotAccessible"] = 1] = "NotAccessible"; + SymbolAccessibility2[SymbolAccessibility2["CannotBeNamed"] = 2] = "CannotBeNamed"; + SymbolAccessibility2[SymbolAccessibility2["NotResolved"] = 3] = "NotResolved"; + return SymbolAccessibility2; +})(SymbolAccessibility || {}); +var TypePredicateKind = /* @__PURE__ */ ((TypePredicateKind2) => { + TypePredicateKind2[TypePredicateKind2["This"] = 0] = "This"; + TypePredicateKind2[TypePredicateKind2["Identifier"] = 1] = "Identifier"; + TypePredicateKind2[TypePredicateKind2["AssertsThis"] = 2] = "AssertsThis"; + TypePredicateKind2[TypePredicateKind2["AssertsIdentifier"] = 3] = "AssertsIdentifier"; + return TypePredicateKind2; +})(TypePredicateKind || {}); +var TypeReferenceSerializationKind = /* @__PURE__ */ ((TypeReferenceSerializationKind2) => { + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["Unknown"] = 0] = "Unknown"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["TypeWithConstructSignatureAndValue"] = 1] = "TypeWithConstructSignatureAndValue"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["VoidNullableOrNeverType"] = 2] = "VoidNullableOrNeverType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["NumberLikeType"] = 3] = "NumberLikeType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["BigIntLikeType"] = 4] = "BigIntLikeType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["StringLikeType"] = 5] = "StringLikeType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["BooleanType"] = 6] = "BooleanType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["ArrayLikeType"] = 7] = "ArrayLikeType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["ESSymbolType"] = 8] = "ESSymbolType"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["Promise"] = 9] = "Promise"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["TypeWithCallSignature"] = 10] = "TypeWithCallSignature"; + TypeReferenceSerializationKind2[TypeReferenceSerializationKind2["ObjectType"] = 11] = "ObjectType"; + return TypeReferenceSerializationKind2; +})(TypeReferenceSerializationKind || {}); +var SymbolFlags = /* @__PURE__ */ ((SymbolFlags3) => { + SymbolFlags3[SymbolFlags3["None"] = 0] = "None"; + SymbolFlags3[SymbolFlags3["FunctionScopedVariable"] = 1] = "FunctionScopedVariable"; + SymbolFlags3[SymbolFlags3["BlockScopedVariable"] = 2] = "BlockScopedVariable"; + SymbolFlags3[SymbolFlags3["Property"] = 4] = "Property"; + SymbolFlags3[SymbolFlags3["EnumMember"] = 8] = "EnumMember"; + SymbolFlags3[SymbolFlags3["Function"] = 16] = "Function"; + SymbolFlags3[SymbolFlags3["Class"] = 32] = "Class"; + SymbolFlags3[SymbolFlags3["Interface"] = 64] = "Interface"; + SymbolFlags3[SymbolFlags3["ConstEnum"] = 128] = "ConstEnum"; + SymbolFlags3[SymbolFlags3["RegularEnum"] = 256] = "RegularEnum"; + SymbolFlags3[SymbolFlags3["ValueModule"] = 512] = "ValueModule"; + SymbolFlags3[SymbolFlags3["NamespaceModule"] = 1024] = "NamespaceModule"; + SymbolFlags3[SymbolFlags3["TypeLiteral"] = 2048] = "TypeLiteral"; + SymbolFlags3[SymbolFlags3["ObjectLiteral"] = 4096] = "ObjectLiteral"; + SymbolFlags3[SymbolFlags3["Method"] = 8192] = "Method"; + SymbolFlags3[SymbolFlags3["Constructor"] = 16384] = "Constructor"; + SymbolFlags3[SymbolFlags3["GetAccessor"] = 32768] = "GetAccessor"; + SymbolFlags3[SymbolFlags3["SetAccessor"] = 65536] = "SetAccessor"; + SymbolFlags3[SymbolFlags3["Signature"] = 131072] = "Signature"; + SymbolFlags3[SymbolFlags3["TypeParameter"] = 262144] = "TypeParameter"; + SymbolFlags3[SymbolFlags3["TypeAlias"] = 524288] = "TypeAlias"; + SymbolFlags3[SymbolFlags3["ExportValue"] = 1048576] = "ExportValue"; + SymbolFlags3[SymbolFlags3["Alias"] = 2097152] = "Alias"; + SymbolFlags3[SymbolFlags3["Prototype"] = 4194304] = "Prototype"; + SymbolFlags3[SymbolFlags3["ExportStar"] = 8388608] = "ExportStar"; + SymbolFlags3[SymbolFlags3["Optional"] = 16777216] = "Optional"; + SymbolFlags3[SymbolFlags3["Transient"] = 33554432] = "Transient"; + SymbolFlags3[SymbolFlags3["Assignment"] = 67108864] = "Assignment"; + SymbolFlags3[SymbolFlags3["ModuleExports"] = 134217728] = "ModuleExports"; + SymbolFlags3[SymbolFlags3["All"] = -1] = "All"; + SymbolFlags3[SymbolFlags3["Enum"] = 384] = "Enum"; + SymbolFlags3[SymbolFlags3["Variable"] = 3] = "Variable"; + SymbolFlags3[SymbolFlags3["Value"] = 111551] = "Value"; + SymbolFlags3[SymbolFlags3["Type"] = 788968] = "Type"; + SymbolFlags3[SymbolFlags3["Namespace"] = 1920] = "Namespace"; + SymbolFlags3[SymbolFlags3["Module"] = 1536] = "Module"; + SymbolFlags3[SymbolFlags3["Accessor"] = 98304] = "Accessor"; + SymbolFlags3[SymbolFlags3["FunctionScopedVariableExcludes"] = 111550] = "FunctionScopedVariableExcludes"; + SymbolFlags3[SymbolFlags3["BlockScopedVariableExcludes"] = 111551 /* Value */] = "BlockScopedVariableExcludes"; + SymbolFlags3[SymbolFlags3["ParameterExcludes"] = 111551 /* Value */] = "ParameterExcludes"; + SymbolFlags3[SymbolFlags3["PropertyExcludes"] = 0 /* None */] = "PropertyExcludes"; + SymbolFlags3[SymbolFlags3["EnumMemberExcludes"] = 900095] = "EnumMemberExcludes"; + SymbolFlags3[SymbolFlags3["FunctionExcludes"] = 110991] = "FunctionExcludes"; + SymbolFlags3[SymbolFlags3["ClassExcludes"] = 899503] = "ClassExcludes"; + SymbolFlags3[SymbolFlags3["InterfaceExcludes"] = 788872] = "InterfaceExcludes"; + SymbolFlags3[SymbolFlags3["RegularEnumExcludes"] = 899327] = "RegularEnumExcludes"; + SymbolFlags3[SymbolFlags3["ConstEnumExcludes"] = 899967] = "ConstEnumExcludes"; + SymbolFlags3[SymbolFlags3["ValueModuleExcludes"] = 110735] = "ValueModuleExcludes"; + SymbolFlags3[SymbolFlags3["NamespaceModuleExcludes"] = 0] = "NamespaceModuleExcludes"; + SymbolFlags3[SymbolFlags3["MethodExcludes"] = 103359] = "MethodExcludes"; + SymbolFlags3[SymbolFlags3["GetAccessorExcludes"] = 46015] = "GetAccessorExcludes"; + SymbolFlags3[SymbolFlags3["SetAccessorExcludes"] = 78783] = "SetAccessorExcludes"; + SymbolFlags3[SymbolFlags3["AccessorExcludes"] = 13247] = "AccessorExcludes"; + SymbolFlags3[SymbolFlags3["TypeParameterExcludes"] = 526824] = "TypeParameterExcludes"; + SymbolFlags3[SymbolFlags3["TypeAliasExcludes"] = 788968 /* Type */] = "TypeAliasExcludes"; + SymbolFlags3[SymbolFlags3["AliasExcludes"] = 2097152 /* Alias */] = "AliasExcludes"; + SymbolFlags3[SymbolFlags3["ModuleMember"] = 2623475] = "ModuleMember"; + SymbolFlags3[SymbolFlags3["ExportHasLocal"] = 944] = "ExportHasLocal"; + SymbolFlags3[SymbolFlags3["BlockScoped"] = 418] = "BlockScoped"; + SymbolFlags3[SymbolFlags3["PropertyOrAccessor"] = 98308] = "PropertyOrAccessor"; + SymbolFlags3[SymbolFlags3["ClassMember"] = 106500] = "ClassMember"; + SymbolFlags3[SymbolFlags3["ExportSupportsDefaultModifier"] = 112] = "ExportSupportsDefaultModifier"; + SymbolFlags3[SymbolFlags3["ExportDoesNotSupportDefaultModifier"] = -113] = "ExportDoesNotSupportDefaultModifier"; + SymbolFlags3[SymbolFlags3["Classifiable"] = 2885600] = "Classifiable"; + SymbolFlags3[SymbolFlags3["LateBindingContainer"] = 6256] = "LateBindingContainer"; + return SymbolFlags3; +})(SymbolFlags || {}); +var CheckFlags = /* @__PURE__ */ ((CheckFlags2) => { + CheckFlags2[CheckFlags2["None"] = 0] = "None"; + CheckFlags2[CheckFlags2["Instantiated"] = 1] = "Instantiated"; + CheckFlags2[CheckFlags2["SyntheticProperty"] = 2] = "SyntheticProperty"; + CheckFlags2[CheckFlags2["SyntheticMethod"] = 4] = "SyntheticMethod"; + CheckFlags2[CheckFlags2["Readonly"] = 8] = "Readonly"; + CheckFlags2[CheckFlags2["ReadPartial"] = 16] = "ReadPartial"; + CheckFlags2[CheckFlags2["WritePartial"] = 32] = "WritePartial"; + CheckFlags2[CheckFlags2["HasNonUniformType"] = 64] = "HasNonUniformType"; + CheckFlags2[CheckFlags2["HasLiteralType"] = 128] = "HasLiteralType"; + CheckFlags2[CheckFlags2["ContainsPublic"] = 256] = "ContainsPublic"; + CheckFlags2[CheckFlags2["ContainsProtected"] = 512] = "ContainsProtected"; + CheckFlags2[CheckFlags2["ContainsPrivate"] = 1024] = "ContainsPrivate"; + CheckFlags2[CheckFlags2["ContainsStatic"] = 2048] = "ContainsStatic"; + CheckFlags2[CheckFlags2["Late"] = 4096] = "Late"; + CheckFlags2[CheckFlags2["ReverseMapped"] = 8192] = "ReverseMapped"; + CheckFlags2[CheckFlags2["OptionalParameter"] = 16384] = "OptionalParameter"; + CheckFlags2[CheckFlags2["RestParameter"] = 32768] = "RestParameter"; + CheckFlags2[CheckFlags2["DeferredType"] = 65536] = "DeferredType"; + CheckFlags2[CheckFlags2["HasNeverType"] = 131072] = "HasNeverType"; + CheckFlags2[CheckFlags2["Mapped"] = 262144] = "Mapped"; + CheckFlags2[CheckFlags2["StripOptional"] = 524288] = "StripOptional"; + CheckFlags2[CheckFlags2["Unresolved"] = 1048576] = "Unresolved"; + CheckFlags2[CheckFlags2["Synthetic"] = 6] = "Synthetic"; + CheckFlags2[CheckFlags2["Discriminant"] = 192] = "Discriminant"; + CheckFlags2[CheckFlags2["Partial"] = 48] = "Partial"; + return CheckFlags2; +})(CheckFlags || {}); +var InternalSymbolName = /* @__PURE__ */ ((InternalSymbolName2) => { + InternalSymbolName2["Call"] = "__call"; + InternalSymbolName2["Constructor"] = "__constructor"; + InternalSymbolName2["New"] = "__new"; + InternalSymbolName2["Index"] = "__index"; + InternalSymbolName2["ExportStar"] = "__export"; + InternalSymbolName2["Global"] = "__global"; + InternalSymbolName2["Missing"] = "__missing"; + InternalSymbolName2["Type"] = "__type"; + InternalSymbolName2["Object"] = "__object"; + InternalSymbolName2["JSXAttributes"] = "__jsxAttributes"; + InternalSymbolName2["Class"] = "__class"; + InternalSymbolName2["Function"] = "__function"; + InternalSymbolName2["Computed"] = "__computed"; + InternalSymbolName2["Resolving"] = "__resolving__"; + InternalSymbolName2["ExportEquals"] = "export="; + InternalSymbolName2["Default"] = "default"; + InternalSymbolName2["This"] = "this"; + InternalSymbolName2["InstantiationExpression"] = "__instantiationExpression"; + InternalSymbolName2["ImportAttributes"] = "__importAttributes"; + return InternalSymbolName2; +})(InternalSymbolName || {}); +var NodeCheckFlags = /* @__PURE__ */ ((NodeCheckFlags3) => { + NodeCheckFlags3[NodeCheckFlags3["None"] = 0] = "None"; + NodeCheckFlags3[NodeCheckFlags3["TypeChecked"] = 1] = "TypeChecked"; + NodeCheckFlags3[NodeCheckFlags3["LexicalThis"] = 2] = "LexicalThis"; + NodeCheckFlags3[NodeCheckFlags3["CaptureThis"] = 4] = "CaptureThis"; + NodeCheckFlags3[NodeCheckFlags3["CaptureNewTarget"] = 8] = "CaptureNewTarget"; + NodeCheckFlags3[NodeCheckFlags3["SuperInstance"] = 16] = "SuperInstance"; + NodeCheckFlags3[NodeCheckFlags3["SuperStatic"] = 32] = "SuperStatic"; + NodeCheckFlags3[NodeCheckFlags3["ContextChecked"] = 64] = "ContextChecked"; + NodeCheckFlags3[NodeCheckFlags3["MethodWithSuperPropertyAccessInAsync"] = 128] = "MethodWithSuperPropertyAccessInAsync"; + NodeCheckFlags3[NodeCheckFlags3["MethodWithSuperPropertyAssignmentInAsync"] = 256] = "MethodWithSuperPropertyAssignmentInAsync"; + NodeCheckFlags3[NodeCheckFlags3["CaptureArguments"] = 512] = "CaptureArguments"; + NodeCheckFlags3[NodeCheckFlags3["EnumValuesComputed"] = 1024] = "EnumValuesComputed"; + NodeCheckFlags3[NodeCheckFlags3["LexicalModuleMergesWithClass"] = 2048] = "LexicalModuleMergesWithClass"; + NodeCheckFlags3[NodeCheckFlags3["LoopWithCapturedBlockScopedBinding"] = 4096] = "LoopWithCapturedBlockScopedBinding"; + NodeCheckFlags3[NodeCheckFlags3["ContainsCapturedBlockScopeBinding"] = 8192] = "ContainsCapturedBlockScopeBinding"; + NodeCheckFlags3[NodeCheckFlags3["CapturedBlockScopedBinding"] = 16384] = "CapturedBlockScopedBinding"; + NodeCheckFlags3[NodeCheckFlags3["BlockScopedBindingInLoop"] = 32768] = "BlockScopedBindingInLoop"; + NodeCheckFlags3[NodeCheckFlags3["NeedsLoopOutParameter"] = 65536] = "NeedsLoopOutParameter"; + NodeCheckFlags3[NodeCheckFlags3["AssignmentsMarked"] = 131072] = "AssignmentsMarked"; + NodeCheckFlags3[NodeCheckFlags3["ContainsConstructorReference"] = 262144] = "ContainsConstructorReference"; + NodeCheckFlags3[NodeCheckFlags3["ConstructorReference"] = 536870912] = "ConstructorReference"; + NodeCheckFlags3[NodeCheckFlags3["ContainsClassWithPrivateIdentifiers"] = 1048576] = "ContainsClassWithPrivateIdentifiers"; + NodeCheckFlags3[NodeCheckFlags3["ContainsSuperPropertyInStaticInitializer"] = 2097152] = "ContainsSuperPropertyInStaticInitializer"; + NodeCheckFlags3[NodeCheckFlags3["InCheckIdentifier"] = 4194304] = "InCheckIdentifier"; + NodeCheckFlags3[NodeCheckFlags3["PartiallyTypeChecked"] = 8388608] = "PartiallyTypeChecked"; + NodeCheckFlags3[NodeCheckFlags3["LazyFlags"] = 539358128] = "LazyFlags"; + return NodeCheckFlags3; +})(NodeCheckFlags || {}); +var TypeFlags = /* @__PURE__ */ ((TypeFlags2) => { + TypeFlags2[TypeFlags2["Any"] = 1] = "Any"; + TypeFlags2[TypeFlags2["Unknown"] = 2] = "Unknown"; + TypeFlags2[TypeFlags2["String"] = 4] = "String"; + TypeFlags2[TypeFlags2["Number"] = 8] = "Number"; + TypeFlags2[TypeFlags2["Boolean"] = 16] = "Boolean"; + TypeFlags2[TypeFlags2["Enum"] = 32] = "Enum"; + TypeFlags2[TypeFlags2["BigInt"] = 64] = "BigInt"; + TypeFlags2[TypeFlags2["StringLiteral"] = 128] = "StringLiteral"; + TypeFlags2[TypeFlags2["NumberLiteral"] = 256] = "NumberLiteral"; + TypeFlags2[TypeFlags2["BooleanLiteral"] = 512] = "BooleanLiteral"; + TypeFlags2[TypeFlags2["EnumLiteral"] = 1024] = "EnumLiteral"; + TypeFlags2[TypeFlags2["BigIntLiteral"] = 2048] = "BigIntLiteral"; + TypeFlags2[TypeFlags2["ESSymbol"] = 4096] = "ESSymbol"; + TypeFlags2[TypeFlags2["UniqueESSymbol"] = 8192] = "UniqueESSymbol"; + TypeFlags2[TypeFlags2["Void"] = 16384] = "Void"; + TypeFlags2[TypeFlags2["Undefined"] = 32768] = "Undefined"; + TypeFlags2[TypeFlags2["Null"] = 65536] = "Null"; + TypeFlags2[TypeFlags2["Never"] = 131072] = "Never"; + TypeFlags2[TypeFlags2["TypeParameter"] = 262144] = "TypeParameter"; + TypeFlags2[TypeFlags2["Object"] = 524288] = "Object"; + TypeFlags2[TypeFlags2["Union"] = 1048576] = "Union"; + TypeFlags2[TypeFlags2["Intersection"] = 2097152] = "Intersection"; + TypeFlags2[TypeFlags2["Index"] = 4194304] = "Index"; + TypeFlags2[TypeFlags2["IndexedAccess"] = 8388608] = "IndexedAccess"; + TypeFlags2[TypeFlags2["Conditional"] = 16777216] = "Conditional"; + TypeFlags2[TypeFlags2["Substitution"] = 33554432] = "Substitution"; + TypeFlags2[TypeFlags2["NonPrimitive"] = 67108864] = "NonPrimitive"; + TypeFlags2[TypeFlags2["TemplateLiteral"] = 134217728] = "TemplateLiteral"; + TypeFlags2[TypeFlags2["StringMapping"] = 268435456] = "StringMapping"; + TypeFlags2[TypeFlags2["Reserved1"] = 536870912] = "Reserved1"; + TypeFlags2[TypeFlags2["Reserved2"] = 1073741824] = "Reserved2"; + TypeFlags2[TypeFlags2["AnyOrUnknown"] = 3] = "AnyOrUnknown"; + TypeFlags2[TypeFlags2["Nullable"] = 98304] = "Nullable"; + TypeFlags2[TypeFlags2["Literal"] = 2944] = "Literal"; + TypeFlags2[TypeFlags2["Unit"] = 109472] = "Unit"; + TypeFlags2[TypeFlags2["Freshable"] = 2976] = "Freshable"; + TypeFlags2[TypeFlags2["StringOrNumberLiteral"] = 384] = "StringOrNumberLiteral"; + TypeFlags2[TypeFlags2["StringOrNumberLiteralOrUnique"] = 8576] = "StringOrNumberLiteralOrUnique"; + TypeFlags2[TypeFlags2["DefinitelyFalsy"] = 117632] = "DefinitelyFalsy"; + TypeFlags2[TypeFlags2["PossiblyFalsy"] = 117724] = "PossiblyFalsy"; + TypeFlags2[TypeFlags2["Intrinsic"] = 67359327] = "Intrinsic"; + TypeFlags2[TypeFlags2["StringLike"] = 402653316] = "StringLike"; + TypeFlags2[TypeFlags2["NumberLike"] = 296] = "NumberLike"; + TypeFlags2[TypeFlags2["BigIntLike"] = 2112] = "BigIntLike"; + TypeFlags2[TypeFlags2["BooleanLike"] = 528] = "BooleanLike"; + TypeFlags2[TypeFlags2["EnumLike"] = 1056] = "EnumLike"; + TypeFlags2[TypeFlags2["ESSymbolLike"] = 12288] = "ESSymbolLike"; + TypeFlags2[TypeFlags2["VoidLike"] = 49152] = "VoidLike"; + TypeFlags2[TypeFlags2["Primitive"] = 402784252] = "Primitive"; + TypeFlags2[TypeFlags2["DefinitelyNonNullable"] = 470302716] = "DefinitelyNonNullable"; + TypeFlags2[TypeFlags2["DisjointDomains"] = 469892092] = "DisjointDomains"; + TypeFlags2[TypeFlags2["UnionOrIntersection"] = 3145728] = "UnionOrIntersection"; + TypeFlags2[TypeFlags2["StructuredType"] = 3670016] = "StructuredType"; + TypeFlags2[TypeFlags2["TypeVariable"] = 8650752] = "TypeVariable"; + TypeFlags2[TypeFlags2["InstantiableNonPrimitive"] = 58982400] = "InstantiableNonPrimitive"; + TypeFlags2[TypeFlags2["InstantiablePrimitive"] = 406847488] = "InstantiablePrimitive"; + TypeFlags2[TypeFlags2["Instantiable"] = 465829888] = "Instantiable"; + TypeFlags2[TypeFlags2["StructuredOrInstantiable"] = 469499904] = "StructuredOrInstantiable"; + TypeFlags2[TypeFlags2["ObjectFlagsType"] = 3899393] = "ObjectFlagsType"; + TypeFlags2[TypeFlags2["Simplifiable"] = 25165824] = "Simplifiable"; + TypeFlags2[TypeFlags2["Singleton"] = 67358815] = "Singleton"; + TypeFlags2[TypeFlags2["Narrowable"] = 536624127] = "Narrowable"; + TypeFlags2[TypeFlags2["IncludesMask"] = 473694207] = "IncludesMask"; + TypeFlags2[TypeFlags2["IncludesMissingType"] = 262144 /* TypeParameter */] = "IncludesMissingType"; + TypeFlags2[TypeFlags2["IncludesNonWideningType"] = 4194304 /* Index */] = "IncludesNonWideningType"; + TypeFlags2[TypeFlags2["IncludesWildcard"] = 8388608 /* IndexedAccess */] = "IncludesWildcard"; + TypeFlags2[TypeFlags2["IncludesEmptyObject"] = 16777216 /* Conditional */] = "IncludesEmptyObject"; + TypeFlags2[TypeFlags2["IncludesInstantiable"] = 33554432 /* Substitution */] = "IncludesInstantiable"; + TypeFlags2[TypeFlags2["IncludesConstrainedTypeVariable"] = 536870912 /* Reserved1 */] = "IncludesConstrainedTypeVariable"; + TypeFlags2[TypeFlags2["IncludesError"] = 1073741824 /* Reserved2 */] = "IncludesError"; + TypeFlags2[TypeFlags2["NotPrimitiveUnion"] = 36323331] = "NotPrimitiveUnion"; + return TypeFlags2; +})(TypeFlags || {}); +var ObjectFlags = /* @__PURE__ */ ((ObjectFlags3) => { + ObjectFlags3[ObjectFlags3["None"] = 0] = "None"; + ObjectFlags3[ObjectFlags3["Class"] = 1] = "Class"; + ObjectFlags3[ObjectFlags3["Interface"] = 2] = "Interface"; + ObjectFlags3[ObjectFlags3["Reference"] = 4] = "Reference"; + ObjectFlags3[ObjectFlags3["Tuple"] = 8] = "Tuple"; + ObjectFlags3[ObjectFlags3["Anonymous"] = 16] = "Anonymous"; + ObjectFlags3[ObjectFlags3["Mapped"] = 32] = "Mapped"; + ObjectFlags3[ObjectFlags3["Instantiated"] = 64] = "Instantiated"; + ObjectFlags3[ObjectFlags3["ObjectLiteral"] = 128] = "ObjectLiteral"; + ObjectFlags3[ObjectFlags3["EvolvingArray"] = 256] = "EvolvingArray"; + ObjectFlags3[ObjectFlags3["ObjectLiteralPatternWithComputedProperties"] = 512] = "ObjectLiteralPatternWithComputedProperties"; + ObjectFlags3[ObjectFlags3["ReverseMapped"] = 1024] = "ReverseMapped"; + ObjectFlags3[ObjectFlags3["JsxAttributes"] = 2048] = "JsxAttributes"; + ObjectFlags3[ObjectFlags3["JSLiteral"] = 4096] = "JSLiteral"; + ObjectFlags3[ObjectFlags3["FreshLiteral"] = 8192] = "FreshLiteral"; + ObjectFlags3[ObjectFlags3["ArrayLiteral"] = 16384] = "ArrayLiteral"; + ObjectFlags3[ObjectFlags3["PrimitiveUnion"] = 32768] = "PrimitiveUnion"; + ObjectFlags3[ObjectFlags3["ContainsWideningType"] = 65536] = "ContainsWideningType"; + ObjectFlags3[ObjectFlags3["ContainsObjectOrArrayLiteral"] = 131072] = "ContainsObjectOrArrayLiteral"; + ObjectFlags3[ObjectFlags3["NonInferrableType"] = 262144] = "NonInferrableType"; + ObjectFlags3[ObjectFlags3["CouldContainTypeVariablesComputed"] = 524288] = "CouldContainTypeVariablesComputed"; + ObjectFlags3[ObjectFlags3["CouldContainTypeVariables"] = 1048576] = "CouldContainTypeVariables"; + ObjectFlags3[ObjectFlags3["SingleSignatureType"] = 134217728] = "SingleSignatureType"; + ObjectFlags3[ObjectFlags3["ClassOrInterface"] = 3] = "ClassOrInterface"; + ObjectFlags3[ObjectFlags3["RequiresWidening"] = 196608] = "RequiresWidening"; + ObjectFlags3[ObjectFlags3["PropagatingFlags"] = 458752] = "PropagatingFlags"; + ObjectFlags3[ObjectFlags3["InstantiatedMapped"] = 96] = "InstantiatedMapped"; + ObjectFlags3[ObjectFlags3["ObjectTypeKindMask"] = 1343] = "ObjectTypeKindMask"; + ObjectFlags3[ObjectFlags3["ContainsSpread"] = 2097152] = "ContainsSpread"; + ObjectFlags3[ObjectFlags3["ObjectRestType"] = 4194304] = "ObjectRestType"; + ObjectFlags3[ObjectFlags3["InstantiationExpressionType"] = 8388608] = "InstantiationExpressionType"; + ObjectFlags3[ObjectFlags3["IsClassInstanceClone"] = 16777216] = "IsClassInstanceClone"; + ObjectFlags3[ObjectFlags3["IdenticalBaseTypeCalculated"] = 33554432] = "IdenticalBaseTypeCalculated"; + ObjectFlags3[ObjectFlags3["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists"; + ObjectFlags3[ObjectFlags3["IsGenericTypeComputed"] = 2097152] = "IsGenericTypeComputed"; + ObjectFlags3[ObjectFlags3["IsGenericObjectType"] = 4194304] = "IsGenericObjectType"; + ObjectFlags3[ObjectFlags3["IsGenericIndexType"] = 8388608] = "IsGenericIndexType"; + ObjectFlags3[ObjectFlags3["IsGenericType"] = 12582912] = "IsGenericType"; + ObjectFlags3[ObjectFlags3["ContainsIntersections"] = 16777216] = "ContainsIntersections"; + ObjectFlags3[ObjectFlags3["IsUnknownLikeUnionComputed"] = 33554432] = "IsUnknownLikeUnionComputed"; + ObjectFlags3[ObjectFlags3["IsUnknownLikeUnion"] = 67108864] = "IsUnknownLikeUnion"; + ObjectFlags3[ObjectFlags3["IsNeverIntersectionComputed"] = 16777216] = "IsNeverIntersectionComputed"; + ObjectFlags3[ObjectFlags3["IsNeverIntersection"] = 33554432] = "IsNeverIntersection"; + ObjectFlags3[ObjectFlags3["IsConstrainedTypeVariable"] = 67108864] = "IsConstrainedTypeVariable"; + return ObjectFlags3; +})(ObjectFlags || {}); +var VarianceFlags = /* @__PURE__ */ ((VarianceFlags2) => { + VarianceFlags2[VarianceFlags2["Invariant"] = 0] = "Invariant"; + VarianceFlags2[VarianceFlags2["Covariant"] = 1] = "Covariant"; + VarianceFlags2[VarianceFlags2["Contravariant"] = 2] = "Contravariant"; + VarianceFlags2[VarianceFlags2["Bivariant"] = 3] = "Bivariant"; + VarianceFlags2[VarianceFlags2["Independent"] = 4] = "Independent"; + VarianceFlags2[VarianceFlags2["VarianceMask"] = 7] = "VarianceMask"; + VarianceFlags2[VarianceFlags2["Unmeasurable"] = 8] = "Unmeasurable"; + VarianceFlags2[VarianceFlags2["Unreliable"] = 16] = "Unreliable"; + VarianceFlags2[VarianceFlags2["AllowsStructuralFallback"] = 24] = "AllowsStructuralFallback"; + return VarianceFlags2; +})(VarianceFlags || {}); +var ElementFlags = /* @__PURE__ */ ((ElementFlags2) => { + ElementFlags2[ElementFlags2["Required"] = 1] = "Required"; + ElementFlags2[ElementFlags2["Optional"] = 2] = "Optional"; + ElementFlags2[ElementFlags2["Rest"] = 4] = "Rest"; + ElementFlags2[ElementFlags2["Variadic"] = 8] = "Variadic"; + ElementFlags2[ElementFlags2["Fixed"] = 3] = "Fixed"; + ElementFlags2[ElementFlags2["Variable"] = 12] = "Variable"; + ElementFlags2[ElementFlags2["NonRequired"] = 14] = "NonRequired"; + ElementFlags2[ElementFlags2["NonRest"] = 11] = "NonRest"; + return ElementFlags2; +})(ElementFlags || {}); +var AccessFlags = /* @__PURE__ */ ((AccessFlags2) => { + AccessFlags2[AccessFlags2["None"] = 0] = "None"; + AccessFlags2[AccessFlags2["IncludeUndefined"] = 1] = "IncludeUndefined"; + AccessFlags2[AccessFlags2["NoIndexSignatures"] = 2] = "NoIndexSignatures"; + AccessFlags2[AccessFlags2["Writing"] = 4] = "Writing"; + AccessFlags2[AccessFlags2["CacheSymbol"] = 8] = "CacheSymbol"; + AccessFlags2[AccessFlags2["AllowMissing"] = 16] = "AllowMissing"; + AccessFlags2[AccessFlags2["ExpressionPosition"] = 32] = "ExpressionPosition"; + AccessFlags2[AccessFlags2["ReportDeprecated"] = 64] = "ReportDeprecated"; + AccessFlags2[AccessFlags2["SuppressNoImplicitAnyError"] = 128] = "SuppressNoImplicitAnyError"; + AccessFlags2[AccessFlags2["Contextual"] = 256] = "Contextual"; + AccessFlags2[AccessFlags2["Persistent"] = 1 /* IncludeUndefined */] = "Persistent"; + return AccessFlags2; +})(AccessFlags || {}); +var IndexFlags = /* @__PURE__ */ ((IndexFlags2) => { + IndexFlags2[IndexFlags2["None"] = 0] = "None"; + IndexFlags2[IndexFlags2["StringsOnly"] = 1] = "StringsOnly"; + IndexFlags2[IndexFlags2["NoIndexSignatures"] = 2] = "NoIndexSignatures"; + IndexFlags2[IndexFlags2["NoReducibleCheck"] = 4] = "NoReducibleCheck"; + return IndexFlags2; +})(IndexFlags || {}); +var JsxReferenceKind = /* @__PURE__ */ ((JsxReferenceKind2) => { + JsxReferenceKind2[JsxReferenceKind2["Component"] = 0] = "Component"; + JsxReferenceKind2[JsxReferenceKind2["Function"] = 1] = "Function"; + JsxReferenceKind2[JsxReferenceKind2["Mixed"] = 2] = "Mixed"; + return JsxReferenceKind2; +})(JsxReferenceKind || {}); +var SignatureKind = /* @__PURE__ */ ((SignatureKind2) => { + SignatureKind2[SignatureKind2["Call"] = 0] = "Call"; + SignatureKind2[SignatureKind2["Construct"] = 1] = "Construct"; + return SignatureKind2; +})(SignatureKind || {}); +var SignatureFlags = /* @__PURE__ */ ((SignatureFlags5) => { + SignatureFlags5[SignatureFlags5["None"] = 0] = "None"; + SignatureFlags5[SignatureFlags5["HasRestParameter"] = 1] = "HasRestParameter"; + SignatureFlags5[SignatureFlags5["HasLiteralTypes"] = 2] = "HasLiteralTypes"; + SignatureFlags5[SignatureFlags5["Abstract"] = 4] = "Abstract"; + SignatureFlags5[SignatureFlags5["IsInnerCallChain"] = 8] = "IsInnerCallChain"; + SignatureFlags5[SignatureFlags5["IsOuterCallChain"] = 16] = "IsOuterCallChain"; + SignatureFlags5[SignatureFlags5["IsUntypedSignatureInJSFile"] = 32] = "IsUntypedSignatureInJSFile"; + SignatureFlags5[SignatureFlags5["IsNonInferrable"] = 64] = "IsNonInferrable"; + SignatureFlags5[SignatureFlags5["IsSignatureCandidateForOverloadFailure"] = 128] = "IsSignatureCandidateForOverloadFailure"; + SignatureFlags5[SignatureFlags5["PropagatingFlags"] = 167] = "PropagatingFlags"; + SignatureFlags5[SignatureFlags5["CallChainFlags"] = 24] = "CallChainFlags"; + return SignatureFlags5; +})(SignatureFlags || {}); +var IndexKind = /* @__PURE__ */ ((IndexKind2) => { + IndexKind2[IndexKind2["String"] = 0] = "String"; + IndexKind2[IndexKind2["Number"] = 1] = "Number"; + return IndexKind2; +})(IndexKind || {}); +var TypeMapKind = /* @__PURE__ */ ((TypeMapKind2) => { + TypeMapKind2[TypeMapKind2["Simple"] = 0] = "Simple"; + TypeMapKind2[TypeMapKind2["Array"] = 1] = "Array"; + TypeMapKind2[TypeMapKind2["Deferred"] = 2] = "Deferred"; + TypeMapKind2[TypeMapKind2["Function"] = 3] = "Function"; + TypeMapKind2[TypeMapKind2["Composite"] = 4] = "Composite"; + TypeMapKind2[TypeMapKind2["Merged"] = 5] = "Merged"; + return TypeMapKind2; +})(TypeMapKind || {}); +var InferencePriority = /* @__PURE__ */ ((InferencePriority2) => { + InferencePriority2[InferencePriority2["None"] = 0] = "None"; + InferencePriority2[InferencePriority2["NakedTypeVariable"] = 1] = "NakedTypeVariable"; + InferencePriority2[InferencePriority2["SpeculativeTuple"] = 2] = "SpeculativeTuple"; + InferencePriority2[InferencePriority2["SubstituteSource"] = 4] = "SubstituteSource"; + InferencePriority2[InferencePriority2["HomomorphicMappedType"] = 8] = "HomomorphicMappedType"; + InferencePriority2[InferencePriority2["PartialHomomorphicMappedType"] = 16] = "PartialHomomorphicMappedType"; + InferencePriority2[InferencePriority2["MappedTypeConstraint"] = 32] = "MappedTypeConstraint"; + InferencePriority2[InferencePriority2["ContravariantConditional"] = 64] = "ContravariantConditional"; + InferencePriority2[InferencePriority2["ReturnType"] = 128] = "ReturnType"; + InferencePriority2[InferencePriority2["LiteralKeyof"] = 256] = "LiteralKeyof"; + InferencePriority2[InferencePriority2["NoConstraints"] = 512] = "NoConstraints"; + InferencePriority2[InferencePriority2["AlwaysStrict"] = 1024] = "AlwaysStrict"; + InferencePriority2[InferencePriority2["MaxValue"] = 2048] = "MaxValue"; + InferencePriority2[InferencePriority2["PriorityImpliesCombination"] = 416] = "PriorityImpliesCombination"; + InferencePriority2[InferencePriority2["Circularity"] = -1] = "Circularity"; + return InferencePriority2; +})(InferencePriority || {}); +var InferenceFlags = /* @__PURE__ */ ((InferenceFlags2) => { + InferenceFlags2[InferenceFlags2["None"] = 0] = "None"; + InferenceFlags2[InferenceFlags2["NoDefault"] = 1] = "NoDefault"; + InferenceFlags2[InferenceFlags2["AnyDefault"] = 2] = "AnyDefault"; + InferenceFlags2[InferenceFlags2["SkippedGenericFunction"] = 4] = "SkippedGenericFunction"; + return InferenceFlags2; +})(InferenceFlags || {}); +var Ternary = /* @__PURE__ */ ((Ternary2) => { + Ternary2[Ternary2["False"] = 0] = "False"; + Ternary2[Ternary2["Unknown"] = 1] = "Unknown"; + Ternary2[Ternary2["Maybe"] = 3] = "Maybe"; + Ternary2[Ternary2["True"] = -1] = "True"; + return Ternary2; +})(Ternary || {}); +var AssignmentDeclarationKind = /* @__PURE__ */ ((AssignmentDeclarationKind2) => { + AssignmentDeclarationKind2[AssignmentDeclarationKind2["None"] = 0] = "None"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["ExportsProperty"] = 1] = "ExportsProperty"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["ModuleExports"] = 2] = "ModuleExports"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["PrototypeProperty"] = 3] = "PrototypeProperty"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["ThisProperty"] = 4] = "ThisProperty"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["Property"] = 5] = "Property"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["Prototype"] = 6] = "Prototype"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["ObjectDefinePropertyValue"] = 7] = "ObjectDefinePropertyValue"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["ObjectDefinePropertyExports"] = 8] = "ObjectDefinePropertyExports"; + AssignmentDeclarationKind2[AssignmentDeclarationKind2["ObjectDefinePrototypeProperty"] = 9] = "ObjectDefinePrototypeProperty"; + return AssignmentDeclarationKind2; +})(AssignmentDeclarationKind || {}); +var DiagnosticCategory = /* @__PURE__ */ ((DiagnosticCategory2) => { + DiagnosticCategory2[DiagnosticCategory2["Warning"] = 0] = "Warning"; + DiagnosticCategory2[DiagnosticCategory2["Error"] = 1] = "Error"; + DiagnosticCategory2[DiagnosticCategory2["Suggestion"] = 2] = "Suggestion"; + DiagnosticCategory2[DiagnosticCategory2["Message"] = 3] = "Message"; + return DiagnosticCategory2; +})(DiagnosticCategory || {}); +function diagnosticCategoryName(d, lowerCase = true) { + const name = DiagnosticCategory[d.category]; + return lowerCase ? name.toLowerCase() : name; +} +var ModuleResolutionKind = /* @__PURE__ */ ((ModuleResolutionKind3) => { + ModuleResolutionKind3[ModuleResolutionKind3["Classic"] = 1] = "Classic"; + ModuleResolutionKind3[ModuleResolutionKind3["NodeJs"] = 2] = "NodeJs"; + ModuleResolutionKind3[ModuleResolutionKind3["Node10"] = 2] = "Node10"; + ModuleResolutionKind3[ModuleResolutionKind3["Node16"] = 3] = "Node16"; + ModuleResolutionKind3[ModuleResolutionKind3["NodeNext"] = 99] = "NodeNext"; + ModuleResolutionKind3[ModuleResolutionKind3["Bundler"] = 100] = "Bundler"; + return ModuleResolutionKind3; +})(ModuleResolutionKind || {}); +var ModuleDetectionKind = /* @__PURE__ */ ((ModuleDetectionKind2) => { + ModuleDetectionKind2[ModuleDetectionKind2["Legacy"] = 1] = "Legacy"; + ModuleDetectionKind2[ModuleDetectionKind2["Auto"] = 2] = "Auto"; + ModuleDetectionKind2[ModuleDetectionKind2["Force"] = 3] = "Force"; + return ModuleDetectionKind2; +})(ModuleDetectionKind || {}); +var WatchFileKind = /* @__PURE__ */ ((WatchFileKind3) => { + WatchFileKind3[WatchFileKind3["FixedPollingInterval"] = 0] = "FixedPollingInterval"; + WatchFileKind3[WatchFileKind3["PriorityPollingInterval"] = 1] = "PriorityPollingInterval"; + WatchFileKind3[WatchFileKind3["DynamicPriorityPolling"] = 2] = "DynamicPriorityPolling"; + WatchFileKind3[WatchFileKind3["FixedChunkSizePolling"] = 3] = "FixedChunkSizePolling"; + WatchFileKind3[WatchFileKind3["UseFsEvents"] = 4] = "UseFsEvents"; + WatchFileKind3[WatchFileKind3["UseFsEventsOnParentDirectory"] = 5] = "UseFsEventsOnParentDirectory"; + return WatchFileKind3; +})(WatchFileKind || {}); +var WatchDirectoryKind = /* @__PURE__ */ ((WatchDirectoryKind3) => { + WatchDirectoryKind3[WatchDirectoryKind3["UseFsEvents"] = 0] = "UseFsEvents"; + WatchDirectoryKind3[WatchDirectoryKind3["FixedPollingInterval"] = 1] = "FixedPollingInterval"; + WatchDirectoryKind3[WatchDirectoryKind3["DynamicPriorityPolling"] = 2] = "DynamicPriorityPolling"; + WatchDirectoryKind3[WatchDirectoryKind3["FixedChunkSizePolling"] = 3] = "FixedChunkSizePolling"; + return WatchDirectoryKind3; +})(WatchDirectoryKind || {}); +var PollingWatchKind = /* @__PURE__ */ ((PollingWatchKind3) => { + PollingWatchKind3[PollingWatchKind3["FixedInterval"] = 0] = "FixedInterval"; + PollingWatchKind3[PollingWatchKind3["PriorityInterval"] = 1] = "PriorityInterval"; + PollingWatchKind3[PollingWatchKind3["DynamicPriority"] = 2] = "DynamicPriority"; + PollingWatchKind3[PollingWatchKind3["FixedChunkSize"] = 3] = "FixedChunkSize"; + return PollingWatchKind3; +})(PollingWatchKind || {}); +var ModuleKind = /* @__PURE__ */ ((ModuleKind3) => { + ModuleKind3[ModuleKind3["None"] = 0] = "None"; + ModuleKind3[ModuleKind3["CommonJS"] = 1] = "CommonJS"; + ModuleKind3[ModuleKind3["AMD"] = 2] = "AMD"; + ModuleKind3[ModuleKind3["UMD"] = 3] = "UMD"; + ModuleKind3[ModuleKind3["System"] = 4] = "System"; + ModuleKind3[ModuleKind3["ES2015"] = 5] = "ES2015"; + ModuleKind3[ModuleKind3["ES2020"] = 6] = "ES2020"; + ModuleKind3[ModuleKind3["ES2022"] = 7] = "ES2022"; + ModuleKind3[ModuleKind3["ESNext"] = 99] = "ESNext"; + ModuleKind3[ModuleKind3["Node16"] = 100] = "Node16"; + ModuleKind3[ModuleKind3["Node18"] = 101] = "Node18"; + ModuleKind3[ModuleKind3["Node20"] = 102] = "Node20"; + ModuleKind3[ModuleKind3["NodeNext"] = 199] = "NodeNext"; + ModuleKind3[ModuleKind3["Preserve"] = 200] = "Preserve"; + return ModuleKind3; +})(ModuleKind || {}); +var JsxEmit = /* @__PURE__ */ ((JsxEmit3) => { + JsxEmit3[JsxEmit3["None"] = 0] = "None"; + JsxEmit3[JsxEmit3["Preserve"] = 1] = "Preserve"; + JsxEmit3[JsxEmit3["React"] = 2] = "React"; + JsxEmit3[JsxEmit3["ReactNative"] = 3] = "ReactNative"; + JsxEmit3[JsxEmit3["ReactJSX"] = 4] = "ReactJSX"; + JsxEmit3[JsxEmit3["ReactJSXDev"] = 5] = "ReactJSXDev"; + return JsxEmit3; +})(JsxEmit || {}); +var ImportsNotUsedAsValues = /* @__PURE__ */ ((ImportsNotUsedAsValues2) => { + ImportsNotUsedAsValues2[ImportsNotUsedAsValues2["Remove"] = 0] = "Remove"; + ImportsNotUsedAsValues2[ImportsNotUsedAsValues2["Preserve"] = 1] = "Preserve"; + ImportsNotUsedAsValues2[ImportsNotUsedAsValues2["Error"] = 2] = "Error"; + return ImportsNotUsedAsValues2; +})(ImportsNotUsedAsValues || {}); +var NewLineKind = /* @__PURE__ */ ((NewLineKind3) => { + NewLineKind3[NewLineKind3["CarriageReturnLineFeed"] = 0] = "CarriageReturnLineFeed"; + NewLineKind3[NewLineKind3["LineFeed"] = 1] = "LineFeed"; + return NewLineKind3; +})(NewLineKind || {}); +var ScriptKind = /* @__PURE__ */ ((ScriptKind7) => { + ScriptKind7[ScriptKind7["Unknown"] = 0] = "Unknown"; + ScriptKind7[ScriptKind7["JS"] = 1] = "JS"; + ScriptKind7[ScriptKind7["JSX"] = 2] = "JSX"; + ScriptKind7[ScriptKind7["TS"] = 3] = "TS"; + ScriptKind7[ScriptKind7["TSX"] = 4] = "TSX"; + ScriptKind7[ScriptKind7["External"] = 5] = "External"; + ScriptKind7[ScriptKind7["JSON"] = 6] = "JSON"; + ScriptKind7[ScriptKind7["Deferred"] = 7] = "Deferred"; + return ScriptKind7; +})(ScriptKind || {}); +var ScriptTarget = /* @__PURE__ */ ((ScriptTarget12) => { + ScriptTarget12[ScriptTarget12["ES3"] = 0] = "ES3"; + ScriptTarget12[ScriptTarget12["ES5"] = 1] = "ES5"; + ScriptTarget12[ScriptTarget12["ES2015"] = 2] = "ES2015"; + ScriptTarget12[ScriptTarget12["ES2016"] = 3] = "ES2016"; + ScriptTarget12[ScriptTarget12["ES2017"] = 4] = "ES2017"; + ScriptTarget12[ScriptTarget12["ES2018"] = 5] = "ES2018"; + ScriptTarget12[ScriptTarget12["ES2019"] = 6] = "ES2019"; + ScriptTarget12[ScriptTarget12["ES2020"] = 7] = "ES2020"; + ScriptTarget12[ScriptTarget12["ES2021"] = 8] = "ES2021"; + ScriptTarget12[ScriptTarget12["ES2022"] = 9] = "ES2022"; + ScriptTarget12[ScriptTarget12["ES2023"] = 10] = "ES2023"; + ScriptTarget12[ScriptTarget12["ES2024"] = 11] = "ES2024"; + ScriptTarget12[ScriptTarget12["ESNext"] = 99] = "ESNext"; + ScriptTarget12[ScriptTarget12["JSON"] = 100] = "JSON"; + ScriptTarget12[ScriptTarget12["Latest"] = 99 /* ESNext */] = "Latest"; + return ScriptTarget12; +})(ScriptTarget || {}); +var LanguageVariant = /* @__PURE__ */ ((LanguageVariant4) => { + LanguageVariant4[LanguageVariant4["Standard"] = 0] = "Standard"; + LanguageVariant4[LanguageVariant4["JSX"] = 1] = "JSX"; + return LanguageVariant4; +})(LanguageVariant || {}); +var WatchDirectoryFlags = /* @__PURE__ */ ((WatchDirectoryFlags3) => { + WatchDirectoryFlags3[WatchDirectoryFlags3["None"] = 0] = "None"; + WatchDirectoryFlags3[WatchDirectoryFlags3["Recursive"] = 1] = "Recursive"; + return WatchDirectoryFlags3; +})(WatchDirectoryFlags || {}); +var CharacterCodes = /* @__PURE__ */ ((CharacterCodes2) => { + CharacterCodes2[CharacterCodes2["EOF"] = -1] = "EOF"; + CharacterCodes2[CharacterCodes2["nullCharacter"] = 0] = "nullCharacter"; + CharacterCodes2[CharacterCodes2["maxAsciiCharacter"] = 127] = "maxAsciiCharacter"; + CharacterCodes2[CharacterCodes2["lineFeed"] = 10] = "lineFeed"; + CharacterCodes2[CharacterCodes2["carriageReturn"] = 13] = "carriageReturn"; + CharacterCodes2[CharacterCodes2["lineSeparator"] = 8232] = "lineSeparator"; + CharacterCodes2[CharacterCodes2["paragraphSeparator"] = 8233] = "paragraphSeparator"; + CharacterCodes2[CharacterCodes2["nextLine"] = 133] = "nextLine"; + CharacterCodes2[CharacterCodes2["space"] = 32] = "space"; + CharacterCodes2[CharacterCodes2["nonBreakingSpace"] = 160] = "nonBreakingSpace"; + CharacterCodes2[CharacterCodes2["enQuad"] = 8192] = "enQuad"; + CharacterCodes2[CharacterCodes2["emQuad"] = 8193] = "emQuad"; + CharacterCodes2[CharacterCodes2["enSpace"] = 8194] = "enSpace"; + CharacterCodes2[CharacterCodes2["emSpace"] = 8195] = "emSpace"; + CharacterCodes2[CharacterCodes2["threePerEmSpace"] = 8196] = "threePerEmSpace"; + CharacterCodes2[CharacterCodes2["fourPerEmSpace"] = 8197] = "fourPerEmSpace"; + CharacterCodes2[CharacterCodes2["sixPerEmSpace"] = 8198] = "sixPerEmSpace"; + CharacterCodes2[CharacterCodes2["figureSpace"] = 8199] = "figureSpace"; + CharacterCodes2[CharacterCodes2["punctuationSpace"] = 8200] = "punctuationSpace"; + CharacterCodes2[CharacterCodes2["thinSpace"] = 8201] = "thinSpace"; + CharacterCodes2[CharacterCodes2["hairSpace"] = 8202] = "hairSpace"; + CharacterCodes2[CharacterCodes2["zeroWidthSpace"] = 8203] = "zeroWidthSpace"; + CharacterCodes2[CharacterCodes2["narrowNoBreakSpace"] = 8239] = "narrowNoBreakSpace"; + CharacterCodes2[CharacterCodes2["ideographicSpace"] = 12288] = "ideographicSpace"; + CharacterCodes2[CharacterCodes2["mathematicalSpace"] = 8287] = "mathematicalSpace"; + CharacterCodes2[CharacterCodes2["ogham"] = 5760] = "ogham"; + CharacterCodes2[CharacterCodes2["replacementCharacter"] = 65533] = "replacementCharacter"; + CharacterCodes2[CharacterCodes2["_"] = 95] = "_"; + CharacterCodes2[CharacterCodes2["$"] = 36] = "$"; + CharacterCodes2[CharacterCodes2["_0"] = 48] = "_0"; + CharacterCodes2[CharacterCodes2["_1"] = 49] = "_1"; + CharacterCodes2[CharacterCodes2["_2"] = 50] = "_2"; + CharacterCodes2[CharacterCodes2["_3"] = 51] = "_3"; + CharacterCodes2[CharacterCodes2["_4"] = 52] = "_4"; + CharacterCodes2[CharacterCodes2["_5"] = 53] = "_5"; + CharacterCodes2[CharacterCodes2["_6"] = 54] = "_6"; + CharacterCodes2[CharacterCodes2["_7"] = 55] = "_7"; + CharacterCodes2[CharacterCodes2["_8"] = 56] = "_8"; + CharacterCodes2[CharacterCodes2["_9"] = 57] = "_9"; + CharacterCodes2[CharacterCodes2["a"] = 97] = "a"; + CharacterCodes2[CharacterCodes2["b"] = 98] = "b"; + CharacterCodes2[CharacterCodes2["c"] = 99] = "c"; + CharacterCodes2[CharacterCodes2["d"] = 100] = "d"; + CharacterCodes2[CharacterCodes2["e"] = 101] = "e"; + CharacterCodes2[CharacterCodes2["f"] = 102] = "f"; + CharacterCodes2[CharacterCodes2["g"] = 103] = "g"; + CharacterCodes2[CharacterCodes2["h"] = 104] = "h"; + CharacterCodes2[CharacterCodes2["i"] = 105] = "i"; + CharacterCodes2[CharacterCodes2["j"] = 106] = "j"; + CharacterCodes2[CharacterCodes2["k"] = 107] = "k"; + CharacterCodes2[CharacterCodes2["l"] = 108] = "l"; + CharacterCodes2[CharacterCodes2["m"] = 109] = "m"; + CharacterCodes2[CharacterCodes2["n"] = 110] = "n"; + CharacterCodes2[CharacterCodes2["o"] = 111] = "o"; + CharacterCodes2[CharacterCodes2["p"] = 112] = "p"; + CharacterCodes2[CharacterCodes2["q"] = 113] = "q"; + CharacterCodes2[CharacterCodes2["r"] = 114] = "r"; + CharacterCodes2[CharacterCodes2["s"] = 115] = "s"; + CharacterCodes2[CharacterCodes2["t"] = 116] = "t"; + CharacterCodes2[CharacterCodes2["u"] = 117] = "u"; + CharacterCodes2[CharacterCodes2["v"] = 118] = "v"; + CharacterCodes2[CharacterCodes2["w"] = 119] = "w"; + CharacterCodes2[CharacterCodes2["x"] = 120] = "x"; + CharacterCodes2[CharacterCodes2["y"] = 121] = "y"; + CharacterCodes2[CharacterCodes2["z"] = 122] = "z"; + CharacterCodes2[CharacterCodes2["A"] = 65] = "A"; + CharacterCodes2[CharacterCodes2["B"] = 66] = "B"; + CharacterCodes2[CharacterCodes2["C"] = 67] = "C"; + CharacterCodes2[CharacterCodes2["D"] = 68] = "D"; + CharacterCodes2[CharacterCodes2["E"] = 69] = "E"; + CharacterCodes2[CharacterCodes2["F"] = 70] = "F"; + CharacterCodes2[CharacterCodes2["G"] = 71] = "G"; + CharacterCodes2[CharacterCodes2["H"] = 72] = "H"; + CharacterCodes2[CharacterCodes2["I"] = 73] = "I"; + CharacterCodes2[CharacterCodes2["J"] = 74] = "J"; + CharacterCodes2[CharacterCodes2["K"] = 75] = "K"; + CharacterCodes2[CharacterCodes2["L"] = 76] = "L"; + CharacterCodes2[CharacterCodes2["M"] = 77] = "M"; + CharacterCodes2[CharacterCodes2["N"] = 78] = "N"; + CharacterCodes2[CharacterCodes2["O"] = 79] = "O"; + CharacterCodes2[CharacterCodes2["P"] = 80] = "P"; + CharacterCodes2[CharacterCodes2["Q"] = 81] = "Q"; + CharacterCodes2[CharacterCodes2["R"] = 82] = "R"; + CharacterCodes2[CharacterCodes2["S"] = 83] = "S"; + CharacterCodes2[CharacterCodes2["T"] = 84] = "T"; + CharacterCodes2[CharacterCodes2["U"] = 85] = "U"; + CharacterCodes2[CharacterCodes2["V"] = 86] = "V"; + CharacterCodes2[CharacterCodes2["W"] = 87] = "W"; + CharacterCodes2[CharacterCodes2["X"] = 88] = "X"; + CharacterCodes2[CharacterCodes2["Y"] = 89] = "Y"; + CharacterCodes2[CharacterCodes2["Z"] = 90] = "Z"; + CharacterCodes2[CharacterCodes2["ampersand"] = 38] = "ampersand"; + CharacterCodes2[CharacterCodes2["asterisk"] = 42] = "asterisk"; + CharacterCodes2[CharacterCodes2["at"] = 64] = "at"; + CharacterCodes2[CharacterCodes2["backslash"] = 92] = "backslash"; + CharacterCodes2[CharacterCodes2["backtick"] = 96] = "backtick"; + CharacterCodes2[CharacterCodes2["bar"] = 124] = "bar"; + CharacterCodes2[CharacterCodes2["caret"] = 94] = "caret"; + CharacterCodes2[CharacterCodes2["closeBrace"] = 125] = "closeBrace"; + CharacterCodes2[CharacterCodes2["closeBracket"] = 93] = "closeBracket"; + CharacterCodes2[CharacterCodes2["closeParen"] = 41] = "closeParen"; + CharacterCodes2[CharacterCodes2["colon"] = 58] = "colon"; + CharacterCodes2[CharacterCodes2["comma"] = 44] = "comma"; + CharacterCodes2[CharacterCodes2["dot"] = 46] = "dot"; + CharacterCodes2[CharacterCodes2["doubleQuote"] = 34] = "doubleQuote"; + CharacterCodes2[CharacterCodes2["equals"] = 61] = "equals"; + CharacterCodes2[CharacterCodes2["exclamation"] = 33] = "exclamation"; + CharacterCodes2[CharacterCodes2["greaterThan"] = 62] = "greaterThan"; + CharacterCodes2[CharacterCodes2["hash"] = 35] = "hash"; + CharacterCodes2[CharacterCodes2["lessThan"] = 60] = "lessThan"; + CharacterCodes2[CharacterCodes2["minus"] = 45] = "minus"; + CharacterCodes2[CharacterCodes2["openBrace"] = 123] = "openBrace"; + CharacterCodes2[CharacterCodes2["openBracket"] = 91] = "openBracket"; + CharacterCodes2[CharacterCodes2["openParen"] = 40] = "openParen"; + CharacterCodes2[CharacterCodes2["percent"] = 37] = "percent"; + CharacterCodes2[CharacterCodes2["plus"] = 43] = "plus"; + CharacterCodes2[CharacterCodes2["question"] = 63] = "question"; + CharacterCodes2[CharacterCodes2["semicolon"] = 59] = "semicolon"; + CharacterCodes2[CharacterCodes2["singleQuote"] = 39] = "singleQuote"; + CharacterCodes2[CharacterCodes2["slash"] = 47] = "slash"; + CharacterCodes2[CharacterCodes2["tilde"] = 126] = "tilde"; + CharacterCodes2[CharacterCodes2["backspace"] = 8] = "backspace"; + CharacterCodes2[CharacterCodes2["formFeed"] = 12] = "formFeed"; + CharacterCodes2[CharacterCodes2["byteOrderMark"] = 65279] = "byteOrderMark"; + CharacterCodes2[CharacterCodes2["tab"] = 9] = "tab"; + CharacterCodes2[CharacterCodes2["verticalTab"] = 11] = "verticalTab"; + return CharacterCodes2; +})(CharacterCodes || {}); +var Extension = /* @__PURE__ */ ((Extension2) => { + Extension2["Ts"] = ".ts"; + Extension2["Tsx"] = ".tsx"; + Extension2["Dts"] = ".d.ts"; + Extension2["Js"] = ".js"; + Extension2["Jsx"] = ".jsx"; + Extension2["Json"] = ".json"; + Extension2["TsBuildInfo"] = ".tsbuildinfo"; + Extension2["Mjs"] = ".mjs"; + Extension2["Mts"] = ".mts"; + Extension2["Dmts"] = ".d.mts"; + Extension2["Cjs"] = ".cjs"; + Extension2["Cts"] = ".cts"; + Extension2["Dcts"] = ".d.cts"; + return Extension2; +})(Extension || {}); +var TransformFlags = /* @__PURE__ */ ((TransformFlags3) => { + TransformFlags3[TransformFlags3["None"] = 0] = "None"; + TransformFlags3[TransformFlags3["ContainsTypeScript"] = 1] = "ContainsTypeScript"; + TransformFlags3[TransformFlags3["ContainsJsx"] = 2] = "ContainsJsx"; + TransformFlags3[TransformFlags3["ContainsESNext"] = 4] = "ContainsESNext"; + TransformFlags3[TransformFlags3["ContainsES2022"] = 8] = "ContainsES2022"; + TransformFlags3[TransformFlags3["ContainsES2021"] = 16] = "ContainsES2021"; + TransformFlags3[TransformFlags3["ContainsES2020"] = 32] = "ContainsES2020"; + TransformFlags3[TransformFlags3["ContainsES2019"] = 64] = "ContainsES2019"; + TransformFlags3[TransformFlags3["ContainsES2018"] = 128] = "ContainsES2018"; + TransformFlags3[TransformFlags3["ContainsES2017"] = 256] = "ContainsES2017"; + TransformFlags3[TransformFlags3["ContainsES2016"] = 512] = "ContainsES2016"; + TransformFlags3[TransformFlags3["ContainsES2015"] = 1024] = "ContainsES2015"; + TransformFlags3[TransformFlags3["ContainsGenerator"] = 2048] = "ContainsGenerator"; + TransformFlags3[TransformFlags3["ContainsDestructuringAssignment"] = 4096] = "ContainsDestructuringAssignment"; + TransformFlags3[TransformFlags3["ContainsTypeScriptClassSyntax"] = 8192] = "ContainsTypeScriptClassSyntax"; + TransformFlags3[TransformFlags3["ContainsLexicalThis"] = 16384] = "ContainsLexicalThis"; + TransformFlags3[TransformFlags3["ContainsRestOrSpread"] = 32768] = "ContainsRestOrSpread"; + TransformFlags3[TransformFlags3["ContainsObjectRestOrSpread"] = 65536] = "ContainsObjectRestOrSpread"; + TransformFlags3[TransformFlags3["ContainsComputedPropertyName"] = 131072] = "ContainsComputedPropertyName"; + TransformFlags3[TransformFlags3["ContainsBlockScopedBinding"] = 262144] = "ContainsBlockScopedBinding"; + TransformFlags3[TransformFlags3["ContainsBindingPattern"] = 524288] = "ContainsBindingPattern"; + TransformFlags3[TransformFlags3["ContainsYield"] = 1048576] = "ContainsYield"; + TransformFlags3[TransformFlags3["ContainsAwait"] = 2097152] = "ContainsAwait"; + TransformFlags3[TransformFlags3["ContainsHoistedDeclarationOrCompletion"] = 4194304] = "ContainsHoistedDeclarationOrCompletion"; + TransformFlags3[TransformFlags3["ContainsDynamicImport"] = 8388608] = "ContainsDynamicImport"; + TransformFlags3[TransformFlags3["ContainsClassFields"] = 16777216] = "ContainsClassFields"; + TransformFlags3[TransformFlags3["ContainsDecorators"] = 33554432] = "ContainsDecorators"; + TransformFlags3[TransformFlags3["ContainsPossibleTopLevelAwait"] = 67108864] = "ContainsPossibleTopLevelAwait"; + TransformFlags3[TransformFlags3["ContainsLexicalSuper"] = 134217728] = "ContainsLexicalSuper"; + TransformFlags3[TransformFlags3["ContainsUpdateExpressionForIdentifier"] = 268435456] = "ContainsUpdateExpressionForIdentifier"; + TransformFlags3[TransformFlags3["ContainsPrivateIdentifierInExpression"] = 536870912] = "ContainsPrivateIdentifierInExpression"; + TransformFlags3[TransformFlags3["HasComputedFlags"] = -2147483648] = "HasComputedFlags"; + TransformFlags3[TransformFlags3["AssertTypeScript"] = 1 /* ContainsTypeScript */] = "AssertTypeScript"; + TransformFlags3[TransformFlags3["AssertJsx"] = 2 /* ContainsJsx */] = "AssertJsx"; + TransformFlags3[TransformFlags3["AssertESNext"] = 4 /* ContainsESNext */] = "AssertESNext"; + TransformFlags3[TransformFlags3["AssertES2022"] = 8 /* ContainsES2022 */] = "AssertES2022"; + TransformFlags3[TransformFlags3["AssertES2021"] = 16 /* ContainsES2021 */] = "AssertES2021"; + TransformFlags3[TransformFlags3["AssertES2020"] = 32 /* ContainsES2020 */] = "AssertES2020"; + TransformFlags3[TransformFlags3["AssertES2019"] = 64 /* ContainsES2019 */] = "AssertES2019"; + TransformFlags3[TransformFlags3["AssertES2018"] = 128 /* ContainsES2018 */] = "AssertES2018"; + TransformFlags3[TransformFlags3["AssertES2017"] = 256 /* ContainsES2017 */] = "AssertES2017"; + TransformFlags3[TransformFlags3["AssertES2016"] = 512 /* ContainsES2016 */] = "AssertES2016"; + TransformFlags3[TransformFlags3["AssertES2015"] = 1024 /* ContainsES2015 */] = "AssertES2015"; + TransformFlags3[TransformFlags3["AssertGenerator"] = 2048 /* ContainsGenerator */] = "AssertGenerator"; + TransformFlags3[TransformFlags3["AssertDestructuringAssignment"] = 4096 /* ContainsDestructuringAssignment */] = "AssertDestructuringAssignment"; + TransformFlags3[TransformFlags3["OuterExpressionExcludes"] = -2147483648 /* HasComputedFlags */] = "OuterExpressionExcludes"; + TransformFlags3[TransformFlags3["PropertyAccessExcludes"] = -2147483648 /* OuterExpressionExcludes */] = "PropertyAccessExcludes"; + TransformFlags3[TransformFlags3["NodeExcludes"] = -2147483648 /* PropertyAccessExcludes */] = "NodeExcludes"; + TransformFlags3[TransformFlags3["ArrowFunctionExcludes"] = -2072174592] = "ArrowFunctionExcludes"; + TransformFlags3[TransformFlags3["FunctionExcludes"] = -1937940480] = "FunctionExcludes"; + TransformFlags3[TransformFlags3["ConstructorExcludes"] = -1937948672] = "ConstructorExcludes"; + TransformFlags3[TransformFlags3["MethodOrAccessorExcludes"] = -2005057536] = "MethodOrAccessorExcludes"; + TransformFlags3[TransformFlags3["PropertyExcludes"] = -2013249536] = "PropertyExcludes"; + TransformFlags3[TransformFlags3["ClassExcludes"] = -2147344384] = "ClassExcludes"; + TransformFlags3[TransformFlags3["ModuleExcludes"] = -1941676032] = "ModuleExcludes"; + TransformFlags3[TransformFlags3["TypeExcludes"] = -2] = "TypeExcludes"; + TransformFlags3[TransformFlags3["ObjectLiteralExcludes"] = -2147278848] = "ObjectLiteralExcludes"; + TransformFlags3[TransformFlags3["ArrayLiteralOrCallOrNewExcludes"] = -2147450880] = "ArrayLiteralOrCallOrNewExcludes"; + TransformFlags3[TransformFlags3["VariableDeclarationListExcludes"] = -2146893824] = "VariableDeclarationListExcludes"; + TransformFlags3[TransformFlags3["ParameterExcludes"] = -2147483648 /* NodeExcludes */] = "ParameterExcludes"; + TransformFlags3[TransformFlags3["CatchClauseExcludes"] = -2147418112] = "CatchClauseExcludes"; + TransformFlags3[TransformFlags3["BindingPatternExcludes"] = -2147450880] = "BindingPatternExcludes"; + TransformFlags3[TransformFlags3["ContainsLexicalThisOrSuper"] = 134234112] = "ContainsLexicalThisOrSuper"; + TransformFlags3[TransformFlags3["PropertyNamePropagatingFlags"] = 134234112] = "PropertyNamePropagatingFlags"; + return TransformFlags3; +})(TransformFlags || {}); +var SnippetKind = /* @__PURE__ */ ((SnippetKind3) => { + SnippetKind3[SnippetKind3["TabStop"] = 0] = "TabStop"; + SnippetKind3[SnippetKind3["Placeholder"] = 1] = "Placeholder"; + SnippetKind3[SnippetKind3["Choice"] = 2] = "Choice"; + SnippetKind3[SnippetKind3["Variable"] = 3] = "Variable"; + return SnippetKind3; +})(SnippetKind || {}); +var EmitFlags = /* @__PURE__ */ ((EmitFlags3) => { + EmitFlags3[EmitFlags3["None"] = 0] = "None"; + EmitFlags3[EmitFlags3["SingleLine"] = 1] = "SingleLine"; + EmitFlags3[EmitFlags3["MultiLine"] = 2] = "MultiLine"; + EmitFlags3[EmitFlags3["AdviseOnEmitNode"] = 4] = "AdviseOnEmitNode"; + EmitFlags3[EmitFlags3["NoSubstitution"] = 8] = "NoSubstitution"; + EmitFlags3[EmitFlags3["CapturesThis"] = 16] = "CapturesThis"; + EmitFlags3[EmitFlags3["NoLeadingSourceMap"] = 32] = "NoLeadingSourceMap"; + EmitFlags3[EmitFlags3["NoTrailingSourceMap"] = 64] = "NoTrailingSourceMap"; + EmitFlags3[EmitFlags3["NoSourceMap"] = 96] = "NoSourceMap"; + EmitFlags3[EmitFlags3["NoNestedSourceMaps"] = 128] = "NoNestedSourceMaps"; + EmitFlags3[EmitFlags3["NoTokenLeadingSourceMaps"] = 256] = "NoTokenLeadingSourceMaps"; + EmitFlags3[EmitFlags3["NoTokenTrailingSourceMaps"] = 512] = "NoTokenTrailingSourceMaps"; + EmitFlags3[EmitFlags3["NoTokenSourceMaps"] = 768] = "NoTokenSourceMaps"; + EmitFlags3[EmitFlags3["NoLeadingComments"] = 1024] = "NoLeadingComments"; + EmitFlags3[EmitFlags3["NoTrailingComments"] = 2048] = "NoTrailingComments"; + EmitFlags3[EmitFlags3["NoComments"] = 3072] = "NoComments"; + EmitFlags3[EmitFlags3["NoNestedComments"] = 4096] = "NoNestedComments"; + EmitFlags3[EmitFlags3["HelperName"] = 8192] = "HelperName"; + EmitFlags3[EmitFlags3["ExportName"] = 16384] = "ExportName"; + EmitFlags3[EmitFlags3["LocalName"] = 32768] = "LocalName"; + EmitFlags3[EmitFlags3["InternalName"] = 65536] = "InternalName"; + EmitFlags3[EmitFlags3["Indented"] = 131072] = "Indented"; + EmitFlags3[EmitFlags3["NoIndentation"] = 262144] = "NoIndentation"; + EmitFlags3[EmitFlags3["AsyncFunctionBody"] = 524288] = "AsyncFunctionBody"; + EmitFlags3[EmitFlags3["ReuseTempVariableScope"] = 1048576] = "ReuseTempVariableScope"; + EmitFlags3[EmitFlags3["CustomPrologue"] = 2097152] = "CustomPrologue"; + EmitFlags3[EmitFlags3["NoHoisting"] = 4194304] = "NoHoisting"; + EmitFlags3[EmitFlags3["Iterator"] = 8388608] = "Iterator"; + EmitFlags3[EmitFlags3["NoAsciiEscaping"] = 16777216] = "NoAsciiEscaping"; + return EmitFlags3; +})(EmitFlags || {}); +var InternalEmitFlags = /* @__PURE__ */ ((InternalEmitFlags3) => { + InternalEmitFlags3[InternalEmitFlags3["None"] = 0] = "None"; + InternalEmitFlags3[InternalEmitFlags3["TypeScriptClassWrapper"] = 1] = "TypeScriptClassWrapper"; + InternalEmitFlags3[InternalEmitFlags3["NeverApplyImportHelper"] = 2] = "NeverApplyImportHelper"; + InternalEmitFlags3[InternalEmitFlags3["IgnoreSourceNewlines"] = 4] = "IgnoreSourceNewlines"; + InternalEmitFlags3[InternalEmitFlags3["Immutable"] = 8] = "Immutable"; + InternalEmitFlags3[InternalEmitFlags3["IndirectCall"] = 16] = "IndirectCall"; + InternalEmitFlags3[InternalEmitFlags3["TransformPrivateStaticElements"] = 32] = "TransformPrivateStaticElements"; + return InternalEmitFlags3; +})(InternalEmitFlags || {}); +var LanguageFeatureMinimumTarget = { + Classes: 2 /* ES2015 */, + ForOf: 2 /* ES2015 */, + Generators: 2 /* ES2015 */, + Iteration: 2 /* ES2015 */, + SpreadElements: 2 /* ES2015 */, + RestElements: 2 /* ES2015 */, + TaggedTemplates: 2 /* ES2015 */, + DestructuringAssignment: 2 /* ES2015 */, + BindingPatterns: 2 /* ES2015 */, + ArrowFunctions: 2 /* ES2015 */, + BlockScopedVariables: 2 /* ES2015 */, + ObjectAssign: 2 /* ES2015 */, + RegularExpressionFlagsUnicode: 2 /* ES2015 */, + RegularExpressionFlagsSticky: 2 /* ES2015 */, + Exponentiation: 3 /* ES2016 */, + AsyncFunctions: 4 /* ES2017 */, + ForAwaitOf: 5 /* ES2018 */, + AsyncGenerators: 5 /* ES2018 */, + AsyncIteration: 5 /* ES2018 */, + ObjectSpreadRest: 5 /* ES2018 */, + RegularExpressionFlagsDotAll: 5 /* ES2018 */, + BindinglessCatch: 6 /* ES2019 */, + BigInt: 7 /* ES2020 */, + NullishCoalesce: 7 /* ES2020 */, + OptionalChaining: 7 /* ES2020 */, + LogicalAssignment: 8 /* ES2021 */, + TopLevelAwait: 9 /* ES2022 */, + ClassFields: 9 /* ES2022 */, + PrivateNamesAndClassStaticBlocks: 9 /* ES2022 */, + RegularExpressionFlagsHasIndices: 9 /* ES2022 */, + ShebangComments: 10 /* ES2023 */, + RegularExpressionFlagsUnicodeSets: 11 /* ES2024 */, + UsingAndAwaitUsing: 99 /* ESNext */, + ClassAndClassElementDecorators: 99 /* ESNext */ +}; +var ExternalEmitHelpers = /* @__PURE__ */ ((ExternalEmitHelpers2) => { + ExternalEmitHelpers2[ExternalEmitHelpers2["Extends"] = 1] = "Extends"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Assign"] = 2] = "Assign"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Rest"] = 4] = "Rest"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Decorate"] = 8] = "Decorate"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ESDecorateAndRunInitializers"] = 8 /* Decorate */] = "ESDecorateAndRunInitializers"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Metadata"] = 16] = "Metadata"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Param"] = 32] = "Param"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Awaiter"] = 64] = "Awaiter"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Generator"] = 128] = "Generator"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Values"] = 256] = "Values"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Read"] = 512] = "Read"; + ExternalEmitHelpers2[ExternalEmitHelpers2["SpreadArray"] = 1024] = "SpreadArray"; + ExternalEmitHelpers2[ExternalEmitHelpers2["Await"] = 2048] = "Await"; + ExternalEmitHelpers2[ExternalEmitHelpers2["AsyncGenerator"] = 4096] = "AsyncGenerator"; + ExternalEmitHelpers2[ExternalEmitHelpers2["AsyncDelegator"] = 8192] = "AsyncDelegator"; + ExternalEmitHelpers2[ExternalEmitHelpers2["AsyncValues"] = 16384] = "AsyncValues"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ExportStar"] = 32768] = "ExportStar"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ImportStar"] = 65536] = "ImportStar"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ImportDefault"] = 131072] = "ImportDefault"; + ExternalEmitHelpers2[ExternalEmitHelpers2["MakeTemplateObject"] = 262144] = "MakeTemplateObject"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ClassPrivateFieldGet"] = 524288] = "ClassPrivateFieldGet"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ClassPrivateFieldSet"] = 1048576] = "ClassPrivateFieldSet"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ClassPrivateFieldIn"] = 2097152] = "ClassPrivateFieldIn"; + ExternalEmitHelpers2[ExternalEmitHelpers2["SetFunctionName"] = 4194304] = "SetFunctionName"; + ExternalEmitHelpers2[ExternalEmitHelpers2["PropKey"] = 8388608] = "PropKey"; + ExternalEmitHelpers2[ExternalEmitHelpers2["AddDisposableResourceAndDisposeResources"] = 16777216] = "AddDisposableResourceAndDisposeResources"; + ExternalEmitHelpers2[ExternalEmitHelpers2["RewriteRelativeImportExtension"] = 33554432] = "RewriteRelativeImportExtension"; + ExternalEmitHelpers2[ExternalEmitHelpers2["FirstEmitHelper"] = 1 /* Extends */] = "FirstEmitHelper"; + ExternalEmitHelpers2[ExternalEmitHelpers2["LastEmitHelper"] = 16777216 /* AddDisposableResourceAndDisposeResources */] = "LastEmitHelper"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ForOfIncludes"] = 256 /* Values */] = "ForOfIncludes"; + ExternalEmitHelpers2[ExternalEmitHelpers2["ForAwaitOfIncludes"] = 16384 /* AsyncValues */] = "ForAwaitOfIncludes"; + ExternalEmitHelpers2[ExternalEmitHelpers2["AsyncGeneratorIncludes"] = 6144] = "AsyncGeneratorIncludes"; + ExternalEmitHelpers2[ExternalEmitHelpers2["AsyncDelegatorIncludes"] = 26624] = "AsyncDelegatorIncludes"; + ExternalEmitHelpers2[ExternalEmitHelpers2["SpreadIncludes"] = 1536] = "SpreadIncludes"; + return ExternalEmitHelpers2; +})(ExternalEmitHelpers || {}); +var EmitHint = /* @__PURE__ */ ((EmitHint5) => { + EmitHint5[EmitHint5["SourceFile"] = 0] = "SourceFile"; + EmitHint5[EmitHint5["Expression"] = 1] = "Expression"; + EmitHint5[EmitHint5["IdentifierName"] = 2] = "IdentifierName"; + EmitHint5[EmitHint5["MappedTypeParameter"] = 3] = "MappedTypeParameter"; + EmitHint5[EmitHint5["Unspecified"] = 4] = "Unspecified"; + EmitHint5[EmitHint5["EmbeddedStatement"] = 5] = "EmbeddedStatement"; + EmitHint5[EmitHint5["JsxAttributeValue"] = 6] = "JsxAttributeValue"; + EmitHint5[EmitHint5["ImportTypeNodeAttributes"] = 7] = "ImportTypeNodeAttributes"; + return EmitHint5; +})(EmitHint || {}); +var OuterExpressionKinds = /* @__PURE__ */ ((OuterExpressionKinds2) => { + OuterExpressionKinds2[OuterExpressionKinds2["Parentheses"] = 1] = "Parentheses"; + OuterExpressionKinds2[OuterExpressionKinds2["TypeAssertions"] = 2] = "TypeAssertions"; + OuterExpressionKinds2[OuterExpressionKinds2["NonNullAssertions"] = 4] = "NonNullAssertions"; + OuterExpressionKinds2[OuterExpressionKinds2["PartiallyEmittedExpressions"] = 8] = "PartiallyEmittedExpressions"; + OuterExpressionKinds2[OuterExpressionKinds2["ExpressionsWithTypeArguments"] = 16] = "ExpressionsWithTypeArguments"; + OuterExpressionKinds2[OuterExpressionKinds2["Satisfies"] = 32] = "Satisfies"; + OuterExpressionKinds2[OuterExpressionKinds2["Assertions"] = 38] = "Assertions"; + OuterExpressionKinds2[OuterExpressionKinds2["All"] = 63] = "All"; + OuterExpressionKinds2[OuterExpressionKinds2["ExcludeJSDocTypeAssertion"] = -2147483648] = "ExcludeJSDocTypeAssertion"; + return OuterExpressionKinds2; +})(OuterExpressionKinds || {}); +var LexicalEnvironmentFlags = /* @__PURE__ */ ((LexicalEnvironmentFlags2) => { + LexicalEnvironmentFlags2[LexicalEnvironmentFlags2["None"] = 0] = "None"; + LexicalEnvironmentFlags2[LexicalEnvironmentFlags2["InParameters"] = 1] = "InParameters"; + LexicalEnvironmentFlags2[LexicalEnvironmentFlags2["VariablesHoistedInParameters"] = 2] = "VariablesHoistedInParameters"; + return LexicalEnvironmentFlags2; +})(LexicalEnvironmentFlags || {}); +var ListFormat = /* @__PURE__ */ ((ListFormat2) => { + ListFormat2[ListFormat2["None"] = 0] = "None"; + ListFormat2[ListFormat2["SingleLine"] = 0] = "SingleLine"; + ListFormat2[ListFormat2["MultiLine"] = 1] = "MultiLine"; + ListFormat2[ListFormat2["PreserveLines"] = 2] = "PreserveLines"; + ListFormat2[ListFormat2["LinesMask"] = 3] = "LinesMask"; + ListFormat2[ListFormat2["NotDelimited"] = 0] = "NotDelimited"; + ListFormat2[ListFormat2["BarDelimited"] = 4] = "BarDelimited"; + ListFormat2[ListFormat2["AmpersandDelimited"] = 8] = "AmpersandDelimited"; + ListFormat2[ListFormat2["CommaDelimited"] = 16] = "CommaDelimited"; + ListFormat2[ListFormat2["AsteriskDelimited"] = 32] = "AsteriskDelimited"; + ListFormat2[ListFormat2["DelimitersMask"] = 60] = "DelimitersMask"; + ListFormat2[ListFormat2["AllowTrailingComma"] = 64] = "AllowTrailingComma"; + ListFormat2[ListFormat2["Indented"] = 128] = "Indented"; + ListFormat2[ListFormat2["SpaceBetweenBraces"] = 256] = "SpaceBetweenBraces"; + ListFormat2[ListFormat2["SpaceBetweenSiblings"] = 512] = "SpaceBetweenSiblings"; + ListFormat2[ListFormat2["Braces"] = 1024] = "Braces"; + ListFormat2[ListFormat2["Parenthesis"] = 2048] = "Parenthesis"; + ListFormat2[ListFormat2["AngleBrackets"] = 4096] = "AngleBrackets"; + ListFormat2[ListFormat2["SquareBrackets"] = 8192] = "SquareBrackets"; + ListFormat2[ListFormat2["BracketsMask"] = 15360] = "BracketsMask"; + ListFormat2[ListFormat2["OptionalIfUndefined"] = 16384] = "OptionalIfUndefined"; + ListFormat2[ListFormat2["OptionalIfEmpty"] = 32768] = "OptionalIfEmpty"; + ListFormat2[ListFormat2["Optional"] = 49152] = "Optional"; + ListFormat2[ListFormat2["PreferNewLine"] = 65536] = "PreferNewLine"; + ListFormat2[ListFormat2["NoTrailingNewLine"] = 131072] = "NoTrailingNewLine"; + ListFormat2[ListFormat2["NoInterveningComments"] = 262144] = "NoInterveningComments"; + ListFormat2[ListFormat2["NoSpaceIfEmpty"] = 524288] = "NoSpaceIfEmpty"; + ListFormat2[ListFormat2["SingleElement"] = 1048576] = "SingleElement"; + ListFormat2[ListFormat2["SpaceAfterList"] = 2097152] = "SpaceAfterList"; + ListFormat2[ListFormat2["Modifiers"] = 2359808] = "Modifiers"; + ListFormat2[ListFormat2["HeritageClauses"] = 512] = "HeritageClauses"; + ListFormat2[ListFormat2["SingleLineTypeLiteralMembers"] = 768] = "SingleLineTypeLiteralMembers"; + ListFormat2[ListFormat2["MultiLineTypeLiteralMembers"] = 32897] = "MultiLineTypeLiteralMembers"; + ListFormat2[ListFormat2["SingleLineTupleTypeElements"] = 528] = "SingleLineTupleTypeElements"; + ListFormat2[ListFormat2["MultiLineTupleTypeElements"] = 657] = "MultiLineTupleTypeElements"; + ListFormat2[ListFormat2["UnionTypeConstituents"] = 516] = "UnionTypeConstituents"; + ListFormat2[ListFormat2["IntersectionTypeConstituents"] = 520] = "IntersectionTypeConstituents"; + ListFormat2[ListFormat2["ObjectBindingPatternElements"] = 525136] = "ObjectBindingPatternElements"; + ListFormat2[ListFormat2["ArrayBindingPatternElements"] = 524880] = "ArrayBindingPatternElements"; + ListFormat2[ListFormat2["ObjectLiteralExpressionProperties"] = 526226] = "ObjectLiteralExpressionProperties"; + ListFormat2[ListFormat2["ImportAttributes"] = 526226] = "ImportAttributes"; + ListFormat2[ListFormat2["ImportClauseEntries"] = 526226 /* ImportAttributes */] = "ImportClauseEntries"; + ListFormat2[ListFormat2["ArrayLiteralExpressionElements"] = 8914] = "ArrayLiteralExpressionElements"; + ListFormat2[ListFormat2["CommaListElements"] = 528] = "CommaListElements"; + ListFormat2[ListFormat2["CallExpressionArguments"] = 2576] = "CallExpressionArguments"; + ListFormat2[ListFormat2["NewExpressionArguments"] = 18960] = "NewExpressionArguments"; + ListFormat2[ListFormat2["TemplateExpressionSpans"] = 262144] = "TemplateExpressionSpans"; + ListFormat2[ListFormat2["SingleLineBlockStatements"] = 768] = "SingleLineBlockStatements"; + ListFormat2[ListFormat2["MultiLineBlockStatements"] = 129] = "MultiLineBlockStatements"; + ListFormat2[ListFormat2["VariableDeclarationList"] = 528] = "VariableDeclarationList"; + ListFormat2[ListFormat2["SingleLineFunctionBodyStatements"] = 768] = "SingleLineFunctionBodyStatements"; + ListFormat2[ListFormat2["MultiLineFunctionBodyStatements"] = 1 /* MultiLine */] = "MultiLineFunctionBodyStatements"; + ListFormat2[ListFormat2["ClassHeritageClauses"] = 0 /* SingleLine */] = "ClassHeritageClauses"; + ListFormat2[ListFormat2["ClassMembers"] = 129] = "ClassMembers"; + ListFormat2[ListFormat2["InterfaceMembers"] = 129] = "InterfaceMembers"; + ListFormat2[ListFormat2["EnumMembers"] = 145] = "EnumMembers"; + ListFormat2[ListFormat2["CaseBlockClauses"] = 129] = "CaseBlockClauses"; + ListFormat2[ListFormat2["NamedImportsOrExportsElements"] = 525136] = "NamedImportsOrExportsElements"; + ListFormat2[ListFormat2["JsxElementOrFragmentChildren"] = 262144] = "JsxElementOrFragmentChildren"; + ListFormat2[ListFormat2["JsxElementAttributes"] = 262656] = "JsxElementAttributes"; + ListFormat2[ListFormat2["CaseOrDefaultClauseStatements"] = 163969] = "CaseOrDefaultClauseStatements"; + ListFormat2[ListFormat2["HeritageClauseTypes"] = 528] = "HeritageClauseTypes"; + ListFormat2[ListFormat2["SourceFileStatements"] = 131073] = "SourceFileStatements"; + ListFormat2[ListFormat2["Decorators"] = 2146305] = "Decorators"; + ListFormat2[ListFormat2["TypeArguments"] = 53776] = "TypeArguments"; + ListFormat2[ListFormat2["TypeParameters"] = 53776] = "TypeParameters"; + ListFormat2[ListFormat2["Parameters"] = 2576] = "Parameters"; + ListFormat2[ListFormat2["IndexSignatureParameters"] = 8848] = "IndexSignatureParameters"; + ListFormat2[ListFormat2["JSDocComment"] = 33] = "JSDocComment"; + return ListFormat2; +})(ListFormat || {}); +var PragmaKindFlags = /* @__PURE__ */ ((PragmaKindFlags2) => { + PragmaKindFlags2[PragmaKindFlags2["None"] = 0] = "None"; + PragmaKindFlags2[PragmaKindFlags2["TripleSlashXML"] = 1] = "TripleSlashXML"; + PragmaKindFlags2[PragmaKindFlags2["SingleLine"] = 2] = "SingleLine"; + PragmaKindFlags2[PragmaKindFlags2["MultiLine"] = 4] = "MultiLine"; + PragmaKindFlags2[PragmaKindFlags2["All"] = 7] = "All"; + PragmaKindFlags2[PragmaKindFlags2["Default"] = 7 /* All */] = "Default"; + return PragmaKindFlags2; +})(PragmaKindFlags || {}); +var commentPragmas = { + "reference": { + args: [ + { name: "types", optional: true, captureSpan: true }, + { name: "lib", optional: true, captureSpan: true }, + { name: "path", optional: true, captureSpan: true }, + { name: "no-default-lib", optional: true }, + { name: "resolution-mode", optional: true }, + { name: "preserve", optional: true } + ], + kind: 1 /* TripleSlashXML */ + }, + "amd-dependency": { + args: [{ name: "path" }, { name: "name", optional: true }], + kind: 1 /* TripleSlashXML */ + }, + "amd-module": { + args: [{ name: "name" }], + kind: 1 /* TripleSlashXML */ + }, + "ts-check": { + kind: 2 /* SingleLine */ + }, + "ts-nocheck": { + kind: 2 /* SingleLine */ + }, + "jsx": { + args: [{ name: "factory" }], + kind: 4 /* MultiLine */ + }, + "jsxfrag": { + args: [{ name: "factory" }], + kind: 4 /* MultiLine */ + }, + "jsximportsource": { + args: [{ name: "factory" }], + kind: 4 /* MultiLine */ + }, + "jsxruntime": { + args: [{ name: "factory" }], + kind: 4 /* MultiLine */ + } +}; +var JSDocParsingMode = /* @__PURE__ */ ((JSDocParsingMode6) => { + JSDocParsingMode6[JSDocParsingMode6["ParseAll"] = 0] = "ParseAll"; + JSDocParsingMode6[JSDocParsingMode6["ParseNone"] = 1] = "ParseNone"; + JSDocParsingMode6[JSDocParsingMode6["ParseForTypeErrors"] = 2] = "ParseForTypeErrors"; + JSDocParsingMode6[JSDocParsingMode6["ParseForTypeInfo"] = 3] = "ParseForTypeInfo"; + return JSDocParsingMode6; +})(JSDocParsingMode || {}); + +// src/compiler/sys.ts +function generateDjb2Hash(data) { + let acc = 5381; + for (let i = 0; i < data.length; i++) { + acc = (acc << 5) + acc + data.charCodeAt(i); + } + return acc.toString(); +} +function setStackTraceLimit() { + if (Error.stackTraceLimit < 100) { + Error.stackTraceLimit = 100; + } +} +var FileWatcherEventKind = /* @__PURE__ */ ((FileWatcherEventKind2) => { + FileWatcherEventKind2[FileWatcherEventKind2["Created"] = 0] = "Created"; + FileWatcherEventKind2[FileWatcherEventKind2["Changed"] = 1] = "Changed"; + FileWatcherEventKind2[FileWatcherEventKind2["Deleted"] = 2] = "Deleted"; + return FileWatcherEventKind2; +})(FileWatcherEventKind || {}); +var PollingInterval = /* @__PURE__ */ ((PollingInterval3) => { + PollingInterval3[PollingInterval3["High"] = 2e3] = "High"; + PollingInterval3[PollingInterval3["Medium"] = 500] = "Medium"; + PollingInterval3[PollingInterval3["Low"] = 250] = "Low"; + return PollingInterval3; +})(PollingInterval || {}); +var missingFileModifiedTime = /* @__PURE__ */ new Date(0); +function getModifiedTime(host, fileName) { + return host.getModifiedTime(fileName) || missingFileModifiedTime; +} +function createPollingIntervalBasedLevels(levels) { + return { + [250 /* Low */]: levels.Low, + [500 /* Medium */]: levels.Medium, + [2e3 /* High */]: levels.High + }; +} +var defaultChunkLevels = { Low: 32, Medium: 64, High: 256 }; +var pollingChunkSize = createPollingIntervalBasedLevels(defaultChunkLevels); +var unchangedPollThresholds = createPollingIntervalBasedLevels(defaultChunkLevels); +function setCustomPollingValues(system) { + if (!system.getEnvironmentVariable) { + return; + } + const pollingIntervalChanged = setCustomLevels("TSC_WATCH_POLLINGINTERVAL", PollingInterval); + pollingChunkSize = getCustomPollingBasedLevels("TSC_WATCH_POLLINGCHUNKSIZE", defaultChunkLevels) || pollingChunkSize; + unchangedPollThresholds = getCustomPollingBasedLevels("TSC_WATCH_UNCHANGEDPOLLTHRESHOLDS", defaultChunkLevels) || unchangedPollThresholds; + function getLevel(envVar, level) { + return system.getEnvironmentVariable(`${envVar}_${level.toUpperCase()}`); + } + function getCustomLevels(baseVariable) { + let customLevels; + setCustomLevel("Low"); + setCustomLevel("Medium"); + setCustomLevel("High"); + return customLevels; + function setCustomLevel(level) { + const customLevel = getLevel(baseVariable, level); + if (customLevel) { + (customLevels || (customLevels = {}))[level] = Number(customLevel); + } + } + } + function setCustomLevels(baseVariable, levels) { + const customLevels = getCustomLevels(baseVariable); + if (customLevels) { + setLevel("Low"); + setLevel("Medium"); + setLevel("High"); + return true; + } + return false; + function setLevel(level) { + levels[level] = customLevels[level] || levels[level]; + } + } + function getCustomPollingBasedLevels(baseVariable, defaultLevels) { + const customLevels = getCustomLevels(baseVariable); + return (pollingIntervalChanged || customLevels) && createPollingIntervalBasedLevels(customLevels ? { ...defaultLevels, ...customLevels } : defaultLevels); + } +} +function pollWatchedFileQueue(host, queue, pollIndex, chunkSize, callbackOnWatchFileStat) { + let definedValueCopyToIndex = pollIndex; + for (let canVisit = queue.length; chunkSize && canVisit; nextPollIndex(), canVisit--) { + const watchedFile = queue[pollIndex]; + if (!watchedFile) { + continue; + } else if (watchedFile.isClosed) { + queue[pollIndex] = void 0; + continue; + } + chunkSize--; + const fileChanged = onWatchedFileStat(watchedFile, getModifiedTime(host, watchedFile.fileName)); + if (watchedFile.isClosed) { + queue[pollIndex] = void 0; + continue; + } + callbackOnWatchFileStat == null ? void 0 : callbackOnWatchFileStat(watchedFile, pollIndex, fileChanged); + if (queue[pollIndex]) { + if (definedValueCopyToIndex < pollIndex) { + queue[definedValueCopyToIndex] = watchedFile; + queue[pollIndex] = void 0; + } + definedValueCopyToIndex++; + } + } + return pollIndex; + function nextPollIndex() { + pollIndex++; + if (pollIndex === queue.length) { + if (definedValueCopyToIndex < pollIndex) { + queue.length = definedValueCopyToIndex; + } + pollIndex = 0; + definedValueCopyToIndex = 0; + } + } +} +function createDynamicPriorityPollingWatchFile(host) { + const watchedFiles = []; + const changedFilesInLastPoll = []; + const lowPollingIntervalQueue = createPollingIntervalQueue(250 /* Low */); + const mediumPollingIntervalQueue = createPollingIntervalQueue(500 /* Medium */); + const highPollingIntervalQueue = createPollingIntervalQueue(2e3 /* High */); + return watchFile2; + function watchFile2(fileName, callback, defaultPollingInterval) { + const file = { + fileName, + callback, + unchangedPolls: 0, + mtime: getModifiedTime(host, fileName) + }; + watchedFiles.push(file); + addToPollingIntervalQueue(file, defaultPollingInterval); + return { + close: () => { + file.isClosed = true; + unorderedRemoveItem(watchedFiles, file); + } + }; + } + function createPollingIntervalQueue(pollingInterval) { + const queue = []; + queue.pollingInterval = pollingInterval; + queue.pollIndex = 0; + queue.pollScheduled = false; + return queue; + } + function pollPollingIntervalQueue(_timeoutType, queue) { + queue.pollIndex = pollQueue(queue, queue.pollingInterval, queue.pollIndex, pollingChunkSize[queue.pollingInterval]); + if (queue.length) { + scheduleNextPoll(queue.pollingInterval); + } else { + Debug.assert(queue.pollIndex === 0); + queue.pollScheduled = false; + } + } + function pollLowPollingIntervalQueue(_timeoutType, queue) { + pollQueue( + changedFilesInLastPoll, + 250 /* Low */, + /*pollIndex*/ + 0, + changedFilesInLastPoll.length + ); + pollPollingIntervalQueue(_timeoutType, queue); + if (!queue.pollScheduled && changedFilesInLastPoll.length) { + scheduleNextPoll(250 /* Low */); + } + } + function pollQueue(queue, pollingInterval, pollIndex, chunkSize) { + return pollWatchedFileQueue( + host, + queue, + pollIndex, + chunkSize, + onWatchFileStat + ); + function onWatchFileStat(watchedFile, pollIndex2, fileChanged) { + if (fileChanged) { + watchedFile.unchangedPolls = 0; + if (queue !== changedFilesInLastPoll) { + queue[pollIndex2] = void 0; + addChangedFileToLowPollingIntervalQueue(watchedFile); + } + } else if (watchedFile.unchangedPolls !== unchangedPollThresholds[pollingInterval]) { + watchedFile.unchangedPolls++; + } else if (queue === changedFilesInLastPoll) { + watchedFile.unchangedPolls = 1; + queue[pollIndex2] = void 0; + addToPollingIntervalQueue(watchedFile, 250 /* Low */); + } else if (pollingInterval !== 2e3 /* High */) { + watchedFile.unchangedPolls++; + queue[pollIndex2] = void 0; + addToPollingIntervalQueue(watchedFile, pollingInterval === 250 /* Low */ ? 500 /* Medium */ : 2e3 /* High */); + } + } + } + function pollingIntervalQueue(pollingInterval) { + switch (pollingInterval) { + case 250 /* Low */: + return lowPollingIntervalQueue; + case 500 /* Medium */: + return mediumPollingIntervalQueue; + case 2e3 /* High */: + return highPollingIntervalQueue; + } + } + function addToPollingIntervalQueue(file, pollingInterval) { + pollingIntervalQueue(pollingInterval).push(file); + scheduleNextPollIfNotAlreadyScheduled(pollingInterval); + } + function addChangedFileToLowPollingIntervalQueue(file) { + changedFilesInLastPoll.push(file); + scheduleNextPollIfNotAlreadyScheduled(250 /* Low */); + } + function scheduleNextPollIfNotAlreadyScheduled(pollingInterval) { + if (!pollingIntervalQueue(pollingInterval).pollScheduled) { + scheduleNextPoll(pollingInterval); + } + } + function scheduleNextPoll(pollingInterval) { + pollingIntervalQueue(pollingInterval).pollScheduled = host.setTimeout(pollingInterval === 250 /* Low */ ? pollLowPollingIntervalQueue : pollPollingIntervalQueue, pollingInterval, pollingInterval === 250 /* Low */ ? "pollLowPollingIntervalQueue" : "pollPollingIntervalQueue", pollingIntervalQueue(pollingInterval)); + } +} +function createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp) { + const fileWatcherCallbacks = createMultiMap(); + const fileTimestamps = fsWatchWithTimestamp ? /* @__PURE__ */ new Map() : void 0; + const dirWatchers = /* @__PURE__ */ new Map(); + const toCanonicalName = createGetCanonicalFileName(useCaseSensitiveFileNames2); + return nonPollingWatchFile; + function nonPollingWatchFile(fileName, callback, _pollingInterval, fallbackOptions) { + const filePath = toCanonicalName(fileName); + if (fileWatcherCallbacks.add(filePath, callback).length === 1 && fileTimestamps) { + fileTimestamps.set(filePath, getModifiedTime3(fileName) || missingFileModifiedTime); + } + const dirPath = getDirectoryPath(filePath) || "."; + const watcher = dirWatchers.get(dirPath) || createDirectoryWatcher(getDirectoryPath(fileName) || ".", dirPath, fallbackOptions); + watcher.referenceCount++; + return { + close: () => { + if (watcher.referenceCount === 1) { + watcher.close(); + dirWatchers.delete(dirPath); + } else { + watcher.referenceCount--; + } + fileWatcherCallbacks.remove(filePath, callback); + } + }; + } + function createDirectoryWatcher(dirName, dirPath, fallbackOptions) { + const watcher = fsWatch( + dirName, + 1 /* Directory */, + (eventName, relativeFileName) => { + if (!isString(relativeFileName)) return; + const fileName = getNormalizedAbsolutePath(relativeFileName, dirName); + const filePath = toCanonicalName(fileName); + const callbacks = fileName && fileWatcherCallbacks.get(filePath); + if (callbacks) { + let currentModifiedTime; + let eventKind = 1 /* Changed */; + if (fileTimestamps) { + const existingTime = fileTimestamps.get(filePath); + if (eventName === "change") { + currentModifiedTime = getModifiedTime3(fileName) || missingFileModifiedTime; + if (currentModifiedTime.getTime() === existingTime.getTime()) return; + } + currentModifiedTime || (currentModifiedTime = getModifiedTime3(fileName) || missingFileModifiedTime); + fileTimestamps.set(filePath, currentModifiedTime); + if (existingTime === missingFileModifiedTime) eventKind = 0 /* Created */; + else if (currentModifiedTime === missingFileModifiedTime) eventKind = 2 /* Deleted */; + } + for (const fileCallback of callbacks) { + fileCallback(fileName, eventKind, currentModifiedTime); + } + } + }, + /*recursive*/ + false, + 500 /* Medium */, + fallbackOptions + ); + watcher.referenceCount = 0; + dirWatchers.set(dirPath, watcher); + return watcher; + } +} +function createFixedChunkSizePollingWatchFile(host) { + const watchedFiles = []; + let pollIndex = 0; + let pollScheduled; + return watchFile2; + function watchFile2(fileName, callback) { + const file = { + fileName, + callback, + mtime: getModifiedTime(host, fileName) + }; + watchedFiles.push(file); + scheduleNextPoll(); + return { + close: () => { + file.isClosed = true; + unorderedRemoveItem(watchedFiles, file); + } + }; + } + function pollQueue() { + pollScheduled = void 0; + pollIndex = pollWatchedFileQueue(host, watchedFiles, pollIndex, pollingChunkSize[250 /* Low */]); + scheduleNextPoll(); + } + function scheduleNextPoll() { + if (!watchedFiles.length || pollScheduled) return; + pollScheduled = host.setTimeout(pollQueue, 2e3 /* High */, "pollQueue"); + } +} +function createSingleWatcherPerName(cache, useCaseSensitiveFileNames2, name, callback, createWatcher) { + const toCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames2); + const path = toCanonicalFileName(name); + const existing = cache.get(path); + if (existing) { + existing.callbacks.push(callback); + } else { + cache.set(path, { + watcher: createWatcher( + // Cant infer types correctly so lets satisfy checker + (param1, param2, param3) => { + var _a; + return (_a = cache.get(path)) == null ? void 0 : _a.callbacks.slice().forEach((cb) => cb(param1, param2, param3)); + } + ), + callbacks: [callback] + }); + } + return { + close: () => { + const watcher = cache.get(path); + if (!watcher) return; + if (!orderedRemoveItem(watcher.callbacks, callback) || watcher.callbacks.length) return; + cache.delete(path); + closeFileWatcherOf(watcher); + } + }; +} +function onWatchedFileStat(watchedFile, modifiedTime) { + const oldTime = watchedFile.mtime.getTime(); + const newTime = modifiedTime.getTime(); + if (oldTime !== newTime) { + watchedFile.mtime = modifiedTime; + watchedFile.callback(watchedFile.fileName, getFileWatcherEventKind(oldTime, newTime), modifiedTime); + return true; + } + return false; +} +function getFileWatcherEventKind(oldTime, newTime) { + return oldTime === 0 ? 0 /* Created */ : newTime === 0 ? 2 /* Deleted */ : 1 /* Changed */; +} +var ignoredPaths = ["/node_modules/.", "/.git", "/.#"]; +var curSysLog = noop; +function sysLog(s) { + return curSysLog(s); +} +function setSysLog(logger) { + curSysLog = logger; +} +function createDirectoryWatcherSupportingRecursive({ + watchDirectory, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + getCurrentDirectory, + getAccessibleSortedChildDirectories, + fileSystemEntryExists, + realpath, + setTimeout: setTimeout2, + clearTimeout: clearTimeout2 +}) { + const cache = /* @__PURE__ */ new Map(); + const callbackCache = createMultiMap(); + const cacheToUpdateChildWatches = /* @__PURE__ */ new Map(); + let timerToUpdateChildWatches; + const filePathComparer = getStringComparer(!useCaseSensitiveFileNames2); + const toCanonicalFilePath = createGetCanonicalFileName(useCaseSensitiveFileNames2); + return (dirName, callback, recursive, options) => recursive ? createDirectoryWatcher(dirName, options, callback) : watchDirectory(dirName, callback, recursive, options); + function createDirectoryWatcher(dirName, options, callback, link) { + const dirPath = toCanonicalFilePath(dirName); + let directoryWatcher = cache.get(dirPath); + if (directoryWatcher) { + directoryWatcher.refCount++; + } else { + directoryWatcher = { + watcher: watchDirectory( + dirName, + (fileName) => { + var _a; + if (isIgnoredPath(fileName, options)) return; + if (options == null ? void 0 : options.synchronousWatchDirectory) { + if (!((_a = cache.get(dirPath)) == null ? void 0 : _a.targetWatcher)) invokeCallbacks(dirName, dirPath, fileName); + updateChildWatches(dirName, dirPath, options); + } else { + nonSyncUpdateChildWatches(dirName, dirPath, fileName, options); + } + }, + /*recursive*/ + false, + options + ), + refCount: 1, + childWatches: emptyArray, + targetWatcher: void 0, + links: void 0 + }; + cache.set(dirPath, directoryWatcher); + updateChildWatches(dirName, dirPath, options); + } + if (link) (directoryWatcher.links ?? (directoryWatcher.links = /* @__PURE__ */ new Set())).add(link); + const callbackToAdd = callback && { dirName, callback }; + if (callbackToAdd) { + callbackCache.add(dirPath, callbackToAdd); + } + return { + dirName, + close: () => { + var _a; + const directoryWatcher2 = Debug.checkDefined(cache.get(dirPath)); + if (callbackToAdd) callbackCache.remove(dirPath, callbackToAdd); + if (link) (_a = directoryWatcher2.links) == null ? void 0 : _a.delete(link); + directoryWatcher2.refCount--; + if (directoryWatcher2.refCount) return; + cache.delete(dirPath); + directoryWatcher2.links = void 0; + closeFileWatcherOf(directoryWatcher2); + closeTargetWatcher(directoryWatcher2); + directoryWatcher2.childWatches.forEach(closeFileWatcher); + } + }; + } + function invokeCallbacks(dirName, dirPath, fileNameOrInvokeMap, fileNames) { + var _a, _b; + let fileName; + let invokeMap; + if (isString(fileNameOrInvokeMap)) { + fileName = fileNameOrInvokeMap; + } else { + invokeMap = fileNameOrInvokeMap; + } + callbackCache.forEach((callbacks, rootDirName) => { + if (invokeMap && invokeMap.get(rootDirName) === true) return; + if (rootDirName === dirPath || startsWith(dirPath, rootDirName) && dirPath[rootDirName.length] === directorySeparator) { + if (invokeMap) { + if (fileNames) { + const existing = invokeMap.get(rootDirName); + if (existing) { + existing.push(...fileNames); + } else { + invokeMap.set(rootDirName, fileNames.slice()); + } + } else { + invokeMap.set(rootDirName, true); + } + } else { + callbacks.forEach(({ callback }) => callback(fileName)); + } + } + }); + (_b = (_a = cache.get(dirPath)) == null ? void 0 : _a.links) == null ? void 0 : _b.forEach((link) => { + const toPathInLink = (fileName2) => combinePaths(link, getRelativePathFromDirectory(dirName, fileName2, toCanonicalFilePath)); + if (invokeMap) { + invokeCallbacks(link, toCanonicalFilePath(link), invokeMap, fileNames == null ? void 0 : fileNames.map(toPathInLink)); + } else { + invokeCallbacks(link, toCanonicalFilePath(link), toPathInLink(fileName)); + } + }); + } + function nonSyncUpdateChildWatches(dirName, dirPath, fileName, options) { + const parentWatcher = cache.get(dirPath); + if (parentWatcher && fileSystemEntryExists(dirName, 1 /* Directory */)) { + scheduleUpdateChildWatches(dirName, dirPath, fileName, options); + return; + } + invokeCallbacks(dirName, dirPath, fileName); + closeTargetWatcher(parentWatcher); + removeChildWatches(parentWatcher); + } + function scheduleUpdateChildWatches(dirName, dirPath, fileName, options) { + const existing = cacheToUpdateChildWatches.get(dirPath); + if (existing) { + existing.fileNames.push(fileName); + } else { + cacheToUpdateChildWatches.set(dirPath, { dirName, options, fileNames: [fileName] }); + } + if (timerToUpdateChildWatches) { + clearTimeout2(timerToUpdateChildWatches); + timerToUpdateChildWatches = void 0; + } + timerToUpdateChildWatches = setTimeout2(onTimerToUpdateChildWatches, 1e3, "timerToUpdateChildWatches"); + } + function onTimerToUpdateChildWatches() { + var _a; + timerToUpdateChildWatches = void 0; + sysLog(`sysLog:: onTimerToUpdateChildWatches:: ${cacheToUpdateChildWatches.size}`); + const start = timestamp(); + const invokeMap = /* @__PURE__ */ new Map(); + while (!timerToUpdateChildWatches && cacheToUpdateChildWatches.size) { + const result = cacheToUpdateChildWatches.entries().next(); + Debug.assert(!result.done); + const { value: [dirPath, { dirName, options, fileNames }] } = result; + cacheToUpdateChildWatches.delete(dirPath); + const hasChanges = updateChildWatches(dirName, dirPath, options); + if (!((_a = cache.get(dirPath)) == null ? void 0 : _a.targetWatcher)) invokeCallbacks(dirName, dirPath, invokeMap, hasChanges ? void 0 : fileNames); + } + sysLog(`sysLog:: invokingWatchers:: Elapsed:: ${timestamp() - start}ms:: ${cacheToUpdateChildWatches.size}`); + callbackCache.forEach((callbacks, rootDirName) => { + const existing = invokeMap.get(rootDirName); + if (existing) { + callbacks.forEach(({ callback, dirName }) => { + if (isArray(existing)) { + existing.forEach(callback); + } else { + callback(dirName); + } + }); + } + }); + const elapsed = timestamp() - start; + sysLog(`sysLog:: Elapsed:: ${elapsed}ms:: onTimerToUpdateChildWatches:: ${cacheToUpdateChildWatches.size} ${timerToUpdateChildWatches}`); + } + function removeChildWatches(parentWatcher) { + if (!parentWatcher) return; + const existingChildWatches = parentWatcher.childWatches; + parentWatcher.childWatches = emptyArray; + for (const childWatcher of existingChildWatches) { + childWatcher.close(); + removeChildWatches(cache.get(toCanonicalFilePath(childWatcher.dirName))); + } + } + function closeTargetWatcher(watcher) { + if (watcher == null ? void 0 : watcher.targetWatcher) { + watcher.targetWatcher.close(); + watcher.targetWatcher = void 0; + } + } + function updateChildWatches(parentDir, parentDirPath, options) { + const parentWatcher = cache.get(parentDirPath); + if (!parentWatcher) return false; + const target = normalizePath(realpath(parentDir)); + let hasChanges; + let newChildWatches; + if (filePathComparer(target, parentDir) === 0 /* EqualTo */) { + hasChanges = enumerateInsertsAndDeletes( + fileSystemEntryExists(parentDir, 1 /* Directory */) ? mapDefined(getAccessibleSortedChildDirectories(parentDir), (child) => { + const childFullName = getNormalizedAbsolutePath(child, parentDir); + return !isIgnoredPath(childFullName, options) && filePathComparer(childFullName, normalizePath(realpath(childFullName))) === 0 /* EqualTo */ ? childFullName : void 0; + }) : emptyArray, + parentWatcher.childWatches, + (child, childWatcher) => filePathComparer(child, childWatcher.dirName), + createAndAddChildDirectoryWatcher, + closeFileWatcher, + addChildDirectoryWatcher + ); + } else if (parentWatcher.targetWatcher && filePathComparer(target, parentWatcher.targetWatcher.dirName) === 0 /* EqualTo */) { + hasChanges = false; + Debug.assert(parentWatcher.childWatches === emptyArray); + } else { + closeTargetWatcher(parentWatcher); + parentWatcher.targetWatcher = createDirectoryWatcher( + target, + options, + /*callback*/ + void 0, + parentDir + ); + parentWatcher.childWatches.forEach(closeFileWatcher); + hasChanges = true; + } + parentWatcher.childWatches = newChildWatches || emptyArray; + return hasChanges; + function createAndAddChildDirectoryWatcher(childName) { + const result = createDirectoryWatcher(childName, options); + addChildDirectoryWatcher(result); + } + function addChildDirectoryWatcher(childWatcher) { + (newChildWatches || (newChildWatches = [])).push(childWatcher); + } + } + function isIgnoredPath(path, options) { + return some(ignoredPaths, (searchPath) => isInPath(path, searchPath)) || isIgnoredByWatchOptions(path, options, useCaseSensitiveFileNames2, getCurrentDirectory); + } + function isInPath(path, searchPath) { + if (path.includes(searchPath)) return true; + if (useCaseSensitiveFileNames2) return false; + return toCanonicalFilePath(path).includes(searchPath); + } +} +var FileSystemEntryKind = /* @__PURE__ */ ((FileSystemEntryKind2) => { + FileSystemEntryKind2[FileSystemEntryKind2["File"] = 0] = "File"; + FileSystemEntryKind2[FileSystemEntryKind2["Directory"] = 1] = "Directory"; + return FileSystemEntryKind2; +})(FileSystemEntryKind || {}); +function createFileWatcherCallback(callback) { + return (_fileName, eventKind, modifiedTime) => callback(eventKind === 1 /* Changed */ ? "change" : "rename", "", modifiedTime); +} +function createFsWatchCallbackForFileWatcherCallback(fileName, callback, getModifiedTime3) { + return (eventName, _relativeFileName, modifiedTime) => { + if (eventName === "rename") { + modifiedTime || (modifiedTime = getModifiedTime3(fileName) || missingFileModifiedTime); + callback(fileName, modifiedTime !== missingFileModifiedTime ? 0 /* Created */ : 2 /* Deleted */, modifiedTime); + } else { + callback(fileName, 1 /* Changed */, modifiedTime); + } + }; +} +function isIgnoredByWatchOptions(pathToCheck, options, useCaseSensitiveFileNames2, getCurrentDirectory) { + return ((options == null ? void 0 : options.excludeDirectories) || (options == null ? void 0 : options.excludeFiles)) && (matchesExclude(pathToCheck, options == null ? void 0 : options.excludeFiles, useCaseSensitiveFileNames2, getCurrentDirectory()) || matchesExclude(pathToCheck, options == null ? void 0 : options.excludeDirectories, useCaseSensitiveFileNames2, getCurrentDirectory())); +} +function createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback, options, useCaseSensitiveFileNames2, getCurrentDirectory) { + return (eventName, relativeFileName) => { + if (eventName === "rename") { + const fileName = !relativeFileName ? directoryName : normalizePath(combinePaths(directoryName, relativeFileName)); + if (!relativeFileName || !isIgnoredByWatchOptions(fileName, options, useCaseSensitiveFileNames2, getCurrentDirectory)) { + callback(fileName); + } + } + }; +} +function createSystemWatchFunctions({ + pollingWatchFileWorker, + getModifiedTime: getModifiedTime3, + setTimeout: setTimeout2, + clearTimeout: clearTimeout2, + fsWatchWorker, + fileSystemEntryExists, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + getCurrentDirectory, + fsSupportsRecursiveFsWatch, + getAccessibleSortedChildDirectories, + realpath, + tscWatchFile, + useNonPollingWatchers, + tscWatchDirectory, + inodeWatching, + fsWatchWithTimestamp, + sysLog: sysLog2 +}) { + const pollingWatches = /* @__PURE__ */ new Map(); + const fsWatches = /* @__PURE__ */ new Map(); + const fsWatchesRecursive = /* @__PURE__ */ new Map(); + let dynamicPollingWatchFile; + let fixedChunkSizePollingWatchFile; + let nonPollingWatchFile; + let hostRecursiveDirectoryWatcher; + let hitSystemWatcherLimit = false; + return { + watchFile: watchFile2, + watchDirectory + }; + function watchFile2(fileName, callback, pollingInterval, options) { + options = updateOptionsForWatchFile(options, useNonPollingWatchers); + const watchFileKind = Debug.checkDefined(options.watchFile); + switch (watchFileKind) { + case 0 /* FixedPollingInterval */: + return pollingWatchFile( + fileName, + callback, + 250 /* Low */, + /*options*/ + void 0 + ); + case 1 /* PriorityPollingInterval */: + return pollingWatchFile( + fileName, + callback, + pollingInterval, + /*options*/ + void 0 + ); + case 2 /* DynamicPriorityPolling */: + return ensureDynamicPollingWatchFile()( + fileName, + callback, + pollingInterval, + /*options*/ + void 0 + ); + case 3 /* FixedChunkSizePolling */: + return ensureFixedChunkSizePollingWatchFile()( + fileName, + callback, + /* pollingInterval */ + void 0, + /*options*/ + void 0 + ); + case 4 /* UseFsEvents */: + return fsWatch( + fileName, + 0 /* File */, + createFsWatchCallbackForFileWatcherCallback(fileName, callback, getModifiedTime3), + /*recursive*/ + false, + pollingInterval, + getFallbackOptions(options) + ); + case 5 /* UseFsEventsOnParentDirectory */: + if (!nonPollingWatchFile) { + nonPollingWatchFile = createUseFsEventsOnParentDirectoryWatchFile(fsWatch, useCaseSensitiveFileNames2, getModifiedTime3, fsWatchWithTimestamp); + } + return nonPollingWatchFile(fileName, callback, pollingInterval, getFallbackOptions(options)); + default: + Debug.assertNever(watchFileKind); + } + } + function ensureDynamicPollingWatchFile() { + return dynamicPollingWatchFile || (dynamicPollingWatchFile = createDynamicPriorityPollingWatchFile({ getModifiedTime: getModifiedTime3, setTimeout: setTimeout2 })); + } + function ensureFixedChunkSizePollingWatchFile() { + return fixedChunkSizePollingWatchFile || (fixedChunkSizePollingWatchFile = createFixedChunkSizePollingWatchFile({ getModifiedTime: getModifiedTime3, setTimeout: setTimeout2 })); + } + function updateOptionsForWatchFile(options, useNonPollingWatchers2) { + if (options && options.watchFile !== void 0) return options; + switch (tscWatchFile) { + case "PriorityPollingInterval": + return { watchFile: 1 /* PriorityPollingInterval */ }; + case "DynamicPriorityPolling": + return { watchFile: 2 /* DynamicPriorityPolling */ }; + case "UseFsEvents": + return generateWatchFileOptions(4 /* UseFsEvents */, 1 /* PriorityInterval */, options); + case "UseFsEventsWithFallbackDynamicPolling": + return generateWatchFileOptions(4 /* UseFsEvents */, 2 /* DynamicPriority */, options); + case "UseFsEventsOnParentDirectory": + useNonPollingWatchers2 = true; + // fall through + default: + return useNonPollingWatchers2 ? ( + // Use notifications from FS to watch with falling back to fs.watchFile + generateWatchFileOptions(5 /* UseFsEventsOnParentDirectory */, 1 /* PriorityInterval */, options) + ) : ( + // Default to using fs events + { watchFile: 4 /* UseFsEvents */ } + ); + } + } + function generateWatchFileOptions(watchFile3, fallbackPolling, options) { + const defaultFallbackPolling = options == null ? void 0 : options.fallbackPolling; + return { + watchFile: watchFile3, + fallbackPolling: defaultFallbackPolling === void 0 ? fallbackPolling : defaultFallbackPolling + }; + } + function watchDirectory(directoryName, callback, recursive, options) { + if (fsSupportsRecursiveFsWatch) { + return fsWatch( + directoryName, + 1 /* Directory */, + createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback, options, useCaseSensitiveFileNames2, getCurrentDirectory), + recursive, + 500 /* Medium */, + getFallbackOptions(options) + ); + } + if (!hostRecursiveDirectoryWatcher) { + hostRecursiveDirectoryWatcher = createDirectoryWatcherSupportingRecursive({ + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + getCurrentDirectory, + fileSystemEntryExists, + getAccessibleSortedChildDirectories, + watchDirectory: nonRecursiveWatchDirectory, + realpath, + setTimeout: setTimeout2, + clearTimeout: clearTimeout2 + }); + } + return hostRecursiveDirectoryWatcher(directoryName, callback, recursive, options); + } + function nonRecursiveWatchDirectory(directoryName, callback, recursive, options) { + Debug.assert(!recursive); + const watchDirectoryOptions = updateOptionsForWatchDirectory(options); + const watchDirectoryKind = Debug.checkDefined(watchDirectoryOptions.watchDirectory); + switch (watchDirectoryKind) { + case 1 /* FixedPollingInterval */: + return pollingWatchFile( + directoryName, + () => callback(directoryName), + 500 /* Medium */, + /*options*/ + void 0 + ); + case 2 /* DynamicPriorityPolling */: + return ensureDynamicPollingWatchFile()( + directoryName, + () => callback(directoryName), + 500 /* Medium */, + /*options*/ + void 0 + ); + case 3 /* FixedChunkSizePolling */: + return ensureFixedChunkSizePollingWatchFile()( + directoryName, + () => callback(directoryName), + /* pollingInterval */ + void 0, + /*options*/ + void 0 + ); + case 0 /* UseFsEvents */: + return fsWatch( + directoryName, + 1 /* Directory */, + createFsWatchCallbackForDirectoryWatcherCallback(directoryName, callback, options, useCaseSensitiveFileNames2, getCurrentDirectory), + recursive, + 500 /* Medium */, + getFallbackOptions(watchDirectoryOptions) + ); + default: + Debug.assertNever(watchDirectoryKind); + } + } + function updateOptionsForWatchDirectory(options) { + if (options && options.watchDirectory !== void 0) return options; + switch (tscWatchDirectory) { + case "RecursiveDirectoryUsingFsWatchFile": + return { watchDirectory: 1 /* FixedPollingInterval */ }; + case "RecursiveDirectoryUsingDynamicPriorityPolling": + return { watchDirectory: 2 /* DynamicPriorityPolling */ }; + default: + const defaultFallbackPolling = options == null ? void 0 : options.fallbackPolling; + return { + watchDirectory: 0 /* UseFsEvents */, + fallbackPolling: defaultFallbackPolling !== void 0 ? defaultFallbackPolling : void 0 + }; + } + } + function pollingWatchFile(fileName, callback, pollingInterval, options) { + return createSingleWatcherPerName( + pollingWatches, + useCaseSensitiveFileNames2, + fileName, + callback, + (cb) => pollingWatchFileWorker(fileName, cb, pollingInterval, options) + ); + } + function fsWatch(fileOrDirectory, entryKind, callback, recursive, fallbackPollingInterval, fallbackOptions) { + return createSingleWatcherPerName( + recursive ? fsWatchesRecursive : fsWatches, + useCaseSensitiveFileNames2, + fileOrDirectory, + callback, + (cb) => fsWatchHandlingExistenceOnHost(fileOrDirectory, entryKind, cb, recursive, fallbackPollingInterval, fallbackOptions) + ); + } + function fsWatchHandlingExistenceOnHost(fileOrDirectory, entryKind, callback, recursive, fallbackPollingInterval, fallbackOptions) { + let lastDirectoryPartWithDirectorySeparator; + let lastDirectoryPart; + if (inodeWatching) { + lastDirectoryPartWithDirectorySeparator = fileOrDirectory.substring(fileOrDirectory.lastIndexOf(directorySeparator)); + lastDirectoryPart = lastDirectoryPartWithDirectorySeparator.slice(directorySeparator.length); + } + let watcher = !fileSystemEntryExists(fileOrDirectory, entryKind) ? watchMissingFileSystemEntry() : watchPresentFileSystemEntry(); + return { + close: () => { + if (watcher) { + watcher.close(); + watcher = void 0; + } + } + }; + function updateWatcher(createWatcher) { + if (watcher) { + sysLog2(`sysLog:: ${fileOrDirectory}:: Changing watcher to ${createWatcher === watchPresentFileSystemEntry ? "Present" : "Missing"}FileSystemEntryWatcher`); + watcher.close(); + watcher = createWatcher(); + } + } + function watchPresentFileSystemEntry() { + if (hitSystemWatcherLimit) { + sysLog2(`sysLog:: ${fileOrDirectory}:: Defaulting to watchFile`); + return watchPresentFileSystemEntryWithFsWatchFile(); + } + try { + const presentWatcher = (entryKind === 1 /* Directory */ || !fsWatchWithTimestamp ? fsWatchWorker : fsWatchWorkerHandlingTimestamp)( + fileOrDirectory, + recursive, + inodeWatching ? callbackChangingToMissingFileSystemEntry : callback + ); + presentWatcher.on("error", () => { + callback("rename", ""); + updateWatcher(watchMissingFileSystemEntry); + }); + return presentWatcher; + } catch (e) { + hitSystemWatcherLimit || (hitSystemWatcherLimit = e.code === "ENOSPC"); + sysLog2(`sysLog:: ${fileOrDirectory}:: Changing to watchFile`); + return watchPresentFileSystemEntryWithFsWatchFile(); + } + } + function callbackChangingToMissingFileSystemEntry(event, relativeName) { + let originalRelativeName; + if (relativeName && endsWith(relativeName, "~")) { + originalRelativeName = relativeName; + relativeName = relativeName.slice(0, relativeName.length - 1); + } + if (event === "rename" && (!relativeName || relativeName === lastDirectoryPart || endsWith(relativeName, lastDirectoryPartWithDirectorySeparator))) { + const modifiedTime = getModifiedTime3(fileOrDirectory) || missingFileModifiedTime; + if (originalRelativeName) callback(event, originalRelativeName, modifiedTime); + callback(event, relativeName, modifiedTime); + if (inodeWatching) { + updateWatcher(modifiedTime === missingFileModifiedTime ? watchMissingFileSystemEntry : watchPresentFileSystemEntry); + } else if (modifiedTime === missingFileModifiedTime) { + updateWatcher(watchMissingFileSystemEntry); + } + } else { + if (originalRelativeName) callback(event, originalRelativeName); + callback(event, relativeName); + } + } + function watchPresentFileSystemEntryWithFsWatchFile() { + return watchFile2( + fileOrDirectory, + createFileWatcherCallback(callback), + fallbackPollingInterval, + fallbackOptions + ); + } + function watchMissingFileSystemEntry() { + return watchFile2( + fileOrDirectory, + (_fileName, eventKind, modifiedTime) => { + if (eventKind === 0 /* Created */) { + modifiedTime || (modifiedTime = getModifiedTime3(fileOrDirectory) || missingFileModifiedTime); + if (modifiedTime !== missingFileModifiedTime) { + callback("rename", "", modifiedTime); + updateWatcher(watchPresentFileSystemEntry); + } + } + }, + fallbackPollingInterval, + fallbackOptions + ); + } + } + function fsWatchWorkerHandlingTimestamp(fileOrDirectory, recursive, callback) { + let modifiedTime = getModifiedTime3(fileOrDirectory) || missingFileModifiedTime; + return fsWatchWorker(fileOrDirectory, recursive, (eventName, relativeFileName, currentModifiedTime) => { + if (eventName === "change") { + currentModifiedTime || (currentModifiedTime = getModifiedTime3(fileOrDirectory) || missingFileModifiedTime); + if (currentModifiedTime.getTime() === modifiedTime.getTime()) return; + } + modifiedTime = currentModifiedTime || getModifiedTime3(fileOrDirectory) || missingFileModifiedTime; + callback(eventName, relativeFileName, modifiedTime); + }); + } +} +function patchWriteFileEnsuringDirectory(sys2) { + const originalWriteFile = sys2.writeFile; + sys2.writeFile = (path, data, writeBom) => writeFileEnsuringDirectories( + path, + data, + !!writeBom, + (path2, data2, writeByteOrderMark) => originalWriteFile.call(sys2, path2, data2, writeByteOrderMark), + (path2) => sys2.createDirectory(path2), + (path2) => sys2.directoryExists(path2) + ); +} +var sys = (() => { + const byteOrderMarkIndicator = "\uFEFF"; + function getNodeSystem() { + const nativePattern = /^native |^\([^)]+\)$|^(?:internal[\\/]|[\w\s]+(?:\.js)?$)/; + const _fs = require("fs"); + const _path = require("path"); + const _os = require("os"); + let _crypto; + try { + _crypto = require("crypto"); + } catch { + _crypto = void 0; + } + let activeSession; + let profilePath = "./profile.cpuprofile"; + const isMacOs = process.platform === "darwin"; + const isLinuxOrMacOs = process.platform === "linux" || isMacOs; + const statSyncOptions = { throwIfNoEntry: false }; + const platform = _os.platform(); + const useCaseSensitiveFileNames2 = isFileSystemCaseSensitive(); + const fsRealpath = !!_fs.realpathSync.native ? process.platform === "win32" ? fsRealPathHandlingLongPath : _fs.realpathSync.native : _fs.realpathSync; + const executingFilePath = __filename.endsWith("sys.js") ? _path.join(_path.dirname(__dirname), "__fake__.js") : __filename; + const fsSupportsRecursiveFsWatch = process.platform === "win32" || isMacOs; + const getCurrentDirectory = memoize(() => process.cwd()); + const { watchFile: watchFile2, watchDirectory } = createSystemWatchFunctions({ + pollingWatchFileWorker: fsWatchFileWorker, + getModifiedTime: getModifiedTime3, + setTimeout, + clearTimeout, + fsWatchWorker, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + getCurrentDirectory, + fileSystemEntryExists, + // Node 4.0 `fs.watch` function supports the "recursive" option on both OSX and Windows + // (ref: https://github.com/nodejs/node/pull/2649 and https://github.com/Microsoft/TypeScript/issues/4643) + fsSupportsRecursiveFsWatch, + getAccessibleSortedChildDirectories: (path) => getAccessibleFileSystemEntries(path).directories, + realpath, + tscWatchFile: process.env.TSC_WATCHFILE, + useNonPollingWatchers: !!process.env.TSC_NONPOLLING_WATCHER, + tscWatchDirectory: process.env.TSC_WATCHDIRECTORY, + inodeWatching: isLinuxOrMacOs, + fsWatchWithTimestamp: isMacOs, + sysLog + }); + const nodeSystem = { + args: process.argv.slice(2), + newLine: _os.EOL, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + write(s) { + process.stdout.write(s); + }, + getWidthOfTerminal() { + return process.stdout.columns; + }, + writeOutputIsTTY() { + return process.stdout.isTTY; + }, + readFile, + writeFile: writeFile2, + watchFile: watchFile2, + watchDirectory, + preferNonRecursiveWatch: !fsSupportsRecursiveFsWatch, + resolvePath: (path) => _path.resolve(path), + fileExists, + directoryExists, + getAccessibleFileSystemEntries, + createDirectory(directoryName) { + if (!nodeSystem.directoryExists(directoryName)) { + try { + _fs.mkdirSync(directoryName); + } catch (e) { + if (e.code !== "EEXIST") { + throw e; + } + } + } + }, + getExecutingFilePath() { + return executingFilePath; + }, + getCurrentDirectory, + getDirectories, + getEnvironmentVariable(name) { + return process.env[name] || ""; + }, + readDirectory, + getModifiedTime: getModifiedTime3, + setModifiedTime, + deleteFile, + createHash: _crypto ? createSHA256Hash : generateDjb2Hash, + createSHA256Hash: _crypto ? createSHA256Hash : void 0, + getMemoryUsage() { + if (global.gc) { + global.gc(); + } + return process.memoryUsage().heapUsed; + }, + getFileSize(path) { + const stat = statSync(path); + if (stat == null ? void 0 : stat.isFile()) { + return stat.size; + } + return 0; + }, + exit(exitCode) { + disableCPUProfiler(() => process.exit(exitCode)); + }, + enableCPUProfiler, + disableCPUProfiler, + cpuProfilingEnabled: () => !!activeSession || contains(process.execArgv, "--cpu-prof") || contains(process.execArgv, "--prof"), + realpath, + debugMode: !!process.env.NODE_INSPECTOR_IPC || !!process.env.VSCODE_INSPECTOR_OPTIONS || some(process.execArgv, (arg) => /^--(?:inspect|debug)(?:-brk)?(?:=\d+)?$/i.test(arg)) || !!process.recordreplay, + tryEnableSourceMapsForHost() { + try { + require("source-map-support").install(); + } catch { + } + }, + setTimeout, + clearTimeout, + clearScreen: () => { + process.stdout.write("\x1B[2J\x1B[3J\x1B[H"); + }, + setBlocking: () => { + var _a; + const handle = (_a = process.stdout) == null ? void 0 : _a._handle; + if (handle && handle.setBlocking) { + handle.setBlocking(true); + } + }, + base64decode: (input) => Buffer.from(input, "base64").toString("utf8"), + base64encode: (input) => Buffer.from(input).toString("base64"), + require: (baseDir, moduleName) => { + try { + const modulePath = resolveJSModule(moduleName, baseDir, nodeSystem); + return { module: require(modulePath), modulePath, error: void 0 }; + } catch (error2) { + return { module: void 0, modulePath: void 0, error: error2 }; + } + } + }; + return nodeSystem; + function statSync(path) { + try { + return _fs.statSync(path, statSyncOptions); + } catch { + return void 0; + } + } + function enableCPUProfiler(path, cb) { + if (activeSession) { + cb(); + return false; + } + const inspector = require("inspector"); + if (!inspector || !inspector.Session) { + cb(); + return false; + } + const session = new inspector.Session(); + session.connect(); + session.post("Profiler.enable", () => { + session.post("Profiler.start", () => { + activeSession = session; + profilePath = path; + cb(); + }); + }); + return true; + } + function cleanupPaths(profile) { + let externalFileCounter = 0; + const remappedPaths = /* @__PURE__ */ new Map(); + const normalizedDir = normalizeSlashes(_path.dirname(executingFilePath)); + const fileUrlRoot = `file://${getRootLength(normalizedDir) === 1 ? "" : "/"}${normalizedDir}`; + for (const node of profile.nodes) { + if (node.callFrame.url) { + const url = normalizeSlashes(node.callFrame.url); + if (containsPath(fileUrlRoot, url, useCaseSensitiveFileNames2)) { + node.callFrame.url = getRelativePathToDirectoryOrUrl( + fileUrlRoot, + url, + fileUrlRoot, + createGetCanonicalFileName(useCaseSensitiveFileNames2), + /*isAbsolutePathAnUrl*/ + true + ); + } else if (!nativePattern.test(url)) { + node.callFrame.url = (remappedPaths.has(url) ? remappedPaths : remappedPaths.set(url, `external${externalFileCounter}.js`)).get(url); + externalFileCounter++; + } + } + } + return profile; + } + function disableCPUProfiler(cb) { + if (activeSession && activeSession !== "stopping") { + const s = activeSession; + activeSession.post("Profiler.stop", (err, { profile }) => { + var _a; + if (!err) { + if ((_a = statSync(profilePath)) == null ? void 0 : _a.isDirectory()) { + profilePath = _path.join(profilePath, `${(/* @__PURE__ */ new Date()).toISOString().replace(/:/g, "-")}+P${process.pid}.cpuprofile`); + } + try { + _fs.mkdirSync(_path.dirname(profilePath), { recursive: true }); + } catch { + } + _fs.writeFileSync(profilePath, JSON.stringify(cleanupPaths(profile))); + } + activeSession = void 0; + s.disconnect(); + cb(); + }); + activeSession = "stopping"; + return true; + } else { + cb(); + return false; + } + } + function isFileSystemCaseSensitive() { + if (platform === "win32" || platform === "win64") { + return false; + } + return !fileExists(swapCase(__filename)); + } + function swapCase(s) { + return s.replace(/\w/g, (ch) => { + const up = ch.toUpperCase(); + return ch === up ? ch.toLowerCase() : up; + }); + } + function fsWatchFileWorker(fileName, callback, pollingInterval) { + _fs.watchFile(fileName, { persistent: true, interval: pollingInterval }, fileChanged); + let eventKind; + return { + close: () => _fs.unwatchFile(fileName, fileChanged) + }; + function fileChanged(curr, prev) { + const isPreviouslyDeleted = +prev.mtime === 0 || eventKind === 2 /* Deleted */; + if (+curr.mtime === 0) { + if (isPreviouslyDeleted) { + return; + } + eventKind = 2 /* Deleted */; + } else if (isPreviouslyDeleted) { + eventKind = 0 /* Created */; + } else if (+curr.mtime === +prev.mtime) { + return; + } else { + eventKind = 1 /* Changed */; + } + callback(fileName, eventKind, curr.mtime); + } + } + function fsWatchWorker(fileOrDirectory, recursive, callback) { + return _fs.watch( + fileOrDirectory, + fsSupportsRecursiveFsWatch ? { persistent: true, recursive: !!recursive } : { persistent: true }, + callback + ); + } + function readFile(fileName, _encoding) { + let buffer; + try { + buffer = _fs.readFileSync(fileName); + } catch { + return void 0; + } + let len = buffer.length; + if (len >= 2 && buffer[0] === 254 && buffer[1] === 255) { + len &= ~1; + for (let i = 0; i < len; i += 2) { + const temp = buffer[i]; + buffer[i] = buffer[i + 1]; + buffer[i + 1] = temp; + } + return buffer.toString("utf16le", 2); + } + if (len >= 2 && buffer[0] === 255 && buffer[1] === 254) { + return buffer.toString("utf16le", 2); + } + if (len >= 3 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) { + return buffer.toString("utf8", 3); + } + return buffer.toString("utf8"); + } + function writeFile2(fileName, data, writeByteOrderMark) { + if (writeByteOrderMark) { + data = byteOrderMarkIndicator + data; + } + let fd; + try { + fd = _fs.openSync(fileName, "w"); + _fs.writeSync( + fd, + data, + /*position*/ + void 0, + "utf8" + ); + } finally { + if (fd !== void 0) { + _fs.closeSync(fd); + } + } + } + function getAccessibleFileSystemEntries(path) { + try { + const entries = _fs.readdirSync(path || ".", { withFileTypes: true }); + const files = []; + const directories = []; + for (const dirent of entries) { + const entry = typeof dirent === "string" ? dirent : dirent.name; + if (entry === "." || entry === "..") { + continue; + } + let stat; + if (typeof dirent === "string" || dirent.isSymbolicLink()) { + const name = combinePaths(path, entry); + stat = statSync(name); + if (!stat) { + continue; + } + } else { + stat = dirent; + } + if (stat.isFile()) { + files.push(entry); + } else if (stat.isDirectory()) { + directories.push(entry); + } + } + files.sort(); + directories.sort(); + return { files, directories }; + } catch { + return emptyFileSystemEntries; + } + } + function readDirectory(path, extensions, excludes, includes, depth) { + return matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames2, process.cwd(), depth, getAccessibleFileSystemEntries, realpath); + } + function fileSystemEntryExists(path, entryKind) { + const stat = statSync(path); + if (!stat) { + return false; + } + switch (entryKind) { + case 0 /* File */: + return stat.isFile(); + case 1 /* Directory */: + return stat.isDirectory(); + default: + return false; + } + } + function fileExists(path) { + return fileSystemEntryExists(path, 0 /* File */); + } + function directoryExists(path) { + return fileSystemEntryExists(path, 1 /* Directory */); + } + function getDirectories(path) { + return getAccessibleFileSystemEntries(path).directories.slice(); + } + function fsRealPathHandlingLongPath(path) { + return path.length < 260 ? _fs.realpathSync.native(path) : _fs.realpathSync(path); + } + function realpath(path) { + try { + return fsRealpath(path); + } catch { + return path; + } + } + function getModifiedTime3(path) { + var _a; + return (_a = statSync(path)) == null ? void 0 : _a.mtime; + } + function setModifiedTime(path, time) { + try { + _fs.utimesSync(path, time, time); + } catch { + return; + } + } + function deleteFile(path) { + try { + return _fs.unlinkSync(path); + } catch { + return; + } + } + function createSHA256Hash(data) { + const hash = _crypto.createHash("sha256"); + hash.update(data); + return hash.digest("hex"); + } + } + let sys2; + if (isNodeLikeSystem()) { + sys2 = getNodeSystem(); + } + if (sys2) { + patchWriteFileEnsuringDirectory(sys2); + } + return sys2; +})(); +function setSys(s) { + sys = s; +} +if (sys && sys.getEnvironmentVariable) { + setCustomPollingValues(sys); + Debug.setAssertionLevel( + /^development$/i.test(sys.getEnvironmentVariable("NODE_ENV")) ? 1 /* Normal */ : 0 /* None */ + ); +} +if (sys && sys.debugMode) { + Debug.isDebugging = true; +} + +// src/compiler/path.ts +var directorySeparator = "/"; +var altDirectorySeparator = "\\"; +var urlSchemeSeparator = "://"; +var backslashRegExp = /\\/g; +function isAnyDirectorySeparator(charCode) { + return charCode === 47 /* slash */ || charCode === 92 /* backslash */; +} +function isUrl(path) { + return getEncodedRootLength(path) < 0; +} +function isRootedDiskPath(path) { + return getEncodedRootLength(path) > 0; +} +function isDiskPathRoot(path) { + const rootLength = getEncodedRootLength(path); + return rootLength > 0 && rootLength === path.length; +} +function pathIsAbsolute(path) { + return getEncodedRootLength(path) !== 0; +} +function pathIsRelative(path) { + return /^\.\.?(?:$|[\\/])/.test(path); +} +function pathIsBareSpecifier(path) { + return !pathIsAbsolute(path) && !pathIsRelative(path); +} +function hasExtension(fileName) { + return getBaseFileName(fileName).includes("."); +} +function fileExtensionIs(path, extension) { + return path.length > extension.length && endsWith(path, extension); +} +function fileExtensionIsOneOf(path, extensions) { + for (const extension of extensions) { + if (fileExtensionIs(path, extension)) { + return true; + } + } + return false; +} +function hasTrailingDirectorySeparator(path) { + return path.length > 0 && isAnyDirectorySeparator(path.charCodeAt(path.length - 1)); +} +function isVolumeCharacter(charCode) { + return charCode >= 97 /* a */ && charCode <= 122 /* z */ || charCode >= 65 /* A */ && charCode <= 90 /* Z */; +} +function getFileUrlVolumeSeparatorEnd(url, start) { + const ch0 = url.charCodeAt(start); + if (ch0 === 58 /* colon */) return start + 1; + if (ch0 === 37 /* percent */ && url.charCodeAt(start + 1) === 51 /* _3 */) { + const ch2 = url.charCodeAt(start + 2); + if (ch2 === 97 /* a */ || ch2 === 65 /* A */) return start + 3; + } + return -1; +} +function getEncodedRootLength(path) { + if (!path) return 0; + const ch0 = path.charCodeAt(0); + if (ch0 === 47 /* slash */ || ch0 === 92 /* backslash */) { + if (path.charCodeAt(1) !== ch0) return 1; + const p1 = path.indexOf(ch0 === 47 /* slash */ ? directorySeparator : altDirectorySeparator, 2); + if (p1 < 0) return path.length; + return p1 + 1; + } + if (isVolumeCharacter(ch0) && path.charCodeAt(1) === 58 /* colon */) { + const ch2 = path.charCodeAt(2); + if (ch2 === 47 /* slash */ || ch2 === 92 /* backslash */) return 3; + if (path.length === 2) return 2; + } + const schemeEnd = path.indexOf(urlSchemeSeparator); + if (schemeEnd !== -1) { + const authorityStart = schemeEnd + urlSchemeSeparator.length; + const authorityEnd = path.indexOf(directorySeparator, authorityStart); + if (authorityEnd !== -1) { + const scheme = path.slice(0, schemeEnd); + const authority = path.slice(authorityStart, authorityEnd); + if (scheme === "file" && (authority === "" || authority === "localhost") && isVolumeCharacter(path.charCodeAt(authorityEnd + 1))) { + const volumeSeparatorEnd = getFileUrlVolumeSeparatorEnd(path, authorityEnd + 2); + if (volumeSeparatorEnd !== -1) { + if (path.charCodeAt(volumeSeparatorEnd) === 47 /* slash */) { + return ~(volumeSeparatorEnd + 1); + } + if (volumeSeparatorEnd === path.length) { + return ~volumeSeparatorEnd; + } + } + } + return ~(authorityEnd + 1); + } + return ~path.length; + } + return 0; +} +function getRootLength(path) { + const rootLength = getEncodedRootLength(path); + return rootLength < 0 ? ~rootLength : rootLength; +} +function getDirectoryPath(path) { + path = normalizeSlashes(path); + const rootLength = getRootLength(path); + if (rootLength === path.length) return path; + path = removeTrailingDirectorySeparator(path); + return path.slice(0, Math.max(rootLength, path.lastIndexOf(directorySeparator))); +} +function getBaseFileName(path, extensions, ignoreCase) { + path = normalizeSlashes(path); + const rootLength = getRootLength(path); + if (rootLength === path.length) return ""; + path = removeTrailingDirectorySeparator(path); + const name = path.slice(Math.max(getRootLength(path), path.lastIndexOf(directorySeparator) + 1)); + const extension = extensions !== void 0 && ignoreCase !== void 0 ? getAnyExtensionFromPath(name, extensions, ignoreCase) : void 0; + return extension ? name.slice(0, name.length - extension.length) : name; +} +function tryGetExtensionFromPath(path, extension, stringEqualityComparer) { + if (!startsWith(extension, ".")) extension = "." + extension; + if (path.length >= extension.length && path.charCodeAt(path.length - extension.length) === 46 /* dot */) { + const pathExtension = path.slice(path.length - extension.length); + if (stringEqualityComparer(pathExtension, extension)) { + return pathExtension; + } + } +} +function getAnyExtensionFromPathWorker(path, extensions, stringEqualityComparer) { + if (typeof extensions === "string") { + return tryGetExtensionFromPath(path, extensions, stringEqualityComparer) || ""; + } + for (const extension of extensions) { + const result = tryGetExtensionFromPath(path, extension, stringEqualityComparer); + if (result) return result; + } + return ""; +} +function getAnyExtensionFromPath(path, extensions, ignoreCase) { + if (extensions) { + return getAnyExtensionFromPathWorker(removeTrailingDirectorySeparator(path), extensions, ignoreCase ? equateStringsCaseInsensitive : equateStringsCaseSensitive); + } + const baseFileName = getBaseFileName(path); + const extensionIndex = baseFileName.lastIndexOf("."); + if (extensionIndex >= 0) { + return baseFileName.substring(extensionIndex); + } + return ""; +} +function pathComponents(path, rootLength) { + const root = path.substring(0, rootLength); + const rest = path.substring(rootLength).split(directorySeparator); + if (rest.length && !lastOrUndefined(rest)) rest.pop(); + return [root, ...rest]; +} +function getPathComponents(path, currentDirectory = "") { + path = combinePaths(currentDirectory, path); + return pathComponents(path, getRootLength(path)); +} +function getPathFromPathComponents(pathComponents2, length2) { + if (pathComponents2.length === 0) return ""; + const root = pathComponents2[0] && ensureTrailingDirectorySeparator(pathComponents2[0]); + return root + pathComponents2.slice(1, length2).join(directorySeparator); +} +function normalizeSlashes(path) { + return path.includes("\\") ? path.replace(backslashRegExp, directorySeparator) : path; +} +function reducePathComponents(components) { + if (!some(components)) return []; + const reduced = [components[0]]; + for (let i = 1; i < components.length; i++) { + const component = components[i]; + if (!component) continue; + if (component === ".") continue; + if (component === "..") { + if (reduced.length > 1) { + if (reduced[reduced.length - 1] !== "..") { + reduced.pop(); + continue; + } + } else if (reduced[0]) continue; + } + reduced.push(component); + } + return reduced; +} +function combinePaths(path, ...paths) { + if (path) path = normalizeSlashes(path); + for (let relativePath of paths) { + if (!relativePath) continue; + relativePath = normalizeSlashes(relativePath); + if (!path || getRootLength(relativePath) !== 0) { + path = relativePath; + } else { + path = ensureTrailingDirectorySeparator(path) + relativePath; + } + } + return path; +} +function resolvePath(path, ...paths) { + return normalizePath(some(paths) ? combinePaths(path, ...paths) : normalizeSlashes(path)); +} +function getNormalizedPathComponents(path, currentDirectory) { + return reducePathComponents(getPathComponents(path, currentDirectory)); +} +function getNormalizedAbsolutePath(path, currentDirectory) { + let rootLength = getRootLength(path); + if (rootLength === 0 && currentDirectory) { + path = combinePaths(currentDirectory, path); + rootLength = getRootLength(path); + } else { + path = normalizeSlashes(path); + } + const simpleNormalized = simpleNormalizePath(path); + if (simpleNormalized !== void 0) { + return simpleNormalized.length > rootLength ? removeTrailingDirectorySeparator(simpleNormalized) : simpleNormalized; + } + const length2 = path.length; + const root = path.substring(0, rootLength); + let normalized; + let index = rootLength; + let segmentStart = index; + let normalizedUpTo = index; + let seenNonDotDotSegment = rootLength !== 0; + while (index < length2) { + segmentStart = index; + let ch = path.charCodeAt(index); + while (ch === 47 /* slash */ && index + 1 < length2) { + index++; + ch = path.charCodeAt(index); + } + if (index > segmentStart) { + normalized ?? (normalized = path.substring(0, segmentStart - 1)); + segmentStart = index; + } + let segmentEnd = path.indexOf(directorySeparator, index + 1); + if (segmentEnd === -1) { + segmentEnd = length2; + } + const segmentLength = segmentEnd - segmentStart; + if (segmentLength === 1 && path.charCodeAt(index) === 46 /* dot */) { + normalized ?? (normalized = path.substring(0, normalizedUpTo)); + } else if (segmentLength === 2 && path.charCodeAt(index) === 46 /* dot */ && path.charCodeAt(index + 1) === 46 /* dot */) { + if (!seenNonDotDotSegment) { + if (normalized !== void 0) { + normalized += normalized.length === rootLength ? ".." : "/.."; + } else { + normalizedUpTo = index + 2; + } + } else if (normalized === void 0) { + if (normalizedUpTo - 2 >= 0) { + normalized = path.substring(0, Math.max(rootLength, path.lastIndexOf(directorySeparator, normalizedUpTo - 2))); + } else { + normalized = path.substring(0, normalizedUpTo); + } + } else { + const lastSlash = normalized.lastIndexOf(directorySeparator); + if (lastSlash !== -1) { + normalized = normalized.substring(0, Math.max(rootLength, lastSlash)); + } else { + normalized = root; + } + if (normalized.length === rootLength) { + seenNonDotDotSegment = rootLength !== 0; + } + } + } else if (normalized !== void 0) { + if (normalized.length !== rootLength) { + normalized += directorySeparator; + } + seenNonDotDotSegment = true; + normalized += path.substring(segmentStart, segmentEnd); + } else { + seenNonDotDotSegment = true; + normalizedUpTo = segmentEnd; + } + index = segmentEnd + 1; + } + return normalized ?? (length2 > rootLength ? removeTrailingDirectorySeparator(path) : path); +} +function normalizePath(path) { + path = normalizeSlashes(path); + let normalized = simpleNormalizePath(path); + if (normalized !== void 0) { + return normalized; + } + normalized = getNormalizedAbsolutePath(path, ""); + return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized; +} +function simpleNormalizePath(path) { + if (!relativePathSegmentRegExp.test(path)) { + return path; + } + let simplified = path.replace(/\/\.\//g, "/"); + if (simplified.startsWith("./")) { + simplified = simplified.slice(2); + } + if (simplified !== path) { + path = simplified; + if (!relativePathSegmentRegExp.test(path)) { + return path; + } + } + return void 0; +} +function getPathWithoutRoot(pathComponents2) { + if (pathComponents2.length === 0) return ""; + return pathComponents2.slice(1).join(directorySeparator); +} +function getNormalizedAbsolutePathWithoutRoot(fileName, currentDirectory) { + return getPathWithoutRoot(getNormalizedPathComponents(fileName, currentDirectory)); +} +function toPath(fileName, basePath, getCanonicalFileName) { + const nonCanonicalizedPath = isRootedDiskPath(fileName) ? normalizePath(fileName) : getNormalizedAbsolutePath(fileName, basePath); + return getCanonicalFileName(nonCanonicalizedPath); +} +function removeTrailingDirectorySeparator(path) { + if (hasTrailingDirectorySeparator(path)) { + return path.substr(0, path.length - 1); + } + return path; +} +function ensureTrailingDirectorySeparator(path) { + if (!hasTrailingDirectorySeparator(path)) { + return path + directorySeparator; + } + return path; +} +function ensurePathIsNonModuleName(path) { + return !pathIsAbsolute(path) && !pathIsRelative(path) ? "./" + path : path; +} +function changeAnyExtension(path, ext, extensions, ignoreCase) { + const pathext = extensions !== void 0 && ignoreCase !== void 0 ? getAnyExtensionFromPath(path, extensions, ignoreCase) : getAnyExtensionFromPath(path); + return pathext ? path.slice(0, path.length - pathext.length) + (startsWith(ext, ".") ? ext : "." + ext) : path; +} +function changeFullExtension(path, newExtension) { + const declarationExtension = getDeclarationFileExtension(path); + if (declarationExtension) { + return path.slice(0, path.length - declarationExtension.length) + (startsWith(newExtension, ".") ? newExtension : "." + newExtension); + } + return changeAnyExtension(path, newExtension); +} +var relativePathSegmentRegExp = /\/\/|(?:^|\/)\.\.?(?:$|\/)/; +function comparePathsWorker(a, b, componentComparer) { + if (a === b) return 0 /* EqualTo */; + if (a === void 0) return -1 /* LessThan */; + if (b === void 0) return 1 /* GreaterThan */; + const aRoot = a.substring(0, getRootLength(a)); + const bRoot = b.substring(0, getRootLength(b)); + const result = compareStringsCaseInsensitive(aRoot, bRoot); + if (result !== 0 /* EqualTo */) { + return result; + } + const aRest = a.substring(aRoot.length); + const bRest = b.substring(bRoot.length); + if (!relativePathSegmentRegExp.test(aRest) && !relativePathSegmentRegExp.test(bRest)) { + return componentComparer(aRest, bRest); + } + const aComponents = reducePathComponents(getPathComponents(a)); + const bComponents = reducePathComponents(getPathComponents(b)); + const sharedLength = Math.min(aComponents.length, bComponents.length); + for (let i = 1; i < sharedLength; i++) { + const result2 = componentComparer(aComponents[i], bComponents[i]); + if (result2 !== 0 /* EqualTo */) { + return result2; + } + } + return compareValues(aComponents.length, bComponents.length); +} +function comparePathsCaseSensitive(a, b) { + return comparePathsWorker(a, b, compareStringsCaseSensitive); +} +function comparePathsCaseInsensitive(a, b) { + return comparePathsWorker(a, b, compareStringsCaseInsensitive); +} +function comparePaths(a, b, currentDirectory, ignoreCase) { + if (typeof currentDirectory === "string") { + a = combinePaths(currentDirectory, a); + b = combinePaths(currentDirectory, b); + } else if (typeof currentDirectory === "boolean") { + ignoreCase = currentDirectory; + } + return comparePathsWorker(a, b, getStringComparer(ignoreCase)); +} +function containsPath(parent2, child, currentDirectory, ignoreCase) { + if (typeof currentDirectory === "string") { + parent2 = combinePaths(currentDirectory, parent2); + child = combinePaths(currentDirectory, child); + } else if (typeof currentDirectory === "boolean") { + ignoreCase = currentDirectory; + } + if (parent2 === void 0 || child === void 0) return false; + if (parent2 === child) return true; + const parentComponents = reducePathComponents(getPathComponents(parent2)); + const childComponents = reducePathComponents(getPathComponents(child)); + if (childComponents.length < parentComponents.length) { + return false; + } + const componentEqualityComparer = ignoreCase ? equateStringsCaseInsensitive : equateStringsCaseSensitive; + for (let i = 0; i < parentComponents.length; i++) { + const equalityComparer = i === 0 ? equateStringsCaseInsensitive : componentEqualityComparer; + if (!equalityComparer(parentComponents[i], childComponents[i])) { + return false; + } + } + return true; +} +function startsWithDirectory(fileName, directoryName, getCanonicalFileName) { + const canonicalFileName = getCanonicalFileName(fileName); + const canonicalDirectoryName = getCanonicalFileName(directoryName); + return startsWith(canonicalFileName, canonicalDirectoryName + "/") || startsWith(canonicalFileName, canonicalDirectoryName + "\\"); +} +function getPathComponentsRelativeTo(from, to, stringEqualityComparer, getCanonicalFileName) { + const fromComponents = reducePathComponents(getPathComponents(from)); + const toComponents = reducePathComponents(getPathComponents(to)); + let start; + for (start = 0; start < fromComponents.length && start < toComponents.length; start++) { + const fromComponent = getCanonicalFileName(fromComponents[start]); + const toComponent = getCanonicalFileName(toComponents[start]); + const comparer = start === 0 ? equateStringsCaseInsensitive : stringEqualityComparer; + if (!comparer(fromComponent, toComponent)) break; + } + if (start === 0) { + return toComponents; + } + const components = toComponents.slice(start); + const relative = []; + for (; start < fromComponents.length; start++) { + relative.push(".."); + } + return ["", ...relative, ...components]; +} +function getRelativePathFromDirectory(fromDirectory, to, getCanonicalFileNameOrIgnoreCase) { + Debug.assert(getRootLength(fromDirectory) > 0 === getRootLength(to) > 0, "Paths must either both be absolute or both be relative"); + const getCanonicalFileName = typeof getCanonicalFileNameOrIgnoreCase === "function" ? getCanonicalFileNameOrIgnoreCase : identity; + const ignoreCase = typeof getCanonicalFileNameOrIgnoreCase === "boolean" ? getCanonicalFileNameOrIgnoreCase : false; + const pathComponents2 = getPathComponentsRelativeTo(fromDirectory, to, ignoreCase ? equateStringsCaseInsensitive : equateStringsCaseSensitive, getCanonicalFileName); + return getPathFromPathComponents(pathComponents2); +} +function convertToRelativePath(absoluteOrRelativePath, basePath, getCanonicalFileName) { + return !isRootedDiskPath(absoluteOrRelativePath) ? absoluteOrRelativePath : getRelativePathToDirectoryOrUrl( + basePath, + absoluteOrRelativePath, + basePath, + getCanonicalFileName, + /*isAbsolutePathAnUrl*/ + false + ); +} +function getRelativePathFromFile(from, to, getCanonicalFileName) { + return ensurePathIsNonModuleName(getRelativePathFromDirectory(getDirectoryPath(from), to, getCanonicalFileName)); +} +function getRelativePathToDirectoryOrUrl(directoryPathOrUrl, relativeOrAbsolutePath, currentDirectory, getCanonicalFileName, isAbsolutePathAnUrl) { + const pathComponents2 = getPathComponentsRelativeTo( + resolvePath(currentDirectory, directoryPathOrUrl), + resolvePath(currentDirectory, relativeOrAbsolutePath), + equateStringsCaseSensitive, + getCanonicalFileName + ); + const firstComponent = pathComponents2[0]; + if (isAbsolutePathAnUrl && isRootedDiskPath(firstComponent)) { + const prefix = firstComponent.charAt(0) === directorySeparator ? "file://" : "file:///"; + pathComponents2[0] = prefix + firstComponent; + } + return getPathFromPathComponents(pathComponents2); +} +function forEachAncestorDirectory(directory, callback) { + while (true) { + const result = callback(directory); + if (result !== void 0) { + return result; + } + const parentPath = getDirectoryPath(directory); + if (parentPath === directory) { + return void 0; + } + directory = parentPath; + } +} +function isNodeModulesDirectory(dirPath) { + return endsWith(dirPath, "/node_modules"); +} + +// src/compiler/diagnosticInformationMap.generated.ts +function diag(code, category, key, message, reportsUnnecessary, elidedInCompatabilityPyramid, reportsDeprecated) { + return { code, category, key, message, reportsUnnecessary, elidedInCompatabilityPyramid, reportsDeprecated }; +} +var Diagnostics = { + Unterminated_string_literal: diag(1002, 1 /* Error */, "Unterminated_string_literal_1002", "Unterminated string literal."), + Identifier_expected: diag(1003, 1 /* Error */, "Identifier_expected_1003", "Identifier expected."), + _0_expected: diag(1005, 1 /* Error */, "_0_expected_1005", "'{0}' expected."), + A_file_cannot_have_a_reference_to_itself: diag(1006, 1 /* Error */, "A_file_cannot_have_a_reference_to_itself_1006", "A file cannot have a reference to itself."), + The_parser_expected_to_find_a_1_to_match_the_0_token_here: diag(1007, 1 /* Error */, "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007", "The parser expected to find a '{1}' to match the '{0}' token here."), + Trailing_comma_not_allowed: diag(1009, 1 /* Error */, "Trailing_comma_not_allowed_1009", "Trailing comma not allowed."), + Asterisk_Slash_expected: diag(1010, 1 /* Error */, "Asterisk_Slash_expected_1010", "'*/' expected."), + An_element_access_expression_should_take_an_argument: diag(1011, 1 /* Error */, "An_element_access_expression_should_take_an_argument_1011", "An element access expression should take an argument."), + Unexpected_token: diag(1012, 1 /* Error */, "Unexpected_token_1012", "Unexpected token."), + A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma: diag(1013, 1 /* Error */, "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013", "A rest parameter or binding pattern may not have a trailing comma."), + A_rest_parameter_must_be_last_in_a_parameter_list: diag(1014, 1 /* Error */, "A_rest_parameter_must_be_last_in_a_parameter_list_1014", "A rest parameter must be last in a parameter list."), + Parameter_cannot_have_question_mark_and_initializer: diag(1015, 1 /* Error */, "Parameter_cannot_have_question_mark_and_initializer_1015", "Parameter cannot have question mark and initializer."), + A_required_parameter_cannot_follow_an_optional_parameter: diag(1016, 1 /* Error */, "A_required_parameter_cannot_follow_an_optional_parameter_1016", "A required parameter cannot follow an optional parameter."), + An_index_signature_cannot_have_a_rest_parameter: diag(1017, 1 /* Error */, "An_index_signature_cannot_have_a_rest_parameter_1017", "An index signature cannot have a rest parameter."), + An_index_signature_parameter_cannot_have_an_accessibility_modifier: diag(1018, 1 /* Error */, "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018", "An index signature parameter cannot have an accessibility modifier."), + An_index_signature_parameter_cannot_have_a_question_mark: diag(1019, 1 /* Error */, "An_index_signature_parameter_cannot_have_a_question_mark_1019", "An index signature parameter cannot have a question mark."), + An_index_signature_parameter_cannot_have_an_initializer: diag(1020, 1 /* Error */, "An_index_signature_parameter_cannot_have_an_initializer_1020", "An index signature parameter cannot have an initializer."), + An_index_signature_must_have_a_type_annotation: diag(1021, 1 /* Error */, "An_index_signature_must_have_a_type_annotation_1021", "An index signature must have a type annotation."), + An_index_signature_parameter_must_have_a_type_annotation: diag(1022, 1 /* Error */, "An_index_signature_parameter_must_have_a_type_annotation_1022", "An index signature parameter must have a type annotation."), + readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature: diag(1024, 1 /* Error */, "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024", "'readonly' modifier can only appear on a property declaration or index signature."), + An_index_signature_cannot_have_a_trailing_comma: diag(1025, 1 /* Error */, "An_index_signature_cannot_have_a_trailing_comma_1025", "An index signature cannot have a trailing comma."), + Accessibility_modifier_already_seen: diag(1028, 1 /* Error */, "Accessibility_modifier_already_seen_1028", "Accessibility modifier already seen."), + _0_modifier_must_precede_1_modifier: diag(1029, 1 /* Error */, "_0_modifier_must_precede_1_modifier_1029", "'{0}' modifier must precede '{1}' modifier."), + _0_modifier_already_seen: diag(1030, 1 /* Error */, "_0_modifier_already_seen_1030", "'{0}' modifier already seen."), + _0_modifier_cannot_appear_on_class_elements_of_this_kind: diag(1031, 1 /* Error */, "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031", "'{0}' modifier cannot appear on class elements of this kind."), + super_must_be_followed_by_an_argument_list_or_member_access: diag(1034, 1 /* Error */, "super_must_be_followed_by_an_argument_list_or_member_access_1034", "'super' must be followed by an argument list or member access."), + Only_ambient_modules_can_use_quoted_names: diag(1035, 1 /* Error */, "Only_ambient_modules_can_use_quoted_names_1035", "Only ambient modules can use quoted names."), + Statements_are_not_allowed_in_ambient_contexts: diag(1036, 1 /* Error */, "Statements_are_not_allowed_in_ambient_contexts_1036", "Statements are not allowed in ambient contexts."), + A_declare_modifier_cannot_be_used_in_an_already_ambient_context: diag(1038, 1 /* Error */, "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038", "A 'declare' modifier cannot be used in an already ambient context."), + Initializers_are_not_allowed_in_ambient_contexts: diag(1039, 1 /* Error */, "Initializers_are_not_allowed_in_ambient_contexts_1039", "Initializers are not allowed in ambient contexts."), + _0_modifier_cannot_be_used_in_an_ambient_context: diag(1040, 1 /* Error */, "_0_modifier_cannot_be_used_in_an_ambient_context_1040", "'{0}' modifier cannot be used in an ambient context."), + _0_modifier_cannot_be_used_here: diag(1042, 1 /* Error */, "_0_modifier_cannot_be_used_here_1042", "'{0}' modifier cannot be used here."), + _0_modifier_cannot_appear_on_a_module_or_namespace_element: diag(1044, 1 /* Error */, "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044", "'{0}' modifier cannot appear on a module or namespace element."), + Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier: diag(1046, 1 /* Error */, "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046", "Top-level declarations in .d.ts files must start with either a 'declare' or 'export' modifier."), + A_rest_parameter_cannot_be_optional: diag(1047, 1 /* Error */, "A_rest_parameter_cannot_be_optional_1047", "A rest parameter cannot be optional."), + A_rest_parameter_cannot_have_an_initializer: diag(1048, 1 /* Error */, "A_rest_parameter_cannot_have_an_initializer_1048", "A rest parameter cannot have an initializer."), + A_set_accessor_must_have_exactly_one_parameter: diag(1049, 1 /* Error */, "A_set_accessor_must_have_exactly_one_parameter_1049", "A 'set' accessor must have exactly one parameter."), + A_set_accessor_cannot_have_an_optional_parameter: diag(1051, 1 /* Error */, "A_set_accessor_cannot_have_an_optional_parameter_1051", "A 'set' accessor cannot have an optional parameter."), + A_set_accessor_parameter_cannot_have_an_initializer: diag(1052, 1 /* Error */, "A_set_accessor_parameter_cannot_have_an_initializer_1052", "A 'set' accessor parameter cannot have an initializer."), + A_set_accessor_cannot_have_rest_parameter: diag(1053, 1 /* Error */, "A_set_accessor_cannot_have_rest_parameter_1053", "A 'set' accessor cannot have rest parameter."), + A_get_accessor_cannot_have_parameters: diag(1054, 1 /* Error */, "A_get_accessor_cannot_have_parameters_1054", "A 'get' accessor cannot have parameters."), + Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compatible_constructor_value: diag(1055, 1 /* Error */, "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055", "Type '{0}' is not a valid async function return type in ES5 because it does not refer to a Promise-compatible constructor value."), + Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher: diag(1056, 1 /* Error */, "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056", "Accessors are only available when targeting ECMAScript 5 and higher."), + The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1058, 1 /* Error */, "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058", "The return type of an async function must either be a valid promise or must not contain a callable 'then' member."), + A_promise_must_have_a_then_method: diag(1059, 1 /* Error */, "A_promise_must_have_a_then_method_1059", "A promise must have a 'then' method."), + The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback: diag(1060, 1 /* Error */, "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060", "The first parameter of the 'then' method of a promise must be a callback."), + Enum_member_must_have_initializer: diag(1061, 1 /* Error */, "Enum_member_must_have_initializer_1061", "Enum member must have initializer."), + Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method: diag(1062, 1 /* Error */, "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062", "Type is referenced directly or indirectly in the fulfillment callback of its own 'then' method."), + An_export_assignment_cannot_be_used_in_a_namespace: diag(1063, 1 /* Error */, "An_export_assignment_cannot_be_used_in_a_namespace_1063", "An export assignment cannot be used in a namespace."), + The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0: diag(1064, 1 /* Error */, "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064", "The return type of an async function or method must be the global Promise type. Did you mean to write 'Promise<{0}>'?"), + The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type: diag(1065, 1 /* Error */, "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065", "The return type of an async function or method must be the global Promise type."), + In_ambient_enum_declarations_member_initializer_must_be_constant_expression: diag(1066, 1 /* Error */, "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066", "In ambient enum declarations member initializer must be constant expression."), + Unexpected_token_A_constructor_method_accessor_or_property_was_expected: diag(1068, 1 /* Error */, "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068", "Unexpected token. A constructor, method, accessor, or property was expected."), + Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces: diag(1069, 1 /* Error */, "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069", "Unexpected token. A type parameter name was expected without curly braces."), + _0_modifier_cannot_appear_on_a_type_member: diag(1070, 1 /* Error */, "_0_modifier_cannot_appear_on_a_type_member_1070", "'{0}' modifier cannot appear on a type member."), + _0_modifier_cannot_appear_on_an_index_signature: diag(1071, 1 /* Error */, "_0_modifier_cannot_appear_on_an_index_signature_1071", "'{0}' modifier cannot appear on an index signature."), + A_0_modifier_cannot_be_used_with_an_import_declaration: diag(1079, 1 /* Error */, "A_0_modifier_cannot_be_used_with_an_import_declaration_1079", "A '{0}' modifier cannot be used with an import declaration."), + Invalid_reference_directive_syntax: diag(1084, 1 /* Error */, "Invalid_reference_directive_syntax_1084", "Invalid 'reference' directive syntax."), + _0_modifier_cannot_appear_on_a_constructor_declaration: diag(1089, 1 /* Error */, "_0_modifier_cannot_appear_on_a_constructor_declaration_1089", "'{0}' modifier cannot appear on a constructor declaration."), + _0_modifier_cannot_appear_on_a_parameter: diag(1090, 1 /* Error */, "_0_modifier_cannot_appear_on_a_parameter_1090", "'{0}' modifier cannot appear on a parameter."), + Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement: diag(1091, 1 /* Error */, "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091", "Only a single variable declaration is allowed in a 'for...in' statement."), + Type_parameters_cannot_appear_on_a_constructor_declaration: diag(1092, 1 /* Error */, "Type_parameters_cannot_appear_on_a_constructor_declaration_1092", "Type parameters cannot appear on a constructor declaration."), + Type_annotation_cannot_appear_on_a_constructor_declaration: diag(1093, 1 /* Error */, "Type_annotation_cannot_appear_on_a_constructor_declaration_1093", "Type annotation cannot appear on a constructor declaration."), + An_accessor_cannot_have_type_parameters: diag(1094, 1 /* Error */, "An_accessor_cannot_have_type_parameters_1094", "An accessor cannot have type parameters."), + A_set_accessor_cannot_have_a_return_type_annotation: diag(1095, 1 /* Error */, "A_set_accessor_cannot_have_a_return_type_annotation_1095", "A 'set' accessor cannot have a return type annotation."), + An_index_signature_must_have_exactly_one_parameter: diag(1096, 1 /* Error */, "An_index_signature_must_have_exactly_one_parameter_1096", "An index signature must have exactly one parameter."), + _0_list_cannot_be_empty: diag(1097, 1 /* Error */, "_0_list_cannot_be_empty_1097", "'{0}' list cannot be empty."), + Type_parameter_list_cannot_be_empty: diag(1098, 1 /* Error */, "Type_parameter_list_cannot_be_empty_1098", "Type parameter list cannot be empty."), + Type_argument_list_cannot_be_empty: diag(1099, 1 /* Error */, "Type_argument_list_cannot_be_empty_1099", "Type argument list cannot be empty."), + Invalid_use_of_0_in_strict_mode: diag(1100, 1 /* Error */, "Invalid_use_of_0_in_strict_mode_1100", "Invalid use of '{0}' in strict mode."), + with_statements_are_not_allowed_in_strict_mode: diag(1101, 1 /* Error */, "with_statements_are_not_allowed_in_strict_mode_1101", "'with' statements are not allowed in strict mode."), + delete_cannot_be_called_on_an_identifier_in_strict_mode: diag(1102, 1 /* Error */, "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102", "'delete' cannot be called on an identifier in strict mode."), + for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1103, 1 /* Error */, "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103", "'for await' loops are only allowed within async functions and at the top levels of modules."), + A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement: diag(1104, 1 /* Error */, "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104", "A 'continue' statement can only be used within an enclosing iteration statement."), + A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement: diag(1105, 1 /* Error */, "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105", "A 'break' statement can only be used within an enclosing iteration or switch statement."), + The_left_hand_side_of_a_for_of_statement_may_not_be_async: diag(1106, 1 /* Error */, "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106", "The left-hand side of a 'for...of' statement may not be 'async'."), + Jump_target_cannot_cross_function_boundary: diag(1107, 1 /* Error */, "Jump_target_cannot_cross_function_boundary_1107", "Jump target cannot cross function boundary."), + A_return_statement_can_only_be_used_within_a_function_body: diag(1108, 1 /* Error */, "A_return_statement_can_only_be_used_within_a_function_body_1108", "A 'return' statement can only be used within a function body."), + Expression_expected: diag(1109, 1 /* Error */, "Expression_expected_1109", "Expression expected."), + Type_expected: diag(1110, 1 /* Error */, "Type_expected_1110", "Type expected."), + Private_field_0_must_be_declared_in_an_enclosing_class: diag(1111, 1 /* Error */, "Private_field_0_must_be_declared_in_an_enclosing_class_1111", "Private field '{0}' must be declared in an enclosing class."), + A_default_clause_cannot_appear_more_than_once_in_a_switch_statement: diag(1113, 1 /* Error */, "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113", "A 'default' clause cannot appear more than once in a 'switch' statement."), + Duplicate_label_0: diag(1114, 1 /* Error */, "Duplicate_label_0_1114", "Duplicate label '{0}'."), + A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement: diag(1115, 1 /* Error */, "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115", "A 'continue' statement can only jump to a label of an enclosing iteration statement."), + A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement: diag(1116, 1 /* Error */, "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116", "A 'break' statement can only jump to a label of an enclosing statement."), + An_object_literal_cannot_have_multiple_properties_with_the_same_name: diag(1117, 1 /* Error */, "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117", "An object literal cannot have multiple properties with the same name."), + An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name: diag(1118, 1 /* Error */, "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118", "An object literal cannot have multiple get/set accessors with the same name."), + An_object_literal_cannot_have_property_and_accessor_with_the_same_name: diag(1119, 1 /* Error */, "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119", "An object literal cannot have property and accessor with the same name."), + An_export_assignment_cannot_have_modifiers: diag(1120, 1 /* Error */, "An_export_assignment_cannot_have_modifiers_1120", "An export assignment cannot have modifiers."), + Octal_literals_are_not_allowed_Use_the_syntax_0: diag(1121, 1 /* Error */, "Octal_literals_are_not_allowed_Use_the_syntax_0_1121", "Octal literals are not allowed. Use the syntax '{0}'."), + Variable_declaration_list_cannot_be_empty: diag(1123, 1 /* Error */, "Variable_declaration_list_cannot_be_empty_1123", "Variable declaration list cannot be empty."), + Digit_expected: diag(1124, 1 /* Error */, "Digit_expected_1124", "Digit expected."), + Hexadecimal_digit_expected: diag(1125, 1 /* Error */, "Hexadecimal_digit_expected_1125", "Hexadecimal digit expected."), + Unexpected_end_of_text: diag(1126, 1 /* Error */, "Unexpected_end_of_text_1126", "Unexpected end of text."), + Invalid_character: diag(1127, 1 /* Error */, "Invalid_character_1127", "Invalid character."), + Declaration_or_statement_expected: diag(1128, 1 /* Error */, "Declaration_or_statement_expected_1128", "Declaration or statement expected."), + Statement_expected: diag(1129, 1 /* Error */, "Statement_expected_1129", "Statement expected."), + case_or_default_expected: diag(1130, 1 /* Error */, "case_or_default_expected_1130", "'case' or 'default' expected."), + Property_or_signature_expected: diag(1131, 1 /* Error */, "Property_or_signature_expected_1131", "Property or signature expected."), + Enum_member_expected: diag(1132, 1 /* Error */, "Enum_member_expected_1132", "Enum member expected."), + Variable_declaration_expected: diag(1134, 1 /* Error */, "Variable_declaration_expected_1134", "Variable declaration expected."), + Argument_expression_expected: diag(1135, 1 /* Error */, "Argument_expression_expected_1135", "Argument expression expected."), + Property_assignment_expected: diag(1136, 1 /* Error */, "Property_assignment_expected_1136", "Property assignment expected."), + Expression_or_comma_expected: diag(1137, 1 /* Error */, "Expression_or_comma_expected_1137", "Expression or comma expected."), + Parameter_declaration_expected: diag(1138, 1 /* Error */, "Parameter_declaration_expected_1138", "Parameter declaration expected."), + Type_parameter_declaration_expected: diag(1139, 1 /* Error */, "Type_parameter_declaration_expected_1139", "Type parameter declaration expected."), + Type_argument_expected: diag(1140, 1 /* Error */, "Type_argument_expected_1140", "Type argument expected."), + String_literal_expected: diag(1141, 1 /* Error */, "String_literal_expected_1141", "String literal expected."), + Line_break_not_permitted_here: diag(1142, 1 /* Error */, "Line_break_not_permitted_here_1142", "Line break not permitted here."), + or_expected: diag(1144, 1 /* Error */, "or_expected_1144", "'{' or ';' expected."), + or_JSX_element_expected: diag(1145, 1 /* Error */, "or_JSX_element_expected_1145", "'{' or JSX element expected."), + Declaration_expected: diag(1146, 1 /* Error */, "Declaration_expected_1146", "Declaration expected."), + Import_declarations_in_a_namespace_cannot_reference_a_module: diag(1147, 1 /* Error */, "Import_declarations_in_a_namespace_cannot_reference_a_module_1147", "Import declarations in a namespace cannot reference a module."), + Cannot_use_imports_exports_or_module_augmentations_when_module_is_none: diag(1148, 1 /* Error */, "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148", "Cannot use imports, exports, or module augmentations when '--module' is 'none'."), + File_name_0_differs_from_already_included_file_name_1_only_in_casing: diag(1149, 1 /* Error */, "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149", "File name '{0}' differs from already included file name '{1}' only in casing."), + _0_declarations_must_be_initialized: diag(1155, 1 /* Error */, "_0_declarations_must_be_initialized_1155", "'{0}' declarations must be initialized."), + _0_declarations_can_only_be_declared_inside_a_block: diag(1156, 1 /* Error */, "_0_declarations_can_only_be_declared_inside_a_block_1156", "'{0}' declarations can only be declared inside a block."), + Unterminated_template_literal: diag(1160, 1 /* Error */, "Unterminated_template_literal_1160", "Unterminated template literal."), + Unterminated_regular_expression_literal: diag(1161, 1 /* Error */, "Unterminated_regular_expression_literal_1161", "Unterminated regular expression literal."), + An_object_member_cannot_be_declared_optional: diag(1162, 1 /* Error */, "An_object_member_cannot_be_declared_optional_1162", "An object member cannot be declared optional."), + A_yield_expression_is_only_allowed_in_a_generator_body: diag(1163, 1 /* Error */, "A_yield_expression_is_only_allowed_in_a_generator_body_1163", "A 'yield' expression is only allowed in a generator body."), + Computed_property_names_are_not_allowed_in_enums: diag(1164, 1 /* Error */, "Computed_property_names_are_not_allowed_in_enums_1164", "Computed property names are not allowed in enums."), + A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1165, 1 /* Error */, "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165", "A computed property name in an ambient context must refer to an expression whose type is a literal type or a 'unique symbol' type."), + A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type: diag(1166, 1 /* Error */, "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166", "A computed property name in a class property declaration must have a simple literal type or a 'unique symbol' type."), + A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1168, 1 /* Error */, "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168", "A computed property name in a method overload must refer to an expression whose type is a literal type or a 'unique symbol' type."), + A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1169, 1 /* Error */, "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169", "A computed property name in an interface must refer to an expression whose type is a literal type or a 'unique symbol' type."), + A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type: diag(1170, 1 /* Error */, "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170", "A computed property name in a type literal must refer to an expression whose type is a literal type or a 'unique symbol' type."), + A_comma_expression_is_not_allowed_in_a_computed_property_name: diag(1171, 1 /* Error */, "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171", "A comma expression is not allowed in a computed property name."), + extends_clause_already_seen: diag(1172, 1 /* Error */, "extends_clause_already_seen_1172", "'extends' clause already seen."), + extends_clause_must_precede_implements_clause: diag(1173, 1 /* Error */, "extends_clause_must_precede_implements_clause_1173", "'extends' clause must precede 'implements' clause."), + Classes_can_only_extend_a_single_class: diag(1174, 1 /* Error */, "Classes_can_only_extend_a_single_class_1174", "Classes can only extend a single class."), + implements_clause_already_seen: diag(1175, 1 /* Error */, "implements_clause_already_seen_1175", "'implements' clause already seen."), + Interface_declaration_cannot_have_implements_clause: diag(1176, 1 /* Error */, "Interface_declaration_cannot_have_implements_clause_1176", "Interface declaration cannot have 'implements' clause."), + Binary_digit_expected: diag(1177, 1 /* Error */, "Binary_digit_expected_1177", "Binary digit expected."), + Octal_digit_expected: diag(1178, 1 /* Error */, "Octal_digit_expected_1178", "Octal digit expected."), + Unexpected_token_expected: diag(1179, 1 /* Error */, "Unexpected_token_expected_1179", "Unexpected token. '{' expected."), + Property_destructuring_pattern_expected: diag(1180, 1 /* Error */, "Property_destructuring_pattern_expected_1180", "Property destructuring pattern expected."), + Array_element_destructuring_pattern_expected: diag(1181, 1 /* Error */, "Array_element_destructuring_pattern_expected_1181", "Array element destructuring pattern expected."), + A_destructuring_declaration_must_have_an_initializer: diag(1182, 1 /* Error */, "A_destructuring_declaration_must_have_an_initializer_1182", "A destructuring declaration must have an initializer."), + An_implementation_cannot_be_declared_in_ambient_contexts: diag(1183, 1 /* Error */, "An_implementation_cannot_be_declared_in_ambient_contexts_1183", "An implementation cannot be declared in ambient contexts."), + Modifiers_cannot_appear_here: diag(1184, 1 /* Error */, "Modifiers_cannot_appear_here_1184", "Modifiers cannot appear here."), + Merge_conflict_marker_encountered: diag(1185, 1 /* Error */, "Merge_conflict_marker_encountered_1185", "Merge conflict marker encountered."), + A_rest_element_cannot_have_an_initializer: diag(1186, 1 /* Error */, "A_rest_element_cannot_have_an_initializer_1186", "A rest element cannot have an initializer."), + A_parameter_property_may_not_be_declared_using_a_binding_pattern: diag(1187, 1 /* Error */, "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187", "A parameter property may not be declared using a binding pattern."), + Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement: diag(1188, 1 /* Error */, "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188", "Only a single variable declaration is allowed in a 'for...of' statement."), + The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer: diag(1189, 1 /* Error */, "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189", "The variable declaration of a 'for...in' statement cannot have an initializer."), + The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer: diag(1190, 1 /* Error */, "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190", "The variable declaration of a 'for...of' statement cannot have an initializer."), + An_import_declaration_cannot_have_modifiers: diag(1191, 1 /* Error */, "An_import_declaration_cannot_have_modifiers_1191", "An import declaration cannot have modifiers."), + Module_0_has_no_default_export: diag(1192, 1 /* Error */, "Module_0_has_no_default_export_1192", "Module '{0}' has no default export."), + An_export_declaration_cannot_have_modifiers: diag(1193, 1 /* Error */, "An_export_declaration_cannot_have_modifiers_1193", "An export declaration cannot have modifiers."), + Export_declarations_are_not_permitted_in_a_namespace: diag(1194, 1 /* Error */, "Export_declarations_are_not_permitted_in_a_namespace_1194", "Export declarations are not permitted in a namespace."), + export_Asterisk_does_not_re_export_a_default: diag(1195, 1 /* Error */, "export_Asterisk_does_not_re_export_a_default_1195", "'export *' does not re-export a default."), + Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified: diag(1196, 1 /* Error */, "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196", "Catch clause variable type annotation must be 'any' or 'unknown' if specified."), + Catch_clause_variable_cannot_have_an_initializer: diag(1197, 1 /* Error */, "Catch_clause_variable_cannot_have_an_initializer_1197", "Catch clause variable cannot have an initializer."), + An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive: diag(1198, 1 /* Error */, "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198", "An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive."), + Unterminated_Unicode_escape_sequence: diag(1199, 1 /* Error */, "Unterminated_Unicode_escape_sequence_1199", "Unterminated Unicode escape sequence."), + Line_terminator_not_permitted_before_arrow: diag(1200, 1 /* Error */, "Line_terminator_not_permitted_before_arrow_1200", "Line terminator not permitted before arrow."), + Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead: diag(1202, 1 /* Error */, "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202", `Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from "mod"', 'import {a} from "mod"', 'import d from "mod"', or another module format instead.`), + Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead: diag(1203, 1 /* Error */, "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203", "Export assignment cannot be used when targeting ECMAScript modules. Consider using 'export default' or another module format instead."), + Re_exporting_a_type_when_0_is_enabled_requires_using_export_type: diag(1205, 1 /* Error */, "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205", "Re-exporting a type when '{0}' is enabled requires using 'export type'."), + Decorators_are_not_valid_here: diag(1206, 1 /* Error */, "Decorators_are_not_valid_here_1206", "Decorators are not valid here."), + Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name: diag(1207, 1 /* Error */, "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207", "Decorators cannot be applied to multiple get/set accessors of the same name."), + Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0: diag(1209, 1 /* Error */, "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209", "Invalid optional chain from new expression. Did you mean to call '{0}()'?"), + Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode: diag(1210, 1 /* Error */, "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210", "Code contained in a class is evaluated in JavaScript's strict mode which does not allow this use of '{0}'. For more information, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode."), + A_class_declaration_without_the_default_modifier_must_have_a_name: diag(1211, 1 /* Error */, "A_class_declaration_without_the_default_modifier_must_have_a_name_1211", "A class declaration without the 'default' modifier must have a name."), + Identifier_expected_0_is_a_reserved_word_in_strict_mode: diag(1212, 1 /* Error */, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212", "Identifier expected. '{0}' is a reserved word in strict mode."), + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode: diag(1213, 1 /* Error */, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213", "Identifier expected. '{0}' is a reserved word in strict mode. Class definitions are automatically in strict mode."), + Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode: diag(1214, 1 /* Error */, "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214", "Identifier expected. '{0}' is a reserved word in strict mode. Modules are automatically in strict mode."), + Invalid_use_of_0_Modules_are_automatically_in_strict_mode: diag(1215, 1 /* Error */, "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215", "Invalid use of '{0}'. Modules are automatically in strict mode."), + Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules: diag(1216, 1 /* Error */, "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216", "Identifier expected. '__esModule' is reserved as an exported marker when transforming ECMAScript modules."), + Export_assignment_is_not_supported_when_module_flag_is_system: diag(1218, 1 /* Error */, "Export_assignment_is_not_supported_when_module_flag_is_system_1218", "Export assignment is not supported when '--module' flag is 'system'."), + Generators_are_not_allowed_in_an_ambient_context: diag(1221, 1 /* Error */, "Generators_are_not_allowed_in_an_ambient_context_1221", "Generators are not allowed in an ambient context."), + An_overload_signature_cannot_be_declared_as_a_generator: diag(1222, 1 /* Error */, "An_overload_signature_cannot_be_declared_as_a_generator_1222", "An overload signature cannot be declared as a generator."), + _0_tag_already_specified: diag(1223, 1 /* Error */, "_0_tag_already_specified_1223", "'{0}' tag already specified."), + Signature_0_must_be_a_type_predicate: diag(1224, 1 /* Error */, "Signature_0_must_be_a_type_predicate_1224", "Signature '{0}' must be a type predicate."), + Cannot_find_parameter_0: diag(1225, 1 /* Error */, "Cannot_find_parameter_0_1225", "Cannot find parameter '{0}'."), + Type_predicate_0_is_not_assignable_to_1: diag(1226, 1 /* Error */, "Type_predicate_0_is_not_assignable_to_1_1226", "Type predicate '{0}' is not assignable to '{1}'."), + Parameter_0_is_not_in_the_same_position_as_parameter_1: diag(1227, 1 /* Error */, "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227", "Parameter '{0}' is not in the same position as parameter '{1}'."), + A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods: diag(1228, 1 /* Error */, "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228", "A type predicate is only allowed in return type position for functions and methods."), + A_type_predicate_cannot_reference_a_rest_parameter: diag(1229, 1 /* Error */, "A_type_predicate_cannot_reference_a_rest_parameter_1229", "A type predicate cannot reference a rest parameter."), + A_type_predicate_cannot_reference_element_0_in_a_binding_pattern: diag(1230, 1 /* Error */, "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230", "A type predicate cannot reference element '{0}' in a binding pattern."), + An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration: diag(1231, 1 /* Error */, "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231", "An export assignment must be at the top level of a file or module declaration."), + An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module: diag(1232, 1 /* Error */, "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232", "An import declaration can only be used at the top level of a namespace or module."), + An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module: diag(1233, 1 /* Error */, "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233", "An export declaration can only be used at the top level of a namespace or module."), + An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file: diag(1234, 1 /* Error */, "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234", "An ambient module declaration is only allowed at the top level in a file."), + A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module: diag(1235, 1 /* Error */, "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235", "A namespace declaration is only allowed at the top level of a namespace or module."), + The_return_type_of_a_property_decorator_function_must_be_either_void_or_any: diag(1236, 1 /* Error */, "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236", "The return type of a property decorator function must be either 'void' or 'any'."), + The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any: diag(1237, 1 /* Error */, "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237", "The return type of a parameter decorator function must be either 'void' or 'any'."), + Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression: diag(1238, 1 /* Error */, "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238", "Unable to resolve signature of class decorator when called as an expression."), + Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression: diag(1239, 1 /* Error */, "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239", "Unable to resolve signature of parameter decorator when called as an expression."), + Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression: diag(1240, 1 /* Error */, "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240", "Unable to resolve signature of property decorator when called as an expression."), + Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression: diag(1241, 1 /* Error */, "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241", "Unable to resolve signature of method decorator when called as an expression."), + abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration: diag(1242, 1 /* Error */, "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242", "'abstract' modifier can only appear on a class, method, or property declaration."), + _0_modifier_cannot_be_used_with_1_modifier: diag(1243, 1 /* Error */, "_0_modifier_cannot_be_used_with_1_modifier_1243", "'{0}' modifier cannot be used with '{1}' modifier."), + Abstract_methods_can_only_appear_within_an_abstract_class: diag(1244, 1 /* Error */, "Abstract_methods_can_only_appear_within_an_abstract_class_1244", "Abstract methods can only appear within an abstract class."), + Method_0_cannot_have_an_implementation_because_it_is_marked_abstract: diag(1245, 1 /* Error */, "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245", "Method '{0}' cannot have an implementation because it is marked abstract."), + An_interface_property_cannot_have_an_initializer: diag(1246, 1 /* Error */, "An_interface_property_cannot_have_an_initializer_1246", "An interface property cannot have an initializer."), + A_type_literal_property_cannot_have_an_initializer: diag(1247, 1 /* Error */, "A_type_literal_property_cannot_have_an_initializer_1247", "A type literal property cannot have an initializer."), + A_class_member_cannot_have_the_0_keyword: diag(1248, 1 /* Error */, "A_class_member_cannot_have_the_0_keyword_1248", "A class member cannot have the '{0}' keyword."), + A_decorator_can_only_decorate_a_method_implementation_not_an_overload: diag(1249, 1 /* Error */, "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249", "A decorator can only decorate a method implementation, not an overload."), + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5: diag(1250, 1 /* Error */, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'."), + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definitions_are_automatically_in_strict_mode: diag(1251, 1 /* Error */, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'. Class definitions are automatically in strict mode."), + Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_automatically_in_strict_mode: diag(1252, 1 /* Error */, "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252", "Function declarations are not allowed inside blocks in strict mode when targeting 'ES5'. Modules are automatically in strict mode."), + Abstract_properties_can_only_appear_within_an_abstract_class: diag(1253, 1 /* Error */, "Abstract_properties_can_only_appear_within_an_abstract_class_1253", "Abstract properties can only appear within an abstract class."), + A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference: diag(1254, 1 /* Error */, "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254", "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference."), + A_definite_assignment_assertion_is_not_permitted_in_this_context: diag(1255, 1 /* Error */, "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255", "A definite assignment assertion '!' is not permitted in this context."), + A_required_element_cannot_follow_an_optional_element: diag(1257, 1 /* Error */, "A_required_element_cannot_follow_an_optional_element_1257", "A required element cannot follow an optional element."), + A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration: diag(1258, 1 /* Error */, "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258", "A default export must be at the top level of a file or module declaration."), + Module_0_can_only_be_default_imported_using_the_1_flag: diag(1259, 1 /* Error */, "Module_0_can_only_be_default_imported_using_the_1_flag_1259", "Module '{0}' can only be default-imported using the '{1}' flag"), + Keywords_cannot_contain_escape_characters: diag(1260, 1 /* Error */, "Keywords_cannot_contain_escape_characters_1260", "Keywords cannot contain escape characters."), + Already_included_file_name_0_differs_from_file_name_1_only_in_casing: diag(1261, 1 /* Error */, "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261", "Already included file name '{0}' differs from file name '{1}' only in casing."), + Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module: diag(1262, 1 /* Error */, "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262", "Identifier expected. '{0}' is a reserved word at the top-level of a module."), + Declarations_with_initializers_cannot_also_have_definite_assignment_assertions: diag(1263, 1 /* Error */, "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263", "Declarations with initializers cannot also have definite assignment assertions."), + Declarations_with_definite_assignment_assertions_must_also_have_type_annotations: diag(1264, 1 /* Error */, "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264", "Declarations with definite assignment assertions must also have type annotations."), + A_rest_element_cannot_follow_another_rest_element: diag(1265, 1 /* Error */, "A_rest_element_cannot_follow_another_rest_element_1265", "A rest element cannot follow another rest element."), + An_optional_element_cannot_follow_a_rest_element: diag(1266, 1 /* Error */, "An_optional_element_cannot_follow_a_rest_element_1266", "An optional element cannot follow a rest element."), + Property_0_cannot_have_an_initializer_because_it_is_marked_abstract: diag(1267, 1 /* Error */, "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267", "Property '{0}' cannot have an initializer because it is marked abstract."), + An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type: diag(1268, 1 /* Error */, "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268", "An index signature parameter type must be 'string', 'number', 'symbol', or a template literal type."), + Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled: diag(1269, 1 /* Error */, "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269", "Cannot use 'export import' on a type or type-only namespace when '{0}' is enabled."), + Decorator_function_return_type_0_is_not_assignable_to_type_1: diag(1270, 1 /* Error */, "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270", "Decorator function return type '{0}' is not assignable to type '{1}'."), + Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any: diag(1271, 1 /* Error */, "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271", "Decorator function return type is '{0}' but is expected to be 'void' or 'any'."), + A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled: diag(1272, 1 /* Error */, "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272", "A type referenced in a decorated signature must be imported with 'import type' or a namespace import when 'isolatedModules' and 'emitDecoratorMetadata' are enabled."), + _0_modifier_cannot_appear_on_a_type_parameter: diag(1273, 1 /* Error */, "_0_modifier_cannot_appear_on_a_type_parameter_1273", "'{0}' modifier cannot appear on a type parameter"), + _0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias: diag(1274, 1 /* Error */, "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274", "'{0}' modifier can only appear on a type parameter of a class, interface or type alias"), + accessor_modifier_can_only_appear_on_a_property_declaration: diag(1275, 1 /* Error */, "accessor_modifier_can_only_appear_on_a_property_declaration_1275", "'accessor' modifier can only appear on a property declaration."), + An_accessor_property_cannot_be_declared_optional: diag(1276, 1 /* Error */, "An_accessor_property_cannot_be_declared_optional_1276", "An 'accessor' property cannot be declared optional."), + _0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class: diag(1277, 1 /* Error */, "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277", "'{0}' modifier can only appear on a type parameter of a function, method or class"), + The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0: diag(1278, 1 /* Error */, "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278", "The runtime will invoke the decorator with {1} arguments, but the decorator expects {0}."), + The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0: diag(1279, 1 /* Error */, "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279", "The runtime will invoke the decorator with {1} arguments, but the decorator expects at least {0}."), + Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to_be_a_global_script_set_moduleDetection_to_force_or_add_an_empty_export_statement: diag(1280, 1 /* Error */, "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280", "Namespaces are not allowed in global script files when '{0}' is enabled. If this file is not intended to be a global script, set 'moduleDetection' to 'force' or add an empty 'export {}' statement."), + Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead: diag(1281, 1 /* Error */, "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281", "Cannot access '{0}' from another file without qualification when '{1}' is enabled. Use '{2}' instead."), + An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type: diag(1282, 1 /* Error */, "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282", "An 'export =' declaration must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type."), + An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration: diag(1283, 1 /* Error */, "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283", "An 'export =' declaration must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration."), + An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type: diag(1284, 1 /* Error */, "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284", "An 'export default' must reference a value when 'verbatimModuleSyntax' is enabled, but '{0}' only refers to a type."), + An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration: diag(1285, 1 /* Error */, "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285", "An 'export default' must reference a real value when 'verbatimModuleSyntax' is enabled, but '{0}' resolves to a type-only declaration."), + ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax: diag(1286, 1 /* Error */, "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_1286", "ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'."), + A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled: diag(1287, 1 /* Error */, "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287", "A top-level 'export' modifier cannot be used on value declarations in a CommonJS module when 'verbatimModuleSyntax' is enabled."), + An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled: diag(1288, 1 /* Error */, "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288", "An import alias cannot resolve to a type or type-only declaration when 'verbatimModuleSyntax' is enabled."), + _0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported: diag(1289, 1 /* Error */, "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289", "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported."), + _0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1290, 1 /* Error */, "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290", "'{0}' resolves to a type-only declaration and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), + _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported: diag(1291, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported."), + _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1292, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), + ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve: diag(1293, 1 /* Error */, "ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293", "ECMAScript module syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'."), + This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled: diag(1294, 1 /* Error */, "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294", "This syntax is not allowed when 'erasableSyntaxOnly' is enabled."), + ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjust_the_type_field_in_the_nearest_package_json_to_make_this_file_an_ECMAScript_module_or_adjust_your_verbatimModuleSyntax_module_and_moduleResolution_settings_in_TypeScript: diag(1295, 1 /* Error */, "ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjus_1295", "ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'. Adjust the 'type' field in the nearest 'package.json' to make this file an ECMAScript module, or adjust your 'verbatimModuleSyntax', 'module', and 'moduleResolution' settings in TypeScript."), + with_statements_are_not_allowed_in_an_async_function_block: diag(1300, 1 /* Error */, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."), + await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, 1 /* Error */, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."), + The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level: diag(1309, 1 /* Error */, "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309", "The current file is a CommonJS module and cannot use 'await' at the top level."), + Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern: diag(1312, 1 /* Error */, "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312", "Did you mean to use a ':'? An '=' can only follow a property name when the containing object literal is part of a destructuring pattern."), + The_body_of_an_if_statement_cannot_be_the_empty_statement: diag(1313, 1 /* Error */, "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313", "The body of an 'if' statement cannot be the empty statement."), + Global_module_exports_may_only_appear_in_module_files: diag(1314, 1 /* Error */, "Global_module_exports_may_only_appear_in_module_files_1314", "Global module exports may only appear in module files."), + Global_module_exports_may_only_appear_in_declaration_files: diag(1315, 1 /* Error */, "Global_module_exports_may_only_appear_in_declaration_files_1315", "Global module exports may only appear in declaration files."), + Global_module_exports_may_only_appear_at_top_level: diag(1316, 1 /* Error */, "Global_module_exports_may_only_appear_at_top_level_1316", "Global module exports may only appear at top level."), + A_parameter_property_cannot_be_declared_using_a_rest_parameter: diag(1317, 1 /* Error */, "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317", "A parameter property cannot be declared using a rest parameter."), + An_abstract_accessor_cannot_have_an_implementation: diag(1318, 1 /* Error */, "An_abstract_accessor_cannot_have_an_implementation_1318", "An abstract accessor cannot have an implementation."), + A_default_export_can_only_be_used_in_an_ECMAScript_style_module: diag(1319, 1 /* Error */, "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319", "A default export can only be used in an ECMAScript-style module."), + Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1320, 1 /* Error */, "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320", "Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member."), + Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1321, 1 /* Error */, "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321", "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."), + Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1322, 1 /* Error */, "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322", "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."), + Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_node20_or_nodenext: diag(1323, 1 /* Error */, "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323", "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', 'node20', or 'nodenext'."), + Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_node20_nodenext_or_preserve: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'node20', 'nodenext', or 'preserve'."), + Argument_of_dynamic_import_cannot_be_spread_element: diag(1325, 1 /* Error */, "Argument_of_dynamic_import_cannot_be_spread_element_1325", "Argument of dynamic import cannot be spread element."), + This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments: diag(1326, 1 /* Error */, "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326", "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments."), + String_literal_with_double_quotes_expected: diag(1327, 1 /* Error */, "String_literal_with_double_quotes_expected_1327", "String literal with double quotes expected."), + Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal: diag(1328, 1 /* Error */, "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328", "Property value can only be string literal, numeric literal, 'true', 'false', 'null', object literal or array literal."), + _0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0: diag(1329, 1 /* Error */, "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329", "'{0}' accepts too few arguments to be used as a decorator here. Did you mean to call it first and write '@{0}()'?"), + A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly: diag(1330, 1 /* Error */, "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330", "A property of an interface or type literal whose type is a 'unique symbol' type must be 'readonly'."), + A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly: diag(1331, 1 /* Error */, "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331", "A property of a class whose type is a 'unique symbol' type must be both 'static' and 'readonly'."), + A_variable_whose_type_is_a_unique_symbol_type_must_be_const: diag(1332, 1 /* Error */, "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332", "A variable whose type is a 'unique symbol' type must be 'const'."), + unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name: diag(1333, 1 /* Error */, "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333", "'unique symbol' types may not be used on a variable declaration with a binding name."), + unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement: diag(1334, 1 /* Error */, "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334", "'unique symbol' types are only allowed on variables in a variable statement."), + unique_symbol_types_are_not_allowed_here: diag(1335, 1 /* Error */, "unique_symbol_types_are_not_allowed_here_1335", "'unique symbol' types are not allowed here."), + An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead: diag(1337, 1 /* Error */, "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337", "An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead."), + infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type: diag(1338, 1 /* Error */, "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338", "'infer' declarations are only permitted in the 'extends' clause of a conditional type."), + Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, 1 /* Error */, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."), + Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, 1 /* Error */, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"), + Class_constructor_may_not_be_an_accessor: diag(1341, 1 /* Error */, "Class_constructor_may_not_be_an_accessor_1341", "Class constructor may not be an accessor."), + The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_node20_or_nodenext: diag(1343, 1 /* Error */, "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343", "The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', or 'nodenext'."), + A_label_is_not_allowed_here: diag(1344, 1 /* Error */, "A_label_is_not_allowed_here_1344", "'A label is not allowed here."), + An_expression_of_type_void_cannot_be_tested_for_truthiness: diag(1345, 1 /* Error */, "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345", "An expression of type 'void' cannot be tested for truthiness."), + This_parameter_is_not_allowed_with_use_strict_directive: diag(1346, 1 /* Error */, "This_parameter_is_not_allowed_with_use_strict_directive_1346", "This parameter is not allowed with 'use strict' directive."), + use_strict_directive_cannot_be_used_with_non_simple_parameter_list: diag(1347, 1 /* Error */, "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347", "'use strict' directive cannot be used with non-simple parameter list."), + Non_simple_parameter_declared_here: diag(1348, 1 /* Error */, "Non_simple_parameter_declared_here_1348", "Non-simple parameter declared here."), + use_strict_directive_used_here: diag(1349, 1 /* Error */, "use_strict_directive_used_here_1349", "'use strict' directive used here."), + Print_the_final_configuration_instead_of_building: diag(1350, 3 /* Message */, "Print_the_final_configuration_instead_of_building_1350", "Print the final configuration instead of building."), + An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal: diag(1351, 1 /* Error */, "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351", "An identifier or keyword cannot immediately follow a numeric literal."), + A_bigint_literal_cannot_use_exponential_notation: diag(1352, 1 /* Error */, "A_bigint_literal_cannot_use_exponential_notation_1352", "A bigint literal cannot use exponential notation."), + A_bigint_literal_must_be_an_integer: diag(1353, 1 /* Error */, "A_bigint_literal_must_be_an_integer_1353", "A bigint literal must be an integer."), + readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types: diag(1354, 1 /* Error */, "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354", "'readonly' type modifier is only permitted on array and tuple literal types."), + A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals: diag(1355, 1 /* Error */, "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355", "A 'const' assertions can only be applied to references to enum members, or string, number, boolean, array, or object literals."), + Did_you_mean_to_mark_this_function_as_async: diag(1356, 1 /* Error */, "Did_you_mean_to_mark_this_function_as_async_1356", "Did you mean to mark this function as 'async'?"), + An_enum_member_name_must_be_followed_by_a_or: diag(1357, 1 /* Error */, "An_enum_member_name_must_be_followed_by_a_or_1357", "An enum member name must be followed by a ',', '=', or '}'."), + Tagged_template_expressions_are_not_permitted_in_an_optional_chain: diag(1358, 1 /* Error */, "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358", "Tagged template expressions are not permitted in an optional chain."), + Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here: diag(1359, 1 /* Error */, "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359", "Identifier expected. '{0}' is a reserved word that cannot be used here."), + Type_0_does_not_satisfy_the_expected_type_1: diag(1360, 1 /* Error */, "Type_0_does_not_satisfy_the_expected_type_1_1360", "Type '{0}' does not satisfy the expected type '{1}'."), + _0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type: diag(1361, 1 /* Error */, "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361", "'{0}' cannot be used as a value because it was imported using 'import type'."), + _0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type: diag(1362, 1 /* Error */, "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362", "'{0}' cannot be used as a value because it was exported using 'export type'."), + A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both: diag(1363, 1 /* Error */, "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363", "A type-only import can specify a default import or named bindings, but not both."), + Convert_to_type_only_export: diag(1364, 3 /* Message */, "Convert_to_type_only_export_1364", "Convert to type-only export"), + Convert_all_re_exported_types_to_type_only_exports: diag(1365, 3 /* Message */, "Convert_all_re_exported_types_to_type_only_exports_1365", "Convert all re-exported types to type-only exports"), + Split_into_two_separate_import_declarations: diag(1366, 3 /* Message */, "Split_into_two_separate_import_declarations_1366", "Split into two separate import declarations"), + Split_all_invalid_type_only_imports: diag(1367, 3 /* Message */, "Split_all_invalid_type_only_imports_1367", "Split all invalid type-only imports"), + Class_constructor_may_not_be_a_generator: diag(1368, 1 /* Error */, "Class_constructor_may_not_be_a_generator_1368", "Class constructor may not be a generator."), + Did_you_mean_0: diag(1369, 3 /* Message */, "Did_you_mean_0_1369", "Did you mean '{0}'?"), + await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1375, 1 /* Error */, "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375", "'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."), + _0_was_imported_here: diag(1376, 3 /* Message */, "_0_was_imported_here_1376", "'{0}' was imported here."), + _0_was_exported_here: diag(1377, 3 /* Message */, "_0_was_exported_here_1377", "'{0}' was exported here."), + Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(1378, 1 /* Error */, "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378", "Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), + An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type: diag(1379, 1 /* Error */, "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379", "An import alias cannot reference a declaration that was exported using 'export type'."), + An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type: diag(1380, 1 /* Error */, "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380", "An import alias cannot reference a declaration that was imported using 'import type'."), + Unexpected_token_Did_you_mean_or_rbrace: diag(1381, 1 /* Error */, "Unexpected_token_Did_you_mean_or_rbrace_1381", "Unexpected token. Did you mean `{'}'}` or `}`?"), + Unexpected_token_Did_you_mean_or_gt: diag(1382, 1 /* Error */, "Unexpected_token_Did_you_mean_or_gt_1382", "Unexpected token. Did you mean `{'>'}` or `>`?"), + Function_type_notation_must_be_parenthesized_when_used_in_a_union_type: diag(1385, 1 /* Error */, "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385", "Function type notation must be parenthesized when used in a union type."), + Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type: diag(1386, 1 /* Error */, "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386", "Constructor type notation must be parenthesized when used in a union type."), + Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type: diag(1387, 1 /* Error */, "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387", "Function type notation must be parenthesized when used in an intersection type."), + Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type: diag(1388, 1 /* Error */, "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388", "Constructor type notation must be parenthesized when used in an intersection type."), + _0_is_not_allowed_as_a_variable_declaration_name: diag(1389, 1 /* Error */, "_0_is_not_allowed_as_a_variable_declaration_name_1389", "'{0}' is not allowed as a variable declaration name."), + _0_is_not_allowed_as_a_parameter_name: diag(1390, 1 /* Error */, "_0_is_not_allowed_as_a_parameter_name_1390", "'{0}' is not allowed as a parameter name."), + An_import_alias_cannot_use_import_type: diag(1392, 1 /* Error */, "An_import_alias_cannot_use_import_type_1392", "An import alias cannot use 'import type'"), + Imported_via_0_from_file_1: diag(1393, 3 /* Message */, "Imported_via_0_from_file_1_1393", "Imported via {0} from file '{1}'"), + Imported_via_0_from_file_1_with_packageId_2: diag(1394, 3 /* Message */, "Imported_via_0_from_file_1_with_packageId_2_1394", "Imported via {0} from file '{1}' with packageId '{2}'"), + Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions: diag(1395, 3 /* Message */, "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395", "Imported via {0} from file '{1}' to import 'importHelpers' as specified in compilerOptions"), + Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions: diag(1396, 3 /* Message */, "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396", "Imported via {0} from file '{1}' with packageId '{2}' to import 'importHelpers' as specified in compilerOptions"), + Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions: diag(1397, 3 /* Message */, "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397", "Imported via {0} from file '{1}' to import 'jsx' and 'jsxs' factory functions"), + Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions: diag(1398, 3 /* Message */, "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398", "Imported via {0} from file '{1}' with packageId '{2}' to import 'jsx' and 'jsxs' factory functions"), + File_is_included_via_import_here: diag(1399, 3 /* Message */, "File_is_included_via_import_here_1399", "File is included via import here."), + Referenced_via_0_from_file_1: diag(1400, 3 /* Message */, "Referenced_via_0_from_file_1_1400", "Referenced via '{0}' from file '{1}'"), + File_is_included_via_reference_here: diag(1401, 3 /* Message */, "File_is_included_via_reference_here_1401", "File is included via reference here."), + Type_library_referenced_via_0_from_file_1: diag(1402, 3 /* Message */, "Type_library_referenced_via_0_from_file_1_1402", "Type library referenced via '{0}' from file '{1}'"), + Type_library_referenced_via_0_from_file_1_with_packageId_2: diag(1403, 3 /* Message */, "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403", "Type library referenced via '{0}' from file '{1}' with packageId '{2}'"), + File_is_included_via_type_library_reference_here: diag(1404, 3 /* Message */, "File_is_included_via_type_library_reference_here_1404", "File is included via type library reference here."), + Library_referenced_via_0_from_file_1: diag(1405, 3 /* Message */, "Library_referenced_via_0_from_file_1_1405", "Library referenced via '{0}' from file '{1}'"), + File_is_included_via_library_reference_here: diag(1406, 3 /* Message */, "File_is_included_via_library_reference_here_1406", "File is included via library reference here."), + Matched_by_include_pattern_0_in_1: diag(1407, 3 /* Message */, "Matched_by_include_pattern_0_in_1_1407", "Matched by include pattern '{0}' in '{1}'"), + File_is_matched_by_include_pattern_specified_here: diag(1408, 3 /* Message */, "File_is_matched_by_include_pattern_specified_here_1408", "File is matched by include pattern specified here."), + Part_of_files_list_in_tsconfig_json: diag(1409, 3 /* Message */, "Part_of_files_list_in_tsconfig_json_1409", "Part of 'files' list in tsconfig.json"), + File_is_matched_by_files_list_specified_here: diag(1410, 3 /* Message */, "File_is_matched_by_files_list_specified_here_1410", "File is matched by 'files' list specified here."), + Output_from_referenced_project_0_included_because_1_specified: diag(1411, 3 /* Message */, "Output_from_referenced_project_0_included_because_1_specified_1411", "Output from referenced project '{0}' included because '{1}' specified"), + Output_from_referenced_project_0_included_because_module_is_specified_as_none: diag(1412, 3 /* Message */, "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412", "Output from referenced project '{0}' included because '--module' is specified as 'none'"), + File_is_output_from_referenced_project_specified_here: diag(1413, 3 /* Message */, "File_is_output_from_referenced_project_specified_here_1413", "File is output from referenced project specified here."), + Source_from_referenced_project_0_included_because_1_specified: diag(1414, 3 /* Message */, "Source_from_referenced_project_0_included_because_1_specified_1414", "Source from referenced project '{0}' included because '{1}' specified"), + Source_from_referenced_project_0_included_because_module_is_specified_as_none: diag(1415, 3 /* Message */, "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415", "Source from referenced project '{0}' included because '--module' is specified as 'none'"), + File_is_source_from_referenced_project_specified_here: diag(1416, 3 /* Message */, "File_is_source_from_referenced_project_specified_here_1416", "File is source from referenced project specified here."), + Entry_point_of_type_library_0_specified_in_compilerOptions: diag(1417, 3 /* Message */, "Entry_point_of_type_library_0_specified_in_compilerOptions_1417", "Entry point of type library '{0}' specified in compilerOptions"), + Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1: diag(1418, 3 /* Message */, "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418", "Entry point of type library '{0}' specified in compilerOptions with packageId '{1}'"), + File_is_entry_point_of_type_library_specified_here: diag(1419, 3 /* Message */, "File_is_entry_point_of_type_library_specified_here_1419", "File is entry point of type library specified here."), + Entry_point_for_implicit_type_library_0: diag(1420, 3 /* Message */, "Entry_point_for_implicit_type_library_0_1420", "Entry point for implicit type library '{0}'"), + Entry_point_for_implicit_type_library_0_with_packageId_1: diag(1421, 3 /* Message */, "Entry_point_for_implicit_type_library_0_with_packageId_1_1421", "Entry point for implicit type library '{0}' with packageId '{1}'"), + Library_0_specified_in_compilerOptions: diag(1422, 3 /* Message */, "Library_0_specified_in_compilerOptions_1422", "Library '{0}' specified in compilerOptions"), + File_is_library_specified_here: diag(1423, 3 /* Message */, "File_is_library_specified_here_1423", "File is library specified here."), + Default_library: diag(1424, 3 /* Message */, "Default_library_1424", "Default library"), + Default_library_for_target_0: diag(1425, 3 /* Message */, "Default_library_for_target_0_1425", "Default library for target '{0}'"), + File_is_default_library_for_target_specified_here: diag(1426, 3 /* Message */, "File_is_default_library_for_target_specified_here_1426", "File is default library for target specified here."), + Root_file_specified_for_compilation: diag(1427, 3 /* Message */, "Root_file_specified_for_compilation_1427", "Root file specified for compilation"), + File_is_output_of_project_reference_source_0: diag(1428, 3 /* Message */, "File_is_output_of_project_reference_source_0_1428", "File is output of project reference source '{0}'"), + File_redirects_to_file_0: diag(1429, 3 /* Message */, "File_redirects_to_file_0_1429", "File redirects to file '{0}'"), + The_file_is_in_the_program_because_Colon: diag(1430, 3 /* Message */, "The_file_is_in_the_program_because_Colon_1430", "The file is in the program because:"), + for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, 1 /* Error */, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."), + Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, 1 /* Error */, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), + Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters: diag(1433, 1 /* Error */, "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433", "Neither decorators nor modifiers may be applied to 'this' parameters."), + Unexpected_keyword_or_identifier: diag(1434, 1 /* Error */, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."), + Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, 1 /* Error */, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"), + Decorators_must_precede_the_name_and_all_keywords_of_property_declarations: diag(1436, 1 /* Error */, "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436", "Decorators must precede the name and all keywords of property declarations."), + Namespace_must_be_given_a_name: diag(1437, 1 /* Error */, "Namespace_must_be_given_a_name_1437", "Namespace must be given a name."), + Interface_must_be_given_a_name: diag(1438, 1 /* Error */, "Interface_must_be_given_a_name_1438", "Interface must be given a name."), + Type_alias_must_be_given_a_name: diag(1439, 1 /* Error */, "Type_alias_must_be_given_a_name_1439", "Type alias must be given a name."), + Variable_declaration_not_allowed_at_this_location: diag(1440, 1 /* Error */, "Variable_declaration_not_allowed_at_this_location_1440", "Variable declaration not allowed at this location."), + Cannot_start_a_function_call_in_a_type_annotation: diag(1441, 1 /* Error */, "Cannot_start_a_function_call_in_a_type_annotation_1441", "Cannot start a function call in a type annotation."), + Expected_for_property_initializer: diag(1442, 1 /* Error */, "Expected_for_property_initializer_1442", "Expected '=' for property initializer."), + Module_declaration_names_may_only_use_or_quoted_strings: diag(1443, 1 /* Error */, "Module_declaration_names_may_only_use_or_quoted_strings_1443", `Module declaration names may only use ' or " quoted strings.`), + _0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled: diag(1448, 1 /* Error */, "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448", "'{0}' resolves to a type-only declaration and must be re-exported using a type-only re-export when '{1}' is enabled."), + Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed: diag(1449, 3 /* Message */, "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449", "Preserve unused imported values in the JavaScript output that would otherwise be removed."), + Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments: diag(1450, 3 /* Message */, "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450", "Dynamic imports can only accept a module specifier and an optional set of attributes as arguments"), + Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression: diag(1451, 1 /* Error */, "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451", "Private identifiers are only allowed in class bodies and may only be used as part of a class member declaration, property access, or on the left-hand-side of an 'in' expression"), + resolution_mode_should_be_either_require_or_import: diag(1453, 1 /* Error */, "resolution_mode_should_be_either_require_or_import_1453", "`resolution-mode` should be either `require` or `import`."), + resolution_mode_can_only_be_set_for_type_only_imports: diag(1454, 1 /* Error */, "resolution_mode_can_only_be_set_for_type_only_imports_1454", "`resolution-mode` can only be set for type-only imports."), + resolution_mode_is_the_only_valid_key_for_type_import_assertions: diag(1455, 1 /* Error */, "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455", "`resolution-mode` is the only valid key for type import assertions."), + Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require: diag(1456, 1 /* Error */, "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456", "Type import assertions should have exactly one key - `resolution-mode` - with value `import` or `require`."), + Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk: diag(1457, 3 /* Message */, "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457", "Matched by default include pattern '**/*'"), + File_is_ECMAScript_module_because_0_has_field_type_with_value_module: diag(1458, 3 /* Message */, "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458", `File is ECMAScript module because '{0}' has field "type" with value "module"`), + File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module: diag(1459, 3 /* Message */, "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459", `File is CommonJS module because '{0}' has field "type" whose value is not "module"`), + File_is_CommonJS_module_because_0_does_not_have_field_type: diag(1460, 3 /* Message */, "File_is_CommonJS_module_because_0_does_not_have_field_type_1460", `File is CommonJS module because '{0}' does not have field "type"`), + File_is_CommonJS_module_because_package_json_was_not_found: diag(1461, 3 /* Message */, "File_is_CommonJS_module_because_package_json_was_not_found_1461", "File is CommonJS module because 'package.json' was not found"), + resolution_mode_is_the_only_valid_key_for_type_import_attributes: diag(1463, 1 /* Error */, "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463", "'resolution-mode' is the only valid key for type import attributes."), + Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require: diag(1464, 1 /* Error */, "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464", "Type import attributes should have exactly one key - 'resolution-mode' - with value 'import' or 'require'."), + The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output: diag(1470, 1 /* Error */, "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470", "The 'import.meta' meta-property is not allowed in files which will build into CommonJS output."), + Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead: diag(1471, 1 /* Error */, "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471", "Module '{0}' cannot be imported using this construct. The specifier only resolves to an ES module, which cannot be imported with 'require'. Use an ECMAScript import instead."), + catch_or_finally_expected: diag(1472, 1 /* Error */, "catch_or_finally_expected_1472", "'catch' or 'finally' expected."), + An_import_declaration_can_only_be_used_at_the_top_level_of_a_module: diag(1473, 1 /* Error */, "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473", "An import declaration can only be used at the top level of a module."), + An_export_declaration_can_only_be_used_at_the_top_level_of_a_module: diag(1474, 1 /* Error */, "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474", "An export declaration can only be used at the top level of a module."), + Control_what_method_is_used_to_detect_module_format_JS_files: diag(1475, 3 /* Message */, "Control_what_method_is_used_to_detect_module_format_JS_files_1475", "Control what method is used to detect module-format JS files."), + auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules: diag(1476, 3 /* Message */, "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476", '"auto": Treat files with imports, exports, import.meta, jsx (with jsx: react-jsx), or esm format (with module: node16+) as modules.'), + An_instantiation_expression_cannot_be_followed_by_a_property_access: diag(1477, 1 /* Error */, "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477", "An instantiation expression cannot be followed by a property access."), + Identifier_or_string_literal_expected: diag(1478, 1 /* Error */, "Identifier_or_string_literal_expected_1478", "Identifier or string literal expected."), + The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead: diag(1479, 1 /* Error */, "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479", `The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'. Consider writing a dynamic 'import("{0}")' call instead.`), + To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module: diag(1480, 3 /* Message */, "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480", 'To convert this file to an ECMAScript module, change its file extension to \'{0}\' or create a local package.json file with `{ "type": "module" }`.'), + To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1: diag(1481, 3 /* Message */, "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481", `To convert this file to an ECMAScript module, change its file extension to '{0}', or add the field \`"type": "module"\` to '{1}'.`), + To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0: diag(1482, 3 /* Message */, "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482", 'To convert this file to an ECMAScript module, add the field `"type": "module"` to \'{0}\'.'), + To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module: diag(1483, 3 /* Message */, "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483", 'To convert this file to an ECMAScript module, create a local package.json file with `{ "type": "module" }`.'), + _0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled: diag(1484, 1 /* Error */, "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484", "'{0}' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled."), + _0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled: diag(1485, 1 /* Error */, "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485", "'{0}' resolves to a type-only declaration and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled."), + Decorator_used_before_export_here: diag(1486, 1 /* Error */, "Decorator_used_before_export_here_1486", "Decorator used before 'export' here."), + Octal_escape_sequences_are_not_allowed_Use_the_syntax_0: diag(1487, 1 /* Error */, "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487", "Octal escape sequences are not allowed. Use the syntax '{0}'."), + Escape_sequence_0_is_not_allowed: diag(1488, 1 /* Error */, "Escape_sequence_0_is_not_allowed_1488", "Escape sequence '{0}' is not allowed."), + Decimals_with_leading_zeros_are_not_allowed: diag(1489, 1 /* Error */, "Decimals_with_leading_zeros_are_not_allowed_1489", "Decimals with leading zeros are not allowed."), + File_appears_to_be_binary: diag(1490, 1 /* Error */, "File_appears_to_be_binary_1490", "File appears to be binary."), + _0_modifier_cannot_appear_on_a_using_declaration: diag(1491, 1 /* Error */, "_0_modifier_cannot_appear_on_a_using_declaration_1491", "'{0}' modifier cannot appear on a 'using' declaration."), + _0_declarations_may_not_have_binding_patterns: diag(1492, 1 /* Error */, "_0_declarations_may_not_have_binding_patterns_1492", "'{0}' declarations may not have binding patterns."), + The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration: diag(1493, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493", "The left-hand side of a 'for...in' statement cannot be a 'using' declaration."), + The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration: diag(1494, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494", "The left-hand side of a 'for...in' statement cannot be an 'await using' declaration."), + _0_modifier_cannot_appear_on_an_await_using_declaration: diag(1495, 1 /* Error */, "_0_modifier_cannot_appear_on_an_await_using_declaration_1495", "'{0}' modifier cannot appear on an 'await using' declaration."), + Identifier_string_literal_or_number_literal_expected: diag(1496, 1 /* Error */, "Identifier_string_literal_or_number_literal_expected_1496", "Identifier, string literal, or number literal expected."), + Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator: diag(1497, 1 /* Error */, "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497", "Expression must be enclosed in parentheses to be used as a decorator."), + Invalid_syntax_in_decorator: diag(1498, 1 /* Error */, "Invalid_syntax_in_decorator_1498", "Invalid syntax in decorator."), + Unknown_regular_expression_flag: diag(1499, 1 /* Error */, "Unknown_regular_expression_flag_1499", "Unknown regular expression flag."), + Duplicate_regular_expression_flag: diag(1500, 1 /* Error */, "Duplicate_regular_expression_flag_1500", "Duplicate regular expression flag."), + This_regular_expression_flag_is_only_available_when_targeting_0_or_later: diag(1501, 1 /* Error */, "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501", "This regular expression flag is only available when targeting '{0}' or later."), + The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously: diag(1502, 1 /* Error */, "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502", "The Unicode (u) flag and the Unicode Sets (v) flag cannot be set simultaneously."), + Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later: diag(1503, 1 /* Error */, "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503", "Named capturing groups are only available when targeting 'ES2018' or later."), + Subpattern_flags_must_be_present_when_there_is_a_minus_sign: diag(1504, 1 /* Error */, "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504", "Subpattern flags must be present when there is a minus sign."), + Incomplete_quantifier_Digit_expected: diag(1505, 1 /* Error */, "Incomplete_quantifier_Digit_expected_1505", "Incomplete quantifier. Digit expected."), + Numbers_out_of_order_in_quantifier: diag(1506, 1 /* Error */, "Numbers_out_of_order_in_quantifier_1506", "Numbers out of order in quantifier."), + There_is_nothing_available_for_repetition: diag(1507, 1 /* Error */, "There_is_nothing_available_for_repetition_1507", "There is nothing available for repetition."), + Unexpected_0_Did_you_mean_to_escape_it_with_backslash: diag(1508, 1 /* Error */, "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508", "Unexpected '{0}'. Did you mean to escape it with backslash?"), + This_regular_expression_flag_cannot_be_toggled_within_a_subpattern: diag(1509, 1 /* Error */, "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509", "This regular expression flag cannot be toggled within a subpattern."), + k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets: diag(1510, 1 /* Error */, "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510", "'\\k' must be followed by a capturing group name enclosed in angle brackets."), + q_is_only_available_inside_character_class: diag(1511, 1 /* Error */, "q_is_only_available_inside_character_class_1511", "'\\q' is only available inside character class."), + c_must_be_followed_by_an_ASCII_letter: diag(1512, 1 /* Error */, "c_must_be_followed_by_an_ASCII_letter_1512", "'\\c' must be followed by an ASCII letter."), + Undetermined_character_escape: diag(1513, 1 /* Error */, "Undetermined_character_escape_1513", "Undetermined character escape."), + Expected_a_capturing_group_name: diag(1514, 1 /* Error */, "Expected_a_capturing_group_name_1514", "Expected a capturing group name."), + Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other: diag(1515, 1 /* Error */, "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515", "Named capturing groups with the same name must be mutually exclusive to each other."), + A_character_class_range_must_not_be_bounded_by_another_character_class: diag(1516, 1 /* Error */, "A_character_class_range_must_not_be_bounded_by_another_character_class_1516", "A character class range must not be bounded by another character class."), + Range_out_of_order_in_character_class: diag(1517, 1 /* Error */, "Range_out_of_order_in_character_class_1517", "Range out of order in character class."), + Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class: diag(1518, 1 /* Error */, "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518", "Anything that would possibly match more than a single character is invalid inside a negated character class."), + Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead: diag(1519, 1 /* Error */, "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519", "Operators must not be mixed within a character class. Wrap it in a nested class instead."), + Expected_a_class_set_operand: diag(1520, 1 /* Error */, "Expected_a_class_set_operand_1520", "Expected a class set operand."), + q_must_be_followed_by_string_alternatives_enclosed_in_braces: diag(1521, 1 /* Error */, "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521", "'\\q' must be followed by string alternatives enclosed in braces."), + A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backslash: diag(1522, 1 /* Error */, "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522", "A character class must not contain a reserved double punctuator. Did you mean to escape it with backslash?"), + Expected_a_Unicode_property_name: diag(1523, 1 /* Error */, "Expected_a_Unicode_property_name_1523", "Expected a Unicode property name."), + Unknown_Unicode_property_name: diag(1524, 1 /* Error */, "Unknown_Unicode_property_name_1524", "Unknown Unicode property name."), + Expected_a_Unicode_property_value: diag(1525, 1 /* Error */, "Expected_a_Unicode_property_value_1525", "Expected a Unicode property value."), + Unknown_Unicode_property_value: diag(1526, 1 /* Error */, "Unknown_Unicode_property_value_1526", "Unknown Unicode property value."), + Expected_a_Unicode_property_name_or_value: diag(1527, 1 /* Error */, "Expected_a_Unicode_property_name_or_value_1527", "Expected a Unicode property name or value."), + Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_the_Unicode_Sets_v_flag_is_set: diag(1528, 1 /* Error */, "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528", "Any Unicode property that would possibly match more than a single character is only available when the Unicode Sets (v) flag is set."), + Unknown_Unicode_property_name_or_value: diag(1529, 1 /* Error */, "Unknown_Unicode_property_name_or_value_1529", "Unknown Unicode property name or value."), + Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1530, 1 /* Error */, "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530", "Unicode property value expressions are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."), + _0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces: diag(1531, 1 /* Error */, "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531", "'\\{0}' must be followed by a Unicode property value expression enclosed in braces."), + There_is_no_capturing_group_named_0_in_this_regular_expression: diag(1532, 1 /* Error */, "There_is_no_capturing_group_named_0_in_this_regular_expression_1532", "There is no capturing group named '{0}' in this regular expression."), + This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression: diag(1533, 1 /* Error */, "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533", "This backreference refers to a group that does not exist. There are only {0} capturing groups in this regular expression."), + This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regular_expression: diag(1534, 1 /* Error */, "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534", "This backreference refers to a group that does not exist. There are no capturing groups in this regular expression."), + This_character_cannot_be_escaped_in_a_regular_expression: diag(1535, 1 /* Error */, "This_character_cannot_be_escaped_in_a_regular_expression_1535", "This character cannot be escaped in a regular expression."), + Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended_as_an_escape_sequence_use_the_syntax_0_instead: diag(1536, 1 /* Error */, "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536", "Octal escape sequences and backreferences are not allowed in a character class. If this was intended as an escape sequence, use the syntax '{0}' instead."), + Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class: diag(1537, 1 /* Error */, "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537", "Decimal escape sequences and backreferences are not allowed in a character class."), + Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1538, 1 /* Error */, "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538", "Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."), + A_bigint_literal_cannot_be_used_as_a_property_name: diag(1539, 1 /* Error */, "A_bigint_literal_cannot_be_used_as_a_property_name_1539", "A 'bigint' literal cannot be used as a property name."), + A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead: diag( + 1540, + 2 /* Suggestion */, + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540", + "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + void 0, + /*reportsDeprecated*/ + true + ), + Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute: diag(1541, 1 /* Error */, "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541", "Type-only import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute."), + Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute: diag(1542, 1 /* Error */, "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542", "Type import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute."), + Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0: diag(1543, 1 /* Error */, "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543", `Importing a JSON file into an ECMAScript module requires a 'type: "json"' import attribute when 'module' is set to '{0}'.`), + Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0: diag(1544, 1 /* Error */, "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544", "Named imports from a JSON file into an ECMAScript module are not allowed when 'module' is set to '{0}'."), + using_declarations_are_not_allowed_in_ambient_contexts: diag(1545, 1 /* Error */, "using_declarations_are_not_allowed_in_ambient_contexts_1545", "'using' declarations are not allowed in ambient contexts."), + await_using_declarations_are_not_allowed_in_ambient_contexts: diag(1546, 1 /* Error */, "await_using_declarations_are_not_allowed_in_ambient_contexts_1546", "'await using' declarations are not allowed in ambient contexts."), + The_types_of_0_are_incompatible_between_these_types: diag(2200, 1 /* Error */, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."), + The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, 1 /* Error */, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."), + Call_signature_return_types_0_and_1_are_incompatible: diag( + 2202, + 1 /* Error */, + "Call_signature_return_types_0_and_1_are_incompatible_2202", + "Call signature return types '{0}' and '{1}' are incompatible.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + true + ), + Construct_signature_return_types_0_and_1_are_incompatible: diag( + 2203, + 1 /* Error */, + "Construct_signature_return_types_0_and_1_are_incompatible_2203", + "Construct signature return types '{0}' and '{1}' are incompatible.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + true + ), + Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1: diag( + 2204, + 1 /* Error */, + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204", + "Call signatures with no arguments have incompatible return types '{0}' and '{1}'.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + true + ), + Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1: diag( + 2205, + 1 /* Error */, + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205", + "Construct signatures with no arguments have incompatible return types '{0}' and '{1}'.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + true + ), + The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement: diag(2206, 1 /* Error */, "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206", "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement."), + The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement: diag(2207, 1 /* Error */, "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207", "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement."), + This_type_parameter_might_need_an_extends_0_constraint: diag(2208, 1 /* Error */, "This_type_parameter_might_need_an_extends_0_constraint_2208", "This type parameter might need an `extends {0}` constraint."), + The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate: diag(2209, 1 /* Error */, "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209", "The project root is ambiguous, but is required to resolve export map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."), + The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate: diag(2210, 1 /* Error */, "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210", "The project root is ambiguous, but is required to resolve import map entry '{0}' in file '{1}'. Supply the `rootDir` compiler option to disambiguate."), + Add_extends_constraint: diag(2211, 3 /* Message */, "Add_extends_constraint_2211", "Add `extends` constraint."), + Add_extends_constraint_to_all_type_parameters: diag(2212, 3 /* Message */, "Add_extends_constraint_to_all_type_parameters_2212", "Add `extends` constraint to all type parameters"), + Duplicate_identifier_0: diag(2300, 1 /* Error */, "Duplicate_identifier_0_2300", "Duplicate identifier '{0}'."), + Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2301, 1 /* Error */, "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301", "Initializer of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."), + Static_members_cannot_reference_class_type_parameters: diag(2302, 1 /* Error */, "Static_members_cannot_reference_class_type_parameters_2302", "Static members cannot reference class type parameters."), + Circular_definition_of_import_alias_0: diag(2303, 1 /* Error */, "Circular_definition_of_import_alias_0_2303", "Circular definition of import alias '{0}'."), + Cannot_find_name_0: diag(2304, 1 /* Error */, "Cannot_find_name_0_2304", "Cannot find name '{0}'."), + Module_0_has_no_exported_member_1: diag(2305, 1 /* Error */, "Module_0_has_no_exported_member_1_2305", "Module '{0}' has no exported member '{1}'."), + File_0_is_not_a_module: diag(2306, 1 /* Error */, "File_0_is_not_a_module_2306", "File '{0}' is not a module."), + Cannot_find_module_0_or_its_corresponding_type_declarations: diag(2307, 1 /* Error */, "Cannot_find_module_0_or_its_corresponding_type_declarations_2307", "Cannot find module '{0}' or its corresponding type declarations."), + Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity: diag(2308, 1 /* Error */, "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308", "Module {0} has already exported a member named '{1}'. Consider explicitly re-exporting to resolve the ambiguity."), + An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements: diag(2309, 1 /* Error */, "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309", "An export assignment cannot be used in a module with other exported elements."), + Type_0_recursively_references_itself_as_a_base_type: diag(2310, 1 /* Error */, "Type_0_recursively_references_itself_as_a_base_type_2310", "Type '{0}' recursively references itself as a base type."), + Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function: diag(2311, 1 /* Error */, "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311", "Cannot find name '{0}'. Did you mean to write this in an async function?"), + An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members: diag(2312, 1 /* Error */, "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312", "An interface can only extend an object type or intersection of object types with statically known members."), + Type_parameter_0_has_a_circular_constraint: diag(2313, 1 /* Error */, "Type_parameter_0_has_a_circular_constraint_2313", "Type parameter '{0}' has a circular constraint."), + Generic_type_0_requires_1_type_argument_s: diag(2314, 1 /* Error */, "Generic_type_0_requires_1_type_argument_s_2314", "Generic type '{0}' requires {1} type argument(s)."), + Type_0_is_not_generic: diag(2315, 1 /* Error */, "Type_0_is_not_generic_2315", "Type '{0}' is not generic."), + Global_type_0_must_be_a_class_or_interface_type: diag(2316, 1 /* Error */, "Global_type_0_must_be_a_class_or_interface_type_2316", "Global type '{0}' must be a class or interface type."), + Global_type_0_must_have_1_type_parameter_s: diag(2317, 1 /* Error */, "Global_type_0_must_have_1_type_parameter_s_2317", "Global type '{0}' must have {1} type parameter(s)."), + Cannot_find_global_type_0: diag(2318, 1 /* Error */, "Cannot_find_global_type_0_2318", "Cannot find global type '{0}'."), + Named_property_0_of_types_1_and_2_are_not_identical: diag(2319, 1 /* Error */, "Named_property_0_of_types_1_and_2_are_not_identical_2319", "Named property '{0}' of types '{1}' and '{2}' are not identical."), + Interface_0_cannot_simultaneously_extend_types_1_and_2: diag(2320, 1 /* Error */, "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320", "Interface '{0}' cannot simultaneously extend types '{1}' and '{2}'."), + Excessive_stack_depth_comparing_types_0_and_1: diag(2321, 1 /* Error */, "Excessive_stack_depth_comparing_types_0_and_1_2321", "Excessive stack depth comparing types '{0}' and '{1}'."), + Type_0_is_not_assignable_to_type_1: diag(2322, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_2322", "Type '{0}' is not assignable to type '{1}'."), + Cannot_redeclare_exported_variable_0: diag(2323, 1 /* Error */, "Cannot_redeclare_exported_variable_0_2323", "Cannot redeclare exported variable '{0}'."), + Property_0_is_missing_in_type_1: diag(2324, 1 /* Error */, "Property_0_is_missing_in_type_1_2324", "Property '{0}' is missing in type '{1}'."), + Property_0_is_private_in_type_1_but_not_in_type_2: diag(2325, 1 /* Error */, "Property_0_is_private_in_type_1_but_not_in_type_2_2325", "Property '{0}' is private in type '{1}' but not in type '{2}'."), + Types_of_property_0_are_incompatible: diag(2326, 1 /* Error */, "Types_of_property_0_are_incompatible_2326", "Types of property '{0}' are incompatible."), + Property_0_is_optional_in_type_1_but_required_in_type_2: diag(2327, 1 /* Error */, "Property_0_is_optional_in_type_1_but_required_in_type_2_2327", "Property '{0}' is optional in type '{1}' but required in type '{2}'."), + Types_of_parameters_0_and_1_are_incompatible: diag(2328, 1 /* Error */, "Types_of_parameters_0_and_1_are_incompatible_2328", "Types of parameters '{0}' and '{1}' are incompatible."), + Index_signature_for_type_0_is_missing_in_type_1: diag(2329, 1 /* Error */, "Index_signature_for_type_0_is_missing_in_type_1_2329", "Index signature for type '{0}' is missing in type '{1}'."), + _0_and_1_index_signatures_are_incompatible: diag(2330, 1 /* Error */, "_0_and_1_index_signatures_are_incompatible_2330", "'{0}' and '{1}' index signatures are incompatible."), + this_cannot_be_referenced_in_a_module_or_namespace_body: diag(2331, 1 /* Error */, "this_cannot_be_referenced_in_a_module_or_namespace_body_2331", "'this' cannot be referenced in a module or namespace body."), + this_cannot_be_referenced_in_current_location: diag(2332, 1 /* Error */, "this_cannot_be_referenced_in_current_location_2332", "'this' cannot be referenced in current location."), + this_cannot_be_referenced_in_a_static_property_initializer: diag(2334, 1 /* Error */, "this_cannot_be_referenced_in_a_static_property_initializer_2334", "'this' cannot be referenced in a static property initializer."), + super_can_only_be_referenced_in_a_derived_class: diag(2335, 1 /* Error */, "super_can_only_be_referenced_in_a_derived_class_2335", "'super' can only be referenced in a derived class."), + super_cannot_be_referenced_in_constructor_arguments: diag(2336, 1 /* Error */, "super_cannot_be_referenced_in_constructor_arguments_2336", "'super' cannot be referenced in constructor arguments."), + Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors: diag(2337, 1 /* Error */, "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337", "Super calls are not permitted outside constructors or in nested functions inside constructors."), + super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class: diag(2338, 1 /* Error */, "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338", "'super' property access is permitted only in a constructor, member function, or member accessor of a derived class."), + Property_0_does_not_exist_on_type_1: diag(2339, 1 /* Error */, "Property_0_does_not_exist_on_type_1_2339", "Property '{0}' does not exist on type '{1}'."), + Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword: diag(2340, 1 /* Error */, "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340", "Only public and protected methods of the base class are accessible via the 'super' keyword."), + Property_0_is_private_and_only_accessible_within_class_1: diag(2341, 1 /* Error */, "Property_0_is_private_and_only_accessible_within_class_1_2341", "Property '{0}' is private and only accessible within class '{1}'."), + This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0: diag(2343, 1 /* Error */, "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343", "This syntax requires an imported helper named '{1}' which does not exist in '{0}'. Consider upgrading your version of '{0}'."), + Type_0_does_not_satisfy_the_constraint_1: diag(2344, 1 /* Error */, "Type_0_does_not_satisfy_the_constraint_1_2344", "Type '{0}' does not satisfy the constraint '{1}'."), + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1: diag(2345, 1 /* Error */, "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", "Argument of type '{0}' is not assignable to parameter of type '{1}'."), + Call_target_does_not_contain_any_signatures: diag(2346, 1 /* Error */, "Call_target_does_not_contain_any_signatures_2346", "Call target does not contain any signatures."), + Untyped_function_calls_may_not_accept_type_arguments: diag(2347, 1 /* Error */, "Untyped_function_calls_may_not_accept_type_arguments_2347", "Untyped function calls may not accept type arguments."), + Value_of_type_0_is_not_callable_Did_you_mean_to_include_new: diag(2348, 1 /* Error */, "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348", "Value of type '{0}' is not callable. Did you mean to include 'new'?"), + This_expression_is_not_callable: diag(2349, 1 /* Error */, "This_expression_is_not_callable_2349", "This expression is not callable."), + Only_a_void_function_can_be_called_with_the_new_keyword: diag(2350, 1 /* Error */, "Only_a_void_function_can_be_called_with_the_new_keyword_2350", "Only a void function can be called with the 'new' keyword."), + This_expression_is_not_constructable: diag(2351, 1 /* Error */, "This_expression_is_not_constructable_2351", "This expression is not constructable."), + Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first: diag(2352, 1 /* Error */, "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352", "Conversion of type '{0}' to type '{1}' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first."), + Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1: diag(2353, 1 /* Error */, "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353", "Object literal may only specify known properties, and '{0}' does not exist in type '{1}'."), + This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found: diag(2354, 1 /* Error */, "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354", "This syntax requires an imported helper but module '{0}' cannot be found."), + A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value: diag(2355, 1 /* Error */, "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355", "A function whose declared type is neither 'undefined', 'void', nor 'any' must return a value."), + An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2356, 1 /* Error */, "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356", "An arithmetic operand must be of type 'any', 'number', 'bigint' or an enum type."), + The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access: diag(2357, 1 /* Error */, "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357", "The operand of an increment or decrement operator must be a variable or a property access."), + The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter: diag(2358, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358", "The left-hand side of an 'instanceof' expression must be of type 'any', an object type or a type parameter."), + The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method: diag(2359, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359", "The right-hand side of an 'instanceof' expression must be either of type 'any', a class, function, or other type assignable to the 'Function' interface type, or an object type with a 'Symbol.hasInstance' method."), + The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2362, 1 /* Error */, "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362", "The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), + The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type: diag(2363, 1 /* Error */, "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363", "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."), + The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access: diag(2364, 1 /* Error */, "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364", "The left-hand side of an assignment expression must be a variable or a property access."), + Operator_0_cannot_be_applied_to_types_1_and_2: diag(2365, 1 /* Error */, "Operator_0_cannot_be_applied_to_types_1_and_2_2365", "Operator '{0}' cannot be applied to types '{1}' and '{2}'."), + Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined: diag(2366, 1 /* Error */, "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366", "Function lacks ending return statement and return type does not include 'undefined'."), + This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap: diag(2367, 1 /* Error */, "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367", "This comparison appears to be unintentional because the types '{0}' and '{1}' have no overlap."), + Type_parameter_name_cannot_be_0: diag(2368, 1 /* Error */, "Type_parameter_name_cannot_be_0_2368", "Type parameter name cannot be '{0}'."), + A_parameter_property_is_only_allowed_in_a_constructor_implementation: diag(2369, 1 /* Error */, "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369", "A parameter property is only allowed in a constructor implementation."), + A_rest_parameter_must_be_of_an_array_type: diag(2370, 1 /* Error */, "A_rest_parameter_must_be_of_an_array_type_2370", "A rest parameter must be of an array type."), + A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation: diag(2371, 1 /* Error */, "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371", "A parameter initializer is only allowed in a function or constructor implementation."), + Parameter_0_cannot_reference_itself: diag(2372, 1 /* Error */, "Parameter_0_cannot_reference_itself_2372", "Parameter '{0}' cannot reference itself."), + Parameter_0_cannot_reference_identifier_1_declared_after_it: diag(2373, 1 /* Error */, "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373", "Parameter '{0}' cannot reference identifier '{1}' declared after it."), + Duplicate_index_signature_for_type_0: diag(2374, 1 /* Error */, "Duplicate_index_signature_for_type_0_2374", "Duplicate index signature for type '{0}'."), + Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties: diag(2375, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375", "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties."), + A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2376, 1 /* Error */, "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376", "A 'super' call must be the first statement in the constructor to refer to 'super' or 'this' when a derived class contains initialized properties, parameter properties, or private identifiers."), + Constructors_for_derived_classes_must_contain_a_super_call: diag(2377, 1 /* Error */, "Constructors_for_derived_classes_must_contain_a_super_call_2377", "Constructors for derived classes must contain a 'super' call."), + A_get_accessor_must_return_a_value: diag(2378, 1 /* Error */, "A_get_accessor_must_return_a_value_2378", "A 'get' accessor must return a value."), + Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties: diag(2379, 1 /* Error */, "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379", "Argument of type '{0}' is not assignable to parameter of type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the types of the target's properties."), + Overload_signatures_must_all_be_exported_or_non_exported: diag(2383, 1 /* Error */, "Overload_signatures_must_all_be_exported_or_non_exported_2383", "Overload signatures must all be exported or non-exported."), + Overload_signatures_must_all_be_ambient_or_non_ambient: diag(2384, 1 /* Error */, "Overload_signatures_must_all_be_ambient_or_non_ambient_2384", "Overload signatures must all be ambient or non-ambient."), + Overload_signatures_must_all_be_public_private_or_protected: diag(2385, 1 /* Error */, "Overload_signatures_must_all_be_public_private_or_protected_2385", "Overload signatures must all be public, private or protected."), + Overload_signatures_must_all_be_optional_or_required: diag(2386, 1 /* Error */, "Overload_signatures_must_all_be_optional_or_required_2386", "Overload signatures must all be optional or required."), + Function_overload_must_be_static: diag(2387, 1 /* Error */, "Function_overload_must_be_static_2387", "Function overload must be static."), + Function_overload_must_not_be_static: diag(2388, 1 /* Error */, "Function_overload_must_not_be_static_2388", "Function overload must not be static."), + Function_implementation_name_must_be_0: diag(2389, 1 /* Error */, "Function_implementation_name_must_be_0_2389", "Function implementation name must be '{0}'."), + Constructor_implementation_is_missing: diag(2390, 1 /* Error */, "Constructor_implementation_is_missing_2390", "Constructor implementation is missing."), + Function_implementation_is_missing_or_not_immediately_following_the_declaration: diag(2391, 1 /* Error */, "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391", "Function implementation is missing or not immediately following the declaration."), + Multiple_constructor_implementations_are_not_allowed: diag(2392, 1 /* Error */, "Multiple_constructor_implementations_are_not_allowed_2392", "Multiple constructor implementations are not allowed."), + Duplicate_function_implementation: diag(2393, 1 /* Error */, "Duplicate_function_implementation_2393", "Duplicate function implementation."), + This_overload_signature_is_not_compatible_with_its_implementation_signature: diag(2394, 1 /* Error */, "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394", "This overload signature is not compatible with its implementation signature."), + Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local: diag(2395, 1 /* Error */, "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395", "Individual declarations in merged declaration '{0}' must be all exported or all local."), + Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters: diag(2396, 1 /* Error */, "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396", "Duplicate identifier 'arguments'. Compiler uses 'arguments' to initialize rest parameters."), + Declaration_name_conflicts_with_built_in_global_identifier_0: diag(2397, 1 /* Error */, "Declaration_name_conflicts_with_built_in_global_identifier_0_2397", "Declaration name conflicts with built-in global identifier '{0}'."), + constructor_cannot_be_used_as_a_parameter_property_name: diag(2398, 1 /* Error */, "constructor_cannot_be_used_as_a_parameter_property_name_2398", "'constructor' cannot be used as a parameter property name."), + Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference: diag(2399, 1 /* Error */, "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399", "Duplicate identifier '_this'. Compiler uses variable declaration '_this' to capture 'this' reference."), + Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference: diag(2400, 1 /* Error */, "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400", "Expression resolves to variable declaration '_this' that compiler uses to capture 'this' reference."), + A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers: diag(2401, 1 /* Error */, "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401", "A 'super' call must be a root-level statement within a constructor of a derived class that contains initialized properties, parameter properties, or private identifiers."), + Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference: diag(2402, 1 /* Error */, "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402", "Expression resolves to '_super' that compiler uses to capture base class reference."), + Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2: diag(2403, 1 /* Error */, "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403", "Subsequent variable declarations must have the same type. Variable '{0}' must be of type '{1}', but here has type '{2}'."), + The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation: diag(2404, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404", "The left-hand side of a 'for...in' statement cannot use a type annotation."), + The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any: diag(2405, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405", "The left-hand side of a 'for...in' statement must be of type 'string' or 'any'."), + The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access: diag(2406, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406", "The left-hand side of a 'for...in' statement must be a variable or a property access."), + The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0: diag(2407, 1 /* Error */, "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407", "The right-hand side of a 'for...in' statement must be of type 'any', an object type or a type parameter, but here has type '{0}'."), + Setters_cannot_return_a_value: diag(2408, 1 /* Error */, "Setters_cannot_return_a_value_2408", "Setters cannot return a value."), + Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class: diag(2409, 1 /* Error */, "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409", "Return type of constructor signature must be assignable to the instance type of the class."), + The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any: diag(2410, 1 /* Error */, "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410", "The 'with' statement is not supported. All symbols in a 'with' block will have type 'any'."), + Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target: diag(2412, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412", "Type '{0}' is not assignable to type '{1}' with 'exactOptionalPropertyTypes: true'. Consider adding 'undefined' to the type of the target."), + Property_0_of_type_1_is_not_assignable_to_2_index_type_3: diag(2411, 1 /* Error */, "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411", "Property '{0}' of type '{1}' is not assignable to '{2}' index type '{3}'."), + _0_index_type_1_is_not_assignable_to_2_index_type_3: diag(2413, 1 /* Error */, "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413", "'{0}' index type '{1}' is not assignable to '{2}' index type '{3}'."), + Class_name_cannot_be_0: diag(2414, 1 /* Error */, "Class_name_cannot_be_0_2414", "Class name cannot be '{0}'."), + Class_0_incorrectly_extends_base_class_1: diag(2415, 1 /* Error */, "Class_0_incorrectly_extends_base_class_1_2415", "Class '{0}' incorrectly extends base class '{1}'."), + Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2: diag(2416, 1 /* Error */, "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416", "Property '{0}' in type '{1}' is not assignable to the same property in base type '{2}'."), + Class_static_side_0_incorrectly_extends_base_class_static_side_1: diag(2417, 1 /* Error */, "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417", "Class static side '{0}' incorrectly extends base class static side '{1}'."), + Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1: diag(2418, 1 /* Error */, "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418", "Type of computed property's value is '{0}', which is not assignable to type '{1}'."), + Types_of_construct_signatures_are_incompatible: diag(2419, 1 /* Error */, "Types_of_construct_signatures_are_incompatible_2419", "Types of construct signatures are incompatible."), + Class_0_incorrectly_implements_interface_1: diag(2420, 1 /* Error */, "Class_0_incorrectly_implements_interface_1_2420", "Class '{0}' incorrectly implements interface '{1}'."), + A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members: diag(2422, 1 /* Error */, "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422", "A class can only implement an object type or intersection of object types with statically known members."), + Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor: diag(2423, 1 /* Error */, "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423", "Class '{0}' defines instance member function '{1}', but extended class '{2}' defines it as instance member accessor."), + Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function: diag(2425, 1 /* Error */, "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425", "Class '{0}' defines instance member property '{1}', but extended class '{2}' defines it as instance member function."), + Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function: diag(2426, 1 /* Error */, "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426", "Class '{0}' defines instance member accessor '{1}', but extended class '{2}' defines it as instance member function."), + Interface_name_cannot_be_0: diag(2427, 1 /* Error */, "Interface_name_cannot_be_0_2427", "Interface name cannot be '{0}'."), + All_declarations_of_0_must_have_identical_type_parameters: diag(2428, 1 /* Error */, "All_declarations_of_0_must_have_identical_type_parameters_2428", "All declarations of '{0}' must have identical type parameters."), + Interface_0_incorrectly_extends_interface_1: diag(2430, 1 /* Error */, "Interface_0_incorrectly_extends_interface_1_2430", "Interface '{0}' incorrectly extends interface '{1}'."), + Enum_name_cannot_be_0: diag(2431, 1 /* Error */, "Enum_name_cannot_be_0_2431", "Enum name cannot be '{0}'."), + In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element: diag(2432, 1 /* Error */, "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432", "In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element."), + A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged: diag(2433, 1 /* Error */, "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433", "A namespace declaration cannot be in a different file from a class or function with which it is merged."), + A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged: diag(2434, 1 /* Error */, "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434", "A namespace declaration cannot be located prior to a class or function with which it is merged."), + Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces: diag(2435, 1 /* Error */, "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435", "Ambient modules cannot be nested in other modules or namespaces."), + Ambient_module_declaration_cannot_specify_relative_module_name: diag(2436, 1 /* Error */, "Ambient_module_declaration_cannot_specify_relative_module_name_2436", "Ambient module declaration cannot specify relative module name."), + Module_0_is_hidden_by_a_local_declaration_with_the_same_name: diag(2437, 1 /* Error */, "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437", "Module '{0}' is hidden by a local declaration with the same name."), + Import_name_cannot_be_0: diag(2438, 1 /* Error */, "Import_name_cannot_be_0_2438", "Import name cannot be '{0}'."), + Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name: diag(2439, 1 /* Error */, "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439", "Import or export declaration in an ambient module declaration cannot reference module through relative module name."), + Import_declaration_conflicts_with_local_declaration_of_0: diag(2440, 1 /* Error */, "Import_declaration_conflicts_with_local_declaration_of_0_2440", "Import declaration conflicts with local declaration of '{0}'."), + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module: diag(2441, 1 /* Error */, "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441", "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module."), + Types_have_separate_declarations_of_a_private_property_0: diag(2442, 1 /* Error */, "Types_have_separate_declarations_of_a_private_property_0_2442", "Types have separate declarations of a private property '{0}'."), + Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2: diag(2443, 1 /* Error */, "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443", "Property '{0}' is protected but type '{1}' is not a class derived from '{2}'."), + Property_0_is_protected_in_type_1_but_public_in_type_2: diag(2444, 1 /* Error */, "Property_0_is_protected_in_type_1_but_public_in_type_2_2444", "Property '{0}' is protected in type '{1}' but public in type '{2}'."), + Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses: diag(2445, 1 /* Error */, "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445", "Property '{0}' is protected and only accessible within class '{1}' and its subclasses."), + Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2: diag(2446, 1 /* Error */, "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446", "Property '{0}' is protected and only accessible through an instance of class '{1}'. This is an instance of class '{2}'."), + The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead: diag(2447, 1 /* Error */, "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447", "The '{0}' operator is not allowed for boolean types. Consider using '{1}' instead."), + Block_scoped_variable_0_used_before_its_declaration: diag(2448, 1 /* Error */, "Block_scoped_variable_0_used_before_its_declaration_2448", "Block-scoped variable '{0}' used before its declaration."), + Class_0_used_before_its_declaration: diag(2449, 1 /* Error */, "Class_0_used_before_its_declaration_2449", "Class '{0}' used before its declaration."), + Enum_0_used_before_its_declaration: diag(2450, 1 /* Error */, "Enum_0_used_before_its_declaration_2450", "Enum '{0}' used before its declaration."), + Cannot_redeclare_block_scoped_variable_0: diag(2451, 1 /* Error */, "Cannot_redeclare_block_scoped_variable_0_2451", "Cannot redeclare block-scoped variable '{0}'."), + An_enum_member_cannot_have_a_numeric_name: diag(2452, 1 /* Error */, "An_enum_member_cannot_have_a_numeric_name_2452", "An enum member cannot have a numeric name."), + Variable_0_is_used_before_being_assigned: diag(2454, 1 /* Error */, "Variable_0_is_used_before_being_assigned_2454", "Variable '{0}' is used before being assigned."), + Type_alias_0_circularly_references_itself: diag(2456, 1 /* Error */, "Type_alias_0_circularly_references_itself_2456", "Type alias '{0}' circularly references itself."), + Type_alias_name_cannot_be_0: diag(2457, 1 /* Error */, "Type_alias_name_cannot_be_0_2457", "Type alias name cannot be '{0}'."), + An_AMD_module_cannot_have_multiple_name_assignments: diag(2458, 1 /* Error */, "An_AMD_module_cannot_have_multiple_name_assignments_2458", "An AMD module cannot have multiple name assignments."), + Module_0_declares_1_locally_but_it_is_not_exported: diag(2459, 1 /* Error */, "Module_0_declares_1_locally_but_it_is_not_exported_2459", "Module '{0}' declares '{1}' locally, but it is not exported."), + Module_0_declares_1_locally_but_it_is_exported_as_2: diag(2460, 1 /* Error */, "Module_0_declares_1_locally_but_it_is_exported_as_2_2460", "Module '{0}' declares '{1}' locally, but it is exported as '{2}'."), + Type_0_is_not_an_array_type: diag(2461, 1 /* Error */, "Type_0_is_not_an_array_type_2461", "Type '{0}' is not an array type."), + A_rest_element_must_be_last_in_a_destructuring_pattern: diag(2462, 1 /* Error */, "A_rest_element_must_be_last_in_a_destructuring_pattern_2462", "A rest element must be last in a destructuring pattern."), + A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature: diag(2463, 1 /* Error */, "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463", "A binding pattern parameter cannot be optional in an implementation signature."), + A_computed_property_name_must_be_of_type_string_number_symbol_or_any: diag(2464, 1 /* Error */, "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464", "A computed property name must be of type 'string', 'number', 'symbol', or 'any'."), + this_cannot_be_referenced_in_a_computed_property_name: diag(2465, 1 /* Error */, "this_cannot_be_referenced_in_a_computed_property_name_2465", "'this' cannot be referenced in a computed property name."), + super_cannot_be_referenced_in_a_computed_property_name: diag(2466, 1 /* Error */, "super_cannot_be_referenced_in_a_computed_property_name_2466", "'super' cannot be referenced in a computed property name."), + A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type: diag(2467, 1 /* Error */, "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467", "A computed property name cannot reference a type parameter from its containing type."), + Cannot_find_global_value_0: diag(2468, 1 /* Error */, "Cannot_find_global_value_0_2468", "Cannot find global value '{0}'."), + The_0_operator_cannot_be_applied_to_type_symbol: diag(2469, 1 /* Error */, "The_0_operator_cannot_be_applied_to_type_symbol_2469", "The '{0}' operator cannot be applied to type 'symbol'."), + Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher: diag(2472, 1 /* Error */, "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472", "Spread operator in 'new' expressions is only available when targeting ECMAScript 5 and higher."), + Enum_declarations_must_all_be_const_or_non_const: diag(2473, 1 /* Error */, "Enum_declarations_must_all_be_const_or_non_const_2473", "Enum declarations must all be const or non-const."), + const_enum_member_initializers_must_be_constant_expressions: diag(2474, 1 /* Error */, "const_enum_member_initializers_must_be_constant_expressions_2474", "const enum member initializers must be constant expressions."), + const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query: diag(2475, 1 /* Error */, "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475", "'const' enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query."), + A_const_enum_member_can_only_be_accessed_using_a_string_literal: diag(2476, 1 /* Error */, "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476", "A const enum member can only be accessed using a string literal."), + const_enum_member_initializer_was_evaluated_to_a_non_finite_value: diag(2477, 1 /* Error */, "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477", "'const' enum member initializer was evaluated to a non-finite value."), + const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN: diag(2478, 1 /* Error */, "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478", "'const' enum member initializer was evaluated to disallowed value 'NaN'."), + let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations: diag(2480, 1 /* Error */, "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480", "'let' is not allowed to be used as a name in 'let' or 'const' declarations."), + Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1: diag(2481, 1 /* Error */, "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481", "Cannot initialize outer scoped variable '{0}' in the same scope as block scoped declaration '{1}'."), + The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation: diag(2483, 1 /* Error */, "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483", "The left-hand side of a 'for...of' statement cannot use a type annotation."), + Export_declaration_conflicts_with_exported_declaration_of_0: diag(2484, 1 /* Error */, "Export_declaration_conflicts_with_exported_declaration_of_0_2484", "Export declaration conflicts with exported declaration of '{0}'."), + The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access: diag(2487, 1 /* Error */, "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487", "The left-hand side of a 'for...of' statement must be a variable or a property access."), + Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2488, 1 /* Error */, "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488", "Type '{0}' must have a '[Symbol.iterator]()' method that returns an iterator."), + An_iterator_must_have_a_next_method: diag(2489, 1 /* Error */, "An_iterator_must_have_a_next_method_2489", "An iterator must have a 'next()' method."), + The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property: diag(2490, 1 /* Error */, "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490", "The type returned by the '{0}()' method of an iterator must have a 'value' property."), + The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern: diag(2491, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491", "The left-hand side of a 'for...in' statement cannot be a destructuring pattern."), + Cannot_redeclare_identifier_0_in_catch_clause: diag(2492, 1 /* Error */, "Cannot_redeclare_identifier_0_in_catch_clause_2492", "Cannot redeclare identifier '{0}' in catch clause."), + Tuple_type_0_of_length_1_has_no_element_at_index_2: diag(2493, 1 /* Error */, "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493", "Tuple type '{0}' of length '{1}' has no element at index '{2}'."), + Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher: diag(2494, 1 /* Error */, "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494", "Using a string in a 'for...of' statement is only supported in ECMAScript 5 and higher."), + Type_0_is_not_an_array_type_or_a_string_type: diag(2495, 1 /* Error */, "Type_0_is_not_an_array_type_or_a_string_type_2495", "Type '{0}' is not an array type or a string type."), + The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_function_expression: diag(2496, 1 /* Error */, "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496", "The 'arguments' object cannot be referenced in an arrow function in ES5. Consider using a standard function expression."), + This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export: diag(2497, 1 /* Error */, "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497", "This module can only be referenced with ECMAScript imports/exports by turning on the '{0}' flag and referencing its default export."), + Module_0_uses_export_and_cannot_be_used_with_export_Asterisk: diag(2498, 1 /* Error */, "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498", "Module '{0}' uses 'export =' and cannot be used with 'export *'."), + An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments: diag(2499, 1 /* Error */, "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499", "An interface can only extend an identifier/qualified-name with optional type arguments."), + A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments: diag(2500, 1 /* Error */, "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500", "A class can only implement an identifier/qualified-name with optional type arguments."), + A_rest_element_cannot_contain_a_binding_pattern: diag(2501, 1 /* Error */, "A_rest_element_cannot_contain_a_binding_pattern_2501", "A rest element cannot contain a binding pattern."), + _0_is_referenced_directly_or_indirectly_in_its_own_type_annotation: diag(2502, 1 /* Error */, "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502", "'{0}' is referenced directly or indirectly in its own type annotation."), + Cannot_find_namespace_0: diag(2503, 1 /* Error */, "Cannot_find_namespace_0_2503", "Cannot find namespace '{0}'."), + Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator: diag(2504, 1 /* Error */, "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504", "Type '{0}' must have a '[Symbol.asyncIterator]()' method that returns an async iterator."), + A_generator_cannot_have_a_void_type_annotation: diag(2505, 1 /* Error */, "A_generator_cannot_have_a_void_type_annotation_2505", "A generator cannot have a 'void' type annotation."), + _0_is_referenced_directly_or_indirectly_in_its_own_base_expression: diag(2506, 1 /* Error */, "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506", "'{0}' is referenced directly or indirectly in its own base expression."), + Type_0_is_not_a_constructor_function_type: diag(2507, 1 /* Error */, "Type_0_is_not_a_constructor_function_type_2507", "Type '{0}' is not a constructor function type."), + No_base_constructor_has_the_specified_number_of_type_arguments: diag(2508, 1 /* Error */, "No_base_constructor_has_the_specified_number_of_type_arguments_2508", "No base constructor has the specified number of type arguments."), + Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members: diag(2509, 1 /* Error */, "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509", "Base constructor return type '{0}' is not an object type or intersection of object types with statically known members."), + Base_constructors_must_all_have_the_same_return_type: diag(2510, 1 /* Error */, "Base_constructors_must_all_have_the_same_return_type_2510", "Base constructors must all have the same return type."), + Cannot_create_an_instance_of_an_abstract_class: diag(2511, 1 /* Error */, "Cannot_create_an_instance_of_an_abstract_class_2511", "Cannot create an instance of an abstract class."), + Overload_signatures_must_all_be_abstract_or_non_abstract: diag(2512, 1 /* Error */, "Overload_signatures_must_all_be_abstract_or_non_abstract_2512", "Overload signatures must all be abstract or non-abstract."), + Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression: diag(2513, 1 /* Error */, "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513", "Abstract method '{0}' in class '{1}' cannot be accessed via super expression."), + A_tuple_type_cannot_be_indexed_with_a_negative_value: diag(2514, 1 /* Error */, "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514", "A tuple type cannot be indexed with a negative value."), + Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2: diag(2515, 1 /* Error */, "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515", "Non-abstract class '{0}' does not implement inherited abstract member {1} from class '{2}'."), + All_declarations_of_an_abstract_method_must_be_consecutive: diag(2516, 1 /* Error */, "All_declarations_of_an_abstract_method_must_be_consecutive_2516", "All declarations of an abstract method must be consecutive."), + Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type: diag(2517, 1 /* Error */, "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517", "Cannot assign an abstract constructor type to a non-abstract constructor type."), + A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard: diag(2518, 1 /* Error */, "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518", "A 'this'-based type guard is not compatible with a parameter-based type guard."), + An_async_iterator_must_have_a_next_method: diag(2519, 1 /* Error */, "An_async_iterator_must_have_a_next_method_2519", "An async iterator must have a 'next()' method."), + Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions: diag(2520, 1 /* Error */, "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520", "Duplicate identifier '{0}'. Compiler uses declaration '{1}' to support async functions."), + The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_standard_function_or_method: diag(2522, 1 /* Error */, "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522", "The 'arguments' object cannot be referenced in an async function or method in ES5. Consider using a standard function or method."), + yield_expressions_cannot_be_used_in_a_parameter_initializer: diag(2523, 1 /* Error */, "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523", "'yield' expressions cannot be used in a parameter initializer."), + await_expressions_cannot_be_used_in_a_parameter_initializer: diag(2524, 1 /* Error */, "await_expressions_cannot_be_used_in_a_parameter_initializer_2524", "'await' expressions cannot be used in a parameter initializer."), + A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface: diag(2526, 1 /* Error */, "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526", "A 'this' type is available only in a non-static member of a class or interface."), + The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary: diag(2527, 1 /* Error */, "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527", "The inferred type of '{0}' references an inaccessible '{1}' type. A type annotation is necessary."), + A_module_cannot_have_multiple_default_exports: diag(2528, 1 /* Error */, "A_module_cannot_have_multiple_default_exports_2528", "A module cannot have multiple default exports."), + Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions: diag(2529, 1 /* Error */, "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529", "Duplicate identifier '{0}'. Compiler reserves name '{1}' in top level scope of a module containing async functions."), + Property_0_is_incompatible_with_index_signature: diag(2530, 1 /* Error */, "Property_0_is_incompatible_with_index_signature_2530", "Property '{0}' is incompatible with index signature."), + Object_is_possibly_null: diag(2531, 1 /* Error */, "Object_is_possibly_null_2531", "Object is possibly 'null'."), + Object_is_possibly_undefined: diag(2532, 1 /* Error */, "Object_is_possibly_undefined_2532", "Object is possibly 'undefined'."), + Object_is_possibly_null_or_undefined: diag(2533, 1 /* Error */, "Object_is_possibly_null_or_undefined_2533", "Object is possibly 'null' or 'undefined'."), + A_function_returning_never_cannot_have_a_reachable_end_point: diag(2534, 1 /* Error */, "A_function_returning_never_cannot_have_a_reachable_end_point_2534", "A function returning 'never' cannot have a reachable end point."), + Type_0_cannot_be_used_to_index_type_1: diag(2536, 1 /* Error */, "Type_0_cannot_be_used_to_index_type_1_2536", "Type '{0}' cannot be used to index type '{1}'."), + Type_0_has_no_matching_index_signature_for_type_1: diag(2537, 1 /* Error */, "Type_0_has_no_matching_index_signature_for_type_1_2537", "Type '{0}' has no matching index signature for type '{1}'."), + Type_0_cannot_be_used_as_an_index_type: diag(2538, 1 /* Error */, "Type_0_cannot_be_used_as_an_index_type_2538", "Type '{0}' cannot be used as an index type."), + Cannot_assign_to_0_because_it_is_not_a_variable: diag(2539, 1 /* Error */, "Cannot_assign_to_0_because_it_is_not_a_variable_2539", "Cannot assign to '{0}' because it is not a variable."), + Cannot_assign_to_0_because_it_is_a_read_only_property: diag(2540, 1 /* Error */, "Cannot_assign_to_0_because_it_is_a_read_only_property_2540", "Cannot assign to '{0}' because it is a read-only property."), + Index_signature_in_type_0_only_permits_reading: diag(2542, 1 /* Error */, "Index_signature_in_type_0_only_permits_reading_2542", "Index signature in type '{0}' only permits reading."), + Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference: diag(2543, 1 /* Error */, "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543", "Duplicate identifier '_newTarget'. Compiler uses variable declaration '_newTarget' to capture 'new.target' meta-property reference."), + Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference: diag(2544, 1 /* Error */, "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544", "Expression resolves to variable declaration '_newTarget' that compiler uses to capture 'new.target' meta-property reference."), + A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any: diag(2545, 1 /* Error */, "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545", "A mixin class must have a constructor with a single rest parameter of type 'any[]'."), + The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property: diag(2547, 1 /* Error */, "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547", "The type returned by the '{0}()' method of an async iterator must be a promise for a type with a 'value' property."), + Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2548, 1 /* Error */, "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548", "Type '{0}' is not an array type or does not have a '[Symbol.iterator]()' method that returns an iterator."), + Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator: diag(2549, 1 /* Error */, "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549", "Type '{0}' is not an array type or a string type or does not have a '[Symbol.iterator]()' method that returns an iterator."), + Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later: diag(2550, 1 /* Error */, "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550", "Property '{0}' does not exist on type '{1}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{2}' or later."), + Property_0_does_not_exist_on_type_1_Did_you_mean_2: diag(2551, 1 /* Error */, "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551", "Property '{0}' does not exist on type '{1}'. Did you mean '{2}'?"), + Cannot_find_name_0_Did_you_mean_1: diag(2552, 1 /* Error */, "Cannot_find_name_0_Did_you_mean_1_2552", "Cannot find name '{0}'. Did you mean '{1}'?"), + Computed_values_are_not_permitted_in_an_enum_with_string_valued_members: diag(2553, 1 /* Error */, "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553", "Computed values are not permitted in an enum with string valued members."), + Expected_0_arguments_but_got_1: diag(2554, 1 /* Error */, "Expected_0_arguments_but_got_1_2554", "Expected {0} arguments, but got {1}."), + Expected_at_least_0_arguments_but_got_1: diag(2555, 1 /* Error */, "Expected_at_least_0_arguments_but_got_1_2555", "Expected at least {0} arguments, but got {1}."), + A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter: diag(2556, 1 /* Error */, "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556", "A spread argument must either have a tuple type or be passed to a rest parameter."), + Expected_0_type_arguments_but_got_1: diag(2558, 1 /* Error */, "Expected_0_type_arguments_but_got_1_2558", "Expected {0} type arguments, but got {1}."), + Type_0_has_no_properties_in_common_with_type_1: diag(2559, 1 /* Error */, "Type_0_has_no_properties_in_common_with_type_1_2559", "Type '{0}' has no properties in common with type '{1}'."), + Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it: diag(2560, 1 /* Error */, "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560", "Value of type '{0}' has no properties in common with type '{1}'. Did you mean to call it?"), + Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2: diag(2561, 1 /* Error */, "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561", "Object literal may only specify known properties, but '{0}' does not exist in type '{1}'. Did you mean to write '{2}'?"), + Base_class_expressions_cannot_reference_class_type_parameters: diag(2562, 1 /* Error */, "Base_class_expressions_cannot_reference_class_type_parameters_2562", "Base class expressions cannot reference class type parameters."), + The_containing_function_or_module_body_is_too_large_for_control_flow_analysis: diag(2563, 1 /* Error */, "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563", "The containing function or module body is too large for control flow analysis."), + Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor: diag(2564, 1 /* Error */, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564", "Property '{0}' has no initializer and is not definitely assigned in the constructor."), + Property_0_is_used_before_being_assigned: diag(2565, 1 /* Error */, "Property_0_is_used_before_being_assigned_2565", "Property '{0}' is used before being assigned."), + A_rest_element_cannot_have_a_property_name: diag(2566, 1 /* Error */, "A_rest_element_cannot_have_a_property_name_2566", "A rest element cannot have a property name."), + Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations: diag(2567, 1 /* Error */, "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567", "Enum declarations can only merge with namespace or other enum declarations."), + Property_0_may_not_exist_on_type_1_Did_you_mean_2: diag(2568, 1 /* Error */, "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568", "Property '{0}' may not exist on type '{1}'. Did you mean '{2}'?"), + Could_not_find_name_0_Did_you_mean_1: diag(2570, 1 /* Error */, "Could_not_find_name_0_Did_you_mean_1_2570", "Could not find name '{0}'. Did you mean '{1}'?"), + Object_is_of_type_unknown: diag(2571, 1 /* Error */, "Object_is_of_type_unknown_2571", "Object is of type 'unknown'."), + A_rest_element_type_must_be_an_array_type: diag(2574, 1 /* Error */, "A_rest_element_type_must_be_an_array_type_2574", "A rest element type must be an array type."), + No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments: diag(2575, 1 /* Error */, "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575", "No overload expects {0} arguments, but overloads do exist that expect either {1} or {2} arguments."), + Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead: diag(2576, 1 /* Error */, "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576", "Property '{0}' does not exist on type '{1}'. Did you mean to access the static member '{2}' instead?"), + Return_type_annotation_circularly_references_itself: diag(2577, 1 /* Error */, "Return_type_annotation_circularly_references_itself_2577", "Return type annotation circularly references itself."), + Unused_ts_expect_error_directive: diag(2578, 1 /* Error */, "Unused_ts_expect_error_directive_2578", "Unused '@ts-expect-error' directive."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode: diag(2580, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580", "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery: diag(2581, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581", "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery`."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha: diag(2582, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582", "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha`."), + Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later: diag(2583, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583", "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to '{1}' or later."), + Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom: diag(2584, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584", "Cannot find name '{0}'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'."), + _0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later: diag(2585, 1 /* Error */, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585", "'{0}' only refers to a type, but is being used as a value here. Do you need to change your target library? Try changing the 'lib' compiler option to es2015 or later."), + Cannot_assign_to_0_because_it_is_a_constant: diag(2588, 1 /* Error */, "Cannot_assign_to_0_because_it_is_a_constant_2588", "Cannot assign to '{0}' because it is a constant."), + Type_instantiation_is_excessively_deep_and_possibly_infinite: diag(2589, 1 /* Error */, "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589", "Type instantiation is excessively deep and possibly infinite."), + Expression_produces_a_union_type_that_is_too_complex_to_represent: diag(2590, 1 /* Error */, "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590", "Expression produces a union type that is too complex to represent."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig: diag(2591, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591", "Cannot find name '{0}'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node` and then add 'node' to the types field in your tsconfig."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig: diag(2592, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592", "Cannot find name '{0}'. Do you need to install type definitions for jQuery? Try `npm i --save-dev @types/jquery` and then add 'jquery' to the types field in your tsconfig."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig: diag(2593, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593", "Cannot find name '{0}'. Do you need to install type definitions for a test runner? Try `npm i --save-dev @types/jest` or `npm i --save-dev @types/mocha` and then add 'jest' or 'mocha' to the types field in your tsconfig."), + This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag: diag(2594, 1 /* Error */, "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594", "This module is declared with 'export =', and can only be used with a default import when using the '{0}' flag."), + _0_can_only_be_imported_by_using_a_default_import: diag(2595, 1 /* Error */, "_0_can_only_be_imported_by_using_a_default_import_2595", "'{0}' can only be imported by using a default import."), + _0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import: diag(2596, 1 /* Error */, "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596", "'{0}' can only be imported by turning on the 'esModuleInterop' flag and using a default import."), + _0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import: diag(2597, 1 /* Error */, "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597", "'{0}' can only be imported by using a 'require' call or by using a default import."), + _0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import: diag(2598, 1 /* Error */, "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598", "'{0}' can only be imported by using a 'require' call or by turning on the 'esModuleInterop' flag and using a default import."), + JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: diag(2602, 1 /* Error */, "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602", "JSX element implicitly has type 'any' because the global type 'JSX.Element' does not exist."), + Property_0_in_type_1_is_not_assignable_to_type_2: diag(2603, 1 /* Error */, "Property_0_in_type_1_is_not_assignable_to_type_2_2603", "Property '{0}' in type '{1}' is not assignable to type '{2}'."), + JSX_element_type_0_does_not_have_any_construct_or_call_signatures: diag(2604, 1 /* Error */, "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604", "JSX element type '{0}' does not have any construct or call signatures."), + Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property: diag(2606, 1 /* Error */, "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606", "Property '{0}' of JSX spread attribute is not assignable to target property."), + JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property: diag(2607, 1 /* Error */, "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607", "JSX element class does not support attributes because it does not have a '{0}' property."), + The_global_type_JSX_0_may_not_have_more_than_one_property: diag(2608, 1 /* Error */, "The_global_type_JSX_0_may_not_have_more_than_one_property_2608", "The global type 'JSX.{0}' may not have more than one property."), + JSX_spread_child_must_be_an_array_type: diag(2609, 1 /* Error */, "JSX_spread_child_must_be_an_array_type_2609", "JSX spread child must be an array type."), + _0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property: diag(2610, 1 /* Error */, "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610", "'{0}' is defined as an accessor in class '{1}', but is overridden here in '{2}' as an instance property."), + _0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor: diag(2611, 1 /* Error */, "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611", "'{0}' is defined as a property in class '{1}', but is overridden here in '{2}' as an accessor."), + Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration: diag(2612, 1 /* Error */, "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612", "Property '{0}' will overwrite the base property in '{1}'. If this is intentional, add an initializer. Otherwise, add a 'declare' modifier or remove the redundant declaration."), + Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead: diag(2613, 1 /* Error */, "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613", "Module '{0}' has no default export. Did you mean to use 'import { {1} } from {0}' instead?"), + Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead: diag(2614, 1 /* Error */, "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614", "Module '{0}' has no exported member '{1}'. Did you mean to use 'import {1} from {0}' instead?"), + Type_of_property_0_circularly_references_itself_in_mapped_type_1: diag(2615, 1 /* Error */, "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615", "Type of property '{0}' circularly references itself in mapped type '{1}'."), + _0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import: diag(2616, 1 /* Error */, "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616", "'{0}' can only be imported by using 'import {1} = require({2})' or a default import."), + _0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import: diag(2617, 1 /* Error */, "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617", "'{0}' can only be imported by using 'import {1} = require({2})' or by turning on the 'esModuleInterop' flag and using a default import."), + Source_has_0_element_s_but_target_requires_1: diag(2618, 1 /* Error */, "Source_has_0_element_s_but_target_requires_1_2618", "Source has {0} element(s) but target requires {1}."), + Source_has_0_element_s_but_target_allows_only_1: diag(2619, 1 /* Error */, "Source_has_0_element_s_but_target_allows_only_1_2619", "Source has {0} element(s) but target allows only {1}."), + Target_requires_0_element_s_but_source_may_have_fewer: diag(2620, 1 /* Error */, "Target_requires_0_element_s_but_source_may_have_fewer_2620", "Target requires {0} element(s) but source may have fewer."), + Target_allows_only_0_element_s_but_source_may_have_more: diag(2621, 1 /* Error */, "Target_allows_only_0_element_s_but_source_may_have_more_2621", "Target allows only {0} element(s) but source may have more."), + Source_provides_no_match_for_required_element_at_position_0_in_target: diag(2623, 1 /* Error */, "Source_provides_no_match_for_required_element_at_position_0_in_target_2623", "Source provides no match for required element at position {0} in target."), + Source_provides_no_match_for_variadic_element_at_position_0_in_target: diag(2624, 1 /* Error */, "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624", "Source provides no match for variadic element at position {0} in target."), + Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target: diag(2625, 1 /* Error */, "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625", "Variadic element at position {0} in source does not match element at position {1} in target."), + Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target: diag(2626, 1 /* Error */, "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626", "Type at position {0} in source is not compatible with type at position {1} in target."), + Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target: diag(2627, 1 /* Error */, "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627", "Type at positions {0} through {1} in source is not compatible with type at position {2} in target."), + Cannot_assign_to_0_because_it_is_an_enum: diag(2628, 1 /* Error */, "Cannot_assign_to_0_because_it_is_an_enum_2628", "Cannot assign to '{0}' because it is an enum."), + Cannot_assign_to_0_because_it_is_a_class: diag(2629, 1 /* Error */, "Cannot_assign_to_0_because_it_is_a_class_2629", "Cannot assign to '{0}' because it is a class."), + Cannot_assign_to_0_because_it_is_a_function: diag(2630, 1 /* Error */, "Cannot_assign_to_0_because_it_is_a_function_2630", "Cannot assign to '{0}' because it is a function."), + Cannot_assign_to_0_because_it_is_a_namespace: diag(2631, 1 /* Error */, "Cannot_assign_to_0_because_it_is_a_namespace_2631", "Cannot assign to '{0}' because it is a namespace."), + Cannot_assign_to_0_because_it_is_an_import: diag(2632, 1 /* Error */, "Cannot_assign_to_0_because_it_is_an_import_2632", "Cannot assign to '{0}' because it is an import."), + JSX_property_access_expressions_cannot_include_JSX_namespace_names: diag(2633, 1 /* Error */, "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633", "JSX property access expressions cannot include JSX namespace names"), + _0_index_signatures_are_incompatible: diag(2634, 1 /* Error */, "_0_index_signatures_are_incompatible_2634", "'{0}' index signatures are incompatible."), + Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable: diag(2635, 1 /* Error */, "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635", "Type '{0}' has no signatures for which the type argument list is applicable."), + Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation: diag(2636, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636", "Type '{0}' is not assignable to type '{1}' as implied by variance annotation."), + Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types: diag(2637, 1 /* Error */, "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637", "Variance annotations are only supported in type aliases for object, function, constructor, and mapped types."), + Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator: diag(2638, 1 /* Error */, "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638", "Type '{0}' may represent a primitive value, which is not permitted as the right operand of the 'in' operator."), + React_components_cannot_include_JSX_namespace_names: diag(2639, 1 /* Error */, "React_components_cannot_include_JSX_namespace_names_2639", "React components cannot include JSX namespace names"), + Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity: diag(2649, 1 /* Error */, "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649", "Cannot augment module '{0}' with value exports because it resolves to a non-module entity."), + Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more: diag(2650, 1 /* Error */, "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650", "Non-abstract class expression is missing implementations for the following members of '{0}': {1} and {2} more."), + A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums: diag(2651, 1 /* Error */, "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651", "A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums."), + Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead: diag(2652, 1 /* Error */, "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652", "Merged declaration '{0}' cannot include a default export declaration. Consider adding a separate 'export default {0}' declaration instead."), + Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1: diag(2653, 1 /* Error */, "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653", "Non-abstract class expression does not implement inherited abstract member '{0}' from class '{1}'."), + Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2: diag(2654, 1 /* Error */, "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654", "Non-abstract class '{0}' is missing implementations for the following members of '{1}': {2}."), + Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more: diag(2655, 1 /* Error */, "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655", "Non-abstract class '{0}' is missing implementations for the following members of '{1}': {2} and {3} more."), + Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1: diag(2656, 1 /* Error */, "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656", "Non-abstract class expression is missing implementations for the following members of '{0}': {1}."), + JSX_expressions_must_have_one_parent_element: diag(2657, 1 /* Error */, "JSX_expressions_must_have_one_parent_element_2657", "JSX expressions must have one parent element."), + Type_0_provides_no_match_for_the_signature_1: diag(2658, 1 /* Error */, "Type_0_provides_no_match_for_the_signature_1_2658", "Type '{0}' provides no match for the signature '{1}'."), + super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher: diag(2659, 1 /* Error */, "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659", "'super' is only allowed in members of object literal expressions when option 'target' is 'ES2015' or higher."), + super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions: diag(2660, 1 /* Error */, "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660", "'super' can only be referenced in members of derived classes or object literal expressions."), + Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module: diag(2661, 1 /* Error */, "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661", "Cannot export '{0}'. Only local declarations can be exported from a module."), + Cannot_find_name_0_Did_you_mean_the_static_member_1_0: diag(2662, 1 /* Error */, "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662", "Cannot find name '{0}'. Did you mean the static member '{1}.{0}'?"), + Cannot_find_name_0_Did_you_mean_the_instance_member_this_0: diag(2663, 1 /* Error */, "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663", "Cannot find name '{0}'. Did you mean the instance member 'this.{0}'?"), + Invalid_module_name_in_augmentation_module_0_cannot_be_found: diag(2664, 1 /* Error */, "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664", "Invalid module name in augmentation, module '{0}' cannot be found."), + Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented: diag(2665, 1 /* Error */, "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665", "Invalid module name in augmentation. Module '{0}' resolves to an untyped module at '{1}', which cannot be augmented."), + Exports_and_export_assignments_are_not_permitted_in_module_augmentations: diag(2666, 1 /* Error */, "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666", "Exports and export assignments are not permitted in module augmentations."), + Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module: diag(2667, 1 /* Error */, "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667", "Imports are not permitted in module augmentations. Consider moving them to the enclosing external module."), + export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible: diag(2668, 1 /* Error */, "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668", "'export' modifier cannot be applied to ambient modules and module augmentations since they are always visible."), + Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations: diag(2669, 1 /* Error */, "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669", "Augmentations for the global scope can only be directly nested in external modules or ambient module declarations."), + Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context: diag(2670, 1 /* Error */, "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670", "Augmentations for the global scope should have 'declare' modifier unless they appear in already ambient context."), + Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity: diag(2671, 1 /* Error */, "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671", "Cannot augment module '{0}' because it resolves to a non-module entity."), + Cannot_assign_a_0_constructor_type_to_a_1_constructor_type: diag(2672, 1 /* Error */, "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672", "Cannot assign a '{0}' constructor type to a '{1}' constructor type."), + Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration: diag(2673, 1 /* Error */, "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673", "Constructor of class '{0}' is private and only accessible within the class declaration."), + Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration: diag(2674, 1 /* Error */, "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674", "Constructor of class '{0}' is protected and only accessible within the class declaration."), + Cannot_extend_a_class_0_Class_constructor_is_marked_as_private: diag(2675, 1 /* Error */, "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675", "Cannot extend a class '{0}'. Class constructor is marked as private."), + Accessors_must_both_be_abstract_or_non_abstract: diag(2676, 1 /* Error */, "Accessors_must_both_be_abstract_or_non_abstract_2676", "Accessors must both be abstract or non-abstract."), + A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type: diag(2677, 1 /* Error */, "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677", "A type predicate's type must be assignable to its parameter's type."), + Type_0_is_not_comparable_to_type_1: diag(2678, 1 /* Error */, "Type_0_is_not_comparable_to_type_1_2678", "Type '{0}' is not comparable to type '{1}'."), + A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void: diag(2679, 1 /* Error */, "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679", "A function that is called with the 'new' keyword cannot have a 'this' type that is 'void'."), + A_0_parameter_must_be_the_first_parameter: diag(2680, 1 /* Error */, "A_0_parameter_must_be_the_first_parameter_2680", "A '{0}' parameter must be the first parameter."), + A_constructor_cannot_have_a_this_parameter: diag(2681, 1 /* Error */, "A_constructor_cannot_have_a_this_parameter_2681", "A constructor cannot have a 'this' parameter."), + this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation: diag(2683, 1 /* Error */, "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683", "'this' implicitly has type 'any' because it does not have a type annotation."), + The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1: diag(2684, 1 /* Error */, "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684", "The 'this' context of type '{0}' is not assignable to method's 'this' of type '{1}'."), + The_this_types_of_each_signature_are_incompatible: diag(2685, 1 /* Error */, "The_this_types_of_each_signature_are_incompatible_2685", "The 'this' types of each signature are incompatible."), + _0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead: diag(2686, 1 /* Error */, "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686", "'{0}' refers to a UMD global, but the current file is a module. Consider adding an import instead."), + All_declarations_of_0_must_have_identical_modifiers: diag(2687, 1 /* Error */, "All_declarations_of_0_must_have_identical_modifiers_2687", "All declarations of '{0}' must have identical modifiers."), + Cannot_find_type_definition_file_for_0: diag(2688, 1 /* Error */, "Cannot_find_type_definition_file_for_0_2688", "Cannot find type definition file for '{0}'."), + Cannot_extend_an_interface_0_Did_you_mean_implements: diag(2689, 1 /* Error */, "Cannot_extend_an_interface_0_Did_you_mean_implements_2689", "Cannot extend an interface '{0}'. Did you mean 'implements'?"), + _0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0: diag(2690, 1 /* Error */, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690", "'{0}' only refers to a type, but is being used as a value here. Did you mean to use '{1} in {0}'?"), + _0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible: diag(2692, 1 /* Error */, "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692", "'{0}' is a primitive, but '{1}' is a wrapper object. Prefer using '{0}' when possible."), + _0_only_refers_to_a_type_but_is_being_used_as_a_value_here: diag(2693, 1 /* Error */, "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693", "'{0}' only refers to a type, but is being used as a value here."), + Namespace_0_has_no_exported_member_1: diag(2694, 1 /* Error */, "Namespace_0_has_no_exported_member_1_2694", "Namespace '{0}' has no exported member '{1}'."), + Left_side_of_comma_operator_is_unused_and_has_no_side_effects: diag( + 2695, + 1 /* Error */, + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695", + "Left side of comma operator is unused and has no side effects.", + /*reportsUnnecessary*/ + true + ), + The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead: diag(2696, 1 /* Error */, "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696", "The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead?"), + An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: diag(2697, 1 /* Error */, "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697", "An async function or method must return a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option."), + Spread_types_may_only_be_created_from_object_types: diag(2698, 1 /* Error */, "Spread_types_may_only_be_created_from_object_types_2698", "Spread types may only be created from object types."), + Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1: diag(2699, 1 /* Error */, "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699", "Static property '{0}' conflicts with built-in property 'Function.{0}' of constructor function '{1}'."), + Rest_types_may_only_be_created_from_object_types: diag(2700, 1 /* Error */, "Rest_types_may_only_be_created_from_object_types_2700", "Rest types may only be created from object types."), + The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access: diag(2701, 1 /* Error */, "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701", "The target of an object rest assignment must be a variable or a property access."), + _0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here: diag(2702, 1 /* Error */, "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702", "'{0}' only refers to a type, but is being used as a namespace here."), + The_operand_of_a_delete_operator_must_be_a_property_reference: diag(2703, 1 /* Error */, "The_operand_of_a_delete_operator_must_be_a_property_reference_2703", "The operand of a 'delete' operator must be a property reference."), + The_operand_of_a_delete_operator_cannot_be_a_read_only_property: diag(2704, 1 /* Error */, "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704", "The operand of a 'delete' operator cannot be a read-only property."), + An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option: diag(2705, 1 /* Error */, "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705", "An async function or method in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option."), + Required_type_parameters_may_not_follow_optional_type_parameters: diag(2706, 1 /* Error */, "Required_type_parameters_may_not_follow_optional_type_parameters_2706", "Required type parameters may not follow optional type parameters."), + Generic_type_0_requires_between_1_and_2_type_arguments: diag(2707, 1 /* Error */, "Generic_type_0_requires_between_1_and_2_type_arguments_2707", "Generic type '{0}' requires between {1} and {2} type arguments."), + Cannot_use_namespace_0_as_a_value: diag(2708, 1 /* Error */, "Cannot_use_namespace_0_as_a_value_2708", "Cannot use namespace '{0}' as a value."), + Cannot_use_namespace_0_as_a_type: diag(2709, 1 /* Error */, "Cannot_use_namespace_0_as_a_type_2709", "Cannot use namespace '{0}' as a type."), + _0_are_specified_twice_The_attribute_named_0_will_be_overwritten: diag(2710, 1 /* Error */, "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710", "'{0}' are specified twice. The attribute named '{0}' will be overwritten."), + A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option: diag(2711, 1 /* Error */, "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711", "A dynamic import call returns a 'Promise'. Make sure you have a declaration for 'Promise' or include 'ES2015' in your '--lib' option."), + A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option: diag(2712, 1 /* Error */, "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712", "A dynamic import call in ES5 requires the 'Promise' constructor. Make sure you have a declaration for the 'Promise' constructor or include 'ES2015' in your '--lib' option."), + Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1: diag(2713, 1 /* Error */, "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713", `Cannot access '{0}.{1}' because '{0}' is a type, but not a namespace. Did you mean to retrieve the type of the property '{1}' in '{0}' with '{0}["{1}"]'?`), + The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context: diag(2714, 1 /* Error */, "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714", "The expression of an export assignment must be an identifier or qualified name in an ambient context."), + Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor: diag(2715, 1 /* Error */, "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715", "Abstract property '{0}' in class '{1}' cannot be accessed in the constructor."), + Type_parameter_0_has_a_circular_default: diag(2716, 1 /* Error */, "Type_parameter_0_has_a_circular_default_2716", "Type parameter '{0}' has a circular default."), + Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2: diag(2717, 1 /* Error */, "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717", "Subsequent property declarations must have the same type. Property '{0}' must be of type '{1}', but here has type '{2}'."), + Duplicate_property_0: diag(2718, 1 /* Error */, "Duplicate_property_0_2718", "Duplicate property '{0}'."), + Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated: diag(2719, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719", "Type '{0}' is not assignable to type '{1}'. Two different types with this name exist, but they are unrelated."), + Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass: diag(2720, 1 /* Error */, "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720", "Class '{0}' incorrectly implements class '{1}'. Did you mean to extend '{1}' and inherit its members as a subclass?"), + Cannot_invoke_an_object_which_is_possibly_null: diag(2721, 1 /* Error */, "Cannot_invoke_an_object_which_is_possibly_null_2721", "Cannot invoke an object which is possibly 'null'."), + Cannot_invoke_an_object_which_is_possibly_undefined: diag(2722, 1 /* Error */, "Cannot_invoke_an_object_which_is_possibly_undefined_2722", "Cannot invoke an object which is possibly 'undefined'."), + Cannot_invoke_an_object_which_is_possibly_null_or_undefined: diag(2723, 1 /* Error */, "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723", "Cannot invoke an object which is possibly 'null' or 'undefined'."), + _0_has_no_exported_member_named_1_Did_you_mean_2: diag(2724, 1 /* Error */, "_0_has_no_exported_member_named_1_Did_you_mean_2_2724", "'{0}' has no exported member named '{1}'. Did you mean '{2}'?"), + Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0: diag(2725, 1 /* Error */, "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725", "Class name cannot be 'Object' when targeting ES5 and above with module {0}."), + Cannot_find_lib_definition_for_0: diag(2726, 1 /* Error */, "Cannot_find_lib_definition_for_0_2726", "Cannot find lib definition for '{0}'."), + Cannot_find_lib_definition_for_0_Did_you_mean_1: diag(2727, 1 /* Error */, "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727", "Cannot find lib definition for '{0}'. Did you mean '{1}'?"), + _0_is_declared_here: diag(2728, 3 /* Message */, "_0_is_declared_here_2728", "'{0}' is declared here."), + Property_0_is_used_before_its_initialization: diag(2729, 1 /* Error */, "Property_0_is_used_before_its_initialization_2729", "Property '{0}' is used before its initialization."), + An_arrow_function_cannot_have_a_this_parameter: diag(2730, 1 /* Error */, "An_arrow_function_cannot_have_a_this_parameter_2730", "An arrow function cannot have a 'this' parameter."), + Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String: diag(2731, 1 /* Error */, "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731", "Implicit conversion of a 'symbol' to a 'string' will fail at runtime. Consider wrapping this expression in 'String(...)'."), + Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension: diag(2732, 1 /* Error */, "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732", "Cannot find module '{0}'. Consider using '--resolveJsonModule' to import module with '.json' extension."), + Property_0_was_also_declared_here: diag(2733, 1 /* Error */, "Property_0_was_also_declared_here_2733", "Property '{0}' was also declared here."), + Are_you_missing_a_semicolon: diag(2734, 1 /* Error */, "Are_you_missing_a_semicolon_2734", "Are you missing a semicolon?"), + Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1: diag(2735, 1 /* Error */, "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735", "Did you mean for '{0}' to be constrained to type 'new (...args: any[]) => {1}'?"), + Operator_0_cannot_be_applied_to_type_1: diag(2736, 1 /* Error */, "Operator_0_cannot_be_applied_to_type_1_2736", "Operator '{0}' cannot be applied to type '{1}'."), + BigInt_literals_are_not_available_when_targeting_lower_than_ES2020: diag(2737, 1 /* Error */, "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737", "BigInt literals are not available when targeting lower than ES2020."), + An_outer_value_of_this_is_shadowed_by_this_container: diag(2738, 3 /* Message */, "An_outer_value_of_this_is_shadowed_by_this_container_2738", "An outer value of 'this' is shadowed by this container."), + Type_0_is_missing_the_following_properties_from_type_1_Colon_2: diag(2739, 1 /* Error */, "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739", "Type '{0}' is missing the following properties from type '{1}': {2}"), + Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more: diag(2740, 1 /* Error */, "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740", "Type '{0}' is missing the following properties from type '{1}': {2}, and {3} more."), + Property_0_is_missing_in_type_1_but_required_in_type_2: diag(2741, 1 /* Error */, "Property_0_is_missing_in_type_1_but_required_in_type_2_2741", "Property '{0}' is missing in type '{1}' but required in type '{2}'."), + The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary: diag(2742, 1 /* Error */, "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742", "The inferred type of '{0}' cannot be named without a reference to '{1}'. This is likely not portable. A type annotation is necessary."), + No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments: diag(2743, 1 /* Error */, "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743", "No overload expects {0} type arguments, but overloads do exist that expect either {1} or {2} type arguments."), + Type_parameter_defaults_can_only_reference_previously_declared_type_parameters: diag(2744, 1 /* Error */, "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744", "Type parameter defaults can only reference previously declared type parameters."), + This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided: diag(2745, 1 /* Error */, "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745", "This JSX tag's '{0}' prop expects type '{1}' which requires multiple children, but only a single child was provided."), + This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided: diag(2746, 1 /* Error */, "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746", "This JSX tag's '{0}' prop expects a single child of type '{1}', but multiple children were provided."), + _0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2: diag(2747, 1 /* Error */, "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747", "'{0}' components don't accept text as child elements. Text in JSX has the type 'string', but the expected type of '{1}' is '{2}'."), + Cannot_access_ambient_const_enums_when_0_is_enabled: diag(2748, 1 /* Error */, "Cannot_access_ambient_const_enums_when_0_is_enabled_2748", "Cannot access ambient const enums when '{0}' is enabled."), + _0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0: diag(2749, 1 /* Error */, "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749", "'{0}' refers to a value, but is being used as a type here. Did you mean 'typeof {0}'?"), + The_implementation_signature_is_declared_here: diag(2750, 1 /* Error */, "The_implementation_signature_is_declared_here_2750", "The implementation signature is declared here."), + Circularity_originates_in_type_at_this_location: diag(2751, 1 /* Error */, "Circularity_originates_in_type_at_this_location_2751", "Circularity originates in type at this location."), + The_first_export_default_is_here: diag(2752, 1 /* Error */, "The_first_export_default_is_here_2752", "The first export default is here."), + Another_export_default_is_here: diag(2753, 1 /* Error */, "Another_export_default_is_here_2753", "Another export default is here."), + super_may_not_use_type_arguments: diag(2754, 1 /* Error */, "super_may_not_use_type_arguments_2754", "'super' may not use type arguments."), + No_constituent_of_type_0_is_callable: diag(2755, 1 /* Error */, "No_constituent_of_type_0_is_callable_2755", "No constituent of type '{0}' is callable."), + Not_all_constituents_of_type_0_are_callable: diag(2756, 1 /* Error */, "Not_all_constituents_of_type_0_are_callable_2756", "Not all constituents of type '{0}' are callable."), + Type_0_has_no_call_signatures: diag(2757, 1 /* Error */, "Type_0_has_no_call_signatures_2757", "Type '{0}' has no call signatures."), + Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other: diag(2758, 1 /* Error */, "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758", "Each member of the union type '{0}' has signatures, but none of those signatures are compatible with each other."), + No_constituent_of_type_0_is_constructable: diag(2759, 1 /* Error */, "No_constituent_of_type_0_is_constructable_2759", "No constituent of type '{0}' is constructable."), + Not_all_constituents_of_type_0_are_constructable: diag(2760, 1 /* Error */, "Not_all_constituents_of_type_0_are_constructable_2760", "Not all constituents of type '{0}' are constructable."), + Type_0_has_no_construct_signatures: diag(2761, 1 /* Error */, "Type_0_has_no_construct_signatures_2761", "Type '{0}' has no construct signatures."), + Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other: diag(2762, 1 /* Error */, "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762", "Each member of the union type '{0}' has construct signatures, but none of those signatures are compatible with each other."), + Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0: diag(2763, 1 /* Error */, "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763", "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but for-of will always send '{0}'."), + Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0: diag(2764, 1 /* Error */, "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764", "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array spread will always send '{0}'."), + Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0: diag(2765, 1 /* Error */, "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765", "Cannot iterate value because the 'next' method of its iterator expects type '{1}', but array destructuring will always send '{0}'."), + Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0: diag(2766, 1 /* Error */, "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766", "Cannot delegate iteration to value because the 'next' method of its iterator expects type '{1}', but the containing generator will always send '{0}'."), + The_0_property_of_an_iterator_must_be_a_method: diag(2767, 1 /* Error */, "The_0_property_of_an_iterator_must_be_a_method_2767", "The '{0}' property of an iterator must be a method."), + The_0_property_of_an_async_iterator_must_be_a_method: diag(2768, 1 /* Error */, "The_0_property_of_an_async_iterator_must_be_a_method_2768", "The '{0}' property of an async iterator must be a method."), + No_overload_matches_this_call: diag(2769, 1 /* Error */, "No_overload_matches_this_call_2769", "No overload matches this call."), + The_last_overload_gave_the_following_error: diag(2770, 1 /* Error */, "The_last_overload_gave_the_following_error_2770", "The last overload gave the following error."), + The_last_overload_is_declared_here: diag(2771, 1 /* Error */, "The_last_overload_is_declared_here_2771", "The last overload is declared here."), + Overload_0_of_1_2_gave_the_following_error: diag(2772, 1 /* Error */, "Overload_0_of_1_2_gave_the_following_error_2772", "Overload {0} of {1}, '{2}', gave the following error."), + Did_you_forget_to_use_await: diag(2773, 1 /* Error */, "Did_you_forget_to_use_await_2773", "Did you forget to use 'await'?"), + This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead: diag(2774, 1 /* Error */, "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774", "This condition will always return true since this function is always defined. Did you mean to call it instead?"), + Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation: diag(2775, 1 /* Error */, "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775", "Assertions require every name in the call target to be declared with an explicit type annotation."), + Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name: diag(2776, 1 /* Error */, "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776", "Assertions require the call target to be an identifier or qualified name."), + The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access: diag(2777, 1 /* Error */, "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777", "The operand of an increment or decrement operator may not be an optional property access."), + The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access: diag(2778, 1 /* Error */, "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778", "The target of an object rest assignment may not be an optional property access."), + The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access: diag(2779, 1 /* Error */, "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779", "The left-hand side of an assignment expression may not be an optional property access."), + The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access: diag(2780, 1 /* Error */, "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780", "The left-hand side of a 'for...in' statement may not be an optional property access."), + The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access: diag(2781, 1 /* Error */, "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781", "The left-hand side of a 'for...of' statement may not be an optional property access."), + _0_needs_an_explicit_type_annotation: diag(2782, 3 /* Message */, "_0_needs_an_explicit_type_annotation_2782", "'{0}' needs an explicit type annotation."), + _0_is_specified_more_than_once_so_this_usage_will_be_overwritten: diag(2783, 1 /* Error */, "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783", "'{0}' is specified more than once, so this usage will be overwritten."), + get_and_set_accessors_cannot_declare_this_parameters: diag(2784, 1 /* Error */, "get_and_set_accessors_cannot_declare_this_parameters_2784", "'get' and 'set' accessors cannot declare 'this' parameters."), + This_spread_always_overwrites_this_property: diag(2785, 1 /* Error */, "This_spread_always_overwrites_this_property_2785", "This spread always overwrites this property."), + _0_cannot_be_used_as_a_JSX_component: diag(2786, 1 /* Error */, "_0_cannot_be_used_as_a_JSX_component_2786", "'{0}' cannot be used as a JSX component."), + Its_return_type_0_is_not_a_valid_JSX_element: diag(2787, 1 /* Error */, "Its_return_type_0_is_not_a_valid_JSX_element_2787", "Its return type '{0}' is not a valid JSX element."), + Its_instance_type_0_is_not_a_valid_JSX_element: diag(2788, 1 /* Error */, "Its_instance_type_0_is_not_a_valid_JSX_element_2788", "Its instance type '{0}' is not a valid JSX element."), + Its_element_type_0_is_not_a_valid_JSX_element: diag(2789, 1 /* Error */, "Its_element_type_0_is_not_a_valid_JSX_element_2789", "Its element type '{0}' is not a valid JSX element."), + The_operand_of_a_delete_operator_must_be_optional: diag(2790, 1 /* Error */, "The_operand_of_a_delete_operator_must_be_optional_2790", "The operand of a 'delete' operator must be optional."), + Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later: diag(2791, 1 /* Error */, "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791", "Exponentiation cannot be performed on 'bigint' values unless the 'target' option is set to 'es2016' or later."), + Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option: diag(2792, 1 /* Error */, "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792", "Cannot find module '{0}'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?"), + The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible: diag(2793, 1 /* Error */, "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793", "The call would have succeeded against this implementation, but implementation signatures of overloads are not externally visible."), + Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise: diag(2794, 1 /* Error */, "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794", "Expected {0} arguments, but got {1}. Did you forget to include 'void' in your type argument to 'Promise'?"), + The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types: diag(2795, 1 /* Error */, "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795", "The 'intrinsic' keyword can only be used to declare compiler provided intrinsic types."), + It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked: diag(2796, 1 /* Error */, "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796", "It is likely that you are missing a comma to separate these two template expressions. They form a tagged template expression which cannot be invoked."), + A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract: diag(2797, 1 /* Error */, "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797", "A mixin class that extends from a type variable containing an abstract construct signature must also be declared 'abstract'."), + The_declaration_was_marked_as_deprecated_here: diag(2798, 1 /* Error */, "The_declaration_was_marked_as_deprecated_here_2798", "The declaration was marked as deprecated here."), + Type_produces_a_tuple_type_that_is_too_large_to_represent: diag(2799, 1 /* Error */, "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799", "Type produces a tuple type that is too large to represent."), + Expression_produces_a_tuple_type_that_is_too_large_to_represent: diag(2800, 1 /* Error */, "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800", "Expression produces a tuple type that is too large to represent."), + This_condition_will_always_return_true_since_this_0_is_always_defined: diag(2801, 1 /* Error */, "This_condition_will_always_return_true_since_this_0_is_always_defined_2801", "This condition will always return true since this '{0}' is always defined."), + Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher: diag(2802, 1 /* Error */, "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802", "Type '{0}' can only be iterated through when using the '--downlevelIteration' flag or with a '--target' of 'es2015' or higher."), + Cannot_assign_to_private_method_0_Private_methods_are_not_writable: diag(2803, 1 /* Error */, "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803", "Cannot assign to private method '{0}'. Private methods are not writable."), + Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name: diag(2804, 1 /* Error */, "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804", "Duplicate identifier '{0}'. Static and instance elements cannot share the same private name."), + Private_accessor_was_defined_without_a_getter: diag(2806, 1 /* Error */, "Private_accessor_was_defined_without_a_getter_2806", "Private accessor was defined without a getter."), + This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0: diag(2807, 1 /* Error */, "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807", "This syntax requires an imported helper named '{1}' with {2} parameters, which is not compatible with the one in '{0}'. Consider upgrading your version of '{0}'."), + A_get_accessor_must_be_at_least_as_accessible_as_the_setter: diag(2808, 1 /* Error */, "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808", "A get accessor must be at least as accessible as the setter"), + Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_whole_assignment_in_parentheses: diag(2809, 1 /* Error */, "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809", "Declaration or statement expected. This '=' follows a block of statements, so if you intended to write a destructuring assignment, you might need to wrap the whole assignment in parentheses."), + Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments: diag(2810, 1 /* Error */, "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810", "Expected 1 argument, but got 0. 'new Promise()' needs a JSDoc hint to produce a 'resolve' that can be called without arguments."), + Initializer_for_property_0: diag(2811, 1 /* Error */, "Initializer_for_property_0_2811", "Initializer for property '{0}'"), + Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom: diag(2812, 1 /* Error */, "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812", "Property '{0}' does not exist on type '{1}'. Try changing the 'lib' compiler option to include 'dom'."), + Class_declaration_cannot_implement_overload_list_for_0: diag(2813, 1 /* Error */, "Class_declaration_cannot_implement_overload_list_for_0_2813", "Class declaration cannot implement overload list for '{0}'."), + Function_with_bodies_can_only_merge_with_classes_that_are_ambient: diag(2814, 1 /* Error */, "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814", "Function with bodies can only merge with classes that are ambient."), + arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks: diag(2815, 1 /* Error */, "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815", "'arguments' cannot be referenced in property initializers or class static initialization blocks."), + Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class: diag(2816, 1 /* Error */, "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816", "Cannot use 'this' in a static property initializer of a decorated class."), + Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block: diag(2817, 1 /* Error */, "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817", "Property '{0}' has no initializer and is not definitely assigned in a class static block."), + Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, 1 /* Error */, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."), + Namespace_name_cannot_be_0: diag(2819, 1 /* Error */, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."), + Type_0_is_not_assignable_to_type_1_Did_you_mean_2: diag(2820, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820", "Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?"), + Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve: diag(2821, 1 /* Error */, "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821", "Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'."), + Import_assertions_cannot_be_used_with_type_only_imports_or_exports: diag(2822, 1 /* Error */, "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822", "Import assertions cannot be used with type-only imports or exports."), + Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve: diag(2823, 1 /* Error */, "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823", "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'node20', 'nodenext', or 'preserve'."), + Cannot_find_namespace_0_Did_you_mean_1: diag(2833, 1 /* Error */, "Cannot_find_namespace_0_Did_you_mean_1_2833", "Cannot find namespace '{0}'. Did you mean '{1}'?"), + Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path: diag(2834, 1 /* Error */, "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834", "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path."), + Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0: diag(2835, 1 /* Error */, "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835", "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?"), + Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls: diag(2836, 1 /* Error */, "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836", "Import assertions are not allowed on statements that compile to CommonJS 'require' calls."), + Import_assertion_values_must_be_string_literal_expressions: diag(2837, 1 /* Error */, "Import_assertion_values_must_be_string_literal_expressions_2837", "Import assertion values must be string literal expressions."), + All_declarations_of_0_must_have_identical_constraints: diag(2838, 1 /* Error */, "All_declarations_of_0_must_have_identical_constraints_2838", "All declarations of '{0}' must have identical constraints."), + This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value: diag(2839, 1 /* Error */, "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839", "This condition will always return '{0}' since JavaScript compares objects by reference, not value."), + An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types: diag(2840, 1 /* Error */, "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840", "An interface cannot extend a primitive type like '{0}'. It can only extend other named object types."), + _0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation: diag(2842, 1 /* Error */, "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842", "'{0}' is an unused renaming of '{1}'. Did you intend to use it as a type annotation?"), + We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here: diag(2843, 1 /* Error */, "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843", "We can only write a type for '{0}' by adding a type for the entire parameter here."), + Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor: diag(2844, 1 /* Error */, "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844", "Type of instance member variable '{0}' cannot reference identifier '{1}' declared in the constructor."), + This_condition_will_always_return_0: diag(2845, 1 /* Error */, "This_condition_will_always_return_0_2845", "This condition will always return '{0}'."), + A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead: diag(2846, 1 /* Error */, "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846", "A declaration file cannot be imported without 'import type'. Did you mean to import an implementation file '{0}' instead?"), + The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression: diag(2848, 1 /* Error */, "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848", "The right-hand side of an 'instanceof' expression must not be an instantiation expression."), + Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1: diag(2849, 1 /* Error */, "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849", "Target signature provides too few arguments. Expected {0} or more, but got {1}."), + The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined: diag(2850, 1 /* Error */, "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850", "The initializer of a 'using' declaration must be either an object with a '[Symbol.dispose]()' method, or be 'null' or 'undefined'."), + The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined: diag(2851, 1 /* Error */, "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851", "The initializer of an 'await using' declaration must be either an object with a '[Symbol.asyncDispose]()' or '[Symbol.dispose]()' method, or be 'null' or 'undefined'."), + await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(2852, 1 /* Error */, "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852", "'await using' statements are only allowed within async functions and at the top levels of modules."), + await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(2853, 1 /* Error */, "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853", "'await using' statements are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."), + Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(2854, 1 /* Error */, "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854", "Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'node20', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), + Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super: diag(2855, 1 /* Error */, "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855", "Class field '{0}' defined by the parent class is not accessible in the child class via super."), + Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls: diag(2856, 1 /* Error */, "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856", "Import attributes are not allowed on statements that compile to CommonJS 'require' calls."), + Import_attributes_cannot_be_used_with_type_only_imports_or_exports: diag(2857, 1 /* Error */, "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857", "Import attributes cannot be used with type-only imports or exports."), + Import_attribute_values_must_be_string_literal_expressions: diag(2858, 1 /* Error */, "Import_attribute_values_must_be_string_literal_expressions_2858", "Import attribute values must be string literal expressions."), + Excessive_complexity_comparing_types_0_and_1: diag(2859, 1 /* Error */, "Excessive_complexity_comparing_types_0_and_1_2859", "Excessive complexity comparing types '{0}' and '{1}'."), + The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method: diag(2860, 1 /* Error */, "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860", "The left-hand side of an 'instanceof' expression must be assignable to the first argument of the right-hand side's '[Symbol.hasInstance]' method."), + An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression: diag(2861, 1 /* Error */, "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861", "An object's '[Symbol.hasInstance]' method must return a boolean value for it to be used on the right-hand side of an 'instanceof' expression."), + Type_0_is_generic_and_can_only_be_indexed_for_reading: diag(2862, 1 /* Error */, "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862", "Type '{0}' is generic and can only be indexed for reading."), + A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values: diag(2863, 1 /* Error */, "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863", "A class cannot extend a primitive type like '{0}'. Classes can only extend constructable values."), + A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types: diag(2864, 1 /* Error */, "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864", "A class cannot implement a primitive type like '{0}'. It can only implement other named object types."), + Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled: diag(2865, 1 /* Error */, "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865", "Import '{0}' conflicts with local value, so must be declared with a type-only import when 'isolatedModules' is enabled."), + Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled: diag(2866, 1 /* Error */, "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866", "Import '{0}' conflicts with global value used in this file, so must be declared with a type-only import when 'isolatedModules' is enabled."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun: diag(2867, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867", "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun`."), + Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig: diag(2868, 1 /* Error */, "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868", "Cannot find name '{0}'. Do you need to install type definitions for Bun? Try `npm i --save-dev @types/bun` and then add 'bun' to the types field in your tsconfig."), + Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish: diag(2869, 1 /* Error */, "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869", "Right operand of ?? is unreachable because the left operand is never nullish."), + This_binary_expression_is_never_nullish_Are_you_missing_parentheses: diag(2870, 1 /* Error */, "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870", "This binary expression is never nullish. Are you missing parentheses?"), + This_expression_is_always_nullish: diag(2871, 1 /* Error */, "This_expression_is_always_nullish_2871", "This expression is always nullish."), + This_kind_of_expression_is_always_truthy: diag(2872, 1 /* Error */, "This_kind_of_expression_is_always_truthy_2872", "This kind of expression is always truthy."), + This_kind_of_expression_is_always_falsy: diag(2873, 1 /* Error */, "This_kind_of_expression_is_always_falsy_2873", "This kind of expression is always falsy."), + This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found: diag(2874, 1 /* Error */, "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874", "This JSX tag requires '{0}' to be in scope, but it could not be found."), + This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_for_the_appropriate_package_installed: diag(2875, 1 /* Error */, "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875", "This JSX tag requires the module path '{0}' to exist, but none could be found. Make sure you have types for the appropriate package installed."), + This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolves_to_0: diag(2876, 1 /* Error */, "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876", 'This relative import path is unsafe to rewrite because it looks like a file name, but actually resolves to "{0}".'), + This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_during_emit_because_it_is_not_a_relative_path: diag(2877, 1 /* Error */, "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877", "This import uses a '{0}' extension to resolve to an input TypeScript file, but will not be rewritten during emit because it is not a relative path."), + This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_between_the_projects_output_files_is_not_the_same_as_the_relative_path_between_its_input_files: diag(2878, 1 /* Error */, "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878", "This import path is unsafe to rewrite because it resolves to another project, and the relative path between the projects' output files is not the same as the relative path between its input files."), + Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found: diag(2879, 1 /* Error */, "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879", "Using JSX fragments requires fragment factory '{0}' to be in scope, but it could not be found."), + Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert: diag(2880, 1 /* Error */, "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880", "Import assertions have been replaced by import attributes. Use 'with' instead of 'assert'."), + This_expression_is_never_nullish: diag(2881, 1 /* Error */, "This_expression_is_never_nullish_2881", "This expression is never nullish."), + Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), + Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), + Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), + Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4006, 1 /* Error */, "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006", "Type parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."), + Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4008, 1 /* Error */, "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008", "Type parameter '{0}' of call signature from exported interface has or is using private name '{1}'."), + Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: diag(4010, 1 /* Error */, "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010", "Type parameter '{0}' of public static method from exported class has or is using private name '{1}'."), + Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: diag(4012, 1 /* Error */, "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012", "Type parameter '{0}' of public method from exported class has or is using private name '{1}'."), + Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: diag(4014, 1 /* Error */, "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014", "Type parameter '{0}' of method from exported interface has or is using private name '{1}'."), + Type_parameter_0_of_exported_function_has_or_is_using_private_name_1: diag(4016, 1 /* Error */, "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016", "Type parameter '{0}' of exported function has or is using private name '{1}'."), + Implements_clause_of_exported_class_0_has_or_is_using_private_name_1: diag(4019, 1 /* Error */, "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019", "Implements clause of exported class '{0}' has or is using private name '{1}'."), + extends_clause_of_exported_class_0_has_or_is_using_private_name_1: diag(4020, 1 /* Error */, "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020", "'extends' clause of exported class '{0}' has or is using private name '{1}'."), + extends_clause_of_exported_class_has_or_is_using_private_name_0: diag(4021, 1 /* Error */, "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021", "'extends' clause of exported class has or is using private name '{0}'."), + extends_clause_of_exported_interface_0_has_or_is_using_private_name_1: diag(4022, 1 /* Error */, "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022", "'extends' clause of exported interface '{0}' has or is using private name '{1}'."), + Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4023, 1 /* Error */, "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023", "Exported variable '{0}' has or is using name '{1}' from external module {2} but cannot be named."), + Exported_variable_0_has_or_is_using_name_1_from_private_module_2: diag(4024, 1 /* Error */, "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024", "Exported variable '{0}' has or is using name '{1}' from private module '{2}'."), + Exported_variable_0_has_or_is_using_private_name_1: diag(4025, 1 /* Error */, "Exported_variable_0_has_or_is_using_private_name_1_4025", "Exported variable '{0}' has or is using private name '{1}'."), + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4026, 1 /* Error */, "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026", "Public static property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), + Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4027, 1 /* Error */, "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027", "Public static property '{0}' of exported class has or is using name '{1}' from private module '{2}'."), + Public_static_property_0_of_exported_class_has_or_is_using_private_name_1: diag(4028, 1 /* Error */, "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028", "Public static property '{0}' of exported class has or is using private name '{1}'."), + Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4029, 1 /* Error */, "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029", "Public property '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), + Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4030, 1 /* Error */, "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030", "Public property '{0}' of exported class has or is using name '{1}' from private module '{2}'."), + Public_property_0_of_exported_class_has_or_is_using_private_name_1: diag(4031, 1 /* Error */, "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031", "Public property '{0}' of exported class has or is using private name '{1}'."), + Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4032, 1 /* Error */, "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032", "Property '{0}' of exported interface has or is using name '{1}' from private module '{2}'."), + Property_0_of_exported_interface_has_or_is_using_private_name_1: diag(4033, 1 /* Error */, "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033", "Property '{0}' of exported interface has or is using private name '{1}'."), + Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4034, 1 /* Error */, "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034", "Parameter type of public static setter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), + Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1: diag(4035, 1 /* Error */, "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035", "Parameter type of public static setter '{0}' from exported class has or is using private name '{1}'."), + Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4036, 1 /* Error */, "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036", "Parameter type of public setter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), + Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1: diag(4037, 1 /* Error */, "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037", "Parameter type of public setter '{0}' from exported class has or is using private name '{1}'."), + Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4038, 1 /* Error */, "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038", "Return type of public static getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named."), + Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4039, 1 /* Error */, "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039", "Return type of public static getter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), + Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1: diag(4040, 1 /* Error */, "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040", "Return type of public static getter '{0}' from exported class has or is using private name '{1}'."), + Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4041, 1 /* Error */, "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041", "Return type of public getter '{0}' from exported class has or is using name '{1}' from external module {2} but cannot be named."), + Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4042, 1 /* Error */, "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042", "Return type of public getter '{0}' from exported class has or is using name '{1}' from private module '{2}'."), + Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1: diag(4043, 1 /* Error */, "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043", "Return type of public getter '{0}' from exported class has or is using private name '{1}'."), + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4044, 1 /* Error */, "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044", "Return type of constructor signature from exported interface has or is using name '{0}' from private module '{1}'."), + Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4045, 1 /* Error */, "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045", "Return type of constructor signature from exported interface has or is using private name '{0}'."), + Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4046, 1 /* Error */, "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046", "Return type of call signature from exported interface has or is using name '{0}' from private module '{1}'."), + Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4047, 1 /* Error */, "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047", "Return type of call signature from exported interface has or is using private name '{0}'."), + Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4048, 1 /* Error */, "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048", "Return type of index signature from exported interface has or is using name '{0}' from private module '{1}'."), + Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0: diag(4049, 1 /* Error */, "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049", "Return type of index signature from exported interface has or is using private name '{0}'."), + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4050, 1 /* Error */, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050", "Return type of public static method from exported class has or is using name '{0}' from external module {1} but cannot be named."), + Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: diag(4051, 1 /* Error */, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051", "Return type of public static method from exported class has or is using name '{0}' from private module '{1}'."), + Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0: diag(4052, 1 /* Error */, "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052", "Return type of public static method from exported class has or is using private name '{0}'."), + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4053, 1 /* Error */, "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053", "Return type of public method from exported class has or is using name '{0}' from external module {1} but cannot be named."), + Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1: diag(4054, 1 /* Error */, "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054", "Return type of public method from exported class has or is using name '{0}' from private module '{1}'."), + Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0: diag(4055, 1 /* Error */, "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055", "Return type of public method from exported class has or is using private name '{0}'."), + Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1: diag(4056, 1 /* Error */, "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056", "Return type of method from exported interface has or is using name '{0}' from private module '{1}'."), + Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0: diag(4057, 1 /* Error */, "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057", "Return type of method from exported interface has or is using private name '{0}'."), + Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named: diag(4058, 1 /* Error */, "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058", "Return type of exported function has or is using name '{0}' from external module {1} but cannot be named."), + Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1: diag(4059, 1 /* Error */, "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059", "Return type of exported function has or is using name '{0}' from private module '{1}'."), + Return_type_of_exported_function_has_or_is_using_private_name_0: diag(4060, 1 /* Error */, "Return_type_of_exported_function_has_or_is_using_private_name_0_4060", "Return type of exported function has or is using private name '{0}'."), + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4061, 1 /* Error */, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061", "Parameter '{0}' of constructor from exported class has or is using name '{1}' from external module {2} but cannot be named."), + Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4062, 1 /* Error */, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062", "Parameter '{0}' of constructor from exported class has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1: diag(4063, 1 /* Error */, "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063", "Parameter '{0}' of constructor from exported class has or is using private name '{1}'."), + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4064, 1 /* Error */, "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064", "Parameter '{0}' of constructor signature from exported interface has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4065, 1 /* Error */, "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065", "Parameter '{0}' of constructor signature from exported interface has or is using private name '{1}'."), + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4066, 1 /* Error */, "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066", "Parameter '{0}' of call signature from exported interface has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4067, 1 /* Error */, "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067", "Parameter '{0}' of call signature from exported interface has or is using private name '{1}'."), + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4068, 1 /* Error */, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068", "Parameter '{0}' of public static method from exported class has or is using name '{1}' from external module {2} but cannot be named."), + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4069, 1 /* Error */, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069", "Parameter '{0}' of public static method from exported class has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1: diag(4070, 1 /* Error */, "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070", "Parameter '{0}' of public static method from exported class has or is using private name '{1}'."), + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4071, 1 /* Error */, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071", "Parameter '{0}' of public method from exported class has or is using name '{1}' from external module {2} but cannot be named."), + Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4072, 1 /* Error */, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072", "Parameter '{0}' of public method from exported class has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1: diag(4073, 1 /* Error */, "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073", "Parameter '{0}' of public method from exported class has or is using private name '{1}'."), + Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4074, 1 /* Error */, "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074", "Parameter '{0}' of method from exported interface has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1: diag(4075, 1 /* Error */, "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075", "Parameter '{0}' of method from exported interface has or is using private name '{1}'."), + Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4076, 1 /* Error */, "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076", "Parameter '{0}' of exported function has or is using name '{1}' from external module {2} but cannot be named."), + Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2: diag(4077, 1 /* Error */, "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077", "Parameter '{0}' of exported function has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_exported_function_has_or_is_using_private_name_1: diag(4078, 1 /* Error */, "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078", "Parameter '{0}' of exported function has or is using private name '{1}'."), + Exported_type_alias_0_has_or_is_using_private_name_1: diag(4081, 1 /* Error */, "Exported_type_alias_0_has_or_is_using_private_name_1_4081", "Exported type alias '{0}' has or is using private name '{1}'."), + Default_export_of_the_module_has_or_is_using_private_name_0: diag(4082, 1 /* Error */, "Default_export_of_the_module_has_or_is_using_private_name_0_4082", "Default export of the module has or is using private name '{0}'."), + Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1: diag(4083, 1 /* Error */, "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083", "Type parameter '{0}' of exported type alias has or is using private name '{1}'."), + Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2: diag(4084, 1 /* Error */, "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084", "Exported type alias '{0}' has or is using private name '{1}' from module {2}."), + Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1: diag(4085, 1 /* Error */, "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085", "Extends clause for inferred type '{0}' has or is using private name '{1}'."), + Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4091, 1 /* Error */, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091", "Parameter '{0}' of index signature from exported interface has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1: diag(4092, 1 /* Error */, "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092", "Parameter '{0}' of index signature from exported interface has or is using private name '{1}'."), + Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected: diag(4094, 1 /* Error */, "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094", "Property '{0}' of exported anonymous class type may not be private or protected."), + Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4095, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095", "Public static method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), + Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4096, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096", "Public static method '{0}' of exported class has or is using name '{1}' from private module '{2}'."), + Public_static_method_0_of_exported_class_has_or_is_using_private_name_1: diag(4097, 1 /* Error */, "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097", "Public static method '{0}' of exported class has or is using private name '{1}'."), + Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4098, 1 /* Error */, "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098", "Public method '{0}' of exported class has or is using name '{1}' from external module {2} but cannot be named."), + Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2: diag(4099, 1 /* Error */, "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099", "Public method '{0}' of exported class has or is using name '{1}' from private module '{2}'."), + Public_method_0_of_exported_class_has_or_is_using_private_name_1: diag(4100, 1 /* Error */, "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100", "Public method '{0}' of exported class has or is using private name '{1}'."), + Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2: diag(4101, 1 /* Error */, "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101", "Method '{0}' of exported interface has or is using name '{1}' from private module '{2}'."), + Method_0_of_exported_interface_has_or_is_using_private_name_1: diag(4102, 1 /* Error */, "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102", "Method '{0}' of exported interface has or is using private name '{1}'."), + Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1: diag(4103, 1 /* Error */, "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103", "Type parameter '{0}' of exported mapped object type is using private name '{1}'."), + The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1: diag(4104, 1 /* Error */, "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104", "The type '{0}' is 'readonly' and cannot be assigned to the mutable type '{1}'."), + Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter: diag(4105, 1 /* Error */, "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105", "Private or protected member '{0}' cannot be accessed on a type parameter."), + Parameter_0_of_accessor_has_or_is_using_private_name_1: diag(4106, 1 /* Error */, "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106", "Parameter '{0}' of accessor has or is using private name '{1}'."), + Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2: diag(4107, 1 /* Error */, "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107", "Parameter '{0}' of accessor has or is using name '{1}' from private module '{2}'."), + Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named: diag(4108, 1 /* Error */, "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108", "Parameter '{0}' of accessor has or is using name '{1}' from external module '{2}' but cannot be named."), + Type_arguments_for_0_circularly_reference_themselves: diag(4109, 1 /* Error */, "Type_arguments_for_0_circularly_reference_themselves_4109", "Type arguments for '{0}' circularly reference themselves."), + Tuple_type_arguments_circularly_reference_themselves: diag(4110, 1 /* Error */, "Tuple_type_arguments_circularly_reference_themselves_4110", "Tuple type arguments circularly reference themselves."), + Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0: diag(4111, 1 /* Error */, "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111", "Property '{0}' comes from an index signature, so it must be accessed with ['{0}']."), + This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class: diag(4112, 1 /* Error */, "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112", "This member cannot have an 'override' modifier because its containing class '{0}' does not extend another class."), + This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0: diag(4113, 1 /* Error */, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'."), + This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0: diag(4114, 1 /* Error */, "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114", "This member must have an 'override' modifier because it overrides a member in the base class '{0}'."), + This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0: diag(4115, 1 /* Error */, "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115", "This parameter property must have an 'override' modifier because it overrides a member in base class '{0}'."), + This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0: diag(4116, 1 /* Error */, "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116", "This member must have an 'override' modifier because it overrides an abstract method that is declared in the base class '{0}'."), + This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4117, 1 /* Error */, "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117", "This member cannot have an 'override' modifier because it is not declared in the base class '{0}'. Did you mean '{1}'?"), + The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized: diag(4118, 1 /* Error */, "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118", "The type of this node cannot be serialized because its property '{0}' cannot be serialized."), + This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0: diag(4119, 1 /* Error */, "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119", "This member must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'."), + This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0: diag(4120, 1 /* Error */, "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120", "This parameter property must have a JSDoc comment with an '@override' tag because it overrides a member in the base class '{0}'."), + This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class: diag(4121, 1 /* Error */, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121", "This member cannot have a JSDoc comment with an '@override' tag because its containing class '{0}' does not extend another class."), + This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0: diag(4122, 1 /* Error */, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122", "This member cannot have a JSDoc comment with an '@override' tag because it is not declared in the base class '{0}'."), + This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1: diag(4123, 1 /* Error */, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123", "This member cannot have a JSDoc comment with an 'override' tag because it is not declared in the base class '{0}'. Did you mean '{1}'?"), + Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next: diag(4124, 1 /* Error */, "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124", "Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."), + Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given: diag(4125, 1 /* Error */, "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125", "Each declaration of '{0}.{1}' differs in its value, where '{2}' was expected but '{3}' was given."), + One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value: diag(4126, 1 /* Error */, "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126", "One value of '{0}.{1}' is the string '{2}', and the other is assumed to be an unknown numeric value."), + This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic: diag(4127, 1 /* Error */, "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127", "This member cannot have an 'override' modifier because its name is dynamic."), + This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic: diag(4128, 1 /* Error */, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128", "This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic."), + The_current_host_does_not_support_the_0_option: diag(5001, 1 /* Error */, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."), + Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, 1 /* Error */, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."), + File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, 1 /* Error */, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."), + Cannot_read_file_0_Colon_1: diag(5012, 1 /* Error */, "Cannot_read_file_0_Colon_1_5012", "Cannot read file '{0}': {1}."), + Unknown_compiler_option_0: diag(5023, 1 /* Error */, "Unknown_compiler_option_0_5023", "Unknown compiler option '{0}'."), + Compiler_option_0_requires_a_value_of_type_1: diag(5024, 1 /* Error */, "Compiler_option_0_requires_a_value_of_type_1_5024", "Compiler option '{0}' requires a value of type {1}."), + Unknown_compiler_option_0_Did_you_mean_1: diag(5025, 1 /* Error */, "Unknown_compiler_option_0_Did_you_mean_1_5025", "Unknown compiler option '{0}'. Did you mean '{1}'?"), + Could_not_write_file_0_Colon_1: diag(5033, 1 /* Error */, "Could_not_write_file_0_Colon_1_5033", "Could not write file '{0}': {1}."), + Option_project_cannot_be_mixed_with_source_files_on_a_command_line: diag(5042, 1 /* Error */, "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042", "Option 'project' cannot be mixed with source files on a command line."), + Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher: diag(5047, 1 /* Error */, "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047", "Option 'isolatedModules' can only be used when either option '--module' is provided or option 'target' is 'ES2015' or higher."), + Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided: diag(5051, 1 /* Error */, "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051", "Option '{0} can only be used when either option '--inlineSourceMap' or option '--sourceMap' is provided."), + Option_0_cannot_be_specified_without_specifying_option_1: diag(5052, 1 /* Error */, "Option_0_cannot_be_specified_without_specifying_option_1_5052", "Option '{0}' cannot be specified without specifying option '{1}'."), + Option_0_cannot_be_specified_with_option_1: diag(5053, 1 /* Error */, "Option_0_cannot_be_specified_with_option_1_5053", "Option '{0}' cannot be specified with option '{1}'."), + A_tsconfig_json_file_is_already_defined_at_Colon_0: diag(5054, 1 /* Error */, "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054", "A 'tsconfig.json' file is already defined at: '{0}'."), + Cannot_write_file_0_because_it_would_overwrite_input_file: diag(5055, 1 /* Error */, "Cannot_write_file_0_because_it_would_overwrite_input_file_5055", "Cannot write file '{0}' because it would overwrite input file."), + Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files: diag(5056, 1 /* Error */, "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056", "Cannot write file '{0}' because it would be overwritten by multiple input files."), + Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0: diag(5057, 1 /* Error */, "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057", "Cannot find a tsconfig.json file at the specified directory: '{0}'."), + The_specified_path_does_not_exist_Colon_0: diag(5058, 1 /* Error */, "The_specified_path_does_not_exist_Colon_0_5058", "The specified path does not exist: '{0}'."), + Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier: diag(5059, 1 /* Error */, "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059", "Invalid value for '--reactNamespace'. '{0}' is not a valid identifier."), + Pattern_0_can_have_at_most_one_Asterisk_character: diag(5061, 1 /* Error */, "Pattern_0_can_have_at_most_one_Asterisk_character_5061", "Pattern '{0}' can have at most one '*' character."), + Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character: diag(5062, 1 /* Error */, "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062", "Substitution '{0}' in pattern '{1}' can have at most one '*' character."), + Substitutions_for_pattern_0_should_be_an_array: diag(5063, 1 /* Error */, "Substitutions_for_pattern_0_should_be_an_array_5063", "Substitutions for pattern '{0}' should be an array."), + Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2: diag(5064, 1 /* Error */, "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064", "Substitution '{0}' for pattern '{1}' has incorrect type, expected 'string', got '{2}'."), + File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5065, 1 /* Error */, "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065", "File specification cannot contain a parent directory ('..') that appears after a recursive directory wildcard ('**'): '{0}'."), + Substitutions_for_pattern_0_shouldn_t_be_an_empty_array: diag(5066, 1 /* Error */, "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066", "Substitutions for pattern '{0}' shouldn't be an empty array."), + Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(5067, 1 /* Error */, "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067", "Invalid value for 'jsxFactory'. '{0}' is not a valid identifier or qualified-name."), + Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig: diag(5068, 1 /* Error */, "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068", "Adding a tsconfig.json file will help organize projects that contain both TypeScript and JavaScript files. Learn more at https://aka.ms/tsconfig."), + Option_0_cannot_be_specified_without_specifying_option_1_or_option_2: diag(5069, 1 /* Error */, "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069", "Option '{0}' cannot be specified without specifying option '{1}' or option '{2}'."), + Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic: diag(5070, 1 /* Error */, "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070", "Option '--resolveJsonModule' cannot be specified when 'moduleResolution' is set to 'classic'."), + Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd: diag(5071, 1 /* Error */, "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071", "Option '--resolveJsonModule' cannot be specified when 'module' is set to 'none', 'system', or 'umd'."), + Unknown_build_option_0: diag(5072, 1 /* Error */, "Unknown_build_option_0_5072", "Unknown build option '{0}'."), + Build_option_0_requires_a_value_of_type_1: diag(5073, 1 /* Error */, "Build_option_0_requires_a_value_of_type_1_5073", "Build option '{0}' requires a value of type {1}."), + Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified: diag(5074, 1 /* Error */, "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074", "Option '--incremental' can only be specified using tsconfig, emitting to single file or when option '--tsBuildInfoFile' is specified."), + _0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2: diag(5075, 1 /* Error */, "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075", "'{0}' is assignable to the constraint of type '{1}', but '{1}' could be instantiated with a different subtype of constraint '{2}'."), + _0_and_1_operations_cannot_be_mixed_without_parentheses: diag(5076, 1 /* Error */, "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076", "'{0}' and '{1}' operations cannot be mixed without parentheses."), + Unknown_build_option_0_Did_you_mean_1: diag(5077, 1 /* Error */, "Unknown_build_option_0_Did_you_mean_1_5077", "Unknown build option '{0}'. Did you mean '{1}'?"), + Unknown_watch_option_0: diag(5078, 1 /* Error */, "Unknown_watch_option_0_5078", "Unknown watch option '{0}'."), + Unknown_watch_option_0_Did_you_mean_1: diag(5079, 1 /* Error */, "Unknown_watch_option_0_Did_you_mean_1_5079", "Unknown watch option '{0}'. Did you mean '{1}'?"), + Watch_option_0_requires_a_value_of_type_1: diag(5080, 1 /* Error */, "Watch_option_0_requires_a_value_of_type_1_5080", "Watch option '{0}' requires a value of type {1}."), + Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0: diag(5081, 1 /* Error */, "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081", "Cannot find a tsconfig.json file at the current directory: {0}."), + _0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1: diag(5082, 1 /* Error */, "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082", "'{0}' could be instantiated with an arbitrary type which could be unrelated to '{1}'."), + Cannot_read_file_0: diag(5083, 1 /* Error */, "Cannot_read_file_0_5083", "Cannot read file '{0}'."), + A_tuple_member_cannot_be_both_optional_and_rest: diag(5085, 1 /* Error */, "A_tuple_member_cannot_be_both_optional_and_rest_5085", "A tuple member cannot be both optional and rest."), + A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type: diag(5086, 1 /* Error */, "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086", "A labeled tuple element is declared as optional with a question mark after the name and before the colon, rather than after the type."), + A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type: diag(5087, 1 /* Error */, "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087", "A labeled tuple element is declared as rest with a '...' before the name, rather than before the type."), + The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary: diag(5088, 1 /* Error */, "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088", "The inferred type of '{0}' references a type with a cyclic structure which cannot be trivially serialized. A type annotation is necessary."), + Option_0_cannot_be_specified_when_option_jsx_is_1: diag(5089, 1 /* Error */, "Option_0_cannot_be_specified_when_option_jsx_is_1_5089", "Option '{0}' cannot be specified when option 'jsx' is '{1}'."), + Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash: diag(5090, 1 /* Error */, "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090", "Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?"), + Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled: diag(5091, 1 /* Error */, "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091", "Option 'preserveConstEnums' cannot be disabled when '{0}' is enabled."), + The_root_value_of_a_0_file_must_be_an_object: diag(5092, 1 /* Error */, "The_root_value_of_a_0_file_must_be_an_object_5092", "The root value of a '{0}' file must be an object."), + Compiler_option_0_may_only_be_used_with_build: diag(5093, 1 /* Error */, "Compiler_option_0_may_only_be_used_with_build_5093", "Compiler option '--{0}' may only be used with '--build'."), + Compiler_option_0_may_not_be_used_with_build: diag(5094, 1 /* Error */, "Compiler_option_0_may_not_be_used_with_build_5094", "Compiler option '--{0}' may not be used with '--build'."), + Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later: diag(5095, 1 /* Error */, "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095", "Option '{0}' can only be used when 'module' is set to 'preserve' or to 'es2015' or later."), + Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set: diag(5096, 1 /* Error */, "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096", "Option 'allowImportingTsExtensions' can only be used when either 'noEmit' or 'emitDeclarationOnly' is set."), + An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled: diag(5097, 1 /* Error */, "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097", "An import path can only end with a '{0}' extension when 'allowImportingTsExtensions' is enabled."), + Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler: diag(5098, 1 /* Error */, "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098", "Option '{0}' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'."), + Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error: diag(5101, 1 /* Error */, "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101", `Option '{0}' is deprecated and will stop functioning in TypeScript {1}. Specify compilerOption '"ignoreDeprecations": "{2}"' to silence this error.`), + Option_0_has_been_removed_Please_remove_it_from_your_configuration: diag(5102, 1 /* Error */, "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102", "Option '{0}' has been removed. Please remove it from your configuration."), + Invalid_value_for_ignoreDeprecations: diag(5103, 1 /* Error */, "Invalid_value_for_ignoreDeprecations_5103", "Invalid value for '--ignoreDeprecations'."), + Option_0_is_redundant_and_cannot_be_specified_with_option_1: diag(5104, 1 /* Error */, "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104", "Option '{0}' is redundant and cannot be specified with option '{1}'."), + Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System: diag(5105, 1 /* Error */, "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105", "Option 'verbatimModuleSyntax' cannot be used when 'module' is set to 'UMD', 'AMD', or 'System'."), + Use_0_instead: diag(5106, 3 /* Message */, "Use_0_instead_5106", "Use '{0}' instead."), + Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error: diag(5107, 1 /* Error */, "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107", `Option '{0}={1}' is deprecated and will stop functioning in TypeScript {2}. Specify compilerOption '"ignoreDeprecations": "{3}"' to silence this error.`), + Option_0_1_has_been_removed_Please_remove_it_from_your_configuration: diag(5108, 1 /* Error */, "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108", "Option '{0}={1}' has been removed. Please remove it from your configuration."), + Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1: diag(5109, 1 /* Error */, "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109", "Option 'moduleResolution' must be set to '{0}' (or left unspecified) when option 'module' is set to '{1}'."), + Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1: diag(5110, 1 /* Error */, "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110", "Option 'module' must be set to '{0}' when option 'moduleResolution' is set to '{1}'."), + Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6e3, 3 /* Message */, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."), + Concatenate_and_emit_output_to_single_file: diag(6001, 3 /* Message */, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."), + Generates_corresponding_d_ts_file: diag(6002, 3 /* Message */, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."), + Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations: diag(6004, 3 /* Message */, "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004", "Specify the location where debugger should locate TypeScript files instead of source locations."), + Watch_input_files: diag(6005, 3 /* Message */, "Watch_input_files_6005", "Watch input files."), + Redirect_output_structure_to_the_directory: diag(6006, 3 /* Message */, "Redirect_output_structure_to_the_directory_6006", "Redirect output structure to the directory."), + Do_not_erase_const_enum_declarations_in_generated_code: diag(6007, 3 /* Message */, "Do_not_erase_const_enum_declarations_in_generated_code_6007", "Do not erase const enum declarations in generated code."), + Do_not_emit_outputs_if_any_errors_were_reported: diag(6008, 3 /* Message */, "Do_not_emit_outputs_if_any_errors_were_reported_6008", "Do not emit outputs if any errors were reported."), + Do_not_emit_comments_to_output: diag(6009, 3 /* Message */, "Do_not_emit_comments_to_output_6009", "Do not emit comments to output."), + Do_not_emit_outputs: diag(6010, 3 /* Message */, "Do_not_emit_outputs_6010", "Do not emit outputs."), + Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking: diag(6011, 3 /* Message */, "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011", "Allow default imports from modules with no default export. This does not affect code emit, just typechecking."), + Skip_type_checking_of_declaration_files: diag(6012, 3 /* Message */, "Skip_type_checking_of_declaration_files_6012", "Skip type checking of declaration files."), + Do_not_resolve_the_real_path_of_symlinks: diag(6013, 3 /* Message */, "Do_not_resolve_the_real_path_of_symlinks_6013", "Do not resolve the real path of symlinks."), + Only_emit_d_ts_declaration_files: diag(6014, 3 /* Message */, "Only_emit_d_ts_declaration_files_6014", "Only emit '.d.ts' declaration files."), + Specify_ECMAScript_target_version: diag(6015, 3 /* Message */, "Specify_ECMAScript_target_version_6015", "Specify ECMAScript target version."), + Specify_module_code_generation: diag(6016, 3 /* Message */, "Specify_module_code_generation_6016", "Specify module code generation."), + Print_this_message: diag(6017, 3 /* Message */, "Print_this_message_6017", "Print this message."), + Print_the_compiler_s_version: diag(6019, 3 /* Message */, "Print_the_compiler_s_version_6019", "Print the compiler's version."), + Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json: diag(6020, 3 /* Message */, "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020", "Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'."), + Syntax_Colon_0: diag(6023, 3 /* Message */, "Syntax_Colon_0_6023", "Syntax: {0}"), + options: diag(6024, 3 /* Message */, "options_6024", "options"), + file: diag(6025, 3 /* Message */, "file_6025", "file"), + Examples_Colon_0: diag(6026, 3 /* Message */, "Examples_Colon_0_6026", "Examples: {0}"), + Options_Colon: diag(6027, 3 /* Message */, "Options_Colon_6027", "Options:"), + Version_0: diag(6029, 3 /* Message */, "Version_0_6029", "Version {0}"), + Insert_command_line_options_and_files_from_a_file: diag(6030, 3 /* Message */, "Insert_command_line_options_and_files_from_a_file_6030", "Insert command line options and files from a file."), + Starting_compilation_in_watch_mode: diag(6031, 3 /* Message */, "Starting_compilation_in_watch_mode_6031", "Starting compilation in watch mode..."), + File_change_detected_Starting_incremental_compilation: diag(6032, 3 /* Message */, "File_change_detected_Starting_incremental_compilation_6032", "File change detected. Starting incremental compilation..."), + KIND: diag(6034, 3 /* Message */, "KIND_6034", "KIND"), + FILE: diag(6035, 3 /* Message */, "FILE_6035", "FILE"), + VERSION: diag(6036, 3 /* Message */, "VERSION_6036", "VERSION"), + LOCATION: diag(6037, 3 /* Message */, "LOCATION_6037", "LOCATION"), + DIRECTORY: diag(6038, 3 /* Message */, "DIRECTORY_6038", "DIRECTORY"), + STRATEGY: diag(6039, 3 /* Message */, "STRATEGY_6039", "STRATEGY"), + FILE_OR_DIRECTORY: diag(6040, 3 /* Message */, "FILE_OR_DIRECTORY_6040", "FILE OR DIRECTORY"), + Errors_Files: diag(6041, 3 /* Message */, "Errors_Files_6041", "Errors Files"), + Generates_corresponding_map_file: diag(6043, 3 /* Message */, "Generates_corresponding_map_file_6043", "Generates corresponding '.map' file."), + Compiler_option_0_expects_an_argument: diag(6044, 1 /* Error */, "Compiler_option_0_expects_an_argument_6044", "Compiler option '{0}' expects an argument."), + Unterminated_quoted_string_in_response_file_0: diag(6045, 1 /* Error */, "Unterminated_quoted_string_in_response_file_0_6045", "Unterminated quoted string in response file '{0}'."), + Argument_for_0_option_must_be_Colon_1: diag(6046, 1 /* Error */, "Argument_for_0_option_must_be_Colon_1_6046", "Argument for '{0}' option must be: {1}."), + Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1: diag(6048, 1 /* Error */, "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048", "Locale must be of the form or -. For example '{0}' or '{1}'."), + Unable_to_open_file_0: diag(6050, 1 /* Error */, "Unable_to_open_file_0_6050", "Unable to open file '{0}'."), + Corrupted_locale_file_0: diag(6051, 1 /* Error */, "Corrupted_locale_file_0_6051", "Corrupted locale file {0}."), + Raise_error_on_expressions_and_declarations_with_an_implied_any_type: diag(6052, 3 /* Message */, "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052", "Raise error on expressions and declarations with an implied 'any' type."), + File_0_not_found: diag(6053, 1 /* Error */, "File_0_not_found_6053", "File '{0}' not found."), + File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1: diag(6054, 1 /* Error */, "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054", "File '{0}' has an unsupported extension. The only supported extensions are {1}."), + Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures: diag(6055, 3 /* Message */, "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055", "Suppress noImplicitAny errors for indexing objects lacking index signatures."), + Do_not_emit_declarations_for_code_that_has_an_internal_annotation: diag(6056, 3 /* Message */, "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056", "Do not emit declarations for code that has an '@internal' annotation."), + Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir: diag(6058, 3 /* Message */, "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058", "Specify the root directory of input files. Use to control the output directory structure with --outDir."), + File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files: diag(6059, 1 /* Error */, "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059", "File '{0}' is not under 'rootDir' '{1}'. 'rootDir' is expected to contain all source files."), + Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix: diag(6060, 3 /* Message */, "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060", "Specify the end of line sequence to be used when emitting files: 'CRLF' (dos) or 'LF' (unix)."), + NEWLINE: diag(6061, 3 /* Message */, "NEWLINE_6061", "NEWLINE"), + Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line: diag(6064, 1 /* Error */, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'null' on command line."), + Enables_experimental_support_for_ES7_decorators: diag(6065, 3 /* Message */, "Enables_experimental_support_for_ES7_decorators_6065", "Enables experimental support for ES7 decorators."), + Enables_experimental_support_for_emitting_type_metadata_for_decorators: diag(6066, 3 /* Message */, "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066", "Enables experimental support for emitting type metadata for decorators."), + Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file: diag(6070, 3 /* Message */, "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070", "Initializes a TypeScript project and creates a tsconfig.json file."), + Successfully_created_a_tsconfig_json_file: diag(6071, 3 /* Message */, "Successfully_created_a_tsconfig_json_file_6071", "Successfully created a tsconfig.json file."), + Suppress_excess_property_checks_for_object_literals: diag(6072, 3 /* Message */, "Suppress_excess_property_checks_for_object_literals_6072", "Suppress excess property checks for object literals."), + Stylize_errors_and_messages_using_color_and_context_experimental: diag(6073, 3 /* Message */, "Stylize_errors_and_messages_using_color_and_context_experimental_6073", "Stylize errors and messages using color and context (experimental)."), + Do_not_report_errors_on_unused_labels: diag(6074, 3 /* Message */, "Do_not_report_errors_on_unused_labels_6074", "Do not report errors on unused labels."), + Report_error_when_not_all_code_paths_in_function_return_a_value: diag(6075, 3 /* Message */, "Report_error_when_not_all_code_paths_in_function_return_a_value_6075", "Report error when not all code paths in function return a value."), + Report_errors_for_fallthrough_cases_in_switch_statement: diag(6076, 3 /* Message */, "Report_errors_for_fallthrough_cases_in_switch_statement_6076", "Report errors for fallthrough cases in switch statement."), + Do_not_report_errors_on_unreachable_code: diag(6077, 3 /* Message */, "Do_not_report_errors_on_unreachable_code_6077", "Do not report errors on unreachable code."), + Disallow_inconsistently_cased_references_to_the_same_file: diag(6078, 3 /* Message */, "Disallow_inconsistently_cased_references_to_the_same_file_6078", "Disallow inconsistently-cased references to the same file."), + Specify_library_files_to_be_included_in_the_compilation: diag(6079, 3 /* Message */, "Specify_library_files_to_be_included_in_the_compilation_6079", "Specify library files to be included in the compilation."), + Specify_JSX_code_generation: diag(6080, 3 /* Message */, "Specify_JSX_code_generation_6080", "Specify JSX code generation."), + Only_amd_and_system_modules_are_supported_alongside_0: diag(6082, 1 /* Error */, "Only_amd_and_system_modules_are_supported_alongside_0_6082", "Only 'amd' and 'system' modules are supported alongside --{0}."), + Base_directory_to_resolve_non_absolute_module_names: diag(6083, 3 /* Message */, "Base_directory_to_resolve_non_absolute_module_names_6083", "Base directory to resolve non-absolute module names."), + Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react_JSX_emit: diag(6084, 3 /* Message */, "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084", "[Deprecated] Use '--jsxFactory' instead. Specify the object invoked for createElement when targeting 'react' JSX emit"), + Enable_tracing_of_the_name_resolution_process: diag(6085, 3 /* Message */, "Enable_tracing_of_the_name_resolution_process_6085", "Enable tracing of the name resolution process."), + Resolving_module_0_from_1: diag(6086, 3 /* Message */, "Resolving_module_0_from_1_6086", "======== Resolving module '{0}' from '{1}'. ========"), + Explicitly_specified_module_resolution_kind_Colon_0: diag(6087, 3 /* Message */, "Explicitly_specified_module_resolution_kind_Colon_0_6087", "Explicitly specified module resolution kind: '{0}'."), + Module_resolution_kind_is_not_specified_using_0: diag(6088, 3 /* Message */, "Module_resolution_kind_is_not_specified_using_0_6088", "Module resolution kind is not specified, using '{0}'."), + Module_name_0_was_successfully_resolved_to_1: diag(6089, 3 /* Message */, "Module_name_0_was_successfully_resolved_to_1_6089", "======== Module name '{0}' was successfully resolved to '{1}'. ========"), + Module_name_0_was_not_resolved: diag(6090, 3 /* Message */, "Module_name_0_was_not_resolved_6090", "======== Module name '{0}' was not resolved. ========"), + paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0: diag(6091, 3 /* Message */, "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091", "'paths' option is specified, looking for a pattern to match module name '{0}'."), + Module_name_0_matched_pattern_1: diag(6092, 3 /* Message */, "Module_name_0_matched_pattern_1_6092", "Module name '{0}', matched pattern '{1}'."), + Trying_substitution_0_candidate_module_location_Colon_1: diag(6093, 3 /* Message */, "Trying_substitution_0_candidate_module_location_Colon_1_6093", "Trying substitution '{0}', candidate module location: '{1}'."), + Resolving_module_name_0_relative_to_base_url_1_2: diag(6094, 3 /* Message */, "Resolving_module_name_0_relative_to_base_url_1_2_6094", "Resolving module name '{0}' relative to base url '{1}' - '{2}'."), + Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1: diag(6095, 3 /* Message */, "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095", "Loading module as file / folder, candidate module location '{0}', target file types: {1}."), + File_0_does_not_exist: diag(6096, 3 /* Message */, "File_0_does_not_exist_6096", "File '{0}' does not exist."), + File_0_exists_use_it_as_a_name_resolution_result: diag(6097, 3 /* Message */, "File_0_exists_use_it_as_a_name_resolution_result_6097", "File '{0}' exists - use it as a name resolution result."), + Loading_module_0_from_node_modules_folder_target_file_types_Colon_1: diag(6098, 3 /* Message */, "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098", "Loading module '{0}' from 'node_modules' folder, target file types: {1}."), + Found_package_json_at_0: diag(6099, 3 /* Message */, "Found_package_json_at_0_6099", "Found 'package.json' at '{0}'."), + package_json_does_not_have_a_0_field: diag(6100, 3 /* Message */, "package_json_does_not_have_a_0_field_6100", "'package.json' does not have a '{0}' field."), + package_json_has_0_field_1_that_references_2: diag(6101, 3 /* Message */, "package_json_has_0_field_1_that_references_2_6101", "'package.json' has '{0}' field '{1}' that references '{2}'."), + Allow_javascript_files_to_be_compiled: diag(6102, 3 /* Message */, "Allow_javascript_files_to_be_compiled_6102", "Allow javascript files to be compiled."), + Checking_if_0_is_the_longest_matching_prefix_for_1_2: diag(6104, 3 /* Message */, "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104", "Checking if '{0}' is the longest matching prefix for '{1}' - '{2}'."), + Expected_type_of_0_field_in_package_json_to_be_1_got_2: diag(6105, 3 /* Message */, "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105", "Expected type of '{0}' field in 'package.json' to be '{1}', got '{2}'."), + baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1: diag(6106, 3 /* Message */, "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106", "'baseUrl' option is set to '{0}', using this value to resolve non-relative module name '{1}'."), + rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0: diag(6107, 3 /* Message */, "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107", "'rootDirs' option is set, using it to resolve relative module name '{0}'."), + Longest_matching_prefix_for_0_is_1: diag(6108, 3 /* Message */, "Longest_matching_prefix_for_0_is_1_6108", "Longest matching prefix for '{0}' is '{1}'."), + Loading_0_from_the_root_dir_1_candidate_location_2: diag(6109, 3 /* Message */, "Loading_0_from_the_root_dir_1_candidate_location_2_6109", "Loading '{0}' from the root dir '{1}', candidate location '{2}'."), + Trying_other_entries_in_rootDirs: diag(6110, 3 /* Message */, "Trying_other_entries_in_rootDirs_6110", "Trying other entries in 'rootDirs'."), + Module_resolution_using_rootDirs_has_failed: diag(6111, 3 /* Message */, "Module_resolution_using_rootDirs_has_failed_6111", "Module resolution using 'rootDirs' has failed."), + Do_not_emit_use_strict_directives_in_module_output: diag(6112, 3 /* Message */, "Do_not_emit_use_strict_directives_in_module_output_6112", "Do not emit 'use strict' directives in module output."), + Enable_strict_null_checks: diag(6113, 3 /* Message */, "Enable_strict_null_checks_6113", "Enable strict null checks."), + Unknown_option_excludes_Did_you_mean_exclude: diag(6114, 1 /* Error */, "Unknown_option_excludes_Did_you_mean_exclude_6114", "Unknown option 'excludes'. Did you mean 'exclude'?"), + Raise_error_on_this_expressions_with_an_implied_any_type: diag(6115, 3 /* Message */, "Raise_error_on_this_expressions_with_an_implied_any_type_6115", "Raise error on 'this' expressions with an implied 'any' type."), + Resolving_type_reference_directive_0_containing_file_1_root_directory_2: diag(6116, 3 /* Message */, "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116", "======== Resolving type reference directive '{0}', containing file '{1}', root directory '{2}'. ========"), + Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2: diag(6119, 3 /* Message */, "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119", "======== Type reference directive '{0}' was successfully resolved to '{1}', primary: {2}. ========"), + Type_reference_directive_0_was_not_resolved: diag(6120, 3 /* Message */, "Type_reference_directive_0_was_not_resolved_6120", "======== Type reference directive '{0}' was not resolved. ========"), + Resolving_with_primary_search_path_0: diag(6121, 3 /* Message */, "Resolving_with_primary_search_path_0_6121", "Resolving with primary search path '{0}'."), + Root_directory_cannot_be_determined_skipping_primary_search_paths: diag(6122, 3 /* Message */, "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122", "Root directory cannot be determined, skipping primary search paths."), + Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set: diag(6123, 3 /* Message */, "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123", "======== Resolving type reference directive '{0}', containing file '{1}', root directory not set. ========"), + Type_declaration_files_to_be_included_in_compilation: diag(6124, 3 /* Message */, "Type_declaration_files_to_be_included_in_compilation_6124", "Type declaration files to be included in compilation."), + Looking_up_in_node_modules_folder_initial_location_0: diag(6125, 3 /* Message */, "Looking_up_in_node_modules_folder_initial_location_0_6125", "Looking up in 'node_modules' folder, initial location '{0}'."), + Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder: diag(6126, 3 /* Message */, "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126", "Containing file is not specified and root directory cannot be determined, skipping lookup in 'node_modules' folder."), + Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1: diag(6127, 3 /* Message */, "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127", "======== Resolving type reference directive '{0}', containing file not set, root directory '{1}'. ========"), + Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set: diag(6128, 3 /* Message */, "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128", "======== Resolving type reference directive '{0}', containing file not set, root directory not set. ========"), + Resolving_real_path_for_0_result_1: diag(6130, 3 /* Message */, "Resolving_real_path_for_0_result_1_6130", "Resolving real path for '{0}', result '{1}'."), + Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system: diag(6131, 1 /* Error */, "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131", "Cannot compile modules using option '{0}' unless the '--module' flag is 'amd' or 'system'."), + File_name_0_has_a_1_extension_stripping_it: diag(6132, 3 /* Message */, "File_name_0_has_a_1_extension_stripping_it_6132", "File name '{0}' has a '{1}' extension - stripping it."), + _0_is_declared_but_its_value_is_never_read: diag( + 6133, + 1 /* Error */, + "_0_is_declared_but_its_value_is_never_read_6133", + "'{0}' is declared but its value is never read.", + /*reportsUnnecessary*/ + true + ), + Report_errors_on_unused_locals: diag(6134, 3 /* Message */, "Report_errors_on_unused_locals_6134", "Report errors on unused locals."), + Report_errors_on_unused_parameters: diag(6135, 3 /* Message */, "Report_errors_on_unused_parameters_6135", "Report errors on unused parameters."), + The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files: diag(6136, 3 /* Message */, "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136", "The maximum dependency depth to search under node_modules and load JavaScript files."), + Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1: diag(6137, 1 /* Error */, "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137", "Cannot import type declaration files. Consider importing '{0}' instead of '{1}'."), + Property_0_is_declared_but_its_value_is_never_read: diag( + 6138, + 1 /* Error */, + "Property_0_is_declared_but_its_value_is_never_read_6138", + "Property '{0}' is declared but its value is never read.", + /*reportsUnnecessary*/ + true + ), + Import_emit_helpers_from_tslib: diag(6139, 3 /* Message */, "Import_emit_helpers_from_tslib_6139", "Import emit helpers from 'tslib'."), + Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2: diag(6140, 1 /* Error */, "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140", "Auto discovery for typings is enabled in project '{0}'. Running extra resolution pass for module '{1}' using cache location '{2}'."), + Parse_in_strict_mode_and_emit_use_strict_for_each_source_file: diag(6141, 3 /* Message */, "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141", 'Parse in strict mode and emit "use strict" for each source file.'), + Module_0_was_resolved_to_1_but_jsx_is_not_set: diag(6142, 1 /* Error */, "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142", "Module '{0}' was resolved to '{1}', but '--jsx' is not set."), + Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1: diag(6144, 3 /* Message */, "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144", "Module '{0}' was resolved as locally declared ambient module in file '{1}'."), + Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h: diag(6146, 3 /* Message */, "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146", "Specify the JSX factory function to use when targeting 'react' JSX emit, e.g. 'React.createElement' or 'h'."), + Resolution_for_module_0_was_found_in_cache_from_location_1: diag(6147, 3 /* Message */, "Resolution_for_module_0_was_found_in_cache_from_location_1_6147", "Resolution for module '{0}' was found in cache from location '{1}'."), + Directory_0_does_not_exist_skipping_all_lookups_in_it: diag(6148, 3 /* Message */, "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148", "Directory '{0}' does not exist, skipping all lookups in it."), + Show_diagnostic_information: diag(6149, 3 /* Message */, "Show_diagnostic_information_6149", "Show diagnostic information."), + Show_verbose_diagnostic_information: diag(6150, 3 /* Message */, "Show_verbose_diagnostic_information_6150", "Show verbose diagnostic information."), + Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file: diag(6151, 3 /* Message */, "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151", "Emit a single file with source maps instead of having a separate file."), + Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap_to_be_set: diag(6152, 3 /* Message */, "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152", "Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set."), + Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule: diag(6153, 3 /* Message */, "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153", "Transpile each file as a separate module (similar to 'ts.transpileModule')."), + Print_names_of_generated_files_part_of_the_compilation: diag(6154, 3 /* Message */, "Print_names_of_generated_files_part_of_the_compilation_6154", "Print names of generated files part of the compilation."), + Print_names_of_files_part_of_the_compilation: diag(6155, 3 /* Message */, "Print_names_of_files_part_of_the_compilation_6155", "Print names of files part of the compilation."), + The_locale_used_when_displaying_messages_to_the_user_e_g_en_us: diag(6156, 3 /* Message */, "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156", "The locale used when displaying messages to the user (e.g. 'en-us')"), + Do_not_generate_custom_helper_functions_like_extends_in_compiled_output: diag(6157, 3 /* Message */, "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157", "Do not generate custom helper functions like '__extends' in compiled output."), + Do_not_include_the_default_library_file_lib_d_ts: diag(6158, 3 /* Message */, "Do_not_include_the_default_library_file_lib_d_ts_6158", "Do not include the default library file (lib.d.ts)."), + Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files: diag(6159, 3 /* Message */, "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159", "Do not add triple-slash references or imported modules to the list of compiled files."), + Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files: diag(6160, 3 /* Message */, "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160", "[Deprecated] Use '--skipLibCheck' instead. Skip type checking of default library declaration files."), + List_of_folders_to_include_type_definitions_from: diag(6161, 3 /* Message */, "List_of_folders_to_include_type_definitions_from_6161", "List of folders to include type definitions from."), + Disable_size_limitations_on_JavaScript_projects: diag(6162, 3 /* Message */, "Disable_size_limitations_on_JavaScript_projects_6162", "Disable size limitations on JavaScript projects."), + The_character_set_of_the_input_files: diag(6163, 3 /* Message */, "The_character_set_of_the_input_files_6163", "The character set of the input files."), + Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1: diag(6164, 3 /* Message */, "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164", "Skipping module '{0}' that looks like an absolute URI, target file types: {1}."), + Do_not_truncate_error_messages: diag(6165, 3 /* Message */, "Do_not_truncate_error_messages_6165", "Do not truncate error messages."), + Output_directory_for_generated_declaration_files: diag(6166, 3 /* Message */, "Output_directory_for_generated_declaration_files_6166", "Output directory for generated declaration files."), + A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl: diag(6167, 3 /* Message */, "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167", "A series of entries which re-map imports to lookup locations relative to the 'baseUrl'."), + List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime: diag(6168, 3 /* Message */, "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168", "List of root folders whose combined content represents the structure of the project at runtime."), + Show_all_compiler_options: diag(6169, 3 /* Message */, "Show_all_compiler_options_6169", "Show all compiler options."), + Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file: diag(6170, 3 /* Message */, "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170", "[Deprecated] Use '--outFile' instead. Concatenate and emit output to single file"), + Command_line_Options: diag(6171, 3 /* Message */, "Command_line_Options_6171", "Command-line Options"), + Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5: diag(6179, 3 /* Message */, "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179", "Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5'."), + Enable_all_strict_type_checking_options: diag(6180, 3 /* Message */, "Enable_all_strict_type_checking_options_6180", "Enable all strict type-checking options."), + Scoped_package_detected_looking_in_0: diag(6182, 3 /* Message */, "Scoped_package_detected_looking_in_0_6182", "Scoped package detected, looking in '{0}'"), + Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6183, 3 /* Message */, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."), + Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6184, 3 /* Message */, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184", "Reusing resolution of module '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."), + Enable_strict_checking_of_function_types: diag(6186, 3 /* Message */, "Enable_strict_checking_of_function_types_6186", "Enable strict checking of function types."), + Enable_strict_checking_of_property_initialization_in_classes: diag(6187, 3 /* Message */, "Enable_strict_checking_of_property_initialization_in_classes_6187", "Enable strict checking of property initialization in classes."), + Numeric_separators_are_not_allowed_here: diag(6188, 1 /* Error */, "Numeric_separators_are_not_allowed_here_6188", "Numeric separators are not allowed here."), + Multiple_consecutive_numeric_separators_are_not_permitted: diag(6189, 1 /* Error */, "Multiple_consecutive_numeric_separators_are_not_permitted_6189", "Multiple consecutive numeric separators are not permitted."), + Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen: diag(6191, 3 /* Message */, "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191", "Whether to keep outdated console output in watch mode instead of clearing the screen."), + All_imports_in_import_declaration_are_unused: diag( + 6192, + 1 /* Error */, + "All_imports_in_import_declaration_are_unused_6192", + "All imports in import declaration are unused.", + /*reportsUnnecessary*/ + true + ), + Found_1_error_Watching_for_file_changes: diag(6193, 3 /* Message */, "Found_1_error_Watching_for_file_changes_6193", "Found 1 error. Watching for file changes."), + Found_0_errors_Watching_for_file_changes: diag(6194, 3 /* Message */, "Found_0_errors_Watching_for_file_changes_6194", "Found {0} errors. Watching for file changes."), + Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols: diag(6195, 3 /* Message */, "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195", "Resolve 'keyof' to string valued property names only (no numbers or symbols)."), + _0_is_declared_but_never_used: diag( + 6196, + 1 /* Error */, + "_0_is_declared_but_never_used_6196", + "'{0}' is declared but never used.", + /*reportsUnnecessary*/ + true + ), + Include_modules_imported_with_json_extension: diag(6197, 3 /* Message */, "Include_modules_imported_with_json_extension_6197", "Include modules imported with '.json' extension"), + All_destructured_elements_are_unused: diag( + 6198, + 1 /* Error */, + "All_destructured_elements_are_unused_6198", + "All destructured elements are unused.", + /*reportsUnnecessary*/ + true + ), + All_variables_are_unused: diag( + 6199, + 1 /* Error */, + "All_variables_are_unused_6199", + "All variables are unused.", + /*reportsUnnecessary*/ + true + ), + Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0: diag(6200, 1 /* Error */, "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200", "Definitions of the following identifiers conflict with those in another file: {0}"), + Conflicts_are_in_this_file: diag(6201, 3 /* Message */, "Conflicts_are_in_this_file_6201", "Conflicts are in this file."), + Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0: diag(6202, 1 /* Error */, "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202", "Project references may not form a circular graph. Cycle detected: {0}"), + _0_was_also_declared_here: diag(6203, 3 /* Message */, "_0_was_also_declared_here_6203", "'{0}' was also declared here."), + and_here: diag(6204, 3 /* Message */, "and_here_6204", "and here."), + All_type_parameters_are_unused: diag(6205, 1 /* Error */, "All_type_parameters_are_unused_6205", "All type parameters are unused."), + package_json_has_a_typesVersions_field_with_version_specific_path_mappings: diag(6206, 3 /* Message */, "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206", "'package.json' has a 'typesVersions' field with version-specific path mappings."), + package_json_does_not_have_a_typesVersions_entry_that_matches_version_0: diag(6207, 3 /* Message */, "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207", "'package.json' does not have a 'typesVersions' entry that matches version '{0}'."), + package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2: diag(6208, 3 /* Message */, "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208", "'package.json' has a 'typesVersions' entry '{0}' that matches compiler version '{1}', looking for a pattern to match module name '{2}'."), + package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range: diag(6209, 3 /* Message */, "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209", "'package.json' has a 'typesVersions' entry '{0}' that is not a valid semver range."), + An_argument_for_0_was_not_provided: diag(6210, 3 /* Message */, "An_argument_for_0_was_not_provided_6210", "An argument for '{0}' was not provided."), + An_argument_matching_this_binding_pattern_was_not_provided: diag(6211, 3 /* Message */, "An_argument_matching_this_binding_pattern_was_not_provided_6211", "An argument matching this binding pattern was not provided."), + Did_you_mean_to_call_this_expression: diag(6212, 3 /* Message */, "Did_you_mean_to_call_this_expression_6212", "Did you mean to call this expression?"), + Did_you_mean_to_use_new_with_this_expression: diag(6213, 3 /* Message */, "Did_you_mean_to_use_new_with_this_expression_6213", "Did you mean to use 'new' with this expression?"), + Enable_strict_bind_call_and_apply_methods_on_functions: diag(6214, 3 /* Message */, "Enable_strict_bind_call_and_apply_methods_on_functions_6214", "Enable strict 'bind', 'call', and 'apply' methods on functions."), + Using_compiler_options_of_project_reference_redirect_0: diag(6215, 3 /* Message */, "Using_compiler_options_of_project_reference_redirect_0_6215", "Using compiler options of project reference redirect '{0}'."), + Found_1_error: diag(6216, 3 /* Message */, "Found_1_error_6216", "Found 1 error."), + Found_0_errors: diag(6217, 3 /* Message */, "Found_0_errors_6217", "Found {0} errors."), + Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2: diag(6218, 3 /* Message */, "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218", "======== Module name '{0}' was successfully resolved to '{1}' with Package ID '{2}'. ========"), + Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3: diag(6219, 3 /* Message */, "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219", "======== Type reference directive '{0}' was successfully resolved to '{1}' with Package ID '{2}', primary: {3}. ========"), + package_json_had_a_falsy_0_field: diag(6220, 3 /* Message */, "package_json_had_a_falsy_0_field_6220", "'package.json' had a falsy '{0}' field."), + Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects: diag(6221, 3 /* Message */, "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221", "Disable use of source files instead of declaration files from referenced projects."), + Emit_class_fields_with_Define_instead_of_Set: diag(6222, 3 /* Message */, "Emit_class_fields_with_Define_instead_of_Set_6222", "Emit class fields with Define instead of Set."), + Generates_a_CPU_profile: diag(6223, 3 /* Message */, "Generates_a_CPU_profile_6223", "Generates a CPU profile."), + Disable_solution_searching_for_this_project: diag(6224, 3 /* Message */, "Disable_solution_searching_for_this_project_6224", "Disable solution searching for this project."), + Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling_UseFsEvents_UseFsEventsOnParentDirectory: diag(6225, 3 /* Message */, "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225", "Specify strategy for watching file: 'FixedPollingInterval' (default), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'."), + Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively_Colon_UseFsEvents_default_FixedPollingInterval_DynamicPriorityPolling_FixedChunkSizePolling: diag(6226, 3 /* Message */, "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226", "Specify strategy for watching directory on platforms that don't support recursive watching natively: 'UseFsEvents' (default), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'."), + Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_FixedInterval_default_PriorityInterval_DynamicPriority_FixedChunkSize: diag(6227, 3 /* Message */, "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227", "Specify strategy for creating a polling watch when it fails to create using file system events: 'FixedInterval' (default), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'."), + Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3: diag(6229, 1 /* Error */, "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229", "Tag '{0}' expects at least '{1}' arguments, but the JSX factory '{2}' provides at most '{3}'."), + Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line: diag(6230, 1 /* Error */, "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230", "Option '{0}' can only be specified in 'tsconfig.json' file or set to 'false' or 'null' on command line."), + Could_not_resolve_the_path_0_with_the_extensions_Colon_1: diag(6231, 1 /* Error */, "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231", "Could not resolve the path '{0}' with the extensions: {1}."), + Declaration_augments_declaration_in_another_file_This_cannot_be_serialized: diag(6232, 1 /* Error */, "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232", "Declaration augments declaration in another file. This cannot be serialized."), + This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file: diag(6233, 1 /* Error */, "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233", "This is the declaration being augmented. Consider moving the augmenting declaration into the same file."), + This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without: diag(6234, 1 /* Error */, "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234", "This expression is not callable because it is a 'get' accessor. Did you mean to use it without '()'?"), + Disable_loading_referenced_projects: diag(6235, 3 /* Message */, "Disable_loading_referenced_projects_6235", "Disable loading referenced projects."), + Arguments_for_the_rest_parameter_0_were_not_provided: diag(6236, 1 /* Error */, "Arguments_for_the_rest_parameter_0_were_not_provided_6236", "Arguments for the rest parameter '{0}' were not provided."), + Generates_an_event_trace_and_a_list_of_types: diag(6237, 3 /* Message */, "Generates_an_event_trace_and_a_list_of_types_6237", "Generates an event trace and a list of types."), + Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react: diag(6238, 1 /* Error */, "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238", "Specify the module specifier to be used to import the 'jsx' and 'jsxs' factory functions from. eg, react"), + File_0_exists_according_to_earlier_cached_lookups: diag(6239, 3 /* Message */, "File_0_exists_according_to_earlier_cached_lookups_6239", "File '{0}' exists according to earlier cached lookups."), + File_0_does_not_exist_according_to_earlier_cached_lookups: diag(6240, 3 /* Message */, "File_0_does_not_exist_according_to_earlier_cached_lookups_6240", "File '{0}' does not exist according to earlier cached lookups."), + Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1: diag(6241, 3 /* Message */, "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241", "Resolution for type reference directive '{0}' was found in cache from location '{1}'."), + Resolving_type_reference_directive_0_containing_file_1: diag(6242, 3 /* Message */, "Resolving_type_reference_directive_0_containing_file_1_6242", "======== Resolving type reference directive '{0}', containing file '{1}'. ========"), + Interpret_optional_property_types_as_written_rather_than_adding_undefined: diag(6243, 3 /* Message */, "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243", "Interpret optional property types as written, rather than adding 'undefined'."), + Modules: diag(6244, 3 /* Message */, "Modules_6244", "Modules"), + File_Management: diag(6245, 3 /* Message */, "File_Management_6245", "File Management"), + Emit: diag(6246, 3 /* Message */, "Emit_6246", "Emit"), + JavaScript_Support: diag(6247, 3 /* Message */, "JavaScript_Support_6247", "JavaScript Support"), + Type_Checking: diag(6248, 3 /* Message */, "Type_Checking_6248", "Type Checking"), + Editor_Support: diag(6249, 3 /* Message */, "Editor_Support_6249", "Editor Support"), + Watch_and_Build_Modes: diag(6250, 3 /* Message */, "Watch_and_Build_Modes_6250", "Watch and Build Modes"), + Compiler_Diagnostics: diag(6251, 3 /* Message */, "Compiler_Diagnostics_6251", "Compiler Diagnostics"), + Interop_Constraints: diag(6252, 3 /* Message */, "Interop_Constraints_6252", "Interop Constraints"), + Backwards_Compatibility: diag(6253, 3 /* Message */, "Backwards_Compatibility_6253", "Backwards Compatibility"), + Language_and_Environment: diag(6254, 3 /* Message */, "Language_and_Environment_6254", "Language and Environment"), + Projects: diag(6255, 3 /* Message */, "Projects_6255", "Projects"), + Output_Formatting: diag(6256, 3 /* Message */, "Output_Formatting_6256", "Output Formatting"), + Completeness: diag(6257, 3 /* Message */, "Completeness_6257", "Completeness"), + _0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file: diag(6258, 1 /* Error */, "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258", "'{0}' should be set inside the 'compilerOptions' object of the config json file"), + Found_1_error_in_0: diag(6259, 3 /* Message */, "Found_1_error_in_0_6259", "Found 1 error in {0}"), + Found_0_errors_in_the_same_file_starting_at_Colon_1: diag(6260, 3 /* Message */, "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260", "Found {0} errors in the same file, starting at: {1}"), + Found_0_errors_in_1_files: diag(6261, 3 /* Message */, "Found_0_errors_in_1_files_6261", "Found {0} errors in {1} files."), + File_name_0_has_a_1_extension_looking_up_2_instead: diag(6262, 3 /* Message */, "File_name_0_has_a_1_extension_looking_up_2_instead_6262", "File name '{0}' has a '{1}' extension - looking up '{2}' instead."), + Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set: diag(6263, 1 /* Error */, "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263", "Module '{0}' was resolved to '{1}', but '--allowArbitraryExtensions' is not set."), + Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present: diag(6264, 3 /* Message */, "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264", "Enable importing files with any extension, provided a declaration file is present."), + Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_node_modules_folder: diag(6265, 3 /* Message */, "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265", "Resolving type reference directive for program that specifies custom typeRoots, skipping lookup in 'node_modules' folder."), + Option_0_can_only_be_specified_on_command_line: diag(6266, 1 /* Error */, "Option_0_can_only_be_specified_on_command_line_6266", "Option '{0}' can only be specified on command line."), + Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve: diag(6270, 3 /* Message */, "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270", "Directory '{0}' has no containing package.json scope. Imports will not resolve."), + Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1: diag(6271, 3 /* Message */, "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271", "Import specifier '{0}' does not exist in package.json scope at path '{1}'."), + Invalid_import_specifier_0_has_no_possible_resolutions: diag(6272, 3 /* Message */, "Invalid_import_specifier_0_has_no_possible_resolutions_6272", "Invalid import specifier '{0}' has no possible resolutions."), + package_json_scope_0_has_no_imports_defined: diag(6273, 3 /* Message */, "package_json_scope_0_has_no_imports_defined_6273", "package.json scope '{0}' has no imports defined."), + package_json_scope_0_explicitly_maps_specifier_1_to_null: diag(6274, 3 /* Message */, "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274", "package.json scope '{0}' explicitly maps specifier '{1}' to null."), + package_json_scope_0_has_invalid_type_for_target_of_specifier_1: diag(6275, 3 /* Message */, "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275", "package.json scope '{0}' has invalid type for target of specifier '{1}'"), + Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1: diag(6276, 3 /* Message */, "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276", "Export specifier '{0}' does not exist in package.json scope at path '{1}'."), + Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update: diag(6277, 3 /* Message */, "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277", "Resolution of non-relative name failed; trying with modern Node resolution features disabled to see if npm library needs configuration update."), + There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The_1_library_may_need_to_update_its_package_json_or_typings: diag(6278, 3 /* Message */, "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278", `There are types at '{0}', but this result could not be resolved when respecting package.json "exports". The '{1}' library may need to update its package.json or typings.`), + Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_need_configuration_update: diag(6279, 3 /* Message */, "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279", "Resolution of non-relative name failed; trying with '--moduleResolution bundler' to see if project may need configuration update."), + There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setting_Consider_updating_to_node16_nodenext_or_bundler: diag(6280, 3 /* Message */, "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280", "There are types at '{0}', but this result could not be resolved under your current 'moduleResolution' setting. Consider updating to 'node16', 'nodenext', or 'bundler'."), + package_json_has_a_peerDependencies_field: diag(6281, 3 /* Message */, "package_json_has_a_peerDependencies_field_6281", "'package.json' has a 'peerDependencies' field."), + Found_peerDependency_0_with_1_version: diag(6282, 3 /* Message */, "Found_peerDependency_0_with_1_version_6282", "Found peerDependency '{0}' with '{1}' version."), + Failed_to_find_peerDependency_0: diag(6283, 3 /* Message */, "Failed_to_find_peerDependency_0_6283", "Failed to find peerDependency '{0}'."), + File_Layout: diag(6284, 3 /* Message */, "File_Layout_6284", "File Layout"), + Environment_Settings: diag(6285, 3 /* Message */, "Environment_Settings_6285", "Environment Settings"), + See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule: diag(6286, 3 /* Message */, "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286", "See also https://aka.ms/tsconfig/module"), + For_nodejs_Colon: diag(6287, 3 /* Message */, "For_nodejs_Colon_6287", "For nodejs:"), + and_npm_install_D_types_Slashnode: diag(6290, 3 /* Message */, "and_npm_install_D_types_Slashnode_6290", "and npm install -D @types/node"), + Other_Outputs: diag(6291, 3 /* Message */, "Other_Outputs_6291", "Other Outputs"), + Stricter_Typechecking_Options: diag(6292, 3 /* Message */, "Stricter_Typechecking_Options_6292", "Stricter Typechecking Options"), + Style_Options: diag(6293, 3 /* Message */, "Style_Options_6293", "Style Options"), + Recommended_Options: diag(6294, 3 /* Message */, "Recommended_Options_6294", "Recommended Options"), + Enable_project_compilation: diag(6302, 3 /* Message */, "Enable_project_compilation_6302", "Enable project compilation"), + Composite_projects_may_not_disable_declaration_emit: diag(6304, 1 /* Error */, "Composite_projects_may_not_disable_declaration_emit_6304", "Composite projects may not disable declaration emit."), + Output_file_0_has_not_been_built_from_source_file_1: diag(6305, 1 /* Error */, "Output_file_0_has_not_been_built_from_source_file_1_6305", "Output file '{0}' has not been built from source file '{1}'."), + Referenced_project_0_must_have_setting_composite_Colon_true: diag(6306, 1 /* Error */, "Referenced_project_0_must_have_setting_composite_Colon_true_6306", `Referenced project '{0}' must have setting "composite": true.`), + File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern: diag(6307, 1 /* Error */, "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307", "File '{0}' is not listed within the file list of project '{1}'. Projects must list all files or use an 'include' pattern."), + Referenced_project_0_may_not_disable_emit: diag(6310, 1 /* Error */, "Referenced_project_0_may_not_disable_emit_6310", "Referenced project '{0}' may not disable emit."), + Project_0_is_out_of_date_because_output_1_is_older_than_input_2: diag(6350, 3 /* Message */, "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350", "Project '{0}' is out of date because output '{1}' is older than input '{2}'"), + Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2: diag(6351, 3 /* Message */, "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351", "Project '{0}' is up to date because newest input '{1}' is older than output '{2}'"), + Project_0_is_out_of_date_because_output_file_1_does_not_exist: diag(6352, 3 /* Message */, "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352", "Project '{0}' is out of date because output file '{1}' does not exist"), + Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date: diag(6353, 3 /* Message */, "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353", "Project '{0}' is out of date because its dependency '{1}' is out of date"), + Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies: diag(6354, 3 /* Message */, "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354", "Project '{0}' is up to date with .d.ts files from its dependencies"), + Projects_in_this_build_Colon_0: diag(6355, 3 /* Message */, "Projects_in_this_build_Colon_0_6355", "Projects in this build: {0}"), + A_non_dry_build_would_delete_the_following_files_Colon_0: diag(6356, 3 /* Message */, "A_non_dry_build_would_delete_the_following_files_Colon_0_6356", "A non-dry build would delete the following files: {0}"), + A_non_dry_build_would_build_project_0: diag(6357, 3 /* Message */, "A_non_dry_build_would_build_project_0_6357", "A non-dry build would build project '{0}'"), + Building_project_0: diag(6358, 3 /* Message */, "Building_project_0_6358", "Building project '{0}'..."), + Updating_output_timestamps_of_project_0: diag(6359, 3 /* Message */, "Updating_output_timestamps_of_project_0_6359", "Updating output timestamps of project '{0}'..."), + Project_0_is_up_to_date: diag(6361, 3 /* Message */, "Project_0_is_up_to_date_6361", "Project '{0}' is up to date"), + Skipping_build_of_project_0_because_its_dependency_1_has_errors: diag(6362, 3 /* Message */, "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362", "Skipping build of project '{0}' because its dependency '{1}' has errors"), + Project_0_can_t_be_built_because_its_dependency_1_has_errors: diag(6363, 3 /* Message */, "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363", "Project '{0}' can't be built because its dependency '{1}' has errors"), + Build_one_or_more_projects_and_their_dependencies_if_out_of_date: diag(6364, 3 /* Message */, "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364", "Build one or more projects and their dependencies, if out of date"), + Delete_the_outputs_of_all_projects: diag(6365, 3 /* Message */, "Delete_the_outputs_of_all_projects_6365", "Delete the outputs of all projects."), + Show_what_would_be_built_or_deleted_if_specified_with_clean: diag(6367, 3 /* Message */, "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367", "Show what would be built (or deleted, if specified with '--clean')"), + Option_build_must_be_the_first_command_line_argument: diag(6369, 1 /* Error */, "Option_build_must_be_the_first_command_line_argument_6369", "Option '--build' must be the first command line argument."), + Options_0_and_1_cannot_be_combined: diag(6370, 1 /* Error */, "Options_0_and_1_cannot_be_combined_6370", "Options '{0}' and '{1}' cannot be combined."), + Updating_unchanged_output_timestamps_of_project_0: diag(6371, 3 /* Message */, "Updating_unchanged_output_timestamps_of_project_0_6371", "Updating unchanged output timestamps of project '{0}'..."), + A_non_dry_build_would_update_timestamps_for_output_of_project_0: diag(6374, 3 /* Message */, "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374", "A non-dry build would update timestamps for output of project '{0}'"), + Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1: diag(6377, 1 /* Error */, "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377", "Cannot write file '{0}' because it will overwrite '.tsbuildinfo' file generated by referenced project '{1}'"), + Composite_projects_may_not_disable_incremental_compilation: diag(6379, 1 /* Error */, "Composite_projects_may_not_disable_incremental_compilation_6379", "Composite projects may not disable incremental compilation."), + Specify_file_to_store_incremental_compilation_information: diag(6380, 3 /* Message */, "Specify_file_to_store_incremental_compilation_information_6380", "Specify file to store incremental compilation information"), + Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2: diag(6381, 3 /* Message */, "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381", "Project '{0}' is out of date because output for it was generated with version '{1}' that differs with current version '{2}'"), + Skipping_build_of_project_0_because_its_dependency_1_was_not_built: diag(6382, 3 /* Message */, "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382", "Skipping build of project '{0}' because its dependency '{1}' was not built"), + Project_0_can_t_be_built_because_its_dependency_1_was_not_built: diag(6383, 3 /* Message */, "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383", "Project '{0}' can't be built because its dependency '{1}' was not built"), + Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6384, 3 /* Message */, "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384", "Have recompiles in '--incremental' and '--watch' assume that changes within a file will only affect files directly depending on it."), + _0_is_deprecated: diag( + 6385, + 2 /* Suggestion */, + "_0_is_deprecated_6385", + "'{0}' is deprecated.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + void 0, + /*reportsDeprecated*/ + true + ), + Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found: diag(6386, 3 /* Message */, "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386", "Performance timings for '--diagnostics' or '--extendedDiagnostics' are not available in this session. A native implementation of the Web Performance API could not be found."), + The_signature_0_of_1_is_deprecated: diag( + 6387, + 2 /* Suggestion */, + "The_signature_0_of_1_is_deprecated_6387", + "The signature '{0}' of '{1}' is deprecated.", + /*reportsUnnecessary*/ + void 0, + /*elidedInCompatabilityPyramid*/ + void 0, + /*reportsDeprecated*/ + true + ), + Project_0_is_being_forcibly_rebuilt: diag(6388, 3 /* Message */, "Project_0_is_being_forcibly_rebuilt_6388", "Project '{0}' is being forcibly rebuilt"), + Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved: diag(6389, 3 /* Message */, "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389", "Reusing resolution of module '{0}' from '{1}' of old program, it was not resolved."), + Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2: diag(6390, 3 /* Message */, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}'."), + Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3: diag(6391, 3 /* Message */, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was successfully resolved to '{2}' with Package ID '{3}'."), + Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved: diag(6392, 3 /* Message */, "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392", "Reusing resolution of type reference directive '{0}' from '{1}' of old program, it was not resolved."), + Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6393, 3 /* Message */, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."), + Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6394, 3 /* Message */, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."), + Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6395, 3 /* Message */, "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395", "Reusing resolution of module '{0}' from '{1}' found in cache from location '{2}', it was not resolved."), + Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3: diag(6396, 3 /* Message */, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}'."), + Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_3_with_Package_ID_4: diag(6397, 3 /* Message */, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was successfully resolved to '{3}' with Package ID '{4}'."), + Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_resolved: diag(6398, 3 /* Message */, "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398", "Reusing resolution of type reference directive '{0}' from '{1}' found in cache from location '{2}', it was not resolved."), + Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted: diag(6399, 3 /* Message */, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399", "Project '{0}' is out of date because buildinfo file '{1}' indicates that some of the changes were not emitted"), + Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files: diag(6400, 3 /* Message */, "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400", "Project '{0}' is up to date but needs to update timestamps of output files that are older than input files"), + Project_0_is_out_of_date_because_there_was_error_reading_file_1: diag(6401, 3 /* Message */, "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401", "Project '{0}' is out of date because there was error reading file '{1}'"), + Resolving_in_0_mode_with_conditions_1: diag(6402, 3 /* Message */, "Resolving_in_0_mode_with_conditions_1_6402", "Resolving in {0} mode with conditions {1}."), + Matched_0_condition_1: diag(6403, 3 /* Message */, "Matched_0_condition_1_6403", "Matched '{0}' condition '{1}'."), + Using_0_subpath_1_with_target_2: diag(6404, 3 /* Message */, "Using_0_subpath_1_with_target_2_6404", "Using '{0}' subpath '{1}' with target '{2}'."), + Saw_non_matching_condition_0: diag(6405, 3 /* Message */, "Saw_non_matching_condition_0_6405", "Saw non-matching condition '{0}'."), + Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions: diag(6406, 3 /* Message */, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406", "Project '{0}' is out of date because buildinfo file '{1}' indicates there is change in compilerOptions"), + Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set: diag(6407, 3 /* Message */, "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407", "Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set."), + Use_the_package_json_exports_field_when_resolving_package_imports: diag(6408, 3 /* Message */, "Use_the_package_json_exports_field_when_resolving_package_imports_6408", "Use the package.json 'exports' field when resolving package imports."), + Use_the_package_json_imports_field_when_resolving_imports: diag(6409, 3 /* Message */, "Use_the_package_json_imports_field_when_resolving_imports_6409", "Use the package.json 'imports' field when resolving imports."), + Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports: diag(6410, 3 /* Message */, "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410", "Conditions to set in addition to the resolver-specific defaults when resolving imports."), + true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false: diag(6411, 3 /* Message */, "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411", "`true` when 'moduleResolution' is 'node16', 'nodenext', or 'bundler'; otherwise `false`."), + Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more: diag(6412, 3 /* Message */, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412", "Project '{0}' is out of date because buildinfo file '{1}' indicates that file '{2}' was root file of compilation but not any more."), + Entering_conditional_exports: diag(6413, 3 /* Message */, "Entering_conditional_exports_6413", "Entering conditional exports."), + Resolved_under_condition_0: diag(6414, 3 /* Message */, "Resolved_under_condition_0_6414", "Resolved under condition '{0}'."), + Failed_to_resolve_under_condition_0: diag(6415, 3 /* Message */, "Failed_to_resolve_under_condition_0_6415", "Failed to resolve under condition '{0}'."), + Exiting_conditional_exports: diag(6416, 3 /* Message */, "Exiting_conditional_exports_6416", "Exiting conditional exports."), + Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0: diag(6417, 3 /* Message */, "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417", "Searching all ancestor node_modules directories for preferred extensions: {0}."), + Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0: diag(6418, 3 /* Message */, "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418", "Searching all ancestor node_modules directories for fallback extensions: {0}."), + Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors: diag(6419, 3 /* Message */, "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419", "Project '{0}' is out of date because buildinfo file '{1}' indicates that program needs to report errors."), + Project_0_is_out_of_date_because_1: diag(6420, 3 /* Message */, "Project_0_is_out_of_date_because_1_6420", "Project '{0}' is out of date because {1}."), + Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_in_output_files: diag(6421, 3 /* Message */, "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421", "Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files."), + The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1: diag(6500, 3 /* Message */, "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500", "The expected type comes from property '{0}' which is declared here on type '{1}'"), + The_expected_type_comes_from_this_index_signature: diag(6501, 3 /* Message */, "The_expected_type_comes_from_this_index_signature_6501", "The expected type comes from this index signature."), + The_expected_type_comes_from_the_return_type_of_this_signature: diag(6502, 3 /* Message */, "The_expected_type_comes_from_the_return_type_of_this_signature_6502", "The expected type comes from the return type of this signature."), + Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing: diag(6503, 3 /* Message */, "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503", "Print names of files that are part of the compilation and then stop processing."), + File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option: diag(6504, 1 /* Error */, "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504", "File '{0}' is a JavaScript file. Did you mean to enable the 'allowJs' option?"), + Print_names_of_files_and_the_reason_they_are_part_of_the_compilation: diag(6505, 3 /* Message */, "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505", "Print names of files and the reason they are part of the compilation."), + Consider_adding_a_declare_modifier_to_this_class: diag(6506, 3 /* Message */, "Consider_adding_a_declare_modifier_to_this_class_6506", "Consider adding a 'declare' modifier to this class."), + Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these_files: diag(6600, 3 /* Message */, "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600", "Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files."), + Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export: diag(6601, 3 /* Message */, "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601", "Allow 'import x from y' when a module doesn't have a default export."), + Allow_accessing_UMD_globals_from_modules: diag(6602, 3 /* Message */, "Allow_accessing_UMD_globals_from_modules_6602", "Allow accessing UMD globals from modules."), + Disable_error_reporting_for_unreachable_code: diag(6603, 3 /* Message */, "Disable_error_reporting_for_unreachable_code_6603", "Disable error reporting for unreachable code."), + Disable_error_reporting_for_unused_labels: diag(6604, 3 /* Message */, "Disable_error_reporting_for_unused_labels_6604", "Disable error reporting for unused labels."), + Ensure_use_strict_is_always_emitted: diag(6605, 3 /* Message */, "Ensure_use_strict_is_always_emitted_6605", "Ensure 'use strict' is always emitted."), + Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it: diag(6606, 3 /* Message */, "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606", "Have recompiles in projects that use 'incremental' and 'watch' mode assume that changes within a file will only affect files directly depending on it."), + Specify_the_base_directory_to_resolve_non_relative_module_names: diag(6607, 3 /* Message */, "Specify_the_base_directory_to_resolve_non_relative_module_names_6607", "Specify the base directory to resolve non-relative module names."), + No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files: diag(6608, 3 /* Message */, "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608", "No longer supported. In early versions, manually set the text encoding for reading files."), + Enable_error_reporting_in_type_checked_JavaScript_files: diag(6609, 3 /* Message */, "Enable_error_reporting_in_type_checked_JavaScript_files_6609", "Enable error reporting in type-checked JavaScript files."), + Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references: diag(6611, 3 /* Message */, "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611", "Enable constraints that allow a TypeScript project to be used with project references."), + Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project: diag(6612, 3 /* Message */, "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612", "Generate .d.ts files from TypeScript and JavaScript files in your project."), + Specify_the_output_directory_for_generated_declaration_files: diag(6613, 3 /* Message */, "Specify_the_output_directory_for_generated_declaration_files_6613", "Specify the output directory for generated declaration files."), + Create_sourcemaps_for_d_ts_files: diag(6614, 3 /* Message */, "Create_sourcemaps_for_d_ts_files_6614", "Create sourcemaps for d.ts files."), + Output_compiler_performance_information_after_building: diag(6615, 3 /* Message */, "Output_compiler_performance_information_after_building_6615", "Output compiler performance information after building."), + Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project: diag(6616, 3 /* Message */, "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616", "Disables inference for type acquisition by looking at filenames in a project."), + Reduce_the_number_of_projects_loaded_automatically_by_TypeScript: diag(6617, 3 /* Message */, "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617", "Reduce the number of projects loaded automatically by TypeScript."), + Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server: diag(6618, 3 /* Message */, "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618", "Remove the 20mb cap on total source code size for JavaScript files in the TypeScript language server."), + Opt_a_project_out_of_multi_project_reference_checking_when_editing: diag(6619, 3 /* Message */, "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619", "Opt a project out of multi-project reference checking when editing."), + Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects: diag(6620, 3 /* Message */, "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620", "Disable preferring source files instead of declaration files when referencing composite projects."), + Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration: diag(6621, 3 /* Message */, "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621", "Emit more compliant, but verbose and less performant JavaScript for iteration."), + Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files: diag(6622, 3 /* Message */, "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622", "Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files."), + Only_output_d_ts_files_and_not_JavaScript_files: diag(6623, 3 /* Message */, "Only_output_d_ts_files_and_not_JavaScript_files_6623", "Only output d.ts files and not JavaScript files."), + Emit_design_type_metadata_for_decorated_declarations_in_source_files: diag(6624, 3 /* Message */, "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624", "Emit design-type metadata for decorated declarations in source files."), + Disable_the_type_acquisition_for_JavaScript_projects: diag(6625, 3 /* Message */, "Disable_the_type_acquisition_for_JavaScript_projects_6625", "Disable the type acquisition for JavaScript projects"), + Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility: diag(6626, 3 /* Message */, "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626", "Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility."), + Filters_results_from_the_include_option: diag(6627, 3 /* Message */, "Filters_results_from_the_include_option_6627", "Filters results from the `include` option."), + Remove_a_list_of_directories_from_the_watch_process: diag(6628, 3 /* Message */, "Remove_a_list_of_directories_from_the_watch_process_6628", "Remove a list of directories from the watch process."), + Remove_a_list_of_files_from_the_watch_mode_s_processing: diag(6629, 3 /* Message */, "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629", "Remove a list of files from the watch mode's processing."), + Enable_experimental_support_for_legacy_experimental_decorators: diag(6630, 3 /* Message */, "Enable_experimental_support_for_legacy_experimental_decorators_6630", "Enable experimental support for legacy experimental decorators."), + Print_files_read_during_the_compilation_including_why_it_was_included: diag(6631, 3 /* Message */, "Print_files_read_during_the_compilation_including_why_it_was_included_6631", "Print files read during the compilation including why it was included."), + Output_more_detailed_compiler_performance_information_after_building: diag(6632, 3 /* Message */, "Output_more_detailed_compiler_performance_information_after_building_6632", "Output more detailed compiler performance information after building."), + Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_are_inherited: diag(6633, 3 /* Message */, "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633", "Specify one or more path or node module references to base configuration files from which settings are inherited."), + Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers: diag(6634, 3 /* Message */, "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634", "Specify what approach the watcher should use if the system runs out of native file watchers."), + Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include: diag(6635, 3 /* Message */, "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635", "Include a list of files. This does not support glob patterns, as opposed to `include`."), + Build_all_projects_including_those_that_appear_to_be_up_to_date: diag(6636, 3 /* Message */, "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636", "Build all projects, including those that appear to be up to date."), + Ensure_that_casing_is_correct_in_imports: diag(6637, 3 /* Message */, "Ensure_that_casing_is_correct_in_imports_6637", "Ensure that casing is correct in imports."), + Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging: diag(6638, 3 /* Message */, "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638", "Emit a v8 CPU profile of the compiler run for debugging."), + Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file: diag(6639, 3 /* Message */, "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639", "Allow importing helper functions from tslib once per project, instead of including them per-file."), + Skip_building_downstream_projects_on_error_in_upstream_project: diag(6640, 3 /* Message */, "Skip_building_downstream_projects_on_error_in_upstream_project_6640", "Skip building downstream projects on error in upstream project."), + Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation: diag(6641, 3 /* Message */, "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641", "Specify a list of glob patterns that match files to be included in compilation."), + Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects: diag(6642, 3 /* Message */, "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642", "Save .tsbuildinfo files to allow for incremental compilation of projects."), + Include_sourcemap_files_inside_the_emitted_JavaScript: diag(6643, 3 /* Message */, "Include_sourcemap_files_inside_the_emitted_JavaScript_6643", "Include sourcemap files inside the emitted JavaScript."), + Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript: diag(6644, 3 /* Message */, "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644", "Include source code in the sourcemaps inside the emitted JavaScript."), + Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports: diag(6645, 3 /* Message */, "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645", "Ensure that each file can be safely transpiled without relying on other imports."), + Specify_what_JSX_code_is_generated: diag(6646, 3 /* Message */, "Specify_what_JSX_code_is_generated_6646", "Specify what JSX code is generated."), + Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h: diag(6647, 3 /* Message */, "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647", "Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'."), + Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment: diag(6648, 3 /* Message */, "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648", "Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'."), + Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk: diag(6649, 3 /* Message */, "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649", "Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'."), + Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option: diag(6650, 3 /* Message */, "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650", "Make keyof only return strings instead of string, numbers or symbols. Legacy option."), + Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment: diag(6651, 3 /* Message */, "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651", "Specify a set of bundled library declaration files that describe the target runtime environment."), + Print_the_names_of_emitted_files_after_a_compilation: diag(6652, 3 /* Message */, "Print_the_names_of_emitted_files_after_a_compilation_6652", "Print the names of emitted files after a compilation."), + Print_all_of_the_files_read_during_the_compilation: diag(6653, 3 /* Message */, "Print_all_of_the_files_read_during_the_compilation_6653", "Print all of the files read during the compilation."), + Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit: diag(6654, 3 /* Message */, "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654", "Set the language of the messaging from TypeScript. This does not affect emit."), + Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations: diag(6655, 3 /* Message */, "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655", "Specify the location where debugger should locate map files instead of generated locations."), + Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs: diag(6656, 3 /* Message */, "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656", "Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'."), + Specify_what_module_code_is_generated: diag(6657, 3 /* Message */, "Specify_what_module_code_is_generated_6657", "Specify what module code is generated."), + Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier: diag(6658, 3 /* Message */, "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658", "Specify how TypeScript looks up a file from a given module specifier."), + Set_the_newline_character_for_emitting_files: diag(6659, 3 /* Message */, "Set_the_newline_character_for_emitting_files_6659", "Set the newline character for emitting files."), + Disable_emitting_files_from_a_compilation: diag(6660, 3 /* Message */, "Disable_emitting_files_from_a_compilation_6660", "Disable emitting files from a compilation."), + Disable_generating_custom_helper_functions_like_extends_in_compiled_output: diag(6661, 3 /* Message */, "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661", "Disable generating custom helper functions like '__extends' in compiled output."), + Disable_emitting_files_if_any_type_checking_errors_are_reported: diag(6662, 3 /* Message */, "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662", "Disable emitting files if any type checking errors are reported."), + Disable_truncating_types_in_error_messages: diag(6663, 3 /* Message */, "Disable_truncating_types_in_error_messages_6663", "Disable truncating types in error messages."), + Enable_error_reporting_for_fallthrough_cases_in_switch_statements: diag(6664, 3 /* Message */, "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664", "Enable error reporting for fallthrough cases in switch statements."), + Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type: diag(6665, 3 /* Message */, "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665", "Enable error reporting for expressions and declarations with an implied 'any' type."), + Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier: diag(6666, 3 /* Message */, "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666", "Ensure overriding members in derived classes are marked with an override modifier."), + Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function: diag(6667, 3 /* Message */, "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667", "Enable error reporting for codepaths that do not explicitly return in a function."), + Enable_error_reporting_when_this_is_given_the_type_any: diag(6668, 3 /* Message */, "Enable_error_reporting_when_this_is_given_the_type_any_6668", "Enable error reporting when 'this' is given the type 'any'."), + Disable_adding_use_strict_directives_in_emitted_JavaScript_files: diag(6669, 3 /* Message */, "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669", "Disable adding 'use strict' directives in emitted JavaScript files."), + Disable_including_any_library_files_including_the_default_lib_d_ts: diag(6670, 3 /* Message */, "Disable_including_any_library_files_including_the_default_lib_d_ts_6670", "Disable including any library files, including the default lib.d.ts."), + Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type: diag(6671, 3 /* Message */, "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671", "Enforces using indexed accessors for keys declared using an indexed type."), + Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project: diag(6672, 3 /* Message */, "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672", "Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project."), + Disable_strict_checking_of_generic_signatures_in_function_types: diag(6673, 3 /* Message */, "Disable_strict_checking_of_generic_signatures_in_function_types_6673", "Disable strict checking of generic signatures in function types."), + Add_undefined_to_a_type_when_accessed_using_an_index: diag(6674, 3 /* Message */, "Add_undefined_to_a_type_when_accessed_using_an_index_6674", "Add 'undefined' to a type when accessed using an index."), + Enable_error_reporting_when_local_variables_aren_t_read: diag(6675, 3 /* Message */, "Enable_error_reporting_when_local_variables_aren_t_read_6675", "Enable error reporting when local variables aren't read."), + Raise_an_error_when_a_function_parameter_isn_t_read: diag(6676, 3 /* Message */, "Raise_an_error_when_a_function_parameter_isn_t_read_6676", "Raise an error when a function parameter isn't read."), + Deprecated_setting_Use_outFile_instead: diag(6677, 3 /* Message */, "Deprecated_setting_Use_outFile_instead_6677", "Deprecated setting. Use 'outFile' instead."), + Specify_an_output_folder_for_all_emitted_files: diag(6678, 3 /* Message */, "Specify_an_output_folder_for_all_emitted_files_6678", "Specify an output folder for all emitted files."), + Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output: diag(6679, 3 /* Message */, "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679", "Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output."), + Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations: diag(6680, 3 /* Message */, "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680", "Specify a set of entries that re-map imports to additional lookup locations."), + Specify_a_list_of_language_service_plugins_to_include: diag(6681, 3 /* Message */, "Specify_a_list_of_language_service_plugins_to_include_6681", "Specify a list of language service plugins to include."), + Disable_erasing_const_enum_declarations_in_generated_code: diag(6682, 3 /* Message */, "Disable_erasing_const_enum_declarations_in_generated_code_6682", "Disable erasing 'const enum' declarations in generated code."), + Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node: diag(6683, 3 /* Message */, "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683", "Disable resolving symlinks to their realpath. This correlates to the same flag in node."), + Disable_wiping_the_console_in_watch_mode: diag(6684, 3 /* Message */, "Disable_wiping_the_console_in_watch_mode_6684", "Disable wiping the console in watch mode."), + Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read: diag(6685, 3 /* Message */, "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685", "Enable color and formatting in TypeScript's output to make compiler errors easier to read."), + Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit: diag(6686, 3 /* Message */, "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686", "Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit."), + Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references: diag(6687, 3 /* Message */, "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687", "Specify an array of objects that specify paths for projects. Used in project references."), + Disable_emitting_comments: diag(6688, 3 /* Message */, "Disable_emitting_comments_6688", "Disable emitting comments."), + Enable_importing_json_files: diag(6689, 3 /* Message */, "Enable_importing_json_files_6689", "Enable importing .json files."), + Specify_the_root_folder_within_your_source_files: diag(6690, 3 /* Message */, "Specify_the_root_folder_within_your_source_files_6690", "Specify the root folder within your source files."), + Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules: diag(6691, 3 /* Message */, "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691", "Allow multiple folders to be treated as one when resolving modules."), + Skip_type_checking_d_ts_files_that_are_included_with_TypeScript: diag(6692, 3 /* Message */, "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692", "Skip type checking .d.ts files that are included with TypeScript."), + Skip_type_checking_all_d_ts_files: diag(6693, 3 /* Message */, "Skip_type_checking_all_d_ts_files_6693", "Skip type checking all .d.ts files."), + Create_source_map_files_for_emitted_JavaScript_files: diag(6694, 3 /* Message */, "Create_source_map_files_for_emitted_JavaScript_files_6694", "Create source map files for emitted JavaScript files."), + Specify_the_root_path_for_debuggers_to_find_the_reference_source_code: diag(6695, 3 /* Message */, "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695", "Specify the root path for debuggers to find the reference source code."), + Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function: diag(6697, 3 /* Message */, "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697", "Check that the arguments for 'bind', 'call', and 'apply' methods match the original function."), + When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible: diag(6698, 3 /* Message */, "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698", "When assigning functions, check to ensure parameters and the return values are subtype-compatible."), + When_type_checking_take_into_account_null_and_undefined: diag(6699, 3 /* Message */, "When_type_checking_take_into_account_null_and_undefined_6699", "When type checking, take into account 'null' and 'undefined'."), + Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor: diag(6700, 3 /* Message */, "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700", "Check for class properties that are declared but not set in the constructor."), + Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments: diag(6701, 3 /* Message */, "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701", "Disable emitting declarations that have '@internal' in their JSDoc comments."), + Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals: diag(6702, 3 /* Message */, "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702", "Disable reporting of excess property errors during the creation of object literals."), + Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures: diag(6703, 3 /* Message */, "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703", "Suppress 'noImplicitAny' errors when indexing objects that lack index signatures."), + Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively: diag(6704, 3 /* Message */, "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704", "Synchronously call callbacks and update the state of directory watchers on platforms that don`t support recursive watching natively."), + Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations: diag(6705, 3 /* Message */, "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705", "Set the JavaScript language version for emitted JavaScript and include compatible library declarations."), + Log_paths_used_during_the_moduleResolution_process: diag(6706, 3 /* Message */, "Log_paths_used_during_the_moduleResolution_process_6706", "Log paths used during the 'moduleResolution' process."), + Specify_the_path_to_tsbuildinfo_incremental_compilation_file: diag(6707, 3 /* Message */, "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707", "Specify the path to .tsbuildinfo incremental compilation file."), + Specify_options_for_automatic_acquisition_of_declaration_files: diag(6709, 3 /* Message */, "Specify_options_for_automatic_acquisition_of_declaration_files_6709", "Specify options for automatic acquisition of declaration files."), + Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types: diag(6710, 3 /* Message */, "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710", "Specify multiple folders that act like './node_modules/@types'."), + Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file: diag(6711, 3 /* Message */, "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711", "Specify type package names to be included without being referenced in a source file."), + Emit_ECMAScript_standard_compliant_class_fields: diag(6712, 3 /* Message */, "Emit_ECMAScript_standard_compliant_class_fields_6712", "Emit ECMAScript-standard-compliant class fields."), + Enable_verbose_logging: diag(6713, 3 /* Message */, "Enable_verbose_logging_6713", "Enable verbose logging."), + Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality: diag(6714, 3 /* Message */, "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714", "Specify how directories are watched on systems that lack recursive file-watching functionality."), + Specify_how_the_TypeScript_watch_mode_works: diag(6715, 3 /* Message */, "Specify_how_the_TypeScript_watch_mode_works_6715", "Specify how the TypeScript watch mode works."), + Require_undeclared_properties_from_index_signatures_to_use_element_accesses: diag(6717, 3 /* Message */, "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717", "Require undeclared properties from index signatures to use element accesses."), + Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, 3 /* Message */, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types."), + Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files: diag(6719, 3 /* Message */, "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719", "Require sufficient annotation on exports so other tools can trivially generate declaration files."), + Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any: diag(6720, 3 /* Message */, "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720", "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'."), + Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript: diag(6721, 3 /* Message */, "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721", "Do not allow runtime constructs that are not part of ECMAScript."), + Default_catch_clause_variables_as_unknown_instead_of_any: diag(6803, 3 /* Message */, "Default_catch_clause_variables_as_unknown_instead_of_any_6803", "Default catch clause variables as 'unknown' instead of 'any'."), + Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting: diag(6804, 3 /* Message */, "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804", "Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting."), + Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported: diag(6805, 3 /* Message */, "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805", "Disable full type checking (only critical parse and emit errors will be reported)."), + Check_side_effect_imports: diag(6806, 3 /* Message */, "Check_side_effect_imports_6806", "Check side effect imports."), + This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2: diag(6807, 1 /* Error */, "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807", "This operation can be simplified. This shift is identical to `{0} {1} {2}`."), + Enable_lib_replacement: diag(6808, 3 /* Message */, "Enable_lib_replacement_6808", "Enable lib replacement."), + one_of_Colon: diag(6900, 3 /* Message */, "one_of_Colon_6900", "one of:"), + one_or_more_Colon: diag(6901, 3 /* Message */, "one_or_more_Colon_6901", "one or more:"), + type_Colon: diag(6902, 3 /* Message */, "type_Colon_6902", "type:"), + default_Colon: diag(6903, 3 /* Message */, "default_Colon_6903", "default:"), + module_system_or_esModuleInterop: diag(6904, 3 /* Message */, "module_system_or_esModuleInterop_6904", 'module === "system" or esModuleInterop'), + false_unless_strict_is_set: diag(6905, 3 /* Message */, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"), + false_unless_composite_is_set: diag(6906, 3 /* Message */, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"), + node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, 3 /* Message */, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", '`["node_modules", "bower_components", "jspm_packages"]`, plus the value of `outDir` if one is specified.'), + if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, 3 /* Message */, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", '`[]` if `files` is specified, otherwise `["**/*"]`'), + true_if_composite_false_otherwise: diag(6909, 3 /* Message */, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"), + module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, 3 /* Message */, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"), + Computed_from_the_list_of_input_files: diag(6911, 3 /* Message */, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"), + Platform_specific: diag(6912, 3 /* Message */, "Platform_specific_6912", "Platform specific"), + You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, 3 /* Message */, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"), + Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon: diag(6914, 3 /* Message */, "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914", "Including --watch, -w will start watching the current project for the file changes. Once set, you can config watch mode with:"), + Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0: diag(6915, 3 /* Message */, "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915", "Using --build, -b will make tsc behave more like a build orchestrator than a compiler. This is used to trigger building composite projects which you can learn more about at {0}"), + COMMON_COMMANDS: diag(6916, 3 /* Message */, "COMMON_COMMANDS_6916", "COMMON COMMANDS"), + ALL_COMPILER_OPTIONS: diag(6917, 3 /* Message */, "ALL_COMPILER_OPTIONS_6917", "ALL COMPILER OPTIONS"), + WATCH_OPTIONS: diag(6918, 3 /* Message */, "WATCH_OPTIONS_6918", "WATCH OPTIONS"), + BUILD_OPTIONS: diag(6919, 3 /* Message */, "BUILD_OPTIONS_6919", "BUILD OPTIONS"), + COMMON_COMPILER_OPTIONS: diag(6920, 3 /* Message */, "COMMON_COMPILER_OPTIONS_6920", "COMMON COMPILER OPTIONS"), + COMMAND_LINE_FLAGS: diag(6921, 3 /* Message */, "COMMAND_LINE_FLAGS_6921", "COMMAND LINE FLAGS"), + tsc_Colon_The_TypeScript_Compiler: diag(6922, 3 /* Message */, "tsc_Colon_The_TypeScript_Compiler_6922", "tsc: The TypeScript Compiler"), + Compiles_the_current_project_tsconfig_json_in_the_working_directory: diag(6923, 3 /* Message */, "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923", "Compiles the current project (tsconfig.json in the working directory.)"), + Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options: diag(6924, 3 /* Message */, "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924", "Ignoring tsconfig.json, compiles the specified files with default compiler options."), + Build_a_composite_project_in_the_working_directory: diag(6925, 3 /* Message */, "Build_a_composite_project_in_the_working_directory_6925", "Build a composite project in the working directory."), + Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory: diag(6926, 3 /* Message */, "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926", "Creates a tsconfig.json with the recommended settings in the working directory."), + Compiles_the_TypeScript_project_located_at_the_specified_path: diag(6927, 3 /* Message */, "Compiles_the_TypeScript_project_located_at_the_specified_path_6927", "Compiles the TypeScript project located at the specified path."), + An_expanded_version_of_this_information_showing_all_possible_compiler_options: diag(6928, 3 /* Message */, "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928", "An expanded version of this information, showing all possible compiler options"), + Compiles_the_current_project_with_additional_settings: diag(6929, 3 /* Message */, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."), + true_for_ES2022_and_above_including_ESNext: diag(6930, 3 /* Message */, "true_for_ES2022_and_above_including_ESNext_6930", "`true` for ES2022 and above, including ESNext."), + List_of_file_name_suffixes_to_search_when_resolving_a_module: diag(6931, 1 /* Error */, "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931", "List of file name suffixes to search when resolving a module."), + Variable_0_implicitly_has_an_1_type: diag(7005, 1 /* Error */, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."), + Parameter_0_implicitly_has_an_1_type: diag(7006, 1 /* Error */, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."), + Member_0_implicitly_has_an_1_type: diag(7008, 1 /* Error */, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."), + new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type: diag(7009, 1 /* Error */, "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009", "'new' expression, whose target lacks a construct signature, implicitly has an 'any' type."), + _0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type: diag(7010, 1 /* Error */, "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010", "'{0}', which lacks return-type annotation, implicitly has an '{1}' return type."), + Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: diag(7011, 1 /* Error */, "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011", "Function expression, which lacks return-type annotation, implicitly has an '{0}' return type."), + This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation: diag(7012, 1 /* Error */, "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012", "This overload implicitly returns the type '{0}' because it lacks a return type annotation."), + Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: diag(7013, 1 /* Error */, "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013", "Construct signature, which lacks return-type annotation, implicitly has an 'any' return type."), + Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type: diag(7014, 1 /* Error */, "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014", "Function type, which lacks return-type annotation, implicitly has an '{0}' return type."), + Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number: diag(7015, 1 /* Error */, "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015", "Element implicitly has an 'any' type because index expression is not of type 'number'."), + Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type: diag(7016, 1 /* Error */, "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016", "Could not find a declaration file for module '{0}'. '{1}' implicitly has an 'any' type."), + Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature: diag(7017, 1 /* Error */, "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017", "Element implicitly has an 'any' type because type '{0}' has no index signature."), + Object_literal_s_property_0_implicitly_has_an_1_type: diag(7018, 1 /* Error */, "Object_literal_s_property_0_implicitly_has_an_1_type_7018", "Object literal's property '{0}' implicitly has an '{1}' type."), + Rest_parameter_0_implicitly_has_an_any_type: diag(7019, 1 /* Error */, "Rest_parameter_0_implicitly_has_an_any_type_7019", "Rest parameter '{0}' implicitly has an 'any[]' type."), + Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type: diag(7020, 1 /* Error */, "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020", "Call signature, which lacks return-type annotation, implicitly has an 'any' return type."), + _0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer: diag(7022, 1 /* Error */, "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022", "'{0}' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer."), + _0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: diag(7023, 1 /* Error */, "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023", "'{0}' implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."), + Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions: diag(7024, 1 /* Error */, "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024", "Function implicitly has return type 'any' because it does not have a return type annotation and is referenced directly or indirectly in one of its return expressions."), + Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation: diag(7025, 1 /* Error */, "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025", "Generator implicitly has yield type '{0}'. Consider supplying a return type annotation."), + JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists: diag(7026, 1 /* Error */, "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026", "JSX element implicitly has type 'any' because no interface 'JSX.{0}' exists."), + Unreachable_code_detected: diag( + 7027, + 1 /* Error */, + "Unreachable_code_detected_7027", + "Unreachable code detected.", + /*reportsUnnecessary*/ + true + ), + Unused_label: diag( + 7028, + 1 /* Error */, + "Unused_label_7028", + "Unused label.", + /*reportsUnnecessary*/ + true + ), + Fallthrough_case_in_switch: diag(7029, 1 /* Error */, "Fallthrough_case_in_switch_7029", "Fallthrough case in switch."), + Not_all_code_paths_return_a_value: diag(7030, 1 /* Error */, "Not_all_code_paths_return_a_value_7030", "Not all code paths return a value."), + Binding_element_0_implicitly_has_an_1_type: diag(7031, 1 /* Error */, "Binding_element_0_implicitly_has_an_1_type_7031", "Binding element '{0}' implicitly has an '{1}' type."), + Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation: diag(7032, 1 /* Error */, "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032", "Property '{0}' implicitly has type 'any', because its set accessor lacks a parameter type annotation."), + Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation: diag(7033, 1 /* Error */, "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033", "Property '{0}' implicitly has type 'any', because its get accessor lacks a return type annotation."), + Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined: diag(7034, 1 /* Error */, "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034", "Variable '{0}' implicitly has type '{1}' in some locations where its type cannot be determined."), + Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0: diag(7035, 1 /* Error */, "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035", "Try `npm i --save-dev @types/{1}` if it exists or add a new declaration (.d.ts) file containing `declare module '{0}';`"), + Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0: diag(7036, 1 /* Error */, "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036", "Dynamic import's specifier must be of type 'string', but here has type '{0}'."), + Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for_all_imports_Implies_allowSyntheticDefaultImports: diag(7037, 3 /* Message */, "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037", "Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'."), + Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead: diag(7038, 3 /* Message */, "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038", "Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead."), + Mapped_object_type_implicitly_has_an_any_template_type: diag(7039, 1 /* Error */, "Mapped_object_type_implicitly_has_an_any_template_type_7039", "Mapped object type implicitly has an 'any' template type."), + If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1: diag(7040, 1 /* Error */, "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040", "If the '{0}' package actually exposes this module, consider sending a pull request to amend 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'"), + The_containing_arrow_function_captures_the_global_value_of_this: diag(7041, 1 /* Error */, "The_containing_arrow_function_captures_the_global_value_of_this_7041", "The containing arrow function captures the global value of 'this'."), + Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used: diag(7042, 1 /* Error */, "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042", "Module '{0}' was resolved to '{1}', but '--resolveJsonModule' is not used."), + Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage: diag(7043, 2 /* Suggestion */, "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043", "Variable '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."), + Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage: diag(7044, 2 /* Suggestion */, "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044", "Parameter '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."), + Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage: diag(7045, 2 /* Suggestion */, "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045", "Member '{0}' implicitly has an '{1}' type, but a better type may be inferred from usage."), + Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage: diag(7046, 2 /* Suggestion */, "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046", "Variable '{0}' implicitly has type '{1}' in some locations, but a better type may be inferred from usage."), + Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage: diag(7047, 2 /* Suggestion */, "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047", "Rest parameter '{0}' implicitly has an 'any[]' type, but a better type may be inferred from usage."), + Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage: diag(7048, 2 /* Suggestion */, "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048", "Property '{0}' implicitly has type 'any', but a better type for its get accessor may be inferred from usage."), + Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage: diag(7049, 2 /* Suggestion */, "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049", "Property '{0}' implicitly has type 'any', but a better type for its set accessor may be inferred from usage."), + _0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage: diag(7050, 2 /* Suggestion */, "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050", "'{0}' implicitly has an '{1}' return type, but a better type may be inferred from usage."), + Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1: diag(7051, 1 /* Error */, "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051", "Parameter has a name but no type. Did you mean '{0}: {1}'?"), + Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1: diag(7052, 1 /* Error */, "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052", "Element implicitly has an 'any' type because type '{0}' has no index signature. Did you mean to call '{1}'?"), + Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1: diag(7053, 1 /* Error */, "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053", "Element implicitly has an 'any' type because expression of type '{0}' can't be used to index type '{1}'."), + No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1: diag(7054, 1 /* Error */, "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054", "No index signature with a parameter of type '{0}' was found on type '{1}'."), + _0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type: diag(7055, 1 /* Error */, "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055", "'{0}', which lacks return-type annotation, implicitly has an '{1}' yield type."), + The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed: diag(7056, 1 /* Error */, "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056", "The inferred type of this node exceeds the maximum length the compiler will serialize. An explicit type annotation is needed."), + yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation: diag(7057, 1 /* Error */, "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057", "'yield' expression implicitly results in an 'any' type because its containing generator lacks a return-type annotation."), + If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1: diag(7058, 1 /* Error */, "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058", "If the '{0}' package actually exposes this module, try adding a new declaration (.d.ts) file containing `declare module '{1}';`"), + This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead: diag(7059, 1 /* Error */, "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059", "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead."), + This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint: diag(7060, 1 /* Error */, "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060", "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma or explicit constraint."), + A_mapped_type_may_not_declare_properties_or_methods: diag(7061, 1 /* Error */, "A_mapped_type_may_not_declare_properties_or_methods_7061", "A mapped type may not declare properties or methods."), + You_cannot_rename_this_element: diag(8e3, 1 /* Error */, "You_cannot_rename_this_element_8000", "You cannot rename this element."), + You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library: diag(8001, 1 /* Error */, "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001", "You cannot rename elements that are defined in the standard TypeScript library."), + import_can_only_be_used_in_TypeScript_files: diag(8002, 1 /* Error */, "import_can_only_be_used_in_TypeScript_files_8002", "'import ... =' can only be used in TypeScript files."), + export_can_only_be_used_in_TypeScript_files: diag(8003, 1 /* Error */, "export_can_only_be_used_in_TypeScript_files_8003", "'export =' can only be used in TypeScript files."), + Type_parameter_declarations_can_only_be_used_in_TypeScript_files: diag(8004, 1 /* Error */, "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004", "Type parameter declarations can only be used in TypeScript files."), + implements_clauses_can_only_be_used_in_TypeScript_files: diag(8005, 1 /* Error */, "implements_clauses_can_only_be_used_in_TypeScript_files_8005", "'implements' clauses can only be used in TypeScript files."), + _0_declarations_can_only_be_used_in_TypeScript_files: diag(8006, 1 /* Error */, "_0_declarations_can_only_be_used_in_TypeScript_files_8006", "'{0}' declarations can only be used in TypeScript files."), + Type_aliases_can_only_be_used_in_TypeScript_files: diag(8008, 1 /* Error */, "Type_aliases_can_only_be_used_in_TypeScript_files_8008", "Type aliases can only be used in TypeScript files."), + The_0_modifier_can_only_be_used_in_TypeScript_files: diag(8009, 1 /* Error */, "The_0_modifier_can_only_be_used_in_TypeScript_files_8009", "The '{0}' modifier can only be used in TypeScript files."), + Type_annotations_can_only_be_used_in_TypeScript_files: diag(8010, 1 /* Error */, "Type_annotations_can_only_be_used_in_TypeScript_files_8010", "Type annotations can only be used in TypeScript files."), + Type_arguments_can_only_be_used_in_TypeScript_files: diag(8011, 1 /* Error */, "Type_arguments_can_only_be_used_in_TypeScript_files_8011", "Type arguments can only be used in TypeScript files."), + Parameter_modifiers_can_only_be_used_in_TypeScript_files: diag(8012, 1 /* Error */, "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012", "Parameter modifiers can only be used in TypeScript files."), + Non_null_assertions_can_only_be_used_in_TypeScript_files: diag(8013, 1 /* Error */, "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013", "Non-null assertions can only be used in TypeScript files."), + Type_assertion_expressions_can_only_be_used_in_TypeScript_files: diag(8016, 1 /* Error */, "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016", "Type assertion expressions can only be used in TypeScript files."), + Signature_declarations_can_only_be_used_in_TypeScript_files: diag(8017, 1 /* Error */, "Signature_declarations_can_only_be_used_in_TypeScript_files_8017", "Signature declarations can only be used in TypeScript files."), + Report_errors_in_js_files: diag(8019, 3 /* Message */, "Report_errors_in_js_files_8019", "Report errors in .js files."), + JSDoc_types_can_only_be_used_inside_documentation_comments: diag(8020, 1 /* Error */, "JSDoc_types_can_only_be_used_inside_documentation_comments_8020", "JSDoc types can only be used inside documentation comments."), + JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags: diag(8021, 1 /* Error */, "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021", "JSDoc '@typedef' tag should either have a type annotation or be followed by '@property' or '@member' tags."), + JSDoc_0_is_not_attached_to_a_class: diag(8022, 1 /* Error */, "JSDoc_0_is_not_attached_to_a_class_8022", "JSDoc '@{0}' is not attached to a class."), + JSDoc_0_1_does_not_match_the_extends_2_clause: diag(8023, 1 /* Error */, "JSDoc_0_1_does_not_match_the_extends_2_clause_8023", "JSDoc '@{0} {1}' does not match the 'extends {2}' clause."), + JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name: diag(8024, 1 /* Error */, "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024", "JSDoc '@param' tag has name '{0}', but there is no parameter with that name."), + Class_declarations_cannot_have_more_than_one_augments_or_extends_tag: diag(8025, 1 /* Error */, "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025", "Class declarations cannot have more than one '@augments' or '@extends' tag."), + Expected_0_type_arguments_provide_these_with_an_extends_tag: diag(8026, 1 /* Error */, "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026", "Expected {0} type arguments; provide these with an '@extends' tag."), + Expected_0_1_type_arguments_provide_these_with_an_extends_tag: diag(8027, 1 /* Error */, "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027", "Expected {0}-{1} type arguments; provide these with an '@extends' tag."), + JSDoc_may_only_appear_in_the_last_parameter_of_a_signature: diag(8028, 1 /* Error */, "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028", "JSDoc '...' may only appear in the last parameter of a signature."), + JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type: diag(8029, 1 /* Error */, "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029", "JSDoc '@param' tag has name '{0}', but there is no parameter with that name. It would match 'arguments' if it had an array type."), + The_type_of_a_function_declaration_must_match_the_function_s_signature: diag(8030, 1 /* Error */, "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030", "The type of a function declaration must match the function's signature."), + You_cannot_rename_a_module_via_a_global_import: diag(8031, 1 /* Error */, "You_cannot_rename_a_module_via_a_global_import_8031", "You cannot rename a module via a global import."), + Qualified_name_0_is_not_allowed_without_a_leading_param_object_1: diag(8032, 1 /* Error */, "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032", "Qualified name '{0}' is not allowed without a leading '@param {object} {1}'."), + A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags: diag(8033, 1 /* Error */, "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033", "A JSDoc '@typedef' comment may not contain multiple '@type' tags."), + The_tag_was_first_specified_here: diag(8034, 1 /* Error */, "The_tag_was_first_specified_here_8034", "The tag was first specified here."), + You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder: diag(8035, 1 /* Error */, "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035", "You cannot rename elements that are defined in a 'node_modules' folder."), + You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder: diag(8036, 1 /* Error */, "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036", "You cannot rename elements that are defined in another 'node_modules' folder."), + Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files: diag(8037, 1 /* Error */, "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037", "Type satisfaction expressions can only be used in TypeScript files."), + Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export: diag(8038, 1 /* Error */, "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038", "Decorators may not appear after 'export' or 'export default' if they also appear before 'export'."), + A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag: diag(8039, 1 /* Error */, "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039", "A JSDoc '@template' tag may not follow a '@typedef', '@callback', or '@overload' tag"), + Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit: diag(9005, 1 /* Error */, "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005", "Declaration emit for this file requires using private name '{0}'. An explicit type annotation may unblock declaration emit."), + Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit: diag(9006, 1 /* Error */, "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006", "Declaration emit for this file requires using private name '{0}' from module '{1}'. An explicit type annotation may unblock declaration emit."), + Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations: diag(9007, 1 /* Error */, "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007", "Function must have an explicit return type annotation with --isolatedDeclarations."), + Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations: diag(9008, 1 /* Error */, "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008", "Method must have an explicit return type annotation with --isolatedDeclarations."), + At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations: diag(9009, 1 /* Error */, "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009", "At least one accessor must have an explicit type annotation with --isolatedDeclarations."), + Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations: diag(9010, 1 /* Error */, "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010", "Variable must have an explicit type annotation with --isolatedDeclarations."), + Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations: diag(9011, 1 /* Error */, "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011", "Parameter must have an explicit type annotation with --isolatedDeclarations."), + Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations: diag(9012, 1 /* Error */, "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012", "Property must have an explicit type annotation with --isolatedDeclarations."), + Expression_type_can_t_be_inferred_with_isolatedDeclarations: diag(9013, 1 /* Error */, "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013", "Expression type can't be inferred with --isolatedDeclarations."), + Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedDeclarations: diag(9014, 1 /* Error */, "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014", "Computed properties must be number or string literals, variables or dotted expressions with --isolatedDeclarations."), + Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations: diag(9015, 1 /* Error */, "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015", "Objects that contain spread assignments can't be inferred with --isolatedDeclarations."), + Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations: diag(9016, 1 /* Error */, "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016", "Objects that contain shorthand properties can't be inferred with --isolatedDeclarations."), + Only_const_arrays_can_be_inferred_with_isolatedDeclarations: diag(9017, 1 /* Error */, "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017", "Only const arrays can be inferred with --isolatedDeclarations."), + Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations: diag(9018, 1 /* Error */, "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018", "Arrays with spread elements can't inferred with --isolatedDeclarations."), + Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations: diag(9019, 1 /* Error */, "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019", "Binding elements can't be exported directly with --isolatedDeclarations."), + Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDeclarations: diag(9020, 1 /* Error */, "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020", "Enum member initializers must be computable without references to external symbols with --isolatedDeclarations."), + Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations: diag(9021, 1 /* Error */, "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021", "Extends clause can't contain an expression with --isolatedDeclarations."), + Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations: diag(9022, 1 /* Error */, "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022", "Inference from class expressions is not supported with --isolatedDeclarations."), + Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations_Add_an_explicit_declaration_for_the_properties_assigned_to_this_function: diag(9023, 1 /* Error */, "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023", "Assigning properties to functions without declaring them is not supported with --isolatedDeclarations. Add an explicit declaration for the properties assigned to this function."), + Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_supported_with_isolatedDeclarations: diag(9025, 1 /* Error */, "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025", "Declaration emit for this parameter requires implicitly adding undefined to its type. This is not supported with --isolatedDeclarations."), + Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_supported_with_isolatedDeclarations: diag(9026, 1 /* Error */, "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026", "Declaration emit for this file requires preserving this import for augmentations. This is not supported with --isolatedDeclarations."), + Add_a_type_annotation_to_the_variable_0: diag(9027, 1 /* Error */, "Add_a_type_annotation_to_the_variable_0_9027", "Add a type annotation to the variable {0}."), + Add_a_type_annotation_to_the_parameter_0: diag(9028, 1 /* Error */, "Add_a_type_annotation_to_the_parameter_0_9028", "Add a type annotation to the parameter {0}."), + Add_a_type_annotation_to_the_property_0: diag(9029, 1 /* Error */, "Add_a_type_annotation_to_the_property_0_9029", "Add a type annotation to the property {0}."), + Add_a_return_type_to_the_function_expression: diag(9030, 1 /* Error */, "Add_a_return_type_to_the_function_expression_9030", "Add a return type to the function expression."), + Add_a_return_type_to_the_function_declaration: diag(9031, 1 /* Error */, "Add_a_return_type_to_the_function_declaration_9031", "Add a return type to the function declaration."), + Add_a_return_type_to_the_get_accessor_declaration: diag(9032, 1 /* Error */, "Add_a_return_type_to_the_get_accessor_declaration_9032", "Add a return type to the get accessor declaration."), + Add_a_type_to_parameter_of_the_set_accessor_declaration: diag(9033, 1 /* Error */, "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033", "Add a type to parameter of the set accessor declaration."), + Add_a_return_type_to_the_method: diag(9034, 1 /* Error */, "Add_a_return_type_to_the_method_9034", "Add a return type to the method"), + Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit: diag(9035, 1 /* Error */, "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035", "Add satisfies and a type assertion to this expression (satisfies T as T) to make the type explicit."), + Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it: diag(9036, 1 /* Error */, "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036", "Move the expression in default export to a variable and add a type annotation to it."), + Default_exports_can_t_be_inferred_with_isolatedDeclarations: diag(9037, 1 /* Error */, "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037", "Default exports can't be inferred with --isolatedDeclarations."), + Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations: diag(9038, 1 /* Error */, "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038", "Computed property names on class or object literals cannot be inferred with --isolatedDeclarations."), + Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations: diag(9039, 1 /* Error */, "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039", "Type containing private name '{0}' can't be used with --isolatedDeclarations."), + JSX_attributes_must_only_be_assigned_a_non_empty_expression: diag(17e3, 1 /* Error */, "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000", "JSX attributes must only be assigned a non-empty 'expression'."), + JSX_elements_cannot_have_multiple_attributes_with_the_same_name: diag(17001, 1 /* Error */, "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001", "JSX elements cannot have multiple attributes with the same name."), + Expected_corresponding_JSX_closing_tag_for_0: diag(17002, 1 /* Error */, "Expected_corresponding_JSX_closing_tag_for_0_17002", "Expected corresponding JSX closing tag for '{0}'."), + Cannot_use_JSX_unless_the_jsx_flag_is_provided: diag(17004, 1 /* Error */, "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004", "Cannot use JSX unless the '--jsx' flag is provided."), + A_constructor_cannot_contain_a_super_call_when_its_class_extends_null: diag(17005, 1 /* Error */, "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005", "A constructor cannot contain a 'super' call when its class extends 'null'."), + An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: diag(17006, 1 /* Error */, "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006", "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."), + A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses: diag(17007, 1 /* Error */, "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007", "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses."), + JSX_element_0_has_no_corresponding_closing_tag: diag(17008, 1 /* Error */, "JSX_element_0_has_no_corresponding_closing_tag_17008", "JSX element '{0}' has no corresponding closing tag."), + super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class: diag(17009, 1 /* Error */, "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009", "'super' must be called before accessing 'this' in the constructor of a derived class."), + Unknown_type_acquisition_option_0: diag(17010, 1 /* Error */, "Unknown_type_acquisition_option_0_17010", "Unknown type acquisition option '{0}'."), + super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class: diag(17011, 1 /* Error */, "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011", "'super' must be called before accessing a property of 'super' in the constructor of a derived class."), + _0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2: diag(17012, 1 /* Error */, "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012", "'{0}' is not a valid meta-property for keyword '{1}'. Did you mean '{2}'?"), + Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor: diag(17013, 1 /* Error */, "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013", "Meta-property '{0}' is only allowed in the body of a function declaration, function expression, or constructor."), + JSX_fragment_has_no_corresponding_closing_tag: diag(17014, 1 /* Error */, "JSX_fragment_has_no_corresponding_closing_tag_17014", "JSX fragment has no corresponding closing tag."), + Expected_corresponding_closing_tag_for_JSX_fragment: diag(17015, 1 /* Error */, "Expected_corresponding_closing_tag_for_JSX_fragment_17015", "Expected corresponding closing tag for JSX fragment."), + The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option: diag(17016, 1 /* Error */, "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016", "The 'jsxFragmentFactory' compiler option must be provided to use JSX fragments with the 'jsxFactory' compiler option."), + An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments: diag(17017, 1 /* Error */, "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017", "An @jsxFrag pragma is required when using an @jsx pragma with JSX fragments."), + Unknown_type_acquisition_option_0_Did_you_mean_1: diag(17018, 1 /* Error */, "Unknown_type_acquisition_option_0_Did_you_mean_1_17018", "Unknown type acquisition option '{0}'. Did you mean '{1}'?"), + _0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1: diag(17019, 1 /* Error */, "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019", "'{0}' at the end of a type is not valid TypeScript syntax. Did you mean to write '{1}'?"), + _0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1: diag(17020, 1 /* Error */, "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020", "'{0}' at the start of a type is not valid TypeScript syntax. Did you mean to write '{1}'?"), + Unicode_escape_sequence_cannot_appear_here: diag(17021, 1 /* Error */, "Unicode_escape_sequence_cannot_appear_here_17021", "Unicode escape sequence cannot appear here."), + Circularity_detected_while_resolving_configuration_Colon_0: diag(18e3, 1 /* Error */, "Circularity_detected_while_resolving_configuration_Colon_0_18000", "Circularity detected while resolving configuration: {0}"), + The_files_list_in_config_file_0_is_empty: diag(18002, 1 /* Error */, "The_files_list_in_config_file_0_is_empty_18002", "The 'files' list in config file '{0}' is empty."), + No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2: diag(18003, 1 /* Error */, "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003", "No inputs were found in config file '{0}'. Specified 'include' paths were '{1}' and 'exclude' paths were '{2}'."), + File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module: diag(80001, 2 /* Suggestion */, "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001", "File is a CommonJS module; it may be converted to an ES module."), + This_constructor_function_may_be_converted_to_a_class_declaration: diag(80002, 2 /* Suggestion */, "This_constructor_function_may_be_converted_to_a_class_declaration_80002", "This constructor function may be converted to a class declaration."), + Import_may_be_converted_to_a_default_import: diag(80003, 2 /* Suggestion */, "Import_may_be_converted_to_a_default_import_80003", "Import may be converted to a default import."), + JSDoc_types_may_be_moved_to_TypeScript_types: diag(80004, 2 /* Suggestion */, "JSDoc_types_may_be_moved_to_TypeScript_types_80004", "JSDoc types may be moved to TypeScript types."), + require_call_may_be_converted_to_an_import: diag(80005, 2 /* Suggestion */, "require_call_may_be_converted_to_an_import_80005", "'require' call may be converted to an import."), + This_may_be_converted_to_an_async_function: diag(80006, 2 /* Suggestion */, "This_may_be_converted_to_an_async_function_80006", "This may be converted to an async function."), + await_has_no_effect_on_the_type_of_this_expression: diag(80007, 2 /* Suggestion */, "await_has_no_effect_on_the_type_of_this_expression_80007", "'await' has no effect on the type of this expression."), + Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers: diag(80008, 2 /* Suggestion */, "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008", "Numeric literals with absolute values equal to 2^53 or greater are too large to be represented accurately as integers."), + JSDoc_typedef_may_be_converted_to_TypeScript_type: diag(80009, 2 /* Suggestion */, "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009", "JSDoc typedef may be converted to TypeScript type."), + JSDoc_typedefs_may_be_converted_to_TypeScript_types: diag(80010, 2 /* Suggestion */, "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010", "JSDoc typedefs may be converted to TypeScript types."), + Add_missing_super_call: diag(90001, 3 /* Message */, "Add_missing_super_call_90001", "Add missing 'super()' call"), + Make_super_call_the_first_statement_in_the_constructor: diag(90002, 3 /* Message */, "Make_super_call_the_first_statement_in_the_constructor_90002", "Make 'super()' call the first statement in the constructor"), + Change_extends_to_implements: diag(90003, 3 /* Message */, "Change_extends_to_implements_90003", "Change 'extends' to 'implements'"), + Remove_unused_declaration_for_Colon_0: diag(90004, 3 /* Message */, "Remove_unused_declaration_for_Colon_0_90004", "Remove unused declaration for: '{0}'"), + Remove_import_from_0: diag(90005, 3 /* Message */, "Remove_import_from_0_90005", "Remove import from '{0}'"), + Implement_interface_0: diag(90006, 3 /* Message */, "Implement_interface_0_90006", "Implement interface '{0}'"), + Implement_inherited_abstract_class: diag(90007, 3 /* Message */, "Implement_inherited_abstract_class_90007", "Implement inherited abstract class"), + Add_0_to_unresolved_variable: diag(90008, 3 /* Message */, "Add_0_to_unresolved_variable_90008", "Add '{0}.' to unresolved variable"), + Remove_variable_statement: diag(90010, 3 /* Message */, "Remove_variable_statement_90010", "Remove variable statement"), + Remove_template_tag: diag(90011, 3 /* Message */, "Remove_template_tag_90011", "Remove template tag"), + Remove_type_parameters: diag(90012, 3 /* Message */, "Remove_type_parameters_90012", "Remove type parameters"), + Import_0_from_1: diag(90013, 3 /* Message */, "Import_0_from_1_90013", `Import '{0}' from "{1}"`), + Change_0_to_1: diag(90014, 3 /* Message */, "Change_0_to_1_90014", "Change '{0}' to '{1}'"), + Declare_property_0: diag(90016, 3 /* Message */, "Declare_property_0_90016", "Declare property '{0}'"), + Add_index_signature_for_property_0: diag(90017, 3 /* Message */, "Add_index_signature_for_property_0_90017", "Add index signature for property '{0}'"), + Disable_checking_for_this_file: diag(90018, 3 /* Message */, "Disable_checking_for_this_file_90018", "Disable checking for this file"), + Ignore_this_error_message: diag(90019, 3 /* Message */, "Ignore_this_error_message_90019", "Ignore this error message"), + Initialize_property_0_in_the_constructor: diag(90020, 3 /* Message */, "Initialize_property_0_in_the_constructor_90020", "Initialize property '{0}' in the constructor"), + Initialize_static_property_0: diag(90021, 3 /* Message */, "Initialize_static_property_0_90021", "Initialize static property '{0}'"), + Change_spelling_to_0: diag(90022, 3 /* Message */, "Change_spelling_to_0_90022", "Change spelling to '{0}'"), + Declare_method_0: diag(90023, 3 /* Message */, "Declare_method_0_90023", "Declare method '{0}'"), + Declare_static_method_0: diag(90024, 3 /* Message */, "Declare_static_method_0_90024", "Declare static method '{0}'"), + Prefix_0_with_an_underscore: diag(90025, 3 /* Message */, "Prefix_0_with_an_underscore_90025", "Prefix '{0}' with an underscore"), + Rewrite_as_the_indexed_access_type_0: diag(90026, 3 /* Message */, "Rewrite_as_the_indexed_access_type_0_90026", "Rewrite as the indexed access type '{0}'"), + Declare_static_property_0: diag(90027, 3 /* Message */, "Declare_static_property_0_90027", "Declare static property '{0}'"), + Call_decorator_expression: diag(90028, 3 /* Message */, "Call_decorator_expression_90028", "Call decorator expression"), + Add_async_modifier_to_containing_function: diag(90029, 3 /* Message */, "Add_async_modifier_to_containing_function_90029", "Add async modifier to containing function"), + Replace_infer_0_with_unknown: diag(90030, 3 /* Message */, "Replace_infer_0_with_unknown_90030", "Replace 'infer {0}' with 'unknown'"), + Replace_all_unused_infer_with_unknown: diag(90031, 3 /* Message */, "Replace_all_unused_infer_with_unknown_90031", "Replace all unused 'infer' with 'unknown'"), + Add_parameter_name: diag(90034, 3 /* Message */, "Add_parameter_name_90034", "Add parameter name"), + Declare_private_property_0: diag(90035, 3 /* Message */, "Declare_private_property_0_90035", "Declare private property '{0}'"), + Replace_0_with_Promise_1: diag(90036, 3 /* Message */, "Replace_0_with_Promise_1_90036", "Replace '{0}' with 'Promise<{1}>'"), + Fix_all_incorrect_return_type_of_an_async_functions: diag(90037, 3 /* Message */, "Fix_all_incorrect_return_type_of_an_async_functions_90037", "Fix all incorrect return type of an async functions"), + Declare_private_method_0: diag(90038, 3 /* Message */, "Declare_private_method_0_90038", "Declare private method '{0}'"), + Remove_unused_destructuring_declaration: diag(90039, 3 /* Message */, "Remove_unused_destructuring_declaration_90039", "Remove unused destructuring declaration"), + Remove_unused_declarations_for_Colon_0: diag(90041, 3 /* Message */, "Remove_unused_declarations_for_Colon_0_90041", "Remove unused declarations for: '{0}'"), + Declare_a_private_field_named_0: diag(90053, 3 /* Message */, "Declare_a_private_field_named_0_90053", "Declare a private field named '{0}'."), + Includes_imports_of_types_referenced_by_0: diag(90054, 3 /* Message */, "Includes_imports_of_types_referenced_by_0_90054", "Includes imports of types referenced by '{0}'"), + Remove_type_from_import_declaration_from_0: diag(90055, 3 /* Message */, "Remove_type_from_import_declaration_from_0_90055", `Remove 'type' from import declaration from "{0}"`), + Remove_type_from_import_of_0_from_1: diag(90056, 3 /* Message */, "Remove_type_from_import_of_0_from_1_90056", `Remove 'type' from import of '{0}' from "{1}"`), + Add_import_from_0: diag(90057, 3 /* Message */, "Add_import_from_0_90057", 'Add import from "{0}"'), + Update_import_from_0: diag(90058, 3 /* Message */, "Update_import_from_0_90058", 'Update import from "{0}"'), + Export_0_from_module_1: diag(90059, 3 /* Message */, "Export_0_from_module_1_90059", "Export '{0}' from module '{1}'"), + Export_all_referenced_locals: diag(90060, 3 /* Message */, "Export_all_referenced_locals_90060", "Export all referenced locals"), + Update_modifiers_of_0: diag(90061, 3 /* Message */, "Update_modifiers_of_0_90061", "Update modifiers of '{0}'"), + Add_annotation_of_type_0: diag(90062, 3 /* Message */, "Add_annotation_of_type_0_90062", "Add annotation of type '{0}'"), + Add_return_type_0: diag(90063, 3 /* Message */, "Add_return_type_0_90063", "Add return type '{0}'"), + Extract_base_class_to_variable: diag(90064, 3 /* Message */, "Extract_base_class_to_variable_90064", "Extract base class to variable"), + Extract_default_export_to_variable: diag(90065, 3 /* Message */, "Extract_default_export_to_variable_90065", "Extract default export to variable"), + Extract_binding_expressions_to_variable: diag(90066, 3 /* Message */, "Extract_binding_expressions_to_variable_90066", "Extract binding expressions to variable"), + Add_all_missing_type_annotations: diag(90067, 3 /* Message */, "Add_all_missing_type_annotations_90067", "Add all missing type annotations"), + Add_satisfies_and_an_inline_type_assertion_with_0: diag(90068, 3 /* Message */, "Add_satisfies_and_an_inline_type_assertion_with_0_90068", "Add satisfies and an inline type assertion with '{0}'"), + Extract_to_variable_and_replace_with_0_as_typeof_0: diag(90069, 3 /* Message */, "Extract_to_variable_and_replace_with_0_as_typeof_0_90069", "Extract to variable and replace with '{0} as typeof {0}'"), + Mark_array_literal_as_const: diag(90070, 3 /* Message */, "Mark_array_literal_as_const_90070", "Mark array literal as const"), + Annotate_types_of_properties_expando_function_in_a_namespace: diag(90071, 3 /* Message */, "Annotate_types_of_properties_expando_function_in_a_namespace_90071", "Annotate types of properties expando function in a namespace"), + Convert_function_to_an_ES2015_class: diag(95001, 3 /* Message */, "Convert_function_to_an_ES2015_class_95001", "Convert function to an ES2015 class"), + Convert_0_to_1_in_0: diag(95003, 3 /* Message */, "Convert_0_to_1_in_0_95003", "Convert '{0}' to '{1} in {0}'"), + Extract_to_0_in_1: diag(95004, 3 /* Message */, "Extract_to_0_in_1_95004", "Extract to {0} in {1}"), + Extract_function: diag(95005, 3 /* Message */, "Extract_function_95005", "Extract function"), + Extract_constant: diag(95006, 3 /* Message */, "Extract_constant_95006", "Extract constant"), + Extract_to_0_in_enclosing_scope: diag(95007, 3 /* Message */, "Extract_to_0_in_enclosing_scope_95007", "Extract to {0} in enclosing scope"), + Extract_to_0_in_1_scope: diag(95008, 3 /* Message */, "Extract_to_0_in_1_scope_95008", "Extract to {0} in {1} scope"), + Annotate_with_type_from_JSDoc: diag(95009, 3 /* Message */, "Annotate_with_type_from_JSDoc_95009", "Annotate with type from JSDoc"), + Infer_type_of_0_from_usage: diag(95011, 3 /* Message */, "Infer_type_of_0_from_usage_95011", "Infer type of '{0}' from usage"), + Infer_parameter_types_from_usage: diag(95012, 3 /* Message */, "Infer_parameter_types_from_usage_95012", "Infer parameter types from usage"), + Convert_to_default_import: diag(95013, 3 /* Message */, "Convert_to_default_import_95013", "Convert to default import"), + Install_0: diag(95014, 3 /* Message */, "Install_0_95014", "Install '{0}'"), + Replace_import_with_0: diag(95015, 3 /* Message */, "Replace_import_with_0_95015", "Replace import with '{0}'."), + Use_synthetic_default_member: diag(95016, 3 /* Message */, "Use_synthetic_default_member_95016", "Use synthetic 'default' member."), + Convert_to_ES_module: diag(95017, 3 /* Message */, "Convert_to_ES_module_95017", "Convert to ES module"), + Add_undefined_type_to_property_0: diag(95018, 3 /* Message */, "Add_undefined_type_to_property_0_95018", "Add 'undefined' type to property '{0}'"), + Add_initializer_to_property_0: diag(95019, 3 /* Message */, "Add_initializer_to_property_0_95019", "Add initializer to property '{0}'"), + Add_definite_assignment_assertion_to_property_0: diag(95020, 3 /* Message */, "Add_definite_assignment_assertion_to_property_0_95020", "Add definite assignment assertion to property '{0}'"), + Convert_all_type_literals_to_mapped_type: diag(95021, 3 /* Message */, "Convert_all_type_literals_to_mapped_type_95021", "Convert all type literals to mapped type"), + Add_all_missing_members: diag(95022, 3 /* Message */, "Add_all_missing_members_95022", "Add all missing members"), + Infer_all_types_from_usage: diag(95023, 3 /* Message */, "Infer_all_types_from_usage_95023", "Infer all types from usage"), + Delete_all_unused_declarations: diag(95024, 3 /* Message */, "Delete_all_unused_declarations_95024", "Delete all unused declarations"), + Prefix_all_unused_declarations_with_where_possible: diag(95025, 3 /* Message */, "Prefix_all_unused_declarations_with_where_possible_95025", "Prefix all unused declarations with '_' where possible"), + Fix_all_detected_spelling_errors: diag(95026, 3 /* Message */, "Fix_all_detected_spelling_errors_95026", "Fix all detected spelling errors"), + Add_initializers_to_all_uninitialized_properties: diag(95027, 3 /* Message */, "Add_initializers_to_all_uninitialized_properties_95027", "Add initializers to all uninitialized properties"), + Add_definite_assignment_assertions_to_all_uninitialized_properties: diag(95028, 3 /* Message */, "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028", "Add definite assignment assertions to all uninitialized properties"), + Add_undefined_type_to_all_uninitialized_properties: diag(95029, 3 /* Message */, "Add_undefined_type_to_all_uninitialized_properties_95029", "Add undefined type to all uninitialized properties"), + Change_all_jsdoc_style_types_to_TypeScript: diag(95030, 3 /* Message */, "Change_all_jsdoc_style_types_to_TypeScript_95030", "Change all jsdoc-style types to TypeScript"), + Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types: diag(95031, 3 /* Message */, "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031", "Change all jsdoc-style types to TypeScript (and add '| undefined' to nullable types)"), + Implement_all_unimplemented_interfaces: diag(95032, 3 /* Message */, "Implement_all_unimplemented_interfaces_95032", "Implement all unimplemented interfaces"), + Install_all_missing_types_packages: diag(95033, 3 /* Message */, "Install_all_missing_types_packages_95033", "Install all missing types packages"), + Rewrite_all_as_indexed_access_types: diag(95034, 3 /* Message */, "Rewrite_all_as_indexed_access_types_95034", "Rewrite all as indexed access types"), + Convert_all_to_default_imports: diag(95035, 3 /* Message */, "Convert_all_to_default_imports_95035", "Convert all to default imports"), + Make_all_super_calls_the_first_statement_in_their_constructor: diag(95036, 3 /* Message */, "Make_all_super_calls_the_first_statement_in_their_constructor_95036", "Make all 'super()' calls the first statement in their constructor"), + Add_qualifier_to_all_unresolved_variables_matching_a_member_name: diag(95037, 3 /* Message */, "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037", "Add qualifier to all unresolved variables matching a member name"), + Change_all_extended_interfaces_to_implements: diag(95038, 3 /* Message */, "Change_all_extended_interfaces_to_implements_95038", "Change all extended interfaces to 'implements'"), + Add_all_missing_super_calls: diag(95039, 3 /* Message */, "Add_all_missing_super_calls_95039", "Add all missing super calls"), + Implement_all_inherited_abstract_classes: diag(95040, 3 /* Message */, "Implement_all_inherited_abstract_classes_95040", "Implement all inherited abstract classes"), + Add_all_missing_async_modifiers: diag(95041, 3 /* Message */, "Add_all_missing_async_modifiers_95041", "Add all missing 'async' modifiers"), + Add_ts_ignore_to_all_error_messages: diag(95042, 3 /* Message */, "Add_ts_ignore_to_all_error_messages_95042", "Add '@ts-ignore' to all error messages"), + Annotate_everything_with_types_from_JSDoc: diag(95043, 3 /* Message */, "Annotate_everything_with_types_from_JSDoc_95043", "Annotate everything with types from JSDoc"), + Add_to_all_uncalled_decorators: diag(95044, 3 /* Message */, "Add_to_all_uncalled_decorators_95044", "Add '()' to all uncalled decorators"), + Convert_all_constructor_functions_to_classes: diag(95045, 3 /* Message */, "Convert_all_constructor_functions_to_classes_95045", "Convert all constructor functions to classes"), + Generate_get_and_set_accessors: diag(95046, 3 /* Message */, "Generate_get_and_set_accessors_95046", "Generate 'get' and 'set' accessors"), + Convert_require_to_import: diag(95047, 3 /* Message */, "Convert_require_to_import_95047", "Convert 'require' to 'import'"), + Convert_all_require_to_import: diag(95048, 3 /* Message */, "Convert_all_require_to_import_95048", "Convert all 'require' to 'import'"), + Move_to_a_new_file: diag(95049, 3 /* Message */, "Move_to_a_new_file_95049", "Move to a new file"), + Remove_unreachable_code: diag(95050, 3 /* Message */, "Remove_unreachable_code_95050", "Remove unreachable code"), + Remove_all_unreachable_code: diag(95051, 3 /* Message */, "Remove_all_unreachable_code_95051", "Remove all unreachable code"), + Add_missing_typeof: diag(95052, 3 /* Message */, "Add_missing_typeof_95052", "Add missing 'typeof'"), + Remove_unused_label: diag(95053, 3 /* Message */, "Remove_unused_label_95053", "Remove unused label"), + Remove_all_unused_labels: diag(95054, 3 /* Message */, "Remove_all_unused_labels_95054", "Remove all unused labels"), + Convert_0_to_mapped_object_type: diag(95055, 3 /* Message */, "Convert_0_to_mapped_object_type_95055", "Convert '{0}' to mapped object type"), + Convert_namespace_import_to_named_imports: diag(95056, 3 /* Message */, "Convert_namespace_import_to_named_imports_95056", "Convert namespace import to named imports"), + Convert_named_imports_to_namespace_import: diag(95057, 3 /* Message */, "Convert_named_imports_to_namespace_import_95057", "Convert named imports to namespace import"), + Add_or_remove_braces_in_an_arrow_function: diag(95058, 3 /* Message */, "Add_or_remove_braces_in_an_arrow_function_95058", "Add or remove braces in an arrow function"), + Add_braces_to_arrow_function: diag(95059, 3 /* Message */, "Add_braces_to_arrow_function_95059", "Add braces to arrow function"), + Remove_braces_from_arrow_function: diag(95060, 3 /* Message */, "Remove_braces_from_arrow_function_95060", "Remove braces from arrow function"), + Convert_default_export_to_named_export: diag(95061, 3 /* Message */, "Convert_default_export_to_named_export_95061", "Convert default export to named export"), + Convert_named_export_to_default_export: diag(95062, 3 /* Message */, "Convert_named_export_to_default_export_95062", "Convert named export to default export"), + Add_missing_enum_member_0: diag(95063, 3 /* Message */, "Add_missing_enum_member_0_95063", "Add missing enum member '{0}'"), + Add_all_missing_imports: diag(95064, 3 /* Message */, "Add_all_missing_imports_95064", "Add all missing imports"), + Convert_to_async_function: diag(95065, 3 /* Message */, "Convert_to_async_function_95065", "Convert to async function"), + Convert_all_to_async_functions: diag(95066, 3 /* Message */, "Convert_all_to_async_functions_95066", "Convert all to async functions"), + Add_missing_call_parentheses: diag(95067, 3 /* Message */, "Add_missing_call_parentheses_95067", "Add missing call parentheses"), + Add_all_missing_call_parentheses: diag(95068, 3 /* Message */, "Add_all_missing_call_parentheses_95068", "Add all missing call parentheses"), + Add_unknown_conversion_for_non_overlapping_types: diag(95069, 3 /* Message */, "Add_unknown_conversion_for_non_overlapping_types_95069", "Add 'unknown' conversion for non-overlapping types"), + Add_unknown_to_all_conversions_of_non_overlapping_types: diag(95070, 3 /* Message */, "Add_unknown_to_all_conversions_of_non_overlapping_types_95070", "Add 'unknown' to all conversions of non-overlapping types"), + Add_missing_new_operator_to_call: diag(95071, 3 /* Message */, "Add_missing_new_operator_to_call_95071", "Add missing 'new' operator to call"), + Add_missing_new_operator_to_all_calls: diag(95072, 3 /* Message */, "Add_missing_new_operator_to_all_calls_95072", "Add missing 'new' operator to all calls"), + Add_names_to_all_parameters_without_names: diag(95073, 3 /* Message */, "Add_names_to_all_parameters_without_names_95073", "Add names to all parameters without names"), + Enable_the_experimentalDecorators_option_in_your_configuration_file: diag(95074, 3 /* Message */, "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074", "Enable the 'experimentalDecorators' option in your configuration file"), + Convert_parameters_to_destructured_object: diag(95075, 3 /* Message */, "Convert_parameters_to_destructured_object_95075", "Convert parameters to destructured object"), + Extract_type: diag(95077, 3 /* Message */, "Extract_type_95077", "Extract type"), + Extract_to_type_alias: diag(95078, 3 /* Message */, "Extract_to_type_alias_95078", "Extract to type alias"), + Extract_to_typedef: diag(95079, 3 /* Message */, "Extract_to_typedef_95079", "Extract to typedef"), + Infer_this_type_of_0_from_usage: diag(95080, 3 /* Message */, "Infer_this_type_of_0_from_usage_95080", "Infer 'this' type of '{0}' from usage"), + Add_const_to_unresolved_variable: diag(95081, 3 /* Message */, "Add_const_to_unresolved_variable_95081", "Add 'const' to unresolved variable"), + Add_const_to_all_unresolved_variables: diag(95082, 3 /* Message */, "Add_const_to_all_unresolved_variables_95082", "Add 'const' to all unresolved variables"), + Add_await: diag(95083, 3 /* Message */, "Add_await_95083", "Add 'await'"), + Add_await_to_initializer_for_0: diag(95084, 3 /* Message */, "Add_await_to_initializer_for_0_95084", "Add 'await' to initializer for '{0}'"), + Fix_all_expressions_possibly_missing_await: diag(95085, 3 /* Message */, "Fix_all_expressions_possibly_missing_await_95085", "Fix all expressions possibly missing 'await'"), + Remove_unnecessary_await: diag(95086, 3 /* Message */, "Remove_unnecessary_await_95086", "Remove unnecessary 'await'"), + Remove_all_unnecessary_uses_of_await: diag(95087, 3 /* Message */, "Remove_all_unnecessary_uses_of_await_95087", "Remove all unnecessary uses of 'await'"), + Enable_the_jsx_flag_in_your_configuration_file: diag(95088, 3 /* Message */, "Enable_the_jsx_flag_in_your_configuration_file_95088", "Enable the '--jsx' flag in your configuration file"), + Add_await_to_initializers: diag(95089, 3 /* Message */, "Add_await_to_initializers_95089", "Add 'await' to initializers"), + Extract_to_interface: diag(95090, 3 /* Message */, "Extract_to_interface_95090", "Extract to interface"), + Convert_to_a_bigint_numeric_literal: diag(95091, 3 /* Message */, "Convert_to_a_bigint_numeric_literal_95091", "Convert to a bigint numeric literal"), + Convert_all_to_bigint_numeric_literals: diag(95092, 3 /* Message */, "Convert_all_to_bigint_numeric_literals_95092", "Convert all to bigint numeric literals"), + Convert_const_to_let: diag(95093, 3 /* Message */, "Convert_const_to_let_95093", "Convert 'const' to 'let'"), + Prefix_with_declare: diag(95094, 3 /* Message */, "Prefix_with_declare_95094", "Prefix with 'declare'"), + Prefix_all_incorrect_property_declarations_with_declare: diag(95095, 3 /* Message */, "Prefix_all_incorrect_property_declarations_with_declare_95095", "Prefix all incorrect property declarations with 'declare'"), + Convert_to_template_string: diag(95096, 3 /* Message */, "Convert_to_template_string_95096", "Convert to template string"), + Add_export_to_make_this_file_into_a_module: diag(95097, 3 /* Message */, "Add_export_to_make_this_file_into_a_module_95097", "Add 'export {}' to make this file into a module"), + Set_the_target_option_in_your_configuration_file_to_0: diag(95098, 3 /* Message */, "Set_the_target_option_in_your_configuration_file_to_0_95098", "Set the 'target' option in your configuration file to '{0}'"), + Set_the_module_option_in_your_configuration_file_to_0: diag(95099, 3 /* Message */, "Set_the_module_option_in_your_configuration_file_to_0_95099", "Set the 'module' option in your configuration file to '{0}'"), + Convert_invalid_character_to_its_html_entity_code: diag(95100, 3 /* Message */, "Convert_invalid_character_to_its_html_entity_code_95100", "Convert invalid character to its html entity code"), + Convert_all_invalid_characters_to_HTML_entity_code: diag(95101, 3 /* Message */, "Convert_all_invalid_characters_to_HTML_entity_code_95101", "Convert all invalid characters to HTML entity code"), + Convert_all_const_to_let: diag(95102, 3 /* Message */, "Convert_all_const_to_let_95102", "Convert all 'const' to 'let'"), + Convert_function_expression_0_to_arrow_function: diag(95105, 3 /* Message */, "Convert_function_expression_0_to_arrow_function_95105", "Convert function expression '{0}' to arrow function"), + Convert_function_declaration_0_to_arrow_function: diag(95106, 3 /* Message */, "Convert_function_declaration_0_to_arrow_function_95106", "Convert function declaration '{0}' to arrow function"), + Fix_all_implicit_this_errors: diag(95107, 3 /* Message */, "Fix_all_implicit_this_errors_95107", "Fix all implicit-'this' errors"), + Wrap_invalid_character_in_an_expression_container: diag(95108, 3 /* Message */, "Wrap_invalid_character_in_an_expression_container_95108", "Wrap invalid character in an expression container"), + Wrap_all_invalid_characters_in_an_expression_container: diag(95109, 3 /* Message */, "Wrap_all_invalid_characters_in_an_expression_container_95109", "Wrap all invalid characters in an expression container"), + Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file: diag(95110, 3 /* Message */, "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110", "Visit https://aka.ms/tsconfig to read more about this file"), + Add_a_return_statement: diag(95111, 3 /* Message */, "Add_a_return_statement_95111", "Add a return statement"), + Remove_braces_from_arrow_function_body: diag(95112, 3 /* Message */, "Remove_braces_from_arrow_function_body_95112", "Remove braces from arrow function body"), + Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal: diag(95113, 3 /* Message */, "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113", "Wrap the following body with parentheses which should be an object literal"), + Add_all_missing_return_statement: diag(95114, 3 /* Message */, "Add_all_missing_return_statement_95114", "Add all missing return statement"), + Remove_braces_from_all_arrow_function_bodies_with_relevant_issues: diag(95115, 3 /* Message */, "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115", "Remove braces from all arrow function bodies with relevant issues"), + Wrap_all_object_literal_with_parentheses: diag(95116, 3 /* Message */, "Wrap_all_object_literal_with_parentheses_95116", "Wrap all object literal with parentheses"), + Move_labeled_tuple_element_modifiers_to_labels: diag(95117, 3 /* Message */, "Move_labeled_tuple_element_modifiers_to_labels_95117", "Move labeled tuple element modifiers to labels"), + Convert_overload_list_to_single_signature: diag(95118, 3 /* Message */, "Convert_overload_list_to_single_signature_95118", "Convert overload list to single signature"), + Generate_get_and_set_accessors_for_all_overriding_properties: diag(95119, 3 /* Message */, "Generate_get_and_set_accessors_for_all_overriding_properties_95119", "Generate 'get' and 'set' accessors for all overriding properties"), + Wrap_in_JSX_fragment: diag(95120, 3 /* Message */, "Wrap_in_JSX_fragment_95120", "Wrap in JSX fragment"), + Wrap_all_unparented_JSX_in_JSX_fragment: diag(95121, 3 /* Message */, "Wrap_all_unparented_JSX_in_JSX_fragment_95121", "Wrap all unparented JSX in JSX fragment"), + Convert_arrow_function_or_function_expression: diag(95122, 3 /* Message */, "Convert_arrow_function_or_function_expression_95122", "Convert arrow function or function expression"), + Convert_to_anonymous_function: diag(95123, 3 /* Message */, "Convert_to_anonymous_function_95123", "Convert to anonymous function"), + Convert_to_named_function: diag(95124, 3 /* Message */, "Convert_to_named_function_95124", "Convert to named function"), + Convert_to_arrow_function: diag(95125, 3 /* Message */, "Convert_to_arrow_function_95125", "Convert to arrow function"), + Remove_parentheses: diag(95126, 3 /* Message */, "Remove_parentheses_95126", "Remove parentheses"), + Could_not_find_a_containing_arrow_function: diag(95127, 3 /* Message */, "Could_not_find_a_containing_arrow_function_95127", "Could not find a containing arrow function"), + Containing_function_is_not_an_arrow_function: diag(95128, 3 /* Message */, "Containing_function_is_not_an_arrow_function_95128", "Containing function is not an arrow function"), + Could_not_find_export_statement: diag(95129, 3 /* Message */, "Could_not_find_export_statement_95129", "Could not find export statement"), + This_file_already_has_a_default_export: diag(95130, 3 /* Message */, "This_file_already_has_a_default_export_95130", "This file already has a default export"), + Could_not_find_import_clause: diag(95131, 3 /* Message */, "Could_not_find_import_clause_95131", "Could not find import clause"), + Could_not_find_namespace_import_or_named_imports: diag(95132, 3 /* Message */, "Could_not_find_namespace_import_or_named_imports_95132", "Could not find namespace import or named imports"), + Selection_is_not_a_valid_type_node: diag(95133, 3 /* Message */, "Selection_is_not_a_valid_type_node_95133", "Selection is not a valid type node"), + No_type_could_be_extracted_from_this_type_node: diag(95134, 3 /* Message */, "No_type_could_be_extracted_from_this_type_node_95134", "No type could be extracted from this type node"), + Could_not_find_property_for_which_to_generate_accessor: diag(95135, 3 /* Message */, "Could_not_find_property_for_which_to_generate_accessor_95135", "Could not find property for which to generate accessor"), + Name_is_not_valid: diag(95136, 3 /* Message */, "Name_is_not_valid_95136", "Name is not valid"), + Can_only_convert_property_with_modifier: diag(95137, 3 /* Message */, "Can_only_convert_property_with_modifier_95137", "Can only convert property with modifier"), + Switch_each_misused_0_to_1: diag(95138, 3 /* Message */, "Switch_each_misused_0_to_1_95138", "Switch each misused '{0}' to '{1}'"), + Convert_to_optional_chain_expression: diag(95139, 3 /* Message */, "Convert_to_optional_chain_expression_95139", "Convert to optional chain expression"), + Could_not_find_convertible_access_expression: diag(95140, 3 /* Message */, "Could_not_find_convertible_access_expression_95140", "Could not find convertible access expression"), + Could_not_find_matching_access_expressions: diag(95141, 3 /* Message */, "Could_not_find_matching_access_expressions_95141", "Could not find matching access expressions"), + Can_only_convert_logical_AND_access_chains: diag(95142, 3 /* Message */, "Can_only_convert_logical_AND_access_chains_95142", "Can only convert logical AND access chains"), + Add_void_to_Promise_resolved_without_a_value: diag(95143, 3 /* Message */, "Add_void_to_Promise_resolved_without_a_value_95143", "Add 'void' to Promise resolved without a value"), + Add_void_to_all_Promises_resolved_without_a_value: diag(95144, 3 /* Message */, "Add_void_to_all_Promises_resolved_without_a_value_95144", "Add 'void' to all Promises resolved without a value"), + Use_element_access_for_0: diag(95145, 3 /* Message */, "Use_element_access_for_0_95145", "Use element access for '{0}'"), + Use_element_access_for_all_undeclared_properties: diag(95146, 3 /* Message */, "Use_element_access_for_all_undeclared_properties_95146", "Use element access for all undeclared properties."), + Delete_all_unused_imports: diag(95147, 3 /* Message */, "Delete_all_unused_imports_95147", "Delete all unused imports"), + Infer_function_return_type: diag(95148, 3 /* Message */, "Infer_function_return_type_95148", "Infer function return type"), + Return_type_must_be_inferred_from_a_function: diag(95149, 3 /* Message */, "Return_type_must_be_inferred_from_a_function_95149", "Return type must be inferred from a function"), + Could_not_determine_function_return_type: diag(95150, 3 /* Message */, "Could_not_determine_function_return_type_95150", "Could not determine function return type"), + Could_not_convert_to_arrow_function: diag(95151, 3 /* Message */, "Could_not_convert_to_arrow_function_95151", "Could not convert to arrow function"), + Could_not_convert_to_named_function: diag(95152, 3 /* Message */, "Could_not_convert_to_named_function_95152", "Could not convert to named function"), + Could_not_convert_to_anonymous_function: diag(95153, 3 /* Message */, "Could_not_convert_to_anonymous_function_95153", "Could not convert to anonymous function"), + Can_only_convert_string_concatenations_and_string_literals: diag(95154, 3 /* Message */, "Can_only_convert_string_concatenations_and_string_literals_95154", "Can only convert string concatenations and string literals"), + Selection_is_not_a_valid_statement_or_statements: diag(95155, 3 /* Message */, "Selection_is_not_a_valid_statement_or_statements_95155", "Selection is not a valid statement or statements"), + Add_missing_function_declaration_0: diag(95156, 3 /* Message */, "Add_missing_function_declaration_0_95156", "Add missing function declaration '{0}'"), + Add_all_missing_function_declarations: diag(95157, 3 /* Message */, "Add_all_missing_function_declarations_95157", "Add all missing function declarations"), + Method_not_implemented: diag(95158, 3 /* Message */, "Method_not_implemented_95158", "Method not implemented."), + Function_not_implemented: diag(95159, 3 /* Message */, "Function_not_implemented_95159", "Function not implemented."), + Add_override_modifier: diag(95160, 3 /* Message */, "Add_override_modifier_95160", "Add 'override' modifier"), + Remove_override_modifier: diag(95161, 3 /* Message */, "Remove_override_modifier_95161", "Remove 'override' modifier"), + Add_all_missing_override_modifiers: diag(95162, 3 /* Message */, "Add_all_missing_override_modifiers_95162", "Add all missing 'override' modifiers"), + Remove_all_unnecessary_override_modifiers: diag(95163, 3 /* Message */, "Remove_all_unnecessary_override_modifiers_95163", "Remove all unnecessary 'override' modifiers"), + Can_only_convert_named_export: diag(95164, 3 /* Message */, "Can_only_convert_named_export_95164", "Can only convert named export"), + Add_missing_properties: diag(95165, 3 /* Message */, "Add_missing_properties_95165", "Add missing properties"), + Add_all_missing_properties: diag(95166, 3 /* Message */, "Add_all_missing_properties_95166", "Add all missing properties"), + Add_missing_attributes: diag(95167, 3 /* Message */, "Add_missing_attributes_95167", "Add missing attributes"), + Add_all_missing_attributes: diag(95168, 3 /* Message */, "Add_all_missing_attributes_95168", "Add all missing attributes"), + Add_undefined_to_optional_property_type: diag(95169, 3 /* Message */, "Add_undefined_to_optional_property_type_95169", "Add 'undefined' to optional property type"), + Convert_named_imports_to_default_import: diag(95170, 3 /* Message */, "Convert_named_imports_to_default_import_95170", "Convert named imports to default import"), + Delete_unused_param_tag_0: diag(95171, 3 /* Message */, "Delete_unused_param_tag_0_95171", "Delete unused '@param' tag '{0}'"), + Delete_all_unused_param_tags: diag(95172, 3 /* Message */, "Delete_all_unused_param_tags_95172", "Delete all unused '@param' tags"), + Rename_param_tag_name_0_to_1: diag(95173, 3 /* Message */, "Rename_param_tag_name_0_to_1_95173", "Rename '@param' tag name '{0}' to '{1}'"), + Use_0: diag(95174, 3 /* Message */, "Use_0_95174", "Use `{0}`."), + Use_Number_isNaN_in_all_conditions: diag(95175, 3 /* Message */, "Use_Number_isNaN_in_all_conditions_95175", "Use `Number.isNaN` in all conditions."), + Convert_typedef_to_TypeScript_type: diag(95176, 3 /* Message */, "Convert_typedef_to_TypeScript_type_95176", "Convert typedef to TypeScript type."), + Convert_all_typedef_to_TypeScript_types: diag(95177, 3 /* Message */, "Convert_all_typedef_to_TypeScript_types_95177", "Convert all typedef to TypeScript types."), + Move_to_file: diag(95178, 3 /* Message */, "Move_to_file_95178", "Move to file"), + Cannot_move_to_file_selected_file_is_invalid: diag(95179, 3 /* Message */, "Cannot_move_to_file_selected_file_is_invalid_95179", "Cannot move to file, selected file is invalid"), + Use_import_type: diag(95180, 3 /* Message */, "Use_import_type_95180", "Use 'import type'"), + Use_type_0: diag(95181, 3 /* Message */, "Use_type_0_95181", "Use 'type {0}'"), + Fix_all_with_type_only_imports: diag(95182, 3 /* Message */, "Fix_all_with_type_only_imports_95182", "Fix all with type-only imports"), + Cannot_move_statements_to_the_selected_file: diag(95183, 3 /* Message */, "Cannot_move_statements_to_the_selected_file_95183", "Cannot move statements to the selected file"), + Inline_variable: diag(95184, 3 /* Message */, "Inline_variable_95184", "Inline variable"), + Could_not_find_variable_to_inline: diag(95185, 3 /* Message */, "Could_not_find_variable_to_inline_95185", "Could not find variable to inline."), + Variables_with_multiple_declarations_cannot_be_inlined: diag(95186, 3 /* Message */, "Variables_with_multiple_declarations_cannot_be_inlined_95186", "Variables with multiple declarations cannot be inlined."), + Add_missing_comma_for_object_member_completion_0: diag(95187, 3 /* Message */, "Add_missing_comma_for_object_member_completion_0_95187", "Add missing comma for object member completion '{0}'."), + Add_missing_parameter_to_0: diag(95188, 3 /* Message */, "Add_missing_parameter_to_0_95188", "Add missing parameter to '{0}'"), + Add_missing_parameters_to_0: diag(95189, 3 /* Message */, "Add_missing_parameters_to_0_95189", "Add missing parameters to '{0}'"), + Add_all_missing_parameters: diag(95190, 3 /* Message */, "Add_all_missing_parameters_95190", "Add all missing parameters"), + Add_optional_parameter_to_0: diag(95191, 3 /* Message */, "Add_optional_parameter_to_0_95191", "Add optional parameter to '{0}'"), + Add_optional_parameters_to_0: diag(95192, 3 /* Message */, "Add_optional_parameters_to_0_95192", "Add optional parameters to '{0}'"), + Add_all_optional_parameters: diag(95193, 3 /* Message */, "Add_all_optional_parameters_95193", "Add all optional parameters"), + Wrap_in_parentheses: diag(95194, 3 /* Message */, "Wrap_in_parentheses_95194", "Wrap in parentheses"), + Wrap_all_invalid_decorator_expressions_in_parentheses: diag(95195, 3 /* Message */, "Wrap_all_invalid_decorator_expressions_in_parentheses_95195", "Wrap all invalid decorator expressions in parentheses"), + Add_resolution_mode_import_attribute: diag(95196, 3 /* Message */, "Add_resolution_mode_import_attribute_95196", "Add 'resolution-mode' import attribute"), + Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it: diag(95197, 3 /* Message */, "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197", "Add 'resolution-mode' import attribute to all type-only imports that need it"), + No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer: diag(18004, 1 /* Error */, "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004", "No value exists in scope for the shorthand property '{0}'. Either declare one or provide an initializer."), + Classes_may_not_have_a_field_named_constructor: diag(18006, 1 /* Error */, "Classes_may_not_have_a_field_named_constructor_18006", "Classes may not have a field named 'constructor'."), + JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array: diag(18007, 1 /* Error */, "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007", "JSX expressions may not use the comma operator. Did you mean to write an array?"), + Private_identifiers_cannot_be_used_as_parameters: diag(18009, 1 /* Error */, "Private_identifiers_cannot_be_used_as_parameters_18009", "Private identifiers cannot be used as parameters."), + An_accessibility_modifier_cannot_be_used_with_a_private_identifier: diag(18010, 1 /* Error */, "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010", "An accessibility modifier cannot be used with a private identifier."), + The_operand_of_a_delete_operator_cannot_be_a_private_identifier: diag(18011, 1 /* Error */, "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011", "The operand of a 'delete' operator cannot be a private identifier."), + constructor_is_a_reserved_word: diag(18012, 1 /* Error */, "constructor_is_a_reserved_word_18012", "'#constructor' is a reserved word."), + Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier: diag(18013, 1 /* Error */, "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013", "Property '{0}' is not accessible outside class '{1}' because it has a private identifier."), + The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling: diag(18014, 1 /* Error */, "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014", "The property '{0}' cannot be accessed on type '{1}' within this class because it is shadowed by another private identifier with the same spelling."), + Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2: diag(18015, 1 /* Error */, "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015", "Property '{0}' in type '{1}' refers to a different member that cannot be accessed from within type '{2}'."), + Private_identifiers_are_not_allowed_outside_class_bodies: diag(18016, 1 /* Error */, "Private_identifiers_are_not_allowed_outside_class_bodies_18016", "Private identifiers are not allowed outside class bodies."), + The_shadowing_declaration_of_0_is_defined_here: diag(18017, 1 /* Error */, "The_shadowing_declaration_of_0_is_defined_here_18017", "The shadowing declaration of '{0}' is defined here"), + The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here: diag(18018, 1 /* Error */, "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018", "The declaration of '{0}' that you probably intended to use is defined here"), + _0_modifier_cannot_be_used_with_a_private_identifier: diag(18019, 1 /* Error */, "_0_modifier_cannot_be_used_with_a_private_identifier_18019", "'{0}' modifier cannot be used with a private identifier."), + An_enum_member_cannot_be_named_with_a_private_identifier: diag(18024, 1 /* Error */, "An_enum_member_cannot_be_named_with_a_private_identifier_18024", "An enum member cannot be named with a private identifier."), + can_only_be_used_at_the_start_of_a_file: diag(18026, 1 /* Error */, "can_only_be_used_at_the_start_of_a_file_18026", "'#!' can only be used at the start of a file."), + Compiler_reserves_name_0_when_emitting_private_identifier_downlevel: diag(18027, 1 /* Error */, "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027", "Compiler reserves name '{0}' when emitting private identifier downlevel."), + Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher: diag(18028, 1 /* Error */, "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028", "Private identifiers are only available when targeting ECMAScript 2015 and higher."), + Private_identifiers_are_not_allowed_in_variable_declarations: diag(18029, 1 /* Error */, "Private_identifiers_are_not_allowed_in_variable_declarations_18029", "Private identifiers are not allowed in variable declarations."), + An_optional_chain_cannot_contain_private_identifiers: diag(18030, 1 /* Error */, "An_optional_chain_cannot_contain_private_identifiers_18030", "An optional chain cannot contain private identifiers."), + The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents: diag(18031, 1 /* Error */, "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031", "The intersection '{0}' was reduced to 'never' because property '{1}' has conflicting types in some constituents."), + The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some: diag(18032, 1 /* Error */, "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032", "The intersection '{0}' was reduced to 'never' because property '{1}' exists in multiple constituents and is private in some."), + Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values: diag(18033, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033", "Type '{0}' is not assignable to type '{1}' as required for computed enum member values."), + Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compiler_option_is_specified_e_g_Fragment: diag(18034, 3 /* Message */, "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034", "Specify the JSX fragment factory function to use when targeting 'react' JSX emit with 'jsxFactory' compiler option is specified, e.g. 'Fragment'."), + Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name: diag(18035, 1 /* Error */, "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035", "Invalid value for 'jsxFragmentFactory'. '{0}' is not a valid identifier or qualified-name."), + Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator: diag(18036, 1 /* Error */, "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036", "Class decorators can't be used with static private identifier. Consider removing the experimental decorator."), + await_expression_cannot_be_used_inside_a_class_static_block: diag(18037, 1 /* Error */, "await_expression_cannot_be_used_inside_a_class_static_block_18037", "'await' expression cannot be used inside a class static block."), + for_await_loops_cannot_be_used_inside_a_class_static_block: diag(18038, 1 /* Error */, "for_await_loops_cannot_be_used_inside_a_class_static_block_18038", "'for await' loops cannot be used inside a class static block."), + Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block: diag(18039, 1 /* Error */, "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039", "Invalid use of '{0}'. It cannot be used inside a class static block."), + A_return_statement_cannot_be_used_inside_a_class_static_block: diag(18041, 1 /* Error */, "A_return_statement_cannot_be_used_inside_a_class_static_block_18041", "A 'return' statement cannot be used inside a class static block."), + _0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation: diag(18042, 1 /* Error */, "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042", "'{0}' is a type and cannot be imported in JavaScript files. Use '{1}' in a JSDoc type annotation."), + Types_cannot_appear_in_export_declarations_in_JavaScript_files: diag(18043, 1 /* Error */, "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043", "Types cannot appear in export declarations in JavaScript files."), + _0_is_automatically_exported_here: diag(18044, 3 /* Message */, "_0_is_automatically_exported_here_18044", "'{0}' is automatically exported here."), + Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher: diag(18045, 1 /* Error */, "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045", "Properties with the 'accessor' modifier are only available when targeting ECMAScript 2015 and higher."), + _0_is_of_type_unknown: diag(18046, 1 /* Error */, "_0_is_of_type_unknown_18046", "'{0}' is of type 'unknown'."), + _0_is_possibly_null: diag(18047, 1 /* Error */, "_0_is_possibly_null_18047", "'{0}' is possibly 'null'."), + _0_is_possibly_undefined: diag(18048, 1 /* Error */, "_0_is_possibly_undefined_18048", "'{0}' is possibly 'undefined'."), + _0_is_possibly_null_or_undefined: diag(18049, 1 /* Error */, "_0_is_possibly_null_or_undefined_18049", "'{0}' is possibly 'null' or 'undefined'."), + The_value_0_cannot_be_used_here: diag(18050, 1 /* Error */, "The_value_0_cannot_be_used_here_18050", "The value '{0}' cannot be used here."), + Compiler_option_0_cannot_be_given_an_empty_string: diag(18051, 1 /* Error */, "Compiler_option_0_cannot_be_given_an_empty_string_18051", "Compiler option '{0}' cannot be given an empty string."), + Its_type_0_is_not_a_valid_JSX_element_type: diag(18053, 1 /* Error */, "Its_type_0_is_not_a_valid_JSX_element_type_18053", "Its type '{0}' is not a valid JSX element type."), + await_using_statements_cannot_be_used_inside_a_class_static_block: diag(18054, 1 /* Error */, "await_using_statements_cannot_be_used_inside_a_class_static_block_18054", "'await using' statements cannot be used inside a class static block."), + _0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is_enabled: diag(18055, 1 /* Error */, "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055", "'{0}' has a string type, but must have syntactically recognizable string syntax when 'isolatedModules' is enabled."), + Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled: diag(18056, 1 /* Error */, "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056", "Enum member following a non-literal numeric member must have an initializer when 'isolatedModules' is enabled."), + String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020: diag(18057, 1 /* Error */, "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057", "String literal import and export names are not supported when the '--module' flag is set to 'es2015' or 'es2020'."), + Default_imports_are_not_allowed_in_a_deferred_import: diag(18058, 1 /* Error */, "Default_imports_are_not_allowed_in_a_deferred_import_18058", "Default imports are not allowed in a deferred import."), + Named_imports_are_not_allowed_in_a_deferred_import: diag(18059, 1 /* Error */, "Named_imports_are_not_allowed_in_a_deferred_import_18059", "Named imports are not allowed in a deferred import."), + Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve: diag(18060, 1 /* Error */, "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060", "Deferred imports are only supported when the '--module' flag is set to 'esnext' or 'preserve'."), + _0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer: diag(18061, 1 /* Error */, "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer_18061", "'{0}' is not a valid meta-property for keyword 'import'. Did you mean 'meta' or 'defer'?") +}; + +// src/compiler/scanner.ts +function tokenIsIdentifierOrKeyword(token) { + return token >= 80 /* Identifier */; +} +function tokenIsIdentifierOrKeywordOrGreaterThan(token) { + return token === 32 /* GreaterThanToken */ || tokenIsIdentifierOrKeyword(token); +} +var textToKeywordObj = { + abstract: 128 /* AbstractKeyword */, + accessor: 129 /* AccessorKeyword */, + any: 133 /* AnyKeyword */, + as: 130 /* AsKeyword */, + asserts: 131 /* AssertsKeyword */, + assert: 132 /* AssertKeyword */, + bigint: 163 /* BigIntKeyword */, + boolean: 136 /* BooleanKeyword */, + break: 83 /* BreakKeyword */, + case: 84 /* CaseKeyword */, + catch: 85 /* CatchKeyword */, + class: 86 /* ClassKeyword */, + continue: 88 /* ContinueKeyword */, + const: 87 /* ConstKeyword */, + ["constructor"]: 137 /* ConstructorKeyword */, + debugger: 89 /* DebuggerKeyword */, + declare: 138 /* DeclareKeyword */, + default: 90 /* DefaultKeyword */, + defer: 166 /* DeferKeyword */, + delete: 91 /* DeleteKeyword */, + do: 92 /* DoKeyword */, + else: 93 /* ElseKeyword */, + enum: 94 /* EnumKeyword */, + export: 95 /* ExportKeyword */, + extends: 96 /* ExtendsKeyword */, + false: 97 /* FalseKeyword */, + finally: 98 /* FinallyKeyword */, + for: 99 /* ForKeyword */, + from: 161 /* FromKeyword */, + function: 100 /* FunctionKeyword */, + get: 139 /* GetKeyword */, + if: 101 /* IfKeyword */, + implements: 119 /* ImplementsKeyword */, + import: 102 /* ImportKeyword */, + in: 103 /* InKeyword */, + infer: 140 /* InferKeyword */, + instanceof: 104 /* InstanceOfKeyword */, + interface: 120 /* InterfaceKeyword */, + intrinsic: 141 /* IntrinsicKeyword */, + is: 142 /* IsKeyword */, + keyof: 143 /* KeyOfKeyword */, + let: 121 /* LetKeyword */, + module: 144 /* ModuleKeyword */, + namespace: 145 /* NamespaceKeyword */, + never: 146 /* NeverKeyword */, + new: 105 /* NewKeyword */, + null: 106 /* NullKeyword */, + number: 150 /* NumberKeyword */, + object: 151 /* ObjectKeyword */, + package: 122 /* PackageKeyword */, + private: 123 /* PrivateKeyword */, + protected: 124 /* ProtectedKeyword */, + public: 125 /* PublicKeyword */, + override: 164 /* OverrideKeyword */, + out: 147 /* OutKeyword */, + readonly: 148 /* ReadonlyKeyword */, + require: 149 /* RequireKeyword */, + global: 162 /* GlobalKeyword */, + return: 107 /* ReturnKeyword */, + satisfies: 152 /* SatisfiesKeyword */, + set: 153 /* SetKeyword */, + static: 126 /* StaticKeyword */, + string: 154 /* StringKeyword */, + super: 108 /* SuperKeyword */, + switch: 109 /* SwitchKeyword */, + symbol: 155 /* SymbolKeyword */, + this: 110 /* ThisKeyword */, + throw: 111 /* ThrowKeyword */, + true: 112 /* TrueKeyword */, + try: 113 /* TryKeyword */, + type: 156 /* TypeKeyword */, + typeof: 114 /* TypeOfKeyword */, + undefined: 157 /* UndefinedKeyword */, + unique: 158 /* UniqueKeyword */, + unknown: 159 /* UnknownKeyword */, + using: 160 /* UsingKeyword */, + var: 115 /* VarKeyword */, + void: 116 /* VoidKeyword */, + while: 117 /* WhileKeyword */, + with: 118 /* WithKeyword */, + yield: 127 /* YieldKeyword */, + async: 134 /* AsyncKeyword */, + await: 135 /* AwaitKeyword */, + of: 165 /* OfKeyword */ +}; +var textToKeyword = new Map(Object.entries(textToKeywordObj)); +var textToToken = new Map(Object.entries({ + ...textToKeywordObj, + "{": 19 /* OpenBraceToken */, + "}": 20 /* CloseBraceToken */, + "(": 21 /* OpenParenToken */, + ")": 22 /* CloseParenToken */, + "[": 23 /* OpenBracketToken */, + "]": 24 /* CloseBracketToken */, + ".": 25 /* DotToken */, + "...": 26 /* DotDotDotToken */, + ";": 27 /* SemicolonToken */, + ",": 28 /* CommaToken */, + "<": 30 /* LessThanToken */, + ">": 32 /* GreaterThanToken */, + "<=": 33 /* LessThanEqualsToken */, + ">=": 34 /* GreaterThanEqualsToken */, + "==": 35 /* EqualsEqualsToken */, + "!=": 36 /* ExclamationEqualsToken */, + "===": 37 /* EqualsEqualsEqualsToken */, + "!==": 38 /* ExclamationEqualsEqualsToken */, + "=>": 39 /* EqualsGreaterThanToken */, + "+": 40 /* PlusToken */, + "-": 41 /* MinusToken */, + "**": 43 /* AsteriskAsteriskToken */, + "*": 42 /* AsteriskToken */, + "/": 44 /* SlashToken */, + "%": 45 /* PercentToken */, + "++": 46 /* PlusPlusToken */, + "--": 47 /* MinusMinusToken */, + "<<": 48 /* LessThanLessThanToken */, + ">": 49 /* GreaterThanGreaterThanToken */, + ">>>": 50 /* GreaterThanGreaterThanGreaterThanToken */, + "&": 51 /* AmpersandToken */, + "|": 52 /* BarToken */, + "^": 53 /* CaretToken */, + "!": 54 /* ExclamationToken */, + "~": 55 /* TildeToken */, + "&&": 56 /* AmpersandAmpersandToken */, + "||": 57 /* BarBarToken */, + "?": 58 /* QuestionToken */, + "??": 61 /* QuestionQuestionToken */, + "?.": 29 /* QuestionDotToken */, + ":": 59 /* ColonToken */, + "=": 64 /* EqualsToken */, + "+=": 65 /* PlusEqualsToken */, + "-=": 66 /* MinusEqualsToken */, + "*=": 67 /* AsteriskEqualsToken */, + "**=": 68 /* AsteriskAsteriskEqualsToken */, + "/=": 69 /* SlashEqualsToken */, + "%=": 70 /* PercentEqualsToken */, + "<<=": 71 /* LessThanLessThanEqualsToken */, + ">>=": 72 /* GreaterThanGreaterThanEqualsToken */, + ">>>=": 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */, + "&=": 74 /* AmpersandEqualsToken */, + "|=": 75 /* BarEqualsToken */, + "^=": 79 /* CaretEqualsToken */, + "||=": 76 /* BarBarEqualsToken */, + "&&=": 77 /* AmpersandAmpersandEqualsToken */, + "??=": 78 /* QuestionQuestionEqualsToken */, + "@": 60 /* AtToken */, + "#": 63 /* HashToken */, + "`": 62 /* BacktickToken */ +})); +var charCodeToRegExpFlag = /* @__PURE__ */ new Map([ + [100 /* d */, 1 /* HasIndices */], + [103 /* g */, 2 /* Global */], + [105 /* i */, 4 /* IgnoreCase */], + [109 /* m */, 8 /* Multiline */], + [115 /* s */, 16 /* DotAll */], + [117 /* u */, 32 /* Unicode */], + [118 /* v */, 64 /* UnicodeSets */], + [121 /* y */, 128 /* Sticky */] +]); +var regExpFlagToFirstAvailableLanguageVersion = /* @__PURE__ */ new Map([ + [1 /* HasIndices */, LanguageFeatureMinimumTarget.RegularExpressionFlagsHasIndices], + [16 /* DotAll */, LanguageFeatureMinimumTarget.RegularExpressionFlagsDotAll], + [32 /* Unicode */, LanguageFeatureMinimumTarget.RegularExpressionFlagsUnicode], + [64 /* UnicodeSets */, LanguageFeatureMinimumTarget.RegularExpressionFlagsUnicodeSets], + [128 /* Sticky */, LanguageFeatureMinimumTarget.RegularExpressionFlagsSticky] +]); +var unicodeES5IdentifierStart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6e3, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43e3, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; +var unicodeES5IdentifierPart = [170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112, 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423, 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424, 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6e3, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272, 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783, 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43e3, 43047, 43072, 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500]; +var unicodeESNextIdentifierStart = [65, 90, 97, 122, 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 895, 895, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1488, 1514, 1519, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2144, 2154, 2160, 2183, 2185, 2190, 2208, 2249, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2432, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529, 2544, 2545, 2556, 2556, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784, 2785, 2809, 2809, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3133, 3133, 3160, 3162, 3165, 3165, 3168, 3169, 3200, 3200, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3293, 3294, 3296, 3297, 3313, 3314, 3332, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3412, 3414, 3423, 3425, 3450, 3455, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5905, 5919, 5937, 5952, 5969, 5984, 5996, 5998, 6e3, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6264, 6272, 6312, 6314, 6314, 6320, 6389, 6400, 6430, 6480, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963, 6981, 6988, 7043, 7072, 7086, 7087, 7098, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7401, 7404, 7406, 7411, 7413, 7414, 7418, 7418, 7424, 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11492, 11499, 11502, 11506, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 12293, 12295, 12321, 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12443, 12447, 12449, 12538, 12540, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42653, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259, 43261, 43262, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43488, 43492, 43494, 43503, 43514, 43518, 43520, 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43646, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739, 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44002, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66335, 66349, 66378, 66384, 66421, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68149, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68324, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68899, 69248, 69289, 69296, 69297, 69376, 69404, 69415, 69415, 69424, 69445, 69488, 69505, 69552, 69572, 69600, 69622, 69635, 69687, 69745, 69746, 69749, 69749, 69763, 69807, 69840, 69864, 69891, 69926, 69956, 69956, 69959, 69959, 69968, 70002, 70006, 70006, 70019, 70066, 70081, 70084, 70106, 70106, 70108, 70108, 70144, 70161, 70163, 70187, 70207, 70208, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70366, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70461, 70461, 70480, 70480, 70493, 70497, 70656, 70708, 70727, 70730, 70751, 70753, 70784, 70831, 70852, 70853, 70855, 70855, 71040, 71086, 71128, 71131, 71168, 71215, 71236, 71236, 71296, 71338, 71352, 71352, 71424, 71450, 71488, 71494, 71680, 71723, 71840, 71903, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71983, 71999, 71999, 72001, 72001, 72096, 72103, 72106, 72144, 72161, 72161, 72163, 72163, 72192, 72192, 72203, 72242, 72250, 72250, 72272, 72272, 72284, 72329, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72750, 72768, 72768, 72818, 72847, 72960, 72966, 72968, 72969, 72971, 73008, 73030, 73030, 73056, 73061, 73063, 73064, 73066, 73097, 73112, 73112, 73440, 73458, 73474, 73474, 73476, 73488, 73490, 73523, 73648, 73648, 73728, 74649, 74752, 74862, 74880, 75075, 77712, 77808, 77824, 78895, 78913, 78918, 82944, 83526, 92160, 92728, 92736, 92766, 92784, 92862, 92880, 92909, 92928, 92975, 92992, 92995, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94032, 94032, 94099, 94111, 94176, 94177, 94179, 94179, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 122624, 122654, 122661, 122666, 122928, 122989, 123136, 123180, 123191, 123197, 123214, 123214, 123536, 123565, 123584, 123627, 124112, 124139, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125184, 125251, 125259, 125259, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 191472, 192093, 194560, 195101, 196608, 201546, 201552, 205743]; +var unicodeESNextIdentifierPart = [48, 57, 65, 90, 95, 95, 97, 122, 170, 170, 181, 181, 183, 183, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 895, 895, 902, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1155, 1159, 1162, 1327, 1329, 1366, 1369, 1369, 1376, 1416, 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1519, 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788, 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2045, 2045, 2048, 2093, 2112, 2139, 2144, 2154, 2160, 2183, 2185, 2190, 2200, 2273, 2275, 2403, 2406, 2415, 2417, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525, 2527, 2531, 2534, 2545, 2556, 2556, 2558, 2558, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632, 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757, 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2809, 2815, 2817, 2819, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884, 2887, 2888, 2891, 2893, 2901, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929, 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018, 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3072, 3084, 3086, 3088, 3090, 3112, 3114, 3129, 3132, 3140, 3142, 3144, 3146, 3149, 3157, 3158, 3160, 3162, 3165, 3165, 3168, 3171, 3174, 3183, 3200, 3203, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285, 3286, 3293, 3294, 3296, 3299, 3302, 3311, 3313, 3315, 3328, 3340, 3342, 3344, 3346, 3396, 3398, 3400, 3402, 3406, 3412, 3415, 3423, 3427, 3430, 3439, 3450, 3455, 3457, 3459, 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3558, 3567, 3570, 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3718, 3722, 3724, 3747, 3749, 3749, 3751, 3773, 3776, 3780, 3782, 3782, 3784, 3790, 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895, 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028, 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4969, 4977, 4992, 5007, 5024, 5109, 5112, 5117, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5880, 5888, 5909, 5919, 5940, 5952, 5971, 5984, 5996, 5998, 6e3, 6002, 6003, 6016, 6099, 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6159, 6169, 6176, 6264, 6272, 6314, 6320, 6389, 6400, 6430, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516, 6528, 6571, 6576, 6601, 6608, 6618, 6656, 6683, 6688, 6750, 6752, 6780, 6783, 6793, 6800, 6809, 6823, 6823, 6832, 6845, 6847, 6862, 6912, 6988, 6992, 7001, 7019, 7027, 7040, 7155, 7168, 7223, 7232, 7241, 7245, 7293, 7296, 7304, 7312, 7354, 7357, 7359, 7376, 7378, 7380, 7418, 7424, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205, 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417, 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8472, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11492, 11499, 11507, 11520, 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11744, 11775, 12293, 12295, 12321, 12335, 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12447, 12449, 12543, 12549, 12591, 12593, 12686, 12704, 12735, 12784, 12799, 13312, 19903, 19968, 42124, 42192, 42237, 42240, 42508, 42512, 42539, 42560, 42607, 42612, 42621, 42623, 42737, 42775, 42783, 42786, 42888, 42891, 42954, 42960, 42961, 42963, 42963, 42965, 42969, 42994, 43047, 43052, 43052, 43072, 43123, 43136, 43205, 43216, 43225, 43232, 43255, 43259, 43259, 43261, 43309, 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43488, 43518, 43520, 43574, 43584, 43597, 43600, 43609, 43616, 43638, 43642, 43714, 43739, 43741, 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43824, 43866, 43868, 43881, 43888, 44010, 44012, 44013, 44016, 44025, 44032, 55203, 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019, 65024, 65039, 65056, 65071, 65075, 65076, 65101, 65103, 65136, 65140, 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65381, 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613, 65616, 65629, 65664, 65786, 65856, 65908, 66045, 66045, 66176, 66204, 66208, 66256, 66272, 66272, 66304, 66335, 66349, 66378, 66384, 66426, 66432, 66461, 66464, 66499, 66504, 66511, 66513, 66517, 66560, 66717, 66720, 66729, 66736, 66771, 66776, 66811, 66816, 66855, 66864, 66915, 66928, 66938, 66940, 66954, 66956, 66962, 66964, 66965, 66967, 66977, 66979, 66993, 66995, 67001, 67003, 67004, 67072, 67382, 67392, 67413, 67424, 67431, 67456, 67461, 67463, 67504, 67506, 67514, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644, 67647, 67669, 67680, 67702, 67712, 67742, 67808, 67826, 67828, 67829, 67840, 67861, 67872, 67897, 67968, 68023, 68030, 68031, 68096, 68099, 68101, 68102, 68108, 68115, 68117, 68119, 68121, 68149, 68152, 68154, 68159, 68159, 68192, 68220, 68224, 68252, 68288, 68295, 68297, 68326, 68352, 68405, 68416, 68437, 68448, 68466, 68480, 68497, 68608, 68680, 68736, 68786, 68800, 68850, 68864, 68903, 68912, 68921, 69248, 69289, 69291, 69292, 69296, 69297, 69373, 69404, 69415, 69415, 69424, 69456, 69488, 69509, 69552, 69572, 69600, 69622, 69632, 69702, 69734, 69749, 69759, 69818, 69826, 69826, 69840, 69864, 69872, 69881, 69888, 69940, 69942, 69951, 69956, 69959, 69968, 70003, 70006, 70006, 70016, 70084, 70089, 70092, 70094, 70106, 70108, 70108, 70144, 70161, 70163, 70199, 70206, 70209, 70272, 70278, 70280, 70280, 70282, 70285, 70287, 70301, 70303, 70312, 70320, 70378, 70384, 70393, 70400, 70403, 70405, 70412, 70415, 70416, 70419, 70440, 70442, 70448, 70450, 70451, 70453, 70457, 70459, 70468, 70471, 70472, 70475, 70477, 70480, 70480, 70487, 70487, 70493, 70499, 70502, 70508, 70512, 70516, 70656, 70730, 70736, 70745, 70750, 70753, 70784, 70853, 70855, 70855, 70864, 70873, 71040, 71093, 71096, 71104, 71128, 71133, 71168, 71232, 71236, 71236, 71248, 71257, 71296, 71352, 71360, 71369, 71424, 71450, 71453, 71467, 71472, 71481, 71488, 71494, 71680, 71738, 71840, 71913, 71935, 71942, 71945, 71945, 71948, 71955, 71957, 71958, 71960, 71989, 71991, 71992, 71995, 72003, 72016, 72025, 72096, 72103, 72106, 72151, 72154, 72161, 72163, 72164, 72192, 72254, 72263, 72263, 72272, 72345, 72349, 72349, 72368, 72440, 72704, 72712, 72714, 72758, 72760, 72768, 72784, 72793, 72818, 72847, 72850, 72871, 72873, 72886, 72960, 72966, 72968, 72969, 72971, 73014, 73018, 73018, 73020, 73021, 73023, 73031, 73040, 73049, 73056, 73061, 73063, 73064, 73066, 73102, 73104, 73105, 73107, 73112, 73120, 73129, 73440, 73462, 73472, 73488, 73490, 73530, 73534, 73538, 73552, 73561, 73648, 73648, 73728, 74649, 74752, 74862, 74880, 75075, 77712, 77808, 77824, 78895, 78912, 78933, 82944, 83526, 92160, 92728, 92736, 92766, 92768, 92777, 92784, 92862, 92864, 92873, 92880, 92909, 92912, 92916, 92928, 92982, 92992, 92995, 93008, 93017, 93027, 93047, 93053, 93071, 93760, 93823, 93952, 94026, 94031, 94087, 94095, 94111, 94176, 94177, 94179, 94180, 94192, 94193, 94208, 100343, 100352, 101589, 101632, 101640, 110576, 110579, 110581, 110587, 110589, 110590, 110592, 110882, 110898, 110898, 110928, 110930, 110933, 110933, 110948, 110951, 110960, 111355, 113664, 113770, 113776, 113788, 113792, 113800, 113808, 113817, 113821, 113822, 118528, 118573, 118576, 118598, 119141, 119145, 119149, 119154, 119163, 119170, 119173, 119179, 119210, 119213, 119362, 119364, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977, 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086, 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488, 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688, 120712, 120714, 120744, 120746, 120770, 120772, 120779, 120782, 120831, 121344, 121398, 121403, 121452, 121461, 121461, 121476, 121476, 121499, 121503, 121505, 121519, 122624, 122654, 122661, 122666, 122880, 122886, 122888, 122904, 122907, 122913, 122915, 122916, 122918, 122922, 122928, 122989, 123023, 123023, 123136, 123180, 123184, 123197, 123200, 123209, 123214, 123214, 123536, 123566, 123584, 123641, 124112, 124153, 124896, 124902, 124904, 124907, 124909, 124910, 124912, 124926, 124928, 125124, 125136, 125142, 125184, 125259, 125264, 125273, 126464, 126467, 126469, 126495, 126497, 126498, 126500, 126500, 126503, 126503, 126505, 126514, 126516, 126519, 126521, 126521, 126523, 126523, 126530, 126530, 126535, 126535, 126537, 126537, 126539, 126539, 126541, 126543, 126545, 126546, 126548, 126548, 126551, 126551, 126553, 126553, 126555, 126555, 126557, 126557, 126559, 126559, 126561, 126562, 126564, 126564, 126567, 126570, 126572, 126578, 126580, 126583, 126585, 126588, 126590, 126590, 126592, 126601, 126603, 126619, 126625, 126627, 126629, 126633, 126635, 126651, 130032, 130041, 131072, 173791, 173824, 177977, 177984, 178205, 178208, 183969, 183984, 191456, 191472, 192093, 194560, 195101, 196608, 201546, 201552, 205743, 917760, 917999]; +var commentDirectiveRegExSingleLine = /^\/\/\/?\s*@(ts-expect-error|ts-ignore)/; +var commentDirectiveRegExMultiLine = /^(?:\/|\*)*\s*@(ts-expect-error|ts-ignore)/; +var jsDocSeeOrLink = /@(?:see|link)/i; +function lookupInUnicodeMap(code, map2) { + if (code < map2[0]) { + return false; + } + let lo = 0; + let hi = map2.length; + let mid; + while (lo + 1 < hi) { + mid = lo + (hi - lo) / 2; + mid -= mid % 2; + if (map2[mid] <= code && code <= map2[mid + 1]) { + return true; + } + if (code < map2[mid]) { + hi = mid; + } else { + lo = mid + 2; + } + } + return false; +} +function isUnicodeIdentifierStart(code, languageVersion) { + return languageVersion >= 2 /* ES2015 */ ? lookupInUnicodeMap(code, unicodeESNextIdentifierStart) : lookupInUnicodeMap(code, unicodeES5IdentifierStart); +} +function isUnicodeIdentifierPart(code, languageVersion) { + return languageVersion >= 2 /* ES2015 */ ? lookupInUnicodeMap(code, unicodeESNextIdentifierPart) : lookupInUnicodeMap(code, unicodeES5IdentifierPart); +} +function makeReverseMap(source) { + const result = []; + source.forEach((value, name) => { + result[value] = name; + }); + return result; +} +var tokenStrings = makeReverseMap(textToToken); +function tokenToString(t) { + return tokenStrings[t]; +} +function stringToToken(s) { + return textToToken.get(s); +} +var regExpFlagCharCodes = makeReverseMap(charCodeToRegExpFlag); +function regularExpressionFlagToCharacterCode(f) { + return regExpFlagCharCodes[f]; +} +function characterCodeToRegularExpressionFlag(ch) { + return charCodeToRegExpFlag.get(ch); +} +function computeLineStarts(text) { + const result = []; + let pos = 0; + let lineStart = 0; + while (pos < text.length) { + const ch = text.charCodeAt(pos); + pos++; + switch (ch) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos) === 10 /* lineFeed */) { + pos++; + } + // falls through + case 10 /* lineFeed */: + result.push(lineStart); + lineStart = pos; + break; + default: + if (ch > 127 /* maxAsciiCharacter */ && isLineBreak(ch)) { + result.push(lineStart); + lineStart = pos; + } + break; + } + } + result.push(lineStart); + return result; +} +function getPositionOfLineAndCharacter(sourceFile, line, character, allowEdits) { + return sourceFile.getPositionOfLineAndCharacter ? sourceFile.getPositionOfLineAndCharacter(line, character, allowEdits) : computePositionOfLineAndCharacter(getLineStarts(sourceFile), line, character, sourceFile.text, allowEdits); +} +function computePositionOfLineAndCharacter(lineStarts, line, character, debugText, allowEdits) { + if (line < 0 || line >= lineStarts.length) { + if (allowEdits) { + line = line < 0 ? 0 : line >= lineStarts.length ? lineStarts.length - 1 : line; + } else { + Debug.fail(`Bad line number. Line: ${line}, lineStarts.length: ${lineStarts.length} , line map is correct? ${debugText !== void 0 ? arrayIsEqualTo(lineStarts, computeLineStarts(debugText)) : "unknown"}`); + } + } + const res = lineStarts[line] + character; + if (allowEdits) { + return res > lineStarts[line + 1] ? lineStarts[line + 1] : typeof debugText === "string" && res > debugText.length ? debugText.length : res; + } + if (line < lineStarts.length - 1) { + Debug.assert(res < lineStarts[line + 1]); + } else if (debugText !== void 0) { + Debug.assert(res <= debugText.length); + } + return res; +} +function getLineStarts(sourceFile) { + return sourceFile.lineMap || (sourceFile.lineMap = computeLineStarts(sourceFile.text)); +} +function computeLineAndCharacterOfPosition(lineStarts, position) { + const lineNumber = computeLineOfPosition(lineStarts, position); + return { + line: lineNumber, + character: position - lineStarts[lineNumber] + }; +} +function computeLineOfPosition(lineStarts, position, lowerBound) { + let lineNumber = binarySearch(lineStarts, position, identity, compareValues, lowerBound); + if (lineNumber < 0) { + lineNumber = ~lineNumber - 1; + Debug.assert(lineNumber !== -1, "position cannot precede the beginning of the file"); + } + return lineNumber; +} +function getLinesBetweenPositions(sourceFile, pos1, pos2) { + if (pos1 === pos2) return 0; + const lineStarts = getLineStarts(sourceFile); + const lower = Math.min(pos1, pos2); + const isNegative = lower === pos2; + const upper = isNegative ? pos1 : pos2; + const lowerLine = computeLineOfPosition(lineStarts, lower); + const upperLine = computeLineOfPosition(lineStarts, upper, lowerLine); + return isNegative ? lowerLine - upperLine : upperLine - lowerLine; +} +function getLineAndCharacterOfPosition(sourceFile, position) { + return computeLineAndCharacterOfPosition(getLineStarts(sourceFile), position); +} +function isWhiteSpaceLike(ch) { + return isWhiteSpaceSingleLine(ch) || isLineBreak(ch); +} +function isWhiteSpaceSingleLine(ch) { + return ch === 32 /* space */ || ch === 9 /* tab */ || ch === 11 /* verticalTab */ || ch === 12 /* formFeed */ || ch === 160 /* nonBreakingSpace */ || ch === 133 /* nextLine */ || ch === 5760 /* ogham */ || ch >= 8192 /* enQuad */ && ch <= 8203 /* zeroWidthSpace */ || ch === 8239 /* narrowNoBreakSpace */ || ch === 8287 /* mathematicalSpace */ || ch === 12288 /* ideographicSpace */ || ch === 65279 /* byteOrderMark */; +} +function isLineBreak(ch) { + return ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */ || ch === 8232 /* lineSeparator */ || ch === 8233 /* paragraphSeparator */; +} +function isDigit(ch) { + return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; +} +function isHexDigit(ch) { + return isDigit(ch) || ch >= 65 /* A */ && ch <= 70 /* F */ || ch >= 97 /* a */ && ch <= 102 /* f */; +} +function isASCIILetter(ch) { + return ch >= 65 /* A */ && ch <= 90 /* Z */ || ch >= 97 /* a */ && ch <= 122 /* z */; +} +function isWordCharacter(ch) { + return isASCIILetter(ch) || isDigit(ch) || ch === 95 /* _ */; +} +function isOctalDigit(ch) { + return ch >= 48 /* _0 */ && ch <= 55 /* _7 */; +} +function couldStartTrivia(text, pos) { + const ch = text.charCodeAt(pos); + switch (ch) { + case 13 /* carriageReturn */: + case 10 /* lineFeed */: + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + case 47 /* slash */: + // starts of normal trivia + // falls through + case 60 /* lessThan */: + case 124 /* bar */: + case 61 /* equals */: + case 62 /* greaterThan */: + return true; + case 35 /* hash */: + return pos === 0; + default: + return ch > 127 /* maxAsciiCharacter */; + } +} +function skipTrivia(text, pos, stopAfterLineBreak, stopAtComments, inJSDoc) { + if (positionIsSynthesized(pos)) { + return pos; + } + let canConsumeStar = false; + while (true) { + const ch = text.charCodeAt(pos); + switch (ch) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) { + pos++; + } + // falls through + case 10 /* lineFeed */: + pos++; + if (stopAfterLineBreak) { + return pos; + } + canConsumeStar = !!inJSDoc; + continue; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 47 /* slash */: + if (stopAtComments) { + break; + } + if (text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + break; + } + pos++; + } + canConsumeStar = false; + continue; + } + if (text.charCodeAt(pos + 1) === 42 /* asterisk */) { + pos += 2; + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + break; + } + pos++; + } + canConsumeStar = false; + continue; + } + break; + case 60 /* lessThan */: + case 124 /* bar */: + case 61 /* equals */: + case 62 /* greaterThan */: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos); + canConsumeStar = false; + continue; + } + break; + case 35 /* hash */: + if (pos === 0 && isShebangTrivia(text, pos)) { + pos = scanShebangTrivia(text, pos); + canConsumeStar = false; + continue; + } + break; + case 42 /* asterisk */: + if (canConsumeStar) { + pos++; + canConsumeStar = false; + continue; + } + break; + default: + if (ch > 127 /* maxAsciiCharacter */ && isWhiteSpaceLike(ch)) { + pos++; + continue; + } + break; + } + return pos; + } +} +var mergeConflictMarkerLength = "<<<<<<<".length; +function isConflictMarkerTrivia(text, pos) { + Debug.assert(pos >= 0); + if (pos === 0 || isLineBreak(text.charCodeAt(pos - 1))) { + const ch = text.charCodeAt(pos); + if (pos + mergeConflictMarkerLength < text.length) { + for (let i = 0; i < mergeConflictMarkerLength; i++) { + if (text.charCodeAt(pos + i) !== ch) { + return false; + } + } + return ch === 61 /* equals */ || text.charCodeAt(pos + mergeConflictMarkerLength) === 32 /* space */; + } + } + return false; +} +function scanConflictMarkerTrivia(text, pos, error2) { + if (error2) { + error2(Diagnostics.Merge_conflict_marker_encountered, pos, mergeConflictMarkerLength); + } + const ch = text.charCodeAt(pos); + const len = text.length; + if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) { + while (pos < len && !isLineBreak(text.charCodeAt(pos))) { + pos++; + } + } else { + Debug.assert(ch === 124 /* bar */ || ch === 61 /* equals */); + while (pos < len) { + const currentChar = text.charCodeAt(pos); + if ((currentChar === 61 /* equals */ || currentChar === 62 /* greaterThan */) && currentChar !== ch && isConflictMarkerTrivia(text, pos)) { + break; + } + pos++; + } + } + return pos; +} +var shebangTriviaRegex = /^#!.*/; +function isShebangTrivia(text, pos) { + Debug.assert(pos === 0); + return shebangTriviaRegex.test(text); +} +function scanShebangTrivia(text, pos) { + const shebang = shebangTriviaRegex.exec(text)[0]; + pos = pos + shebang.length; + return pos; +} +function iterateCommentRanges(reduce, text, pos, trailing, cb, state, initial) { + let pendingPos; + let pendingEnd; + let pendingKind; + let pendingHasTrailingNewLine; + let hasPendingCommentRange = false; + let collecting = trailing; + let accumulator = initial; + if (pos === 0) { + collecting = true; + const shebang = getShebang(text); + if (shebang) { + pos = shebang.length; + } + } + scan: + while (pos >= 0 && pos < text.length) { + const ch = text.charCodeAt(pos); + switch (ch) { + case 13 /* carriageReturn */: + if (text.charCodeAt(pos + 1) === 10 /* lineFeed */) { + pos++; + } + // falls through + case 10 /* lineFeed */: + pos++; + if (trailing) { + break scan; + } + collecting = true; + if (hasPendingCommentRange) { + pendingHasTrailingNewLine = true; + } + continue; + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + pos++; + continue; + case 47 /* slash */: + const nextChar = text.charCodeAt(pos + 1); + let hasTrailingNewLine = false; + if (nextChar === 47 /* slash */ || nextChar === 42 /* asterisk */) { + const kind = nextChar === 47 /* slash */ ? 2 /* SingleLineCommentTrivia */ : 3 /* MultiLineCommentTrivia */; + const startPos = pos; + pos += 2; + if (nextChar === 47 /* slash */) { + while (pos < text.length) { + if (isLineBreak(text.charCodeAt(pos))) { + hasTrailingNewLine = true; + break; + } + pos++; + } + } else { + while (pos < text.length) { + if (text.charCodeAt(pos) === 42 /* asterisk */ && text.charCodeAt(pos + 1) === 47 /* slash */) { + pos += 2; + break; + } + pos++; + } + } + if (collecting) { + if (hasPendingCommentRange) { + accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); + if (!reduce && accumulator) { + return accumulator; + } + } + pendingPos = startPos; + pendingEnd = pos; + pendingKind = kind; + pendingHasTrailingNewLine = hasTrailingNewLine; + hasPendingCommentRange = true; + } + continue; + } + break scan; + default: + if (ch > 127 /* maxAsciiCharacter */ && isWhiteSpaceLike(ch)) { + if (hasPendingCommentRange && isLineBreak(ch)) { + pendingHasTrailingNewLine = true; + } + pos++; + continue; + } + break scan; + } + } + if (hasPendingCommentRange) { + accumulator = cb(pendingPos, pendingEnd, pendingKind, pendingHasTrailingNewLine, state, accumulator); + } + return accumulator; +} +function forEachLeadingCommentRange(text, pos, cb, state) { + return iterateCommentRanges( + /*reduce*/ + false, + text, + pos, + /*trailing*/ + false, + cb, + state + ); +} +function forEachTrailingCommentRange(text, pos, cb, state) { + return iterateCommentRanges( + /*reduce*/ + false, + text, + pos, + /*trailing*/ + true, + cb, + state + ); +} +function reduceEachLeadingCommentRange(text, pos, cb, state, initial) { + return iterateCommentRanges( + /*reduce*/ + true, + text, + pos, + /*trailing*/ + false, + cb, + state, + initial + ); +} +function reduceEachTrailingCommentRange(text, pos, cb, state, initial) { + return iterateCommentRanges( + /*reduce*/ + true, + text, + pos, + /*trailing*/ + true, + cb, + state, + initial + ); +} +function appendCommentRange(pos, end, kind, hasTrailingNewLine, _state, comments = []) { + comments.push({ kind, pos, end, hasTrailingNewLine }); + return comments; +} +function getLeadingCommentRanges(text, pos) { + return reduceEachLeadingCommentRange( + text, + pos, + appendCommentRange, + /*state*/ + void 0, + /*initial*/ + void 0 + ); +} +function getTrailingCommentRanges(text, pos) { + return reduceEachTrailingCommentRange( + text, + pos, + appendCommentRange, + /*state*/ + void 0, + /*initial*/ + void 0 + ); +} +function getShebang(text) { + const match = shebangTriviaRegex.exec(text); + if (match) { + return match[0]; + } +} +function isIdentifierStart(ch, languageVersion) { + return isASCIILetter(ch) || ch === 36 /* $ */ || ch === 95 /* _ */ || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierStart(ch, languageVersion); +} +function isIdentifierPart(ch, languageVersion, identifierVariant) { + return isWordCharacter(ch) || ch === 36 /* $ */ || // "-" and ":" are valid in JSX Identifiers + (identifierVariant === 1 /* JSX */ ? ch === 45 /* minus */ || ch === 58 /* colon */ : false) || ch > 127 /* maxAsciiCharacter */ && isUnicodeIdentifierPart(ch, languageVersion); +} +function isIdentifierText(name, languageVersion, identifierVariant) { + let ch = codePointAt(name, 0); + if (!isIdentifierStart(ch, languageVersion)) { + return false; + } + for (let i = charSize(ch); i < name.length; i += charSize(ch)) { + if (!isIdentifierPart(ch = codePointAt(name, i), languageVersion, identifierVariant)) { + return false; + } + } + return true; +} +function createScanner(languageVersion, skipTrivia2, languageVariant = 0 /* Standard */, textInitial, onError, start, length2) { + var text = textInitial; + var pos; + var end; + var fullStartPos; + var tokenStart; + var token; + var tokenValue; + var tokenFlags; + var commentDirectives; + var skipJsDocLeadingAsterisks = 0; + var scriptKind = 0 /* Unknown */; + var jsDocParsingMode = 0 /* ParseAll */; + setText(text, start, length2); + var scanner2 = { + getTokenFullStart: () => fullStartPos, + getStartPos: () => fullStartPos, + getTokenEnd: () => pos, + getTextPos: () => pos, + getToken: () => token, + getTokenStart: () => tokenStart, + getTokenPos: () => tokenStart, + getTokenText: () => text.substring(tokenStart, pos), + getTokenValue: () => tokenValue, + hasUnicodeEscape: () => (tokenFlags & 1024 /* UnicodeEscape */) !== 0, + hasExtendedUnicodeEscape: () => (tokenFlags & 8 /* ExtendedUnicodeEscape */) !== 0, + hasPrecedingLineBreak: () => (tokenFlags & 1 /* PrecedingLineBreak */) !== 0, + hasPrecedingJSDocComment: () => (tokenFlags & 2 /* PrecedingJSDocComment */) !== 0, + hasPrecedingJSDocLeadingAsterisks: () => (tokenFlags & 32768 /* PrecedingJSDocLeadingAsterisks */) !== 0, + isIdentifier: () => token === 80 /* Identifier */ || token > 118 /* LastReservedWord */, + isReservedWord: () => token >= 83 /* FirstReservedWord */ && token <= 118 /* LastReservedWord */, + isUnterminated: () => (tokenFlags & 4 /* Unterminated */) !== 0, + getCommentDirectives: () => commentDirectives, + getNumericLiteralFlags: () => tokenFlags & 25584 /* NumericLiteralFlags */, + getTokenFlags: () => tokenFlags, + reScanGreaterToken, + reScanAsteriskEqualsToken, + reScanSlashToken, + reScanTemplateToken, + reScanTemplateHeadOrNoSubstitutionTemplate, + scanJsxIdentifier, + scanJsxAttributeValue, + reScanJsxAttributeValue, + reScanJsxToken, + reScanLessThanToken, + reScanHashToken, + reScanQuestionToken, + reScanInvalidIdentifier, + scanJsxToken, + scanJsDocToken, + scanJSDocCommentTextToken, + scan, + getText, + clearCommentDirectives, + setText, + setScriptTarget, + setLanguageVariant, + setScriptKind, + setJSDocParsingMode, + setOnError, + resetTokenState, + setTextPos: resetTokenState, + setSkipJsDocLeadingAsterisks, + tryScan, + lookAhead, + scanRange + }; + if (Debug.isDebugging) { + Object.defineProperty(scanner2, "__debugShowCurrentPositionInText", { + get: () => { + const text2 = scanner2.getText(); + return text2.slice(0, scanner2.getTokenFullStart()) + "\u2551" + text2.slice(scanner2.getTokenFullStart()); + } + }); + } + return scanner2; + function codePointUnchecked(pos2) { + return codePointAt(text, pos2); + } + function codePointChecked(pos2) { + return pos2 >= 0 && pos2 < end ? codePointUnchecked(pos2) : -1 /* EOF */; + } + function charCodeUnchecked(pos2) { + return text.charCodeAt(pos2); + } + function charCodeChecked(pos2) { + return pos2 >= 0 && pos2 < end ? charCodeUnchecked(pos2) : -1 /* EOF */; + } + function error2(message, errPos = pos, length3, arg0) { + if (onError) { + const oldPos = pos; + pos = errPos; + onError(message, length3 || 0, arg0); + pos = oldPos; + } + } + function scanNumberFragment() { + let start2 = pos; + let allowSeparator = false; + let isPreviousTokenSeparator = false; + let result = ""; + while (true) { + const ch = charCodeUnchecked(pos); + if (ch === 95 /* _ */) { + tokenFlags |= 512 /* ContainsSeparator */; + if (allowSeparator) { + allowSeparator = false; + isPreviousTokenSeparator = true; + result += text.substring(start2, pos); + } else { + tokenFlags |= 16384 /* ContainsInvalidSeparator */; + if (isPreviousTokenSeparator) { + error2(Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, pos, 1); + } else { + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); + } + } + pos++; + start2 = pos; + continue; + } + if (isDigit(ch)) { + allowSeparator = true; + isPreviousTokenSeparator = false; + pos++; + continue; + } + break; + } + if (charCodeUnchecked(pos - 1) === 95 /* _ */) { + tokenFlags |= 16384 /* ContainsInvalidSeparator */; + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); + } + return result + text.substring(start2, pos); + } + function scanNumber() { + let start2 = pos; + let mainFragment; + if (charCodeUnchecked(pos) === 48 /* _0 */) { + pos++; + if (charCodeUnchecked(pos) === 95 /* _ */) { + tokenFlags |= 512 /* ContainsSeparator */ | 16384 /* ContainsInvalidSeparator */; + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); + pos--; + mainFragment = scanNumberFragment(); + } else if (!scanDigits()) { + tokenFlags |= 8192 /* ContainsLeadingZero */; + mainFragment = "" + +tokenValue; + } else if (!tokenValue) { + mainFragment = "0"; + } else { + tokenValue = "" + parseInt(tokenValue, 8); + tokenFlags |= 32 /* Octal */; + const withMinus = token === 41 /* MinusToken */; + const literal = (withMinus ? "-" : "") + "0o" + (+tokenValue).toString(8); + if (withMinus) start2--; + error2(Diagnostics.Octal_literals_are_not_allowed_Use_the_syntax_0, start2, pos - start2, literal); + return 9 /* NumericLiteral */; + } + } else { + mainFragment = scanNumberFragment(); + } + let decimalFragment; + let scientificFragment; + if (charCodeUnchecked(pos) === 46 /* dot */) { + pos++; + decimalFragment = scanNumberFragment(); + } + let end2 = pos; + if (charCodeUnchecked(pos) === 69 /* E */ || charCodeUnchecked(pos) === 101 /* e */) { + pos++; + tokenFlags |= 16 /* Scientific */; + if (charCodeUnchecked(pos) === 43 /* plus */ || charCodeUnchecked(pos) === 45 /* minus */) pos++; + const preNumericPart = pos; + const finalFragment = scanNumberFragment(); + if (!finalFragment) { + error2(Diagnostics.Digit_expected); + } else { + scientificFragment = text.substring(end2, preNumericPart) + finalFragment; + end2 = pos; + } + } + let result; + if (tokenFlags & 512 /* ContainsSeparator */) { + result = mainFragment; + if (decimalFragment) { + result += "." + decimalFragment; + } + if (scientificFragment) { + result += scientificFragment; + } + } else { + result = text.substring(start2, end2); + } + if (tokenFlags & 8192 /* ContainsLeadingZero */) { + error2(Diagnostics.Decimals_with_leading_zeros_are_not_allowed, start2, end2 - start2); + tokenValue = "" + +result; + return 9 /* NumericLiteral */; + } + if (decimalFragment !== void 0 || tokenFlags & 16 /* Scientific */) { + checkForIdentifierStartAfterNumericLiteral(start2, decimalFragment === void 0 && !!(tokenFlags & 16 /* Scientific */)); + tokenValue = "" + +result; + return 9 /* NumericLiteral */; + } else { + tokenValue = result; + const type = checkBigIntSuffix(); + checkForIdentifierStartAfterNumericLiteral(start2); + return type; + } + } + function checkForIdentifierStartAfterNumericLiteral(numericStart, isScientific) { + if (!isIdentifierStart(codePointUnchecked(pos), languageVersion)) { + return; + } + const identifierStart = pos; + const { length: length3 } = scanIdentifierParts(); + if (length3 === 1 && text[identifierStart] === "n") { + if (isScientific) { + error2(Diagnostics.A_bigint_literal_cannot_use_exponential_notation, numericStart, identifierStart - numericStart + 1); + } else { + error2(Diagnostics.A_bigint_literal_must_be_an_integer, numericStart, identifierStart - numericStart + 1); + } + } else { + error2(Diagnostics.An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal, identifierStart, length3); + pos = identifierStart; + } + } + function scanDigits() { + const start2 = pos; + let isOctal = true; + while (isDigit(charCodeChecked(pos))) { + if (!isOctalDigit(charCodeUnchecked(pos))) { + isOctal = false; + } + pos++; + } + tokenValue = text.substring(start2, pos); + return isOctal; + } + function scanExactNumberOfHexDigits(count, canHaveSeparators) { + const valueString = scanHexDigits( + /*minCount*/ + count, + /*scanAsManyAsPossible*/ + false, + canHaveSeparators + ); + return valueString ? parseInt(valueString, 16) : -1; + } + function scanMinimumNumberOfHexDigits(count, canHaveSeparators) { + return scanHexDigits( + /*minCount*/ + count, + /*scanAsManyAsPossible*/ + true, + canHaveSeparators + ); + } + function scanHexDigits(minCount, scanAsManyAsPossible, canHaveSeparators) { + let valueChars = []; + let allowSeparator = false; + let isPreviousTokenSeparator = false; + while (valueChars.length < minCount || scanAsManyAsPossible) { + let ch = charCodeUnchecked(pos); + if (canHaveSeparators && ch === 95 /* _ */) { + tokenFlags |= 512 /* ContainsSeparator */; + if (allowSeparator) { + allowSeparator = false; + isPreviousTokenSeparator = true; + } else if (isPreviousTokenSeparator) { + error2(Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, pos, 1); + } else { + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); + } + pos++; + continue; + } + allowSeparator = canHaveSeparators; + if (ch >= 65 /* A */ && ch <= 70 /* F */) { + ch += 97 /* a */ - 65 /* A */; + } else if (!(ch >= 48 /* _0 */ && ch <= 57 /* _9 */ || ch >= 97 /* a */ && ch <= 102 /* f */)) { + break; + } + valueChars.push(ch); + pos++; + isPreviousTokenSeparator = false; + } + if (valueChars.length < minCount) { + valueChars = []; + } + if (charCodeUnchecked(pos - 1) === 95 /* _ */) { + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); + } + return String.fromCharCode(...valueChars); + } + function scanString(jsxAttributeString = false) { + const quote2 = charCodeUnchecked(pos); + pos++; + let result = ""; + let start2 = pos; + while (true) { + if (pos >= end) { + result += text.substring(start2, pos); + tokenFlags |= 4 /* Unterminated */; + error2(Diagnostics.Unterminated_string_literal); + break; + } + const ch = charCodeUnchecked(pos); + if (ch === quote2) { + result += text.substring(start2, pos); + pos++; + break; + } + if (ch === 92 /* backslash */ && !jsxAttributeString) { + result += text.substring(start2, pos); + result += scanEscapeSequence(1 /* String */ | 2 /* ReportErrors */); + start2 = pos; + continue; + } + if ((ch === 10 /* lineFeed */ || ch === 13 /* carriageReturn */) && !jsxAttributeString) { + result += text.substring(start2, pos); + tokenFlags |= 4 /* Unterminated */; + error2(Diagnostics.Unterminated_string_literal); + break; + } + pos++; + } + return result; + } + function scanTemplateAndSetTokenValue(shouldEmitInvalidEscapeError) { + const startedWithBacktick = charCodeUnchecked(pos) === 96 /* backtick */; + pos++; + let start2 = pos; + let contents = ""; + let resultingToken; + while (true) { + if (pos >= end) { + contents += text.substring(start2, pos); + tokenFlags |= 4 /* Unterminated */; + error2(Diagnostics.Unterminated_template_literal); + resultingToken = startedWithBacktick ? 15 /* NoSubstitutionTemplateLiteral */ : 18 /* TemplateTail */; + break; + } + const currChar = charCodeUnchecked(pos); + if (currChar === 96 /* backtick */) { + contents += text.substring(start2, pos); + pos++; + resultingToken = startedWithBacktick ? 15 /* NoSubstitutionTemplateLiteral */ : 18 /* TemplateTail */; + break; + } + if (currChar === 36 /* $ */ && pos + 1 < end && charCodeUnchecked(pos + 1) === 123 /* openBrace */) { + contents += text.substring(start2, pos); + pos += 2; + resultingToken = startedWithBacktick ? 16 /* TemplateHead */ : 17 /* TemplateMiddle */; + break; + } + if (currChar === 92 /* backslash */) { + contents += text.substring(start2, pos); + contents += scanEscapeSequence(1 /* String */ | (shouldEmitInvalidEscapeError ? 2 /* ReportErrors */ : 0)); + start2 = pos; + continue; + } + if (currChar === 13 /* carriageReturn */) { + contents += text.substring(start2, pos); + pos++; + if (pos < end && charCodeUnchecked(pos) === 10 /* lineFeed */) { + pos++; + } + contents += "\n"; + start2 = pos; + continue; + } + pos++; + } + Debug.assert(resultingToken !== void 0); + tokenValue = contents; + return resultingToken; + } + function scanEscapeSequence(flags) { + const start2 = pos; + pos++; + if (pos >= end) { + error2(Diagnostics.Unexpected_end_of_text); + return ""; + } + const ch = charCodeUnchecked(pos); + pos++; + switch (ch) { + case 48 /* _0 */: + if (pos >= end || !isDigit(charCodeUnchecked(pos))) { + return "\0"; + } + // '\01', '\011' + // falls through + case 49 /* _1 */: + case 50 /* _2 */: + case 51 /* _3 */: + if (pos < end && isOctalDigit(charCodeUnchecked(pos))) { + pos++; + } + // '\17', '\177' + // falls through + case 52 /* _4 */: + case 53 /* _5 */: + case 54 /* _6 */: + case 55 /* _7 */: + if (pos < end && isOctalDigit(charCodeUnchecked(pos))) { + pos++; + } + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + const code = parseInt(text.substring(start2 + 1, pos), 8); + if (flags & 4 /* RegularExpression */ && !(flags & 32 /* AtomEscape */) && ch !== 48 /* _0 */) { + error2(Diagnostics.Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended_as_an_escape_sequence_use_the_syntax_0_instead, start2, pos - start2, "\\x" + code.toString(16).padStart(2, "0")); + } else { + error2(Diagnostics.Octal_escape_sequences_are_not_allowed_Use_the_syntax_0, start2, pos - start2, "\\x" + code.toString(16).padStart(2, "0")); + } + return String.fromCharCode(code); + } + return text.substring(start2, pos); + case 56 /* _8 */: + case 57 /* _9 */: + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + if (flags & 4 /* RegularExpression */ && !(flags & 32 /* AtomEscape */)) { + error2(Diagnostics.Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class, start2, pos - start2); + } else { + error2(Diagnostics.Escape_sequence_0_is_not_allowed, start2, pos - start2, text.substring(start2, pos)); + } + return String.fromCharCode(ch); + } + return text.substring(start2, pos); + case 98 /* b */: + return "\b"; + case 116 /* t */: + return " "; + case 110 /* n */: + return "\n"; + case 118 /* v */: + return "\v"; + case 102 /* f */: + return "\f"; + case 114 /* r */: + return "\r"; + case 39 /* singleQuote */: + return "'"; + case 34 /* doubleQuote */: + return '"'; + case 117 /* u */: + if (pos < end && charCodeUnchecked(pos) === 123 /* openBrace */) { + pos -= 2; + const result = scanExtendedUnicodeEscape(!!(flags & 6 /* ReportInvalidEscapeErrors */)); + if (!(flags & 17 /* AllowExtendedUnicodeEscape */)) { + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + error2(Diagnostics.Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start2, pos - start2); + } + } + return result; + } + for (; pos < start2 + 6; pos++) { + if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + error2(Diagnostics.Hexadecimal_digit_expected); + } + return text.substring(start2, pos); + } + } + tokenFlags |= 1024 /* UnicodeEscape */; + const escapedValue = parseInt(text.substring(start2 + 2, pos), 16); + const escapedValueString = String.fromCharCode(escapedValue); + if (flags & 16 /* AnyUnicodeMode */ && escapedValue >= 55296 && escapedValue <= 56319 && pos + 6 < end && text.substring(pos, pos + 2) === "\\u" && charCodeUnchecked(pos + 2) !== 123 /* openBrace */) { + const nextStart = pos; + let nextPos = pos + 2; + for (; nextPos < nextStart + 6; nextPos++) { + if (!isHexDigit(charCodeUnchecked(nextPos))) { + return escapedValueString; + } + } + const nextEscapedValue = parseInt(text.substring(nextStart + 2, nextPos), 16); + if (nextEscapedValue >= 56320 && nextEscapedValue <= 57343) { + pos = nextPos; + return escapedValueString + String.fromCharCode(nextEscapedValue); + } + } + return escapedValueString; + case 120 /* x */: + for (; pos < start2 + 4; pos++) { + if (!(pos < end && isHexDigit(charCodeUnchecked(pos)))) { + tokenFlags |= 2048 /* ContainsInvalidEscape */; + if (flags & 6 /* ReportInvalidEscapeErrors */) { + error2(Diagnostics.Hexadecimal_digit_expected); + } + return text.substring(start2, pos); + } + } + tokenFlags |= 4096 /* HexEscape */; + return String.fromCharCode(parseInt(text.substring(start2 + 2, pos), 16)); + // when encountering a LineContinuation (i.e. a backslash and a line terminator sequence), + // the line terminator is interpreted to be "the empty code unit sequence". + case 13 /* carriageReturn */: + if (pos < end && charCodeUnchecked(pos) === 10 /* lineFeed */) { + pos++; + } + // falls through + case 10 /* lineFeed */: + case 8232 /* lineSeparator */: + case 8233 /* paragraphSeparator */: + return ""; + default: + if (flags & 16 /* AnyUnicodeMode */ || flags & 4 /* RegularExpression */ && !(flags & 8 /* AnnexB */) && isIdentifierPart(ch, languageVersion)) { + error2(Diagnostics.This_character_cannot_be_escaped_in_a_regular_expression, pos - 2, 2); + } + return String.fromCharCode(ch); + } + } + function scanExtendedUnicodeEscape(shouldEmitInvalidEscapeError) { + const start2 = pos; + pos += 3; + const escapedStart = pos; + const escapedValueString = scanMinimumNumberOfHexDigits( + 1, + /*canHaveSeparators*/ + false + ); + const escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1; + let isInvalidExtendedEscape = false; + if (escapedValue < 0) { + if (shouldEmitInvalidEscapeError) { + error2(Diagnostics.Hexadecimal_digit_expected); + } + isInvalidExtendedEscape = true; + } else if (escapedValue > 1114111) { + if (shouldEmitInvalidEscapeError) { + error2(Diagnostics.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive, escapedStart, pos - escapedStart); + } + isInvalidExtendedEscape = true; + } + if (pos >= end) { + if (shouldEmitInvalidEscapeError) { + error2(Diagnostics.Unexpected_end_of_text); + } + isInvalidExtendedEscape = true; + } else if (charCodeUnchecked(pos) === 125 /* closeBrace */) { + pos++; + } else { + if (shouldEmitInvalidEscapeError) { + error2(Diagnostics.Unterminated_Unicode_escape_sequence); + } + isInvalidExtendedEscape = true; + } + if (isInvalidExtendedEscape) { + tokenFlags |= 2048 /* ContainsInvalidEscape */; + return text.substring(start2, pos); + } + tokenFlags |= 8 /* ExtendedUnicodeEscape */; + return utf16EncodeAsString(escapedValue); + } + function peekUnicodeEscape() { + if (pos + 5 < end && charCodeUnchecked(pos + 1) === 117 /* u */) { + const start2 = pos; + pos += 2; + const value = scanExactNumberOfHexDigits( + 4, + /*canHaveSeparators*/ + false + ); + pos = start2; + return value; + } + return -1; + } + function peekExtendedUnicodeEscape() { + if (codePointUnchecked(pos + 1) === 117 /* u */ && codePointUnchecked(pos + 2) === 123 /* openBrace */) { + const start2 = pos; + pos += 3; + const escapedValueString = scanMinimumNumberOfHexDigits( + 1, + /*canHaveSeparators*/ + false + ); + const escapedValue = escapedValueString ? parseInt(escapedValueString, 16) : -1; + pos = start2; + return escapedValue; + } + return -1; + } + function scanIdentifierParts() { + let result = ""; + let start2 = pos; + while (pos < end) { + let ch = codePointUnchecked(pos); + if (isIdentifierPart(ch, languageVersion)) { + pos += charSize(ch); + } else if (ch === 92 /* backslash */) { + ch = peekExtendedUnicodeEscape(); + if (ch >= 0 && isIdentifierPart(ch, languageVersion)) { + result += scanExtendedUnicodeEscape( + /*shouldEmitInvalidEscapeError*/ + true + ); + start2 = pos; + continue; + } + ch = peekUnicodeEscape(); + if (!(ch >= 0 && isIdentifierPart(ch, languageVersion))) { + break; + } + tokenFlags |= 1024 /* UnicodeEscape */; + result += text.substring(start2, pos); + result += utf16EncodeAsString(ch); + pos += 6; + start2 = pos; + } else { + break; + } + } + result += text.substring(start2, pos); + return result; + } + function getIdentifierToken() { + const len = tokenValue.length; + if (len >= 2 && len <= 12) { + const ch = tokenValue.charCodeAt(0); + if (ch >= 97 /* a */ && ch <= 122 /* z */) { + const keyword = textToKeyword.get(tokenValue); + if (keyword !== void 0) { + return token = keyword; + } + } + } + return token = 80 /* Identifier */; + } + function scanBinaryOrOctalDigits(base) { + let value = ""; + let separatorAllowed = false; + let isPreviousTokenSeparator = false; + while (true) { + const ch = charCodeUnchecked(pos); + if (ch === 95 /* _ */) { + tokenFlags |= 512 /* ContainsSeparator */; + if (separatorAllowed) { + separatorAllowed = false; + isPreviousTokenSeparator = true; + } else if (isPreviousTokenSeparator) { + error2(Diagnostics.Multiple_consecutive_numeric_separators_are_not_permitted, pos, 1); + } else { + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos, 1); + } + pos++; + continue; + } + separatorAllowed = true; + if (!isDigit(ch) || ch - 48 /* _0 */ >= base) { + break; + } + value += text[pos]; + pos++; + isPreviousTokenSeparator = false; + } + if (charCodeUnchecked(pos - 1) === 95 /* _ */) { + error2(Diagnostics.Numeric_separators_are_not_allowed_here, pos - 1, 1); + } + return value; + } + function checkBigIntSuffix() { + if (charCodeUnchecked(pos) === 110 /* n */) { + tokenValue += "n"; + if (tokenFlags & 384 /* BinaryOrOctalSpecifier */) { + tokenValue = parsePseudoBigInt(tokenValue) + "n"; + } + pos++; + return 10 /* BigIntLiteral */; + } else { + const numericValue = tokenFlags & 128 /* BinarySpecifier */ ? parseInt(tokenValue.slice(2), 2) : tokenFlags & 256 /* OctalSpecifier */ ? parseInt(tokenValue.slice(2), 8) : +tokenValue; + tokenValue = "" + numericValue; + return 9 /* NumericLiteral */; + } + } + function scan() { + fullStartPos = pos; + tokenFlags = 0 /* None */; + while (true) { + tokenStart = pos; + if (pos >= end) { + return token = 1 /* EndOfFileToken */; + } + const ch = codePointUnchecked(pos); + if (pos === 0) { + if (ch === 35 /* hash */ && isShebangTrivia(text, pos)) { + pos = scanShebangTrivia(text, pos); + if (skipTrivia2) { + continue; + } else { + return token = 6 /* ShebangTrivia */; + } + } + } + switch (ch) { + case 10 /* lineFeed */: + case 13 /* carriageReturn */: + tokenFlags |= 1 /* PrecedingLineBreak */; + if (skipTrivia2) { + pos++; + continue; + } else { + if (ch === 13 /* carriageReturn */ && pos + 1 < end && charCodeUnchecked(pos + 1) === 10 /* lineFeed */) { + pos += 2; + } else { + pos++; + } + return token = 4 /* NewLineTrivia */; + } + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + case 160 /* nonBreakingSpace */: + case 5760 /* ogham */: + case 8192 /* enQuad */: + case 8193 /* emQuad */: + case 8194 /* enSpace */: + case 8195 /* emSpace */: + case 8196 /* threePerEmSpace */: + case 8197 /* fourPerEmSpace */: + case 8198 /* sixPerEmSpace */: + case 8199 /* figureSpace */: + case 8200 /* punctuationSpace */: + case 8201 /* thinSpace */: + case 8202 /* hairSpace */: + case 8203 /* zeroWidthSpace */: + case 8239 /* narrowNoBreakSpace */: + case 8287 /* mathematicalSpace */: + case 12288 /* ideographicSpace */: + case 65279 /* byteOrderMark */: + if (skipTrivia2) { + pos++; + continue; + } else { + while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { + pos++; + } + return token = 5 /* WhitespaceTrivia */; + } + case 33 /* exclamation */: + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 38 /* ExclamationEqualsEqualsToken */; + } + return pos += 2, token = 36 /* ExclamationEqualsToken */; + } + pos++; + return token = 54 /* ExclamationToken */; + case 34 /* doubleQuote */: + case 39 /* singleQuote */: + tokenValue = scanString(); + return token = 11 /* StringLiteral */; + case 96 /* backtick */: + return token = scanTemplateAndSetTokenValue( + /*shouldEmitInvalidEscapeError*/ + false + ); + case 37 /* percent */: + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 70 /* PercentEqualsToken */; + } + pos++; + return token = 45 /* PercentToken */; + case 38 /* ampersand */: + if (charCodeUnchecked(pos + 1) === 38 /* ampersand */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 77 /* AmpersandAmpersandEqualsToken */; + } + return pos += 2, token = 56 /* AmpersandAmpersandToken */; + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 74 /* AmpersandEqualsToken */; + } + pos++; + return token = 51 /* AmpersandToken */; + case 40 /* openParen */: + pos++; + return token = 21 /* OpenParenToken */; + case 41 /* closeParen */: + pos++; + return token = 22 /* CloseParenToken */; + case 42 /* asterisk */: + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 67 /* AsteriskEqualsToken */; + } + if (charCodeUnchecked(pos + 1) === 42 /* asterisk */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 68 /* AsteriskAsteriskEqualsToken */; + } + return pos += 2, token = 43 /* AsteriskAsteriskToken */; + } + pos++; + if (skipJsDocLeadingAsterisks && (tokenFlags & 32768 /* PrecedingJSDocLeadingAsterisks */) === 0 && tokenFlags & 1 /* PrecedingLineBreak */) { + tokenFlags |= 32768 /* PrecedingJSDocLeadingAsterisks */; + continue; + } + return token = 42 /* AsteriskToken */; + case 43 /* plus */: + if (charCodeUnchecked(pos + 1) === 43 /* plus */) { + return pos += 2, token = 46 /* PlusPlusToken */; + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 65 /* PlusEqualsToken */; + } + pos++; + return token = 40 /* PlusToken */; + case 44 /* comma */: + pos++; + return token = 28 /* CommaToken */; + case 45 /* minus */: + if (charCodeUnchecked(pos + 1) === 45 /* minus */) { + return pos += 2, token = 47 /* MinusMinusToken */; + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 66 /* MinusEqualsToken */; + } + pos++; + return token = 41 /* MinusToken */; + case 46 /* dot */: + if (isDigit(charCodeUnchecked(pos + 1))) { + scanNumber(); + return token = 9 /* NumericLiteral */; + } + if (charCodeUnchecked(pos + 1) === 46 /* dot */ && charCodeUnchecked(pos + 2) === 46 /* dot */) { + return pos += 3, token = 26 /* DotDotDotToken */; + } + pos++; + return token = 25 /* DotToken */; + case 47 /* slash */: + if (charCodeUnchecked(pos + 1) === 47 /* slash */) { + pos += 2; + while (pos < end) { + if (isLineBreak(charCodeUnchecked(pos))) { + break; + } + pos++; + } + commentDirectives = appendIfCommentDirective( + commentDirectives, + text.slice(tokenStart, pos), + commentDirectiveRegExSingleLine, + tokenStart + ); + if (skipTrivia2) { + continue; + } else { + return token = 2 /* SingleLineCommentTrivia */; + } + } + if (charCodeUnchecked(pos + 1) === 42 /* asterisk */) { + pos += 2; + const isJSDoc2 = charCodeUnchecked(pos) === 42 /* asterisk */ && charCodeUnchecked(pos + 1) !== 47 /* slash */; + let commentClosed = false; + let lastLineStart = tokenStart; + while (pos < end) { + const ch2 = charCodeUnchecked(pos); + if (ch2 === 42 /* asterisk */ && charCodeUnchecked(pos + 1) === 47 /* slash */) { + pos += 2; + commentClosed = true; + break; + } + pos++; + if (isLineBreak(ch2)) { + lastLineStart = pos; + tokenFlags |= 1 /* PrecedingLineBreak */; + } + } + if (isJSDoc2 && shouldParseJSDoc()) { + tokenFlags |= 2 /* PrecedingJSDocComment */; + } + commentDirectives = appendIfCommentDirective(commentDirectives, text.slice(lastLineStart, pos), commentDirectiveRegExMultiLine, lastLineStart); + if (!commentClosed) { + error2(Diagnostics.Asterisk_Slash_expected); + } + if (skipTrivia2) { + continue; + } else { + if (!commentClosed) { + tokenFlags |= 4 /* Unterminated */; + } + return token = 3 /* MultiLineCommentTrivia */; + } + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 69 /* SlashEqualsToken */; + } + pos++; + return token = 44 /* SlashToken */; + case 48 /* _0 */: + if (pos + 2 < end && (charCodeUnchecked(pos + 1) === 88 /* X */ || charCodeUnchecked(pos + 1) === 120 /* x */)) { + pos += 2; + tokenValue = scanMinimumNumberOfHexDigits( + 1, + /*canHaveSeparators*/ + true + ); + if (!tokenValue) { + error2(Diagnostics.Hexadecimal_digit_expected); + tokenValue = "0"; + } + tokenValue = "0x" + tokenValue; + tokenFlags |= 64 /* HexSpecifier */; + return token = checkBigIntSuffix(); + } else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === 66 /* B */ || charCodeUnchecked(pos + 1) === 98 /* b */)) { + pos += 2; + tokenValue = scanBinaryOrOctalDigits( + /* base */ + 2 + ); + if (!tokenValue) { + error2(Diagnostics.Binary_digit_expected); + tokenValue = "0"; + } + tokenValue = "0b" + tokenValue; + tokenFlags |= 128 /* BinarySpecifier */; + return token = checkBigIntSuffix(); + } else if (pos + 2 < end && (charCodeUnchecked(pos + 1) === 79 /* O */ || charCodeUnchecked(pos + 1) === 111 /* o */)) { + pos += 2; + tokenValue = scanBinaryOrOctalDigits( + /* base */ + 8 + ); + if (!tokenValue) { + error2(Diagnostics.Octal_digit_expected); + tokenValue = "0"; + } + tokenValue = "0o" + tokenValue; + tokenFlags |= 256 /* OctalSpecifier */; + return token = checkBigIntSuffix(); + } + // falls through + case 49 /* _1 */: + case 50 /* _2 */: + case 51 /* _3 */: + case 52 /* _4 */: + case 53 /* _5 */: + case 54 /* _6 */: + case 55 /* _7 */: + case 56 /* _8 */: + case 57 /* _9 */: + return token = scanNumber(); + case 58 /* colon */: + pos++; + return token = 59 /* ColonToken */; + case 59 /* semicolon */: + pos++; + return token = 27 /* SemicolonToken */; + case 60 /* lessThan */: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error2); + if (skipTrivia2) { + continue; + } else { + return token = 7 /* ConflictMarkerTrivia */; + } + } + if (charCodeUnchecked(pos + 1) === 60 /* lessThan */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 71 /* LessThanLessThanEqualsToken */; + } + return pos += 2, token = 48 /* LessThanLessThanToken */; + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 33 /* LessThanEqualsToken */; + } + if (languageVariant === 1 /* JSX */ && charCodeUnchecked(pos + 1) === 47 /* slash */ && charCodeUnchecked(pos + 2) !== 42 /* asterisk */) { + return pos += 2, token = 31 /* LessThanSlashToken */; + } + pos++; + return token = 30 /* LessThanToken */; + case 61 /* equals */: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error2); + if (skipTrivia2) { + continue; + } else { + return token = 7 /* ConflictMarkerTrivia */; + } + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 37 /* EqualsEqualsEqualsToken */; + } + return pos += 2, token = 35 /* EqualsEqualsToken */; + } + if (charCodeUnchecked(pos + 1) === 62 /* greaterThan */) { + return pos += 2, token = 39 /* EqualsGreaterThanToken */; + } + pos++; + return token = 64 /* EqualsToken */; + case 62 /* greaterThan */: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error2); + if (skipTrivia2) { + continue; + } else { + return token = 7 /* ConflictMarkerTrivia */; + } + } + pos++; + return token = 32 /* GreaterThanToken */; + case 63 /* question */: + if (charCodeUnchecked(pos + 1) === 46 /* dot */ && !isDigit(charCodeUnchecked(pos + 2))) { + return pos += 2, token = 29 /* QuestionDotToken */; + } + if (charCodeUnchecked(pos + 1) === 63 /* question */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 78 /* QuestionQuestionEqualsToken */; + } + return pos += 2, token = 61 /* QuestionQuestionToken */; + } + pos++; + return token = 58 /* QuestionToken */; + case 91 /* openBracket */: + pos++; + return token = 23 /* OpenBracketToken */; + case 93 /* closeBracket */: + pos++; + return token = 24 /* CloseBracketToken */; + case 94 /* caret */: + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 79 /* CaretEqualsToken */; + } + pos++; + return token = 53 /* CaretToken */; + case 123 /* openBrace */: + pos++; + return token = 19 /* OpenBraceToken */; + case 124 /* bar */: + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error2); + if (skipTrivia2) { + continue; + } else { + return token = 7 /* ConflictMarkerTrivia */; + } + } + if (charCodeUnchecked(pos + 1) === 124 /* bar */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 76 /* BarBarEqualsToken */; + } + return pos += 2, token = 57 /* BarBarToken */; + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 75 /* BarEqualsToken */; + } + pos++; + return token = 52 /* BarToken */; + case 125 /* closeBrace */: + pos++; + return token = 20 /* CloseBraceToken */; + case 126 /* tilde */: + pos++; + return token = 55 /* TildeToken */; + case 64 /* at */: + pos++; + return token = 60 /* AtToken */; + case 92 /* backslash */: + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) { + tokenValue = scanExtendedUnicodeEscape( + /*shouldEmitInvalidEscapeError*/ + true + ) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { + pos += 6; + tokenFlags |= 1024 /* UnicodeEscape */; + tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + error2(Diagnostics.Invalid_character); + pos++; + return token = 0 /* Unknown */; + case 35 /* hash */: + if (pos !== 0 && text[pos + 1] === "!") { + error2(Diagnostics.can_only_be_used_at_the_start_of_a_file, pos, 2); + pos++; + return token = 0 /* Unknown */; + } + const charAfterHash = codePointUnchecked(pos + 1); + if (charAfterHash === 92 /* backslash */) { + pos++; + const extendedCookedChar2 = peekExtendedUnicodeEscape(); + if (extendedCookedChar2 >= 0 && isIdentifierStart(extendedCookedChar2, languageVersion)) { + tokenValue = "#" + scanExtendedUnicodeEscape( + /*shouldEmitInvalidEscapeError*/ + true + ) + scanIdentifierParts(); + return token = 81 /* PrivateIdentifier */; + } + const cookedChar2 = peekUnicodeEscape(); + if (cookedChar2 >= 0 && isIdentifierStart(cookedChar2, languageVersion)) { + pos += 6; + tokenFlags |= 1024 /* UnicodeEscape */; + tokenValue = "#" + String.fromCharCode(cookedChar2) + scanIdentifierParts(); + return token = 81 /* PrivateIdentifier */; + } + pos--; + } + if (isIdentifierStart(charAfterHash, languageVersion)) { + pos++; + scanIdentifier(charAfterHash, languageVersion); + } else { + tokenValue = "#"; + error2(Diagnostics.Invalid_character, pos++, charSize(ch)); + } + return token = 81 /* PrivateIdentifier */; + case 65533 /* replacementCharacter */: + error2(Diagnostics.File_appears_to_be_binary, 0, 0); + pos = end; + return token = 8 /* NonTextFileMarkerTrivia */; + default: + const identifierKind = scanIdentifier(ch, languageVersion); + if (identifierKind) { + return token = identifierKind; + } else if (isWhiteSpaceSingleLine(ch)) { + pos += charSize(ch); + continue; + } else if (isLineBreak(ch)) { + tokenFlags |= 1 /* PrecedingLineBreak */; + pos += charSize(ch); + continue; + } + const size = charSize(ch); + error2(Diagnostics.Invalid_character, pos, size); + pos += size; + return token = 0 /* Unknown */; + } + } + } + function shouldParseJSDoc() { + switch (jsDocParsingMode) { + case 0 /* ParseAll */: + return true; + case 1 /* ParseNone */: + return false; + } + if (scriptKind !== 3 /* TS */ && scriptKind !== 4 /* TSX */) { + return true; + } + if (jsDocParsingMode === 3 /* ParseForTypeInfo */) { + return false; + } + return jsDocSeeOrLink.test(text.slice(fullStartPos, pos)); + } + function reScanInvalidIdentifier() { + Debug.assert(token === 0 /* Unknown */, "'reScanInvalidIdentifier' should only be called when the current token is 'SyntaxKind.Unknown'."); + pos = tokenStart = fullStartPos; + tokenFlags = 0; + const ch = codePointUnchecked(pos); + const identifierKind = scanIdentifier(ch, 99 /* ESNext */); + if (identifierKind) { + return token = identifierKind; + } + pos += charSize(ch); + return token; + } + function scanIdentifier(startCharacter, languageVersion2) { + let ch = startCharacter; + if (isIdentifierStart(ch, languageVersion2)) { + pos += charSize(ch); + while (pos < end && isIdentifierPart(ch = codePointUnchecked(pos), languageVersion2)) pos += charSize(ch); + tokenValue = text.substring(tokenStart, pos); + if (ch === 92 /* backslash */) { + tokenValue += scanIdentifierParts(); + } + return getIdentifierToken(); + } + } + function reScanGreaterToken() { + if (token === 32 /* GreaterThanToken */) { + if (charCodeUnchecked(pos) === 62 /* greaterThan */) { + if (charCodeUnchecked(pos + 1) === 62 /* greaterThan */) { + if (charCodeUnchecked(pos + 2) === 61 /* equals */) { + return pos += 3, token = 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */; + } + return pos += 2, token = 50 /* GreaterThanGreaterThanGreaterThanToken */; + } + if (charCodeUnchecked(pos + 1) === 61 /* equals */) { + return pos += 2, token = 72 /* GreaterThanGreaterThanEqualsToken */; + } + pos++; + return token = 49 /* GreaterThanGreaterThanToken */; + } + if (charCodeUnchecked(pos) === 61 /* equals */) { + pos++; + return token = 34 /* GreaterThanEqualsToken */; + } + } + return token; + } + function reScanAsteriskEqualsToken() { + Debug.assert(token === 67 /* AsteriskEqualsToken */, "'reScanAsteriskEqualsToken' should only be called on a '*='"); + pos = tokenStart + 1; + return token = 64 /* EqualsToken */; + } + function reScanSlashToken(reportErrors2) { + if (token === 44 /* SlashToken */ || token === 69 /* SlashEqualsToken */) { + const startOfRegExpBody = tokenStart + 1; + pos = startOfRegExpBody; + let inEscape = false; + let namedCaptureGroups = false; + let inCharacterClass = false; + while (true) { + const ch = charCodeChecked(pos); + if (ch === -1 /* EOF */ || isLineBreak(ch)) { + tokenFlags |= 4 /* Unterminated */; + break; + } + if (inEscape) { + inEscape = false; + } else if (ch === 47 /* slash */ && !inCharacterClass) { + break; + } else if (ch === 91 /* openBracket */) { + inCharacterClass = true; + } else if (ch === 92 /* backslash */) { + inEscape = true; + } else if (ch === 93 /* closeBracket */) { + inCharacterClass = false; + } else if (!inCharacterClass && ch === 40 /* openParen */ && charCodeChecked(pos + 1) === 63 /* question */ && charCodeChecked(pos + 2) === 60 /* lessThan */ && charCodeChecked(pos + 3) !== 61 /* equals */ && charCodeChecked(pos + 3) !== 33 /* exclamation */) { + namedCaptureGroups = true; + } + pos++; + } + const endOfRegExpBody = pos; + if (tokenFlags & 4 /* Unterminated */) { + pos = startOfRegExpBody; + inEscape = false; + let characterClassDepth = 0; + let inDecimalQuantifier = false; + let groupDepth = 0; + while (pos < endOfRegExpBody) { + const ch = charCodeUnchecked(pos); + if (inEscape) { + inEscape = false; + } else if (ch === 92 /* backslash */) { + inEscape = true; + } else if (ch === 91 /* openBracket */) { + characterClassDepth++; + } else if (ch === 93 /* closeBracket */ && characterClassDepth) { + characterClassDepth--; + } else if (!characterClassDepth) { + if (ch === 123 /* openBrace */) { + inDecimalQuantifier = true; + } else if (ch === 125 /* closeBrace */ && inDecimalQuantifier) { + inDecimalQuantifier = false; + } else if (!inDecimalQuantifier) { + if (ch === 40 /* openParen */) { + groupDepth++; + } else if (ch === 41 /* closeParen */ && groupDepth) { + groupDepth--; + } else if (ch === 41 /* closeParen */ || ch === 93 /* closeBracket */ || ch === 125 /* closeBrace */) { + break; + } + } + } + pos++; + } + while (isWhiteSpaceLike(charCodeChecked(pos - 1)) || charCodeChecked(pos - 1) === 59 /* semicolon */) pos--; + error2(Diagnostics.Unterminated_regular_expression_literal, tokenStart, pos - tokenStart); + } else { + pos++; + let regExpFlags = 0 /* None */; + while (true) { + const ch = codePointChecked(pos); + if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) { + break; + } + const size = charSize(ch); + if (reportErrors2) { + const flag = characterCodeToRegularExpressionFlag(ch); + if (flag === void 0) { + error2(Diagnostics.Unknown_regular_expression_flag, pos, size); + } else if (regExpFlags & flag) { + error2(Diagnostics.Duplicate_regular_expression_flag, pos, size); + } else if (((regExpFlags | flag) & 96 /* AnyUnicodeMode */) === 96 /* AnyUnicodeMode */) { + error2(Diagnostics.The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously, pos, size); + } else { + regExpFlags |= flag; + checkRegularExpressionFlagAvailability(flag, size); + } + } + pos += size; + } + if (reportErrors2) { + scanRange(startOfRegExpBody, endOfRegExpBody - startOfRegExpBody, () => { + scanRegularExpressionWorker( + regExpFlags, + /*annexB*/ + true, + namedCaptureGroups + ); + }); + } + } + tokenValue = text.substring(tokenStart, pos); + token = 14 /* RegularExpressionLiteral */; + } + return token; + } + function scanRegularExpressionWorker(regExpFlags, annexB, namedCaptureGroups) { + var unicodeSetsMode = !!(regExpFlags & 64 /* UnicodeSets */); + var anyUnicodeMode = !!(regExpFlags & 96 /* AnyUnicodeMode */); + var anyUnicodeModeOrNonAnnexB = anyUnicodeMode || !annexB; + var mayContainStrings = false; + var numberOfCapturingGroups = 0; + var groupSpecifiers; + var groupNameReferences; + var decimalEscapes; + var namedCapturingGroupsScopeStack = []; + var topNamedCapturingGroupsScope; + function scanDisjunction(isInGroup) { + while (true) { + namedCapturingGroupsScopeStack.push(topNamedCapturingGroupsScope); + topNamedCapturingGroupsScope = void 0; + scanAlternative(isInGroup); + topNamedCapturingGroupsScope = namedCapturingGroupsScopeStack.pop(); + if (charCodeChecked(pos) !== 124 /* bar */) { + return; + } + pos++; + } + } + function scanAlternative(isInGroup) { + let isPreviousTermQuantifiable = false; + while (true) { + const start2 = pos; + const ch = charCodeChecked(pos); + switch (ch) { + case -1 /* EOF */: + return; + case 94 /* caret */: + case 36 /* $ */: + pos++; + isPreviousTermQuantifiable = false; + break; + case 92 /* backslash */: + pos++; + switch (charCodeChecked(pos)) { + case 98 /* b */: + case 66 /* B */: + pos++; + isPreviousTermQuantifiable = false; + break; + default: + scanAtomEscape(); + isPreviousTermQuantifiable = true; + break; + } + break; + case 40 /* openParen */: + pos++; + if (charCodeChecked(pos) === 63 /* question */) { + pos++; + switch (charCodeChecked(pos)) { + case 61 /* equals */: + case 33 /* exclamation */: + pos++; + isPreviousTermQuantifiable = !anyUnicodeModeOrNonAnnexB; + break; + case 60 /* lessThan */: + const groupNameStart = pos; + pos++; + switch (charCodeChecked(pos)) { + case 61 /* equals */: + case 33 /* exclamation */: + pos++; + isPreviousTermQuantifiable = false; + break; + default: + scanGroupName( + /*isReference*/ + false + ); + scanExpectedChar(62 /* greaterThan */); + if (languageVersion < 5 /* ES2018 */) { + error2(Diagnostics.Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later, groupNameStart, pos - groupNameStart); + } + numberOfCapturingGroups++; + isPreviousTermQuantifiable = true; + break; + } + break; + default: + const start3 = pos; + const setFlags = scanPatternModifiers(0 /* None */); + if (charCodeChecked(pos) === 45 /* minus */) { + pos++; + scanPatternModifiers(setFlags); + if (pos === start3 + 1) { + error2(Diagnostics.Subpattern_flags_must_be_present_when_there_is_a_minus_sign, start3, pos - start3); + } + } + scanExpectedChar(58 /* colon */); + isPreviousTermQuantifiable = true; + break; + } + } else { + numberOfCapturingGroups++; + isPreviousTermQuantifiable = true; + } + scanDisjunction( + /*isInGroup*/ + true + ); + scanExpectedChar(41 /* closeParen */); + break; + case 123 /* openBrace */: + pos++; + const digitsStart = pos; + scanDigits(); + const min2 = tokenValue; + if (!anyUnicodeModeOrNonAnnexB && !min2) { + isPreviousTermQuantifiable = true; + break; + } + if (charCodeChecked(pos) === 44 /* comma */) { + pos++; + scanDigits(); + const max = tokenValue; + if (!min2) { + if (max || charCodeChecked(pos) === 125 /* closeBrace */) { + error2(Diagnostics.Incomplete_quantifier_Digit_expected, digitsStart, 0); + } else { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, start2, 1, String.fromCharCode(ch)); + isPreviousTermQuantifiable = true; + break; + } + } else if (max && Number.parseInt(min2) > Number.parseInt(max) && (anyUnicodeModeOrNonAnnexB || charCodeChecked(pos) === 125 /* closeBrace */)) { + error2(Diagnostics.Numbers_out_of_order_in_quantifier, digitsStart, pos - digitsStart); + } + } else if (!min2) { + if (anyUnicodeModeOrNonAnnexB) { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, start2, 1, String.fromCharCode(ch)); + } + isPreviousTermQuantifiable = true; + break; + } + if (charCodeChecked(pos) !== 125 /* closeBrace */) { + if (anyUnicodeModeOrNonAnnexB) { + error2(Diagnostics._0_expected, pos, 0, String.fromCharCode(125 /* closeBrace */)); + pos--; + } else { + isPreviousTermQuantifiable = true; + break; + } + } + // falls through + case 42 /* asterisk */: + case 43 /* plus */: + case 63 /* question */: + pos++; + if (charCodeChecked(pos) === 63 /* question */) { + pos++; + } + if (!isPreviousTermQuantifiable) { + error2(Diagnostics.There_is_nothing_available_for_repetition, start2, pos - start2); + } + isPreviousTermQuantifiable = false; + break; + case 46 /* dot */: + pos++; + isPreviousTermQuantifiable = true; + break; + case 91 /* openBracket */: + pos++; + if (unicodeSetsMode) { + scanClassSetExpression(); + } else { + scanClassRanges(); + } + scanExpectedChar(93 /* closeBracket */); + isPreviousTermQuantifiable = true; + break; + case 41 /* closeParen */: + if (isInGroup) { + return; + } + // falls through + case 93 /* closeBracket */: + case 125 /* closeBrace */: + if (anyUnicodeModeOrNonAnnexB || ch === 41 /* closeParen */) { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch)); + } + pos++; + isPreviousTermQuantifiable = true; + break; + case 47 /* slash */: + case 124 /* bar */: + return; + default: + scanSourceCharacter(); + isPreviousTermQuantifiable = true; + break; + } + } + } + function scanPatternModifiers(currFlags) { + while (true) { + const ch = codePointChecked(pos); + if (ch === -1 /* EOF */ || !isIdentifierPart(ch, languageVersion)) { + break; + } + const size = charSize(ch); + const flag = characterCodeToRegularExpressionFlag(ch); + if (flag === void 0) { + error2(Diagnostics.Unknown_regular_expression_flag, pos, size); + } else if (currFlags & flag) { + error2(Diagnostics.Duplicate_regular_expression_flag, pos, size); + } else if (!(flag & 28 /* Modifiers */)) { + error2(Diagnostics.This_regular_expression_flag_cannot_be_toggled_within_a_subpattern, pos, size); + } else { + currFlags |= flag; + checkRegularExpressionFlagAvailability(flag, size); + } + pos += size; + } + return currFlags; + } + function scanAtomEscape() { + Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */); + switch (charCodeChecked(pos)) { + case 107 /* k */: + pos++; + if (charCodeChecked(pos) === 60 /* lessThan */) { + pos++; + scanGroupName( + /*isReference*/ + true + ); + scanExpectedChar(62 /* greaterThan */); + } else if (anyUnicodeModeOrNonAnnexB || namedCaptureGroups) { + error2(Diagnostics.k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets, pos - 2, 2); + } + break; + case 113 /* q */: + if (unicodeSetsMode) { + pos++; + error2(Diagnostics.q_is_only_available_inside_character_class, pos - 2, 2); + break; + } + // falls through + default: + Debug.assert(scanCharacterClassEscape() || scanDecimalEscape() || scanCharacterEscape( + /*atomEscape*/ + true + )); + break; + } + } + function scanDecimalEscape() { + Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */); + const ch = charCodeChecked(pos); + if (ch >= 49 /* _1 */ && ch <= 57 /* _9 */) { + const start2 = pos; + scanDigits(); + decimalEscapes = append(decimalEscapes, { pos: start2, end: pos, value: +tokenValue }); + return true; + } + return false; + } + function scanCharacterEscape(atomEscape) { + Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */); + let ch = charCodeChecked(pos); + switch (ch) { + case -1 /* EOF */: + error2(Diagnostics.Undetermined_character_escape, pos - 1, 1); + return "\\"; + case 99 /* c */: + pos++; + ch = charCodeChecked(pos); + if (isASCIILetter(ch)) { + pos++; + return String.fromCharCode(ch & 31); + } + if (anyUnicodeModeOrNonAnnexB) { + error2(Diagnostics.c_must_be_followed_by_an_ASCII_letter, pos - 2, 2); + } else if (atomEscape) { + pos--; + return "\\"; + } + return String.fromCharCode(ch); + case 94 /* caret */: + case 36 /* $ */: + case 47 /* slash */: + case 92 /* backslash */: + case 46 /* dot */: + case 42 /* asterisk */: + case 43 /* plus */: + case 63 /* question */: + case 40 /* openParen */: + case 41 /* closeParen */: + case 91 /* openBracket */: + case 93 /* closeBracket */: + case 123 /* openBrace */: + case 125 /* closeBrace */: + case 124 /* bar */: + pos++; + return String.fromCharCode(ch); + default: + pos--; + return scanEscapeSequence( + 4 /* RegularExpression */ | (annexB ? 8 /* AnnexB */ : 0) | (anyUnicodeMode ? 16 /* AnyUnicodeMode */ : 0) | (atomEscape ? 32 /* AtomEscape */ : 0) + ); + } + } + function scanGroupName(isReference) { + Debug.assertEqual(charCodeUnchecked(pos - 1), 60 /* lessThan */); + tokenStart = pos; + scanIdentifier(codePointChecked(pos), languageVersion); + if (pos === tokenStart) { + error2(Diagnostics.Expected_a_capturing_group_name); + } else if (isReference) { + groupNameReferences = append(groupNameReferences, { pos: tokenStart, end: pos, name: tokenValue }); + } else if ((topNamedCapturingGroupsScope == null ? void 0 : topNamedCapturingGroupsScope.has(tokenValue)) || namedCapturingGroupsScopeStack.some((group2) => group2 == null ? void 0 : group2.has(tokenValue))) { + error2(Diagnostics.Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other, tokenStart, pos - tokenStart); + } else { + topNamedCapturingGroupsScope ?? (topNamedCapturingGroupsScope = /* @__PURE__ */ new Set()); + topNamedCapturingGroupsScope.add(tokenValue); + groupSpecifiers ?? (groupSpecifiers = /* @__PURE__ */ new Set()); + groupSpecifiers.add(tokenValue); + } + } + function isClassContentExit(ch) { + return ch === 93 /* closeBracket */ || ch === -1 /* EOF */ || pos >= end; + } + function scanClassRanges() { + Debug.assertEqual(charCodeUnchecked(pos - 1), 91 /* openBracket */); + if (charCodeChecked(pos) === 94 /* caret */) { + pos++; + } + while (true) { + const ch = charCodeChecked(pos); + if (isClassContentExit(ch)) { + return; + } + const minStart = pos; + const minCharacter = scanClassAtom(); + if (charCodeChecked(pos) === 45 /* minus */) { + pos++; + const ch2 = charCodeChecked(pos); + if (isClassContentExit(ch2)) { + return; + } + if (!minCharacter && anyUnicodeModeOrNonAnnexB) { + error2(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, minStart, pos - 1 - minStart); + } + const maxStart = pos; + const maxCharacter = scanClassAtom(); + if (!maxCharacter && anyUnicodeModeOrNonAnnexB) { + error2(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, maxStart, pos - maxStart); + continue; + } + if (!minCharacter) { + continue; + } + const minCharacterValue = codePointAt(minCharacter, 0); + const maxCharacterValue = codePointAt(maxCharacter, 0); + if (minCharacter.length === charSize(minCharacterValue) && maxCharacter.length === charSize(maxCharacterValue) && minCharacterValue > maxCharacterValue) { + error2(Diagnostics.Range_out_of_order_in_character_class, minStart, pos - minStart); + } + } + } + } + function scanClassSetExpression() { + Debug.assertEqual(charCodeUnchecked(pos - 1), 91 /* openBracket */); + let isCharacterComplement = false; + if (charCodeChecked(pos) === 94 /* caret */) { + pos++; + isCharacterComplement = true; + } + let expressionMayContainStrings = false; + let ch = charCodeChecked(pos); + if (isClassContentExit(ch)) { + return; + } + let start2 = pos; + let operand; + switch (text.slice(pos, pos + 2)) { + // TODO: don't use slice + case "--": + case "&&": + error2(Diagnostics.Expected_a_class_set_operand); + mayContainStrings = false; + break; + default: + operand = scanClassSetOperand(); + break; + } + switch (charCodeChecked(pos)) { + case 45 /* minus */: + if (charCodeChecked(pos + 1) === 45 /* minus */) { + if (isCharacterComplement && mayContainStrings) { + error2(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2); + } + expressionMayContainStrings = mayContainStrings; + scanClassSetSubExpression(3 /* ClassSubtraction */); + mayContainStrings = !isCharacterComplement && expressionMayContainStrings; + return; + } + break; + case 38 /* ampersand */: + if (charCodeChecked(pos + 1) === 38 /* ampersand */) { + scanClassSetSubExpression(2 /* ClassIntersection */); + if (isCharacterComplement && mayContainStrings) { + error2(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2); + } + expressionMayContainStrings = mayContainStrings; + mayContainStrings = !isCharacterComplement && expressionMayContainStrings; + return; + } else { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch)); + } + break; + default: + if (isCharacterComplement && mayContainStrings) { + error2(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, start2, pos - start2); + } + expressionMayContainStrings = mayContainStrings; + break; + } + while (true) { + ch = charCodeChecked(pos); + if (ch === -1 /* EOF */) { + break; + } + switch (ch) { + case 45 /* minus */: + pos++; + ch = charCodeChecked(pos); + if (isClassContentExit(ch)) { + mayContainStrings = !isCharacterComplement && expressionMayContainStrings; + return; + } + if (ch === 45 /* minus */) { + pos++; + error2(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2); + start2 = pos - 2; + operand = text.slice(start2, pos); + continue; + } else { + if (!operand) { + error2(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, start2, pos - 1 - start2); + } + const secondStart = pos; + const secondOperand = scanClassSetOperand(); + if (isCharacterComplement && mayContainStrings) { + error2(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, secondStart, pos - secondStart); + } + expressionMayContainStrings || (expressionMayContainStrings = mayContainStrings); + if (!secondOperand) { + error2(Diagnostics.A_character_class_range_must_not_be_bounded_by_another_character_class, secondStart, pos - secondStart); + break; + } + if (!operand) { + break; + } + const minCharacterValue = codePointAt(operand, 0); + const maxCharacterValue = codePointAt(secondOperand, 0); + if (operand.length === charSize(minCharacterValue) && secondOperand.length === charSize(maxCharacterValue) && minCharacterValue > maxCharacterValue) { + error2(Diagnostics.Range_out_of_order_in_character_class, start2, pos - start2); + } + } + break; + case 38 /* ampersand */: + start2 = pos; + pos++; + if (charCodeChecked(pos) === 38 /* ampersand */) { + pos++; + error2(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2); + if (charCodeChecked(pos) === 38 /* ampersand */) { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch)); + pos++; + } + } else { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos - 1, 1, String.fromCharCode(ch)); + } + operand = text.slice(start2, pos); + continue; + } + if (isClassContentExit(charCodeChecked(pos))) { + break; + } + start2 = pos; + switch (text.slice(pos, pos + 2)) { + // TODO: don't use slice + case "--": + case "&&": + error2(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos, 2); + pos += 2; + operand = text.slice(start2, pos); + break; + default: + operand = scanClassSetOperand(); + break; + } + } + mayContainStrings = !isCharacterComplement && expressionMayContainStrings; + } + function scanClassSetSubExpression(expressionType) { + let expressionMayContainStrings = mayContainStrings; + while (true) { + let ch = charCodeChecked(pos); + if (isClassContentExit(ch)) { + break; + } + switch (ch) { + case 45 /* minus */: + pos++; + if (charCodeChecked(pos) === 45 /* minus */) { + pos++; + if (expressionType !== 3 /* ClassSubtraction */) { + error2(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2); + } + } else { + error2(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 1, 1); + } + break; + case 38 /* ampersand */: + pos++; + if (charCodeChecked(pos) === 38 /* ampersand */) { + pos++; + if (expressionType !== 2 /* ClassIntersection */) { + error2(Diagnostics.Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead, pos - 2, 2); + } + if (charCodeChecked(pos) === 38 /* ampersand */) { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch)); + pos++; + } + } else { + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos - 1, 1, String.fromCharCode(ch)); + } + break; + default: + switch (expressionType) { + case 3 /* ClassSubtraction */: + error2(Diagnostics._0_expected, pos, 0, "--"); + break; + case 2 /* ClassIntersection */: + error2(Diagnostics._0_expected, pos, 0, "&&"); + break; + default: + break; + } + break; + } + ch = charCodeChecked(pos); + if (isClassContentExit(ch)) { + error2(Diagnostics.Expected_a_class_set_operand); + break; + } + scanClassSetOperand(); + expressionMayContainStrings && (expressionMayContainStrings = mayContainStrings); + } + mayContainStrings = expressionMayContainStrings; + } + function scanClassSetOperand() { + mayContainStrings = false; + switch (charCodeChecked(pos)) { + case -1 /* EOF */: + return ""; + case 91 /* openBracket */: + pos++; + scanClassSetExpression(); + scanExpectedChar(93 /* closeBracket */); + return ""; + case 92 /* backslash */: + pos++; + if (scanCharacterClassEscape()) { + return ""; + } else if (charCodeChecked(pos) === 113 /* q */) { + pos++; + if (charCodeChecked(pos) === 123 /* openBrace */) { + pos++; + scanClassStringDisjunctionContents(); + scanExpectedChar(125 /* closeBrace */); + return ""; + } else { + error2(Diagnostics.q_must_be_followed_by_string_alternatives_enclosed_in_braces, pos - 2, 2); + return "q"; + } + } + pos--; + // falls through + default: + return scanClassSetCharacter(); + } + } + function scanClassStringDisjunctionContents() { + Debug.assertEqual(charCodeUnchecked(pos - 1), 123 /* openBrace */); + let characterCount = 0; + while (true) { + const ch = charCodeChecked(pos); + switch (ch) { + case -1 /* EOF */: + return; + case 125 /* closeBrace */: + if (characterCount !== 1) { + mayContainStrings = true; + } + return; + case 124 /* bar */: + if (characterCount !== 1) { + mayContainStrings = true; + } + pos++; + start = pos; + characterCount = 0; + break; + default: + scanClassSetCharacter(); + characterCount++; + break; + } + } + } + function scanClassSetCharacter() { + const ch = charCodeChecked(pos); + if (ch === -1 /* EOF */) { + return ""; + } + if (ch === 92 /* backslash */) { + pos++; + const ch2 = charCodeChecked(pos); + switch (ch2) { + case 98 /* b */: + pos++; + return "\b"; + case 38 /* ampersand */: + case 45 /* minus */: + case 33 /* exclamation */: + case 35 /* hash */: + case 37 /* percent */: + case 44 /* comma */: + case 58 /* colon */: + case 59 /* semicolon */: + case 60 /* lessThan */: + case 61 /* equals */: + case 62 /* greaterThan */: + case 64 /* at */: + case 96 /* backtick */: + case 126 /* tilde */: + pos++; + return String.fromCharCode(ch2); + default: + return scanCharacterEscape( + /*atomEscape*/ + false + ); + } + } else if (ch === charCodeChecked(pos + 1)) { + switch (ch) { + case 38 /* ampersand */: + case 33 /* exclamation */: + case 35 /* hash */: + case 37 /* percent */: + case 42 /* asterisk */: + case 43 /* plus */: + case 44 /* comma */: + case 46 /* dot */: + case 58 /* colon */: + case 59 /* semicolon */: + case 60 /* lessThan */: + case 61 /* equals */: + case 62 /* greaterThan */: + case 63 /* question */: + case 64 /* at */: + case 96 /* backtick */: + case 126 /* tilde */: + error2(Diagnostics.A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backslash, pos, 2); + pos += 2; + return text.substring(pos - 2, pos); + } + } + switch (ch) { + case 47 /* slash */: + case 40 /* openParen */: + case 41 /* closeParen */: + case 91 /* openBracket */: + case 93 /* closeBracket */: + case 123 /* openBrace */: + case 125 /* closeBrace */: + case 45 /* minus */: + case 124 /* bar */: + error2(Diagnostics.Unexpected_0_Did_you_mean_to_escape_it_with_backslash, pos, 1, String.fromCharCode(ch)); + pos++; + return String.fromCharCode(ch); + } + return scanSourceCharacter(); + } + function scanClassAtom() { + if (charCodeChecked(pos) === 92 /* backslash */) { + pos++; + const ch = charCodeChecked(pos); + switch (ch) { + case 98 /* b */: + pos++; + return "\b"; + case 45 /* minus */: + pos++; + return String.fromCharCode(ch); + default: + if (scanCharacterClassEscape()) { + return ""; + } + return scanCharacterEscape( + /*atomEscape*/ + false + ); + } + } else { + return scanSourceCharacter(); + } + } + function scanCharacterClassEscape() { + Debug.assertEqual(charCodeUnchecked(pos - 1), 92 /* backslash */); + let isCharacterComplement = false; + const start2 = pos - 1; + const ch = charCodeChecked(pos); + switch (ch) { + case 100 /* d */: + case 68 /* D */: + case 115 /* s */: + case 83 /* S */: + case 119 /* w */: + case 87 /* W */: + pos++; + return true; + case 80 /* P */: + isCharacterComplement = true; + // falls through + case 112 /* p */: + pos++; + if (charCodeChecked(pos) === 123 /* openBrace */) { + pos++; + const propertyNameOrValueStart = pos; + const propertyNameOrValue = scanWordCharacters(); + if (charCodeChecked(pos) === 61 /* equals */) { + const propertyName = nonBinaryUnicodeProperties.get(propertyNameOrValue); + if (pos === propertyNameOrValueStart) { + error2(Diagnostics.Expected_a_Unicode_property_name); + } else if (propertyName === void 0) { + error2(Diagnostics.Unknown_Unicode_property_name, propertyNameOrValueStart, pos - propertyNameOrValueStart); + const suggestion = getSpellingSuggestion(propertyNameOrValue, nonBinaryUnicodeProperties.keys(), identity); + if (suggestion) { + error2(Diagnostics.Did_you_mean_0, propertyNameOrValueStart, pos - propertyNameOrValueStart, suggestion); + } + } + pos++; + const propertyValueStart = pos; + const propertyValue = scanWordCharacters(); + if (pos === propertyValueStart) { + error2(Diagnostics.Expected_a_Unicode_property_value); + } else if (propertyName !== void 0 && !valuesOfNonBinaryUnicodeProperties[propertyName].has(propertyValue)) { + error2(Diagnostics.Unknown_Unicode_property_value, propertyValueStart, pos - propertyValueStart); + const suggestion = getSpellingSuggestion(propertyValue, valuesOfNonBinaryUnicodeProperties[propertyName], identity); + if (suggestion) { + error2(Diagnostics.Did_you_mean_0, propertyValueStart, pos - propertyValueStart, suggestion); + } + } + } else { + if (pos === propertyNameOrValueStart) { + error2(Diagnostics.Expected_a_Unicode_property_name_or_value); + } else if (binaryUnicodePropertiesOfStrings.has(propertyNameOrValue)) { + if (!unicodeSetsMode) { + error2(Diagnostics.Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_the_Unicode_Sets_v_flag_is_set, propertyNameOrValueStart, pos - propertyNameOrValueStart); + } else if (isCharacterComplement) { + error2(Diagnostics.Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_character_class, propertyNameOrValueStart, pos - propertyNameOrValueStart); + } else { + mayContainStrings = true; + } + } else if (!valuesOfNonBinaryUnicodeProperties.General_Category.has(propertyNameOrValue) && !binaryUnicodeProperties.has(propertyNameOrValue)) { + error2(Diagnostics.Unknown_Unicode_property_name_or_value, propertyNameOrValueStart, pos - propertyNameOrValueStart); + const suggestion = getSpellingSuggestion(propertyNameOrValue, [...valuesOfNonBinaryUnicodeProperties.General_Category, ...binaryUnicodeProperties, ...binaryUnicodePropertiesOfStrings], identity); + if (suggestion) { + error2(Diagnostics.Did_you_mean_0, propertyNameOrValueStart, pos - propertyNameOrValueStart, suggestion); + } + } + } + scanExpectedChar(125 /* closeBrace */); + if (!anyUnicodeMode) { + error2(Diagnostics.Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set, start2, pos - start2); + } + } else if (anyUnicodeModeOrNonAnnexB) { + error2(Diagnostics._0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces, pos - 2, 2, String.fromCharCode(ch)); + } else { + pos--; + return false; + } + return true; + } + return false; + } + function scanWordCharacters() { + let value = ""; + while (true) { + const ch = charCodeChecked(pos); + if (ch === -1 /* EOF */ || !isWordCharacter(ch)) { + break; + } + value += String.fromCharCode(ch); + pos++; + } + return value; + } + function scanSourceCharacter() { + const size = anyUnicodeMode ? charSize(codePointChecked(pos)) : 1; + pos += size; + return size > 0 ? text.substring(pos - size, pos) : ""; + } + function scanExpectedChar(ch) { + if (charCodeChecked(pos) === ch) { + pos++; + } else { + error2(Diagnostics._0_expected, pos, 0, String.fromCharCode(ch)); + } + } + scanDisjunction( + /*isInGroup*/ + false + ); + forEach(groupNameReferences, (reference) => { + if (!(groupSpecifiers == null ? void 0 : groupSpecifiers.has(reference.name))) { + error2(Diagnostics.There_is_no_capturing_group_named_0_in_this_regular_expression, reference.pos, reference.end - reference.pos, reference.name); + if (groupSpecifiers) { + const suggestion = getSpellingSuggestion(reference.name, groupSpecifiers, identity); + if (suggestion) { + error2(Diagnostics.Did_you_mean_0, reference.pos, reference.end - reference.pos, suggestion); + } + } + } + }); + forEach(decimalEscapes, (escape) => { + if (escape.value > numberOfCapturingGroups) { + if (numberOfCapturingGroups) { + error2(Diagnostics.This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos, numberOfCapturingGroups); + } else { + error2(Diagnostics.This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regular_expression, escape.pos, escape.end - escape.pos); + } + } + }); + } + function checkRegularExpressionFlagAvailability(flag, size) { + const availableFrom = regExpFlagToFirstAvailableLanguageVersion.get(flag); + if (availableFrom && languageVersion < availableFrom) { + error2(Diagnostics.This_regular_expression_flag_is_only_available_when_targeting_0_or_later, pos, size, getNameOfScriptTarget(availableFrom)); + } + } + function appendIfCommentDirective(commentDirectives2, text2, commentDirectiveRegEx, lineStart) { + const type = getDirectiveFromComment(text2.trimStart(), commentDirectiveRegEx); + if (type === void 0) { + return commentDirectives2; + } + return append( + commentDirectives2, + { + range: { pos: lineStart, end: pos }, + type + } + ); + } + function getDirectiveFromComment(text2, commentDirectiveRegEx) { + const match = commentDirectiveRegEx.exec(text2); + if (!match) { + return void 0; + } + switch (match[1]) { + case "ts-expect-error": + return 0 /* ExpectError */; + case "ts-ignore": + return 1 /* Ignore */; + } + return void 0; + } + function reScanTemplateToken(isTaggedTemplate) { + pos = tokenStart; + return token = scanTemplateAndSetTokenValue(!isTaggedTemplate); + } + function reScanTemplateHeadOrNoSubstitutionTemplate() { + pos = tokenStart; + return token = scanTemplateAndSetTokenValue( + /*shouldEmitInvalidEscapeError*/ + true + ); + } + function reScanJsxToken(allowMultilineJsxText = true) { + pos = tokenStart = fullStartPos; + return token = scanJsxToken(allowMultilineJsxText); + } + function reScanLessThanToken() { + if (token === 48 /* LessThanLessThanToken */) { + pos = tokenStart + 1; + return token = 30 /* LessThanToken */; + } + return token; + } + function reScanHashToken() { + if (token === 81 /* PrivateIdentifier */) { + pos = tokenStart + 1; + return token = 63 /* HashToken */; + } + return token; + } + function reScanQuestionToken() { + Debug.assert(token === 61 /* QuestionQuestionToken */, "'reScanQuestionToken' should only be called on a '??'"); + pos = tokenStart + 1; + return token = 58 /* QuestionToken */; + } + function scanJsxToken(allowMultilineJsxText = true) { + fullStartPos = tokenStart = pos; + if (pos >= end) { + return token = 1 /* EndOfFileToken */; + } + let char = charCodeUnchecked(pos); + if (char === 60 /* lessThan */) { + if (charCodeUnchecked(pos + 1) === 47 /* slash */) { + pos += 2; + return token = 31 /* LessThanSlashToken */; + } + pos++; + return token = 30 /* LessThanToken */; + } + if (char === 123 /* openBrace */) { + pos++; + return token = 19 /* OpenBraceToken */; + } + let firstNonWhitespace = 0; + while (pos < end) { + char = charCodeUnchecked(pos); + if (char === 123 /* openBrace */) { + break; + } + if (char === 60 /* lessThan */) { + if (isConflictMarkerTrivia(text, pos)) { + pos = scanConflictMarkerTrivia(text, pos, error2); + return token = 7 /* ConflictMarkerTrivia */; + } + break; + } + if (char === 62 /* greaterThan */) { + error2(Diagnostics.Unexpected_token_Did_you_mean_or_gt, pos, 1); + } + if (char === 125 /* closeBrace */) { + error2(Diagnostics.Unexpected_token_Did_you_mean_or_rbrace, pos, 1); + } + if (isLineBreak(char) && firstNonWhitespace === 0) { + firstNonWhitespace = -1; + } else if (!allowMultilineJsxText && isLineBreak(char) && firstNonWhitespace > 0) { + break; + } else if (!isWhiteSpaceLike(char)) { + firstNonWhitespace = pos; + } + pos++; + } + tokenValue = text.substring(fullStartPos, pos); + return firstNonWhitespace === -1 ? 13 /* JsxTextAllWhiteSpaces */ : 12 /* JsxText */; + } + function scanJsxIdentifier() { + if (tokenIsIdentifierOrKeyword(token)) { + while (pos < end) { + const ch = charCodeUnchecked(pos); + if (ch === 45 /* minus */) { + tokenValue += "-"; + pos++; + continue; + } + const oldPos = pos; + tokenValue += scanIdentifierParts(); + if (pos === oldPos) { + break; + } + } + return getIdentifierToken(); + } + return token; + } + function scanJsxAttributeValue() { + fullStartPos = pos; + switch (charCodeUnchecked(pos)) { + case 34 /* doubleQuote */: + case 39 /* singleQuote */: + tokenValue = scanString( + /*jsxAttributeString*/ + true + ); + return token = 11 /* StringLiteral */; + default: + return scan(); + } + } + function reScanJsxAttributeValue() { + pos = tokenStart = fullStartPos; + return scanJsxAttributeValue(); + } + function scanJSDocCommentTextToken(inBackticks) { + fullStartPos = tokenStart = pos; + tokenFlags = 0 /* None */; + if (pos >= end) { + return token = 1 /* EndOfFileToken */; + } + for (let ch = charCodeUnchecked(pos); pos < end && (!isLineBreak(ch) && ch !== 96 /* backtick */); ch = codePointUnchecked(++pos)) { + if (!inBackticks) { + if (ch === 123 /* openBrace */) { + break; + } else if (ch === 64 /* at */ && pos - 1 >= 0 && isWhiteSpaceSingleLine(charCodeUnchecked(pos - 1)) && !(pos + 1 < end && isWhiteSpaceLike(charCodeUnchecked(pos + 1)))) { + break; + } + } + } + if (pos === tokenStart) { + return scanJsDocToken(); + } + tokenValue = text.substring(tokenStart, pos); + return token = 82 /* JSDocCommentTextToken */; + } + function scanJsDocToken() { + fullStartPos = tokenStart = pos; + tokenFlags = 0 /* None */; + if (pos >= end) { + return token = 1 /* EndOfFileToken */; + } + const ch = codePointUnchecked(pos); + pos += charSize(ch); + switch (ch) { + case 9 /* tab */: + case 11 /* verticalTab */: + case 12 /* formFeed */: + case 32 /* space */: + while (pos < end && isWhiteSpaceSingleLine(charCodeUnchecked(pos))) { + pos++; + } + return token = 5 /* WhitespaceTrivia */; + case 64 /* at */: + return token = 60 /* AtToken */; + case 13 /* carriageReturn */: + if (charCodeUnchecked(pos) === 10 /* lineFeed */) { + pos++; + } + // falls through + case 10 /* lineFeed */: + tokenFlags |= 1 /* PrecedingLineBreak */; + return token = 4 /* NewLineTrivia */; + case 42 /* asterisk */: + return token = 42 /* AsteriskToken */; + case 123 /* openBrace */: + return token = 19 /* OpenBraceToken */; + case 125 /* closeBrace */: + return token = 20 /* CloseBraceToken */; + case 91 /* openBracket */: + return token = 23 /* OpenBracketToken */; + case 93 /* closeBracket */: + return token = 24 /* CloseBracketToken */; + case 40 /* openParen */: + return token = 21 /* OpenParenToken */; + case 41 /* closeParen */: + return token = 22 /* CloseParenToken */; + case 60 /* lessThan */: + return token = 30 /* LessThanToken */; + case 62 /* greaterThan */: + return token = 32 /* GreaterThanToken */; + case 61 /* equals */: + return token = 64 /* EqualsToken */; + case 44 /* comma */: + return token = 28 /* CommaToken */; + case 46 /* dot */: + return token = 25 /* DotToken */; + case 96 /* backtick */: + return token = 62 /* BacktickToken */; + case 35 /* hash */: + return token = 63 /* HashToken */; + case 92 /* backslash */: + pos--; + const extendedCookedChar = peekExtendedUnicodeEscape(); + if (extendedCookedChar >= 0 && isIdentifierStart(extendedCookedChar, languageVersion)) { + tokenValue = scanExtendedUnicodeEscape( + /*shouldEmitInvalidEscapeError*/ + true + ) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + const cookedChar = peekUnicodeEscape(); + if (cookedChar >= 0 && isIdentifierStart(cookedChar, languageVersion)) { + pos += 6; + tokenFlags |= 1024 /* UnicodeEscape */; + tokenValue = String.fromCharCode(cookedChar) + scanIdentifierParts(); + return token = getIdentifierToken(); + } + pos++; + return token = 0 /* Unknown */; + } + if (isIdentifierStart(ch, languageVersion)) { + let char = ch; + while (pos < end && isIdentifierPart(char = codePointUnchecked(pos), languageVersion) || char === 45 /* minus */) pos += charSize(char); + tokenValue = text.substring(tokenStart, pos); + if (char === 92 /* backslash */) { + tokenValue += scanIdentifierParts(); + } + return token = getIdentifierToken(); + } else { + return token = 0 /* Unknown */; + } + } + function speculationHelper(callback, isLookahead) { + const savePos = pos; + const saveStartPos = fullStartPos; + const saveTokenPos = tokenStart; + const saveToken = token; + const saveTokenValue = tokenValue; + const saveTokenFlags = tokenFlags; + const result = callback(); + if (!result || isLookahead) { + pos = savePos; + fullStartPos = saveStartPos; + tokenStart = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + tokenFlags = saveTokenFlags; + } + return result; + } + function scanRange(start2, length3, callback) { + const saveEnd = end; + const savePos = pos; + const saveStartPos = fullStartPos; + const saveTokenPos = tokenStart; + const saveToken = token; + const saveTokenValue = tokenValue; + const saveTokenFlags = tokenFlags; + const saveErrorExpectations = commentDirectives; + setText(text, start2, length3); + const result = callback(); + end = saveEnd; + pos = savePos; + fullStartPos = saveStartPos; + tokenStart = saveTokenPos; + token = saveToken; + tokenValue = saveTokenValue; + tokenFlags = saveTokenFlags; + commentDirectives = saveErrorExpectations; + return result; + } + function lookAhead(callback) { + return speculationHelper( + callback, + /*isLookahead*/ + true + ); + } + function tryScan(callback) { + return speculationHelper( + callback, + /*isLookahead*/ + false + ); + } + function getText() { + return text; + } + function clearCommentDirectives() { + commentDirectives = void 0; + } + function setText(newText, start2, length3) { + text = newText || ""; + end = length3 === void 0 ? text.length : start2 + length3; + resetTokenState(start2 || 0); + } + function setOnError(errorCallback) { + onError = errorCallback; + } + function setScriptTarget(scriptTarget) { + languageVersion = scriptTarget; + } + function setLanguageVariant(variant) { + languageVariant = variant; + } + function setScriptKind(kind) { + scriptKind = kind; + } + function setJSDocParsingMode(kind) { + jsDocParsingMode = kind; + } + function resetTokenState(position) { + Debug.assert(position >= 0); + pos = position; + fullStartPos = position; + tokenStart = position; + token = 0 /* Unknown */; + tokenValue = void 0; + tokenFlags = 0 /* None */; + } + function setSkipJsDocLeadingAsterisks(skip) { + skipJsDocLeadingAsterisks += skip ? 1 : -1; + } +} +function codePointAt(s, i) { + return s.codePointAt(i); +} +function charSize(ch) { + if (ch >= 65536) { + return 2; + } + if (ch === -1 /* EOF */) { + return 0; + } + return 1; +} +function utf16EncodeAsStringFallback(codePoint) { + Debug.assert(0 <= codePoint && codePoint <= 1114111); + if (codePoint <= 65535) { + return String.fromCharCode(codePoint); + } + const codeUnit1 = Math.floor((codePoint - 65536) / 1024) + 55296; + const codeUnit2 = (codePoint - 65536) % 1024 + 56320; + return String.fromCharCode(codeUnit1, codeUnit2); +} +var utf16EncodeAsStringWorker = String.fromCodePoint ? (codePoint) => String.fromCodePoint(codePoint) : utf16EncodeAsStringFallback; +function utf16EncodeAsString(codePoint) { + return utf16EncodeAsStringWorker(codePoint); +} +var nonBinaryUnicodeProperties = new Map(Object.entries({ + General_Category: "General_Category", + gc: "General_Category", + Script: "Script", + sc: "Script", + Script_Extensions: "Script_Extensions", + scx: "Script_Extensions" +})); +var binaryUnicodeProperties = /* @__PURE__ */ new Set(["ASCII", "ASCII_Hex_Digit", "AHex", "Alphabetic", "Alpha", "Any", "Assigned", "Bidi_Control", "Bidi_C", "Bidi_Mirrored", "Bidi_M", "Case_Ignorable", "CI", "Cased", "Changes_When_Casefolded", "CWCF", "Changes_When_Casemapped", "CWCM", "Changes_When_Lowercased", "CWL", "Changes_When_NFKC_Casefolded", "CWKCF", "Changes_When_Titlecased", "CWT", "Changes_When_Uppercased", "CWU", "Dash", "Default_Ignorable_Code_Point", "DI", "Deprecated", "Dep", "Diacritic", "Dia", "Emoji", "Emoji_Component", "EComp", "Emoji_Modifier", "EMod", "Emoji_Modifier_Base", "EBase", "Emoji_Presentation", "EPres", "Extended_Pictographic", "ExtPict", "Extender", "Ext", "Grapheme_Base", "Gr_Base", "Grapheme_Extend", "Gr_Ext", "Hex_Digit", "Hex", "IDS_Binary_Operator", "IDSB", "IDS_Trinary_Operator", "IDST", "ID_Continue", "IDC", "ID_Start", "IDS", "Ideographic", "Ideo", "Join_Control", "Join_C", "Logical_Order_Exception", "LOE", "Lowercase", "Lower", "Math", "Noncharacter_Code_Point", "NChar", "Pattern_Syntax", "Pat_Syn", "Pattern_White_Space", "Pat_WS", "Quotation_Mark", "QMark", "Radical", "Regional_Indicator", "RI", "Sentence_Terminal", "STerm", "Soft_Dotted", "SD", "Terminal_Punctuation", "Term", "Unified_Ideograph", "UIdeo", "Uppercase", "Upper", "Variation_Selector", "VS", "White_Space", "space", "XID_Continue", "XIDC", "XID_Start", "XIDS"]); +var binaryUnicodePropertiesOfStrings = /* @__PURE__ */ new Set(["Basic_Emoji", "Emoji_Keycap_Sequence", "RGI_Emoji_Modifier_Sequence", "RGI_Emoji_Flag_Sequence", "RGI_Emoji_Tag_Sequence", "RGI_Emoji_ZWJ_Sequence", "RGI_Emoji"]); +var valuesOfNonBinaryUnicodeProperties = { + General_Category: /* @__PURE__ */ new Set(["C", "Other", "Cc", "Control", "cntrl", "Cf", "Format", "Cn", "Unassigned", "Co", "Private_Use", "Cs", "Surrogate", "L", "Letter", "LC", "Cased_Letter", "Ll", "Lowercase_Letter", "Lm", "Modifier_Letter", "Lo", "Other_Letter", "Lt", "Titlecase_Letter", "Lu", "Uppercase_Letter", "M", "Mark", "Combining_Mark", "Mc", "Spacing_Mark", "Me", "Enclosing_Mark", "Mn", "Nonspacing_Mark", "N", "Number", "Nd", "Decimal_Number", "digit", "Nl", "Letter_Number", "No", "Other_Number", "P", "Punctuation", "punct", "Pc", "Connector_Punctuation", "Pd", "Dash_Punctuation", "Pe", "Close_Punctuation", "Pf", "Final_Punctuation", "Pi", "Initial_Punctuation", "Po", "Other_Punctuation", "Ps", "Open_Punctuation", "S", "Symbol", "Sc", "Currency_Symbol", "Sk", "Modifier_Symbol", "Sm", "Math_Symbol", "So", "Other_Symbol", "Z", "Separator", "Zl", "Line_Separator", "Zp", "Paragraph_Separator", "Zs", "Space_Separator"]), + Script: /* @__PURE__ */ new Set(["Adlm", "Adlam", "Aghb", "Caucasian_Albanian", "Ahom", "Arab", "Arabic", "Armi", "Imperial_Aramaic", "Armn", "Armenian", "Avst", "Avestan", "Bali", "Balinese", "Bamu", "Bamum", "Bass", "Bassa_Vah", "Batk", "Batak", "Beng", "Bengali", "Bhks", "Bhaiksuki", "Bopo", "Bopomofo", "Brah", "Brahmi", "Brai", "Braille", "Bugi", "Buginese", "Buhd", "Buhid", "Cakm", "Chakma", "Cans", "Canadian_Aboriginal", "Cari", "Carian", "Cham", "Cher", "Cherokee", "Chrs", "Chorasmian", "Copt", "Coptic", "Qaac", "Cpmn", "Cypro_Minoan", "Cprt", "Cypriot", "Cyrl", "Cyrillic", "Deva", "Devanagari", "Diak", "Dives_Akuru", "Dogr", "Dogra", "Dsrt", "Deseret", "Dupl", "Duployan", "Egyp", "Egyptian_Hieroglyphs", "Elba", "Elbasan", "Elym", "Elymaic", "Ethi", "Ethiopic", "Geor", "Georgian", "Glag", "Glagolitic", "Gong", "Gunjala_Gondi", "Gonm", "Masaram_Gondi", "Goth", "Gothic", "Gran", "Grantha", "Grek", "Greek", "Gujr", "Gujarati", "Guru", "Gurmukhi", "Hang", "Hangul", "Hani", "Han", "Hano", "Hanunoo", "Hatr", "Hatran", "Hebr", "Hebrew", "Hira", "Hiragana", "Hluw", "Anatolian_Hieroglyphs", "Hmng", "Pahawh_Hmong", "Hmnp", "Nyiakeng_Puachue_Hmong", "Hrkt", "Katakana_Or_Hiragana", "Hung", "Old_Hungarian", "Ital", "Old_Italic", "Java", "Javanese", "Kali", "Kayah_Li", "Kana", "Katakana", "Kawi", "Khar", "Kharoshthi", "Khmr", "Khmer", "Khoj", "Khojki", "Kits", "Khitan_Small_Script", "Knda", "Kannada", "Kthi", "Kaithi", "Lana", "Tai_Tham", "Laoo", "Lao", "Latn", "Latin", "Lepc", "Lepcha", "Limb", "Limbu", "Lina", "Linear_A", "Linb", "Linear_B", "Lisu", "Lyci", "Lycian", "Lydi", "Lydian", "Mahj", "Mahajani", "Maka", "Makasar", "Mand", "Mandaic", "Mani", "Manichaean", "Marc", "Marchen", "Medf", "Medefaidrin", "Mend", "Mende_Kikakui", "Merc", "Meroitic_Cursive", "Mero", "Meroitic_Hieroglyphs", "Mlym", "Malayalam", "Modi", "Mong", "Mongolian", "Mroo", "Mro", "Mtei", "Meetei_Mayek", "Mult", "Multani", "Mymr", "Myanmar", "Nagm", "Nag_Mundari", "Nand", "Nandinagari", "Narb", "Old_North_Arabian", "Nbat", "Nabataean", "Newa", "Nkoo", "Nko", "Nshu", "Nushu", "Ogam", "Ogham", "Olck", "Ol_Chiki", "Orkh", "Old_Turkic", "Orya", "Oriya", "Osge", "Osage", "Osma", "Osmanya", "Ougr", "Old_Uyghur", "Palm", "Palmyrene", "Pauc", "Pau_Cin_Hau", "Perm", "Old_Permic", "Phag", "Phags_Pa", "Phli", "Inscriptional_Pahlavi", "Phlp", "Psalter_Pahlavi", "Phnx", "Phoenician", "Plrd", "Miao", "Prti", "Inscriptional_Parthian", "Rjng", "Rejang", "Rohg", "Hanifi_Rohingya", "Runr", "Runic", "Samr", "Samaritan", "Sarb", "Old_South_Arabian", "Saur", "Saurashtra", "Sgnw", "SignWriting", "Shaw", "Shavian", "Shrd", "Sharada", "Sidd", "Siddham", "Sind", "Khudawadi", "Sinh", "Sinhala", "Sogd", "Sogdian", "Sogo", "Old_Sogdian", "Sora", "Sora_Sompeng", "Soyo", "Soyombo", "Sund", "Sundanese", "Sylo", "Syloti_Nagri", "Syrc", "Syriac", "Tagb", "Tagbanwa", "Takr", "Takri", "Tale", "Tai_Le", "Talu", "New_Tai_Lue", "Taml", "Tamil", "Tang", "Tangut", "Tavt", "Tai_Viet", "Telu", "Telugu", "Tfng", "Tifinagh", "Tglg", "Tagalog", "Thaa", "Thaana", "Thai", "Tibt", "Tibetan", "Tirh", "Tirhuta", "Tnsa", "Tangsa", "Toto", "Ugar", "Ugaritic", "Vaii", "Vai", "Vith", "Vithkuqi", "Wara", "Warang_Citi", "Wcho", "Wancho", "Xpeo", "Old_Persian", "Xsux", "Cuneiform", "Yezi", "Yezidi", "Yiii", "Yi", "Zanb", "Zanabazar_Square", "Zinh", "Inherited", "Qaai", "Zyyy", "Common", "Zzzz", "Unknown"]), + Script_Extensions: void 0 +}; +valuesOfNonBinaryUnicodeProperties.Script_Extensions = valuesOfNonBinaryUnicodeProperties.Script; + +// src/compiler/utilitiesPublic.ts +function isExternalModuleNameRelative(moduleName) { + return pathIsRelative(moduleName) || isRootedDiskPath(moduleName); +} +function sortAndDeduplicateDiagnostics(diagnostics) { + return sortAndDeduplicate(diagnostics, compareDiagnostics, diagnosticsEqualityComparer); +} +var targetToLibMap = /* @__PURE__ */ new Map([ + [99 /* ESNext */, "lib.esnext.full.d.ts"], + [11 /* ES2024 */, "lib.es2024.full.d.ts"], + [10 /* ES2023 */, "lib.es2023.full.d.ts"], + [9 /* ES2022 */, "lib.es2022.full.d.ts"], + [8 /* ES2021 */, "lib.es2021.full.d.ts"], + [7 /* ES2020 */, "lib.es2020.full.d.ts"], + [6 /* ES2019 */, "lib.es2019.full.d.ts"], + [5 /* ES2018 */, "lib.es2018.full.d.ts"], + [4 /* ES2017 */, "lib.es2017.full.d.ts"], + [3 /* ES2016 */, "lib.es2016.full.d.ts"], + [2 /* ES2015 */, "lib.es6.d.ts"] + // We don't use lib.es2015.full.d.ts due to breaking change. +]); +function getDefaultLibFileName(options) { + const target = getEmitScriptTarget(options); + switch (target) { + case 99 /* ESNext */: + case 11 /* ES2024 */: + case 10 /* ES2023 */: + case 9 /* ES2022 */: + case 8 /* ES2021 */: + case 7 /* ES2020 */: + case 6 /* ES2019 */: + case 5 /* ES2018 */: + case 4 /* ES2017 */: + case 3 /* ES2016 */: + case 2 /* ES2015 */: + return targetToLibMap.get(target); + default: + return "lib.d.ts"; + } +} +function textSpanEnd(span) { + return span.start + span.length; +} +function textSpanIsEmpty(span) { + return span.length === 0; +} +function textSpanContainsPosition(span, position) { + return position >= span.start && position < textSpanEnd(span); +} +function textRangeContainsPositionInclusive(range, position) { + return position >= range.pos && position <= range.end; +} +function textSpanContainsTextSpan(span, other) { + return other.start >= span.start && textSpanEnd(other) <= textSpanEnd(span); +} +function textSpanContainsTextRange(span, range) { + return range.pos >= span.start && range.end <= textSpanEnd(span); +} +function textRangeContainsTextSpan(range, span) { + return span.start >= range.pos && textSpanEnd(span) <= range.end; +} +function textSpanOverlapsWith(span, other) { + return textSpanOverlap(span, other) !== void 0; +} +function textSpanOverlap(span1, span2) { + const overlap = textSpanIntersection(span1, span2); + return overlap && overlap.length === 0 ? void 0 : overlap; +} +function textSpanIntersectsWithTextSpan(span, other) { + return decodedTextSpanIntersectsWith(span.start, span.length, other.start, other.length); +} +function textSpanIntersectsWith(span, start, length2) { + return decodedTextSpanIntersectsWith(span.start, span.length, start, length2); +} +function decodedTextSpanIntersectsWith(start1, length1, start2, length2) { + const end1 = start1 + length1; + const end2 = start2 + length2; + return start2 <= end1 && end2 >= start1; +} +function textSpanIntersectsWithPosition(span, position) { + return position <= textSpanEnd(span) && position >= span.start; +} +function textRangeIntersectsWithTextSpan(range, span) { + return textSpanIntersectsWith(span, range.pos, range.end - range.pos); +} +function textSpanIntersection(span1, span2) { + const start = Math.max(span1.start, span2.start); + const end = Math.min(textSpanEnd(span1), textSpanEnd(span2)); + return start <= end ? createTextSpanFromBounds(start, end) : void 0; +} +function normalizeSpans(spans) { + spans = spans.filter((span) => span.length > 0).sort((a, b) => { + return a.start !== b.start ? a.start - b.start : a.length - b.length; + }); + const result = []; + let i = 0; + while (i < spans.length) { + let span = spans[i]; + let j = i + 1; + while (j < spans.length && textSpanIntersectsWithTextSpan(span, spans[j])) { + const start = Math.min(span.start, spans[j].start); + const end = Math.max(textSpanEnd(span), textSpanEnd(spans[j])); + span = createTextSpanFromBounds(start, end); + j++; + } + i = j; + result.push(span); + } + return result; +} +function createTextSpan(start, length2) { + if (start < 0) { + throw new Error("start < 0"); + } + if (length2 < 0) { + throw new Error("length < 0"); + } + return { start, length: length2 }; +} +function createTextSpanFromBounds(start, end) { + return createTextSpan(start, end - start); +} +function textChangeRangeNewSpan(range) { + return createTextSpan(range.span.start, range.newLength); +} +function textChangeRangeIsUnchanged(range) { + return textSpanIsEmpty(range.span) && range.newLength === 0; +} +function createTextChangeRange(span, newLength) { + if (newLength < 0) { + throw new Error("newLength < 0"); + } + return { span, newLength }; +} +var unchangedTextChangeRange = createTextChangeRange(createTextSpan(0, 0), 0); +function collapseTextChangeRangesAcrossMultipleVersions(changes) { + if (changes.length === 0) { + return unchangedTextChangeRange; + } + if (changes.length === 1) { + return changes[0]; + } + const change0 = changes[0]; + let oldStartN = change0.span.start; + let oldEndN = textSpanEnd(change0.span); + let newEndN = oldStartN + change0.newLength; + for (let i = 1; i < changes.length; i++) { + const nextChange = changes[i]; + const oldStart1 = oldStartN; + const oldEnd1 = oldEndN; + const newEnd1 = newEndN; + const oldStart2 = nextChange.span.start; + const oldEnd2 = textSpanEnd(nextChange.span); + const newEnd2 = oldStart2 + nextChange.newLength; + oldStartN = Math.min(oldStart1, oldStart2); + oldEndN = Math.max(oldEnd1, oldEnd1 + (oldEnd2 - newEnd1)); + newEndN = Math.max(newEnd2, newEnd2 + (newEnd1 - oldEnd2)); + } + return createTextChangeRange( + createTextSpanFromBounds(oldStartN, oldEndN), + /*newLength*/ + newEndN - oldStartN + ); +} +function getTypeParameterOwner(d) { + if (d && d.kind === 169 /* TypeParameter */) { + for (let current = d; current; current = current.parent) { + if (isFunctionLike(current) || isClassLike(current) || current.kind === 265 /* InterfaceDeclaration */) { + return current; + } + } + } +} +function isParameterPropertyDeclaration(node, parent2) { + return isParameter(node) && hasSyntacticModifier(node, 31 /* ParameterPropertyModifier */) && parent2.kind === 177 /* Constructor */; +} +function isEmptyBindingPattern(node) { + if (isBindingPattern(node)) { + return every(node.elements, isEmptyBindingElement); + } + return false; +} +function isEmptyBindingElement(node) { + if (isOmittedExpression(node)) { + return true; + } + return isEmptyBindingPattern(node.name); +} +function walkUpBindingElementsAndPatterns(binding) { + let node = binding.parent; + while (isBindingElement(node.parent)) { + node = node.parent.parent; + } + return node.parent; +} +function getCombinedFlags(node, getFlags) { + if (isBindingElement(node)) { + node = walkUpBindingElementsAndPatterns(node); + } + let flags = getFlags(node); + if (node.kind === 261 /* VariableDeclaration */) { + node = node.parent; + } + if (node && node.kind === 262 /* VariableDeclarationList */) { + flags |= getFlags(node); + node = node.parent; + } + if (node && node.kind === 244 /* VariableStatement */) { + flags |= getFlags(node); + } + return flags; +} +function getCombinedModifierFlags(node) { + return getCombinedFlags(node, getEffectiveModifierFlags); +} +function getCombinedNodeFlagsAlwaysIncludeJSDoc(node) { + return getCombinedFlags(node, getEffectiveModifierFlagsAlwaysIncludeJSDoc); +} +function getCombinedNodeFlags(node) { + return getCombinedFlags(node, getNodeFlags); +} +function getNodeFlags(node) { + return node.flags; +} +var supportedLocaleDirectories = ["cs", "de", "es", "fr", "it", "ja", "ko", "pl", "pt-br", "ru", "tr", "zh-cn", "zh-tw"]; +function validateLocaleAndSetLanguage(locale, sys2, errors) { + const lowerCaseLocale = locale.toLowerCase(); + const matchResult = /^([a-z]+)(?:[_-]([a-z]+))?$/.exec(lowerCaseLocale); + if (!matchResult) { + if (errors) { + errors.push(createCompilerDiagnostic(Diagnostics.Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1, "en", "ja-jp")); + } + return; + } + const language = matchResult[1]; + const territory = matchResult[2]; + if (contains(supportedLocaleDirectories, lowerCaseLocale) && !trySetLanguageAndTerritory(language, territory, errors)) { + trySetLanguageAndTerritory( + language, + /*territory*/ + void 0, + errors + ); + } + setUILocale(locale); + function trySetLanguageAndTerritory(language2, territory2, errors2) { + const compilerFilePath = normalizePath(sys2.getExecutingFilePath()); + const containingDirectoryPath = getDirectoryPath(compilerFilePath); + let filePath = combinePaths(containingDirectoryPath, language2); + if (territory2) { + filePath = filePath + "-" + territory2; + } + filePath = sys2.resolvePath(combinePaths(filePath, "diagnosticMessages.generated.json")); + if (!sys2.fileExists(filePath)) { + return false; + } + let fileContents = ""; + try { + fileContents = sys2.readFile(filePath); + } catch { + if (errors2) { + errors2.push(createCompilerDiagnostic(Diagnostics.Unable_to_open_file_0, filePath)); + } + return false; + } + try { + setLocalizedDiagnosticMessages(JSON.parse(fileContents)); + } catch { + if (errors2) { + errors2.push(createCompilerDiagnostic(Diagnostics.Corrupted_locale_file_0, filePath)); + } + return false; + } + return true; + } +} +function getOriginalNode(node, nodeTest) { + if (node) { + while (node.original !== void 0) { + node = node.original; + } + } + if (!node || !nodeTest) { + return node; + } + return nodeTest(node) ? node : void 0; +} +function findAncestor(node, callback) { + while (node) { + const result = callback(node); + if (result === "quit") { + return void 0; + } else if (result) { + return node; + } + node = node.parent; + } + return void 0; +} +function isParseTreeNode(node) { + return (node.flags & 16 /* Synthesized */) === 0; +} +function getParseTreeNode(node, nodeTest) { + if (node === void 0 || isParseTreeNode(node)) { + return node; + } + node = node.original; + while (node) { + if (isParseTreeNode(node)) { + return !nodeTest || nodeTest(node) ? node : void 0; + } + node = node.original; + } +} +function escapeLeadingUnderscores(identifier) { + return identifier.length >= 2 && identifier.charCodeAt(0) === 95 /* _ */ && identifier.charCodeAt(1) === 95 /* _ */ ? "_" + identifier : identifier; +} +function unescapeLeadingUnderscores(identifier) { + const id = identifier; + return id.length >= 3 && id.charCodeAt(0) === 95 /* _ */ && id.charCodeAt(1) === 95 /* _ */ && id.charCodeAt(2) === 95 /* _ */ ? id.substr(1) : id; +} +function idText(identifierOrPrivateName) { + return unescapeLeadingUnderscores(identifierOrPrivateName.escapedText); +} +function identifierToKeywordKind(node) { + const token = stringToToken(node.escapedText); + return token ? tryCast(token, isKeyword) : void 0; +} +function symbolName(symbol) { + if (symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) { + return idText(symbol.valueDeclaration.name); + } + return unescapeLeadingUnderscores(symbol.escapedName); +} +function nameForNamelessJSDocTypedef(declaration) { + const hostNode = declaration.parent.parent; + if (!hostNode) { + return void 0; + } + if (isDeclaration(hostNode)) { + return getDeclarationIdentifier(hostNode); + } + switch (hostNode.kind) { + case 244 /* VariableStatement */: + if (hostNode.declarationList && hostNode.declarationList.declarations[0]) { + return getDeclarationIdentifier(hostNode.declarationList.declarations[0]); + } + break; + case 245 /* ExpressionStatement */: + let expr = hostNode.expression; + if (expr.kind === 227 /* BinaryExpression */ && expr.operatorToken.kind === 64 /* EqualsToken */) { + expr = expr.left; + } + switch (expr.kind) { + case 212 /* PropertyAccessExpression */: + return expr.name; + case 213 /* ElementAccessExpression */: + const arg = expr.argumentExpression; + if (isIdentifier(arg)) { + return arg; + } + } + break; + case 218 /* ParenthesizedExpression */: { + return getDeclarationIdentifier(hostNode.expression); + } + case 257 /* LabeledStatement */: { + if (isDeclaration(hostNode.statement) || isExpression(hostNode.statement)) { + return getDeclarationIdentifier(hostNode.statement); + } + break; + } + } +} +function getDeclarationIdentifier(node) { + const name = getNameOfDeclaration(node); + return name && isIdentifier(name) ? name : void 0; +} +function nodeHasName(statement, name) { + if (isNamedDeclaration(statement) && isIdentifier(statement.name) && idText(statement.name) === idText(name)) { + return true; + } + if (isVariableStatement(statement) && some(statement.declarationList.declarations, (d) => nodeHasName(d, name))) { + return true; + } + return false; +} +function getNameOfJSDocTypedef(declaration) { + return declaration.name || nameForNamelessJSDocTypedef(declaration); +} +function isNamedDeclaration(node) { + return !!node.name; +} +function getNonAssignedNameOfDeclaration(declaration) { + switch (declaration.kind) { + case 80 /* Identifier */: + return declaration; + case 349 /* JSDocPropertyTag */: + case 342 /* JSDocParameterTag */: { + const { name } = declaration; + if (name.kind === 167 /* QualifiedName */) { + return name.right; + } + break; + } + case 214 /* CallExpression */: + case 227 /* BinaryExpression */: { + const expr2 = declaration; + switch (getAssignmentDeclarationKind(expr2)) { + case 1 /* ExportsProperty */: + case 4 /* ThisProperty */: + case 5 /* Property */: + case 3 /* PrototypeProperty */: + return getElementOrPropertyAccessArgumentExpressionOrName(expr2.left); + case 7 /* ObjectDefinePropertyValue */: + case 8 /* ObjectDefinePropertyExports */: + case 9 /* ObjectDefinePrototypeProperty */: + return expr2.arguments[1]; + default: + return void 0; + } + } + case 347 /* JSDocTypedefTag */: + return getNameOfJSDocTypedef(declaration); + case 341 /* JSDocEnumTag */: + return nameForNamelessJSDocTypedef(declaration); + case 278 /* ExportAssignment */: { + const { expression } = declaration; + return isIdentifier(expression) ? expression : void 0; + } + case 213 /* ElementAccessExpression */: + const expr = declaration; + if (isBindableStaticElementAccessExpression(expr)) { + return expr.argumentExpression; + } + } + return declaration.name; +} +function getNameOfDeclaration(declaration) { + if (declaration === void 0) return void 0; + return getNonAssignedNameOfDeclaration(declaration) || (isFunctionExpression(declaration) || isArrowFunction(declaration) || isClassExpression(declaration) ? getAssignedName(declaration) : void 0); +} +function getAssignedName(node) { + if (!node.parent) { + return void 0; + } else if (isPropertyAssignment(node.parent) || isBindingElement(node.parent)) { + return node.parent.name; + } else if (isBinaryExpression(node.parent) && node === node.parent.right) { + if (isIdentifier(node.parent.left)) { + return node.parent.left; + } else if (isAccessExpression(node.parent.left)) { + return getElementOrPropertyAccessArgumentExpressionOrName(node.parent.left); + } + } else if (isVariableDeclaration(node.parent) && isIdentifier(node.parent.name)) { + return node.parent.name; + } +} +function getDecorators(node) { + if (hasDecorators(node)) { + return filter(node.modifiers, isDecorator); + } +} +function getModifiers(node) { + if (hasSyntacticModifier(node, 98303 /* Modifier */)) { + return filter(node.modifiers, isModifier); + } +} +function getJSDocParameterTagsWorker(param, noCache) { + if (param.name) { + if (isIdentifier(param.name)) { + const name = param.name.escapedText; + return getJSDocTagsWorker(param.parent, noCache).filter((tag) => isJSDocParameterTag(tag) && isIdentifier(tag.name) && tag.name.escapedText === name); + } else { + const i = param.parent.parameters.indexOf(param); + Debug.assert(i > -1, "Parameters should always be in their parents' parameter list"); + const paramTags = getJSDocTagsWorker(param.parent, noCache).filter(isJSDocParameterTag); + if (i < paramTags.length) { + return [paramTags[i]]; + } + } + } + return emptyArray; +} +function getJSDocParameterTags(param) { + return getJSDocParameterTagsWorker( + param, + /*noCache*/ + false + ); +} +function getJSDocParameterTagsNoCache(param) { + return getJSDocParameterTagsWorker( + param, + /*noCache*/ + true + ); +} +function getJSDocTypeParameterTagsWorker(param, noCache) { + const name = param.name.escapedText; + return getJSDocTagsWorker(param.parent, noCache).filter((tag) => isJSDocTemplateTag(tag) && tag.typeParameters.some((tp) => tp.name.escapedText === name)); +} +function getJSDocTypeParameterTags(param) { + return getJSDocTypeParameterTagsWorker( + param, + /*noCache*/ + false + ); +} +function getJSDocTypeParameterTagsNoCache(param) { + return getJSDocTypeParameterTagsWorker( + param, + /*noCache*/ + true + ); +} +function hasJSDocParameterTags(node) { + return !!getFirstJSDocTag(node, isJSDocParameterTag); +} +function getJSDocAugmentsTag(node) { + return getFirstJSDocTag(node, isJSDocAugmentsTag); +} +function getJSDocImplementsTags(node) { + return getAllJSDocTags(node, isJSDocImplementsTag); +} +function getJSDocClassTag(node) { + return getFirstJSDocTag(node, isJSDocClassTag); +} +function getJSDocPublicTag(node) { + return getFirstJSDocTag(node, isJSDocPublicTag); +} +function getJSDocPublicTagNoCache(node) { + return getFirstJSDocTag( + node, + isJSDocPublicTag, + /*noCache*/ + true + ); +} +function getJSDocPrivateTag(node) { + return getFirstJSDocTag(node, isJSDocPrivateTag); +} +function getJSDocPrivateTagNoCache(node) { + return getFirstJSDocTag( + node, + isJSDocPrivateTag, + /*noCache*/ + true + ); +} +function getJSDocProtectedTag(node) { + return getFirstJSDocTag(node, isJSDocProtectedTag); +} +function getJSDocProtectedTagNoCache(node) { + return getFirstJSDocTag( + node, + isJSDocProtectedTag, + /*noCache*/ + true + ); +} +function getJSDocReadonlyTag(node) { + return getFirstJSDocTag(node, isJSDocReadonlyTag); +} +function getJSDocReadonlyTagNoCache(node) { + return getFirstJSDocTag( + node, + isJSDocReadonlyTag, + /*noCache*/ + true + ); +} +function getJSDocOverrideTagNoCache(node) { + return getFirstJSDocTag( + node, + isJSDocOverrideTag, + /*noCache*/ + true + ); +} +function getJSDocDeprecatedTag(node) { + return getFirstJSDocTag(node, isJSDocDeprecatedTag); +} +function getJSDocDeprecatedTagNoCache(node) { + return getFirstJSDocTag( + node, + isJSDocDeprecatedTag, + /*noCache*/ + true + ); +} +function getJSDocEnumTag(node) { + return getFirstJSDocTag(node, isJSDocEnumTag); +} +function getJSDocThisTag(node) { + return getFirstJSDocTag(node, isJSDocThisTag); +} +function getJSDocReturnTag(node) { + return getFirstJSDocTag(node, isJSDocReturnTag); +} +function getJSDocTemplateTag(node) { + return getFirstJSDocTag(node, isJSDocTemplateTag); +} +function getJSDocSatisfiesTag(node) { + return getFirstJSDocTag(node, isJSDocSatisfiesTag); +} +function getJSDocTypeTag(node) { + const tag = getFirstJSDocTag(node, isJSDocTypeTag); + if (tag && tag.typeExpression && tag.typeExpression.type) { + return tag; + } + return void 0; +} +function getJSDocType(node) { + let tag = getFirstJSDocTag(node, isJSDocTypeTag); + if (!tag && isParameter(node)) { + tag = find(getJSDocParameterTags(node), (tag2) => !!tag2.typeExpression); + } + return tag && tag.typeExpression && tag.typeExpression.type; +} +function getJSDocReturnType(node) { + const returnTag = getJSDocReturnTag(node); + if (returnTag && returnTag.typeExpression) { + return returnTag.typeExpression.type; + } + const typeTag = getJSDocTypeTag(node); + if (typeTag && typeTag.typeExpression) { + const type = typeTag.typeExpression.type; + if (isTypeLiteralNode(type)) { + const sig = find(type.members, isCallSignatureDeclaration); + return sig && sig.type; + } + if (isFunctionTypeNode(type) || isJSDocFunctionType(type)) { + return type.type; + } + } +} +function getJSDocTagsWorker(node, noCache) { + var _a; + if (!canHaveJSDoc(node)) return emptyArray; + let tags = (_a = node.jsDoc) == null ? void 0 : _a.jsDocCache; + if (tags === void 0 || noCache) { + const comments = getJSDocCommentsAndTags(node, noCache); + Debug.assert(comments.length < 2 || comments[0] !== comments[1]); + tags = flatMap(comments, (j) => isJSDoc(j) ? j.tags : j); + if (!noCache) { + node.jsDoc ?? (node.jsDoc = []); + node.jsDoc.jsDocCache = tags; + } + } + return tags; +} +function getJSDocTags(node) { + return getJSDocTagsWorker( + node, + /*noCache*/ + false + ); +} +function getFirstJSDocTag(node, predicate, noCache) { + return find(getJSDocTagsWorker(node, noCache), predicate); +} +function getAllJSDocTags(node, predicate) { + return getJSDocTags(node).filter(predicate); +} +function getAllJSDocTagsOfKind(node, kind) { + return getJSDocTags(node).filter((doc) => doc.kind === kind); +} +function getTextOfJSDocComment(comment) { + return typeof comment === "string" ? comment : comment == null ? void 0 : comment.map((c) => c.kind === 322 /* JSDocText */ ? c.text : formatJSDocLink(c)).join(""); +} +function formatJSDocLink(link) { + const kind = link.kind === 325 /* JSDocLink */ ? "link" : link.kind === 326 /* JSDocLinkCode */ ? "linkcode" : "linkplain"; + const name = link.name ? entityNameToString(link.name) : ""; + const space = link.name && (link.text === "" || link.text.startsWith("://")) ? "" : " "; + return `{@${kind} ${name}${space}${link.text}}`; +} +function getEffectiveTypeParameterDeclarations(node) { + if (isJSDocSignature(node)) { + if (isJSDocOverloadTag(node.parent)) { + const jsDoc = getJSDocRoot(node.parent); + if (jsDoc && length(jsDoc.tags)) { + return flatMap(jsDoc.tags, (tag) => isJSDocTemplateTag(tag) ? tag.typeParameters : void 0); + } + } + return emptyArray; + } + if (isJSDocTypeAlias(node)) { + Debug.assert(node.parent.kind === 321 /* JSDoc */); + return flatMap(node.parent.tags, (tag) => isJSDocTemplateTag(tag) ? tag.typeParameters : void 0); + } + if (node.typeParameters) { + return node.typeParameters; + } + if (canHaveIllegalTypeParameters(node) && node.typeParameters) { + return node.typeParameters; + } + if (isInJSFile(node)) { + const decls = getJSDocTypeParameterDeclarations(node); + if (decls.length) { + return decls; + } + const typeTag = getJSDocType(node); + if (typeTag && isFunctionTypeNode(typeTag) && typeTag.typeParameters) { + return typeTag.typeParameters; + } + } + return emptyArray; +} +function getEffectiveConstraintOfTypeParameter(node) { + return node.constraint ? node.constraint : isJSDocTemplateTag(node.parent) && node === node.parent.typeParameters[0] ? node.parent.constraint : void 0; +} +function isMemberName(node) { + return node.kind === 80 /* Identifier */ || node.kind === 81 /* PrivateIdentifier */; +} +function isGetOrSetAccessorDeclaration(node) { + return node.kind === 179 /* SetAccessor */ || node.kind === 178 /* GetAccessor */; +} +function isPropertyAccessChain(node) { + return isPropertyAccessExpression(node) && !!(node.flags & 64 /* OptionalChain */); +} +function isElementAccessChain(node) { + return isElementAccessExpression(node) && !!(node.flags & 64 /* OptionalChain */); +} +function isCallChain(node) { + return isCallExpression(node) && !!(node.flags & 64 /* OptionalChain */); +} +function isOptionalChain(node) { + const kind = node.kind; + return !!(node.flags & 64 /* OptionalChain */) && (kind === 212 /* PropertyAccessExpression */ || kind === 213 /* ElementAccessExpression */ || kind === 214 /* CallExpression */ || kind === 236 /* NonNullExpression */); +} +function isOptionalChainRoot(node) { + return isOptionalChain(node) && !isNonNullExpression(node) && !!node.questionDotToken; +} +function isExpressionOfOptionalChainRoot(node) { + return isOptionalChainRoot(node.parent) && node.parent.expression === node; +} +function isOutermostOptionalChain(node) { + return !isOptionalChain(node.parent) || isOptionalChainRoot(node.parent) || node !== node.parent.expression; +} +function isNullishCoalesce(node) { + return node.kind === 227 /* BinaryExpression */ && node.operatorToken.kind === 61 /* QuestionQuestionToken */; +} +function isConstTypeReference(node) { + return isTypeReferenceNode(node) && isIdentifier(node.typeName) && node.typeName.escapedText === "const" && !node.typeArguments; +} +function skipPartiallyEmittedExpressions(node) { + return skipOuterExpressions(node, 8 /* PartiallyEmittedExpressions */); +} +function isNonNullChain(node) { + return isNonNullExpression(node) && !!(node.flags & 64 /* OptionalChain */); +} +function isBreakOrContinueStatement(node) { + return node.kind === 253 /* BreakStatement */ || node.kind === 252 /* ContinueStatement */; +} +function isNamedExportBindings(node) { + return node.kind === 281 /* NamespaceExport */ || node.kind === 280 /* NamedExports */; +} +function isJSDocPropertyLikeTag(node) { + return node.kind === 349 /* JSDocPropertyTag */ || node.kind === 342 /* JSDocParameterTag */; +} +function isNodeKind(kind) { + return kind >= 167 /* FirstNode */; +} +function isTokenKind(kind) { + return kind >= 0 /* FirstToken */ && kind <= 166 /* LastToken */; +} +function isToken(n) { + return isTokenKind(n.kind); +} +function isNodeArray(array) { + return hasProperty(array, "pos") && hasProperty(array, "end"); +} +function isLiteralKind(kind) { + return 9 /* FirstLiteralToken */ <= kind && kind <= 15 /* LastLiteralToken */; +} +function isLiteralExpression(node) { + return isLiteralKind(node.kind); +} +function isLiteralExpressionOfObject(node) { + switch (node.kind) { + case 211 /* ObjectLiteralExpression */: + case 210 /* ArrayLiteralExpression */: + case 14 /* RegularExpressionLiteral */: + case 219 /* FunctionExpression */: + case 232 /* ClassExpression */: + return true; + } + return false; +} +function isTemplateLiteralKind(kind) { + return 15 /* FirstTemplateToken */ <= kind && kind <= 18 /* LastTemplateToken */; +} +function isTemplateLiteralToken(node) { + return isTemplateLiteralKind(node.kind); +} +function isTemplateMiddleOrTemplateTail(node) { + const kind = node.kind; + return kind === 17 /* TemplateMiddle */ || kind === 18 /* TemplateTail */; +} +function isImportOrExportSpecifier(node) { + return isImportSpecifier(node) || isExportSpecifier(node); +} +function isTypeOnlyImportDeclaration(node) { + switch (node.kind) { + case 277 /* ImportSpecifier */: + return node.isTypeOnly || node.parent.parent.phaseModifier === 156 /* TypeKeyword */; + case 275 /* NamespaceImport */: + return node.parent.phaseModifier === 156 /* TypeKeyword */; + case 274 /* ImportClause */: + return node.phaseModifier === 156 /* TypeKeyword */; + case 272 /* ImportEqualsDeclaration */: + return node.isTypeOnly; + } + return false; +} +function isTypeOnlyExportDeclaration(node) { + switch (node.kind) { + case 282 /* ExportSpecifier */: + return node.isTypeOnly || node.parent.parent.isTypeOnly; + case 279 /* ExportDeclaration */: + return node.isTypeOnly && !!node.moduleSpecifier && !node.exportClause; + case 281 /* NamespaceExport */: + return node.parent.isTypeOnly; + } + return false; +} +function isTypeOnlyImportOrExportDeclaration(node) { + return isTypeOnlyImportDeclaration(node) || isTypeOnlyExportDeclaration(node); +} +function isPartOfTypeOnlyImportOrExportDeclaration(node) { + return findAncestor(node, isTypeOnlyImportOrExportDeclaration) !== void 0; +} +function isStringTextContainingNode(node) { + return node.kind === 11 /* StringLiteral */ || isTemplateLiteralKind(node.kind); +} +function isImportAttributeName(node) { + return isStringLiteral(node) || isIdentifier(node); +} +function isGeneratedIdentifier(node) { + var _a; + return isIdentifier(node) && ((_a = node.emitNode) == null ? void 0 : _a.autoGenerate) !== void 0; +} +function isGeneratedPrivateIdentifier(node) { + var _a; + return isPrivateIdentifier(node) && ((_a = node.emitNode) == null ? void 0 : _a.autoGenerate) !== void 0; +} +function isFileLevelReservedGeneratedIdentifier(node) { + const flags = node.emitNode.autoGenerate.flags; + return !!(flags & 32 /* FileLevel */) && !!(flags & 16 /* Optimistic */) && !!(flags & 8 /* ReservedInNestedScopes */); +} +function isPrivateIdentifierClassElementDeclaration(node) { + return (isPropertyDeclaration(node) || isMethodOrAccessor(node)) && isPrivateIdentifier(node.name); +} +function isPrivateIdentifierPropertyAccessExpression(node) { + return isPropertyAccessExpression(node) && isPrivateIdentifier(node.name); +} +function isModifierKind(token) { + switch (token) { + case 128 /* AbstractKeyword */: + case 129 /* AccessorKeyword */: + case 134 /* AsyncKeyword */: + case 87 /* ConstKeyword */: + case 138 /* DeclareKeyword */: + case 90 /* DefaultKeyword */: + case 95 /* ExportKeyword */: + case 103 /* InKeyword */: + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 148 /* ReadonlyKeyword */: + case 126 /* StaticKeyword */: + case 147 /* OutKeyword */: + case 164 /* OverrideKeyword */: + return true; + } + return false; +} +function isParameterPropertyModifier(kind) { + return !!(modifierToFlag(kind) & 31 /* ParameterPropertyModifier */); +} +function isClassMemberModifier(idToken) { + return isParameterPropertyModifier(idToken) || idToken === 126 /* StaticKeyword */ || idToken === 164 /* OverrideKeyword */ || idToken === 129 /* AccessorKeyword */; +} +function isModifier(node) { + return isModifierKind(node.kind); +} +function isEntityName(node) { + const kind = node.kind; + return kind === 167 /* QualifiedName */ || kind === 80 /* Identifier */; +} +function isPropertyName(node) { + const kind = node.kind; + return kind === 80 /* Identifier */ || kind === 81 /* PrivateIdentifier */ || kind === 11 /* StringLiteral */ || kind === 9 /* NumericLiteral */ || kind === 168 /* ComputedPropertyName */; +} +function isBindingName(node) { + const kind = node.kind; + return kind === 80 /* Identifier */ || kind === 207 /* ObjectBindingPattern */ || kind === 208 /* ArrayBindingPattern */; +} +function isFunctionLike(node) { + return !!node && isFunctionLikeKind(node.kind); +} +function isFunctionLikeOrClassStaticBlockDeclaration(node) { + return !!node && (isFunctionLikeKind(node.kind) || isClassStaticBlockDeclaration(node)); +} +function isFunctionLikeDeclaration(node) { + return node && isFunctionLikeDeclarationKind(node.kind); +} +function isBooleanLiteral(node) { + return node.kind === 112 /* TrueKeyword */ || node.kind === 97 /* FalseKeyword */; +} +function isFunctionLikeDeclarationKind(kind) { + switch (kind) { + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return true; + default: + return false; + } +} +function isFunctionLikeKind(kind) { + switch (kind) { + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 324 /* JSDocSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + case 185 /* FunctionType */: + case 318 /* JSDocFunctionType */: + case 186 /* ConstructorType */: + return true; + default: + return isFunctionLikeDeclarationKind(kind); + } +} +function isFunctionOrModuleBlock(node) { + return isSourceFile(node) || isModuleBlock(node) || isBlock(node) && isFunctionLike(node.parent); +} +function isClassElement(node) { + const kind = node.kind; + return kind === 177 /* Constructor */ || kind === 173 /* PropertyDeclaration */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */ || kind === 182 /* IndexSignature */ || kind === 176 /* ClassStaticBlockDeclaration */ || kind === 241 /* SemicolonClassElement */; +} +function isClassLike(node) { + return node && (node.kind === 264 /* ClassDeclaration */ || node.kind === 232 /* ClassExpression */); +} +function isAccessor(node) { + return node && (node.kind === 178 /* GetAccessor */ || node.kind === 179 /* SetAccessor */); +} +function isAutoAccessorPropertyDeclaration(node) { + return isPropertyDeclaration(node) && hasAccessorModifier(node); +} +function isClassInstanceProperty(node) { + if (isInJSFile(node) && isExpandoPropertyDeclaration(node)) { + return (!isBindableStaticAccessExpression(node) || !isPrototypeAccess(node.expression)) && !isBindableStaticNameExpression( + node, + /*excludeThisKeyword*/ + true + ); + } + return node.parent && isClassLike(node.parent) && isPropertyDeclaration(node) && !hasAccessorModifier(node); +} +function isMethodOrAccessor(node) { + switch (node.kind) { + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return true; + default: + return false; + } +} +function isModifierLike(node) { + return isModifier(node) || isDecorator(node); +} +function isTypeElement(node) { + const kind = node.kind; + return kind === 181 /* ConstructSignature */ || kind === 180 /* CallSignature */ || kind === 172 /* PropertySignature */ || kind === 174 /* MethodSignature */ || kind === 182 /* IndexSignature */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */ || kind === 355 /* NotEmittedTypeElement */; +} +function isClassOrTypeElement(node) { + return isTypeElement(node) || isClassElement(node); +} +function isObjectLiteralElementLike(node) { + const kind = node.kind; + return kind === 304 /* PropertyAssignment */ || kind === 305 /* ShorthandPropertyAssignment */ || kind === 306 /* SpreadAssignment */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */; +} +function isTypeNode(node) { + return isTypeNodeKind(node.kind); +} +function isFunctionOrConstructorTypeNode(node) { + switch (node.kind) { + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + return true; + } + return false; +} +function isBindingPattern(node) { + if (node) { + const kind = node.kind; + return kind === 208 /* ArrayBindingPattern */ || kind === 207 /* ObjectBindingPattern */; + } + return false; +} +function isAssignmentPattern(node) { + const kind = node.kind; + return kind === 210 /* ArrayLiteralExpression */ || kind === 211 /* ObjectLiteralExpression */; +} +function isArrayBindingElement(node) { + const kind = node.kind; + return kind === 209 /* BindingElement */ || kind === 233 /* OmittedExpression */; +} +function isDeclarationBindingElement(bindingElement) { + switch (bindingElement.kind) { + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 209 /* BindingElement */: + return true; + } + return false; +} +function isBindingOrAssignmentElement(node) { + return isVariableDeclaration(node) || isParameter(node) || isObjectBindingOrAssignmentElement(node) || isArrayBindingOrAssignmentElement(node); +} +function isBindingOrAssignmentPattern(node) { + return isObjectBindingOrAssignmentPattern(node) || isArrayBindingOrAssignmentPattern(node); +} +function isObjectBindingOrAssignmentPattern(node) { + switch (node.kind) { + case 207 /* ObjectBindingPattern */: + case 211 /* ObjectLiteralExpression */: + return true; + } + return false; +} +function isObjectBindingOrAssignmentElement(node) { + switch (node.kind) { + case 209 /* BindingElement */: + case 304 /* PropertyAssignment */: + // AssignmentProperty + case 305 /* ShorthandPropertyAssignment */: + // AssignmentProperty + case 306 /* SpreadAssignment */: + return true; + } + return false; +} +function isArrayBindingOrAssignmentPattern(node) { + switch (node.kind) { + case 208 /* ArrayBindingPattern */: + case 210 /* ArrayLiteralExpression */: + return true; + } + return false; +} +function isArrayBindingOrAssignmentElement(node) { + switch (node.kind) { + case 209 /* BindingElement */: + case 233 /* OmittedExpression */: + // Elision + case 231 /* SpreadElement */: + // AssignmentRestElement + case 210 /* ArrayLiteralExpression */: + // ArrayAssignmentPattern + case 211 /* ObjectLiteralExpression */: + // ObjectAssignmentPattern + case 80 /* Identifier */: + // DestructuringAssignmentTarget + case 212 /* PropertyAccessExpression */: + // DestructuringAssignmentTarget + case 213 /* ElementAccessExpression */: + return true; + } + return isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + ); +} +function isPropertyAccessOrQualifiedNameOrImportTypeNode(node) { + const kind = node.kind; + return kind === 212 /* PropertyAccessExpression */ || kind === 167 /* QualifiedName */ || kind === 206 /* ImportType */; +} +function isPropertyAccessOrQualifiedName(node) { + const kind = node.kind; + return kind === 212 /* PropertyAccessExpression */ || kind === 167 /* QualifiedName */; +} +function isCallLikeOrFunctionLikeExpression(node) { + return isCallLikeExpression(node) || isFunctionExpressionOrArrowFunction(node); +} +function isCallLikeExpression(node) { + switch (node.kind) { + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 216 /* TaggedTemplateExpression */: + case 171 /* Decorator */: + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + case 290 /* JsxOpeningFragment */: + return true; + case 227 /* BinaryExpression */: + return node.operatorToken.kind === 104 /* InstanceOfKeyword */; + default: + return false; + } +} +function isCallOrNewExpression(node) { + return node.kind === 214 /* CallExpression */ || node.kind === 215 /* NewExpression */; +} +function isTemplateLiteral(node) { + const kind = node.kind; + return kind === 229 /* TemplateExpression */ || kind === 15 /* NoSubstitutionTemplateLiteral */; +} +function isLeftHandSideExpression(node) { + return isLeftHandSideExpressionKind(skipPartiallyEmittedExpressions(node).kind); +} +function isLeftHandSideExpressionKind(kind) { + switch (kind) { + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + case 215 /* NewExpression */: + case 214 /* CallExpression */: + case 285 /* JsxElement */: + case 286 /* JsxSelfClosingElement */: + case 289 /* JsxFragment */: + case 216 /* TaggedTemplateExpression */: + case 210 /* ArrayLiteralExpression */: + case 218 /* ParenthesizedExpression */: + case 211 /* ObjectLiteralExpression */: + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + // technically this is only an Expression if it's in a `#field in expr` BinaryExpression + case 14 /* RegularExpressionLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 229 /* TemplateExpression */: + case 97 /* FalseKeyword */: + case 106 /* NullKeyword */: + case 110 /* ThisKeyword */: + case 112 /* TrueKeyword */: + case 108 /* SuperKeyword */: + case 236 /* NonNullExpression */: + case 234 /* ExpressionWithTypeArguments */: + case 237 /* MetaProperty */: + case 102 /* ImportKeyword */: + // technically this is only an Expression if it's in a CallExpression + case 283 /* MissingDeclaration */: + return true; + default: + return false; + } +} +function isUnaryExpression(node) { + return isUnaryExpressionKind(skipPartiallyEmittedExpressions(node).kind); +} +function isUnaryExpressionKind(kind) { + switch (kind) { + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + case 221 /* DeleteExpression */: + case 222 /* TypeOfExpression */: + case 223 /* VoidExpression */: + case 224 /* AwaitExpression */: + case 217 /* TypeAssertionExpression */: + return true; + default: + return isLeftHandSideExpressionKind(kind); + } +} +function isUnaryExpressionWithWrite(expr) { + switch (expr.kind) { + case 226 /* PostfixUnaryExpression */: + return true; + case 225 /* PrefixUnaryExpression */: + return expr.operator === 46 /* PlusPlusToken */ || expr.operator === 47 /* MinusMinusToken */; + default: + return false; + } +} +function isLiteralTypeLiteral(node) { + switch (node.kind) { + case 106 /* NullKeyword */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 225 /* PrefixUnaryExpression */: + return true; + default: + return isLiteralExpression(node); + } +} +function isExpression(node) { + return isExpressionKind(skipPartiallyEmittedExpressions(node).kind); +} +function isExpressionKind(kind) { + switch (kind) { + case 228 /* ConditionalExpression */: + case 230 /* YieldExpression */: + case 220 /* ArrowFunction */: + case 227 /* BinaryExpression */: + case 231 /* SpreadElement */: + case 235 /* AsExpression */: + case 233 /* OmittedExpression */: + case 357 /* CommaListExpression */: + case 356 /* PartiallyEmittedExpression */: + case 239 /* SatisfiesExpression */: + return true; + default: + return isUnaryExpressionKind(kind); + } +} +function isAssertionExpression(node) { + const kind = node.kind; + return kind === 217 /* TypeAssertionExpression */ || kind === 235 /* AsExpression */; +} +function isIterationStatement(node, lookInLabeledStatements) { + switch (node.kind) { + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + return true; + case 257 /* LabeledStatement */: + return lookInLabeledStatements && isIterationStatement(node.statement, lookInLabeledStatements); + } + return false; +} +function isScopeMarker(node) { + return isExportAssignment(node) || isExportDeclaration(node); +} +function hasScopeMarker(statements) { + return some(statements, isScopeMarker); +} +function needsScopeMarker(result) { + return !isAnyImportOrReExport(result) && !isExportAssignment(result) && !hasSyntacticModifier(result, 32 /* Export */) && !isAmbientModule(result); +} +function isExternalModuleIndicator(result) { + return isAnyImportOrReExport(result) || isExportAssignment(result) || hasSyntacticModifier(result, 32 /* Export */); +} +function isForInOrOfStatement(node) { + return node.kind === 250 /* ForInStatement */ || node.kind === 251 /* ForOfStatement */; +} +function isConciseBody(node) { + return isBlock(node) || isExpression(node); +} +function isFunctionBody(node) { + return isBlock(node); +} +function isForInitializer(node) { + return isVariableDeclarationList(node) || isExpression(node); +} +function isModuleBody(node) { + const kind = node.kind; + return kind === 269 /* ModuleBlock */ || kind === 268 /* ModuleDeclaration */ || kind === 80 /* Identifier */; +} +function isNamespaceBody(node) { + const kind = node.kind; + return kind === 269 /* ModuleBlock */ || kind === 268 /* ModuleDeclaration */; +} +function isJSDocNamespaceBody(node) { + const kind = node.kind; + return kind === 80 /* Identifier */ || kind === 268 /* ModuleDeclaration */; +} +function isNamedImportBindings(node) { + const kind = node.kind; + return kind === 276 /* NamedImports */ || kind === 275 /* NamespaceImport */; +} +function isModuleOrEnumDeclaration(node) { + return node.kind === 268 /* ModuleDeclaration */ || node.kind === 267 /* EnumDeclaration */; +} +function canHaveSymbol(node) { + switch (node.kind) { + case 220 /* ArrowFunction */: + case 227 /* BinaryExpression */: + case 209 /* BindingElement */: + case 214 /* CallExpression */: + case 180 /* CallSignature */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 176 /* ClassStaticBlockDeclaration */: + case 177 /* Constructor */: + case 186 /* ConstructorType */: + case 181 /* ConstructSignature */: + case 213 /* ElementAccessExpression */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + case 278 /* ExportAssignment */: + case 279 /* ExportDeclaration */: + case 282 /* ExportSpecifier */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 185 /* FunctionType */: + case 178 /* GetAccessor */: + case 80 /* Identifier */: + case 274 /* ImportClause */: + case 272 /* ImportEqualsDeclaration */: + case 277 /* ImportSpecifier */: + case 182 /* IndexSignature */: + case 265 /* InterfaceDeclaration */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + case 318 /* JSDocFunctionType */: + case 342 /* JSDocParameterTag */: + case 349 /* JSDocPropertyTag */: + case 324 /* JSDocSignature */: + case 347 /* JSDocTypedefTag */: + case 323 /* JSDocTypeLiteral */: + case 292 /* JsxAttribute */: + case 293 /* JsxAttributes */: + case 294 /* JsxSpreadAttribute */: + case 201 /* MappedType */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 268 /* ModuleDeclaration */: + case 203 /* NamedTupleMember */: + case 281 /* NamespaceExport */: + case 271 /* NamespaceExportDeclaration */: + case 275 /* NamespaceImport */: + case 215 /* NewExpression */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + case 211 /* ObjectLiteralExpression */: + case 170 /* Parameter */: + case 212 /* PropertyAccessExpression */: + case 304 /* PropertyAssignment */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 179 /* SetAccessor */: + case 305 /* ShorthandPropertyAssignment */: + case 308 /* SourceFile */: + case 306 /* SpreadAssignment */: + case 11 /* StringLiteral */: + case 266 /* TypeAliasDeclaration */: + case 188 /* TypeLiteral */: + case 169 /* TypeParameter */: + case 261 /* VariableDeclaration */: + return true; + default: + return false; + } +} +function canHaveLocals(node) { + switch (node.kind) { + case 220 /* ArrowFunction */: + case 242 /* Block */: + case 180 /* CallSignature */: + case 270 /* CaseBlock */: + case 300 /* CatchClause */: + case 176 /* ClassStaticBlockDeclaration */: + case 195 /* ConditionalType */: + case 177 /* Constructor */: + case 186 /* ConstructorType */: + case 181 /* ConstructSignature */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 185 /* FunctionType */: + case 178 /* GetAccessor */: + case 182 /* IndexSignature */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + case 318 /* JSDocFunctionType */: + case 324 /* JSDocSignature */: + case 347 /* JSDocTypedefTag */: + case 201 /* MappedType */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 268 /* ModuleDeclaration */: + case 179 /* SetAccessor */: + case 308 /* SourceFile */: + case 266 /* TypeAliasDeclaration */: + return true; + default: + return false; + } +} +function isDeclarationKind(kind) { + return kind === 220 /* ArrowFunction */ || kind === 209 /* BindingElement */ || kind === 264 /* ClassDeclaration */ || kind === 232 /* ClassExpression */ || kind === 176 /* ClassStaticBlockDeclaration */ || kind === 177 /* Constructor */ || kind === 267 /* EnumDeclaration */ || kind === 307 /* EnumMember */ || kind === 282 /* ExportSpecifier */ || kind === 263 /* FunctionDeclaration */ || kind === 219 /* FunctionExpression */ || kind === 178 /* GetAccessor */ || kind === 274 /* ImportClause */ || kind === 272 /* ImportEqualsDeclaration */ || kind === 277 /* ImportSpecifier */ || kind === 265 /* InterfaceDeclaration */ || kind === 292 /* JsxAttribute */ || kind === 175 /* MethodDeclaration */ || kind === 174 /* MethodSignature */ || kind === 268 /* ModuleDeclaration */ || kind === 271 /* NamespaceExportDeclaration */ || kind === 275 /* NamespaceImport */ || kind === 281 /* NamespaceExport */ || kind === 170 /* Parameter */ || kind === 304 /* PropertyAssignment */ || kind === 173 /* PropertyDeclaration */ || kind === 172 /* PropertySignature */ || kind === 179 /* SetAccessor */ || kind === 305 /* ShorthandPropertyAssignment */ || kind === 266 /* TypeAliasDeclaration */ || kind === 169 /* TypeParameter */ || kind === 261 /* VariableDeclaration */ || kind === 347 /* JSDocTypedefTag */ || kind === 339 /* JSDocCallbackTag */ || kind === 349 /* JSDocPropertyTag */ || kind === 203 /* NamedTupleMember */; +} +function isDeclarationStatementKind(kind) { + return kind === 263 /* FunctionDeclaration */ || kind === 283 /* MissingDeclaration */ || kind === 264 /* ClassDeclaration */ || kind === 265 /* InterfaceDeclaration */ || kind === 266 /* TypeAliasDeclaration */ || kind === 267 /* EnumDeclaration */ || kind === 268 /* ModuleDeclaration */ || kind === 273 /* ImportDeclaration */ || kind === 272 /* ImportEqualsDeclaration */ || kind === 279 /* ExportDeclaration */ || kind === 278 /* ExportAssignment */ || kind === 271 /* NamespaceExportDeclaration */; +} +function isStatementKindButNotDeclarationKind(kind) { + return kind === 253 /* BreakStatement */ || kind === 252 /* ContinueStatement */ || kind === 260 /* DebuggerStatement */ || kind === 247 /* DoStatement */ || kind === 245 /* ExpressionStatement */ || kind === 243 /* EmptyStatement */ || kind === 250 /* ForInStatement */ || kind === 251 /* ForOfStatement */ || kind === 249 /* ForStatement */ || kind === 246 /* IfStatement */ || kind === 257 /* LabeledStatement */ || kind === 254 /* ReturnStatement */ || kind === 256 /* SwitchStatement */ || kind === 258 /* ThrowStatement */ || kind === 259 /* TryStatement */ || kind === 244 /* VariableStatement */ || kind === 248 /* WhileStatement */ || kind === 255 /* WithStatement */ || kind === 354 /* NotEmittedStatement */; +} +function isDeclaration(node) { + if (node.kind === 169 /* TypeParameter */) { + return node.parent && node.parent.kind !== 346 /* JSDocTemplateTag */ || isInJSFile(node); + } + return isDeclarationKind(node.kind); +} +function isDeclarationStatement(node) { + return isDeclarationStatementKind(node.kind); +} +function isStatementButNotDeclaration(node) { + return isStatementKindButNotDeclarationKind(node.kind); +} +function isStatement(node) { + const kind = node.kind; + return isStatementKindButNotDeclarationKind(kind) || isDeclarationStatementKind(kind) || isBlockStatement(node); +} +function isBlockStatement(node) { + if (node.kind !== 242 /* Block */) return false; + if (node.parent !== void 0) { + if (node.parent.kind === 259 /* TryStatement */ || node.parent.kind === 300 /* CatchClause */) { + return false; + } + } + return !isFunctionBlock(node); +} +function isStatementOrBlock(node) { + const kind = node.kind; + return isStatementKindButNotDeclarationKind(kind) || isDeclarationStatementKind(kind) || kind === 242 /* Block */; +} +function isModuleReference(node) { + const kind = node.kind; + return kind === 284 /* ExternalModuleReference */ || kind === 167 /* QualifiedName */ || kind === 80 /* Identifier */; +} +function isJsxTagNameExpression(node) { + const kind = node.kind; + return kind === 110 /* ThisKeyword */ || kind === 80 /* Identifier */ || kind === 212 /* PropertyAccessExpression */ || kind === 296 /* JsxNamespacedName */; +} +function isJsxChild(node) { + const kind = node.kind; + return kind === 285 /* JsxElement */ || kind === 295 /* JsxExpression */ || kind === 286 /* JsxSelfClosingElement */ || kind === 12 /* JsxText */ || kind === 289 /* JsxFragment */; +} +function isJsxAttributeLike(node) { + const kind = node.kind; + return kind === 292 /* JsxAttribute */ || kind === 294 /* JsxSpreadAttribute */; +} +function isStringLiteralOrJsxExpression(node) { + const kind = node.kind; + return kind === 11 /* StringLiteral */ || kind === 295 /* JsxExpression */; +} +function isJsxOpeningLikeElement(node) { + const kind = node.kind; + return kind === 287 /* JsxOpeningElement */ || kind === 286 /* JsxSelfClosingElement */; +} +function isJsxCallLike(node) { + const kind = node.kind; + return kind === 287 /* JsxOpeningElement */ || kind === 286 /* JsxSelfClosingElement */ || kind === 290 /* JsxOpeningFragment */; +} +function isCaseOrDefaultClause(node) { + const kind = node.kind; + return kind === 297 /* CaseClause */ || kind === 298 /* DefaultClause */; +} +function isJSDocNode(node) { + return node.kind >= 310 /* FirstJSDocNode */ && node.kind <= 352 /* LastJSDocNode */; +} +function isJSDocCommentContainingNode(node) { + return node.kind === 321 /* JSDoc */ || node.kind === 320 /* JSDocNamepathType */ || node.kind === 322 /* JSDocText */ || isJSDocLinkLike(node) || isJSDocTag(node) || isJSDocTypeLiteral(node) || isJSDocSignature(node); +} +function isJSDocTag(node) { + return node.kind >= 328 /* FirstJSDocTagNode */ && node.kind <= 352 /* LastJSDocTagNode */; +} +function isSetAccessor(node) { + return node.kind === 179 /* SetAccessor */; +} +function isGetAccessor(node) { + return node.kind === 178 /* GetAccessor */; +} +function hasJSDocNodes(node) { + if (!canHaveJSDoc(node)) return false; + const { jsDoc } = node; + return !!jsDoc && jsDoc.length > 0; +} +function hasType(node) { + return !!node.type; +} +function hasInitializer(node) { + return !!node.initializer; +} +function hasOnlyExpressionInitializer(node) { + switch (node.kind) { + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 173 /* PropertyDeclaration */: + case 304 /* PropertyAssignment */: + case 307 /* EnumMember */: + return true; + default: + return false; + } +} +function isObjectLiteralElement(node) { + return node.kind === 292 /* JsxAttribute */ || node.kind === 294 /* JsxSpreadAttribute */ || isObjectLiteralElementLike(node); +} +function isTypeReferenceType(node) { + return node.kind === 184 /* TypeReference */ || node.kind === 234 /* ExpressionWithTypeArguments */; +} +var MAX_SMI_X86 = 1073741823; +function guessIndentation(lines) { + let indentation = MAX_SMI_X86; + for (const line of lines) { + if (!line.length) { + continue; + } + let i = 0; + for (; i < line.length && i < indentation; i++) { + if (!isWhiteSpaceLike(line.charCodeAt(i))) { + break; + } + } + if (i < indentation) { + indentation = i; + } + if (indentation === 0) { + return 0; + } + } + return indentation === MAX_SMI_X86 ? void 0 : indentation; +} +function isStringLiteralLike(node) { + return node.kind === 11 /* StringLiteral */ || node.kind === 15 /* NoSubstitutionTemplateLiteral */; +} +function isJSDocLinkLike(node) { + return node.kind === 325 /* JSDocLink */ || node.kind === 326 /* JSDocLinkCode */ || node.kind === 327 /* JSDocLinkPlain */; +} +function hasRestParameter(s) { + const last2 = lastOrUndefined(s.parameters); + return !!last2 && isRestParameter(last2); +} +function isRestParameter(node) { + const type = isJSDocParameterTag(node) ? node.typeExpression && node.typeExpression.type : node.type; + return node.dotDotDotToken !== void 0 || !!type && type.kind === 319 /* JSDocVariadicType */; +} +function hasInternalAnnotation(range, sourceFile) { + const comment = sourceFile.text.substring(range.pos, range.end); + return comment.includes("@internal"); +} +function isInternalDeclaration(node, sourceFile) { + sourceFile ?? (sourceFile = getSourceFileOfNode(node)); + const parseTreeNode = getParseTreeNode(node); + if (parseTreeNode && parseTreeNode.kind === 170 /* Parameter */) { + const paramIdx = parseTreeNode.parent.parameters.indexOf(parseTreeNode); + const previousSibling = paramIdx > 0 ? parseTreeNode.parent.parameters[paramIdx - 1] : void 0; + const text = sourceFile.text; + const commentRanges = previousSibling ? concatenate( + // to handle + // ... parameters, /** @internal */ + // public param: string + getTrailingCommentRanges(text, skipTrivia( + text, + previousSibling.end + 1, + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + )), + getLeadingCommentRanges(text, node.pos) + ) : getTrailingCommentRanges(text, skipTrivia( + text, + node.pos, + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + )); + return some(commentRanges) && hasInternalAnnotation(last(commentRanges), sourceFile); + } + const leadingCommentRanges = parseTreeNode && getLeadingCommentRangesOfNode(parseTreeNode, sourceFile); + return !!forEach(leadingCommentRanges, (range) => { + return hasInternalAnnotation(range, sourceFile); + }); +} + +// src/compiler/utilities.ts +var resolvingEmptyArray = []; +var externalHelpersModuleNameText = "tslib"; +var defaultMaximumTruncationLength = 160; +var noTruncationMaximumTruncationLength = 1e6; +var defaultHoverMaximumTruncationLength = 500; +function getDeclarationOfKind(symbol, kind) { + const declarations = symbol.declarations; + if (declarations) { + for (const declaration of declarations) { + if (declaration.kind === kind) { + return declaration; + } + } + } + return void 0; +} +function getDeclarationsOfKind(symbol, kind) { + return filter(symbol.declarations || emptyArray, (d) => d.kind === kind); +} +function createSymbolTable(symbols) { + const result = /* @__PURE__ */ new Map(); + if (symbols) { + for (const symbol of symbols) { + result.set(symbol.escapedName, symbol); + } + } + return result; +} +function isTransientSymbol(symbol) { + return (symbol.flags & 33554432 /* Transient */) !== 0; +} +function isExternalModuleSymbol(moduleSymbol) { + return !!(moduleSymbol.flags & 1536 /* Module */) && moduleSymbol.escapedName.charCodeAt(0) === 34 /* doubleQuote */; +} +var stringWriter = createSingleLineStringWriter(); +function createSingleLineStringWriter() { + var str = ""; + const writeText = (text) => str += text; + return { + getText: () => str, + write: writeText, + rawWrite: writeText, + writeKeyword: writeText, + writeOperator: writeText, + writePunctuation: writeText, + writeSpace: writeText, + writeStringLiteral: writeText, + writeLiteral: writeText, + writeParameter: writeText, + writeProperty: writeText, + writeSymbol: (s, _) => writeText(s), + writeTrailingSemicolon: writeText, + writeComment: writeText, + getTextPos: () => str.length, + getLine: () => 0, + getColumn: () => 0, + getIndent: () => 0, + isAtStartOfLine: () => false, + hasTrailingComment: () => false, + hasTrailingWhitespace: () => !!str.length && isWhiteSpaceLike(str.charCodeAt(str.length - 1)), + // Completely ignore indentation for string writers. And map newlines to + // a single space. + writeLine: () => str += " ", + increaseIndent: noop, + decreaseIndent: noop, + clear: () => str = "" + }; +} +function changesAffectModuleResolution(oldOptions, newOptions) { + return oldOptions.configFilePath !== newOptions.configFilePath || optionsHaveModuleResolutionChanges(oldOptions, newOptions); +} +function optionsHaveModuleResolutionChanges(oldOptions, newOptions) { + return optionsHaveChanges(oldOptions, newOptions, moduleResolutionOptionDeclarations); +} +function changesAffectingProgramStructure(oldOptions, newOptions) { + return optionsHaveChanges(oldOptions, newOptions, optionsAffectingProgramStructure); +} +function optionsHaveChanges(oldOptions, newOptions, optionDeclarations2) { + return oldOptions !== newOptions && optionDeclarations2.some((o) => !isJsonEqual(getCompilerOptionValue(oldOptions, o), getCompilerOptionValue(newOptions, o))); +} +function forEachAncestor(node, callback) { + while (true) { + const res = callback(node); + if (res === "quit") return void 0; + if (res !== void 0) return res; + if (isSourceFile(node)) return void 0; + node = node.parent; + } +} +function forEachEntry(map2, callback) { + const iterator = map2.entries(); + for (const [key, value] of iterator) { + const result = callback(value, key); + if (result) { + return result; + } + } + return void 0; +} +function forEachKey(map2, callback) { + const iterator = map2.keys(); + for (const key of iterator) { + const result = callback(key); + if (result) { + return result; + } + } + return void 0; +} +function copyEntries(source, target) { + source.forEach((value, key) => { + target.set(key, value); + }); +} +function usingSingleLineStringWriter(action) { + const oldString = stringWriter.getText(); + try { + action(stringWriter); + return stringWriter.getText(); + } finally { + stringWriter.clear(); + stringWriter.writeKeyword(oldString); + } +} +function getFullWidth(node) { + return node.end - node.pos; +} +function projectReferenceIsEqualTo(oldRef, newRef) { + return oldRef.path === newRef.path && !oldRef.prepend === !newRef.prepend && !oldRef.circular === !newRef.circular; +} +function moduleResolutionIsEqualTo(oldResolution, newResolution) { + return oldResolution === newResolution || oldResolution.resolvedModule === newResolution.resolvedModule || !!oldResolution.resolvedModule && !!newResolution.resolvedModule && oldResolution.resolvedModule.isExternalLibraryImport === newResolution.resolvedModule.isExternalLibraryImport && oldResolution.resolvedModule.extension === newResolution.resolvedModule.extension && oldResolution.resolvedModule.resolvedFileName === newResolution.resolvedModule.resolvedFileName && oldResolution.resolvedModule.originalPath === newResolution.resolvedModule.originalPath && packageIdIsEqual(oldResolution.resolvedModule.packageId, newResolution.resolvedModule.packageId) && oldResolution.alternateResult === newResolution.alternateResult; +} +function getResolvedModuleFromResolution(resolution) { + return resolution.resolvedModule; +} +function getResolvedTypeReferenceDirectiveFromResolution(resolution) { + return resolution.resolvedTypeReferenceDirective; +} +function createModuleNotFoundChain(sourceFile, host, moduleReference, mode, packageName) { + var _a; + const alternateResult = (_a = host.getResolvedModule(sourceFile, moduleReference, mode)) == null ? void 0 : _a.alternateResult; + const alternateResultMessage = alternateResult && (getEmitModuleResolutionKind(host.getCompilerOptions()) === 2 /* Node10 */ ? [Diagnostics.There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setting_Consider_updating_to_node16_nodenext_or_bundler, [alternateResult]] : [ + Diagnostics.There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The_1_library_may_need_to_update_its_package_json_or_typings, + [alternateResult, alternateResult.includes(nodeModulesPathPart + "@types/") ? `@types/${mangleScopedPackageName(packageName)}` : packageName] + ]); + const result = alternateResultMessage ? chainDiagnosticMessages( + /*details*/ + void 0, + alternateResultMessage[0], + ...alternateResultMessage[1] + ) : host.typesPackageExists(packageName) ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_Slash_Slashgithub_com_SlashDefinitelyTyped_SlashDefinitelyTyped_Slashtree_Slashmaster_Slashtypes_Slash_1, + packageName, + mangleScopedPackageName(packageName) + ) : host.packageBundlesTypes(packageName) ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_declare_module_1, + packageName, + moduleReference + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare_module_0, + moduleReference, + mangleScopedPackageName(packageName) + ); + if (result) result.repopulateInfo = () => ({ moduleReference, mode, packageName: packageName === moduleReference ? void 0 : packageName }); + return result; +} +function createModeMismatchDetails(currentSourceFile) { + const ext = tryGetExtensionFromPath2(currentSourceFile.fileName); + const scope = currentSourceFile.packageJsonScope; + const targetExt = ext === ".ts" /* Ts */ ? ".mts" /* Mts */ : ext === ".js" /* Js */ ? ".mjs" /* Mjs */ : void 0; + const result = scope && !scope.contents.packageJsonContent.type ? targetExt ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Colon_module_to_1, + targetExt, + combinePaths(scope.packageDirectory, "package.json") + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0, + combinePaths(scope.packageDirectory, "package.json") + ) : targetExt ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_package_json_file_with_type_Colon_module, + targetExt + ) : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module + ); + result.repopulateInfo = () => true; + return result; +} +function packageIdIsEqual(a, b) { + return a === b || !!a && !!b && a.name === b.name && a.subModuleName === b.subModuleName && a.version === b.version && a.peerDependencies === b.peerDependencies; +} +function packageIdToPackageName({ name, subModuleName }) { + return subModuleName ? `${name}/${subModuleName}` : name; +} +function packageIdToString(packageId) { + return `${packageIdToPackageName(packageId)}@${packageId.version}${packageId.peerDependencies ?? ""}`; +} +function typeDirectiveIsEqualTo(oldResolution, newResolution) { + return oldResolution === newResolution || oldResolution.resolvedTypeReferenceDirective === newResolution.resolvedTypeReferenceDirective || !!oldResolution.resolvedTypeReferenceDirective && !!newResolution.resolvedTypeReferenceDirective && oldResolution.resolvedTypeReferenceDirective.resolvedFileName === newResolution.resolvedTypeReferenceDirective.resolvedFileName && !!oldResolution.resolvedTypeReferenceDirective.primary === !!newResolution.resolvedTypeReferenceDirective.primary && oldResolution.resolvedTypeReferenceDirective.originalPath === newResolution.resolvedTypeReferenceDirective.originalPath; +} +function hasChangesInResolutions(names, newResolutions, getOldResolution, comparer) { + Debug.assert(names.length === newResolutions.length); + for (let i = 0; i < names.length; i++) { + const newResolution = newResolutions[i]; + const entry = names[i]; + const oldResolution = getOldResolution(entry); + const changed = oldResolution ? !newResolution || !comparer(oldResolution, newResolution) : newResolution; + if (changed) { + return true; + } + } + return false; +} +function containsParseError(node) { + aggregateChildData(node); + return (node.flags & 1048576 /* ThisNodeOrAnySubNodesHasError */) !== 0; +} +function aggregateChildData(node) { + if (!(node.flags & 2097152 /* HasAggregatedChildData */)) { + const thisNodeOrAnySubNodesHasError = (node.flags & 262144 /* ThisNodeHasError */) !== 0 || forEachChild(node, containsParseError); + if (thisNodeOrAnySubNodesHasError) { + node.flags |= 1048576 /* ThisNodeOrAnySubNodesHasError */; + } + node.flags |= 2097152 /* HasAggregatedChildData */; + } +} +function getSourceFileOfNode(node) { + while (node && node.kind !== 308 /* SourceFile */) { + node = node.parent; + } + return node; +} +function getSourceFileOfModule(module2) { + return getSourceFileOfNode(module2.valueDeclaration || getNonAugmentationDeclaration(module2)); +} +function isPlainJsFile(file, checkJs) { + return !!file && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */) && !file.checkJsDirective && checkJs === void 0; +} +function isStatementWithLocals(node) { + switch (node.kind) { + case 242 /* Block */: + case 270 /* CaseBlock */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + return true; + } + return false; +} +function getStartPositionOfLine(line, sourceFile) { + Debug.assert(line >= 0); + return getLineStarts(sourceFile)[line]; +} +function nodePosToString(node) { + const file = getSourceFileOfNode(node); + const loc = getLineAndCharacterOfPosition(file, node.pos); + return `${file.fileName}(${loc.line + 1},${loc.character + 1})`; +} +function getEndLinePosition(line, sourceFile) { + Debug.assert(line >= 0); + const lineStarts = getLineStarts(sourceFile); + const lineIndex = line; + const sourceText = sourceFile.text; + if (lineIndex + 1 === lineStarts.length) { + return sourceText.length - 1; + } else { + const start = lineStarts[lineIndex]; + let pos = lineStarts[lineIndex + 1] - 1; + Debug.assert(isLineBreak(sourceText.charCodeAt(pos))); + while (start <= pos && isLineBreak(sourceText.charCodeAt(pos))) { + pos--; + } + return pos; + } +} +function isFileLevelUniqueName(sourceFile, name, hasGlobalName) { + return !(hasGlobalName && hasGlobalName(name)) && !sourceFile.identifiers.has(name); +} +function nodeIsMissing(node) { + if (node === void 0) { + return true; + } + return node.pos === node.end && node.pos >= 0 && node.kind !== 1 /* EndOfFileToken */; +} +function nodeIsPresent(node) { + return !nodeIsMissing(node); +} +function isGrammarError(parent2, child) { + if (isTypeParameterDeclaration(parent2)) return child === parent2.expression; + if (isClassStaticBlockDeclaration(parent2)) return child === parent2.modifiers; + if (isPropertySignature(parent2)) return child === parent2.initializer; + if (isPropertyDeclaration(parent2)) return child === parent2.questionToken && isAutoAccessorPropertyDeclaration(parent2); + if (isPropertyAssignment(parent2)) return child === parent2.modifiers || child === parent2.questionToken || child === parent2.exclamationToken || isGrammarErrorElement(parent2.modifiers, child, isModifierLike); + if (isShorthandPropertyAssignment(parent2)) return child === parent2.equalsToken || child === parent2.modifiers || child === parent2.questionToken || child === parent2.exclamationToken || isGrammarErrorElement(parent2.modifiers, child, isModifierLike); + if (isMethodDeclaration(parent2)) return child === parent2.exclamationToken; + if (isConstructorDeclaration(parent2)) return child === parent2.typeParameters || child === parent2.type || isGrammarErrorElement(parent2.typeParameters, child, isTypeParameterDeclaration); + if (isGetAccessorDeclaration(parent2)) return child === parent2.typeParameters || isGrammarErrorElement(parent2.typeParameters, child, isTypeParameterDeclaration); + if (isSetAccessorDeclaration(parent2)) return child === parent2.typeParameters || child === parent2.type || isGrammarErrorElement(parent2.typeParameters, child, isTypeParameterDeclaration); + if (isNamespaceExportDeclaration(parent2)) return child === parent2.modifiers || isGrammarErrorElement(parent2.modifiers, child, isModifierLike); + return false; +} +function isGrammarErrorElement(nodeArray, child, isElement) { + if (!nodeArray || isArray(child) || !isElement(child)) return false; + return contains(nodeArray, child); +} +function insertStatementsAfterPrologue(to, from, isPrologueDirective2) { + if (from === void 0 || from.length === 0) return to; + let statementIndex = 0; + for (; statementIndex < to.length; ++statementIndex) { + if (!isPrologueDirective2(to[statementIndex])) { + break; + } + } + to.splice(statementIndex, 0, ...from); + return to; +} +function insertStatementAfterPrologue(to, statement, isPrologueDirective2) { + if (statement === void 0) return to; + let statementIndex = 0; + for (; statementIndex < to.length; ++statementIndex) { + if (!isPrologueDirective2(to[statementIndex])) { + break; + } + } + to.splice(statementIndex, 0, statement); + return to; +} +function isAnyPrologueDirective(node) { + return isPrologueDirective(node) || !!(getEmitFlags(node) & 2097152 /* CustomPrologue */); +} +function insertStatementsAfterStandardPrologue(to, from) { + return insertStatementsAfterPrologue(to, from, isPrologueDirective); +} +function insertStatementsAfterCustomPrologue(to, from) { + return insertStatementsAfterPrologue(to, from, isAnyPrologueDirective); +} +function insertStatementAfterStandardPrologue(to, statement) { + return insertStatementAfterPrologue(to, statement, isPrologueDirective); +} +function insertStatementAfterCustomPrologue(to, statement) { + return insertStatementAfterPrologue(to, statement, isAnyPrologueDirective); +} +function isRecognizedTripleSlashComment(text, commentPos, commentEnd) { + if (text.charCodeAt(commentPos + 1) === 47 /* slash */ && commentPos + 2 < commentEnd && text.charCodeAt(commentPos + 2) === 47 /* slash */) { + const textSubStr = text.substring(commentPos, commentEnd); + return fullTripleSlashReferencePathRegEx.test(textSubStr) || fullTripleSlashAMDReferencePathRegEx.test(textSubStr) || fullTripleSlashAMDModuleRegEx.test(textSubStr) || fullTripleSlashReferenceTypeReferenceDirectiveRegEx.test(textSubStr) || fullTripleSlashLibReferenceRegEx.test(textSubStr) || defaultLibReferenceRegEx.test(textSubStr) ? true : false; + } + return false; +} +function isPinnedComment(text, start) { + return text.charCodeAt(start + 1) === 42 /* asterisk */ && text.charCodeAt(start + 2) === 33 /* exclamation */; +} +function createCommentDirectivesMap(sourceFile, commentDirectives) { + const directivesByLine = new Map( + commentDirectives.map((commentDirective) => [ + `${getLineAndCharacterOfPosition(sourceFile, commentDirective.range.end).line}`, + commentDirective + ]) + ); + const usedLines = /* @__PURE__ */ new Map(); + return { getUnusedExpectations, markUsed }; + function getUnusedExpectations() { + return arrayFrom(directivesByLine.entries()).filter(([line, directive]) => directive.type === 0 /* ExpectError */ && !usedLines.get(line)).map(([_, directive]) => directive); + } + function markUsed(line) { + if (!directivesByLine.has(`${line}`)) { + return false; + } + usedLines.set(`${line}`, true); + return true; + } +} +function getTokenPosOfNode(node, sourceFile, includeJsDoc) { + if (nodeIsMissing(node)) { + return node.pos; + } + if (isJSDocNode(node) || node.kind === 12 /* JsxText */) { + return skipTrivia( + (sourceFile ?? getSourceFileOfNode(node)).text, + node.pos, + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + ); + } + if (includeJsDoc && hasJSDocNodes(node)) { + return getTokenPosOfNode(node.jsDoc[0], sourceFile); + } + if (node.kind === 353 /* SyntaxList */) { + sourceFile ?? (sourceFile = getSourceFileOfNode(node)); + const first2 = firstOrUndefined(getNodeChildren(node, sourceFile)); + if (first2) { + return getTokenPosOfNode(first2, sourceFile, includeJsDoc); + } + } + return skipTrivia( + (sourceFile ?? getSourceFileOfNode(node)).text, + node.pos, + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + false, + isInJSDoc(node) + ); +} +function getNonDecoratorTokenPosOfNode(node, sourceFile) { + const lastDecorator = !nodeIsMissing(node) && canHaveModifiers(node) ? findLast(node.modifiers, isDecorator) : void 0; + if (!lastDecorator) { + return getTokenPosOfNode(node, sourceFile); + } + return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastDecorator.end); +} +function getNonModifierTokenPosOfNode(node, sourceFile) { + const lastModifier = !nodeIsMissing(node) && canHaveModifiers(node) && node.modifiers ? last(node.modifiers) : void 0; + if (!lastModifier) { + return getTokenPosOfNode(node, sourceFile); + } + return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastModifier.end); +} +function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia = false) { + return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia); +} +function isJSDocTypeExpressionOrChild(node) { + return !!findAncestor(node, isJSDocTypeExpression); +} +function isExportNamespaceAsDefaultDeclaration(node) { + return !!(isExportDeclaration(node) && node.exportClause && isNamespaceExport(node.exportClause) && moduleExportNameIsDefault(node.exportClause.name)); +} +function moduleExportNameTextUnescaped(node) { + return node.kind === 11 /* StringLiteral */ ? node.text : unescapeLeadingUnderscores(node.escapedText); +} +function moduleExportNameTextEscaped(node) { + return node.kind === 11 /* StringLiteral */ ? escapeLeadingUnderscores(node.text) : node.escapedText; +} +function moduleExportNameIsDefault(node) { + return (node.kind === 11 /* StringLiteral */ ? node.text : node.escapedText) === "default" /* Default */; +} +function getTextOfNodeFromSourceText(sourceText, node, includeTrivia = false) { + if (nodeIsMissing(node)) { + return ""; + } + let text = sourceText.substring(includeTrivia ? node.pos : skipTrivia(sourceText, node.pos), node.end); + if (isJSDocTypeExpressionOrChild(node)) { + text = text.split(/\r\n|\n|\r/).map((line) => line.replace(/^\s*\*/, "").trimStart()).join("\n"); + } + return text; +} +function getTextOfNode(node, includeTrivia = false) { + return getSourceTextOfNodeFromSourceFile(getSourceFileOfNode(node), node, includeTrivia); +} +function getPos(range) { + return range.pos; +} +function indexOfNode(nodeArray, node) { + return binarySearch(nodeArray, node, getPos, compareValues); +} +function getEmitFlags(node) { + const emitNode = node.emitNode; + return emitNode && emitNode.flags || 0; +} +function getInternalEmitFlags(node) { + const emitNode = node.emitNode; + return emitNode && emitNode.internalFlags || 0; +} +var getScriptTargetFeatures = /* @__PURE__ */ memoize( + () => new Map(Object.entries({ + Array: new Map(Object.entries({ + es2015: [ + "find", + "findIndex", + "fill", + "copyWithin", + "entries", + "keys", + "values" + ], + es2016: [ + "includes" + ], + es2019: [ + "flat", + "flatMap" + ], + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Iterator: new Map(Object.entries({ + es2015: emptyArray + })), + AsyncIterator: new Map(Object.entries({ + es2015: emptyArray + })), + ArrayBuffer: new Map(Object.entries({ + es2024: [ + "maxByteLength", + "resizable", + "resize", + "detached", + "transfer", + "transferToFixedLength" + ] + })), + Atomics: new Map(Object.entries({ + es2017: [ + "add", + "and", + "compareExchange", + "exchange", + "isLockFree", + "load", + "or", + "store", + "sub", + "wait", + "notify", + "xor" + ], + es2024: [ + "waitAsync" + ], + esnext: [ + "pause" + ] + })), + SharedArrayBuffer: new Map(Object.entries({ + es2017: [ + "byteLength", + "slice" + ], + es2024: [ + "growable", + "maxByteLength", + "grow" + ] + })), + AsyncIterable: new Map(Object.entries({ + es2018: emptyArray + })), + AsyncIterableIterator: new Map(Object.entries({ + es2018: emptyArray + })), + AsyncGenerator: new Map(Object.entries({ + es2018: emptyArray + })), + AsyncGeneratorFunction: new Map(Object.entries({ + es2018: emptyArray + })), + RegExp: new Map(Object.entries({ + es2015: [ + "flags", + "sticky", + "unicode" + ], + es2018: [ + "dotAll" + ], + es2024: [ + "unicodeSets" + ] + })), + Reflect: new Map(Object.entries({ + es2015: [ + "apply", + "construct", + "defineProperty", + "deleteProperty", + "get", + "getOwnPropertyDescriptor", + "getPrototypeOf", + "has", + "isExtensible", + "ownKeys", + "preventExtensions", + "set", + "setPrototypeOf" + ] + })), + ArrayConstructor: new Map(Object.entries({ + es2015: [ + "from", + "of" + ], + esnext: [ + "fromAsync" + ] + })), + ObjectConstructor: new Map(Object.entries({ + es2015: [ + "assign", + "getOwnPropertySymbols", + "keys", + "is", + "setPrototypeOf" + ], + es2017: [ + "values", + "entries", + "getOwnPropertyDescriptors" + ], + es2019: [ + "fromEntries" + ], + es2022: [ + "hasOwn" + ], + es2024: [ + "groupBy" + ] + })), + NumberConstructor: new Map(Object.entries({ + es2015: [ + "isFinite", + "isInteger", + "isNaN", + "isSafeInteger", + "parseFloat", + "parseInt" + ] + })), + Math: new Map(Object.entries({ + es2015: [ + "clz32", + "imul", + "sign", + "log10", + "log2", + "log1p", + "expm1", + "cosh", + "sinh", + "tanh", + "acosh", + "asinh", + "atanh", + "hypot", + "trunc", + "fround", + "cbrt" + ], + esnext: [ + "f16round" + ] + })), + Map: new Map(Object.entries({ + es2015: [ + "entries", + "keys", + "values" + ] + })), + MapConstructor: new Map(Object.entries({ + es2024: [ + "groupBy" + ] + })), + Set: new Map(Object.entries({ + es2015: [ + "entries", + "keys", + "values" + ], + esnext: [ + "union", + "intersection", + "difference", + "symmetricDifference", + "isSubsetOf", + "isSupersetOf", + "isDisjointFrom" + ] + })), + PromiseConstructor: new Map(Object.entries({ + es2015: [ + "all", + "race", + "reject", + "resolve" + ], + es2020: [ + "allSettled" + ], + es2021: [ + "any" + ], + es2024: [ + "withResolvers" + ] + })), + Symbol: new Map(Object.entries({ + es2015: [ + "for", + "keyFor" + ], + es2019: [ + "description" + ] + })), + WeakMap: new Map(Object.entries({ + es2015: [ + "entries", + "keys", + "values" + ] + })), + WeakSet: new Map(Object.entries({ + es2015: [ + "entries", + "keys", + "values" + ] + })), + String: new Map(Object.entries({ + es2015: [ + "codePointAt", + "includes", + "endsWith", + "normalize", + "repeat", + "startsWith", + "anchor", + "big", + "blink", + "bold", + "fixed", + "fontcolor", + "fontsize", + "italics", + "link", + "small", + "strike", + "sub", + "sup" + ], + es2017: [ + "padStart", + "padEnd" + ], + es2019: [ + "trimStart", + "trimEnd", + "trimLeft", + "trimRight" + ], + es2020: [ + "matchAll" + ], + es2021: [ + "replaceAll" + ], + es2022: [ + "at" + ], + es2024: [ + "isWellFormed", + "toWellFormed" + ] + })), + StringConstructor: new Map(Object.entries({ + es2015: [ + "fromCodePoint", + "raw" + ] + })), + DateTimeFormat: new Map(Object.entries({ + es2017: [ + "formatToParts" + ] + })), + Promise: new Map(Object.entries({ + es2015: emptyArray, + es2018: [ + "finally" + ] + })), + RegExpMatchArray: new Map(Object.entries({ + es2018: [ + "groups" + ] + })), + RegExpExecArray: new Map(Object.entries({ + es2018: [ + "groups" + ] + })), + Intl: new Map(Object.entries({ + es2018: [ + "PluralRules" + ] + })), + NumberFormat: new Map(Object.entries({ + es2018: [ + "formatToParts" + ] + })), + SymbolConstructor: new Map(Object.entries({ + es2020: [ + "matchAll" + ], + esnext: [ + "metadata", + "dispose", + "asyncDispose" + ] + })), + DataView: new Map(Object.entries({ + es2020: [ + "setBigInt64", + "setBigUint64", + "getBigInt64", + "getBigUint64" + ], + esnext: [ + "setFloat16", + "getFloat16" + ] + })), + BigInt: new Map(Object.entries({ + es2020: emptyArray + })), + RelativeTimeFormat: new Map(Object.entries({ + es2020: [ + "format", + "formatToParts", + "resolvedOptions" + ] + })), + Int8Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Uint8Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Uint8ClampedArray: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Int16Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Uint16Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Int32Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Uint32Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Float16Array: new Map(Object.entries({ + esnext: emptyArray + })), + Float32Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Float64Array: new Map(Object.entries({ + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + BigInt64Array: new Map(Object.entries({ + es2020: emptyArray, + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + BigUint64Array: new Map(Object.entries({ + es2020: emptyArray, + es2022: [ + "at" + ], + es2023: [ + "findLastIndex", + "findLast", + "toReversed", + "toSorted", + "toSpliced", + "with" + ] + })), + Error: new Map(Object.entries({ + es2022: [ + "cause" + ] + })) + })) +); +var GetLiteralTextFlags = /* @__PURE__ */ ((GetLiteralTextFlags2) => { + GetLiteralTextFlags2[GetLiteralTextFlags2["None"] = 0] = "None"; + GetLiteralTextFlags2[GetLiteralTextFlags2["NeverAsciiEscape"] = 1] = "NeverAsciiEscape"; + GetLiteralTextFlags2[GetLiteralTextFlags2["JsxAttributeEscape"] = 2] = "JsxAttributeEscape"; + GetLiteralTextFlags2[GetLiteralTextFlags2["TerminateUnterminatedLiterals"] = 4] = "TerminateUnterminatedLiterals"; + GetLiteralTextFlags2[GetLiteralTextFlags2["AllowNumericSeparator"] = 8] = "AllowNumericSeparator"; + return GetLiteralTextFlags2; +})(GetLiteralTextFlags || {}); +function getLiteralText(node, sourceFile, flags) { + if (sourceFile && canUseOriginalText(node, flags)) { + return getSourceTextOfNodeFromSourceFile(sourceFile, node); + } + switch (node.kind) { + case 11 /* StringLiteral */: { + const escapeText = flags & 2 /* JsxAttributeEscape */ ? escapeJsxAttributeString : flags & 1 /* NeverAsciiEscape */ || getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? escapeString : escapeNonAsciiString; + if (node.singleQuote) { + return "'" + escapeText(node.text, 39 /* singleQuote */) + "'"; + } else { + return '"' + escapeText(node.text, 34 /* doubleQuote */) + '"'; + } + } + case 15 /* NoSubstitutionTemplateLiteral */: + case 16 /* TemplateHead */: + case 17 /* TemplateMiddle */: + case 18 /* TemplateTail */: { + const escapeText = flags & 1 /* NeverAsciiEscape */ || getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? escapeString : escapeNonAsciiString; + const rawText = node.rawText ?? escapeTemplateSubstitution(escapeText(node.text, 96 /* backtick */)); + switch (node.kind) { + case 15 /* NoSubstitutionTemplateLiteral */: + return "`" + rawText + "`"; + case 16 /* TemplateHead */: + return "`" + rawText + "${"; + case 17 /* TemplateMiddle */: + return "}" + rawText + "${"; + case 18 /* TemplateTail */: + return "}" + rawText + "`"; + } + break; + } + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + return node.text; + case 14 /* RegularExpressionLiteral */: + if (flags & 4 /* TerminateUnterminatedLiterals */ && node.isUnterminated) { + return node.text + (node.text.charCodeAt(node.text.length - 1) === 92 /* backslash */ ? " /" : "/"); + } + return node.text; + } + return Debug.fail(`Literal kind '${node.kind}' not accounted for.`); +} +function canUseOriginalText(node, flags) { + if (nodeIsSynthesized(node) || !node.parent || flags & 4 /* TerminateUnterminatedLiterals */ && node.isUnterminated) { + return false; + } + if (isNumericLiteral(node)) { + if (node.numericLiteralFlags & 26656 /* IsInvalid */) { + return false; + } + if (node.numericLiteralFlags & 512 /* ContainsSeparator */) { + return !!(flags & 8 /* AllowNumericSeparator */); + } + } + return !isBigIntLiteral(node); +} +function getTextOfConstantValue(value) { + return isString(value) ? `"${escapeString(value)}"` : "" + value; +} +function makeIdentifierFromModuleName(moduleName) { + return getBaseFileName(moduleName).replace(/^(\d)/, "_$1").replace(/\W/g, "_"); +} +function isBlockOrCatchScoped(declaration) { + return (getCombinedNodeFlags(declaration) & 7 /* BlockScoped */) !== 0 || isCatchClauseVariableDeclarationOrBindingElement(declaration); +} +function isCatchClauseVariableDeclarationOrBindingElement(declaration) { + const node = getRootDeclaration(declaration); + return node.kind === 261 /* VariableDeclaration */ && node.parent.kind === 300 /* CatchClause */; +} +function isAmbientModule(node) { + return isModuleDeclaration(node) && (node.name.kind === 11 /* StringLiteral */ || isGlobalScopeAugmentation(node)); +} +function isModuleWithStringLiteralName(node) { + return isModuleDeclaration(node) && node.name.kind === 11 /* StringLiteral */; +} +function isNonGlobalAmbientModule(node) { + return isModuleDeclaration(node) && isStringLiteral(node.name); +} +function isEffectiveModuleDeclaration(node) { + return isModuleDeclaration(node) || isIdentifier(node); +} +function isShorthandAmbientModuleSymbol(moduleSymbol) { + return isShorthandAmbientModule(moduleSymbol.valueDeclaration); +} +function isShorthandAmbientModule(node) { + return !!node && node.kind === 268 /* ModuleDeclaration */ && !node.body; +} +function isBlockScopedContainerTopLevel(node) { + return node.kind === 308 /* SourceFile */ || node.kind === 268 /* ModuleDeclaration */ || isFunctionLikeOrClassStaticBlockDeclaration(node); +} +function isGlobalScopeAugmentation(module2) { + return !!(module2.flags & 2048 /* GlobalAugmentation */); +} +function isExternalModuleAugmentation(node) { + return isAmbientModule(node) && isModuleAugmentationExternal(node); +} +function isModuleAugmentationExternal(node) { + switch (node.parent.kind) { + case 308 /* SourceFile */: + return isExternalModule(node.parent); + case 269 /* ModuleBlock */: + return isAmbientModule(node.parent.parent) && isSourceFile(node.parent.parent.parent) && !isExternalModule(node.parent.parent.parent); + } + return false; +} +function getNonAugmentationDeclaration(symbol) { + var _a; + return (_a = symbol.declarations) == null ? void 0 : _a.find((d) => !isExternalModuleAugmentation(d) && !(isModuleDeclaration(d) && isGlobalScopeAugmentation(d))); +} +function isCommonJSContainingModuleKind(kind) { + return kind === 1 /* CommonJS */ || 100 /* Node16 */ <= kind && kind <= 199 /* NodeNext */; +} +function isEffectiveExternalModule(node, compilerOptions) { + return isExternalModule(node) || isCommonJSContainingModuleKind(getEmitModuleKind(compilerOptions)) && !!node.commonJsModuleIndicator; +} +function isEffectiveStrictModeSourceFile(node, compilerOptions) { + switch (node.scriptKind) { + case 1 /* JS */: + case 3 /* TS */: + case 2 /* JSX */: + case 4 /* TSX */: + break; + default: + return false; + } + if (node.isDeclarationFile) { + return false; + } + if (getStrictOptionValue(compilerOptions, "alwaysStrict")) { + return true; + } + if (startsWithUseStrict(node.statements)) { + return true; + } + if (isExternalModule(node) || getIsolatedModules(compilerOptions)) { + return true; + } + return false; +} +function isAmbientPropertyDeclaration(node) { + return !!(node.flags & 33554432 /* Ambient */) || hasSyntacticModifier(node, 128 /* Ambient */); +} +function isBlockScope(node, parentNode) { + switch (node.kind) { + case 308 /* SourceFile */: + case 270 /* CaseBlock */: + case 300 /* CatchClause */: + case 268 /* ModuleDeclaration */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 173 /* PropertyDeclaration */: + case 176 /* ClassStaticBlockDeclaration */: + return true; + case 242 /* Block */: + return !isFunctionLikeOrClassStaticBlockDeclaration(parentNode); + } + return false; +} +function isDeclarationWithTypeParameters(node) { + Debug.type(node); + switch (node.kind) { + case 339 /* JSDocCallbackTag */: + case 347 /* JSDocTypedefTag */: + case 324 /* JSDocSignature */: + return true; + default: + assertType(node); + return isDeclarationWithTypeParameterChildren(node); + } +} +function isDeclarationWithTypeParameterChildren(node) { + Debug.type(node); + switch (node.kind) { + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 174 /* MethodSignature */: + case 182 /* IndexSignature */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 318 /* JSDocFunctionType */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 346 /* JSDocTemplateTag */: + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return true; + default: + assertType(node); + return false; + } +} +function isAnyImportSyntax(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + return true; + default: + return false; + } +} +function isAnyImportOrBareOrAccessedRequire(node) { + return isAnyImportSyntax(node) || isVariableDeclarationInitializedToBareOrAccessedRequire(node); +} +function isAnyImportOrRequireStatement(node) { + return isAnyImportSyntax(node) || isRequireVariableStatement(node); +} +function isLateVisibilityPaintedStatement(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 244 /* VariableStatement */: + case 264 /* ClassDeclaration */: + case 263 /* FunctionDeclaration */: + case 268 /* ModuleDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + return true; + default: + return false; + } +} +function hasPossibleExternalModuleReference(node) { + return isAnyImportOrReExport(node) || isModuleDeclaration(node) || isImportTypeNode(node) || isImportCall(node); +} +function isAnyImportOrReExport(node) { + return isAnyImportSyntax(node) || isExportDeclaration(node); +} +function getEnclosingContainer(node) { + return findAncestor(node.parent, (n) => !!(getContainerFlags(n) & 1 /* IsContainer */)); +} +function getEnclosingBlockScopeContainer(node) { + return findAncestor(node.parent, (current) => isBlockScope(current, current.parent)); +} +function forEachEnclosingBlockScopeContainer(node, cb) { + let container = getEnclosingBlockScopeContainer(node); + while (container) { + cb(container); + container = getEnclosingBlockScopeContainer(container); + } +} +function declarationNameToString(name) { + return !name || getFullWidth(name) === 0 ? "(Missing)" : getTextOfNode(name); +} +function getNameFromIndexInfo(info) { + return info.declaration ? declarationNameToString(info.declaration.parameters[0].name) : void 0; +} +function isComputedNonLiteralName(name) { + return name.kind === 168 /* ComputedPropertyName */ && !isStringOrNumericLiteralLike(name.expression); +} +function tryGetTextOfPropertyName(name) { + var _a; + switch (name.kind) { + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + return ((_a = name.emitNode) == null ? void 0 : _a.autoGenerate) ? void 0 : name.escapedText; + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + return escapeLeadingUnderscores(name.text); + case 168 /* ComputedPropertyName */: + if (isStringOrNumericLiteralLike(name.expression)) return escapeLeadingUnderscores(name.expression.text); + return void 0; + case 296 /* JsxNamespacedName */: + return getEscapedTextOfJsxNamespacedName(name); + default: + return Debug.assertNever(name); + } +} +function getTextOfPropertyName(name) { + return Debug.checkDefined(tryGetTextOfPropertyName(name)); +} +function entityNameToString(name) { + switch (name.kind) { + case 110 /* ThisKeyword */: + return "this"; + case 81 /* PrivateIdentifier */: + case 80 /* Identifier */: + return getFullWidth(name) === 0 ? idText(name) : getTextOfNode(name); + case 167 /* QualifiedName */: + return entityNameToString(name.left) + "." + entityNameToString(name.right); + case 212 /* PropertyAccessExpression */: + if (isIdentifier(name.name) || isPrivateIdentifier(name.name)) { + return entityNameToString(name.expression) + "." + entityNameToString(name.name); + } else { + return Debug.assertNever(name.name); + } + case 312 /* JSDocMemberName */: + return entityNameToString(name.left) + "#" + entityNameToString(name.right); + case 296 /* JsxNamespacedName */: + return entityNameToString(name.namespace) + ":" + entityNameToString(name.name); + default: + return Debug.assertNever(name); + } +} +function createDiagnosticForNode(node, message, ...args) { + const sourceFile = getSourceFileOfNode(node); + return createDiagnosticForNodeInSourceFile(sourceFile, node, message, ...args); +} +function createDiagnosticForNodeArray(sourceFile, nodes, message, ...args) { + const start = skipTrivia(sourceFile.text, nodes.pos); + return createFileDiagnostic(sourceFile, start, nodes.end - start, message, ...args); +} +function createDiagnosticForNodeInSourceFile(sourceFile, node, message, ...args) { + const span = getErrorSpanForNode(sourceFile, node); + return createFileDiagnostic(sourceFile, span.start, span.length, message, ...args); +} +function createDiagnosticForNodeFromMessageChain(sourceFile, node, messageChain, relatedInformation) { + const span = getErrorSpanForNode(sourceFile, node); + return createFileDiagnosticFromMessageChain(sourceFile, span.start, span.length, messageChain, relatedInformation); +} +function createDiagnosticForNodeArrayFromMessageChain(sourceFile, nodes, messageChain, relatedInformation) { + const start = skipTrivia(sourceFile.text, nodes.pos); + return createFileDiagnosticFromMessageChain(sourceFile, start, nodes.end - start, messageChain, relatedInformation); +} +function assertDiagnosticLocation(sourceText, start, length2) { + Debug.assertGreaterThanOrEqual(start, 0); + Debug.assertGreaterThanOrEqual(length2, 0); + Debug.assertLessThanOrEqual(start, sourceText.length); + Debug.assertLessThanOrEqual(start + length2, sourceText.length); +} +function createFileDiagnosticFromMessageChain(file, start, length2, messageChain, relatedInformation) { + assertDiagnosticLocation(file.text, start, length2); + return { + file, + start, + length: length2, + code: messageChain.code, + category: messageChain.category, + messageText: messageChain.next ? messageChain : messageChain.messageText, + relatedInformation, + canonicalHead: messageChain.canonicalHead + }; +} +function createDiagnosticForFileFromMessageChain(sourceFile, messageChain, relatedInformation) { + return { + file: sourceFile, + start: 0, + length: 0, + code: messageChain.code, + category: messageChain.category, + messageText: messageChain.next ? messageChain : messageChain.messageText, + relatedInformation + }; +} +function createDiagnosticMessageChainFromDiagnostic(diagnostic) { + return typeof diagnostic.messageText === "string" ? { + code: diagnostic.code, + category: diagnostic.category, + messageText: diagnostic.messageText, + next: diagnostic.next + } : diagnostic.messageText; +} +function createDiagnosticForRange(sourceFile, range, message) { + return { + file: sourceFile, + start: range.pos, + length: range.end - range.pos, + code: message.code, + category: message.category, + messageText: message.message + }; +} +function getCanonicalDiagnostic(message, ...args) { + return { + code: message.code, + messageText: formatMessage(message, ...args) + }; +} +function getSpanOfTokenAtPosition(sourceFile, pos) { + const scanner2 = createScanner( + sourceFile.languageVersion, + /*skipTrivia*/ + true, + sourceFile.languageVariant, + sourceFile.text, + /*onError*/ + void 0, + pos + ); + scanner2.scan(); + const start = scanner2.getTokenStart(); + return createTextSpanFromBounds(start, scanner2.getTokenEnd()); +} +function scanTokenAtPosition(sourceFile, pos) { + const scanner2 = createScanner( + sourceFile.languageVersion, + /*skipTrivia*/ + true, + sourceFile.languageVariant, + sourceFile.text, + /*onError*/ + void 0, + pos + ); + scanner2.scan(); + return scanner2.getToken(); +} +function getErrorSpanForArrowFunction(sourceFile, node) { + const pos = skipTrivia(sourceFile.text, node.pos); + if (node.body && node.body.kind === 242 /* Block */) { + const { line: startLine } = getLineAndCharacterOfPosition(sourceFile, node.body.pos); + const { line: endLine } = getLineAndCharacterOfPosition(sourceFile, node.body.end); + if (startLine < endLine) { + return createTextSpan(pos, getEndLinePosition(startLine, sourceFile) - pos + 1); + } + } + return createTextSpanFromBounds(pos, node.end); +} +function getErrorSpanForNode(sourceFile, node) { + let errorNode = node; + switch (node.kind) { + case 308 /* SourceFile */: { + const pos2 = skipTrivia( + sourceFile.text, + 0, + /*stopAfterLineBreak*/ + false + ); + if (pos2 === sourceFile.text.length) { + return createTextSpan(0, 0); + } + return getSpanOfTokenAtPosition(sourceFile, pos2); + } + // This list is a work in progress. Add missing node kinds to improve their error + // spans. + case 261 /* VariableDeclaration */: + case 209 /* BindingElement */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 268 /* ModuleDeclaration */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 266 /* TypeAliasDeclaration */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 275 /* NamespaceImport */: + errorNode = node.name; + break; + case 220 /* ArrowFunction */: + return getErrorSpanForArrowFunction(sourceFile, node); + case 297 /* CaseClause */: + case 298 /* DefaultClause */: { + const start = skipTrivia(sourceFile.text, node.pos); + const end = node.statements.length > 0 ? node.statements[0].pos : node.end; + return createTextSpanFromBounds(start, end); + } + case 254 /* ReturnStatement */: + case 230 /* YieldExpression */: { + const pos2 = skipTrivia(sourceFile.text, node.pos); + return getSpanOfTokenAtPosition(sourceFile, pos2); + } + case 239 /* SatisfiesExpression */: { + const pos2 = skipTrivia(sourceFile.text, node.expression.end); + return getSpanOfTokenAtPosition(sourceFile, pos2); + } + case 351 /* JSDocSatisfiesTag */: { + const pos2 = skipTrivia(sourceFile.text, node.tagName.pos); + return getSpanOfTokenAtPosition(sourceFile, pos2); + } + case 177 /* Constructor */: { + const constructorDeclaration = node; + const start = skipTrivia(sourceFile.text, constructorDeclaration.pos); + const scanner2 = createScanner( + sourceFile.languageVersion, + /*skipTrivia*/ + true, + sourceFile.languageVariant, + sourceFile.text, + /*onError*/ + void 0, + start + ); + let token = scanner2.scan(); + while (token !== 137 /* ConstructorKeyword */ && token !== 1 /* EndOfFileToken */) { + token = scanner2.scan(); + } + const end = scanner2.getTokenEnd(); + return createTextSpanFromBounds(start, end); + } + } + if (errorNode === void 0) { + return getSpanOfTokenAtPosition(sourceFile, node.pos); + } + Debug.assert(!isJSDoc(errorNode)); + const isMissing = nodeIsMissing(errorNode); + const pos = isMissing || isJsxText(node) ? errorNode.pos : skipTrivia(sourceFile.text, errorNode.pos); + if (isMissing) { + Debug.assert(pos === errorNode.pos, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); + Debug.assert(pos === errorNode.end, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); + } else { + Debug.assert(pos >= errorNode.pos, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); + Debug.assert(pos <= errorNode.end, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809"); + } + return createTextSpanFromBounds(pos, errorNode.end); +} +function isGlobalSourceFile(node) { + return node.kind === 308 /* SourceFile */ && !isExternalOrCommonJsModule(node); +} +function isExternalOrCommonJsModule(file) { + return (file.externalModuleIndicator || file.commonJsModuleIndicator) !== void 0; +} +function isJsonSourceFile(file) { + return file.scriptKind === 6 /* JSON */; +} +function isEnumConst(node) { + return !!(getCombinedModifierFlags(node) & 4096 /* Const */); +} +function isDeclarationReadonly(declaration) { + return !!(getCombinedModifierFlags(declaration) & 8 /* Readonly */ && !isParameterPropertyDeclaration(declaration, declaration.parent)); +} +function isVarAwaitUsing(node) { + return (getCombinedNodeFlags(node) & 7 /* BlockScoped */) === 6 /* AwaitUsing */; +} +function isVarUsing(node) { + return (getCombinedNodeFlags(node) & 7 /* BlockScoped */) === 4 /* Using */; +} +function isVarConst(node) { + return (getCombinedNodeFlags(node) & 7 /* BlockScoped */) === 2 /* Const */; +} +function isVarConstLike(node) { + const blockScopeKind = getCombinedNodeFlags(node) & 7 /* BlockScoped */; + return blockScopeKind === 2 /* Const */ || blockScopeKind === 4 /* Using */ || blockScopeKind === 6 /* AwaitUsing */; +} +function isLet(node) { + return (getCombinedNodeFlags(node) & 7 /* BlockScoped */) === 1 /* Let */; +} +function isSuperCall(n) { + return n.kind === 214 /* CallExpression */ && n.expression.kind === 108 /* SuperKeyword */; +} +function isImportCall(n) { + if (n.kind !== 214 /* CallExpression */) return false; + const e = n.expression; + return e.kind === 102 /* ImportKeyword */ || isMetaProperty(e) && e.keywordToken === 102 /* ImportKeyword */ && e.name.escapedText === "defer"; +} +function isImportMeta(n) { + return isMetaProperty(n) && n.keywordToken === 102 /* ImportKeyword */ && n.name.escapedText === "meta"; +} +function isLiteralImportTypeNode(n) { + return isImportTypeNode(n) && isLiteralTypeNode(n.argument) && isStringLiteral(n.argument.literal); +} +function isPrologueDirective(node) { + return node.kind === 245 /* ExpressionStatement */ && node.expression.kind === 11 /* StringLiteral */; +} +function isCustomPrologue(node) { + return !!(getEmitFlags(node) & 2097152 /* CustomPrologue */); +} +function isHoistedFunction(node) { + return isCustomPrologue(node) && isFunctionDeclaration(node); +} +function isHoistedVariable(node) { + return isIdentifier(node.name) && !node.initializer; +} +function isHoistedVariableStatement(node) { + return isCustomPrologue(node) && isVariableStatement(node) && every(node.declarationList.declarations, isHoistedVariable); +} +function getLeadingCommentRangesOfNode(node, sourceFileOfNode) { + return node.kind !== 12 /* JsxText */ ? getLeadingCommentRanges(sourceFileOfNode.text, node.pos) : void 0; +} +function getJSDocCommentRanges(node, text) { + const commentRanges = node.kind === 170 /* Parameter */ || node.kind === 169 /* TypeParameter */ || node.kind === 219 /* FunctionExpression */ || node.kind === 220 /* ArrowFunction */ || node.kind === 218 /* ParenthesizedExpression */ || node.kind === 261 /* VariableDeclaration */ || node.kind === 282 /* ExportSpecifier */ ? concatenate(getTrailingCommentRanges(text, node.pos), getLeadingCommentRanges(text, node.pos)) : getLeadingCommentRanges(text, node.pos); + return filter(commentRanges, (comment) => comment.end <= node.end && // Due to parse errors sometime empty parameter may get comments assigned to it that end up not in parameter range + text.charCodeAt(comment.pos + 1) === 42 /* asterisk */ && text.charCodeAt(comment.pos + 2) === 42 /* asterisk */ && text.charCodeAt(comment.pos + 3) !== 47 /* slash */); +} +var fullTripleSlashReferencePathRegEx = /^\/\/\/\s*/; +var fullTripleSlashReferenceTypeReferenceDirectiveRegEx = /^\/\/\/\s*/; +var fullTripleSlashLibReferenceRegEx = /^\/\/\/\s*/; +var fullTripleSlashAMDReferencePathRegEx = /^\/\/\/\s*/; +var fullTripleSlashAMDModuleRegEx = /^\/\/\/\s*/; +var defaultLibReferenceRegEx = /^\/\/\/\s*/; +function isPartOfTypeNode(node) { + if (183 /* FirstTypeNode */ <= node.kind && node.kind <= 206 /* LastTypeNode */) { + return true; + } + switch (node.kind) { + case 133 /* AnyKeyword */: + case 159 /* UnknownKeyword */: + case 150 /* NumberKeyword */: + case 163 /* BigIntKeyword */: + case 154 /* StringKeyword */: + case 136 /* BooleanKeyword */: + case 155 /* SymbolKeyword */: + case 151 /* ObjectKeyword */: + case 157 /* UndefinedKeyword */: + case 106 /* NullKeyword */: + case 146 /* NeverKeyword */: + return true; + case 116 /* VoidKeyword */: + return node.parent.kind !== 223 /* VoidExpression */; + case 234 /* ExpressionWithTypeArguments */: + return isPartOfTypeExpressionWithTypeArguments(node); + case 169 /* TypeParameter */: + return node.parent.kind === 201 /* MappedType */ || node.parent.kind === 196 /* InferType */; + // Identifiers and qualified names may be type nodes, depending on their context. Climb + // above them to find the lowest container + case 80 /* Identifier */: + if (node.parent.kind === 167 /* QualifiedName */ && node.parent.right === node) { + node = node.parent; + } else if (node.parent.kind === 212 /* PropertyAccessExpression */ && node.parent.name === node) { + node = node.parent; + } + Debug.assert(node.kind === 80 /* Identifier */ || node.kind === 167 /* QualifiedName */ || node.kind === 212 /* PropertyAccessExpression */, "'node' was expected to be a qualified name, identifier or property access in 'isPartOfTypeNode'."); + // falls through + case 167 /* QualifiedName */: + case 212 /* PropertyAccessExpression */: + case 110 /* ThisKeyword */: { + const { parent: parent2 } = node; + if (parent2.kind === 187 /* TypeQuery */) { + return false; + } + if (parent2.kind === 206 /* ImportType */) { + return !parent2.isTypeOf; + } + if (183 /* FirstTypeNode */ <= parent2.kind && parent2.kind <= 206 /* LastTypeNode */) { + return true; + } + switch (parent2.kind) { + case 234 /* ExpressionWithTypeArguments */: + return isPartOfTypeExpressionWithTypeArguments(parent2); + case 169 /* TypeParameter */: + return node === parent2.constraint; + case 346 /* JSDocTemplateTag */: + return node === parent2.constraint; + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 170 /* Parameter */: + case 261 /* VariableDeclaration */: + return node === parent2.type; + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return node === parent2.type; + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + return node === parent2.type; + case 217 /* TypeAssertionExpression */: + return node === parent2.type; + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 216 /* TaggedTemplateExpression */: + return contains(parent2.typeArguments, node); + } + } + } + return false; +} +function isPartOfTypeExpressionWithTypeArguments(node) { + return isJSDocImplementsTag(node.parent) || isJSDocAugmentsTag(node.parent) || isHeritageClause(node.parent) && !isExpressionWithTypeArgumentsInClassExtendsClause(node); +} +function forEachReturnStatement(body, visitor) { + return traverse(body); + function traverse(node) { + switch (node.kind) { + case 254 /* ReturnStatement */: + return visitor(node); + case 270 /* CaseBlock */: + case 242 /* Block */: + case 246 /* IfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 255 /* WithStatement */: + case 256 /* SwitchStatement */: + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + case 257 /* LabeledStatement */: + case 259 /* TryStatement */: + case 300 /* CatchClause */: + return forEachChild(node, traverse); + } + } +} +function forEachYieldExpression(body, visitor) { + return traverse(body); + function traverse(node) { + switch (node.kind) { + case 230 /* YieldExpression */: + visitor(node); + const operand = node.expression; + if (operand) { + traverse(operand); + } + return; + case 267 /* EnumDeclaration */: + case 265 /* InterfaceDeclaration */: + case 268 /* ModuleDeclaration */: + case 266 /* TypeAliasDeclaration */: + return; + default: + if (isFunctionLike(node)) { + if (node.name && node.name.kind === 168 /* ComputedPropertyName */) { + traverse(node.name.expression); + return; + } + } else if (!isPartOfTypeNode(node)) { + forEachChild(node, traverse); + } + } + } +} +function getRestParameterElementType(node) { + if (node && node.kind === 189 /* ArrayType */) { + return node.elementType; + } else if (node && node.kind === 184 /* TypeReference */) { + return singleOrUndefined(node.typeArguments); + } else { + return void 0; + } +} +function getMembersOfDeclaration(node) { + switch (node.kind) { + case 265 /* InterfaceDeclaration */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 188 /* TypeLiteral */: + return node.members; + case 211 /* ObjectLiteralExpression */: + return node.properties; + } +} +function isVariableLike(node) { + if (node) { + switch (node.kind) { + case 209 /* BindingElement */: + case 307 /* EnumMember */: + case 170 /* Parameter */: + case 304 /* PropertyAssignment */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 305 /* ShorthandPropertyAssignment */: + case 261 /* VariableDeclaration */: + return true; + } + } + return false; +} +function isVariableDeclarationInVariableStatement(node) { + return node.parent.kind === 262 /* VariableDeclarationList */ && node.parent.parent.kind === 244 /* VariableStatement */; +} +function isCommonJsExportedExpression(node) { + if (!isInJSFile(node)) return false; + return isObjectLiteralExpression(node.parent) && isBinaryExpression(node.parent.parent) && getAssignmentDeclarationKind(node.parent.parent) === 2 /* ModuleExports */ || isCommonJsExportPropertyAssignment(node.parent); +} +function isCommonJsExportPropertyAssignment(node) { + if (!isInJSFile(node)) return false; + return isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 1 /* ExportsProperty */; +} +function isValidESSymbolDeclaration(node) { + return (isVariableDeclaration(node) ? isVarConst(node) && isIdentifier(node.name) && isVariableDeclarationInVariableStatement(node) : isPropertyDeclaration(node) ? hasEffectiveReadonlyModifier(node) && hasStaticModifier(node) : isPropertySignature(node) && hasEffectiveReadonlyModifier(node)) || isCommonJsExportPropertyAssignment(node); +} +function introducesArgumentsExoticObject(node) { + switch (node.kind) { + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + return true; + } + return false; +} +function unwrapInnermostStatementOfLabel(node, beforeUnwrapLabelCallback) { + while (true) { + if (beforeUnwrapLabelCallback) { + beforeUnwrapLabelCallback(node); + } + if (node.statement.kind !== 257 /* LabeledStatement */) { + return node.statement; + } + node = node.statement; + } +} +function isFunctionBlock(node) { + return node && node.kind === 242 /* Block */ && isFunctionLike(node.parent); +} +function isObjectLiteralMethod(node) { + return node && node.kind === 175 /* MethodDeclaration */ && node.parent.kind === 211 /* ObjectLiteralExpression */; +} +function isObjectLiteralOrClassExpressionMethodOrAccessor(node) { + return (node.kind === 175 /* MethodDeclaration */ || node.kind === 178 /* GetAccessor */ || node.kind === 179 /* SetAccessor */) && (node.parent.kind === 211 /* ObjectLiteralExpression */ || node.parent.kind === 232 /* ClassExpression */); +} +function isIdentifierTypePredicate(predicate) { + return predicate && predicate.kind === 1 /* Identifier */; +} +function isThisTypePredicate(predicate) { + return predicate && predicate.kind === 0 /* This */; +} +function forEachPropertyAssignment(objectLiteral, key, callback, key2) { + return forEach(objectLiteral == null ? void 0 : objectLiteral.properties, (property) => { + if (!isPropertyAssignment(property)) return void 0; + const propName = tryGetTextOfPropertyName(property.name); + return key === propName || key2 && key2 === propName ? callback(property) : void 0; + }); +} +function getTsConfigObjectLiteralExpression(tsConfigSourceFile) { + if (tsConfigSourceFile && tsConfigSourceFile.statements.length) { + const expression = tsConfigSourceFile.statements[0].expression; + return tryCast(expression, isObjectLiteralExpression); + } +} +function getTsConfigPropArrayElementValue(tsConfigSourceFile, propKey, elementValue) { + return forEachTsConfigPropArray(tsConfigSourceFile, propKey, (property) => isArrayLiteralExpression(property.initializer) ? find(property.initializer.elements, (element) => isStringLiteral(element) && element.text === elementValue) : void 0); +} +function forEachTsConfigPropArray(tsConfigSourceFile, propKey, callback) { + return forEachPropertyAssignment(getTsConfigObjectLiteralExpression(tsConfigSourceFile), propKey, callback); +} +function getContainingFunction(node) { + return findAncestor(node.parent, isFunctionLike); +} +function getContainingFunctionDeclaration(node) { + return findAncestor(node.parent, isFunctionLikeDeclaration); +} +function getContainingClass(node) { + return findAncestor(node.parent, isClassLike); +} +function getContainingClassStaticBlock(node) { + return findAncestor(node.parent, (n) => { + if (isClassLike(n) || isFunctionLike(n)) { + return "quit"; + } + return isClassStaticBlockDeclaration(n); + }); +} +function getContainingFunctionOrClassStaticBlock(node) { + return findAncestor(node.parent, isFunctionLikeOrClassStaticBlockDeclaration); +} +function getContainingClassExcludingClassDecorators(node) { + const decorator = findAncestor(node.parent, (n) => isClassLike(n) ? "quit" : isDecorator(n)); + return decorator && isClassLike(decorator.parent) ? getContainingClass(decorator.parent) : getContainingClass(decorator ?? node); +} +function getThisContainer(node, includeArrowFunctions, includeClassComputedPropertyName) { + Debug.assert(node.kind !== 308 /* SourceFile */); + while (true) { + node = node.parent; + if (!node) { + return Debug.fail(); + } + switch (node.kind) { + case 168 /* ComputedPropertyName */: + if (includeClassComputedPropertyName && isClassLike(node.parent.parent)) { + return node; + } + node = node.parent.parent; + break; + case 171 /* Decorator */: + if (node.parent.kind === 170 /* Parameter */ && isClassElement(node.parent.parent)) { + node = node.parent.parent; + } else if (isClassElement(node.parent)) { + node = node.parent; + } + break; + case 220 /* ArrowFunction */: + if (!includeArrowFunctions) { + continue; + } + // falls through + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 268 /* ModuleDeclaration */: + case 176 /* ClassStaticBlockDeclaration */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + case 267 /* EnumDeclaration */: + case 308 /* SourceFile */: + return node; + } + } +} +function isThisContainerOrFunctionBlock(node) { + switch (node.kind) { + // Arrow functions use the same scope, but may do so in a "delayed" manner + // For example, `const getThis = () => this` may be before a super() call in a derived constructor + case 220 /* ArrowFunction */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 173 /* PropertyDeclaration */: + return true; + case 242 /* Block */: + switch (node.parent.kind) { + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return true; + default: + return false; + } + default: + return false; + } +} +function isInTopLevelContext(node) { + if (isIdentifier(node) && (isClassDeclaration(node.parent) || isFunctionDeclaration(node.parent)) && node.parent.name === node) { + node = node.parent; + } + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + true, + /*includeClassComputedPropertyName*/ + false + ); + return isSourceFile(container); +} +function getNewTargetContainer(node) { + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (container) { + switch (container.kind) { + case 177 /* Constructor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + return container; + } + } + return void 0; +} +function getSuperContainer(node, stopOnFunctions) { + while (true) { + node = node.parent; + if (!node) { + return void 0; + } + switch (node.kind) { + case 168 /* ComputedPropertyName */: + node = node.parent; + break; + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + if (!stopOnFunctions) { + continue; + } + // falls through + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 176 /* ClassStaticBlockDeclaration */: + return node; + case 171 /* Decorator */: + if (node.parent.kind === 170 /* Parameter */ && isClassElement(node.parent.parent)) { + node = node.parent.parent; + } else if (isClassElement(node.parent)) { + node = node.parent; + } + break; + } + } +} +function getImmediatelyInvokedFunctionExpression(func) { + if (func.kind === 219 /* FunctionExpression */ || func.kind === 220 /* ArrowFunction */) { + let prev = func; + let parent2 = func.parent; + while (parent2.kind === 218 /* ParenthesizedExpression */) { + prev = parent2; + parent2 = parent2.parent; + } + if (parent2.kind === 214 /* CallExpression */ && parent2.expression === prev) { + return parent2; + } + } +} +function isSuperProperty(node) { + const kind = node.kind; + return (kind === 212 /* PropertyAccessExpression */ || kind === 213 /* ElementAccessExpression */) && node.expression.kind === 108 /* SuperKeyword */; +} +function isThisProperty(node) { + const kind = node.kind; + return (kind === 212 /* PropertyAccessExpression */ || kind === 213 /* ElementAccessExpression */) && node.expression.kind === 110 /* ThisKeyword */; +} +function isThisInitializedDeclaration(node) { + var _a; + return !!node && isVariableDeclaration(node) && ((_a = node.initializer) == null ? void 0 : _a.kind) === 110 /* ThisKeyword */; +} +function isThisInitializedObjectBindingExpression(node) { + return !!node && (isShorthandPropertyAssignment(node) || isPropertyAssignment(node)) && isBinaryExpression(node.parent.parent) && node.parent.parent.operatorToken.kind === 64 /* EqualsToken */ && node.parent.parent.right.kind === 110 /* ThisKeyword */; +} +function getEntityNameFromTypeNode(node) { + switch (node.kind) { + case 184 /* TypeReference */: + return node.typeName; + case 234 /* ExpressionWithTypeArguments */: + return isEntityNameExpression(node.expression) ? node.expression : void 0; + // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s. + case 80 /* Identifier */: + case 167 /* QualifiedName */: + return node; + } + return void 0; +} +function getInvokedExpression(node) { + switch (node.kind) { + case 216 /* TaggedTemplateExpression */: + return node.tag; + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + return node.tagName; + case 227 /* BinaryExpression */: + return node.right; + case 290 /* JsxOpeningFragment */: + return node; + default: + return node.expression; + } +} +function nodeCanBeDecorated(useLegacyDecorators, node, parent2, grandparent) { + if (useLegacyDecorators && isNamedDeclaration(node) && isPrivateIdentifier(node.name)) { + return false; + } + switch (node.kind) { + case 264 /* ClassDeclaration */: + return true; + case 232 /* ClassExpression */: + return !useLegacyDecorators; + case 173 /* PropertyDeclaration */: + return parent2 !== void 0 && (useLegacyDecorators ? isClassDeclaration(parent2) : isClassLike(parent2) && !hasAbstractModifier(node) && !hasAmbientModifier(node)); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + return node.body !== void 0 && parent2 !== void 0 && (useLegacyDecorators ? isClassDeclaration(parent2) : isClassLike(parent2)); + case 170 /* Parameter */: + if (!useLegacyDecorators) return false; + return parent2 !== void 0 && parent2.body !== void 0 && (parent2.kind === 177 /* Constructor */ || parent2.kind === 175 /* MethodDeclaration */ || parent2.kind === 179 /* SetAccessor */) && getThisParameter(parent2) !== node && grandparent !== void 0 && grandparent.kind === 264 /* ClassDeclaration */; + } + return false; +} +function nodeIsDecorated(useLegacyDecorators, node, parent2, grandparent) { + return hasDecorators(node) && nodeCanBeDecorated(useLegacyDecorators, node, parent2, grandparent); +} +function nodeOrChildIsDecorated(useLegacyDecorators, node, parent2, grandparent) { + return nodeIsDecorated(useLegacyDecorators, node, parent2, grandparent) || childIsDecorated(useLegacyDecorators, node, parent2); +} +function childIsDecorated(useLegacyDecorators, node, parent2) { + switch (node.kind) { + case 264 /* ClassDeclaration */: + return some(node.members, (m) => nodeOrChildIsDecorated(useLegacyDecorators, m, node, parent2)); + case 232 /* ClassExpression */: + return !useLegacyDecorators && some(node.members, (m) => nodeOrChildIsDecorated(useLegacyDecorators, m, node, parent2)); + case 175 /* MethodDeclaration */: + case 179 /* SetAccessor */: + case 177 /* Constructor */: + return some(node.parameters, (p) => nodeIsDecorated(useLegacyDecorators, p, node, parent2)); + default: + return false; + } +} +function classOrConstructorParameterIsDecorated(useLegacyDecorators, node) { + if (nodeIsDecorated(useLegacyDecorators, node)) return true; + const constructor = getFirstConstructorWithBody(node); + return !!constructor && childIsDecorated(useLegacyDecorators, constructor, node); +} +function classElementOrClassElementParameterIsDecorated(useLegacyDecorators, node, parent2) { + let parameters; + if (isAccessor(node)) { + const { firstAccessor, secondAccessor, setAccessor } = getAllAccessorDeclarations(parent2.members, node); + const firstAccessorWithDecorators = hasDecorators(firstAccessor) ? firstAccessor : secondAccessor && hasDecorators(secondAccessor) ? secondAccessor : void 0; + if (!firstAccessorWithDecorators || node !== firstAccessorWithDecorators) { + return false; + } + parameters = setAccessor == null ? void 0 : setAccessor.parameters; + } else if (isMethodDeclaration(node)) { + parameters = node.parameters; + } + if (nodeIsDecorated(useLegacyDecorators, node, parent2)) { + return true; + } + if (parameters) { + for (const parameter of parameters) { + if (parameterIsThisKeyword(parameter)) continue; + if (nodeIsDecorated(useLegacyDecorators, parameter, node, parent2)) return true; + } + } + return false; +} +function isEmptyStringLiteral(node) { + if (node.textSourceNode) { + switch (node.textSourceNode.kind) { + case 11 /* StringLiteral */: + return isEmptyStringLiteral(node.textSourceNode); + case 15 /* NoSubstitutionTemplateLiteral */: + return node.text === ""; + } + return false; + } + return node.text === ""; +} +function isJSXTagName(node) { + const { parent: parent2 } = node; + if (parent2.kind === 287 /* JsxOpeningElement */ || parent2.kind === 286 /* JsxSelfClosingElement */ || parent2.kind === 288 /* JsxClosingElement */) { + return parent2.tagName === node; + } + return false; +} +function isExpressionNode(node) { + switch (node.kind) { + case 108 /* SuperKeyword */: + case 106 /* NullKeyword */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 14 /* RegularExpressionLiteral */: + case 210 /* ArrayLiteralExpression */: + case 211 /* ObjectLiteralExpression */: + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 216 /* TaggedTemplateExpression */: + case 235 /* AsExpression */: + case 217 /* TypeAssertionExpression */: + case 239 /* SatisfiesExpression */: + case 236 /* NonNullExpression */: + case 218 /* ParenthesizedExpression */: + case 219 /* FunctionExpression */: + case 232 /* ClassExpression */: + case 220 /* ArrowFunction */: + case 223 /* VoidExpression */: + case 221 /* DeleteExpression */: + case 222 /* TypeOfExpression */: + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + case 227 /* BinaryExpression */: + case 228 /* ConditionalExpression */: + case 231 /* SpreadElement */: + case 229 /* TemplateExpression */: + case 233 /* OmittedExpression */: + case 285 /* JsxElement */: + case 286 /* JsxSelfClosingElement */: + case 289 /* JsxFragment */: + case 230 /* YieldExpression */: + case 224 /* AwaitExpression */: + return true; + case 237 /* MetaProperty */: + return !isImportCall(node.parent) || node.parent.expression !== node; + case 234 /* ExpressionWithTypeArguments */: + return !isHeritageClause(node.parent) && !isJSDocAugmentsTag(node.parent); + case 167 /* QualifiedName */: + while (node.parent.kind === 167 /* QualifiedName */) { + node = node.parent; + } + return node.parent.kind === 187 /* TypeQuery */ || isJSDocLinkLike(node.parent) || isJSDocNameReference(node.parent) || isJSDocMemberName(node.parent) || isJSXTagName(node); + case 312 /* JSDocMemberName */: + while (isJSDocMemberName(node.parent)) { + node = node.parent; + } + return node.parent.kind === 187 /* TypeQuery */ || isJSDocLinkLike(node.parent) || isJSDocNameReference(node.parent) || isJSDocMemberName(node.parent) || isJSXTagName(node); + case 81 /* PrivateIdentifier */: + return isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 103 /* InKeyword */; + case 80 /* Identifier */: + if (node.parent.kind === 187 /* TypeQuery */ || isJSDocLinkLike(node.parent) || isJSDocNameReference(node.parent) || isJSDocMemberName(node.parent) || isJSXTagName(node)) { + return true; + } + // falls through + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 110 /* ThisKeyword */: + return isInExpressionContext(node); + default: + return false; + } +} +function isInExpressionContext(node) { + const { parent: parent2 } = node; + switch (parent2.kind) { + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 307 /* EnumMember */: + case 304 /* PropertyAssignment */: + case 209 /* BindingElement */: + return parent2.initializer === node; + case 245 /* ExpressionStatement */: + case 246 /* IfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 254 /* ReturnStatement */: + case 255 /* WithStatement */: + case 256 /* SwitchStatement */: + case 297 /* CaseClause */: + case 258 /* ThrowStatement */: + return parent2.expression === node; + case 249 /* ForStatement */: + const forStatement = parent2; + return forStatement.initializer === node && forStatement.initializer.kind !== 262 /* VariableDeclarationList */ || forStatement.condition === node || forStatement.incrementor === node; + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + const forInOrOfStatement = parent2; + return forInOrOfStatement.initializer === node && forInOrOfStatement.initializer.kind !== 262 /* VariableDeclarationList */ || forInOrOfStatement.expression === node; + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + return node === parent2.expression; + case 240 /* TemplateSpan */: + return node === parent2.expression; + case 168 /* ComputedPropertyName */: + return node === parent2.expression; + case 171 /* Decorator */: + case 295 /* JsxExpression */: + case 294 /* JsxSpreadAttribute */: + case 306 /* SpreadAssignment */: + return true; + case 234 /* ExpressionWithTypeArguments */: + return parent2.expression === node && !isPartOfTypeNode(parent2); + case 305 /* ShorthandPropertyAssignment */: + return parent2.objectAssignmentInitializer === node; + case 239 /* SatisfiesExpression */: + return node === parent2.expression; + default: + return isExpressionNode(parent2); + } +} +function isPartOfTypeQuery(node) { + while (node.kind === 167 /* QualifiedName */ || node.kind === 80 /* Identifier */) { + node = node.parent; + } + return node.kind === 187 /* TypeQuery */; +} +function isNamespaceReexportDeclaration(node) { + return isNamespaceExport(node) && !!node.parent.moduleSpecifier; +} +function isExternalModuleImportEqualsDeclaration(node) { + return node.kind === 272 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 284 /* ExternalModuleReference */; +} +function getExternalModuleImportEqualsDeclarationExpression(node) { + Debug.assert(isExternalModuleImportEqualsDeclaration(node)); + return node.moduleReference.expression; +} +function getExternalModuleRequireArgument(node) { + return isVariableDeclarationInitializedToBareOrAccessedRequire(node) && getLeftmostAccessExpression(node.initializer).arguments[0]; +} +function isInternalModuleImportEqualsDeclaration(node) { + return node.kind === 272 /* ImportEqualsDeclaration */ && node.moduleReference.kind !== 284 /* ExternalModuleReference */; +} +function isFullSourceFile(sourceFile) { + return (sourceFile == null ? void 0 : sourceFile.kind) === 308 /* SourceFile */; +} +function isSourceFileJS(file) { + return isInJSFile(file); +} +function isInJSFile(node) { + return !!node && !!(node.flags & 524288 /* JavaScriptFile */); +} +function isInJsonFile(node) { + return !!node && !!(node.flags & 134217728 /* JsonFile */); +} +function isSourceFileNotJson(file) { + return !isJsonSourceFile(file); +} +function isInJSDoc(node) { + return !!node && !!(node.flags & 16777216 /* JSDoc */); +} +function isJSDocIndexSignature(node) { + return isTypeReferenceNode(node) && isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && node.typeArguments && node.typeArguments.length === 2 && (node.typeArguments[0].kind === 154 /* StringKeyword */ || node.typeArguments[0].kind === 150 /* NumberKeyword */); +} +function isRequireCall(callExpression, requireStringLiteralLikeArgument) { + if (callExpression.kind !== 214 /* CallExpression */) { + return false; + } + const { expression, arguments: args } = callExpression; + if (expression.kind !== 80 /* Identifier */ || expression.escapedText !== "require") { + return false; + } + if (args.length !== 1) { + return false; + } + const arg = args[0]; + return !requireStringLiteralLikeArgument || isStringLiteralLike(arg); +} +function isVariableDeclarationInitializedToRequire(node) { + return isVariableDeclarationInitializedWithRequireHelper( + node, + /*allowAccessedRequire*/ + false + ); +} +function isVariableDeclarationInitializedToBareOrAccessedRequire(node) { + return isVariableDeclarationInitializedWithRequireHelper( + node, + /*allowAccessedRequire*/ + true + ); +} +function isBindingElementOfBareOrAccessedRequire(node) { + return isBindingElement(node) && isVariableDeclarationInitializedToBareOrAccessedRequire(node.parent.parent); +} +function isVariableDeclarationInitializedWithRequireHelper(node, allowAccessedRequire) { + return isVariableDeclaration(node) && !!node.initializer && isRequireCall( + allowAccessedRequire ? getLeftmostAccessExpression(node.initializer) : node.initializer, + /*requireStringLiteralLikeArgument*/ + true + ); +} +function isRequireVariableStatement(node) { + return isVariableStatement(node) && node.declarationList.declarations.length > 0 && every(node.declarationList.declarations, (decl) => isVariableDeclarationInitializedToRequire(decl)); +} +function isSingleOrDoubleQuote(charCode) { + return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */; +} +function isStringDoubleQuoted(str, sourceFile) { + return getSourceTextOfNodeFromSourceFile(sourceFile, str).charCodeAt(0) === 34 /* doubleQuote */; +} +function isAssignmentDeclaration(decl) { + return isBinaryExpression(decl) || isAccessExpression(decl) || isIdentifier(decl) || isCallExpression(decl); +} +function getEffectiveInitializer(node) { + if (isInJSFile(node) && node.initializer && isBinaryExpression(node.initializer) && (node.initializer.operatorToken.kind === 57 /* BarBarToken */ || node.initializer.operatorToken.kind === 61 /* QuestionQuestionToken */) && node.name && isEntityNameExpression(node.name) && isSameEntityName(node.name, node.initializer.left)) { + return node.initializer.right; + } + return node.initializer; +} +function getDeclaredExpandoInitializer(node) { + const init = getEffectiveInitializer(node); + return init && getExpandoInitializer(init, isPrototypeAccess(node.name)); +} +function hasExpandoValueProperty(node, isPrototypeAssignment) { + return forEach(node.properties, (p) => isPropertyAssignment(p) && isIdentifier(p.name) && p.name.escapedText === "value" && p.initializer && getExpandoInitializer(p.initializer, isPrototypeAssignment)); +} +function getAssignedExpandoInitializer(node) { + if (node && node.parent && isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 64 /* EqualsToken */) { + const isPrototypeAssignment = isPrototypeAccess(node.parent.left); + return getExpandoInitializer(node.parent.right, isPrototypeAssignment) || getDefaultedExpandoInitializer(node.parent.left, node.parent.right, isPrototypeAssignment); + } + if (node && isCallExpression(node) && isBindableObjectDefinePropertyCall(node)) { + const result = hasExpandoValueProperty(node.arguments[2], node.arguments[1].text === "prototype"); + if (result) { + return result; + } + } +} +function getExpandoInitializer(initializer, isPrototypeAssignment) { + if (isCallExpression(initializer)) { + const e = skipParentheses(initializer.expression); + return e.kind === 219 /* FunctionExpression */ || e.kind === 220 /* ArrowFunction */ ? initializer : void 0; + } + if (initializer.kind === 219 /* FunctionExpression */ || initializer.kind === 232 /* ClassExpression */ || initializer.kind === 220 /* ArrowFunction */) { + return initializer; + } + if (isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAssignment)) { + return initializer; + } +} +function getDefaultedExpandoInitializer(name, initializer, isPrototypeAssignment) { + const e = isBinaryExpression(initializer) && (initializer.operatorToken.kind === 57 /* BarBarToken */ || initializer.operatorToken.kind === 61 /* QuestionQuestionToken */) && getExpandoInitializer(initializer.right, isPrototypeAssignment); + if (e && isSameEntityName(name, initializer.left)) { + return e; + } +} +function isDefaultedExpandoInitializer(node) { + const name = isVariableDeclaration(node.parent) ? node.parent.name : isBinaryExpression(node.parent) && node.parent.operatorToken.kind === 64 /* EqualsToken */ ? node.parent.left : void 0; + return name && getExpandoInitializer(node.right, isPrototypeAccess(name)) && isEntityNameExpression(name) && isSameEntityName(name, node.left); +} +function getNameOfExpando(node) { + if (isBinaryExpression(node.parent)) { + const parent2 = (node.parent.operatorToken.kind === 57 /* BarBarToken */ || node.parent.operatorToken.kind === 61 /* QuestionQuestionToken */) && isBinaryExpression(node.parent.parent) ? node.parent.parent : node.parent; + if (parent2.operatorToken.kind === 64 /* EqualsToken */ && isIdentifier(parent2.left)) { + return parent2.left; + } + } else if (isVariableDeclaration(node.parent)) { + return node.parent.name; + } +} +function isSameEntityName(name, initializer) { + if (isPropertyNameLiteral(name) && isPropertyNameLiteral(initializer)) { + return getTextOfIdentifierOrLiteral(name) === getTextOfIdentifierOrLiteral(initializer); + } + if (isMemberName(name) && isLiteralLikeAccess(initializer) && (initializer.expression.kind === 110 /* ThisKeyword */ || isIdentifier(initializer.expression) && (initializer.expression.escapedText === "window" || initializer.expression.escapedText === "self" || initializer.expression.escapedText === "global"))) { + return isSameEntityName(name, getNameOrArgument(initializer)); + } + if (isLiteralLikeAccess(name) && isLiteralLikeAccess(initializer)) { + return getElementOrPropertyAccessName(name) === getElementOrPropertyAccessName(initializer) && isSameEntityName(name.expression, initializer.expression); + } + return false; +} +function getRightMostAssignedExpression(node) { + while (isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + )) { + node = node.right; + } + return node; +} +function isExportsIdentifier(node) { + return isIdentifier(node) && node.escapedText === "exports"; +} +function isModuleIdentifier(node) { + return isIdentifier(node) && node.escapedText === "module"; +} +function isModuleExportsAccessExpression(node) { + return (isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node)) && isModuleIdentifier(node.expression) && getElementOrPropertyAccessName(node) === "exports"; +} +function getAssignmentDeclarationKind(expr) { + const special = getAssignmentDeclarationKindWorker(expr); + return special === 5 /* Property */ || isInJSFile(expr) ? special : 0 /* None */; +} +function isBindableObjectDefinePropertyCall(expr) { + return length(expr.arguments) === 3 && isPropertyAccessExpression(expr.expression) && isIdentifier(expr.expression.expression) && idText(expr.expression.expression) === "Object" && idText(expr.expression.name) === "defineProperty" && isStringOrNumericLiteralLike(expr.arguments[1]) && isBindableStaticNameExpression( + expr.arguments[0], + /*excludeThisKeyword*/ + true + ); +} +function isLiteralLikeAccess(node) { + return isPropertyAccessExpression(node) || isLiteralLikeElementAccess(node); +} +function isLiteralLikeElementAccess(node) { + return isElementAccessExpression(node) && isStringOrNumericLiteralLike(node.argumentExpression); +} +function isBindableStaticAccessExpression(node, excludeThisKeyword) { + return isPropertyAccessExpression(node) && (!excludeThisKeyword && node.expression.kind === 110 /* ThisKeyword */ || isIdentifier(node.name) && isBindableStaticNameExpression( + node.expression, + /*excludeThisKeyword*/ + true + )) || isBindableStaticElementAccessExpression(node, excludeThisKeyword); +} +function isBindableStaticElementAccessExpression(node, excludeThisKeyword) { + return isLiteralLikeElementAccess(node) && (!excludeThisKeyword && node.expression.kind === 110 /* ThisKeyword */ || isEntityNameExpression(node.expression) || isBindableStaticAccessExpression( + node.expression, + /*excludeThisKeyword*/ + true + )); +} +function isBindableStaticNameExpression(node, excludeThisKeyword) { + return isEntityNameExpression(node) || isBindableStaticAccessExpression(node, excludeThisKeyword); +} +function getNameOrArgument(expr) { + if (isPropertyAccessExpression(expr)) { + return expr.name; + } + return expr.argumentExpression; +} +function getAssignmentDeclarationKindWorker(expr) { + if (isCallExpression(expr)) { + if (!isBindableObjectDefinePropertyCall(expr)) { + return 0 /* None */; + } + const entityName = expr.arguments[0]; + if (isExportsIdentifier(entityName) || isModuleExportsAccessExpression(entityName)) { + return 8 /* ObjectDefinePropertyExports */; + } + if (isBindableStaticAccessExpression(entityName) && getElementOrPropertyAccessName(entityName) === "prototype") { + return 9 /* ObjectDefinePrototypeProperty */; + } + return 7 /* ObjectDefinePropertyValue */; + } + if (expr.operatorToken.kind !== 64 /* EqualsToken */ || !isAccessExpression(expr.left) || isVoidZero(getRightMostAssignedExpression(expr))) { + return 0 /* None */; + } + if (isBindableStaticNameExpression( + expr.left.expression, + /*excludeThisKeyword*/ + true + ) && getElementOrPropertyAccessName(expr.left) === "prototype" && isObjectLiteralExpression(getInitializerOfBinaryExpression(expr))) { + return 6 /* Prototype */; + } + return getAssignmentDeclarationPropertyAccessKind(expr.left); +} +function isVoidZero(node) { + return isVoidExpression(node) && isNumericLiteral(node.expression) && node.expression.text === "0"; +} +function getElementOrPropertyAccessArgumentExpressionOrName(node) { + if (isPropertyAccessExpression(node)) { + return node.name; + } + const arg = skipParentheses(node.argumentExpression); + if (isNumericLiteral(arg) || isStringLiteralLike(arg)) { + return arg; + } + return node; +} +function getElementOrPropertyAccessName(node) { + const name = getElementOrPropertyAccessArgumentExpressionOrName(node); + if (name) { + if (isIdentifier(name)) { + return name.escapedText; + } + if (isStringLiteralLike(name) || isNumericLiteral(name)) { + return escapeLeadingUnderscores(name.text); + } + } + return void 0; +} +function getAssignmentDeclarationPropertyAccessKind(lhs) { + if (lhs.expression.kind === 110 /* ThisKeyword */) { + return 4 /* ThisProperty */; + } else if (isModuleExportsAccessExpression(lhs)) { + return 2 /* ModuleExports */; + } else if (isBindableStaticNameExpression( + lhs.expression, + /*excludeThisKeyword*/ + true + )) { + if (isPrototypeAccess(lhs.expression)) { + return 3 /* PrototypeProperty */; + } + let nextToLast = lhs; + while (!isIdentifier(nextToLast.expression)) { + nextToLast = nextToLast.expression; + } + const id = nextToLast.expression; + if ((id.escapedText === "exports" || id.escapedText === "module" && getElementOrPropertyAccessName(nextToLast) === "exports") && // ExportsProperty does not support binding with computed names + isBindableStaticAccessExpression(lhs)) { + return 1 /* ExportsProperty */; + } + if (isBindableStaticNameExpression( + lhs, + /*excludeThisKeyword*/ + true + ) || isElementAccessExpression(lhs) && isDynamicName(lhs)) { + return 5 /* Property */; + } + } + return 0 /* None */; +} +function getInitializerOfBinaryExpression(expr) { + while (isBinaryExpression(expr.right)) { + expr = expr.right; + } + return expr.right; +} +function isPrototypePropertyAssignment(node) { + return isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 3 /* PrototypeProperty */; +} +function isSpecialPropertyDeclaration(expr) { + return isInJSFile(expr) && expr.parent && expr.parent.kind === 245 /* ExpressionStatement */ && (!isElementAccessExpression(expr) || isLiteralLikeElementAccess(expr)) && !!getJSDocTypeTag(expr.parent); +} +function setValueDeclaration(symbol, node) { + const { valueDeclaration } = symbol; + if (!valueDeclaration || !(node.flags & 33554432 /* Ambient */ && !isInJSFile(node) && !(valueDeclaration.flags & 33554432 /* Ambient */)) && (isAssignmentDeclaration(valueDeclaration) && !isAssignmentDeclaration(node)) || valueDeclaration.kind !== node.kind && isEffectiveModuleDeclaration(valueDeclaration)) { + symbol.valueDeclaration = node; + } +} +function isFunctionSymbol(symbol) { + if (!symbol || !symbol.valueDeclaration) { + return false; + } + const decl = symbol.valueDeclaration; + return decl.kind === 263 /* FunctionDeclaration */ || isVariableDeclaration(decl) && decl.initializer && isFunctionLike(decl.initializer); +} +function canHaveModuleSpecifier(node) { + switch (node == null ? void 0 : node.kind) { + case 261 /* VariableDeclaration */: + case 209 /* BindingElement */: + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 274 /* ImportClause */: + case 281 /* NamespaceExport */: + case 275 /* NamespaceImport */: + case 282 /* ExportSpecifier */: + case 277 /* ImportSpecifier */: + case 206 /* ImportType */: + return true; + } + return false; +} +function tryGetModuleSpecifierFromDeclaration(node) { + var _a, _b; + switch (node.kind) { + case 261 /* VariableDeclaration */: + case 209 /* BindingElement */: + return (_a = findAncestor(node.initializer, (node2) => isRequireCall( + node2, + /*requireStringLiteralLikeArgument*/ + true + ))) == null ? void 0 : _a.arguments[0]; + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 352 /* JSDocImportTag */: + return tryCast(node.moduleSpecifier, isStringLiteralLike); + case 272 /* ImportEqualsDeclaration */: + return tryCast((_b = tryCast(node.moduleReference, isExternalModuleReference)) == null ? void 0 : _b.expression, isStringLiteralLike); + case 274 /* ImportClause */: + case 281 /* NamespaceExport */: + return tryCast(node.parent.moduleSpecifier, isStringLiteralLike); + case 275 /* NamespaceImport */: + case 282 /* ExportSpecifier */: + return tryCast(node.parent.parent.moduleSpecifier, isStringLiteralLike); + case 277 /* ImportSpecifier */: + return tryCast(node.parent.parent.parent.moduleSpecifier, isStringLiteralLike); + case 206 /* ImportType */: + return isLiteralImportTypeNode(node) ? node.argument.literal : void 0; + default: + Debug.assertNever(node); + } +} +function importFromModuleSpecifier(node) { + return tryGetImportFromModuleSpecifier(node) || Debug.failBadSyntaxKind(node.parent); +} +function tryGetImportFromModuleSpecifier(node) { + switch (node.parent.kind) { + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 352 /* JSDocImportTag */: + return node.parent; + case 284 /* ExternalModuleReference */: + return node.parent.parent; + case 214 /* CallExpression */: + return isImportCall(node.parent) || isRequireCall( + node.parent, + /*requireStringLiteralLikeArgument*/ + false + ) ? node.parent : void 0; + case 202 /* LiteralType */: + if (!isStringLiteral(node)) { + break; + } + return tryCast(node.parent.parent, isImportTypeNode); + default: + return void 0; + } +} +function shouldRewriteModuleSpecifier(specifier, compilerOptions) { + return !!compilerOptions.rewriteRelativeImportExtensions && pathIsRelative(specifier) && !isDeclarationFileName(specifier) && hasTSFileExtension(specifier); +} +function getExternalModuleName(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 352 /* JSDocImportTag */: + return node.moduleSpecifier; + case 272 /* ImportEqualsDeclaration */: + return node.moduleReference.kind === 284 /* ExternalModuleReference */ ? node.moduleReference.expression : void 0; + case 206 /* ImportType */: + return isLiteralImportTypeNode(node) ? node.argument.literal : void 0; + case 214 /* CallExpression */: + return node.arguments[0]; + case 268 /* ModuleDeclaration */: + return node.name.kind === 11 /* StringLiteral */ ? node.name : void 0; + default: + return Debug.assertNever(node); + } +} +function getNamespaceDeclarationNode(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + return node.importClause && tryCast(node.importClause.namedBindings, isNamespaceImport); + case 272 /* ImportEqualsDeclaration */: + return node; + case 279 /* ExportDeclaration */: + return node.exportClause && tryCast(node.exportClause, isNamespaceExport); + default: + return Debug.assertNever(node); + } +} +function isDefaultImport(node) { + return (node.kind === 273 /* ImportDeclaration */ || node.kind === 352 /* JSDocImportTag */) && !!node.importClause && !!node.importClause.name; +} +function forEachImportClauseDeclaration(node, action) { + if (node.name) { + const result = action(node); + if (result) return result; + } + if (node.namedBindings) { + const result = isNamespaceImport(node.namedBindings) ? action(node.namedBindings) : forEach(node.namedBindings.elements, action); + if (result) return result; + } +} +function hasQuestionToken(node) { + switch (node.kind) { + case 170 /* Parameter */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 305 /* ShorthandPropertyAssignment */: + case 304 /* PropertyAssignment */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return node.questionToken !== void 0; + } + return false; +} +function isJSDocConstructSignature(node) { + const param = isJSDocFunctionType(node) ? firstOrUndefined(node.parameters) : void 0; + const name = tryCast(param && param.name, isIdentifier); + return !!name && name.escapedText === "new"; +} +function isJSDocTypeAlias(node) { + return node.kind === 347 /* JSDocTypedefTag */ || node.kind === 339 /* JSDocCallbackTag */ || node.kind === 341 /* JSDocEnumTag */; +} +function isTypeAlias(node) { + return isJSDocTypeAlias(node) || isTypeAliasDeclaration(node); +} +function getSourceOfAssignment(node) { + return isExpressionStatement(node) && isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 64 /* EqualsToken */ ? getRightMostAssignedExpression(node.expression) : void 0; +} +function getSourceOfDefaultedAssignment(node) { + return isExpressionStatement(node) && isBinaryExpression(node.expression) && getAssignmentDeclarationKind(node.expression) !== 0 /* None */ && isBinaryExpression(node.expression.right) && (node.expression.right.operatorToken.kind === 57 /* BarBarToken */ || node.expression.right.operatorToken.kind === 61 /* QuestionQuestionToken */) ? node.expression.right.right : void 0; +} +function getSingleInitializerOfVariableStatementOrPropertyDeclaration(node) { + switch (node.kind) { + case 244 /* VariableStatement */: + const v = getSingleVariableOfVariableStatement(node); + return v && v.initializer; + case 173 /* PropertyDeclaration */: + return node.initializer; + case 304 /* PropertyAssignment */: + return node.initializer; + } +} +function getSingleVariableOfVariableStatement(node) { + return isVariableStatement(node) ? firstOrUndefined(node.declarationList.declarations) : void 0; +} +function getNestedModuleDeclaration(node) { + return isModuleDeclaration(node) && node.body && node.body.kind === 268 /* ModuleDeclaration */ ? node.body : void 0; +} +function canHaveFlowNode(node) { + if (node.kind >= 244 /* FirstStatement */ && node.kind <= 260 /* LastStatement */) { + return true; + } + switch (node.kind) { + case 80 /* Identifier */: + case 110 /* ThisKeyword */: + case 108 /* SuperKeyword */: + case 167 /* QualifiedName */: + case 237 /* MetaProperty */: + case 213 /* ElementAccessExpression */: + case 212 /* PropertyAccessExpression */: + case 209 /* BindingElement */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return true; + default: + return false; + } +} +function canHaveJSDoc(node) { + switch (node.kind) { + case 220 /* ArrowFunction */: + case 227 /* BinaryExpression */: + case 242 /* Block */: + case 253 /* BreakStatement */: + case 180 /* CallSignature */: + case 297 /* CaseClause */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 176 /* ClassStaticBlockDeclaration */: + case 177 /* Constructor */: + case 186 /* ConstructorType */: + case 181 /* ConstructSignature */: + case 252 /* ContinueStatement */: + case 260 /* DebuggerStatement */: + case 247 /* DoStatement */: + case 213 /* ElementAccessExpression */: + case 243 /* EmptyStatement */: + case 1 /* EndOfFileToken */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + case 278 /* ExportAssignment */: + case 279 /* ExportDeclaration */: + case 282 /* ExportSpecifier */: + case 245 /* ExpressionStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 249 /* ForStatement */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 185 /* FunctionType */: + case 178 /* GetAccessor */: + case 80 /* Identifier */: + case 246 /* IfStatement */: + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 182 /* IndexSignature */: + case 265 /* InterfaceDeclaration */: + case 318 /* JSDocFunctionType */: + case 324 /* JSDocSignature */: + case 257 /* LabeledStatement */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 268 /* ModuleDeclaration */: + case 203 /* NamedTupleMember */: + case 271 /* NamespaceExportDeclaration */: + case 211 /* ObjectLiteralExpression */: + case 170 /* Parameter */: + case 218 /* ParenthesizedExpression */: + case 212 /* PropertyAccessExpression */: + case 304 /* PropertyAssignment */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 254 /* ReturnStatement */: + case 241 /* SemicolonClassElement */: + case 179 /* SetAccessor */: + case 305 /* ShorthandPropertyAssignment */: + case 306 /* SpreadAssignment */: + case 256 /* SwitchStatement */: + case 258 /* ThrowStatement */: + case 259 /* TryStatement */: + case 266 /* TypeAliasDeclaration */: + case 169 /* TypeParameter */: + case 261 /* VariableDeclaration */: + case 244 /* VariableStatement */: + case 248 /* WhileStatement */: + case 255 /* WithStatement */: + return true; + default: + return false; + } +} +function getJSDocCommentsAndTags(hostNode, noCache) { + let result; + if (isVariableLike(hostNode) && hasInitializer(hostNode) && hasJSDocNodes(hostNode.initializer)) { + result = addRange(result, filterOwnedJSDocTags(hostNode, hostNode.initializer.jsDoc)); + } + let node = hostNode; + while (node && node.parent) { + if (hasJSDocNodes(node)) { + result = addRange(result, filterOwnedJSDocTags(hostNode, node.jsDoc)); + } + if (node.kind === 170 /* Parameter */) { + result = addRange(result, (noCache ? getJSDocParameterTagsNoCache : getJSDocParameterTags)(node)); + break; + } + if (node.kind === 169 /* TypeParameter */) { + result = addRange(result, (noCache ? getJSDocTypeParameterTagsNoCache : getJSDocTypeParameterTags)(node)); + break; + } + node = getNextJSDocCommentLocation(node); + } + return result || emptyArray; +} +function filterOwnedJSDocTags(hostNode, comments) { + const lastJsDoc = last(comments); + return flatMap(comments, (jsDoc) => { + if (jsDoc === lastJsDoc) { + const ownedTags = filter(jsDoc.tags, (tag) => ownsJSDocTag(hostNode, tag)); + return jsDoc.tags === ownedTags ? [jsDoc] : ownedTags; + } else { + return filter(jsDoc.tags, isJSDocOverloadTag); + } + }); +} +function ownsJSDocTag(hostNode, tag) { + return !(isJSDocTypeTag(tag) || isJSDocSatisfiesTag(tag)) || !tag.parent || !isJSDoc(tag.parent) || !isParenthesizedExpression(tag.parent.parent) || tag.parent.parent === hostNode; +} +function getNextJSDocCommentLocation(node) { + const parent2 = node.parent; + if (parent2.kind === 304 /* PropertyAssignment */ || parent2.kind === 278 /* ExportAssignment */ || parent2.kind === 173 /* PropertyDeclaration */ || parent2.kind === 245 /* ExpressionStatement */ && node.kind === 212 /* PropertyAccessExpression */ || parent2.kind === 254 /* ReturnStatement */ || getNestedModuleDeclaration(parent2) || isAssignmentExpression(node)) { + return parent2; + } else if (parent2.parent && (getSingleVariableOfVariableStatement(parent2.parent) === node || isAssignmentExpression(parent2))) { + return parent2.parent; + } else if (parent2.parent && parent2.parent.parent && (getSingleVariableOfVariableStatement(parent2.parent.parent) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(parent2.parent.parent) === node || getSourceOfDefaultedAssignment(parent2.parent.parent))) { + return parent2.parent.parent; + } +} +function getParameterSymbolFromJSDoc(node) { + if (node.symbol) { + return node.symbol; + } + if (!isIdentifier(node.name)) { + return void 0; + } + const name = node.name.escapedText; + const decl = getHostSignatureFromJSDoc(node); + if (!decl) { + return void 0; + } + const parameter = find(decl.parameters, (p) => p.name.kind === 80 /* Identifier */ && p.name.escapedText === name); + return parameter && parameter.symbol; +} +function getEffectiveContainerForJSDocTemplateTag(node) { + if (isJSDoc(node.parent) && node.parent.tags) { + const typeAlias = find(node.parent.tags, isJSDocTypeAlias); + if (typeAlias) { + return typeAlias; + } + } + return getHostSignatureFromJSDoc(node); +} +function getJSDocOverloadTags(node) { + return getAllJSDocTags(node, isJSDocOverloadTag); +} +function getHostSignatureFromJSDoc(node) { + const host = getEffectiveJSDocHost(node); + if (host) { + return isPropertySignature(host) && host.type && isFunctionLike(host.type) ? host.type : isFunctionLike(host) ? host : void 0; + } + return void 0; +} +function getEffectiveJSDocHost(node) { + const host = getJSDocHost(node); + if (host) { + return getSourceOfDefaultedAssignment(host) || getSourceOfAssignment(host) || getSingleInitializerOfVariableStatementOrPropertyDeclaration(host) || getSingleVariableOfVariableStatement(host) || getNestedModuleDeclaration(host) || host; + } +} +function getJSDocHost(node) { + const jsDoc = getJSDocRoot(node); + if (!jsDoc) { + return void 0; + } + const host = jsDoc.parent; + if (host && host.jsDoc && jsDoc === lastOrUndefined(host.jsDoc)) { + return host; + } +} +function getJSDocRoot(node) { + return findAncestor(node.parent, isJSDoc); +} +function getTypeParameterFromJsDoc(node) { + const name = node.name.escapedText; + const { typeParameters } = node.parent.parent.parent; + return typeParameters && find(typeParameters, (p) => p.name.escapedText === name); +} +function hasTypeArguments(node) { + return !!node.typeArguments; +} +var AssignmentKind = /* @__PURE__ */ ((AssignmentKind2) => { + AssignmentKind2[AssignmentKind2["None"] = 0] = "None"; + AssignmentKind2[AssignmentKind2["Definite"] = 1] = "Definite"; + AssignmentKind2[AssignmentKind2["Compound"] = 2] = "Compound"; + return AssignmentKind2; +})(AssignmentKind || {}); +function getAssignmentTarget(node) { + let parent2 = node.parent; + while (true) { + switch (parent2.kind) { + case 227 /* BinaryExpression */: + const binaryExpression = parent2; + const binaryOperator = binaryExpression.operatorToken.kind; + return isAssignmentOperator(binaryOperator) && binaryExpression.left === node ? binaryExpression : void 0; + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + const unaryExpression = parent2; + const unaryOperator = unaryExpression.operator; + return unaryOperator === 46 /* PlusPlusToken */ || unaryOperator === 47 /* MinusMinusToken */ ? unaryExpression : void 0; + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + const forInOrOfStatement = parent2; + return forInOrOfStatement.initializer === node ? forInOrOfStatement : void 0; + case 218 /* ParenthesizedExpression */: + case 210 /* ArrayLiteralExpression */: + case 231 /* SpreadElement */: + case 236 /* NonNullExpression */: + node = parent2; + break; + case 306 /* SpreadAssignment */: + node = parent2.parent; + break; + case 305 /* ShorthandPropertyAssignment */: + if (parent2.name !== node) { + return void 0; + } + node = parent2.parent; + break; + case 304 /* PropertyAssignment */: + if (parent2.name === node) { + return void 0; + } + node = parent2.parent; + break; + default: + return void 0; + } + parent2 = node.parent; + } +} +function getAssignmentTargetKind(node) { + const target = getAssignmentTarget(node); + if (!target) { + return 0 /* None */; + } + switch (target.kind) { + case 227 /* BinaryExpression */: + const binaryOperator = target.operatorToken.kind; + return binaryOperator === 64 /* EqualsToken */ || isLogicalOrCoalescingAssignmentOperator(binaryOperator) ? 1 /* Definite */ : 2 /* Compound */; + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return 2 /* Compound */; + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + return 1 /* Definite */; + } +} +function isAssignmentTarget(node) { + return !!getAssignmentTarget(node); +} +function isCompoundLikeAssignment(assignment) { + const right = skipParentheses(assignment.right); + return right.kind === 227 /* BinaryExpression */ && isShiftOperatorOrHigher(right.operatorToken.kind); +} +function isInCompoundLikeAssignment(node) { + const target = getAssignmentTarget(node); + return !!target && isAssignmentExpression( + target, + /*excludeCompoundAssignment*/ + true + ) && isCompoundLikeAssignment(target); +} +function isNodeWithPossibleHoistedDeclaration(node) { + switch (node.kind) { + case 242 /* Block */: + case 244 /* VariableStatement */: + case 255 /* WithStatement */: + case 246 /* IfStatement */: + case 256 /* SwitchStatement */: + case 270 /* CaseBlock */: + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + case 257 /* LabeledStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 259 /* TryStatement */: + case 300 /* CatchClause */: + return true; + } + return false; +} +function isValueSignatureDeclaration(node) { + return isFunctionExpression(node) || isArrowFunction(node) || isMethodOrAccessor(node) || isFunctionDeclaration(node) || isConstructorDeclaration(node); +} +function walkUp(node, kind) { + while (node && node.kind === kind) { + node = node.parent; + } + return node; +} +function walkUpParenthesizedTypes(node) { + return walkUp(node, 197 /* ParenthesizedType */); +} +function walkUpParenthesizedExpressions(node) { + return walkUp(node, 218 /* ParenthesizedExpression */); +} +function walkUpParenthesizedTypesAndGetParentAndChild(node) { + let child; + while (node && node.kind === 197 /* ParenthesizedType */) { + child = node; + node = node.parent; + } + return [child, node]; +} +function skipTypeParentheses(node) { + while (isParenthesizedTypeNode(node)) node = node.type; + return node; +} +function skipParentheses(node, excludeJSDocTypeAssertions) { + const flags = excludeJSDocTypeAssertions ? 1 /* Parentheses */ | -2147483648 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */; + return skipOuterExpressions(node, flags); +} +function isDeleteTarget(node) { + if (node.kind !== 212 /* PropertyAccessExpression */ && node.kind !== 213 /* ElementAccessExpression */) { + return false; + } + node = walkUpParenthesizedExpressions(node.parent); + return node && node.kind === 221 /* DeleteExpression */; +} +function isNodeDescendantOf(node, ancestor) { + while (node) { + if (node === ancestor) return true; + node = node.parent; + } + return false; +} +function isDeclarationName(name) { + return !isSourceFile(name) && !isBindingPattern(name) && isDeclaration(name.parent) && name.parent.name === name; +} +function getDeclarationFromName(name) { + const parent2 = name.parent; + switch (name.kind) { + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + if (isComputedPropertyName(parent2)) return parent2.parent; + // falls through + case 80 /* Identifier */: + if (isDeclaration(parent2)) { + return parent2.name === name ? parent2 : void 0; + } else if (isQualifiedName(parent2)) { + const tag = parent2.parent; + return isJSDocParameterTag(tag) && tag.name === parent2 ? tag : void 0; + } else { + const binExp = parent2.parent; + return isBinaryExpression(binExp) && getAssignmentDeclarationKind(binExp) !== 0 /* None */ && (binExp.left.symbol || binExp.symbol) && getNameOfDeclaration(binExp) === name ? binExp : void 0; + } + case 81 /* PrivateIdentifier */: + return isDeclaration(parent2) && parent2.name === name ? parent2 : void 0; + default: + return void 0; + } +} +function isLiteralComputedPropertyDeclarationName(node) { + return isStringOrNumericLiteralLike(node) && node.parent.kind === 168 /* ComputedPropertyName */ && isDeclaration(node.parent.parent); +} +function isIdentifierName(node) { + const parent2 = node.parent; + switch (parent2.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 307 /* EnumMember */: + case 304 /* PropertyAssignment */: + case 212 /* PropertyAccessExpression */: + return parent2.name === node; + case 167 /* QualifiedName */: + return parent2.right === node; + case 209 /* BindingElement */: + case 277 /* ImportSpecifier */: + return parent2.propertyName === node; + case 282 /* ExportSpecifier */: + case 292 /* JsxAttribute */: + case 286 /* JsxSelfClosingElement */: + case 287 /* JsxOpeningElement */: + case 288 /* JsxClosingElement */: + return true; + } + return false; +} +function getAliasDeclarationFromName(node) { + switch (node.parent.kind) { + case 274 /* ImportClause */: + case 277 /* ImportSpecifier */: + case 275 /* NamespaceImport */: + case 282 /* ExportSpecifier */: + case 278 /* ExportAssignment */: + case 272 /* ImportEqualsDeclaration */: + case 281 /* NamespaceExport */: + return node.parent; + case 167 /* QualifiedName */: + do { + node = node.parent; + } while (node.parent.kind === 167 /* QualifiedName */); + return getAliasDeclarationFromName(node); + } +} +function isAliasableExpression(e) { + return isEntityNameExpression(e) || isClassExpression(e); +} +function exportAssignmentIsAlias(node) { + const e = getExportAssignmentExpression(node); + return isAliasableExpression(e); +} +function getExportAssignmentExpression(node) { + return isExportAssignment(node) ? node.expression : node.right; +} +function getPropertyAssignmentAliasLikeExpression(node) { + return node.kind === 305 /* ShorthandPropertyAssignment */ ? node.name : node.kind === 304 /* PropertyAssignment */ ? node.initializer : node.parent.right; +} +function getEffectiveBaseTypeNode(node) { + const baseType = getClassExtendsHeritageElement(node); + if (baseType && isInJSFile(node)) { + const tag = getJSDocAugmentsTag(node); + if (tag) { + return tag.class; + } + } + return baseType; +} +function getClassExtendsHeritageElement(node) { + const heritageClause = getHeritageClause(node.heritageClauses, 96 /* ExtendsKeyword */); + return heritageClause && heritageClause.types.length > 0 ? heritageClause.types[0] : void 0; +} +function getEffectiveImplementsTypeNodes(node) { + if (isInJSFile(node)) { + return getJSDocImplementsTags(node).map((n) => n.class); + } else { + const heritageClause = getHeritageClause(node.heritageClauses, 119 /* ImplementsKeyword */); + return heritageClause == null ? void 0 : heritageClause.types; + } +} +function getAllSuperTypeNodes(node) { + return isInterfaceDeclaration(node) ? getInterfaceBaseTypeNodes(node) || emptyArray : isClassLike(node) ? concatenate(singleElementArray(getEffectiveBaseTypeNode(node)), getEffectiveImplementsTypeNodes(node)) || emptyArray : emptyArray; +} +function getInterfaceBaseTypeNodes(node) { + const heritageClause = getHeritageClause(node.heritageClauses, 96 /* ExtendsKeyword */); + return heritageClause ? heritageClause.types : void 0; +} +function getHeritageClause(clauses, kind) { + if (clauses) { + for (const clause of clauses) { + if (clause.token === kind) { + return clause; + } + } + } + return void 0; +} +function getAncestor(node, kind) { + while (node) { + if (node.kind === kind) { + return node; + } + node = node.parent; + } + return void 0; +} +function isKeyword(token) { + return 83 /* FirstKeyword */ <= token && token <= 166 /* LastKeyword */; +} +function isPunctuation(token) { + return 19 /* FirstPunctuation */ <= token && token <= 79 /* LastPunctuation */; +} +function isKeywordOrPunctuation(token) { + return isKeyword(token) || isPunctuation(token); +} +function isContextualKeyword(token) { + return 128 /* FirstContextualKeyword */ <= token && token <= 166 /* LastContextualKeyword */; +} +function isNonContextualKeyword(token) { + return isKeyword(token) && !isContextualKeyword(token); +} +function isStringANonContextualKeyword(name) { + const token = stringToToken(name); + return token !== void 0 && isNonContextualKeyword(token); +} +function isIdentifierANonContextualKeyword(node) { + const originalKeywordKind = identifierToKeywordKind(node); + return !!originalKeywordKind && !isContextualKeyword(originalKeywordKind); +} +function isTrivia(token) { + return 2 /* FirstTriviaToken */ <= token && token <= 7 /* LastTriviaToken */; +} +var FunctionFlags = /* @__PURE__ */ ((FunctionFlags2) => { + FunctionFlags2[FunctionFlags2["Normal"] = 0] = "Normal"; + FunctionFlags2[FunctionFlags2["Generator"] = 1] = "Generator"; + FunctionFlags2[FunctionFlags2["Async"] = 2] = "Async"; + FunctionFlags2[FunctionFlags2["Invalid"] = 4] = "Invalid"; + FunctionFlags2[FunctionFlags2["AsyncGenerator"] = 3] = "AsyncGenerator"; + return FunctionFlags2; +})(FunctionFlags || {}); +function getFunctionFlags(node) { + if (!node) { + return 4 /* Invalid */; + } + let flags = 0 /* Normal */; + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + if (node.asteriskToken) { + flags |= 1 /* Generator */; + } + // falls through + case 220 /* ArrowFunction */: + if (hasSyntacticModifier(node, 1024 /* Async */)) { + flags |= 2 /* Async */; + } + break; + } + if (!node.body) { + flags |= 4 /* Invalid */; + } + return flags; +} +function isAsyncFunction(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + return node.body !== void 0 && node.asteriskToken === void 0 && hasSyntacticModifier(node, 1024 /* Async */); + } + return false; +} +function isStringOrNumericLiteralLike(node) { + return isStringLiteralLike(node) || isNumericLiteral(node); +} +function isSignedNumericLiteral(node) { + return isPrefixUnaryExpression(node) && (node.operator === 40 /* PlusToken */ || node.operator === 41 /* MinusToken */) && isNumericLiteral(node.operand); +} +function hasDynamicName(declaration) { + const name = getNameOfDeclaration(declaration); + return !!name && isDynamicName(name); +} +function isDynamicName(name) { + if (!(name.kind === 168 /* ComputedPropertyName */ || name.kind === 213 /* ElementAccessExpression */)) { + return false; + } + const expr = isElementAccessExpression(name) ? skipParentheses(name.argumentExpression) : name.expression; + return !isStringOrNumericLiteralLike(expr) && !isSignedNumericLiteral(expr); +} +function getPropertyNameForPropertyNameNode(name) { + switch (name.kind) { + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + return name.escapedText; + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + return escapeLeadingUnderscores(name.text); + case 168 /* ComputedPropertyName */: + const nameExpression = name.expression; + if (isStringOrNumericLiteralLike(nameExpression)) { + return escapeLeadingUnderscores(nameExpression.text); + } else if (isSignedNumericLiteral(nameExpression)) { + if (nameExpression.operator === 41 /* MinusToken */) { + return tokenToString(nameExpression.operator) + nameExpression.operand.text; + } + return nameExpression.operand.text; + } + return void 0; + case 296 /* JsxNamespacedName */: + return getEscapedTextOfJsxNamespacedName(name); + default: + return Debug.assertNever(name); + } +} +function isPropertyNameLiteral(node) { + switch (node.kind) { + case 80 /* Identifier */: + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + return true; + default: + return false; + } +} +function getTextOfIdentifierOrLiteral(node) { + return isMemberName(node) ? idText(node) : isJsxNamespacedName(node) ? getTextOfJsxNamespacedName(node) : node.text; +} +function getEscapedTextOfIdentifierOrLiteral(node) { + return isMemberName(node) ? node.escapedText : isJsxNamespacedName(node) ? getEscapedTextOfJsxNamespacedName(node) : escapeLeadingUnderscores(node.text); +} +function getSymbolNameForPrivateIdentifier(containingClassSymbol, description3) { + return `__#${getSymbolId(containingClassSymbol)}@${description3}`; +} +function isKnownSymbol(symbol) { + return startsWith(symbol.escapedName, "__@"); +} +function isPrivateIdentifierSymbol(symbol) { + return startsWith(symbol.escapedName, "__#"); +} +function isProtoSetter(node) { + return isIdentifier(node) ? idText(node) === "__proto__" : isStringLiteral(node) && node.text === "__proto__"; +} +function isAnonymousFunctionDefinition(node, cb) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 232 /* ClassExpression */: + if (classHasDeclaredOrExplicitlyAssignedName(node)) { + return false; + } + break; + case 219 /* FunctionExpression */: + if (node.name) { + return false; + } + break; + case 220 /* ArrowFunction */: + break; + default: + return false; + } + return typeof cb === "function" ? cb(node) : true; +} +function isNamedEvaluationSource(node) { + switch (node.kind) { + case 304 /* PropertyAssignment */: + return !isProtoSetter(node.name); + case 305 /* ShorthandPropertyAssignment */: + return !!node.objectAssignmentInitializer; + case 261 /* VariableDeclaration */: + return isIdentifier(node.name) && !!node.initializer; + case 170 /* Parameter */: + return isIdentifier(node.name) && !!node.initializer && !node.dotDotDotToken; + case 209 /* BindingElement */: + return isIdentifier(node.name) && !!node.initializer && !node.dotDotDotToken; + case 173 /* PropertyDeclaration */: + return !!node.initializer; + case 227 /* BinaryExpression */: + switch (node.operatorToken.kind) { + case 64 /* EqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 76 /* BarBarEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return isIdentifier(node.left); + } + break; + case 278 /* ExportAssignment */: + return true; + } + return false; +} +function isNamedEvaluation(node, cb) { + if (!isNamedEvaluationSource(node)) return false; + switch (node.kind) { + case 304 /* PropertyAssignment */: + return isAnonymousFunctionDefinition(node.initializer, cb); + case 305 /* ShorthandPropertyAssignment */: + return isAnonymousFunctionDefinition(node.objectAssignmentInitializer, cb); + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 173 /* PropertyDeclaration */: + return isAnonymousFunctionDefinition(node.initializer, cb); + case 227 /* BinaryExpression */: + return isAnonymousFunctionDefinition(node.right, cb); + case 278 /* ExportAssignment */: + return isAnonymousFunctionDefinition(node.expression, cb); + } +} +function isPushOrUnshiftIdentifier(node) { + return node.escapedText === "push" || node.escapedText === "unshift"; +} +function isPartOfParameterDeclaration(node) { + const root = getRootDeclaration(node); + return root.kind === 170 /* Parameter */; +} +function getRootDeclaration(node) { + while (node.kind === 209 /* BindingElement */) { + node = node.parent.parent; + } + return node; +} +function nodeStartsNewLexicalEnvironment(node) { + const kind = node.kind; + return kind === 177 /* Constructor */ || kind === 219 /* FunctionExpression */ || kind === 263 /* FunctionDeclaration */ || kind === 220 /* ArrowFunction */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */ || kind === 268 /* ModuleDeclaration */ || kind === 308 /* SourceFile */; +} +function nodeIsSynthesized(range) { + return positionIsSynthesized(range.pos) || positionIsSynthesized(range.end); +} +var Associativity = /* @__PURE__ */ ((Associativity2) => { + Associativity2[Associativity2["Left"] = 0] = "Left"; + Associativity2[Associativity2["Right"] = 1] = "Right"; + return Associativity2; +})(Associativity || {}); +function getExpressionAssociativity(expression) { + const operator = getOperator(expression); + const hasArguments = expression.kind === 215 /* NewExpression */ && expression.arguments !== void 0; + return getOperatorAssociativity(expression.kind, operator, hasArguments); +} +function getOperatorAssociativity(kind, operator, hasArguments) { + switch (kind) { + case 215 /* NewExpression */: + return hasArguments ? 0 /* Left */ : 1 /* Right */; + case 225 /* PrefixUnaryExpression */: + case 222 /* TypeOfExpression */: + case 223 /* VoidExpression */: + case 221 /* DeleteExpression */: + case 224 /* AwaitExpression */: + case 228 /* ConditionalExpression */: + case 230 /* YieldExpression */: + return 1 /* Right */; + case 227 /* BinaryExpression */: + switch (operator) { + case 43 /* AsteriskAsteriskToken */: + case 64 /* EqualsToken */: + case 65 /* PlusEqualsToken */: + case 66 /* MinusEqualsToken */: + case 68 /* AsteriskAsteriskEqualsToken */: + case 67 /* AsteriskEqualsToken */: + case 69 /* SlashEqualsToken */: + case 70 /* PercentEqualsToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 74 /* AmpersandEqualsToken */: + case 79 /* CaretEqualsToken */: + case 75 /* BarEqualsToken */: + case 76 /* BarBarEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return 1 /* Right */; + } + } + return 0 /* Left */; +} +function getExpressionPrecedence(expression) { + const operator = getOperator(expression); + const hasArguments = expression.kind === 215 /* NewExpression */ && expression.arguments !== void 0; + return getOperatorPrecedence(expression.kind, operator, hasArguments); +} +function getOperator(expression) { + if (expression.kind === 227 /* BinaryExpression */) { + return expression.operatorToken.kind; + } else if (expression.kind === 225 /* PrefixUnaryExpression */ || expression.kind === 226 /* PostfixUnaryExpression */) { + return expression.operator; + } else { + return expression.kind; + } +} +var OperatorPrecedence = /* @__PURE__ */ ((OperatorPrecedence2) => { + OperatorPrecedence2[OperatorPrecedence2["Comma"] = 0] = "Comma"; + OperatorPrecedence2[OperatorPrecedence2["Spread"] = 1] = "Spread"; + OperatorPrecedence2[OperatorPrecedence2["Yield"] = 2] = "Yield"; + OperatorPrecedence2[OperatorPrecedence2["Assignment"] = 3] = "Assignment"; + OperatorPrecedence2[OperatorPrecedence2["Conditional"] = 4] = "Conditional"; + OperatorPrecedence2[OperatorPrecedence2["LogicalOR"] = 5] = "LogicalOR"; + OperatorPrecedence2[OperatorPrecedence2["Coalesce"] = 5 /* LogicalOR */] = "Coalesce"; + OperatorPrecedence2[OperatorPrecedence2["LogicalAND"] = 6] = "LogicalAND"; + OperatorPrecedence2[OperatorPrecedence2["BitwiseOR"] = 7] = "BitwiseOR"; + OperatorPrecedence2[OperatorPrecedence2["BitwiseXOR"] = 8] = "BitwiseXOR"; + OperatorPrecedence2[OperatorPrecedence2["BitwiseAND"] = 9] = "BitwiseAND"; + OperatorPrecedence2[OperatorPrecedence2["Equality"] = 10] = "Equality"; + OperatorPrecedence2[OperatorPrecedence2["Relational"] = 11] = "Relational"; + OperatorPrecedence2[OperatorPrecedence2["Shift"] = 12] = "Shift"; + OperatorPrecedence2[OperatorPrecedence2["Additive"] = 13] = "Additive"; + OperatorPrecedence2[OperatorPrecedence2["Multiplicative"] = 14] = "Multiplicative"; + OperatorPrecedence2[OperatorPrecedence2["Exponentiation"] = 15] = "Exponentiation"; + OperatorPrecedence2[OperatorPrecedence2["Unary"] = 16] = "Unary"; + OperatorPrecedence2[OperatorPrecedence2["Update"] = 17] = "Update"; + OperatorPrecedence2[OperatorPrecedence2["LeftHandSide"] = 18] = "LeftHandSide"; + OperatorPrecedence2[OperatorPrecedence2["Member"] = 19] = "Member"; + OperatorPrecedence2[OperatorPrecedence2["Primary"] = 20] = "Primary"; + OperatorPrecedence2[OperatorPrecedence2["Highest"] = 20 /* Primary */] = "Highest"; + OperatorPrecedence2[OperatorPrecedence2["Lowest"] = 0 /* Comma */] = "Lowest"; + OperatorPrecedence2[OperatorPrecedence2["Invalid"] = -1] = "Invalid"; + return OperatorPrecedence2; +})(OperatorPrecedence || {}); +function getOperatorPrecedence(nodeKind, operatorKind, hasArguments) { + switch (nodeKind) { + case 357 /* CommaListExpression */: + return 0 /* Comma */; + case 231 /* SpreadElement */: + return 1 /* Spread */; + case 230 /* YieldExpression */: + return 2 /* Yield */; + case 228 /* ConditionalExpression */: + return 4 /* Conditional */; + case 227 /* BinaryExpression */: + switch (operatorKind) { + case 28 /* CommaToken */: + return 0 /* Comma */; + case 64 /* EqualsToken */: + case 65 /* PlusEqualsToken */: + case 66 /* MinusEqualsToken */: + case 68 /* AsteriskAsteriskEqualsToken */: + case 67 /* AsteriskEqualsToken */: + case 69 /* SlashEqualsToken */: + case 70 /* PercentEqualsToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 74 /* AmpersandEqualsToken */: + case 79 /* CaretEqualsToken */: + case 75 /* BarEqualsToken */: + case 76 /* BarBarEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return 3 /* Assignment */; + default: + return getBinaryOperatorPrecedence(operatorKind); + } + // TODO: Should prefix `++` and `--` be moved to the `Update` precedence? + case 217 /* TypeAssertionExpression */: + case 236 /* NonNullExpression */: + case 225 /* PrefixUnaryExpression */: + case 222 /* TypeOfExpression */: + case 223 /* VoidExpression */: + case 221 /* DeleteExpression */: + case 224 /* AwaitExpression */: + return 16 /* Unary */; + case 226 /* PostfixUnaryExpression */: + return 17 /* Update */; + case 214 /* CallExpression */: + return 18 /* LeftHandSide */; + case 215 /* NewExpression */: + return hasArguments ? 19 /* Member */ : 18 /* LeftHandSide */; + case 216 /* TaggedTemplateExpression */: + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + case 237 /* MetaProperty */: + return 19 /* Member */; + case 235 /* AsExpression */: + case 239 /* SatisfiesExpression */: + return 11 /* Relational */; + case 110 /* ThisKeyword */: + case 108 /* SuperKeyword */: + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + case 106 /* NullKeyword */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 11 /* StringLiteral */: + case 210 /* ArrayLiteralExpression */: + case 211 /* ObjectLiteralExpression */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 232 /* ClassExpression */: + case 14 /* RegularExpressionLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 229 /* TemplateExpression */: + case 218 /* ParenthesizedExpression */: + case 233 /* OmittedExpression */: + case 285 /* JsxElement */: + case 286 /* JsxSelfClosingElement */: + case 289 /* JsxFragment */: + return 20 /* Primary */; + default: + return -1 /* Invalid */; + } +} +function getBinaryOperatorPrecedence(kind) { + switch (kind) { + case 61 /* QuestionQuestionToken */: + return 5 /* Coalesce */; + case 57 /* BarBarToken */: + return 5 /* LogicalOR */; + case 56 /* AmpersandAmpersandToken */: + return 6 /* LogicalAND */; + case 52 /* BarToken */: + return 7 /* BitwiseOR */; + case 53 /* CaretToken */: + return 8 /* BitwiseXOR */; + case 51 /* AmpersandToken */: + return 9 /* BitwiseAND */; + case 35 /* EqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + case 37 /* EqualsEqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + return 10 /* Equality */; + case 30 /* LessThanToken */: + case 32 /* GreaterThanToken */: + case 33 /* LessThanEqualsToken */: + case 34 /* GreaterThanEqualsToken */: + case 104 /* InstanceOfKeyword */: + case 103 /* InKeyword */: + case 130 /* AsKeyword */: + case 152 /* SatisfiesKeyword */: + return 11 /* Relational */; + case 48 /* LessThanLessThanToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + return 12 /* Shift */; + case 40 /* PlusToken */: + case 41 /* MinusToken */: + return 13 /* Additive */; + case 42 /* AsteriskToken */: + case 44 /* SlashToken */: + case 45 /* PercentToken */: + return 14 /* Multiplicative */; + case 43 /* AsteriskAsteriskToken */: + return 15 /* Exponentiation */; + } + return -1; +} +function getSemanticJsxChildren(children) { + return filter(children, (i) => { + switch (i.kind) { + case 295 /* JsxExpression */: + return !!i.expression; + case 12 /* JsxText */: + return !i.containsOnlyTriviaWhiteSpaces; + default: + return true; + } + }); +} +function createDiagnosticCollection() { + let nonFileDiagnostics = []; + const filesWithDiagnostics = []; + const fileDiagnostics = /* @__PURE__ */ new Map(); + let hasReadNonFileDiagnostics = false; + return { + add, + lookup, + getGlobalDiagnostics, + getDiagnostics: getDiagnostics2 + }; + function lookup(diagnostic) { + let diagnostics; + if (diagnostic.file) { + diagnostics = fileDiagnostics.get(diagnostic.file.fileName); + } else { + diagnostics = nonFileDiagnostics; + } + if (!diagnostics) { + return void 0; + } + const result = binarySearch(diagnostics, diagnostic, identity, compareDiagnosticsSkipRelatedInformation); + if (result >= 0) { + return diagnostics[result]; + } + if (~result > 0 && diagnosticsEqualityComparer(diagnostic, diagnostics[~result - 1])) { + return diagnostics[~result - 1]; + } + return void 0; + } + function add(diagnostic) { + let diagnostics; + if (diagnostic.file) { + diagnostics = fileDiagnostics.get(diagnostic.file.fileName); + if (!diagnostics) { + diagnostics = []; + fileDiagnostics.set(diagnostic.file.fileName, diagnostics); + insertSorted(filesWithDiagnostics, diagnostic.file.fileName, compareStringsCaseSensitive); + } + } else { + if (hasReadNonFileDiagnostics) { + hasReadNonFileDiagnostics = false; + nonFileDiagnostics = nonFileDiagnostics.slice(); + } + diagnostics = nonFileDiagnostics; + } + insertSorted(diagnostics, diagnostic, compareDiagnosticsSkipRelatedInformation, diagnosticsEqualityComparer); + } + function getGlobalDiagnostics() { + hasReadNonFileDiagnostics = true; + return nonFileDiagnostics; + } + function getDiagnostics2(fileName) { + if (fileName) { + return fileDiagnostics.get(fileName) || []; + } + const fileDiags = flatMapToMutable(filesWithDiagnostics, (f) => fileDiagnostics.get(f)); + if (!nonFileDiagnostics.length) { + return fileDiags; + } + fileDiags.unshift(...nonFileDiagnostics); + return fileDiags; + } +} +var templateSubstitutionRegExp = /\$\{/g; +function escapeTemplateSubstitution(str) { + return str.replace(templateSubstitutionRegExp, "\\${"); +} +function containsInvalidEscapeFlag(node) { + return !!((node.templateFlags || 0) & 2048 /* ContainsInvalidEscape */); +} +function hasInvalidEscape(template) { + return template && !!(isNoSubstitutionTemplateLiteral(template) ? containsInvalidEscapeFlag(template) : containsInvalidEscapeFlag(template.head) || some(template.templateSpans, (span) => containsInvalidEscapeFlag(span.literal))); +} +var doubleQuoteEscapedCharsRegExp = /[\\"\u0000-\u001f\u2028\u2029\u0085]/g; +var singleQuoteEscapedCharsRegExp = /[\\'\u0000-\u001f\u2028\u2029\u0085]/g; +var backtickQuoteEscapedCharsRegExp = /\r\n|[\\`\u0000-\u0009\u000b-\u001f\u2028\u2029\u0085]/g; +var escapedCharsMap = new Map(Object.entries({ + " ": "\\t", + "\v": "\\v", + "\f": "\\f", + "\b": "\\b", + "\r": "\\r", + "\n": "\\n", + "\\": "\\\\", + '"': '\\"', + "'": "\\'", + "`": "\\`", + "\u2028": "\\u2028", + // lineSeparator + "\u2029": "\\u2029", + // paragraphSeparator + "\x85": "\\u0085", + // nextLine + "\r\n": "\\r\\n" + // special case for CRLFs in backticks +})); +function encodeUtf16EscapeSequence(charCode) { + const hexCharCode = charCode.toString(16).toUpperCase(); + const paddedHexCode = ("0000" + hexCharCode).slice(-4); + return "\\u" + paddedHexCode; +} +function getReplacement(c, offset, input) { + if (c.charCodeAt(0) === 0 /* nullCharacter */) { + const lookAhead = input.charCodeAt(offset + c.length); + if (lookAhead >= 48 /* _0 */ && lookAhead <= 57 /* _9 */) { + return "\\x00"; + } + return "\\0"; + } + return escapedCharsMap.get(c) || encodeUtf16EscapeSequence(c.charCodeAt(0)); +} +function escapeString(s, quoteChar) { + const escapedCharsRegExp = quoteChar === 96 /* backtick */ ? backtickQuoteEscapedCharsRegExp : quoteChar === 39 /* singleQuote */ ? singleQuoteEscapedCharsRegExp : doubleQuoteEscapedCharsRegExp; + return s.replace(escapedCharsRegExp, getReplacement); +} +var nonAsciiCharacters = /[^\u0000-\u007F]/g; +function escapeNonAsciiString(s, quoteChar) { + s = escapeString(s, quoteChar); + return nonAsciiCharacters.test(s) ? s.replace(nonAsciiCharacters, (c) => encodeUtf16EscapeSequence(c.charCodeAt(0))) : s; +} +var jsxDoubleQuoteEscapedCharsRegExp = /["\u0000-\u001f\u2028\u2029\u0085]/g; +var jsxSingleQuoteEscapedCharsRegExp = /['\u0000-\u001f\u2028\u2029\u0085]/g; +var jsxEscapedCharsMap = new Map(Object.entries({ + '"': """, + "'": "'" +})); +function encodeJsxCharacterEntity(charCode) { + const hexCharCode = charCode.toString(16).toUpperCase(); + return "&#x" + hexCharCode + ";"; +} +function getJsxAttributeStringReplacement(c) { + if (c.charCodeAt(0) === 0 /* nullCharacter */) { + return "�"; + } + return jsxEscapedCharsMap.get(c) || encodeJsxCharacterEntity(c.charCodeAt(0)); +} +function escapeJsxAttributeString(s, quoteChar) { + const escapedCharsRegExp = quoteChar === 39 /* singleQuote */ ? jsxSingleQuoteEscapedCharsRegExp : jsxDoubleQuoteEscapedCharsRegExp; + return s.replace(escapedCharsRegExp, getJsxAttributeStringReplacement); +} +function stripQuotes(name) { + const length2 = name.length; + if (length2 >= 2 && name.charCodeAt(0) === name.charCodeAt(length2 - 1) && isQuoteOrBacktick(name.charCodeAt(0))) { + return name.substring(1, length2 - 1); + } + return name; +} +function isQuoteOrBacktick(charCode) { + return charCode === 39 /* singleQuote */ || charCode === 34 /* doubleQuote */ || charCode === 96 /* backtick */; +} +function isIntrinsicJsxName(name) { + const ch = name.charCodeAt(0); + return ch >= 97 /* a */ && ch <= 122 /* z */ || name.includes("-"); +} +var indentStrings = ["", " "]; +function getIndentString(level) { + const singleLevel = indentStrings[1]; + for (let current = indentStrings.length; current <= level; current++) { + indentStrings.push(indentStrings[current - 1] + singleLevel); + } + return indentStrings[level]; +} +function getIndentSize() { + return indentStrings[1].length; +} +function createTextWriter(newLine) { + var output; + var indent3; + var lineStart; + var lineCount; + var linePos; + var hasTrailingComment = false; + function updateLineCountAndPosFor(s) { + const lineStartsOfS = computeLineStarts(s); + if (lineStartsOfS.length > 1) { + lineCount = lineCount + lineStartsOfS.length - 1; + linePos = output.length - s.length + last(lineStartsOfS); + lineStart = linePos - output.length === 0; + } else { + lineStart = false; + } + } + function writeText(s) { + if (s && s.length) { + if (lineStart) { + s = getIndentString(indent3) + s; + lineStart = false; + } + output += s; + updateLineCountAndPosFor(s); + } + } + function write(s) { + if (s) hasTrailingComment = false; + writeText(s); + } + function writeComment(s) { + if (s) hasTrailingComment = true; + writeText(s); + } + function reset2() { + output = ""; + indent3 = 0; + lineStart = true; + lineCount = 0; + linePos = 0; + hasTrailingComment = false; + } + function rawWrite(s) { + if (s !== void 0) { + output += s; + updateLineCountAndPosFor(s); + hasTrailingComment = false; + } + } + function writeLiteral(s) { + if (s && s.length) { + write(s); + } + } + function writeLine(force) { + if (!lineStart || force) { + output += newLine; + lineCount++; + linePos = output.length; + lineStart = true; + hasTrailingComment = false; + } + } + reset2(); + return { + write, + rawWrite, + writeLiteral, + writeLine, + increaseIndent: () => { + indent3++; + }, + decreaseIndent: () => { + indent3--; + }, + getIndent: () => indent3, + getTextPos: () => output.length, + getLine: () => lineCount, + getColumn: () => lineStart ? indent3 * getIndentSize() : output.length - linePos, + getText: () => output, + isAtStartOfLine: () => lineStart, + hasTrailingComment: () => hasTrailingComment, + hasTrailingWhitespace: () => !!output.length && isWhiteSpaceLike(output.charCodeAt(output.length - 1)), + clear: reset2, + writeKeyword: write, + writeOperator: write, + writeParameter: write, + writeProperty: write, + writePunctuation: write, + writeSpace: write, + writeStringLiteral: write, + writeSymbol: (s, _) => write(s), + writeTrailingSemicolon: write, + writeComment + }; +} +function getTrailingSemicolonDeferringWriter(writer) { + let pendingTrailingSemicolon = false; + function commitPendingTrailingSemicolon() { + if (pendingTrailingSemicolon) { + writer.writeTrailingSemicolon(";"); + pendingTrailingSemicolon = false; + } + } + return { + ...writer, + writeTrailingSemicolon() { + pendingTrailingSemicolon = true; + }, + writeLiteral(s) { + commitPendingTrailingSemicolon(); + writer.writeLiteral(s); + }, + writeStringLiteral(s) { + commitPendingTrailingSemicolon(); + writer.writeStringLiteral(s); + }, + writeSymbol(s, sym) { + commitPendingTrailingSemicolon(); + writer.writeSymbol(s, sym); + }, + writePunctuation(s) { + commitPendingTrailingSemicolon(); + writer.writePunctuation(s); + }, + writeKeyword(s) { + commitPendingTrailingSemicolon(); + writer.writeKeyword(s); + }, + writeOperator(s) { + commitPendingTrailingSemicolon(); + writer.writeOperator(s); + }, + writeParameter(s) { + commitPendingTrailingSemicolon(); + writer.writeParameter(s); + }, + writeSpace(s) { + commitPendingTrailingSemicolon(); + writer.writeSpace(s); + }, + writeProperty(s) { + commitPendingTrailingSemicolon(); + writer.writeProperty(s); + }, + writeComment(s) { + commitPendingTrailingSemicolon(); + writer.writeComment(s); + }, + writeLine() { + commitPendingTrailingSemicolon(); + writer.writeLine(); + }, + increaseIndent() { + commitPendingTrailingSemicolon(); + writer.increaseIndent(); + }, + decreaseIndent() { + commitPendingTrailingSemicolon(); + writer.decreaseIndent(); + } + }; +} +function hostUsesCaseSensitiveFileNames(host) { + return host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : false; +} +function hostGetCanonicalFileName(host) { + return createGetCanonicalFileName(hostUsesCaseSensitiveFileNames(host)); +} +function getResolvedExternalModuleName(host, file, referenceFile) { + return file.moduleName || getExternalModuleNameFromPath(host, file.fileName, referenceFile && referenceFile.fileName); +} +function getCanonicalAbsolutePath(host, path) { + return host.getCanonicalFileName(getNormalizedAbsolutePath(path, host.getCurrentDirectory())); +} +function getExternalModuleNameFromDeclaration(host, resolver, declaration) { + const file = resolver.getExternalModuleFileFromDeclaration(declaration); + if (!file || file.isDeclarationFile) { + return void 0; + } + const specifier = getExternalModuleName(declaration); + if (specifier && isStringLiteralLike(specifier) && !pathIsRelative(specifier.text) && !getCanonicalAbsolutePath(host, file.path).includes(getCanonicalAbsolutePath(host, ensureTrailingDirectorySeparator(host.getCommonSourceDirectory())))) { + return void 0; + } + return getResolvedExternalModuleName(host, file); +} +function getExternalModuleNameFromPath(host, fileName, referencePath) { + const getCanonicalFileName = (f) => host.getCanonicalFileName(f); + const dir = toPath(referencePath ? getDirectoryPath(referencePath) : host.getCommonSourceDirectory(), host.getCurrentDirectory(), getCanonicalFileName); + const filePath = getNormalizedAbsolutePath(fileName, host.getCurrentDirectory()); + const relativePath = getRelativePathToDirectoryOrUrl( + dir, + filePath, + dir, + getCanonicalFileName, + /*isAbsolutePathAnUrl*/ + false + ); + const extensionless = removeFileExtension(relativePath); + return referencePath ? ensurePathIsNonModuleName(extensionless) : extensionless; +} +function getOwnEmitOutputFilePath(fileName, host, extension) { + const compilerOptions = host.getCompilerOptions(); + let emitOutputFilePathWithoutExtension; + if (compilerOptions.outDir) { + emitOutputFilePathWithoutExtension = removeFileExtension(getSourceFilePathInNewDir(fileName, host, compilerOptions.outDir)); + } else { + emitOutputFilePathWithoutExtension = removeFileExtension(fileName); + } + return emitOutputFilePathWithoutExtension + extension; +} +function getDeclarationEmitOutputFilePath(fileName, host) { + return getDeclarationEmitOutputFilePathWorker(fileName, host.getCompilerOptions(), host); +} +function getDeclarationEmitOutputFilePathWorker(fileName, options, host) { + const outputDir = options.declarationDir || options.outDir; + const path = outputDir ? getSourceFilePathInNewDirWorker(fileName, outputDir, host.getCurrentDirectory(), host.getCommonSourceDirectory(), (f) => host.getCanonicalFileName(f)) : fileName; + const declarationExtension = getDeclarationEmitExtensionForPath(path); + return removeFileExtension(path) + declarationExtension; +} +function getDeclarationEmitExtensionForPath(path) { + return fileExtensionIsOneOf(path, [".mjs" /* Mjs */, ".mts" /* Mts */]) ? ".d.mts" /* Dmts */ : fileExtensionIsOneOf(path, [".cjs" /* Cjs */, ".cts" /* Cts */]) ? ".d.cts" /* Dcts */ : fileExtensionIsOneOf(path, [".json" /* Json */]) ? `.d.json.ts` : ( + // Drive-by redefinition of json declaration file output name so if it's ever enabled, it behaves well + ".d.ts" /* Dts */ + ); +} +function getPossibleOriginalInputExtensionForExtension(path) { + return fileExtensionIsOneOf(path, [".d.mts" /* Dmts */, ".mjs" /* Mjs */, ".mts" /* Mts */]) ? [".mts" /* Mts */, ".mjs" /* Mjs */] : fileExtensionIsOneOf(path, [".d.cts" /* Dcts */, ".cjs" /* Cjs */, ".cts" /* Cts */]) ? [".cts" /* Cts */, ".cjs" /* Cjs */] : fileExtensionIsOneOf(path, [`.d.json.ts`]) ? [".json" /* Json */] : [".tsx" /* Tsx */, ".ts" /* Ts */, ".jsx" /* Jsx */, ".js" /* Js */]; +} +function getPossibleOriginalInputPathWithoutChangingExt(filePath, ignoreCase, outputDir, getCommonSourceDirectory2) { + return outputDir ? resolvePath( + getCommonSourceDirectory2(), + getRelativePathFromDirectory(outputDir, filePath, ignoreCase) + ) : filePath; +} +function getPathsBasePath(options, host) { + var _a; + if (!options.paths) return void 0; + return options.baseUrl ?? Debug.checkDefined(options.pathsBasePath || ((_a = host.getCurrentDirectory) == null ? void 0 : _a.call(host)), "Encountered 'paths' without a 'baseUrl', config file, or host 'getCurrentDirectory'."); +} +function getSourceFilesToEmit(host, targetSourceFile, forceDtsEmit) { + const options = host.getCompilerOptions(); + if (options.outFile) { + const moduleKind = getEmitModuleKind(options); + const moduleEmitEnabled = options.emitDeclarationOnly || moduleKind === 2 /* AMD */ || moduleKind === 4 /* System */; + return filter( + host.getSourceFiles(), + (sourceFile) => (moduleEmitEnabled || !isExternalModule(sourceFile)) && sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit) + ); + } else { + const sourceFiles = targetSourceFile === void 0 ? host.getSourceFiles() : [targetSourceFile]; + return filter( + sourceFiles, + (sourceFile) => sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit) + ); + } +} +function sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit) { + const options = host.getCompilerOptions(); + if (options.noEmitForJsFiles && isSourceFileJS(sourceFile)) return false; + if (sourceFile.isDeclarationFile) return false; + if (host.isSourceFileFromExternalLibrary(sourceFile)) return false; + if (forceDtsEmit) return true; + if (host.isSourceOfProjectReferenceRedirect(sourceFile.fileName)) return false; + if (!isJsonSourceFile(sourceFile)) return true; + if (host.getRedirectFromSourceFile(sourceFile.fileName)) return false; + if (options.outFile) return true; + if (!options.outDir) return false; + if (options.rootDir || options.composite && options.configFilePath) { + const commonDir = getNormalizedAbsolutePath(getCommonSourceDirectory(options, () => [], host.getCurrentDirectory(), host.getCanonicalFileName), host.getCurrentDirectory()); + const outputPath = getSourceFilePathInNewDirWorker(sourceFile.fileName, options.outDir, host.getCurrentDirectory(), commonDir, host.getCanonicalFileName); + if (comparePaths(sourceFile.fileName, outputPath, host.getCurrentDirectory(), !host.useCaseSensitiveFileNames()) === 0 /* EqualTo */) return false; + } + return true; +} +function getSourceFilePathInNewDir(fileName, host, newDirPath) { + return getSourceFilePathInNewDirWorker(fileName, newDirPath, host.getCurrentDirectory(), host.getCommonSourceDirectory(), (f) => host.getCanonicalFileName(f)); +} +function getSourceFilePathInNewDirWorker(fileName, newDirPath, currentDirectory, commonSourceDirectory, getCanonicalFileName) { + let sourceFilePath = getNormalizedAbsolutePath(fileName, currentDirectory); + const isSourceFileInCommonSourceDirectory = getCanonicalFileName(sourceFilePath).indexOf(getCanonicalFileName(commonSourceDirectory)) === 0; + sourceFilePath = isSourceFileInCommonSourceDirectory ? sourceFilePath.substring(commonSourceDirectory.length) : sourceFilePath; + return combinePaths(newDirPath, sourceFilePath); +} +function writeFile(host, diagnostics, fileName, text, writeByteOrderMark, sourceFiles, data) { + host.writeFile( + fileName, + text, + writeByteOrderMark, + (hostErrorMessage) => { + diagnostics.add(createCompilerDiagnostic(Diagnostics.Could_not_write_file_0_Colon_1, fileName, hostErrorMessage)); + }, + sourceFiles, + data + ); +} +function ensureDirectoriesExist(directoryPath, createDirectory, directoryExists) { + if (directoryPath.length > getRootLength(directoryPath) && !directoryExists(directoryPath)) { + const parentDirectory = getDirectoryPath(directoryPath); + ensureDirectoriesExist(parentDirectory, createDirectory, directoryExists); + createDirectory(directoryPath); + } +} +function writeFileEnsuringDirectories(path, data, writeByteOrderMark, writeFile2, createDirectory, directoryExists) { + try { + writeFile2(path, data, writeByteOrderMark); + } catch { + ensureDirectoriesExist(getDirectoryPath(normalizePath(path)), createDirectory, directoryExists); + writeFile2(path, data, writeByteOrderMark); + } +} +function getLineOfLocalPosition(sourceFile, pos) { + const lineStarts = getLineStarts(sourceFile); + return computeLineOfPosition(lineStarts, pos); +} +function getLineOfLocalPositionFromLineMap(lineMap, pos) { + return computeLineOfPosition(lineMap, pos); +} +function getFirstConstructorWithBody(node) { + return find(node.members, (member) => isConstructorDeclaration(member) && nodeIsPresent(member.body)); +} +function getSetAccessorValueParameter(accessor) { + if (accessor && accessor.parameters.length > 0) { + const hasThis = accessor.parameters.length === 2 && parameterIsThisKeyword(accessor.parameters[0]); + return accessor.parameters[hasThis ? 1 : 0]; + } +} +function getSetAccessorTypeAnnotationNode(accessor) { + const parameter = getSetAccessorValueParameter(accessor); + return parameter && parameter.type; +} +function getThisParameter(signature) { + if (signature.parameters.length && !isJSDocSignature(signature)) { + const thisParameter = signature.parameters[0]; + if (parameterIsThisKeyword(thisParameter)) { + return thisParameter; + } + } +} +function parameterIsThisKeyword(parameter) { + return isThisIdentifier(parameter.name); +} +function isThisIdentifier(node) { + return !!node && node.kind === 80 /* Identifier */ && identifierIsThisKeyword(node); +} +function isInTypeQuery(node) { + return !!findAncestor( + node, + (n) => n.kind === 187 /* TypeQuery */ ? true : n.kind === 80 /* Identifier */ || n.kind === 167 /* QualifiedName */ ? false : "quit" + ); +} +function isThisInTypeQuery(node) { + if (!isThisIdentifier(node)) { + return false; + } + while (isQualifiedName(node.parent) && node.parent.left === node) { + node = node.parent; + } + return node.parent.kind === 187 /* TypeQuery */; +} +function identifierIsThisKeyword(id) { + return id.escapedText === "this"; +} +function getAllAccessorDeclarations(declarations, accessor) { + let firstAccessor; + let secondAccessor; + let getAccessor; + let setAccessor; + if (hasDynamicName(accessor)) { + firstAccessor = accessor; + if (accessor.kind === 178 /* GetAccessor */) { + getAccessor = accessor; + } else if (accessor.kind === 179 /* SetAccessor */) { + setAccessor = accessor; + } else { + Debug.fail("Accessor has wrong kind"); + } + } else { + forEach(declarations, (member) => { + if (isAccessor(member) && isStatic(member) === isStatic(accessor)) { + const memberName = getPropertyNameForPropertyNameNode(member.name); + const accessorName = getPropertyNameForPropertyNameNode(accessor.name); + if (memberName === accessorName) { + if (!firstAccessor) { + firstAccessor = member; + } else if (!secondAccessor) { + secondAccessor = member; + } + if (member.kind === 178 /* GetAccessor */ && !getAccessor) { + getAccessor = member; + } + if (member.kind === 179 /* SetAccessor */ && !setAccessor) { + setAccessor = member; + } + } + } + }); + } + return { + firstAccessor, + secondAccessor, + getAccessor, + setAccessor + }; +} +function getEffectiveTypeAnnotationNode(node) { + if (!isInJSFile(node) && isFunctionDeclaration(node)) return void 0; + if (isTypeAliasDeclaration(node)) return void 0; + const type = node.type; + if (type || !isInJSFile(node)) return type; + return isJSDocPropertyLikeTag(node) ? node.typeExpression && node.typeExpression.type : getJSDocType(node); +} +function getTypeAnnotationNode(node) { + return node.type; +} +function getEffectiveReturnTypeNode(node) { + return isJSDocSignature(node) ? node.type && node.type.typeExpression && node.type.typeExpression.type : node.type || (isInJSFile(node) ? getJSDocReturnType(node) : void 0); +} +function getJSDocTypeParameterDeclarations(node) { + return flatMap(getJSDocTags(node), (tag) => isNonTypeAliasTemplate(tag) ? tag.typeParameters : void 0); +} +function isNonTypeAliasTemplate(tag) { + return isJSDocTemplateTag(tag) && !(tag.parent.kind === 321 /* JSDoc */ && (tag.parent.tags.some(isJSDocTypeAlias) || tag.parent.tags.some(isJSDocOverloadTag))); +} +function getEffectiveSetAccessorTypeAnnotationNode(node) { + const parameter = getSetAccessorValueParameter(node); + return parameter && getEffectiveTypeAnnotationNode(parameter); +} +function emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments) { + emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, node.pos, leadingComments); +} +function emitNewLineBeforeLeadingCommentsOfPosition(lineMap, writer, pos, leadingComments) { + if (leadingComments && leadingComments.length && pos !== leadingComments[0].pos && getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, leadingComments[0].pos)) { + writer.writeLine(); + } +} +function emitNewLineBeforeLeadingCommentOfPosition(lineMap, writer, pos, commentPos) { + if (pos !== commentPos && getLineOfLocalPositionFromLineMap(lineMap, pos) !== getLineOfLocalPositionFromLineMap(lineMap, commentPos)) { + writer.writeLine(); + } +} +function emitComments(text, lineMap, writer, comments, leadingSeparator, trailingSeparator, newLine, writeComment) { + if (comments && comments.length > 0) { + if (leadingSeparator) { + writer.writeSpace(" "); + } + let emitInterveningSeparator = false; + for (const comment of comments) { + if (emitInterveningSeparator) { + writer.writeSpace(" "); + emitInterveningSeparator = false; + } + writeComment(text, lineMap, writer, comment.pos, comment.end, newLine); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } else { + emitInterveningSeparator = true; + } + } + if (emitInterveningSeparator && trailingSeparator) { + writer.writeSpace(" "); + } + } +} +function emitDetachedComments(text, lineMap, writer, writeComment, node, newLine, removeComments) { + let leadingComments; + let currentDetachedCommentInfo; + if (removeComments) { + if (node.pos === 0) { + leadingComments = filter(getLeadingCommentRanges(text, node.pos), isPinnedCommentLocal); + } + } else { + leadingComments = getLeadingCommentRanges(text, node.pos); + } + if (leadingComments) { + const detachedComments = []; + let lastComment; + for (const comment of leadingComments) { + if (lastComment) { + const lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, lastComment.end); + const commentLine = getLineOfLocalPositionFromLineMap(lineMap, comment.pos); + if (commentLine >= lastCommentLine + 2) { + break; + } + } + detachedComments.push(comment); + lastComment = comment; + } + if (detachedComments.length) { + const lastCommentLine = getLineOfLocalPositionFromLineMap(lineMap, last(detachedComments).end); + const nodeLine = getLineOfLocalPositionFromLineMap(lineMap, skipTrivia(text, node.pos)); + if (nodeLine >= lastCommentLine + 2) { + emitNewLineBeforeLeadingComments(lineMap, writer, node, leadingComments); + emitComments( + text, + lineMap, + writer, + detachedComments, + /*leadingSeparator*/ + false, + /*trailingSeparator*/ + true, + newLine, + writeComment + ); + currentDetachedCommentInfo = { nodePos: node.pos, detachedCommentEndPos: last(detachedComments).end }; + } + } + } + return currentDetachedCommentInfo; + function isPinnedCommentLocal(comment) { + return isPinnedComment(text, comment.pos); + } +} +function writeCommentRange(text, lineMap, writer, commentPos, commentEnd, newLine) { + if (text.charCodeAt(commentPos + 1) === 42 /* asterisk */) { + const firstCommentLineAndCharacter = computeLineAndCharacterOfPosition(lineMap, commentPos); + const lineCount = lineMap.length; + let firstCommentLineIndent; + for (let pos = commentPos, currentLine = firstCommentLineAndCharacter.line; pos < commentEnd; currentLine++) { + const nextLineStart = currentLine + 1 === lineCount ? text.length + 1 : lineMap[currentLine + 1]; + if (pos !== commentPos) { + if (firstCommentLineIndent === void 0) { + firstCommentLineIndent = calculateIndent(text, lineMap[firstCommentLineAndCharacter.line], commentPos); + } + const currentWriterIndentSpacing = writer.getIndent() * getIndentSize(); + const spacesToEmit = currentWriterIndentSpacing - firstCommentLineIndent + calculateIndent(text, pos, nextLineStart); + if (spacesToEmit > 0) { + let numberOfSingleSpacesToEmit = spacesToEmit % getIndentSize(); + const indentSizeSpaceString = getIndentString((spacesToEmit - numberOfSingleSpacesToEmit) / getIndentSize()); + writer.rawWrite(indentSizeSpaceString); + while (numberOfSingleSpacesToEmit) { + writer.rawWrite(" "); + numberOfSingleSpacesToEmit--; + } + } else { + writer.rawWrite(""); + } + } + writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart); + pos = nextLineStart; + } + } else { + writer.writeComment(text.substring(commentPos, commentEnd)); + } +} +function writeTrimmedCurrentLine(text, commentEnd, writer, newLine, pos, nextLineStart) { + const end = Math.min(commentEnd, nextLineStart - 1); + const currentLineText = text.substring(pos, end).trim(); + if (currentLineText) { + writer.writeComment(currentLineText); + if (end !== commentEnd) { + writer.writeLine(); + } + } else { + writer.rawWrite(newLine); + } +} +function calculateIndent(text, pos, end) { + let currentLineIndent = 0; + for (; pos < end && isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) { + if (text.charCodeAt(pos) === 9 /* tab */) { + currentLineIndent += getIndentSize() - currentLineIndent % getIndentSize(); + } else { + currentLineIndent++; + } + } + return currentLineIndent; +} +function hasEffectiveModifiers(node) { + return getEffectiveModifierFlags(node) !== 0 /* None */; +} +function hasSyntacticModifiers(node) { + return getSyntacticModifierFlags(node) !== 0 /* None */; +} +function hasEffectiveModifier(node, flags) { + return !!getSelectedEffectiveModifierFlags(node, flags); +} +function hasSyntacticModifier(node, flags) { + return !!getSelectedSyntacticModifierFlags(node, flags); +} +function isStatic(node) { + return isClassElement(node) && hasStaticModifier(node) || isClassStaticBlockDeclaration(node); +} +function hasStaticModifier(node) { + return hasSyntacticModifier(node, 256 /* Static */); +} +function hasOverrideModifier(node) { + return hasEffectiveModifier(node, 16 /* Override */); +} +function hasAbstractModifier(node) { + return hasSyntacticModifier(node, 64 /* Abstract */); +} +function hasAmbientModifier(node) { + return hasSyntacticModifier(node, 128 /* Ambient */); +} +function hasAccessorModifier(node) { + return hasSyntacticModifier(node, 512 /* Accessor */); +} +function hasEffectiveReadonlyModifier(node) { + return hasEffectiveModifier(node, 8 /* Readonly */); +} +function hasDecorators(node) { + return hasSyntacticModifier(node, 32768 /* Decorator */); +} +function getSelectedEffectiveModifierFlags(node, flags) { + return getEffectiveModifierFlags(node) & flags; +} +function getSelectedSyntacticModifierFlags(node, flags) { + return getSyntacticModifierFlags(node) & flags; +} +function getModifierFlagsWorker(node, includeJSDoc, alwaysIncludeJSDoc) { + if (node.kind >= 0 /* FirstToken */ && node.kind <= 166 /* LastToken */) { + return 0 /* None */; + } + if (!(node.modifierFlagsCache & 536870912 /* HasComputedFlags */)) { + node.modifierFlagsCache = getSyntacticModifierFlagsNoCache(node) | 536870912 /* HasComputedFlags */; + } + if (alwaysIncludeJSDoc || includeJSDoc && isInJSFile(node)) { + if (!(node.modifierFlagsCache & 268435456 /* HasComputedJSDocModifiers */) && node.parent) { + node.modifierFlagsCache |= getRawJSDocModifierFlagsNoCache(node) | 268435456 /* HasComputedJSDocModifiers */; + } + return selectEffectiveModifierFlags(node.modifierFlagsCache); + } + return selectSyntacticModifierFlags(node.modifierFlagsCache); +} +function getEffectiveModifierFlags(node) { + return getModifierFlagsWorker( + node, + /*includeJSDoc*/ + true + ); +} +function getEffectiveModifierFlagsAlwaysIncludeJSDoc(node) { + return getModifierFlagsWorker( + node, + /*includeJSDoc*/ + true, + /*alwaysIncludeJSDoc*/ + true + ); +} +function getSyntacticModifierFlags(node) { + return getModifierFlagsWorker( + node, + /*includeJSDoc*/ + false + ); +} +function getRawJSDocModifierFlagsNoCache(node) { + let flags = 0 /* None */; + if (!!node.parent && !isParameter(node)) { + if (isInJSFile(node)) { + if (getJSDocPublicTagNoCache(node)) flags |= 8388608 /* JSDocPublic */; + if (getJSDocPrivateTagNoCache(node)) flags |= 16777216 /* JSDocPrivate */; + if (getJSDocProtectedTagNoCache(node)) flags |= 33554432 /* JSDocProtected */; + if (getJSDocReadonlyTagNoCache(node)) flags |= 67108864 /* JSDocReadonly */; + if (getJSDocOverrideTagNoCache(node)) flags |= 134217728 /* JSDocOverride */; + } + if (getJSDocDeprecatedTagNoCache(node)) flags |= 65536 /* Deprecated */; + } + return flags; +} +function selectSyntacticModifierFlags(flags) { + return flags & 65535 /* SyntacticModifiers */; +} +function selectEffectiveModifierFlags(flags) { + return flags & 131071 /* NonCacheOnlyModifiers */ | (flags & 260046848 /* JSDocCacheOnlyModifiers */) >>> 23; +} +function getJSDocModifierFlagsNoCache(node) { + return selectEffectiveModifierFlags(getRawJSDocModifierFlagsNoCache(node)); +} +function getEffectiveModifierFlagsNoCache(node) { + return getSyntacticModifierFlagsNoCache(node) | getJSDocModifierFlagsNoCache(node); +} +function getSyntacticModifierFlagsNoCache(node) { + let flags = canHaveModifiers(node) ? modifiersToFlags(node.modifiers) : 0 /* None */; + if (node.flags & 8 /* NestedNamespace */ || node.kind === 80 /* Identifier */ && node.flags & 4096 /* IdentifierIsInJSDocNamespace */) { + flags |= 32 /* Export */; + } + return flags; +} +function modifiersToFlags(modifiers) { + let flags = 0 /* None */; + if (modifiers) { + for (const modifier of modifiers) { + flags |= modifierToFlag(modifier.kind); + } + } + return flags; +} +function modifierToFlag(token) { + switch (token) { + case 126 /* StaticKeyword */: + return 256 /* Static */; + case 125 /* PublicKeyword */: + return 1 /* Public */; + case 124 /* ProtectedKeyword */: + return 4 /* Protected */; + case 123 /* PrivateKeyword */: + return 2 /* Private */; + case 128 /* AbstractKeyword */: + return 64 /* Abstract */; + case 129 /* AccessorKeyword */: + return 512 /* Accessor */; + case 95 /* ExportKeyword */: + return 32 /* Export */; + case 138 /* DeclareKeyword */: + return 128 /* Ambient */; + case 87 /* ConstKeyword */: + return 4096 /* Const */; + case 90 /* DefaultKeyword */: + return 2048 /* Default */; + case 134 /* AsyncKeyword */: + return 1024 /* Async */; + case 148 /* ReadonlyKeyword */: + return 8 /* Readonly */; + case 164 /* OverrideKeyword */: + return 16 /* Override */; + case 103 /* InKeyword */: + return 8192 /* In */; + case 147 /* OutKeyword */: + return 16384 /* Out */; + case 171 /* Decorator */: + return 32768 /* Decorator */; + } + return 0 /* None */; +} +function isBinaryLogicalOperator(token) { + return token === 57 /* BarBarToken */ || token === 56 /* AmpersandAmpersandToken */; +} +function isLogicalOperator(token) { + return isBinaryLogicalOperator(token) || token === 54 /* ExclamationToken */; +} +function isLogicalOrCoalescingAssignmentOperator(token) { + return token === 76 /* BarBarEqualsToken */ || token === 77 /* AmpersandAmpersandEqualsToken */ || token === 78 /* QuestionQuestionEqualsToken */; +} +function isLogicalOrCoalescingAssignmentExpression(expr) { + return isBinaryExpression(expr) && isLogicalOrCoalescingAssignmentOperator(expr.operatorToken.kind); +} +function isLogicalOrCoalescingBinaryOperator(token) { + return isBinaryLogicalOperator(token) || token === 61 /* QuestionQuestionToken */; +} +function isLogicalOrCoalescingBinaryExpression(expr) { + return isBinaryExpression(expr) && isLogicalOrCoalescingBinaryOperator(expr.operatorToken.kind); +} +function isAssignmentOperator(token) { + return token >= 64 /* FirstAssignment */ && token <= 79 /* LastAssignment */; +} +function tryGetClassExtendingExpressionWithTypeArguments(node) { + const cls = tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node); + return cls && !cls.isImplements ? cls.class : void 0; +} +function tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node) { + if (isExpressionWithTypeArguments(node)) { + if (isHeritageClause(node.parent) && isClassLike(node.parent.parent)) { + return { class: node.parent.parent, isImplements: node.parent.token === 119 /* ImplementsKeyword */ }; + } + if (isJSDocAugmentsTag(node.parent)) { + const host = getEffectiveJSDocHost(node.parent); + if (host && isClassLike(host)) { + return { class: host, isImplements: false }; + } + } + } + return void 0; +} +function isAssignmentExpression(node, excludeCompoundAssignment) { + return isBinaryExpression(node) && (excludeCompoundAssignment ? node.operatorToken.kind === 64 /* EqualsToken */ : isAssignmentOperator(node.operatorToken.kind)) && isLeftHandSideExpression(node.left); +} +function isDestructuringAssignment(node) { + if (isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + )) { + const kind = node.left.kind; + return kind === 211 /* ObjectLiteralExpression */ || kind === 210 /* ArrayLiteralExpression */; + } + return false; +} +function isExpressionWithTypeArgumentsInClassExtendsClause(node) { + return tryGetClassExtendingExpressionWithTypeArguments(node) !== void 0; +} +function isEntityNameExpression(node) { + return node.kind === 80 /* Identifier */ || isPropertyAccessEntityNameExpression(node); +} +function getFirstIdentifier(node) { + switch (node.kind) { + case 80 /* Identifier */: + return node; + case 167 /* QualifiedName */: + do { + node = node.left; + } while (node.kind !== 80 /* Identifier */); + return node; + case 212 /* PropertyAccessExpression */: + do { + node = node.expression; + } while (node.kind !== 80 /* Identifier */); + return node; + } +} +function isDottedName(node) { + return node.kind === 80 /* Identifier */ || node.kind === 110 /* ThisKeyword */ || node.kind === 108 /* SuperKeyword */ || node.kind === 237 /* MetaProperty */ || node.kind === 212 /* PropertyAccessExpression */ && isDottedName(node.expression) || node.kind === 218 /* ParenthesizedExpression */ && isDottedName(node.expression); +} +function isPropertyAccessEntityNameExpression(node) { + return isPropertyAccessExpression(node) && isIdentifier(node.name) && isEntityNameExpression(node.expression); +} +function tryGetPropertyAccessOrIdentifierToString(expr) { + if (isPropertyAccessExpression(expr)) { + const baseStr = tryGetPropertyAccessOrIdentifierToString(expr.expression); + if (baseStr !== void 0) { + return baseStr + "." + entityNameToString(expr.name); + } + } else if (isElementAccessExpression(expr)) { + const baseStr = tryGetPropertyAccessOrIdentifierToString(expr.expression); + if (baseStr !== void 0 && isPropertyName(expr.argumentExpression)) { + return baseStr + "." + getPropertyNameForPropertyNameNode(expr.argumentExpression); + } + } else if (isIdentifier(expr)) { + return unescapeLeadingUnderscores(expr.escapedText); + } else if (isJsxNamespacedName(expr)) { + return getTextOfJsxNamespacedName(expr); + } + return void 0; +} +function isPrototypeAccess(node) { + return isBindableStaticAccessExpression(node) && getElementOrPropertyAccessName(node) === "prototype"; +} +function isRightSideOfQualifiedNameOrPropertyAccess(node) { + return node.parent.kind === 167 /* QualifiedName */ && node.parent.right === node || node.parent.kind === 212 /* PropertyAccessExpression */ && node.parent.name === node || node.parent.kind === 237 /* MetaProperty */ && node.parent.name === node; +} +function isRightSideOfAccessExpression(node) { + return !!node.parent && (isPropertyAccessExpression(node.parent) && node.parent.name === node || isElementAccessExpression(node.parent) && node.parent.argumentExpression === node); +} +function isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(node) { + return isQualifiedName(node.parent) && node.parent.right === node || isPropertyAccessExpression(node.parent) && node.parent.name === node || isJSDocMemberName(node.parent) && node.parent.right === node; +} +function isInstanceOfExpression(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 104 /* InstanceOfKeyword */; +} +function isRightSideOfInstanceofExpression(node) { + return isInstanceOfExpression(node.parent) && node === node.parent.right; +} +function isEmptyObjectLiteral(expression) { + return expression.kind === 211 /* ObjectLiteralExpression */ && expression.properties.length === 0; +} +function isEmptyArrayLiteral(expression) { + return expression.kind === 210 /* ArrayLiteralExpression */ && expression.elements.length === 0; +} +function getLocalSymbolForExportDefault(symbol) { + if (!isExportDefaultSymbol(symbol) || !symbol.declarations) return void 0; + for (const decl of symbol.declarations) { + if (decl.localSymbol) return decl.localSymbol; + } + return void 0; +} +function isExportDefaultSymbol(symbol) { + return symbol && length(symbol.declarations) > 0 && hasSyntacticModifier(symbol.declarations[0], 2048 /* Default */); +} +function tryExtractTSExtension(fileName) { + return find(supportedTSExtensionsForExtractExtension, (extension) => fileExtensionIs(fileName, extension)); +} +function getExpandedCharCodes(input) { + const output = []; + const length2 = input.length; + for (let i = 0; i < length2; i++) { + const charCode = input.charCodeAt(i); + if (charCode < 128) { + output.push(charCode); + } else if (charCode < 2048) { + output.push(charCode >> 6 | 192); + output.push(charCode & 63 | 128); + } else if (charCode < 65536) { + output.push(charCode >> 12 | 224); + output.push(charCode >> 6 & 63 | 128); + output.push(charCode & 63 | 128); + } else if (charCode < 131072) { + output.push(charCode >> 18 | 240); + output.push(charCode >> 12 & 63 | 128); + output.push(charCode >> 6 & 63 | 128); + output.push(charCode & 63 | 128); + } else { + Debug.assert(false, "Unexpected code point"); + } + } + return output; +} +var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; +function convertToBase64(input) { + let result = ""; + const charCodes = getExpandedCharCodes(input); + let i = 0; + const length2 = charCodes.length; + let byte1, byte2, byte3, byte4; + while (i < length2) { + byte1 = charCodes[i] >> 2; + byte2 = (charCodes[i] & 3) << 4 | charCodes[i + 1] >> 4; + byte3 = (charCodes[i + 1] & 15) << 2 | charCodes[i + 2] >> 6; + byte4 = charCodes[i + 2] & 63; + if (i + 1 >= length2) { + byte3 = byte4 = 64; + } else if (i + 2 >= length2) { + byte4 = 64; + } + result += base64Digits.charAt(byte1) + base64Digits.charAt(byte2) + base64Digits.charAt(byte3) + base64Digits.charAt(byte4); + i += 3; + } + return result; +} +function getStringFromExpandedCharCodes(codes) { + let output = ""; + let i = 0; + const length2 = codes.length; + while (i < length2) { + const charCode = codes[i]; + if (charCode < 128) { + output += String.fromCharCode(charCode); + i++; + } else if ((charCode & 192) === 192) { + let value = charCode & 63; + i++; + let nextCode = codes[i]; + while ((nextCode & 192) === 128) { + value = value << 6 | nextCode & 63; + i++; + nextCode = codes[i]; + } + output += String.fromCharCode(value); + } else { + output += String.fromCharCode(charCode); + i++; + } + } + return output; +} +function base64encode(host, input) { + if (host && host.base64encode) { + return host.base64encode(input); + } + return convertToBase64(input); +} +function base64decode(host, input) { + if (host && host.base64decode) { + return host.base64decode(input); + } + const length2 = input.length; + const expandedCharCodes = []; + let i = 0; + while (i < length2) { + if (input.charCodeAt(i) === base64Digits.charCodeAt(64)) { + break; + } + const ch1 = base64Digits.indexOf(input[i]); + const ch2 = base64Digits.indexOf(input[i + 1]); + const ch3 = base64Digits.indexOf(input[i + 2]); + const ch4 = base64Digits.indexOf(input[i + 3]); + const code1 = (ch1 & 63) << 2 | ch2 >> 4 & 3; + const code2 = (ch2 & 15) << 4 | ch3 >> 2 & 15; + const code3 = (ch3 & 3) << 6 | ch4 & 63; + if (code2 === 0 && ch3 !== 0) { + expandedCharCodes.push(code1); + } else if (code3 === 0 && ch4 !== 0) { + expandedCharCodes.push(code1, code2); + } else { + expandedCharCodes.push(code1, code2, code3); + } + i += 4; + } + return getStringFromExpandedCharCodes(expandedCharCodes); +} +function readJsonOrUndefined(path, hostOrText) { + const jsonText = isString(hostOrText) ? hostOrText : hostOrText.readFile(path); + if (!jsonText) return void 0; + let result = tryParseJson(jsonText); + if (result === void 0) { + const looseResult = parseConfigFileTextToJson(path, jsonText); + if (!looseResult.error) { + result = looseResult.config; + } + } + return result; +} +function readJson(path, host) { + return readJsonOrUndefined(path, host) || {}; +} +function tryParseJson(text) { + try { + return JSON.parse(text); + } catch { + return void 0; + } +} +function directoryProbablyExists(directoryName, host) { + return !host.directoryExists || host.directoryExists(directoryName); +} +var carriageReturnLineFeed = "\r\n"; +var lineFeed = "\n"; +function getNewLineCharacter(options) { + switch (options.newLine) { + case 0 /* CarriageReturnLineFeed */: + return carriageReturnLineFeed; + case 1 /* LineFeed */: + case void 0: + return lineFeed; + } +} +function createRange(pos, end = pos) { + Debug.assert(end >= pos || end === -1); + return { pos, end }; +} +function moveRangeEnd(range, end) { + return createRange(range.pos, end); +} +function moveRangePos(range, pos) { + return createRange(pos, range.end); +} +function moveRangePastDecorators(node) { + const lastDecorator = canHaveModifiers(node) ? findLast(node.modifiers, isDecorator) : void 0; + return lastDecorator && !positionIsSynthesized(lastDecorator.end) ? moveRangePos(node, lastDecorator.end) : node; +} +function moveRangePastModifiers(node) { + if (isPropertyDeclaration(node) || isMethodDeclaration(node)) { + return moveRangePos(node, node.name.pos); + } + const lastModifier = canHaveModifiers(node) ? lastOrUndefined(node.modifiers) : void 0; + return lastModifier && !positionIsSynthesized(lastModifier.end) ? moveRangePos(node, lastModifier.end) : moveRangePastDecorators(node); +} +function createTokenRange(pos, token) { + return createRange(pos, pos + tokenToString(token).length); +} +function rangeIsOnSingleLine(range, sourceFile) { + return rangeStartIsOnSameLineAsRangeEnd(range, range, sourceFile); +} +function rangeStartPositionsAreOnSameLine(range1, range2, sourceFile) { + return positionsAreOnSameLine( + getStartPositionOfRange( + range1, + sourceFile, + /*includeComments*/ + false + ), + getStartPositionOfRange( + range2, + sourceFile, + /*includeComments*/ + false + ), + sourceFile + ); +} +function rangeEndPositionsAreOnSameLine(range1, range2, sourceFile) { + return positionsAreOnSameLine(range1.end, range2.end, sourceFile); +} +function rangeStartIsOnSameLineAsRangeEnd(range1, range2, sourceFile) { + return positionsAreOnSameLine(getStartPositionOfRange( + range1, + sourceFile, + /*includeComments*/ + false + ), range2.end, sourceFile); +} +function rangeEndIsOnSameLineAsRangeStart(range1, range2, sourceFile) { + return positionsAreOnSameLine(range1.end, getStartPositionOfRange( + range2, + sourceFile, + /*includeComments*/ + false + ), sourceFile); +} +function getLinesBetweenRangeEndAndRangeStart(range1, range2, sourceFile, includeSecondRangeComments) { + const range2Start = getStartPositionOfRange(range2, sourceFile, includeSecondRangeComments); + return getLinesBetweenPositions(sourceFile, range1.end, range2Start); +} +function getLinesBetweenRangeEndPositions(range1, range2, sourceFile) { + return getLinesBetweenPositions(sourceFile, range1.end, range2.end); +} +function isNodeArrayMultiLine(list, sourceFile) { + return !positionsAreOnSameLine(list.pos, list.end, sourceFile); +} +function positionsAreOnSameLine(pos1, pos2, sourceFile) { + return getLinesBetweenPositions(sourceFile, pos1, pos2) === 0; +} +function getStartPositionOfRange(range, sourceFile, includeComments) { + return positionIsSynthesized(range.pos) ? -1 : skipTrivia( + sourceFile.text, + range.pos, + /*stopAfterLineBreak*/ + false, + includeComments + ); +} +function getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter(pos, stopPos, sourceFile, includeComments) { + const startPos = skipTrivia( + sourceFile.text, + pos, + /*stopAfterLineBreak*/ + false, + includeComments + ); + const prevPos = getPreviousNonWhitespacePosition(startPos, stopPos, sourceFile); + return getLinesBetweenPositions(sourceFile, prevPos ?? stopPos, startPos); +} +function getLinesBetweenPositionAndNextNonWhitespaceCharacter(pos, stopPos, sourceFile, includeComments) { + const nextPos = skipTrivia( + sourceFile.text, + pos, + /*stopAfterLineBreak*/ + false, + includeComments + ); + return getLinesBetweenPositions(sourceFile, pos, Math.min(stopPos, nextPos)); +} +function rangeContainsRange(r1, r2) { + return startEndContainsRange(r1.pos, r1.end, r2); +} +function startEndContainsRange(start, end, range) { + return start <= range.pos && end >= range.end; +} +function getPreviousNonWhitespacePosition(pos, stopPos = 0, sourceFile) { + while (pos-- > stopPos) { + if (!isWhiteSpaceLike(sourceFile.text.charCodeAt(pos))) { + return pos; + } + } +} +function isDeclarationNameOfEnumOrNamespace(node) { + const parseNode = getParseTreeNode(node); + if (parseNode) { + switch (parseNode.parent.kind) { + case 267 /* EnumDeclaration */: + case 268 /* ModuleDeclaration */: + return parseNode === parseNode.parent.name; + } + } + return false; +} +function getInitializedVariables(node) { + return filter(node.declarations, isInitializedVariable); +} +function isInitializedVariable(node) { + return isVariableDeclaration(node) && node.initializer !== void 0; +} +function isWatchSet(options) { + return options.watch && hasProperty(options, "watch"); +} +function closeFileWatcher(watcher) { + watcher.close(); +} +function getCheckFlags(symbol) { + return symbol.flags & 33554432 /* Transient */ ? symbol.links.checkFlags : 0; +} +function getDeclarationModifierFlagsFromSymbol(s, isWrite = false) { + if (s.valueDeclaration) { + const declaration = isWrite && s.declarations && find(s.declarations, isSetAccessorDeclaration) || s.flags & 32768 /* GetAccessor */ && find(s.declarations, isGetAccessorDeclaration) || s.valueDeclaration; + const flags = getCombinedModifierFlags(declaration); + return s.parent && s.parent.flags & 32 /* Class */ ? flags : flags & ~7 /* AccessibilityModifier */; + } + if (getCheckFlags(s) & 6 /* Synthetic */) { + const checkFlags = s.links.checkFlags; + const accessModifier = checkFlags & 1024 /* ContainsPrivate */ ? 2 /* Private */ : checkFlags & 256 /* ContainsPublic */ ? 1 /* Public */ : 4 /* Protected */; + const staticModifier = checkFlags & 2048 /* ContainsStatic */ ? 256 /* Static */ : 0; + return accessModifier | staticModifier; + } + if (s.flags & 4194304 /* Prototype */) { + return 1 /* Public */ | 256 /* Static */; + } + return 0; +} +function skipAlias(symbol, checker) { + return symbol.flags & 2097152 /* Alias */ ? checker.getAliasedSymbol(symbol) : symbol; +} +function getCombinedLocalAndExportSymbolFlags(symbol) { + return symbol.exportSymbol ? symbol.exportSymbol.flags | symbol.flags : symbol.flags; +} +function isWriteOnlyAccess(node) { + return accessKind(node) === 1 /* Write */; +} +function isWriteAccess(node) { + return accessKind(node) !== 0 /* Read */; +} +function accessKind(node) { + const { parent: parent2 } = node; + switch (parent2 == null ? void 0 : parent2.kind) { + case 218 /* ParenthesizedExpression */: + return accessKind(parent2); + case 226 /* PostfixUnaryExpression */: + case 225 /* PrefixUnaryExpression */: + const { operator } = parent2; + return operator === 46 /* PlusPlusToken */ || operator === 47 /* MinusMinusToken */ ? 2 /* ReadWrite */ : 0 /* Read */; + case 227 /* BinaryExpression */: + const { left, operatorToken } = parent2; + return left === node && isAssignmentOperator(operatorToken.kind) ? operatorToken.kind === 64 /* EqualsToken */ ? 1 /* Write */ : 2 /* ReadWrite */ : 0 /* Read */; + case 212 /* PropertyAccessExpression */: + return parent2.name !== node ? 0 /* Read */ : accessKind(parent2); + case 304 /* PropertyAssignment */: { + const parentAccess = accessKind(parent2.parent); + return node === parent2.name ? reverseAccessKind(parentAccess) : parentAccess; + } + case 305 /* ShorthandPropertyAssignment */: + return node === parent2.objectAssignmentInitializer ? 0 /* Read */ : accessKind(parent2.parent); + case 210 /* ArrayLiteralExpression */: + return accessKind(parent2); + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + return node === parent2.initializer ? 1 /* Write */ : 0 /* Read */; + default: + return 0 /* Read */; + } +} +function reverseAccessKind(a) { + switch (a) { + case 0 /* Read */: + return 1 /* Write */; + case 1 /* Write */: + return 0 /* Read */; + case 2 /* ReadWrite */: + return 2 /* ReadWrite */; + default: + return Debug.assertNever(a); + } +} +function compareDataObjects(dst, src) { + if (!dst || !src || Object.keys(dst).length !== Object.keys(src).length) { + return false; + } + for (const e in dst) { + if (typeof dst[e] === "object") { + if (!compareDataObjects(dst[e], src[e])) { + return false; + } + } else if (typeof dst[e] !== "function") { + if (dst[e] !== src[e]) { + return false; + } + } + } + return true; +} +function clearMap(map2, onDeleteValue) { + map2.forEach(onDeleteValue); + map2.clear(); +} +function mutateMapSkippingNewValues(map2, newMap, options) { + const { onDeleteValue, onExistingValue } = options; + map2.forEach((existingValue, key) => { + var _a; + if (!(newMap == null ? void 0 : newMap.has(key))) { + map2.delete(key); + onDeleteValue(existingValue, key); + } else if (onExistingValue) { + onExistingValue(existingValue, (_a = newMap.get) == null ? void 0 : _a.call(newMap, key), key); + } + }); +} +function mutateMap(map2, newMap, options) { + mutateMapSkippingNewValues(map2, newMap, options); + const { createNewValue } = options; + newMap == null ? void 0 : newMap.forEach((valueInNewMap, key) => { + if (!map2.has(key)) { + map2.set(key, createNewValue(key, valueInNewMap)); + } + }); +} +function isAbstractConstructorSymbol(symbol) { + if (symbol.flags & 32 /* Class */) { + const declaration = getClassLikeDeclarationOfSymbol(symbol); + return !!declaration && hasSyntacticModifier(declaration, 64 /* Abstract */); + } + return false; +} +function getClassLikeDeclarationOfSymbol(symbol) { + var _a; + return (_a = symbol.declarations) == null ? void 0 : _a.find(isClassLike); +} +function getObjectFlags(type) { + return type.flags & 3899393 /* ObjectFlagsType */ ? type.objectFlags : 0; +} +function isUMDExportSymbol(symbol) { + return !!symbol && !!symbol.declarations && !!symbol.declarations[0] && isNamespaceExportDeclaration(symbol.declarations[0]); +} +function showModuleSpecifier({ moduleSpecifier }) { + return isStringLiteral(moduleSpecifier) ? moduleSpecifier.text : getTextOfNode(moduleSpecifier); +} +function getLastChild(node) { + let lastChild; + forEachChild(node, (child) => { + if (nodeIsPresent(child)) lastChild = child; + }, (children) => { + for (let i = children.length - 1; i >= 0; i--) { + if (nodeIsPresent(children[i])) { + lastChild = children[i]; + break; + } + } + }); + return lastChild; +} +function addToSeen(seen, key) { + if (seen.has(key)) { + return false; + } + seen.add(key); + return true; +} +function isObjectTypeDeclaration(node) { + return isClassLike(node) || isInterfaceDeclaration(node) || isTypeLiteralNode(node); +} +function isTypeNodeKind(kind) { + return kind >= 183 /* FirstTypeNode */ && kind <= 206 /* LastTypeNode */ || kind === 133 /* AnyKeyword */ || kind === 159 /* UnknownKeyword */ || kind === 150 /* NumberKeyword */ || kind === 163 /* BigIntKeyword */ || kind === 151 /* ObjectKeyword */ || kind === 136 /* BooleanKeyword */ || kind === 154 /* StringKeyword */ || kind === 155 /* SymbolKeyword */ || kind === 116 /* VoidKeyword */ || kind === 157 /* UndefinedKeyword */ || kind === 146 /* NeverKeyword */ || kind === 141 /* IntrinsicKeyword */ || kind === 234 /* ExpressionWithTypeArguments */ || kind === 313 /* JSDocAllType */ || kind === 314 /* JSDocUnknownType */ || kind === 315 /* JSDocNullableType */ || kind === 316 /* JSDocNonNullableType */ || kind === 317 /* JSDocOptionalType */ || kind === 318 /* JSDocFunctionType */ || kind === 319 /* JSDocVariadicType */; +} +function isAccessExpression(node) { + return node.kind === 212 /* PropertyAccessExpression */ || node.kind === 213 /* ElementAccessExpression */; +} +function getNameOfAccessExpression(node) { + if (node.kind === 212 /* PropertyAccessExpression */) { + return node.name; + } + Debug.assert(node.kind === 213 /* ElementAccessExpression */); + return node.argumentExpression; +} +function isNamedImportsOrExports(node) { + return node.kind === 276 /* NamedImports */ || node.kind === 280 /* NamedExports */; +} +function getLeftmostAccessExpression(expr) { + while (isAccessExpression(expr)) { + expr = expr.expression; + } + return expr; +} +function forEachNameInAccessChainWalkingLeft(name, action) { + if (isAccessExpression(name.parent) && isRightSideOfAccessExpression(name)) { + return walkAccessExpression(name.parent); + } + function walkAccessExpression(access) { + if (access.kind === 212 /* PropertyAccessExpression */) { + const res = action(access.name); + if (res !== void 0) { + return res; + } + } else if (access.kind === 213 /* ElementAccessExpression */) { + if (isIdentifier(access.argumentExpression) || isStringLiteralLike(access.argumentExpression)) { + const res = action(access.argumentExpression); + if (res !== void 0) { + return res; + } + } else { + return void 0; + } + } + if (isAccessExpression(access.expression)) { + return walkAccessExpression(access.expression); + } + if (isIdentifier(access.expression)) { + return action(access.expression); + } + return void 0; + } +} +function getLeftmostExpression(node, stopAtCallExpressions) { + while (true) { + switch (node.kind) { + case 226 /* PostfixUnaryExpression */: + node = node.operand; + continue; + case 227 /* BinaryExpression */: + node = node.left; + continue; + case 228 /* ConditionalExpression */: + node = node.condition; + continue; + case 216 /* TaggedTemplateExpression */: + node = node.tag; + continue; + case 214 /* CallExpression */: + if (stopAtCallExpressions) { + return node; + } + // falls through + case 235 /* AsExpression */: + case 213 /* ElementAccessExpression */: + case 212 /* PropertyAccessExpression */: + case 236 /* NonNullExpression */: + case 356 /* PartiallyEmittedExpression */: + case 239 /* SatisfiesExpression */: + node = node.expression; + continue; + } + return node; + } +} +function Symbol4(flags, name) { + this.flags = flags; + this.escapedName = name; + this.declarations = void 0; + this.valueDeclaration = void 0; + this.id = 0; + this.mergeId = 0; + this.parent = void 0; + this.members = void 0; + this.exports = void 0; + this.exportSymbol = void 0; + this.constEnumOnlyModule = void 0; + this.isReferenced = void 0; + this.lastAssignmentPos = void 0; + this.links = void 0; +} +function Type3(checker, flags) { + this.flags = flags; + if (Debug.isDebugging || tracing) { + this.checker = checker; + } +} +function Signature2(checker, flags) { + this.flags = flags; + if (Debug.isDebugging) { + this.checker = checker; + } +} +function Node4(kind, pos, end) { + this.pos = pos; + this.end = end; + this.kind = kind; + this.id = 0; + this.flags = 0 /* None */; + this.modifierFlagsCache = 0 /* None */; + this.transformFlags = 0 /* None */; + this.parent = void 0; + this.original = void 0; + this.emitNode = void 0; +} +function Token(kind, pos, end) { + this.pos = pos; + this.end = end; + this.kind = kind; + this.id = 0; + this.flags = 0 /* None */; + this.transformFlags = 0 /* None */; + this.parent = void 0; + this.emitNode = void 0; +} +function Identifier2(kind, pos, end) { + this.pos = pos; + this.end = end; + this.kind = kind; + this.id = 0; + this.flags = 0 /* None */; + this.transformFlags = 0 /* None */; + this.parent = void 0; + this.original = void 0; + this.emitNode = void 0; +} +function SourceMapSource(fileName, text, skipTrivia2) { + this.fileName = fileName; + this.text = text; + this.skipTrivia = skipTrivia2 || ((pos) => pos); +} +var objectAllocator = { + getNodeConstructor: () => Node4, + getTokenConstructor: () => Token, + getIdentifierConstructor: () => Identifier2, + getPrivateIdentifierConstructor: () => Node4, + getSourceFileConstructor: () => Node4, + getSymbolConstructor: () => Symbol4, + getTypeConstructor: () => Type3, + getSignatureConstructor: () => Signature2, + getSourceMapSourceConstructor: () => SourceMapSource +}; +var objectAllocatorPatchers = []; +function addObjectAllocatorPatcher(fn) { + objectAllocatorPatchers.push(fn); + fn(objectAllocator); +} +function setObjectAllocator(alloc) { + Object.assign(objectAllocator, alloc); + forEach(objectAllocatorPatchers, (fn) => fn(objectAllocator)); +} +function formatStringFromArgs(text, args) { + return text.replace(/\{(\d+)\}/g, (_match, index) => "" + Debug.checkDefined(args[+index])); +} +var localizedDiagnosticMessages; +function setLocalizedDiagnosticMessages(messages) { + localizedDiagnosticMessages = messages; +} +function maybeSetLocalizedDiagnosticMessages(getMessages) { + if (!localizedDiagnosticMessages && getMessages) { + localizedDiagnosticMessages = getMessages(); + } +} +function getLocaleSpecificMessage(message) { + return localizedDiagnosticMessages && localizedDiagnosticMessages[message.key] || message.message; +} +function createDetachedDiagnostic(fileName, sourceText, start, length2, message, ...args) { + if (start + length2 > sourceText.length) { + length2 = sourceText.length - start; + } + assertDiagnosticLocation(sourceText, start, length2); + let text = getLocaleSpecificMessage(message); + if (some(args)) { + text = formatStringFromArgs(text, args); + } + return { + file: void 0, + start, + length: length2, + messageText: text, + category: message.category, + code: message.code, + reportsUnnecessary: message.reportsUnnecessary, + fileName + }; +} +function isDiagnosticWithDetachedLocation(diagnostic) { + return diagnostic.file === void 0 && diagnostic.start !== void 0 && diagnostic.length !== void 0 && typeof diagnostic.fileName === "string"; +} +function attachFileToDiagnostic(diagnostic, file) { + const fileName = file.fileName || ""; + const length2 = file.text.length; + Debug.assertEqual(diagnostic.fileName, fileName); + Debug.assertLessThanOrEqual(diagnostic.start, length2); + Debug.assertLessThanOrEqual(diagnostic.start + diagnostic.length, length2); + const diagnosticWithLocation = { + file, + start: diagnostic.start, + length: diagnostic.length, + messageText: diagnostic.messageText, + category: diagnostic.category, + code: diagnostic.code, + reportsUnnecessary: diagnostic.reportsUnnecessary + }; + if (diagnostic.relatedInformation) { + diagnosticWithLocation.relatedInformation = []; + for (const related of diagnostic.relatedInformation) { + if (isDiagnosticWithDetachedLocation(related) && related.fileName === fileName) { + Debug.assertLessThanOrEqual(related.start, length2); + Debug.assertLessThanOrEqual(related.start + related.length, length2); + diagnosticWithLocation.relatedInformation.push(attachFileToDiagnostic(related, file)); + } else { + diagnosticWithLocation.relatedInformation.push(related); + } + } + } + return diagnosticWithLocation; +} +function attachFileToDiagnostics(diagnostics, file) { + const diagnosticsWithLocation = []; + for (const diagnostic of diagnostics) { + diagnosticsWithLocation.push(attachFileToDiagnostic(diagnostic, file)); + } + return diagnosticsWithLocation; +} +function createFileDiagnostic(file, start, length2, message, ...args) { + assertDiagnosticLocation(file.text, start, length2); + let text = getLocaleSpecificMessage(message); + if (some(args)) { + text = formatStringFromArgs(text, args); + } + return { + file, + start, + length: length2, + messageText: text, + category: message.category, + code: message.code, + reportsUnnecessary: message.reportsUnnecessary, + reportsDeprecated: message.reportsDeprecated + }; +} +function formatMessage(message, ...args) { + let text = getLocaleSpecificMessage(message); + if (some(args)) { + text = formatStringFromArgs(text, args); + } + return text; +} +function createCompilerDiagnostic(message, ...args) { + let text = getLocaleSpecificMessage(message); + if (some(args)) { + text = formatStringFromArgs(text, args); + } + return { + file: void 0, + start: void 0, + length: void 0, + messageText: text, + category: message.category, + code: message.code, + reportsUnnecessary: message.reportsUnnecessary, + reportsDeprecated: message.reportsDeprecated + }; +} +function createCompilerDiagnosticFromMessageChain(chain, relatedInformation) { + return { + file: void 0, + start: void 0, + length: void 0, + code: chain.code, + category: chain.category, + messageText: chain.next ? chain : chain.messageText, + relatedInformation + }; +} +function chainDiagnosticMessages(details, message, ...args) { + let text = getLocaleSpecificMessage(message); + if (some(args)) { + text = formatStringFromArgs(text, args); + } + return { + messageText: text, + category: message.category, + code: message.code, + next: details === void 0 || Array.isArray(details) ? details : [details] + }; +} +function concatenateDiagnosticMessageChains(headChain, tailChain) { + let lastChain = headChain; + while (lastChain.next) { + lastChain = lastChain.next[0]; + } + lastChain.next = [tailChain]; +} +function getDiagnosticFilePath(diagnostic) { + return diagnostic.file ? diagnostic.file.path : void 0; +} +function compareDiagnostics(d1, d2) { + return compareDiagnosticsSkipRelatedInformation(d1, d2) || compareRelatedInformation(d1, d2) || 0 /* EqualTo */; +} +function compareDiagnosticsSkipRelatedInformation(d1, d2) { + const code1 = getDiagnosticCode(d1); + const code2 = getDiagnosticCode(d2); + return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) || compareValues(d1.start, d2.start) || compareValues(d1.length, d2.length) || compareValues(code1, code2) || compareMessageText(d1, d2) || 0 /* EqualTo */; +} +function compareRelatedInformation(d1, d2) { + if (!d1.relatedInformation && !d2.relatedInformation) { + return 0 /* EqualTo */; + } + if (d1.relatedInformation && d2.relatedInformation) { + return compareValues(d2.relatedInformation.length, d1.relatedInformation.length) || forEach(d1.relatedInformation, (d1i, index) => { + const d2i = d2.relatedInformation[index]; + return compareDiagnostics(d1i, d2i); + }) || 0 /* EqualTo */; + } + return d1.relatedInformation ? -1 /* LessThan */ : 1 /* GreaterThan */; +} +function compareMessageText(d1, d2) { + let headMsg1 = getDiagnosticMessage(d1); + let headMsg2 = getDiagnosticMessage(d2); + if (typeof headMsg1 !== "string") { + headMsg1 = headMsg1.messageText; + } + if (typeof headMsg2 !== "string") { + headMsg2 = headMsg2.messageText; + } + const chain1 = typeof d1.messageText !== "string" ? d1.messageText.next : void 0; + const chain2 = typeof d2.messageText !== "string" ? d2.messageText.next : void 0; + let res = compareStringsCaseSensitive(headMsg1, headMsg2); + if (res) { + return res; + } + res = compareMessageChain(chain1, chain2); + if (res) { + return res; + } + if (d1.canonicalHead && !d2.canonicalHead) { + return -1 /* LessThan */; + } + if (d2.canonicalHead && !d1.canonicalHead) { + return 1 /* GreaterThan */; + } + return 0 /* EqualTo */; +} +function compareMessageChain(c1, c2) { + if (c1 === void 0 && c2 === void 0) { + return 0 /* EqualTo */; + } + if (c1 === void 0) { + return 1 /* GreaterThan */; + } + if (c2 === void 0) { + return -1 /* LessThan */; + } + return compareMessageChainSize(c1, c2) || compareMessageChainContent(c1, c2); +} +function compareMessageChainSize(c1, c2) { + if (c1 === void 0 && c2 === void 0) { + return 0 /* EqualTo */; + } + if (c1 === void 0) { + return 1 /* GreaterThan */; + } + if (c2 === void 0) { + return -1 /* LessThan */; + } + let res = compareValues(c2.length, c1.length); + if (res) { + return res; + } + for (let i = 0; i < c2.length; i++) { + res = compareMessageChainSize(c1[i].next, c2[i].next); + if (res) { + return res; + } + } + return 0 /* EqualTo */; +} +function compareMessageChainContent(c1, c2) { + let res; + for (let i = 0; i < c2.length; i++) { + res = compareStringsCaseSensitive(c1[i].messageText, c2[i].messageText); + if (res) { + return res; + } + if (c1[i].next === void 0) { + continue; + } + res = compareMessageChainContent(c1[i].next, c2[i].next); + if (res) { + return res; + } + } + return 0 /* EqualTo */; +} +function diagnosticsEqualityComparer(d1, d2) { + const code1 = getDiagnosticCode(d1); + const code2 = getDiagnosticCode(d2); + const msg1 = getDiagnosticMessage(d1); + const msg2 = getDiagnosticMessage(d2); + return compareStringsCaseSensitive(getDiagnosticFilePath(d1), getDiagnosticFilePath(d2)) === 0 /* EqualTo */ && compareValues(d1.start, d2.start) === 0 /* EqualTo */ && compareValues(d1.length, d2.length) === 0 /* EqualTo */ && compareValues(code1, code2) === 0 /* EqualTo */ && messageTextEqualityComparer(msg1, msg2); +} +function getDiagnosticCode(d) { + var _a; + return ((_a = d.canonicalHead) == null ? void 0 : _a.code) || d.code; +} +function getDiagnosticMessage(d) { + var _a; + return ((_a = d.canonicalHead) == null ? void 0 : _a.messageText) || d.messageText; +} +function messageTextEqualityComparer(m1, m2) { + const t1 = typeof m1 === "string" ? m1 : m1.messageText; + const t2 = typeof m2 === "string" ? m2 : m2.messageText; + return compareStringsCaseSensitive(t1, t2) === 0 /* EqualTo */; +} +function getLanguageVariant(scriptKind) { + return scriptKind === 4 /* TSX */ || scriptKind === 2 /* JSX */ || scriptKind === 1 /* JS */ || scriptKind === 6 /* JSON */ ? 1 /* JSX */ : 0 /* Standard */; +} +function walkTreeForJSXTags(node) { + if (!(node.transformFlags & 2 /* ContainsJsx */)) return void 0; + return isJsxOpeningLikeElement(node) || isJsxFragment(node) ? node : forEachChild(node, walkTreeForJSXTags); +} +function isFileModuleFromUsingJSXTag(file) { + return !file.isDeclarationFile ? walkTreeForJSXTags(file) : void 0; +} +function isFileForcedToBeModuleByFormat(file, options) { + return (getImpliedNodeFormatForEmitWorker(file, options) === 99 /* ESNext */ || fileExtensionIsOneOf(file.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */, ".mjs" /* Mjs */, ".mts" /* Mts */])) && !file.isDeclarationFile ? true : void 0; +} +function getSetExternalModuleIndicator(options) { + switch (getEmitModuleDetectionKind(options)) { + case 3 /* Force */: + return (file) => { + file.externalModuleIndicator = isFileProbablyExternalModule(file) || !file.isDeclarationFile || void 0; + }; + case 1 /* Legacy */: + return (file) => { + file.externalModuleIndicator = isFileProbablyExternalModule(file); + }; + case 2 /* Auto */: + const checks = [isFileProbablyExternalModule]; + if (options.jsx === 4 /* ReactJSX */ || options.jsx === 5 /* ReactJSXDev */) { + checks.push(isFileModuleFromUsingJSXTag); + } + checks.push(isFileForcedToBeModuleByFormat); + const combined = or(...checks); + const callback = (file) => void (file.externalModuleIndicator = combined(file, options)); + return callback; + } +} +function importSyntaxAffectsModuleResolution(options) { + const moduleResolution = getEmitModuleResolutionKind(options); + return 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || getResolvePackageJsonExports(options) || getResolvePackageJsonImports(options); +} +function createComputedCompilerOptions(options) { + return options; +} +var _computedOptions = createComputedCompilerOptions({ + allowImportingTsExtensions: { + dependencies: ["rewriteRelativeImportExtensions"], + computeValue: (compilerOptions) => { + return !!(compilerOptions.allowImportingTsExtensions || compilerOptions.rewriteRelativeImportExtensions); + } + }, + target: { + dependencies: ["module"], + computeValue: (compilerOptions) => { + const target = compilerOptions.target === 0 /* ES3 */ ? void 0 : compilerOptions.target; + return target ?? (compilerOptions.module === 100 /* Node16 */ && 9 /* ES2022 */ || compilerOptions.module === 101 /* Node18 */ && 9 /* ES2022 */ || compilerOptions.module === 102 /* Node20 */ && 10 /* ES2023 */ || compilerOptions.module === 199 /* NodeNext */ && 99 /* ESNext */ || 1 /* ES5 */); + } + }, + module: { + dependencies: ["target"], + computeValue: (compilerOptions) => { + return typeof compilerOptions.module === "number" ? compilerOptions.module : _computedOptions.target.computeValue(compilerOptions) >= 2 /* ES2015 */ ? 5 /* ES2015 */ : 1 /* CommonJS */; + } + }, + moduleResolution: { + dependencies: ["module", "target"], + computeValue: (compilerOptions) => { + let moduleResolution = compilerOptions.moduleResolution; + if (moduleResolution === void 0) { + switch (_computedOptions.module.computeValue(compilerOptions)) { + case 1 /* CommonJS */: + moduleResolution = 2 /* Node10 */; + break; + case 100 /* Node16 */: + case 101 /* Node18 */: + case 102 /* Node20 */: + moduleResolution = 3 /* Node16 */; + break; + case 199 /* NodeNext */: + moduleResolution = 99 /* NodeNext */; + break; + case 200 /* Preserve */: + moduleResolution = 100 /* Bundler */; + break; + default: + moduleResolution = 1 /* Classic */; + break; + } + } + return moduleResolution; + } + }, + moduleDetection: { + dependencies: ["module", "target"], + computeValue: (compilerOptions) => { + if (compilerOptions.moduleDetection !== void 0) { + return compilerOptions.moduleDetection; + } + const moduleKind = _computedOptions.module.computeValue(compilerOptions); + return 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ ? 3 /* Force */ : 2 /* Auto */; + } + }, + isolatedModules: { + dependencies: ["verbatimModuleSyntax"], + computeValue: (compilerOptions) => { + return !!(compilerOptions.isolatedModules || compilerOptions.verbatimModuleSyntax); + } + }, + esModuleInterop: { + dependencies: ["module", "target"], + computeValue: (compilerOptions) => { + if (compilerOptions.esModuleInterop !== void 0) { + return compilerOptions.esModuleInterop; + } + switch (_computedOptions.module.computeValue(compilerOptions)) { + case 100 /* Node16 */: + case 101 /* Node18 */: + case 102 /* Node20 */: + case 199 /* NodeNext */: + case 200 /* Preserve */: + return true; + } + return false; + } + }, + allowSyntheticDefaultImports: { + dependencies: ["module", "target", "moduleResolution"], + computeValue: (compilerOptions) => { + if (compilerOptions.allowSyntheticDefaultImports !== void 0) { + return compilerOptions.allowSyntheticDefaultImports; + } + return _computedOptions.esModuleInterop.computeValue(compilerOptions) || _computedOptions.module.computeValue(compilerOptions) === 4 /* System */ || _computedOptions.moduleResolution.computeValue(compilerOptions) === 100 /* Bundler */; + } + }, + resolvePackageJsonExports: { + dependencies: ["moduleResolution"], + computeValue: (compilerOptions) => { + const moduleResolution = _computedOptions.moduleResolution.computeValue(compilerOptions); + if (!moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { + return false; + } + if (compilerOptions.resolvePackageJsonExports !== void 0) { + return compilerOptions.resolvePackageJsonExports; + } + switch (moduleResolution) { + case 3 /* Node16 */: + case 99 /* NodeNext */: + case 100 /* Bundler */: + return true; + } + return false; + } + }, + resolvePackageJsonImports: { + dependencies: ["moduleResolution", "resolvePackageJsonExports"], + computeValue: (compilerOptions) => { + const moduleResolution = _computedOptions.moduleResolution.computeValue(compilerOptions); + if (!moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { + return false; + } + if (compilerOptions.resolvePackageJsonImports !== void 0) { + return compilerOptions.resolvePackageJsonImports; + } + switch (moduleResolution) { + case 3 /* Node16 */: + case 99 /* NodeNext */: + case 100 /* Bundler */: + return true; + } + return false; + } + }, + resolveJsonModule: { + dependencies: ["moduleResolution", "module", "target"], + computeValue: (compilerOptions) => { + if (compilerOptions.resolveJsonModule !== void 0) { + return compilerOptions.resolveJsonModule; + } + switch (_computedOptions.module.computeValue(compilerOptions)) { + // TODO in 6.0: uncomment + // case ModuleKind.Node16: + // case ModuleKind.Node18: + case 102 /* Node20 */: + case 199 /* NodeNext */: + return true; + } + return _computedOptions.moduleResolution.computeValue(compilerOptions) === 100 /* Bundler */; + } + }, + declaration: { + dependencies: ["composite"], + computeValue: (compilerOptions) => { + return !!(compilerOptions.declaration || compilerOptions.composite); + } + }, + preserveConstEnums: { + dependencies: ["isolatedModules", "verbatimModuleSyntax"], + computeValue: (compilerOptions) => { + return !!(compilerOptions.preserveConstEnums || _computedOptions.isolatedModules.computeValue(compilerOptions)); + } + }, + incremental: { + dependencies: ["composite"], + computeValue: (compilerOptions) => { + return !!(compilerOptions.incremental || compilerOptions.composite); + } + }, + declarationMap: { + dependencies: ["declaration", "composite"], + computeValue: (compilerOptions) => { + return !!(compilerOptions.declarationMap && _computedOptions.declaration.computeValue(compilerOptions)); + } + }, + allowJs: { + dependencies: ["checkJs"], + computeValue: (compilerOptions) => { + return compilerOptions.allowJs === void 0 ? !!compilerOptions.checkJs : compilerOptions.allowJs; + } + }, + useDefineForClassFields: { + dependencies: ["target", "module"], + computeValue: (compilerOptions) => { + return compilerOptions.useDefineForClassFields === void 0 ? _computedOptions.target.computeValue(compilerOptions) >= 9 /* ES2022 */ : compilerOptions.useDefineForClassFields; + } + }, + noImplicitAny: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "noImplicitAny"); + } + }, + noImplicitThis: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "noImplicitThis"); + } + }, + strictNullChecks: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictNullChecks"); + } + }, + strictFunctionTypes: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictFunctionTypes"); + } + }, + strictBindCallApply: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictBindCallApply"); + } + }, + strictPropertyInitialization: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); + } + }, + strictBuiltinIteratorReturn: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); + } + }, + alwaysStrict: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "alwaysStrict"); + } + }, + useUnknownInCatchVariables: { + dependencies: ["strict"], + computeValue: (compilerOptions) => { + return getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables"); + } + } +}); +var computedOptions = _computedOptions; +var getAllowImportingTsExtensions = _computedOptions.allowImportingTsExtensions.computeValue; +var getEmitScriptTarget = _computedOptions.target.computeValue; +var getEmitModuleKind = _computedOptions.module.computeValue; +var getEmitModuleResolutionKind = _computedOptions.moduleResolution.computeValue; +var getEmitModuleDetectionKind = _computedOptions.moduleDetection.computeValue; +var getIsolatedModules = _computedOptions.isolatedModules.computeValue; +var getESModuleInterop = _computedOptions.esModuleInterop.computeValue; +var getAllowSyntheticDefaultImports = _computedOptions.allowSyntheticDefaultImports.computeValue; +var getResolvePackageJsonExports = _computedOptions.resolvePackageJsonExports.computeValue; +var getResolvePackageJsonImports = _computedOptions.resolvePackageJsonImports.computeValue; +var getResolveJsonModule = _computedOptions.resolveJsonModule.computeValue; +var getEmitDeclarations = _computedOptions.declaration.computeValue; +var shouldPreserveConstEnums = _computedOptions.preserveConstEnums.computeValue; +var isIncrementalCompilation = _computedOptions.incremental.computeValue; +var getAreDeclarationMapsEnabled = _computedOptions.declarationMap.computeValue; +var getAllowJSCompilerOption = _computedOptions.allowJs.computeValue; +var getUseDefineForClassFields = _computedOptions.useDefineForClassFields.computeValue; +function emitModuleKindIsNonNodeESM(moduleKind) { + return moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */; +} +function hasJsonModuleEmitEnabled(options) { + switch (getEmitModuleKind(options)) { + case 0 /* None */: + case 4 /* System */: + case 3 /* UMD */: + return false; + } + return true; +} +function unreachableCodeIsError(options) { + return options.allowUnreachableCode === false; +} +function unusedLabelIsError(options) { + return options.allowUnusedLabels === false; +} +function moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution) { + return moduleResolution >= 3 /* Node16 */ && moduleResolution <= 99 /* NodeNext */ || moduleResolution === 100 /* Bundler */; +} +function moduleSupportsImportAttributes(moduleKind) { + return 101 /* Node18 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ || moduleKind === 200 /* Preserve */ || moduleKind === 99 /* ESNext */; +} +function getStrictOptionValue(compilerOptions, flag) { + return compilerOptions[flag] === void 0 ? !!compilerOptions.strict : !!compilerOptions[flag]; +} +function getNameOfScriptTarget(scriptTarget) { + return forEachEntry(targetOptionDeclaration.type, (value, key) => value === scriptTarget ? key : void 0); +} +function getEmitStandardClassFields(compilerOptions) { + return compilerOptions.useDefineForClassFields !== false && getEmitScriptTarget(compilerOptions) >= 9 /* ES2022 */; +} +function compilerOptionsAffectSemanticDiagnostics(newOptions, oldOptions) { + return optionsHaveChanges(oldOptions, newOptions, semanticDiagnosticsOptionDeclarations); +} +function compilerOptionsAffectEmit(newOptions, oldOptions) { + return optionsHaveChanges(oldOptions, newOptions, affectsEmitOptionDeclarations); +} +function compilerOptionsAffectDeclarationPath(newOptions, oldOptions) { + return optionsHaveChanges(oldOptions, newOptions, affectsDeclarationPathOptionDeclarations); +} +function getCompilerOptionValue(options, option) { + return option.strictFlag ? getStrictOptionValue(options, option.name) : option.allowJsFlag ? getAllowJSCompilerOption(options) : options[option.name]; +} +function getJSXTransformEnabled(options) { + const jsx = options.jsx; + return jsx === 2 /* React */ || jsx === 4 /* ReactJSX */ || jsx === 5 /* ReactJSXDev */; +} +function getJSXImplicitImportBase(compilerOptions, file) { + const jsxImportSourcePragmas = file == null ? void 0 : file.pragmas.get("jsximportsource"); + const jsxImportSourcePragma = isArray(jsxImportSourcePragmas) ? jsxImportSourcePragmas[jsxImportSourcePragmas.length - 1] : jsxImportSourcePragmas; + const jsxRuntimePragmas = file == null ? void 0 : file.pragmas.get("jsxruntime"); + const jsxRuntimePragma = isArray(jsxRuntimePragmas) ? jsxRuntimePragmas[jsxRuntimePragmas.length - 1] : jsxRuntimePragmas; + if ((jsxRuntimePragma == null ? void 0 : jsxRuntimePragma.arguments.factory) === "classic") { + return void 0; + } + return compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */ || compilerOptions.jsxImportSource || jsxImportSourcePragma || (jsxRuntimePragma == null ? void 0 : jsxRuntimePragma.arguments.factory) === "automatic" ? (jsxImportSourcePragma == null ? void 0 : jsxImportSourcePragma.arguments.factory) || compilerOptions.jsxImportSource || "react" : void 0; +} +function getJSXRuntimeImport(base, options) { + return base ? `${base}/${options.jsx === 5 /* ReactJSXDev */ ? "jsx-dev-runtime" : "jsx-runtime"}` : void 0; +} +function hasZeroOrOneAsteriskCharacter(str) { + let seenAsterisk = false; + for (let i = 0; i < str.length; i++) { + if (str.charCodeAt(i) === 42 /* asterisk */) { + if (!seenAsterisk) { + seenAsterisk = true; + } else { + return false; + } + } + } + return true; +} +function createSymlinkCache(cwd, getCanonicalFileName) { + let symlinkedDirectories; + let symlinkedDirectoriesByRealpath; + let symlinkedFiles; + let hasProcessedResolutions = false; + return { + getSymlinkedFiles: () => symlinkedFiles, + getSymlinkedDirectories: () => symlinkedDirectories, + getSymlinkedDirectoriesByRealpath: () => symlinkedDirectoriesByRealpath, + setSymlinkedFile: (path, real) => (symlinkedFiles || (symlinkedFiles = /* @__PURE__ */ new Map())).set(path, real), + setSymlinkedDirectory: (symlink, real) => { + let symlinkPath = toPath(symlink, cwd, getCanonicalFileName); + if (!containsIgnoredPath(symlinkPath)) { + symlinkPath = ensureTrailingDirectorySeparator(symlinkPath); + if (real !== false && !(symlinkedDirectories == null ? void 0 : symlinkedDirectories.has(symlinkPath))) { + (symlinkedDirectoriesByRealpath || (symlinkedDirectoriesByRealpath = createMultiMap())).add(real.realPath, symlink); + } + (symlinkedDirectories || (symlinkedDirectories = /* @__PURE__ */ new Map())).set(symlinkPath, real); + } + }, + setSymlinksFromResolutions(forEachResolvedModule, forEachResolvedTypeReferenceDirective, typeReferenceDirectives) { + Debug.assert(!hasProcessedResolutions); + hasProcessedResolutions = true; + forEachResolvedModule((resolution) => processResolution(this, resolution.resolvedModule)); + forEachResolvedTypeReferenceDirective((resolution) => processResolution(this, resolution.resolvedTypeReferenceDirective)); + typeReferenceDirectives.forEach((resolution) => processResolution(this, resolution.resolvedTypeReferenceDirective)); + }, + hasProcessedResolutions: () => hasProcessedResolutions, + setSymlinksFromResolution(resolution) { + processResolution(this, resolution); + }, + hasAnySymlinks + }; + function hasAnySymlinks() { + return !!(symlinkedFiles == null ? void 0 : symlinkedFiles.size) || !!symlinkedDirectories && !!forEachEntry(symlinkedDirectories, (value) => !!value); + } + function processResolution(cache, resolution) { + if (!resolution || !resolution.originalPath || !resolution.resolvedFileName) return; + const { resolvedFileName, originalPath } = resolution; + cache.setSymlinkedFile(toPath(originalPath, cwd, getCanonicalFileName), resolvedFileName); + const [commonResolved, commonOriginal] = guessDirectorySymlink(resolvedFileName, originalPath, cwd, getCanonicalFileName) || emptyArray; + if (commonResolved && commonOriginal) { + cache.setSymlinkedDirectory( + commonOriginal, + { + real: ensureTrailingDirectorySeparator(commonResolved), + realPath: ensureTrailingDirectorySeparator(toPath(commonResolved, cwd, getCanonicalFileName)) + } + ); + } + } +} +function guessDirectorySymlink(a, b, cwd, getCanonicalFileName) { + const aParts = getPathComponents(getNormalizedAbsolutePath(a, cwd)); + const bParts = getPathComponents(getNormalizedAbsolutePath(b, cwd)); + let isDirectory = false; + while (aParts.length >= 2 && bParts.length >= 2 && !isNodeModulesOrScopedPackageDirectory(aParts[aParts.length - 2], getCanonicalFileName) && !isNodeModulesOrScopedPackageDirectory(bParts[bParts.length - 2], getCanonicalFileName) && getCanonicalFileName(aParts[aParts.length - 1]) === getCanonicalFileName(bParts[bParts.length - 1])) { + aParts.pop(); + bParts.pop(); + isDirectory = true; + } + return isDirectory ? [getPathFromPathComponents(aParts), getPathFromPathComponents(bParts)] : void 0; +} +function isNodeModulesOrScopedPackageDirectory(s, getCanonicalFileName) { + return s !== void 0 && (getCanonicalFileName(s) === "node_modules" || startsWith(s, "@")); +} +function stripLeadingDirectorySeparator(s) { + return isAnyDirectorySeparator(s.charCodeAt(0)) ? s.slice(1) : void 0; +} +function tryRemoveDirectoryPrefix(path, dirPath, getCanonicalFileName) { + const withoutPrefix = tryRemovePrefix(path, dirPath, getCanonicalFileName); + return withoutPrefix === void 0 ? void 0 : stripLeadingDirectorySeparator(withoutPrefix); +} +var reservedCharacterPattern = /[^\w\s/]/g; +function regExpEscape(text) { + return text.replace(reservedCharacterPattern, escapeRegExpCharacter); +} +function escapeRegExpCharacter(match) { + return "\\" + match; +} +var wildcardCharCodes = [42 /* asterisk */, 63 /* question */]; +var commonPackageFolders = ["node_modules", "bower_components", "jspm_packages"]; +var implicitExcludePathRegexPattern = `(?!(?:${commonPackageFolders.join("|")})(?:/|$))`; +var filesMatcher = { + /** + * Matches any single directory segment unless it is the last segment and a .min.js file + * Breakdown: + * [^./] # matches everything up to the first . character (excluding directory separators) + * (\\.(?!min\\.js$))? # matches . characters but not if they are part of the .min.js file extension + */ + singleAsteriskRegexFragment: "(?:[^./]|(?:\\.(?!min\\.js$))?)*", + /** + * Regex for the ** wildcard. Matches any number of subdirectories. When used for including + * files or directories, does not match subdirectories that start with a . character + */ + doubleAsteriskRegexFragment: `(?:/${implicitExcludePathRegexPattern}[^/.][^/]*)*?`, + replaceWildcardCharacter: (match) => replaceWildcardCharacter(match, filesMatcher.singleAsteriskRegexFragment) +}; +var directoriesMatcher = { + singleAsteriskRegexFragment: "[^/]*", + /** + * Regex for the ** wildcard. Matches any number of subdirectories. When used for including + * files or directories, does not match subdirectories that start with a . character + */ + doubleAsteriskRegexFragment: `(?:/${implicitExcludePathRegexPattern}[^/.][^/]*)*?`, + replaceWildcardCharacter: (match) => replaceWildcardCharacter(match, directoriesMatcher.singleAsteriskRegexFragment) +}; +var excludeMatcher = { + singleAsteriskRegexFragment: "[^/]*", + doubleAsteriskRegexFragment: "(?:/.+?)?", + replaceWildcardCharacter: (match) => replaceWildcardCharacter(match, excludeMatcher.singleAsteriskRegexFragment) +}; +var wildcardMatchers = { + files: filesMatcher, + directories: directoriesMatcher, + exclude: excludeMatcher +}; +function getRegularExpressionForWildcard(specs, basePath, usage) { + const patterns = getRegularExpressionsForWildcards(specs, basePath, usage); + if (!patterns || !patterns.length) { + return void 0; + } + const pattern = patterns.map((pattern2) => `(?:${pattern2})`).join("|"); + const terminator = usage === "exclude" ? "(?:$|/)" : "$"; + return `^(?:${pattern})${terminator}`; +} +function getRegularExpressionsForWildcards(specs, basePath, usage) { + if (specs === void 0 || specs.length === 0) { + return void 0; + } + return flatMap(specs, (spec) => spec && getSubPatternFromSpec(spec, basePath, usage, wildcardMatchers[usage])); +} +function isImplicitGlob(lastPathComponent) { + return !/[.*?]/.test(lastPathComponent); +} +function getPatternFromSpec(spec, basePath, usage) { + const pattern = spec && getSubPatternFromSpec(spec, basePath, usage, wildcardMatchers[usage]); + return pattern && `^(?:${pattern})${usage === "exclude" ? "(?:$|/)" : "$"}`; +} +function getSubPatternFromSpec(spec, basePath, usage, { singleAsteriskRegexFragment, doubleAsteriskRegexFragment, replaceWildcardCharacter: replaceWildcardCharacter2 } = wildcardMatchers[usage]) { + let subpattern = ""; + let hasWrittenComponent = false; + const components = getNormalizedPathComponents(spec, basePath); + const lastComponent = last(components); + if (usage !== "exclude" && lastComponent === "**") { + return void 0; + } + components[0] = removeTrailingDirectorySeparator(components[0]); + if (isImplicitGlob(lastComponent)) { + components.push("**", "*"); + } + let optionalCount = 0; + for (let component of components) { + if (component === "**") { + subpattern += doubleAsteriskRegexFragment; + } else { + if (usage === "directories") { + subpattern += "(?:"; + optionalCount++; + } + if (hasWrittenComponent) { + subpattern += directorySeparator; + } + if (usage !== "exclude") { + let componentPattern = ""; + if (component.charCodeAt(0) === 42 /* asterisk */) { + componentPattern += "(?:[^./]" + singleAsteriskRegexFragment + ")?"; + component = component.substr(1); + } else if (component.charCodeAt(0) === 63 /* question */) { + componentPattern += "[^./]"; + component = component.substr(1); + } + componentPattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter2); + if (componentPattern !== component) { + subpattern += implicitExcludePathRegexPattern; + } + subpattern += componentPattern; + } else { + subpattern += component.replace(reservedCharacterPattern, replaceWildcardCharacter2); + } + } + hasWrittenComponent = true; + } + while (optionalCount > 0) { + subpattern += ")?"; + optionalCount--; + } + return subpattern; +} +function replaceWildcardCharacter(match, singleAsteriskRegexFragment) { + return match === "*" ? singleAsteriskRegexFragment : match === "?" ? "[^/]" : "\\" + match; +} +function getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames2, currentDirectory) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + const absolutePath = combinePaths(currentDirectory, path); + return { + includeFilePatterns: map(getRegularExpressionsForWildcards(includes, absolutePath, "files"), (pattern) => `^${pattern}$`), + includeFilePattern: getRegularExpressionForWildcard(includes, absolutePath, "files"), + includeDirectoryPattern: getRegularExpressionForWildcard(includes, absolutePath, "directories"), + excludePattern: getRegularExpressionForWildcard(excludes, absolutePath, "exclude"), + basePaths: getBasePaths(path, includes, useCaseSensitiveFileNames2) + }; +} +function getRegexFromPattern(pattern, useCaseSensitiveFileNames2) { + return new RegExp(pattern, useCaseSensitiveFileNames2 ? "" : "i"); +} +function matchFiles(path, extensions, excludes, includes, useCaseSensitiveFileNames2, currentDirectory, depth, getFileSystemEntries, realpath) { + path = normalizePath(path); + currentDirectory = normalizePath(currentDirectory); + const patterns = getFileMatcherPatterns(path, excludes, includes, useCaseSensitiveFileNames2, currentDirectory); + const includeFileRegexes = patterns.includeFilePatterns && patterns.includeFilePatterns.map((pattern) => getRegexFromPattern(pattern, useCaseSensitiveFileNames2)); + const includeDirectoryRegex = patterns.includeDirectoryPattern && getRegexFromPattern(patterns.includeDirectoryPattern, useCaseSensitiveFileNames2); + const excludeRegex = patterns.excludePattern && getRegexFromPattern(patterns.excludePattern, useCaseSensitiveFileNames2); + const results = includeFileRegexes ? includeFileRegexes.map(() => []) : [[]]; + const visited = /* @__PURE__ */ new Map(); + const toCanonical = createGetCanonicalFileName(useCaseSensitiveFileNames2); + for (const basePath of patterns.basePaths) { + visitDirectory(basePath, combinePaths(currentDirectory, basePath), depth); + } + return flatten(results); + function visitDirectory(path2, absolutePath, depth2) { + const canonicalPath = toCanonical(realpath(absolutePath)); + if (visited.has(canonicalPath)) return; + visited.set(canonicalPath, true); + const { files, directories } = getFileSystemEntries(path2); + for (const current of toSorted(files, compareStringsCaseSensitive)) { + const name = combinePaths(path2, current); + const absoluteName = combinePaths(absolutePath, current); + if (extensions && !fileExtensionIsOneOf(name, extensions)) continue; + if (excludeRegex && excludeRegex.test(absoluteName)) continue; + if (!includeFileRegexes) { + results[0].push(name); + } else { + const includeIndex = findIndex(includeFileRegexes, (re) => re.test(absoluteName)); + if (includeIndex !== -1) { + results[includeIndex].push(name); + } + } + } + if (depth2 !== void 0) { + depth2--; + if (depth2 === 0) { + return; + } + } + for (const current of toSorted(directories, compareStringsCaseSensitive)) { + const name = combinePaths(path2, current); + const absoluteName = combinePaths(absolutePath, current); + if ((!includeDirectoryRegex || includeDirectoryRegex.test(absoluteName)) && (!excludeRegex || !excludeRegex.test(absoluteName))) { + visitDirectory(name, absoluteName, depth2); + } + } + } +} +function getBasePaths(path, includes, useCaseSensitiveFileNames2) { + const basePaths = [path]; + if (includes) { + const includeBasePaths = []; + for (const include of includes) { + const absolute = isRootedDiskPath(include) ? include : normalizePath(combinePaths(path, include)); + includeBasePaths.push(getIncludeBasePath(absolute)); + } + includeBasePaths.sort(getStringComparer(!useCaseSensitiveFileNames2)); + for (const includeBasePath of includeBasePaths) { + if (every(basePaths, (basePath) => !containsPath(basePath, includeBasePath, path, !useCaseSensitiveFileNames2))) { + basePaths.push(includeBasePath); + } + } + } + return basePaths; +} +function getIncludeBasePath(absolute) { + const wildcardOffset = indexOfAnyCharCode(absolute, wildcardCharCodes); + if (wildcardOffset < 0) { + return !hasExtension(absolute) ? absolute : removeTrailingDirectorySeparator(getDirectoryPath(absolute)); + } + return absolute.substring(0, absolute.lastIndexOf(directorySeparator, wildcardOffset)); +} +function ensureScriptKind(fileName, scriptKind) { + return scriptKind || getScriptKindFromFileName(fileName) || 3 /* TS */; +} +function getScriptKindFromFileName(fileName) { + const ext = fileName.substr(fileName.lastIndexOf(".")); + switch (ext.toLowerCase()) { + case ".js" /* Js */: + case ".cjs" /* Cjs */: + case ".mjs" /* Mjs */: + return 1 /* JS */; + case ".jsx" /* Jsx */: + return 2 /* JSX */; + case ".ts" /* Ts */: + case ".cts" /* Cts */: + case ".mts" /* Mts */: + return 3 /* TS */; + case ".tsx" /* Tsx */: + return 4 /* TSX */; + case ".json" /* Json */: + return 6 /* JSON */; + default: + return 0 /* Unknown */; + } +} +var supportedTSExtensions = [[".ts" /* Ts */, ".tsx" /* Tsx */, ".d.ts" /* Dts */], [".cts" /* Cts */, ".d.cts" /* Dcts */], [".mts" /* Mts */, ".d.mts" /* Dmts */]]; +var supportedTSExtensionsFlat = flatten(supportedTSExtensions); +var supportedTSExtensionsWithJson = [...supportedTSExtensions, [".json" /* Json */]]; +var supportedTSExtensionsForExtractExtension = [".d.ts" /* Dts */, ".d.cts" /* Dcts */, ".d.mts" /* Dmts */, ".cts" /* Cts */, ".mts" /* Mts */, ".ts" /* Ts */, ".tsx" /* Tsx */]; +var supportedJSExtensions = [[".js" /* Js */, ".jsx" /* Jsx */], [".mjs" /* Mjs */], [".cjs" /* Cjs */]]; +var supportedJSExtensionsFlat = flatten(supportedJSExtensions); +var allSupportedExtensions = [[".ts" /* Ts */, ".tsx" /* Tsx */, ".d.ts" /* Dts */, ".js" /* Js */, ".jsx" /* Jsx */], [".cts" /* Cts */, ".d.cts" /* Dcts */, ".cjs" /* Cjs */], [".mts" /* Mts */, ".d.mts" /* Dmts */, ".mjs" /* Mjs */]]; +var allSupportedExtensionsWithJson = [...allSupportedExtensions, [".json" /* Json */]]; +var supportedDeclarationExtensions = [".d.ts" /* Dts */, ".d.cts" /* Dcts */, ".d.mts" /* Dmts */]; +var supportedTSImplementationExtensions = [".ts" /* Ts */, ".cts" /* Cts */, ".mts" /* Mts */, ".tsx" /* Tsx */]; +var extensionsNotSupportingExtensionlessResolution = [".mts" /* Mts */, ".d.mts" /* Dmts */, ".mjs" /* Mjs */, ".cts" /* Cts */, ".d.cts" /* Dcts */, ".cjs" /* Cjs */]; +function getSupportedExtensions(options, extraFileExtensions) { + const needJsExtensions = options && getAllowJSCompilerOption(options); + if (!extraFileExtensions || extraFileExtensions.length === 0) { + return needJsExtensions ? allSupportedExtensions : supportedTSExtensions; + } + const builtins = needJsExtensions ? allSupportedExtensions : supportedTSExtensions; + const flatBuiltins = flatten(builtins); + const extensions = [ + ...builtins, + ...mapDefined(extraFileExtensions, (x) => x.scriptKind === 7 /* Deferred */ || needJsExtensions && isJSLike(x.scriptKind) && !flatBuiltins.includes(x.extension) ? [x.extension] : void 0) + ]; + return extensions; +} +function getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions) { + if (!options || !getResolveJsonModule(options)) return supportedExtensions; + if (supportedExtensions === allSupportedExtensions) return allSupportedExtensionsWithJson; + if (supportedExtensions === supportedTSExtensions) return supportedTSExtensionsWithJson; + return [...supportedExtensions, [".json" /* Json */]]; +} +function isJSLike(scriptKind) { + return scriptKind === 1 /* JS */ || scriptKind === 2 /* JSX */; +} +function hasJSFileExtension(fileName) { + return some(supportedJSExtensionsFlat, (extension) => fileExtensionIs(fileName, extension)); +} +function hasTSFileExtension(fileName) { + return some(supportedTSExtensionsFlat, (extension) => fileExtensionIs(fileName, extension)); +} +function hasImplementationTSFileExtension(fileName) { + return some(supportedTSImplementationExtensions, (extension) => fileExtensionIs(fileName, extension)) && !isDeclarationFileName(fileName); +} +var ModuleSpecifierEnding = /* @__PURE__ */ ((ModuleSpecifierEnding2) => { + ModuleSpecifierEnding2[ModuleSpecifierEnding2["Minimal"] = 0] = "Minimal"; + ModuleSpecifierEnding2[ModuleSpecifierEnding2["Index"] = 1] = "Index"; + ModuleSpecifierEnding2[ModuleSpecifierEnding2["JsExtension"] = 2] = "JsExtension"; + ModuleSpecifierEnding2[ModuleSpecifierEnding2["TsExtension"] = 3] = "TsExtension"; + return ModuleSpecifierEnding2; +})(ModuleSpecifierEnding || {}); +function usesExtensionsOnImports({ imports }, hasExtension2 = or(hasJSFileExtension, hasTSFileExtension)) { + return firstDefined(imports, ({ text }) => pathIsRelative(text) && !fileExtensionIsOneOf(text, extensionsNotSupportingExtensionlessResolution) ? hasExtension2(text) : void 0) || false; +} +function getModuleSpecifierEndingPreference(preference, resolutionMode, compilerOptions, sourceFile) { + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + const moduleResolutionIsNodeNext = 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */; + if (preference === "js" || resolutionMode === 99 /* ESNext */ && moduleResolutionIsNodeNext) { + if (!shouldAllowImportingTsExtension(compilerOptions)) { + return 2 /* JsExtension */; + } + return inferPreference() !== 2 /* JsExtension */ ? 3 /* TsExtension */ : 2 /* JsExtension */; + } + if (preference === "minimal") { + return 0 /* Minimal */; + } + if (preference === "index") { + return 1 /* Index */; + } + if (!shouldAllowImportingTsExtension(compilerOptions)) { + return sourceFile && usesExtensionsOnImports(sourceFile) ? 2 /* JsExtension */ : 0 /* Minimal */; + } + return inferPreference(); + function inferPreference() { + let usesJsExtensions = false; + const specifiers = (sourceFile == null ? void 0 : sourceFile.imports.length) ? sourceFile.imports : sourceFile && isSourceFileJS(sourceFile) ? getRequiresAtTopOfFile(sourceFile).map((r) => r.arguments[0]) : emptyArray; + for (const specifier of specifiers) { + if (pathIsRelative(specifier.text)) { + if (moduleResolutionIsNodeNext && resolutionMode === 1 /* CommonJS */ && getModeForUsageLocation(sourceFile, specifier, compilerOptions) === 99 /* ESNext */) { + continue; + } + if (fileExtensionIsOneOf(specifier.text, extensionsNotSupportingExtensionlessResolution)) { + continue; + } + if (hasTSFileExtension(specifier.text)) { + return 3 /* TsExtension */; + } + if (hasJSFileExtension(specifier.text)) { + usesJsExtensions = true; + } + } + } + return usesJsExtensions ? 2 /* JsExtension */ : 0 /* Minimal */; + } +} +function getRequiresAtTopOfFile(sourceFile) { + let nonRequireStatementCount = 0; + let requires; + for (const statement of sourceFile.statements) { + if (nonRequireStatementCount > 3) { + break; + } + if (isRequireVariableStatement(statement)) { + requires = concatenate(requires, statement.declarationList.declarations.map((d) => d.initializer)); + } else if (isExpressionStatement(statement) && isRequireCall( + statement.expression, + /*requireStringLiteralLikeArgument*/ + true + )) { + requires = append(requires, statement.expression); + } else { + nonRequireStatementCount++; + } + } + return requires || emptyArray; +} +function isSupportedSourceFileName(fileName, compilerOptions, extraFileExtensions) { + if (!fileName) return false; + const supportedExtensions = getSupportedExtensions(compilerOptions, extraFileExtensions); + for (const extension of flatten(getSupportedExtensionsWithJsonIfResolveJsonModule(compilerOptions, supportedExtensions))) { + if (fileExtensionIs(fileName, extension)) { + return true; + } + } + return false; +} +function numberOfDirectorySeparators(str) { + const match = str.match(/\//g); + return match ? match.length : 0; +} +function compareNumberOfDirectorySeparators(path1, path2) { + return compareValues( + numberOfDirectorySeparators(path1), + numberOfDirectorySeparators(path2) + ); +} +var extensionsToRemove = [".d.ts" /* Dts */, ".d.mts" /* Dmts */, ".d.cts" /* Dcts */, ".mjs" /* Mjs */, ".mts" /* Mts */, ".cjs" /* Cjs */, ".cts" /* Cts */, ".ts" /* Ts */, ".js" /* Js */, ".tsx" /* Tsx */, ".jsx" /* Jsx */, ".json" /* Json */]; +function removeFileExtension(path) { + for (const ext of extensionsToRemove) { + const extensionless = tryRemoveExtension(path, ext); + if (extensionless !== void 0) { + return extensionless; + } + } + return path; +} +function tryRemoveExtension(path, extension) { + return fileExtensionIs(path, extension) ? removeExtension(path, extension) : void 0; +} +function removeExtension(path, extension) { + return path.substring(0, path.length - extension.length); +} +function changeExtension(path, newExtension) { + return changeAnyExtension( + path, + newExtension, + extensionsToRemove, + /*ignoreCase*/ + false + ); +} +function tryParsePattern(pattern) { + const indexOfStar = pattern.indexOf("*"); + if (indexOfStar === -1) { + return pattern; + } + return pattern.indexOf("*", indexOfStar + 1) !== -1 ? void 0 : { + prefix: pattern.substr(0, indexOfStar), + suffix: pattern.substr(indexOfStar + 1) + }; +} +var parsedPatternsCache = /* @__PURE__ */ new WeakMap(); +function tryParsePatterns(paths) { + let result = parsedPatternsCache.get(paths); + if (result !== void 0) { + return result; + } + let matchableStringSet; + let patterns; + const pathList = getOwnKeys(paths); + for (const path of pathList) { + const patternOrStr = tryParsePattern(path); + if (patternOrStr === void 0) { + continue; + } else if (typeof patternOrStr === "string") { + (matchableStringSet ?? (matchableStringSet = /* @__PURE__ */ new Set())).add(patternOrStr); + } else { + (patterns ?? (patterns = [])).push(patternOrStr); + } + } + parsedPatternsCache.set( + paths, + result = { + matchableStringSet, + patterns + } + ); + return result; +} +function positionIsSynthesized(pos) { + return !(pos >= 0); +} +function extensionIsTS(ext) { + return ext === ".ts" /* Ts */ || ext === ".tsx" /* Tsx */ || ext === ".d.ts" /* Dts */ || ext === ".cts" /* Cts */ || ext === ".mts" /* Mts */ || ext === ".d.mts" /* Dmts */ || ext === ".d.cts" /* Dcts */ || startsWith(ext, ".d.") && endsWith(ext, ".ts"); +} +function resolutionExtensionIsTSOrJson(ext) { + return extensionIsTS(ext) || ext === ".json" /* Json */; +} +function extensionFromPath(path) { + const ext = tryGetExtensionFromPath2(path); + return ext !== void 0 ? ext : Debug.fail(`File ${path} has unknown extension.`); +} +function isAnySupportedFileExtension(path) { + return tryGetExtensionFromPath2(path) !== void 0; +} +function tryGetExtensionFromPath2(path) { + return find(extensionsToRemove, (e) => fileExtensionIs(path, e)); +} +function isCheckJsEnabledForFile(sourceFile, compilerOptions) { + return sourceFile.checkJsDirective ? sourceFile.checkJsDirective.enabled : compilerOptions.checkJs; +} +var emptyFileSystemEntries = { + files: emptyArray, + directories: emptyArray +}; +function matchPatternOrExact(parsedPatterns, candidate) { + const { matchableStringSet, patterns } = parsedPatterns; + if (matchableStringSet == null ? void 0 : matchableStringSet.has(candidate)) { + return candidate; + } + if (patterns === void 0 || patterns.length === 0) { + return void 0; + } + return findBestPatternMatch(patterns, (_) => _, candidate); +} +function sliceAfter(arr, value) { + const index = arr.indexOf(value); + Debug.assert(index !== -1); + return arr.slice(index); +} +function addRelatedInfo(diagnostic, ...relatedInformation) { + if (!relatedInformation.length) { + return diagnostic; + } + if (!diagnostic.relatedInformation) { + diagnostic.relatedInformation = []; + } + Debug.assert(diagnostic.relatedInformation !== emptyArray, "Diagnostic had empty array singleton for related info, but is still being constructed!"); + diagnostic.relatedInformation.push(...relatedInformation); + return diagnostic; +} +function minAndMax(arr, getValue) { + Debug.assert(arr.length !== 0); + let min2 = getValue(arr[0]); + let max = min2; + for (let i = 1; i < arr.length; i++) { + const value = getValue(arr[i]); + if (value < min2) { + min2 = value; + } else if (value > max) { + max = value; + } + } + return { min: min2, max }; +} +function rangeOfNode(node) { + return { pos: getTokenPosOfNode(node), end: node.end }; +} +function rangeOfTypeParameters(sourceFile, typeParameters) { + const pos = typeParameters.pos - 1; + const end = Math.min(sourceFile.text.length, skipTrivia(sourceFile.text, typeParameters.end) + 1); + return { pos, end }; +} +function skipTypeChecking(sourceFile, options, host) { + return skipTypeCheckingWorker( + sourceFile, + options, + host, + /*ignoreNoCheck*/ + false + ); +} +function skipTypeCheckingIgnoringNoCheck(sourceFile, options, host) { + return skipTypeCheckingWorker( + sourceFile, + options, + host, + /*ignoreNoCheck*/ + true + ); +} +function skipTypeCheckingWorker(sourceFile, options, host, ignoreNoCheck) { + return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib || !ignoreNoCheck && options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnostics(sourceFile, options); +} +function canIncludeBindAndCheckDiagnostics(sourceFile, options) { + if (!!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false) return false; + if (sourceFile.scriptKind === 3 /* TS */ || sourceFile.scriptKind === 4 /* TSX */ || sourceFile.scriptKind === 5 /* External */) return true; + const isJs = sourceFile.scriptKind === 1 /* JS */ || sourceFile.scriptKind === 2 /* JSX */; + const isCheckJs = isJs && isCheckJsEnabledForFile(sourceFile, options); + const isPlainJs = isPlainJsFile(sourceFile, options.checkJs); + return isPlainJs || isCheckJs || sourceFile.scriptKind === 7 /* Deferred */; +} +function isJsonEqual(a, b) { + return a === b || typeof a === "object" && a !== null && typeof b === "object" && b !== null && equalOwnProperties(a, b, isJsonEqual); +} +function parsePseudoBigInt(stringValue) { + let log2Base; + switch (stringValue.charCodeAt(1)) { + // "x" in "0x123" + case 98 /* b */: + case 66 /* B */: + log2Base = 1; + break; + case 111 /* o */: + case 79 /* O */: + log2Base = 3; + break; + case 120 /* x */: + case 88 /* X */: + log2Base = 4; + break; + default: + const nIndex = stringValue.length - 1; + let nonZeroStart = 0; + while (stringValue.charCodeAt(nonZeroStart) === 48 /* _0 */) { + nonZeroStart++; + } + return stringValue.slice(nonZeroStart, nIndex) || "0"; + } + const startIndex = 2, endIndex = stringValue.length - 1; + const bitsNeeded = (endIndex - startIndex) * log2Base; + const segments = new Uint16Array((bitsNeeded >>> 4) + (bitsNeeded & 15 ? 1 : 0)); + for (let i = endIndex - 1, bitOffset = 0; i >= startIndex; i--, bitOffset += log2Base) { + const segment = bitOffset >>> 4; + const digitChar = stringValue.charCodeAt(i); + const digit = digitChar <= 57 /* _9 */ ? digitChar - 48 /* _0 */ : 10 + digitChar - (digitChar <= 70 /* F */ ? 65 /* A */ : 97 /* a */); + const shiftedDigit = digit << (bitOffset & 15); + segments[segment] |= shiftedDigit; + const residual = shiftedDigit >>> 16; + if (residual) segments[segment + 1] |= residual; + } + let base10Value = ""; + let firstNonzeroSegment = segments.length - 1; + let segmentsRemaining = true; + while (segmentsRemaining) { + let mod10 = 0; + segmentsRemaining = false; + for (let segment = firstNonzeroSegment; segment >= 0; segment--) { + const newSegment = mod10 << 16 | segments[segment]; + const segmentValue = newSegment / 10 | 0; + segments[segment] = segmentValue; + mod10 = newSegment - segmentValue * 10; + if (segmentValue && !segmentsRemaining) { + firstNonzeroSegment = segment; + segmentsRemaining = true; + } + } + base10Value = mod10 + base10Value; + } + return base10Value; +} +function pseudoBigIntToString({ negative, base10Value }) { + return (negative && base10Value !== "0" ? "-" : "") + base10Value; +} +function parseBigInt(text) { + if (!isValidBigIntString( + text, + /*roundTripOnly*/ + false + )) { + return void 0; + } + return parseValidBigInt(text); +} +function parseValidBigInt(text) { + const negative = text.startsWith("-"); + const base10Value = parsePseudoBigInt(`${negative ? text.slice(1) : text}n`); + return { negative, base10Value }; +} +function isValidBigIntString(s, roundTripOnly) { + if (s === "") return false; + const scanner2 = createScanner( + 99 /* ESNext */, + /*skipTrivia*/ + false + ); + let success = true; + scanner2.setOnError(() => success = false); + scanner2.setText(s + "n"); + let result = scanner2.scan(); + const negative = result === 41 /* MinusToken */; + if (negative) { + result = scanner2.scan(); + } + const flags = scanner2.getTokenFlags(); + return success && result === 10 /* BigIntLiteral */ && scanner2.getTokenEnd() === s.length + 1 && !(flags & 512 /* ContainsSeparator */) && (!roundTripOnly || s === pseudoBigIntToString({ negative, base10Value: parsePseudoBigInt(scanner2.getTokenValue()) })); +} +function isValidTypeOnlyAliasUseSite(useSite) { + return !!(useSite.flags & 33554432 /* Ambient */) || isInJSDoc(useSite) || isPartOfTypeQuery(useSite) || isIdentifierInNonEmittingHeritageClause(useSite) || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite) || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite)); +} +function isShorthandPropertyNameUseSite(useSite) { + return isIdentifier(useSite) && isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite; +} +function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node) { + while (node.kind === 80 /* Identifier */ || node.kind === 212 /* PropertyAccessExpression */) { + node = node.parent; + } + if (node.kind !== 168 /* ComputedPropertyName */) { + return false; + } + if (hasSyntacticModifier(node.parent, 64 /* Abstract */)) { + return true; + } + const containerKind = node.parent.parent.kind; + return containerKind === 265 /* InterfaceDeclaration */ || containerKind === 188 /* TypeLiteral */; +} +function isIdentifierInNonEmittingHeritageClause(node) { + if (node.kind !== 80 /* Identifier */) return false; + const heritageClause = findAncestor(node.parent, (parent2) => { + switch (parent2.kind) { + case 299 /* HeritageClause */: + return true; + case 212 /* PropertyAccessExpression */: + case 234 /* ExpressionWithTypeArguments */: + return false; + default: + return "quit"; + } + }); + return (heritageClause == null ? void 0 : heritageClause.token) === 119 /* ImplementsKeyword */ || (heritageClause == null ? void 0 : heritageClause.parent.kind) === 265 /* InterfaceDeclaration */; +} +function isIdentifierTypeReference(node) { + return isTypeReferenceNode(node) && isIdentifier(node.typeName); +} +function arrayIsHomogeneous(array, comparer = equateValues) { + if (array.length < 2) return true; + const first2 = array[0]; + for (let i = 1, length2 = array.length; i < length2; i++) { + const target = array[i]; + if (!comparer(first2, target)) return false; + } + return true; +} +function setTextRangePos(range, pos) { + range.pos = pos; + return range; +} +function setTextRangeEnd(range, end) { + range.end = end; + return range; +} +function setTextRangePosEnd(range, pos, end) { + return setTextRangeEnd(setTextRangePos(range, pos), end); +} +function setTextRangePosWidth(range, pos, width) { + return setTextRangePosEnd(range, pos, pos + width); +} +function setNodeFlags(node, newFlags) { + if (node) { + node.flags = newFlags; + } + return node; +} +function setParent(child, parent2) { + if (child && parent2) { + child.parent = parent2; + } + return child; +} +function setParentRecursive(rootNode, incremental) { + if (!rootNode) return rootNode; + forEachChildRecursively(rootNode, isJSDocNode(rootNode) ? bindParentToChildIgnoringJSDoc : bindParentToChild); + return rootNode; + function bindParentToChildIgnoringJSDoc(child, parent2) { + if (incremental && child.parent === parent2) { + return "skip"; + } + setParent(child, parent2); + } + function bindJSDoc(child) { + if (hasJSDocNodes(child)) { + for (const doc of child.jsDoc) { + bindParentToChildIgnoringJSDoc(doc, child); + forEachChildRecursively(doc, bindParentToChildIgnoringJSDoc); + } + } + } + function bindParentToChild(child, parent2) { + return bindParentToChildIgnoringJSDoc(child, parent2) || bindJSDoc(child); + } +} +function isPackedElement(node) { + return !isOmittedExpression(node); +} +function isPackedArrayLiteral(node) { + return isArrayLiteralExpression(node) && every(node.elements, isPackedElement); +} +function expressionResultIsUnused(node) { + Debug.assertIsDefined(node.parent); + while (true) { + const parent2 = node.parent; + if (isParenthesizedExpression(parent2)) { + node = parent2; + continue; + } + if (isExpressionStatement(parent2) || isVoidExpression(parent2) || isForStatement(parent2) && (parent2.initializer === node || parent2.incrementor === node)) { + return true; + } + if (isCommaListExpression(parent2)) { + if (node !== last(parent2.elements)) return true; + node = parent2; + continue; + } + if (isBinaryExpression(parent2) && parent2.operatorToken.kind === 28 /* CommaToken */) { + if (node === parent2.left) return true; + node = parent2; + continue; + } + return false; + } +} +function containsIgnoredPath(path) { + return some(ignoredPaths, (p) => path.includes(p)); +} +function getContainingNodeArray(node) { + if (!node.parent) return void 0; + switch (node.kind) { + case 169 /* TypeParameter */: + const { parent: parent3 } = node; + return parent3.kind === 196 /* InferType */ ? void 0 : parent3.typeParameters; + case 170 /* Parameter */: + return node.parent.parameters; + case 205 /* TemplateLiteralTypeSpan */: + return node.parent.templateSpans; + case 240 /* TemplateSpan */: + return node.parent.templateSpans; + case 171 /* Decorator */: { + const { parent: parent4 } = node; + return canHaveDecorators(parent4) ? parent4.modifiers : void 0; + } + case 299 /* HeritageClause */: + return node.parent.heritageClauses; + } + const { parent: parent2 } = node; + if (isJSDocTag(node)) { + return isJSDocTypeLiteral(node.parent) ? void 0 : node.parent.tags; + } + switch (parent2.kind) { + case 188 /* TypeLiteral */: + case 265 /* InterfaceDeclaration */: + return isTypeElement(node) ? parent2.members : void 0; + case 193 /* UnionType */: + case 194 /* IntersectionType */: + return parent2.types; + case 190 /* TupleType */: + case 210 /* ArrayLiteralExpression */: + case 357 /* CommaListExpression */: + case 276 /* NamedImports */: + case 280 /* NamedExports */: + return parent2.elements; + case 211 /* ObjectLiteralExpression */: + case 293 /* JsxAttributes */: + return parent2.properties; + case 214 /* CallExpression */: + case 215 /* NewExpression */: + return isTypeNode(node) ? parent2.typeArguments : parent2.expression === node ? void 0 : parent2.arguments; + case 285 /* JsxElement */: + case 289 /* JsxFragment */: + return isJsxChild(node) ? parent2.children : void 0; + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + return isTypeNode(node) ? parent2.typeArguments : void 0; + case 242 /* Block */: + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + case 269 /* ModuleBlock */: + return parent2.statements; + case 270 /* CaseBlock */: + return parent2.clauses; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return isClassElement(node) ? parent2.members : void 0; + case 267 /* EnumDeclaration */: + return isEnumMember(node) ? parent2.members : void 0; + case 308 /* SourceFile */: + return parent2.statements; + } +} +function hasContextSensitiveParameters(node) { + if (!node.typeParameters) { + if (some(node.parameters, (p) => !getEffectiveTypeAnnotationNode(p))) { + return true; + } + if (node.kind !== 220 /* ArrowFunction */) { + const parameter = firstOrUndefined(node.parameters); + if (!(parameter && parameterIsThisKeyword(parameter))) { + return true; + } + } + } + return false; +} +function isInfinityOrNaNString(name) { + return name === "Infinity" || name === "-Infinity" || name === "NaN"; +} +function isCatchClauseVariableDeclaration(node) { + return node.kind === 261 /* VariableDeclaration */ && node.parent.kind === 300 /* CatchClause */; +} +function isFunctionExpressionOrArrowFunction(node) { + return node.kind === 219 /* FunctionExpression */ || node.kind === 220 /* ArrowFunction */; +} +function escapeSnippetText(text) { + return text.replace(/\$/g, () => "\\$"); +} +function isNumericLiteralName(name) { + return (+name).toString() === name; +} +function createPropertyNameNodeForIdentifierOrLiteral(name, target, singleQuote, stringNamed, isMethod) { + const isMethodNamedNew = isMethod && name === "new"; + return !isMethodNamedNew && isIdentifierText(name, target) ? factory.createIdentifier(name) : !stringNamed && !isMethodNamedNew && isNumericLiteralName(name) && +name >= 0 ? factory.createNumericLiteral(+name) : factory.createStringLiteral(name, !!singleQuote); +} +function isThisTypeParameter(type) { + return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType); +} +function getNodeModulePathParts(fullPath) { + let topLevelNodeModulesIndex = 0; + let topLevelPackageNameIndex = 0; + let packageRootIndex = 0; + let fileNameIndex = 0; + let States; + ((States2) => { + States2[States2["BeforeNodeModules"] = 0] = "BeforeNodeModules"; + States2[States2["NodeModules"] = 1] = "NodeModules"; + States2[States2["Scope"] = 2] = "Scope"; + States2[States2["PackageContent"] = 3] = "PackageContent"; + })(States || (States = {})); + let partStart = 0; + let partEnd = 0; + let state = 0 /* BeforeNodeModules */; + while (partEnd >= 0) { + partStart = partEnd; + partEnd = fullPath.indexOf("/", partStart + 1); + switch (state) { + case 0 /* BeforeNodeModules */: + if (fullPath.indexOf(nodeModulesPathPart, partStart) === partStart) { + topLevelNodeModulesIndex = partStart; + topLevelPackageNameIndex = partEnd; + state = 1 /* NodeModules */; + } + break; + case 1 /* NodeModules */: + case 2 /* Scope */: + if (state === 1 /* NodeModules */ && fullPath.charAt(partStart + 1) === "@") { + state = 2 /* Scope */; + } else { + packageRootIndex = partEnd; + state = 3 /* PackageContent */; + } + break; + case 3 /* PackageContent */: + if (fullPath.indexOf(nodeModulesPathPart, partStart) === partStart) { + state = 1 /* NodeModules */; + } else { + state = 3 /* PackageContent */; + } + break; + } + } + fileNameIndex = partStart; + return state > 1 /* NodeModules */ ? { topLevelNodeModulesIndex, topLevelPackageNameIndex, packageRootIndex, fileNameIndex } : void 0; +} +function isTypeDeclaration(node) { + switch (node.kind) { + case 169 /* TypeParameter */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 267 /* EnumDeclaration */: + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + return true; + case 274 /* ImportClause */: + return node.phaseModifier === 156 /* TypeKeyword */; + case 277 /* ImportSpecifier */: + return node.parent.parent.phaseModifier === 156 /* TypeKeyword */; + case 282 /* ExportSpecifier */: + return node.parent.parent.isTypeOnly; + default: + return false; + } +} +function canHaveExportModifier(node) { + return isEnumDeclaration(node) || isVariableStatement(node) || isFunctionDeclaration(node) || isClassDeclaration(node) || isInterfaceDeclaration(node) || isTypeDeclaration(node) || isModuleDeclaration(node) && !isExternalModuleAugmentation(node) && !isGlobalScopeAugmentation(node); +} +function isOptionalJSDocPropertyLikeTag(node) { + if (!isJSDocPropertyLikeTag(node)) { + return false; + } + const { isBracketed, typeExpression } = node; + return isBracketed || !!typeExpression && typeExpression.type.kind === 317 /* JSDocOptionalType */; +} +function canUsePropertyAccess(name, languageVersion) { + if (name.length === 0) { + return false; + } + const firstChar = name.charCodeAt(0); + return firstChar === 35 /* hash */ ? name.length > 1 && isIdentifierStart(name.charCodeAt(1), languageVersion) : isIdentifierStart(firstChar, languageVersion); +} +function hasTabstop(node) { + var _a; + return ((_a = getSnippetElement(node)) == null ? void 0 : _a.kind) === 0 /* TabStop */; +} +function isJSDocOptionalParameter(node) { + return isInJSFile(node) && // node.type should only be a JSDocOptionalType when node is a parameter of a JSDocFunctionType + (node.type && node.type.kind === 317 /* JSDocOptionalType */ || getJSDocParameterTags(node).some(isOptionalJSDocPropertyLikeTag)); +} +function isOptionalDeclaration(declaration) { + switch (declaration.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return !!declaration.questionToken; + case 170 /* Parameter */: + return !!declaration.questionToken || isJSDocOptionalParameter(declaration); + case 349 /* JSDocPropertyTag */: + case 342 /* JSDocParameterTag */: + return isOptionalJSDocPropertyLikeTag(declaration); + default: + return false; + } +} +function isNonNullAccess(node) { + const kind = node.kind; + return (kind === 212 /* PropertyAccessExpression */ || kind === 213 /* ElementAccessExpression */) && isNonNullExpression(node.expression); +} +function isJSDocSatisfiesExpression(node) { + return isInJSFile(node) && isParenthesizedExpression(node) && hasJSDocNodes(node) && !!getJSDocSatisfiesTag(node); +} +function getJSDocSatisfiesExpressionType(node) { + return Debug.checkDefined(tryGetJSDocSatisfiesTypeNode(node)); +} +function tryGetJSDocSatisfiesTypeNode(node) { + const tag = getJSDocSatisfiesTag(node); + return tag && tag.typeExpression && tag.typeExpression.type; +} +function getEscapedTextOfJsxAttributeName(node) { + return isIdentifier(node) ? node.escapedText : getEscapedTextOfJsxNamespacedName(node); +} +function getTextOfJsxAttributeName(node) { + return isIdentifier(node) ? idText(node) : getTextOfJsxNamespacedName(node); +} +function isJsxAttributeName(node) { + const kind = node.kind; + return kind === 80 /* Identifier */ || kind === 296 /* JsxNamespacedName */; +} +function getEscapedTextOfJsxNamespacedName(node) { + return `${node.namespace.escapedText}:${idText(node.name)}`; +} +function getTextOfJsxNamespacedName(node) { + return `${idText(node.namespace)}:${idText(node.name)}`; +} +function intrinsicTagNameToString(node) { + return isIdentifier(node) ? idText(node) : getTextOfJsxNamespacedName(node); +} +function isTypeUsableAsPropertyName(type) { + return !!(type.flags & 8576 /* StringOrNumberLiteralOrUnique */); +} +function getPropertyNameFromType(type) { + if (type.flags & 8192 /* UniqueESSymbol */) { + return type.escapedName; + } + if (type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + return escapeLeadingUnderscores("" + type.value); + } + return Debug.fail(); +} +function isExpandoPropertyDeclaration(declaration) { + return !!declaration && (isPropertyAccessExpression(declaration) || isElementAccessExpression(declaration) || isBinaryExpression(declaration)); +} +function hasResolutionModeOverride(node) { + if (node === void 0) { + return false; + } + return !!getResolutionModeOverride(node.attributes); +} +var stringReplace = String.prototype.replace; +function replaceFirstStar(s, replacement) { + return stringReplace.call(s, "*", replacement); +} +function getNameFromImportAttribute(node) { + return isIdentifier(node.name) ? node.name.escapedText : escapeLeadingUnderscores(node.name.text); +} +function isSourceElement(node) { + switch (node.kind) { + case 169 /* TypeParameter */: + case 170 /* Parameter */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 186 /* ConstructorType */: + case 185 /* FunctionType */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 176 /* ClassStaticBlockDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 184 /* TypeReference */: + case 183 /* TypePredicate */: + case 187 /* TypeQuery */: + case 188 /* TypeLiteral */: + case 189 /* ArrayType */: + case 190 /* TupleType */: + case 193 /* UnionType */: + case 194 /* IntersectionType */: + case 197 /* ParenthesizedType */: + case 191 /* OptionalType */: + case 192 /* RestType */: + case 198 /* ThisType */: + case 199 /* TypeOperator */: + case 195 /* ConditionalType */: + case 196 /* InferType */: + case 204 /* TemplateLiteralType */: + case 206 /* ImportType */: + case 203 /* NamedTupleMember */: + case 329 /* JSDocAugmentsTag */: + case 330 /* JSDocImplementsTag */: + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + case 346 /* JSDocTemplateTag */: + case 345 /* JSDocTypeTag */: + case 325 /* JSDocLink */: + case 326 /* JSDocLinkCode */: + case 327 /* JSDocLinkPlain */: + case 342 /* JSDocParameterTag */: + case 349 /* JSDocPropertyTag */: + case 318 /* JSDocFunctionType */: + case 316 /* JSDocNonNullableType */: + case 315 /* JSDocNullableType */: + case 313 /* JSDocAllType */: + case 314 /* JSDocUnknownType */: + case 323 /* JSDocTypeLiteral */: + case 319 /* JSDocVariadicType */: + case 310 /* JSDocTypeExpression */: + case 334 /* JSDocPublicTag */: + case 336 /* JSDocProtectedTag */: + case 335 /* JSDocPrivateTag */: + case 351 /* JSDocSatisfiesTag */: + case 344 /* JSDocThisTag */: + case 200 /* IndexedAccessType */: + case 201 /* MappedType */: + case 263 /* FunctionDeclaration */: + case 242 /* Block */: + case 269 /* ModuleBlock */: + case 244 /* VariableStatement */: + case 245 /* ExpressionStatement */: + case 246 /* IfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 252 /* ContinueStatement */: + case 253 /* BreakStatement */: + case 254 /* ReturnStatement */: + case 255 /* WithStatement */: + case 256 /* SwitchStatement */: + case 257 /* LabeledStatement */: + case 258 /* ThrowStatement */: + case 259 /* TryStatement */: + case 261 /* VariableDeclaration */: + case 209 /* BindingElement */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 267 /* EnumDeclaration */: + case 268 /* ModuleDeclaration */: + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 279 /* ExportDeclaration */: + case 278 /* ExportAssignment */: + case 243 /* EmptyStatement */: + case 260 /* DebuggerStatement */: + case 283 /* MissingDeclaration */: + return true; + } + return false; +} +function evaluatorResult(value, isSyntacticallyString = false, resolvedOtherFiles = false, hasExternalReferences = false) { + return { value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences }; +} +function createEvaluator({ evaluateElementAccessExpression, evaluateEntityNameExpression }) { + function evaluate(expr, location) { + let isSyntacticallyString = false; + let resolvedOtherFiles = false; + let hasExternalReferences = false; + expr = skipParentheses(expr); + switch (expr.kind) { + case 225 /* PrefixUnaryExpression */: + const result = evaluate(expr.operand, location); + resolvedOtherFiles = result.resolvedOtherFiles; + hasExternalReferences = result.hasExternalReferences; + if (typeof result.value === "number") { + switch (expr.operator) { + case 40 /* PlusToken */: + return evaluatorResult(result.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 41 /* MinusToken */: + return evaluatorResult(-result.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 55 /* TildeToken */: + return evaluatorResult(~result.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + } + } + break; + case 227 /* BinaryExpression */: { + const left = evaluate(expr.left, location); + const right = evaluate(expr.right, location); + isSyntacticallyString = (left.isSyntacticallyString || right.isSyntacticallyString) && expr.operatorToken.kind === 40 /* PlusToken */; + resolvedOtherFiles = left.resolvedOtherFiles || right.resolvedOtherFiles; + hasExternalReferences = left.hasExternalReferences || right.hasExternalReferences; + if (typeof left.value === "number" && typeof right.value === "number") { + switch (expr.operatorToken.kind) { + case 52 /* BarToken */: + return evaluatorResult(left.value | right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 51 /* AmpersandToken */: + return evaluatorResult(left.value & right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 49 /* GreaterThanGreaterThanToken */: + return evaluatorResult(left.value >> right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + return evaluatorResult(left.value >>> right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 48 /* LessThanLessThanToken */: + return evaluatorResult(left.value << right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 53 /* CaretToken */: + return evaluatorResult(left.value ^ right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 42 /* AsteriskToken */: + return evaluatorResult(left.value * right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 44 /* SlashToken */: + return evaluatorResult(left.value / right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 40 /* PlusToken */: + return evaluatorResult(left.value + right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 41 /* MinusToken */: + return evaluatorResult(left.value - right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 45 /* PercentToken */: + return evaluatorResult(left.value % right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + case 43 /* AsteriskAsteriskToken */: + return evaluatorResult(left.value ** right.value, isSyntacticallyString, resolvedOtherFiles, hasExternalReferences); + } + } else if ((typeof left.value === "string" || typeof left.value === "number") && (typeof right.value === "string" || typeof right.value === "number") && expr.operatorToken.kind === 40 /* PlusToken */) { + return evaluatorResult( + "" + left.value + right.value, + isSyntacticallyString, + resolvedOtherFiles, + hasExternalReferences + ); + } + break; + } + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + return evaluatorResult( + expr.text, + /*isSyntacticallyString*/ + true + ); + case 229 /* TemplateExpression */: + return evaluateTemplateExpression(expr, location); + case 9 /* NumericLiteral */: + return evaluatorResult(+expr.text); + case 80 /* Identifier */: + return evaluateEntityNameExpression(expr, location); + case 212 /* PropertyAccessExpression */: + if (isEntityNameExpression(expr)) { + return evaluateEntityNameExpression(expr, location); + } + break; + case 213 /* ElementAccessExpression */: + return evaluateElementAccessExpression(expr, location); + } + return evaluatorResult( + /*value*/ + void 0, + isSyntacticallyString, + resolvedOtherFiles, + hasExternalReferences + ); + } + function evaluateTemplateExpression(expr, location) { + let result = expr.head.text; + let resolvedOtherFiles = false; + let hasExternalReferences = false; + for (const span of expr.templateSpans) { + const spanResult = evaluate(span.expression, location); + if (spanResult.value === void 0) { + return evaluatorResult( + /*value*/ + void 0, + /*isSyntacticallyString*/ + true + ); + } + result += spanResult.value; + result += span.literal.text; + resolvedOtherFiles || (resolvedOtherFiles = spanResult.resolvedOtherFiles); + hasExternalReferences || (hasExternalReferences = spanResult.hasExternalReferences); + } + return evaluatorResult( + result, + /*isSyntacticallyString*/ + true, + resolvedOtherFiles, + hasExternalReferences + ); + } + return evaluate; +} +function isConstAssertion(location) { + return isAssertionExpression(location) && isConstTypeReference(location.type) || isJSDocTypeTag(location) && isConstTypeReference(location.typeExpression); +} +function findConstructorDeclaration(node) { + const members = node.members; + for (const member of members) { + if (member.kind === 177 /* Constructor */ && nodeIsPresent(member.body)) { + return member; + } + } +} +function createNameResolver({ + compilerOptions, + requireSymbol, + argumentsSymbol, + error: error2, + getSymbolOfDeclaration, + globals, + lookup, + setRequiresScopeChangeCache = returnUndefined, + getRequiresScopeChangeCache = returnUndefined, + onPropertyWithInvalidInitializer = returnFalse, + onFailedToResolveSymbol = returnUndefined, + onSuccessfullyResolvedSymbol = returnUndefined +}) { + var isolatedModulesLikeFlagName = compilerOptions.verbatimModuleSyntax ? "verbatimModuleSyntax" : "isolatedModules"; + var emitStandardClassFields = getEmitStandardClassFields(compilerOptions); + var emptySymbols = createSymbolTable(); + return resolveNameHelper; + function resolveNameHelper(location, nameArg, meaning, nameNotFoundMessage, isUse, excludeGlobals) { + var _a, _b, _c; + const originalLocation = location; + let result; + let lastLocation; + let lastSelfReferenceLocation; + let propertyWithInvalidInitializer; + let associatedDeclarationForContainingInitializerOrBindingName; + let withinDeferredContext = false; + let grandparent; + const name = isString(nameArg) ? nameArg : nameArg.escapedText; + loop: + while (location) { + if (name === "const" && isConstAssertion(location)) { + return void 0; + } + if (isModuleOrEnumDeclaration(location) && lastLocation && location.name === lastLocation) { + lastLocation = location; + location = location.parent; + } + if (canHaveLocals(location) && location.locals && !isGlobalSourceFile(location)) { + if (result = lookup(location.locals, name, meaning)) { + let useResult = true; + if (isFunctionLike(location) && lastLocation && lastLocation !== location.body) { + if (meaning & result.flags & 788968 /* Type */ && lastLocation.kind !== 321 /* JSDoc */) { + useResult = result.flags & 262144 /* TypeParameter */ ? !!(lastLocation.flags & 16 /* Synthesized */) || // Synthetic fake scopes are added for signatures so type parameters are accessible from them + lastLocation === location.type || lastLocation.kind === 170 /* Parameter */ || lastLocation.kind === 342 /* JSDocParameterTag */ || lastLocation.kind === 343 /* JSDocReturnTag */ || lastLocation.kind === 169 /* TypeParameter */ : false; + } + if (meaning & result.flags & 3 /* Variable */) { + if (useOuterVariableScopeInParameter(result, location, lastLocation)) { + useResult = false; + } else if (result.flags & 1 /* FunctionScopedVariable */) { + useResult = lastLocation.kind === 170 /* Parameter */ || !!(lastLocation.flags & 16 /* Synthesized */) || // Synthetic fake scopes are added for signatures so parameters are accessible from them + lastLocation === location.type && !!findAncestor(result.valueDeclaration, isParameter); + } + } + } else if (location.kind === 195 /* ConditionalType */) { + useResult = lastLocation === location.trueType; + } + if (useResult) { + break loop; + } else { + result = void 0; + } + } + } + withinDeferredContext = withinDeferredContext || getIsDeferredContext(location, lastLocation); + switch (location.kind) { + case 308 /* SourceFile */: + if (!isExternalOrCommonJsModule(location)) break; + // falls through + case 268 /* ModuleDeclaration */: + const moduleExports = ((_a = getSymbolOfDeclaration(location)) == null ? void 0 : _a.exports) || emptySymbols; + if (location.kind === 308 /* SourceFile */ || isModuleDeclaration(location) && location.flags & 33554432 /* Ambient */ && !isGlobalScopeAugmentation(location)) { + if (result = moduleExports.get("default" /* Default */)) { + const localSymbol = getLocalSymbolForExportDefault(result); + if (localSymbol && result.flags & meaning && localSymbol.escapedName === name) { + break loop; + } + result = void 0; + } + const moduleExport = moduleExports.get(name); + if (moduleExport && moduleExport.flags === 2097152 /* Alias */ && (getDeclarationOfKind(moduleExport, 282 /* ExportSpecifier */) || getDeclarationOfKind(moduleExport, 281 /* NamespaceExport */))) { + break; + } + } + if (name !== "default" /* Default */ && (result = lookup(moduleExports, name, meaning & 2623475 /* ModuleMember */))) { + if (isSourceFile(location) && location.commonJsModuleIndicator && !((_b = result.declarations) == null ? void 0 : _b.some(isJSDocTypeAlias))) { + result = void 0; + } else { + break loop; + } + } + break; + case 267 /* EnumDeclaration */: + if (result = lookup(((_c = getSymbolOfDeclaration(location)) == null ? void 0 : _c.exports) || emptySymbols, name, meaning & 8 /* EnumMember */)) { + if (nameNotFoundMessage && getIsolatedModules(compilerOptions) && !(location.flags & 33554432 /* Ambient */) && getSourceFileOfNode(location) !== getSourceFileOfNode(result.valueDeclaration)) { + error2( + originalLocation, + Diagnostics.Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead, + unescapeLeadingUnderscores(name), + isolatedModulesLikeFlagName, + `${unescapeLeadingUnderscores(getSymbolOfDeclaration(location).escapedName)}.${unescapeLeadingUnderscores(name)}` + ); + } + break loop; + } + break; + case 173 /* PropertyDeclaration */: + if (!isStatic(location)) { + const ctor = findConstructorDeclaration(location.parent); + if (ctor && ctor.locals) { + if (lookup(ctor.locals, name, meaning & 111551 /* Value */)) { + Debug.assertNode(location, isPropertyDeclaration); + propertyWithInvalidInitializer = location; + } + } + } + break; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + if (result = lookup(getSymbolOfDeclaration(location).members || emptySymbols, name, meaning & 788968 /* Type */)) { + if (!isTypeParameterSymbolDeclaredInContainer(result, location)) { + result = void 0; + break; + } + if (lastLocation && isStatic(lastLocation)) { + if (nameNotFoundMessage) { + error2(originalLocation, Diagnostics.Static_members_cannot_reference_class_type_parameters); + } + return void 0; + } + break loop; + } + if (isClassExpression(location) && meaning & 32 /* Class */) { + const className = location.name; + if (className && name === className.escapedText) { + result = location.symbol; + break loop; + } + } + break; + case 234 /* ExpressionWithTypeArguments */: + if (lastLocation === location.expression && location.parent.token === 96 /* ExtendsKeyword */) { + const container = location.parent.parent; + if (isClassLike(container) && (result = lookup(getSymbolOfDeclaration(container).members, name, meaning & 788968 /* Type */))) { + if (nameNotFoundMessage) { + error2(originalLocation, Diagnostics.Base_class_expressions_cannot_reference_class_type_parameters); + } + return void 0; + } + } + break; + // It is not legal to reference a class's own type parameters from a computed property name that + // belongs to the class. For example: + // + // function foo() { return '' } + // class C { // <-- Class's own type parameter T + // [foo()]() { } // <-- Reference to T from class's own computed property + // } + // + case 168 /* ComputedPropertyName */: + grandparent = location.parent.parent; + if (isClassLike(grandparent) || grandparent.kind === 265 /* InterfaceDeclaration */) { + if (result = lookup(getSymbolOfDeclaration(grandparent).members, name, meaning & 788968 /* Type */)) { + if (nameNotFoundMessage) { + error2(originalLocation, Diagnostics.A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type); + } + return void 0; + } + } + break; + case 220 /* ArrowFunction */: + if (getEmitScriptTarget(compilerOptions) >= 2 /* ES2015 */) { + break; + } + // falls through + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 263 /* FunctionDeclaration */: + if (meaning & 3 /* Variable */ && name === "arguments") { + result = argumentsSymbol; + break loop; + } + break; + case 219 /* FunctionExpression */: + if (meaning & 3 /* Variable */ && name === "arguments") { + result = argumentsSymbol; + break loop; + } + if (meaning & 16 /* Function */) { + const functionName = location.name; + if (functionName && name === functionName.escapedText) { + result = location.symbol; + break loop; + } + } + break; + case 171 /* Decorator */: + if (location.parent && location.parent.kind === 170 /* Parameter */) { + location = location.parent; + } + if (location.parent && (isClassElement(location.parent) || location.parent.kind === 264 /* ClassDeclaration */)) { + location = location.parent; + } + break; + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + case 352 /* JSDocImportTag */: + const root = getJSDocRoot(location); + if (root) { + location = root.parent; + } + break; + case 170 /* Parameter */: + if (lastLocation && (lastLocation === location.initializer || lastLocation === location.name && isBindingPattern(lastLocation))) { + if (!associatedDeclarationForContainingInitializerOrBindingName) { + associatedDeclarationForContainingInitializerOrBindingName = location; + } + } + break; + case 209 /* BindingElement */: + if (lastLocation && (lastLocation === location.initializer || lastLocation === location.name && isBindingPattern(lastLocation))) { + if (isPartOfParameterDeclaration(location) && !associatedDeclarationForContainingInitializerOrBindingName) { + associatedDeclarationForContainingInitializerOrBindingName = location; + } + } + break; + case 196 /* InferType */: + if (meaning & 262144 /* TypeParameter */) { + const parameterName = location.typeParameter.name; + if (parameterName && name === parameterName.escapedText) { + result = location.typeParameter.symbol; + break loop; + } + } + break; + case 282 /* ExportSpecifier */: + if (lastLocation && lastLocation === location.propertyName && location.parent.parent.moduleSpecifier) { + location = location.parent.parent.parent; + } + break; + } + if (isSelfReferenceLocation(location, lastLocation)) { + lastSelfReferenceLocation = location; + } + lastLocation = location; + location = isJSDocTemplateTag(location) ? getEffectiveContainerForJSDocTemplateTag(location) || location.parent : isJSDocParameterTag(location) || isJSDocReturnTag(location) ? getHostSignatureFromJSDoc(location) || location.parent : location.parent; + } + if (isUse && result && (!lastSelfReferenceLocation || result !== lastSelfReferenceLocation.symbol)) { + result.isReferenced |= meaning; + } + if (!result) { + if (lastLocation) { + Debug.assertNode(lastLocation, isSourceFile); + if (lastLocation.commonJsModuleIndicator && name === "exports" && meaning & lastLocation.symbol.flags) { + return lastLocation.symbol; + } + } + if (!excludeGlobals) { + result = lookup(globals, name, meaning); + } + } + if (!result) { + if (originalLocation && isInJSFile(originalLocation) && originalLocation.parent) { + if (isRequireCall( + originalLocation.parent, + /*requireStringLiteralLikeArgument*/ + false + )) { + return requireSymbol; + } + } + } + if (nameNotFoundMessage) { + if (propertyWithInvalidInitializer && onPropertyWithInvalidInitializer(originalLocation, name, propertyWithInvalidInitializer, result)) { + return void 0; + } + if (!result) { + onFailedToResolveSymbol(originalLocation, nameArg, meaning, nameNotFoundMessage); + } else { + onSuccessfullyResolvedSymbol(originalLocation, result, meaning, lastLocation, associatedDeclarationForContainingInitializerOrBindingName, withinDeferredContext); + } + } + return result; + } + function useOuterVariableScopeInParameter(result, location, lastLocation) { + const target = getEmitScriptTarget(compilerOptions); + const functionLocation = location; + if (isParameter(lastLocation) && functionLocation.body && result.valueDeclaration && result.valueDeclaration.pos >= functionLocation.body.pos && result.valueDeclaration.end <= functionLocation.body.end) { + if (target >= 2 /* ES2015 */) { + let declarationRequiresScopeChange = getRequiresScopeChangeCache(functionLocation); + if (declarationRequiresScopeChange === void 0) { + declarationRequiresScopeChange = forEach(functionLocation.parameters, requiresScopeChange) || false; + setRequiresScopeChangeCache(functionLocation, declarationRequiresScopeChange); + } + return !declarationRequiresScopeChange; + } + } + return false; + function requiresScopeChange(node) { + return requiresScopeChangeWorker(node.name) || !!node.initializer && requiresScopeChangeWorker(node.initializer); + } + function requiresScopeChangeWorker(node) { + switch (node.kind) { + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 177 /* Constructor */: + return false; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 304 /* PropertyAssignment */: + return requiresScopeChangeWorker(node.name); + case 173 /* PropertyDeclaration */: + if (hasStaticModifier(node)) { + return !emitStandardClassFields; + } + return requiresScopeChangeWorker(node.name); + default: + if (isNullishCoalesce(node) || isOptionalChain(node)) { + return target < 7 /* ES2020 */; + } + if (isBindingElement(node) && node.dotDotDotToken && isObjectBindingPattern(node.parent)) { + return target < 4 /* ES2017 */; + } + if (isTypeNode(node)) return false; + return forEachChild(node, requiresScopeChangeWorker) || false; + } + } + } + function getIsDeferredContext(location, lastLocation) { + if (location.kind !== 220 /* ArrowFunction */ && location.kind !== 219 /* FunctionExpression */) { + return isTypeQueryNode(location) || (isFunctionLikeDeclaration(location) || location.kind === 173 /* PropertyDeclaration */ && !isStatic(location)) && (!lastLocation || lastLocation !== location.name); + } + if (lastLocation && lastLocation === location.name) { + return false; + } + if (location.asteriskToken || hasSyntacticModifier(location, 1024 /* Async */)) { + return true; + } + return !getImmediatelyInvokedFunctionExpression(location); + } + function isSelfReferenceLocation(node, lastLocation) { + switch (node.kind) { + case 170 /* Parameter */: + return !!lastLocation && lastLocation === node.name; + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 268 /* ModuleDeclaration */: + return true; + default: + return false; + } + } + function isTypeParameterSymbolDeclaredInContainer(symbol, container) { + if (symbol.declarations) { + for (const decl of symbol.declarations) { + if (decl.kind === 169 /* TypeParameter */) { + const parent2 = isJSDocTemplateTag(decl.parent) ? getJSDocHost(decl.parent) : decl.parent; + if (parent2 === container) { + return !(isJSDocTemplateTag(decl.parent) && find(decl.parent.parent.tags, isJSDocTypeAlias)); + } + } + } + } + return false; + } +} +function isPrimitiveLiteralValue(node, includeBigInt = true) { + Debug.type(node); + switch (node.kind) { + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 9 /* NumericLiteral */: + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + return true; + case 10 /* BigIntLiteral */: + return includeBigInt; + case 225 /* PrefixUnaryExpression */: + if (node.operator === 41 /* MinusToken */) { + return isNumericLiteral(node.operand) || includeBigInt && isBigIntLiteral(node.operand); + } + if (node.operator === 40 /* PlusToken */) { + return isNumericLiteral(node.operand); + } + return false; + default: + assertType(node); + return false; + } +} +function unwrapParenthesizedExpression(o) { + while (o.kind === 218 /* ParenthesizedExpression */) { + o = o.expression; + } + return o; +} +function hasInferredType(node) { + Debug.type(node); + switch (node.kind) { + case 170 /* Parameter */: + case 172 /* PropertySignature */: + case 173 /* PropertyDeclaration */: + case 209 /* BindingElement */: + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + case 227 /* BinaryExpression */: + case 261 /* VariableDeclaration */: + case 278 /* ExportAssignment */: + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 342 /* JSDocParameterTag */: + case 349 /* JSDocPropertyTag */: + return true; + default: + assertType(node); + return false; + } +} +function isSideEffectImport(node) { + const ancestor = findAncestor(node, isImportDeclaration); + return !!ancestor && !ancestor.importClause; +} +var unprefixedNodeCoreModulesList = [ + "assert", + "assert/strict", + "async_hooks", + "buffer", + "child_process", + "cluster", + "console", + "constants", + "crypto", + "dgram", + "diagnostics_channel", + "dns", + "dns/promises", + "domain", + "events", + "fs", + "fs/promises", + "http", + "http2", + "https", + "inspector", + "inspector/promises", + "module", + "net", + "os", + "path", + "path/posix", + "path/win32", + "perf_hooks", + "process", + "punycode", + "querystring", + "readline", + "readline/promises", + "repl", + "stream", + "stream/consumers", + "stream/promises", + "stream/web", + "string_decoder", + "sys", + "test/mock_loader", + "timers", + "timers/promises", + "tls", + "trace_events", + "tty", + "url", + "util", + "util/types", + "v8", + "vm", + "wasi", + "worker_threads", + "zlib" +]; +var unprefixedNodeCoreModules = new Set(unprefixedNodeCoreModulesList); +var exclusivelyPrefixedNodeCoreModules = /* @__PURE__ */ new Set([ + "node:sea", + "node:sqlite", + "node:test", + "node:test/reporters" +]); +var nodeCoreModules = /* @__PURE__ */ new Set([ + ...unprefixedNodeCoreModulesList, + ...unprefixedNodeCoreModulesList.map((name) => `node:${name}`), + ...exclusivelyPrefixedNodeCoreModules +]); +function forEachDynamicImportOrRequireCall(file, includeTypeSpaceImports, requireStringLiteralLikeArgument, cb) { + const isJavaScriptFile = isInJSFile(file); + const r = /import|require/g; + while (r.exec(file.text) !== null) { + const node = getNodeAtPosition( + file, + r.lastIndex, + /*includeJSDoc*/ + includeTypeSpaceImports + ); + if (isJavaScriptFile && isRequireCall(node, requireStringLiteralLikeArgument)) { + cb(node, node.arguments[0]); + } else if (isImportCall(node) && node.arguments.length >= 1 && (!requireStringLiteralLikeArgument || isStringLiteralLike(node.arguments[0]))) { + cb(node, node.arguments[0]); + } else if (includeTypeSpaceImports && isLiteralImportTypeNode(node)) { + cb(node, node.argument.literal); + } else if (includeTypeSpaceImports && isJSDocImportTag(node)) { + const moduleNameExpr = getExternalModuleName(node); + if (moduleNameExpr && isStringLiteral(moduleNameExpr) && moduleNameExpr.text) { + cb(node, moduleNameExpr); + } + } + } +} +function getNodeAtPosition(sourceFile, position, includeJSDoc) { + const isJavaScriptFile = isInJSFile(sourceFile); + let current = sourceFile; + const getContainingChild = (child) => { + if (child.pos <= position && (position < child.end || position === child.end && child.kind === 1 /* EndOfFileToken */)) { + return child; + } + }; + while (true) { + const child = isJavaScriptFile && includeJSDoc && hasJSDocNodes(current) && forEach(current.jsDoc, getContainingChild) || forEachChild(current, getContainingChild); + if (!child || isMetaProperty(child)) { + return current; + } + current = child; + } +} +function isNewScopeNode(node) { + return isFunctionLike(node) || isJSDocSignature(node) || isMappedTypeNode(node); +} +function getLibNameFromLibReference(libReference) { + return toFileNameLowerCase(libReference.fileName); +} +function getLibFileNameFromLibReference(libReference) { + const libName = getLibNameFromLibReference(libReference); + return libMap.get(libName); +} +function forEachResolvedProjectReference(resolvedProjectReferences, cb) { + return forEachProjectReference( + /*projectReferences*/ + void 0, + resolvedProjectReferences, + (resolvedRef) => resolvedRef && cb(resolvedRef) + ); +} +function forEachProjectReference(projectReferences, resolvedProjectReferences, cbResolvedRef, cbRef) { + let seenResolvedRefs; + return worker( + projectReferences, + resolvedProjectReferences, + /*parent*/ + void 0 + ); + function worker(projectReferences2, resolvedProjectReferences2, parent2) { + if (cbRef) { + const result = cbRef(projectReferences2, parent2); + if (result) return result; + } + let skipChildren; + return forEach( + resolvedProjectReferences2, + (resolvedRef, index) => { + if (resolvedRef && (seenResolvedRefs == null ? void 0 : seenResolvedRefs.has(resolvedRef.sourceFile.path))) { + (skipChildren ?? (skipChildren = /* @__PURE__ */ new Set())).add(resolvedRef); + return void 0; + } + const result = cbResolvedRef(resolvedRef, parent2, index); + if (result || !resolvedRef) return result; + (seenResolvedRefs || (seenResolvedRefs = /* @__PURE__ */ new Set())).add(resolvedRef.sourceFile.path); + } + ) || forEach( + resolvedProjectReferences2, + (resolvedRef) => resolvedRef && !(skipChildren == null ? void 0 : skipChildren.has(resolvedRef)) ? worker(resolvedRef.commandLine.projectReferences, resolvedRef.references, resolvedRef) : void 0 + ); + } +} +function getOptionsSyntaxByArrayElementValue(optionsObject, name, value) { + return optionsObject && getPropertyArrayElementValue(optionsObject, name, value); +} +function getPropertyArrayElementValue(objectLiteral, propKey, elementValue) { + return forEachPropertyAssignment(objectLiteral, propKey, (property) => isArrayLiteralExpression(property.initializer) ? find(property.initializer.elements, (element) => isStringLiteral(element) && element.text === elementValue) : void 0); +} +function getOptionsSyntaxByValue(optionsObject, name, value) { + return forEachOptionsSyntaxByName(optionsObject, name, (property) => isStringLiteral(property.initializer) && property.initializer.text === value ? property.initializer : void 0); +} +function forEachOptionsSyntaxByName(optionsObject, name, callback) { + return forEachPropertyAssignment(optionsObject, name, callback); +} +function getSynthesizedDeepClone(node, includeTrivia = true) { + const clone2 = node && getSynthesizedDeepCloneWorker(node); + if (clone2 && !includeTrivia) suppressLeadingAndTrailingTrivia(clone2); + return setParentRecursive( + clone2, + /*incremental*/ + false + ); +} +function getSynthesizedDeepCloneWithReplacements(node, includeTrivia, replaceNode) { + let clone2 = replaceNode(node); + if (clone2) { + setOriginalNode(clone2, node); + } else { + clone2 = getSynthesizedDeepCloneWorker(node, replaceNode); + } + if (clone2 && !includeTrivia) suppressLeadingAndTrailingTrivia(clone2); + return clone2; +} +function getSynthesizedDeepCloneWorker(node, replaceNode) { + const nodeClone = replaceNode ? (n) => getSynthesizedDeepCloneWithReplacements( + n, + /*includeTrivia*/ + true, + replaceNode + ) : getSynthesizedDeepClone; + const nodesClone = replaceNode ? (ns) => ns && getSynthesizedDeepClonesWithReplacements( + ns, + /*includeTrivia*/ + true, + replaceNode + ) : (ns) => ns && getSynthesizedDeepClones(ns); + const visited = visitEachChild( + node, + nodeClone, + /*context*/ + void 0, + nodesClone, + nodeClone + ); + if (visited === node) { + const clone2 = isStringLiteral(node) ? setOriginalNode(factory.createStringLiteralFromNode(node), node) : isNumericLiteral(node) ? setOriginalNode(factory.createNumericLiteral(node.text, node.numericLiteralFlags), node) : factory.cloneNode(node); + return setTextRange(clone2, node); + } + visited.parent = void 0; + return visited; +} +function getSynthesizedDeepClones(nodes, includeTrivia = true) { + if (nodes) { + const cloned = factory.createNodeArray(nodes.map((n) => getSynthesizedDeepClone(n, includeTrivia)), nodes.hasTrailingComma); + setTextRange(cloned, nodes); + return cloned; + } + return nodes; +} +function getSynthesizedDeepClonesWithReplacements(nodes, includeTrivia, replaceNode) { + return factory.createNodeArray(nodes.map((n) => getSynthesizedDeepCloneWithReplacements(n, includeTrivia, replaceNode)), nodes.hasTrailingComma); +} +function suppressLeadingAndTrailingTrivia(node) { + suppressLeadingTrivia(node); + suppressTrailingTrivia(node); +} +function suppressLeadingTrivia(node) { + addEmitFlagsRecursively(node, 1024 /* NoLeadingComments */, getFirstChild); +} +function suppressTrailingTrivia(node) { + addEmitFlagsRecursively(node, 2048 /* NoTrailingComments */, getLastChild); +} +function addEmitFlagsRecursively(node, flag, getChild) { + addEmitFlags(node, flag); + const child = getChild(node); + if (child) addEmitFlagsRecursively(child, flag, getChild); +} +function getFirstChild(node) { + return forEachChild(node, (child) => child); +} + +// src/compiler/factory/baseNodeFactory.ts +function createBaseNodeFactory() { + let NodeConstructor2; + let TokenConstructor2; + let IdentifierConstructor2; + let PrivateIdentifierConstructor2; + let SourceFileConstructor2; + return { + createBaseSourceFileNode, + createBaseIdentifierNode, + createBasePrivateIdentifierNode, + createBaseTokenNode, + createBaseNode + }; + function createBaseSourceFileNode(kind) { + return new (SourceFileConstructor2 || (SourceFileConstructor2 = objectAllocator.getSourceFileConstructor()))( + kind, + /*pos*/ + -1, + /*end*/ + -1 + ); + } + function createBaseIdentifierNode(kind) { + return new (IdentifierConstructor2 || (IdentifierConstructor2 = objectAllocator.getIdentifierConstructor()))( + kind, + /*pos*/ + -1, + /*end*/ + -1 + ); + } + function createBasePrivateIdentifierNode(kind) { + return new (PrivateIdentifierConstructor2 || (PrivateIdentifierConstructor2 = objectAllocator.getPrivateIdentifierConstructor()))( + kind, + /*pos*/ + -1, + /*end*/ + -1 + ); + } + function createBaseTokenNode(kind) { + return new (TokenConstructor2 || (TokenConstructor2 = objectAllocator.getTokenConstructor()))( + kind, + /*pos*/ + -1, + /*end*/ + -1 + ); + } + function createBaseNode(kind) { + return new (NodeConstructor2 || (NodeConstructor2 = objectAllocator.getNodeConstructor()))( + kind, + /*pos*/ + -1, + /*end*/ + -1 + ); + } +} + +// src/compiler/factory/parenthesizerRules.ts +function createParenthesizerRules(factory2) { + let binaryLeftOperandParenthesizerCache; + let binaryRightOperandParenthesizerCache; + return { + getParenthesizeLeftSideOfBinaryForOperator, + getParenthesizeRightSideOfBinaryForOperator, + parenthesizeLeftSideOfBinary, + parenthesizeRightSideOfBinary, + parenthesizeExpressionOfComputedPropertyName, + parenthesizeConditionOfConditionalExpression, + parenthesizeBranchOfConditionalExpression, + parenthesizeExpressionOfExportDefault, + parenthesizeExpressionOfNew, + parenthesizeLeftSideOfAccess, + parenthesizeOperandOfPostfixUnary, + parenthesizeOperandOfPrefixUnary, + parenthesizeExpressionsOfCommaDelimitedList, + parenthesizeExpressionForDisallowedComma, + parenthesizeExpressionOfExpressionStatement, + parenthesizeConciseBodyOfArrowFunction, + parenthesizeCheckTypeOfConditionalType, + parenthesizeExtendsTypeOfConditionalType, + parenthesizeConstituentTypesOfUnionType, + parenthesizeConstituentTypeOfUnionType, + parenthesizeConstituentTypesOfIntersectionType, + parenthesizeConstituentTypeOfIntersectionType, + parenthesizeOperandOfTypeOperator, + parenthesizeOperandOfReadonlyTypeOperator, + parenthesizeNonArrayTypeOfPostfixType, + parenthesizeElementTypesOfTupleType, + parenthesizeElementTypeOfTupleType, + parenthesizeTypeOfOptionalType, + parenthesizeTypeArguments, + parenthesizeLeadingTypeArgument + }; + function getParenthesizeLeftSideOfBinaryForOperator(operatorKind) { + binaryLeftOperandParenthesizerCache || (binaryLeftOperandParenthesizerCache = /* @__PURE__ */ new Map()); + let parenthesizerRule = binaryLeftOperandParenthesizerCache.get(operatorKind); + if (!parenthesizerRule) { + parenthesizerRule = (node) => parenthesizeLeftSideOfBinary(operatorKind, node); + binaryLeftOperandParenthesizerCache.set(operatorKind, parenthesizerRule); + } + return parenthesizerRule; + } + function getParenthesizeRightSideOfBinaryForOperator(operatorKind) { + binaryRightOperandParenthesizerCache || (binaryRightOperandParenthesizerCache = /* @__PURE__ */ new Map()); + let parenthesizerRule = binaryRightOperandParenthesizerCache.get(operatorKind); + if (!parenthesizerRule) { + parenthesizerRule = (node) => parenthesizeRightSideOfBinary( + operatorKind, + /*leftSide*/ + void 0, + node + ); + binaryRightOperandParenthesizerCache.set(operatorKind, parenthesizerRule); + } + return parenthesizerRule; + } + function mixingBinaryOperatorsRequiresParentheses(a, b) { + if (a === 61 /* QuestionQuestionToken */) { + return b === 56 /* AmpersandAmpersandToken */ || b === 57 /* BarBarToken */; + } + if (b === 61 /* QuestionQuestionToken */) { + return a === 56 /* AmpersandAmpersandToken */ || a === 57 /* BarBarToken */; + } + return false; + } + function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { + const emittedOperand = skipPartiallyEmittedExpressions(operand); + if (isBinaryExpression(emittedOperand) && mixingBinaryOperatorsRequiresParentheses(binaryOperator, emittedOperand.operatorToken.kind)) { + return true; + } + const binaryOperatorPrecedence = getOperatorPrecedence(227 /* BinaryExpression */, binaryOperator); + const binaryOperatorAssociativity = getOperatorAssociativity(227 /* BinaryExpression */, binaryOperator); + if (!isLeftSideOfBinary && operand.kind === 220 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) { + return true; + } + const operandPrecedence = getExpressionPrecedence(emittedOperand); + switch (compareValues(operandPrecedence, binaryOperatorPrecedence)) { + case -1 /* LessThan */: + if (!isLeftSideOfBinary && binaryOperatorAssociativity === 1 /* Right */ && operand.kind === 230 /* YieldExpression */) { + return false; + } + return true; + case 1 /* GreaterThan */: + return false; + case 0 /* EqualTo */: + if (isLeftSideOfBinary) { + return binaryOperatorAssociativity === 1 /* Right */; + } else { + if (isBinaryExpression(emittedOperand) && emittedOperand.operatorToken.kind === binaryOperator) { + if (operatorHasAssociativeProperty(binaryOperator)) { + return false; + } + if (binaryOperator === 40 /* PlusToken */) { + const leftKind = leftOperand ? getLiteralKindOfBinaryPlusOperand(leftOperand) : 0 /* Unknown */; + if (isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(emittedOperand)) { + return false; + } + } + } + const operandAssociativity = getExpressionAssociativity(emittedOperand); + return operandAssociativity === 0 /* Left */; + } + } + } + function operatorHasAssociativeProperty(binaryOperator) { + return binaryOperator === 42 /* AsteriskToken */ || binaryOperator === 52 /* BarToken */ || binaryOperator === 51 /* AmpersandToken */ || binaryOperator === 53 /* CaretToken */ || binaryOperator === 28 /* CommaToken */; + } + function getLiteralKindOfBinaryPlusOperand(node) { + node = skipPartiallyEmittedExpressions(node); + if (isLiteralKind(node.kind)) { + return node.kind; + } + if (node.kind === 227 /* BinaryExpression */ && node.operatorToken.kind === 40 /* PlusToken */) { + if (node.cachedLiteralKind !== void 0) { + return node.cachedLiteralKind; + } + const leftKind = getLiteralKindOfBinaryPlusOperand(node.left); + const literalKind = isLiteralKind(leftKind) && leftKind === getLiteralKindOfBinaryPlusOperand(node.right) ? leftKind : 0 /* Unknown */; + node.cachedLiteralKind = literalKind; + return literalKind; + } + return 0 /* Unknown */; + } + function parenthesizeBinaryOperand(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { + const skipped = skipPartiallyEmittedExpressions(operand); + if (skipped.kind === 218 /* ParenthesizedExpression */) { + return operand; + } + return binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) ? factory2.createParenthesizedExpression(operand) : operand; + } + function parenthesizeLeftSideOfBinary(binaryOperator, leftSide) { + return parenthesizeBinaryOperand( + binaryOperator, + leftSide, + /*isLeftSideOfBinary*/ + true + ); + } + function parenthesizeRightSideOfBinary(binaryOperator, leftSide, rightSide) { + return parenthesizeBinaryOperand( + binaryOperator, + rightSide, + /*isLeftSideOfBinary*/ + false, + leftSide + ); + } + function parenthesizeExpressionOfComputedPropertyName(expression) { + return isCommaSequence(expression) ? factory2.createParenthesizedExpression(expression) : expression; + } + function parenthesizeConditionOfConditionalExpression(condition) { + const conditionalPrecedence = getOperatorPrecedence(228 /* ConditionalExpression */, 58 /* QuestionToken */); + const emittedCondition = skipPartiallyEmittedExpressions(condition); + const conditionPrecedence = getExpressionPrecedence(emittedCondition); + if (compareValues(conditionPrecedence, conditionalPrecedence) !== 1 /* GreaterThan */) { + return factory2.createParenthesizedExpression(condition); + } + return condition; + } + function parenthesizeBranchOfConditionalExpression(branch) { + const emittedExpression = skipPartiallyEmittedExpressions(branch); + return isCommaSequence(emittedExpression) ? factory2.createParenthesizedExpression(branch) : branch; + } + function parenthesizeExpressionOfExportDefault(expression) { + const check = skipPartiallyEmittedExpressions(expression); + let needsParens = isCommaSequence(check); + if (!needsParens) { + switch (getLeftmostExpression( + check, + /*stopAtCallExpressions*/ + false + ).kind) { + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + needsParens = true; + } + } + return needsParens ? factory2.createParenthesizedExpression(expression) : expression; + } + function parenthesizeExpressionOfNew(expression) { + const leftmostExpr = getLeftmostExpression( + expression, + /*stopAtCallExpressions*/ + true + ); + switch (leftmostExpr.kind) { + case 214 /* CallExpression */: + return factory2.createParenthesizedExpression(expression); + case 215 /* NewExpression */: + return !leftmostExpr.arguments ? factory2.createParenthesizedExpression(expression) : expression; + } + return parenthesizeLeftSideOfAccess(expression); + } + function parenthesizeLeftSideOfAccess(expression, optionalChain) { + const emittedExpression = skipPartiallyEmittedExpressions(expression); + if (isLeftHandSideExpression(emittedExpression) && (emittedExpression.kind !== 215 /* NewExpression */ || emittedExpression.arguments) && (optionalChain || !isOptionalChain(emittedExpression))) { + return expression; + } + return setTextRange(factory2.createParenthesizedExpression(expression), expression); + } + function parenthesizeOperandOfPostfixUnary(operand) { + return isLeftHandSideExpression(operand) ? operand : setTextRange(factory2.createParenthesizedExpression(operand), operand); + } + function parenthesizeOperandOfPrefixUnary(operand) { + return isUnaryExpression(operand) ? operand : setTextRange(factory2.createParenthesizedExpression(operand), operand); + } + function parenthesizeExpressionsOfCommaDelimitedList(elements) { + const result = sameMap(elements, parenthesizeExpressionForDisallowedComma); + return setTextRange(factory2.createNodeArray(result, elements.hasTrailingComma), elements); + } + function parenthesizeExpressionForDisallowedComma(expression) { + const emittedExpression = skipPartiallyEmittedExpressions(expression); + const expressionPrecedence = getExpressionPrecedence(emittedExpression); + const commaPrecedence = getOperatorPrecedence(227 /* BinaryExpression */, 28 /* CommaToken */); + return expressionPrecedence > commaPrecedence ? expression : setTextRange(factory2.createParenthesizedExpression(expression), expression); + } + function parenthesizeExpressionOfExpressionStatement(expression) { + const emittedExpression = skipPartiallyEmittedExpressions(expression); + if (isCallExpression(emittedExpression)) { + const callee = emittedExpression.expression; + const kind = skipPartiallyEmittedExpressions(callee).kind; + if (kind === 219 /* FunctionExpression */ || kind === 220 /* ArrowFunction */) { + const updated = factory2.updateCallExpression( + emittedExpression, + setTextRange(factory2.createParenthesizedExpression(callee), callee), + emittedExpression.typeArguments, + emittedExpression.arguments + ); + return factory2.restoreOuterExpressions(expression, updated, 8 /* PartiallyEmittedExpressions */); + } + } + const leftmostExpressionKind = getLeftmostExpression( + emittedExpression, + /*stopAtCallExpressions*/ + false + ).kind; + if (leftmostExpressionKind === 211 /* ObjectLiteralExpression */ || leftmostExpressionKind === 219 /* FunctionExpression */) { + return setTextRange(factory2.createParenthesizedExpression(expression), expression); + } + return expression; + } + function parenthesizeConciseBodyOfArrowFunction(body) { + if (!isBlock(body) && (isCommaSequence(body) || getLeftmostExpression( + body, + /*stopAtCallExpressions*/ + false + ).kind === 211 /* ObjectLiteralExpression */)) { + return setTextRange(factory2.createParenthesizedExpression(body), body); + } + return body; + } + function parenthesizeCheckTypeOfConditionalType(checkType) { + switch (checkType.kind) { + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 195 /* ConditionalType */: + return factory2.createParenthesizedType(checkType); + } + return checkType; + } + function parenthesizeExtendsTypeOfConditionalType(extendsType) { + switch (extendsType.kind) { + case 195 /* ConditionalType */: + return factory2.createParenthesizedType(extendsType); + } + return extendsType; + } + function parenthesizeConstituentTypeOfUnionType(type) { + switch (type.kind) { + case 193 /* UnionType */: + // Not strictly necessary, but a union containing a union should have been flattened + case 194 /* IntersectionType */: + return factory2.createParenthesizedType(type); + } + return parenthesizeCheckTypeOfConditionalType(type); + } + function parenthesizeConstituentTypesOfUnionType(members) { + return factory2.createNodeArray(sameMap(members, parenthesizeConstituentTypeOfUnionType)); + } + function parenthesizeConstituentTypeOfIntersectionType(type) { + switch (type.kind) { + case 193 /* UnionType */: + case 194 /* IntersectionType */: + return factory2.createParenthesizedType(type); + } + return parenthesizeConstituentTypeOfUnionType(type); + } + function parenthesizeConstituentTypesOfIntersectionType(members) { + return factory2.createNodeArray(sameMap(members, parenthesizeConstituentTypeOfIntersectionType)); + } + function parenthesizeOperandOfTypeOperator(type) { + switch (type.kind) { + case 194 /* IntersectionType */: + return factory2.createParenthesizedType(type); + } + return parenthesizeConstituentTypeOfIntersectionType(type); + } + function parenthesizeOperandOfReadonlyTypeOperator(type) { + switch (type.kind) { + case 199 /* TypeOperator */: + return factory2.createParenthesizedType(type); + } + return parenthesizeOperandOfTypeOperator(type); + } + function parenthesizeNonArrayTypeOfPostfixType(type) { + switch (type.kind) { + case 196 /* InferType */: + case 199 /* TypeOperator */: + case 187 /* TypeQuery */: + return factory2.createParenthesizedType(type); + } + return parenthesizeOperandOfTypeOperator(type); + } + function parenthesizeElementTypesOfTupleType(types) { + return factory2.createNodeArray(sameMap(types, parenthesizeElementTypeOfTupleType)); + } + function parenthesizeElementTypeOfTupleType(type) { + if (hasJSDocPostfixQuestion(type)) return factory2.createParenthesizedType(type); + return type; + } + function hasJSDocPostfixQuestion(type) { + if (isJSDocNullableType(type)) return type.postfix; + if (isNamedTupleMember(type)) return hasJSDocPostfixQuestion(type.type); + if (isFunctionTypeNode(type) || isConstructorTypeNode(type) || isTypeOperatorNode(type)) return hasJSDocPostfixQuestion(type.type); + if (isConditionalTypeNode(type)) return hasJSDocPostfixQuestion(type.falseType); + if (isUnionTypeNode(type)) return hasJSDocPostfixQuestion(last(type.types)); + if (isIntersectionTypeNode(type)) return hasJSDocPostfixQuestion(last(type.types)); + if (isInferTypeNode(type)) return !!type.typeParameter.constraint && hasJSDocPostfixQuestion(type.typeParameter.constraint); + return false; + } + function parenthesizeTypeOfOptionalType(type) { + if (hasJSDocPostfixQuestion(type)) return factory2.createParenthesizedType(type); + return parenthesizeNonArrayTypeOfPostfixType(type); + } + function parenthesizeLeadingTypeArgument(node) { + return isFunctionOrConstructorTypeNode(node) && node.typeParameters ? factory2.createParenthesizedType(node) : node; + } + function parenthesizeOrdinalTypeArgument(node, i) { + return i === 0 ? parenthesizeLeadingTypeArgument(node) : node; + } + function parenthesizeTypeArguments(typeArguments) { + if (some(typeArguments)) { + return factory2.createNodeArray(sameMap(typeArguments, parenthesizeOrdinalTypeArgument)); + } + } +} +var nullParenthesizerRules = { + getParenthesizeLeftSideOfBinaryForOperator: (_) => identity, + getParenthesizeRightSideOfBinaryForOperator: (_) => identity, + parenthesizeLeftSideOfBinary: (_binaryOperator, leftSide) => leftSide, + parenthesizeRightSideOfBinary: (_binaryOperator, _leftSide, rightSide) => rightSide, + parenthesizeExpressionOfComputedPropertyName: identity, + parenthesizeConditionOfConditionalExpression: identity, + parenthesizeBranchOfConditionalExpression: identity, + parenthesizeExpressionOfExportDefault: identity, + parenthesizeExpressionOfNew: (expression) => cast(expression, isLeftHandSideExpression), + parenthesizeLeftSideOfAccess: (expression) => cast(expression, isLeftHandSideExpression), + parenthesizeOperandOfPostfixUnary: (operand) => cast(operand, isLeftHandSideExpression), + parenthesizeOperandOfPrefixUnary: (operand) => cast(operand, isUnaryExpression), + parenthesizeExpressionsOfCommaDelimitedList: (nodes) => cast(nodes, isNodeArray), + parenthesizeExpressionForDisallowedComma: identity, + parenthesizeExpressionOfExpressionStatement: identity, + parenthesizeConciseBodyOfArrowFunction: identity, + parenthesizeCheckTypeOfConditionalType: identity, + parenthesizeExtendsTypeOfConditionalType: identity, + parenthesizeConstituentTypesOfUnionType: (nodes) => cast(nodes, isNodeArray), + parenthesizeConstituentTypeOfUnionType: identity, + parenthesizeConstituentTypesOfIntersectionType: (nodes) => cast(nodes, isNodeArray), + parenthesizeConstituentTypeOfIntersectionType: identity, + parenthesizeOperandOfTypeOperator: identity, + parenthesizeOperandOfReadonlyTypeOperator: identity, + parenthesizeNonArrayTypeOfPostfixType: identity, + parenthesizeElementTypesOfTupleType: (nodes) => cast(nodes, isNodeArray), + parenthesizeElementTypeOfTupleType: identity, + parenthesizeTypeOfOptionalType: identity, + parenthesizeTypeArguments: (nodes) => nodes && cast(nodes, isNodeArray), + parenthesizeLeadingTypeArgument: identity +}; + +// src/compiler/factory/nodeConverters.ts +function createNodeConverters(factory2) { + return { + convertToFunctionBlock, + convertToFunctionExpression, + convertToClassExpression, + convertToArrayAssignmentElement, + convertToObjectAssignmentElement, + convertToAssignmentPattern, + convertToObjectAssignmentPattern, + convertToArrayAssignmentPattern, + convertToAssignmentElementTarget + }; + function convertToFunctionBlock(node, multiLine) { + if (isBlock(node)) return node; + const returnStatement = factory2.createReturnStatement(node); + setTextRange(returnStatement, node); + const body = factory2.createBlock([returnStatement], multiLine); + setTextRange(body, node); + return body; + } + function convertToFunctionExpression(node) { + var _a; + if (!node.body) return Debug.fail(`Cannot convert a FunctionDeclaration without a body`); + const updated = factory2.createFunctionExpression( + (_a = getModifiers(node)) == null ? void 0 : _a.filter((modifier) => !isExportModifier(modifier) && !isDefaultModifier(modifier)), + node.asteriskToken, + node.name, + node.typeParameters, + node.parameters, + node.type, + node.body + ); + setOriginalNode(updated, node); + setTextRange(updated, node); + if (getStartsOnNewLine(node)) { + setStartsOnNewLine( + updated, + /*newLine*/ + true + ); + } + return updated; + } + function convertToClassExpression(node) { + var _a; + const updated = factory2.createClassExpression( + (_a = node.modifiers) == null ? void 0 : _a.filter((modifier) => !isExportModifier(modifier) && !isDefaultModifier(modifier)), + node.name, + node.typeParameters, + node.heritageClauses, + node.members + ); + setOriginalNode(updated, node); + setTextRange(updated, node); + if (getStartsOnNewLine(node)) { + setStartsOnNewLine( + updated, + /*newLine*/ + true + ); + } + return updated; + } + function convertToArrayAssignmentElement(element) { + if (isBindingElement(element)) { + if (element.dotDotDotToken) { + Debug.assertNode(element.name, isIdentifier); + return setOriginalNode(setTextRange(factory2.createSpreadElement(element.name), element), element); + } + const expression = convertToAssignmentElementTarget(element.name); + return element.initializer ? setOriginalNode( + setTextRange( + factory2.createAssignment(expression, element.initializer), + element + ), + element + ) : expression; + } + return cast(element, isExpression); + } + function convertToObjectAssignmentElement(element) { + if (isBindingElement(element)) { + if (element.dotDotDotToken) { + Debug.assertNode(element.name, isIdentifier); + return setOriginalNode(setTextRange(factory2.createSpreadAssignment(element.name), element), element); + } + if (element.propertyName) { + const expression = convertToAssignmentElementTarget(element.name); + return setOriginalNode(setTextRange(factory2.createPropertyAssignment(element.propertyName, element.initializer ? factory2.createAssignment(expression, element.initializer) : expression), element), element); + } + Debug.assertNode(element.name, isIdentifier); + return setOriginalNode(setTextRange(factory2.createShorthandPropertyAssignment(element.name, element.initializer), element), element); + } + return cast(element, isObjectLiteralElementLike); + } + function convertToAssignmentPattern(node) { + switch (node.kind) { + case 208 /* ArrayBindingPattern */: + case 210 /* ArrayLiteralExpression */: + return convertToArrayAssignmentPattern(node); + case 207 /* ObjectBindingPattern */: + case 211 /* ObjectLiteralExpression */: + return convertToObjectAssignmentPattern(node); + } + } + function convertToObjectAssignmentPattern(node) { + if (isObjectBindingPattern(node)) { + return setOriginalNode( + setTextRange( + factory2.createObjectLiteralExpression(map(node.elements, convertToObjectAssignmentElement)), + node + ), + node + ); + } + return cast(node, isObjectLiteralExpression); + } + function convertToArrayAssignmentPattern(node) { + if (isArrayBindingPattern(node)) { + return setOriginalNode( + setTextRange( + factory2.createArrayLiteralExpression(map(node.elements, convertToArrayAssignmentElement)), + node + ), + node + ); + } + return cast(node, isArrayLiteralExpression); + } + function convertToAssignmentElementTarget(node) { + if (isBindingPattern(node)) { + return convertToAssignmentPattern(node); + } + return cast(node, isExpression); + } +} +var nullNodeConverters = { + convertToFunctionBlock: notImplemented, + convertToFunctionExpression: notImplemented, + convertToClassExpression: notImplemented, + convertToArrayAssignmentElement: notImplemented, + convertToObjectAssignmentElement: notImplemented, + convertToAssignmentPattern: notImplemented, + convertToObjectAssignmentPattern: notImplemented, + convertToArrayAssignmentPattern: notImplemented, + convertToAssignmentElementTarget: notImplemented +}; + +// src/compiler/factory/nodeFactory.ts +var nextAutoGenerateId = 0; +var NodeFactoryFlags = /* @__PURE__ */ ((NodeFactoryFlags2) => { + NodeFactoryFlags2[NodeFactoryFlags2["None"] = 0] = "None"; + NodeFactoryFlags2[NodeFactoryFlags2["NoParenthesizerRules"] = 1] = "NoParenthesizerRules"; + NodeFactoryFlags2[NodeFactoryFlags2["NoNodeConverters"] = 2] = "NoNodeConverters"; + NodeFactoryFlags2[NodeFactoryFlags2["NoIndentationOnFreshPropertyAccess"] = 4] = "NoIndentationOnFreshPropertyAccess"; + NodeFactoryFlags2[NodeFactoryFlags2["NoOriginalNode"] = 8] = "NoOriginalNode"; + return NodeFactoryFlags2; +})(NodeFactoryFlags || {}); +var nodeFactoryPatchers = []; +function addNodeFactoryPatcher(fn) { + nodeFactoryPatchers.push(fn); +} +function createNodeFactory(flags, baseFactory2) { + const setOriginal = flags & 8 /* NoOriginalNode */ ? identity : setOriginalNode; + const parenthesizerRules = memoize(() => flags & 1 /* NoParenthesizerRules */ ? nullParenthesizerRules : createParenthesizerRules(factory2)); + const converters = memoize(() => flags & 2 /* NoNodeConverters */ ? nullNodeConverters : createNodeConverters(factory2)); + const getBinaryCreateFunction = memoizeOne((operator) => (left, right) => createBinaryExpression(left, operator, right)); + const getPrefixUnaryCreateFunction = memoizeOne((operator) => (operand) => createPrefixUnaryExpression(operator, operand)); + const getPostfixUnaryCreateFunction = memoizeOne((operator) => (operand) => createPostfixUnaryExpression(operand, operator)); + const getJSDocPrimaryTypeCreateFunction = memoizeOne((kind) => () => createJSDocPrimaryTypeWorker(kind)); + const getJSDocUnaryTypeCreateFunction = memoizeOne((kind) => (type) => createJSDocUnaryTypeWorker(kind, type)); + const getJSDocUnaryTypeUpdateFunction = memoizeOne((kind) => (node, type) => updateJSDocUnaryTypeWorker(kind, node, type)); + const getJSDocPrePostfixUnaryTypeCreateFunction = memoizeOne((kind) => (type, postfix) => createJSDocPrePostfixUnaryTypeWorker(kind, type, postfix)); + const getJSDocPrePostfixUnaryTypeUpdateFunction = memoizeOne((kind) => (node, type) => updateJSDocPrePostfixUnaryTypeWorker(kind, node, type)); + const getJSDocSimpleTagCreateFunction = memoizeOne((kind) => (tagName, comment) => createJSDocSimpleTagWorker(kind, tagName, comment)); + const getJSDocSimpleTagUpdateFunction = memoizeOne((kind) => (node, tagName, comment) => updateJSDocSimpleTagWorker(kind, node, tagName, comment)); + const getJSDocTypeLikeTagCreateFunction = memoizeOne((kind) => (tagName, typeExpression, comment) => createJSDocTypeLikeTagWorker(kind, tagName, typeExpression, comment)); + const getJSDocTypeLikeTagUpdateFunction = memoizeOne((kind) => (node, tagName, typeExpression, comment) => updateJSDocTypeLikeTagWorker(kind, node, tagName, typeExpression, comment)); + const factory2 = { + get parenthesizer() { + return parenthesizerRules(); + }, + get converters() { + return converters(); + }, + baseFactory: baseFactory2, + flags, + createNodeArray, + createNumericLiteral, + createBigIntLiteral, + createStringLiteral, + createStringLiteralFromNode, + createRegularExpressionLiteral, + createLiteralLikeNode, + createIdentifier, + createTempVariable, + createLoopVariable, + createUniqueName, + getGeneratedNameForNode, + createPrivateIdentifier, + createUniquePrivateName, + getGeneratedPrivateNameForNode, + createToken, + createSuper, + createThis, + createNull, + createTrue, + createFalse, + createModifier, + createModifiersFromModifierFlags, + createQualifiedName, + updateQualifiedName, + createComputedPropertyName, + updateComputedPropertyName, + createTypeParameterDeclaration, + updateTypeParameterDeclaration, + createParameterDeclaration, + updateParameterDeclaration, + createDecorator, + updateDecorator, + createPropertySignature, + updatePropertySignature, + createPropertyDeclaration, + updatePropertyDeclaration: updatePropertyDeclaration2, + createMethodSignature, + updateMethodSignature, + createMethodDeclaration, + updateMethodDeclaration, + createConstructorDeclaration, + updateConstructorDeclaration, + createGetAccessorDeclaration, + updateGetAccessorDeclaration, + createSetAccessorDeclaration, + updateSetAccessorDeclaration, + createCallSignature, + updateCallSignature, + createConstructSignature, + updateConstructSignature, + createIndexSignature, + updateIndexSignature, + createClassStaticBlockDeclaration, + updateClassStaticBlockDeclaration, + createTemplateLiteralTypeSpan, + updateTemplateLiteralTypeSpan, + createKeywordTypeNode, + createTypePredicateNode, + updateTypePredicateNode, + createTypeReferenceNode, + updateTypeReferenceNode, + createFunctionTypeNode, + updateFunctionTypeNode, + createConstructorTypeNode, + updateConstructorTypeNode, + createTypeQueryNode, + updateTypeQueryNode, + createTypeLiteralNode, + updateTypeLiteralNode, + createArrayTypeNode, + updateArrayTypeNode, + createTupleTypeNode, + updateTupleTypeNode, + createNamedTupleMember, + updateNamedTupleMember, + createOptionalTypeNode, + updateOptionalTypeNode, + createRestTypeNode, + updateRestTypeNode, + createUnionTypeNode, + updateUnionTypeNode, + createIntersectionTypeNode, + updateIntersectionTypeNode, + createConditionalTypeNode, + updateConditionalTypeNode, + createInferTypeNode, + updateInferTypeNode, + createImportTypeNode, + updateImportTypeNode, + createParenthesizedType, + updateParenthesizedType, + createThisTypeNode, + createTypeOperatorNode, + updateTypeOperatorNode, + createIndexedAccessTypeNode, + updateIndexedAccessTypeNode, + createMappedTypeNode, + updateMappedTypeNode, + createLiteralTypeNode, + updateLiteralTypeNode, + createTemplateLiteralType, + updateTemplateLiteralType, + createObjectBindingPattern, + updateObjectBindingPattern, + createArrayBindingPattern, + updateArrayBindingPattern, + createBindingElement, + updateBindingElement, + createArrayLiteralExpression, + updateArrayLiteralExpression, + createObjectLiteralExpression, + updateObjectLiteralExpression, + createPropertyAccessExpression: flags & 4 /* NoIndentationOnFreshPropertyAccess */ ? (expression, name) => setEmitFlags(createPropertyAccessExpression(expression, name), 262144 /* NoIndentation */) : createPropertyAccessExpression, + updatePropertyAccessExpression, + createPropertyAccessChain: flags & 4 /* NoIndentationOnFreshPropertyAccess */ ? (expression, questionDotToken, name) => setEmitFlags(createPropertyAccessChain(expression, questionDotToken, name), 262144 /* NoIndentation */) : createPropertyAccessChain, + updatePropertyAccessChain, + createElementAccessExpression, + updateElementAccessExpression, + createElementAccessChain, + updateElementAccessChain, + createCallExpression, + updateCallExpression, + createCallChain, + updateCallChain, + createNewExpression, + updateNewExpression, + createTaggedTemplateExpression, + updateTaggedTemplateExpression, + createTypeAssertion, + updateTypeAssertion, + createParenthesizedExpression, + updateParenthesizedExpression, + createFunctionExpression, + updateFunctionExpression, + createArrowFunction, + updateArrowFunction, + createDeleteExpression, + updateDeleteExpression, + createTypeOfExpression, + updateTypeOfExpression, + createVoidExpression, + updateVoidExpression, + createAwaitExpression, + updateAwaitExpression, + createPrefixUnaryExpression, + updatePrefixUnaryExpression, + createPostfixUnaryExpression, + updatePostfixUnaryExpression, + createBinaryExpression, + updateBinaryExpression, + createConditionalExpression, + updateConditionalExpression, + createTemplateExpression, + updateTemplateExpression, + createTemplateHead, + createTemplateMiddle, + createTemplateTail, + createNoSubstitutionTemplateLiteral, + createTemplateLiteralLikeNode, + createYieldExpression, + updateYieldExpression, + createSpreadElement, + updateSpreadElement, + createClassExpression, + updateClassExpression, + createOmittedExpression, + createExpressionWithTypeArguments, + updateExpressionWithTypeArguments, + createAsExpression, + updateAsExpression, + createNonNullExpression, + updateNonNullExpression, + createSatisfiesExpression, + updateSatisfiesExpression, + createNonNullChain, + updateNonNullChain, + createMetaProperty, + updateMetaProperty, + createTemplateSpan, + updateTemplateSpan, + createSemicolonClassElement, + createBlock, + updateBlock, + createVariableStatement, + updateVariableStatement, + createEmptyStatement, + createExpressionStatement, + updateExpressionStatement, + createIfStatement, + updateIfStatement, + createDoStatement, + updateDoStatement, + createWhileStatement, + updateWhileStatement, + createForStatement, + updateForStatement, + createForInStatement, + updateForInStatement, + createForOfStatement, + updateForOfStatement, + createContinueStatement, + updateContinueStatement, + createBreakStatement, + updateBreakStatement, + createReturnStatement, + updateReturnStatement, + createWithStatement, + updateWithStatement, + createSwitchStatement, + updateSwitchStatement, + createLabeledStatement, + updateLabeledStatement, + createThrowStatement, + updateThrowStatement, + createTryStatement, + updateTryStatement, + createDebuggerStatement, + createVariableDeclaration, + updateVariableDeclaration, + createVariableDeclarationList, + updateVariableDeclarationList, + createFunctionDeclaration, + updateFunctionDeclaration, + createClassDeclaration, + updateClassDeclaration, + createInterfaceDeclaration, + updateInterfaceDeclaration, + createTypeAliasDeclaration, + updateTypeAliasDeclaration, + createEnumDeclaration, + updateEnumDeclaration, + createModuleDeclaration, + updateModuleDeclaration, + createModuleBlock, + updateModuleBlock, + createCaseBlock, + updateCaseBlock, + createNamespaceExportDeclaration, + updateNamespaceExportDeclaration, + createImportEqualsDeclaration, + updateImportEqualsDeclaration, + createImportDeclaration, + updateImportDeclaration, + createImportClause: createImportClause2, + updateImportClause, + createAssertClause, + updateAssertClause, + createAssertEntry, + updateAssertEntry, + createImportTypeAssertionContainer, + updateImportTypeAssertionContainer, + createImportAttributes, + updateImportAttributes, + createImportAttribute, + updateImportAttribute, + createNamespaceImport, + updateNamespaceImport, + createNamespaceExport, + updateNamespaceExport, + createNamedImports, + updateNamedImports, + createImportSpecifier, + updateImportSpecifier, + createExportAssignment: createExportAssignment2, + updateExportAssignment, + createExportDeclaration, + updateExportDeclaration, + createNamedExports, + updateNamedExports, + createExportSpecifier, + updateExportSpecifier, + createMissingDeclaration, + createExternalModuleReference, + updateExternalModuleReference, + // lazily load factory members for JSDoc types with similar structure + get createJSDocAllType() { + return getJSDocPrimaryTypeCreateFunction(313 /* JSDocAllType */); + }, + get createJSDocUnknownType() { + return getJSDocPrimaryTypeCreateFunction(314 /* JSDocUnknownType */); + }, + get createJSDocNonNullableType() { + return getJSDocPrePostfixUnaryTypeCreateFunction(316 /* JSDocNonNullableType */); + }, + get updateJSDocNonNullableType() { + return getJSDocPrePostfixUnaryTypeUpdateFunction(316 /* JSDocNonNullableType */); + }, + get createJSDocNullableType() { + return getJSDocPrePostfixUnaryTypeCreateFunction(315 /* JSDocNullableType */); + }, + get updateJSDocNullableType() { + return getJSDocPrePostfixUnaryTypeUpdateFunction(315 /* JSDocNullableType */); + }, + get createJSDocOptionalType() { + return getJSDocUnaryTypeCreateFunction(317 /* JSDocOptionalType */); + }, + get updateJSDocOptionalType() { + return getJSDocUnaryTypeUpdateFunction(317 /* JSDocOptionalType */); + }, + get createJSDocVariadicType() { + return getJSDocUnaryTypeCreateFunction(319 /* JSDocVariadicType */); + }, + get updateJSDocVariadicType() { + return getJSDocUnaryTypeUpdateFunction(319 /* JSDocVariadicType */); + }, + get createJSDocNamepathType() { + return getJSDocUnaryTypeCreateFunction(320 /* JSDocNamepathType */); + }, + get updateJSDocNamepathType() { + return getJSDocUnaryTypeUpdateFunction(320 /* JSDocNamepathType */); + }, + createJSDocFunctionType, + updateJSDocFunctionType, + createJSDocTypeLiteral, + updateJSDocTypeLiteral, + createJSDocTypeExpression, + updateJSDocTypeExpression, + createJSDocSignature, + updateJSDocSignature, + createJSDocTemplateTag, + updateJSDocTemplateTag, + createJSDocTypedefTag, + updateJSDocTypedefTag, + createJSDocParameterTag, + updateJSDocParameterTag, + createJSDocPropertyTag, + updateJSDocPropertyTag, + createJSDocCallbackTag, + updateJSDocCallbackTag, + createJSDocOverloadTag, + updateJSDocOverloadTag, + createJSDocAugmentsTag, + updateJSDocAugmentsTag, + createJSDocImplementsTag, + updateJSDocImplementsTag, + createJSDocSeeTag, + updateJSDocSeeTag, + createJSDocImportTag, + updateJSDocImportTag, + createJSDocNameReference, + updateJSDocNameReference, + createJSDocMemberName, + updateJSDocMemberName, + createJSDocLink, + updateJSDocLink, + createJSDocLinkCode, + updateJSDocLinkCode, + createJSDocLinkPlain, + updateJSDocLinkPlain, + // lazily load factory members for JSDoc tags with similar structure + get createJSDocTypeTag() { + return getJSDocTypeLikeTagCreateFunction(345 /* JSDocTypeTag */); + }, + get updateJSDocTypeTag() { + return getJSDocTypeLikeTagUpdateFunction(345 /* JSDocTypeTag */); + }, + get createJSDocReturnTag() { + return getJSDocTypeLikeTagCreateFunction(343 /* JSDocReturnTag */); + }, + get updateJSDocReturnTag() { + return getJSDocTypeLikeTagUpdateFunction(343 /* JSDocReturnTag */); + }, + get createJSDocThisTag() { + return getJSDocTypeLikeTagCreateFunction(344 /* JSDocThisTag */); + }, + get updateJSDocThisTag() { + return getJSDocTypeLikeTagUpdateFunction(344 /* JSDocThisTag */); + }, + get createJSDocAuthorTag() { + return getJSDocSimpleTagCreateFunction(331 /* JSDocAuthorTag */); + }, + get updateJSDocAuthorTag() { + return getJSDocSimpleTagUpdateFunction(331 /* JSDocAuthorTag */); + }, + get createJSDocClassTag() { + return getJSDocSimpleTagCreateFunction(333 /* JSDocClassTag */); + }, + get updateJSDocClassTag() { + return getJSDocSimpleTagUpdateFunction(333 /* JSDocClassTag */); + }, + get createJSDocPublicTag() { + return getJSDocSimpleTagCreateFunction(334 /* JSDocPublicTag */); + }, + get updateJSDocPublicTag() { + return getJSDocSimpleTagUpdateFunction(334 /* JSDocPublicTag */); + }, + get createJSDocPrivateTag() { + return getJSDocSimpleTagCreateFunction(335 /* JSDocPrivateTag */); + }, + get updateJSDocPrivateTag() { + return getJSDocSimpleTagUpdateFunction(335 /* JSDocPrivateTag */); + }, + get createJSDocProtectedTag() { + return getJSDocSimpleTagCreateFunction(336 /* JSDocProtectedTag */); + }, + get updateJSDocProtectedTag() { + return getJSDocSimpleTagUpdateFunction(336 /* JSDocProtectedTag */); + }, + get createJSDocReadonlyTag() { + return getJSDocSimpleTagCreateFunction(337 /* JSDocReadonlyTag */); + }, + get updateJSDocReadonlyTag() { + return getJSDocSimpleTagUpdateFunction(337 /* JSDocReadonlyTag */); + }, + get createJSDocOverrideTag() { + return getJSDocSimpleTagCreateFunction(338 /* JSDocOverrideTag */); + }, + get updateJSDocOverrideTag() { + return getJSDocSimpleTagUpdateFunction(338 /* JSDocOverrideTag */); + }, + get createJSDocDeprecatedTag() { + return getJSDocSimpleTagCreateFunction(332 /* JSDocDeprecatedTag */); + }, + get updateJSDocDeprecatedTag() { + return getJSDocSimpleTagUpdateFunction(332 /* JSDocDeprecatedTag */); + }, + get createJSDocThrowsTag() { + return getJSDocTypeLikeTagCreateFunction(350 /* JSDocThrowsTag */); + }, + get updateJSDocThrowsTag() { + return getJSDocTypeLikeTagUpdateFunction(350 /* JSDocThrowsTag */); + }, + get createJSDocSatisfiesTag() { + return getJSDocTypeLikeTagCreateFunction(351 /* JSDocSatisfiesTag */); + }, + get updateJSDocSatisfiesTag() { + return getJSDocTypeLikeTagUpdateFunction(351 /* JSDocSatisfiesTag */); + }, + createJSDocEnumTag, + updateJSDocEnumTag, + createJSDocUnknownTag, + updateJSDocUnknownTag, + createJSDocText, + updateJSDocText, + createJSDocComment, + updateJSDocComment, + createJsxElement, + updateJsxElement, + createJsxSelfClosingElement, + updateJsxSelfClosingElement, + createJsxOpeningElement, + updateJsxOpeningElement, + createJsxClosingElement, + updateJsxClosingElement, + createJsxFragment, + createJsxText, + updateJsxText, + createJsxOpeningFragment, + createJsxJsxClosingFragment, + updateJsxFragment, + createJsxAttribute, + updateJsxAttribute, + createJsxAttributes, + updateJsxAttributes, + createJsxSpreadAttribute, + updateJsxSpreadAttribute, + createJsxExpression, + updateJsxExpression, + createJsxNamespacedName, + updateJsxNamespacedName, + createCaseClause, + updateCaseClause, + createDefaultClause, + updateDefaultClause, + createHeritageClause, + updateHeritageClause, + createCatchClause, + updateCatchClause, + createPropertyAssignment, + updatePropertyAssignment, + createShorthandPropertyAssignment, + updateShorthandPropertyAssignment, + createSpreadAssignment, + updateSpreadAssignment, + createEnumMember, + updateEnumMember, + createSourceFile: createSourceFile2, + updateSourceFile: updateSourceFile2, + createRedirectedSourceFile, + createBundle, + updateBundle, + createSyntheticExpression, + createSyntaxList: createSyntaxList3, + createNotEmittedStatement, + createNotEmittedTypeElement, + createPartiallyEmittedExpression, + updatePartiallyEmittedExpression, + createCommaListExpression, + updateCommaListExpression, + createSyntheticReferenceExpression, + updateSyntheticReferenceExpression, + cloneNode, + // Lazily load factory methods for common operator factories and utilities + get createComma() { + return getBinaryCreateFunction(28 /* CommaToken */); + }, + get createAssignment() { + return getBinaryCreateFunction(64 /* EqualsToken */); + }, + get createLogicalOr() { + return getBinaryCreateFunction(57 /* BarBarToken */); + }, + get createLogicalAnd() { + return getBinaryCreateFunction(56 /* AmpersandAmpersandToken */); + }, + get createBitwiseOr() { + return getBinaryCreateFunction(52 /* BarToken */); + }, + get createBitwiseXor() { + return getBinaryCreateFunction(53 /* CaretToken */); + }, + get createBitwiseAnd() { + return getBinaryCreateFunction(51 /* AmpersandToken */); + }, + get createStrictEquality() { + return getBinaryCreateFunction(37 /* EqualsEqualsEqualsToken */); + }, + get createStrictInequality() { + return getBinaryCreateFunction(38 /* ExclamationEqualsEqualsToken */); + }, + get createEquality() { + return getBinaryCreateFunction(35 /* EqualsEqualsToken */); + }, + get createInequality() { + return getBinaryCreateFunction(36 /* ExclamationEqualsToken */); + }, + get createLessThan() { + return getBinaryCreateFunction(30 /* LessThanToken */); + }, + get createLessThanEquals() { + return getBinaryCreateFunction(33 /* LessThanEqualsToken */); + }, + get createGreaterThan() { + return getBinaryCreateFunction(32 /* GreaterThanToken */); + }, + get createGreaterThanEquals() { + return getBinaryCreateFunction(34 /* GreaterThanEqualsToken */); + }, + get createLeftShift() { + return getBinaryCreateFunction(48 /* LessThanLessThanToken */); + }, + get createRightShift() { + return getBinaryCreateFunction(49 /* GreaterThanGreaterThanToken */); + }, + get createUnsignedRightShift() { + return getBinaryCreateFunction(50 /* GreaterThanGreaterThanGreaterThanToken */); + }, + get createAdd() { + return getBinaryCreateFunction(40 /* PlusToken */); + }, + get createSubtract() { + return getBinaryCreateFunction(41 /* MinusToken */); + }, + get createMultiply() { + return getBinaryCreateFunction(42 /* AsteriskToken */); + }, + get createDivide() { + return getBinaryCreateFunction(44 /* SlashToken */); + }, + get createModulo() { + return getBinaryCreateFunction(45 /* PercentToken */); + }, + get createExponent() { + return getBinaryCreateFunction(43 /* AsteriskAsteriskToken */); + }, + get createPrefixPlus() { + return getPrefixUnaryCreateFunction(40 /* PlusToken */); + }, + get createPrefixMinus() { + return getPrefixUnaryCreateFunction(41 /* MinusToken */); + }, + get createPrefixIncrement() { + return getPrefixUnaryCreateFunction(46 /* PlusPlusToken */); + }, + get createPrefixDecrement() { + return getPrefixUnaryCreateFunction(47 /* MinusMinusToken */); + }, + get createBitwiseNot() { + return getPrefixUnaryCreateFunction(55 /* TildeToken */); + }, + get createLogicalNot() { + return getPrefixUnaryCreateFunction(54 /* ExclamationToken */); + }, + get createPostfixIncrement() { + return getPostfixUnaryCreateFunction(46 /* PlusPlusToken */); + }, + get createPostfixDecrement() { + return getPostfixUnaryCreateFunction(47 /* MinusMinusToken */); + }, + // Compound nodes + createImmediatelyInvokedFunctionExpression, + createImmediatelyInvokedArrowFunction, + createVoidZero, + createExportDefault, + createExternalModuleExport, + createTypeCheck, + createIsNotTypeCheck, + createMethodCall, + createGlobalMethodCall, + createFunctionBindCall, + createFunctionCallCall, + createFunctionApplyCall, + createArraySliceCall, + createArrayConcatCall, + createObjectDefinePropertyCall, + createObjectGetOwnPropertyDescriptorCall, + createReflectGetCall, + createReflectSetCall, + createPropertyDescriptor, + createCallBinding, + createAssignmentTargetWrapper, + // Utilities + inlineExpressions, + getInternalName, + getLocalName, + getExportName, + getDeclarationName, + getNamespaceMemberName, + getExternalModuleOrNamespaceExportName, + restoreOuterExpressions, + restoreEnclosingLabel, + createUseStrictPrologue, + copyPrologue, + copyStandardPrologue, + copyCustomPrologue, + ensureUseStrict, + liftToBlock, + mergeLexicalEnvironment, + replaceModifiers, + replaceDecoratorsAndModifiers, + replacePropertyName + }; + forEach(nodeFactoryPatchers, (fn) => fn(factory2)); + return factory2; + function createNodeArray(elements, hasTrailingComma) { + if (elements === void 0 || elements === emptyArray) { + elements = []; + } else if (isNodeArray(elements)) { + if (hasTrailingComma === void 0 || elements.hasTrailingComma === hasTrailingComma) { + if (elements.transformFlags === void 0) { + aggregateChildrenFlags(elements); + } + Debug.attachNodeArrayDebugInfo(elements); + return elements; + } + const array2 = elements.slice(); + array2.pos = elements.pos; + array2.end = elements.end; + array2.hasTrailingComma = hasTrailingComma; + array2.transformFlags = elements.transformFlags; + Debug.attachNodeArrayDebugInfo(array2); + return array2; + } + const length2 = elements.length; + const array = length2 >= 1 && length2 <= 4 ? elements.slice() : elements; + array.pos = -1; + array.end = -1; + array.hasTrailingComma = !!hasTrailingComma; + array.transformFlags = 0 /* None */; + aggregateChildrenFlags(array); + Debug.attachNodeArrayDebugInfo(array); + return array; + } + function createBaseNode(kind) { + return baseFactory2.createBaseNode(kind); + } + function createBaseDeclaration(kind) { + const node = createBaseNode(kind); + node.symbol = void 0; + node.localSymbol = void 0; + return node; + } + function finishUpdateBaseSignatureDeclaration(updated, original) { + if (updated !== original) { + updated.typeArguments = original.typeArguments; + } + return update(updated, original); + } + function createNumericLiteral(value, numericLiteralFlags = 0 /* None */) { + const text = typeof value === "number" ? value + "" : value; + Debug.assert(text.charCodeAt(0) !== 45 /* minus */, "Negative numbers should be created in combination with createPrefixUnaryExpression"); + const node = createBaseDeclaration(9 /* NumericLiteral */); + node.text = text; + node.numericLiteralFlags = numericLiteralFlags; + if (numericLiteralFlags & 384 /* BinaryOrOctalSpecifier */) node.transformFlags |= 1024 /* ContainsES2015 */; + return node; + } + function createBigIntLiteral(value) { + const node = createBaseToken(10 /* BigIntLiteral */); + node.text = typeof value === "string" ? value : pseudoBigIntToString(value) + "n"; + node.transformFlags |= 32 /* ContainsES2020 */; + return node; + } + function createBaseStringLiteral(text, isSingleQuote) { + const node = createBaseDeclaration(11 /* StringLiteral */); + node.text = text; + node.singleQuote = isSingleQuote; + return node; + } + function createStringLiteral(text, isSingleQuote, hasExtendedUnicodeEscape) { + const node = createBaseStringLiteral(text, isSingleQuote); + node.hasExtendedUnicodeEscape = hasExtendedUnicodeEscape; + if (hasExtendedUnicodeEscape) node.transformFlags |= 1024 /* ContainsES2015 */; + return node; + } + function createStringLiteralFromNode(sourceNode) { + const node = createBaseStringLiteral( + getTextOfIdentifierOrLiteral(sourceNode), + /*isSingleQuote*/ + void 0 + ); + node.textSourceNode = sourceNode; + return node; + } + function createRegularExpressionLiteral(text) { + const node = createBaseToken(14 /* RegularExpressionLiteral */); + node.text = text; + return node; + } + function createLiteralLikeNode(kind, text) { + switch (kind) { + case 9 /* NumericLiteral */: + return createNumericLiteral( + text, + /*numericLiteralFlags*/ + 0 + ); + case 10 /* BigIntLiteral */: + return createBigIntLiteral(text); + case 11 /* StringLiteral */: + return createStringLiteral( + text, + /*isSingleQuote*/ + void 0 + ); + case 12 /* JsxText */: + return createJsxText( + text, + /*containsOnlyTriviaWhiteSpaces*/ + false + ); + case 13 /* JsxTextAllWhiteSpaces */: + return createJsxText( + text, + /*containsOnlyTriviaWhiteSpaces*/ + true + ); + case 14 /* RegularExpressionLiteral */: + return createRegularExpressionLiteral(text); + case 15 /* NoSubstitutionTemplateLiteral */: + return createTemplateLiteralLikeNode( + kind, + text, + /*rawText*/ + void 0, + /*templateFlags*/ + 0 + ); + } + } + function createBaseIdentifier(escapedText) { + const node = baseFactory2.createBaseIdentifierNode(80 /* Identifier */); + node.escapedText = escapedText; + node.jsDoc = void 0; + node.flowNode = void 0; + node.symbol = void 0; + return node; + } + function createBaseGeneratedIdentifier(text, autoGenerateFlags, prefix, suffix) { + const node = createBaseIdentifier(escapeLeadingUnderscores(text)); + setIdentifierAutoGenerate(node, { + flags: autoGenerateFlags, + id: nextAutoGenerateId, + prefix, + suffix + }); + nextAutoGenerateId++; + return node; + } + function createIdentifier(text, originalKeywordKind, hasExtendedUnicodeEscape) { + if (originalKeywordKind === void 0 && text) { + originalKeywordKind = stringToToken(text); + } + if (originalKeywordKind === 80 /* Identifier */) { + originalKeywordKind = void 0; + } + const node = createBaseIdentifier(escapeLeadingUnderscores(text)); + if (hasExtendedUnicodeEscape) node.flags |= 256 /* IdentifierHasExtendedUnicodeEscape */; + if (node.escapedText === "await") { + node.transformFlags |= 67108864 /* ContainsPossibleTopLevelAwait */; + } + if (node.flags & 256 /* IdentifierHasExtendedUnicodeEscape */) { + node.transformFlags |= 1024 /* ContainsES2015 */; + } + return node; + } + function createTempVariable(recordTempVariable, reservedInNestedScopes, prefix, suffix) { + let flags2 = 1 /* Auto */; + if (reservedInNestedScopes) flags2 |= 8 /* ReservedInNestedScopes */; + const name = createBaseGeneratedIdentifier("", flags2, prefix, suffix); + if (recordTempVariable) { + recordTempVariable(name); + } + return name; + } + function createLoopVariable(reservedInNestedScopes) { + let flags2 = 2 /* Loop */; + if (reservedInNestedScopes) flags2 |= 8 /* ReservedInNestedScopes */; + return createBaseGeneratedIdentifier( + "", + flags2, + /*prefix*/ + void 0, + /*suffix*/ + void 0 + ); + } + function createUniqueName(text, flags2 = 0 /* None */, prefix, suffix) { + Debug.assert(!(flags2 & 7 /* KindMask */), "Argument out of range: flags"); + Debug.assert((flags2 & (16 /* Optimistic */ | 32 /* FileLevel */)) !== 32 /* FileLevel */, "GeneratedIdentifierFlags.FileLevel cannot be set without also setting GeneratedIdentifierFlags.Optimistic"); + return createBaseGeneratedIdentifier(text, 3 /* Unique */ | flags2, prefix, suffix); + } + function getGeneratedNameForNode(node, flags2 = 0, prefix, suffix) { + Debug.assert(!(flags2 & 7 /* KindMask */), "Argument out of range: flags"); + const text = !node ? "" : isMemberName(node) ? formatGeneratedName( + /*privateName*/ + false, + prefix, + node, + suffix, + idText + ) : `generated@${getNodeId(node)}`; + if (prefix || suffix) flags2 |= 16 /* Optimistic */; + const name = createBaseGeneratedIdentifier(text, 4 /* Node */ | flags2, prefix, suffix); + name.original = node; + return name; + } + function createBasePrivateIdentifier(escapedText) { + const node = baseFactory2.createBasePrivateIdentifierNode(81 /* PrivateIdentifier */); + node.escapedText = escapedText; + node.transformFlags |= 16777216 /* ContainsClassFields */; + return node; + } + function createPrivateIdentifier(text) { + if (!startsWith(text, "#")) Debug.fail("First character of private identifier must be #: " + text); + return createBasePrivateIdentifier(escapeLeadingUnderscores(text)); + } + function createBaseGeneratedPrivateIdentifier(text, autoGenerateFlags, prefix, suffix) { + const node = createBasePrivateIdentifier(escapeLeadingUnderscores(text)); + setIdentifierAutoGenerate(node, { + flags: autoGenerateFlags, + id: nextAutoGenerateId, + prefix, + suffix + }); + nextAutoGenerateId++; + return node; + } + function createUniquePrivateName(text, prefix, suffix) { + if (text && !startsWith(text, "#")) Debug.fail("First character of private identifier must be #: " + text); + const autoGenerateFlags = 8 /* ReservedInNestedScopes */ | (text ? 3 /* Unique */ : 1 /* Auto */); + return createBaseGeneratedPrivateIdentifier(text ?? "", autoGenerateFlags, prefix, suffix); + } + function getGeneratedPrivateNameForNode(node, prefix, suffix) { + const text = isMemberName(node) ? formatGeneratedName( + /*privateName*/ + true, + prefix, + node, + suffix, + idText + ) : `#generated@${getNodeId(node)}`; + const flags2 = prefix || suffix ? 16 /* Optimistic */ : 0 /* None */; + const name = createBaseGeneratedPrivateIdentifier(text, 4 /* Node */ | flags2, prefix, suffix); + name.original = node; + return name; + } + function createBaseToken(kind) { + return baseFactory2.createBaseTokenNode(kind); + } + function createToken(token) { + Debug.assert(token >= 0 /* FirstToken */ && token <= 166 /* LastToken */, "Invalid token"); + Debug.assert(token <= 15 /* FirstTemplateToken */ || token >= 18 /* LastTemplateToken */, "Invalid token. Use 'createTemplateLiteralLikeNode' to create template literals."); + Debug.assert(token <= 9 /* FirstLiteralToken */ || token >= 15 /* LastLiteralToken */, "Invalid token. Use 'createLiteralLikeNode' to create literals."); + Debug.assert(token !== 80 /* Identifier */, "Invalid token. Use 'createIdentifier' to create identifiers"); + const node = createBaseToken(token); + let transformFlags = 0 /* None */; + switch (token) { + case 134 /* AsyncKeyword */: + transformFlags = 256 /* ContainsES2017 */ | 128 /* ContainsES2018 */; + break; + case 160 /* UsingKeyword */: + transformFlags = 4 /* ContainsESNext */; + break; + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 148 /* ReadonlyKeyword */: + case 128 /* AbstractKeyword */: + case 138 /* DeclareKeyword */: + case 87 /* ConstKeyword */: + case 133 /* AnyKeyword */: + case 150 /* NumberKeyword */: + case 163 /* BigIntKeyword */: + case 146 /* NeverKeyword */: + case 151 /* ObjectKeyword */: + case 103 /* InKeyword */: + case 147 /* OutKeyword */: + case 164 /* OverrideKeyword */: + case 154 /* StringKeyword */: + case 136 /* BooleanKeyword */: + case 155 /* SymbolKeyword */: + case 116 /* VoidKeyword */: + case 159 /* UnknownKeyword */: + case 157 /* UndefinedKeyword */: + transformFlags = 1 /* ContainsTypeScript */; + break; + case 108 /* SuperKeyword */: + transformFlags = 1024 /* ContainsES2015 */ | 134217728 /* ContainsLexicalSuper */; + node.flowNode = void 0; + break; + case 126 /* StaticKeyword */: + transformFlags = 1024 /* ContainsES2015 */; + break; + case 129 /* AccessorKeyword */: + transformFlags = 16777216 /* ContainsClassFields */; + break; + case 110 /* ThisKeyword */: + transformFlags = 16384 /* ContainsLexicalThis */; + node.flowNode = void 0; + break; + } + if (transformFlags) { + node.transformFlags |= transformFlags; + } + return node; + } + function createSuper() { + return createToken(108 /* SuperKeyword */); + } + function createThis() { + return createToken(110 /* ThisKeyword */); + } + function createNull() { + return createToken(106 /* NullKeyword */); + } + function createTrue() { + return createToken(112 /* TrueKeyword */); + } + function createFalse() { + return createToken(97 /* FalseKeyword */); + } + function createModifier(kind) { + return createToken(kind); + } + function createModifiersFromModifierFlags(flags2) { + const result = []; + if (flags2 & 32 /* Export */) result.push(createModifier(95 /* ExportKeyword */)); + if (flags2 & 128 /* Ambient */) result.push(createModifier(138 /* DeclareKeyword */)); + if (flags2 & 2048 /* Default */) result.push(createModifier(90 /* DefaultKeyword */)); + if (flags2 & 4096 /* Const */) result.push(createModifier(87 /* ConstKeyword */)); + if (flags2 & 1 /* Public */) result.push(createModifier(125 /* PublicKeyword */)); + if (flags2 & 2 /* Private */) result.push(createModifier(123 /* PrivateKeyword */)); + if (flags2 & 4 /* Protected */) result.push(createModifier(124 /* ProtectedKeyword */)); + if (flags2 & 64 /* Abstract */) result.push(createModifier(128 /* AbstractKeyword */)); + if (flags2 & 256 /* Static */) result.push(createModifier(126 /* StaticKeyword */)); + if (flags2 & 16 /* Override */) result.push(createModifier(164 /* OverrideKeyword */)); + if (flags2 & 8 /* Readonly */) result.push(createModifier(148 /* ReadonlyKeyword */)); + if (flags2 & 512 /* Accessor */) result.push(createModifier(129 /* AccessorKeyword */)); + if (flags2 & 1024 /* Async */) result.push(createModifier(134 /* AsyncKeyword */)); + if (flags2 & 8192 /* In */) result.push(createModifier(103 /* InKeyword */)); + if (flags2 & 16384 /* Out */) result.push(createModifier(147 /* OutKeyword */)); + return result.length ? result : void 0; + } + function createQualifiedName(left, right) { + const node = createBaseNode(167 /* QualifiedName */); + node.left = left; + node.right = asName(right); + node.transformFlags |= propagateChildFlags(node.left) | propagateIdentifierNameFlags(node.right); + node.flowNode = void 0; + return node; + } + function updateQualifiedName(node, left, right) { + return node.left !== left || node.right !== right ? update(createQualifiedName(left, right), node) : node; + } + function createComputedPropertyName(expression) { + const node = createBaseNode(168 /* ComputedPropertyName */); + node.expression = parenthesizerRules().parenthesizeExpressionOfComputedPropertyName(expression); + node.transformFlags |= propagateChildFlags(node.expression) | 1024 /* ContainsES2015 */ | 131072 /* ContainsComputedPropertyName */; + return node; + } + function updateComputedPropertyName(node, expression) { + return node.expression !== expression ? update(createComputedPropertyName(expression), node) : node; + } + function createTypeParameterDeclaration(modifiers, name, constraint, defaultType) { + const node = createBaseDeclaration(169 /* TypeParameter */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.constraint = constraint; + node.default = defaultType; + node.transformFlags = 1 /* ContainsTypeScript */; + node.expression = void 0; + node.jsDoc = void 0; + return node; + } + function updateTypeParameterDeclaration(node, modifiers, name, constraint, defaultType) { + return node.modifiers !== modifiers || node.name !== name || node.constraint !== constraint || node.default !== defaultType ? update(createTypeParameterDeclaration(modifiers, name, constraint, defaultType), node) : node; + } + function createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer) { + const node = createBaseDeclaration(170 /* Parameter */); + node.modifiers = asNodeArray(modifiers); + node.dotDotDotToken = dotDotDotToken; + node.name = asName(name); + node.questionToken = questionToken; + node.type = type; + node.initializer = asInitializer(initializer); + if (isThisIdentifier(node.name)) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.dotDotDotToken) | propagateNameFlags(node.name) | propagateChildFlags(node.questionToken) | propagateChildFlags(node.initializer) | (node.questionToken ?? node.type ? 1 /* ContainsTypeScript */ : 0 /* None */) | (node.dotDotDotToken ?? node.initializer ? 1024 /* ContainsES2015 */ : 0 /* None */) | (modifiersToFlags(node.modifiers) & 31 /* ParameterPropertyModifier */ ? 8192 /* ContainsTypeScriptClassSyntax */ : 0 /* None */); + } + node.jsDoc = void 0; + return node; + } + function updateParameterDeclaration(node, modifiers, dotDotDotToken, name, questionToken, type, initializer) { + return node.modifiers !== modifiers || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type || node.initializer !== initializer ? update(createParameterDeclaration(modifiers, dotDotDotToken, name, questionToken, type, initializer), node) : node; + } + function createDecorator(expression) { + const node = createBaseNode(171 /* Decorator */); + node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ); + node.transformFlags |= propagateChildFlags(node.expression) | 1 /* ContainsTypeScript */ | 8192 /* ContainsTypeScriptClassSyntax */ | 33554432 /* ContainsDecorators */; + return node; + } + function updateDecorator(node, expression) { + return node.expression !== expression ? update(createDecorator(expression), node) : node; + } + function createPropertySignature(modifiers, name, questionToken, type) { + const node = createBaseDeclaration(172 /* PropertySignature */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.type = type; + node.questionToken = questionToken; + node.transformFlags = 1 /* ContainsTypeScript */; + node.initializer = void 0; + node.jsDoc = void 0; + return node; + } + function updatePropertySignature(node, modifiers, name, questionToken, type) { + return node.modifiers !== modifiers || node.name !== name || node.questionToken !== questionToken || node.type !== type ? finishUpdatePropertySignature(createPropertySignature(modifiers, name, questionToken, type), node) : node; + } + function finishUpdatePropertySignature(updated, original) { + if (updated !== original) { + updated.initializer = original.initializer; + } + return update(updated, original); + } + function createPropertyDeclaration(modifiers, name, questionOrExclamationToken, type, initializer) { + const node = createBaseDeclaration(173 /* PropertyDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.questionToken = questionOrExclamationToken && isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : void 0; + node.exclamationToken = questionOrExclamationToken && isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : void 0; + node.type = type; + node.initializer = asInitializer(initializer); + const isAmbient = node.flags & 33554432 /* Ambient */ || modifiersToFlags(node.modifiers) & 128 /* Ambient */; + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateNameFlags(node.name) | propagateChildFlags(node.initializer) | (isAmbient || node.questionToken || node.exclamationToken || node.type ? 1 /* ContainsTypeScript */ : 0 /* None */) | (isComputedPropertyName(node.name) || modifiersToFlags(node.modifiers) & 256 /* Static */ && node.initializer ? 8192 /* ContainsTypeScriptClassSyntax */ : 0 /* None */) | 16777216 /* ContainsClassFields */; + node.jsDoc = void 0; + return node; + } + function updatePropertyDeclaration2(node, modifiers, name, questionOrExclamationToken, type, initializer) { + return node.modifiers !== modifiers || node.name !== name || node.questionToken !== (questionOrExclamationToken !== void 0 && isQuestionToken(questionOrExclamationToken) ? questionOrExclamationToken : void 0) || node.exclamationToken !== (questionOrExclamationToken !== void 0 && isExclamationToken(questionOrExclamationToken) ? questionOrExclamationToken : void 0) || node.type !== type || node.initializer !== initializer ? update(createPropertyDeclaration(modifiers, name, questionOrExclamationToken, type, initializer), node) : node; + } + function createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type) { + const node = createBaseDeclaration(174 /* MethodSignature */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.questionToken = questionToken; + node.typeParameters = asNodeArray(typeParameters); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function updateMethodSignature(node, modifiers, name, questionToken, typeParameters, parameters, type) { + return node.modifiers !== modifiers || node.name !== name || node.questionToken !== questionToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? finishUpdateBaseSignatureDeclaration(createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type), node) : node; + } + function createMethodDeclaration(modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) { + const node = createBaseDeclaration(175 /* MethodDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.asteriskToken = asteriskToken; + node.name = asName(name); + node.questionToken = questionToken; + node.exclamationToken = void 0; + node.typeParameters = asNodeArray(typeParameters); + node.parameters = createNodeArray(parameters); + node.type = type; + node.body = body; + if (!node.body) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + const isAsync = modifiersToFlags(node.modifiers) & 1024 /* Async */; + const isGenerator = !!node.asteriskToken; + const isAsyncGenerator = isAsync && isGenerator; + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.asteriskToken) | propagateNameFlags(node.name) | propagateChildFlags(node.questionToken) | propagateChildrenFlags(node.typeParameters) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.type) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | (isAsyncGenerator ? 128 /* ContainsES2018 */ : isAsync ? 256 /* ContainsES2017 */ : isGenerator ? 2048 /* ContainsGenerator */ : 0 /* None */) | (node.questionToken || node.typeParameters || node.type ? 1 /* ContainsTypeScript */ : 0 /* None */) | 1024 /* ContainsES2015 */; + } + node.typeArguments = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateMethodDeclaration(node, modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body) { + return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.questionToken !== questionToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? finishUpdateMethodDeclaration(createMethodDeclaration(modifiers, asteriskToken, name, questionToken, typeParameters, parameters, type, body), node) : node; + } + function finishUpdateMethodDeclaration(updated, original) { + if (updated !== original) { + updated.exclamationToken = original.exclamationToken; + } + return update(updated, original); + } + function createClassStaticBlockDeclaration(body) { + const node = createBaseDeclaration(176 /* ClassStaticBlockDeclaration */); + node.body = body; + node.transformFlags = propagateChildFlags(body) | 16777216 /* ContainsClassFields */; + node.modifiers = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateClassStaticBlockDeclaration(node, body) { + return node.body !== body ? finishUpdateClassStaticBlockDeclaration(createClassStaticBlockDeclaration(body), node) : node; + } + function finishUpdateClassStaticBlockDeclaration(updated, original) { + if (updated !== original) { + updated.modifiers = original.modifiers; + } + return update(updated, original); + } + function createConstructorDeclaration(modifiers, parameters, body) { + const node = createBaseDeclaration(177 /* Constructor */); + node.modifiers = asNodeArray(modifiers); + node.parameters = createNodeArray(parameters); + node.body = body; + if (!node.body) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | 1024 /* ContainsES2015 */; + } + node.typeParameters = void 0; + node.type = void 0; + node.typeArguments = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateConstructorDeclaration(node, modifiers, parameters, body) { + return node.modifiers !== modifiers || node.parameters !== parameters || node.body !== body ? finishUpdateConstructorDeclaration(createConstructorDeclaration(modifiers, parameters, body), node) : node; + } + function finishUpdateConstructorDeclaration(updated, original) { + if (updated !== original) { + updated.typeParameters = original.typeParameters; + updated.type = original.type; + } + return finishUpdateBaseSignatureDeclaration(updated, original); + } + function createGetAccessorDeclaration(modifiers, name, parameters, type, body) { + const node = createBaseDeclaration(178 /* GetAccessor */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.parameters = createNodeArray(parameters); + node.type = type; + node.body = body; + if (!node.body) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateNameFlags(node.name) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.type) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | (node.type ? 1 /* ContainsTypeScript */ : 0 /* None */); + } + node.typeArguments = void 0; + node.typeParameters = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateGetAccessorDeclaration(node, modifiers, name, parameters, type, body) { + return node.modifiers !== modifiers || node.name !== name || node.parameters !== parameters || node.type !== type || node.body !== body ? finishUpdateGetAccessorDeclaration(createGetAccessorDeclaration(modifiers, name, parameters, type, body), node) : node; + } + function finishUpdateGetAccessorDeclaration(updated, original) { + if (updated !== original) { + updated.typeParameters = original.typeParameters; + } + return finishUpdateBaseSignatureDeclaration(updated, original); + } + function createSetAccessorDeclaration(modifiers, name, parameters, body) { + const node = createBaseDeclaration(179 /* SetAccessor */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.parameters = createNodeArray(parameters); + node.body = body; + if (!node.body) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateNameFlags(node.name) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | (node.type ? 1 /* ContainsTypeScript */ : 0 /* None */); + } + node.typeArguments = void 0; + node.typeParameters = void 0; + node.type = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateSetAccessorDeclaration(node, modifiers, name, parameters, body) { + return node.modifiers !== modifiers || node.name !== name || node.parameters !== parameters || node.body !== body ? finishUpdateSetAccessorDeclaration(createSetAccessorDeclaration(modifiers, name, parameters, body), node) : node; + } + function finishUpdateSetAccessorDeclaration(updated, original) { + if (updated !== original) { + updated.typeParameters = original.typeParameters; + updated.type = original.type; + } + return finishUpdateBaseSignatureDeclaration(updated, original); + } + function createCallSignature(typeParameters, parameters, type) { + const node = createBaseDeclaration(180 /* CallSignature */); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function updateCallSignature(node, typeParameters, parameters, type) { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? finishUpdateBaseSignatureDeclaration(createCallSignature(typeParameters, parameters, type), node) : node; + } + function createConstructSignature(typeParameters, parameters, type) { + const node = createBaseDeclaration(181 /* ConstructSignature */); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function updateConstructSignature(node, typeParameters, parameters, type) { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? finishUpdateBaseSignatureDeclaration(createConstructSignature(typeParameters, parameters, type), node) : node; + } + function createIndexSignature(modifiers, parameters, type) { + const node = createBaseDeclaration(182 /* IndexSignature */); + node.modifiers = asNodeArray(modifiers); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function updateIndexSignature(node, modifiers, parameters, type) { + return node.parameters !== parameters || node.type !== type || node.modifiers !== modifiers ? finishUpdateBaseSignatureDeclaration(createIndexSignature(modifiers, parameters, type), node) : node; + } + function createTemplateLiteralTypeSpan(type, literal) { + const node = createBaseNode(205 /* TemplateLiteralTypeSpan */); + node.type = type; + node.literal = literal; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTemplateLiteralTypeSpan(node, type, literal) { + return node.type !== type || node.literal !== literal ? update(createTemplateLiteralTypeSpan(type, literal), node) : node; + } + function createKeywordTypeNode(kind) { + return createToken(kind); + } + function createTypePredicateNode(assertsModifier, parameterName, type) { + const node = createBaseNode(183 /* TypePredicate */); + node.assertsModifier = assertsModifier; + node.parameterName = asName(parameterName); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTypePredicateNode(node, assertsModifier, parameterName, type) { + return node.assertsModifier !== assertsModifier || node.parameterName !== parameterName || node.type !== type ? update(createTypePredicateNode(assertsModifier, parameterName, type), node) : node; + } + function createTypeReferenceNode(typeName, typeArguments) { + const node = createBaseNode(184 /* TypeReference */); + node.typeName = asName(typeName); + node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(createNodeArray(typeArguments)); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTypeReferenceNode(node, typeName, typeArguments) { + return node.typeName !== typeName || node.typeArguments !== typeArguments ? update(createTypeReferenceNode(typeName, typeArguments), node) : node; + } + function createFunctionTypeNode(typeParameters, parameters, type) { + const node = createBaseDeclaration(185 /* FunctionType */); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.modifiers = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function updateFunctionTypeNode(node, typeParameters, parameters, type) { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? finishUpdateFunctionTypeNode(createFunctionTypeNode(typeParameters, parameters, type), node) : node; + } + function finishUpdateFunctionTypeNode(updated, original) { + if (updated !== original) { + updated.modifiers = original.modifiers; + } + return finishUpdateBaseSignatureDeclaration(updated, original); + } + function createConstructorTypeNode(...args) { + return args.length === 4 ? createConstructorTypeNode1(...args) : args.length === 3 ? createConstructorTypeNode2(...args) : Debug.fail("Incorrect number of arguments specified."); + } + function createConstructorTypeNode1(modifiers, typeParameters, parameters, type) { + const node = createBaseDeclaration(186 /* ConstructorType */); + node.modifiers = asNodeArray(modifiers); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function createConstructorTypeNode2(typeParameters, parameters, type) { + return createConstructorTypeNode1( + /*modifiers*/ + void 0, + typeParameters, + parameters, + type + ); + } + function updateConstructorTypeNode(...args) { + return args.length === 5 ? updateConstructorTypeNode1(...args) : args.length === 4 ? updateConstructorTypeNode2(...args) : Debug.fail("Incorrect number of arguments specified."); + } + function updateConstructorTypeNode1(node, modifiers, typeParameters, parameters, type) { + return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? finishUpdateBaseSignatureDeclaration(createConstructorTypeNode(modifiers, typeParameters, parameters, type), node) : node; + } + function updateConstructorTypeNode2(node, typeParameters, parameters, type) { + return updateConstructorTypeNode1(node, node.modifiers, typeParameters, parameters, type); + } + function createTypeQueryNode(exprName, typeArguments) { + const node = createBaseNode(187 /* TypeQuery */); + node.exprName = exprName; + node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTypeQueryNode(node, exprName, typeArguments) { + return node.exprName !== exprName || node.typeArguments !== typeArguments ? update(createTypeQueryNode(exprName, typeArguments), node) : node; + } + function createTypeLiteralNode(members) { + const node = createBaseDeclaration(188 /* TypeLiteral */); + node.members = createNodeArray(members); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTypeLiteralNode(node, members) { + return node.members !== members ? update(createTypeLiteralNode(members), node) : node; + } + function createArrayTypeNode(elementType) { + const node = createBaseNode(189 /* ArrayType */); + node.elementType = parenthesizerRules().parenthesizeNonArrayTypeOfPostfixType(elementType); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateArrayTypeNode(node, elementType) { + return node.elementType !== elementType ? update(createArrayTypeNode(elementType), node) : node; + } + function createTupleTypeNode(elements) { + const node = createBaseNode(190 /* TupleType */); + node.elements = createNodeArray(parenthesizerRules().parenthesizeElementTypesOfTupleType(elements)); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTupleTypeNode(node, elements) { + return node.elements !== elements ? update(createTupleTypeNode(elements), node) : node; + } + function createNamedTupleMember(dotDotDotToken, name, questionToken, type) { + const node = createBaseDeclaration(203 /* NamedTupleMember */); + node.dotDotDotToken = dotDotDotToken; + node.name = name; + node.questionToken = questionToken; + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + return node; + } + function updateNamedTupleMember(node, dotDotDotToken, name, questionToken, type) { + return node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.questionToken !== questionToken || node.type !== type ? update(createNamedTupleMember(dotDotDotToken, name, questionToken, type), node) : node; + } + function createOptionalTypeNode(type) { + const node = createBaseNode(191 /* OptionalType */); + node.type = parenthesizerRules().parenthesizeTypeOfOptionalType(type); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateOptionalTypeNode(node, type) { + return node.type !== type ? update(createOptionalTypeNode(type), node) : node; + } + function createRestTypeNode(type) { + const node = createBaseNode(192 /* RestType */); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateRestTypeNode(node, type) { + return node.type !== type ? update(createRestTypeNode(type), node) : node; + } + function createUnionOrIntersectionTypeNode(kind, types, parenthesize) { + const node = createBaseNode(kind); + node.types = factory2.createNodeArray(parenthesize(types)); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateUnionOrIntersectionTypeNode(node, types, parenthesize) { + return node.types !== types ? update(createUnionOrIntersectionTypeNode(node.kind, types, parenthesize), node) : node; + } + function createUnionTypeNode(types) { + return createUnionOrIntersectionTypeNode(193 /* UnionType */, types, parenthesizerRules().parenthesizeConstituentTypesOfUnionType); + } + function updateUnionTypeNode(node, types) { + return updateUnionOrIntersectionTypeNode(node, types, parenthesizerRules().parenthesizeConstituentTypesOfUnionType); + } + function createIntersectionTypeNode(types) { + return createUnionOrIntersectionTypeNode(194 /* IntersectionType */, types, parenthesizerRules().parenthesizeConstituentTypesOfIntersectionType); + } + function updateIntersectionTypeNode(node, types) { + return updateUnionOrIntersectionTypeNode(node, types, parenthesizerRules().parenthesizeConstituentTypesOfIntersectionType); + } + function createConditionalTypeNode(checkType, extendsType, trueType, falseType) { + const node = createBaseNode(195 /* ConditionalType */); + node.checkType = parenthesizerRules().parenthesizeCheckTypeOfConditionalType(checkType); + node.extendsType = parenthesizerRules().parenthesizeExtendsTypeOfConditionalType(extendsType); + node.trueType = trueType; + node.falseType = falseType; + node.transformFlags = 1 /* ContainsTypeScript */; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateConditionalTypeNode(node, checkType, extendsType, trueType, falseType) { + return node.checkType !== checkType || node.extendsType !== extendsType || node.trueType !== trueType || node.falseType !== falseType ? update(createConditionalTypeNode(checkType, extendsType, trueType, falseType), node) : node; + } + function createInferTypeNode(typeParameter) { + const node = createBaseNode(196 /* InferType */); + node.typeParameter = typeParameter; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateInferTypeNode(node, typeParameter) { + return node.typeParameter !== typeParameter ? update(createInferTypeNode(typeParameter), node) : node; + } + function createTemplateLiteralType(head, templateSpans) { + const node = createBaseNode(204 /* TemplateLiteralType */); + node.head = head; + node.templateSpans = createNodeArray(templateSpans); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTemplateLiteralType(node, head, templateSpans) { + return node.head !== head || node.templateSpans !== templateSpans ? update(createTemplateLiteralType(head, templateSpans), node) : node; + } + function createImportTypeNode(argument, attributes, qualifier, typeArguments, isTypeOf = false) { + const node = createBaseNode(206 /* ImportType */); + node.argument = argument; + node.attributes = attributes; + if (node.assertions && node.assertions.assertClause && node.attributes) { + node.assertions.assertClause = node.attributes; + } + node.qualifier = qualifier; + node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments); + node.isTypeOf = isTypeOf; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateImportTypeNode(node, argument, attributes, qualifier, typeArguments, isTypeOf = node.isTypeOf) { + return node.argument !== argument || node.attributes !== attributes || node.qualifier !== qualifier || node.typeArguments !== typeArguments || node.isTypeOf !== isTypeOf ? update(createImportTypeNode(argument, attributes, qualifier, typeArguments, isTypeOf), node) : node; + } + function createParenthesizedType(type) { + const node = createBaseNode(197 /* ParenthesizedType */); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateParenthesizedType(node, type) { + return node.type !== type ? update(createParenthesizedType(type), node) : node; + } + function createThisTypeNode() { + const node = createBaseNode(198 /* ThisType */); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function createTypeOperatorNode(operator, type) { + const node = createBaseNode(199 /* TypeOperator */); + node.operator = operator; + node.type = operator === 148 /* ReadonlyKeyword */ ? parenthesizerRules().parenthesizeOperandOfReadonlyTypeOperator(type) : parenthesizerRules().parenthesizeOperandOfTypeOperator(type); + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateTypeOperatorNode(node, type) { + return node.type !== type ? update(createTypeOperatorNode(node.operator, type), node) : node; + } + function createIndexedAccessTypeNode(objectType, indexType) { + const node = createBaseNode(200 /* IndexedAccessType */); + node.objectType = parenthesizerRules().parenthesizeNonArrayTypeOfPostfixType(objectType); + node.indexType = indexType; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateIndexedAccessTypeNode(node, objectType, indexType) { + return node.objectType !== objectType || node.indexType !== indexType ? update(createIndexedAccessTypeNode(objectType, indexType), node) : node; + } + function createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members) { + const node = createBaseDeclaration(201 /* MappedType */); + node.readonlyToken = readonlyToken; + node.typeParameter = typeParameter; + node.nameType = nameType; + node.questionToken = questionToken; + node.type = type; + node.members = members && createNodeArray(members); + node.transformFlags = 1 /* ContainsTypeScript */; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateMappedTypeNode(node, readonlyToken, typeParameter, nameType, questionToken, type, members) { + return node.readonlyToken !== readonlyToken || node.typeParameter !== typeParameter || node.nameType !== nameType || node.questionToken !== questionToken || node.type !== type || node.members !== members ? update(createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members), node) : node; + } + function createLiteralTypeNode(literal) { + const node = createBaseNode(202 /* LiteralType */); + node.literal = literal; + node.transformFlags = 1 /* ContainsTypeScript */; + return node; + } + function updateLiteralTypeNode(node, literal) { + return node.literal !== literal ? update(createLiteralTypeNode(literal), node) : node; + } + function createObjectBindingPattern(elements) { + const node = createBaseNode(207 /* ObjectBindingPattern */); + node.elements = createNodeArray(elements); + node.transformFlags |= propagateChildrenFlags(node.elements) | 1024 /* ContainsES2015 */ | 524288 /* ContainsBindingPattern */; + if (node.transformFlags & 32768 /* ContainsRestOrSpread */) { + node.transformFlags |= 128 /* ContainsES2018 */ | 65536 /* ContainsObjectRestOrSpread */; + } + return node; + } + function updateObjectBindingPattern(node, elements) { + return node.elements !== elements ? update(createObjectBindingPattern(elements), node) : node; + } + function createArrayBindingPattern(elements) { + const node = createBaseNode(208 /* ArrayBindingPattern */); + node.elements = createNodeArray(elements); + node.transformFlags |= propagateChildrenFlags(node.elements) | 1024 /* ContainsES2015 */ | 524288 /* ContainsBindingPattern */; + return node; + } + function updateArrayBindingPattern(node, elements) { + return node.elements !== elements ? update(createArrayBindingPattern(elements), node) : node; + } + function createBindingElement(dotDotDotToken, propertyName, name, initializer) { + const node = createBaseDeclaration(209 /* BindingElement */); + node.dotDotDotToken = dotDotDotToken; + node.propertyName = asName(propertyName); + node.name = asName(name); + node.initializer = asInitializer(initializer); + node.transformFlags |= propagateChildFlags(node.dotDotDotToken) | propagateNameFlags(node.propertyName) | propagateNameFlags(node.name) | propagateChildFlags(node.initializer) | (node.dotDotDotToken ? 32768 /* ContainsRestOrSpread */ : 0 /* None */) | 1024 /* ContainsES2015 */; + node.flowNode = void 0; + return node; + } + function updateBindingElement(node, dotDotDotToken, propertyName, name, initializer) { + return node.propertyName !== propertyName || node.dotDotDotToken !== dotDotDotToken || node.name !== name || node.initializer !== initializer ? update(createBindingElement(dotDotDotToken, propertyName, name, initializer), node) : node; + } + function createArrayLiteralExpression(elements, multiLine) { + const node = createBaseNode(210 /* ArrayLiteralExpression */); + const lastElement = elements && lastOrUndefined(elements); + const elementsArray = createNodeArray(elements, lastElement && isOmittedExpression(lastElement) ? true : void 0); + node.elements = parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(elementsArray); + node.multiLine = multiLine; + node.transformFlags |= propagateChildrenFlags(node.elements); + return node; + } + function updateArrayLiteralExpression(node, elements) { + return node.elements !== elements ? update(createArrayLiteralExpression(elements, node.multiLine), node) : node; + } + function createObjectLiteralExpression(properties, multiLine) { + const node = createBaseDeclaration(211 /* ObjectLiteralExpression */); + node.properties = createNodeArray(properties); + node.multiLine = multiLine; + node.transformFlags |= propagateChildrenFlags(node.properties); + node.jsDoc = void 0; + return node; + } + function updateObjectLiteralExpression(node, properties) { + return node.properties !== properties ? update(createObjectLiteralExpression(properties, node.multiLine), node) : node; + } + function createBasePropertyAccessExpression(expression, questionDotToken, name) { + const node = createBaseDeclaration(212 /* PropertyAccessExpression */); + node.expression = expression; + node.questionDotToken = questionDotToken; + node.name = name; + node.transformFlags = propagateChildFlags(node.expression) | propagateChildFlags(node.questionDotToken) | (isIdentifier(node.name) ? propagateIdentifierNameFlags(node.name) : propagateChildFlags(node.name) | 536870912 /* ContainsPrivateIdentifierInExpression */); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function createPropertyAccessExpression(expression, name) { + const node = createBasePropertyAccessExpression( + parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ), + /*questionDotToken*/ + void 0, + asName(name) + ); + if (isSuperKeyword(expression)) { + node.transformFlags |= 256 /* ContainsES2017 */ | 128 /* ContainsES2018 */; + } + return node; + } + function updatePropertyAccessExpression(node, expression, name) { + if (isPropertyAccessChain(node)) { + return updatePropertyAccessChain(node, expression, node.questionDotToken, cast(name, isIdentifier)); + } + return node.expression !== expression || node.name !== name ? update(createPropertyAccessExpression(expression, name), node) : node; + } + function createPropertyAccessChain(expression, questionDotToken, name) { + const node = createBasePropertyAccessExpression( + parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + true + ), + questionDotToken, + asName(name) + ); + node.flags |= 64 /* OptionalChain */; + node.transformFlags |= 32 /* ContainsES2020 */; + return node; + } + function updatePropertyAccessChain(node, expression, questionDotToken, name) { + Debug.assert(!!(node.flags & 64 /* OptionalChain */), "Cannot update a PropertyAccessExpression using updatePropertyAccessChain. Use updatePropertyAccess instead."); + return node.expression !== expression || node.questionDotToken !== questionDotToken || node.name !== name ? update(createPropertyAccessChain(expression, questionDotToken, name), node) : node; + } + function createBaseElementAccessExpression(expression, questionDotToken, argumentExpression) { + const node = createBaseDeclaration(213 /* ElementAccessExpression */); + node.expression = expression; + node.questionDotToken = questionDotToken; + node.argumentExpression = argumentExpression; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.questionDotToken) | propagateChildFlags(node.argumentExpression); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function createElementAccessExpression(expression, index) { + const node = createBaseElementAccessExpression( + parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ), + /*questionDotToken*/ + void 0, + asExpression(index) + ); + if (isSuperKeyword(expression)) { + node.transformFlags |= 256 /* ContainsES2017 */ | 128 /* ContainsES2018 */; + } + return node; + } + function updateElementAccessExpression(node, expression, argumentExpression) { + if (isElementAccessChain(node)) { + return updateElementAccessChain(node, expression, node.questionDotToken, argumentExpression); + } + return node.expression !== expression || node.argumentExpression !== argumentExpression ? update(createElementAccessExpression(expression, argumentExpression), node) : node; + } + function createElementAccessChain(expression, questionDotToken, index) { + const node = createBaseElementAccessExpression( + parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + true + ), + questionDotToken, + asExpression(index) + ); + node.flags |= 64 /* OptionalChain */; + node.transformFlags |= 32 /* ContainsES2020 */; + return node; + } + function updateElementAccessChain(node, expression, questionDotToken, argumentExpression) { + Debug.assert(!!(node.flags & 64 /* OptionalChain */), "Cannot update a ElementAccessExpression using updateElementAccessChain. Use updateElementAccess instead."); + return node.expression !== expression || node.questionDotToken !== questionDotToken || node.argumentExpression !== argumentExpression ? update(createElementAccessChain(expression, questionDotToken, argumentExpression), node) : node; + } + function createBaseCallExpression(expression, questionDotToken, typeArguments, argumentsArray) { + const node = createBaseDeclaration(214 /* CallExpression */); + node.expression = expression; + node.questionDotToken = questionDotToken; + node.typeArguments = typeArguments; + node.arguments = argumentsArray; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.questionDotToken) | propagateChildrenFlags(node.typeArguments) | propagateChildrenFlags(node.arguments); + if (node.typeArguments) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + if (isSuperProperty(node.expression)) { + node.transformFlags |= 16384 /* ContainsLexicalThis */; + } + return node; + } + function createCallExpression(expression, typeArguments, argumentsArray) { + const node = createBaseCallExpression( + parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ), + /*questionDotToken*/ + void 0, + asNodeArray(typeArguments), + parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray)) + ); + if (isImportKeyword(node.expression)) { + node.transformFlags |= 8388608 /* ContainsDynamicImport */; + } + return node; + } + function updateCallExpression(node, expression, typeArguments, argumentsArray) { + if (isCallChain(node)) { + return updateCallChain(node, expression, node.questionDotToken, typeArguments, argumentsArray); + } + return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== argumentsArray ? update(createCallExpression(expression, typeArguments, argumentsArray), node) : node; + } + function createCallChain(expression, questionDotToken, typeArguments, argumentsArray) { + const node = createBaseCallExpression( + parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + true + ), + questionDotToken, + asNodeArray(typeArguments), + parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(createNodeArray(argumentsArray)) + ); + node.flags |= 64 /* OptionalChain */; + node.transformFlags |= 32 /* ContainsES2020 */; + return node; + } + function updateCallChain(node, expression, questionDotToken, typeArguments, argumentsArray) { + Debug.assert(!!(node.flags & 64 /* OptionalChain */), "Cannot update a CallExpression using updateCallChain. Use updateCall instead."); + return node.expression !== expression || node.questionDotToken !== questionDotToken || node.typeArguments !== typeArguments || node.arguments !== argumentsArray ? update(createCallChain(expression, questionDotToken, typeArguments, argumentsArray), node) : node; + } + function createNewExpression(expression, typeArguments, argumentsArray) { + const node = createBaseDeclaration(215 /* NewExpression */); + node.expression = parenthesizerRules().parenthesizeExpressionOfNew(expression); + node.typeArguments = asNodeArray(typeArguments); + node.arguments = argumentsArray ? parenthesizerRules().parenthesizeExpressionsOfCommaDelimitedList(argumentsArray) : void 0; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildrenFlags(node.typeArguments) | propagateChildrenFlags(node.arguments) | 32 /* ContainsES2020 */; + if (node.typeArguments) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + return node; + } + function updateNewExpression(node, expression, typeArguments, argumentsArray) { + return node.expression !== expression || node.typeArguments !== typeArguments || node.arguments !== argumentsArray ? update(createNewExpression(expression, typeArguments, argumentsArray), node) : node; + } + function createTaggedTemplateExpression(tag, typeArguments, template) { + const node = createBaseNode(216 /* TaggedTemplateExpression */); + node.tag = parenthesizerRules().parenthesizeLeftSideOfAccess( + tag, + /*optionalChain*/ + false + ); + node.typeArguments = asNodeArray(typeArguments); + node.template = template; + node.transformFlags |= propagateChildFlags(node.tag) | propagateChildrenFlags(node.typeArguments) | propagateChildFlags(node.template) | 1024 /* ContainsES2015 */; + if (node.typeArguments) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + if (hasInvalidEscape(node.template)) { + node.transformFlags |= 128 /* ContainsES2018 */; + } + return node; + } + function updateTaggedTemplateExpression(node, tag, typeArguments, template) { + return node.tag !== tag || node.typeArguments !== typeArguments || node.template !== template ? update(createTaggedTemplateExpression(tag, typeArguments, template), node) : node; + } + function createTypeAssertion(type, expression) { + const node = createBaseNode(217 /* TypeAssertionExpression */); + node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression); + node.type = type; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.type) | 1 /* ContainsTypeScript */; + return node; + } + function updateTypeAssertion(node, type, expression) { + return node.type !== type || node.expression !== expression ? update(createTypeAssertion(type, expression), node) : node; + } + function createParenthesizedExpression(expression) { + const node = createBaseNode(218 /* ParenthesizedExpression */); + node.expression = expression; + node.transformFlags = propagateChildFlags(node.expression); + node.jsDoc = void 0; + return node; + } + function updateParenthesizedExpression(node, expression) { + return node.expression !== expression ? update(createParenthesizedExpression(expression), node) : node; + } + function createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body) { + const node = createBaseDeclaration(219 /* FunctionExpression */); + node.modifiers = asNodeArray(modifiers); + node.asteriskToken = asteriskToken; + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = createNodeArray(parameters); + node.type = type; + node.body = body; + const isAsync = modifiersToFlags(node.modifiers) & 1024 /* Async */; + const isGenerator = !!node.asteriskToken; + const isAsyncGenerator = isAsync && isGenerator; + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.asteriskToken) | propagateNameFlags(node.name) | propagateChildrenFlags(node.typeParameters) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.type) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | (isAsyncGenerator ? 128 /* ContainsES2018 */ : isAsync ? 256 /* ContainsES2017 */ : isGenerator ? 2048 /* ContainsGenerator */ : 0 /* None */) | (node.typeParameters || node.type ? 1 /* ContainsTypeScript */ : 0 /* None */) | 4194304 /* ContainsHoistedDeclarationOrCompletion */; + node.typeArguments = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateFunctionExpression(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { + return node.name !== name || node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? finishUpdateBaseSignatureDeclaration(createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body), node) : node; + } + function createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) { + const node = createBaseDeclaration(220 /* ArrowFunction */); + node.modifiers = asNodeArray(modifiers); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = createNodeArray(parameters); + node.type = type; + node.equalsGreaterThanToken = equalsGreaterThanToken ?? createToken(39 /* EqualsGreaterThanToken */); + node.body = parenthesizerRules().parenthesizeConciseBodyOfArrowFunction(body); + const isAsync = modifiersToFlags(node.modifiers) & 1024 /* Async */; + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildrenFlags(node.typeParameters) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.type) | propagateChildFlags(node.equalsGreaterThanToken) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | (node.typeParameters || node.type ? 1 /* ContainsTypeScript */ : 0 /* None */) | (isAsync ? 256 /* ContainsES2017 */ | 16384 /* ContainsLexicalThis */ : 0 /* None */) | 1024 /* ContainsES2015 */; + node.typeArguments = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateArrowFunction(node, modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body) { + return node.modifiers !== modifiers || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.equalsGreaterThanToken !== equalsGreaterThanToken || node.body !== body ? finishUpdateBaseSignatureDeclaration(createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body), node) : node; + } + function createDeleteExpression(expression) { + const node = createBaseNode(221 /* DeleteExpression */); + node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression); + node.transformFlags |= propagateChildFlags(node.expression); + return node; + } + function updateDeleteExpression(node, expression) { + return node.expression !== expression ? update(createDeleteExpression(expression), node) : node; + } + function createTypeOfExpression(expression) { + const node = createBaseNode(222 /* TypeOfExpression */); + node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression); + node.transformFlags |= propagateChildFlags(node.expression); + return node; + } + function updateTypeOfExpression(node, expression) { + return node.expression !== expression ? update(createTypeOfExpression(expression), node) : node; + } + function createVoidExpression(expression) { + const node = createBaseNode(223 /* VoidExpression */); + node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression); + node.transformFlags |= propagateChildFlags(node.expression); + return node; + } + function updateVoidExpression(node, expression) { + return node.expression !== expression ? update(createVoidExpression(expression), node) : node; + } + function createAwaitExpression(expression) { + const node = createBaseNode(224 /* AwaitExpression */); + node.expression = parenthesizerRules().parenthesizeOperandOfPrefixUnary(expression); + node.transformFlags |= propagateChildFlags(node.expression) | 256 /* ContainsES2017 */ | 128 /* ContainsES2018 */ | 2097152 /* ContainsAwait */; + return node; + } + function updateAwaitExpression(node, expression) { + return node.expression !== expression ? update(createAwaitExpression(expression), node) : node; + } + function createPrefixUnaryExpression(operator, operand) { + const node = createBaseNode(225 /* PrefixUnaryExpression */); + node.operator = operator; + node.operand = parenthesizerRules().parenthesizeOperandOfPrefixUnary(operand); + node.transformFlags |= propagateChildFlags(node.operand); + if ((operator === 46 /* PlusPlusToken */ || operator === 47 /* MinusMinusToken */) && isIdentifier(node.operand) && !isGeneratedIdentifier(node.operand) && !isLocalName(node.operand)) { + node.transformFlags |= 268435456 /* ContainsUpdateExpressionForIdentifier */; + } + return node; + } + function updatePrefixUnaryExpression(node, operand) { + return node.operand !== operand ? update(createPrefixUnaryExpression(node.operator, operand), node) : node; + } + function createPostfixUnaryExpression(operand, operator) { + const node = createBaseNode(226 /* PostfixUnaryExpression */); + node.operator = operator; + node.operand = parenthesizerRules().parenthesizeOperandOfPostfixUnary(operand); + node.transformFlags |= propagateChildFlags(node.operand); + if (isIdentifier(node.operand) && !isGeneratedIdentifier(node.operand) && !isLocalName(node.operand)) { + node.transformFlags |= 268435456 /* ContainsUpdateExpressionForIdentifier */; + } + return node; + } + function updatePostfixUnaryExpression(node, operand) { + return node.operand !== operand ? update(createPostfixUnaryExpression(operand, node.operator), node) : node; + } + function createBinaryExpression(left, operator, right) { + const node = createBaseDeclaration(227 /* BinaryExpression */); + const operatorToken = asToken(operator); + const operatorKind = operatorToken.kind; + node.left = parenthesizerRules().parenthesizeLeftSideOfBinary(operatorKind, left); + node.operatorToken = operatorToken; + node.right = parenthesizerRules().parenthesizeRightSideOfBinary(operatorKind, node.left, right); + node.transformFlags |= propagateChildFlags(node.left) | propagateChildFlags(node.operatorToken) | propagateChildFlags(node.right); + if (operatorKind === 61 /* QuestionQuestionToken */) { + node.transformFlags |= 32 /* ContainsES2020 */; + } else if (operatorKind === 64 /* EqualsToken */) { + if (isObjectLiteralExpression(node.left)) { + node.transformFlags |= 1024 /* ContainsES2015 */ | 128 /* ContainsES2018 */ | 4096 /* ContainsDestructuringAssignment */ | propagateAssignmentPatternFlags(node.left); + } else if (isArrayLiteralExpression(node.left)) { + node.transformFlags |= 1024 /* ContainsES2015 */ | 4096 /* ContainsDestructuringAssignment */ | propagateAssignmentPatternFlags(node.left); + } + } else if (operatorKind === 43 /* AsteriskAsteriskToken */ || operatorKind === 68 /* AsteriskAsteriskEqualsToken */) { + node.transformFlags |= 512 /* ContainsES2016 */; + } else if (isLogicalOrCoalescingAssignmentOperator(operatorKind)) { + node.transformFlags |= 16 /* ContainsES2021 */; + } + if (operatorKind === 103 /* InKeyword */ && isPrivateIdentifier(node.left)) { + node.transformFlags |= 536870912 /* ContainsPrivateIdentifierInExpression */; + } + node.jsDoc = void 0; + return node; + } + function propagateAssignmentPatternFlags(node) { + return containsObjectRestOrSpread(node) ? 65536 /* ContainsObjectRestOrSpread */ : 0 /* None */; + } + function updateBinaryExpression(node, left, operator, right) { + return node.left !== left || node.operatorToken !== operator || node.right !== right ? update(createBinaryExpression(left, operator, right), node) : node; + } + function createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse) { + const node = createBaseNode(228 /* ConditionalExpression */); + node.condition = parenthesizerRules().parenthesizeConditionOfConditionalExpression(condition); + node.questionToken = questionToken ?? createToken(58 /* QuestionToken */); + node.whenTrue = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenTrue); + node.colonToken = colonToken ?? createToken(59 /* ColonToken */); + node.whenFalse = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenFalse); + node.transformFlags |= propagateChildFlags(node.condition) | propagateChildFlags(node.questionToken) | propagateChildFlags(node.whenTrue) | propagateChildFlags(node.colonToken) | propagateChildFlags(node.whenFalse); + node.flowNodeWhenFalse = void 0; + node.flowNodeWhenTrue = void 0; + return node; + } + function updateConditionalExpression(node, condition, questionToken, whenTrue, colonToken, whenFalse) { + return node.condition !== condition || node.questionToken !== questionToken || node.whenTrue !== whenTrue || node.colonToken !== colonToken || node.whenFalse !== whenFalse ? update(createConditionalExpression(condition, questionToken, whenTrue, colonToken, whenFalse), node) : node; + } + function createTemplateExpression(head, templateSpans) { + const node = createBaseNode(229 /* TemplateExpression */); + node.head = head; + node.templateSpans = createNodeArray(templateSpans); + node.transformFlags |= propagateChildFlags(node.head) | propagateChildrenFlags(node.templateSpans) | 1024 /* ContainsES2015 */; + return node; + } + function updateTemplateExpression(node, head, templateSpans) { + return node.head !== head || node.templateSpans !== templateSpans ? update(createTemplateExpression(head, templateSpans), node) : node; + } + function checkTemplateLiteralLikeNode(kind, text, rawText, templateFlags = 0 /* None */) { + Debug.assert(!(templateFlags & ~7176 /* TemplateLiteralLikeFlags */), "Unsupported template flags."); + let cooked = void 0; + if (rawText !== void 0 && rawText !== text) { + cooked = getCookedText(kind, rawText); + if (typeof cooked === "object") { + return Debug.fail("Invalid raw text"); + } + } + if (text === void 0) { + if (cooked === void 0) { + return Debug.fail("Arguments 'text' and 'rawText' may not both be undefined."); + } + text = cooked; + } else if (cooked !== void 0) { + Debug.assert(text === cooked, "Expected argument 'text' to be the normalized (i.e. 'cooked') version of argument 'rawText'."); + } + return text; + } + function getTransformFlagsOfTemplateLiteralLike(templateFlags) { + let transformFlags = 1024 /* ContainsES2015 */; + if (templateFlags) { + transformFlags |= 128 /* ContainsES2018 */; + } + return transformFlags; + } + function createTemplateLiteralLikeToken(kind, text, rawText, templateFlags) { + const node = createBaseToken(kind); + node.text = text; + node.rawText = rawText; + node.templateFlags = templateFlags & 7176 /* TemplateLiteralLikeFlags */; + node.transformFlags = getTransformFlagsOfTemplateLiteralLike(node.templateFlags); + return node; + } + function createTemplateLiteralLikeDeclaration(kind, text, rawText, templateFlags) { + const node = createBaseDeclaration(kind); + node.text = text; + node.rawText = rawText; + node.templateFlags = templateFlags & 7176 /* TemplateLiteralLikeFlags */; + node.transformFlags = getTransformFlagsOfTemplateLiteralLike(node.templateFlags); + return node; + } + function createTemplateLiteralLikeNode(kind, text, rawText, templateFlags) { + if (kind === 15 /* NoSubstitutionTemplateLiteral */) { + return createTemplateLiteralLikeDeclaration(kind, text, rawText, templateFlags); + } + return createTemplateLiteralLikeToken(kind, text, rawText, templateFlags); + } + function createTemplateHead(text, rawText, templateFlags) { + text = checkTemplateLiteralLikeNode(16 /* TemplateHead */, text, rawText, templateFlags); + return createTemplateLiteralLikeNode(16 /* TemplateHead */, text, rawText, templateFlags); + } + function createTemplateMiddle(text, rawText, templateFlags) { + text = checkTemplateLiteralLikeNode(16 /* TemplateHead */, text, rawText, templateFlags); + return createTemplateLiteralLikeNode(17 /* TemplateMiddle */, text, rawText, templateFlags); + } + function createTemplateTail(text, rawText, templateFlags) { + text = checkTemplateLiteralLikeNode(16 /* TemplateHead */, text, rawText, templateFlags); + return createTemplateLiteralLikeNode(18 /* TemplateTail */, text, rawText, templateFlags); + } + function createNoSubstitutionTemplateLiteral(text, rawText, templateFlags) { + text = checkTemplateLiteralLikeNode(16 /* TemplateHead */, text, rawText, templateFlags); + return createTemplateLiteralLikeDeclaration(15 /* NoSubstitutionTemplateLiteral */, text, rawText, templateFlags); + } + function createYieldExpression(asteriskToken, expression) { + Debug.assert(!asteriskToken || !!expression, "A `YieldExpression` with an asteriskToken must have an expression."); + const node = createBaseNode(230 /* YieldExpression */); + node.expression = expression && parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression); + node.asteriskToken = asteriskToken; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.asteriskToken) | 1024 /* ContainsES2015 */ | 128 /* ContainsES2018 */ | 1048576 /* ContainsYield */; + return node; + } + function updateYieldExpression(node, asteriskToken, expression) { + return node.expression !== expression || node.asteriskToken !== asteriskToken ? update(createYieldExpression(asteriskToken, expression), node) : node; + } + function createSpreadElement(expression) { + const node = createBaseNode(231 /* SpreadElement */); + node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression); + node.transformFlags |= propagateChildFlags(node.expression) | 1024 /* ContainsES2015 */ | 32768 /* ContainsRestOrSpread */; + return node; + } + function updateSpreadElement(node, expression) { + return node.expression !== expression ? update(createSpreadElement(expression), node) : node; + } + function createClassExpression(modifiers, name, typeParameters, heritageClauses, members) { + const node = createBaseDeclaration(232 /* ClassExpression */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.heritageClauses = asNodeArray(heritageClauses); + node.members = createNodeArray(members); + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateNameFlags(node.name) | propagateChildrenFlags(node.typeParameters) | propagateChildrenFlags(node.heritageClauses) | propagateChildrenFlags(node.members) | (node.typeParameters ? 1 /* ContainsTypeScript */ : 0 /* None */) | 1024 /* ContainsES2015 */; + node.jsDoc = void 0; + return node; + } + function updateClassExpression(node, modifiers, name, typeParameters, heritageClauses, members) { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? update(createClassExpression(modifiers, name, typeParameters, heritageClauses, members), node) : node; + } + function createOmittedExpression() { + return createBaseNode(233 /* OmittedExpression */); + } + function createExpressionWithTypeArguments(expression, typeArguments) { + const node = createBaseNode(234 /* ExpressionWithTypeArguments */); + node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ); + node.typeArguments = typeArguments && parenthesizerRules().parenthesizeTypeArguments(typeArguments); + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildrenFlags(node.typeArguments) | 1024 /* ContainsES2015 */; + return node; + } + function updateExpressionWithTypeArguments(node, expression, typeArguments) { + return node.expression !== expression || node.typeArguments !== typeArguments ? update(createExpressionWithTypeArguments(expression, typeArguments), node) : node; + } + function createAsExpression(expression, type) { + const node = createBaseNode(235 /* AsExpression */); + node.expression = expression; + node.type = type; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.type) | 1 /* ContainsTypeScript */; + return node; + } + function updateAsExpression(node, expression, type) { + return node.expression !== expression || node.type !== type ? update(createAsExpression(expression, type), node) : node; + } + function createNonNullExpression(expression) { + const node = createBaseNode(236 /* NonNullExpression */); + node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ); + node.transformFlags |= propagateChildFlags(node.expression) | 1 /* ContainsTypeScript */; + return node; + } + function updateNonNullExpression(node, expression) { + if (isNonNullChain(node)) { + return updateNonNullChain(node, expression); + } + return node.expression !== expression ? update(createNonNullExpression(expression), node) : node; + } + function createSatisfiesExpression(expression, type) { + const node = createBaseNode(239 /* SatisfiesExpression */); + node.expression = expression; + node.type = type; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.type) | 1 /* ContainsTypeScript */; + return node; + } + function updateSatisfiesExpression(node, expression, type) { + return node.expression !== expression || node.type !== type ? update(createSatisfiesExpression(expression, type), node) : node; + } + function createNonNullChain(expression) { + const node = createBaseNode(236 /* NonNullExpression */); + node.flags |= 64 /* OptionalChain */; + node.expression = parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + true + ); + node.transformFlags |= propagateChildFlags(node.expression) | 1 /* ContainsTypeScript */; + return node; + } + function updateNonNullChain(node, expression) { + Debug.assert(!!(node.flags & 64 /* OptionalChain */), "Cannot update a NonNullExpression using updateNonNullChain. Use updateNonNullExpression instead."); + return node.expression !== expression ? update(createNonNullChain(expression), node) : node; + } + function createMetaProperty(keywordToken, name) { + const node = createBaseNode(237 /* MetaProperty */); + node.keywordToken = keywordToken; + node.name = name; + node.transformFlags |= propagateChildFlags(node.name); + switch (keywordToken) { + case 105 /* NewKeyword */: + node.transformFlags |= 1024 /* ContainsES2015 */; + break; + case 102 /* ImportKeyword */: + node.transformFlags |= 32 /* ContainsES2020 */; + break; + default: + return Debug.assertNever(keywordToken); + } + node.flowNode = void 0; + return node; + } + function updateMetaProperty(node, name) { + return node.name !== name ? update(createMetaProperty(node.keywordToken, name), node) : node; + } + function createTemplateSpan(expression, literal) { + const node = createBaseNode(240 /* TemplateSpan */); + node.expression = expression; + node.literal = literal; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.literal) | 1024 /* ContainsES2015 */; + return node; + } + function updateTemplateSpan(node, expression, literal) { + return node.expression !== expression || node.literal !== literal ? update(createTemplateSpan(expression, literal), node) : node; + } + function createSemicolonClassElement() { + const node = createBaseNode(241 /* SemicolonClassElement */); + node.transformFlags |= 1024 /* ContainsES2015 */; + return node; + } + function createBlock(statements, multiLine) { + const node = createBaseNode(242 /* Block */); + node.statements = createNodeArray(statements); + node.multiLine = multiLine; + node.transformFlags |= propagateChildrenFlags(node.statements); + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateBlock(node, statements) { + return node.statements !== statements ? update(createBlock(statements, node.multiLine), node) : node; + } + function createVariableStatement(modifiers, declarationList) { + const node = createBaseNode(244 /* VariableStatement */); + node.modifiers = asNodeArray(modifiers); + node.declarationList = isArray(declarationList) ? createVariableDeclarationList(declarationList) : declarationList; + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.declarationList); + if (modifiersToFlags(node.modifiers) & 128 /* Ambient */) { + node.transformFlags = 1 /* ContainsTypeScript */; + } + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateVariableStatement(node, modifiers, declarationList) { + return node.modifiers !== modifiers || node.declarationList !== declarationList ? update(createVariableStatement(modifiers, declarationList), node) : node; + } + function createEmptyStatement() { + const node = createBaseNode(243 /* EmptyStatement */); + node.jsDoc = void 0; + return node; + } + function createExpressionStatement(expression) { + const node = createBaseNode(245 /* ExpressionStatement */); + node.expression = parenthesizerRules().parenthesizeExpressionOfExpressionStatement(expression); + node.transformFlags |= propagateChildFlags(node.expression); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateExpressionStatement(node, expression) { + return node.expression !== expression ? update(createExpressionStatement(expression), node) : node; + } + function createIfStatement(expression, thenStatement, elseStatement) { + const node = createBaseNode(246 /* IfStatement */); + node.expression = expression; + node.thenStatement = asEmbeddedStatement(thenStatement); + node.elseStatement = asEmbeddedStatement(elseStatement); + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.thenStatement) | propagateChildFlags(node.elseStatement); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateIfStatement(node, expression, thenStatement, elseStatement) { + return node.expression !== expression || node.thenStatement !== thenStatement || node.elseStatement !== elseStatement ? update(createIfStatement(expression, thenStatement, elseStatement), node) : node; + } + function createDoStatement(statement, expression) { + const node = createBaseNode(247 /* DoStatement */); + node.statement = asEmbeddedStatement(statement); + node.expression = expression; + node.transformFlags |= propagateChildFlags(node.statement) | propagateChildFlags(node.expression); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateDoStatement(node, statement, expression) { + return node.statement !== statement || node.expression !== expression ? update(createDoStatement(statement, expression), node) : node; + } + function createWhileStatement(expression, statement) { + const node = createBaseNode(248 /* WhileStatement */); + node.expression = expression; + node.statement = asEmbeddedStatement(statement); + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.statement); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateWhileStatement(node, expression, statement) { + return node.expression !== expression || node.statement !== statement ? update(createWhileStatement(expression, statement), node) : node; + } + function createForStatement(initializer, condition, incrementor, statement) { + const node = createBaseNode(249 /* ForStatement */); + node.initializer = initializer; + node.condition = condition; + node.incrementor = incrementor; + node.statement = asEmbeddedStatement(statement); + node.transformFlags |= propagateChildFlags(node.initializer) | propagateChildFlags(node.condition) | propagateChildFlags(node.incrementor) | propagateChildFlags(node.statement); + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + return node; + } + function updateForStatement(node, initializer, condition, incrementor, statement) { + return node.initializer !== initializer || node.condition !== condition || node.incrementor !== incrementor || node.statement !== statement ? update(createForStatement(initializer, condition, incrementor, statement), node) : node; + } + function createForInStatement(initializer, expression, statement) { + const node = createBaseNode(250 /* ForInStatement */); + node.initializer = initializer; + node.expression = expression; + node.statement = asEmbeddedStatement(statement); + node.transformFlags |= propagateChildFlags(node.initializer) | propagateChildFlags(node.expression) | propagateChildFlags(node.statement); + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + return node; + } + function updateForInStatement(node, initializer, expression, statement) { + return node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? update(createForInStatement(initializer, expression, statement), node) : node; + } + function createForOfStatement(awaitModifier, initializer, expression, statement) { + const node = createBaseNode(251 /* ForOfStatement */); + node.awaitModifier = awaitModifier; + node.initializer = initializer; + node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression); + node.statement = asEmbeddedStatement(statement); + node.transformFlags |= propagateChildFlags(node.awaitModifier) | propagateChildFlags(node.initializer) | propagateChildFlags(node.expression) | propagateChildFlags(node.statement) | 1024 /* ContainsES2015 */; + if (awaitModifier) node.transformFlags |= 128 /* ContainsES2018 */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.flowNode = void 0; + return node; + } + function updateForOfStatement(node, awaitModifier, initializer, expression, statement) { + return node.awaitModifier !== awaitModifier || node.initializer !== initializer || node.expression !== expression || node.statement !== statement ? update(createForOfStatement(awaitModifier, initializer, expression, statement), node) : node; + } + function createContinueStatement(label) { + const node = createBaseNode(252 /* ContinueStatement */); + node.label = asName(label); + node.transformFlags |= propagateChildFlags(node.label) | 4194304 /* ContainsHoistedDeclarationOrCompletion */; + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateContinueStatement(node, label) { + return node.label !== label ? update(createContinueStatement(label), node) : node; + } + function createBreakStatement(label) { + const node = createBaseNode(253 /* BreakStatement */); + node.label = asName(label); + node.transformFlags |= propagateChildFlags(node.label) | 4194304 /* ContainsHoistedDeclarationOrCompletion */; + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateBreakStatement(node, label) { + return node.label !== label ? update(createBreakStatement(label), node) : node; + } + function createReturnStatement(expression) { + const node = createBaseNode(254 /* ReturnStatement */); + node.expression = expression; + node.transformFlags |= propagateChildFlags(node.expression) | 128 /* ContainsES2018 */ | 4194304 /* ContainsHoistedDeclarationOrCompletion */; + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateReturnStatement(node, expression) { + return node.expression !== expression ? update(createReturnStatement(expression), node) : node; + } + function createWithStatement(expression, statement) { + const node = createBaseNode(255 /* WithStatement */); + node.expression = expression; + node.statement = asEmbeddedStatement(statement); + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.statement); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateWithStatement(node, expression, statement) { + return node.expression !== expression || node.statement !== statement ? update(createWithStatement(expression, statement), node) : node; + } + function createSwitchStatement(expression, caseBlock) { + const node = createBaseNode(256 /* SwitchStatement */); + node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression); + node.caseBlock = caseBlock; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.caseBlock); + node.jsDoc = void 0; + node.flowNode = void 0; + node.possiblyExhaustive = false; + return node; + } + function updateSwitchStatement(node, expression, caseBlock) { + return node.expression !== expression || node.caseBlock !== caseBlock ? update(createSwitchStatement(expression, caseBlock), node) : node; + } + function createLabeledStatement(label, statement) { + const node = createBaseNode(257 /* LabeledStatement */); + node.label = asName(label); + node.statement = asEmbeddedStatement(statement); + node.transformFlags |= propagateChildFlags(node.label) | propagateChildFlags(node.statement); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateLabeledStatement(node, label, statement) { + return node.label !== label || node.statement !== statement ? update(createLabeledStatement(label, statement), node) : node; + } + function createThrowStatement(expression) { + const node = createBaseNode(258 /* ThrowStatement */); + node.expression = expression; + node.transformFlags |= propagateChildFlags(node.expression); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateThrowStatement(node, expression) { + return node.expression !== expression ? update(createThrowStatement(expression), node) : node; + } + function createTryStatement(tryBlock, catchClause, finallyBlock) { + const node = createBaseNode(259 /* TryStatement */); + node.tryBlock = tryBlock; + node.catchClause = catchClause; + node.finallyBlock = finallyBlock; + node.transformFlags |= propagateChildFlags(node.tryBlock) | propagateChildFlags(node.catchClause) | propagateChildFlags(node.finallyBlock); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function updateTryStatement(node, tryBlock, catchClause, finallyBlock) { + return node.tryBlock !== tryBlock || node.catchClause !== catchClause || node.finallyBlock !== finallyBlock ? update(createTryStatement(tryBlock, catchClause, finallyBlock), node) : node; + } + function createDebuggerStatement() { + const node = createBaseNode(260 /* DebuggerStatement */); + node.jsDoc = void 0; + node.flowNode = void 0; + return node; + } + function createVariableDeclaration(name, exclamationToken, type, initializer) { + const node = createBaseDeclaration(261 /* VariableDeclaration */); + node.name = asName(name); + node.exclamationToken = exclamationToken; + node.type = type; + node.initializer = asInitializer(initializer); + node.transformFlags |= propagateNameFlags(node.name) | propagateChildFlags(node.initializer) | (node.exclamationToken ?? node.type ? 1 /* ContainsTypeScript */ : 0 /* None */); + node.jsDoc = void 0; + return node; + } + function updateVariableDeclaration(node, name, exclamationToken, type, initializer) { + return node.name !== name || node.type !== type || node.exclamationToken !== exclamationToken || node.initializer !== initializer ? update(createVariableDeclaration(name, exclamationToken, type, initializer), node) : node; + } + function createVariableDeclarationList(declarations, flags2 = 0 /* None */) { + const node = createBaseNode(262 /* VariableDeclarationList */); + node.flags |= flags2 & 7 /* BlockScoped */; + node.declarations = createNodeArray(declarations); + node.transformFlags |= propagateChildrenFlags(node.declarations) | 4194304 /* ContainsHoistedDeclarationOrCompletion */; + if (flags2 & 7 /* BlockScoped */) { + node.transformFlags |= 1024 /* ContainsES2015 */ | 262144 /* ContainsBlockScopedBinding */; + } + if (flags2 & 4 /* Using */) { + node.transformFlags |= 4 /* ContainsESNext */; + } + return node; + } + function updateVariableDeclarationList(node, declarations) { + return node.declarations !== declarations ? update(createVariableDeclarationList(declarations, node.flags), node) : node; + } + function createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body) { + const node = createBaseDeclaration(263 /* FunctionDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.asteriskToken = asteriskToken; + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = createNodeArray(parameters); + node.type = type; + node.body = body; + if (!node.body || modifiersToFlags(node.modifiers) & 128 /* Ambient */) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + const isAsync = modifiersToFlags(node.modifiers) & 1024 /* Async */; + const isGenerator = !!node.asteriskToken; + const isAsyncGenerator = isAsync && isGenerator; + node.transformFlags = propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.asteriskToken) | propagateNameFlags(node.name) | propagateChildrenFlags(node.typeParameters) | propagateChildrenFlags(node.parameters) | propagateChildFlags(node.type) | propagateChildFlags(node.body) & ~67108864 /* ContainsPossibleTopLevelAwait */ | (isAsyncGenerator ? 128 /* ContainsES2018 */ : isAsync ? 256 /* ContainsES2017 */ : isGenerator ? 2048 /* ContainsGenerator */ : 0 /* None */) | (node.typeParameters || node.type ? 1 /* ContainsTypeScript */ : 0 /* None */) | 4194304 /* ContainsHoistedDeclarationOrCompletion */; + } + node.typeArguments = void 0; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.endFlowNode = void 0; + node.returnFlowNode = void 0; + return node; + } + function updateFunctionDeclaration(node, modifiers, asteriskToken, name, typeParameters, parameters, type, body) { + return node.modifiers !== modifiers || node.asteriskToken !== asteriskToken || node.name !== name || node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type || node.body !== body ? finishUpdateFunctionDeclaration(createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body), node) : node; + } + function finishUpdateFunctionDeclaration(updated, original) { + if (updated !== original) { + if (updated.modifiers === original.modifiers) { + updated.modifiers = original.modifiers; + } + } + return finishUpdateBaseSignatureDeclaration(updated, original); + } + function createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) { + const node = createBaseDeclaration(264 /* ClassDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.heritageClauses = asNodeArray(heritageClauses); + node.members = createNodeArray(members); + if (modifiersToFlags(node.modifiers) & 128 /* Ambient */) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateNameFlags(node.name) | propagateChildrenFlags(node.typeParameters) | propagateChildrenFlags(node.heritageClauses) | propagateChildrenFlags(node.members) | (node.typeParameters ? 1 /* ContainsTypeScript */ : 0 /* None */) | 1024 /* ContainsES2015 */; + if (node.transformFlags & 8192 /* ContainsTypeScriptClassSyntax */) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + } + node.jsDoc = void 0; + return node; + } + function updateClassDeclaration(node, modifiers, name, typeParameters, heritageClauses, members) { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? update(createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members), node) : node; + } + function createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members) { + const node = createBaseDeclaration(265 /* InterfaceDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.heritageClauses = asNodeArray(heritageClauses); + node.members = createNodeArray(members); + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + return node; + } + function updateInterfaceDeclaration(node, modifiers, name, typeParameters, heritageClauses, members) { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.heritageClauses !== heritageClauses || node.members !== members ? update(createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members), node) : node; + } + function createTypeAliasDeclaration(modifiers, name, typeParameters, type) { + const node = createBaseDeclaration(266 /* TypeAliasDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.typeParameters = asNodeArray(typeParameters); + node.type = type; + node.transformFlags = 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateTypeAliasDeclaration(node, modifiers, name, typeParameters, type) { + return node.modifiers !== modifiers || node.name !== name || node.typeParameters !== typeParameters || node.type !== type ? update(createTypeAliasDeclaration(modifiers, name, typeParameters, type), node) : node; + } + function createEnumDeclaration(modifiers, name, members) { + const node = createBaseDeclaration(267 /* EnumDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.members = createNodeArray(members); + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.name) | propagateChildrenFlags(node.members) | 1 /* ContainsTypeScript */; + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + return node; + } + function updateEnumDeclaration(node, modifiers, name, members) { + return node.modifiers !== modifiers || node.name !== name || node.members !== members ? update(createEnumDeclaration(modifiers, name, members), node) : node; + } + function createModuleDeclaration(modifiers, name, body, flags2 = 0 /* None */) { + const node = createBaseDeclaration(268 /* ModuleDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.flags |= flags2 & (32 /* Namespace */ | 8 /* NestedNamespace */ | 2048 /* GlobalAugmentation */); + node.name = name; + node.body = body; + if (modifiersToFlags(node.modifiers) & 128 /* Ambient */) { + node.transformFlags = 1 /* ContainsTypeScript */; + } else { + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.name) | propagateChildFlags(node.body) | 1 /* ContainsTypeScript */; + } + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateModuleDeclaration(node, modifiers, name, body) { + return node.modifiers !== modifiers || node.name !== name || node.body !== body ? update(createModuleDeclaration(modifiers, name, body, node.flags), node) : node; + } + function createModuleBlock(statements) { + const node = createBaseNode(269 /* ModuleBlock */); + node.statements = createNodeArray(statements); + node.transformFlags |= propagateChildrenFlags(node.statements); + node.jsDoc = void 0; + return node; + } + function updateModuleBlock(node, statements) { + return node.statements !== statements ? update(createModuleBlock(statements), node) : node; + } + function createCaseBlock(clauses) { + const node = createBaseNode(270 /* CaseBlock */); + node.clauses = createNodeArray(clauses); + node.transformFlags |= propagateChildrenFlags(node.clauses); + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateCaseBlock(node, clauses) { + return node.clauses !== clauses ? update(createCaseBlock(clauses), node) : node; + } + function createNamespaceExportDeclaration(name) { + const node = createBaseDeclaration(271 /* NamespaceExportDeclaration */); + node.name = asName(name); + node.transformFlags |= propagateIdentifierNameFlags(node.name) | 1 /* ContainsTypeScript */; + node.modifiers = void 0; + node.jsDoc = void 0; + return node; + } + function updateNamespaceExportDeclaration(node, name) { + return node.name !== name ? finishUpdateNamespaceExportDeclaration(createNamespaceExportDeclaration(name), node) : node; + } + function finishUpdateNamespaceExportDeclaration(updated, original) { + if (updated !== original) { + updated.modifiers = original.modifiers; + } + return update(updated, original); + } + function createImportEqualsDeclaration(modifiers, isTypeOnly, name, moduleReference) { + const node = createBaseDeclaration(272 /* ImportEqualsDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.name = asName(name); + node.isTypeOnly = isTypeOnly; + node.moduleReference = moduleReference; + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateIdentifierNameFlags(node.name) | propagateChildFlags(node.moduleReference); + if (!isExternalModuleReference(node.moduleReference)) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + return node; + } + function updateImportEqualsDeclaration(node, modifiers, isTypeOnly, name, moduleReference) { + return node.modifiers !== modifiers || node.isTypeOnly !== isTypeOnly || node.name !== name || node.moduleReference !== moduleReference ? update(createImportEqualsDeclaration(modifiers, isTypeOnly, name, moduleReference), node) : node; + } + function createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes) { + const node = createBaseNode(273 /* ImportDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.importClause = importClause; + node.moduleSpecifier = moduleSpecifier; + node.attributes = node.assertClause = attributes; + node.transformFlags |= propagateChildFlags(node.importClause) | propagateChildFlags(node.moduleSpecifier); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + return node; + } + function updateImportDeclaration(node, modifiers, importClause, moduleSpecifier, attributes) { + return node.modifiers !== modifiers || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? update(createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes), node) : node; + } + function createImportClause2(phaseModifier, name, namedBindings) { + const node = createBaseDeclaration(274 /* ImportClause */); + if (typeof phaseModifier === "boolean") { + phaseModifier = phaseModifier ? 156 /* TypeKeyword */ : void 0; + } + node.isTypeOnly = phaseModifier === 156 /* TypeKeyword */; + node.phaseModifier = phaseModifier; + node.name = name; + node.namedBindings = namedBindings; + node.transformFlags |= propagateChildFlags(node.name) | propagateChildFlags(node.namedBindings); + if (phaseModifier === 156 /* TypeKeyword */) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateImportClause(node, phaseModifier, name, namedBindings) { + if (typeof phaseModifier === "boolean") { + phaseModifier = phaseModifier ? 156 /* TypeKeyword */ : void 0; + } + return node.phaseModifier !== phaseModifier || node.name !== name || node.namedBindings !== namedBindings ? update(createImportClause2(phaseModifier, name, namedBindings), node) : node; + } + function createAssertClause(elements, multiLine) { + const node = createBaseNode(301 /* AssertClause */); + node.elements = createNodeArray(elements); + node.multiLine = multiLine; + node.token = 132 /* AssertKeyword */; + node.transformFlags |= 4 /* ContainsESNext */; + return node; + } + function updateAssertClause(node, elements, multiLine) { + return node.elements !== elements || node.multiLine !== multiLine ? update(createAssertClause(elements, multiLine), node) : node; + } + function createAssertEntry(name, value) { + const node = createBaseNode(302 /* AssertEntry */); + node.name = name; + node.value = value; + node.transformFlags |= 4 /* ContainsESNext */; + return node; + } + function updateAssertEntry(node, name, value) { + return node.name !== name || node.value !== value ? update(createAssertEntry(name, value), node) : node; + } + function createImportTypeAssertionContainer(clause, multiLine) { + const node = createBaseNode(303 /* ImportTypeAssertionContainer */); + node.assertClause = clause; + node.multiLine = multiLine; + return node; + } + function updateImportTypeAssertionContainer(node, clause, multiLine) { + return node.assertClause !== clause || node.multiLine !== multiLine ? update(createImportTypeAssertionContainer(clause, multiLine), node) : node; + } + function createImportAttributes(elements, multiLine, token) { + const node = createBaseNode(301 /* ImportAttributes */); + node.token = token ?? 118 /* WithKeyword */; + node.elements = createNodeArray(elements); + node.multiLine = multiLine; + node.transformFlags |= 4 /* ContainsESNext */; + return node; + } + function updateImportAttributes(node, elements, multiLine) { + return node.elements !== elements || node.multiLine !== multiLine ? update(createImportAttributes(elements, multiLine, node.token), node) : node; + } + function createImportAttribute(name, value) { + const node = createBaseNode(302 /* ImportAttribute */); + node.name = name; + node.value = value; + node.transformFlags |= 4 /* ContainsESNext */; + return node; + } + function updateImportAttribute(node, name, value) { + return node.name !== name || node.value !== value ? update(createImportAttribute(name, value), node) : node; + } + function createNamespaceImport(name) { + const node = createBaseDeclaration(275 /* NamespaceImport */); + node.name = name; + node.transformFlags |= propagateChildFlags(node.name); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateNamespaceImport(node, name) { + return node.name !== name ? update(createNamespaceImport(name), node) : node; + } + function createNamespaceExport(name) { + const node = createBaseDeclaration(281 /* NamespaceExport */); + node.name = name; + node.transformFlags |= propagateChildFlags(node.name) | 32 /* ContainsES2020 */; + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateNamespaceExport(node, name) { + return node.name !== name ? update(createNamespaceExport(name), node) : node; + } + function createNamedImports(elements) { + const node = createBaseNode(276 /* NamedImports */); + node.elements = createNodeArray(elements); + node.transformFlags |= propagateChildrenFlags(node.elements); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateNamedImports(node, elements) { + return node.elements !== elements ? update(createNamedImports(elements), node) : node; + } + function createImportSpecifier(isTypeOnly, propertyName, name) { + const node = createBaseDeclaration(277 /* ImportSpecifier */); + node.isTypeOnly = isTypeOnly; + node.propertyName = propertyName; + node.name = name; + node.transformFlags |= propagateChildFlags(node.propertyName) | propagateChildFlags(node.name); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateImportSpecifier(node, isTypeOnly, propertyName, name) { + return node.isTypeOnly !== isTypeOnly || node.propertyName !== propertyName || node.name !== name ? update(createImportSpecifier(isTypeOnly, propertyName, name), node) : node; + } + function createExportAssignment2(modifiers, isExportEquals, expression) { + const node = createBaseDeclaration(278 /* ExportAssignment */); + node.modifiers = asNodeArray(modifiers); + node.isExportEquals = isExportEquals; + node.expression = isExportEquals ? parenthesizerRules().parenthesizeRightSideOfBinary( + 64 /* EqualsToken */, + /*leftSide*/ + void 0, + expression + ) : parenthesizerRules().parenthesizeExpressionOfExportDefault(expression); + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.expression); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + return node; + } + function updateExportAssignment(node, modifiers, expression) { + return node.modifiers !== modifiers || node.expression !== expression ? update(createExportAssignment2(modifiers, node.isExportEquals, expression), node) : node; + } + function createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes) { + const node = createBaseDeclaration(279 /* ExportDeclaration */); + node.modifiers = asNodeArray(modifiers); + node.isTypeOnly = isTypeOnly; + node.exportClause = exportClause; + node.moduleSpecifier = moduleSpecifier; + node.attributes = node.assertClause = attributes; + node.transformFlags |= propagateChildrenFlags(node.modifiers) | propagateChildFlags(node.exportClause) | propagateChildFlags(node.moduleSpecifier); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + return node; + } + function updateExportDeclaration(node, modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes) { + return node.modifiers !== modifiers || node.isTypeOnly !== isTypeOnly || node.exportClause !== exportClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? finishUpdateExportDeclaration(createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes), node) : node; + } + function finishUpdateExportDeclaration(updated, original) { + if (updated !== original) { + if (updated.modifiers === original.modifiers) { + updated.modifiers = original.modifiers; + } + } + return update(updated, original); + } + function createNamedExports(elements) { + const node = createBaseNode(280 /* NamedExports */); + node.elements = createNodeArray(elements); + node.transformFlags |= propagateChildrenFlags(node.elements); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateNamedExports(node, elements) { + return node.elements !== elements ? update(createNamedExports(elements), node) : node; + } + function createExportSpecifier(isTypeOnly, propertyName, name) { + const node = createBaseNode(282 /* ExportSpecifier */); + node.isTypeOnly = isTypeOnly; + node.propertyName = asName(propertyName); + node.name = asName(name); + node.transformFlags |= propagateChildFlags(node.propertyName) | propagateChildFlags(node.name); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + node.jsDoc = void 0; + return node; + } + function updateExportSpecifier(node, isTypeOnly, propertyName, name) { + return node.isTypeOnly !== isTypeOnly || node.propertyName !== propertyName || node.name !== name ? update(createExportSpecifier(isTypeOnly, propertyName, name), node) : node; + } + function createMissingDeclaration() { + const node = createBaseDeclaration(283 /* MissingDeclaration */); + node.jsDoc = void 0; + return node; + } + function createExternalModuleReference(expression) { + const node = createBaseNode(284 /* ExternalModuleReference */); + node.expression = expression; + node.transformFlags |= propagateChildFlags(node.expression); + node.transformFlags &= ~67108864 /* ContainsPossibleTopLevelAwait */; + return node; + } + function updateExternalModuleReference(node, expression) { + return node.expression !== expression ? update(createExternalModuleReference(expression), node) : node; + } + function createJSDocPrimaryTypeWorker(kind) { + return createBaseNode(kind); + } + function createJSDocPrePostfixUnaryTypeWorker(kind, type, postfix = false) { + const node = createJSDocUnaryTypeWorker( + kind, + postfix ? type && parenthesizerRules().parenthesizeNonArrayTypeOfPostfixType(type) : type + ); + node.postfix = postfix; + return node; + } + function createJSDocUnaryTypeWorker(kind, type) { + const node = createBaseNode(kind); + node.type = type; + return node; + } + function updateJSDocPrePostfixUnaryTypeWorker(kind, node, type) { + return node.type !== type ? update(createJSDocPrePostfixUnaryTypeWorker(kind, type, node.postfix), node) : node; + } + function updateJSDocUnaryTypeWorker(kind, node, type) { + return node.type !== type ? update(createJSDocUnaryTypeWorker(kind, type), node) : node; + } + function createJSDocFunctionType(parameters, type) { + const node = createBaseDeclaration(318 /* JSDocFunctionType */); + node.parameters = asNodeArray(parameters); + node.type = type; + node.transformFlags = propagateChildrenFlags(node.parameters) | (node.type ? 1 /* ContainsTypeScript */ : 0 /* None */); + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + node.typeArguments = void 0; + return node; + } + function updateJSDocFunctionType(node, parameters, type) { + return node.parameters !== parameters || node.type !== type ? update(createJSDocFunctionType(parameters, type), node) : node; + } + function createJSDocTypeLiteral(propertyTags, isArrayType = false) { + const node = createBaseDeclaration(323 /* JSDocTypeLiteral */); + node.jsDocPropertyTags = asNodeArray(propertyTags); + node.isArrayType = isArrayType; + return node; + } + function updateJSDocTypeLiteral(node, propertyTags, isArrayType) { + return node.jsDocPropertyTags !== propertyTags || node.isArrayType !== isArrayType ? update(createJSDocTypeLiteral(propertyTags, isArrayType), node) : node; + } + function createJSDocTypeExpression(type) { + const node = createBaseNode(310 /* JSDocTypeExpression */); + node.type = type; + return node; + } + function updateJSDocTypeExpression(node, type) { + return node.type !== type ? update(createJSDocTypeExpression(type), node) : node; + } + function createJSDocSignature(typeParameters, parameters, type) { + const node = createBaseDeclaration(324 /* JSDocSignature */); + node.typeParameters = asNodeArray(typeParameters); + node.parameters = createNodeArray(parameters); + node.type = type; + node.jsDoc = void 0; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateJSDocSignature(node, typeParameters, parameters, type) { + return node.typeParameters !== typeParameters || node.parameters !== parameters || node.type !== type ? update(createJSDocSignature(typeParameters, parameters, type), node) : node; + } + function getDefaultTagName(node) { + const defaultTagName = getDefaultTagNameForKind(node.kind); + return node.tagName.escapedText === escapeLeadingUnderscores(defaultTagName) ? node.tagName : createIdentifier(defaultTagName); + } + function createBaseJSDocTag(kind, tagName, comment) { + const node = createBaseNode(kind); + node.tagName = tagName; + node.comment = comment; + return node; + } + function createBaseJSDocTagDeclaration(kind, tagName, comment) { + const node = createBaseDeclaration(kind); + node.tagName = tagName; + node.comment = comment; + return node; + } + function createJSDocTemplateTag(tagName, constraint, typeParameters, comment) { + const node = createBaseJSDocTag(346 /* JSDocTemplateTag */, tagName ?? createIdentifier("template"), comment); + node.constraint = constraint; + node.typeParameters = createNodeArray(typeParameters); + return node; + } + function updateJSDocTemplateTag(node, tagName = getDefaultTagName(node), constraint, typeParameters, comment) { + return node.tagName !== tagName || node.constraint !== constraint || node.typeParameters !== typeParameters || node.comment !== comment ? update(createJSDocTemplateTag(tagName, constraint, typeParameters, comment), node) : node; + } + function createJSDocTypedefTag(tagName, typeExpression, fullName, comment) { + const node = createBaseJSDocTagDeclaration(347 /* JSDocTypedefTag */, tagName ?? createIdentifier("typedef"), comment); + node.typeExpression = typeExpression; + node.fullName = fullName; + node.name = getJSDocTypeAliasName(fullName); + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateJSDocTypedefTag(node, tagName = getDefaultTagName(node), typeExpression, fullName, comment) { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.fullName !== fullName || node.comment !== comment ? update(createJSDocTypedefTag(tagName, typeExpression, fullName, comment), node) : node; + } + function createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) { + const node = createBaseJSDocTagDeclaration(342 /* JSDocParameterTag */, tagName ?? createIdentifier("param"), comment); + node.typeExpression = typeExpression; + node.name = name; + node.isNameFirst = !!isNameFirst; + node.isBracketed = isBracketed; + return node; + } + function updateJSDocParameterTag(node, tagName = getDefaultTagName(node), name, isBracketed, typeExpression, isNameFirst, comment) { + return node.tagName !== tagName || node.name !== name || node.isBracketed !== isBracketed || node.typeExpression !== typeExpression || node.isNameFirst !== isNameFirst || node.comment !== comment ? update(createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment), node) : node; + } + function createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) { + const node = createBaseJSDocTagDeclaration(349 /* JSDocPropertyTag */, tagName ?? createIdentifier("prop"), comment); + node.typeExpression = typeExpression; + node.name = name; + node.isNameFirst = !!isNameFirst; + node.isBracketed = isBracketed; + return node; + } + function updateJSDocPropertyTag(node, tagName = getDefaultTagName(node), name, isBracketed, typeExpression, isNameFirst, comment) { + return node.tagName !== tagName || node.name !== name || node.isBracketed !== isBracketed || node.typeExpression !== typeExpression || node.isNameFirst !== isNameFirst || node.comment !== comment ? update(createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment), node) : node; + } + function createJSDocCallbackTag(tagName, typeExpression, fullName, comment) { + const node = createBaseJSDocTagDeclaration(339 /* JSDocCallbackTag */, tagName ?? createIdentifier("callback"), comment); + node.typeExpression = typeExpression; + node.fullName = fullName; + node.name = getJSDocTypeAliasName(fullName); + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateJSDocCallbackTag(node, tagName = getDefaultTagName(node), typeExpression, fullName, comment) { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.fullName !== fullName || node.comment !== comment ? update(createJSDocCallbackTag(tagName, typeExpression, fullName, comment), node) : node; + } + function createJSDocOverloadTag(tagName, typeExpression, comment) { + const node = createBaseJSDocTag(340 /* JSDocOverloadTag */, tagName ?? createIdentifier("overload"), comment); + node.typeExpression = typeExpression; + return node; + } + function updateJSDocOverloadTag(node, tagName = getDefaultTagName(node), typeExpression, comment) { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? update(createJSDocOverloadTag(tagName, typeExpression, comment), node) : node; + } + function createJSDocAugmentsTag(tagName, className, comment) { + const node = createBaseJSDocTag(329 /* JSDocAugmentsTag */, tagName ?? createIdentifier("augments"), comment); + node.class = className; + return node; + } + function updateJSDocAugmentsTag(node, tagName = getDefaultTagName(node), className, comment) { + return node.tagName !== tagName || node.class !== className || node.comment !== comment ? update(createJSDocAugmentsTag(tagName, className, comment), node) : node; + } + function createJSDocImplementsTag(tagName, className, comment) { + const node = createBaseJSDocTag(330 /* JSDocImplementsTag */, tagName ?? createIdentifier("implements"), comment); + node.class = className; + return node; + } + function createJSDocSeeTag(tagName, name, comment) { + const node = createBaseJSDocTag(348 /* JSDocSeeTag */, tagName ?? createIdentifier("see"), comment); + node.name = name; + return node; + } + function updateJSDocSeeTag(node, tagName, name, comment) { + return node.tagName !== tagName || node.name !== name || node.comment !== comment ? update(createJSDocSeeTag(tagName, name, comment), node) : node; + } + function createJSDocNameReference(name) { + const node = createBaseNode(311 /* JSDocNameReference */); + node.name = name; + return node; + } + function updateJSDocNameReference(node, name) { + return node.name !== name ? update(createJSDocNameReference(name), node) : node; + } + function createJSDocMemberName(left, right) { + const node = createBaseNode(312 /* JSDocMemberName */); + node.left = left; + node.right = right; + node.transformFlags |= propagateChildFlags(node.left) | propagateChildFlags(node.right); + return node; + } + function updateJSDocMemberName(node, left, right) { + return node.left !== left || node.right !== right ? update(createJSDocMemberName(left, right), node) : node; + } + function createJSDocLink(name, text) { + const node = createBaseNode(325 /* JSDocLink */); + node.name = name; + node.text = text; + return node; + } + function updateJSDocLink(node, name, text) { + return node.name !== name ? update(createJSDocLink(name, text), node) : node; + } + function createJSDocLinkCode(name, text) { + const node = createBaseNode(326 /* JSDocLinkCode */); + node.name = name; + node.text = text; + return node; + } + function updateJSDocLinkCode(node, name, text) { + return node.name !== name ? update(createJSDocLinkCode(name, text), node) : node; + } + function createJSDocLinkPlain(name, text) { + const node = createBaseNode(327 /* JSDocLinkPlain */); + node.name = name; + node.text = text; + return node; + } + function updateJSDocLinkPlain(node, name, text) { + return node.name !== name ? update(createJSDocLinkPlain(name, text), node) : node; + } + function updateJSDocImplementsTag(node, tagName = getDefaultTagName(node), className, comment) { + return node.tagName !== tagName || node.class !== className || node.comment !== comment ? update(createJSDocImplementsTag(tagName, className, comment), node) : node; + } + function createJSDocSimpleTagWorker(kind, tagName, comment) { + const node = createBaseJSDocTag(kind, tagName ?? createIdentifier(getDefaultTagNameForKind(kind)), comment); + return node; + } + function updateJSDocSimpleTagWorker(kind, node, tagName = getDefaultTagName(node), comment) { + return node.tagName !== tagName || node.comment !== comment ? update(createJSDocSimpleTagWorker(kind, tagName, comment), node) : node; + } + function createJSDocTypeLikeTagWorker(kind, tagName, typeExpression, comment) { + const node = createBaseJSDocTag(kind, tagName ?? createIdentifier(getDefaultTagNameForKind(kind)), comment); + node.typeExpression = typeExpression; + return node; + } + function updateJSDocTypeLikeTagWorker(kind, node, tagName = getDefaultTagName(node), typeExpression, comment) { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? update(createJSDocTypeLikeTagWorker(kind, tagName, typeExpression, comment), node) : node; + } + function createJSDocUnknownTag(tagName, comment) { + const node = createBaseJSDocTag(328 /* JSDocTag */, tagName, comment); + return node; + } + function updateJSDocUnknownTag(node, tagName, comment) { + return node.tagName !== tagName || node.comment !== comment ? update(createJSDocUnknownTag(tagName, comment), node) : node; + } + function createJSDocEnumTag(tagName, typeExpression, comment) { + const node = createBaseJSDocTagDeclaration(341 /* JSDocEnumTag */, tagName ?? createIdentifier(getDefaultTagNameForKind(341 /* JSDocEnumTag */)), comment); + node.typeExpression = typeExpression; + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateJSDocEnumTag(node, tagName = getDefaultTagName(node), typeExpression, comment) { + return node.tagName !== tagName || node.typeExpression !== typeExpression || node.comment !== comment ? update(createJSDocEnumTag(tagName, typeExpression, comment), node) : node; + } + function createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment) { + const node = createBaseJSDocTag(352 /* JSDocImportTag */, tagName ?? createIdentifier("import"), comment); + node.importClause = importClause; + node.moduleSpecifier = moduleSpecifier; + node.attributes = attributes; + node.comment = comment; + return node; + } + function updateJSDocImportTag(node, tagName, importClause, moduleSpecifier, attributes, comment) { + return node.tagName !== tagName || node.comment !== comment || node.importClause !== importClause || node.moduleSpecifier !== moduleSpecifier || node.attributes !== attributes ? update(createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comment), node) : node; + } + function createJSDocText(text) { + const node = createBaseNode(322 /* JSDocText */); + node.text = text; + return node; + } + function updateJSDocText(node, text) { + return node.text !== text ? update(createJSDocText(text), node) : node; + } + function createJSDocComment(comment, tags) { + const node = createBaseNode(321 /* JSDoc */); + node.comment = comment; + node.tags = asNodeArray(tags); + return node; + } + function updateJSDocComment(node, comment, tags) { + return node.comment !== comment || node.tags !== tags ? update(createJSDocComment(comment, tags), node) : node; + } + function createJsxElement(openingElement, children, closingElement) { + const node = createBaseNode(285 /* JsxElement */); + node.openingElement = openingElement; + node.children = createNodeArray(children); + node.closingElement = closingElement; + node.transformFlags |= propagateChildFlags(node.openingElement) | propagateChildrenFlags(node.children) | propagateChildFlags(node.closingElement) | 2 /* ContainsJsx */; + return node; + } + function updateJsxElement(node, openingElement, children, closingElement) { + return node.openingElement !== openingElement || node.children !== children || node.closingElement !== closingElement ? update(createJsxElement(openingElement, children, closingElement), node) : node; + } + function createJsxSelfClosingElement(tagName, typeArguments, attributes) { + const node = createBaseNode(286 /* JsxSelfClosingElement */); + node.tagName = tagName; + node.typeArguments = asNodeArray(typeArguments); + node.attributes = attributes; + node.transformFlags |= propagateChildFlags(node.tagName) | propagateChildrenFlags(node.typeArguments) | propagateChildFlags(node.attributes) | 2 /* ContainsJsx */; + if (node.typeArguments) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + return node; + } + function updateJsxSelfClosingElement(node, tagName, typeArguments, attributes) { + return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? update(createJsxSelfClosingElement(tagName, typeArguments, attributes), node) : node; + } + function createJsxOpeningElement(tagName, typeArguments, attributes) { + const node = createBaseNode(287 /* JsxOpeningElement */); + node.tagName = tagName; + node.typeArguments = asNodeArray(typeArguments); + node.attributes = attributes; + node.transformFlags |= propagateChildFlags(node.tagName) | propagateChildrenFlags(node.typeArguments) | propagateChildFlags(node.attributes) | 2 /* ContainsJsx */; + if (typeArguments) { + node.transformFlags |= 1 /* ContainsTypeScript */; + } + return node; + } + function updateJsxOpeningElement(node, tagName, typeArguments, attributes) { + return node.tagName !== tagName || node.typeArguments !== typeArguments || node.attributes !== attributes ? update(createJsxOpeningElement(tagName, typeArguments, attributes), node) : node; + } + function createJsxClosingElement(tagName) { + const node = createBaseNode(288 /* JsxClosingElement */); + node.tagName = tagName; + node.transformFlags |= propagateChildFlags(node.tagName) | 2 /* ContainsJsx */; + return node; + } + function updateJsxClosingElement(node, tagName) { + return node.tagName !== tagName ? update(createJsxClosingElement(tagName), node) : node; + } + function createJsxFragment(openingFragment, children, closingFragment) { + const node = createBaseNode(289 /* JsxFragment */); + node.openingFragment = openingFragment; + node.children = createNodeArray(children); + node.closingFragment = closingFragment; + node.transformFlags |= propagateChildFlags(node.openingFragment) | propagateChildrenFlags(node.children) | propagateChildFlags(node.closingFragment) | 2 /* ContainsJsx */; + return node; + } + function updateJsxFragment(node, openingFragment, children, closingFragment) { + return node.openingFragment !== openingFragment || node.children !== children || node.closingFragment !== closingFragment ? update(createJsxFragment(openingFragment, children, closingFragment), node) : node; + } + function createJsxText(text, containsOnlyTriviaWhiteSpaces) { + const node = createBaseNode(12 /* JsxText */); + node.text = text; + node.containsOnlyTriviaWhiteSpaces = !!containsOnlyTriviaWhiteSpaces; + node.transformFlags |= 2 /* ContainsJsx */; + return node; + } + function updateJsxText(node, text, containsOnlyTriviaWhiteSpaces) { + return node.text !== text || node.containsOnlyTriviaWhiteSpaces !== containsOnlyTriviaWhiteSpaces ? update(createJsxText(text, containsOnlyTriviaWhiteSpaces), node) : node; + } + function createJsxOpeningFragment() { + const node = createBaseNode(290 /* JsxOpeningFragment */); + node.transformFlags |= 2 /* ContainsJsx */; + return node; + } + function createJsxJsxClosingFragment() { + const node = createBaseNode(291 /* JsxClosingFragment */); + node.transformFlags |= 2 /* ContainsJsx */; + return node; + } + function createJsxAttribute(name, initializer) { + const node = createBaseDeclaration(292 /* JsxAttribute */); + node.name = name; + node.initializer = initializer; + node.transformFlags |= propagateChildFlags(node.name) | propagateChildFlags(node.initializer) | 2 /* ContainsJsx */; + return node; + } + function updateJsxAttribute(node, name, initializer) { + return node.name !== name || node.initializer !== initializer ? update(createJsxAttribute(name, initializer), node) : node; + } + function createJsxAttributes(properties) { + const node = createBaseDeclaration(293 /* JsxAttributes */); + node.properties = createNodeArray(properties); + node.transformFlags |= propagateChildrenFlags(node.properties) | 2 /* ContainsJsx */; + return node; + } + function updateJsxAttributes(node, properties) { + return node.properties !== properties ? update(createJsxAttributes(properties), node) : node; + } + function createJsxSpreadAttribute(expression) { + const node = createBaseNode(294 /* JsxSpreadAttribute */); + node.expression = expression; + node.transformFlags |= propagateChildFlags(node.expression) | 2 /* ContainsJsx */; + return node; + } + function updateJsxSpreadAttribute(node, expression) { + return node.expression !== expression ? update(createJsxSpreadAttribute(expression), node) : node; + } + function createJsxExpression(dotDotDotToken, expression) { + const node = createBaseNode(295 /* JsxExpression */); + node.dotDotDotToken = dotDotDotToken; + node.expression = expression; + node.transformFlags |= propagateChildFlags(node.dotDotDotToken) | propagateChildFlags(node.expression) | 2 /* ContainsJsx */; + return node; + } + function updateJsxExpression(node, expression) { + return node.expression !== expression ? update(createJsxExpression(node.dotDotDotToken, expression), node) : node; + } + function createJsxNamespacedName(namespace, name) { + const node = createBaseNode(296 /* JsxNamespacedName */); + node.namespace = namespace; + node.name = name; + node.transformFlags |= propagateChildFlags(node.namespace) | propagateChildFlags(node.name) | 2 /* ContainsJsx */; + return node; + } + function updateJsxNamespacedName(node, namespace, name) { + return node.namespace !== namespace || node.name !== name ? update(createJsxNamespacedName(namespace, name), node) : node; + } + function createCaseClause(expression, statements) { + const node = createBaseNode(297 /* CaseClause */); + node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression); + node.statements = createNodeArray(statements); + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildrenFlags(node.statements); + node.jsDoc = void 0; + return node; + } + function updateCaseClause(node, expression, statements) { + return node.expression !== expression || node.statements !== statements ? update(createCaseClause(expression, statements), node) : node; + } + function createDefaultClause(statements) { + const node = createBaseNode(298 /* DefaultClause */); + node.statements = createNodeArray(statements); + node.transformFlags = propagateChildrenFlags(node.statements); + return node; + } + function updateDefaultClause(node, statements) { + return node.statements !== statements ? update(createDefaultClause(statements), node) : node; + } + function createHeritageClause(token, types) { + const node = createBaseNode(299 /* HeritageClause */); + node.token = token; + node.types = createNodeArray(types); + node.transformFlags |= propagateChildrenFlags(node.types); + switch (token) { + case 96 /* ExtendsKeyword */: + node.transformFlags |= 1024 /* ContainsES2015 */; + break; + case 119 /* ImplementsKeyword */: + node.transformFlags |= 1 /* ContainsTypeScript */; + break; + default: + return Debug.assertNever(token); + } + return node; + } + function updateHeritageClause(node, types) { + return node.types !== types ? update(createHeritageClause(node.token, types), node) : node; + } + function createCatchClause(variableDeclaration, block) { + const node = createBaseNode(300 /* CatchClause */); + node.variableDeclaration = asVariableDeclaration(variableDeclaration); + node.block = block; + node.transformFlags |= propagateChildFlags(node.variableDeclaration) | propagateChildFlags(node.block) | (!variableDeclaration ? 64 /* ContainsES2019 */ : 0 /* None */); + node.locals = void 0; + node.nextContainer = void 0; + return node; + } + function updateCatchClause(node, variableDeclaration, block) { + return node.variableDeclaration !== variableDeclaration || node.block !== block ? update(createCatchClause(variableDeclaration, block), node) : node; + } + function createPropertyAssignment(name, initializer) { + const node = createBaseDeclaration(304 /* PropertyAssignment */); + node.name = asName(name); + node.initializer = parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer); + node.transformFlags |= propagateNameFlags(node.name) | propagateChildFlags(node.initializer); + node.modifiers = void 0; + node.questionToken = void 0; + node.exclamationToken = void 0; + node.jsDoc = void 0; + return node; + } + function updatePropertyAssignment(node, name, initializer) { + return node.name !== name || node.initializer !== initializer ? finishUpdatePropertyAssignment(createPropertyAssignment(name, initializer), node) : node; + } + function finishUpdatePropertyAssignment(updated, original) { + if (updated !== original) { + updated.modifiers = original.modifiers; + updated.questionToken = original.questionToken; + updated.exclamationToken = original.exclamationToken; + } + return update(updated, original); + } + function createShorthandPropertyAssignment(name, objectAssignmentInitializer) { + const node = createBaseDeclaration(305 /* ShorthandPropertyAssignment */); + node.name = asName(name); + node.objectAssignmentInitializer = objectAssignmentInitializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(objectAssignmentInitializer); + node.transformFlags |= propagateIdentifierNameFlags(node.name) | propagateChildFlags(node.objectAssignmentInitializer) | 1024 /* ContainsES2015 */; + node.equalsToken = void 0; + node.modifiers = void 0; + node.questionToken = void 0; + node.exclamationToken = void 0; + node.jsDoc = void 0; + return node; + } + function updateShorthandPropertyAssignment(node, name, objectAssignmentInitializer) { + return node.name !== name || node.objectAssignmentInitializer !== objectAssignmentInitializer ? finishUpdateShorthandPropertyAssignment(createShorthandPropertyAssignment(name, objectAssignmentInitializer), node) : node; + } + function finishUpdateShorthandPropertyAssignment(updated, original) { + if (updated !== original) { + updated.modifiers = original.modifiers; + updated.questionToken = original.questionToken; + updated.exclamationToken = original.exclamationToken; + updated.equalsToken = original.equalsToken; + } + return update(updated, original); + } + function createSpreadAssignment(expression) { + const node = createBaseDeclaration(306 /* SpreadAssignment */); + node.expression = parenthesizerRules().parenthesizeExpressionForDisallowedComma(expression); + node.transformFlags |= propagateChildFlags(node.expression) | 128 /* ContainsES2018 */ | 65536 /* ContainsObjectRestOrSpread */; + node.jsDoc = void 0; + return node; + } + function updateSpreadAssignment(node, expression) { + return node.expression !== expression ? update(createSpreadAssignment(expression), node) : node; + } + function createEnumMember(name, initializer) { + const node = createBaseDeclaration(307 /* EnumMember */); + node.name = asName(name); + node.initializer = initializer && parenthesizerRules().parenthesizeExpressionForDisallowedComma(initializer); + node.transformFlags |= propagateChildFlags(node.name) | propagateChildFlags(node.initializer) | 1 /* ContainsTypeScript */; + node.jsDoc = void 0; + return node; + } + function updateEnumMember(node, name, initializer) { + return node.name !== name || node.initializer !== initializer ? update(createEnumMember(name, initializer), node) : node; + } + function createSourceFile2(statements, endOfFileToken, flags2) { + const node = baseFactory2.createBaseSourceFileNode(308 /* SourceFile */); + node.statements = createNodeArray(statements); + node.endOfFileToken = endOfFileToken; + node.flags |= flags2; + node.text = ""; + node.fileName = ""; + node.path = ""; + node.resolvedPath = ""; + node.originalFileName = ""; + node.languageVersion = 1 /* ES5 */; + node.languageVariant = 0; + node.scriptKind = 0; + node.isDeclarationFile = false; + node.hasNoDefaultLib = false; + node.transformFlags |= propagateChildrenFlags(node.statements) | propagateChildFlags(node.endOfFileToken); + node.locals = void 0; + node.nextContainer = void 0; + node.endFlowNode = void 0; + node.nodeCount = 0; + node.identifierCount = 0; + node.symbolCount = 0; + node.parseDiagnostics = void 0; + node.bindDiagnostics = void 0; + node.bindSuggestionDiagnostics = void 0; + node.lineMap = void 0; + node.externalModuleIndicator = void 0; + node.setExternalModuleIndicator = void 0; + node.pragmas = void 0; + node.checkJsDirective = void 0; + node.referencedFiles = void 0; + node.typeReferenceDirectives = void 0; + node.libReferenceDirectives = void 0; + node.amdDependencies = void 0; + node.commentDirectives = void 0; + node.identifiers = void 0; + node.packageJsonLocations = void 0; + node.packageJsonScope = void 0; + node.imports = void 0; + node.moduleAugmentations = void 0; + node.ambientModuleNames = void 0; + node.classifiableNames = void 0; + node.impliedNodeFormat = void 0; + return node; + } + function createRedirectedSourceFile(redirectInfo) { + const node = Object.create(redirectInfo.redirectTarget); + Object.defineProperties(node, { + id: { + get() { + return this.redirectInfo.redirectTarget.id; + }, + set(value) { + this.redirectInfo.redirectTarget.id = value; + } + }, + symbol: { + get() { + return this.redirectInfo.redirectTarget.symbol; + }, + set(value) { + this.redirectInfo.redirectTarget.symbol = value; + } + } + }); + node.redirectInfo = redirectInfo; + return node; + } + function cloneRedirectedSourceFile(source) { + const node = createRedirectedSourceFile(source.redirectInfo); + node.flags |= source.flags & ~16 /* Synthesized */; + node.fileName = source.fileName; + node.path = source.path; + node.resolvedPath = source.resolvedPath; + node.originalFileName = source.originalFileName; + node.packageJsonLocations = source.packageJsonLocations; + node.packageJsonScope = source.packageJsonScope; + node.emitNode = void 0; + return node; + } + function cloneSourceFileWorker(source) { + const node = baseFactory2.createBaseSourceFileNode(308 /* SourceFile */); + node.flags |= source.flags & ~16 /* Synthesized */; + for (const p in source) { + if (hasProperty(node, p) || !hasProperty(source, p)) { + continue; + } + if (p === "emitNode") { + node.emitNode = void 0; + continue; + } + node[p] = source[p]; + } + return node; + } + function cloneSourceFile(source) { + const node = source.redirectInfo ? cloneRedirectedSourceFile(source) : cloneSourceFileWorker(source); + setOriginal(node, source); + return node; + } + function cloneSourceFileWithChanges(source, statements, isDeclarationFile, referencedFiles, typeReferences, hasNoDefaultLib, libReferences) { + const node = cloneSourceFile(source); + node.statements = createNodeArray(statements); + node.isDeclarationFile = isDeclarationFile; + node.referencedFiles = referencedFiles; + node.typeReferenceDirectives = typeReferences; + node.hasNoDefaultLib = hasNoDefaultLib; + node.libReferenceDirectives = libReferences; + node.transformFlags = propagateChildrenFlags(node.statements) | propagateChildFlags(node.endOfFileToken); + return node; + } + function updateSourceFile2(node, statements, isDeclarationFile = node.isDeclarationFile, referencedFiles = node.referencedFiles, typeReferenceDirectives = node.typeReferenceDirectives, hasNoDefaultLib = node.hasNoDefaultLib, libReferenceDirectives = node.libReferenceDirectives) { + return node.statements !== statements || node.isDeclarationFile !== isDeclarationFile || node.referencedFiles !== referencedFiles || node.typeReferenceDirectives !== typeReferenceDirectives || node.hasNoDefaultLib !== hasNoDefaultLib || node.libReferenceDirectives !== libReferenceDirectives ? update(cloneSourceFileWithChanges(node, statements, isDeclarationFile, referencedFiles, typeReferenceDirectives, hasNoDefaultLib, libReferenceDirectives), node) : node; + } + function createBundle(sourceFiles) { + const node = createBaseNode(309 /* Bundle */); + node.sourceFiles = sourceFiles; + node.syntheticFileReferences = void 0; + node.syntheticTypeReferences = void 0; + node.syntheticLibReferences = void 0; + node.hasNoDefaultLib = void 0; + return node; + } + function updateBundle(node, sourceFiles) { + return node.sourceFiles !== sourceFiles ? update(createBundle(sourceFiles), node) : node; + } + function createSyntheticExpression(type, isSpread = false, tupleNameSource) { + const node = createBaseNode(238 /* SyntheticExpression */); + node.type = type; + node.isSpread = isSpread; + node.tupleNameSource = tupleNameSource; + return node; + } + function createSyntaxList3(children) { + const node = createBaseNode(353 /* SyntaxList */); + node._children = children; + return node; + } + function createNotEmittedStatement(original) { + const node = createBaseNode(354 /* NotEmittedStatement */); + node.original = original; + setTextRange(node, original); + return node; + } + function createPartiallyEmittedExpression(expression, original) { + const node = createBaseNode(356 /* PartiallyEmittedExpression */); + node.expression = expression; + node.original = original; + node.transformFlags |= propagateChildFlags(node.expression) | 1 /* ContainsTypeScript */; + setTextRange(node, original); + return node; + } + function updatePartiallyEmittedExpression(node, expression) { + return node.expression !== expression ? update(createPartiallyEmittedExpression(expression, node.original), node) : node; + } + function createNotEmittedTypeElement() { + return createBaseNode(355 /* NotEmittedTypeElement */); + } + function flattenCommaElements(node) { + if (nodeIsSynthesized(node) && !isParseTreeNode(node) && !node.original && !node.emitNode && !node.id) { + if (isCommaListExpression(node)) { + return node.elements; + } + if (isBinaryExpression(node) && isCommaToken(node.operatorToken)) { + return [node.left, node.right]; + } + } + return node; + } + function createCommaListExpression(elements) { + const node = createBaseNode(357 /* CommaListExpression */); + node.elements = createNodeArray(sameFlatMap(elements, flattenCommaElements)); + node.transformFlags |= propagateChildrenFlags(node.elements); + return node; + } + function updateCommaListExpression(node, elements) { + return node.elements !== elements ? update(createCommaListExpression(elements), node) : node; + } + function createSyntheticReferenceExpression(expression, thisArg) { + const node = createBaseNode(358 /* SyntheticReferenceExpression */); + node.expression = expression; + node.thisArg = thisArg; + node.transformFlags |= propagateChildFlags(node.expression) | propagateChildFlags(node.thisArg); + return node; + } + function updateSyntheticReferenceExpression(node, expression, thisArg) { + return node.expression !== expression || node.thisArg !== thisArg ? update(createSyntheticReferenceExpression(expression, thisArg), node) : node; + } + function cloneGeneratedIdentifier(node) { + const clone2 = createBaseIdentifier(node.escapedText); + clone2.flags |= node.flags & ~16 /* Synthesized */; + clone2.transformFlags = node.transformFlags; + setOriginal(clone2, node); + setIdentifierAutoGenerate(clone2, { ...node.emitNode.autoGenerate }); + return clone2; + } + function cloneIdentifier(node) { + const clone2 = createBaseIdentifier(node.escapedText); + clone2.flags |= node.flags & ~16 /* Synthesized */; + clone2.jsDoc = node.jsDoc; + clone2.flowNode = node.flowNode; + clone2.symbol = node.symbol; + clone2.transformFlags = node.transformFlags; + setOriginal(clone2, node); + const typeArguments = getIdentifierTypeArguments(node); + if (typeArguments) setIdentifierTypeArguments(clone2, typeArguments); + return clone2; + } + function cloneGeneratedPrivateIdentifier(node) { + const clone2 = createBasePrivateIdentifier(node.escapedText); + clone2.flags |= node.flags & ~16 /* Synthesized */; + clone2.transformFlags = node.transformFlags; + setOriginal(clone2, node); + setIdentifierAutoGenerate(clone2, { ...node.emitNode.autoGenerate }); + return clone2; + } + function clonePrivateIdentifier(node) { + const clone2 = createBasePrivateIdentifier(node.escapedText); + clone2.flags |= node.flags & ~16 /* Synthesized */; + clone2.transformFlags = node.transformFlags; + setOriginal(clone2, node); + return clone2; + } + function cloneNode(node) { + if (node === void 0) { + return node; + } + if (isSourceFile(node)) { + return cloneSourceFile(node); + } + if (isGeneratedIdentifier(node)) { + return cloneGeneratedIdentifier(node); + } + if (isIdentifier(node)) { + return cloneIdentifier(node); + } + if (isGeneratedPrivateIdentifier(node)) { + return cloneGeneratedPrivateIdentifier(node); + } + if (isPrivateIdentifier(node)) { + return clonePrivateIdentifier(node); + } + const clone2 = !isNodeKind(node.kind) ? baseFactory2.createBaseTokenNode(node.kind) : baseFactory2.createBaseNode(node.kind); + clone2.flags |= node.flags & ~16 /* Synthesized */; + clone2.transformFlags = node.transformFlags; + setOriginal(clone2, node); + for (const key in node) { + if (hasProperty(clone2, key) || !hasProperty(node, key)) { + continue; + } + clone2[key] = node[key]; + } + return clone2; + } + function createImmediatelyInvokedFunctionExpression(statements, param, paramValue) { + return createCallExpression( + createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + param ? [param] : [], + /*type*/ + void 0, + createBlock( + statements, + /*multiLine*/ + true + ) + ), + /*typeArguments*/ + void 0, + /*argumentsArray*/ + paramValue ? [paramValue] : [] + ); + } + function createImmediatelyInvokedArrowFunction(statements, param, paramValue) { + return createCallExpression( + createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + param ? [param] : [], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + createBlock( + statements, + /*multiLine*/ + true + ) + ), + /*typeArguments*/ + void 0, + /*argumentsArray*/ + paramValue ? [paramValue] : [] + ); + } + function createVoidZero() { + return createVoidExpression(createNumericLiteral("0")); + } + function createExportDefault(expression) { + return createExportAssignment2( + /*modifiers*/ + void 0, + /*isExportEquals*/ + false, + expression + ); + } + function createExternalModuleExport(exportName) { + return createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + createNamedExports([ + createExportSpecifier( + /*isTypeOnly*/ + false, + /*propertyName*/ + void 0, + exportName + ) + ]) + ); + } + function createTypeCheck(value, tag) { + return tag === "null" ? factory2.createStrictEquality(value, createNull()) : tag === "undefined" ? factory2.createStrictEquality(value, createVoidZero()) : factory2.createStrictEquality(createTypeOfExpression(value), createStringLiteral(tag)); + } + function createIsNotTypeCheck(value, tag) { + return tag === "null" ? factory2.createStrictInequality(value, createNull()) : tag === "undefined" ? factory2.createStrictInequality(value, createVoidZero()) : factory2.createStrictInequality(createTypeOfExpression(value), createStringLiteral(tag)); + } + function createMethodCall(object, methodName, argumentsList) { + if (isCallChain(object)) { + return createCallChain( + createPropertyAccessChain( + object, + /*questionDotToken*/ + void 0, + methodName + ), + /*questionDotToken*/ + void 0, + /*typeArguments*/ + void 0, + argumentsList + ); + } + return createCallExpression( + createPropertyAccessExpression(object, methodName), + /*typeArguments*/ + void 0, + argumentsList + ); + } + function createFunctionBindCall(target, thisArg, argumentsList) { + return createMethodCall(target, "bind", [thisArg, ...argumentsList]); + } + function createFunctionCallCall(target, thisArg, argumentsList) { + return createMethodCall(target, "call", [thisArg, ...argumentsList]); + } + function createFunctionApplyCall(target, thisArg, argumentsExpression) { + return createMethodCall(target, "apply", [thisArg, argumentsExpression]); + } + function createGlobalMethodCall(globalObjectName, methodName, argumentsList) { + return createMethodCall(createIdentifier(globalObjectName), methodName, argumentsList); + } + function createArraySliceCall(array, start) { + return createMethodCall(array, "slice", start === void 0 ? [] : [asExpression(start)]); + } + function createArrayConcatCall(array, argumentsList) { + return createMethodCall(array, "concat", argumentsList); + } + function createObjectDefinePropertyCall(target, propertyName, attributes) { + return createGlobalMethodCall("Object", "defineProperty", [target, asExpression(propertyName), attributes]); + } + function createObjectGetOwnPropertyDescriptorCall(target, propertyName) { + return createGlobalMethodCall("Object", "getOwnPropertyDescriptor", [target, asExpression(propertyName)]); + } + function createReflectGetCall(target, propertyKey, receiver) { + return createGlobalMethodCall("Reflect", "get", receiver ? [target, propertyKey, receiver] : [target, propertyKey]); + } + function createReflectSetCall(target, propertyKey, value, receiver) { + return createGlobalMethodCall("Reflect", "set", receiver ? [target, propertyKey, value, receiver] : [target, propertyKey, value]); + } + function tryAddPropertyAssignment(properties, propertyName, expression) { + if (expression) { + properties.push(createPropertyAssignment(propertyName, expression)); + return true; + } + return false; + } + function createPropertyDescriptor(attributes, singleLine) { + const properties = []; + tryAddPropertyAssignment(properties, "enumerable", asExpression(attributes.enumerable)); + tryAddPropertyAssignment(properties, "configurable", asExpression(attributes.configurable)); + let isData = tryAddPropertyAssignment(properties, "writable", asExpression(attributes.writable)); + isData = tryAddPropertyAssignment(properties, "value", attributes.value) || isData; + let isAccessor2 = tryAddPropertyAssignment(properties, "get", attributes.get); + isAccessor2 = tryAddPropertyAssignment(properties, "set", attributes.set) || isAccessor2; + Debug.assert(!(isData && isAccessor2), "A PropertyDescriptor may not be both an accessor descriptor and a data descriptor."); + return createObjectLiteralExpression(properties, !singleLine); + } + function updateOuterExpression(outerExpression, expression) { + switch (outerExpression.kind) { + case 218 /* ParenthesizedExpression */: + return updateParenthesizedExpression(outerExpression, expression); + case 217 /* TypeAssertionExpression */: + return updateTypeAssertion(outerExpression, outerExpression.type, expression); + case 235 /* AsExpression */: + return updateAsExpression(outerExpression, expression, outerExpression.type); + case 239 /* SatisfiesExpression */: + return updateSatisfiesExpression(outerExpression, expression, outerExpression.type); + case 236 /* NonNullExpression */: + return updateNonNullExpression(outerExpression, expression); + case 234 /* ExpressionWithTypeArguments */: + return updateExpressionWithTypeArguments(outerExpression, expression, outerExpression.typeArguments); + case 356 /* PartiallyEmittedExpression */: + return updatePartiallyEmittedExpression(outerExpression, expression); + } + } + function isIgnorableParen(node) { + return isParenthesizedExpression(node) && nodeIsSynthesized(node) && nodeIsSynthesized(getSourceMapRange(node)) && nodeIsSynthesized(getCommentRange(node)) && !some(getSyntheticLeadingComments(node)) && !some(getSyntheticTrailingComments(node)); + } + function restoreOuterExpressions(outerExpression, innerExpression, kinds = 63 /* All */) { + if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) { + return updateOuterExpression( + outerExpression, + restoreOuterExpressions(outerExpression.expression, innerExpression) + ); + } + return innerExpression; + } + function restoreEnclosingLabel(node, outermostLabeledStatement, afterRestoreLabelCallback) { + if (!outermostLabeledStatement) { + return node; + } + const updated = updateLabeledStatement( + outermostLabeledStatement, + outermostLabeledStatement.label, + isLabeledStatement(outermostLabeledStatement.statement) ? restoreEnclosingLabel(node, outermostLabeledStatement.statement) : node + ); + if (afterRestoreLabelCallback) { + afterRestoreLabelCallback(outermostLabeledStatement); + } + return updated; + } + function shouldBeCapturedInTempVariable(node, cacheIdentifiers) { + const target = skipParentheses(node); + switch (target.kind) { + case 80 /* Identifier */: + return cacheIdentifiers; + case 110 /* ThisKeyword */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 11 /* StringLiteral */: + return false; + case 210 /* ArrayLiteralExpression */: + const elements = target.elements; + if (elements.length === 0) { + return false; + } + return true; + case 211 /* ObjectLiteralExpression */: + return target.properties.length > 0; + default: + return true; + } + } + function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers = false) { + const callee = skipOuterExpressions(expression, 63 /* All */); + let thisArg; + let target; + if (isSuperProperty(callee)) { + thisArg = createThis(); + target = callee; + } else if (isSuperKeyword(callee)) { + thisArg = createThis(); + target = languageVersion !== void 0 && languageVersion < 2 /* ES2015 */ ? setTextRange(createIdentifier("_super"), callee) : callee; + } else if (getEmitFlags(callee) & 8192 /* HelperName */) { + thisArg = createVoidZero(); + target = parenthesizerRules().parenthesizeLeftSideOfAccess( + callee, + /*optionalChain*/ + false + ); + } else if (isPropertyAccessExpression(callee)) { + if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) { + thisArg = createTempVariable(recordTempVariable); + target = createPropertyAccessExpression( + setTextRange( + factory2.createAssignment( + thisArg, + callee.expression + ), + callee.expression + ), + callee.name + ); + setTextRange(target, callee); + } else { + thisArg = callee.expression; + target = callee; + } + } else if (isElementAccessExpression(callee)) { + if (shouldBeCapturedInTempVariable(callee.expression, cacheIdentifiers)) { + thisArg = createTempVariable(recordTempVariable); + target = createElementAccessExpression( + setTextRange( + factory2.createAssignment( + thisArg, + callee.expression + ), + callee.expression + ), + callee.argumentExpression + ); + setTextRange(target, callee); + } else { + thisArg = callee.expression; + target = callee; + } + } else { + thisArg = createVoidZero(); + target = parenthesizerRules().parenthesizeLeftSideOfAccess( + expression, + /*optionalChain*/ + false + ); + } + return { target, thisArg }; + } + function createAssignmentTargetWrapper(paramName, expression) { + return createPropertyAccessExpression( + // Explicit parens required because of v8 regression (https://bugs.chromium.org/p/v8/issues/detail?id=9560) + createParenthesizedExpression( + createObjectLiteralExpression([ + createSetAccessorDeclaration( + /*modifiers*/ + void 0, + "value", + [createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + paramName, + /*questionToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + )], + createBlock([ + createExpressionStatement(expression) + ]) + ) + ]) + ), + "value" + ); + } + function inlineExpressions(expressions) { + return expressions.length > 10 ? createCommaListExpression(expressions) : reduceLeft(expressions, factory2.createComma); + } + function getName(node, allowComments, allowSourceMaps, emitFlags = 0, ignoreAssignedName) { + const nodeName = ignoreAssignedName ? node && getNonAssignedNameOfDeclaration(node) : getNameOfDeclaration(node); + if (nodeName && isIdentifier(nodeName) && !isGeneratedIdentifier(nodeName)) { + const name = setParent(setTextRange(cloneNode(nodeName), nodeName), nodeName.parent); + emitFlags |= getEmitFlags(nodeName); + if (!allowSourceMaps) emitFlags |= 96 /* NoSourceMap */; + if (!allowComments) emitFlags |= 3072 /* NoComments */; + if (emitFlags) setEmitFlags(name, emitFlags); + return name; + } + return getGeneratedNameForNode(node); + } + function getInternalName(node, allowComments, allowSourceMaps) { + return getName(node, allowComments, allowSourceMaps, 32768 /* LocalName */ | 65536 /* InternalName */); + } + function getLocalName(node, allowComments, allowSourceMaps, ignoreAssignedName) { + return getName(node, allowComments, allowSourceMaps, 32768 /* LocalName */, ignoreAssignedName); + } + function getExportName(node, allowComments, allowSourceMaps) { + return getName(node, allowComments, allowSourceMaps, 16384 /* ExportName */); + } + function getDeclarationName(node, allowComments, allowSourceMaps) { + return getName(node, allowComments, allowSourceMaps); + } + function getNamespaceMemberName(ns, name, allowComments, allowSourceMaps) { + const qualifiedName = createPropertyAccessExpression(ns, nodeIsSynthesized(name) ? name : cloneNode(name)); + setTextRange(qualifiedName, name); + let emitFlags = 0; + if (!allowSourceMaps) emitFlags |= 96 /* NoSourceMap */; + if (!allowComments) emitFlags |= 3072 /* NoComments */; + if (emitFlags) setEmitFlags(qualifiedName, emitFlags); + return qualifiedName; + } + function getExternalModuleOrNamespaceExportName(ns, node, allowComments, allowSourceMaps) { + if (ns && hasSyntacticModifier(node, 32 /* Export */)) { + return getNamespaceMemberName(ns, getName(node), allowComments, allowSourceMaps); + } + return getExportName(node, allowComments, allowSourceMaps); + } + function copyPrologue(source, target, ensureUseStrict2, visitor) { + const offset = copyStandardPrologue(source, target, 0, ensureUseStrict2); + return copyCustomPrologue(source, target, offset, visitor); + } + function isUseStrictPrologue2(node) { + return isStringLiteral(node.expression) && node.expression.text === "use strict"; + } + function createUseStrictPrologue() { + return startOnNewLine(createExpressionStatement(createStringLiteral("use strict"))); + } + function copyStandardPrologue(source, target, statementOffset = 0, ensureUseStrict2) { + Debug.assert(target.length === 0, "Prologue directives should be at the first statement in the target statements array"); + let foundUseStrict = false; + const numStatements = source.length; + while (statementOffset < numStatements) { + const statement = source[statementOffset]; + if (isPrologueDirective(statement)) { + if (isUseStrictPrologue2(statement)) { + foundUseStrict = true; + } + target.push(statement); + } else { + break; + } + statementOffset++; + } + if (ensureUseStrict2 && !foundUseStrict) { + target.push(createUseStrictPrologue()); + } + return statementOffset; + } + function copyCustomPrologue(source, target, statementOffset, visitor, filter2 = returnTrue) { + const numStatements = source.length; + while (statementOffset !== void 0 && statementOffset < numStatements) { + const statement = source[statementOffset]; + if (getEmitFlags(statement) & 2097152 /* CustomPrologue */ && filter2(statement)) { + append(target, visitor ? visitNode(statement, visitor, isStatement) : statement); + } else { + break; + } + statementOffset++; + } + return statementOffset; + } + function ensureUseStrict(statements) { + const foundUseStrict = findUseStrictPrologue(statements); + if (!foundUseStrict) { + return setTextRange(createNodeArray([createUseStrictPrologue(), ...statements]), statements); + } + return statements; + } + function liftToBlock(nodes) { + Debug.assert(every(nodes, isStatementOrBlock), "Cannot lift nodes to a Block."); + return singleOrUndefined(nodes) || createBlock(nodes); + } + function findSpanEnd(array, test, start) { + let i = start; + while (i < array.length && test(array[i])) { + i++; + } + return i; + } + function mergeLexicalEnvironment(statements, declarations) { + if (!some(declarations)) { + return statements; + } + const leftStandardPrologueEnd = findSpanEnd(statements, isPrologueDirective, 0); + const leftHoistedFunctionsEnd = findSpanEnd(statements, isHoistedFunction, leftStandardPrologueEnd); + const leftHoistedVariablesEnd = findSpanEnd(statements, isHoistedVariableStatement, leftHoistedFunctionsEnd); + const rightStandardPrologueEnd = findSpanEnd(declarations, isPrologueDirective, 0); + const rightHoistedFunctionsEnd = findSpanEnd(declarations, isHoistedFunction, rightStandardPrologueEnd); + const rightHoistedVariablesEnd = findSpanEnd(declarations, isHoistedVariableStatement, rightHoistedFunctionsEnd); + const rightCustomPrologueEnd = findSpanEnd(declarations, isCustomPrologue, rightHoistedVariablesEnd); + Debug.assert(rightCustomPrologueEnd === declarations.length, "Expected declarations to be valid standard or custom prologues"); + const left = isNodeArray(statements) ? statements.slice() : statements; + if (rightCustomPrologueEnd > rightHoistedVariablesEnd) { + left.splice(leftHoistedVariablesEnd, 0, ...declarations.slice(rightHoistedVariablesEnd, rightCustomPrologueEnd)); + } + if (rightHoistedVariablesEnd > rightHoistedFunctionsEnd) { + left.splice(leftHoistedFunctionsEnd, 0, ...declarations.slice(rightHoistedFunctionsEnd, rightHoistedVariablesEnd)); + } + if (rightHoistedFunctionsEnd > rightStandardPrologueEnd) { + left.splice(leftStandardPrologueEnd, 0, ...declarations.slice(rightStandardPrologueEnd, rightHoistedFunctionsEnd)); + } + if (rightStandardPrologueEnd > 0) { + if (leftStandardPrologueEnd === 0) { + left.splice(0, 0, ...declarations.slice(0, rightStandardPrologueEnd)); + } else { + const leftPrologues = /* @__PURE__ */ new Map(); + for (let i = 0; i < leftStandardPrologueEnd; i++) { + const leftPrologue = statements[i]; + leftPrologues.set(leftPrologue.expression.text, true); + } + for (let i = rightStandardPrologueEnd - 1; i >= 0; i--) { + const rightPrologue = declarations[i]; + if (!leftPrologues.has(rightPrologue.expression.text)) { + left.unshift(rightPrologue); + } + } + } + } + if (isNodeArray(statements)) { + return setTextRange(createNodeArray(left, statements.hasTrailingComma), statements); + } + return statements; + } + function replaceModifiers(node, modifiers) { + let modifierArray; + if (typeof modifiers === "number") { + modifierArray = createModifiersFromModifierFlags(modifiers); + } else { + modifierArray = modifiers; + } + return isTypeParameterDeclaration(node) ? updateTypeParameterDeclaration(node, modifierArray, node.name, node.constraint, node.default) : isParameter(node) ? updateParameterDeclaration(node, modifierArray, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) : isConstructorTypeNode(node) ? updateConstructorTypeNode1(node, modifierArray, node.typeParameters, node.parameters, node.type) : isPropertySignature(node) ? updatePropertySignature(node, modifierArray, node.name, node.questionToken, node.type) : isPropertyDeclaration(node) ? updatePropertyDeclaration2(node, modifierArray, node.name, node.questionToken ?? node.exclamationToken, node.type, node.initializer) : isMethodSignature(node) ? updateMethodSignature(node, modifierArray, node.name, node.questionToken, node.typeParameters, node.parameters, node.type) : isMethodDeclaration(node) ? updateMethodDeclaration(node, modifierArray, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) : isConstructorDeclaration(node) ? updateConstructorDeclaration(node, modifierArray, node.parameters, node.body) : isGetAccessorDeclaration(node) ? updateGetAccessorDeclaration(node, modifierArray, node.name, node.parameters, node.type, node.body) : isSetAccessorDeclaration(node) ? updateSetAccessorDeclaration(node, modifierArray, node.name, node.parameters, node.body) : isIndexSignatureDeclaration(node) ? updateIndexSignature(node, modifierArray, node.parameters, node.type) : isFunctionExpression(node) ? updateFunctionExpression(node, modifierArray, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) : isArrowFunction(node) ? updateArrowFunction(node, modifierArray, node.typeParameters, node.parameters, node.type, node.equalsGreaterThanToken, node.body) : isClassExpression(node) ? updateClassExpression(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) : isVariableStatement(node) ? updateVariableStatement(node, modifierArray, node.declarationList) : isFunctionDeclaration(node) ? updateFunctionDeclaration(node, modifierArray, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) : isClassDeclaration(node) ? updateClassDeclaration(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) : isInterfaceDeclaration(node) ? updateInterfaceDeclaration(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) : isTypeAliasDeclaration(node) ? updateTypeAliasDeclaration(node, modifierArray, node.name, node.typeParameters, node.type) : isEnumDeclaration(node) ? updateEnumDeclaration(node, modifierArray, node.name, node.members) : isModuleDeclaration(node) ? updateModuleDeclaration(node, modifierArray, node.name, node.body) : isImportEqualsDeclaration(node) ? updateImportEqualsDeclaration(node, modifierArray, node.isTypeOnly, node.name, node.moduleReference) : isImportDeclaration(node) ? updateImportDeclaration(node, modifierArray, node.importClause, node.moduleSpecifier, node.attributes) : isExportAssignment(node) ? updateExportAssignment(node, modifierArray, node.expression) : isExportDeclaration(node) ? updateExportDeclaration(node, modifierArray, node.isTypeOnly, node.exportClause, node.moduleSpecifier, node.attributes) : Debug.assertNever(node); + } + function replaceDecoratorsAndModifiers(node, modifierArray) { + return isParameter(node) ? updateParameterDeclaration(node, modifierArray, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) : isPropertyDeclaration(node) ? updatePropertyDeclaration2(node, modifierArray, node.name, node.questionToken ?? node.exclamationToken, node.type, node.initializer) : isMethodDeclaration(node) ? updateMethodDeclaration(node, modifierArray, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) : isGetAccessorDeclaration(node) ? updateGetAccessorDeclaration(node, modifierArray, node.name, node.parameters, node.type, node.body) : isSetAccessorDeclaration(node) ? updateSetAccessorDeclaration(node, modifierArray, node.name, node.parameters, node.body) : isClassExpression(node) ? updateClassExpression(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) : isClassDeclaration(node) ? updateClassDeclaration(node, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) : Debug.assertNever(node); + } + function replacePropertyName(node, name) { + switch (node.kind) { + case 178 /* GetAccessor */: + return updateGetAccessorDeclaration(node, node.modifiers, name, node.parameters, node.type, node.body); + case 179 /* SetAccessor */: + return updateSetAccessorDeclaration(node, node.modifiers, name, node.parameters, node.body); + case 175 /* MethodDeclaration */: + return updateMethodDeclaration(node, node.modifiers, node.asteriskToken, name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body); + case 174 /* MethodSignature */: + return updateMethodSignature(node, node.modifiers, name, node.questionToken, node.typeParameters, node.parameters, node.type); + case 173 /* PropertyDeclaration */: + return updatePropertyDeclaration2(node, node.modifiers, name, node.questionToken ?? node.exclamationToken, node.type, node.initializer); + case 172 /* PropertySignature */: + return updatePropertySignature(node, node.modifiers, name, node.questionToken, node.type); + case 304 /* PropertyAssignment */: + return updatePropertyAssignment(node, name, node.initializer); + } + } + function asNodeArray(array) { + return array ? createNodeArray(array) : void 0; + } + function asName(name) { + return typeof name === "string" ? createIdentifier(name) : name; + } + function asExpression(value) { + return typeof value === "string" ? createStringLiteral(value) : typeof value === "number" ? createNumericLiteral(value) : typeof value === "boolean" ? value ? createTrue() : createFalse() : value; + } + function asInitializer(node) { + return node && parenthesizerRules().parenthesizeExpressionForDisallowedComma(node); + } + function asToken(value) { + return typeof value === "number" ? createToken(value) : value; + } + function asEmbeddedStatement(statement) { + return statement && isNotEmittedStatement(statement) ? setTextRange(setOriginal(createEmptyStatement(), statement), statement) : statement; + } + function asVariableDeclaration(variableDeclaration) { + if (typeof variableDeclaration === "string" || variableDeclaration && !isVariableDeclaration(variableDeclaration)) { + return createVariableDeclaration( + variableDeclaration, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + } + return variableDeclaration; + } + function update(updated, original) { + if (updated !== original) { + setOriginal(updated, original); + setTextRange(updated, original); + } + return updated; + } +} +function getDefaultTagNameForKind(kind) { + switch (kind) { + case 345 /* JSDocTypeTag */: + return "type"; + case 343 /* JSDocReturnTag */: + return "returns"; + case 344 /* JSDocThisTag */: + return "this"; + case 341 /* JSDocEnumTag */: + return "enum"; + case 331 /* JSDocAuthorTag */: + return "author"; + case 333 /* JSDocClassTag */: + return "class"; + case 334 /* JSDocPublicTag */: + return "public"; + case 335 /* JSDocPrivateTag */: + return "private"; + case 336 /* JSDocProtectedTag */: + return "protected"; + case 337 /* JSDocReadonlyTag */: + return "readonly"; + case 338 /* JSDocOverrideTag */: + return "override"; + case 346 /* JSDocTemplateTag */: + return "template"; + case 347 /* JSDocTypedefTag */: + return "typedef"; + case 342 /* JSDocParameterTag */: + return "param"; + case 349 /* JSDocPropertyTag */: + return "prop"; + case 339 /* JSDocCallbackTag */: + return "callback"; + case 340 /* JSDocOverloadTag */: + return "overload"; + case 329 /* JSDocAugmentsTag */: + return "augments"; + case 330 /* JSDocImplementsTag */: + return "implements"; + case 352 /* JSDocImportTag */: + return "import"; + default: + return Debug.fail(`Unsupported kind: ${Debug.formatSyntaxKind(kind)}`); + } +} +var rawTextScanner; +var invalidValueSentinel = {}; +function getCookedText(kind, rawText) { + if (!rawTextScanner) { + rawTextScanner = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + false, + 0 /* Standard */ + ); + } + switch (kind) { + case 15 /* NoSubstitutionTemplateLiteral */: + rawTextScanner.setText("`" + rawText + "`"); + break; + case 16 /* TemplateHead */: + rawTextScanner.setText("`" + rawText + "${"); + break; + case 17 /* TemplateMiddle */: + rawTextScanner.setText("}" + rawText + "${"); + break; + case 18 /* TemplateTail */: + rawTextScanner.setText("}" + rawText + "`"); + break; + } + let token = rawTextScanner.scan(); + if (token === 20 /* CloseBraceToken */) { + token = rawTextScanner.reScanTemplateToken( + /*isTaggedTemplate*/ + false + ); + } + if (rawTextScanner.isUnterminated()) { + rawTextScanner.setText(void 0); + return invalidValueSentinel; + } + let tokenValue; + switch (token) { + case 15 /* NoSubstitutionTemplateLiteral */: + case 16 /* TemplateHead */: + case 17 /* TemplateMiddle */: + case 18 /* TemplateTail */: + tokenValue = rawTextScanner.getTokenValue(); + break; + } + if (tokenValue === void 0 || rawTextScanner.scan() !== 1 /* EndOfFileToken */) { + rawTextScanner.setText(void 0); + return invalidValueSentinel; + } + rawTextScanner.setText(void 0); + return tokenValue; +} +function propagateNameFlags(node) { + return node && isIdentifier(node) ? propagateIdentifierNameFlags(node) : propagateChildFlags(node); +} +function propagateIdentifierNameFlags(node) { + return propagateChildFlags(node) & ~67108864 /* ContainsPossibleTopLevelAwait */; +} +function propagatePropertyNameFlagsOfChild(node, transformFlags) { + return transformFlags | node.transformFlags & 134234112 /* PropertyNamePropagatingFlags */; +} +function propagateChildFlags(child) { + if (!child) return 0 /* None */; + const childFlags = child.transformFlags & ~getTransformFlagsSubtreeExclusions(child.kind); + return isNamedDeclaration(child) && isPropertyName(child.name) ? propagatePropertyNameFlagsOfChild(child.name, childFlags) : childFlags; +} +function propagateChildrenFlags(children) { + return children ? children.transformFlags : 0 /* None */; +} +function aggregateChildrenFlags(children) { + let subtreeFlags = 0 /* None */; + for (const child of children) { + subtreeFlags |= propagateChildFlags(child); + } + children.transformFlags = subtreeFlags; +} +function getTransformFlagsSubtreeExclusions(kind) { + if (kind >= 183 /* FirstTypeNode */ && kind <= 206 /* LastTypeNode */) { + return -2 /* TypeExcludes */; + } + switch (kind) { + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 210 /* ArrayLiteralExpression */: + return -2147450880 /* ArrayLiteralOrCallOrNewExcludes */; + case 268 /* ModuleDeclaration */: + return -1941676032 /* ModuleExcludes */; + case 170 /* Parameter */: + return -2147483648 /* ParameterExcludes */; + case 220 /* ArrowFunction */: + return -2072174592 /* ArrowFunctionExcludes */; + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + return -1937940480 /* FunctionExcludes */; + case 262 /* VariableDeclarationList */: + return -2146893824 /* VariableDeclarationListExcludes */; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return -2147344384 /* ClassExcludes */; + case 177 /* Constructor */: + return -1937948672 /* ConstructorExcludes */; + case 173 /* PropertyDeclaration */: + return -2013249536 /* PropertyExcludes */; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return -2005057536 /* MethodOrAccessorExcludes */; + case 133 /* AnyKeyword */: + case 150 /* NumberKeyword */: + case 163 /* BigIntKeyword */: + case 146 /* NeverKeyword */: + case 154 /* StringKeyword */: + case 151 /* ObjectKeyword */: + case 136 /* BooleanKeyword */: + case 155 /* SymbolKeyword */: + case 116 /* VoidKeyword */: + case 169 /* TypeParameter */: + case 172 /* PropertySignature */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + return -2 /* TypeExcludes */; + case 211 /* ObjectLiteralExpression */: + return -2147278848 /* ObjectLiteralExcludes */; + case 300 /* CatchClause */: + return -2147418112 /* CatchClauseExcludes */; + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + return -2147450880 /* BindingPatternExcludes */; + case 217 /* TypeAssertionExpression */: + case 239 /* SatisfiesExpression */: + case 235 /* AsExpression */: + case 356 /* PartiallyEmittedExpression */: + case 218 /* ParenthesizedExpression */: + case 108 /* SuperKeyword */: + return -2147483648 /* OuterExpressionExcludes */; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return -2147483648 /* PropertyAccessExcludes */; + default: + return -2147483648 /* NodeExcludes */; + } +} +var baseFactory = createBaseNodeFactory(); +function makeSynthetic(node) { + node.flags |= 16 /* Synthesized */; + return node; +} +var syntheticFactory = { + createBaseSourceFileNode: (kind) => makeSynthetic(baseFactory.createBaseSourceFileNode(kind)), + createBaseIdentifierNode: (kind) => makeSynthetic(baseFactory.createBaseIdentifierNode(kind)), + createBasePrivateIdentifierNode: (kind) => makeSynthetic(baseFactory.createBasePrivateIdentifierNode(kind)), + createBaseTokenNode: (kind) => makeSynthetic(baseFactory.createBaseTokenNode(kind)), + createBaseNode: (kind) => makeSynthetic(baseFactory.createBaseNode(kind)) +}; +var factory = createNodeFactory(4 /* NoIndentationOnFreshPropertyAccess */, syntheticFactory); +var SourceMapSource2; +function createSourceMapSource(fileName, text, skipTrivia2) { + return new (SourceMapSource2 || (SourceMapSource2 = objectAllocator.getSourceMapSourceConstructor()))(fileName, text, skipTrivia2); +} +function setOriginalNode(node, original) { + if (node.original !== original) { + node.original = original; + if (original) { + const emitNode = original.emitNode; + if (emitNode) node.emitNode = mergeEmitNode(emitNode, node.emitNode); + } + } + return node; +} +function mergeEmitNode(sourceEmitNode, destEmitNode) { + const { + flags, + internalFlags, + leadingComments, + trailingComments, + commentRange, + sourceMapRange, + tokenSourceMapRanges, + constantValue, + helpers, + startsOnNewLine, + snippetElement, + classThis, + assignedName + } = sourceEmitNode; + if (!destEmitNode) destEmitNode = {}; + if (flags) { + destEmitNode.flags = flags; + } + if (internalFlags) { + destEmitNode.internalFlags = internalFlags & ~8 /* Immutable */; + } + if (leadingComments) { + destEmitNode.leadingComments = addRange(leadingComments.slice(), destEmitNode.leadingComments); + } + if (trailingComments) { + destEmitNode.trailingComments = addRange(trailingComments.slice(), destEmitNode.trailingComments); + } + if (commentRange) { + destEmitNode.commentRange = commentRange; + } + if (sourceMapRange) { + destEmitNode.sourceMapRange = sourceMapRange; + } + if (tokenSourceMapRanges) { + destEmitNode.tokenSourceMapRanges = mergeTokenSourceMapRanges(tokenSourceMapRanges, destEmitNode.tokenSourceMapRanges); + } + if (constantValue !== void 0) { + destEmitNode.constantValue = constantValue; + } + if (helpers) { + for (const helper of helpers) { + destEmitNode.helpers = appendIfUnique(destEmitNode.helpers, helper); + } + } + if (startsOnNewLine !== void 0) { + destEmitNode.startsOnNewLine = startsOnNewLine; + } + if (snippetElement !== void 0) { + destEmitNode.snippetElement = snippetElement; + } + if (classThis) { + destEmitNode.classThis = classThis; + } + if (assignedName) { + destEmitNode.assignedName = assignedName; + } + return destEmitNode; +} +function mergeTokenSourceMapRanges(sourceRanges, destRanges) { + if (!destRanges) destRanges = []; + for (const key in sourceRanges) { + destRanges[key] = sourceRanges[key]; + } + return destRanges; +} + +// src/compiler/factory/emitNode.ts +function getOrCreateEmitNode(node) { + if (!node.emitNode) { + if (isParseTreeNode(node)) { + if (node.kind === 308 /* SourceFile */) { + return node.emitNode = { annotatedNodes: [node] }; + } + const sourceFile = getSourceFileOfNode(getParseTreeNode(getSourceFileOfNode(node))) ?? Debug.fail("Could not determine parsed source file."); + getOrCreateEmitNode(sourceFile).annotatedNodes.push(node); + } + node.emitNode = {}; + } else { + Debug.assert(!(node.emitNode.internalFlags & 8 /* Immutable */), "Invalid attempt to mutate an immutable node."); + } + return node.emitNode; +} +function disposeEmitNodes(sourceFile) { + var _a, _b; + const annotatedNodes = (_b = (_a = getSourceFileOfNode(getParseTreeNode(sourceFile))) == null ? void 0 : _a.emitNode) == null ? void 0 : _b.annotatedNodes; + if (annotatedNodes) { + for (const node of annotatedNodes) { + node.emitNode = void 0; + } + } +} +function removeAllComments(node) { + const emitNode = getOrCreateEmitNode(node); + emitNode.flags |= 3072 /* NoComments */; + emitNode.leadingComments = void 0; + emitNode.trailingComments = void 0; + return node; +} +function setEmitFlags(node, emitFlags) { + getOrCreateEmitNode(node).flags = emitFlags; + return node; +} +function addEmitFlags(node, emitFlags) { + const emitNode = getOrCreateEmitNode(node); + emitNode.flags = emitNode.flags | emitFlags; + return node; +} +function setInternalEmitFlags(node, emitFlags) { + getOrCreateEmitNode(node).internalFlags = emitFlags; + return node; +} +function addInternalEmitFlags(node, emitFlags) { + const emitNode = getOrCreateEmitNode(node); + emitNode.internalFlags = emitNode.internalFlags | emitFlags; + return node; +} +function getSourceMapRange(node) { + var _a; + return ((_a = node.emitNode) == null ? void 0 : _a.sourceMapRange) ?? node; +} +function setSourceMapRange(node, range) { + getOrCreateEmitNode(node).sourceMapRange = range; + return node; +} +function getTokenSourceMapRange(node, token) { + var _a, _b; + return (_b = (_a = node.emitNode) == null ? void 0 : _a.tokenSourceMapRanges) == null ? void 0 : _b[token]; +} +function setTokenSourceMapRange(node, token, range) { + const emitNode = getOrCreateEmitNode(node); + const tokenSourceMapRanges = emitNode.tokenSourceMapRanges ?? (emitNode.tokenSourceMapRanges = []); + tokenSourceMapRanges[token] = range; + return node; +} +function getStartsOnNewLine(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.startsOnNewLine; +} +function setStartsOnNewLine(node, newLine) { + getOrCreateEmitNode(node).startsOnNewLine = newLine; + return node; +} +function getCommentRange(node) { + var _a; + return ((_a = node.emitNode) == null ? void 0 : _a.commentRange) ?? node; +} +function setCommentRange(node, range) { + getOrCreateEmitNode(node).commentRange = range; + return node; +} +function getSyntheticLeadingComments(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.leadingComments; +} +function setSyntheticLeadingComments(node, comments) { + getOrCreateEmitNode(node).leadingComments = comments; + return node; +} +function addSyntheticLeadingComment(node, kind, text, hasTrailingNewLine) { + return setSyntheticLeadingComments(node, append(getSyntheticLeadingComments(node), { kind, pos: -1, end: -1, hasTrailingNewLine, text })); +} +function getSyntheticTrailingComments(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.trailingComments; +} +function setSyntheticTrailingComments(node, comments) { + getOrCreateEmitNode(node).trailingComments = comments; + return node; +} +function addSyntheticTrailingComment(node, kind, text, hasTrailingNewLine) { + return setSyntheticTrailingComments(node, append(getSyntheticTrailingComments(node), { kind, pos: -1, end: -1, hasTrailingNewLine, text })); +} +function moveSyntheticComments(node, original) { + setSyntheticLeadingComments(node, getSyntheticLeadingComments(original)); + setSyntheticTrailingComments(node, getSyntheticTrailingComments(original)); + const emit = getOrCreateEmitNode(original); + emit.leadingComments = void 0; + emit.trailingComments = void 0; + return node; +} +function getConstantValue(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.constantValue; +} +function setConstantValue(node, value) { + const emitNode = getOrCreateEmitNode(node); + emitNode.constantValue = value; + return node; +} +function addEmitHelper(node, helper) { + const emitNode = getOrCreateEmitNode(node); + emitNode.helpers = append(emitNode.helpers, helper); + return node; +} +function addEmitHelpers(node, helpers) { + if (some(helpers)) { + const emitNode = getOrCreateEmitNode(node); + for (const helper of helpers) { + emitNode.helpers = appendIfUnique(emitNode.helpers, helper); + } + } + return node; +} +function removeEmitHelper(node, helper) { + var _a; + const helpers = (_a = node.emitNode) == null ? void 0 : _a.helpers; + if (helpers) { + return orderedRemoveItem(helpers, helper); + } + return false; +} +function getEmitHelpers(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.helpers; +} +function moveEmitHelpers(source, target, predicate) { + const sourceEmitNode = source.emitNode; + const sourceEmitHelpers = sourceEmitNode && sourceEmitNode.helpers; + if (!some(sourceEmitHelpers)) return; + const targetEmitNode = getOrCreateEmitNode(target); + let helpersRemoved = 0; + for (let i = 0; i < sourceEmitHelpers.length; i++) { + const helper = sourceEmitHelpers[i]; + if (predicate(helper)) { + helpersRemoved++; + targetEmitNode.helpers = appendIfUnique(targetEmitNode.helpers, helper); + } else if (helpersRemoved > 0) { + sourceEmitHelpers[i - helpersRemoved] = helper; + } + } + if (helpersRemoved > 0) { + sourceEmitHelpers.length -= helpersRemoved; + } +} +function getSnippetElement(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.snippetElement; +} +function setSnippetElement(node, snippet) { + const emitNode = getOrCreateEmitNode(node); + emitNode.snippetElement = snippet; + return node; +} +function ignoreSourceNewlines(node) { + getOrCreateEmitNode(node).internalFlags |= 4 /* IgnoreSourceNewlines */; + return node; +} +function setTypeNode(node, type) { + const emitNode = getOrCreateEmitNode(node); + emitNode.typeNode = type; + return node; +} +function getTypeNode(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.typeNode; +} +function setIdentifierTypeArguments(node, typeArguments) { + getOrCreateEmitNode(node).identifierTypeArguments = typeArguments; + return node; +} +function getIdentifierTypeArguments(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.identifierTypeArguments; +} +function setIdentifierAutoGenerate(node, autoGenerate) { + getOrCreateEmitNode(node).autoGenerate = autoGenerate; + return node; +} +function getIdentifierAutoGenerate(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.autoGenerate; +} +function setIdentifierGeneratedImportReference(node, value) { + getOrCreateEmitNode(node).generatedImportReference = value; + return node; +} +function getIdentifierGeneratedImportReference(node) { + var _a; + return (_a = node.emitNode) == null ? void 0 : _a.generatedImportReference; +} + +// src/compiler/factory/emitHelpers.ts +var PrivateIdentifierKind = /* @__PURE__ */ ((PrivateIdentifierKind2) => { + PrivateIdentifierKind2["Field"] = "f"; + PrivateIdentifierKind2["Method"] = "m"; + PrivateIdentifierKind2["Accessor"] = "a"; + return PrivateIdentifierKind2; +})(PrivateIdentifierKind || {}); +function createEmitHelperFactory(context) { + const factory2 = context.factory; + const immutableTrue = memoize(() => setInternalEmitFlags(factory2.createTrue(), 8 /* Immutable */)); + const immutableFalse = memoize(() => setInternalEmitFlags(factory2.createFalse(), 8 /* Immutable */)); + return { + getUnscopedHelperName, + // TypeScript Helpers + createDecorateHelper, + createMetadataHelper, + createParamHelper, + // ES Decorators Helpers + createESDecorateHelper, + createRunInitializersHelper, + // ES2018 Helpers + createAssignHelper, + createAwaitHelper, + createAsyncGeneratorHelper, + createAsyncDelegatorHelper, + createAsyncValuesHelper, + // ES2018 Destructuring Helpers + createRestHelper, + // ES2017 Helpers + createAwaiterHelper, + // ES2015 Helpers + createExtendsHelper, + createTemplateObjectHelper, + createSpreadArrayHelper, + createPropKeyHelper, + createSetFunctionNameHelper, + // ES2015 Destructuring Helpers + createValuesHelper, + createReadHelper, + // ES2015 Generator Helpers + createGeneratorHelper, + // ES Module Helpers + createImportStarHelper, + createImportStarCallbackHelper, + createImportDefaultHelper, + createExportStarHelper, + // Class Fields Helpers + createClassPrivateFieldGetHelper, + createClassPrivateFieldSetHelper, + createClassPrivateFieldInHelper, + // 'using' helpers + createAddDisposableResourceHelper, + createDisposeResourcesHelper, + // --rewriteRelativeImportExtensions helpers + createRewriteRelativeImportExtensionsHelper + }; + function getUnscopedHelperName(name) { + return setEmitFlags(factory2.createIdentifier(name), 8192 /* HelperName */ | 4 /* AdviseOnEmitNode */); + } + function createDecorateHelper(decoratorExpressions, target, memberName, descriptor) { + context.requestEmitHelper(decorateHelper); + const argumentsArray = []; + argumentsArray.push(factory2.createArrayLiteralExpression( + decoratorExpressions, + /*multiLine*/ + true + )); + argumentsArray.push(target); + if (memberName) { + argumentsArray.push(memberName); + if (descriptor) { + argumentsArray.push(descriptor); + } + } + return factory2.createCallExpression( + getUnscopedHelperName("__decorate"), + /*typeArguments*/ + void 0, + argumentsArray + ); + } + function createMetadataHelper(metadataKey, metadataValue) { + context.requestEmitHelper(metadataHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__metadata"), + /*typeArguments*/ + void 0, + [ + factory2.createStringLiteral(metadataKey), + metadataValue + ] + ); + } + function createParamHelper(expression, parameterOffset, location) { + context.requestEmitHelper(paramHelper); + return setTextRange( + factory2.createCallExpression( + getUnscopedHelperName("__param"), + /*typeArguments*/ + void 0, + [ + factory2.createNumericLiteral(parameterOffset + ""), + expression + ] + ), + location + ); + } + function createESDecorateClassContextObject(contextIn) { + const properties = [ + factory2.createPropertyAssignment(factory2.createIdentifier("kind"), factory2.createStringLiteral("class")), + factory2.createPropertyAssignment(factory2.createIdentifier("name"), contextIn.name), + factory2.createPropertyAssignment(factory2.createIdentifier("metadata"), contextIn.metadata) + ]; + return factory2.createObjectLiteralExpression(properties); + } + function createESDecorateClassElementAccessGetMethod(elementName) { + const accessor = elementName.computed ? factory2.createElementAccessExpression(factory2.createIdentifier("obj"), elementName.name) : factory2.createPropertyAccessExpression(factory2.createIdentifier("obj"), elementName.name); + return factory2.createPropertyAssignment( + "get", + factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.createIdentifier("obj") + )], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + accessor + ) + ); + } + function createESDecorateClassElementAccessSetMethod(elementName) { + const accessor = elementName.computed ? factory2.createElementAccessExpression(factory2.createIdentifier("obj"), elementName.name) : factory2.createPropertyAccessExpression(factory2.createIdentifier("obj"), elementName.name); + return factory2.createPropertyAssignment( + "set", + factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.createIdentifier("obj") + ), + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.createIdentifier("value") + ) + ], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createAssignment( + accessor, + factory2.createIdentifier("value") + ) + ) + ]) + ) + ); + } + function createESDecorateClassElementAccessHasMethod(elementName) { + const propertyName = elementName.computed ? elementName.name : isIdentifier(elementName.name) ? factory2.createStringLiteralFromNode(elementName.name) : elementName.name; + return factory2.createPropertyAssignment( + "has", + factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.createIdentifier("obj") + )], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + factory2.createBinaryExpression( + propertyName, + 103 /* InKeyword */, + factory2.createIdentifier("obj") + ) + ) + ); + } + function createESDecorateClassElementAccessObject(name, access) { + const properties = []; + properties.push(createESDecorateClassElementAccessHasMethod(name)); + if (access.get) properties.push(createESDecorateClassElementAccessGetMethod(name)); + if (access.set) properties.push(createESDecorateClassElementAccessSetMethod(name)); + return factory2.createObjectLiteralExpression(properties); + } + function createESDecorateClassElementContextObject(contextIn) { + const properties = [ + factory2.createPropertyAssignment(factory2.createIdentifier("kind"), factory2.createStringLiteral(contextIn.kind)), + factory2.createPropertyAssignment(factory2.createIdentifier("name"), contextIn.name.computed ? contextIn.name.name : factory2.createStringLiteralFromNode(contextIn.name.name)), + factory2.createPropertyAssignment(factory2.createIdentifier("static"), contextIn.static ? factory2.createTrue() : factory2.createFalse()), + factory2.createPropertyAssignment(factory2.createIdentifier("private"), contextIn.private ? factory2.createTrue() : factory2.createFalse()), + factory2.createPropertyAssignment(factory2.createIdentifier("access"), createESDecorateClassElementAccessObject(contextIn.name, contextIn.access)), + factory2.createPropertyAssignment(factory2.createIdentifier("metadata"), contextIn.metadata) + ]; + return factory2.createObjectLiteralExpression(properties); + } + function createESDecorateContextObject(contextIn) { + return contextIn.kind === "class" ? createESDecorateClassContextObject(contextIn) : createESDecorateClassElementContextObject(contextIn); + } + function createESDecorateHelper(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { + context.requestEmitHelper(esDecorateHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__esDecorate"), + /*typeArguments*/ + void 0, + [ + ctor ?? factory2.createNull(), + descriptorIn ?? factory2.createNull(), + decorators, + createESDecorateContextObject(contextIn), + initializers, + extraInitializers + ] + ); + } + function createRunInitializersHelper(thisArg, initializers, value) { + context.requestEmitHelper(runInitializersHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__runInitializers"), + /*typeArguments*/ + void 0, + value ? [thisArg, initializers, value] : [thisArg, initializers] + ); + } + function createAssignHelper(attributesSegments) { + if (getEmitScriptTarget(context.getCompilerOptions()) >= 2 /* ES2015 */) { + return factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createIdentifier("Object"), "assign"), + /*typeArguments*/ + void 0, + attributesSegments + ); + } + context.requestEmitHelper(assignHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__assign"), + /*typeArguments*/ + void 0, + attributesSegments + ); + } + function createAwaitHelper(expression) { + context.requestEmitHelper(awaitHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__await"), + /*typeArguments*/ + void 0, + [expression] + ); + } + function createAsyncGeneratorHelper(generatorFunc, hasLexicalThis) { + context.requestEmitHelper(awaitHelper); + context.requestEmitHelper(asyncGeneratorHelper); + (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 524288 /* AsyncFunctionBody */ | 1048576 /* ReuseTempVariableScope */; + return factory2.createCallExpression( + getUnscopedHelperName("__asyncGenerator"), + /*typeArguments*/ + void 0, + [ + hasLexicalThis ? factory2.createThis() : factory2.createVoidZero(), + factory2.createIdentifier("arguments"), + generatorFunc + ] + ); + } + function createAsyncDelegatorHelper(expression) { + context.requestEmitHelper(awaitHelper); + context.requestEmitHelper(asyncDelegator); + return factory2.createCallExpression( + getUnscopedHelperName("__asyncDelegator"), + /*typeArguments*/ + void 0, + [expression] + ); + } + function createAsyncValuesHelper(expression) { + context.requestEmitHelper(asyncValues); + return factory2.createCallExpression( + getUnscopedHelperName("__asyncValues"), + /*typeArguments*/ + void 0, + [expression] + ); + } + function createRestHelper(value, elements, computedTempVariables, location) { + context.requestEmitHelper(restHelper); + const propertyNames = []; + let computedTempVariableOffset = 0; + for (let i = 0; i < elements.length - 1; i++) { + const propertyName = getPropertyNameOfBindingOrAssignmentElement(elements[i]); + if (propertyName) { + if (isComputedPropertyName(propertyName)) { + Debug.assertIsDefined(computedTempVariables, "Encountered computed property name but 'computedTempVariables' argument was not provided."); + const temp = computedTempVariables[computedTempVariableOffset]; + computedTempVariableOffset++; + propertyNames.push( + factory2.createConditionalExpression( + factory2.createTypeCheck(temp, "symbol"), + /*questionToken*/ + void 0, + temp, + /*colonToken*/ + void 0, + factory2.createAdd(temp, factory2.createStringLiteral("")) + ) + ); + } else { + propertyNames.push(factory2.createStringLiteralFromNode(propertyName)); + } + } + } + return factory2.createCallExpression( + getUnscopedHelperName("__rest"), + /*typeArguments*/ + void 0, + [ + value, + setTextRange( + factory2.createArrayLiteralExpression(propertyNames), + location + ) + ] + ); + } + function createAwaiterHelper(hasLexicalThis, argumentsExpression, promiseConstructor, parameters, body) { + context.requestEmitHelper(awaiterHelper); + const generatorFunc = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + factory2.createToken(42 /* AsteriskToken */), + /*name*/ + void 0, + /*typeParameters*/ + void 0, + parameters ?? [], + /*type*/ + void 0, + body + ); + (generatorFunc.emitNode || (generatorFunc.emitNode = {})).flags |= 524288 /* AsyncFunctionBody */ | 1048576 /* ReuseTempVariableScope */; + return factory2.createCallExpression( + getUnscopedHelperName("__awaiter"), + /*typeArguments*/ + void 0, + [ + hasLexicalThis ? factory2.createThis() : factory2.createVoidZero(), + argumentsExpression ?? factory2.createVoidZero(), + promiseConstructor ? createExpressionFromEntityName(factory2, promiseConstructor) : factory2.createVoidZero(), + generatorFunc + ] + ); + } + function createExtendsHelper(name) { + context.requestEmitHelper(extendsHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__extends"), + /*typeArguments*/ + void 0, + [name, factory2.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */)] + ); + } + function createTemplateObjectHelper(cooked, raw) { + context.requestEmitHelper(templateObjectHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__makeTemplateObject"), + /*typeArguments*/ + void 0, + [cooked, raw] + ); + } + function createSpreadArrayHelper(to, from, packFrom) { + context.requestEmitHelper(spreadArrayHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__spreadArray"), + /*typeArguments*/ + void 0, + [to, from, packFrom ? immutableTrue() : immutableFalse()] + ); + } + function createPropKeyHelper(expr) { + context.requestEmitHelper(propKeyHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__propKey"), + /*typeArguments*/ + void 0, + [expr] + ); + } + function createSetFunctionNameHelper(f, name, prefix) { + context.requestEmitHelper(setFunctionNameHelper); + return context.factory.createCallExpression( + getUnscopedHelperName("__setFunctionName"), + /*typeArguments*/ + void 0, + prefix ? [f, name, context.factory.createStringLiteral(prefix)] : [f, name] + ); + } + function createValuesHelper(expression) { + context.requestEmitHelper(valuesHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__values"), + /*typeArguments*/ + void 0, + [expression] + ); + } + function createReadHelper(iteratorRecord, count) { + context.requestEmitHelper(readHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__read"), + /*typeArguments*/ + void 0, + count !== void 0 ? [iteratorRecord, factory2.createNumericLiteral(count + "")] : [iteratorRecord] + ); + } + function createGeneratorHelper(body) { + context.requestEmitHelper(generatorHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__generator"), + /*typeArguments*/ + void 0, + [factory2.createThis(), body] + ); + } + function createImportStarHelper(expression) { + context.requestEmitHelper(importStarHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__importStar"), + /*typeArguments*/ + void 0, + [expression] + ); + } + function createImportStarCallbackHelper() { + context.requestEmitHelper(importStarHelper); + return getUnscopedHelperName("__importStar"); + } + function createImportDefaultHelper(expression) { + context.requestEmitHelper(importDefaultHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__importDefault"), + /*typeArguments*/ + void 0, + [expression] + ); + } + function createExportStarHelper(moduleExpression, exportsExpression = factory2.createIdentifier("exports")) { + context.requestEmitHelper(exportStarHelper); + context.requestEmitHelper(createBindingHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__exportStar"), + /*typeArguments*/ + void 0, + [moduleExpression, exportsExpression] + ); + } + function createClassPrivateFieldGetHelper(receiver, state, kind, f) { + context.requestEmitHelper(classPrivateFieldGetHelper); + let args; + if (!f) { + args = [receiver, state, factory2.createStringLiteral(kind)]; + } else { + args = [receiver, state, factory2.createStringLiteral(kind), f]; + } + return factory2.createCallExpression( + getUnscopedHelperName("__classPrivateFieldGet"), + /*typeArguments*/ + void 0, + args + ); + } + function createClassPrivateFieldSetHelper(receiver, state, value, kind, f) { + context.requestEmitHelper(classPrivateFieldSetHelper); + let args; + if (!f) { + args = [receiver, state, value, factory2.createStringLiteral(kind)]; + } else { + args = [receiver, state, value, factory2.createStringLiteral(kind), f]; + } + return factory2.createCallExpression( + getUnscopedHelperName("__classPrivateFieldSet"), + /*typeArguments*/ + void 0, + args + ); + } + function createClassPrivateFieldInHelper(state, receiver) { + context.requestEmitHelper(classPrivateFieldInHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__classPrivateFieldIn"), + /*typeArguments*/ + void 0, + [state, receiver] + ); + } + function createAddDisposableResourceHelper(envBinding, value, async) { + context.requestEmitHelper(addDisposableResourceHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__addDisposableResource"), + /*typeArguments*/ + void 0, + [envBinding, value, async ? factory2.createTrue() : factory2.createFalse()] + ); + } + function createDisposeResourcesHelper(envBinding) { + context.requestEmitHelper(disposeResourcesHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__disposeResources"), + /*typeArguments*/ + void 0, + [envBinding] + ); + } + function createRewriteRelativeImportExtensionsHelper(expression) { + context.requestEmitHelper(rewriteRelativeImportExtensionsHelper); + return factory2.createCallExpression( + getUnscopedHelperName("__rewriteRelativeImportExtension"), + /*typeArguments*/ + void 0, + context.getCompilerOptions().jsx === 1 /* Preserve */ ? [expression, factory2.createTrue()] : [expression] + ); + } +} +function compareEmitHelpers(x, y) { + if (x === y) return 0 /* EqualTo */; + if (x.priority === y.priority) return 0 /* EqualTo */; + if (x.priority === void 0) return 1 /* GreaterThan */; + if (y.priority === void 0) return -1 /* LessThan */; + return compareValues(x.priority, y.priority); +} +function helperString(input, ...args) { + return (uniqueName) => { + let result = ""; + for (let i = 0; i < args.length; i++) { + result += input[i]; + result += uniqueName(args[i]); + } + result += input[input.length - 1]; + return result; + }; +} +var decorateHelper = { + name: "typescript:decorate", + importName: "__decorate", + scoped: false, + priority: 2, + text: ` + var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; + };` +}; +var metadataHelper = { + name: "typescript:metadata", + importName: "__metadata", + scoped: false, + priority: 3, + text: ` + var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); + };` +}; +var paramHelper = { + name: "typescript:param", + importName: "__param", + scoped: false, + priority: 4, + text: ` + var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } + };` +}; +var esDecorateHelper = { + name: "typescript:esDecorate", + importName: "__esDecorate", + scoped: false, + priority: 2, + text: ` + var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) { + function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; } + var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value"; + var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null; + var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {}); + var _, done = false; + for (var i = decorators.length - 1; i >= 0; i--) { + var context = {}; + for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p]; + for (var p in contextIn.access) context.access[p] = contextIn.access[p]; + context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); }; + var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context); + if (kind === "accessor") { + if (result === void 0) continue; + if (result === null || typeof result !== "object") throw new TypeError("Object expected"); + if (_ = accept(result.get)) descriptor.get = _; + if (_ = accept(result.set)) descriptor.set = _; + if (_ = accept(result.init)) initializers.unshift(_); + } + else if (_ = accept(result)) { + if (kind === "field") initializers.unshift(_); + else descriptor[key] = _; + } + } + if (target) Object.defineProperty(target, contextIn.name, descriptor); + done = true; + };` +}; +var runInitializersHelper = { + name: "typescript:runInitializers", + importName: "__runInitializers", + scoped: false, + priority: 2, + text: ` + var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) { + var useValue = arguments.length > 2; + for (var i = 0; i < initializers.length; i++) { + value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg); + } + return useValue ? value : void 0; + };` +}; +var assignHelper = { + name: "typescript:assign", + importName: "__assign", + scoped: false, + priority: 1, + text: ` + var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + };` +}; +var awaitHelper = { + name: "typescript:await", + importName: "__await", + scoped: false, + text: ` + var __await = (this && this.__await) || function (v) { return this instanceof __await ? (this.v = v, this) : new __await(v); }` +}; +var asyncGeneratorHelper = { + name: "typescript:asyncGenerator", + importName: "__asyncGenerator", + scoped: false, + dependencies: [awaitHelper], + text: ` + var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _arguments, generator) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var g = generator.apply(thisArg, _arguments || []), i, q = []; + return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i; + function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; } + function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } } + function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } + function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } + function fulfill(value) { resume("next", value); } + function reject(value) { resume("throw", value); } + function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } + };` +}; +var asyncDelegator = { + name: "typescript:asyncDelegator", + importName: "__asyncDelegator", + scoped: false, + dependencies: [awaitHelper], + text: ` + var __asyncDelegator = (this && this.__asyncDelegator) || function (o) { + var i, p; + return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; + function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; } + };` +}; +var asyncValues = { + name: "typescript:asyncValues", + importName: "__asyncValues", + scoped: false, + text: ` + var __asyncValues = (this && this.__asyncValues) || function (o) { + if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); + var m = o[Symbol.asyncIterator], i; + return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); + function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } + function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } + };` +}; +var restHelper = { + name: "typescript:rest", + importName: "__rest", + scoped: false, + text: ` + var __rest = (this && this.__rest) || function (s, e) { + var t = {}; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) + t[p] = s[p]; + if (s != null && typeof Object.getOwnPropertySymbols === "function") + for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { + if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) + t[p[i]] = s[p[i]]; + } + return t; + };` +}; +var awaiterHelper = { + name: "typescript:awaiter", + importName: "__awaiter", + scoped: false, + priority: 5, + text: ` + var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); + };` +}; +var extendsHelper = { + name: "typescript:extends", + importName: "__extends", + scoped: false, + priority: 0, + text: ` + var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })();` +}; +var templateObjectHelper = { + name: "typescript:makeTemplateObject", + importName: "__makeTemplateObject", + scoped: false, + priority: 0, + text: ` + var __makeTemplateObject = (this && this.__makeTemplateObject) || function (cooked, raw) { + if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } + return cooked; + };` +}; +var readHelper = { + name: "typescript:read", + importName: "__read", + scoped: false, + text: ` + var __read = (this && this.__read) || function (o, n) { + var m = typeof Symbol === "function" && o[Symbol.iterator]; + if (!m) return o; + var i = m.call(o), r, ar = [], e; + try { + while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); + } + catch (error) { e = { error: error }; } + finally { + try { + if (r && !r.done && (m = i["return"])) m.call(i); + } + finally { if (e) throw e.error; } + } + return ar; + };` +}; +var spreadArrayHelper = { + name: "typescript:spreadArray", + importName: "__spreadArray", + scoped: false, + text: ` + var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + };` +}; +var propKeyHelper = { + name: "typescript:propKey", + importName: "__propKey", + scoped: false, + text: ` + var __propKey = (this && this.__propKey) || function (x) { + return typeof x === "symbol" ? x : "".concat(x); + };` +}; +var setFunctionNameHelper = { + name: "typescript:setFunctionName", + importName: "__setFunctionName", + scoped: false, + text: ` + var __setFunctionName = (this && this.__setFunctionName) || function (f, name, prefix) { + if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : ""; + return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name }); + };` +}; +var valuesHelper = { + name: "typescript:values", + importName: "__values", + scoped: false, + text: ` + var __values = (this && this.__values) || function(o) { + var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; + if (m) return m.call(o); + if (o && typeof o.length === "number") return { + next: function () { + if (o && i >= o.length) o = void 0; + return { value: o && o[i++], done: !o }; + } + }; + throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); + };` +}; +var generatorHelper = { + name: "typescript:generator", + importName: "__generator", + scoped: false, + priority: 6, + text: ` + var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); + return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } + };` +}; +var createBindingHelper = { + name: "typescript:commonjscreatebinding", + importName: "__createBinding", + scoped: false, + priority: 1, + text: ` + var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); + }) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; + }));` +}; +var setModuleDefaultHelper = { + name: "typescript:commonjscreatevalue", + importName: "__setModuleDefault", + scoped: false, + priority: 1, + text: ` + var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); + }) : function(o, v) { + o["default"] = v; + });` +}; +var importStarHelper = { + name: "typescript:commonjsimportstar", + importName: "__importStar", + scoped: false, + dependencies: [createBindingHelper, setModuleDefaultHelper], + priority: 2, + text: ` + var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; + })();` +}; +var importDefaultHelper = { + name: "typescript:commonjsimportdefault", + importName: "__importDefault", + scoped: false, + text: ` + var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; + };` +}; +var exportStarHelper = { + name: "typescript:export-star", + importName: "__exportStar", + scoped: false, + dependencies: [createBindingHelper], + priority: 2, + text: ` + var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); + };` +}; +var classPrivateFieldGetHelper = { + name: "typescript:classPrivateFieldGet", + importName: "__classPrivateFieldGet", + scoped: false, + text: ` + var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); + return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); + };` +}; +var classPrivateFieldSetHelper = { + name: "typescript:classPrivateFieldSet", + importName: "__classPrivateFieldSet", + scoped: false, + text: ` + var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { + if (kind === "m") throw new TypeError("Private method is not writable"); + if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); + if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); + return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; + };` +}; +var classPrivateFieldInHelper = { + name: "typescript:classPrivateFieldIn", + importName: "__classPrivateFieldIn", + scoped: false, + text: ` + var __classPrivateFieldIn = (this && this.__classPrivateFieldIn) || function(state, receiver) { + if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object"); + return typeof state === "function" ? receiver === state : state.has(receiver); + };` +}; +var addDisposableResourceHelper = { + name: "typescript:addDisposableResource", + importName: "__addDisposableResource", + scoped: false, + text: ` + var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) { + if (value !== null && value !== void 0) { + if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected."); + var dispose, inner; + if (async) { + if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined."); + dispose = value[Symbol.asyncDispose]; + } + if (dispose === void 0) { + if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined."); + dispose = value[Symbol.dispose]; + if (async) inner = dispose; + } + if (typeof dispose !== "function") throw new TypeError("Object not disposable."); + if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } }; + env.stack.push({ value: value, dispose: dispose, async: async }); + } + else if (async) { + env.stack.push({ async: true }); + } + return value; + };` +}; +var disposeResourcesHelper = { + name: "typescript:disposeResources", + importName: "__disposeResources", + scoped: false, + text: ` + var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) { + return function (env) { + function fail(e) { + env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e; + env.hasError = true; + } + var r, s = 0; + function next() { + while (r = env.stack.pop()) { + try { + if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next); + if (r.dispose) { + var result = r.dispose.call(r.value); + if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); }); + } + else s |= 1; + } + catch (e) { + fail(e); + } + } + if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve(); + if (env.hasError) throw env.error; + } + return next(); + }; + })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) { + var e = new Error(message); + return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e; + });` +}; +var rewriteRelativeImportExtensionsHelper = { + name: "typescript:rewriteRelativeImportExtensions", + importName: "__rewriteRelativeImportExtension", + scoped: false, + text: ` + var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) { + if (typeof path === "string" && /^\\.\\.?\\//.test(path)) { + return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) { + return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js"); + }); + } + return path; + };` +}; +var asyncSuperHelper = { + name: "typescript:async-super", + scoped: true, + text: helperString` + const ${"_superIndex"} = name => super[name];` +}; +var advancedAsyncSuperHelper = { + name: "typescript:advanced-async-super", + scoped: true, + text: helperString` + const ${"_superIndex"} = (function (geti, seti) { + const cache = Object.create(null); + return name => cache[name] || (cache[name] = { get value() { return geti(name); }, set value(v) { seti(name, v); } }); + })(name => super[name], (name, value) => super[name] = value);` +}; +function isCallToHelper(firstSegment, helperName) { + return isCallExpression(firstSegment) && isIdentifier(firstSegment.expression) && (getEmitFlags(firstSegment.expression) & 8192 /* HelperName */) !== 0 && firstSegment.expression.escapedText === helperName; +} + +// src/compiler/factory/nodeTests.ts +function isNumericLiteral(node) { + return node.kind === 9 /* NumericLiteral */; +} +function isBigIntLiteral(node) { + return node.kind === 10 /* BigIntLiteral */; +} +function isStringLiteral(node) { + return node.kind === 11 /* StringLiteral */; +} +function isJsxText(node) { + return node.kind === 12 /* JsxText */; +} +function isRegularExpressionLiteral(node) { + return node.kind === 14 /* RegularExpressionLiteral */; +} +function isNoSubstitutionTemplateLiteral(node) { + return node.kind === 15 /* NoSubstitutionTemplateLiteral */; +} +function isTemplateHead(node) { + return node.kind === 16 /* TemplateHead */; +} +function isTemplateMiddle(node) { + return node.kind === 17 /* TemplateMiddle */; +} +function isTemplateTail(node) { + return node.kind === 18 /* TemplateTail */; +} +function isDotDotDotToken(node) { + return node.kind === 26 /* DotDotDotToken */; +} +function isCommaToken(node) { + return node.kind === 28 /* CommaToken */; +} +function isPlusToken(node) { + return node.kind === 40 /* PlusToken */; +} +function isMinusToken(node) { + return node.kind === 41 /* MinusToken */; +} +function isAsteriskToken(node) { + return node.kind === 42 /* AsteriskToken */; +} +function isExclamationToken(node) { + return node.kind === 54 /* ExclamationToken */; +} +function isQuestionToken(node) { + return node.kind === 58 /* QuestionToken */; +} +function isColonToken(node) { + return node.kind === 59 /* ColonToken */; +} +function isQuestionDotToken(node) { + return node.kind === 29 /* QuestionDotToken */; +} +function isEqualsGreaterThanToken(node) { + return node.kind === 39 /* EqualsGreaterThanToken */; +} +function isIdentifier(node) { + return node.kind === 80 /* Identifier */; +} +function isPrivateIdentifier(node) { + return node.kind === 81 /* PrivateIdentifier */; +} +function isExportModifier(node) { + return node.kind === 95 /* ExportKeyword */; +} +function isDefaultModifier(node) { + return node.kind === 90 /* DefaultKeyword */; +} +function isAsyncModifier(node) { + return node.kind === 134 /* AsyncKeyword */; +} +function isAssertsKeyword(node) { + return node.kind === 131 /* AssertsKeyword */; +} +function isAwaitKeyword(node) { + return node.kind === 135 /* AwaitKeyword */; +} +function isReadonlyKeyword(node) { + return node.kind === 148 /* ReadonlyKeyword */; +} +function isStaticModifier(node) { + return node.kind === 126 /* StaticKeyword */; +} +function isAbstractModifier(node) { + return node.kind === 128 /* AbstractKeyword */; +} +function isOverrideModifier(node) { + return node.kind === 164 /* OverrideKeyword */; +} +function isAccessorModifier(node) { + return node.kind === 129 /* AccessorKeyword */; +} +function isSuperKeyword(node) { + return node.kind === 108 /* SuperKeyword */; +} +function isImportKeyword(node) { + return node.kind === 102 /* ImportKeyword */; +} +function isCaseKeyword(node) { + return node.kind === 84 /* CaseKeyword */; +} +function isQualifiedName(node) { + return node.kind === 167 /* QualifiedName */; +} +function isComputedPropertyName(node) { + return node.kind === 168 /* ComputedPropertyName */; +} +function isTypeParameterDeclaration(node) { + return node.kind === 169 /* TypeParameter */; +} +function isParameter(node) { + return node.kind === 170 /* Parameter */; +} +function isDecorator(node) { + return node.kind === 171 /* Decorator */; +} +function isPropertySignature(node) { + return node.kind === 172 /* PropertySignature */; +} +function isPropertyDeclaration(node) { + return node.kind === 173 /* PropertyDeclaration */; +} +function isMethodSignature(node) { + return node.kind === 174 /* MethodSignature */; +} +function isMethodDeclaration(node) { + return node.kind === 175 /* MethodDeclaration */; +} +function isClassStaticBlockDeclaration(node) { + return node.kind === 176 /* ClassStaticBlockDeclaration */; +} +function isConstructorDeclaration(node) { + return node.kind === 177 /* Constructor */; +} +function isGetAccessorDeclaration(node) { + return node.kind === 178 /* GetAccessor */; +} +function isSetAccessorDeclaration(node) { + return node.kind === 179 /* SetAccessor */; +} +function isCallSignatureDeclaration(node) { + return node.kind === 180 /* CallSignature */; +} +function isConstructSignatureDeclaration(node) { + return node.kind === 181 /* ConstructSignature */; +} +function isIndexSignatureDeclaration(node) { + return node.kind === 182 /* IndexSignature */; +} +function isTypePredicateNode(node) { + return node.kind === 183 /* TypePredicate */; +} +function isTypeReferenceNode(node) { + return node.kind === 184 /* TypeReference */; +} +function isFunctionTypeNode(node) { + return node.kind === 185 /* FunctionType */; +} +function isConstructorTypeNode(node) { + return node.kind === 186 /* ConstructorType */; +} +function isTypeQueryNode(node) { + return node.kind === 187 /* TypeQuery */; +} +function isTypeLiteralNode(node) { + return node.kind === 188 /* TypeLiteral */; +} +function isArrayTypeNode(node) { + return node.kind === 189 /* ArrayType */; +} +function isTupleTypeNode(node) { + return node.kind === 190 /* TupleType */; +} +function isNamedTupleMember(node) { + return node.kind === 203 /* NamedTupleMember */; +} +function isOptionalTypeNode(node) { + return node.kind === 191 /* OptionalType */; +} +function isRestTypeNode(node) { + return node.kind === 192 /* RestType */; +} +function isUnionTypeNode(node) { + return node.kind === 193 /* UnionType */; +} +function isIntersectionTypeNode(node) { + return node.kind === 194 /* IntersectionType */; +} +function isConditionalTypeNode(node) { + return node.kind === 195 /* ConditionalType */; +} +function isInferTypeNode(node) { + return node.kind === 196 /* InferType */; +} +function isParenthesizedTypeNode(node) { + return node.kind === 197 /* ParenthesizedType */; +} +function isThisTypeNode(node) { + return node.kind === 198 /* ThisType */; +} +function isTypeOperatorNode(node) { + return node.kind === 199 /* TypeOperator */; +} +function isIndexedAccessTypeNode(node) { + return node.kind === 200 /* IndexedAccessType */; +} +function isMappedTypeNode(node) { + return node.kind === 201 /* MappedType */; +} +function isLiteralTypeNode(node) { + return node.kind === 202 /* LiteralType */; +} +function isImportTypeNode(node) { + return node.kind === 206 /* ImportType */; +} +function isTemplateLiteralTypeSpan(node) { + return node.kind === 205 /* TemplateLiteralTypeSpan */; +} +function isTemplateLiteralTypeNode(node) { + return node.kind === 204 /* TemplateLiteralType */; +} +function isObjectBindingPattern(node) { + return node.kind === 207 /* ObjectBindingPattern */; +} +function isArrayBindingPattern(node) { + return node.kind === 208 /* ArrayBindingPattern */; +} +function isBindingElement(node) { + return node.kind === 209 /* BindingElement */; +} +function isArrayLiteralExpression(node) { + return node.kind === 210 /* ArrayLiteralExpression */; +} +function isObjectLiteralExpression(node) { + return node.kind === 211 /* ObjectLiteralExpression */; +} +function isPropertyAccessExpression(node) { + return node.kind === 212 /* PropertyAccessExpression */; +} +function isElementAccessExpression(node) { + return node.kind === 213 /* ElementAccessExpression */; +} +function isCallExpression(node) { + return node.kind === 214 /* CallExpression */; +} +function isNewExpression(node) { + return node.kind === 215 /* NewExpression */; +} +function isTaggedTemplateExpression(node) { + return node.kind === 216 /* TaggedTemplateExpression */; +} +function isTypeAssertionExpression(node) { + return node.kind === 217 /* TypeAssertionExpression */; +} +function isParenthesizedExpression(node) { + return node.kind === 218 /* ParenthesizedExpression */; +} +function isFunctionExpression(node) { + return node.kind === 219 /* FunctionExpression */; +} +function isArrowFunction(node) { + return node.kind === 220 /* ArrowFunction */; +} +function isDeleteExpression(node) { + return node.kind === 221 /* DeleteExpression */; +} +function isTypeOfExpression(node) { + return node.kind === 222 /* TypeOfExpression */; +} +function isVoidExpression(node) { + return node.kind === 223 /* VoidExpression */; +} +function isAwaitExpression(node) { + return node.kind === 224 /* AwaitExpression */; +} +function isPrefixUnaryExpression(node) { + return node.kind === 225 /* PrefixUnaryExpression */; +} +function isPostfixUnaryExpression(node) { + return node.kind === 226 /* PostfixUnaryExpression */; +} +function isBinaryExpression(node) { + return node.kind === 227 /* BinaryExpression */; +} +function isConditionalExpression(node) { + return node.kind === 228 /* ConditionalExpression */; +} +function isTemplateExpression(node) { + return node.kind === 229 /* TemplateExpression */; +} +function isYieldExpression(node) { + return node.kind === 230 /* YieldExpression */; +} +function isSpreadElement(node) { + return node.kind === 231 /* SpreadElement */; +} +function isClassExpression(node) { + return node.kind === 232 /* ClassExpression */; +} +function isOmittedExpression(node) { + return node.kind === 233 /* OmittedExpression */; +} +function isExpressionWithTypeArguments(node) { + return node.kind === 234 /* ExpressionWithTypeArguments */; +} +function isAsExpression(node) { + return node.kind === 235 /* AsExpression */; +} +function isSatisfiesExpression(node) { + return node.kind === 239 /* SatisfiesExpression */; +} +function isNonNullExpression(node) { + return node.kind === 236 /* NonNullExpression */; +} +function isMetaProperty(node) { + return node.kind === 237 /* MetaProperty */; +} +function isSyntheticExpression(node) { + return node.kind === 238 /* SyntheticExpression */; +} +function isPartiallyEmittedExpression(node) { + return node.kind === 356 /* PartiallyEmittedExpression */; +} +function isCommaListExpression(node) { + return node.kind === 357 /* CommaListExpression */; +} +function isTemplateSpan(node) { + return node.kind === 240 /* TemplateSpan */; +} +function isSemicolonClassElement(node) { + return node.kind === 241 /* SemicolonClassElement */; +} +function isBlock(node) { + return node.kind === 242 /* Block */; +} +function isVariableStatement(node) { + return node.kind === 244 /* VariableStatement */; +} +function isEmptyStatement(node) { + return node.kind === 243 /* EmptyStatement */; +} +function isExpressionStatement(node) { + return node.kind === 245 /* ExpressionStatement */; +} +function isIfStatement(node) { + return node.kind === 246 /* IfStatement */; +} +function isDoStatement(node) { + return node.kind === 247 /* DoStatement */; +} +function isWhileStatement(node) { + return node.kind === 248 /* WhileStatement */; +} +function isForStatement(node) { + return node.kind === 249 /* ForStatement */; +} +function isForInStatement(node) { + return node.kind === 250 /* ForInStatement */; +} +function isForOfStatement(node) { + return node.kind === 251 /* ForOfStatement */; +} +function isContinueStatement(node) { + return node.kind === 252 /* ContinueStatement */; +} +function isBreakStatement(node) { + return node.kind === 253 /* BreakStatement */; +} +function isReturnStatement(node) { + return node.kind === 254 /* ReturnStatement */; +} +function isWithStatement(node) { + return node.kind === 255 /* WithStatement */; +} +function isSwitchStatement(node) { + return node.kind === 256 /* SwitchStatement */; +} +function isLabeledStatement(node) { + return node.kind === 257 /* LabeledStatement */; +} +function isThrowStatement(node) { + return node.kind === 258 /* ThrowStatement */; +} +function isTryStatement(node) { + return node.kind === 259 /* TryStatement */; +} +function isDebuggerStatement(node) { + return node.kind === 260 /* DebuggerStatement */; +} +function isVariableDeclaration(node) { + return node.kind === 261 /* VariableDeclaration */; +} +function isVariableDeclarationList(node) { + return node.kind === 262 /* VariableDeclarationList */; +} +function isFunctionDeclaration(node) { + return node.kind === 263 /* FunctionDeclaration */; +} +function isClassDeclaration(node) { + return node.kind === 264 /* ClassDeclaration */; +} +function isInterfaceDeclaration(node) { + return node.kind === 265 /* InterfaceDeclaration */; +} +function isTypeAliasDeclaration(node) { + return node.kind === 266 /* TypeAliasDeclaration */; +} +function isEnumDeclaration(node) { + return node.kind === 267 /* EnumDeclaration */; +} +function isModuleDeclaration(node) { + return node.kind === 268 /* ModuleDeclaration */; +} +function isModuleBlock(node) { + return node.kind === 269 /* ModuleBlock */; +} +function isCaseBlock(node) { + return node.kind === 270 /* CaseBlock */; +} +function isNamespaceExportDeclaration(node) { + return node.kind === 271 /* NamespaceExportDeclaration */; +} +function isImportEqualsDeclaration(node) { + return node.kind === 272 /* ImportEqualsDeclaration */; +} +function isImportDeclaration(node) { + return node.kind === 273 /* ImportDeclaration */; +} +function isImportClause(node) { + return node.kind === 274 /* ImportClause */; +} +function isImportTypeAssertionContainer(node) { + return node.kind === 303 /* ImportTypeAssertionContainer */; +} +function isAssertClause(node) { + return node.kind === 301 /* AssertClause */; +} +function isAssertEntry(node) { + return node.kind === 302 /* AssertEntry */; +} +function isImportAttributes(node) { + return node.kind === 301 /* ImportAttributes */; +} +function isImportAttribute(node) { + return node.kind === 302 /* ImportAttribute */; +} +function isNamespaceImport(node) { + return node.kind === 275 /* NamespaceImport */; +} +function isNamespaceExport(node) { + return node.kind === 281 /* NamespaceExport */; +} +function isNamedImports(node) { + return node.kind === 276 /* NamedImports */; +} +function isImportSpecifier(node) { + return node.kind === 277 /* ImportSpecifier */; +} +function isExportAssignment(node) { + return node.kind === 278 /* ExportAssignment */; +} +function isExportDeclaration(node) { + return node.kind === 279 /* ExportDeclaration */; +} +function isNamedExports(node) { + return node.kind === 280 /* NamedExports */; +} +function isExportSpecifier(node) { + return node.kind === 282 /* ExportSpecifier */; +} +function isModuleExportName(node) { + return node.kind === 80 /* Identifier */ || node.kind === 11 /* StringLiteral */; +} +function isMissingDeclaration(node) { + return node.kind === 283 /* MissingDeclaration */; +} +function isNotEmittedStatement(node) { + return node.kind === 354 /* NotEmittedStatement */; +} +function isSyntheticReference(node) { + return node.kind === 358 /* SyntheticReferenceExpression */; +} +function isExternalModuleReference(node) { + return node.kind === 284 /* ExternalModuleReference */; +} +function isJsxElement(node) { + return node.kind === 285 /* JsxElement */; +} +function isJsxSelfClosingElement(node) { + return node.kind === 286 /* JsxSelfClosingElement */; +} +function isJsxOpeningElement(node) { + return node.kind === 287 /* JsxOpeningElement */; +} +function isJsxClosingElement(node) { + return node.kind === 288 /* JsxClosingElement */; +} +function isJsxFragment(node) { + return node.kind === 289 /* JsxFragment */; +} +function isJsxOpeningFragment(node) { + return node.kind === 290 /* JsxOpeningFragment */; +} +function isJsxClosingFragment(node) { + return node.kind === 291 /* JsxClosingFragment */; +} +function isJsxAttribute(node) { + return node.kind === 292 /* JsxAttribute */; +} +function isJsxAttributes(node) { + return node.kind === 293 /* JsxAttributes */; +} +function isJsxSpreadAttribute(node) { + return node.kind === 294 /* JsxSpreadAttribute */; +} +function isJsxExpression(node) { + return node.kind === 295 /* JsxExpression */; +} +function isJsxNamespacedName(node) { + return node.kind === 296 /* JsxNamespacedName */; +} +function isCaseClause(node) { + return node.kind === 297 /* CaseClause */; +} +function isDefaultClause(node) { + return node.kind === 298 /* DefaultClause */; +} +function isHeritageClause(node) { + return node.kind === 299 /* HeritageClause */; +} +function isCatchClause(node) { + return node.kind === 300 /* CatchClause */; +} +function isPropertyAssignment(node) { + return node.kind === 304 /* PropertyAssignment */; +} +function isShorthandPropertyAssignment(node) { + return node.kind === 305 /* ShorthandPropertyAssignment */; +} +function isSpreadAssignment(node) { + return node.kind === 306 /* SpreadAssignment */; +} +function isEnumMember(node) { + return node.kind === 307 /* EnumMember */; +} +function isSourceFile(node) { + return node.kind === 308 /* SourceFile */; +} +function isBundle(node) { + return node.kind === 309 /* Bundle */; +} +function isJSDocTypeExpression(node) { + return node.kind === 310 /* JSDocTypeExpression */; +} +function isJSDocNameReference(node) { + return node.kind === 311 /* JSDocNameReference */; +} +function isJSDocMemberName(node) { + return node.kind === 312 /* JSDocMemberName */; +} +function isJSDocLink(node) { + return node.kind === 325 /* JSDocLink */; +} +function isJSDocLinkCode(node) { + return node.kind === 326 /* JSDocLinkCode */; +} +function isJSDocLinkPlain(node) { + return node.kind === 327 /* JSDocLinkPlain */; +} +function isJSDocAllType(node) { + return node.kind === 313 /* JSDocAllType */; +} +function isJSDocUnknownType(node) { + return node.kind === 314 /* JSDocUnknownType */; +} +function isJSDocNullableType(node) { + return node.kind === 315 /* JSDocNullableType */; +} +function isJSDocNonNullableType(node) { + return node.kind === 316 /* JSDocNonNullableType */; +} +function isJSDocOptionalType(node) { + return node.kind === 317 /* JSDocOptionalType */; +} +function isJSDocFunctionType(node) { + return node.kind === 318 /* JSDocFunctionType */; +} +function isJSDocVariadicType(node) { + return node.kind === 319 /* JSDocVariadicType */; +} +function isJSDocNamepathType(node) { + return node.kind === 320 /* JSDocNamepathType */; +} +function isJSDoc(node) { + return node.kind === 321 /* JSDoc */; +} +function isJSDocTypeLiteral(node) { + return node.kind === 323 /* JSDocTypeLiteral */; +} +function isJSDocSignature(node) { + return node.kind === 324 /* JSDocSignature */; +} +function isJSDocAugmentsTag(node) { + return node.kind === 329 /* JSDocAugmentsTag */; +} +function isJSDocAuthorTag(node) { + return node.kind === 331 /* JSDocAuthorTag */; +} +function isJSDocClassTag(node) { + return node.kind === 333 /* JSDocClassTag */; +} +function isJSDocCallbackTag(node) { + return node.kind === 339 /* JSDocCallbackTag */; +} +function isJSDocPublicTag(node) { + return node.kind === 334 /* JSDocPublicTag */; +} +function isJSDocPrivateTag(node) { + return node.kind === 335 /* JSDocPrivateTag */; +} +function isJSDocProtectedTag(node) { + return node.kind === 336 /* JSDocProtectedTag */; +} +function isJSDocReadonlyTag(node) { + return node.kind === 337 /* JSDocReadonlyTag */; +} +function isJSDocOverrideTag(node) { + return node.kind === 338 /* JSDocOverrideTag */; +} +function isJSDocOverloadTag(node) { + return node.kind === 340 /* JSDocOverloadTag */; +} +function isJSDocDeprecatedTag(node) { + return node.kind === 332 /* JSDocDeprecatedTag */; +} +function isJSDocSeeTag(node) { + return node.kind === 348 /* JSDocSeeTag */; +} +function isJSDocEnumTag(node) { + return node.kind === 341 /* JSDocEnumTag */; +} +function isJSDocParameterTag(node) { + return node.kind === 342 /* JSDocParameterTag */; +} +function isJSDocReturnTag(node) { + return node.kind === 343 /* JSDocReturnTag */; +} +function isJSDocThisTag(node) { + return node.kind === 344 /* JSDocThisTag */; +} +function isJSDocTypeTag(node) { + return node.kind === 345 /* JSDocTypeTag */; +} +function isJSDocTemplateTag(node) { + return node.kind === 346 /* JSDocTemplateTag */; +} +function isJSDocTypedefTag(node) { + return node.kind === 347 /* JSDocTypedefTag */; +} +function isJSDocUnknownTag(node) { + return node.kind === 328 /* JSDocTag */; +} +function isJSDocPropertyTag(node) { + return node.kind === 349 /* JSDocPropertyTag */; +} +function isJSDocImplementsTag(node) { + return node.kind === 330 /* JSDocImplementsTag */; +} +function isJSDocSatisfiesTag(node) { + return node.kind === 351 /* JSDocSatisfiesTag */; +} +function isJSDocThrowsTag(node) { + return node.kind === 350 /* JSDocThrowsTag */; +} +function isJSDocImportTag(node) { + return node.kind === 352 /* JSDocImportTag */; +} +function isSyntaxList(n) { + return n.kind === 353 /* SyntaxList */; +} + +// src/compiler/factory/nodeChildren.ts +var sourceFileToNodeChildren = /* @__PURE__ */ new WeakMap(); +function getNodeChildren(node, sourceFile) { + var _a; + const kind = node.kind; + if (!isNodeKind(kind)) { + return emptyArray; + } + if (kind === 353 /* SyntaxList */) { + return node._children; + } + return (_a = sourceFileToNodeChildren.get(sourceFile)) == null ? void 0 : _a.get(node); +} +function setNodeChildren(node, sourceFile, children) { + if (node.kind === 353 /* SyntaxList */) { + Debug.fail("Should not need to re-set the children of a SyntaxList."); + } + let map2 = sourceFileToNodeChildren.get(sourceFile); + if (map2 === void 0) { + map2 = /* @__PURE__ */ new WeakMap(); + sourceFileToNodeChildren.set(sourceFile, map2); + } + map2.set(node, children); + return children; +} +function unsetNodeChildren(node, origSourceFile) { + var _a; + if (node.kind === 353 /* SyntaxList */) { + Debug.fail("Did not expect to unset the children of a SyntaxList."); + } + (_a = sourceFileToNodeChildren.get(origSourceFile)) == null ? void 0 : _a.delete(node); +} +function transferSourceFileChildren(sourceFile, targetSourceFile) { + const map2 = sourceFileToNodeChildren.get(sourceFile); + if (map2 !== void 0) { + sourceFileToNodeChildren.delete(sourceFile); + sourceFileToNodeChildren.set(targetSourceFile, map2); + } +} + +// src/compiler/factory/utilities.ts +function createEmptyExports(factory2) { + return factory2.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory2.createNamedExports([]), + /*moduleSpecifier*/ + void 0 + ); +} +function createMemberAccessForPropertyName(factory2, target, memberName, location) { + if (isComputedPropertyName(memberName)) { + return setTextRange(factory2.createElementAccessExpression(target, memberName.expression), location); + } else { + const expression = setTextRange( + isMemberName(memberName) ? factory2.createPropertyAccessExpression(target, memberName) : factory2.createElementAccessExpression(target, memberName), + memberName + ); + addEmitFlags(expression, 128 /* NoNestedSourceMaps */); + return expression; + } +} +function createReactNamespace(reactNamespace, parent2) { + const react = parseNodeFactory.createIdentifier(reactNamespace || "React"); + setParent(react, getParseTreeNode(parent2)); + return react; +} +function createJsxFactoryExpressionFromEntityName(factory2, jsxFactory, parent2) { + if (isQualifiedName(jsxFactory)) { + const left = createJsxFactoryExpressionFromEntityName(factory2, jsxFactory.left, parent2); + const right = factory2.createIdentifier(idText(jsxFactory.right)); + right.escapedText = jsxFactory.right.escapedText; + return factory2.createPropertyAccessExpression(left, right); + } else { + return createReactNamespace(idText(jsxFactory), parent2); + } +} +function createJsxFactoryExpression(factory2, jsxFactoryEntity, reactNamespace, parent2) { + return jsxFactoryEntity ? createJsxFactoryExpressionFromEntityName(factory2, jsxFactoryEntity, parent2) : factory2.createPropertyAccessExpression( + createReactNamespace(reactNamespace, parent2), + "createElement" + ); +} +function createJsxFragmentFactoryExpression(factory2, jsxFragmentFactoryEntity, reactNamespace, parent2) { + return jsxFragmentFactoryEntity ? createJsxFactoryExpressionFromEntityName(factory2, jsxFragmentFactoryEntity, parent2) : factory2.createPropertyAccessExpression( + createReactNamespace(reactNamespace, parent2), + "Fragment" + ); +} +function createExpressionForJsxElement(factory2, callee, tagName, props, children, location) { + const argumentsList = [tagName]; + if (props) { + argumentsList.push(props); + } + if (children && children.length > 0) { + if (!props) { + argumentsList.push(factory2.createNull()); + } + if (children.length > 1) { + for (const child of children) { + startOnNewLine(child); + argumentsList.push(child); + } + } else { + argumentsList.push(children[0]); + } + } + return setTextRange( + factory2.createCallExpression( + callee, + /*typeArguments*/ + void 0, + argumentsList + ), + location + ); +} +function createExpressionForJsxFragment(factory2, jsxFactoryEntity, jsxFragmentFactoryEntity, reactNamespace, children, parentElement, location) { + const tagName = createJsxFragmentFactoryExpression(factory2, jsxFragmentFactoryEntity, reactNamespace, parentElement); + const argumentsList = [tagName, factory2.createNull()]; + if (children && children.length > 0) { + if (children.length > 1) { + for (const child of children) { + startOnNewLine(child); + argumentsList.push(child); + } + } else { + argumentsList.push(children[0]); + } + } + return setTextRange( + factory2.createCallExpression( + createJsxFactoryExpression(factory2, jsxFactoryEntity, reactNamespace, parentElement), + /*typeArguments*/ + void 0, + argumentsList + ), + location + ); +} +function createForOfBindingStatement(factory2, node, boundValue) { + if (isVariableDeclarationList(node)) { + const firstDeclaration = first(node.declarations); + const updatedDeclaration = factory2.updateVariableDeclaration( + firstDeclaration, + firstDeclaration.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + boundValue + ); + return setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.updateVariableDeclarationList(node, [updatedDeclaration]) + ), + /*location*/ + node + ); + } else { + const updatedExpression = setTextRange( + factory2.createAssignment(node, boundValue), + /*location*/ + node + ); + return setTextRange( + factory2.createExpressionStatement(updatedExpression), + /*location*/ + node + ); + } +} +function createExpressionFromEntityName(factory2, node) { + if (isQualifiedName(node)) { + const left = createExpressionFromEntityName(factory2, node.left); + const right = setParent(setTextRange(factory2.cloneNode(node.right), node.right), node.right.parent); + return setTextRange(factory2.createPropertyAccessExpression(left, right), node); + } else { + return setParent(setTextRange(factory2.cloneNode(node), node), node.parent); + } +} +function createExpressionForPropertyName(factory2, memberName) { + if (isIdentifier(memberName)) { + return factory2.createStringLiteralFromNode(memberName); + } else if (isComputedPropertyName(memberName)) { + return setParent(setTextRange(factory2.cloneNode(memberName.expression), memberName.expression), memberName.expression.parent); + } else { + return setParent(setTextRange(factory2.cloneNode(memberName), memberName), memberName.parent); + } +} +function createExpressionForAccessorDeclaration(factory2, properties, property, receiver, multiLine) { + const { firstAccessor, getAccessor, setAccessor } = getAllAccessorDeclarations(properties, property); + if (property === firstAccessor) { + return setTextRange( + factory2.createObjectDefinePropertyCall( + receiver, + createExpressionForPropertyName(factory2, property.name), + factory2.createPropertyDescriptor({ + enumerable: factory2.createFalse(), + configurable: true, + get: getAccessor && setTextRange( + setOriginalNode( + factory2.createFunctionExpression( + getModifiers(getAccessor), + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + getAccessor.parameters, + /*type*/ + void 0, + getAccessor.body + // TODO: GH#18217 + ), + getAccessor + ), + getAccessor + ), + set: setAccessor && setTextRange( + setOriginalNode( + factory2.createFunctionExpression( + getModifiers(setAccessor), + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + setAccessor.parameters, + /*type*/ + void 0, + setAccessor.body + // TODO: GH#18217 + ), + setAccessor + ), + setAccessor + ) + }, !multiLine) + ), + firstAccessor + ); + } + return void 0; +} +function createExpressionForPropertyAssignment(factory2, property, receiver) { + return setOriginalNode( + setTextRange( + factory2.createAssignment( + createMemberAccessForPropertyName( + factory2, + receiver, + property.name, + /*location*/ + property.name + ), + property.initializer + ), + property + ), + property + ); +} +function createExpressionForShorthandPropertyAssignment(factory2, property, receiver) { + return setOriginalNode( + setTextRange( + factory2.createAssignment( + createMemberAccessForPropertyName( + factory2, + receiver, + property.name, + /*location*/ + property.name + ), + factory2.cloneNode(property.name) + ), + /*location*/ + property + ), + /*original*/ + property + ); +} +function createExpressionForMethodDeclaration(factory2, method, receiver) { + return setOriginalNode( + setTextRange( + factory2.createAssignment( + createMemberAccessForPropertyName( + factory2, + receiver, + method.name, + /*location*/ + method.name + ), + setOriginalNode( + setTextRange( + factory2.createFunctionExpression( + getModifiers(method), + method.asteriskToken, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + method.parameters, + /*type*/ + void 0, + method.body + // TODO: GH#18217 + ), + /*location*/ + method + ), + /*original*/ + method + ) + ), + /*location*/ + method + ), + /*original*/ + method + ); +} +function createExpressionForObjectLiteralElementLike(factory2, node, property, receiver) { + if (property.name && isPrivateIdentifier(property.name)) { + Debug.failBadSyntaxKind(property.name, "Private identifiers are not allowed in object literals."); + } + switch (property.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return createExpressionForAccessorDeclaration(factory2, node.properties, property, receiver, !!node.multiLine); + case 304 /* PropertyAssignment */: + return createExpressionForPropertyAssignment(factory2, property, receiver); + case 305 /* ShorthandPropertyAssignment */: + return createExpressionForShorthandPropertyAssignment(factory2, property, receiver); + case 175 /* MethodDeclaration */: + return createExpressionForMethodDeclaration(factory2, property, receiver); + } +} +function expandPreOrPostfixIncrementOrDecrementExpression(factory2, node, expression, recordTempVariable, resultVariable) { + const operator = node.operator; + Debug.assert(operator === 46 /* PlusPlusToken */ || operator === 47 /* MinusMinusToken */, "Expected 'node' to be a pre- or post-increment or pre- or post-decrement expression"); + const temp = factory2.createTempVariable(recordTempVariable); + expression = factory2.createAssignment(temp, expression); + setTextRange(expression, node.operand); + let operation = isPrefixUnaryExpression(node) ? factory2.createPrefixUnaryExpression(operator, temp) : factory2.createPostfixUnaryExpression(temp, operator); + setTextRange(operation, node); + if (resultVariable) { + operation = factory2.createAssignment(resultVariable, operation); + setTextRange(operation, node); + } + expression = factory2.createComma(expression, operation); + setTextRange(expression, node); + if (isPostfixUnaryExpression(node)) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; +} +function isInternalName(node) { + return (getEmitFlags(node) & 65536 /* InternalName */) !== 0; +} +function isLocalName(node) { + return (getEmitFlags(node) & 32768 /* LocalName */) !== 0; +} +function isExportName(node) { + return (getEmitFlags(node) & 16384 /* ExportName */) !== 0; +} +function isUseStrictPrologue(node) { + return isStringLiteral(node.expression) && node.expression.text === "use strict"; +} +function findUseStrictPrologue(statements) { + for (const statement of statements) { + if (isPrologueDirective(statement)) { + if (isUseStrictPrologue(statement)) { + return statement; + } + } else { + break; + } + } + return void 0; +} +function startsWithUseStrict(statements) { + const firstStatement = firstOrUndefined(statements); + return firstStatement !== void 0 && isPrologueDirective(firstStatement) && isUseStrictPrologue(firstStatement); +} +function isCommaExpression(node) { + return node.kind === 227 /* BinaryExpression */ && node.operatorToken.kind === 28 /* CommaToken */; +} +function isCommaSequence(node) { + return isCommaExpression(node) || isCommaListExpression(node); +} +function isJSDocTypeAssertion(node) { + return isParenthesizedExpression(node) && isInJSFile(node) && !!getJSDocTypeTag(node); +} +function getJSDocTypeAssertionType(node) { + const type = getJSDocType(node); + Debug.assertIsDefined(type); + return type; +} +function isOuterExpression(node, kinds = 63 /* All */) { + switch (node.kind) { + case 218 /* ParenthesizedExpression */: + if (kinds & -2147483648 /* ExcludeJSDocTypeAssertion */ && isJSDocTypeAssertion(node)) { + return false; + } + return (kinds & 1 /* Parentheses */) !== 0; + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + return (kinds & 2 /* TypeAssertions */) !== 0; + case 239 /* SatisfiesExpression */: + return (kinds & (2 /* TypeAssertions */ | 32 /* Satisfies */)) !== 0; + case 234 /* ExpressionWithTypeArguments */: + return (kinds & 16 /* ExpressionsWithTypeArguments */) !== 0; + case 236 /* NonNullExpression */: + return (kinds & 4 /* NonNullAssertions */) !== 0; + case 356 /* PartiallyEmittedExpression */: + return (kinds & 8 /* PartiallyEmittedExpressions */) !== 0; + } + return false; +} +function skipOuterExpressions(node, kinds = 63 /* All */) { + while (isOuterExpression(node, kinds)) { + node = node.expression; + } + return node; +} +function walkUpOuterExpressions(node, kinds = 63 /* All */) { + let parent2 = node.parent; + while (isOuterExpression(parent2, kinds)) { + parent2 = parent2.parent; + Debug.assert(parent2); + } + return parent2; +} +function startOnNewLine(node) { + return setStartsOnNewLine( + node, + /*newLine*/ + true + ); +} +function getExternalHelpersModuleName(node) { + const parseNode = getOriginalNode(node, isSourceFile); + const emitNode = parseNode && parseNode.emitNode; + return emitNode && emitNode.externalHelpersModuleName; +} +function hasRecordedExternalHelpers(sourceFile) { + const parseNode = getOriginalNode(sourceFile, isSourceFile); + const emitNode = parseNode && parseNode.emitNode; + return !!emitNode && (!!emitNode.externalHelpersModuleName || !!emitNode.externalHelpers); +} +function createExternalHelpersImportDeclarationIfNeeded(nodeFactory, helperFactory, sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStar, hasImportDefault) { + if (compilerOptions.importHelpers && isEffectiveExternalModule(sourceFile, compilerOptions)) { + const moduleKind = getEmitModuleKind(compilerOptions); + const impliedModuleKind = getImpliedNodeFormatForEmitWorker(sourceFile, compilerOptions); + const helpers = getImportedHelpers(sourceFile); + if (impliedModuleKind !== 1 /* CommonJS */ && (moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */ || impliedModuleKind === 99 /* ESNext */ || impliedModuleKind === void 0 && moduleKind === 200 /* Preserve */)) { + if (helpers) { + const helperNames = []; + for (const helper of helpers) { + const importName = helper.importName; + if (importName) { + pushIfUnique(helperNames, importName); + } + } + if (some(helperNames)) { + helperNames.sort(compareStringsCaseSensitive); + const namedBindings = nodeFactory.createNamedImports( + map(helperNames, (name) => isFileLevelUniqueName(sourceFile, name) ? nodeFactory.createImportSpecifier( + /*isTypeOnly*/ + false, + /*propertyName*/ + void 0, + nodeFactory.createIdentifier(name) + ) : nodeFactory.createImportSpecifier( + /*isTypeOnly*/ + false, + nodeFactory.createIdentifier(name), + helperFactory.getUnscopedHelperName(name) + )) + ); + const parseNode = getOriginalNode(sourceFile, isSourceFile); + const emitNode = getOrCreateEmitNode(parseNode); + emitNode.externalHelpers = true; + const externalHelpersImportDeclaration = nodeFactory.createImportDeclaration( + /*modifiers*/ + void 0, + nodeFactory.createImportClause( + /*phaseModifier*/ + void 0, + /*name*/ + void 0, + namedBindings + ), + nodeFactory.createStringLiteral(externalHelpersModuleNameText), + /*attributes*/ + void 0 + ); + addInternalEmitFlags(externalHelpersImportDeclaration, 2 /* NeverApplyImportHelper */); + return externalHelpersImportDeclaration; + } + } + } else { + const externalHelpersModuleName = getOrCreateExternalHelpersModuleNameIfNeeded(nodeFactory, sourceFile, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStar || hasImportDefault); + if (externalHelpersModuleName) { + const externalHelpersImportDeclaration = nodeFactory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + externalHelpersModuleName, + nodeFactory.createExternalModuleReference(nodeFactory.createStringLiteral(externalHelpersModuleNameText)) + ); + addInternalEmitFlags(externalHelpersImportDeclaration, 2 /* NeverApplyImportHelper */); + return externalHelpersImportDeclaration; + } + } + } +} +function getImportedHelpers(sourceFile) { + return filter(getEmitHelpers(sourceFile), (helper) => !helper.scoped); +} +function getOrCreateExternalHelpersModuleNameIfNeeded(factory2, node, compilerOptions, helpers, hasExportStarsToExportValues, hasImportStarOrImportDefault) { + const externalHelpersModuleName = getExternalHelpersModuleName(node); + if (externalHelpersModuleName) { + return externalHelpersModuleName; + } + const create = some(helpers) || (hasExportStarsToExportValues || getESModuleInterop(compilerOptions) && hasImportStarOrImportDefault) && getEmitModuleFormatOfFileWorker(node, compilerOptions) < 4 /* System */; + if (create) { + const parseNode = getOriginalNode(node, isSourceFile); + const emitNode = getOrCreateEmitNode(parseNode); + return emitNode.externalHelpersModuleName || (emitNode.externalHelpersModuleName = factory2.createUniqueName(externalHelpersModuleNameText)); + } +} +function getLocalNameForExternalImport(factory2, node, sourceFile) { + const namespaceDeclaration = getNamespaceDeclarationNode(node); + if (namespaceDeclaration && !isDefaultImport(node) && !isExportNamespaceAsDefaultDeclaration(node)) { + const name = namespaceDeclaration.name; + if (name.kind === 11 /* StringLiteral */) { + return factory2.getGeneratedNameForNode(node); + } + return isGeneratedIdentifier(name) ? name : factory2.createIdentifier(getSourceTextOfNodeFromSourceFile(sourceFile, name) || idText(name)); + } + if (node.kind === 273 /* ImportDeclaration */ && node.importClause) { + return factory2.getGeneratedNameForNode(node); + } + if (node.kind === 279 /* ExportDeclaration */ && node.moduleSpecifier) { + return factory2.getGeneratedNameForNode(node); + } + return void 0; +} +function getExternalModuleNameLiteral(factory2, importNode, sourceFile, host, resolver, compilerOptions) { + const moduleName = getExternalModuleName(importNode); + if (moduleName && isStringLiteral(moduleName)) { + return tryGetModuleNameFromDeclaration(importNode, host, factory2, resolver, compilerOptions) || tryRenameExternalModule(factory2, moduleName, sourceFile) || factory2.cloneNode(moduleName); + } + return void 0; +} +function tryRenameExternalModule(factory2, moduleName, sourceFile) { + const rename = sourceFile.renamedDependencies && sourceFile.renamedDependencies.get(moduleName.text); + return rename ? factory2.createStringLiteral(rename) : void 0; +} +function tryGetModuleNameFromFile(factory2, file, host, options) { + if (!file) { + return void 0; + } + if (file.moduleName) { + return factory2.createStringLiteral(file.moduleName); + } + if (!file.isDeclarationFile && options.outFile) { + return factory2.createStringLiteral(getExternalModuleNameFromPath(host, file.fileName)); + } + return void 0; +} +function tryGetModuleNameFromDeclaration(declaration, host, factory2, resolver, compilerOptions) { + return tryGetModuleNameFromFile(factory2, resolver.getExternalModuleFileFromDeclaration(declaration), host, compilerOptions); +} +function getInitializerOfBindingOrAssignmentElement(bindingElement) { + if (isDeclarationBindingElement(bindingElement)) { + return bindingElement.initializer; + } + if (isPropertyAssignment(bindingElement)) { + const initializer = bindingElement.initializer; + return isAssignmentExpression( + initializer, + /*excludeCompoundAssignment*/ + true + ) ? initializer.right : void 0; + } + if (isShorthandPropertyAssignment(bindingElement)) { + return bindingElement.objectAssignmentInitializer; + } + if (isAssignmentExpression( + bindingElement, + /*excludeCompoundAssignment*/ + true + )) { + return bindingElement.right; + } + if (isSpreadElement(bindingElement)) { + return getInitializerOfBindingOrAssignmentElement(bindingElement.expression); + } +} +function getTargetOfBindingOrAssignmentElement(bindingElement) { + if (isDeclarationBindingElement(bindingElement)) { + return bindingElement.name; + } + if (isObjectLiteralElementLike(bindingElement)) { + switch (bindingElement.kind) { + case 304 /* PropertyAssignment */: + return getTargetOfBindingOrAssignmentElement(bindingElement.initializer); + case 305 /* ShorthandPropertyAssignment */: + return bindingElement.name; + case 306 /* SpreadAssignment */: + return getTargetOfBindingOrAssignmentElement(bindingElement.expression); + } + return void 0; + } + if (isAssignmentExpression( + bindingElement, + /*excludeCompoundAssignment*/ + true + )) { + return getTargetOfBindingOrAssignmentElement(bindingElement.left); + } + if (isSpreadElement(bindingElement)) { + return getTargetOfBindingOrAssignmentElement(bindingElement.expression); + } + return bindingElement; +} +function getRestIndicatorOfBindingOrAssignmentElement(bindingElement) { + switch (bindingElement.kind) { + case 170 /* Parameter */: + case 209 /* BindingElement */: + return bindingElement.dotDotDotToken; + case 231 /* SpreadElement */: + case 306 /* SpreadAssignment */: + return bindingElement; + } + return void 0; +} +function getPropertyNameOfBindingOrAssignmentElement(bindingElement) { + const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement); + Debug.assert(!!propertyName || isSpreadAssignment(bindingElement), "Invalid property name for binding element."); + return propertyName; +} +function tryGetPropertyNameOfBindingOrAssignmentElement(bindingElement) { + switch (bindingElement.kind) { + case 209 /* BindingElement */: + if (bindingElement.propertyName) { + const propertyName = bindingElement.propertyName; + if (isPrivateIdentifier(propertyName)) { + return Debug.failBadSyntaxKind(propertyName); + } + return isComputedPropertyName(propertyName) && isStringOrNumericLiteral(propertyName.expression) ? propertyName.expression : propertyName; + } + break; + case 304 /* PropertyAssignment */: + if (bindingElement.name) { + const propertyName = bindingElement.name; + if (isPrivateIdentifier(propertyName)) { + return Debug.failBadSyntaxKind(propertyName); + } + return isComputedPropertyName(propertyName) && isStringOrNumericLiteral(propertyName.expression) ? propertyName.expression : propertyName; + } + break; + case 306 /* SpreadAssignment */: + if (bindingElement.name && isPrivateIdentifier(bindingElement.name)) { + return Debug.failBadSyntaxKind(bindingElement.name); + } + return bindingElement.name; + } + const target = getTargetOfBindingOrAssignmentElement(bindingElement); + if (target && isPropertyName(target)) { + return target; + } +} +function isStringOrNumericLiteral(node) { + const kind = node.kind; + return kind === 11 /* StringLiteral */ || kind === 9 /* NumericLiteral */; +} +function getElementsOfBindingOrAssignmentPattern(name) { + switch (name.kind) { + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + case 210 /* ArrayLiteralExpression */: + return name.elements; + case 211 /* ObjectLiteralExpression */: + return name.properties; + } +} +function getJSDocTypeAliasName(fullName) { + if (fullName) { + let rightNode = fullName; + while (true) { + if (isIdentifier(rightNode) || !rightNode.body) { + return isIdentifier(rightNode) ? rightNode : rightNode.name; + } + rightNode = rightNode.body; + } + } +} +function canHaveIllegalType(node) { + const kind = node.kind; + return kind === 177 /* Constructor */ || kind === 179 /* SetAccessor */; +} +function canHaveIllegalTypeParameters(node) { + const kind = node.kind; + return kind === 177 /* Constructor */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */; +} +function canHaveIllegalDecorators(node) { + const kind = node.kind; + return kind === 304 /* PropertyAssignment */ || kind === 305 /* ShorthandPropertyAssignment */ || kind === 263 /* FunctionDeclaration */ || kind === 177 /* Constructor */ || kind === 182 /* IndexSignature */ || kind === 176 /* ClassStaticBlockDeclaration */ || kind === 283 /* MissingDeclaration */ || kind === 244 /* VariableStatement */ || kind === 265 /* InterfaceDeclaration */ || kind === 266 /* TypeAliasDeclaration */ || kind === 267 /* EnumDeclaration */ || kind === 268 /* ModuleDeclaration */ || kind === 272 /* ImportEqualsDeclaration */ || kind === 273 /* ImportDeclaration */ || kind === 271 /* NamespaceExportDeclaration */ || kind === 279 /* ExportDeclaration */ || kind === 278 /* ExportAssignment */; +} +function canHaveIllegalModifiers(node) { + const kind = node.kind; + return kind === 176 /* ClassStaticBlockDeclaration */ || kind === 304 /* PropertyAssignment */ || kind === 305 /* ShorthandPropertyAssignment */ || kind === 283 /* MissingDeclaration */ || kind === 271 /* NamespaceExportDeclaration */; +} +function isQuestionOrExclamationToken(node) { + return isQuestionToken(node) || isExclamationToken(node); +} +function isIdentifierOrThisTypeNode(node) { + return isIdentifier(node) || isThisTypeNode(node); +} +function isReadonlyKeywordOrPlusOrMinusToken(node) { + return isReadonlyKeyword(node) || isPlusToken(node) || isMinusToken(node); +} +function isQuestionOrPlusOrMinusToken(node) { + return isQuestionToken(node) || isPlusToken(node) || isMinusToken(node); +} +function isModuleName(node) { + return isIdentifier(node) || isStringLiteral(node); +} +function isExponentiationOperator(kind) { + return kind === 43 /* AsteriskAsteriskToken */; +} +function isMultiplicativeOperator(kind) { + return kind === 42 /* AsteriskToken */ || kind === 44 /* SlashToken */ || kind === 45 /* PercentToken */; +} +function isMultiplicativeOperatorOrHigher(kind) { + return isExponentiationOperator(kind) || isMultiplicativeOperator(kind); +} +function isAdditiveOperator(kind) { + return kind === 40 /* PlusToken */ || kind === 41 /* MinusToken */; +} +function isAdditiveOperatorOrHigher(kind) { + return isAdditiveOperator(kind) || isMultiplicativeOperatorOrHigher(kind); +} +function isShiftOperator(kind) { + return kind === 48 /* LessThanLessThanToken */ || kind === 49 /* GreaterThanGreaterThanToken */ || kind === 50 /* GreaterThanGreaterThanGreaterThanToken */; +} +function isShiftOperatorOrHigher(kind) { + return isShiftOperator(kind) || isAdditiveOperatorOrHigher(kind); +} +function isRelationalOperator(kind) { + return kind === 30 /* LessThanToken */ || kind === 33 /* LessThanEqualsToken */ || kind === 32 /* GreaterThanToken */ || kind === 34 /* GreaterThanEqualsToken */ || kind === 104 /* InstanceOfKeyword */ || kind === 103 /* InKeyword */; +} +function isRelationalOperatorOrHigher(kind) { + return isRelationalOperator(kind) || isShiftOperatorOrHigher(kind); +} +function isEqualityOperator(kind) { + return kind === 35 /* EqualsEqualsToken */ || kind === 37 /* EqualsEqualsEqualsToken */ || kind === 36 /* ExclamationEqualsToken */ || kind === 38 /* ExclamationEqualsEqualsToken */; +} +function isEqualityOperatorOrHigher(kind) { + return isEqualityOperator(kind) || isRelationalOperatorOrHigher(kind); +} +function isBitwiseOperator(kind) { + return kind === 51 /* AmpersandToken */ || kind === 52 /* BarToken */ || kind === 53 /* CaretToken */; +} +function isBitwiseOperatorOrHigher(kind) { + return isBitwiseOperator(kind) || isEqualityOperatorOrHigher(kind); +} +function isLogicalOperator2(kind) { + return kind === 56 /* AmpersandAmpersandToken */ || kind === 57 /* BarBarToken */; +} +function isLogicalOperatorOrHigher(kind) { + return isLogicalOperator2(kind) || isBitwiseOperatorOrHigher(kind); +} +function isAssignmentOperatorOrHigher(kind) { + return kind === 61 /* QuestionQuestionToken */ || isLogicalOperatorOrHigher(kind) || isAssignmentOperator(kind); +} +function isBinaryOperator(kind) { + return isAssignmentOperatorOrHigher(kind) || kind === 28 /* CommaToken */; +} +function isBinaryOperatorToken(node) { + return isBinaryOperator(node.kind); +} +var BinaryExpressionState; +((BinaryExpressionState2) => { + function enter(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, outerState) { + const prevUserState = stackIndex > 0 ? userStateStack[stackIndex - 1] : void 0; + Debug.assertEqual(stateStack[stackIndex], enter); + userStateStack[stackIndex] = machine.onEnter(nodeStack[stackIndex], prevUserState, outerState); + stateStack[stackIndex] = nextState(machine, enter); + return stackIndex; + } + BinaryExpressionState2.enter = enter; + function left(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, _outerState) { + Debug.assertEqual(stateStack[stackIndex], left); + Debug.assertIsDefined(machine.onLeft); + stateStack[stackIndex] = nextState(machine, left); + const nextNode = machine.onLeft(nodeStack[stackIndex].left, userStateStack[stackIndex], nodeStack[stackIndex]); + if (nextNode) { + checkCircularity(stackIndex, nodeStack, nextNode); + return pushStack(stackIndex, stateStack, nodeStack, userStateStack, nextNode); + } + return stackIndex; + } + BinaryExpressionState2.left = left; + function operator(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, _outerState) { + Debug.assertEqual(stateStack[stackIndex], operator); + Debug.assertIsDefined(machine.onOperator); + stateStack[stackIndex] = nextState(machine, operator); + machine.onOperator(nodeStack[stackIndex].operatorToken, userStateStack[stackIndex], nodeStack[stackIndex]); + return stackIndex; + } + BinaryExpressionState2.operator = operator; + function right(machine, stackIndex, stateStack, nodeStack, userStateStack, _resultHolder, _outerState) { + Debug.assertEqual(stateStack[stackIndex], right); + Debug.assertIsDefined(machine.onRight); + stateStack[stackIndex] = nextState(machine, right); + const nextNode = machine.onRight(nodeStack[stackIndex].right, userStateStack[stackIndex], nodeStack[stackIndex]); + if (nextNode) { + checkCircularity(stackIndex, nodeStack, nextNode); + return pushStack(stackIndex, stateStack, nodeStack, userStateStack, nextNode); + } + return stackIndex; + } + BinaryExpressionState2.right = right; + function exit(machine, stackIndex, stateStack, nodeStack, userStateStack, resultHolder, _outerState) { + Debug.assertEqual(stateStack[stackIndex], exit); + stateStack[stackIndex] = nextState(machine, exit); + const result = machine.onExit(nodeStack[stackIndex], userStateStack[stackIndex]); + if (stackIndex > 0) { + stackIndex--; + if (machine.foldState) { + const side = stateStack[stackIndex] === exit ? "right" : "left"; + userStateStack[stackIndex] = machine.foldState(userStateStack[stackIndex], result, side); + } + } else { + resultHolder.value = result; + } + return stackIndex; + } + BinaryExpressionState2.exit = exit; + function done(_machine, stackIndex, stateStack, _nodeStack, _userStateStack, _resultHolder, _outerState) { + Debug.assertEqual(stateStack[stackIndex], done); + return stackIndex; + } + BinaryExpressionState2.done = done; + function nextState(machine, currentState) { + switch (currentState) { + case enter: + if (machine.onLeft) return left; + // falls through + case left: + if (machine.onOperator) return operator; + // falls through + case operator: + if (machine.onRight) return right; + // falls through + case right: + return exit; + case exit: + return done; + case done: + return done; + default: + Debug.fail("Invalid state"); + } + } + BinaryExpressionState2.nextState = nextState; + function pushStack(stackIndex, stateStack, nodeStack, userStateStack, node) { + stackIndex++; + stateStack[stackIndex] = enter; + nodeStack[stackIndex] = node; + userStateStack[stackIndex] = void 0; + return stackIndex; + } + function checkCircularity(stackIndex, nodeStack, node) { + if (Debug.shouldAssert(2 /* Aggressive */)) { + while (stackIndex >= 0) { + Debug.assert(nodeStack[stackIndex] !== node, "Circular traversal detected."); + stackIndex--; + } + } + } +})(BinaryExpressionState || (BinaryExpressionState = {})); +var BinaryExpressionStateMachine = class { + constructor(onEnter, onLeft, onOperator, onRight, onExit, foldState) { + this.onEnter = onEnter; + this.onLeft = onLeft; + this.onOperator = onOperator; + this.onRight = onRight; + this.onExit = onExit; + this.foldState = foldState; + } +}; +function createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState) { + const machine = new BinaryExpressionStateMachine(onEnter, onLeft, onOperator, onRight, onExit, foldState); + return trampoline; + function trampoline(node, outerState) { + const resultHolder = { value: void 0 }; + const stateStack = [BinaryExpressionState.enter]; + const nodeStack = [node]; + const userStateStack = [void 0]; + let stackIndex = 0; + while (stateStack[stackIndex] !== BinaryExpressionState.done) { + stackIndex = stateStack[stackIndex](machine, stackIndex, stateStack, nodeStack, userStateStack, resultHolder, outerState); + } + Debug.assertEqual(stackIndex, 0); + return resultHolder.value; + } +} +function isExportOrDefaultKeywordKind(kind) { + return kind === 95 /* ExportKeyword */ || kind === 90 /* DefaultKeyword */; +} +function isExportOrDefaultModifier(node) { + const kind = node.kind; + return isExportOrDefaultKeywordKind(kind); +} +function elideNodes(factory2, nodes) { + if (nodes === void 0) return void 0; + if (nodes.length === 0) return nodes; + return setTextRange(factory2.createNodeArray([], nodes.hasTrailingComma), nodes); +} +function getNodeForGeneratedName(name) { + var _a; + const autoGenerate = name.emitNode.autoGenerate; + if (autoGenerate.flags & 4 /* Node */) { + const autoGenerateId = autoGenerate.id; + let node = name; + let original = node.original; + while (original) { + node = original; + const autoGenerate2 = (_a = node.emitNode) == null ? void 0 : _a.autoGenerate; + if (isMemberName(node) && (autoGenerate2 === void 0 || !!(autoGenerate2.flags & 4 /* Node */) && autoGenerate2.id !== autoGenerateId)) { + break; + } + original = node.original; + } + return node; + } + return name; +} +function formatGeneratedNamePart(part, generateName) { + return typeof part === "object" ? formatGeneratedName( + /*privateName*/ + false, + part.prefix, + part.node, + part.suffix, + generateName + ) : typeof part === "string" ? part.length > 0 && part.charCodeAt(0) === 35 /* hash */ ? part.slice(1) : part : ""; +} +function formatIdentifier(name, generateName) { + return typeof name === "string" ? name : formatIdentifierWorker(name, Debug.checkDefined(generateName)); +} +function formatIdentifierWorker(node, generateName) { + return isGeneratedPrivateIdentifier(node) ? generateName(node).slice(1) : isGeneratedIdentifier(node) ? generateName(node) : isPrivateIdentifier(node) ? node.escapedText.slice(1) : idText(node); +} +function formatGeneratedName(privateName, prefix, baseName, suffix, generateName) { + prefix = formatGeneratedNamePart(prefix, generateName); + suffix = formatGeneratedNamePart(suffix, generateName); + baseName = formatIdentifier(baseName, generateName); + return `${privateName ? "#" : ""}${prefix}${baseName}${suffix}`; +} +function createAccessorPropertyBackingField(factory2, node, modifiers, initializer) { + return factory2.updatePropertyDeclaration( + node, + modifiers, + factory2.getGeneratedPrivateNameForNode( + node.name, + /*prefix*/ + void 0, + "_accessor_storage" + ), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ); +} +function createAccessorPropertyGetRedirector(factory2, node, modifiers, name, receiver = factory2.createThis()) { + return factory2.createGetAccessorDeclaration( + modifiers, + name, + [], + /*type*/ + void 0, + factory2.createBlock([ + factory2.createReturnStatement( + factory2.createPropertyAccessExpression( + receiver, + factory2.getGeneratedPrivateNameForNode( + node.name, + /*prefix*/ + void 0, + "_accessor_storage" + ) + ) + ) + ]) + ); +} +function createAccessorPropertySetRedirector(factory2, node, modifiers, name, receiver = factory2.createThis()) { + return factory2.createSetAccessorDeclaration( + modifiers, + name, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "value" + )], + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression( + receiver, + factory2.getGeneratedPrivateNameForNode( + node.name, + /*prefix*/ + void 0, + "_accessor_storage" + ) + ), + factory2.createIdentifier("value") + ) + ) + ]) + ); +} +function findComputedPropertyNameCacheAssignment(name) { + let node = name.expression; + while (true) { + node = skipOuterExpressions(node); + if (isCommaListExpression(node)) { + node = last(node.elements); + continue; + } + if (isCommaExpression(node)) { + node = node.right; + continue; + } + if (isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + ) && isGeneratedIdentifier(node.left)) { + return node; + } + break; + } +} +function isSyntheticParenthesizedExpression(node) { + return isParenthesizedExpression(node) && nodeIsSynthesized(node) && !node.emitNode; +} +function flattenCommaListWorker(node, expressions) { + if (isSyntheticParenthesizedExpression(node)) { + flattenCommaListWorker(node.expression, expressions); + } else if (isCommaExpression(node)) { + flattenCommaListWorker(node.left, expressions); + flattenCommaListWorker(node.right, expressions); + } else if (isCommaListExpression(node)) { + for (const child of node.elements) { + flattenCommaListWorker(child, expressions); + } + } else { + expressions.push(node); + } +} +function flattenCommaList(node) { + const expressions = []; + flattenCommaListWorker(node, expressions); + return expressions; +} +function containsObjectRestOrSpread(node) { + if (node.transformFlags & 65536 /* ContainsObjectRestOrSpread */) return true; + if (node.transformFlags & 128 /* ContainsES2018 */) { + for (const element of getElementsOfBindingOrAssignmentPattern(node)) { + const target = getTargetOfBindingOrAssignmentElement(element); + if (target && isAssignmentPattern(target)) { + if (target.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + return true; + } + if (target.transformFlags & 128 /* ContainsES2018 */) { + if (containsObjectRestOrSpread(target)) return true; + } + } + } + } + return false; +} + +// src/compiler/factory/utilitiesPublic.ts +function setTextRange(range, location) { + return location ? setTextRangePosEnd(range, location.pos, location.end) : range; +} +function canHaveModifiers(node) { + const kind = node.kind; + return kind === 169 /* TypeParameter */ || kind === 170 /* Parameter */ || kind === 172 /* PropertySignature */ || kind === 173 /* PropertyDeclaration */ || kind === 174 /* MethodSignature */ || kind === 175 /* MethodDeclaration */ || kind === 177 /* Constructor */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */ || kind === 182 /* IndexSignature */ || kind === 186 /* ConstructorType */ || kind === 219 /* FunctionExpression */ || kind === 220 /* ArrowFunction */ || kind === 232 /* ClassExpression */ || kind === 244 /* VariableStatement */ || kind === 263 /* FunctionDeclaration */ || kind === 264 /* ClassDeclaration */ || kind === 265 /* InterfaceDeclaration */ || kind === 266 /* TypeAliasDeclaration */ || kind === 267 /* EnumDeclaration */ || kind === 268 /* ModuleDeclaration */ || kind === 272 /* ImportEqualsDeclaration */ || kind === 273 /* ImportDeclaration */ || kind === 278 /* ExportAssignment */ || kind === 279 /* ExportDeclaration */; +} +function canHaveDecorators(node) { + const kind = node.kind; + return kind === 170 /* Parameter */ || kind === 173 /* PropertyDeclaration */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */ || kind === 232 /* ClassExpression */ || kind === 264 /* ClassDeclaration */; +} + +// src/compiler/parser.ts +var NodeConstructor; +var TokenConstructor; +var IdentifierConstructor; +var PrivateIdentifierConstructor; +var SourceFileConstructor; +var parseBaseNodeFactory = { + createBaseSourceFileNode: (kind) => new (SourceFileConstructor || (SourceFileConstructor = objectAllocator.getSourceFileConstructor()))(kind, -1, -1), + createBaseIdentifierNode: (kind) => new (IdentifierConstructor || (IdentifierConstructor = objectAllocator.getIdentifierConstructor()))(kind, -1, -1), + createBasePrivateIdentifierNode: (kind) => new (PrivateIdentifierConstructor || (PrivateIdentifierConstructor = objectAllocator.getPrivateIdentifierConstructor()))(kind, -1, -1), + createBaseTokenNode: (kind) => new (TokenConstructor || (TokenConstructor = objectAllocator.getTokenConstructor()))(kind, -1, -1), + createBaseNode: (kind) => new (NodeConstructor || (NodeConstructor = objectAllocator.getNodeConstructor()))(kind, -1, -1) +}; +var parseNodeFactory = createNodeFactory(1 /* NoParenthesizerRules */, parseBaseNodeFactory); +function visitNode2(cbNode, node) { + return node && cbNode(node); +} +function visitNodes(cbNode, cbNodes, nodes) { + if (nodes) { + if (cbNodes) { + return cbNodes(nodes); + } + for (const node of nodes) { + const result = cbNode(node); + if (result) { + return result; + } + } + } +} +function isJSDocLikeText(text, start) { + return text.charCodeAt(start + 1) === 42 /* asterisk */ && text.charCodeAt(start + 2) === 42 /* asterisk */ && text.charCodeAt(start + 3) !== 47 /* slash */; +} +function isFileProbablyExternalModule(sourceFile) { + return forEach(sourceFile.statements, isAnExternalModuleIndicatorNode) || getImportMetaIfNecessary(sourceFile); +} +function isAnExternalModuleIndicatorNode(node) { + return canHaveModifiers(node) && hasModifierOfKind(node, 95 /* ExportKeyword */) || isImportEqualsDeclaration(node) && isExternalModuleReference(node.moduleReference) || isImportDeclaration(node) || isExportAssignment(node) || isExportDeclaration(node) ? node : void 0; +} +function getImportMetaIfNecessary(sourceFile) { + return sourceFile.flags & 8388608 /* PossiblyContainsImportMeta */ ? walkTreeForImportMeta(sourceFile) : void 0; +} +function walkTreeForImportMeta(node) { + return isImportMeta2(node) ? node : forEachChild(node, walkTreeForImportMeta); +} +function hasModifierOfKind(node, kind) { + return some(node.modifiers, (m) => m.kind === kind); +} +function isImportMeta2(node) { + return isMetaProperty(node) && node.keywordToken === 102 /* ImportKeyword */ && node.name.escapedText === "meta"; +} +var forEachChildTable = { + [167 /* QualifiedName */]: function forEachChildInQualifiedName(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.left) || visitNode2(cbNode, node.right); + }, + [169 /* TypeParameter */]: function forEachChildInTypeParameter(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.constraint) || visitNode2(cbNode, node.default) || visitNode2(cbNode, node.expression); + }, + [305 /* ShorthandPropertyAssignment */]: function forEachChildInShorthandPropertyAssignment(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.exclamationToken) || visitNode2(cbNode, node.equalsToken) || visitNode2(cbNode, node.objectAssignmentInitializer); + }, + [306 /* SpreadAssignment */]: function forEachChildInSpreadAssignment(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [170 /* Parameter */]: function forEachChildInParameter(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.dotDotDotToken) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.initializer); + }, + [173 /* PropertyDeclaration */]: function forEachChildInPropertyDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.exclamationToken) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.initializer); + }, + [172 /* PropertySignature */]: function forEachChildInPropertySignature(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.initializer); + }, + [304 /* PropertyAssignment */]: function forEachChildInPropertyAssignment(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.exclamationToken) || visitNode2(cbNode, node.initializer); + }, + [261 /* VariableDeclaration */]: function forEachChildInVariableDeclaration(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name) || visitNode2(cbNode, node.exclamationToken) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.initializer); + }, + [209 /* BindingElement */]: function forEachChildInBindingElement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.dotDotDotToken) || visitNode2(cbNode, node.propertyName) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.initializer); + }, + [182 /* IndexSignature */]: function forEachChildInIndexSignature(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type); + }, + [186 /* ConstructorType */]: function forEachChildInConstructorType(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type); + }, + [185 /* FunctionType */]: function forEachChildInFunctionType(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type); + }, + [180 /* CallSignature */]: forEachChildInCallOrConstructSignature, + [181 /* ConstructSignature */]: forEachChildInCallOrConstructSignature, + [175 /* MethodDeclaration */]: function forEachChildInMethodDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.asteriskToken) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.exclamationToken) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.body); + }, + [174 /* MethodSignature */]: function forEachChildInMethodSignature(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type); + }, + [177 /* Constructor */]: function forEachChildInConstructor(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.body); + }, + [178 /* GetAccessor */]: function forEachChildInGetAccessor(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.body); + }, + [179 /* SetAccessor */]: function forEachChildInSetAccessor(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.body); + }, + [263 /* FunctionDeclaration */]: function forEachChildInFunctionDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.asteriskToken) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.body); + }, + [219 /* FunctionExpression */]: function forEachChildInFunctionExpression(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.asteriskToken) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.body); + }, + [220 /* ArrowFunction */]: function forEachChildInArrowFunction(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type) || visitNode2(cbNode, node.equalsGreaterThanToken) || visitNode2(cbNode, node.body); + }, + [176 /* ClassStaticBlockDeclaration */]: function forEachChildInClassStaticBlockDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.body); + }, + [184 /* TypeReference */]: function forEachChildInTypeReference(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.typeName) || visitNodes(cbNode, cbNodes, node.typeArguments); + }, + [183 /* TypePredicate */]: function forEachChildInTypePredicate(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.assertsModifier) || visitNode2(cbNode, node.parameterName) || visitNode2(cbNode, node.type); + }, + [187 /* TypeQuery */]: function forEachChildInTypeQuery(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.exprName) || visitNodes(cbNode, cbNodes, node.typeArguments); + }, + [188 /* TypeLiteral */]: function forEachChildInTypeLiteral(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.members); + }, + [189 /* ArrayType */]: function forEachChildInArrayType(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.elementType); + }, + [190 /* TupleType */]: function forEachChildInTupleType(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.elements); + }, + [193 /* UnionType */]: forEachChildInUnionOrIntersectionType, + [194 /* IntersectionType */]: forEachChildInUnionOrIntersectionType, + [195 /* ConditionalType */]: function forEachChildInConditionalType(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.checkType) || visitNode2(cbNode, node.extendsType) || visitNode2(cbNode, node.trueType) || visitNode2(cbNode, node.falseType); + }, + [196 /* InferType */]: function forEachChildInInferType(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.typeParameter); + }, + [206 /* ImportType */]: function forEachChildInImportType(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.argument) || visitNode2(cbNode, node.attributes) || visitNode2(cbNode, node.qualifier) || visitNodes(cbNode, cbNodes, node.typeArguments); + }, + [303 /* ImportTypeAssertionContainer */]: function forEachChildInImportTypeAssertionContainer(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.assertClause); + }, + [197 /* ParenthesizedType */]: forEachChildInParenthesizedTypeOrTypeOperator, + [199 /* TypeOperator */]: forEachChildInParenthesizedTypeOrTypeOperator, + [200 /* IndexedAccessType */]: function forEachChildInIndexedAccessType(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.objectType) || visitNode2(cbNode, node.indexType); + }, + [201 /* MappedType */]: function forEachChildInMappedType(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.readonlyToken) || visitNode2(cbNode, node.typeParameter) || visitNode2(cbNode, node.nameType) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.type) || visitNodes(cbNode, cbNodes, node.members); + }, + [202 /* LiteralType */]: function forEachChildInLiteralType(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.literal); + }, + [203 /* NamedTupleMember */]: function forEachChildInNamedTupleMember(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.dotDotDotToken) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.type); + }, + [207 /* ObjectBindingPattern */]: forEachChildInObjectOrArrayBindingPattern, + [208 /* ArrayBindingPattern */]: forEachChildInObjectOrArrayBindingPattern, + [210 /* ArrayLiteralExpression */]: function forEachChildInArrayLiteralExpression(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.elements); + }, + [211 /* ObjectLiteralExpression */]: function forEachChildInObjectLiteralExpression(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.properties); + }, + [212 /* PropertyAccessExpression */]: function forEachChildInPropertyAccessExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.questionDotToken) || visitNode2(cbNode, node.name); + }, + [213 /* ElementAccessExpression */]: function forEachChildInElementAccessExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.questionDotToken) || visitNode2(cbNode, node.argumentExpression); + }, + [214 /* CallExpression */]: forEachChildInCallOrNewExpression, + [215 /* NewExpression */]: forEachChildInCallOrNewExpression, + [216 /* TaggedTemplateExpression */]: function forEachChildInTaggedTemplateExpression(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tag) || visitNode2(cbNode, node.questionDotToken) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNode2(cbNode, node.template); + }, + [217 /* TypeAssertionExpression */]: function forEachChildInTypeAssertionExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.type) || visitNode2(cbNode, node.expression); + }, + [218 /* ParenthesizedExpression */]: function forEachChildInParenthesizedExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [221 /* DeleteExpression */]: function forEachChildInDeleteExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [222 /* TypeOfExpression */]: function forEachChildInTypeOfExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [223 /* VoidExpression */]: function forEachChildInVoidExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [225 /* PrefixUnaryExpression */]: function forEachChildInPrefixUnaryExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.operand); + }, + [230 /* YieldExpression */]: function forEachChildInYieldExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.asteriskToken) || visitNode2(cbNode, node.expression); + }, + [224 /* AwaitExpression */]: function forEachChildInAwaitExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [226 /* PostfixUnaryExpression */]: function forEachChildInPostfixUnaryExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.operand); + }, + [227 /* BinaryExpression */]: function forEachChildInBinaryExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.left) || visitNode2(cbNode, node.operatorToken) || visitNode2(cbNode, node.right); + }, + [235 /* AsExpression */]: function forEachChildInAsExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.type); + }, + [236 /* NonNullExpression */]: function forEachChildInNonNullExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [239 /* SatisfiesExpression */]: function forEachChildInSatisfiesExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.type); + }, + [237 /* MetaProperty */]: function forEachChildInMetaProperty(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name); + }, + [228 /* ConditionalExpression */]: function forEachChildInConditionalExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.condition) || visitNode2(cbNode, node.questionToken) || visitNode2(cbNode, node.whenTrue) || visitNode2(cbNode, node.colonToken) || visitNode2(cbNode, node.whenFalse); + }, + [231 /* SpreadElement */]: function forEachChildInSpreadElement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [242 /* Block */]: forEachChildInBlock, + [269 /* ModuleBlock */]: forEachChildInBlock, + [308 /* SourceFile */]: function forEachChildInSourceFile(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.statements) || visitNode2(cbNode, node.endOfFileToken); + }, + [244 /* VariableStatement */]: function forEachChildInVariableStatement(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.declarationList); + }, + [262 /* VariableDeclarationList */]: function forEachChildInVariableDeclarationList(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.declarations); + }, + [245 /* ExpressionStatement */]: function forEachChildInExpressionStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [246 /* IfStatement */]: function forEachChildInIfStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.thenStatement) || visitNode2(cbNode, node.elseStatement); + }, + [247 /* DoStatement */]: function forEachChildInDoStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.statement) || visitNode2(cbNode, node.expression); + }, + [248 /* WhileStatement */]: function forEachChildInWhileStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.statement); + }, + [249 /* ForStatement */]: function forEachChildInForStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.initializer) || visitNode2(cbNode, node.condition) || visitNode2(cbNode, node.incrementor) || visitNode2(cbNode, node.statement); + }, + [250 /* ForInStatement */]: function forEachChildInForInStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.initializer) || visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.statement); + }, + [251 /* ForOfStatement */]: function forEachChildInForOfStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.awaitModifier) || visitNode2(cbNode, node.initializer) || visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.statement); + }, + [252 /* ContinueStatement */]: forEachChildInContinueOrBreakStatement, + [253 /* BreakStatement */]: forEachChildInContinueOrBreakStatement, + [254 /* ReturnStatement */]: function forEachChildInReturnStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [255 /* WithStatement */]: function forEachChildInWithStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.statement); + }, + [256 /* SwitchStatement */]: function forEachChildInSwitchStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.caseBlock); + }, + [270 /* CaseBlock */]: function forEachChildInCaseBlock(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.clauses); + }, + [297 /* CaseClause */]: function forEachChildInCaseClause(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.statements); + }, + [298 /* DefaultClause */]: function forEachChildInDefaultClause(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.statements); + }, + [257 /* LabeledStatement */]: function forEachChildInLabeledStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.label) || visitNode2(cbNode, node.statement); + }, + [258 /* ThrowStatement */]: function forEachChildInThrowStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [259 /* TryStatement */]: function forEachChildInTryStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.tryBlock) || visitNode2(cbNode, node.catchClause) || visitNode2(cbNode, node.finallyBlock); + }, + [300 /* CatchClause */]: function forEachChildInCatchClause(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.variableDeclaration) || visitNode2(cbNode, node.block); + }, + [171 /* Decorator */]: function forEachChildInDecorator(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [264 /* ClassDeclaration */]: forEachChildInClassDeclarationOrExpression, + [232 /* ClassExpression */]: forEachChildInClassDeclarationOrExpression, + [265 /* InterfaceDeclaration */]: function forEachChildInInterfaceDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.heritageClauses) || visitNodes(cbNode, cbNodes, node.members); + }, + [266 /* TypeAliasDeclaration */]: function forEachChildInTypeAliasDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNode2(cbNode, node.type); + }, + [267 /* EnumDeclaration */]: function forEachChildInEnumDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.members); + }, + [307 /* EnumMember */]: function forEachChildInEnumMember(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name) || visitNode2(cbNode, node.initializer); + }, + [268 /* ModuleDeclaration */]: function forEachChildInModuleDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.body); + }, + [272 /* ImportEqualsDeclaration */]: function forEachChildInImportEqualsDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNode2(cbNode, node.moduleReference); + }, + [273 /* ImportDeclaration */]: function forEachChildInImportDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.importClause) || visitNode2(cbNode, node.moduleSpecifier) || visitNode2(cbNode, node.attributes); + }, + [274 /* ImportClause */]: function forEachChildInImportClause(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name) || visitNode2(cbNode, node.namedBindings); + }, + [301 /* ImportAttributes */]: function forEachChildInImportAttributes(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.elements); + }, + [302 /* ImportAttribute */]: function forEachChildInImportAttribute(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name) || visitNode2(cbNode, node.value); + }, + [271 /* NamespaceExportDeclaration */]: function forEachChildInNamespaceExportDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name); + }, + [275 /* NamespaceImport */]: function forEachChildInNamespaceImport(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name); + }, + [281 /* NamespaceExport */]: function forEachChildInNamespaceExport(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name); + }, + [276 /* NamedImports */]: forEachChildInNamedImportsOrExports, + [280 /* NamedExports */]: forEachChildInNamedImportsOrExports, + [279 /* ExportDeclaration */]: function forEachChildInExportDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.exportClause) || visitNode2(cbNode, node.moduleSpecifier) || visitNode2(cbNode, node.attributes); + }, + [277 /* ImportSpecifier */]: forEachChildInImportOrExportSpecifier, + [282 /* ExportSpecifier */]: forEachChildInImportOrExportSpecifier, + [278 /* ExportAssignment */]: function forEachChildInExportAssignment(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.expression); + }, + [229 /* TemplateExpression */]: function forEachChildInTemplateExpression(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans); + }, + [240 /* TemplateSpan */]: function forEachChildInTemplateSpan(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression) || visitNode2(cbNode, node.literal); + }, + [204 /* TemplateLiteralType */]: function forEachChildInTemplateLiteralType(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.head) || visitNodes(cbNode, cbNodes, node.templateSpans); + }, + [205 /* TemplateLiteralTypeSpan */]: function forEachChildInTemplateLiteralTypeSpan(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.type) || visitNode2(cbNode, node.literal); + }, + [168 /* ComputedPropertyName */]: function forEachChildInComputedPropertyName(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [299 /* HeritageClause */]: function forEachChildInHeritageClause(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.types); + }, + [234 /* ExpressionWithTypeArguments */]: function forEachChildInExpressionWithTypeArguments(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.expression) || visitNodes(cbNode, cbNodes, node.typeArguments); + }, + [284 /* ExternalModuleReference */]: function forEachChildInExternalModuleReference(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [283 /* MissingDeclaration */]: function forEachChildInMissingDeclaration(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers); + }, + [357 /* CommaListExpression */]: function forEachChildInCommaListExpression(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.elements); + }, + [285 /* JsxElement */]: function forEachChildInJsxElement(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.openingElement) || visitNodes(cbNode, cbNodes, node.children) || visitNode2(cbNode, node.closingElement); + }, + [289 /* JsxFragment */]: function forEachChildInJsxFragment(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.openingFragment) || visitNodes(cbNode, cbNodes, node.children) || visitNode2(cbNode, node.closingFragment); + }, + [286 /* JsxSelfClosingElement */]: forEachChildInJsxOpeningOrSelfClosingElement, + [287 /* JsxOpeningElement */]: forEachChildInJsxOpeningOrSelfClosingElement, + [293 /* JsxAttributes */]: function forEachChildInJsxAttributes(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.properties); + }, + [292 /* JsxAttribute */]: function forEachChildInJsxAttribute(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name) || visitNode2(cbNode, node.initializer); + }, + [294 /* JsxSpreadAttribute */]: function forEachChildInJsxSpreadAttribute(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); + }, + [295 /* JsxExpression */]: function forEachChildInJsxExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.dotDotDotToken) || visitNode2(cbNode, node.expression); + }, + [288 /* JsxClosingElement */]: function forEachChildInJsxClosingElement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.tagName); + }, + [296 /* JsxNamespacedName */]: function forEachChildInJsxNamespacedName(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.namespace) || visitNode2(cbNode, node.name); + }, + [191 /* OptionalType */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [192 /* RestType */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [310 /* JSDocTypeExpression */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [316 /* JSDocNonNullableType */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [315 /* JSDocNullableType */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [317 /* JSDocOptionalType */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [319 /* JSDocVariadicType */]: forEachChildInOptionalRestOrJSDocParameterModifier, + [318 /* JSDocFunctionType */]: function forEachChildInJSDocFunctionType(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type); + }, + [321 /* JSDoc */]: function forEachChildInJSDoc(node, cbNode, cbNodes) { + return (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)) || visitNodes(cbNode, cbNodes, node.tags); + }, + [348 /* JSDocSeeTag */]: function forEachChildInJSDocSeeTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.name) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); + }, + [311 /* JSDocNameReference */]: function forEachChildInJSDocNameReference(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name); + }, + [312 /* JSDocMemberName */]: function forEachChildInJSDocMemberName(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.left) || visitNode2(cbNode, node.right); + }, + [342 /* JSDocParameterTag */]: forEachChildInJSDocParameterOrPropertyTag, + [349 /* JSDocPropertyTag */]: forEachChildInJSDocParameterOrPropertyTag, + [331 /* JSDocAuthorTag */]: function forEachChildInJSDocAuthorTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); + }, + [330 /* JSDocImplementsTag */]: function forEachChildInJSDocImplementsTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.class) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); + }, + [329 /* JSDocAugmentsTag */]: function forEachChildInJSDocAugmentsTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.class) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); + }, + [346 /* JSDocTemplateTag */]: function forEachChildInJSDocTemplateTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.constraint) || visitNodes(cbNode, cbNodes, node.typeParameters) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); + }, + [347 /* JSDocTypedefTag */]: function forEachChildInJSDocTypedefTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || (node.typeExpression && node.typeExpression.kind === 310 /* JSDocTypeExpression */ ? visitNode2(cbNode, node.typeExpression) || visitNode2(cbNode, node.fullName) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)) : visitNode2(cbNode, node.fullName) || visitNode2(cbNode, node.typeExpression) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment))); + }, + [339 /* JSDocCallbackTag */]: function forEachChildInJSDocCallbackTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.fullName) || visitNode2(cbNode, node.typeExpression) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); + }, + [343 /* JSDocReturnTag */]: forEachChildInJSDocTypeLikeTag, + [345 /* JSDocTypeTag */]: forEachChildInJSDocTypeLikeTag, + [344 /* JSDocThisTag */]: forEachChildInJSDocTypeLikeTag, + [341 /* JSDocEnumTag */]: forEachChildInJSDocTypeLikeTag, + [351 /* JSDocSatisfiesTag */]: forEachChildInJSDocTypeLikeTag, + [350 /* JSDocThrowsTag */]: forEachChildInJSDocTypeLikeTag, + [340 /* JSDocOverloadTag */]: forEachChildInJSDocTypeLikeTag, + [324 /* JSDocSignature */]: function forEachChildInJSDocSignature(node, cbNode, _cbNodes) { + return forEach(node.typeParameters, cbNode) || forEach(node.parameters, cbNode) || visitNode2(cbNode, node.type); + }, + [325 /* JSDocLink */]: forEachChildInJSDocLinkCodeOrPlain, + [326 /* JSDocLinkCode */]: forEachChildInJSDocLinkCodeOrPlain, + [327 /* JSDocLinkPlain */]: forEachChildInJSDocLinkCodeOrPlain, + [323 /* JSDocTypeLiteral */]: function forEachChildInJSDocTypeLiteral(node, cbNode, _cbNodes) { + return forEach(node.jsDocPropertyTags, cbNode); + }, + [328 /* JSDocTag */]: forEachChildInJSDocTag, + [333 /* JSDocClassTag */]: forEachChildInJSDocTag, + [334 /* JSDocPublicTag */]: forEachChildInJSDocTag, + [335 /* JSDocPrivateTag */]: forEachChildInJSDocTag, + [336 /* JSDocProtectedTag */]: forEachChildInJSDocTag, + [337 /* JSDocReadonlyTag */]: forEachChildInJSDocTag, + [332 /* JSDocDeprecatedTag */]: forEachChildInJSDocTag, + [338 /* JSDocOverrideTag */]: forEachChildInJSDocTag, + [352 /* JSDocImportTag */]: forEachChildInJSDocImportTag, + [356 /* PartiallyEmittedExpression */]: forEachChildInPartiallyEmittedExpression +}; +function forEachChildInCallOrConstructSignature(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.parameters) || visitNode2(cbNode, node.type); +} +function forEachChildInUnionOrIntersectionType(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.types); +} +function forEachChildInParenthesizedTypeOrTypeOperator(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.type); +} +function forEachChildInObjectOrArrayBindingPattern(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.elements); +} +function forEachChildInCallOrNewExpression(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.expression) || // TODO: should we separate these branches out? + visitNode2(cbNode, node.questionDotToken) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNodes(cbNode, cbNodes, node.arguments); +} +function forEachChildInBlock(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.statements); +} +function forEachChildInContinueOrBreakStatement(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.label); +} +function forEachChildInClassDeclarationOrExpression(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.modifiers) || visitNode2(cbNode, node.name) || visitNodes(cbNode, cbNodes, node.typeParameters) || visitNodes(cbNode, cbNodes, node.heritageClauses) || visitNodes(cbNode, cbNodes, node.members); +} +function forEachChildInNamedImportsOrExports(node, cbNode, cbNodes) { + return visitNodes(cbNode, cbNodes, node.elements); +} +function forEachChildInImportOrExportSpecifier(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.propertyName) || visitNode2(cbNode, node.name); +} +function forEachChildInJsxOpeningOrSelfClosingElement(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNodes(cbNode, cbNodes, node.typeArguments) || visitNode2(cbNode, node.attributes); +} +function forEachChildInOptionalRestOrJSDocParameterModifier(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.type); +} +function forEachChildInJSDocParameterOrPropertyTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || (node.isNameFirst ? visitNode2(cbNode, node.name) || visitNode2(cbNode, node.typeExpression) : visitNode2(cbNode, node.typeExpression) || visitNode2(cbNode, node.name)) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); +} +function forEachChildInJSDocTypeLikeTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.typeExpression) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); +} +function forEachChildInJSDocLinkCodeOrPlain(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.name); +} +function forEachChildInJSDocTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); +} +function forEachChildInJSDocImportTag(node, cbNode, cbNodes) { + return visitNode2(cbNode, node.tagName) || visitNode2(cbNode, node.importClause) || visitNode2(cbNode, node.moduleSpecifier) || visitNode2(cbNode, node.attributes) || (typeof node.comment === "string" ? void 0 : visitNodes(cbNode, cbNodes, node.comment)); +} +function forEachChildInPartiallyEmittedExpression(node, cbNode, _cbNodes) { + return visitNode2(cbNode, node.expression); +} +function forEachChild(node, cbNode, cbNodes) { + if (node === void 0 || node.kind <= 166 /* LastToken */) { + return; + } + const fn = forEachChildTable[node.kind]; + return fn === void 0 ? void 0 : fn(node, cbNode, cbNodes); +} +function forEachChildRecursively(rootNode, cbNode, cbNodes) { + const queue = gatherPossibleChildren(rootNode); + const parents = []; + while (parents.length < queue.length) { + parents.push(rootNode); + } + while (queue.length !== 0) { + const current = queue.pop(); + const parent2 = parents.pop(); + if (isArray(current)) { + if (cbNodes) { + const res = cbNodes(current, parent2); + if (res) { + if (res === "skip") continue; + return res; + } + } + for (let i = current.length - 1; i >= 0; --i) { + queue.push(current[i]); + parents.push(parent2); + } + } else { + const res = cbNode(current, parent2); + if (res) { + if (res === "skip") continue; + return res; + } + if (current.kind >= 167 /* FirstNode */) { + for (const child of gatherPossibleChildren(current)) { + queue.push(child); + parents.push(current); + } + } + } + } +} +function gatherPossibleChildren(node) { + const children = []; + forEachChild(node, addWorkItem, addWorkItem); + return children; + function addWorkItem(n) { + children.unshift(n); + } +} +function setExternalModuleIndicator(sourceFile) { + sourceFile.externalModuleIndicator = isFileProbablyExternalModule(sourceFile); +} +function createSourceFile(fileName, sourceText, languageVersionOrOptions, setParentNodes = false, scriptKind) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push( + tracing.Phase.Parse, + "createSourceFile", + { path: fileName }, + /*separateBeginAndEnd*/ + true + ); + mark("beforeParse"); + let result; + const { + languageVersion, + setExternalModuleIndicator: overrideSetExternalModuleIndicator, + impliedNodeFormat: format, + jsDocParsingMode + } = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : { languageVersion: languageVersionOrOptions }; + if (languageVersion === 100 /* JSON */) { + result = Parser.parseSourceFile( + fileName, + sourceText, + languageVersion, + /*syntaxCursor*/ + void 0, + setParentNodes, + 6 /* JSON */, + noop, + jsDocParsingMode + ); + } else { + const setIndicator = format === void 0 ? overrideSetExternalModuleIndicator : (file) => { + file.impliedNodeFormat = format; + return (overrideSetExternalModuleIndicator || setExternalModuleIndicator)(file); + }; + result = Parser.parseSourceFile( + fileName, + sourceText, + languageVersion, + /*syntaxCursor*/ + void 0, + setParentNodes, + scriptKind, + setIndicator, + jsDocParsingMode + ); + } + mark("afterParse"); + measure("Parse", "beforeParse", "afterParse"); + (_b = tracing) == null ? void 0 : _b.pop(); + return result; +} +function parseIsolatedEntityName(text, languageVersion) { + return Parser.parseIsolatedEntityName(text, languageVersion); +} +function parseJsonText(fileName, sourceText) { + return Parser.parseJsonText(fileName, sourceText); +} +function isExternalModule(file) { + return file.externalModuleIndicator !== void 0; +} +function updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks = false) { + const newSourceFile = IncrementalParser.updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); + newSourceFile.flags |= sourceFile.flags & 12582912 /* PermanentlySetIncrementalFlags */; + return newSourceFile; +} +function parseIsolatedJSDocComment(content, start, length2) { + const result = Parser.JSDocParser.parseIsolatedJSDocComment(content, start, length2); + if (result && result.jsDoc) { + Parser.fixupParentReferences(result.jsDoc); + } + return result; +} +function parseJSDocTypeExpressionForTests(content, start, length2) { + return Parser.JSDocParser.parseJSDocTypeExpressionForTests(content, start, length2); +} +var Parser; +((Parser2) => { + var scanner2 = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + true + ); + var disallowInAndDecoratorContext = 8192 /* DisallowInContext */ | 32768 /* DecoratorContext */; + var NodeConstructor2; + var TokenConstructor2; + var IdentifierConstructor2; + var PrivateIdentifierConstructor2; + var SourceFileConstructor2; + function countNode(node) { + nodeCount++; + return node; + } + var baseNodeFactory = { + createBaseSourceFileNode: (kind) => countNode(new SourceFileConstructor2( + kind, + /*pos*/ + 0, + /*end*/ + 0 + )), + createBaseIdentifierNode: (kind) => countNode(new IdentifierConstructor2( + kind, + /*pos*/ + 0, + /*end*/ + 0 + )), + createBasePrivateIdentifierNode: (kind) => countNode(new PrivateIdentifierConstructor2( + kind, + /*pos*/ + 0, + /*end*/ + 0 + )), + createBaseTokenNode: (kind) => countNode(new TokenConstructor2( + kind, + /*pos*/ + 0, + /*end*/ + 0 + )), + createBaseNode: (kind) => countNode(new NodeConstructor2( + kind, + /*pos*/ + 0, + /*end*/ + 0 + )) + }; + var factory2 = createNodeFactory(1 /* NoParenthesizerRules */ | 2 /* NoNodeConverters */ | 8 /* NoOriginalNode */, baseNodeFactory); + var { + createNodeArray: factoryCreateNodeArray, + createNumericLiteral: factoryCreateNumericLiteral, + createStringLiteral: factoryCreateStringLiteral, + createLiteralLikeNode: factoryCreateLiteralLikeNode, + createIdentifier: factoryCreateIdentifier, + createPrivateIdentifier: factoryCreatePrivateIdentifier, + createToken: factoryCreateToken, + createArrayLiteralExpression: factoryCreateArrayLiteralExpression, + createObjectLiteralExpression: factoryCreateObjectLiteralExpression, + createPropertyAccessExpression: factoryCreatePropertyAccessExpression, + createPropertyAccessChain: factoryCreatePropertyAccessChain, + createElementAccessExpression: factoryCreateElementAccessExpression, + createElementAccessChain: factoryCreateElementAccessChain, + createCallExpression: factoryCreateCallExpression, + createCallChain: factoryCreateCallChain, + createNewExpression: factoryCreateNewExpression, + createParenthesizedExpression: factoryCreateParenthesizedExpression, + createBlock: factoryCreateBlock, + createVariableStatement: factoryCreateVariableStatement, + createExpressionStatement: factoryCreateExpressionStatement, + createIfStatement: factoryCreateIfStatement, + createWhileStatement: factoryCreateWhileStatement, + createForStatement: factoryCreateForStatement, + createForOfStatement: factoryCreateForOfStatement, + createVariableDeclaration: factoryCreateVariableDeclaration, + createVariableDeclarationList: factoryCreateVariableDeclarationList + } = factory2; + var fileName; + var sourceFlags; + var sourceText; + var languageVersion; + var scriptKind; + var languageVariant; + var parseDiagnostics; + var jsDocDiagnostics; + var syntaxCursor; + var currentToken; + var nodeCount; + var identifiers; + var identifierCount; + var parsingContext; + var notParenthesizedArrow; + var contextFlags; + var topLevel = true; + var parseErrorBeforeNextFinishedNode = false; + function parseSourceFile(fileName2, sourceText2, languageVersion2, syntaxCursor2, setParentNodes = false, scriptKind2, setExternalModuleIndicatorOverride, jsDocParsingMode = 0 /* ParseAll */) { + var _a; + scriptKind2 = ensureScriptKind(fileName2, scriptKind2); + if (scriptKind2 === 6 /* JSON */) { + const result2 = parseJsonText2(fileName2, sourceText2, languageVersion2, syntaxCursor2, setParentNodes); + convertToJson( + result2, + (_a = result2.statements[0]) == null ? void 0 : _a.expression, + result2.parseDiagnostics, + /*returnValue*/ + false, + /*jsonConversionNotifier*/ + void 0 + ); + result2.referencedFiles = emptyArray; + result2.typeReferenceDirectives = emptyArray; + result2.libReferenceDirectives = emptyArray; + result2.amdDependencies = emptyArray; + result2.hasNoDefaultLib = false; + result2.pragmas = emptyMap; + return result2; + } + initializeState(fileName2, sourceText2, languageVersion2, syntaxCursor2, scriptKind2, jsDocParsingMode); + const result = parseSourceFileWorker(languageVersion2, setParentNodes, scriptKind2, setExternalModuleIndicatorOverride || setExternalModuleIndicator, jsDocParsingMode); + clearState(); + return result; + } + Parser2.parseSourceFile = parseSourceFile; + function parseIsolatedEntityName2(content, languageVersion2) { + initializeState( + "", + content, + languageVersion2, + /*syntaxCursor*/ + void 0, + 1 /* JS */, + 0 /* ParseAll */ + ); + nextToken(); + const entityName = parseEntityName( + /*allowReservedWords*/ + true + ); + const isValid = token() === 1 /* EndOfFileToken */ && !parseDiagnostics.length; + clearState(); + return isValid ? entityName : void 0; + } + Parser2.parseIsolatedEntityName = parseIsolatedEntityName2; + function parseJsonText2(fileName2, sourceText2, languageVersion2 = 2 /* ES2015 */, syntaxCursor2, setParentNodes = false) { + initializeState(fileName2, sourceText2, languageVersion2, syntaxCursor2, 6 /* JSON */, 0 /* ParseAll */); + sourceFlags = contextFlags; + nextToken(); + const pos = getNodePos(); + let statements, endOfFileToken; + if (token() === 1 /* EndOfFileToken */) { + statements = createNodeArray([], pos, pos); + endOfFileToken = parseTokenNode(); + } else { + let expressions; + while (token() !== 1 /* EndOfFileToken */) { + let expression2; + switch (token()) { + case 23 /* OpenBracketToken */: + expression2 = parseArrayLiteralExpression(); + break; + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 106 /* NullKeyword */: + expression2 = parseTokenNode(); + break; + case 41 /* MinusToken */: + if (lookAhead(() => nextToken() === 9 /* NumericLiteral */ && nextToken() !== 59 /* ColonToken */)) { + expression2 = parsePrefixUnaryExpression(); + } else { + expression2 = parseObjectLiteralExpression(); + } + break; + case 9 /* NumericLiteral */: + case 11 /* StringLiteral */: + if (lookAhead(() => nextToken() !== 59 /* ColonToken */)) { + expression2 = parseLiteralNode(); + break; + } + // falls through + default: + expression2 = parseObjectLiteralExpression(); + break; + } + if (expressions && isArray(expressions)) { + expressions.push(expression2); + } else if (expressions) { + expressions = [expressions, expression2]; + } else { + expressions = expression2; + if (token() !== 1 /* EndOfFileToken */) { + parseErrorAtCurrentToken(Diagnostics.Unexpected_token); + } + } + } + const expression = isArray(expressions) ? finishNode(factoryCreateArrayLiteralExpression(expressions), pos) : Debug.checkDefined(expressions); + const statement = factoryCreateExpressionStatement(expression); + finishNode(statement, pos); + statements = createNodeArray([statement], pos); + endOfFileToken = parseExpectedToken(1 /* EndOfFileToken */, Diagnostics.Unexpected_token); + } + const sourceFile = createSourceFile2( + fileName2, + 2 /* ES2015 */, + 6 /* JSON */, + /*isDeclarationFile*/ + false, + statements, + endOfFileToken, + sourceFlags, + noop + ); + if (setParentNodes) { + fixupParentReferences(sourceFile); + } + sourceFile.nodeCount = nodeCount; + sourceFile.identifierCount = identifierCount; + sourceFile.identifiers = identifiers; + sourceFile.parseDiagnostics = attachFileToDiagnostics(parseDiagnostics, sourceFile); + if (jsDocDiagnostics) { + sourceFile.jsDocDiagnostics = attachFileToDiagnostics(jsDocDiagnostics, sourceFile); + } + const result = sourceFile; + clearState(); + return result; + } + Parser2.parseJsonText = parseJsonText2; + function initializeState(_fileName, _sourceText, _languageVersion, _syntaxCursor, _scriptKind, _jsDocParsingMode) { + NodeConstructor2 = objectAllocator.getNodeConstructor(); + TokenConstructor2 = objectAllocator.getTokenConstructor(); + IdentifierConstructor2 = objectAllocator.getIdentifierConstructor(); + PrivateIdentifierConstructor2 = objectAllocator.getPrivateIdentifierConstructor(); + SourceFileConstructor2 = objectAllocator.getSourceFileConstructor(); + fileName = normalizePath(_fileName); + sourceText = _sourceText; + languageVersion = _languageVersion; + syntaxCursor = _syntaxCursor; + scriptKind = _scriptKind; + languageVariant = getLanguageVariant(_scriptKind); + parseDiagnostics = []; + parsingContext = 0; + identifiers = /* @__PURE__ */ new Map(); + identifierCount = 0; + nodeCount = 0; + sourceFlags = 0; + topLevel = true; + switch (scriptKind) { + case 1 /* JS */: + case 2 /* JSX */: + contextFlags = 524288 /* JavaScriptFile */; + break; + case 6 /* JSON */: + contextFlags = 524288 /* JavaScriptFile */ | 134217728 /* JsonFile */; + break; + default: + contextFlags = 0 /* None */; + break; + } + parseErrorBeforeNextFinishedNode = false; + scanner2.setText(sourceText); + scanner2.setOnError(scanError); + scanner2.setScriptTarget(languageVersion); + scanner2.setLanguageVariant(languageVariant); + scanner2.setScriptKind(scriptKind); + scanner2.setJSDocParsingMode(_jsDocParsingMode); + } + function clearState() { + scanner2.clearCommentDirectives(); + scanner2.setText(""); + scanner2.setOnError(void 0); + scanner2.setScriptKind(0 /* Unknown */); + scanner2.setJSDocParsingMode(0 /* ParseAll */); + sourceText = void 0; + languageVersion = void 0; + syntaxCursor = void 0; + scriptKind = void 0; + languageVariant = void 0; + sourceFlags = 0; + parseDiagnostics = void 0; + jsDocDiagnostics = void 0; + parsingContext = 0; + identifiers = void 0; + notParenthesizedArrow = void 0; + topLevel = true; + } + function parseSourceFileWorker(languageVersion2, setParentNodes, scriptKind2, setExternalModuleIndicator2, jsDocParsingMode) { + const isDeclarationFile = isDeclarationFileName(fileName); + if (isDeclarationFile) { + contextFlags |= 33554432 /* Ambient */; + } + sourceFlags = contextFlags; + nextToken(); + const statements = parseList(0 /* SourceElements */, parseStatement); + Debug.assert(token() === 1 /* EndOfFileToken */); + const endHasJSDoc = hasPrecedingJSDocComment(); + const endOfFileToken = withJSDoc(parseTokenNode(), endHasJSDoc); + const sourceFile = createSourceFile2(fileName, languageVersion2, scriptKind2, isDeclarationFile, statements, endOfFileToken, sourceFlags, setExternalModuleIndicator2); + processCommentPragmas(sourceFile, sourceText); + processPragmasIntoFields(sourceFile, reportPragmaDiagnostic); + sourceFile.commentDirectives = scanner2.getCommentDirectives(); + sourceFile.nodeCount = nodeCount; + sourceFile.identifierCount = identifierCount; + sourceFile.identifiers = identifiers; + sourceFile.parseDiagnostics = attachFileToDiagnostics(parseDiagnostics, sourceFile); + sourceFile.jsDocParsingMode = jsDocParsingMode; + if (jsDocDiagnostics) { + sourceFile.jsDocDiagnostics = attachFileToDiagnostics(jsDocDiagnostics, sourceFile); + } + if (setParentNodes) { + fixupParentReferences(sourceFile); + } + return sourceFile; + function reportPragmaDiagnostic(pos, end, diagnostic) { + parseDiagnostics.push(createDetachedDiagnostic(fileName, sourceText, pos, end, diagnostic)); + } + } + let hasDeprecatedTag = false; + function withJSDoc(node, hasJSDoc) { + if (!hasJSDoc) { + return node; + } + Debug.assert(!node.jsDoc); + const jsDoc = mapDefined(getJSDocCommentRanges(node, sourceText), (comment) => JSDocParser.parseJSDocComment(node, comment.pos, comment.end - comment.pos)); + if (jsDoc.length) node.jsDoc = jsDoc; + if (hasDeprecatedTag) { + hasDeprecatedTag = false; + node.flags |= 536870912 /* Deprecated */; + } + return node; + } + function reparseTopLevelAwait(sourceFile) { + const savedSyntaxCursor = syntaxCursor; + const baseSyntaxCursor = IncrementalParser.createSyntaxCursor(sourceFile); + syntaxCursor = { currentNode: currentNode2 }; + const statements = []; + const savedParseDiagnostics = parseDiagnostics; + parseDiagnostics = []; + let pos = 0; + let start = findNextStatementWithAwait(sourceFile.statements, 0); + while (start !== -1) { + const prevStatement = sourceFile.statements[pos]; + const nextStatement = sourceFile.statements[start]; + addRange(statements, sourceFile.statements, pos, start); + pos = findNextStatementWithoutAwait(sourceFile.statements, start); + const diagnosticStart = findIndex(savedParseDiagnostics, (diagnostic) => diagnostic.start >= prevStatement.pos); + const diagnosticEnd = diagnosticStart >= 0 ? findIndex(savedParseDiagnostics, (diagnostic) => diagnostic.start >= nextStatement.pos, diagnosticStart) : -1; + if (diagnosticStart >= 0) { + addRange(parseDiagnostics, savedParseDiagnostics, diagnosticStart, diagnosticEnd >= 0 ? diagnosticEnd : void 0); + } + speculationHelper(() => { + const savedContextFlags = contextFlags; + contextFlags |= 65536 /* AwaitContext */; + scanner2.resetTokenState(nextStatement.pos); + nextToken(); + while (token() !== 1 /* EndOfFileToken */) { + const startPos = scanner2.getTokenFullStart(); + const statement = parseListElement(0 /* SourceElements */, parseStatement); + statements.push(statement); + if (startPos === scanner2.getTokenFullStart()) { + nextToken(); + } + if (pos >= 0) { + const nonAwaitStatement = sourceFile.statements[pos]; + if (statement.end === nonAwaitStatement.pos) { + break; + } + if (statement.end > nonAwaitStatement.pos) { + pos = findNextStatementWithoutAwait(sourceFile.statements, pos + 1); + } + } + } + contextFlags = savedContextFlags; + }, 2 /* Reparse */); + start = pos >= 0 ? findNextStatementWithAwait(sourceFile.statements, pos) : -1; + } + if (pos >= 0) { + const prevStatement = sourceFile.statements[pos]; + addRange(statements, sourceFile.statements, pos); + const diagnosticStart = findIndex(savedParseDiagnostics, (diagnostic) => diagnostic.start >= prevStatement.pos); + if (diagnosticStart >= 0) { + addRange(parseDiagnostics, savedParseDiagnostics, diagnosticStart); + } + } + syntaxCursor = savedSyntaxCursor; + return factory2.updateSourceFile(sourceFile, setTextRange(factoryCreateNodeArray(statements), sourceFile.statements)); + function containsPossibleTopLevelAwait(node) { + return !(node.flags & 65536 /* AwaitContext */) && !!(node.transformFlags & 67108864 /* ContainsPossibleTopLevelAwait */); + } + function findNextStatementWithAwait(statements2, start2) { + for (let i = start2; i < statements2.length; i++) { + if (containsPossibleTopLevelAwait(statements2[i])) { + return i; + } + } + return -1; + } + function findNextStatementWithoutAwait(statements2, start2) { + for (let i = start2; i < statements2.length; i++) { + if (!containsPossibleTopLevelAwait(statements2[i])) { + return i; + } + } + return -1; + } + function currentNode2(position) { + const node = baseSyntaxCursor.currentNode(position); + if (topLevel && node && containsPossibleTopLevelAwait(node)) { + markAsIntersectingIncrementalChange(node); + } + return node; + } + } + function fixupParentReferences(rootNode) { + setParentRecursive( + rootNode, + /*incremental*/ + true + ); + } + Parser2.fixupParentReferences = fixupParentReferences; + function createSourceFile2(fileName2, languageVersion2, scriptKind2, isDeclarationFile, statements, endOfFileToken, flags, setExternalModuleIndicator2) { + let sourceFile = factory2.createSourceFile(statements, endOfFileToken, flags); + setTextRangePosWidth(sourceFile, 0, sourceText.length); + setFields(sourceFile); + if (!isDeclarationFile && isExternalModule(sourceFile) && sourceFile.transformFlags & 67108864 /* ContainsPossibleTopLevelAwait */) { + const oldSourceFile = sourceFile; + sourceFile = reparseTopLevelAwait(sourceFile); + if (oldSourceFile !== sourceFile) setFields(sourceFile); + } + return sourceFile; + function setFields(sourceFile2) { + sourceFile2.text = sourceText; + sourceFile2.bindDiagnostics = []; + sourceFile2.bindSuggestionDiagnostics = void 0; + sourceFile2.languageVersion = languageVersion2; + sourceFile2.fileName = fileName2; + sourceFile2.languageVariant = getLanguageVariant(scriptKind2); + sourceFile2.isDeclarationFile = isDeclarationFile; + sourceFile2.scriptKind = scriptKind2; + setExternalModuleIndicator2(sourceFile2); + sourceFile2.setExternalModuleIndicator = setExternalModuleIndicator2; + } + } + function setContextFlag(val, flag) { + if (val) { + contextFlags |= flag; + } else { + contextFlags &= ~flag; + } + } + function setDisallowInContext(val) { + setContextFlag(val, 8192 /* DisallowInContext */); + } + function setYieldContext(val) { + setContextFlag(val, 16384 /* YieldContext */); + } + function setDecoratorContext(val) { + setContextFlag(val, 32768 /* DecoratorContext */); + } + function setAwaitContext(val) { + setContextFlag(val, 65536 /* AwaitContext */); + } + function doOutsideOfContext(context, func) { + const contextFlagsToClear = context & contextFlags; + if (contextFlagsToClear) { + setContextFlag( + /*val*/ + false, + contextFlagsToClear + ); + const result = func(); + setContextFlag( + /*val*/ + true, + contextFlagsToClear + ); + return result; + } + return func(); + } + function doInsideOfContext(context, func) { + const contextFlagsToSet = context & ~contextFlags; + if (contextFlagsToSet) { + setContextFlag( + /*val*/ + true, + contextFlagsToSet + ); + const result = func(); + setContextFlag( + /*val*/ + false, + contextFlagsToSet + ); + return result; + } + return func(); + } + function allowInAnd(func) { + return doOutsideOfContext(8192 /* DisallowInContext */, func); + } + function disallowInAnd(func) { + return doInsideOfContext(8192 /* DisallowInContext */, func); + } + function allowConditionalTypesAnd(func) { + return doOutsideOfContext(131072 /* DisallowConditionalTypesContext */, func); + } + function disallowConditionalTypesAnd(func) { + return doInsideOfContext(131072 /* DisallowConditionalTypesContext */, func); + } + function doInYieldContext(func) { + return doInsideOfContext(16384 /* YieldContext */, func); + } + function doInDecoratorContext(func) { + return doInsideOfContext(32768 /* DecoratorContext */, func); + } + function doInAwaitContext(func) { + return doInsideOfContext(65536 /* AwaitContext */, func); + } + function doOutsideOfAwaitContext(func) { + return doOutsideOfContext(65536 /* AwaitContext */, func); + } + function doInYieldAndAwaitContext(func) { + return doInsideOfContext(16384 /* YieldContext */ | 65536 /* AwaitContext */, func); + } + function doOutsideOfYieldAndAwaitContext(func) { + return doOutsideOfContext(16384 /* YieldContext */ | 65536 /* AwaitContext */, func); + } + function inContext(flags) { + return (contextFlags & flags) !== 0; + } + function inYieldContext() { + return inContext(16384 /* YieldContext */); + } + function inDisallowInContext() { + return inContext(8192 /* DisallowInContext */); + } + function inDisallowConditionalTypesContext() { + return inContext(131072 /* DisallowConditionalTypesContext */); + } + function inDecoratorContext() { + return inContext(32768 /* DecoratorContext */); + } + function inAwaitContext() { + return inContext(65536 /* AwaitContext */); + } + function parseErrorAtCurrentToken(message, ...args) { + return parseErrorAt(scanner2.getTokenStart(), scanner2.getTokenEnd(), message, ...args); + } + function parseErrorAtPosition(start, length2, message, ...args) { + const lastError = lastOrUndefined(parseDiagnostics); + let result; + if (!lastError || start !== lastError.start) { + result = createDetachedDiagnostic(fileName, sourceText, start, length2, message, ...args); + parseDiagnostics.push(result); + } + parseErrorBeforeNextFinishedNode = true; + return result; + } + function parseErrorAt(start, end, message, ...args) { + return parseErrorAtPosition(start, end - start, message, ...args); + } + function parseErrorAtRange(range, message, ...args) { + parseErrorAt(range.pos, range.end, message, ...args); + } + function scanError(message, length2, arg0) { + parseErrorAtPosition(scanner2.getTokenEnd(), length2, message, arg0); + } + function getNodePos() { + return scanner2.getTokenFullStart(); + } + function hasPrecedingJSDocComment() { + return scanner2.hasPrecedingJSDocComment(); + } + function token() { + return currentToken; + } + function nextTokenWithoutCheck() { + return currentToken = scanner2.scan(); + } + function nextTokenAnd(func) { + nextToken(); + return func(); + } + function nextToken() { + if (isKeyword(currentToken) && (scanner2.hasUnicodeEscape() || scanner2.hasExtendedUnicodeEscape())) { + parseErrorAt(scanner2.getTokenStart(), scanner2.getTokenEnd(), Diagnostics.Keywords_cannot_contain_escape_characters); + } + return nextTokenWithoutCheck(); + } + function nextTokenJSDoc() { + return currentToken = scanner2.scanJsDocToken(); + } + function nextJSDocCommentTextToken(inBackticks) { + return currentToken = scanner2.scanJSDocCommentTextToken(inBackticks); + } + function reScanGreaterToken() { + return currentToken = scanner2.reScanGreaterToken(); + } + function reScanSlashToken() { + return currentToken = scanner2.reScanSlashToken(); + } + function reScanTemplateToken(isTaggedTemplate) { + return currentToken = scanner2.reScanTemplateToken(isTaggedTemplate); + } + function reScanLessThanToken() { + return currentToken = scanner2.reScanLessThanToken(); + } + function reScanHashToken() { + return currentToken = scanner2.reScanHashToken(); + } + function scanJsxIdentifier() { + return currentToken = scanner2.scanJsxIdentifier(); + } + function scanJsxText() { + return currentToken = scanner2.scanJsxToken(); + } + function scanJsxAttributeValue() { + return currentToken = scanner2.scanJsxAttributeValue(); + } + function speculationHelper(callback, speculationKind) { + const saveToken = currentToken; + const saveParseDiagnosticsLength = parseDiagnostics.length; + const saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; + const saveContextFlags = contextFlags; + const result = speculationKind !== 0 /* TryParse */ ? scanner2.lookAhead(callback) : scanner2.tryScan(callback); + Debug.assert(saveContextFlags === contextFlags); + if (!result || speculationKind !== 0 /* TryParse */) { + currentToken = saveToken; + if (speculationKind !== 2 /* Reparse */) { + parseDiagnostics.length = saveParseDiagnosticsLength; + } + parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; + } + return result; + } + function lookAhead(callback) { + return speculationHelper(callback, 1 /* Lookahead */); + } + function tryParse(callback) { + return speculationHelper(callback, 0 /* TryParse */); + } + function isBindingIdentifier() { + if (token() === 80 /* Identifier */) { + return true; + } + return token() > 118 /* LastReservedWord */; + } + function isIdentifier2() { + if (token() === 80 /* Identifier */) { + return true; + } + if (token() === 127 /* YieldKeyword */ && inYieldContext()) { + return false; + } + if (token() === 135 /* AwaitKeyword */ && inAwaitContext()) { + return false; + } + return token() > 118 /* LastReservedWord */; + } + function parseExpected(kind, diagnosticMessage, shouldAdvance = true) { + if (token() === kind) { + if (shouldAdvance) { + nextToken(); + } + return true; + } + if (diagnosticMessage) { + parseErrorAtCurrentToken(diagnosticMessage); + } else { + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(kind)); + } + return false; + } + const viableKeywordSuggestions = Object.keys(textToKeywordObj).filter((keyword) => keyword.length > 2); + function parseErrorForMissingSemicolonAfter(node) { + if (isTaggedTemplateExpression(node)) { + parseErrorAt(skipTrivia(sourceText, node.template.pos), node.template.end, Diagnostics.Module_declaration_names_may_only_use_or_quoted_strings); + return; + } + const expressionText = isIdentifier(node) ? idText(node) : void 0; + if (!expressionText || !isIdentifierText(expressionText, languageVersion)) { + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(27 /* SemicolonToken */)); + return; + } + const pos = skipTrivia(sourceText, node.pos); + switch (expressionText) { + case "const": + case "let": + case "var": + parseErrorAt(pos, node.end, Diagnostics.Variable_declaration_not_allowed_at_this_location); + return; + case "declare": + return; + case "interface": + parseErrorForInvalidName(Diagnostics.Interface_name_cannot_be_0, Diagnostics.Interface_must_be_given_a_name, 19 /* OpenBraceToken */); + return; + case "is": + parseErrorAt(pos, scanner2.getTokenStart(), Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); + return; + case "module": + case "namespace": + parseErrorForInvalidName(Diagnostics.Namespace_name_cannot_be_0, Diagnostics.Namespace_must_be_given_a_name, 19 /* OpenBraceToken */); + return; + case "type": + parseErrorForInvalidName(Diagnostics.Type_alias_name_cannot_be_0, Diagnostics.Type_alias_must_be_given_a_name, 64 /* EqualsToken */); + return; + } + const suggestion = getSpellingSuggestion(expressionText, viableKeywordSuggestions, identity) ?? getSpaceSuggestion(expressionText); + if (suggestion) { + parseErrorAt(pos, node.end, Diagnostics.Unknown_keyword_or_identifier_Did_you_mean_0, suggestion); + return; + } + if (token() === 0 /* Unknown */) { + return; + } + parseErrorAt(pos, node.end, Diagnostics.Unexpected_keyword_or_identifier); + } + function parseErrorForInvalidName(nameDiagnostic, blankDiagnostic, tokenIfBlankName) { + if (token() === tokenIfBlankName) { + parseErrorAtCurrentToken(blankDiagnostic); + } else { + parseErrorAtCurrentToken(nameDiagnostic, scanner2.getTokenValue()); + } + } + function getSpaceSuggestion(expressionText) { + for (const keyword of viableKeywordSuggestions) { + if (expressionText.length > keyword.length + 2 && startsWith(expressionText, keyword)) { + return `${keyword} ${expressionText.slice(keyword.length)}`; + } + } + return void 0; + } + function parseSemicolonAfterPropertyName(name, type, initializer) { + if (token() === 60 /* AtToken */ && !scanner2.hasPrecedingLineBreak()) { + parseErrorAtCurrentToken(Diagnostics.Decorators_must_precede_the_name_and_all_keywords_of_property_declarations); + return; + } + if (token() === 21 /* OpenParenToken */) { + parseErrorAtCurrentToken(Diagnostics.Cannot_start_a_function_call_in_a_type_annotation); + nextToken(); + return; + } + if (type && !canParseSemicolon()) { + if (initializer) { + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(27 /* SemicolonToken */)); + } else { + parseErrorAtCurrentToken(Diagnostics.Expected_for_property_initializer); + } + return; + } + if (tryParseSemicolon()) { + return; + } + if (initializer) { + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(27 /* SemicolonToken */)); + return; + } + parseErrorForMissingSemicolonAfter(name); + } + function parseExpectedJSDoc(kind) { + if (token() === kind) { + nextTokenJSDoc(); + return true; + } + Debug.assert(isKeywordOrPunctuation(kind)); + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(kind)); + return false; + } + function parseExpectedMatchingBrackets(openKind, closeKind, openParsed, openPosition) { + if (token() === closeKind) { + nextToken(); + return; + } + const lastError = parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(closeKind)); + if (!openParsed) { + return; + } + if (lastError) { + addRelatedInfo( + lastError, + createDetachedDiagnostic(fileName, sourceText, openPosition, 1, Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, tokenToString(openKind), tokenToString(closeKind)) + ); + } + } + function parseOptional(t) { + if (token() === t) { + nextToken(); + return true; + } + return false; + } + function parseOptionalToken(t) { + if (token() === t) { + return parseTokenNode(); + } + return void 0; + } + function parseOptionalTokenJSDoc(t) { + if (token() === t) { + return parseTokenNodeJSDoc(); + } + return void 0; + } + function parseExpectedToken(t, diagnosticMessage, arg0) { + return parseOptionalToken(t) || createMissingNode( + t, + /*reportAtCurrentPosition*/ + false, + diagnosticMessage || Diagnostics._0_expected, + arg0 || tokenToString(t) + ); + } + function parseExpectedTokenJSDoc(t) { + const optional = parseOptionalTokenJSDoc(t); + if (optional) return optional; + Debug.assert(isKeywordOrPunctuation(t)); + return createMissingNode( + t, + /*reportAtCurrentPosition*/ + false, + Diagnostics._0_expected, + tokenToString(t) + ); + } + function parseTokenNode() { + const pos = getNodePos(); + const kind = token(); + nextToken(); + return finishNode(factoryCreateToken(kind), pos); + } + function parseTokenNodeJSDoc() { + const pos = getNodePos(); + const kind = token(); + nextTokenJSDoc(); + return finishNode(factoryCreateToken(kind), pos); + } + function canParseSemicolon() { + if (token() === 27 /* SemicolonToken */) { + return true; + } + return token() === 20 /* CloseBraceToken */ || token() === 1 /* EndOfFileToken */ || scanner2.hasPrecedingLineBreak(); + } + function tryParseSemicolon() { + if (!canParseSemicolon()) { + return false; + } + if (token() === 27 /* SemicolonToken */) { + nextToken(); + } + return true; + } + function parseSemicolon() { + return tryParseSemicolon() || parseExpected(27 /* SemicolonToken */); + } + function createNodeArray(elements, pos, end, hasTrailingComma) { + const array = factoryCreateNodeArray(elements, hasTrailingComma); + setTextRangePosEnd(array, pos, end ?? scanner2.getTokenFullStart()); + return array; + } + function finishNode(node, pos, end) { + setTextRangePosEnd(node, pos, end ?? scanner2.getTokenFullStart()); + if (contextFlags) { + node.flags |= contextFlags; + } + if (parseErrorBeforeNextFinishedNode) { + parseErrorBeforeNextFinishedNode = false; + node.flags |= 262144 /* ThisNodeHasError */; + } + return node; + } + function createMissingNode(kind, reportAtCurrentPosition, diagnosticMessage, ...args) { + if (reportAtCurrentPosition) { + parseErrorAtPosition(scanner2.getTokenFullStart(), 0, diagnosticMessage, ...args); + } else if (diagnosticMessage) { + parseErrorAtCurrentToken(diagnosticMessage, ...args); + } + const pos = getNodePos(); + const result = kind === 80 /* Identifier */ ? factoryCreateIdentifier( + "", + /*originalKeywordKind*/ + void 0 + ) : isTemplateLiteralKind(kind) ? factory2.createTemplateLiteralLikeNode( + kind, + "", + "", + /*templateFlags*/ + void 0 + ) : kind === 9 /* NumericLiteral */ ? factoryCreateNumericLiteral( + "", + /*numericLiteralFlags*/ + void 0 + ) : kind === 11 /* StringLiteral */ ? factoryCreateStringLiteral( + "", + /*isSingleQuote*/ + void 0 + ) : kind === 283 /* MissingDeclaration */ ? factory2.createMissingDeclaration() : factoryCreateToken(kind); + return finishNode(result, pos); + } + function internIdentifier(text) { + let identifier = identifiers.get(text); + if (identifier === void 0) { + identifiers.set(text, identifier = text); + } + return identifier; + } + function createIdentifier(isIdentifier3, diagnosticMessage, privateIdentifierDiagnosticMessage) { + if (isIdentifier3) { + identifierCount++; + const pos = scanner2.hasPrecedingJSDocLeadingAsterisks() ? scanner2.getTokenStart() : getNodePos(); + const originalKeywordKind = token(); + const text = internIdentifier(scanner2.getTokenValue()); + const hasExtendedUnicodeEscape = scanner2.hasExtendedUnicodeEscape(); + nextTokenWithoutCheck(); + return finishNode(factoryCreateIdentifier(text, originalKeywordKind, hasExtendedUnicodeEscape), pos); + } + if (token() === 81 /* PrivateIdentifier */) { + parseErrorAtCurrentToken(privateIdentifierDiagnosticMessage || Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + return createIdentifier( + /*isIdentifier*/ + true + ); + } + if (token() === 0 /* Unknown */ && scanner2.tryScan(() => scanner2.reScanInvalidIdentifier() === 80 /* Identifier */)) { + return createIdentifier( + /*isIdentifier*/ + true + ); + } + identifierCount++; + const reportAtCurrentPosition = token() === 1 /* EndOfFileToken */; + const isReservedWord = scanner2.isReservedWord(); + const msgArg = scanner2.getTokenText(); + const defaultMessage = isReservedWord ? Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here : Diagnostics.Identifier_expected; + return createMissingNode(80 /* Identifier */, reportAtCurrentPosition, diagnosticMessage || defaultMessage, msgArg); + } + function parseBindingIdentifier(privateIdentifierDiagnosticMessage) { + return createIdentifier( + isBindingIdentifier(), + /*diagnosticMessage*/ + void 0, + privateIdentifierDiagnosticMessage + ); + } + function parseIdentifier(diagnosticMessage, privateIdentifierDiagnosticMessage) { + return createIdentifier(isIdentifier2(), diagnosticMessage, privateIdentifierDiagnosticMessage); + } + function parseIdentifierName(diagnosticMessage) { + return createIdentifier(tokenIsIdentifierOrKeyword(token()), diagnosticMessage); + } + function parseIdentifierNameErrorOnUnicodeEscapeSequence() { + if (scanner2.hasUnicodeEscape() || scanner2.hasExtendedUnicodeEscape()) { + parseErrorAtCurrentToken(Diagnostics.Unicode_escape_sequence_cannot_appear_here); + } + return createIdentifier(tokenIsIdentifierOrKeyword(token())); + } + function isLiteralPropertyName() { + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */; + } + function isImportAttributeName2() { + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */; + } + function parsePropertyNameWorker(allowComputedPropertyNames) { + if (token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */) { + const node = parseLiteralNode(); + node.text = internIdentifier(node.text); + return node; + } + if (allowComputedPropertyNames && token() === 23 /* OpenBracketToken */) { + return parseComputedPropertyName(); + } + if (token() === 81 /* PrivateIdentifier */) { + return parsePrivateIdentifier(); + } + return parseIdentifierName(); + } + function parsePropertyName() { + return parsePropertyNameWorker( + /*allowComputedPropertyNames*/ + true + ); + } + function parseComputedPropertyName() { + const pos = getNodePos(); + parseExpected(23 /* OpenBracketToken */); + const expression = allowInAnd(parseExpression); + parseExpected(24 /* CloseBracketToken */); + return finishNode(factory2.createComputedPropertyName(expression), pos); + } + function parsePrivateIdentifier() { + const pos = getNodePos(); + const node = factoryCreatePrivateIdentifier(internIdentifier(scanner2.getTokenValue())); + nextToken(); + return finishNode(node, pos); + } + function parseContextualModifier(t) { + return token() === t && tryParse(nextTokenCanFollowModifier); + } + function nextTokenIsOnSameLineAndCanFollowModifier() { + nextToken(); + if (scanner2.hasPrecedingLineBreak()) { + return false; + } + return canFollowModifier(); + } + function nextTokenCanFollowModifier() { + switch (token()) { + case 87 /* ConstKeyword */: + return nextToken() === 94 /* EnumKeyword */; + case 95 /* ExportKeyword */: + nextToken(); + if (token() === 90 /* DefaultKeyword */) { + return lookAhead(nextTokenCanFollowDefaultKeyword); + } + if (token() === 156 /* TypeKeyword */) { + return lookAhead(nextTokenCanFollowExportModifier); + } + return canFollowExportModifier(); + case 90 /* DefaultKeyword */: + return nextTokenCanFollowDefaultKeyword(); + case 126 /* StaticKeyword */: + nextToken(); + return canFollowModifier(); + case 139 /* GetKeyword */: + case 153 /* SetKeyword */: + nextToken(); + return canFollowGetOrSetKeyword(); + default: + return nextTokenIsOnSameLineAndCanFollowModifier(); + } + } + function canFollowExportModifier() { + return token() === 60 /* AtToken */ || token() !== 42 /* AsteriskToken */ && token() !== 130 /* AsKeyword */ && token() !== 19 /* OpenBraceToken */ && canFollowModifier(); + } + function nextTokenCanFollowExportModifier() { + nextToken(); + return canFollowExportModifier(); + } + function parseAnyContextualModifier() { + return isModifierKind(token()) && tryParse(nextTokenCanFollowModifier); + } + function canFollowModifier() { + return token() === 23 /* OpenBracketToken */ || token() === 19 /* OpenBraceToken */ || token() === 42 /* AsteriskToken */ || token() === 26 /* DotDotDotToken */ || isLiteralPropertyName(); + } + function canFollowGetOrSetKeyword() { + return token() === 23 /* OpenBracketToken */ || isLiteralPropertyName(); + } + function nextTokenCanFollowDefaultKeyword() { + nextToken(); + return token() === 86 /* ClassKeyword */ || token() === 100 /* FunctionKeyword */ || token() === 120 /* InterfaceKeyword */ || token() === 60 /* AtToken */ || token() === 128 /* AbstractKeyword */ && lookAhead(nextTokenIsClassKeywordOnSameLine) || token() === 134 /* AsyncKeyword */ && lookAhead(nextTokenIsFunctionKeywordOnSameLine); + } + function isListElement2(parsingContext2, inErrorRecovery) { + const node = currentNode(parsingContext2); + if (node) { + return true; + } + switch (parsingContext2) { + case 0 /* SourceElements */: + case 1 /* BlockStatements */: + case 3 /* SwitchClauseStatements */: + return !(token() === 27 /* SemicolonToken */ && inErrorRecovery) && isStartOfStatement(); + case 2 /* SwitchClauses */: + return token() === 84 /* CaseKeyword */ || token() === 90 /* DefaultKeyword */; + case 4 /* TypeMembers */: + return lookAhead(isTypeMemberStart); + case 5 /* ClassMembers */: + return lookAhead(isClassMemberStart) || token() === 27 /* SemicolonToken */ && !inErrorRecovery; + case 6 /* EnumMembers */: + return token() === 23 /* OpenBracketToken */ || isLiteralPropertyName(); + case 12 /* ObjectLiteralMembers */: + switch (token()) { + case 23 /* OpenBracketToken */: + case 42 /* AsteriskToken */: + case 26 /* DotDotDotToken */: + case 25 /* DotToken */: + return true; + default: + return isLiteralPropertyName(); + } + case 18 /* RestProperties */: + return isLiteralPropertyName(); + case 9 /* ObjectBindingElements */: + return token() === 23 /* OpenBracketToken */ || token() === 26 /* DotDotDotToken */ || isLiteralPropertyName(); + case 24 /* ImportAttributes */: + return isImportAttributeName2(); + case 7 /* HeritageClauseElement */: + if (token() === 19 /* OpenBraceToken */) { + return lookAhead(isValidHeritageClauseObjectLiteral); + } + if (!inErrorRecovery) { + return isStartOfLeftHandSideExpression() && !isHeritageClauseExtendsOrImplementsKeyword(); + } else { + return isIdentifier2() && !isHeritageClauseExtendsOrImplementsKeyword(); + } + case 8 /* VariableDeclarations */: + return isBindingIdentifierOrPrivateIdentifierOrPattern(); + case 10 /* ArrayBindingElements */: + return token() === 28 /* CommaToken */ || token() === 26 /* DotDotDotToken */ || isBindingIdentifierOrPrivateIdentifierOrPattern(); + case 19 /* TypeParameters */: + return token() === 103 /* InKeyword */ || token() === 87 /* ConstKeyword */ || isIdentifier2(); + case 15 /* ArrayLiteralMembers */: + switch (token()) { + case 28 /* CommaToken */: + case 25 /* DotToken */: + return true; + } + // falls through + case 11 /* ArgumentExpressions */: + return token() === 26 /* DotDotDotToken */ || isStartOfExpression(); + case 16 /* Parameters */: + return isStartOfParameter( + /*isJSDocParameter*/ + false + ); + case 17 /* JSDocParameters */: + return isStartOfParameter( + /*isJSDocParameter*/ + true + ); + case 20 /* TypeArguments */: + case 21 /* TupleElementTypes */: + return token() === 28 /* CommaToken */ || isStartOfType(); + case 22 /* HeritageClauses */: + return isHeritageClause2(); + case 23 /* ImportOrExportSpecifiers */: + if (token() === 161 /* FromKeyword */ && lookAhead(nextTokenIsStringLiteral)) { + return false; + } + if (token() === 11 /* StringLiteral */) { + return true; + } + return tokenIsIdentifierOrKeyword(token()); + case 13 /* JsxAttributes */: + return tokenIsIdentifierOrKeyword(token()) || token() === 19 /* OpenBraceToken */; + case 14 /* JsxChildren */: + return true; + case 25 /* JSDocComment */: + return true; + case 26 /* Count */: + return Debug.fail("ParsingContext.Count used as a context"); + // Not a real context, only a marker. + default: + Debug.assertNever(parsingContext2, "Non-exhaustive case in 'isListElement'."); + } + } + function isValidHeritageClauseObjectLiteral() { + Debug.assert(token() === 19 /* OpenBraceToken */); + if (nextToken() === 20 /* CloseBraceToken */) { + const next = nextToken(); + return next === 28 /* CommaToken */ || next === 19 /* OpenBraceToken */ || next === 96 /* ExtendsKeyword */ || next === 119 /* ImplementsKeyword */; + } + return true; + } + function nextTokenIsIdentifier() { + nextToken(); + return isIdentifier2(); + } + function nextTokenIsIdentifierOrKeyword() { + nextToken(); + return tokenIsIdentifierOrKeyword(token()); + } + function nextTokenIsIdentifierOrKeywordOrGreaterThan() { + nextToken(); + return tokenIsIdentifierOrKeywordOrGreaterThan(token()); + } + function isHeritageClauseExtendsOrImplementsKeyword() { + if (token() === 119 /* ImplementsKeyword */ || token() === 96 /* ExtendsKeyword */) { + return lookAhead(nextTokenIsStartOfExpression); + } + return false; + } + function nextTokenIsStartOfExpression() { + nextToken(); + return isStartOfExpression(); + } + function nextTokenIsStartOfType() { + nextToken(); + return isStartOfType(); + } + function isListTerminator(kind) { + if (token() === 1 /* EndOfFileToken */) { + return true; + } + switch (kind) { + case 1 /* BlockStatements */: + case 2 /* SwitchClauses */: + case 4 /* TypeMembers */: + case 5 /* ClassMembers */: + case 6 /* EnumMembers */: + case 12 /* ObjectLiteralMembers */: + case 9 /* ObjectBindingElements */: + case 23 /* ImportOrExportSpecifiers */: + case 24 /* ImportAttributes */: + return token() === 20 /* CloseBraceToken */; + case 3 /* SwitchClauseStatements */: + return token() === 20 /* CloseBraceToken */ || token() === 84 /* CaseKeyword */ || token() === 90 /* DefaultKeyword */; + case 7 /* HeritageClauseElement */: + return token() === 19 /* OpenBraceToken */ || token() === 96 /* ExtendsKeyword */ || token() === 119 /* ImplementsKeyword */; + case 8 /* VariableDeclarations */: + return isVariableDeclaratorListTerminator(); + case 19 /* TypeParameters */: + return token() === 32 /* GreaterThanToken */ || token() === 21 /* OpenParenToken */ || token() === 19 /* OpenBraceToken */ || token() === 96 /* ExtendsKeyword */ || token() === 119 /* ImplementsKeyword */; + case 11 /* ArgumentExpressions */: + return token() === 22 /* CloseParenToken */ || token() === 27 /* SemicolonToken */; + case 15 /* ArrayLiteralMembers */: + case 21 /* TupleElementTypes */: + case 10 /* ArrayBindingElements */: + return token() === 24 /* CloseBracketToken */; + case 17 /* JSDocParameters */: + case 16 /* Parameters */: + case 18 /* RestProperties */: + return token() === 22 /* CloseParenToken */ || token() === 24 /* CloseBracketToken */; + case 20 /* TypeArguments */: + return token() !== 28 /* CommaToken */; + case 22 /* HeritageClauses */: + return token() === 19 /* OpenBraceToken */ || token() === 20 /* CloseBraceToken */; + case 13 /* JsxAttributes */: + return token() === 32 /* GreaterThanToken */ || token() === 44 /* SlashToken */; + case 14 /* JsxChildren */: + return token() === 30 /* LessThanToken */ && lookAhead(nextTokenIsSlash); + default: + return false; + } + } + function isVariableDeclaratorListTerminator() { + if (canParseSemicolon()) { + return true; + } + if (isInOrOfKeyword(token())) { + return true; + } + if (token() === 39 /* EqualsGreaterThanToken */) { + return true; + } + return false; + } + function isInSomeParsingContext() { + Debug.assert(parsingContext, "Missing parsing context"); + for (let kind = 0; kind < 26 /* Count */; kind++) { + if (parsingContext & 1 << kind) { + if (isListElement2( + kind, + /*inErrorRecovery*/ + true + ) || isListTerminator(kind)) { + return true; + } + } + } + return false; + } + function parseList(kind, parseElement) { + const saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + const list = []; + const listPos = getNodePos(); + while (!isListTerminator(kind)) { + if (isListElement2( + kind, + /*inErrorRecovery*/ + false + )) { + list.push(parseListElement(kind, parseElement)); + continue; + } + if (abortParsingListOrMoveToNextToken(kind)) { + break; + } + } + parsingContext = saveParsingContext; + return createNodeArray(list, listPos); + } + function parseListElement(parsingContext2, parseElement) { + const node = currentNode(parsingContext2); + if (node) { + return consumeNode(node); + } + return parseElement(); + } + function currentNode(parsingContext2, pos) { + var _a; + if (!syntaxCursor || !isReusableParsingContext(parsingContext2) || parseErrorBeforeNextFinishedNode) { + return void 0; + } + const node = syntaxCursor.currentNode(pos ?? scanner2.getTokenFullStart()); + if (nodeIsMissing(node) || intersectsIncrementalChange(node) || containsParseError(node)) { + return void 0; + } + const nodeContextFlags = node.flags & 101441536 /* ContextFlags */; + if (nodeContextFlags !== contextFlags) { + return void 0; + } + if (!canReuseNode(node, parsingContext2)) { + return void 0; + } + if (canHaveJSDoc(node) && ((_a = node.jsDoc) == null ? void 0 : _a.jsDocCache)) { + node.jsDoc.jsDocCache = void 0; + } + return node; + } + function consumeNode(node) { + scanner2.resetTokenState(node.end); + nextToken(); + return node; + } + function isReusableParsingContext(parsingContext2) { + switch (parsingContext2) { + case 5 /* ClassMembers */: + case 2 /* SwitchClauses */: + case 0 /* SourceElements */: + case 1 /* BlockStatements */: + case 3 /* SwitchClauseStatements */: + case 6 /* EnumMembers */: + case 4 /* TypeMembers */: + case 8 /* VariableDeclarations */: + case 17 /* JSDocParameters */: + case 16 /* Parameters */: + return true; + } + return false; + } + function canReuseNode(node, parsingContext2) { + switch (parsingContext2) { + case 5 /* ClassMembers */: + return isReusableClassMember(node); + case 2 /* SwitchClauses */: + return isReusableSwitchClause(node); + case 0 /* SourceElements */: + case 1 /* BlockStatements */: + case 3 /* SwitchClauseStatements */: + return isReusableStatement(node); + case 6 /* EnumMembers */: + return isReusableEnumMember(node); + case 4 /* TypeMembers */: + return isReusableTypeMember(node); + case 8 /* VariableDeclarations */: + return isReusableVariableDeclaration(node); + case 17 /* JSDocParameters */: + case 16 /* Parameters */: + return isReusableParameter(node); + } + return false; + } + function isReusableClassMember(node) { + if (node) { + switch (node.kind) { + case 177 /* Constructor */: + case 182 /* IndexSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 173 /* PropertyDeclaration */: + case 241 /* SemicolonClassElement */: + return true; + case 175 /* MethodDeclaration */: + const methodDeclaration = node; + const nameIsConstructor = methodDeclaration.name.kind === 80 /* Identifier */ && methodDeclaration.name.escapedText === "constructor"; + return !nameIsConstructor; + } + } + return false; + } + function isReusableSwitchClause(node) { + if (node) { + switch (node.kind) { + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + return true; + } + } + return false; + } + function isReusableStatement(node) { + if (node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 244 /* VariableStatement */: + case 242 /* Block */: + case 246 /* IfStatement */: + case 245 /* ExpressionStatement */: + case 258 /* ThrowStatement */: + case 254 /* ReturnStatement */: + case 256 /* SwitchStatement */: + case 253 /* BreakStatement */: + case 252 /* ContinueStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 249 /* ForStatement */: + case 248 /* WhileStatement */: + case 255 /* WithStatement */: + case 243 /* EmptyStatement */: + case 259 /* TryStatement */: + case 257 /* LabeledStatement */: + case 247 /* DoStatement */: + case 260 /* DebuggerStatement */: + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 279 /* ExportDeclaration */: + case 278 /* ExportAssignment */: + case 268 /* ModuleDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + return true; + } + } + return false; + } + function isReusableEnumMember(node) { + return node.kind === 307 /* EnumMember */; + } + function isReusableTypeMember(node) { + if (node) { + switch (node.kind) { + case 181 /* ConstructSignature */: + case 174 /* MethodSignature */: + case 182 /* IndexSignature */: + case 172 /* PropertySignature */: + case 180 /* CallSignature */: + return true; + } + } + return false; + } + function isReusableVariableDeclaration(node) { + if (node.kind !== 261 /* VariableDeclaration */) { + return false; + } + const variableDeclarator = node; + return variableDeclarator.initializer === void 0; + } + function isReusableParameter(node) { + if (node.kind !== 170 /* Parameter */) { + return false; + } + const parameter = node; + return parameter.initializer === void 0; + } + function abortParsingListOrMoveToNextToken(kind) { + parsingContextErrors(kind); + if (isInSomeParsingContext()) { + return true; + } + nextToken(); + return false; + } + function parsingContextErrors(context) { + switch (context) { + case 0 /* SourceElements */: + return token() === 90 /* DefaultKeyword */ ? parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(95 /* ExportKeyword */)) : parseErrorAtCurrentToken(Diagnostics.Declaration_or_statement_expected); + case 1 /* BlockStatements */: + return parseErrorAtCurrentToken(Diagnostics.Declaration_or_statement_expected); + case 2 /* SwitchClauses */: + return parseErrorAtCurrentToken(Diagnostics.case_or_default_expected); + case 3 /* SwitchClauseStatements */: + return parseErrorAtCurrentToken(Diagnostics.Statement_expected); + case 18 /* RestProperties */: + // fallthrough + case 4 /* TypeMembers */: + return parseErrorAtCurrentToken(Diagnostics.Property_or_signature_expected); + case 5 /* ClassMembers */: + return parseErrorAtCurrentToken(Diagnostics.Unexpected_token_A_constructor_method_accessor_or_property_was_expected); + case 6 /* EnumMembers */: + return parseErrorAtCurrentToken(Diagnostics.Enum_member_expected); + case 7 /* HeritageClauseElement */: + return parseErrorAtCurrentToken(Diagnostics.Expression_expected); + case 8 /* VariableDeclarations */: + return isKeyword(token()) ? parseErrorAtCurrentToken(Diagnostics._0_is_not_allowed_as_a_variable_declaration_name, tokenToString(token())) : parseErrorAtCurrentToken(Diagnostics.Variable_declaration_expected); + case 9 /* ObjectBindingElements */: + return parseErrorAtCurrentToken(Diagnostics.Property_destructuring_pattern_expected); + case 10 /* ArrayBindingElements */: + return parseErrorAtCurrentToken(Diagnostics.Array_element_destructuring_pattern_expected); + case 11 /* ArgumentExpressions */: + return parseErrorAtCurrentToken(Diagnostics.Argument_expression_expected); + case 12 /* ObjectLiteralMembers */: + return parseErrorAtCurrentToken(Diagnostics.Property_assignment_expected); + case 15 /* ArrayLiteralMembers */: + return parseErrorAtCurrentToken(Diagnostics.Expression_or_comma_expected); + case 17 /* JSDocParameters */: + return parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected); + case 16 /* Parameters */: + return isKeyword(token()) ? parseErrorAtCurrentToken(Diagnostics._0_is_not_allowed_as_a_parameter_name, tokenToString(token())) : parseErrorAtCurrentToken(Diagnostics.Parameter_declaration_expected); + case 19 /* TypeParameters */: + return parseErrorAtCurrentToken(Diagnostics.Type_parameter_declaration_expected); + case 20 /* TypeArguments */: + return parseErrorAtCurrentToken(Diagnostics.Type_argument_expected); + case 21 /* TupleElementTypes */: + return parseErrorAtCurrentToken(Diagnostics.Type_expected); + case 22 /* HeritageClauses */: + return parseErrorAtCurrentToken(Diagnostics.Unexpected_token_expected); + case 23 /* ImportOrExportSpecifiers */: + if (token() === 161 /* FromKeyword */) { + return parseErrorAtCurrentToken(Diagnostics._0_expected, "}"); + } + return parseErrorAtCurrentToken(Diagnostics.Identifier_expected); + case 13 /* JsxAttributes */: + return parseErrorAtCurrentToken(Diagnostics.Identifier_expected); + case 14 /* JsxChildren */: + return parseErrorAtCurrentToken(Diagnostics.Identifier_expected); + case 24 /* ImportAttributes */: + return parseErrorAtCurrentToken(Diagnostics.Identifier_or_string_literal_expected); + case 25 /* JSDocComment */: + return parseErrorAtCurrentToken(Diagnostics.Identifier_expected); + case 26 /* Count */: + return Debug.fail("ParsingContext.Count used as a context"); + // Not a real context, only a marker. + default: + Debug.assertNever(context); + } + } + function parseDelimitedList(kind, parseElement, considerSemicolonAsDelimiter) { + const saveParsingContext = parsingContext; + parsingContext |= 1 << kind; + const list = []; + const listPos = getNodePos(); + let commaStart = -1; + while (true) { + if (isListElement2( + kind, + /*inErrorRecovery*/ + false + )) { + const startPos = scanner2.getTokenFullStart(); + const result = parseListElement(kind, parseElement); + if (!result) { + parsingContext = saveParsingContext; + return void 0; + } + list.push(result); + commaStart = scanner2.getTokenStart(); + if (parseOptional(28 /* CommaToken */)) { + continue; + } + commaStart = -1; + if (isListTerminator(kind)) { + break; + } + parseExpected(28 /* CommaToken */, getExpectedCommaDiagnostic(kind)); + if (considerSemicolonAsDelimiter && token() === 27 /* SemicolonToken */ && !scanner2.hasPrecedingLineBreak()) { + nextToken(); + } + if (startPos === scanner2.getTokenFullStart()) { + nextToken(); + } + continue; + } + if (isListTerminator(kind)) { + break; + } + if (abortParsingListOrMoveToNextToken(kind)) { + break; + } + } + parsingContext = saveParsingContext; + return createNodeArray( + list, + listPos, + /*end*/ + void 0, + commaStart >= 0 + ); + } + function getExpectedCommaDiagnostic(kind) { + return kind === 6 /* EnumMembers */ ? Diagnostics.An_enum_member_name_must_be_followed_by_a_or : void 0; + } + function createMissingList() { + const list = createNodeArray([], getNodePos()); + list.isMissingList = true; + return list; + } + function isMissingList(arr) { + return !!arr.isMissingList; + } + function parseBracketedList(kind, parseElement, open, close) { + if (parseExpected(open)) { + const result = parseDelimitedList(kind, parseElement); + parseExpected(close); + return result; + } + return createMissingList(); + } + function parseEntityName(allowReservedWords, diagnosticMessage) { + const pos = getNodePos(); + let entity = allowReservedWords ? parseIdentifierName(diagnosticMessage) : parseIdentifier(diagnosticMessage); + while (parseOptional(25 /* DotToken */)) { + if (token() === 30 /* LessThanToken */) { + break; + } + entity = finishNode( + factory2.createQualifiedName( + entity, + parseRightSideOfDot( + allowReservedWords, + /*allowPrivateIdentifiers*/ + false, + /*allowUnicodeEscapeSequenceInIdentifierName*/ + true + ) + ), + pos + ); + } + return entity; + } + function createQualifiedName(entity, name) { + return finishNode(factory2.createQualifiedName(entity, name), entity.pos); + } + function parseRightSideOfDot(allowIdentifierNames, allowPrivateIdentifiers, allowUnicodeEscapeSequenceInIdentifierName) { + if (scanner2.hasPrecedingLineBreak() && tokenIsIdentifierOrKeyword(token())) { + const matchesPattern = lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); + if (matchesPattern) { + return createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.Identifier_expected + ); + } + } + if (token() === 81 /* PrivateIdentifier */) { + const node = parsePrivateIdentifier(); + return allowPrivateIdentifiers ? node : createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.Identifier_expected + ); + } + if (allowIdentifierNames) { + return allowUnicodeEscapeSequenceInIdentifierName ? parseIdentifierName() : parseIdentifierNameErrorOnUnicodeEscapeSequence(); + } + return parseIdentifier(); + } + function parseTemplateSpans(isTaggedTemplate) { + const pos = getNodePos(); + const list = []; + let node; + do { + node = parseTemplateSpan(isTaggedTemplate); + list.push(node); + } while (node.literal.kind === 17 /* TemplateMiddle */); + return createNodeArray(list, pos); + } + function parseTemplateExpression(isTaggedTemplate) { + const pos = getNodePos(); + return finishNode( + factory2.createTemplateExpression( + parseTemplateHead(isTaggedTemplate), + parseTemplateSpans(isTaggedTemplate) + ), + pos + ); + } + function parseTemplateType() { + const pos = getNodePos(); + return finishNode( + factory2.createTemplateLiteralType( + parseTemplateHead( + /*isTaggedTemplate*/ + false + ), + parseTemplateTypeSpans() + ), + pos + ); + } + function parseTemplateTypeSpans() { + const pos = getNodePos(); + const list = []; + let node; + do { + node = parseTemplateTypeSpan(); + list.push(node); + } while (node.literal.kind === 17 /* TemplateMiddle */); + return createNodeArray(list, pos); + } + function parseTemplateTypeSpan() { + const pos = getNodePos(); + return finishNode( + factory2.createTemplateLiteralTypeSpan( + parseType(), + parseLiteralOfTemplateSpan( + /*isTaggedTemplate*/ + false + ) + ), + pos + ); + } + function parseLiteralOfTemplateSpan(isTaggedTemplate) { + if (token() === 20 /* CloseBraceToken */) { + reScanTemplateToken(isTaggedTemplate); + return parseTemplateMiddleOrTemplateTail(); + } else { + return parseExpectedToken(18 /* TemplateTail */, Diagnostics._0_expected, tokenToString(20 /* CloseBraceToken */)); + } + } + function parseTemplateSpan(isTaggedTemplate) { + const pos = getNodePos(); + return finishNode( + factory2.createTemplateSpan( + allowInAnd(parseExpression), + parseLiteralOfTemplateSpan(isTaggedTemplate) + ), + pos + ); + } + function parseLiteralNode() { + return parseLiteralLikeNode(token()); + } + function parseTemplateHead(isTaggedTemplate) { + if (!isTaggedTemplate && scanner2.getTokenFlags() & 26656 /* IsInvalid */) { + reScanTemplateToken( + /*isTaggedTemplate*/ + false + ); + } + const fragment = parseLiteralLikeNode(token()); + Debug.assert(fragment.kind === 16 /* TemplateHead */, "Template head has wrong token kind"); + return fragment; + } + function parseTemplateMiddleOrTemplateTail() { + const fragment = parseLiteralLikeNode(token()); + Debug.assert(fragment.kind === 17 /* TemplateMiddle */ || fragment.kind === 18 /* TemplateTail */, "Template fragment has wrong token kind"); + return fragment; + } + function getTemplateLiteralRawText(kind) { + const isLast = kind === 15 /* NoSubstitutionTemplateLiteral */ || kind === 18 /* TemplateTail */; + const tokenText = scanner2.getTokenText(); + return tokenText.substring(1, tokenText.length - (scanner2.isUnterminated() ? 0 : isLast ? 1 : 2)); + } + function parseLiteralLikeNode(kind) { + const pos = getNodePos(); + const node = isTemplateLiteralKind(kind) ? factory2.createTemplateLiteralLikeNode(kind, scanner2.getTokenValue(), getTemplateLiteralRawText(kind), scanner2.getTokenFlags() & 7176 /* TemplateLiteralLikeFlags */) : ( + // Note that theoretically the following condition would hold true literals like 009, + // which is not octal. But because of how the scanner separates the tokens, we would + // never get a token like this. Instead, we would get 00 and 9 as two separate tokens. + // We also do not need to check for negatives because any prefix operator would be part of a + // parent unary expression. + kind === 9 /* NumericLiteral */ ? factoryCreateNumericLiteral(scanner2.getTokenValue(), scanner2.getNumericLiteralFlags()) : kind === 11 /* StringLiteral */ ? factoryCreateStringLiteral( + scanner2.getTokenValue(), + /*isSingleQuote*/ + void 0, + scanner2.hasExtendedUnicodeEscape() + ) : isLiteralKind(kind) ? factoryCreateLiteralLikeNode(kind, scanner2.getTokenValue()) : Debug.fail() + ); + if (scanner2.hasExtendedUnicodeEscape()) { + node.hasExtendedUnicodeEscape = true; + } + if (scanner2.isUnterminated()) { + node.isUnterminated = true; + } + nextToken(); + return finishNode(node, pos); + } + function parseEntityNameOfTypeReference() { + return parseEntityName( + /*allowReservedWords*/ + true, + Diagnostics.Type_expected + ); + } + function parseTypeArgumentsOfTypeReference() { + if (!scanner2.hasPrecedingLineBreak() && reScanLessThanToken() === 30 /* LessThanToken */) { + return parseBracketedList(20 /* TypeArguments */, parseType, 30 /* LessThanToken */, 32 /* GreaterThanToken */); + } + } + function parseTypeReference() { + const pos = getNodePos(); + return finishNode( + factory2.createTypeReferenceNode( + parseEntityNameOfTypeReference(), + parseTypeArgumentsOfTypeReference() + ), + pos + ); + } + function typeHasArrowFunctionBlockingParseError(node) { + switch (node.kind) { + case 184 /* TypeReference */: + return nodeIsMissing(node.typeName); + case 185 /* FunctionType */: + case 186 /* ConstructorType */: { + const { parameters, type } = node; + return isMissingList(parameters) || typeHasArrowFunctionBlockingParseError(type); + } + case 197 /* ParenthesizedType */: + return typeHasArrowFunctionBlockingParseError(node.type); + default: + return false; + } + } + function parseThisTypePredicate(lhs) { + nextToken(); + return finishNode(factory2.createTypePredicateNode( + /*assertsModifier*/ + void 0, + lhs, + parseType() + ), lhs.pos); + } + function parseThisTypeNode() { + const pos = getNodePos(); + nextToken(); + return finishNode(factory2.createThisTypeNode(), pos); + } + function parseJSDocAllType() { + const pos = getNodePos(); + nextToken(); + return finishNode(factory2.createJSDocAllType(), pos); + } + function parseJSDocNonNullableType() { + const pos = getNodePos(); + nextToken(); + return finishNode(factory2.createJSDocNonNullableType( + parseNonArrayType(), + /*postfix*/ + false + ), pos); + } + function parseJSDocUnknownOrNullableType() { + const pos = getNodePos(); + nextToken(); + if (token() === 28 /* CommaToken */ || token() === 20 /* CloseBraceToken */ || token() === 22 /* CloseParenToken */ || token() === 32 /* GreaterThanToken */ || token() === 64 /* EqualsToken */ || token() === 52 /* BarToken */) { + return finishNode(factory2.createJSDocUnknownType(), pos); + } else { + return finishNode(factory2.createJSDocNullableType( + parseType(), + /*postfix*/ + false + ), pos); + } + } + function parseJSDocFunctionType() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + if (tryParse(nextTokenIsOpenParen)) { + const parameters = parseParameters(4 /* Type */ | 32 /* JSDoc */); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + return withJSDoc(finishNode(factory2.createJSDocFunctionType(parameters, type), pos), hasJSDoc); + } + return finishNode(factory2.createTypeReferenceNode( + parseIdentifierName(), + /*typeArguments*/ + void 0 + ), pos); + } + function parseJSDocParameter() { + const pos = getNodePos(); + let name; + if (token() === 110 /* ThisKeyword */ || token() === 105 /* NewKeyword */) { + name = parseIdentifierName(); + parseExpected(59 /* ColonToken */); + } + return finishNode( + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + // TODO(rbuckton): JSDoc parameters don't have names (except `this`/`new`), should we manufacture an empty identifier? + name, + /*questionToken*/ + void 0, + parseJSDocType(), + /*initializer*/ + void 0 + ), + pos + ); + } + function parseJSDocType() { + scanner2.setSkipJsDocLeadingAsterisks(true); + const pos = getNodePos(); + if (parseOptional(144 /* ModuleKeyword */)) { + const moduleTag = factory2.createJSDocNamepathType( + /*type*/ + void 0 + ); + terminate: + while (true) { + switch (token()) { + case 20 /* CloseBraceToken */: + case 1 /* EndOfFileToken */: + case 28 /* CommaToken */: + case 5 /* WhitespaceTrivia */: + break terminate; + default: + nextTokenJSDoc(); + } + } + scanner2.setSkipJsDocLeadingAsterisks(false); + return finishNode(moduleTag, pos); + } + const hasDotDotDot = parseOptional(26 /* DotDotDotToken */); + let type = parseTypeOrTypePredicate(); + scanner2.setSkipJsDocLeadingAsterisks(false); + if (hasDotDotDot) { + type = finishNode(factory2.createJSDocVariadicType(type), pos); + } + if (token() === 64 /* EqualsToken */) { + nextToken(); + return finishNode(factory2.createJSDocOptionalType(type), pos); + } + return type; + } + function parseTypeQuery() { + const pos = getNodePos(); + parseExpected(114 /* TypeOfKeyword */); + const entityName = parseEntityName( + /*allowReservedWords*/ + true + ); + const typeArguments = !scanner2.hasPrecedingLineBreak() ? tryParseTypeArguments() : void 0; + return finishNode(factory2.createTypeQueryNode(entityName, typeArguments), pos); + } + function parseTypeParameter() { + const pos = getNodePos(); + const modifiers = parseModifiers( + /*allowDecorators*/ + false, + /*permitConstAsModifier*/ + true + ); + const name = parseIdentifier(); + let constraint; + let expression; + if (parseOptional(96 /* ExtendsKeyword */)) { + if (isStartOfType() || !isStartOfExpression()) { + constraint = parseType(); + } else { + expression = parseUnaryExpressionOrHigher(); + } + } + const defaultType = parseOptional(64 /* EqualsToken */) ? parseType() : void 0; + const node = factory2.createTypeParameterDeclaration(modifiers, name, constraint, defaultType); + node.expression = expression; + return finishNode(node, pos); + } + function parseTypeParameters() { + if (token() === 30 /* LessThanToken */) { + return parseBracketedList(19 /* TypeParameters */, parseTypeParameter, 30 /* LessThanToken */, 32 /* GreaterThanToken */); + } + } + function isStartOfParameter(isJSDocParameter) { + return token() === 26 /* DotDotDotToken */ || isBindingIdentifierOrPrivateIdentifierOrPattern() || isModifierKind(token()) || token() === 60 /* AtToken */ || isStartOfType( + /*inStartOfParameter*/ + !isJSDocParameter + ); + } + function parseNameOfParameter(modifiers) { + const name = parseIdentifierOrPattern(Diagnostics.Private_identifiers_cannot_be_used_as_parameters); + if (getFullWidth(name) === 0 && !some(modifiers) && isModifierKind(token())) { + nextToken(); + } + return name; + } + function isParameterNameStart() { + return isBindingIdentifier() || token() === 23 /* OpenBracketToken */ || token() === 19 /* OpenBraceToken */; + } + function parseParameter(inOuterAwaitContext) { + return parseParameterWorker(inOuterAwaitContext); + } + function parseParameterForSpeculation(inOuterAwaitContext) { + return parseParameterWorker( + inOuterAwaitContext, + /*allowAmbiguity*/ + false + ); + } + function parseParameterWorker(inOuterAwaitContext, allowAmbiguity = true) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = inOuterAwaitContext ? doInAwaitContext(() => parseModifiers( + /*allowDecorators*/ + true + )) : doOutsideOfAwaitContext(() => parseModifiers( + /*allowDecorators*/ + true + )); + if (token() === 110 /* ThisKeyword */) { + const node2 = factory2.createParameterDeclaration( + modifiers, + /*dotDotDotToken*/ + void 0, + createIdentifier( + /*isIdentifier*/ + true + ), + /*questionToken*/ + void 0, + parseTypeAnnotation(), + /*initializer*/ + void 0 + ); + const modifier = firstOrUndefined(modifiers); + if (modifier) { + parseErrorAtRange(modifier, Diagnostics.Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters); + } + return withJSDoc(finishNode(node2, pos), hasJSDoc); + } + const savedTopLevel = topLevel; + topLevel = false; + const dotDotDotToken = parseOptionalToken(26 /* DotDotDotToken */); + if (!allowAmbiguity && !isParameterNameStart()) { + return void 0; + } + const node = withJSDoc( + finishNode( + factory2.createParameterDeclaration( + modifiers, + dotDotDotToken, + parseNameOfParameter(modifiers), + parseOptionalToken(58 /* QuestionToken */), + parseTypeAnnotation(), + parseInitializer() + ), + pos + ), + hasJSDoc + ); + topLevel = savedTopLevel; + return node; + } + function parseReturnType(returnToken, isType) { + if (shouldParseReturnType(returnToken, isType)) { + return allowConditionalTypesAnd(parseTypeOrTypePredicate); + } + } + function shouldParseReturnType(returnToken, isType) { + if (returnToken === 39 /* EqualsGreaterThanToken */) { + parseExpected(returnToken); + return true; + } else if (parseOptional(59 /* ColonToken */)) { + return true; + } else if (isType && token() === 39 /* EqualsGreaterThanToken */) { + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(59 /* ColonToken */)); + nextToken(); + return true; + } + return false; + } + function parseParametersWorker(flags, allowAmbiguity) { + const savedYieldContext = inYieldContext(); + const savedAwaitContext = inAwaitContext(); + setYieldContext(!!(flags & 1 /* Yield */)); + setAwaitContext(!!(flags & 2 /* Await */)); + const parameters = flags & 32 /* JSDoc */ ? parseDelimitedList(17 /* JSDocParameters */, parseJSDocParameter) : parseDelimitedList(16 /* Parameters */, () => allowAmbiguity ? parseParameter(savedAwaitContext) : parseParameterForSpeculation(savedAwaitContext)); + setYieldContext(savedYieldContext); + setAwaitContext(savedAwaitContext); + return parameters; + } + function parseParameters(flags) { + if (!parseExpected(21 /* OpenParenToken */)) { + return createMissingList(); + } + const parameters = parseParametersWorker( + flags, + /*allowAmbiguity*/ + true + ); + parseExpected(22 /* CloseParenToken */); + return parameters; + } + function parseTypeMemberSemicolon() { + if (parseOptional(28 /* CommaToken */)) { + return; + } + parseSemicolon(); + } + function parseSignatureMember(kind) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + if (kind === 181 /* ConstructSignature */) { + parseExpected(105 /* NewKeyword */); + } + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(4 /* Type */); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + true + ); + parseTypeMemberSemicolon(); + const node = kind === 180 /* CallSignature */ ? factory2.createCallSignature(typeParameters, parameters, type) : factory2.createConstructSignature(typeParameters, parameters, type); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function isIndexSignature() { + return token() === 23 /* OpenBracketToken */ && lookAhead(isUnambiguouslyIndexSignature); + } + function isUnambiguouslyIndexSignature() { + nextToken(); + if (token() === 26 /* DotDotDotToken */ || token() === 24 /* CloseBracketToken */) { + return true; + } + if (isModifierKind(token())) { + nextToken(); + if (isIdentifier2()) { + return true; + } + } else if (!isIdentifier2()) { + return false; + } else { + nextToken(); + } + if (token() === 59 /* ColonToken */ || token() === 28 /* CommaToken */) { + return true; + } + if (token() !== 58 /* QuestionToken */) { + return false; + } + nextToken(); + return token() === 59 /* ColonToken */ || token() === 28 /* CommaToken */ || token() === 24 /* CloseBracketToken */; + } + function parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers) { + const parameters = parseBracketedList(16 /* Parameters */, () => parseParameter( + /*inOuterAwaitContext*/ + false + ), 23 /* OpenBracketToken */, 24 /* CloseBracketToken */); + const type = parseTypeAnnotation(); + parseTypeMemberSemicolon(); + const node = factory2.createIndexSignature(modifiers, parameters, type); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parsePropertyOrMethodSignature(pos, hasJSDoc, modifiers) { + const name = parsePropertyName(); + const questionToken = parseOptionalToken(58 /* QuestionToken */); + let node; + if (token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */) { + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(4 /* Type */); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + true + ); + node = factory2.createMethodSignature(modifiers, name, questionToken, typeParameters, parameters, type); + } else { + const type = parseTypeAnnotation(); + node = factory2.createPropertySignature(modifiers, name, questionToken, type); + if (token() === 64 /* EqualsToken */) node.initializer = parseInitializer(); + } + parseTypeMemberSemicolon(); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function isTypeMemberStart() { + if (token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */ || token() === 139 /* GetKeyword */ || token() === 153 /* SetKeyword */) { + return true; + } + let idToken = false; + while (isModifierKind(token())) { + idToken = true; + nextToken(); + } + if (token() === 23 /* OpenBracketToken */) { + return true; + } + if (isLiteralPropertyName()) { + idToken = true; + nextToken(); + } + if (idToken) { + return token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */ || token() === 58 /* QuestionToken */ || token() === 59 /* ColonToken */ || token() === 28 /* CommaToken */ || canParseSemicolon(); + } + return false; + } + function parseTypeMember() { + if (token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */) { + return parseSignatureMember(180 /* CallSignature */); + } + if (token() === 105 /* NewKeyword */ && lookAhead(nextTokenIsOpenParenOrLessThan)) { + return parseSignatureMember(181 /* ConstructSignature */); + } + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = parseModifiers( + /*allowDecorators*/ + false + ); + if (parseContextualModifier(139 /* GetKeyword */)) { + return parseAccessorDeclaration(pos, hasJSDoc, modifiers, 178 /* GetAccessor */, 4 /* Type */); + } + if (parseContextualModifier(153 /* SetKeyword */)) { + return parseAccessorDeclaration(pos, hasJSDoc, modifiers, 179 /* SetAccessor */, 4 /* Type */); + } + if (isIndexSignature()) { + return parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers); + } + return parsePropertyOrMethodSignature(pos, hasJSDoc, modifiers); + } + function nextTokenIsOpenParenOrLessThan() { + nextToken(); + return token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */; + } + function nextTokenIsDot() { + return nextToken() === 25 /* DotToken */; + } + function nextTokenIsOpenParenOrLessThanOrDot() { + switch (nextToken()) { + case 21 /* OpenParenToken */: + case 30 /* LessThanToken */: + case 25 /* DotToken */: + return true; + } + return false; + } + function parseTypeLiteral() { + const pos = getNodePos(); + return finishNode(factory2.createTypeLiteralNode(parseObjectTypeMembers()), pos); + } + function parseObjectTypeMembers() { + let members; + if (parseExpected(19 /* OpenBraceToken */)) { + members = parseList(4 /* TypeMembers */, parseTypeMember); + parseExpected(20 /* CloseBraceToken */); + } else { + members = createMissingList(); + } + return members; + } + function isStartOfMappedType() { + nextToken(); + if (token() === 40 /* PlusToken */ || token() === 41 /* MinusToken */) { + return nextToken() === 148 /* ReadonlyKeyword */; + } + if (token() === 148 /* ReadonlyKeyword */) { + nextToken(); + } + return token() === 23 /* OpenBracketToken */ && nextTokenIsIdentifier() && nextToken() === 103 /* InKeyword */; + } + function parseMappedTypeParameter() { + const pos = getNodePos(); + const name = parseIdentifierName(); + parseExpected(103 /* InKeyword */); + const type = parseType(); + return finishNode(factory2.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + name, + type, + /*defaultType*/ + void 0 + ), pos); + } + function parseMappedType() { + const pos = getNodePos(); + parseExpected(19 /* OpenBraceToken */); + let readonlyToken; + if (token() === 148 /* ReadonlyKeyword */ || token() === 40 /* PlusToken */ || token() === 41 /* MinusToken */) { + readonlyToken = parseTokenNode(); + if (readonlyToken.kind !== 148 /* ReadonlyKeyword */) { + parseExpected(148 /* ReadonlyKeyword */); + } + } + parseExpected(23 /* OpenBracketToken */); + const typeParameter = parseMappedTypeParameter(); + const nameType = parseOptional(130 /* AsKeyword */) ? parseType() : void 0; + parseExpected(24 /* CloseBracketToken */); + let questionToken; + if (token() === 58 /* QuestionToken */ || token() === 40 /* PlusToken */ || token() === 41 /* MinusToken */) { + questionToken = parseTokenNode(); + if (questionToken.kind !== 58 /* QuestionToken */) { + parseExpected(58 /* QuestionToken */); + } + } + const type = parseTypeAnnotation(); + parseSemicolon(); + const members = parseList(4 /* TypeMembers */, parseTypeMember); + parseExpected(20 /* CloseBraceToken */); + return finishNode(factory2.createMappedTypeNode(readonlyToken, typeParameter, nameType, questionToken, type, members), pos); + } + function parseTupleElementType() { + const pos = getNodePos(); + if (parseOptional(26 /* DotDotDotToken */)) { + return finishNode(factory2.createRestTypeNode(parseType()), pos); + } + const type = parseType(); + if (isJSDocNullableType(type) && type.pos === type.type.pos) { + const node = factory2.createOptionalTypeNode(type.type); + setTextRange(node, type); + node.flags = type.flags; + return node; + } + return type; + } + function isNextTokenColonOrQuestionColon() { + return nextToken() === 59 /* ColonToken */ || token() === 58 /* QuestionToken */ && nextToken() === 59 /* ColonToken */; + } + function isTupleElementName() { + if (token() === 26 /* DotDotDotToken */) { + return tokenIsIdentifierOrKeyword(nextToken()) && isNextTokenColonOrQuestionColon(); + } + return tokenIsIdentifierOrKeyword(token()) && isNextTokenColonOrQuestionColon(); + } + function parseTupleElementNameOrTupleElementType() { + if (lookAhead(isTupleElementName)) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const dotDotDotToken = parseOptionalToken(26 /* DotDotDotToken */); + const name = parseIdentifierName(); + const questionToken = parseOptionalToken(58 /* QuestionToken */); + parseExpected(59 /* ColonToken */); + const type = parseTupleElementType(); + const node = factory2.createNamedTupleMember(dotDotDotToken, name, questionToken, type); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + return parseTupleElementType(); + } + function parseTupleType() { + const pos = getNodePos(); + return finishNode( + factory2.createTupleTypeNode( + parseBracketedList(21 /* TupleElementTypes */, parseTupleElementNameOrTupleElementType, 23 /* OpenBracketToken */, 24 /* CloseBracketToken */) + ), + pos + ); + } + function parseParenthesizedType() { + const pos = getNodePos(); + parseExpected(21 /* OpenParenToken */); + const type = parseType(); + parseExpected(22 /* CloseParenToken */); + return finishNode(factory2.createParenthesizedType(type), pos); + } + function parseModifiersForConstructorType() { + let modifiers; + if (token() === 128 /* AbstractKeyword */) { + const pos = getNodePos(); + nextToken(); + const modifier = finishNode(factoryCreateToken(128 /* AbstractKeyword */), pos); + modifiers = createNodeArray([modifier], pos); + } + return modifiers; + } + function parseFunctionOrConstructorType() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = parseModifiersForConstructorType(); + const isConstructorType = parseOptional(105 /* NewKeyword */); + Debug.assert(!modifiers || isConstructorType, "Per isStartOfFunctionOrConstructorType, a function type cannot have modifiers."); + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(4 /* Type */); + const type = parseReturnType( + 39 /* EqualsGreaterThanToken */, + /*isType*/ + false + ); + const node = isConstructorType ? factory2.createConstructorTypeNode(modifiers, typeParameters, parameters, type) : factory2.createFunctionTypeNode(typeParameters, parameters, type); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseKeywordAndNoDot() { + const node = parseTokenNode(); + return token() === 25 /* DotToken */ ? void 0 : node; + } + function parseLiteralTypeNode(negative) { + const pos = getNodePos(); + if (negative) { + nextToken(); + } + let expression = token() === 112 /* TrueKeyword */ || token() === 97 /* FalseKeyword */ || token() === 106 /* NullKeyword */ ? parseTokenNode() : parseLiteralLikeNode(token()); + if (negative) { + expression = finishNode(factory2.createPrefixUnaryExpression(41 /* MinusToken */, expression), pos); + } + return finishNode(factory2.createLiteralTypeNode(expression), pos); + } + function isStartOfTypeOfImportType() { + nextToken(); + return token() === 102 /* ImportKeyword */; + } + function parseImportType() { + sourceFlags |= 4194304 /* PossiblyContainsDynamicImport */; + const pos = getNodePos(); + const isTypeOf = parseOptional(114 /* TypeOfKeyword */); + parseExpected(102 /* ImportKeyword */); + parseExpected(21 /* OpenParenToken */); + const type = parseType(); + let attributes; + if (parseOptional(28 /* CommaToken */)) { + const openBracePosition = scanner2.getTokenStart(); + parseExpected(19 /* OpenBraceToken */); + const currentToken2 = token(); + if (currentToken2 === 118 /* WithKeyword */ || currentToken2 === 132 /* AssertKeyword */) { + nextToken(); + } else { + parseErrorAtCurrentToken(Diagnostics._0_expected, tokenToString(118 /* WithKeyword */)); + } + parseExpected(59 /* ColonToken */); + attributes = parseImportAttributes( + currentToken2, + /*skipKeyword*/ + true + ); + parseOptional(28 /* CommaToken */); + if (!parseExpected(20 /* CloseBraceToken */)) { + const lastError = lastOrUndefined(parseDiagnostics); + if (lastError && lastError.code === Diagnostics._0_expected.code) { + addRelatedInfo( + lastError, + createDetachedDiagnostic(fileName, sourceText, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, "{", "}") + ); + } + } + } + parseExpected(22 /* CloseParenToken */); + const qualifier = parseOptional(25 /* DotToken */) ? parseEntityNameOfTypeReference() : void 0; + const typeArguments = parseTypeArgumentsOfTypeReference(); + return finishNode(factory2.createImportTypeNode(type, attributes, qualifier, typeArguments, isTypeOf), pos); + } + function nextTokenIsNumericOrBigIntLiteral() { + nextToken(); + return token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */; + } + function parseNonArrayType() { + switch (token()) { + case 133 /* AnyKeyword */: + case 159 /* UnknownKeyword */: + case 154 /* StringKeyword */: + case 150 /* NumberKeyword */: + case 163 /* BigIntKeyword */: + case 155 /* SymbolKeyword */: + case 136 /* BooleanKeyword */: + case 157 /* UndefinedKeyword */: + case 146 /* NeverKeyword */: + case 151 /* ObjectKeyword */: + return tryParse(parseKeywordAndNoDot) || parseTypeReference(); + case 67 /* AsteriskEqualsToken */: + scanner2.reScanAsteriskEqualsToken(); + // falls through + case 42 /* AsteriskToken */: + return parseJSDocAllType(); + case 61 /* QuestionQuestionToken */: + scanner2.reScanQuestionToken(); + // falls through + case 58 /* QuestionToken */: + return parseJSDocUnknownOrNullableType(); + case 100 /* FunctionKeyword */: + return parseJSDocFunctionType(); + case 54 /* ExclamationToken */: + return parseJSDocNonNullableType(); + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 106 /* NullKeyword */: + return parseLiteralTypeNode(); + case 41 /* MinusToken */: + return lookAhead(nextTokenIsNumericOrBigIntLiteral) ? parseLiteralTypeNode( + /*negative*/ + true + ) : parseTypeReference(); + case 116 /* VoidKeyword */: + return parseTokenNode(); + case 110 /* ThisKeyword */: { + const thisKeyword = parseThisTypeNode(); + if (token() === 142 /* IsKeyword */ && !scanner2.hasPrecedingLineBreak()) { + return parseThisTypePredicate(thisKeyword); + } else { + return thisKeyword; + } + } + case 114 /* TypeOfKeyword */: + return lookAhead(isStartOfTypeOfImportType) ? parseImportType() : parseTypeQuery(); + case 19 /* OpenBraceToken */: + return lookAhead(isStartOfMappedType) ? parseMappedType() : parseTypeLiteral(); + case 23 /* OpenBracketToken */: + return parseTupleType(); + case 21 /* OpenParenToken */: + return parseParenthesizedType(); + case 102 /* ImportKeyword */: + return parseImportType(); + case 131 /* AssertsKeyword */: + return lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine) ? parseAssertsTypePredicate() : parseTypeReference(); + case 16 /* TemplateHead */: + return parseTemplateType(); + default: + return parseTypeReference(); + } + } + function isStartOfType(inStartOfParameter) { + switch (token()) { + case 133 /* AnyKeyword */: + case 159 /* UnknownKeyword */: + case 154 /* StringKeyword */: + case 150 /* NumberKeyword */: + case 163 /* BigIntKeyword */: + case 136 /* BooleanKeyword */: + case 148 /* ReadonlyKeyword */: + case 155 /* SymbolKeyword */: + case 158 /* UniqueKeyword */: + case 116 /* VoidKeyword */: + case 157 /* UndefinedKeyword */: + case 106 /* NullKeyword */: + case 110 /* ThisKeyword */: + case 114 /* TypeOfKeyword */: + case 146 /* NeverKeyword */: + case 19 /* OpenBraceToken */: + case 23 /* OpenBracketToken */: + case 30 /* LessThanToken */: + case 52 /* BarToken */: + case 51 /* AmpersandToken */: + case 105 /* NewKeyword */: + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 151 /* ObjectKeyword */: + case 42 /* AsteriskToken */: + case 58 /* QuestionToken */: + case 54 /* ExclamationToken */: + case 26 /* DotDotDotToken */: + case 140 /* InferKeyword */: + case 102 /* ImportKeyword */: + case 131 /* AssertsKeyword */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 16 /* TemplateHead */: + return true; + case 100 /* FunctionKeyword */: + return !inStartOfParameter; + case 41 /* MinusToken */: + return !inStartOfParameter && lookAhead(nextTokenIsNumericOrBigIntLiteral); + case 21 /* OpenParenToken */: + return !inStartOfParameter && lookAhead(isStartOfParenthesizedOrFunctionType); + default: + return isIdentifier2(); + } + } + function isStartOfParenthesizedOrFunctionType() { + nextToken(); + return token() === 22 /* CloseParenToken */ || isStartOfParameter( + /*isJSDocParameter*/ + false + ) || isStartOfType(); + } + function parsePostfixTypeOrHigher() { + const pos = getNodePos(); + let type = parseNonArrayType(); + while (!scanner2.hasPrecedingLineBreak()) { + switch (token()) { + case 54 /* ExclamationToken */: + nextToken(); + type = finishNode(factory2.createJSDocNonNullableType( + type, + /*postfix*/ + true + ), pos); + break; + case 58 /* QuestionToken */: + if (lookAhead(nextTokenIsStartOfType)) { + return type; + } + nextToken(); + type = finishNode(factory2.createJSDocNullableType( + type, + /*postfix*/ + true + ), pos); + break; + case 23 /* OpenBracketToken */: + parseExpected(23 /* OpenBracketToken */); + if (isStartOfType()) { + const indexType = parseType(); + parseExpected(24 /* CloseBracketToken */); + type = finishNode(factory2.createIndexedAccessTypeNode(type, indexType), pos); + } else { + parseExpected(24 /* CloseBracketToken */); + type = finishNode(factory2.createArrayTypeNode(type), pos); + } + break; + default: + return type; + } + } + return type; + } + function parseTypeOperator(operator) { + const pos = getNodePos(); + parseExpected(operator); + return finishNode(factory2.createTypeOperatorNode(operator, parseTypeOperatorOrHigher()), pos); + } + function tryParseConstraintOfInferType() { + if (parseOptional(96 /* ExtendsKeyword */)) { + const constraint = disallowConditionalTypesAnd(parseType); + if (inDisallowConditionalTypesContext() || token() !== 58 /* QuestionToken */) { + return constraint; + } + } + } + function parseTypeParameterOfInferType() { + const pos = getNodePos(); + const name = parseIdentifier(); + const constraint = tryParse(tryParseConstraintOfInferType); + const node = factory2.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + name, + constraint + ); + return finishNode(node, pos); + } + function parseInferType() { + const pos = getNodePos(); + parseExpected(140 /* InferKeyword */); + return finishNode(factory2.createInferTypeNode(parseTypeParameterOfInferType()), pos); + } + function parseTypeOperatorOrHigher() { + const operator = token(); + switch (operator) { + case 143 /* KeyOfKeyword */: + case 158 /* UniqueKeyword */: + case 148 /* ReadonlyKeyword */: + return parseTypeOperator(operator); + case 140 /* InferKeyword */: + return parseInferType(); + } + return allowConditionalTypesAnd(parsePostfixTypeOrHigher); + } + function parseFunctionOrConstructorTypeToError(isInUnionType) { + if (isStartOfFunctionTypeOrConstructorType()) { + const type = parseFunctionOrConstructorType(); + let diagnostic; + if (isFunctionTypeNode(type)) { + diagnostic = isInUnionType ? Diagnostics.Function_type_notation_must_be_parenthesized_when_used_in_a_union_type : Diagnostics.Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type; + } else { + diagnostic = isInUnionType ? Diagnostics.Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type : Diagnostics.Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type; + } + parseErrorAtRange(type, diagnostic); + return type; + } + return void 0; + } + function parseUnionOrIntersectionType(operator, parseConstituentType, createTypeNode) { + const pos = getNodePos(); + const isUnionType = operator === 52 /* BarToken */; + const hasLeadingOperator = parseOptional(operator); + let type = hasLeadingOperator && parseFunctionOrConstructorTypeToError(isUnionType) || parseConstituentType(); + if (token() === operator || hasLeadingOperator) { + const types = [type]; + while (parseOptional(operator)) { + types.push(parseFunctionOrConstructorTypeToError(isUnionType) || parseConstituentType()); + } + type = finishNode(createTypeNode(createNodeArray(types, pos)), pos); + } + return type; + } + function parseIntersectionTypeOrHigher() { + return parseUnionOrIntersectionType(51 /* AmpersandToken */, parseTypeOperatorOrHigher, factory2.createIntersectionTypeNode); + } + function parseUnionTypeOrHigher() { + return parseUnionOrIntersectionType(52 /* BarToken */, parseIntersectionTypeOrHigher, factory2.createUnionTypeNode); + } + function nextTokenIsNewKeyword() { + nextToken(); + return token() === 105 /* NewKeyword */; + } + function isStartOfFunctionTypeOrConstructorType() { + if (token() === 30 /* LessThanToken */) { + return true; + } + if (token() === 21 /* OpenParenToken */ && lookAhead(isUnambiguouslyStartOfFunctionType)) { + return true; + } + return token() === 105 /* NewKeyword */ || token() === 128 /* AbstractKeyword */ && lookAhead(nextTokenIsNewKeyword); + } + function skipParameterStart() { + if (isModifierKind(token())) { + parseModifiers( + /*allowDecorators*/ + false + ); + } + if (isIdentifier2() || token() === 110 /* ThisKeyword */) { + nextToken(); + return true; + } + if (token() === 23 /* OpenBracketToken */ || token() === 19 /* OpenBraceToken */) { + const previousErrorCount = parseDiagnostics.length; + parseIdentifierOrPattern(); + return previousErrorCount === parseDiagnostics.length; + } + return false; + } + function isUnambiguouslyStartOfFunctionType() { + nextToken(); + if (token() === 22 /* CloseParenToken */ || token() === 26 /* DotDotDotToken */) { + return true; + } + if (skipParameterStart()) { + if (token() === 59 /* ColonToken */ || token() === 28 /* CommaToken */ || token() === 58 /* QuestionToken */ || token() === 64 /* EqualsToken */) { + return true; + } + if (token() === 22 /* CloseParenToken */) { + nextToken(); + if (token() === 39 /* EqualsGreaterThanToken */) { + return true; + } + } + } + return false; + } + function parseTypeOrTypePredicate() { + const pos = getNodePos(); + const typePredicateVariable = isIdentifier2() && tryParse(parseTypePredicatePrefix); + const type = parseType(); + if (typePredicateVariable) { + return finishNode(factory2.createTypePredicateNode( + /*assertsModifier*/ + void 0, + typePredicateVariable, + type + ), pos); + } else { + return type; + } + } + function parseTypePredicatePrefix() { + const id = parseIdentifier(); + if (token() === 142 /* IsKeyword */ && !scanner2.hasPrecedingLineBreak()) { + nextToken(); + return id; + } + } + function parseAssertsTypePredicate() { + const pos = getNodePos(); + const assertsModifier = parseExpectedToken(131 /* AssertsKeyword */); + const parameterName = token() === 110 /* ThisKeyword */ ? parseThisTypeNode() : parseIdentifier(); + const type = parseOptional(142 /* IsKeyword */) ? parseType() : void 0; + return finishNode(factory2.createTypePredicateNode(assertsModifier, parameterName, type), pos); + } + function parseType() { + if (contextFlags & 81920 /* TypeExcludesFlags */) { + return doOutsideOfContext(81920 /* TypeExcludesFlags */, parseType); + } + if (isStartOfFunctionTypeOrConstructorType()) { + return parseFunctionOrConstructorType(); + } + const pos = getNodePos(); + const type = parseUnionTypeOrHigher(); + if (!inDisallowConditionalTypesContext() && !scanner2.hasPrecedingLineBreak() && parseOptional(96 /* ExtendsKeyword */)) { + const extendsType = disallowConditionalTypesAnd(parseType); + parseExpected(58 /* QuestionToken */); + const trueType = allowConditionalTypesAnd(parseType); + parseExpected(59 /* ColonToken */); + const falseType = allowConditionalTypesAnd(parseType); + return finishNode(factory2.createConditionalTypeNode(type, extendsType, trueType, falseType), pos); + } + return type; + } + function parseTypeAnnotation() { + return parseOptional(59 /* ColonToken */) ? parseType() : void 0; + } + function isStartOfLeftHandSideExpression() { + switch (token()) { + case 110 /* ThisKeyword */: + case 108 /* SuperKeyword */: + case 106 /* NullKeyword */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 16 /* TemplateHead */: + case 21 /* OpenParenToken */: + case 23 /* OpenBracketToken */: + case 19 /* OpenBraceToken */: + case 100 /* FunctionKeyword */: + case 86 /* ClassKeyword */: + case 105 /* NewKeyword */: + case 44 /* SlashToken */: + case 69 /* SlashEqualsToken */: + case 80 /* Identifier */: + return true; + case 102 /* ImportKeyword */: + return lookAhead(nextTokenIsOpenParenOrLessThanOrDot); + default: + return isIdentifier2(); + } + } + function isStartOfExpression() { + if (isStartOfLeftHandSideExpression()) { + return true; + } + switch (token()) { + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + case 54 /* ExclamationToken */: + case 91 /* DeleteKeyword */: + case 114 /* TypeOfKeyword */: + case 116 /* VoidKeyword */: + case 46 /* PlusPlusToken */: + case 47 /* MinusMinusToken */: + case 30 /* LessThanToken */: + case 135 /* AwaitKeyword */: + case 127 /* YieldKeyword */: + case 81 /* PrivateIdentifier */: + case 60 /* AtToken */: + return true; + default: + if (isBinaryOperator2()) { + return true; + } + return isIdentifier2(); + } + } + function isStartOfExpressionStatement() { + return token() !== 19 /* OpenBraceToken */ && token() !== 100 /* FunctionKeyword */ && token() !== 86 /* ClassKeyword */ && token() !== 60 /* AtToken */ && isStartOfExpression(); + } + function parseExpression() { + const saveDecoratorContext = inDecoratorContext(); + if (saveDecoratorContext) { + setDecoratorContext( + /*val*/ + false + ); + } + const pos = getNodePos(); + let expr = parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ); + let operatorToken; + while (operatorToken = parseOptionalToken(28 /* CommaToken */)) { + expr = makeBinaryExpression(expr, operatorToken, parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ), pos); + } + if (saveDecoratorContext) { + setDecoratorContext( + /*val*/ + true + ); + } + return expr; + } + function parseInitializer() { + return parseOptional(64 /* EqualsToken */) ? parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ) : void 0; + } + function parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction) { + if (isYieldExpression2()) { + return parseYieldExpression(); + } + const arrowExpression = tryParseParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction) || tryParseAsyncSimpleArrowFunctionExpression(allowReturnTypeInArrowFunction); + if (arrowExpression) { + return arrowExpression; + } + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const expr = parseBinaryExpressionOrHigher(0 /* Lowest */); + if (expr.kind === 80 /* Identifier */ && token() === 39 /* EqualsGreaterThanToken */) { + return parseSimpleArrowFunctionExpression( + pos, + expr, + allowReturnTypeInArrowFunction, + hasJSDoc, + /*asyncModifier*/ + void 0 + ); + } + if (isLeftHandSideExpression(expr) && isAssignmentOperator(reScanGreaterToken())) { + return makeBinaryExpression(expr, parseTokenNode(), parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction), pos); + } + return parseConditionalExpressionRest(expr, pos, allowReturnTypeInArrowFunction); + } + function isYieldExpression2() { + if (token() === 127 /* YieldKeyword */) { + if (inYieldContext()) { + return true; + } + return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine); + } + return false; + } + function nextTokenIsIdentifierOnSameLine() { + nextToken(); + return !scanner2.hasPrecedingLineBreak() && isIdentifier2(); + } + function parseYieldExpression() { + const pos = getNodePos(); + nextToken(); + if (!scanner2.hasPrecedingLineBreak() && (token() === 42 /* AsteriskToken */ || isStartOfExpression())) { + return finishNode( + factory2.createYieldExpression( + parseOptionalToken(42 /* AsteriskToken */), + parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ) + ), + pos + ); + } else { + return finishNode(factory2.createYieldExpression( + /*asteriskToken*/ + void 0, + /*expression*/ + void 0 + ), pos); + } + } + function parseSimpleArrowFunctionExpression(pos, identifier, allowReturnTypeInArrowFunction, hasJSDoc, asyncModifier) { + Debug.assert(token() === 39 /* EqualsGreaterThanToken */, "parseSimpleArrowFunctionExpression should only have been called if we had a =>"); + const parameter = factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + identifier, + /*questionToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + finishNode(parameter, identifier.pos); + const parameters = createNodeArray([parameter], parameter.pos, parameter.end); + const equalsGreaterThanToken = parseExpectedToken(39 /* EqualsGreaterThanToken */); + const body = parseArrowFunctionExpressionBody( + /*isAsync*/ + !!asyncModifier, + allowReturnTypeInArrowFunction + ); + const node = factory2.createArrowFunction( + asyncModifier, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + equalsGreaterThanToken, + body + ); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function tryParseParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction) { + const triState = isParenthesizedArrowFunctionExpression(); + if (triState === 0 /* False */) { + return void 0; + } + return triState === 1 /* True */ ? parseParenthesizedArrowFunctionExpression( + /*allowAmbiguity*/ + true, + /*allowReturnTypeInArrowFunction*/ + true + ) : tryParse(() => parsePossibleParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction)); + } + function isParenthesizedArrowFunctionExpression() { + if (token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */ || token() === 134 /* AsyncKeyword */) { + return lookAhead(isParenthesizedArrowFunctionExpressionWorker); + } + if (token() === 39 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } + return 0 /* False */; + } + function isParenthesizedArrowFunctionExpressionWorker() { + if (token() === 134 /* AsyncKeyword */) { + nextToken(); + if (scanner2.hasPrecedingLineBreak()) { + return 0 /* False */; + } + if (token() !== 21 /* OpenParenToken */ && token() !== 30 /* LessThanToken */) { + return 0 /* False */; + } + } + const first2 = token(); + const second = nextToken(); + if (first2 === 21 /* OpenParenToken */) { + if (second === 22 /* CloseParenToken */) { + const third = nextToken(); + switch (third) { + case 39 /* EqualsGreaterThanToken */: + case 59 /* ColonToken */: + case 19 /* OpenBraceToken */: + return 1 /* True */; + default: + return 0 /* False */; + } + } + if (second === 23 /* OpenBracketToken */ || second === 19 /* OpenBraceToken */) { + return 2 /* Unknown */; + } + if (second === 26 /* DotDotDotToken */) { + return 1 /* True */; + } + if (isModifierKind(second) && second !== 134 /* AsyncKeyword */ && lookAhead(nextTokenIsIdentifier)) { + if (nextToken() === 130 /* AsKeyword */) { + return 0 /* False */; + } + return 1 /* True */; + } + if (!isIdentifier2() && second !== 110 /* ThisKeyword */) { + return 0 /* False */; + } + switch (nextToken()) { + case 59 /* ColonToken */: + return 1 /* True */; + case 58 /* QuestionToken */: + nextToken(); + if (token() === 59 /* ColonToken */ || token() === 28 /* CommaToken */ || token() === 64 /* EqualsToken */ || token() === 22 /* CloseParenToken */) { + return 1 /* True */; + } + return 0 /* False */; + case 28 /* CommaToken */: + case 64 /* EqualsToken */: + case 22 /* CloseParenToken */: + return 2 /* Unknown */; + } + return 0 /* False */; + } else { + Debug.assert(first2 === 30 /* LessThanToken */); + if (!isIdentifier2() && token() !== 87 /* ConstKeyword */) { + return 0 /* False */; + } + if (languageVariant === 1 /* JSX */) { + const isArrowFunctionInJsx = lookAhead(() => { + parseOptional(87 /* ConstKeyword */); + const third = nextToken(); + if (third === 96 /* ExtendsKeyword */) { + const fourth = nextToken(); + switch (fourth) { + case 64 /* EqualsToken */: + case 32 /* GreaterThanToken */: + case 44 /* SlashToken */: + return false; + default: + return true; + } + } else if (third === 28 /* CommaToken */ || third === 64 /* EqualsToken */) { + return true; + } + return false; + }); + if (isArrowFunctionInJsx) { + return 1 /* True */; + } + return 0 /* False */; + } + return 2 /* Unknown */; + } + } + function parsePossibleParenthesizedArrowFunctionExpression(allowReturnTypeInArrowFunction) { + const tokenPos = scanner2.getTokenStart(); + if (notParenthesizedArrow == null ? void 0 : notParenthesizedArrow.has(tokenPos)) { + return void 0; + } + const result = parseParenthesizedArrowFunctionExpression( + /*allowAmbiguity*/ + false, + allowReturnTypeInArrowFunction + ); + if (!result) { + (notParenthesizedArrow || (notParenthesizedArrow = /* @__PURE__ */ new Set())).add(tokenPos); + } + return result; + } + function tryParseAsyncSimpleArrowFunctionExpression(allowReturnTypeInArrowFunction) { + if (token() === 134 /* AsyncKeyword */) { + if (lookAhead(isUnParenthesizedAsyncArrowFunctionWorker) === 1 /* True */) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const asyncModifier = parseModifiersForArrowFunction(); + const expr = parseBinaryExpressionOrHigher(0 /* Lowest */); + return parseSimpleArrowFunctionExpression(pos, expr, allowReturnTypeInArrowFunction, hasJSDoc, asyncModifier); + } + } + return void 0; + } + function isUnParenthesizedAsyncArrowFunctionWorker() { + if (token() === 134 /* AsyncKeyword */) { + nextToken(); + if (scanner2.hasPrecedingLineBreak() || token() === 39 /* EqualsGreaterThanToken */) { + return 0 /* False */; + } + const expr = parseBinaryExpressionOrHigher(0 /* Lowest */); + if (!scanner2.hasPrecedingLineBreak() && expr.kind === 80 /* Identifier */ && token() === 39 /* EqualsGreaterThanToken */) { + return 1 /* True */; + } + } + return 0 /* False */; + } + function parseParenthesizedArrowFunctionExpression(allowAmbiguity, allowReturnTypeInArrowFunction) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = parseModifiersForArrowFunction(); + const isAsync = some(modifiers, isAsyncModifier) ? 2 /* Await */ : 0 /* None */; + const typeParameters = parseTypeParameters(); + let parameters; + if (!parseExpected(21 /* OpenParenToken */)) { + if (!allowAmbiguity) { + return void 0; + } + parameters = createMissingList(); + } else { + if (!allowAmbiguity) { + const maybeParameters = parseParametersWorker(isAsync, allowAmbiguity); + if (!maybeParameters) { + return void 0; + } + parameters = maybeParameters; + } else { + parameters = parseParametersWorker(isAsync, allowAmbiguity); + } + if (!parseExpected(22 /* CloseParenToken */) && !allowAmbiguity) { + return void 0; + } + } + const hasReturnColon = token() === 59 /* ColonToken */; + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + if (type && !allowAmbiguity && typeHasArrowFunctionBlockingParseError(type)) { + return void 0; + } + let unwrappedType = type; + while ((unwrappedType == null ? void 0 : unwrappedType.kind) === 197 /* ParenthesizedType */) { + unwrappedType = unwrappedType.type; + } + const hasJSDocFunctionType = unwrappedType && isJSDocFunctionType(unwrappedType); + if (!allowAmbiguity && token() !== 39 /* EqualsGreaterThanToken */ && (hasJSDocFunctionType || token() !== 19 /* OpenBraceToken */)) { + return void 0; + } + const lastToken = token(); + const equalsGreaterThanToken = parseExpectedToken(39 /* EqualsGreaterThanToken */); + const body = lastToken === 39 /* EqualsGreaterThanToken */ || lastToken === 19 /* OpenBraceToken */ ? parseArrowFunctionExpressionBody(some(modifiers, isAsyncModifier), allowReturnTypeInArrowFunction) : parseIdentifier(); + if (!allowReturnTypeInArrowFunction && hasReturnColon) { + if (token() !== 59 /* ColonToken */) { + return void 0; + } + } + const node = factory2.createArrowFunction(modifiers, typeParameters, parameters, type, equalsGreaterThanToken, body); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseArrowFunctionExpressionBody(isAsync, allowReturnTypeInArrowFunction) { + if (token() === 19 /* OpenBraceToken */) { + return parseFunctionBlock(isAsync ? 2 /* Await */ : 0 /* None */); + } + if (token() !== 27 /* SemicolonToken */ && token() !== 100 /* FunctionKeyword */ && token() !== 86 /* ClassKeyword */ && isStartOfStatement() && !isStartOfExpressionStatement()) { + return parseFunctionBlock(16 /* IgnoreMissingOpenBrace */ | (isAsync ? 2 /* Await */ : 0 /* None */)); + } + const savedYieldContext = inYieldContext(); + setYieldContext(false); + const savedTopLevel = topLevel; + topLevel = false; + const node = isAsync ? doInAwaitContext(() => parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction)) : doOutsideOfAwaitContext(() => parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction)); + topLevel = savedTopLevel; + setYieldContext(savedYieldContext); + return node; + } + function parseConditionalExpressionRest(leftOperand, pos, allowReturnTypeInArrowFunction) { + const questionToken = parseOptionalToken(58 /* QuestionToken */); + if (!questionToken) { + return leftOperand; + } + let colonToken; + return finishNode( + factory2.createConditionalExpression( + leftOperand, + questionToken, + doOutsideOfContext(disallowInAndDecoratorContext, () => parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + false + )), + colonToken = parseExpectedToken(59 /* ColonToken */), + nodeIsPresent(colonToken) ? parseAssignmentExpressionOrHigher(allowReturnTypeInArrowFunction) : createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + false, + Diagnostics._0_expected, + tokenToString(59 /* ColonToken */) + ) + ), + pos + ); + } + function parseBinaryExpressionOrHigher(precedence) { + const pos = getNodePos(); + const leftOperand = parseUnaryExpressionOrHigher(); + return parseBinaryExpressionRest(precedence, leftOperand, pos); + } + function isInOrOfKeyword(t) { + return t === 103 /* InKeyword */ || t === 165 /* OfKeyword */; + } + function parseBinaryExpressionRest(precedence, leftOperand, pos) { + while (true) { + reScanGreaterToken(); + const newPrecedence = getBinaryOperatorPrecedence(token()); + const consumeCurrentOperator = token() === 43 /* AsteriskAsteriskToken */ ? newPrecedence >= precedence : newPrecedence > precedence; + if (!consumeCurrentOperator) { + break; + } + if (token() === 103 /* InKeyword */ && inDisallowInContext()) { + break; + } + if (token() === 130 /* AsKeyword */ || token() === 152 /* SatisfiesKeyword */) { + if (scanner2.hasPrecedingLineBreak()) { + break; + } else { + const keywordKind = token(); + nextToken(); + leftOperand = keywordKind === 152 /* SatisfiesKeyword */ ? makeSatisfiesExpression(leftOperand, parseType()) : makeAsExpression(leftOperand, parseType()); + } + } else { + leftOperand = makeBinaryExpression(leftOperand, parseTokenNode(), parseBinaryExpressionOrHigher(newPrecedence), pos); + } + } + return leftOperand; + } + function isBinaryOperator2() { + if (inDisallowInContext() && token() === 103 /* InKeyword */) { + return false; + } + return getBinaryOperatorPrecedence(token()) > 0; + } + function makeSatisfiesExpression(left, right) { + return finishNode(factory2.createSatisfiesExpression(left, right), left.pos); + } + function makeBinaryExpression(left, operatorToken, right, pos) { + return finishNode(factory2.createBinaryExpression(left, operatorToken, right), pos); + } + function makeAsExpression(left, right) { + return finishNode(factory2.createAsExpression(left, right), left.pos); + } + function parsePrefixUnaryExpression() { + const pos = getNodePos(); + return finishNode(factory2.createPrefixUnaryExpression(token(), nextTokenAnd(parseSimpleUnaryExpression)), pos); + } + function parseDeleteExpression() { + const pos = getNodePos(); + return finishNode(factory2.createDeleteExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos); + } + function parseTypeOfExpression() { + const pos = getNodePos(); + return finishNode(factory2.createTypeOfExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos); + } + function parseVoidExpression() { + const pos = getNodePos(); + return finishNode(factory2.createVoidExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos); + } + function isAwaitExpression2() { + if (token() === 135 /* AwaitKeyword */) { + if (inAwaitContext()) { + return true; + } + return lookAhead(nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine); + } + return false; + } + function parseAwaitExpression() { + const pos = getNodePos(); + return finishNode(factory2.createAwaitExpression(nextTokenAnd(parseSimpleUnaryExpression)), pos); + } + function parseUnaryExpressionOrHigher() { + if (isUpdateExpression()) { + const pos = getNodePos(); + const updateExpression = parseUpdateExpression(); + return token() === 43 /* AsteriskAsteriskToken */ ? parseBinaryExpressionRest(getBinaryOperatorPrecedence(token()), updateExpression, pos) : updateExpression; + } + const unaryOperator = token(); + const simpleUnaryExpression = parseSimpleUnaryExpression(); + if (token() === 43 /* AsteriskAsteriskToken */) { + const pos = skipTrivia(sourceText, simpleUnaryExpression.pos); + const { end } = simpleUnaryExpression; + if (simpleUnaryExpression.kind === 217 /* TypeAssertionExpression */) { + parseErrorAt(pos, end, Diagnostics.A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses); + } else { + Debug.assert(isKeywordOrPunctuation(unaryOperator)); + parseErrorAt(pos, end, Diagnostics.An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Consider_enclosing_the_expression_in_parentheses, tokenToString(unaryOperator)); + } + } + return simpleUnaryExpression; + } + function parseSimpleUnaryExpression() { + switch (token()) { + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + case 54 /* ExclamationToken */: + return parsePrefixUnaryExpression(); + case 91 /* DeleteKeyword */: + return parseDeleteExpression(); + case 114 /* TypeOfKeyword */: + return parseTypeOfExpression(); + case 116 /* VoidKeyword */: + return parseVoidExpression(); + case 30 /* LessThanToken */: + if (languageVariant === 1 /* JSX */) { + return parseJsxElementOrSelfClosingElementOrFragment( + /*inExpressionContext*/ + true, + /*topInvalidNodePosition*/ + void 0, + /*openingTag*/ + void 0, + /*mustBeUnary*/ + true + ); + } + return parseTypeAssertion(); + case 135 /* AwaitKeyword */: + if (isAwaitExpression2()) { + return parseAwaitExpression(); + } + // falls through + default: + return parseUpdateExpression(); + } + } + function isUpdateExpression() { + switch (token()) { + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + case 54 /* ExclamationToken */: + case 91 /* DeleteKeyword */: + case 114 /* TypeOfKeyword */: + case 116 /* VoidKeyword */: + case 135 /* AwaitKeyword */: + return false; + case 30 /* LessThanToken */: + if (languageVariant !== 1 /* JSX */) { + return false; + } + // We are in JSX context and the token is part of JSXElement. + // falls through + default: + return true; + } + } + function parseUpdateExpression() { + if (token() === 46 /* PlusPlusToken */ || token() === 47 /* MinusMinusToken */) { + const pos = getNodePos(); + return finishNode(factory2.createPrefixUnaryExpression(token(), nextTokenAnd(parseLeftHandSideExpressionOrHigher)), pos); + } else if (languageVariant === 1 /* JSX */ && token() === 30 /* LessThanToken */ && lookAhead(nextTokenIsIdentifierOrKeywordOrGreaterThan)) { + return parseJsxElementOrSelfClosingElementOrFragment( + /*inExpressionContext*/ + true + ); + } + const expression = parseLeftHandSideExpressionOrHigher(); + Debug.assert(isLeftHandSideExpression(expression)); + if ((token() === 46 /* PlusPlusToken */ || token() === 47 /* MinusMinusToken */) && !scanner2.hasPrecedingLineBreak()) { + const operator = token(); + nextToken(); + return finishNode(factory2.createPostfixUnaryExpression(expression, operator), expression.pos); + } + return expression; + } + function parseLeftHandSideExpressionOrHigher() { + const pos = getNodePos(); + let expression; + if (token() === 102 /* ImportKeyword */) { + if (lookAhead(nextTokenIsOpenParenOrLessThan)) { + sourceFlags |= 4194304 /* PossiblyContainsDynamicImport */; + expression = parseTokenNode(); + } else if (lookAhead(nextTokenIsDot)) { + nextToken(); + nextToken(); + expression = finishNode(factory2.createMetaProperty(102 /* ImportKeyword */, parseIdentifierName()), pos); + if (expression.name.escapedText === "defer") { + if (token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */) { + sourceFlags |= 4194304 /* PossiblyContainsDynamicImport */; + } + } else { + sourceFlags |= 8388608 /* PossiblyContainsImportMeta */; + } + } else { + expression = parseMemberExpressionOrHigher(); + } + } else { + expression = token() === 108 /* SuperKeyword */ ? parseSuperExpression() : parseMemberExpressionOrHigher(); + } + return parseCallExpressionRest(pos, expression); + } + function parseMemberExpressionOrHigher() { + const pos = getNodePos(); + const expression = parsePrimaryExpression(); + return parseMemberExpressionRest( + pos, + expression, + /*allowOptionalChain*/ + true + ); + } + function parseSuperExpression() { + const pos = getNodePos(); + let expression = parseTokenNode(); + if (token() === 30 /* LessThanToken */) { + const startPos = getNodePos(); + const typeArguments = tryParse(parseTypeArgumentsInExpression); + if (typeArguments !== void 0) { + parseErrorAt(startPos, getNodePos(), Diagnostics.super_may_not_use_type_arguments); + if (!isTemplateStartOfTaggedTemplate()) { + expression = factory2.createExpressionWithTypeArguments(expression, typeArguments); + } + } + } + if (token() === 21 /* OpenParenToken */ || token() === 25 /* DotToken */ || token() === 23 /* OpenBracketToken */) { + return expression; + } + parseExpectedToken(25 /* DotToken */, Diagnostics.super_must_be_followed_by_an_argument_list_or_member_access); + return finishNode(factoryCreatePropertyAccessExpression(expression, parseRightSideOfDot( + /*allowIdentifierNames*/ + true, + /*allowPrivateIdentifiers*/ + true, + /*allowUnicodeEscapeSequenceInIdentifierName*/ + true + )), pos); + } + function parseJsxElementOrSelfClosingElementOrFragment(inExpressionContext, topInvalidNodePosition, openingTag, mustBeUnary = false) { + const pos = getNodePos(); + const opening = parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext); + let result; + if (opening.kind === 287 /* JsxOpeningElement */) { + let children = parseJsxChildren(opening); + let closingElement; + const lastChild = children[children.length - 1]; + if ((lastChild == null ? void 0 : lastChild.kind) === 285 /* JsxElement */ && !tagNamesAreEquivalent(lastChild.openingElement.tagName, lastChild.closingElement.tagName) && tagNamesAreEquivalent(opening.tagName, lastChild.closingElement.tagName)) { + const end = lastChild.children.end; + const newLast = finishNode( + factory2.createJsxElement( + lastChild.openingElement, + lastChild.children, + finishNode(factory2.createJsxClosingElement(finishNode(factoryCreateIdentifier(""), end, end)), end, end) + ), + lastChild.openingElement.pos, + end + ); + children = createNodeArray([...children.slice(0, children.length - 1), newLast], children.pos, end); + closingElement = lastChild.closingElement; + } else { + closingElement = parseJsxClosingElement(opening, inExpressionContext); + if (!tagNamesAreEquivalent(opening.tagName, closingElement.tagName)) { + if (openingTag && isJsxOpeningElement(openingTag) && tagNamesAreEquivalent(closingElement.tagName, openingTag.tagName)) { + parseErrorAtRange(opening.tagName, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, opening.tagName)); + } else { + parseErrorAtRange(closingElement.tagName, Diagnostics.Expected_corresponding_JSX_closing_tag_for_0, getTextOfNodeFromSourceText(sourceText, opening.tagName)); + } + } + } + result = finishNode(factory2.createJsxElement(opening, children, closingElement), pos); + } else if (opening.kind === 290 /* JsxOpeningFragment */) { + result = finishNode(factory2.createJsxFragment(opening, parseJsxChildren(opening), parseJsxClosingFragment(inExpressionContext)), pos); + } else { + Debug.assert(opening.kind === 286 /* JsxSelfClosingElement */); + result = opening; + } + if (!mustBeUnary && inExpressionContext && token() === 30 /* LessThanToken */) { + const topBadPos = typeof topInvalidNodePosition === "undefined" ? result.pos : topInvalidNodePosition; + const invalidElement = tryParse(() => parseJsxElementOrSelfClosingElementOrFragment( + /*inExpressionContext*/ + true, + topBadPos + )); + if (invalidElement) { + const operatorToken = createMissingNode( + 28 /* CommaToken */, + /*reportAtCurrentPosition*/ + false + ); + setTextRangePosWidth(operatorToken, invalidElement.pos, 0); + parseErrorAt(skipTrivia(sourceText, topBadPos), invalidElement.end, Diagnostics.JSX_expressions_must_have_one_parent_element); + return finishNode(factory2.createBinaryExpression(result, operatorToken, invalidElement), pos); + } + } + return result; + } + function parseJsxText() { + const pos = getNodePos(); + const node = factory2.createJsxText(scanner2.getTokenValue(), currentToken === 13 /* JsxTextAllWhiteSpaces */); + currentToken = scanner2.scanJsxToken(); + return finishNode(node, pos); + } + function parseJsxChild(openingTag, token2) { + switch (token2) { + case 1 /* EndOfFileToken */: + if (isJsxOpeningFragment(openingTag)) { + parseErrorAtRange(openingTag, Diagnostics.JSX_fragment_has_no_corresponding_closing_tag); + } else { + const tag = openingTag.tagName; + const start = Math.min(skipTrivia(sourceText, tag.pos), tag.end); + parseErrorAt(start, tag.end, Diagnostics.JSX_element_0_has_no_corresponding_closing_tag, getTextOfNodeFromSourceText(sourceText, openingTag.tagName)); + } + return void 0; + case 31 /* LessThanSlashToken */: + case 7 /* ConflictMarkerTrivia */: + return void 0; + case 12 /* JsxText */: + case 13 /* JsxTextAllWhiteSpaces */: + return parseJsxText(); + case 19 /* OpenBraceToken */: + return parseJsxExpression( + /*inExpressionContext*/ + false + ); + case 30 /* LessThanToken */: + return parseJsxElementOrSelfClosingElementOrFragment( + /*inExpressionContext*/ + false, + /*topInvalidNodePosition*/ + void 0, + openingTag + ); + default: + return Debug.assertNever(token2); + } + } + function parseJsxChildren(openingTag) { + const list = []; + const listPos = getNodePos(); + const saveParsingContext = parsingContext; + parsingContext |= 1 << 14 /* JsxChildren */; + while (true) { + const child = parseJsxChild(openingTag, currentToken = scanner2.reScanJsxToken()); + if (!child) break; + list.push(child); + if (isJsxOpeningElement(openingTag) && (child == null ? void 0 : child.kind) === 285 /* JsxElement */ && !tagNamesAreEquivalent(child.openingElement.tagName, child.closingElement.tagName) && tagNamesAreEquivalent(openingTag.tagName, child.closingElement.tagName)) { + break; + } + } + parsingContext = saveParsingContext; + return createNodeArray(list, listPos); + } + function parseJsxAttributes() { + const pos = getNodePos(); + return finishNode(factory2.createJsxAttributes(parseList(13 /* JsxAttributes */, parseJsxAttribute)), pos); + } + function parseJsxOpeningOrSelfClosingElementOrOpeningFragment(inExpressionContext) { + const pos = getNodePos(); + parseExpected(30 /* LessThanToken */); + if (token() === 32 /* GreaterThanToken */) { + scanJsxText(); + return finishNode(factory2.createJsxOpeningFragment(), pos); + } + const tagName = parseJsxElementName(); + const typeArguments = (contextFlags & 524288 /* JavaScriptFile */) === 0 ? tryParseTypeArguments() : void 0; + const attributes = parseJsxAttributes(); + let node; + if (token() === 32 /* GreaterThanToken */) { + scanJsxText(); + node = factory2.createJsxOpeningElement(tagName, typeArguments, attributes); + } else { + parseExpected(44 /* SlashToken */); + if (parseExpected( + 32 /* GreaterThanToken */, + /*diagnosticMessage*/ + void 0, + /*shouldAdvance*/ + false + )) { + if (inExpressionContext) { + nextToken(); + } else { + scanJsxText(); + } + } + node = factory2.createJsxSelfClosingElement(tagName, typeArguments, attributes); + } + return finishNode(node, pos); + } + function parseJsxElementName() { + const pos = getNodePos(); + const initialExpression = parseJsxTagName(); + if (isJsxNamespacedName(initialExpression)) { + return initialExpression; + } + let expression = initialExpression; + while (parseOptional(25 /* DotToken */)) { + expression = finishNode(factoryCreatePropertyAccessExpression(expression, parseRightSideOfDot( + /*allowIdentifierNames*/ + true, + /*allowPrivateIdentifiers*/ + false, + /*allowUnicodeEscapeSequenceInIdentifierName*/ + false + )), pos); + } + return expression; + } + function parseJsxTagName() { + const pos = getNodePos(); + scanJsxIdentifier(); + const isThis2 = token() === 110 /* ThisKeyword */; + const tagName = parseIdentifierNameErrorOnUnicodeEscapeSequence(); + if (parseOptional(59 /* ColonToken */)) { + scanJsxIdentifier(); + return finishNode(factory2.createJsxNamespacedName(tagName, parseIdentifierNameErrorOnUnicodeEscapeSequence()), pos); + } + return isThis2 ? finishNode(factory2.createToken(110 /* ThisKeyword */), pos) : tagName; + } + function parseJsxExpression(inExpressionContext) { + const pos = getNodePos(); + if (!parseExpected(19 /* OpenBraceToken */)) { + return void 0; + } + let dotDotDotToken; + let expression; + if (token() !== 20 /* CloseBraceToken */) { + if (!inExpressionContext) { + dotDotDotToken = parseOptionalToken(26 /* DotDotDotToken */); + } + expression = parseExpression(); + } + if (inExpressionContext) { + parseExpected(20 /* CloseBraceToken */); + } else { + if (parseExpected( + 20 /* CloseBraceToken */, + /*diagnosticMessage*/ + void 0, + /*shouldAdvance*/ + false + )) { + scanJsxText(); + } + } + return finishNode(factory2.createJsxExpression(dotDotDotToken, expression), pos); + } + function parseJsxAttribute() { + if (token() === 19 /* OpenBraceToken */) { + return parseJsxSpreadAttribute(); + } + const pos = getNodePos(); + return finishNode(factory2.createJsxAttribute(parseJsxAttributeName(), parseJsxAttributeValue()), pos); + } + function parseJsxAttributeValue() { + if (token() === 64 /* EqualsToken */) { + if (scanJsxAttributeValue() === 11 /* StringLiteral */) { + return parseLiteralNode(); + } + if (token() === 19 /* OpenBraceToken */) { + return parseJsxExpression( + /*inExpressionContext*/ + true + ); + } + if (token() === 30 /* LessThanToken */) { + return parseJsxElementOrSelfClosingElementOrFragment( + /*inExpressionContext*/ + true + ); + } + parseErrorAtCurrentToken(Diagnostics.or_JSX_element_expected); + } + return void 0; + } + function parseJsxAttributeName() { + const pos = getNodePos(); + scanJsxIdentifier(); + const attrName = parseIdentifierNameErrorOnUnicodeEscapeSequence(); + if (parseOptional(59 /* ColonToken */)) { + scanJsxIdentifier(); + return finishNode(factory2.createJsxNamespacedName(attrName, parseIdentifierNameErrorOnUnicodeEscapeSequence()), pos); + } + return attrName; + } + function parseJsxSpreadAttribute() { + const pos = getNodePos(); + parseExpected(19 /* OpenBraceToken */); + parseExpected(26 /* DotDotDotToken */); + const expression = parseExpression(); + parseExpected(20 /* CloseBraceToken */); + return finishNode(factory2.createJsxSpreadAttribute(expression), pos); + } + function parseJsxClosingElement(open, inExpressionContext) { + const pos = getNodePos(); + parseExpected(31 /* LessThanSlashToken */); + const tagName = parseJsxElementName(); + if (parseExpected( + 32 /* GreaterThanToken */, + /*diagnosticMessage*/ + void 0, + /*shouldAdvance*/ + false + )) { + if (inExpressionContext || !tagNamesAreEquivalent(open.tagName, tagName)) { + nextToken(); + } else { + scanJsxText(); + } + } + return finishNode(factory2.createJsxClosingElement(tagName), pos); + } + function parseJsxClosingFragment(inExpressionContext) { + const pos = getNodePos(); + parseExpected(31 /* LessThanSlashToken */); + if (parseExpected( + 32 /* GreaterThanToken */, + Diagnostics.Expected_corresponding_closing_tag_for_JSX_fragment, + /*shouldAdvance*/ + false + )) { + if (inExpressionContext) { + nextToken(); + } else { + scanJsxText(); + } + } + return finishNode(factory2.createJsxJsxClosingFragment(), pos); + } + function parseTypeAssertion() { + Debug.assert(languageVariant !== 1 /* JSX */, "Type assertions should never be parsed in JSX; they should be parsed as comparisons or JSX elements/fragments."); + const pos = getNodePos(); + parseExpected(30 /* LessThanToken */); + const type = parseType(); + parseExpected(32 /* GreaterThanToken */); + const expression = parseSimpleUnaryExpression(); + return finishNode(factory2.createTypeAssertion(type, expression), pos); + } + function nextTokenIsIdentifierOrKeywordOrOpenBracketOrTemplate() { + nextToken(); + return tokenIsIdentifierOrKeyword(token()) || token() === 23 /* OpenBracketToken */ || isTemplateStartOfTaggedTemplate(); + } + function isStartOfOptionalPropertyOrElementAccessChain() { + return token() === 29 /* QuestionDotToken */ && lookAhead(nextTokenIsIdentifierOrKeywordOrOpenBracketOrTemplate); + } + function tryReparseOptionalChain(node) { + if (node.flags & 64 /* OptionalChain */) { + return true; + } + if (isNonNullExpression(node)) { + let expr = node.expression; + while (isNonNullExpression(expr) && !(expr.flags & 64 /* OptionalChain */)) { + expr = expr.expression; + } + if (expr.flags & 64 /* OptionalChain */) { + while (isNonNullExpression(node)) { + node.flags |= 64 /* OptionalChain */; + node = node.expression; + } + return true; + } + } + return false; + } + function parsePropertyAccessExpressionRest(pos, expression, questionDotToken) { + const name = parseRightSideOfDot( + /*allowIdentifierNames*/ + true, + /*allowPrivateIdentifiers*/ + true, + /*allowUnicodeEscapeSequenceInIdentifierName*/ + true + ); + const isOptionalChain2 = questionDotToken || tryReparseOptionalChain(expression); + const propertyAccess = isOptionalChain2 ? factoryCreatePropertyAccessChain(expression, questionDotToken, name) : factoryCreatePropertyAccessExpression(expression, name); + if (isOptionalChain2 && isPrivateIdentifier(propertyAccess.name)) { + parseErrorAtRange(propertyAccess.name, Diagnostics.An_optional_chain_cannot_contain_private_identifiers); + } + if (isExpressionWithTypeArguments(expression) && expression.typeArguments) { + const pos2 = expression.typeArguments.pos - 1; + const end = skipTrivia(sourceText, expression.typeArguments.end) + 1; + parseErrorAt(pos2, end, Diagnostics.An_instantiation_expression_cannot_be_followed_by_a_property_access); + } + return finishNode(propertyAccess, pos); + } + function parseElementAccessExpressionRest(pos, expression, questionDotToken) { + let argumentExpression; + if (token() === 24 /* CloseBracketToken */) { + argumentExpression = createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.An_element_access_expression_should_take_an_argument + ); + } else { + const argument = allowInAnd(parseExpression); + if (isStringOrNumericLiteralLike(argument)) { + argument.text = internIdentifier(argument.text); + } + argumentExpression = argument; + } + parseExpected(24 /* CloseBracketToken */); + const indexedAccess = questionDotToken || tryReparseOptionalChain(expression) ? factoryCreateElementAccessChain(expression, questionDotToken, argumentExpression) : factoryCreateElementAccessExpression(expression, argumentExpression); + return finishNode(indexedAccess, pos); + } + function parseMemberExpressionRest(pos, expression, allowOptionalChain) { + while (true) { + let questionDotToken; + let isPropertyAccess = false; + if (allowOptionalChain && isStartOfOptionalPropertyOrElementAccessChain()) { + questionDotToken = parseExpectedToken(29 /* QuestionDotToken */); + isPropertyAccess = tokenIsIdentifierOrKeyword(token()); + } else { + isPropertyAccess = parseOptional(25 /* DotToken */); + } + if (isPropertyAccess) { + expression = parsePropertyAccessExpressionRest(pos, expression, questionDotToken); + continue; + } + if ((questionDotToken || !inDecoratorContext()) && parseOptional(23 /* OpenBracketToken */)) { + expression = parseElementAccessExpressionRest(pos, expression, questionDotToken); + continue; + } + if (isTemplateStartOfTaggedTemplate()) { + expression = !questionDotToken && expression.kind === 234 /* ExpressionWithTypeArguments */ ? parseTaggedTemplateRest(pos, expression.expression, questionDotToken, expression.typeArguments) : parseTaggedTemplateRest( + pos, + expression, + questionDotToken, + /*typeArguments*/ + void 0 + ); + continue; + } + if (!questionDotToken) { + if (token() === 54 /* ExclamationToken */ && !scanner2.hasPrecedingLineBreak()) { + nextToken(); + expression = finishNode(factory2.createNonNullExpression(expression), pos); + continue; + } + const typeArguments = tryParse(parseTypeArgumentsInExpression); + if (typeArguments) { + expression = finishNode(factory2.createExpressionWithTypeArguments(expression, typeArguments), pos); + continue; + } + } + return expression; + } + } + function isTemplateStartOfTaggedTemplate() { + return token() === 15 /* NoSubstitutionTemplateLiteral */ || token() === 16 /* TemplateHead */; + } + function parseTaggedTemplateRest(pos, tag, questionDotToken, typeArguments) { + const tagExpression = factory2.createTaggedTemplateExpression( + tag, + typeArguments, + token() === 15 /* NoSubstitutionTemplateLiteral */ ? (reScanTemplateToken( + /*isTaggedTemplate*/ + true + ), parseLiteralNode()) : parseTemplateExpression( + /*isTaggedTemplate*/ + true + ) + ); + if (questionDotToken || tag.flags & 64 /* OptionalChain */) { + tagExpression.flags |= 64 /* OptionalChain */; + } + tagExpression.questionDotToken = questionDotToken; + return finishNode(tagExpression, pos); + } + function parseCallExpressionRest(pos, expression) { + while (true) { + expression = parseMemberExpressionRest( + pos, + expression, + /*allowOptionalChain*/ + true + ); + let typeArguments; + const questionDotToken = parseOptionalToken(29 /* QuestionDotToken */); + if (questionDotToken) { + typeArguments = tryParse(parseTypeArgumentsInExpression); + if (isTemplateStartOfTaggedTemplate()) { + expression = parseTaggedTemplateRest(pos, expression, questionDotToken, typeArguments); + continue; + } + } + if (typeArguments || token() === 21 /* OpenParenToken */) { + if (!questionDotToken && expression.kind === 234 /* ExpressionWithTypeArguments */) { + typeArguments = expression.typeArguments; + expression = expression.expression; + } + const argumentList = parseArgumentList(); + const callExpr = questionDotToken || tryReparseOptionalChain(expression) ? factoryCreateCallChain(expression, questionDotToken, typeArguments, argumentList) : factoryCreateCallExpression(expression, typeArguments, argumentList); + expression = finishNode(callExpr, pos); + continue; + } + if (questionDotToken) { + const name = createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + false, + Diagnostics.Identifier_expected + ); + expression = finishNode(factoryCreatePropertyAccessChain(expression, questionDotToken, name), pos); + } + break; + } + return expression; + } + function parseArgumentList() { + parseExpected(21 /* OpenParenToken */); + const result = parseDelimitedList(11 /* ArgumentExpressions */, parseArgumentExpression); + parseExpected(22 /* CloseParenToken */); + return result; + } + function parseTypeArgumentsInExpression() { + if ((contextFlags & 524288 /* JavaScriptFile */) !== 0) { + return void 0; + } + if (reScanLessThanToken() !== 30 /* LessThanToken */) { + return void 0; + } + nextToken(); + const typeArguments = parseDelimitedList(20 /* TypeArguments */, parseType); + if (reScanGreaterToken() !== 32 /* GreaterThanToken */) { + return void 0; + } + nextToken(); + return typeArguments && canFollowTypeArgumentsInExpression() ? typeArguments : void 0; + } + function canFollowTypeArgumentsInExpression() { + switch (token()) { + // These tokens can follow a type argument list in a call expression. + case 21 /* OpenParenToken */: + // foo( + case 15 /* NoSubstitutionTemplateLiteral */: + // foo `...` + case 16 /* TemplateHead */: + return true; + // A type argument list followed by `<` never makes sense, and a type argument list followed + // by `>` is ambiguous with a (re-scanned) `>>` operator, so we disqualify both. Also, in + // this context, `+` and `-` are unary operators, not binary operators. + case 30 /* LessThanToken */: + case 32 /* GreaterThanToken */: + case 40 /* PlusToken */: + case 41 /* MinusToken */: + return false; + } + return scanner2.hasPrecedingLineBreak() || isBinaryOperator2() || !isStartOfExpression(); + } + function parsePrimaryExpression() { + switch (token()) { + case 15 /* NoSubstitutionTemplateLiteral */: + if (scanner2.getTokenFlags() & 26656 /* IsInvalid */) { + reScanTemplateToken( + /*isTaggedTemplate*/ + false + ); + } + // falls through + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 11 /* StringLiteral */: + return parseLiteralNode(); + case 110 /* ThisKeyword */: + case 108 /* SuperKeyword */: + case 106 /* NullKeyword */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + return parseTokenNode(); + case 21 /* OpenParenToken */: + return parseParenthesizedExpression(); + case 23 /* OpenBracketToken */: + return parseArrayLiteralExpression(); + case 19 /* OpenBraceToken */: + return parseObjectLiteralExpression(); + case 134 /* AsyncKeyword */: + if (!lookAhead(nextTokenIsFunctionKeywordOnSameLine)) { + break; + } + return parseFunctionExpression(); + case 60 /* AtToken */: + return parseDecoratedExpression(); + case 86 /* ClassKeyword */: + return parseClassExpression(); + case 100 /* FunctionKeyword */: + return parseFunctionExpression(); + case 105 /* NewKeyword */: + return parseNewExpressionOrNewDotTarget(); + case 44 /* SlashToken */: + case 69 /* SlashEqualsToken */: + if (reScanSlashToken() === 14 /* RegularExpressionLiteral */) { + return parseLiteralNode(); + } + break; + case 16 /* TemplateHead */: + return parseTemplateExpression( + /*isTaggedTemplate*/ + false + ); + case 81 /* PrivateIdentifier */: + return parsePrivateIdentifier(); + } + return parseIdentifier(Diagnostics.Expression_expected); + } + function parseParenthesizedExpression() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(21 /* OpenParenToken */); + const expression = allowInAnd(parseExpression); + parseExpected(22 /* CloseParenToken */); + return withJSDoc(finishNode(factoryCreateParenthesizedExpression(expression), pos), hasJSDoc); + } + function parseSpreadElement() { + const pos = getNodePos(); + parseExpected(26 /* DotDotDotToken */); + const expression = parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ); + return finishNode(factory2.createSpreadElement(expression), pos); + } + function parseArgumentOrArrayLiteralElement() { + return token() === 26 /* DotDotDotToken */ ? parseSpreadElement() : token() === 28 /* CommaToken */ ? finishNode(factory2.createOmittedExpression(), getNodePos()) : parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ); + } + function parseArgumentExpression() { + return doOutsideOfContext(disallowInAndDecoratorContext, parseArgumentOrArrayLiteralElement); + } + function parseArrayLiteralExpression() { + const pos = getNodePos(); + const openBracketPosition = scanner2.getTokenStart(); + const openBracketParsed = parseExpected(23 /* OpenBracketToken */); + const multiLine = scanner2.hasPrecedingLineBreak(); + const elements = parseDelimitedList(15 /* ArrayLiteralMembers */, parseArgumentOrArrayLiteralElement); + parseExpectedMatchingBrackets(23 /* OpenBracketToken */, 24 /* CloseBracketToken */, openBracketParsed, openBracketPosition); + return finishNode(factoryCreateArrayLiteralExpression(elements, multiLine), pos); + } + function parseObjectLiteralElement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + if (parseOptionalToken(26 /* DotDotDotToken */)) { + const expression = parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ); + return withJSDoc(finishNode(factory2.createSpreadAssignment(expression), pos), hasJSDoc); + } + const modifiers = parseModifiers( + /*allowDecorators*/ + true + ); + if (parseContextualModifier(139 /* GetKeyword */)) { + return parseAccessorDeclaration(pos, hasJSDoc, modifiers, 178 /* GetAccessor */, 0 /* None */); + } + if (parseContextualModifier(153 /* SetKeyword */)) { + return parseAccessorDeclaration(pos, hasJSDoc, modifiers, 179 /* SetAccessor */, 0 /* None */); + } + const asteriskToken = parseOptionalToken(42 /* AsteriskToken */); + const tokenIsIdentifier = isIdentifier2(); + const name = parsePropertyName(); + const questionToken = parseOptionalToken(58 /* QuestionToken */); + const exclamationToken = parseOptionalToken(54 /* ExclamationToken */); + if (asteriskToken || token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */) { + return parseMethodDeclaration(pos, hasJSDoc, modifiers, asteriskToken, name, questionToken, exclamationToken); + } + let node; + const isShorthandPropertyAssignment2 = tokenIsIdentifier && token() !== 59 /* ColonToken */; + if (isShorthandPropertyAssignment2) { + const equalsToken = parseOptionalToken(64 /* EqualsToken */); + const objectAssignmentInitializer = equalsToken ? allowInAnd(() => parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + )) : void 0; + node = factory2.createShorthandPropertyAssignment(name, objectAssignmentInitializer); + node.equalsToken = equalsToken; + } else { + parseExpected(59 /* ColonToken */); + const initializer = allowInAnd(() => parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + )); + node = factory2.createPropertyAssignment(name, initializer); + } + node.modifiers = modifiers; + node.questionToken = questionToken; + node.exclamationToken = exclamationToken; + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseObjectLiteralExpression() { + const pos = getNodePos(); + const openBracePosition = scanner2.getTokenStart(); + const openBraceParsed = parseExpected(19 /* OpenBraceToken */); + const multiLine = scanner2.hasPrecedingLineBreak(); + const properties = parseDelimitedList( + 12 /* ObjectLiteralMembers */, + parseObjectLiteralElement, + /*considerSemicolonAsDelimiter*/ + true + ); + parseExpectedMatchingBrackets(19 /* OpenBraceToken */, 20 /* CloseBraceToken */, openBraceParsed, openBracePosition); + return finishNode(factoryCreateObjectLiteralExpression(properties, multiLine), pos); + } + function parseFunctionExpression() { + const savedDecoratorContext = inDecoratorContext(); + setDecoratorContext( + /*val*/ + false + ); + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = parseModifiers( + /*allowDecorators*/ + false + ); + parseExpected(100 /* FunctionKeyword */); + const asteriskToken = parseOptionalToken(42 /* AsteriskToken */); + const isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */; + const isAsync = some(modifiers, isAsyncModifier) ? 2 /* Await */ : 0 /* None */; + const name = isGenerator && isAsync ? doInYieldAndAwaitContext(parseOptionalBindingIdentifier) : isGenerator ? doInYieldContext(parseOptionalBindingIdentifier) : isAsync ? doInAwaitContext(parseOptionalBindingIdentifier) : parseOptionalBindingIdentifier(); + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(isGenerator | isAsync); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + const body = parseFunctionBlock(isGenerator | isAsync); + setDecoratorContext(savedDecoratorContext); + const node = factory2.createFunctionExpression(modifiers, asteriskToken, name, typeParameters, parameters, type, body); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseOptionalBindingIdentifier() { + return isBindingIdentifier() ? parseBindingIdentifier() : void 0; + } + function parseNewExpressionOrNewDotTarget() { + const pos = getNodePos(); + parseExpected(105 /* NewKeyword */); + if (parseOptional(25 /* DotToken */)) { + const name = parseIdentifierName(); + return finishNode(factory2.createMetaProperty(105 /* NewKeyword */, name), pos); + } + const expressionPos = getNodePos(); + let expression = parseMemberExpressionRest( + expressionPos, + parsePrimaryExpression(), + /*allowOptionalChain*/ + false + ); + let typeArguments; + if (expression.kind === 234 /* ExpressionWithTypeArguments */) { + typeArguments = expression.typeArguments; + expression = expression.expression; + } + if (token() === 29 /* QuestionDotToken */) { + parseErrorAtCurrentToken(Diagnostics.Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0, getTextOfNodeFromSourceText(sourceText, expression)); + } + const argumentList = token() === 21 /* OpenParenToken */ ? parseArgumentList() : void 0; + return finishNode(factoryCreateNewExpression(expression, typeArguments, argumentList), pos); + } + function parseBlock(ignoreMissingOpenBrace, diagnosticMessage) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const openBracePosition = scanner2.getTokenStart(); + const openBraceParsed = parseExpected(19 /* OpenBraceToken */, diagnosticMessage); + if (openBraceParsed || ignoreMissingOpenBrace) { + const multiLine = scanner2.hasPrecedingLineBreak(); + const statements = parseList(1 /* BlockStatements */, parseStatement); + parseExpectedMatchingBrackets(19 /* OpenBraceToken */, 20 /* CloseBraceToken */, openBraceParsed, openBracePosition); + const result = withJSDoc(finishNode(factoryCreateBlock(statements, multiLine), pos), hasJSDoc); + if (token() === 64 /* EqualsToken */) { + parseErrorAtCurrentToken(Diagnostics.Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_destructuring_assignment_you_might_need_to_wrap_the_whole_assignment_in_parentheses); + nextToken(); + } + return result; + } else { + const statements = createMissingList(); + return withJSDoc(finishNode(factoryCreateBlock( + statements, + /*multiLine*/ + void 0 + ), pos), hasJSDoc); + } + } + function parseFunctionBlock(flags, diagnosticMessage) { + const savedYieldContext = inYieldContext(); + setYieldContext(!!(flags & 1 /* Yield */)); + const savedAwaitContext = inAwaitContext(); + setAwaitContext(!!(flags & 2 /* Await */)); + const savedTopLevel = topLevel; + topLevel = false; + const saveDecoratorContext = inDecoratorContext(); + if (saveDecoratorContext) { + setDecoratorContext( + /*val*/ + false + ); + } + const block = parseBlock(!!(flags & 16 /* IgnoreMissingOpenBrace */), diagnosticMessage); + if (saveDecoratorContext) { + setDecoratorContext( + /*val*/ + true + ); + } + topLevel = savedTopLevel; + setYieldContext(savedYieldContext); + setAwaitContext(savedAwaitContext); + return block; + } + function parseEmptyStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(27 /* SemicolonToken */); + return withJSDoc(finishNode(factory2.createEmptyStatement(), pos), hasJSDoc); + } + function parseIfStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(101 /* IfKeyword */); + const openParenPosition = scanner2.getTokenStart(); + const openParenParsed = parseExpected(21 /* OpenParenToken */); + const expression = allowInAnd(parseExpression); + parseExpectedMatchingBrackets(21 /* OpenParenToken */, 22 /* CloseParenToken */, openParenParsed, openParenPosition); + const thenStatement = parseStatement(); + const elseStatement = parseOptional(93 /* ElseKeyword */) ? parseStatement() : void 0; + return withJSDoc(finishNode(factoryCreateIfStatement(expression, thenStatement, elseStatement), pos), hasJSDoc); + } + function parseDoStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(92 /* DoKeyword */); + const statement = parseStatement(); + parseExpected(117 /* WhileKeyword */); + const openParenPosition = scanner2.getTokenStart(); + const openParenParsed = parseExpected(21 /* OpenParenToken */); + const expression = allowInAnd(parseExpression); + parseExpectedMatchingBrackets(21 /* OpenParenToken */, 22 /* CloseParenToken */, openParenParsed, openParenPosition); + parseOptional(27 /* SemicolonToken */); + return withJSDoc(finishNode(factory2.createDoStatement(statement, expression), pos), hasJSDoc); + } + function parseWhileStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(117 /* WhileKeyword */); + const openParenPosition = scanner2.getTokenStart(); + const openParenParsed = parseExpected(21 /* OpenParenToken */); + const expression = allowInAnd(parseExpression); + parseExpectedMatchingBrackets(21 /* OpenParenToken */, 22 /* CloseParenToken */, openParenParsed, openParenPosition); + const statement = parseStatement(); + return withJSDoc(finishNode(factoryCreateWhileStatement(expression, statement), pos), hasJSDoc); + } + function parseForOrForInOrForOfStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(99 /* ForKeyword */); + const awaitToken = parseOptionalToken(135 /* AwaitKeyword */); + parseExpected(21 /* OpenParenToken */); + let initializer; + if (token() !== 27 /* SemicolonToken */) { + if (token() === 115 /* VarKeyword */ || token() === 121 /* LetKeyword */ || token() === 87 /* ConstKeyword */ || token() === 160 /* UsingKeyword */ && lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLineDisallowOf) || // this one is meant to allow of + token() === 135 /* AwaitKeyword */ && lookAhead(nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine)) { + initializer = parseVariableDeclarationList( + /*inForStatementInitializer*/ + true + ); + } else { + initializer = disallowInAnd(parseExpression); + } + } + let node; + if (awaitToken ? parseExpected(165 /* OfKeyword */) : parseOptional(165 /* OfKeyword */)) { + const expression = allowInAnd(() => parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + )); + parseExpected(22 /* CloseParenToken */); + node = factoryCreateForOfStatement(awaitToken, initializer, expression, parseStatement()); + } else if (parseOptional(103 /* InKeyword */)) { + const expression = allowInAnd(parseExpression); + parseExpected(22 /* CloseParenToken */); + node = factory2.createForInStatement(initializer, expression, parseStatement()); + } else { + parseExpected(27 /* SemicolonToken */); + const condition = token() !== 27 /* SemicolonToken */ && token() !== 22 /* CloseParenToken */ ? allowInAnd(parseExpression) : void 0; + parseExpected(27 /* SemicolonToken */); + const incrementor = token() !== 22 /* CloseParenToken */ ? allowInAnd(parseExpression) : void 0; + parseExpected(22 /* CloseParenToken */); + node = factoryCreateForStatement(initializer, condition, incrementor, parseStatement()); + } + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseBreakOrContinueStatement(kind) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(kind === 253 /* BreakStatement */ ? 83 /* BreakKeyword */ : 88 /* ContinueKeyword */); + const label = canParseSemicolon() ? void 0 : parseIdentifier(); + parseSemicolon(); + const node = kind === 253 /* BreakStatement */ ? factory2.createBreakStatement(label) : factory2.createContinueStatement(label); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseReturnStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(107 /* ReturnKeyword */); + const expression = canParseSemicolon() ? void 0 : allowInAnd(parseExpression); + parseSemicolon(); + return withJSDoc(finishNode(factory2.createReturnStatement(expression), pos), hasJSDoc); + } + function parseWithStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(118 /* WithKeyword */); + const openParenPosition = scanner2.getTokenStart(); + const openParenParsed = parseExpected(21 /* OpenParenToken */); + const expression = allowInAnd(parseExpression); + parseExpectedMatchingBrackets(21 /* OpenParenToken */, 22 /* CloseParenToken */, openParenParsed, openParenPosition); + const statement = doInsideOfContext(67108864 /* InWithStatement */, parseStatement); + return withJSDoc(finishNode(factory2.createWithStatement(expression, statement), pos), hasJSDoc); + } + function parseCaseClause() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(84 /* CaseKeyword */); + const expression = allowInAnd(parseExpression); + parseExpected(59 /* ColonToken */); + const statements = parseList(3 /* SwitchClauseStatements */, parseStatement); + return withJSDoc(finishNode(factory2.createCaseClause(expression, statements), pos), hasJSDoc); + } + function parseDefaultClause() { + const pos = getNodePos(); + parseExpected(90 /* DefaultKeyword */); + parseExpected(59 /* ColonToken */); + const statements = parseList(3 /* SwitchClauseStatements */, parseStatement); + return finishNode(factory2.createDefaultClause(statements), pos); + } + function parseCaseOrDefaultClause() { + return token() === 84 /* CaseKeyword */ ? parseCaseClause() : parseDefaultClause(); + } + function parseCaseBlock() { + const pos = getNodePos(); + parseExpected(19 /* OpenBraceToken */); + const clauses = parseList(2 /* SwitchClauses */, parseCaseOrDefaultClause); + parseExpected(20 /* CloseBraceToken */); + return finishNode(factory2.createCaseBlock(clauses), pos); + } + function parseSwitchStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(109 /* SwitchKeyword */); + parseExpected(21 /* OpenParenToken */); + const expression = allowInAnd(parseExpression); + parseExpected(22 /* CloseParenToken */); + const caseBlock = parseCaseBlock(); + return withJSDoc(finishNode(factory2.createSwitchStatement(expression, caseBlock), pos), hasJSDoc); + } + function parseThrowStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(111 /* ThrowKeyword */); + let expression = scanner2.hasPrecedingLineBreak() ? void 0 : allowInAnd(parseExpression); + if (expression === void 0) { + identifierCount++; + expression = finishNode(factoryCreateIdentifier(""), getNodePos()); + } + if (!tryParseSemicolon()) { + parseErrorForMissingSemicolonAfter(expression); + } + return withJSDoc(finishNode(factory2.createThrowStatement(expression), pos), hasJSDoc); + } + function parseTryStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(113 /* TryKeyword */); + const tryBlock = parseBlock( + /*ignoreMissingOpenBrace*/ + false + ); + const catchClause = token() === 85 /* CatchKeyword */ ? parseCatchClause() : void 0; + let finallyBlock; + if (!catchClause || token() === 98 /* FinallyKeyword */) { + parseExpected(98 /* FinallyKeyword */, Diagnostics.catch_or_finally_expected); + finallyBlock = parseBlock( + /*ignoreMissingOpenBrace*/ + false + ); + } + return withJSDoc(finishNode(factory2.createTryStatement(tryBlock, catchClause, finallyBlock), pos), hasJSDoc); + } + function parseCatchClause() { + const pos = getNodePos(); + parseExpected(85 /* CatchKeyword */); + let variableDeclaration; + if (parseOptional(21 /* OpenParenToken */)) { + variableDeclaration = parseVariableDeclaration(); + parseExpected(22 /* CloseParenToken */); + } else { + variableDeclaration = void 0; + } + const block = parseBlock( + /*ignoreMissingOpenBrace*/ + false + ); + return finishNode(factory2.createCatchClause(variableDeclaration, block), pos); + } + function parseDebuggerStatement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + parseExpected(89 /* DebuggerKeyword */); + parseSemicolon(); + return withJSDoc(finishNode(factory2.createDebuggerStatement(), pos), hasJSDoc); + } + function parseExpressionOrLabeledStatement() { + const pos = getNodePos(); + let hasJSDoc = hasPrecedingJSDocComment(); + let node; + const hasParen = token() === 21 /* OpenParenToken */; + const expression = allowInAnd(parseExpression); + if (isIdentifier(expression) && parseOptional(59 /* ColonToken */)) { + node = factory2.createLabeledStatement(expression, parseStatement()); + } else { + if (!tryParseSemicolon()) { + parseErrorForMissingSemicolonAfter(expression); + } + node = factoryCreateExpressionStatement(expression); + if (hasParen) { + hasJSDoc = false; + } + } + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function nextTokenIsIdentifierOrKeywordOnSameLine() { + nextToken(); + return tokenIsIdentifierOrKeyword(token()) && !scanner2.hasPrecedingLineBreak(); + } + function nextTokenIsClassKeywordOnSameLine() { + nextToken(); + return token() === 86 /* ClassKeyword */ && !scanner2.hasPrecedingLineBreak(); + } + function nextTokenIsFunctionKeywordOnSameLine() { + nextToken(); + return token() === 100 /* FunctionKeyword */ && !scanner2.hasPrecedingLineBreak(); + } + function nextTokenIsIdentifierOrKeywordOrLiteralOnSameLine() { + nextToken(); + return (tokenIsIdentifierOrKeyword(token()) || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */ || token() === 11 /* StringLiteral */) && !scanner2.hasPrecedingLineBreak(); + } + function isDeclaration2() { + while (true) { + switch (token()) { + case 115 /* VarKeyword */: + case 121 /* LetKeyword */: + case 87 /* ConstKeyword */: + case 100 /* FunctionKeyword */: + case 86 /* ClassKeyword */: + case 94 /* EnumKeyword */: + return true; + case 160 /* UsingKeyword */: + return isUsingDeclaration(); + case 135 /* AwaitKeyword */: + return isAwaitUsingDeclaration(); + // 'declare', 'module', 'namespace', 'interface'* and 'type' are all legal JavaScript identifiers; + // however, an identifier cannot be followed by another identifier on the same line. This is what we + // count on to parse out the respective declarations. For instance, we exploit this to say that + // + // namespace n + // + // can be none other than the beginning of a namespace declaration, but need to respect that JavaScript sees + // + // namespace + // n + // + // as the identifier 'namespace' on one line followed by the identifier 'n' on another. + // We need to look one token ahead to see if it permissible to try parsing a declaration. + // + // *Note*: 'interface' is actually a strict mode reserved word. So while + // + // "use strict" + // interface + // I {} + // + // could be legal, it would add complexity for very little gain. + case 120 /* InterfaceKeyword */: + case 156 /* TypeKeyword */: + case 166 /* DeferKeyword */: + return nextTokenIsIdentifierOnSameLine(); + case 144 /* ModuleKeyword */: + case 145 /* NamespaceKeyword */: + return nextTokenIsIdentifierOrStringLiteralOnSameLine(); + case 128 /* AbstractKeyword */: + case 129 /* AccessorKeyword */: + case 134 /* AsyncKeyword */: + case 138 /* DeclareKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 125 /* PublicKeyword */: + case 148 /* ReadonlyKeyword */: + const previousToken = token(); + nextToken(); + if (scanner2.hasPrecedingLineBreak()) { + return false; + } + if (previousToken === 138 /* DeclareKeyword */ && token() === 156 /* TypeKeyword */) { + return true; + } + continue; + case 162 /* GlobalKeyword */: + nextToken(); + return token() === 19 /* OpenBraceToken */ || token() === 80 /* Identifier */ || token() === 95 /* ExportKeyword */; + case 102 /* ImportKeyword */: + nextToken(); + return token() === 166 /* DeferKeyword */ || token() === 11 /* StringLiteral */ || token() === 42 /* AsteriskToken */ || token() === 19 /* OpenBraceToken */ || tokenIsIdentifierOrKeyword(token()); + case 95 /* ExportKeyword */: + let currentToken2 = nextToken(); + if (currentToken2 === 156 /* TypeKeyword */) { + currentToken2 = lookAhead(nextToken); + } + if (currentToken2 === 64 /* EqualsToken */ || currentToken2 === 42 /* AsteriskToken */ || currentToken2 === 19 /* OpenBraceToken */ || currentToken2 === 90 /* DefaultKeyword */ || currentToken2 === 130 /* AsKeyword */ || currentToken2 === 60 /* AtToken */) { + return true; + } + continue; + case 126 /* StaticKeyword */: + nextToken(); + continue; + default: + return false; + } + } + } + function isStartOfDeclaration() { + return lookAhead(isDeclaration2); + } + function isStartOfStatement() { + switch (token()) { + case 60 /* AtToken */: + case 27 /* SemicolonToken */: + case 19 /* OpenBraceToken */: + case 115 /* VarKeyword */: + case 121 /* LetKeyword */: + case 160 /* UsingKeyword */: + case 100 /* FunctionKeyword */: + case 86 /* ClassKeyword */: + case 94 /* EnumKeyword */: + case 101 /* IfKeyword */: + case 92 /* DoKeyword */: + case 117 /* WhileKeyword */: + case 99 /* ForKeyword */: + case 88 /* ContinueKeyword */: + case 83 /* BreakKeyword */: + case 107 /* ReturnKeyword */: + case 118 /* WithKeyword */: + case 109 /* SwitchKeyword */: + case 111 /* ThrowKeyword */: + case 113 /* TryKeyword */: + case 89 /* DebuggerKeyword */: + // 'catch' and 'finally' do not actually indicate that the code is part of a statement, + // however, we say they are here so that we may gracefully parse them and error later. + // falls through + case 85 /* CatchKeyword */: + case 98 /* FinallyKeyword */: + return true; + case 102 /* ImportKeyword */: + return isStartOfDeclaration() || lookAhead(nextTokenIsOpenParenOrLessThanOrDot); + case 87 /* ConstKeyword */: + case 95 /* ExportKeyword */: + return isStartOfDeclaration(); + case 134 /* AsyncKeyword */: + case 138 /* DeclareKeyword */: + case 120 /* InterfaceKeyword */: + case 144 /* ModuleKeyword */: + case 145 /* NamespaceKeyword */: + case 156 /* TypeKeyword */: + case 162 /* GlobalKeyword */: + case 166 /* DeferKeyword */: + return true; + case 129 /* AccessorKeyword */: + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 126 /* StaticKeyword */: + case 148 /* ReadonlyKeyword */: + return isStartOfDeclaration() || !lookAhead(nextTokenIsIdentifierOrKeywordOnSameLine); + default: + return isStartOfExpression(); + } + } + function nextTokenIsBindingIdentifierOrStartOfDestructuring() { + nextToken(); + return isBindingIdentifier() || token() === 19 /* OpenBraceToken */ || token() === 23 /* OpenBracketToken */; + } + function isLetDeclaration() { + return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuring); + } + function nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLineDisallowOf() { + return nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine( + /*disallowOf*/ + true + ); + } + function nextTokenIsEqualsOrSemicolonOrColonToken() { + nextToken(); + return token() === 64 /* EqualsToken */ || token() === 27 /* SemicolonToken */ || token() === 59 /* ColonToken */; + } + function nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine(disallowOf) { + nextToken(); + if (disallowOf && token() === 165 /* OfKeyword */) { + return lookAhead(nextTokenIsEqualsOrSemicolonOrColonToken); + } + return (isBindingIdentifier() || token() === 19 /* OpenBraceToken */) && !scanner2.hasPrecedingLineBreak(); + } + function isUsingDeclaration() { + return lookAhead(nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine); + } + function nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine(disallowOf) { + if (nextToken() === 160 /* UsingKeyword */) { + return nextTokenIsBindingIdentifierOrStartOfDestructuringOnSameLine(disallowOf); + } + return false; + } + function isAwaitUsingDeclaration() { + return lookAhead(nextTokenIsUsingKeywordThenBindingIdentifierOrStartOfObjectDestructuringOnSameLine); + } + function parseStatement() { + switch (token()) { + case 27 /* SemicolonToken */: + return parseEmptyStatement(); + case 19 /* OpenBraceToken */: + return parseBlock( + /*ignoreMissingOpenBrace*/ + false + ); + case 115 /* VarKeyword */: + return parseVariableStatement( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0 + ); + case 121 /* LetKeyword */: + if (isLetDeclaration()) { + return parseVariableStatement( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0 + ); + } + break; + case 135 /* AwaitKeyword */: + if (isAwaitUsingDeclaration()) { + return parseVariableStatement( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0 + ); + } + break; + case 160 /* UsingKeyword */: + if (isUsingDeclaration()) { + return parseVariableStatement( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0 + ); + } + break; + case 100 /* FunctionKeyword */: + return parseFunctionDeclaration( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0 + ); + case 86 /* ClassKeyword */: + return parseClassDeclaration( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0 + ); + case 101 /* IfKeyword */: + return parseIfStatement(); + case 92 /* DoKeyword */: + return parseDoStatement(); + case 117 /* WhileKeyword */: + return parseWhileStatement(); + case 99 /* ForKeyword */: + return parseForOrForInOrForOfStatement(); + case 88 /* ContinueKeyword */: + return parseBreakOrContinueStatement(252 /* ContinueStatement */); + case 83 /* BreakKeyword */: + return parseBreakOrContinueStatement(253 /* BreakStatement */); + case 107 /* ReturnKeyword */: + return parseReturnStatement(); + case 118 /* WithKeyword */: + return parseWithStatement(); + case 109 /* SwitchKeyword */: + return parseSwitchStatement(); + case 111 /* ThrowKeyword */: + return parseThrowStatement(); + case 113 /* TryKeyword */: + // Include 'catch' and 'finally' for error recovery. + // falls through + case 85 /* CatchKeyword */: + case 98 /* FinallyKeyword */: + return parseTryStatement(); + case 89 /* DebuggerKeyword */: + return parseDebuggerStatement(); + case 60 /* AtToken */: + return parseDeclaration(); + case 134 /* AsyncKeyword */: + case 120 /* InterfaceKeyword */: + case 156 /* TypeKeyword */: + case 144 /* ModuleKeyword */: + case 145 /* NamespaceKeyword */: + case 138 /* DeclareKeyword */: + case 87 /* ConstKeyword */: + case 94 /* EnumKeyword */: + case 95 /* ExportKeyword */: + case 102 /* ImportKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 125 /* PublicKeyword */: + case 128 /* AbstractKeyword */: + case 129 /* AccessorKeyword */: + case 126 /* StaticKeyword */: + case 148 /* ReadonlyKeyword */: + case 162 /* GlobalKeyword */: + if (isStartOfDeclaration()) { + return parseDeclaration(); + } + break; + } + return parseExpressionOrLabeledStatement(); + } + function isDeclareModifier(modifier) { + return modifier.kind === 138 /* DeclareKeyword */; + } + function parseDeclaration() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = parseModifiers( + /*allowDecorators*/ + true + ); + const isAmbient = some(modifiers, isDeclareModifier); + if (isAmbient) { + const node = tryReuseAmbientDeclaration(pos); + if (node) { + return node; + } + for (const m of modifiers) { + m.flags |= 33554432 /* Ambient */; + } + return doInsideOfContext(33554432 /* Ambient */, () => parseDeclarationWorker(pos, hasJSDoc, modifiers)); + } else { + return parseDeclarationWorker(pos, hasJSDoc, modifiers); + } + } + function tryReuseAmbientDeclaration(pos) { + return doInsideOfContext(33554432 /* Ambient */, () => { + const node = currentNode(parsingContext, pos); + if (node) { + return consumeNode(node); + } + }); + } + function parseDeclarationWorker(pos, hasJSDoc, modifiersIn) { + switch (token()) { + case 115 /* VarKeyword */: + case 121 /* LetKeyword */: + case 87 /* ConstKeyword */: + case 160 /* UsingKeyword */: + case 135 /* AwaitKeyword */: + return parseVariableStatement(pos, hasJSDoc, modifiersIn); + case 100 /* FunctionKeyword */: + return parseFunctionDeclaration(pos, hasJSDoc, modifiersIn); + case 86 /* ClassKeyword */: + return parseClassDeclaration(pos, hasJSDoc, modifiersIn); + case 120 /* InterfaceKeyword */: + return parseInterfaceDeclaration(pos, hasJSDoc, modifiersIn); + case 156 /* TypeKeyword */: + return parseTypeAliasDeclaration(pos, hasJSDoc, modifiersIn); + case 94 /* EnumKeyword */: + return parseEnumDeclaration(pos, hasJSDoc, modifiersIn); + case 162 /* GlobalKeyword */: + case 144 /* ModuleKeyword */: + case 145 /* NamespaceKeyword */: + return parseModuleDeclaration(pos, hasJSDoc, modifiersIn); + case 102 /* ImportKeyword */: + return parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, modifiersIn); + case 95 /* ExportKeyword */: + nextToken(); + switch (token()) { + case 90 /* DefaultKeyword */: + case 64 /* EqualsToken */: + return parseExportAssignment(pos, hasJSDoc, modifiersIn); + case 130 /* AsKeyword */: + return parseNamespaceExportDeclaration(pos, hasJSDoc, modifiersIn); + default: + return parseExportDeclaration(pos, hasJSDoc, modifiersIn); + } + default: + if (modifiersIn) { + const missing = createMissingNode( + 283 /* MissingDeclaration */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.Declaration_expected + ); + setTextRangePos(missing, pos); + missing.modifiers = modifiersIn; + return missing; + } + return void 0; + } + } + function nextTokenIsStringLiteral() { + return nextToken() === 11 /* StringLiteral */; + } + function nextTokenIsFromKeywordOrEqualsToken() { + nextToken(); + return token() === 161 /* FromKeyword */ || token() === 64 /* EqualsToken */; + } + function nextTokenIsIdentifierOrStringLiteralOnSameLine() { + nextToken(); + return !scanner2.hasPrecedingLineBreak() && (isIdentifier2() || token() === 11 /* StringLiteral */); + } + function parseFunctionBlockOrSemicolon(flags, diagnosticMessage) { + if (token() !== 19 /* OpenBraceToken */) { + if (flags & 4 /* Type */) { + parseTypeMemberSemicolon(); + return; + } + if (canParseSemicolon()) { + parseSemicolon(); + return; + } + } + return parseFunctionBlock(flags, diagnosticMessage); + } + function parseArrayBindingElement() { + const pos = getNodePos(); + if (token() === 28 /* CommaToken */) { + return finishNode(factory2.createOmittedExpression(), pos); + } + const dotDotDotToken = parseOptionalToken(26 /* DotDotDotToken */); + const name = parseIdentifierOrPattern(); + const initializer = parseInitializer(); + return finishNode(factory2.createBindingElement( + dotDotDotToken, + /*propertyName*/ + void 0, + name, + initializer + ), pos); + } + function parseObjectBindingElement() { + const pos = getNodePos(); + const dotDotDotToken = parseOptionalToken(26 /* DotDotDotToken */); + const tokenIsIdentifier = isBindingIdentifier(); + let propertyName = parsePropertyName(); + let name; + if (tokenIsIdentifier && token() !== 59 /* ColonToken */) { + name = propertyName; + propertyName = void 0; + } else { + parseExpected(59 /* ColonToken */); + name = parseIdentifierOrPattern(); + } + const initializer = parseInitializer(); + return finishNode(factory2.createBindingElement(dotDotDotToken, propertyName, name, initializer), pos); + } + function parseObjectBindingPattern() { + const pos = getNodePos(); + parseExpected(19 /* OpenBraceToken */); + const elements = allowInAnd(() => parseDelimitedList(9 /* ObjectBindingElements */, parseObjectBindingElement)); + parseExpected(20 /* CloseBraceToken */); + return finishNode(factory2.createObjectBindingPattern(elements), pos); + } + function parseArrayBindingPattern() { + const pos = getNodePos(); + parseExpected(23 /* OpenBracketToken */); + const elements = allowInAnd(() => parseDelimitedList(10 /* ArrayBindingElements */, parseArrayBindingElement)); + parseExpected(24 /* CloseBracketToken */); + return finishNode(factory2.createArrayBindingPattern(elements), pos); + } + function isBindingIdentifierOrPrivateIdentifierOrPattern() { + return token() === 19 /* OpenBraceToken */ || token() === 23 /* OpenBracketToken */ || token() === 81 /* PrivateIdentifier */ || isBindingIdentifier(); + } + function parseIdentifierOrPattern(privateIdentifierDiagnosticMessage) { + if (token() === 23 /* OpenBracketToken */) { + return parseArrayBindingPattern(); + } + if (token() === 19 /* OpenBraceToken */) { + return parseObjectBindingPattern(); + } + return parseBindingIdentifier(privateIdentifierDiagnosticMessage); + } + function parseVariableDeclarationAllowExclamation() { + return parseVariableDeclaration( + /*allowExclamation*/ + true + ); + } + function parseVariableDeclaration(allowExclamation) { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const name = parseIdentifierOrPattern(Diagnostics.Private_identifiers_are_not_allowed_in_variable_declarations); + let exclamationToken; + if (allowExclamation && name.kind === 80 /* Identifier */ && token() === 54 /* ExclamationToken */ && !scanner2.hasPrecedingLineBreak()) { + exclamationToken = parseTokenNode(); + } + const type = parseTypeAnnotation(); + const initializer = isInOrOfKeyword(token()) ? void 0 : parseInitializer(); + const node = factoryCreateVariableDeclaration(name, exclamationToken, type, initializer); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseVariableDeclarationList(inForStatementInitializer) { + const pos = getNodePos(); + let flags = 0; + switch (token()) { + case 115 /* VarKeyword */: + break; + case 121 /* LetKeyword */: + flags |= 1 /* Let */; + break; + case 87 /* ConstKeyword */: + flags |= 2 /* Const */; + break; + case 160 /* UsingKeyword */: + flags |= 4 /* Using */; + break; + case 135 /* AwaitKeyword */: + Debug.assert(isAwaitUsingDeclaration()); + flags |= 6 /* AwaitUsing */; + nextToken(); + break; + default: + Debug.fail(); + } + nextToken(); + let declarations; + if (token() === 165 /* OfKeyword */ && lookAhead(canFollowContextualOfKeyword)) { + declarations = createMissingList(); + } else { + const savedDisallowIn = inDisallowInContext(); + setDisallowInContext(inForStatementInitializer); + declarations = parseDelimitedList( + 8 /* VariableDeclarations */, + inForStatementInitializer ? parseVariableDeclaration : parseVariableDeclarationAllowExclamation + ); + setDisallowInContext(savedDisallowIn); + } + return finishNode(factoryCreateVariableDeclarationList(declarations, flags), pos); + } + function canFollowContextualOfKeyword() { + return nextTokenIsIdentifier() && nextToken() === 22 /* CloseParenToken */; + } + function parseVariableStatement(pos, hasJSDoc, modifiers) { + const declarationList = parseVariableDeclarationList( + /*inForStatementInitializer*/ + false + ); + parseSemicolon(); + const node = factoryCreateVariableStatement(modifiers, declarationList); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseFunctionDeclaration(pos, hasJSDoc, modifiers) { + const savedAwaitContext = inAwaitContext(); + const modifierFlags = modifiersToFlags(modifiers); + parseExpected(100 /* FunctionKeyword */); + const asteriskToken = parseOptionalToken(42 /* AsteriskToken */); + const name = modifierFlags & 2048 /* Default */ ? parseOptionalBindingIdentifier() : parseBindingIdentifier(); + const isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */; + const isAsync = modifierFlags & 1024 /* Async */ ? 2 /* Await */ : 0 /* None */; + const typeParameters = parseTypeParameters(); + if (modifierFlags & 32 /* Export */) setAwaitContext( + /*value*/ + true + ); + const parameters = parseParameters(isGenerator | isAsync); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + const body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, Diagnostics.or_expected); + setAwaitContext(savedAwaitContext); + const node = factory2.createFunctionDeclaration(modifiers, asteriskToken, name, typeParameters, parameters, type, body); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseConstructorName() { + if (token() === 137 /* ConstructorKeyword */) { + return parseExpected(137 /* ConstructorKeyword */); + } + if (token() === 11 /* StringLiteral */ && lookAhead(nextToken) === 21 /* OpenParenToken */) { + return tryParse(() => { + const literalNode = parseLiteralNode(); + return literalNode.text === "constructor" ? literalNode : void 0; + }); + } + } + function tryParseConstructorDeclaration(pos, hasJSDoc, modifiers) { + return tryParse(() => { + if (parseConstructorName()) { + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(0 /* None */); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + const body = parseFunctionBlockOrSemicolon(0 /* None */, Diagnostics.or_expected); + const node = factory2.createConstructorDeclaration(modifiers, parameters, body); + node.typeParameters = typeParameters; + node.type = type; + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + }); + } + function parseMethodDeclaration(pos, hasJSDoc, modifiers, asteriskToken, name, questionToken, exclamationToken, diagnosticMessage) { + const isGenerator = asteriskToken ? 1 /* Yield */ : 0 /* None */; + const isAsync = some(modifiers, isAsyncModifier) ? 2 /* Await */ : 0 /* None */; + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(isGenerator | isAsync); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + const body = parseFunctionBlockOrSemicolon(isGenerator | isAsync, diagnosticMessage); + const node = factory2.createMethodDeclaration( + modifiers, + asteriskToken, + name, + questionToken, + typeParameters, + parameters, + type, + body + ); + node.exclamationToken = exclamationToken; + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parsePropertyDeclaration(pos, hasJSDoc, modifiers, name, questionToken) { + const exclamationToken = !questionToken && !scanner2.hasPrecedingLineBreak() ? parseOptionalToken(54 /* ExclamationToken */) : void 0; + const type = parseTypeAnnotation(); + const initializer = doOutsideOfContext(16384 /* YieldContext */ | 65536 /* AwaitContext */ | 8192 /* DisallowInContext */, parseInitializer); + parseSemicolonAfterPropertyName(name, type, initializer); + const node = factory2.createPropertyDeclaration( + modifiers, + name, + questionToken || exclamationToken, + type, + initializer + ); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parsePropertyOrMethodDeclaration(pos, hasJSDoc, modifiers) { + const asteriskToken = parseOptionalToken(42 /* AsteriskToken */); + const name = parsePropertyName(); + const questionToken = parseOptionalToken(58 /* QuestionToken */); + if (asteriskToken || token() === 21 /* OpenParenToken */ || token() === 30 /* LessThanToken */) { + return parseMethodDeclaration( + pos, + hasJSDoc, + modifiers, + asteriskToken, + name, + questionToken, + /*exclamationToken*/ + void 0, + Diagnostics.or_expected + ); + } + return parsePropertyDeclaration(pos, hasJSDoc, modifiers, name, questionToken); + } + function parseAccessorDeclaration(pos, hasJSDoc, modifiers, kind, flags) { + const name = parsePropertyName(); + const typeParameters = parseTypeParameters(); + const parameters = parseParameters(0 /* None */); + const type = parseReturnType( + 59 /* ColonToken */, + /*isType*/ + false + ); + const body = parseFunctionBlockOrSemicolon(flags); + const node = kind === 178 /* GetAccessor */ ? factory2.createGetAccessorDeclaration(modifiers, name, parameters, type, body) : factory2.createSetAccessorDeclaration(modifiers, name, parameters, body); + node.typeParameters = typeParameters; + if (isSetAccessorDeclaration(node)) node.type = type; + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function isClassMemberStart() { + let idToken; + if (token() === 60 /* AtToken */) { + return true; + } + while (isModifierKind(token())) { + idToken = token(); + if (isClassMemberModifier(idToken)) { + return true; + } + nextToken(); + } + if (token() === 42 /* AsteriskToken */) { + return true; + } + if (isLiteralPropertyName()) { + idToken = token(); + nextToken(); + } + if (token() === 23 /* OpenBracketToken */) { + return true; + } + if (idToken !== void 0) { + if (!isKeyword(idToken) || idToken === 153 /* SetKeyword */ || idToken === 139 /* GetKeyword */) { + return true; + } + switch (token()) { + case 21 /* OpenParenToken */: + // Method declaration + case 30 /* LessThanToken */: + // Generic Method declaration + case 54 /* ExclamationToken */: + // Non-null assertion on property name + case 59 /* ColonToken */: + // Type Annotation for declaration + case 64 /* EqualsToken */: + // Initializer for declaration + case 58 /* QuestionToken */: + return true; + default: + return canParseSemicolon(); + } + } + return false; + } + function parseClassStaticBlockDeclaration(pos, hasJSDoc, modifiers) { + parseExpectedToken(126 /* StaticKeyword */); + const body = parseClassStaticBlockBody(); + const node = withJSDoc(finishNode(factory2.createClassStaticBlockDeclaration(body), pos), hasJSDoc); + node.modifiers = modifiers; + return node; + } + function parseClassStaticBlockBody() { + const savedYieldContext = inYieldContext(); + const savedAwaitContext = inAwaitContext(); + setYieldContext(false); + setAwaitContext(true); + const body = parseBlock( + /*ignoreMissingOpenBrace*/ + false + ); + setYieldContext(savedYieldContext); + setAwaitContext(savedAwaitContext); + return body; + } + function parseDecoratorExpression() { + if (inAwaitContext() && token() === 135 /* AwaitKeyword */) { + const pos = getNodePos(); + const awaitExpression = parseIdentifier(Diagnostics.Expression_expected); + nextToken(); + const memberExpression = parseMemberExpressionRest( + pos, + awaitExpression, + /*allowOptionalChain*/ + true + ); + return parseCallExpressionRest(pos, memberExpression); + } + return parseLeftHandSideExpressionOrHigher(); + } + function tryParseDecorator() { + const pos = getNodePos(); + if (!parseOptional(60 /* AtToken */)) { + return void 0; + } + const expression = doInDecoratorContext(parseDecoratorExpression); + return finishNode(factory2.createDecorator(expression), pos); + } + function tryParseModifier(hasSeenStaticModifier, permitConstAsModifier, stopOnStartOfClassStaticBlock) { + const pos = getNodePos(); + const kind = token(); + if (token() === 87 /* ConstKeyword */ && permitConstAsModifier) { + if (!tryParse(nextTokenIsOnSameLineAndCanFollowModifier)) { + return void 0; + } + } else if (stopOnStartOfClassStaticBlock && token() === 126 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) { + return void 0; + } else if (hasSeenStaticModifier && token() === 126 /* StaticKeyword */) { + return void 0; + } else { + if (!parseAnyContextualModifier()) { + return void 0; + } + } + return finishNode(factoryCreateToken(kind), pos); + } + function parseModifiers(allowDecorators, permitConstAsModifier, stopOnStartOfClassStaticBlock) { + const pos = getNodePos(); + let list; + let decorator, modifier, hasSeenStaticModifier = false, hasLeadingModifier = false, hasTrailingDecorator = false; + if (allowDecorators && token() === 60 /* AtToken */) { + while (decorator = tryParseDecorator()) { + list = append(list, decorator); + } + } + while (modifier = tryParseModifier(hasSeenStaticModifier, permitConstAsModifier, stopOnStartOfClassStaticBlock)) { + if (modifier.kind === 126 /* StaticKeyword */) hasSeenStaticModifier = true; + list = append(list, modifier); + hasLeadingModifier = true; + } + if (hasLeadingModifier && allowDecorators && token() === 60 /* AtToken */) { + while (decorator = tryParseDecorator()) { + list = append(list, decorator); + hasTrailingDecorator = true; + } + } + if (hasTrailingDecorator) { + while (modifier = tryParseModifier(hasSeenStaticModifier, permitConstAsModifier, stopOnStartOfClassStaticBlock)) { + if (modifier.kind === 126 /* StaticKeyword */) hasSeenStaticModifier = true; + list = append(list, modifier); + } + } + return list && createNodeArray(list, pos); + } + function parseModifiersForArrowFunction() { + let modifiers; + if (token() === 134 /* AsyncKeyword */) { + const pos = getNodePos(); + nextToken(); + const modifier = finishNode(factoryCreateToken(134 /* AsyncKeyword */), pos); + modifiers = createNodeArray([modifier], pos); + } + return modifiers; + } + function parseClassElement() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + if (token() === 27 /* SemicolonToken */) { + nextToken(); + return withJSDoc(finishNode(factory2.createSemicolonClassElement(), pos), hasJSDoc); + } + const modifiers = parseModifiers( + /*allowDecorators*/ + true, + /*permitConstAsModifier*/ + true, + /*stopOnStartOfClassStaticBlock*/ + true + ); + if (token() === 126 /* StaticKeyword */ && lookAhead(nextTokenIsOpenBrace)) { + return parseClassStaticBlockDeclaration(pos, hasJSDoc, modifiers); + } + if (parseContextualModifier(139 /* GetKeyword */)) { + return parseAccessorDeclaration(pos, hasJSDoc, modifiers, 178 /* GetAccessor */, 0 /* None */); + } + if (parseContextualModifier(153 /* SetKeyword */)) { + return parseAccessorDeclaration(pos, hasJSDoc, modifiers, 179 /* SetAccessor */, 0 /* None */); + } + if (token() === 137 /* ConstructorKeyword */ || token() === 11 /* StringLiteral */) { + const constructorDeclaration = tryParseConstructorDeclaration(pos, hasJSDoc, modifiers); + if (constructorDeclaration) { + return constructorDeclaration; + } + } + if (isIndexSignature()) { + return parseIndexSignatureDeclaration(pos, hasJSDoc, modifiers); + } + if (tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */ || token() === 9 /* NumericLiteral */ || token() === 10 /* BigIntLiteral */ || token() === 42 /* AsteriskToken */ || token() === 23 /* OpenBracketToken */) { + const isAmbient = some(modifiers, isDeclareModifier); + if (isAmbient) { + for (const m of modifiers) { + m.flags |= 33554432 /* Ambient */; + } + return doInsideOfContext(33554432 /* Ambient */, () => parsePropertyOrMethodDeclaration(pos, hasJSDoc, modifiers)); + } else { + return parsePropertyOrMethodDeclaration(pos, hasJSDoc, modifiers); + } + } + if (modifiers) { + const name = createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.Declaration_expected + ); + return parsePropertyDeclaration( + pos, + hasJSDoc, + modifiers, + name, + /*questionToken*/ + void 0 + ); + } + return Debug.fail("Should not have attempted to parse class member declaration."); + } + function parseDecoratedExpression() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const modifiers = parseModifiers( + /*allowDecorators*/ + true + ); + if (token() === 86 /* ClassKeyword */) { + return parseClassDeclarationOrExpression(pos, hasJSDoc, modifiers, 232 /* ClassExpression */); + } + const missing = createMissingNode( + 283 /* MissingDeclaration */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.Expression_expected + ); + setTextRangePos(missing, pos); + missing.modifiers = modifiers; + return missing; + } + function parseClassExpression() { + return parseClassDeclarationOrExpression( + getNodePos(), + hasPrecedingJSDocComment(), + /*modifiers*/ + void 0, + 232 /* ClassExpression */ + ); + } + function parseClassDeclaration(pos, hasJSDoc, modifiers) { + return parseClassDeclarationOrExpression(pos, hasJSDoc, modifiers, 264 /* ClassDeclaration */); + } + function parseClassDeclarationOrExpression(pos, hasJSDoc, modifiers, kind) { + const savedAwaitContext = inAwaitContext(); + parseExpected(86 /* ClassKeyword */); + const name = parseNameOfClassDeclarationOrExpression(); + const typeParameters = parseTypeParameters(); + if (some(modifiers, isExportModifier)) setAwaitContext( + /*value*/ + true + ); + const heritageClauses = parseHeritageClauses(); + let members; + if (parseExpected(19 /* OpenBraceToken */)) { + members = parseClassMembers(); + parseExpected(20 /* CloseBraceToken */); + } else { + members = createMissingList(); + } + setAwaitContext(savedAwaitContext); + const node = kind === 264 /* ClassDeclaration */ ? factory2.createClassDeclaration(modifiers, name, typeParameters, heritageClauses, members) : factory2.createClassExpression(modifiers, name, typeParameters, heritageClauses, members); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseNameOfClassDeclarationOrExpression() { + return isBindingIdentifier() && !isImplementsClause() ? createIdentifier(isBindingIdentifier()) : void 0; + } + function isImplementsClause() { + return token() === 119 /* ImplementsKeyword */ && lookAhead(nextTokenIsIdentifierOrKeyword); + } + function parseHeritageClauses() { + if (isHeritageClause2()) { + return parseList(22 /* HeritageClauses */, parseHeritageClause); + } + return void 0; + } + function parseHeritageClause() { + const pos = getNodePos(); + const tok = token(); + Debug.assert(tok === 96 /* ExtendsKeyword */ || tok === 119 /* ImplementsKeyword */); + nextToken(); + const types = parseDelimitedList(7 /* HeritageClauseElement */, parseExpressionWithTypeArguments); + return finishNode(factory2.createHeritageClause(tok, types), pos); + } + function parseExpressionWithTypeArguments() { + const pos = getNodePos(); + const expression = parseLeftHandSideExpressionOrHigher(); + if (expression.kind === 234 /* ExpressionWithTypeArguments */) { + return expression; + } + const typeArguments = tryParseTypeArguments(); + return finishNode(factory2.createExpressionWithTypeArguments(expression, typeArguments), pos); + } + function tryParseTypeArguments() { + return token() === 30 /* LessThanToken */ ? parseBracketedList(20 /* TypeArguments */, parseType, 30 /* LessThanToken */, 32 /* GreaterThanToken */) : void 0; + } + function isHeritageClause2() { + return token() === 96 /* ExtendsKeyword */ || token() === 119 /* ImplementsKeyword */; + } + function parseClassMembers() { + return parseList(5 /* ClassMembers */, parseClassElement); + } + function parseInterfaceDeclaration(pos, hasJSDoc, modifiers) { + parseExpected(120 /* InterfaceKeyword */); + const name = parseIdentifier(); + const typeParameters = parseTypeParameters(); + const heritageClauses = parseHeritageClauses(); + const members = parseObjectTypeMembers(); + const node = factory2.createInterfaceDeclaration(modifiers, name, typeParameters, heritageClauses, members); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseTypeAliasDeclaration(pos, hasJSDoc, modifiers) { + parseExpected(156 /* TypeKeyword */); + if (scanner2.hasPrecedingLineBreak()) { + parseErrorAtCurrentToken(Diagnostics.Line_break_not_permitted_here); + } + const name = parseIdentifier(); + const typeParameters = parseTypeParameters(); + parseExpected(64 /* EqualsToken */); + const type = token() === 141 /* IntrinsicKeyword */ && tryParse(parseKeywordAndNoDot) || parseType(); + parseSemicolon(); + const node = factory2.createTypeAliasDeclaration(modifiers, name, typeParameters, type); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseEnumMember() { + const pos = getNodePos(); + const hasJSDoc = hasPrecedingJSDocComment(); + const name = parsePropertyName(); + const initializer = allowInAnd(parseInitializer); + return withJSDoc(finishNode(factory2.createEnumMember(name, initializer), pos), hasJSDoc); + } + function parseEnumDeclaration(pos, hasJSDoc, modifiers) { + parseExpected(94 /* EnumKeyword */); + const name = parseIdentifier(); + let members; + if (parseExpected(19 /* OpenBraceToken */)) { + members = doOutsideOfYieldAndAwaitContext(() => parseDelimitedList(6 /* EnumMembers */, parseEnumMember)); + parseExpected(20 /* CloseBraceToken */); + } else { + members = createMissingList(); + } + const node = factory2.createEnumDeclaration(modifiers, name, members); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseModuleBlock() { + const pos = getNodePos(); + let statements; + if (parseExpected(19 /* OpenBraceToken */)) { + statements = parseList(1 /* BlockStatements */, parseStatement); + parseExpected(20 /* CloseBraceToken */); + } else { + statements = createMissingList(); + } + return finishNode(factory2.createModuleBlock(statements), pos); + } + function parseModuleOrNamespaceDeclaration(pos, hasJSDoc, modifiers, flags) { + const namespaceFlag = flags & 32 /* Namespace */; + const name = flags & 8 /* NestedNamespace */ ? parseIdentifierName() : parseIdentifier(); + const body = parseOptional(25 /* DotToken */) ? parseModuleOrNamespaceDeclaration( + getNodePos(), + /*hasJSDoc*/ + false, + /*modifiers*/ + void 0, + 8 /* NestedNamespace */ | namespaceFlag + ) : parseModuleBlock(); + const node = factory2.createModuleDeclaration(modifiers, name, body, flags); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseAmbientExternalModuleDeclaration(pos, hasJSDoc, modifiersIn) { + let flags = 0; + let name; + if (token() === 162 /* GlobalKeyword */) { + name = parseIdentifier(); + flags |= 2048 /* GlobalAugmentation */; + } else { + name = parseLiteralNode(); + name.text = internIdentifier(name.text); + } + let body; + if (token() === 19 /* OpenBraceToken */) { + body = parseModuleBlock(); + } else { + parseSemicolon(); + } + const node = factory2.createModuleDeclaration(modifiersIn, name, body, flags); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseModuleDeclaration(pos, hasJSDoc, modifiersIn) { + let flags = 0; + if (token() === 162 /* GlobalKeyword */) { + return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, modifiersIn); + } else if (parseOptional(145 /* NamespaceKeyword */)) { + flags |= 32 /* Namespace */; + } else { + parseExpected(144 /* ModuleKeyword */); + if (token() === 11 /* StringLiteral */) { + return parseAmbientExternalModuleDeclaration(pos, hasJSDoc, modifiersIn); + } + } + return parseModuleOrNamespaceDeclaration(pos, hasJSDoc, modifiersIn, flags); + } + function isExternalModuleReference2() { + return token() === 149 /* RequireKeyword */ && lookAhead(nextTokenIsOpenParen); + } + function nextTokenIsOpenParen() { + return nextToken() === 21 /* OpenParenToken */; + } + function nextTokenIsOpenBrace() { + return nextToken() === 19 /* OpenBraceToken */; + } + function nextTokenIsSlash() { + return nextToken() === 44 /* SlashToken */; + } + function parseNamespaceExportDeclaration(pos, hasJSDoc, modifiers) { + parseExpected(130 /* AsKeyword */); + parseExpected(145 /* NamespaceKeyword */); + const name = parseIdentifier(); + parseSemicolon(); + const node = factory2.createNamespaceExportDeclaration(name); + node.modifiers = modifiers; + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseImportDeclarationOrImportEqualsDeclaration(pos, hasJSDoc, modifiers) { + parseExpected(102 /* ImportKeyword */); + const afterImportPos = scanner2.getTokenFullStart(); + let identifier; + if (isIdentifier2()) { + identifier = parseIdentifier(); + } + let phaseModifier; + if ((identifier == null ? void 0 : identifier.escapedText) === "type" && (token() !== 161 /* FromKeyword */ || isIdentifier2() && lookAhead(nextTokenIsFromKeywordOrEqualsToken)) && (isIdentifier2() || tokenAfterImportDefinitelyProducesImportDeclaration())) { + phaseModifier = 156 /* TypeKeyword */; + identifier = isIdentifier2() ? parseIdentifier() : void 0; + } else if ((identifier == null ? void 0 : identifier.escapedText) === "defer" && (token() === 161 /* FromKeyword */ ? !lookAhead(nextTokenIsStringLiteral) : token() !== 28 /* CommaToken */ && token() !== 64 /* EqualsToken */)) { + phaseModifier = 166 /* DeferKeyword */; + identifier = isIdentifier2() ? parseIdentifier() : void 0; + } + if (identifier && !tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() && phaseModifier !== 166 /* DeferKeyword */) { + return parseImportEqualsDeclaration(pos, hasJSDoc, modifiers, identifier, phaseModifier === 156 /* TypeKeyword */); + } + const importClause = tryParseImportClause( + identifier, + afterImportPos, + phaseModifier, + /*skipJsDocLeadingAsterisks*/ + void 0 + ); + const moduleSpecifier = parseModuleSpecifier(); + const attributes = tryParseImportAttributes(); + parseSemicolon(); + const node = factory2.createImportDeclaration(modifiers, importClause, moduleSpecifier, attributes); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function tryParseImportClause(identifier, pos, phaseModifier, skipJsDocLeadingAsterisks = false) { + let importClause; + if (identifier || // import id + token() === 42 /* AsteriskToken */ || // import * + token() === 19 /* OpenBraceToken */) { + importClause = parseImportClause(identifier, pos, phaseModifier, skipJsDocLeadingAsterisks); + parseExpected(161 /* FromKeyword */); + } + return importClause; + } + function tryParseImportAttributes() { + const currentToken2 = token(); + if ((currentToken2 === 118 /* WithKeyword */ || currentToken2 === 132 /* AssertKeyword */) && !scanner2.hasPrecedingLineBreak()) { + return parseImportAttributes(currentToken2); + } + } + function parseImportAttribute() { + const pos = getNodePos(); + const name = tokenIsIdentifierOrKeyword(token()) ? parseIdentifierName() : parseLiteralLikeNode(11 /* StringLiteral */); + parseExpected(59 /* ColonToken */); + const value = parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ); + return finishNode(factory2.createImportAttribute(name, value), pos); + } + function parseImportAttributes(token2, skipKeyword) { + const pos = getNodePos(); + if (!skipKeyword) { + parseExpected(token2); + } + const openBracePosition = scanner2.getTokenStart(); + if (parseExpected(19 /* OpenBraceToken */)) { + const multiLine = scanner2.hasPrecedingLineBreak(); + const elements = parseDelimitedList( + 24 /* ImportAttributes */, + parseImportAttribute, + /*considerSemicolonAsDelimiter*/ + true + ); + if (!parseExpected(20 /* CloseBraceToken */)) { + const lastError = lastOrUndefined(parseDiagnostics); + if (lastError && lastError.code === Diagnostics._0_expected.code) { + addRelatedInfo( + lastError, + createDetachedDiagnostic(fileName, sourceText, openBracePosition, 1, Diagnostics.The_parser_expected_to_find_a_1_to_match_the_0_token_here, "{", "}") + ); + } + } + return finishNode(factory2.createImportAttributes(elements, multiLine, token2), pos); + } else { + const elements = createNodeArray( + [], + getNodePos(), + /*end*/ + void 0, + /*hasTrailingComma*/ + false + ); + return finishNode(factory2.createImportAttributes( + elements, + /*multiLine*/ + false, + token2 + ), pos); + } + } + function tokenAfterImportDefinitelyProducesImportDeclaration() { + return token() === 42 /* AsteriskToken */ || token() === 19 /* OpenBraceToken */; + } + function tokenAfterImportedIdentifierDefinitelyProducesImportDeclaration() { + return token() === 28 /* CommaToken */ || token() === 161 /* FromKeyword */; + } + function parseImportEqualsDeclaration(pos, hasJSDoc, modifiers, identifier, isTypeOnly) { + parseExpected(64 /* EqualsToken */); + const moduleReference = parseModuleReference(); + parseSemicolon(); + const node = factory2.createImportEqualsDeclaration(modifiers, isTypeOnly, identifier, moduleReference); + const finished = withJSDoc(finishNode(node, pos), hasJSDoc); + return finished; + } + function parseImportClause(identifier, pos, phaseModifier, skipJsDocLeadingAsterisks) { + let namedBindings; + if (!identifier || parseOptional(28 /* CommaToken */)) { + if (skipJsDocLeadingAsterisks) scanner2.setSkipJsDocLeadingAsterisks(true); + if (token() === 42 /* AsteriskToken */) { + namedBindings = parseNamespaceImport(); + } else { + namedBindings = parseNamedImportsOrExports(276 /* NamedImports */); + } + if (skipJsDocLeadingAsterisks) scanner2.setSkipJsDocLeadingAsterisks(false); + } + return finishNode(factory2.createImportClause(phaseModifier, identifier, namedBindings), pos); + } + function parseModuleReference() { + return isExternalModuleReference2() ? parseExternalModuleReference() : parseEntityName( + /*allowReservedWords*/ + false + ); + } + function parseExternalModuleReference() { + const pos = getNodePos(); + parseExpected(149 /* RequireKeyword */); + parseExpected(21 /* OpenParenToken */); + const expression = parseModuleSpecifier(); + parseExpected(22 /* CloseParenToken */); + return finishNode(factory2.createExternalModuleReference(expression), pos); + } + function parseModuleSpecifier() { + if (token() === 11 /* StringLiteral */) { + const result = parseLiteralNode(); + result.text = internIdentifier(result.text); + return result; + } else { + return parseExpression(); + } + } + function parseNamespaceImport() { + const pos = getNodePos(); + parseExpected(42 /* AsteriskToken */); + parseExpected(130 /* AsKeyword */); + const name = parseIdentifier(); + return finishNode(factory2.createNamespaceImport(name), pos); + } + function canParseModuleExportName() { + return tokenIsIdentifierOrKeyword(token()) || token() === 11 /* StringLiteral */; + } + function parseModuleExportName(parseName) { + return token() === 11 /* StringLiteral */ ? parseLiteralNode() : parseName(); + } + function parseNamedImportsOrExports(kind) { + const pos = getNodePos(); + const node = kind === 276 /* NamedImports */ ? factory2.createNamedImports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseImportSpecifier, 19 /* OpenBraceToken */, 20 /* CloseBraceToken */)) : factory2.createNamedExports(parseBracketedList(23 /* ImportOrExportSpecifiers */, parseExportSpecifier, 19 /* OpenBraceToken */, 20 /* CloseBraceToken */)); + return finishNode(node, pos); + } + function parseExportSpecifier() { + const hasJSDoc = hasPrecedingJSDocComment(); + return withJSDoc(parseImportOrExportSpecifier(282 /* ExportSpecifier */), hasJSDoc); + } + function parseImportSpecifier() { + return parseImportOrExportSpecifier(277 /* ImportSpecifier */); + } + function parseImportOrExportSpecifier(kind) { + const pos = getNodePos(); + let checkIdentifierIsKeyword = isKeyword(token()) && !isIdentifier2(); + let checkIdentifierStart = scanner2.getTokenStart(); + let checkIdentifierEnd = scanner2.getTokenEnd(); + let isTypeOnly = false; + let propertyName; + let canParseAsKeyword = true; + let name = parseModuleExportName(parseIdentifierName); + if (name.kind === 80 /* Identifier */ && name.escapedText === "type") { + if (token() === 130 /* AsKeyword */) { + const firstAs = parseIdentifierName(); + if (token() === 130 /* AsKeyword */) { + const secondAs = parseIdentifierName(); + if (canParseModuleExportName()) { + isTypeOnly = true; + propertyName = firstAs; + name = parseModuleExportName(parseNameWithKeywordCheck); + canParseAsKeyword = false; + } else { + propertyName = name; + name = secondAs; + canParseAsKeyword = false; + } + } else if (canParseModuleExportName()) { + propertyName = name; + canParseAsKeyword = false; + name = parseModuleExportName(parseNameWithKeywordCheck); + } else { + isTypeOnly = true; + name = firstAs; + } + } else if (canParseModuleExportName()) { + isTypeOnly = true; + name = parseModuleExportName(parseNameWithKeywordCheck); + } + } + if (canParseAsKeyword && token() === 130 /* AsKeyword */) { + propertyName = name; + parseExpected(130 /* AsKeyword */); + name = parseModuleExportName(parseNameWithKeywordCheck); + } + if (kind === 277 /* ImportSpecifier */) { + if (name.kind !== 80 /* Identifier */) { + parseErrorAt(skipTrivia(sourceText, name.pos), name.end, Diagnostics.Identifier_expected); + name = setTextRangePosEnd(createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + false + ), name.pos, name.pos); + } else if (checkIdentifierIsKeyword) { + parseErrorAt(checkIdentifierStart, checkIdentifierEnd, Diagnostics.Identifier_expected); + } + } + const node = kind === 277 /* ImportSpecifier */ ? factory2.createImportSpecifier(isTypeOnly, propertyName, name) : factory2.createExportSpecifier(isTypeOnly, propertyName, name); + return finishNode(node, pos); + function parseNameWithKeywordCheck() { + checkIdentifierIsKeyword = isKeyword(token()) && !isIdentifier2(); + checkIdentifierStart = scanner2.getTokenStart(); + checkIdentifierEnd = scanner2.getTokenEnd(); + return parseIdentifierName(); + } + } + function parseNamespaceExport(pos) { + return finishNode(factory2.createNamespaceExport(parseModuleExportName(parseIdentifierName)), pos); + } + function parseExportDeclaration(pos, hasJSDoc, modifiers) { + const savedAwaitContext = inAwaitContext(); + setAwaitContext( + /*value*/ + true + ); + let exportClause; + let moduleSpecifier; + let attributes; + const isTypeOnly = parseOptional(156 /* TypeKeyword */); + const namespaceExportPos = getNodePos(); + if (parseOptional(42 /* AsteriskToken */)) { + if (parseOptional(130 /* AsKeyword */)) { + exportClause = parseNamespaceExport(namespaceExportPos); + } + parseExpected(161 /* FromKeyword */); + moduleSpecifier = parseModuleSpecifier(); + } else { + exportClause = parseNamedImportsOrExports(280 /* NamedExports */); + if (token() === 161 /* FromKeyword */ || token() === 11 /* StringLiteral */ && !scanner2.hasPrecedingLineBreak()) { + parseExpected(161 /* FromKeyword */); + moduleSpecifier = parseModuleSpecifier(); + } + } + const currentToken2 = token(); + if (moduleSpecifier && (currentToken2 === 118 /* WithKeyword */ || currentToken2 === 132 /* AssertKeyword */) && !scanner2.hasPrecedingLineBreak()) { + attributes = parseImportAttributes(currentToken2); + } + parseSemicolon(); + setAwaitContext(savedAwaitContext); + const node = factory2.createExportDeclaration(modifiers, isTypeOnly, exportClause, moduleSpecifier, attributes); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + function parseExportAssignment(pos, hasJSDoc, modifiers) { + const savedAwaitContext = inAwaitContext(); + setAwaitContext( + /*value*/ + true + ); + let isExportEquals; + if (parseOptional(64 /* EqualsToken */)) { + isExportEquals = true; + } else { + parseExpected(90 /* DefaultKeyword */); + } + const expression = parseAssignmentExpressionOrHigher( + /*allowReturnTypeInArrowFunction*/ + true + ); + parseSemicolon(); + setAwaitContext(savedAwaitContext); + const node = factory2.createExportAssignment(modifiers, isExportEquals, expression); + return withJSDoc(finishNode(node, pos), hasJSDoc); + } + let ParsingContext; + ((ParsingContext2) => { + ParsingContext2[ParsingContext2["SourceElements"] = 0] = "SourceElements"; + ParsingContext2[ParsingContext2["BlockStatements"] = 1] = "BlockStatements"; + ParsingContext2[ParsingContext2["SwitchClauses"] = 2] = "SwitchClauses"; + ParsingContext2[ParsingContext2["SwitchClauseStatements"] = 3] = "SwitchClauseStatements"; + ParsingContext2[ParsingContext2["TypeMembers"] = 4] = "TypeMembers"; + ParsingContext2[ParsingContext2["ClassMembers"] = 5] = "ClassMembers"; + ParsingContext2[ParsingContext2["EnumMembers"] = 6] = "EnumMembers"; + ParsingContext2[ParsingContext2["HeritageClauseElement"] = 7] = "HeritageClauseElement"; + ParsingContext2[ParsingContext2["VariableDeclarations"] = 8] = "VariableDeclarations"; + ParsingContext2[ParsingContext2["ObjectBindingElements"] = 9] = "ObjectBindingElements"; + ParsingContext2[ParsingContext2["ArrayBindingElements"] = 10] = "ArrayBindingElements"; + ParsingContext2[ParsingContext2["ArgumentExpressions"] = 11] = "ArgumentExpressions"; + ParsingContext2[ParsingContext2["ObjectLiteralMembers"] = 12] = "ObjectLiteralMembers"; + ParsingContext2[ParsingContext2["JsxAttributes"] = 13] = "JsxAttributes"; + ParsingContext2[ParsingContext2["JsxChildren"] = 14] = "JsxChildren"; + ParsingContext2[ParsingContext2["ArrayLiteralMembers"] = 15] = "ArrayLiteralMembers"; + ParsingContext2[ParsingContext2["Parameters"] = 16] = "Parameters"; + ParsingContext2[ParsingContext2["JSDocParameters"] = 17] = "JSDocParameters"; + ParsingContext2[ParsingContext2["RestProperties"] = 18] = "RestProperties"; + ParsingContext2[ParsingContext2["TypeParameters"] = 19] = "TypeParameters"; + ParsingContext2[ParsingContext2["TypeArguments"] = 20] = "TypeArguments"; + ParsingContext2[ParsingContext2["TupleElementTypes"] = 21] = "TupleElementTypes"; + ParsingContext2[ParsingContext2["HeritageClauses"] = 22] = "HeritageClauses"; + ParsingContext2[ParsingContext2["ImportOrExportSpecifiers"] = 23] = "ImportOrExportSpecifiers"; + ParsingContext2[ParsingContext2["ImportAttributes"] = 24] = "ImportAttributes"; + ParsingContext2[ParsingContext2["JSDocComment"] = 25] = "JSDocComment"; + ParsingContext2[ParsingContext2["Count"] = 26] = "Count"; + })(ParsingContext || (ParsingContext = {})); + let Tristate; + ((Tristate2) => { + Tristate2[Tristate2["False"] = 0] = "False"; + Tristate2[Tristate2["True"] = 1] = "True"; + Tristate2[Tristate2["Unknown"] = 2] = "Unknown"; + })(Tristate || (Tristate = {})); + let JSDocParser; + ((JSDocParser2) => { + function parseJSDocTypeExpressionForTests2(content, start, length2) { + initializeState( + "file.js", + content, + 99 /* Latest */, + /*syntaxCursor*/ + void 0, + 1 /* JS */, + 0 /* ParseAll */ + ); + scanner2.setText(content, start, length2); + currentToken = scanner2.scan(); + const jsDocTypeExpression = parseJSDocTypeExpression(); + const sourceFile = createSourceFile2( + "file.js", + 99 /* Latest */, + 1 /* JS */, + /*isDeclarationFile*/ + false, + [], + factoryCreateToken(1 /* EndOfFileToken */), + 0 /* None */, + noop + ); + const diagnostics = attachFileToDiagnostics(parseDiagnostics, sourceFile); + if (jsDocDiagnostics) { + sourceFile.jsDocDiagnostics = attachFileToDiagnostics(jsDocDiagnostics, sourceFile); + } + clearState(); + return jsDocTypeExpression ? { jsDocTypeExpression, diagnostics } : void 0; + } + JSDocParser2.parseJSDocTypeExpressionForTests = parseJSDocTypeExpressionForTests2; + function parseJSDocTypeExpression(mayOmitBraces) { + const pos = getNodePos(); + const hasBrace = (mayOmitBraces ? parseOptional : parseExpected)(19 /* OpenBraceToken */); + const type = doInsideOfContext(16777216 /* JSDoc */, parseJSDocType); + if (!mayOmitBraces || hasBrace) { + parseExpectedJSDoc(20 /* CloseBraceToken */); + } + const result = factory2.createJSDocTypeExpression(type); + fixupParentReferences(result); + return finishNode(result, pos); + } + JSDocParser2.parseJSDocTypeExpression = parseJSDocTypeExpression; + function parseJSDocNameReference() { + const pos = getNodePos(); + const hasBrace = parseOptional(19 /* OpenBraceToken */); + const p2 = getNodePos(); + let entityName = parseEntityName( + /*allowReservedWords*/ + false + ); + while (token() === 81 /* PrivateIdentifier */) { + reScanHashToken(); + nextTokenJSDoc(); + entityName = finishNode(factory2.createJSDocMemberName(entityName, parseIdentifier()), p2); + } + if (hasBrace) { + parseExpectedJSDoc(20 /* CloseBraceToken */); + } + const result = factory2.createJSDocNameReference(entityName); + fixupParentReferences(result); + return finishNode(result, pos); + } + JSDocParser2.parseJSDocNameReference = parseJSDocNameReference; + function parseIsolatedJSDocComment2(content, start, length2) { + initializeState( + "", + content, + 99 /* Latest */, + /*syntaxCursor*/ + void 0, + 1 /* JS */, + 0 /* ParseAll */ + ); + const jsDoc = doInsideOfContext(16777216 /* JSDoc */, () => parseJSDocCommentWorker(start, length2)); + const sourceFile = { languageVariant: 0 /* Standard */, text: content }; + const diagnostics = attachFileToDiagnostics(parseDiagnostics, sourceFile); + clearState(); + return jsDoc ? { jsDoc, diagnostics } : void 0; + } + JSDocParser2.parseIsolatedJSDocComment = parseIsolatedJSDocComment2; + function parseJSDocComment(parent2, start, length2) { + const saveToken = currentToken; + const saveParseDiagnosticsLength = parseDiagnostics.length; + const saveParseErrorBeforeNextFinishedNode = parseErrorBeforeNextFinishedNode; + const comment = doInsideOfContext(16777216 /* JSDoc */, () => parseJSDocCommentWorker(start, length2)); + setParent(comment, parent2); + if (contextFlags & 524288 /* JavaScriptFile */) { + if (!jsDocDiagnostics) { + jsDocDiagnostics = []; + } + addRange(jsDocDiagnostics, parseDiagnostics, saveParseDiagnosticsLength); + } + currentToken = saveToken; + parseDiagnostics.length = saveParseDiagnosticsLength; + parseErrorBeforeNextFinishedNode = saveParseErrorBeforeNextFinishedNode; + return comment; + } + JSDocParser2.parseJSDocComment = parseJSDocComment; + let JSDocState; + ((JSDocState2) => { + JSDocState2[JSDocState2["BeginningOfLine"] = 0] = "BeginningOfLine"; + JSDocState2[JSDocState2["SawAsterisk"] = 1] = "SawAsterisk"; + JSDocState2[JSDocState2["SavingComments"] = 2] = "SavingComments"; + JSDocState2[JSDocState2["SavingBackticks"] = 3] = "SavingBackticks"; + })(JSDocState || (JSDocState = {})); + let PropertyLikeParse; + ((PropertyLikeParse2) => { + PropertyLikeParse2[PropertyLikeParse2["Property"] = 1] = "Property"; + PropertyLikeParse2[PropertyLikeParse2["Parameter"] = 2] = "Parameter"; + PropertyLikeParse2[PropertyLikeParse2["CallbackParameter"] = 4] = "CallbackParameter"; + })(PropertyLikeParse || (PropertyLikeParse = {})); + function parseJSDocCommentWorker(start = 0, length2) { + const content = sourceText; + const end = length2 === void 0 ? content.length : start + length2; + length2 = end - start; + Debug.assert(start >= 0); + Debug.assert(start <= end); + Debug.assert(end <= content.length); + if (!isJSDocLikeText(content, start)) { + return void 0; + } + let tags; + let tagsPos; + let tagsEnd; + let linkEnd; + let commentsPos; + let comments = []; + const parts = []; + const saveParsingContext = parsingContext; + parsingContext |= 1 << 25 /* JSDocComment */; + const result = scanner2.scanRange(start + 3, length2 - 5, doJSDocScan); + parsingContext = saveParsingContext; + return result; + function doJSDocScan() { + let state = 1 /* SawAsterisk */; + let margin; + let indent3 = start - (content.lastIndexOf("\n", start) + 1) + 4; + function pushComment(text) { + if (!margin) { + margin = indent3; + } + comments.push(text); + indent3 += text.length; + } + nextTokenJSDoc(); + while (parseOptionalJsdoc(5 /* WhitespaceTrivia */)) ; + if (parseOptionalJsdoc(4 /* NewLineTrivia */)) { + state = 0 /* BeginningOfLine */; + indent3 = 0; + } + loop: + while (true) { + switch (token()) { + case 60 /* AtToken */: + removeTrailingWhitespace(comments); + if (!commentsPos) commentsPos = getNodePos(); + addTag(parseTag(indent3)); + state = 0 /* BeginningOfLine */; + margin = void 0; + break; + case 4 /* NewLineTrivia */: + comments.push(scanner2.getTokenText()); + state = 0 /* BeginningOfLine */; + indent3 = 0; + break; + case 42 /* AsteriskToken */: + const asterisk = scanner2.getTokenText(); + if (state === 1 /* SawAsterisk */) { + state = 2 /* SavingComments */; + pushComment(asterisk); + } else { + Debug.assert(state === 0 /* BeginningOfLine */); + state = 1 /* SawAsterisk */; + indent3 += asterisk.length; + } + break; + case 5 /* WhitespaceTrivia */: + Debug.assert(state !== 2 /* SavingComments */, "whitespace shouldn't come from the scanner while saving top-level comment text"); + const whitespace = scanner2.getTokenText(); + if (margin !== void 0 && indent3 + whitespace.length > margin) { + comments.push(whitespace.slice(margin - indent3)); + } + indent3 += whitespace.length; + break; + case 1 /* EndOfFileToken */: + break loop; + case 82 /* JSDocCommentTextToken */: + state = 2 /* SavingComments */; + pushComment(scanner2.getTokenValue()); + break; + case 19 /* OpenBraceToken */: + state = 2 /* SavingComments */; + const commentEnd = scanner2.getTokenFullStart(); + const linkStart = scanner2.getTokenEnd() - 1; + const link = parseJSDocLink(linkStart); + if (link) { + if (!linkEnd) { + removeLeadingNewlines(comments); + } + parts.push(finishNode(factory2.createJSDocText(comments.join("")), linkEnd ?? start, commentEnd)); + parts.push(link); + comments = []; + linkEnd = scanner2.getTokenEnd(); + break; + } + // fallthrough if it's not a {@link sequence + default: + state = 2 /* SavingComments */; + pushComment(scanner2.getTokenText()); + break; + } + if (state === 2 /* SavingComments */) { + nextJSDocCommentTextToken( + /*inBackticks*/ + false + ); + } else { + nextTokenJSDoc(); + } + } + const trimmedComments = comments.join("").trimEnd(); + if (parts.length && trimmedComments.length) { + parts.push(finishNode(factory2.createJSDocText(trimmedComments), linkEnd ?? start, commentsPos)); + } + if (parts.length && tags) Debug.assertIsDefined(commentsPos, "having parsed tags implies that the end of the comment span should be set"); + const tagsArray = tags && createNodeArray(tags, tagsPos, tagsEnd); + return finishNode(factory2.createJSDocComment(parts.length ? createNodeArray(parts, start, commentsPos) : trimmedComments.length ? trimmedComments : void 0, tagsArray), start, end); + } + function removeLeadingNewlines(comments2) { + while (comments2.length && (comments2[0] === "\n" || comments2[0] === "\r")) { + comments2.shift(); + } + } + function removeTrailingWhitespace(comments2) { + while (comments2.length) { + const trimmed = comments2[comments2.length - 1].trimEnd(); + if (trimmed === "") { + comments2.pop(); + } else if (trimmed.length < comments2[comments2.length - 1].length) { + comments2[comments2.length - 1] = trimmed; + break; + } else { + break; + } + } + } + function isNextNonwhitespaceTokenEndOfFile() { + while (true) { + nextTokenJSDoc(); + if (token() === 1 /* EndOfFileToken */) { + return true; + } + if (!(token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */)) { + return false; + } + } + } + function skipWhitespace() { + if (token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */) { + if (lookAhead(isNextNonwhitespaceTokenEndOfFile)) { + return; + } + } + while (token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */) { + nextTokenJSDoc(); + } + } + function skipWhitespaceOrAsterisk() { + if (token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */) { + if (lookAhead(isNextNonwhitespaceTokenEndOfFile)) { + return ""; + } + } + let precedingLineBreak = scanner2.hasPrecedingLineBreak(); + let seenLineBreak = false; + let indentText = ""; + while (precedingLineBreak && token() === 42 /* AsteriskToken */ || token() === 5 /* WhitespaceTrivia */ || token() === 4 /* NewLineTrivia */) { + indentText += scanner2.getTokenText(); + if (token() === 4 /* NewLineTrivia */) { + precedingLineBreak = true; + seenLineBreak = true; + indentText = ""; + } else if (token() === 42 /* AsteriskToken */) { + precedingLineBreak = false; + } + nextTokenJSDoc(); + } + return seenLineBreak ? indentText : ""; + } + function parseTag(margin) { + Debug.assert(token() === 60 /* AtToken */); + const start2 = scanner2.getTokenStart(); + nextTokenJSDoc(); + const tagName = parseJSDocIdentifierName( + /*message*/ + void 0 + ); + const indentText = skipWhitespaceOrAsterisk(); + let tag; + switch (tagName.escapedText) { + case "author": + tag = parseAuthorTag(start2, tagName, margin, indentText); + break; + case "implements": + tag = parseImplementsTag(start2, tagName, margin, indentText); + break; + case "augments": + case "extends": + tag = parseAugmentsTag(start2, tagName, margin, indentText); + break; + case "class": + case "constructor": + tag = parseSimpleTag(start2, factory2.createJSDocClassTag, tagName, margin, indentText); + break; + case "public": + tag = parseSimpleTag(start2, factory2.createJSDocPublicTag, tagName, margin, indentText); + break; + case "private": + tag = parseSimpleTag(start2, factory2.createJSDocPrivateTag, tagName, margin, indentText); + break; + case "protected": + tag = parseSimpleTag(start2, factory2.createJSDocProtectedTag, tagName, margin, indentText); + break; + case "readonly": + tag = parseSimpleTag(start2, factory2.createJSDocReadonlyTag, tagName, margin, indentText); + break; + case "override": + tag = parseSimpleTag(start2, factory2.createJSDocOverrideTag, tagName, margin, indentText); + break; + case "deprecated": + hasDeprecatedTag = true; + tag = parseSimpleTag(start2, factory2.createJSDocDeprecatedTag, tagName, margin, indentText); + break; + case "this": + tag = parseThisTag(start2, tagName, margin, indentText); + break; + case "enum": + tag = parseEnumTag(start2, tagName, margin, indentText); + break; + case "arg": + case "argument": + case "param": + return parseParameterOrPropertyTag(start2, tagName, 2 /* Parameter */, margin); + case "return": + case "returns": + tag = parseReturnTag(start2, tagName, margin, indentText); + break; + case "template": + tag = parseTemplateTag(start2, tagName, margin, indentText); + break; + case "type": + tag = parseTypeTag(start2, tagName, margin, indentText); + break; + case "typedef": + tag = parseTypedefTag(start2, tagName, margin, indentText); + break; + case "callback": + tag = parseCallbackTag(start2, tagName, margin, indentText); + break; + case "overload": + tag = parseOverloadTag(start2, tagName, margin, indentText); + break; + case "satisfies": + tag = parseSatisfiesTag(start2, tagName, margin, indentText); + break; + case "see": + tag = parseSeeTag(start2, tagName, margin, indentText); + break; + case "exception": + case "throws": + tag = parseThrowsTag(start2, tagName, margin, indentText); + break; + case "import": + tag = parseImportTag(start2, tagName, margin, indentText); + break; + default: + tag = parseUnknownTag(start2, tagName, margin, indentText); + break; + } + return tag; + } + function parseTrailingTagComments(pos, end2, margin, indentText) { + if (!indentText) { + margin += end2 - pos; + } + return parseTagComments(margin, indentText.slice(margin)); + } + function parseTagComments(indent3, initialMargin) { + const commentsPos2 = getNodePos(); + let comments2 = []; + const parts2 = []; + let linkEnd2; + let state = 0 /* BeginningOfLine */; + let margin; + function pushComment(text) { + if (!margin) { + margin = indent3; + } + comments2.push(text); + indent3 += text.length; + } + if (initialMargin !== void 0) { + if (initialMargin !== "") { + pushComment(initialMargin); + } + state = 1 /* SawAsterisk */; + } + let tok = token(); + loop: + while (true) { + switch (tok) { + case 4 /* NewLineTrivia */: + state = 0 /* BeginningOfLine */; + comments2.push(scanner2.getTokenText()); + indent3 = 0; + break; + case 60 /* AtToken */: + scanner2.resetTokenState(scanner2.getTokenEnd() - 1); + break loop; + case 1 /* EndOfFileToken */: + break loop; + case 5 /* WhitespaceTrivia */: + Debug.assert(state !== 2 /* SavingComments */ && state !== 3 /* SavingBackticks */, "whitespace shouldn't come from the scanner while saving comment text"); + const whitespace = scanner2.getTokenText(); + if (margin !== void 0 && indent3 + whitespace.length > margin) { + comments2.push(whitespace.slice(margin - indent3)); + state = 2 /* SavingComments */; + } + indent3 += whitespace.length; + break; + case 19 /* OpenBraceToken */: + state = 2 /* SavingComments */; + const commentEnd = scanner2.getTokenFullStart(); + const linkStart = scanner2.getTokenEnd() - 1; + const link = parseJSDocLink(linkStart); + if (link) { + parts2.push(finishNode(factory2.createJSDocText(comments2.join("")), linkEnd2 ?? commentsPos2, commentEnd)); + parts2.push(link); + comments2 = []; + linkEnd2 = scanner2.getTokenEnd(); + } else { + pushComment(scanner2.getTokenText()); + } + break; + case 62 /* BacktickToken */: + if (state === 3 /* SavingBackticks */) { + state = 2 /* SavingComments */; + } else { + state = 3 /* SavingBackticks */; + } + pushComment(scanner2.getTokenText()); + break; + case 82 /* JSDocCommentTextToken */: + if (state !== 3 /* SavingBackticks */) { + state = 2 /* SavingComments */; + } + pushComment(scanner2.getTokenValue()); + break; + case 42 /* AsteriskToken */: + if (state === 0 /* BeginningOfLine */) { + state = 1 /* SawAsterisk */; + indent3 += 1; + break; + } + // record the * as a comment + // falls through + default: + if (state !== 3 /* SavingBackticks */) { + state = 2 /* SavingComments */; + } + pushComment(scanner2.getTokenText()); + break; + } + if (state === 2 /* SavingComments */ || state === 3 /* SavingBackticks */) { + tok = nextJSDocCommentTextToken(state === 3 /* SavingBackticks */); + } else { + tok = nextTokenJSDoc(); + } + } + removeLeadingNewlines(comments2); + const trimmedComments = comments2.join("").trimEnd(); + if (parts2.length) { + if (trimmedComments.length) { + parts2.push(finishNode(factory2.createJSDocText(trimmedComments), linkEnd2 ?? commentsPos2)); + } + return createNodeArray(parts2, commentsPos2, scanner2.getTokenEnd()); + } else if (trimmedComments.length) { + return trimmedComments; + } + } + function parseJSDocLink(start2) { + const linkType = tryParse(parseJSDocLinkPrefix); + if (!linkType) { + return void 0; + } + nextTokenJSDoc(); + skipWhitespace(); + const name = parseJSDocLinkName(); + const text = []; + while (token() !== 20 /* CloseBraceToken */ && token() !== 4 /* NewLineTrivia */ && token() !== 1 /* EndOfFileToken */) { + text.push(scanner2.getTokenText()); + nextTokenJSDoc(); + } + const create = linkType === "link" ? factory2.createJSDocLink : linkType === "linkcode" ? factory2.createJSDocLinkCode : factory2.createJSDocLinkPlain; + return finishNode(create(name, text.join("")), start2, scanner2.getTokenEnd()); + } + function parseJSDocLinkName() { + if (tokenIsIdentifierOrKeyword(token())) { + const pos = getNodePos(); + let name = parseIdentifierName(); + while (parseOptional(25 /* DotToken */)) { + name = finishNode(factory2.createQualifiedName(name, token() === 81 /* PrivateIdentifier */ ? createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + false + ) : parseIdentifierName()), pos); + } + while (token() === 81 /* PrivateIdentifier */) { + reScanHashToken(); + nextTokenJSDoc(); + name = finishNode(factory2.createJSDocMemberName(name, parseIdentifier()), pos); + } + return name; + } + return void 0; + } + function parseJSDocLinkPrefix() { + skipWhitespaceOrAsterisk(); + if (token() === 19 /* OpenBraceToken */ && nextTokenJSDoc() === 60 /* AtToken */ && tokenIsIdentifierOrKeyword(nextTokenJSDoc())) { + const kind = scanner2.getTokenValue(); + if (isJSDocLinkTag(kind)) return kind; + } + } + function isJSDocLinkTag(kind) { + return kind === "link" || kind === "linkcode" || kind === "linkplain"; + } + function parseUnknownTag(start2, tagName, indent3, indentText) { + return finishNode(factory2.createJSDocUnknownTag(tagName, parseTrailingTagComments(start2, getNodePos(), indent3, indentText)), start2); + } + function addTag(tag) { + if (!tag) { + return; + } + if (!tags) { + tags = [tag]; + tagsPos = tag.pos; + } else { + tags.push(tag); + } + tagsEnd = tag.end; + } + function tryParseTypeExpression() { + skipWhitespaceOrAsterisk(); + return token() === 19 /* OpenBraceToken */ ? parseJSDocTypeExpression() : void 0; + } + function parseBracketNameInPropertyAndParamTag() { + const isBracketed = parseOptionalJsdoc(23 /* OpenBracketToken */); + if (isBracketed) { + skipWhitespace(); + } + const isBackquoted = parseOptionalJsdoc(62 /* BacktickToken */); + const name = parseJSDocEntityName(); + if (isBackquoted) { + parseExpectedTokenJSDoc(62 /* BacktickToken */); + } + if (isBracketed) { + skipWhitespace(); + if (parseOptionalToken(64 /* EqualsToken */)) { + parseExpression(); + } + parseExpected(24 /* CloseBracketToken */); + } + return { name, isBracketed }; + } + function isObjectOrObjectArrayTypeReference(node) { + switch (node.kind) { + case 151 /* ObjectKeyword */: + return true; + case 189 /* ArrayType */: + return isObjectOrObjectArrayTypeReference(node.elementType); + default: + return isTypeReferenceNode(node) && isIdentifier(node.typeName) && node.typeName.escapedText === "Object" && !node.typeArguments; + } + } + function parseParameterOrPropertyTag(start2, tagName, target, indent3) { + let typeExpression = tryParseTypeExpression(); + let isNameFirst = !typeExpression; + skipWhitespaceOrAsterisk(); + const { name, isBracketed } = parseBracketNameInPropertyAndParamTag(); + const indentText = skipWhitespaceOrAsterisk(); + if (isNameFirst && !lookAhead(parseJSDocLinkPrefix)) { + typeExpression = tryParseTypeExpression(); + } + const comment = parseTrailingTagComments(start2, getNodePos(), indent3, indentText); + const nestedTypeLiteral = parseNestedTypeLiteral(typeExpression, name, target, indent3); + if (nestedTypeLiteral) { + typeExpression = nestedTypeLiteral; + isNameFirst = true; + } + const result2 = target === 1 /* Property */ ? factory2.createJSDocPropertyTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment) : factory2.createJSDocParameterTag(tagName, name, isBracketed, typeExpression, isNameFirst, comment); + return finishNode(result2, start2); + } + function parseNestedTypeLiteral(typeExpression, name, target, indent3) { + if (typeExpression && isObjectOrObjectArrayTypeReference(typeExpression.type)) { + const pos = getNodePos(); + let child; + let children; + while (child = tryParse(() => parseChildParameterOrPropertyTag(target, indent3, name))) { + if (child.kind === 342 /* JSDocParameterTag */ || child.kind === 349 /* JSDocPropertyTag */) { + children = append(children, child); + } else if (child.kind === 346 /* JSDocTemplateTag */) { + parseErrorAtRange(child.tagName, Diagnostics.A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag); + } + } + if (children) { + const literal = finishNode(factory2.createJSDocTypeLiteral(children, typeExpression.type.kind === 189 /* ArrayType */), pos); + return finishNode(factory2.createJSDocTypeExpression(literal), pos); + } + } + } + function parseReturnTag(start2, tagName, indent3, indentText) { + if (some(tags, isJSDocReturnTag)) { + parseErrorAt(tagName.pos, scanner2.getTokenStart(), Diagnostics._0_tag_already_specified, unescapeLeadingUnderscores(tagName.escapedText)); + } + const typeExpression = tryParseTypeExpression(); + return finishNode(factory2.createJSDocReturnTag(tagName, typeExpression, parseTrailingTagComments(start2, getNodePos(), indent3, indentText)), start2); + } + function parseTypeTag(start2, tagName, indent3, indentText) { + if (some(tags, isJSDocTypeTag)) { + parseErrorAt(tagName.pos, scanner2.getTokenStart(), Diagnostics._0_tag_already_specified, unescapeLeadingUnderscores(tagName.escapedText)); + } + const typeExpression = parseJSDocTypeExpression( + /*mayOmitBraces*/ + true + ); + const comments2 = indent3 !== void 0 && indentText !== void 0 ? parseTrailingTagComments(start2, getNodePos(), indent3, indentText) : void 0; + return finishNode(factory2.createJSDocTypeTag(tagName, typeExpression, comments2), start2); + } + function parseSeeTag(start2, tagName, indent3, indentText) { + const isMarkdownOrJSDocLink = token() === 23 /* OpenBracketToken */ || lookAhead(() => nextTokenJSDoc() === 60 /* AtToken */ && tokenIsIdentifierOrKeyword(nextTokenJSDoc()) && isJSDocLinkTag(scanner2.getTokenValue())); + const nameExpression = isMarkdownOrJSDocLink ? void 0 : parseJSDocNameReference(); + const comments2 = indent3 !== void 0 && indentText !== void 0 ? parseTrailingTagComments(start2, getNodePos(), indent3, indentText) : void 0; + return finishNode(factory2.createJSDocSeeTag(tagName, nameExpression, comments2), start2); + } + function parseThrowsTag(start2, tagName, indent3, indentText) { + const typeExpression = tryParseTypeExpression(); + const comment = parseTrailingTagComments(start2, getNodePos(), indent3, indentText); + return finishNode(factory2.createJSDocThrowsTag(tagName, typeExpression, comment), start2); + } + function parseAuthorTag(start2, tagName, indent3, indentText) { + const commentStart = getNodePos(); + const textOnly = parseAuthorNameAndEmail(); + let commentEnd = scanner2.getTokenFullStart(); + const comments2 = parseTrailingTagComments(start2, commentEnd, indent3, indentText); + if (!comments2) { + commentEnd = scanner2.getTokenFullStart(); + } + const allParts = typeof comments2 !== "string" ? createNodeArray(concatenate([finishNode(textOnly, commentStart, commentEnd)], comments2), commentStart) : textOnly.text + comments2; + return finishNode(factory2.createJSDocAuthorTag(tagName, allParts), start2); + } + function parseAuthorNameAndEmail() { + const comments2 = []; + let inEmail = false; + let token2 = scanner2.getToken(); + while (token2 !== 1 /* EndOfFileToken */ && token2 !== 4 /* NewLineTrivia */) { + if (token2 === 30 /* LessThanToken */) { + inEmail = true; + } else if (token2 === 60 /* AtToken */ && !inEmail) { + break; + } else if (token2 === 32 /* GreaterThanToken */ && inEmail) { + comments2.push(scanner2.getTokenText()); + scanner2.resetTokenState(scanner2.getTokenEnd()); + break; + } + comments2.push(scanner2.getTokenText()); + token2 = nextTokenJSDoc(); + } + return factory2.createJSDocText(comments2.join("")); + } + function parseImplementsTag(start2, tagName, margin, indentText) { + const className = parseExpressionWithTypeArgumentsForAugments(); + return finishNode(factory2.createJSDocImplementsTag(tagName, className, parseTrailingTagComments(start2, getNodePos(), margin, indentText)), start2); + } + function parseAugmentsTag(start2, tagName, margin, indentText) { + const className = parseExpressionWithTypeArgumentsForAugments(); + return finishNode(factory2.createJSDocAugmentsTag(tagName, className, parseTrailingTagComments(start2, getNodePos(), margin, indentText)), start2); + } + function parseSatisfiesTag(start2, tagName, margin, indentText) { + const typeExpression = parseJSDocTypeExpression( + /*mayOmitBraces*/ + false + ); + const comments2 = margin !== void 0 && indentText !== void 0 ? parseTrailingTagComments(start2, getNodePos(), margin, indentText) : void 0; + return finishNode(factory2.createJSDocSatisfiesTag(tagName, typeExpression, comments2), start2); + } + function parseImportTag(start2, tagName, margin, indentText) { + const afterImportTagPos = scanner2.getTokenFullStart(); + let identifier; + if (isIdentifier2()) { + identifier = parseIdentifier(); + } + const importClause = tryParseImportClause( + identifier, + afterImportTagPos, + 156 /* TypeKeyword */, + /*skipJsDocLeadingAsterisks*/ + true + ); + const moduleSpecifier = parseModuleSpecifier(); + const attributes = tryParseImportAttributes(); + const comments2 = margin !== void 0 && indentText !== void 0 ? parseTrailingTagComments(start2, getNodePos(), margin, indentText) : void 0; + return finishNode(factory2.createJSDocImportTag(tagName, importClause, moduleSpecifier, attributes, comments2), start2); + } + function parseExpressionWithTypeArgumentsForAugments() { + const usedBrace = parseOptional(19 /* OpenBraceToken */); + const pos = getNodePos(); + const expression = parsePropertyAccessEntityNameExpression(); + scanner2.setSkipJsDocLeadingAsterisks(true); + const typeArguments = tryParseTypeArguments(); + scanner2.setSkipJsDocLeadingAsterisks(false); + const node = factory2.createExpressionWithTypeArguments(expression, typeArguments); + const res = finishNode(node, pos); + if (usedBrace) { + skipWhitespace(); + parseExpected(20 /* CloseBraceToken */); + } + return res; + } + function parsePropertyAccessEntityNameExpression() { + const pos = getNodePos(); + let node = parseJSDocIdentifierName(); + while (parseOptional(25 /* DotToken */)) { + const name = parseJSDocIdentifierName(); + node = finishNode(factoryCreatePropertyAccessExpression(node, name), pos); + } + return node; + } + function parseSimpleTag(start2, createTag, tagName, margin, indentText) { + return finishNode(createTag(tagName, parseTrailingTagComments(start2, getNodePos(), margin, indentText)), start2); + } + function parseThisTag(start2, tagName, margin, indentText) { + const typeExpression = parseJSDocTypeExpression( + /*mayOmitBraces*/ + true + ); + skipWhitespace(); + return finishNode(factory2.createJSDocThisTag(tagName, typeExpression, parseTrailingTagComments(start2, getNodePos(), margin, indentText)), start2); + } + function parseEnumTag(start2, tagName, margin, indentText) { + const typeExpression = parseJSDocTypeExpression( + /*mayOmitBraces*/ + true + ); + skipWhitespace(); + return finishNode(factory2.createJSDocEnumTag(tagName, typeExpression, parseTrailingTagComments(start2, getNodePos(), margin, indentText)), start2); + } + function parseTypedefTag(start2, tagName, indent3, indentText) { + let typeExpression = tryParseTypeExpression(); + skipWhitespaceOrAsterisk(); + const fullName = parseJSDocTypeNameWithNamespace(); + skipWhitespace(); + let comment = parseTagComments(indent3); + let end2; + if (!typeExpression || isObjectOrObjectArrayTypeReference(typeExpression.type)) { + let child; + let childTypeTag; + let jsDocPropertyTags; + let hasChildren = false; + while (child = tryParse(() => parseChildPropertyTag(indent3))) { + if (child.kind === 346 /* JSDocTemplateTag */) { + break; + } + hasChildren = true; + if (child.kind === 345 /* JSDocTypeTag */) { + if (childTypeTag) { + const lastError = parseErrorAtCurrentToken(Diagnostics.A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags); + if (lastError) { + addRelatedInfo(lastError, createDetachedDiagnostic(fileName, sourceText, 0, 0, Diagnostics.The_tag_was_first_specified_here)); + } + break; + } else { + childTypeTag = child; + } + } else { + jsDocPropertyTags = append(jsDocPropertyTags, child); + } + } + if (hasChildren) { + const isArrayType = typeExpression && typeExpression.type.kind === 189 /* ArrayType */; + const jsdocTypeLiteral = factory2.createJSDocTypeLiteral(jsDocPropertyTags, isArrayType); + typeExpression = childTypeTag && childTypeTag.typeExpression && !isObjectOrObjectArrayTypeReference(childTypeTag.typeExpression.type) ? childTypeTag.typeExpression : finishNode(jsdocTypeLiteral, start2); + end2 = typeExpression.end; + } + } + end2 = end2 || comment !== void 0 ? getNodePos() : (fullName ?? typeExpression ?? tagName).end; + if (!comment) { + comment = parseTrailingTagComments(start2, end2, indent3, indentText); + } + const typedefTag = factory2.createJSDocTypedefTag(tagName, typeExpression, fullName, comment); + return finishNode(typedefTag, start2, end2); + } + function parseJSDocTypeNameWithNamespace(nested) { + const start2 = scanner2.getTokenStart(); + if (!tokenIsIdentifierOrKeyword(token())) { + return void 0; + } + const typeNameOrNamespaceName = parseJSDocIdentifierName(); + if (parseOptional(25 /* DotToken */)) { + const body = parseJSDocTypeNameWithNamespace( + /*nested*/ + true + ); + const jsDocNamespaceNode = factory2.createModuleDeclaration( + /*modifiers*/ + void 0, + typeNameOrNamespaceName, + body, + nested ? 8 /* NestedNamespace */ : void 0 + ); + return finishNode(jsDocNamespaceNode, start2); + } + if (nested) { + typeNameOrNamespaceName.flags |= 4096 /* IdentifierIsInJSDocNamespace */; + } + return typeNameOrNamespaceName; + } + function parseCallbackTagParameters(indent3) { + const pos = getNodePos(); + let child; + let parameters; + while (child = tryParse(() => parseChildParameterOrPropertyTag(4 /* CallbackParameter */, indent3))) { + if (child.kind === 346 /* JSDocTemplateTag */) { + parseErrorAtRange(child.tagName, Diagnostics.A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag); + break; + } + parameters = append(parameters, child); + } + return createNodeArray(parameters || [], pos); + } + function parseJSDocSignature(start2, indent3) { + const parameters = parseCallbackTagParameters(indent3); + const returnTag = tryParse(() => { + if (parseOptionalJsdoc(60 /* AtToken */)) { + const tag = parseTag(indent3); + if (tag && tag.kind === 343 /* JSDocReturnTag */) { + return tag; + } + } + }); + return finishNode(factory2.createJSDocSignature( + /*typeParameters*/ + void 0, + parameters, + returnTag + ), start2); + } + function parseCallbackTag(start2, tagName, indent3, indentText) { + const fullName = parseJSDocTypeNameWithNamespace(); + skipWhitespace(); + let comment = parseTagComments(indent3); + const typeExpression = parseJSDocSignature(start2, indent3); + if (!comment) { + comment = parseTrailingTagComments(start2, getNodePos(), indent3, indentText); + } + const end2 = comment !== void 0 ? getNodePos() : typeExpression.end; + return finishNode(factory2.createJSDocCallbackTag(tagName, typeExpression, fullName, comment), start2, end2); + } + function parseOverloadTag(start2, tagName, indent3, indentText) { + skipWhitespace(); + let comment = parseTagComments(indent3); + const typeExpression = parseJSDocSignature(start2, indent3); + if (!comment) { + comment = parseTrailingTagComments(start2, getNodePos(), indent3, indentText); + } + const end2 = comment !== void 0 ? getNodePos() : typeExpression.end; + return finishNode(factory2.createJSDocOverloadTag(tagName, typeExpression, comment), start2, end2); + } + function escapedTextsEqual(a, b) { + while (!isIdentifier(a) || !isIdentifier(b)) { + if (!isIdentifier(a) && !isIdentifier(b) && a.right.escapedText === b.right.escapedText) { + a = a.left; + b = b.left; + } else { + return false; + } + } + return a.escapedText === b.escapedText; + } + function parseChildPropertyTag(indent3) { + return parseChildParameterOrPropertyTag(1 /* Property */, indent3); + } + function parseChildParameterOrPropertyTag(target, indent3, name) { + let canParseTag = true; + let seenAsterisk = false; + while (true) { + switch (nextTokenJSDoc()) { + case 60 /* AtToken */: + if (canParseTag) { + const child = tryParseChildTag(target, indent3); + if (child && (child.kind === 342 /* JSDocParameterTag */ || child.kind === 349 /* JSDocPropertyTag */) && name && (isIdentifier(child.name) || !escapedTextsEqual(name, child.name.left))) { + return false; + } + return child; + } + seenAsterisk = false; + break; + case 4 /* NewLineTrivia */: + canParseTag = true; + seenAsterisk = false; + break; + case 42 /* AsteriskToken */: + if (seenAsterisk) { + canParseTag = false; + } + seenAsterisk = true; + break; + case 80 /* Identifier */: + canParseTag = false; + break; + case 1 /* EndOfFileToken */: + return false; + } + } + } + function tryParseChildTag(target, indent3) { + Debug.assert(token() === 60 /* AtToken */); + const start2 = scanner2.getTokenFullStart(); + nextTokenJSDoc(); + const tagName = parseJSDocIdentifierName(); + const indentText = skipWhitespaceOrAsterisk(); + let t; + switch (tagName.escapedText) { + case "type": + return target === 1 /* Property */ && parseTypeTag(start2, tagName); + case "prop": + case "property": + t = 1 /* Property */; + break; + case "arg": + case "argument": + case "param": + t = 2 /* Parameter */ | 4 /* CallbackParameter */; + break; + case "template": + return parseTemplateTag(start2, tagName, indent3, indentText); + case "this": + return parseThisTag(start2, tagName, indent3, indentText); + default: + return false; + } + if (!(target & t)) { + return false; + } + return parseParameterOrPropertyTag(start2, tagName, target, indent3); + } + function parseTemplateTagTypeParameter() { + const typeParameterPos = getNodePos(); + const isBracketed = parseOptionalJsdoc(23 /* OpenBracketToken */); + if (isBracketed) { + skipWhitespace(); + } + const modifiers = parseModifiers( + /*allowDecorators*/ + false, + /*permitConstAsModifier*/ + true + ); + const name = parseJSDocIdentifierName(Diagnostics.Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces); + let defaultType; + if (isBracketed) { + skipWhitespace(); + parseExpected(64 /* EqualsToken */); + defaultType = doInsideOfContext(16777216 /* JSDoc */, parseJSDocType); + parseExpected(24 /* CloseBracketToken */); + } + if (nodeIsMissing(name)) { + return void 0; + } + return finishNode(factory2.createTypeParameterDeclaration( + modifiers, + name, + /*constraint*/ + void 0, + defaultType + ), typeParameterPos); + } + function parseTemplateTagTypeParameters() { + const pos = getNodePos(); + const typeParameters = []; + do { + skipWhitespace(); + const node = parseTemplateTagTypeParameter(); + if (node !== void 0) { + typeParameters.push(node); + } + skipWhitespaceOrAsterisk(); + } while (parseOptionalJsdoc(28 /* CommaToken */)); + return createNodeArray(typeParameters, pos); + } + function parseTemplateTag(start2, tagName, indent3, indentText) { + const constraint = token() === 19 /* OpenBraceToken */ ? parseJSDocTypeExpression() : void 0; + const typeParameters = parseTemplateTagTypeParameters(); + return finishNode(factory2.createJSDocTemplateTag(tagName, constraint, typeParameters, parseTrailingTagComments(start2, getNodePos(), indent3, indentText)), start2); + } + function parseOptionalJsdoc(t) { + if (token() === t) { + nextTokenJSDoc(); + return true; + } + return false; + } + function parseJSDocEntityName() { + let entity = parseJSDocIdentifierName(); + if (parseOptional(23 /* OpenBracketToken */)) { + parseExpected(24 /* CloseBracketToken */); + } + while (parseOptional(25 /* DotToken */)) { + const name = parseJSDocIdentifierName(); + if (parseOptional(23 /* OpenBracketToken */)) { + parseExpected(24 /* CloseBracketToken */); + } + entity = createQualifiedName(entity, name); + } + return entity; + } + function parseJSDocIdentifierName(message) { + if (!tokenIsIdentifierOrKeyword(token())) { + return createMissingNode( + 80 /* Identifier */, + /*reportAtCurrentPosition*/ + !message, + message || Diagnostics.Identifier_expected + ); + } + identifierCount++; + const start2 = scanner2.getTokenStart(); + const end2 = scanner2.getTokenEnd(); + const originalKeywordKind = token(); + const text = internIdentifier(scanner2.getTokenValue()); + const result2 = finishNode(factoryCreateIdentifier(text, originalKeywordKind), start2, end2); + nextTokenJSDoc(); + return result2; + } + } + })(JSDocParser = Parser2.JSDocParser || (Parser2.JSDocParser = {})); +})(Parser || (Parser = {})); +var incrementallyParsedFiles = /* @__PURE__ */ new WeakSet(); +function markAsIncrementallyParsed(sourceFile) { + if (incrementallyParsedFiles.has(sourceFile)) { + Debug.fail("Source file has already been incrementally parsed"); + } + incrementallyParsedFiles.add(sourceFile); +} +var intersectingChangeSet = /* @__PURE__ */ new WeakSet(); +function intersectsIncrementalChange(node) { + return intersectingChangeSet.has(node); +} +function markAsIntersectingIncrementalChange(node) { + intersectingChangeSet.add(node); +} +var IncrementalParser; +((IncrementalParser2) => { + function updateSourceFile2(sourceFile, newText, textChangeRange, aggressiveChecks) { + aggressiveChecks = aggressiveChecks || Debug.shouldAssert(2 /* Aggressive */); + checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks); + if (textChangeRangeIsUnchanged(textChangeRange)) { + return sourceFile; + } + if (sourceFile.statements.length === 0) { + return Parser.parseSourceFile( + sourceFile.fileName, + newText, + sourceFile.languageVersion, + /*syntaxCursor*/ + void 0, + /*setParentNodes*/ + true, + sourceFile.scriptKind, + sourceFile.setExternalModuleIndicator, + sourceFile.jsDocParsingMode + ); + } + markAsIncrementallyParsed(sourceFile); + Parser.fixupParentReferences(sourceFile); + const oldText = sourceFile.text; + const syntaxCursor = createSyntaxCursor(sourceFile); + const changeRange = extendToAffectedRange(sourceFile, textChangeRange); + checkChangeRange(sourceFile, newText, changeRange, aggressiveChecks); + Debug.assert(changeRange.span.start <= textChangeRange.span.start); + Debug.assert(textSpanEnd(changeRange.span) === textSpanEnd(textChangeRange.span)); + Debug.assert(textSpanEnd(textChangeRangeNewSpan(changeRange)) === textSpanEnd(textChangeRangeNewSpan(textChangeRange))); + const delta = textChangeRangeNewSpan(changeRange).length - changeRange.span.length; + updateTokenPositionsAndMarkElements(sourceFile, changeRange.span.start, textSpanEnd(changeRange.span), textSpanEnd(textChangeRangeNewSpan(changeRange)), delta, oldText, newText, aggressiveChecks); + const result = Parser.parseSourceFile( + sourceFile.fileName, + newText, + sourceFile.languageVersion, + syntaxCursor, + /*setParentNodes*/ + true, + sourceFile.scriptKind, + sourceFile.setExternalModuleIndicator, + sourceFile.jsDocParsingMode + ); + result.commentDirectives = getNewCommentDirectives( + sourceFile.commentDirectives, + result.commentDirectives, + changeRange.span.start, + textSpanEnd(changeRange.span), + delta, + oldText, + newText, + aggressiveChecks + ); + result.impliedNodeFormat = sourceFile.impliedNodeFormat; + transferSourceFileChildren(sourceFile, result); + return result; + } + IncrementalParser2.updateSourceFile = updateSourceFile2; + function getNewCommentDirectives(oldDirectives, newDirectives, changeStart, changeRangeOldEnd, delta, oldText, newText, aggressiveChecks) { + if (!oldDirectives) return newDirectives; + let commentDirectives; + let addedNewlyScannedDirectives = false; + for (const directive of oldDirectives) { + const { range, type } = directive; + if (range.end < changeStart) { + commentDirectives = append(commentDirectives, directive); + } else if (range.pos > changeRangeOldEnd) { + addNewlyScannedDirectives(); + const updatedDirective = { + range: { pos: range.pos + delta, end: range.end + delta }, + type + }; + commentDirectives = append(commentDirectives, updatedDirective); + if (aggressiveChecks) { + Debug.assert(oldText.substring(range.pos, range.end) === newText.substring(updatedDirective.range.pos, updatedDirective.range.end)); + } + } + } + addNewlyScannedDirectives(); + return commentDirectives; + function addNewlyScannedDirectives() { + if (addedNewlyScannedDirectives) return; + addedNewlyScannedDirectives = true; + if (!commentDirectives) { + commentDirectives = newDirectives; + } else if (newDirectives) { + commentDirectives.push(...newDirectives); + } + } + } + function moveElementEntirelyPastChangeRange(element, origSourceFile, isArray2, delta, oldText, newText, aggressiveChecks) { + if (isArray2) { + visitArray2(element); + } else { + visitNode3(element); + } + return; + function visitNode3(node) { + let text = ""; + if (aggressiveChecks && shouldCheckNode(node)) { + text = oldText.substring(node.pos, node.end); + } + unsetNodeChildren(node, origSourceFile); + setTextRangePosEnd(node, node.pos + delta, node.end + delta); + if (aggressiveChecks && shouldCheckNode(node)) { + Debug.assert(text === newText.substring(node.pos, node.end)); + } + forEachChild(node, visitNode3, visitArray2); + if (hasJSDocNodes(node)) { + for (const jsDocComment of node.jsDoc) { + visitNode3(jsDocComment); + } + } + checkNodePositions(node, aggressiveChecks); + } + function visitArray2(array) { + setTextRangePosEnd(array, array.pos + delta, array.end + delta); + for (const node of array) { + visitNode3(node); + } + } + } + function shouldCheckNode(node) { + switch (node.kind) { + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + case 80 /* Identifier */: + return true; + } + return false; + } + function adjustIntersectingElement(element, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta) { + Debug.assert(element.end >= changeStart, "Adjusting an element that was entirely before the change range"); + Debug.assert(element.pos <= changeRangeOldEnd, "Adjusting an element that was entirely after the change range"); + Debug.assert(element.pos <= element.end); + const pos = Math.min(element.pos, changeRangeNewEnd); + const end = element.end >= changeRangeOldEnd ? ( + // Element ends after the change range. Always adjust the end pos. + element.end + delta + ) : ( + // Element ends in the change range. The element will keep its position if + // possible. Or Move backward to the new-end if it's in the 'Y' range. + Math.min(element.end, changeRangeNewEnd) + ); + Debug.assert(pos <= end); + if (element.parent) { + const parent2 = element.parent; + Debug.assertGreaterThanOrEqual(pos, parent2.pos); + Debug.assertLessThanOrEqual(end, parent2.end); + } + setTextRangePosEnd(element, pos, end); + } + function checkNodePositions(node, aggressiveChecks) { + if (aggressiveChecks) { + let pos = node.pos; + const visitNode3 = (child) => { + Debug.assert(child.pos >= pos); + pos = child.end; + }; + if (hasJSDocNodes(node)) { + for (const jsDocComment of node.jsDoc) { + visitNode3(jsDocComment); + } + } + forEachChild(node, visitNode3); + Debug.assert(pos <= node.end); + } + } + function updateTokenPositionsAndMarkElements(sourceFile, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta, oldText, newText, aggressiveChecks) { + visitNode3(sourceFile); + return; + function visitNode3(child) { + Debug.assert(child.pos <= child.end); + if (child.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange( + child, + sourceFile, + /*isArray*/ + false, + delta, + oldText, + newText, + aggressiveChecks + ); + return; + } + const fullEnd = child.end; + if (fullEnd >= changeStart) { + markAsIntersectingIncrementalChange(child); + unsetNodeChildren(child, sourceFile); + adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + forEachChild(child, visitNode3, visitArray2); + if (hasJSDocNodes(child)) { + for (const jsDocComment of child.jsDoc) { + visitNode3(jsDocComment); + } + } + checkNodePositions(child, aggressiveChecks); + return; + } + Debug.assert(fullEnd < changeStart); + } + function visitArray2(array) { + Debug.assert(array.pos <= array.end); + if (array.pos > changeRangeOldEnd) { + moveElementEntirelyPastChangeRange( + array, + sourceFile, + /*isArray*/ + true, + delta, + oldText, + newText, + aggressiveChecks + ); + return; + } + const fullEnd = array.end; + if (fullEnd >= changeStart) { + markAsIntersectingIncrementalChange(array); + adjustIntersectingElement(array, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); + for (const node of array) { + visitNode3(node); + } + return; + } + Debug.assert(fullEnd < changeStart); + } + } + function extendToAffectedRange(sourceFile, changeRange) { + const maxLookahead = 1; + let start = changeRange.span.start; + for (let i = 0; start > 0 && i <= maxLookahead; i++) { + const nearestNode = findNearestNodeStartingBeforeOrAtPosition(sourceFile, start); + Debug.assert(nearestNode.pos <= start); + const position = nearestNode.pos; + start = Math.max(0, position - 1); + } + const finalSpan = createTextSpanFromBounds(start, textSpanEnd(changeRange.span)); + const finalLength = changeRange.newLength + (changeRange.span.start - start); + return createTextChangeRange(finalSpan, finalLength); + } + function findNearestNodeStartingBeforeOrAtPosition(sourceFile, position) { + let bestResult = sourceFile; + let lastNodeEntirelyBeforePosition; + forEachChild(sourceFile, visit); + if (lastNodeEntirelyBeforePosition) { + const lastChildOfLastEntireNodeBeforePosition = getLastDescendant(lastNodeEntirelyBeforePosition); + if (lastChildOfLastEntireNodeBeforePosition.pos > bestResult.pos) { + bestResult = lastChildOfLastEntireNodeBeforePosition; + } + } + return bestResult; + function getLastDescendant(node) { + while (true) { + const lastChild = getLastChild(node); + if (lastChild) { + node = lastChild; + } else { + return node; + } + } + } + function visit(child) { + if (nodeIsMissing(child)) { + return; + } + if (child.pos <= position) { + if (child.pos >= bestResult.pos) { + bestResult = child; + } + if (position < child.end) { + forEachChild(child, visit); + return true; + } else { + Debug.assert(child.end <= position); + lastNodeEntirelyBeforePosition = child; + } + } else { + Debug.assert(child.pos > position); + return true; + } + } + } + function checkChangeRange(sourceFile, newText, textChangeRange, aggressiveChecks) { + const oldText = sourceFile.text; + if (textChangeRange) { + Debug.assert(oldText.length - textChangeRange.span.length + textChangeRange.newLength === newText.length); + if (aggressiveChecks || Debug.shouldAssert(3 /* VeryAggressive */)) { + const oldTextPrefix = oldText.substr(0, textChangeRange.span.start); + const newTextPrefix = newText.substr(0, textChangeRange.span.start); + Debug.assert(oldTextPrefix === newTextPrefix); + const oldTextSuffix = oldText.substring(textSpanEnd(textChangeRange.span), oldText.length); + const newTextSuffix = newText.substring(textSpanEnd(textChangeRangeNewSpan(textChangeRange)), newText.length); + Debug.assert(oldTextSuffix === newTextSuffix); + } + } + } + function createSyntaxCursor(sourceFile) { + let currentArray = sourceFile.statements; + let currentArrayIndex = 0; + Debug.assert(currentArrayIndex < currentArray.length); + let current = currentArray[currentArrayIndex]; + let lastQueriedPosition = -1 /* Value */; + return { + currentNode(position) { + if (position !== lastQueriedPosition) { + if (current && current.end === position && currentArrayIndex < currentArray.length - 1) { + currentArrayIndex++; + current = currentArray[currentArrayIndex]; + } + if (!current || current.pos !== position) { + findHighestListElementThatStartsAtPosition(position); + } + } + lastQueriedPosition = position; + Debug.assert(!current || current.pos === position); + return current; + } + }; + function findHighestListElementThatStartsAtPosition(position) { + currentArray = void 0; + currentArrayIndex = -1 /* Value */; + current = void 0; + forEachChild(sourceFile, visitNode3, visitArray2); + return; + function visitNode3(node) { + if (position >= node.pos && position < node.end) { + forEachChild(node, visitNode3, visitArray2); + return true; + } + return false; + } + function visitArray2(array) { + if (position >= array.pos && position < array.end) { + for (let i = 0; i < array.length; i++) { + const child = array[i]; + if (child) { + if (child.pos === position) { + currentArray = array; + currentArrayIndex = i; + current = child; + return true; + } else { + if (child.pos < position && position < child.end) { + forEachChild(child, visitNode3, visitArray2); + return true; + } + } + } + } + } + return false; + } + } + } + IncrementalParser2.createSyntaxCursor = createSyntaxCursor; + let InvalidPosition; + ((InvalidPosition2) => { + InvalidPosition2[InvalidPosition2["Value"] = -1] = "Value"; + })(InvalidPosition || (InvalidPosition = {})); +})(IncrementalParser || (IncrementalParser = {})); +function isDeclarationFileName(fileName) { + return getDeclarationFileExtension(fileName) !== void 0; +} +function getDeclarationFileExtension(fileName) { + const standardExtension = getAnyExtensionFromPath( + fileName, + supportedDeclarationExtensions, + /*ignoreCase*/ + false + ); + if (standardExtension) { + return standardExtension; + } + if (fileExtensionIs(fileName, ".ts" /* Ts */)) { + const baseName = getBaseFileName(fileName); + const index = baseName.lastIndexOf(".d."); + if (index >= 0) { + return baseName.substring(index); + } + } + return void 0; +} +function parseResolutionMode(mode, pos, end, reportDiagnostic) { + if (!mode) { + return void 0; + } + if (mode === "import") { + return 99 /* ESNext */; + } + if (mode === "require") { + return 1 /* CommonJS */; + } + reportDiagnostic(pos, end - pos, Diagnostics.resolution_mode_should_be_either_require_or_import); + return void 0; +} +function processCommentPragmas(context, sourceText) { + const pragmas = []; + for (const range of getLeadingCommentRanges(sourceText, 0) || emptyArray) { + const comment = sourceText.substring(range.pos, range.end); + extractPragmas(pragmas, range, comment); + } + context.pragmas = /* @__PURE__ */ new Map(); + for (const pragma of pragmas) { + if (context.pragmas.has(pragma.name)) { + const currentValue = context.pragmas.get(pragma.name); + if (currentValue instanceof Array) { + currentValue.push(pragma.args); + } else { + context.pragmas.set(pragma.name, [currentValue, pragma.args]); + } + continue; + } + context.pragmas.set(pragma.name, pragma.args); + } +} +function processPragmasIntoFields(context, reportDiagnostic) { + context.checkJsDirective = void 0; + context.referencedFiles = []; + context.typeReferenceDirectives = []; + context.libReferenceDirectives = []; + context.amdDependencies = []; + context.hasNoDefaultLib = false; + context.pragmas.forEach((entryOrList, key) => { + switch (key) { + case "reference": { + const referencedFiles = context.referencedFiles; + const typeReferenceDirectives = context.typeReferenceDirectives; + const libReferenceDirectives = context.libReferenceDirectives; + forEach(toArray(entryOrList), (arg) => { + const { types, lib, path, ["resolution-mode"]: res, preserve: _preserve } = arg.arguments; + const preserve = _preserve === "true" ? true : void 0; + if (arg.arguments["no-default-lib"] === "true") { + context.hasNoDefaultLib = true; + } else if (types) { + const parsed = parseResolutionMode(res, types.pos, types.end, reportDiagnostic); + typeReferenceDirectives.push({ pos: types.pos, end: types.end, fileName: types.value, ...parsed ? { resolutionMode: parsed } : {}, ...preserve ? { preserve } : {} }); + } else if (lib) { + libReferenceDirectives.push({ pos: lib.pos, end: lib.end, fileName: lib.value, ...preserve ? { preserve } : {} }); + } else if (path) { + referencedFiles.push({ pos: path.pos, end: path.end, fileName: path.value, ...preserve ? { preserve } : {} }); + } else { + reportDiagnostic(arg.range.pos, arg.range.end - arg.range.pos, Diagnostics.Invalid_reference_directive_syntax); + } + }); + break; + } + case "amd-dependency": { + context.amdDependencies = map( + toArray(entryOrList), + (x) => ({ name: x.arguments.name, path: x.arguments.path }) + ); + break; + } + case "amd-module": { + if (entryOrList instanceof Array) { + for (const entry of entryOrList) { + if (context.moduleName) { + reportDiagnostic(entry.range.pos, entry.range.end - entry.range.pos, Diagnostics.An_AMD_module_cannot_have_multiple_name_assignments); + } + context.moduleName = entry.arguments.name; + } + } else { + context.moduleName = entryOrList.arguments.name; + } + break; + } + case "ts-nocheck": + case "ts-check": { + forEach(toArray(entryOrList), (entry) => { + if (!context.checkJsDirective || entry.range.pos > context.checkJsDirective.pos) { + context.checkJsDirective = { + enabled: key === "ts-check", + end: entry.range.end, + pos: entry.range.pos + }; + } + }); + break; + } + case "jsx": + case "jsxfrag": + case "jsximportsource": + case "jsxruntime": + return; + // Accessed directly + default: + Debug.fail("Unhandled pragma kind"); + } + }); +} +var namedArgRegExCache = /* @__PURE__ */ new Map(); +function getNamedArgRegEx(name) { + if (namedArgRegExCache.has(name)) { + return namedArgRegExCache.get(name); + } + const result = new RegExp(`(\\s${name}\\s*=\\s*)(?:(?:'([^']*)')|(?:"([^"]*)"))`, "im"); + namedArgRegExCache.set(name, result); + return result; +} +var tripleSlashXMLCommentStartRegEx = /^\/\/\/\s*<(\S+)\s.*?\/>/m; +var singleLinePragmaRegEx = /^\/\/\/?\s*@([^\s:]+)((?:[^\S\r\n]|:).*)?$/m; +function extractPragmas(pragmas, range, text) { + const tripleSlash = range.kind === 2 /* SingleLineCommentTrivia */ && tripleSlashXMLCommentStartRegEx.exec(text); + if (tripleSlash) { + const name = tripleSlash[1].toLowerCase(); + const pragma = commentPragmas[name]; + if (!pragma || !(pragma.kind & 1 /* TripleSlashXML */)) { + return; + } + if (pragma.args) { + const argument = {}; + for (const arg of pragma.args) { + const matcher = getNamedArgRegEx(arg.name); + const matchResult = matcher.exec(text); + if (!matchResult && !arg.optional) { + return; + } else if (matchResult) { + const value = matchResult[2] || matchResult[3]; + if (arg.captureSpan) { + const startPos = range.pos + matchResult.index + matchResult[1].length + 1; + argument[arg.name] = { + value, + pos: startPos, + end: startPos + value.length + }; + } else { + argument[arg.name] = value; + } + } + } + pragmas.push({ name, args: { arguments: argument, range } }); + } else { + pragmas.push({ name, args: { arguments: {}, range } }); + } + return; + } + const singleLine = range.kind === 2 /* SingleLineCommentTrivia */ && singleLinePragmaRegEx.exec(text); + if (singleLine) { + return addPragmaForMatch(pragmas, range, 2 /* SingleLine */, singleLine); + } + if (range.kind === 3 /* MultiLineCommentTrivia */) { + const multiLinePragmaRegEx = /@(\S+)(\s+(?:\S.*)?)?$/gm; + let multiLineMatch; + while (multiLineMatch = multiLinePragmaRegEx.exec(text)) { + addPragmaForMatch(pragmas, range, 4 /* MultiLine */, multiLineMatch); + } + } +} +function addPragmaForMatch(pragmas, range, kind, match) { + if (!match) return; + const name = match[1].toLowerCase(); + const pragma = commentPragmas[name]; + if (!pragma || !(pragma.kind & kind)) { + return; + } + const args = match[2]; + const argument = getNamedPragmaArguments(pragma, args); + if (argument === "fail") return; + pragmas.push({ name, args: { arguments: argument, range } }); + return; +} +function getNamedPragmaArguments(pragma, text) { + if (!text) return {}; + if (!pragma.args) return {}; + const args = text.trim().split(/\s+/); + const argMap = {}; + for (let i = 0; i < pragma.args.length; i++) { + const argument = pragma.args[i]; + if (!args[i] && !argument.optional) { + return "fail"; + } + if (argument.captureSpan) { + return Debug.fail("Capture spans not yet implemented for non-xml pragmas"); + } + argMap[argument.name] = args[i]; + } + return argMap; +} +function tagNamesAreEquivalent(lhs, rhs) { + if (lhs.kind !== rhs.kind) { + return false; + } + if (lhs.kind === 80 /* Identifier */) { + return lhs.escapedText === rhs.escapedText; + } + if (lhs.kind === 110 /* ThisKeyword */) { + return true; + } + if (lhs.kind === 296 /* JsxNamespacedName */) { + return lhs.namespace.escapedText === rhs.namespace.escapedText && lhs.name.escapedText === rhs.name.escapedText; + } + return lhs.name.escapedText === rhs.name.escapedText && tagNamesAreEquivalent(lhs.expression, rhs.expression); +} + +// src/compiler/commandLineParser.ts +var compileOnSaveCommandLineOption = { + name: "compileOnSave", + type: "boolean", + defaultValueDescription: false +}; +var jsxOptionMap = new Map(Object.entries({ + "preserve": 1 /* Preserve */, + "react-native": 3 /* ReactNative */, + "react-jsx": 4 /* ReactJSX */, + "react-jsxdev": 5 /* ReactJSXDev */, + "react": 2 /* React */ +})); +var inverseJsxOptionMap = new Map(mapIterator(jsxOptionMap.entries(), ([key, value]) => ["" + value, key])); +var libEntries = [ + // JavaScript only + ["es5", "lib.es5.d.ts"], + ["es6", "lib.es2015.d.ts"], + ["es2015", "lib.es2015.d.ts"], + ["es7", "lib.es2016.d.ts"], + ["es2016", "lib.es2016.d.ts"], + ["es2017", "lib.es2017.d.ts"], + ["es2018", "lib.es2018.d.ts"], + ["es2019", "lib.es2019.d.ts"], + ["es2020", "lib.es2020.d.ts"], + ["es2021", "lib.es2021.d.ts"], + ["es2022", "lib.es2022.d.ts"], + ["es2023", "lib.es2023.d.ts"], + ["es2024", "lib.es2024.d.ts"], + ["esnext", "lib.esnext.d.ts"], + // Host only + ["dom", "lib.dom.d.ts"], + ["dom.iterable", "lib.dom.iterable.d.ts"], + ["dom.asynciterable", "lib.dom.asynciterable.d.ts"], + ["webworker", "lib.webworker.d.ts"], + ["webworker.importscripts", "lib.webworker.importscripts.d.ts"], + ["webworker.iterable", "lib.webworker.iterable.d.ts"], + ["webworker.asynciterable", "lib.webworker.asynciterable.d.ts"], + ["scripthost", "lib.scripthost.d.ts"], + // ES2015 Or ESNext By-feature options + ["es2015.core", "lib.es2015.core.d.ts"], + ["es2015.collection", "lib.es2015.collection.d.ts"], + ["es2015.generator", "lib.es2015.generator.d.ts"], + ["es2015.iterable", "lib.es2015.iterable.d.ts"], + ["es2015.promise", "lib.es2015.promise.d.ts"], + ["es2015.proxy", "lib.es2015.proxy.d.ts"], + ["es2015.reflect", "lib.es2015.reflect.d.ts"], + ["es2015.symbol", "lib.es2015.symbol.d.ts"], + ["es2015.symbol.wellknown", "lib.es2015.symbol.wellknown.d.ts"], + ["es2016.array.include", "lib.es2016.array.include.d.ts"], + ["es2016.intl", "lib.es2016.intl.d.ts"], + ["es2017.arraybuffer", "lib.es2017.arraybuffer.d.ts"], + ["es2017.date", "lib.es2017.date.d.ts"], + ["es2017.object", "lib.es2017.object.d.ts"], + ["es2017.sharedmemory", "lib.es2017.sharedmemory.d.ts"], + ["es2017.string", "lib.es2017.string.d.ts"], + ["es2017.intl", "lib.es2017.intl.d.ts"], + ["es2017.typedarrays", "lib.es2017.typedarrays.d.ts"], + ["es2018.asyncgenerator", "lib.es2018.asyncgenerator.d.ts"], + ["es2018.asynciterable", "lib.es2018.asynciterable.d.ts"], + ["es2018.intl", "lib.es2018.intl.d.ts"], + ["es2018.promise", "lib.es2018.promise.d.ts"], + ["es2018.regexp", "lib.es2018.regexp.d.ts"], + ["es2019.array", "lib.es2019.array.d.ts"], + ["es2019.object", "lib.es2019.object.d.ts"], + ["es2019.string", "lib.es2019.string.d.ts"], + ["es2019.symbol", "lib.es2019.symbol.d.ts"], + ["es2019.intl", "lib.es2019.intl.d.ts"], + ["es2020.bigint", "lib.es2020.bigint.d.ts"], + ["es2020.date", "lib.es2020.date.d.ts"], + ["es2020.promise", "lib.es2020.promise.d.ts"], + ["es2020.sharedmemory", "lib.es2020.sharedmemory.d.ts"], + ["es2020.string", "lib.es2020.string.d.ts"], + ["es2020.symbol.wellknown", "lib.es2020.symbol.wellknown.d.ts"], + ["es2020.intl", "lib.es2020.intl.d.ts"], + ["es2020.number", "lib.es2020.number.d.ts"], + ["es2021.promise", "lib.es2021.promise.d.ts"], + ["es2021.string", "lib.es2021.string.d.ts"], + ["es2021.weakref", "lib.es2021.weakref.d.ts"], + ["es2021.intl", "lib.es2021.intl.d.ts"], + ["es2022.array", "lib.es2022.array.d.ts"], + ["es2022.error", "lib.es2022.error.d.ts"], + ["es2022.intl", "lib.es2022.intl.d.ts"], + ["es2022.object", "lib.es2022.object.d.ts"], + ["es2022.string", "lib.es2022.string.d.ts"], + ["es2022.regexp", "lib.es2022.regexp.d.ts"], + ["es2023.array", "lib.es2023.array.d.ts"], + ["es2023.collection", "lib.es2023.collection.d.ts"], + ["es2023.intl", "lib.es2023.intl.d.ts"], + ["es2024.arraybuffer", "lib.es2024.arraybuffer.d.ts"], + ["es2024.collection", "lib.es2024.collection.d.ts"], + ["es2024.object", "lib.es2024.object.d.ts"], + ["es2024.promise", "lib.es2024.promise.d.ts"], + ["es2024.regexp", "lib.es2024.regexp.d.ts"], + ["es2024.sharedmemory", "lib.es2024.sharedmemory.d.ts"], + ["es2024.string", "lib.es2024.string.d.ts"], + ["esnext.array", "lib.es2023.array.d.ts"], + ["esnext.collection", "lib.esnext.collection.d.ts"], + ["esnext.symbol", "lib.es2019.symbol.d.ts"], + ["esnext.asynciterable", "lib.es2018.asynciterable.d.ts"], + ["esnext.intl", "lib.esnext.intl.d.ts"], + ["esnext.disposable", "lib.esnext.disposable.d.ts"], + ["esnext.bigint", "lib.es2020.bigint.d.ts"], + ["esnext.string", "lib.es2022.string.d.ts"], + ["esnext.promise", "lib.es2024.promise.d.ts"], + ["esnext.weakref", "lib.es2021.weakref.d.ts"], + ["esnext.decorators", "lib.esnext.decorators.d.ts"], + ["esnext.object", "lib.es2024.object.d.ts"], + ["esnext.array", "lib.esnext.array.d.ts"], + ["esnext.regexp", "lib.es2024.regexp.d.ts"], + ["esnext.string", "lib.es2024.string.d.ts"], + ["esnext.iterator", "lib.esnext.iterator.d.ts"], + ["esnext.promise", "lib.esnext.promise.d.ts"], + ["esnext.float16", "lib.esnext.float16.d.ts"], + ["esnext.error", "lib.esnext.error.d.ts"], + ["esnext.sharedmemory", "lib.esnext.sharedmemory.d.ts"], + ["decorators", "lib.decorators.d.ts"], + ["decorators.legacy", "lib.decorators.legacy.d.ts"] +]; +var libs = libEntries.map((entry) => entry[0]); +var libMap = new Map(libEntries); +var optionsForWatch = [ + { + name: "watchFile", + type: new Map(Object.entries({ + fixedpollinginterval: 0 /* FixedPollingInterval */, + prioritypollinginterval: 1 /* PriorityPollingInterval */, + dynamicprioritypolling: 2 /* DynamicPriorityPolling */, + fixedchunksizepolling: 3 /* FixedChunkSizePolling */, + usefsevents: 4 /* UseFsEvents */, + usefseventsonparentdirectory: 5 /* UseFsEventsOnParentDirectory */ + })), + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Specify_how_the_TypeScript_watch_mode_works, + defaultValueDescription: 4 /* UseFsEvents */ + }, + { + name: "watchDirectory", + type: new Map(Object.entries({ + usefsevents: 0 /* UseFsEvents */, + fixedpollinginterval: 1 /* FixedPollingInterval */, + dynamicprioritypolling: 2 /* DynamicPriorityPolling */, + fixedchunksizepolling: 3 /* FixedChunkSizePolling */ + })), + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality, + defaultValueDescription: 0 /* UseFsEvents */ + }, + { + name: "fallbackPolling", + type: new Map(Object.entries({ + fixedinterval: 0 /* FixedInterval */, + priorityinterval: 1 /* PriorityInterval */, + dynamicpriority: 2 /* DynamicPriority */, + fixedchunksize: 3 /* FixedChunkSize */ + })), + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers, + defaultValueDescription: 1 /* PriorityInterval */ + }, + { + name: "synchronousWatchDirectory", + type: "boolean", + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_support_recursive_watching_natively, + defaultValueDescription: false + }, + { + name: "excludeDirectories", + type: "list", + element: { + name: "excludeDirectory", + type: "string", + isFilePath: true, + extraValidation: specToDiagnostic + }, + allowConfigDirTemplateSubstitution: true, + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Remove_a_list_of_directories_from_the_watch_process + }, + { + name: "excludeFiles", + type: "list", + element: { + name: "excludeFile", + type: "string", + isFilePath: true, + extraValidation: specToDiagnostic + }, + allowConfigDirTemplateSubstitution: true, + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Remove_a_list_of_files_from_the_watch_mode_s_processing + } +]; +var commonOptionsWithBuild = [ + { + name: "help", + shortName: "h", + type: "boolean", + showInSimplifiedHelpView: true, + isCommandLineOnly: true, + category: Diagnostics.Command_line_Options, + description: Diagnostics.Print_this_message, + defaultValueDescription: false + }, + { + name: "help", + shortName: "?", + type: "boolean", + isCommandLineOnly: true, + category: Diagnostics.Command_line_Options, + defaultValueDescription: false + }, + { + name: "watch", + shortName: "w", + type: "boolean", + showInSimplifiedHelpView: true, + isCommandLineOnly: true, + category: Diagnostics.Command_line_Options, + description: Diagnostics.Watch_input_files, + defaultValueDescription: false + }, + { + name: "preserveWatchOutput", + type: "boolean", + showInSimplifiedHelpView: false, + category: Diagnostics.Output_Formatting, + description: Diagnostics.Disable_wiping_the_console_in_watch_mode, + defaultValueDescription: false + }, + { + name: "listFiles", + type: "boolean", + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Print_all_of_the_files_read_during_the_compilation, + defaultValueDescription: false + }, + { + name: "explainFiles", + type: "boolean", + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included, + defaultValueDescription: false + }, + { + name: "listEmittedFiles", + type: "boolean", + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Print_the_names_of_emitted_files_after_a_compilation, + defaultValueDescription: false + }, + { + name: "pretty", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Output_Formatting, + description: Diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read, + defaultValueDescription: true + }, + { + name: "traceResolution", + type: "boolean", + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Log_paths_used_during_the_moduleResolution_process, + defaultValueDescription: false + }, + { + name: "diagnostics", + type: "boolean", + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Output_compiler_performance_information_after_building, + defaultValueDescription: false + }, + { + name: "extendedDiagnostics", + type: "boolean", + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Output_more_detailed_compiler_performance_information_after_building, + defaultValueDescription: false + }, + { + name: "generateCpuProfile", + type: "string", + isFilePath: true, + paramType: Diagnostics.FILE_OR_DIRECTORY, + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging, + defaultValueDescription: "profile.cpuprofile" + }, + { + name: "generateTrace", + type: "string", + isFilePath: true, + paramType: Diagnostics.DIRECTORY, + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Generates_an_event_trace_and_a_list_of_types + }, + { + name: "incremental", + shortName: "i", + type: "boolean", + category: Diagnostics.Projects, + description: Diagnostics.Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects, + transpileOptionValue: void 0, + defaultValueDescription: Diagnostics.false_unless_composite_is_set + }, + { + name: "declaration", + shortName: "d", + type: "boolean", + // Not setting affectsEmit because we calculate this flag might not affect full emit + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + transpileOptionValue: void 0, + description: Diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project, + defaultValueDescription: Diagnostics.false_unless_composite_is_set + }, + { + name: "declarationMap", + type: "boolean", + // Not setting affectsEmit because we calculate this flag might not affect full emit + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + defaultValueDescription: false, + description: Diagnostics.Create_sourcemaps_for_d_ts_files + }, + { + name: "emitDeclarationOnly", + type: "boolean", + // Not setting affectsEmit because we calculate this flag might not affect full emit + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + description: Diagnostics.Only_output_d_ts_files_and_not_JavaScript_files, + transpileOptionValue: void 0, + defaultValueDescription: false + }, + { + name: "sourceMap", + type: "boolean", + // Not setting affectsEmit because we calculate this flag might not affect full emit + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + defaultValueDescription: false, + description: Diagnostics.Create_source_map_files_for_emitted_JavaScript_files + }, + { + name: "inlineSourceMap", + type: "boolean", + // Not setting affectsEmit because we calculate this flag might not affect full emit + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript, + defaultValueDescription: false + }, + { + name: "noCheck", + type: "boolean", + showInSimplifiedHelpView: false, + category: Diagnostics.Compiler_Diagnostics, + description: Diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported, + transpileOptionValue: true, + defaultValueDescription: false + // Not setting affectsSemanticDiagnostics or affectsBuildInfo because we dont want all diagnostics to go away, its handled in builder + }, + { + name: "noEmit", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + description: Diagnostics.Disable_emitting_files_from_a_compilation, + transpileOptionValue: void 0, + defaultValueDescription: false + }, + { + name: "assumeChangesOnlyAffectDirectDependencies", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Watch_and_Build_Modes, + description: Diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it, + defaultValueDescription: false + }, + { + name: "locale", + type: "string", + category: Diagnostics.Command_line_Options, + isCommandLineOnly: true, + description: Diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit, + defaultValueDescription: Diagnostics.Platform_specific + } +]; +var targetOptionDeclaration = { + name: "target", + shortName: "t", + type: new Map(Object.entries({ + es3: 0 /* ES3 */, + es5: 1 /* ES5 */, + es6: 2 /* ES2015 */, + es2015: 2 /* ES2015 */, + es2016: 3 /* ES2016 */, + es2017: 4 /* ES2017 */, + es2018: 5 /* ES2018 */, + es2019: 6 /* ES2019 */, + es2020: 7 /* ES2020 */, + es2021: 8 /* ES2021 */, + es2022: 9 /* ES2022 */, + es2023: 10 /* ES2023 */, + es2024: 11 /* ES2024 */, + esnext: 99 /* ESNext */ + })), + affectsSourceFile: true, + affectsModuleResolution: true, + affectsEmit: true, + affectsBuildInfo: true, + deprecatedKeys: /* @__PURE__ */ new Set(["es3"]), + paramType: Diagnostics.VERSION, + showInSimplifiedHelpView: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations, + defaultValueDescription: 1 /* ES5 */ +}; +var moduleOptionDeclaration = { + name: "module", + shortName: "m", + type: new Map(Object.entries({ + none: 0 /* None */, + commonjs: 1 /* CommonJS */, + amd: 2 /* AMD */, + system: 4 /* System */, + umd: 3 /* UMD */, + es6: 5 /* ES2015 */, + es2015: 5 /* ES2015 */, + es2020: 6 /* ES2020 */, + es2022: 7 /* ES2022 */, + esnext: 99 /* ESNext */, + node16: 100 /* Node16 */, + node18: 101 /* Node18 */, + node20: 102 /* Node20 */, + nodenext: 199 /* NodeNext */, + preserve: 200 /* Preserve */ + })), + affectsSourceFile: true, + affectsModuleResolution: true, + affectsEmit: true, + affectsBuildInfo: true, + paramType: Diagnostics.KIND, + showInSimplifiedHelpView: true, + category: Diagnostics.Modules, + description: Diagnostics.Specify_what_module_code_is_generated, + defaultValueDescription: void 0 +}; +var commandOptionsWithoutBuild = [ + // CommandLine only options + { + name: "all", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + description: Diagnostics.Show_all_compiler_options, + defaultValueDescription: false + }, + { + name: "version", + shortName: "v", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + description: Diagnostics.Print_the_compiler_s_version, + defaultValueDescription: false + }, + { + name: "init", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + description: Diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file, + defaultValueDescription: false + }, + { + name: "project", + shortName: "p", + type: "string", + isFilePath: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + paramType: Diagnostics.FILE_OR_DIRECTORY, + description: Diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json + }, + { + name: "showConfig", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + isCommandLineOnly: true, + description: Diagnostics.Print_the_final_configuration_instead_of_building, + defaultValueDescription: false + }, + { + name: "listFilesOnly", + type: "boolean", + category: Diagnostics.Command_line_Options, + isCommandLineOnly: true, + description: Diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing, + defaultValueDescription: false + }, + // Basic + targetOptionDeclaration, + moduleOptionDeclaration, + { + name: "lib", + type: "list", + element: { + name: "lib", + type: libMap, + defaultValueDescription: void 0 + }, + affectsProgramStructure: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment, + transpileOptionValue: void 0 + }, + { + name: "allowJs", + type: "boolean", + allowJsFlag: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.JavaScript_Support, + description: Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these_files, + defaultValueDescription: false + }, + { + name: "checkJs", + type: "boolean", + affectsModuleResolution: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.JavaScript_Support, + description: Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files, + defaultValueDescription: false + }, + { + name: "jsx", + type: jsxOptionMap, + affectsSourceFile: true, + affectsEmit: true, + affectsBuildInfo: true, + affectsModuleResolution: true, + // The checker emits an error when it sees JSX but this option is not set in compilerOptions. + // This is effectively a semantic error, so mark this option as affecting semantic diagnostics + // so we know to refresh errors when this option is changed. + affectsSemanticDiagnostics: true, + paramType: Diagnostics.KIND, + showInSimplifiedHelpView: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Specify_what_JSX_code_is_generated, + defaultValueDescription: void 0 + }, + { + name: "outFile", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + paramType: Diagnostics.FILE, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + description: Diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output, + transpileOptionValue: void 0 + }, + { + name: "outDir", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + paramType: Diagnostics.DIRECTORY, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + description: Diagnostics.Specify_an_output_folder_for_all_emitted_files + }, + { + name: "rootDir", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + paramType: Diagnostics.LOCATION, + category: Diagnostics.Modules, + description: Diagnostics.Specify_the_root_folder_within_your_source_files, + defaultValueDescription: Diagnostics.Computed_from_the_list_of_input_files + }, + { + name: "composite", + type: "boolean", + // Not setting affectsEmit because we calculate this flag might not affect full emit + affectsBuildInfo: true, + isTSConfigOnly: true, + category: Diagnostics.Projects, + transpileOptionValue: void 0, + defaultValueDescription: false, + description: Diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references + }, + { + name: "tsBuildInfoFile", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + isFilePath: true, + paramType: Diagnostics.FILE, + category: Diagnostics.Projects, + transpileOptionValue: void 0, + defaultValueDescription: ".tsbuildinfo", + description: Diagnostics.Specify_the_path_to_tsbuildinfo_incremental_compilation_file + }, + { + name: "removeComments", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Emit, + defaultValueDescription: false, + description: Diagnostics.Disable_emitting_comments + }, + { + name: "importHelpers", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + affectsSourceFile: true, + category: Diagnostics.Emit, + description: Diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file, + defaultValueDescription: false + }, + { + name: "importsNotUsedAsValues", + type: new Map(Object.entries({ + remove: 0 /* Remove */, + preserve: 1 /* Preserve */, + error: 2 /* Error */ + })), + affectsEmit: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types, + defaultValueDescription: 0 /* Remove */ + }, + { + name: "downlevelIteration", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration, + defaultValueDescription: false + }, + { + name: "isolatedModules", + type: "boolean", + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports, + transpileOptionValue: true, + defaultValueDescription: false + }, + { + name: "verbatimModuleSyntax", + type: "boolean", + affectsEmit: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting, + defaultValueDescription: false + }, + { + name: "isolatedDeclarations", + type: "boolean", + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files, + defaultValueDescription: false, + affectsBuildInfo: true, + affectsSemanticDiagnostics: true + }, + { + name: "erasableSyntaxOnly", + type: "boolean", + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript, + defaultValueDescription: false, + affectsBuildInfo: true, + affectsSemanticDiagnostics: true + }, + { + name: "libReplacement", + type: "boolean", + affectsProgramStructure: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Enable_lib_replacement, + defaultValueDescription: true + }, + // Strict Type Checks + { + name: "strict", + type: "boolean", + // Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here + // The value of each strictFlag depends on own strictFlag value or this and never accessed directly. + // But we need to store `strict` in builf info, even though it won't be examined directly, so that the + // flags it controls (e.g. `strictNullChecks`) will be retrieved correctly + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enable_all_strict_type_checking_options, + defaultValueDescription: false + }, + { + name: "noImplicitAny", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "strictNullChecks", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.When_type_checking_take_into_account_null_and_undefined, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "strictFunctionTypes", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "strictBindCallApply", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "strictPropertyInitialization", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "strictBuiltinIteratorReturn", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "noImplicitThis", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "useUnknownInCatchVariables", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Default_catch_clause_variables_as_unknown_instead_of_any, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + { + name: "alwaysStrict", + type: "boolean", + affectsSourceFile: true, + affectsEmit: true, + affectsBuildInfo: true, + strictFlag: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Ensure_use_strict_is_always_emitted, + defaultValueDescription: Diagnostics.false_unless_strict_is_set + }, + // Additional Checks + { + name: "noUnusedLocals", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enable_error_reporting_when_local_variables_aren_t_read, + defaultValueDescription: false + }, + { + name: "noUnusedParameters", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read, + defaultValueDescription: false + }, + { + name: "exactOptionalPropertyTypes", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined, + defaultValueDescription: false + }, + { + name: "noImplicitReturns", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function, + defaultValueDescription: false + }, + { + name: "noFallthroughCasesInSwitch", + type: "boolean", + affectsBindDiagnostics: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements, + defaultValueDescription: false + }, + { + name: "noUncheckedIndexedAccess", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Add_undefined_to_a_type_when_accessed_using_an_index, + defaultValueDescription: false + }, + { + name: "noImplicitOverride", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier, + defaultValueDescription: false + }, + { + name: "noPropertyAccessFromIndexSignature", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: false, + category: Diagnostics.Type_Checking, + description: Diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type, + defaultValueDescription: false + }, + // Module Resolution + { + name: "moduleResolution", + type: new Map(Object.entries({ + // N.B. The first entry specifies the value shown in `tsc --init` + node10: 2 /* Node10 */, + node: 2 /* Node10 */, + classic: 1 /* Classic */, + node16: 3 /* Node16 */, + nodenext: 99 /* NodeNext */, + bundler: 100 /* Bundler */ + })), + deprecatedKeys: /* @__PURE__ */ new Set(["node"]), + affectsSourceFile: true, + affectsModuleResolution: true, + paramType: Diagnostics.STRATEGY, + category: Diagnostics.Modules, + description: Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier, + defaultValueDescription: Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node + }, + { + name: "baseUrl", + type: "string", + affectsModuleResolution: true, + isFilePath: true, + category: Diagnostics.Modules, + description: Diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names + }, + { + // this option can only be specified in tsconfig.json + // use type = object to copy the value as-is + name: "paths", + type: "object", + affectsModuleResolution: true, + allowConfigDirTemplateSubstitution: true, + isTSConfigOnly: true, + category: Diagnostics.Modules, + description: Diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations, + transpileOptionValue: void 0 + }, + { + // this option can only be specified in tsconfig.json + // use type = object to copy the value as-is + name: "rootDirs", + type: "list", + isTSConfigOnly: true, + element: { + name: "rootDirs", + type: "string", + isFilePath: true + }, + affectsModuleResolution: true, + allowConfigDirTemplateSubstitution: true, + category: Diagnostics.Modules, + description: Diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules, + transpileOptionValue: void 0, + defaultValueDescription: Diagnostics.Computed_from_the_list_of_input_files + }, + { + name: "typeRoots", + type: "list", + element: { + name: "typeRoots", + type: "string", + isFilePath: true + }, + affectsModuleResolution: true, + allowConfigDirTemplateSubstitution: true, + category: Diagnostics.Modules, + description: Diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types + }, + { + name: "types", + type: "list", + element: { + name: "types", + type: "string" + }, + affectsProgramStructure: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Modules, + description: Diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file, + transpileOptionValue: void 0 + }, + { + name: "allowSyntheticDefaultImports", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export, + defaultValueDescription: Diagnostics.module_system_or_esModuleInterop + }, + { + name: "esModuleInterop", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + showInSimplifiedHelpView: true, + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility, + defaultValueDescription: false + }, + { + name: "preserveSymlinks", + type: "boolean", + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node, + defaultValueDescription: false + }, + { + name: "allowUmdGlobalAccess", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Modules, + description: Diagnostics.Allow_accessing_UMD_globals_from_modules, + defaultValueDescription: false + }, + { + name: "moduleSuffixes", + type: "list", + element: { + name: "suffix", + type: "string" + }, + listPreserveFalsyValues: true, + affectsModuleResolution: true, + category: Diagnostics.Modules, + description: Diagnostics.List_of_file_name_suffixes_to_search_when_resolving_a_module + }, + { + name: "allowImportingTsExtensions", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Modules, + description: Diagnostics.Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set, + defaultValueDescription: false, + transpileOptionValue: void 0 + }, + { + name: "rewriteRelativeImportExtensions", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Modules, + description: Diagnostics.Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_in_output_files, + defaultValueDescription: false + }, + { + name: "resolvePackageJsonExports", + type: "boolean", + affectsModuleResolution: true, + category: Diagnostics.Modules, + description: Diagnostics.Use_the_package_json_exports_field_when_resolving_package_imports, + defaultValueDescription: Diagnostics.true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false + }, + { + name: "resolvePackageJsonImports", + type: "boolean", + affectsModuleResolution: true, + category: Diagnostics.Modules, + description: Diagnostics.Use_the_package_json_imports_field_when_resolving_imports, + defaultValueDescription: Diagnostics.true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false + }, + { + name: "customConditions", + type: "list", + element: { + name: "condition", + type: "string" + }, + affectsModuleResolution: true, + category: Diagnostics.Modules, + description: Diagnostics.Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports + }, + { + name: "noUncheckedSideEffectImports", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Modules, + description: Diagnostics.Check_side_effect_imports, + defaultValueDescription: false + }, + // Source Maps + { + name: "sourceRoot", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + paramType: Diagnostics.LOCATION, + category: Diagnostics.Emit, + description: Diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code + }, + { + name: "mapRoot", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + paramType: Diagnostics.LOCATION, + category: Diagnostics.Emit, + description: Diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations + }, + { + name: "inlineSources", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript, + defaultValueDescription: false + }, + // Experimental + { + name: "experimentalDecorators", + type: "boolean", + affectsEmit: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Enable_experimental_support_for_legacy_experimental_decorators, + defaultValueDescription: false + }, + { + name: "emitDecoratorMetadata", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files, + defaultValueDescription: false + }, + // Advanced + { + name: "jsxFactory", + type: "string", + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h, + defaultValueDescription: "`React.createElement`" + }, + { + name: "jsxFragmentFactory", + type: "string", + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment, + defaultValueDescription: "React.Fragment" + }, + { + name: "jsxImportSource", + type: "string", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + affectsModuleResolution: true, + affectsSourceFile: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk, + defaultValueDescription: "react" + }, + { + name: "resolveJsonModule", + type: "boolean", + affectsModuleResolution: true, + category: Diagnostics.Modules, + description: Diagnostics.Enable_importing_json_files, + defaultValueDescription: false + }, + { + name: "allowArbitraryExtensions", + type: "boolean", + affectsProgramStructure: true, + category: Diagnostics.Modules, + description: Diagnostics.Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present, + defaultValueDescription: false + }, + { + name: "out", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: false, + // This is intentionally broken to support compatibility with existing tsconfig files + // for correct behaviour, please use outFile + category: Diagnostics.Backwards_Compatibility, + paramType: Diagnostics.FILE, + transpileOptionValue: void 0, + description: Diagnostics.Deprecated_setting_Use_outFile_instead + }, + { + name: "reactNamespace", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit, + defaultValueDescription: "`React`" + }, + { + name: "skipDefaultLibCheck", + type: "boolean", + // We need to store these to determine whether `lib` files need to be rechecked + affectsBuildInfo: true, + category: Diagnostics.Completeness, + description: Diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript, + defaultValueDescription: false + }, + { + name: "charset", + type: "string", + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files, + defaultValueDescription: "utf8" + }, + { + name: "emitBOM", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files, + defaultValueDescription: false + }, + { + name: "newLine", + type: new Map(Object.entries({ + crlf: 0 /* CarriageReturnLineFeed */, + lf: 1 /* LineFeed */ + })), + affectsEmit: true, + affectsBuildInfo: true, + paramType: Diagnostics.NEWLINE, + category: Diagnostics.Emit, + description: Diagnostics.Set_the_newline_character_for_emitting_files, + defaultValueDescription: "lf" + }, + { + name: "noErrorTruncation", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Output_Formatting, + description: Diagnostics.Disable_truncating_types_in_error_messages, + defaultValueDescription: false + }, + { + name: "noLib", + type: "boolean", + category: Diagnostics.Language_and_Environment, + affectsProgramStructure: true, + description: Diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts, + // We are not returning a sourceFile for lib file when asked by the program, + // so pass --noLib to avoid reporting a file not found error. + transpileOptionValue: true, + defaultValueDescription: false + }, + { + name: "noResolve", + type: "boolean", + affectsModuleResolution: true, + category: Diagnostics.Modules, + description: Diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project, + // We are not doing a full typecheck, we are not resolving the whole context, + // so pass --noResolve to avoid reporting missing file errors. + transpileOptionValue: true, + defaultValueDescription: false + }, + { + name: "stripInternal", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments, + defaultValueDescription: false + }, + { + name: "disableSizeLimit", + type: "boolean", + affectsProgramStructure: true, + category: Diagnostics.Editor_Support, + description: Diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server, + defaultValueDescription: false + }, + { + name: "disableSourceOfProjectReferenceRedirect", + type: "boolean", + isTSConfigOnly: true, + category: Diagnostics.Projects, + description: Diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects, + defaultValueDescription: false + }, + { + name: "disableSolutionSearching", + type: "boolean", + isTSConfigOnly: true, + category: Diagnostics.Projects, + description: Diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing, + defaultValueDescription: false + }, + { + name: "disableReferencedProjectLoad", + type: "boolean", + isTSConfigOnly: true, + category: Diagnostics.Projects, + description: Diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript, + defaultValueDescription: false + }, + { + name: "noImplicitUseStrict", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files, + defaultValueDescription: false + }, + { + name: "noEmitHelpers", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output, + defaultValueDescription: false + }, + { + name: "noEmitOnError", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + transpileOptionValue: void 0, + description: Diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported, + defaultValueDescription: false + }, + { + name: "preserveConstEnums", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Emit, + description: Diagnostics.Disable_erasing_const_enum_declarations_in_generated_code, + defaultValueDescription: false + }, + { + name: "declarationDir", + type: "string", + affectsEmit: true, + affectsBuildInfo: true, + affectsDeclarationPath: true, + isFilePath: true, + paramType: Diagnostics.DIRECTORY, + category: Diagnostics.Emit, + transpileOptionValue: void 0, + description: Diagnostics.Specify_the_output_directory_for_generated_declaration_files + }, + { + name: "skipLibCheck", + type: "boolean", + // We need to store these to determine whether `lib` files need to be rechecked + affectsBuildInfo: true, + category: Diagnostics.Completeness, + description: Diagnostics.Skip_type_checking_all_d_ts_files, + defaultValueDescription: false + }, + { + name: "allowUnusedLabels", + type: "boolean", + affectsBindDiagnostics: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Disable_error_reporting_for_unused_labels, + defaultValueDescription: void 0 + }, + { + name: "allowUnreachableCode", + type: "boolean", + affectsBindDiagnostics: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Type_Checking, + description: Diagnostics.Disable_error_reporting_for_unreachable_code, + defaultValueDescription: void 0 + }, + { + name: "suppressExcessPropertyErrors", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals, + defaultValueDescription: false + }, + { + name: "suppressImplicitAnyIndexErrors", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures, + defaultValueDescription: false + }, + { + name: "forceConsistentCasingInFileNames", + type: "boolean", + affectsModuleResolution: true, + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Ensure_that_casing_is_correct_in_imports, + defaultValueDescription: true + }, + { + name: "maxNodeModuleJsDepth", + type: "number", + affectsModuleResolution: true, + category: Diagnostics.JavaScript_Support, + description: Diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs, + defaultValueDescription: 0 + }, + { + name: "noStrictGenericChecks", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types, + defaultValueDescription: false + }, + { + name: "useDefineForClassFields", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Emit_ECMAScript_standard_compliant_class_fields, + defaultValueDescription: Diagnostics.true_for_ES2022_and_above_including_ESNext + }, + { + name: "preserveValueImports", + type: "boolean", + affectsEmit: true, + affectsBuildInfo: true, + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed, + defaultValueDescription: false + }, + { + name: "keyofStringsOnly", + type: "boolean", + category: Diagnostics.Backwards_Compatibility, + description: Diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option, + defaultValueDescription: false + }, + { + // A list of plugins to load in the language service + name: "plugins", + type: "list", + isTSConfigOnly: true, + element: { + name: "plugin", + type: "object" + }, + description: Diagnostics.Specify_a_list_of_language_service_plugins_to_include, + category: Diagnostics.Editor_Support + }, + { + name: "moduleDetection", + type: new Map(Object.entries({ + auto: 2 /* Auto */, + legacy: 1 /* Legacy */, + force: 3 /* Force */ + })), + affectsSourceFile: true, + affectsModuleResolution: true, + description: Diagnostics.Control_what_method_is_used_to_detect_module_format_JS_files, + category: Diagnostics.Language_and_Environment, + defaultValueDescription: Diagnostics.auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules + }, + { + name: "ignoreDeprecations", + type: "string", + defaultValueDescription: void 0 + } +]; +var optionDeclarations = [ + ...commonOptionsWithBuild, + ...commandOptionsWithoutBuild +]; +var semanticDiagnosticsOptionDeclarations = optionDeclarations.filter((option) => !!option.affectsSemanticDiagnostics); +var affectsEmitOptionDeclarations = optionDeclarations.filter((option) => !!option.affectsEmit); +var affectsDeclarationPathOptionDeclarations = optionDeclarations.filter((option) => !!option.affectsDeclarationPath); +var moduleResolutionOptionDeclarations = optionDeclarations.filter((option) => !!option.affectsModuleResolution); +var sourceFileAffectingCompilerOptions = optionDeclarations.filter((option) => !!option.affectsSourceFile || !!option.affectsBindDiagnostics); +var optionsAffectingProgramStructure = optionDeclarations.filter((option) => !!option.affectsProgramStructure); +var transpileOptionValueCompilerOptions = optionDeclarations.filter((option) => hasProperty(option, "transpileOptionValue")); +var configDirTemplateSubstitutionOptions = optionDeclarations.filter( + (option) => option.allowConfigDirTemplateSubstitution || !option.isCommandLineOnly && option.isFilePath +); +var configDirTemplateSubstitutionWatchOptions = optionsForWatch.filter( + (option) => option.allowConfigDirTemplateSubstitution || !option.isCommandLineOnly && option.isFilePath +); +var commandLineOptionOfCustomType = optionDeclarations.filter(isCommandLineOptionOfCustomType); +function isCommandLineOptionOfCustomType(option) { + return !isString(option.type); +} +var tscBuildOption = { + name: "build", + type: "boolean", + shortName: "b", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + description: Diagnostics.Build_one_or_more_projects_and_their_dependencies_if_out_of_date, + defaultValueDescription: false +}; +var optionsForBuild = [ + tscBuildOption, + { + name: "verbose", + shortName: "v", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Enable_verbose_logging, + type: "boolean", + defaultValueDescription: false + }, + { + name: "dry", + shortName: "d", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Show_what_would_be_built_or_deleted_if_specified_with_clean, + type: "boolean", + defaultValueDescription: false + }, + { + name: "force", + shortName: "f", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Build_all_projects_including_those_that_appear_to_be_up_to_date, + type: "boolean", + defaultValueDescription: false + }, + { + name: "clean", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Delete_the_outputs_of_all_projects, + type: "boolean", + defaultValueDescription: false + }, + { + name: "stopBuildOnErrors", + category: Diagnostics.Command_line_Options, + description: Diagnostics.Skip_building_downstream_projects_on_error_in_upstream_project, + type: "boolean", + defaultValueDescription: false + } +]; +var buildOpts = [ + ...commonOptionsWithBuild, + ...optionsForBuild +]; +var typeAcquisitionDeclarations = [ + { + name: "enable", + type: "boolean", + defaultValueDescription: false + }, + { + name: "include", + type: "list", + element: { + name: "include", + type: "string" + } + }, + { + name: "exclude", + type: "list", + element: { + name: "exclude", + type: "string" + } + }, + { + name: "disableFilenameBasedTypeAcquisition", + type: "boolean", + defaultValueDescription: false + } +]; +function createOptionNameMap(optionDeclarations2) { + const optionsNameMap = /* @__PURE__ */ new Map(); + const shortOptionNames = /* @__PURE__ */ new Map(); + forEach(optionDeclarations2, (option) => { + optionsNameMap.set(option.name.toLowerCase(), option); + if (option.shortName) { + shortOptionNames.set(option.shortName, option.name); + } + }); + return { optionsNameMap, shortOptionNames }; +} +var optionsNameMapCache; +function getOptionsNameMap() { + return optionsNameMapCache || (optionsNameMapCache = createOptionNameMap(optionDeclarations)); +} +var compilerOptionsAlternateMode = { + diagnostic: Diagnostics.Compiler_option_0_may_only_be_used_with_build, + getOptionsNameMap: getBuildOptionsNameMap +}; +var defaultInitCompilerOptions = { + module: 1 /* CommonJS */, + target: 3 /* ES2016 */, + strict: true, + esModuleInterop: true, + forceConsistentCasingInFileNames: true, + skipLibCheck: true +}; +function createCompilerDiagnosticForInvalidCustomType(opt) { + return createDiagnosticForInvalidCustomType(opt, createCompilerDiagnostic); +} +function createDiagnosticForInvalidCustomType(opt, createDiagnostic) { + const namesOfType = arrayFrom(opt.type.keys()); + const stringNames = (opt.deprecatedKeys ? namesOfType.filter((k) => !opt.deprecatedKeys.has(k)) : namesOfType).map((key) => `'${key}'`).join(", "); + return createDiagnostic(Diagnostics.Argument_for_0_option_must_be_Colon_1, `--${opt.name}`, stringNames); +} +function parseCustomTypeOption(opt, value, errors) { + return convertJsonOptionOfCustomType(opt, (value ?? "").trim(), errors); +} +function parseListTypeOption(opt, value = "", errors) { + value = value.trim(); + if (startsWith(value, "-")) { + return void 0; + } + if (opt.type === "listOrElement" && !value.includes(",")) { + return validateJsonOptionValue(opt, value, errors); + } + if (value === "") { + return []; + } + const values = value.split(","); + switch (opt.element.type) { + case "number": + return mapDefined(values, (v) => validateJsonOptionValue(opt.element, parseInt(v), errors)); + case "string": + return mapDefined(values, (v) => validateJsonOptionValue(opt.element, v || "", errors)); + case "boolean": + case "object": + return Debug.fail(`List of ${opt.element.type} is not yet supported.`); + default: + return mapDefined(values, (v) => parseCustomTypeOption(opt.element, v, errors)); + } +} +function getOptionName(option) { + return option.name; +} +function createUnknownOptionError(unknownOption, diagnostics, unknownOptionErrorText, node, sourceFile) { + var _a; + const otherOption = (_a = diagnostics.alternateMode) == null ? void 0 : _a.getOptionsNameMap().optionsNameMap.get(unknownOption.toLowerCase()); + if (otherOption) { + return createDiagnosticForNodeInSourceFileOrCompilerDiagnostic( + sourceFile, + node, + otherOption !== tscBuildOption ? diagnostics.alternateMode.diagnostic : Diagnostics.Option_build_must_be_the_first_command_line_argument, + unknownOption + ); + } + const possibleOption = getSpellingSuggestion(unknownOption, diagnostics.optionDeclarations, getOptionName); + return possibleOption ? createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, diagnostics.unknownDidYouMeanDiagnostic, unknownOptionErrorText || unknownOption, possibleOption.name) : createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, diagnostics.unknownOptionDiagnostic, unknownOptionErrorText || unknownOption); +} +function parseCommandLineWorker(diagnostics, commandLine, readFile) { + const options = {}; + let watchOptions; + const fileNames = []; + const errors = []; + parseStrings(commandLine); + return { + options, + watchOptions, + fileNames, + errors + }; + function parseStrings(args) { + let i = 0; + while (i < args.length) { + const s = args[i]; + i++; + if (s.charCodeAt(0) === 64 /* at */) { + parseResponseFile(s.slice(1)); + } else if (s.charCodeAt(0) === 45 /* minus */) { + const inputOptionName = s.slice(s.charCodeAt(1) === 45 /* minus */ ? 2 : 1); + const opt = getOptionDeclarationFromName( + diagnostics.getOptionsNameMap, + inputOptionName, + /*allowShort*/ + true + ); + if (opt) { + i = parseOptionValue(args, i, diagnostics, opt, options, errors); + } else { + const watchOpt = getOptionDeclarationFromName( + watchOptionsDidYouMeanDiagnostics.getOptionsNameMap, + inputOptionName, + /*allowShort*/ + true + ); + if (watchOpt) { + i = parseOptionValue(args, i, watchOptionsDidYouMeanDiagnostics, watchOpt, watchOptions || (watchOptions = {}), errors); + } else { + errors.push(createUnknownOptionError(inputOptionName, diagnostics, s)); + } + } + } else { + fileNames.push(s); + } + } + } + function parseResponseFile(fileName) { + const text = tryReadFile(fileName, readFile || ((fileName2) => sys.readFile(fileName2))); + if (!isString(text)) { + errors.push(text); + return; + } + const args = []; + let pos = 0; + while (true) { + while (pos < text.length && text.charCodeAt(pos) <= 32 /* space */) pos++; + if (pos >= text.length) break; + const start = pos; + if (text.charCodeAt(start) === 34 /* doubleQuote */) { + pos++; + while (pos < text.length && text.charCodeAt(pos) !== 34 /* doubleQuote */) pos++; + if (pos < text.length) { + args.push(text.substring(start + 1, pos)); + pos++; + } else { + errors.push(createCompilerDiagnostic(Diagnostics.Unterminated_quoted_string_in_response_file_0, fileName)); + } + } else { + while (text.charCodeAt(pos) > 32 /* space */) pos++; + args.push(text.substring(start, pos)); + } + } + parseStrings(args); + } +} +function parseOptionValue(args, i, diagnostics, opt, options, errors) { + if (opt.isTSConfigOnly) { + const optValue = args[i]; + if (optValue === "null") { + options[opt.name] = void 0; + i++; + } else if (opt.type === "boolean") { + if (optValue === "false") { + options[opt.name] = validateJsonOptionValue( + opt, + /*value*/ + false, + errors + ); + i++; + } else { + if (optValue === "true") i++; + errors.push(createCompilerDiagnostic(Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line, opt.name)); + } + } else { + errors.push(createCompilerDiagnostic(Diagnostics.Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line, opt.name)); + if (optValue && !startsWith(optValue, "-")) i++; + } + } else { + if (!args[i] && opt.type !== "boolean") { + errors.push(createCompilerDiagnostic(diagnostics.optionTypeMismatchDiagnostic, opt.name, getCompilerOptionValueTypeString(opt))); + } + if (args[i] !== "null") { + switch (opt.type) { + case "number": + options[opt.name] = validateJsonOptionValue(opt, parseInt(args[i]), errors); + i++; + break; + case "boolean": + const optValue = args[i]; + options[opt.name] = validateJsonOptionValue(opt, optValue !== "false", errors); + if (optValue === "false" || optValue === "true") { + i++; + } + break; + case "string": + options[opt.name] = validateJsonOptionValue(opt, args[i] || "", errors); + i++; + break; + case "list": + const result = parseListTypeOption(opt, args[i], errors); + options[opt.name] = result || []; + if (result) { + i++; + } + break; + case "listOrElement": + Debug.fail("listOrElement not supported here"); + break; + // If not a primitive, the possible types are specified in what is effectively a map of options. + default: + options[opt.name] = parseCustomTypeOption(opt, args[i], errors); + i++; + break; + } + } else { + options[opt.name] = void 0; + i++; + } + } + return i; +} +var compilerOptionsDidYouMeanDiagnostics = { + alternateMode: compilerOptionsAlternateMode, + getOptionsNameMap, + optionDeclarations, + unknownOptionDiagnostic: Diagnostics.Unknown_compiler_option_0, + unknownDidYouMeanDiagnostic: Diagnostics.Unknown_compiler_option_0_Did_you_mean_1, + optionTypeMismatchDiagnostic: Diagnostics.Compiler_option_0_expects_an_argument +}; +function parseCommandLine(commandLine, readFile) { + return parseCommandLineWorker(compilerOptionsDidYouMeanDiagnostics, commandLine, readFile); +} +function getOptionFromName(optionName, allowShort) { + return getOptionDeclarationFromName(getOptionsNameMap, optionName, allowShort); +} +function getOptionDeclarationFromName(getOptionNameMap, optionName, allowShort = false) { + optionName = optionName.toLowerCase(); + const { optionsNameMap, shortOptionNames } = getOptionNameMap(); + if (allowShort) { + const short = shortOptionNames.get(optionName); + if (short !== void 0) { + optionName = short; + } + } + return optionsNameMap.get(optionName); +} +var buildOptionsNameMapCache; +function getBuildOptionsNameMap() { + return buildOptionsNameMapCache || (buildOptionsNameMapCache = createOptionNameMap(buildOpts)); +} +var buildOptionsAlternateMode = { + diagnostic: Diagnostics.Compiler_option_0_may_not_be_used_with_build, + getOptionsNameMap +}; +var buildOptionsDidYouMeanDiagnostics = { + alternateMode: buildOptionsAlternateMode, + getOptionsNameMap: getBuildOptionsNameMap, + optionDeclarations: buildOpts, + unknownOptionDiagnostic: Diagnostics.Unknown_build_option_0, + unknownDidYouMeanDiagnostic: Diagnostics.Unknown_build_option_0_Did_you_mean_1, + optionTypeMismatchDiagnostic: Diagnostics.Build_option_0_requires_a_value_of_type_1 +}; +function parseBuildCommand(commandLine) { + const { options, watchOptions, fileNames: projects, errors } = parseCommandLineWorker( + buildOptionsDidYouMeanDiagnostics, + commandLine + ); + const buildOptions = options; + if (projects.length === 0) { + projects.push("."); + } + if (buildOptions.clean && buildOptions.force) { + errors.push(createCompilerDiagnostic(Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "force")); + } + if (buildOptions.clean && buildOptions.verbose) { + errors.push(createCompilerDiagnostic(Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "verbose")); + } + if (buildOptions.clean && buildOptions.watch) { + errors.push(createCompilerDiagnostic(Diagnostics.Options_0_and_1_cannot_be_combined, "clean", "watch")); + } + if (buildOptions.watch && buildOptions.dry) { + errors.push(createCompilerDiagnostic(Diagnostics.Options_0_and_1_cannot_be_combined, "watch", "dry")); + } + return { buildOptions, watchOptions, projects, errors }; +} +function getDiagnosticText(message, ...args) { + return cast(createCompilerDiagnostic(message, ...args).messageText, isString); +} +function getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host, extendedConfigCache, watchOptionsToExtend, extraFileExtensions) { + const configFileText = tryReadFile(configFileName, (fileName) => host.readFile(fileName)); + if (!isString(configFileText)) { + host.onUnRecoverableConfigFileDiagnostic(configFileText); + return void 0; + } + const result = parseJsonText(configFileName, configFileText); + const cwd = host.getCurrentDirectory(); + result.path = toPath(configFileName, cwd, createGetCanonicalFileName(host.useCaseSensitiveFileNames)); + result.resolvedPath = result.path; + result.originalFileName = result.fileName; + return parseJsonSourceFileConfigFileContent( + result, + host, + getNormalizedAbsolutePath(getDirectoryPath(configFileName), cwd), + optionsToExtend, + getNormalizedAbsolutePath(configFileName, cwd), + /*resolutionStack*/ + void 0, + extraFileExtensions, + extendedConfigCache, + watchOptionsToExtend + ); +} +function readConfigFile(fileName, readFile) { + const textOrDiagnostic = tryReadFile(fileName, readFile); + return isString(textOrDiagnostic) ? parseConfigFileTextToJson(fileName, textOrDiagnostic) : { config: {}, error: textOrDiagnostic }; +} +function parseConfigFileTextToJson(fileName, jsonText) { + const jsonSourceFile = parseJsonText(fileName, jsonText); + return { + config: convertConfigFileToObject( + jsonSourceFile, + jsonSourceFile.parseDiagnostics, + /*jsonConversionNotifier*/ + void 0 + ), + error: jsonSourceFile.parseDiagnostics.length ? jsonSourceFile.parseDiagnostics[0] : void 0 + }; +} +function readJsonConfigFile(fileName, readFile) { + const textOrDiagnostic = tryReadFile(fileName, readFile); + return isString(textOrDiagnostic) ? parseJsonText(fileName, textOrDiagnostic) : { fileName, parseDiagnostics: [textOrDiagnostic] }; +} +function tryReadFile(fileName, readFile) { + let text; + try { + text = readFile(fileName); + } catch (e) { + return createCompilerDiagnostic(Diagnostics.Cannot_read_file_0_Colon_1, fileName, e.message); + } + return text === void 0 ? createCompilerDiagnostic(Diagnostics.Cannot_read_file_0, fileName) : text; +} +function commandLineOptionsToMap(options) { + return arrayToMap(options, getOptionName); +} +var typeAcquisitionDidYouMeanDiagnostics = { + optionDeclarations: typeAcquisitionDeclarations, + unknownOptionDiagnostic: Diagnostics.Unknown_type_acquisition_option_0, + unknownDidYouMeanDiagnostic: Diagnostics.Unknown_type_acquisition_option_0_Did_you_mean_1 +}; +var watchOptionsNameMapCache; +function getWatchOptionsNameMap() { + return watchOptionsNameMapCache || (watchOptionsNameMapCache = createOptionNameMap(optionsForWatch)); +} +var watchOptionsDidYouMeanDiagnostics = { + getOptionsNameMap: getWatchOptionsNameMap, + optionDeclarations: optionsForWatch, + unknownOptionDiagnostic: Diagnostics.Unknown_watch_option_0, + unknownDidYouMeanDiagnostic: Diagnostics.Unknown_watch_option_0_Did_you_mean_1, + optionTypeMismatchDiagnostic: Diagnostics.Watch_option_0_requires_a_value_of_type_1 +}; +var commandLineCompilerOptionsMapCache; +function getCommandLineCompilerOptionsMap() { + return commandLineCompilerOptionsMapCache || (commandLineCompilerOptionsMapCache = commandLineOptionsToMap(optionDeclarations)); +} +var commandLineWatchOptionsMapCache; +function getCommandLineWatchOptionsMap() { + return commandLineWatchOptionsMapCache || (commandLineWatchOptionsMapCache = commandLineOptionsToMap(optionsForWatch)); +} +var commandLineTypeAcquisitionMapCache; +function getCommandLineTypeAcquisitionMap() { + return commandLineTypeAcquisitionMapCache || (commandLineTypeAcquisitionMapCache = commandLineOptionsToMap(typeAcquisitionDeclarations)); +} +var extendsOptionDeclaration = { + name: "extends", + type: "listOrElement", + element: { + name: "extends", + type: "string" + }, + category: Diagnostics.File_Management, + disallowNullOrUndefined: true +}; +var compilerOptionsDeclaration = { + name: "compilerOptions", + type: "object", + elementOptions: getCommandLineCompilerOptionsMap(), + extraKeyDiagnostics: compilerOptionsDidYouMeanDiagnostics +}; +var watchOptionsDeclaration = { + name: "watchOptions", + type: "object", + elementOptions: getCommandLineWatchOptionsMap(), + extraKeyDiagnostics: watchOptionsDidYouMeanDiagnostics +}; +var typeAcquisitionDeclaration = { + name: "typeAcquisition", + type: "object", + elementOptions: getCommandLineTypeAcquisitionMap(), + extraKeyDiagnostics: typeAcquisitionDidYouMeanDiagnostics +}; +var _tsconfigRootOptions; +function getTsconfigRootOptionsMap() { + if (_tsconfigRootOptions === void 0) { + _tsconfigRootOptions = { + name: void 0, + // should never be needed since this is root + type: "object", + elementOptions: commandLineOptionsToMap([ + compilerOptionsDeclaration, + watchOptionsDeclaration, + typeAcquisitionDeclaration, + extendsOptionDeclaration, + { + name: "references", + type: "list", + element: { + name: "references", + type: "object" + }, + category: Diagnostics.Projects + }, + { + name: "files", + type: "list", + element: { + name: "files", + type: "string" + }, + category: Diagnostics.File_Management + }, + { + name: "include", + type: "list", + element: { + name: "include", + type: "string" + }, + category: Diagnostics.File_Management, + defaultValueDescription: Diagnostics.if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk + }, + { + name: "exclude", + type: "list", + element: { + name: "exclude", + type: "string" + }, + category: Diagnostics.File_Management, + defaultValueDescription: Diagnostics.node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified + }, + compileOnSaveCommandLineOption + ]) + }; + } + return _tsconfigRootOptions; +} +function convertConfigFileToObject(sourceFile, errors, jsonConversionNotifier) { + var _a; + const rootExpression = (_a = sourceFile.statements[0]) == null ? void 0 : _a.expression; + if (rootExpression && rootExpression.kind !== 211 /* ObjectLiteralExpression */) { + errors.push(createDiagnosticForNodeInSourceFile( + sourceFile, + rootExpression, + Diagnostics.The_root_value_of_a_0_file_must_be_an_object, + getBaseFileName(sourceFile.fileName) === "jsconfig.json" ? "jsconfig.json" : "tsconfig.json" + )); + if (isArrayLiteralExpression(rootExpression)) { + const firstObject = find(rootExpression.elements, isObjectLiteralExpression); + if (firstObject) { + return convertToJson( + sourceFile, + firstObject, + errors, + /*returnValue*/ + true, + jsonConversionNotifier + ); + } + } + return {}; + } + return convertToJson( + sourceFile, + rootExpression, + errors, + /*returnValue*/ + true, + jsonConversionNotifier + ); +} +function convertToObject(sourceFile, errors) { + var _a; + return convertToJson( + sourceFile, + (_a = sourceFile.statements[0]) == null ? void 0 : _a.expression, + errors, + /*returnValue*/ + true, + /*jsonConversionNotifier*/ + void 0 + ); +} +function convertToJson(sourceFile, rootExpression, errors, returnValue, jsonConversionNotifier) { + if (!rootExpression) { + return returnValue ? {} : void 0; + } + return convertPropertyValueToJson(rootExpression, jsonConversionNotifier == null ? void 0 : jsonConversionNotifier.rootOptions); + function convertObjectLiteralExpressionToJson(node, objectOption) { + var _a; + const result = returnValue ? {} : void 0; + for (const element of node.properties) { + if (element.kind !== 304 /* PropertyAssignment */) { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, element, Diagnostics.Property_assignment_expected)); + continue; + } + if (element.questionToken) { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, element.questionToken, Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?")); + } + if (!isDoubleQuotedString(element.name)) { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, element.name, Diagnostics.String_literal_with_double_quotes_expected)); + } + const textOfKey = isComputedNonLiteralName(element.name) ? void 0 : getTextOfPropertyName(element.name); + const keyText = textOfKey && unescapeLeadingUnderscores(textOfKey); + const option = keyText ? (_a = objectOption == null ? void 0 : objectOption.elementOptions) == null ? void 0 : _a.get(keyText) : void 0; + const value = convertPropertyValueToJson(element.initializer, option); + if (typeof keyText !== "undefined") { + if (returnValue) { + result[keyText] = value; + } + jsonConversionNotifier == null ? void 0 : jsonConversionNotifier.onPropertySet(keyText, value, element, objectOption, option); + } + } + return result; + } + function convertArrayLiteralExpressionToJson(elements, elementOption) { + if (!returnValue) { + elements.forEach((element) => convertPropertyValueToJson(element, elementOption)); + return void 0; + } + return filter(elements.map((element) => convertPropertyValueToJson(element, elementOption)), (v) => v !== void 0); + } + function convertPropertyValueToJson(valueExpression, option) { + switch (valueExpression.kind) { + case 112 /* TrueKeyword */: + return true; + case 97 /* FalseKeyword */: + return false; + case 106 /* NullKeyword */: + return null; + // eslint-disable-line no-restricted-syntax + case 11 /* StringLiteral */: + if (!isDoubleQuotedString(valueExpression)) { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, Diagnostics.String_literal_with_double_quotes_expected)); + } + return valueExpression.text; + case 9 /* NumericLiteral */: + return Number(valueExpression.text); + case 225 /* PrefixUnaryExpression */: + if (valueExpression.operator !== 41 /* MinusToken */ || valueExpression.operand.kind !== 9 /* NumericLiteral */) { + break; + } + return -Number(valueExpression.operand.text); + case 211 /* ObjectLiteralExpression */: + const objectLiteralExpression = valueExpression; + return convertObjectLiteralExpressionToJson(objectLiteralExpression, option); + case 210 /* ArrayLiteralExpression */: + return convertArrayLiteralExpressionToJson( + valueExpression.elements, + option && option.element + ); + } + if (option) { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, Diagnostics.Compiler_option_0_requires_a_value_of_type_1, option.name, getCompilerOptionValueTypeString(option))); + } else { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, valueExpression, Diagnostics.Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_literal)); + } + return void 0; + } + function isDoubleQuotedString(node) { + return isStringLiteral(node) && isStringDoubleQuoted(node, sourceFile); + } +} +function getCompilerOptionValueTypeString(option) { + return option.type === "listOrElement" ? `${getCompilerOptionValueTypeString(option.element)} or Array` : option.type === "list" ? "Array" : isString(option.type) ? option.type : "string"; +} +function isCompilerOptionsValue(option, value) { + if (option) { + if (isNullOrUndefined(value)) return !option.disallowNullOrUndefined; + if (option.type === "list") { + return isArray(value); + } + if (option.type === "listOrElement") { + return isArray(value) || isCompilerOptionsValue(option.element, value); + } + const expectedType = isString(option.type) ? option.type : "string"; + return typeof value === expectedType; + } + return false; +} +function convertToTSConfig(configParseResult, configFileName, host) { + var _a, _b, _c; + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames); + const files = map( + filter( + configParseResult.fileNames, + !((_b = (_a = configParseResult.options.configFile) == null ? void 0 : _a.configFileSpecs) == null ? void 0 : _b.validatedIncludeSpecs) ? returnTrue : matchesSpecs( + configFileName, + configParseResult.options.configFile.configFileSpecs.validatedIncludeSpecs, + configParseResult.options.configFile.configFileSpecs.validatedExcludeSpecs, + host + ) + ), + (f) => getRelativePathFromFile(getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), getNormalizedAbsolutePath(f, host.getCurrentDirectory()), getCanonicalFileName) + ); + const pathOptions = { configFilePath: getNormalizedAbsolutePath(configFileName, host.getCurrentDirectory()), useCaseSensitiveFileNames: host.useCaseSensitiveFileNames }; + const optionMap = serializeCompilerOptions(configParseResult.options, pathOptions); + const watchOptionMap = configParseResult.watchOptions && serializeWatchOptions(configParseResult.watchOptions); + const config = { + compilerOptions: { + ...optionMapToObject(optionMap), + showConfig: void 0, + configFile: void 0, + configFilePath: void 0, + help: void 0, + init: void 0, + listFiles: void 0, + listEmittedFiles: void 0, + project: void 0, + build: void 0, + version: void 0 + }, + watchOptions: watchOptionMap && optionMapToObject(watchOptionMap), + references: map(configParseResult.projectReferences, (r) => ({ ...r, path: r.originalPath ? r.originalPath : "", originalPath: void 0 })), + files: length(files) ? files : void 0, + ...((_c = configParseResult.options.configFile) == null ? void 0 : _c.configFileSpecs) ? { + include: filterSameAsDefaultInclude(configParseResult.options.configFile.configFileSpecs.validatedIncludeSpecs), + exclude: configParseResult.options.configFile.configFileSpecs.validatedExcludeSpecs + } : {}, + compileOnSave: !!configParseResult.compileOnSave ? true : void 0 + }; + const providedKeys = new Set(optionMap.keys()); + const impliedCompilerOptions = {}; + for (const option in computedOptions) { + if (!providedKeys.has(option) && optionDependsOn(option, providedKeys)) { + const implied = computedOptions[option].computeValue(configParseResult.options); + const defaultValue = computedOptions[option].computeValue({}); + if (implied !== defaultValue) { + impliedCompilerOptions[option] = computedOptions[option].computeValue(configParseResult.options); + } + } + } + assign(config.compilerOptions, optionMapToObject(serializeCompilerOptions(impliedCompilerOptions, pathOptions))); + return config; +} +function optionDependsOn(option, dependsOn) { + const seen = /* @__PURE__ */ new Set(); + return optionDependsOnRecursive(option); + function optionDependsOnRecursive(option2) { + var _a; + if (addToSeen(seen, option2)) { + return some((_a = computedOptions[option2]) == null ? void 0 : _a.dependencies, (dep) => dependsOn.has(dep) || optionDependsOnRecursive(dep)); + } + return false; + } +} +function optionMapToObject(optionMap) { + return Object.fromEntries(optionMap); +} +function filterSameAsDefaultInclude(specs) { + if (!length(specs)) return void 0; + if (length(specs) !== 1) return specs; + if (specs[0] === defaultIncludeSpec) return void 0; + return specs; +} +function matchesSpecs(path, includeSpecs, excludeSpecs, host) { + if (!includeSpecs) return returnTrue; + const patterns = getFileMatcherPatterns(path, excludeSpecs, includeSpecs, host.useCaseSensitiveFileNames, host.getCurrentDirectory()); + const excludeRe = patterns.excludePattern && getRegexFromPattern(patterns.excludePattern, host.useCaseSensitiveFileNames); + const includeRe = patterns.includeFilePattern && getRegexFromPattern(patterns.includeFilePattern, host.useCaseSensitiveFileNames); + if (includeRe) { + if (excludeRe) { + return (path2) => !(includeRe.test(path2) && !excludeRe.test(path2)); + } + return (path2) => !includeRe.test(path2); + } + if (excludeRe) { + return (path2) => excludeRe.test(path2); + } + return returnTrue; +} +function getCustomTypeMapOfCommandLineOption(optionDefinition) { + switch (optionDefinition.type) { + case "string": + case "number": + case "boolean": + case "object": + return void 0; + case "list": + case "listOrElement": + return getCustomTypeMapOfCommandLineOption(optionDefinition.element); + default: + return optionDefinition.type; + } +} +function getNameOfCompilerOptionValue(value, customTypeMap) { + return forEachEntry(customTypeMap, (mapValue, key) => { + if (mapValue === value) { + return key; + } + }); +} +function serializeCompilerOptions(options, pathOptions) { + return serializeOptionBaseObject(options, getOptionsNameMap(), pathOptions); +} +function serializeWatchOptions(options) { + return serializeOptionBaseObject(options, getWatchOptionsNameMap()); +} +function serializeOptionBaseObject(options, { optionsNameMap }, pathOptions) { + const result = /* @__PURE__ */ new Map(); + const getCanonicalFileName = pathOptions && createGetCanonicalFileName(pathOptions.useCaseSensitiveFileNames); + for (const name in options) { + if (hasProperty(options, name)) { + if (optionsNameMap.has(name) && (optionsNameMap.get(name).category === Diagnostics.Command_line_Options || optionsNameMap.get(name).category === Diagnostics.Output_Formatting)) { + continue; + } + const value = options[name]; + const optionDefinition = optionsNameMap.get(name.toLowerCase()); + if (optionDefinition) { + Debug.assert(optionDefinition.type !== "listOrElement"); + const customTypeMap = getCustomTypeMapOfCommandLineOption(optionDefinition); + if (!customTypeMap) { + if (pathOptions && optionDefinition.isFilePath) { + result.set(name, getRelativePathFromFile(pathOptions.configFilePath, getNormalizedAbsolutePath(value, getDirectoryPath(pathOptions.configFilePath)), getCanonicalFileName)); + } else if (pathOptions && optionDefinition.type === "list" && optionDefinition.element.isFilePath) { + result.set(name, value.map((v) => getRelativePathFromFile(pathOptions.configFilePath, getNormalizedAbsolutePath(v, getDirectoryPath(pathOptions.configFilePath)), getCanonicalFileName))); + } else { + result.set(name, value); + } + } else { + if (optionDefinition.type === "list") { + result.set(name, value.map((element) => getNameOfCompilerOptionValue(element, customTypeMap))); + } else { + result.set(name, getNameOfCompilerOptionValue(value, customTypeMap)); + } + } + } + } + } + return result; +} +function generateTSConfig(options, newLine) { + const tab = " "; + const result = []; + const allSetOptions = Object.keys(options).filter((k) => k !== "init" && k !== "help" && k !== "watch"); + result.push(`{`); + result.push(`${tab}// ${getLocaleSpecificMessage(Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file)}`); + result.push(`${tab}"compilerOptions": {`); + emitHeader(Diagnostics.File_Layout); + emitOption("rootDir", "./src", "optional"); + emitOption("outDir", "./dist", "optional"); + newline(); + emitHeader(Diagnostics.Environment_Settings); + emitHeader(Diagnostics.See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule); + emitOption("module", 199 /* NodeNext */); + emitOption("target", 99 /* ESNext */); + emitOption("types", []); + if (options.lib) { + emitOption("lib", options.lib); + } + emitHeader(Diagnostics.For_nodejs_Colon); + result.push(`${tab}${tab}// "lib": ["esnext"],`); + result.push(`${tab}${tab}// "types": ["node"],`); + emitHeader(Diagnostics.and_npm_install_D_types_Slashnode); + newline(); + emitHeader(Diagnostics.Other_Outputs); + emitOption( + "sourceMap", + /*defaultValue*/ + true + ); + emitOption( + "declaration", + /*defaultValue*/ + true + ); + emitOption( + "declarationMap", + /*defaultValue*/ + true + ); + newline(); + emitHeader(Diagnostics.Stricter_Typechecking_Options); + emitOption( + "noUncheckedIndexedAccess", + /*defaultValue*/ + true + ); + emitOption( + "exactOptionalPropertyTypes", + /*defaultValue*/ + true + ); + newline(); + emitHeader(Diagnostics.Style_Options); + emitOption( + "noImplicitReturns", + /*defaultValue*/ + true, + "optional" + ); + emitOption( + "noImplicitOverride", + /*defaultValue*/ + true, + "optional" + ); + emitOption( + "noUnusedLocals", + /*defaultValue*/ + true, + "optional" + ); + emitOption( + "noUnusedParameters", + /*defaultValue*/ + true, + "optional" + ); + emitOption( + "noFallthroughCasesInSwitch", + /*defaultValue*/ + true, + "optional" + ); + emitOption( + "noPropertyAccessFromIndexSignature", + /*defaultValue*/ + true, + "optional" + ); + newline(); + emitHeader(Diagnostics.Recommended_Options); + emitOption( + "strict", + /*defaultValue*/ + true + ); + emitOption("jsx", 4 /* ReactJSX */); + emitOption( + "verbatimModuleSyntax", + /*defaultValue*/ + true + ); + emitOption( + "isolatedModules", + /*defaultValue*/ + true + ); + emitOption( + "noUncheckedSideEffectImports", + /*defaultValue*/ + true + ); + emitOption("moduleDetection", 3 /* Force */); + emitOption( + "skipLibCheck", + /*defaultValue*/ + true + ); + if (allSetOptions.length > 0) { + newline(); + while (allSetOptions.length > 0) { + emitOption(allSetOptions[0], options[allSetOptions[0]]); + } + } + function newline() { + result.push(""); + } + function emitHeader(header) { + result.push(`${tab}${tab}// ${getLocaleSpecificMessage(header)}`); + } + function emitOption(setting, defaultValue, commented = "never") { + const existingOptionIndex = allSetOptions.indexOf(setting); + if (existingOptionIndex >= 0) { + allSetOptions.splice(existingOptionIndex, 1); + } + let comment; + if (commented === "always") { + comment = true; + } else if (commented === "never") { + comment = false; + } else { + comment = !hasProperty(options, setting); + } + const value = options[setting] ?? defaultValue; + if (comment) { + result.push(`${tab}${tab}// "${setting}": ${formatValueOrArray(setting, value)},`); + } else { + result.push(`${tab}${tab}"${setting}": ${formatValueOrArray(setting, value)},`); + } + } + function formatValueOrArray(settingName, value) { + const option = optionDeclarations.filter((c) => c.name === settingName)[0]; + if (!option) Debug.fail(`No option named ${settingName}?`); + const map2 = option.type instanceof Map ? option.type : void 0; + if (isArray(value)) { + const map3 = "element" in option && option.element.type instanceof Map ? option.element.type : void 0; + return `[${value.map((v) => formatSingleValue(v, map3)).join(", ")}]`; + } else { + return formatSingleValue(value, map2); + } + } + function formatSingleValue(value, map2) { + if (map2) { + value = getNameOfCompilerOptionValue(value, map2) ?? Debug.fail(`No matching value of ${value}`); + } + return JSON.stringify(value); + } + result.push(`${tab}}`); + result.push(`}`); + result.push(``); + return result.join(newLine); +} +function convertToOptionsWithAbsolutePaths(options, toAbsolutePath) { + const result = {}; + const optionsNameMap = getOptionsNameMap().optionsNameMap; + for (const name in options) { + if (hasProperty(options, name)) { + result[name] = convertToOptionValueWithAbsolutePaths( + optionsNameMap.get(name.toLowerCase()), + options[name], + toAbsolutePath + ); + } + } + if (result.configFilePath) { + result.configFilePath = toAbsolutePath(result.configFilePath); + } + return result; +} +function convertToOptionValueWithAbsolutePaths(option, value, toAbsolutePath) { + if (option && !isNullOrUndefined(value)) { + if (option.type === "list") { + const values = value; + if (option.element.isFilePath && values.length) { + return values.map(toAbsolutePath); + } + } else if (option.isFilePath) { + return toAbsolutePath(value); + } + Debug.assert(option.type !== "listOrElement"); + } + return value; +} +function parseJsonConfigFileContent(json, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache, existingWatchOptions) { + return parseJsonConfigFileContentWorker( + json, + /*sourceFile*/ + void 0, + host, + basePath, + existingOptions, + existingWatchOptions, + configFileName, + resolutionStack, + extraFileExtensions, + extendedConfigCache + ); +} +function parseJsonSourceFileConfigFileContent(sourceFile, host, basePath, existingOptions, configFileName, resolutionStack, extraFileExtensions, extendedConfigCache, existingWatchOptions) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Parse, "parseJsonSourceFileConfigFileContent", { path: sourceFile.fileName }); + const result = parseJsonConfigFileContentWorker( + /*json*/ + void 0, + sourceFile, + host, + basePath, + existingOptions, + existingWatchOptions, + configFileName, + resolutionStack, + extraFileExtensions, + extendedConfigCache + ); + (_b = tracing) == null ? void 0 : _b.pop(); + return result; +} +function setConfigFileInOptions(options, configFile) { + if (configFile) { + Object.defineProperty(options, "configFile", { enumerable: false, writable: false, value: configFile }); + } +} +function isNullOrUndefined(x) { + return x === void 0 || x === null; +} +function directoryOfCombinedPath(fileName, basePath) { + return getDirectoryPath(getNormalizedAbsolutePath(fileName, basePath)); +} +var defaultIncludeSpec = "**/*"; +function parseJsonConfigFileContentWorker(json, sourceFile, host, basePath, existingOptions = {}, existingWatchOptions, configFileName, resolutionStack = [], extraFileExtensions = [], extendedConfigCache) { + Debug.assert(json === void 0 && sourceFile !== void 0 || json !== void 0 && sourceFile === void 0); + const errors = []; + const parsedConfig = parseConfig(json, sourceFile, host, basePath, configFileName, resolutionStack, errors, extendedConfigCache); + const { raw } = parsedConfig; + const options = handleOptionConfigDirTemplateSubstitution( + extend(existingOptions, parsedConfig.options || {}), + configDirTemplateSubstitutionOptions, + basePath + ); + const watchOptions = handleWatchOptionsConfigDirTemplateSubstitution( + existingWatchOptions && parsedConfig.watchOptions ? extend(existingWatchOptions, parsedConfig.watchOptions) : parsedConfig.watchOptions || existingWatchOptions, + basePath + ); + options.configFilePath = configFileName && normalizeSlashes(configFileName); + const basePathForFileNames = normalizePath(configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath); + const configFileSpecs = getConfigFileSpecs(); + if (sourceFile) sourceFile.configFileSpecs = configFileSpecs; + setConfigFileInOptions(options, sourceFile); + return { + options, + watchOptions, + fileNames: getFileNames(basePathForFileNames), + projectReferences: getProjectReferences(basePathForFileNames), + typeAcquisition: parsedConfig.typeAcquisition || getDefaultTypeAcquisition(), + raw, + errors, + // Wildcard directories (provided as part of a wildcard path) are stored in a + // file map that marks whether it was a regular wildcard match (with a `*` or `?` token), + // or a recursive directory. This information is used by filesystem watchers to monitor for + // new entries in these paths. + wildcardDirectories: getWildcardDirectories(configFileSpecs, basePathForFileNames, host.useCaseSensitiveFileNames), + compileOnSave: !!raw.compileOnSave + }; + function getConfigFileSpecs() { + const referencesOfRaw = getPropFromRaw("references", (element) => typeof element === "object", "object"); + const filesSpecs = toPropValue(getSpecsFromRaw("files")); + if (filesSpecs) { + const hasZeroOrNoReferences = referencesOfRaw === "no-prop" || isArray(referencesOfRaw) && referencesOfRaw.length === 0; + const hasExtends = hasProperty(raw, "extends"); + if (filesSpecs.length === 0 && hasZeroOrNoReferences && !hasExtends) { + if (sourceFile) { + const fileName = configFileName || "tsconfig.json"; + const diagnosticMessage = Diagnostics.The_files_list_in_config_file_0_is_empty; + const nodeValue = forEachTsConfigPropArray(sourceFile, "files", (property) => property.initializer); + const error2 = createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, nodeValue, diagnosticMessage, fileName); + errors.push(error2); + } else { + createCompilerDiagnosticOnlyIfJson(Diagnostics.The_files_list_in_config_file_0_is_empty, configFileName || "tsconfig.json"); + } + } + } + let includeSpecs = toPropValue(getSpecsFromRaw("include")); + const excludeOfRaw = getSpecsFromRaw("exclude"); + let isDefaultIncludeSpec = false; + let excludeSpecs = toPropValue(excludeOfRaw); + if (excludeOfRaw === "no-prop") { + const outDir = options.outDir; + const declarationDir = options.declarationDir; + if (outDir || declarationDir) { + excludeSpecs = filter([outDir, declarationDir], (d) => !!d); + } + } + if (filesSpecs === void 0 && includeSpecs === void 0) { + includeSpecs = [defaultIncludeSpec]; + isDefaultIncludeSpec = true; + } + let validatedIncludeSpecsBeforeSubstitution, validatedExcludeSpecsBeforeSubstitution; + let validatedIncludeSpecs, validatedExcludeSpecs; + if (includeSpecs) { + validatedIncludeSpecsBeforeSubstitution = validateSpecs( + includeSpecs, + errors, + /*disallowTrailingRecursion*/ + true, + sourceFile, + "include" + ); + validatedIncludeSpecs = getSubstitutedStringArrayWithConfigDirTemplate( + validatedIncludeSpecsBeforeSubstitution, + basePathForFileNames + ) || validatedIncludeSpecsBeforeSubstitution; + } + if (excludeSpecs) { + validatedExcludeSpecsBeforeSubstitution = validateSpecs( + excludeSpecs, + errors, + /*disallowTrailingRecursion*/ + false, + sourceFile, + "exclude" + ); + validatedExcludeSpecs = getSubstitutedStringArrayWithConfigDirTemplate( + validatedExcludeSpecsBeforeSubstitution, + basePathForFileNames + ) || validatedExcludeSpecsBeforeSubstitution; + } + const validatedFilesSpecBeforeSubstitution = filter(filesSpecs, isString); + const validatedFilesSpec = getSubstitutedStringArrayWithConfigDirTemplate( + validatedFilesSpecBeforeSubstitution, + basePathForFileNames + ) || validatedFilesSpecBeforeSubstitution; + return { + filesSpecs, + includeSpecs, + excludeSpecs, + validatedFilesSpec, + validatedIncludeSpecs, + validatedExcludeSpecs, + validatedFilesSpecBeforeSubstitution, + validatedIncludeSpecsBeforeSubstitution, + validatedExcludeSpecsBeforeSubstitution, + isDefaultIncludeSpec + }; + } + function getFileNames(basePath2) { + const fileNames = getFileNamesFromConfigSpecs(configFileSpecs, basePath2, options, host, extraFileExtensions); + if (shouldReportNoInputFiles(fileNames, canJsonReportNoInputFiles(raw), resolutionStack)) { + errors.push(getErrorForNoInputFiles(configFileSpecs, configFileName)); + } + return fileNames; + } + function getProjectReferences(basePath2) { + let projectReferences; + const referencesOfRaw = getPropFromRaw("references", (element) => typeof element === "object", "object"); + if (isArray(referencesOfRaw)) { + for (const ref of referencesOfRaw) { + if (typeof ref.path !== "string") { + createCompilerDiagnosticOnlyIfJson(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, "reference.path", "string"); + } else { + (projectReferences || (projectReferences = [])).push({ + path: getNormalizedAbsolutePath(ref.path, basePath2), + originalPath: ref.path, + prepend: ref.prepend, + circular: ref.circular + }); + } + } + } + return projectReferences; + } + function toPropValue(specResult) { + return isArray(specResult) ? specResult : void 0; + } + function getSpecsFromRaw(prop) { + return getPropFromRaw(prop, isString, "string"); + } + function getPropFromRaw(prop, validateElement, elementTypeName) { + if (hasProperty(raw, prop) && !isNullOrUndefined(raw[prop])) { + if (isArray(raw[prop])) { + const result = raw[prop]; + if (!sourceFile && !every(result, validateElement)) { + errors.push(createCompilerDiagnostic(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, elementTypeName)); + } + return result; + } else { + createCompilerDiagnosticOnlyIfJson(Diagnostics.Compiler_option_0_requires_a_value_of_type_1, prop, "Array"); + return "not-array"; + } + } + return "no-prop"; + } + function createCompilerDiagnosticOnlyIfJson(message, ...args) { + if (!sourceFile) { + errors.push(createCompilerDiagnostic(message, ...args)); + } + } +} +function handleWatchOptionsConfigDirTemplateSubstitution(watchOptions, basePath) { + return handleOptionConfigDirTemplateSubstitution(watchOptions, configDirTemplateSubstitutionWatchOptions, basePath); +} +function handleOptionConfigDirTemplateSubstitution(options, optionDeclarations2, basePath) { + if (!options) return options; + let result; + for (const option of optionDeclarations2) { + if (options[option.name] !== void 0) { + const value = options[option.name]; + switch (option.type) { + case "string": + Debug.assert(option.isFilePath); + if (startsWithConfigDirTemplate(value)) { + setOptionValue(option, getSubstitutedPathWithConfigDirTemplate(value, basePath)); + } + break; + case "list": + Debug.assert(option.element.isFilePath); + const listResult = getSubstitutedStringArrayWithConfigDirTemplate(value, basePath); + if (listResult) setOptionValue(option, listResult); + break; + case "object": + Debug.assert(option.name === "paths"); + const objectResult = getSubstitutedMapLikeOfStringArrayWithConfigDirTemplate(value, basePath); + if (objectResult) setOptionValue(option, objectResult); + break; + default: + Debug.fail("option type not supported"); + } + } + } + return result || options; + function setOptionValue(option, value) { + (result ?? (result = assign({}, options)))[option.name] = value; + } +} +var configDirTemplate = `\${configDir}`; +function startsWithConfigDirTemplate(value) { + return isString(value) && startsWith( + value, + configDirTemplate, + /*ignoreCase*/ + true + ); +} +function getSubstitutedPathWithConfigDirTemplate(value, basePath) { + return getNormalizedAbsolutePath(value.replace(configDirTemplate, "./"), basePath); +} +function getSubstitutedStringArrayWithConfigDirTemplate(list, basePath) { + if (!list) return list; + let result; + list.forEach((element, index) => { + if (!startsWithConfigDirTemplate(element)) return; + (result ?? (result = list.slice()))[index] = getSubstitutedPathWithConfigDirTemplate(element, basePath); + }); + return result; +} +function getSubstitutedMapLikeOfStringArrayWithConfigDirTemplate(mapLike, basePath) { + let result; + const ownKeys = getOwnKeys(mapLike); + ownKeys.forEach((key) => { + if (!isArray(mapLike[key])) return; + const subStitution = getSubstitutedStringArrayWithConfigDirTemplate(mapLike[key], basePath); + if (!subStitution) return; + (result ?? (result = assign({}, mapLike)))[key] = subStitution; + }); + return result; +} +function isErrorNoInputFiles(error2) { + return error2.code === Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2.code; +} +function getErrorForNoInputFiles({ includeSpecs, excludeSpecs }, configFileName) { + return createCompilerDiagnostic( + Diagnostics.No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2, + configFileName || "tsconfig.json", + JSON.stringify(includeSpecs || []), + JSON.stringify(excludeSpecs || []) + ); +} +function shouldReportNoInputFiles(fileNames, canJsonReportNoInutFiles, resolutionStack) { + return fileNames.length === 0 && canJsonReportNoInutFiles && (!resolutionStack || resolutionStack.length === 0); +} +function isSolutionConfig(config) { + return !config.fileNames.length && hasProperty(config.raw, "references"); +} +function canJsonReportNoInputFiles(raw) { + return !hasProperty(raw, "files") && !hasProperty(raw, "references"); +} +function updateErrorForNoInputFiles(fileNames, configFileName, configFileSpecs, configParseDiagnostics, canJsonReportNoInutFiles) { + const existingErrors = configParseDiagnostics.length; + if (shouldReportNoInputFiles(fileNames, canJsonReportNoInutFiles)) { + configParseDiagnostics.push(getErrorForNoInputFiles(configFileSpecs, configFileName)); + } else { + filterMutate(configParseDiagnostics, (error2) => !isErrorNoInputFiles(error2)); + } + return existingErrors !== configParseDiagnostics.length; +} +function isSuccessfulParsedTsconfig(value) { + return !!value.options; +} +function parseConfig(json, sourceFile, host, basePath, configFileName, resolutionStack, errors, extendedConfigCache) { + var _a; + basePath = normalizeSlashes(basePath); + const resolvedPath = getNormalizedAbsolutePath(configFileName || "", basePath); + if (resolutionStack.includes(resolvedPath)) { + errors.push(createCompilerDiagnostic(Diagnostics.Circularity_detected_while_resolving_configuration_Colon_0, [...resolutionStack, resolvedPath].join(" -> "))); + return { raw: json || convertToObject(sourceFile, errors) }; + } + const ownConfig = json ? parseOwnConfigOfJson(json, host, basePath, configFileName, errors) : parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors); + if ((_a = ownConfig.options) == null ? void 0 : _a.paths) { + ownConfig.options.pathsBasePath = basePath; + } + if (ownConfig.extendedConfigPath) { + resolutionStack = resolutionStack.concat([resolvedPath]); + const result = { options: {} }; + if (isString(ownConfig.extendedConfigPath)) { + applyExtendedConfig(result, ownConfig.extendedConfigPath); + } else { + ownConfig.extendedConfigPath.forEach((extendedConfigPath) => applyExtendedConfig(result, extendedConfigPath)); + } + if (result.include) ownConfig.raw.include = result.include; + if (result.exclude) ownConfig.raw.exclude = result.exclude; + if (result.files) ownConfig.raw.files = result.files; + if (ownConfig.raw.compileOnSave === void 0 && result.compileOnSave) ownConfig.raw.compileOnSave = result.compileOnSave; + if (sourceFile && result.extendedSourceFiles) sourceFile.extendedSourceFiles = arrayFrom(result.extendedSourceFiles.keys()); + ownConfig.options = assign(result.options, ownConfig.options); + ownConfig.watchOptions = ownConfig.watchOptions && result.watchOptions ? assignWatchOptions(result, ownConfig.watchOptions) : ownConfig.watchOptions || result.watchOptions; + } + return ownConfig; + function applyExtendedConfig(result, extendedConfigPath) { + const extendedConfig = getExtendedConfig(sourceFile, extendedConfigPath, host, resolutionStack, errors, extendedConfigCache, result); + if (extendedConfig && isSuccessfulParsedTsconfig(extendedConfig)) { + const extendsRaw = extendedConfig.raw; + let relativeDifference; + const setPropertyInResultIfNotUndefined = (propertyName) => { + if (ownConfig.raw[propertyName]) return; + if (extendsRaw[propertyName]) { + result[propertyName] = map(extendsRaw[propertyName], (path) => startsWithConfigDirTemplate(path) || isRootedDiskPath(path) ? path : combinePaths( + relativeDifference || (relativeDifference = convertToRelativePath(getDirectoryPath(extendedConfigPath), basePath, createGetCanonicalFileName(host.useCaseSensitiveFileNames))), + path + )); + } + }; + setPropertyInResultIfNotUndefined("include"); + setPropertyInResultIfNotUndefined("exclude"); + setPropertyInResultIfNotUndefined("files"); + if (extendsRaw.compileOnSave !== void 0) { + result.compileOnSave = extendsRaw.compileOnSave; + } + assign(result.options, extendedConfig.options); + result.watchOptions = result.watchOptions && extendedConfig.watchOptions ? assignWatchOptions(result, extendedConfig.watchOptions) : result.watchOptions || extendedConfig.watchOptions; + } + } + function assignWatchOptions(result, watchOptions) { + if (result.watchOptionsCopied) return assign(result.watchOptions, watchOptions); + result.watchOptionsCopied = true; + return assign({}, result.watchOptions, watchOptions); + } +} +function parseOwnConfigOfJson(json, host, basePath, configFileName, errors) { + if (hasProperty(json, "excludes")) { + errors.push(createCompilerDiagnostic(Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); + } + const options = convertCompilerOptionsFromJsonWorker(json.compilerOptions, basePath, errors, configFileName); + const typeAcquisition = convertTypeAcquisitionFromJsonWorker(json.typeAcquisition, basePath, errors, configFileName); + const watchOptions = convertWatchOptionsFromJsonWorker(json.watchOptions, basePath, errors); + json.compileOnSave = convertCompileOnSaveOptionFromJson(json, basePath, errors); + const extendedConfigPath = json.extends || json.extends === "" ? getExtendsConfigPathOrArray(json.extends, host, basePath, configFileName, errors) : void 0; + return { raw: json, options, watchOptions, typeAcquisition, extendedConfigPath }; +} +function getExtendsConfigPathOrArray(value, host, basePath, configFileName, errors, propertyAssignment, valueExpression, sourceFile) { + let extendedConfigPath; + const newBase = configFileName ? directoryOfCombinedPath(configFileName, basePath) : basePath; + if (isString(value)) { + extendedConfigPath = getExtendsConfigPath( + value, + host, + newBase, + errors, + valueExpression, + sourceFile + ); + } else if (isArray(value)) { + extendedConfigPath = []; + for (let index = 0; index < value.length; index++) { + const fileName = value[index]; + if (isString(fileName)) { + extendedConfigPath = append( + extendedConfigPath, + getExtendsConfigPath( + fileName, + host, + newBase, + errors, + valueExpression == null ? void 0 : valueExpression.elements[index], + sourceFile + ) + ); + } else { + convertJsonOption(extendsOptionDeclaration.element, value, basePath, errors, propertyAssignment, valueExpression == null ? void 0 : valueExpression.elements[index], sourceFile); + } + } + } else { + convertJsonOption(extendsOptionDeclaration, value, basePath, errors, propertyAssignment, valueExpression, sourceFile); + } + return extendedConfigPath; +} +function parseOwnConfigOfJsonSourceFile(sourceFile, host, basePath, configFileName, errors) { + const options = getDefaultCompilerOptions(configFileName); + let typeAcquisition; + let watchOptions; + let extendedConfigPath; + let rootCompilerOptions; + const rootOptions = getTsconfigRootOptionsMap(); + const json = convertConfigFileToObject( + sourceFile, + errors, + { rootOptions, onPropertySet } + ); + if (!typeAcquisition) { + typeAcquisition = getDefaultTypeAcquisition(configFileName); + } + if (rootCompilerOptions && json && json.compilerOptions === void 0) { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, rootCompilerOptions[0], Diagnostics._0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file, getTextOfPropertyName(rootCompilerOptions[0]))); + } + return { raw: json, options, watchOptions, typeAcquisition, extendedConfigPath }; + function onPropertySet(keyText, value, propertyAssignment, parentOption, option) { + if (option && option !== extendsOptionDeclaration) value = convertJsonOption(option, value, basePath, errors, propertyAssignment, propertyAssignment.initializer, sourceFile); + if (parentOption == null ? void 0 : parentOption.name) { + if (option) { + let currentOption; + if (parentOption === compilerOptionsDeclaration) currentOption = options; + else if (parentOption === watchOptionsDeclaration) currentOption = watchOptions ?? (watchOptions = {}); + else if (parentOption === typeAcquisitionDeclaration) currentOption = typeAcquisition ?? (typeAcquisition = getDefaultTypeAcquisition(configFileName)); + else Debug.fail("Unknown option"); + currentOption[option.name] = value; + } else if (keyText && (parentOption == null ? void 0 : parentOption.extraKeyDiagnostics)) { + if (parentOption.elementOptions) { + errors.push(createUnknownOptionError( + keyText, + parentOption.extraKeyDiagnostics, + /*unknownOptionErrorText*/ + void 0, + propertyAssignment.name, + sourceFile + )); + } else { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, propertyAssignment.name, parentOption.extraKeyDiagnostics.unknownOptionDiagnostic, keyText)); + } + } + } else if (parentOption === rootOptions) { + if (option === extendsOptionDeclaration) { + extendedConfigPath = getExtendsConfigPathOrArray(value, host, basePath, configFileName, errors, propertyAssignment, propertyAssignment.initializer, sourceFile); + } else if (!option) { + if (keyText === "excludes") { + errors.push(createDiagnosticForNodeInSourceFile(sourceFile, propertyAssignment.name, Diagnostics.Unknown_option_excludes_Did_you_mean_exclude)); + } + if (find(commandOptionsWithoutBuild, (opt) => opt.name === keyText)) { + rootCompilerOptions = append(rootCompilerOptions, propertyAssignment.name); + } + } + } + } +} +function getExtendsConfigPath(extendedConfig, host, basePath, errors, valueExpression, sourceFile) { + extendedConfig = normalizeSlashes(extendedConfig); + if (isRootedDiskPath(extendedConfig) || startsWith(extendedConfig, "./") || startsWith(extendedConfig, "../")) { + let extendedConfigPath = getNormalizedAbsolutePath(extendedConfig, basePath); + if (!host.fileExists(extendedConfigPath) && !endsWith(extendedConfigPath, ".json" /* Json */)) { + extendedConfigPath = `${extendedConfigPath}.json`; + if (!host.fileExists(extendedConfigPath)) { + errors.push(createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, Diagnostics.File_0_not_found, extendedConfig)); + return void 0; + } + } + return extendedConfigPath; + } + const resolved = nodeNextJsonConfigResolver(extendedConfig, combinePaths(basePath, "tsconfig.json"), host); + if (resolved.resolvedModule) { + return resolved.resolvedModule.resolvedFileName; + } + if (extendedConfig === "") { + errors.push(createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, Diagnostics.Compiler_option_0_cannot_be_given_an_empty_string, "extends")); + } else { + errors.push(createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, Diagnostics.File_0_not_found, extendedConfig)); + } + return void 0; +} +function getExtendedConfig(sourceFile, extendedConfigPath, host, resolutionStack, errors, extendedConfigCache, result) { + const path = host.useCaseSensitiveFileNames ? extendedConfigPath : toFileNameLowerCase(extendedConfigPath); + let value; + let extendedResult; + let extendedConfig; + if (extendedConfigCache && (value = extendedConfigCache.get(path))) { + ({ extendedResult, extendedConfig } = value); + } else { + extendedResult = readJsonConfigFile(extendedConfigPath, (path2) => host.readFile(path2)); + if (!extendedResult.parseDiagnostics.length) { + extendedConfig = parseConfig( + /*json*/ + void 0, + extendedResult, + host, + getDirectoryPath(extendedConfigPath), + getBaseFileName(extendedConfigPath), + resolutionStack, + errors, + extendedConfigCache + ); + } + if (extendedConfigCache) { + extendedConfigCache.set(path, { extendedResult, extendedConfig }); + } + } + if (sourceFile) { + (result.extendedSourceFiles ?? (result.extendedSourceFiles = /* @__PURE__ */ new Set())).add(extendedResult.fileName); + if (extendedResult.extendedSourceFiles) { + for (const extenedSourceFile of extendedResult.extendedSourceFiles) { + result.extendedSourceFiles.add(extenedSourceFile); + } + } + } + if (extendedResult.parseDiagnostics.length) { + errors.push(...extendedResult.parseDiagnostics); + return void 0; + } + return extendedConfig; +} +function convertCompileOnSaveOptionFromJson(jsonOption, basePath, errors) { + if (!hasProperty(jsonOption, compileOnSaveCommandLineOption.name)) { + return false; + } + const result = convertJsonOption(compileOnSaveCommandLineOption, jsonOption.compileOnSave, basePath, errors); + return typeof result === "boolean" && result; +} +function convertCompilerOptionsFromJson(jsonOptions, basePath, configFileName) { + const errors = []; + const options = convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName); + return { options, errors }; +} +function convertTypeAcquisitionFromJson(jsonOptions, basePath, configFileName) { + const errors = []; + const options = convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName); + return { options, errors }; +} +function getDefaultCompilerOptions(configFileName) { + const options = configFileName && getBaseFileName(configFileName) === "jsconfig.json" ? { allowJs: true, maxNodeModuleJsDepth: 2, allowSyntheticDefaultImports: true, skipLibCheck: true, noEmit: true } : {}; + return options; +} +function convertCompilerOptionsFromJsonWorker(jsonOptions, basePath, errors, configFileName) { + const options = getDefaultCompilerOptions(configFileName); + convertOptionsFromJson(getCommandLineCompilerOptionsMap(), jsonOptions, basePath, options, compilerOptionsDidYouMeanDiagnostics, errors); + if (configFileName) { + options.configFilePath = normalizeSlashes(configFileName); + } + return options; +} +function getDefaultTypeAcquisition(configFileName) { + return { enable: !!configFileName && getBaseFileName(configFileName) === "jsconfig.json", include: [], exclude: [] }; +} +function convertTypeAcquisitionFromJsonWorker(jsonOptions, basePath, errors, configFileName) { + const options = getDefaultTypeAcquisition(configFileName); + convertOptionsFromJson(getCommandLineTypeAcquisitionMap(), jsonOptions, basePath, options, typeAcquisitionDidYouMeanDiagnostics, errors); + return options; +} +function convertWatchOptionsFromJsonWorker(jsonOptions, basePath, errors) { + return convertOptionsFromJson( + getCommandLineWatchOptionsMap(), + jsonOptions, + basePath, + /*defaultOptions*/ + void 0, + watchOptionsDidYouMeanDiagnostics, + errors + ); +} +function convertOptionsFromJson(optionsNameMap, jsonOptions, basePath, defaultOptions, diagnostics, errors) { + if (!jsonOptions) { + return; + } + for (const id in jsonOptions) { + const opt = optionsNameMap.get(id); + if (opt) { + (defaultOptions || (defaultOptions = {}))[opt.name] = convertJsonOption(opt, jsonOptions[id], basePath, errors); + } else { + errors.push(createUnknownOptionError(id, diagnostics)); + } + } + return defaultOptions; +} +function createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, node, message, ...args) { + return sourceFile && node ? createDiagnosticForNodeInSourceFile(sourceFile, node, message, ...args) : createCompilerDiagnostic(message, ...args); +} +function convertJsonOption(opt, value, basePath, errors, propertyAssignment, valueExpression, sourceFile) { + if (opt.isCommandLineOnly) { + errors.push(createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, propertyAssignment == null ? void 0 : propertyAssignment.name, Diagnostics.Option_0_can_only_be_specified_on_command_line, opt.name)); + return void 0; + } + if (isCompilerOptionsValue(opt, value)) { + const optType = opt.type; + if (optType === "list" && isArray(value)) { + return convertJsonOptionOfListType(opt, value, basePath, errors, propertyAssignment, valueExpression, sourceFile); + } else if (optType === "listOrElement") { + return isArray(value) ? convertJsonOptionOfListType(opt, value, basePath, errors, propertyAssignment, valueExpression, sourceFile) : convertJsonOption(opt.element, value, basePath, errors, propertyAssignment, valueExpression, sourceFile); + } else if (!isString(opt.type)) { + return convertJsonOptionOfCustomType(opt, value, errors, valueExpression, sourceFile); + } + const validatedValue = validateJsonOptionValue(opt, value, errors, valueExpression, sourceFile); + return isNullOrUndefined(validatedValue) ? validatedValue : normalizeNonListOptionValue(opt, basePath, validatedValue); + } else { + errors.push(createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, Diagnostics.Compiler_option_0_requires_a_value_of_type_1, opt.name, getCompilerOptionValueTypeString(opt))); + } +} +function normalizeNonListOptionValue(option, basePath, value) { + if (option.isFilePath) { + value = normalizeSlashes(value); + value = !startsWithConfigDirTemplate(value) ? getNormalizedAbsolutePath(value, basePath) : value; + if (value === "") { + value = "."; + } + } + return value; +} +function validateJsonOptionValue(opt, value, errors, valueExpression, sourceFile) { + var _a; + if (isNullOrUndefined(value)) return void 0; + const d = (_a = opt.extraValidation) == null ? void 0 : _a.call(opt, value); + if (!d) return value; + errors.push(createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, ...d)); + return void 0; +} +function convertJsonOptionOfCustomType(opt, value, errors, valueExpression, sourceFile) { + if (isNullOrUndefined(value)) return void 0; + const key = value.toLowerCase(); + const val = opt.type.get(key); + if (val !== void 0) { + return validateJsonOptionValue(opt, val, errors, valueExpression, sourceFile); + } else { + errors.push(createDiagnosticForInvalidCustomType(opt, (message, ...args) => createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(sourceFile, valueExpression, message, ...args))); + } +} +function convertJsonOptionOfListType(option, values, basePath, errors, propertyAssignment, valueExpression, sourceFile) { + return filter(map(values, (v, index) => convertJsonOption(option.element, v, basePath, errors, propertyAssignment, valueExpression == null ? void 0 : valueExpression.elements[index], sourceFile)), (v) => option.listPreserveFalsyValues ? true : !!v); +} +var invalidTrailingRecursionPattern = /(?:^|\/)\*\*\/?$/; +var wildcardDirectoryPattern = /^[^*?]*(?=\/[^/]*[*?])/; +function getFileNamesFromConfigSpecs(configFileSpecs, basePath, options, host, extraFileExtensions = emptyArray) { + basePath = normalizePath(basePath); + const keyMapper = createGetCanonicalFileName(host.useCaseSensitiveFileNames); + const literalFileMap = /* @__PURE__ */ new Map(); + const wildcardFileMap = /* @__PURE__ */ new Map(); + const wildCardJsonFileMap = /* @__PURE__ */ new Map(); + const { validatedFilesSpec, validatedIncludeSpecs, validatedExcludeSpecs } = configFileSpecs; + const supportedExtensions = getSupportedExtensions(options, extraFileExtensions); + const supportedExtensionsWithJsonIfResolveJsonModule = getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); + if (validatedFilesSpec) { + for (const fileName of validatedFilesSpec) { + const file = getNormalizedAbsolutePath(fileName, basePath); + literalFileMap.set(keyMapper(file), file); + } + } + let jsonOnlyIncludeRegexes; + if (validatedIncludeSpecs && validatedIncludeSpecs.length > 0) { + for (const file of host.readDirectory( + basePath, + flatten(supportedExtensionsWithJsonIfResolveJsonModule), + validatedExcludeSpecs, + validatedIncludeSpecs, + /*depth*/ + void 0 + )) { + if (fileExtensionIs(file, ".json" /* Json */)) { + if (!jsonOnlyIncludeRegexes) { + const includes = validatedIncludeSpecs.filter((s) => endsWith(s, ".json" /* Json */)); + const includeFilePatterns = map(getRegularExpressionsForWildcards(includes, basePath, "files"), (pattern) => `^${pattern}$`); + jsonOnlyIncludeRegexes = includeFilePatterns ? includeFilePatterns.map((pattern) => getRegexFromPattern(pattern, host.useCaseSensitiveFileNames)) : emptyArray; + } + const includeIndex = findIndex(jsonOnlyIncludeRegexes, (re) => re.test(file)); + if (includeIndex !== -1) { + const key2 = keyMapper(file); + if (!literalFileMap.has(key2) && !wildCardJsonFileMap.has(key2)) { + wildCardJsonFileMap.set(key2, file); + } + } + continue; + } + if (hasFileWithHigherPriorityExtension(file, literalFileMap, wildcardFileMap, supportedExtensions, keyMapper)) { + continue; + } + removeWildcardFilesWithLowerPriorityExtension(file, wildcardFileMap, supportedExtensions, keyMapper); + const key = keyMapper(file); + if (!literalFileMap.has(key) && !wildcardFileMap.has(key)) { + wildcardFileMap.set(key, file); + } + } + } + const literalFiles = arrayFrom(literalFileMap.values()); + const wildcardFiles = arrayFrom(wildcardFileMap.values()); + return literalFiles.concat(wildcardFiles, arrayFrom(wildCardJsonFileMap.values())); +} +function isExcludedFile(pathToCheck, spec, basePath, useCaseSensitiveFileNames2, currentDirectory) { + const { validatedFilesSpec, validatedIncludeSpecs, validatedExcludeSpecs } = spec; + if (!length(validatedIncludeSpecs) || !length(validatedExcludeSpecs)) return false; + basePath = normalizePath(basePath); + const keyMapper = createGetCanonicalFileName(useCaseSensitiveFileNames2); + if (validatedFilesSpec) { + for (const fileName of validatedFilesSpec) { + if (keyMapper(getNormalizedAbsolutePath(fileName, basePath)) === pathToCheck) return false; + } + } + return matchesExcludeWorker(pathToCheck, validatedExcludeSpecs, useCaseSensitiveFileNames2, currentDirectory, basePath); +} +function invalidDotDotAfterRecursiveWildcard(s) { + const wildcardIndex = startsWith(s, "**/") ? 0 : s.indexOf("/**/"); + if (wildcardIndex === -1) { + return false; + } + const lastDotIndex = endsWith(s, "/..") ? s.length : s.lastIndexOf("/../"); + return lastDotIndex > wildcardIndex; +} +function matchesExclude(pathToCheck, excludeSpecs, useCaseSensitiveFileNames2, currentDirectory) { + return matchesExcludeWorker( + pathToCheck, + filter(excludeSpecs, (spec) => !invalidDotDotAfterRecursiveWildcard(spec)), + useCaseSensitiveFileNames2, + currentDirectory + ); +} +function matchesExcludeWorker(pathToCheck, excludeSpecs, useCaseSensitiveFileNames2, currentDirectory, basePath) { + const excludePattern = getRegularExpressionForWildcard(excludeSpecs, combinePaths(normalizePath(currentDirectory), basePath), "exclude"); + const excludeRegex = excludePattern && getRegexFromPattern(excludePattern, useCaseSensitiveFileNames2); + if (!excludeRegex) return false; + if (excludeRegex.test(pathToCheck)) return true; + return !hasExtension(pathToCheck) && excludeRegex.test(ensureTrailingDirectorySeparator(pathToCheck)); +} +function validateSpecs(specs, errors, disallowTrailingRecursion, jsonSourceFile, specKey) { + return specs.filter((spec) => { + if (!isString(spec)) return false; + const diag2 = specToDiagnostic(spec, disallowTrailingRecursion); + if (diag2 !== void 0) { + errors.push(createDiagnostic(...diag2)); + } + return diag2 === void 0; + }); + function createDiagnostic(message, spec) { + const element = getTsConfigPropArrayElementValue(jsonSourceFile, specKey, spec); + return createDiagnosticForNodeInSourceFileOrCompilerDiagnostic(jsonSourceFile, element, message, spec); + } +} +function specToDiagnostic(spec, disallowTrailingRecursion) { + Debug.assert(typeof spec === "string"); + if (disallowTrailingRecursion && invalidTrailingRecursionPattern.test(spec)) { + return [Diagnostics.File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec]; + } else if (invalidDotDotAfterRecursiveWildcard(spec)) { + return [Diagnostics.File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0, spec]; + } +} +function getWildcardDirectories({ validatedIncludeSpecs: include, validatedExcludeSpecs: exclude }, basePath, useCaseSensitiveFileNames2) { + const rawExcludeRegex = getRegularExpressionForWildcard(exclude, basePath, "exclude"); + const excludeRegex = rawExcludeRegex && new RegExp(rawExcludeRegex, useCaseSensitiveFileNames2 ? "" : "i"); + const wildcardDirectories = {}; + const wildCardKeyToPath = /* @__PURE__ */ new Map(); + if (include !== void 0) { + const recursiveKeys = []; + for (const file of include) { + const spec = normalizePath(combinePaths(basePath, file)); + if (excludeRegex && excludeRegex.test(spec)) { + continue; + } + const match = getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames2); + if (match) { + const { key, path, flags } = match; + const existingPath = wildCardKeyToPath.get(key); + const existingFlags = existingPath !== void 0 ? wildcardDirectories[existingPath] : void 0; + if (existingFlags === void 0 || existingFlags < flags) { + wildcardDirectories[existingPath !== void 0 ? existingPath : path] = flags; + if (existingPath === void 0) wildCardKeyToPath.set(key, path); + if (flags === 1 /* Recursive */) { + recursiveKeys.push(key); + } + } + } + } + for (const path in wildcardDirectories) { + if (hasProperty(wildcardDirectories, path)) { + for (const recursiveKey of recursiveKeys) { + const key = toCanonicalKey(path, useCaseSensitiveFileNames2); + if (key !== recursiveKey && containsPath(recursiveKey, key, basePath, !useCaseSensitiveFileNames2)) { + delete wildcardDirectories[path]; + } + } + } + } + } + return wildcardDirectories; +} +function toCanonicalKey(path, useCaseSensitiveFileNames2) { + return useCaseSensitiveFileNames2 ? path : toFileNameLowerCase(path); +} +function getWildcardDirectoryFromSpec(spec, useCaseSensitiveFileNames2) { + const match = wildcardDirectoryPattern.exec(spec); + if (match) { + const questionWildcardIndex = spec.indexOf("?"); + const starWildcardIndex = spec.indexOf("*"); + const lastDirectorySeperatorIndex = spec.lastIndexOf(directorySeparator); + return { + key: toCanonicalKey(match[0], useCaseSensitiveFileNames2), + path: match[0], + flags: questionWildcardIndex !== -1 && questionWildcardIndex < lastDirectorySeperatorIndex || starWildcardIndex !== -1 && starWildcardIndex < lastDirectorySeperatorIndex ? 1 /* Recursive */ : 0 /* None */ + }; + } + if (isImplicitGlob(spec.substring(spec.lastIndexOf(directorySeparator) + 1))) { + const path = removeTrailingDirectorySeparator(spec); + return { + key: toCanonicalKey(path, useCaseSensitiveFileNames2), + path, + flags: 1 /* Recursive */ + }; + } + return void 0; +} +function hasFileWithHigherPriorityExtension(file, literalFiles, wildcardFiles, extensions, keyMapper) { + const extensionGroup = forEach(extensions, (group2) => fileExtensionIsOneOf(file, group2) ? group2 : void 0); + if (!extensionGroup) { + return false; + } + for (const ext of extensionGroup) { + if (fileExtensionIs(file, ext) && (ext !== ".ts" /* Ts */ || !fileExtensionIs(file, ".d.ts" /* Dts */))) { + return false; + } + const higherPriorityPath = keyMapper(changeExtension(file, ext)); + if (literalFiles.has(higherPriorityPath) || wildcardFiles.has(higherPriorityPath)) { + if (ext === ".d.ts" /* Dts */ && (fileExtensionIs(file, ".js" /* Js */) || fileExtensionIs(file, ".jsx" /* Jsx */))) { + continue; + } + return true; + } + } + return false; +} +function removeWildcardFilesWithLowerPriorityExtension(file, wildcardFiles, extensions, keyMapper) { + const extensionGroup = forEach(extensions, (group2) => fileExtensionIsOneOf(file, group2) ? group2 : void 0); + if (!extensionGroup) { + return; + } + for (let i = extensionGroup.length - 1; i >= 0; i--) { + const ext = extensionGroup[i]; + if (fileExtensionIs(file, ext)) { + return; + } + const lowerPriorityPath = keyMapper(changeExtension(file, ext)); + wildcardFiles.delete(lowerPriorityPath); + } +} +function convertCompilerOptionsForTelemetry(opts) { + const out = {}; + for (const key in opts) { + if (hasProperty(opts, key)) { + const type = getOptionFromName(key); + if (type !== void 0) { + out[key] = getOptionValueWithEmptyStrings(opts[key], type); + } + } + } + return out; +} +function getOptionValueWithEmptyStrings(value, option) { + if (value === void 0) return value; + switch (option.type) { + case "object": + return ""; + case "string": + return ""; + case "number": + return typeof value === "number" ? value : ""; + case "boolean": + return typeof value === "boolean" ? value : ""; + case "listOrElement": + if (!isArray(value)) return getOptionValueWithEmptyStrings(value, option.element); + // fall through to list + case "list": + const elementType = option.element; + return isArray(value) ? mapDefined(value, (v) => getOptionValueWithEmptyStrings(v, elementType)) : ""; + default: + return forEachEntry(option.type, (optionEnumValue, optionStringValue) => { + if (optionEnumValue === value) { + return optionStringValue; + } + }); + } +} + +// src/compiler/moduleNameResolver.ts +function trace(host, message, ...args) { + host.trace(formatMessage(message, ...args)); +} +function isTraceEnabled(compilerOptions, host) { + return !!compilerOptions.traceResolution && host.trace !== void 0; +} +function withPackageId(packageInfo, r, state) { + let packageId; + if (r && packageInfo) { + const packageJsonContent = packageInfo.contents.packageJsonContent; + if (typeof packageJsonContent.name === "string" && typeof packageJsonContent.version === "string") { + packageId = { + name: packageJsonContent.name, + subModuleName: r.path.slice(packageInfo.packageDirectory.length + directorySeparator.length), + version: packageJsonContent.version, + peerDependencies: getPeerDependenciesOfPackageJsonInfo(packageInfo, state) + }; + } + } + return r && { path: r.path, extension: r.ext, packageId, resolvedUsingTsExtension: r.resolvedUsingTsExtension }; +} +function noPackageId(r) { + return withPackageId( + /*packageInfo*/ + void 0, + r, + /*state*/ + void 0 + ); +} +function removeIgnoredPackageId(r) { + if (r) { + Debug.assert(r.packageId === void 0); + return { path: r.path, ext: r.extension, resolvedUsingTsExtension: r.resolvedUsingTsExtension }; + } +} +function formatExtensions(extensions) { + const result = []; + if (extensions & 1 /* TypeScript */) result.push("TypeScript"); + if (extensions & 2 /* JavaScript */) result.push("JavaScript"); + if (extensions & 4 /* Declaration */) result.push("Declaration"); + if (extensions & 8 /* Json */) result.push("JSON"); + return result.join(", "); +} +function extensionsToExtensionsArray(extensions) { + const result = []; + if (extensions & 1 /* TypeScript */) result.push(...supportedTSImplementationExtensions); + if (extensions & 2 /* JavaScript */) result.push(...supportedJSExtensionsFlat); + if (extensions & 4 /* Declaration */) result.push(...supportedDeclarationExtensions); + if (extensions & 8 /* Json */) result.push(".json" /* Json */); + return result; +} +function resolvedTypeScriptOnly(resolved) { + if (!resolved) { + return void 0; + } + Debug.assert(extensionIsTS(resolved.extension)); + return { fileName: resolved.path, packageId: resolved.packageId }; +} +function createResolvedModuleWithFailedLookupLocationsHandlingSymlink(moduleName, resolved, isExternalLibraryImport, failedLookupLocations, affectingLocations, diagnostics, state, cache, alternateResult) { + if (!state.resultFromCache && !state.compilerOptions.preserveSymlinks && resolved && isExternalLibraryImport && !resolved.originalPath && !isExternalModuleNameRelative(moduleName)) { + const { resolvedFileName, originalPath } = getOriginalAndResolvedFileName(resolved.path, state.host, state.traceEnabled); + if (originalPath) resolved = { ...resolved, path: resolvedFileName, originalPath }; + } + return createResolvedModuleWithFailedLookupLocations( + resolved, + isExternalLibraryImport, + failedLookupLocations, + affectingLocations, + diagnostics, + state.resultFromCache, + cache, + alternateResult + ); +} +function createResolvedModuleWithFailedLookupLocations(resolved, isExternalLibraryImport, failedLookupLocations, affectingLocations, diagnostics, resultFromCache, cache, alternateResult) { + if (resultFromCache) { + if (!(cache == null ? void 0 : cache.isReadonly)) { + resultFromCache.failedLookupLocations = updateResolutionField(resultFromCache.failedLookupLocations, failedLookupLocations); + resultFromCache.affectingLocations = updateResolutionField(resultFromCache.affectingLocations, affectingLocations); + resultFromCache.resolutionDiagnostics = updateResolutionField(resultFromCache.resolutionDiagnostics, diagnostics); + return resultFromCache; + } else { + return { + ...resultFromCache, + failedLookupLocations: initializeResolutionFieldForReadonlyCache(resultFromCache.failedLookupLocations, failedLookupLocations), + affectingLocations: initializeResolutionFieldForReadonlyCache(resultFromCache.affectingLocations, affectingLocations), + resolutionDiagnostics: initializeResolutionFieldForReadonlyCache(resultFromCache.resolutionDiagnostics, diagnostics) + }; + } + } + return { + resolvedModule: resolved && { + resolvedFileName: resolved.path, + originalPath: resolved.originalPath === true ? void 0 : resolved.originalPath, + extension: resolved.extension, + isExternalLibraryImport, + packageId: resolved.packageId, + resolvedUsingTsExtension: !!resolved.resolvedUsingTsExtension + }, + failedLookupLocations: initializeResolutionField(failedLookupLocations), + affectingLocations: initializeResolutionField(affectingLocations), + resolutionDiagnostics: initializeResolutionField(diagnostics), + alternateResult + }; +} +function initializeResolutionField(value) { + return value.length ? value : void 0; +} +function updateResolutionField(to, value) { + if (!(value == null ? void 0 : value.length)) return to; + if (!(to == null ? void 0 : to.length)) return value; + to.push(...value); + return to; +} +function initializeResolutionFieldForReadonlyCache(fromCache, value) { + if (!(fromCache == null ? void 0 : fromCache.length)) return initializeResolutionField(value); + if (!value.length) return fromCache.slice(); + return [...fromCache, ...value]; +} +function readPackageJsonField(jsonContent, fieldName, typeOfTag, state) { + if (!hasProperty(jsonContent, fieldName)) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_does_not_have_a_0_field, fieldName); + } + return; + } + const value = jsonContent[fieldName]; + if (typeof value !== typeOfTag || value === null) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, fieldName, typeOfTag, value === null ? "null" : typeof value); + } + return; + } + return value; +} +function readPackageJsonPathField(jsonContent, fieldName, baseDirectory, state) { + const fileName = readPackageJsonField(jsonContent, fieldName, "string", state); + if (fileName === void 0) { + return; + } + if (!fileName) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_had_a_falsy_0_field, fieldName); + } + return; + } + const path = normalizePath(combinePaths(baseDirectory, fileName)); + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_has_0_field_1_that_references_2, fieldName, fileName, path); + } + return path; +} +function readPackageJsonTypesFields(jsonContent, baseDirectory, state) { + return readPackageJsonPathField(jsonContent, "typings", baseDirectory, state) || readPackageJsonPathField(jsonContent, "types", baseDirectory, state); +} +function readPackageJsonTSConfigField(jsonContent, baseDirectory, state) { + return readPackageJsonPathField(jsonContent, "tsconfig", baseDirectory, state); +} +function readPackageJsonMainField(jsonContent, baseDirectory, state) { + return readPackageJsonPathField(jsonContent, "main", baseDirectory, state); +} +function readPackageJsonTypesVersionsField(jsonContent, state) { + const typesVersions = readPackageJsonField(jsonContent, "typesVersions", "object", state); + if (typesVersions === void 0) return; + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_has_a_typesVersions_field_with_version_specific_path_mappings); + } + return typesVersions; +} +function readPackageJsonTypesVersionPaths(jsonContent, state) { + const typesVersions = readPackageJsonTypesVersionsField(jsonContent, state); + if (typesVersions === void 0) return; + if (state.traceEnabled) { + for (const key in typesVersions) { + if (hasProperty(typesVersions, key) && !VersionRange.tryParse(key)) { + trace(state.host, Diagnostics.package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range, key); + } + } + } + const result = getPackageJsonTypesVersionsPaths(typesVersions); + if (!result) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_does_not_have_a_typesVersions_entry_that_matches_version_0, versionMajorMinor); + } + return; + } + const { version: bestVersionKey, paths: bestVersionPaths } = result; + if (typeof bestVersionPaths !== "object") { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Expected_type_of_0_field_in_package_json_to_be_1_got_2, `typesVersions['${bestVersionKey}']`, "object", typeof bestVersionPaths); + } + return; + } + return result; +} +var typeScriptVersion; +function getPackageJsonTypesVersionsPaths(typesVersions) { + if (!typeScriptVersion) typeScriptVersion = new Version(version); + for (const key in typesVersions) { + if (!hasProperty(typesVersions, key)) continue; + const keyRange = VersionRange.tryParse(key); + if (keyRange === void 0) { + continue; + } + if (keyRange.test(typeScriptVersion)) { + return { version: key, paths: typesVersions[key] }; + } + } +} +function getEffectiveTypeRoots(options, host) { + if (options.typeRoots) { + return options.typeRoots; + } + let currentDirectory; + if (options.configFilePath) { + currentDirectory = getDirectoryPath(options.configFilePath); + } else if (host.getCurrentDirectory) { + currentDirectory = host.getCurrentDirectory(); + } + if (currentDirectory !== void 0) { + return getDefaultTypeRoots(currentDirectory); + } +} +function getDefaultTypeRoots(currentDirectory) { + let typeRoots; + forEachAncestorDirectory(normalizePath(currentDirectory), (directory) => { + const atTypes = combinePaths(directory, nodeModulesAtTypes); + (typeRoots ?? (typeRoots = [])).push(atTypes); + }); + return typeRoots; +} +var nodeModulesAtTypes = combinePaths("node_modules", "@types"); +function arePathsEqual(path1, path2, host) { + const useCaseSensitiveFileNames2 = typeof host.useCaseSensitiveFileNames === "function" ? host.useCaseSensitiveFileNames() : host.useCaseSensitiveFileNames; + return comparePaths(path1, path2, !useCaseSensitiveFileNames2) === 0 /* EqualTo */; +} +function getOriginalAndResolvedFileName(fileName, host, traceEnabled) { + const resolvedFileName = realPath(fileName, host, traceEnabled); + const pathsAreEqual = arePathsEqual(fileName, resolvedFileName, host); + return { + // If the fileName and realpath are differing only in casing prefer fileName so that we can issue correct errors for casing under forceConsistentCasingInFileNames + resolvedFileName: pathsAreEqual ? fileName : resolvedFileName, + originalPath: pathsAreEqual ? void 0 : fileName + }; +} +function getCandidateFromTypeRoot(typeRoot, typeReferenceDirectiveName, moduleResolutionState) { + const nameForLookup = endsWith(typeRoot, "/node_modules/@types") || endsWith(typeRoot, "/node_modules/@types/") ? mangleScopedPackageNameWithTrace(typeReferenceDirectiveName, moduleResolutionState) : typeReferenceDirectiveName; + return combinePaths(typeRoot, nameForLookup); +} +function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFile, options, host, redirectedReference, cache, resolutionMode) { + Debug.assert(typeof typeReferenceDirectiveName === "string", "Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself."); + const traceEnabled = isTraceEnabled(options, host); + if (redirectedReference) { + options = redirectedReference.commandLine.options; + } + const containingDirectory = containingFile ? getDirectoryPath(containingFile) : void 0; + let result = containingDirectory ? cache == null ? void 0 : cache.getFromDirectoryCache(typeReferenceDirectiveName, resolutionMode, containingDirectory, redirectedReference) : void 0; + if (!result && containingDirectory && !isExternalModuleNameRelative(typeReferenceDirectiveName)) { + result = cache == null ? void 0 : cache.getFromNonRelativeNameCache(typeReferenceDirectiveName, resolutionMode, containingDirectory, redirectedReference); + } + if (result) { + if (traceEnabled) { + trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_1, typeReferenceDirectiveName, containingFile); + if (redirectedReference) trace(host, Diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.sourceFile.fileName); + trace(host, Diagnostics.Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1, typeReferenceDirectiveName, containingDirectory); + traceResult(result); + } + return result; + } + const typeRoots = getEffectiveTypeRoots(options, host); + if (traceEnabled) { + if (containingFile === void 0) { + if (typeRoots === void 0) { + trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set, typeReferenceDirectiveName); + } else { + trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1, typeReferenceDirectiveName, typeRoots); + } + } else { + if (typeRoots === void 0) { + trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set, typeReferenceDirectiveName, containingFile); + } else { + trace(host, Diagnostics.Resolving_type_reference_directive_0_containing_file_1_root_directory_2, typeReferenceDirectiveName, containingFile, typeRoots); + } + } + if (redirectedReference) { + trace(host, Diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.sourceFile.fileName); + } + } + const failedLookupLocations = []; + const affectingLocations = []; + let features = getNodeResolutionFeatures(options); + if (resolutionMode !== void 0) { + features |= 30 /* AllFeatures */; + } + const moduleResolution = getEmitModuleResolutionKind(options); + if (resolutionMode === 99 /* ESNext */ && (3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */)) { + features |= 32 /* EsmMode */; + } + const conditions = features & 8 /* Exports */ ? getConditions(options, resolutionMode) : []; + const diagnostics = []; + const moduleResolutionState = { + compilerOptions: options, + host, + traceEnabled, + failedLookupLocations, + affectingLocations, + packageJsonInfoCache: cache, + features, + conditions, + requestContainingDirectory: containingDirectory, + reportDiagnostic: (diag2) => void diagnostics.push(diag2), + isConfigLookup: false, + candidateIsFromPackageJsonField: false, + resolvedPackageDirectory: false + }; + let resolved = primaryLookup(); + let primary = true; + if (!resolved) { + resolved = secondaryLookup(); + primary = false; + } + let resolvedTypeReferenceDirective; + if (resolved) { + const { fileName, packageId } = resolved; + let resolvedFileName = fileName, originalPath; + if (!options.preserveSymlinks) ({ resolvedFileName, originalPath } = getOriginalAndResolvedFileName(fileName, host, traceEnabled)); + resolvedTypeReferenceDirective = { + primary, + resolvedFileName, + originalPath, + packageId, + isExternalLibraryImport: pathContainsNodeModules(fileName) + }; + } + result = { + resolvedTypeReferenceDirective, + failedLookupLocations: initializeResolutionField(failedLookupLocations), + affectingLocations: initializeResolutionField(affectingLocations), + resolutionDiagnostics: initializeResolutionField(diagnostics) + }; + if (containingDirectory && cache && !cache.isReadonly) { + cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference).set( + typeReferenceDirectiveName, + /*mode*/ + resolutionMode, + result + ); + if (!isExternalModuleNameRelative(typeReferenceDirectiveName)) { + cache.getOrCreateCacheForNonRelativeName(typeReferenceDirectiveName, resolutionMode, redirectedReference).set(containingDirectory, result); + } + } + if (traceEnabled) traceResult(result); + return result; + function traceResult(result2) { + var _a; + if (!((_a = result2.resolvedTypeReferenceDirective) == null ? void 0 : _a.resolvedFileName)) { + trace(host, Diagnostics.Type_reference_directive_0_was_not_resolved, typeReferenceDirectiveName); + } else if (result2.resolvedTypeReferenceDirective.packageId) { + trace(host, Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3, typeReferenceDirectiveName, result2.resolvedTypeReferenceDirective.resolvedFileName, packageIdToString(result2.resolvedTypeReferenceDirective.packageId), result2.resolvedTypeReferenceDirective.primary); + } else { + trace(host, Diagnostics.Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2, typeReferenceDirectiveName, result2.resolvedTypeReferenceDirective.resolvedFileName, result2.resolvedTypeReferenceDirective.primary); + } + } + function primaryLookup() { + if (typeRoots && typeRoots.length) { + if (traceEnabled) { + trace(host, Diagnostics.Resolving_with_primary_search_path_0, typeRoots.join(", ")); + } + return firstDefined(typeRoots, (typeRoot) => { + const candidate = getCandidateFromTypeRoot(typeRoot, typeReferenceDirectiveName, moduleResolutionState); + const directoryExists = directoryProbablyExists(typeRoot, host); + if (!directoryExists && traceEnabled) { + trace(host, Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, typeRoot); + } + if (options.typeRoots) { + const resolvedFromFile = loadModuleFromFile(4 /* Declaration */, candidate, !directoryExists, moduleResolutionState); + if (resolvedFromFile) { + const packageDirectory = parseNodeModuleFromPath(resolvedFromFile.path); + const packageInfo = packageDirectory ? getPackageJsonInfo( + packageDirectory, + /*onlyRecordFailures*/ + false, + moduleResolutionState + ) : void 0; + return resolvedTypeScriptOnly(withPackageId(packageInfo, resolvedFromFile, moduleResolutionState)); + } + } + return resolvedTypeScriptOnly( + loadNodeModuleFromDirectory(4 /* Declaration */, candidate, !directoryExists, moduleResolutionState) + ); + }); + } else { + if (traceEnabled) { + trace(host, Diagnostics.Root_directory_cannot_be_determined_skipping_primary_search_paths); + } + } + } + function secondaryLookup() { + const initialLocationForSecondaryLookup = containingFile && getDirectoryPath(containingFile); + if (initialLocationForSecondaryLookup !== void 0) { + let result2; + if (!options.typeRoots || !endsWith(containingFile, inferredTypesContainingFile)) { + if (traceEnabled) { + trace(host, Diagnostics.Looking_up_in_node_modules_folder_initial_location_0, initialLocationForSecondaryLookup); + } + if (!isExternalModuleNameRelative(typeReferenceDirectiveName)) { + const searchResult = loadModuleFromNearestNodeModulesDirectory( + 4 /* Declaration */, + typeReferenceDirectiveName, + initialLocationForSecondaryLookup, + moduleResolutionState, + /*cache*/ + void 0, + /*redirectedReference*/ + void 0 + ); + result2 = searchResult && searchResult.value; + } else { + const { path: candidate } = normalizePathForCJSResolution(initialLocationForSecondaryLookup, typeReferenceDirectiveName); + result2 = nodeLoadModuleByRelativeName( + 4 /* Declaration */, + candidate, + /*onlyRecordFailures*/ + false, + moduleResolutionState, + /*considerPackageJson*/ + true + ); + } + } else if (traceEnabled) { + trace(host, Diagnostics.Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_node_modules_folder); + } + return resolvedTypeScriptOnly(result2); + } else { + if (traceEnabled) { + trace(host, Diagnostics.Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_modules_folder); + } + } + } +} +function getNodeResolutionFeatures(options) { + let features = 0 /* None */; + switch (getEmitModuleResolutionKind(options)) { + case 3 /* Node16 */: + features = 30 /* Node16Default */; + break; + case 99 /* NodeNext */: + features = 30 /* NodeNextDefault */; + break; + case 100 /* Bundler */: + features = 30 /* BundlerDefault */; + break; + } + if (options.resolvePackageJsonExports) { + features |= 8 /* Exports */; + } else if (options.resolvePackageJsonExports === false) { + features &= ~8 /* Exports */; + } + if (options.resolvePackageJsonImports) { + features |= 2 /* Imports */; + } else if (options.resolvePackageJsonImports === false) { + features &= ~2 /* Imports */; + } + return features; +} +function getConditions(options, resolutionMode) { + const moduleResolution = getEmitModuleResolutionKind(options); + if (resolutionMode === void 0) { + if (moduleResolution === 100 /* Bundler */) { + resolutionMode = 99 /* ESNext */; + } else if (moduleResolution === 2 /* Node10 */) { + return []; + } + } + const conditions = resolutionMode === 99 /* ESNext */ ? ["import"] : ["require"]; + if (!options.noDtsResolution) { + conditions.push("types"); + } + if (moduleResolution !== 100 /* Bundler */) { + conditions.push("node"); + } + return concatenate(conditions, options.customConditions); +} +function resolvePackageNameToPackageJson(packageName, containingDirectory, options, host, cache) { + const moduleResolutionState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); + return forEachAncestorDirectoryStoppingAtGlobalCache(host, containingDirectory, (ancestorDirectory) => { + if (getBaseFileName(ancestorDirectory) !== "node_modules") { + const nodeModulesFolder = combinePaths(ancestorDirectory, "node_modules"); + const candidate = combinePaths(nodeModulesFolder, packageName); + return getPackageJsonInfo( + candidate, + /*onlyRecordFailures*/ + false, + moduleResolutionState + ); + } + }); +} +function getAutomaticTypeDirectiveNames(options, host) { + if (options.types) { + return options.types; + } + const result = []; + if (host.directoryExists && host.getDirectories) { + const typeRoots = getEffectiveTypeRoots(options, host); + if (typeRoots) { + for (const root of typeRoots) { + if (host.directoryExists(root)) { + for (const typeDirectivePath of host.getDirectories(root)) { + const normalized = normalizePath(typeDirectivePath); + const packageJsonPath = combinePaths(root, normalized, "package.json"); + const isNotNeededPackage = host.fileExists(packageJsonPath) && readJson(packageJsonPath, host).typings === null; + if (!isNotNeededPackage) { + const baseFileName = getBaseFileName(normalized); + if (baseFileName.charCodeAt(0) !== 46 /* dot */) { + result.push(baseFileName); + } + } + } + } + } + } + } + return result; +} +function isPackageJsonInfo(entry) { + return !!(entry == null ? void 0 : entry.contents); +} +function isMissingPackageJsonInfo(entry) { + return !!entry && !entry.contents; +} +function compilerOptionValueToString(value) { + var _a; + if (value === null || typeof value !== "object") { + return "" + value; + } + if (isArray(value)) { + return `[${(_a = value.map((e) => compilerOptionValueToString(e))) == null ? void 0 : _a.join(",")}]`; + } + let str = "{"; + for (const key in value) { + if (hasProperty(value, key)) { + str += `${key}: ${compilerOptionValueToString(value[key])}`; + } + } + return str + "}"; +} +function getKeyForCompilerOptions(options, affectingOptionDeclarations) { + return affectingOptionDeclarations.map((option) => compilerOptionValueToString(getCompilerOptionValue(options, option))).join("|") + `|${options.pathsBasePath}`; +} +function createCacheWithRedirects(ownOptions, optionsToRedirectsKey) { + const redirectsMap = /* @__PURE__ */ new Map(); + const redirectsKeyToMap = /* @__PURE__ */ new Map(); + let ownMap = /* @__PURE__ */ new Map(); + if (ownOptions) redirectsMap.set(ownOptions, ownMap); + return { + getMapOfCacheRedirects, + getOrCreateMapOfCacheRedirects, + update, + clear: clear2, + getOwnMap: () => ownMap + }; + function getMapOfCacheRedirects(redirectedReference) { + return redirectedReference ? getOrCreateMap( + redirectedReference.commandLine.options, + /*create*/ + false + ) : ownMap; + } + function getOrCreateMapOfCacheRedirects(redirectedReference) { + return redirectedReference ? getOrCreateMap( + redirectedReference.commandLine.options, + /*create*/ + true + ) : ownMap; + } + function update(newOptions) { + if (ownOptions !== newOptions) { + if (ownOptions) ownMap = getOrCreateMap( + newOptions, + /*create*/ + true + ); + else redirectsMap.set(newOptions, ownMap); + ownOptions = newOptions; + } + } + function getOrCreateMap(redirectOptions, create) { + let result = redirectsMap.get(redirectOptions); + if (result) return result; + const key = getRedirectsCacheKey(redirectOptions); + result = redirectsKeyToMap.get(key); + if (!result) { + if (ownOptions) { + const ownKey = getRedirectsCacheKey(ownOptions); + if (ownKey === key) result = ownMap; + else if (!redirectsKeyToMap.has(ownKey)) redirectsKeyToMap.set(ownKey, ownMap); + } + if (create) result ?? (result = /* @__PURE__ */ new Map()); + if (result) redirectsKeyToMap.set(key, result); + } + if (result) redirectsMap.set(redirectOptions, result); + return result; + } + function clear2() { + const ownKey = ownOptions && optionsToRedirectsKey.get(ownOptions); + ownMap.clear(); + redirectsMap.clear(); + optionsToRedirectsKey.clear(); + redirectsKeyToMap.clear(); + if (ownOptions) { + if (ownKey) optionsToRedirectsKey.set(ownOptions, ownKey); + redirectsMap.set(ownOptions, ownMap); + } + } + function getRedirectsCacheKey(options) { + let result = optionsToRedirectsKey.get(options); + if (!result) { + optionsToRedirectsKey.set(options, result = getKeyForCompilerOptions(options, moduleResolutionOptionDeclarations)); + } + return result; + } +} +function createPackageJsonInfoCache(currentDirectory, getCanonicalFileName) { + let cache; + return { getPackageJsonInfo: getPackageJsonInfo2, setPackageJsonInfo, clear: clear2, getInternalMap }; + function getPackageJsonInfo2(packageJsonPath) { + return cache == null ? void 0 : cache.get(toPath(packageJsonPath, currentDirectory, getCanonicalFileName)); + } + function setPackageJsonInfo(packageJsonPath, info) { + (cache || (cache = /* @__PURE__ */ new Map())).set(toPath(packageJsonPath, currentDirectory, getCanonicalFileName), info); + } + function clear2() { + cache = void 0; + } + function getInternalMap() { + return cache; + } +} +function getOrCreateCache(cacheWithRedirects, redirectedReference, key, create) { + const cache = cacheWithRedirects.getOrCreateMapOfCacheRedirects(redirectedReference); + let result = cache.get(key); + if (!result) { + result = create(); + cache.set(key, result); + } + return result; +} +function createPerDirectoryResolutionCache(currentDirectory, getCanonicalFileName, options, optionsToRedirectsKey) { + const directoryToModuleNameMap = createCacheWithRedirects(options, optionsToRedirectsKey); + return { + getFromDirectoryCache, + getOrCreateCacheForDirectory, + clear: clear2, + update, + directoryToModuleNameMap + }; + function clear2() { + directoryToModuleNameMap.clear(); + } + function update(options2) { + directoryToModuleNameMap.update(options2); + } + function getOrCreateCacheForDirectory(directoryName, redirectedReference) { + const path = toPath(directoryName, currentDirectory, getCanonicalFileName); + return getOrCreateCache(directoryToModuleNameMap, redirectedReference, path, () => createModeAwareCache()); + } + function getFromDirectoryCache(name, mode, directoryName, redirectedReference) { + var _a, _b; + const path = toPath(directoryName, currentDirectory, getCanonicalFileName); + return (_b = (_a = directoryToModuleNameMap.getMapOfCacheRedirects(redirectedReference)) == null ? void 0 : _a.get(path)) == null ? void 0 : _b.get(name, mode); + } +} +function createModeAwareCacheKey(specifier, mode) { + return mode === void 0 ? specifier : `${mode}|${specifier}`; +} +function createModeAwareCache() { + const underlying = /* @__PURE__ */ new Map(); + const memoizedReverseKeys = /* @__PURE__ */ new Map(); + const cache = { + get(specifier, mode) { + return underlying.get(getUnderlyingCacheKey(specifier, mode)); + }, + set(specifier, mode, value) { + underlying.set(getUnderlyingCacheKey(specifier, mode), value); + return cache; + }, + delete(specifier, mode) { + underlying.delete(getUnderlyingCacheKey(specifier, mode)); + return cache; + }, + has(specifier, mode) { + return underlying.has(getUnderlyingCacheKey(specifier, mode)); + }, + forEach(cb) { + return underlying.forEach((elem, key) => { + const [specifier, mode] = memoizedReverseKeys.get(key); + return cb(elem, specifier, mode); + }); + }, + size() { + return underlying.size; + } + }; + return cache; + function getUnderlyingCacheKey(specifier, mode) { + const result = createModeAwareCacheKey(specifier, mode); + memoizedReverseKeys.set(result, [specifier, mode]); + return result; + } +} +function getOriginalOrResolvedModuleFileName(result) { + return result.resolvedModule && (result.resolvedModule.originalPath || result.resolvedModule.resolvedFileName); +} +function getOriginalOrResolvedTypeReferenceFileName(result) { + return result.resolvedTypeReferenceDirective && (result.resolvedTypeReferenceDirective.originalPath || result.resolvedTypeReferenceDirective.resolvedFileName); +} +function createNonRelativeNameResolutionCache(currentDirectory, getCanonicalFileName, options, getResolvedFileName, optionsToRedirectsKey) { + const moduleNameToDirectoryMap = createCacheWithRedirects(options, optionsToRedirectsKey); + return { + getFromNonRelativeNameCache, + getOrCreateCacheForNonRelativeName, + clear: clear2, + update + }; + function clear2() { + moduleNameToDirectoryMap.clear(); + } + function update(options2) { + moduleNameToDirectoryMap.update(options2); + } + function getFromNonRelativeNameCache(nonRelativeModuleName, mode, directoryName, redirectedReference) { + var _a, _b; + Debug.assert(!isExternalModuleNameRelative(nonRelativeModuleName)); + return (_b = (_a = moduleNameToDirectoryMap.getMapOfCacheRedirects(redirectedReference)) == null ? void 0 : _a.get(createModeAwareCacheKey(nonRelativeModuleName, mode))) == null ? void 0 : _b.get(directoryName); + } + function getOrCreateCacheForNonRelativeName(nonRelativeModuleName, mode, redirectedReference) { + Debug.assert(!isExternalModuleNameRelative(nonRelativeModuleName)); + return getOrCreateCache(moduleNameToDirectoryMap, redirectedReference, createModeAwareCacheKey(nonRelativeModuleName, mode), createPerModuleNameCache); + } + function createPerModuleNameCache() { + const directoryPathMap = /* @__PURE__ */ new Map(); + return { get, set }; + function get(directory) { + return directoryPathMap.get(toPath(directory, currentDirectory, getCanonicalFileName)); + } + function set(directory, result) { + const path = toPath(directory, currentDirectory, getCanonicalFileName); + if (directoryPathMap.has(path)) { + return; + } + directoryPathMap.set(path, result); + const resolvedFileName = getResolvedFileName(result); + const commonPrefix = resolvedFileName && getCommonPrefix(path, resolvedFileName); + let current = path; + while (current !== commonPrefix) { + const parent2 = getDirectoryPath(current); + if (parent2 === current || directoryPathMap.has(parent2)) { + break; + } + directoryPathMap.set(parent2, result); + current = parent2; + } + } + function getCommonPrefix(directory, resolution) { + const resolutionDirectory = toPath(getDirectoryPath(resolution), currentDirectory, getCanonicalFileName); + let i = 0; + const limit = Math.min(directory.length, resolutionDirectory.length); + while (i < limit && directory.charCodeAt(i) === resolutionDirectory.charCodeAt(i)) { + i++; + } + if (i === directory.length && (resolutionDirectory.length === i || resolutionDirectory[i] === directorySeparator)) { + return directory; + } + const rootLength = getRootLength(directory); + if (i < rootLength) { + return void 0; + } + const sep = directory.lastIndexOf(directorySeparator, i - 1); + if (sep === -1) { + return void 0; + } + return directory.substr(0, Math.max(sep, rootLength)); + } + } +} +function createModuleOrTypeReferenceResolutionCache(currentDirectory, getCanonicalFileName, options, packageJsonInfoCache, getResolvedFileName, optionsToRedirectsKey) { + optionsToRedirectsKey ?? (optionsToRedirectsKey = /* @__PURE__ */ new Map()); + const perDirectoryResolutionCache = createPerDirectoryResolutionCache( + currentDirectory, + getCanonicalFileName, + options, + optionsToRedirectsKey + ); + const nonRelativeNameResolutionCache = createNonRelativeNameResolutionCache( + currentDirectory, + getCanonicalFileName, + options, + getResolvedFileName, + optionsToRedirectsKey + ); + packageJsonInfoCache ?? (packageJsonInfoCache = createPackageJsonInfoCache(currentDirectory, getCanonicalFileName)); + return { + ...packageJsonInfoCache, + ...perDirectoryResolutionCache, + ...nonRelativeNameResolutionCache, + clear: clear2, + update, + getPackageJsonInfoCache: () => packageJsonInfoCache, + clearAllExceptPackageJsonInfoCache, + optionsToRedirectsKey + }; + function clear2() { + clearAllExceptPackageJsonInfoCache(); + packageJsonInfoCache.clear(); + } + function clearAllExceptPackageJsonInfoCache() { + perDirectoryResolutionCache.clear(); + nonRelativeNameResolutionCache.clear(); + } + function update(options2) { + perDirectoryResolutionCache.update(options2); + nonRelativeNameResolutionCache.update(options2); + } +} +function createModuleResolutionCache(currentDirectory, getCanonicalFileName, options, packageJsonInfoCache, optionsToRedirectsKey) { + const result = createModuleOrTypeReferenceResolutionCache( + currentDirectory, + getCanonicalFileName, + options, + packageJsonInfoCache, + getOriginalOrResolvedModuleFileName, + optionsToRedirectsKey + ); + result.getOrCreateCacheForModuleName = (nonRelativeName, mode, redirectedReference) => result.getOrCreateCacheForNonRelativeName(nonRelativeName, mode, redirectedReference); + return result; +} +function createTypeReferenceDirectiveResolutionCache(currentDirectory, getCanonicalFileName, options, packageJsonInfoCache, optionsToRedirectsKey) { + return createModuleOrTypeReferenceResolutionCache( + currentDirectory, + getCanonicalFileName, + options, + packageJsonInfoCache, + getOriginalOrResolvedTypeReferenceFileName, + optionsToRedirectsKey + ); +} +function getOptionsForLibraryResolution(options) { + return { moduleResolution: 2 /* Node10 */, traceResolution: options.traceResolution }; +} +function resolveLibrary(libraryName, resolveFrom, compilerOptions, host, cache) { + return resolveModuleName(libraryName, resolveFrom, getOptionsForLibraryResolution(compilerOptions), host, cache); +} +function resolveModuleNameFromCache(moduleName, containingFile, cache, mode) { + const containingDirectory = getDirectoryPath(containingFile); + return cache.getFromDirectoryCache( + moduleName, + mode, + containingDirectory, + /*redirectedReference*/ + void 0 + ); +} +function resolveModuleName(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) { + const traceEnabled = isTraceEnabled(compilerOptions, host); + if (redirectedReference) { + compilerOptions = redirectedReference.commandLine.options; + } + if (traceEnabled) { + trace(host, Diagnostics.Resolving_module_0_from_1, moduleName, containingFile); + if (redirectedReference) { + trace(host, Diagnostics.Using_compiler_options_of_project_reference_redirect_0, redirectedReference.sourceFile.fileName); + } + } + const containingDirectory = getDirectoryPath(containingFile); + let result = cache == null ? void 0 : cache.getFromDirectoryCache(moduleName, resolutionMode, containingDirectory, redirectedReference); + if (result) { + if (traceEnabled) { + trace(host, Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1, moduleName, containingDirectory); + } + } else { + let moduleResolution = compilerOptions.moduleResolution; + if (moduleResolution === void 0) { + moduleResolution = getEmitModuleResolutionKind(compilerOptions); + if (traceEnabled) { + trace(host, Diagnostics.Module_resolution_kind_is_not_specified_using_0, ModuleResolutionKind[moduleResolution]); + } + } else { + if (traceEnabled) { + trace(host, Diagnostics.Explicitly_specified_module_resolution_kind_Colon_0, ModuleResolutionKind[moduleResolution]); + } + } + switch (moduleResolution) { + case 3 /* Node16 */: + result = node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode); + break; + case 99 /* NodeNext */: + result = nodeNextModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode); + break; + case 2 /* Node10 */: + result = nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode ? getConditions(compilerOptions, resolutionMode) : void 0); + break; + case 1 /* Classic */: + result = classicNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference); + break; + case 100 /* Bundler */: + result = bundlerModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode ? getConditions(compilerOptions, resolutionMode) : void 0); + break; + default: + return Debug.fail(`Unexpected moduleResolution: ${moduleResolution}`); + } + if (cache && !cache.isReadonly) { + cache.getOrCreateCacheForDirectory(containingDirectory, redirectedReference).set(moduleName, resolutionMode, result); + if (!isExternalModuleNameRelative(moduleName)) { + cache.getOrCreateCacheForNonRelativeName(moduleName, resolutionMode, redirectedReference).set(containingDirectory, result); + } + } + } + if (traceEnabled) { + if (result.resolvedModule) { + if (result.resolvedModule.packageId) { + trace(host, Diagnostics.Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2, moduleName, result.resolvedModule.resolvedFileName, packageIdToString(result.resolvedModule.packageId)); + } else { + trace(host, Diagnostics.Module_name_0_was_successfully_resolved_to_1, moduleName, result.resolvedModule.resolvedFileName); + } + } else { + trace(host, Diagnostics.Module_name_0_was_not_resolved, moduleName); + } + } + return result; +} +function tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loader, state) { + const resolved = tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state); + if (resolved) return resolved.value; + if (!isExternalModuleNameRelative(moduleName)) { + return tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, state); + } else { + return tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state); + } +} +function tryLoadModuleUsingPathsIfEligible(extensions, moduleName, loader, state) { + const { baseUrl, paths } = state.compilerOptions; + if (paths && !pathIsRelative(moduleName)) { + if (state.traceEnabled) { + if (baseUrl) { + trace(state.host, Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1, baseUrl, moduleName); + } + trace(state.host, Diagnostics.paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0, moduleName); + } + const baseDirectory = getPathsBasePath(state.compilerOptions, state.host); + const pathPatterns = tryParsePatterns(paths); + return tryLoadModuleUsingPaths( + extensions, + moduleName, + baseDirectory, + paths, + pathPatterns, + loader, + /*onlyRecordFailures*/ + false, + state + ); + } +} +function tryLoadModuleUsingRootDirs(extensions, moduleName, containingDirectory, loader, state) { + if (!state.compilerOptions.rootDirs) { + return void 0; + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0, moduleName); + } + const candidate = normalizePath(combinePaths(containingDirectory, moduleName)); + let matchedRootDir; + let matchedNormalizedPrefix; + for (const rootDir of state.compilerOptions.rootDirs) { + let normalizedRoot = normalizePath(rootDir); + if (!endsWith(normalizedRoot, directorySeparator)) { + normalizedRoot += directorySeparator; + } + const isLongestMatchingPrefix = startsWith(candidate, normalizedRoot) && (matchedNormalizedPrefix === void 0 || matchedNormalizedPrefix.length < normalizedRoot.length); + if (state.traceEnabled) { + trace(state.host, Diagnostics.Checking_if_0_is_the_longest_matching_prefix_for_1_2, normalizedRoot, candidate, isLongestMatchingPrefix); + } + if (isLongestMatchingPrefix) { + matchedNormalizedPrefix = normalizedRoot; + matchedRootDir = rootDir; + } + } + if (matchedNormalizedPrefix) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Longest_matching_prefix_for_0_is_1, candidate, matchedNormalizedPrefix); + } + const suffix = candidate.substr(matchedNormalizedPrefix.length); + if (state.traceEnabled) { + trace(state.host, Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, matchedNormalizedPrefix, candidate); + } + const resolvedFileName = loader(extensions, candidate, !directoryProbablyExists(containingDirectory, state.host), state); + if (resolvedFileName) { + return resolvedFileName; + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.Trying_other_entries_in_rootDirs); + } + for (const rootDir of state.compilerOptions.rootDirs) { + if (rootDir === matchedRootDir) { + continue; + } + const candidate2 = combinePaths(normalizePath(rootDir), suffix); + if (state.traceEnabled) { + trace(state.host, Diagnostics.Loading_0_from_the_root_dir_1_candidate_location_2, suffix, rootDir, candidate2); + } + const baseDirectory = getDirectoryPath(candidate2); + const resolvedFileName2 = loader(extensions, candidate2, !directoryProbablyExists(baseDirectory, state.host), state); + if (resolvedFileName2) { + return resolvedFileName2; + } + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.Module_resolution_using_rootDirs_has_failed); + } + } + return void 0; +} +function tryLoadModuleUsingBaseUrl(extensions, moduleName, loader, state) { + const { baseUrl } = state.compilerOptions; + if (!baseUrl) { + return void 0; + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1, baseUrl, moduleName); + } + const candidate = normalizePath(combinePaths(baseUrl, moduleName)); + if (state.traceEnabled) { + trace(state.host, Diagnostics.Resolving_module_name_0_relative_to_base_url_1_2, moduleName, baseUrl, candidate); + } + return loader(extensions, candidate, !directoryProbablyExists(getDirectoryPath(candidate), state.host), state); +} +function resolveJSModule(moduleName, initialDir, host) { + const { resolvedModule, failedLookupLocations } = tryResolveJSModuleWorker(moduleName, initialDir, host); + if (!resolvedModule) { + throw new Error(`Could not resolve JS module '${moduleName}' starting at '${initialDir}'. Looked in: ${failedLookupLocations == null ? void 0 : failedLookupLocations.join(", ")}`); + } + return resolvedModule.resolvedFileName; +} +var NodeResolutionFeatures = /* @__PURE__ */ ((NodeResolutionFeatures2) => { + NodeResolutionFeatures2[NodeResolutionFeatures2["None"] = 0] = "None"; + NodeResolutionFeatures2[NodeResolutionFeatures2["Imports"] = 2] = "Imports"; + NodeResolutionFeatures2[NodeResolutionFeatures2["SelfName"] = 4] = "SelfName"; + NodeResolutionFeatures2[NodeResolutionFeatures2["Exports"] = 8] = "Exports"; + NodeResolutionFeatures2[NodeResolutionFeatures2["ExportsPatternTrailers"] = 16] = "ExportsPatternTrailers"; + NodeResolutionFeatures2[NodeResolutionFeatures2["AllFeatures"] = 30] = "AllFeatures"; + NodeResolutionFeatures2[NodeResolutionFeatures2["Node16Default"] = 30] = "Node16Default"; + NodeResolutionFeatures2[NodeResolutionFeatures2["NodeNextDefault"] = 30 /* AllFeatures */] = "NodeNextDefault"; + NodeResolutionFeatures2[NodeResolutionFeatures2["BundlerDefault"] = 30] = "BundlerDefault"; + NodeResolutionFeatures2[NodeResolutionFeatures2["EsmMode"] = 32] = "EsmMode"; + return NodeResolutionFeatures2; +})(NodeResolutionFeatures || {}); +function node16ModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) { + return nodeNextModuleNameResolverWorker( + 30 /* Node16Default */, + moduleName, + containingFile, + compilerOptions, + host, + cache, + redirectedReference, + resolutionMode + ); +} +function nodeNextModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) { + return nodeNextModuleNameResolverWorker( + 30 /* NodeNextDefault */, + moduleName, + containingFile, + compilerOptions, + host, + cache, + redirectedReference, + resolutionMode + ); +} +function nodeNextModuleNameResolverWorker(features, moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode, conditions) { + const containingDirectory = getDirectoryPath(containingFile); + const esmMode = resolutionMode === 99 /* ESNext */ ? 32 /* EsmMode */ : 0; + let extensions = compilerOptions.noDtsResolution ? 3 /* ImplementationFiles */ : 1 /* TypeScript */ | 2 /* JavaScript */ | 4 /* Declaration */; + if (getResolveJsonModule(compilerOptions)) { + extensions |= 8 /* Json */; + } + return nodeModuleNameResolverWorker( + features | esmMode, + moduleName, + containingDirectory, + compilerOptions, + host, + cache, + extensions, + /*isConfigLookup*/ + false, + redirectedReference, + conditions + ); +} +function tryResolveJSModuleWorker(moduleName, initialDir, host) { + return nodeModuleNameResolverWorker( + 0 /* None */, + moduleName, + initialDir, + { moduleResolution: 2 /* Node10 */, allowJs: true }, + host, + /*cache*/ + void 0, + 2 /* JavaScript */, + /*isConfigLookup*/ + false, + /*redirectedReference*/ + void 0, + /*conditions*/ + void 0 + ); +} +function bundlerModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, conditions) { + const containingDirectory = getDirectoryPath(containingFile); + let extensions = compilerOptions.noDtsResolution ? 3 /* ImplementationFiles */ : 1 /* TypeScript */ | 2 /* JavaScript */ | 4 /* Declaration */; + if (getResolveJsonModule(compilerOptions)) { + extensions |= 8 /* Json */; + } + return nodeModuleNameResolverWorker( + getNodeResolutionFeatures(compilerOptions), + moduleName, + containingDirectory, + compilerOptions, + host, + cache, + extensions, + /*isConfigLookup*/ + false, + redirectedReference, + conditions + ); +} +function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, conditions, isConfigLookup) { + let extensions; + if (isConfigLookup) { + extensions = 8 /* Json */; + } else if (compilerOptions.noDtsResolution) { + extensions = 3 /* ImplementationFiles */; + if (getResolveJsonModule(compilerOptions)) extensions |= 8 /* Json */; + } else { + extensions = getResolveJsonModule(compilerOptions) ? 1 /* TypeScript */ | 2 /* JavaScript */ | 4 /* Declaration */ | 8 /* Json */ : 1 /* TypeScript */ | 2 /* JavaScript */ | 4 /* Declaration */; + } + return nodeModuleNameResolverWorker(conditions ? 30 /* AllFeatures */ : 0 /* None */, moduleName, getDirectoryPath(containingFile), compilerOptions, host, cache, extensions, !!isConfigLookup, redirectedReference, conditions); +} +function nodeNextJsonConfigResolver(moduleName, containingFile, host) { + return nodeModuleNameResolverWorker( + 30 /* NodeNextDefault */, + moduleName, + getDirectoryPath(containingFile), + { moduleResolution: 99 /* NodeNext */ }, + host, + /*cache*/ + void 0, + 8 /* Json */, + /*isConfigLookup*/ + true, + /*redirectedReference*/ + void 0, + /*conditions*/ + void 0 + ); +} +function nodeModuleNameResolverWorker(features, moduleName, containingDirectory, compilerOptions, host, cache, extensions, isConfigLookup, redirectedReference, conditions) { + var _a, _b, _c, _d, _e; + const traceEnabled = isTraceEnabled(compilerOptions, host); + const failedLookupLocations = []; + const affectingLocations = []; + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + conditions ?? (conditions = getConditions( + compilerOptions, + moduleResolution === 100 /* Bundler */ || moduleResolution === 2 /* Node10 */ ? void 0 : features & 32 /* EsmMode */ ? 99 /* ESNext */ : 1 /* CommonJS */ + )); + const diagnostics = []; + const state = { + compilerOptions, + host, + traceEnabled, + failedLookupLocations, + affectingLocations, + packageJsonInfoCache: cache, + features, + conditions: conditions ?? emptyArray, + requestContainingDirectory: containingDirectory, + reportDiagnostic: (diag2) => void diagnostics.push(diag2), + isConfigLookup, + candidateIsFromPackageJsonField: false, + resolvedPackageDirectory: false + }; + if (traceEnabled && moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { + trace(host, Diagnostics.Resolving_in_0_mode_with_conditions_1, features & 32 /* EsmMode */ ? "ESM" : "CJS", state.conditions.map((c) => `'${c}'`).join(", ")); + } + let result; + if (moduleResolution === 2 /* Node10 */) { + const priorityExtensions = extensions & (1 /* TypeScript */ | 4 /* Declaration */); + const secondaryExtensions = extensions & ~(1 /* TypeScript */ | 4 /* Declaration */); + result = priorityExtensions && tryResolve(priorityExtensions, state) || secondaryExtensions && tryResolve(secondaryExtensions, state) || void 0; + } else { + result = tryResolve(extensions, state); + } + let alternateResult; + if (state.resolvedPackageDirectory && !isConfigLookup && !isExternalModuleNameRelative(moduleName)) { + const wantedTypesButGotJs = (result == null ? void 0 : result.value) && extensions & (1 /* TypeScript */ | 4 /* Declaration */) && !extensionIsOk(1 /* TypeScript */ | 4 /* Declaration */, result.value.resolved.extension); + if (((_a = result == null ? void 0 : result.value) == null ? void 0 : _a.isExternalLibraryImport) && wantedTypesButGotJs && features & 8 /* Exports */ && (conditions == null ? void 0 : conditions.includes("import"))) { + traceIfEnabled(state, Diagnostics.Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_if_npm_library_needs_configuration_update); + const diagnosticState = { + ...state, + features: state.features & ~8 /* Exports */, + reportDiagnostic: noop + }; + const diagnosticResult = tryResolve(extensions & (1 /* TypeScript */ | 4 /* Declaration */), diagnosticState); + if ((_b = diagnosticResult == null ? void 0 : diagnosticResult.value) == null ? void 0 : _b.isExternalLibraryImport) { + alternateResult = diagnosticResult.value.resolved.path; + } + } else if ((!(result == null ? void 0 : result.value) || wantedTypesButGotJs) && moduleResolution === 2 /* Node10 */) { + traceIfEnabled(state, Diagnostics.Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_need_configuration_update); + const diagnosticsCompilerOptions = { ...state.compilerOptions, moduleResolution: 100 /* Bundler */ }; + const diagnosticState = { + ...state, + compilerOptions: diagnosticsCompilerOptions, + features: 30 /* BundlerDefault */, + conditions: getConditions(diagnosticsCompilerOptions), + reportDiagnostic: noop + }; + const diagnosticResult = tryResolve(extensions & (1 /* TypeScript */ | 4 /* Declaration */), diagnosticState); + if ((_c = diagnosticResult == null ? void 0 : diagnosticResult.value) == null ? void 0 : _c.isExternalLibraryImport) { + alternateResult = diagnosticResult.value.resolved.path; + } + } + } + return createResolvedModuleWithFailedLookupLocationsHandlingSymlink( + moduleName, + (_d = result == null ? void 0 : result.value) == null ? void 0 : _d.resolved, + (_e = result == null ? void 0 : result.value) == null ? void 0 : _e.isExternalLibraryImport, + failedLookupLocations, + affectingLocations, + diagnostics, + state, + cache, + alternateResult + ); + function tryResolve(extensions2, state2) { + const loader = (extensions3, candidate, onlyRecordFailures, state3) => nodeLoadModuleByRelativeName( + extensions3, + candidate, + onlyRecordFailures, + state3, + /*considerPackageJson*/ + true + ); + const resolved = tryLoadModuleUsingOptionalResolutionSettings(extensions2, moduleName, containingDirectory, loader, state2); + if (resolved) { + return toSearchResult({ resolved, isExternalLibraryImport: pathContainsNodeModules(resolved.path) }); + } + if (!isExternalModuleNameRelative(moduleName)) { + if (features & 2 /* Imports */ && startsWith(moduleName, "#")) { + const resolved3 = loadModuleFromImports(extensions2, moduleName, containingDirectory, state2, cache, redirectedReference); + if (resolved3) { + return resolved3.value && { value: { resolved: resolved3.value, isExternalLibraryImport: false } }; + } + } + if (features & 4 /* SelfName */) { + const resolved3 = loadModuleFromSelfNameReference(extensions2, moduleName, containingDirectory, state2, cache, redirectedReference); + if (resolved3) { + return resolved3.value && { value: { resolved: resolved3.value, isExternalLibraryImport: false } }; + } + } + if (moduleName.includes(":")) { + if (traceEnabled) { + trace(host, Diagnostics.Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1, moduleName, formatExtensions(extensions2)); + } + return void 0; + } + if (traceEnabled) { + trace(host, Diagnostics.Loading_module_0_from_node_modules_folder_target_file_types_Colon_1, moduleName, formatExtensions(extensions2)); + } + let resolved2 = loadModuleFromNearestNodeModulesDirectory(extensions2, moduleName, containingDirectory, state2, cache, redirectedReference); + if (extensions2 & 4 /* Declaration */) { + resolved2 ?? (resolved2 = resolveFromTypeRoot(moduleName, state2)); + } + return resolved2 && { value: resolved2.value && { resolved: resolved2.value, isExternalLibraryImport: true } }; + } else { + const { path: candidate, parts } = normalizePathForCJSResolution(containingDirectory, moduleName); + const resolved2 = nodeLoadModuleByRelativeName( + extensions2, + candidate, + /*onlyRecordFailures*/ + false, + state2, + /*considerPackageJson*/ + true + ); + return resolved2 && toSearchResult({ resolved: resolved2, isExternalLibraryImport: contains(parts, "node_modules") }); + } + } +} +function normalizePathForCJSResolution(containingDirectory, moduleName) { + const combined = combinePaths(containingDirectory, moduleName); + const parts = getPathComponents(combined); + const lastPart = lastOrUndefined(parts); + const path = lastPart === "." || lastPart === ".." ? ensureTrailingDirectorySeparator(normalizePath(combined)) : normalizePath(combined); + return { path, parts }; +} +function realPath(path, host, traceEnabled) { + if (!host.realpath) { + return path; + } + const real = normalizePath(host.realpath(path)); + if (traceEnabled) { + trace(host, Diagnostics.Resolving_real_path_for_0_result_1, path, real); + } + return real; +} +function nodeLoadModuleByRelativeName(extensions, candidate, onlyRecordFailures, state, considerPackageJson) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1, candidate, formatExtensions(extensions)); + } + if (!hasTrailingDirectorySeparator(candidate)) { + if (!onlyRecordFailures) { + const parentOfCandidate = getDirectoryPath(candidate); + if (!directoryProbablyExists(parentOfCandidate, state.host)) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, parentOfCandidate); + } + onlyRecordFailures = true; + } + } + const resolvedFromFile = loadModuleFromFile(extensions, candidate, onlyRecordFailures, state); + if (resolvedFromFile) { + const packageDirectory = considerPackageJson ? parseNodeModuleFromPath(resolvedFromFile.path) : void 0; + const packageInfo = packageDirectory ? getPackageJsonInfo( + packageDirectory, + /*onlyRecordFailures*/ + false, + state + ) : void 0; + return withPackageId(packageInfo, resolvedFromFile, state); + } + } + if (!onlyRecordFailures) { + const candidateExists = directoryProbablyExists(candidate, state.host); + if (!candidateExists) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, candidate); + } + onlyRecordFailures = true; + } + } + if (!(state.features & 32 /* EsmMode */)) { + return loadNodeModuleFromDirectory(extensions, candidate, onlyRecordFailures, state, considerPackageJson); + } + return void 0; +} +var nodeModulesPathPart = "/node_modules/"; +function pathContainsNodeModules(path) { + return path.includes(nodeModulesPathPart); +} +function parseNodeModuleFromPath(resolved, isFolder) { + const path = normalizePath(resolved); + const idx = path.lastIndexOf(nodeModulesPathPart); + if (idx === -1) { + return void 0; + } + const indexAfterNodeModules = idx + nodeModulesPathPart.length; + let indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterNodeModules, isFolder); + if (path.charCodeAt(indexAfterNodeModules) === 64 /* at */) { + indexAfterPackageName = moveToNextDirectorySeparatorIfAvailable(path, indexAfterPackageName, isFolder); + } + return path.slice(0, indexAfterPackageName); +} +function moveToNextDirectorySeparatorIfAvailable(path, prevSeparatorIndex, isFolder) { + const nextSeparatorIndex = path.indexOf(directorySeparator, prevSeparatorIndex + 1); + return nextSeparatorIndex === -1 ? isFolder ? path.length : prevSeparatorIndex : nextSeparatorIndex; +} +function loadModuleFromFileNoPackageId(extensions, candidate, onlyRecordFailures, state) { + return noPackageId(loadModuleFromFile(extensions, candidate, onlyRecordFailures, state)); +} +function loadModuleFromFile(extensions, candidate, onlyRecordFailures, state) { + const resolvedByReplacingExtension = loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state); + if (resolvedByReplacingExtension) { + return resolvedByReplacingExtension; + } + if (!(state.features & 32 /* EsmMode */)) { + const resolvedByAddingExtension = tryAddingExtensions(candidate, extensions, "", onlyRecordFailures, state); + if (resolvedByAddingExtension) { + return resolvedByAddingExtension; + } + } +} +function loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state) { + const filename = getBaseFileName(candidate); + if (!filename.includes(".")) { + return void 0; + } + let extensionless = removeFileExtension(candidate); + if (extensionless === candidate) { + extensionless = candidate.substring(0, candidate.lastIndexOf(".")); + } + const extension = candidate.substring(extensionless.length); + if (state.traceEnabled) { + trace(state.host, Diagnostics.File_name_0_has_a_1_extension_stripping_it, candidate, extension); + } + return tryAddingExtensions(extensionless, extensions, extension, onlyRecordFailures, state); +} +function loadFileNameFromPackageJsonField(extensions, candidate, packageJsonValue, onlyRecordFailures, state) { + if (extensions & 1 /* TypeScript */ && fileExtensionIsOneOf(candidate, supportedTSImplementationExtensions) || extensions & 4 /* Declaration */ && fileExtensionIsOneOf(candidate, supportedDeclarationExtensions)) { + const result = tryFile(candidate, onlyRecordFailures, state); + const ext = tryExtractTSExtension(candidate); + return result !== void 0 ? { path: candidate, ext, resolvedUsingTsExtension: packageJsonValue ? !endsWith(packageJsonValue, ext) : void 0 } : void 0; + } + if (state.isConfigLookup && extensions === 8 /* Json */ && fileExtensionIs(candidate, ".json" /* Json */)) { + const result = tryFile(candidate, onlyRecordFailures, state); + return result !== void 0 ? { path: candidate, ext: ".json" /* Json */, resolvedUsingTsExtension: void 0 } : void 0; + } + return loadModuleFromFileNoImplicitExtensions(extensions, candidate, onlyRecordFailures, state); +} +function tryAddingExtensions(candidate, extensions, originalExtension, onlyRecordFailures, state) { + if (!onlyRecordFailures) { + const directory = getDirectoryPath(candidate); + if (directory) { + onlyRecordFailures = !directoryProbablyExists(directory, state.host); + } + } + switch (originalExtension) { + case ".mjs" /* Mjs */: + case ".mts" /* Mts */: + case ".d.mts" /* Dmts */: + return extensions & 1 /* TypeScript */ && tryExtension(".mts" /* Mts */, originalExtension === ".mts" /* Mts */ || originalExtension === ".d.mts" /* Dmts */) || extensions & 4 /* Declaration */ && tryExtension(".d.mts" /* Dmts */, originalExtension === ".mts" /* Mts */ || originalExtension === ".d.mts" /* Dmts */) || extensions & 2 /* JavaScript */ && tryExtension(".mjs" /* Mjs */) || void 0; + case ".cjs" /* Cjs */: + case ".cts" /* Cts */: + case ".d.cts" /* Dcts */: + return extensions & 1 /* TypeScript */ && tryExtension(".cts" /* Cts */, originalExtension === ".cts" /* Cts */ || originalExtension === ".d.cts" /* Dcts */) || extensions & 4 /* Declaration */ && tryExtension(".d.cts" /* Dcts */, originalExtension === ".cts" /* Cts */ || originalExtension === ".d.cts" /* Dcts */) || extensions & 2 /* JavaScript */ && tryExtension(".cjs" /* Cjs */) || void 0; + case ".json" /* Json */: + return extensions & 4 /* Declaration */ && tryExtension(".d.json.ts") || extensions & 8 /* Json */ && tryExtension(".json" /* Json */) || void 0; + case ".tsx" /* Tsx */: + case ".jsx" /* Jsx */: + return extensions & 1 /* TypeScript */ && (tryExtension(".tsx" /* Tsx */, originalExtension === ".tsx" /* Tsx */) || tryExtension(".ts" /* Ts */, originalExtension === ".tsx" /* Tsx */)) || extensions & 4 /* Declaration */ && tryExtension(".d.ts" /* Dts */, originalExtension === ".tsx" /* Tsx */) || extensions & 2 /* JavaScript */ && (tryExtension(".jsx" /* Jsx */) || tryExtension(".js" /* Js */)) || void 0; + case ".ts" /* Ts */: + case ".d.ts" /* Dts */: + case ".js" /* Js */: + case "": + return extensions & 1 /* TypeScript */ && (tryExtension(".ts" /* Ts */, originalExtension === ".ts" /* Ts */ || originalExtension === ".d.ts" /* Dts */) || tryExtension(".tsx" /* Tsx */, originalExtension === ".ts" /* Ts */ || originalExtension === ".d.ts" /* Dts */)) || extensions & 4 /* Declaration */ && tryExtension(".d.ts" /* Dts */, originalExtension === ".ts" /* Ts */ || originalExtension === ".d.ts" /* Dts */) || extensions & 2 /* JavaScript */ && (tryExtension(".js" /* Js */) || tryExtension(".jsx" /* Jsx */)) || state.isConfigLookup && tryExtension(".json" /* Json */) || void 0; + default: + return extensions & 4 /* Declaration */ && !isDeclarationFileName(candidate + originalExtension) && tryExtension(`.d${originalExtension}.ts`) || void 0; + } + function tryExtension(ext, resolvedUsingTsExtension) { + const path = tryFile(candidate + ext, onlyRecordFailures, state); + return path === void 0 ? void 0 : { path, ext, resolvedUsingTsExtension: !state.candidateIsFromPackageJsonField && resolvedUsingTsExtension }; + } +} +function tryFile(fileName, onlyRecordFailures, state) { + var _a; + if (!((_a = state.compilerOptions.moduleSuffixes) == null ? void 0 : _a.length)) { + return tryFileLookup(fileName, onlyRecordFailures, state); + } + const ext = tryGetExtensionFromPath2(fileName) ?? ""; + const fileNameNoExtension = ext ? removeExtension(fileName, ext) : fileName; + return forEach(state.compilerOptions.moduleSuffixes, (suffix) => tryFileLookup(fileNameNoExtension + suffix + ext, onlyRecordFailures, state)); +} +function tryFileLookup(fileName, onlyRecordFailures, state) { + var _a; + if (!onlyRecordFailures) { + if (state.host.fileExists(fileName)) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.File_0_exists_use_it_as_a_name_resolution_result, fileName); + } + return fileName; + } else { + if (state.traceEnabled) { + trace(state.host, Diagnostics.File_0_does_not_exist, fileName); + } + } + } + (_a = state.failedLookupLocations) == null ? void 0 : _a.push(fileName); + return void 0; +} +function loadNodeModuleFromDirectory(extensions, candidate, onlyRecordFailures, state, considerPackageJson = true) { + const packageInfo = considerPackageJson ? getPackageJsonInfo(candidate, onlyRecordFailures, state) : void 0; + return withPackageId(packageInfo, loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo), state); +} +function getEntrypointsFromPackageJsonInfo(packageJsonInfo, options, host, cache, resolveJs) { + if (!resolveJs && packageJsonInfo.contents.resolvedEntrypoints !== void 0) { + return packageJsonInfo.contents.resolvedEntrypoints; + } + let entrypoints; + const extensions = 1 /* TypeScript */ | 4 /* Declaration */ | (resolveJs ? 2 /* JavaScript */ : 0); + const features = getNodeResolutionFeatures(options); + const loadPackageJsonMainState = getTemporaryModuleResolutionState(cache == null ? void 0 : cache.getPackageJsonInfoCache(), host, options); + loadPackageJsonMainState.conditions = getConditions(options); + loadPackageJsonMainState.requestContainingDirectory = packageJsonInfo.packageDirectory; + const mainResolution = loadNodeModuleFromDirectoryWorker( + extensions, + packageJsonInfo.packageDirectory, + /*onlyRecordFailures*/ + false, + loadPackageJsonMainState, + packageJsonInfo + ); + entrypoints = append(entrypoints, mainResolution == null ? void 0 : mainResolution.path); + if (features & 8 /* Exports */ && packageJsonInfo.contents.packageJsonContent.exports) { + const conditionSets = deduplicate( + [getConditions(options, 99 /* ESNext */), getConditions(options, 1 /* CommonJS */)], + arrayIsEqualTo + ); + for (const conditions of conditionSets) { + const loadPackageJsonExportsState = { ...loadPackageJsonMainState, failedLookupLocations: [], conditions, host }; + const exportResolutions = loadEntrypointsFromExportMap( + packageJsonInfo, + packageJsonInfo.contents.packageJsonContent.exports, + loadPackageJsonExportsState, + extensions + ); + if (exportResolutions) { + for (const resolution of exportResolutions) { + entrypoints = appendIfUnique(entrypoints, resolution.path); + } + } + } + } + return packageJsonInfo.contents.resolvedEntrypoints = entrypoints || false; +} +function loadEntrypointsFromExportMap(scope, exports2, state, extensions) { + let entrypoints; + if (isArray(exports2)) { + for (const target of exports2) { + loadEntrypointsFromTargetExports(target); + } + } else if (typeof exports2 === "object" && exports2 !== null && allKeysStartWithDot(exports2)) { + for (const key in exports2) { + loadEntrypointsFromTargetExports(exports2[key]); + } + } else { + loadEntrypointsFromTargetExports(exports2); + } + return entrypoints; + function loadEntrypointsFromTargetExports(target) { + var _a, _b; + if (typeof target === "string" && startsWith(target, "./")) { + if (target.includes("*") && state.host.readDirectory) { + if (target.indexOf("*") !== target.lastIndexOf("*")) { + return false; + } + state.host.readDirectory( + scope.packageDirectory, + extensionsToExtensionsArray(extensions), + /*excludes*/ + void 0, + [ + changeFullExtension(replaceFirstStar(target, "**/*"), ".*") + ] + ).forEach((entry) => { + entrypoints = appendIfUnique(entrypoints, { + path: entry, + ext: getAnyExtensionFromPath(entry), + resolvedUsingTsExtension: void 0 + }); + }); + } else { + const partsAfterFirst = getPathComponents(target).slice(2); + if (partsAfterFirst.includes("..") || partsAfterFirst.includes(".") || partsAfterFirst.includes("node_modules")) { + return false; + } + const resolvedTarget = combinePaths(scope.packageDirectory, target); + const finalPath = getNormalizedAbsolutePath(resolvedTarget, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const result = loadFileNameFromPackageJsonField( + extensions, + finalPath, + target, + /*onlyRecordFailures*/ + false, + state + ); + if (result) { + entrypoints = appendIfUnique(entrypoints, result, (a, b) => a.path === b.path); + return true; + } + } + } else if (Array.isArray(target)) { + for (const t of target) { + const success = loadEntrypointsFromTargetExports(t); + if (success) { + return true; + } + } + } else if (typeof target === "object" && target !== null) { + return forEach(getOwnKeys(target), (key) => { + if (key === "default" || contains(state.conditions, key) || isApplicableVersionedTypesKey(state.conditions, key)) { + loadEntrypointsFromTargetExports(target[key]); + return true; + } + }); + } + } +} +function getTemporaryModuleResolutionState(packageJsonInfoCache, host, options) { + return { + host, + compilerOptions: options, + traceEnabled: isTraceEnabled(options, host), + failedLookupLocations: void 0, + affectingLocations: void 0, + packageJsonInfoCache, + features: 0 /* None */, + conditions: emptyArray, + requestContainingDirectory: void 0, + reportDiagnostic: noop, + isConfigLookup: false, + candidateIsFromPackageJsonField: false, + resolvedPackageDirectory: false + }; +} +function getPackageScopeForPath(directory, state) { + return forEachAncestorDirectoryStoppingAtGlobalCache( + state.host, + directory, + (dir) => getPackageJsonInfo( + dir, + /*onlyRecordFailures*/ + false, + state + ) + ); +} +function getVersionPathsOfPackageJsonInfo(packageJsonInfo, state) { + if (packageJsonInfo.contents.versionPaths === void 0) { + packageJsonInfo.contents.versionPaths = readPackageJsonTypesVersionPaths(packageJsonInfo.contents.packageJsonContent, state) || false; + } + return packageJsonInfo.contents.versionPaths || void 0; +} +function getPeerDependenciesOfPackageJsonInfo(packageJsonInfo, state) { + if (packageJsonInfo.contents.peerDependencies === void 0) { + packageJsonInfo.contents.peerDependencies = readPackageJsonPeerDependencies(packageJsonInfo, state) || false; + } + return packageJsonInfo.contents.peerDependencies || void 0; +} +function readPackageJsonPeerDependencies(packageJsonInfo, state) { + const peerDependencies = readPackageJsonField(packageJsonInfo.contents.packageJsonContent, "peerDependencies", "object", state); + if (peerDependencies === void 0) return void 0; + if (state.traceEnabled) trace(state.host, Diagnostics.package_json_has_a_peerDependencies_field); + const packageDirectory = realPath(packageJsonInfo.packageDirectory, state.host, state.traceEnabled); + const nodeModules = packageDirectory.substring(0, packageDirectory.lastIndexOf("node_modules") + "node_modules".length) + directorySeparator; + let result = ""; + for (const key in peerDependencies) { + if (hasProperty(peerDependencies, key)) { + const peerPackageJson = getPackageJsonInfo( + nodeModules + key, + /*onlyRecordFailures*/ + false, + state + ); + if (peerPackageJson) { + const version2 = peerPackageJson.contents.packageJsonContent.version; + result += `+${key}@${version2}`; + if (state.traceEnabled) trace(state.host, Diagnostics.Found_peerDependency_0_with_1_version, key, version2); + } else { + if (state.traceEnabled) trace(state.host, Diagnostics.Failed_to_find_peerDependency_0, key); + } + } + } + return result; +} +function getPackageJsonInfo(packageDirectory, onlyRecordFailures, state) { + var _a, _b, _c, _d, _e, _f; + const { host, traceEnabled } = state; + const packageJsonPath = combinePaths(packageDirectory, "package.json"); + if (onlyRecordFailures) { + (_a = state.failedLookupLocations) == null ? void 0 : _a.push(packageJsonPath); + return void 0; + } + const existing = (_b = state.packageJsonInfoCache) == null ? void 0 : _b.getPackageJsonInfo(packageJsonPath); + if (existing !== void 0) { + if (isPackageJsonInfo(existing)) { + if (traceEnabled) trace(host, Diagnostics.File_0_exists_according_to_earlier_cached_lookups, packageJsonPath); + (_c = state.affectingLocations) == null ? void 0 : _c.push(packageJsonPath); + return existing.packageDirectory === packageDirectory ? existing : { packageDirectory, contents: existing.contents }; + } else { + if (existing.directoryExists && traceEnabled) trace(host, Diagnostics.File_0_does_not_exist_according_to_earlier_cached_lookups, packageJsonPath); + (_d = state.failedLookupLocations) == null ? void 0 : _d.push(packageJsonPath); + return void 0; + } + } + const directoryExists = directoryProbablyExists(packageDirectory, host); + if (directoryExists && host.fileExists(packageJsonPath)) { + const packageJsonContent = readJson(packageJsonPath, host); + if (traceEnabled) { + trace(host, Diagnostics.Found_package_json_at_0, packageJsonPath); + } + const result = { packageDirectory, contents: { packageJsonContent, versionPaths: void 0, resolvedEntrypoints: void 0, peerDependencies: void 0 } }; + if (state.packageJsonInfoCache && !state.packageJsonInfoCache.isReadonly) state.packageJsonInfoCache.setPackageJsonInfo(packageJsonPath, result); + (_e = state.affectingLocations) == null ? void 0 : _e.push(packageJsonPath); + return result; + } else { + if (directoryExists && traceEnabled) { + trace(host, Diagnostics.File_0_does_not_exist, packageJsonPath); + } + if (state.packageJsonInfoCache && !state.packageJsonInfoCache.isReadonly) state.packageJsonInfoCache.setPackageJsonInfo(packageJsonPath, { packageDirectory, directoryExists }); + (_f = state.failedLookupLocations) == null ? void 0 : _f.push(packageJsonPath); + } +} +function loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageJson) { + const versionPaths = packageJson && getVersionPathsOfPackageJsonInfo(packageJson, state); + let packageFile; + if (packageJson && arePathsEqual(packageJson == null ? void 0 : packageJson.packageDirectory, candidate, state.host)) { + if (state.isConfigLookup) { + packageFile = readPackageJsonTSConfigField(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state); + } else { + packageFile = extensions & 4 /* Declaration */ && readPackageJsonTypesFields(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state) || extensions & (3 /* ImplementationFiles */ | 4 /* Declaration */) && readPackageJsonMainField(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state) || void 0; + } + } + const loader = (extensions2, candidate2, onlyRecordFailures2, state2) => { + const fromFile = loadFileNameFromPackageJsonField( + extensions2, + candidate2, + /*packageJsonValue*/ + void 0, + onlyRecordFailures2, + state2 + ); + if (fromFile) { + return noPackageId(fromFile); + } + const expandedExtensions = extensions2 === 4 /* Declaration */ ? 1 /* TypeScript */ | 4 /* Declaration */ : extensions2; + const features = state2.features; + const candidateIsFromPackageJsonField = state2.candidateIsFromPackageJsonField; + state2.candidateIsFromPackageJsonField = true; + if ((packageJson == null ? void 0 : packageJson.contents.packageJsonContent.type) !== "module") { + state2.features &= ~32 /* EsmMode */; + } + const result = nodeLoadModuleByRelativeName( + expandedExtensions, + candidate2, + onlyRecordFailures2, + state2, + /*considerPackageJson*/ + false + ); + state2.features = features; + state2.candidateIsFromPackageJsonField = candidateIsFromPackageJsonField; + return result; + }; + const onlyRecordFailuresForPackageFile = packageFile ? !directoryProbablyExists(getDirectoryPath(packageFile), state.host) : void 0; + const onlyRecordFailuresForIndex = onlyRecordFailures || !directoryProbablyExists(candidate, state.host); + const indexPath = combinePaths(candidate, state.isConfigLookup ? "tsconfig" : "index"); + if (versionPaths && (!packageFile || containsPath(candidate, packageFile))) { + const moduleName = getRelativePathFromDirectory( + candidate, + packageFile || indexPath, + /*ignoreCase*/ + false + ); + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, version, moduleName); + } + const pathPatterns = tryParsePatterns(versionPaths.paths); + const result = tryLoadModuleUsingPaths(extensions, moduleName, candidate, versionPaths.paths, pathPatterns, loader, onlyRecordFailuresForPackageFile || onlyRecordFailuresForIndex, state); + if (result) { + return removeIgnoredPackageId(result.value); + } + } + const packageFileResult = packageFile && removeIgnoredPackageId(loader(extensions, packageFile, onlyRecordFailuresForPackageFile, state)); + if (packageFileResult) return packageFileResult; + if (!(state.features & 32 /* EsmMode */)) { + return loadModuleFromFile(extensions, indexPath, onlyRecordFailuresForIndex, state); + } +} +function extensionIsOk(extensions, extension) { + return extensions & 2 /* JavaScript */ && (extension === ".js" /* Js */ || extension === ".jsx" /* Jsx */ || extension === ".mjs" /* Mjs */ || extension === ".cjs" /* Cjs */) || extensions & 1 /* TypeScript */ && (extension === ".ts" /* Ts */ || extension === ".tsx" /* Tsx */ || extension === ".mts" /* Mts */ || extension === ".cts" /* Cts */) || extensions & 4 /* Declaration */ && (extension === ".d.ts" /* Dts */ || extension === ".d.mts" /* Dmts */ || extension === ".d.cts" /* Dcts */) || extensions & 8 /* Json */ && extension === ".json" /* Json */ || false; +} +function parsePackageName(moduleName) { + let idx = moduleName.indexOf(directorySeparator); + if (moduleName[0] === "@") { + idx = moduleName.indexOf(directorySeparator, idx + 1); + } + return idx === -1 ? { packageName: moduleName, rest: "" } : { packageName: moduleName.slice(0, idx), rest: moduleName.slice(idx + 1) }; +} +function allKeysStartWithDot(obj) { + return every(getOwnKeys(obj), (k) => startsWith(k, ".")); +} +function noKeyStartsWithDot(obj) { + return !some(getOwnKeys(obj), (k) => startsWith(k, ".")); +} +function loadModuleFromSelfNameReference(extensions, moduleName, directory, state, cache, redirectedReference) { + var _a, _b; + const directoryPath = getNormalizedAbsolutePath(directory, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const scope = getPackageScopeForPath(directoryPath, state); + if (!scope || !scope.contents.packageJsonContent.exports) { + return void 0; + } + if (typeof scope.contents.packageJsonContent.name !== "string") { + return void 0; + } + const parts = getPathComponents(moduleName); + const nameParts = getPathComponents(scope.contents.packageJsonContent.name); + if (!every(nameParts, (p, i) => parts[i] === p)) { + return void 0; + } + const trailingParts = parts.slice(nameParts.length); + const subpath = !length(trailingParts) ? "." : `.${directorySeparator}${trailingParts.join(directorySeparator)}`; + if (getAllowJSCompilerOption(state.compilerOptions) && !pathContainsNodeModules(directory)) { + return loadModuleFromExports(scope, extensions, subpath, state, cache, redirectedReference); + } + const priorityExtensions = extensions & (1 /* TypeScript */ | 4 /* Declaration */); + const secondaryExtensions = extensions & ~(1 /* TypeScript */ | 4 /* Declaration */); + return loadModuleFromExports(scope, priorityExtensions, subpath, state, cache, redirectedReference) || loadModuleFromExports(scope, secondaryExtensions, subpath, state, cache, redirectedReference); +} +function loadModuleFromExports(scope, extensions, subpath, state, cache, redirectedReference) { + if (!scope.contents.packageJsonContent.exports) { + return void 0; + } + if (subpath === ".") { + let mainExport; + if (typeof scope.contents.packageJsonContent.exports === "string" || Array.isArray(scope.contents.packageJsonContent.exports) || typeof scope.contents.packageJsonContent.exports === "object" && noKeyStartsWithDot(scope.contents.packageJsonContent.exports)) { + mainExport = scope.contents.packageJsonContent.exports; + } else if (hasProperty(scope.contents.packageJsonContent.exports, ".")) { + mainExport = scope.contents.packageJsonContent.exports["."]; + } + if (mainExport) { + const loadModuleFromTargetExportOrImport = getLoadModuleFromTargetExportOrImport( + extensions, + state, + cache, + redirectedReference, + subpath, + scope, + /*isImports*/ + false + ); + return loadModuleFromTargetExportOrImport( + mainExport, + "", + /*pattern*/ + false, + "." + ); + } + } else if (allKeysStartWithDot(scope.contents.packageJsonContent.exports)) { + if (typeof scope.contents.packageJsonContent.exports !== "object") { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1, subpath, scope.packageDirectory); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + const result = loadModuleFromExportsOrImports( + extensions, + state, + cache, + redirectedReference, + subpath, + scope.contents.packageJsonContent.exports, + scope, + /*isImports*/ + false + ); + if (result) { + return result; + } + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1, subpath, scope.packageDirectory); + } + return toSearchResult( + /*value*/ + void 0 + ); +} +function loadModuleFromImports(extensions, moduleName, directory, state, cache, redirectedReference) { + var _a, _b; + if (moduleName === "#" || startsWith(moduleName, "#/")) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Invalid_import_specifier_0_has_no_possible_resolutions, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + const directoryPath = getNormalizedAbsolutePath(directory, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + const scope = getPackageScopeForPath(directoryPath, state); + if (!scope) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve, directoryPath); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + if (!scope.contents.packageJsonContent.imports) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_no_imports_defined, scope.packageDirectory); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + const result = loadModuleFromExportsOrImports( + extensions, + state, + cache, + redirectedReference, + moduleName, + scope.contents.packageJsonContent.imports, + scope, + /*isImports*/ + true + ); + if (result) { + return result; + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1, moduleName, scope.packageDirectory); + } + return toSearchResult( + /*value*/ + void 0 + ); +} +function comparePatternKeys(a, b) { + const aPatternIndex = a.indexOf("*"); + const bPatternIndex = b.indexOf("*"); + const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1; + const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1; + if (baseLenA > baseLenB) return -1 /* LessThan */; + if (baseLenB > baseLenA) return 1 /* GreaterThan */; + if (aPatternIndex === -1) return 1 /* GreaterThan */; + if (bPatternIndex === -1) return -1 /* LessThan */; + if (a.length > b.length) return -1 /* LessThan */; + if (b.length > a.length) return 1 /* GreaterThan */; + return 0 /* EqualTo */; +} +function loadModuleFromExportsOrImports(extensions, state, cache, redirectedReference, moduleName, lookupTable, scope, isImports) { + const loadModuleFromTargetExportOrImport = getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirectedReference, moduleName, scope, isImports); + if (!endsWith(moduleName, directorySeparator) && !moduleName.includes("*") && hasProperty(lookupTable, moduleName)) { + const target = lookupTable[moduleName]; + return loadModuleFromTargetExportOrImport( + target, + /*subpath*/ + "", + /*pattern*/ + false, + moduleName + ); + } + const expandingKeys = toSorted(filter(getOwnKeys(lookupTable), (k) => hasOneAsterisk(k) || endsWith(k, "/")), comparePatternKeys); + for (const potentialTarget of expandingKeys) { + if (state.features & 16 /* ExportsPatternTrailers */ && matchesPatternWithTrailer(potentialTarget, moduleName)) { + const target = lookupTable[potentialTarget]; + const starPos = potentialTarget.indexOf("*"); + const subpath = moduleName.substring(potentialTarget.substring(0, starPos).length, moduleName.length - (potentialTarget.length - 1 - starPos)); + return loadModuleFromTargetExportOrImport( + target, + subpath, + /*pattern*/ + true, + potentialTarget + ); + } else if (endsWith(potentialTarget, "*") && startsWith(moduleName, potentialTarget.substring(0, potentialTarget.length - 1))) { + const target = lookupTable[potentialTarget]; + const subpath = moduleName.substring(potentialTarget.length - 1); + return loadModuleFromTargetExportOrImport( + target, + subpath, + /*pattern*/ + true, + potentialTarget + ); + } else if (startsWith(moduleName, potentialTarget)) { + const target = lookupTable[potentialTarget]; + const subpath = moduleName.substring(potentialTarget.length); + return loadModuleFromTargetExportOrImport( + target, + subpath, + /*pattern*/ + false, + potentialTarget + ); + } + } + function matchesPatternWithTrailer(target, name) { + if (endsWith(target, "*")) return false; + const starPos = target.indexOf("*"); + if (starPos === -1) return false; + return startsWith(name, target.substring(0, starPos)) && endsWith(name, target.substring(starPos + 1)); + } +} +function hasOneAsterisk(patternKey) { + const firstStar = patternKey.indexOf("*"); + return firstStar !== -1 && firstStar === patternKey.lastIndexOf("*"); +} +function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirectedReference, moduleName, scope, isImports) { + return loadModuleFromTargetExportOrImport; + function loadModuleFromTargetExportOrImport(target, subpath, pattern, key) { + var _a, _b; + if (typeof target === "string") { + if (!pattern && subpath.length > 0 && !endsWith(target, "/")) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + if (!startsWith(target, "./")) { + if (isImports && !startsWith(target, "../") && !startsWith(target, "/") && !isRootedDiskPath(target)) { + const combinedLookup = pattern ? target.replace(/\*/g, subpath) : target + subpath; + traceIfEnabled(state, Diagnostics.Using_0_subpath_1_with_target_2, "imports", key, combinedLookup); + traceIfEnabled(state, Diagnostics.Resolving_module_0_from_1, combinedLookup, scope.packageDirectory + "/"); + const result = nodeModuleNameResolverWorker( + state.features, + combinedLookup, + scope.packageDirectory + "/", + state.compilerOptions, + state.host, + cache, + extensions, + /*isConfigLookup*/ + false, + redirectedReference, + state.conditions + ); + (_a = state.failedLookupLocations) == null ? void 0 : _a.push(...result.failedLookupLocations ?? emptyArray); + (_b = state.affectingLocations) == null ? void 0 : _b.push(...result.affectingLocations ?? emptyArray); + return toSearchResult( + result.resolvedModule ? { + path: result.resolvedModule.resolvedFileName, + extension: result.resolvedModule.extension, + packageId: result.resolvedModule.packageId, + originalPath: result.resolvedModule.originalPath, + resolvedUsingTsExtension: result.resolvedModule.resolvedUsingTsExtension + } : void 0 + ); + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + const parts = pathIsRelative(target) ? getPathComponents(target).slice(1) : getPathComponents(target); + const partsAfterFirst = parts.slice(1); + if (partsAfterFirst.includes("..") || partsAfterFirst.includes(".") || partsAfterFirst.includes("node_modules")) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + const resolvedTarget = combinePaths(scope.packageDirectory, target); + const subpathParts = getPathComponents(subpath); + if (subpathParts.includes("..") || subpathParts.includes(".") || subpathParts.includes("node_modules")) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.Using_0_subpath_1_with_target_2, isImports ? "imports" : "exports", key, pattern ? target.replace(/\*/g, subpath) : target + subpath); + } + const finalPath = toAbsolutePath(pattern ? resolvedTarget.replace(/\*/g, subpath) : resolvedTarget + subpath); + const inputLink = tryLoadInputFileForPath(finalPath, subpath, combinePaths(scope.packageDirectory, "package.json"), isImports); + if (inputLink) return inputLink; + return toSearchResult(withPackageId(scope, loadFileNameFromPackageJsonField( + extensions, + finalPath, + target, + /*onlyRecordFailures*/ + false, + state + ), state)); + } else if (typeof target === "object" && target !== null) { + if (!Array.isArray(target)) { + traceIfEnabled(state, Diagnostics.Entering_conditional_exports); + for (const condition of getOwnKeys(target)) { + if (condition === "default" || state.conditions.includes(condition) || isApplicableVersionedTypesKey(state.conditions, condition)) { + traceIfEnabled(state, Diagnostics.Matched_0_condition_1, isImports ? "imports" : "exports", condition); + const subTarget = target[condition]; + const result = loadModuleFromTargetExportOrImport(subTarget, subpath, pattern, key); + if (result) { + traceIfEnabled(state, Diagnostics.Resolved_under_condition_0, condition); + traceIfEnabled(state, Diagnostics.Exiting_conditional_exports); + return result; + } else { + traceIfEnabled(state, Diagnostics.Failed_to_resolve_under_condition_0, condition); + } + } else { + traceIfEnabled(state, Diagnostics.Saw_non_matching_condition_0, condition); + } + } + traceIfEnabled(state, Diagnostics.Exiting_conditional_exports); + return void 0; + } else { + if (!length(target)) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + for (const elem of target) { + const result = loadModuleFromTargetExportOrImport(elem, subpath, pattern, key); + if (result) { + return result; + } + } + } + } else if (target === null) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_explicitly_maps_specifier_1_to_null, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + } + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); + } + return toSearchResult( + /*value*/ + void 0 + ); + function toAbsolutePath(path) { + var _a2, _b2; + if (path === void 0) return path; + return getNormalizedAbsolutePath(path, (_b2 = (_a2 = state.host).getCurrentDirectory) == null ? void 0 : _b2.call(_a2)); + } + function combineDirectoryPath(root, dir) { + return ensureTrailingDirectorySeparator(combinePaths(root, dir)); + } + function tryLoadInputFileForPath(finalPath, entry, packagePath, isImports2) { + var _a2, _b2, _c, _d; + if (!state.isConfigLookup && (state.compilerOptions.declarationDir || state.compilerOptions.outDir) && !finalPath.includes("/node_modules/") && (state.compilerOptions.configFile ? containsPath(scope.packageDirectory, toAbsolutePath(state.compilerOptions.configFile.fileName), !useCaseSensitiveFileNames(state)) : true)) { + const getCanonicalFileName = hostGetCanonicalFileName({ useCaseSensitiveFileNames: () => useCaseSensitiveFileNames(state) }); + const commonSourceDirGuesses = []; + if (state.compilerOptions.rootDir || state.compilerOptions.composite && state.compilerOptions.configFilePath) { + const commonDir = toAbsolutePath(getCommonSourceDirectory(state.compilerOptions, () => [], ((_b2 = (_a2 = state.host).getCurrentDirectory) == null ? void 0 : _b2.call(_a2)) || "", getCanonicalFileName)); + commonSourceDirGuesses.push(commonDir); + } else if (state.requestContainingDirectory) { + const requestingFile = toAbsolutePath(combinePaths(state.requestContainingDirectory, "index.ts")); + const commonDir = toAbsolutePath(getCommonSourceDirectory(state.compilerOptions, () => [requestingFile, toAbsolutePath(packagePath)], ((_d = (_c = state.host).getCurrentDirectory) == null ? void 0 : _d.call(_c)) || "", getCanonicalFileName)); + commonSourceDirGuesses.push(commonDir); + let fragment = ensureTrailingDirectorySeparator(commonDir); + while (fragment && fragment.length > 1) { + const parts = getPathComponents(fragment); + parts.pop(); + const commonDir2 = getPathFromPathComponents(parts); + commonSourceDirGuesses.unshift(commonDir2); + fragment = ensureTrailingDirectorySeparator(commonDir2); + } + } + if (commonSourceDirGuesses.length > 1) { + state.reportDiagnostic(createCompilerDiagnostic( + isImports2 ? Diagnostics.The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate : Diagnostics.The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_rootDir_compiler_option_to_disambiguate, + entry === "" ? "." : entry, + // replace empty string with `.` - the reverse of the operation done when entries are built - so main entrypoint errors don't look weird + packagePath + )); + } + for (const commonSourceDirGuess of commonSourceDirGuesses) { + const candidateDirectories = getOutputDirectoriesForBaseDirectory(commonSourceDirGuess); + for (const candidateDir of candidateDirectories) { + if (containsPath(candidateDir, finalPath, !useCaseSensitiveFileNames(state))) { + const pathFragment = finalPath.slice(candidateDir.length + 1); + const possibleInputBase = combinePaths(commonSourceDirGuess, pathFragment); + const jsAndDtsExtensions = [".mjs" /* Mjs */, ".cjs" /* Cjs */, ".js" /* Js */, ".json" /* Json */, ".d.mts" /* Dmts */, ".d.cts" /* Dcts */, ".d.ts" /* Dts */]; + for (const ext of jsAndDtsExtensions) { + if (fileExtensionIs(possibleInputBase, ext)) { + const inputExts = getPossibleOriginalInputExtensionForExtension(possibleInputBase); + for (const possibleExt of inputExts) { + if (!extensionIsOk(extensions, possibleExt)) continue; + const possibleInputWithInputExtension = changeAnyExtension(possibleInputBase, possibleExt, ext, !useCaseSensitiveFileNames(state)); + if (state.host.fileExists(possibleInputWithInputExtension)) { + return toSearchResult(withPackageId(scope, loadFileNameFromPackageJsonField( + extensions, + possibleInputWithInputExtension, + /*packageJsonValue*/ + void 0, + /*onlyRecordFailures*/ + false, + state + ), state)); + } + } + } + } + } + } + } + } + return void 0; + function getOutputDirectoriesForBaseDirectory(commonSourceDirGuess) { + var _a3, _b3; + const currentDir = state.compilerOptions.configFile ? ((_b3 = (_a3 = state.host).getCurrentDirectory) == null ? void 0 : _b3.call(_a3)) || "" : commonSourceDirGuess; + const candidateDirectories = []; + if (state.compilerOptions.declarationDir) { + candidateDirectories.push(toAbsolutePath(combineDirectoryPath(currentDir, state.compilerOptions.declarationDir))); + } + if (state.compilerOptions.outDir && state.compilerOptions.outDir !== state.compilerOptions.declarationDir) { + candidateDirectories.push(toAbsolutePath(combineDirectoryPath(currentDir, state.compilerOptions.outDir))); + } + return candidateDirectories; + } + } + } +} +function isApplicableVersionedTypesKey(conditions, key) { + if (!conditions.includes("types")) return false; + if (!startsWith(key, "types@")) return false; + const range = VersionRange.tryParse(key.substring("types@".length)); + if (!range) return false; + return range.test(version); +} +function loadModuleFromNearestNodeModulesDirectory(extensions, moduleName, directory, state, cache, redirectedReference) { + return loadModuleFromNearestNodeModulesDirectoryWorker( + extensions, + moduleName, + directory, + state, + /*typesScopeOnly*/ + false, + cache, + redirectedReference + ); +} +function loadModuleFromNearestNodeModulesDirectoryTypesScope(moduleName, directory, state) { + return loadModuleFromNearestNodeModulesDirectoryWorker( + 4 /* Declaration */, + moduleName, + directory, + state, + /*typesScopeOnly*/ + true, + /*cache*/ + void 0, + /*redirectedReference*/ + void 0 + ); +} +function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, directory, state, typesScopeOnly, cache, redirectedReference) { + const mode = state.features === 0 ? void 0 : state.features & 32 /* EsmMode */ || state.conditions.includes("import") ? 99 /* ESNext */ : 1 /* CommonJS */; + const priorityExtensions = extensions & (1 /* TypeScript */ | 4 /* Declaration */); + const secondaryExtensions = extensions & ~(1 /* TypeScript */ | 4 /* Declaration */); + if (priorityExtensions) { + traceIfEnabled(state, Diagnostics.Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0, formatExtensions(priorityExtensions)); + const result = lookup(priorityExtensions); + if (result) return result; + } + if (secondaryExtensions && !typesScopeOnly) { + traceIfEnabled(state, Diagnostics.Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0, formatExtensions(secondaryExtensions)); + return lookup(secondaryExtensions); + } + function lookup(extensions2) { + return forEachAncestorDirectoryStoppingAtGlobalCache( + state.host, + normalizeSlashes(directory), + (ancestorDirectory) => { + if (getBaseFileName(ancestorDirectory) !== "node_modules") { + const resolutionFromCache = tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, ancestorDirectory, redirectedReference, state); + if (resolutionFromCache) { + return resolutionFromCache; + } + return toSearchResult(loadModuleFromImmediateNodeModulesDirectory(extensions2, moduleName, ancestorDirectory, state, typesScopeOnly, cache, redirectedReference)); + } + } + ); + } +} +function forEachAncestorDirectoryStoppingAtGlobalCache(host, directory, callback) { + var _a; + const globalCache = (_a = host == null ? void 0 : host.getGlobalTypingsCacheLocation) == null ? void 0 : _a.call(host); + return forEachAncestorDirectory(directory, (ancestorDirectory) => { + const result = callback(ancestorDirectory); + if (result !== void 0) return result; + if (ancestorDirectory === globalCache) return false; + }) || void 0; +} +function loadModuleFromImmediateNodeModulesDirectory(extensions, moduleName, directory, state, typesScopeOnly, cache, redirectedReference) { + const nodeModulesFolder = combinePaths(directory, "node_modules"); + const nodeModulesFolderExists = directoryProbablyExists(nodeModulesFolder, state.host); + if (!nodeModulesFolderExists && state.traceEnabled) { + trace(state.host, Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesFolder); + } + if (!typesScopeOnly) { + const packageResult = loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesFolder, nodeModulesFolderExists, state, cache, redirectedReference); + if (packageResult) { + return packageResult; + } + } + if (extensions & 4 /* Declaration */) { + const nodeModulesAtTypes2 = combinePaths(nodeModulesFolder, "@types"); + let nodeModulesAtTypesExists = nodeModulesFolderExists; + if (nodeModulesFolderExists && !directoryProbablyExists(nodeModulesAtTypes2, state.host)) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, nodeModulesAtTypes2); + } + nodeModulesAtTypesExists = false; + } + return loadModuleFromSpecificNodeModulesDirectory(4 /* Declaration */, mangleScopedPackageNameWithTrace(moduleName, state), nodeModulesAtTypes2, nodeModulesAtTypesExists, state, cache, redirectedReference); + } +} +function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, nodeModulesDirectory, nodeModulesDirectoryExists, state, cache, redirectedReference) { + var _a, _b; + const candidate = normalizePath(combinePaths(nodeModulesDirectory, moduleName)); + const { packageName, rest } = parsePackageName(moduleName); + const packageDirectory = combinePaths(nodeModulesDirectory, packageName); + let rootPackageInfo; + let packageInfo = getPackageJsonInfo(candidate, !nodeModulesDirectoryExists, state); + if (rest !== "" && packageInfo && (!(state.features & 8 /* Exports */) || !hasProperty(((_a = rootPackageInfo = getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state)) == null ? void 0 : _a.contents.packageJsonContent) ?? emptyArray, "exports"))) { + const fromFile = loadModuleFromFile(extensions, candidate, !nodeModulesDirectoryExists, state); + if (fromFile) { + return noPackageId(fromFile); + } + const fromDirectory = loadNodeModuleFromDirectoryWorker( + extensions, + candidate, + !nodeModulesDirectoryExists, + state, + packageInfo + ); + return withPackageId(packageInfo, fromDirectory, state); + } + const loader = (extensions2, candidate2, onlyRecordFailures, state2) => { + let pathAndExtension = (rest || !(state2.features & 32 /* EsmMode */)) && loadModuleFromFile(extensions2, candidate2, onlyRecordFailures, state2) || loadNodeModuleFromDirectoryWorker( + extensions2, + candidate2, + onlyRecordFailures, + state2, + packageInfo + ); + if (!pathAndExtension && !rest && packageInfo && (packageInfo.contents.packageJsonContent.exports === void 0 || packageInfo.contents.packageJsonContent.exports === null) && state2.features & 32 /* EsmMode */) { + pathAndExtension = loadModuleFromFile(extensions2, combinePaths(candidate2, "index.js"), onlyRecordFailures, state2); + } + return withPackageId(packageInfo, pathAndExtension, state2); + }; + if (rest !== "") { + packageInfo = rootPackageInfo ?? getPackageJsonInfo(packageDirectory, !nodeModulesDirectoryExists, state); + } + if (packageInfo) { + state.resolvedPackageDirectory = true; + } + if (packageInfo && packageInfo.contents.packageJsonContent.exports && state.features & 8 /* Exports */) { + return (_b = loadModuleFromExports(packageInfo, extensions, combinePaths(".", rest), state, cache, redirectedReference)) == null ? void 0 : _b.value; + } + const versionPaths = rest !== "" && packageInfo ? getVersionPathsOfPackageJsonInfo(packageInfo, state) : void 0; + if (versionPaths) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_match_module_name_2, versionPaths.version, version, rest); + } + const packageDirectoryExists = nodeModulesDirectoryExists && directoryProbablyExists(packageDirectory, state.host); + const pathPatterns = tryParsePatterns(versionPaths.paths); + const fromPaths = tryLoadModuleUsingPaths(extensions, rest, packageDirectory, versionPaths.paths, pathPatterns, loader, !packageDirectoryExists, state); + if (fromPaths) { + return fromPaths.value; + } + } + return loader(extensions, candidate, !nodeModulesDirectoryExists, state); +} +function tryLoadModuleUsingPaths(extensions, moduleName, baseDirectory, paths, pathPatterns, loader, onlyRecordFailures, state) { + const matchedPattern = matchPatternOrExact(pathPatterns, moduleName); + if (matchedPattern) { + const matchedStar = isString(matchedPattern) ? void 0 : matchedText(matchedPattern, moduleName); + const matchedPatternText = isString(matchedPattern) ? matchedPattern : patternText(matchedPattern); + if (state.traceEnabled) { + trace(state.host, Diagnostics.Module_name_0_matched_pattern_1, moduleName, matchedPatternText); + } + const resolved = forEach(paths[matchedPatternText], (subst) => { + const path = matchedStar ? replaceFirstStar(subst, matchedStar) : subst; + const candidate = normalizePath(combinePaths(baseDirectory, path)); + if (state.traceEnabled) { + trace(state.host, Diagnostics.Trying_substitution_0_candidate_module_location_Colon_1, subst, path); + } + const extension = tryGetExtensionFromPath2(subst); + if (extension !== void 0) { + const path2 = tryFile(candidate, onlyRecordFailures, state); + if (path2 !== void 0) { + return noPackageId({ path: path2, ext: extension, resolvedUsingTsExtension: void 0 }); + } + } + return loader(extensions, candidate, onlyRecordFailures || !directoryProbablyExists(getDirectoryPath(candidate), state.host), state); + }); + return { value: resolved }; + } +} +var mangledScopedPackageSeparator = "__"; +function mangleScopedPackageNameWithTrace(packageName, state) { + const mangled = mangleScopedPackageName(packageName); + if (state.traceEnabled && mangled !== packageName) { + trace(state.host, Diagnostics.Scoped_package_detected_looking_in_0, mangled); + } + return mangled; +} +function getTypesPackageName(packageName) { + return `@types/${mangleScopedPackageName(packageName)}`; +} +function mangleScopedPackageName(packageName) { + if (startsWith(packageName, "@")) { + const replaceSlash = packageName.replace(directorySeparator, mangledScopedPackageSeparator); + if (replaceSlash !== packageName) { + return replaceSlash.slice(1); + } + } + return packageName; +} +function getPackageNameFromTypesPackageName(mangledName) { + const withoutAtTypePrefix = removePrefix(mangledName, "@types/"); + if (withoutAtTypePrefix !== mangledName) { + return unmangleScopedPackageName(withoutAtTypePrefix); + } + return mangledName; +} +function unmangleScopedPackageName(typesPackageName) { + return typesPackageName.includes(mangledScopedPackageSeparator) ? "@" + typesPackageName.replace(mangledScopedPackageSeparator, directorySeparator) : typesPackageName; +} +function tryFindNonRelativeModuleNameInCache(cache, moduleName, mode, containingDirectory, redirectedReference, state) { + const result = cache && cache.getFromNonRelativeNameCache(moduleName, mode, containingDirectory, redirectedReference); + if (result) { + if (state.traceEnabled) { + trace(state.host, Diagnostics.Resolution_for_module_0_was_found_in_cache_from_location_1, moduleName, containingDirectory); + } + state.resultFromCache = result; + return { + value: result.resolvedModule && { + path: result.resolvedModule.resolvedFileName, + originalPath: result.resolvedModule.originalPath || true, + extension: result.resolvedModule.extension, + packageId: result.resolvedModule.packageId, + resolvedUsingTsExtension: result.resolvedModule.resolvedUsingTsExtension + } + }; + } +} +function classicNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference) { + const traceEnabled = isTraceEnabled(compilerOptions, host); + const failedLookupLocations = []; + const affectingLocations = []; + const containingDirectory = getDirectoryPath(containingFile); + const diagnostics = []; + const state = { + compilerOptions, + host, + traceEnabled, + failedLookupLocations, + affectingLocations, + packageJsonInfoCache: cache, + features: 0 /* None */, + conditions: [], + requestContainingDirectory: containingDirectory, + reportDiagnostic: (diag2) => void diagnostics.push(diag2), + isConfigLookup: false, + candidateIsFromPackageJsonField: false, + resolvedPackageDirectory: false + }; + const resolved = tryResolve(1 /* TypeScript */ | 4 /* Declaration */) || tryResolve(2 /* JavaScript */ | (compilerOptions.resolveJsonModule ? 8 /* Json */ : 0)); + return createResolvedModuleWithFailedLookupLocationsHandlingSymlink( + moduleName, + resolved && resolved.value, + (resolved == null ? void 0 : resolved.value) && pathContainsNodeModules(resolved.value.path), + failedLookupLocations, + affectingLocations, + diagnostics, + state, + cache + ); + function tryResolve(extensions) { + const resolvedUsingSettings = tryLoadModuleUsingOptionalResolutionSettings(extensions, moduleName, containingDirectory, loadModuleFromFileNoPackageId, state); + if (resolvedUsingSettings) { + return { value: resolvedUsingSettings }; + } + if (!isExternalModuleNameRelative(moduleName)) { + const resolved2 = forEachAncestorDirectoryStoppingAtGlobalCache( + state.host, + containingDirectory, + (directory) => { + const resolutionFromCache = tryFindNonRelativeModuleNameInCache( + cache, + moduleName, + /*mode*/ + void 0, + directory, + redirectedReference, + state + ); + if (resolutionFromCache) { + return resolutionFromCache; + } + const searchName = normalizePath(combinePaths(directory, moduleName)); + return toSearchResult(loadModuleFromFileNoPackageId( + extensions, + searchName, + /*onlyRecordFailures*/ + false, + state + )); + } + ); + if (resolved2) return resolved2; + if (extensions & (1 /* TypeScript */ | 4 /* Declaration */)) { + let resolved3 = loadModuleFromNearestNodeModulesDirectoryTypesScope(moduleName, containingDirectory, state); + if (extensions & 4 /* Declaration */) resolved3 ?? (resolved3 = resolveFromTypeRoot(moduleName, state)); + return resolved3; + } + } else { + const candidate = normalizePath(combinePaths(containingDirectory, moduleName)); + return toSearchResult(loadModuleFromFileNoPackageId( + extensions, + candidate, + /*onlyRecordFailures*/ + false, + state + )); + } + } +} +function resolveFromTypeRoot(moduleName, state) { + if (!state.compilerOptions.typeRoots) return; + for (const typeRoot of state.compilerOptions.typeRoots) { + const candidate = getCandidateFromTypeRoot(typeRoot, moduleName, state); + const directoryExists = directoryProbablyExists(typeRoot, state.host); + if (!directoryExists && state.traceEnabled) { + trace(state.host, Diagnostics.Directory_0_does_not_exist_skipping_all_lookups_in_it, typeRoot); + } + const resolvedFromFile = loadModuleFromFile(4 /* Declaration */, candidate, !directoryExists, state); + if (resolvedFromFile) { + const packageDirectory = parseNodeModuleFromPath(resolvedFromFile.path); + const packageInfo = packageDirectory ? getPackageJsonInfo( + packageDirectory, + /*onlyRecordFailures*/ + false, + state + ) : void 0; + return toSearchResult(withPackageId(packageInfo, resolvedFromFile, state)); + } + const resolved = loadNodeModuleFromDirectory(4 /* Declaration */, candidate, !directoryExists, state); + if (resolved) return toSearchResult(resolved); + } +} +function shouldAllowImportingTsExtension(compilerOptions, fromFileName) { + return getAllowImportingTsExtensions(compilerOptions) || !!fromFileName && isDeclarationFileName(fromFileName); +} +function loadModuleFromGlobalCache(moduleName, projectName, compilerOptions, host, globalCache, packageJsonInfoCache) { + const traceEnabled = isTraceEnabled(compilerOptions, host); + if (traceEnabled) { + trace(host, Diagnostics.Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using_cache_location_2, projectName, moduleName, globalCache); + } + const failedLookupLocations = []; + const affectingLocations = []; + const diagnostics = []; + const state = { + compilerOptions, + host, + traceEnabled, + failedLookupLocations, + affectingLocations, + packageJsonInfoCache, + features: 0 /* None */, + conditions: [], + requestContainingDirectory: void 0, + reportDiagnostic: (diag2) => void diagnostics.push(diag2), + isConfigLookup: false, + candidateIsFromPackageJsonField: false, + resolvedPackageDirectory: false + }; + const resolved = loadModuleFromImmediateNodeModulesDirectory( + 4 /* Declaration */, + moduleName, + globalCache, + state, + /*typesScopeOnly*/ + false, + /*cache*/ + void 0, + /*redirectedReference*/ + void 0 + ); + return createResolvedModuleWithFailedLookupLocations( + resolved, + /*isExternalLibraryImport*/ + true, + failedLookupLocations, + affectingLocations, + diagnostics, + state.resultFromCache, + /*cache*/ + void 0 + ); +} +function toSearchResult(value) { + return value !== void 0 ? { value } : void 0; +} +function traceIfEnabled(state, diagnostic, ...args) { + if (state.traceEnabled) { + trace(state.host, diagnostic, ...args); + } +} +function useCaseSensitiveFileNames(state) { + return !state.host.useCaseSensitiveFileNames ? true : typeof state.host.useCaseSensitiveFileNames === "boolean" ? state.host.useCaseSensitiveFileNames : state.host.useCaseSensitiveFileNames(); +} + +// src/compiler/binder.ts +var ModuleInstanceState = /* @__PURE__ */ ((ModuleInstanceState2) => { + ModuleInstanceState2[ModuleInstanceState2["NonInstantiated"] = 0] = "NonInstantiated"; + ModuleInstanceState2[ModuleInstanceState2["Instantiated"] = 1] = "Instantiated"; + ModuleInstanceState2[ModuleInstanceState2["ConstEnumOnly"] = 2] = "ConstEnumOnly"; + return ModuleInstanceState2; +})(ModuleInstanceState || {}); +function getModuleInstanceState(node, visited) { + if (node.body && !node.body.parent) { + setParent(node.body, node); + setParentRecursive( + node.body, + /*incremental*/ + false + ); + } + return node.body ? getModuleInstanceStateCached(node.body, visited) : 1 /* Instantiated */; +} +function getModuleInstanceStateCached(node, visited = /* @__PURE__ */ new Map()) { + const nodeId = getNodeId(node); + if (visited.has(nodeId)) { + return visited.get(nodeId) || 0 /* NonInstantiated */; + } + visited.set(nodeId, void 0); + const result = getModuleInstanceStateWorker(node, visited); + visited.set(nodeId, result); + return result; +} +function getModuleInstanceStateWorker(node, visited) { + switch (node.kind) { + // 1. interface declarations, type alias declarations + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + return 0 /* NonInstantiated */; + // 2. const enum declarations + case 267 /* EnumDeclaration */: + if (isEnumConst(node)) { + return 2 /* ConstEnumOnly */; + } + break; + // 3. non-exported import declarations + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + if (!hasSyntacticModifier(node, 32 /* Export */)) { + return 0 /* NonInstantiated */; + } + break; + // 4. Export alias declarations pointing at only uninstantiated modules or things uninstantiated modules contain + case 279 /* ExportDeclaration */: + const exportDeclaration = node; + if (!exportDeclaration.moduleSpecifier && exportDeclaration.exportClause && exportDeclaration.exportClause.kind === 280 /* NamedExports */) { + let state = 0 /* NonInstantiated */; + for (const specifier of exportDeclaration.exportClause.elements) { + const specifierState = getModuleInstanceStateForAliasTarget(specifier, visited); + if (specifierState > state) { + state = specifierState; + } + if (state === 1 /* Instantiated */) { + return state; + } + } + return state; + } + break; + // 5. other uninstantiated module declarations. + case 269 /* ModuleBlock */: { + let state = 0 /* NonInstantiated */; + forEachChild(node, (n) => { + const childState = getModuleInstanceStateCached(n, visited); + switch (childState) { + case 0 /* NonInstantiated */: + return; + case 2 /* ConstEnumOnly */: + state = 2 /* ConstEnumOnly */; + return; + case 1 /* Instantiated */: + state = 1 /* Instantiated */; + return true; + default: + Debug.assertNever(childState); + } + }); + return state; + } + case 268 /* ModuleDeclaration */: + return getModuleInstanceState(node, visited); + case 80 /* Identifier */: + if (node.flags & 4096 /* IdentifierIsInJSDocNamespace */) { + return 0 /* NonInstantiated */; + } + } + return 1 /* Instantiated */; +} +function getModuleInstanceStateForAliasTarget(specifier, visited) { + const name = specifier.propertyName || specifier.name; + if (name.kind !== 80 /* Identifier */) { + return 1 /* Instantiated */; + } + let p = specifier.parent; + while (p) { + if (isBlock(p) || isModuleBlock(p) || isSourceFile(p)) { + const statements = p.statements; + let found; + for (const statement of statements) { + if (nodeHasName(statement, name)) { + if (!statement.parent) { + setParent(statement, p); + setParentRecursive( + statement, + /*incremental*/ + false + ); + } + const state = getModuleInstanceStateCached(statement, visited); + if (found === void 0 || state > found) { + found = state; + } + if (found === 1 /* Instantiated */) { + return found; + } + if (statement.kind === 272 /* ImportEqualsDeclaration */) { + found = 1 /* Instantiated */; + } + } + } + if (found !== void 0) { + return found; + } + } + p = p.parent; + } + return 1 /* Instantiated */; +} +var ContainerFlags = /* @__PURE__ */ ((ContainerFlags2) => { + ContainerFlags2[ContainerFlags2["None"] = 0] = "None"; + ContainerFlags2[ContainerFlags2["IsContainer"] = 1] = "IsContainer"; + ContainerFlags2[ContainerFlags2["IsBlockScopedContainer"] = 2] = "IsBlockScopedContainer"; + ContainerFlags2[ContainerFlags2["IsControlFlowContainer"] = 4] = "IsControlFlowContainer"; + ContainerFlags2[ContainerFlags2["IsFunctionLike"] = 8] = "IsFunctionLike"; + ContainerFlags2[ContainerFlags2["IsFunctionExpression"] = 16] = "IsFunctionExpression"; + ContainerFlags2[ContainerFlags2["HasLocals"] = 32] = "HasLocals"; + ContainerFlags2[ContainerFlags2["IsInterface"] = 64] = "IsInterface"; + ContainerFlags2[ContainerFlags2["IsObjectLiteralOrClassExpressionMethodOrAccessor"] = 128] = "IsObjectLiteralOrClassExpressionMethodOrAccessor"; + return ContainerFlags2; +})(ContainerFlags || {}); +function createFlowNode(flags, node, antecedent) { + return Debug.attachFlowNodeDebugInfo({ flags, id: 0, node, antecedent }); +} +var binder = /* @__PURE__ */ createBinder(); +function bindSourceFile(file, options) { + mark("beforeBind"); + binder(file, options); + mark("afterBind"); + measure("Bind", "beforeBind", "afterBind"); +} +function createBinder() { + var file; + var options; + var languageVersion; + var parent2; + var container; + var thisParentContainer; + var blockScopeContainer; + var lastContainer; + var delayedTypeAliases; + var seenThisKeyword; + var jsDocImports; + var currentFlow; + var currentBreakTarget; + var currentContinueTarget; + var currentReturnTarget; + var currentTrueTarget; + var currentFalseTarget; + var currentExceptionTarget; + var preSwitchCaseFlow; + var activeLabelList; + var hasExplicitReturn; + var inReturnPosition; + var hasFlowEffects; + var emitFlags; + var inStrictMode; + var inAssignmentPattern = false; + var symbolCount = 0; + var Symbol48; + var classifiableNames; + var unreachableFlow = createFlowNode( + 1 /* Unreachable */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + var reportedUnreachableFlow = createFlowNode( + 1 /* Unreachable */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + var bindBinaryExpressionFlow = createBindBinaryExpressionFlow(); + return bindSourceFile2; + function createDiagnosticForNode2(node, message, ...args) { + return createDiagnosticForNodeInSourceFile(getSourceFileOfNode(node) || file, node, message, ...args); + } + function bindSourceFile2(f, opts) { + var _a, _b; + file = f; + options = opts; + languageVersion = getEmitScriptTarget(options); + inStrictMode = bindInStrictMode(file, opts); + classifiableNames = /* @__PURE__ */ new Set(); + symbolCount = 0; + Symbol48 = objectAllocator.getSymbolConstructor(); + Debug.attachFlowNodeDebugInfo(unreachableFlow); + Debug.attachFlowNodeDebugInfo(reportedUnreachableFlow); + if (!file.locals) { + (_a = tracing) == null ? void 0 : _a.push( + tracing.Phase.Bind, + "bindSourceFile", + { path: file.path }, + /*separateBeginAndEnd*/ + true + ); + bind(file); + (_b = tracing) == null ? void 0 : _b.pop(); + file.symbolCount = symbolCount; + file.classifiableNames = classifiableNames; + delayedBindJSDocTypedefTag(); + bindJSDocImports(); + } + file = void 0; + options = void 0; + languageVersion = void 0; + parent2 = void 0; + container = void 0; + thisParentContainer = void 0; + blockScopeContainer = void 0; + lastContainer = void 0; + delayedTypeAliases = void 0; + jsDocImports = void 0; + seenThisKeyword = false; + currentFlow = void 0; + currentBreakTarget = void 0; + currentContinueTarget = void 0; + currentReturnTarget = void 0; + currentTrueTarget = void 0; + currentFalseTarget = void 0; + currentExceptionTarget = void 0; + activeLabelList = void 0; + hasExplicitReturn = false; + inReturnPosition = false; + hasFlowEffects = false; + inAssignmentPattern = false; + emitFlags = 0 /* None */; + } + function bindInStrictMode(file2, opts) { + if (getStrictOptionValue(opts, "alwaysStrict") && !file2.isDeclarationFile) { + return true; + } else { + return !!file2.externalModuleIndicator; + } + } + function createSymbol(flags, name) { + symbolCount++; + return new Symbol48(flags, name); + } + function addDeclarationToSymbol(symbol, node, symbolFlags) { + symbol.flags |= symbolFlags; + node.symbol = symbol; + symbol.declarations = appendIfUnique(symbol.declarations, node); + if (symbolFlags & (32 /* Class */ | 384 /* Enum */ | 1536 /* Module */ | 3 /* Variable */) && !symbol.exports) { + symbol.exports = createSymbolTable(); + } + if (symbolFlags & (32 /* Class */ | 64 /* Interface */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && !symbol.members) { + symbol.members = createSymbolTable(); + } + if (symbol.constEnumOnlyModule && symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */)) { + symbol.constEnumOnlyModule = false; + } + if (symbolFlags & 111551 /* Value */) { + setValueDeclaration(symbol, node); + } + } + function getDeclarationName(node) { + if (node.kind === 278 /* ExportAssignment */) { + return node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */; + } + const name = getNameOfDeclaration(node); + if (name) { + if (isAmbientModule(node)) { + const moduleName = getTextOfIdentifierOrLiteral(name); + return isGlobalScopeAugmentation(node) ? "__global" : `"${moduleName}"`; + } + if (name.kind === 168 /* ComputedPropertyName */) { + const nameExpression = name.expression; + if (isStringOrNumericLiteralLike(nameExpression)) { + return escapeLeadingUnderscores(nameExpression.text); + } + if (isSignedNumericLiteral(nameExpression)) { + return tokenToString(nameExpression.operator) + nameExpression.operand.text; + } else { + Debug.fail("Only computed properties with literal names have declaration names"); + } + } + if (isPrivateIdentifier(name)) { + const containingClass = getContainingClass(node); + if (!containingClass) { + return void 0; + } + const containingClassSymbol = containingClass.symbol; + return getSymbolNameForPrivateIdentifier(containingClassSymbol, name.escapedText); + } + if (isJsxNamespacedName(name)) { + return getEscapedTextOfJsxNamespacedName(name); + } + return isPropertyNameLiteral(name) ? getEscapedTextOfIdentifierOrLiteral(name) : void 0; + } + switch (node.kind) { + case 177 /* Constructor */: + return "__constructor" /* Constructor */; + case 185 /* FunctionType */: + case 180 /* CallSignature */: + case 324 /* JSDocSignature */: + return "__call" /* Call */; + case 186 /* ConstructorType */: + case 181 /* ConstructSignature */: + return "__new" /* New */; + case 182 /* IndexSignature */: + return "__index" /* Index */; + case 279 /* ExportDeclaration */: + return "__export" /* ExportStar */; + case 308 /* SourceFile */: + return "export=" /* ExportEquals */; + case 227 /* BinaryExpression */: + if (getAssignmentDeclarationKind(node) === 2 /* ModuleExports */) { + return "export=" /* ExportEquals */; + } + Debug.fail("Unknown binary declaration kind"); + break; + case 318 /* JSDocFunctionType */: + return isJSDocConstructSignature(node) ? "__new" /* New */ : "__call" /* Call */; + case 170 /* Parameter */: + Debug.assert(node.parent.kind === 318 /* JSDocFunctionType */, "Impossible parameter parent kind", () => `parent is: ${Debug.formatSyntaxKind(node.parent.kind)}, expected JSDocFunctionType`); + const functionType = node.parent; + const index = functionType.parameters.indexOf(node); + return "arg" + index; + } + } + function getDisplayName(node) { + return isNamedDeclaration(node) ? declarationNameToString(node.name) : unescapeLeadingUnderscores(Debug.checkDefined(getDeclarationName(node))); + } + function declareSymbol(symbolTable, parent3, node, includes, excludes, isReplaceableByMethod, isComputedName) { + Debug.assert(isComputedName || !hasDynamicName(node)); + const isDefaultExport = hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) && moduleExportNameIsDefault(node.name); + const name = isComputedName ? "__computed" /* Computed */ : isDefaultExport && parent3 ? "default" /* Default */ : getDeclarationName(node); + let symbol; + if (name === void 0) { + symbol = createSymbol(0 /* None */, "__missing" /* Missing */); + } else { + symbol = symbolTable.get(name); + if (includes & 2885600 /* Classifiable */) { + classifiableNames.add(name); + } + if (!symbol) { + symbolTable.set(name, symbol = createSymbol(0 /* None */, name)); + if (isReplaceableByMethod) symbol.isReplaceableByMethod = true; + } else if (isReplaceableByMethod && !symbol.isReplaceableByMethod) { + return symbol; + } else if (symbol.flags & excludes) { + if (symbol.isReplaceableByMethod) { + symbolTable.set(name, symbol = createSymbol(0 /* None */, name)); + } else if (!(includes & 3 /* Variable */ && symbol.flags & 67108864 /* Assignment */)) { + if (isNamedDeclaration(node)) { + setParent(node.name, node); + } + let message = symbol.flags & 2 /* BlockScopedVariable */ ? Diagnostics.Cannot_redeclare_block_scoped_variable_0 : Diagnostics.Duplicate_identifier_0; + let messageNeedsName = true; + if (symbol.flags & 384 /* Enum */ || includes & 384 /* Enum */) { + message = Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations; + messageNeedsName = false; + } + let multipleDefaultExports = false; + if (length(symbol.declarations)) { + if (isDefaultExport) { + message = Diagnostics.A_module_cannot_have_multiple_default_exports; + messageNeedsName = false; + multipleDefaultExports = true; + } else { + if (symbol.declarations && symbol.declarations.length && (node.kind === 278 /* ExportAssignment */ && !node.isExportEquals)) { + message = Diagnostics.A_module_cannot_have_multiple_default_exports; + messageNeedsName = false; + multipleDefaultExports = true; + } + } + } + const relatedInformation = []; + if (isTypeAliasDeclaration(node) && nodeIsMissing(node.type) && hasSyntacticModifier(node, 32 /* Export */) && symbol.flags & (2097152 /* Alias */ | 788968 /* Type */ | 1920 /* Namespace */)) { + relatedInformation.push(createDiagnosticForNode2(node, Diagnostics.Did_you_mean_0, `export type { ${unescapeLeadingUnderscores(node.name.escapedText)} }`)); + } + const declarationName = getNameOfDeclaration(node) || node; + forEach(symbol.declarations, (declaration, index) => { + const decl = getNameOfDeclaration(declaration) || declaration; + const diag3 = messageNeedsName ? createDiagnosticForNode2(decl, message, getDisplayName(declaration)) : createDiagnosticForNode2(decl, message); + file.bindDiagnostics.push( + multipleDefaultExports ? addRelatedInfo(diag3, createDiagnosticForNode2(declarationName, index === 0 ? Diagnostics.Another_export_default_is_here : Diagnostics.and_here)) : diag3 + ); + if (multipleDefaultExports) { + relatedInformation.push(createDiagnosticForNode2(decl, Diagnostics.The_first_export_default_is_here)); + } + }); + const diag2 = messageNeedsName ? createDiagnosticForNode2(declarationName, message, getDisplayName(node)) : createDiagnosticForNode2(declarationName, message); + file.bindDiagnostics.push(addRelatedInfo(diag2, ...relatedInformation)); + symbol = createSymbol(0 /* None */, name); + } + } + } + addDeclarationToSymbol(symbol, node, includes); + if (symbol.parent) { + Debug.assert(symbol.parent === parent3, "Existing symbol parent should match new one"); + } else { + symbol.parent = parent3; + } + return symbol; + } + function declareModuleMember(node, symbolFlags, symbolExcludes) { + const hasExportModifier = !!(getCombinedModifierFlags(node) & 32 /* Export */) || jsdocTreatAsExported(node); + if (symbolFlags & 2097152 /* Alias */) { + if (node.kind === 282 /* ExportSpecifier */ || node.kind === 272 /* ImportEqualsDeclaration */ && hasExportModifier) { + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + } else { + Debug.assertNode(container, canHaveLocals); + return declareSymbol( + container.locals, + /*parent*/ + void 0, + node, + symbolFlags, + symbolExcludes + ); + } + } else { + if (isJSDocTypeAlias(node)) Debug.assert(isInJSFile(node)); + if (!isAmbientModule(node) && (hasExportModifier || container.flags & 128 /* ExportContext */)) { + if (!canHaveLocals(container) || !container.locals || hasSyntacticModifier(node, 2048 /* Default */) && !getDeclarationName(node)) { + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + } + const exportKind = symbolFlags & 111551 /* Value */ ? 1048576 /* ExportValue */ : 0; + const local = declareSymbol( + container.locals, + /*parent*/ + void 0, + node, + exportKind, + symbolExcludes + ); + local.exportSymbol = declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + node.localSymbol = local; + return local; + } else { + Debug.assertNode(container, canHaveLocals); + return declareSymbol( + container.locals, + /*parent*/ + void 0, + node, + symbolFlags, + symbolExcludes + ); + } + } + } + function jsdocTreatAsExported(node) { + if (node.parent && isModuleDeclaration(node)) { + node = node.parent; + } + if (!isJSDocTypeAlias(node)) return false; + if (!isJSDocEnumTag(node) && !!node.fullName) return true; + const declName = getNameOfDeclaration(node); + if (!declName) return false; + if (isPropertyAccessEntityNameExpression(declName.parent) && isTopLevelNamespaceAssignment(declName.parent)) return true; + if (isDeclaration(declName.parent) && getCombinedModifierFlags(declName.parent) & 32 /* Export */) return true; + return false; + } + function bindContainer(node, containerFlags) { + const saveContainer = container; + const saveThisParentContainer = thisParentContainer; + const savedBlockScopeContainer = blockScopeContainer; + const savedInReturnPosition = inReturnPosition; + if (node.kind === 220 /* ArrowFunction */ && node.body.kind !== 242 /* Block */) inReturnPosition = true; + if (containerFlags & 1 /* IsContainer */) { + if (node.kind !== 220 /* ArrowFunction */) { + thisParentContainer = container; + } + container = blockScopeContainer = node; + if (containerFlags & 32 /* HasLocals */) { + container.locals = createSymbolTable(); + addToContainerChain(container); + } + } else if (containerFlags & 2 /* IsBlockScopedContainer */) { + blockScopeContainer = node; + if (containerFlags & 32 /* HasLocals */) { + blockScopeContainer.locals = void 0; + } + } + if (containerFlags & 4 /* IsControlFlowContainer */) { + const saveCurrentFlow = currentFlow; + const saveBreakTarget = currentBreakTarget; + const saveContinueTarget = currentContinueTarget; + const saveReturnTarget = currentReturnTarget; + const saveExceptionTarget = currentExceptionTarget; + const saveActiveLabelList = activeLabelList; + const saveHasExplicitReturn = hasExplicitReturn; + const isImmediatelyInvoked = containerFlags & 16 /* IsFunctionExpression */ && !hasSyntacticModifier(node, 1024 /* Async */) && !node.asteriskToken && !!getImmediatelyInvokedFunctionExpression(node) || node.kind === 176 /* ClassStaticBlockDeclaration */; + if (!isImmediatelyInvoked) { + currentFlow = createFlowNode( + 2 /* Start */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + if (containerFlags & (16 /* IsFunctionExpression */ | 128 /* IsObjectLiteralOrClassExpressionMethodOrAccessor */)) { + currentFlow.node = node; + } + } + currentReturnTarget = isImmediatelyInvoked || node.kind === 177 /* Constructor */ || isInJSFile(node) && (node.kind === 263 /* FunctionDeclaration */ || node.kind === 219 /* FunctionExpression */) ? createBranchLabel() : void 0; + currentExceptionTarget = void 0; + currentBreakTarget = void 0; + currentContinueTarget = void 0; + activeLabelList = void 0; + hasExplicitReturn = false; + bindChildren(node); + node.flags &= ~5632 /* ReachabilityAndEmitFlags */; + if (!(currentFlow.flags & 1 /* Unreachable */) && containerFlags & 8 /* IsFunctionLike */ && nodeIsPresent(node.body)) { + node.flags |= 512 /* HasImplicitReturn */; + if (hasExplicitReturn) node.flags |= 1024 /* HasExplicitReturn */; + node.endFlowNode = currentFlow; + } + if (node.kind === 308 /* SourceFile */) { + node.flags |= emitFlags; + node.endFlowNode = currentFlow; + } + if (currentReturnTarget) { + addAntecedent(currentReturnTarget, currentFlow); + currentFlow = finishFlowLabel(currentReturnTarget); + if (node.kind === 177 /* Constructor */ || node.kind === 176 /* ClassStaticBlockDeclaration */ || isInJSFile(node) && (node.kind === 263 /* FunctionDeclaration */ || node.kind === 219 /* FunctionExpression */)) { + node.returnFlowNode = currentFlow; + } + } + if (!isImmediatelyInvoked) { + currentFlow = saveCurrentFlow; + } + currentBreakTarget = saveBreakTarget; + currentContinueTarget = saveContinueTarget; + currentReturnTarget = saveReturnTarget; + currentExceptionTarget = saveExceptionTarget; + activeLabelList = saveActiveLabelList; + hasExplicitReturn = saveHasExplicitReturn; + } else if (containerFlags & 64 /* IsInterface */) { + seenThisKeyword = false; + bindChildren(node); + Debug.assertNotNode(node, isIdentifier); + node.flags = seenThisKeyword ? node.flags | 256 /* ContainsThis */ : node.flags & ~256 /* ContainsThis */; + } else { + bindChildren(node); + } + inReturnPosition = savedInReturnPosition; + container = saveContainer; + thisParentContainer = saveThisParentContainer; + blockScopeContainer = savedBlockScopeContainer; + } + function bindEachFunctionsFirst(nodes) { + bindEach(nodes, (n) => n.kind === 263 /* FunctionDeclaration */ ? bind(n) : void 0); + bindEach(nodes, (n) => n.kind !== 263 /* FunctionDeclaration */ ? bind(n) : void 0); + } + function bindEach(nodes, bindFunction = bind) { + if (nodes === void 0) { + return; + } + forEach(nodes, bindFunction); + } + function bindEachChild(node) { + forEachChild(node, bind, bindEach); + } + function bindChildren(node) { + const saveInAssignmentPattern = inAssignmentPattern; + inAssignmentPattern = false; + if (checkUnreachable(node)) { + if (canHaveFlowNode(node) && node.flowNode) { + node.flowNode = void 0; + } + bindEachChild(node); + bindJSDoc(node); + inAssignmentPattern = saveInAssignmentPattern; + return; + } + if (node.kind >= 244 /* FirstStatement */ && node.kind <= 260 /* LastStatement */ && (!options.allowUnreachableCode || node.kind === 254 /* ReturnStatement */)) { + node.flowNode = currentFlow; + } + switch (node.kind) { + case 248 /* WhileStatement */: + bindWhileStatement(node); + break; + case 247 /* DoStatement */: + bindDoStatement(node); + break; + case 249 /* ForStatement */: + bindForStatement(node); + break; + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + bindForInOrForOfStatement(node); + break; + case 246 /* IfStatement */: + bindIfStatement(node); + break; + case 254 /* ReturnStatement */: + case 258 /* ThrowStatement */: + bindReturnOrThrow(node); + break; + case 253 /* BreakStatement */: + case 252 /* ContinueStatement */: + bindBreakOrContinueStatement(node); + break; + case 259 /* TryStatement */: + bindTryStatement(node); + break; + case 256 /* SwitchStatement */: + bindSwitchStatement(node); + break; + case 270 /* CaseBlock */: + bindCaseBlock(node); + break; + case 297 /* CaseClause */: + bindCaseClause(node); + break; + case 245 /* ExpressionStatement */: + bindExpressionStatement(node); + break; + case 257 /* LabeledStatement */: + bindLabeledStatement(node); + break; + case 225 /* PrefixUnaryExpression */: + bindPrefixUnaryExpressionFlow(node); + break; + case 226 /* PostfixUnaryExpression */: + bindPostfixUnaryExpressionFlow(node); + break; + case 227 /* BinaryExpression */: + if (isDestructuringAssignment(node)) { + inAssignmentPattern = saveInAssignmentPattern; + bindDestructuringAssignmentFlow(node); + return; + } + bindBinaryExpressionFlow(node); + break; + case 221 /* DeleteExpression */: + bindDeleteExpressionFlow(node); + break; + case 228 /* ConditionalExpression */: + bindConditionalExpressionFlow(node); + break; + case 261 /* VariableDeclaration */: + bindVariableDeclarationFlow(node); + break; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + bindAccessExpressionFlow(node); + break; + case 214 /* CallExpression */: + bindCallExpressionFlow(node); + break; + case 236 /* NonNullExpression */: + bindNonNullExpressionFlow(node); + break; + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + bindJSDocTypeAlias(node); + break; + case 352 /* JSDocImportTag */: + bindJSDocImportTag(node); + break; + // In source files and blocks, bind functions first to match hoisting that occurs at runtime + case 308 /* SourceFile */: { + bindEachFunctionsFirst(node.statements); + bind(node.endOfFileToken); + break; + } + case 242 /* Block */: + case 269 /* ModuleBlock */: + bindEachFunctionsFirst(node.statements); + break; + case 209 /* BindingElement */: + bindBindingElementFlow(node); + break; + case 170 /* Parameter */: + bindParameterFlow(node); + break; + case 211 /* ObjectLiteralExpression */: + case 210 /* ArrayLiteralExpression */: + case 304 /* PropertyAssignment */: + case 231 /* SpreadElement */: + inAssignmentPattern = saveInAssignmentPattern; + // falls through + default: + bindEachChild(node); + break; + } + bindJSDoc(node); + inAssignmentPattern = saveInAssignmentPattern; + } + function isNarrowingExpression(expr) { + switch (expr.kind) { + case 80 /* Identifier */: + case 110 /* ThisKeyword */: + return true; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return containsNarrowableReference(expr); + case 214 /* CallExpression */: + return hasNarrowableArgument(expr); + case 218 /* ParenthesizedExpression */: + if (isJSDocTypeAssertion(expr)) { + return false; + } + // fallthrough + case 236 /* NonNullExpression */: + return isNarrowingExpression(expr.expression); + case 227 /* BinaryExpression */: + return isNarrowingBinaryExpression(expr); + case 225 /* PrefixUnaryExpression */: + return expr.operator === 54 /* ExclamationToken */ && isNarrowingExpression(expr.operand); + case 222 /* TypeOfExpression */: + return isNarrowingExpression(expr.expression); + } + return false; + } + function isNarrowableReference(expr) { + switch (expr.kind) { + case 80 /* Identifier */: + case 110 /* ThisKeyword */: + case 108 /* SuperKeyword */: + case 237 /* MetaProperty */: + return true; + case 212 /* PropertyAccessExpression */: + case 218 /* ParenthesizedExpression */: + case 236 /* NonNullExpression */: + return isNarrowableReference(expr.expression); + case 213 /* ElementAccessExpression */: + return (isStringOrNumericLiteralLike(expr.argumentExpression) || isEntityNameExpression(expr.argumentExpression)) && isNarrowableReference(expr.expression); + case 227 /* BinaryExpression */: + return expr.operatorToken.kind === 28 /* CommaToken */ && isNarrowableReference(expr.right) || isAssignmentOperator(expr.operatorToken.kind) && isLeftHandSideExpression(expr.left); + } + return false; + } + function containsNarrowableReference(expr) { + return isNarrowableReference(expr) || isOptionalChain(expr) && containsNarrowableReference(expr.expression); + } + function hasNarrowableArgument(expr) { + if (expr.arguments) { + for (const argument of expr.arguments) { + if (containsNarrowableReference(argument)) { + return true; + } + } + } + if (expr.expression.kind === 212 /* PropertyAccessExpression */ && containsNarrowableReference(expr.expression.expression)) { + return true; + } + return false; + } + function isNarrowingTypeofOperands(expr1, expr2) { + return isTypeOfExpression(expr1) && isNarrowableOperand(expr1.expression) && isStringLiteralLike(expr2); + } + function isNarrowingBinaryExpression(expr) { + switch (expr.operatorToken.kind) { + case 64 /* EqualsToken */: + case 76 /* BarBarEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return containsNarrowableReference(expr.left); + case 35 /* EqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + case 37 /* EqualsEqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + const left = skipParentheses(expr.left); + const right = skipParentheses(expr.right); + return isNarrowableOperand(left) || isNarrowableOperand(right) || isNarrowingTypeofOperands(right, left) || isNarrowingTypeofOperands(left, right) || (isBooleanLiteral(right) && isNarrowingExpression(left) || isBooleanLiteral(left) && isNarrowingExpression(right)); + case 104 /* InstanceOfKeyword */: + return isNarrowableOperand(expr.left); + case 103 /* InKeyword */: + return isNarrowingExpression(expr.right); + case 28 /* CommaToken */: + return isNarrowingExpression(expr.right); + } + return false; + } + function isNarrowableOperand(expr) { + switch (expr.kind) { + case 218 /* ParenthesizedExpression */: + return isNarrowableOperand(expr.expression); + case 227 /* BinaryExpression */: + switch (expr.operatorToken.kind) { + case 64 /* EqualsToken */: + return isNarrowableOperand(expr.left); + case 28 /* CommaToken */: + return isNarrowableOperand(expr.right); + } + } + return containsNarrowableReference(expr); + } + function createBranchLabel() { + return createFlowNode( + 4 /* BranchLabel */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + } + function createLoopLabel() { + return createFlowNode( + 8 /* LoopLabel */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + } + function createReduceLabel(target, antecedents, antecedent) { + return createFlowNode(1024 /* ReduceLabel */, { target, antecedents }, antecedent); + } + function setFlowNodeReferenced(flow) { + flow.flags |= flow.flags & 2048 /* Referenced */ ? 4096 /* Shared */ : 2048 /* Referenced */; + } + function addAntecedent(label, antecedent) { + if (!(antecedent.flags & 1 /* Unreachable */) && !contains(label.antecedent, antecedent)) { + (label.antecedent || (label.antecedent = [])).push(antecedent); + setFlowNodeReferenced(antecedent); + } + } + function createFlowCondition(flags, antecedent, expression) { + if (antecedent.flags & 1 /* Unreachable */) { + return antecedent; + } + if (!expression) { + return flags & 32 /* TrueCondition */ ? antecedent : unreachableFlow; + } + if ((expression.kind === 112 /* TrueKeyword */ && flags & 64 /* FalseCondition */ || expression.kind === 97 /* FalseKeyword */ && flags & 32 /* TrueCondition */) && !isExpressionOfOptionalChainRoot(expression) && !isNullishCoalesce(expression.parent)) { + return unreachableFlow; + } + if (!isNarrowingExpression(expression)) { + return antecedent; + } + setFlowNodeReferenced(antecedent); + return createFlowNode(flags, expression, antecedent); + } + function createFlowSwitchClause(antecedent, switchStatement, clauseStart, clauseEnd) { + setFlowNodeReferenced(antecedent); + return createFlowNode(128 /* SwitchClause */, { switchStatement, clauseStart, clauseEnd }, antecedent); + } + function createFlowMutation(flags, antecedent, node) { + setFlowNodeReferenced(antecedent); + hasFlowEffects = true; + const result = createFlowNode(flags, node, antecedent); + if (currentExceptionTarget) { + addAntecedent(currentExceptionTarget, result); + } + return result; + } + function createFlowCall(antecedent, node) { + setFlowNodeReferenced(antecedent); + hasFlowEffects = true; + return createFlowNode(512 /* Call */, node, antecedent); + } + function finishFlowLabel(flow) { + const antecedents = flow.antecedent; + if (!antecedents) { + return unreachableFlow; + } + if (antecedents.length === 1) { + return antecedents[0]; + } + return flow; + } + function isStatementCondition(node) { + const parent3 = node.parent; + switch (parent3.kind) { + case 246 /* IfStatement */: + case 248 /* WhileStatement */: + case 247 /* DoStatement */: + return parent3.expression === node; + case 249 /* ForStatement */: + case 228 /* ConditionalExpression */: + return parent3.condition === node; + } + return false; + } + function isLogicalExpression(node) { + while (true) { + if (node.kind === 218 /* ParenthesizedExpression */) { + node = node.expression; + } else if (node.kind === 225 /* PrefixUnaryExpression */ && node.operator === 54 /* ExclamationToken */) { + node = node.operand; + } else { + return isLogicalOrCoalescingBinaryExpression(node); + } + } + } + function isLogicalAssignmentExpression(node) { + return isLogicalOrCoalescingAssignmentExpression(skipParentheses(node)); + } + function isTopLevelLogicalExpression(node) { + while (isParenthesizedExpression(node.parent) || isPrefixUnaryExpression(node.parent) && node.parent.operator === 54 /* ExclamationToken */) { + node = node.parent; + } + return !isStatementCondition(node) && !isLogicalExpression(node.parent) && !(isOptionalChain(node.parent) && node.parent.expression === node); + } + function doWithConditionalBranches(action, value, trueTarget, falseTarget) { + const savedTrueTarget = currentTrueTarget; + const savedFalseTarget = currentFalseTarget; + currentTrueTarget = trueTarget; + currentFalseTarget = falseTarget; + action(value); + currentTrueTarget = savedTrueTarget; + currentFalseTarget = savedFalseTarget; + } + function bindCondition(node, trueTarget, falseTarget) { + doWithConditionalBranches(bind, node, trueTarget, falseTarget); + if (!node || !isLogicalAssignmentExpression(node) && !isLogicalExpression(node) && !(isOptionalChain(node) && isOutermostOptionalChain(node))) { + addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node)); + } + } + function bindIterativeStatement(node, breakTarget, continueTarget) { + const saveBreakTarget = currentBreakTarget; + const saveContinueTarget = currentContinueTarget; + currentBreakTarget = breakTarget; + currentContinueTarget = continueTarget; + bind(node); + currentBreakTarget = saveBreakTarget; + currentContinueTarget = saveContinueTarget; + } + function setContinueTarget(node, target) { + let label = activeLabelList; + while (label && node.parent.kind === 257 /* LabeledStatement */) { + label.continueTarget = target; + label = label.next; + node = node.parent; + } + return target; + } + function bindWhileStatement(node) { + const preWhileLabel = setContinueTarget(node, createLoopLabel()); + const preBodyLabel = createBranchLabel(); + const postWhileLabel = createBranchLabel(); + addAntecedent(preWhileLabel, currentFlow); + currentFlow = preWhileLabel; + bindCondition(node.expression, preBodyLabel, postWhileLabel); + currentFlow = finishFlowLabel(preBodyLabel); + bindIterativeStatement(node.statement, postWhileLabel, preWhileLabel); + addAntecedent(preWhileLabel, currentFlow); + currentFlow = finishFlowLabel(postWhileLabel); + } + function bindDoStatement(node) { + const preDoLabel = createLoopLabel(); + const preConditionLabel = setContinueTarget(node, createBranchLabel()); + const postDoLabel = createBranchLabel(); + addAntecedent(preDoLabel, currentFlow); + currentFlow = preDoLabel; + bindIterativeStatement(node.statement, postDoLabel, preConditionLabel); + addAntecedent(preConditionLabel, currentFlow); + currentFlow = finishFlowLabel(preConditionLabel); + bindCondition(node.expression, preDoLabel, postDoLabel); + currentFlow = finishFlowLabel(postDoLabel); + } + function bindForStatement(node) { + const preLoopLabel = setContinueTarget(node, createLoopLabel()); + const preBodyLabel = createBranchLabel(); + const preIncrementorLabel = createBranchLabel(); + const postLoopLabel = createBranchLabel(); + bind(node.initializer); + addAntecedent(preLoopLabel, currentFlow); + currentFlow = preLoopLabel; + bindCondition(node.condition, preBodyLabel, postLoopLabel); + currentFlow = finishFlowLabel(preBodyLabel); + bindIterativeStatement(node.statement, postLoopLabel, preIncrementorLabel); + addAntecedent(preIncrementorLabel, currentFlow); + currentFlow = finishFlowLabel(preIncrementorLabel); + bind(node.incrementor); + addAntecedent(preLoopLabel, currentFlow); + currentFlow = finishFlowLabel(postLoopLabel); + } + function bindForInOrForOfStatement(node) { + const preLoopLabel = setContinueTarget(node, createLoopLabel()); + const postLoopLabel = createBranchLabel(); + bind(node.expression); + addAntecedent(preLoopLabel, currentFlow); + currentFlow = preLoopLabel; + if (node.kind === 251 /* ForOfStatement */) { + bind(node.awaitModifier); + } + addAntecedent(postLoopLabel, currentFlow); + bind(node.initializer); + if (node.initializer.kind !== 262 /* VariableDeclarationList */) { + bindAssignmentTargetFlow(node.initializer); + } + bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel); + addAntecedent(preLoopLabel, currentFlow); + currentFlow = finishFlowLabel(postLoopLabel); + } + function bindIfStatement(node) { + const thenLabel = createBranchLabel(); + const elseLabel = createBranchLabel(); + const postIfLabel = createBranchLabel(); + bindCondition(node.expression, thenLabel, elseLabel); + currentFlow = finishFlowLabel(thenLabel); + bind(node.thenStatement); + addAntecedent(postIfLabel, currentFlow); + currentFlow = finishFlowLabel(elseLabel); + bind(node.elseStatement); + addAntecedent(postIfLabel, currentFlow); + currentFlow = finishFlowLabel(postIfLabel); + } + function bindReturnOrThrow(node) { + const savedInReturnPosition = inReturnPosition; + inReturnPosition = true; + bind(node.expression); + inReturnPosition = savedInReturnPosition; + if (node.kind === 254 /* ReturnStatement */) { + hasExplicitReturn = true; + if (currentReturnTarget) { + addAntecedent(currentReturnTarget, currentFlow); + } + } + currentFlow = unreachableFlow; + hasFlowEffects = true; + } + function findActiveLabel(name) { + for (let label = activeLabelList; label; label = label.next) { + if (label.name === name) { + return label; + } + } + return void 0; + } + function bindBreakOrContinueFlow(node, breakTarget, continueTarget) { + const flowLabel = node.kind === 253 /* BreakStatement */ ? breakTarget : continueTarget; + if (flowLabel) { + addAntecedent(flowLabel, currentFlow); + currentFlow = unreachableFlow; + hasFlowEffects = true; + } + } + function bindBreakOrContinueStatement(node) { + bind(node.label); + if (node.label) { + const activeLabel = findActiveLabel(node.label.escapedText); + if (activeLabel) { + activeLabel.referenced = true; + bindBreakOrContinueFlow(node, activeLabel.breakTarget, activeLabel.continueTarget); + } + } else { + bindBreakOrContinueFlow(node, currentBreakTarget, currentContinueTarget); + } + } + function bindTryStatement(node) { + const saveReturnTarget = currentReturnTarget; + const saveExceptionTarget = currentExceptionTarget; + const normalExitLabel = createBranchLabel(); + const returnLabel = createBranchLabel(); + let exceptionLabel = createBranchLabel(); + if (node.finallyBlock) { + currentReturnTarget = returnLabel; + } + addAntecedent(exceptionLabel, currentFlow); + currentExceptionTarget = exceptionLabel; + bind(node.tryBlock); + addAntecedent(normalExitLabel, currentFlow); + if (node.catchClause) { + currentFlow = finishFlowLabel(exceptionLabel); + exceptionLabel = createBranchLabel(); + addAntecedent(exceptionLabel, currentFlow); + currentExceptionTarget = exceptionLabel; + bind(node.catchClause); + addAntecedent(normalExitLabel, currentFlow); + } + currentReturnTarget = saveReturnTarget; + currentExceptionTarget = saveExceptionTarget; + if (node.finallyBlock) { + const finallyLabel = createBranchLabel(); + finallyLabel.antecedent = concatenate(concatenate(normalExitLabel.antecedent, exceptionLabel.antecedent), returnLabel.antecedent); + currentFlow = finallyLabel; + bind(node.finallyBlock); + if (currentFlow.flags & 1 /* Unreachable */) { + currentFlow = unreachableFlow; + } else { + if (currentReturnTarget && returnLabel.antecedent) { + addAntecedent(currentReturnTarget, createReduceLabel(finallyLabel, returnLabel.antecedent, currentFlow)); + } + if (currentExceptionTarget && exceptionLabel.antecedent) { + addAntecedent(currentExceptionTarget, createReduceLabel(finallyLabel, exceptionLabel.antecedent, currentFlow)); + } + currentFlow = normalExitLabel.antecedent ? createReduceLabel(finallyLabel, normalExitLabel.antecedent, currentFlow) : unreachableFlow; + } + } else { + currentFlow = finishFlowLabel(normalExitLabel); + } + } + function bindSwitchStatement(node) { + const postSwitchLabel = createBranchLabel(); + bind(node.expression); + const saveBreakTarget = currentBreakTarget; + const savePreSwitchCaseFlow = preSwitchCaseFlow; + currentBreakTarget = postSwitchLabel; + preSwitchCaseFlow = currentFlow; + bind(node.caseBlock); + addAntecedent(postSwitchLabel, currentFlow); + const hasDefault = forEach(node.caseBlock.clauses, (c) => c.kind === 298 /* DefaultClause */); + node.possiblyExhaustive = !hasDefault && !postSwitchLabel.antecedent; + if (!hasDefault) { + addAntecedent(postSwitchLabel, createFlowSwitchClause(preSwitchCaseFlow, node, 0, 0)); + } + currentBreakTarget = saveBreakTarget; + preSwitchCaseFlow = savePreSwitchCaseFlow; + currentFlow = finishFlowLabel(postSwitchLabel); + } + function bindCaseBlock(node) { + const clauses = node.clauses; + const isNarrowingSwitch = node.parent.expression.kind === 112 /* TrueKeyword */ || isNarrowingExpression(node.parent.expression); + let fallthroughFlow = unreachableFlow; + for (let i = 0; i < clauses.length; i++) { + const clauseStart = i; + while (!clauses[i].statements.length && i + 1 < clauses.length) { + if (fallthroughFlow === unreachableFlow) { + currentFlow = preSwitchCaseFlow; + } + bind(clauses[i]); + i++; + } + const preCaseLabel = createBranchLabel(); + addAntecedent(preCaseLabel, isNarrowingSwitch ? createFlowSwitchClause(preSwitchCaseFlow, node.parent, clauseStart, i + 1) : preSwitchCaseFlow); + addAntecedent(preCaseLabel, fallthroughFlow); + currentFlow = finishFlowLabel(preCaseLabel); + const clause = clauses[i]; + bind(clause); + fallthroughFlow = currentFlow; + if (!(currentFlow.flags & 1 /* Unreachable */) && i !== clauses.length - 1 && options.noFallthroughCasesInSwitch) { + clause.fallthroughFlowNode = currentFlow; + } + } + } + function bindCaseClause(node) { + const saveCurrentFlow = currentFlow; + currentFlow = preSwitchCaseFlow; + bind(node.expression); + currentFlow = saveCurrentFlow; + bindEach(node.statements); + } + function bindExpressionStatement(node) { + bind(node.expression); + maybeBindExpressionFlowIfCall(node.expression); + } + function maybeBindExpressionFlowIfCall(node) { + if (node.kind === 214 /* CallExpression */) { + const call = node; + if (call.expression.kind !== 108 /* SuperKeyword */ && isDottedName(call.expression)) { + currentFlow = createFlowCall(currentFlow, call); + } + } + } + function bindLabeledStatement(node) { + const postStatementLabel = createBranchLabel(); + activeLabelList = { + next: activeLabelList, + name: node.label.escapedText, + breakTarget: postStatementLabel, + continueTarget: void 0, + referenced: false + }; + bind(node.label); + bind(node.statement); + if (!activeLabelList.referenced && !options.allowUnusedLabels) { + errorOrSuggestionOnNode(unusedLabelIsError(options), node.label, Diagnostics.Unused_label); + } + activeLabelList = activeLabelList.next; + addAntecedent(postStatementLabel, currentFlow); + currentFlow = finishFlowLabel(postStatementLabel); + } + function bindDestructuringTargetFlow(node) { + if (node.kind === 227 /* BinaryExpression */ && node.operatorToken.kind === 64 /* EqualsToken */) { + bindAssignmentTargetFlow(node.left); + } else { + bindAssignmentTargetFlow(node); + } + } + function bindAssignmentTargetFlow(node) { + if (isNarrowableReference(node)) { + currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node); + } else if (node.kind === 210 /* ArrayLiteralExpression */) { + for (const e of node.elements) { + if (e.kind === 231 /* SpreadElement */) { + bindAssignmentTargetFlow(e.expression); + } else { + bindDestructuringTargetFlow(e); + } + } + } else if (node.kind === 211 /* ObjectLiteralExpression */) { + for (const p of node.properties) { + if (p.kind === 304 /* PropertyAssignment */) { + bindDestructuringTargetFlow(p.initializer); + } else if (p.kind === 305 /* ShorthandPropertyAssignment */) { + bindAssignmentTargetFlow(p.name); + } else if (p.kind === 306 /* SpreadAssignment */) { + bindAssignmentTargetFlow(p.expression); + } + } + } + } + function bindLogicalLikeExpression(node, trueTarget, falseTarget) { + const preRightLabel = createBranchLabel(); + if (node.operatorToken.kind === 56 /* AmpersandAmpersandToken */ || node.operatorToken.kind === 77 /* AmpersandAmpersandEqualsToken */) { + bindCondition(node.left, preRightLabel, falseTarget); + } else { + bindCondition(node.left, trueTarget, preRightLabel); + } + currentFlow = finishFlowLabel(preRightLabel); + bind(node.operatorToken); + if (isLogicalOrCoalescingAssignmentOperator(node.operatorToken.kind)) { + doWithConditionalBranches(bind, node.right, trueTarget, falseTarget); + bindAssignmentTargetFlow(node.left); + addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node)); + } else { + bindCondition(node.right, trueTarget, falseTarget); + } + } + function bindPrefixUnaryExpressionFlow(node) { + if (node.operator === 54 /* ExclamationToken */) { + const saveTrueTarget = currentTrueTarget; + currentTrueTarget = currentFalseTarget; + currentFalseTarget = saveTrueTarget; + bindEachChild(node); + currentFalseTarget = currentTrueTarget; + currentTrueTarget = saveTrueTarget; + } else { + bindEachChild(node); + if (node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) { + bindAssignmentTargetFlow(node.operand); + } + } + } + function bindPostfixUnaryExpressionFlow(node) { + bindEachChild(node); + if (node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) { + bindAssignmentTargetFlow(node.operand); + } + } + function bindDestructuringAssignmentFlow(node) { + if (inAssignmentPattern) { + inAssignmentPattern = false; + bind(node.operatorToken); + bind(node.right); + inAssignmentPattern = true; + bind(node.left); + } else { + inAssignmentPattern = true; + bind(node.left); + inAssignmentPattern = false; + bind(node.operatorToken); + bind(node.right); + } + bindAssignmentTargetFlow(node.left); + } + function createBindBinaryExpressionFlow() { + return createBinaryExpressionTrampoline( + onEnter, + onLeft, + onOperator, + onRight, + onExit, + /*foldState*/ + void 0 + ); + function onEnter(node, state) { + if (state) { + state.stackIndex++; + setParent(node, parent2); + const saveInStrictMode = inStrictMode; + bindWorker(node); + const saveParent = parent2; + parent2 = node; + state.skip = false; + state.inStrictModeStack[state.stackIndex] = saveInStrictMode; + state.parentStack[state.stackIndex] = saveParent; + } else { + state = { + stackIndex: 0, + skip: false, + inStrictModeStack: [void 0], + parentStack: [void 0] + }; + } + const operator = node.operatorToken.kind; + if (isLogicalOrCoalescingBinaryOperator(operator) || isLogicalOrCoalescingAssignmentOperator(operator)) { + if (isTopLevelLogicalExpression(node)) { + const postExpressionLabel = createBranchLabel(); + const saveCurrentFlow = currentFlow; + const saveHasFlowEffects = hasFlowEffects; + hasFlowEffects = false; + bindLogicalLikeExpression(node, postExpressionLabel, postExpressionLabel); + currentFlow = hasFlowEffects ? finishFlowLabel(postExpressionLabel) : saveCurrentFlow; + hasFlowEffects || (hasFlowEffects = saveHasFlowEffects); + } else { + bindLogicalLikeExpression(node, currentTrueTarget, currentFalseTarget); + } + state.skip = true; + } + return state; + } + function onLeft(left, state, node) { + if (!state.skip) { + const maybeBound = maybeBind2(left); + if (node.operatorToken.kind === 28 /* CommaToken */) { + maybeBindExpressionFlowIfCall(left); + } + return maybeBound; + } + } + function onOperator(operatorToken, state, _node) { + if (!state.skip) { + bind(operatorToken); + } + } + function onRight(right, state, node) { + if (!state.skip) { + const maybeBound = maybeBind2(right); + if (node.operatorToken.kind === 28 /* CommaToken */) { + maybeBindExpressionFlowIfCall(right); + } + return maybeBound; + } + } + function onExit(node, state) { + if (!state.skip) { + const operator = node.operatorToken.kind; + if (isAssignmentOperator(operator) && !isAssignmentTarget(node)) { + bindAssignmentTargetFlow(node.left); + if (operator === 64 /* EqualsToken */ && node.left.kind === 213 /* ElementAccessExpression */) { + const elementAccess = node.left; + if (isNarrowableOperand(elementAccess.expression)) { + currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node); + } + } + } + } + const savedInStrictMode = state.inStrictModeStack[state.stackIndex]; + const savedParent = state.parentStack[state.stackIndex]; + if (savedInStrictMode !== void 0) { + inStrictMode = savedInStrictMode; + } + if (savedParent !== void 0) { + parent2 = savedParent; + } + state.skip = false; + state.stackIndex--; + } + function maybeBind2(node) { + if (node && isBinaryExpression(node) && !isDestructuringAssignment(node)) { + return node; + } + bind(node); + } + } + function bindDeleteExpressionFlow(node) { + bindEachChild(node); + if (node.expression.kind === 212 /* PropertyAccessExpression */) { + bindAssignmentTargetFlow(node.expression); + } + } + function bindConditionalExpressionFlow(node) { + const trueLabel = createBranchLabel(); + const falseLabel = createBranchLabel(); + const postExpressionLabel = createBranchLabel(); + const saveCurrentFlow = currentFlow; + const saveHasFlowEffects = hasFlowEffects; + hasFlowEffects = false; + bindCondition(node.condition, trueLabel, falseLabel); + currentFlow = finishFlowLabel(trueLabel); + if (inReturnPosition) { + node.flowNodeWhenTrue = currentFlow; + } + bind(node.questionToken); + bind(node.whenTrue); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = finishFlowLabel(falseLabel); + if (inReturnPosition) { + node.flowNodeWhenFalse = currentFlow; + } + bind(node.colonToken); + bind(node.whenFalse); + addAntecedent(postExpressionLabel, currentFlow); + currentFlow = hasFlowEffects ? finishFlowLabel(postExpressionLabel) : saveCurrentFlow; + hasFlowEffects || (hasFlowEffects = saveHasFlowEffects); + } + function bindInitializedVariableFlow(node) { + const name = !isOmittedExpression(node) ? node.name : void 0; + if (isBindingPattern(name)) { + for (const child of name.elements) { + bindInitializedVariableFlow(child); + } + } else { + currentFlow = createFlowMutation(16 /* Assignment */, currentFlow, node); + } + } + function bindVariableDeclarationFlow(node) { + bindEachChild(node); + if (node.initializer || isForInOrOfStatement(node.parent.parent)) { + bindInitializedVariableFlow(node); + } + } + function bindBindingElementFlow(node) { + bind(node.dotDotDotToken); + bind(node.propertyName); + bindInitializer(node.initializer); + bind(node.name); + } + function bindParameterFlow(node) { + bindEach(node.modifiers); + bind(node.dotDotDotToken); + bind(node.questionToken); + bind(node.type); + bindInitializer(node.initializer); + bind(node.name); + } + function bindInitializer(node) { + if (!node) { + return; + } + const entryFlow = currentFlow; + bind(node); + if (entryFlow === unreachableFlow || entryFlow === currentFlow) { + return; + } + const exitFlow = createBranchLabel(); + addAntecedent(exitFlow, entryFlow); + addAntecedent(exitFlow, currentFlow); + currentFlow = finishFlowLabel(exitFlow); + } + function bindJSDocTypeAlias(node) { + bind(node.tagName); + if (node.kind !== 341 /* JSDocEnumTag */ && node.fullName) { + setParent(node.fullName, node); + setParentRecursive( + node.fullName, + /*incremental*/ + false + ); + } + if (typeof node.comment !== "string") { + bindEach(node.comment); + } + } + function bindJSDocClassTag(node) { + bindEachChild(node); + const host = getHostSignatureFromJSDoc(node); + if (host && host.kind !== 175 /* MethodDeclaration */) { + addDeclarationToSymbol(host.symbol, host, 32 /* Class */); + } + } + function bindJSDocImportTag(node) { + bind(node.tagName); + bind(node.moduleSpecifier); + bind(node.attributes); + if (typeof node.comment !== "string") { + bindEach(node.comment); + } + } + function bindOptionalExpression(node, trueTarget, falseTarget) { + doWithConditionalBranches(bind, node, trueTarget, falseTarget); + if (!isOptionalChain(node) || isOutermostOptionalChain(node)) { + addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node)); + } + } + function bindOptionalChainRest(node) { + switch (node.kind) { + case 212 /* PropertyAccessExpression */: + bind(node.questionDotToken); + bind(node.name); + break; + case 213 /* ElementAccessExpression */: + bind(node.questionDotToken); + bind(node.argumentExpression); + break; + case 214 /* CallExpression */: + bind(node.questionDotToken); + bindEach(node.typeArguments); + bindEach(node.arguments); + break; + } + } + function bindOptionalChain(node, trueTarget, falseTarget) { + const preChainLabel = isOptionalChainRoot(node) ? createBranchLabel() : void 0; + bindOptionalExpression(node.expression, preChainLabel || trueTarget, falseTarget); + if (preChainLabel) { + currentFlow = finishFlowLabel(preChainLabel); + } + doWithConditionalBranches(bindOptionalChainRest, node, trueTarget, falseTarget); + if (isOutermostOptionalChain(node)) { + addAntecedent(trueTarget, createFlowCondition(32 /* TrueCondition */, currentFlow, node)); + addAntecedent(falseTarget, createFlowCondition(64 /* FalseCondition */, currentFlow, node)); + } + } + function bindOptionalChainFlow(node) { + if (isTopLevelLogicalExpression(node)) { + const postExpressionLabel = createBranchLabel(); + const saveCurrentFlow = currentFlow; + const saveHasFlowEffects = hasFlowEffects; + bindOptionalChain(node, postExpressionLabel, postExpressionLabel); + currentFlow = hasFlowEffects ? finishFlowLabel(postExpressionLabel) : saveCurrentFlow; + hasFlowEffects || (hasFlowEffects = saveHasFlowEffects); + } else { + bindOptionalChain(node, currentTrueTarget, currentFalseTarget); + } + } + function bindNonNullExpressionFlow(node) { + if (isOptionalChain(node)) { + bindOptionalChainFlow(node); + } else { + bindEachChild(node); + } + } + function bindAccessExpressionFlow(node) { + if (isOptionalChain(node)) { + bindOptionalChainFlow(node); + } else { + bindEachChild(node); + } + } + function bindCallExpressionFlow(node) { + if (isOptionalChain(node)) { + bindOptionalChainFlow(node); + } else { + const expr = skipParentheses(node.expression); + if (expr.kind === 219 /* FunctionExpression */ || expr.kind === 220 /* ArrowFunction */) { + bindEach(node.typeArguments); + bindEach(node.arguments); + bind(node.expression); + } else { + bindEachChild(node); + if (node.expression.kind === 108 /* SuperKeyword */) { + currentFlow = createFlowCall(currentFlow, node); + } + } + } + if (node.expression.kind === 212 /* PropertyAccessExpression */) { + const propertyAccess = node.expression; + if (isIdentifier(propertyAccess.name) && isNarrowableOperand(propertyAccess.expression) && isPushOrUnshiftIdentifier(propertyAccess.name)) { + currentFlow = createFlowMutation(256 /* ArrayMutation */, currentFlow, node); + } + } + } + function addToContainerChain(next) { + if (lastContainer) { + lastContainer.nextContainer = next; + } + lastContainer = next; + } + function declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes) { + switch (container.kind) { + // Modules, source files, and classes need specialized handling for how their + // members are declared (for example, a member of a class will go into a specific + // symbol table depending on if it is static or not). We defer to specialized + // handlers to take care of declaring these child members. + case 268 /* ModuleDeclaration */: + return declareModuleMember(node, symbolFlags, symbolExcludes); + case 308 /* SourceFile */: + return declareSourceFileMember(node, symbolFlags, symbolExcludes); + case 232 /* ClassExpression */: + case 264 /* ClassDeclaration */: + return declareClassMember(node, symbolFlags, symbolExcludes); + case 267 /* EnumDeclaration */: + return declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes); + case 188 /* TypeLiteral */: + case 323 /* JSDocTypeLiteral */: + case 211 /* ObjectLiteralExpression */: + case 265 /* InterfaceDeclaration */: + case 293 /* JsxAttributes */: + return declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 324 /* JSDocSignature */: + case 182 /* IndexSignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 318 /* JSDocFunctionType */: + case 176 /* ClassStaticBlockDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 201 /* MappedType */: + if (container.locals) Debug.assertNode(container, canHaveLocals); + return declareSymbol( + container.locals, + /*parent*/ + void 0, + node, + symbolFlags, + symbolExcludes + ); + } + } + function declareClassMember(node, symbolFlags, symbolExcludes) { + return isStatic(node) ? declareSymbol(container.symbol.exports, container.symbol, node, symbolFlags, symbolExcludes) : declareSymbol(container.symbol.members, container.symbol, node, symbolFlags, symbolExcludes); + } + function declareSourceFileMember(node, symbolFlags, symbolExcludes) { + return isExternalModule(file) ? declareModuleMember(node, symbolFlags, symbolExcludes) : declareSymbol( + file.locals, + /*parent*/ + void 0, + node, + symbolFlags, + symbolExcludes + ); + } + function hasExportDeclarations(node) { + const body = isSourceFile(node) ? node : tryCast(node.body, isModuleBlock); + return !!body && body.statements.some((s) => isExportDeclaration(s) || isExportAssignment(s)); + } + function setExportContextFlag(node) { + if (node.flags & 33554432 /* Ambient */ && !hasExportDeclarations(node)) { + node.flags |= 128 /* ExportContext */; + } else { + node.flags &= ~128 /* ExportContext */; + } + } + function bindModuleDeclaration(node) { + setExportContextFlag(node); + if (isAmbientModule(node)) { + if (hasSyntacticModifier(node, 32 /* Export */)) { + errorOnFirstToken(node, Diagnostics.export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always_visible); + } + if (isModuleAugmentationExternal(node)) { + declareModuleSymbol(node); + } else { + let pattern; + if (node.name.kind === 11 /* StringLiteral */) { + const { text } = node.name; + pattern = tryParsePattern(text); + if (pattern === void 0) { + errorOnFirstToken(node.name, Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, text); + } + } + const symbol = declareSymbolAndAddToSymbolTable(node, 512 /* ValueModule */, 110735 /* ValueModuleExcludes */); + file.patternAmbientModules = append(file.patternAmbientModules, pattern && !isString(pattern) ? { pattern, symbol } : void 0); + } + } else { + const state = declareModuleSymbol(node); + if (state !== 0 /* NonInstantiated */) { + const { symbol } = node; + symbol.constEnumOnlyModule = !(symbol.flags & (16 /* Function */ | 32 /* Class */ | 256 /* RegularEnum */)) && state === 2 /* ConstEnumOnly */ && symbol.constEnumOnlyModule !== false; + } + } + } + function declareModuleSymbol(node) { + const state = getModuleInstanceState(node); + const instantiated = state !== 0 /* NonInstantiated */; + declareSymbolAndAddToSymbolTable( + node, + instantiated ? 512 /* ValueModule */ : 1024 /* NamespaceModule */, + instantiated ? 110735 /* ValueModuleExcludes */ : 0 /* NamespaceModuleExcludes */ + ); + return state; + } + function bindFunctionOrConstructorType(node) { + const symbol = createSymbol(131072 /* Signature */, getDeclarationName(node)); + addDeclarationToSymbol(symbol, node, 131072 /* Signature */); + const typeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */); + addDeclarationToSymbol(typeLiteralSymbol, node, 2048 /* TypeLiteral */); + typeLiteralSymbol.members = createSymbolTable(); + typeLiteralSymbol.members.set(symbol.escapedName, symbol); + } + function bindObjectLiteralExpression(node) { + return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__object" /* Object */); + } + function bindJsxAttributes(node) { + return bindAnonymousDeclaration(node, 4096 /* ObjectLiteral */, "__jsxAttributes" /* JSXAttributes */); + } + function bindJsxAttribute(node, symbolFlags, symbolExcludes) { + return declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); + } + function bindAnonymousDeclaration(node, symbolFlags, name) { + const symbol = createSymbol(symbolFlags, name); + if (symbolFlags & (8 /* EnumMember */ | 106500 /* ClassMember */)) { + symbol.parent = container.symbol; + } + addDeclarationToSymbol(symbol, node, symbolFlags); + return symbol; + } + function bindBlockScopedDeclaration(node, symbolFlags, symbolExcludes) { + switch (blockScopeContainer.kind) { + case 268 /* ModuleDeclaration */: + declareModuleMember(node, symbolFlags, symbolExcludes); + break; + case 308 /* SourceFile */: + if (isExternalOrCommonJsModule(container)) { + declareModuleMember(node, symbolFlags, symbolExcludes); + break; + } + // falls through + default: + Debug.assertNode(blockScopeContainer, canHaveLocals); + if (!blockScopeContainer.locals) { + blockScopeContainer.locals = createSymbolTable(); + addToContainerChain(blockScopeContainer); + } + declareSymbol( + blockScopeContainer.locals, + /*parent*/ + void 0, + node, + symbolFlags, + symbolExcludes + ); + } + } + function delayedBindJSDocTypedefTag() { + if (!delayedTypeAliases) { + return; + } + const saveContainer = container; + const saveLastContainer = lastContainer; + const saveBlockScopeContainer = blockScopeContainer; + const saveParent = parent2; + const saveCurrentFlow = currentFlow; + for (const typeAlias of delayedTypeAliases) { + const host = typeAlias.parent.parent; + container = getEnclosingContainer(host) || file; + blockScopeContainer = getEnclosingBlockScopeContainer(host) || file; + currentFlow = createFlowNode( + 2 /* Start */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + parent2 = typeAlias; + bind(typeAlias.typeExpression); + const declName = getNameOfDeclaration(typeAlias); + if ((isJSDocEnumTag(typeAlias) || !typeAlias.fullName) && declName && isPropertyAccessEntityNameExpression(declName.parent)) { + const isTopLevel = isTopLevelNamespaceAssignment(declName.parent); + if (isTopLevel) { + bindPotentiallyMissingNamespaces( + file.symbol, + declName.parent, + isTopLevel, + !!findAncestor(declName, (d) => isPropertyAccessExpression(d) && d.name.escapedText === "prototype"), + /*containerIsClass*/ + false + ); + const oldContainer = container; + switch (getAssignmentDeclarationPropertyAccessKind(declName.parent)) { + case 1 /* ExportsProperty */: + case 2 /* ModuleExports */: + if (!isExternalOrCommonJsModule(file)) { + container = void 0; + } else { + container = file; + } + break; + case 4 /* ThisProperty */: + container = declName.parent.expression; + break; + case 3 /* PrototypeProperty */: + container = declName.parent.expression.name; + break; + case 5 /* Property */: + container = isExportsOrModuleExportsOrAlias(file, declName.parent.expression) ? file : isPropertyAccessExpression(declName.parent.expression) ? declName.parent.expression.name : declName.parent.expression; + break; + case 0 /* None */: + return Debug.fail("Shouldn't have detected typedef or enum on non-assignment declaration"); + } + if (container) { + declareModuleMember(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */); + } + container = oldContainer; + } + } else if (isJSDocEnumTag(typeAlias) || !typeAlias.fullName || typeAlias.fullName.kind === 80 /* Identifier */) { + parent2 = typeAlias.parent; + bindBlockScopedDeclaration(typeAlias, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */); + } else { + bind(typeAlias.fullName); + } + } + container = saveContainer; + lastContainer = saveLastContainer; + blockScopeContainer = saveBlockScopeContainer; + parent2 = saveParent; + currentFlow = saveCurrentFlow; + } + function bindJSDocImports() { + if (jsDocImports === void 0) { + return; + } + const saveContainer = container; + const saveLastContainer = lastContainer; + const saveBlockScopeContainer = blockScopeContainer; + const saveParent = parent2; + const saveCurrentFlow = currentFlow; + for (const jsDocImportTag of jsDocImports) { + const host = getJSDocHost(jsDocImportTag); + const enclosingContainer = host ? getEnclosingContainer(host) : void 0; + const enclosingBlockScopeContainer = host ? getEnclosingBlockScopeContainer(host) : void 0; + container = enclosingContainer || file; + blockScopeContainer = enclosingBlockScopeContainer || file; + currentFlow = createFlowNode( + 2 /* Start */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + parent2 = jsDocImportTag; + bind(jsDocImportTag.importClause); + } + container = saveContainer; + lastContainer = saveLastContainer; + blockScopeContainer = saveBlockScopeContainer; + parent2 = saveParent; + currentFlow = saveCurrentFlow; + } + function checkContextualIdentifier(node) { + if (!file.parseDiagnostics.length && !(node.flags & 33554432 /* Ambient */) && !(node.flags & 16777216 /* JSDoc */) && !isIdentifierName(node)) { + const originalKeywordKind = identifierToKeywordKind(node); + if (originalKeywordKind === void 0) { + return; + } + if (inStrictMode && originalKeywordKind >= 119 /* FirstFutureReservedWord */ && originalKeywordKind <= 127 /* LastFutureReservedWord */) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, getStrictModeIdentifierMessage(node), declarationNameToString(node))); + } else if (originalKeywordKind === 135 /* AwaitKeyword */) { + if (isExternalModule(file) && isInTopLevelContext(node)) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module, declarationNameToString(node))); + } else if (node.flags & 65536 /* AwaitContext */) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, declarationNameToString(node))); + } + } else if (originalKeywordKind === 127 /* YieldKeyword */ && node.flags & 16384 /* YieldContext */) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here, declarationNameToString(node))); + } + } + } + function getStrictModeIdentifierMessage(node) { + if (getContainingClass(node)) { + return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_strict_mode; + } + if (file.externalModuleIndicator) { + return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode; + } + return Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode; + } + function checkPrivateIdentifier(node) { + if (node.escapedText === "#constructor") { + if (!file.parseDiagnostics.length) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.constructor_is_a_reserved_word, declarationNameToString(node))); + } + } + } + function checkStrictModeBinaryExpression(node) { + if (inStrictMode && isLeftHandSideExpression(node.left) && isAssignmentOperator(node.operatorToken.kind)) { + checkStrictModeEvalOrArguments(node, node.left); + } + } + function checkStrictModeCatchClause(node) { + if (inStrictMode && node.variableDeclaration) { + checkStrictModeEvalOrArguments(node, node.variableDeclaration.name); + } + } + function checkStrictModeDeleteExpression(node) { + if (inStrictMode && node.expression.kind === 80 /* Identifier */) { + const span = getErrorSpanForNode(file, node.expression); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode)); + } + } + function isEvalOrArgumentsIdentifier(node) { + return isIdentifier(node) && (node.escapedText === "eval" || node.escapedText === "arguments"); + } + function checkStrictModeEvalOrArguments(contextNode, name) { + if (name && name.kind === 80 /* Identifier */) { + const identifier = name; + if (isEvalOrArgumentsIdentifier(identifier)) { + const span = getErrorSpanForNode(file, name); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, getStrictModeEvalOrArgumentsMessage(contextNode), idText(identifier))); + } + } + } + function getStrictModeEvalOrArgumentsMessage(node) { + if (getContainingClass(node)) { + return Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode; + } + if (file.externalModuleIndicator) { + return Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode; + } + return Diagnostics.Invalid_use_of_0_in_strict_mode; + } + function checkStrictModeFunctionName(node) { + if (inStrictMode && !(node.flags & 33554432 /* Ambient */)) { + checkStrictModeEvalOrArguments(node, node.name); + } + } + function getStrictModeBlockScopeFunctionDeclarationMessage(node) { + if (getContainingClass(node)) { + return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definitions_are_automatically_in_strict_mode; + } + if (file.externalModuleIndicator) { + return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_automatically_in_strict_mode; + } + return Diagnostics.Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5; + } + function checkStrictModeFunctionDeclaration(node) { + if (languageVersion < 2 /* ES2015 */) { + if (blockScopeContainer.kind !== 308 /* SourceFile */ && blockScopeContainer.kind !== 268 /* ModuleDeclaration */ && !isFunctionLikeOrClassStaticBlockDeclaration(blockScopeContainer)) { + const errorSpan = getErrorSpanForNode(file, node); + file.bindDiagnostics.push(createFileDiagnostic(file, errorSpan.start, errorSpan.length, getStrictModeBlockScopeFunctionDeclarationMessage(node))); + } + } + } + function checkStrictModePostfixUnaryExpression(node) { + if (inStrictMode) { + checkStrictModeEvalOrArguments(node, node.operand); + } + } + function checkStrictModePrefixUnaryExpression(node) { + if (inStrictMode) { + if (node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) { + checkStrictModeEvalOrArguments(node, node.operand); + } + } + } + function checkStrictModeWithStatement(node) { + if (inStrictMode) { + errorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_strict_mode); + } + } + function checkStrictModeLabeledStatement(node) { + if (inStrictMode && getEmitScriptTarget(options) >= 2 /* ES2015 */) { + if (isDeclarationStatement(node.statement) || isVariableStatement(node.statement)) { + errorOnFirstToken(node.label, Diagnostics.A_label_is_not_allowed_here); + } + } + } + function errorOnFirstToken(node, message, ...args) { + const span = getSpanOfTokenAtPosition(file, node.pos); + file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, ...args)); + } + function errorOrSuggestionOnNode(isError, node, message) { + errorOrSuggestionOnRange(isError, node, node, message); + } + function errorOrSuggestionOnRange(isError, startNode2, endNode2, message) { + addErrorOrSuggestionDiagnostic(isError, { pos: getTokenPosOfNode(startNode2, file), end: endNode2.end }, message); + } + function addErrorOrSuggestionDiagnostic(isError, range, message) { + const diag2 = createFileDiagnostic(file, range.pos, range.end - range.pos, message); + if (isError) { + file.bindDiagnostics.push(diag2); + } else { + file.bindSuggestionDiagnostics = append(file.bindSuggestionDiagnostics, { ...diag2, category: 2 /* Suggestion */ }); + } + } + function bind(node) { + if (!node) { + return; + } + setParent(node, parent2); + if (tracing) node.tracingPath = file.path; + const saveInStrictMode = inStrictMode; + bindWorker(node); + if (node.kind > 166 /* LastToken */) { + const saveParent = parent2; + parent2 = node; + const containerFlags = getContainerFlags(node); + if (containerFlags === 0 /* None */) { + bindChildren(node); + } else { + bindContainer(node, containerFlags); + } + parent2 = saveParent; + } else { + const saveParent = parent2; + if (node.kind === 1 /* EndOfFileToken */) parent2 = node; + bindJSDoc(node); + parent2 = saveParent; + } + inStrictMode = saveInStrictMode; + } + function bindJSDoc(node) { + if (hasJSDocNodes(node)) { + if (isInJSFile(node)) { + for (const j of node.jsDoc) { + bind(j); + } + } else { + for (const j of node.jsDoc) { + setParent(j, node); + setParentRecursive( + j, + /*incremental*/ + false + ); + } + } + } + } + function updateStrictModeStatementList(statements) { + if (!inStrictMode) { + for (const statement of statements) { + if (!isPrologueDirective(statement)) { + return; + } + if (isUseStrictPrologueDirective(statement)) { + inStrictMode = true; + return; + } + } + } + } + function isUseStrictPrologueDirective(node) { + const nodeText2 = getSourceTextOfNodeFromSourceFile(file, node.expression); + return nodeText2 === '"use strict"' || nodeText2 === "'use strict'"; + } + function bindWorker(node) { + switch (node.kind) { + /* Strict mode checks */ + case 80 /* Identifier */: + if (node.flags & 4096 /* IdentifierIsInJSDocNamespace */) { + let parentNode = node.parent; + while (parentNode && !isJSDocTypeAlias(parentNode)) { + parentNode = parentNode.parent; + } + bindBlockScopedDeclaration(parentNode, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */); + break; + } + // falls through + case 110 /* ThisKeyword */: + if (currentFlow && (isExpression(node) || parent2.kind === 305 /* ShorthandPropertyAssignment */)) { + node.flowNode = currentFlow; + } + return checkContextualIdentifier(node); + case 167 /* QualifiedName */: + if (currentFlow && isPartOfTypeQuery(node)) { + node.flowNode = currentFlow; + } + break; + case 237 /* MetaProperty */: + case 108 /* SuperKeyword */: + node.flowNode = currentFlow; + break; + case 81 /* PrivateIdentifier */: + return checkPrivateIdentifier(node); + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + const expr = node; + if (currentFlow && isNarrowableReference(expr)) { + expr.flowNode = currentFlow; + } + if (isSpecialPropertyDeclaration(expr)) { + bindSpecialPropertyDeclaration(expr); + } + if (isInJSFile(expr) && file.commonJsModuleIndicator && isModuleExportsAccessExpression(expr) && !lookupSymbolForName(blockScopeContainer, "module")) { + declareSymbol( + file.locals, + /*parent*/ + void 0, + expr.expression, + 1 /* FunctionScopedVariable */ | 134217728 /* ModuleExports */, + 111550 /* FunctionScopedVariableExcludes */ + ); + } + break; + case 227 /* BinaryExpression */: + const specialKind = getAssignmentDeclarationKind(node); + switch (specialKind) { + case 1 /* ExportsProperty */: + bindExportsPropertyAssignment(node); + break; + case 2 /* ModuleExports */: + bindModuleExportsAssignment(node); + break; + case 3 /* PrototypeProperty */: + bindPrototypePropertyAssignment(node.left, node); + break; + case 6 /* Prototype */: + bindPrototypeAssignment(node); + break; + case 4 /* ThisProperty */: + bindThisPropertyAssignment(node); + break; + case 5 /* Property */: + const expression = node.left.expression; + if (isInJSFile(node) && isIdentifier(expression)) { + const symbol = lookupSymbolForName(blockScopeContainer, expression.escapedText); + if (isThisInitializedDeclaration(symbol == null ? void 0 : symbol.valueDeclaration)) { + bindThisPropertyAssignment(node); + break; + } + } + bindSpecialPropertyAssignment(node); + break; + case 0 /* None */: + break; + default: + Debug.fail("Unknown binary expression special property assignment kind"); + } + return checkStrictModeBinaryExpression(node); + case 300 /* CatchClause */: + return checkStrictModeCatchClause(node); + case 221 /* DeleteExpression */: + return checkStrictModeDeleteExpression(node); + case 226 /* PostfixUnaryExpression */: + return checkStrictModePostfixUnaryExpression(node); + case 225 /* PrefixUnaryExpression */: + return checkStrictModePrefixUnaryExpression(node); + case 255 /* WithStatement */: + return checkStrictModeWithStatement(node); + case 257 /* LabeledStatement */: + return checkStrictModeLabeledStatement(node); + case 198 /* ThisType */: + seenThisKeyword = true; + return; + case 183 /* TypePredicate */: + break; + // Binding the children will handle everything + case 169 /* TypeParameter */: + return bindTypeParameter(node); + case 170 /* Parameter */: + return bindParameter(node); + case 261 /* VariableDeclaration */: + return bindVariableDeclarationOrBindingElement(node); + case 209 /* BindingElement */: + node.flowNode = currentFlow; + return bindVariableDeclarationOrBindingElement(node); + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return bindPropertyWorker(node); + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + return bindPropertyOrMethodOrAccessor(node, 4 /* Property */, 0 /* PropertyExcludes */); + case 307 /* EnumMember */: + return bindPropertyOrMethodOrAccessor(node, 8 /* EnumMember */, 900095 /* EnumMemberExcludes */); + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + return declareSymbolAndAddToSymbolTable(node, 131072 /* Signature */, 0 /* None */); + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + return bindPropertyOrMethodOrAccessor(node, 8192 /* Method */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), isObjectLiteralMethod(node) ? 0 /* PropertyExcludes */ : 103359 /* MethodExcludes */); + case 263 /* FunctionDeclaration */: + return bindFunctionDeclaration(node); + case 177 /* Constructor */: + return declareSymbolAndAddToSymbolTable( + node, + 16384 /* Constructor */, + /*symbolExcludes:*/ + 0 /* None */ + ); + case 178 /* GetAccessor */: + return bindPropertyOrMethodOrAccessor(node, 32768 /* GetAccessor */, 46015 /* GetAccessorExcludes */); + case 179 /* SetAccessor */: + return bindPropertyOrMethodOrAccessor(node, 65536 /* SetAccessor */, 78783 /* SetAccessorExcludes */); + case 185 /* FunctionType */: + case 318 /* JSDocFunctionType */: + case 324 /* JSDocSignature */: + case 186 /* ConstructorType */: + return bindFunctionOrConstructorType(node); + case 188 /* TypeLiteral */: + case 323 /* JSDocTypeLiteral */: + case 201 /* MappedType */: + return bindAnonymousTypeWorker(node); + case 333 /* JSDocClassTag */: + return bindJSDocClassTag(node); + case 211 /* ObjectLiteralExpression */: + return bindObjectLiteralExpression(node); + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return bindFunctionExpression(node); + case 214 /* CallExpression */: + const assignmentKind = getAssignmentDeclarationKind(node); + switch (assignmentKind) { + case 7 /* ObjectDefinePropertyValue */: + return bindObjectDefinePropertyAssignment(node); + case 8 /* ObjectDefinePropertyExports */: + return bindObjectDefinePropertyExport(node); + case 9 /* ObjectDefinePrototypeProperty */: + return bindObjectDefinePrototypeProperty(node); + case 0 /* None */: + break; + // Nothing to do + default: + return Debug.fail("Unknown call expression assignment declaration kind"); + } + if (isInJSFile(node)) { + bindCallExpression(node); + } + break; + // Members of classes, interfaces, and modules + case 232 /* ClassExpression */: + case 264 /* ClassDeclaration */: + inStrictMode = true; + return bindClassLikeDeclaration(node); + case 265 /* InterfaceDeclaration */: + return bindBlockScopedDeclaration(node, 64 /* Interface */, 788872 /* InterfaceExcludes */); + case 266 /* TypeAliasDeclaration */: + return bindBlockScopedDeclaration(node, 524288 /* TypeAlias */, 788968 /* TypeAliasExcludes */); + case 267 /* EnumDeclaration */: + return bindEnumDeclaration(node); + case 268 /* ModuleDeclaration */: + return bindModuleDeclaration(node); + // Jsx-attributes + case 293 /* JsxAttributes */: + return bindJsxAttributes(node); + case 292 /* JsxAttribute */: + return bindJsxAttribute(node, 4 /* Property */, 0 /* PropertyExcludes */); + // Imports and exports + case 272 /* ImportEqualsDeclaration */: + case 275 /* NamespaceImport */: + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: + return declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + case 271 /* NamespaceExportDeclaration */: + return bindNamespaceExportDeclaration(node); + case 274 /* ImportClause */: + return bindImportClause(node); + case 279 /* ExportDeclaration */: + return bindExportDeclaration(node); + case 278 /* ExportAssignment */: + return bindExportAssignment(node); + case 308 /* SourceFile */: + updateStrictModeStatementList(node.statements); + return bindSourceFileIfExternalModule(); + case 242 /* Block */: + if (!isFunctionLikeOrClassStaticBlockDeclaration(node.parent)) { + return; + } + // falls through + case 269 /* ModuleBlock */: + return updateStrictModeStatementList(node.statements); + case 342 /* JSDocParameterTag */: + if (node.parent.kind === 324 /* JSDocSignature */) { + return bindParameter(node); + } + if (node.parent.kind !== 323 /* JSDocTypeLiteral */) { + break; + } + // falls through + case 349 /* JSDocPropertyTag */: + const propTag = node; + const flags = propTag.isBracketed || propTag.typeExpression && propTag.typeExpression.type.kind === 317 /* JSDocOptionalType */ ? 4 /* Property */ | 16777216 /* Optional */ : 4 /* Property */; + return declareSymbolAndAddToSymbolTable(propTag, flags, 0 /* PropertyExcludes */); + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + return (delayedTypeAliases || (delayedTypeAliases = [])).push(node); + case 340 /* JSDocOverloadTag */: + return bind(node.typeExpression); + case 352 /* JSDocImportTag */: + return (jsDocImports || (jsDocImports = [])).push(node); + } + } + function bindPropertyWorker(node) { + const isAutoAccessor = isAutoAccessorPropertyDeclaration(node); + const includes = isAutoAccessor ? 98304 /* Accessor */ : 4 /* Property */; + const excludes = isAutoAccessor ? 13247 /* AccessorExcludes */ : 0 /* PropertyExcludes */; + return bindPropertyOrMethodOrAccessor(node, includes | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), excludes); + } + function bindAnonymousTypeWorker(node) { + return bindAnonymousDeclaration(node, 2048 /* TypeLiteral */, "__type" /* Type */); + } + function bindSourceFileIfExternalModule() { + setExportContextFlag(file); + if (isExternalModule(file)) { + bindSourceFileAsExternalModule(); + } else if (isJsonSourceFile(file)) { + bindSourceFileAsExternalModule(); + const originalSymbol = file.symbol; + declareSymbol(file.symbol.exports, file.symbol, file, 4 /* Property */, -1 /* All */); + file.symbol = originalSymbol; + } + } + function bindSourceFileAsExternalModule() { + bindAnonymousDeclaration(file, 512 /* ValueModule */, `"${removeFileExtension(file.fileName)}"`); + } + function bindExportAssignment(node) { + if (!container.symbol || !container.symbol.exports) { + bindAnonymousDeclaration(node, 111551 /* Value */, getDeclarationName(node)); + } else { + const flags = exportAssignmentIsAlias(node) ? 2097152 /* Alias */ : 4 /* Property */; + const symbol = declareSymbol(container.symbol.exports, container.symbol, node, flags, -1 /* All */); + if (node.isExportEquals) { + setValueDeclaration(symbol, node); + } + } + } + function bindNamespaceExportDeclaration(node) { + if (some(node.modifiers)) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, Diagnostics.Modifiers_cannot_appear_here)); + } + const diag2 = !isSourceFile(node.parent) ? Diagnostics.Global_module_exports_may_only_appear_at_top_level : !isExternalModule(node.parent) ? Diagnostics.Global_module_exports_may_only_appear_in_module_files : !node.parent.isDeclarationFile ? Diagnostics.Global_module_exports_may_only_appear_in_declaration_files : void 0; + if (diag2) { + file.bindDiagnostics.push(createDiagnosticForNode2(node, diag2)); + } else { + file.symbol.globalExports = file.symbol.globalExports || createSymbolTable(); + declareSymbol(file.symbol.globalExports, file.symbol, node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + } + } + function bindExportDeclaration(node) { + if (!container.symbol || !container.symbol.exports) { + bindAnonymousDeclaration(node, 8388608 /* ExportStar */, getDeclarationName(node)); + } else if (!node.exportClause) { + declareSymbol(container.symbol.exports, container.symbol, node, 8388608 /* ExportStar */, 0 /* None */); + } else if (isNamespaceExport(node.exportClause)) { + setParent(node.exportClause, node); + declareSymbol(container.symbol.exports, container.symbol, node.exportClause, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + } + } + function bindImportClause(node) { + if (node.name) { + declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + } + } + function setCommonJsModuleIndicator(node) { + if (file.externalModuleIndicator && file.externalModuleIndicator !== true) { + return false; + } + if (!file.commonJsModuleIndicator) { + file.commonJsModuleIndicator = node; + if (!file.externalModuleIndicator) { + bindSourceFileAsExternalModule(); + } + } + return true; + } + function bindObjectDefinePropertyExport(node) { + if (!setCommonJsModuleIndicator(node)) { + return; + } + const symbol = forEachIdentifierInEntityName( + node.arguments[0], + /*parent*/ + void 0, + (id, symbol2) => { + if (symbol2) { + addDeclarationToSymbol(symbol2, id, 1536 /* Module */ | 67108864 /* Assignment */); + } + return symbol2; + } + ); + if (symbol) { + const flags = 4 /* Property */ | 1048576 /* ExportValue */; + declareSymbol(symbol.exports, symbol, node, flags, 0 /* None */); + } + } + function bindExportsPropertyAssignment(node) { + if (!setCommonJsModuleIndicator(node)) { + return; + } + const symbol = forEachIdentifierInEntityName( + node.left.expression, + /*parent*/ + void 0, + (id, symbol2) => { + if (symbol2) { + addDeclarationToSymbol(symbol2, id, 1536 /* Module */ | 67108864 /* Assignment */); + } + return symbol2; + } + ); + if (symbol) { + const isAlias = isAliasableExpression(node.right) && (isExportsIdentifier(node.left.expression) || isModuleExportsAccessExpression(node.left.expression)); + const flags = isAlias ? 2097152 /* Alias */ : 4 /* Property */ | 1048576 /* ExportValue */; + setParent(node.left, node); + declareSymbol(symbol.exports, symbol, node.left, flags, 0 /* None */); + } + } + function bindModuleExportsAssignment(node) { + if (!setCommonJsModuleIndicator(node)) { + return; + } + const assignedExpression = getRightMostAssignedExpression(node.right); + if (isEmptyObjectLiteral(assignedExpression) || container === file && isExportsOrModuleExportsOrAlias(file, assignedExpression)) { + return; + } + if (isObjectLiteralExpression(assignedExpression) && every(assignedExpression.properties, isShorthandPropertyAssignment)) { + forEach(assignedExpression.properties, bindExportAssignedObjectMemberAlias); + return; + } + const flags = exportAssignmentIsAlias(node) ? 2097152 /* Alias */ : 4 /* Property */ | 1048576 /* ExportValue */ | 512 /* ValueModule */; + const symbol = declareSymbol(file.symbol.exports, file.symbol, node, flags | 67108864 /* Assignment */, 0 /* None */); + setValueDeclaration(symbol, node); + } + function bindExportAssignedObjectMemberAlias(node) { + declareSymbol(file.symbol.exports, file.symbol, node, 2097152 /* Alias */ | 67108864 /* Assignment */, 0 /* None */); + } + function bindThisPropertyAssignment(node) { + Debug.assert(isInJSFile(node)); + const hasPrivateIdentifier = isBinaryExpression(node) && isPropertyAccessExpression(node.left) && isPrivateIdentifier(node.left.name) || isPropertyAccessExpression(node) && isPrivateIdentifier(node.name); + if (hasPrivateIdentifier) { + return; + } + const thisContainer = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + switch (thisContainer.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + let constructorSymbol = thisContainer.symbol; + if (isBinaryExpression(thisContainer.parent) && thisContainer.parent.operatorToken.kind === 64 /* EqualsToken */) { + const l = thisContainer.parent.left; + if (isBindableStaticAccessExpression(l) && isPrototypeAccess(l.expression)) { + constructorSymbol = lookupSymbolForPropertyAccess(l.expression.expression, thisParentContainer); + } + } + if (constructorSymbol && constructorSymbol.valueDeclaration) { + constructorSymbol.members = constructorSymbol.members || createSymbolTable(); + if (hasDynamicName(node)) { + bindDynamicallyNamedThisPropertyAssignment(node, constructorSymbol, constructorSymbol.members); + } else { + declareSymbol(constructorSymbol.members, constructorSymbol, node, 4 /* Property */ | 67108864 /* Assignment */, 0 /* PropertyExcludes */ & ~4 /* Property */); + } + addDeclarationToSymbol(constructorSymbol, constructorSymbol.valueDeclaration, 32 /* Class */); + } + break; + case 177 /* Constructor */: + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 176 /* ClassStaticBlockDeclaration */: + const containingClass = thisContainer.parent; + const symbolTable = isStatic(thisContainer) ? containingClass.symbol.exports : containingClass.symbol.members; + if (hasDynamicName(node)) { + bindDynamicallyNamedThisPropertyAssignment(node, containingClass.symbol, symbolTable); + } else { + declareSymbol( + symbolTable, + containingClass.symbol, + node, + 4 /* Property */ | 67108864 /* Assignment */, + 0 /* None */, + /*isReplaceableByMethod*/ + true + ); + } + break; + case 308 /* SourceFile */: + if (hasDynamicName(node)) { + break; + } else if (thisContainer.commonJsModuleIndicator) { + declareSymbol(thisContainer.symbol.exports, thisContainer.symbol, node, 4 /* Property */ | 1048576 /* ExportValue */, 0 /* None */); + } else { + declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111550 /* FunctionScopedVariableExcludes */); + } + break; + // Namespaces are not allowed in javascript files, so do nothing here + case 268 /* ModuleDeclaration */: + break; + default: + Debug.failBadSyntaxKind(thisContainer); + } + } + function bindDynamicallyNamedThisPropertyAssignment(node, symbol, symbolTable) { + declareSymbol( + symbolTable, + symbol, + node, + 4 /* Property */, + 0 /* None */, + /*isReplaceableByMethod*/ + true, + /*isComputedName*/ + true + ); + addLateBoundAssignmentDeclarationToSymbol(node, symbol); + } + function addLateBoundAssignmentDeclarationToSymbol(node, symbol) { + if (symbol) { + (symbol.assignmentDeclarationMembers || (symbol.assignmentDeclarationMembers = /* @__PURE__ */ new Map())).set(getNodeId(node), node); + } + } + function bindSpecialPropertyDeclaration(node) { + if (node.expression.kind === 110 /* ThisKeyword */) { + bindThisPropertyAssignment(node); + } else if (isBindableStaticAccessExpression(node) && node.parent.parent.kind === 308 /* SourceFile */) { + if (isPrototypeAccess(node.expression)) { + bindPrototypePropertyAssignment(node, node.parent); + } else { + bindStaticPropertyAssignment(node); + } + } + } + function bindPrototypeAssignment(node) { + setParent(node.left, node); + setParent(node.right, node); + bindPropertyAssignment( + node.left.expression, + node.left, + /*isPrototypeProperty*/ + false, + /*containerIsClass*/ + true + ); + } + function bindObjectDefinePrototypeProperty(node) { + const namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0].expression); + if (namespaceSymbol && namespaceSymbol.valueDeclaration) { + addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32 /* Class */); + } + bindPotentiallyNewExpandoMemberToNamespace( + node, + namespaceSymbol, + /*isPrototypeProperty*/ + true + ); + } + function bindPrototypePropertyAssignment(lhs, parent3) { + const classPrototype = lhs.expression; + const constructorFunction = classPrototype.expression; + setParent(constructorFunction, classPrototype); + setParent(classPrototype, lhs); + setParent(lhs, parent3); + bindPropertyAssignment( + constructorFunction, + lhs, + /*isPrototypeProperty*/ + true, + /*containerIsClass*/ + true + ); + } + function bindObjectDefinePropertyAssignment(node) { + let namespaceSymbol = lookupSymbolForPropertyAccess(node.arguments[0]); + const isToplevel = node.parent.parent.kind === 308 /* SourceFile */; + namespaceSymbol = bindPotentiallyMissingNamespaces( + namespaceSymbol, + node.arguments[0], + isToplevel, + /*isPrototypeProperty*/ + false, + /*containerIsClass*/ + false + ); + bindPotentiallyNewExpandoMemberToNamespace( + node, + namespaceSymbol, + /*isPrototypeProperty*/ + false + ); + } + function bindSpecialPropertyAssignment(node) { + var _a; + const parentSymbol = lookupSymbolForPropertyAccess(node.left.expression, blockScopeContainer) || lookupSymbolForPropertyAccess(node.left.expression, container); + if (!isInJSFile(node) && !isFunctionSymbol(parentSymbol)) { + return; + } + const rootExpr = getLeftmostAccessExpression(node.left); + if (isIdentifier(rootExpr) && ((_a = lookupSymbolForName(container, rootExpr.escapedText)) == null ? void 0 : _a.flags) & 2097152 /* Alias */) { + return; + } + setParent(node.left, node); + setParent(node.right, node); + if (isIdentifier(node.left.expression) && container === file && isExportsOrModuleExportsOrAlias(file, node.left.expression)) { + bindExportsPropertyAssignment(node); + } else if (hasDynamicName(node)) { + bindAnonymousDeclaration(node, 4 /* Property */ | 67108864 /* Assignment */, "__computed" /* Computed */); + const sym = bindPotentiallyMissingNamespaces( + parentSymbol, + node.left.expression, + isTopLevelNamespaceAssignment(node.left), + /*isPrototypeProperty*/ + false, + /*containerIsClass*/ + false + ); + addLateBoundAssignmentDeclarationToSymbol(node, sym); + } else { + bindStaticPropertyAssignment(cast(node.left, isBindableStaticNameExpression)); + } + } + function bindStaticPropertyAssignment(node) { + Debug.assert(!isIdentifier(node)); + setParent(node.expression, node); + bindPropertyAssignment( + node.expression, + node, + /*isPrototypeProperty*/ + false, + /*containerIsClass*/ + false + ); + } + function bindPotentiallyMissingNamespaces(namespaceSymbol, entityName, isToplevel, isPrototypeProperty, containerIsClass) { + if ((namespaceSymbol == null ? void 0 : namespaceSymbol.flags) & 2097152 /* Alias */) { + return namespaceSymbol; + } + if (isToplevel && !isPrototypeProperty) { + const flags = 1536 /* Module */ | 67108864 /* Assignment */; + const excludeFlags = 110735 /* ValueModuleExcludes */ & ~67108864 /* Assignment */; + namespaceSymbol = forEachIdentifierInEntityName(entityName, namespaceSymbol, (id, symbol, parent3) => { + if (symbol) { + addDeclarationToSymbol(symbol, id, flags); + return symbol; + } else { + const table = parent3 ? parent3.exports : file.jsGlobalAugmentations || (file.jsGlobalAugmentations = createSymbolTable()); + return declareSymbol(table, parent3, id, flags, excludeFlags); + } + }); + } + if (containerIsClass && namespaceSymbol && namespaceSymbol.valueDeclaration) { + addDeclarationToSymbol(namespaceSymbol, namespaceSymbol.valueDeclaration, 32 /* Class */); + } + return namespaceSymbol; + } + function bindPotentiallyNewExpandoMemberToNamespace(declaration, namespaceSymbol, isPrototypeProperty) { + if (!namespaceSymbol || !isExpandoSymbol(namespaceSymbol)) { + return; + } + const symbolTable = isPrototypeProperty ? namespaceSymbol.members || (namespaceSymbol.members = createSymbolTable()) : namespaceSymbol.exports || (namespaceSymbol.exports = createSymbolTable()); + let includes = 0 /* None */; + let excludes = 0 /* None */; + if (isFunctionLikeDeclaration(getAssignedExpandoInitializer(declaration))) { + includes = 8192 /* Method */; + excludes = 103359 /* MethodExcludes */; + } else if (isCallExpression(declaration) && isBindableObjectDefinePropertyCall(declaration)) { + if (some(declaration.arguments[2].properties, (p) => { + const id = getNameOfDeclaration(p); + return !!id && isIdentifier(id) && idText(id) === "set"; + })) { + includes |= 65536 /* SetAccessor */ | 4 /* Property */; + excludes |= 78783 /* SetAccessorExcludes */; + } + if (some(declaration.arguments[2].properties, (p) => { + const id = getNameOfDeclaration(p); + return !!id && isIdentifier(id) && idText(id) === "get"; + })) { + includes |= 32768 /* GetAccessor */ | 4 /* Property */; + excludes |= 46015 /* GetAccessorExcludes */; + } + } + if (includes === 0 /* None */) { + includes = 4 /* Property */; + excludes = 0 /* PropertyExcludes */; + } + declareSymbol(symbolTable, namespaceSymbol, declaration, includes | 67108864 /* Assignment */, excludes & ~67108864 /* Assignment */); + } + function isTopLevelNamespaceAssignment(propertyAccess) { + return isBinaryExpression(propertyAccess.parent) ? getParentOfBinaryExpression(propertyAccess.parent).parent.kind === 308 /* SourceFile */ : propertyAccess.parent.parent.kind === 308 /* SourceFile */; + } + function bindPropertyAssignment(name, propertyAccess, isPrototypeProperty, containerIsClass) { + let namespaceSymbol = lookupSymbolForPropertyAccess(name, blockScopeContainer) || lookupSymbolForPropertyAccess(name, container); + const isToplevel = isTopLevelNamespaceAssignment(propertyAccess); + namespaceSymbol = bindPotentiallyMissingNamespaces(namespaceSymbol, propertyAccess.expression, isToplevel, isPrototypeProperty, containerIsClass); + bindPotentiallyNewExpandoMemberToNamespace(propertyAccess, namespaceSymbol, isPrototypeProperty); + } + function isExpandoSymbol(symbol) { + if (symbol.flags & (16 /* Function */ | 32 /* Class */ | 1024 /* NamespaceModule */)) { + return true; + } + const node = symbol.valueDeclaration; + if (node && isCallExpression(node)) { + return !!getAssignedExpandoInitializer(node); + } + let init = !node ? void 0 : isVariableDeclaration(node) ? node.initializer : isBinaryExpression(node) ? node.right : isPropertyAccessExpression(node) && isBinaryExpression(node.parent) ? node.parent.right : void 0; + init = init && getRightMostAssignedExpression(init); + if (init) { + const isPrototypeAssignment = isPrototypeAccess(isVariableDeclaration(node) ? node.name : isBinaryExpression(node) ? node.left : node); + return !!getExpandoInitializer(isBinaryExpression(init) && (init.operatorToken.kind === 57 /* BarBarToken */ || init.operatorToken.kind === 61 /* QuestionQuestionToken */) ? init.right : init, isPrototypeAssignment); + } + return false; + } + function getParentOfBinaryExpression(expr) { + while (isBinaryExpression(expr.parent)) { + expr = expr.parent; + } + return expr.parent; + } + function lookupSymbolForPropertyAccess(node, lookupContainer = container) { + if (isIdentifier(node)) { + return lookupSymbolForName(lookupContainer, node.escapedText); + } else { + const symbol = lookupSymbolForPropertyAccess(node.expression); + return symbol && symbol.exports && symbol.exports.get(getElementOrPropertyAccessName(node)); + } + } + function forEachIdentifierInEntityName(e, parent3, action) { + if (isExportsOrModuleExportsOrAlias(file, e)) { + return file.symbol; + } else if (isIdentifier(e)) { + return action(e, lookupSymbolForPropertyAccess(e), parent3); + } else { + const s = forEachIdentifierInEntityName(e.expression, parent3, action); + const name = getNameOrArgument(e); + if (isPrivateIdentifier(name)) { + Debug.fail("unexpected PrivateIdentifier"); + } + return action(name, s && s.exports && s.exports.get(getElementOrPropertyAccessName(e)), s); + } + } + function bindCallExpression(node) { + if (!file.commonJsModuleIndicator && isRequireCall( + node, + /*requireStringLiteralLikeArgument*/ + false + )) { + setCommonJsModuleIndicator(node); + } + } + function bindClassLikeDeclaration(node) { + if (node.kind === 264 /* ClassDeclaration */) { + bindBlockScopedDeclaration(node, 32 /* Class */, 899503 /* ClassExcludes */); + } else { + const bindingName = node.name ? node.name.escapedText : "__class" /* Class */; + bindAnonymousDeclaration(node, 32 /* Class */, bindingName); + if (node.name) { + classifiableNames.add(node.name.escapedText); + } + } + const { symbol } = node; + const prototypeSymbol = createSymbol(4 /* Property */ | 4194304 /* Prototype */, "prototype"); + const symbolExport = symbol.exports.get(prototypeSymbol.escapedName); + if (symbolExport) { + if (node.name) { + setParent(node.name, node); + } + file.bindDiagnostics.push(createDiagnosticForNode2(symbolExport.declarations[0], Diagnostics.Duplicate_identifier_0, symbolName(prototypeSymbol))); + } + symbol.exports.set(prototypeSymbol.escapedName, prototypeSymbol); + prototypeSymbol.parent = symbol; + } + function bindEnumDeclaration(node) { + return isEnumConst(node) ? bindBlockScopedDeclaration(node, 128 /* ConstEnum */, 899967 /* ConstEnumExcludes */) : bindBlockScopedDeclaration(node, 256 /* RegularEnum */, 899327 /* RegularEnumExcludes */); + } + function bindVariableDeclarationOrBindingElement(node) { + if (inStrictMode) { + checkStrictModeEvalOrArguments(node, node.name); + } + if (!isBindingPattern(node.name)) { + const possibleVariableDecl = node.kind === 261 /* VariableDeclaration */ ? node : node.parent.parent; + if (isInJSFile(node) && isVariableDeclarationInitializedToBareOrAccessedRequire(possibleVariableDecl) && !getJSDocTypeTag(node) && !(getCombinedModifierFlags(node) & 32 /* Export */)) { + declareSymbolAndAddToSymbolTable(node, 2097152 /* Alias */, 2097152 /* AliasExcludes */); + } else if (isBlockOrCatchScoped(node)) { + bindBlockScopedDeclaration(node, 2 /* BlockScopedVariable */, 111551 /* BlockScopedVariableExcludes */); + } else if (isPartOfParameterDeclaration(node)) { + declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111551 /* ParameterExcludes */); + } else { + declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111550 /* FunctionScopedVariableExcludes */); + } + } + } + function bindParameter(node) { + if (node.kind === 342 /* JSDocParameterTag */ && container.kind !== 324 /* JSDocSignature */) { + return; + } + if (inStrictMode && !(node.flags & 33554432 /* Ambient */)) { + checkStrictModeEvalOrArguments(node, node.name); + } + if (isBindingPattern(node.name)) { + bindAnonymousDeclaration(node, 1 /* FunctionScopedVariable */, "__" + node.parent.parameters.indexOf(node)); + } else { + declareSymbolAndAddToSymbolTable(node, 1 /* FunctionScopedVariable */, 111551 /* ParameterExcludes */); + } + if (isParameterPropertyDeclaration(node, node.parent)) { + const classDeclaration = node.parent.parent; + declareSymbol(classDeclaration.symbol.members, classDeclaration.symbol, node, 4 /* Property */ | (node.questionToken ? 16777216 /* Optional */ : 0 /* None */), 0 /* PropertyExcludes */); + } + } + function bindFunctionDeclaration(node) { + if (!file.isDeclarationFile && !(node.flags & 33554432 /* Ambient */)) { + if (isAsyncFunction(node)) { + emitFlags |= 4096 /* HasAsyncFunctions */; + } + } + checkStrictModeFunctionName(node); + if (inStrictMode) { + checkStrictModeFunctionDeclaration(node); + bindBlockScopedDeclaration(node, 16 /* Function */, 110991 /* FunctionExcludes */); + } else { + declareSymbolAndAddToSymbolTable(node, 16 /* Function */, 110991 /* FunctionExcludes */); + } + } + function bindFunctionExpression(node) { + if (!file.isDeclarationFile && !(node.flags & 33554432 /* Ambient */)) { + if (isAsyncFunction(node)) { + emitFlags |= 4096 /* HasAsyncFunctions */; + } + } + if (currentFlow) { + node.flowNode = currentFlow; + } + checkStrictModeFunctionName(node); + const bindingName = node.name ? node.name.escapedText : "__function" /* Function */; + return bindAnonymousDeclaration(node, 16 /* Function */, bindingName); + } + function bindPropertyOrMethodOrAccessor(node, symbolFlags, symbolExcludes) { + if (!file.isDeclarationFile && !(node.flags & 33554432 /* Ambient */) && isAsyncFunction(node)) { + emitFlags |= 4096 /* HasAsyncFunctions */; + } + if (currentFlow && isObjectLiteralOrClassExpressionMethodOrAccessor(node)) { + node.flowNode = currentFlow; + } + return hasDynamicName(node) ? bindAnonymousDeclaration(node, symbolFlags, "__computed" /* Computed */) : declareSymbolAndAddToSymbolTable(node, symbolFlags, symbolExcludes); + } + function getInferTypeContainer(node) { + const extendsType = findAncestor(node, (n) => n.parent && isConditionalTypeNode(n.parent) && n.parent.extendsType === n); + return extendsType && extendsType.parent; + } + function bindTypeParameter(node) { + if (isJSDocTemplateTag(node.parent)) { + const container2 = getEffectiveContainerForJSDocTemplateTag(node.parent); + if (container2) { + Debug.assertNode(container2, canHaveLocals); + container2.locals ?? (container2.locals = createSymbolTable()); + declareSymbol( + container2.locals, + /*parent*/ + void 0, + node, + 262144 /* TypeParameter */, + 526824 /* TypeParameterExcludes */ + ); + } else { + declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */); + } + } else if (node.parent.kind === 196 /* InferType */) { + const container2 = getInferTypeContainer(node.parent); + if (container2) { + Debug.assertNode(container2, canHaveLocals); + container2.locals ?? (container2.locals = createSymbolTable()); + declareSymbol( + container2.locals, + /*parent*/ + void 0, + node, + 262144 /* TypeParameter */, + 526824 /* TypeParameterExcludes */ + ); + } else { + bindAnonymousDeclaration(node, 262144 /* TypeParameter */, getDeclarationName(node)); + } + } else { + declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */); + } + } + function shouldReportErrorOnModuleDeclaration(node) { + const instanceState = getModuleInstanceState(node); + return instanceState === 1 /* Instantiated */ || instanceState === 2 /* ConstEnumOnly */ && shouldPreserveConstEnums(options); + } + function checkUnreachable(node) { + if (!(currentFlow.flags & 1 /* Unreachable */)) { + return false; + } + if (currentFlow === unreachableFlow) { + const reportError = ( + // report error on all statements except empty ones + isStatementButNotDeclaration(node) && node.kind !== 243 /* EmptyStatement */ || // report error on class declarations + node.kind === 264 /* ClassDeclaration */ || // report errors on enums with preserved emit + isEnumDeclarationWithPreservedEmit(node, options) || // report error on instantiated modules + node.kind === 268 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node) + ); + if (reportError) { + currentFlow = reportedUnreachableFlow; + if (!options.allowUnreachableCode) { + const isError = unreachableCodeIsError(options) && !(node.flags & 33554432 /* Ambient */) && (!isVariableStatement(node) || !!(getCombinedNodeFlags(node.declarationList) & 7 /* BlockScoped */) || node.declarationList.declarations.some((d) => !!d.initializer)); + eachUnreachableRange(node, options, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected)); + } + } + } + return true; + } +} +function isEnumDeclarationWithPreservedEmit(node, options) { + return node.kind === 267 /* EnumDeclaration */ && (!isEnumConst(node) || shouldPreserveConstEnums(options)); +} +function eachUnreachableRange(node, options, cb) { + if (isStatement(node) && isExecutableStatement(node) && isBlock(node.parent)) { + const { statements } = node.parent; + const slice = sliceAfter(statements, node); + getRangesWhere(slice, isExecutableStatement, (start, afterEnd) => cb(slice[start], slice[afterEnd - 1])); + } else { + cb(node, node); + } + function isExecutableStatement(s) { + return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && // `var x;` may declare a variable used above + !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & 7 /* BlockScoped */) && s.declarationList.declarations.some((d) => !d.initializer)); + } + function isPurelyTypeDeclaration(s) { + switch (s.kind) { + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + return true; + case 268 /* ModuleDeclaration */: + return getModuleInstanceState(s) !== 1 /* Instantiated */; + case 267 /* EnumDeclaration */: + return !isEnumDeclarationWithPreservedEmit(s, options); + default: + return false; + } + } +} +function isExportsOrModuleExportsOrAlias(sourceFile, node) { + let i = 0; + const q = createQueue(); + q.enqueue(node); + while (!q.isEmpty() && i < 100) { + i++; + node = q.dequeue(); + if (isExportsIdentifier(node) || isModuleExportsAccessExpression(node)) { + return true; + } else if (isIdentifier(node)) { + const symbol = lookupSymbolForName(sourceFile, node.escapedText); + if (!!symbol && !!symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration) && !!symbol.valueDeclaration.initializer) { + const init = symbol.valueDeclaration.initializer; + q.enqueue(init); + if (isAssignmentExpression( + init, + /*excludeCompoundAssignment*/ + true + )) { + q.enqueue(init.left); + q.enqueue(init.right); + } + } + } + } + return false; +} +function getContainerFlags(node) { + switch (node.kind) { + case 232 /* ClassExpression */: + case 264 /* ClassDeclaration */: + case 267 /* EnumDeclaration */: + case 211 /* ObjectLiteralExpression */: + case 188 /* TypeLiteral */: + case 323 /* JSDocTypeLiteral */: + case 293 /* JsxAttributes */: + return 1 /* IsContainer */; + case 265 /* InterfaceDeclaration */: + return 1 /* IsContainer */ | 64 /* IsInterface */; + case 268 /* ModuleDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 201 /* MappedType */: + case 182 /* IndexSignature */: + return 1 /* IsContainer */ | 32 /* HasLocals */; + case 308 /* SourceFile */: + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */; + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + if (isObjectLiteralOrClassExpressionMethodOrAccessor(node)) { + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 128 /* IsObjectLiteralOrClassExpressionMethodOrAccessor */; + } + // falls through + case 177 /* Constructor */: + case 263 /* FunctionDeclaration */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 324 /* JSDocSignature */: + case 318 /* JSDocFunctionType */: + case 185 /* FunctionType */: + case 181 /* ConstructSignature */: + case 186 /* ConstructorType */: + case 176 /* ClassStaticBlockDeclaration */: + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */; + case 352 /* JSDocImportTag */: + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */; + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */; + case 269 /* ModuleBlock */: + return 4 /* IsControlFlowContainer */; + case 173 /* PropertyDeclaration */: + return node.initializer ? 4 /* IsControlFlowContainer */ : 0; + case 300 /* CatchClause */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 270 /* CaseBlock */: + return 2 /* IsBlockScopedContainer */ | 32 /* HasLocals */; + case 242 /* Block */: + return isFunctionLike(node.parent) || isClassStaticBlockDeclaration(node.parent) ? 0 /* None */ : 2 /* IsBlockScopedContainer */ | 32 /* HasLocals */; + } + return 0 /* None */; +} +function lookupSymbolForName(container, name) { + var _a, _b, _c, _d; + const local = (_b = (_a = tryCast(container, canHaveLocals)) == null ? void 0 : _a.locals) == null ? void 0 : _b.get(name); + if (local) { + return local.exportSymbol ?? local; + } + if (isSourceFile(container) && container.jsGlobalAugmentations && container.jsGlobalAugmentations.has(name)) { + return container.jsGlobalAugmentations.get(name); + } + if (canHaveSymbol(container)) { + return (_d = (_c = container.symbol) == null ? void 0 : _c.exports) == null ? void 0 : _d.get(name); + } +} + +// src/compiler/symbolWalker.ts +function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignature, getReturnTypeOfSignature, getBaseTypes, resolveStructuredTypeMembers, getTypeOfSymbol, getResolvedSymbol, getConstraintOfTypeParameter, getFirstIdentifier2, getTypeArguments) { + return getSymbolWalker; + function getSymbolWalker(accept = () => true) { + const visitedTypes = []; + const visitedSymbols = []; + return { + walkType: (type) => { + try { + visitType(type); + return { visitedTypes: getOwnValues(visitedTypes), visitedSymbols: getOwnValues(visitedSymbols) }; + } finally { + clear(visitedTypes); + clear(visitedSymbols); + } + }, + walkSymbol: (symbol) => { + try { + visitSymbol(symbol); + return { visitedTypes: getOwnValues(visitedTypes), visitedSymbols: getOwnValues(visitedSymbols) }; + } finally { + clear(visitedTypes); + clear(visitedSymbols); + } + } + }; + function visitType(type) { + if (!type) { + return; + } + if (visitedTypes[type.id]) { + return; + } + visitedTypes[type.id] = type; + const shouldBail = visitSymbol(type.symbol); + if (shouldBail) return; + if (type.flags & 524288 /* Object */) { + const objectType = type; + const objectFlags = objectType.objectFlags; + if (objectFlags & 4 /* Reference */) { + visitTypeReference(type); + } + if (objectFlags & 32 /* Mapped */) { + visitMappedType(type); + } + if (objectFlags & (1 /* Class */ | 2 /* Interface */)) { + visitInterfaceType(type); + } + if (objectFlags & (8 /* Tuple */ | 16 /* Anonymous */)) { + visitObjectType(objectType); + } + } + if (type.flags & 262144 /* TypeParameter */) { + visitTypeParameter(type); + } + if (type.flags & 3145728 /* UnionOrIntersection */) { + visitUnionOrIntersectionType(type); + } + if (type.flags & 4194304 /* Index */) { + visitIndexType(type); + } + if (type.flags & 8388608 /* IndexedAccess */) { + visitIndexedAccessType(type); + } + } + function visitTypeReference(type) { + visitType(type.target); + forEach(getTypeArguments(type), visitType); + } + function visitTypeParameter(type) { + visitType(getConstraintOfTypeParameter(type)); + } + function visitUnionOrIntersectionType(type) { + forEach(type.types, visitType); + } + function visitIndexType(type) { + visitType(type.type); + } + function visitIndexedAccessType(type) { + visitType(type.objectType); + visitType(type.indexType); + visitType(type.constraint); + } + function visitMappedType(type) { + visitType(type.typeParameter); + visitType(type.constraintType); + visitType(type.templateType); + visitType(type.modifiersType); + } + function visitSignature(signature) { + const typePredicate = getTypePredicateOfSignature(signature); + if (typePredicate) { + visitType(typePredicate.type); + } + forEach(signature.typeParameters, visitType); + for (const parameter of signature.parameters) { + visitSymbol(parameter); + } + visitType(getRestTypeOfSignature(signature)); + visitType(getReturnTypeOfSignature(signature)); + } + function visitInterfaceType(interfaceT) { + visitObjectType(interfaceT); + forEach(interfaceT.typeParameters, visitType); + forEach(getBaseTypes(interfaceT), visitType); + visitType(interfaceT.thisType); + } + function visitObjectType(type) { + const resolved = resolveStructuredTypeMembers(type); + for (const info of resolved.indexInfos) { + visitType(info.keyType); + visitType(info.type); + } + for (const signature of resolved.callSignatures) { + visitSignature(signature); + } + for (const signature of resolved.constructSignatures) { + visitSignature(signature); + } + for (const p of resolved.properties) { + visitSymbol(p); + } + } + function visitSymbol(symbol) { + if (!symbol) { + return false; + } + const symbolId = getSymbolId(symbol); + if (visitedSymbols[symbolId]) { + return false; + } + visitedSymbols[symbolId] = symbol; + if (!accept(symbol)) { + return true; + } + const t = getTypeOfSymbol(symbol); + visitType(t); + if (symbol.exports) { + symbol.exports.forEach(visitSymbol); + } + forEach(symbol.declarations, (d) => { + if (d.type && d.type.kind === 187 /* TypeQuery */) { + const query = d.type; + const entity = getResolvedSymbol(getFirstIdentifier2(query.exprName)); + visitSymbol(entity); + } + }); + return false; + } + } +} + +// src/compiler/_namespaces/ts.moduleSpecifiers.ts +var ts_moduleSpecifiers_exports = {}; +__export(ts_moduleSpecifiers_exports, { + RelativePreference: () => RelativePreference, + countPathComponents: () => countPathComponents, + forEachFileNameOfModule: () => forEachFileNameOfModule, + getLocalModuleSpecifierBetweenFileNames: () => getLocalModuleSpecifierBetweenFileNames, + getModuleSpecifier: () => getModuleSpecifier, + getModuleSpecifierPreferences: () => getModuleSpecifierPreferences, + getModuleSpecifiers: () => getModuleSpecifiers, + getModuleSpecifiersWithCacheInfo: () => getModuleSpecifiersWithCacheInfo, + getNodeModulesPackageName: () => getNodeModulesPackageName, + tryGetJSExtensionForFile: () => tryGetJSExtensionForFile, + tryGetModuleSpecifiersFromCache: () => tryGetModuleSpecifiersFromCache, + tryGetRealFileNameForNonJsDeclarationFileName: () => tryGetRealFileNameForNonJsDeclarationFileName, + updateModuleSpecifier: () => updateModuleSpecifier +}); + +// src/compiler/moduleSpecifiers.ts +var stringToRegex = memoizeOne((pattern) => { + try { + let slash = pattern.indexOf("/"); + if (slash !== 0) { + return new RegExp(pattern); + } + const lastSlash = pattern.lastIndexOf("/"); + if (slash === lastSlash) { + return new RegExp(pattern); + } + while ((slash = pattern.indexOf("/", slash + 1)) !== lastSlash) { + if (pattern[slash - 1] !== "\\") { + return new RegExp(pattern); + } + } + const flags = pattern.substring(lastSlash + 1).replace(/[^iu]/g, ""); + pattern = pattern.substring(1, lastSlash); + return new RegExp(pattern, flags); + } catch { + return void 0; + } +}); +var RelativePreference = /* @__PURE__ */ ((RelativePreference2) => { + RelativePreference2[RelativePreference2["Relative"] = 0] = "Relative"; + RelativePreference2[RelativePreference2["NonRelative"] = 1] = "NonRelative"; + RelativePreference2[RelativePreference2["Shortest"] = 2] = "Shortest"; + RelativePreference2[RelativePreference2["ExternalNonRelative"] = 3] = "ExternalNonRelative"; + return RelativePreference2; +})(RelativePreference || {}); +function getModuleSpecifierPreferences({ importModuleSpecifierPreference, importModuleSpecifierEnding, autoImportSpecifierExcludeRegexes }, host, compilerOptions, importingSourceFile, oldImportSpecifier) { + const filePreferredEnding = getPreferredEnding(); + return { + excludeRegexes: autoImportSpecifierExcludeRegexes, + relativePreference: oldImportSpecifier !== void 0 ? isExternalModuleNameRelative(oldImportSpecifier) ? 0 /* Relative */ : 1 /* NonRelative */ : importModuleSpecifierPreference === "relative" ? 0 /* Relative */ : importModuleSpecifierPreference === "non-relative" ? 1 /* NonRelative */ : importModuleSpecifierPreference === "project-relative" ? 3 /* ExternalNonRelative */ : 2 /* Shortest */, + getAllowedEndingsInPreferredOrder: (syntaxImpliedNodeFormat) => { + const impliedNodeFormat = getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions); + const preferredEnding = syntaxImpliedNodeFormat !== impliedNodeFormat ? getPreferredEnding(syntaxImpliedNodeFormat) : filePreferredEnding; + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + if ((syntaxImpliedNodeFormat ?? impliedNodeFormat) === 99 /* ESNext */ && 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */) { + if (shouldAllowImportingTsExtension(compilerOptions, importingSourceFile.fileName)) { + return [3 /* TsExtension */, 2 /* JsExtension */]; + } + return [2 /* JsExtension */]; + } + if (getEmitModuleResolutionKind(compilerOptions) === 1 /* Classic */) { + return preferredEnding === 2 /* JsExtension */ ? [2 /* JsExtension */, 1 /* Index */] : [1 /* Index */, 2 /* JsExtension */]; + } + const allowImportingTsExtension = shouldAllowImportingTsExtension(compilerOptions, importingSourceFile.fileName); + switch (preferredEnding) { + case 2 /* JsExtension */: + return allowImportingTsExtension ? [2 /* JsExtension */, 3 /* TsExtension */, 0 /* Minimal */, 1 /* Index */] : [2 /* JsExtension */, 0 /* Minimal */, 1 /* Index */]; + case 3 /* TsExtension */: + return [3 /* TsExtension */, 0 /* Minimal */, 2 /* JsExtension */, 1 /* Index */]; + case 1 /* Index */: + return allowImportingTsExtension ? [1 /* Index */, 0 /* Minimal */, 3 /* TsExtension */, 2 /* JsExtension */] : [1 /* Index */, 0 /* Minimal */, 2 /* JsExtension */]; + case 0 /* Minimal */: + return allowImportingTsExtension ? [0 /* Minimal */, 1 /* Index */, 3 /* TsExtension */, 2 /* JsExtension */] : [0 /* Minimal */, 1 /* Index */, 2 /* JsExtension */]; + default: + Debug.assertNever(preferredEnding); + } + } + }; + function getPreferredEnding(resolutionMode) { + if (oldImportSpecifier !== void 0) { + if (hasJSFileExtension(oldImportSpecifier)) return 2 /* JsExtension */; + if (endsWith(oldImportSpecifier, "/index")) return 1 /* Index */; + } + return getModuleSpecifierEndingPreference( + importModuleSpecifierEnding, + resolutionMode ?? getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions), + compilerOptions, + isFullSourceFile(importingSourceFile) ? importingSourceFile : void 0 + ); + } +} +function updateModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, oldImportSpecifier, options = {}) { + const res = getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, getModuleSpecifierPreferences({}, host, compilerOptions, importingSourceFile, oldImportSpecifier), {}, options); + if (res === oldImportSpecifier) return void 0; + return res; +} +function getModuleSpecifier(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, options = {}) { + return getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, getModuleSpecifierPreferences({}, host, compilerOptions, importingSourceFile), {}, options); +} +function getNodeModulesPackageName(compilerOptions, importingSourceFile, nodeModulesFileName, host, preferences, options = {}) { + const info = getInfo(importingSourceFile.fileName, host); + const modulePaths = getAllModulePaths(info, nodeModulesFileName, host, preferences, compilerOptions, options); + return firstDefined(modulePaths, (modulePath) => tryGetModuleNameAsNodeModule( + modulePath, + info, + importingSourceFile, + host, + compilerOptions, + preferences, + /*packageNameOnly*/ + true, + options.overrideImportMode + )); +} +function getModuleSpecifierWorker(compilerOptions, importingSourceFile, importingSourceFileName, toFileName2, host, preferences, userPreferences, options = {}) { + const info = getInfo(importingSourceFileName, host); + const modulePaths = getAllModulePaths(info, toFileName2, host, userPreferences, compilerOptions, options); + return firstDefined(modulePaths, (modulePath) => tryGetModuleNameAsNodeModule( + modulePath, + info, + importingSourceFile, + host, + compilerOptions, + userPreferences, + /*packageNameOnly*/ + void 0, + options.overrideImportMode + )) || getLocalModuleSpecifier(toFileName2, info, compilerOptions, host, options.overrideImportMode || getDefaultResolutionModeForFile(importingSourceFile, host, compilerOptions), preferences); +} +function tryGetModuleSpecifiersFromCache(moduleSymbol, importingSourceFile, host, userPreferences, options = {}) { + const result = tryGetModuleSpecifiersFromCacheWorker( + moduleSymbol, + importingSourceFile, + host, + userPreferences, + options + ); + return result[1] && { kind: result[0], moduleSpecifiers: result[1], computedWithoutCache: false }; +} +function tryGetModuleSpecifiersFromCacheWorker(moduleSymbol, importingSourceFile, host, userPreferences, options = {}) { + var _a; + const moduleSourceFile = getSourceFileOfModule(moduleSymbol); + if (!moduleSourceFile) { + return emptyArray; + } + const cache = (_a = host.getModuleSpecifierCache) == null ? void 0 : _a.call(host); + const cached = cache == null ? void 0 : cache.get(importingSourceFile.path, moduleSourceFile.path, userPreferences, options); + return [cached == null ? void 0 : cached.kind, cached == null ? void 0 : cached.moduleSpecifiers, moduleSourceFile, cached == null ? void 0 : cached.modulePaths, cache]; +} +function getModuleSpecifiers(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options = {}) { + return getModuleSpecifiersWithCacheInfo( + moduleSymbol, + checker, + compilerOptions, + importingSourceFile, + host, + userPreferences, + options, + /*forAutoImport*/ + false + ).moduleSpecifiers; +} +function getModuleSpecifiersWithCacheInfo(moduleSymbol, checker, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { + let computedWithoutCache = false; + const ambient = tryGetModuleNameFromAmbientModule(moduleSymbol, checker); + if (ambient) { + return { + kind: "ambient", + moduleSpecifiers: !(forAutoImport && isExcludedByRegex(ambient, userPreferences.autoImportSpecifierExcludeRegexes)) ? [ambient] : emptyArray, + computedWithoutCache + }; + } + let [kind, specifiers, moduleSourceFile, modulePaths, cache] = tryGetModuleSpecifiersFromCacheWorker( + moduleSymbol, + importingSourceFile, + host, + userPreferences, + options + ); + if (specifiers) return { kind, moduleSpecifiers: specifiers, computedWithoutCache }; + if (!moduleSourceFile) return { kind: void 0, moduleSpecifiers: emptyArray, computedWithoutCache }; + computedWithoutCache = true; + modulePaths || (modulePaths = getAllModulePathsWorker(getInfo(importingSourceFile.fileName, host), moduleSourceFile.originalFileName, host, compilerOptions, options)); + const result = computeModuleSpecifiers( + modulePaths, + compilerOptions, + importingSourceFile, + host, + userPreferences, + options, + forAutoImport + ); + cache == null ? void 0 : cache.set(importingSourceFile.path, moduleSourceFile.path, userPreferences, options, result.kind, modulePaths, result.moduleSpecifiers); + return result; +} +function getLocalModuleSpecifierBetweenFileNames(importingFile, targetFileName, compilerOptions, host, preferences, options = {}) { + const info = getInfo(importingFile.fileName, host); + const importMode = options.overrideImportMode ?? importingFile.impliedNodeFormat; + return getLocalModuleSpecifier( + targetFileName, + info, + compilerOptions, + host, + importMode, + getModuleSpecifierPreferences(preferences, host, compilerOptions, importingFile) + ); +} +function computeModuleSpecifiers(modulePaths, compilerOptions, importingSourceFile, host, userPreferences, options = {}, forAutoImport) { + const info = getInfo(importingSourceFile.fileName, host); + const preferences = getModuleSpecifierPreferences(userPreferences, host, compilerOptions, importingSourceFile); + const existingSpecifier = isFullSourceFile(importingSourceFile) && forEach(modulePaths, (modulePath) => forEach( + host.getFileIncludeReasons().get(toPath(modulePath.path, host.getCurrentDirectory(), info.getCanonicalFileName)), + (reason) => { + if (reason.kind !== 3 /* Import */ || reason.file !== importingSourceFile.path) return void 0; + const existingMode = host.getModeForResolutionAtIndex(importingSourceFile, reason.index); + const targetMode = options.overrideImportMode ?? host.getDefaultResolutionModeForFile(importingSourceFile); + if (existingMode !== targetMode && existingMode !== void 0 && targetMode !== void 0) { + return void 0; + } + const specifier = getModuleNameStringLiteralAt(importingSourceFile, reason.index).text; + return preferences.relativePreference !== 1 /* NonRelative */ || !pathIsRelative(specifier) ? specifier : void 0; + } + )); + if (existingSpecifier) { + return { kind: void 0, moduleSpecifiers: [existingSpecifier], computedWithoutCache: true }; + } + const importedFileIsInNodeModules = some(modulePaths, (p) => p.isInNodeModules); + let nodeModulesSpecifiers; + let pathsSpecifiers; + let redirectPathsSpecifiers; + let relativeSpecifiers; + for (const modulePath of modulePaths) { + const specifier = modulePath.isInNodeModules ? tryGetModuleNameAsNodeModule( + modulePath, + info, + importingSourceFile, + host, + compilerOptions, + userPreferences, + /*packageNameOnly*/ + void 0, + options.overrideImportMode + ) : void 0; + if (specifier && !(forAutoImport && isExcludedByRegex(specifier, preferences.excludeRegexes))) { + nodeModulesSpecifiers = append(nodeModulesSpecifiers, specifier); + if (modulePath.isRedirect) { + return { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true }; + } + } + const local = getLocalModuleSpecifier( + modulePath.path, + info, + compilerOptions, + host, + options.overrideImportMode || importingSourceFile.impliedNodeFormat, + preferences, + /*pathsOnly*/ + modulePath.isRedirect || !!specifier + ); + if (!local || forAutoImport && isExcludedByRegex(local, preferences.excludeRegexes)) { + continue; + } + if (modulePath.isRedirect) { + redirectPathsSpecifiers = append(redirectPathsSpecifiers, local); + } else if (pathIsBareSpecifier(local)) { + if (pathContainsNodeModules(local)) { + relativeSpecifiers = append(relativeSpecifiers, local); + } else { + pathsSpecifiers = append(pathsSpecifiers, local); + } + } else if (forAutoImport || !importedFileIsInNodeModules || modulePath.isInNodeModules) { + relativeSpecifiers = append(relativeSpecifiers, local); + } + } + return (pathsSpecifiers == null ? void 0 : pathsSpecifiers.length) ? { kind: "paths", moduleSpecifiers: pathsSpecifiers, computedWithoutCache: true } : (redirectPathsSpecifiers == null ? void 0 : redirectPathsSpecifiers.length) ? { kind: "redirect", moduleSpecifiers: redirectPathsSpecifiers, computedWithoutCache: true } : (nodeModulesSpecifiers == null ? void 0 : nodeModulesSpecifiers.length) ? { kind: "node_modules", moduleSpecifiers: nodeModulesSpecifiers, computedWithoutCache: true } : { kind: "relative", moduleSpecifiers: relativeSpecifiers ?? emptyArray, computedWithoutCache: true }; +} +function isExcludedByRegex(moduleSpecifier, excludeRegexes) { + return some(excludeRegexes, (pattern) => { + var _a; + return !!((_a = stringToRegex(pattern)) == null ? void 0 : _a.test(moduleSpecifier)); + }); +} +function getInfo(importingSourceFileName, host) { + importingSourceFileName = getNormalizedAbsolutePath(importingSourceFileName, host.getCurrentDirectory()); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames ? host.useCaseSensitiveFileNames() : true); + const sourceDirectory = getDirectoryPath(importingSourceFileName); + return { + getCanonicalFileName, + importingSourceFileName, + sourceDirectory, + canonicalSourceDirectory: getCanonicalFileName(sourceDirectory) + }; +} +function getLocalModuleSpecifier(moduleFileName, info, compilerOptions, host, importMode, { getAllowedEndingsInPreferredOrder: getAllowedEndingsInPrefererredOrder, relativePreference, excludeRegexes }, pathsOnly) { + const { baseUrl, paths, rootDirs } = compilerOptions; + if (pathsOnly && !paths) { + return void 0; + } + const { sourceDirectory, canonicalSourceDirectory, getCanonicalFileName } = info; + const allowedEndings = getAllowedEndingsInPrefererredOrder(importMode); + const relativePath = rootDirs && tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName, allowedEndings, compilerOptions) || processEnding(ensurePathIsNonModuleName(getRelativePathFromDirectory(sourceDirectory, moduleFileName, getCanonicalFileName)), allowedEndings, compilerOptions); + if (!baseUrl && !paths && !getResolvePackageJsonImports(compilerOptions) || relativePreference === 0 /* Relative */) { + return pathsOnly ? void 0 : relativePath; + } + const baseDirectory = getNormalizedAbsolutePath(getPathsBasePath(compilerOptions, host) || baseUrl, host.getCurrentDirectory()); + const relativeToBaseUrl = getRelativePathIfInSameVolume(moduleFileName, baseDirectory, getCanonicalFileName); + if (!relativeToBaseUrl) { + return pathsOnly ? void 0 : relativePath; + } + const fromPackageJsonImports = pathsOnly ? void 0 : tryGetModuleNameFromPackageJsonImports( + moduleFileName, + sourceDirectory, + compilerOptions, + host, + importMode, + prefersTsExtension(allowedEndings) + ); + const fromPaths = pathsOnly || fromPackageJsonImports === void 0 ? paths && tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, baseDirectory, getCanonicalFileName, host, compilerOptions) : void 0; + if (pathsOnly) { + return fromPaths; + } + const maybeNonRelative = fromPackageJsonImports ?? (fromPaths === void 0 && baseUrl !== void 0 ? processEnding(relativeToBaseUrl, allowedEndings, compilerOptions) : fromPaths); + if (!maybeNonRelative) { + return relativePath; + } + const relativeIsExcluded = isExcludedByRegex(relativePath, excludeRegexes); + const nonRelativeIsExcluded = isExcludedByRegex(maybeNonRelative, excludeRegexes); + if (!relativeIsExcluded && nonRelativeIsExcluded) { + return relativePath; + } + if (relativeIsExcluded && !nonRelativeIsExcluded) { + return maybeNonRelative; + } + if (relativePreference === 1 /* NonRelative */ && !pathIsRelative(maybeNonRelative)) { + return maybeNonRelative; + } + if (relativePreference === 3 /* ExternalNonRelative */ && !pathIsRelative(maybeNonRelative)) { + const projectDirectory = compilerOptions.configFilePath ? toPath(getDirectoryPath(compilerOptions.configFilePath), host.getCurrentDirectory(), info.getCanonicalFileName) : info.getCanonicalFileName(host.getCurrentDirectory()); + const modulePath = toPath(moduleFileName, projectDirectory, getCanonicalFileName); + const sourceIsInternal = startsWith(canonicalSourceDirectory, projectDirectory); + const targetIsInternal = startsWith(modulePath, projectDirectory); + if (sourceIsInternal && !targetIsInternal || !sourceIsInternal && targetIsInternal) { + return maybeNonRelative; + } + const nearestTargetPackageJson = getNearestAncestorDirectoryWithPackageJson(host, getDirectoryPath(modulePath)); + const nearestSourcePackageJson = getNearestAncestorDirectoryWithPackageJson(host, sourceDirectory); + const ignoreCase = !hostUsesCaseSensitiveFileNames(host); + if (!packageJsonPathsAreEqual(nearestTargetPackageJson, nearestSourcePackageJson, ignoreCase)) { + return maybeNonRelative; + } + return relativePath; + } + return isPathRelativeToParent(maybeNonRelative) || countPathComponents(relativePath) < countPathComponents(maybeNonRelative) ? relativePath : maybeNonRelative; +} +function packageJsonPathsAreEqual(a, b, ignoreCase) { + if (a === b) return true; + if (a === void 0 || b === void 0) return false; + return comparePaths(a, b, ignoreCase) === 0 /* EqualTo */; +} +function countPathComponents(path) { + let count = 0; + for (let i = startsWith(path, "./") ? 2 : 0; i < path.length; i++) { + if (path.charCodeAt(i) === 47 /* slash */) count++; + } + return count; +} +function comparePathsByRedirectAndNumberOfDirectorySeparators(a, b) { + return compareBooleans(b.isRedirect, a.isRedirect) || compareNumberOfDirectorySeparators(a.path, b.path); +} +function getNearestAncestorDirectoryWithPackageJson(host, fileName) { + if (host.getNearestAncestorDirectoryWithPackageJson) { + return host.getNearestAncestorDirectoryWithPackageJson(fileName); + } + return forEachAncestorDirectoryStoppingAtGlobalCache( + host, + fileName, + (directory) => host.fileExists(combinePaths(directory, "package.json")) ? directory : void 0 + ); +} +function forEachFileNameOfModule(importingFileName, importedFileName, host, preferSymlinks, cb) { + var _a, _b; + const getCanonicalFileName = hostGetCanonicalFileName(host); + const cwd = host.getCurrentDirectory(); + const referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? (_a = host.getRedirectFromSourceFile(importedFileName)) == null ? void 0 : _a.outputDts : void 0; + const importedPath = toPath(importedFileName, cwd, getCanonicalFileName); + const redirects = host.redirectTargetsMap.get(importedPath) || emptyArray; + const importedFileNames = [...referenceRedirect ? [referenceRedirect] : emptyArray, importedFileName, ...redirects]; + const targets = importedFileNames.map((f) => getNormalizedAbsolutePath(f, cwd)); + let shouldFilterIgnoredPaths = !every(targets, containsIgnoredPath); + if (!preferSymlinks) { + const result2 = forEach(targets, (p) => !(shouldFilterIgnoredPaths && containsIgnoredPath(p)) && cb(p, referenceRedirect === p)); + if (result2) return result2; + } + const symlinkedDirectories = (_b = host.getSymlinkCache) == null ? void 0 : _b.call(host).getSymlinkedDirectoriesByRealpath(); + const fullImportedFileName = getNormalizedAbsolutePath(importedFileName, cwd); + const result = symlinkedDirectories && forEachAncestorDirectoryStoppingAtGlobalCache( + host, + getDirectoryPath(fullImportedFileName), + (realPathDirectory) => { + const symlinkDirectories = symlinkedDirectories.get(ensureTrailingDirectorySeparator(toPath(realPathDirectory, cwd, getCanonicalFileName))); + if (!symlinkDirectories) return void 0; + if (startsWithDirectory(importingFileName, realPathDirectory, getCanonicalFileName)) { + return false; + } + return forEach(targets, (target) => { + if (!startsWithDirectory(target, realPathDirectory, getCanonicalFileName)) { + return; + } + const relative = getRelativePathFromDirectory(realPathDirectory, target, getCanonicalFileName); + for (const symlinkDirectory of symlinkDirectories) { + const option = resolvePath(symlinkDirectory, relative); + const result2 = cb(option, target === referenceRedirect); + shouldFilterIgnoredPaths = true; + if (result2) return result2; + } + }); + } + ); + return result || (preferSymlinks ? forEach(targets, (p) => shouldFilterIgnoredPaths && containsIgnoredPath(p) ? void 0 : cb(p, p === referenceRedirect)) : void 0); +} +function getAllModulePaths(info, importedFileName, host, preferences, compilerOptions, options = {}) { + var _a; + const importingFilePath = toPath(info.importingSourceFileName, host.getCurrentDirectory(), hostGetCanonicalFileName(host)); + const importedFilePath = toPath(importedFileName, host.getCurrentDirectory(), hostGetCanonicalFileName(host)); + const cache = (_a = host.getModuleSpecifierCache) == null ? void 0 : _a.call(host); + if (cache) { + const cached = cache.get(importingFilePath, importedFilePath, preferences, options); + if (cached == null ? void 0 : cached.modulePaths) return cached.modulePaths; + } + const modulePaths = getAllModulePathsWorker(info, importedFileName, host, compilerOptions, options); + if (cache) { + cache.setModulePaths(importingFilePath, importedFilePath, preferences, options, modulePaths); + } + return modulePaths; +} +var runtimeDependencyFields = ["dependencies", "peerDependencies", "optionalDependencies"]; +function getAllRuntimeDependencies(packageJson) { + let result; + for (const field of runtimeDependencyFields) { + const deps = packageJson[field]; + if (deps && typeof deps === "object") { + result = concatenate(result, getOwnKeys(deps)); + } + } + return result; +} +function getAllModulePathsWorker(info, importedFileName, host, compilerOptions, options) { + var _a, _b; + const cache = (_a = host.getModuleResolutionCache) == null ? void 0 : _a.call(host); + const links = (_b = host.getSymlinkCache) == null ? void 0 : _b.call(host); + if (cache && links && host.readFile && !pathContainsNodeModules(info.importingSourceFileName)) { + Debug.type(host); + const state = getTemporaryModuleResolutionState(cache.getPackageJsonInfoCache(), host, {}); + const packageJson = getPackageScopeForPath(getDirectoryPath(info.importingSourceFileName), state); + if (packageJson) { + const toResolve = getAllRuntimeDependencies(packageJson.contents.packageJsonContent); + for (const depName of toResolve || emptyArray) { + const resolved = resolveModuleName( + depName, + combinePaths(packageJson.packageDirectory, "package.json"), + compilerOptions, + host, + cache, + /*redirectedReference*/ + void 0, + options.overrideImportMode + ); + links.setSymlinksFromResolution(resolved.resolvedModule); + } + } + } + const allFileNames = /* @__PURE__ */ new Map(); + let importedFileFromNodeModules = false; + forEachFileNameOfModule( + info.importingSourceFileName, + importedFileName, + host, + /*preferSymlinks*/ + true, + (path, isRedirect) => { + const isInNodeModules = pathContainsNodeModules(path); + allFileNames.set(path, { path: info.getCanonicalFileName(path), isRedirect, isInNodeModules }); + importedFileFromNodeModules = importedFileFromNodeModules || isInNodeModules; + } + ); + const sortedPaths = []; + for (let directory = info.canonicalSourceDirectory; allFileNames.size !== 0; ) { + const directoryStart = ensureTrailingDirectorySeparator(directory); + let pathsInDirectory; + allFileNames.forEach(({ path, isRedirect, isInNodeModules }, fileName) => { + if (startsWith(path, directoryStart)) { + (pathsInDirectory || (pathsInDirectory = [])).push({ path: fileName, isRedirect, isInNodeModules }); + allFileNames.delete(fileName); + } + }); + if (pathsInDirectory) { + if (pathsInDirectory.length > 1) { + pathsInDirectory.sort(comparePathsByRedirectAndNumberOfDirectorySeparators); + } + sortedPaths.push(...pathsInDirectory); + } + const newDirectory = getDirectoryPath(directory); + if (newDirectory === directory) break; + directory = newDirectory; + } + if (allFileNames.size) { + const remainingPaths = arrayFrom( + allFileNames.entries(), + ([fileName, { isRedirect, isInNodeModules }]) => ({ path: fileName, isRedirect, isInNodeModules }) + ); + if (remainingPaths.length > 1) remainingPaths.sort(comparePathsByRedirectAndNumberOfDirectorySeparators); + sortedPaths.push(...remainingPaths); + } + return sortedPaths; +} +function tryGetModuleNameFromAmbientModule(moduleSymbol, checker) { + var _a; + const decl = (_a = moduleSymbol.declarations) == null ? void 0 : _a.find( + (d) => isNonGlobalAmbientModule(d) && (!isExternalModuleAugmentation(d) || !isExternalModuleNameRelative(getTextOfIdentifierOrLiteral(d.name))) + ); + if (decl) { + return decl.name.text; + } + const ambientModuleDeclareCandidates = mapDefined(moduleSymbol.declarations, (d) => { + var _a2, _b, _c, _d; + if (!isModuleDeclaration(d)) return; + const topNamespace = getTopNamespace(d); + if (!(((_a2 = topNamespace == null ? void 0 : topNamespace.parent) == null ? void 0 : _a2.parent) && isModuleBlock(topNamespace.parent) && isAmbientModule(topNamespace.parent.parent) && isSourceFile(topNamespace.parent.parent.parent))) return; + const exportAssignment = (_d = (_c = (_b = topNamespace.parent.parent.symbol.exports) == null ? void 0 : _b.get("export=")) == null ? void 0 : _c.valueDeclaration) == null ? void 0 : _d.expression; + if (!exportAssignment) return; + const exportSymbol = checker.getSymbolAtLocation(exportAssignment); + if (!exportSymbol) return; + const originalExportSymbol = (exportSymbol == null ? void 0 : exportSymbol.flags) & 2097152 /* Alias */ ? checker.getAliasedSymbol(exportSymbol) : exportSymbol; + if (originalExportSymbol === d.symbol) return topNamespace.parent.parent; + function getTopNamespace(namespaceDeclaration) { + while (namespaceDeclaration.flags & 8 /* NestedNamespace */) { + namespaceDeclaration = namespaceDeclaration.parent; + } + return namespaceDeclaration; + } + }); + const ambientModuleDeclare = ambientModuleDeclareCandidates[0]; + if (ambientModuleDeclare) { + return ambientModuleDeclare.name.text; + } +} +function tryGetModuleNameFromPaths(relativeToBaseUrl, paths, allowedEndings, baseDirectory, getCanonicalFileName, host, compilerOptions) { + for (const key in paths) { + for (const patternText2 of paths[key]) { + const normalized = normalizePath(patternText2); + const pattern = getRelativePathIfInSameVolume(normalized, baseDirectory, getCanonicalFileName) ?? normalized; + const indexOfStar = pattern.indexOf("*"); + const candidates = allowedEndings.map((ending) => ({ + ending, + value: processEnding(relativeToBaseUrl, [ending], compilerOptions) + })); + if (tryGetExtensionFromPath2(pattern)) { + candidates.push({ ending: void 0, value: relativeToBaseUrl }); + } + if (indexOfStar !== -1) { + const prefix = pattern.substring(0, indexOfStar); + const suffix = pattern.substring(indexOfStar + 1); + for (const { ending, value } of candidates) { + if (value.length >= prefix.length + suffix.length && startsWith(value, prefix) && endsWith(value, suffix) && validateEnding({ ending, value })) { + const matchedStar = value.substring(prefix.length, value.length - suffix.length); + if (!pathIsRelative(matchedStar)) { + return replaceFirstStar(key, matchedStar); + } + } + } + } else if (some(candidates, (c) => c.ending !== 0 /* Minimal */ && pattern === c.value) || some(candidates, (c) => c.ending === 0 /* Minimal */ && pattern === c.value && validateEnding(c))) { + return key; + } + } + } + function validateEnding({ ending, value }) { + return ending !== 0 /* Minimal */ || value === processEnding(relativeToBaseUrl, [ending], compilerOptions, host); + } +} +function tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, exports2, conditions, mode, isImports, preferTsExtension) { + if (typeof exports2 === "string") { + const ignoreCase = !hostUsesCaseSensitiveFileNames(host); + const getCommonSourceDirectory2 = () => host.getCommonSourceDirectory(); + const outputFile = isImports && getOutputJSFileNameWorker(targetFilePath, options, ignoreCase, getCommonSourceDirectory2); + const declarationFile = isImports && getOutputDeclarationFileNameWorker(targetFilePath, options, ignoreCase, getCommonSourceDirectory2); + const pathOrPattern = getNormalizedAbsolutePath( + combinePaths(packageDirectory, exports2), + /*currentDirectory*/ + void 0 + ); + const extensionSwappedTarget = hasTSFileExtension(targetFilePath) ? removeFileExtension(targetFilePath) + tryGetJSExtensionForFile(targetFilePath, options) : void 0; + const canTryTsExtension = preferTsExtension && hasImplementationTSFileExtension(targetFilePath); + switch (mode) { + case 0 /* Exact */: + if (extensionSwappedTarget && comparePaths(extensionSwappedTarget, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || comparePaths(targetFilePath, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || outputFile && comparePaths(outputFile, pathOrPattern, ignoreCase) === 0 /* EqualTo */ || declarationFile && comparePaths(declarationFile, pathOrPattern, ignoreCase) === 0 /* EqualTo */) { + return { moduleFileToTry: packageName }; + } + break; + case 1 /* Directory */: + if (canTryTsExtension && containsPath(targetFilePath, pathOrPattern, ignoreCase)) { + const fragment = getRelativePathFromDirectory( + pathOrPattern, + targetFilePath, + /*ignoreCase*/ + false + ); + return { moduleFileToTry: getNormalizedAbsolutePath( + combinePaths(combinePaths(packageName, exports2), fragment), + /*currentDirectory*/ + void 0 + ) }; + } + if (extensionSwappedTarget && containsPath(pathOrPattern, extensionSwappedTarget, ignoreCase)) { + const fragment = getRelativePathFromDirectory( + pathOrPattern, + extensionSwappedTarget, + /*ignoreCase*/ + false + ); + return { moduleFileToTry: getNormalizedAbsolutePath( + combinePaths(combinePaths(packageName, exports2), fragment), + /*currentDirectory*/ + void 0 + ) }; + } + if (!canTryTsExtension && containsPath(pathOrPattern, targetFilePath, ignoreCase)) { + const fragment = getRelativePathFromDirectory( + pathOrPattern, + targetFilePath, + /*ignoreCase*/ + false + ); + return { moduleFileToTry: getNormalizedAbsolutePath( + combinePaths(combinePaths(packageName, exports2), fragment), + /*currentDirectory*/ + void 0 + ) }; + } + if (outputFile && containsPath(pathOrPattern, outputFile, ignoreCase)) { + const fragment = getRelativePathFromDirectory( + pathOrPattern, + outputFile, + /*ignoreCase*/ + false + ); + return { moduleFileToTry: combinePaths(packageName, fragment) }; + } + if (declarationFile && containsPath(pathOrPattern, declarationFile, ignoreCase)) { + const fragment = changeFullExtension(getRelativePathFromDirectory( + pathOrPattern, + declarationFile, + /*ignoreCase*/ + false + ), getJSExtensionForFile(declarationFile, options)); + return { moduleFileToTry: combinePaths(packageName, fragment) }; + } + break; + case 2 /* Pattern */: + const starPos = pathOrPattern.indexOf("*"); + const leadingSlice = pathOrPattern.slice(0, starPos); + const trailingSlice = pathOrPattern.slice(starPos + 1); + if (canTryTsExtension && startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { + const starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length); + return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + } + if (extensionSwappedTarget && startsWith(extensionSwappedTarget, leadingSlice, ignoreCase) && endsWith(extensionSwappedTarget, trailingSlice, ignoreCase)) { + const starReplacement = extensionSwappedTarget.slice(leadingSlice.length, extensionSwappedTarget.length - trailingSlice.length); + return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + } + if (!canTryTsExtension && startsWith(targetFilePath, leadingSlice, ignoreCase) && endsWith(targetFilePath, trailingSlice, ignoreCase)) { + const starReplacement = targetFilePath.slice(leadingSlice.length, targetFilePath.length - trailingSlice.length); + return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + } + if (outputFile && startsWith(outputFile, leadingSlice, ignoreCase) && endsWith(outputFile, trailingSlice, ignoreCase)) { + const starReplacement = outputFile.slice(leadingSlice.length, outputFile.length - trailingSlice.length); + return { moduleFileToTry: replaceFirstStar(packageName, starReplacement) }; + } + if (declarationFile && startsWith(declarationFile, leadingSlice, ignoreCase) && endsWith(declarationFile, trailingSlice, ignoreCase)) { + const starReplacement = declarationFile.slice(leadingSlice.length, declarationFile.length - trailingSlice.length); + const substituted = replaceFirstStar(packageName, starReplacement); + const jsExtension = tryGetJSExtensionForFile(declarationFile, options); + return jsExtension ? { moduleFileToTry: changeFullExtension(substituted, jsExtension) } : void 0; + } + break; + } + } else if (Array.isArray(exports2)) { + return forEach(exports2, (e) => tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, e, conditions, mode, isImports, preferTsExtension)); + } else if (typeof exports2 === "object" && exports2 !== null) { + for (const key of getOwnKeys(exports2)) { + if (key === "default" || conditions.indexOf(key) >= 0 || isApplicableVersionedTypesKey(conditions, key)) { + const subTarget = exports2[key]; + const result = tryGetModuleNameFromExportsOrImports(options, host, targetFilePath, packageDirectory, packageName, subTarget, conditions, mode, isImports, preferTsExtension); + if (result) { + return result; + } + } + } + } + return void 0; +} +function tryGetModuleNameFromExports(options, host, targetFilePath, packageDirectory, packageName, exports2, conditions) { + if (typeof exports2 === "object" && exports2 !== null && !Array.isArray(exports2) && allKeysStartWithDot(exports2)) { + return forEach(getOwnKeys(exports2), (k) => { + const subPackageName = getNormalizedAbsolutePath( + combinePaths(packageName, k), + /*currentDirectory*/ + void 0 + ); + const mode = endsWith(k, "/") ? 1 /* Directory */ : k.includes("*") ? 2 /* Pattern */ : 0 /* Exact */; + return tryGetModuleNameFromExportsOrImports( + options, + host, + targetFilePath, + packageDirectory, + subPackageName, + exports2[k], + conditions, + mode, + /*isImports*/ + false, + /*preferTsExtension*/ + false + ); + }); + } + return tryGetModuleNameFromExportsOrImports( + options, + host, + targetFilePath, + packageDirectory, + packageName, + exports2, + conditions, + 0 /* Exact */, + /*isImports*/ + false, + /*preferTsExtension*/ + false + ); +} +function tryGetModuleNameFromPackageJsonImports(moduleFileName, sourceDirectory, options, host, importMode, preferTsExtension) { + var _a, _b, _c; + if (!host.readFile || !getResolvePackageJsonImports(options)) { + return void 0; + } + const ancestorDirectoryWithPackageJson = getNearestAncestorDirectoryWithPackageJson(host, sourceDirectory); + if (!ancestorDirectoryWithPackageJson) { + return void 0; + } + const packageJsonPath = combinePaths(ancestorDirectoryWithPackageJson, "package.json"); + const cachedPackageJson = (_b = (_a = host.getPackageJsonInfoCache) == null ? void 0 : _a.call(host)) == null ? void 0 : _b.getPackageJsonInfo(packageJsonPath); + if (isMissingPackageJsonInfo(cachedPackageJson) || !host.fileExists(packageJsonPath)) { + return void 0; + } + const packageJsonContent = (cachedPackageJson == null ? void 0 : cachedPackageJson.contents.packageJsonContent) || tryParseJson(host.readFile(packageJsonPath)); + const imports = packageJsonContent == null ? void 0 : packageJsonContent.imports; + if (!imports) { + return void 0; + } + const conditions = getConditions(options, importMode); + return (_c = forEach(getOwnKeys(imports), (k) => { + if (!startsWith(k, "#") || k === "#" || startsWith(k, "#/")) return void 0; + const mode = endsWith(k, "/") ? 1 /* Directory */ : k.includes("*") ? 2 /* Pattern */ : 0 /* Exact */; + return tryGetModuleNameFromExportsOrImports( + options, + host, + moduleFileName, + ancestorDirectoryWithPackageJson, + k, + imports[k], + conditions, + mode, + /*isImports*/ + true, + preferTsExtension + ); + })) == null ? void 0 : _c.moduleFileToTry; +} +function tryGetModuleNameFromRootDirs(rootDirs, moduleFileName, sourceDirectory, getCanonicalFileName, allowedEndings, compilerOptions) { + const normalizedTargetPaths = getPathsRelativeToRootDirs(moduleFileName, rootDirs, getCanonicalFileName); + if (normalizedTargetPaths === void 0) { + return void 0; + } + const normalizedSourcePaths = getPathsRelativeToRootDirs(sourceDirectory, rootDirs, getCanonicalFileName); + const relativePaths = flatMap(normalizedSourcePaths, (sourcePath) => { + return map(normalizedTargetPaths, (targetPath) => ensurePathIsNonModuleName(getRelativePathFromDirectory(sourcePath, targetPath, getCanonicalFileName))); + }); + const shortest = min(relativePaths, compareNumberOfDirectorySeparators); + if (!shortest) { + return void 0; + } + return processEnding(shortest, allowedEndings, compilerOptions); +} +function tryGetModuleNameAsNodeModule({ path, isRedirect }, { getCanonicalFileName, canonicalSourceDirectory }, importingSourceFile, host, options, userPreferences, packageNameOnly, overrideMode) { + if (!host.fileExists || !host.readFile) { + return void 0; + } + const parts = getNodeModulePathParts(path); + if (!parts) { + return void 0; + } + const preferences = getModuleSpecifierPreferences(userPreferences, host, options, importingSourceFile); + const allowedEndings = preferences.getAllowedEndingsInPreferredOrder(); + let moduleSpecifier = path; + let isPackageRootPath = false; + if (!packageNameOnly) { + let packageRootIndex = parts.packageRootIndex; + let moduleFileName; + while (true) { + const { moduleFileToTry, packageRootPath, blockedByExports, verbatimFromExports } = tryDirectoryWithPackageJson(packageRootIndex); + if (getEmitModuleResolutionKind(options) !== 1 /* Classic */) { + if (blockedByExports) { + return void 0; + } + if (verbatimFromExports) { + return moduleFileToTry; + } + } + if (packageRootPath) { + moduleSpecifier = packageRootPath; + isPackageRootPath = true; + break; + } + if (!moduleFileName) moduleFileName = moduleFileToTry; + packageRootIndex = path.indexOf(directorySeparator, packageRootIndex + 1); + if (packageRootIndex === -1) { + moduleSpecifier = processEnding(moduleFileName, allowedEndings, options, host); + break; + } + } + } + if (isRedirect && !isPackageRootPath) { + return void 0; + } + const globalTypingsCacheLocation = host.getGlobalTypingsCacheLocation && host.getGlobalTypingsCacheLocation(); + const pathToTopLevelNodeModules = getCanonicalFileName(moduleSpecifier.substring(0, parts.topLevelNodeModulesIndex)); + if (!(startsWith(canonicalSourceDirectory, pathToTopLevelNodeModules) || globalTypingsCacheLocation && startsWith(getCanonicalFileName(globalTypingsCacheLocation), pathToTopLevelNodeModules))) { + return void 0; + } + const nodeModulesDirectoryName = moduleSpecifier.substring(parts.topLevelPackageNameIndex + 1); + const packageName = getPackageNameFromTypesPackageName(nodeModulesDirectoryName); + return getEmitModuleResolutionKind(options) === 1 /* Classic */ && packageName === nodeModulesDirectoryName ? void 0 : packageName; + function tryDirectoryWithPackageJson(packageRootIndex) { + var _a, _b; + const packageRootPath = path.substring(0, packageRootIndex); + const packageJsonPath = combinePaths(packageRootPath, "package.json"); + let moduleFileToTry = path; + let maybeBlockedByTypesVersions = false; + const cachedPackageJson = (_b = (_a = host.getPackageJsonInfoCache) == null ? void 0 : _a.call(host)) == null ? void 0 : _b.getPackageJsonInfo(packageJsonPath); + if (isPackageJsonInfo(cachedPackageJson) || cachedPackageJson === void 0 && host.fileExists(packageJsonPath)) { + const packageJsonContent = (cachedPackageJson == null ? void 0 : cachedPackageJson.contents.packageJsonContent) || tryParseJson(host.readFile(packageJsonPath)); + const importMode = overrideMode || getDefaultResolutionModeForFile(importingSourceFile, host, options); + if (getResolvePackageJsonExports(options)) { + const nodeModulesDirectoryName2 = packageRootPath.substring(parts.topLevelPackageNameIndex + 1); + const packageName2 = getPackageNameFromTypesPackageName(nodeModulesDirectoryName2); + const conditions = getConditions(options, importMode); + const fromExports = (packageJsonContent == null ? void 0 : packageJsonContent.exports) ? tryGetModuleNameFromExports( + options, + host, + path, + packageRootPath, + packageName2, + packageJsonContent.exports, + conditions + ) : void 0; + if (fromExports) { + return { ...fromExports, verbatimFromExports: true }; + } + if (packageJsonContent == null ? void 0 : packageJsonContent.exports) { + return { moduleFileToTry: path, blockedByExports: true }; + } + } + const versionPaths = (packageJsonContent == null ? void 0 : packageJsonContent.typesVersions) ? getPackageJsonTypesVersionsPaths(packageJsonContent.typesVersions) : void 0; + if (versionPaths) { + const subModuleName = path.slice(packageRootPath.length + 1); + const fromPaths = tryGetModuleNameFromPaths( + subModuleName, + versionPaths.paths, + allowedEndings, + packageRootPath, + getCanonicalFileName, + host, + options + ); + if (fromPaths === void 0) { + maybeBlockedByTypesVersions = true; + } else { + moduleFileToTry = combinePaths(packageRootPath, fromPaths); + } + } + const mainFileRelative = (packageJsonContent == null ? void 0 : packageJsonContent.typings) || (packageJsonContent == null ? void 0 : packageJsonContent.types) || (packageJsonContent == null ? void 0 : packageJsonContent.main) || "index.js"; + if (isString(mainFileRelative) && !(maybeBlockedByTypesVersions && matchPatternOrExact(tryParsePatterns(versionPaths.paths), mainFileRelative))) { + const mainExportFile = toPath(mainFileRelative, packageRootPath, getCanonicalFileName); + const canonicalModuleFileToTry = getCanonicalFileName(moduleFileToTry); + if (removeFileExtension(mainExportFile) === removeFileExtension(canonicalModuleFileToTry)) { + return { packageRootPath, moduleFileToTry }; + } else if ((packageJsonContent == null ? void 0 : packageJsonContent.type) !== "module" && !fileExtensionIsOneOf(canonicalModuleFileToTry, extensionsNotSupportingExtensionlessResolution) && startsWith(canonicalModuleFileToTry, mainExportFile) && getDirectoryPath(canonicalModuleFileToTry) === removeTrailingDirectorySeparator(mainExportFile) && removeFileExtension(getBaseFileName(canonicalModuleFileToTry)) === "index") { + return { packageRootPath, moduleFileToTry }; + } + } + } else { + const fileName = getCanonicalFileName(moduleFileToTry.substring(parts.packageRootIndex + 1)); + if (fileName === "index.d.ts" || fileName === "index.js" || fileName === "index.ts" || fileName === "index.tsx") { + return { moduleFileToTry, packageRootPath }; + } + } + return { moduleFileToTry }; + } +} +function tryGetAnyFileFromPath(host, path) { + if (!host.fileExists) return; + const extensions = flatten(getSupportedExtensions({ allowJs: true }, [{ extension: "node", isMixedContent: false }, { extension: "json", isMixedContent: false, scriptKind: 6 /* JSON */ }])); + for (const e of extensions) { + const fullPath = path + e; + if (host.fileExists(fullPath)) { + return fullPath; + } + } +} +function getPathsRelativeToRootDirs(path, rootDirs, getCanonicalFileName) { + return mapDefined(rootDirs, (rootDir) => { + const relativePath = getRelativePathIfInSameVolume(path, rootDir, getCanonicalFileName); + return relativePath !== void 0 && isPathRelativeToParent(relativePath) ? void 0 : relativePath; + }); +} +function processEnding(fileName, allowedEndings, options, host) { + if (fileExtensionIsOneOf(fileName, [".json" /* Json */, ".mjs" /* Mjs */, ".cjs" /* Cjs */])) { + return fileName; + } + const noExtension = removeFileExtension(fileName); + if (fileName === noExtension) { + return fileName; + } + const jsPriority = allowedEndings.indexOf(2 /* JsExtension */); + const tsPriority = allowedEndings.indexOf(3 /* TsExtension */); + if (fileExtensionIsOneOf(fileName, [".mts" /* Mts */, ".cts" /* Cts */]) && tsPriority !== -1 && tsPriority < jsPriority) { + return fileName; + } else if (fileExtensionIsOneOf(fileName, [".d.mts" /* Dmts */, ".mts" /* Mts */, ".d.cts" /* Dcts */, ".cts" /* Cts */])) { + return noExtension + getJSExtensionForFile(fileName, options); + } else if (!fileExtensionIsOneOf(fileName, [".d.ts" /* Dts */]) && fileExtensionIsOneOf(fileName, [".ts" /* Ts */]) && fileName.includes(".d.")) { + return tryGetRealFileNameForNonJsDeclarationFileName(fileName); + } + switch (allowedEndings[0]) { + case 0 /* Minimal */: + const withoutIndex = removeSuffix(noExtension, "/index"); + if (host && withoutIndex !== noExtension && tryGetAnyFileFromPath(host, withoutIndex)) { + return noExtension; + } + return withoutIndex; + case 1 /* Index */: + return noExtension; + case 2 /* JsExtension */: + return noExtension + getJSExtensionForFile(fileName, options); + case 3 /* TsExtension */: + if (isDeclarationFileName(fileName)) { + const extensionlessPriority = allowedEndings.findIndex((e) => e === 0 /* Minimal */ || e === 1 /* Index */); + return extensionlessPriority !== -1 && extensionlessPriority < jsPriority ? noExtension : noExtension + getJSExtensionForFile(fileName, options); + } + return fileName; + default: + return Debug.assertNever(allowedEndings[0]); + } +} +function tryGetRealFileNameForNonJsDeclarationFileName(fileName) { + const baseName = getBaseFileName(fileName); + if (!endsWith(fileName, ".ts" /* Ts */) || !baseName.includes(".d.") || fileExtensionIsOneOf(baseName, [".d.ts" /* Dts */])) return void 0; + const noExtension = removeExtension(fileName, ".ts" /* Ts */); + const ext = noExtension.substring(noExtension.lastIndexOf(".")); + return noExtension.substring(0, noExtension.indexOf(".d.")) + ext; +} +function getJSExtensionForFile(fileName, options) { + return tryGetJSExtensionForFile(fileName, options) ?? Debug.fail(`Extension ${extensionFromPath(fileName)} is unsupported:: FileName:: ${fileName}`); +} +function tryGetJSExtensionForFile(fileName, options) { + const ext = tryGetExtensionFromPath2(fileName); + switch (ext) { + case ".ts" /* Ts */: + case ".d.ts" /* Dts */: + return ".js" /* Js */; + case ".tsx" /* Tsx */: + return options.jsx === 1 /* Preserve */ ? ".jsx" /* Jsx */ : ".js" /* Js */; + case ".js" /* Js */: + case ".jsx" /* Jsx */: + case ".json" /* Json */: + return ext; + case ".d.mts" /* Dmts */: + case ".mts" /* Mts */: + case ".mjs" /* Mjs */: + return ".mjs" /* Mjs */; + case ".d.cts" /* Dcts */: + case ".cts" /* Cts */: + case ".cjs" /* Cjs */: + return ".cjs" /* Cjs */; + default: + return void 0; + } +} +function getRelativePathIfInSameVolume(path, directoryPath, getCanonicalFileName) { + const relativePath = getRelativePathToDirectoryOrUrl( + directoryPath, + path, + directoryPath, + getCanonicalFileName, + /*isAbsolutePathAnUrl*/ + false + ); + return isRootedDiskPath(relativePath) ? void 0 : relativePath; +} +function isPathRelativeToParent(path) { + return startsWith(path, ".."); +} +function getDefaultResolutionModeForFile(file, host, compilerOptions) { + return isFullSourceFile(file) ? host.getDefaultResolutionModeForFile(file) : getDefaultResolutionModeForFileWorker(file, compilerOptions); +} +function prefersTsExtension(allowedEndings) { + const tsPriority = allowedEndings.indexOf(3 /* TsExtension */); + return tsPriority > -1 && tsPriority < allowedEndings.indexOf(2 /* JsExtension */); +} + +// src/compiler/checker.ts +var ambientModuleSymbolRegex = /^".+"$/; +var anon = "(anonymous)"; +var nextSymbolId = 1; +var nextNodeId = 1; +var nextMergeId = 1; +var nextFlowId = 1; +var TypeFacts = /* @__PURE__ */ ((TypeFacts3) => { + TypeFacts3[TypeFacts3["None"] = 0] = "None"; + TypeFacts3[TypeFacts3["TypeofEQString"] = 1] = "TypeofEQString"; + TypeFacts3[TypeFacts3["TypeofEQNumber"] = 2] = "TypeofEQNumber"; + TypeFacts3[TypeFacts3["TypeofEQBigInt"] = 4] = "TypeofEQBigInt"; + TypeFacts3[TypeFacts3["TypeofEQBoolean"] = 8] = "TypeofEQBoolean"; + TypeFacts3[TypeFacts3["TypeofEQSymbol"] = 16] = "TypeofEQSymbol"; + TypeFacts3[TypeFacts3["TypeofEQObject"] = 32] = "TypeofEQObject"; + TypeFacts3[TypeFacts3["TypeofEQFunction"] = 64] = "TypeofEQFunction"; + TypeFacts3[TypeFacts3["TypeofEQHostObject"] = 128] = "TypeofEQHostObject"; + TypeFacts3[TypeFacts3["TypeofNEString"] = 256] = "TypeofNEString"; + TypeFacts3[TypeFacts3["TypeofNENumber"] = 512] = "TypeofNENumber"; + TypeFacts3[TypeFacts3["TypeofNEBigInt"] = 1024] = "TypeofNEBigInt"; + TypeFacts3[TypeFacts3["TypeofNEBoolean"] = 2048] = "TypeofNEBoolean"; + TypeFacts3[TypeFacts3["TypeofNESymbol"] = 4096] = "TypeofNESymbol"; + TypeFacts3[TypeFacts3["TypeofNEObject"] = 8192] = "TypeofNEObject"; + TypeFacts3[TypeFacts3["TypeofNEFunction"] = 16384] = "TypeofNEFunction"; + TypeFacts3[TypeFacts3["TypeofNEHostObject"] = 32768] = "TypeofNEHostObject"; + TypeFacts3[TypeFacts3["EQUndefined"] = 65536] = "EQUndefined"; + TypeFacts3[TypeFacts3["EQNull"] = 131072] = "EQNull"; + TypeFacts3[TypeFacts3["EQUndefinedOrNull"] = 262144] = "EQUndefinedOrNull"; + TypeFacts3[TypeFacts3["NEUndefined"] = 524288] = "NEUndefined"; + TypeFacts3[TypeFacts3["NENull"] = 1048576] = "NENull"; + TypeFacts3[TypeFacts3["NEUndefinedOrNull"] = 2097152] = "NEUndefinedOrNull"; + TypeFacts3[TypeFacts3["Truthy"] = 4194304] = "Truthy"; + TypeFacts3[TypeFacts3["Falsy"] = 8388608] = "Falsy"; + TypeFacts3[TypeFacts3["IsUndefined"] = 16777216] = "IsUndefined"; + TypeFacts3[TypeFacts3["IsNull"] = 33554432] = "IsNull"; + TypeFacts3[TypeFacts3["IsUndefinedOrNull"] = 50331648] = "IsUndefinedOrNull"; + TypeFacts3[TypeFacts3["All"] = 134217727] = "All"; + TypeFacts3[TypeFacts3["BaseStringStrictFacts"] = 3735041] = "BaseStringStrictFacts"; + TypeFacts3[TypeFacts3["BaseStringFacts"] = 12582401] = "BaseStringFacts"; + TypeFacts3[TypeFacts3["StringStrictFacts"] = 16317953] = "StringStrictFacts"; + TypeFacts3[TypeFacts3["StringFacts"] = 16776705] = "StringFacts"; + TypeFacts3[TypeFacts3["EmptyStringStrictFacts"] = 12123649] = "EmptyStringStrictFacts"; + TypeFacts3[TypeFacts3["EmptyStringFacts"] = 12582401 /* BaseStringFacts */] = "EmptyStringFacts"; + TypeFacts3[TypeFacts3["NonEmptyStringStrictFacts"] = 7929345] = "NonEmptyStringStrictFacts"; + TypeFacts3[TypeFacts3["NonEmptyStringFacts"] = 16776705] = "NonEmptyStringFacts"; + TypeFacts3[TypeFacts3["BaseNumberStrictFacts"] = 3734786] = "BaseNumberStrictFacts"; + TypeFacts3[TypeFacts3["BaseNumberFacts"] = 12582146] = "BaseNumberFacts"; + TypeFacts3[TypeFacts3["NumberStrictFacts"] = 16317698] = "NumberStrictFacts"; + TypeFacts3[TypeFacts3["NumberFacts"] = 16776450] = "NumberFacts"; + TypeFacts3[TypeFacts3["ZeroNumberStrictFacts"] = 12123394] = "ZeroNumberStrictFacts"; + TypeFacts3[TypeFacts3["ZeroNumberFacts"] = 12582146 /* BaseNumberFacts */] = "ZeroNumberFacts"; + TypeFacts3[TypeFacts3["NonZeroNumberStrictFacts"] = 7929090] = "NonZeroNumberStrictFacts"; + TypeFacts3[TypeFacts3["NonZeroNumberFacts"] = 16776450] = "NonZeroNumberFacts"; + TypeFacts3[TypeFacts3["BaseBigIntStrictFacts"] = 3734276] = "BaseBigIntStrictFacts"; + TypeFacts3[TypeFacts3["BaseBigIntFacts"] = 12581636] = "BaseBigIntFacts"; + TypeFacts3[TypeFacts3["BigIntStrictFacts"] = 16317188] = "BigIntStrictFacts"; + TypeFacts3[TypeFacts3["BigIntFacts"] = 16775940] = "BigIntFacts"; + TypeFacts3[TypeFacts3["ZeroBigIntStrictFacts"] = 12122884] = "ZeroBigIntStrictFacts"; + TypeFacts3[TypeFacts3["ZeroBigIntFacts"] = 12581636 /* BaseBigIntFacts */] = "ZeroBigIntFacts"; + TypeFacts3[TypeFacts3["NonZeroBigIntStrictFacts"] = 7928580] = "NonZeroBigIntStrictFacts"; + TypeFacts3[TypeFacts3["NonZeroBigIntFacts"] = 16775940] = "NonZeroBigIntFacts"; + TypeFacts3[TypeFacts3["BaseBooleanStrictFacts"] = 3733256] = "BaseBooleanStrictFacts"; + TypeFacts3[TypeFacts3["BaseBooleanFacts"] = 12580616] = "BaseBooleanFacts"; + TypeFacts3[TypeFacts3["BooleanStrictFacts"] = 16316168] = "BooleanStrictFacts"; + TypeFacts3[TypeFacts3["BooleanFacts"] = 16774920] = "BooleanFacts"; + TypeFacts3[TypeFacts3["FalseStrictFacts"] = 12121864] = "FalseStrictFacts"; + TypeFacts3[TypeFacts3["FalseFacts"] = 12580616 /* BaseBooleanFacts */] = "FalseFacts"; + TypeFacts3[TypeFacts3["TrueStrictFacts"] = 7927560] = "TrueStrictFacts"; + TypeFacts3[TypeFacts3["TrueFacts"] = 16774920] = "TrueFacts"; + TypeFacts3[TypeFacts3["SymbolStrictFacts"] = 7925520] = "SymbolStrictFacts"; + TypeFacts3[TypeFacts3["SymbolFacts"] = 16772880] = "SymbolFacts"; + TypeFacts3[TypeFacts3["ObjectStrictFacts"] = 7888800] = "ObjectStrictFacts"; + TypeFacts3[TypeFacts3["ObjectFacts"] = 16736160] = "ObjectFacts"; + TypeFacts3[TypeFacts3["FunctionStrictFacts"] = 7880640] = "FunctionStrictFacts"; + TypeFacts3[TypeFacts3["FunctionFacts"] = 16728e3] = "FunctionFacts"; + TypeFacts3[TypeFacts3["VoidFacts"] = 9830144] = "VoidFacts"; + TypeFacts3[TypeFacts3["UndefinedFacts"] = 26607360] = "UndefinedFacts"; + TypeFacts3[TypeFacts3["NullFacts"] = 42917664] = "NullFacts"; + TypeFacts3[TypeFacts3["EmptyObjectStrictFacts"] = 83427327] = "EmptyObjectStrictFacts"; + TypeFacts3[TypeFacts3["EmptyObjectFacts"] = 83886079] = "EmptyObjectFacts"; + TypeFacts3[TypeFacts3["UnknownFacts"] = 83886079] = "UnknownFacts"; + TypeFacts3[TypeFacts3["AllTypeofNE"] = 556800] = "AllTypeofNE"; + TypeFacts3[TypeFacts3["OrFactsMask"] = 8256] = "OrFactsMask"; + TypeFacts3[TypeFacts3["AndFactsMask"] = 134209471] = "AndFactsMask"; + return TypeFacts3; +})(TypeFacts || {}); +var typeofNEFacts = new Map(Object.entries({ + string: 256 /* TypeofNEString */, + number: 512 /* TypeofNENumber */, + bigint: 1024 /* TypeofNEBigInt */, + boolean: 2048 /* TypeofNEBoolean */, + symbol: 4096 /* TypeofNESymbol */, + undefined: 524288 /* NEUndefined */, + object: 8192 /* TypeofNEObject */, + function: 16384 /* TypeofNEFunction */ +})); +var CheckMode = /* @__PURE__ */ ((CheckMode3) => { + CheckMode3[CheckMode3["Normal"] = 0] = "Normal"; + CheckMode3[CheckMode3["Contextual"] = 1] = "Contextual"; + CheckMode3[CheckMode3["Inferential"] = 2] = "Inferential"; + CheckMode3[CheckMode3["SkipContextSensitive"] = 4] = "SkipContextSensitive"; + CheckMode3[CheckMode3["SkipGenericFunctions"] = 8] = "SkipGenericFunctions"; + CheckMode3[CheckMode3["IsForSignatureHelp"] = 16] = "IsForSignatureHelp"; + CheckMode3[CheckMode3["RestBindingElement"] = 32] = "RestBindingElement"; + CheckMode3[CheckMode3["TypeOnly"] = 64] = "TypeOnly"; + return CheckMode3; +})(CheckMode || {}); +var SignatureCheckMode = /* @__PURE__ */ ((SignatureCheckMode3) => { + SignatureCheckMode3[SignatureCheckMode3["None"] = 0] = "None"; + SignatureCheckMode3[SignatureCheckMode3["BivariantCallback"] = 1] = "BivariantCallback"; + SignatureCheckMode3[SignatureCheckMode3["StrictCallback"] = 2] = "StrictCallback"; + SignatureCheckMode3[SignatureCheckMode3["IgnoreReturnTypes"] = 4] = "IgnoreReturnTypes"; + SignatureCheckMode3[SignatureCheckMode3["StrictArity"] = 8] = "StrictArity"; + SignatureCheckMode3[SignatureCheckMode3["StrictTopSignature"] = 16] = "StrictTopSignature"; + SignatureCheckMode3[SignatureCheckMode3["Callback"] = 3] = "Callback"; + return SignatureCheckMode3; +})(SignatureCheckMode || {}); +var isNotOverloadAndNotAccessor = and(isNotOverload, isNotAccessor); +var intrinsicTypeKinds = new Map(Object.entries({ + Uppercase: 0 /* Uppercase */, + Lowercase: 1 /* Lowercase */, + Capitalize: 2 /* Capitalize */, + Uncapitalize: 3 /* Uncapitalize */, + NoInfer: 4 /* NoInfer */ +})); +var SymbolLinks = class { +}; +function NodeLinks() { + this.flags = 0 /* None */; +} +function getNodeId(node) { + if (!node.id) { + node.id = nextNodeId; + nextNodeId++; + } + return node.id; +} +function getSymbolId(symbol) { + if (!symbol.id) { + symbol.id = nextSymbolId; + nextSymbolId++; + } + return symbol.id; +} +function isInstantiatedModule(node, preserveConstEnums) { + const moduleState = getModuleInstanceState(node); + return moduleState === 1 /* Instantiated */ || preserveConstEnums && moduleState === 2 /* ConstEnumOnly */; +} +function createTypeChecker(host) { + var deferredDiagnosticsCallbacks = []; + var addLazyDiagnostic = (arg) => { + deferredDiagnosticsCallbacks.push(arg); + }; + var cancellationToken; + var scanner2; + var Symbol48 = objectAllocator.getSymbolConstructor(); + var Type29 = objectAllocator.getTypeConstructor(); + var Signature13 = objectAllocator.getSignatureConstructor(); + var typeCount = 0; + var symbolCount = 0; + var totalInstantiationCount = 0; + var instantiationCount = 0; + var instantiationDepth = 0; + var inlineLevel = 0; + var currentNode; + var varianceTypeParameter; + var isInferencePartiallyBlocked = false; + var emptySymbols = createSymbolTable(); + var arrayVariances = [1 /* Covariant */]; + var compilerOptions = host.getCompilerOptions(); + var languageVersion = getEmitScriptTarget(compilerOptions); + var moduleKind = getEmitModuleKind(compilerOptions); + var legacyDecorators = !!compilerOptions.experimentalDecorators; + var useDefineForClassFields = getUseDefineForClassFields(compilerOptions); + var emitStandardClassFields = getEmitStandardClassFields(compilerOptions); + var allowSyntheticDefaultImports = getAllowSyntheticDefaultImports(compilerOptions); + var strictNullChecks = getStrictOptionValue(compilerOptions, "strictNullChecks"); + var strictFunctionTypes = getStrictOptionValue(compilerOptions, "strictFunctionTypes"); + var strictBindCallApply = getStrictOptionValue(compilerOptions, "strictBindCallApply"); + var strictPropertyInitialization = getStrictOptionValue(compilerOptions, "strictPropertyInitialization"); + var strictBuiltinIteratorReturn = getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); + var noImplicitAny = getStrictOptionValue(compilerOptions, "noImplicitAny"); + var noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); + var useUnknownInCatchVariables = getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables"); + var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes; + var noUncheckedSideEffectImports = !!compilerOptions.noUncheckedSideEffectImports; + var checkBinaryExpression = createCheckBinaryExpression(); + var emitResolver = createResolver(); + var nodeBuilder = createNodeBuilder(); + var syntacticNodeBuilder = createSyntacticTypeNodeBuilder(compilerOptions, nodeBuilder.syntacticBuilderResolver); + var evaluate = createEvaluator({ + evaluateElementAccessExpression, + evaluateEntityNameExpression + }); + var globals = createSymbolTable(); + var undefinedSymbol = createSymbol(4 /* Property */, "undefined"); + undefinedSymbol.declarations = []; + var globalThisSymbol = createSymbol(1536 /* Module */, "globalThis", 8 /* Readonly */); + globalThisSymbol.exports = globals; + globalThisSymbol.declarations = []; + globals.set(globalThisSymbol.escapedName, globalThisSymbol); + var argumentsSymbol = createSymbol(4 /* Property */, "arguments"); + var requireSymbol = createSymbol(4 /* Property */, "require"); + var isolatedModulesLikeFlagName = compilerOptions.verbatimModuleSyntax ? "verbatimModuleSyntax" : "isolatedModules"; + var canCollectSymbolAliasAccessabilityData = !compilerOptions.verbatimModuleSyntax; + var apparentArgumentCount; + var lastGetCombinedNodeFlagsNode; + var lastGetCombinedNodeFlagsResult = 0 /* None */; + var lastGetCombinedModifierFlagsNode; + var lastGetCombinedModifierFlagsResult = 0 /* None */; + var resolveName = createNameResolver({ + compilerOptions, + requireSymbol, + argumentsSymbol, + globals, + getSymbolOfDeclaration, + error: error2, + getRequiresScopeChangeCache, + setRequiresScopeChangeCache, + lookup: getSymbol2, + onPropertyWithInvalidInitializer: checkAndReportErrorForInvalidInitializer, + onFailedToResolveSymbol, + onSuccessfullyResolvedSymbol + }); + var resolveNameForSymbolSuggestion = createNameResolver({ + compilerOptions, + requireSymbol, + argumentsSymbol, + globals, + getSymbolOfDeclaration, + error: error2, + getRequiresScopeChangeCache, + setRequiresScopeChangeCache, + lookup: getSuggestionForSymbolNameLookup + }); + const checker = { + getNodeCount: () => reduceLeft(host.getSourceFiles(), (n, s) => n + s.nodeCount, 0), + getIdentifierCount: () => reduceLeft(host.getSourceFiles(), (n, s) => n + s.identifierCount, 0), + getSymbolCount: () => reduceLeft(host.getSourceFiles(), (n, s) => n + s.symbolCount, symbolCount), + getTypeCount: () => typeCount, + getInstantiationCount: () => totalInstantiationCount, + getRelationCacheSizes: () => ({ + assignable: assignableRelation.size, + identity: identityRelation.size, + subtype: subtypeRelation.size, + strictSubtype: strictSubtypeRelation.size + }), + isUndefinedSymbol: (symbol) => symbol === undefinedSymbol, + isArgumentsSymbol: (symbol) => symbol === argumentsSymbol, + isUnknownSymbol: (symbol) => symbol === unknownSymbol, + getMergedSymbol, + symbolIsValue, + getDiagnostics: getDiagnostics2, + getGlobalDiagnostics, + getRecursionIdentity, + getUnmatchedProperties, + getTypeOfSymbolAtLocation: (symbol, locationIn) => { + const location = getParseTreeNode(locationIn); + return location ? getTypeOfSymbolAtLocation(symbol, location) : errorType; + }, + getTypeOfSymbol, + getSymbolsOfParameterPropertyDeclaration: (parameterIn, parameterName) => { + const parameter = getParseTreeNode(parameterIn, isParameter); + if (parameter === void 0) return Debug.fail("Cannot get symbols of a synthetic parameter that cannot be resolved to a parse-tree node."); + Debug.assert(isParameterPropertyDeclaration(parameter, parameter.parent)); + return getSymbolsOfParameterPropertyDeclaration(parameter, escapeLeadingUnderscores(parameterName)); + }, + getDeclaredTypeOfSymbol, + getPropertiesOfType, + getPropertyOfType: (type, name) => getPropertyOfType(type, escapeLeadingUnderscores(name)), + getPrivateIdentifierPropertyOfType: (leftType, name, location) => { + const node = getParseTreeNode(location); + if (!node) { + return void 0; + } + const propName = escapeLeadingUnderscores(name); + const lexicallyScopedIdentifier = lookupSymbolForPrivateIdentifierDeclaration(propName, node); + return lexicallyScopedIdentifier ? getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) : void 0; + }, + getTypeOfPropertyOfType: (type, name) => getTypeOfPropertyOfType(type, escapeLeadingUnderscores(name)), + getIndexInfoOfType: (type, kind) => getIndexInfoOfType(type, kind === 0 /* String */ ? stringType : numberType), + getIndexInfosOfType, + getIndexInfosOfIndexSymbol, + getSignaturesOfType, + getIndexTypeOfType: (type, kind) => getIndexTypeOfType(type, kind === 0 /* String */ ? stringType : numberType), + getIndexType: (type) => getIndexType(type), + getBaseTypes, + getBaseTypeOfLiteralType, + getWidenedType, + getWidenedLiteralType, + fillMissingTypeArguments, + getTypeFromTypeNode: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isTypeNode); + return node ? getTypeFromTypeNode(node) : errorType; + }, + getParameterType: getTypeAtPosition, + getParameterIdentifierInfoAtPosition, + getPromisedTypeOfPromise, + getAwaitedType: (type) => getAwaitedType(type), + getReturnTypeOfSignature, + isNullableType, + getNullableType, + getNonNullableType, + getNonOptionalType: removeOptionalTypeMarker, + getTypeArguments, + typeToTypeNode: nodeBuilder.typeToTypeNode, + typePredicateToTypePredicateNode: nodeBuilder.typePredicateToTypePredicateNode, + indexInfoToIndexSignatureDeclaration: nodeBuilder.indexInfoToIndexSignatureDeclaration, + signatureToSignatureDeclaration: nodeBuilder.signatureToSignatureDeclaration, + symbolToEntityName: nodeBuilder.symbolToEntityName, + symbolToExpression: nodeBuilder.symbolToExpression, + symbolToNode: nodeBuilder.symbolToNode, + symbolToTypeParameterDeclarations: nodeBuilder.symbolToTypeParameterDeclarations, + symbolToParameterDeclaration: nodeBuilder.symbolToParameterDeclaration, + typeParameterToDeclaration: nodeBuilder.typeParameterToDeclaration, + getSymbolsInScope: (locationIn, meaning) => { + const location = getParseTreeNode(locationIn); + return location ? getSymbolsInScope(location, meaning) : []; + }, + getSymbolAtLocation: (nodeIn) => { + const node = getParseTreeNode(nodeIn); + return node ? getSymbolAtLocation( + node, + /*ignoreErrors*/ + true + ) : void 0; + }, + getIndexInfosAtLocation: (nodeIn) => { + const node = getParseTreeNode(nodeIn); + return node ? getIndexInfosAtLocation(node) : void 0; + }, + getShorthandAssignmentValueSymbol: (nodeIn) => { + const node = getParseTreeNode(nodeIn); + return node ? getShorthandAssignmentValueSymbol(node) : void 0; + }, + getExportSpecifierLocalTargetSymbol: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isExportSpecifier); + return node ? getExportSpecifierLocalTargetSymbol(node) : void 0; + }, + getExportSymbolOfSymbol(symbol) { + return getMergedSymbol(symbol.exportSymbol || symbol); + }, + getTypeAtLocation: (nodeIn) => { + const node = getParseTreeNode(nodeIn); + return node ? getTypeOfNode(node) : errorType; + }, + getTypeOfAssignmentPattern: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isAssignmentPattern); + return node && getTypeOfAssignmentPattern(node) || errorType; + }, + getPropertySymbolOfDestructuringAssignment: (locationIn) => { + const location = getParseTreeNode(locationIn, isIdentifier); + return location ? getPropertySymbolOfDestructuringAssignment(location) : void 0; + }, + signatureToString: (signature, enclosingDeclaration, flags, kind) => { + return signatureToString(signature, getParseTreeNode(enclosingDeclaration), flags, kind); + }, + typeToString: (type, enclosingDeclaration, flags) => { + return typeToString(type, getParseTreeNode(enclosingDeclaration), flags); + }, + symbolToString: (symbol, enclosingDeclaration, meaning, flags) => { + return symbolToString(symbol, getParseTreeNode(enclosingDeclaration), meaning, flags); + }, + typePredicateToString: (predicate, enclosingDeclaration, flags) => { + return typePredicateToString(predicate, getParseTreeNode(enclosingDeclaration), flags); + }, + writeSignature: (signature, enclosingDeclaration, flags, kind, writer, maximumLength, verbosityLevel, out) => { + return signatureToString(signature, getParseTreeNode(enclosingDeclaration), flags, kind, writer, maximumLength, verbosityLevel, out); + }, + writeType: (type, enclosingDeclaration, flags, writer, maximumLength, verbosityLevel, out) => { + return typeToString(type, getParseTreeNode(enclosingDeclaration), flags, writer, maximumLength, verbosityLevel, out); + }, + writeSymbol: (symbol, enclosingDeclaration, meaning, flags, writer) => { + return symbolToString(symbol, getParseTreeNode(enclosingDeclaration), meaning, flags, writer); + }, + writeTypePredicate: (predicate, enclosingDeclaration, flags, writer) => { + return typePredicateToString(predicate, getParseTreeNode(enclosingDeclaration), flags, writer); + }, + getAugmentedPropertiesOfType, + getRootSymbols, + getSymbolOfExpando, + getContextualType: (nodeIn, contextFlags) => { + const node = getParseTreeNode(nodeIn, isExpression); + if (!node) { + return void 0; + } + if (contextFlags & 4 /* Completions */) { + return runWithInferenceBlockedFromSourceNode(node, () => getContextualType2(node, contextFlags)); + } + return getContextualType2(node, contextFlags); + }, + getContextualTypeForObjectLiteralElement: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isObjectLiteralElementLike); + return node ? getContextualTypeForObjectLiteralElement( + node, + /*contextFlags*/ + void 0 + ) : void 0; + }, + getContextualTypeForArgumentAtIndex: (nodeIn, argIndex) => { + const node = getParseTreeNode(nodeIn, isCallLikeExpression); + return node && getContextualTypeForArgumentAtIndex(node, argIndex); + }, + getContextualTypeForJsxAttribute: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isJsxAttributeLike); + return node && getContextualTypeForJsxAttribute( + node, + /*contextFlags*/ + void 0 + ); + }, + isContextSensitive, + getTypeOfPropertyOfContextualType, + getFullyQualifiedName, + getResolvedSignature: (node, candidatesOutArray, argumentCount) => getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, 0 /* Normal */), + getCandidateSignaturesForStringLiteralCompletions, + getResolvedSignatureForSignatureHelp: (node, candidatesOutArray, argumentCount) => runWithoutResolvedSignatureCaching(node, () => getResolvedSignatureWorker(node, candidatesOutArray, argumentCount, 16 /* IsForSignatureHelp */)), + getExpandedParameters, + hasEffectiveRestParameter, + containsArgumentsReference, + getConstantValue: (nodeIn) => { + const node = getParseTreeNode(nodeIn, canHaveConstantValue); + return node ? getConstantValue2(node) : void 0; + }, + isValidPropertyAccess: (nodeIn, propertyName) => { + const node = getParseTreeNode(nodeIn, isPropertyAccessOrQualifiedNameOrImportTypeNode); + return !!node && isValidPropertyAccess(node, escapeLeadingUnderscores(propertyName)); + }, + isValidPropertyAccessForCompletions: (nodeIn, type, property) => { + const node = getParseTreeNode(nodeIn, isPropertyAccessExpression); + return !!node && isValidPropertyAccessForCompletions(node, type, property); + }, + getSignatureFromDeclaration: (declarationIn) => { + const declaration = getParseTreeNode(declarationIn, isFunctionLike); + return declaration ? getSignatureFromDeclaration(declaration) : void 0; + }, + isImplementationOfOverload: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isFunctionLike); + return node ? isImplementationOfOverload(node) : void 0; + }, + getImmediateAliasedSymbol, + getAliasedSymbol: resolveAlias, + getEmitResolver, + requiresAddingImplicitUndefined, + getExportsOfModule: getExportsOfModuleAsArray, + getExportsAndPropertiesOfModule, + forEachExportAndPropertyOfModule, + getSymbolWalker: createGetSymbolWalker( + getRestTypeOfSignature, + getTypePredicateOfSignature, + getReturnTypeOfSignature, + getBaseTypes, + resolveStructuredTypeMembers, + getTypeOfSymbol, + getResolvedSymbol, + getConstraintOfTypeParameter, + getFirstIdentifier, + getTypeArguments + ), + getAmbientModules, + getJsxIntrinsicTagNamesAt, + isOptionalParameter: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isParameter); + return node ? isOptionalParameter(node) : false; + }, + tryGetMemberInModuleExports: (name, symbol) => tryGetMemberInModuleExports(escapeLeadingUnderscores(name), symbol), + tryGetMemberInModuleExportsAndProperties: (name, symbol) => tryGetMemberInModuleExportsAndProperties(escapeLeadingUnderscores(name), symbol), + tryFindAmbientModule: (moduleName) => tryFindAmbientModule( + moduleName, + /*withAugmentations*/ + true + ), + getApparentType, + getUnionType, + isTypeAssignableTo, + createAnonymousType, + createSignature, + createSymbol, + createIndexInfo, + getAnyType: () => anyType, + getStringType: () => stringType, + getStringLiteralType, + getNumberType: () => numberType, + getNumberLiteralType, + getBigIntType: () => bigintType, + getBigIntLiteralType, + getUnknownType: () => unknownType, + createPromiseType, + createArrayType, + getElementTypeOfArrayType, + getBooleanType: () => booleanType, + getFalseType: (fresh) => fresh ? falseType : regularFalseType, + getTrueType: (fresh) => fresh ? trueType : regularTrueType, + getVoidType: () => voidType, + getUndefinedType: () => undefinedType, + getNullType: () => nullType, + getESSymbolType: () => esSymbolType, + getNeverType: () => neverType, + getNonPrimitiveType: () => nonPrimitiveType, + getOptionalType: () => optionalType, + getPromiseType: () => getGlobalPromiseType( + /*reportErrors*/ + false + ), + getPromiseLikeType: () => getGlobalPromiseLikeType( + /*reportErrors*/ + false + ), + getAnyAsyncIterableType: () => { + const type = getGlobalAsyncIterableType( + /*reportErrors*/ + false + ); + if (type === emptyGenericType) return void 0; + return createTypeReference(type, [anyType, anyType, anyType]); + }, + isSymbolAccessible, + isArrayType, + isTupleType, + isArrayLikeType, + isEmptyAnonymousObjectType, + isTypeInvalidDueToUnionDiscriminant, + getExactOptionalProperties, + getAllPossiblePropertiesOfTypes, + getSuggestedSymbolForNonexistentProperty, + getSuggestedSymbolForNonexistentJSXAttribute, + getSuggestedSymbolForNonexistentSymbol: (location, name, meaning) => getSuggestedSymbolForNonexistentSymbol(location, escapeLeadingUnderscores(name), meaning), + getSuggestedSymbolForNonexistentModule, + getSuggestedSymbolForNonexistentClassMember, + getBaseConstraintOfType, + getDefaultFromTypeParameter: (type) => type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : void 0, + resolveName(name, location, meaning, excludeGlobals) { + return resolveName( + location, + escapeLeadingUnderscores(name), + meaning, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false, + excludeGlobals + ); + }, + getJsxNamespace: (n) => unescapeLeadingUnderscores(getJsxNamespace(n)), + getJsxFragmentFactory: (n) => { + const jsxFragmentFactory = getJsxFragmentFactoryEntity(n); + return jsxFragmentFactory && unescapeLeadingUnderscores(getFirstIdentifier(jsxFragmentFactory).escapedText); + }, + getAccessibleSymbolChain, + getTypePredicateOfSignature, + resolveExternalModuleName: (moduleSpecifierIn) => { + const moduleSpecifier = getParseTreeNode(moduleSpecifierIn, isExpression); + return moduleSpecifier && resolveExternalModuleName( + moduleSpecifier, + moduleSpecifier, + /*ignoreErrors*/ + true + ); + }, + resolveExternalModuleSymbol, + tryGetThisTypeAt: (nodeIn, includeGlobalThis, container) => { + const node = getParseTreeNode(nodeIn); + return node && tryGetThisTypeAt(node, includeGlobalThis, container); + }, + getTypeArgumentConstraint: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isTypeNode); + return node && getTypeArgumentConstraint(node); + }, + getSuggestionDiagnostics: (fileIn, ct) => { + const file = getParseTreeNode(fileIn, isSourceFile) || Debug.fail("Could not determine parsed source file."); + if (skipTypeChecking(file, compilerOptions, host)) { + return emptyArray; + } + let diagnostics2; + try { + cancellationToken = ct; + checkSourceFileWithEagerDiagnostics(file); + Debug.assert(!!(getNodeLinks(file).flags & 1 /* TypeChecked */)); + diagnostics2 = addRange(diagnostics2, suggestionDiagnostics.getDiagnostics(file.fileName)); + checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(file), (containingNode, kind, diag2) => { + if (!containsParseError(containingNode) && !unusedIsError(kind, !!(containingNode.flags & 33554432 /* Ambient */))) { + (diagnostics2 || (diagnostics2 = [])).push({ ...diag2, category: 2 /* Suggestion */ }); + } + }); + return diagnostics2 || emptyArray; + } finally { + cancellationToken = void 0; + } + }, + runWithCancellationToken: (token, callback) => { + try { + cancellationToken = token; + return callback(checker); + } finally { + cancellationToken = void 0; + } + }, + getLocalTypeParametersOfClassOrInterfaceOrTypeAlias, + isDeclarationVisible, + isPropertyAccessible, + getTypeOnlyAliasDeclaration, + getMemberOverrideModifierStatus, + isTypeParameterPossiblyReferenced, + typeHasCallOrConstructSignatures, + getSymbolFlags, + getTypeArgumentsForResolvedSignature, + isLibType + }; + function getTypeArgumentsForResolvedSignature(signature) { + if (signature.mapper === void 0) return void 0; + return instantiateTypes((signature.target || signature).typeParameters, signature.mapper); + } + function getCandidateSignaturesForStringLiteralCompletions(call, editingArgument) { + const candidatesSet = /* @__PURE__ */ new Set(); + const candidates = []; + runWithInferenceBlockedFromSourceNode(editingArgument, () => getResolvedSignatureWorker( + call, + candidates, + /*argumentCount*/ + void 0, + 0 /* Normal */ + )); + for (const candidate of candidates) { + candidatesSet.add(candidate); + } + candidates.length = 0; + runWithoutResolvedSignatureCaching(editingArgument, () => getResolvedSignatureWorker( + call, + candidates, + /*argumentCount*/ + void 0, + 0 /* Normal */ + )); + for (const candidate of candidates) { + candidatesSet.add(candidate); + } + return arrayFrom(candidatesSet); + } + function runWithoutResolvedSignatureCaching(node, fn) { + node = findAncestor(node, isCallLikeOrFunctionLikeExpression); + if (node) { + const cachedResolvedSignatures = []; + const cachedTypes2 = []; + while (node) { + const nodeLinks2 = getNodeLinks(node); + cachedResolvedSignatures.push([nodeLinks2, nodeLinks2.resolvedSignature]); + nodeLinks2.resolvedSignature = void 0; + if (isFunctionExpressionOrArrowFunction(node)) { + const symbolLinks2 = getSymbolLinks(getSymbolOfDeclaration(node)); + const type = symbolLinks2.type; + cachedTypes2.push([symbolLinks2, type]); + symbolLinks2.type = void 0; + } + node = findAncestor(node.parent, isCallLikeOrFunctionLikeExpression); + } + const result = fn(); + for (const [nodeLinks2, resolvedSignature] of cachedResolvedSignatures) { + nodeLinks2.resolvedSignature = resolvedSignature; + } + for (const [symbolLinks2, type] of cachedTypes2) { + symbolLinks2.type = type; + } + return result; + } + return fn(); + } + function runWithInferenceBlockedFromSourceNode(node, fn) { + const containingCall = findAncestor(node, isCallLikeExpression); + if (containingCall) { + let toMarkSkip = node; + do { + getNodeLinks(toMarkSkip).skipDirectInference = true; + toMarkSkip = toMarkSkip.parent; + } while (toMarkSkip && toMarkSkip !== containingCall); + } + isInferencePartiallyBlocked = true; + const result = runWithoutResolvedSignatureCaching(node, fn); + isInferencePartiallyBlocked = false; + if (containingCall) { + let toMarkSkip = node; + do { + getNodeLinks(toMarkSkip).skipDirectInference = void 0; + toMarkSkip = toMarkSkip.parent; + } while (toMarkSkip && toMarkSkip !== containingCall); + } + return result; + } + function getResolvedSignatureWorker(nodeIn, candidatesOutArray, argumentCount, checkMode) { + const node = getParseTreeNode(nodeIn, isCallLikeExpression); + apparentArgumentCount = argumentCount; + const res = !node ? void 0 : getResolvedSignature(node, candidatesOutArray, checkMode); + apparentArgumentCount = void 0; + return res; + } + var tupleTypes = /* @__PURE__ */ new Map(); + var unionTypes = /* @__PURE__ */ new Map(); + var unionOfUnionTypes = /* @__PURE__ */ new Map(); + var intersectionTypes = /* @__PURE__ */ new Map(); + var stringLiteralTypes = /* @__PURE__ */ new Map(); + var numberLiteralTypes = /* @__PURE__ */ new Map(); + var bigIntLiteralTypes = /* @__PURE__ */ new Map(); + var enumLiteralTypes = /* @__PURE__ */ new Map(); + var indexedAccessTypes = /* @__PURE__ */ new Map(); + var templateLiteralTypes = /* @__PURE__ */ new Map(); + var stringMappingTypes = /* @__PURE__ */ new Map(); + var substitutionTypes = /* @__PURE__ */ new Map(); + var subtypeReductionCache = /* @__PURE__ */ new Map(); + var decoratorContextOverrideTypeCache = /* @__PURE__ */ new Map(); + var cachedTypes = /* @__PURE__ */ new Map(); + var evolvingArrayTypes = []; + var undefinedProperties = /* @__PURE__ */ new Map(); + var markerTypes = /* @__PURE__ */ new Set(); + var unknownSymbol = createSymbol(4 /* Property */, "unknown"); + var resolvingSymbol = createSymbol(0, "__resolving__" /* Resolving */); + var unresolvedSymbols = /* @__PURE__ */ new Map(); + var errorTypes = /* @__PURE__ */ new Map(); + var seenIntrinsicNames = /* @__PURE__ */ new Set(); + var anyType = createIntrinsicType(1 /* Any */, "any"); + var autoType = createIntrinsicType(1 /* Any */, "any", 262144 /* NonInferrableType */, "auto"); + var wildcardType = createIntrinsicType( + 1 /* Any */, + "any", + /*objectFlags*/ + void 0, + "wildcard" + ); + var blockedStringType = createIntrinsicType( + 1 /* Any */, + "any", + /*objectFlags*/ + void 0, + "blocked string" + ); + var errorType = createIntrinsicType(1 /* Any */, "error"); + var unresolvedType = createIntrinsicType(1 /* Any */, "unresolved"); + var nonInferrableAnyType = createIntrinsicType(1 /* Any */, "any", 65536 /* ContainsWideningType */, "non-inferrable"); + var intrinsicMarkerType = createIntrinsicType(1 /* Any */, "intrinsic"); + var unknownType = createIntrinsicType(2 /* Unknown */, "unknown"); + var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined"); + var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 65536 /* ContainsWideningType */, "widening"); + var missingType = createIntrinsicType( + 32768 /* Undefined */, + "undefined", + /*objectFlags*/ + void 0, + "missing" + ); + var undefinedOrMissingType = exactOptionalPropertyTypes ? missingType : undefinedType; + var optionalType = createIntrinsicType( + 32768 /* Undefined */, + "undefined", + /*objectFlags*/ + void 0, + "optional" + ); + var nullType = createIntrinsicType(65536 /* Null */, "null"); + var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 65536 /* ContainsWideningType */, "widening"); + var stringType = createIntrinsicType(4 /* String */, "string"); + var numberType = createIntrinsicType(8 /* Number */, "number"); + var bigintType = createIntrinsicType(64 /* BigInt */, "bigint"); + var falseType = createIntrinsicType( + 512 /* BooleanLiteral */, + "false", + /*objectFlags*/ + void 0, + "fresh" + ); + var regularFalseType = createIntrinsicType(512 /* BooleanLiteral */, "false"); + var trueType = createIntrinsicType( + 512 /* BooleanLiteral */, + "true", + /*objectFlags*/ + void 0, + "fresh" + ); + var regularTrueType = createIntrinsicType(512 /* BooleanLiteral */, "true"); + trueType.regularType = regularTrueType; + trueType.freshType = trueType; + regularTrueType.regularType = regularTrueType; + regularTrueType.freshType = trueType; + falseType.regularType = regularFalseType; + falseType.freshType = falseType; + regularFalseType.regularType = regularFalseType; + regularFalseType.freshType = falseType; + var booleanType = getUnionType([regularFalseType, regularTrueType]); + var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol"); + var voidType = createIntrinsicType(16384 /* Void */, "void"); + var neverType = createIntrinsicType(131072 /* Never */, "never"); + var silentNeverType = createIntrinsicType(131072 /* Never */, "never", 262144 /* NonInferrableType */, "silent"); + var implicitNeverType = createIntrinsicType( + 131072 /* Never */, + "never", + /*objectFlags*/ + void 0, + "implicit" + ); + var unreachableNeverType = createIntrinsicType( + 131072 /* Never */, + "never", + /*objectFlags*/ + void 0, + "unreachable" + ); + var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object"); + var stringOrNumberType = getUnionType([stringType, numberType]); + var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]); + var numberOrBigIntType = getUnionType([numberType, bigintType]); + var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]); + var numericStringType = getTemplateLiteralType(["", ""], [numberType]); + var restrictiveMapper = makeFunctionTypeMapper((t) => t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t, () => "(restrictive mapper)"); + var permissiveMapper = makeFunctionTypeMapper((t) => t.flags & 262144 /* TypeParameter */ ? wildcardType : t, () => "(permissive mapper)"); + var uniqueLiteralType = createIntrinsicType( + 131072 /* Never */, + "never", + /*objectFlags*/ + void 0, + "unique literal" + ); + var uniqueLiteralMapper = makeFunctionTypeMapper((t) => t.flags & 262144 /* TypeParameter */ ? uniqueLiteralType : t, () => "(unique literal mapper)"); + var outofbandVarianceMarkerHandler; + var reportUnreliableMapper = makeFunctionTypeMapper((t) => { + if (outofbandVarianceMarkerHandler && (t === markerSuperType || t === markerSubType || t === markerOtherType)) { + outofbandVarianceMarkerHandler( + /*onlyUnreliable*/ + true + ); + } + return t; + }, () => "(unmeasurable reporter)"); + var reportUnmeasurableMapper = makeFunctionTypeMapper((t) => { + if (outofbandVarianceMarkerHandler && (t === markerSuperType || t === markerSubType || t === markerOtherType)) { + outofbandVarianceMarkerHandler( + /*onlyUnreliable*/ + false + ); + } + return t; + }, () => "(unreliable reporter)"); + var emptyObjectType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + var emptyJsxObjectType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + emptyJsxObjectType.objectFlags |= 2048 /* JsxAttributes */; + var emptyFreshJsxObjectType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + emptyFreshJsxObjectType.objectFlags |= 2048 /* JsxAttributes */ | 8192 /* FreshLiteral */ | 128 /* ObjectLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */; + var emptyTypeLiteralSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */); + emptyTypeLiteralSymbol.members = createSymbolTable(); + var emptyTypeLiteralType = createAnonymousType(emptyTypeLiteralSymbol, emptySymbols, emptyArray, emptyArray, emptyArray); + var unknownEmptyObjectType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + var unknownUnionType = strictNullChecks ? getUnionType([undefinedType, nullType, unknownEmptyObjectType]) : unknownType; + var emptyGenericType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + emptyGenericType.instantiations = /* @__PURE__ */ new Map(); + var anyFunctionType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + anyFunctionType.objectFlags |= 262144 /* NonInferrableType */; + var noConstraintType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + var circularConstraintType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + var resolvingDefaultType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + var markerSuperType = createTypeParameter(); + var markerSubType = createTypeParameter(); + markerSubType.constraint = markerSuperType; + var markerOtherType = createTypeParameter(); + var markerSuperTypeForCheck = createTypeParameter(); + var markerSubTypeForCheck = createTypeParameter(); + markerSubTypeForCheck.constraint = markerSuperTypeForCheck; + var noTypePredicate = createTypePredicate(1 /* Identifier */, "<>", 0, anyType); + var anySignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + anyType, + /*resolvedTypePredicate*/ + void 0, + 0, + 0 /* None */ + ); + var unknownSignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + errorType, + /*resolvedTypePredicate*/ + void 0, + 0, + 0 /* None */ + ); + var resolvingSignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + anyType, + /*resolvedTypePredicate*/ + void 0, + 0, + 0 /* None */ + ); + var silentNeverSignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + silentNeverType, + /*resolvedTypePredicate*/ + void 0, + 0, + 0 /* None */ + ); + var enumNumberIndexInfo = createIndexInfo( + numberType, + stringType, + /*isReadonly*/ + true + ); + var anyBaseTypeIndexInfo = createIndexInfo( + stringType, + anyType, + /*isReadonly*/ + false + ); + var iterationTypesCache = /* @__PURE__ */ new Map(); + var noIterationTypes = { + get yieldType() { + return Debug.fail("Not supported"); + }, + get returnType() { + return Debug.fail("Not supported"); + }, + get nextType() { + return Debug.fail("Not supported"); + } + }; + var anyIterationTypes = createIterationTypes(anyType, anyType, anyType); + var silentNeverIterationTypes = createIterationTypes(silentNeverType, silentNeverType, silentNeverType); + var asyncIterationTypesResolver = { + iterableCacheKey: "iterationTypesOfAsyncIterable", + iteratorCacheKey: "iterationTypesOfAsyncIterator", + iteratorSymbolName: "asyncIterator", + getGlobalIteratorType: getGlobalAsyncIteratorType, + getGlobalIterableType: getGlobalAsyncIterableType, + getGlobalIterableIteratorType: getGlobalAsyncIterableIteratorType, + getGlobalIteratorObjectType: getGlobalAsyncIteratorObjectType, + getGlobalGeneratorType: getGlobalAsyncGeneratorType, + getGlobalBuiltinIteratorTypes: getGlobalBuiltinAsyncIteratorTypes, + resolveIterationType: (type, errorNode) => getAwaitedType(type, errorNode, Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member), + mustHaveANextMethodDiagnostic: Diagnostics.An_async_iterator_must_have_a_next_method, + mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_async_iterator_must_be_a_method, + mustHaveAValueDiagnostic: Diagnostics.The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_property + }; + var syncIterationTypesResolver = { + iterableCacheKey: "iterationTypesOfIterable", + iteratorCacheKey: "iterationTypesOfIterator", + iteratorSymbolName: "iterator", + getGlobalIteratorType, + getGlobalIterableType, + getGlobalIterableIteratorType, + getGlobalIteratorObjectType, + getGlobalGeneratorType, + getGlobalBuiltinIteratorTypes, + resolveIterationType: (type, _errorNode) => type, + mustHaveANextMethodDiagnostic: Diagnostics.An_iterator_must_have_a_next_method, + mustBeAMethodDiagnostic: Diagnostics.The_0_property_of_an_iterator_must_be_a_method, + mustHaveAValueDiagnostic: Diagnostics.The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property + }; + var amalgamatedDuplicates; + var reverseMappedCache = /* @__PURE__ */ new Map(); + var reverseHomomorphicMappedCache = /* @__PURE__ */ new Map(); + var ambientModulesCache; + var patternAmbientModules; + var patternAmbientModuleAugmentations; + var globalObjectType; + var globalFunctionType; + var globalCallableFunctionType; + var globalNewableFunctionType; + var globalArrayType; + var globalReadonlyArrayType; + var globalStringType; + var globalNumberType; + var globalBooleanType; + var globalRegExpType; + var globalThisType; + var anyArrayType; + var autoArrayType; + var anyReadonlyArrayType; + var deferredGlobalNonNullableTypeAlias; + var deferredGlobalESSymbolConstructorSymbol; + var deferredGlobalESSymbolConstructorTypeSymbol; + var deferredGlobalESSymbolType; + var deferredGlobalTypedPropertyDescriptorType; + var deferredGlobalPromiseType; + var deferredGlobalPromiseLikeType; + var deferredGlobalPromiseConstructorSymbol; + var deferredGlobalPromiseConstructorLikeType; + var deferredGlobalIterableType; + var deferredGlobalIteratorType; + var deferredGlobalIterableIteratorType; + var deferredGlobalIteratorObjectType; + var deferredGlobalGeneratorType; + var deferredGlobalIteratorYieldResultType; + var deferredGlobalIteratorReturnResultType; + var deferredGlobalAsyncIterableType; + var deferredGlobalAsyncIteratorType; + var deferredGlobalAsyncIterableIteratorType; + var deferredGlobalBuiltinIteratorTypes; + var deferredGlobalBuiltinAsyncIteratorTypes; + var deferredGlobalAsyncIteratorObjectType; + var deferredGlobalAsyncGeneratorType; + var deferredGlobalTemplateStringsArrayType; + var deferredGlobalImportMetaType; + var deferredGlobalImportMetaExpressionType; + var deferredGlobalImportCallOptionsType; + var deferredGlobalImportAttributesType; + var deferredGlobalDisposableType; + var deferredGlobalAsyncDisposableType; + var deferredGlobalExtractSymbol; + var deferredGlobalOmitSymbol; + var deferredGlobalAwaitedSymbol; + var deferredGlobalBigIntType; + var deferredGlobalNaNSymbol; + var deferredGlobalRecordSymbol; + var deferredGlobalClassDecoratorContextType; + var deferredGlobalClassMethodDecoratorContextType; + var deferredGlobalClassGetterDecoratorContextType; + var deferredGlobalClassSetterDecoratorContextType; + var deferredGlobalClassAccessorDecoratorContextType; + var deferredGlobalClassAccessorDecoratorTargetType; + var deferredGlobalClassAccessorDecoratorResultType; + var deferredGlobalClassFieldDecoratorContextType; + var allPotentiallyUnusedIdentifiers = /* @__PURE__ */ new Map(); + var flowLoopStart = 0; + var flowLoopCount = 0; + var sharedFlowCount = 0; + var flowAnalysisDisabled = false; + var flowInvocationCount = 0; + var lastFlowNode; + var lastFlowNodeReachable; + var flowTypeCache; + var contextualTypeNodes = []; + var contextualTypes = []; + var contextualIsCache = []; + var contextualTypeCount = 0; + var contextualBindingPatterns = []; + var inferenceContextNodes = []; + var inferenceContexts = []; + var inferenceContextCount = 0; + var activeTypeMappers = []; + var activeTypeMappersCaches = []; + var activeTypeMappersCount = 0; + var emptyStringType = getStringLiteralType(""); + var zeroType = getNumberLiteralType(0); + var zeroBigIntType = getBigIntLiteralType({ negative: false, base10Value: "0" }); + var resolutionTargets = []; + var resolutionResults = []; + var resolutionPropertyNames = []; + var resolutionStart = 0; + var inVarianceComputation = false; + var suggestionCount = 0; + var maximumSuggestionCount = 10; + var mergedSymbols = []; + var symbolLinks = []; + var nodeLinks = []; + var flowLoopCaches = []; + var flowLoopNodes = []; + var flowLoopKeys = []; + var flowLoopTypes = []; + var sharedFlowNodes = []; + var sharedFlowTypes = []; + var flowNodeReachable = []; + var flowNodePostSuper = []; + var potentialThisCollisions = []; + var potentialNewTargetCollisions = []; + var potentialWeakMapSetCollisions = []; + var potentialReflectCollisions = []; + var potentialUnusedRenamedBindingElementsInTypes = []; + var awaitedTypeStack = []; + var reverseMappedSourceStack = []; + var reverseMappedTargetStack = []; + var reverseExpandingFlags = 0 /* None */; + var diagnostics = createDiagnosticCollection(); + var suggestionDiagnostics = createDiagnosticCollection(); + var typeofType = createTypeofType(); + var _jsxNamespace; + var _jsxFactoryEntity; + var subtypeRelation = /* @__PURE__ */ new Map(); + var strictSubtypeRelation = /* @__PURE__ */ new Map(); + var assignableRelation = /* @__PURE__ */ new Map(); + var comparableRelation = /* @__PURE__ */ new Map(); + var identityRelation = /* @__PURE__ */ new Map(); + var enumRelation = /* @__PURE__ */ new Map(); + var suggestedExtensions = [ + [".mts", ".mjs"], + [".ts", ".js"], + [".cts", ".cjs"], + [".mjs", ".mjs"], + [".js", ".js"], + [".cjs", ".cjs"], + [".tsx", compilerOptions.jsx === 1 /* Preserve */ ? ".jsx" : ".js"], + [".jsx", ".jsx"], + [".json", ".json"] + ]; + initializeTypeChecker(); + return checker; + function isDefinitelyReferenceToGlobalSymbolObject(node) { + if (!isPropertyAccessExpression(node)) return false; + if (!isIdentifier(node.name)) return false; + if (!isPropertyAccessExpression(node.expression) && !isIdentifier(node.expression)) return false; + if (isIdentifier(node.expression)) { + return idText(node.expression) === "Symbol" && getResolvedSymbol(node.expression) === (getGlobalSymbol( + "Symbol", + 111551 /* Value */ | 1048576 /* ExportValue */, + /*diagnostic*/ + void 0 + ) || unknownSymbol); + } + if (!isIdentifier(node.expression.expression)) return false; + return idText(node.expression.name) === "Symbol" && idText(node.expression.expression) === "globalThis" && getResolvedSymbol(node.expression.expression) === globalThisSymbol; + } + function getCachedType(key) { + return key ? cachedTypes.get(key) : void 0; + } + function setCachedType(key, type) { + if (key) cachedTypes.set(key, type); + return type; + } + function getJsxNamespace(location) { + if (location) { + const file = getSourceFileOfNode(location); + if (file) { + if (isJsxOpeningFragment(location)) { + if (file.localJsxFragmentNamespace) { + return file.localJsxFragmentNamespace; + } + const jsxFragmentPragma = file.pragmas.get("jsxfrag"); + if (jsxFragmentPragma) { + const chosenPragma = isArray(jsxFragmentPragma) ? jsxFragmentPragma[0] : jsxFragmentPragma; + file.localJsxFragmentFactory = parseIsolatedEntityName(chosenPragma.arguments.factory, languageVersion); + visitNode(file.localJsxFragmentFactory, markAsSynthetic, isEntityName); + if (file.localJsxFragmentFactory) { + return file.localJsxFragmentNamespace = getFirstIdentifier(file.localJsxFragmentFactory).escapedText; + } + } + const entity = getJsxFragmentFactoryEntity(location); + if (entity) { + file.localJsxFragmentFactory = entity; + return file.localJsxFragmentNamespace = getFirstIdentifier(entity).escapedText; + } + } else { + const localJsxNamespace = getLocalJsxNamespace(file); + if (localJsxNamespace) { + return file.localJsxNamespace = localJsxNamespace; + } + } + } + } + if (!_jsxNamespace) { + _jsxNamespace = "React"; + if (compilerOptions.jsxFactory) { + _jsxFactoryEntity = parseIsolatedEntityName(compilerOptions.jsxFactory, languageVersion); + visitNode(_jsxFactoryEntity, markAsSynthetic); + if (_jsxFactoryEntity) { + _jsxNamespace = getFirstIdentifier(_jsxFactoryEntity).escapedText; + } + } else if (compilerOptions.reactNamespace) { + _jsxNamespace = escapeLeadingUnderscores(compilerOptions.reactNamespace); + } + } + if (!_jsxFactoryEntity) { + _jsxFactoryEntity = factory.createQualifiedName(factory.createIdentifier(unescapeLeadingUnderscores(_jsxNamespace)), "createElement"); + } + return _jsxNamespace; + } + function getLocalJsxNamespace(file) { + if (file.localJsxNamespace) { + return file.localJsxNamespace; + } + const jsxPragma = file.pragmas.get("jsx"); + if (jsxPragma) { + const chosenPragma = isArray(jsxPragma) ? jsxPragma[0] : jsxPragma; + file.localJsxFactory = parseIsolatedEntityName(chosenPragma.arguments.factory, languageVersion); + visitNode(file.localJsxFactory, markAsSynthetic, isEntityName); + if (file.localJsxFactory) { + return file.localJsxNamespace = getFirstIdentifier(file.localJsxFactory).escapedText; + } + } + } + function markAsSynthetic(node) { + setTextRangePosEnd(node, -1, -1); + return visitEachChild( + node, + markAsSynthetic, + /*context*/ + void 0 + ); + } + function getEmitResolver(sourceFile, cancellationToken2, skipDiagnostics) { + if (!skipDiagnostics) getDiagnostics2(sourceFile, cancellationToken2); + return emitResolver; + } + function lookupOrIssueError(location, message, ...args) { + const diagnostic = location ? createDiagnosticForNode(location, message, ...args) : createCompilerDiagnostic(message, ...args); + const existing = diagnostics.lookup(diagnostic); + if (existing) { + return existing; + } else { + diagnostics.add(diagnostic); + return diagnostic; + } + } + function errorSkippedOn(key, location, message, ...args) { + const diagnostic = error2(location, message, ...args); + diagnostic.skippedOn = key; + return diagnostic; + } + function createError(location, message, ...args) { + return location ? createDiagnosticForNode(location, message, ...args) : createCompilerDiagnostic(message, ...args); + } + function error2(location, message, ...args) { + const diagnostic = createError(location, message, ...args); + diagnostics.add(diagnostic); + return diagnostic; + } + function getVerbatimModuleSyntaxErrorMessage(node) { + const sourceFile = getSourceFileOfNode(node); + const fileName = sourceFile.fileName; + if (fileExtensionIsOneOf(fileName, [".cts" /* Cts */, ".cjs" /* Cjs */])) { + return Diagnostics.ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax; + } else { + return Diagnostics.ECMAScript_imports_and_exports_cannot_be_written_in_a_CommonJS_file_under_verbatimModuleSyntax_Adjust_the_type_field_in_the_nearest_package_json_to_make_this_file_an_ECMAScript_module_or_adjust_your_verbatimModuleSyntax_module_and_moduleResolution_settings_in_TypeScript; + } + } + function addErrorOrSuggestion(isError, diagnostic) { + if (isError) { + diagnostics.add(diagnostic); + } else { + suggestionDiagnostics.add({ ...diagnostic, category: 2 /* Suggestion */ }); + } + } + function errorOrSuggestion(isError, location, message, ...args) { + if (location.pos < 0 || location.end < 0) { + if (!isError) { + return; + } + const file = getSourceFileOfNode(location); + addErrorOrSuggestion(isError, "message" in message ? createFileDiagnostic(file, 0, 0, message, ...args) : createDiagnosticForFileFromMessageChain(file, message)); + return; + } + addErrorOrSuggestion(isError, "message" in message ? createDiagnosticForNode(location, message, ...args) : createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(location), location, message)); + } + function errorAndMaybeSuggestAwait(location, maybeMissingAwait, message, ...args) { + const diagnostic = error2(location, message, ...args); + if (maybeMissingAwait) { + const related = createDiagnosticForNode(location, Diagnostics.Did_you_forget_to_use_await); + addRelatedInfo(diagnostic, related); + } + return diagnostic; + } + function addDeprecatedSuggestionWorker(declarations, diagnostic) { + const deprecatedTag = Array.isArray(declarations) ? forEach(declarations, getJSDocDeprecatedTag) : getJSDocDeprecatedTag(declarations); + if (deprecatedTag) { + addRelatedInfo( + diagnostic, + createDiagnosticForNode(deprecatedTag, Diagnostics.The_declaration_was_marked_as_deprecated_here) + ); + } + suggestionDiagnostics.add(diagnostic); + return diagnostic; + } + function isDeprecatedSymbol(symbol) { + const parentSymbol = getParentOfSymbol(symbol); + if (parentSymbol && length(symbol.declarations) > 1) { + return parentSymbol.flags & 64 /* Interface */ ? some(symbol.declarations, isDeprecatedDeclaration2) : every(symbol.declarations, isDeprecatedDeclaration2); + } + return !!symbol.valueDeclaration && isDeprecatedDeclaration2(symbol.valueDeclaration) || length(symbol.declarations) && every(symbol.declarations, isDeprecatedDeclaration2); + } + function isDeprecatedDeclaration2(declaration) { + return !!(getCombinedNodeFlagsCached(declaration) & 536870912 /* Deprecated */); + } + function addDeprecatedSuggestion(location, declarations, deprecatedEntity) { + const diagnostic = createDiagnosticForNode(location, Diagnostics._0_is_deprecated, deprecatedEntity); + return addDeprecatedSuggestionWorker(declarations, diagnostic); + } + function addDeprecatedSuggestionWithSignature(location, declaration, deprecatedEntity, signatureString) { + const diagnostic = deprecatedEntity ? createDiagnosticForNode(location, Diagnostics.The_signature_0_of_1_is_deprecated, signatureString, deprecatedEntity) : createDiagnosticForNode(location, Diagnostics._0_is_deprecated, signatureString); + return addDeprecatedSuggestionWorker(declaration, diagnostic); + } + function createSymbol(flags, name, checkFlags) { + symbolCount++; + const symbol = new Symbol48(flags | 33554432 /* Transient */, name); + symbol.links = new SymbolLinks(); + symbol.links.checkFlags = checkFlags || 0 /* None */; + return symbol; + } + function createParameter2(name, type) { + const symbol = createSymbol(1 /* FunctionScopedVariable */, name); + symbol.links.type = type; + return symbol; + } + function createProperty(name, type) { + const symbol = createSymbol(4 /* Property */, name); + symbol.links.type = type; + return symbol; + } + function getExcludedSymbolFlags(flags) { + let result = 0; + if (flags & 2 /* BlockScopedVariable */) result |= 111551 /* BlockScopedVariableExcludes */; + if (flags & 1 /* FunctionScopedVariable */) result |= 111550 /* FunctionScopedVariableExcludes */; + if (flags & 4 /* Property */) result |= 0 /* PropertyExcludes */; + if (flags & 8 /* EnumMember */) result |= 900095 /* EnumMemberExcludes */; + if (flags & 16 /* Function */) result |= 110991 /* FunctionExcludes */; + if (flags & 32 /* Class */) result |= 899503 /* ClassExcludes */; + if (flags & 64 /* Interface */) result |= 788872 /* InterfaceExcludes */; + if (flags & 256 /* RegularEnum */) result |= 899327 /* RegularEnumExcludes */; + if (flags & 128 /* ConstEnum */) result |= 899967 /* ConstEnumExcludes */; + if (flags & 512 /* ValueModule */) result |= 110735 /* ValueModuleExcludes */; + if (flags & 8192 /* Method */) result |= 103359 /* MethodExcludes */; + if (flags & 32768 /* GetAccessor */) result |= 46015 /* GetAccessorExcludes */; + if (flags & 65536 /* SetAccessor */) result |= 78783 /* SetAccessorExcludes */; + if (flags & 262144 /* TypeParameter */) result |= 526824 /* TypeParameterExcludes */; + if (flags & 524288 /* TypeAlias */) result |= 788968 /* TypeAliasExcludes */; + if (flags & 2097152 /* Alias */) result |= 2097152 /* AliasExcludes */; + return result; + } + function recordMergedSymbol(target, source) { + if (!source.mergeId) { + source.mergeId = nextMergeId; + nextMergeId++; + } + mergedSymbols[source.mergeId] = target; + } + function cloneSymbol(symbol) { + const result = createSymbol(symbol.flags, symbol.escapedName); + result.declarations = symbol.declarations ? symbol.declarations.slice() : []; + result.parent = symbol.parent; + if (symbol.valueDeclaration) result.valueDeclaration = symbol.valueDeclaration; + if (symbol.constEnumOnlyModule) result.constEnumOnlyModule = true; + if (symbol.members) result.members = new Map(symbol.members); + if (symbol.exports) result.exports = new Map(symbol.exports); + recordMergedSymbol(result, symbol); + return result; + } + function mergeSymbol(target, source, unidirectional = false) { + if (!(target.flags & getExcludedSymbolFlags(source.flags)) || (source.flags | target.flags) & 67108864 /* Assignment */) { + if (source === target) { + return target; + } + if (!(target.flags & 33554432 /* Transient */)) { + const resolvedTarget = resolveSymbol(target); + if (resolvedTarget === unknownSymbol) { + return source; + } + if (!(resolvedTarget.flags & getExcludedSymbolFlags(source.flags)) || (source.flags | resolvedTarget.flags) & 67108864 /* Assignment */) { + target = cloneSymbol(resolvedTarget); + } else { + reportMergeSymbolError(target, source); + return source; + } + } + if (source.flags & 512 /* ValueModule */ && target.flags & 512 /* ValueModule */ && target.constEnumOnlyModule && !source.constEnumOnlyModule) { + target.constEnumOnlyModule = false; + } + target.flags |= source.flags; + if (source.valueDeclaration) { + setValueDeclaration(target, source.valueDeclaration); + } + addRange(target.declarations, source.declarations); + if (source.members) { + if (!target.members) target.members = createSymbolTable(); + mergeSymbolTable(target.members, source.members, unidirectional); + } + if (source.exports) { + if (!target.exports) target.exports = createSymbolTable(); + mergeSymbolTable(target.exports, source.exports, unidirectional, target); + } + if (!unidirectional) { + recordMergedSymbol(target, source); + } + } else if (target.flags & 1024 /* NamespaceModule */) { + if (target !== globalThisSymbol) { + error2( + source.declarations && getNameOfDeclaration(source.declarations[0]), + Diagnostics.Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity, + symbolToString(target) + ); + } + } else { + reportMergeSymbolError(target, source); + } + return target; + function reportMergeSymbolError(target2, source2) { + const isEitherEnum = !!(target2.flags & 384 /* Enum */ || source2.flags & 384 /* Enum */); + const isEitherBlockScoped = !!(target2.flags & 2 /* BlockScopedVariable */ || source2.flags & 2 /* BlockScopedVariable */); + const message = isEitherEnum ? Diagnostics.Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations : isEitherBlockScoped ? Diagnostics.Cannot_redeclare_block_scoped_variable_0 : Diagnostics.Duplicate_identifier_0; + const sourceSymbolFile = source2.declarations && getSourceFileOfNode(source2.declarations[0]); + const targetSymbolFile = target2.declarations && getSourceFileOfNode(target2.declarations[0]); + const isSourcePlainJs = isPlainJsFile(sourceSymbolFile, compilerOptions.checkJs); + const isTargetPlainJs = isPlainJsFile(targetSymbolFile, compilerOptions.checkJs); + const symbolName2 = symbolToString(source2); + if (sourceSymbolFile && targetSymbolFile && amalgamatedDuplicates && !isEitherEnum && sourceSymbolFile !== targetSymbolFile) { + const firstFile = comparePaths(sourceSymbolFile.path, targetSymbolFile.path) === -1 /* LessThan */ ? sourceSymbolFile : targetSymbolFile; + const secondFile = firstFile === sourceSymbolFile ? targetSymbolFile : sourceSymbolFile; + const filesDuplicates = getOrUpdate(amalgamatedDuplicates, `${firstFile.path}|${secondFile.path}`, () => ({ firstFile, secondFile, conflictingSymbols: /* @__PURE__ */ new Map() })); + const conflictingSymbolInfo = getOrUpdate(filesDuplicates.conflictingSymbols, symbolName2, () => ({ isBlockScoped: isEitherBlockScoped, firstFileLocations: [], secondFileLocations: [] })); + if (!isSourcePlainJs) addDuplicateLocations(conflictingSymbolInfo.firstFileLocations, source2); + if (!isTargetPlainJs) addDuplicateLocations(conflictingSymbolInfo.secondFileLocations, target2); + } else { + if (!isSourcePlainJs) addDuplicateDeclarationErrorsForSymbols(source2, message, symbolName2, target2); + if (!isTargetPlainJs) addDuplicateDeclarationErrorsForSymbols(target2, message, symbolName2, source2); + } + } + function addDuplicateLocations(locs, symbol) { + if (symbol.declarations) { + for (const decl of symbol.declarations) { + pushIfUnique(locs, decl); + } + } + } + } + function addDuplicateDeclarationErrorsForSymbols(target, message, symbolName2, source) { + forEach(target.declarations, (node) => { + addDuplicateDeclarationError(node, message, symbolName2, source.declarations); + }); + } + function addDuplicateDeclarationError(node, message, symbolName2, relatedNodes) { + const errorNode = (getExpandoInitializer( + node, + /*isPrototypeAssignment*/ + false + ) ? getNameOfExpando(node) : getNameOfDeclaration(node)) || node; + const err = lookupOrIssueError(errorNode, message, symbolName2); + for (const relatedNode of relatedNodes || emptyArray) { + const adjustedNode = (getExpandoInitializer( + relatedNode, + /*isPrototypeAssignment*/ + false + ) ? getNameOfExpando(relatedNode) : getNameOfDeclaration(relatedNode)) || relatedNode; + if (adjustedNode === errorNode) continue; + err.relatedInformation = err.relatedInformation || []; + const leadingMessage = createDiagnosticForNode(adjustedNode, Diagnostics._0_was_also_declared_here, symbolName2); + const followOnMessage = createDiagnosticForNode(adjustedNode, Diagnostics.and_here); + if (length(err.relatedInformation) >= 5 || some(err.relatedInformation, (r) => compareDiagnostics(r, followOnMessage) === 0 /* EqualTo */ || compareDiagnostics(r, leadingMessage) === 0 /* EqualTo */)) continue; + addRelatedInfo(err, !length(err.relatedInformation) ? leadingMessage : followOnMessage); + } + } + function combineSymbolTables(first2, second) { + if (!(first2 == null ? void 0 : first2.size)) return second; + if (!(second == null ? void 0 : second.size)) return first2; + const combined = createSymbolTable(); + mergeSymbolTable(combined, first2); + mergeSymbolTable(combined, second); + return combined; + } + function mergeSymbolTable(target, source, unidirectional = false, mergedParent) { + source.forEach((sourceSymbol, id) => { + const targetSymbol = target.get(id); + const merged = targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : getMergedSymbol(sourceSymbol); + if (mergedParent && targetSymbol) { + merged.parent = mergedParent; + } + target.set(id, merged); + }); + } + function mergeModuleAugmentation(moduleName) { + var _a, _b, _c; + const moduleAugmentation = moduleName.parent; + if (((_a = moduleAugmentation.symbol.declarations) == null ? void 0 : _a[0]) !== moduleAugmentation) { + Debug.assert(moduleAugmentation.symbol.declarations.length > 1); + return; + } + if (isGlobalScopeAugmentation(moduleAugmentation)) { + mergeSymbolTable(globals, moduleAugmentation.symbol.exports); + } else { + const moduleNotFoundError = !(moduleName.parent.parent.flags & 33554432 /* Ambient */) ? Diagnostics.Invalid_module_name_in_augmentation_module_0_cannot_be_found : void 0; + let mainModule = resolveExternalModuleNameWorker( + moduleName, + moduleName, + moduleNotFoundError, + /*ignoreErrors*/ + false, + /*isForAugmentation*/ + true + ); + if (!mainModule) { + return; + } + mainModule = resolveExternalModuleSymbol(mainModule); + if (mainModule.flags & 1920 /* Namespace */) { + if (some(patternAmbientModules, (module2) => mainModule === module2.symbol)) { + const merged = mergeSymbol( + moduleAugmentation.symbol, + mainModule, + /*unidirectional*/ + true + ); + if (!patternAmbientModuleAugmentations) { + patternAmbientModuleAugmentations = /* @__PURE__ */ new Map(); + } + patternAmbientModuleAugmentations.set(moduleName.text, merged); + } else { + if (((_b = mainModule.exports) == null ? void 0 : _b.get("__export" /* ExportStar */)) && ((_c = moduleAugmentation.symbol.exports) == null ? void 0 : _c.size)) { + const resolvedExports = getResolvedMembersOrExportsOfSymbol(mainModule, "resolvedExports" /* resolvedExports */); + for (const [key, value] of arrayFrom(moduleAugmentation.symbol.exports.entries())) { + if (resolvedExports.has(key) && !mainModule.exports.has(key)) { + mergeSymbol(resolvedExports.get(key), value); + } + } + } + mergeSymbol(mainModule, moduleAugmentation.symbol); + } + } else { + error2(moduleName, Diagnostics.Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity, moduleName.text); + } + } + } + function addUndefinedToGlobalsOrErrorOnRedeclaration() { + const name = undefinedSymbol.escapedName; + const targetSymbol = globals.get(name); + if (targetSymbol) { + forEach(targetSymbol.declarations, (declaration) => { + if (!isTypeDeclaration(declaration)) { + diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0, unescapeLeadingUnderscores(name))); + } + }); + } else { + globals.set(name, undefinedSymbol); + } + } + function getSymbolLinks(symbol) { + if (symbol.flags & 33554432 /* Transient */) return symbol.links; + const id = getSymbolId(symbol); + return symbolLinks[id] ?? (symbolLinks[id] = new SymbolLinks()); + } + function getNodeLinks(node) { + const nodeId = getNodeId(node); + return nodeLinks[nodeId] || (nodeLinks[nodeId] = new NodeLinks()); + } + function getSymbol2(symbols, name, meaning) { + if (meaning) { + const symbol = getMergedSymbol(symbols.get(name)); + if (symbol) { + if (symbol.flags & meaning) { + return symbol; + } + if (symbol.flags & 2097152 /* Alias */) { + const targetFlags = getSymbolFlags(symbol); + if (targetFlags & meaning) { + return symbol; + } + } + } + } + } + function getSymbolsOfParameterPropertyDeclaration(parameter, parameterName) { + const constructorDeclaration = parameter.parent; + const classDeclaration = parameter.parent.parent; + const parameterSymbol = getSymbol2(constructorDeclaration.locals, parameterName, 111551 /* Value */); + const propertySymbol = getSymbol2(getMembersOfSymbol(classDeclaration.symbol), parameterName, 111551 /* Value */); + if (parameterSymbol && propertySymbol) { + return [parameterSymbol, propertySymbol]; + } + return Debug.fail("There should exist two symbols, one as property declaration and one as parameter declaration"); + } + function isBlockScopedNameDeclaredBeforeUse(declaration, usage) { + const declarationFile = getSourceFileOfNode(declaration); + const useFile = getSourceFileOfNode(usage); + const declContainer = getEnclosingBlockScopeContainer(declaration); + if (declarationFile !== useFile) { + if (moduleKind && (declarationFile.externalModuleIndicator || useFile.externalModuleIndicator) || !compilerOptions.outFile || isInTypeQuery(usage) || declaration.flags & 33554432 /* Ambient */) { + return true; + } + if (isUsedInFunctionOrInstanceProperty(usage, declaration)) { + return true; + } + const sourceFiles = host.getSourceFiles(); + return sourceFiles.indexOf(declarationFile) <= sourceFiles.indexOf(useFile); + } + if (!!(usage.flags & 16777216 /* JSDoc */) || isInTypeQuery(usage) || isInAmbientOrTypeNode(usage)) { + return true; + } + if (declaration.pos <= usage.pos && !(isPropertyDeclaration(declaration) && isThisProperty(usage.parent) && !declaration.initializer && !declaration.exclamationToken)) { + if (declaration.kind === 209 /* BindingElement */) { + const errorBindingElement = getAncestor(usage, 209 /* BindingElement */); + if (errorBindingElement) { + return findAncestor(errorBindingElement, isBindingElement) !== findAncestor(declaration, isBindingElement) || declaration.pos < errorBindingElement.pos; + } + return isBlockScopedNameDeclaredBeforeUse(getAncestor(declaration, 261 /* VariableDeclaration */), usage); + } else if (declaration.kind === 261 /* VariableDeclaration */) { + return !isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration, usage); + } else if (isClassLike(declaration)) { + const container = findAncestor(usage, (n) => n === declaration ? "quit" : isComputedPropertyName(n) ? n.parent.parent === declaration : !legacyDecorators && isDecorator(n) && (n.parent === declaration || isMethodDeclaration(n.parent) && n.parent.parent === declaration || isGetOrSetAccessorDeclaration(n.parent) && n.parent.parent === declaration || isPropertyDeclaration(n.parent) && n.parent.parent === declaration || isParameter(n.parent) && n.parent.parent.parent === declaration)); + if (!container) { + return true; + } + if (!legacyDecorators && isDecorator(container)) { + return !!findAncestor(usage, (n) => n === container ? "quit" : isFunctionLike(n) && !getImmediatelyInvokedFunctionExpression(n)); + } + return false; + } else if (isPropertyDeclaration(declaration)) { + return !isPropertyImmediatelyReferencedWithinDeclaration( + declaration, + usage, + /*stopAtAnyPropertyDeclaration*/ + false + ); + } else if (isParameterPropertyDeclaration(declaration, declaration.parent)) { + return !(emitStandardClassFields && getContainingClass(declaration) === getContainingClass(usage) && isUsedInFunctionOrInstanceProperty(usage, declaration)); + } + return true; + } + if (usage.parent.kind === 282 /* ExportSpecifier */ || usage.parent.kind === 278 /* ExportAssignment */ && usage.parent.isExportEquals) { + return true; + } + if (usage.kind === 278 /* ExportAssignment */ && usage.isExportEquals) { + return true; + } + if (isUsedInFunctionOrInstanceProperty(usage, declaration)) { + if (emitStandardClassFields && getContainingClass(declaration) && (isPropertyDeclaration(declaration) || isParameterPropertyDeclaration(declaration, declaration.parent))) { + return !isPropertyImmediatelyReferencedWithinDeclaration( + declaration, + usage, + /*stopAtAnyPropertyDeclaration*/ + true + ); + } else { + return true; + } + } + return false; + function isImmediatelyUsedInInitializerOfBlockScopedVariable(declaration2, usage2) { + switch (declaration2.parent.parent.kind) { + case 244 /* VariableStatement */: + case 249 /* ForStatement */: + case 251 /* ForOfStatement */: + if (isSameScopeDescendentOf(usage2, declaration2, declContainer)) { + return true; + } + break; + } + const grandparent = declaration2.parent.parent; + return isForInOrOfStatement(grandparent) && isSameScopeDescendentOf(usage2, grandparent.expression, declContainer); + } + function isUsedInFunctionOrInstanceProperty(usage2, declaration2) { + return isUsedInFunctionOrInstancePropertyWorker(usage2, declaration2); + } + function isUsedInFunctionOrInstancePropertyWorker(usage2, declaration2) { + return !!findAncestor(usage2, (current) => { + if (current === declContainer) { + return "quit"; + } + if (isFunctionLike(current)) { + return !getImmediatelyInvokedFunctionExpression(current); + } + if (isClassStaticBlockDeclaration(current)) { + return declaration2.pos < usage2.pos; + } + const propertyDeclaration = tryCast(current.parent, isPropertyDeclaration); + if (propertyDeclaration) { + const initializerOfProperty = propertyDeclaration.initializer === current; + if (initializerOfProperty) { + if (isStatic(current.parent)) { + if (declaration2.kind === 175 /* MethodDeclaration */) { + return true; + } + if (isPropertyDeclaration(declaration2) && getContainingClass(usage2) === getContainingClass(declaration2)) { + const propName = declaration2.name; + if (isIdentifier(propName) || isPrivateIdentifier(propName)) { + const type = getTypeOfSymbol(getSymbolOfDeclaration(declaration2)); + const staticBlocks = filter(declaration2.parent.members, isClassStaticBlockDeclaration); + if (isPropertyInitializedInStaticBlocks(propName, type, staticBlocks, declaration2.parent.pos, current.pos)) { + return true; + } + } + } + } else { + const isDeclarationInstanceProperty = declaration2.kind === 173 /* PropertyDeclaration */ && !isStatic(declaration2); + if (!isDeclarationInstanceProperty || getContainingClass(usage2) !== getContainingClass(declaration2)) { + return true; + } + } + } + } + const decorator = tryCast(current.parent, isDecorator); + if (decorator && decorator.expression === current) { + if (isParameter(decorator.parent)) { + return isUsedInFunctionOrInstancePropertyWorker(decorator.parent.parent.parent, declaration2) ? true : "quit"; + } + if (isMethodDeclaration(decorator.parent)) { + return isUsedInFunctionOrInstancePropertyWorker(decorator.parent.parent, declaration2) ? true : "quit"; + } + } + return false; + }); + } + function isPropertyImmediatelyReferencedWithinDeclaration(declaration2, usage2, stopAtAnyPropertyDeclaration) { + if (usage2.end > declaration2.end) { + return false; + } + const ancestorChangingReferenceScope = findAncestor(usage2, (node) => { + if (node === declaration2) { + return "quit"; + } + switch (node.kind) { + case 220 /* ArrowFunction */: + return true; + case 173 /* PropertyDeclaration */: + return stopAtAnyPropertyDeclaration && (isPropertyDeclaration(declaration2) && node.parent === declaration2.parent || isParameterPropertyDeclaration(declaration2, declaration2.parent) && node.parent === declaration2.parent.parent) ? "quit" : true; + case 242 /* Block */: + switch (node.parent.kind) { + case 178 /* GetAccessor */: + case 175 /* MethodDeclaration */: + case 179 /* SetAccessor */: + return true; + default: + return false; + } + default: + return false; + } + }); + return ancestorChangingReferenceScope === void 0; + } + } + function getRequiresScopeChangeCache(node) { + return getNodeLinks(node).declarationRequiresScopeChange; + } + function setRequiresScopeChangeCache(node, value) { + getNodeLinks(node).declarationRequiresScopeChange = value; + } + function checkAndReportErrorForInvalidInitializer(errorLocation, name, propertyWithInvalidInitializer, result) { + if (!emitStandardClassFields) { + if (errorLocation && !result && checkAndReportErrorForMissingPrefix(errorLocation, name, name)) { + return true; + } + error2( + errorLocation, + errorLocation && propertyWithInvalidInitializer.type && textRangeContainsPositionInclusive(propertyWithInvalidInitializer.type, errorLocation.pos) ? Diagnostics.Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor : Diagnostics.Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor, + declarationNameToString(propertyWithInvalidInitializer.name), + diagnosticName(name) + ); + return true; + } + return false; + } + function onFailedToResolveSymbol(errorLocation, nameArg, meaning, nameNotFoundMessage) { + const name = isString(nameArg) ? nameArg : nameArg.escapedText; + addLazyDiagnostic(() => { + if (!errorLocation || errorLocation.parent.kind !== 325 /* JSDocLink */ && !checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) && !checkAndReportErrorForExtendingInterface(errorLocation) && !checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) && !checkAndReportErrorForExportingPrimitiveType(errorLocation, name) && !checkAndReportErrorForUsingNamespaceAsTypeOrValue(errorLocation, name, meaning) && !checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) && !checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning)) { + let suggestion; + let suggestedLib; + if (nameArg) { + suggestedLib = getSuggestedLibForNonExistentName(nameArg); + if (suggestedLib) { + error2(errorLocation, nameNotFoundMessage, diagnosticName(nameArg), suggestedLib); + } + } + if (!suggestedLib && suggestionCount < maximumSuggestionCount) { + suggestion = getSuggestedSymbolForNonexistentSymbol(errorLocation, name, meaning); + const isGlobalScopeAugmentationDeclaration = (suggestion == null ? void 0 : suggestion.valueDeclaration) && isAmbientModule(suggestion.valueDeclaration) && isGlobalScopeAugmentation(suggestion.valueDeclaration); + if (isGlobalScopeAugmentationDeclaration) { + suggestion = void 0; + } + if (suggestion) { + const suggestionName = symbolToString(suggestion); + const isUncheckedJS = isUncheckedJSSuggestion( + errorLocation, + suggestion, + /*excludeClasses*/ + false + ); + const message = meaning === 1920 /* Namespace */ || nameArg && typeof nameArg !== "string" && nodeIsSynthesized(nameArg) ? Diagnostics.Cannot_find_namespace_0_Did_you_mean_1 : isUncheckedJS ? Diagnostics.Could_not_find_name_0_Did_you_mean_1 : Diagnostics.Cannot_find_name_0_Did_you_mean_1; + const diagnostic = createError(errorLocation, message, diagnosticName(nameArg), suggestionName); + diagnostic.canonicalHead = getCanonicalDiagnostic(nameNotFoundMessage, diagnosticName(nameArg)); + addErrorOrSuggestion(!isUncheckedJS, diagnostic); + if (suggestion.valueDeclaration) { + addRelatedInfo( + diagnostic, + createDiagnosticForNode(suggestion.valueDeclaration, Diagnostics._0_is_declared_here, suggestionName) + ); + } + } + } + if (!suggestion && !suggestedLib && nameArg) { + error2(errorLocation, nameNotFoundMessage, diagnosticName(nameArg)); + } + suggestionCount++; + } + }); + } + function onSuccessfullyResolvedSymbol(errorLocation, result, meaning, lastLocation, associatedDeclarationForContainingInitializerOrBindingName, withinDeferredContext) { + addLazyDiagnostic(() => { + var _a; + const name = result.escapedName; + const isInExternalModule = lastLocation && isSourceFile(lastLocation) && isExternalOrCommonJsModule(lastLocation); + if (errorLocation && (meaning & 2 /* BlockScopedVariable */ || (meaning & 32 /* Class */ || meaning & 384 /* Enum */) && (meaning & 111551 /* Value */) === 111551 /* Value */)) { + const exportOrLocalSymbol = getExportSymbolOfValueSymbolIfExported(result); + if (exportOrLocalSymbol.flags & 2 /* BlockScopedVariable */ || exportOrLocalSymbol.flags & 32 /* Class */ || exportOrLocalSymbol.flags & 384 /* Enum */) { + checkResolvedBlockScopedVariable(exportOrLocalSymbol, errorLocation); + } + } + if (isInExternalModule && (meaning & 111551 /* Value */) === 111551 /* Value */ && !(errorLocation.flags & 16777216 /* JSDoc */)) { + const merged = getMergedSymbol(result); + if (length(merged.declarations) && every(merged.declarations, (d) => isNamespaceExportDeclaration(d) || isSourceFile(d) && !!d.symbol.globalExports)) { + errorOrSuggestion(!compilerOptions.allowUmdGlobalAccess, errorLocation, Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead, unescapeLeadingUnderscores(name)); + } + } + if (associatedDeclarationForContainingInitializerOrBindingName && !withinDeferredContext && (meaning & 111551 /* Value */) === 111551 /* Value */) { + const candidate = getMergedSymbol(getLateBoundSymbol(result)); + const root = getRootDeclaration(associatedDeclarationForContainingInitializerOrBindingName); + if (candidate === getSymbolOfDeclaration(associatedDeclarationForContainingInitializerOrBindingName)) { + error2(errorLocation, Diagnostics.Parameter_0_cannot_reference_itself, declarationNameToString(associatedDeclarationForContainingInitializerOrBindingName.name)); + } else if (candidate.valueDeclaration && candidate.valueDeclaration.pos > associatedDeclarationForContainingInitializerOrBindingName.pos && root.parent.locals && getSymbol2(root.parent.locals, candidate.escapedName, meaning) === candidate) { + error2(errorLocation, Diagnostics.Parameter_0_cannot_reference_identifier_1_declared_after_it, declarationNameToString(associatedDeclarationForContainingInitializerOrBindingName.name), declarationNameToString(errorLocation)); + } + } + if (errorLocation && meaning & 111551 /* Value */ && result.flags & 2097152 /* Alias */ && !(result.flags & 111551 /* Value */) && !isValidTypeOnlyAliasUseSite(errorLocation)) { + const typeOnlyDeclaration = getTypeOnlyAliasDeclaration(result, 111551 /* Value */); + if (typeOnlyDeclaration) { + const message = typeOnlyDeclaration.kind === 282 /* ExportSpecifier */ || typeOnlyDeclaration.kind === 279 /* ExportDeclaration */ || typeOnlyDeclaration.kind === 281 /* NamespaceExport */ ? Diagnostics._0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type : Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type; + const unescapedName = unescapeLeadingUnderscores(name); + addTypeOnlyDeclarationRelatedInfo( + error2(errorLocation, message, unescapedName), + typeOnlyDeclaration, + unescapedName + ); + } + } + if (compilerOptions.isolatedModules && result && isInExternalModule && (meaning & 111551 /* Value */) === 111551 /* Value */) { + const isGlobal = getSymbol2(globals, name, meaning) === result; + const nonValueSymbol = isGlobal && isSourceFile(lastLocation) && lastLocation.locals && getSymbol2(lastLocation.locals, name, ~111551 /* Value */); + if (nonValueSymbol) { + const importDecl = (_a = nonValueSymbol.declarations) == null ? void 0 : _a.find((d) => d.kind === 277 /* ImportSpecifier */ || d.kind === 274 /* ImportClause */ || d.kind === 275 /* NamespaceImport */ || d.kind === 272 /* ImportEqualsDeclaration */); + if (importDecl && !isTypeOnlyImportDeclaration(importDecl)) { + error2(importDecl, Diagnostics.Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled, unescapeLeadingUnderscores(name)); + } + } + } + }); + } + function addTypeOnlyDeclarationRelatedInfo(diagnostic, typeOnlyDeclaration, unescapedName) { + if (!typeOnlyDeclaration) return diagnostic; + return addRelatedInfo( + diagnostic, + createDiagnosticForNode( + typeOnlyDeclaration, + typeOnlyDeclaration.kind === 282 /* ExportSpecifier */ || typeOnlyDeclaration.kind === 279 /* ExportDeclaration */ || typeOnlyDeclaration.kind === 281 /* NamespaceExport */ ? Diagnostics._0_was_exported_here : Diagnostics._0_was_imported_here, + unescapedName + ) + ); + } + function diagnosticName(nameArg) { + return isString(nameArg) ? unescapeLeadingUnderscores(nameArg) : declarationNameToString(nameArg); + } + function checkAndReportErrorForMissingPrefix(errorLocation, name, nameArg) { + if (!isIdentifier(errorLocation) || errorLocation.escapedText !== name || isTypeReferenceIdentifier(errorLocation) || isInTypeQuery(errorLocation)) { + return false; + } + const container = getThisContainer( + errorLocation, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + let location = container; + while (location) { + if (isClassLike(location.parent)) { + const classSymbol = getSymbolOfDeclaration(location.parent); + if (!classSymbol) { + break; + } + const constructorType = getTypeOfSymbol(classSymbol); + if (getPropertyOfType(constructorType, name)) { + error2(errorLocation, Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0, diagnosticName(nameArg), symbolToString(classSymbol)); + return true; + } + if (location === container && !isStatic(location)) { + const instanceType = getDeclaredTypeOfSymbol(classSymbol).thisType; + if (getPropertyOfType(instanceType, name)) { + error2(errorLocation, Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0, diagnosticName(nameArg)); + return true; + } + } + } + location = location.parent; + } + return false; + } + function checkAndReportErrorForExtendingInterface(errorLocation) { + const expression = getEntityNameForExtendingInterface(errorLocation); + if (expression && resolveEntityName( + expression, + 64 /* Interface */, + /*ignoreErrors*/ + true + )) { + error2(errorLocation, Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements, getTextOfNode(expression)); + return true; + } + return false; + } + function getEntityNameForExtendingInterface(node) { + switch (node.kind) { + case 80 /* Identifier */: + case 212 /* PropertyAccessExpression */: + return node.parent ? getEntityNameForExtendingInterface(node.parent) : void 0; + case 234 /* ExpressionWithTypeArguments */: + if (isEntityNameExpression(node.expression)) { + return node.expression; + } + // falls through + default: + return void 0; + } + } + function checkAndReportErrorForUsingTypeAsNamespace(errorLocation, name, meaning) { + const namespaceMeaning = 1920 /* Namespace */ | (isInJSFile(errorLocation) ? 111551 /* Value */ : 0); + if (meaning === namespaceMeaning) { + const symbol = resolveSymbol(resolveName( + errorLocation, + name, + 788968 /* Type */ & ~namespaceMeaning, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + )); + const parent2 = errorLocation.parent; + if (symbol) { + if (isQualifiedName(parent2)) { + Debug.assert(parent2.left === errorLocation, "Should only be resolving left side of qualified name as a namespace"); + const propName = parent2.right.escapedText; + const propType = getPropertyOfType(getDeclaredTypeOfSymbol(symbol), propName); + if (propType) { + error2( + parent2, + Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1, + unescapeLeadingUnderscores(name), + unescapeLeadingUnderscores(propName) + ); + return true; + } + } + error2(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here, unescapeLeadingUnderscores(name)); + return true; + } + } + return false; + } + function checkAndReportErrorForUsingValueAsType(errorLocation, name, meaning) { + if (meaning & (788968 /* Type */ & ~1920 /* Namespace */)) { + const symbol = resolveSymbol(resolveName( + errorLocation, + name, + ~788968 /* Type */ & 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + )); + if (symbol && !(symbol.flags & 1920 /* Namespace */)) { + error2(errorLocation, Diagnostics._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0, unescapeLeadingUnderscores(name)); + return true; + } + } + return false; + } + function isPrimitiveTypeName(name) { + return name === "any" || name === "string" || name === "number" || name === "boolean" || name === "never" || name === "unknown"; + } + function checkAndReportErrorForExportingPrimitiveType(errorLocation, name) { + if (isPrimitiveTypeName(name) && errorLocation.parent.kind === 282 /* ExportSpecifier */) { + error2(errorLocation, Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, name); + return true; + } + return false; + } + function checkAndReportErrorForUsingTypeAsValue(errorLocation, name, meaning) { + if (meaning & 111551 /* Value */) { + if (isPrimitiveTypeName(name)) { + const grandparent = errorLocation.parent.parent; + if (grandparent && grandparent.parent && isHeritageClause(grandparent)) { + const heritageKind = grandparent.token; + const containerKind = grandparent.parent.kind; + if (containerKind === 265 /* InterfaceDeclaration */ && heritageKind === 96 /* ExtendsKeyword */) { + error2(errorLocation, Diagnostics.An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types, unescapeLeadingUnderscores(name)); + } else if (isClassLike(grandparent.parent) && heritageKind === 96 /* ExtendsKeyword */) { + error2(errorLocation, Diagnostics.A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values, unescapeLeadingUnderscores(name)); + } else if (isClassLike(grandparent.parent) && heritageKind === 119 /* ImplementsKeyword */) { + error2(errorLocation, Diagnostics.A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types, unescapeLeadingUnderscores(name)); + } + } else { + error2(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, unescapeLeadingUnderscores(name)); + } + return true; + } + const symbol = resolveSymbol(resolveName( + errorLocation, + name, + 788968 /* Type */ & ~111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + )); + const allFlags = symbol && getSymbolFlags(symbol); + if (symbol && allFlags !== void 0 && !(allFlags & 111551 /* Value */)) { + const rawName = unescapeLeadingUnderscores(name); + if (isES2015OrLaterConstructorName(name)) { + error2(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_es2015_or_later, rawName); + } else if (maybeMappedType(errorLocation, symbol)) { + error2(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0, rawName, rawName === "K" ? "P" : "K"); + } else { + error2(errorLocation, Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here, rawName); + } + return true; + } + } + return false; + } + function maybeMappedType(node, symbol) { + const container = findAncestor(node.parent, (n) => isComputedPropertyName(n) || isPropertySignature(n) ? false : isTypeLiteralNode(n) || "quit"); + if (container && container.members.length === 1) { + const type = getDeclaredTypeOfSymbol(symbol); + return !!(type.flags & 1048576 /* Union */) && allTypesAssignableToKind( + type, + 384 /* StringOrNumberLiteral */, + /*strict*/ + true + ); + } + return false; + } + function isES2015OrLaterConstructorName(n) { + switch (n) { + case "Promise": + case "Symbol": + case "Map": + case "WeakMap": + case "Set": + case "WeakSet": + return true; + } + return false; + } + function checkAndReportErrorForUsingNamespaceAsTypeOrValue(errorLocation, name, meaning) { + if (meaning & (111551 /* Value */ & ~788968 /* Type */)) { + const symbol = resolveSymbol(resolveName( + errorLocation, + name, + 1024 /* NamespaceModule */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + )); + if (symbol) { + error2( + errorLocation, + Diagnostics.Cannot_use_namespace_0_as_a_value, + unescapeLeadingUnderscores(name) + ); + return true; + } + } else if (meaning & (788968 /* Type */ & ~111551 /* Value */)) { + const symbol = resolveSymbol(resolveName( + errorLocation, + name, + 1536 /* Module */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + )); + if (symbol) { + error2(errorLocation, Diagnostics.Cannot_use_namespace_0_as_a_type, unescapeLeadingUnderscores(name)); + return true; + } + } + return false; + } + function checkResolvedBlockScopedVariable(result, errorLocation) { + var _a; + Debug.assert(!!(result.flags & 2 /* BlockScopedVariable */ || result.flags & 32 /* Class */ || result.flags & 384 /* Enum */)); + if (result.flags & (16 /* Function */ | 1 /* FunctionScopedVariable */ | 67108864 /* Assignment */) && result.flags & 32 /* Class */) { + return; + } + const declaration = (_a = result.declarations) == null ? void 0 : _a.find( + (d) => isBlockOrCatchScoped(d) || isClassLike(d) || d.kind === 267 /* EnumDeclaration */ + ); + if (declaration === void 0) return Debug.fail("checkResolvedBlockScopedVariable could not find block-scoped declaration"); + if (!(declaration.flags & 33554432 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) { + let diagnosticMessage; + const declarationName = declarationNameToString(getNameOfDeclaration(declaration)); + if (result.flags & 2 /* BlockScopedVariable */) { + diagnosticMessage = error2(errorLocation, Diagnostics.Block_scoped_variable_0_used_before_its_declaration, declarationName); + } else if (result.flags & 32 /* Class */) { + diagnosticMessage = error2(errorLocation, Diagnostics.Class_0_used_before_its_declaration, declarationName); + } else if (result.flags & 256 /* RegularEnum */) { + diagnosticMessage = error2(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName); + } else { + Debug.assert(!!(result.flags & 128 /* ConstEnum */)); + if (getIsolatedModules(compilerOptions)) { + diagnosticMessage = error2(errorLocation, Diagnostics.Enum_0_used_before_its_declaration, declarationName); + } + } + if (diagnosticMessage) { + addRelatedInfo(diagnosticMessage, createDiagnosticForNode(declaration, Diagnostics._0_is_declared_here, declarationName)); + } + } + } + function isSameScopeDescendentOf(initial, parent2, stopAt) { + return !!parent2 && !!findAncestor(initial, (n) => n === parent2 || (n === stopAt || isFunctionLike(n) && (!getImmediatelyInvokedFunctionExpression(n) || getFunctionFlags(n) & 3 /* AsyncGenerator */) ? "quit" : false)); + } + function getAnyImportSyntax(node) { + switch (node.kind) { + case 272 /* ImportEqualsDeclaration */: + return node; + case 274 /* ImportClause */: + return node.parent; + case 275 /* NamespaceImport */: + return node.parent.parent; + case 277 /* ImportSpecifier */: + return node.parent.parent.parent; + default: + return void 0; + } + } + function getDeclarationOfAliasSymbol(symbol) { + return symbol.declarations && findLast(symbol.declarations, isAliasSymbolDeclaration); + } + function isAliasSymbolDeclaration(node) { + return node.kind === 272 /* ImportEqualsDeclaration */ || node.kind === 271 /* NamespaceExportDeclaration */ || node.kind === 274 /* ImportClause */ && !!node.name || node.kind === 275 /* NamespaceImport */ || node.kind === 281 /* NamespaceExport */ || node.kind === 277 /* ImportSpecifier */ || node.kind === 282 /* ExportSpecifier */ || node.kind === 278 /* ExportAssignment */ && exportAssignmentIsAlias(node) || isBinaryExpression(node) && getAssignmentDeclarationKind(node) === 2 /* ModuleExports */ && exportAssignmentIsAlias(node) || isAccessExpression(node) && isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 64 /* EqualsToken */ && isAliasableOrJsExpression(node.parent.right) || node.kind === 305 /* ShorthandPropertyAssignment */ || node.kind === 304 /* PropertyAssignment */ && isAliasableOrJsExpression(node.initializer) || node.kind === 261 /* VariableDeclaration */ && isVariableDeclarationInitializedToBareOrAccessedRequire(node) || node.kind === 209 /* BindingElement */ && isVariableDeclarationInitializedToBareOrAccessedRequire(node.parent.parent); + } + function isAliasableOrJsExpression(e) { + return isAliasableExpression(e) || isFunctionExpression(e) && isJSConstructor(e); + } + function getTargetOfImportEqualsDeclaration(node, dontResolveAlias) { + const commonJSPropertyAccess = getCommonJSPropertyAccess(node); + if (commonJSPropertyAccess) { + const name = getLeftmostAccessExpression(commonJSPropertyAccess.expression).arguments[0]; + return isIdentifier(commonJSPropertyAccess.name) ? resolveSymbol(getPropertyOfType(resolveExternalModuleTypeByLiteral(name), commonJSPropertyAccess.name.escapedText)) : void 0; + } + if (isVariableDeclaration(node) || node.moduleReference.kind === 284 /* ExternalModuleReference */) { + const immediate = resolveExternalModuleName( + node, + getExternalModuleRequireArgument(node) || getExternalModuleImportEqualsDeclarationExpression(node) + ); + const resolved2 = resolveExternalModuleSymbol(immediate); + if (resolved2 && 102 /* Node20 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + const moduleExports = getExportOfModule(resolved2, "module.exports", node, dontResolveAlias); + if (moduleExports) { + return moduleExports; + } + } + markSymbolOfAliasDeclarationIfTypeOnly( + node, + immediate, + resolved2, + /*overwriteEmpty*/ + false + ); + return resolved2; + } + const resolved = getSymbolOfPartOfRightHandSideOfImportEquals(node.moduleReference, dontResolveAlias); + checkAndReportErrorForResolvingImportAliasToTypeOnlySymbol(node, resolved); + return resolved; + } + function checkAndReportErrorForResolvingImportAliasToTypeOnlySymbol(node, resolved) { + if (markSymbolOfAliasDeclarationIfTypeOnly( + node, + /*immediateTarget*/ + void 0, + resolved, + /*overwriteEmpty*/ + false + ) && !node.isTypeOnly) { + const typeOnlyDeclaration = getTypeOnlyAliasDeclaration(getSymbolOfDeclaration(node)); + const isExport = typeOnlyDeclaration.kind === 282 /* ExportSpecifier */ || typeOnlyDeclaration.kind === 279 /* ExportDeclaration */; + const message = isExport ? Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type : Diagnostics.An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type; + const relatedMessage = isExport ? Diagnostics._0_was_exported_here : Diagnostics._0_was_imported_here; + const name = typeOnlyDeclaration.kind === 279 /* ExportDeclaration */ ? "*" : moduleExportNameTextUnescaped(typeOnlyDeclaration.name); + addRelatedInfo(error2(node.moduleReference, message), createDiagnosticForNode(typeOnlyDeclaration, relatedMessage, name)); + } + } + function resolveExportByName(moduleSymbol, name, sourceNode, dontResolveAlias) { + const exportValue = moduleSymbol.exports.get("export=" /* ExportEquals */); + const exportSymbol = exportValue ? getPropertyOfType( + getTypeOfSymbol(exportValue), + name, + /*skipObjectFunctionPropertyAugment*/ + true + ) : moduleSymbol.exports.get(name); + const resolved = resolveSymbol(exportSymbol, dontResolveAlias); + markSymbolOfAliasDeclarationIfTypeOnly( + sourceNode, + exportSymbol, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + function isSyntacticDefault(node) { + return isExportAssignment(node) && !node.isExportEquals || hasSyntacticModifier(node, 2048 /* Default */) || isExportSpecifier(node) || isNamespaceExport(node); + } + function getEmitSyntaxForModuleSpecifierExpression(usage) { + return isStringLiteralLike(usage) ? host.getEmitSyntaxForUsageLocation(getSourceFileOfNode(usage), usage) : void 0; + } + function isESMFormatImportImportingCommonjsFormatFile(usageMode, targetMode) { + return usageMode === 99 /* ESNext */ && targetMode === 1 /* CommonJS */; + } + function isOnlyImportableAsDefault(usage, resolvedModule) { + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + const usageMode = getEmitSyntaxForModuleSpecifierExpression(usage); + if (usageMode === 99 /* ESNext */) { + resolvedModule ?? (resolvedModule = resolveExternalModuleName( + usage, + usage, + /*ignoreErrors*/ + true + )); + const targetFile = resolvedModule && getSourceFileOfModule(resolvedModule); + return targetFile && (isJsonSourceFile(targetFile) || getDeclarationFileExtension(targetFile.fileName) === ".d.json.ts"); + } + } + return false; + } + function canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, usage) { + const usageMode = file && getEmitSyntaxForModuleSpecifierExpression(usage); + if (file && usageMode !== void 0) { + const targetMode = host.getImpliedNodeFormatForEmit(file); + if (usageMode === 99 /* ESNext */ && targetMode === 1 /* CommonJS */ && 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + return true; + } + if (usageMode === 99 /* ESNext */ && targetMode === 99 /* ESNext */) { + return false; + } + } + if (!allowSyntheticDefaultImports) { + return false; + } + if (!file || file.isDeclarationFile) { + const defaultExportSymbol = resolveExportByName( + moduleSymbol, + "default" /* Default */, + /*sourceNode*/ + void 0, + /*dontResolveAlias*/ + true + ); + if (defaultExportSymbol && some(defaultExportSymbol.declarations, isSyntacticDefault)) { + return false; + } + if (resolveExportByName( + moduleSymbol, + escapeLeadingUnderscores("__esModule"), + /*sourceNode*/ + void 0, + dontResolveAlias + )) { + return false; + } + return true; + } + if (!isSourceFileJS(file)) { + return hasExportAssignmentSymbol(moduleSymbol); + } + return typeof file.externalModuleIndicator !== "object" && !resolveExportByName( + moduleSymbol, + escapeLeadingUnderscores("__esModule"), + /*sourceNode*/ + void 0, + dontResolveAlias + ); + } + function getTargetOfImportClause(node, dontResolveAlias) { + const moduleSymbol = resolveExternalModuleName(node, node.parent.moduleSpecifier); + if (moduleSymbol) { + return getTargetofModuleDefault(moduleSymbol, node, dontResolveAlias); + } + } + function getTargetofModuleDefault(moduleSymbol, node, dontResolveAlias) { + var _a; + const file = (_a = moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); + const specifier = getModuleSpecifierForImportOrExport(node); + let exportDefaultSymbol; + let exportModuleDotExportsSymbol; + if (isShorthandAmbientModuleSymbol(moduleSymbol)) { + exportDefaultSymbol = moduleSymbol; + } else if (file && specifier && 102 /* Node20 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ && getEmitSyntaxForModuleSpecifierExpression(specifier) === 1 /* CommonJS */ && host.getImpliedNodeFormatForEmit(file) === 99 /* ESNext */ && (exportModuleDotExportsSymbol = resolveExportByName(moduleSymbol, "module.exports", node, dontResolveAlias))) { + if (!getESModuleInterop(compilerOptions)) { + error2(node.name, Diagnostics.Module_0_can_only_be_default_imported_using_the_1_flag, symbolToString(moduleSymbol), "esModuleInterop"); + return void 0; + } + markSymbolOfAliasDeclarationIfTypeOnly( + node, + exportModuleDotExportsSymbol, + /*finalTarget*/ + void 0, + /*overwriteEmpty*/ + false + ); + return exportModuleDotExportsSymbol; + } else { + exportDefaultSymbol = resolveExportByName(moduleSymbol, "default" /* Default */, node, dontResolveAlias); + } + if (!specifier) { + return exportDefaultSymbol; + } + const hasDefaultOnly = isOnlyImportableAsDefault(specifier, moduleSymbol); + const hasSyntheticDefault = canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, specifier); + if (!exportDefaultSymbol && !hasSyntheticDefault && !hasDefaultOnly) { + if (hasExportAssignmentSymbol(moduleSymbol) && !allowSyntheticDefaultImports) { + const compilerOptionName = moduleKind >= 5 /* ES2015 */ ? "allowSyntheticDefaultImports" : "esModuleInterop"; + const exportEqualsSymbol = moduleSymbol.exports.get("export=" /* ExportEquals */); + const exportAssignment = exportEqualsSymbol.valueDeclaration; + const err = error2(node.name, Diagnostics.Module_0_can_only_be_default_imported_using_the_1_flag, symbolToString(moduleSymbol), compilerOptionName); + if (exportAssignment) { + addRelatedInfo( + err, + createDiagnosticForNode( + exportAssignment, + Diagnostics.This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag, + compilerOptionName + ) + ); + } + } else if (isImportClause(node)) { + reportNonDefaultExport(moduleSymbol, node); + } else { + errorNoModuleMemberSymbol(moduleSymbol, moduleSymbol, node, isImportOrExportSpecifier(node) && node.propertyName || node.name); + } + } else if (hasSyntheticDefault || hasDefaultOnly) { + const resolved = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); + markSymbolOfAliasDeclarationIfTypeOnly( + node, + moduleSymbol, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + markSymbolOfAliasDeclarationIfTypeOnly( + node, + exportDefaultSymbol, + /*finalTarget*/ + void 0, + /*overwriteEmpty*/ + false + ); + return exportDefaultSymbol; + } + function getModuleSpecifierForImportOrExport(node) { + switch (node.kind) { + case 274 /* ImportClause */: + return node.parent.moduleSpecifier; + case 272 /* ImportEqualsDeclaration */: + return isExternalModuleReference(node.moduleReference) ? node.moduleReference.expression : void 0; + case 275 /* NamespaceImport */: + return node.parent.parent.moduleSpecifier; + case 277 /* ImportSpecifier */: + return node.parent.parent.parent.moduleSpecifier; + case 282 /* ExportSpecifier */: + return node.parent.parent.moduleSpecifier; + default: + return Debug.assertNever(node); + } + } + function reportNonDefaultExport(moduleSymbol, node) { + var _a, _b, _c; + if ((_a = moduleSymbol.exports) == null ? void 0 : _a.has(node.symbol.escapedName)) { + error2( + node.name, + Diagnostics.Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead, + symbolToString(moduleSymbol), + symbolToString(node.symbol) + ); + } else { + const diagnostic = error2(node.name, Diagnostics.Module_0_has_no_default_export, symbolToString(moduleSymbol)); + const exportStar = (_b = moduleSymbol.exports) == null ? void 0 : _b.get("__export" /* ExportStar */); + if (exportStar) { + const defaultExport = (_c = exportStar.declarations) == null ? void 0 : _c.find( + (decl) => { + var _a2, _b2; + return !!(isExportDeclaration(decl) && decl.moduleSpecifier && ((_b2 = (_a2 = resolveExternalModuleName(decl, decl.moduleSpecifier)) == null ? void 0 : _a2.exports) == null ? void 0 : _b2.has("default" /* Default */))); + } + ); + if (defaultExport) { + addRelatedInfo(diagnostic, createDiagnosticForNode(defaultExport, Diagnostics.export_Asterisk_does_not_re_export_a_default)); + } + } + } + } + function getTargetOfNamespaceImport(node, dontResolveAlias) { + const moduleSpecifier = node.parent.parent.moduleSpecifier; + const immediate = resolveExternalModuleName(node, moduleSpecifier); + const resolved = resolveESModuleSymbol( + immediate, + moduleSpecifier, + dontResolveAlias, + /*suppressInteropError*/ + false + ); + markSymbolOfAliasDeclarationIfTypeOnly( + node, + immediate, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + function getTargetOfNamespaceExport(node, dontResolveAlias) { + const moduleSpecifier = node.parent.moduleSpecifier; + const immediate = moduleSpecifier && resolveExternalModuleName(node, moduleSpecifier); + const resolved = moduleSpecifier && resolveESModuleSymbol( + immediate, + moduleSpecifier, + dontResolveAlias, + /*suppressInteropError*/ + false + ); + markSymbolOfAliasDeclarationIfTypeOnly( + node, + immediate, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + function combineValueAndTypeSymbols(valueSymbol, typeSymbol) { + if (valueSymbol === unknownSymbol && typeSymbol === unknownSymbol) { + return unknownSymbol; + } + if (valueSymbol.flags & (788968 /* Type */ | 1920 /* Namespace */)) { + return valueSymbol; + } + const result = createSymbol(valueSymbol.flags | typeSymbol.flags, valueSymbol.escapedName); + Debug.assert(valueSymbol.declarations || typeSymbol.declarations); + result.declarations = deduplicate(concatenate(valueSymbol.declarations, typeSymbol.declarations), equateValues); + result.parent = valueSymbol.parent || typeSymbol.parent; + if (valueSymbol.valueDeclaration) result.valueDeclaration = valueSymbol.valueDeclaration; + if (typeSymbol.members) result.members = new Map(typeSymbol.members); + if (valueSymbol.exports) result.exports = new Map(valueSymbol.exports); + return result; + } + function getExportOfModule(symbol, nameText, specifier, dontResolveAlias) { + var _a; + if (symbol.flags & 1536 /* Module */) { + const exportSymbol = getExportsOfSymbol(symbol).get(nameText); + const resolved = resolveSymbol(exportSymbol, dontResolveAlias); + const exportStarDeclaration = (_a = getSymbolLinks(symbol).typeOnlyExportStarMap) == null ? void 0 : _a.get(nameText); + markSymbolOfAliasDeclarationIfTypeOnly( + specifier, + exportSymbol, + resolved, + /*overwriteEmpty*/ + false, + exportStarDeclaration, + nameText + ); + return resolved; + } + } + function getPropertyOfVariable(symbol, name) { + if (symbol.flags & 3 /* Variable */) { + const typeAnnotation = symbol.valueDeclaration.type; + if (typeAnnotation) { + return resolveSymbol(getPropertyOfType(getTypeFromTypeNode(typeAnnotation), name)); + } + } + } + function getExternalModuleMember(node, specifier, dontResolveAlias = false) { + var _a; + const moduleSpecifier = getExternalModuleRequireArgument(node) || node.moduleSpecifier; + const moduleSymbol = resolveExternalModuleName(node, moduleSpecifier); + const name = !isPropertyAccessExpression(specifier) && specifier.propertyName || specifier.name; + if (!isIdentifier(name) && name.kind !== 11 /* StringLiteral */) { + return void 0; + } + const nameText = moduleExportNameTextEscaped(name); + const suppressInteropError = nameText === "default" /* Default */ && allowSyntheticDefaultImports; + const targetSymbol = resolveESModuleSymbol( + moduleSymbol, + moduleSpecifier, + /*dontResolveAlias*/ + false, + suppressInteropError + ); + if (targetSymbol) { + if (nameText || name.kind === 11 /* StringLiteral */) { + if (isShorthandAmbientModuleSymbol(moduleSymbol)) { + return moduleSymbol; + } + let symbolFromVariable; + if (moduleSymbol && moduleSymbol.exports && moduleSymbol.exports.get("export=" /* ExportEquals */)) { + symbolFromVariable = getPropertyOfType( + getTypeOfSymbol(targetSymbol), + nameText, + /*skipObjectFunctionPropertyAugment*/ + true + ); + } else { + symbolFromVariable = getPropertyOfVariable(targetSymbol, nameText); + } + symbolFromVariable = resolveSymbol(symbolFromVariable, dontResolveAlias); + let symbolFromModule = getExportOfModule(targetSymbol, nameText, specifier, dontResolveAlias); + if (symbolFromModule === void 0 && nameText === "default" /* Default */) { + const file = (_a = moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); + if (isOnlyImportableAsDefault(moduleSpecifier, moduleSymbol) || canHaveSyntheticDefault(file, moduleSymbol, dontResolveAlias, moduleSpecifier)) { + symbolFromModule = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) || resolveSymbol(moduleSymbol, dontResolveAlias); + } + } + const symbol = symbolFromModule && symbolFromVariable && symbolFromModule !== symbolFromVariable ? combineValueAndTypeSymbols(symbolFromVariable, symbolFromModule) : symbolFromModule || symbolFromVariable; + if (isImportOrExportSpecifier(specifier) && isOnlyImportableAsDefault(moduleSpecifier, moduleSymbol) && nameText !== "default" /* Default */) { + error2(name, Diagnostics.Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0, ModuleKind[moduleKind]); + } else if (!symbol) { + errorNoModuleMemberSymbol(moduleSymbol, targetSymbol, node, name); + } + return symbol; + } + } + } + function errorNoModuleMemberSymbol(moduleSymbol, targetSymbol, node, name) { + var _a; + const moduleName = getFullyQualifiedName(moduleSymbol, node); + const declarationName = declarationNameToString(name); + const suggestion = isIdentifier(name) ? getSuggestedSymbolForNonexistentModule(name, targetSymbol) : void 0; + if (suggestion !== void 0) { + const suggestionName = symbolToString(suggestion); + const diagnostic = error2(name, Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2, moduleName, declarationName, suggestionName); + if (suggestion.valueDeclaration) { + addRelatedInfo(diagnostic, createDiagnosticForNode(suggestion.valueDeclaration, Diagnostics._0_is_declared_here, suggestionName)); + } + } else { + if ((_a = moduleSymbol.exports) == null ? void 0 : _a.has("default" /* Default */)) { + error2( + name, + Diagnostics.Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead, + moduleName, + declarationName + ); + } else { + reportNonExportedMember(node, name, declarationName, moduleSymbol, moduleName); + } + } + } + function reportNonExportedMember(node, name, declarationName, moduleSymbol, moduleName) { + var _a, _b; + const localSymbol = (_b = (_a = tryCast(moduleSymbol.valueDeclaration, canHaveLocals)) == null ? void 0 : _a.locals) == null ? void 0 : _b.get(moduleExportNameTextEscaped(name)); + const exports2 = moduleSymbol.exports; + if (localSymbol) { + const exportedEqualsSymbol = exports2 == null ? void 0 : exports2.get("export=" /* ExportEquals */); + if (exportedEqualsSymbol) { + getSymbolIfSameReference(exportedEqualsSymbol, localSymbol) ? reportInvalidImportEqualsExportMember(node, name, declarationName, moduleName) : error2(name, Diagnostics.Module_0_has_no_exported_member_1, moduleName, declarationName); + } else { + const exportedSymbol = exports2 ? find(symbolsToArray(exports2), (symbol) => !!getSymbolIfSameReference(symbol, localSymbol)) : void 0; + const diagnostic = exportedSymbol ? error2(name, Diagnostics.Module_0_declares_1_locally_but_it_is_exported_as_2, moduleName, declarationName, symbolToString(exportedSymbol)) : error2(name, Diagnostics.Module_0_declares_1_locally_but_it_is_not_exported, moduleName, declarationName); + if (localSymbol.declarations) { + addRelatedInfo(diagnostic, ...map(localSymbol.declarations, (decl, index) => createDiagnosticForNode(decl, index === 0 ? Diagnostics._0_is_declared_here : Diagnostics.and_here, declarationName))); + } + } + } else { + error2(name, Diagnostics.Module_0_has_no_exported_member_1, moduleName, declarationName); + } + } + function reportInvalidImportEqualsExportMember(node, name, declarationName, moduleName) { + if (moduleKind >= 5 /* ES2015 */) { + const message = getESModuleInterop(compilerOptions) ? Diagnostics._0_can_only_be_imported_by_using_a_default_import : Diagnostics._0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import; + error2(name, message, declarationName); + } else { + if (isInJSFile(node)) { + const message = getESModuleInterop(compilerOptions) ? Diagnostics._0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import : Diagnostics._0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import; + error2(name, message, declarationName); + } else { + const message = getESModuleInterop(compilerOptions) ? Diagnostics._0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import : Diagnostics._0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import; + error2(name, message, declarationName, declarationName, moduleName); + } + } + } + function getTargetOfImportSpecifier(node, dontResolveAlias) { + if (isImportSpecifier(node) && moduleExportNameIsDefault(node.propertyName || node.name)) { + const specifier = getModuleSpecifierForImportOrExport(node); + const moduleSymbol = specifier && resolveExternalModuleName(node, specifier); + if (moduleSymbol) { + return getTargetofModuleDefault(moduleSymbol, node, dontResolveAlias); + } + } + const root = isBindingElement(node) ? getRootDeclaration(node) : node.parent.parent.parent; + const commonJSPropertyAccess = getCommonJSPropertyAccess(root); + const resolved = getExternalModuleMember(root, commonJSPropertyAccess || node, dontResolveAlias); + const name = node.propertyName || node.name; + if (commonJSPropertyAccess && resolved && isIdentifier(name)) { + return resolveSymbol(getPropertyOfType(getTypeOfSymbol(resolved), name.escapedText), dontResolveAlias); + } + markSymbolOfAliasDeclarationIfTypeOnly( + node, + /*immediateTarget*/ + void 0, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + function getCommonJSPropertyAccess(node) { + if (isVariableDeclaration(node) && node.initializer && isPropertyAccessExpression(node.initializer)) { + return node.initializer; + } + } + function getTargetOfNamespaceExportDeclaration(node, dontResolveAlias) { + if (canHaveSymbol(node.parent)) { + const resolved = resolveExternalModuleSymbol(node.parent.symbol, dontResolveAlias); + markSymbolOfAliasDeclarationIfTypeOnly( + node, + /*immediateTarget*/ + void 0, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + } + function getTargetOfExportSpecifier(node, meaning, dontResolveAlias) { + const name = node.propertyName || node.name; + if (moduleExportNameIsDefault(name)) { + const specifier = getModuleSpecifierForImportOrExport(node); + const moduleSymbol = specifier && resolveExternalModuleName(node, specifier); + if (moduleSymbol) { + return getTargetofModuleDefault(moduleSymbol, node, !!dontResolveAlias); + } + } + const resolved = node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node, dontResolveAlias) : name.kind === 11 /* StringLiteral */ ? void 0 : ( + // Skip for invalid syntax like this: export { "x" } + resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + false, + dontResolveAlias + ) + ); + markSymbolOfAliasDeclarationIfTypeOnly( + node, + /*immediateTarget*/ + void 0, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + function getTargetOfExportAssignment(node, dontResolveAlias) { + const expression = isExportAssignment(node) ? node.expression : node.right; + const resolved = getTargetOfAliasLikeExpression(expression, dontResolveAlias); + markSymbolOfAliasDeclarationIfTypeOnly( + node, + /*immediateTarget*/ + void 0, + resolved, + /*overwriteEmpty*/ + false + ); + return resolved; + } + function getTargetOfAliasLikeExpression(expression, dontResolveAlias) { + if (isClassExpression(expression)) { + return checkExpressionCached(expression).symbol; + } + if (!isEntityName(expression) && !isEntityNameExpression(expression)) { + return void 0; + } + const aliasLike = resolveEntityName( + expression, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, + /*ignoreErrors*/ + true, + dontResolveAlias + ); + if (aliasLike) { + return aliasLike; + } + checkExpressionCached(expression); + return getNodeLinks(expression).resolvedSymbol; + } + function getTargetOfAccessExpression(node, dontRecursivelyResolve) { + if (!(isBinaryExpression(node.parent) && node.parent.left === node && node.parent.operatorToken.kind === 64 /* EqualsToken */)) { + return void 0; + } + return getTargetOfAliasLikeExpression(node.parent.right, dontRecursivelyResolve); + } + function getTargetOfAliasDeclaration(node, dontRecursivelyResolve = false) { + switch (node.kind) { + case 272 /* ImportEqualsDeclaration */: + case 261 /* VariableDeclaration */: + return getTargetOfImportEqualsDeclaration(node, dontRecursivelyResolve); + case 274 /* ImportClause */: + return getTargetOfImportClause(node, dontRecursivelyResolve); + case 275 /* NamespaceImport */: + return getTargetOfNamespaceImport(node, dontRecursivelyResolve); + case 281 /* NamespaceExport */: + return getTargetOfNamespaceExport(node, dontRecursivelyResolve); + case 277 /* ImportSpecifier */: + case 209 /* BindingElement */: + return getTargetOfImportSpecifier(node, dontRecursivelyResolve); + case 282 /* ExportSpecifier */: + return getTargetOfExportSpecifier(node, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, dontRecursivelyResolve); + case 278 /* ExportAssignment */: + case 227 /* BinaryExpression */: + return getTargetOfExportAssignment(node, dontRecursivelyResolve); + case 271 /* NamespaceExportDeclaration */: + return getTargetOfNamespaceExportDeclaration(node, dontRecursivelyResolve); + case 305 /* ShorthandPropertyAssignment */: + return resolveEntityName( + node.name, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, + /*ignoreErrors*/ + true, + dontRecursivelyResolve + ); + case 304 /* PropertyAssignment */: + return getTargetOfAliasLikeExpression(node.initializer, dontRecursivelyResolve); + case 213 /* ElementAccessExpression */: + case 212 /* PropertyAccessExpression */: + return getTargetOfAccessExpression(node, dontRecursivelyResolve); + default: + return Debug.fail(); + } + } + function isNonLocalAlias(symbol, excludes = 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */) { + if (!symbol) return false; + return (symbol.flags & (2097152 /* Alias */ | excludes)) === 2097152 /* Alias */ || !!(symbol.flags & 2097152 /* Alias */ && symbol.flags & 67108864 /* Assignment */); + } + function resolveSymbol(symbol, dontResolveAlias) { + return !dontResolveAlias && isNonLocalAlias(symbol) ? resolveAlias(symbol) : symbol; + } + function resolveAlias(symbol) { + Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here."); + const links = getSymbolLinks(symbol); + if (!links.aliasTarget) { + links.aliasTarget = resolvingSymbol; + const node = getDeclarationOfAliasSymbol(symbol); + if (!node) return Debug.fail(); + const target = getTargetOfAliasDeclaration(node); + if (links.aliasTarget === resolvingSymbol) { + links.aliasTarget = target || unknownSymbol; + } else { + error2(node, Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); + } + } else if (links.aliasTarget === resolvingSymbol) { + links.aliasTarget = unknownSymbol; + } + return links.aliasTarget; + } + function tryResolveAlias(symbol) { + const links = getSymbolLinks(symbol); + if (links.aliasTarget !== resolvingSymbol) { + return resolveAlias(symbol); + } + return void 0; + } + function getSymbolFlags(symbol, excludeTypeOnlyMeanings, excludeLocalMeanings) { + const typeOnlyDeclaration = excludeTypeOnlyMeanings && getTypeOnlyAliasDeclaration(symbol); + const typeOnlyDeclarationIsExportStar = typeOnlyDeclaration && isExportDeclaration(typeOnlyDeclaration); + const typeOnlyResolution = typeOnlyDeclaration && (typeOnlyDeclarationIsExportStar ? resolveExternalModuleName( + typeOnlyDeclaration.moduleSpecifier, + typeOnlyDeclaration.moduleSpecifier, + /*ignoreErrors*/ + true + ) : resolveAlias(typeOnlyDeclaration.symbol)); + const typeOnlyExportStarTargets = typeOnlyDeclarationIsExportStar && typeOnlyResolution ? getExportsOfModule(typeOnlyResolution) : void 0; + let flags = excludeLocalMeanings ? 0 /* None */ : symbol.flags; + let seenSymbols; + while (symbol.flags & 2097152 /* Alias */) { + const target = getExportSymbolOfValueSymbolIfExported(resolveAlias(symbol)); + if (!typeOnlyDeclarationIsExportStar && target === typeOnlyResolution || (typeOnlyExportStarTargets == null ? void 0 : typeOnlyExportStarTargets.get(target.escapedName)) === target) { + break; + } + if (target === unknownSymbol) { + return -1 /* All */; + } + if (target === symbol || (seenSymbols == null ? void 0 : seenSymbols.has(target))) { + break; + } + if (target.flags & 2097152 /* Alias */) { + if (seenSymbols) { + seenSymbols.add(target); + } else { + seenSymbols = /* @__PURE__ */ new Set([symbol, target]); + } + } + flags |= target.flags; + symbol = target; + } + return flags; + } + function markSymbolOfAliasDeclarationIfTypeOnly(aliasDeclaration, immediateTarget, finalTarget, overwriteEmpty, exportStarDeclaration, exportStarName) { + if (!aliasDeclaration || isPropertyAccessExpression(aliasDeclaration)) return false; + const sourceSymbol = getSymbolOfDeclaration(aliasDeclaration); + if (isTypeOnlyImportOrExportDeclaration(aliasDeclaration)) { + const links2 = getSymbolLinks(sourceSymbol); + links2.typeOnlyDeclaration = aliasDeclaration; + return true; + } + if (exportStarDeclaration) { + const links2 = getSymbolLinks(sourceSymbol); + links2.typeOnlyDeclaration = exportStarDeclaration; + if (sourceSymbol.escapedName !== exportStarName) { + links2.typeOnlyExportStarName = exportStarName; + } + return true; + } + const links = getSymbolLinks(sourceSymbol); + return markSymbolOfAliasDeclarationIfTypeOnlyWorker(links, immediateTarget, overwriteEmpty) || markSymbolOfAliasDeclarationIfTypeOnlyWorker(links, finalTarget, overwriteEmpty); + } + function markSymbolOfAliasDeclarationIfTypeOnlyWorker(aliasDeclarationLinks, target, overwriteEmpty) { + var _a; + if (target && (aliasDeclarationLinks.typeOnlyDeclaration === void 0 || overwriteEmpty && aliasDeclarationLinks.typeOnlyDeclaration === false)) { + const exportSymbol = ((_a = target.exports) == null ? void 0 : _a.get("export=" /* ExportEquals */)) ?? target; + const typeOnly = exportSymbol.declarations && find(exportSymbol.declarations, isTypeOnlyImportOrExportDeclaration); + aliasDeclarationLinks.typeOnlyDeclaration = typeOnly ?? getSymbolLinks(exportSymbol).typeOnlyDeclaration ?? false; + } + return !!aliasDeclarationLinks.typeOnlyDeclaration; + } + function getTypeOnlyAliasDeclaration(symbol, include) { + var _a; + if (!(symbol.flags & 2097152 /* Alias */)) { + return void 0; + } + const links = getSymbolLinks(symbol); + if (links.typeOnlyDeclaration === void 0) { + links.typeOnlyDeclaration = false; + const resolved = resolveSymbol(symbol); + markSymbolOfAliasDeclarationIfTypeOnly( + (_a = symbol.declarations) == null ? void 0 : _a[0], + getDeclarationOfAliasSymbol(symbol) && getImmediateAliasedSymbol(symbol), + resolved, + /*overwriteEmpty*/ + true + ); + } + if (include === void 0) { + return links.typeOnlyDeclaration || void 0; + } + if (links.typeOnlyDeclaration) { + const resolved = links.typeOnlyDeclaration.kind === 279 /* ExportDeclaration */ ? resolveSymbol(getExportsOfModule(links.typeOnlyDeclaration.symbol.parent).get(links.typeOnlyExportStarName || symbol.escapedName)) : resolveAlias(links.typeOnlyDeclaration.symbol); + return getSymbolFlags(resolved) & include ? links.typeOnlyDeclaration : void 0; + } + return void 0; + } + function getSymbolOfPartOfRightHandSideOfImportEquals(entityName, dontResolveAlias) { + if (entityName.kind === 80 /* Identifier */ && isRightSideOfQualifiedNameOrPropertyAccess(entityName)) { + entityName = entityName.parent; + } + if (entityName.kind === 80 /* Identifier */ || entityName.parent.kind === 167 /* QualifiedName */) { + return resolveEntityName( + entityName, + 1920 /* Namespace */, + /*ignoreErrors*/ + false, + dontResolveAlias + ); + } else { + Debug.assert(entityName.parent.kind === 272 /* ImportEqualsDeclaration */); + return resolveEntityName( + entityName, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, + /*ignoreErrors*/ + false, + dontResolveAlias + ); + } + } + function getFullyQualifiedName(symbol, containingLocation) { + return symbol.parent ? getFullyQualifiedName(symbol.parent, containingLocation) + "." + symbolToString(symbol) : symbolToString( + symbol, + containingLocation, + /*meaning*/ + void 0, + 32 /* DoNotIncludeSymbolChain */ | 4 /* AllowAnyNodeKind */ + ); + } + function getContainingQualifiedNameNode(node) { + while (isQualifiedName(node.parent)) { + node = node.parent; + } + return node; + } + function tryGetQualifiedNameAsValue(node) { + let left = getFirstIdentifier(node); + let symbol = resolveName( + left, + left, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (!symbol) { + return void 0; + } + while (isQualifiedName(left.parent)) { + const type = getTypeOfSymbol(symbol); + symbol = getPropertyOfType(type, left.parent.right.escapedText); + if (!symbol) { + return void 0; + } + left = left.parent; + } + return symbol; + } + function resolveEntityName(name, meaning, ignoreErrors, dontResolveAlias, location) { + if (nodeIsMissing(name)) { + return void 0; + } + const namespaceMeaning = 1920 /* Namespace */ | (isInJSFile(name) ? meaning & 111551 /* Value */ : 0); + let symbol; + if (name.kind === 80 /* Identifier */) { + const message = meaning === namespaceMeaning || nodeIsSynthesized(name) ? Diagnostics.Cannot_find_namespace_0 : getCannotFindNameDiagnosticForName(getFirstIdentifier(name)); + const symbolFromJSPrototype = isInJSFile(name) && !nodeIsSynthesized(name) ? resolveEntityNameFromAssignmentDeclaration(name, meaning) : void 0; + symbol = getMergedSymbol(resolveName( + location || name, + name, + meaning, + ignoreErrors || symbolFromJSPrototype ? void 0 : message, + /*isUse*/ + true, + /*excludeGlobals*/ + false + )); + if (!symbol) { + return getMergedSymbol(symbolFromJSPrototype); + } + } else if (name.kind === 167 /* QualifiedName */ || name.kind === 212 /* PropertyAccessExpression */) { + const left = name.kind === 167 /* QualifiedName */ ? name.left : name.expression; + const right = name.kind === 167 /* QualifiedName */ ? name.right : name.name; + let namespace = resolveEntityName( + left, + namespaceMeaning, + ignoreErrors, + /*dontResolveAlias*/ + false, + location + ); + if (!namespace || nodeIsMissing(right)) { + return void 0; + } else if (namespace === unknownSymbol) { + return namespace; + } + if (namespace.valueDeclaration && isInJSFile(namespace.valueDeclaration) && getEmitModuleResolutionKind(compilerOptions) !== 100 /* Bundler */ && isVariableDeclaration(namespace.valueDeclaration) && namespace.valueDeclaration.initializer && isCommonJsRequire(namespace.valueDeclaration.initializer)) { + const moduleName = namespace.valueDeclaration.initializer.arguments[0]; + const moduleSym = resolveExternalModuleName(moduleName, moduleName); + if (moduleSym) { + const resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym); + if (resolvedModuleSymbol) { + namespace = resolvedModuleSymbol; + } + } + } + symbol = getMergedSymbol(getSymbol2(getExportsOfSymbol(namespace), right.escapedText, meaning)); + if (!symbol && namespace.flags & 2097152 /* Alias */) { + symbol = getMergedSymbol(getSymbol2(getExportsOfSymbol(resolveAlias(namespace)), right.escapedText, meaning)); + } + if (!symbol) { + if (!ignoreErrors) { + const namespaceName = getFullyQualifiedName(namespace); + const declarationName = declarationNameToString(right); + const suggestionForNonexistentModule = getSuggestedSymbolForNonexistentModule(right, namespace); + if (suggestionForNonexistentModule) { + error2(right, Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2, namespaceName, declarationName, symbolToString(suggestionForNonexistentModule)); + return void 0; + } + const containingQualifiedName = isQualifiedName(name) && getContainingQualifiedNameNode(name); + const canSuggestTypeof = globalObjectType && meaning & 788968 /* Type */ && containingQualifiedName && !isTypeOfExpression(containingQualifiedName.parent) && tryGetQualifiedNameAsValue(containingQualifiedName); + if (canSuggestTypeof) { + error2( + containingQualifiedName, + Diagnostics._0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0, + entityNameToString(containingQualifiedName) + ); + return void 0; + } + if (meaning & 1920 /* Namespace */ && isQualifiedName(name.parent)) { + const exportedTypeSymbol = getMergedSymbol(getSymbol2(getExportsOfSymbol(namespace), right.escapedText, 788968 /* Type */)); + if (exportedTypeSymbol) { + error2( + name.parent.right, + Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1, + symbolToString(exportedTypeSymbol), + unescapeLeadingUnderscores(name.parent.right.escapedText) + ); + return void 0; + } + } + error2(right, Diagnostics.Namespace_0_has_no_exported_member_1, namespaceName, declarationName); + } + return void 0; + } + } else { + Debug.assertNever(name, "Unknown entity name kind."); + } + if (!nodeIsSynthesized(name) && isEntityName(name) && (symbol.flags & 2097152 /* Alias */ || name.parent.kind === 278 /* ExportAssignment */)) { + markSymbolOfAliasDeclarationIfTypeOnly( + getAliasDeclarationFromName(name), + symbol, + /*finalTarget*/ + void 0, + /*overwriteEmpty*/ + true + ); + } + return symbol.flags & meaning || dontResolveAlias ? symbol : resolveAlias(symbol); + } + function resolveEntityNameFromAssignmentDeclaration(name, meaning) { + if (isJSDocTypeReference(name.parent)) { + const secondaryLocation = getAssignmentDeclarationLocation(name.parent); + if (secondaryLocation) { + return resolveName( + secondaryLocation, + name, + meaning, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + } + } + } + function getAssignmentDeclarationLocation(node) { + const typeAlias = findAncestor(node, (node2) => !(isJSDocNode(node2) || node2.flags & 16777216 /* JSDoc */) ? "quit" : isJSDocTypeAlias(node2)); + if (typeAlias) { + return; + } + const host2 = getJSDocHost(node); + if (host2 && isExpressionStatement(host2) && isPrototypePropertyAssignment(host2.expression)) { + const symbol = getSymbolOfDeclaration(host2.expression.left); + if (symbol) { + return getDeclarationOfJSPrototypeContainer(symbol); + } + } + if (host2 && isFunctionExpression(host2) && isPrototypePropertyAssignment(host2.parent) && isExpressionStatement(host2.parent.parent)) { + const symbol = getSymbolOfDeclaration(host2.parent.left); + if (symbol) { + return getDeclarationOfJSPrototypeContainer(symbol); + } + } + if (host2 && (isObjectLiteralMethod(host2) || isPropertyAssignment(host2)) && isBinaryExpression(host2.parent.parent) && getAssignmentDeclarationKind(host2.parent.parent) === 6 /* Prototype */) { + const symbol = getSymbolOfDeclaration(host2.parent.parent.left); + if (symbol) { + return getDeclarationOfJSPrototypeContainer(symbol); + } + } + const sig = getEffectiveJSDocHost(node); + if (sig && isFunctionLike(sig)) { + const symbol = getSymbolOfDeclaration(sig); + return symbol && symbol.valueDeclaration; + } + } + function getDeclarationOfJSPrototypeContainer(symbol) { + const decl = symbol.parent.valueDeclaration; + if (!decl) { + return void 0; + } + const initializer = isAssignmentDeclaration(decl) ? getAssignedExpandoInitializer(decl) : hasOnlyExpressionInitializer(decl) ? getDeclaredExpandoInitializer(decl) : void 0; + return initializer || decl; + } + function getExpandoSymbol(symbol) { + const decl = symbol.valueDeclaration; + if (!decl || !isInJSFile(decl) || symbol.flags & 524288 /* TypeAlias */ || getExpandoInitializer( + decl, + /*isPrototypeAssignment*/ + false + )) { + return void 0; + } + const init = isVariableDeclaration(decl) ? getDeclaredExpandoInitializer(decl) : getAssignedExpandoInitializer(decl); + if (init) { + const initSymbol = getSymbolOfNode(init); + if (initSymbol) { + return mergeJSSymbols(initSymbol, symbol); + } + } + } + function resolveExternalModuleName(location, moduleReferenceExpression, ignoreErrors) { + const isClassic = getEmitModuleResolutionKind(compilerOptions) === 1 /* Classic */; + const errorMessage = isClassic ? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations; + return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? void 0 : errorMessage, ignoreErrors); + } + function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, ignoreErrors = false, isForAugmentation = false) { + return isStringLiteralLike(moduleReferenceExpression) ? resolveExternalModule(location, moduleReferenceExpression.text, moduleNotFoundError, !ignoreErrors ? moduleReferenceExpression : void 0, isForAugmentation) : void 0; + } + function resolveExternalModule(location, moduleReference, moduleNotFoundError, errorNode, isForAugmentation = false) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l; + if (errorNode && startsWith(moduleReference, "@types/")) { + const diag2 = Diagnostics.Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1; + const withoutAtTypePrefix = removePrefix(moduleReference, "@types/"); + error2(errorNode, diag2, withoutAtTypePrefix, moduleReference); + } + const ambientModule = tryFindAmbientModule( + moduleReference, + /*withAugmentations*/ + true + ); + if (ambientModule) { + return ambientModule; + } + const currentSourceFile = getSourceFileOfNode(location); + const contextSpecifier = isStringLiteralLike(location) ? location : ((_a = isModuleDeclaration(location) ? location : location.parent && isModuleDeclaration(location.parent) && location.parent.name === location ? location.parent : void 0) == null ? void 0 : _a.name) || ((_b = isLiteralImportTypeNode(location) ? location : void 0) == null ? void 0 : _b.argument.literal) || (isVariableDeclaration(location) && location.initializer && isRequireCall( + location.initializer, + /*requireStringLiteralLikeArgument*/ + true + ) ? location.initializer.arguments[0] : void 0) || ((_c = findAncestor(location, isImportCall)) == null ? void 0 : _c.arguments[0]) || ((_d = findAncestor(location, or(isImportDeclaration, isJSDocImportTag, isExportDeclaration))) == null ? void 0 : _d.moduleSpecifier) || ((_e = findAncestor(location, isExternalModuleImportEqualsDeclaration)) == null ? void 0 : _e.moduleReference.expression); + const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : host.getDefaultResolutionModeForFile(currentSourceFile); + const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions); + const resolvedModule = (_f = host.getResolvedModule(currentSourceFile, moduleReference, mode)) == null ? void 0 : _f.resolvedModule; + const resolutionDiagnostic = errorNode && resolvedModule && getResolutionDiagnostic(compilerOptions, resolvedModule, currentSourceFile); + const sourceFile = resolvedModule && (!resolutionDiagnostic || resolutionDiagnostic === Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set) && host.getSourceFile(resolvedModule.resolvedFileName); + if (sourceFile) { + if (resolutionDiagnostic) { + error2(errorNode, resolutionDiagnostic, moduleReference, resolvedModule.resolvedFileName); + } + if (resolvedModule.resolvedUsingTsExtension && isDeclarationFileName(moduleReference)) { + const importOrExport = ((_g = findAncestor(location, isImportDeclaration)) == null ? void 0 : _g.importClause) || findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration)); + if (errorNode && importOrExport && !importOrExport.isTypeOnly || findAncestor(location, isImportCall)) { + error2( + errorNode, + Diagnostics.A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_file_0_instead, + getSuggestedImportSource(Debug.checkDefined(tryExtractTSExtension(moduleReference))) + ); + } + } else if (resolvedModule.resolvedUsingTsExtension && !shouldAllowImportingTsExtension(compilerOptions, currentSourceFile.fileName)) { + const importOrExport = ((_h = findAncestor(location, isImportDeclaration)) == null ? void 0 : _h.importClause) || findAncestor(location, or(isImportEqualsDeclaration, isExportDeclaration)); + if (errorNode && !((importOrExport == null ? void 0 : importOrExport.isTypeOnly) || findAncestor(location, isImportTypeNode))) { + const tsExtension = Debug.checkDefined(tryExtractTSExtension(moduleReference)); + error2(errorNode, Diagnostics.An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled, tsExtension); + } + } else if (compilerOptions.rewriteRelativeImportExtensions && !(location.flags & 33554432 /* Ambient */) && !isDeclarationFileName(moduleReference) && !isLiteralImportTypeNode(location) && !isPartOfTypeOnlyImportOrExportDeclaration(location)) { + const shouldRewrite = shouldRewriteModuleSpecifier(moduleReference, compilerOptions); + if (!resolvedModule.resolvedUsingTsExtension && shouldRewrite) { + error2( + errorNode, + Diagnostics.This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolves_to_0, + getRelativePathFromFile(getNormalizedAbsolutePath(currentSourceFile.fileName, host.getCurrentDirectory()), resolvedModule.resolvedFileName, hostGetCanonicalFileName(host)) + ); + } else if (resolvedModule.resolvedUsingTsExtension && !shouldRewrite && sourceFileMayBeEmitted(sourceFile, host)) { + error2( + errorNode, + Diagnostics.This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_during_emit_because_it_is_not_a_relative_path, + getAnyExtensionFromPath(moduleReference) + ); + } else if (resolvedModule.resolvedUsingTsExtension && shouldRewrite) { + const redirect = (_i = host.getRedirectFromSourceFile(sourceFile.path)) == null ? void 0 : _i.resolvedRef; + if (redirect) { + const ignoreCase = !host.useCaseSensitiveFileNames(); + const ownRootDir = host.getCommonSourceDirectory(); + const otherRootDir = getCommonSourceDirectoryOfConfig(redirect.commandLine, ignoreCase); + const rootDirPath = getRelativePathFromDirectory(ownRootDir, otherRootDir, ignoreCase); + const outDirPath = getRelativePathFromDirectory(compilerOptions.outDir || ownRootDir, redirect.commandLine.options.outDir || otherRootDir, ignoreCase); + if (rootDirPath !== outDirPath) { + error2( + errorNode, + Diagnostics.This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_between_the_projects_output_files_is_not_the_same_as_the_relative_path_between_its_input_files + ); + } + } + } + } + if (sourceFile.symbol) { + if (errorNode && resolvedModule.isExternalLibraryImport && !resolutionExtensionIsTSOrJson(resolvedModule.extension)) { + errorOnImplicitAnyModule( + /*isError*/ + false, + errorNode, + currentSourceFile, + mode, + resolvedModule, + moduleReference + ); + } + if (errorNode && (moduleKind === 100 /* Node16 */ || moduleKind === 101 /* Node18 */)) { + const isSyncImport = currentSourceFile.impliedNodeFormat === 1 /* CommonJS */ && !findAncestor(location, isImportCall) || !!findAncestor(location, isImportEqualsDeclaration); + const overrideHost = findAncestor(location, (l) => isImportTypeNode(l) || isExportDeclaration(l) || isImportDeclaration(l) || isJSDocImportTag(l)); + if (isSyncImport && sourceFile.impliedNodeFormat === 99 /* ESNext */ && !hasResolutionModeOverride(overrideHost)) { + if (findAncestor(location, isImportEqualsDeclaration)) { + error2(errorNode, Diagnostics.Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_cannot_be_imported_with_require_Use_an_ECMAScript_import_instead, moduleReference); + } else { + let diagnosticDetails; + const ext = tryGetExtensionFromPath2(currentSourceFile.fileName); + if (ext === ".ts" /* Ts */ || ext === ".js" /* Js */ || ext === ".tsx" /* Tsx */ || ext === ".jsx" /* Jsx */) { + diagnosticDetails = createModeMismatchDetails(currentSourceFile); + } + const message = (overrideHost == null ? void 0 : overrideHost.kind) === 273 /* ImportDeclaration */ && ((_j = overrideHost.importClause) == null ? void 0 : _j.isTypeOnly) ? Diagnostics.Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute : (overrideHost == null ? void 0 : overrideHost.kind) === 206 /* ImportType */ ? Diagnostics.Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute : Diagnostics.The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_referenced_file_is_an_ECMAScript_module_and_cannot_be_imported_with_require_Consider_writing_a_dynamic_import_0_call_instead; + diagnostics.add(createDiagnosticForNodeFromMessageChain( + getSourceFileOfNode(errorNode), + errorNode, + chainDiagnosticMessages(diagnosticDetails, message, moduleReference) + )); + } + } + } + return getMergedSymbol(sourceFile.symbol); + } + if (errorNode && moduleNotFoundError && !isSideEffectImport(errorNode)) { + error2(errorNode, Diagnostics.File_0_is_not_a_module, sourceFile.fileName); + } + return void 0; + } + if (patternAmbientModules) { + const pattern = findBestPatternMatch(patternAmbientModules, (_) => _.pattern, moduleReference); + if (pattern) { + const augmentation = patternAmbientModuleAugmentations && patternAmbientModuleAugmentations.get(moduleReference); + if (augmentation) { + return getMergedSymbol(augmentation); + } + return getMergedSymbol(pattern.symbol); + } + } + if (!errorNode) { + return void 0; + } + if (resolvedModule && !resolutionExtensionIsTSOrJson(resolvedModule.extension) && resolutionDiagnostic === void 0 || resolutionDiagnostic === Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type) { + if (isForAugmentation) { + const diag2 = Diagnostics.Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augmented; + error2(errorNode, diag2, moduleReference, resolvedModule.resolvedFileName); + } else { + errorOnImplicitAnyModule( + /*isError*/ + noImplicitAny && !!moduleNotFoundError, + errorNode, + currentSourceFile, + mode, + resolvedModule, + moduleReference + ); + } + return void 0; + } + if (moduleNotFoundError) { + if (resolvedModule) { + const redirect = host.getRedirectFromSourceFile(resolvedModule.resolvedFileName); + if (redirect == null ? void 0 : redirect.outputDts) { + error2(errorNode, Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, redirect.outputDts, resolvedModule.resolvedFileName); + return void 0; + } + } + if (resolutionDiagnostic) { + error2(errorNode, resolutionDiagnostic, moduleReference, resolvedModule.resolvedFileName); + } else { + const isExtensionlessRelativePathImport = pathIsRelative(moduleReference) && !hasExtension(moduleReference); + const resolutionIsNode16OrNext = moduleResolutionKind === 3 /* Node16 */ || moduleResolutionKind === 99 /* NodeNext */; + if (!getResolveJsonModule(compilerOptions) && fileExtensionIs(moduleReference, ".json" /* Json */) && moduleResolutionKind !== 1 /* Classic */ && hasJsonModuleEmitEnabled(compilerOptions)) { + error2(errorNode, Diagnostics.Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension, moduleReference); + } else if (mode === 99 /* ESNext */ && resolutionIsNode16OrNext && isExtensionlessRelativePathImport) { + const absoluteRef = getNormalizedAbsolutePath(moduleReference, getDirectoryPath(currentSourceFile.path)); + const suggestedExt = (_k = suggestedExtensions.find(([actualExt, _importExt]) => host.fileExists(absoluteRef + actualExt))) == null ? void 0 : _k[1]; + if (suggestedExt) { + error2(errorNode, Diagnostics.Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0, moduleReference + suggestedExt); + } else { + error2(errorNode, Diagnostics.Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path); + } + } else { + if ((_l = host.getResolvedModule(currentSourceFile, moduleReference, mode)) == null ? void 0 : _l.alternateResult) { + const errorInfo = createModuleNotFoundChain(currentSourceFile, host, moduleReference, mode, moduleReference); + errorOrSuggestion( + /*isError*/ + true, + errorNode, + chainDiagnosticMessages(errorInfo, moduleNotFoundError, moduleReference) + ); + } else { + error2(errorNode, moduleNotFoundError, moduleReference); + } + } + } + } + return void 0; + function getSuggestedImportSource(tsExtension) { + const importSourceWithoutExtension = removeExtension(moduleReference, tsExtension); + if (emitModuleKindIsNonNodeESM(moduleKind) || mode === 99 /* ESNext */) { + const preferTs = isDeclarationFileName(moduleReference) && shouldAllowImportingTsExtension(compilerOptions); + const ext = tsExtension === ".mts" /* Mts */ || tsExtension === ".d.mts" /* Dmts */ ? preferTs ? ".mts" : ".mjs" : tsExtension === ".cts" /* Cts */ || tsExtension === ".d.mts" /* Dmts */ ? preferTs ? ".cts" : ".cjs" : preferTs ? ".ts" : ".js"; + return importSourceWithoutExtension + ext; + } + return importSourceWithoutExtension; + } + } + function errorOnImplicitAnyModule(isError, errorNode, sourceFile, mode, { packageId, resolvedFileName }, moduleReference) { + if (isSideEffectImport(errorNode)) { + return; + } + let errorInfo; + if (!isExternalModuleNameRelative(moduleReference) && packageId) { + errorInfo = createModuleNotFoundChain(sourceFile, host, moduleReference, mode, packageId.name); + } + errorOrSuggestion( + isError, + errorNode, + chainDiagnosticMessages( + errorInfo, + Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type, + moduleReference, + resolvedFileName + ) + ); + } + function resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias) { + if (moduleSymbol == null ? void 0 : moduleSymbol.exports) { + const exportEquals = resolveSymbol(moduleSymbol.exports.get("export=" /* ExportEquals */), dontResolveAlias); + const exported = getCommonJsExportEquals(getMergedSymbol(exportEquals), getMergedSymbol(moduleSymbol)); + return getMergedSymbol(exported) || moduleSymbol; + } + return void 0; + } + function getCommonJsExportEquals(exported, moduleSymbol) { + if (!exported || exported === unknownSymbol || exported === moduleSymbol || moduleSymbol.exports.size === 1 || exported.flags & 2097152 /* Alias */) { + return exported; + } + const links = getSymbolLinks(exported); + if (links.cjsExportMerged) { + return links.cjsExportMerged; + } + const merged = exported.flags & 33554432 /* Transient */ ? exported : cloneSymbol(exported); + merged.flags = merged.flags | 512 /* ValueModule */; + if (merged.exports === void 0) { + merged.exports = createSymbolTable(); + } + moduleSymbol.exports.forEach((s, name) => { + if (name === "export=" /* ExportEquals */) return; + merged.exports.set(name, merged.exports.has(name) ? mergeSymbol(merged.exports.get(name), s) : s); + }); + if (merged === exported) { + getSymbolLinks(merged).resolvedExports = void 0; + getSymbolLinks(merged).resolvedMembers = void 0; + } + getSymbolLinks(merged).cjsExportMerged = merged; + return links.cjsExportMerged = merged; + } + function resolveESModuleSymbol(moduleSymbol, referencingLocation, dontResolveAlias, suppressInteropError) { + var _a; + const symbol = resolveExternalModuleSymbol(moduleSymbol, dontResolveAlias); + if (!dontResolveAlias && symbol) { + if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */)) && !getDeclarationOfKind(symbol, 308 /* SourceFile */)) { + const compilerOptionName = moduleKind >= 5 /* ES2015 */ ? "allowSyntheticDefaultImports" : "esModuleInterop"; + error2(referencingLocation, Diagnostics.This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export, compilerOptionName); + return symbol; + } + const referenceParent = referencingLocation.parent; + const namespaceImport = isImportDeclaration(referenceParent) && getNamespaceDeclarationNode(referenceParent); + if (namespaceImport || isImportCall(referenceParent)) { + const reference = isImportCall(referenceParent) ? referenceParent.arguments[0] : referenceParent.moduleSpecifier; + const type = getTypeOfSymbol(symbol); + const defaultOnlyType = getTypeWithSyntheticDefaultOnly(type, symbol, moduleSymbol, reference); + if (defaultOnlyType) { + return cloneTypeAsModuleType(symbol, defaultOnlyType, referenceParent); + } + const targetFile = (_a = moduleSymbol == null ? void 0 : moduleSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); + const usageMode = getEmitSyntaxForModuleSpecifierExpression(reference); + let exportModuleDotExportsSymbol; + if (namespaceImport && targetFile && 102 /* Node20 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ && usageMode === 1 /* CommonJS */ && host.getImpliedNodeFormatForEmit(targetFile) === 99 /* ESNext */ && (exportModuleDotExportsSymbol = resolveExportByName(symbol, "module.exports", namespaceImport, dontResolveAlias))) { + if (!suppressInteropError && !(symbol.flags & (1536 /* Module */ | 3 /* Variable */))) { + error2(referencingLocation, Diagnostics.This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_referencing_its_default_export, "esModuleInterop"); + } + if (getESModuleInterop(compilerOptions) && hasSignatures(type)) { + return cloneTypeAsModuleType(exportModuleDotExportsSymbol, type, referenceParent); + } + return exportModuleDotExportsSymbol; + } + const isEsmCjsRef = targetFile && isESMFormatImportImportingCommonjsFormatFile(usageMode, host.getImpliedNodeFormatForEmit(targetFile)); + if (getESModuleInterop(compilerOptions) || isEsmCjsRef) { + if (hasSignatures(type) || getPropertyOfType( + type, + "default" /* Default */, + /*skipObjectFunctionPropertyAugment*/ + true + ) || isEsmCjsRef) { + const moduleType = type.flags & 3670016 /* StructuredType */ ? getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol, reference) : createDefaultPropertyWrapperForModule(symbol, symbol.parent); + return cloneTypeAsModuleType(symbol, moduleType, referenceParent); + } + } + } + } + return symbol; + } + function hasSignatures(type) { + return some(getSignaturesOfStructuredType(type, 0 /* Call */)) || some(getSignaturesOfStructuredType(type, 1 /* Construct */)); + } + function cloneTypeAsModuleType(symbol, moduleType, referenceParent) { + const result = createSymbol(symbol.flags, symbol.escapedName); + result.declarations = symbol.declarations ? symbol.declarations.slice() : []; + result.parent = symbol.parent; + result.links.target = symbol; + result.links.originatingImport = referenceParent; + if (symbol.valueDeclaration) result.valueDeclaration = symbol.valueDeclaration; + if (symbol.constEnumOnlyModule) result.constEnumOnlyModule = true; + if (symbol.members) result.members = new Map(symbol.members); + if (symbol.exports) result.exports = new Map(symbol.exports); + const resolvedModuleType = resolveStructuredTypeMembers(moduleType); + result.links.type = createAnonymousType(result, resolvedModuleType.members, emptyArray, emptyArray, resolvedModuleType.indexInfos); + return result; + } + function hasExportAssignmentSymbol(moduleSymbol) { + return moduleSymbol.exports.get("export=" /* ExportEquals */) !== void 0; + } + function getExportsOfModuleAsArray(moduleSymbol) { + return symbolsToArray(getExportsOfModule(moduleSymbol)); + } + function getExportsAndPropertiesOfModule(moduleSymbol) { + const exports2 = getExportsOfModuleAsArray(moduleSymbol); + const exportEquals = resolveExternalModuleSymbol(moduleSymbol); + if (exportEquals !== moduleSymbol) { + const type = getTypeOfSymbol(exportEquals); + if (shouldTreatPropertiesOfExternalModuleAsExports(type)) { + addRange(exports2, getPropertiesOfType(type)); + } + } + return exports2; + } + function forEachExportAndPropertyOfModule(moduleSymbol, cb) { + const exports2 = getExportsOfModule(moduleSymbol); + exports2.forEach((symbol, key) => { + if (!isReservedMemberName(key)) { + cb(symbol, key); + } + }); + const exportEquals = resolveExternalModuleSymbol(moduleSymbol); + if (exportEquals !== moduleSymbol) { + const type = getTypeOfSymbol(exportEquals); + if (shouldTreatPropertiesOfExternalModuleAsExports(type)) { + forEachPropertyOfType(type, (symbol, escapedName) => { + cb(symbol, escapedName); + }); + } + } + } + function tryGetMemberInModuleExports(memberName, moduleSymbol) { + const symbolTable = getExportsOfModule(moduleSymbol); + if (symbolTable) { + return symbolTable.get(memberName); + } + } + function tryGetMemberInModuleExportsAndProperties(memberName, moduleSymbol) { + const symbol = tryGetMemberInModuleExports(memberName, moduleSymbol); + if (symbol) { + return symbol; + } + const exportEquals = resolveExternalModuleSymbol(moduleSymbol); + if (exportEquals === moduleSymbol) { + return void 0; + } + const type = getTypeOfSymbol(exportEquals); + return shouldTreatPropertiesOfExternalModuleAsExports(type) ? getPropertyOfType(type, memberName) : void 0; + } + function shouldTreatPropertiesOfExternalModuleAsExports(resolvedExternalModuleType) { + return !(resolvedExternalModuleType.flags & 402784252 /* Primitive */ || getObjectFlags(resolvedExternalModuleType) & 1 /* Class */ || // `isArrayOrTupleLikeType` is too expensive to use in this auto-imports hot path + isArrayType(resolvedExternalModuleType) || isTupleType(resolvedExternalModuleType)); + } + function getExportsOfSymbol(symbol) { + return symbol.flags & 6256 /* LateBindingContainer */ ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedExports" /* resolvedExports */) : symbol.flags & 1536 /* Module */ ? getExportsOfModule(symbol) : symbol.exports || emptySymbols; + } + function getExportsOfModule(moduleSymbol) { + const links = getSymbolLinks(moduleSymbol); + if (!links.resolvedExports) { + const { exports: exports2, typeOnlyExportStarMap } = getExportsOfModuleWorker(moduleSymbol); + links.resolvedExports = exports2; + links.typeOnlyExportStarMap = typeOnlyExportStarMap; + } + return links.resolvedExports; + } + function extendExportSymbols(target, source, lookupTable, exportNode) { + if (!source) return; + source.forEach((sourceSymbol, id) => { + if (id === "default" /* Default */) return; + const targetSymbol = target.get(id); + if (!targetSymbol) { + target.set(id, sourceSymbol); + if (lookupTable && exportNode) { + lookupTable.set(id, { + specifierText: getTextOfNode(exportNode.moduleSpecifier) + }); + } + } else if (lookupTable && exportNode && targetSymbol && resolveSymbol(targetSymbol) !== resolveSymbol(sourceSymbol)) { + const collisionTracker = lookupTable.get(id); + if (!collisionTracker.exportsWithDuplicate) { + collisionTracker.exportsWithDuplicate = [exportNode]; + } else { + collisionTracker.exportsWithDuplicate.push(exportNode); + } + } + }); + } + function getExportsOfModuleWorker(moduleSymbol) { + const visitedSymbols = []; + let typeOnlyExportStarMap; + const nonTypeOnlyNames = /* @__PURE__ */ new Set(); + moduleSymbol = resolveExternalModuleSymbol(moduleSymbol); + const exports2 = visit(moduleSymbol) || emptySymbols; + if (typeOnlyExportStarMap) { + nonTypeOnlyNames.forEach((name) => typeOnlyExportStarMap.delete(name)); + } + return { + exports: exports2, + typeOnlyExportStarMap + }; + function visit(symbol, exportStar, isTypeOnly) { + if (!isTypeOnly && (symbol == null ? void 0 : symbol.exports)) { + symbol.exports.forEach((_, name) => nonTypeOnlyNames.add(name)); + } + if (!(symbol && symbol.exports && pushIfUnique(visitedSymbols, symbol))) { + return; + } + const symbols = new Map(symbol.exports); + const exportStars = symbol.exports.get("__export" /* ExportStar */); + if (exportStars) { + const nestedSymbols = createSymbolTable(); + const lookupTable = /* @__PURE__ */ new Map(); + if (exportStars.declarations) { + for (const node of exportStars.declarations) { + const resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier); + const exportedSymbols = visit(resolvedModule, node, isTypeOnly || node.isTypeOnly); + extendExportSymbols( + nestedSymbols, + exportedSymbols, + lookupTable, + node + ); + } + } + lookupTable.forEach(({ exportsWithDuplicate }, id) => { + if (id === "export=" || !(exportsWithDuplicate && exportsWithDuplicate.length) || symbols.has(id)) { + return; + } + for (const node of exportsWithDuplicate) { + diagnostics.add(createDiagnosticForNode( + node, + Diagnostics.Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambiguity, + lookupTable.get(id).specifierText, + unescapeLeadingUnderscores(id) + )); + } + }); + extendExportSymbols(symbols, nestedSymbols); + } + if (exportStar == null ? void 0 : exportStar.isTypeOnly) { + typeOnlyExportStarMap ?? (typeOnlyExportStarMap = /* @__PURE__ */ new Map()); + symbols.forEach( + (_, escapedName) => typeOnlyExportStarMap.set( + escapedName, + exportStar + ) + ); + } + return symbols; + } + } + function getMergedSymbol(symbol) { + let merged; + return symbol && symbol.mergeId && (merged = mergedSymbols[symbol.mergeId]) ? merged : symbol; + } + function getSymbolOfDeclaration(node) { + return getMergedSymbol(node.symbol && getLateBoundSymbol(node.symbol)); + } + function getSymbolOfNode(node) { + return canHaveSymbol(node) ? getSymbolOfDeclaration(node) : void 0; + } + function getParentOfSymbol(symbol) { + return getMergedSymbol(symbol.parent && getLateBoundSymbol(symbol.parent)); + } + function getFunctionExpressionParentSymbolOrSymbol(symbol) { + var _a, _b; + return ((_a = symbol.valueDeclaration) == null ? void 0 : _a.kind) === 220 /* ArrowFunction */ || ((_b = symbol.valueDeclaration) == null ? void 0 : _b.kind) === 219 /* FunctionExpression */ ? getSymbolOfNode(symbol.valueDeclaration.parent) || symbol : symbol; + } + function getAlternativeContainingModules(symbol, enclosingDeclaration) { + const containingFile = getSourceFileOfNode(enclosingDeclaration); + const id = getNodeId(containingFile); + const links = getSymbolLinks(symbol); + let results; + if (links.extendedContainersByFile && (results = links.extendedContainersByFile.get(id))) { + return results; + } + if (containingFile && containingFile.imports) { + for (const importRef of containingFile.imports) { + if (nodeIsSynthesized(importRef)) continue; + const resolvedModule = resolveExternalModuleName( + enclosingDeclaration, + importRef, + /*ignoreErrors*/ + true + ); + if (!resolvedModule) continue; + const ref = getAliasForSymbolInContainer(resolvedModule, symbol); + if (!ref) continue; + results = append(results, resolvedModule); + } + if (length(results)) { + (links.extendedContainersByFile || (links.extendedContainersByFile = /* @__PURE__ */ new Map())).set(id, results); + return results; + } + } + if (links.extendedContainers) { + return links.extendedContainers; + } + const otherFiles = host.getSourceFiles(); + for (const file of otherFiles) { + if (!isExternalModule(file)) continue; + const sym = getSymbolOfDeclaration(file); + const ref = getAliasForSymbolInContainer(sym, symbol); + if (!ref) continue; + results = append(results, sym); + } + return links.extendedContainers = results || emptyArray; + } + function getContainersOfSymbol(symbol, enclosingDeclaration, meaning) { + const container = getParentOfSymbol(symbol); + if (container && !(symbol.flags & 262144 /* TypeParameter */)) { + return getWithAlternativeContainers(container); + } + const candidates = mapDefined(symbol.declarations, (d) => { + if (!isAmbientModule(d) && d.parent) { + if (hasNonGlobalAugmentationExternalModuleSymbol(d.parent)) { + return getSymbolOfDeclaration(d.parent); + } + if (isModuleBlock(d.parent) && d.parent.parent && resolveExternalModuleSymbol(getSymbolOfDeclaration(d.parent.parent)) === symbol) { + return getSymbolOfDeclaration(d.parent.parent); + } + } + if (isClassExpression(d) && isBinaryExpression(d.parent) && d.parent.operatorToken.kind === 64 /* EqualsToken */ && isAccessExpression(d.parent.left) && isEntityNameExpression(d.parent.left.expression)) { + if (isModuleExportsAccessExpression(d.parent.left) || isExportsIdentifier(d.parent.left.expression)) { + return getSymbolOfDeclaration(getSourceFileOfNode(d)); + } + checkExpressionCached(d.parent.left.expression); + return getNodeLinks(d.parent.left.expression).resolvedSymbol; + } + }); + if (!length(candidates)) { + return void 0; + } + const containers = mapDefined(candidates, (candidate) => getAliasForSymbolInContainer(candidate, symbol) ? candidate : void 0); + let bestContainers = []; + let alternativeContainers = []; + for (const container2 of containers) { + const [bestMatch, ...rest] = getWithAlternativeContainers(container2); + bestContainers = append(bestContainers, bestMatch); + alternativeContainers = addRange(alternativeContainers, rest); + } + return concatenate(bestContainers, alternativeContainers); + function getWithAlternativeContainers(container2) { + const additionalContainers = mapDefined(container2.declarations, fileSymbolIfFileSymbolExportEqualsContainer); + const reexportContainers = enclosingDeclaration && getAlternativeContainingModules(symbol, enclosingDeclaration); + const objectLiteralContainer = getVariableDeclarationOfObjectLiteral(container2, meaning); + if (enclosingDeclaration && container2.flags & getQualifiedLeftMeaning(meaning) && getAccessibleSymbolChain( + container2, + enclosingDeclaration, + 1920 /* Namespace */, + /*useOnlyExternalAliasing*/ + false + )) { + return append(concatenate(concatenate([container2], additionalContainers), reexportContainers), objectLiteralContainer); + } + const firstVariableMatch = !(container2.flags & getQualifiedLeftMeaning(meaning)) && container2.flags & 788968 /* Type */ && getDeclaredTypeOfSymbol(container2).flags & 524288 /* Object */ && meaning === 111551 /* Value */ ? forEachSymbolTableInScope(enclosingDeclaration, (t) => { + return forEachEntry(t, (s) => { + if (s.flags & getQualifiedLeftMeaning(meaning) && getTypeOfSymbol(s) === getDeclaredTypeOfSymbol(container2)) { + return s; + } + }); + }) : void 0; + let res = firstVariableMatch ? [firstVariableMatch, ...additionalContainers, container2] : [...additionalContainers, container2]; + res = append(res, objectLiteralContainer); + res = addRange(res, reexportContainers); + return res; + } + function fileSymbolIfFileSymbolExportEqualsContainer(d) { + return container && getFileSymbolIfFileSymbolExportEqualsContainer(d, container); + } + } + function getVariableDeclarationOfObjectLiteral(symbol, meaning) { + const firstDecl = !!length(symbol.declarations) && first(symbol.declarations); + if (meaning & 111551 /* Value */ && firstDecl && firstDecl.parent && isVariableDeclaration(firstDecl.parent)) { + if (isObjectLiteralExpression(firstDecl) && firstDecl === firstDecl.parent.initializer || isTypeLiteralNode(firstDecl) && firstDecl === firstDecl.parent.type) { + return getSymbolOfDeclaration(firstDecl.parent); + } + } + } + function getFileSymbolIfFileSymbolExportEqualsContainer(d, container) { + const fileSymbol = getExternalModuleContainer(d); + const exported = fileSymbol && fileSymbol.exports && fileSymbol.exports.get("export=" /* ExportEquals */); + return exported && getSymbolIfSameReference(exported, container) ? fileSymbol : void 0; + } + function getAliasForSymbolInContainer(container, symbol) { + if (container === getParentOfSymbol(symbol)) { + return symbol; + } + const exportEquals = container.exports && container.exports.get("export=" /* ExportEquals */); + if (exportEquals && getSymbolIfSameReference(exportEquals, symbol)) { + return container; + } + const exports2 = getExportsOfSymbol(container); + const quick = exports2.get(symbol.escapedName); + if (quick && getSymbolIfSameReference(quick, symbol)) { + return quick; + } + return forEachEntry(exports2, (exported) => { + if (getSymbolIfSameReference(exported, symbol)) { + return exported; + } + }); + } + function getSymbolIfSameReference(s1, s2) { + if (getMergedSymbol(resolveSymbol(getMergedSymbol(s1))) === getMergedSymbol(resolveSymbol(getMergedSymbol(s2)))) { + return s1; + } + } + function getExportSymbolOfValueSymbolIfExported(symbol) { + return getMergedSymbol(symbol && (symbol.flags & 1048576 /* ExportValue */) !== 0 && symbol.exportSymbol || symbol); + } + function symbolIsValue(symbol, includeTypeOnlyMembers) { + return !!(symbol.flags & 111551 /* Value */ || symbol.flags & 2097152 /* Alias */ && getSymbolFlags(symbol, !includeTypeOnlyMembers) & 111551 /* Value */); + } + function createType(flags) { + var _a; + const result = new Type29(checker, flags); + typeCount++; + result.id = typeCount; + (_a = tracing) == null ? void 0 : _a.recordType(result); + return result; + } + function createTypeWithSymbol(flags, symbol) { + const result = createType(flags); + result.symbol = symbol; + return result; + } + function createOriginType(flags) { + return new Type29(checker, flags); + } + function createIntrinsicType(kind, intrinsicName, objectFlags = 0 /* None */, debugIntrinsicName) { + checkIntrinsicName(intrinsicName, debugIntrinsicName); + const type = createType(kind); + type.intrinsicName = intrinsicName; + type.debugIntrinsicName = debugIntrinsicName; + type.objectFlags = objectFlags | 524288 /* CouldContainTypeVariablesComputed */ | 2097152 /* IsGenericTypeComputed */ | 33554432 /* IsUnknownLikeUnionComputed */ | 16777216 /* IsNeverIntersectionComputed */; + return type; + } + function checkIntrinsicName(name, debug) { + const key = `${name},${debug ?? ""}`; + if (seenIntrinsicNames.has(key)) { + Debug.fail(`Duplicate intrinsic type name ${name}${debug ? ` (${debug})` : ""}; you may need to pass a name to createIntrinsicType.`); + } + seenIntrinsicNames.add(key); + } + function createObjectType(objectFlags, symbol) { + const type = createTypeWithSymbol(524288 /* Object */, symbol); + type.objectFlags = objectFlags; + type.members = void 0; + type.properties = void 0; + type.callSignatures = void 0; + type.constructSignatures = void 0; + type.indexInfos = void 0; + return type; + } + function createTypeofType() { + return getUnionType(arrayFrom(typeofNEFacts.keys(), getStringLiteralType)); + } + function createTypeParameter(symbol) { + return createTypeWithSymbol(262144 /* TypeParameter */, symbol); + } + function isReservedMemberName(name) { + return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */ && name.charCodeAt(2) !== 64 /* at */ && name.charCodeAt(2) !== 35 /* hash */; + } + function getNamedMembers(members) { + let result; + members.forEach((symbol, id) => { + if (isNamedMember(symbol, id)) { + (result || (result = [])).push(symbol); + } + }); + return result || emptyArray; + } + function isNamedMember(member, escapedName) { + return !isReservedMemberName(escapedName) && symbolIsValue(member); + } + function getNamedOrIndexSignatureMembers(members) { + const result = getNamedMembers(members); + const index = getIndexSymbolFromSymbolTable(members); + return index ? concatenate(result, [index]) : result; + } + function setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos) { + const resolved = type; + resolved.members = members; + resolved.properties = emptyArray; + resolved.callSignatures = callSignatures; + resolved.constructSignatures = constructSignatures; + resolved.indexInfos = indexInfos; + if (members !== emptySymbols) resolved.properties = getNamedMembers(members); + return resolved; + } + function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) { + return setStructuredTypeMembers(createObjectType(16 /* Anonymous */, symbol), members, callSignatures, constructSignatures, indexInfos); + } + function getResolvedTypeWithoutAbstractConstructSignatures(type) { + if (type.constructSignatures.length === 0) return type; + if (type.objectTypeWithoutAbstractConstructSignatures) return type.objectTypeWithoutAbstractConstructSignatures; + const constructSignatures = filter(type.constructSignatures, (signature) => !(signature.flags & 4 /* Abstract */)); + if (type.constructSignatures === constructSignatures) return type; + const typeCopy = createAnonymousType( + type.symbol, + type.members, + type.callSignatures, + some(constructSignatures) ? constructSignatures : emptyArray, + type.indexInfos + ); + type.objectTypeWithoutAbstractConstructSignatures = typeCopy; + typeCopy.objectTypeWithoutAbstractConstructSignatures = typeCopy; + return typeCopy; + } + function forEachSymbolTableInScope(enclosingDeclaration, callback) { + let result; + for (let location = enclosingDeclaration; location; location = location.parent) { + if (canHaveLocals(location) && location.locals && !isGlobalSourceFile(location)) { + if (result = callback( + location.locals, + /*ignoreQualification*/ + void 0, + /*isLocalNameLookup*/ + true, + location + )) { + return result; + } + } + switch (location.kind) { + case 308 /* SourceFile */: + if (!isExternalOrCommonJsModule(location)) { + break; + } + // falls through + case 268 /* ModuleDeclaration */: + const sym = getSymbolOfDeclaration(location); + if (result = callback( + (sym == null ? void 0 : sym.exports) || emptySymbols, + /*ignoreQualification*/ + void 0, + /*isLocalNameLookup*/ + true, + location + )) { + return result; + } + break; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + let table; + (getSymbolOfDeclaration(location).members || emptySymbols).forEach((memberSymbol, key) => { + if (memberSymbol.flags & (788968 /* Type */ & ~67108864 /* Assignment */)) { + (table || (table = createSymbolTable())).set(key, memberSymbol); + } + }); + if (table && (result = callback( + table, + /*ignoreQualification*/ + void 0, + /*isLocalNameLookup*/ + false, + location + ))) { + return result; + } + break; + } + } + return callback( + globals, + /*ignoreQualification*/ + void 0, + /*isLocalNameLookup*/ + true + ); + } + function getQualifiedLeftMeaning(rightMeaning) { + return rightMeaning === 111551 /* Value */ ? 111551 /* Value */ : 1920 /* Namespace */; + } + function getAccessibleSymbolChain(symbol, enclosingDeclaration, meaning, useOnlyExternalAliasing, visitedSymbolTablesMap = /* @__PURE__ */ new Map()) { + if (!(symbol && !isPropertyOrMethodDeclarationSymbol(symbol))) { + return void 0; + } + const links = getSymbolLinks(symbol); + const cache = links.accessibleChainCache || (links.accessibleChainCache = /* @__PURE__ */ new Map()); + const firstRelevantLocation = forEachSymbolTableInScope(enclosingDeclaration, (_, __, ___, node) => node); + const key = `${useOnlyExternalAliasing ? 0 : 1}|${firstRelevantLocation ? getNodeId(firstRelevantLocation) : 0}|${meaning}`; + if (cache.has(key)) { + return cache.get(key); + } + const id = getSymbolId(symbol); + let visitedSymbolTables = visitedSymbolTablesMap.get(id); + if (!visitedSymbolTables) { + visitedSymbolTablesMap.set(id, visitedSymbolTables = []); + } + const result = forEachSymbolTableInScope(enclosingDeclaration, getAccessibleSymbolChainFromSymbolTable); + cache.set(key, result); + return result; + function getAccessibleSymbolChainFromSymbolTable(symbols, ignoreQualification, isLocalNameLookup) { + if (!pushIfUnique(visitedSymbolTables, symbols)) { + return void 0; + } + const result2 = trySymbolTable(symbols, ignoreQualification, isLocalNameLookup); + visitedSymbolTables.pop(); + return result2; + } + function canQualifySymbol(symbolFromSymbolTable, meaning2) { + return !needsQualification(symbolFromSymbolTable, enclosingDeclaration, meaning2) || // If symbol needs qualification, make sure that parent is accessible, if it is then this symbol is accessible too + !!getAccessibleSymbolChain(symbolFromSymbolTable.parent, enclosingDeclaration, getQualifiedLeftMeaning(meaning2), useOnlyExternalAliasing, visitedSymbolTablesMap); + } + function isAccessible(symbolFromSymbolTable, resolvedAliasSymbol, ignoreQualification) { + return (symbol === (resolvedAliasSymbol || symbolFromSymbolTable) || getMergedSymbol(symbol) === getMergedSymbol(resolvedAliasSymbol || symbolFromSymbolTable)) && // if the symbolFromSymbolTable is not external module (it could be if it was determined as ambient external module and would be in globals table) + // and if symbolFromSymbolTable or alias resolution matches the symbol, + // check the symbol can be qualified, it is only then this symbol is accessible + !some(symbolFromSymbolTable.declarations, hasNonGlobalAugmentationExternalModuleSymbol) && (ignoreQualification || canQualifySymbol(getMergedSymbol(symbolFromSymbolTable), meaning)); + } + function trySymbolTable(symbols, ignoreQualification, isLocalNameLookup) { + if (isAccessible( + symbols.get(symbol.escapedName), + /*resolvedAliasSymbol*/ + void 0, + ignoreQualification + )) { + return [symbol]; + } + const result2 = forEachEntry(symbols, (symbolFromSymbolTable) => { + if (symbolFromSymbolTable.flags & 2097152 /* Alias */ && symbolFromSymbolTable.escapedName !== "export=" /* ExportEquals */ && symbolFromSymbolTable.escapedName !== "default" /* Default */ && !(isUMDExportSymbol(symbolFromSymbolTable) && enclosingDeclaration && isExternalModule(getSourceFileOfNode(enclosingDeclaration))) && (!useOnlyExternalAliasing || some(symbolFromSymbolTable.declarations, isExternalModuleImportEqualsDeclaration)) && (isLocalNameLookup ? !some(symbolFromSymbolTable.declarations, isNamespaceReexportDeclaration) : true) && (ignoreQualification || !getDeclarationOfKind(symbolFromSymbolTable, 282 /* ExportSpecifier */))) { + const resolvedImportedSymbol = resolveAlias(symbolFromSymbolTable); + const candidate = getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification); + if (candidate) { + return candidate; + } + } + if (symbolFromSymbolTable.escapedName === symbol.escapedName && symbolFromSymbolTable.exportSymbol) { + if (isAccessible( + getMergedSymbol(symbolFromSymbolTable.exportSymbol), + /*resolvedAliasSymbol*/ + void 0, + ignoreQualification + )) { + return [symbol]; + } + } + }); + return result2 || (symbols === globals ? getCandidateListForSymbol(globalThisSymbol, globalThisSymbol, ignoreQualification) : void 0); + } + function getCandidateListForSymbol(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification) { + if (isAccessible(symbolFromSymbolTable, resolvedImportedSymbol, ignoreQualification)) { + return [symbolFromSymbolTable]; + } + const candidateTable = getExportsOfSymbol(resolvedImportedSymbol); + const accessibleSymbolsFromExports = candidateTable && getAccessibleSymbolChainFromSymbolTable( + candidateTable, + /*ignoreQualification*/ + true + ); + if (accessibleSymbolsFromExports && canQualifySymbol(symbolFromSymbolTable, getQualifiedLeftMeaning(meaning))) { + return [symbolFromSymbolTable].concat(accessibleSymbolsFromExports); + } + } + } + function needsQualification(symbol, enclosingDeclaration, meaning) { + let qualify = false; + forEachSymbolTableInScope(enclosingDeclaration, (symbolTable) => { + let symbolFromSymbolTable = getMergedSymbol(symbolTable.get(symbol.escapedName)); + if (!symbolFromSymbolTable) { + return false; + } + if (symbolFromSymbolTable === symbol) { + return true; + } + const shouldResolveAlias = symbolFromSymbolTable.flags & 2097152 /* Alias */ && !getDeclarationOfKind(symbolFromSymbolTable, 282 /* ExportSpecifier */); + symbolFromSymbolTable = shouldResolveAlias ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable; + const flags = shouldResolveAlias ? getSymbolFlags(symbolFromSymbolTable) : symbolFromSymbolTable.flags; + if (flags & meaning) { + qualify = true; + return true; + } + return false; + }); + return qualify; + } + function isPropertyOrMethodDeclarationSymbol(symbol) { + if (symbol.declarations && symbol.declarations.length) { + for (const declaration of symbol.declarations) { + switch (declaration.kind) { + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + continue; + default: + return false; + } + } + return true; + } + return false; + } + function isTypeSymbolAccessible(typeSymbol, enclosingDeclaration) { + const access = isSymbolAccessibleWorker( + typeSymbol, + enclosingDeclaration, + 788968 /* Type */, + /*shouldComputeAliasesToMakeVisible*/ + false, + /*allowModules*/ + true + ); + return access.accessibility === 0 /* Accessible */; + } + function isValueSymbolAccessible(typeSymbol, enclosingDeclaration) { + const access = isSymbolAccessibleWorker( + typeSymbol, + enclosingDeclaration, + 111551 /* Value */, + /*shouldComputeAliasesToMakeVisible*/ + false, + /*allowModules*/ + true + ); + return access.accessibility === 0 /* Accessible */; + } + function isSymbolAccessibleByFlags(typeSymbol, enclosingDeclaration, flags) { + const access = isSymbolAccessibleWorker( + typeSymbol, + enclosingDeclaration, + flags, + /*shouldComputeAliasesToMakeVisible*/ + false, + /*allowModules*/ + false + ); + return access.accessibility === 0 /* Accessible */; + } + function isAnySymbolAccessible(symbols, enclosingDeclaration, initialSymbol, meaning, shouldComputeAliasesToMakeVisible, allowModules) { + if (!length(symbols)) return; + let hadAccessibleChain; + let earlyModuleBail = false; + for (const symbol of symbols) { + const accessibleSymbolChain = getAccessibleSymbolChain( + symbol, + enclosingDeclaration, + meaning, + /*useOnlyExternalAliasing*/ + false + ); + if (accessibleSymbolChain) { + hadAccessibleChain = symbol; + const hasAccessibleDeclarations = hasVisibleDeclarations(accessibleSymbolChain[0], shouldComputeAliasesToMakeVisible); + if (hasAccessibleDeclarations) { + return hasAccessibleDeclarations; + } + } + if (allowModules) { + if (some(symbol.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { + if (shouldComputeAliasesToMakeVisible) { + earlyModuleBail = true; + continue; + } + return { + accessibility: 0 /* Accessible */ + }; + } + } + const containers = getContainersOfSymbol(symbol, enclosingDeclaration, meaning); + const parentResult = isAnySymbolAccessible(containers, enclosingDeclaration, initialSymbol, initialSymbol === symbol ? getQualifiedLeftMeaning(meaning) : meaning, shouldComputeAliasesToMakeVisible, allowModules); + if (parentResult) { + return parentResult; + } + } + if (earlyModuleBail) { + return { + accessibility: 0 /* Accessible */ + }; + } + if (hadAccessibleChain) { + return { + accessibility: 1 /* NotAccessible */, + errorSymbolName: symbolToString(initialSymbol, enclosingDeclaration, meaning), + errorModuleName: hadAccessibleChain !== initialSymbol ? symbolToString(hadAccessibleChain, enclosingDeclaration, 1920 /* Namespace */) : void 0 + }; + } + } + function isSymbolAccessible(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible) { + return isSymbolAccessibleWorker( + symbol, + enclosingDeclaration, + meaning, + shouldComputeAliasesToMakeVisible, + /*allowModules*/ + true + ); + } + function isSymbolAccessibleWorker(symbol, enclosingDeclaration, meaning, shouldComputeAliasesToMakeVisible, allowModules) { + if (symbol && enclosingDeclaration) { + const result = isAnySymbolAccessible([symbol], enclosingDeclaration, symbol, meaning, shouldComputeAliasesToMakeVisible, allowModules); + if (result) { + return result; + } + const symbolExternalModule = forEach(symbol.declarations, getExternalModuleContainer); + if (symbolExternalModule) { + const enclosingExternalModule = getExternalModuleContainer(enclosingDeclaration); + if (symbolExternalModule !== enclosingExternalModule) { + return { + accessibility: 2 /* CannotBeNamed */, + errorSymbolName: symbolToString(symbol, enclosingDeclaration, meaning), + errorModuleName: symbolToString(symbolExternalModule), + errorNode: isInJSFile(enclosingDeclaration) ? enclosingDeclaration : void 0 + }; + } + } + return { + accessibility: 1 /* NotAccessible */, + errorSymbolName: symbolToString(symbol, enclosingDeclaration, meaning) + }; + } + return { accessibility: 0 /* Accessible */ }; + } + function getExternalModuleContainer(declaration) { + const node = findAncestor(declaration, hasExternalModuleSymbol); + return node && getSymbolOfDeclaration(node); + } + function hasExternalModuleSymbol(declaration) { + return isAmbientModule(declaration) || declaration.kind === 308 /* SourceFile */ && isExternalOrCommonJsModule(declaration); + } + function hasNonGlobalAugmentationExternalModuleSymbol(declaration) { + return isModuleWithStringLiteralName(declaration) || declaration.kind === 308 /* SourceFile */ && isExternalOrCommonJsModule(declaration); + } + function hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) { + let aliasesToMakeVisible; + if (!every(filter(symbol.declarations, (d) => d.kind !== 80 /* Identifier */), getIsDeclarationVisible)) { + return void 0; + } + return { accessibility: 0 /* Accessible */, aliasesToMakeVisible }; + function getIsDeclarationVisible(declaration) { + var _a, _b; + if (!isDeclarationVisible(declaration)) { + const anyImportSyntax = getAnyImportSyntax(declaration); + if (anyImportSyntax && !hasSyntacticModifier(anyImportSyntax, 32 /* Export */) && // import clause without export + isDeclarationVisible(anyImportSyntax.parent)) { + return addVisibleAlias(declaration, anyImportSyntax); + } else if (isVariableDeclaration(declaration) && isVariableStatement(declaration.parent.parent) && !hasSyntacticModifier(declaration.parent.parent, 32 /* Export */) && // unexported variable statement + isDeclarationVisible(declaration.parent.parent.parent)) { + return addVisibleAlias(declaration, declaration.parent.parent); + } else if (isLateVisibilityPaintedStatement(declaration) && !hasSyntacticModifier(declaration, 32 /* Export */) && isDeclarationVisible(declaration.parent)) { + return addVisibleAlias(declaration, declaration); + } else if (isBindingElement(declaration)) { + if (symbol.flags & 2097152 /* Alias */ && isInJSFile(declaration) && ((_a = declaration.parent) == null ? void 0 : _a.parent) && isVariableDeclaration(declaration.parent.parent) && ((_b = declaration.parent.parent.parent) == null ? void 0 : _b.parent) && isVariableStatement(declaration.parent.parent.parent.parent) && !hasSyntacticModifier(declaration.parent.parent.parent.parent, 32 /* Export */) && declaration.parent.parent.parent.parent.parent && isDeclarationVisible(declaration.parent.parent.parent.parent.parent)) { + return addVisibleAlias(declaration, declaration.parent.parent.parent.parent); + } else if (symbol.flags & 2 /* BlockScopedVariable */) { + const rootDeclaration = walkUpBindingElementsAndPatterns(declaration); + if (rootDeclaration.kind === 170 /* Parameter */) { + return false; + } + const variableStatement = rootDeclaration.parent.parent; + if (variableStatement.kind !== 244 /* VariableStatement */) { + return false; + } + if (hasSyntacticModifier(variableStatement, 32 /* Export */)) { + return true; + } + if (!isDeclarationVisible(variableStatement.parent)) { + return false; + } + return addVisibleAlias(declaration, variableStatement); + } + } + return false; + } + return true; + } + function addVisibleAlias(declaration, aliasingStatement) { + if (shouldComputeAliasToMakeVisible) { + getNodeLinks(declaration).isVisible = true; + aliasesToMakeVisible = appendIfUnique(aliasesToMakeVisible, aliasingStatement); + } + return true; + } + } + function getMeaningOfEntityNameReference(entityName) { + let meaning; + if (entityName.parent.kind === 187 /* TypeQuery */ || entityName.parent.kind === 234 /* ExpressionWithTypeArguments */ && !isPartOfTypeNode(entityName.parent) || entityName.parent.kind === 168 /* ComputedPropertyName */ || entityName.parent.kind === 183 /* TypePredicate */ && entityName.parent.parameterName === entityName) { + meaning = 111551 /* Value */ | 1048576 /* ExportValue */; + } else if (entityName.kind === 167 /* QualifiedName */ || entityName.kind === 212 /* PropertyAccessExpression */ || entityName.parent.kind === 272 /* ImportEqualsDeclaration */ || entityName.parent.kind === 167 /* QualifiedName */ && entityName.parent.left === entityName || entityName.parent.kind === 212 /* PropertyAccessExpression */ && entityName.parent.expression === entityName || entityName.parent.kind === 213 /* ElementAccessExpression */ && entityName.parent.expression === entityName) { + meaning = 1920 /* Namespace */; + } else { + meaning = 788968 /* Type */; + } + return meaning; + } + function isEntityNameVisible(entityName, enclosingDeclaration, shouldComputeAliasToMakeVisible = true) { + const meaning = getMeaningOfEntityNameReference(entityName); + const firstIdentifier = getFirstIdentifier(entityName); + const symbol = resolveName( + enclosingDeclaration, + firstIdentifier.escapedText, + meaning, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + if (symbol && symbol.flags & 262144 /* TypeParameter */ && meaning & 788968 /* Type */) { + return { accessibility: 0 /* Accessible */ }; + } + if (!symbol && isThisIdentifier(firstIdentifier) && isSymbolAccessible( + getSymbolOfDeclaration(getThisContainer( + firstIdentifier, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + )), + firstIdentifier, + meaning, + /*shouldComputeAliasesToMakeVisible*/ + false + ).accessibility === 0 /* Accessible */) { + return { accessibility: 0 /* Accessible */ }; + } + if (!symbol) { + return { + accessibility: 3 /* NotResolved */, + errorSymbolName: getTextOfNode(firstIdentifier), + errorNode: firstIdentifier + }; + } + return hasVisibleDeclarations(symbol, shouldComputeAliasToMakeVisible) || { + accessibility: 1 /* NotAccessible */, + errorSymbolName: getTextOfNode(firstIdentifier), + errorNode: firstIdentifier + }; + } + function symbolToString(symbol, enclosingDeclaration, meaning, flags = 4 /* AllowAnyNodeKind */, writer) { + let nodeFlags = 70221824 /* IgnoreErrors */; + let internalNodeFlags = 0 /* None */; + if (flags & 2 /* UseOnlyExternalAliasing */) { + nodeFlags |= 128 /* UseOnlyExternalAliasing */; + } + if (flags & 1 /* WriteTypeParametersOrArguments */) { + nodeFlags |= 512 /* WriteTypeParametersInQualifiedName */; + } + if (flags & 8 /* UseAliasDefinedOutsideCurrentScope */) { + nodeFlags |= 16384 /* UseAliasDefinedOutsideCurrentScope */; + } + if (flags & 32 /* DoNotIncludeSymbolChain */) { + internalNodeFlags |= 4 /* DoNotIncludeSymbolChain */; + } + if (flags & 16 /* WriteComputedProps */) { + internalNodeFlags |= 1 /* WriteComputedProps */; + } + const builder = flags & 4 /* AllowAnyNodeKind */ ? nodeBuilder.symbolToNode : nodeBuilder.symbolToEntityName; + return writer ? symbolToStringWorker(writer).getText() : usingSingleLineStringWriter(symbolToStringWorker); + function symbolToStringWorker(writer2) { + const entity = builder(symbol, meaning, enclosingDeclaration, nodeFlags, internalNodeFlags); + const printer = (enclosingDeclaration == null ? void 0 : enclosingDeclaration.kind) === 308 /* SourceFile */ ? createPrinterWithRemoveCommentsNeverAsciiEscape() : createPrinterWithRemoveComments(); + const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); + printer.writeNode( + 4 /* Unspecified */, + entity, + /*sourceFile*/ + sourceFile, + writer2 + ); + return writer2; + } + } + function signatureToString(signature, enclosingDeclaration, flags = 0 /* None */, kind, writer, maximumLength, verbosityLevel, out) { + return writer ? signatureToStringWorker(writer).getText() : usingSingleLineStringWriter(signatureToStringWorker); + function signatureToStringWorker(writer2) { + let sigOutput; + if (flags & 262144 /* WriteArrowStyleSignature */) { + sigOutput = kind === 1 /* Construct */ ? 186 /* ConstructorType */ : 185 /* FunctionType */; + } else { + sigOutput = kind === 1 /* Construct */ ? 181 /* ConstructSignature */ : 180 /* CallSignature */; + } + const sig = nodeBuilder.signatureToSignatureDeclaration( + signature, + sigOutput, + enclosingDeclaration, + toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */, + /*internalFlags*/ + void 0, + /*tracker*/ + void 0, + maximumLength, + verbosityLevel, + out + ); + const printer = createPrinterWithRemoveCommentsOmitTrailingSemicolon(); + const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); + printer.writeNode( + 4 /* Unspecified */, + sig, + /*sourceFile*/ + sourceFile, + getTrailingSemicolonDeferringWriter(writer2) + ); + return writer2; + } + } + function typeToString(type, enclosingDeclaration, flags = 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer = createTextWriter(""), maximumLength, verbosityLevel, out) { + const noTruncation = !maximumLength && compilerOptions.noErrorTruncation || flags & 1 /* NoTruncation */; + const typeNode = nodeBuilder.typeToTypeNode( + type, + enclosingDeclaration, + toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0), + /*internalFlags*/ + void 0, + /*tracker*/ + void 0, + maximumLength, + verbosityLevel, + out + ); + if (typeNode === void 0) return Debug.fail("should always get typenode"); + const printer = type !== unresolvedType ? createPrinterWithRemoveComments() : createPrinterWithDefaults(); + const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); + printer.writeNode( + 4 /* Unspecified */, + typeNode, + /*sourceFile*/ + sourceFile, + writer + ); + const result = writer.getText(); + const maxLength2 = maximumLength || (noTruncation ? noTruncationMaximumTruncationLength * 2 : defaultMaximumTruncationLength * 2); + if (maxLength2 && result && result.length >= maxLength2) { + return result.substr(0, maxLength2 - "...".length) + "..."; + } + return result; + } + function getTypeNamesForErrorDisplay(left, right) { + let leftStr = symbolValueDeclarationIsContextSensitive(left.symbol) ? typeToString(left, left.symbol.valueDeclaration) : typeToString(left); + let rightStr = symbolValueDeclarationIsContextSensitive(right.symbol) ? typeToString(right, right.symbol.valueDeclaration) : typeToString(right); + if (leftStr === rightStr) { + leftStr = getTypeNameForErrorDisplay(left); + rightStr = getTypeNameForErrorDisplay(right); + } + return [leftStr, rightStr]; + } + function getTypeNameForErrorDisplay(type) { + return typeToString( + type, + /*enclosingDeclaration*/ + void 0, + 64 /* UseFullyQualifiedType */ + ); + } + function symbolValueDeclarationIsContextSensitive(symbol) { + return symbol && !!symbol.valueDeclaration && isExpression(symbol.valueDeclaration) && !isContextSensitive(symbol.valueDeclaration); + } + function toNodeBuilderFlags(flags = 0 /* None */) { + return flags & 848330095 /* NodeBuilderFlagsMask */; + } + function isClassInstanceSide(type) { + return !!type.symbol && !!(type.symbol.flags & 32 /* Class */) && (type === getDeclaredTypeOfClassOrInterface(type.symbol) || !!(type.flags & 524288 /* Object */) && !!(getObjectFlags(type) & 16777216 /* IsClassInstanceClone */)); + } + function getTypeFromTypeNodeWithoutContext(node) { + return getTypeFromTypeNode(node); + } + function createNodeBuilder() { + const syntacticBuilderResolver = { + evaluateEntityNameExpression, + isExpandoFunctionDeclaration, + hasLateBindableName, + shouldRemoveDeclaration(context, node) { + return !(context.internalFlags & 8 /* AllowUnresolvedNames */ && isEntityNameExpression(node.name.expression) && checkComputedPropertyName(node.name).flags & 1 /* Any */); + }, + createRecoveryBoundary(context) { + return createRecoveryBoundary(context); + }, + isDefinitelyReferenceToGlobalSymbolObject, + getAllAccessorDeclarations: getAllAccessorDeclarationsForDeclaration, + requiresAddingImplicitUndefined(declaration, symbol, enclosingDeclaration) { + var _a; + switch (declaration.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 349 /* JSDocPropertyTag */: + symbol ?? (symbol = getSymbolOfDeclaration(declaration)); + const type = getTypeOfSymbol(symbol); + return !!(symbol.flags & 4 /* Property */ && symbol.flags & 16777216 /* Optional */ && isOptionalDeclaration(declaration) && ((_a = symbol.links) == null ? void 0 : _a.mappedType) && containsNonMissingUndefinedType(type)); + case 170 /* Parameter */: + case 342 /* JSDocParameterTag */: + return requiresAddingImplicitUndefined(declaration, enclosingDeclaration); + default: + Debug.assertNever(declaration); + } + }, + isOptionalParameter, + isUndefinedIdentifierExpression(node) { + return getSymbolAtLocation(node) === undefinedSymbol; + }, + isEntityNameVisible(context, entityName, shouldComputeAliasToMakeVisible) { + return isEntityNameVisible(entityName, context.enclosingDeclaration, shouldComputeAliasToMakeVisible); + }, + serializeExistingTypeNode(context, typeNode, addUndefined) { + return serializeExistingTypeNode(context, typeNode, !!addUndefined); + }, + serializeReturnTypeForSignature(syntacticContext, signatureDeclaration, symbol) { + const context = syntacticContext; + const signature = getSignatureFromDeclaration(signatureDeclaration); + symbol ?? (symbol = getSymbolOfDeclaration(signatureDeclaration)); + const returnType = context.enclosingSymbolTypes.get(getSymbolId(symbol)) ?? instantiateType(getReturnTypeOfSignature(signature), context.mapper); + return serializeInferredReturnTypeForSignature(context, signature, returnType); + }, + serializeTypeOfExpression(syntacticContext, expr) { + const context = syntacticContext; + const type = instantiateType(getWidenedType(getRegularTypeOfExpression(expr)), context.mapper); + return typeToTypeNodeHelper(type, context); + }, + serializeTypeOfDeclaration(syntacticContext, declaration, symbol) { + var _a; + const context = syntacticContext; + symbol ?? (symbol = getSymbolOfDeclaration(declaration)); + let type = (_a = context.enclosingSymbolTypes) == null ? void 0 : _a.get(getSymbolId(symbol)); + if (type === void 0) { + type = symbol.flags & 98304 /* Accessor */ && declaration.kind === 179 /* SetAccessor */ ? instantiateType(getWriteTypeOfSymbol(symbol), context.mapper) : symbol && !(symbol.flags & (2048 /* TypeLiteral */ | 131072 /* Signature */)) ? instantiateType(getWidenedLiteralType(getTypeOfSymbol(symbol)), context.mapper) : errorType; + } + const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration); + if (addUndefinedForParameter) { + type = getOptionalType(type); + } + return serializeInferredTypeForDeclaration(symbol, context, type); + }, + serializeNameOfParameter(context, parameter) { + return parameterToParameterDeclarationName(getSymbolOfDeclaration(parameter), parameter, context); + }, + serializeEntityName(syntacticContext, node) { + const context = syntacticContext; + const symbol = getSymbolAtLocation( + node, + /*ignoreErrors*/ + true + ); + if (!symbol) return void 0; + if (!isValueSymbolAccessible(symbol, context.enclosingDeclaration)) return void 0; + return symbolToExpression(symbol, context, 111551 /* Value */ | 1048576 /* ExportValue */); + }, + serializeTypeName(context, node, isTypeOf, typeArguments) { + return serializeTypeName(context, node, isTypeOf, typeArguments); + }, + getJsDocPropertyOverride(syntacticContext, jsDocTypeLiteral, jsDocProperty) { + const context = syntacticContext; + const name = isIdentifier(jsDocProperty.name) ? jsDocProperty.name : jsDocProperty.name.right; + const typeViaParent = getTypeOfPropertyOfType(getTypeFromTypeNode2(context, jsDocTypeLiteral), name.escapedText); + const overrideTypeNode = typeViaParent && jsDocProperty.typeExpression && getTypeFromTypeNode2(context, jsDocProperty.typeExpression.type) !== typeViaParent ? typeToTypeNodeHelper(typeViaParent, context) : void 0; + return overrideTypeNode; + }, + enterNewScope(context, node) { + if (isFunctionLike(node) || isJSDocSignature(node)) { + const signature = getSignatureFromDeclaration(node); + return enterNewScope(context, node, signature.parameters, signature.typeParameters); + } else { + const typeParameters = isConditionalTypeNode(node) ? getInferTypeParameters(node) : [getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node.typeParameter))]; + return enterNewScope( + context, + node, + /*expandedParams*/ + void 0, + typeParameters + ); + } + }, + markNodeReuse(context, range, location) { + return setTextRange2(context, range, location); + }, + trackExistingEntityName(context, node) { + return trackExistingEntityName(node, context); + }, + trackComputedName(context, accessExpression) { + trackComputedName(accessExpression, context.enclosingDeclaration, context); + }, + getModuleSpecifierOverride(syntacticContext, parent2, lit) { + const context = syntacticContext; + if (context.bundled || context.enclosingFile !== getSourceFileOfNode(lit)) { + let name = lit.text; + const originalName = name; + const nodeSymbol = getNodeLinks(parent2).resolvedSymbol; + const meaning = parent2.isTypeOf ? 111551 /* Value */ : 788968 /* Type */; + const parentSymbol = nodeSymbol && isSymbolAccessible( + nodeSymbol, + context.enclosingDeclaration, + meaning, + /*shouldComputeAliasesToMakeVisible*/ + false + ).accessibility === 0 /* Accessible */ && lookupSymbolChain( + nodeSymbol, + context, + meaning, + /*yieldModuleSymbol*/ + true + )[0]; + if (parentSymbol && isExternalModuleSymbol(parentSymbol)) { + name = getSpecifierForModuleSymbol(parentSymbol, context); + } else { + const targetFile = getExternalModuleFileFromDeclaration(parent2); + if (targetFile) { + name = getSpecifierForModuleSymbol(targetFile.symbol, context); + } + } + if (name.includes("/node_modules/")) { + context.encounteredError = true; + if (context.tracker.reportLikelyUnsafeImportRequiredError) { + context.tracker.reportLikelyUnsafeImportRequiredError(name); + } + } + if (name !== originalName) { + return name; + } + } + }, + canReuseTypeNode(context, typeNode) { + return canReuseTypeNode(context, typeNode); + }, + canReuseTypeNodeAnnotation(syntacticContext, node, existing, symbol, requiresAddingUndefined) { + var _a; + const context = syntacticContext; + if (context.enclosingDeclaration === void 0) return false; + symbol ?? (symbol = getSymbolOfDeclaration(node)); + let type = (_a = context.enclosingSymbolTypes) == null ? void 0 : _a.get(getSymbolId(symbol)); + if (type === void 0) { + if (symbol.flags & 98304 /* Accessor */) { + type = node.kind === 179 /* SetAccessor */ ? getWriteTypeOfSymbol(symbol) : getTypeOfAccessors(symbol); + } else if (isValueSignatureDeclaration(node)) { + type = getReturnTypeOfSignature(getSignatureFromDeclaration(node)); + } else { + type = getTypeOfSymbol(symbol); + } + } + let annotationType = getTypeFromTypeNodeWithoutContext(existing); + if (isErrorType(annotationType)) { + return true; + } + if (requiresAddingUndefined && annotationType) { + annotationType = addOptionality(annotationType, !isParameter(node)); + } + return !!annotationType && typeNodeIsEquivalentToType(node, type, annotationType) && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type); + } + }; + return { + syntacticBuilderResolver, + typeToTypeNode: (type, enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, out) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, (context) => typeToTypeNodeHelper(type, context), out), + typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context) + ), + serializeTypeForDeclaration: (declaration, symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => syntacticNodeBuilder.serializeTypeOfDeclaration(declaration, symbol, context) + ), + serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => syntacticNodeBuilder.serializeReturnTypeForSignature(signature, getSymbolOfDeclaration(signature), context) + ), + serializeTypeForExpression: (expr, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => syntacticNodeBuilder.serializeTypeOfExpression(expr, context) + ), + indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => indexInfoToIndexSignatureDeclarationHelper( + indexInfo, + context, + /*typeNode*/ + void 0 + ) + ), + signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, out) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, (context) => signatureToSignatureDeclarationHelper(signature, kind, context), out), + symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => symbolToName( + symbol, + context, + meaning, + /*expectsIdentifier*/ + false + ) + ), + symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => symbolToExpression(symbol, context, meaning) + ), + symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => typeParametersToTypeParameterDeclarations(symbol, context) + ), + symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => symbolToParameterDeclaration(symbol, context) + ), + typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, out) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, (context) => typeParameterToDeclaration(parameter, context), out), + symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => symbolTableToDeclarationStatements(symbolTable, context) + ), + symbolToNode: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*maximumLength*/ + void 0, + /*verbosityLevel*/ + void 0, + (context) => symbolToNode(symbol, context, meaning) + ), + symbolToDeclarations + }; + function getTypeFromTypeNode2(context, node, noMappedTypes) { + const type = getTypeFromTypeNodeWithoutContext(node); + if (!context.mapper) return type; + const mappedType = instantiateType(type, context.mapper); + return noMappedTypes && mappedType !== type ? void 0 : mappedType; + } + function setTextRange2(context, range, location) { + if (!nodeIsSynthesized(range) || !(range.flags & 16 /* Synthesized */) || !context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(getOriginalNode(range))) { + range = factory.cloneNode(range); + } + if (range === location) return range; + if (!location) { + return range; + } + let original = range.original; + while (original && original !== location) { + original = original.original; + } + if (!original) { + setOriginalNode(range, location); + } + if (context.enclosingFile && context.enclosingFile === getSourceFileOfNode(getOriginalNode(location))) { + return setTextRange(range, location); + } + return range; + } + function symbolToNode(symbol, context, meaning) { + if (context.internalFlags & 1 /* WriteComputedProps */) { + if (symbol.valueDeclaration) { + const name = getNameOfDeclaration(symbol.valueDeclaration); + if (name && isComputedPropertyName(name)) return name; + } + const nameType = getSymbolLinks(symbol).nameType; + if (nameType && nameType.flags & (1024 /* EnumLiteral */ | 8192 /* UniqueESSymbol */)) { + context.enclosingDeclaration = nameType.symbol.valueDeclaration; + return factory.createComputedPropertyName(symbolToExpression(nameType.symbol, context, meaning)); + } + } + return symbolToExpression(symbol, context, meaning); + } + function symbolToDeclarations(symbol, meaning, flags, maximumLength, verbosityLevel, out) { + const nodes = withContext2( + /*enclosingDeclaration*/ + void 0, + flags, + /*internalFlags*/ + void 0, + /*tracker*/ + void 0, + maximumLength, + verbosityLevel, + (context) => symbolToDeclarationsWorker(symbol, context), + out + ); + return mapDefined(nodes, (node) => { + switch (node.kind) { + case 264 /* ClassDeclaration */: + return simplifyClassDeclaration(node, symbol); + case 267 /* EnumDeclaration */: + return simplifyModifiers(node, isEnumDeclaration, symbol); + case 265 /* InterfaceDeclaration */: + return simplifyInterfaceDeclaration(node, symbol, meaning); + case 268 /* ModuleDeclaration */: + return simplifyModifiers(node, isModuleDeclaration, symbol); + default: + return void 0; + } + }); + } + function simplifyClassDeclaration(classDecl, symbol) { + const classDeclarations = filter(symbol.declarations, isClassLike); + const originalClassDecl = classDeclarations && classDeclarations.length > 0 ? classDeclarations[0] : classDecl; + const modifiers = getEffectiveModifierFlags(originalClassDecl) & ~(32 /* Export */ | 128 /* Ambient */); + const isAnonymous = isClassExpression(originalClassDecl); + if (isAnonymous) { + classDecl = factory.updateClassDeclaration( + classDecl, + classDecl.modifiers, + /*name*/ + void 0, + classDecl.typeParameters, + classDecl.heritageClauses, + classDecl.members + ); + } + return factory.replaceModifiers(classDecl, modifiers); + } + function simplifyModifiers(newDecl, isDeclKind, symbol) { + const decls = filter(symbol.declarations, isDeclKind); + const declWithModifiers = decls && decls.length > 0 ? decls[0] : newDecl; + const modifiers = getEffectiveModifierFlags(declWithModifiers) & ~(32 /* Export */ | 128 /* Ambient */); + return factory.replaceModifiers(newDecl, modifiers); + } + function simplifyInterfaceDeclaration(interfaceDecl, symbol, meaning) { + if (!(meaning & 64 /* Interface */)) { + return void 0; + } + return simplifyModifiers(interfaceDecl, isInterfaceDeclaration, symbol); + } + function symbolToDeclarationsWorker(symbol, context) { + const type = getDeclaredTypeOfSymbol(symbol); + context.typeStack.push(type.id); + context.typeStack.push(-1); + const table = createSymbolTable([symbol]); + const statements = symbolTableToDeclarationStatements(table, context); + context.typeStack.pop(); + context.typeStack.pop(); + return statements; + } + function withContext2(enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, cb, out) { + const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : (internalFlags || 0 /* None */) & 4 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; + flags = flags || 0 /* None */; + const maxTruncationLength = maximumLength || (flags & 1 /* NoTruncation */ ? noTruncationMaximumTruncationLength : defaultMaximumTruncationLength); + const context = { + enclosingDeclaration, + enclosingFile: enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration), + flags, + internalFlags: internalFlags || 0 /* None */, + tracker: void 0, + maxTruncationLength, + maxExpansionDepth: verbosityLevel ?? -1, + encounteredError: false, + suppressReportInferenceFallback: false, + reportedDiagnostic: false, + visitedTypes: void 0, + symbolDepth: void 0, + inferTypeParameters: void 0, + approximateLength: 0, + trackedSymbols: void 0, + bundled: !!compilerOptions.outFile && !!enclosingDeclaration && isExternalOrCommonJsModule(getSourceFileOfNode(enclosingDeclaration)), + truncating: false, + usedSymbolNames: void 0, + remappedSymbolNames: void 0, + remappedSymbolReferences: void 0, + reverseMappedStack: void 0, + mustCreateTypeParameterSymbolList: true, + typeParameterSymbolList: void 0, + mustCreateTypeParametersNamesLookups: true, + typeParameterNames: void 0, + typeParameterNamesByText: void 0, + typeParameterNamesByTextNextNameCount: void 0, + enclosingSymbolTypes: /* @__PURE__ */ new Map(), + mapper: void 0, + depth: 0, + typeStack: [], + out: { + canIncreaseExpansionDepth: false, + truncated: false + } + }; + context.tracker = new SymbolTrackerImpl(context, tracker, moduleResolverHost); + const resultingNode = cb(context); + if (context.truncating && context.flags & 1 /* NoTruncation */) { + context.tracker.reportTruncationError(); + } + if (out) { + out.canIncreaseExpansionDepth = context.out.canIncreaseExpansionDepth; + out.truncated = context.out.truncated; + } + return context.encounteredError ? void 0 : resultingNode; + } + function addSymbolTypeToContext(context, symbol, type) { + const id = getSymbolId(symbol); + const oldType = context.enclosingSymbolTypes.get(id); + context.enclosingSymbolTypes.set(id, type); + return restore; + function restore() { + if (oldType) { + context.enclosingSymbolTypes.set(id, oldType); + } else { + context.enclosingSymbolTypes.delete(id); + } + } + } + function saveRestoreFlags(context) { + const flags = context.flags; + const internalFlags = context.internalFlags; + const depth = context.depth; + return restore; + function restore() { + context.flags = flags; + context.internalFlags = internalFlags; + context.depth = depth; + } + } + function checkTruncationLengthIfExpanding(context) { + return context.maxExpansionDepth >= 0 && checkTruncationLength(context); + } + function checkTruncationLength(context) { + if (context.truncating) return context.truncating; + return context.truncating = context.approximateLength > context.maxTruncationLength; + } + function canPossiblyExpandType(type, context) { + for (let i = 0; i < context.typeStack.length - 1; i++) { + if (context.typeStack[i] === type.id) { + return false; + } + } + return context.depth < context.maxExpansionDepth || context.depth === context.maxExpansionDepth && !context.out.canIncreaseExpansionDepth; + } + function shouldExpandType(type, context, isAlias = false) { + if (!isAlias && isLibType(type)) { + return false; + } + for (let i = 0; i < context.typeStack.length - 1; i++) { + if (context.typeStack[i] === type.id) { + return false; + } + } + const result = context.depth < context.maxExpansionDepth; + if (!result) { + context.out.canIncreaseExpansionDepth = true; + } + return result; + } + function typeToTypeNodeHelper(type, context) { + const restoreFlags = saveRestoreFlags(context); + if (type) context.typeStack.push(type.id); + const typeNode = typeToTypeNodeWorker(type, context); + if (type) context.typeStack.pop(); + restoreFlags(); + return typeNode; + } + function typeToTypeNodeWorker(type, context) { + var _a, _b; + if (cancellationToken && cancellationToken.throwIfCancellationRequested) { + cancellationToken.throwIfCancellationRequested(); + } + const inTypeAlias = context.flags & 8388608 /* InTypeAlias */; + context.flags &= ~8388608 /* InTypeAlias */; + let expandingEnum = false; + if (!type) { + if (!(context.flags & 262144 /* AllowEmptyUnionOrIntersection */)) { + context.encounteredError = true; + return void 0; + } + context.approximateLength += 3; + return factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + if (!(context.flags & 536870912 /* NoTypeReduction */)) { + type = getReducedType(type); + } + if (type.flags & 1 /* Any */) { + if (type.aliasSymbol) { + return factory.createTypeReferenceNode(symbolToEntityNameNode(type.aliasSymbol), mapToTypeNodes(type.aliasTypeArguments, context)); + } + if (type === unresolvedType) { + return addSyntheticLeadingComment(factory.createKeywordTypeNode(133 /* AnyKeyword */), 3 /* MultiLineCommentTrivia */, "unresolved"); + } + context.approximateLength += 3; + return factory.createKeywordTypeNode(type === intrinsicMarkerType ? 141 /* IntrinsicKeyword */ : 133 /* AnyKeyword */); + } + if (type.flags & 2 /* Unknown */) { + return factory.createKeywordTypeNode(159 /* UnknownKeyword */); + } + if (type.flags & 4 /* String */) { + context.approximateLength += 6; + return factory.createKeywordTypeNode(154 /* StringKeyword */); + } + if (type.flags & 8 /* Number */) { + context.approximateLength += 6; + return factory.createKeywordTypeNode(150 /* NumberKeyword */); + } + if (type.flags & 64 /* BigInt */) { + context.approximateLength += 6; + return factory.createKeywordTypeNode(163 /* BigIntKeyword */); + } + if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) { + context.approximateLength += 7; + return factory.createKeywordTypeNode(136 /* BooleanKeyword */); + } + if (type.flags & 1056 /* EnumLike */) { + if (type.symbol.flags & 8 /* EnumMember */) { + const parentSymbol = getParentOfSymbol(type.symbol); + const parentName = symbolToTypeNode(parentSymbol, context, 788968 /* Type */); + if (getDeclaredTypeOfSymbol(parentSymbol) === type) { + return parentName; + } + const memberName = symbolName(type.symbol); + if (isIdentifierText(memberName, 1 /* ES5 */)) { + return appendReferenceToType( + parentName, + factory.createTypeReferenceNode( + memberName, + /*typeArguments*/ + void 0 + ) + ); + } + if (isImportTypeNode(parentName)) { + parentName.isTypeOf = true; + return factory.createIndexedAccessTypeNode(parentName, factory.createLiteralTypeNode(factory.createStringLiteral(memberName))); + } else if (isTypeReferenceNode(parentName)) { + return factory.createIndexedAccessTypeNode(factory.createTypeQueryNode(parentName.typeName), factory.createLiteralTypeNode(factory.createStringLiteral(memberName))); + } else { + return Debug.fail("Unhandled type node kind returned from `symbolToTypeNode`."); + } + } + if (!shouldExpandType(type, context)) { + return symbolToTypeNode(type.symbol, context, 788968 /* Type */); + } else { + expandingEnum = true; + } + } + if (type.flags & 128 /* StringLiteral */) { + context.approximateLength += type.value.length + 2; + return factory.createLiteralTypeNode(setEmitFlags(factory.createStringLiteral(type.value, !!(context.flags & 268435456 /* UseSingleQuotesForStringLiteralType */)), 16777216 /* NoAsciiEscaping */)); + } + if (type.flags & 256 /* NumberLiteral */) { + const value = type.value; + context.approximateLength += ("" + value).length; + return factory.createLiteralTypeNode(value < 0 ? factory.createPrefixUnaryExpression(41 /* MinusToken */, factory.createNumericLiteral(-value)) : factory.createNumericLiteral(value)); + } + if (type.flags & 2048 /* BigIntLiteral */) { + context.approximateLength += pseudoBigIntToString(type.value).length + 1; + return factory.createLiteralTypeNode(factory.createBigIntLiteral(type.value)); + } + if (type.flags & 512 /* BooleanLiteral */) { + context.approximateLength += type.intrinsicName.length; + return factory.createLiteralTypeNode(type.intrinsicName === "true" ? factory.createTrue() : factory.createFalse()); + } + if (type.flags & 8192 /* UniqueESSymbol */) { + if (!(context.flags & 1048576 /* AllowUniqueESSymbolType */)) { + if (isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) { + context.approximateLength += 6; + return symbolToTypeNode(type.symbol, context, 111551 /* Value */); + } + if (context.tracker.reportInaccessibleUniqueSymbolError) { + context.tracker.reportInaccessibleUniqueSymbolError(); + } + } + context.approximateLength += 13; + return factory.createTypeOperatorNode(158 /* UniqueKeyword */, factory.createKeywordTypeNode(155 /* SymbolKeyword */)); + } + if (type.flags & 16384 /* Void */) { + context.approximateLength += 4; + return factory.createKeywordTypeNode(116 /* VoidKeyword */); + } + if (type.flags & 32768 /* Undefined */) { + context.approximateLength += 9; + return factory.createKeywordTypeNode(157 /* UndefinedKeyword */); + } + if (type.flags & 65536 /* Null */) { + context.approximateLength += 4; + return factory.createLiteralTypeNode(factory.createNull()); + } + if (type.flags & 131072 /* Never */) { + context.approximateLength += 5; + return factory.createKeywordTypeNode(146 /* NeverKeyword */); + } + if (type.flags & 4096 /* ESSymbol */) { + context.approximateLength += 6; + return factory.createKeywordTypeNode(155 /* SymbolKeyword */); + } + if (type.flags & 67108864 /* NonPrimitive */) { + context.approximateLength += 6; + return factory.createKeywordTypeNode(151 /* ObjectKeyword */); + } + if (isThisTypeParameter(type)) { + if (context.flags & 4194304 /* InObjectTypeLiteral */) { + if (!context.encounteredError && !(context.flags & 32768 /* AllowThisInObjectLiteral */)) { + context.encounteredError = true; + } + (_b = (_a = context.tracker).reportInaccessibleThisError) == null ? void 0 : _b.call(_a); + } + context.approximateLength += 4; + return factory.createThisTypeNode(); + } + if (!inTypeAlias && type.aliasSymbol && (context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */ || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration))) { + if (!shouldExpandType( + type, + context, + /*isAlias*/ + true + )) { + const typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context); + if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & 32 /* Class */)) return factory.createTypeReferenceNode(factory.createIdentifier(""), typeArgumentNodes); + if (length(typeArgumentNodes) === 1 && type.aliasSymbol === globalArrayType.symbol) { + return factory.createArrayTypeNode(typeArgumentNodes[0]); + } + return symbolToTypeNode(type.aliasSymbol, context, 788968 /* Type */, typeArgumentNodes); + } + context.depth += 1; + } + const objectFlags = getObjectFlags(type); + if (objectFlags & 4 /* Reference */) { + Debug.assert(!!(type.flags & 524288 /* Object */)); + if (shouldExpandType(type, context)) { + context.depth += 1; + return createAnonymousTypeNode( + type, + /*forceClassExpansion*/ + true, + /*forceExpansion*/ + true + ); + } + return type.node ? visitAndTransformType(type, typeReferenceToTypeNode) : typeReferenceToTypeNode(type); + } + if (type.flags & 262144 /* TypeParameter */ || objectFlags & 3 /* ClassOrInterface */) { + if (type.flags & 262144 /* TypeParameter */ && contains(context.inferTypeParameters, type)) { + context.approximateLength += symbolName(type.symbol).length + 6; + let constraintNode; + const constraint = getConstraintOfTypeParameter(type); + if (constraint) { + const inferredConstraint = getInferredTypeParameterConstraint( + type, + /*omitTypeReferences*/ + true + ); + if (!(inferredConstraint && isTypeIdenticalTo(constraint, inferredConstraint))) { + context.approximateLength += 9; + constraintNode = constraint && typeToTypeNodeHelper(constraint, context); + } + } + return factory.createInferTypeNode(typeParameterToDeclarationWithConstraint(type, context, constraintNode)); + } + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && type.flags & 262144 /* TypeParameter */) { + const name2 = typeParameterToName(type, context); + context.approximateLength += idText(name2).length; + return factory.createTypeReferenceNode( + factory.createIdentifier(idText(name2)), + /*typeArguments*/ + void 0 + ); + } + if (objectFlags & 3 /* ClassOrInterface */ && shouldExpandType(type, context)) { + context.depth += 1; + return createAnonymousTypeNode( + type, + /*forceClassExpansion*/ + true, + /*forceExpansion*/ + true + ); + } + if (type.symbol) { + return symbolToTypeNode(type.symbol, context, 788968 /* Type */); + } + const name = (type === markerSuperTypeForCheck || type === markerSubTypeForCheck) && varianceTypeParameter && varianceTypeParameter.symbol ? (type === markerSubTypeForCheck ? "sub-" : "super-") + symbolName(varianceTypeParameter.symbol) : "?"; + return factory.createTypeReferenceNode( + factory.createIdentifier(name), + /*typeArguments*/ + void 0 + ); + } + if (type.flags & 1048576 /* Union */ && type.origin) { + type = type.origin; + } + if (type.flags & (1048576 /* Union */ | 2097152 /* Intersection */)) { + const types = type.flags & 1048576 /* Union */ ? formatUnionTypes(type.types, expandingEnum) : type.types; + if (length(types) === 1) { + return typeToTypeNodeHelper(types[0], context); + } + const typeNodes = mapToTypeNodes( + types, + context, + /*isBareList*/ + true + ); + if (typeNodes && typeNodes.length > 0) { + return type.flags & 1048576 /* Union */ ? factory.createUnionTypeNode(typeNodes) : factory.createIntersectionTypeNode(typeNodes); + } else { + if (!context.encounteredError && !(context.flags & 262144 /* AllowEmptyUnionOrIntersection */)) { + context.encounteredError = true; + } + return void 0; + } + } + if (objectFlags & (16 /* Anonymous */ | 32 /* Mapped */)) { + Debug.assert(!!(type.flags & 524288 /* Object */)); + return createAnonymousTypeNode(type); + } + if (type.flags & 4194304 /* Index */) { + const indexedType = type.type; + context.approximateLength += 6; + const indexTypeNode = typeToTypeNodeHelper(indexedType, context); + return factory.createTypeOperatorNode(143 /* KeyOfKeyword */, indexTypeNode); + } + if (type.flags & 134217728 /* TemplateLiteral */) { + const texts = type.texts; + const types = type.types; + const templateHead = factory.createTemplateHead(texts[0]); + const templateSpans = factory.createNodeArray( + map(types, (t, i) => factory.createTemplateLiteralTypeSpan( + typeToTypeNodeHelper(t, context), + (i < types.length - 1 ? factory.createTemplateMiddle : factory.createTemplateTail)(texts[i + 1]) + )) + ); + context.approximateLength += 2; + return factory.createTemplateLiteralType(templateHead, templateSpans); + } + if (type.flags & 268435456 /* StringMapping */) { + const typeNode = typeToTypeNodeHelper(type.type, context); + return symbolToTypeNode(type.symbol, context, 788968 /* Type */, [typeNode]); + } + if (type.flags & 8388608 /* IndexedAccess */) { + const objectTypeNode = typeToTypeNodeHelper(type.objectType, context); + const indexTypeNode = typeToTypeNodeHelper(type.indexType, context); + context.approximateLength += 2; + return factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode); + } + if (type.flags & 16777216 /* Conditional */) { + return visitAndTransformType(type, (type2) => conditionalTypeToTypeNode(type2)); + } + if (type.flags & 33554432 /* Substitution */) { + const typeNode = typeToTypeNodeHelper(type.baseType, context); + const noInferSymbol = isNoInferType(type) && getGlobalTypeSymbol( + "NoInfer", + /*reportErrors*/ + false + ); + return noInferSymbol ? symbolToTypeNode(noInferSymbol, context, 788968 /* Type */, [typeNode]) : typeNode; + } + return Debug.fail("Should be unreachable."); + function conditionalTypeToTypeNode(type2) { + const checkTypeNode = typeToTypeNodeHelper(type2.checkType, context); + context.approximateLength += 15; + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && type2.root.isDistributive && !(type2.checkType.flags & 262144 /* TypeParameter */)) { + const newParam = createTypeParameter(createSymbol(262144 /* TypeParameter */, "T")); + const name = typeParameterToName(newParam, context); + const newTypeVariable = factory.createTypeReferenceNode(name); + context.approximateLength += 37; + const newMapper = prependTypeMapping(type2.root.checkType, newParam, type2.mapper); + const saveInferTypeParameters2 = context.inferTypeParameters; + context.inferTypeParameters = type2.root.inferTypeParameters; + const extendsTypeNode2 = typeToTypeNodeHelper(instantiateType(type2.root.extendsType, newMapper), context); + context.inferTypeParameters = saveInferTypeParameters2; + const trueTypeNode2 = typeToTypeNodeOrCircularityElision(instantiateType(getTypeFromTypeNode2(context, type2.root.node.trueType), newMapper)); + const falseTypeNode2 = typeToTypeNodeOrCircularityElision(instantiateType(getTypeFromTypeNode2(context, type2.root.node.falseType), newMapper)); + return factory.createConditionalTypeNode( + checkTypeNode, + factory.createInferTypeNode(factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + factory.cloneNode(newTypeVariable.typeName) + )), + factory.createConditionalTypeNode( + factory.createTypeReferenceNode(factory.cloneNode(name)), + typeToTypeNodeHelper(type2.checkType, context), + factory.createConditionalTypeNode(newTypeVariable, extendsTypeNode2, trueTypeNode2, falseTypeNode2), + factory.createKeywordTypeNode(146 /* NeverKeyword */) + ), + factory.createKeywordTypeNode(146 /* NeverKeyword */) + ); + } + const saveInferTypeParameters = context.inferTypeParameters; + context.inferTypeParameters = type2.root.inferTypeParameters; + const extendsTypeNode = typeToTypeNodeHelper(type2.extendsType, context); + context.inferTypeParameters = saveInferTypeParameters; + const trueTypeNode = typeToTypeNodeOrCircularityElision(getTrueTypeFromConditionalType(type2)); + const falseTypeNode = typeToTypeNodeOrCircularityElision(getFalseTypeFromConditionalType(type2)); + return factory.createConditionalTypeNode(checkTypeNode, extendsTypeNode, trueTypeNode, falseTypeNode); + } + function typeToTypeNodeOrCircularityElision(type2) { + var _a2, _b2, _c; + if (type2.flags & 1048576 /* Union */) { + if ((_a2 = context.visitedTypes) == null ? void 0 : _a2.has(getTypeId(type2))) { + if (!(context.flags & 131072 /* AllowAnonymousIdentifier */)) { + context.encounteredError = true; + (_c = (_b2 = context.tracker) == null ? void 0 : _b2.reportCyclicStructureError) == null ? void 0 : _c.call(_b2); + } + return createElidedInformationPlaceholder(context); + } + return visitAndTransformType(type2, (type3) => typeToTypeNodeHelper(type3, context)); + } + return typeToTypeNodeHelper(type2, context); + } + function isMappedTypeHomomorphic(type2) { + return !!getHomomorphicTypeVariable(type2); + } + function isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type2) { + return !!type2.target && isMappedTypeHomomorphic(type2.target) && !isMappedTypeHomomorphic(type2); + } + function createMappedTypeNodeFromType(type2) { + var _a2; + Debug.assert(!!(type2.flags & 524288 /* Object */)); + const readonlyToken = type2.declaration.readonlyToken ? factory.createToken(type2.declaration.readonlyToken.kind) : void 0; + const questionToken = type2.declaration.questionToken ? factory.createToken(type2.declaration.questionToken.kind) : void 0; + let appropriateConstraintTypeNode; + let newTypeVariable; + let templateType = getTemplateTypeFromMappedType(type2); + const typeParameter = getTypeParameterFromMappedType(type2); + const needsModifierPreservingWrapper = !isMappedTypeWithKeyofConstraintDeclaration(type2) && !(getModifiersTypeFromMappedType(type2).flags & 2 /* Unknown */) && context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && !(getConstraintTypeFromMappedType(type2).flags & 262144 /* TypeParameter */ && ((_a2 = getConstraintOfTypeParameter(getConstraintTypeFromMappedType(type2))) == null ? void 0 : _a2.flags) & 4194304 /* Index */); + if (isMappedTypeWithKeyofConstraintDeclaration(type2)) { + if (isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type2) && context.flags & 4 /* GenerateNamesForShadowedTypeParams */) { + const newConstraintParam = createTypeParameter(createSymbol(262144 /* TypeParameter */, "T")); + const name = typeParameterToName(newConstraintParam, context); + const target = type2.target; + newTypeVariable = factory.createTypeReferenceNode(name); + templateType = instantiateType( + getTemplateTypeFromMappedType(target), + makeArrayTypeMapper([getTypeParameterFromMappedType(target), getModifiersTypeFromMappedType(target)], [typeParameter, newConstraintParam]) + ); + } + appropriateConstraintTypeNode = factory.createTypeOperatorNode(143 /* KeyOfKeyword */, newTypeVariable || typeToTypeNodeHelper(getModifiersTypeFromMappedType(type2), context)); + } else if (needsModifierPreservingWrapper) { + const newParam = createTypeParameter(createSymbol(262144 /* TypeParameter */, "T")); + const name = typeParameterToName(newParam, context); + newTypeVariable = factory.createTypeReferenceNode(name); + appropriateConstraintTypeNode = newTypeVariable; + } else { + appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type2), context); + } + const typeParameterNode = typeParameterToDeclarationWithConstraint(typeParameter, context, appropriateConstraintTypeNode); + const cleanup = enterNewScope( + context, + type2.declaration, + /*expandedParams*/ + void 0, + [getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(type2.declaration.typeParameter))] + ); + const nameTypeNode = type2.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type2), context) : void 0; + const templateTypeNode = typeToTypeNodeHelper(removeMissingType(templateType, !!(getMappedTypeModifiers(type2) & 4 /* IncludeOptional */)), context); + cleanup(); + const mappedTypeNode = factory.createMappedTypeNode( + readonlyToken, + typeParameterNode, + nameTypeNode, + questionToken, + templateTypeNode, + /*members*/ + void 0 + ); + context.approximateLength += 10; + const result = setEmitFlags(mappedTypeNode, 1 /* SingleLine */); + if (isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type2) && context.flags & 4 /* GenerateNamesForShadowedTypeParams */) { + const originalConstraint = instantiateType(getConstraintOfTypeParameter(getTypeFromTypeNode2(context, type2.declaration.typeParameter.constraint.type)) || unknownType, type2.mapper); + return factory.createConditionalTypeNode( + typeToTypeNodeHelper(getModifiersTypeFromMappedType(type2), context), + factory.createInferTypeNode(factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + factory.cloneNode(newTypeVariable.typeName), + originalConstraint.flags & 2 /* Unknown */ ? void 0 : typeToTypeNodeHelper(originalConstraint, context) + )), + result, + factory.createKeywordTypeNode(146 /* NeverKeyword */) + ); + } else if (needsModifierPreservingWrapper) { + return factory.createConditionalTypeNode( + typeToTypeNodeHelper(getConstraintTypeFromMappedType(type2), context), + factory.createInferTypeNode(factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + factory.cloneNode(newTypeVariable.typeName), + factory.createTypeOperatorNode(143 /* KeyOfKeyword */, typeToTypeNodeHelper(getModifiersTypeFromMappedType(type2), context)) + )), + result, + factory.createKeywordTypeNode(146 /* NeverKeyword */) + ); + } + return result; + } + function createAnonymousTypeNode(type2, forceClassExpansion = false, forceExpansion = false) { + var _a2, _b2; + const typeId = type2.id; + const symbol = type2.symbol; + if (symbol) { + const isInstantiationExpressionType = !!(getObjectFlags(type2) & 8388608 /* InstantiationExpressionType */); + if (isInstantiationExpressionType) { + const instantiationExpressionType = type2; + const existing = instantiationExpressionType.node; + if (isTypeQueryNode(existing) && getTypeFromTypeNode2(context, existing) === type2) { + const typeNode = syntacticNodeBuilder.tryReuseExistingTypeNode(context, existing); + if (typeNode) { + return typeNode; + } + } + if ((_a2 = context.visitedTypes) == null ? void 0 : _a2.has(typeId)) { + return createElidedInformationPlaceholder(context); + } + return visitAndTransformType(type2, createTypeNodeFromObjectType); + } + const isInstanceType = isClassInstanceSide(type2) ? 788968 /* Type */ : 111551 /* Value */; + if (isJSConstructor(symbol.valueDeclaration)) { + return symbolToTypeNode(symbol, context, isInstanceType); + } else if (!forceExpansion && (symbol.flags & 32 /* Class */ && !forceClassExpansion && !getBaseTypeVariableOfClass(symbol) && !(symbol.valueDeclaration && isClassLike(symbol.valueDeclaration) && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ && (!isClassDeclaration(symbol.valueDeclaration) || isSymbolAccessible( + symbol, + context.enclosingDeclaration, + isInstanceType, + /*shouldComputeAliasesToMakeVisible*/ + false + ).accessibility !== 0 /* Accessible */)) || symbol.flags & (384 /* Enum */ | 512 /* ValueModule */) || shouldWriteTypeOfFunctionSymbol())) { + if (shouldExpandType(type2, context)) { + context.depth += 1; + } else { + return symbolToTypeNode(symbol, context, isInstanceType); + } + } + if ((_b2 = context.visitedTypes) == null ? void 0 : _b2.has(typeId)) { + const typeAlias = getTypeAliasForTypeLiteral(type2); + if (typeAlias) { + return symbolToTypeNode(typeAlias, context, 788968 /* Type */); + } else { + return createElidedInformationPlaceholder(context); + } + } else { + return visitAndTransformType(type2, createTypeNodeFromObjectType); + } + } else { + return createTypeNodeFromObjectType(type2); + } + function shouldWriteTypeOfFunctionSymbol() { + var _a3; + const isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method + some(symbol.declarations, (declaration) => isStatic(declaration) && !isLateBindableIndexSignature(getNameOfDeclaration(declaration))); + const isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) && (symbol.parent || // is exported function symbol + forEach(symbol.declarations, (declaration) => declaration.parent.kind === 308 /* SourceFile */ || declaration.parent.kind === 269 /* ModuleBlock */)); + if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { + return (!!(context.flags & 4096 /* UseTypeOfFunction */) || ((_a3 = context.visitedTypes) == null ? void 0 : _a3.has(typeId))) && // it is type of the symbol uses itself recursively + (!(context.flags & 8 /* UseStructuralFallback */) || isValueSymbolAccessible(symbol, context.enclosingDeclaration)); + } + } + } + function visitAndTransformType(type2, transform2) { + var _a2, _b2, _c; + const typeId = type2.id; + const isConstructorObject = getObjectFlags(type2) & 16 /* Anonymous */ && type2.symbol && type2.symbol.flags & 32 /* Class */; + const id = getObjectFlags(type2) & 4 /* Reference */ && type2.node ? "N" + getNodeId(type2.node) : type2.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type2.root.node) : type2.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type2.symbol) : void 0; + if (!context.visitedTypes) { + context.visitedTypes = /* @__PURE__ */ new Set(); + } + if (id && !context.symbolDepth) { + context.symbolDepth = /* @__PURE__ */ new Map(); + } + const links = context.maxExpansionDepth >= 0 ? void 0 : context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration); + const key = `${getTypeId(type2)}|${context.flags}|${context.internalFlags}`; + if (links) { + links.serializedTypes || (links.serializedTypes = /* @__PURE__ */ new Map()); + } + const cachedResult = (_a2 = links == null ? void 0 : links.serializedTypes) == null ? void 0 : _a2.get(key); + if (cachedResult) { + (_b2 = cachedResult.trackedSymbols) == null ? void 0 : _b2.forEach( + ([symbol, enclosingDeclaration, meaning]) => context.tracker.trackSymbol( + symbol, + enclosingDeclaration, + meaning + ) + ); + if (cachedResult.truncating) { + context.truncating = true; + } + context.approximateLength += cachedResult.addedLength; + return deepCloneOrReuseNode(cachedResult.node); + } + let depth; + if (id) { + depth = context.symbolDepth.get(id) || 0; + if (depth > 10) { + return createElidedInformationPlaceholder(context); + } + context.symbolDepth.set(id, depth + 1); + } + context.visitedTypes.add(typeId); + const prevTrackedSymbols = context.trackedSymbols; + context.trackedSymbols = void 0; + const startLength = context.approximateLength; + const result = transform2(type2); + const addedLength = context.approximateLength - startLength; + if (!context.reportedDiagnostic && !context.encounteredError) { + (_c = links == null ? void 0 : links.serializedTypes) == null ? void 0 : _c.set(key, { + node: result, + truncating: context.truncating, + addedLength, + trackedSymbols: context.trackedSymbols + }); + } + context.visitedTypes.delete(typeId); + if (id) { + context.symbolDepth.set(id, depth); + } + context.trackedSymbols = prevTrackedSymbols; + return result; + function deepCloneOrReuseNode(node) { + if (!nodeIsSynthesized(node) && getParseTreeNode(node) === node) { + return node; + } + return setTextRange2(context, factory.cloneNode(visitEachChild( + node, + deepCloneOrReuseNode, + /*context*/ + void 0, + deepCloneOrReuseNodes, + deepCloneOrReuseNode + )), node); + } + function deepCloneOrReuseNodes(nodes, visitor, test, start, count) { + if (nodes && nodes.length === 0) { + return setTextRange(factory.createNodeArray( + /*elements*/ + void 0, + nodes.hasTrailingComma + ), nodes); + } + return visitNodes2(nodes, visitor, test, start, count); + } + } + function createTypeNodeFromObjectType(type2) { + if (isGenericMappedType(type2) || type2.containsError) { + return createMappedTypeNodeFromType(type2); + } + const resolved = resolveStructuredTypeMembers(type2); + if (!resolved.properties.length && !resolved.indexInfos.length) { + if (!resolved.callSignatures.length && !resolved.constructSignatures.length) { + context.approximateLength += 2; + return setEmitFlags(factory.createTypeLiteralNode( + /*members*/ + void 0 + ), 1 /* SingleLine */); + } + if (resolved.callSignatures.length === 1 && !resolved.constructSignatures.length) { + const signature = resolved.callSignatures[0]; + const signatureNode = signatureToSignatureDeclarationHelper(signature, 185 /* FunctionType */, context); + return signatureNode; + } + if (resolved.constructSignatures.length === 1 && !resolved.callSignatures.length) { + const signature = resolved.constructSignatures[0]; + const signatureNode = signatureToSignatureDeclarationHelper(signature, 186 /* ConstructorType */, context); + return signatureNode; + } + } + const abstractSignatures = filter(resolved.constructSignatures, (signature) => !!(signature.flags & 4 /* Abstract */)); + if (some(abstractSignatures)) { + const types = map(abstractSignatures, getOrCreateTypeFromSignature); + const typeElementCount = resolved.callSignatures.length + (resolved.constructSignatures.length - abstractSignatures.length) + resolved.indexInfos.length + // exclude `prototype` when writing a class expression as a type literal, as per + // the logic in `createTypeNodesFromResolvedType`. + (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ ? countWhere(resolved.properties, (p) => !(p.flags & 4194304 /* Prototype */)) : length(resolved.properties)); + if (typeElementCount) { + types.push(getResolvedTypeWithoutAbstractConstructSignatures(resolved)); + } + return typeToTypeNodeHelper(getIntersectionType(types), context); + } + const restoreFlags = saveRestoreFlags(context); + context.flags |= 4194304 /* InObjectTypeLiteral */; + const members = createTypeNodesFromResolvedType(resolved); + restoreFlags(); + const typeLiteralNode = factory.createTypeLiteralNode(members); + context.approximateLength += 2; + setEmitFlags(typeLiteralNode, context.flags & 1024 /* MultilineObjectLiterals */ ? 0 : 1 /* SingleLine */); + return typeLiteralNode; + } + function typeReferenceToTypeNode(type2) { + let typeArguments = getTypeArguments(type2); + if (type2.target === globalArrayType || type2.target === globalReadonlyArrayType) { + if (context.flags & 2 /* WriteArrayAsGenericType */) { + const typeArgumentNode = typeToTypeNodeHelper(typeArguments[0], context); + return factory.createTypeReferenceNode(type2.target === globalArrayType ? "Array" : "ReadonlyArray", [typeArgumentNode]); + } + const elementType = typeToTypeNodeHelper(typeArguments[0], context); + const arrayType = factory.createArrayTypeNode(elementType); + return type2.target === globalArrayType ? arrayType : factory.createTypeOperatorNode(148 /* ReadonlyKeyword */, arrayType); + } else if (type2.target.objectFlags & 8 /* Tuple */) { + typeArguments = sameMap(typeArguments, (t, i) => removeMissingType(t, !!(type2.target.elementFlags[i] & 2 /* Optional */))); + if (typeArguments.length > 0) { + const arity = getTypeReferenceArity(type2); + const tupleConstituentNodes = mapToTypeNodes(typeArguments.slice(0, arity), context); + if (tupleConstituentNodes) { + const { labeledElementDeclarations } = type2.target; + for (let i = 0; i < tupleConstituentNodes.length; i++) { + const flags = type2.target.elementFlags[i]; + const labeledElementDeclaration = labeledElementDeclarations == null ? void 0 : labeledElementDeclarations[i]; + if (labeledElementDeclaration) { + tupleConstituentNodes[i] = factory.createNamedTupleMember( + flags & 12 /* Variable */ ? factory.createToken(26 /* DotDotDotToken */) : void 0, + factory.createIdentifier(unescapeLeadingUnderscores(getTupleElementLabel(labeledElementDeclaration))), + flags & 2 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0, + flags & 4 /* Rest */ ? factory.createArrayTypeNode(tupleConstituentNodes[i]) : tupleConstituentNodes[i] + ); + } else { + tupleConstituentNodes[i] = flags & 12 /* Variable */ ? factory.createRestTypeNode(flags & 4 /* Rest */ ? factory.createArrayTypeNode(tupleConstituentNodes[i]) : tupleConstituentNodes[i]) : flags & 2 /* Optional */ ? factory.createOptionalTypeNode(tupleConstituentNodes[i]) : tupleConstituentNodes[i]; + } + } + const tupleTypeNode = setEmitFlags(factory.createTupleTypeNode(tupleConstituentNodes), 1 /* SingleLine */); + return type2.target.readonly ? factory.createTypeOperatorNode(148 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode; + } + } + if (context.encounteredError || context.flags & 524288 /* AllowEmptyTuple */) { + const tupleTypeNode = setEmitFlags(factory.createTupleTypeNode([]), 1 /* SingleLine */); + return type2.target.readonly ? factory.createTypeOperatorNode(148 /* ReadonlyKeyword */, tupleTypeNode) : tupleTypeNode; + } + context.encounteredError = true; + return void 0; + } else if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ && type2.symbol.valueDeclaration && isClassLike(type2.symbol.valueDeclaration) && !isValueSymbolAccessible(type2.symbol, context.enclosingDeclaration)) { + return createAnonymousTypeNode(type2); + } else { + const outerTypeParameters = type2.target.outerTypeParameters; + let i = 0; + let resultType; + if (outerTypeParameters) { + const length2 = outerTypeParameters.length; + while (i < length2) { + const start = i; + const parent2 = getParentSymbolOfTypeParameter(outerTypeParameters[i]); + do { + i++; + } while (i < length2 && getParentSymbolOfTypeParameter(outerTypeParameters[i]) === parent2); + if (!rangeEquals(outerTypeParameters, typeArguments, start, i)) { + const typeArgumentSlice = mapToTypeNodes(typeArguments.slice(start, i), context); + const restoreFlags2 = saveRestoreFlags(context); + context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; + const ref = symbolToTypeNode(parent2, context, 788968 /* Type */, typeArgumentSlice); + restoreFlags2(); + resultType = !resultType ? ref : appendReferenceToType(resultType, ref); + } + } + } + let typeArgumentNodes; + if (typeArguments.length > 0) { + let typeParameterCount = 0; + if (type2.target.typeParameters) { + typeParameterCount = Math.min(type2.target.typeParameters.length, typeArguments.length); + if (isReferenceToType2(type2, getGlobalIterableType( + /*reportErrors*/ + false + )) || isReferenceToType2(type2, getGlobalIterableIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType2(type2, getGlobalAsyncIterableType( + /*reportErrors*/ + false + )) || isReferenceToType2(type2, getGlobalAsyncIterableIteratorType( + /*reportErrors*/ + false + ))) { + if (!type2.node || !isTypeReferenceNode(type2.node) || !type2.node.typeArguments || type2.node.typeArguments.length < typeParameterCount) { + while (typeParameterCount > 0) { + const typeArgument = typeArguments[typeParameterCount - 1]; + const typeParameter = type2.target.typeParameters[typeParameterCount - 1]; + const defaultType = getDefaultFromTypeParameter(typeParameter); + if (!defaultType || !isTypeIdenticalTo(typeArgument, defaultType)) { + break; + } + typeParameterCount--; + } + } + } + } + typeArgumentNodes = mapToTypeNodes(typeArguments.slice(i, typeParameterCount), context); + } + const restoreFlags = saveRestoreFlags(context); + context.flags |= 16 /* ForbidIndexedAccessSymbolReferences */; + const finalRef = symbolToTypeNode(type2.symbol, context, 788968 /* Type */, typeArgumentNodes); + restoreFlags(); + return !resultType ? finalRef : appendReferenceToType(resultType, finalRef); + } + } + function appendReferenceToType(root, ref) { + if (isImportTypeNode(root)) { + let typeArguments = root.typeArguments; + let qualifier = root.qualifier; + if (qualifier) { + if (isIdentifier(qualifier)) { + if (typeArguments !== getIdentifierTypeArguments(qualifier)) { + qualifier = setIdentifierTypeArguments(factory.cloneNode(qualifier), typeArguments); + } + } else { + if (typeArguments !== getIdentifierTypeArguments(qualifier.right)) { + qualifier = factory.updateQualifiedName(qualifier, qualifier.left, setIdentifierTypeArguments(factory.cloneNode(qualifier.right), typeArguments)); + } + } + } + typeArguments = ref.typeArguments; + const ids = getAccessStack(ref); + for (const id of ids) { + qualifier = qualifier ? factory.createQualifiedName(qualifier, id) : id; + } + return factory.updateImportTypeNode( + root, + root.argument, + root.attributes, + qualifier, + typeArguments, + root.isTypeOf + ); + } else { + let typeArguments = root.typeArguments; + let typeName = root.typeName; + if (isIdentifier(typeName)) { + if (typeArguments !== getIdentifierTypeArguments(typeName)) { + typeName = setIdentifierTypeArguments(factory.cloneNode(typeName), typeArguments); + } + } else { + if (typeArguments !== getIdentifierTypeArguments(typeName.right)) { + typeName = factory.updateQualifiedName(typeName, typeName.left, setIdentifierTypeArguments(factory.cloneNode(typeName.right), typeArguments)); + } + } + typeArguments = ref.typeArguments; + const ids = getAccessStack(ref); + for (const id of ids) { + typeName = factory.createQualifiedName(typeName, id); + } + return factory.updateTypeReferenceNode( + root, + typeName, + typeArguments + ); + } + } + function getAccessStack(ref) { + let state = ref.typeName; + const ids = []; + while (!isIdentifier(state)) { + ids.unshift(state.right); + state = state.left; + } + ids.unshift(state); + return ids; + } + function indexInfoToObjectComputedNamesOrSignatureDeclaration(indexInfo, context2, typeNode) { + if (indexInfo.components) { + const allComponentComputedNamesSerializable = every(indexInfo.components, (e) => { + var _a2; + return !!(e.name && isComputedPropertyName(e.name) && isEntityNameExpression(e.name.expression) && context2.enclosingDeclaration && ((_a2 = isEntityNameVisible( + e.name.expression, + context2.enclosingDeclaration, + /*shouldComputeAliasToMakeVisible*/ + false + )) == null ? void 0 : _a2.accessibility) === 0 /* Accessible */); + }); + if (allComponentComputedNamesSerializable) { + const newComponents = filter(indexInfo.components, (e) => { + return !hasLateBindableName(e); + }); + return map(newComponents, (e) => { + trackComputedName(e.name.expression, context2.enclosingDeclaration, context2); + return setTextRange2( + context2, + factory.createPropertySignature( + indexInfo.isReadonly ? [factory.createModifier(148 /* ReadonlyKeyword */)] : void 0, + e.name, + (isPropertySignature(e) || isPropertyDeclaration(e) || isMethodSignature(e) || isMethodDeclaration(e) || isGetAccessor(e) || isSetAccessor(e)) && e.questionToken ? factory.createToken(58 /* QuestionToken */) : void 0, + typeNode || typeToTypeNodeHelper(getTypeOfSymbol(e.symbol), context2) + ), + e + ); + }); + } + } + return [indexInfoToIndexSignatureDeclarationHelper(indexInfo, context2, typeNode)]; + } + function createTypeNodesFromResolvedType(resolvedType) { + if (checkTruncationLength(context)) { + context.out.truncated = true; + if (context.flags & 1 /* NoTruncation */) { + return [addSyntheticTrailingComment(factory.createNotEmittedTypeElement(), 3 /* MultiLineCommentTrivia */, "elided")]; + } + return [factory.createPropertySignature( + /*modifiers*/ + void 0, + "...", + /*questionToken*/ + void 0, + /*type*/ + void 0 + )]; + } + context.typeStack.push(-1); + const typeElements = []; + for (const signature of resolvedType.callSignatures) { + typeElements.push(signatureToSignatureDeclarationHelper(signature, 180 /* CallSignature */, context)); + } + for (const signature of resolvedType.constructSignatures) { + if (signature.flags & 4 /* Abstract */) continue; + typeElements.push(signatureToSignatureDeclarationHelper(signature, 181 /* ConstructSignature */, context)); + } + for (const info of resolvedType.indexInfos) { + typeElements.push(...indexInfoToObjectComputedNamesOrSignatureDeclaration(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : void 0)); + } + const properties = resolvedType.properties; + if (!properties) { + context.typeStack.pop(); + return typeElements; + } + let i = 0; + for (const propertySymbol of properties) { + if (isExpanding(context) && propertySymbol.flags & 4194304 /* Prototype */) { + continue; + } + i++; + if (context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */) { + if (propertySymbol.flags & 4194304 /* Prototype */) { + continue; + } + if (getDeclarationModifierFlagsFromSymbol(propertySymbol) & (2 /* Private */ | 4 /* Protected */) && context.tracker.reportPrivateInBaseOfClassExpression) { + context.tracker.reportPrivateInBaseOfClassExpression(unescapeLeadingUnderscores(propertySymbol.escapedName)); + } + } + if (checkTruncationLength(context) && i + 2 < properties.length - 1) { + context.out.truncated = true; + if (context.flags & 1 /* NoTruncation */) { + const typeElement = typeElements.pop(); + typeElements.push(addSyntheticTrailingComment(typeElement, 3 /* MultiLineCommentTrivia */, `... ${properties.length - i} more elided ...`)); + } else { + typeElements.push(factory.createPropertySignature( + /*modifiers*/ + void 0, + `... ${properties.length - i} more ...`, + /*questionToken*/ + void 0, + /*type*/ + void 0 + )); + } + addPropertyToElementList(properties[properties.length - 1], context, typeElements); + break; + } + addPropertyToElementList(propertySymbol, context, typeElements); + } + context.typeStack.pop(); + return typeElements.length ? typeElements : void 0; + } + } + function createElidedInformationPlaceholder(context) { + context.approximateLength += 3; + if (!(context.flags & 1 /* NoTruncation */)) { + return factory.createTypeReferenceNode( + factory.createIdentifier("..."), + /*typeArguments*/ + void 0 + ); + } + return addSyntheticLeadingComment(factory.createKeywordTypeNode(133 /* AnyKeyword */), 3 /* MultiLineCommentTrivia */, "elided"); + } + function shouldUsePlaceholderForProperty(propertySymbol, context) { + var _a; + const depth = 3; + return !!(getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */) && (contains(context.reverseMappedStack, propertySymbol) || ((_a = context.reverseMappedStack) == null ? void 0 : _a[0]) && !(getObjectFlags(last(context.reverseMappedStack).links.propertyType) & 16 /* Anonymous */) || isDeeplyNestedReverseMappedTypeProperty()); + function isDeeplyNestedReverseMappedTypeProperty() { + var _a2; + if ((((_a2 = context.reverseMappedStack) == null ? void 0 : _a2.length) ?? 0) < depth) { + return false; + } + for (let i = 0; i < depth; i++) { + const prop = context.reverseMappedStack[context.reverseMappedStack.length - 1 - i]; + if (prop.links.mappedType.symbol !== propertySymbol.links.mappedType.symbol) { + return false; + } + } + return true; + } + } + function addPropertyToElementList(propertySymbol, context, typeElements) { + var _a; + const propertyIsReverseMapped = !!(getCheckFlags(propertySymbol) & 8192 /* ReverseMapped */); + const propertyType = shouldUsePlaceholderForProperty(propertySymbol, context) ? anyType : getNonMissingTypeOfSymbol(propertySymbol); + const saveEnclosingDeclaration = context.enclosingDeclaration; + context.enclosingDeclaration = void 0; + if (context.tracker.canTrackSymbol && isLateBoundName(propertySymbol.escapedName)) { + if (propertySymbol.declarations) { + const decl = first(propertySymbol.declarations); + if (hasLateBindableName(decl)) { + if (isBinaryExpression(decl)) { + const name = getNameOfDeclaration(decl); + if (name && isElementAccessExpression(name) && isPropertyAccessEntityNameExpression(name.argumentExpression)) { + trackComputedName(name.argumentExpression, saveEnclosingDeclaration, context); + } + } else { + trackComputedName(decl.name.expression, saveEnclosingDeclaration, context); + } + } + } else { + context.tracker.reportNonSerializableProperty(symbolToString(propertySymbol)); + } + } + context.enclosingDeclaration = propertySymbol.valueDeclaration || ((_a = propertySymbol.declarations) == null ? void 0 : _a[0]) || saveEnclosingDeclaration; + const propertyName = getPropertyNameNodeForSymbol(propertySymbol, context); + context.enclosingDeclaration = saveEnclosingDeclaration; + context.approximateLength += symbolName(propertySymbol).length + 1; + if (propertySymbol.flags & 98304 /* Accessor */) { + const writeType = getWriteTypeOfSymbol(propertySymbol); + if (!isErrorType(propertyType) && !isErrorType(writeType)) { + const symbolMapper = getSymbolLinks(propertySymbol).mapper; + const propDeclaration = getDeclarationOfKind(propertySymbol, 173 /* PropertyDeclaration */); + if (propertyType !== writeType || propertySymbol.parent.flags & 32 /* Class */ && !propDeclaration) { + const getterDeclaration = getDeclarationOfKind(propertySymbol, 178 /* GetAccessor */); + if (getterDeclaration) { + const getterSignature = getSignatureFromDeclaration(getterDeclaration); + typeElements.push( + setCommentRange2( + context, + signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(getterSignature, symbolMapper) : getterSignature, 178 /* GetAccessor */, context, { name: propertyName }), + getterDeclaration + ) + ); + } + const setterDeclaration = getDeclarationOfKind(propertySymbol, 179 /* SetAccessor */); + if (setterDeclaration) { + const setterSignature = getSignatureFromDeclaration(setterDeclaration); + typeElements.push( + setCommentRange2( + context, + signatureToSignatureDeclarationHelper(symbolMapper ? instantiateSignature(setterSignature, symbolMapper) : setterSignature, 179 /* SetAccessor */, context, { name: propertyName }), + setterDeclaration + ) + ); + } + return; + } + if (propertySymbol.parent.flags & 32 /* Class */ && propDeclaration && find(propDeclaration.modifiers, isAccessorModifier)) { + const fakeGetterSignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + propertyType, + /*resolvedTypePredicate*/ + void 0, + 0, + 0 /* None */ + ); + typeElements.push( + setCommentRange2( + context, + signatureToSignatureDeclarationHelper(fakeGetterSignature, 178 /* GetAccessor */, context, { name: propertyName }), + propDeclaration + ) + ); + const setterParam = createSymbol(1 /* FunctionScopedVariable */, "arg"); + setterParam.links.type = writeType; + const fakeSetterSignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [setterParam], + voidType, + /*resolvedTypePredicate*/ + void 0, + 0, + 0 /* None */ + ); + typeElements.push( + signatureToSignatureDeclarationHelper(fakeSetterSignature, 179 /* SetAccessor */, context, { name: propertyName }) + ); + return; + } + } + } + const optionalToken = propertySymbol.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0; + if (propertySymbol.flags & (16 /* Function */ | 8192 /* Method */) && !getPropertiesOfObjectType(propertyType).length && !isReadonlySymbol(propertySymbol)) { + const signatures = getSignaturesOfType(filterType(propertyType, (t) => !(t.flags & 32768 /* Undefined */)), 0 /* Call */); + for (const signature of signatures) { + const methodDeclaration = signatureToSignatureDeclarationHelper(signature, 174 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken }); + typeElements.push(preserveCommentsOn(methodDeclaration, signature.declaration || propertySymbol.valueDeclaration)); + } + if (signatures.length || !optionalToken) { + return; + } + } + let propertyTypeNode; + if (shouldUsePlaceholderForProperty(propertySymbol, context)) { + propertyTypeNode = createElidedInformationPlaceholder(context); + } else { + if (propertyIsReverseMapped) { + context.reverseMappedStack || (context.reverseMappedStack = []); + context.reverseMappedStack.push(propertySymbol); + } + propertyTypeNode = propertyType ? serializeTypeForDeclaration( + context, + /*declaration*/ + void 0, + propertyType, + propertySymbol + ) : factory.createKeywordTypeNode(133 /* AnyKeyword */); + if (propertyIsReverseMapped) { + context.reverseMappedStack.pop(); + } + } + const modifiers = isReadonlySymbol(propertySymbol) ? [factory.createToken(148 /* ReadonlyKeyword */)] : void 0; + if (modifiers) { + context.approximateLength += 9; + } + const propertySignature = factory.createPropertySignature( + modifiers, + propertyName, + optionalToken, + propertyTypeNode + ); + typeElements.push(preserveCommentsOn(propertySignature, propertySymbol.valueDeclaration)); + function preserveCommentsOn(node, range) { + var _a2; + const jsdocPropertyTag = (_a2 = propertySymbol.declarations) == null ? void 0 : _a2.find((d) => d.kind === 349 /* JSDocPropertyTag */); + if (jsdocPropertyTag) { + const commentText = getTextOfJSDocComment(jsdocPropertyTag.comment); + if (commentText) { + setSyntheticLeadingComments(node, [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }]); + } + } else if (range) { + setCommentRange2(context, node, range); + } + return node; + } + } + function setCommentRange2(context, node, range) { + if (context.enclosingFile && context.enclosingFile === getSourceFileOfNode(range)) { + return setCommentRange(node, range); + } + return node; + } + function mapToTypeNodes(types, context, isBareList) { + if (some(types)) { + if (checkTruncationLength(context)) { + context.out.truncated = true; + if (!isBareList) { + return [ + context.flags & 1 /* NoTruncation */ ? addSyntheticLeadingComment(factory.createKeywordTypeNode(133 /* AnyKeyword */), 3 /* MultiLineCommentTrivia */, "elided") : factory.createTypeReferenceNode( + "...", + /*typeArguments*/ + void 0 + ) + ]; + } else if (types.length > 2) { + return [ + typeToTypeNodeHelper(types[0], context), + context.flags & 1 /* NoTruncation */ ? addSyntheticLeadingComment(factory.createKeywordTypeNode(133 /* AnyKeyword */), 3 /* MultiLineCommentTrivia */, `... ${types.length - 2} more elided ...`) : factory.createTypeReferenceNode( + `... ${types.length - 2} more ...`, + /*typeArguments*/ + void 0 + ), + typeToTypeNodeHelper(types[types.length - 1], context) + ]; + } + } + const mayHaveNameCollisions = !(context.flags & 64 /* UseFullyQualifiedType */); + const seenNames = mayHaveNameCollisions ? createMultiMap() : void 0; + const result = []; + let i = 0; + for (const type of types) { + i++; + if (checkTruncationLength(context) && i + 2 < types.length - 1) { + context.out.truncated = true; + result.push( + context.flags & 1 /* NoTruncation */ ? addSyntheticLeadingComment(factory.createKeywordTypeNode(133 /* AnyKeyword */), 3 /* MultiLineCommentTrivia */, `... ${types.length - i} more elided ...`) : factory.createTypeReferenceNode( + `... ${types.length - i} more ...`, + /*typeArguments*/ + void 0 + ) + ); + const typeNode2 = typeToTypeNodeHelper(types[types.length - 1], context); + if (typeNode2) { + result.push(typeNode2); + } + break; + } + context.approximateLength += 2; + const typeNode = typeToTypeNodeHelper(type, context); + if (typeNode) { + result.push(typeNode); + if (seenNames && isIdentifierTypeReference(typeNode)) { + seenNames.add(typeNode.typeName.escapedText, [type, result.length - 1]); + } + } + } + if (seenNames) { + const restoreFlags = saveRestoreFlags(context); + context.flags |= 64 /* UseFullyQualifiedType */; + seenNames.forEach((types2) => { + if (!arrayIsHomogeneous(types2, ([a], [b]) => typesAreSameReference(a, b))) { + for (const [type, resultIndex] of types2) { + result[resultIndex] = typeToTypeNodeHelper(type, context); + } + } + }); + restoreFlags(); + } + return result; + } + } + function typesAreSameReference(a, b) { + return a === b || !!a.symbol && a.symbol === b.symbol || !!a.aliasSymbol && a.aliasSymbol === b.aliasSymbol; + } + function indexInfoToIndexSignatureDeclarationHelper(indexInfo, context, typeNode) { + const name = getNameFromIndexInfo(indexInfo) || "x"; + const indexerTypeNode = typeToTypeNodeHelper(indexInfo.keyType, context); + const indexingParameter = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + name, + /*questionToken*/ + void 0, + indexerTypeNode, + /*initializer*/ + void 0 + ); + if (!typeNode) { + typeNode = typeToTypeNodeHelper(indexInfo.type || anyType, context); + } + if (!indexInfo.type && !(context.flags & 2097152 /* AllowEmptyIndexInfoType */)) { + context.encounteredError = true; + } + context.approximateLength += name.length + 4; + return factory.createIndexSignature( + indexInfo.isReadonly ? [factory.createToken(148 /* ReadonlyKeyword */)] : void 0, + [indexingParameter], + typeNode + ); + } + function signatureToSignatureDeclarationHelper(signature, kind, context, options) { + var _a; + let typeParameters; + let typeArguments; + const expandedParams = getExpandedParameters( + signature, + /*skipUnionExpanding*/ + true + )[0]; + const cleanup = enterNewScope(context, signature.declaration, expandedParams, signature.typeParameters, signature.parameters, signature.mapper); + context.approximateLength += 3; + if (context.flags & 32 /* WriteTypeArgumentsOfSignature */ && signature.target && signature.mapper && signature.target.typeParameters) { + typeArguments = signature.target.typeParameters.map((parameter) => typeToTypeNodeHelper(instantiateType(parameter, signature.mapper), context)); + } else { + typeParameters = signature.typeParameters && signature.typeParameters.map((parameter) => typeParameterToDeclaration(parameter, context)); + } + const restoreFlags = saveRestoreFlags(context); + context.flags &= ~256 /* SuppressAnyReturnType */; + const parameters = (some(expandedParams, (p) => p !== expandedParams[expandedParams.length - 1] && !!(getCheckFlags(p) & 32768 /* RestParameter */)) ? signature.parameters : expandedParams).map((parameter) => symbolToParameterDeclaration(parameter, context, kind === 177 /* Constructor */)); + const thisParameter = context.flags & 33554432 /* OmitThisParameter */ ? void 0 : tryGetThisParameterDeclaration(signature, context); + if (thisParameter) { + parameters.unshift(thisParameter); + } + restoreFlags(); + const returnTypeNode = serializeReturnTypeForSignature(context, signature); + let modifiers = options == null ? void 0 : options.modifiers; + if (kind === 186 /* ConstructorType */ && signature.flags & 4 /* Abstract */) { + const flags = modifiersToFlags(modifiers); + modifiers = factory.createModifiersFromModifierFlags(flags | 64 /* Abstract */); + } + const node = kind === 180 /* CallSignature */ ? factory.createCallSignature(typeParameters, parameters, returnTypeNode) : kind === 181 /* ConstructSignature */ ? factory.createConstructSignature(typeParameters, parameters, returnTypeNode) : kind === 174 /* MethodSignature */ ? factory.createMethodSignature(modifiers, (options == null ? void 0 : options.name) ?? factory.createIdentifier(""), options == null ? void 0 : options.questionToken, typeParameters, parameters, returnTypeNode) : kind === 175 /* MethodDeclaration */ ? factory.createMethodDeclaration( + modifiers, + /*asteriskToken*/ + void 0, + (options == null ? void 0 : options.name) ?? factory.createIdentifier(""), + /*questionToken*/ + void 0, + typeParameters, + parameters, + returnTypeNode, + /*body*/ + void 0 + ) : kind === 177 /* Constructor */ ? factory.createConstructorDeclaration( + modifiers, + parameters, + /*body*/ + void 0 + ) : kind === 178 /* GetAccessor */ ? factory.createGetAccessorDeclaration( + modifiers, + (options == null ? void 0 : options.name) ?? factory.createIdentifier(""), + parameters, + returnTypeNode, + /*body*/ + void 0 + ) : kind === 179 /* SetAccessor */ ? factory.createSetAccessorDeclaration( + modifiers, + (options == null ? void 0 : options.name) ?? factory.createIdentifier(""), + parameters, + /*body*/ + void 0 + ) : kind === 182 /* IndexSignature */ ? factory.createIndexSignature(modifiers, parameters, returnTypeNode) : kind === 318 /* JSDocFunctionType */ ? factory.createJSDocFunctionType(parameters, returnTypeNode) : kind === 185 /* FunctionType */ ? factory.createFunctionTypeNode(typeParameters, parameters, returnTypeNode ?? factory.createTypeReferenceNode(factory.createIdentifier(""))) : kind === 186 /* ConstructorType */ ? factory.createConstructorTypeNode(modifiers, typeParameters, parameters, returnTypeNode ?? factory.createTypeReferenceNode(factory.createIdentifier(""))) : kind === 263 /* FunctionDeclaration */ ? factory.createFunctionDeclaration( + modifiers, + /*asteriskToken*/ + void 0, + (options == null ? void 0 : options.name) ? cast(options.name, isIdentifier) : factory.createIdentifier(""), + typeParameters, + parameters, + returnTypeNode, + /*body*/ + void 0 + ) : kind === 219 /* FunctionExpression */ ? factory.createFunctionExpression( + modifiers, + /*asteriskToken*/ + void 0, + (options == null ? void 0 : options.name) ? cast(options.name, isIdentifier) : factory.createIdentifier(""), + typeParameters, + parameters, + returnTypeNode, + factory.createBlock([]) + ) : kind === 220 /* ArrowFunction */ ? factory.createArrowFunction( + modifiers, + typeParameters, + parameters, + returnTypeNode, + /*equalsGreaterThanToken*/ + void 0, + factory.createBlock([]) + ) : Debug.assertNever(kind); + if (typeArguments) { + node.typeArguments = factory.createNodeArray(typeArguments); + } + if (((_a = signature.declaration) == null ? void 0 : _a.kind) === 324 /* JSDocSignature */ && signature.declaration.parent.kind === 340 /* JSDocOverloadTag */) { + const comment = getTextOfNode( + signature.declaration.parent.parent, + /*includeTrivia*/ + true + ).slice(2, -2).split(/\r\n|\n|\r/).map((line) => line.replace(/^\s+/, " ")).join("\n"); + addSyntheticLeadingComment( + node, + 3 /* MultiLineCommentTrivia */, + comment, + /*hasTrailingNewLine*/ + true + ); + } + cleanup == null ? void 0 : cleanup(); + return node; + } + function createRecoveryBoundary(context) { + if (cancellationToken && cancellationToken.throwIfCancellationRequested) { + cancellationToken.throwIfCancellationRequested(); + } + let trackedSymbols; + let unreportedErrors; + let hadError = false; + const oldTracker = context.tracker; + const oldTrackedSymbols = context.trackedSymbols; + context.trackedSymbols = void 0; + const oldEncounteredError = context.encounteredError; + context.tracker = new SymbolTrackerImpl(context, { + ...oldTracker.inner, + reportCyclicStructureError() { + markError(() => oldTracker.reportCyclicStructureError()); + }, + reportInaccessibleThisError() { + markError(() => oldTracker.reportInaccessibleThisError()); + }, + reportInaccessibleUniqueSymbolError() { + markError(() => oldTracker.reportInaccessibleUniqueSymbolError()); + }, + reportLikelyUnsafeImportRequiredError(specifier) { + markError(() => oldTracker.reportLikelyUnsafeImportRequiredError(specifier)); + }, + reportNonSerializableProperty(name) { + markError(() => oldTracker.reportNonSerializableProperty(name)); + }, + reportPrivateInBaseOfClassExpression(propertyName) { + markError(() => oldTracker.reportPrivateInBaseOfClassExpression(propertyName)); + }, + trackSymbol(sym, decl, meaning) { + (trackedSymbols ?? (trackedSymbols = [])).push([sym, decl, meaning]); + return false; + }, + moduleResolverHost: context.tracker.moduleResolverHost + }, context.tracker.moduleResolverHost); + return { + startRecoveryScope, + finalizeBoundary, + markError, + hadError: () => hadError + }; + function markError(unreportedError) { + hadError = true; + if (unreportedError) { + (unreportedErrors ?? (unreportedErrors = [])).push(unreportedError); + } + } + function startRecoveryScope() { + const trackedSymbolsTop = (trackedSymbols == null ? void 0 : trackedSymbols.length) ?? 0; + const unreportedErrorsTop = (unreportedErrors == null ? void 0 : unreportedErrors.length) ?? 0; + return () => { + hadError = false; + if (trackedSymbols) { + trackedSymbols.length = trackedSymbolsTop; + } + if (unreportedErrors) { + unreportedErrors.length = unreportedErrorsTop; + } + }; + } + function finalizeBoundary() { + context.tracker = oldTracker; + context.trackedSymbols = oldTrackedSymbols; + context.encounteredError = oldEncounteredError; + unreportedErrors == null ? void 0 : unreportedErrors.forEach((fn) => fn()); + if (hadError) { + return false; + } + trackedSymbols == null ? void 0 : trackedSymbols.forEach( + ([symbol, enclosingDeclaration, meaning]) => context.tracker.trackSymbol( + symbol, + enclosingDeclaration, + meaning + ) + ); + return true; + } + } + function enterNewScope(context, declaration, expandedParams, typeParameters, originalParameters, mapper) { + const cleanupContext = cloneNodeBuilderContext(context); + let cleanupParams; + let cleanupTypeParams; + const oldEnclosingDecl = context.enclosingDeclaration; + const oldMapper = context.mapper; + if (mapper) { + context.mapper = mapper; + } + if (context.enclosingDeclaration && declaration) { + let pushFakeScope2 = function(kind, addAll) { + Debug.assert(context.enclosingDeclaration); + let existingFakeScope; + if (getNodeLinks(context.enclosingDeclaration).fakeScopeForSignatureDeclaration === kind) { + existingFakeScope = context.enclosingDeclaration; + } else if (context.enclosingDeclaration.parent && getNodeLinks(context.enclosingDeclaration.parent).fakeScopeForSignatureDeclaration === kind) { + existingFakeScope = context.enclosingDeclaration.parent; + } + Debug.assertOptionalNode(existingFakeScope, isBlock); + const locals = (existingFakeScope == null ? void 0 : existingFakeScope.locals) ?? createSymbolTable(); + let newLocals; + let oldLocals; + addAll((name, symbol) => { + if (existingFakeScope) { + const oldSymbol = locals.get(name); + if (!oldSymbol) { + newLocals = append(newLocals, name); + } else { + oldLocals = append(oldLocals, { name, oldSymbol }); + } + } + locals.set(name, symbol); + }); + if (!existingFakeScope) { + const fakeScope = factory.createBlock(emptyArray); + getNodeLinks(fakeScope).fakeScopeForSignatureDeclaration = kind; + fakeScope.locals = locals; + setParent(fakeScope, context.enclosingDeclaration); + context.enclosingDeclaration = fakeScope; + } else { + return function undo() { + forEach(newLocals, (s) => locals.delete(s)); + forEach(oldLocals, (s) => locals.set(s.name, s.oldSymbol)); + }; + } + }; + var pushFakeScope = pushFakeScope2; + cleanupParams = !some(expandedParams) ? void 0 : pushFakeScope2( + "params", + (add) => { + if (!expandedParams) return; + for (let pIndex = 0; pIndex < expandedParams.length; pIndex++) { + const param = expandedParams[pIndex]; + const originalParam = originalParameters == null ? void 0 : originalParameters[pIndex]; + if (originalParameters && originalParam !== param) { + add(param.escapedName, unknownSymbol); + if (originalParam) { + add(originalParam.escapedName, unknownSymbol); + } + } else if (!forEach(param.declarations, (d) => { + if (isParameter(d) && isBindingPattern(d.name)) { + bindPattern(d.name); + return true; + } + return void 0; + function bindPattern(p) { + forEach(p.elements, (e) => { + switch (e.kind) { + case 233 /* OmittedExpression */: + return; + case 209 /* BindingElement */: + return bindElement(e); + default: + return Debug.assertNever(e); + } + }); + } + function bindElement(e) { + if (isBindingPattern(e.name)) { + return bindPattern(e.name); + } + const symbol = getSymbolOfDeclaration(e); + add(symbol.escapedName, symbol); + } + })) { + add(param.escapedName, param); + } + } + } + ); + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && some(typeParameters)) { + cleanupTypeParams = pushFakeScope2( + "typeParams", + (add) => { + for (const typeParam of typeParameters ?? emptyArray) { + const typeParamName = typeParameterToName(typeParam, context).escapedText; + add(typeParamName, typeParam.symbol); + } + } + ); + } + } + return () => { + cleanupParams == null ? void 0 : cleanupParams(); + cleanupTypeParams == null ? void 0 : cleanupTypeParams(); + cleanupContext(); + context.enclosingDeclaration = oldEnclosingDecl; + context.mapper = oldMapper; + }; + } + function tryGetThisParameterDeclaration(signature, context) { + if (signature.thisParameter) { + return symbolToParameterDeclaration(signature.thisParameter, context); + } + if (signature.declaration && isInJSFile(signature.declaration)) { + const thisTag = getJSDocThisTag(signature.declaration); + if (thisTag && thisTag.typeExpression) { + return factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "this", + /*questionToken*/ + void 0, + typeToTypeNodeHelper(getTypeFromTypeNode2(context, thisTag.typeExpression), context) + ); + } + } + } + function typeParameterToDeclarationWithConstraint(type, context, constraintNode) { + const restoreFlags = saveRestoreFlags(context); + context.flags &= ~512 /* WriteTypeParametersInQualifiedName */; + const modifiers = factory.createModifiersFromModifierFlags(getTypeParameterModifiers(type)); + const name = typeParameterToName(type, context); + const defaultParameter = getDefaultFromTypeParameter(type); + const defaultParameterNode = defaultParameter && typeToTypeNodeHelper(defaultParameter, context); + restoreFlags(); + return factory.createTypeParameterDeclaration(modifiers, name, constraintNode, defaultParameterNode); + } + function typeToTypeNodeHelperWithPossibleReusableTypeNode(type, typeNode, context) { + return !canPossiblyExpandType(type, context) && typeNode && getTypeFromTypeNode2(context, typeNode) === type && syntacticNodeBuilder.tryReuseExistingTypeNode(context, typeNode) || typeToTypeNodeHelper(type, context); + } + function typeParameterToDeclaration(type, context, constraint = getConstraintOfTypeParameter(type)) { + const constraintNode = constraint && typeToTypeNodeHelperWithPossibleReusableTypeNode(constraint, getConstraintDeclaration(type), context); + return typeParameterToDeclarationWithConstraint(type, context, constraintNode); + } + function typePredicateToTypePredicateNodeHelper(typePredicate, context) { + const assertsModifier = typePredicate.kind === 2 /* AssertsThis */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? factory.createToken(131 /* AssertsKeyword */) : void 0; + const parameterName = typePredicate.kind === 1 /* Identifier */ || typePredicate.kind === 3 /* AssertsIdentifier */ ? setEmitFlags(factory.createIdentifier(typePredicate.parameterName), 16777216 /* NoAsciiEscaping */) : factory.createThisTypeNode(); + const typeNode = typePredicate.type && typeToTypeNodeHelper(typePredicate.type, context); + return factory.createTypePredicateNode(assertsModifier, parameterName, typeNode); + } + function getEffectiveParameterDeclaration(parameterSymbol) { + const parameterDeclaration = getDeclarationOfKind(parameterSymbol, 170 /* Parameter */); + if (parameterDeclaration) { + return parameterDeclaration; + } + if (!isTransientSymbol(parameterSymbol)) { + return getDeclarationOfKind(parameterSymbol, 342 /* JSDocParameterTag */); + } + } + function symbolToParameterDeclaration(parameterSymbol, context, preserveModifierFlags) { + const parameterDeclaration = getEffectiveParameterDeclaration(parameterSymbol); + const parameterType = getTypeOfSymbol(parameterSymbol); + const parameterTypeNode = serializeTypeForDeclaration(context, parameterDeclaration, parameterType, parameterSymbol); + const modifiers = !(context.flags & 8192 /* OmitParameterModifiers */) && preserveModifierFlags && parameterDeclaration && canHaveModifiers(parameterDeclaration) ? map(getModifiers(parameterDeclaration), factory.cloneNode) : void 0; + const isRest = parameterDeclaration && isRestParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & 32768 /* RestParameter */; + const dotDotDotToken = isRest ? factory.createToken(26 /* DotDotDotToken */) : void 0; + const name = parameterToParameterDeclarationName(parameterSymbol, parameterDeclaration, context); + const isOptional = parameterDeclaration && isOptionalParameter(parameterDeclaration) || getCheckFlags(parameterSymbol) & 16384 /* OptionalParameter */; + const questionToken = isOptional ? factory.createToken(58 /* QuestionToken */) : void 0; + const parameterNode = factory.createParameterDeclaration( + modifiers, + dotDotDotToken, + name, + questionToken, + parameterTypeNode, + /*initializer*/ + void 0 + ); + context.approximateLength += symbolName(parameterSymbol).length + 3; + return parameterNode; + } + function parameterToParameterDeclarationName(parameterSymbol, parameterDeclaration, context) { + return parameterDeclaration ? parameterDeclaration.name ? parameterDeclaration.name.kind === 80 /* Identifier */ ? setEmitFlags(factory.cloneNode(parameterDeclaration.name), 16777216 /* NoAsciiEscaping */) : parameterDeclaration.name.kind === 167 /* QualifiedName */ ? setEmitFlags(factory.cloneNode(parameterDeclaration.name.right), 16777216 /* NoAsciiEscaping */) : cloneBindingName(parameterDeclaration.name) : symbolName(parameterSymbol) : symbolName(parameterSymbol); + function cloneBindingName(node) { + return elideInitializerAndSetEmitFlags(node); + function elideInitializerAndSetEmitFlags(node2) { + if (context.tracker.canTrackSymbol && isComputedPropertyName(node2) && isLateBindableName(node2)) { + trackComputedName(node2.expression, context.enclosingDeclaration, context); + } + let visited = visitEachChild( + node2, + elideInitializerAndSetEmitFlags, + /*context*/ + void 0, + /*nodesVisitor*/ + void 0, + elideInitializerAndSetEmitFlags + ); + if (isBindingElement(visited)) { + visited = factory.updateBindingElement( + visited, + visited.dotDotDotToken, + visited.propertyName, + visited.name, + /*initializer*/ + void 0 + ); + } + if (!nodeIsSynthesized(visited)) { + visited = factory.cloneNode(visited); + } + return setEmitFlags(visited, 1 /* SingleLine */ | 16777216 /* NoAsciiEscaping */); + } + } + } + function trackComputedName(accessExpression, enclosingDeclaration, context) { + if (!context.tracker.canTrackSymbol) return; + const firstIdentifier = getFirstIdentifier(accessExpression); + const name = resolveName( + enclosingDeclaration, + firstIdentifier.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (name) { + context.tracker.trackSymbol(name, enclosingDeclaration, 111551 /* Value */); + } else { + const fallback = resolveName( + firstIdentifier, + firstIdentifier.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (fallback) { + context.tracker.trackSymbol(fallback, enclosingDeclaration, 111551 /* Value */); + } + } + } + function lookupSymbolChain(symbol, context, meaning, yieldModuleSymbol) { + context.tracker.trackSymbol(symbol, context.enclosingDeclaration, meaning); + return lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol); + } + function lookupSymbolChainWorker(symbol, context, meaning, yieldModuleSymbol) { + let chain; + const isTypeParameter = symbol.flags & 262144 /* TypeParameter */; + if (!isTypeParameter && (context.enclosingDeclaration || context.flags & 64 /* UseFullyQualifiedType */) && !(context.internalFlags & 4 /* DoNotIncludeSymbolChain */)) { + chain = Debug.checkDefined(getSymbolChain( + symbol, + meaning, + /*endOfChain*/ + true + )); + Debug.assert(chain && chain.length > 0); + } else { + chain = [symbol]; + } + return chain; + function getSymbolChain(symbol2, meaning2, endOfChain) { + let accessibleSymbolChain = getAccessibleSymbolChain(symbol2, context.enclosingDeclaration, meaning2, !!(context.flags & 128 /* UseOnlyExternalAliasing */)); + let parentSpecifiers; + if (!accessibleSymbolChain || needsQualification(accessibleSymbolChain[0], context.enclosingDeclaration, accessibleSymbolChain.length === 1 ? meaning2 : getQualifiedLeftMeaning(meaning2))) { + const parents = getContainersOfSymbol(accessibleSymbolChain ? accessibleSymbolChain[0] : symbol2, context.enclosingDeclaration, meaning2); + if (length(parents)) { + parentSpecifiers = parents.map( + (symbol3) => some(symbol3.declarations, hasNonGlobalAugmentationExternalModuleSymbol) ? getSpecifierForModuleSymbol(symbol3, context) : void 0 + ); + const indices = parents.map((_, i) => i); + indices.sort(sortByBestName); + const sortedParents = indices.map((i) => parents[i]); + for (const parent2 of sortedParents) { + const parentChain = getSymbolChain( + parent2, + getQualifiedLeftMeaning(meaning2), + /*endOfChain*/ + false + ); + if (parentChain) { + if (parent2.exports && parent2.exports.get("export=" /* ExportEquals */) && getSymbolIfSameReference(parent2.exports.get("export=" /* ExportEquals */), symbol2)) { + accessibleSymbolChain = parentChain; + break; + } + accessibleSymbolChain = parentChain.concat(accessibleSymbolChain || [getAliasForSymbolInContainer(parent2, symbol2) || symbol2]); + break; + } + } + } + } + if (accessibleSymbolChain) { + return accessibleSymbolChain; + } + if ( + // If this is the last part of outputting the symbol, always output. The cases apply only to parent symbols. + endOfChain || // If a parent symbol is an anonymous type, don't write it. + !(symbol2.flags & (2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */)) + ) { + if (!endOfChain && !yieldModuleSymbol && !!forEach(symbol2.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { + return; + } + return [symbol2]; + } + function sortByBestName(a, b) { + const specifierA = parentSpecifiers[a]; + const specifierB = parentSpecifiers[b]; + if (specifierA && specifierB) { + const isBRelative = pathIsRelative(specifierB); + if (pathIsRelative(specifierA) === isBRelative) { + return countPathComponents(specifierA) - countPathComponents(specifierB); + } + if (isBRelative) { + return -1; + } + return 1; + } + return 0; + } + } + } + function typeParametersToTypeParameterDeclarations(symbol, context) { + let typeParameterNodes; + const targetSymbol = getTargetSymbol(symbol); + if (targetSymbol.flags & (32 /* Class */ | 64 /* Interface */ | 524288 /* TypeAlias */)) { + typeParameterNodes = factory.createNodeArray(map(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol), (tp) => typeParameterToDeclaration(tp, context))); + } + return typeParameterNodes; + } + function lookupTypeParameterNodes(chain, index, context) { + var _a; + Debug.assert(chain && 0 <= index && index < chain.length); + const symbol = chain[index]; + const symbolId = getSymbolId(symbol); + if ((_a = context.typeParameterSymbolList) == null ? void 0 : _a.has(symbolId)) { + return void 0; + } + if (context.mustCreateTypeParameterSymbolList) { + context.mustCreateTypeParameterSymbolList = false; + context.typeParameterSymbolList = new Set(context.typeParameterSymbolList); + } + context.typeParameterSymbolList.add(symbolId); + let typeParameterNodes; + if (context.flags & 512 /* WriteTypeParametersInQualifiedName */ && index < chain.length - 1) { + const parentSymbol = symbol; + const nextSymbol = chain[index + 1]; + if (getCheckFlags(nextSymbol) & 1 /* Instantiated */) { + const params = getTypeParametersOfClassOrInterface( + parentSymbol.flags & 2097152 /* Alias */ ? resolveAlias(parentSymbol) : parentSymbol + ); + typeParameterNodes = mapToTypeNodes(map(params, (t) => getMappedType(t, nextSymbol.links.mapper)), context); + } else { + typeParameterNodes = typeParametersToTypeParameterDeclarations(symbol, context); + } + } + return typeParameterNodes; + } + function getTopmostIndexedAccessType(top) { + if (isIndexedAccessTypeNode(top.objectType)) { + return getTopmostIndexedAccessType(top.objectType); + } + return top; + } + function getSpecifierForModuleSymbol(symbol, context, overrideImportMode) { + let file = getDeclarationOfKind(symbol, 308 /* SourceFile */); + if (!file) { + const equivalentFileSymbol = firstDefined(symbol.declarations, (d) => getFileSymbolIfFileSymbolExportEqualsContainer(d, symbol)); + if (equivalentFileSymbol) { + file = getDeclarationOfKind(equivalentFileSymbol, 308 /* SourceFile */); + } + } + if (file && file.moduleName !== void 0) { + return file.moduleName; + } + if (!file) { + if (ambientModuleSymbolRegex.test(symbol.escapedName)) { + return symbol.escapedName.substring(1, symbol.escapedName.length - 1); + } + } + if (!context.enclosingFile || !context.tracker.moduleResolverHost) { + if (ambientModuleSymbolRegex.test(symbol.escapedName)) { + return symbol.escapedName.substring(1, symbol.escapedName.length - 1); + } + return getSourceFileOfNode(getNonAugmentationDeclaration(symbol)).fileName; + } + const enclosingDeclaration = getOriginalNode(context.enclosingDeclaration); + const originalModuleSpecifier = canHaveModuleSpecifier(enclosingDeclaration) ? tryGetModuleSpecifierFromDeclaration(enclosingDeclaration) : void 0; + const contextFile = context.enclosingFile; + const resolutionMode = overrideImportMode || originalModuleSpecifier && host.getModeForUsageLocation(contextFile, originalModuleSpecifier) || contextFile && host.getDefaultResolutionModeForFile(contextFile); + const cacheKey = createModeAwareCacheKey(contextFile.path, resolutionMode); + const links = getSymbolLinks(symbol); + let specifier = links.specifierCache && links.specifierCache.get(cacheKey); + if (!specifier) { + const isBundle2 = !!compilerOptions.outFile; + const { moduleResolverHost } = context.tracker; + const specifierCompilerOptions = isBundle2 ? { ...compilerOptions, baseUrl: moduleResolverHost.getCommonSourceDirectory() } : compilerOptions; + specifier = first(getModuleSpecifiers( + symbol, + checker, + specifierCompilerOptions, + contextFile, + moduleResolverHost, + { + importModuleSpecifierPreference: isBundle2 ? "non-relative" : "project-relative", + importModuleSpecifierEnding: isBundle2 ? "minimal" : resolutionMode === 99 /* ESNext */ ? "js" : void 0 + }, + { overrideImportMode } + )); + links.specifierCache ?? (links.specifierCache = /* @__PURE__ */ new Map()); + links.specifierCache.set(cacheKey, specifier); + } + return specifier; + } + function symbolToEntityNameNode(symbol) { + const identifier = factory.createIdentifier(unescapeLeadingUnderscores(symbol.escapedName)); + return symbol.parent ? factory.createQualifiedName(symbolToEntityNameNode(symbol.parent), identifier) : identifier; + } + function symbolToTypeNode(symbol, context, meaning, overrideTypeArguments) { + const chain = lookupSymbolChain(symbol, context, meaning, !(context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */)); + const isTypeOf = meaning === 111551 /* Value */; + if (some(chain[0].declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { + const nonRootParts = chain.length > 1 ? createAccessFromSymbolChain(chain, chain.length - 1, 1) : void 0; + const typeParameterNodes = overrideTypeArguments || lookupTypeParameterNodes(chain, 0, context); + const contextFile = getSourceFileOfNode(getOriginalNode(context.enclosingDeclaration)); + const targetFile = getSourceFileOfModule(chain[0]); + let specifier; + let attributes; + if (getEmitModuleResolutionKind(compilerOptions) === 3 /* Node16 */ || getEmitModuleResolutionKind(compilerOptions) === 99 /* NodeNext */) { + if ((targetFile == null ? void 0 : targetFile.impliedNodeFormat) === 99 /* ESNext */ && targetFile.impliedNodeFormat !== (contextFile == null ? void 0 : contextFile.impliedNodeFormat)) { + specifier = getSpecifierForModuleSymbol(chain[0], context, 99 /* ESNext */); + attributes = factory.createImportAttributes( + factory.createNodeArray([ + factory.createImportAttribute( + factory.createStringLiteral("resolution-mode"), + factory.createStringLiteral("import") + ) + ]) + ); + } + } + if (!specifier) { + specifier = getSpecifierForModuleSymbol(chain[0], context); + } + if (!(context.flags & 67108864 /* AllowNodeModulesRelativePaths */) && getEmitModuleResolutionKind(compilerOptions) !== 1 /* Classic */ && specifier.includes("/node_modules/")) { + const oldSpecifier = specifier; + if (getEmitModuleResolutionKind(compilerOptions) === 3 /* Node16 */ || getEmitModuleResolutionKind(compilerOptions) === 99 /* NodeNext */) { + const swappedMode = (contextFile == null ? void 0 : contextFile.impliedNodeFormat) === 99 /* ESNext */ ? 1 /* CommonJS */ : 99 /* ESNext */; + specifier = getSpecifierForModuleSymbol(chain[0], context, swappedMode); + if (specifier.includes("/node_modules/")) { + specifier = oldSpecifier; + } else { + attributes = factory.createImportAttributes( + factory.createNodeArray([ + factory.createImportAttribute( + factory.createStringLiteral("resolution-mode"), + factory.createStringLiteral(swappedMode === 99 /* ESNext */ ? "import" : "require") + ) + ]) + ); + } + } + if (!attributes) { + context.encounteredError = true; + if (context.tracker.reportLikelyUnsafeImportRequiredError) { + context.tracker.reportLikelyUnsafeImportRequiredError(oldSpecifier); + } + } + } + const lit = factory.createLiteralTypeNode(factory.createStringLiteral(specifier)); + context.approximateLength += specifier.length + 10; + if (!nonRootParts || isEntityName(nonRootParts)) { + if (nonRootParts) { + const lastId = isIdentifier(nonRootParts) ? nonRootParts : nonRootParts.right; + setIdentifierTypeArguments( + lastId, + /*typeArguments*/ + void 0 + ); + } + return factory.createImportTypeNode(lit, attributes, nonRootParts, typeParameterNodes, isTypeOf); + } else { + const splitNode = getTopmostIndexedAccessType(nonRootParts); + const qualifier = splitNode.objectType.typeName; + return factory.createIndexedAccessTypeNode(factory.createImportTypeNode(lit, attributes, qualifier, typeParameterNodes, isTypeOf), splitNode.indexType); + } + } + const entityName = createAccessFromSymbolChain(chain, chain.length - 1, 0); + if (isIndexedAccessTypeNode(entityName)) { + return entityName; + } + if (isTypeOf) { + return factory.createTypeQueryNode(entityName); + } else { + const lastId = isIdentifier(entityName) ? entityName : entityName.right; + const lastTypeArgs = getIdentifierTypeArguments(lastId); + setIdentifierTypeArguments( + lastId, + /*typeArguments*/ + void 0 + ); + return factory.createTypeReferenceNode(entityName, lastTypeArgs); + } + function createAccessFromSymbolChain(chain2, index, stopper) { + const typeParameterNodes = index === chain2.length - 1 ? overrideTypeArguments : lookupTypeParameterNodes(chain2, index, context); + const symbol2 = chain2[index]; + const parent2 = chain2[index - 1]; + let symbolName2; + if (index === 0) { + context.flags |= 16777216 /* InInitialEntityName */; + symbolName2 = getNameOfSymbolAsWritten(symbol2, context); + context.approximateLength += (symbolName2 ? symbolName2.length : 0) + 1; + context.flags ^= 16777216 /* InInitialEntityName */; + } else { + if (parent2 && getExportsOfSymbol(parent2)) { + const exports2 = getExportsOfSymbol(parent2); + forEachEntry(exports2, (ex, name) => { + if (getSymbolIfSameReference(ex, symbol2) && !isLateBoundName(name) && name !== "export=" /* ExportEquals */) { + symbolName2 = unescapeLeadingUnderscores(name); + return true; + } + }); + } + } + if (symbolName2 === void 0) { + const name = firstDefined(symbol2.declarations, getNameOfDeclaration); + if (name && isComputedPropertyName(name) && isEntityName(name.expression)) { + const LHS = createAccessFromSymbolChain(chain2, index - 1, stopper); + if (isEntityName(LHS)) { + return factory.createIndexedAccessTypeNode(factory.createParenthesizedType(factory.createTypeQueryNode(LHS)), factory.createTypeQueryNode(name.expression)); + } + return LHS; + } + symbolName2 = getNameOfSymbolAsWritten(symbol2, context); + } + context.approximateLength += symbolName2.length + 1; + if (!(context.flags & 16 /* ForbidIndexedAccessSymbolReferences */) && parent2 && getMembersOfSymbol(parent2) && getMembersOfSymbol(parent2).get(symbol2.escapedName) && getSymbolIfSameReference(getMembersOfSymbol(parent2).get(symbol2.escapedName), symbol2)) { + const LHS = createAccessFromSymbolChain(chain2, index - 1, stopper); + if (isIndexedAccessTypeNode(LHS)) { + return factory.createIndexedAccessTypeNode(LHS, factory.createLiteralTypeNode(factory.createStringLiteral(symbolName2))); + } else { + return factory.createIndexedAccessTypeNode(factory.createTypeReferenceNode(LHS, typeParameterNodes), factory.createLiteralTypeNode(factory.createStringLiteral(symbolName2))); + } + } + const identifier = setEmitFlags(factory.createIdentifier(symbolName2), 16777216 /* NoAsciiEscaping */); + if (typeParameterNodes) setIdentifierTypeArguments(identifier, factory.createNodeArray(typeParameterNodes)); + identifier.symbol = symbol2; + if (index > stopper) { + const LHS = createAccessFromSymbolChain(chain2, index - 1, stopper); + if (!isEntityName(LHS)) { + return Debug.fail("Impossible construct - an export of an indexed access cannot be reachable"); + } + return factory.createQualifiedName(LHS, identifier); + } + return identifier; + } + } + function typeParameterShadowsOtherTypeParameterInScope(escapedName, context, type) { + const result = resolveName( + context.enclosingDeclaration, + escapedName, + 788968 /* Type */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + if (result && result.flags & 262144 /* TypeParameter */) { + return result !== type.symbol; + } + return false; + } + function typeParameterToName(type, context) { + var _a, _b, _c, _d; + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && context.typeParameterNames) { + const cached = context.typeParameterNames.get(getTypeId(type)); + if (cached) { + return cached; + } + } + let result = symbolToName( + type.symbol, + context, + 788968 /* Type */, + /*expectsIdentifier*/ + true + ); + if (!(result.kind & 80 /* Identifier */)) { + return factory.createIdentifier("(Missing type parameter)"); + } + const decl = (_b = (_a = type.symbol) == null ? void 0 : _a.declarations) == null ? void 0 : _b[0]; + if (decl && isTypeParameterDeclaration(decl)) { + result = setTextRange2(context, result, decl.name); + } + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */) { + const rawtext = result.escapedText; + let i = ((_c = context.typeParameterNamesByTextNextNameCount) == null ? void 0 : _c.get(rawtext)) || 0; + let text = rawtext; + while (((_d = context.typeParameterNamesByText) == null ? void 0 : _d.has(text)) || typeParameterShadowsOtherTypeParameterInScope(text, context, type)) { + i++; + text = `${rawtext}_${i}`; + } + if (text !== rawtext) { + const typeArguments = getIdentifierTypeArguments(result); + result = factory.createIdentifier(text); + setIdentifierTypeArguments(result, typeArguments); + } + if (context.mustCreateTypeParametersNamesLookups) { + context.mustCreateTypeParametersNamesLookups = false; + context.typeParameterNames = new Map(context.typeParameterNames); + context.typeParameterNamesByTextNextNameCount = new Map(context.typeParameterNamesByTextNextNameCount); + context.typeParameterNamesByText = new Set(context.typeParameterNamesByText); + } + context.typeParameterNamesByTextNextNameCount.set(rawtext, i); + context.typeParameterNames.set(getTypeId(type), result); + context.typeParameterNamesByText.add(text); + } + return result; + } + function symbolToName(symbol, context, meaning, expectsIdentifier) { + const chain = lookupSymbolChain(symbol, context, meaning); + if (expectsIdentifier && chain.length !== 1 && !context.encounteredError && !(context.flags & 65536 /* AllowQualifiedNameInPlaceOfIdentifier */)) { + context.encounteredError = true; + } + return createEntityNameFromSymbolChain(chain, chain.length - 1); + function createEntityNameFromSymbolChain(chain2, index) { + const typeParameterNodes = lookupTypeParameterNodes(chain2, index, context); + const symbol2 = chain2[index]; + if (index === 0) { + context.flags |= 16777216 /* InInitialEntityName */; + } + const symbolName2 = getNameOfSymbolAsWritten(symbol2, context); + if (index === 0) { + context.flags ^= 16777216 /* InInitialEntityName */; + } + const identifier = setEmitFlags(factory.createIdentifier(symbolName2), 16777216 /* NoAsciiEscaping */); + if (typeParameterNodes) setIdentifierTypeArguments(identifier, factory.createNodeArray(typeParameterNodes)); + identifier.symbol = symbol2; + return index > 0 ? factory.createQualifiedName(createEntityNameFromSymbolChain(chain2, index - 1), identifier) : identifier; + } + } + function symbolToExpression(symbol, context, meaning) { + const chain = lookupSymbolChain(symbol, context, meaning); + return createExpressionFromSymbolChain(chain, chain.length - 1); + function createExpressionFromSymbolChain(chain2, index) { + const typeParameterNodes = lookupTypeParameterNodes(chain2, index, context); + const symbol2 = chain2[index]; + if (index === 0) { + context.flags |= 16777216 /* InInitialEntityName */; + } + let symbolName2 = getNameOfSymbolAsWritten(symbol2, context); + if (index === 0) { + context.flags ^= 16777216 /* InInitialEntityName */; + } + let firstChar = symbolName2.charCodeAt(0); + if (isSingleOrDoubleQuote(firstChar) && some(symbol2.declarations, hasNonGlobalAugmentationExternalModuleSymbol)) { + const specifier = getSpecifierForModuleSymbol(symbol2, context); + context.approximateLength += 2 + specifier.length; + return factory.createStringLiteral(specifier); + } + if (index === 0 || canUsePropertyAccess(symbolName2, languageVersion)) { + const identifier = setEmitFlags(factory.createIdentifier(symbolName2), 16777216 /* NoAsciiEscaping */); + if (typeParameterNodes) setIdentifierTypeArguments(identifier, factory.createNodeArray(typeParameterNodes)); + identifier.symbol = symbol2; + context.approximateLength += 1 + symbolName2.length; + return index > 0 ? factory.createPropertyAccessExpression(createExpressionFromSymbolChain(chain2, index - 1), identifier) : identifier; + } else { + if (firstChar === 91 /* openBracket */) { + symbolName2 = symbolName2.substring(1, symbolName2.length - 1); + firstChar = symbolName2.charCodeAt(0); + } + let expression; + if (isSingleOrDoubleQuote(firstChar) && !(symbol2.flags & 8 /* EnumMember */)) { + const literalText = stripQuotes(symbolName2).replace(/\\./g, (s) => s.substring(1)); + context.approximateLength += literalText.length + 2; + expression = factory.createStringLiteral(literalText, firstChar === 39 /* singleQuote */); + } else if ("" + +symbolName2 === symbolName2) { + context.approximateLength += symbolName2.length; + expression = factory.createNumericLiteral(+symbolName2); + } + if (!expression) { + const identifier = setEmitFlags(factory.createIdentifier(symbolName2), 16777216 /* NoAsciiEscaping */); + if (typeParameterNodes) setIdentifierTypeArguments(identifier, factory.createNodeArray(typeParameterNodes)); + identifier.symbol = symbol2; + context.approximateLength += symbolName2.length; + expression = identifier; + } + context.approximateLength += 2; + return factory.createElementAccessExpression(createExpressionFromSymbolChain(chain2, index - 1), expression); + } + } + } + function isStringNamed(d) { + const name = getNameOfDeclaration(d); + if (!name) { + return false; + } + if (isComputedPropertyName(name)) { + const type = checkExpression(name.expression); + return !!(type.flags & 402653316 /* StringLike */); + } + if (isElementAccessExpression(name)) { + const type = checkExpression(name.argumentExpression); + return !!(type.flags & 402653316 /* StringLike */); + } + return isStringLiteral(name); + } + function isSingleQuotedStringNamed(d) { + const name = getNameOfDeclaration(d); + return !!(name && isStringLiteral(name) && (name.singleQuote || !nodeIsSynthesized(name) && startsWith(getTextOfNode( + name, + /*includeTrivia*/ + false + ), "'"))); + } + function getPropertyNameNodeForSymbol(symbol, context) { + const hashPrivateName = getClonedHashPrivateName(symbol); + if (hashPrivateName) { + const shouldEmitErroneousFieldName = !!context.tracker.reportPrivateInBaseOfClassExpression && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */; + if (!shouldEmitErroneousFieldName) { + return hashPrivateName; + } else { + let rawName2 = unescapeLeadingUnderscores(symbol.escapedName); + rawName2 = rawName2.replace(/__#\d+@#/g, "__#private@#"); + return createPropertyNameNodeForIdentifierOrLiteral( + rawName2, + getEmitScriptTarget(compilerOptions), + /*singleQuote*/ + false, + /*stringNamed*/ + true, + !!(symbol.flags & 8192 /* Method */) + ); + } + } + const stringNamed = !!length(symbol.declarations) && every(symbol.declarations, isStringNamed); + const singleQuote = !!length(symbol.declarations) && every(symbol.declarations, isSingleQuotedStringNamed); + const isMethod = !!(symbol.flags & 8192 /* Method */); + const fromNameType = getPropertyNameNodeForSymbolFromNameType(symbol, context, singleQuote, stringNamed, isMethod); + if (fromNameType) { + return fromNameType; + } + const rawName = unescapeLeadingUnderscores(symbol.escapedName); + return createPropertyNameNodeForIdentifierOrLiteral(rawName, getEmitScriptTarget(compilerOptions), singleQuote, stringNamed, isMethod); + } + function getPropertyNameNodeForSymbolFromNameType(symbol, context, singleQuote, stringNamed, isMethod) { + const nameType = getSymbolLinks(symbol).nameType; + if (nameType) { + if (nameType.flags & 384 /* StringOrNumberLiteral */) { + const name = "" + nameType.value; + if (!isIdentifierText(name, getEmitScriptTarget(compilerOptions)) && (stringNamed || !isNumericLiteralName(name))) { + return factory.createStringLiteral(name, !!singleQuote); + } + if (isNumericLiteralName(name) && startsWith(name, "-")) { + return factory.createComputedPropertyName(factory.createPrefixUnaryExpression(41 /* MinusToken */, factory.createNumericLiteral(-name))); + } + return createPropertyNameNodeForIdentifierOrLiteral(name, getEmitScriptTarget(compilerOptions), singleQuote, stringNamed, isMethod); + } + if (nameType.flags & 8192 /* UniqueESSymbol */) { + return factory.createComputedPropertyName(symbolToExpression(nameType.symbol, context, 111551 /* Value */)); + } + } + } + function cloneNodeBuilderContext(context) { + const oldMustCreateTypeParameterSymbolList = context.mustCreateTypeParameterSymbolList; + const oldMustCreateTypeParametersNamesLookups = context.mustCreateTypeParametersNamesLookups; + context.mustCreateTypeParameterSymbolList = true; + context.mustCreateTypeParametersNamesLookups = true; + const oldTypeParameterNames = context.typeParameterNames; + const oldTypeParameterNamesByText = context.typeParameterNamesByText; + const oldTypeParameterNamesByTextNextNameCount = context.typeParameterNamesByTextNextNameCount; + const oldTypeParameterSymbolList = context.typeParameterSymbolList; + return () => { + context.typeParameterNames = oldTypeParameterNames; + context.typeParameterNamesByText = oldTypeParameterNamesByText; + context.typeParameterNamesByTextNextNameCount = oldTypeParameterNamesByTextNextNameCount; + context.typeParameterSymbolList = oldTypeParameterSymbolList; + context.mustCreateTypeParameterSymbolList = oldMustCreateTypeParameterSymbolList; + context.mustCreateTypeParametersNamesLookups = oldMustCreateTypeParametersNamesLookups; + }; + } + function getDeclarationWithTypeAnnotation(symbol, enclosingDeclaration) { + return symbol.declarations && find(symbol.declarations, (s) => !!getNonlocalEffectiveTypeAnnotationNode(s) && (!enclosingDeclaration || !!findAncestor(s, (n) => n === enclosingDeclaration))); + } + function existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type) { + if (!(getObjectFlags(type) & 4 /* Reference */)) return true; + if (!isTypeReferenceNode(existing)) return true; + void getTypeFromTypeReference(existing); + const symbol = getNodeLinks(existing).resolvedSymbol; + const existingTarget = symbol && getDeclaredTypeOfSymbol(symbol); + if (!existingTarget || existingTarget !== type.target) return true; + return length(existing.typeArguments) >= getMinTypeArgumentCount(type.target.typeParameters); + } + function getEnclosingDeclarationIgnoringFakeScope(enclosingDeclaration) { + while (getNodeLinks(enclosingDeclaration).fakeScopeForSignatureDeclaration) { + enclosingDeclaration = enclosingDeclaration.parent; + } + return enclosingDeclaration; + } + function serializeInferredTypeForDeclaration(symbol, context, type) { + if (type.flags & 8192 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === context.enclosingFile))) { + context.flags |= 1048576 /* AllowUniqueESSymbolType */; + } + const result = typeToTypeNodeHelper(type, context); + return result; + } + function serializeTypeForDeclaration(context, declaration, type, symbol) { + var _a; + let result; + const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration); + const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]); + if (!canPossiblyExpandType(type, context) && decl) { + const restore = addSymbolTypeToContext(context, symbol, type); + if (isAccessor(decl)) { + result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context); + } else if (hasInferredType(decl) && !nodeIsSynthesized(decl) && !(getObjectFlags(type) & 196608 /* RequiresWidening */)) { + result = syntacticNodeBuilder.serializeTypeOfDeclaration(decl, symbol, context); + } + restore(); + } + if (!result) { + if (addUndefinedForParameter) { + type = getOptionalType(type); + } + result = serializeInferredTypeForDeclaration(symbol, context, type); + } + return result ?? factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + function typeNodeIsEquivalentToType(annotatedDeclaration, type, typeFromTypeNode) { + if (typeFromTypeNode === type) { + return true; + } + if (!annotatedDeclaration) { + return false; + } + if ((isPropertySignature(annotatedDeclaration) || isPropertyDeclaration(annotatedDeclaration)) && annotatedDeclaration.questionToken) { + return getTypeWithFacts(type, 524288 /* NEUndefined */) === typeFromTypeNode; + } + if (isParameter(annotatedDeclaration) && hasEffectiveQuestionToken(annotatedDeclaration)) { + return getTypeWithFacts(type, 524288 /* NEUndefined */) === typeFromTypeNode; + } + return false; + } + function serializeReturnTypeForSignature(context, signature) { + const suppressAny = context.flags & 256 /* SuppressAnyReturnType */; + const restoreFlags = saveRestoreFlags(context); + if (suppressAny) context.flags &= ~256 /* SuppressAnyReturnType */; + let returnTypeNode; + const returnType = getReturnTypeOfSignature(signature); + if (!(suppressAny && isTypeAny(returnType))) { + if (signature.declaration && !nodeIsSynthesized(signature.declaration) && !canPossiblyExpandType(returnType, context)) { + const declarationSymbol = getSymbolOfDeclaration(signature.declaration); + const restore = addSymbolTypeToContext(context, declarationSymbol, returnType); + returnTypeNode = syntacticNodeBuilder.serializeReturnTypeForSignature(signature.declaration, declarationSymbol, context); + restore(); + } + if (!returnTypeNode) { + returnTypeNode = serializeInferredReturnTypeForSignature(context, signature, returnType); + } + } + if (!returnTypeNode && !suppressAny) { + returnTypeNode = factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + restoreFlags(); + return returnTypeNode; + } + function serializeInferredReturnTypeForSignature(context, signature, returnType) { + const oldSuppressReportInferenceFallback = context.suppressReportInferenceFallback; + context.suppressReportInferenceFallback = true; + const typePredicate = getTypePredicateOfSignature(signature); + const returnTypeNode = typePredicate ? typePredicateToTypePredicateNodeHelper(context.mapper ? instantiateTypePredicate(typePredicate, context.mapper) : typePredicate, context) : typeToTypeNodeHelper(returnType, context); + context.suppressReportInferenceFallback = oldSuppressReportInferenceFallback; + return returnTypeNode; + } + function trackExistingEntityName(node, context, enclosingDeclaration = context.enclosingDeclaration) { + let introducesError = false; + const leftmost = getFirstIdentifier(node); + if (isInJSFile(node) && (isExportsIdentifier(leftmost) || isModuleExportsAccessExpression(leftmost.parent) || isQualifiedName(leftmost.parent) && isModuleIdentifier(leftmost.parent.left) && isExportsIdentifier(leftmost.parent.right))) { + introducesError = true; + return { introducesError, node }; + } + const meaning = getMeaningOfEntityNameReference(node); + let sym; + if (isThisIdentifier(leftmost)) { + sym = getSymbolOfDeclaration(getThisContainer( + leftmost, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + )); + if (isSymbolAccessible( + sym, + leftmost, + meaning, + /*shouldComputeAliasesToMakeVisible*/ + false + ).accessibility !== 0 /* Accessible */) { + introducesError = true; + context.tracker.reportInaccessibleThisError(); + } + return { introducesError, node: attachSymbolToLeftmostIdentifier(node) }; + } + sym = resolveEntityName( + leftmost, + meaning, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true + ); + if (context.enclosingDeclaration && !(sym && sym.flags & 262144 /* TypeParameter */)) { + sym = getExportSymbolOfValueSymbolIfExported(sym); + const symAtLocation = resolveEntityName( + leftmost, + meaning, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + context.enclosingDeclaration + ); + if ( + // Check for unusable parameters symbols + symAtLocation === unknownSymbol || // If the symbol is not found, but was not found in the original scope either we probably have an error, don't reuse the node + symAtLocation === void 0 && sym !== void 0 || // If the symbol is found both in declaration scope and in current scope then it should point to the same reference + symAtLocation && sym && !getSymbolIfSameReference(getExportSymbolOfValueSymbolIfExported(symAtLocation), sym) + ) { + if (symAtLocation !== unknownSymbol) { + context.tracker.reportInferenceFallback(node); + } + introducesError = true; + return { introducesError, node, sym }; + } else { + sym = symAtLocation; + } + } + if (sym) { + if (sym.flags & 1 /* FunctionScopedVariable */ && sym.valueDeclaration) { + if (isPartOfParameterDeclaration(sym.valueDeclaration) || isJSDocParameterTag(sym.valueDeclaration)) { + return { introducesError, node: attachSymbolToLeftmostIdentifier(node) }; + } + } + if (!(sym.flags & 262144 /* TypeParameter */) && // Type parameters are visible in the current context if they are are resolvable + !isDeclarationName(node) && isSymbolAccessible( + sym, + enclosingDeclaration, + meaning, + /*shouldComputeAliasesToMakeVisible*/ + false + ).accessibility !== 0 /* Accessible */) { + context.tracker.reportInferenceFallback(node); + introducesError = true; + } else { + context.tracker.trackSymbol(sym, enclosingDeclaration, meaning); + } + return { introducesError, node: attachSymbolToLeftmostIdentifier(node) }; + } + return { introducesError, node }; + function attachSymbolToLeftmostIdentifier(node2) { + if (node2 === leftmost) { + const type = getDeclaredTypeOfSymbol(sym); + const name = sym.flags & 262144 /* TypeParameter */ ? typeParameterToName(type, context) : factory.cloneNode(node2); + name.symbol = sym; + return setTextRange2(context, setEmitFlags(name, 16777216 /* NoAsciiEscaping */), node2); + } + const updated = visitEachChild( + node2, + (c) => attachSymbolToLeftmostIdentifier(c), + /*context*/ + void 0 + ); + return setTextRange2(context, updated, node2); + } + } + function serializeTypeName(context, node, isTypeOf, typeArguments) { + const meaning = isTypeOf ? 111551 /* Value */ : 788968 /* Type */; + const symbol = resolveEntityName( + node, + meaning, + /*ignoreErrors*/ + true + ); + if (!symbol) return void 0; + const resolvedSymbol = symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol; + if (isSymbolAccessible( + symbol, + context.enclosingDeclaration, + meaning, + /*shouldComputeAliasesToMakeVisible*/ + false + ).accessibility !== 0 /* Accessible */) return void 0; + return symbolToTypeNode(resolvedSymbol, context, meaning, typeArguments); + } + function canReuseTypeNode(context, existing) { + const type = getTypeFromTypeNode2( + context, + existing, + /*noMappedTypes*/ + true + ); + if (!type) { + return false; + } + if (isInJSFile(existing)) { + if (isLiteralImportTypeNode(existing)) { + void getTypeFromImportTypeNode(existing); + const nodeSymbol = getNodeLinks(existing).resolvedSymbol; + return !nodeSymbol || !// The import type resolved using jsdoc fallback logic + (!existing.isTypeOf && !(nodeSymbol.flags & 788968 /* Type */) || // The import type had type arguments autofilled by js fallback logic + !(length(existing.typeArguments) >= getMinTypeArgumentCount(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(nodeSymbol)))); + } + } + if (isTypeReferenceNode(existing)) { + if (isConstTypeReference(existing)) return false; + const symbol = getNodeLinks(existing).resolvedSymbol; + if (!symbol) return false; + if (symbol.flags & 262144 /* TypeParameter */) { + const declaredType = getDeclaredTypeOfSymbol(symbol); + return !(context.mapper && getMappedType(declaredType, context.mapper) !== declaredType); + } + if (isInJSDoc(existing)) { + return existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type) && !getIntendedTypeFromJSDocTypeReference(existing) && !!(symbol.flags & 788968 /* Type */); + } + } + if (isTypeOperatorNode(existing) && existing.operator === 158 /* UniqueKeyword */ && existing.type.kind === 155 /* SymbolKeyword */) { + const effectiveEnclosingContext = context.enclosingDeclaration && getEnclosingDeclarationIgnoringFakeScope(context.enclosingDeclaration); + return !!findAncestor(existing, (n) => n === effectiveEnclosingContext); + } + return true; + } + function serializeExistingTypeNode(context, typeNode, addUndefined) { + const type = getTypeFromTypeNode2(context, typeNode); + if (addUndefined && !someType(type, (t) => !!(t.flags & 32768 /* Undefined */)) && canReuseTypeNode(context, typeNode)) { + const clone2 = syntacticNodeBuilder.tryReuseExistingTypeNode(context, typeNode); + if (clone2) { + return factory.createUnionTypeNode([clone2, factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); + } + } + return typeToTypeNodeHelper(type, context); + } + function symbolTableToDeclarationStatements(symbolTable, context) { + var _a; + const serializePropertySymbolForClass = makeSerializePropertySymbol( + factory.createPropertyDeclaration, + 175 /* MethodDeclaration */, + /*useAccessors*/ + true + ); + const serializePropertySymbolForInterfaceWorker = makeSerializePropertySymbol( + (mods, name, question, type) => factory.createPropertySignature(mods, name, question, type), + 174 /* MethodSignature */, + /*useAccessors*/ + false + ); + const enclosingDeclaration = context.enclosingDeclaration; + let results = []; + const visitedSymbols = /* @__PURE__ */ new Set(); + const deferredPrivatesStack = []; + const oldcontext = context; + context = { + ...oldcontext, + usedSymbolNames: new Set(oldcontext.usedSymbolNames), + remappedSymbolNames: /* @__PURE__ */ new Map(), + remappedSymbolReferences: new Map((_a = oldcontext.remappedSymbolReferences) == null ? void 0 : _a.entries()), + tracker: void 0 + }; + const tracker = { + ...oldcontext.tracker.inner, + trackSymbol: (sym, decl, meaning) => { + var _a2, _b; + if ((_a2 = context.remappedSymbolNames) == null ? void 0 : _a2.has(getSymbolId(sym))) return false; + const accessibleResult = isSymbolAccessible( + sym, + decl, + meaning, + /*shouldComputeAliasesToMakeVisible*/ + false + ); + if (accessibleResult.accessibility === 0 /* Accessible */) { + const chain = lookupSymbolChainWorker(sym, context, meaning); + if (!(sym.flags & 4 /* Property */)) { + const root = chain[0]; + const contextFile = getSourceFileOfNode(oldcontext.enclosingDeclaration); + if (some(root.declarations, (d) => getSourceFileOfNode(d) === contextFile)) { + includePrivateSymbol(root); + } + } + } else if ((_b = oldcontext.tracker.inner) == null ? void 0 : _b.trackSymbol) { + return oldcontext.tracker.inner.trackSymbol(sym, decl, meaning); + } + return false; + } + }; + context.tracker = new SymbolTrackerImpl(context, tracker, oldcontext.tracker.moduleResolverHost); + forEachEntry(symbolTable, (symbol, name) => { + const baseName = unescapeLeadingUnderscores(name); + void getInternalSymbolName(symbol, baseName); + }); + let addingDeclare = !context.bundled; + const exportEquals = symbolTable.get("export=" /* ExportEquals */); + if (exportEquals && symbolTable.size > 1 && exportEquals.flags & (2097152 /* Alias */ | 1536 /* Module */)) { + symbolTable = createSymbolTable(); + symbolTable.set("export=" /* ExportEquals */, exportEquals); + } + visitSymbolTable(symbolTable); + return mergeRedundantStatements(results); + function isIdentifierAndNotUndefined(node) { + return !!node && node.kind === 80 /* Identifier */; + } + function getNamesOfDeclaration(statement) { + if (isVariableStatement(statement)) { + return filter(map(statement.declarationList.declarations, getNameOfDeclaration), isIdentifierAndNotUndefined); + } + return filter([getNameOfDeclaration(statement)], isIdentifierAndNotUndefined); + } + function flattenExportAssignedNamespace(statements) { + const exportAssignment = find(statements, isExportAssignment); + const nsIndex = findIndex(statements, isModuleDeclaration); + let ns = nsIndex !== -1 ? statements[nsIndex] : void 0; + if (ns && exportAssignment && exportAssignment.isExportEquals && isIdentifier(exportAssignment.expression) && isIdentifier(ns.name) && idText(ns.name) === idText(exportAssignment.expression) && ns.body && isModuleBlock(ns.body)) { + const excessExports = filter(statements, (s) => !!(getEffectiveModifierFlags(s) & 32 /* Export */)); + const name = ns.name; + let body = ns.body; + if (length(excessExports)) { + ns = factory.updateModuleDeclaration( + ns, + ns.modifiers, + ns.name, + body = factory.updateModuleBlock( + body, + factory.createNodeArray([ + ...ns.body.statements, + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports(map(flatMap(excessExports, (e) => getNamesOfDeclaration(e)), (id) => factory.createExportSpecifier( + /*isTypeOnly*/ + false, + /*propertyName*/ + void 0, + id + ))), + /*moduleSpecifier*/ + void 0 + ) + ]) + ) + ); + statements = [...statements.slice(0, nsIndex), ns, ...statements.slice(nsIndex + 1)]; + } + if (!find(statements, (s) => s !== ns && nodeHasName(s, name))) { + results = []; + const mixinExportFlag = !some(body.statements, (s) => hasSyntacticModifier(s, 32 /* Export */) || isExportAssignment(s) || isExportDeclaration(s)); + forEach(body.statements, (s) => { + addResult(s, mixinExportFlag ? 32 /* Export */ : 0 /* None */); + }); + statements = [...filter(statements, (s) => s !== ns && s !== exportAssignment), ...results]; + } + } + return statements; + } + function mergeExportDeclarations(statements) { + const exports2 = filter(statements, (d) => isExportDeclaration(d) && !d.moduleSpecifier && !!d.exportClause && isNamedExports(d.exportClause)); + if (length(exports2) > 1) { + const nonExports = filter(statements, (d) => !isExportDeclaration(d) || !!d.moduleSpecifier || !d.exportClause); + statements = [ + ...nonExports, + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports(flatMap(exports2, (e) => cast(e.exportClause, isNamedExports).elements)), + /*moduleSpecifier*/ + void 0 + ) + ]; + } + const reexports = filter(statements, (d) => isExportDeclaration(d) && !!d.moduleSpecifier && !!d.exportClause && isNamedExports(d.exportClause)); + if (length(reexports) > 1) { + const groups = group(reexports, (decl) => isStringLiteral(decl.moduleSpecifier) ? ">" + decl.moduleSpecifier.text : ">"); + if (groups.length !== reexports.length) { + for (const group2 of groups) { + if (group2.length > 1) { + statements = [ + ...filter(statements, (s) => !group2.includes(s)), + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports(flatMap(group2, (e) => cast(e.exportClause, isNamedExports).elements)), + group2[0].moduleSpecifier + ) + ]; + } + } + } + } + return statements; + } + function inlineExportModifiers(statements) { + const index = findIndex(statements, (d) => isExportDeclaration(d) && !d.moduleSpecifier && !d.attributes && !!d.exportClause && isNamedExports(d.exportClause)); + if (index >= 0) { + const exportDecl = statements[index]; + const replacements = mapDefined(exportDecl.exportClause.elements, (e) => { + if (!e.propertyName && e.name.kind !== 11 /* StringLiteral */) { + const name = e.name; + const indices = indicesOf(statements); + const associatedIndices = filter(indices, (i) => nodeHasName(statements[i], name)); + if (length(associatedIndices) && every(associatedIndices, (i) => canHaveExportModifier(statements[i]))) { + for (const index2 of associatedIndices) { + statements[index2] = addExportModifier(statements[index2]); + } + return void 0; + } + } + return e; + }); + if (!length(replacements)) { + orderedRemoveItemAt(statements, index); + } else { + statements[index] = factory.updateExportDeclaration( + exportDecl, + exportDecl.modifiers, + exportDecl.isTypeOnly, + factory.updateNamedExports( + exportDecl.exportClause, + replacements + ), + exportDecl.moduleSpecifier, + exportDecl.attributes + ); + } + } + return statements; + } + function mergeRedundantStatements(statements) { + statements = flattenExportAssignedNamespace(statements); + statements = mergeExportDeclarations(statements); + statements = inlineExportModifiers(statements); + if (enclosingDeclaration && (isSourceFile(enclosingDeclaration) && isExternalOrCommonJsModule(enclosingDeclaration) || isModuleDeclaration(enclosingDeclaration)) && (!some(statements, isExternalModuleIndicator) || !hasScopeMarker(statements) && some(statements, needsScopeMarker))) { + statements.push(createEmptyExports(factory)); + } + return statements; + } + function addExportModifier(node) { + const flags = (getEffectiveModifierFlags(node) | 32 /* Export */) & ~128 /* Ambient */; + return factory.replaceModifiers(node, flags); + } + function removeExportModifier(node) { + const flags = getEffectiveModifierFlags(node) & ~32 /* Export */; + return factory.replaceModifiers(node, flags); + } + function visitSymbolTable(symbolTable2, suppressNewPrivateContext, propertyAsAlias) { + if (!suppressNewPrivateContext) { + deferredPrivatesStack.push(/* @__PURE__ */ new Map()); + } + let i = 0; + const symbols = Array.from(symbolTable2.values()); + for (const symbol of symbols) { + i++; + if (checkTruncationLengthIfExpanding(context) && i + 2 < symbolTable2.size - 1) { + context.out.truncated = true; + results.push(createTruncationStatement(`... (${symbolTable2.size - i} more ...)`)); + serializeSymbol( + symbols[symbols.length - 1], + /*isPrivate*/ + false, + !!propertyAsAlias + ); + break; + } + serializeSymbol( + symbol, + /*isPrivate*/ + false, + !!propertyAsAlias + ); + } + if (!suppressNewPrivateContext) { + deferredPrivatesStack[deferredPrivatesStack.length - 1].forEach((symbol) => { + serializeSymbol( + symbol, + /*isPrivate*/ + true, + !!propertyAsAlias + ); + }); + deferredPrivatesStack.pop(); + } + } + function serializeSymbol(symbol, isPrivate, propertyAsAlias) { + void getPropertiesOfType(getTypeOfSymbol(symbol)); + const visitedSym = getMergedSymbol(symbol); + if (visitedSymbols.has(getSymbolId(visitedSym))) { + return; + } + visitedSymbols.add(getSymbolId(visitedSym)); + const skipMembershipCheck = !isPrivate; + if (skipMembershipCheck || !!length(symbol.declarations) && some(symbol.declarations, (d) => !!findAncestor(d, (n) => n === enclosingDeclaration))) { + const scopeCleanup = cloneNodeBuilderContext(context); + context.tracker.pushErrorFallbackNode(find(symbol.declarations, (d) => getSourceFileOfNode(d) === context.enclosingFile)); + serializeSymbolWorker(symbol, isPrivate, propertyAsAlias); + context.tracker.popErrorFallbackNode(); + scopeCleanup(); + } + } + function serializeSymbolWorker(symbol, isPrivate, propertyAsAlias, escapedSymbolName = symbol.escapedName) { + var _a2, _b, _c, _d, _e, _f, _g; + const symbolName2 = unescapeLeadingUnderscores(escapedSymbolName); + const isDefault = escapedSymbolName === "default" /* Default */; + if (isPrivate && !(context.flags & 131072 /* AllowAnonymousIdentifier */) && isStringANonContextualKeyword(symbolName2) && !isDefault) { + context.encounteredError = true; + return; + } + let needsPostExportDefault = isDefault && !!(symbol.flags & -113 /* ExportDoesNotSupportDefaultModifier */ || symbol.flags & 16 /* Function */ && length(getPropertiesOfType(getTypeOfSymbol(symbol)))) && !(symbol.flags & 2097152 /* Alias */); + let needsExportDeclaration = !needsPostExportDefault && !isPrivate && isStringANonContextualKeyword(symbolName2) && !isDefault; + if (needsPostExportDefault || needsExportDeclaration) { + isPrivate = true; + } + const modifierFlags = (!isPrivate ? 32 /* Export */ : 0) | (isDefault && !needsPostExportDefault ? 2048 /* Default */ : 0); + const isConstMergedWithNS = symbol.flags & 1536 /* Module */ && symbol.flags & (2 /* BlockScopedVariable */ | 1 /* FunctionScopedVariable */ | 4 /* Property */) && escapedSymbolName !== "export=" /* ExportEquals */; + const isConstMergedWithNSPrintableAsSignatureMerge = isConstMergedWithNS && isTypeRepresentableAsFunctionNamespaceMerge(getTypeOfSymbol(symbol), symbol); + if (symbol.flags & (16 /* Function */ | 8192 /* Method */) || isConstMergedWithNSPrintableAsSignatureMerge) { + serializeAsFunctionNamespaceMerge(getTypeOfSymbol(symbol), symbol, getInternalSymbolName(symbol, symbolName2), modifierFlags); + } + if (symbol.flags & 524288 /* TypeAlias */) { + serializeTypeAlias(symbol, symbolName2, modifierFlags); + } + if (symbol.flags & (2 /* BlockScopedVariable */ | 1 /* FunctionScopedVariable */ | 4 /* Property */ | 98304 /* Accessor */) && escapedSymbolName !== "export=" /* ExportEquals */ && !(symbol.flags & 4194304 /* Prototype */) && !(symbol.flags & 32 /* Class */) && !(symbol.flags & 8192 /* Method */) && !isConstMergedWithNSPrintableAsSignatureMerge) { + if (propertyAsAlias) { + const createdExport = serializeMaybeAliasAssignment(symbol); + if (createdExport) { + needsExportDeclaration = false; + needsPostExportDefault = false; + } + } else { + const type = getTypeOfSymbol(symbol); + const localName = getInternalSymbolName(symbol, symbolName2); + if (type.symbol && type.symbol !== symbol && type.symbol.flags & 16 /* Function */ && some(type.symbol.declarations, isFunctionExpressionOrArrowFunction) && (((_a2 = type.symbol.members) == null ? void 0 : _a2.size) || ((_b = type.symbol.exports) == null ? void 0 : _b.size))) { + if (!context.remappedSymbolReferences) { + context.remappedSymbolReferences = /* @__PURE__ */ new Map(); + } + context.remappedSymbolReferences.set(getSymbolId(type.symbol), symbol); + serializeSymbolWorker(type.symbol, isPrivate, propertyAsAlias, escapedSymbolName); + context.remappedSymbolReferences.delete(getSymbolId(type.symbol)); + } else if (!(symbol.flags & 16 /* Function */) && isTypeRepresentableAsFunctionNamespaceMerge(type, symbol)) { + serializeAsFunctionNamespaceMerge(type, symbol, localName, modifierFlags); + } else { + const flags = !(symbol.flags & 2 /* BlockScopedVariable */) ? ((_c = symbol.parent) == null ? void 0 : _c.valueDeclaration) && isSourceFile((_d = symbol.parent) == null ? void 0 : _d.valueDeclaration) ? 2 /* Const */ : void 0 : isConstantVariable(symbol) ? 2 /* Const */ : 1 /* Let */; + const name = needsPostExportDefault || !(symbol.flags & 4 /* Property */) ? localName : getUnusedName(localName, symbol); + let textRange = symbol.declarations && find(symbol.declarations, (d) => isVariableDeclaration(d)); + if (textRange && isVariableDeclarationList(textRange.parent) && textRange.parent.declarations.length === 1) { + textRange = textRange.parent.parent; + } + const propertyAccessRequire = (_e = symbol.declarations) == null ? void 0 : _e.find(isPropertyAccessExpression); + if (propertyAccessRequire && isBinaryExpression(propertyAccessRequire.parent) && isIdentifier(propertyAccessRequire.parent.right) && ((_f = type.symbol) == null ? void 0 : _f.valueDeclaration) && isSourceFile(type.symbol.valueDeclaration)) { + const alias = localName === propertyAccessRequire.parent.right.escapedText ? void 0 : propertyAccessRequire.parent.right; + context.approximateLength += 12 + (((_g = alias == null ? void 0 : alias.escapedText) == null ? void 0 : _g.length) ?? 0); + addResult( + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + alias, + localName + )]) + ), + 0 /* None */ + ); + context.tracker.trackSymbol(type.symbol, context.enclosingDeclaration, 111551 /* Value */); + } else { + const statement = setTextRange2( + context, + factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + serializeTypeForDeclaration( + context, + /*declaration*/ + void 0, + type, + symbol + ) + ) + ], flags) + ), + textRange + ); + context.approximateLength += 7 + name.length; + addResult(statement, name !== localName ? modifierFlags & ~32 /* Export */ : modifierFlags); + if (name !== localName && !isPrivate) { + context.approximateLength += 16 + name.length + localName.length; + addResult( + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + name, + localName + )]) + ), + 0 /* None */ + ); + needsExportDeclaration = false; + needsPostExportDefault = false; + } + } + } + } + } + if (symbol.flags & 384 /* Enum */) { + serializeEnum(symbol, symbolName2, modifierFlags); + } + if (symbol.flags & 32 /* Class */) { + if (symbol.flags & 4 /* Property */ && symbol.valueDeclaration && isBinaryExpression(symbol.valueDeclaration.parent) && isClassExpression(symbol.valueDeclaration.parent.right)) { + serializeAsAlias(symbol, getInternalSymbolName(symbol, symbolName2), modifierFlags); + } else { + serializeAsClass(symbol, getInternalSymbolName(symbol, symbolName2), modifierFlags); + } + } + if (symbol.flags & (512 /* ValueModule */ | 1024 /* NamespaceModule */) && (!isConstMergedWithNS || isTypeOnlyNamespace(symbol)) || isConstMergedWithNSPrintableAsSignatureMerge) { + serializeModule(symbol, symbolName2, modifierFlags); + } + if (symbol.flags & 64 /* Interface */ && !(symbol.flags & 32 /* Class */)) { + serializeInterface(symbol, symbolName2, modifierFlags); + } + if (symbol.flags & 2097152 /* Alias */) { + serializeAsAlias(symbol, getInternalSymbolName(symbol, symbolName2), modifierFlags); + } + if (symbol.flags & 4 /* Property */ && symbol.escapedName === "export=" /* ExportEquals */) { + serializeMaybeAliasAssignment(symbol); + } + if (symbol.flags & 8388608 /* ExportStar */) { + if (symbol.declarations) { + for (const node of symbol.declarations) { + const resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier); + if (!resolvedModule) continue; + const isTypeOnly = node.isTypeOnly; + const specifier = getSpecifierForModuleSymbol(resolvedModule, context); + context.approximateLength += 17 + specifier.length; + addResult(factory.createExportDeclaration( + /*modifiers*/ + void 0, + isTypeOnly, + /*exportClause*/ + void 0, + factory.createStringLiteral(specifier) + ), 0 /* None */); + } + } + } + if (needsPostExportDefault) { + const internalSymbolName = getInternalSymbolName(symbol, symbolName2); + context.approximateLength += 16 + internalSymbolName.length; + addResult(factory.createExportAssignment( + /*modifiers*/ + void 0, + /*isExportEquals*/ + false, + factory.createIdentifier(internalSymbolName) + ), 0 /* None */); + } else if (needsExportDeclaration) { + const internalSymbolName = getInternalSymbolName(symbol, symbolName2); + context.approximateLength += 22 + symbolName2.length + internalSymbolName.length; + addResult( + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + internalSymbolName, + symbolName2 + )]) + ), + 0 /* None */ + ); + } + } + function includePrivateSymbol(symbol) { + if (some(symbol.declarations, isPartOfParameterDeclaration)) return; + Debug.assertIsDefined(deferredPrivatesStack[deferredPrivatesStack.length - 1]); + getUnusedName(unescapeLeadingUnderscores(symbol.escapedName), symbol); + const isExternalImportAlias = !!(symbol.flags & 2097152 /* Alias */) && !some(symbol.declarations, (d) => !!findAncestor(d, isExportDeclaration) || isNamespaceExport(d) || isImportEqualsDeclaration(d) && !isExternalModuleReference(d.moduleReference)); + deferredPrivatesStack[isExternalImportAlias ? 0 : deferredPrivatesStack.length - 1].set(getSymbolId(symbol), symbol); + } + function isExportingScope(enclosingDeclaration2) { + return isSourceFile(enclosingDeclaration2) && (isExternalOrCommonJsModule(enclosingDeclaration2) || isJsonSourceFile(enclosingDeclaration2)) || isAmbientModule(enclosingDeclaration2) && !isGlobalScopeAugmentation(enclosingDeclaration2); + } + function addResult(node, additionalModifierFlags) { + if (canHaveModifiers(node)) { + const oldModifierFlags = getEffectiveModifierFlags(node); + let newModifierFlags = 0 /* None */; + const enclosingDeclaration2 = context.enclosingDeclaration && (isJSDocTypeAlias(context.enclosingDeclaration) ? getSourceFileOfNode(context.enclosingDeclaration) : context.enclosingDeclaration); + if (additionalModifierFlags & 32 /* Export */ && enclosingDeclaration2 && (isExportingScope(enclosingDeclaration2) || isModuleDeclaration(enclosingDeclaration2)) && canHaveExportModifier(node)) { + newModifierFlags |= 32 /* Export */; + } + if (addingDeclare && !(newModifierFlags & 32 /* Export */) && (!enclosingDeclaration2 || !(enclosingDeclaration2.flags & 33554432 /* Ambient */)) && (isEnumDeclaration(node) || isVariableStatement(node) || isFunctionDeclaration(node) || isClassDeclaration(node) || isModuleDeclaration(node))) { + newModifierFlags |= 128 /* Ambient */; + } + if (additionalModifierFlags & 2048 /* Default */ && (isClassDeclaration(node) || isInterfaceDeclaration(node) || isFunctionDeclaration(node))) { + newModifierFlags |= 2048 /* Default */; + } + if (newModifierFlags) { + node = factory.replaceModifiers(node, newModifierFlags | oldModifierFlags); + } + context.approximateLength += modifiersLength(newModifierFlags | oldModifierFlags); + } + results.push(node); + } + function serializeTypeAlias(symbol, symbolName2, modifierFlags) { + var _a2; + const aliasType = getDeclaredTypeOfTypeAlias(symbol); + const typeParams = getSymbolLinks(symbol).typeParameters; + const typeParamDecls = map(typeParams, (p) => typeParameterToDeclaration(p, context)); + const jsdocAliasDecl = (_a2 = symbol.declarations) == null ? void 0 : _a2.find(isJSDocTypeAlias); + const commentText = getTextOfJSDocComment(jsdocAliasDecl ? jsdocAliasDecl.comment || jsdocAliasDecl.parent.comment : void 0); + const restoreFlags = saveRestoreFlags(context); + context.flags |= 8388608 /* InTypeAlias */; + const oldEnclosingDecl = context.enclosingDeclaration; + context.enclosingDeclaration = jsdocAliasDecl; + const typeNode = jsdocAliasDecl && jsdocAliasDecl.typeExpression && isJSDocTypeExpression(jsdocAliasDecl.typeExpression) && syntacticNodeBuilder.tryReuseExistingTypeNode(context, jsdocAliasDecl.typeExpression.type) || typeToTypeNodeHelper(aliasType, context); + const internalSymbolName = getInternalSymbolName(symbol, symbolName2); + context.approximateLength += 8 + ((commentText == null ? void 0 : commentText.length) ?? 0) + internalSymbolName.length; + addResult( + setSyntheticLeadingComments( + factory.createTypeAliasDeclaration( + /*modifiers*/ + void 0, + internalSymbolName, + typeParamDecls, + typeNode + ), + !commentText ? [] : [{ kind: 3 /* MultiLineCommentTrivia */, text: "*\n * " + commentText.replace(/\n/g, "\n * ") + "\n ", pos: -1, end: -1, hasTrailingNewLine: true }] + ), + modifierFlags + ); + restoreFlags(); + context.enclosingDeclaration = oldEnclosingDecl; + } + function serializeInterface(symbol, symbolName2, modifierFlags) { + const internalSymbolName = getInternalSymbolName(symbol, symbolName2); + context.approximateLength += 14 + internalSymbolName.length; + const interfaceType = getDeclaredTypeOfClassOrInterface(symbol); + const localParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + const typeParamDecls = map(localParams, (p) => typeParameterToDeclaration(p, context)); + const baseTypes = getBaseTypes(interfaceType); + const baseType = length(baseTypes) ? getIntersectionType(baseTypes) : void 0; + const members = serializePropertySymbolsForClassOrInterface( + getPropertiesOfType(interfaceType), + /*isClass*/ + false, + baseType + ); + const callSignatures = serializeSignatures(0 /* Call */, interfaceType, baseType, 180 /* CallSignature */); + const constructSignatures = serializeSignatures(1 /* Construct */, interfaceType, baseType, 181 /* ConstructSignature */); + const indexSignatures = serializeIndexSignatures(interfaceType, baseType); + const heritageClauses = !length(baseTypes) ? void 0 : [factory.createHeritageClause(96 /* ExtendsKeyword */, mapDefined(baseTypes, (b) => trySerializeAsTypeReference(b, 111551 /* Value */)))]; + addResult( + factory.createInterfaceDeclaration( + /*modifiers*/ + void 0, + internalSymbolName, + typeParamDecls, + heritageClauses, + [...indexSignatures, ...constructSignatures, ...callSignatures, ...members] + ), + modifierFlags + ); + } + function serializePropertySymbolsForClassOrInterface(props, isClass, baseType, isStatic2) { + const elements = []; + let i = 0; + for (const prop of props) { + i++; + if (checkTruncationLengthIfExpanding(context) && i + 2 < props.length - 1) { + context.out.truncated = true; + const placeholder = createTruncationProperty(`... ${props.length - i} more ... `, isClass); + elements.push(placeholder); + const result2 = isClass ? serializePropertySymbolForClass(props[props.length - 1], isStatic2, baseType) : serializePropertySymbolForInterface(props[props.length - 1], baseType); + if (isArray(result2)) { + elements.push(...result2); + } else { + elements.push(result2); + } + break; + } + context.approximateLength += 1; + const result = isClass ? serializePropertySymbolForClass(prop, isStatic2, baseType) : serializePropertySymbolForInterface(prop, baseType); + if (isArray(result)) { + elements.push(...result); + } else { + elements.push(result); + } + } + return elements; + } + function createTruncationProperty(dotDotDotText, isClass) { + if (context.flags & 1 /* NoTruncation */) { + return addSyntheticLeadingComment(factory.createNotEmittedTypeElement(), 3 /* MultiLineCommentTrivia */, dotDotDotText); + } + return isClass ? factory.createPropertyDeclaration( + /*modifiers*/ + void 0, + dotDotDotText, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ) : factory.createPropertySignature( + /*modifiers*/ + void 0, + dotDotDotText, + /*questionToken*/ + void 0, + /*type*/ + void 0 + ); + } + function getNamespaceMembersForSerialization(symbol) { + let exports2 = arrayFrom(getExportsOfSymbol(symbol).values()); + const merged = getMergedSymbol(symbol); + if (merged !== symbol) { + const membersSet = new Set(exports2); + for (const exported of getExportsOfSymbol(merged).values()) { + if (!(getSymbolFlags(resolveSymbol(exported)) & 111551 /* Value */)) { + membersSet.add(exported); + } + } + exports2 = arrayFrom(membersSet); + } + return filter(exports2, (m) => isNamespaceMember(m) && isIdentifierText(m.escapedName, 99 /* ESNext */)); + } + function isTypeOnlyNamespace(symbol) { + return every(getNamespaceMembersForSerialization(symbol), (m) => !(getSymbolFlags(resolveSymbol(m)) & 111551 /* Value */)); + } + function serializeModule(symbol, symbolName2, modifierFlags) { + const members = getNamespaceMembersForSerialization(symbol); + const expanding = isExpanding(context); + const locationMap = arrayToMultiMap(members, (m) => m.parent && m.parent === symbol || expanding ? "real" : "merged"); + const realMembers = locationMap.get("real") || emptyArray; + const mergedMembers = locationMap.get("merged") || emptyArray; + if (length(realMembers) || expanding) { + let localName; + if (expanding) { + const oldFlags = context.flags; + context.flags |= 512 /* WriteTypeParametersInQualifiedName */ | 2 /* UseOnlyExternalAliasing */; + localName = symbolToNode( + symbol, + context, + /*meaning*/ + -1 /* All */ + ); + context.flags = oldFlags; + } else { + const localText = getInternalSymbolName(symbol, symbolName2); + localName = factory.createIdentifier(localText); + context.approximateLength += localText.length; + } + serializeAsNamespaceDeclaration(realMembers, localName, modifierFlags, !!(symbol.flags & (16 /* Function */ | 67108864 /* Assignment */))); + } + if (length(mergedMembers)) { + const containingFile = getSourceFileOfNode(context.enclosingDeclaration); + const localName = getInternalSymbolName(symbol, symbolName2); + const nsBody = factory.createModuleBlock([factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports(mapDefined(filter(mergedMembers, (n) => n.escapedName !== "export=" /* ExportEquals */), (s) => { + var _a2, _b; + const name = unescapeLeadingUnderscores(s.escapedName); + const localName2 = getInternalSymbolName(s, name); + const aliasDecl = s.declarations && getDeclarationOfAliasSymbol(s); + if (containingFile && (aliasDecl ? containingFile !== getSourceFileOfNode(aliasDecl) : !some(s.declarations, (d) => getSourceFileOfNode(d) === containingFile))) { + (_b = (_a2 = context.tracker) == null ? void 0 : _a2.reportNonlocalAugmentation) == null ? void 0 : _b.call(_a2, containingFile, symbol, s); + return void 0; + } + const target = aliasDecl && getTargetOfAliasDeclaration( + aliasDecl, + /*dontRecursivelyResolve*/ + true + ); + includePrivateSymbol(target || s); + const targetName = target ? getInternalSymbolName(target, unescapeLeadingUnderscores(target.escapedName)) : localName2; + return factory.createExportSpecifier( + /*isTypeOnly*/ + false, + name === targetName ? void 0 : targetName, + name + ); + })) + )]); + addResult( + factory.createModuleDeclaration( + /*modifiers*/ + void 0, + factory.createIdentifier(localName), + nsBody, + 32 /* Namespace */ + ), + 0 /* None */ + ); + } + } + function serializeEnum(symbol, symbolName2, modifierFlags) { + const internalSymbolName = getInternalSymbolName(symbol, symbolName2); + context.approximateLength += 9 + internalSymbolName.length; + const members = []; + const memberProps = filter(getPropertiesOfType(getTypeOfSymbol(symbol)), (p) => !!(p.flags & 8 /* EnumMember */)); + let i = 0; + for (const p of memberProps) { + i++; + if (checkTruncationLengthIfExpanding(context) && i + 2 < memberProps.length - 1) { + context.out.truncated = true; + members.push(factory.createEnumMember(` ... ${memberProps.length - i} more ... `)); + const last2 = memberProps[memberProps.length - 1]; + const initializedValue = last2.declarations && last2.declarations[0] && isEnumMember(last2.declarations[0]) ? getConstantValue2(last2.declarations[0]) : void 0; + const initializer2 = initializedValue === void 0 ? void 0 : typeof initializedValue === "string" ? factory.createStringLiteral(initializedValue) : factory.createNumericLiteral(initializedValue); + const memberName2 = unescapeLeadingUnderscores(last2.escapedName); + const member2 = factory.createEnumMember( + memberName2, + initializer2 + ); + members.push(member2); + break; + } + const memberDecl = p.declarations && p.declarations[0] && isEnumMember(p.declarations[0]) ? p.declarations[0] : void 0; + let initializer; + let initializerLength; + if (isExpanding(context) && memberDecl && memberDecl.initializer) { + initializer = getSynthesizedDeepClone(memberDecl.initializer); + initializerLength = memberDecl.initializer.end - memberDecl.initializer.pos; + } else { + const initializedValue = memberDecl && getConstantValue2(memberDecl); + initializer = initializedValue === void 0 ? void 0 : typeof initializedValue === "string" ? factory.createStringLiteral(initializedValue) : factory.createNumericLiteral(initializedValue); + initializerLength = (initializer == null ? void 0 : initializer.text.length) ?? 0; + } + const memberName = unescapeLeadingUnderscores(p.escapedName); + context.approximateLength += 4 + memberName.length + initializerLength; + const member = factory.createEnumMember( + memberName, + initializer + ); + members.push(member); + } + addResult( + factory.createEnumDeclaration( + factory.createModifiersFromModifierFlags(isConstEnumSymbol(symbol) ? 4096 /* Const */ : 0), + internalSymbolName, + members + ), + modifierFlags + ); + } + function serializeAsFunctionNamespaceMerge(type, symbol, localName, modifierFlags) { + const signatures = getSignaturesOfType(type, 0 /* Call */); + for (const sig of signatures) { + context.approximateLength += 1; + const decl = signatureToSignatureDeclarationHelper(sig, 263 /* FunctionDeclaration */, context, { name: factory.createIdentifier(localName) }); + addResult(setTextRange2(context, decl, getSignatureTextRangeLocation(sig)), modifierFlags); + } + if (!(symbol.flags & (512 /* ValueModule */ | 1024 /* NamespaceModule */) && !!symbol.exports && !!symbol.exports.size)) { + const props = filter(getPropertiesOfType(type), isNamespaceMember); + context.approximateLength += localName.length; + serializeAsNamespaceDeclaration( + props, + factory.createIdentifier(localName), + modifierFlags, + /*suppressNewPrivateContext*/ + true + ); + } + } + function createTruncationStatement(dotDotDotText) { + if (context.flags & 1 /* NoTruncation */) { + return addSyntheticLeadingComment(factory.createEmptyStatement(), 3 /* MultiLineCommentTrivia */, dotDotDotText); + } + return factory.createExpressionStatement(factory.createIdentifier(dotDotDotText)); + } + function getSignatureTextRangeLocation(signature) { + if (signature.declaration && signature.declaration.parent) { + if (isBinaryExpression(signature.declaration.parent) && getAssignmentDeclarationKind(signature.declaration.parent) === 5 /* Property */) { + return signature.declaration.parent; + } + if (isVariableDeclaration(signature.declaration.parent) && signature.declaration.parent.parent) { + return signature.declaration.parent.parent; + } + } + return signature.declaration; + } + function serializeAsNamespaceDeclaration(props, localName, modifierFlags, suppressNewPrivateContext) { + const nodeFlags = isIdentifier(localName) ? 32 /* Namespace */ : 0 /* None */; + const expanding = isExpanding(context); + if (length(props)) { + context.approximateLength += 14; + const localVsRemoteMap = arrayToMultiMap(props, (p) => !length(p.declarations) || some(p.declarations, (d) => getSourceFileOfNode(d) === getSourceFileOfNode(context.enclosingDeclaration)) || expanding ? "local" : "remote"); + const localProps = localVsRemoteMap.get("local") || emptyArray; + let fakespace = parseNodeFactory.createModuleDeclaration( + /*modifiers*/ + void 0, + localName, + factory.createModuleBlock([]), + nodeFlags + ); + setParent(fakespace, enclosingDeclaration); + fakespace.locals = createSymbolTable(props); + fakespace.symbol = props[0].parent; + const oldResults = results; + results = []; + const oldAddingDeclare = addingDeclare; + addingDeclare = false; + const subcontext = { ...context, enclosingDeclaration: fakespace }; + const oldContext = context; + context = subcontext; + visitSymbolTable( + createSymbolTable(localProps), + suppressNewPrivateContext, + /*propertyAsAlias*/ + true + ); + context = oldContext; + addingDeclare = oldAddingDeclare; + const declarations = results; + results = oldResults; + const defaultReplaced = map(declarations, (d) => isExportAssignment(d) && !d.isExportEquals && isIdentifier(d.expression) ? factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + d.expression, + factory.createIdentifier("default" /* Default */) + )]) + ) : d); + const exportModifierStripped = every(defaultReplaced, (d) => hasSyntacticModifier(d, 32 /* Export */)) ? map(defaultReplaced, removeExportModifier) : defaultReplaced; + fakespace = factory.updateModuleDeclaration( + fakespace, + fakespace.modifiers, + fakespace.name, + factory.createModuleBlock(exportModifierStripped) + ); + addResult(fakespace, modifierFlags); + } else if (expanding) { + context.approximateLength += 14; + addResult( + factory.createModuleDeclaration( + /*modifiers*/ + void 0, + localName, + factory.createModuleBlock([]), + nodeFlags + ), + modifierFlags + ); + } + } + function isNamespaceMember(p) { + return !!(p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) || !(p.flags & 4194304 /* Prototype */ || p.escapedName === "prototype" || p.valueDeclaration && isStatic(p.valueDeclaration) && isClassLike(p.valueDeclaration.parent)); + } + function sanitizeJSDocImplements(clauses) { + const result = mapDefined(clauses, (e) => { + const oldEnclosing = context.enclosingDeclaration; + context.enclosingDeclaration = e; + let expr = e.expression; + if (isEntityNameExpression(expr)) { + if (isIdentifier(expr) && idText(expr) === "") { + return cleanup( + /*result*/ + void 0 + ); + } + let introducesError; + ({ introducesError, node: expr } = trackExistingEntityName(expr, context)); + if (introducesError) { + return cleanup( + /*result*/ + void 0 + ); + } + } + return cleanup(factory.createExpressionWithTypeArguments( + expr, + map(e.typeArguments, (a) => syntacticNodeBuilder.tryReuseExistingTypeNode(context, a) || typeToTypeNodeHelper(getTypeFromTypeNode2(context, a), context)) + )); + function cleanup(result2) { + context.enclosingDeclaration = oldEnclosing; + return result2; + } + }); + if (result.length === clauses.length) { + return result; + } + return void 0; + } + function serializeAsClass(symbol, localName, modifierFlags) { + var _a2, _b; + context.approximateLength += 9 + localName.length; + const originalDecl = (_a2 = symbol.declarations) == null ? void 0 : _a2.find(isClassLike); + const oldEnclosing = context.enclosingDeclaration; + context.enclosingDeclaration = originalDecl || oldEnclosing; + const localParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + const typeParamDecls = map(localParams, (p) => typeParameterToDeclaration(p, context)); + forEach(localParams, (p) => context.approximateLength += symbolName(p.symbol).length); + const classType = getTypeWithThisArgument(getDeclaredTypeOfClassOrInterface(symbol)); + const baseTypes = getBaseTypes(classType); + const originalImplements = originalDecl && getEffectiveImplementsTypeNodes(originalDecl); + const implementsExpressions = originalImplements && sanitizeJSDocImplements(originalImplements) || mapDefined(getImplementsTypes(classType), serializeImplementedType); + const staticType = getTypeOfSymbol(symbol); + const isClass = !!((_b = staticType.symbol) == null ? void 0 : _b.valueDeclaration) && isClassLike(staticType.symbol.valueDeclaration); + const staticBaseType = isClass ? getBaseConstructorTypeOfClass(staticType) : anyType; + context.approximateLength += (length(baseTypes) ? 8 : 0) + (length(implementsExpressions) ? 11 : 0); + const heritageClauses = [ + ...!length(baseTypes) ? [] : [factory.createHeritageClause(96 /* ExtendsKeyword */, map(baseTypes, (b) => serializeBaseType(b, staticBaseType, localName)))], + ...!length(implementsExpressions) ? [] : [factory.createHeritageClause(119 /* ImplementsKeyword */, implementsExpressions)] + ]; + const symbolProps = getNonInheritedProperties(classType, baseTypes, getPropertiesOfType(classType)); + const publicSymbolProps = filter(symbolProps, (s) => !isHashPrivate(s)); + const hasPrivateIdentifier = some(symbolProps, isHashPrivate); + const privateProperties = hasPrivateIdentifier ? isExpanding(context) ? serializePropertySymbolsForClassOrInterface( + filter(symbolProps, isHashPrivate), + /*isClass*/ + true, + baseTypes[0], + /*isStatic*/ + false + ) : [factory.createPropertyDeclaration( + /*modifiers*/ + void 0, + factory.createPrivateIdentifier("#private"), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + )] : emptyArray; + if (hasPrivateIdentifier && !isExpanding(context)) { + context.approximateLength += 9; + } + const publicProperties = serializePropertySymbolsForClassOrInterface( + publicSymbolProps, + /*isClass*/ + true, + baseTypes[0], + /*isStatic*/ + false + ); + const staticMembers = serializePropertySymbolsForClassOrInterface( + filter(getPropertiesOfType(staticType), (p) => !(p.flags & 4194304 /* Prototype */) && p.escapedName !== "prototype" && !isNamespaceMember(p)), + /*isClass*/ + true, + staticBaseType, + /*isStatic*/ + true + ); + const isNonConstructableClassLikeInJsFile = !isClass && !!symbol.valueDeclaration && isInJSFile(symbol.valueDeclaration) && !some(getSignaturesOfType(staticType, 1 /* Construct */)); + if (isNonConstructableClassLikeInJsFile) context.approximateLength += 21; + const constructors = isNonConstructableClassLikeInJsFile ? [factory.createConstructorDeclaration( + factory.createModifiersFromModifierFlags(2 /* Private */), + [], + /*body*/ + void 0 + )] : serializeSignatures(1 /* Construct */, staticType, staticBaseType, 177 /* Constructor */); + const indexSignatures = serializeIndexSignatures(classType, baseTypes[0]); + context.enclosingDeclaration = oldEnclosing; + addResult( + setTextRange2( + context, + factory.createClassDeclaration( + /*modifiers*/ + void 0, + localName, + typeParamDecls, + heritageClauses, + [...indexSignatures, ...staticMembers, ...constructors, ...publicProperties, ...privateProperties] + ), + symbol.declarations && filter(symbol.declarations, (d) => isClassDeclaration(d) || isClassExpression(d))[0] + ), + modifierFlags + ); + } + function getSomeTargetNameFromDeclarations(declarations) { + return firstDefined(declarations, (d) => { + if (isImportSpecifier(d) || isExportSpecifier(d)) { + return moduleExportNameTextUnescaped(d.propertyName || d.name); + } + if (isBinaryExpression(d) || isExportAssignment(d)) { + const expression = isExportAssignment(d) ? d.expression : d.right; + if (isPropertyAccessExpression(expression)) { + return idText(expression.name); + } + } + if (isAliasSymbolDeclaration(d)) { + const name = getNameOfDeclaration(d); + if (name && isIdentifier(name)) { + return idText(name); + } + } + return void 0; + }); + } + function serializeAsAlias(symbol, localName, modifierFlags) { + var _a2, _b, _c, _d, _e; + const node = getDeclarationOfAliasSymbol(symbol); + if (!node) return Debug.fail(); + const target = getMergedSymbol(getTargetOfAliasDeclaration( + node, + /*dontRecursivelyResolve*/ + true + )); + if (!target) { + return; + } + let verbatimTargetName = isShorthandAmbientModuleSymbol(target) && getSomeTargetNameFromDeclarations(symbol.declarations) || unescapeLeadingUnderscores(target.escapedName); + if (verbatimTargetName === "export=" /* ExportEquals */ && allowSyntheticDefaultImports) { + verbatimTargetName = "default" /* Default */; + } + const targetName = getInternalSymbolName(target, verbatimTargetName); + includePrivateSymbol(target); + switch (node.kind) { + case 209 /* BindingElement */: + if (((_b = (_a2 = node.parent) == null ? void 0 : _a2.parent) == null ? void 0 : _b.kind) === 261 /* VariableDeclaration */) { + const specifier2 = getSpecifierForModuleSymbol(target.parent || target, context); + const { propertyName } = node; + const propertyNameText = propertyName && isIdentifier(propertyName) ? idText(propertyName) : void 0; + context.approximateLength += 24 + localName.length + specifier2.length + ((propertyNameText == null ? void 0 : propertyNameText.length) ?? 0); + addResult( + factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + /*phaseModifier*/ + void 0, + /*name*/ + void 0, + factory.createNamedImports([factory.createImportSpecifier( + /*isTypeOnly*/ + false, + propertyNameText ? factory.createIdentifier(propertyNameText) : void 0, + factory.createIdentifier(localName) + )]) + ), + factory.createStringLiteral(specifier2), + /*attributes*/ + void 0 + ), + 0 /* None */ + ); + break; + } + Debug.failBadSyntaxKind(((_c = node.parent) == null ? void 0 : _c.parent) || node, "Unhandled binding element grandparent kind in declaration serialization"); + break; + case 305 /* ShorthandPropertyAssignment */: + if (((_e = (_d = node.parent) == null ? void 0 : _d.parent) == null ? void 0 : _e.kind) === 227 /* BinaryExpression */) { + serializeExportSpecifier( + unescapeLeadingUnderscores(symbol.escapedName), + targetName + ); + } + break; + case 261 /* VariableDeclaration */: + if (isPropertyAccessExpression(node.initializer)) { + const initializer = node.initializer; + const uniqueName = factory.createUniqueName(localName); + const specifier2 = getSpecifierForModuleSymbol(target.parent || target, context); + context.approximateLength += 22 + specifier2.length + idText(uniqueName).length; + addResult( + factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + uniqueName, + factory.createExternalModuleReference(factory.createStringLiteral(specifier2)) + ), + 0 /* None */ + ); + context.approximateLength += 12 + localName.length + idText(uniqueName).length + idText(initializer.name).length; + addResult( + factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createIdentifier(localName), + factory.createQualifiedName(uniqueName, initializer.name) + ), + modifierFlags + ); + break; + } + // else fall through and treat commonjs require just like import= + case 272 /* ImportEqualsDeclaration */: + if (target.escapedName === "export=" /* ExportEquals */ && some(target.declarations, (d) => isSourceFile(d) && isJsonSourceFile(d))) { + serializeMaybeAliasAssignment(symbol); + break; + } + const isLocalImport = !(target.flags & 512 /* ValueModule */) && !isVariableDeclaration(node); + context.approximateLength += 11 + localName.length + unescapeLeadingUnderscores(target.escapedName).length; + addResult( + factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createIdentifier(localName), + isLocalImport ? symbolToName( + target, + context, + -1 /* All */, + /*expectsIdentifier*/ + false + ) : factory.createExternalModuleReference(factory.createStringLiteral(getSpecifierForModuleSymbol(target, context))) + ), + isLocalImport ? modifierFlags : 0 /* None */ + ); + break; + case 271 /* NamespaceExportDeclaration */: + addResult(factory.createNamespaceExportDeclaration(idText(node.name)), 0 /* None */); + break; + case 274 /* ImportClause */: { + const generatedSpecifier = getSpecifierForModuleSymbol(target.parent || target, context); + const specifier2 = context.bundled ? factory.createStringLiteral(generatedSpecifier) : node.parent.moduleSpecifier; + const attributes = isImportDeclaration(node.parent) ? node.parent.attributes : void 0; + const isTypeOnly = isJSDocImportTag(node.parent); + context.approximateLength += 14 + localName.length + 3 + (isTypeOnly ? 4 : 0); + addResult( + factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + /* phaseModifier */ + isTypeOnly ? 156 /* TypeKeyword */ : void 0, + factory.createIdentifier(localName), + /*namedBindings*/ + void 0 + ), + specifier2, + attributes + ), + 0 /* None */ + ); + break; + } + case 275 /* NamespaceImport */: { + const generatedSpecifier = getSpecifierForModuleSymbol(target.parent || target, context); + const specifier2 = context.bundled ? factory.createStringLiteral(generatedSpecifier) : node.parent.parent.moduleSpecifier; + const isTypeOnly = isJSDocImportTag(node.parent.parent); + context.approximateLength += 19 + localName.length + 3 + (isTypeOnly ? 4 : 0); + addResult( + factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + /* phaseModifier */ + isTypeOnly ? 156 /* TypeKeyword */ : void 0, + /*name*/ + void 0, + factory.createNamespaceImport(factory.createIdentifier(localName)) + ), + specifier2, + node.parent.attributes + ), + 0 /* None */ + ); + break; + } + case 281 /* NamespaceExport */: + context.approximateLength += 19 + localName.length + 3; + addResult( + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamespaceExport(factory.createIdentifier(localName)), + factory.createStringLiteral(getSpecifierForModuleSymbol(target, context)) + ), + 0 /* None */ + ); + break; + case 277 /* ImportSpecifier */: { + const generatedSpecifier = getSpecifierForModuleSymbol(target.parent || target, context); + const specifier2 = context.bundled ? factory.createStringLiteral(generatedSpecifier) : node.parent.parent.parent.moduleSpecifier; + const isTypeOnly = isJSDocImportTag(node.parent.parent.parent); + context.approximateLength += 19 + localName.length + 3 + (isTypeOnly ? 4 : 0); + addResult( + factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + /* phaseModifier */ + isTypeOnly ? 156 /* TypeKeyword */ : void 0, + /*name*/ + void 0, + factory.createNamedImports([ + factory.createImportSpecifier( + /*isTypeOnly*/ + false, + localName !== verbatimTargetName ? factory.createIdentifier(verbatimTargetName) : void 0, + factory.createIdentifier(localName) + ) + ]) + ), + specifier2, + node.parent.parent.parent.attributes + ), + 0 /* None */ + ); + break; + } + case 282 /* ExportSpecifier */: + const specifier = node.parent.parent.moduleSpecifier; + if (specifier) { + const propertyName = node.propertyName; + if (propertyName && moduleExportNameIsDefault(propertyName)) { + verbatimTargetName = "default" /* Default */; + } + } + serializeExportSpecifier( + unescapeLeadingUnderscores(symbol.escapedName), + specifier ? verbatimTargetName : targetName, + specifier && isStringLiteralLike(specifier) ? factory.createStringLiteral(specifier.text) : void 0 + ); + break; + case 278 /* ExportAssignment */: + serializeMaybeAliasAssignment(symbol); + break; + case 227 /* BinaryExpression */: + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + if (symbol.escapedName === "default" /* Default */ || symbol.escapedName === "export=" /* ExportEquals */) { + serializeMaybeAliasAssignment(symbol); + } else { + serializeExportSpecifier(localName, targetName); + } + break; + default: + return Debug.failBadSyntaxKind(node, "Unhandled alias declaration kind in symbol serializer!"); + } + } + function serializeExportSpecifier(localName, targetName, specifier) { + context.approximateLength += 16 + localName.length + (localName !== targetName ? targetName.length : 0); + addResult( + factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + localName !== targetName ? targetName : void 0, + localName + )]), + specifier + ), + 0 /* None */ + ); + } + function serializeMaybeAliasAssignment(symbol) { + var _a2; + if (symbol.flags & 4194304 /* Prototype */) { + return false; + } + const name = unescapeLeadingUnderscores(symbol.escapedName); + const isExportEquals = name === "export=" /* ExportEquals */; + const isDefault = name === "default" /* Default */; + const isExportAssignmentCompatibleSymbolName = isExportEquals || isDefault; + const aliasDecl = symbol.declarations && getDeclarationOfAliasSymbol(symbol); + const target = aliasDecl && getTargetOfAliasDeclaration( + aliasDecl, + /*dontRecursivelyResolve*/ + true + ); + if (target && length(target.declarations) && some(target.declarations, (d) => getSourceFileOfNode(d) === getSourceFileOfNode(enclosingDeclaration))) { + const expr = aliasDecl && (isExportAssignment(aliasDecl) || isBinaryExpression(aliasDecl) ? getExportAssignmentExpression(aliasDecl) : getPropertyAssignmentAliasLikeExpression(aliasDecl)); + const first2 = expr && isEntityNameExpression(expr) ? getFirstNonModuleExportsIdentifier(expr) : void 0; + const referenced = first2 && resolveEntityName( + first2, + -1 /* All */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + enclosingDeclaration + ); + if (referenced || target) { + includePrivateSymbol(referenced || target); + } + const prevDisableTrackSymbol = context.tracker.disableTrackSymbol; + context.tracker.disableTrackSymbol = true; + if (isExportAssignmentCompatibleSymbolName) { + context.approximateLength += 10; + results.push(factory.createExportAssignment( + /*modifiers*/ + void 0, + isExportEquals, + symbolToExpression(target, context, -1 /* All */) + )); + } else { + if (first2 === expr && first2) { + serializeExportSpecifier(name, idText(first2)); + } else if (expr && isClassExpression(expr)) { + serializeExportSpecifier(name, getInternalSymbolName(target, symbolName(target))); + } else { + const varName = getUnusedName(name, symbol); + context.approximateLength += varName.length + 10; + addResult( + factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createIdentifier(varName), + symbolToName( + target, + context, + -1 /* All */, + /*expectsIdentifier*/ + false + ) + ), + 0 /* None */ + ); + serializeExportSpecifier(name, varName); + } + } + context.tracker.disableTrackSymbol = prevDisableTrackSymbol; + return true; + } else { + const varName = getUnusedName(name, symbol); + const typeToSerialize = getWidenedType(getTypeOfSymbol(getMergedSymbol(symbol))); + if (isTypeRepresentableAsFunctionNamespaceMerge(typeToSerialize, symbol)) { + serializeAsFunctionNamespaceMerge(typeToSerialize, symbol, varName, isExportAssignmentCompatibleSymbolName ? 0 /* None */ : 32 /* Export */); + } else { + const flags = ((_a2 = context.enclosingDeclaration) == null ? void 0 : _a2.kind) === 268 /* ModuleDeclaration */ && (!(symbol.flags & 98304 /* Accessor */) || symbol.flags & 65536 /* SetAccessor */) ? 1 /* Let */ : 2 /* Const */; + context.approximateLength += varName.length + 5; + const statement = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + varName, + /*exclamationToken*/ + void 0, + serializeTypeForDeclaration( + context, + /*declaration*/ + void 0, + typeToSerialize, + symbol + ) + ) + ], flags) + ); + addResult( + statement, + target && target.flags & 4 /* Property */ && target.escapedName === "export=" /* ExportEquals */ ? 128 /* Ambient */ : name === varName ? 32 /* Export */ : 0 /* None */ + ); + } + if (isExportAssignmentCompatibleSymbolName) { + context.approximateLength += varName.length + 10; + results.push(factory.createExportAssignment( + /*modifiers*/ + void 0, + isExportEquals, + factory.createIdentifier(varName) + )); + return true; + } else if (name !== varName) { + serializeExportSpecifier(name, varName); + return true; + } + return false; + } + } + function isTypeRepresentableAsFunctionNamespaceMerge(typeToSerialize, hostSymbol) { + var _a2; + const ctxSrc = getSourceFileOfNode(context.enclosingDeclaration); + return getObjectFlags(typeToSerialize) & (16 /* Anonymous */ | 32 /* Mapped */) && !some((_a2 = typeToSerialize.symbol) == null ? void 0 : _a2.declarations, isTypeNode) && // If the type comes straight from a type node, we shouldn't try to break it up + !length(getIndexInfosOfType(typeToSerialize)) && !isClassInstanceSide(typeToSerialize) && // While a class instance is potentially representable as a NS, prefer printing a reference to the instance type and serializing the class + !!(length(filter(getPropertiesOfType(typeToSerialize), isNamespaceMember)) || length(getSignaturesOfType(typeToSerialize, 0 /* Call */))) && !length(getSignaturesOfType(typeToSerialize, 1 /* Construct */)) && // TODO: could probably serialize as function + ns + class, now that that's OK + !getDeclarationWithTypeAnnotation(hostSymbol, enclosingDeclaration) && !(typeToSerialize.symbol && some(typeToSerialize.symbol.declarations, (d) => getSourceFileOfNode(d) !== ctxSrc)) && !some(getPropertiesOfType(typeToSerialize), (p) => isLateBoundName(p.escapedName)) && !some(getPropertiesOfType(typeToSerialize), (p) => some(p.declarations, (d) => getSourceFileOfNode(d) !== ctxSrc)) && every(getPropertiesOfType(typeToSerialize), (p) => { + if (!isIdentifierText(symbolName(p), languageVersion)) { + return false; + } + if (!(p.flags & 98304 /* Accessor */)) { + return true; + } + return getNonMissingTypeOfSymbol(p) === getWriteTypeOfSymbol(p); + }); + } + function makeSerializePropertySymbol(createProperty2, methodKind, useAccessors) { + return function serializePropertySymbol(p, isStatic2, baseType) { + var _a2, _b, _c, _d, _e, _f; + const modifierFlags = getDeclarationModifierFlagsFromSymbol(p); + const omitType = !!(modifierFlags & 2 /* Private */) && !isExpanding(context); + if (isStatic2 && p.flags & (788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */)) { + return []; + } + if (p.flags & 4194304 /* Prototype */ || p.escapedName === "constructor" || baseType && getPropertyOfType(baseType, p.escapedName) && isReadonlySymbol(getPropertyOfType(baseType, p.escapedName)) === isReadonlySymbol(p) && (p.flags & 16777216 /* Optional */) === (getPropertyOfType(baseType, p.escapedName).flags & 16777216 /* Optional */) && isTypeIdenticalTo(getTypeOfSymbol(p), getTypeOfPropertyOfType(baseType, p.escapedName))) { + return []; + } + const flag = modifierFlags & ~1024 /* Async */ | (isStatic2 ? 256 /* Static */ : 0); + const name = getPropertyNameNodeForSymbol(p, context); + const firstPropertyLikeDecl = (_a2 = p.declarations) == null ? void 0 : _a2.find(or(isPropertyDeclaration, isAccessor, isVariableDeclaration, isPropertySignature, isBinaryExpression, isPropertyAccessExpression)); + if (p.flags & 98304 /* Accessor */ && useAccessors) { + const result = []; + if (p.flags & 65536 /* SetAccessor */) { + const setter = p.declarations && forEach(p.declarations, (d) => { + if (d.kind === 179 /* SetAccessor */) { + return d; + } + if (isCallExpression(d) && isBindableObjectDefinePropertyCall(d)) { + return forEach(d.arguments[2].properties, (propDecl) => { + const id = getNameOfDeclaration(propDecl); + if (!!id && isIdentifier(id) && idText(id) === "set") { + return propDecl; + } + }); + } + }); + Debug.assert(!!setter); + const paramSymbol = isFunctionLikeDeclaration(setter) ? getSignatureFromDeclaration(setter).parameters[0] : void 0; + const setterDeclaration = (_b = p.declarations) == null ? void 0 : _b.find(isSetAccessor); + context.approximateLength += modifiersLength(flag) + 7 + (paramSymbol ? symbolName(paramSymbol).length : 5) + (omitType ? 0 : 2); + result.push(setTextRange2( + context, + factory.createSetAccessorDeclaration( + factory.createModifiersFromModifierFlags(flag), + name, + [factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + paramSymbol ? parameterToParameterDeclarationName(paramSymbol, getEffectiveParameterDeclaration(paramSymbol), context) : "value", + /*questionToken*/ + void 0, + omitType ? void 0 : serializeTypeForDeclaration(context, setterDeclaration, getWriteTypeOfSymbol(p), p) + )], + /*body*/ + void 0 + ), + setterDeclaration ?? firstPropertyLikeDecl + )); + } + if (p.flags & 32768 /* GetAccessor */) { + const getterDeclaration = (_c = p.declarations) == null ? void 0 : _c.find(isGetAccessor); + context.approximateLength += modifiersLength(flag) + 8 + (omitType ? 0 : 2); + result.push(setTextRange2( + context, + factory.createGetAccessorDeclaration( + factory.createModifiersFromModifierFlags(flag), + name, + [], + omitType ? void 0 : serializeTypeForDeclaration(context, getterDeclaration, getTypeOfSymbol(p), p), + /*body*/ + void 0 + ), + getterDeclaration ?? firstPropertyLikeDecl + )); + } + return result; + } else if (p.flags & (4 /* Property */ | 3 /* Variable */ | 98304 /* Accessor */)) { + const modifierFlags2 = (isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag; + context.approximateLength += 2 + (omitType ? 0 : 2) + modifiersLength(modifierFlags2); + return setTextRange2( + context, + createProperty2( + factory.createModifiersFromModifierFlags(modifierFlags2), + name, + p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0, + omitType ? void 0 : serializeTypeForDeclaration(context, (_d = p.declarations) == null ? void 0 : _d.find(isSetAccessorDeclaration), getWriteTypeOfSymbol(p), p), + // TODO: https://github.com/microsoft/TypeScript/pull/32372#discussion_r328386357 + // interface members can't have initializers, however class members _can_ + /*initializer*/ + void 0 + ), + ((_e = p.declarations) == null ? void 0 : _e.find(or(isPropertyDeclaration, isVariableDeclaration))) || firstPropertyLikeDecl + ); + } + if (p.flags & (8192 /* Method */ | 16 /* Function */)) { + const type = getTypeOfSymbol(p); + const signatures = getSignaturesOfType(type, 0 /* Call */); + if (omitType) { + const modifierFlags2 = (isReadonlySymbol(p) ? 8 /* Readonly */ : 0) | flag; + context.approximateLength += 1 + modifiersLength(modifierFlags2); + return setTextRange2( + context, + createProperty2( + factory.createModifiersFromModifierFlags(modifierFlags2), + name, + p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ), + ((_f = p.declarations) == null ? void 0 : _f.find(isFunctionLikeDeclaration)) || signatures[0] && signatures[0].declaration || p.declarations && p.declarations[0] + ); + } + const results2 = []; + for (const sig of signatures) { + context.approximateLength += 1; + const decl = signatureToSignatureDeclarationHelper( + sig, + methodKind, + context, + { + name, + questionToken: p.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0, + modifiers: flag ? factory.createModifiersFromModifierFlags(flag) : void 0 + } + ); + const location = sig.declaration && isPrototypePropertyAssignment(sig.declaration.parent) ? sig.declaration.parent : sig.declaration; + results2.push(setTextRange2(context, decl, location)); + } + return results2; + } + return Debug.fail(`Unhandled class member kind! ${p.__debugFlags || p.flags}`); + }; + } + function modifiersLength(flags) { + let result = 0; + if (flags & 32 /* Export */) result += 7; + if (flags & 128 /* Ambient */) result += 8; + if (flags & 2048 /* Default */) result += 8; + if (flags & 4096 /* Const */) result += 6; + if (flags & 1 /* Public */) result += 7; + if (flags & 2 /* Private */) result += 8; + if (flags & 4 /* Protected */) result += 10; + if (flags & 64 /* Abstract */) result += 9; + if (flags & 256 /* Static */) result += 7; + if (flags & 16 /* Override */) result += 9; + if (flags & 8 /* Readonly */) result += 9; + if (flags & 512 /* Accessor */) result += 9; + if (flags & 1024 /* Async */) result += 6; + if (flags & 8192 /* In */) result += 3; + if (flags & 16384 /* Out */) result += 4; + return result; + } + function serializePropertySymbolForInterface(p, baseType) { + return serializePropertySymbolForInterfaceWorker( + p, + /*isStatic*/ + false, + baseType + ); + } + function serializeSignatures(kind, input, baseType, outputKind) { + const signatures = getSignaturesOfType(input, kind); + if (kind === 1 /* Construct */) { + if (!baseType && every(signatures, (s) => length(s.parameters) === 0)) { + return []; + } + if (baseType) { + const baseSigs = getSignaturesOfType(baseType, 1 /* Construct */); + if (!length(baseSigs) && every(signatures, (s) => length(s.parameters) === 0)) { + return []; + } + if (baseSigs.length === signatures.length) { + let failed2 = false; + for (let i = 0; i < baseSigs.length; i++) { + if (!compareSignaturesIdentical( + signatures[i], + baseSigs[i], + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + true, + compareTypesIdentical + )) { + failed2 = true; + break; + } + } + if (!failed2) { + return []; + } + } + } + let privateProtected = 0; + for (const s of signatures) { + if (s.declaration) { + privateProtected |= getSelectedEffectiveModifierFlags(s.declaration, 2 /* Private */ | 4 /* Protected */); + } + } + if (privateProtected) { + return [setTextRange2( + context, + factory.createConstructorDeclaration( + factory.createModifiersFromModifierFlags(privateProtected), + /*parameters*/ + [], + /*body*/ + void 0 + ), + signatures[0].declaration + )]; + } + } + const results2 = []; + for (const sig of signatures) { + context.approximateLength += 1; + const decl = signatureToSignatureDeclarationHelper(sig, outputKind, context); + results2.push(setTextRange2(context, decl, sig.declaration)); + } + return results2; + } + function serializeIndexSignatures(input, baseType) { + const results2 = []; + for (const info of getIndexInfosOfType(input)) { + if (baseType) { + const baseInfo = getIndexInfoOfType(baseType, info.keyType); + if (baseInfo) { + if (isTypeIdenticalTo(info.type, baseInfo.type)) { + continue; + } + } + } + results2.push(indexInfoToIndexSignatureDeclarationHelper( + info, + context, + /*typeNode*/ + void 0 + )); + } + return results2; + } + function serializeBaseType(t, staticType, rootName) { + const ref = trySerializeAsTypeReference(t, 111551 /* Value */); + if (ref) { + return ref; + } + const tempName = getUnusedName(`${rootName}_base`); + const statement = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + tempName, + /*exclamationToken*/ + void 0, + typeToTypeNodeHelper(staticType, context) + ) + ], 2 /* Const */) + ); + addResult(statement, 0 /* None */); + return factory.createExpressionWithTypeArguments( + factory.createIdentifier(tempName), + /*typeArguments*/ + void 0 + ); + } + function trySerializeAsTypeReference(t, flags) { + let typeArgs; + let reference; + if (t.target && isSymbolAccessibleByFlags(t.target.symbol, enclosingDeclaration, flags)) { + typeArgs = map(getTypeArguments(t), (t2) => typeToTypeNodeHelper(t2, context)); + reference = symbolToExpression(t.target.symbol, context, 788968 /* Type */); + } else if (t.symbol && isSymbolAccessibleByFlags(t.symbol, enclosingDeclaration, flags)) { + reference = symbolToExpression(t.symbol, context, 788968 /* Type */); + } + if (reference) { + return factory.createExpressionWithTypeArguments(reference, typeArgs); + } + } + function serializeImplementedType(t) { + const ref = trySerializeAsTypeReference(t, 788968 /* Type */); + if (ref) { + return ref; + } + if (t.symbol) { + return factory.createExpressionWithTypeArguments( + symbolToExpression(t.symbol, context, 788968 /* Type */), + /*typeArguments*/ + void 0 + ); + } + } + function getUnusedName(input, symbol) { + var _a2, _b; + const id = symbol ? getSymbolId(symbol) : void 0; + if (id) { + if (context.remappedSymbolNames.has(id)) { + return context.remappedSymbolNames.get(id); + } + } + if (symbol) { + input = getNameCandidateWorker(symbol, input); + } + let i = 0; + const original = input; + while ((_a2 = context.usedSymbolNames) == null ? void 0 : _a2.has(input)) { + i++; + input = `${original}_${i}`; + } + (_b = context.usedSymbolNames) == null ? void 0 : _b.add(input); + if (id) { + context.remappedSymbolNames.set(id, input); + } + return input; + } + function getNameCandidateWorker(symbol, localName) { + if (localName === "default" /* Default */ || localName === "__class" /* Class */ || localName === "__function" /* Function */) { + const restoreFlags = saveRestoreFlags(context); + context.flags |= 16777216 /* InInitialEntityName */; + const nameCandidate = getNameOfSymbolAsWritten(symbol, context); + restoreFlags(); + localName = nameCandidate.length > 0 && isSingleOrDoubleQuote(nameCandidate.charCodeAt(0)) ? stripQuotes(nameCandidate) : nameCandidate; + } + if (localName === "default" /* Default */) { + localName = "_default"; + } else if (localName === "export=" /* ExportEquals */) { + localName = "_exports"; + } + localName = isIdentifierText(localName, languageVersion) && !isStringANonContextualKeyword(localName) ? localName : "_" + localName.replace(/[^a-z0-9]/gi, "_"); + return localName; + } + function getInternalSymbolName(symbol, localName) { + const id = getSymbolId(symbol); + if (context.remappedSymbolNames.has(id)) { + return context.remappedSymbolNames.get(id); + } + localName = getNameCandidateWorker(symbol, localName); + context.remappedSymbolNames.set(id, localName); + return localName; + } + } + function isExpanding(context) { + return context.maxExpansionDepth !== -1; + } + function isHashPrivate(s) { + return !!s.valueDeclaration && isNamedDeclaration(s.valueDeclaration) && isPrivateIdentifier(s.valueDeclaration.name); + } + function getClonedHashPrivateName(s) { + if (s.valueDeclaration && isNamedDeclaration(s.valueDeclaration) && isPrivateIdentifier(s.valueDeclaration.name)) { + return factory.cloneNode(s.valueDeclaration.name); + } + return void 0; + } + } + function isLibType(type) { + var _a; + const symbol = (getObjectFlags(type) & 4 /* Reference */) !== 0 ? type.target.symbol : type.symbol; + return isTupleType(type) || !!((_a = symbol == null ? void 0 : symbol.declarations) == null ? void 0 : _a.some((decl) => host.isSourceFileDefaultLibrary(getSourceFileOfNode(decl)))); + } + function typePredicateToString(typePredicate, enclosingDeclaration, flags = 16384 /* UseAliasDefinedOutsideCurrentScope */, writer) { + return writer ? typePredicateToStringWorker(writer).getText() : usingSingleLineStringWriter(typePredicateToStringWorker); + function typePredicateToStringWorker(writer2) { + const nodeBuilderFlags = toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | 512 /* WriteTypeParametersInQualifiedName */; + const predicate = nodeBuilder.typePredicateToTypePredicateNode(typePredicate, enclosingDeclaration, nodeBuilderFlags); + const printer = createPrinterWithRemoveComments(); + const sourceFile = enclosingDeclaration && getSourceFileOfNode(enclosingDeclaration); + printer.writeNode( + 4 /* Unspecified */, + predicate, + /*sourceFile*/ + sourceFile, + writer2 + ); + return writer2; + } + } + function formatUnionTypes(types, expandingEnum) { + const result = []; + let flags = 0; + for (let i = 0; i < types.length; i++) { + const t = types[i]; + flags |= t.flags; + if (!(t.flags & 98304 /* Nullable */)) { + if (t.flags & 512 /* BooleanLiteral */ || !expandingEnum && t.flags | 1056 /* EnumLike */) { + const baseType = t.flags & 512 /* BooleanLiteral */ ? booleanType : getBaseTypeOfEnumLikeType(t); + if (baseType.flags & 1048576 /* Union */) { + const count = baseType.types.length; + if (i + count <= types.length && getRegularTypeOfLiteralType(types[i + count - 1]) === getRegularTypeOfLiteralType(baseType.types[count - 1])) { + result.push(baseType); + i += count - 1; + continue; + } + } + } + result.push(t); + } + } + if (flags & 65536 /* Null */) result.push(nullType); + if (flags & 32768 /* Undefined */) result.push(undefinedType); + return result || types; + } + function visibilityToString(flags) { + if (flags === 2 /* Private */) { + return "private"; + } + if (flags === 4 /* Protected */) { + return "protected"; + } + return "public"; + } + function getTypeAliasForTypeLiteral(type) { + if (type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && type.symbol.declarations) { + const node = walkUpParenthesizedTypes(type.symbol.declarations[0].parent); + if (isTypeAliasDeclaration(node)) { + return getSymbolOfDeclaration(node); + } + } + return void 0; + } + function isTopLevelInExternalModuleAugmentation(node) { + return node && node.parent && node.parent.kind === 269 /* ModuleBlock */ && isExternalModuleAugmentation(node.parent.parent); + } + function isDefaultBindingContext(location) { + return location.kind === 308 /* SourceFile */ || isAmbientModule(location); + } + function getNameOfSymbolFromNameType(symbol, context) { + const nameType = getSymbolLinks(symbol).nameType; + if (nameType) { + if (nameType.flags & 384 /* StringOrNumberLiteral */) { + const name = "" + nameType.value; + if (!isIdentifierText(name, getEmitScriptTarget(compilerOptions)) && !isNumericLiteralName(name)) { + return `"${escapeString(name, 34 /* doubleQuote */)}"`; + } + if (isNumericLiteralName(name) && startsWith(name, "-")) { + return `[${name}]`; + } + return name; + } + if (nameType.flags & 8192 /* UniqueESSymbol */) { + return `[${getNameOfSymbolAsWritten(nameType.symbol, context)}]`; + } + } + } + function getNameOfSymbolAsWritten(symbol, context) { + var _a; + if ((_a = context == null ? void 0 : context.remappedSymbolReferences) == null ? void 0 : _a.has(getSymbolId(symbol))) { + symbol = context.remappedSymbolReferences.get(getSymbolId(symbol)); + } + if (context && symbol.escapedName === "default" /* Default */ && !(context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */) && // If it's not the first part of an entity name, it must print as `default` + (!(context.flags & 16777216 /* InInitialEntityName */) || // if the symbol is synthesized, it will only be referenced externally it must print as `default` + !symbol.declarations || // if not in the same binding context (source file, module declaration), it must print as `default` + context.enclosingDeclaration && findAncestor(symbol.declarations[0], isDefaultBindingContext) !== findAncestor(context.enclosingDeclaration, isDefaultBindingContext))) { + return "default"; + } + if (symbol.declarations && symbol.declarations.length) { + let declaration = firstDefined(symbol.declarations, (d) => getNameOfDeclaration(d) ? d : void 0); + const name2 = declaration && getNameOfDeclaration(declaration); + if (declaration && name2) { + if (isCallExpression(declaration) && isBindableObjectDefinePropertyCall(declaration)) { + return symbolName(symbol); + } + if (isComputedPropertyName(name2) && !(getCheckFlags(symbol) & 4096 /* Late */)) { + const nameType = getSymbolLinks(symbol).nameType; + if (nameType && nameType.flags & 384 /* StringOrNumberLiteral */) { + const result = getNameOfSymbolFromNameType(symbol, context); + if (result !== void 0) { + return result; + } + } + } + return declarationNameToString(name2); + } + if (!declaration) { + declaration = symbol.declarations[0]; + } + if (declaration.parent && declaration.parent.kind === 261 /* VariableDeclaration */) { + return declarationNameToString(declaration.parent.name); + } + switch (declaration.kind) { + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + if (context && !context.encounteredError && !(context.flags & 131072 /* AllowAnonymousIdentifier */)) { + context.encounteredError = true; + } + return declaration.kind === 232 /* ClassExpression */ ? "(Anonymous class)" : "(Anonymous function)"; + } + } + const name = getNameOfSymbolFromNameType(symbol, context); + return name !== void 0 ? name : symbolName(symbol); + } + function isDeclarationVisible(node) { + if (node) { + const links = getNodeLinks(node); + if (links.isVisible === void 0) { + links.isVisible = !!determineIfDeclarationIsVisible(); + } + return links.isVisible; + } + return false; + function determineIfDeclarationIsVisible() { + switch (node.kind) { + case 339 /* JSDocCallbackTag */: + case 347 /* JSDocTypedefTag */: + case 341 /* JSDocEnumTag */: + return !!(node.parent && node.parent.parent && node.parent.parent.parent && isSourceFile(node.parent.parent.parent)); + case 209 /* BindingElement */: + return isDeclarationVisible(node.parent.parent); + case 261 /* VariableDeclaration */: + if (isBindingPattern(node.name) && !node.name.elements.length) { + return false; + } + // falls through + case 268 /* ModuleDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 263 /* FunctionDeclaration */: + case 267 /* EnumDeclaration */: + case 272 /* ImportEqualsDeclaration */: + if (isExternalModuleAugmentation(node)) { + return true; + } + const parent2 = getDeclarationContainer(node); + if (!(getCombinedModifierFlagsCached(node) & 32 /* Export */) && !(node.kind !== 272 /* ImportEqualsDeclaration */ && parent2.kind !== 308 /* SourceFile */ && parent2.flags & 33554432 /* Ambient */)) { + return isGlobalSourceFile(parent2); + } + return isDeclarationVisible(parent2); + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + if (hasEffectiveModifier(node, 2 /* Private */ | 4 /* Protected */)) { + return false; + } + // Public properties/methods are visible if its parents are visible, so: + // falls through + case 177 /* Constructor */: + case 181 /* ConstructSignature */: + case 180 /* CallSignature */: + case 182 /* IndexSignature */: + case 170 /* Parameter */: + case 269 /* ModuleBlock */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 188 /* TypeLiteral */: + case 184 /* TypeReference */: + case 189 /* ArrayType */: + case 190 /* TupleType */: + case 193 /* UnionType */: + case 194 /* IntersectionType */: + case 197 /* ParenthesizedType */: + case 203 /* NamedTupleMember */: + return isDeclarationVisible(node.parent); + // Default binding, import specifier and namespace import is visible + // only on demand so by default it is not visible + case 274 /* ImportClause */: + case 275 /* NamespaceImport */: + case 277 /* ImportSpecifier */: + return false; + // Type parameters are always visible + case 169 /* TypeParameter */: + // Source file and namespace export are always visible + // falls through + case 308 /* SourceFile */: + case 271 /* NamespaceExportDeclaration */: + return true; + // Export assignments do not create name bindings outside the module + case 278 /* ExportAssignment */: + return false; + default: + return false; + } + } + } + function collectLinkedAliases(node, setVisibility) { + let exportSymbol; + if (node.kind !== 11 /* StringLiteral */ && node.parent && node.parent.kind === 278 /* ExportAssignment */) { + exportSymbol = resolveName( + node, + node, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + } else if (node.parent.kind === 282 /* ExportSpecifier */) { + exportSymbol = getTargetOfExportSpecifier(node.parent, 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */); + } + let result; + let visited; + if (exportSymbol) { + visited = /* @__PURE__ */ new Set(); + visited.add(getSymbolId(exportSymbol)); + buildVisibleNodeList(exportSymbol.declarations); + } + return result; + function buildVisibleNodeList(declarations) { + forEach(declarations, (declaration) => { + const resultNode = getAnyImportSyntax(declaration) || declaration; + if (setVisibility) { + getNodeLinks(declaration).isVisible = true; + } else { + result = result || []; + pushIfUnique(result, resultNode); + } + if (isInternalModuleImportEqualsDeclaration(declaration)) { + const internalModuleReference = declaration.moduleReference; + const firstIdentifier = getFirstIdentifier(internalModuleReference); + const importSymbol = resolveName( + declaration, + firstIdentifier.escapedText, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + if (importSymbol && visited) { + if (tryAddToSet(visited, getSymbolId(importSymbol))) { + buildVisibleNodeList(importSymbol.declarations); + } + } + } + }); + } + } + function pushTypeResolution(target, propertyName) { + const resolutionCycleStartIndex = findResolutionCycleStartIndex(target, propertyName); + if (resolutionCycleStartIndex >= 0) { + const { length: length2 } = resolutionTargets; + for (let i = resolutionCycleStartIndex; i < length2; i++) { + resolutionResults[i] = false; + } + return false; + } + resolutionTargets.push(target); + resolutionResults.push( + /*items*/ + true + ); + resolutionPropertyNames.push(propertyName); + return true; + } + function findResolutionCycleStartIndex(target, propertyName) { + for (let i = resolutionTargets.length - 1; i >= resolutionStart; i--) { + if (resolutionTargetHasProperty(resolutionTargets[i], resolutionPropertyNames[i])) { + return -1; + } + if (resolutionTargets[i] === target && resolutionPropertyNames[i] === propertyName) { + return i; + } + } + return -1; + } + function resolutionTargetHasProperty(target, propertyName) { + switch (propertyName) { + case 0 /* Type */: + return !!getSymbolLinks(target).type; + case 2 /* DeclaredType */: + return !!getSymbolLinks(target).declaredType; + case 1 /* ResolvedBaseConstructorType */: + return !!target.resolvedBaseConstructorType; + case 3 /* ResolvedReturnType */: + return !!target.resolvedReturnType; + case 4 /* ImmediateBaseConstraint */: + return !!target.immediateBaseConstraint; + case 5 /* ResolvedTypeArguments */: + return !!target.resolvedTypeArguments; + case 6 /* ResolvedBaseTypes */: + return !!target.baseTypesResolved; + case 7 /* WriteType */: + return !!getSymbolLinks(target).writeType; + case 8 /* ParameterInitializerContainsUndefined */: + return getNodeLinks(target).parameterInitializerContainsUndefined !== void 0; + } + return Debug.assertNever(propertyName); + } + function popTypeResolution() { + resolutionTargets.pop(); + resolutionPropertyNames.pop(); + return resolutionResults.pop(); + } + function getDeclarationContainer(node) { + return findAncestor(getRootDeclaration(node), (node2) => { + switch (node2.kind) { + case 261 /* VariableDeclaration */: + case 262 /* VariableDeclarationList */: + case 277 /* ImportSpecifier */: + case 276 /* NamedImports */: + case 275 /* NamespaceImport */: + case 274 /* ImportClause */: + return false; + default: + return true; + } + }).parent; + } + function getTypeOfPrototypeProperty(prototype) { + const classType = getDeclaredTypeOfSymbol(getParentOfSymbol(prototype)); + return classType.typeParameters ? createTypeReference(classType, map(classType.typeParameters, (_) => anyType)) : classType; + } + function getTypeOfPropertyOfType(type, name) { + const prop = getPropertyOfType(type, name); + return prop ? getTypeOfSymbol(prop) : void 0; + } + function getTypeOfPropertyOrIndexSignatureOfType(type, name) { + var _a; + let propType; + return getTypeOfPropertyOfType(type, name) || (propType = (_a = getApplicableIndexInfoForName(type, name)) == null ? void 0 : _a.type) && addOptionality( + propType, + /*isProperty*/ + true, + /*isOptional*/ + true + ); + } + function isTypeAny(type) { + return type && (type.flags & 1 /* Any */) !== 0; + } + function isErrorType(type) { + return type === errorType || !!(type.flags & 1 /* Any */ && type.aliasSymbol); + } + function getTypeForBindingElementParent(node, checkMode) { + if (checkMode !== 0 /* Normal */) { + return getTypeForVariableLikeDeclaration( + node, + /*includeOptionality*/ + false, + checkMode + ); + } + const symbol = getSymbolOfDeclaration(node); + return symbol && getSymbolLinks(symbol).type || getTypeForVariableLikeDeclaration( + node, + /*includeOptionality*/ + false, + checkMode + ); + } + function getRestType(source, properties, symbol) { + source = filterType(source, (t) => !(t.flags & 98304 /* Nullable */)); + if (source.flags & 131072 /* Never */) { + return emptyObjectType; + } + if (source.flags & 1048576 /* Union */) { + return mapType(source, (t) => getRestType(t, properties, symbol)); + } + let omitKeyType = getUnionType(map(properties, getLiteralTypeFromPropertyName)); + const spreadableProperties = []; + const unspreadableToRestKeys = []; + for (const prop of getPropertiesOfType(source)) { + const literalTypeFromProperty = getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */); + if (!isTypeAssignableTo(literalTypeFromProperty, omitKeyType) && !(getDeclarationModifierFlagsFromSymbol(prop) & (2 /* Private */ | 4 /* Protected */)) && isSpreadableProperty(prop)) { + spreadableProperties.push(prop); + } else { + unspreadableToRestKeys.push(literalTypeFromProperty); + } + } + if (isGenericObjectType(source) || isGenericIndexType(omitKeyType)) { + if (unspreadableToRestKeys.length) { + omitKeyType = getUnionType([omitKeyType, ...unspreadableToRestKeys]); + } + if (omitKeyType.flags & 131072 /* Never */) { + return source; + } + const omitTypeAlias = getGlobalOmitSymbol(); + if (!omitTypeAlias) { + return errorType; + } + return getTypeAliasInstantiation(omitTypeAlias, [source, omitKeyType]); + } + const members = createSymbolTable(); + for (const prop of spreadableProperties) { + members.set(prop.escapedName, getSpreadSymbol( + prop, + /*readonly*/ + false + )); + } + const result = createAnonymousType(symbol, members, emptyArray, emptyArray, getIndexInfosOfType(source)); + result.objectFlags |= 4194304 /* ObjectRestType */; + return result; + } + function isGenericTypeWithUndefinedConstraint(type) { + return !!(type.flags & 465829888 /* Instantiable */) && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 32768 /* Undefined */); + } + function getNonUndefinedType(type) { + const typeOrConstraint = someType(type, isGenericTypeWithUndefinedConstraint) ? mapType(type, (t) => t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t) : type; + return getTypeWithFacts(typeOrConstraint, 524288 /* NEUndefined */); + } + function getFlowTypeOfDestructuring(node, declaredType) { + const reference = getSyntheticElementAccess(node); + return reference ? getFlowTypeOfReference(reference, declaredType) : declaredType; + } + function getSyntheticElementAccess(node) { + const parentAccess = getParentElementAccess(node); + if (parentAccess && canHaveFlowNode(parentAccess) && parentAccess.flowNode) { + const propName = getDestructuringPropertyName(node); + if (propName) { + const literal = setTextRange(parseNodeFactory.createStringLiteral(propName), node); + const lhsExpr = isLeftHandSideExpression(parentAccess) ? parentAccess : parseNodeFactory.createParenthesizedExpression(parentAccess); + const result = setTextRange(parseNodeFactory.createElementAccessExpression(lhsExpr, literal), node); + setParent(literal, result); + setParent(result, node); + if (lhsExpr !== parentAccess) { + setParent(lhsExpr, result); + } + result.flowNode = parentAccess.flowNode; + return result; + } + } + } + function getParentElementAccess(node) { + const ancestor = node.parent.parent; + switch (ancestor.kind) { + case 209 /* BindingElement */: + case 304 /* PropertyAssignment */: + return getSyntheticElementAccess(ancestor); + case 210 /* ArrayLiteralExpression */: + return getSyntheticElementAccess(node.parent); + case 261 /* VariableDeclaration */: + return ancestor.initializer; + case 227 /* BinaryExpression */: + return ancestor.right; + } + } + function getDestructuringPropertyName(node) { + const parent2 = node.parent; + if (node.kind === 209 /* BindingElement */ && parent2.kind === 207 /* ObjectBindingPattern */) { + return getLiteralPropertyNameText(node.propertyName || node.name); + } + if (node.kind === 304 /* PropertyAssignment */ || node.kind === 305 /* ShorthandPropertyAssignment */) { + return getLiteralPropertyNameText(node.name); + } + return "" + parent2.elements.indexOf(node); + } + function getLiteralPropertyNameText(name) { + const type = getLiteralTypeFromPropertyName(name); + return type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */) ? "" + type.value : void 0; + } + function getTypeForBindingElement(declaration) { + const checkMode = declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; + const parentType = getTypeForBindingElementParent(declaration.parent.parent, checkMode); + return parentType && getBindingElementTypeFromParentType( + declaration, + parentType, + /*noTupleBoundsCheck*/ + false + ); + } + function getBindingElementTypeFromParentType(declaration, parentType, noTupleBoundsCheck) { + if (isTypeAny(parentType)) { + return parentType; + } + const pattern = declaration.parent; + if (strictNullChecks && declaration.flags & 33554432 /* Ambient */ && isPartOfParameterDeclaration(declaration)) { + parentType = getNonNullableType(parentType); + } else if (strictNullChecks && pattern.parent.initializer && !hasTypeFacts(getTypeOfInitializer(pattern.parent.initializer), 65536 /* EQUndefined */)) { + parentType = getTypeWithFacts(parentType, 524288 /* NEUndefined */); + } + const accessFlags = 32 /* ExpressionPosition */ | (noTupleBoundsCheck || hasDefaultValue(declaration) ? 16 /* AllowMissing */ : 0); + let type; + if (pattern.kind === 207 /* ObjectBindingPattern */) { + if (declaration.dotDotDotToken) { + parentType = getReducedType(parentType); + if (parentType.flags & 2 /* Unknown */ || !isValidSpreadType(parentType)) { + error2(declaration, Diagnostics.Rest_types_may_only_be_created_from_object_types); + return errorType; + } + const literalMembers = []; + for (const element of pattern.elements) { + if (!element.dotDotDotToken) { + literalMembers.push(element.propertyName || element.name); + } + } + type = getRestType(parentType, literalMembers, declaration.symbol); + } else { + const name = declaration.propertyName || declaration.name; + const indexType = getLiteralTypeFromPropertyName(name); + const declaredType = getIndexedAccessType(parentType, indexType, accessFlags, name); + type = getFlowTypeOfDestructuring(declaration, declaredType); + } + } else { + const elementType = checkIteratedTypeOrElementType(65 /* Destructuring */ | (declaration.dotDotDotToken ? 0 : 128 /* PossiblyOutOfBounds */), parentType, undefinedType, pattern); + const index = pattern.elements.indexOf(declaration); + if (declaration.dotDotDotToken) { + const baseConstraint = mapType(parentType, (t) => t.flags & 58982400 /* InstantiableNonPrimitive */ ? getBaseConstraintOrType(t) : t); + type = everyType(baseConstraint, isTupleType) ? mapType(baseConstraint, (t) => sliceTupleType(t, index)) : createArrayType(elementType); + } else if (isArrayLikeType(parentType)) { + const indexType = getNumberLiteralType(index); + const declaredType = getIndexedAccessTypeOrUndefined(parentType, indexType, accessFlags, declaration.name) || errorType; + type = getFlowTypeOfDestructuring(declaration, declaredType); + } else { + type = elementType; + } + } + if (!declaration.initializer) { + return type; + } + if (getEffectiveTypeAnnotationNode(walkUpBindingElementsAndPatterns(declaration))) { + return strictNullChecks && !hasTypeFacts(checkDeclarationInitializer(declaration, 0 /* Normal */), 16777216 /* IsUndefined */) ? getNonUndefinedType(type) : type; + } + return widenTypeInferredFromInitializer(declaration, getUnionType([getNonUndefinedType(type), checkDeclarationInitializer(declaration, 0 /* Normal */)], 2 /* Subtype */)); + } + function getTypeForDeclarationFromJSDocComment(declaration) { + const jsdocType = getJSDocType(declaration); + if (jsdocType) { + return getTypeFromTypeNode(jsdocType); + } + return void 0; + } + function isNullOrUndefined3(node) { + const expr = skipParentheses( + node, + /*excludeJSDocTypeAssertions*/ + true + ); + return expr.kind === 106 /* NullKeyword */ || expr.kind === 80 /* Identifier */ && getResolvedSymbol(expr) === undefinedSymbol; + } + function isEmptyArrayLiteral2(node) { + const expr = skipParentheses( + node, + /*excludeJSDocTypeAssertions*/ + true + ); + return expr.kind === 210 /* ArrayLiteralExpression */ && expr.elements.length === 0; + } + function addOptionality(type, isProperty = false, isOptional = true) { + return strictNullChecks && isOptional ? getOptionalType(type, isProperty) : type; + } + function getTypeForVariableLikeDeclaration(declaration, includeOptionality, checkMode) { + if (isVariableDeclaration(declaration) && declaration.parent.parent.kind === 250 /* ForInStatement */) { + const indexType = getIndexType(getNonNullableTypeIfNeeded(checkExpression( + declaration.parent.parent.expression, + /*checkMode*/ + checkMode + ))); + return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType; + } + if (isVariableDeclaration(declaration) && declaration.parent.parent.kind === 251 /* ForOfStatement */) { + const forOfStatement = declaration.parent.parent; + return checkRightHandSideOfForOf(forOfStatement) || anyType; + } + if (isBindingPattern(declaration.parent)) { + return getTypeForBindingElement(declaration); + } + const isProperty = isPropertyDeclaration(declaration) && !hasAccessorModifier(declaration) || isPropertySignature(declaration) || isJSDocPropertyTag(declaration); + const isOptional = includeOptionality && isOptionalDeclaration(declaration); + const declaredType = tryGetTypeFromEffectiveTypeNode(declaration); + if (isCatchClauseVariableDeclarationOrBindingElement(declaration)) { + if (declaredType) { + return isTypeAny(declaredType) || declaredType === unknownType ? declaredType : errorType; + } + return useUnknownInCatchVariables ? unknownType : anyType; + } + if (declaredType) { + return addOptionality(declaredType, isProperty, isOptional); + } + if ((noImplicitAny || isInJSFile(declaration)) && isVariableDeclaration(declaration) && !isBindingPattern(declaration.name) && !(getCombinedModifierFlagsCached(declaration) & 32 /* Export */) && !(declaration.flags & 33554432 /* Ambient */)) { + if (!(getCombinedNodeFlagsCached(declaration) & 6 /* Constant */) && (!declaration.initializer || isNullOrUndefined3(declaration.initializer))) { + return autoType; + } + if (declaration.initializer && isEmptyArrayLiteral2(declaration.initializer)) { + return autoArrayType; + } + } + if (isParameter(declaration)) { + if (!declaration.symbol) { + return; + } + const func = declaration.parent; + if (func.kind === 179 /* SetAccessor */ && hasBindableName(func)) { + const getter = getDeclarationOfKind(getSymbolOfDeclaration(declaration.parent), 178 /* GetAccessor */); + if (getter) { + const getterSignature = getSignatureFromDeclaration(getter); + const thisParameter = getAccessorThisParameter(func); + if (thisParameter && declaration === thisParameter) { + Debug.assert(!thisParameter.type); + return getTypeOfSymbol(getterSignature.thisParameter); + } + return getReturnTypeOfSignature(getterSignature); + } + } + const parameterTypeOfTypeTag = getParameterTypeOfTypeTag(func, declaration); + if (parameterTypeOfTypeTag) return parameterTypeOfTypeTag; + const type = declaration.symbol.escapedName === "this" /* This */ ? getContextualThisParameterType(func) : getContextuallyTypedParameterType(declaration); + if (type) { + return addOptionality( + type, + /*isProperty*/ + false, + isOptional + ); + } + } + if (hasOnlyExpressionInitializer(declaration) && !!declaration.initializer) { + if (isInJSFile(declaration) && !isParameter(declaration)) { + const containerObjectType = getJSContainerObjectType(declaration, getSymbolOfDeclaration(declaration), getDeclaredExpandoInitializer(declaration)); + if (containerObjectType) { + return containerObjectType; + } + } + const type = widenTypeInferredFromInitializer(declaration, checkDeclarationInitializer(declaration, checkMode)); + return addOptionality(type, isProperty, isOptional); + } + if (isPropertyDeclaration(declaration) && (noImplicitAny || isInJSFile(declaration))) { + if (!hasStaticModifier(declaration)) { + const constructor = findConstructorDeclaration(declaration.parent); + const type = constructor ? getFlowTypeInConstructor(declaration.symbol, constructor) : getEffectiveModifierFlags(declaration) & 128 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) : void 0; + return type && addOptionality( + type, + /*isProperty*/ + true, + isOptional + ); + } else { + const staticBlocks = filter(declaration.parent.members, isClassStaticBlockDeclaration); + const type = staticBlocks.length ? getFlowTypeInStaticBlocks(declaration.symbol, staticBlocks) : getEffectiveModifierFlags(declaration) & 128 /* Ambient */ ? getTypeOfPropertyInBaseClass(declaration.symbol) : void 0; + return type && addOptionality( + type, + /*isProperty*/ + true, + isOptional + ); + } + } + if (isJsxAttribute(declaration)) { + return trueType; + } + if (isBindingPattern(declaration.name)) { + return getTypeFromBindingPattern( + declaration.name, + /*includePatternInType*/ + false, + /*reportErrors*/ + true + ); + } + return void 0; + } + function isConstructorDeclaredProperty(symbol) { + if (symbol.valueDeclaration && isBinaryExpression(symbol.valueDeclaration)) { + const links = getSymbolLinks(symbol); + if (links.isConstructorDeclaredProperty === void 0) { + links.isConstructorDeclaredProperty = false; + links.isConstructorDeclaredProperty = !!getDeclaringConstructor(symbol) && every(symbol.declarations, (declaration) => isBinaryExpression(declaration) && isPossiblyAliasedThisProperty(declaration) && (declaration.left.kind !== 213 /* ElementAccessExpression */ || isStringOrNumericLiteralLike(declaration.left.argumentExpression)) && !getAnnotatedTypeForAssignmentDeclaration( + /*declaredType*/ + void 0, + declaration, + symbol, + declaration + )); + } + return links.isConstructorDeclaredProperty; + } + return false; + } + function isAutoTypedProperty(symbol) { + const declaration = symbol.valueDeclaration; + return declaration && isPropertyDeclaration(declaration) && !getEffectiveTypeAnnotationNode(declaration) && !declaration.initializer && (noImplicitAny || isInJSFile(declaration)); + } + function getDeclaringConstructor(symbol) { + if (!symbol.declarations) { + return; + } + for (const declaration of symbol.declarations) { + const container = getThisContainer( + declaration, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (container && (container.kind === 177 /* Constructor */ || isJSConstructor(container))) { + return container; + } + } + } + function getFlowTypeFromCommonJSExport(symbol) { + const file = getSourceFileOfNode(symbol.declarations[0]); + const accessName = unescapeLeadingUnderscores(symbol.escapedName); + const areAllModuleExports = symbol.declarations.every((d) => isInJSFile(d) && isAccessExpression(d) && isModuleExportsAccessExpression(d.expression)); + const reference = areAllModuleExports ? factory.createPropertyAccessExpression(factory.createPropertyAccessExpression(factory.createIdentifier("module"), factory.createIdentifier("exports")), accessName) : factory.createPropertyAccessExpression(factory.createIdentifier("exports"), accessName); + if (areAllModuleExports) { + setParent(reference.expression.expression, reference.expression); + } + setParent(reference.expression, reference); + setParent(reference, file); + reference.flowNode = file.endFlowNode; + return getFlowTypeOfReference(reference, autoType, undefinedType); + } + function getFlowTypeInStaticBlocks(symbol, staticBlocks) { + const accessName = startsWith(symbol.escapedName, "__#") ? factory.createPrivateIdentifier(symbol.escapedName.split("@")[1]) : unescapeLeadingUnderscores(symbol.escapedName); + for (const staticBlock of staticBlocks) { + const reference = factory.createPropertyAccessExpression(factory.createThis(), accessName); + setParent(reference.expression, reference); + setParent(reference, staticBlock); + reference.flowNode = staticBlock.returnFlowNode; + const flowType = getFlowTypeOfProperty(reference, symbol); + if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) { + error2(symbol.valueDeclaration, Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType)); + } + if (everyType(flowType, isNullableType)) { + continue; + } + return convertAutoToAny(flowType); + } + } + function getFlowTypeInConstructor(symbol, constructor) { + const accessName = startsWith(symbol.escapedName, "__#") ? factory.createPrivateIdentifier(symbol.escapedName.split("@")[1]) : unescapeLeadingUnderscores(symbol.escapedName); + const reference = factory.createPropertyAccessExpression(factory.createThis(), accessName); + setParent(reference.expression, reference); + setParent(reference, constructor); + reference.flowNode = constructor.returnFlowNode; + const flowType = getFlowTypeOfProperty(reference, symbol); + if (noImplicitAny && (flowType === autoType || flowType === autoArrayType)) { + error2(symbol.valueDeclaration, Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType)); + } + return everyType(flowType, isNullableType) ? void 0 : convertAutoToAny(flowType); + } + function getFlowTypeOfProperty(reference, prop) { + const initialType = (prop == null ? void 0 : prop.valueDeclaration) && (!isAutoTypedProperty(prop) || getEffectiveModifierFlags(prop.valueDeclaration) & 128 /* Ambient */) && getTypeOfPropertyInBaseClass(prop) || undefinedType; + return getFlowTypeOfReference(reference, autoType, initialType); + } + function getWidenedTypeForAssignmentDeclaration(symbol, resolvedSymbol) { + const container = getAssignedExpandoInitializer(symbol.valueDeclaration); + if (container) { + const tag = isInJSFile(container) ? getJSDocTypeTag(container) : void 0; + if (tag && tag.typeExpression) { + return getTypeFromTypeNode(tag.typeExpression); + } + const containerObjectType = symbol.valueDeclaration && getJSContainerObjectType(symbol.valueDeclaration, symbol, container); + return containerObjectType || getWidenedLiteralType(checkExpressionCached(container)); + } + let type; + let definedInConstructor = false; + let definedInMethod = false; + if (isConstructorDeclaredProperty(symbol)) { + type = getFlowTypeInConstructor(symbol, getDeclaringConstructor(symbol)); + } + if (!type) { + let types; + if (symbol.declarations) { + let jsdocType; + for (const declaration of symbol.declarations) { + const expression = isBinaryExpression(declaration) || isCallExpression(declaration) ? declaration : isAccessExpression(declaration) ? isBinaryExpression(declaration.parent) ? declaration.parent : declaration : void 0; + if (!expression) { + continue; + } + const kind = isAccessExpression(expression) ? getAssignmentDeclarationPropertyAccessKind(expression) : getAssignmentDeclarationKind(expression); + if (kind === 4 /* ThisProperty */ || isBinaryExpression(expression) && isPossiblyAliasedThisProperty(expression, kind)) { + if (isDeclarationInConstructor(expression)) { + definedInConstructor = true; + } else { + definedInMethod = true; + } + } + if (!isCallExpression(expression)) { + jsdocType = getAnnotatedTypeForAssignmentDeclaration(jsdocType, expression, symbol, declaration); + } + if (!jsdocType) { + (types || (types = [])).push(isBinaryExpression(expression) || isCallExpression(expression) ? getInitializerTypeFromAssignmentDeclaration(symbol, resolvedSymbol, expression, kind) : neverType); + } + } + type = jsdocType; + } + if (!type) { + if (!length(types)) { + return errorType; + } + let constructorTypes = definedInConstructor && symbol.declarations ? getConstructorDefinedThisAssignmentTypes(types, symbol.declarations) : void 0; + if (definedInMethod) { + const propType = getTypeOfPropertyInBaseClass(symbol); + if (propType) { + (constructorTypes || (constructorTypes = [])).push(propType); + definedInConstructor = true; + } + } + const sourceTypes = some(constructorTypes, (t) => !!(t.flags & ~98304 /* Nullable */)) ? constructorTypes : types; + type = getUnionType(sourceTypes); + } + } + const widened = getWidenedType(addOptionality( + type, + /*isProperty*/ + false, + definedInMethod && !definedInConstructor + )); + if (symbol.valueDeclaration && isInJSFile(symbol.valueDeclaration) && filterType(widened, (t) => !!(t.flags & ~98304 /* Nullable */)) === neverType) { + reportImplicitAny(symbol.valueDeclaration, anyType); + return anyType; + } + return widened; + } + function getJSContainerObjectType(decl, symbol, init) { + var _a, _b; + if (!isInJSFile(decl) || !init || !isObjectLiteralExpression(init) || init.properties.length) { + return void 0; + } + const exports2 = createSymbolTable(); + while (isBinaryExpression(decl) || isPropertyAccessExpression(decl)) { + const s2 = getSymbolOfNode(decl); + if ((_a = s2 == null ? void 0 : s2.exports) == null ? void 0 : _a.size) { + mergeSymbolTable(exports2, s2.exports); + } + decl = isBinaryExpression(decl) ? decl.parent : decl.parent.parent; + } + const s = getSymbolOfNode(decl); + if ((_b = s == null ? void 0 : s.exports) == null ? void 0 : _b.size) { + mergeSymbolTable(exports2, s.exports); + } + const type = createAnonymousType(symbol, exports2, emptyArray, emptyArray, emptyArray); + type.objectFlags |= 4096 /* JSLiteral */; + return type; + } + function getAnnotatedTypeForAssignmentDeclaration(declaredType, expression, symbol, declaration) { + var _a; + const typeNode = getEffectiveTypeAnnotationNode(expression.parent); + if (typeNode) { + const type = getWidenedType(getTypeFromTypeNode(typeNode)); + if (!declaredType) { + return type; + } else if (!isErrorType(declaredType) && !isErrorType(type) && !isTypeIdenticalTo(declaredType, type)) { + errorNextVariableOrPropertyDeclarationMustHaveSameType( + /*firstDeclaration*/ + void 0, + declaredType, + declaration, + type + ); + } + } + if ((_a = symbol.parent) == null ? void 0 : _a.valueDeclaration) { + const possiblyAnnotatedSymbol = getFunctionExpressionParentSymbolOrSymbol(symbol.parent); + if (possiblyAnnotatedSymbol.valueDeclaration) { + const typeNode2 = getEffectiveTypeAnnotationNode(possiblyAnnotatedSymbol.valueDeclaration); + if (typeNode2) { + const annotationSymbol = getPropertyOfType(getTypeFromTypeNode(typeNode2), symbol.escapedName); + if (annotationSymbol) { + return getNonMissingTypeOfSymbol(annotationSymbol); + } + } + } + } + return declaredType; + } + function getInitializerTypeFromAssignmentDeclaration(symbol, resolvedSymbol, expression, kind) { + if (isCallExpression(expression)) { + if (resolvedSymbol) { + return getTypeOfSymbol(resolvedSymbol); + } + const objectLitType = checkExpressionCached(expression.arguments[2]); + const valueType = getTypeOfPropertyOfType(objectLitType, "value"); + if (valueType) { + return valueType; + } + const getFunc = getTypeOfPropertyOfType(objectLitType, "get"); + if (getFunc) { + const getSig = getSingleCallSignature(getFunc); + if (getSig) { + return getReturnTypeOfSignature(getSig); + } + } + const setFunc = getTypeOfPropertyOfType(objectLitType, "set"); + if (setFunc) { + const setSig = getSingleCallSignature(setFunc); + if (setSig) { + return getTypeOfFirstParameterOfSignature(setSig); + } + } + return anyType; + } + if (containsSameNamedThisProperty(expression.left, expression.right)) { + return anyType; + } + const isDirectExport = kind === 1 /* ExportsProperty */ && (isPropertyAccessExpression(expression.left) || isElementAccessExpression(expression.left)) && (isModuleExportsAccessExpression(expression.left.expression) || isIdentifier(expression.left.expression) && isExportsIdentifier(expression.left.expression)); + const type = resolvedSymbol ? getTypeOfSymbol(resolvedSymbol) : isDirectExport ? getRegularTypeOfLiteralType(checkExpressionCached(expression.right)) : getWidenedLiteralType(checkExpressionCached(expression.right)); + if (type.flags & 524288 /* Object */ && kind === 2 /* ModuleExports */ && symbol.escapedName === "export=" /* ExportEquals */) { + const exportedType = resolveStructuredTypeMembers(type); + const members = createSymbolTable(); + copyEntries(exportedType.members, members); + const initialSize = members.size; + if (resolvedSymbol && !resolvedSymbol.exports) { + resolvedSymbol.exports = createSymbolTable(); + } + (resolvedSymbol || symbol).exports.forEach((s, name) => { + var _a; + const exportedMember = members.get(name); + if (exportedMember && exportedMember !== s && !(s.flags & 2097152 /* Alias */)) { + if (s.flags & 111551 /* Value */ && exportedMember.flags & 111551 /* Value */) { + if (s.valueDeclaration && exportedMember.valueDeclaration && getSourceFileOfNode(s.valueDeclaration) !== getSourceFileOfNode(exportedMember.valueDeclaration)) { + const unescapedName = unescapeLeadingUnderscores(s.escapedName); + const exportedMemberName = ((_a = tryCast(exportedMember.valueDeclaration, isNamedDeclaration)) == null ? void 0 : _a.name) || exportedMember.valueDeclaration; + addRelatedInfo( + error2(s.valueDeclaration, Diagnostics.Duplicate_identifier_0, unescapedName), + createDiagnosticForNode(exportedMemberName, Diagnostics._0_was_also_declared_here, unescapedName) + ); + addRelatedInfo( + error2(exportedMemberName, Diagnostics.Duplicate_identifier_0, unescapedName), + createDiagnosticForNode(s.valueDeclaration, Diagnostics._0_was_also_declared_here, unescapedName) + ); + } + const union = createSymbol(s.flags | exportedMember.flags, name); + union.links.type = getUnionType([getTypeOfSymbol(s), getTypeOfSymbol(exportedMember)]); + union.valueDeclaration = exportedMember.valueDeclaration; + union.declarations = concatenate(exportedMember.declarations, s.declarations); + members.set(name, union); + } else { + members.set(name, mergeSymbol(s, exportedMember)); + } + } else { + members.set(name, s); + } + }); + const result = createAnonymousType( + initialSize !== members.size ? void 0 : exportedType.symbol, + // Only set the type's symbol if it looks to be the same as the original type + members, + exportedType.callSignatures, + exportedType.constructSignatures, + exportedType.indexInfos + ); + if (initialSize === members.size) { + if (type.aliasSymbol) { + result.aliasSymbol = type.aliasSymbol; + result.aliasTypeArguments = type.aliasTypeArguments; + } + if (getObjectFlags(type) & 4 /* Reference */) { + result.aliasSymbol = type.symbol; + const args = getTypeArguments(type); + result.aliasTypeArguments = length(args) ? args : void 0; + } + } + result.objectFlags |= getPropagatingFlagsOfTypes([type]) | getObjectFlags(type) & (4096 /* JSLiteral */ | 16384 /* ArrayLiteral */ | 128 /* ObjectLiteral */); + if (result.symbol && result.symbol.flags & 32 /* Class */ && type === getDeclaredTypeOfClassOrInterface(result.symbol)) { + result.objectFlags |= 16777216 /* IsClassInstanceClone */; + } + return result; + } + if (isEmptyArrayLiteralType(type)) { + reportImplicitAny(expression, anyArrayType); + return anyArrayType; + } + return type; + } + function containsSameNamedThisProperty(thisProperty, expression) { + return isPropertyAccessExpression(thisProperty) && thisProperty.expression.kind === 110 /* ThisKeyword */ && forEachChildRecursively(expression, (n) => isMatchingReference(thisProperty, n)); + } + function isDeclarationInConstructor(expression) { + const thisContainer = getThisContainer( + expression, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + return thisContainer.kind === 177 /* Constructor */ || thisContainer.kind === 263 /* FunctionDeclaration */ || thisContainer.kind === 219 /* FunctionExpression */ && !isPrototypePropertyAssignment(thisContainer.parent); + } + function getConstructorDefinedThisAssignmentTypes(types, declarations) { + Debug.assert(types.length === declarations.length); + return types.filter((_, i) => { + const declaration = declarations[i]; + const expression = isBinaryExpression(declaration) ? declaration : isBinaryExpression(declaration.parent) ? declaration.parent : void 0; + return expression && isDeclarationInConstructor(expression); + }); + } + function getTypeFromBindingElement(element, includePatternInType, reportErrors2) { + if (element.initializer) { + const contextualType = isBindingPattern(element.name) ? getTypeFromBindingPattern( + element.name, + /*includePatternInType*/ + true, + /*reportErrors*/ + false + ) : unknownType; + return addOptionality(getWidenedLiteralTypeForInitializer(element, checkDeclarationInitializer(element, 0 /* Normal */, contextualType))); + } + if (isBindingPattern(element.name)) { + return getTypeFromBindingPattern(element.name, includePatternInType, reportErrors2); + } + if (reportErrors2 && !declarationBelongsToPrivateAmbientMember(element)) { + reportImplicitAny(element, anyType); + } + return includePatternInType ? nonInferrableAnyType : anyType; + } + function getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors2) { + const members = createSymbolTable(); + let stringIndexInfo; + let objectFlags = 128 /* ObjectLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */; + forEach(pattern.elements, (e) => { + const name = e.propertyName || e.name; + if (e.dotDotDotToken) { + stringIndexInfo = createIndexInfo( + stringType, + anyType, + /*isReadonly*/ + false + ); + return; + } + const exprType = getLiteralTypeFromPropertyName(name); + if (!isTypeUsableAsPropertyName(exprType)) { + objectFlags |= 512 /* ObjectLiteralPatternWithComputedProperties */; + return; + } + const text = getPropertyNameFromType(exprType); + const flags = 4 /* Property */ | (e.initializer ? 16777216 /* Optional */ : 0); + const symbol = createSymbol(flags, text); + symbol.links.type = getTypeFromBindingElement(e, includePatternInType, reportErrors2); + members.set(symbol.escapedName, symbol); + }); + const result = createAnonymousType( + /*symbol*/ + void 0, + members, + emptyArray, + emptyArray, + stringIndexInfo ? [stringIndexInfo] : emptyArray + ); + result.objectFlags |= objectFlags; + if (includePatternInType) { + result.pattern = pattern; + result.objectFlags |= 131072 /* ContainsObjectOrArrayLiteral */; + } + return result; + } + function getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors2) { + const elements = pattern.elements; + const lastElement = lastOrUndefined(elements); + const restElement = lastElement && lastElement.kind === 209 /* BindingElement */ && lastElement.dotDotDotToken ? lastElement : void 0; + if (elements.length === 0 || elements.length === 1 && restElement) { + return languageVersion >= 2 /* ES2015 */ ? createIterableType(anyType) : anyArrayType; + } + const elementTypes = map(elements, (e) => isOmittedExpression(e) ? anyType : getTypeFromBindingElement(e, includePatternInType, reportErrors2)); + const minLength = findLastIndex(elements, (e) => !(e === restElement || isOmittedExpression(e) || hasDefaultValue(e)), elements.length - 1) + 1; + const elementFlags = map(elements, (e, i) => e === restElement ? 4 /* Rest */ : i >= minLength ? 2 /* Optional */ : 1 /* Required */); + let result = createTupleType(elementTypes, elementFlags); + if (includePatternInType) { + result = cloneTypeReference(result); + result.pattern = pattern; + result.objectFlags |= 131072 /* ContainsObjectOrArrayLiteral */; + } + return result; + } + function getTypeFromBindingPattern(pattern, includePatternInType = false, reportErrors2 = false) { + if (includePatternInType) contextualBindingPatterns.push(pattern); + const result = pattern.kind === 207 /* ObjectBindingPattern */ ? getTypeFromObjectBindingPattern(pattern, includePatternInType, reportErrors2) : getTypeFromArrayBindingPattern(pattern, includePatternInType, reportErrors2); + if (includePatternInType) contextualBindingPatterns.pop(); + return result; + } + function getWidenedTypeForVariableLikeDeclaration(declaration, reportErrors2) { + return widenTypeForVariableLikeDeclaration(getTypeForVariableLikeDeclaration( + declaration, + /*includeOptionality*/ + true, + 0 /* Normal */ + ), declaration, reportErrors2); + } + function getTypeFromImportAttributes(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const symbol = createSymbol(4096 /* ObjectLiteral */, "__importAttributes" /* ImportAttributes */); + const members = createSymbolTable(); + forEach(node.elements, (attr) => { + const member = createSymbol(4 /* Property */, getNameFromImportAttribute(attr)); + member.parent = symbol; + member.links.type = checkImportAttribute(attr); + member.links.target = member; + members.set(member.escapedName, member); + }); + const type = createAnonymousType(symbol, members, emptyArray, emptyArray, emptyArray); + type.objectFlags |= 128 /* ObjectLiteral */ | 262144 /* NonInferrableType */; + links.resolvedType = type; + } + return links.resolvedType; + } + function isGlobalSymbolConstructor(node) { + const symbol = getSymbolOfNode(node); + const globalSymbol = getGlobalESSymbolConstructorTypeSymbol( + /*reportErrors*/ + false + ); + return globalSymbol && symbol && symbol === globalSymbol; + } + function widenTypeForVariableLikeDeclaration(type, declaration, reportErrors2) { + if (type) { + if (type.flags & 4096 /* ESSymbol */ && isGlobalSymbolConstructor(declaration.parent)) { + type = getESSymbolLikeTypeForNode(declaration); + } + if (reportErrors2) { + reportErrorsFromWidening(declaration, type); + } + if (type.flags & 8192 /* UniqueESSymbol */ && (isBindingElement(declaration) || !tryGetTypeFromEffectiveTypeNode(declaration)) && type.symbol !== getSymbolOfDeclaration(declaration)) { + type = esSymbolType; + } + return getWidenedType(type); + } + type = isParameter(declaration) && declaration.dotDotDotToken ? anyArrayType : anyType; + if (reportErrors2) { + if (!declarationBelongsToPrivateAmbientMember(declaration)) { + reportImplicitAny(declaration, type); + } + } + return type; + } + function declarationBelongsToPrivateAmbientMember(declaration) { + const root = getRootDeclaration(declaration); + const memberDeclaration = root.kind === 170 /* Parameter */ ? root.parent : root; + return isPrivateWithinAmbient(memberDeclaration); + } + function tryGetTypeFromEffectiveTypeNode(node) { + const typeNode = getEffectiveTypeAnnotationNode(node); + if (typeNode) { + return getTypeFromTypeNode(typeNode); + } + } + function isParameterOfContextSensitiveSignature(symbol) { + let decl = symbol.valueDeclaration; + if (!decl) { + return false; + } + if (isBindingElement(decl)) { + decl = walkUpBindingElementsAndPatterns(decl); + } + if (isParameter(decl)) { + return isContextSensitiveFunctionOrObjectLiteralMethod(decl.parent); + } + return false; + } + function getTypeOfVariableOrParameterOrProperty(symbol) { + const links = getSymbolLinks(symbol); + if (!links.type) { + const type = getTypeOfVariableOrParameterOrPropertyWorker(symbol); + if (!links.type && !isParameterOfContextSensitiveSignature(symbol)) { + links.type = type; + } + return type; + } + return links.type; + } + function getTypeOfVariableOrParameterOrPropertyWorker(symbol) { + if (symbol.flags & 4194304 /* Prototype */) { + return getTypeOfPrototypeProperty(symbol); + } + if (symbol === requireSymbol) { + return anyType; + } + if (symbol.flags & 134217728 /* ModuleExports */ && symbol.valueDeclaration) { + const fileSymbol = getSymbolOfDeclaration(getSourceFileOfNode(symbol.valueDeclaration)); + const result = createSymbol(fileSymbol.flags, "exports"); + result.declarations = fileSymbol.declarations ? fileSymbol.declarations.slice() : []; + result.parent = symbol; + result.links.target = fileSymbol; + if (fileSymbol.valueDeclaration) result.valueDeclaration = fileSymbol.valueDeclaration; + if (fileSymbol.members) result.members = new Map(fileSymbol.members); + if (fileSymbol.exports) result.exports = new Map(fileSymbol.exports); + const members = createSymbolTable(); + members.set("exports", result); + return createAnonymousType(symbol, members, emptyArray, emptyArray, emptyArray); + } + Debug.assertIsDefined(symbol.valueDeclaration); + const declaration = symbol.valueDeclaration; + if (isSourceFile(declaration) && isJsonSourceFile(declaration)) { + if (!declaration.statements.length) { + return emptyObjectType; + } + return getWidenedType(getWidenedLiteralType(checkExpression(declaration.statements[0].expression))); + } + if (isAccessor(declaration)) { + return getTypeOfAccessors(symbol); + } + if (!pushTypeResolution(symbol, 0 /* Type */)) { + if (symbol.flags & 512 /* ValueModule */ && !(symbol.flags & 67108864 /* Assignment */)) { + return getTypeOfFuncClassEnumModule(symbol); + } + return reportCircularityError(symbol); + } + let type; + if (declaration.kind === 278 /* ExportAssignment */) { + type = widenTypeForVariableLikeDeclaration(tryGetTypeFromEffectiveTypeNode(declaration) || checkExpressionCached(declaration.expression), declaration); + } else if (isBinaryExpression(declaration) || isInJSFile(declaration) && (isCallExpression(declaration) || (isPropertyAccessExpression(declaration) || isBindableStaticElementAccessExpression(declaration)) && isBinaryExpression(declaration.parent))) { + type = getWidenedTypeForAssignmentDeclaration(symbol); + } else if (isPropertyAccessExpression(declaration) || isElementAccessExpression(declaration) || isIdentifier(declaration) || isStringLiteralLike(declaration) || isNumericLiteral(declaration) || isClassDeclaration(declaration) || isFunctionDeclaration(declaration) || isMethodDeclaration(declaration) && !isObjectLiteralMethod(declaration) || isMethodSignature(declaration) || isSourceFile(declaration)) { + if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { + return getTypeOfFuncClassEnumModule(symbol); + } + type = isBinaryExpression(declaration.parent) ? getWidenedTypeForAssignmentDeclaration(symbol) : tryGetTypeFromEffectiveTypeNode(declaration) || anyType; + } else if (isPropertyAssignment(declaration)) { + type = tryGetTypeFromEffectiveTypeNode(declaration) || checkPropertyAssignment(declaration); + } else if (isJsxAttribute(declaration)) { + type = tryGetTypeFromEffectiveTypeNode(declaration) || checkJsxAttribute(declaration); + } else if (isShorthandPropertyAssignment(declaration)) { + type = tryGetTypeFromEffectiveTypeNode(declaration) || checkExpressionForMutableLocation(declaration.name, 0 /* Normal */); + } else if (isObjectLiteralMethod(declaration)) { + type = tryGetTypeFromEffectiveTypeNode(declaration) || checkObjectLiteralMethod(declaration, 0 /* Normal */); + } else if (isParameter(declaration) || isPropertyDeclaration(declaration) || isPropertySignature(declaration) || isVariableDeclaration(declaration) || isBindingElement(declaration) || isJSDocPropertyLikeTag(declaration)) { + type = getWidenedTypeForVariableLikeDeclaration( + declaration, + /*reportErrors*/ + true + ); + } else if (isEnumDeclaration(declaration)) { + type = getTypeOfFuncClassEnumModule(symbol); + } else if (isEnumMember(declaration)) { + type = getTypeOfEnumMember(symbol); + } else { + return Debug.fail("Unhandled declaration kind! " + Debug.formatSyntaxKind(declaration.kind) + " for " + Debug.formatSymbol(symbol)); + } + if (!popTypeResolution()) { + if (symbol.flags & 512 /* ValueModule */ && !(symbol.flags & 67108864 /* Assignment */)) { + return getTypeOfFuncClassEnumModule(symbol); + } + return reportCircularityError(symbol); + } + return type; + } + function getAnnotatedAccessorTypeNode(accessor) { + if (accessor) { + switch (accessor.kind) { + case 178 /* GetAccessor */: + const getterTypeAnnotation = getEffectiveReturnTypeNode(accessor); + return getterTypeAnnotation; + case 179 /* SetAccessor */: + const setterTypeAnnotation = getEffectiveSetAccessorTypeAnnotationNode(accessor); + return setterTypeAnnotation; + case 173 /* PropertyDeclaration */: + Debug.assert(hasAccessorModifier(accessor)); + const accessorTypeAnnotation = getEffectiveTypeAnnotationNode(accessor); + return accessorTypeAnnotation; + } + } + return void 0; + } + function getAnnotatedAccessorType(accessor) { + const node = getAnnotatedAccessorTypeNode(accessor); + return node && getTypeFromTypeNode(node); + } + function getAnnotatedAccessorThisParameter(accessor) { + const parameter = getAccessorThisParameter(accessor); + return parameter && parameter.symbol; + } + function getThisTypeOfDeclaration(declaration) { + return getThisTypeOfSignature(getSignatureFromDeclaration(declaration)); + } + function getTypeOfAccessors(symbol) { + const links = getSymbolLinks(symbol); + if (!links.type) { + if (!pushTypeResolution(symbol, 0 /* Type */)) { + return errorType; + } + const getter = getDeclarationOfKind(symbol, 178 /* GetAccessor */); + const setter = getDeclarationOfKind(symbol, 179 /* SetAccessor */); + const accessor = tryCast(getDeclarationOfKind(symbol, 173 /* PropertyDeclaration */), isAutoAccessorPropertyDeclaration); + let type = getter && isInJSFile(getter) && getTypeForDeclarationFromJSDocComment(getter) || getAnnotatedAccessorType(getter) || getAnnotatedAccessorType(setter) || getAnnotatedAccessorType(accessor) || getter && getter.body && getReturnTypeFromBody(getter) || accessor && getWidenedTypeForVariableLikeDeclaration( + accessor, + /*reportErrors*/ + true + ); + if (!type) { + if (setter && !isPrivateWithinAmbient(setter)) { + errorOrSuggestion(noImplicitAny, setter, Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation, symbolToString(symbol)); + } else if (getter && !isPrivateWithinAmbient(getter)) { + errorOrSuggestion(noImplicitAny, getter, Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation, symbolToString(symbol)); + } else if (accessor && !isPrivateWithinAmbient(accessor)) { + errorOrSuggestion(noImplicitAny, accessor, Diagnostics.Member_0_implicitly_has_an_1_type, symbolToString(symbol), "any"); + } + type = anyType; + } + if (!popTypeResolution()) { + if (getAnnotatedAccessorTypeNode(getter)) { + error2(getter, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); + } else if (getAnnotatedAccessorTypeNode(setter)) { + error2(setter, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); + } else if (getAnnotatedAccessorTypeNode(accessor)) { + error2(setter, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); + } else if (getter && noImplicitAny) { + error2(getter, Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, symbolToString(symbol)); + } + type = anyType; + } + links.type ?? (links.type = type); + } + return links.type; + } + function getWriteTypeOfAccessors(symbol) { + const links = getSymbolLinks(symbol); + if (!links.writeType) { + if (!pushTypeResolution(symbol, 7 /* WriteType */)) { + return errorType; + } + const setter = getDeclarationOfKind(symbol, 179 /* SetAccessor */) ?? tryCast(getDeclarationOfKind(symbol, 173 /* PropertyDeclaration */), isAutoAccessorPropertyDeclaration); + let writeType = getAnnotatedAccessorType(setter); + if (!popTypeResolution()) { + if (getAnnotatedAccessorTypeNode(setter)) { + error2(setter, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); + } + writeType = anyType; + } + links.writeType ?? (links.writeType = writeType || getTypeOfAccessors(symbol)); + } + return links.writeType; + } + function getBaseTypeVariableOfClass(symbol) { + const baseConstructorType = getBaseConstructorTypeOfClass(getDeclaredTypeOfClassOrInterface(symbol)); + return baseConstructorType.flags & 8650752 /* TypeVariable */ ? baseConstructorType : baseConstructorType.flags & 2097152 /* Intersection */ ? find(baseConstructorType.types, (t) => !!(t.flags & 8650752 /* TypeVariable */)) : void 0; + } + function getTypeOfFuncClassEnumModule(symbol) { + let links = getSymbolLinks(symbol); + const originalLinks = links; + if (!links.type) { + const expando = symbol.valueDeclaration && getSymbolOfExpando( + symbol.valueDeclaration, + /*allowDeclaration*/ + false + ); + if (expando) { + const merged = mergeJSSymbols(symbol, expando); + if (merged) { + symbol = merged; + links = merged.links; + } + } + originalLinks.type = links.type = getTypeOfFuncClassEnumModuleWorker(symbol); + } + return links.type; + } + function getTypeOfFuncClassEnumModuleWorker(symbol) { + const declaration = symbol.valueDeclaration; + if (symbol.flags & 1536 /* Module */ && isShorthandAmbientModuleSymbol(symbol)) { + return anyType; + } else if (declaration && (declaration.kind === 227 /* BinaryExpression */ || isAccessExpression(declaration) && declaration.parent.kind === 227 /* BinaryExpression */)) { + return getWidenedTypeForAssignmentDeclaration(symbol); + } else if (symbol.flags & 512 /* ValueModule */ && declaration && isSourceFile(declaration) && declaration.commonJsModuleIndicator) { + const resolvedModule = resolveExternalModuleSymbol(symbol); + if (resolvedModule !== symbol) { + if (!pushTypeResolution(symbol, 0 /* Type */)) { + return errorType; + } + const exportEquals = getMergedSymbol(symbol.exports.get("export=" /* ExportEquals */)); + const type2 = getWidenedTypeForAssignmentDeclaration(exportEquals, exportEquals === resolvedModule ? void 0 : resolvedModule); + if (!popTypeResolution()) { + return reportCircularityError(symbol); + } + return type2; + } + } + const type = createObjectType(16 /* Anonymous */, symbol); + if (symbol.flags & 32 /* Class */) { + const baseTypeVariable = getBaseTypeVariableOfClass(symbol); + return baseTypeVariable ? getIntersectionType([type, baseTypeVariable]) : type; + } else { + return strictNullChecks && symbol.flags & 16777216 /* Optional */ ? getOptionalType( + type, + /*isProperty*/ + true + ) : type; + } + } + function getTypeOfEnumMember(symbol) { + const links = getSymbolLinks(symbol); + return links.type || (links.type = getDeclaredTypeOfEnumMember(symbol)); + } + function getTypeOfAlias(symbol) { + const links = getSymbolLinks(symbol); + if (!links.type) { + if (!pushTypeResolution(symbol, 0 /* Type */)) { + return errorType; + } + const targetSymbol = resolveAlias(symbol); + const exportSymbol = symbol.declarations && getTargetOfAliasDeclaration( + getDeclarationOfAliasSymbol(symbol), + /*dontRecursivelyResolve*/ + true + ); + const declaredType = firstDefined(exportSymbol == null ? void 0 : exportSymbol.declarations, (d) => isExportAssignment(d) ? tryGetTypeFromEffectiveTypeNode(d) : void 0); + links.type ?? (links.type = (exportSymbol == null ? void 0 : exportSymbol.declarations) && isDuplicatedCommonJSExport(exportSymbol.declarations) && symbol.declarations.length ? getFlowTypeFromCommonJSExport(exportSymbol) : isDuplicatedCommonJSExport(symbol.declarations) ? autoType : declaredType ? declaredType : getSymbolFlags(targetSymbol) & 111551 /* Value */ ? getTypeOfSymbol(targetSymbol) : errorType); + if (!popTypeResolution()) { + reportCircularityError(exportSymbol ?? symbol); + return links.type ?? (links.type = errorType); + } + } + return links.type; + } + function getTypeOfInstantiatedSymbol(symbol) { + const links = getSymbolLinks(symbol); + return links.type || (links.type = instantiateType(getTypeOfSymbol(links.target), links.mapper)); + } + function getWriteTypeOfInstantiatedSymbol(symbol) { + const links = getSymbolLinks(symbol); + return links.writeType || (links.writeType = instantiateType(getWriteTypeOfSymbol(links.target), links.mapper)); + } + function reportCircularityError(symbol) { + const declaration = symbol.valueDeclaration; + if (declaration) { + if (getEffectiveTypeAnnotationNode(declaration)) { + error2(symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_type_annotation, symbolToString(symbol)); + return errorType; + } + if (noImplicitAny && (declaration.kind !== 170 /* Parameter */ || declaration.initializer)) { + error2(symbol.valueDeclaration, Diagnostics._0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or_indirectly_in_its_own_initializer, symbolToString(symbol)); + } + } else if (symbol.flags & 2097152 /* Alias */) { + const node = getDeclarationOfAliasSymbol(symbol); + if (node) { + error2(node, Diagnostics.Circular_definition_of_import_alias_0, symbolToString(symbol)); + } + } + return anyType; + } + function getTypeOfSymbolWithDeferredType(symbol) { + const links = getSymbolLinks(symbol); + if (!links.type) { + Debug.assertIsDefined(links.deferralParent); + Debug.assertIsDefined(links.deferralConstituents); + links.type = links.deferralParent.flags & 1048576 /* Union */ ? getUnionType(links.deferralConstituents) : getIntersectionType(links.deferralConstituents); + } + return links.type; + } + function getWriteTypeOfSymbolWithDeferredType(symbol) { + const links = getSymbolLinks(symbol); + if (!links.writeType && links.deferralWriteConstituents) { + Debug.assertIsDefined(links.deferralParent); + Debug.assertIsDefined(links.deferralConstituents); + links.writeType = links.deferralParent.flags & 1048576 /* Union */ ? getUnionType(links.deferralWriteConstituents) : getIntersectionType(links.deferralWriteConstituents); + } + return links.writeType; + } + function getWriteTypeOfSymbol(symbol) { + const checkFlags = getCheckFlags(symbol); + if (checkFlags & 2 /* SyntheticProperty */) { + return checkFlags & 65536 /* DeferredType */ ? getWriteTypeOfSymbolWithDeferredType(symbol) || getTypeOfSymbolWithDeferredType(symbol) : ( + // NOTE: cast to TransientSymbol should be safe because only TransientSymbols can have CheckFlags.SyntheticProperty + symbol.links.writeType || symbol.links.type + ); + } + if (symbol.flags & 4 /* Property */) { + return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */)); + } + if (symbol.flags & 98304 /* Accessor */) { + return checkFlags & 1 /* Instantiated */ ? getWriteTypeOfInstantiatedSymbol(symbol) : getWriteTypeOfAccessors(symbol); + } + return getTypeOfSymbol(symbol); + } + function getTypeOfSymbol(symbol) { + const checkFlags = getCheckFlags(symbol); + if (checkFlags & 65536 /* DeferredType */) { + return getTypeOfSymbolWithDeferredType(symbol); + } + if (checkFlags & 1 /* Instantiated */) { + return getTypeOfInstantiatedSymbol(symbol); + } + if (checkFlags & 262144 /* Mapped */) { + return getTypeOfMappedSymbol(symbol); + } + if (checkFlags & 8192 /* ReverseMapped */) { + return getTypeOfReverseMappedSymbol(symbol); + } + if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) { + return getTypeOfVariableOrParameterOrProperty(symbol); + } + if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 384 /* Enum */ | 512 /* ValueModule */)) { + return getTypeOfFuncClassEnumModule(symbol); + } + if (symbol.flags & 8 /* EnumMember */) { + return getTypeOfEnumMember(symbol); + } + if (symbol.flags & 98304 /* Accessor */) { + return getTypeOfAccessors(symbol); + } + if (symbol.flags & 2097152 /* Alias */) { + return getTypeOfAlias(symbol); + } + return errorType; + } + function getNonMissingTypeOfSymbol(symbol) { + return removeMissingType(getTypeOfSymbol(symbol), !!(symbol.flags & 16777216 /* Optional */)); + } + function isReferenceToSomeType(type, targets) { + if (type === void 0 || (getObjectFlags(type) & 4 /* Reference */) === 0) { + return false; + } + for (const target of targets) { + if (type.target === target) { + return true; + } + } + return false; + } + function isReferenceToType2(type, target) { + return type !== void 0 && target !== void 0 && (getObjectFlags(type) & 4 /* Reference */) !== 0 && type.target === target; + } + function getTargetType(type) { + return getObjectFlags(type) & 4 /* Reference */ ? type.target : type; + } + function hasBaseType(type, checkBase) { + return check(type); + function check(type2) { + if (getObjectFlags(type2) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { + const target = getTargetType(type2); + return target === checkBase || some(getBaseTypes(target), check); + } else if (type2.flags & 2097152 /* Intersection */) { + return some(type2.types, check); + } + return false; + } + } + function appendTypeParameters(typeParameters, declarations) { + for (const declaration of declarations) { + typeParameters = appendIfUnique(typeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(declaration))); + } + return typeParameters; + } + function getOuterTypeParameters(node, includeThisTypes) { + while (true) { + node = node.parent; + if (node && isBinaryExpression(node)) { + const assignmentKind = getAssignmentDeclarationKind(node); + if (assignmentKind === 6 /* Prototype */ || assignmentKind === 3 /* PrototypeProperty */) { + const symbol = getSymbolOfDeclaration(node.left); + if (symbol && symbol.parent && !findAncestor(symbol.parent.valueDeclaration, (d) => node === d)) { + node = symbol.parent.valueDeclaration; + } + } + } + if (!node) { + return void 0; + } + const kind = node.kind; + switch (kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 174 /* MethodSignature */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 318 /* JSDocFunctionType */: + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 266 /* TypeAliasDeclaration */: + case 346 /* JSDocTemplateTag */: + case 347 /* JSDocTypedefTag */: + case 341 /* JSDocEnumTag */: + case 339 /* JSDocCallbackTag */: + case 201 /* MappedType */: + case 195 /* ConditionalType */: { + const outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); + if ((kind === 219 /* FunctionExpression */ || kind === 220 /* ArrowFunction */ || isObjectLiteralMethod(node)) && isContextSensitive(node)) { + const signature = firstOrUndefined(getSignaturesOfType(getTypeOfSymbol(getSymbolOfDeclaration(node)), 0 /* Call */)); + if (signature && signature.typeParameters) { + return [...outerTypeParameters || emptyArray, ...signature.typeParameters]; + } + } + if (kind === 201 /* MappedType */) { + return append(outerTypeParameters, getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node.typeParameter))); + } else if (kind === 195 /* ConditionalType */) { + return concatenate(outerTypeParameters, getInferTypeParameters(node)); + } + const outerAndOwnTypeParameters = appendTypeParameters(outerTypeParameters, getEffectiveTypeParameterDeclarations(node)); + const thisType = includeThisTypes && (kind === 264 /* ClassDeclaration */ || kind === 232 /* ClassExpression */ || kind === 265 /* InterfaceDeclaration */ || isJSConstructor(node)) && getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node)).thisType; + return thisType ? append(outerAndOwnTypeParameters, thisType) : outerAndOwnTypeParameters; + } + case 342 /* JSDocParameterTag */: + const paramSymbol = getParameterSymbolFromJSDoc(node); + if (paramSymbol) { + node = paramSymbol.valueDeclaration; + } + break; + case 321 /* JSDoc */: { + const outerTypeParameters = getOuterTypeParameters(node, includeThisTypes); + return node.tags ? appendTypeParameters(outerTypeParameters, flatMap(node.tags, (t) => isJSDocTemplateTag(t) ? t.typeParameters : void 0)) : outerTypeParameters; + } + } + } + } + function getOuterTypeParametersOfClassOrInterface(symbol) { + var _a; + const declaration = symbol.flags & 32 /* Class */ || symbol.flags & 16 /* Function */ ? symbol.valueDeclaration : (_a = symbol.declarations) == null ? void 0 : _a.find((decl) => { + if (decl.kind === 265 /* InterfaceDeclaration */) { + return true; + } + if (decl.kind !== 261 /* VariableDeclaration */) { + return false; + } + const initializer = decl.initializer; + return !!initializer && (initializer.kind === 219 /* FunctionExpression */ || initializer.kind === 220 /* ArrowFunction */); + }); + Debug.assert(!!declaration, "Class was missing valueDeclaration -OR- non-class had no interface declarations"); + return getOuterTypeParameters(declaration); + } + function getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) { + if (!symbol.declarations) { + return; + } + let result; + for (const node of symbol.declarations) { + if (node.kind === 265 /* InterfaceDeclaration */ || node.kind === 264 /* ClassDeclaration */ || node.kind === 232 /* ClassExpression */ || isJSConstructor(node) || isTypeAlias(node)) { + const declaration = node; + result = appendTypeParameters(result, getEffectiveTypeParameterDeclarations(declaration)); + } + } + return result; + } + function getTypeParametersOfClassOrInterface(symbol) { + return concatenate(getOuterTypeParametersOfClassOrInterface(symbol), getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol)); + } + function isMixinConstructorType(type) { + const signatures = getSignaturesOfType(type, 1 /* Construct */); + if (signatures.length === 1) { + const s = signatures[0]; + if (!s.typeParameters && s.parameters.length === 1 && signatureHasRestParameter(s)) { + const paramType = getTypeOfParameter(s.parameters[0]); + return isTypeAny(paramType) || getElementTypeOfArrayType(paramType) === anyType; + } + } + return false; + } + function isConstructorType(type) { + if (getSignaturesOfType(type, 1 /* Construct */).length > 0) { + return true; + } + if (type.flags & 8650752 /* TypeVariable */) { + const constraint = getBaseConstraintOfType(type); + return !!constraint && isMixinConstructorType(constraint); + } + return false; + } + function getBaseTypeNodeOfClass(type) { + const decl = getClassLikeDeclarationOfSymbol(type.symbol); + return decl && getEffectiveBaseTypeNode(decl); + } + function getConstructorsForTypeArguments(type, typeArgumentNodes, location) { + const typeArgCount = length(typeArgumentNodes); + const isJavascript = isInJSFile(location); + return filter(getSignaturesOfType(type, 1 /* Construct */), (sig) => (isJavascript || typeArgCount >= getMinTypeArgumentCount(sig.typeParameters)) && typeArgCount <= length(sig.typeParameters)); + } + function getInstantiatedConstructorsForTypeArguments(type, typeArgumentNodes, location) { + const signatures = getConstructorsForTypeArguments(type, typeArgumentNodes, location); + const typeArguments = map(typeArgumentNodes, getTypeFromTypeNode); + return sameMap(signatures, (sig) => some(sig.typeParameters) ? getSignatureInstantiation(sig, typeArguments, isInJSFile(location)) : sig); + } + function getBaseConstructorTypeOfClass(type) { + if (!type.resolvedBaseConstructorType) { + const decl = getClassLikeDeclarationOfSymbol(type.symbol); + const extended = decl && getEffectiveBaseTypeNode(decl); + const baseTypeNode = getBaseTypeNodeOfClass(type); + if (!baseTypeNode) { + return type.resolvedBaseConstructorType = undefinedType; + } + if (!pushTypeResolution(type, 1 /* ResolvedBaseConstructorType */)) { + return errorType; + } + const baseConstructorType = checkExpression(baseTypeNode.expression); + if (extended && baseTypeNode !== extended) { + Debug.assert(!extended.typeArguments); + checkExpression(extended.expression); + } + if (baseConstructorType.flags & (524288 /* Object */ | 2097152 /* Intersection */)) { + resolveStructuredTypeMembers(baseConstructorType); + } + if (!popTypeResolution()) { + error2(type.symbol.valueDeclaration, Diagnostics._0_is_referenced_directly_or_indirectly_in_its_own_base_expression, symbolToString(type.symbol)); + return type.resolvedBaseConstructorType ?? (type.resolvedBaseConstructorType = errorType); + } + if (!(baseConstructorType.flags & 1 /* Any */) && baseConstructorType !== nullWideningType && !isConstructorType(baseConstructorType)) { + const err = error2(baseTypeNode.expression, Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType)); + if (baseConstructorType.flags & 262144 /* TypeParameter */) { + const constraint = getConstraintFromTypeParameter(baseConstructorType); + let ctorReturn = unknownType; + if (constraint) { + const ctorSig = getSignaturesOfType(constraint, 1 /* Construct */); + if (ctorSig[0]) { + ctorReturn = getReturnTypeOfSignature(ctorSig[0]); + } + } + if (baseConstructorType.symbol.declarations) { + addRelatedInfo(err, createDiagnosticForNode(baseConstructorType.symbol.declarations[0], Diagnostics.Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1, symbolToString(baseConstructorType.symbol), typeToString(ctorReturn))); + } + } + return type.resolvedBaseConstructorType ?? (type.resolvedBaseConstructorType = errorType); + } + type.resolvedBaseConstructorType ?? (type.resolvedBaseConstructorType = baseConstructorType); + } + return type.resolvedBaseConstructorType; + } + function getImplementsTypes(type) { + let resolvedImplementsTypes = emptyArray; + if (type.symbol.declarations) { + for (const declaration of type.symbol.declarations) { + const implementsTypeNodes = getEffectiveImplementsTypeNodes(declaration); + if (!implementsTypeNodes) continue; + for (const node of implementsTypeNodes) { + const implementsType = getTypeFromTypeNode(node); + if (!isErrorType(implementsType)) { + if (resolvedImplementsTypes === emptyArray) { + resolvedImplementsTypes = [implementsType]; + } else { + resolvedImplementsTypes.push(implementsType); + } + } + } + } + } + return resolvedImplementsTypes; + } + function reportCircularBaseType(node, type) { + error2(node, Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString( + type, + /*enclosingDeclaration*/ + void 0, + 2 /* WriteArrayAsGenericType */ + )); + } + function getBaseTypes(type) { + if (!type.baseTypesResolved) { + if (pushTypeResolution(type, 6 /* ResolvedBaseTypes */)) { + if (type.objectFlags & 8 /* Tuple */) { + type.resolvedBaseTypes = [getTupleBaseType(type)]; + } else if (type.symbol.flags & (32 /* Class */ | 64 /* Interface */)) { + if (type.symbol.flags & 32 /* Class */) { + resolveBaseTypesOfClass(type); + } + if (type.symbol.flags & 64 /* Interface */) { + resolveBaseTypesOfInterface(type); + } + } else { + Debug.fail("type must be class or interface"); + } + if (!popTypeResolution() && type.symbol.declarations) { + for (const declaration of type.symbol.declarations) { + if (declaration.kind === 264 /* ClassDeclaration */ || declaration.kind === 265 /* InterfaceDeclaration */) { + reportCircularBaseType(declaration, type); + } + } + } + } + type.baseTypesResolved = true; + } + return type.resolvedBaseTypes; + } + function getTupleBaseType(type) { + const elementTypes = sameMap(type.typeParameters, (t, i) => type.elementFlags[i] & 8 /* Variadic */ ? getIndexedAccessType(t, numberType) : t); + return createArrayType(getUnionType(elementTypes || emptyArray), type.readonly); + } + function resolveBaseTypesOfClass(type) { + type.resolvedBaseTypes = resolvingEmptyArray; + const baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type)); + if (!(baseConstructorType.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 1 /* Any */))) { + return type.resolvedBaseTypes = emptyArray; + } + const baseTypeNode = getBaseTypeNodeOfClass(type); + let baseType; + const originalBaseType = baseConstructorType.symbol ? getDeclaredTypeOfSymbol(baseConstructorType.symbol) : void 0; + if (baseConstructorType.symbol && baseConstructorType.symbol.flags & 32 /* Class */ && areAllOuterTypeParametersApplied(originalBaseType)) { + baseType = getTypeFromClassOrInterfaceReference(baseTypeNode, baseConstructorType.symbol); + } else if (baseConstructorType.flags & 1 /* Any */) { + baseType = baseConstructorType; + } else { + const constructors = getInstantiatedConstructorsForTypeArguments(baseConstructorType, baseTypeNode.typeArguments, baseTypeNode); + if (!constructors.length) { + error2(baseTypeNode.expression, Diagnostics.No_base_constructor_has_the_specified_number_of_type_arguments); + return type.resolvedBaseTypes = emptyArray; + } + baseType = getReturnTypeOfSignature(constructors[0]); + } + if (isErrorType(baseType)) { + return type.resolvedBaseTypes = emptyArray; + } + const reducedBaseType = getReducedType(baseType); + if (!isValidBaseType(reducedBaseType)) { + const elaboration = elaborateNeverIntersection( + /*errorInfo*/ + void 0, + baseType + ); + const diagnostic = chainDiagnosticMessages(elaboration, Diagnostics.Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_known_members, typeToString(reducedBaseType)); + diagnostics.add(createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(baseTypeNode.expression), baseTypeNode.expression, diagnostic)); + return type.resolvedBaseTypes = emptyArray; + } + if (type === reducedBaseType || hasBaseType(reducedBaseType, type)) { + error2(type.symbol.valueDeclaration, Diagnostics.Type_0_recursively_references_itself_as_a_base_type, typeToString( + type, + /*enclosingDeclaration*/ + void 0, + 2 /* WriteArrayAsGenericType */ + )); + return type.resolvedBaseTypes = emptyArray; + } + if (type.resolvedBaseTypes === resolvingEmptyArray) { + type.members = void 0; + } + return type.resolvedBaseTypes = [reducedBaseType]; + } + function areAllOuterTypeParametersApplied(type) { + const outerTypeParameters = type.outerTypeParameters; + if (outerTypeParameters) { + const last2 = outerTypeParameters.length - 1; + const typeArguments = getTypeArguments(type); + return outerTypeParameters[last2].symbol !== typeArguments[last2].symbol; + } + return true; + } + function isValidBaseType(type) { + if (type.flags & 262144 /* TypeParameter */) { + const constraint = getBaseConstraintOfType(type); + if (constraint) { + return isValidBaseType(constraint); + } + } + return !!(type.flags & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 1 /* Any */) && !isGenericMappedType(type) || type.flags & 2097152 /* Intersection */ && every(type.types, isValidBaseType)); + } + function resolveBaseTypesOfInterface(type) { + type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; + if (type.symbol.declarations) { + for (const declaration of type.symbol.declarations) { + if (declaration.kind === 265 /* InterfaceDeclaration */ && getInterfaceBaseTypeNodes(declaration)) { + for (const node of getInterfaceBaseTypeNodes(declaration)) { + const baseType = getReducedType(getTypeFromTypeNode(node)); + if (!isErrorType(baseType)) { + if (isValidBaseType(baseType)) { + if (type !== baseType && !hasBaseType(baseType, type)) { + if (type.resolvedBaseTypes === emptyArray) { + type.resolvedBaseTypes = [baseType]; + } else { + type.resolvedBaseTypes.push(baseType); + } + } else { + reportCircularBaseType(declaration, type); + } + } else { + error2(node, Diagnostics.An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_members); + } + } + } + } + } + } + } + function isThislessInterface(symbol) { + if (!symbol.declarations) { + return true; + } + for (const declaration of symbol.declarations) { + if (declaration.kind === 265 /* InterfaceDeclaration */) { + if (declaration.flags & 256 /* ContainsThis */) { + return false; + } + const baseTypeNodes = getInterfaceBaseTypeNodes(declaration); + if (baseTypeNodes) { + for (const node of baseTypeNodes) { + if (isEntityNameExpression(node.expression)) { + const baseSymbol = resolveEntityName( + node.expression, + 788968 /* Type */, + /*ignoreErrors*/ + true + ); + if (!baseSymbol || !(baseSymbol.flags & 64 /* Interface */) || getDeclaredTypeOfClassOrInterface(baseSymbol).thisType) { + return false; + } + } + } + } + } + } + return true; + } + function getDeclaredTypeOfClassOrInterface(symbol) { + let links = getSymbolLinks(symbol); + const originalLinks = links; + if (!links.declaredType) { + const kind = symbol.flags & 32 /* Class */ ? 1 /* Class */ : 2 /* Interface */; + const merged = mergeJSSymbols(symbol, symbol.valueDeclaration && getAssignedClassSymbol(symbol.valueDeclaration)); + if (merged) { + symbol = merged; + links = merged.links; + } + const type = originalLinks.declaredType = links.declaredType = createObjectType(kind, symbol); + const outerTypeParameters = getOuterTypeParametersOfClassOrInterface(symbol); + const localTypeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + if (outerTypeParameters || localTypeParameters || kind === 1 /* Class */ || !isThislessInterface(symbol)) { + type.objectFlags |= 4 /* Reference */; + type.typeParameters = concatenate(outerTypeParameters, localTypeParameters); + type.outerTypeParameters = outerTypeParameters; + type.localTypeParameters = localTypeParameters; + type.instantiations = /* @__PURE__ */ new Map(); + type.instantiations.set(getTypeListId(type.typeParameters), type); + type.target = type; + type.resolvedTypeArguments = type.typeParameters; + type.thisType = createTypeParameter(symbol); + type.thisType.isThisType = true; + type.thisType.constraint = type; + } + } + return links.declaredType; + } + function getDeclaredTypeOfTypeAlias(symbol) { + var _a; + const links = getSymbolLinks(symbol); + if (!links.declaredType) { + if (!pushTypeResolution(symbol, 2 /* DeclaredType */)) { + return errorType; + } + const declaration = Debug.checkDefined((_a = symbol.declarations) == null ? void 0 : _a.find(isTypeAlias), "Type alias symbol with no valid declaration found"); + const typeNode = isJSDocTypeAlias(declaration) ? declaration.typeExpression : declaration.type; + let type = typeNode ? getTypeFromTypeNode(typeNode) : errorType; + if (popTypeResolution()) { + const typeParameters = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + if (typeParameters) { + links.typeParameters = typeParameters; + links.instantiations = /* @__PURE__ */ new Map(); + links.instantiations.set(getTypeListId(typeParameters), type); + } + if (type === intrinsicMarkerType && symbol.escapedName === "BuiltinIteratorReturn") { + type = getBuiltinIteratorReturnType(); + } + } else { + type = errorType; + if (declaration.kind === 341 /* JSDocEnumTag */) { + error2(declaration.typeExpression.type, Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol)); + } else { + error2(isNamedDeclaration(declaration) ? declaration.name || declaration : declaration, Diagnostics.Type_alias_0_circularly_references_itself, symbolToString(symbol)); + } + } + links.declaredType ?? (links.declaredType = type); + } + return links.declaredType; + } + function getBaseTypeOfEnumLikeType(type) { + return type.flags & 1056 /* EnumLike */ && type.symbol.flags & 8 /* EnumMember */ ? getDeclaredTypeOfSymbol(getParentOfSymbol(type.symbol)) : type; + } + function getDeclaredTypeOfEnum(symbol) { + const links = getSymbolLinks(symbol); + if (!links.declaredType) { + const memberTypeList = []; + if (symbol.declarations) { + for (const declaration of symbol.declarations) { + if (declaration.kind === 267 /* EnumDeclaration */) { + for (const member of declaration.members) { + if (hasBindableName(member)) { + const memberSymbol = getSymbolOfDeclaration(member); + const value = getEnumMemberValue(member).value; + const memberType = getFreshTypeOfLiteralType( + value !== void 0 ? getEnumLiteralType(value, getSymbolId(symbol), memberSymbol) : createComputedEnumType(memberSymbol) + ); + getSymbolLinks(memberSymbol).declaredType = memberType; + memberTypeList.push(getRegularTypeOfLiteralType(memberType)); + } + } + } + } + } + const enumType = memberTypeList.length ? getUnionType( + memberTypeList, + 1 /* Literal */, + symbol, + /*aliasTypeArguments*/ + void 0 + ) : createComputedEnumType(symbol); + if (enumType.flags & 1048576 /* Union */) { + enumType.flags |= 1024 /* EnumLiteral */; + enumType.symbol = symbol; + } + links.declaredType = enumType; + } + return links.declaredType; + } + function createComputedEnumType(symbol) { + const regularType = createTypeWithSymbol(32 /* Enum */, symbol); + const freshType = createTypeWithSymbol(32 /* Enum */, symbol); + regularType.regularType = regularType; + regularType.freshType = freshType; + freshType.regularType = regularType; + freshType.freshType = freshType; + return regularType; + } + function getDeclaredTypeOfEnumMember(symbol) { + const links = getSymbolLinks(symbol); + if (!links.declaredType) { + const enumType = getDeclaredTypeOfEnum(getParentOfSymbol(symbol)); + if (!links.declaredType) { + links.declaredType = enumType; + } + } + return links.declaredType; + } + function getDeclaredTypeOfTypeParameter(symbol) { + const links = getSymbolLinks(symbol); + return links.declaredType || (links.declaredType = createTypeParameter(symbol)); + } + function getDeclaredTypeOfAlias(symbol) { + const links = getSymbolLinks(symbol); + return links.declaredType || (links.declaredType = getDeclaredTypeOfSymbol(resolveAlias(symbol))); + } + function getDeclaredTypeOfSymbol(symbol) { + return tryGetDeclaredTypeOfSymbol(symbol) || errorType; + } + function tryGetDeclaredTypeOfSymbol(symbol) { + if (symbol.flags & (32 /* Class */ | 64 /* Interface */)) { + return getDeclaredTypeOfClassOrInterface(symbol); + } + if (symbol.flags & 524288 /* TypeAlias */) { + return getDeclaredTypeOfTypeAlias(symbol); + } + if (symbol.flags & 262144 /* TypeParameter */) { + return getDeclaredTypeOfTypeParameter(symbol); + } + if (symbol.flags & 384 /* Enum */) { + return getDeclaredTypeOfEnum(symbol); + } + if (symbol.flags & 8 /* EnumMember */) { + return getDeclaredTypeOfEnumMember(symbol); + } + if (symbol.flags & 2097152 /* Alias */) { + return getDeclaredTypeOfAlias(symbol); + } + return void 0; + } + function isThislessType(node) { + switch (node.kind) { + case 133 /* AnyKeyword */: + case 159 /* UnknownKeyword */: + case 154 /* StringKeyword */: + case 150 /* NumberKeyword */: + case 163 /* BigIntKeyword */: + case 136 /* BooleanKeyword */: + case 155 /* SymbolKeyword */: + case 151 /* ObjectKeyword */: + case 116 /* VoidKeyword */: + case 157 /* UndefinedKeyword */: + case 146 /* NeverKeyword */: + case 202 /* LiteralType */: + return true; + case 189 /* ArrayType */: + return isThislessType(node.elementType); + case 184 /* TypeReference */: + return !node.typeArguments || node.typeArguments.every(isThislessType); + } + return false; + } + function isThislessTypeParameter(node) { + const constraint = getEffectiveConstraintOfTypeParameter(node); + return !constraint || isThislessType(constraint); + } + function isThislessVariableLikeDeclaration(node) { + const typeNode = getEffectiveTypeAnnotationNode(node); + return typeNode ? isThislessType(typeNode) : !hasInitializer(node); + } + function isThislessFunctionLikeDeclaration(node) { + const returnType = getEffectiveReturnTypeNode(node); + const typeParameters = getEffectiveTypeParameterDeclarations(node); + return (node.kind === 177 /* Constructor */ || !!returnType && isThislessType(returnType)) && node.parameters.every(isThislessVariableLikeDeclaration) && typeParameters.every(isThislessTypeParameter); + } + function isThisless(symbol) { + if (symbol.declarations && symbol.declarations.length === 1) { + const declaration = symbol.declarations[0]; + if (declaration) { + switch (declaration.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return isThislessVariableLikeDeclaration(declaration); + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return isThislessFunctionLikeDeclaration(declaration); + } + } + } + return false; + } + function createInstantiatedSymbolTable(symbols, mapper, mappingThisOnly) { + const result = createSymbolTable(); + for (const symbol of symbols) { + result.set(symbol.escapedName, mappingThisOnly && isThisless(symbol) ? symbol : instantiateSymbol(symbol, mapper)); + } + return result; + } + function addInheritedMembers(symbols, baseSymbols) { + for (const base of baseSymbols) { + if (isStaticPrivateIdentifierProperty(base)) { + continue; + } + const derived = symbols.get(base.escapedName); + if (!derived || derived.valueDeclaration && isBinaryExpression(derived.valueDeclaration) && !isConstructorDeclaredProperty(derived) && !getContainingClassStaticBlock(derived.valueDeclaration)) { + symbols.set(base.escapedName, base); + symbols.set(base.escapedName, base); + } + } + } + function isStaticPrivateIdentifierProperty(s) { + return !!s.valueDeclaration && isPrivateIdentifierClassElementDeclaration(s.valueDeclaration) && isStatic(s.valueDeclaration); + } + function resolveDeclaredMembers(type) { + if (!type.declaredProperties) { + const symbol = type.symbol; + const members = getMembersOfSymbol(symbol); + type.declaredProperties = getNamedMembers(members); + type.declaredCallSignatures = emptyArray; + type.declaredConstructSignatures = emptyArray; + type.declaredIndexInfos = emptyArray; + type.declaredCallSignatures = getSignaturesOfSymbol(members.get("__call" /* Call */)); + type.declaredConstructSignatures = getSignaturesOfSymbol(members.get("__new" /* New */)); + type.declaredIndexInfos = getIndexInfosOfSymbol(symbol); + } + return type; + } + function isLateBindableName(node) { + return isLateBindableAST(node) && isTypeUsableAsPropertyName(isComputedPropertyName(node) ? checkComputedPropertyName(node) : checkExpressionCached(node.argumentExpression)); + } + function isLateBindableIndexSignature(node) { + return isLateBindableAST(node) && isTypeUsableAsIndexSignature(isComputedPropertyName(node) ? checkComputedPropertyName(node) : checkExpressionCached(node.argumentExpression)); + } + function isLateBindableAST(node) { + if (!isComputedPropertyName(node) && !isElementAccessExpression(node)) { + return false; + } + const expr = isComputedPropertyName(node) ? node.expression : node.argumentExpression; + return isEntityNameExpression(expr); + } + function isTypeUsableAsIndexSignature(type) { + return isTypeAssignableTo(type, stringNumberSymbolType); + } + function isLateBoundName(name) { + return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) === 64 /* at */; + } + function hasLateBindableName(node) { + const name = getNameOfDeclaration(node); + return !!name && isLateBindableName(name); + } + function hasLateBindableIndexSignature(node) { + const name = getNameOfDeclaration(node); + return !!name && isLateBindableIndexSignature(name); + } + function hasBindableName(node) { + return !hasDynamicName(node) || hasLateBindableName(node); + } + function isNonBindableDynamicName(node) { + return isDynamicName(node) && !isLateBindableName(node); + } + function addDeclarationToLateBoundSymbol(symbol, member, symbolFlags) { + Debug.assert(!!(getCheckFlags(symbol) & 4096 /* Late */), "Expected a late-bound symbol."); + symbol.flags |= symbolFlags; + getSymbolLinks(member.symbol).lateSymbol = symbol; + if (!symbol.declarations) { + symbol.declarations = [member]; + } else if (!member.symbol.isReplaceableByMethod) { + symbol.declarations.push(member); + } + if (symbolFlags & 111551 /* Value */) { + setValueDeclaration(symbol, member); + } + } + function lateBindMember(parent2, earlySymbols, lateSymbols, decl) { + Debug.assert(!!decl.symbol, "The member is expected to have a symbol."); + const links = getNodeLinks(decl); + if (!links.resolvedSymbol) { + links.resolvedSymbol = decl.symbol; + const declName = isBinaryExpression(decl) ? decl.left : decl.name; + const type = isElementAccessExpression(declName) ? checkExpressionCached(declName.argumentExpression) : checkComputedPropertyName(declName); + if (isTypeUsableAsPropertyName(type)) { + const memberName = getPropertyNameFromType(type); + const symbolFlags = decl.symbol.flags; + let lateSymbol = lateSymbols.get(memberName); + if (!lateSymbol) lateSymbols.set(memberName, lateSymbol = createSymbol(0 /* None */, memberName, 4096 /* Late */)); + const earlySymbol = earlySymbols && earlySymbols.get(memberName); + if (!(parent2.flags & 32 /* Class */) && lateSymbol.flags & getExcludedSymbolFlags(symbolFlags)) { + const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; + const name = !(type.flags & 8192 /* UniqueESSymbol */) && unescapeLeadingUnderscores(memberName) || declarationNameToString(declName); + forEach(declarations, (declaration) => error2(getNameOfDeclaration(declaration) || declaration, Diagnostics.Property_0_was_also_declared_here, name)); + error2(declName || decl, Diagnostics.Duplicate_property_0, name); + lateSymbol = createSymbol(0 /* None */, memberName, 4096 /* Late */); + } + lateSymbol.links.nameType = type; + addDeclarationToLateBoundSymbol(lateSymbol, decl, symbolFlags); + if (lateSymbol.parent) { + Debug.assert(lateSymbol.parent === parent2, "Existing symbol parent should match new one"); + } else { + lateSymbol.parent = parent2; + } + return links.resolvedSymbol = lateSymbol; + } + } + return links.resolvedSymbol; + } + function lateBindIndexSignature(parent2, earlySymbols, lateSymbols, decl) { + let indexSymbol = lateSymbols.get("__index" /* Index */); + if (!indexSymbol) { + const early = earlySymbols == null ? void 0 : earlySymbols.get("__index" /* Index */); + if (!early) { + indexSymbol = createSymbol(0 /* None */, "__index" /* Index */, 4096 /* Late */); + } else { + indexSymbol = cloneSymbol(early); + indexSymbol.links.checkFlags |= 4096 /* Late */; + } + lateSymbols.set("__index" /* Index */, indexSymbol); + } + if (!indexSymbol.declarations) { + indexSymbol.declarations = [decl]; + } else if (!decl.symbol.isReplaceableByMethod) { + indexSymbol.declarations.push(decl); + } + } + function getResolvedMembersOrExportsOfSymbol(symbol, resolutionKind) { + const links = getSymbolLinks(symbol); + if (!links[resolutionKind]) { + const isStatic2 = resolutionKind === "resolvedExports" /* resolvedExports */; + const earlySymbols = !isStatic2 ? symbol.members : symbol.flags & 1536 /* Module */ ? getExportsOfModuleWorker(symbol).exports : symbol.exports; + links[resolutionKind] = earlySymbols || emptySymbols; + const lateSymbols = createSymbolTable(); + for (const decl of symbol.declarations || emptyArray) { + const members = getMembersOfDeclaration(decl); + if (members) { + for (const member of members) { + if (isStatic2 === hasStaticModifier(member)) { + if (hasLateBindableName(member)) { + lateBindMember(symbol, earlySymbols, lateSymbols, member); + } else if (hasLateBindableIndexSignature(member)) { + lateBindIndexSignature(symbol, earlySymbols, lateSymbols, member); + } + } + } + } + } + const assignments = getFunctionExpressionParentSymbolOrSymbol(symbol).assignmentDeclarationMembers; + if (assignments) { + const decls = arrayFrom(assignments.values()); + for (const member of decls) { + const assignmentKind = getAssignmentDeclarationKind(member); + const isInstanceMember = assignmentKind === 3 /* PrototypeProperty */ || isBinaryExpression(member) && isPossiblyAliasedThisProperty(member, assignmentKind) || assignmentKind === 9 /* ObjectDefinePrototypeProperty */ || assignmentKind === 6 /* Prototype */; + if (isStatic2 === !isInstanceMember) { + if (hasLateBindableName(member)) { + lateBindMember(symbol, earlySymbols, lateSymbols, member); + } + } + } + } + let resolved = combineSymbolTables(earlySymbols, lateSymbols); + if (symbol.flags & 33554432 /* Transient */ && links.cjsExportMerged && symbol.declarations) { + for (const decl of symbol.declarations) { + const original = getSymbolLinks(decl.symbol)[resolutionKind]; + if (!resolved) { + resolved = original; + continue; + } + if (!original) continue; + original.forEach((s, name) => { + const existing = resolved.get(name); + if (!existing) resolved.set(name, s); + else if (existing === s) return; + else resolved.set(name, mergeSymbol(existing, s)); + }); + } + } + links[resolutionKind] = resolved || emptySymbols; + } + return links[resolutionKind]; + } + function getMembersOfSymbol(symbol) { + return symbol.flags & 6256 /* LateBindingContainer */ ? getResolvedMembersOrExportsOfSymbol(symbol, "resolvedMembers" /* resolvedMembers */) : symbol.members || emptySymbols; + } + function getLateBoundSymbol(symbol) { + if (symbol.flags & 106500 /* ClassMember */ && symbol.escapedName === "__computed" /* Computed */) { + const links = getSymbolLinks(symbol); + if (!links.lateSymbol && some(symbol.declarations, hasLateBindableName)) { + const parent2 = getMergedSymbol(symbol.parent); + if (some(symbol.declarations, hasStaticModifier)) { + getExportsOfSymbol(parent2); + } else { + getMembersOfSymbol(parent2); + } + } + return links.lateSymbol || (links.lateSymbol = symbol); + } + return symbol; + } + function getTypeWithThisArgument(type, thisArgument, needApparentType) { + if (getObjectFlags(type) & 4 /* Reference */) { + const target = type.target; + const typeArguments = getTypeArguments(type); + return length(target.typeParameters) === length(typeArguments) ? createTypeReference(target, concatenate(typeArguments, [thisArgument || target.thisType])) : type; + } else if (type.flags & 2097152 /* Intersection */) { + const types = sameMap(type.types, (t) => getTypeWithThisArgument(t, thisArgument, needApparentType)); + return types !== type.types ? getIntersectionType(types) : type; + } + return needApparentType ? getApparentType(type) : type; + } + function resolveObjectTypeMembers(type, source, typeParameters, typeArguments) { + let mapper; + let members; + let callSignatures; + let constructSignatures; + let indexInfos; + if (rangeEquals(typeParameters, typeArguments, 0, typeParameters.length)) { + members = source.symbol ? getMembersOfSymbol(source.symbol) : createSymbolTable(source.declaredProperties); + callSignatures = source.declaredCallSignatures; + constructSignatures = source.declaredConstructSignatures; + indexInfos = source.declaredIndexInfos; + } else { + mapper = createTypeMapper(typeParameters, typeArguments); + members = createInstantiatedSymbolTable( + source.declaredProperties, + mapper, + /*mappingThisOnly*/ + typeParameters.length === 1 + ); + callSignatures = instantiateSignatures(source.declaredCallSignatures, mapper); + constructSignatures = instantiateSignatures(source.declaredConstructSignatures, mapper); + indexInfos = instantiateIndexInfos(source.declaredIndexInfos, mapper); + } + const baseTypes = getBaseTypes(source); + if (baseTypes.length) { + if (source.symbol && members === getMembersOfSymbol(source.symbol)) { + const symbolTable = createSymbolTable(source.declaredProperties); + const sourceIndex = getIndexSymbol(source.symbol); + if (sourceIndex) { + symbolTable.set("__index" /* Index */, sourceIndex); + } + members = symbolTable; + } + setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos); + const thisArgument = lastOrUndefined(typeArguments); + for (const baseType of baseTypes) { + const instantiatedBaseType = thisArgument ? getTypeWithThisArgument(instantiateType(baseType, mapper), thisArgument) : baseType; + addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType)); + callSignatures = concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); + constructSignatures = concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); + const inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [anyBaseTypeIndexInfo]; + indexInfos = concatenate(indexInfos, filter(inheritedIndexInfos, (info) => !findIndexInfo(indexInfos, info.keyType))); + } + } + setStructuredTypeMembers(type, members, callSignatures, constructSignatures, indexInfos); + } + function resolveClassOrInterfaceMembers(type) { + resolveObjectTypeMembers(type, resolveDeclaredMembers(type), emptyArray, emptyArray); + } + function resolveTypeReferenceMembers(type) { + const source = resolveDeclaredMembers(type.target); + const typeParameters = concatenate(source.typeParameters, [source.thisType]); + const typeArguments = getTypeArguments(type); + const paddedTypeArguments = typeArguments.length === typeParameters.length ? typeArguments : concatenate(typeArguments, [type]); + resolveObjectTypeMembers(type, source, typeParameters, paddedTypeArguments); + } + function createSignature(declaration, typeParameters, thisParameter, parameters, resolvedReturnType, resolvedTypePredicate, minArgumentCount, flags) { + const sig = new Signature13(checker, flags); + sig.declaration = declaration; + sig.typeParameters = typeParameters; + sig.parameters = parameters; + sig.thisParameter = thisParameter; + sig.resolvedReturnType = resolvedReturnType; + sig.resolvedTypePredicate = resolvedTypePredicate; + sig.minArgumentCount = minArgumentCount; + sig.resolvedMinArgumentCount = void 0; + sig.target = void 0; + sig.mapper = void 0; + sig.compositeSignatures = void 0; + sig.compositeKind = void 0; + return sig; + } + function cloneSignature(sig) { + const result = createSignature( + sig.declaration, + sig.typeParameters, + sig.thisParameter, + sig.parameters, + /*resolvedReturnType*/ + void 0, + /*resolvedTypePredicate*/ + void 0, + sig.minArgumentCount, + sig.flags & 167 /* PropagatingFlags */ + ); + result.target = sig.target; + result.mapper = sig.mapper; + result.compositeSignatures = sig.compositeSignatures; + result.compositeKind = sig.compositeKind; + return result; + } + function createUnionSignature(signature, unionSignatures) { + const result = cloneSignature(signature); + result.compositeSignatures = unionSignatures; + result.compositeKind = 1048576 /* Union */; + result.target = void 0; + result.mapper = void 0; + return result; + } + function getOptionalCallSignature(signature, callChainFlags) { + if ((signature.flags & 24 /* CallChainFlags */) === callChainFlags) { + return signature; + } + if (!signature.optionalCallSignatureCache) { + signature.optionalCallSignatureCache = {}; + } + const key = callChainFlags === 8 /* IsInnerCallChain */ ? "inner" : "outer"; + return signature.optionalCallSignatureCache[key] || (signature.optionalCallSignatureCache[key] = createOptionalCallSignature(signature, callChainFlags)); + } + function createOptionalCallSignature(signature, callChainFlags) { + Debug.assert(callChainFlags === 8 /* IsInnerCallChain */ || callChainFlags === 16 /* IsOuterCallChain */, "An optional call signature can either be for an inner call chain or an outer call chain, but not both."); + const result = cloneSignature(signature); + result.flags |= callChainFlags; + return result; + } + function getExpandedParameters(sig, skipUnionExpanding) { + if (signatureHasRestParameter(sig)) { + const restIndex = sig.parameters.length - 1; + const restSymbol = sig.parameters[restIndex]; + const restType = getTypeOfSymbol(restSymbol); + if (isTupleType(restType)) { + return [expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol)]; + } else if (!skipUnionExpanding && restType.flags & 1048576 /* Union */ && every(restType.types, isTupleType)) { + return map(restType.types, (t) => expandSignatureParametersWithTupleMembers(t, restIndex, restSymbol)); + } + } + return [sig.parameters]; + function expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol) { + const elementTypes = getTypeArguments(restType); + const associatedNames = getUniqAssociatedNamesFromTupleType(restType, restSymbol); + const restParams = map(elementTypes, (t, i) => { + const name = associatedNames && associatedNames[i] ? associatedNames[i] : getParameterNameAtPosition(sig, restIndex + i, restType); + const flags = restType.target.elementFlags[i]; + const checkFlags = flags & 12 /* Variable */ ? 32768 /* RestParameter */ : flags & 2 /* Optional */ ? 16384 /* OptionalParameter */ : 0; + const symbol = createSymbol(1 /* FunctionScopedVariable */, name, checkFlags); + symbol.links.type = flags & 4 /* Rest */ ? createArrayType(t) : t; + return symbol; + }); + return concatenate(sig.parameters.slice(0, restIndex), restParams); + } + function getUniqAssociatedNamesFromTupleType(type, restSymbol) { + const names = map(type.target.labeledElementDeclarations, (labeledElement, i) => getTupleElementLabel(labeledElement, i, type.target.elementFlags[i], restSymbol)); + if (names) { + const duplicates = []; + const uniqueNames = /* @__PURE__ */ new Set(); + for (let i = 0; i < names.length; i++) { + const name = names[i]; + if (!tryAddToSet(uniqueNames, name)) { + duplicates.push(i); + } + } + const counters = /* @__PURE__ */ new Map(); + for (const i of duplicates) { + let counter = counters.get(names[i]) ?? 1; + let name; + while (!tryAddToSet(uniqueNames, name = `${names[i]}_${counter}`)) { + counter++; + } + names[i] = name; + counters.set(names[i], counter + 1); + } + } + return names; + } + } + function getDefaultConstructSignatures(classType) { + const baseConstructorType = getBaseConstructorTypeOfClass(classType); + const baseSignatures = getSignaturesOfType(baseConstructorType, 1 /* Construct */); + const declaration = getClassLikeDeclarationOfSymbol(classType.symbol); + const isAbstract = !!declaration && hasSyntacticModifier(declaration, 64 /* Abstract */); + if (baseSignatures.length === 0) { + return [createSignature( + /*declaration*/ + void 0, + classType.localTypeParameters, + /*thisParameter*/ + void 0, + emptyArray, + classType, + /*resolvedTypePredicate*/ + void 0, + 0, + isAbstract ? 4 /* Abstract */ : 0 /* None */ + )]; + } + const baseTypeNode = getBaseTypeNodeOfClass(classType); + const isJavaScript = isInJSFile(baseTypeNode); + const typeArguments = typeArgumentsFromTypeReferenceNode(baseTypeNode); + const typeArgCount = length(typeArguments); + const result = []; + for (const baseSig of baseSignatures) { + const minTypeArgumentCount = getMinTypeArgumentCount(baseSig.typeParameters); + const typeParamCount = length(baseSig.typeParameters); + if (isJavaScript || typeArgCount >= minTypeArgumentCount && typeArgCount <= typeParamCount) { + const sig = typeParamCount ? createSignatureInstantiation(baseSig, fillMissingTypeArguments(typeArguments, baseSig.typeParameters, minTypeArgumentCount, isJavaScript)) : cloneSignature(baseSig); + sig.typeParameters = classType.localTypeParameters; + sig.resolvedReturnType = classType; + sig.flags = isAbstract ? sig.flags | 4 /* Abstract */ : sig.flags & ~4 /* Abstract */; + result.push(sig); + } + } + return result; + } + function findMatchingSignature(signatureList, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes) { + for (const s of signatureList) { + if (compareSignaturesIdentical(s, signature, partialMatch, ignoreThisTypes, ignoreReturnTypes, partialMatch ? compareTypesSubtypeOf : compareTypesIdentical)) { + return s; + } + } + } + function findMatchingSignatures(signatureLists, signature, listIndex) { + if (signature.typeParameters) { + if (listIndex > 0) { + return void 0; + } + for (let i = 1; i < signatureLists.length; i++) { + if (!findMatchingSignature( + signatureLists[i], + signature, + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + false + )) { + return void 0; + } + } + return [signature]; + } + let result; + for (let i = 0; i < signatureLists.length; i++) { + const match = i === listIndex ? signature : findMatchingSignature( + signatureLists[i], + signature, + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + true + ) || findMatchingSignature( + signatureLists[i], + signature, + /*partialMatch*/ + true, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + true + ); + if (!match) { + return void 0; + } + result = appendIfUnique(result, match); + } + return result; + } + function getUnionSignatures(signatureLists) { + let result; + let indexWithLengthOverOne; + for (let i = 0; i < signatureLists.length; i++) { + if (signatureLists[i].length === 0) return emptyArray; + if (signatureLists[i].length > 1) { + indexWithLengthOverOne = indexWithLengthOverOne === void 0 ? i : -1; + } + for (const signature of signatureLists[i]) { + if (!result || !findMatchingSignature( + result, + signature, + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + true + )) { + const unionSignatures = findMatchingSignatures(signatureLists, signature, i); + if (unionSignatures) { + let s = signature; + if (unionSignatures.length > 1) { + let thisParameter = signature.thisParameter; + const firstThisParameterOfUnionSignatures = forEach(unionSignatures, (sig) => sig.thisParameter); + if (firstThisParameterOfUnionSignatures) { + const thisType = getIntersectionType(mapDefined(unionSignatures, (sig) => sig.thisParameter && getTypeOfSymbol(sig.thisParameter))); + thisParameter = createSymbolWithType(firstThisParameterOfUnionSignatures, thisType); + } + s = createUnionSignature(signature, unionSignatures); + s.thisParameter = thisParameter; + } + (result || (result = [])).push(s); + } + } + } + } + if (!length(result) && indexWithLengthOverOne !== -1) { + const masterList = signatureLists[indexWithLengthOverOne !== void 0 ? indexWithLengthOverOne : 0]; + let results = masterList.slice(); + for (const signatures of signatureLists) { + if (signatures !== masterList) { + const signature = signatures[0]; + Debug.assert(!!signature, "getUnionSignatures bails early on empty signature lists and should not have empty lists on second pass"); + results = !!signature.typeParameters && some(results, (s) => !!s.typeParameters && !compareTypeParametersIdentical(signature.typeParameters, s.typeParameters)) ? void 0 : map(results, (sig) => combineSignaturesOfUnionMembers(sig, signature)); + if (!results) { + break; + } + } + } + result = results; + } + return result || emptyArray; + } + function compareTypeParametersIdentical(sourceParams, targetParams) { + if (length(sourceParams) !== length(targetParams)) { + return false; + } + if (!sourceParams || !targetParams) { + return true; + } + const mapper = createTypeMapper(targetParams, sourceParams); + for (let i = 0; i < sourceParams.length; i++) { + const source = sourceParams[i]; + const target = targetParams[i]; + if (source === target) continue; + if (!isTypeIdenticalTo(getConstraintFromTypeParameter(source) || unknownType, instantiateType(getConstraintFromTypeParameter(target) || unknownType, mapper))) return false; + } + return true; + } + function combineUnionThisParam(left, right, mapper) { + if (!left || !right) { + return left || right; + } + const thisType = getIntersectionType([getTypeOfSymbol(left), instantiateType(getTypeOfSymbol(right), mapper)]); + return createSymbolWithType(left, thisType); + } + function combineUnionParameters(left, right, mapper) { + const leftCount = getParameterCount(left); + const rightCount = getParameterCount(right); + const longest = leftCount >= rightCount ? left : right; + const shorter = longest === left ? right : left; + const longestCount = longest === left ? leftCount : rightCount; + const eitherHasEffectiveRest = hasEffectiveRestParameter(left) || hasEffectiveRestParameter(right); + const needsExtraRestElement = eitherHasEffectiveRest && !hasEffectiveRestParameter(longest); + const params = new Array(longestCount + (needsExtraRestElement ? 1 : 0)); + for (let i = 0; i < longestCount; i++) { + let longestParamType = tryGetTypeAtPosition(longest, i); + if (longest === right) { + longestParamType = instantiateType(longestParamType, mapper); + } + let shorterParamType = tryGetTypeAtPosition(shorter, i) || unknownType; + if (shorter === right) { + shorterParamType = instantiateType(shorterParamType, mapper); + } + const unionParamType = getIntersectionType([longestParamType, shorterParamType]); + const isRestParam = eitherHasEffectiveRest && !needsExtraRestElement && i === longestCount - 1; + const isOptional = i >= getMinArgumentCount(longest) && i >= getMinArgumentCount(shorter); + const leftName = i >= leftCount ? void 0 : getParameterNameAtPosition(left, i); + const rightName = i >= rightCount ? void 0 : getParameterNameAtPosition(right, i); + const paramName = leftName === rightName ? leftName : !leftName ? rightName : !rightName ? leftName : void 0; + const paramSymbol = createSymbol( + 1 /* FunctionScopedVariable */ | (isOptional && !isRestParam ? 16777216 /* Optional */ : 0), + paramName || `arg${i}`, + isRestParam ? 32768 /* RestParameter */ : isOptional ? 16384 /* OptionalParameter */ : 0 + ); + paramSymbol.links.type = isRestParam ? createArrayType(unionParamType) : unionParamType; + params[i] = paramSymbol; + } + if (needsExtraRestElement) { + const restParamSymbol = createSymbol(1 /* FunctionScopedVariable */, "args", 32768 /* RestParameter */); + restParamSymbol.links.type = createArrayType(getTypeAtPosition(shorter, longestCount)); + if (shorter === right) { + restParamSymbol.links.type = instantiateType(restParamSymbol.links.type, mapper); + } + params[longestCount] = restParamSymbol; + } + return params; + } + function combineSignaturesOfUnionMembers(left, right) { + const typeParams = left.typeParameters || right.typeParameters; + let paramMapper; + if (left.typeParameters && right.typeParameters) { + paramMapper = createTypeMapper(right.typeParameters, left.typeParameters); + } + let flags = (left.flags | right.flags) & (167 /* PropagatingFlags */ & ~1 /* HasRestParameter */); + const declaration = left.declaration; + const params = combineUnionParameters(left, right, paramMapper); + const lastParam = lastOrUndefined(params); + if (lastParam && getCheckFlags(lastParam) & 32768 /* RestParameter */) { + flags |= 1 /* HasRestParameter */; + } + const thisParam = combineUnionThisParam(left.thisParameter, right.thisParameter, paramMapper); + const minArgCount = Math.max(left.minArgumentCount, right.minArgumentCount); + const result = createSignature( + declaration, + typeParams, + thisParam, + params, + /*resolvedReturnType*/ + void 0, + /*resolvedTypePredicate*/ + void 0, + minArgCount, + flags + ); + result.compositeKind = 1048576 /* Union */; + result.compositeSignatures = concatenate(left.compositeKind !== 2097152 /* Intersection */ && left.compositeSignatures || [left], [right]); + if (paramMapper) { + result.mapper = left.compositeKind !== 2097152 /* Intersection */ && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper; + } else if (left.compositeKind !== 2097152 /* Intersection */ && left.mapper && left.compositeSignatures) { + result.mapper = left.mapper; + } + return result; + } + function getUnionIndexInfos(types) { + const sourceInfos = getIndexInfosOfType(types[0]); + if (sourceInfos) { + const result = []; + for (const info of sourceInfos) { + const indexType = info.keyType; + if (every(types, (t) => !!getIndexInfoOfType(t, indexType))) { + result.push(createIndexInfo(indexType, getUnionType(map(types, (t) => getIndexTypeOfType(t, indexType))), some(types, (t) => getIndexInfoOfType(t, indexType).isReadonly))); + } + } + return result; + } + return emptyArray; + } + function resolveUnionTypeMembers(type) { + const callSignatures = getUnionSignatures(map(type.types, (t) => t === globalFunctionType ? [unknownSignature] : getSignaturesOfType(t, 0 /* Call */))); + const constructSignatures = getUnionSignatures(map(type.types, (t) => getSignaturesOfType(t, 1 /* Construct */))); + const indexInfos = getUnionIndexInfos(type.types); + setStructuredTypeMembers(type, emptySymbols, callSignatures, constructSignatures, indexInfos); + } + function intersectTypes(type1, type2) { + return !type1 ? type2 : !type2 ? type1 : getIntersectionType([type1, type2]); + } + function findMixins(types) { + const constructorTypeCount = countWhere(types, (t) => getSignaturesOfType(t, 1 /* Construct */).length > 0); + const mixinFlags = map(types, isMixinConstructorType); + if (constructorTypeCount > 0 && constructorTypeCount === countWhere(mixinFlags, (b) => b)) { + const firstMixinIndex = mixinFlags.indexOf( + /*searchElement*/ + true + ); + mixinFlags[firstMixinIndex] = false; + } + return mixinFlags; + } + function includeMixinType(type, types, mixinFlags, index) { + const mixedTypes = []; + for (let i = 0; i < types.length; i++) { + if (i === index) { + mixedTypes.push(type); + } else if (mixinFlags[i]) { + mixedTypes.push(getReturnTypeOfSignature(getSignaturesOfType(types[i], 1 /* Construct */)[0])); + } + } + return getIntersectionType(mixedTypes); + } + function resolveIntersectionTypeMembers(type) { + let callSignatures; + let constructSignatures; + let indexInfos; + const types = type.types; + const mixinFlags = findMixins(types); + const mixinCount = countWhere(mixinFlags, (b) => b); + for (let i = 0; i < types.length; i++) { + const t = type.types[i]; + if (!mixinFlags[i]) { + let signatures = getSignaturesOfType(t, 1 /* Construct */); + if (signatures.length && mixinCount > 0) { + signatures = map(signatures, (s) => { + const clone2 = cloneSignature(s); + clone2.resolvedReturnType = includeMixinType(getReturnTypeOfSignature(s), types, mixinFlags, i); + return clone2; + }); + } + constructSignatures = appendSignatures(constructSignatures, signatures); + } + callSignatures = appendSignatures(callSignatures, getSignaturesOfType(t, 0 /* Call */)); + indexInfos = reduceLeft(getIndexInfosOfType(t), (infos, newInfo) => appendIndexInfo( + infos, + newInfo, + /*union*/ + false + ), indexInfos); + } + setStructuredTypeMembers(type, emptySymbols, callSignatures || emptyArray, constructSignatures || emptyArray, indexInfos || emptyArray); + } + function appendSignatures(signatures, newSignatures) { + for (const sig of newSignatures) { + if (!signatures || every(signatures, (s) => !compareSignaturesIdentical( + s, + sig, + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + false, + compareTypesIdentical + ))) { + signatures = append(signatures, sig); + } + } + return signatures; + } + function appendIndexInfo(indexInfos, newInfo, union) { + if (indexInfos) { + for (let i = 0; i < indexInfos.length; i++) { + const info = indexInfos[i]; + if (info.keyType === newInfo.keyType) { + indexInfos[i] = createIndexInfo(info.keyType, union ? getUnionType([info.type, newInfo.type]) : getIntersectionType([info.type, newInfo.type]), union ? info.isReadonly || newInfo.isReadonly : info.isReadonly && newInfo.isReadonly); + return indexInfos; + } + } + } + return append(indexInfos, newInfo); + } + function resolveAnonymousTypeMembers(type) { + if (type.target) { + setStructuredTypeMembers(type, emptySymbols, emptyArray, emptyArray, emptyArray); + const members2 = createInstantiatedSymbolTable( + getPropertiesOfObjectType(type.target), + type.mapper, + /*mappingThisOnly*/ + false + ); + const callSignatures = instantiateSignatures(getSignaturesOfType(type.target, 0 /* Call */), type.mapper); + const constructSignatures = instantiateSignatures(getSignaturesOfType(type.target, 1 /* Construct */), type.mapper); + const indexInfos2 = instantiateIndexInfos(getIndexInfosOfType(type.target), type.mapper); + setStructuredTypeMembers(type, members2, callSignatures, constructSignatures, indexInfos2); + return; + } + const symbol = getMergedSymbol(type.symbol); + if (symbol.flags & 2048 /* TypeLiteral */) { + setStructuredTypeMembers(type, emptySymbols, emptyArray, emptyArray, emptyArray); + const members2 = getMembersOfSymbol(symbol); + const callSignatures = getSignaturesOfSymbol(members2.get("__call" /* Call */)); + const constructSignatures = getSignaturesOfSymbol(members2.get("__new" /* New */)); + const indexInfos2 = getIndexInfosOfSymbol(symbol); + setStructuredTypeMembers(type, members2, callSignatures, constructSignatures, indexInfos2); + return; + } + let members = getExportsOfSymbol(symbol); + let indexInfos; + if (symbol === globalThisSymbol) { + const varsOnly = /* @__PURE__ */ new Map(); + members.forEach((p) => { + var _a; + if (!(p.flags & 418 /* BlockScoped */) && !(p.flags & 512 /* ValueModule */ && ((_a = p.declarations) == null ? void 0 : _a.length) && every(p.declarations, isAmbientModule))) { + varsOnly.set(p.escapedName, p); + } + }); + members = varsOnly; + } + let baseConstructorIndexInfo; + setStructuredTypeMembers(type, members, emptyArray, emptyArray, emptyArray); + if (symbol.flags & 32 /* Class */) { + const classType = getDeclaredTypeOfClassOrInterface(symbol); + const baseConstructorType = getBaseConstructorTypeOfClass(classType); + if (baseConstructorType.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 8650752 /* TypeVariable */)) { + members = createSymbolTable(getNamedOrIndexSignatureMembers(members)); + addInheritedMembers(members, getPropertiesOfType(baseConstructorType)); + } else if (baseConstructorType === anyType) { + baseConstructorIndexInfo = anyBaseTypeIndexInfo; + } + } + const indexSymbol = getIndexSymbolFromSymbolTable(members); + if (indexSymbol) { + indexInfos = getIndexInfosOfIndexSymbol(indexSymbol, arrayFrom(members.values())); + } else { + if (baseConstructorIndexInfo) { + indexInfos = append(indexInfos, baseConstructorIndexInfo); + } + if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ || some(type.properties, (prop) => !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */)))) { + indexInfos = append(indexInfos, enumNumberIndexInfo); + } + } + setStructuredTypeMembers(type, members, emptyArray, emptyArray, indexInfos || emptyArray); + if (symbol.flags & (16 /* Function */ | 8192 /* Method */)) { + type.callSignatures = getSignaturesOfSymbol(symbol); + } + if (symbol.flags & 32 /* Class */) { + const classType = getDeclaredTypeOfClassOrInterface(symbol); + let constructSignatures = symbol.members ? getSignaturesOfSymbol(symbol.members.get("__constructor" /* Constructor */)) : emptyArray; + if (symbol.flags & 16 /* Function */) { + constructSignatures = addRange( + constructSignatures.slice(), + mapDefined( + type.callSignatures, + (sig) => isJSConstructor(sig.declaration) ? createSignature( + sig.declaration, + sig.typeParameters, + sig.thisParameter, + sig.parameters, + classType, + /*resolvedTypePredicate*/ + void 0, + sig.minArgumentCount, + sig.flags & 167 /* PropagatingFlags */ + ) : void 0 + ) + ); + } + if (!constructSignatures.length) { + constructSignatures = getDefaultConstructSignatures(classType); + } + type.constructSignatures = constructSignatures; + } + } + function replaceIndexedAccess(instantiable, type, replacement) { + return instantiateType(instantiable, createTypeMapper([type.indexType, type.objectType], [getNumberLiteralType(0), createTupleType([replacement])])); + } + function getLimitedConstraint(type) { + const constraint = getConstraintTypeFromMappedType(type.mappedType); + if (!(constraint.flags & 1048576 /* Union */ || constraint.flags & 2097152 /* Intersection */)) { + return; + } + const origin = constraint.flags & 1048576 /* Union */ ? constraint.origin : constraint; + if (!origin || !(origin.flags & 2097152 /* Intersection */)) { + return; + } + const limitedConstraint = getIntersectionType(origin.types.filter((t) => t !== type.constraintType)); + return limitedConstraint !== neverType ? limitedConstraint : void 0; + } + function resolveReverseMappedTypeMembers(type) { + const indexInfo = getIndexInfoOfType(type.source, stringType); + const modifiers = getMappedTypeModifiers(type.mappedType); + const readonlyMask = modifiers & 1 /* IncludeReadonly */ ? false : true; + const optionalMask = modifiers & 4 /* IncludeOptional */ ? 0 : 16777216 /* Optional */; + const indexInfos = indexInfo ? [createIndexInfo(stringType, inferReverseMappedType(indexInfo.type, type.mappedType, type.constraintType) || unknownType, readonlyMask && indexInfo.isReadonly)] : emptyArray; + const members = createSymbolTable(); + const limitedConstraint = getLimitedConstraint(type); + for (const prop of getPropertiesOfType(type.source)) { + if (limitedConstraint) { + const propertyNameType = getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */); + if (!isTypeAssignableTo(propertyNameType, limitedConstraint)) { + continue; + } + } + const checkFlags = 8192 /* ReverseMapped */ | (readonlyMask && isReadonlySymbol(prop) ? 8 /* Readonly */ : 0); + const inferredProp = createSymbol(4 /* Property */ | prop.flags & optionalMask, prop.escapedName, checkFlags); + inferredProp.declarations = prop.declarations; + inferredProp.links.nameType = getSymbolLinks(prop).nameType; + inferredProp.links.propertyType = getTypeOfSymbol(prop); + if (type.constraintType.type.flags & 8388608 /* IndexedAccess */ && type.constraintType.type.objectType.flags & 262144 /* TypeParameter */ && type.constraintType.type.indexType.flags & 262144 /* TypeParameter */) { + const newTypeParam = type.constraintType.type.objectType; + const newMappedType = replaceIndexedAccess(type.mappedType, type.constraintType.type, newTypeParam); + inferredProp.links.mappedType = newMappedType; + inferredProp.links.constraintType = getIndexType(newTypeParam); + } else { + inferredProp.links.mappedType = type.mappedType; + inferredProp.links.constraintType = type.constraintType; + } + members.set(prop.escapedName, inferredProp); + } + setStructuredTypeMembers(type, members, emptyArray, emptyArray, indexInfos); + } + function getLowerBoundOfKeyType(type) { + if (type.flags & 4194304 /* Index */) { + const t = getApparentType(type.type); + return isGenericTupleType(t) ? getKnownKeysOfTupleType(t) : getIndexType(t); + } + if (type.flags & 16777216 /* Conditional */) { + if (type.root.isDistributive) { + const checkType = type.checkType; + const constraint = getLowerBoundOfKeyType(checkType); + if (constraint !== checkType) { + return getConditionalTypeInstantiation( + type, + prependTypeMapping(type.root.checkType, constraint, type.mapper), + /*forConstraint*/ + false + ); + } + } + return type; + } + if (type.flags & 1048576 /* Union */) { + return mapType( + type, + getLowerBoundOfKeyType, + /*noReductions*/ + true + ); + } + if (type.flags & 2097152 /* Intersection */) { + const types = type.types; + if (types.length === 2 && !!(types[0].flags & (4 /* String */ | 8 /* Number */ | 64 /* BigInt */)) && types[1] === emptyTypeLiteralType) { + return type; + } + return getIntersectionType(sameMap(type.types, getLowerBoundOfKeyType)); + } + return type; + } + function getIsLateCheckFlag(s) { + return getCheckFlags(s) & 4096 /* Late */; + } + function forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(type, include, stringsOnly, cb) { + for (const prop of getPropertiesOfType(type)) { + cb(getLiteralTypeFromProperty(prop, include)); + } + if (type.flags & 1 /* Any */) { + cb(stringType); + } else { + for (const info of getIndexInfosOfType(type)) { + if (!stringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) { + cb(info.keyType); + } + } + } + } + function resolveMappedTypeMembers(type) { + const members = createSymbolTable(); + let indexInfos; + setStructuredTypeMembers(type, emptySymbols, emptyArray, emptyArray, emptyArray); + const typeParameter = getTypeParameterFromMappedType(type); + const constraintType = getConstraintTypeFromMappedType(type); + const mappedType = type.target || type; + const nameType = getNameTypeFromMappedType(mappedType); + const shouldLinkPropDeclarations = getMappedTypeNameTypeKind(mappedType) !== 2 /* Remapping */; + const templateType = getTemplateTypeFromMappedType(mappedType); + const modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); + const templateModifiers = getMappedTypeModifiers(type); + const include = 8576 /* StringOrNumberLiteralOrUnique */; + if (isMappedTypeWithKeyofConstraintDeclaration(type)) { + forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType( + modifiersType, + include, + /*stringsOnly*/ + false, + addMemberForKeyType + ); + } else { + forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType); + } + setStructuredTypeMembers(type, members, emptyArray, emptyArray, indexInfos || emptyArray); + function addMemberForKeyType(keyType) { + const propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType; + forEachType(propNameType, (t) => addMemberForKeyTypeWorker(keyType, t)); + } + function addMemberForKeyTypeWorker(keyType, propNameType) { + if (isTypeUsableAsPropertyName(propNameType)) { + const propName = getPropertyNameFromType(propNameType); + const existingProp = members.get(propName); + if (existingProp) { + existingProp.links.nameType = getUnionType([existingProp.links.nameType, propNameType]); + existingProp.links.keyType = getUnionType([existingProp.links.keyType, keyType]); + } else { + const modifiersProp = isTypeUsableAsPropertyName(keyType) ? getPropertyOfType(modifiersType, getPropertyNameFromType(keyType)) : void 0; + const isOptional = !!(templateModifiers & 4 /* IncludeOptional */ || !(templateModifiers & 8 /* ExcludeOptional */) && modifiersProp && modifiersProp.flags & 16777216 /* Optional */); + const isReadonly = !!(templateModifiers & 1 /* IncludeReadonly */ || !(templateModifiers & 2 /* ExcludeReadonly */) && modifiersProp && isReadonlySymbol(modifiersProp)); + const stripOptional = strictNullChecks && !isOptional && modifiersProp && modifiersProp.flags & 16777216 /* Optional */; + const lateFlag = modifiersProp ? getIsLateCheckFlag(modifiersProp) : 0; + const prop = createSymbol(4 /* Property */ | (isOptional ? 16777216 /* Optional */ : 0), propName, lateFlag | 262144 /* Mapped */ | (isReadonly ? 8 /* Readonly */ : 0) | (stripOptional ? 524288 /* StripOptional */ : 0)); + prop.links.mappedType = type; + prop.links.nameType = propNameType; + prop.links.keyType = keyType; + if (modifiersProp) { + prop.links.syntheticOrigin = modifiersProp; + prop.declarations = shouldLinkPropDeclarations ? modifiersProp.declarations : void 0; + } + members.set(propName, prop); + } + } else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) { + const indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType : propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType : propNameType; + const propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType)); + const modifiersIndexInfo = getApplicableIndexInfo(modifiersType, propNameType); + const isReadonly = !!(templateModifiers & 1 /* IncludeReadonly */ || !(templateModifiers & 2 /* ExcludeReadonly */) && (modifiersIndexInfo == null ? void 0 : modifiersIndexInfo.isReadonly)); + const indexInfo = createIndexInfo(indexKeyType, propType, isReadonly); + indexInfos = appendIndexInfo( + indexInfos, + indexInfo, + /*union*/ + true + ); + } + } + } + function getTypeOfMappedSymbol(symbol) { + var _a; + if (!symbol.links.type) { + const mappedType = symbol.links.mappedType; + if (!pushTypeResolution(symbol, 0 /* Type */)) { + mappedType.containsError = true; + return errorType; + } + const templateType = getTemplateTypeFromMappedType(mappedType.target || mappedType); + const mapper = appendTypeMapping(mappedType.mapper, getTypeParameterFromMappedType(mappedType), symbol.links.keyType); + const propType = instantiateType(templateType, mapper); + let type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType( + propType, + /*isProperty*/ + true + ) : symbol.links.checkFlags & 524288 /* StripOptional */ ? removeMissingOrUndefinedType(propType) : propType; + if (!popTypeResolution()) { + error2(currentNode, Diagnostics.Type_of_property_0_circularly_references_itself_in_mapped_type_1, symbolToString(symbol), typeToString(mappedType)); + type = errorType; + } + (_a = symbol.links).type ?? (_a.type = type); + } + return symbol.links.type; + } + function getTypeParameterFromMappedType(type) { + return type.typeParameter || (type.typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(type.declaration.typeParameter))); + } + function getConstraintTypeFromMappedType(type) { + return type.constraintType || (type.constraintType = getConstraintOfTypeParameter(getTypeParameterFromMappedType(type)) || errorType); + } + function getNameTypeFromMappedType(type) { + return type.declaration.nameType ? type.nameType || (type.nameType = instantiateType(getTypeFromTypeNode(type.declaration.nameType), type.mapper)) : void 0; + } + function getTemplateTypeFromMappedType(type) { + return type.templateType || (type.templateType = type.declaration.type ? instantiateType(addOptionality( + getTypeFromTypeNode(type.declaration.type), + /*isProperty*/ + true, + !!(getMappedTypeModifiers(type) & 4 /* IncludeOptional */) + ), type.mapper) : errorType); + } + function getConstraintDeclarationForMappedType(type) { + return getEffectiveConstraintOfTypeParameter(type.declaration.typeParameter); + } + function isMappedTypeWithKeyofConstraintDeclaration(type) { + const constraintDeclaration = getConstraintDeclarationForMappedType(type); + return constraintDeclaration.kind === 199 /* TypeOperator */ && constraintDeclaration.operator === 143 /* KeyOfKeyword */; + } + function getModifiersTypeFromMappedType(type) { + if (!type.modifiersType) { + if (isMappedTypeWithKeyofConstraintDeclaration(type)) { + type.modifiersType = instantiateType(getTypeFromTypeNode(getConstraintDeclarationForMappedType(type).type), type.mapper); + } else { + const declaredType = getTypeFromMappedTypeNode(type.declaration); + const constraint = getConstraintTypeFromMappedType(declaredType); + const extendedConstraint = constraint && constraint.flags & 262144 /* TypeParameter */ ? getConstraintOfTypeParameter(constraint) : constraint; + type.modifiersType = extendedConstraint && extendedConstraint.flags & 4194304 /* Index */ ? instantiateType(extendedConstraint.type, type.mapper) : unknownType; + } + } + return type.modifiersType; + } + function getMappedTypeModifiers(type) { + const declaration = type.declaration; + return (declaration.readonlyToken ? declaration.readonlyToken.kind === 41 /* MinusToken */ ? 2 /* ExcludeReadonly */ : 1 /* IncludeReadonly */ : 0) | (declaration.questionToken ? declaration.questionToken.kind === 41 /* MinusToken */ ? 8 /* ExcludeOptional */ : 4 /* IncludeOptional */ : 0); + } + function getMappedTypeOptionality(type) { + const modifiers = getMappedTypeModifiers(type); + return modifiers & 8 /* ExcludeOptional */ ? -1 : modifiers & 4 /* IncludeOptional */ ? 1 : 0; + } + function getCombinedMappedTypeOptionality(type) { + if (getObjectFlags(type) & 32 /* Mapped */) { + return getMappedTypeOptionality(type) || getCombinedMappedTypeOptionality(getModifiersTypeFromMappedType(type)); + } + if (type.flags & 2097152 /* Intersection */) { + const optionality = getCombinedMappedTypeOptionality(type.types[0]); + return every(type.types, (t, i) => i === 0 || getCombinedMappedTypeOptionality(t) === optionality) ? optionality : 0; + } + return 0; + } + function isPartialMappedType(type) { + return !!(getObjectFlags(type) & 32 /* Mapped */ && getMappedTypeModifiers(type) & 4 /* IncludeOptional */); + } + function isGenericMappedType(type) { + if (getObjectFlags(type) & 32 /* Mapped */) { + const constraint = getConstraintTypeFromMappedType(type); + if (isGenericIndexType(constraint)) { + return true; + } + const nameType = getNameTypeFromMappedType(type); + if (nameType && isGenericIndexType(instantiateType(nameType, makeUnaryTypeMapper(getTypeParameterFromMappedType(type), constraint)))) { + return true; + } + } + return false; + } + function getMappedTypeNameTypeKind(type) { + const nameType = getNameTypeFromMappedType(type); + if (!nameType) { + return 0 /* None */; + } + return isTypeAssignableTo(nameType, getTypeParameterFromMappedType(type)) ? 1 /* Filtering */ : 2 /* Remapping */; + } + function resolveStructuredTypeMembers(type) { + if (!type.members) { + if (type.flags & 524288 /* Object */) { + if (type.objectFlags & 4 /* Reference */) { + resolveTypeReferenceMembers(type); + } else if (type.objectFlags & 3 /* ClassOrInterface */) { + resolveClassOrInterfaceMembers(type); + } else if (type.objectFlags & 1024 /* ReverseMapped */) { + resolveReverseMappedTypeMembers(type); + } else if (type.objectFlags & 16 /* Anonymous */) { + resolveAnonymousTypeMembers(type); + } else if (type.objectFlags & 32 /* Mapped */) { + resolveMappedTypeMembers(type); + } else { + Debug.fail("Unhandled object type " + Debug.formatObjectFlags(type.objectFlags)); + } + } else if (type.flags & 1048576 /* Union */) { + resolveUnionTypeMembers(type); + } else if (type.flags & 2097152 /* Intersection */) { + resolveIntersectionTypeMembers(type); + } else { + Debug.fail("Unhandled type " + Debug.formatTypeFlags(type.flags)); + } + } + return type; + } + function getPropertiesOfObjectType(type) { + if (type.flags & 524288 /* Object */) { + return resolveStructuredTypeMembers(type).properties; + } + return emptyArray; + } + function getPropertyOfObjectType(type, name) { + if (type.flags & 524288 /* Object */) { + const resolved = resolveStructuredTypeMembers(type); + const symbol = resolved.members.get(name); + if (symbol && symbolIsValue(symbol)) { + return symbol; + } + } + } + function getPropertiesOfUnionOrIntersectionType(type) { + if (!type.resolvedProperties) { + const members = createSymbolTable(); + for (const current of type.types) { + for (const prop of getPropertiesOfType(current)) { + if (!members.has(prop.escapedName)) { + const combinedProp = getPropertyOfUnionOrIntersectionType( + type, + prop.escapedName, + /*skipObjectFunctionPropertyAugment*/ + !!(type.flags & 2097152 /* Intersection */) + ); + if (combinedProp) { + members.set(prop.escapedName, combinedProp); + } + } + } + if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) { + break; + } + } + type.resolvedProperties = getNamedMembers(members); + } + return type.resolvedProperties; + } + function getPropertiesOfType(type) { + type = getReducedApparentType(type); + return type.flags & 3145728 /* UnionOrIntersection */ ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); + } + function forEachPropertyOfType(type, action) { + type = getReducedApparentType(type); + if (type.flags & 3670016 /* StructuredType */) { + resolveStructuredTypeMembers(type).members.forEach((symbol, escapedName) => { + if (isNamedMember(symbol, escapedName)) { + action(symbol, escapedName); + } + }); + } + } + function isTypeInvalidDueToUnionDiscriminant(contextualType, obj) { + const list = obj.properties; + return list.some((property) => { + const nameType = property.name && (isJsxNamespacedName(property.name) ? getStringLiteralType(getTextOfJsxAttributeName(property.name)) : getLiteralTypeFromPropertyName(property.name)); + const name = nameType && isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : void 0; + const expected = name === void 0 ? void 0 : getTypeOfPropertyOfType(contextualType, name); + return !!expected && isLiteralType(expected) && !isTypeAssignableTo(getTypeOfNode(property), expected); + }); + } + function getAllPossiblePropertiesOfTypes(types) { + const unionType = getUnionType(types); + if (!(unionType.flags & 1048576 /* Union */)) { + return getAugmentedPropertiesOfType(unionType); + } + const props = createSymbolTable(); + for (const memberType of types) { + for (const { escapedName } of getAugmentedPropertiesOfType(memberType)) { + if (!props.has(escapedName)) { + const prop = createUnionOrIntersectionProperty(unionType, escapedName); + if (prop) props.set(escapedName, prop); + } + } + } + return arrayFrom(props.values()); + } + function getConstraintOfType(type) { + return type.flags & 262144 /* TypeParameter */ ? getConstraintOfTypeParameter(type) : type.flags & 8388608 /* IndexedAccess */ ? getConstraintOfIndexedAccess(type) : type.flags & 16777216 /* Conditional */ ? getConstraintOfConditionalType(type) : getBaseConstraintOfType(type); + } + function getConstraintOfTypeParameter(typeParameter) { + return hasNonCircularBaseConstraint(typeParameter) ? getConstraintFromTypeParameter(typeParameter) : void 0; + } + function isConstMappedType(type, depth) { + const typeVariable = getHomomorphicTypeVariable(type); + return !!typeVariable && isConstTypeVariable(typeVariable, depth); + } + function isConstTypeVariable(type, depth = 0) { + var _a; + return depth < 5 && !!(type && (type.flags & 262144 /* TypeParameter */ && some((_a = type.symbol) == null ? void 0 : _a.declarations, (d) => hasSyntacticModifier(d, 4096 /* Const */)) || type.flags & 3145728 /* UnionOrIntersection */ && some(type.types, (t) => isConstTypeVariable(t, depth)) || type.flags & 8388608 /* IndexedAccess */ && isConstTypeVariable(type.objectType, depth + 1) || type.flags & 16777216 /* Conditional */ && isConstTypeVariable(getConstraintOfConditionalType(type), depth + 1) || type.flags & 33554432 /* Substitution */ && isConstTypeVariable(type.baseType, depth) || getObjectFlags(type) & 32 /* Mapped */ && isConstMappedType(type, depth) || isGenericTupleType(type) && findIndex(getElementTypes(type), (t, i) => !!(type.target.elementFlags[i] & 8 /* Variadic */) && isConstTypeVariable(t, depth)) >= 0)); + } + function getConstraintOfIndexedAccess(type) { + return hasNonCircularBaseConstraint(type) ? getConstraintFromIndexedAccess(type) : void 0; + } + function getSimplifiedTypeOrConstraint(type) { + const simplified = getSimplifiedType( + type, + /*writing*/ + false + ); + return simplified !== type ? simplified : getConstraintOfType(type); + } + function getConstraintFromIndexedAccess(type) { + if (isMappedTypeGenericIndexedAccess(type)) { + return substituteIndexedMappedType(type.objectType, type.indexType); + } + const indexConstraint = getSimplifiedTypeOrConstraint(type.indexType); + if (indexConstraint && indexConstraint !== type.indexType) { + const indexedAccess = getIndexedAccessTypeOrUndefined(type.objectType, indexConstraint, type.accessFlags); + if (indexedAccess) { + return indexedAccess; + } + } + const objectConstraint = getSimplifiedTypeOrConstraint(type.objectType); + if (objectConstraint && objectConstraint !== type.objectType) { + return getIndexedAccessTypeOrUndefined(objectConstraint, type.indexType, type.accessFlags); + } + return void 0; + } + function getDefaultConstraintOfConditionalType(type) { + if (!type.resolvedDefaultConstraint) { + const trueConstraint = getInferredTrueTypeFromConditionalType(type); + const falseConstraint = getFalseTypeFromConditionalType(type); + type.resolvedDefaultConstraint = isTypeAny(trueConstraint) ? falseConstraint : isTypeAny(falseConstraint) ? trueConstraint : getUnionType([trueConstraint, falseConstraint]); + } + return type.resolvedDefaultConstraint; + } + function getConstraintOfDistributiveConditionalType(type) { + if (type.resolvedConstraintOfDistributive !== void 0) { + return type.resolvedConstraintOfDistributive || void 0; + } + if (type.root.isDistributive && type.restrictiveInstantiation !== type) { + const simplified = getSimplifiedType( + type.checkType, + /*writing*/ + false + ); + const constraint = simplified === type.checkType ? getConstraintOfType(simplified) : simplified; + if (constraint && constraint !== type.checkType) { + const instantiated = getConditionalTypeInstantiation( + type, + prependTypeMapping(type.root.checkType, constraint, type.mapper), + /*forConstraint*/ + true + ); + if (!(instantiated.flags & 131072 /* Never */)) { + type.resolvedConstraintOfDistributive = instantiated; + return instantiated; + } + } + } + type.resolvedConstraintOfDistributive = false; + return void 0; + } + function getConstraintFromConditionalType(type) { + return getConstraintOfDistributiveConditionalType(type) || getDefaultConstraintOfConditionalType(type); + } + function getConstraintOfConditionalType(type) { + return hasNonCircularBaseConstraint(type) ? getConstraintFromConditionalType(type) : void 0; + } + function getEffectiveConstraintOfIntersection(types, targetIsUnion) { + let constraints; + let hasDisjointDomainType = false; + for (const t of types) { + if (t.flags & 465829888 /* Instantiable */) { + let constraint = getConstraintOfType(t); + while (constraint && constraint.flags & (262144 /* TypeParameter */ | 4194304 /* Index */ | 16777216 /* Conditional */)) { + constraint = getConstraintOfType(constraint); + } + if (constraint) { + constraints = append(constraints, constraint); + if (targetIsUnion) { + constraints = append(constraints, t); + } + } + } else if (t.flags & 469892092 /* DisjointDomains */ || isEmptyAnonymousObjectType(t)) { + hasDisjointDomainType = true; + } + } + if (constraints && (targetIsUnion || hasDisjointDomainType)) { + if (hasDisjointDomainType) { + for (const t of types) { + if (t.flags & 469892092 /* DisjointDomains */ || isEmptyAnonymousObjectType(t)) { + constraints = append(constraints, t); + } + } + } + return getNormalizedType( + getIntersectionType(constraints, 2 /* NoConstraintReduction */), + /*writing*/ + false + ); + } + return void 0; + } + function getBaseConstraintOfType(type) { + if (type.flags & (58982400 /* InstantiableNonPrimitive */ | 3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || isGenericTupleType(type)) { + const constraint = getResolvedBaseConstraint(type); + return constraint !== noConstraintType && constraint !== circularConstraintType ? constraint : void 0; + } + return type.flags & 4194304 /* Index */ ? stringNumberSymbolType : void 0; + } + function getBaseConstraintOrType(type) { + return getBaseConstraintOfType(type) || type; + } + function hasNonCircularBaseConstraint(type) { + return getResolvedBaseConstraint(type) !== circularConstraintType; + } + function getResolvedBaseConstraint(type) { + if (type.resolvedBaseConstraint) { + return type.resolvedBaseConstraint; + } + const stack = []; + return type.resolvedBaseConstraint = getImmediateBaseConstraint(type); + function getImmediateBaseConstraint(t) { + if (!t.immediateBaseConstraint) { + if (!pushTypeResolution(t, 4 /* ImmediateBaseConstraint */)) { + return circularConstraintType; + } + let result; + const identity2 = getRecursionIdentity(t); + if (stack.length < 10 || stack.length < 50 && !contains(stack, identity2)) { + stack.push(identity2); + result = computeBaseConstraint(getSimplifiedType( + t, + /*writing*/ + false + )); + stack.pop(); + } + if (!popTypeResolution()) { + if (t.flags & 262144 /* TypeParameter */) { + const errorNode = getConstraintDeclaration(t); + if (errorNode) { + const diagnostic = error2(errorNode, Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); + if (currentNode && !isNodeDescendantOf(errorNode, currentNode) && !isNodeDescendantOf(currentNode, errorNode)) { + addRelatedInfo(diagnostic, createDiagnosticForNode(currentNode, Diagnostics.Circularity_originates_in_type_at_this_location)); + } + } + } + result = circularConstraintType; + } + t.immediateBaseConstraint ?? (t.immediateBaseConstraint = result || noConstraintType); + } + return t.immediateBaseConstraint; + } + function getBaseConstraint(t) { + const c = getImmediateBaseConstraint(t); + return c !== noConstraintType && c !== circularConstraintType ? c : void 0; + } + function computeBaseConstraint(t) { + if (t.flags & 262144 /* TypeParameter */) { + const constraint = getConstraintFromTypeParameter(t); + return t.isThisType || !constraint ? constraint : getBaseConstraint(constraint); + } + if (t.flags & 3145728 /* UnionOrIntersection */) { + const types = t.types; + const baseTypes = []; + let different = false; + for (const type2 of types) { + const baseType = getBaseConstraint(type2); + if (baseType) { + if (baseType !== type2) { + different = true; + } + baseTypes.push(baseType); + } else { + different = true; + } + } + if (!different) { + return t; + } + return t.flags & 1048576 /* Union */ && baseTypes.length === types.length ? getUnionType(baseTypes) : t.flags & 2097152 /* Intersection */ && baseTypes.length ? getIntersectionType(baseTypes) : void 0; + } + if (t.flags & 4194304 /* Index */) { + return stringNumberSymbolType; + } + if (t.flags & 134217728 /* TemplateLiteral */) { + const types = t.types; + const constraints = mapDefined(types, getBaseConstraint); + return constraints.length === types.length ? getTemplateLiteralType(t.texts, constraints) : stringType; + } + if (t.flags & 268435456 /* StringMapping */) { + const constraint = getBaseConstraint(t.type); + return constraint && constraint !== t.type ? getStringMappingType(t.symbol, constraint) : stringType; + } + if (t.flags & 8388608 /* IndexedAccess */) { + if (isMappedTypeGenericIndexedAccess(t)) { + return getBaseConstraint(substituteIndexedMappedType(t.objectType, t.indexType)); + } + const baseObjectType = getBaseConstraint(t.objectType); + const baseIndexType = getBaseConstraint(t.indexType); + const baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags); + return baseIndexedAccess && getBaseConstraint(baseIndexedAccess); + } + if (t.flags & 16777216 /* Conditional */) { + const constraint = getConstraintFromConditionalType(t); + return constraint && getBaseConstraint(constraint); + } + if (t.flags & 33554432 /* Substitution */) { + return getBaseConstraint(getSubstitutionIntersection(t)); + } + if (isGenericTupleType(t)) { + const newElements = map(getElementTypes(t), (v, i) => { + const constraint = v.flags & 262144 /* TypeParameter */ && t.target.elementFlags[i] & 8 /* Variadic */ && getBaseConstraint(v) || v; + return constraint !== v && everyType(constraint, (c) => isArrayOrTupleType(c) && !isGenericTupleType(c)) ? constraint : v; + }); + return createTupleType(newElements, t.target.elementFlags, t.target.readonly, t.target.labeledElementDeclarations); + } + return t; + } + } + function getApparentTypeOfIntersectionType(type, thisArgument) { + if (type === thisArgument) { + return type.resolvedApparentType || (type.resolvedApparentType = getTypeWithThisArgument( + type, + thisArgument, + /*needApparentType*/ + true + )); + } + const key = `I${getTypeId(type)},${getTypeId(thisArgument)}`; + return getCachedType(key) ?? setCachedType(key, getTypeWithThisArgument( + type, + thisArgument, + /*needApparentType*/ + true + )); + } + function getResolvedTypeParameterDefault(typeParameter) { + if (!typeParameter.default) { + if (typeParameter.target) { + const targetDefault = getResolvedTypeParameterDefault(typeParameter.target); + typeParameter.default = targetDefault ? instantiateType(targetDefault, typeParameter.mapper) : noConstraintType; + } else { + typeParameter.default = resolvingDefaultType; + const defaultDeclaration = typeParameter.symbol && forEach(typeParameter.symbol.declarations, (decl) => isTypeParameterDeclaration(decl) && decl.default); + const defaultType = defaultDeclaration ? getTypeFromTypeNode(defaultDeclaration) : noConstraintType; + if (typeParameter.default === resolvingDefaultType) { + typeParameter.default = defaultType; + } + } + } else if (typeParameter.default === resolvingDefaultType) { + typeParameter.default = circularConstraintType; + } + return typeParameter.default; + } + function getDefaultFromTypeParameter(typeParameter) { + const defaultType = getResolvedTypeParameterDefault(typeParameter); + return defaultType !== noConstraintType && defaultType !== circularConstraintType ? defaultType : void 0; + } + function hasNonCircularTypeParameterDefault(typeParameter) { + return getResolvedTypeParameterDefault(typeParameter) !== circularConstraintType; + } + function hasTypeParameterDefault(typeParameter) { + return !!(typeParameter.symbol && forEach(typeParameter.symbol.declarations, (decl) => isTypeParameterDeclaration(decl) && decl.default)); + } + function getApparentTypeOfMappedType(type) { + return type.resolvedApparentType || (type.resolvedApparentType = getResolvedApparentTypeOfMappedType(type)); + } + function getResolvedApparentTypeOfMappedType(type) { + const target = type.target ?? type; + const typeVariable = getHomomorphicTypeVariable(target); + if (typeVariable && !target.declaration.nameType) { + const modifiersType = getModifiersTypeFromMappedType(type); + const baseConstraint = isGenericMappedType(modifiersType) ? getApparentTypeOfMappedType(modifiersType) : getBaseConstraintOfType(modifiersType); + if (baseConstraint && everyType(baseConstraint, (t) => isArrayOrTupleType(t) || isArrayOrTupleOrIntersection(t))) { + return instantiateType(target, prependTypeMapping(typeVariable, baseConstraint, type.mapper)); + } + } + return type; + } + function isArrayOrTupleOrIntersection(type) { + return !!(type.flags & 2097152 /* Intersection */) && every(type.types, isArrayOrTupleType); + } + function isMappedTypeGenericIndexedAccess(type) { + let objectType; + return !!(type.flags & 8388608 /* IndexedAccess */ && getObjectFlags(objectType = type.objectType) & 32 /* Mapped */ && !isGenericMappedType(objectType) && isGenericIndexType(type.indexType) && !(getMappedTypeModifiers(objectType) & 8 /* ExcludeOptional */) && !objectType.declaration.nameType); + } + function getApparentType(type) { + const t = type.flags & 465829888 /* Instantiable */ ? getBaseConstraintOfType(type) || unknownType : type; + const objectFlags = getObjectFlags(t); + return objectFlags & 32 /* Mapped */ ? getApparentTypeOfMappedType(t) : objectFlags & 4 /* Reference */ && t !== type ? getTypeWithThisArgument(t, type) : t.flags & 2097152 /* Intersection */ ? getApparentTypeOfIntersectionType(t, type) : t.flags & 402653316 /* StringLike */ ? globalStringType : t.flags & 296 /* NumberLike */ ? globalNumberType : t.flags & 2112 /* BigIntLike */ ? getGlobalBigIntType() : t.flags & 528 /* BooleanLike */ ? globalBooleanType : t.flags & 12288 /* ESSymbolLike */ ? getGlobalESSymbolType() : t.flags & 67108864 /* NonPrimitive */ ? emptyObjectType : t.flags & 4194304 /* Index */ ? stringNumberSymbolType : t.flags & 2 /* Unknown */ && !strictNullChecks ? emptyObjectType : t; + } + function getReducedApparentType(type) { + return getReducedType(getApparentType(getReducedType(type))); + } + function createUnionOrIntersectionProperty(containingType, name, skipObjectFunctionPropertyAugment) { + var _a, _b, _c; + let propFlags = 0 /* None */; + let singleProp; + let propSet; + let indexTypes; + const isUnion = containingType.flags & 1048576 /* Union */; + let optionalFlag; + let syntheticFlag = 4 /* SyntheticMethod */; + let checkFlags = isUnion ? 0 : 8 /* Readonly */; + let mergedInstantiations = false; + for (const current of containingType.types) { + const type = getApparentType(current); + if (!(isErrorType(type) || type.flags & 131072 /* Never */)) { + const prop = getPropertyOfType(type, name, skipObjectFunctionPropertyAugment); + const modifiers = prop ? getDeclarationModifierFlagsFromSymbol(prop) : 0; + if (prop) { + if (prop.flags & 106500 /* ClassMember */) { + optionalFlag ?? (optionalFlag = isUnion ? 0 /* None */ : 16777216 /* Optional */); + if (isUnion) { + optionalFlag |= prop.flags & 16777216 /* Optional */; + } else { + optionalFlag &= prop.flags; + } + } + if (!singleProp) { + singleProp = prop; + propFlags = prop.flags & 98304 /* Accessor */ || 4 /* Property */; + } else if (prop !== singleProp) { + const isInstantiation = (getTargetSymbol(prop) || prop) === (getTargetSymbol(singleProp) || singleProp); + if (isInstantiation && compareProperties2(singleProp, prop, (a, b) => a === b ? -1 /* True */ : 0 /* False */) === -1 /* True */) { + mergedInstantiations = !!singleProp.parent && !!length(getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(singleProp.parent)); + } else { + if (!propSet) { + propSet = /* @__PURE__ */ new Map(); + propSet.set(getSymbolId(singleProp), singleProp); + } + const id = getSymbolId(prop); + if (!propSet.has(id)) { + propSet.set(id, prop); + } + } + if (propFlags & 98304 /* Accessor */ && (prop.flags & 98304 /* Accessor */) !== (propFlags & 98304 /* Accessor */)) { + propFlags = propFlags & ~98304 /* Accessor */ | 4 /* Property */; + } + } + if (isUnion && isReadonlySymbol(prop)) { + checkFlags |= 8 /* Readonly */; + } else if (!isUnion && !isReadonlySymbol(prop)) { + checkFlags &= ~8 /* Readonly */; + } + checkFlags |= (!(modifiers & 6 /* NonPublicAccessibilityModifier */) ? 256 /* ContainsPublic */ : 0) | (modifiers & 4 /* Protected */ ? 512 /* ContainsProtected */ : 0) | (modifiers & 2 /* Private */ ? 1024 /* ContainsPrivate */ : 0) | (modifiers & 256 /* Static */ ? 2048 /* ContainsStatic */ : 0); + if (!isPrototypeProperty(prop)) { + syntheticFlag = 2 /* SyntheticProperty */; + } + } else if (isUnion) { + const indexInfo = !isLateBoundName(name) && getApplicableIndexInfoForName(type, name); + if (indexInfo) { + propFlags = propFlags & ~98304 /* Accessor */ | 4 /* Property */; + checkFlags |= 32 /* WritePartial */ | (indexInfo.isReadonly ? 8 /* Readonly */ : 0); + indexTypes = append(indexTypes, isTupleType(type) ? getRestTypeOfTupleType(type) || undefinedType : indexInfo.type); + } else if (isObjectLiteralType2(type) && !(getObjectFlags(type) & 2097152 /* ContainsSpread */)) { + checkFlags |= 32 /* WritePartial */; + indexTypes = append(indexTypes, undefinedType); + } else { + checkFlags |= 16 /* ReadPartial */; + } + } + } + } + if (!singleProp || isUnion && (propSet || checkFlags & 48 /* Partial */) && checkFlags & (1024 /* ContainsPrivate */ | 512 /* ContainsProtected */) && !(propSet && getCommonDeclarationsOfSymbols(propSet.values()))) { + return void 0; + } + if (!propSet && !(checkFlags & 16 /* ReadPartial */) && !indexTypes) { + if (mergedInstantiations) { + const links = (_a = tryCast(singleProp, isTransientSymbol)) == null ? void 0 : _a.links; + const clone2 = createSymbolWithType(singleProp, links == null ? void 0 : links.type); + clone2.parent = (_c = (_b = singleProp.valueDeclaration) == null ? void 0 : _b.symbol) == null ? void 0 : _c.parent; + clone2.links.containingType = containingType; + clone2.links.mapper = links == null ? void 0 : links.mapper; + clone2.links.writeType = getWriteTypeOfSymbol(singleProp); + return clone2; + } else { + return singleProp; + } + } + const props = propSet ? arrayFrom(propSet.values()) : [singleProp]; + let declarations; + let firstType; + let nameType; + const propTypes = []; + let writeTypes; + let firstValueDeclaration; + let hasNonUniformValueDeclaration = false; + for (const prop of props) { + if (!firstValueDeclaration) { + firstValueDeclaration = prop.valueDeclaration; + } else if (prop.valueDeclaration && prop.valueDeclaration !== firstValueDeclaration) { + hasNonUniformValueDeclaration = true; + } + declarations = addRange(declarations, prop.declarations); + const type = getTypeOfSymbol(prop); + if (!firstType) { + firstType = type; + nameType = getSymbolLinks(prop).nameType; + } + const writeType = getWriteTypeOfSymbol(prop); + if (writeTypes || writeType !== type) { + writeTypes = append(!writeTypes ? propTypes.slice() : writeTypes, writeType); + } + if (type !== firstType) { + checkFlags |= 64 /* HasNonUniformType */; + } + if (isLiteralType(type) || isPatternLiteralType(type)) { + checkFlags |= 128 /* HasLiteralType */; + } + if (type.flags & 131072 /* Never */ && type !== uniqueLiteralType) { + checkFlags |= 131072 /* HasNeverType */; + } + propTypes.push(type); + } + addRange(propTypes, indexTypes); + const result = createSymbol(propFlags | (optionalFlag ?? 0), name, syntheticFlag | checkFlags); + result.links.containingType = containingType; + if (!hasNonUniformValueDeclaration && firstValueDeclaration) { + result.valueDeclaration = firstValueDeclaration; + if (firstValueDeclaration.symbol.parent) { + result.parent = firstValueDeclaration.symbol.parent; + } + } + result.declarations = declarations; + result.links.nameType = nameType; + if (propTypes.length > 2) { + result.links.checkFlags |= 65536 /* DeferredType */; + result.links.deferralParent = containingType; + result.links.deferralConstituents = propTypes; + result.links.deferralWriteConstituents = writeTypes; + } else { + result.links.type = isUnion ? getUnionType(propTypes) : getIntersectionType(propTypes); + if (writeTypes) { + result.links.writeType = isUnion ? getUnionType(writeTypes) : getIntersectionType(writeTypes); + } + } + return result; + } + function getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment) { + var _a, _b, _c; + let property = skipObjectFunctionPropertyAugment ? (_a = type.propertyCacheWithoutObjectFunctionPropertyAugment) == null ? void 0 : _a.get(name) : (_b = type.propertyCache) == null ? void 0 : _b.get(name); + if (!property) { + property = createUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment); + if (property) { + const properties = skipObjectFunctionPropertyAugment ? type.propertyCacheWithoutObjectFunctionPropertyAugment || (type.propertyCacheWithoutObjectFunctionPropertyAugment = createSymbolTable()) : type.propertyCache || (type.propertyCache = createSymbolTable()); + properties.set(name, property); + if (skipObjectFunctionPropertyAugment && !(getCheckFlags(property) & 48 /* Partial */) && !((_c = type.propertyCache) == null ? void 0 : _c.get(name))) { + const properties2 = type.propertyCache || (type.propertyCache = createSymbolTable()); + properties2.set(name, property); + } + } + } + return property; + } + function getCommonDeclarationsOfSymbols(symbols) { + let commonDeclarations; + for (const symbol of symbols) { + if (!symbol.declarations) { + return void 0; + } + if (!commonDeclarations) { + commonDeclarations = new Set(symbol.declarations); + continue; + } + commonDeclarations.forEach((declaration) => { + if (!contains(symbol.declarations, declaration)) { + commonDeclarations.delete(declaration); + } + }); + if (commonDeclarations.size === 0) { + return void 0; + } + } + return commonDeclarations; + } + function getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment) { + const property = getUnionOrIntersectionProperty(type, name, skipObjectFunctionPropertyAugment); + return property && !(getCheckFlags(property) & 16 /* ReadPartial */) ? property : void 0; + } + function getReducedType(type) { + if (type.flags & 1048576 /* Union */ && type.objectFlags & 16777216 /* ContainsIntersections */) { + return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type)); + } else if (type.flags & 2097152 /* Intersection */) { + if (!(type.objectFlags & 16777216 /* IsNeverIntersectionComputed */)) { + type.objectFlags |= 16777216 /* IsNeverIntersectionComputed */ | (some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 33554432 /* IsNeverIntersection */ : 0); + } + return type.objectFlags & 33554432 /* IsNeverIntersection */ ? neverType : type; + } + return type; + } + function getReducedUnionType(unionType) { + const reducedTypes = sameMap(unionType.types, getReducedType); + if (reducedTypes === unionType.types) { + return unionType; + } + const reduced = getUnionType(reducedTypes); + if (reduced.flags & 1048576 /* Union */) { + reduced.resolvedReducedType = reduced; + } + return reduced; + } + function isNeverReducedProperty(prop) { + return isDiscriminantWithNeverType(prop) || isConflictingPrivateProperty(prop); + } + function isDiscriminantWithNeverType(prop) { + return !(prop.flags & 16777216 /* Optional */) && (getCheckFlags(prop) & (192 /* Discriminant */ | 131072 /* HasNeverType */)) === 192 /* Discriminant */ && !!(getTypeOfSymbol(prop).flags & 131072 /* Never */); + } + function isConflictingPrivateProperty(prop) { + return !prop.valueDeclaration && !!(getCheckFlags(prop) & 1024 /* ContainsPrivate */); + } + function isGenericReducibleType(type) { + return !!(type.flags & 1048576 /* Union */ && type.objectFlags & 16777216 /* ContainsIntersections */ && some(type.types, isGenericReducibleType) || type.flags & 2097152 /* Intersection */ && isReducibleIntersection(type)); + } + function isReducibleIntersection(type) { + const uniqueFilled = type.uniqueLiteralFilledInstantiation || (type.uniqueLiteralFilledInstantiation = instantiateType(type, uniqueLiteralMapper)); + return getReducedType(uniqueFilled) !== uniqueFilled; + } + function elaborateNeverIntersection(errorInfo, type) { + if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 33554432 /* IsNeverIntersection */) { + const neverProp = find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType); + if (neverProp) { + return chainDiagnosticMessages(errorInfo, Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString( + type, + /*enclosingDeclaration*/ + void 0, + 536870912 /* NoTypeReduction */ + ), symbolToString(neverProp)); + } + const privateProp = find(getPropertiesOfUnionOrIntersectionType(type), isConflictingPrivateProperty); + if (privateProp) { + return chainDiagnosticMessages(errorInfo, Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_private_in_some, typeToString( + type, + /*enclosingDeclaration*/ + void 0, + 536870912 /* NoTypeReduction */ + ), symbolToString(privateProp)); + } + } + return errorInfo; + } + function getPropertyOfType(type, name, skipObjectFunctionPropertyAugment, includeTypeOnlyMembers) { + var _a, _b; + type = getReducedApparentType(type); + if (type.flags & 524288 /* Object */) { + const resolved = resolveStructuredTypeMembers(type); + const symbol = resolved.members.get(name); + if (symbol && !includeTypeOnlyMembers && ((_a = type.symbol) == null ? void 0 : _a.flags) & 512 /* ValueModule */ && ((_b = getSymbolLinks(type.symbol).typeOnlyExportStarMap) == null ? void 0 : _b.has(name))) { + return void 0; + } + if (symbol && symbolIsValue(symbol, includeTypeOnlyMembers)) { + return symbol; + } + if (skipObjectFunctionPropertyAugment) return void 0; + const functionType = resolved === anyFunctionType ? globalFunctionType : resolved.callSignatures.length ? globalCallableFunctionType : resolved.constructSignatures.length ? globalNewableFunctionType : void 0; + if (functionType) { + const symbol2 = getPropertyOfObjectType(functionType, name); + if (symbol2) { + return symbol2; + } + } + return getPropertyOfObjectType(globalObjectType, name); + } + if (type.flags & 2097152 /* Intersection */) { + const prop = getPropertyOfUnionOrIntersectionType( + type, + name, + /*skipObjectFunctionPropertyAugment*/ + true + ); + if (prop) { + return prop; + } + if (!skipObjectFunctionPropertyAugment) { + return getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment); + } + return void 0; + } + if (type.flags & 1048576 /* Union */) { + return getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment); + } + return void 0; + } + function getSignaturesOfStructuredType(type, kind) { + if (type.flags & 3670016 /* StructuredType */) { + const resolved = resolveStructuredTypeMembers(type); + return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; + } + return emptyArray; + } + function getSignaturesOfType(type, kind) { + const result = getSignaturesOfStructuredType(getReducedApparentType(type), kind); + if (kind === 0 /* Call */ && !length(result) && type.flags & 1048576 /* Union */) { + if (type.arrayFallbackSignatures) { + return type.arrayFallbackSignatures; + } + let memberName; + if (everyType(type, (t) => { + var _a; + return !!((_a = t.symbol) == null ? void 0 : _a.parent) && isArrayOrTupleSymbol(t.symbol.parent) && (!memberName ? (memberName = t.symbol.escapedName, true) : memberName === t.symbol.escapedName); + })) { + const arrayArg = mapType(type, (t) => getMappedType((isReadonlyArraySymbol(t.symbol.parent) ? globalReadonlyArrayType : globalArrayType).typeParameters[0], t.mapper)); + const arrayType = createArrayType(arrayArg, someType(type, (t) => isReadonlyArraySymbol(t.symbol.parent))); + return type.arrayFallbackSignatures = getSignaturesOfType(getTypeOfPropertyOfType(arrayType, memberName), kind); + } + type.arrayFallbackSignatures = result; + } + return result; + } + function isArrayOrTupleSymbol(symbol) { + if (!symbol || !globalArrayType.symbol || !globalReadonlyArrayType.symbol) { + return false; + } + return !!getSymbolIfSameReference(symbol, globalArrayType.symbol) || !!getSymbolIfSameReference(symbol, globalReadonlyArrayType.symbol); + } + function isReadonlyArraySymbol(symbol) { + if (!symbol || !globalReadonlyArrayType.symbol) { + return false; + } + return !!getSymbolIfSameReference(symbol, globalReadonlyArrayType.symbol); + } + function findIndexInfo(indexInfos, keyType) { + return find(indexInfos, (info) => info.keyType === keyType); + } + function findApplicableIndexInfo(indexInfos, keyType) { + let stringIndexInfo; + let applicableInfo; + let applicableInfos; + for (const info of indexInfos) { + if (info.keyType === stringType) { + stringIndexInfo = info; + } else if (isApplicableIndexType(keyType, info.keyType)) { + if (!applicableInfo) { + applicableInfo = info; + } else { + (applicableInfos || (applicableInfos = [applicableInfo])).push(info); + } + } + } + return applicableInfos ? createIndexInfo(unknownType, getIntersectionType(map(applicableInfos, (info) => info.type)), reduceLeft( + applicableInfos, + (isReadonly, info) => isReadonly && info.isReadonly, + /*initial*/ + true + )) : applicableInfo ? applicableInfo : stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo : void 0; + } + function isApplicableIndexType(source, target) { + return isTypeAssignableTo(source, target) || target === stringType && isTypeAssignableTo(source, numberType) || target === numberType && (source === numericStringType || !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value)); + } + function getIndexInfosOfStructuredType(type) { + if (type.flags & 3670016 /* StructuredType */) { + const resolved = resolveStructuredTypeMembers(type); + return resolved.indexInfos; + } + return emptyArray; + } + function getIndexInfosOfType(type) { + return getIndexInfosOfStructuredType(getReducedApparentType(type)); + } + function getIndexInfoOfType(type, keyType) { + return findIndexInfo(getIndexInfosOfType(type), keyType); + } + function getIndexTypeOfType(type, keyType) { + var _a; + return (_a = getIndexInfoOfType(type, keyType)) == null ? void 0 : _a.type; + } + function getApplicableIndexInfos(type, keyType) { + return getIndexInfosOfType(type).filter((info) => isApplicableIndexType(keyType, info.keyType)); + } + function getApplicableIndexInfo(type, keyType) { + return findApplicableIndexInfo(getIndexInfosOfType(type), keyType); + } + function getApplicableIndexInfoForName(type, name) { + return getApplicableIndexInfo(type, isLateBoundName(name) ? esSymbolType : getStringLiteralType(unescapeLeadingUnderscores(name))); + } + function getTypeParametersFromDeclaration(declaration) { + var _a; + let result; + for (const node of getEffectiveTypeParameterDeclarations(declaration)) { + result = appendIfUnique(result, getDeclaredTypeOfTypeParameter(node.symbol)); + } + return (result == null ? void 0 : result.length) ? result : isFunctionDeclaration(declaration) ? (_a = getSignatureOfTypeTag(declaration)) == null ? void 0 : _a.typeParameters : void 0; + } + function symbolsToArray(symbols) { + const result = []; + symbols.forEach((symbol, id) => { + if (!isReservedMemberName(id)) { + result.push(symbol); + } + }); + return result; + } + function tryFindAmbientModule(moduleName, withAugmentations) { + if (isExternalModuleNameRelative(moduleName)) { + return void 0; + } + const symbol = getSymbol2(globals, '"' + moduleName + '"', 512 /* ValueModule */); + return symbol && withAugmentations ? getMergedSymbol(symbol) : symbol; + } + function hasEffectiveQuestionToken(node) { + return hasQuestionToken(node) || isOptionalJSDocPropertyLikeTag(node) || isParameter(node) && isJSDocOptionalParameter(node); + } + function isOptionalParameter(node) { + if (hasEffectiveQuestionToken(node)) { + return true; + } + if (!isParameter(node)) { + return false; + } + if (node.initializer) { + const signature = getSignatureFromDeclaration(node.parent); + const parameterIndex = node.parent.parameters.indexOf(node); + Debug.assert(parameterIndex >= 0); + return parameterIndex >= getMinArgumentCount(signature, 1 /* StrongArityForUntypedJS */ | 2 /* VoidIsNonOptional */); + } + const iife = getImmediatelyInvokedFunctionExpression(node.parent); + if (iife) { + return !node.type && !node.dotDotDotToken && node.parent.parameters.indexOf(node) >= getEffectiveCallArguments(iife).length; + } + return false; + } + function isOptionalPropertyDeclaration(node) { + return isPropertyDeclaration(node) && !hasAccessorModifier(node) && node.questionToken; + } + function createTypePredicate(kind, parameterName, parameterIndex, type) { + return { kind, parameterName, parameterIndex, type }; + } + function getMinTypeArgumentCount(typeParameters) { + let minTypeArgumentCount = 0; + if (typeParameters) { + for (let i = 0; i < typeParameters.length; i++) { + if (!hasTypeParameterDefault(typeParameters[i])) { + minTypeArgumentCount = i + 1; + } + } + } + return minTypeArgumentCount; + } + function fillMissingTypeArguments(typeArguments, typeParameters, minTypeArgumentCount, isJavaScriptImplicitAny) { + const numTypeParameters = length(typeParameters); + if (!numTypeParameters) { + return []; + } + const numTypeArguments = length(typeArguments); + if (isJavaScriptImplicitAny || numTypeArguments >= minTypeArgumentCount && numTypeArguments <= numTypeParameters) { + const result = typeArguments ? typeArguments.slice() : []; + for (let i = numTypeArguments; i < numTypeParameters; i++) { + result[i] = errorType; + } + const baseDefaultType = getDefaultTypeArgumentType(isJavaScriptImplicitAny); + for (let i = numTypeArguments; i < numTypeParameters; i++) { + let defaultType = getDefaultFromTypeParameter(typeParameters[i]); + if (isJavaScriptImplicitAny && defaultType && (isTypeIdenticalTo(defaultType, unknownType) || isTypeIdenticalTo(defaultType, emptyObjectType))) { + defaultType = anyType; + } + result[i] = defaultType ? instantiateType(defaultType, createTypeMapper(typeParameters, result)) : baseDefaultType; + } + result.length = typeParameters.length; + return result; + } + return typeArguments && typeArguments.slice(); + } + function getSignatureFromDeclaration(declaration) { + const links = getNodeLinks(declaration); + if (!links.resolvedSignature) { + const parameters = []; + let flags = 0 /* None */; + let minArgumentCount = 0; + let thisParameter; + let thisTag = isInJSFile(declaration) ? getJSDocThisTag(declaration) : void 0; + let hasThisParameter2 = false; + const iife = getImmediatelyInvokedFunctionExpression(declaration); + const isJSConstructSignature = isJSDocConstructSignature(declaration); + const isUntypedSignatureInJSFile = !iife && isInJSFile(declaration) && isValueSignatureDeclaration(declaration) && !hasJSDocParameterTags(declaration) && !some(declaration.parameters, (p) => !!getJSDocType(p)) && !getJSDocType(declaration) && !getContextualSignatureForFunctionLikeDeclaration(declaration); + if (isUntypedSignatureInJSFile) { + flags |= 32 /* IsUntypedSignatureInJSFile */; + } + for (let i = isJSConstructSignature ? 1 : 0; i < declaration.parameters.length; i++) { + const param = declaration.parameters[i]; + if (isInJSFile(param) && isJSDocThisTag(param)) { + thisTag = param; + continue; + } + let paramSymbol = param.symbol; + const type = isJSDocParameterTag(param) ? param.typeExpression && param.typeExpression.type : param.type; + if (paramSymbol && !!(paramSymbol.flags & 4 /* Property */) && !isBindingPattern(param.name)) { + const resolvedSymbol = resolveName( + param, + paramSymbol.escapedName, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + paramSymbol = resolvedSymbol; + } + if (i === 0 && paramSymbol.escapedName === "this" /* This */) { + hasThisParameter2 = true; + thisParameter = param.symbol; + } else { + parameters.push(paramSymbol); + } + if (type && type.kind === 202 /* LiteralType */) { + flags |= 2 /* HasLiteralTypes */; + } + const isOptionalParameter2 = hasEffectiveQuestionToken(param) || isParameter(param) && param.initializer || isRestParameter(param) || iife && parameters.length > iife.arguments.length && !type; + if (!isOptionalParameter2) { + minArgumentCount = parameters.length; + } + } + if ((declaration.kind === 178 /* GetAccessor */ || declaration.kind === 179 /* SetAccessor */) && hasBindableName(declaration) && (!hasThisParameter2 || !thisParameter)) { + const otherKind = declaration.kind === 178 /* GetAccessor */ ? 179 /* SetAccessor */ : 178 /* GetAccessor */; + const other = getDeclarationOfKind(getSymbolOfDeclaration(declaration), otherKind); + if (other) { + thisParameter = getAnnotatedAccessorThisParameter(other); + } + } + if (thisTag && thisTag.typeExpression) { + thisParameter = createSymbolWithType(createSymbol(1 /* FunctionScopedVariable */, "this" /* This */), getTypeFromTypeNode(thisTag.typeExpression)); + } + const hostDeclaration = isJSDocSignature(declaration) ? getEffectiveJSDocHost(declaration) : declaration; + const classType = hostDeclaration && isConstructorDeclaration(hostDeclaration) ? getDeclaredTypeOfClassOrInterface(getMergedSymbol(hostDeclaration.parent.symbol)) : void 0; + const typeParameters = classType ? classType.localTypeParameters : getTypeParametersFromDeclaration(declaration); + if (hasRestParameter(declaration) || isInJSFile(declaration) && maybeAddJsSyntheticRestParameter(declaration, parameters)) { + flags |= 1 /* HasRestParameter */; + } + if (isConstructorTypeNode(declaration) && hasSyntacticModifier(declaration, 64 /* Abstract */) || isConstructorDeclaration(declaration) && hasSyntacticModifier(declaration.parent, 64 /* Abstract */)) { + flags |= 4 /* Abstract */; + } + links.resolvedSignature = createSignature( + declaration, + typeParameters, + thisParameter, + parameters, + /*resolvedReturnType*/ + void 0, + /*resolvedTypePredicate*/ + void 0, + minArgumentCount, + flags + ); + } + return links.resolvedSignature; + } + function maybeAddJsSyntheticRestParameter(declaration, parameters) { + if (isJSDocSignature(declaration) || !containsArgumentsReference(declaration)) { + return false; + } + const lastParam = lastOrUndefined(declaration.parameters); + const lastParamTags = lastParam ? getJSDocParameterTags(lastParam) : getJSDocTags(declaration).filter(isJSDocParameterTag); + const lastParamVariadicType = firstDefined(lastParamTags, (p) => p.typeExpression && isJSDocVariadicType(p.typeExpression.type) ? p.typeExpression.type : void 0); + const syntheticArgsSymbol = createSymbol(3 /* Variable */, "args", 32768 /* RestParameter */); + if (lastParamVariadicType) { + syntheticArgsSymbol.links.type = createArrayType(getTypeFromTypeNode(lastParamVariadicType.type)); + } else { + syntheticArgsSymbol.links.checkFlags |= 65536 /* DeferredType */; + syntheticArgsSymbol.links.deferralParent = neverType; + syntheticArgsSymbol.links.deferralConstituents = [anyArrayType]; + syntheticArgsSymbol.links.deferralWriteConstituents = [anyArrayType]; + } + if (lastParamVariadicType) { + parameters.pop(); + } + parameters.push(syntheticArgsSymbol); + return true; + } + function getSignatureOfTypeTag(node) { + if (!(isInJSFile(node) && isFunctionLikeDeclaration(node))) return void 0; + const typeTag = getJSDocTypeTag(node); + return (typeTag == null ? void 0 : typeTag.typeExpression) && getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression)); + } + function getParameterTypeOfTypeTag(func, parameter) { + const signature = getSignatureOfTypeTag(func); + if (!signature) return void 0; + const pos = func.parameters.indexOf(parameter); + return parameter.dotDotDotToken ? getRestTypeAtPosition(signature, pos) : getTypeAtPosition(signature, pos); + } + function getReturnTypeOfTypeTag(node) { + const signature = getSignatureOfTypeTag(node); + return signature && getReturnTypeOfSignature(signature); + } + function containsArgumentsReference(declaration) { + const links = getNodeLinks(declaration); + if (links.containsArgumentsReference === void 0) { + if (links.flags & 512 /* CaptureArguments */) { + links.containsArgumentsReference = true; + } else { + links.containsArgumentsReference = traverse(declaration.body); + } + } + return links.containsArgumentsReference; + function traverse(node) { + if (!node) return false; + switch (node.kind) { + case 80 /* Identifier */: + return node.escapedText === argumentsSymbol.escapedName && getReferencedValueSymbol(node) === argumentsSymbol; + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return node.name.kind === 168 /* ComputedPropertyName */ && traverse(node.name); + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return traverse(node.expression); + case 304 /* PropertyAssignment */: + return traverse(node.initializer); + default: + return !nodeStartsNewLexicalEnvironment(node) && !isPartOfTypeNode(node) && !!forEachChild(node, traverse); + } + } + } + function getSignaturesOfSymbol(symbol) { + if (!symbol || !symbol.declarations) return emptyArray; + const result = []; + for (let i = 0; i < symbol.declarations.length; i++) { + const decl = symbol.declarations[i]; + if (!isFunctionLike(decl)) continue; + if (i > 0 && decl.body) { + const previous = symbol.declarations[i - 1]; + if (decl.parent === previous.parent && decl.kind === previous.kind && decl.pos === previous.end) { + continue; + } + } + if (isInJSFile(decl) && decl.jsDoc) { + const tags = getJSDocOverloadTags(decl); + if (length(tags)) { + for (const tag of tags) { + const jsDocSignature = tag.typeExpression; + if (jsDocSignature.type === void 0 && !isConstructorDeclaration(decl)) { + reportImplicitAny(jsDocSignature, anyType); + } + result.push(getSignatureFromDeclaration(jsDocSignature)); + } + continue; + } + } + result.push( + !isFunctionExpressionOrArrowFunction(decl) && !isObjectLiteralMethod(decl) && getSignatureOfTypeTag(decl) || getSignatureFromDeclaration(decl) + ); + } + return result; + } + function resolveExternalModuleTypeByLiteral(name) { + const moduleSym = resolveExternalModuleName(name, name); + if (moduleSym) { + const resolvedModuleSymbol = resolveExternalModuleSymbol(moduleSym); + if (resolvedModuleSymbol) { + return getTypeOfSymbol(resolvedModuleSymbol); + } + } + return anyType; + } + function getThisTypeOfSignature(signature) { + if (signature.thisParameter) { + return getTypeOfSymbol(signature.thisParameter); + } + } + function getTypePredicateOfSignature(signature) { + if (!signature.resolvedTypePredicate) { + if (signature.target) { + const targetTypePredicate = getTypePredicateOfSignature(signature.target); + signature.resolvedTypePredicate = targetTypePredicate ? instantiateTypePredicate(targetTypePredicate, signature.mapper) : noTypePredicate; + } else if (signature.compositeSignatures) { + signature.resolvedTypePredicate = getUnionOrIntersectionTypePredicate(signature.compositeSignatures, signature.compositeKind) || noTypePredicate; + } else { + const type = signature.declaration && getEffectiveReturnTypeNode(signature.declaration); + let jsdocPredicate; + if (!type) { + const jsdocSignature = getSignatureOfTypeTag(signature.declaration); + if (jsdocSignature && signature !== jsdocSignature) { + jsdocPredicate = getTypePredicateOfSignature(jsdocSignature); + } + } + if (type || jsdocPredicate) { + signature.resolvedTypePredicate = type && isTypePredicateNode(type) ? createTypePredicateFromTypePredicateNode(type, signature) : jsdocPredicate || noTypePredicate; + } else if (signature.declaration && isFunctionLikeDeclaration(signature.declaration) && (!signature.resolvedReturnType || signature.resolvedReturnType.flags & 16 /* Boolean */) && getParameterCount(signature) > 0) { + const { declaration } = signature; + signature.resolvedTypePredicate = noTypePredicate; + signature.resolvedTypePredicate = getTypePredicateFromBody(declaration) || noTypePredicate; + } else { + signature.resolvedTypePredicate = noTypePredicate; + } + } + Debug.assert(!!signature.resolvedTypePredicate); + } + return signature.resolvedTypePredicate === noTypePredicate ? void 0 : signature.resolvedTypePredicate; + } + function createTypePredicateFromTypePredicateNode(node, signature) { + const parameterName = node.parameterName; + const type = node.type && getTypeFromTypeNode(node.type); + return parameterName.kind === 198 /* ThisType */ ? createTypePredicate( + node.assertsModifier ? 2 /* AssertsThis */ : 0 /* This */, + /*parameterName*/ + void 0, + /*parameterIndex*/ + void 0, + type + ) : createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, findIndex(signature.parameters, (p) => p.escapedName === parameterName.escapedText), type); + } + function getUnionOrIntersectionType(types, kind, unionReduction) { + return kind !== 2097152 /* Intersection */ ? getUnionType(types, unionReduction) : getIntersectionType(types); + } + function getReturnTypeOfSignature(signature) { + if (!signature.resolvedReturnType) { + if (!pushTypeResolution(signature, 3 /* ResolvedReturnType */)) { + return errorType; + } + let type = signature.target ? instantiateType(getReturnTypeOfSignature(signature.target), signature.mapper) : signature.compositeSignatures ? instantiateType(getUnionOrIntersectionType(map(signature.compositeSignatures, getReturnTypeOfSignature), signature.compositeKind, 2 /* Subtype */), signature.mapper) : getReturnTypeFromAnnotation(signature.declaration) || (nodeIsMissing(signature.declaration.body) ? anyType : getReturnTypeFromBody(signature.declaration)); + if (signature.flags & 8 /* IsInnerCallChain */) { + type = addOptionalTypeMarker(type); + } else if (signature.flags & 16 /* IsOuterCallChain */) { + type = getOptionalType(type); + } + if (!popTypeResolution()) { + if (signature.declaration) { + const typeNode = getEffectiveReturnTypeNode(signature.declaration); + if (typeNode) { + error2(typeNode, Diagnostics.Return_type_annotation_circularly_references_itself); + } else if (noImplicitAny) { + const declaration = signature.declaration; + const name = getNameOfDeclaration(declaration); + if (name) { + error2(name, Diagnostics._0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions, declarationNameToString(name)); + } else { + error2(declaration, Diagnostics.Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_referenced_directly_or_indirectly_in_one_of_its_return_expressions); + } + } + } + type = anyType; + } + signature.resolvedReturnType ?? (signature.resolvedReturnType = type); + } + return signature.resolvedReturnType; + } + function getReturnTypeFromAnnotation(declaration) { + if (declaration.kind === 177 /* Constructor */) { + return getDeclaredTypeOfClassOrInterface(getMergedSymbol(declaration.parent.symbol)); + } + const typeNode = getEffectiveReturnTypeNode(declaration); + if (isJSDocSignature(declaration)) { + const root = getJSDocRoot(declaration); + if (root && isConstructorDeclaration(root.parent) && !typeNode) { + return getDeclaredTypeOfClassOrInterface(getMergedSymbol(root.parent.parent.symbol)); + } + } + if (isJSDocConstructSignature(declaration)) { + return getTypeFromTypeNode(declaration.parameters[0].type); + } + if (typeNode) { + return getTypeFromTypeNode(typeNode); + } + if (declaration.kind === 178 /* GetAccessor */ && hasBindableName(declaration)) { + const jsDocType = isInJSFile(declaration) && getTypeForDeclarationFromJSDocComment(declaration); + if (jsDocType) { + return jsDocType; + } + const setter = getDeclarationOfKind(getSymbolOfDeclaration(declaration), 179 /* SetAccessor */); + const setterType = getAnnotatedAccessorType(setter); + if (setterType) { + return setterType; + } + } + return getReturnTypeOfTypeTag(declaration); + } + function isResolvingReturnTypeOfSignature(signature) { + return signature.compositeSignatures && some(signature.compositeSignatures, isResolvingReturnTypeOfSignature) || !signature.resolvedReturnType && findResolutionCycleStartIndex(signature, 3 /* ResolvedReturnType */) >= 0; + } + function getRestTypeOfSignature(signature) { + return tryGetRestTypeOfSignature(signature) || anyType; + } + function tryGetRestTypeOfSignature(signature) { + if (signatureHasRestParameter(signature)) { + const sigRestType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + const restType = isTupleType(sigRestType) ? getRestTypeOfTupleType(sigRestType) : sigRestType; + return restType && getIndexTypeOfType(restType, numberType); + } + return void 0; + } + function getSignatureInstantiation(signature, typeArguments, isJavascript, inferredTypeParameters) { + const instantiatedSignature = getSignatureInstantiationWithoutFillingInTypeArguments(signature, fillMissingTypeArguments(typeArguments, signature.typeParameters, getMinTypeArgumentCount(signature.typeParameters), isJavascript)); + if (inferredTypeParameters) { + const returnSignature = getSingleCallOrConstructSignature(getReturnTypeOfSignature(instantiatedSignature)); + if (returnSignature) { + const newReturnSignature = cloneSignature(returnSignature); + newReturnSignature.typeParameters = inferredTypeParameters; + const newReturnType = getOrCreateTypeFromSignature(newReturnSignature); + newReturnType.mapper = instantiatedSignature.mapper; + const newInstantiatedSignature = cloneSignature(instantiatedSignature); + newInstantiatedSignature.resolvedReturnType = newReturnType; + return newInstantiatedSignature; + } + } + return instantiatedSignature; + } + function getSignatureInstantiationWithoutFillingInTypeArguments(signature, typeArguments) { + const instantiations = signature.instantiations || (signature.instantiations = /* @__PURE__ */ new Map()); + const id = getTypeListId(typeArguments); + let instantiation = instantiations.get(id); + if (!instantiation) { + instantiations.set(id, instantiation = createSignatureInstantiation(signature, typeArguments)); + } + return instantiation; + } + function createSignatureInstantiation(signature, typeArguments) { + return instantiateSignature( + signature, + createSignatureTypeMapper(signature, typeArguments), + /*eraseTypeParameters*/ + true + ); + } + function getTypeParametersForMapper(signature) { + return sameMap(signature.typeParameters, (tp) => tp.mapper ? instantiateType(tp, tp.mapper) : tp); + } + function createSignatureTypeMapper(signature, typeArguments) { + return createTypeMapper(getTypeParametersForMapper(signature), typeArguments); + } + function getErasedSignature(signature) { + return signature.typeParameters ? signature.erasedSignatureCache || (signature.erasedSignatureCache = createErasedSignature(signature)) : signature; + } + function createErasedSignature(signature) { + return instantiateSignature( + signature, + createTypeEraser(signature.typeParameters), + /*eraseTypeParameters*/ + true + ); + } + function getCanonicalSignature(signature) { + return signature.typeParameters ? signature.canonicalSignatureCache || (signature.canonicalSignatureCache = createCanonicalSignature(signature)) : signature; + } + function createCanonicalSignature(signature) { + return getSignatureInstantiation( + signature, + map(signature.typeParameters, (tp) => tp.target && !getConstraintOfTypeParameter(tp.target) ? tp.target : tp), + isInJSFile(signature.declaration) + ); + } + function getBaseSignature(signature) { + const typeParameters = signature.typeParameters; + if (typeParameters) { + if (signature.baseSignatureCache) { + return signature.baseSignatureCache; + } + const typeEraser = createTypeEraser(typeParameters); + const baseConstraintMapper = createTypeMapper(typeParameters, map(typeParameters, (tp) => getConstraintOfTypeParameter(tp) || unknownType)); + let baseConstraints = map(typeParameters, (tp) => instantiateType(tp, baseConstraintMapper) || unknownType); + for (let i = 0; i < typeParameters.length - 1; i++) { + baseConstraints = instantiateTypes(baseConstraints, baseConstraintMapper); + } + baseConstraints = instantiateTypes(baseConstraints, typeEraser); + return signature.baseSignatureCache = instantiateSignature( + signature, + createTypeMapper(typeParameters, baseConstraints), + /*eraseTypeParameters*/ + true + ); + } + return signature; + } + function getOrCreateTypeFromSignature(signature) { + var _a, _b; + if (!signature.isolatedSignatureType) { + const kind = (_a = signature.declaration) == null ? void 0 : _a.kind; + const isConstructor = kind === void 0 || kind === 177 /* Constructor */ || kind === 181 /* ConstructSignature */ || kind === 186 /* ConstructorType */; + const type = createObjectType(16 /* Anonymous */ | 134217728 /* SingleSignatureType */, (_b = signature.declaration) == null ? void 0 : _b.symbol); + type.members = emptySymbols; + type.properties = emptyArray; + type.callSignatures = !isConstructor ? [signature] : emptyArray; + type.constructSignatures = isConstructor ? [signature] : emptyArray; + type.indexInfos = emptyArray; + signature.isolatedSignatureType = type; + } + return signature.isolatedSignatureType; + } + function getIndexSymbol(symbol) { + return symbol.members ? getIndexSymbolFromSymbolTable(getMembersOfSymbol(symbol)) : void 0; + } + function getIndexSymbolFromSymbolTable(symbolTable) { + return symbolTable.get("__index" /* Index */); + } + function createIndexInfo(keyType, type, isReadonly, declaration, components) { + return { keyType, type, isReadonly, declaration, components }; + } + function getIndexInfosOfSymbol(symbol) { + const indexSymbol = getIndexSymbol(symbol); + return indexSymbol ? getIndexInfosOfIndexSymbol(indexSymbol, arrayFrom(getMembersOfSymbol(symbol).values())) : emptyArray; + } + function getIndexInfosOfIndexSymbol(indexSymbol, siblingSymbols = indexSymbol.parent ? arrayFrom(getMembersOfSymbol(indexSymbol.parent).values()) : void 0) { + if (indexSymbol.declarations) { + const indexInfos = []; + let hasComputedNumberProperty = false; + let readonlyComputedNumberProperty = true; + let hasComputedSymbolProperty = false; + let readonlyComputedSymbolProperty = true; + let hasComputedStringProperty = false; + let readonlyComputedStringProperty = true; + const computedPropertySymbols = []; + for (const declaration of indexSymbol.declarations) { + if (isIndexSignatureDeclaration(declaration)) { + if (declaration.parameters.length === 1) { + const parameter = declaration.parameters[0]; + if (parameter.type) { + forEachType(getTypeFromTypeNode(parameter.type), (keyType) => { + if (isValidIndexKeyType(keyType) && !findIndexInfo(indexInfos, keyType)) { + indexInfos.push(createIndexInfo(keyType, declaration.type ? getTypeFromTypeNode(declaration.type) : anyType, hasEffectiveModifier(declaration, 8 /* Readonly */), declaration)); + } + }); + } + } + } else if (hasLateBindableIndexSignature(declaration)) { + const declName = isBinaryExpression(declaration) ? declaration.left : declaration.name; + const keyType = isElementAccessExpression(declName) ? checkExpressionCached(declName.argumentExpression) : checkComputedPropertyName(declName); + if (findIndexInfo(indexInfos, keyType)) { + continue; + } + if (isTypeAssignableTo(keyType, stringNumberSymbolType)) { + if (isTypeAssignableTo(keyType, numberType)) { + hasComputedNumberProperty = true; + if (!hasEffectiveReadonlyModifier(declaration)) { + readonlyComputedNumberProperty = false; + } + } else if (isTypeAssignableTo(keyType, esSymbolType)) { + hasComputedSymbolProperty = true; + if (!hasEffectiveReadonlyModifier(declaration)) { + readonlyComputedSymbolProperty = false; + } + } else { + hasComputedStringProperty = true; + if (!hasEffectiveReadonlyModifier(declaration)) { + readonlyComputedStringProperty = false; + } + } + computedPropertySymbols.push(declaration.symbol); + } + } + } + const allPropertySymbols = concatenate(computedPropertySymbols, filter(siblingSymbols, (s) => s !== indexSymbol)); + if (hasComputedStringProperty && !findIndexInfo(indexInfos, stringType)) indexInfos.push(getObjectLiteralIndexInfo(readonlyComputedStringProperty, 0, allPropertySymbols, stringType)); + if (hasComputedNumberProperty && !findIndexInfo(indexInfos, numberType)) indexInfos.push(getObjectLiteralIndexInfo(readonlyComputedNumberProperty, 0, allPropertySymbols, numberType)); + if (hasComputedSymbolProperty && !findIndexInfo(indexInfos, esSymbolType)) indexInfos.push(getObjectLiteralIndexInfo(readonlyComputedSymbolProperty, 0, allPropertySymbols, esSymbolType)); + return indexInfos; + } + return emptyArray; + } + function isValidIndexKeyType(type) { + return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) || !!(type.flags & 2097152 /* Intersection */) && !isGenericType(type) && some(type.types, isValidIndexKeyType); + } + function getConstraintDeclaration(type) { + return mapDefined(filter(type.symbol && type.symbol.declarations, isTypeParameterDeclaration), getEffectiveConstraintOfTypeParameter)[0]; + } + function getInferredTypeParameterConstraint(typeParameter, omitTypeReferences) { + var _a; + let inferences; + if ((_a = typeParameter.symbol) == null ? void 0 : _a.declarations) { + for (const declaration of typeParameter.symbol.declarations) { + if (declaration.parent.kind === 196 /* InferType */) { + const [childTypeParameter = declaration.parent, grandParent] = walkUpParenthesizedTypesAndGetParentAndChild(declaration.parent.parent); + if (grandParent.kind === 184 /* TypeReference */ && !omitTypeReferences) { + const typeReference = grandParent; + const typeParameters = getTypeParametersForTypeReferenceOrImport(typeReference); + if (typeParameters) { + const index = typeReference.typeArguments.indexOf(childTypeParameter); + if (index < typeParameters.length) { + const declaredConstraint = getConstraintOfTypeParameter(typeParameters[index]); + if (declaredConstraint) { + const mapper = makeDeferredTypeMapper( + typeParameters, + typeParameters.map((_, index2) => () => { + return getEffectiveTypeArgumentAtIndex(typeReference, typeParameters, index2); + }) + ); + const constraint = instantiateType(declaredConstraint, mapper); + if (constraint !== typeParameter) { + inferences = append(inferences, constraint); + } + } + } + } + } else if (grandParent.kind === 170 /* Parameter */ && grandParent.dotDotDotToken || grandParent.kind === 192 /* RestType */ || grandParent.kind === 203 /* NamedTupleMember */ && grandParent.dotDotDotToken) { + inferences = append(inferences, createArrayType(unknownType)); + } else if (grandParent.kind === 205 /* TemplateLiteralTypeSpan */) { + inferences = append(inferences, stringType); + } else if (grandParent.kind === 169 /* TypeParameter */ && grandParent.parent.kind === 201 /* MappedType */) { + inferences = append(inferences, stringNumberSymbolType); + } else if (grandParent.kind === 201 /* MappedType */ && grandParent.type && skipParentheses(grandParent.type) === declaration.parent && grandParent.parent.kind === 195 /* ConditionalType */ && grandParent.parent.extendsType === grandParent && grandParent.parent.checkType.kind === 201 /* MappedType */ && grandParent.parent.checkType.type) { + const checkMappedType2 = grandParent.parent.checkType; + const nodeType = getTypeFromTypeNode(checkMappedType2.type); + inferences = append(inferences, instantiateType(nodeType, makeUnaryTypeMapper(getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(checkMappedType2.typeParameter)), checkMappedType2.typeParameter.constraint ? getTypeFromTypeNode(checkMappedType2.typeParameter.constraint) : stringNumberSymbolType))); + } + } + } + } + return inferences && getIntersectionType(inferences); + } + function getConstraintFromTypeParameter(typeParameter) { + if (!typeParameter.constraint) { + if (typeParameter.target) { + const targetConstraint = getConstraintOfTypeParameter(typeParameter.target); + typeParameter.constraint = targetConstraint ? instantiateType(targetConstraint, typeParameter.mapper) : noConstraintType; + } else { + const constraintDeclaration = getConstraintDeclaration(typeParameter); + if (!constraintDeclaration) { + typeParameter.constraint = getInferredTypeParameterConstraint(typeParameter) || noConstraintType; + } else { + let type = getTypeFromTypeNode(constraintDeclaration); + if (type.flags & 1 /* Any */ && !isErrorType(type)) { + type = constraintDeclaration.parent.parent.kind === 201 /* MappedType */ ? stringNumberSymbolType : unknownType; + } + typeParameter.constraint = type; + } + } + } + return typeParameter.constraint === noConstraintType ? void 0 : typeParameter.constraint; + } + function getParentSymbolOfTypeParameter(typeParameter) { + const tp = getDeclarationOfKind(typeParameter.symbol, 169 /* TypeParameter */); + const host2 = isJSDocTemplateTag(tp.parent) ? getEffectiveContainerForJSDocTemplateTag(tp.parent) : tp.parent; + return host2 && getSymbolOfNode(host2); + } + function getTypeListId(types) { + let result = ""; + if (types) { + const length2 = types.length; + let i = 0; + while (i < length2) { + const startId = types[i].id; + let count = 1; + while (i + count < length2 && types[i + count].id === startId + count) { + count++; + } + if (result.length) { + result += ","; + } + result += startId; + if (count > 1) { + result += ":" + count; + } + i += count; + } + } + return result; + } + function getAliasId(aliasSymbol, aliasTypeArguments) { + return aliasSymbol ? `@${getSymbolId(aliasSymbol)}` + (aliasTypeArguments ? `:${getTypeListId(aliasTypeArguments)}` : "") : ""; + } + function getPropagatingFlagsOfTypes(types, excludeKinds) { + let result = 0; + for (const type of types) { + if (excludeKinds === void 0 || !(type.flags & excludeKinds)) { + result |= getObjectFlags(type); + } + } + return result & 458752 /* PropagatingFlags */; + } + function tryCreateTypeReference(target, typeArguments) { + if (some(typeArguments) && target === emptyGenericType) { + return unknownType; + } + return createTypeReference(target, typeArguments); + } + function createTypeReference(target, typeArguments) { + const id = getTypeListId(typeArguments); + let type = target.instantiations.get(id); + if (!type) { + type = createObjectType(4 /* Reference */, target.symbol); + target.instantiations.set(id, type); + type.objectFlags |= typeArguments ? getPropagatingFlagsOfTypes(typeArguments) : 0; + type.target = target; + type.resolvedTypeArguments = typeArguments; + } + return type; + } + function cloneTypeReference(source) { + const type = createTypeWithSymbol(source.flags, source.symbol); + type.objectFlags = source.objectFlags; + type.target = source.target; + type.resolvedTypeArguments = source.resolvedTypeArguments; + return type; + } + function createDeferredTypeReference(target, node, mapper, aliasSymbol, aliasTypeArguments) { + if (!aliasSymbol) { + aliasSymbol = getAliasSymbolForTypeNode(node); + const localAliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); + aliasTypeArguments = mapper ? instantiateTypes(localAliasTypeArguments, mapper) : localAliasTypeArguments; + } + const type = createObjectType(4 /* Reference */, target.symbol); + type.target = target; + type.node = node; + type.mapper = mapper; + type.aliasSymbol = aliasSymbol; + type.aliasTypeArguments = aliasTypeArguments; + return type; + } + function getTypeArguments(type) { + var _a, _b; + if (!type.resolvedTypeArguments) { + if (!pushTypeResolution(type, 5 /* ResolvedTypeArguments */)) { + return concatenate(type.target.outerTypeParameters, (_a = type.target.localTypeParameters) == null ? void 0 : _a.map(() => errorType)) || emptyArray; + } + const node = type.node; + const typeArguments = !node ? emptyArray : node.kind === 184 /* TypeReference */ ? concatenate(type.target.outerTypeParameters, getEffectiveTypeArguments2(node, type.target.localTypeParameters)) : node.kind === 189 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : map(node.elements, getTypeFromTypeNode); + if (popTypeResolution()) { + type.resolvedTypeArguments ?? (type.resolvedTypeArguments = type.mapper ? instantiateTypes(typeArguments, type.mapper) : typeArguments); + } else { + type.resolvedTypeArguments ?? (type.resolvedTypeArguments = concatenate(type.target.outerTypeParameters, ((_b = type.target.localTypeParameters) == null ? void 0 : _b.map(() => errorType)) || emptyArray)); + error2( + type.node || currentNode, + type.target.symbol ? Diagnostics.Type_arguments_for_0_circularly_reference_themselves : Diagnostics.Tuple_type_arguments_circularly_reference_themselves, + type.target.symbol && symbolToString(type.target.symbol) + ); + } + } + return type.resolvedTypeArguments; + } + function getTypeReferenceArity(type) { + return length(type.target.typeParameters); + } + function getTypeFromClassOrInterfaceReference(node, symbol) { + const type = getDeclaredTypeOfSymbol(getMergedSymbol(symbol)); + const typeParameters = type.localTypeParameters; + if (typeParameters) { + const numTypeArguments = length(node.typeArguments); + const minTypeArgumentCount = getMinTypeArgumentCount(typeParameters); + const isJs = isInJSFile(node); + const isJsImplicitAny = !noImplicitAny && isJs; + if (!isJsImplicitAny && (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length)) { + const missingAugmentsTag = isJs && isExpressionWithTypeArguments(node) && !isJSDocAugmentsTag(node.parent); + const diag2 = minTypeArgumentCount === typeParameters.length ? missingAugmentsTag ? Diagnostics.Expected_0_type_arguments_provide_these_with_an_extends_tag : Diagnostics.Generic_type_0_requires_1_type_argument_s : missingAugmentsTag ? Diagnostics.Expected_0_1_type_arguments_provide_these_with_an_extends_tag : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments; + const typeStr = typeToString( + type, + /*enclosingDeclaration*/ + void 0, + 2 /* WriteArrayAsGenericType */ + ); + error2(node, diag2, typeStr, minTypeArgumentCount, typeParameters.length); + if (!isJs) { + return errorType; + } + } + if (node.kind === 184 /* TypeReference */ && isDeferredTypeReferenceNode(node, length(node.typeArguments) !== typeParameters.length)) { + return createDeferredTypeReference( + type, + node, + /*mapper*/ + void 0 + ); + } + const typeArguments = concatenate(type.outerTypeParameters, fillMissingTypeArguments(typeArgumentsFromTypeReferenceNode(node), typeParameters, minTypeArgumentCount, isJs)); + return createTypeReference(type, typeArguments); + } + return checkNoTypeArguments(node, symbol) ? type : errorType; + } + function getTypeAliasInstantiation(symbol, typeArguments, aliasSymbol, aliasTypeArguments) { + const type = getDeclaredTypeOfSymbol(symbol); + if (type === intrinsicMarkerType) { + const typeKind = intrinsicTypeKinds.get(symbol.escapedName); + if (typeKind !== void 0 && typeArguments && typeArguments.length === 1) { + return typeKind === 4 /* NoInfer */ ? getNoInferType(typeArguments[0]) : getStringMappingType(symbol, typeArguments[0]); + } + } + const links = getSymbolLinks(symbol); + const typeParameters = links.typeParameters; + const id = getTypeListId(typeArguments) + getAliasId(aliasSymbol, aliasTypeArguments); + let instantiation = links.instantiations.get(id); + if (!instantiation) { + links.instantiations.set(id, instantiation = instantiateTypeWithAlias(type, createTypeMapper(typeParameters, fillMissingTypeArguments(typeArguments, typeParameters, getMinTypeArgumentCount(typeParameters), isInJSFile(symbol.valueDeclaration))), aliasSymbol, aliasTypeArguments)); + } + return instantiation; + } + function getTypeFromTypeAliasReference(node, symbol) { + if (getCheckFlags(symbol) & 1048576 /* Unresolved */) { + const typeArguments = typeArgumentsFromTypeReferenceNode(node); + const id = getAliasId(symbol, typeArguments); + let errorType2 = errorTypes.get(id); + if (!errorType2) { + errorType2 = createIntrinsicType( + 1 /* Any */, + "error", + /*objectFlags*/ + void 0, + `alias ${id}` + ); + errorType2.aliasSymbol = symbol; + errorType2.aliasTypeArguments = typeArguments; + errorTypes.set(id, errorType2); + } + return errorType2; + } + const type = getDeclaredTypeOfSymbol(symbol); + const typeParameters = getSymbolLinks(symbol).typeParameters; + if (typeParameters) { + const numTypeArguments = length(node.typeArguments); + const minTypeArgumentCount = getMinTypeArgumentCount(typeParameters); + if (numTypeArguments < minTypeArgumentCount || numTypeArguments > typeParameters.length) { + error2( + node, + minTypeArgumentCount === typeParameters.length ? Diagnostics.Generic_type_0_requires_1_type_argument_s : Diagnostics.Generic_type_0_requires_between_1_and_2_type_arguments, + symbolToString(symbol), + minTypeArgumentCount, + typeParameters.length + ); + return errorType; + } + const aliasSymbol = getAliasSymbolForTypeNode(node); + let newAliasSymbol = aliasSymbol && (isLocalTypeAlias(symbol) || !isLocalTypeAlias(aliasSymbol)) ? aliasSymbol : void 0; + let aliasTypeArguments; + if (newAliasSymbol) { + aliasTypeArguments = getTypeArgumentsForAliasSymbol(newAliasSymbol); + } else if (isTypeReferenceType(node)) { + const aliasSymbol2 = resolveTypeReferenceName( + node, + 2097152 /* Alias */, + /*ignoreErrors*/ + true + ); + if (aliasSymbol2 && aliasSymbol2 !== unknownSymbol) { + const resolved = resolveAlias(aliasSymbol2); + if (resolved && resolved.flags & 524288 /* TypeAlias */) { + newAliasSymbol = resolved; + aliasTypeArguments = typeArgumentsFromTypeReferenceNode(node) || (typeParameters ? [] : void 0); + } + } + } + return getTypeAliasInstantiation(symbol, typeArgumentsFromTypeReferenceNode(node), newAliasSymbol, aliasTypeArguments); + } + return checkNoTypeArguments(node, symbol) ? type : errorType; + } + function isLocalTypeAlias(symbol) { + var _a; + const declaration = (_a = symbol.declarations) == null ? void 0 : _a.find(isTypeAlias); + return !!(declaration && getContainingFunction(declaration)); + } + function getTypeReferenceName(node) { + switch (node.kind) { + case 184 /* TypeReference */: + return node.typeName; + case 234 /* ExpressionWithTypeArguments */: + const expr = node.expression; + if (isEntityNameExpression(expr)) { + return expr; + } + } + return void 0; + } + function getSymbolPath(symbol) { + return symbol.parent ? `${getSymbolPath(symbol.parent)}.${symbol.escapedName}` : symbol.escapedName; + } + function getUnresolvedSymbolForEntityName(name) { + const identifier = name.kind === 167 /* QualifiedName */ ? name.right : name.kind === 212 /* PropertyAccessExpression */ ? name.name : name; + const text = identifier.escapedText; + if (text) { + const parentSymbol = name.kind === 167 /* QualifiedName */ ? getUnresolvedSymbolForEntityName(name.left) : name.kind === 212 /* PropertyAccessExpression */ ? getUnresolvedSymbolForEntityName(name.expression) : void 0; + const path = parentSymbol ? `${getSymbolPath(parentSymbol)}.${text}` : text; + let result = unresolvedSymbols.get(path); + if (!result) { + unresolvedSymbols.set(path, result = createSymbol(524288 /* TypeAlias */, text, 1048576 /* Unresolved */)); + result.parent = parentSymbol; + result.links.declaredType = unresolvedType; + } + return result; + } + return unknownSymbol; + } + function resolveTypeReferenceName(typeReference, meaning, ignoreErrors) { + const name = getTypeReferenceName(typeReference); + if (!name) { + return unknownSymbol; + } + const symbol = resolveEntityName(name, meaning, ignoreErrors); + return symbol && symbol !== unknownSymbol ? symbol : ignoreErrors ? unknownSymbol : getUnresolvedSymbolForEntityName(name); + } + function getTypeReferenceType(node, symbol) { + if (symbol === unknownSymbol) { + return errorType; + } + symbol = getExpandoSymbol(symbol) || symbol; + if (symbol.flags & (32 /* Class */ | 64 /* Interface */)) { + return getTypeFromClassOrInterfaceReference(node, symbol); + } + if (symbol.flags & 524288 /* TypeAlias */) { + return getTypeFromTypeAliasReference(node, symbol); + } + const res = tryGetDeclaredTypeOfSymbol(symbol); + if (res) { + return checkNoTypeArguments(node, symbol) ? getRegularTypeOfLiteralType(res) : errorType; + } + if (symbol.flags & 111551 /* Value */ && isJSDocTypeReference(node)) { + const jsdocType = getTypeFromJSDocValueReference(node, symbol); + if (jsdocType) { + return jsdocType; + } else { + resolveTypeReferenceName(node, 788968 /* Type */); + return getTypeOfSymbol(symbol); + } + } + return errorType; + } + function getTypeFromJSDocValueReference(node, symbol) { + const links = getNodeLinks(node); + if (!links.resolvedJSDocType) { + const valueType = getTypeOfSymbol(symbol); + let typeType = valueType; + if (symbol.valueDeclaration) { + const isImportTypeWithQualifier = node.kind === 206 /* ImportType */ && node.qualifier; + if (valueType.symbol && valueType.symbol !== symbol && isImportTypeWithQualifier) { + typeType = getTypeReferenceType(node, valueType.symbol); + } + } + links.resolvedJSDocType = typeType; + } + return links.resolvedJSDocType; + } + function getNoInferType(type) { + return isNoInferTargetType(type) ? getOrCreateSubstitutionType(type, unknownType) : type; + } + function isNoInferTargetType(type) { + return !!(type.flags & 3145728 /* UnionOrIntersection */ && some(type.types, isNoInferTargetType) || type.flags & 33554432 /* Substitution */ && !isNoInferType(type) && isNoInferTargetType(type.baseType) || type.flags & 524288 /* Object */ && !isEmptyAnonymousObjectType(type) || type.flags & (465829888 /* Instantiable */ & ~33554432 /* Substitution */) && !isPatternLiteralType(type)); + } + function isNoInferType(type) { + return !!(type.flags & 33554432 /* Substitution */ && type.constraint.flags & 2 /* Unknown */); + } + function getSubstitutionType(baseType, constraint) { + return constraint.flags & 3 /* AnyOrUnknown */ || constraint === baseType || baseType.flags & 1 /* Any */ ? baseType : getOrCreateSubstitutionType(baseType, constraint); + } + function getOrCreateSubstitutionType(baseType, constraint) { + const id = `${getTypeId(baseType)}>${getTypeId(constraint)}`; + const cached = substitutionTypes.get(id); + if (cached) { + return cached; + } + const result = createType(33554432 /* Substitution */); + result.baseType = baseType; + result.constraint = constraint; + substitutionTypes.set(id, result); + return result; + } + function getSubstitutionIntersection(substitutionType) { + return isNoInferType(substitutionType) ? substitutionType.baseType : getIntersectionType([substitutionType.constraint, substitutionType.baseType]); + } + function isUnaryTupleTypeNode(node) { + return node.kind === 190 /* TupleType */ && node.elements.length === 1; + } + function getImpliedConstraint(type, checkNode, extendsNode) { + return isUnaryTupleTypeNode(checkNode) && isUnaryTupleTypeNode(extendsNode) ? getImpliedConstraint(type, checkNode.elements[0], extendsNode.elements[0]) : getActualTypeVariable(getTypeFromTypeNode(checkNode)) === getActualTypeVariable(type) ? getTypeFromTypeNode(extendsNode) : void 0; + } + function getConditionalFlowTypeOfType(type, node) { + let constraints; + let covariant = true; + while (node && !isStatement(node) && node.kind !== 321 /* JSDoc */) { + const parent2 = node.parent; + if (parent2.kind === 170 /* Parameter */) { + covariant = !covariant; + } + if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent2.kind === 195 /* ConditionalType */ && node === parent2.trueType) { + const constraint = getImpliedConstraint(type, parent2.checkType, parent2.extendsType); + if (constraint) { + constraints = append(constraints, constraint); + } + } else if (type.flags & 262144 /* TypeParameter */ && parent2.kind === 201 /* MappedType */ && !parent2.nameType && node === parent2.type) { + const mappedType = getTypeFromTypeNode(parent2); + if (getTypeParameterFromMappedType(mappedType) === getActualTypeVariable(type)) { + const typeParameter = getHomomorphicTypeVariable(mappedType); + if (typeParameter) { + const constraint = getConstraintOfTypeParameter(typeParameter); + if (constraint && everyType(constraint, isArrayOrTupleType)) { + constraints = append(constraints, getUnionType([numberType, numericStringType])); + } + } + } + } + node = parent2; + } + return constraints ? getSubstitutionType(type, getIntersectionType(constraints)) : type; + } + function isJSDocTypeReference(node) { + return !!(node.flags & 16777216 /* JSDoc */) && (node.kind === 184 /* TypeReference */ || node.kind === 206 /* ImportType */); + } + function checkNoTypeArguments(node, symbol) { + if (node.typeArguments) { + error2(node, Diagnostics.Type_0_is_not_generic, symbol ? symbolToString(symbol) : node.typeName ? declarationNameToString(node.typeName) : anon); + return false; + } + return true; + } + function getIntendedTypeFromJSDocTypeReference(node) { + if (isIdentifier(node.typeName)) { + const typeArgs = node.typeArguments; + switch (node.typeName.escapedText) { + case "String": + checkNoTypeArguments(node); + return stringType; + case "Number": + checkNoTypeArguments(node); + return numberType; + case "BigInt": + checkNoTypeArguments(node); + return bigintType; + case "Boolean": + checkNoTypeArguments(node); + return booleanType; + case "Void": + checkNoTypeArguments(node); + return voidType; + case "Undefined": + checkNoTypeArguments(node); + return undefinedType; + case "Null": + checkNoTypeArguments(node); + return nullType; + case "Function": + case "function": + checkNoTypeArguments(node); + return globalFunctionType; + case "array": + return (!typeArgs || !typeArgs.length) && !noImplicitAny ? anyArrayType : void 0; + case "promise": + return (!typeArgs || !typeArgs.length) && !noImplicitAny ? createPromiseType(anyType) : void 0; + case "Object": + if (typeArgs && typeArgs.length === 2) { + if (isJSDocIndexSignature(node)) { + const indexed = getTypeFromTypeNode(typeArgs[0]); + const target = getTypeFromTypeNode(typeArgs[1]); + const indexInfo = indexed === stringType || indexed === numberType ? [createIndexInfo( + indexed, + target, + /*isReadonly*/ + false + )] : emptyArray; + return createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + indexInfo + ); + } + return anyType; + } + checkNoTypeArguments(node); + return !noImplicitAny ? anyType : void 0; + } + } + } + function getTypeFromJSDocNullableTypeNode(node) { + const type = getTypeFromTypeNode(node.type); + return strictNullChecks ? getNullableType(type, 65536 /* Null */) : type; + } + function getTypeFromTypeReference(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + if (isConstTypeReference(node) && isAssertionExpression(node.parent)) { + links.resolvedSymbol = unknownSymbol; + return links.resolvedType = checkExpressionCached(node.parent.expression); + } + let symbol; + let type; + const meaning = 788968 /* Type */; + if (isJSDocTypeReference(node)) { + type = getIntendedTypeFromJSDocTypeReference(node); + if (!type) { + symbol = resolveTypeReferenceName( + node, + meaning, + /*ignoreErrors*/ + true + ); + if (symbol === unknownSymbol) { + symbol = resolveTypeReferenceName(node, meaning | 111551 /* Value */); + } else { + resolveTypeReferenceName(node, meaning); + } + type = getTypeReferenceType(node, symbol); + } + } + if (!type) { + symbol = resolveTypeReferenceName(node, meaning); + type = getTypeReferenceType(node, symbol); + } + links.resolvedSymbol = symbol; + links.resolvedType = type; + } + return links.resolvedType; + } + function typeArgumentsFromTypeReferenceNode(node) { + return map(node.typeArguments, getTypeFromTypeNode); + } + function getTypeFromTypeQueryNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const type = checkExpressionWithTypeArguments(node); + links.resolvedType = getRegularTypeOfLiteralType(getWidenedType(type)); + } + return links.resolvedType; + } + function getTypeOfGlobalSymbol(symbol, arity) { + function getTypeDeclaration(symbol2) { + const declarations = symbol2.declarations; + if (declarations) { + for (const declaration of declarations) { + switch (declaration.kind) { + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + return declaration; + } + } + } + } + if (!symbol) { + return arity ? emptyGenericType : emptyObjectType; + } + const type = getDeclaredTypeOfSymbol(symbol); + if (!(type.flags & 524288 /* Object */)) { + error2(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbolName(symbol)); + return arity ? emptyGenericType : emptyObjectType; + } + if (length(type.typeParameters) !== arity) { + error2(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbolName(symbol), arity); + return arity ? emptyGenericType : emptyObjectType; + } + return type; + } + function getGlobalValueSymbol(name, reportErrors2) { + return getGlobalSymbol(name, 111551 /* Value */, reportErrors2 ? Diagnostics.Cannot_find_global_value_0 : void 0); + } + function getGlobalTypeSymbol(name, reportErrors2) { + return getGlobalSymbol(name, 788968 /* Type */, reportErrors2 ? Diagnostics.Cannot_find_global_type_0 : void 0); + } + function getGlobalTypeAliasSymbol(name, arity, reportErrors2) { + const symbol = getGlobalSymbol(name, 788968 /* Type */, reportErrors2 ? Diagnostics.Cannot_find_global_type_0 : void 0); + if (symbol) { + getDeclaredTypeOfSymbol(symbol); + if (length(getSymbolLinks(symbol).typeParameters) !== arity) { + const decl = symbol.declarations && find(symbol.declarations, isTypeAliasDeclaration); + error2(decl, Diagnostics.Global_type_0_must_have_1_type_parameter_s, symbolName(symbol), arity); + return void 0; + } + } + return symbol; + } + function getGlobalSymbol(name, meaning, diagnostic) { + return resolveName( + /*location*/ + void 0, + name, + meaning, + diagnostic, + /*isUse*/ + false, + /*excludeGlobals*/ + false + ); + } + function getGlobalType(name, arity, reportErrors2) { + const symbol = getGlobalTypeSymbol(name, reportErrors2); + return symbol || reportErrors2 ? getTypeOfGlobalSymbol(symbol, arity) : void 0; + } + function getGlobalBuiltinTypes(typeNames, arity) { + let types; + for (const typeName of typeNames) { + types = append(types, getGlobalType( + typeName, + arity, + /*reportErrors*/ + false + )); + } + return types ?? emptyArray; + } + function getGlobalTypedPropertyDescriptorType() { + return deferredGlobalTypedPropertyDescriptorType || (deferredGlobalTypedPropertyDescriptorType = getGlobalType( + "TypedPropertyDescriptor", + /*arity*/ + 1, + /*reportErrors*/ + true + ) || emptyGenericType); + } + function getGlobalTemplateStringsArrayType() { + return deferredGlobalTemplateStringsArrayType || (deferredGlobalTemplateStringsArrayType = getGlobalType( + "TemplateStringsArray", + /*arity*/ + 0, + /*reportErrors*/ + true + ) || emptyObjectType); + } + function getGlobalImportMetaType() { + return deferredGlobalImportMetaType || (deferredGlobalImportMetaType = getGlobalType( + "ImportMeta", + /*arity*/ + 0, + /*reportErrors*/ + true + ) || emptyObjectType); + } + function getGlobalImportMetaExpressionType() { + if (!deferredGlobalImportMetaExpressionType) { + const symbol = createSymbol(0 /* None */, "ImportMetaExpression"); + const importMetaType = getGlobalImportMetaType(); + const metaPropertySymbol = createSymbol(4 /* Property */, "meta", 8 /* Readonly */); + metaPropertySymbol.parent = symbol; + metaPropertySymbol.links.type = importMetaType; + const members = createSymbolTable([metaPropertySymbol]); + symbol.members = members; + deferredGlobalImportMetaExpressionType = createAnonymousType(symbol, members, emptyArray, emptyArray, emptyArray); + } + return deferredGlobalImportMetaExpressionType; + } + function getGlobalImportCallOptionsType(reportErrors2) { + return deferredGlobalImportCallOptionsType || (deferredGlobalImportCallOptionsType = getGlobalType( + "ImportCallOptions", + /*arity*/ + 0, + reportErrors2 + )) || emptyObjectType; + } + function getGlobalImportAttributesType(reportErrors2) { + return deferredGlobalImportAttributesType || (deferredGlobalImportAttributesType = getGlobalType( + "ImportAttributes", + /*arity*/ + 0, + reportErrors2 + )) || emptyObjectType; + } + function getGlobalESSymbolConstructorSymbol(reportErrors2) { + return deferredGlobalESSymbolConstructorSymbol || (deferredGlobalESSymbolConstructorSymbol = getGlobalValueSymbol("Symbol", reportErrors2)); + } + function getGlobalESSymbolConstructorTypeSymbol(reportErrors2) { + return deferredGlobalESSymbolConstructorTypeSymbol || (deferredGlobalESSymbolConstructorTypeSymbol = getGlobalTypeSymbol("SymbolConstructor", reportErrors2)); + } + function getGlobalESSymbolType() { + return deferredGlobalESSymbolType || (deferredGlobalESSymbolType = getGlobalType( + "Symbol", + /*arity*/ + 0, + /*reportErrors*/ + false + )) || emptyObjectType; + } + function getGlobalPromiseType(reportErrors2) { + return deferredGlobalPromiseType || (deferredGlobalPromiseType = getGlobalType( + "Promise", + /*arity*/ + 1, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalPromiseLikeType(reportErrors2) { + return deferredGlobalPromiseLikeType || (deferredGlobalPromiseLikeType = getGlobalType( + "PromiseLike", + /*arity*/ + 1, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalPromiseConstructorSymbol(reportErrors2) { + return deferredGlobalPromiseConstructorSymbol || (deferredGlobalPromiseConstructorSymbol = getGlobalValueSymbol("Promise", reportErrors2)); + } + function getGlobalPromiseConstructorLikeType(reportErrors2) { + return deferredGlobalPromiseConstructorLikeType || (deferredGlobalPromiseConstructorLikeType = getGlobalType( + "PromiseConstructorLike", + /*arity*/ + 0, + reportErrors2 + )) || emptyObjectType; + } + function getGlobalAsyncIterableType(reportErrors2) { + return deferredGlobalAsyncIterableType || (deferredGlobalAsyncIterableType = getGlobalType( + "AsyncIterable", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalAsyncIteratorType(reportErrors2) { + return deferredGlobalAsyncIteratorType || (deferredGlobalAsyncIteratorType = getGlobalType( + "AsyncIterator", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalAsyncIterableIteratorType(reportErrors2) { + return deferredGlobalAsyncIterableIteratorType || (deferredGlobalAsyncIterableIteratorType = getGlobalType( + "AsyncIterableIterator", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalBuiltinAsyncIteratorTypes() { + return deferredGlobalBuiltinAsyncIteratorTypes ?? (deferredGlobalBuiltinAsyncIteratorTypes = getGlobalBuiltinTypes(["ReadableStreamAsyncIterator"], 1)); + } + function getGlobalAsyncIteratorObjectType(reportErrors2) { + return deferredGlobalAsyncIteratorObjectType || (deferredGlobalAsyncIteratorObjectType = getGlobalType( + "AsyncIteratorObject", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalAsyncGeneratorType(reportErrors2) { + return deferredGlobalAsyncGeneratorType || (deferredGlobalAsyncGeneratorType = getGlobalType( + "AsyncGenerator", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalIterableType(reportErrors2) { + return deferredGlobalIterableType || (deferredGlobalIterableType = getGlobalType( + "Iterable", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalIteratorType(reportErrors2) { + return deferredGlobalIteratorType || (deferredGlobalIteratorType = getGlobalType( + "Iterator", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalIterableIteratorType(reportErrors2) { + return deferredGlobalIterableIteratorType || (deferredGlobalIterableIteratorType = getGlobalType( + "IterableIterator", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getBuiltinIteratorReturnType() { + return strictBuiltinIteratorReturn ? undefinedType : anyType; + } + function getGlobalBuiltinIteratorTypes() { + return deferredGlobalBuiltinIteratorTypes ?? (deferredGlobalBuiltinIteratorTypes = getGlobalBuiltinTypes(["ArrayIterator", "MapIterator", "SetIterator", "StringIterator"], 1)); + } + function getGlobalIteratorObjectType(reportErrors2) { + return deferredGlobalIteratorObjectType || (deferredGlobalIteratorObjectType = getGlobalType( + "IteratorObject", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalGeneratorType(reportErrors2) { + return deferredGlobalGeneratorType || (deferredGlobalGeneratorType = getGlobalType( + "Generator", + /*arity*/ + 3, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalIteratorYieldResultType(reportErrors2) { + return deferredGlobalIteratorYieldResultType || (deferredGlobalIteratorYieldResultType = getGlobalType( + "IteratorYieldResult", + /*arity*/ + 1, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalIteratorReturnResultType(reportErrors2) { + return deferredGlobalIteratorReturnResultType || (deferredGlobalIteratorReturnResultType = getGlobalType( + "IteratorReturnResult", + /*arity*/ + 1, + reportErrors2 + )) || emptyGenericType; + } + function getGlobalDisposableType(reportErrors2) { + return deferredGlobalDisposableType || (deferredGlobalDisposableType = getGlobalType( + "Disposable", + /*arity*/ + 0, + reportErrors2 + )) || emptyObjectType; + } + function getGlobalAsyncDisposableType(reportErrors2) { + return deferredGlobalAsyncDisposableType || (deferredGlobalAsyncDisposableType = getGlobalType( + "AsyncDisposable", + /*arity*/ + 0, + reportErrors2 + )) || emptyObjectType; + } + function getGlobalTypeOrUndefined(name, arity = 0) { + const symbol = getGlobalSymbol( + name, + 788968 /* Type */, + /*diagnostic*/ + void 0 + ); + return symbol && getTypeOfGlobalSymbol(symbol, arity); + } + function getGlobalExtractSymbol() { + deferredGlobalExtractSymbol || (deferredGlobalExtractSymbol = getGlobalTypeAliasSymbol( + "Extract", + /*arity*/ + 2, + /*reportErrors*/ + true + ) || unknownSymbol); + return deferredGlobalExtractSymbol === unknownSymbol ? void 0 : deferredGlobalExtractSymbol; + } + function getGlobalOmitSymbol() { + deferredGlobalOmitSymbol || (deferredGlobalOmitSymbol = getGlobalTypeAliasSymbol( + "Omit", + /*arity*/ + 2, + /*reportErrors*/ + true + ) || unknownSymbol); + return deferredGlobalOmitSymbol === unknownSymbol ? void 0 : deferredGlobalOmitSymbol; + } + function getGlobalAwaitedSymbol(reportErrors2) { + deferredGlobalAwaitedSymbol || (deferredGlobalAwaitedSymbol = getGlobalTypeAliasSymbol( + "Awaited", + /*arity*/ + 1, + reportErrors2 + ) || (reportErrors2 ? unknownSymbol : void 0)); + return deferredGlobalAwaitedSymbol === unknownSymbol ? void 0 : deferredGlobalAwaitedSymbol; + } + function getGlobalBigIntType() { + return deferredGlobalBigIntType || (deferredGlobalBigIntType = getGlobalType( + "BigInt", + /*arity*/ + 0, + /*reportErrors*/ + false + )) || emptyObjectType; + } + function getGlobalClassDecoratorContextType(reportErrors2) { + return deferredGlobalClassDecoratorContextType ?? (deferredGlobalClassDecoratorContextType = getGlobalType( + "ClassDecoratorContext", + /*arity*/ + 1, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassMethodDecoratorContextType(reportErrors2) { + return deferredGlobalClassMethodDecoratorContextType ?? (deferredGlobalClassMethodDecoratorContextType = getGlobalType( + "ClassMethodDecoratorContext", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassGetterDecoratorContextType(reportErrors2) { + return deferredGlobalClassGetterDecoratorContextType ?? (deferredGlobalClassGetterDecoratorContextType = getGlobalType( + "ClassGetterDecoratorContext", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassSetterDecoratorContextType(reportErrors2) { + return deferredGlobalClassSetterDecoratorContextType ?? (deferredGlobalClassSetterDecoratorContextType = getGlobalType( + "ClassSetterDecoratorContext", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassAccessorDecoratorContextType(reportErrors2) { + return deferredGlobalClassAccessorDecoratorContextType ?? (deferredGlobalClassAccessorDecoratorContextType = getGlobalType( + "ClassAccessorDecoratorContext", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassAccessorDecoratorTargetType(reportErrors2) { + return deferredGlobalClassAccessorDecoratorTargetType ?? (deferredGlobalClassAccessorDecoratorTargetType = getGlobalType( + "ClassAccessorDecoratorTarget", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassAccessorDecoratorResultType(reportErrors2) { + return deferredGlobalClassAccessorDecoratorResultType ?? (deferredGlobalClassAccessorDecoratorResultType = getGlobalType( + "ClassAccessorDecoratorResult", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalClassFieldDecoratorContextType(reportErrors2) { + return deferredGlobalClassFieldDecoratorContextType ?? (deferredGlobalClassFieldDecoratorContextType = getGlobalType( + "ClassFieldDecoratorContext", + /*arity*/ + 2, + reportErrors2 + )) ?? emptyGenericType; + } + function getGlobalNaNSymbol() { + return deferredGlobalNaNSymbol || (deferredGlobalNaNSymbol = getGlobalValueSymbol( + "NaN", + /*reportErrors*/ + false + )); + } + function getGlobalRecordSymbol() { + deferredGlobalRecordSymbol || (deferredGlobalRecordSymbol = getGlobalTypeAliasSymbol( + "Record", + /*arity*/ + 2, + /*reportErrors*/ + true + ) || unknownSymbol); + return deferredGlobalRecordSymbol === unknownSymbol ? void 0 : deferredGlobalRecordSymbol; + } + function createTypeFromGenericGlobalType(genericGlobalType, typeArguments) { + return genericGlobalType !== emptyGenericType ? createTypeReference(genericGlobalType, typeArguments) : emptyObjectType; + } + function createTypedPropertyDescriptorType(propertyType) { + return createTypeFromGenericGlobalType(getGlobalTypedPropertyDescriptorType(), [propertyType]); + } + function createIterableType(iteratedType) { + return createTypeFromGenericGlobalType(getGlobalIterableType( + /*reportErrors*/ + true + ), [iteratedType, voidType, undefinedType]); + } + function createArrayType(elementType, readonly) { + return createTypeFromGenericGlobalType(readonly ? globalReadonlyArrayType : globalArrayType, [elementType]); + } + function getTupleElementFlags(node) { + switch (node.kind) { + case 191 /* OptionalType */: + return 2 /* Optional */; + case 192 /* RestType */: + return getRestTypeElementFlags(node); + case 203 /* NamedTupleMember */: + return node.questionToken ? 2 /* Optional */ : node.dotDotDotToken ? getRestTypeElementFlags(node) : 1 /* Required */; + default: + return 1 /* Required */; + } + } + function getRestTypeElementFlags(node) { + return getArrayElementTypeNode(node.type) ? 4 /* Rest */ : 8 /* Variadic */; + } + function getArrayOrTupleTargetType(node) { + const readonly = isReadonlyTypeOperator(node.parent); + const elementType = getArrayElementTypeNode(node); + if (elementType) { + return readonly ? globalReadonlyArrayType : globalArrayType; + } + const elementFlags = map(node.elements, getTupleElementFlags); + return getTupleTargetType(elementFlags, readonly, map(node.elements, memberIfLabeledElementDeclaration)); + } + function memberIfLabeledElementDeclaration(member) { + return isNamedTupleMember(member) || isParameter(member) ? member : void 0; + } + function isDeferredTypeReferenceNode(node, hasDefaultTypeArguments) { + return !!getAliasSymbolForTypeNode(node) || isResolvedByTypeAlias(node) && (node.kind === 189 /* ArrayType */ ? mayResolveTypeAlias(node.elementType) : node.kind === 190 /* TupleType */ ? some(node.elements, mayResolveTypeAlias) : hasDefaultTypeArguments || some(node.typeArguments, mayResolveTypeAlias)); + } + function isResolvedByTypeAlias(node) { + const parent2 = node.parent; + switch (parent2.kind) { + case 197 /* ParenthesizedType */: + case 203 /* NamedTupleMember */: + case 184 /* TypeReference */: + case 193 /* UnionType */: + case 194 /* IntersectionType */: + case 200 /* IndexedAccessType */: + case 195 /* ConditionalType */: + case 199 /* TypeOperator */: + case 189 /* ArrayType */: + case 190 /* TupleType */: + return isResolvedByTypeAlias(parent2); + case 266 /* TypeAliasDeclaration */: + return true; + } + return false; + } + function mayResolveTypeAlias(node) { + switch (node.kind) { + case 184 /* TypeReference */: + return isJSDocTypeReference(node) || !!(resolveTypeReferenceName(node, 788968 /* Type */).flags & 524288 /* TypeAlias */); + case 187 /* TypeQuery */: + return true; + case 199 /* TypeOperator */: + return node.operator !== 158 /* UniqueKeyword */ && mayResolveTypeAlias(node.type); + case 197 /* ParenthesizedType */: + case 191 /* OptionalType */: + case 203 /* NamedTupleMember */: + case 317 /* JSDocOptionalType */: + case 315 /* JSDocNullableType */: + case 316 /* JSDocNonNullableType */: + case 310 /* JSDocTypeExpression */: + return mayResolveTypeAlias(node.type); + case 192 /* RestType */: + return node.type.kind !== 189 /* ArrayType */ || mayResolveTypeAlias(node.type.elementType); + case 193 /* UnionType */: + case 194 /* IntersectionType */: + return some(node.types, mayResolveTypeAlias); + case 200 /* IndexedAccessType */: + return mayResolveTypeAlias(node.objectType) || mayResolveTypeAlias(node.indexType); + case 195 /* ConditionalType */: + return mayResolveTypeAlias(node.checkType) || mayResolveTypeAlias(node.extendsType) || mayResolveTypeAlias(node.trueType) || mayResolveTypeAlias(node.falseType); + } + return false; + } + function getTypeFromArrayOrTupleTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const target = getArrayOrTupleTargetType(node); + if (target === emptyGenericType) { + links.resolvedType = emptyObjectType; + } else if (!(node.kind === 190 /* TupleType */ && some(node.elements, (e) => !!(getTupleElementFlags(e) & 8 /* Variadic */))) && isDeferredTypeReferenceNode(node)) { + links.resolvedType = node.kind === 190 /* TupleType */ && node.elements.length === 0 ? target : createDeferredTypeReference( + target, + node, + /*mapper*/ + void 0 + ); + } else { + const elementTypes = node.kind === 189 /* ArrayType */ ? [getTypeFromTypeNode(node.elementType)] : map(node.elements, getTypeFromTypeNode); + links.resolvedType = createNormalizedTypeReference(target, elementTypes); + } + } + return links.resolvedType; + } + function isReadonlyTypeOperator(node) { + return isTypeOperatorNode(node) && node.operator === 148 /* ReadonlyKeyword */; + } + function createTupleType(elementTypes, elementFlags, readonly = false, namedMemberDeclarations = []) { + const tupleTarget = getTupleTargetType(elementFlags || map(elementTypes, (_) => 1 /* Required */), readonly, namedMemberDeclarations); + return tupleTarget === emptyGenericType ? emptyObjectType : elementTypes.length ? createNormalizedTypeReference(tupleTarget, elementTypes) : tupleTarget; + } + function getTupleTargetType(elementFlags, readonly, namedMemberDeclarations) { + if (elementFlags.length === 1 && elementFlags[0] & 4 /* Rest */) { + return readonly ? globalReadonlyArrayType : globalArrayType; + } + const key = map(elementFlags, (f) => f & 1 /* Required */ ? "#" : f & 2 /* Optional */ ? "?" : f & 4 /* Rest */ ? "." : "*").join() + (readonly ? "R" : "") + (some(namedMemberDeclarations, (node) => !!node) ? "," + map(namedMemberDeclarations, (node) => node ? getNodeId(node) : "_").join(",") : ""); + let type = tupleTypes.get(key); + if (!type) { + tupleTypes.set(key, type = createTupleTargetType(elementFlags, readonly, namedMemberDeclarations)); + } + return type; + } + function createTupleTargetType(elementFlags, readonly, namedMemberDeclarations) { + const arity = elementFlags.length; + const minLength = countWhere(elementFlags, (f) => !!(f & (1 /* Required */ | 8 /* Variadic */))); + let typeParameters; + const properties = []; + let combinedFlags = 0; + if (arity) { + typeParameters = new Array(arity); + for (let i = 0; i < arity; i++) { + const typeParameter = typeParameters[i] = createTypeParameter(); + const flags = elementFlags[i]; + combinedFlags |= flags; + if (!(combinedFlags & 12 /* Variable */)) { + const property = createSymbol(4 /* Property */ | (flags & 2 /* Optional */ ? 16777216 /* Optional */ : 0), "" + i, readonly ? 8 /* Readonly */ : 0); + property.links.tupleLabelDeclaration = namedMemberDeclarations == null ? void 0 : namedMemberDeclarations[i]; + property.links.type = typeParameter; + properties.push(property); + } + } + } + const fixedLength = properties.length; + const lengthSymbol = createSymbol(4 /* Property */, "length", readonly ? 8 /* Readonly */ : 0); + if (combinedFlags & 12 /* Variable */) { + lengthSymbol.links.type = numberType; + } else { + const literalTypes = []; + for (let i = minLength; i <= arity; i++) literalTypes.push(getNumberLiteralType(i)); + lengthSymbol.links.type = getUnionType(literalTypes); + } + properties.push(lengthSymbol); + const type = createObjectType(8 /* Tuple */ | 4 /* Reference */); + type.typeParameters = typeParameters; + type.outerTypeParameters = void 0; + type.localTypeParameters = typeParameters; + type.instantiations = /* @__PURE__ */ new Map(); + type.instantiations.set(getTypeListId(type.typeParameters), type); + type.target = type; + type.resolvedTypeArguments = type.typeParameters; + type.thisType = createTypeParameter(); + type.thisType.isThisType = true; + type.thisType.constraint = type; + type.declaredProperties = properties; + type.declaredCallSignatures = emptyArray; + type.declaredConstructSignatures = emptyArray; + type.declaredIndexInfos = emptyArray; + type.elementFlags = elementFlags; + type.minLength = minLength; + type.fixedLength = fixedLength; + type.hasRestElement = !!(combinedFlags & 12 /* Variable */); + type.combinedFlags = combinedFlags; + type.readonly = readonly; + type.labeledElementDeclarations = namedMemberDeclarations; + return type; + } + function createNormalizedTypeReference(target, typeArguments) { + return target.objectFlags & 8 /* Tuple */ ? createNormalizedTupleType(target, typeArguments) : createTypeReference(target, typeArguments); + } + function createNormalizedTupleType(target, elementTypes) { + var _a, _b, _c, _d; + if (!(target.combinedFlags & 14 /* NonRequired */)) { + return createTypeReference(target, elementTypes); + } + if (target.combinedFlags & 8 /* Variadic */) { + const unionIndex = findIndex(elementTypes, (t, i) => !!(target.elementFlags[i] & 8 /* Variadic */ && t.flags & (131072 /* Never */ | 1048576 /* Union */))); + if (unionIndex >= 0) { + return checkCrossProductUnion(map(elementTypes, (t, i) => target.elementFlags[i] & 8 /* Variadic */ ? t : unknownType)) ? mapType(elementTypes[unionIndex], (t) => createNormalizedTupleType(target, replaceElement(elementTypes, unionIndex, t))) : errorType; + } + } + const expandedTypes = []; + const expandedFlags = []; + const expandedDeclarations = []; + let lastRequiredIndex = -1; + let firstRestIndex = -1; + let lastOptionalOrRestIndex = -1; + for (let i = 0; i < elementTypes.length; i++) { + const type = elementTypes[i]; + const flags = target.elementFlags[i]; + if (flags & 8 /* Variadic */) { + if (type.flags & 1 /* Any */) { + addElement(type, 4 /* Rest */, (_a = target.labeledElementDeclarations) == null ? void 0 : _a[i]); + } else if (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type)) { + addElement(type, 8 /* Variadic */, (_b = target.labeledElementDeclarations) == null ? void 0 : _b[i]); + } else if (isTupleType(type)) { + const elements = getElementTypes(type); + if (elements.length + expandedTypes.length >= 1e4) { + error2( + currentNode, + isPartOfTypeNode(currentNode) ? Diagnostics.Type_produces_a_tuple_type_that_is_too_large_to_represent : Diagnostics.Expression_produces_a_tuple_type_that_is_too_large_to_represent + ); + return errorType; + } + forEach(elements, (t, n) => { + var _a2; + return addElement(t, type.target.elementFlags[n], (_a2 = type.target.labeledElementDeclarations) == null ? void 0 : _a2[n]); + }); + } else { + addElement(isArrayLikeType(type) && getIndexTypeOfType(type, numberType) || errorType, 4 /* Rest */, (_c = target.labeledElementDeclarations) == null ? void 0 : _c[i]); + } + } else { + addElement(type, flags, (_d = target.labeledElementDeclarations) == null ? void 0 : _d[i]); + } + } + for (let i = 0; i < lastRequiredIndex; i++) { + if (expandedFlags[i] & 2 /* Optional */) expandedFlags[i] = 1 /* Required */; + } + if (firstRestIndex >= 0 && firstRestIndex < lastOptionalOrRestIndex) { + expandedTypes[firstRestIndex] = getUnionType(sameMap(expandedTypes.slice(firstRestIndex, lastOptionalOrRestIndex + 1), (t, i) => expandedFlags[firstRestIndex + i] & 8 /* Variadic */ ? getIndexedAccessType(t, numberType) : t)); + expandedTypes.splice(firstRestIndex + 1, lastOptionalOrRestIndex - firstRestIndex); + expandedFlags.splice(firstRestIndex + 1, lastOptionalOrRestIndex - firstRestIndex); + expandedDeclarations.splice(firstRestIndex + 1, lastOptionalOrRestIndex - firstRestIndex); + } + const tupleTarget = getTupleTargetType(expandedFlags, target.readonly, expandedDeclarations); + return tupleTarget === emptyGenericType ? emptyObjectType : expandedFlags.length ? createTypeReference(tupleTarget, expandedTypes) : tupleTarget; + function addElement(type, flags, declaration) { + if (flags & 1 /* Required */) { + lastRequiredIndex = expandedFlags.length; + } + if (flags & 4 /* Rest */ && firstRestIndex < 0) { + firstRestIndex = expandedFlags.length; + } + if (flags & (2 /* Optional */ | 4 /* Rest */)) { + lastOptionalOrRestIndex = expandedFlags.length; + } + expandedTypes.push(flags & 2 /* Optional */ ? addOptionality( + type, + /*isProperty*/ + true + ) : type); + expandedFlags.push(flags); + expandedDeclarations.push(declaration); + } + } + function sliceTupleType(type, index, endSkipCount = 0) { + const target = type.target; + const endIndex = getTypeReferenceArity(type) - endSkipCount; + return index > target.fixedLength ? getRestArrayTypeOfTupleType(type) || createTupleType(emptyArray) : createTupleType( + getTypeArguments(type).slice(index, endIndex), + target.elementFlags.slice(index, endIndex), + /*readonly*/ + false, + target.labeledElementDeclarations && target.labeledElementDeclarations.slice(index, endIndex) + ); + } + function getKnownKeysOfTupleType(type) { + return getUnionType(append(arrayOf(type.target.fixedLength, (i) => getStringLiteralType("" + i)), getIndexType(type.target.readonly ? globalReadonlyArrayType : globalArrayType))); + } + function getStartElementCount(type, flags) { + const index = findIndex(type.elementFlags, (f) => !(f & flags)); + return index >= 0 ? index : type.elementFlags.length; + } + function getEndElementCount(type, flags) { + return type.elementFlags.length - findLastIndex(type.elementFlags, (f) => !(f & flags)) - 1; + } + function getTotalFixedElementCount(type) { + return type.fixedLength + getEndElementCount(type, 3 /* Fixed */); + } + function getElementTypes(type) { + const typeArguments = getTypeArguments(type); + const arity = getTypeReferenceArity(type); + return typeArguments.length === arity ? typeArguments : typeArguments.slice(0, arity); + } + function getTypeFromOptionalTypeNode(node) { + return addOptionality( + getTypeFromTypeNode(node.type), + /*isProperty*/ + true + ); + } + function getTypeId(type) { + return type.id; + } + function containsType(types, type) { + return binarySearch(types, type, getTypeId, compareValues) >= 0; + } + function insertType(types, type) { + const index = binarySearch(types, type, getTypeId, compareValues); + if (index < 0) { + types.splice(~index, 0, type); + return true; + } + return false; + } + function addTypeToUnion(typeSet, includes, type) { + const flags = type.flags; + if (!(flags & 131072 /* Never */)) { + includes |= flags & 473694207 /* IncludesMask */; + if (flags & 465829888 /* Instantiable */) includes |= 33554432 /* IncludesInstantiable */; + if (flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) includes |= 536870912 /* IncludesConstrainedTypeVariable */; + if (type === wildcardType) includes |= 8388608 /* IncludesWildcard */; + if (isErrorType(type)) includes |= 1073741824 /* IncludesError */; + if (!strictNullChecks && flags & 98304 /* Nullable */) { + if (!(getObjectFlags(type) & 65536 /* ContainsWideningType */)) includes |= 4194304 /* IncludesNonWideningType */; + } else { + const len = typeSet.length; + const index = len && type.id > typeSet[len - 1].id ? ~len : binarySearch(typeSet, type, getTypeId, compareValues); + if (index < 0) { + typeSet.splice(~index, 0, type); + } + } + } + return includes; + } + function addTypesToUnion(typeSet, includes, types) { + let lastType; + for (const type of types) { + if (type !== lastType) { + includes = type.flags & 1048576 /* Union */ ? addTypesToUnion(typeSet, includes | (isNamedUnionType(type) ? 1048576 /* Union */ : 0), type.types) : addTypeToUnion(typeSet, includes, type); + lastType = type; + } + } + return includes; + } + function removeSubtypes(types, hasObjectTypes) { + var _a; + if (types.length < 2) { + return types; + } + const id = getTypeListId(types); + const match = subtypeReductionCache.get(id); + if (match) { + return match; + } + const hasEmptyObject = hasObjectTypes && some(types, (t) => !!(t.flags & 524288 /* Object */) && !isGenericMappedType(t) && isEmptyResolvedType(resolveStructuredTypeMembers(t))); + const len = types.length; + let i = len; + let count = 0; + while (i > 0) { + i--; + const source = types[i]; + if (hasEmptyObject || source.flags & 469499904 /* StructuredOrInstantiable */) { + if (source.flags & 262144 /* TypeParameter */ && getBaseConstraintOrType(source).flags & 1048576 /* Union */) { + if (isTypeRelatedTo(source, getUnionType(map(types, (t) => t === source ? neverType : t)), strictSubtypeRelation)) { + orderedRemoveItemAt(types, i); + } + continue; + } + const keyProperty = source.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */) ? find(getPropertiesOfType(source), (p) => isUnitType(getTypeOfSymbol(p))) : void 0; + const keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty)); + for (const target of types) { + if (source !== target) { + if (count === 1e5) { + const estimatedCount = count / (len - i) * len; + if (estimatedCount > 1e6) { + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.CheckTypes, "removeSubtypes_DepthLimit", { typeIds: types.map((t) => t.id) }); + error2(currentNode, Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent); + return void 0; + } + } + count++; + if (keyProperty && target.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) { + const t = getTypeOfPropertyOfType(target, keyProperty.escapedName); + if (t && isUnitType(t) && getRegularTypeOfLiteralType(t) !== keyPropertyType) { + continue; + } + } + if (isTypeRelatedTo(source, target, strictSubtypeRelation) && (!(getObjectFlags(getTargetType(source)) & 1 /* Class */) || !(getObjectFlags(getTargetType(target)) & 1 /* Class */) || isTypeDerivedFrom(source, target))) { + orderedRemoveItemAt(types, i); + break; + } + } + } + } + } + subtypeReductionCache.set(id, types); + return types; + } + function removeRedundantLiteralTypes(types, includes, reduceVoidUndefined) { + let i = types.length; + while (i > 0) { + i--; + const t = types[i]; + const flags = t.flags; + const remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ || flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ || flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ || flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ || reduceVoidUndefined && flags & 32768 /* Undefined */ && includes & 16384 /* Void */ || isFreshLiteralType(t) && containsType(types, t.regularType); + if (remove) { + orderedRemoveItemAt(types, i); + } + } + } + function removeStringLiteralsMatchedByTemplateLiterals(types) { + const templates = filter(types, isPatternLiteralType); + if (templates.length) { + let i = types.length; + while (i > 0) { + i--; + const t = types[i]; + if (t.flags & 128 /* StringLiteral */ && some(templates, (template) => isTypeMatchedByTemplateLiteralOrStringMapping(t, template))) { + orderedRemoveItemAt(types, i); + } + } + } + } + function isTypeMatchedByTemplateLiteralOrStringMapping(type, template) { + return template.flags & 134217728 /* TemplateLiteral */ ? isTypeMatchedByTemplateLiteralType(type, template) : isMemberOfStringMapping(type, template); + } + function removeConstrainedTypeVariables(types) { + const typeVariables = []; + for (const type of types) { + if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { + const index = type.types[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + pushIfUnique(typeVariables, type.types[index]); + } + } + for (const typeVariable of typeVariables) { + const primitives = []; + for (const type of types) { + if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { + const index = type.types[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + if (type.types[index] === typeVariable) { + insertType(primitives, type.types[1 - index]); + } + } + } + const constraint = getBaseConstraintOfType(typeVariable); + if (everyType(constraint, (t) => containsType(primitives, t))) { + let i = types.length; + while (i > 0) { + i--; + const type = types[i]; + if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { + const index = type.types[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + if (type.types[index] === typeVariable && containsType(primitives, type.types[1 - index])) { + orderedRemoveItemAt(types, i); + } + } + } + insertType(types, typeVariable); + } + } + } + function isNamedUnionType(type) { + return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin)); + } + function addNamedUnions(namedUnions, types) { + for (const t of types) { + if (t.flags & 1048576 /* Union */) { + const origin = t.origin; + if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) { + pushIfUnique(namedUnions, t); + } else if (origin && origin.flags & 1048576 /* Union */) { + addNamedUnions(namedUnions, origin.types); + } + } + } + } + function createOriginUnionOrIntersectionType(flags, types) { + const result = createOriginType(flags); + result.types = types; + return result; + } + function getUnionType(types, unionReduction = 1 /* Literal */, aliasSymbol, aliasTypeArguments, origin) { + if (types.length === 0) { + return neverType; + } + if (types.length === 1) { + return types[0]; + } + if (types.length === 2 && !origin && (types[0].flags & 1048576 /* Union */ || types[1].flags & 1048576 /* Union */)) { + const infix = unionReduction === 0 /* None */ ? "N" : unionReduction === 2 /* Subtype */ ? "S" : "L"; + const index = types[0].id < types[1].id ? 0 : 1; + const id = types[index].id + infix + types[1 - index].id + getAliasId(aliasSymbol, aliasTypeArguments); + let type = unionOfUnionTypes.get(id); + if (!type) { + type = getUnionTypeWorker( + types, + unionReduction, + aliasSymbol, + aliasTypeArguments, + /*origin*/ + void 0 + ); + unionOfUnionTypes.set(id, type); + } + return type; + } + return getUnionTypeWorker(types, unionReduction, aliasSymbol, aliasTypeArguments, origin); + } + function getUnionTypeWorker(types, unionReduction, aliasSymbol, aliasTypeArguments, origin) { + let typeSet = []; + const includes = addTypesToUnion(typeSet, 0, types); + if (unionReduction !== 0 /* None */) { + if (includes & 3 /* AnyOrUnknown */) { + return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : includes & 1073741824 /* IncludesError */ ? errorType : anyType : unknownType; + } + if (includes & 32768 /* Undefined */) { + if (typeSet.length >= 2 && typeSet[0] === undefinedType && typeSet[1] === missingType) { + orderedRemoveItemAt(typeSet, 1); + } + } + if (includes & (32 /* Enum */ | 2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) { + removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */)); + } + if (includes & 128 /* StringLiteral */ && includes & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) { + removeStringLiteralsMatchedByTemplateLiterals(typeSet); + } + if (includes & 536870912 /* IncludesConstrainedTypeVariable */) { + removeConstrainedTypeVariables(typeSet); + } + if (unionReduction === 2 /* Subtype */) { + typeSet = removeSubtypes(typeSet, !!(includes & 524288 /* Object */)); + if (!typeSet) { + return errorType; + } + } + if (typeSet.length === 0) { + return includes & 65536 /* Null */ ? includes & 4194304 /* IncludesNonWideningType */ ? nullType : nullWideningType : includes & 32768 /* Undefined */ ? includes & 4194304 /* IncludesNonWideningType */ ? undefinedType : undefinedWideningType : neverType; + } + } + if (!origin && includes & 1048576 /* Union */) { + const namedUnions = []; + addNamedUnions(namedUnions, types); + const reducedTypes = []; + for (const t of typeSet) { + if (!some(namedUnions, (union) => containsType(union.types, t))) { + reducedTypes.push(t); + } + } + if (!aliasSymbol && namedUnions.length === 1 && reducedTypes.length === 0) { + return namedUnions[0]; + } + const namedTypesCount = reduceLeft(namedUnions, (sum, union) => sum + union.types.length, 0); + if (namedTypesCount + reducedTypes.length === typeSet.length) { + for (const t of namedUnions) { + insertType(reducedTypes, t); + } + origin = createOriginUnionOrIntersectionType(1048576 /* Union */, reducedTypes); + } + } + const objectFlags = (includes & 36323331 /* NotPrimitiveUnion */ ? 0 : 32768 /* PrimitiveUnion */) | (includes & 2097152 /* Intersection */ ? 16777216 /* ContainsIntersections */ : 0); + return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin); + } + function getUnionOrIntersectionTypePredicate(signatures, kind) { + let last2; + const types = []; + for (const sig of signatures) { + const pred = getTypePredicateOfSignature(sig); + if (pred) { + if (pred.kind !== 0 /* This */ && pred.kind !== 1 /* Identifier */ || last2 && !typePredicateKindsMatch(last2, pred)) { + return void 0; + } + last2 = pred; + types.push(pred.type); + } else { + const returnType = kind !== 2097152 /* Intersection */ ? getReturnTypeOfSignature(sig) : void 0; + if (returnType !== falseType && returnType !== regularFalseType) { + return void 0; + } + } + } + if (!last2) { + return void 0; + } + const compositeType = getUnionOrIntersectionType(types, kind); + return createTypePredicate(last2.kind, last2.parameterName, last2.parameterIndex, compositeType); + } + function typePredicateKindsMatch(a, b) { + return a.kind === b.kind && a.parameterIndex === b.parameterIndex; + } + function getUnionTypeFromSortedList(types, precomputedObjectFlags, aliasSymbol, aliasTypeArguments, origin) { + if (types.length === 0) { + return neverType; + } + if (types.length === 1) { + return types[0]; + } + const typeKey = !origin ? getTypeListId(types) : origin.flags & 1048576 /* Union */ ? `|${getTypeListId(origin.types)}` : origin.flags & 2097152 /* Intersection */ ? `&${getTypeListId(origin.types)}` : `#${origin.type.id}|${getTypeListId(types)}`; + const id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments); + let type = unionTypes.get(id); + if (!type) { + type = createType(1048576 /* Union */); + type.objectFlags = precomputedObjectFlags | getPropagatingFlagsOfTypes( + types, + /*excludeKinds*/ + 98304 /* Nullable */ + ); + type.types = types; + type.origin = origin; + type.aliasSymbol = aliasSymbol; + type.aliasTypeArguments = aliasTypeArguments; + if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) { + type.flags |= 16 /* Boolean */; + type.intrinsicName = "boolean"; + } + unionTypes.set(id, type); + } + return type; + } + function getTypeFromUnionTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const aliasSymbol = getAliasSymbolForTypeNode(node); + links.resolvedType = getUnionType(map(node.types, getTypeFromTypeNode), 1 /* Literal */, aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); + } + return links.resolvedType; + } + function addTypeToIntersection(typeSet, includes, type) { + const flags = type.flags; + if (flags & 2097152 /* Intersection */) { + return addTypesToIntersection(typeSet, includes, type.types); + } + if (isEmptyAnonymousObjectType(type)) { + if (!(includes & 16777216 /* IncludesEmptyObject */)) { + includes |= 16777216 /* IncludesEmptyObject */; + typeSet.set(type.id.toString(), type); + } + } else { + if (flags & 3 /* AnyOrUnknown */) { + if (type === wildcardType) includes |= 8388608 /* IncludesWildcard */; + if (isErrorType(type)) includes |= 1073741824 /* IncludesError */; + } else if (strictNullChecks || !(flags & 98304 /* Nullable */)) { + if (type === missingType) { + includes |= 262144 /* IncludesMissingType */; + type = undefinedType; + } + if (!typeSet.has(type.id.toString())) { + if (type.flags & 109472 /* Unit */ && includes & 109472 /* Unit */) { + includes |= 67108864 /* NonPrimitive */; + } + typeSet.set(type.id.toString(), type); + } + } + includes |= flags & 473694207 /* IncludesMask */; + } + return includes; + } + function addTypesToIntersection(typeSet, includes, types) { + for (const type of types) { + includes = addTypeToIntersection(typeSet, includes, getRegularTypeOfLiteralType(type)); + } + return includes; + } + function removeRedundantSupertypes(types, includes) { + let i = types.length; + while (i > 0) { + i--; + const t = types[i]; + const remove = t.flags & 4 /* String */ && includes & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || t.flags & 8 /* Number */ && includes & 256 /* NumberLiteral */ || t.flags & 64 /* BigInt */ && includes & 2048 /* BigIntLiteral */ || t.flags & 4096 /* ESSymbol */ && includes & 8192 /* UniqueESSymbol */ || t.flags & 16384 /* Void */ && includes & 32768 /* Undefined */ || isEmptyAnonymousObjectType(t) && includes & 470302716 /* DefinitelyNonNullable */; + if (remove) { + orderedRemoveItemAt(types, i); + } + } + } + function eachUnionContains(unionTypes2, type) { + for (const u of unionTypes2) { + if (!containsType(u.types, type)) { + if (type === missingType) { + return containsType(u.types, undefinedType); + } + if (type === undefinedType) { + return containsType(u.types, missingType); + } + const primitive = type.flags & 128 /* StringLiteral */ ? stringType : type.flags & (32 /* Enum */ | 256 /* NumberLiteral */) ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 8192 /* UniqueESSymbol */ ? esSymbolType : void 0; + if (!primitive || !containsType(u.types, primitive)) { + return false; + } + } + } + return true; + } + function extractRedundantTemplateLiterals(types) { + let i = types.length; + const literals = filter(types, (t) => !!(t.flags & 128 /* StringLiteral */)); + while (i > 0) { + i--; + const t = types[i]; + if (!(t.flags & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */))) continue; + for (const t2 of literals) { + if (isTypeSubtypeOf(t2, t)) { + orderedRemoveItemAt(types, i); + break; + } else if (isPatternLiteralType(t)) { + return true; + } + } + } + return false; + } + function removeFromEach(types, flag) { + for (let i = 0; i < types.length; i++) { + types[i] = filterType(types[i], (t) => !(t.flags & flag)); + } + } + function intersectUnionsOfPrimitiveTypes(types) { + let unionTypes2; + const index = findIndex(types, (t) => !!(getObjectFlags(t) & 32768 /* PrimitiveUnion */)); + if (index < 0) { + return false; + } + let i = index + 1; + while (i < types.length) { + const t = types[i]; + if (getObjectFlags(t) & 32768 /* PrimitiveUnion */) { + (unionTypes2 || (unionTypes2 = [types[index]])).push(t); + orderedRemoveItemAt(types, i); + } else { + i++; + } + } + if (!unionTypes2) { + return false; + } + const checked = []; + const result = []; + for (const u of unionTypes2) { + for (const t of u.types) { + if (insertType(checked, t)) { + if (eachUnionContains(unionTypes2, t)) { + if (t === undefinedType && result.length && result[0] === missingType) { + continue; + } + if (t === missingType && result.length && result[0] === undefinedType) { + result[0] = missingType; + continue; + } + insertType(result, t); + } + } + } + } + types[index] = getUnionTypeFromSortedList(result, 32768 /* PrimitiveUnion */); + return true; + } + function createIntersectionType(types, objectFlags, aliasSymbol, aliasTypeArguments) { + const result = createType(2097152 /* Intersection */); + result.objectFlags = objectFlags | getPropagatingFlagsOfTypes( + types, + /*excludeKinds*/ + 98304 /* Nullable */ + ); + result.types = types; + result.aliasSymbol = aliasSymbol; + result.aliasTypeArguments = aliasTypeArguments; + return result; + } + function getIntersectionType(types, flags = 0 /* None */, aliasSymbol, aliasTypeArguments) { + const typeMembershipMap = /* @__PURE__ */ new Map(); + const includes = addTypesToIntersection(typeMembershipMap, 0, types); + const typeSet = arrayFrom(typeMembershipMap.values()); + let objectFlags = 0 /* None */; + if (includes & 131072 /* Never */) { + return contains(typeSet, silentNeverType) ? silentNeverType : neverType; + } + if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) || includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) || includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) || includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) || includes & 2112 /* BigIntLike */ && includes & (469892092 /* DisjointDomains */ & ~2112 /* BigIntLike */) || includes & 12288 /* ESSymbolLike */ && includes & (469892092 /* DisjointDomains */ & ~12288 /* ESSymbolLike */) || includes & 49152 /* VoidLike */ && includes & (469892092 /* DisjointDomains */ & ~49152 /* VoidLike */)) { + return neverType; + } + if (includes & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 128 /* StringLiteral */ && extractRedundantTemplateLiterals(typeSet)) { + return neverType; + } + if (includes & 1 /* Any */) { + return includes & 8388608 /* IncludesWildcard */ ? wildcardType : includes & 1073741824 /* IncludesError */ ? errorType : anyType; + } + if (!strictNullChecks && includes & 98304 /* Nullable */) { + return includes & 16777216 /* IncludesEmptyObject */ ? neverType : includes & 32768 /* Undefined */ ? undefinedType : nullType; + } + if (includes & 4 /* String */ && includes & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 8 /* Number */ && includes & 256 /* NumberLiteral */ || includes & 64 /* BigInt */ && includes & 2048 /* BigIntLiteral */ || includes & 4096 /* ESSymbol */ && includes & 8192 /* UniqueESSymbol */ || includes & 16384 /* Void */ && includes & 32768 /* Undefined */ || includes & 16777216 /* IncludesEmptyObject */ && includes & 470302716 /* DefinitelyNonNullable */) { + if (!(flags & 1 /* NoSupertypeReduction */)) removeRedundantSupertypes(typeSet, includes); + } + if (includes & 262144 /* IncludesMissingType */) { + typeSet[typeSet.indexOf(undefinedType)] = missingType; + } + if (typeSet.length === 0) { + return unknownType; + } + if (typeSet.length === 1) { + return typeSet[0]; + } + if (typeSet.length === 2 && !(flags & 2 /* NoConstraintReduction */)) { + const typeVarIndex = typeSet[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + const typeVariable = typeSet[typeVarIndex]; + const primitiveType = typeSet[1 - typeVarIndex]; + if (typeVariable.flags & 8650752 /* TypeVariable */ && (primitiveType.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */) && !isGenericStringLikeType(primitiveType) || includes & 16777216 /* IncludesEmptyObject */)) { + const constraint = getBaseConstraintOfType(typeVariable); + if (constraint && everyType(constraint, (t) => !!(t.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */)) || isEmptyAnonymousObjectType(t))) { + if (isTypeStrictSubtypeOf(constraint, primitiveType)) { + return typeVariable; + } + if (!(constraint.flags & 1048576 /* Union */ && someType(constraint, (c) => isTypeStrictSubtypeOf(c, primitiveType)))) { + if (!isTypeStrictSubtypeOf(primitiveType, constraint)) { + return neverType; + } + } + objectFlags = 67108864 /* IsConstrainedTypeVariable */; + } + } + } + const id = getTypeListId(typeSet) + (flags & 2 /* NoConstraintReduction */ ? "*" : getAliasId(aliasSymbol, aliasTypeArguments)); + let result = intersectionTypes.get(id); + if (!result) { + if (includes & 1048576 /* Union */) { + if (intersectUnionsOfPrimitiveTypes(typeSet)) { + result = getIntersectionType(typeSet, flags, aliasSymbol, aliasTypeArguments); + } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && t.types[0].flags & 32768 /* Undefined */))) { + const containedUndefinedType = some(typeSet, containsMissingType) ? missingType : undefinedType; + removeFromEach(typeSet, 32768 /* Undefined */); + result = getUnionType([getIntersectionType(typeSet, flags), containedUndefinedType], 1 /* Literal */, aliasSymbol, aliasTypeArguments); + } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && (t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) { + removeFromEach(typeSet, 65536 /* Null */); + result = getUnionType([getIntersectionType(typeSet, flags), nullType], 1 /* Literal */, aliasSymbol, aliasTypeArguments); + } else if (typeSet.length >= 3 && types.length > 2) { + const middle = Math.floor(typeSet.length / 2); + result = getIntersectionType([getIntersectionType(typeSet.slice(0, middle), flags), getIntersectionType(typeSet.slice(middle), flags)], flags, aliasSymbol, aliasTypeArguments); + } else { + if (!checkCrossProductUnion(typeSet)) { + return errorType; + } + const constituents = getCrossProductIntersections(typeSet, flags); + const origin = some(constituents, (t) => !!(t.flags & 2097152 /* Intersection */)) && getConstituentCountOfTypes(constituents) > getConstituentCountOfTypes(typeSet) ? createOriginUnionOrIntersectionType(2097152 /* Intersection */, typeSet) : void 0; + result = getUnionType(constituents, 1 /* Literal */, aliasSymbol, aliasTypeArguments, origin); + } + } else { + result = createIntersectionType(typeSet, objectFlags, aliasSymbol, aliasTypeArguments); + } + intersectionTypes.set(id, result); + } + return result; + } + function getCrossProductUnionSize(types) { + return reduceLeft(types, (n, t) => t.flags & 1048576 /* Union */ ? n * t.types.length : t.flags & 131072 /* Never */ ? 0 : n, 1); + } + function checkCrossProductUnion(types) { + var _a; + const size = getCrossProductUnionSize(types); + if (size >= 1e5) { + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.CheckTypes, "checkCrossProductUnion_DepthLimit", { typeIds: types.map((t) => t.id), size }); + error2(currentNode, Diagnostics.Expression_produces_a_union_type_that_is_too_complex_to_represent); + return false; + } + return true; + } + function getCrossProductIntersections(types, flags) { + const count = getCrossProductUnionSize(types); + const intersections = []; + for (let i = 0; i < count; i++) { + const constituents = types.slice(); + let n = i; + for (let j = types.length - 1; j >= 0; j--) { + if (types[j].flags & 1048576 /* Union */) { + const sourceTypes = types[j].types; + const length2 = sourceTypes.length; + constituents[j] = sourceTypes[n % length2]; + n = Math.floor(n / length2); + } + } + const t = getIntersectionType(constituents, flags); + if (!(t.flags & 131072 /* Never */)) intersections.push(t); + } + return intersections; + } + function getConstituentCount(type) { + return !(type.flags & 3145728 /* UnionOrIntersection */) || type.aliasSymbol ? 1 : type.flags & 1048576 /* Union */ && type.origin ? getConstituentCount(type.origin) : getConstituentCountOfTypes(type.types); + } + function getConstituentCountOfTypes(types) { + return reduceLeft(types, (n, t) => n + getConstituentCount(t), 0); + } + function getTypeFromIntersectionTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const aliasSymbol = getAliasSymbolForTypeNode(node); + const types = map(node.types, getTypeFromTypeNode); + const emptyIndex = types.length === 2 ? types.indexOf(emptyTypeLiteralType) : -1; + const t = emptyIndex >= 0 ? types[1 - emptyIndex] : unknownType; + const noSupertypeReduction = !!(t.flags & (4 /* String */ | 8 /* Number */ | 64 /* BigInt */) || t.flags & 134217728 /* TemplateLiteral */ && isPatternLiteralType(t)); + links.resolvedType = getIntersectionType(types, noSupertypeReduction ? 1 /* NoSupertypeReduction */ : 0, aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); + } + return links.resolvedType; + } + function createIndexType(type, indexFlags) { + const result = createType(4194304 /* Index */); + result.type = type; + result.indexFlags = indexFlags; + return result; + } + function createOriginIndexType(type) { + const result = createOriginType(4194304 /* Index */); + result.type = type; + return result; + } + function getIndexTypeForGenericType(type, indexFlags) { + return indexFlags & 1 /* StringsOnly */ ? type.resolvedStringIndexType || (type.resolvedStringIndexType = createIndexType(type, 1 /* StringsOnly */)) : type.resolvedIndexType || (type.resolvedIndexType = createIndexType(type, 0 /* None */)); + } + function getIndexTypeForMappedType(type, indexFlags) { + const typeParameter = getTypeParameterFromMappedType(type); + const constraintType = getConstraintTypeFromMappedType(type); + const nameType = getNameTypeFromMappedType(type.target || type); + if (!nameType && !(indexFlags & 2 /* NoIndexSignatures */)) { + return constraintType; + } + const keyTypes = []; + if (isGenericIndexType(constraintType)) { + if (isMappedTypeWithKeyofConstraintDeclaration(type)) { + return getIndexTypeForGenericType(type, indexFlags); + } + forEachType(constraintType, addMemberForKeyType); + } else if (isMappedTypeWithKeyofConstraintDeclaration(type)) { + const modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); + forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, 8576 /* StringOrNumberLiteralOrUnique */, !!(indexFlags & 1 /* StringsOnly */), addMemberForKeyType); + } else { + forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType); + } + const result = indexFlags & 2 /* NoIndexSignatures */ ? filterType(getUnionType(keyTypes), (t) => !(t.flags & (1 /* Any */ | 4 /* String */))) : getUnionType(keyTypes); + if (result.flags & 1048576 /* Union */ && constraintType.flags & 1048576 /* Union */ && getTypeListId(result.types) === getTypeListId(constraintType.types)) { + return constraintType; + } + return result; + function addMemberForKeyType(keyType) { + const propNameType = nameType ? instantiateType(nameType, appendTypeMapping(type.mapper, typeParameter, keyType)) : keyType; + keyTypes.push(propNameType === stringType ? stringOrNumberType : propNameType); + } + } + function hasDistributiveNameType(mappedType) { + const typeVariable = getTypeParameterFromMappedType(mappedType); + return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable); + function isDistributive(type) { + return type.flags & (3 /* AnyOrUnknown */ | 402784252 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true : type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable : type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? every(type.types, isDistributive) : type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) : type.flags & 33554432 /* Substitution */ ? isDistributive(type.baseType) && isDistributive(type.constraint) : type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) : false; + } + } + function getLiteralTypeFromPropertyName(name) { + if (isPrivateIdentifier(name)) { + return neverType; + } + if (isNumericLiteral(name)) { + return getRegularTypeOfLiteralType(checkExpression(name)); + } + if (isComputedPropertyName(name)) { + return getRegularTypeOfLiteralType(checkComputedPropertyName(name)); + } + const propertyName = getPropertyNameForPropertyNameNode(name); + if (propertyName !== void 0) { + return getStringLiteralType(unescapeLeadingUnderscores(propertyName)); + } + if (isExpression(name)) { + return getRegularTypeOfLiteralType(checkExpression(name)); + } + return neverType; + } + function getLiteralTypeFromProperty(prop, include, includeNonPublic) { + if (includeNonPublic || !(getDeclarationModifierFlagsFromSymbol(prop) & 6 /* NonPublicAccessibilityModifier */)) { + let type = getSymbolLinks(getLateBoundSymbol(prop)).nameType; + if (!type) { + const name = getNameOfDeclaration(prop.valueDeclaration); + type = prop.escapedName === "default" /* Default */ ? getStringLiteralType("default") : name && getLiteralTypeFromPropertyName(name) || (!isKnownSymbol(prop) ? getStringLiteralType(symbolName(prop)) : void 0); + } + if (type && type.flags & include) { + return type; + } + } + return neverType; + } + function isKeyTypeIncluded(keyType, include) { + return !!(keyType.flags & include || keyType.flags & 2097152 /* Intersection */ && some(keyType.types, (t) => isKeyTypeIncluded(t, include))); + } + function getLiteralTypeFromProperties(type, include, includeOrigin) { + const origin = includeOrigin && (getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : void 0; + const propertyTypes = map(getPropertiesOfType(type), (prop) => getLiteralTypeFromProperty(prop, include)); + const indexKeyTypes = map(getIndexInfosOfType(type), (info) => info !== enumNumberIndexInfo && isKeyTypeIncluded(info.keyType, include) ? info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType); + return getUnionType( + concatenate(propertyTypes, indexKeyTypes), + 1 /* Literal */, + /*aliasSymbol*/ + void 0, + /*aliasTypeArguments*/ + void 0, + origin + ); + } + function shouldDeferIndexType(type, indexFlags = 0 /* None */) { + return !!(type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && (!hasDistributiveNameType(type) || getMappedTypeNameTypeKind(type) === 2 /* Remapping */) || type.flags & 1048576 /* Union */ && !(indexFlags & 4 /* NoReducibleCheck */) && isGenericReducibleType(type) || type.flags & 2097152 /* Intersection */ && maybeTypeOfKind(type, 465829888 /* Instantiable */) && some(type.types, isEmptyAnonymousObjectType)); + } + function getIndexType(type, indexFlags = 0 /* None */) { + type = getReducedType(type); + return isNoInferType(type) ? getNoInferType(getIndexType(type.baseType, indexFlags)) : shouldDeferIndexType(type, indexFlags) ? getIndexTypeForGenericType(type, indexFlags) : type.flags & 1048576 /* Union */ ? getIntersectionType(map(type.types, (t) => getIndexType(t, indexFlags))) : type.flags & 2097152 /* Intersection */ ? getUnionType(map(type.types, (t) => getIndexType(t, indexFlags))) : getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, indexFlags) : type === wildcardType ? wildcardType : type.flags & 2 /* Unknown */ ? neverType : type.flags & (1 /* Any */ | 131072 /* Never */) ? stringNumberSymbolType : getLiteralTypeFromProperties(type, (indexFlags & 2 /* NoIndexSignatures */ ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (indexFlags & 1 /* StringsOnly */ ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), indexFlags === 0 /* None */); + } + function getExtractStringType(type) { + const extractTypeAlias = getGlobalExtractSymbol(); + return extractTypeAlias ? getTypeAliasInstantiation(extractTypeAlias, [type, stringType]) : stringType; + } + function getIndexTypeOrString(type) { + const indexType = getExtractStringType(getIndexType(type)); + return indexType.flags & 131072 /* Never */ ? stringType : indexType; + } + function getTypeFromTypeOperatorNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + switch (node.operator) { + case 143 /* KeyOfKeyword */: + links.resolvedType = getIndexType(getTypeFromTypeNode(node.type)); + break; + case 158 /* UniqueKeyword */: + links.resolvedType = node.type.kind === 155 /* SymbolKeyword */ ? getESSymbolLikeTypeForNode(walkUpParenthesizedTypes(node.parent)) : errorType; + break; + case 148 /* ReadonlyKeyword */: + links.resolvedType = getTypeFromTypeNode(node.type); + break; + default: + Debug.assertNever(node.operator); + } + } + return links.resolvedType; + } + function getTypeFromTemplateTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getTemplateLiteralType( + [node.head.text, ...map(node.templateSpans, (span) => span.literal.text)], + map(node.templateSpans, (span) => getTypeFromTypeNode(span.type)) + ); + } + return links.resolvedType; + } + function getTemplateLiteralType(texts, types) { + const unionIndex = findIndex(types, (t) => !!(t.flags & (131072 /* Never */ | 1048576 /* Union */))); + if (unionIndex >= 0) { + return checkCrossProductUnion(types) ? mapType(types[unionIndex], (t) => getTemplateLiteralType(texts, replaceElement(types, unionIndex, t))) : errorType; + } + if (contains(types, wildcardType)) { + return wildcardType; + } + const newTypes = []; + const newTexts = []; + let text = texts[0]; + if (!addSpans(texts, types)) { + return stringType; + } + if (newTypes.length === 0) { + return getStringLiteralType(text); + } + newTexts.push(text); + if (every(newTexts, (t) => t === "")) { + if (every(newTypes, (t) => !!(t.flags & 4 /* String */))) { + return stringType; + } + if (newTypes.length === 1 && isPatternLiteralType(newTypes[0])) { + return newTypes[0]; + } + } + const id = `${getTypeListId(newTypes)}|${map(newTexts, (t) => t.length).join(",")}|${newTexts.join("")}`; + let type = templateLiteralTypes.get(id); + if (!type) { + templateLiteralTypes.set(id, type = createTemplateLiteralType(newTexts, newTypes)); + } + return type; + function addSpans(texts2, types2) { + for (let i = 0; i < types2.length; i++) { + const t = types2[i]; + if (t.flags & (2944 /* Literal */ | 65536 /* Null */ | 32768 /* Undefined */)) { + text += getTemplateStringForType(t) || ""; + text += texts2[i + 1]; + } else if (t.flags & 134217728 /* TemplateLiteral */) { + text += t.texts[0]; + if (!addSpans(t.texts, t.types)) return false; + text += texts2[i + 1]; + } else if (isGenericIndexType(t) || isPatternLiteralPlaceholderType(t)) { + newTypes.push(t); + newTexts.push(text); + text = texts2[i + 1]; + } else { + return false; + } + } + return true; + } + } + function getTemplateStringForType(type) { + return type.flags & 128 /* StringLiteral */ ? type.value : type.flags & 256 /* NumberLiteral */ ? "" + type.value : type.flags & 2048 /* BigIntLiteral */ ? pseudoBigIntToString(type.value) : type.flags & (512 /* BooleanLiteral */ | 98304 /* Nullable */) ? type.intrinsicName : void 0; + } + function createTemplateLiteralType(texts, types) { + const type = createType(134217728 /* TemplateLiteral */); + type.texts = texts; + type.types = types; + return type; + } + function getStringMappingType(symbol, type) { + return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, (t) => getStringMappingType(symbol, t)) : type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) : type.flags & 134217728 /* TemplateLiteral */ ? getTemplateLiteralType(...applyTemplateStringMapping(symbol, type.texts, type.types)) : ( + // Mapping> === Mapping + type.flags & 268435456 /* StringMapping */ && symbol === type.symbol ? type : type.flags & (1 /* Any */ | 4 /* String */ | 268435456 /* StringMapping */) || isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) : ( + // This handles Mapping<`${number}`> and Mapping<`${bigint}`> + isPatternLiteralPlaceholderType(type) ? getStringMappingTypeForGenericType(symbol, getTemplateLiteralType(["", ""], [type])) : type + ) + ); + } + function applyStringMapping(symbol, str) { + switch (intrinsicTypeKinds.get(symbol.escapedName)) { + case 0 /* Uppercase */: + return str.toUpperCase(); + case 1 /* Lowercase */: + return str.toLowerCase(); + case 2 /* Capitalize */: + return str.charAt(0).toUpperCase() + str.slice(1); + case 3 /* Uncapitalize */: + return str.charAt(0).toLowerCase() + str.slice(1); + } + return str; + } + function applyTemplateStringMapping(symbol, texts, types) { + switch (intrinsicTypeKinds.get(symbol.escapedName)) { + case 0 /* Uppercase */: + return [texts.map((t) => t.toUpperCase()), types.map((t) => getStringMappingType(symbol, t))]; + case 1 /* Lowercase */: + return [texts.map((t) => t.toLowerCase()), types.map((t) => getStringMappingType(symbol, t))]; + case 2 /* Capitalize */: + return [texts[0] === "" ? texts : [texts[0].charAt(0).toUpperCase() + texts[0].slice(1), ...texts.slice(1)], texts[0] === "" ? [getStringMappingType(symbol, types[0]), ...types.slice(1)] : types]; + case 3 /* Uncapitalize */: + return [texts[0] === "" ? texts : [texts[0].charAt(0).toLowerCase() + texts[0].slice(1), ...texts.slice(1)], texts[0] === "" ? [getStringMappingType(symbol, types[0]), ...types.slice(1)] : types]; + } + return [texts, types]; + } + function getStringMappingTypeForGenericType(symbol, type) { + const id = `${getSymbolId(symbol)},${getTypeId(type)}`; + let result = stringMappingTypes.get(id); + if (!result) { + stringMappingTypes.set(id, result = createStringMappingType(symbol, type)); + } + return result; + } + function createStringMappingType(symbol, type) { + const result = createTypeWithSymbol(268435456 /* StringMapping */, symbol); + result.type = type; + return result; + } + function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) { + const type = createType(8388608 /* IndexedAccess */); + type.objectType = objectType; + type.indexType = indexType; + type.accessFlags = accessFlags; + type.aliasSymbol = aliasSymbol; + type.aliasTypeArguments = aliasTypeArguments; + return type; + } + function isJSLiteralType(type) { + if (noImplicitAny) { + return false; + } + if (getObjectFlags(type) & 4096 /* JSLiteral */) { + return true; + } + if (type.flags & 1048576 /* Union */) { + return every(type.types, isJSLiteralType); + } + if (type.flags & 2097152 /* Intersection */) { + return some(type.types, isJSLiteralType); + } + if (type.flags & 465829888 /* Instantiable */) { + const constraint = getResolvedBaseConstraint(type); + return constraint !== type && isJSLiteralType(constraint); + } + return false; + } + function getPropertyNameFromIndex(indexType, accessNode) { + return isTypeUsableAsPropertyName(indexType) ? getPropertyNameFromType(indexType) : accessNode && isPropertyName(accessNode) ? ( + // late bound names are handled in the first branch, so here we only need to handle normal names + getPropertyNameForPropertyNameNode(accessNode) + ) : void 0; + } + function isUncalledFunctionReference(node, symbol) { + if (symbol.flags & (16 /* Function */ | 8192 /* Method */)) { + const parent2 = findAncestor(node.parent, (n) => !isAccessExpression(n)) || node.parent; + if (isCallLikeExpression(parent2)) { + return isCallOrNewExpression(parent2) && isIdentifier(node) && hasMatchingArgument(parent2, node); + } + return every(symbol.declarations, (d) => !isFunctionLike(d) || isDeprecatedDeclaration2(d)); + } + return true; + } + function getPropertyTypeForIndexType(originalObjectType, objectType, indexType, fullIndexType, accessNode, accessFlags) { + const accessExpression = accessNode && accessNode.kind === 213 /* ElementAccessExpression */ ? accessNode : void 0; + const propName = accessNode && isPrivateIdentifier(accessNode) ? void 0 : getPropertyNameFromIndex(indexType, accessNode); + if (propName !== void 0) { + if (accessFlags & 256 /* Contextual */) { + return getTypeOfPropertyOfContextualType(objectType, propName) || anyType; + } + const prop = getPropertyOfType(objectType, propName); + if (prop) { + if (accessFlags & 64 /* ReportDeprecated */ && accessNode && prop.declarations && isDeprecatedSymbol(prop) && isUncalledFunctionReference(accessNode, prop)) { + const deprecatedNode = (accessExpression == null ? void 0 : accessExpression.argumentExpression) ?? (isIndexedAccessTypeNode(accessNode) ? accessNode.indexType : accessNode); + addDeprecatedSuggestion(deprecatedNode, prop.declarations, propName); + } + if (accessExpression) { + markPropertyAsReferenced(prop, accessExpression, isSelfTypeAccess(accessExpression.expression, objectType.symbol)); + if (isAssignmentToReadonlyEntity(accessExpression, prop, getAssignmentTargetKind(accessExpression))) { + error2(accessExpression.argumentExpression, Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(prop)); + return void 0; + } + if (accessFlags & 8 /* CacheSymbol */) { + getNodeLinks(accessNode).resolvedSymbol = prop; + } + if (isThisPropertyAccessInConstructor(accessExpression, prop)) { + return autoType; + } + } + const propType = accessFlags & 4 /* Writing */ ? getWriteTypeOfSymbol(prop) : getTypeOfSymbol(prop); + return accessExpression && getAssignmentTargetKind(accessExpression) !== 1 /* Definite */ ? getFlowTypeOfReference(accessExpression, propType) : accessNode && isIndexedAccessTypeNode(accessNode) && containsMissingType(propType) ? getUnionType([propType, undefinedType]) : propType; + } + if (everyType(objectType, isTupleType) && isNumericLiteralName(propName)) { + const index = +propName; + if (accessNode && everyType(objectType, (t) => !(t.target.combinedFlags & 12 /* Variable */)) && !(accessFlags & 16 /* AllowMissing */)) { + const indexNode = getIndexNodeForAccessExpression(accessNode); + if (isTupleType(objectType)) { + if (index < 0) { + error2(indexNode, Diagnostics.A_tuple_type_cannot_be_indexed_with_a_negative_value); + return undefinedType; + } + error2(indexNode, Diagnostics.Tuple_type_0_of_length_1_has_no_element_at_index_2, typeToString(objectType), getTypeReferenceArity(objectType), unescapeLeadingUnderscores(propName)); + } else { + error2(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, unescapeLeadingUnderscores(propName), typeToString(objectType)); + } + } + if (index >= 0) { + errorIfWritingToReadonlyIndex(getIndexInfoOfType(objectType, numberType)); + return getTupleElementTypeOutOfStartCount(objectType, index, accessFlags & 1 /* IncludeUndefined */ ? missingType : void 0); + } + } + } + if (!(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 402653316 /* StringLike */ | 296 /* NumberLike */ | 12288 /* ESSymbolLike */)) { + if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) { + return objectType; + } + const indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType); + if (indexInfo) { + if (accessFlags & 2 /* NoIndexSignatures */ && indexInfo.keyType !== numberType) { + if (accessExpression) { + if (accessFlags & 4 /* Writing */) { + error2(accessExpression, Diagnostics.Type_0_is_generic_and_can_only_be_indexed_for_reading, typeToString(originalObjectType)); + } else { + error2(accessExpression, Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(originalObjectType)); + } + } + return void 0; + } + if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) { + const indexNode = getIndexNodeForAccessExpression(accessNode); + error2(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType)); + return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, missingType]) : indexInfo.type; + } + errorIfWritingToReadonlyIndex(indexInfo); + if (accessFlags & 1 /* IncludeUndefined */ && !(objectType.symbol && objectType.symbol.flags & (256 /* RegularEnum */ | 128 /* ConstEnum */) && (indexType.symbol && indexType.flags & 1024 /* EnumLiteral */ && getParentOfSymbol(indexType.symbol) === objectType.symbol))) { + return getUnionType([indexInfo.type, missingType]); + } + return indexInfo.type; + } + if (indexType.flags & 131072 /* Never */) { + return neverType; + } + if (isJSLiteralType(objectType)) { + return anyType; + } + if (accessExpression && !isConstEnumObjectType(objectType)) { + if (isObjectLiteralType2(objectType)) { + if (noImplicitAny && indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + diagnostics.add(createDiagnosticForNode(accessExpression, Diagnostics.Property_0_does_not_exist_on_type_1, indexType.value, typeToString(objectType))); + return undefinedType; + } else if (indexType.flags & (8 /* Number */ | 4 /* String */)) { + const types = map(objectType.properties, (property) => { + return getTypeOfSymbol(property); + }); + return getUnionType(append(types, undefinedType)); + } + } + if (objectType.symbol === globalThisSymbol && propName !== void 0 && globalThisSymbol.exports.has(propName) && globalThisSymbol.exports.get(propName).flags & 418 /* BlockScoped */) { + error2(accessExpression, Diagnostics.Property_0_does_not_exist_on_type_1, unescapeLeadingUnderscores(propName), typeToString(objectType)); + } else if (noImplicitAny && !(accessFlags & 128 /* SuppressNoImplicitAnyError */)) { + if (propName !== void 0 && typeHasStaticProperty(propName, objectType)) { + const typeName = typeToString(objectType); + error2(accessExpression, Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "[" + getTextOfNode(accessExpression.argumentExpression) + "]"); + } else if (getIndexTypeOfType(objectType, numberType)) { + error2(accessExpression.argumentExpression, Diagnostics.Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number); + } else { + let suggestion; + if (propName !== void 0 && (suggestion = getSuggestionForNonexistentProperty(propName, objectType))) { + if (suggestion !== void 0) { + error2(accessExpression.argumentExpression, Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, propName, typeToString(objectType), suggestion); + } + } else { + const suggestion2 = getSuggestionForNonexistentIndexSignature(objectType, accessExpression, indexType); + if (suggestion2 !== void 0) { + error2(accessExpression, Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1, typeToString(objectType), suggestion2); + } else { + let errorInfo; + if (indexType.flags & 1024 /* EnumLiteral */) { + errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Property_0_does_not_exist_on_type_1, + "[" + typeToString(indexType) + "]", + typeToString(objectType) + ); + } else if (indexType.flags & 8192 /* UniqueESSymbol */) { + const symbolName2 = getFullyQualifiedName(indexType.symbol, accessExpression); + errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Property_0_does_not_exist_on_type_1, + "[" + symbolName2 + "]", + typeToString(objectType) + ); + } else if (indexType.flags & 128 /* StringLiteral */) { + errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Property_0_does_not_exist_on_type_1, + indexType.value, + typeToString(objectType) + ); + } else if (indexType.flags & 256 /* NumberLiteral */) { + errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Property_0_does_not_exist_on_type_1, + indexType.value, + typeToString(objectType) + ); + } else if (indexType.flags & (8 /* Number */ | 4 /* String */)) { + errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1, + typeToString(indexType), + typeToString(objectType) + ); + } + errorInfo = chainDiagnosticMessages( + errorInfo, + Diagnostics.Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1, + typeToString(fullIndexType), + typeToString(objectType) + ); + diagnostics.add(createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(accessExpression), accessExpression, errorInfo)); + } + } + } + } + return void 0; + } + } + if (accessFlags & 16 /* AllowMissing */ && isObjectLiteralType2(objectType)) { + return undefinedType; + } + if (isJSLiteralType(objectType)) { + return anyType; + } + if (accessNode) { + const indexNode = getIndexNodeForAccessExpression(accessNode); + if (indexNode.kind !== 10 /* BigIntLiteral */ && indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + error2(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + indexType.value, typeToString(objectType)); + } else if (indexType.flags & (4 /* String */ | 8 /* Number */)) { + error2(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); + } else { + const typeString = indexNode.kind === 10 /* BigIntLiteral */ ? "bigint" : typeToString(indexType); + error2(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeString); + } + } + if (isTypeAny(indexType)) { + return indexType; + } + return void 0; + function errorIfWritingToReadonlyIndex(indexInfo) { + if (indexInfo && indexInfo.isReadonly && accessExpression && (isAssignmentTarget(accessExpression) || isDeleteTarget(accessExpression))) { + error2(accessExpression, Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType)); + } + } + } + function getIndexNodeForAccessExpression(accessNode) { + return accessNode.kind === 213 /* ElementAccessExpression */ ? accessNode.argumentExpression : accessNode.kind === 200 /* IndexedAccessType */ ? accessNode.indexType : accessNode.kind === 168 /* ComputedPropertyName */ ? accessNode.expression : accessNode; + } + function isPatternLiteralPlaceholderType(type) { + if (type.flags & 2097152 /* Intersection */) { + let seenPlaceholder = false; + for (const t of type.types) { + if (t.flags & (2944 /* Literal */ | 98304 /* Nullable */) || isPatternLiteralPlaceholderType(t)) { + seenPlaceholder = true; + } else if (!(t.flags & 524288 /* Object */)) { + return false; + } + } + return seenPlaceholder; + } + return !!(type.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 64 /* BigInt */)) || isPatternLiteralType(type); + } + function isPatternLiteralType(type) { + return !!(type.flags & 134217728 /* TemplateLiteral */) && every(type.types, isPatternLiteralPlaceholderType) || !!(type.flags & 268435456 /* StringMapping */) && isPatternLiteralPlaceholderType(type.type); + } + function isGenericStringLikeType(type) { + return !!(type.flags & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type); + } + function isGenericType(type) { + return !!getGenericObjectFlags(type); + } + function isGenericObjectType(type) { + return !!(getGenericObjectFlags(type) & 4194304 /* IsGenericObjectType */); + } + function isGenericIndexType(type) { + return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericIndexType */); + } + function getGenericObjectFlags(type) { + if (type.flags & 3145728 /* UnionOrIntersection */) { + if (!(type.objectFlags & 2097152 /* IsGenericTypeComputed */)) { + type.objectFlags |= 2097152 /* IsGenericTypeComputed */ | reduceLeft(type.types, (flags, t) => flags | getGenericObjectFlags(t), 0); + } + return type.objectFlags & 12582912 /* IsGenericType */; + } + if (type.flags & 33554432 /* Substitution */) { + if (!(type.objectFlags & 2097152 /* IsGenericTypeComputed */)) { + type.objectFlags |= 2097152 /* IsGenericTypeComputed */ | getGenericObjectFlags(type.baseType) | getGenericObjectFlags(type.constraint); + } + return type.objectFlags & 12582912 /* IsGenericType */; + } + return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 4194304 /* IsGenericObjectType */ : 0) | (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */) || isGenericStringLikeType(type) ? 8388608 /* IsGenericIndexType */ : 0); + } + function getSimplifiedType(type, writing) { + return type.flags & 8388608 /* IndexedAccess */ ? getSimplifiedIndexedAccessType(type, writing) : type.flags & 16777216 /* Conditional */ ? getSimplifiedConditionalType(type, writing) : type; + } + function distributeIndexOverObjectType(objectType, indexType, writing) { + if (objectType.flags & 1048576 /* Union */ || objectType.flags & 2097152 /* Intersection */ && !shouldDeferIndexType(objectType)) { + const types = map(objectType.types, (t) => getSimplifiedType(getIndexedAccessType(t, indexType), writing)); + return objectType.flags & 2097152 /* Intersection */ || writing ? getIntersectionType(types) : getUnionType(types); + } + } + function distributeObjectOverIndexType(objectType, indexType, writing) { + if (indexType.flags & 1048576 /* Union */) { + const types = map(indexType.types, (t) => getSimplifiedType(getIndexedAccessType(objectType, t), writing)); + return writing ? getIntersectionType(types) : getUnionType(types); + } + } + function getSimplifiedIndexedAccessType(type, writing) { + const cache = writing ? "simplifiedForWriting" : "simplifiedForReading"; + if (type[cache]) { + return type[cache] === circularConstraintType ? type : type[cache]; + } + type[cache] = circularConstraintType; + const objectType = getSimplifiedType(type.objectType, writing); + const indexType = getSimplifiedType(type.indexType, writing); + const distributedOverIndex = distributeObjectOverIndexType(objectType, indexType, writing); + if (distributedOverIndex) { + return type[cache] = distributedOverIndex; + } + if (!(indexType.flags & 465829888 /* Instantiable */)) { + const distributedOverObject = distributeIndexOverObjectType(objectType, indexType, writing); + if (distributedOverObject) { + return type[cache] = distributedOverObject; + } + } + if (isGenericTupleType(objectType) && indexType.flags & 296 /* NumberLike */) { + const elementType = getElementTypeOfSliceOfTupleType( + objectType, + indexType.flags & 8 /* Number */ ? 0 : objectType.target.fixedLength, + /*endSkipCount*/ + 0, + writing + ); + if (elementType) { + return type[cache] = elementType; + } + } + if (isGenericMappedType(objectType)) { + if (getMappedTypeNameTypeKind(objectType) !== 2 /* Remapping */) { + return type[cache] = mapType(substituteIndexedMappedType(objectType, type.indexType), (t) => getSimplifiedType(t, writing)); + } + } + return type[cache] = type; + } + function getSimplifiedConditionalType(type, writing) { + const checkType = type.checkType; + const extendsType = type.extendsType; + const trueType2 = getTrueTypeFromConditionalType(type); + const falseType2 = getFalseTypeFromConditionalType(type); + if (falseType2.flags & 131072 /* Never */ && getActualTypeVariable(trueType2) === getActualTypeVariable(checkType)) { + if (checkType.flags & 1 /* Any */ || isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(extendsType))) { + return getSimplifiedType(trueType2, writing); + } else if (isIntersectionEmpty(checkType, extendsType)) { + return neverType; + } + } else if (trueType2.flags & 131072 /* Never */ && getActualTypeVariable(falseType2) === getActualTypeVariable(checkType)) { + if (!(checkType.flags & 1 /* Any */) && isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(extendsType))) { + return neverType; + } else if (checkType.flags & 1 /* Any */ || isIntersectionEmpty(checkType, extendsType)) { + return getSimplifiedType(falseType2, writing); + } + } + return type; + } + function isIntersectionEmpty(type1, type2) { + return !!(getUnionType([intersectTypes(type1, type2), neverType]).flags & 131072 /* Never */); + } + function substituteIndexedMappedType(objectType, index) { + const mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); + const templateMapper = combineTypeMappers(objectType.mapper, mapper); + const instantiatedTemplateType = instantiateType(getTemplateTypeFromMappedType(objectType.target || objectType), templateMapper); + const isOptional = getMappedTypeOptionality(objectType) > 0 || (isGenericType(objectType) ? getCombinedMappedTypeOptionality(getModifiersTypeFromMappedType(objectType)) > 0 : couldAccessOptionalProperty(objectType, index)); + return addOptionality( + instantiatedTemplateType, + /*isProperty*/ + true, + isOptional + ); + } + function couldAccessOptionalProperty(objectType, indexType) { + const indexConstraint = getBaseConstraintOfType(indexType); + return !!indexConstraint && some(getPropertiesOfType(objectType), (p) => !!(p.flags & 16777216 /* Optional */) && isTypeAssignableTo(getLiteralTypeFromProperty(p, 8576 /* StringOrNumberLiteralOrUnique */), indexConstraint)); + } + function getIndexedAccessType(objectType, indexType, accessFlags = 0 /* None */, accessNode, aliasSymbol, aliasTypeArguments) { + return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType); + } + function indexTypeLessThan(indexType, limit) { + return everyType(indexType, (t) => { + if (t.flags & 384 /* StringOrNumberLiteral */) { + const propName = getPropertyNameFromType(t); + if (isNumericLiteralName(propName)) { + const index = +propName; + return index >= 0 && index < limit; + } + } + return false; + }); + } + function getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags = 0 /* None */, accessNode, aliasSymbol, aliasTypeArguments) { + if (objectType === wildcardType || indexType === wildcardType) { + return wildcardType; + } + objectType = getReducedType(objectType); + if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) { + indexType = stringType; + } + if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */) accessFlags |= 1 /* IncludeUndefined */; + if (isGenericIndexType(indexType) || (accessNode && accessNode.kind !== 200 /* IndexedAccessType */ ? isGenericTupleType(objectType) && !indexTypeLessThan(indexType, getTotalFixedElementCount(objectType.target)) : isGenericObjectType(objectType) && !(isTupleType(objectType) && indexTypeLessThan(indexType, getTotalFixedElementCount(objectType.target))) || isGenericReducibleType(objectType))) { + if (objectType.flags & 3 /* AnyOrUnknown */) { + return objectType; + } + const persistentAccessFlags = accessFlags & 1 /* Persistent */; + const id = objectType.id + "," + indexType.id + "," + persistentAccessFlags + getAliasId(aliasSymbol, aliasTypeArguments); + let type = indexedAccessTypes.get(id); + if (!type) { + indexedAccessTypes.set(id, type = createIndexedAccessType(objectType, indexType, persistentAccessFlags, aliasSymbol, aliasTypeArguments)); + } + return type; + } + const apparentObjectType = getReducedApparentType(objectType); + if (indexType.flags & 1048576 /* Union */ && !(indexType.flags & 16 /* Boolean */)) { + const propTypes = []; + let wasMissingProp = false; + for (const t of indexType.types) { + const propType = getPropertyTypeForIndexType(objectType, apparentObjectType, t, indexType, accessNode, accessFlags | (wasMissingProp ? 128 /* SuppressNoImplicitAnyError */ : 0)); + if (propType) { + propTypes.push(propType); + } else if (!accessNode) { + return void 0; + } else { + wasMissingProp = true; + } + } + if (wasMissingProp) { + return void 0; + } + return accessFlags & 4 /* Writing */ ? getIntersectionType(propTypes, 0 /* None */, aliasSymbol, aliasTypeArguments) : getUnionType(propTypes, 1 /* Literal */, aliasSymbol, aliasTypeArguments); + } + return getPropertyTypeForIndexType(objectType, apparentObjectType, indexType, indexType, accessNode, accessFlags | 8 /* CacheSymbol */ | 64 /* ReportDeprecated */); + } + function getTypeFromIndexedAccessTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const objectType = getTypeFromTypeNode(node.objectType); + const indexType = getTypeFromTypeNode(node.indexType); + const potentialAlias = getAliasSymbolForTypeNode(node); + links.resolvedType = getIndexedAccessType(objectType, indexType, 0 /* None */, node, potentialAlias, getTypeArgumentsForAliasSymbol(potentialAlias)); + } + return links.resolvedType; + } + function getTypeFromMappedTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const type = createObjectType(32 /* Mapped */, node.symbol); + type.declaration = node; + type.aliasSymbol = getAliasSymbolForTypeNode(node); + type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(type.aliasSymbol); + links.resolvedType = type; + getConstraintTypeFromMappedType(type); + } + return links.resolvedType; + } + function getActualTypeVariable(type) { + if (type.flags & 33554432 /* Substitution */) { + return getActualTypeVariable(type.baseType); + } + if (type.flags & 8388608 /* IndexedAccess */ && (type.objectType.flags & 33554432 /* Substitution */ || type.indexType.flags & 33554432 /* Substitution */)) { + return getIndexedAccessType(getActualTypeVariable(type.objectType), getActualTypeVariable(type.indexType)); + } + return type; + } + function isSimpleTupleType(node) { + return isTupleTypeNode(node) && length(node.elements) > 0 && !some(node.elements, (e) => isOptionalTypeNode(e) || isRestTypeNode(e) || isNamedTupleMember(e) && !!(e.questionToken || e.dotDotDotToken)); + } + function isDeferredType(type, checkTuples) { + return isGenericType(type) || checkTuples && isTupleType(type) && some(getElementTypes(type), isGenericType); + } + function getConditionalType(root, mapper, forConstraint, aliasSymbol, aliasTypeArguments) { + let result; + let extraTypes; + let tailCount = 0; + while (true) { + if (tailCount === 1e3) { + error2(currentNode, Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite); + return errorType; + } + const checkType = instantiateType(getActualTypeVariable(root.checkType), mapper); + const extendsType = instantiateType(root.extendsType, mapper); + if (checkType === errorType || extendsType === errorType) { + return errorType; + } + if (checkType === wildcardType || extendsType === wildcardType) { + return wildcardType; + } + const checkTypeNode = skipTypeParentheses(root.node.checkType); + const extendsTypeNode = skipTypeParentheses(root.node.extendsType); + const checkTuples = isSimpleTupleType(checkTypeNode) && isSimpleTupleType(extendsTypeNode) && length(checkTypeNode.elements) === length(extendsTypeNode.elements); + const checkTypeDeferred = isDeferredType(checkType, checkTuples); + let combinedMapper; + if (root.inferTypeParameters) { + const context = createInferenceContext( + root.inferTypeParameters, + /*signature*/ + void 0, + 0 /* None */ + ); + if (mapper) { + context.nonFixingMapper = combineTypeMappers(context.nonFixingMapper, mapper); + } + if (!checkTypeDeferred) { + inferTypes(context.inferences, checkType, extendsType, 512 /* NoConstraints */ | 1024 /* AlwaysStrict */); + } + combinedMapper = mapper ? combineTypeMappers(context.mapper, mapper) : context.mapper; + } + const inferredExtendsType = combinedMapper ? instantiateType(root.extendsType, combinedMapper) : extendsType; + if (!checkTypeDeferred && !isDeferredType(inferredExtendsType, checkTuples)) { + if (!(inferredExtendsType.flags & 3 /* AnyOrUnknown */) && (checkType.flags & 1 /* Any */ || !isTypeAssignableTo(getPermissiveInstantiation(checkType), getPermissiveInstantiation(inferredExtendsType)))) { + if (checkType.flags & 1 /* Any */ || forConstraint && !(inferredExtendsType.flags & 131072 /* Never */) && someType(getPermissiveInstantiation(inferredExtendsType), (t) => isTypeAssignableTo(t, getPermissiveInstantiation(checkType)))) { + (extraTypes || (extraTypes = [])).push(instantiateType(getTypeFromTypeNode(root.node.trueType), combinedMapper || mapper)); + } + const falseType2 = getTypeFromTypeNode(root.node.falseType); + if (falseType2.flags & 16777216 /* Conditional */) { + const newRoot = falseType2.root; + if (newRoot.node.parent === root.node && (!newRoot.isDistributive || newRoot.checkType === root.checkType)) { + root = newRoot; + continue; + } + if (canTailRecurse(falseType2, mapper)) { + continue; + } + } + result = instantiateType(falseType2, mapper); + break; + } + if (inferredExtendsType.flags & 3 /* AnyOrUnknown */ || isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(inferredExtendsType))) { + const trueType2 = getTypeFromTypeNode(root.node.trueType); + const trueMapper = combinedMapper || mapper; + if (canTailRecurse(trueType2, trueMapper)) { + continue; + } + result = instantiateType(trueType2, trueMapper); + break; + } + } + result = createType(16777216 /* Conditional */); + result.root = root; + result.checkType = instantiateType(root.checkType, mapper); + result.extendsType = instantiateType(root.extendsType, mapper); + result.mapper = mapper; + result.combinedMapper = combinedMapper; + result.aliasSymbol = aliasSymbol || root.aliasSymbol; + result.aliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(root.aliasTypeArguments, mapper); + break; + } + return extraTypes ? getUnionType(append(extraTypes, result)) : result; + function canTailRecurse(newType, newMapper) { + if (newType.flags & 16777216 /* Conditional */ && newMapper) { + const newRoot = newType.root; + if (newRoot.outerTypeParameters) { + const typeParamMapper = combineTypeMappers(newType.mapper, newMapper); + const typeArguments = map(newRoot.outerTypeParameters, (t) => getMappedType(t, typeParamMapper)); + const newRootMapper = createTypeMapper(newRoot.outerTypeParameters, typeArguments); + const newCheckType = newRoot.isDistributive ? getMappedType(newRoot.checkType, newRootMapper) : void 0; + if (!newCheckType || newCheckType === newRoot.checkType || !(newCheckType.flags & (1048576 /* Union */ | 131072 /* Never */))) { + root = newRoot; + mapper = newRootMapper; + aliasSymbol = void 0; + aliasTypeArguments = void 0; + if (newRoot.aliasSymbol) { + tailCount++; + } + return true; + } + } + } + return false; + } + } + function getTrueTypeFromConditionalType(type) { + return type.resolvedTrueType || (type.resolvedTrueType = instantiateType(getTypeFromTypeNode(type.root.node.trueType), type.mapper)); + } + function getFalseTypeFromConditionalType(type) { + return type.resolvedFalseType || (type.resolvedFalseType = instantiateType(getTypeFromTypeNode(type.root.node.falseType), type.mapper)); + } + function getInferredTrueTypeFromConditionalType(type) { + return type.resolvedInferredTrueType || (type.resolvedInferredTrueType = type.combinedMapper ? instantiateType(getTypeFromTypeNode(type.root.node.trueType), type.combinedMapper) : getTrueTypeFromConditionalType(type)); + } + function getInferTypeParameters(node) { + let result; + if (node.locals) { + node.locals.forEach((symbol) => { + if (symbol.flags & 262144 /* TypeParameter */) { + result = append(result, getDeclaredTypeOfSymbol(symbol)); + } + }); + } + return result; + } + function isDistributionDependent(root) { + return root.isDistributive && (isTypeParameterPossiblyReferenced(root.checkType, root.node.trueType) || isTypeParameterPossiblyReferenced(root.checkType, root.node.falseType)); + } + function getTypeFromConditionalTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const checkType = getTypeFromTypeNode(node.checkType); + const aliasSymbol = getAliasSymbolForTypeNode(node); + const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); + const allOuterTypeParameters = getOuterTypeParameters( + node, + /*includeThisTypes*/ + true + ); + const outerTypeParameters = aliasTypeArguments ? allOuterTypeParameters : filter(allOuterTypeParameters, (tp) => isTypeParameterPossiblyReferenced(tp, node)); + const root = { + node, + checkType, + extendsType: getTypeFromTypeNode(node.extendsType), + isDistributive: !!(checkType.flags & 262144 /* TypeParameter */), + inferTypeParameters: getInferTypeParameters(node), + outerTypeParameters, + instantiations: void 0, + aliasSymbol, + aliasTypeArguments + }; + links.resolvedType = getConditionalType( + root, + /*mapper*/ + void 0, + /*forConstraint*/ + false + ); + if (outerTypeParameters) { + root.instantiations = /* @__PURE__ */ new Map(); + root.instantiations.set(getTypeListId(outerTypeParameters), links.resolvedType); + } + } + return links.resolvedType; + } + function getTypeFromInferTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node.typeParameter)); + } + return links.resolvedType; + } + function getIdentifierChain(node) { + if (isIdentifier(node)) { + return [node]; + } else { + return append(getIdentifierChain(node.left), node.right); + } + } + function getTypeFromImportTypeNode(node) { + var _a; + const links = getNodeLinks(node); + if (!links.resolvedType) { + if (!isLiteralImportTypeNode(node)) { + error2(node.argument, Diagnostics.String_literal_expected); + links.resolvedSymbol = unknownSymbol; + return links.resolvedType = errorType; + } + const targetMeaning = node.isTypeOf ? 111551 /* Value */ : node.flags & 16777216 /* JSDoc */ ? 111551 /* Value */ | 788968 /* Type */ : 788968 /* Type */; + const innerModuleSymbol = resolveExternalModuleName(node, node.argument.literal); + if (!innerModuleSymbol) { + links.resolvedSymbol = unknownSymbol; + return links.resolvedType = errorType; + } + const isExportEquals = !!((_a = innerModuleSymbol.exports) == null ? void 0 : _a.get("export=" /* ExportEquals */)); + const moduleSymbol = resolveExternalModuleSymbol( + innerModuleSymbol, + /*dontResolveAlias*/ + false + ); + if (!nodeIsMissing(node.qualifier)) { + const nameStack = getIdentifierChain(node.qualifier); + let currentNamespace = moduleSymbol; + let current; + while (current = nameStack.shift()) { + const meaning = nameStack.length ? 1920 /* Namespace */ : targetMeaning; + const mergedResolvedSymbol = getMergedSymbol(resolveSymbol(currentNamespace)); + const symbolFromVariable = node.isTypeOf || isInJSFile(node) && isExportEquals ? getPropertyOfType( + getTypeOfSymbol(mergedResolvedSymbol), + current.escapedText, + /*skipObjectFunctionPropertyAugment*/ + false, + /*includeTypeOnlyMembers*/ + true + ) : void 0; + const symbolFromModule = node.isTypeOf ? void 0 : getSymbol2(getExportsOfSymbol(mergedResolvedSymbol), current.escapedText, meaning); + const next = symbolFromModule ?? symbolFromVariable; + if (!next) { + error2(current, Diagnostics.Namespace_0_has_no_exported_member_1, getFullyQualifiedName(currentNamespace), declarationNameToString(current)); + return links.resolvedType = errorType; + } + getNodeLinks(current).resolvedSymbol = next; + getNodeLinks(current.parent).resolvedSymbol = next; + currentNamespace = next; + } + links.resolvedType = resolveImportSymbolType(node, links, currentNamespace, targetMeaning); + } else { + if (moduleSymbol.flags & targetMeaning) { + links.resolvedType = resolveImportSymbolType(node, links, moduleSymbol, targetMeaning); + } else { + const errorMessage = targetMeaning === 111551 /* Value */ ? Diagnostics.Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here : Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0; + error2(node, errorMessage, node.argument.literal.text); + links.resolvedSymbol = unknownSymbol; + links.resolvedType = errorType; + } + } + } + return links.resolvedType; + } + function resolveImportSymbolType(node, links, symbol, meaning) { + const resolvedSymbol = resolveSymbol(symbol); + links.resolvedSymbol = resolvedSymbol; + if (meaning === 111551 /* Value */) { + return getInstantiationExpressionType(getTypeOfSymbol(symbol), node); + } else { + return getTypeReferenceType(node, resolvedSymbol); + } + } + function getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + const aliasSymbol = getAliasSymbolForTypeNode(node); + if (!node.symbol || getMembersOfSymbol(node.symbol).size === 0 && !aliasSymbol) { + links.resolvedType = emptyTypeLiteralType; + } else { + let type = createObjectType(16 /* Anonymous */, node.symbol); + type.aliasSymbol = aliasSymbol; + type.aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol); + if (isJSDocTypeLiteral(node) && node.isArrayType) { + type = createArrayType(type); + } + links.resolvedType = type; + } + } + return links.resolvedType; + } + function getAliasSymbolForTypeNode(node) { + let host2 = node.parent; + while (isParenthesizedTypeNode(host2) || isJSDocTypeExpression(host2) || isTypeOperatorNode(host2) && host2.operator === 148 /* ReadonlyKeyword */) { + host2 = host2.parent; + } + return isTypeAlias(host2) ? getSymbolOfDeclaration(host2) : void 0; + } + function getTypeArgumentsForAliasSymbol(symbol) { + return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : void 0; + } + function isNonGenericObjectType(type) { + return !!(type.flags & 524288 /* Object */) && !isGenericMappedType(type); + } + function isEmptyObjectTypeOrSpreadsIntoEmptyObject(type) { + return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */)); + } + function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) { + if (!(type.flags & 1048576 /* Union */)) { + return type; + } + if (every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) { + return find(type.types, isEmptyObjectType) || emptyObjectType; + } + const firstType = find(type.types, (t) => !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t)); + if (!firstType) { + return type; + } + const secondType = find(type.types, (t) => t !== firstType && !isEmptyObjectTypeOrSpreadsIntoEmptyObject(t)); + if (secondType) { + return type; + } + return getAnonymousPartialType(firstType); + function getAnonymousPartialType(type2) { + const members = createSymbolTable(); + for (const prop of getPropertiesOfType(type2)) { + if (getDeclarationModifierFlagsFromSymbol(prop) & (2 /* Private */ | 4 /* Protected */)) { + } else if (isSpreadableProperty(prop)) { + const isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */); + const flags = 4 /* Property */ | 16777216 /* Optional */; + const result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0)); + result.links.type = isSetonlyAccessor ? undefinedType : addOptionality( + getTypeOfSymbol(prop), + /*isProperty*/ + true + ); + result.declarations = prop.declarations; + result.links.nameType = getSymbolLinks(prop).nameType; + result.links.syntheticOrigin = prop; + members.set(prop.escapedName, result); + } + } + const spread = createAnonymousType(type2.symbol, members, emptyArray, emptyArray, getIndexInfosOfType(type2)); + spread.objectFlags |= 128 /* ObjectLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */; + return spread; + } + } + function getSpreadType(left, right, symbol, objectFlags, readonly) { + if (left.flags & 1 /* Any */ || right.flags & 1 /* Any */) { + return anyType; + } + if (left.flags & 2 /* Unknown */ || right.flags & 2 /* Unknown */) { + return unknownType; + } + if (left.flags & 131072 /* Never */) { + return right; + } + if (right.flags & 131072 /* Never */) { + return left; + } + left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly); + if (left.flags & 1048576 /* Union */) { + return checkCrossProductUnion([left, right]) ? mapType(left, (t) => getSpreadType(t, right, symbol, objectFlags, readonly)) : errorType; + } + right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly); + if (right.flags & 1048576 /* Union */) { + return checkCrossProductUnion([left, right]) ? mapType(right, (t) => getSpreadType(left, t, symbol, objectFlags, readonly)) : errorType; + } + if (right.flags & (528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */)) { + return left; + } + if (isGenericObjectType(left) || isGenericObjectType(right)) { + if (isEmptyObjectType(left)) { + return right; + } + if (left.flags & 2097152 /* Intersection */) { + const types = left.types; + const lastLeft = types[types.length - 1]; + if (isNonGenericObjectType(lastLeft) && isNonGenericObjectType(right)) { + return getIntersectionType(concatenate(types.slice(0, types.length - 1), [getSpreadType(lastLeft, right, symbol, objectFlags, readonly)])); + } + } + return getIntersectionType([left, right]); + } + const members = createSymbolTable(); + const skippedPrivateMembers = /* @__PURE__ */ new Set(); + const indexInfos = left === emptyObjectType ? getIndexInfosOfType(right) : getUnionIndexInfos([left, right]); + for (const rightProp of getPropertiesOfType(right)) { + if (getDeclarationModifierFlagsFromSymbol(rightProp) & (2 /* Private */ | 4 /* Protected */)) { + skippedPrivateMembers.add(rightProp.escapedName); + } else if (isSpreadableProperty(rightProp)) { + members.set(rightProp.escapedName, getSpreadSymbol(rightProp, readonly)); + } + } + for (const leftProp of getPropertiesOfType(left)) { + if (skippedPrivateMembers.has(leftProp.escapedName) || !isSpreadableProperty(leftProp)) { + continue; + } + if (members.has(leftProp.escapedName)) { + const rightProp = members.get(leftProp.escapedName); + const rightType = getTypeOfSymbol(rightProp); + if (rightProp.flags & 16777216 /* Optional */) { + const declarations = concatenate(leftProp.declarations, rightProp.declarations); + const flags = 4 /* Property */ | leftProp.flags & 16777216 /* Optional */; + const result = createSymbol(flags, leftProp.escapedName); + const leftType = getTypeOfSymbol(leftProp); + const leftTypeWithoutUndefined = removeMissingOrUndefinedType(leftType); + const rightTypeWithoutUndefined = removeMissingOrUndefinedType(rightType); + result.links.type = leftTypeWithoutUndefined === rightTypeWithoutUndefined ? leftType : getUnionType([leftType, rightTypeWithoutUndefined], 2 /* Subtype */); + result.links.leftSpread = leftProp; + result.links.rightSpread = rightProp; + result.declarations = declarations; + result.links.nameType = getSymbolLinks(leftProp).nameType; + members.set(leftProp.escapedName, result); + } + } else { + members.set(leftProp.escapedName, getSpreadSymbol(leftProp, readonly)); + } + } + const spread = createAnonymousType(symbol, members, emptyArray, emptyArray, sameMap(indexInfos, (info) => getIndexInfoWithReadonly(info, readonly))); + spread.objectFlags |= 128 /* ObjectLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */ | 2097152 /* ContainsSpread */ | objectFlags; + return spread; + } + function isSpreadableProperty(prop) { + var _a; + return !some(prop.declarations, isPrivateIdentifierClassElementDeclaration) && (!(prop.flags & (8192 /* Method */ | 32768 /* GetAccessor */ | 65536 /* SetAccessor */)) || !((_a = prop.declarations) == null ? void 0 : _a.some((decl) => isClassLike(decl.parent)))); + } + function getSpreadSymbol(prop, readonly) { + const isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */); + if (!isSetonlyAccessor && readonly === isReadonlySymbol(prop)) { + return prop; + } + const flags = 4 /* Property */ | prop.flags & 16777216 /* Optional */; + const result = createSymbol(flags, prop.escapedName, getIsLateCheckFlag(prop) | (readonly ? 8 /* Readonly */ : 0)); + result.links.type = isSetonlyAccessor ? undefinedType : getTypeOfSymbol(prop); + result.declarations = prop.declarations; + result.links.nameType = getSymbolLinks(prop).nameType; + result.links.syntheticOrigin = prop; + return result; + } + function getIndexInfoWithReadonly(info, readonly) { + return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration, info.components) : info; + } + function createLiteralType(flags, value, symbol, regularType) { + const type = createTypeWithSymbol(flags, symbol); + type.value = value; + type.regularType = regularType || type; + return type; + } + function getFreshTypeOfLiteralType(type) { + if (type.flags & 2976 /* Freshable */) { + if (!type.freshType) { + const freshType = createLiteralType(type.flags, type.value, type.symbol, type); + freshType.freshType = freshType; + type.freshType = freshType; + } + return type.freshType; + } + return type; + } + function getRegularTypeOfLiteralType(type) { + return type.flags & 2976 /* Freshable */ ? type.regularType : type.flags & 1048576 /* Union */ ? type.regularType || (type.regularType = mapType(type, getRegularTypeOfLiteralType)) : type; + } + function isFreshLiteralType(type) { + return !!(type.flags & 2976 /* Freshable */) && type.freshType === type; + } + function getStringLiteralType(value) { + let type; + return stringLiteralTypes.get(value) || (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type); + } + function getNumberLiteralType(value) { + let type; + return numberLiteralTypes.get(value) || (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type); + } + function getBigIntLiteralType(value) { + let type; + const key = pseudoBigIntToString(value); + return bigIntLiteralTypes.get(key) || (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type); + } + function getEnumLiteralType(value, enumId, symbol) { + let type; + const key = `${enumId}${typeof value === "string" ? "@" : "#"}${value}`; + const flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */); + return enumLiteralTypes.get(key) || (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type); + } + function getTypeFromLiteralTypeNode(node) { + if (node.literal.kind === 106 /* NullKeyword */) { + return nullType; + } + const links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getRegularTypeOfLiteralType(checkExpression(node.literal)); + } + return links.resolvedType; + } + function createUniqueESSymbolType(symbol) { + const type = createTypeWithSymbol(8192 /* UniqueESSymbol */, symbol); + type.escapedName = `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}`; + return type; + } + function getESSymbolLikeTypeForNode(node) { + if (isInJSFile(node) && isJSDocTypeExpression(node)) { + const host2 = getJSDocHost(node); + if (host2) { + node = getSingleVariableOfVariableStatement(host2) || host2; + } + } + if (isValidESSymbolDeclaration(node)) { + const symbol = isCommonJsExportPropertyAssignment(node) ? getSymbolOfNode(node.left) : getSymbolOfNode(node); + if (symbol) { + const links = getSymbolLinks(symbol); + return links.uniqueESSymbolType || (links.uniqueESSymbolType = createUniqueESSymbolType(symbol)); + } + } + return esSymbolType; + } + function getThisType(node) { + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + const parent2 = container && container.parent; + if (parent2 && (isClassLike(parent2) || parent2.kind === 265 /* InterfaceDeclaration */)) { + if (!isStatic(container) && (!isConstructorDeclaration(container) || isNodeDescendantOf(node, container.body))) { + return getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(parent2)).thisType; + } + } + if (parent2 && isObjectLiteralExpression(parent2) && isBinaryExpression(parent2.parent) && getAssignmentDeclarationKind(parent2.parent) === 6 /* Prototype */) { + return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(parent2.parent.left).parent).thisType; + } + const host2 = node.flags & 16777216 /* JSDoc */ ? getHostSignatureFromJSDoc(node) : void 0; + if (host2 && isFunctionExpression(host2) && isBinaryExpression(host2.parent) && getAssignmentDeclarationKind(host2.parent) === 3 /* PrototypeProperty */) { + return getDeclaredTypeOfClassOrInterface(getSymbolOfNode(host2.parent.left).parent).thisType; + } + if (isJSConstructor(container) && isNodeDescendantOf(node, container.body)) { + return getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(container)).thisType; + } + error2(node, Diagnostics.A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface); + return errorType; + } + function getTypeFromThisTypeNode(node) { + const links = getNodeLinks(node); + if (!links.resolvedType) { + links.resolvedType = getThisType(node); + } + return links.resolvedType; + } + function getTypeFromRestTypeNode(node) { + return getTypeFromTypeNode(getArrayElementTypeNode(node.type) || node.type); + } + function getArrayElementTypeNode(node) { + switch (node.kind) { + case 197 /* ParenthesizedType */: + return getArrayElementTypeNode(node.type); + case 190 /* TupleType */: + if (node.elements.length === 1) { + node = node.elements[0]; + if (node.kind === 192 /* RestType */ || node.kind === 203 /* NamedTupleMember */ && node.dotDotDotToken) { + return getArrayElementTypeNode(node.type); + } + } + break; + case 189 /* ArrayType */: + return node.elementType; + } + return void 0; + } + function getTypeFromNamedTupleTypeNode(node) { + const links = getNodeLinks(node); + return links.resolvedType || (links.resolvedType = node.dotDotDotToken ? getTypeFromRestTypeNode(node) : addOptionality( + getTypeFromTypeNode(node.type), + /*isProperty*/ + true, + !!node.questionToken + )); + } + function getTypeFromTypeNode(node) { + return getConditionalFlowTypeOfType(getTypeFromTypeNodeWorker(node), node); + } + function getTypeFromTypeNodeWorker(node) { + switch (node.kind) { + case 133 /* AnyKeyword */: + case 313 /* JSDocAllType */: + case 314 /* JSDocUnknownType */: + return anyType; + case 159 /* UnknownKeyword */: + return unknownType; + case 154 /* StringKeyword */: + return stringType; + case 150 /* NumberKeyword */: + return numberType; + case 163 /* BigIntKeyword */: + return bigintType; + case 136 /* BooleanKeyword */: + return booleanType; + case 155 /* SymbolKeyword */: + return esSymbolType; + case 116 /* VoidKeyword */: + return voidType; + case 157 /* UndefinedKeyword */: + return undefinedType; + case 106 /* NullKeyword */: + return nullType; + case 146 /* NeverKeyword */: + return neverType; + case 151 /* ObjectKeyword */: + return node.flags & 524288 /* JavaScriptFile */ && !noImplicitAny ? anyType : nonPrimitiveType; + case 141 /* IntrinsicKeyword */: + return intrinsicMarkerType; + case 198 /* ThisType */: + case 110 /* ThisKeyword */: + return getTypeFromThisTypeNode(node); + case 202 /* LiteralType */: + return getTypeFromLiteralTypeNode(node); + case 184 /* TypeReference */: + return getTypeFromTypeReference(node); + case 183 /* TypePredicate */: + return node.assertsModifier ? voidType : booleanType; + case 234 /* ExpressionWithTypeArguments */: + return getTypeFromTypeReference(node); + case 187 /* TypeQuery */: + return getTypeFromTypeQueryNode(node); + case 189 /* ArrayType */: + case 190 /* TupleType */: + return getTypeFromArrayOrTupleTypeNode(node); + case 191 /* OptionalType */: + return getTypeFromOptionalTypeNode(node); + case 193 /* UnionType */: + return getTypeFromUnionTypeNode(node); + case 194 /* IntersectionType */: + return getTypeFromIntersectionTypeNode(node); + case 315 /* JSDocNullableType */: + return getTypeFromJSDocNullableTypeNode(node); + case 317 /* JSDocOptionalType */: + return addOptionality(getTypeFromTypeNode(node.type)); + case 203 /* NamedTupleMember */: + return getTypeFromNamedTupleTypeNode(node); + case 197 /* ParenthesizedType */: + case 316 /* JSDocNonNullableType */: + case 310 /* JSDocTypeExpression */: + return getTypeFromTypeNode(node.type); + case 192 /* RestType */: + return getTypeFromRestTypeNode(node); + case 319 /* JSDocVariadicType */: + return getTypeFromJSDocVariadicType(node); + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 188 /* TypeLiteral */: + case 323 /* JSDocTypeLiteral */: + case 318 /* JSDocFunctionType */: + case 324 /* JSDocSignature */: + return getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); + case 199 /* TypeOperator */: + return getTypeFromTypeOperatorNode(node); + case 200 /* IndexedAccessType */: + return getTypeFromIndexedAccessTypeNode(node); + case 201 /* MappedType */: + return getTypeFromMappedTypeNode(node); + case 195 /* ConditionalType */: + return getTypeFromConditionalTypeNode(node); + case 196 /* InferType */: + return getTypeFromInferTypeNode(node); + case 204 /* TemplateLiteralType */: + return getTypeFromTemplateTypeNode(node); + case 206 /* ImportType */: + return getTypeFromImportTypeNode(node); + // This function assumes that an identifier, qualified name, or property access expression is a type expression + // Callers should first ensure this by calling `isPartOfTypeNode` + // TODO(rbuckton): These aren't valid TypeNodes, but we treat them as such because of `isPartOfTypeNode`, which returns `true` for things that aren't `TypeNode`s. + case 80 /* Identifier */: + case 167 /* QualifiedName */: + case 212 /* PropertyAccessExpression */: + const symbol = getSymbolAtLocation(node); + return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType; + default: + return errorType; + } + } + function instantiateList(items, mapper, instantiator) { + if (items && items.length) { + for (let i = 0; i < items.length; i++) { + const item = items[i]; + const mapped = instantiator(item, mapper); + if (item !== mapped) { + const result = i === 0 ? [] : items.slice(0, i); + result.push(mapped); + for (i++; i < items.length; i++) { + result.push(instantiator(items[i], mapper)); + } + return result; + } + } + } + return items; + } + function instantiateTypes(types, mapper) { + return instantiateList(types, mapper, instantiateType); + } + function instantiateSignatures(signatures, mapper) { + return instantiateList(signatures, mapper, instantiateSignature); + } + function instantiateIndexInfos(indexInfos, mapper) { + return instantiateList(indexInfos, mapper, instantiateIndexInfo); + } + function createTypeMapper(sources, targets) { + return sources.length === 1 ? makeUnaryTypeMapper(sources[0], targets ? targets[0] : anyType) : makeArrayTypeMapper(sources, targets); + } + function getMappedType(type, mapper) { + switch (mapper.kind) { + case 0 /* Simple */: + return type === mapper.source ? mapper.target : type; + case 1 /* Array */: { + const sources = mapper.sources; + const targets = mapper.targets; + for (let i = 0; i < sources.length; i++) { + if (type === sources[i]) { + return targets ? targets[i] : anyType; + } + } + return type; + } + case 2 /* Deferred */: { + const sources = mapper.sources; + const targets = mapper.targets; + for (let i = 0; i < sources.length; i++) { + if (type === sources[i]) { + return targets[i](); + } + } + return type; + } + case 3 /* Function */: + return mapper.func(type); + case 4 /* Composite */: + case 5 /* Merged */: + const t1 = getMappedType(type, mapper.mapper1); + return t1 !== type && mapper.kind === 4 /* Composite */ ? instantiateType(t1, mapper.mapper2) : getMappedType(t1, mapper.mapper2); + } + } + function makeUnaryTypeMapper(source, target) { + return Debug.attachDebugPrototypeIfDebug({ kind: 0 /* Simple */, source, target }); + } + function makeArrayTypeMapper(sources, targets) { + return Debug.attachDebugPrototypeIfDebug({ kind: 1 /* Array */, sources, targets }); + } + function makeFunctionTypeMapper(func, debugInfo) { + return Debug.attachDebugPrototypeIfDebug({ kind: 3 /* Function */, func, debugInfo: Debug.isDebugging ? debugInfo : void 0 }); + } + function makeDeferredTypeMapper(sources, targets) { + return Debug.attachDebugPrototypeIfDebug({ kind: 2 /* Deferred */, sources, targets }); + } + function makeCompositeTypeMapper(kind, mapper1, mapper2) { + return Debug.attachDebugPrototypeIfDebug({ kind, mapper1, mapper2 }); + } + function createTypeEraser(sources) { + return createTypeMapper( + sources, + /*targets*/ + void 0 + ); + } + function createBackreferenceMapper(context, index) { + const forwardInferences = context.inferences.slice(index); + return createTypeMapper(map(forwardInferences, (i) => i.typeParameter), map(forwardInferences, () => unknownType)); + } + function createOuterReturnMapper(context) { + return context.outerReturnMapper ?? (context.outerReturnMapper = mergeTypeMappers(context.returnMapper, cloneInferenceContext(context).mapper)); + } + function combineTypeMappers(mapper1, mapper2) { + return mapper1 ? makeCompositeTypeMapper(4 /* Composite */, mapper1, mapper2) : mapper2; + } + function mergeTypeMappers(mapper1, mapper2) { + return mapper1 ? makeCompositeTypeMapper(5 /* Merged */, mapper1, mapper2) : mapper2; + } + function prependTypeMapping(source, target, mapper) { + return !mapper ? makeUnaryTypeMapper(source, target) : makeCompositeTypeMapper(5 /* Merged */, makeUnaryTypeMapper(source, target), mapper); + } + function appendTypeMapping(mapper, source, target) { + return !mapper ? makeUnaryTypeMapper(source, target) : makeCompositeTypeMapper(5 /* Merged */, mapper, makeUnaryTypeMapper(source, target)); + } + function getRestrictiveTypeParameter(tp) { + return !tp.constraint && !getConstraintDeclaration(tp) || tp.constraint === noConstraintType ? tp : tp.restrictiveInstantiation || (tp.restrictiveInstantiation = createTypeParameter(tp.symbol), tp.restrictiveInstantiation.constraint = noConstraintType, tp.restrictiveInstantiation); + } + function cloneTypeParameter(typeParameter) { + const result = createTypeParameter(typeParameter.symbol); + result.target = typeParameter; + return result; + } + function instantiateTypePredicate(predicate, mapper) { + return createTypePredicate(predicate.kind, predicate.parameterName, predicate.parameterIndex, instantiateType(predicate.type, mapper)); + } + function instantiateSignature(signature, mapper, eraseTypeParameters) { + let freshTypeParameters; + if (signature.typeParameters && !eraseTypeParameters) { + freshTypeParameters = map(signature.typeParameters, cloneTypeParameter); + mapper = combineTypeMappers(createTypeMapper(signature.typeParameters, freshTypeParameters), mapper); + for (const tp of freshTypeParameters) { + tp.mapper = mapper; + } + } + const result = createSignature( + signature.declaration, + freshTypeParameters, + signature.thisParameter && instantiateSymbol(signature.thisParameter, mapper), + instantiateList(signature.parameters, mapper, instantiateSymbol), + /*resolvedReturnType*/ + void 0, + /*resolvedTypePredicate*/ + void 0, + signature.minArgumentCount, + signature.flags & 167 /* PropagatingFlags */ + ); + result.target = signature; + result.mapper = mapper; + return result; + } + function instantiateSymbol(symbol, mapper) { + const links = getSymbolLinks(symbol); + if (links.type && !couldContainTypeVariables(links.type)) { + if (!(symbol.flags & 65536 /* SetAccessor */)) { + return symbol; + } + if (links.writeType && !couldContainTypeVariables(links.writeType)) { + return symbol; + } + } + if (getCheckFlags(symbol) & 1 /* Instantiated */) { + symbol = links.target; + mapper = combineTypeMappers(links.mapper, mapper); + } + const result = createSymbol(symbol.flags, symbol.escapedName, 1 /* Instantiated */ | getCheckFlags(symbol) & (8 /* Readonly */ | 4096 /* Late */ | 16384 /* OptionalParameter */ | 32768 /* RestParameter */)); + result.declarations = symbol.declarations; + result.parent = symbol.parent; + result.links.target = symbol; + result.links.mapper = mapper; + if (symbol.valueDeclaration) { + result.valueDeclaration = symbol.valueDeclaration; + } + if (links.nameType) { + result.links.nameType = links.nameType; + } + return result; + } + function getObjectTypeInstantiation(type, mapper, aliasSymbol, aliasTypeArguments) { + const declaration = type.objectFlags & 4 /* Reference */ ? type.node : type.objectFlags & 8388608 /* InstantiationExpressionType */ ? type.node : type.symbol.declarations[0]; + const links = getNodeLinks(declaration); + const target = type.objectFlags & 4 /* Reference */ ? links.resolvedType : type.objectFlags & 64 /* Instantiated */ ? type.target : type; + let typeParameters = links.outerTypeParameters; + if (!typeParameters) { + let outerTypeParameters = getOuterTypeParameters( + declaration, + /*includeThisTypes*/ + true + ); + if (isJSConstructor(declaration)) { + const templateTagParameters = getTypeParametersFromDeclaration(declaration); + outerTypeParameters = addRange(outerTypeParameters, templateTagParameters); + } + typeParameters = outerTypeParameters || emptyArray; + const allDeclarations = type.objectFlags & (4 /* Reference */ | 8388608 /* InstantiationExpressionType */) ? [declaration] : type.symbol.declarations; + typeParameters = (target.objectFlags & (4 /* Reference */ | 8388608 /* InstantiationExpressionType */) || target.symbol.flags & 8192 /* Method */ || target.symbol.flags & 2048 /* TypeLiteral */) && !target.aliasTypeArguments ? filter(typeParameters, (tp) => some(allDeclarations, (d) => isTypeParameterPossiblyReferenced(tp, d))) : typeParameters; + links.outerTypeParameters = typeParameters; + } + if (typeParameters.length) { + const combinedMapper = combineTypeMappers(type.mapper, mapper); + const typeArguments = map(typeParameters, (t) => getMappedType(t, combinedMapper)); + const newAliasSymbol = aliasSymbol || type.aliasSymbol; + const newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper); + const id = getTypeListId(typeArguments) + getAliasId(newAliasSymbol, newAliasTypeArguments); + if (!target.instantiations) { + target.instantiations = /* @__PURE__ */ new Map(); + target.instantiations.set(getTypeListId(typeParameters) + getAliasId(target.aliasSymbol, target.aliasTypeArguments), target); + } + let result = target.instantiations.get(id); + if (!result) { + let newMapper = createTypeMapper(typeParameters, typeArguments); + if (target.objectFlags & 134217728 /* SingleSignatureType */ && mapper) { + newMapper = combineTypeMappers(newMapper, mapper); + } + result = target.objectFlags & 4 /* Reference */ ? createDeferredTypeReference(type.target, type.node, newMapper, newAliasSymbol, newAliasTypeArguments) : target.objectFlags & 32 /* Mapped */ ? instantiateMappedType(target, newMapper, newAliasSymbol, newAliasTypeArguments) : instantiateAnonymousType(target, newMapper, newAliasSymbol, newAliasTypeArguments); + target.instantiations.set(id, result); + const resultObjectFlags = getObjectFlags(result); + if (result.flags & 3899393 /* ObjectFlagsType */ && !(resultObjectFlags & 524288 /* CouldContainTypeVariablesComputed */)) { + const resultCouldContainTypeVariables = some(typeArguments, couldContainTypeVariables); + if (!(getObjectFlags(result) & 524288 /* CouldContainTypeVariablesComputed */)) { + if (resultObjectFlags & (32 /* Mapped */ | 16 /* Anonymous */ | 4 /* Reference */)) { + result.objectFlags |= 524288 /* CouldContainTypeVariablesComputed */ | (resultCouldContainTypeVariables ? 1048576 /* CouldContainTypeVariables */ : 0); + } else { + result.objectFlags |= !resultCouldContainTypeVariables ? 524288 /* CouldContainTypeVariablesComputed */ : 0; + } + } + } + } + return result; + } + return type; + } + function maybeTypeParameterReference(node) { + return !(node.parent.kind === 184 /* TypeReference */ && node.parent.typeArguments && node === node.parent.typeName || node.parent.kind === 206 /* ImportType */ && node.parent.typeArguments && node === node.parent.qualifier); + } + function isTypeParameterPossiblyReferenced(tp, node) { + if (tp.symbol && tp.symbol.declarations && tp.symbol.declarations.length === 1) { + const container = tp.symbol.declarations[0].parent; + for (let n = node; n !== container; n = n.parent) { + if (!n || n.kind === 242 /* Block */ || n.kind === 195 /* ConditionalType */ && forEachChild(n.extendsType, containsReference)) { + return true; + } + } + return containsReference(node); + } + return true; + function containsReference(node2) { + switch (node2.kind) { + case 198 /* ThisType */: + return !!tp.isThisType; + case 80 /* Identifier */: + return !tp.isThisType && isPartOfTypeNode(node2) && maybeTypeParameterReference(node2) && getTypeFromTypeNodeWorker(node2) === tp; + // use worker because we're looking for === equality + case 187 /* TypeQuery */: + const entityName = node2.exprName; + const firstIdentifier = getFirstIdentifier(entityName); + if (!isThisIdentifier(firstIdentifier)) { + const firstIdentifierSymbol = getResolvedSymbol(firstIdentifier); + const tpDeclaration = tp.symbol.declarations[0]; + const tpScope = tpDeclaration.kind === 169 /* TypeParameter */ ? tpDeclaration.parent : ( + // Type parameter is a regular type parameter, e.g. foo + tp.isThisType ? tpDeclaration : ( + // Type parameter is the this type, and its declaration is the class declaration. + void 0 + ) + ); + if (firstIdentifierSymbol.declarations && tpScope) { + return some(firstIdentifierSymbol.declarations, (idDecl) => isNodeDescendantOf(idDecl, tpScope)) || some(node2.typeArguments, containsReference); + } + } + return true; + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + return !node2.type && !!node2.body || some(node2.typeParameters, containsReference) || some(node2.parameters, containsReference) || !!node2.type && containsReference(node2.type); + } + return !!forEachChild(node2, containsReference); + } + } + function getHomomorphicTypeVariable(type) { + const constraintType = getConstraintTypeFromMappedType(type); + if (constraintType.flags & 4194304 /* Index */) { + const typeVariable = getActualTypeVariable(constraintType.type); + if (typeVariable.flags & 262144 /* TypeParameter */) { + return typeVariable; + } + } + return void 0; + } + function instantiateMappedType(type, mapper, aliasSymbol, aliasTypeArguments) { + const typeVariable = getHomomorphicTypeVariable(type); + if (typeVariable) { + const mappedTypeVariable = instantiateType(typeVariable, mapper); + if (typeVariable !== mappedTypeVariable) { + return mapTypeWithAlias(getReducedType(mappedTypeVariable), instantiateConstituent, aliasSymbol, aliasTypeArguments); + } + } + return instantiateType(getConstraintTypeFromMappedType(type), mapper) === wildcardType ? wildcardType : instantiateAnonymousType(type, mapper, aliasSymbol, aliasTypeArguments); + function instantiateConstituent(t) { + if (t.flags & (3 /* AnyOrUnknown */ | 58982400 /* InstantiableNonPrimitive */ | 524288 /* Object */ | 2097152 /* Intersection */) && t !== wildcardType && !isErrorType(t)) { + if (!type.declaration.nameType) { + let constraint; + if (isArrayType(t) || t.flags & 1 /* Any */ && findResolutionCycleStartIndex(typeVariable, 4 /* ImmediateBaseConstraint */) < 0 && (constraint = getConstraintOfTypeParameter(typeVariable)) && everyType(constraint, isArrayOrTupleType)) { + return instantiateMappedArrayType(t, type, prependTypeMapping(typeVariable, t, mapper)); + } + if (isTupleType(t)) { + return instantiateMappedTupleType(t, type, typeVariable, mapper); + } + if (isArrayOrTupleOrIntersection(t)) { + return getIntersectionType(map(t.types, instantiateConstituent)); + } + } + return instantiateAnonymousType(type, prependTypeMapping(typeVariable, t, mapper)); + } + return t; + } + } + function getModifiedReadonlyState(state, modifiers) { + return modifiers & 1 /* IncludeReadonly */ ? true : modifiers & 2 /* ExcludeReadonly */ ? false : state; + } + function instantiateMappedTupleType(tupleType, mappedType, typeVariable, mapper) { + const elementFlags = tupleType.target.elementFlags; + const fixedLength = tupleType.target.fixedLength; + const fixedMapper = fixedLength ? prependTypeMapping(typeVariable, tupleType, mapper) : mapper; + const newElementTypes = map(getElementTypes(tupleType), (type, i) => { + const flags = elementFlags[i]; + return i < fixedLength ? instantiateMappedTypeTemplate(mappedType, getStringLiteralType("" + i), !!(flags & 2 /* Optional */), fixedMapper) : flags & 8 /* Variadic */ ? instantiateType(mappedType, prependTypeMapping(typeVariable, type, mapper)) : getElementTypeOfArrayType(instantiateType(mappedType, prependTypeMapping(typeVariable, createArrayType(type), mapper))) ?? unknownType; + }); + const modifiers = getMappedTypeModifiers(mappedType); + const newElementFlags = modifiers & 4 /* IncludeOptional */ ? map(elementFlags, (f) => f & 1 /* Required */ ? 2 /* Optional */ : f) : modifiers & 8 /* ExcludeOptional */ ? map(elementFlags, (f) => f & 2 /* Optional */ ? 1 /* Required */ : f) : elementFlags; + const newReadonly = getModifiedReadonlyState(tupleType.target.readonly, getMappedTypeModifiers(mappedType)); + return contains(newElementTypes, errorType) ? errorType : createTupleType(newElementTypes, newElementFlags, newReadonly, tupleType.target.labeledElementDeclarations); + } + function instantiateMappedArrayType(arrayType, mappedType, mapper) { + const elementType = instantiateMappedTypeTemplate( + mappedType, + numberType, + /*isOptional*/ + true, + mapper + ); + return isErrorType(elementType) ? errorType : createArrayType(elementType, getModifiedReadonlyState(isReadonlyArrayType(arrayType), getMappedTypeModifiers(mappedType))); + } + function instantiateMappedTypeTemplate(type, key, isOptional, mapper) { + const templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key); + const propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper); + const modifiers = getMappedTypeModifiers(type); + return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType( + propType, + /*isProperty*/ + true + ) : strictNullChecks && modifiers & 8 /* ExcludeOptional */ && isOptional ? getTypeWithFacts(propType, 524288 /* NEUndefined */) : propType; + } + function instantiateAnonymousType(type, mapper, aliasSymbol, aliasTypeArguments) { + Debug.assert(type.symbol, "anonymous type must have symbol to be instantiated"); + const result = createObjectType(type.objectFlags & ~(524288 /* CouldContainTypeVariablesComputed */ | 1048576 /* CouldContainTypeVariables */) | 64 /* Instantiated */, type.symbol); + if (type.objectFlags & 32 /* Mapped */) { + result.declaration = type.declaration; + const origTypeParameter = getTypeParameterFromMappedType(type); + const freshTypeParameter = cloneTypeParameter(origTypeParameter); + result.typeParameter = freshTypeParameter; + mapper = combineTypeMappers(makeUnaryTypeMapper(origTypeParameter, freshTypeParameter), mapper); + freshTypeParameter.mapper = mapper; + } + if (type.objectFlags & 8388608 /* InstantiationExpressionType */) { + result.node = type.node; + } + result.target = type; + result.mapper = mapper; + result.aliasSymbol = aliasSymbol || type.aliasSymbol; + result.aliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper); + result.objectFlags |= result.aliasTypeArguments ? getPropagatingFlagsOfTypes(result.aliasTypeArguments) : 0; + return result; + } + function getConditionalTypeInstantiation(type, mapper, forConstraint, aliasSymbol, aliasTypeArguments) { + const root = type.root; + if (root.outerTypeParameters) { + const typeArguments = map(root.outerTypeParameters, (t) => getMappedType(t, mapper)); + const id = (forConstraint ? "C" : "") + getTypeListId(typeArguments) + getAliasId(aliasSymbol, aliasTypeArguments); + let result = root.instantiations.get(id); + if (!result) { + const newMapper = createTypeMapper(root.outerTypeParameters, typeArguments); + const checkType = root.checkType; + const distributionType = root.isDistributive ? getReducedType(getMappedType(checkType, newMapper)) : void 0; + result = distributionType && checkType !== distributionType && distributionType.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapTypeWithAlias(distributionType, (t) => getConditionalType(root, prependTypeMapping(checkType, t, newMapper), forConstraint), aliasSymbol, aliasTypeArguments) : getConditionalType(root, newMapper, forConstraint, aliasSymbol, aliasTypeArguments); + root.instantiations.set(id, result); + } + return result; + } + return type; + } + function instantiateType(type, mapper) { + return type && mapper ? instantiateTypeWithAlias( + type, + mapper, + /*aliasSymbol*/ + void 0, + /*aliasTypeArguments*/ + void 0 + ) : type; + } + function instantiateTypeWithAlias(type, mapper, aliasSymbol, aliasTypeArguments) { + var _a; + if (!couldContainTypeVariables(type)) { + return type; + } + if (instantiationDepth === 100 || instantiationCount >= 5e6) { + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.CheckTypes, "instantiateType_DepthLimit", { typeId: type.id, instantiationDepth, instantiationCount }); + error2(currentNode, Diagnostics.Type_instantiation_is_excessively_deep_and_possibly_infinite); + return errorType; + } + const index = findActiveMapper(mapper); + if (index === -1) { + pushActiveMapper(mapper); + } + const key = type.id + getAliasId(aliasSymbol, aliasTypeArguments); + const mapperCache = activeTypeMappersCaches[index !== -1 ? index : activeTypeMappersCount - 1]; + const cached = mapperCache.get(key); + if (cached) { + return cached; + } + totalInstantiationCount++; + instantiationCount++; + instantiationDepth++; + const result = instantiateTypeWorker(type, mapper, aliasSymbol, aliasTypeArguments); + if (index === -1) { + popActiveMapper(); + } else { + mapperCache.set(key, result); + } + instantiationDepth--; + return result; + } + function instantiateTypeWorker(type, mapper, aliasSymbol, aliasTypeArguments) { + const flags = type.flags; + if (flags & 262144 /* TypeParameter */) { + return getMappedType(type, mapper); + } + if (flags & 524288 /* Object */) { + const objectFlags = type.objectFlags; + if (objectFlags & (4 /* Reference */ | 16 /* Anonymous */ | 32 /* Mapped */)) { + if (objectFlags & 4 /* Reference */ && !type.node) { + const resolvedTypeArguments = type.resolvedTypeArguments; + const newTypeArguments = instantiateTypes(resolvedTypeArguments, mapper); + return newTypeArguments !== resolvedTypeArguments ? createNormalizedTypeReference(type.target, newTypeArguments) : type; + } + if (objectFlags & 1024 /* ReverseMapped */) { + return instantiateReverseMappedType(type, mapper); + } + return getObjectTypeInstantiation(type, mapper, aliasSymbol, aliasTypeArguments); + } + return type; + } + if (flags & 3145728 /* UnionOrIntersection */) { + const origin = type.flags & 1048576 /* Union */ ? type.origin : void 0; + const types = origin && origin.flags & 3145728 /* UnionOrIntersection */ ? origin.types : type.types; + const newTypes = instantiateTypes(types, mapper); + if (newTypes === types && aliasSymbol === type.aliasSymbol) { + return type; + } + const newAliasSymbol = aliasSymbol || type.aliasSymbol; + const newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper); + return flags & 2097152 /* Intersection */ || origin && origin.flags & 2097152 /* Intersection */ ? getIntersectionType(newTypes, 0 /* None */, newAliasSymbol, newAliasTypeArguments) : getUnionType(newTypes, 1 /* Literal */, newAliasSymbol, newAliasTypeArguments); + } + if (flags & 4194304 /* Index */) { + return getIndexType(instantiateType(type.type, mapper)); + } + if (flags & 134217728 /* TemplateLiteral */) { + return getTemplateLiteralType(type.texts, instantiateTypes(type.types, mapper)); + } + if (flags & 268435456 /* StringMapping */) { + return getStringMappingType(type.symbol, instantiateType(type.type, mapper)); + } + if (flags & 8388608 /* IndexedAccess */) { + const newAliasSymbol = aliasSymbol || type.aliasSymbol; + const newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper); + return getIndexedAccessType( + instantiateType(type.objectType, mapper), + instantiateType(type.indexType, mapper), + type.accessFlags, + /*accessNode*/ + void 0, + newAliasSymbol, + newAliasTypeArguments + ); + } + if (flags & 16777216 /* Conditional */) { + return getConditionalTypeInstantiation( + type, + combineTypeMappers(type.mapper, mapper), + /*forConstraint*/ + false, + aliasSymbol, + aliasTypeArguments + ); + } + if (flags & 33554432 /* Substitution */) { + const newBaseType = instantiateType(type.baseType, mapper); + if (isNoInferType(type)) { + return getNoInferType(newBaseType); + } + const newConstraint = instantiateType(type.constraint, mapper); + if (newBaseType.flags & 8650752 /* TypeVariable */ && isGenericType(newConstraint)) { + return getSubstitutionType(newBaseType, newConstraint); + } + if (newConstraint.flags & 3 /* AnyOrUnknown */ || isTypeAssignableTo(getRestrictiveInstantiation(newBaseType), getRestrictiveInstantiation(newConstraint))) { + return newBaseType; + } + return newBaseType.flags & 8650752 /* TypeVariable */ ? getSubstitutionType(newBaseType, newConstraint) : getIntersectionType([newConstraint, newBaseType]); + } + return type; + } + function instantiateReverseMappedType(type, mapper) { + const innerMappedType = instantiateType(type.mappedType, mapper); + if (!(getObjectFlags(innerMappedType) & 32 /* Mapped */)) { + return type; + } + const innerIndexType = instantiateType(type.constraintType, mapper); + if (!(innerIndexType.flags & 4194304 /* Index */)) { + return type; + } + const instantiated = inferTypeForHomomorphicMappedType( + instantiateType(type.source, mapper), + innerMappedType, + innerIndexType + ); + if (instantiated) { + return instantiated; + } + return type; + } + function getPermissiveInstantiation(type) { + return type.flags & (402784252 /* Primitive */ | 3 /* AnyOrUnknown */ | 131072 /* Never */) ? type : type.permissiveInstantiation || (type.permissiveInstantiation = instantiateType(type, permissiveMapper)); + } + function getRestrictiveInstantiation(type) { + if (type.flags & (402784252 /* Primitive */ | 3 /* AnyOrUnknown */ | 131072 /* Never */)) { + return type; + } + if (type.restrictiveInstantiation) { + return type.restrictiveInstantiation; + } + type.restrictiveInstantiation = instantiateType(type, restrictiveMapper); + type.restrictiveInstantiation.restrictiveInstantiation = type.restrictiveInstantiation; + return type.restrictiveInstantiation; + } + function instantiateIndexInfo(info, mapper) { + return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration, info.components); + } + function isContextSensitive(node) { + Debug.assert(node.kind !== 175 /* MethodDeclaration */ || isObjectLiteralMethod(node)); + switch (node.kind) { + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 263 /* FunctionDeclaration */: + return isContextSensitiveFunctionLikeDeclaration(node); + case 211 /* ObjectLiteralExpression */: + return some(node.properties, isContextSensitive); + case 210 /* ArrayLiteralExpression */: + return some(node.elements, isContextSensitive); + case 228 /* ConditionalExpression */: + return isContextSensitive(node.whenTrue) || isContextSensitive(node.whenFalse); + case 227 /* BinaryExpression */: + return (node.operatorToken.kind === 57 /* BarBarToken */ || node.operatorToken.kind === 61 /* QuestionQuestionToken */) && (isContextSensitive(node.left) || isContextSensitive(node.right)); + case 304 /* PropertyAssignment */: + return isContextSensitive(node.initializer); + case 218 /* ParenthesizedExpression */: + return isContextSensitive(node.expression); + case 293 /* JsxAttributes */: + return some(node.properties, isContextSensitive) || isJsxOpeningElement(node.parent) && some(node.parent.parent.children, isContextSensitive); + case 292 /* JsxAttribute */: { + const { initializer } = node; + return !!initializer && isContextSensitive(initializer); + } + case 295 /* JsxExpression */: { + const { expression } = node; + return !!expression && isContextSensitive(expression); + } + } + return false; + } + function isContextSensitiveFunctionLikeDeclaration(node) { + return hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node); + } + function hasContextSensitiveReturnExpression(node) { + if (node.typeParameters || getEffectiveReturnTypeNode(node) || !node.body) { + return false; + } + if (node.body.kind !== 242 /* Block */) { + return isContextSensitive(node.body); + } + return !!forEachReturnStatement(node.body, (statement) => !!statement.expression && isContextSensitive(statement.expression)); + } + function isContextSensitiveFunctionOrObjectLiteralMethod(func) { + return (isFunctionExpressionOrArrowFunction(func) || isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); + } + function getTypeWithoutSignatures(type) { + if (type.flags & 524288 /* Object */) { + const resolved = resolveStructuredTypeMembers(type); + if (resolved.constructSignatures.length || resolved.callSignatures.length) { + const result = createObjectType(16 /* Anonymous */, type.symbol); + result.members = resolved.members; + result.properties = resolved.properties; + result.callSignatures = emptyArray; + result.constructSignatures = emptyArray; + result.indexInfos = emptyArray; + return result; + } + } else if (type.flags & 2097152 /* Intersection */) { + return getIntersectionType(map(type.types, getTypeWithoutSignatures)); + } + return type; + } + function isTypeIdenticalTo(source, target) { + return isTypeRelatedTo(source, target, identityRelation); + } + function compareTypesIdentical(source, target) { + return isTypeRelatedTo(source, target, identityRelation) ? -1 /* True */ : 0 /* False */; + } + function compareTypesAssignable(source, target) { + return isTypeRelatedTo(source, target, assignableRelation) ? -1 /* True */ : 0 /* False */; + } + function compareTypesSubtypeOf(source, target) { + return isTypeRelatedTo(source, target, subtypeRelation) ? -1 /* True */ : 0 /* False */; + } + function isTypeSubtypeOf(source, target) { + return isTypeRelatedTo(source, target, subtypeRelation); + } + function isTypeStrictSubtypeOf(source, target) { + return isTypeRelatedTo(source, target, strictSubtypeRelation); + } + function isTypeAssignableTo(source, target) { + return isTypeRelatedTo(source, target, assignableRelation); + } + function isTypeDerivedFrom(source, target) { + return source.flags & 1048576 /* Union */ ? every(source.types, (t) => isTypeDerivedFrom(t, target)) : target.flags & 1048576 /* Union */ ? some(target.types, (t) => isTypeDerivedFrom(source, t)) : source.flags & 2097152 /* Intersection */ ? some(source.types, (t) => isTypeDerivedFrom(t, target)) : source.flags & 58982400 /* InstantiableNonPrimitive */ ? isTypeDerivedFrom(getBaseConstraintOfType(source) || unknownType, target) : isEmptyAnonymousObjectType(target) ? !!(source.flags & (524288 /* Object */ | 67108864 /* NonPrimitive */)) : target === globalObjectType ? !!(source.flags & (524288 /* Object */ | 67108864 /* NonPrimitive */)) && !isEmptyAnonymousObjectType(source) : target === globalFunctionType ? !!(source.flags & 524288 /* Object */) && isFunctionObjectType(source) : hasBaseType(source, getTargetType(target)) || isArrayType(target) && !isReadonlyArrayType(target) && isTypeDerivedFrom(source, globalReadonlyArrayType); + } + function isTypeComparableTo(source, target) { + return isTypeRelatedTo(source, target, comparableRelation); + } + function areTypesComparable(type1, type2) { + return isTypeComparableTo(type1, type2) || isTypeComparableTo(type2, type1); + } + function checkTypeAssignableTo(source, target, errorNode, headMessage, containingMessageChain, errorOutputObject) { + return checkTypeRelatedTo(source, target, assignableRelation, errorNode, headMessage, containingMessageChain, errorOutputObject); + } + function checkTypeAssignableToAndOptionallyElaborate(source, target, errorNode, expr, headMessage, containingMessageChain) { + return checkTypeRelatedToAndOptionallyElaborate( + source, + target, + assignableRelation, + errorNode, + expr, + headMessage, + containingMessageChain, + /*errorOutputContainer*/ + void 0 + ); + } + function checkTypeRelatedToAndOptionallyElaborate(source, target, relation, errorNode, expr, headMessage, containingMessageChain, errorOutputContainer) { + if (isTypeRelatedTo(source, target, relation)) return true; + if (!errorNode || !elaborateError(expr, source, target, relation, headMessage, containingMessageChain, errorOutputContainer)) { + return checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer); + } + return false; + } + function isOrHasGenericConditional(type) { + return !!(type.flags & 16777216 /* Conditional */ || type.flags & 2097152 /* Intersection */ && some(type.types, isOrHasGenericConditional)); + } + function elaborateError(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer) { + if (!node || isOrHasGenericConditional(target)) return false; + if (!checkTypeRelatedTo( + source, + target, + relation, + /*errorNode*/ + void 0 + ) && elaborateDidYouMeanToCallOrConstruct(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer)) { + return true; + } + switch (node.kind) { + case 235 /* AsExpression */: + if (!isConstAssertion(node)) { + break; + } + // fallthrough + case 295 /* JsxExpression */: + case 218 /* ParenthesizedExpression */: + return elaborateError(node.expression, source, target, relation, headMessage, containingMessageChain, errorOutputContainer); + case 227 /* BinaryExpression */: + switch (node.operatorToken.kind) { + case 64 /* EqualsToken */: + case 28 /* CommaToken */: + return elaborateError(node.right, source, target, relation, headMessage, containingMessageChain, errorOutputContainer); + } + break; + case 211 /* ObjectLiteralExpression */: + return elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer); + case 210 /* ArrayLiteralExpression */: + return elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer); + case 293 /* JsxAttributes */: + return elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer); + case 220 /* ArrowFunction */: + return elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer); + } + return false; + } + function elaborateDidYouMeanToCallOrConstruct(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer) { + const callSignatures = getSignaturesOfType(source, 0 /* Call */); + const constructSignatures = getSignaturesOfType(source, 1 /* Construct */); + for (const signatures of [constructSignatures, callSignatures]) { + if (some(signatures, (s) => { + const returnType = getReturnTypeOfSignature(s); + return !(returnType.flags & (1 /* Any */ | 131072 /* Never */)) && checkTypeRelatedTo( + returnType, + target, + relation, + /*errorNode*/ + void 0 + ); + })) { + const resultObj = errorOutputContainer || {}; + checkTypeAssignableTo(source, target, node, headMessage, containingMessageChain, resultObj); + const diagnostic = resultObj.errors[resultObj.errors.length - 1]; + addRelatedInfo( + diagnostic, + createDiagnosticForNode( + node, + signatures === constructSignatures ? Diagnostics.Did_you_mean_to_use_new_with_this_expression : Diagnostics.Did_you_mean_to_call_this_expression + ) + ); + return true; + } + } + return false; + } + function elaborateArrowFunction(node, source, target, relation, containingMessageChain, errorOutputContainer) { + if (isBlock(node.body)) { + return false; + } + if (some(node.parameters, hasType)) { + return false; + } + const sourceSig = getSingleCallSignature(source); + if (!sourceSig) { + return false; + } + const targetSignatures = getSignaturesOfType(target, 0 /* Call */); + if (!length(targetSignatures)) { + return false; + } + const returnExpression = node.body; + const sourceReturn = getReturnTypeOfSignature(sourceSig); + const targetReturn = getUnionType(map(targetSignatures, getReturnTypeOfSignature)); + if (!checkTypeRelatedTo( + sourceReturn, + targetReturn, + relation, + /*errorNode*/ + void 0 + )) { + const elaborated = returnExpression && elaborateError( + returnExpression, + sourceReturn, + targetReturn, + relation, + /*headMessage*/ + void 0, + containingMessageChain, + errorOutputContainer + ); + if (elaborated) { + return elaborated; + } + const resultObj = errorOutputContainer || {}; + checkTypeRelatedTo( + sourceReturn, + targetReturn, + relation, + returnExpression, + /*headMessage*/ + void 0, + containingMessageChain, + resultObj + ); + if (resultObj.errors) { + if (target.symbol && length(target.symbol.declarations)) { + addRelatedInfo( + resultObj.errors[resultObj.errors.length - 1], + createDiagnosticForNode( + target.symbol.declarations[0], + Diagnostics.The_expected_type_comes_from_the_return_type_of_this_signature + ) + ); + } + if ((getFunctionFlags(node) & 2 /* Async */) === 0 && !getTypeOfPropertyOfType(sourceReturn, "then") && checkTypeRelatedTo( + createPromiseType(sourceReturn), + targetReturn, + relation, + /*errorNode*/ + void 0 + )) { + addRelatedInfo( + resultObj.errors[resultObj.errors.length - 1], + createDiagnosticForNode( + node, + Diagnostics.Did_you_mean_to_mark_this_function_as_async + ) + ); + } + return true; + } + } + return false; + } + function getBestMatchIndexedAccessTypeOrUndefined(source, target, nameType) { + const idx = getIndexedAccessTypeOrUndefined(target, nameType); + if (idx) { + return idx; + } + if (target.flags & 1048576 /* Union */) { + const best = getBestMatchingType(source, target); + if (best) { + return getIndexedAccessTypeOrUndefined(best, nameType); + } + } + } + function checkExpressionForMutableLocationWithContextualType(next, sourcePropType) { + pushContextualType( + next, + sourcePropType, + /*isCache*/ + false + ); + const result = checkExpressionForMutableLocation(next, 1 /* Contextual */); + popContextualType(); + return result; + } + function elaborateElementwise(iterator, source, target, relation, containingMessageChain, errorOutputContainer) { + let reportedError = false; + for (const value of iterator) { + const { errorNode: prop, innerExpression: next, nameType, errorMessage } = value; + let targetPropType = getBestMatchIndexedAccessTypeOrUndefined(source, target, nameType); + if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */) continue; + let sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType); + if (!sourcePropType) continue; + const propName = getPropertyNameFromIndex( + nameType, + /*accessNode*/ + void 0 + ); + if (!checkTypeRelatedTo( + sourcePropType, + targetPropType, + relation, + /*errorNode*/ + void 0 + )) { + const elaborated = next && elaborateError( + next, + sourcePropType, + targetPropType, + relation, + /*headMessage*/ + void 0, + containingMessageChain, + errorOutputContainer + ); + reportedError = true; + if (!elaborated) { + const resultObj = errorOutputContainer || {}; + const specificSource = next ? checkExpressionForMutableLocationWithContextualType(next, sourcePropType) : sourcePropType; + if (exactOptionalPropertyTypes && isExactOptionalPropertyMismatch(specificSource, targetPropType)) { + const diag2 = createDiagnosticForNode(prop, Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target, typeToString(specificSource), typeToString(targetPropType)); + diagnostics.add(diag2); + resultObj.errors = [diag2]; + } else { + const targetIsOptional = !!(propName && (getPropertyOfType(target, propName) || unknownSymbol).flags & 16777216 /* Optional */); + const sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */); + targetPropType = removeMissingType(targetPropType, targetIsOptional); + sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional); + const result = checkTypeRelatedTo(specificSource, targetPropType, relation, prop, errorMessage, containingMessageChain, resultObj); + if (result && specificSource !== sourcePropType) { + checkTypeRelatedTo(sourcePropType, targetPropType, relation, prop, errorMessage, containingMessageChain, resultObj); + } + } + if (resultObj.errors) { + const reportedDiag = resultObj.errors[resultObj.errors.length - 1]; + const propertyName = isTypeUsableAsPropertyName(nameType) ? getPropertyNameFromType(nameType) : void 0; + const targetProp = propertyName !== void 0 ? getPropertyOfType(target, propertyName) : void 0; + let issuedElaboration = false; + if (!targetProp) { + const indexInfo = getApplicableIndexInfo(target, nameType); + if (indexInfo && indexInfo.declaration && !getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { + issuedElaboration = true; + addRelatedInfo(reportedDiag, createDiagnosticForNode(indexInfo.declaration, Diagnostics.The_expected_type_comes_from_this_index_signature)); + } + } + if (!issuedElaboration && (targetProp && length(targetProp.declarations) || target.symbol && length(target.symbol.declarations))) { + const targetNode = targetProp && length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; + if (!getSourceFileOfNode(targetNode).hasNoDefaultLib) { + addRelatedInfo( + reportedDiag, + createDiagnosticForNode( + targetNode, + Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, + propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? unescapeLeadingUnderscores(propertyName) : typeToString(nameType), + typeToString(target) + ) + ); + } + } + } + } + } + } + return reportedError; + } + function elaborateIterableOrArrayLikeTargetElementwise(iterator, source, target, relation, containingMessageChain, errorOutputContainer) { + const tupleOrArrayLikeTargetParts = filterType(target, isArrayOrTupleLikeType); + const nonTupleOrArrayLikeTargetParts = filterType(target, (t) => !isArrayOrTupleLikeType(t)); + const iterationType = nonTupleOrArrayLikeTargetParts !== neverType ? getIterationTypeOfIterable( + 13 /* ForOf */, + 0 /* Yield */, + nonTupleOrArrayLikeTargetParts, + /*errorNode*/ + void 0 + ) : void 0; + let reportedError = false; + for (let status = iterator.next(); !status.done; status = iterator.next()) { + const { errorNode: prop, innerExpression: next, nameType, errorMessage } = status.value; + let targetPropType = iterationType; + const targetIndexedPropType = tupleOrArrayLikeTargetParts !== neverType ? getBestMatchIndexedAccessTypeOrUndefined(source, tupleOrArrayLikeTargetParts, nameType) : void 0; + if (targetIndexedPropType && !(targetIndexedPropType.flags & 8388608 /* IndexedAccess */)) { + targetPropType = iterationType ? getUnionType([iterationType, targetIndexedPropType]) : targetIndexedPropType; + } + if (!targetPropType) continue; + let sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType); + if (!sourcePropType) continue; + const propName = getPropertyNameFromIndex( + nameType, + /*accessNode*/ + void 0 + ); + if (!checkTypeRelatedTo( + sourcePropType, + targetPropType, + relation, + /*errorNode*/ + void 0 + )) { + const elaborated = next && elaborateError( + next, + sourcePropType, + targetPropType, + relation, + /*headMessage*/ + void 0, + containingMessageChain, + errorOutputContainer + ); + reportedError = true; + if (!elaborated) { + const resultObj = errorOutputContainer || {}; + const specificSource = next ? checkExpressionForMutableLocationWithContextualType(next, sourcePropType) : sourcePropType; + if (exactOptionalPropertyTypes && isExactOptionalPropertyMismatch(specificSource, targetPropType)) { + const diag2 = createDiagnosticForNode(prop, Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target, typeToString(specificSource), typeToString(targetPropType)); + diagnostics.add(diag2); + resultObj.errors = [diag2]; + } else { + const targetIsOptional = !!(propName && (getPropertyOfType(tupleOrArrayLikeTargetParts, propName) || unknownSymbol).flags & 16777216 /* Optional */); + const sourceIsOptional = !!(propName && (getPropertyOfType(source, propName) || unknownSymbol).flags & 16777216 /* Optional */); + targetPropType = removeMissingType(targetPropType, targetIsOptional); + sourcePropType = removeMissingType(sourcePropType, targetIsOptional && sourceIsOptional); + const result = checkTypeRelatedTo(specificSource, targetPropType, relation, prop, errorMessage, containingMessageChain, resultObj); + if (result && specificSource !== sourcePropType) { + checkTypeRelatedTo(sourcePropType, targetPropType, relation, prop, errorMessage, containingMessageChain, resultObj); + } + } + } + } + } + return reportedError; + } + function* generateJsxAttributes(node) { + if (!length(node.properties)) return; + for (const prop of node.properties) { + if (isJsxSpreadAttribute(prop) || isHyphenatedJsxName(getTextOfJsxAttributeName(prop.name))) continue; + yield { errorNode: prop.name, innerExpression: prop.initializer, nameType: getStringLiteralType(getTextOfJsxAttributeName(prop.name)) }; + } + } + function* generateJsxChildren(node, getInvalidTextDiagnostic) { + if (!length(node.children)) return; + let memberOffset = 0; + for (let i = 0; i < node.children.length; i++) { + const child = node.children[i]; + const nameType = getNumberLiteralType(i - memberOffset); + const elem = getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic); + if (elem) { + yield elem; + } else { + memberOffset++; + } + } + } + function getElaborationElementForJsxChild(child, nameType, getInvalidTextDiagnostic) { + switch (child.kind) { + case 295 /* JsxExpression */: + return { errorNode: child, innerExpression: child.expression, nameType }; + case 12 /* JsxText */: + if (child.containsOnlyTriviaWhiteSpaces) { + break; + } + return { errorNode: child, innerExpression: void 0, nameType, errorMessage: getInvalidTextDiagnostic() }; + case 285 /* JsxElement */: + case 286 /* JsxSelfClosingElement */: + case 289 /* JsxFragment */: + return { errorNode: child, innerExpression: child, nameType }; + default: + return Debug.assertNever(child, "Found invalid jsx child"); + } + } + function elaborateJsxComponents(node, source, target, relation, containingMessageChain, errorOutputContainer) { + let result = elaborateElementwise(generateJsxAttributes(node), source, target, relation, containingMessageChain, errorOutputContainer); + let invalidTextDiagnostic; + if (isJsxOpeningElement(node.parent) && isJsxElement(node.parent.parent)) { + const containingElement = node.parent.parent; + const childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node)); + const childrenPropName = childPropName === void 0 ? "children" : unescapeLeadingUnderscores(childPropName); + const childrenNameType = getStringLiteralType(childrenPropName); + const childrenTargetType = getIndexedAccessType(target, childrenNameType); + const validChildren = getSemanticJsxChildren(containingElement.children); + if (!length(validChildren)) { + return result; + } + const moreThanOneRealChildren = length(validChildren) > 1; + let arrayLikeTargetParts; + let nonArrayLikeTargetParts; + const iterableType = getGlobalIterableType( + /*reportErrors*/ + false + ); + if (iterableType !== emptyGenericType) { + const anyIterable = createIterableType(anyType); + arrayLikeTargetParts = filterType(childrenTargetType, (t) => isTypeAssignableTo(t, anyIterable)); + nonArrayLikeTargetParts = filterType(childrenTargetType, (t) => !isTypeAssignableTo(t, anyIterable)); + } else { + arrayLikeTargetParts = filterType(childrenTargetType, isArrayOrTupleLikeType); + nonArrayLikeTargetParts = filterType(childrenTargetType, (t) => !isArrayOrTupleLikeType(t)); + } + if (moreThanOneRealChildren) { + if (arrayLikeTargetParts !== neverType) { + const realSource = createTupleType(checkJsxChildren(containingElement, 0 /* Normal */)); + const children = generateJsxChildren(containingElement, getInvalidTextualChildDiagnostic); + result = elaborateIterableOrArrayLikeTargetElementwise(children, realSource, arrayLikeTargetParts, relation, containingMessageChain, errorOutputContainer) || result; + } else if (!isTypeRelatedTo(getIndexedAccessType(source, childrenNameType), childrenTargetType, relation)) { + result = true; + const diag2 = error2( + containingElement.openingElement.tagName, + Diagnostics.This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided, + childrenPropName, + typeToString(childrenTargetType) + ); + if (errorOutputContainer && errorOutputContainer.skipLogging) { + (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag2); + } + } + } else { + if (nonArrayLikeTargetParts !== neverType) { + const child = validChildren[0]; + const elem = getElaborationElementForJsxChild(child, childrenNameType, getInvalidTextualChildDiagnostic); + if (elem) { + result = elaborateElementwise( + function* () { + yield elem; + }(), + source, + target, + relation, + containingMessageChain, + errorOutputContainer + ) || result; + } + } else if (!isTypeRelatedTo(getIndexedAccessType(source, childrenNameType), childrenTargetType, relation)) { + result = true; + const diag2 = error2( + containingElement.openingElement.tagName, + Diagnostics.This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_provided, + childrenPropName, + typeToString(childrenTargetType) + ); + if (errorOutputContainer && errorOutputContainer.skipLogging) { + (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag2); + } + } + } + } + return result; + function getInvalidTextualChildDiagnostic() { + if (!invalidTextDiagnostic) { + const tagNameText = getTextOfNode(node.parent.tagName); + const childPropName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node)); + const childrenPropName = childPropName === void 0 ? "children" : unescapeLeadingUnderscores(childPropName); + const childrenTargetType = getIndexedAccessType(target, getStringLiteralType(childrenPropName)); + const diagnostic = Diagnostics._0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_type_of_1_is_2; + invalidTextDiagnostic = { ...diagnostic, key: "!!ALREADY FORMATTED!!", message: formatMessage(diagnostic, tagNameText, childrenPropName, typeToString(childrenTargetType)) }; + } + return invalidTextDiagnostic; + } + } + function* generateLimitedTupleElements(node, target) { + const len = length(node.elements); + if (!len) return; + for (let i = 0; i < len; i++) { + if (isTupleLikeType(target) && !getPropertyOfType(target, "" + i)) continue; + const elem = node.elements[i]; + if (isOmittedExpression(elem)) continue; + const nameType = getNumberLiteralType(i); + const checkNode = getEffectiveCheckNode(elem); + yield { errorNode: checkNode, innerExpression: checkNode, nameType }; + } + } + function elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer) { + if (target.flags & (402784252 /* Primitive */ | 131072 /* Never */)) return false; + if (isTupleLikeType(source)) { + return elaborateElementwise(generateLimitedTupleElements(node, target), source, target, relation, containingMessageChain, errorOutputContainer); + } + pushContextualType( + node, + target, + /*isCache*/ + false + ); + const tupleizedType = checkArrayLiteral( + node, + 1 /* Contextual */, + /*forceTuple*/ + true + ); + popContextualType(); + if (isTupleLikeType(tupleizedType)) { + return elaborateElementwise(generateLimitedTupleElements(node, target), tupleizedType, target, relation, containingMessageChain, errorOutputContainer); + } + return false; + } + function* generateObjectLiteralElements(node) { + if (!length(node.properties)) return; + for (const prop of node.properties) { + if (isSpreadAssignment(prop)) continue; + const type = getLiteralTypeFromProperty(getSymbolOfDeclaration(prop), 8576 /* StringOrNumberLiteralOrUnique */); + if (!type || type.flags & 131072 /* Never */) { + continue; + } + switch (prop.kind) { + case 179 /* SetAccessor */: + case 178 /* GetAccessor */: + case 175 /* MethodDeclaration */: + case 305 /* ShorthandPropertyAssignment */: + yield { errorNode: prop.name, innerExpression: void 0, nameType: type }; + break; + case 304 /* PropertyAssignment */: + yield { errorNode: prop.name, innerExpression: prop.initializer, nameType: type, errorMessage: isComputedNonLiteralName(prop.name) ? Diagnostics.Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1 : void 0 }; + break; + default: + Debug.assertNever(prop); + } + } + } + function elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer) { + if (target.flags & (402784252 /* Primitive */ | 131072 /* Never */)) return false; + return elaborateElementwise(generateObjectLiteralElements(node), source, target, relation, containingMessageChain, errorOutputContainer); + } + function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) { + return checkTypeRelatedTo(source, target, comparableRelation, errorNode, headMessage, containingMessageChain); + } + function isSignatureAssignableTo(source, target, ignoreReturnTypes) { + return compareSignaturesRelated( + source, + target, + ignoreReturnTypes ? 4 /* IgnoreReturnTypes */ : 0 /* None */, + /*reportErrors*/ + false, + /*errorReporter*/ + void 0, + /*incompatibleErrorReporter*/ + void 0, + compareTypesAssignable, + /*reportUnreliableMarkers*/ + void 0 + ) !== 0 /* False */; + } + function isTopSignature(s) { + if (!s.typeParameters && (!s.thisParameter || isTypeAny(getTypeOfParameter(s.thisParameter))) && s.parameters.length === 1 && signatureHasRestParameter(s)) { + const paramType = getTypeOfParameter(s.parameters[0]); + const restType = isArrayType(paramType) ? getTypeArguments(paramType)[0] : paramType; + return !!(restType.flags & (1 /* Any */ | 131072 /* Never */) && getReturnTypeOfSignature(s).flags & 3 /* AnyOrUnknown */); + } + return false; + } + function compareSignaturesRelated(source, target, checkMode, reportErrors2, errorReporter, incompatibleErrorReporter, compareTypes, reportUnreliableMarkers) { + if (source === target) { + return -1 /* True */; + } + if (!(checkMode & 16 /* StrictTopSignature */ && isTopSignature(source)) && isTopSignature(target)) { + return -1 /* True */; + } + if (checkMode & 16 /* StrictTopSignature */ && isTopSignature(source) && !isTopSignature(target)) { + return 0 /* False */; + } + const targetCount = getParameterCount(target); + const sourceHasMoreParameters = !hasEffectiveRestParameter(target) && (checkMode & 8 /* StrictArity */ ? hasEffectiveRestParameter(source) || getParameterCount(source) > targetCount : getMinArgumentCount(source) > targetCount); + if (sourceHasMoreParameters) { + if (reportErrors2 && !(checkMode & 8 /* StrictArity */)) { + errorReporter(Diagnostics.Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1, getMinArgumentCount(source), targetCount); + } + return 0 /* False */; + } + if (source.typeParameters && source.typeParameters !== target.typeParameters) { + target = getCanonicalSignature(target); + source = instantiateSignatureInContextOf( + source, + target, + /*inferenceContext*/ + void 0, + compareTypes + ); + } + const sourceCount = getParameterCount(source); + const sourceRestType = getNonArrayRestType(source); + const targetRestType = getNonArrayRestType(target); + if (sourceRestType || targetRestType) { + void instantiateType(sourceRestType || targetRestType, reportUnreliableMarkers); + } + const kind = target.declaration ? target.declaration.kind : 0 /* Unknown */; + const strictVariance = !(checkMode & 3 /* Callback */) && strictFunctionTypes && kind !== 175 /* MethodDeclaration */ && kind !== 174 /* MethodSignature */ && kind !== 177 /* Constructor */; + let result = -1 /* True */; + const sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType && sourceThisType !== voidType) { + const targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + const related = !strictVariance && compareTypes( + sourceThisType, + targetThisType, + /*reportErrors*/ + false + ) || compareTypes(targetThisType, sourceThisType, reportErrors2); + if (!related) { + if (reportErrors2) { + errorReporter(Diagnostics.The_this_types_of_each_signature_are_incompatible); + } + return 0 /* False */; + } + result &= related; + } + } + const paramCount = sourceRestType || targetRestType ? Math.min(sourceCount, targetCount) : Math.max(sourceCount, targetCount); + const restIndex = sourceRestType || targetRestType ? paramCount - 1 : -1; + for (let i = 0; i < paramCount; i++) { + const sourceType = i === restIndex ? getRestOrAnyTypeAtPosition(source, i) : tryGetTypeAtPosition(source, i); + const targetType = i === restIndex ? getRestOrAnyTypeAtPosition(target, i) : tryGetTypeAtPosition(target, i); + if (sourceType && targetType && (sourceType !== targetType || checkMode & 8 /* StrictArity */)) { + const sourceSig = checkMode & 3 /* Callback */ || isInstantiatedGenericParameter(source, i) ? void 0 : getSingleCallSignature(getNonNullableType(sourceType)); + const targetSig = checkMode & 3 /* Callback */ || isInstantiatedGenericParameter(target, i) ? void 0 : getSingleCallSignature(getNonNullableType(targetType)); + const callbacks = sourceSig && targetSig && !getTypePredicateOfSignature(sourceSig) && !getTypePredicateOfSignature(targetSig) && getTypeFacts(sourceType, 50331648 /* IsUndefinedOrNull */) === getTypeFacts(targetType, 50331648 /* IsUndefinedOrNull */); + let related = callbacks ? compareSignaturesRelated(targetSig, sourceSig, checkMode & 8 /* StrictArity */ | (strictVariance ? 2 /* StrictCallback */ : 1 /* BivariantCallback */), reportErrors2, errorReporter, incompatibleErrorReporter, compareTypes, reportUnreliableMarkers) : !(checkMode & 3 /* Callback */) && !strictVariance && compareTypes( + sourceType, + targetType, + /*reportErrors*/ + false + ) || compareTypes(targetType, sourceType, reportErrors2); + if (related && checkMode & 8 /* StrictArity */ && i >= getMinArgumentCount(source) && i < getMinArgumentCount(target) && compareTypes( + sourceType, + targetType, + /*reportErrors*/ + false + )) { + related = 0 /* False */; + } + if (!related) { + if (reportErrors2) { + errorReporter(Diagnostics.Types_of_parameters_0_and_1_are_incompatible, unescapeLeadingUnderscores(getParameterNameAtPosition(source, i)), unescapeLeadingUnderscores(getParameterNameAtPosition(target, i))); + } + return 0 /* False */; + } + result &= related; + } + } + if (!(checkMode & 4 /* IgnoreReturnTypes */)) { + const targetReturnType = isResolvingReturnTypeOfSignature(target) ? anyType : target.declaration && isJSConstructor(target.declaration) ? getDeclaredTypeOfClassOrInterface(getMergedSymbol(target.declaration.symbol)) : getReturnTypeOfSignature(target); + if (targetReturnType === voidType || targetReturnType === anyType) { + return result; + } + const sourceReturnType = isResolvingReturnTypeOfSignature(source) ? anyType : source.declaration && isJSConstructor(source.declaration) ? getDeclaredTypeOfClassOrInterface(getMergedSymbol(source.declaration.symbol)) : getReturnTypeOfSignature(source); + const targetTypePredicate = getTypePredicateOfSignature(target); + if (targetTypePredicate) { + const sourceTypePredicate = getTypePredicateOfSignature(source); + if (sourceTypePredicate) { + result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes); + } else if (isIdentifierTypePredicate(targetTypePredicate) || isThisTypePredicate(targetTypePredicate)) { + if (reportErrors2) { + errorReporter(Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source)); + } + return 0 /* False */; + } + } else { + result &= checkMode & 1 /* BivariantCallback */ && compareTypes( + targetReturnType, + sourceReturnType, + /*reportErrors*/ + false + ) || compareTypes(sourceReturnType, targetReturnType, reportErrors2); + if (!result && reportErrors2 && incompatibleErrorReporter) { + incompatibleErrorReporter(sourceReturnType, targetReturnType); + } + } + } + return result; + } + function compareTypePredicateRelatedTo(source, target, reportErrors2, errorReporter, compareTypes) { + if (source.kind !== target.kind) { + if (reportErrors2) { + errorReporter(Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); + errorReporter(Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return 0 /* False */; + } + if (source.kind === 1 /* Identifier */ || source.kind === 3 /* AssertsIdentifier */) { + if (source.parameterIndex !== target.parameterIndex) { + if (reportErrors2) { + errorReporter(Diagnostics.Parameter_0_is_not_in_the_same_position_as_parameter_1, source.parameterName, target.parameterName); + errorReporter(Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return 0 /* False */; + } + } + const related = source.type === target.type ? -1 /* True */ : source.type && target.type ? compareTypes(source.type, target.type, reportErrors2) : 0 /* False */; + if (related === 0 /* False */ && reportErrors2) { + errorReporter(Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); + } + return related; + } + function isImplementationCompatibleWithOverload(implementation, overload) { + const erasedSource = getErasedSignature(implementation); + const erasedTarget = getErasedSignature(overload); + const sourceReturnType = getReturnTypeOfSignature(erasedSource); + const targetReturnType = getReturnTypeOfSignature(erasedTarget); + if (targetReturnType === voidType || isTypeRelatedTo(targetReturnType, sourceReturnType, assignableRelation) || isTypeRelatedTo(sourceReturnType, targetReturnType, assignableRelation)) { + return isSignatureAssignableTo( + erasedSource, + erasedTarget, + /*ignoreReturnTypes*/ + true + ); + } + return false; + } + function isEmptyResolvedType(t) { + return t !== anyFunctionType && t.properties.length === 0 && t.callSignatures.length === 0 && t.constructSignatures.length === 0 && t.indexInfos.length === 0; + } + function isEmptyObjectType(type) { + return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) : type.flags & 67108864 /* NonPrimitive */ ? true : type.flags & 1048576 /* Union */ ? some(type.types, isEmptyObjectType) : type.flags & 2097152 /* Intersection */ ? every(type.types, isEmptyObjectType) : false; + } + function isEmptyAnonymousObjectType(type) { + return !!(getObjectFlags(type) & 16 /* Anonymous */ && (type.members && isEmptyResolvedType(type) || type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0)); + } + function isUnknownLikeUnionType(type) { + if (strictNullChecks && type.flags & 1048576 /* Union */) { + if (!(type.objectFlags & 33554432 /* IsUnknownLikeUnionComputed */)) { + const types = type.types; + type.objectFlags |= 33554432 /* IsUnknownLikeUnionComputed */ | (types.length >= 3 && types[0].flags & 32768 /* Undefined */ && types[1].flags & 65536 /* Null */ && some(types, isEmptyAnonymousObjectType) ? 67108864 /* IsUnknownLikeUnion */ : 0); + } + return !!(type.objectFlags & 67108864 /* IsUnknownLikeUnion */); + } + return false; + } + function containsUndefinedType(type) { + return !!((type.flags & 1048576 /* Union */ ? type.types[0] : type).flags & 32768 /* Undefined */); + } + function containsNonMissingUndefinedType(type) { + const candidate = type.flags & 1048576 /* Union */ ? type.types[0] : type; + return !!(candidate.flags & 32768 /* Undefined */) && candidate !== missingType; + } + function isStringIndexSignatureOnlyType(type) { + return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) || type.flags & 3145728 /* UnionOrIntersection */ && every(type.types, isStringIndexSignatureOnlyType) || false; + } + function isEnumTypeRelatedTo(source, target, errorReporter) { + const sourceSymbol = source.flags & 8 /* EnumMember */ ? getParentOfSymbol(source) : source; + const targetSymbol = target.flags & 8 /* EnumMember */ ? getParentOfSymbol(target) : target; + if (sourceSymbol === targetSymbol) { + return true; + } + if (sourceSymbol.escapedName !== targetSymbol.escapedName || !(sourceSymbol.flags & 256 /* RegularEnum */) || !(targetSymbol.flags & 256 /* RegularEnum */)) { + return false; + } + const id = getSymbolId(sourceSymbol) + "," + getSymbolId(targetSymbol); + const entry = enumRelation.get(id); + if (entry !== void 0 && !(entry & 2 /* Failed */ && errorReporter)) { + return !!(entry & 1 /* Succeeded */); + } + const targetEnumType = getTypeOfSymbol(targetSymbol); + for (const sourceProperty of getPropertiesOfType(getTypeOfSymbol(sourceSymbol))) { + if (sourceProperty.flags & 8 /* EnumMember */) { + const targetProperty = getPropertyOfType(targetEnumType, sourceProperty.escapedName); + if (!targetProperty || !(targetProperty.flags & 8 /* EnumMember */)) { + if (errorReporter) { + errorReporter(Diagnostics.Property_0_is_missing_in_type_1, symbolName(sourceProperty), typeToString( + getDeclaredTypeOfSymbol(targetSymbol), + /*enclosingDeclaration*/ + void 0, + 64 /* UseFullyQualifiedType */ + )); + } + enumRelation.set(id, 2 /* Failed */); + return false; + } + const sourceValue = getEnumMemberValue(getDeclarationOfKind(sourceProperty, 307 /* EnumMember */)).value; + const targetValue = getEnumMemberValue(getDeclarationOfKind(targetProperty, 307 /* EnumMember */)).value; + if (sourceValue !== targetValue) { + const sourceIsString = typeof sourceValue === "string"; + const targetIsString = typeof targetValue === "string"; + if (sourceValue !== void 0 && targetValue !== void 0) { + if (errorReporter) { + const escapedSource = sourceIsString ? `"${escapeString(sourceValue)}"` : sourceValue; + const escapedTarget = targetIsString ? `"${escapeString(targetValue)}"` : targetValue; + errorReporter(Diagnostics.Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given, symbolName(targetSymbol), symbolName(targetProperty), escapedTarget, escapedSource); + } + enumRelation.set(id, 2 /* Failed */); + return false; + } + if (sourceIsString || targetIsString) { + if (errorReporter) { + const knownStringValue = sourceValue ?? targetValue; + Debug.assert(typeof knownStringValue === "string"); + const escapedValue = `"${escapeString(knownStringValue)}"`; + errorReporter(Diagnostics.One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value, symbolName(targetSymbol), symbolName(targetProperty), escapedValue); + } + enumRelation.set(id, 2 /* Failed */); + return false; + } + } + } + } + enumRelation.set(id, 1 /* Succeeded */); + return true; + } + function isSimpleTypeRelatedTo(source, target, relation, errorReporter) { + const s = source.flags; + const t = target.flags; + if (t & 1 /* Any */ || s & 131072 /* Never */ || source === wildcardType) return true; + if (t & 2 /* Unknown */ && !(relation === strictSubtypeRelation && s & 1 /* Any */)) return true; + if (t & 131072 /* Never */) return false; + if (s & 402653316 /* StringLike */ && t & 4 /* String */) return true; + if (s & 128 /* StringLiteral */ && s & 1024 /* EnumLiteral */ && t & 128 /* StringLiteral */ && !(t & 1024 /* EnumLiteral */) && source.value === target.value) return true; + if (s & 296 /* NumberLike */ && t & 8 /* Number */) return true; + if (s & 256 /* NumberLiteral */ && s & 1024 /* EnumLiteral */ && t & 256 /* NumberLiteral */ && !(t & 1024 /* EnumLiteral */) && source.value === target.value) return true; + if (s & 2112 /* BigIntLike */ && t & 64 /* BigInt */) return true; + if (s & 528 /* BooleanLike */ && t & 16 /* Boolean */) return true; + if (s & 12288 /* ESSymbolLike */ && t & 4096 /* ESSymbol */) return true; + if (s & 32 /* Enum */ && t & 32 /* Enum */ && source.symbol.escapedName === target.symbol.escapedName && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; + if (s & 1024 /* EnumLiteral */ && t & 1024 /* EnumLiteral */) { + if (s & 1048576 /* Union */ && t & 1048576 /* Union */ && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; + if (s & 2944 /* Literal */ && t & 2944 /* Literal */ && source.value === target.value && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; + } + if (s & 32768 /* Undefined */ && (!strictNullChecks && !(t & 3145728 /* UnionOrIntersection */) || t & (32768 /* Undefined */ | 16384 /* Void */))) return true; + if (s & 65536 /* Null */ && (!strictNullChecks && !(t & 3145728 /* UnionOrIntersection */) || t & 65536 /* Null */)) return true; + if (s & 524288 /* Object */ && t & 67108864 /* NonPrimitive */ && !(relation === strictSubtypeRelation && isEmptyAnonymousObjectType(source) && !(getObjectFlags(source) & 8192 /* FreshLiteral */))) return true; + if (relation === assignableRelation || relation === comparableRelation) { + if (s & 1 /* Any */) return true; + if (s & 8 /* Number */ && (t & 32 /* Enum */ || t & 256 /* NumberLiteral */ && t & 1024 /* EnumLiteral */)) return true; + if (s & 256 /* NumberLiteral */ && !(s & 1024 /* EnumLiteral */) && (t & 32 /* Enum */ || t & 256 /* NumberLiteral */ && t & 1024 /* EnumLiteral */ && source.value === target.value)) return true; + if (isUnknownLikeUnionType(target)) return true; + } + return false; + } + function isTypeRelatedTo(source, target, relation) { + if (isFreshLiteralType(source)) { + source = source.regularType; + } + if (isFreshLiteralType(target)) { + target = target.regularType; + } + if (source === target) { + return true; + } + if (relation !== identityRelation) { + if (relation === comparableRelation && !(target.flags & 131072 /* Never */) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation)) { + return true; + } + } else if (!((source.flags | target.flags) & (3145728 /* UnionOrIntersection */ | 8388608 /* IndexedAccess */ | 16777216 /* Conditional */ | 33554432 /* Substitution */))) { + if (source.flags !== target.flags) return false; + if (source.flags & 67358815 /* Singleton */) return true; + } + if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) { + const related = relation.get(getRelationKey( + source, + target, + 0 /* None */, + relation, + /*ignoreConstraints*/ + false + )); + if (related !== void 0) { + return !!(related & 1 /* Succeeded */); + } + } + if (source.flags & 469499904 /* StructuredOrInstantiable */ || target.flags & 469499904 /* StructuredOrInstantiable */) { + return checkTypeRelatedTo( + source, + target, + relation, + /*errorNode*/ + void 0 + ); + } + return false; + } + function isIgnoredJsxProperty(source, sourceProp) { + return getObjectFlags(source) & 2048 /* JsxAttributes */ && isHyphenatedJsxName(sourceProp.escapedName); + } + function getNormalizedType(type, writing) { + while (true) { + const t = isFreshLiteralType(type) ? type.regularType : isGenericTupleType(type) ? getNormalizedTupleType(type, writing) : getObjectFlags(type) & 4 /* Reference */ ? type.node ? createTypeReference(type.target, getTypeArguments(type)) : getSingleBaseForNonAugmentingSubtype(type) || type : type.flags & 3145728 /* UnionOrIntersection */ ? getNormalizedUnionOrIntersectionType(type, writing) : type.flags & 33554432 /* Substitution */ ? writing ? type.baseType : getSubstitutionIntersection(type) : type.flags & 25165824 /* Simplifiable */ ? getSimplifiedType(type, writing) : type; + if (t === type) return t; + type = t; + } + } + function getNormalizedUnionOrIntersectionType(type, writing) { + const reduced = getReducedType(type); + if (reduced !== type) { + return reduced; + } + if (type.flags & 2097152 /* Intersection */ && shouldNormalizeIntersection(type)) { + const normalizedTypes = sameMap(type.types, (t) => getNormalizedType(t, writing)); + if (normalizedTypes !== type.types) { + return getIntersectionType(normalizedTypes); + } + } + return type; + } + function shouldNormalizeIntersection(type) { + let hasInstantiable = false; + let hasNullableOrEmpty = false; + for (const t of type.types) { + hasInstantiable || (hasInstantiable = !!(t.flags & 465829888 /* Instantiable */)); + hasNullableOrEmpty || (hasNullableOrEmpty = !!(t.flags & 98304 /* Nullable */) || isEmptyAnonymousObjectType(t)); + if (hasInstantiable && hasNullableOrEmpty) return true; + } + return false; + } + function getNormalizedTupleType(type, writing) { + const elements = getElementTypes(type); + const normalizedElements = sameMap(elements, (t) => t.flags & 25165824 /* Simplifiable */ ? getSimplifiedType(t, writing) : t); + return elements !== normalizedElements ? createNormalizedTupleType(type.target, normalizedElements) : type; + } + function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer) { + var _a; + let errorInfo; + let relatedInfo; + let maybeKeys; + let maybeKeysSet; + let sourceStack; + let targetStack; + let maybeCount = 0; + let sourceDepth = 0; + let targetDepth = 0; + let expandingFlags = 0 /* None */; + let overflow = false; + let overrideNextErrorInfo = 0; + let skipParentCounter = 0; + let lastSkippedInfo; + let incompatibleStack; + let relationCount = 16e6 - relation.size >> 3; + Debug.assert(relation !== identityRelation || !errorNode, "no error reporting in identity checking"); + const result = isRelatedTo( + source, + target, + 3 /* Both */, + /*reportErrors*/ + !!errorNode, + headMessage + ); + if (incompatibleStack) { + reportIncompatibleStack(); + } + if (overflow) { + const id = getRelationKey( + source, + target, + /*intersectionState*/ + 0 /* None */, + relation, + /*ignoreConstraints*/ + false + ); + relation.set(id, 2 /* Failed */ | (relationCount <= 0 ? 32 /* ComplexityOverflow */ : 64 /* StackDepthOverflow */)); + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.CheckTypes, "checkTypeRelatedTo_DepthLimit", { sourceId: source.id, targetId: target.id, depth: sourceDepth, targetDepth }); + const message = relationCount <= 0 ? Diagnostics.Excessive_complexity_comparing_types_0_and_1 : Diagnostics.Excessive_stack_depth_comparing_types_0_and_1; + const diag2 = error2(errorNode || currentNode, message, typeToString(source), typeToString(target)); + if (errorOutputContainer) { + (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag2); + } + } else if (errorInfo) { + if (containingMessageChain) { + const chain = containingMessageChain(); + if (chain) { + concatenateDiagnosticMessageChains(chain, errorInfo); + errorInfo = chain; + } + } + let relatedInformation; + if (headMessage && errorNode && !result && source.symbol) { + const links = getSymbolLinks(source.symbol); + if (links.originatingImport && !isImportCall(links.originatingImport)) { + const helpfulRetry = checkTypeRelatedTo( + getTypeOfSymbol(links.target), + target, + relation, + /*errorNode*/ + void 0 + ); + if (helpfulRetry) { + const diag3 = createDiagnosticForNode(links.originatingImport, Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead); + relatedInformation = append(relatedInformation, diag3); + } + } + } + const diag2 = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(errorNode), errorNode, errorInfo, relatedInformation); + if (relatedInfo) { + addRelatedInfo(diag2, ...relatedInfo); + } + if (errorOutputContainer) { + (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag2); + } + if (!errorOutputContainer || !errorOutputContainer.skipLogging) { + diagnostics.add(diag2); + } + } + if (errorNode && errorOutputContainer && errorOutputContainer.skipLogging && result === 0 /* False */) { + Debug.assert(!!errorOutputContainer.errors, "missed opportunity to interact with error."); + } + return result !== 0 /* False */; + function resetErrorInfo(saved) { + errorInfo = saved.errorInfo; + lastSkippedInfo = saved.lastSkippedInfo; + incompatibleStack = saved.incompatibleStack; + overrideNextErrorInfo = saved.overrideNextErrorInfo; + skipParentCounter = saved.skipParentCounter; + relatedInfo = saved.relatedInfo; + } + function captureErrorCalculationState() { + return { + errorInfo, + lastSkippedInfo, + incompatibleStack: incompatibleStack == null ? void 0 : incompatibleStack.slice(), + overrideNextErrorInfo, + skipParentCounter, + relatedInfo: relatedInfo == null ? void 0 : relatedInfo.slice() + }; + } + function reportIncompatibleError(message, ...args) { + overrideNextErrorInfo++; + lastSkippedInfo = void 0; + (incompatibleStack || (incompatibleStack = [])).push([message, ...args]); + } + function reportIncompatibleStack() { + const stack = incompatibleStack || []; + incompatibleStack = void 0; + const info = lastSkippedInfo; + lastSkippedInfo = void 0; + if (stack.length === 1) { + reportError(...stack[0]); + if (info) { + reportRelationError( + /*message*/ + void 0, + ...info + ); + } + return; + } + let path = ""; + const secondaryRootErrors = []; + while (stack.length) { + const [msg, ...args] = stack.pop(); + switch (msg.code) { + case Diagnostics.Types_of_property_0_are_incompatible.code: { + if (path.indexOf("new ") === 0) { + path = `(${path})`; + } + const str = "" + args[0]; + if (path.length === 0) { + path = `${str}`; + } else if (isIdentifierText(str, getEmitScriptTarget(compilerOptions))) { + path = `${path}.${str}`; + } else if (str[0] === "[" && str[str.length - 1] === "]") { + path = `${path}${str}`; + } else { + path = `${path}[${str}]`; + } + break; + } + case Diagnostics.Call_signature_return_types_0_and_1_are_incompatible.code: + case Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible.code: + case Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code: + case Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code: { + if (path.length === 0) { + let mappedMsg = msg; + if (msg.code === Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code) { + mappedMsg = Diagnostics.Call_signature_return_types_0_and_1_are_incompatible; + } else if (msg.code === Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code) { + mappedMsg = Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible; + } + secondaryRootErrors.unshift([mappedMsg, args[0], args[1]]); + } else { + const prefix = msg.code === Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible.code || msg.code === Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code ? "new " : ""; + const params = msg.code === Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code || msg.code === Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1.code ? "" : "..."; + path = `${prefix}${path}(${params})`; + } + break; + } + case Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target.code: { + secondaryRootErrors.unshift([Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, args[0], args[1]]); + break; + } + case Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target.code: { + secondaryRootErrors.unshift([Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target, args[0], args[1], args[2]]); + break; + } + default: + return Debug.fail(`Unhandled Diagnostic: ${msg.code}`); + } + } + if (path) { + reportError( + path[path.length - 1] === ")" ? Diagnostics.The_types_returned_by_0_are_incompatible_between_these_types : Diagnostics.The_types_of_0_are_incompatible_between_these_types, + path + ); + } else { + secondaryRootErrors.shift(); + } + for (const [msg, ...args] of secondaryRootErrors) { + const originalValue = msg.elidedInCompatabilityPyramid; + msg.elidedInCompatabilityPyramid = false; + reportError(msg, ...args); + msg.elidedInCompatabilityPyramid = originalValue; + } + if (info) { + reportRelationError( + /*message*/ + void 0, + ...info + ); + } + } + function reportError(message, ...args) { + Debug.assert(!!errorNode); + if (incompatibleStack) reportIncompatibleStack(); + if (message.elidedInCompatabilityPyramid) return; + if (skipParentCounter === 0) { + errorInfo = chainDiagnosticMessages(errorInfo, message, ...args); + } else { + skipParentCounter--; + } + } + function reportParentSkippedError(message, ...args) { + reportError(message, ...args); + skipParentCounter++; + } + function associateRelatedInfo(info) { + Debug.assert(!!errorInfo); + if (!relatedInfo) { + relatedInfo = [info]; + } else { + relatedInfo.push(info); + } + } + function reportRelationError(message, source2, target2) { + if (incompatibleStack) reportIncompatibleStack(); + const [sourceType, targetType] = getTypeNamesForErrorDisplay(source2, target2); + let generalizedSource = source2; + let generalizedSourceType = sourceType; + if (!(target2.flags & 131072 /* Never */) && isLiteralType(source2) && !typeCouldHaveTopLevelSingletonTypes(target2)) { + generalizedSource = getBaseTypeOfLiteralType(source2); + Debug.assert(!isTypeAssignableTo(generalizedSource, target2), "generalized source shouldn't be assignable"); + generalizedSourceType = getTypeNameForErrorDisplay(generalizedSource); + } + const targetFlags = target2.flags & 8388608 /* IndexedAccess */ && !(source2.flags & 8388608 /* IndexedAccess */) ? target2.objectType.flags : target2.flags; + if (targetFlags & 262144 /* TypeParameter */ && target2 !== markerSuperTypeForCheck && target2 !== markerSubTypeForCheck) { + const constraint = getBaseConstraintOfType(target2); + let needsOriginalSource; + if (constraint && (isTypeAssignableTo(generalizedSource, constraint) || (needsOriginalSource = isTypeAssignableTo(source2, constraint)))) { + reportError( + Diagnostics._0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_constraint_2, + needsOriginalSource ? sourceType : generalizedSourceType, + targetType, + typeToString(constraint) + ); + } else { + errorInfo = void 0; + reportError( + Diagnostics._0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1, + targetType, + generalizedSourceType + ); + } + } + if (!message) { + if (relation === comparableRelation) { + message = Diagnostics.Type_0_is_not_comparable_to_type_1; + } else if (sourceType === targetType) { + message = Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated; + } else if (exactOptionalPropertyTypes && getExactOptionalUnassignableProperties(source2, target2).length) { + message = Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties; + } else { + if (source2.flags & 128 /* StringLiteral */ && target2.flags & 1048576 /* Union */) { + const suggestedType = getSuggestedTypeForNonexistentStringLiteralType(source2, target2); + if (suggestedType) { + reportError(Diagnostics.Type_0_is_not_assignable_to_type_1_Did_you_mean_2, generalizedSourceType, targetType, typeToString(suggestedType)); + return; + } + } + message = Diagnostics.Type_0_is_not_assignable_to_type_1; + } + } else if (message === Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1 && exactOptionalPropertyTypes && getExactOptionalUnassignableProperties(source2, target2).length) { + message = Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties; + } + reportError(message, generalizedSourceType, targetType); + } + function tryElaborateErrorsForPrimitivesAndObjects(source2, target2) { + const sourceType = symbolValueDeclarationIsContextSensitive(source2.symbol) ? typeToString(source2, source2.symbol.valueDeclaration) : typeToString(source2); + const targetType = symbolValueDeclarationIsContextSensitive(target2.symbol) ? typeToString(target2, target2.symbol.valueDeclaration) : typeToString(target2); + if (globalStringType === source2 && stringType === target2 || globalNumberType === source2 && numberType === target2 || globalBooleanType === source2 && booleanType === target2 || getGlobalESSymbolType() === source2 && esSymbolType === target2) { + reportError(Diagnostics._0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible, targetType, sourceType); + } + } + function tryElaborateArrayLikeErrors(source2, target2, reportErrors2) { + if (isTupleType(source2)) { + if (source2.target.readonly && isMutableArrayOrTuple(target2)) { + if (reportErrors2) { + reportError(Diagnostics.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1, typeToString(source2), typeToString(target2)); + } + return false; + } + return isArrayOrTupleType(target2); + } + if (isReadonlyArrayType(source2) && isMutableArrayOrTuple(target2)) { + if (reportErrors2) { + reportError(Diagnostics.The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1, typeToString(source2), typeToString(target2)); + } + return false; + } + if (isTupleType(target2)) { + return isArrayType(source2); + } + return true; + } + function isRelatedToWorker(source2, target2, reportErrors2) { + return isRelatedTo(source2, target2, 3 /* Both */, reportErrors2); + } + function isRelatedTo(originalSource, originalTarget, recursionFlags = 3 /* Both */, reportErrors2 = false, headMessage2, intersectionState = 0 /* None */) { + if (originalSource === originalTarget) return -1 /* True */; + if (originalSource.flags & 524288 /* Object */ && originalTarget.flags & 402784252 /* Primitive */) { + if (relation === comparableRelation && !(originalTarget.flags & 131072 /* Never */) && isSimpleTypeRelatedTo(originalTarget, originalSource, relation) || isSimpleTypeRelatedTo(originalSource, originalTarget, relation, reportErrors2 ? reportError : void 0)) { + return -1 /* True */; + } + if (reportErrors2) { + reportErrorResults(originalSource, originalTarget, originalSource, originalTarget, headMessage2); + } + return 0 /* False */; + } + const source2 = getNormalizedType( + originalSource, + /*writing*/ + false + ); + let target2 = getNormalizedType( + originalTarget, + /*writing*/ + true + ); + if (source2 === target2) return -1 /* True */; + if (relation === identityRelation) { + if (source2.flags !== target2.flags) return 0 /* False */; + if (source2.flags & 67358815 /* Singleton */) return -1 /* True */; + traceUnionsOrIntersectionsTooLarge(source2, target2); + return recursiveTypeRelatedTo( + source2, + target2, + /*reportErrors*/ + false, + 0 /* None */, + recursionFlags + ); + } + if (source2.flags & 262144 /* TypeParameter */ && getConstraintOfType(source2) === target2) { + return -1 /* True */; + } + if (source2.flags & 470302716 /* DefinitelyNonNullable */ && target2.flags & 1048576 /* Union */) { + const types = target2.types; + const candidate = types.length === 2 && types[0].flags & 98304 /* Nullable */ ? types[1] : types.length === 3 && types[0].flags & 98304 /* Nullable */ && types[1].flags & 98304 /* Nullable */ ? types[2] : void 0; + if (candidate && !(candidate.flags & 98304 /* Nullable */)) { + target2 = getNormalizedType( + candidate, + /*writing*/ + true + ); + if (source2 === target2) return -1 /* True */; + } + } + if (relation === comparableRelation && !(target2.flags & 131072 /* Never */) && isSimpleTypeRelatedTo(target2, source2, relation) || isSimpleTypeRelatedTo(source2, target2, relation, reportErrors2 ? reportError : void 0)) return -1 /* True */; + if (source2.flags & 469499904 /* StructuredOrInstantiable */ || target2.flags & 469499904 /* StructuredOrInstantiable */) { + const isPerformingExcessPropertyChecks = !(intersectionState & 2 /* Target */) && (isObjectLiteralType2(source2) && getObjectFlags(source2) & 8192 /* FreshLiteral */); + if (isPerformingExcessPropertyChecks) { + if (hasExcessProperties(source2, target2, reportErrors2)) { + if (reportErrors2) { + reportRelationError(headMessage2, source2, originalTarget.aliasSymbol ? originalTarget : target2); + } + return 0 /* False */; + } + } + const isPerformingCommonPropertyChecks = (relation !== comparableRelation || isUnitType(source2)) && !(intersectionState & 2 /* Target */) && source2.flags & (402784252 /* Primitive */ | 524288 /* Object */ | 2097152 /* Intersection */) && source2 !== globalObjectType && target2.flags & (524288 /* Object */ | 2097152 /* Intersection */) && isWeakType(target2) && (getPropertiesOfType(source2).length > 0 || typeHasCallOrConstructSignatures(source2)); + const isComparingJsxAttributes = !!(getObjectFlags(source2) & 2048 /* JsxAttributes */); + if (isPerformingCommonPropertyChecks && !hasCommonProperties(source2, target2, isComparingJsxAttributes)) { + if (reportErrors2) { + const sourceString = typeToString(originalSource.aliasSymbol ? originalSource : source2); + const targetString = typeToString(originalTarget.aliasSymbol ? originalTarget : target2); + const calls = getSignaturesOfType(source2, 0 /* Call */); + const constructs = getSignaturesOfType(source2, 1 /* Construct */); + if (calls.length > 0 && isRelatedTo( + getReturnTypeOfSignature(calls[0]), + target2, + 1 /* Source */, + /*reportErrors*/ + false + ) || constructs.length > 0 && isRelatedTo( + getReturnTypeOfSignature(constructs[0]), + target2, + 1 /* Source */, + /*reportErrors*/ + false + )) { + reportError(Diagnostics.Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it, sourceString, targetString); + } else { + reportError(Diagnostics.Type_0_has_no_properties_in_common_with_type_1, sourceString, targetString); + } + } + return 0 /* False */; + } + traceUnionsOrIntersectionsTooLarge(source2, target2); + const skipCaching = source2.flags & 1048576 /* Union */ && source2.types.length < 4 && !(target2.flags & 1048576 /* Union */) || target2.flags & 1048576 /* Union */ && target2.types.length < 4 && !(source2.flags & 469499904 /* StructuredOrInstantiable */); + const result2 = skipCaching ? unionOrIntersectionRelatedTo(source2, target2, reportErrors2, intersectionState) : recursiveTypeRelatedTo(source2, target2, reportErrors2, intersectionState, recursionFlags); + if (result2) { + return result2; + } + } + if (reportErrors2) { + reportErrorResults(originalSource, originalTarget, source2, target2, headMessage2); + } + return 0 /* False */; + } + function reportErrorResults(originalSource, originalTarget, source2, target2, headMessage2) { + var _a2, _b; + const sourceHasBase = !!getSingleBaseForNonAugmentingSubtype(originalSource); + const targetHasBase = !!getSingleBaseForNonAugmentingSubtype(originalTarget); + source2 = originalSource.aliasSymbol || sourceHasBase ? originalSource : source2; + target2 = originalTarget.aliasSymbol || targetHasBase ? originalTarget : target2; + let maybeSuppress = overrideNextErrorInfo > 0; + if (maybeSuppress) { + overrideNextErrorInfo--; + } + if (source2.flags & 524288 /* Object */ && target2.flags & 524288 /* Object */) { + const currentError = errorInfo; + tryElaborateArrayLikeErrors( + source2, + target2, + /*reportErrors*/ + true + ); + if (errorInfo !== currentError) { + maybeSuppress = !!errorInfo; + } + } + if (source2.flags & 524288 /* Object */ && target2.flags & 402784252 /* Primitive */) { + tryElaborateErrorsForPrimitivesAndObjects(source2, target2); + } else if (source2.symbol && source2.flags & 524288 /* Object */ && globalObjectType === source2) { + reportError(Diagnostics.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead); + } else if (getObjectFlags(source2) & 2048 /* JsxAttributes */ && target2.flags & 2097152 /* Intersection */) { + const targetTypes = target2.types; + const intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, errorNode); + const intrinsicClassAttributes = getJsxType(JsxNames.IntrinsicClassAttributes, errorNode); + if (!isErrorType(intrinsicAttributes) && !isErrorType(intrinsicClassAttributes) && (contains(targetTypes, intrinsicAttributes) || contains(targetTypes, intrinsicClassAttributes))) { + return; + } + } else { + errorInfo = elaborateNeverIntersection(errorInfo, originalTarget); + } + if (!headMessage2 && maybeSuppress) { + const savedErrorState = captureErrorCalculationState(); + reportRelationError(headMessage2, source2, target2); + let canonical; + if (errorInfo && errorInfo !== savedErrorState.errorInfo) { + canonical = { code: errorInfo.code, messageText: errorInfo.messageText }; + } + resetErrorInfo(savedErrorState); + if (canonical && errorInfo) { + errorInfo.canonicalHead = canonical; + } + lastSkippedInfo = [source2, target2]; + return; + } + reportRelationError(headMessage2, source2, target2); + if (source2.flags & 262144 /* TypeParameter */ && ((_b = (_a2 = source2.symbol) == null ? void 0 : _a2.declarations) == null ? void 0 : _b[0]) && !getConstraintOfType(source2)) { + const syntheticParam = cloneTypeParameter(source2); + syntheticParam.constraint = instantiateType(target2, makeUnaryTypeMapper(source2, syntheticParam)); + if (hasNonCircularBaseConstraint(syntheticParam)) { + const targetConstraintString = typeToString(target2, source2.symbol.declarations[0]); + associateRelatedInfo(createDiagnosticForNode(source2.symbol.declarations[0], Diagnostics.This_type_parameter_might_need_an_extends_0_constraint, targetConstraintString)); + } + } + } + function traceUnionsOrIntersectionsTooLarge(source2, target2) { + if (!tracing) { + return; + } + if (source2.flags & 3145728 /* UnionOrIntersection */ && target2.flags & 3145728 /* UnionOrIntersection */) { + const sourceUnionOrIntersection = source2; + const targetUnionOrIntersection = target2; + if (sourceUnionOrIntersection.objectFlags & targetUnionOrIntersection.objectFlags & 32768 /* PrimitiveUnion */) { + return; + } + const sourceSize = sourceUnionOrIntersection.types.length; + const targetSize = targetUnionOrIntersection.types.length; + if (sourceSize * targetSize > 1e6) { + tracing.instant(tracing.Phase.CheckTypes, "traceUnionsOrIntersectionsTooLarge_DepthLimit", { + sourceId: source2.id, + sourceSize, + targetId: target2.id, + targetSize, + pos: errorNode == null ? void 0 : errorNode.pos, + end: errorNode == null ? void 0 : errorNode.end + }); + } + } + } + function getTypeOfPropertyInTypes(types, name) { + const appendPropType = (propTypes, type) => { + var _a2; + type = getApparentType(type); + const prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name); + const propType = prop && getTypeOfSymbol(prop) || ((_a2 = getApplicableIndexInfoForName(type, name)) == null ? void 0 : _a2.type) || undefinedType; + return append(propTypes, propType); + }; + return getUnionType(reduceLeft( + types, + appendPropType, + /*initial*/ + void 0 + ) || emptyArray); + } + function hasExcessProperties(source2, target2, reportErrors2) { + var _a2; + if (!isExcessPropertyCheckTarget(target2) || !noImplicitAny && getObjectFlags(target2) & 4096 /* JSLiteral */) { + return false; + } + const isComparingJsxAttributes = !!(getObjectFlags(source2) & 2048 /* JsxAttributes */); + if ((relation === assignableRelation || relation === comparableRelation) && (isTypeSubsetOf(globalObjectType, target2) || !isComparingJsxAttributes && isEmptyObjectType(target2))) { + return false; + } + let reducedTarget = target2; + let checkTypes; + if (target2.flags & 1048576 /* Union */) { + reducedTarget = findMatchingDiscriminantType(source2, target2, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target2); + checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget]; + } + for (const prop of getPropertiesOfType(source2)) { + if (shouldCheckAsExcessProperty(prop, source2.symbol) && !isIgnoredJsxProperty(source2, prop)) { + if (!isKnownProperty(reducedTarget, prop.escapedName, isComparingJsxAttributes)) { + if (reportErrors2) { + const errorTarget = filterType(reducedTarget, isExcessPropertyCheckTarget); + if (!errorNode) return Debug.fail(); + if (isJsxAttributes(errorNode) || isJsxOpeningLikeElement(errorNode) || isJsxOpeningLikeElement(errorNode.parent)) { + if (prop.valueDeclaration && isJsxAttribute(prop.valueDeclaration) && getSourceFileOfNode(errorNode) === getSourceFileOfNode(prop.valueDeclaration.name)) { + errorNode = prop.valueDeclaration.name; + } + const propName = symbolToString(prop); + const suggestionSymbol = getSuggestedSymbolForNonexistentJSXAttribute(propName, errorTarget); + const suggestion = suggestionSymbol ? symbolToString(suggestionSymbol) : void 0; + if (suggestion) { + reportError(Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2, propName, typeToString(errorTarget), suggestion); + } else { + reportError(Diagnostics.Property_0_does_not_exist_on_type_1, propName, typeToString(errorTarget)); + } + } else { + const objectLiteralDeclaration = ((_a2 = source2.symbol) == null ? void 0 : _a2.declarations) && firstOrUndefined(source2.symbol.declarations); + let suggestion; + if (prop.valueDeclaration && findAncestor(prop.valueDeclaration, (d) => d === objectLiteralDeclaration) && getSourceFileOfNode(objectLiteralDeclaration) === getSourceFileOfNode(errorNode)) { + const propDeclaration = prop.valueDeclaration; + Debug.assertNode(propDeclaration, isObjectLiteralElementLike); + const name = propDeclaration.name; + errorNode = name; + if (isIdentifier(name)) { + suggestion = getSuggestionForNonexistentProperty(name, errorTarget); + } + } + if (suggestion !== void 0) { + reportParentSkippedError(Diagnostics.Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_write_2, symbolToString(prop), typeToString(errorTarget), suggestion); + } else { + reportParentSkippedError(Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(prop), typeToString(errorTarget)); + } + } + } + return true; + } + if (checkTypes && !isRelatedTo(getTypeOfSymbol(prop), getTypeOfPropertyInTypes(checkTypes, prop.escapedName), 3 /* Both */, reportErrors2)) { + if (reportErrors2) { + reportIncompatibleError(Diagnostics.Types_of_property_0_are_incompatible, symbolToString(prop)); + } + return true; + } + } + } + return false; + } + function shouldCheckAsExcessProperty(prop, container) { + return prop.valueDeclaration && container.valueDeclaration && prop.valueDeclaration.parent === container.valueDeclaration; + } + function unionOrIntersectionRelatedTo(source2, target2, reportErrors2, intersectionState) { + if (source2.flags & 1048576 /* Union */) { + if (target2.flags & 1048576 /* Union */) { + const sourceOrigin = source2.origin; + if (sourceOrigin && sourceOrigin.flags & 2097152 /* Intersection */ && target2.aliasSymbol && contains(sourceOrigin.types, target2)) { + return -1 /* True */; + } + const targetOrigin = target2.origin; + if (targetOrigin && targetOrigin.flags & 1048576 /* Union */ && source2.aliasSymbol && contains(targetOrigin.types, source2)) { + return -1 /* True */; + } + } + return relation === comparableRelation ? someTypeRelatedToType(source2, target2, reportErrors2 && !(source2.flags & 402784252 /* Primitive */), intersectionState) : eachTypeRelatedToType(source2, target2, reportErrors2 && !(source2.flags & 402784252 /* Primitive */), intersectionState); + } + if (target2.flags & 1048576 /* Union */) { + return typeRelatedToSomeType(getRegularTypeOfObjectLiteral(source2), target2, reportErrors2 && !(source2.flags & 402784252 /* Primitive */) && !(target2.flags & 402784252 /* Primitive */), intersectionState); + } + if (target2.flags & 2097152 /* Intersection */) { + return typeRelatedToEachType(source2, target2, reportErrors2, 2 /* Target */); + } + if (relation === comparableRelation && target2.flags & 402784252 /* Primitive */) { + const constraints = sameMap(source2.types, (t) => t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOfType(t) || unknownType : t); + if (constraints !== source2.types) { + source2 = getIntersectionType(constraints); + if (source2.flags & 131072 /* Never */) { + return 0 /* False */; + } + if (!(source2.flags & 2097152 /* Intersection */)) { + return isRelatedTo( + source2, + target2, + 1 /* Source */, + /*reportErrors*/ + false + ) || isRelatedTo( + target2, + source2, + 1 /* Source */, + /*reportErrors*/ + false + ); + } + } + } + return someTypeRelatedToType( + source2, + target2, + /*reportErrors*/ + false, + 1 /* Source */ + ); + } + function eachTypeRelatedToSomeType(source2, target2) { + let result2 = -1 /* True */; + const sourceTypes = source2.types; + for (const sourceType of sourceTypes) { + const related = typeRelatedToSomeType( + sourceType, + target2, + /*reportErrors*/ + false, + 0 /* None */ + ); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + function typeRelatedToSomeType(source2, target2, reportErrors2, intersectionState) { + const targetTypes = target2.types; + if (target2.flags & 1048576 /* Union */) { + if (containsType(targetTypes, source2)) { + return -1 /* True */; + } + if (relation !== comparableRelation && getObjectFlags(target2) & 32768 /* PrimitiveUnion */ && !(source2.flags & 1024 /* EnumLiteral */) && (source2.flags & (128 /* StringLiteral */ | 512 /* BooleanLiteral */ | 2048 /* BigIntLiteral */) || (relation === subtypeRelation || relation === strictSubtypeRelation) && source2.flags & 256 /* NumberLiteral */)) { + const alternateForm = source2 === source2.regularType ? source2.freshType : source2.regularType; + const primitive = source2.flags & 128 /* StringLiteral */ ? stringType : source2.flags & 256 /* NumberLiteral */ ? numberType : source2.flags & 2048 /* BigIntLiteral */ ? bigintType : void 0; + return primitive && containsType(targetTypes, primitive) || alternateForm && containsType(targetTypes, alternateForm) ? -1 /* True */ : 0 /* False */; + } + const match = getMatchingUnionConstituentForType(target2, source2); + if (match) { + const related = isRelatedTo( + source2, + match, + 2 /* Target */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + ); + if (related) { + return related; + } + } + } + for (const type of targetTypes) { + const related = isRelatedTo( + source2, + type, + 2 /* Target */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + ); + if (related) { + return related; + } + } + if (reportErrors2) { + const bestMatchingType = getBestMatchingType(source2, target2, isRelatedTo); + if (bestMatchingType) { + isRelatedTo( + source2, + bestMatchingType, + 2 /* Target */, + /*reportErrors*/ + true, + /*headMessage*/ + void 0, + intersectionState + ); + } + } + return 0 /* False */; + } + function typeRelatedToEachType(source2, target2, reportErrors2, intersectionState) { + let result2 = -1 /* True */; + const targetTypes = target2.types; + for (const targetType of targetTypes) { + const related = isRelatedTo( + source2, + targetType, + 2 /* Target */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + function someTypeRelatedToType(source2, target2, reportErrors2, intersectionState) { + const sourceTypes = source2.types; + if (source2.flags & 1048576 /* Union */ && containsType(sourceTypes, target2)) { + return -1 /* True */; + } + const len = sourceTypes.length; + for (let i = 0; i < len; i++) { + const related = isRelatedTo( + sourceTypes[i], + target2, + 1 /* Source */, + reportErrors2 && i === len - 1, + /*headMessage*/ + void 0, + intersectionState + ); + if (related) { + return related; + } + } + return 0 /* False */; + } + function getUndefinedStrippedTargetIfNeeded(source2, target2) { + if (source2.flags & 1048576 /* Union */ && target2.flags & 1048576 /* Union */ && !(source2.types[0].flags & 32768 /* Undefined */) && target2.types[0].flags & 32768 /* Undefined */) { + return extractTypesOfKind(target2, ~32768 /* Undefined */); + } + return target2; + } + function eachTypeRelatedToType(source2, target2, reportErrors2, intersectionState) { + let result2 = -1 /* True */; + const sourceTypes = source2.types; + const undefinedStrippedTarget = getUndefinedStrippedTargetIfNeeded(source2, target2); + for (let i = 0; i < sourceTypes.length; i++) { + const sourceType = sourceTypes[i]; + if (undefinedStrippedTarget.flags & 1048576 /* Union */ && sourceTypes.length >= undefinedStrippedTarget.types.length && sourceTypes.length % undefinedStrippedTarget.types.length === 0) { + const related2 = isRelatedTo( + sourceType, + undefinedStrippedTarget.types[i % undefinedStrippedTarget.types.length], + 3 /* Both */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + ); + if (related2) { + result2 &= related2; + continue; + } + } + const related = isRelatedTo( + sourceType, + target2, + 1 /* Source */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + function typeArgumentsRelatedTo(sources = emptyArray, targets = emptyArray, variances = emptyArray, reportErrors2, intersectionState) { + if (sources.length !== targets.length && relation === identityRelation) { + return 0 /* False */; + } + const length2 = sources.length <= targets.length ? sources.length : targets.length; + let result2 = -1 /* True */; + for (let i = 0; i < length2; i++) { + const varianceFlags = i < variances.length ? variances[i] : 1 /* Covariant */; + const variance = varianceFlags & 7 /* VarianceMask */; + if (variance !== 4 /* Independent */) { + const s = sources[i]; + const t = targets[i]; + let related = -1 /* True */; + if (varianceFlags & 8 /* Unmeasurable */) { + related = relation === identityRelation ? isRelatedTo( + s, + t, + 3 /* Both */, + /*reportErrors*/ + false + ) : compareTypesIdentical(s, t); + } else if (variance === 1 /* Covariant */) { + related = isRelatedTo( + s, + t, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } else if (variance === 2 /* Contravariant */) { + related = isRelatedTo( + t, + s, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } else if (variance === 3 /* Bivariant */) { + related = isRelatedTo( + t, + s, + 3 /* Both */, + /*reportErrors*/ + false + ); + if (!related) { + related = isRelatedTo( + s, + t, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } + } else { + related = isRelatedTo( + s, + t, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (related) { + related &= isRelatedTo( + t, + s, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } + } + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + } + return result2; + } + function recursiveTypeRelatedTo(source2, target2, reportErrors2, intersectionState, recursionFlags) { + var _a2, _b, _c; + if (overflow) { + return 0 /* False */; + } + const id = getRelationKey( + source2, + target2, + intersectionState, + relation, + /*ignoreConstraints*/ + false + ); + const entry = relation.get(id); + if (entry !== void 0) { + if (reportErrors2 && entry & 2 /* Failed */ && !(entry & 96 /* Overflow */)) { + } else { + if (outofbandVarianceMarkerHandler) { + const saved = entry & 24 /* ReportsMask */; + if (saved & 8 /* ReportsUnmeasurable */) { + instantiateType(source2, reportUnmeasurableMapper); + } + if (saved & 16 /* ReportsUnreliable */) { + instantiateType(source2, reportUnreliableMapper); + } + } + if (reportErrors2 && entry & 96 /* Overflow */) { + const message = entry & 32 /* ComplexityOverflow */ ? Diagnostics.Excessive_complexity_comparing_types_0_and_1 : Diagnostics.Excessive_stack_depth_comparing_types_0_and_1; + reportError(message, typeToString(source2), typeToString(target2)); + overrideNextErrorInfo++; + } + return entry & 1 /* Succeeded */ ? -1 /* True */ : 0 /* False */; + } + } + if (relationCount <= 0) { + overflow = true; + return 0 /* False */; + } + if (!maybeKeys) { + maybeKeys = []; + maybeKeysSet = /* @__PURE__ */ new Set(); + sourceStack = []; + targetStack = []; + } else { + if (maybeKeysSet.has(id)) { + return 3 /* Maybe */; + } + const broadestEquivalentId = id.startsWith("*") ? getRelationKey( + source2, + target2, + intersectionState, + relation, + /*ignoreConstraints*/ + true + ) : void 0; + if (broadestEquivalentId && maybeKeysSet.has(broadestEquivalentId)) { + return 3 /* Maybe */; + } + if (sourceDepth === 100 || targetDepth === 100) { + overflow = true; + return 0 /* False */; + } + } + const maybeStart = maybeCount; + maybeKeys[maybeCount] = id; + maybeKeysSet.add(id); + maybeCount++; + const saveExpandingFlags = expandingFlags; + if (recursionFlags & 1 /* Source */) { + sourceStack[sourceDepth] = source2; + sourceDepth++; + if (!(expandingFlags & 1 /* Source */) && isDeeplyNestedType(source2, sourceStack, sourceDepth)) expandingFlags |= 1 /* Source */; + } + if (recursionFlags & 2 /* Target */) { + targetStack[targetDepth] = target2; + targetDepth++; + if (!(expandingFlags & 2 /* Target */) && isDeeplyNestedType(target2, targetStack, targetDepth)) expandingFlags |= 2 /* Target */; + } + let originalHandler; + let propagatingVarianceFlags = 0; + if (outofbandVarianceMarkerHandler) { + originalHandler = outofbandVarianceMarkerHandler; + outofbandVarianceMarkerHandler = (onlyUnreliable) => { + propagatingVarianceFlags |= onlyUnreliable ? 16 /* ReportsUnreliable */ : 8 /* ReportsUnmeasurable */; + return originalHandler(onlyUnreliable); + }; + } + let result2; + if (expandingFlags === 3 /* Both */) { + (_a2 = tracing) == null ? void 0 : _a2.instant(tracing.Phase.CheckTypes, "recursiveTypeRelatedTo_DepthLimit", { + sourceId: source2.id, + sourceIdStack: sourceStack.map((t) => t.id), + targetId: target2.id, + targetIdStack: targetStack.map((t) => t.id), + depth: sourceDepth, + targetDepth + }); + result2 = 3 /* Maybe */; + } else { + (_b = tracing) == null ? void 0 : _b.push(tracing.Phase.CheckTypes, "structuredTypeRelatedTo", { sourceId: source2.id, targetId: target2.id }); + result2 = structuredTypeRelatedTo(source2, target2, reportErrors2, intersectionState); + (_c = tracing) == null ? void 0 : _c.pop(); + } + if (outofbandVarianceMarkerHandler) { + outofbandVarianceMarkerHandler = originalHandler; + } + if (recursionFlags & 1 /* Source */) { + sourceDepth--; + } + if (recursionFlags & 2 /* Target */) { + targetDepth--; + } + expandingFlags = saveExpandingFlags; + if (result2) { + if (result2 === -1 /* True */ || sourceDepth === 0 && targetDepth === 0) { + if (result2 === -1 /* True */ || result2 === 3 /* Maybe */) { + resetMaybeStack( + /*markAllAsSucceeded*/ + true + ); + } else { + resetMaybeStack( + /*markAllAsSucceeded*/ + false + ); + } + } + } else { + relation.set(id, 2 /* Failed */ | propagatingVarianceFlags); + relationCount--; + resetMaybeStack( + /*markAllAsSucceeded*/ + false + ); + } + return result2; + function resetMaybeStack(markAllAsSucceeded) { + for (let i = maybeStart; i < maybeCount; i++) { + maybeKeysSet.delete(maybeKeys[i]); + if (markAllAsSucceeded) { + relation.set(maybeKeys[i], 1 /* Succeeded */ | propagatingVarianceFlags); + relationCount--; + } + } + maybeCount = maybeStart; + } + } + function structuredTypeRelatedTo(source2, target2, reportErrors2, intersectionState) { + const saveErrorInfo = captureErrorCalculationState(); + let result2 = structuredTypeRelatedToWorker(source2, target2, reportErrors2, intersectionState, saveErrorInfo); + if (relation !== identityRelation) { + if (!result2 && (source2.flags & 2097152 /* Intersection */ || source2.flags & 262144 /* TypeParameter */ && target2.flags & 1048576 /* Union */)) { + const constraint = getEffectiveConstraintOfIntersection(source2.flags & 2097152 /* Intersection */ ? source2.types : [source2], !!(target2.flags & 1048576 /* Union */)); + if (constraint && everyType(constraint, (c) => c !== source2)) { + result2 = isRelatedTo( + constraint, + target2, + 1 /* Source */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + ); + } + } + if (result2 && !(intersectionState & 2 /* Target */) && target2.flags & 2097152 /* Intersection */ && !isGenericObjectType(target2) && source2.flags & (524288 /* Object */ | 2097152 /* Intersection */)) { + result2 &= propertiesRelatedTo( + source2, + target2, + reportErrors2, + /*excludedProperties*/ + void 0, + /*optionalsOnly*/ + false, + 0 /* None */ + ); + if (result2 && isObjectLiteralType2(source2) && getObjectFlags(source2) & 8192 /* FreshLiteral */) { + result2 &= indexSignaturesRelatedTo( + source2, + target2, + /*sourceIsPrimitive*/ + false, + reportErrors2, + 0 /* None */ + ); + } + } else if (result2 && isNonGenericObjectType(target2) && !isArrayOrTupleType(target2) && source2.flags & 2097152 /* Intersection */ && getApparentType(source2).flags & 3670016 /* StructuredType */ && !some(source2.types, (t) => t === target2 || !!(getObjectFlags(t) & 262144 /* NonInferrableType */))) { + result2 &= propertiesRelatedTo( + source2, + target2, + reportErrors2, + /*excludedProperties*/ + void 0, + /*optionalsOnly*/ + true, + intersectionState + ); + } + } + if (result2) { + resetErrorInfo(saveErrorInfo); + } + return result2; + } + function getApparentMappedTypeKeys(nameType, targetType) { + const modifiersType = getApparentType(getModifiersTypeFromMappedType(targetType)); + const mappedKeys = []; + forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType( + modifiersType, + 8576 /* StringOrNumberLiteralOrUnique */, + /*stringsOnly*/ + false, + (t) => void mappedKeys.push(instantiateType(nameType, appendTypeMapping(targetType.mapper, getTypeParameterFromMappedType(targetType), t))) + ); + return getUnionType(mappedKeys); + } + function structuredTypeRelatedToWorker(source2, target2, reportErrors2, intersectionState, saveErrorInfo) { + let result2; + let originalErrorInfo; + let varianceCheckFailed = false; + let sourceFlags = source2.flags; + const targetFlags = target2.flags; + if (relation === identityRelation) { + if (sourceFlags & 3145728 /* UnionOrIntersection */) { + let result3 = eachTypeRelatedToSomeType(source2, target2); + if (result3) { + result3 &= eachTypeRelatedToSomeType(target2, source2); + } + return result3; + } + if (sourceFlags & 4194304 /* Index */) { + return isRelatedTo( + source2.type, + target2.type, + 3 /* Both */, + /*reportErrors*/ + false + ); + } + if (sourceFlags & 8388608 /* IndexedAccess */) { + if (result2 = isRelatedTo( + source2.objectType, + target2.objectType, + 3 /* Both */, + /*reportErrors*/ + false + )) { + if (result2 &= isRelatedTo( + source2.indexType, + target2.indexType, + 3 /* Both */, + /*reportErrors*/ + false + )) { + return result2; + } + } + } + if (sourceFlags & 16777216 /* Conditional */) { + if (source2.root.isDistributive === target2.root.isDistributive) { + if (result2 = isRelatedTo( + source2.checkType, + target2.checkType, + 3 /* Both */, + /*reportErrors*/ + false + )) { + if (result2 &= isRelatedTo( + source2.extendsType, + target2.extendsType, + 3 /* Both */, + /*reportErrors*/ + false + )) { + if (result2 &= isRelatedTo( + getTrueTypeFromConditionalType(source2), + getTrueTypeFromConditionalType(target2), + 3 /* Both */, + /*reportErrors*/ + false + )) { + if (result2 &= isRelatedTo( + getFalseTypeFromConditionalType(source2), + getFalseTypeFromConditionalType(target2), + 3 /* Both */, + /*reportErrors*/ + false + )) { + return result2; + } + } + } + } + } + } + if (sourceFlags & 33554432 /* Substitution */) { + if (result2 = isRelatedTo( + source2.baseType, + target2.baseType, + 3 /* Both */, + /*reportErrors*/ + false + )) { + if (result2 &= isRelatedTo( + source2.constraint, + target2.constraint, + 3 /* Both */, + /*reportErrors*/ + false + )) { + return result2; + } + } + } + if (sourceFlags & 134217728 /* TemplateLiteral */) { + if (arrayIsEqualTo(source2.texts, target2.texts)) { + const sourceTypes = source2.types; + const targetTypes = target2.types; + result2 = -1 /* True */; + for (let i = 0; i < sourceTypes.length; i++) { + if (!(result2 &= isRelatedTo( + sourceTypes[i], + targetTypes[i], + 3 /* Both */, + /*reportErrors*/ + false + ))) { + break; + } + } + return result2; + } + } + if (sourceFlags & 268435456 /* StringMapping */) { + if (source2.symbol === target2.symbol) { + return isRelatedTo( + source2.type, + target2.type, + 3 /* Both */, + /*reportErrors*/ + false + ); + } + } + if (!(sourceFlags & 524288 /* Object */)) { + return 0 /* False */; + } + } else if (sourceFlags & 3145728 /* UnionOrIntersection */ || targetFlags & 3145728 /* UnionOrIntersection */) { + if (result2 = unionOrIntersectionRelatedTo(source2, target2, reportErrors2, intersectionState)) { + return result2; + } + if (!(sourceFlags & 465829888 /* Instantiable */ || sourceFlags & 524288 /* Object */ && targetFlags & 1048576 /* Union */ || sourceFlags & 2097152 /* Intersection */ && targetFlags & (524288 /* Object */ | 1048576 /* Union */ | 465829888 /* Instantiable */))) { + return 0 /* False */; + } + } + if (sourceFlags & (524288 /* Object */ | 16777216 /* Conditional */) && source2.aliasSymbol && source2.aliasTypeArguments && source2.aliasSymbol === target2.aliasSymbol && !(isMarkerType(source2) || isMarkerType(target2))) { + const variances = getAliasVariances(source2.aliasSymbol); + if (variances === emptyArray) { + return 1 /* Unknown */; + } + const params = getSymbolLinks(source2.aliasSymbol).typeParameters; + const minParams = getMinTypeArgumentCount(params); + const sourceTypes = fillMissingTypeArguments(source2.aliasTypeArguments, params, minParams, isInJSFile(source2.aliasSymbol.valueDeclaration)); + const targetTypes = fillMissingTypeArguments(target2.aliasTypeArguments, params, minParams, isInJSFile(source2.aliasSymbol.valueDeclaration)); + const varianceResult = relateVariances(sourceTypes, targetTypes, variances, intersectionState); + if (varianceResult !== void 0) { + return varianceResult; + } + } + if (isSingleElementGenericTupleType(source2) && !source2.target.readonly && (result2 = isRelatedTo(getTypeArguments(source2)[0], target2, 1 /* Source */)) || isSingleElementGenericTupleType(target2) && (target2.target.readonly || isMutableArrayOrTuple(getBaseConstraintOfType(source2) || source2)) && (result2 = isRelatedTo(source2, getTypeArguments(target2)[0], 2 /* Target */))) { + return result2; + } + if (targetFlags & 262144 /* TypeParameter */) { + if (getObjectFlags(source2) & 32 /* Mapped */ && !source2.declaration.nameType && isRelatedTo(getIndexType(target2), getConstraintTypeFromMappedType(source2), 3 /* Both */)) { + if (!(getMappedTypeModifiers(source2) & 4 /* IncludeOptional */)) { + const templateType = getTemplateTypeFromMappedType(source2); + const indexedAccessType = getIndexedAccessType(target2, getTypeParameterFromMappedType(source2)); + if (result2 = isRelatedTo(templateType, indexedAccessType, 3 /* Both */, reportErrors2)) { + return result2; + } + } + } + if (relation === comparableRelation && sourceFlags & 262144 /* TypeParameter */) { + let constraint = getConstraintOfTypeParameter(source2); + if (constraint) { + while (constraint && someType(constraint, (c) => !!(c.flags & 262144 /* TypeParameter */))) { + if (result2 = isRelatedTo( + constraint, + target2, + 1 /* Source */, + /*reportErrors*/ + false + )) { + return result2; + } + constraint = getConstraintOfTypeParameter(constraint); + } + } + return 0 /* False */; + } + } else if (targetFlags & 4194304 /* Index */) { + const targetType = target2.type; + if (sourceFlags & 4194304 /* Index */) { + if (result2 = isRelatedTo( + targetType, + source2.type, + 3 /* Both */, + /*reportErrors*/ + false + )) { + return result2; + } + } + if (isTupleType(targetType)) { + if (result2 = isRelatedTo(source2, getKnownKeysOfTupleType(targetType), 2 /* Target */, reportErrors2)) { + return result2; + } + } else { + const constraint = getSimplifiedTypeOrConstraint(targetType); + if (constraint) { + if (isRelatedTo(source2, getIndexType(constraint, target2.indexFlags | 4 /* NoReducibleCheck */), 2 /* Target */, reportErrors2) === -1 /* True */) { + return -1 /* True */; + } + } else if (isGenericMappedType(targetType)) { + const nameType = getNameTypeFromMappedType(targetType); + const constraintType = getConstraintTypeFromMappedType(targetType); + let targetKeys; + if (nameType && isMappedTypeWithKeyofConstraintDeclaration(targetType)) { + const mappedKeys = getApparentMappedTypeKeys(nameType, targetType); + targetKeys = getUnionType([mappedKeys, nameType]); + } else { + targetKeys = nameType || constraintType; + } + if (isRelatedTo(source2, targetKeys, 2 /* Target */, reportErrors2) === -1 /* True */) { + return -1 /* True */; + } + } + } + } else if (targetFlags & 8388608 /* IndexedAccess */) { + if (sourceFlags & 8388608 /* IndexedAccess */) { + if (result2 = isRelatedTo(source2.objectType, target2.objectType, 3 /* Both */, reportErrors2)) { + result2 &= isRelatedTo(source2.indexType, target2.indexType, 3 /* Both */, reportErrors2); + } + if (result2) { + return result2; + } + if (reportErrors2) { + originalErrorInfo = errorInfo; + } + } + if (relation === assignableRelation || relation === comparableRelation) { + const objectType = target2.objectType; + const indexType = target2.indexType; + const baseObjectType = getBaseConstraintOfType(objectType) || objectType; + const baseIndexType = getBaseConstraintOfType(indexType) || indexType; + if (!isGenericObjectType(baseObjectType) && !isGenericIndexType(baseIndexType)) { + const accessFlags = 4 /* Writing */ | (baseObjectType !== objectType ? 2 /* NoIndexSignatures */ : 0); + const constraint = getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, accessFlags); + if (constraint) { + if (reportErrors2 && originalErrorInfo) { + resetErrorInfo(saveErrorInfo); + } + if (result2 = isRelatedTo( + source2, + constraint, + 2 /* Target */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + )) { + return result2; + } + if (reportErrors2 && originalErrorInfo && errorInfo) { + errorInfo = countMessageChainBreadth([originalErrorInfo]) <= countMessageChainBreadth([errorInfo]) ? originalErrorInfo : errorInfo; + } + } + } + } + if (reportErrors2) { + originalErrorInfo = void 0; + } + } else if (isGenericMappedType(target2) && relation !== identityRelation) { + const keysRemapped = !!target2.declaration.nameType; + const templateType = getTemplateTypeFromMappedType(target2); + const modifiers = getMappedTypeModifiers(target2); + if (!(modifiers & 8 /* ExcludeOptional */)) { + if (!keysRemapped && templateType.flags & 8388608 /* IndexedAccess */ && templateType.objectType === source2 && templateType.indexType === getTypeParameterFromMappedType(target2)) { + return -1 /* True */; + } + if (!isGenericMappedType(source2)) { + const targetKeys = keysRemapped ? getNameTypeFromMappedType(target2) : getConstraintTypeFromMappedType(target2); + const sourceKeys = getIndexType(source2, 2 /* NoIndexSignatures */); + const includeOptional = modifiers & 4 /* IncludeOptional */; + const filteredByApplicability = includeOptional ? intersectTypes(targetKeys, sourceKeys) : void 0; + if (includeOptional ? !(filteredByApplicability.flags & 131072 /* Never */) : isRelatedTo(targetKeys, sourceKeys, 3 /* Both */)) { + const templateType2 = getTemplateTypeFromMappedType(target2); + const typeParameter = getTypeParameterFromMappedType(target2); + const nonNullComponent = extractTypesOfKind(templateType2, ~98304 /* Nullable */); + if (!keysRemapped && nonNullComponent.flags & 8388608 /* IndexedAccess */ && nonNullComponent.indexType === typeParameter) { + if (result2 = isRelatedTo(source2, nonNullComponent.objectType, 2 /* Target */, reportErrors2)) { + return result2; + } + } else { + const indexingType = keysRemapped ? filteredByApplicability || targetKeys : filteredByApplicability ? getIntersectionType([filteredByApplicability, typeParameter]) : typeParameter; + const indexedAccessType = getIndexedAccessType(source2, indexingType); + if (result2 = isRelatedTo(indexedAccessType, templateType2, 3 /* Both */, reportErrors2)) { + return result2; + } + } + } + originalErrorInfo = errorInfo; + resetErrorInfo(saveErrorInfo); + } + } + } else if (targetFlags & 16777216 /* Conditional */) { + if (isDeeplyNestedType(target2, targetStack, targetDepth, 10)) { + return 3 /* Maybe */; + } + const c = target2; + if (!c.root.inferTypeParameters && !isDistributionDependent(c.root) && !(source2.flags & 16777216 /* Conditional */ && source2.root === c.root)) { + const skipTrue = !isTypeAssignableTo(getPermissiveInstantiation(c.checkType), getPermissiveInstantiation(c.extendsType)); + const skipFalse = !skipTrue && isTypeAssignableTo(getRestrictiveInstantiation(c.checkType), getRestrictiveInstantiation(c.extendsType)); + if (result2 = skipTrue ? -1 /* True */ : isRelatedTo( + source2, + getTrueTypeFromConditionalType(c), + 2 /* Target */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + )) { + result2 &= skipFalse ? -1 /* True */ : isRelatedTo( + source2, + getFalseTypeFromConditionalType(c), + 2 /* Target */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + ); + if (result2) { + return result2; + } + } + } + } else if (targetFlags & 134217728 /* TemplateLiteral */) { + if (sourceFlags & 134217728 /* TemplateLiteral */) { + if (relation === comparableRelation) { + return templateLiteralTypesDefinitelyUnrelated(source2, target2) ? 0 /* False */ : -1 /* True */; + } + instantiateType(source2, reportUnreliableMapper); + } + if (isTypeMatchedByTemplateLiteralType(source2, target2)) { + return -1 /* True */; + } + } else if (target2.flags & 268435456 /* StringMapping */) { + if (!(source2.flags & 268435456 /* StringMapping */)) { + if (isMemberOfStringMapping(source2, target2)) { + return -1 /* True */; + } + } + } + if (sourceFlags & 8650752 /* TypeVariable */) { + if (!(sourceFlags & 8388608 /* IndexedAccess */ && targetFlags & 8388608 /* IndexedAccess */)) { + const constraint = getConstraintOfType(source2) || unknownType; + if (result2 = isRelatedTo( + constraint, + target2, + 1 /* Source */, + /*reportErrors*/ + false, + /*headMessage*/ + void 0, + intersectionState + )) { + return result2; + } else if (result2 = isRelatedTo( + getTypeWithThisArgument(constraint, source2), + target2, + 1 /* Source */, + reportErrors2 && constraint !== unknownType && !(targetFlags & sourceFlags & 262144 /* TypeParameter */), + /*headMessage*/ + void 0, + intersectionState + )) { + return result2; + } + if (isMappedTypeGenericIndexedAccess(source2)) { + const indexConstraint = getConstraintOfType(source2.indexType); + if (indexConstraint) { + if (result2 = isRelatedTo(getIndexedAccessType(source2.objectType, indexConstraint), target2, 1 /* Source */, reportErrors2)) { + return result2; + } + } + } + } + } else if (sourceFlags & 4194304 /* Index */) { + const isDeferredMappedIndex = shouldDeferIndexType(source2.type, source2.indexFlags) && getObjectFlags(source2.type) & 32 /* Mapped */; + if (result2 = isRelatedTo(stringNumberSymbolType, target2, 1 /* Source */, reportErrors2 && !isDeferredMappedIndex)) { + return result2; + } + if (isDeferredMappedIndex) { + const mappedType = source2.type; + const nameType = getNameTypeFromMappedType(mappedType); + const sourceMappedKeys = nameType && isMappedTypeWithKeyofConstraintDeclaration(mappedType) ? getApparentMappedTypeKeys(nameType, mappedType) : nameType || getConstraintTypeFromMappedType(mappedType); + if (result2 = isRelatedTo(sourceMappedKeys, target2, 1 /* Source */, reportErrors2)) { + return result2; + } + } + } else if (sourceFlags & 134217728 /* TemplateLiteral */ && !(targetFlags & 524288 /* Object */)) { + if (!(targetFlags & 134217728 /* TemplateLiteral */)) { + const constraint = getBaseConstraintOfType(source2); + if (constraint && constraint !== source2 && (result2 = isRelatedTo(constraint, target2, 1 /* Source */, reportErrors2))) { + return result2; + } + } + } else if (sourceFlags & 268435456 /* StringMapping */) { + if (targetFlags & 268435456 /* StringMapping */) { + if (source2.symbol !== target2.symbol) { + return 0 /* False */; + } + if (result2 = isRelatedTo(source2.type, target2.type, 3 /* Both */, reportErrors2)) { + return result2; + } + } else { + const constraint = getBaseConstraintOfType(source2); + if (constraint && (result2 = isRelatedTo(constraint, target2, 1 /* Source */, reportErrors2))) { + return result2; + } + } + } else if (sourceFlags & 16777216 /* Conditional */) { + if (isDeeplyNestedType(source2, sourceStack, sourceDepth, 10)) { + return 3 /* Maybe */; + } + if (targetFlags & 16777216 /* Conditional */) { + const sourceParams = source2.root.inferTypeParameters; + let sourceExtends = source2.extendsType; + let mapper; + if (sourceParams) { + const ctx = createInferenceContext( + sourceParams, + /*signature*/ + void 0, + 0 /* None */, + isRelatedToWorker + ); + inferTypes(ctx.inferences, target2.extendsType, sourceExtends, 512 /* NoConstraints */ | 1024 /* AlwaysStrict */); + sourceExtends = instantiateType(sourceExtends, ctx.mapper); + mapper = ctx.mapper; + } + if (isTypeIdenticalTo(sourceExtends, target2.extendsType) && (isRelatedTo(source2.checkType, target2.checkType, 3 /* Both */) || isRelatedTo(target2.checkType, source2.checkType, 3 /* Both */))) { + if (result2 = isRelatedTo(instantiateType(getTrueTypeFromConditionalType(source2), mapper), getTrueTypeFromConditionalType(target2), 3 /* Both */, reportErrors2)) { + result2 &= isRelatedTo(getFalseTypeFromConditionalType(source2), getFalseTypeFromConditionalType(target2), 3 /* Both */, reportErrors2); + } + if (result2) { + return result2; + } + } + } + const defaultConstraint = getDefaultConstraintOfConditionalType(source2); + if (defaultConstraint) { + if (result2 = isRelatedTo(defaultConstraint, target2, 1 /* Source */, reportErrors2)) { + return result2; + } + } + const distributiveConstraint = !(targetFlags & 16777216 /* Conditional */) && hasNonCircularBaseConstraint(source2) ? getConstraintOfDistributiveConditionalType(source2) : void 0; + if (distributiveConstraint) { + resetErrorInfo(saveErrorInfo); + if (result2 = isRelatedTo(distributiveConstraint, target2, 1 /* Source */, reportErrors2)) { + return result2; + } + } + } else { + if (relation !== subtypeRelation && relation !== strictSubtypeRelation && isPartialMappedType(target2) && isEmptyObjectType(source2)) { + return -1 /* True */; + } + if (isGenericMappedType(target2)) { + if (isGenericMappedType(source2)) { + if (result2 = mappedTypeRelatedTo(source2, target2, reportErrors2)) { + return result2; + } + } + return 0 /* False */; + } + const sourceIsPrimitive = !!(sourceFlags & 402784252 /* Primitive */); + if (relation !== identityRelation) { + source2 = getApparentType(source2); + sourceFlags = source2.flags; + } else if (isGenericMappedType(source2)) { + return 0 /* False */; + } + if (getObjectFlags(source2) & 4 /* Reference */ && getObjectFlags(target2) & 4 /* Reference */ && source2.target === target2.target && !isTupleType(source2) && !(isMarkerType(source2) || isMarkerType(target2))) { + if (isEmptyArrayLiteralType(source2)) { + return -1 /* True */; + } + const variances = getVariances(source2.target); + if (variances === emptyArray) { + return 1 /* Unknown */; + } + const varianceResult = relateVariances(getTypeArguments(source2), getTypeArguments(target2), variances, intersectionState); + if (varianceResult !== void 0) { + return varianceResult; + } + } else if (isReadonlyArrayType(target2) ? everyType(source2, isArrayOrTupleType) : isArrayType(target2) && everyType(source2, (t) => isTupleType(t) && !t.target.readonly)) { + if (relation !== identityRelation) { + return isRelatedTo(getIndexTypeOfType(source2, numberType) || anyType, getIndexTypeOfType(target2, numberType) || anyType, 3 /* Both */, reportErrors2); + } else { + return 0 /* False */; + } + } else if (isGenericTupleType(source2) && isTupleType(target2) && !isGenericTupleType(target2)) { + const constraint = getBaseConstraintOrType(source2); + if (constraint !== source2) { + return isRelatedTo(constraint, target2, 1 /* Source */, reportErrors2); + } + } else if ((relation === subtypeRelation || relation === strictSubtypeRelation) && isEmptyObjectType(target2) && getObjectFlags(target2) & 8192 /* FreshLiteral */ && !isEmptyObjectType(source2)) { + return 0 /* False */; + } + if (sourceFlags & (524288 /* Object */ | 2097152 /* Intersection */) && targetFlags & 524288 /* Object */) { + const reportStructuralErrors = reportErrors2 && errorInfo === saveErrorInfo.errorInfo && !sourceIsPrimitive; + result2 = propertiesRelatedTo( + source2, + target2, + reportStructuralErrors, + /*excludedProperties*/ + void 0, + /*optionalsOnly*/ + false, + intersectionState + ); + if (result2) { + result2 &= signaturesRelatedTo(source2, target2, 0 /* Call */, reportStructuralErrors, intersectionState); + if (result2) { + result2 &= signaturesRelatedTo(source2, target2, 1 /* Construct */, reportStructuralErrors, intersectionState); + if (result2) { + result2 &= indexSignaturesRelatedTo(source2, target2, sourceIsPrimitive, reportStructuralErrors, intersectionState); + } + } + } + if (varianceCheckFailed && result2) { + errorInfo = originalErrorInfo || errorInfo || saveErrorInfo.errorInfo; + } else if (result2) { + return result2; + } + } + if (sourceFlags & (524288 /* Object */ | 2097152 /* Intersection */) && targetFlags & 1048576 /* Union */) { + const objectOnlyTarget = extractTypesOfKind(target2, 524288 /* Object */ | 2097152 /* Intersection */ | 33554432 /* Substitution */); + if (objectOnlyTarget.flags & 1048576 /* Union */) { + const result3 = typeRelatedToDiscriminatedType(source2, objectOnlyTarget); + if (result3) { + return result3; + } + } + } + } + return 0 /* False */; + function countMessageChainBreadth(info) { + if (!info) return 0; + return reduceLeft(info, (value, chain) => value + 1 + countMessageChainBreadth(chain.next), 0); + } + function relateVariances(sourceTypeArguments, targetTypeArguments, variances, intersectionState2) { + if (result2 = typeArgumentsRelatedTo(sourceTypeArguments, targetTypeArguments, variances, reportErrors2, intersectionState2)) { + return result2; + } + if (some(variances, (v) => !!(v & 24 /* AllowsStructuralFallback */))) { + originalErrorInfo = void 0; + resetErrorInfo(saveErrorInfo); + return void 0; + } + const allowStructuralFallback = targetTypeArguments && hasCovariantVoidArgument(targetTypeArguments, variances); + varianceCheckFailed = !allowStructuralFallback; + if (variances !== emptyArray && !allowStructuralFallback) { + if (varianceCheckFailed && !(reportErrors2 && some(variances, (v) => (v & 7 /* VarianceMask */) === 0 /* Invariant */))) { + return 0 /* False */; + } + originalErrorInfo = errorInfo; + resetErrorInfo(saveErrorInfo); + } + } + } + function mappedTypeRelatedTo(source2, target2, reportErrors2) { + const modifiersRelated = relation === comparableRelation || (relation === identityRelation ? getMappedTypeModifiers(source2) === getMappedTypeModifiers(target2) : getCombinedMappedTypeOptionality(source2) <= getCombinedMappedTypeOptionality(target2)); + if (modifiersRelated) { + let result2; + const targetConstraint = getConstraintTypeFromMappedType(target2); + const sourceConstraint = instantiateType(getConstraintTypeFromMappedType(source2), getCombinedMappedTypeOptionality(source2) < 0 ? reportUnmeasurableMapper : reportUnreliableMapper); + if (result2 = isRelatedTo(targetConstraint, sourceConstraint, 3 /* Both */, reportErrors2)) { + const mapper = createTypeMapper([getTypeParameterFromMappedType(source2)], [getTypeParameterFromMappedType(target2)]); + if (instantiateType(getNameTypeFromMappedType(source2), mapper) === instantiateType(getNameTypeFromMappedType(target2), mapper)) { + return result2 & isRelatedTo(instantiateType(getTemplateTypeFromMappedType(source2), mapper), getTemplateTypeFromMappedType(target2), 3 /* Both */, reportErrors2); + } + } + } + return 0 /* False */; + } + function typeRelatedToDiscriminatedType(source2, target2) { + var _a2; + const sourceProperties = getPropertiesOfType(source2); + const sourcePropertiesFiltered = findDiscriminantProperties(sourceProperties, target2); + if (!sourcePropertiesFiltered) return 0 /* False */; + let numCombinations = 1; + for (const sourceProperty of sourcePropertiesFiltered) { + numCombinations *= countTypes(getNonMissingTypeOfSymbol(sourceProperty)); + if (numCombinations > 25) { + (_a2 = tracing) == null ? void 0 : _a2.instant(tracing.Phase.CheckTypes, "typeRelatedToDiscriminatedType_DepthLimit", { sourceId: source2.id, targetId: target2.id, numCombinations }); + return 0 /* False */; + } + } + const sourceDiscriminantTypes = new Array(sourcePropertiesFiltered.length); + const excludedProperties = /* @__PURE__ */ new Set(); + for (let i = 0; i < sourcePropertiesFiltered.length; i++) { + const sourceProperty = sourcePropertiesFiltered[i]; + const sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty); + sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */ ? sourcePropertyType.types : [sourcePropertyType]; + excludedProperties.add(sourceProperty.escapedName); + } + const discriminantCombinations = cartesianProduct(sourceDiscriminantTypes); + const matchingTypes = []; + for (const combination of discriminantCombinations) { + let hasMatch = false; + outer: + for (const type of target2.types) { + for (let i = 0; i < sourcePropertiesFiltered.length; i++) { + const sourceProperty = sourcePropertiesFiltered[i]; + const targetProperty = getPropertyOfType(type, sourceProperty.escapedName); + if (!targetProperty) continue outer; + if (sourceProperty === targetProperty) continue; + const related = propertyRelatedTo( + source2, + target2, + sourceProperty, + targetProperty, + (_) => combination[i], + /*reportErrors*/ + false, + 0 /* None */, + /*skipOptional*/ + strictNullChecks || relation === comparableRelation + ); + if (!related) { + continue outer; + } + } + pushIfUnique(matchingTypes, type, equateValues); + hasMatch = true; + } + if (!hasMatch) { + return 0 /* False */; + } + } + let result2 = -1 /* True */; + for (const type of matchingTypes) { + result2 &= propertiesRelatedTo( + source2, + type, + /*reportErrors*/ + false, + excludedProperties, + /*optionalsOnly*/ + false, + 0 /* None */ + ); + if (result2) { + result2 &= signaturesRelatedTo( + source2, + type, + 0 /* Call */, + /*reportErrors*/ + false, + 0 /* None */ + ); + if (result2) { + result2 &= signaturesRelatedTo( + source2, + type, + 1 /* Construct */, + /*reportErrors*/ + false, + 0 /* None */ + ); + if (result2 && !(isTupleType(source2) && isTupleType(type))) { + result2 &= indexSignaturesRelatedTo( + source2, + type, + /*sourceIsPrimitive*/ + false, + /*reportErrors*/ + false, + 0 /* None */ + ); + } + } + } + if (!result2) { + return result2; + } + } + return result2; + } + function excludeProperties(properties, excludedProperties) { + if (!excludedProperties || properties.length === 0) return properties; + let result2; + for (let i = 0; i < properties.length; i++) { + if (!excludedProperties.has(properties[i].escapedName)) { + if (result2) { + result2.push(properties[i]); + } + } else if (!result2) { + result2 = properties.slice(0, i); + } + } + return result2 || properties; + } + function isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors2, intersectionState) { + const targetIsOptional = strictNullChecks && !!(getCheckFlags(targetProp) & 48 /* Partial */); + const effectiveTarget = addOptionality( + getNonMissingTypeOfSymbol(targetProp), + /*isProperty*/ + false, + targetIsOptional + ); + if (effectiveTarget.flags & (relation === strictSubtypeRelation ? 1 /* Any */ : 3 /* AnyOrUnknown */)) { + return -1 /* True */; + } + const effectiveSource = getTypeOfSourceProperty(sourceProp); + return isRelatedTo( + effectiveSource, + effectiveTarget, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } + function propertyRelatedTo(source2, target2, sourceProp, targetProp, getTypeOfSourceProperty, reportErrors2, intersectionState, skipOptional) { + const sourcePropFlags = getDeclarationModifierFlagsFromSymbol(sourceProp); + const targetPropFlags = getDeclarationModifierFlagsFromSymbol(targetProp); + if (sourcePropFlags & 2 /* Private */ || targetPropFlags & 2 /* Private */) { + if (sourceProp.valueDeclaration !== targetProp.valueDeclaration) { + if (reportErrors2) { + if (sourcePropFlags & 2 /* Private */ && targetPropFlags & 2 /* Private */) { + reportError(Diagnostics.Types_have_separate_declarations_of_a_private_property_0, symbolToString(targetProp)); + } else { + reportError(Diagnostics.Property_0_is_private_in_type_1_but_not_in_type_2, symbolToString(targetProp), typeToString(sourcePropFlags & 2 /* Private */ ? source2 : target2), typeToString(sourcePropFlags & 2 /* Private */ ? target2 : source2)); + } + } + return 0 /* False */; + } + } else if (targetPropFlags & 4 /* Protected */) { + if (!isValidOverrideOf(sourceProp, targetProp)) { + if (reportErrors2) { + reportError(Diagnostics.Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2, symbolToString(targetProp), typeToString(getDeclaringClass(sourceProp) || source2), typeToString(getDeclaringClass(targetProp) || target2)); + } + return 0 /* False */; + } + } else if (sourcePropFlags & 4 /* Protected */) { + if (reportErrors2) { + reportError(Diagnostics.Property_0_is_protected_in_type_1_but_public_in_type_2, symbolToString(targetProp), typeToString(source2), typeToString(target2)); + } + return 0 /* False */; + } + if (relation === strictSubtypeRelation && isReadonlySymbol(sourceProp) && !isReadonlySymbol(targetProp)) { + return 0 /* False */; + } + const related = isPropertySymbolTypeRelated(sourceProp, targetProp, getTypeOfSourceProperty, reportErrors2, intersectionState); + if (!related) { + if (reportErrors2) { + reportIncompatibleError(Diagnostics.Types_of_property_0_are_incompatible, symbolToString(targetProp)); + } + return 0 /* False */; + } + if (!skipOptional && sourceProp.flags & 16777216 /* Optional */ && targetProp.flags & 106500 /* ClassMember */ && !(targetProp.flags & 16777216 /* Optional */)) { + if (reportErrors2) { + reportError(Diagnostics.Property_0_is_optional_in_type_1_but_required_in_type_2, symbolToString(targetProp), typeToString(source2), typeToString(target2)); + } + return 0 /* False */; + } + return related; + } + function reportUnmatchedProperty(source2, target2, unmatchedProperty, requireOptionalProperties) { + let shouldSkipElaboration = false; + if (unmatchedProperty.valueDeclaration && isNamedDeclaration(unmatchedProperty.valueDeclaration) && isPrivateIdentifier(unmatchedProperty.valueDeclaration.name) && source2.symbol && source2.symbol.flags & 32 /* Class */) { + const privateIdentifierDescription = unmatchedProperty.valueDeclaration.name.escapedText; + const symbolTableKey = getSymbolNameForPrivateIdentifier(source2.symbol, privateIdentifierDescription); + if (symbolTableKey && getPropertyOfType(source2, symbolTableKey)) { + const sourceName = factory.getDeclarationName(source2.symbol.valueDeclaration); + const targetName = factory.getDeclarationName(target2.symbol.valueDeclaration); + reportError( + Diagnostics.Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2, + diagnosticName(privateIdentifierDescription), + diagnosticName(sourceName.escapedText === "" ? anon : sourceName), + diagnosticName(targetName.escapedText === "" ? anon : targetName) + ); + return; + } + } + const props = arrayFrom(getUnmatchedProperties( + source2, + target2, + requireOptionalProperties, + /*matchDiscriminantProperties*/ + false + )); + if (!headMessage || headMessage.code !== Diagnostics.Class_0_incorrectly_implements_interface_1.code && headMessage.code !== Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code) { + shouldSkipElaboration = true; + } + if (props.length === 1) { + const propName = symbolToString( + unmatchedProperty, + /*enclosingDeclaration*/ + void 0, + 0 /* None */, + 4 /* AllowAnyNodeKind */ | 16 /* WriteComputedProps */ + ); + reportError(Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2, propName, ...getTypeNamesForErrorDisplay(source2, target2)); + if (length(unmatchedProperty.declarations)) { + associateRelatedInfo(createDiagnosticForNode(unmatchedProperty.declarations[0], Diagnostics._0_is_declared_here, propName)); + } + if (shouldSkipElaboration && errorInfo) { + overrideNextErrorInfo++; + } + } else if (tryElaborateArrayLikeErrors( + source2, + target2, + /*reportErrors*/ + false + )) { + if (props.length > 5) { + reportError(Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more, typeToString(source2), typeToString(target2), map(props.slice(0, 4), (p) => symbolToString(p)).join(", "), props.length - 4); + } else { + reportError(Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2, typeToString(source2), typeToString(target2), map(props, (p) => symbolToString(p)).join(", ")); + } + if (shouldSkipElaboration && errorInfo) { + overrideNextErrorInfo++; + } + } + } + function propertiesRelatedTo(source2, target2, reportErrors2, excludedProperties, optionalsOnly, intersectionState) { + if (relation === identityRelation) { + return propertiesIdenticalTo(source2, target2, excludedProperties); + } + let result2 = -1 /* True */; + if (isTupleType(target2)) { + if (isArrayOrTupleType(source2)) { + if (!target2.target.readonly && (isReadonlyArrayType(source2) || isTupleType(source2) && source2.target.readonly)) { + return 0 /* False */; + } + const sourceArity = getTypeReferenceArity(source2); + const targetArity = getTypeReferenceArity(target2); + const sourceRestFlag = isTupleType(source2) ? source2.target.combinedFlags & 4 /* Rest */ : 4 /* Rest */; + const targetHasRestElement = !!(target2.target.combinedFlags & 12 /* Variable */); + const sourceMinLength = isTupleType(source2) ? source2.target.minLength : 0; + const targetMinLength = target2.target.minLength; + if (!sourceRestFlag && sourceArity < targetMinLength) { + if (reportErrors2) { + reportError(Diagnostics.Source_has_0_element_s_but_target_requires_1, sourceArity, targetMinLength); + } + return 0 /* False */; + } + if (!targetHasRestElement && targetArity < sourceMinLength) { + if (reportErrors2) { + reportError(Diagnostics.Source_has_0_element_s_but_target_allows_only_1, sourceMinLength, targetArity); + } + return 0 /* False */; + } + if (!targetHasRestElement && (sourceRestFlag || targetArity < sourceArity)) { + if (reportErrors2) { + if (sourceMinLength < targetMinLength) { + reportError(Diagnostics.Target_requires_0_element_s_but_source_may_have_fewer, targetMinLength); + } else { + reportError(Diagnostics.Target_allows_only_0_element_s_but_source_may_have_more, targetArity); + } + } + return 0 /* False */; + } + const sourceTypeArguments = getTypeArguments(source2); + const targetTypeArguments = getTypeArguments(target2); + const targetStartCount = getStartElementCount(target2.target, 11 /* NonRest */); + const targetEndCount = getEndElementCount(target2.target, 11 /* NonRest */); + let canExcludeDiscriminants = !!excludedProperties; + for (let sourcePosition = 0; sourcePosition < sourceArity; sourcePosition++) { + const sourceFlags = isTupleType(source2) ? source2.target.elementFlags[sourcePosition] : 4 /* Rest */; + const sourcePositionFromEnd = sourceArity - 1 - sourcePosition; + const targetPosition = targetHasRestElement && sourcePosition >= targetStartCount ? targetArity - 1 - Math.min(sourcePositionFromEnd, targetEndCount) : sourcePosition; + const targetFlags = target2.target.elementFlags[targetPosition]; + if (targetFlags & 8 /* Variadic */ && !(sourceFlags & 8 /* Variadic */)) { + if (reportErrors2) { + reportError(Diagnostics.Source_provides_no_match_for_variadic_element_at_position_0_in_target, targetPosition); + } + return 0 /* False */; + } + if (sourceFlags & 8 /* Variadic */ && !(targetFlags & 12 /* Variable */)) { + if (reportErrors2) { + reportError(Diagnostics.Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target, sourcePosition, targetPosition); + } + return 0 /* False */; + } + if (targetFlags & 1 /* Required */ && !(sourceFlags & 1 /* Required */)) { + if (reportErrors2) { + reportError(Diagnostics.Source_provides_no_match_for_required_element_at_position_0_in_target, targetPosition); + } + return 0 /* False */; + } + if (canExcludeDiscriminants) { + if (sourceFlags & 12 /* Variable */ || targetFlags & 12 /* Variable */) { + canExcludeDiscriminants = false; + } + if (canExcludeDiscriminants && (excludedProperties == null ? void 0 : excludedProperties.has("" + sourcePosition))) { + continue; + } + } + const sourceType = removeMissingType(sourceTypeArguments[sourcePosition], !!(sourceFlags & targetFlags & 2 /* Optional */)); + const targetType = targetTypeArguments[targetPosition]; + const targetCheckType = sourceFlags & 8 /* Variadic */ && targetFlags & 4 /* Rest */ ? createArrayType(targetType) : removeMissingType(targetType, !!(targetFlags & 2 /* Optional */)); + const related = isRelatedTo( + sourceType, + targetCheckType, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (!related) { + if (reportErrors2 && (targetArity > 1 || sourceArity > 1)) { + if (targetHasRestElement && sourcePosition >= targetStartCount && sourcePositionFromEnd >= targetEndCount && targetStartCount !== sourceArity - targetEndCount - 1) { + reportIncompatibleError(Diagnostics.Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target, targetStartCount, sourceArity - targetEndCount - 1, targetPosition); + } else { + reportIncompatibleError(Diagnostics.Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target, sourcePosition, targetPosition); + } + } + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + if (target2.target.combinedFlags & 12 /* Variable */) { + return 0 /* False */; + } + } + const requireOptionalProperties = (relation === subtypeRelation || relation === strictSubtypeRelation) && !isObjectLiteralType2(source2) && !isEmptyArrayLiteralType(source2) && !isTupleType(source2); + const unmatchedProperty = getUnmatchedProperty( + source2, + target2, + requireOptionalProperties, + /*matchDiscriminantProperties*/ + false + ); + if (unmatchedProperty) { + if (reportErrors2 && shouldReportUnmatchedPropertyError(source2, target2)) { + reportUnmatchedProperty(source2, target2, unmatchedProperty, requireOptionalProperties); + } + return 0 /* False */; + } + if (isObjectLiteralType2(target2)) { + for (const sourceProp of excludeProperties(getPropertiesOfType(source2), excludedProperties)) { + if (!getPropertyOfObjectType(target2, sourceProp.escapedName)) { + const sourceType = getTypeOfSymbol(sourceProp); + if (!(sourceType.flags & 32768 /* Undefined */)) { + if (reportErrors2) { + reportError(Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target2)); + } + return 0 /* False */; + } + } + } + } + const properties = getPropertiesOfType(target2); + const numericNamesOnly = isTupleType(source2) && isTupleType(target2); + for (const targetProp of excludeProperties(properties, excludedProperties)) { + const name = targetProp.escapedName; + if (!(targetProp.flags & 4194304 /* Prototype */) && (!numericNamesOnly || isNumericLiteralName(name) || name === "length") && (!optionalsOnly || targetProp.flags & 16777216 /* Optional */)) { + const sourceProp = getPropertyOfType(source2, name); + if (sourceProp && sourceProp !== targetProp) { + const related = propertyRelatedTo(source2, target2, sourceProp, targetProp, getNonMissingTypeOfSymbol, reportErrors2, intersectionState, relation === comparableRelation); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + } + } + return result2; + } + function propertiesIdenticalTo(source2, target2, excludedProperties) { + if (!(source2.flags & 524288 /* Object */ && target2.flags & 524288 /* Object */)) { + return 0 /* False */; + } + const sourceProperties = excludeProperties(getPropertiesOfObjectType(source2), excludedProperties); + const targetProperties = excludeProperties(getPropertiesOfObjectType(target2), excludedProperties); + if (sourceProperties.length !== targetProperties.length) { + return 0 /* False */; + } + let result2 = -1 /* True */; + for (const sourceProp of sourceProperties) { + const targetProp = getPropertyOfObjectType(target2, sourceProp.escapedName); + if (!targetProp) { + return 0 /* False */; + } + const related = compareProperties2(sourceProp, targetProp, isRelatedTo); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + function signaturesRelatedTo(source2, target2, kind, reportErrors2, intersectionState) { + var _a2, _b; + if (relation === identityRelation) { + return signaturesIdenticalTo(source2, target2, kind); + } + if (target2 === anyFunctionType || source2 === anyFunctionType) { + return -1 /* True */; + } + const sourceIsJSConstructor = source2.symbol && isJSConstructor(source2.symbol.valueDeclaration); + const targetIsJSConstructor = target2.symbol && isJSConstructor(target2.symbol.valueDeclaration); + const sourceSignatures = getSignaturesOfType( + source2, + sourceIsJSConstructor && kind === 1 /* Construct */ ? 0 /* Call */ : kind + ); + const targetSignatures = getSignaturesOfType( + target2, + targetIsJSConstructor && kind === 1 /* Construct */ ? 0 /* Call */ : kind + ); + if (kind === 1 /* Construct */ && sourceSignatures.length && targetSignatures.length) { + const sourceIsAbstract = !!(sourceSignatures[0].flags & 4 /* Abstract */); + const targetIsAbstract = !!(targetSignatures[0].flags & 4 /* Abstract */); + if (sourceIsAbstract && !targetIsAbstract) { + if (reportErrors2) { + reportError(Diagnostics.Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type); + } + return 0 /* False */; + } + if (!constructorVisibilitiesAreCompatible(sourceSignatures[0], targetSignatures[0], reportErrors2)) { + return 0 /* False */; + } + } + let result2 = -1 /* True */; + const incompatibleReporter = kind === 1 /* Construct */ ? reportIncompatibleConstructSignatureReturn : reportIncompatibleCallSignatureReturn; + const sourceObjectFlags = getObjectFlags(source2); + const targetObjectFlags = getObjectFlags(target2); + if (sourceObjectFlags & 64 /* Instantiated */ && targetObjectFlags & 64 /* Instantiated */ && source2.symbol === target2.symbol || sourceObjectFlags & 4 /* Reference */ && targetObjectFlags & 4 /* Reference */ && source2.target === target2.target) { + Debug.assertEqual(sourceSignatures.length, targetSignatures.length); + for (let i = 0; i < targetSignatures.length; i++) { + const related = signatureRelatedTo( + sourceSignatures[i], + targetSignatures[i], + /*erase*/ + true, + reportErrors2, + intersectionState, + incompatibleReporter(sourceSignatures[i], targetSignatures[i]) + ); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + } else if (sourceSignatures.length === 1 && targetSignatures.length === 1) { + const eraseGenerics = relation === comparableRelation; + const sourceSignature = first(sourceSignatures); + const targetSignature = first(targetSignatures); + result2 = signatureRelatedTo(sourceSignature, targetSignature, eraseGenerics, reportErrors2, intersectionState, incompatibleReporter(sourceSignature, targetSignature)); + if (!result2 && reportErrors2 && kind === 1 /* Construct */ && sourceObjectFlags & targetObjectFlags && (((_a2 = targetSignature.declaration) == null ? void 0 : _a2.kind) === 177 /* Constructor */ || ((_b = sourceSignature.declaration) == null ? void 0 : _b.kind) === 177 /* Constructor */)) { + const constructSignatureToString = (signature) => signatureToString( + signature, + /*enclosingDeclaration*/ + void 0, + 262144 /* WriteArrowStyleSignature */, + kind + ); + reportError(Diagnostics.Type_0_is_not_assignable_to_type_1, constructSignatureToString(sourceSignature), constructSignatureToString(targetSignature)); + reportError(Diagnostics.Types_of_construct_signatures_are_incompatible); + return result2; + } + } else { + outer: + for (const t of targetSignatures) { + const saveErrorInfo = captureErrorCalculationState(); + let shouldElaborateErrors = reportErrors2; + for (const s of sourceSignatures) { + const related = signatureRelatedTo( + s, + t, + /*erase*/ + true, + shouldElaborateErrors, + intersectionState, + incompatibleReporter(s, t) + ); + if (related) { + result2 &= related; + resetErrorInfo(saveErrorInfo); + continue outer; + } + shouldElaborateErrors = false; + } + if (shouldElaborateErrors) { + reportError(Diagnostics.Type_0_provides_no_match_for_the_signature_1, typeToString(source2), signatureToString( + t, + /*enclosingDeclaration*/ + void 0, + /*flags*/ + void 0, + kind + )); + } + return 0 /* False */; + } + } + return result2; + } + function shouldReportUnmatchedPropertyError(source2, target2) { + const typeCallSignatures = getSignaturesOfStructuredType(source2, 0 /* Call */); + const typeConstructSignatures = getSignaturesOfStructuredType(source2, 1 /* Construct */); + const typeProperties = getPropertiesOfObjectType(source2); + if ((typeCallSignatures.length || typeConstructSignatures.length) && !typeProperties.length) { + if (getSignaturesOfType(target2, 0 /* Call */).length && typeCallSignatures.length || getSignaturesOfType(target2, 1 /* Construct */).length && typeConstructSignatures.length) { + return true; + } + return false; + } + return true; + } + function reportIncompatibleCallSignatureReturn(siga, sigb) { + if (siga.parameters.length === 0 && sigb.parameters.length === 0) { + return (source2, target2) => reportIncompatibleError(Diagnostics.Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1, typeToString(source2), typeToString(target2)); + } + return (source2, target2) => reportIncompatibleError(Diagnostics.Call_signature_return_types_0_and_1_are_incompatible, typeToString(source2), typeToString(target2)); + } + function reportIncompatibleConstructSignatureReturn(siga, sigb) { + if (siga.parameters.length === 0 && sigb.parameters.length === 0) { + return (source2, target2) => reportIncompatibleError(Diagnostics.Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1, typeToString(source2), typeToString(target2)); + } + return (source2, target2) => reportIncompatibleError(Diagnostics.Construct_signature_return_types_0_and_1_are_incompatible, typeToString(source2), typeToString(target2)); + } + function signatureRelatedTo(source2, target2, erase, reportErrors2, intersectionState, incompatibleReporter) { + const checkMode = relation === subtypeRelation ? 16 /* StrictTopSignature */ : relation === strictSubtypeRelation ? 16 /* StrictTopSignature */ | 8 /* StrictArity */ : 0 /* None */; + return compareSignaturesRelated(erase ? getErasedSignature(source2) : source2, erase ? getErasedSignature(target2) : target2, checkMode, reportErrors2, reportError, incompatibleReporter, isRelatedToWorker2, reportUnreliableMapper); + function isRelatedToWorker2(source3, target3, reportErrors3) { + return isRelatedTo( + source3, + target3, + 3 /* Both */, + reportErrors3, + /*headMessage*/ + void 0, + intersectionState + ); + } + } + function signaturesIdenticalTo(source2, target2, kind) { + const sourceSignatures = getSignaturesOfType(source2, kind); + const targetSignatures = getSignaturesOfType(target2, kind); + if (sourceSignatures.length !== targetSignatures.length) { + return 0 /* False */; + } + let result2 = -1 /* True */; + for (let i = 0; i < sourceSignatures.length; i++) { + const related = compareSignaturesIdentical( + sourceSignatures[i], + targetSignatures[i], + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + false, + /*ignoreReturnTypes*/ + false, + isRelatedTo + ); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + function membersRelatedToIndexInfo(source2, targetInfo, reportErrors2, intersectionState) { + let result2 = -1 /* True */; + const keyType = targetInfo.keyType; + const props = source2.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source2) : getPropertiesOfObjectType(source2); + for (const prop of props) { + if (isIgnoredJsxProperty(source2, prop)) { + continue; + } + if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) { + const propType = getNonMissingTypeOfSymbol(prop); + const type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */) ? propType : getTypeWithFacts(propType, 524288 /* NEUndefined */); + const related = isRelatedTo( + type, + targetInfo.type, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (!related) { + if (reportErrors2) { + reportError(Diagnostics.Property_0_is_incompatible_with_index_signature, symbolToString(prop)); + } + return 0 /* False */; + } + result2 &= related; + } + } + for (const info of getIndexInfosOfType(source2)) { + if (isApplicableIndexType(info.keyType, keyType)) { + const related = indexInfoRelatedTo(info, targetInfo, reportErrors2, intersectionState); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + } + return result2; + } + function indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors2, intersectionState) { + const related = isRelatedTo( + sourceInfo.type, + targetInfo.type, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (!related && reportErrors2) { + if (sourceInfo.keyType === targetInfo.keyType) { + reportError(Diagnostics._0_index_signatures_are_incompatible, typeToString(sourceInfo.keyType)); + } else { + reportError(Diagnostics._0_and_1_index_signatures_are_incompatible, typeToString(sourceInfo.keyType), typeToString(targetInfo.keyType)); + } + } + return related; + } + function indexSignaturesRelatedTo(source2, target2, sourceIsPrimitive, reportErrors2, intersectionState) { + if (relation === identityRelation) { + return indexSignaturesIdenticalTo(source2, target2); + } + const indexInfos = getIndexInfosOfType(target2); + const targetHasStringIndex = some(indexInfos, (info) => info.keyType === stringType); + let result2 = -1 /* True */; + for (const targetInfo of indexInfos) { + const related = relation !== strictSubtypeRelation && !sourceIsPrimitive && targetHasStringIndex && targetInfo.type.flags & 1 /* Any */ ? -1 /* True */ : isGenericMappedType(source2) && targetHasStringIndex ? isRelatedTo(getTemplateTypeFromMappedType(source2), targetInfo.type, 3 /* Both */, reportErrors2) : typeRelatedToIndexInfo(source2, targetInfo, reportErrors2, intersectionState); + if (!related) { + return 0 /* False */; + } + result2 &= related; + } + return result2; + } + function typeRelatedToIndexInfo(source2, targetInfo, reportErrors2, intersectionState) { + const sourceInfo = getApplicableIndexInfo(source2, targetInfo.keyType); + if (sourceInfo) { + return indexInfoRelatedTo(sourceInfo, targetInfo, reportErrors2, intersectionState); + } + if (!(intersectionState & 1 /* Source */) && (relation !== strictSubtypeRelation || getObjectFlags(source2) & 8192 /* FreshLiteral */) && isObjectTypeWithInferableIndex(source2)) { + return membersRelatedToIndexInfo(source2, targetInfo, reportErrors2, intersectionState); + } + if (reportErrors2) { + reportError(Diagnostics.Index_signature_for_type_0_is_missing_in_type_1, typeToString(targetInfo.keyType), typeToString(source2)); + } + return 0 /* False */; + } + function indexSignaturesIdenticalTo(source2, target2) { + const sourceInfos = getIndexInfosOfType(source2); + const targetInfos = getIndexInfosOfType(target2); + if (sourceInfos.length !== targetInfos.length) { + return 0 /* False */; + } + for (const targetInfo of targetInfos) { + const sourceInfo = getIndexInfoOfType(source2, targetInfo.keyType); + if (!(sourceInfo && isRelatedTo(sourceInfo.type, targetInfo.type, 3 /* Both */) && sourceInfo.isReadonly === targetInfo.isReadonly)) { + return 0 /* False */; + } + } + return -1 /* True */; + } + function constructorVisibilitiesAreCompatible(sourceSignature, targetSignature, reportErrors2) { + if (!sourceSignature.declaration || !targetSignature.declaration) { + return true; + } + const sourceAccessibility = getSelectedEffectiveModifierFlags(sourceSignature.declaration, 6 /* NonPublicAccessibilityModifier */); + const targetAccessibility = getSelectedEffectiveModifierFlags(targetSignature.declaration, 6 /* NonPublicAccessibilityModifier */); + if (targetAccessibility === 2 /* Private */) { + return true; + } + if (targetAccessibility === 4 /* Protected */ && sourceAccessibility !== 2 /* Private */) { + return true; + } + if (targetAccessibility !== 4 /* Protected */ && !sourceAccessibility) { + return true; + } + if (reportErrors2) { + reportError(Diagnostics.Cannot_assign_a_0_constructor_type_to_a_1_constructor_type, visibilityToString(sourceAccessibility), visibilityToString(targetAccessibility)); + } + return false; + } + } + function typeCouldHaveTopLevelSingletonTypes(type) { + if (type.flags & 16 /* Boolean */) { + return false; + } + if (type.flags & 3145728 /* UnionOrIntersection */) { + return !!forEach(type.types, typeCouldHaveTopLevelSingletonTypes); + } + if (type.flags & 465829888 /* Instantiable */) { + const constraint = getConstraintOfType(type); + if (constraint && constraint !== type) { + return typeCouldHaveTopLevelSingletonTypes(constraint); + } + } + return isUnitType(type) || !!(type.flags & 134217728 /* TemplateLiteral */) || !!(type.flags & 268435456 /* StringMapping */); + } + function getExactOptionalUnassignableProperties(source, target) { + if (isTupleType(source) && isTupleType(target)) return emptyArray; + return getPropertiesOfType(target).filter((targetProp) => isExactOptionalPropertyMismatch(getTypeOfPropertyOfType(source, targetProp.escapedName), getTypeOfSymbol(targetProp))); + } + function isExactOptionalPropertyMismatch(source, target) { + return !!source && !!target && maybeTypeOfKind(source, 32768 /* Undefined */) && !!containsMissingType(target); + } + function getExactOptionalProperties(type) { + return getPropertiesOfType(type).filter((targetProp) => containsMissingType(getTypeOfSymbol(targetProp))); + } + function getBestMatchingType(source, target, isRelatedTo = compareTypesAssignable) { + return findMatchingDiscriminantType(source, target, isRelatedTo) || findMatchingTypeReferenceOrTypeAliasReference(source, target) || findBestTypeForObjectLiteral(source, target) || findBestTypeForInvokable(source, target) || findMostOverlappyType(source, target); + } + function discriminateTypeByDiscriminableItems(target, discriminators, related) { + const types = target.types; + const include = types.map((t) => t.flags & 402784252 /* Primitive */ ? 0 /* False */ : -1 /* True */); + for (const [getDiscriminatingType, propertyName] of discriminators) { + let matched = false; + for (let i = 0; i < types.length; i++) { + if (include[i]) { + const targetType = getTypeOfPropertyOrIndexSignatureOfType(types[i], propertyName); + if (targetType) { + if (someType(getDiscriminatingType(), (t) => !!related(t, targetType))) { + matched = true; + } else { + include[i] = 3 /* Maybe */; + } + } + } + } + for (let i = 0; i < types.length; i++) { + if (include[i] === 3 /* Maybe */) { + include[i] = matched ? 0 /* False */ : -1 /* True */; + } + } + } + const filtered = contains(include, 0 /* False */) ? getUnionType(types.filter((_, i) => include[i]), 0 /* None */) : target; + return filtered.flags & 131072 /* Never */ ? target : filtered; + } + function isWeakType(type) { + if (type.flags & 524288 /* Object */) { + const resolved = resolveStructuredTypeMembers(type); + return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 && resolved.properties.length > 0 && every(resolved.properties, (p) => !!(p.flags & 16777216 /* Optional */)); + } + if (type.flags & 33554432 /* Substitution */) { + return isWeakType(type.baseType); + } + if (type.flags & 2097152 /* Intersection */) { + return every(type.types, isWeakType); + } + return false; + } + function hasCommonProperties(source, target, isComparingJsxAttributes) { + for (const prop of getPropertiesOfType(source)) { + if (isKnownProperty(target, prop.escapedName, isComparingJsxAttributes)) { + return true; + } + } + return false; + } + function getVariances(type) { + return type === globalArrayType || type === globalReadonlyArrayType || type.objectFlags & 8 /* Tuple */ ? arrayVariances : getVariancesWorker(type.symbol, type.typeParameters); + } + function getAliasVariances(symbol) { + return getVariancesWorker(symbol, getSymbolLinks(symbol).typeParameters); + } + function getVariancesWorker(symbol, typeParameters = emptyArray) { + var _a, _b; + const links = getSymbolLinks(symbol); + if (!links.variances) { + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.CheckTypes, "getVariancesWorker", { arity: typeParameters.length, id: getTypeId(getDeclaredTypeOfSymbol(symbol)) }); + const oldVarianceComputation = inVarianceComputation; + const saveResolutionStart = resolutionStart; + if (!inVarianceComputation) { + inVarianceComputation = true; + resolutionStart = resolutionTargets.length; + } + links.variances = emptyArray; + const variances = []; + for (const tp of typeParameters) { + const modifiers = getTypeParameterModifiers(tp); + let variance = modifiers & 16384 /* Out */ ? modifiers & 8192 /* In */ ? 0 /* Invariant */ : 1 /* Covariant */ : modifiers & 8192 /* In */ ? 2 /* Contravariant */ : void 0; + if (variance === void 0) { + let unmeasurable = false; + let unreliable = false; + const oldHandler = outofbandVarianceMarkerHandler; + outofbandVarianceMarkerHandler = (onlyUnreliable) => onlyUnreliable ? unreliable = true : unmeasurable = true; + const typeWithSuper = createMarkerType(symbol, tp, markerSuperType); + const typeWithSub = createMarkerType(symbol, tp, markerSubType); + variance = (isTypeAssignableTo(typeWithSub, typeWithSuper) ? 1 /* Covariant */ : 0) | (isTypeAssignableTo(typeWithSuper, typeWithSub) ? 2 /* Contravariant */ : 0); + if (variance === 3 /* Bivariant */ && isTypeAssignableTo(createMarkerType(symbol, tp, markerOtherType), typeWithSuper)) { + variance = 4 /* Independent */; + } + outofbandVarianceMarkerHandler = oldHandler; + if (unmeasurable || unreliable) { + if (unmeasurable) { + variance |= 8 /* Unmeasurable */; + } + if (unreliable) { + variance |= 16 /* Unreliable */; + } + } + } + variances.push(variance); + } + if (!oldVarianceComputation) { + inVarianceComputation = false; + resolutionStart = saveResolutionStart; + } + links.variances = variances; + (_b = tracing) == null ? void 0 : _b.pop({ variances: variances.map(Debug.formatVariance) }); + } + return links.variances; + } + function createMarkerType(symbol, source, target) { + const mapper = makeUnaryTypeMapper(source, target); + const type = getDeclaredTypeOfSymbol(symbol); + if (isErrorType(type)) { + return type; + } + const result = symbol.flags & 524288 /* TypeAlias */ ? getTypeAliasInstantiation(symbol, instantiateTypes(getSymbolLinks(symbol).typeParameters, mapper)) : createTypeReference(type, instantiateTypes(type.typeParameters, mapper)); + markerTypes.add(getTypeId(result)); + return result; + } + function isMarkerType(type) { + return markerTypes.has(getTypeId(type)); + } + function getTypeParameterModifiers(tp) { + var _a; + return reduceLeft((_a = tp.symbol) == null ? void 0 : _a.declarations, (modifiers, d) => modifiers | getEffectiveModifierFlags(d), 0 /* None */) & (8192 /* In */ | 16384 /* Out */ | 4096 /* Const */); + } + function hasCovariantVoidArgument(typeArguments, variances) { + for (let i = 0; i < variances.length; i++) { + if ((variances[i] & 7 /* VarianceMask */) === 1 /* Covariant */ && typeArguments[i].flags & 16384 /* Void */) { + return true; + } + } + return false; + } + function isUnconstrainedTypeParameter(type) { + return type.flags & 262144 /* TypeParameter */ && !getConstraintOfTypeParameter(type); + } + function isNonDeferredTypeReference(type) { + return !!(getObjectFlags(type) & 4 /* Reference */) && !type.node; + } + function isTypeReferenceWithGenericArguments(type) { + return isNonDeferredTypeReference(type) && some(getTypeArguments(type), (t) => !!(t.flags & 262144 /* TypeParameter */) || isTypeReferenceWithGenericArguments(t)); + } + function getGenericTypeReferenceRelationKey(source, target, postFix, ignoreConstraints) { + const typeParameters = []; + let constraintMarker = ""; + const sourceId = getTypeReferenceId(source, 0); + const targetId = getTypeReferenceId(target, 0); + return `${constraintMarker}${sourceId},${targetId}${postFix}`; + function getTypeReferenceId(type, depth = 0) { + let result = "" + type.target.id; + for (const t of getTypeArguments(type)) { + if (t.flags & 262144 /* TypeParameter */) { + if (ignoreConstraints || isUnconstrainedTypeParameter(t)) { + let index = typeParameters.indexOf(t); + if (index < 0) { + index = typeParameters.length; + typeParameters.push(t); + } + result += "=" + index; + continue; + } + constraintMarker = "*"; + } else if (depth < 4 && isTypeReferenceWithGenericArguments(t)) { + result += "<" + getTypeReferenceId(t, depth + 1) + ">"; + continue; + } + result += "-" + t.id; + } + return result; + } + } + function getRelationKey(source, target, intersectionState, relation, ignoreConstraints) { + if (relation === identityRelation && source.id > target.id) { + const temp = source; + source = target; + target = temp; + } + const postFix = intersectionState ? ":" + intersectionState : ""; + return isTypeReferenceWithGenericArguments(source) && isTypeReferenceWithGenericArguments(target) ? getGenericTypeReferenceRelationKey(source, target, postFix, ignoreConstraints) : `${source.id},${target.id}${postFix}`; + } + function forEachProperty2(prop, callback) { + if (getCheckFlags(prop) & 6 /* Synthetic */) { + for (const t of prop.links.containingType.types) { + const p = getPropertyOfType(t, prop.escapedName); + const result = p && forEachProperty2(p, callback); + if (result) { + return result; + } + } + return void 0; + } + return callback(prop); + } + function getDeclaringClass(prop) { + return prop.parent && prop.parent.flags & 32 /* Class */ ? getDeclaredTypeOfSymbol(getParentOfSymbol(prop)) : void 0; + } + function getTypeOfPropertyInBaseClass(property) { + const classType = getDeclaringClass(property); + const baseClassType = classType && getBaseTypes(classType)[0]; + return baseClassType && getTypeOfPropertyOfType(baseClassType, property.escapedName); + } + function isPropertyInClassDerivedFrom(prop, baseClass) { + return forEachProperty2(prop, (sp) => { + const sourceClass = getDeclaringClass(sp); + return sourceClass ? hasBaseType(sourceClass, baseClass) : false; + }); + } + function isValidOverrideOf(sourceProp, targetProp) { + return !forEachProperty2(targetProp, (tp) => getDeclarationModifierFlagsFromSymbol(tp) & 4 /* Protected */ ? !isPropertyInClassDerivedFrom(sourceProp, getDeclaringClass(tp)) : false); + } + function isClassDerivedFromDeclaringClasses(checkClass, prop, writing) { + return forEachProperty2(prop, (p) => getDeclarationModifierFlagsFromSymbol(p, writing) & 4 /* Protected */ ? !hasBaseType(checkClass, getDeclaringClass(p)) : false) ? void 0 : checkClass; + } + function isDeeplyNestedType(type, stack, depth, maxDepth = 3) { + if (depth >= maxDepth) { + if ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */) { + type = getMappedTargetWithSymbol(type); + } + if (type.flags & 2097152 /* Intersection */) { + return some(type.types, (t) => isDeeplyNestedType(t, stack, depth, maxDepth)); + } + const identity2 = getRecursionIdentity(type); + let count = 0; + let lastTypeId = 0; + for (let i = 0; i < depth; i++) { + const t = stack[i]; + if (hasMatchingRecursionIdentity(t, identity2)) { + if (t.id >= lastTypeId) { + count++; + if (count >= maxDepth) { + return true; + } + } + lastTypeId = t.id; + } + } + } + return false; + } + function getMappedTargetWithSymbol(type) { + let target; + while ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */ && (target = getModifiersTypeFromMappedType(type)) && (target.symbol || target.flags & 2097152 /* Intersection */ && some(target.types, (t) => !!t.symbol))) { + type = target; + } + return type; + } + function hasMatchingRecursionIdentity(type, identity2) { + if ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */) { + type = getMappedTargetWithSymbol(type); + } + if (type.flags & 2097152 /* Intersection */) { + return some(type.types, (t) => hasMatchingRecursionIdentity(t, identity2)); + } + return getRecursionIdentity(type) === identity2; + } + function getRecursionIdentity(type) { + if (type.flags & 524288 /* Object */ && !isObjectOrArrayLiteralType(type)) { + if (getObjectFlags(type) & 4 /* Reference */ && type.node) { + return type.node; + } + if (type.symbol && !(getObjectFlags(type) & 16 /* Anonymous */ && type.symbol.flags & 32 /* Class */)) { + return type.symbol; + } + if (isTupleType(type)) { + return type.target; + } + } + if (type.flags & 262144 /* TypeParameter */) { + return type.symbol; + } + if (type.flags & 8388608 /* IndexedAccess */) { + do { + type = type.objectType; + } while (type.flags & 8388608 /* IndexedAccess */); + return type; + } + if (type.flags & 16777216 /* Conditional */) { + return type.root; + } + return type; + } + function isPropertyIdenticalTo(sourceProp, targetProp) { + return compareProperties2(sourceProp, targetProp, compareTypesIdentical) !== 0 /* False */; + } + function compareProperties2(sourceProp, targetProp, compareTypes) { + if (sourceProp === targetProp) { + return -1 /* True */; + } + const sourcePropAccessibility = getDeclarationModifierFlagsFromSymbol(sourceProp) & 6 /* NonPublicAccessibilityModifier */; + const targetPropAccessibility = getDeclarationModifierFlagsFromSymbol(targetProp) & 6 /* NonPublicAccessibilityModifier */; + if (sourcePropAccessibility !== targetPropAccessibility) { + return 0 /* False */; + } + if (sourcePropAccessibility) { + if (getTargetSymbol(sourceProp) !== getTargetSymbol(targetProp)) { + return 0 /* False */; + } + } else { + if ((sourceProp.flags & 16777216 /* Optional */) !== (targetProp.flags & 16777216 /* Optional */)) { + return 0 /* False */; + } + } + if (isReadonlySymbol(sourceProp) !== isReadonlySymbol(targetProp)) { + return 0 /* False */; + } + return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); + } + function isMatchingSignature(source, target, partialMatch) { + const sourceParameterCount = getParameterCount(source); + const targetParameterCount = getParameterCount(target); + const sourceMinArgumentCount = getMinArgumentCount(source); + const targetMinArgumentCount = getMinArgumentCount(target); + const sourceHasRestParameter = hasEffectiveRestParameter(source); + const targetHasRestParameter = hasEffectiveRestParameter(target); + if (sourceParameterCount === targetParameterCount && sourceMinArgumentCount === targetMinArgumentCount && sourceHasRestParameter === targetHasRestParameter) { + return true; + } + if (partialMatch && sourceMinArgumentCount <= targetMinArgumentCount) { + return true; + } + return false; + } + function compareSignaturesIdentical(source, target, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypes) { + if (source === target) { + return -1 /* True */; + } + if (!isMatchingSignature(source, target, partialMatch)) { + return 0 /* False */; + } + if (length(source.typeParameters) !== length(target.typeParameters)) { + return 0 /* False */; + } + if (target.typeParameters) { + const mapper = createTypeMapper(source.typeParameters, target.typeParameters); + for (let i = 0; i < target.typeParameters.length; i++) { + const s = source.typeParameters[i]; + const t = target.typeParameters[i]; + if (!(s === t || compareTypes(instantiateType(getConstraintFromTypeParameter(s), mapper) || unknownType, getConstraintFromTypeParameter(t) || unknownType) && compareTypes(instantiateType(getDefaultFromTypeParameter(s), mapper) || unknownType, getDefaultFromTypeParameter(t) || unknownType))) { + return 0 /* False */; + } + } + source = instantiateSignature( + source, + mapper, + /*eraseTypeParameters*/ + true + ); + } + let result = -1 /* True */; + if (!ignoreThisTypes) { + const sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + const targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + const related = compareTypes(sourceThisType, targetThisType); + if (!related) { + return 0 /* False */; + } + result &= related; + } + } + } + const targetLen = getParameterCount(target); + for (let i = 0; i < targetLen; i++) { + const s = getTypeAtPosition(source, i); + const t = getTypeAtPosition(target, i); + const related = compareTypes(t, s); + if (!related) { + return 0 /* False */; + } + result &= related; + } + if (!ignoreReturnTypes) { + const sourceTypePredicate = getTypePredicateOfSignature(source); + const targetTypePredicate = getTypePredicateOfSignature(target); + result &= sourceTypePredicate || targetTypePredicate ? compareTypePredicatesIdentical(sourceTypePredicate, targetTypePredicate, compareTypes) : compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); + } + return result; + } + function compareTypePredicatesIdentical(source, target, compareTypes) { + return !(source && target && typePredicateKindsMatch(source, target)) ? 0 /* False */ : source.type === target.type ? -1 /* True */ : source.type && target.type ? compareTypes(source.type, target.type) : 0 /* False */; + } + function literalTypesWithSameBaseType(types) { + let commonBaseType; + for (const t of types) { + if (!(t.flags & 131072 /* Never */)) { + const baseType = getBaseTypeOfLiteralType(t); + commonBaseType ?? (commonBaseType = baseType); + if (baseType === t || baseType !== commonBaseType) { + return false; + } + } + } + return true; + } + function getCombinedTypeFlags(types) { + return reduceLeft(types, (flags, t) => flags | (t.flags & 1048576 /* Union */ ? getCombinedTypeFlags(t.types) : t.flags), 0); + } + function getCommonSupertype(types) { + if (types.length === 1) { + return types[0]; + } + const primaryTypes = strictNullChecks ? sameMap(types, (t) => filterType(t, (u) => !(u.flags & 98304 /* Nullable */))) : types; + const superTypeOrUnion = literalTypesWithSameBaseType(primaryTypes) ? getUnionType(primaryTypes) : getSingleCommonSupertype(primaryTypes); + return primaryTypes === types ? superTypeOrUnion : getNullableType(superTypeOrUnion, getCombinedTypeFlags(types) & 98304 /* Nullable */); + } + function getSingleCommonSupertype(types) { + const candidate = reduceLeft(types, (s, t) => isTypeStrictSubtypeOf(s, t) ? t : s); + return every(types, (t) => t === candidate || isTypeStrictSubtypeOf(t, candidate)) ? candidate : reduceLeft(types, (s, t) => isTypeSubtypeOf(s, t) ? t : s); + } + function getCommonSubtype(types) { + return reduceLeft(types, (s, t) => isTypeSubtypeOf(t, s) ? t : s); + } + function isArrayType(type) { + return !!(getObjectFlags(type) & 4 /* Reference */) && (type.target === globalArrayType || type.target === globalReadonlyArrayType); + } + function isReadonlyArrayType(type) { + return !!(getObjectFlags(type) & 4 /* Reference */) && type.target === globalReadonlyArrayType; + } + function isArrayOrTupleType(type) { + return isArrayType(type) || isTupleType(type); + } + function isMutableArrayOrTuple(type) { + return isArrayType(type) && !isReadonlyArrayType(type) || isTupleType(type) && !type.target.readonly; + } + function getElementTypeOfArrayType(type) { + return isArrayType(type) ? getTypeArguments(type)[0] : void 0; + } + function isArrayLikeType(type) { + return isArrayType(type) || !(type.flags & 98304 /* Nullable */) && isTypeAssignableTo(type, anyReadonlyArrayType); + } + function isMutableArrayLikeType(type) { + return isMutableArrayOrTuple(type) || !(type.flags & (1 /* Any */ | 98304 /* Nullable */)) && isTypeAssignableTo(type, anyArrayType); + } + function getSingleBaseForNonAugmentingSubtype(type) { + if (!(getObjectFlags(type) & 4 /* Reference */) || !(getObjectFlags(type.target) & 3 /* ClassOrInterface */)) { + return void 0; + } + if (getObjectFlags(type) & 33554432 /* IdenticalBaseTypeCalculated */) { + return getObjectFlags(type) & 67108864 /* IdenticalBaseTypeExists */ ? type.cachedEquivalentBaseType : void 0; + } + type.objectFlags |= 33554432 /* IdenticalBaseTypeCalculated */; + const target = type.target; + if (getObjectFlags(target) & 1 /* Class */) { + const baseTypeNode = getBaseTypeNodeOfClass(target); + if (baseTypeNode && baseTypeNode.expression.kind !== 80 /* Identifier */ && baseTypeNode.expression.kind !== 212 /* PropertyAccessExpression */) { + return void 0; + } + } + const bases = getBaseTypes(target); + if (bases.length !== 1) { + return void 0; + } + if (getMembersOfSymbol(type.symbol).size) { + return void 0; + } + let instantiatedBase = !length(target.typeParameters) ? bases[0] : instantiateType(bases[0], createTypeMapper(target.typeParameters, getTypeArguments(type).slice(0, target.typeParameters.length))); + if (length(getTypeArguments(type)) > length(target.typeParameters)) { + instantiatedBase = getTypeWithThisArgument(instantiatedBase, last(getTypeArguments(type))); + } + type.objectFlags |= 67108864 /* IdenticalBaseTypeExists */; + return type.cachedEquivalentBaseType = instantiatedBase; + } + function isEmptyLiteralType(type) { + return strictNullChecks ? type === implicitNeverType : type === undefinedWideningType; + } + function isEmptyArrayLiteralType(type) { + const elementType = getElementTypeOfArrayType(type); + return !!elementType && isEmptyLiteralType(elementType); + } + function isTupleLikeType(type) { + let lengthType; + return isTupleType(type) || !!getPropertyOfType(type, "0") || isArrayLikeType(type) && !!(lengthType = getTypeOfPropertyOfType(type, "length")) && everyType(lengthType, (t) => !!(t.flags & 256 /* NumberLiteral */)); + } + function isArrayOrTupleLikeType(type) { + return isArrayLikeType(type) || isTupleLikeType(type); + } + function getTupleElementType(type, index) { + const propType = getTypeOfPropertyOfType(type, "" + index); + if (propType) { + return propType; + } + if (everyType(type, isTupleType)) { + return getTupleElementTypeOutOfStartCount(type, index, compilerOptions.noUncheckedIndexedAccess ? undefinedType : void 0); + } + return void 0; + } + function isNeitherUnitTypeNorNever(type) { + return !(type.flags & (109472 /* Unit */ | 131072 /* Never */)); + } + function isUnitType(type) { + return !!(type.flags & 109472 /* Unit */); + } + function isUnitLikeType(type) { + const t = getBaseConstraintOrType(type); + return t.flags & 2097152 /* Intersection */ ? some(t.types, isUnitType) : isUnitType(t); + } + function extractUnitType(type) { + return type.flags & 2097152 /* Intersection */ ? find(type.types, isUnitType) || type : type; + } + function isLiteralType(type) { + return type.flags & 16 /* Boolean */ ? true : type.flags & 1048576 /* Union */ ? type.flags & 1024 /* EnumLiteral */ ? true : every(type.types, isUnitType) : isUnitType(type); + } + function getBaseTypeOfLiteralType(type) { + return type.flags & 1056 /* EnumLike */ ? getBaseTypeOfEnumLikeType(type) : type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) ? stringType : type.flags & 256 /* NumberLiteral */ ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 512 /* BooleanLiteral */ ? booleanType : type.flags & 1048576 /* Union */ ? getBaseTypeOfLiteralTypeUnion(type) : type; + } + function getBaseTypeOfLiteralTypeUnion(type) { + const key = `B${getTypeId(type)}`; + return getCachedType(key) ?? setCachedType(key, mapType(type, getBaseTypeOfLiteralType)); + } + function getBaseTypeOfLiteralTypeForComparison(type) { + return type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) ? stringType : type.flags & (256 /* NumberLiteral */ | 32 /* Enum */) ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 512 /* BooleanLiteral */ ? booleanType : type.flags & 1048576 /* Union */ ? mapType(type, getBaseTypeOfLiteralTypeForComparison) : type; + } + function getWidenedLiteralType(type) { + return type.flags & 1056 /* EnumLike */ && isFreshLiteralType(type) ? getBaseTypeOfEnumLikeType(type) : type.flags & 128 /* StringLiteral */ && isFreshLiteralType(type) ? stringType : type.flags & 256 /* NumberLiteral */ && isFreshLiteralType(type) ? numberType : type.flags & 2048 /* BigIntLiteral */ && isFreshLiteralType(type) ? bigintType : type.flags & 512 /* BooleanLiteral */ && isFreshLiteralType(type) ? booleanType : type.flags & 1048576 /* Union */ ? mapType(type, getWidenedLiteralType) : type; + } + function getWidenedUniqueESSymbolType(type) { + return type.flags & 8192 /* UniqueESSymbol */ ? esSymbolType : type.flags & 1048576 /* Union */ ? mapType(type, getWidenedUniqueESSymbolType) : type; + } + function getWidenedLiteralLikeTypeForContextualType(type, contextualType) { + if (!isLiteralOfContextualType(type, contextualType)) { + type = getWidenedUniqueESSymbolType(getWidenedLiteralType(type)); + } + return getRegularTypeOfLiteralType(type); + } + function getWidenedLiteralLikeTypeForContextualReturnTypeIfNeeded(type, contextualSignatureReturnType, isAsync) { + if (type && isUnitType(type)) { + const contextualType = !contextualSignatureReturnType ? void 0 : isAsync ? getPromisedTypeOfPromise(contextualSignatureReturnType) : contextualSignatureReturnType; + type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); + } + return type; + } + function getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(type, contextualSignatureReturnType, kind, isAsyncGenerator) { + if (type && isUnitType(type)) { + const contextualType = !contextualSignatureReturnType ? void 0 : getIterationTypeOfGeneratorFunctionReturnType(kind, contextualSignatureReturnType, isAsyncGenerator); + type = getWidenedLiteralLikeTypeForContextualType(type, contextualType); + } + return type; + } + function isTupleType(type) { + return !!(getObjectFlags(type) & 4 /* Reference */ && type.target.objectFlags & 8 /* Tuple */); + } + function isGenericTupleType(type) { + return isTupleType(type) && !!(type.target.combinedFlags & 8 /* Variadic */); + } + function isSingleElementGenericTupleType(type) { + return isGenericTupleType(type) && type.target.elementFlags.length === 1; + } + function getRestTypeOfTupleType(type) { + return getElementTypeOfSliceOfTupleType(type, type.target.fixedLength); + } + function getTupleElementTypeOutOfStartCount(type, index, undefinedOrMissingType2) { + return mapType(type, (t) => { + const tupleType = t; + const restType = getRestTypeOfTupleType(tupleType); + if (!restType) { + return undefinedType; + } + if (undefinedOrMissingType2 && index >= getTotalFixedElementCount(tupleType.target)) { + return getUnionType([restType, undefinedOrMissingType2]); + } + return restType; + }); + } + function getRestArrayTypeOfTupleType(type) { + const restType = getRestTypeOfTupleType(type); + return restType && createArrayType(restType); + } + function getElementTypeOfSliceOfTupleType(type, index, endSkipCount = 0, writing = false, noReductions = false) { + const length2 = getTypeReferenceArity(type) - endSkipCount; + if (index < length2) { + const typeArguments = getTypeArguments(type); + const elementTypes = []; + for (let i = index; i < length2; i++) { + const t = typeArguments[i]; + elementTypes.push(type.target.elementFlags[i] & 8 /* Variadic */ ? getIndexedAccessType(t, numberType) : t); + } + return writing ? getIntersectionType(elementTypes) : getUnionType(elementTypes, noReductions ? 0 /* None */ : 1 /* Literal */); + } + return void 0; + } + function isTupleTypeStructureMatching(t1, t2) { + return getTypeReferenceArity(t1) === getTypeReferenceArity(t2) && every(t1.target.elementFlags, (f, i) => (f & 12 /* Variable */) === (t2.target.elementFlags[i] & 12 /* Variable */)); + } + function isZeroBigInt({ value }) { + return value.base10Value === "0"; + } + function removeDefinitelyFalsyTypes(type) { + return filterType(type, (t) => hasTypeFacts(t, 4194304 /* Truthy */)); + } + function extractDefinitelyFalsyTypes(type) { + return mapType(type, getDefinitelyFalsyPartOfType); + } + function getDefinitelyFalsyPartOfType(type) { + return type.flags & 4 /* String */ ? emptyStringType : type.flags & 8 /* Number */ ? zeroType : type.flags & 64 /* BigInt */ ? zeroBigIntType : type === regularFalseType || type === falseType || type.flags & (16384 /* Void */ | 32768 /* Undefined */ | 65536 /* Null */ | 3 /* AnyOrUnknown */) || type.flags & 128 /* StringLiteral */ && type.value === "" || type.flags & 256 /* NumberLiteral */ && type.value === 0 || type.flags & 2048 /* BigIntLiteral */ && isZeroBigInt(type) ? type : neverType; + } + function getNullableType(type, flags) { + const missing = flags & ~type.flags & (32768 /* Undefined */ | 65536 /* Null */); + return missing === 0 ? type : missing === 32768 /* Undefined */ ? getUnionType([type, undefinedType]) : missing === 65536 /* Null */ ? getUnionType([type, nullType]) : getUnionType([type, undefinedType, nullType]); + } + function getOptionalType(type, isProperty = false) { + Debug.assert(strictNullChecks); + const missingOrUndefined = isProperty ? undefinedOrMissingType : undefinedType; + return type === missingOrUndefined || type.flags & 1048576 /* Union */ && type.types[0] === missingOrUndefined ? type : getUnionType([type, missingOrUndefined]); + } + function getGlobalNonNullableTypeInstantiation(type) { + if (!deferredGlobalNonNullableTypeAlias) { + deferredGlobalNonNullableTypeAlias = getGlobalSymbol( + "NonNullable", + 524288 /* TypeAlias */, + /*diagnostic*/ + void 0 + ) || unknownSymbol; + } + return deferredGlobalNonNullableTypeAlias !== unknownSymbol ? getTypeAliasInstantiation(deferredGlobalNonNullableTypeAlias, [type]) : getIntersectionType([type, emptyObjectType]); + } + function getNonNullableType(type) { + return strictNullChecks ? getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */) : type; + } + function addOptionalTypeMarker(type) { + return strictNullChecks ? getUnionType([type, optionalType]) : type; + } + function removeOptionalTypeMarker(type) { + return strictNullChecks ? removeType(type, optionalType) : type; + } + function propagateOptionalTypeMarker(type, node, wasOptional) { + return wasOptional ? isOutermostOptionalChain(node) ? getOptionalType(type) : addOptionalTypeMarker(type) : type; + } + function getOptionalExpressionType(exprType, expression) { + return isExpressionOfOptionalChainRoot(expression) ? getNonNullableType(exprType) : isOptionalChain(expression) ? removeOptionalTypeMarker(exprType) : exprType; + } + function removeMissingType(type, isOptional) { + return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type; + } + function containsMissingType(type) { + return type === missingType || !!(type.flags & 1048576 /* Union */) && type.types[0] === missingType; + } + function removeMissingOrUndefinedType(type) { + return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */); + } + function isCoercibleUnderDoubleEquals(source, target) { + return (source.flags & (8 /* Number */ | 4 /* String */ | 512 /* BooleanLiteral */)) !== 0 && (target.flags & (8 /* Number */ | 4 /* String */ | 16 /* Boolean */)) !== 0; + } + function isObjectTypeWithInferableIndex(type) { + const objectFlags = getObjectFlags(type); + return type.flags & 2097152 /* Intersection */ ? every(type.types, isObjectTypeWithInferableIndex) : !!(type.symbol && (type.symbol.flags & (4096 /* ObjectLiteral */ | 2048 /* TypeLiteral */ | 384 /* Enum */ | 512 /* ValueModule */)) !== 0 && !(type.symbol.flags & 32 /* Class */) && !typeHasCallOrConstructSignatures(type)) || !!(objectFlags & 4194304 /* ObjectRestType */) || !!(objectFlags & 1024 /* ReverseMapped */ && isObjectTypeWithInferableIndex(type.source)); + } + function createSymbolWithType(source, type) { + const symbol = createSymbol(source.flags, source.escapedName, getCheckFlags(source) & 8 /* Readonly */); + symbol.declarations = source.declarations; + symbol.parent = source.parent; + symbol.links.type = type; + symbol.links.target = source; + if (source.valueDeclaration) { + symbol.valueDeclaration = source.valueDeclaration; + } + const nameType = getSymbolLinks(source).nameType; + if (nameType) { + symbol.links.nameType = nameType; + } + return symbol; + } + function transformTypeOfMembers(type, f) { + const members = createSymbolTable(); + for (const property of getPropertiesOfObjectType(type)) { + const original = getTypeOfSymbol(property); + const updated = f(original); + members.set(property.escapedName, updated === original ? property : createSymbolWithType(property, updated)); + } + return members; + } + function getRegularTypeOfObjectLiteral(type) { + if (!(isObjectLiteralType2(type) && getObjectFlags(type) & 8192 /* FreshLiteral */)) { + return type; + } + const regularType = type.regularType; + if (regularType) { + return regularType; + } + const resolved = type; + const members = transformTypeOfMembers(type, getRegularTypeOfObjectLiteral); + const regularNew = createAnonymousType(resolved.symbol, members, resolved.callSignatures, resolved.constructSignatures, resolved.indexInfos); + regularNew.flags = resolved.flags; + regularNew.objectFlags |= resolved.objectFlags & ~8192 /* FreshLiteral */; + type.regularType = regularNew; + return regularNew; + } + function createWideningContext(parent2, propertyName, siblings) { + return { parent: parent2, propertyName, siblings, resolvedProperties: void 0 }; + } + function getSiblingsOfContext(context) { + if (!context.siblings) { + const siblings = []; + for (const type of getSiblingsOfContext(context.parent)) { + if (isObjectLiteralType2(type)) { + const prop = getPropertyOfObjectType(type, context.propertyName); + if (prop) { + forEachType(getTypeOfSymbol(prop), (t) => { + siblings.push(t); + }); + } + } + } + context.siblings = siblings; + } + return context.siblings; + } + function getPropertiesOfContext(context) { + if (!context.resolvedProperties) { + const names = /* @__PURE__ */ new Map(); + for (const t of getSiblingsOfContext(context)) { + if (isObjectLiteralType2(t) && !(getObjectFlags(t) & 2097152 /* ContainsSpread */)) { + for (const prop of getPropertiesOfType(t)) { + names.set(prop.escapedName, prop); + } + } + } + context.resolvedProperties = arrayFrom(names.values()); + } + return context.resolvedProperties; + } + function getWidenedProperty(prop, context) { + if (!(prop.flags & 4 /* Property */)) { + return prop; + } + const original = getTypeOfSymbol(prop); + const propContext = context && createWideningContext( + context, + prop.escapedName, + /*siblings*/ + void 0 + ); + const widened = getWidenedTypeWithContext(original, propContext); + return widened === original ? prop : createSymbolWithType(prop, widened); + } + function getUndefinedProperty(prop) { + const cached = undefinedProperties.get(prop.escapedName); + if (cached) { + return cached; + } + const result = createSymbolWithType(prop, undefinedOrMissingType); + result.flags |= 16777216 /* Optional */; + undefinedProperties.set(prop.escapedName, result); + return result; + } + function getWidenedTypeOfObjectLiteral(type, context) { + const members = createSymbolTable(); + for (const prop of getPropertiesOfObjectType(type)) { + members.set(prop.escapedName, getWidenedProperty(prop, context)); + } + if (context) { + for (const prop of getPropertiesOfContext(context)) { + if (!members.has(prop.escapedName)) { + members.set(prop.escapedName, getUndefinedProperty(prop)); + } + } + } + const result = createAnonymousType(type.symbol, members, emptyArray, emptyArray, sameMap(getIndexInfosOfType(type), (info) => createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly, info.declaration, info.components))); + result.objectFlags |= getObjectFlags(type) & (4096 /* JSLiteral */ | 262144 /* NonInferrableType */); + return result; + } + function getWidenedType(type) { + return getWidenedTypeWithContext( + type, + /*context*/ + void 0 + ); + } + function getWidenedTypeWithContext(type, context) { + if (getObjectFlags(type) & 196608 /* RequiresWidening */) { + if (context === void 0 && type.widened) { + return type.widened; + } + let result; + if (type.flags & (1 /* Any */ | 98304 /* Nullable */)) { + result = anyType; + } else if (isObjectLiteralType2(type)) { + result = getWidenedTypeOfObjectLiteral(type, context); + } else if (type.flags & 1048576 /* Union */) { + const unionContext = context || createWideningContext( + /*parent*/ + void 0, + /*propertyName*/ + void 0, + type.types + ); + const widenedTypes = sameMap(type.types, (t) => t.flags & 98304 /* Nullable */ ? t : getWidenedTypeWithContext(t, unionContext)); + result = getUnionType(widenedTypes, some(widenedTypes, isEmptyObjectType) ? 2 /* Subtype */ : 1 /* Literal */); + } else if (type.flags & 2097152 /* Intersection */) { + result = getIntersectionType(sameMap(type.types, getWidenedType)); + } else if (isArrayOrTupleType(type)) { + result = createTypeReference(type.target, sameMap(getTypeArguments(type), getWidenedType)); + } + if (result && context === void 0) { + type.widened = result; + } + return result || type; + } + return type; + } + function reportWideningErrorsInType(type) { + var _a; + let errorReported = false; + if (getObjectFlags(type) & 65536 /* ContainsWideningType */) { + if (type.flags & 1048576 /* Union */) { + if (some(type.types, isEmptyObjectType)) { + errorReported = true; + } else { + for (const t of type.types) { + errorReported || (errorReported = reportWideningErrorsInType(t)); + } + } + } else if (isArrayOrTupleType(type)) { + for (const t of getTypeArguments(type)) { + errorReported || (errorReported = reportWideningErrorsInType(t)); + } + } else if (isObjectLiteralType2(type)) { + for (const p of getPropertiesOfObjectType(type)) { + const t = getTypeOfSymbol(p); + if (getObjectFlags(t) & 65536 /* ContainsWideningType */) { + errorReported = reportWideningErrorsInType(t); + if (!errorReported) { + const valueDeclaration = (_a = p.declarations) == null ? void 0 : _a.find((d) => { + var _a2; + return ((_a2 = d.symbol.valueDeclaration) == null ? void 0 : _a2.parent) === type.symbol.valueDeclaration; + }); + if (valueDeclaration) { + error2(valueDeclaration, Diagnostics.Object_literal_s_property_0_implicitly_has_an_1_type, symbolToString(p), typeToString(getWidenedType(t))); + errorReported = true; + } + } + } + } + } + } + return errorReported; + } + function reportImplicitAny(declaration, type, wideningKind) { + const typeAsString = typeToString(getWidenedType(type)); + if (isInJSFile(declaration) && !isCheckJsEnabledForFile(getSourceFileOfNode(declaration), compilerOptions)) { + return; + } + let diagnostic; + switch (declaration.kind) { + case 227 /* BinaryExpression */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + diagnostic = noImplicitAny ? Diagnostics.Member_0_implicitly_has_an_1_type : Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage; + break; + case 170 /* Parameter */: + const param = declaration; + if (isIdentifier(param.name)) { + const originalKeywordKind = identifierToKeywordKind(param.name); + if ((isCallSignatureDeclaration(param.parent) || isMethodSignature(param.parent) || isFunctionTypeNode(param.parent)) && param.parent.parameters.includes(param) && (resolveName( + param, + param.name.escapedText, + 788968 /* Type */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ) || originalKeywordKind && isTypeNodeKind(originalKeywordKind))) { + const newName = "arg" + param.parent.parameters.indexOf(param); + const typeName = declarationNameToString(param.name) + (param.dotDotDotToken ? "[]" : ""); + errorOrSuggestion(noImplicitAny, declaration, Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1, newName, typeName); + return; + } + } + diagnostic = declaration.dotDotDotToken ? noImplicitAny ? Diagnostics.Rest_parameter_0_implicitly_has_an_any_type : Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage : noImplicitAny ? Diagnostics.Parameter_0_implicitly_has_an_1_type : Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage; + break; + case 209 /* BindingElement */: + diagnostic = Diagnostics.Binding_element_0_implicitly_has_an_1_type; + if (!noImplicitAny) { + return; + } + break; + case 318 /* JSDocFunctionType */: + error2(declaration, Diagnostics.Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); + return; + case 324 /* JSDocSignature */: + if (noImplicitAny && isJSDocOverloadTag(declaration.parent)) { + error2(declaration.parent.tagName, Diagnostics.This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation, typeAsString); + } + return; + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + if (noImplicitAny && !declaration.name) { + if (wideningKind === 3 /* GeneratorYield */) { + error2(declaration, Diagnostics.Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation, typeAsString); + } else { + error2(declaration, Diagnostics.Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type, typeAsString); + } + return; + } + diagnostic = !noImplicitAny ? Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage : wideningKind === 3 /* GeneratorYield */ ? Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type : Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type; + break; + case 201 /* MappedType */: + if (noImplicitAny) { + error2(declaration, Diagnostics.Mapped_object_type_implicitly_has_an_any_template_type); + } + return; + default: + diagnostic = noImplicitAny ? Diagnostics.Variable_0_implicitly_has_an_1_type : Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage; + } + errorOrSuggestion(noImplicitAny, declaration, diagnostic, declarationNameToString(getNameOfDeclaration(declaration)), typeAsString); + } + function shouldReportErrorsFromWideningWithContextualSignature(declaration, wideningKind) { + const signature = getContextualSignatureForFunctionLikeDeclaration(declaration); + if (!signature) { + return true; + } + let returnType = getReturnTypeOfSignature(signature); + const flags = getFunctionFlags(declaration); + switch (wideningKind) { + case 1 /* FunctionReturn */: + if (flags & 1 /* Generator */) { + returnType = getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, returnType, !!(flags & 2 /* Async */)) ?? returnType; + } else if (flags & 2 /* Async */) { + returnType = getAwaitedTypeNoAlias(returnType) ?? returnType; + } + return isGenericType(returnType); + case 3 /* GeneratorYield */: + const yieldType = getIterationTypeOfGeneratorFunctionReturnType(0 /* Yield */, returnType, !!(flags & 2 /* Async */)); + return !!yieldType && isGenericType(yieldType); + case 2 /* GeneratorNext */: + const nextType = getIterationTypeOfGeneratorFunctionReturnType(2 /* Next */, returnType, !!(flags & 2 /* Async */)); + return !!nextType && isGenericType(nextType); + } + return false; + } + function reportErrorsFromWidening(declaration, type, wideningKind) { + addLazyDiagnostic(() => { + if (noImplicitAny && getObjectFlags(type) & 65536 /* ContainsWideningType */) { + if (!wideningKind || isFunctionLikeDeclaration(declaration) && shouldReportErrorsFromWideningWithContextualSignature(declaration, wideningKind)) { + if (!reportWideningErrorsInType(type)) { + reportImplicitAny(declaration, type, wideningKind); + } + } + } + }); + } + function applyToParameterTypes(source, target, callback) { + const sourceCount = getParameterCount(source); + const targetCount = getParameterCount(target); + const sourceRestType = getEffectiveRestType(source); + const targetRestType = getEffectiveRestType(target); + const targetNonRestCount = targetRestType ? targetCount - 1 : targetCount; + const paramCount = sourceRestType ? targetNonRestCount : Math.min(sourceCount, targetNonRestCount); + const sourceThisType = getThisTypeOfSignature(source); + if (sourceThisType) { + const targetThisType = getThisTypeOfSignature(target); + if (targetThisType) { + callback(sourceThisType, targetThisType); + } + } + for (let i = 0; i < paramCount; i++) { + callback(getTypeAtPosition(source, i), getTypeAtPosition(target, i)); + } + if (targetRestType) { + callback(getRestTypeAtPosition( + source, + paramCount, + /*readonly*/ + isConstTypeVariable(targetRestType) && !someType(targetRestType, isMutableArrayLikeType) + ), targetRestType); + } + } + function applyToReturnTypes(source, target, callback) { + const targetTypePredicate = getTypePredicateOfSignature(target); + if (targetTypePredicate) { + const sourceTypePredicate = getTypePredicateOfSignature(source); + if (sourceTypePredicate && typePredicateKindsMatch(sourceTypePredicate, targetTypePredicate) && sourceTypePredicate.type && targetTypePredicate.type) { + callback(sourceTypePredicate.type, targetTypePredicate.type); + return; + } + } + const targetReturnType = getReturnTypeOfSignature(target); + if (couldContainTypeVariables(targetReturnType)) { + callback(getReturnTypeOfSignature(source), targetReturnType); + } + } + function createInferenceContext(typeParameters, signature, flags, compareTypes) { + return createInferenceContextWorker(typeParameters.map(createInferenceInfo), signature, flags, compareTypes || compareTypesAssignable); + } + function cloneInferenceContext(context, extraFlags = 0) { + return context && createInferenceContextWorker(map(context.inferences, cloneInferenceInfo), context.signature, context.flags | extraFlags, context.compareTypes); + } + function createInferenceContextWorker(inferences, signature, flags, compareTypes) { + const context = { + inferences, + signature, + flags, + compareTypes, + mapper: reportUnmeasurableMapper, + // initialize to a noop mapper so the context object is available, but the underlying object shape is right upon construction + nonFixingMapper: reportUnmeasurableMapper + }; + context.mapper = makeFixingMapperForContext(context); + context.nonFixingMapper = makeNonFixingMapperForContext(context); + return context; + } + function makeFixingMapperForContext(context) { + return makeDeferredTypeMapper( + map(context.inferences, (i) => i.typeParameter), + map(context.inferences, (inference, i) => () => { + if (!inference.isFixed) { + inferFromIntraExpressionSites(context); + clearCachedInferences(context.inferences); + inference.isFixed = true; + } + return getInferredType(context, i); + }) + ); + } + function makeNonFixingMapperForContext(context) { + return makeDeferredTypeMapper( + map(context.inferences, (i) => i.typeParameter), + map(context.inferences, (_, i) => () => { + return getInferredType(context, i); + }) + ); + } + function clearCachedInferences(inferences) { + for (const inference of inferences) { + if (!inference.isFixed) { + inference.inferredType = void 0; + } + } + } + function addIntraExpressionInferenceSite(context, node, type) { + (context.intraExpressionInferenceSites ?? (context.intraExpressionInferenceSites = [])).push({ node, type }); + } + function inferFromIntraExpressionSites(context) { + if (context.intraExpressionInferenceSites) { + for (const { node, type } of context.intraExpressionInferenceSites) { + const contextualType = node.kind === 175 /* MethodDeclaration */ ? getContextualTypeForObjectLiteralMethod(node, 2 /* NoConstraints */) : getContextualType2(node, 2 /* NoConstraints */); + if (contextualType) { + inferTypes(context.inferences, type, contextualType); + } + } + context.intraExpressionInferenceSites = void 0; + } + } + function createInferenceInfo(typeParameter) { + return { + typeParameter, + candidates: void 0, + contraCandidates: void 0, + inferredType: void 0, + priority: void 0, + topLevel: true, + isFixed: false, + impliedArity: void 0 + }; + } + function cloneInferenceInfo(inference) { + return { + typeParameter: inference.typeParameter, + candidates: inference.candidates && inference.candidates.slice(), + contraCandidates: inference.contraCandidates && inference.contraCandidates.slice(), + inferredType: inference.inferredType, + priority: inference.priority, + topLevel: inference.topLevel, + isFixed: inference.isFixed, + impliedArity: inference.impliedArity + }; + } + function cloneInferredPartOfContext(context) { + const inferences = filter(context.inferences, hasInferenceCandidates); + return inferences.length ? createInferenceContextWorker(map(inferences, cloneInferenceInfo), context.signature, context.flags, context.compareTypes) : void 0; + } + function getMapperFromContext(context) { + return context && context.mapper; + } + function couldContainTypeVariables(type) { + const objectFlags = getObjectFlags(type); + if (objectFlags & 524288 /* CouldContainTypeVariablesComputed */) { + return !!(objectFlags & 1048576 /* CouldContainTypeVariables */); + } + const result = !!(type.flags & 465829888 /* Instantiable */ || type.flags & 524288 /* Object */ && !isNonGenericTopLevelType(type) && (objectFlags & 4 /* Reference */ && (type.node || some(getTypeArguments(type), couldContainTypeVariables)) || objectFlags & 16 /* Anonymous */ && type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && type.symbol.declarations || objectFlags & (32 /* Mapped */ | 1024 /* ReverseMapped */ | 4194304 /* ObjectRestType */ | 8388608 /* InstantiationExpressionType */)) || type.flags & 3145728 /* UnionOrIntersection */ && !(type.flags & 1024 /* EnumLiteral */) && !isNonGenericTopLevelType(type) && some(type.types, couldContainTypeVariables)); + if (type.flags & 3899393 /* ObjectFlagsType */) { + type.objectFlags |= 524288 /* CouldContainTypeVariablesComputed */ | (result ? 1048576 /* CouldContainTypeVariables */ : 0); + } + return result; + } + function isNonGenericTopLevelType(type) { + if (type.aliasSymbol && !type.aliasTypeArguments) { + const declaration = getDeclarationOfKind(type.aliasSymbol, 266 /* TypeAliasDeclaration */); + return !!(declaration && findAncestor(declaration.parent, (n) => n.kind === 308 /* SourceFile */ ? true : n.kind === 268 /* ModuleDeclaration */ ? false : "quit")); + } + return false; + } + function isTypeParameterAtTopLevel(type, tp, depth = 0) { + return !!(type === tp || type.flags & 3145728 /* UnionOrIntersection */ && some(type.types, (t) => isTypeParameterAtTopLevel(t, tp, depth)) || depth < 3 && type.flags & 16777216 /* Conditional */ && (isTypeParameterAtTopLevel(getTrueTypeFromConditionalType(type), tp, depth + 1) || isTypeParameterAtTopLevel(getFalseTypeFromConditionalType(type), tp, depth + 1))); + } + function isTypeParameterAtTopLevelInReturnType(signature, typeParameter) { + const typePredicate = getTypePredicateOfSignature(signature); + return typePredicate ? !!typePredicate.type && isTypeParameterAtTopLevel(typePredicate.type, typeParameter) : isTypeParameterAtTopLevel(getReturnTypeOfSignature(signature), typeParameter); + } + function createEmptyObjectTypeFromStringLiteral(type) { + const members = createSymbolTable(); + forEachType(type, (t) => { + if (!(t.flags & 128 /* StringLiteral */)) { + return; + } + const name = escapeLeadingUnderscores(t.value); + const literalProp = createSymbol(4 /* Property */, name); + literalProp.links.type = anyType; + if (t.symbol) { + literalProp.declarations = t.symbol.declarations; + literalProp.valueDeclaration = t.symbol.valueDeclaration; + } + members.set(name, literalProp); + }); + const indexInfos = type.flags & 4 /* String */ ? [createIndexInfo( + stringType, + emptyObjectType, + /*isReadonly*/ + false + )] : emptyArray; + return createAnonymousType( + /*symbol*/ + void 0, + members, + emptyArray, + emptyArray, + indexInfos + ); + } + function inferTypeForHomomorphicMappedType(source, target, constraint) { + const cacheKey = source.id + "," + target.id + "," + constraint.id; + if (reverseHomomorphicMappedCache.has(cacheKey)) { + return reverseHomomorphicMappedCache.get(cacheKey); + } + const type = createReverseMappedType(source, target, constraint); + reverseHomomorphicMappedCache.set(cacheKey, type); + return type; + } + function isPartiallyInferableType(type) { + return !(getObjectFlags(type) & 262144 /* NonInferrableType */) || isObjectLiteralType2(type) && some(getPropertiesOfType(type), (prop) => isPartiallyInferableType(getTypeOfSymbol(prop))) || isTupleType(type) && some(getElementTypes(type), isPartiallyInferableType); + } + function createReverseMappedType(source, target, constraint) { + if (!(getIndexInfoOfType(source, stringType) || getPropertiesOfType(source).length !== 0 && isPartiallyInferableType(source))) { + return void 0; + } + if (isArrayType(source)) { + const elementType = inferReverseMappedType(getTypeArguments(source)[0], target, constraint); + if (!elementType) { + return void 0; + } + return createArrayType(elementType, isReadonlyArrayType(source)); + } + if (isTupleType(source)) { + const elementTypes = map(getElementTypes(source), (t) => inferReverseMappedType(t, target, constraint)); + if (!every(elementTypes, (t) => !!t)) { + return void 0; + } + const elementFlags = getMappedTypeModifiers(target) & 4 /* IncludeOptional */ ? sameMap(source.target.elementFlags, (f) => f & 2 /* Optional */ ? 1 /* Required */ : f) : source.target.elementFlags; + return createTupleType(elementTypes, elementFlags, source.target.readonly, source.target.labeledElementDeclarations); + } + const reversed = createObjectType( + 1024 /* ReverseMapped */ | 16 /* Anonymous */, + /*symbol*/ + void 0 + ); + reversed.source = source; + reversed.mappedType = target; + reversed.constraintType = constraint; + return reversed; + } + function getTypeOfReverseMappedSymbol(symbol) { + const links = getSymbolLinks(symbol); + if (!links.type) { + links.type = inferReverseMappedType(symbol.links.propertyType, symbol.links.mappedType, symbol.links.constraintType) || unknownType; + } + return links.type; + } + function inferReverseMappedTypeWorker(sourceType, target, constraint) { + const typeParameter = getIndexedAccessType(constraint.type, getTypeParameterFromMappedType(target)); + const templateType = getTemplateTypeFromMappedType(target); + const inference = createInferenceInfo(typeParameter); + inferTypes([inference], sourceType, templateType); + return getTypeFromInference(inference) || unknownType; + } + function inferReverseMappedType(source, target, constraint) { + const cacheKey = source.id + "," + target.id + "," + constraint.id; + if (reverseMappedCache.has(cacheKey)) { + return reverseMappedCache.get(cacheKey) || unknownType; + } + reverseMappedSourceStack.push(source); + reverseMappedTargetStack.push(target); + const saveExpandingFlags = reverseExpandingFlags; + if (isDeeplyNestedType(source, reverseMappedSourceStack, reverseMappedSourceStack.length, 2)) reverseExpandingFlags |= 1 /* Source */; + if (isDeeplyNestedType(target, reverseMappedTargetStack, reverseMappedTargetStack.length, 2)) reverseExpandingFlags |= 2 /* Target */; + let type; + if (reverseExpandingFlags !== 3 /* Both */) { + type = inferReverseMappedTypeWorker(source, target, constraint); + } + reverseMappedSourceStack.pop(); + reverseMappedTargetStack.pop(); + reverseExpandingFlags = saveExpandingFlags; + reverseMappedCache.set(cacheKey, type); + return type; + } + function* getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties) { + const properties = getPropertiesOfType(target); + for (const targetProp of properties) { + if (isStaticPrivateIdentifierProperty(targetProp)) { + continue; + } + if (requireOptionalProperties || !(targetProp.flags & 16777216 /* Optional */ || getCheckFlags(targetProp) & 48 /* Partial */)) { + const sourceProp = getPropertyOfType(source, targetProp.escapedName); + if (!sourceProp) { + yield targetProp; + } else if (matchDiscriminantProperties) { + const targetType = getTypeOfSymbol(targetProp); + if (targetType.flags & 109472 /* Unit */) { + const sourceType = getTypeOfSymbol(sourceProp); + if (!(sourceType.flags & 1 /* Any */ || getRegularTypeOfLiteralType(sourceType) === getRegularTypeOfLiteralType(targetType))) { + yield targetProp; + } + } + } + } + } + } + function getUnmatchedProperty(source, target, requireOptionalProperties, matchDiscriminantProperties) { + return firstOrUndefinedIterator(getUnmatchedProperties(source, target, requireOptionalProperties, matchDiscriminantProperties)); + } + function tupleTypesDefinitelyUnrelated(source, target) { + return !(target.target.combinedFlags & 8 /* Variadic */) && target.target.minLength > source.target.minLength || !(target.target.combinedFlags & 12 /* Variable */) && (!!(source.target.combinedFlags & 12 /* Variable */) || target.target.fixedLength < source.target.fixedLength); + } + function typesDefinitelyUnrelated(source, target) { + return isTupleType(source) && isTupleType(target) ? tupleTypesDefinitelyUnrelated(source, target) : !!getUnmatchedProperty( + source, + target, + /*requireOptionalProperties*/ + false, + /*matchDiscriminantProperties*/ + true + ) && !!getUnmatchedProperty( + target, + source, + /*requireOptionalProperties*/ + false, + /*matchDiscriminantProperties*/ + false + ); + } + function getTypeFromInference(inference) { + return inference.candidates ? getUnionType(inference.candidates, 2 /* Subtype */) : inference.contraCandidates ? getIntersectionType(inference.contraCandidates) : void 0; + } + function hasSkipDirectInferenceFlag(node) { + return !!getNodeLinks(node).skipDirectInference; + } + function isFromInferenceBlockedSource(type) { + return !!(type.symbol && some(type.symbol.declarations, hasSkipDirectInferenceFlag)); + } + function templateLiteralTypesDefinitelyUnrelated(source, target) { + const sourceStart = source.texts[0]; + const targetStart = target.texts[0]; + const sourceEnd = source.texts[source.texts.length - 1]; + const targetEnd = target.texts[target.texts.length - 1]; + const startLen = Math.min(sourceStart.length, targetStart.length); + const endLen = Math.min(sourceEnd.length, targetEnd.length); + return sourceStart.slice(0, startLen) !== targetStart.slice(0, startLen) || sourceEnd.slice(sourceEnd.length - endLen) !== targetEnd.slice(targetEnd.length - endLen); + } + function isValidNumberString(s, roundTripOnly) { + if (s === "") return false; + const n = +s; + return isFinite(n) && (!roundTripOnly || "" + n === s); + } + function parseBigIntLiteralType(text) { + return getBigIntLiteralType(parseValidBigInt(text)); + } + function isMemberOfStringMapping(source, target) { + if (target.flags & 1 /* Any */) { + return true; + } + if (target.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) { + return isTypeAssignableTo(source, target); + } + if (target.flags & 268435456 /* StringMapping */) { + const mappingStack = []; + while (target.flags & 268435456 /* StringMapping */) { + mappingStack.unshift(target.symbol); + target = target.type; + } + const mappedSource = reduceLeft(mappingStack, (memo, value) => getStringMappingType(value, memo), source); + return mappedSource === source && isMemberOfStringMapping(source, target); + } + return false; + } + function isValidTypeForTemplateLiteralPlaceholder(source, target) { + if (target.flags & 2097152 /* Intersection */) { + return every(target.types, (t) => t === emptyTypeLiteralType || isValidTypeForTemplateLiteralPlaceholder(source, t)); + } + if (target.flags & 4 /* String */ || isTypeAssignableTo(source, target)) { + return true; + } + if (source.flags & 128 /* StringLiteral */) { + const value = source.value; + return !!(target.flags & 8 /* Number */ && isValidNumberString( + value, + /*roundTripOnly*/ + false + ) || target.flags & 64 /* BigInt */ && isValidBigIntString( + value, + /*roundTripOnly*/ + false + ) || target.flags & (512 /* BooleanLiteral */ | 98304 /* Nullable */) && value === target.intrinsicName || target.flags & 268435456 /* StringMapping */ && isMemberOfStringMapping(source, target) || target.flags & 134217728 /* TemplateLiteral */ && isTypeMatchedByTemplateLiteralType(source, target)); + } + if (source.flags & 134217728 /* TemplateLiteral */) { + const texts = source.texts; + return texts.length === 2 && texts[0] === "" && texts[1] === "" && isTypeAssignableTo(source.types[0], target); + } + return false; + } + function inferTypesFromTemplateLiteralType(source, target) { + return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arrayIsEqualTo(source.texts, target.texts) ? map(source.types, (s, i) => { + return isTypeAssignableTo(getBaseConstraintOrType(s), getBaseConstraintOrType(target.types[i])) ? s : getStringLikeTypeForType(s); + }) : inferFromLiteralPartsToTemplateLiteral(source.texts, source.types, target) : void 0; + } + function isTypeMatchedByTemplateLiteralType(source, target) { + const inferences = inferTypesFromTemplateLiteralType(source, target); + return !!inferences && every(inferences, (r, i) => isValidTypeForTemplateLiteralPlaceholder(r, target.types[i])); + } + function getStringLikeTypeForType(type) { + return type.flags & (1 /* Any */ | 402653316 /* StringLike */) ? type : getTemplateLiteralType(["", ""], [type]); + } + function inferFromLiteralPartsToTemplateLiteral(sourceTexts, sourceTypes, target) { + const lastSourceIndex = sourceTexts.length - 1; + const sourceStartText = sourceTexts[0]; + const sourceEndText = sourceTexts[lastSourceIndex]; + const targetTexts = target.texts; + const lastTargetIndex = targetTexts.length - 1; + const targetStartText = targetTexts[0]; + const targetEndText = targetTexts[lastTargetIndex]; + if (lastSourceIndex === 0 && sourceStartText.length < targetStartText.length + targetEndText.length || !sourceStartText.startsWith(targetStartText) || !sourceEndText.endsWith(targetEndText)) return void 0; + const remainingEndText = sourceEndText.slice(0, sourceEndText.length - targetEndText.length); + const matches = []; + let seg = 0; + let pos = targetStartText.length; + for (let i = 1; i < lastTargetIndex; i++) { + const delim = targetTexts[i]; + if (delim.length > 0) { + let s = seg; + let p = pos; + while (true) { + p = getSourceText(s).indexOf(delim, p); + if (p >= 0) break; + s++; + if (s === sourceTexts.length) return void 0; + p = 0; + } + addMatch(s, p); + pos += delim.length; + } else if (pos < getSourceText(seg).length) { + addMatch(seg, pos + 1); + } else if (seg < lastSourceIndex) { + addMatch(seg + 1, 0); + } else { + return void 0; + } + } + addMatch(lastSourceIndex, getSourceText(lastSourceIndex).length); + return matches; + function getSourceText(index) { + return index < lastSourceIndex ? sourceTexts[index] : remainingEndText; + } + function addMatch(s, p) { + const matchType = s === seg ? getStringLiteralType(getSourceText(s).slice(pos, p)) : getTemplateLiteralType( + [sourceTexts[seg].slice(pos), ...sourceTexts.slice(seg + 1, s), getSourceText(s).slice(0, p)], + sourceTypes.slice(seg, s) + ); + matches.push(matchType); + seg = s; + pos = p; + } + } + function inferTypes(inferences, originalSource, originalTarget, priority = 0 /* None */, contravariant = false) { + let bivariant = false; + let propagationType; + let inferencePriority = 2048 /* MaxValue */; + let visited; + let sourceStack; + let targetStack; + let expandingFlags = 0 /* None */; + inferFromTypes(originalSource, originalTarget); + function inferFromTypes(source, target) { + if (!couldContainTypeVariables(target) || isNoInferType(target)) { + return; + } + if (source === wildcardType || source === blockedStringType) { + const savePropagationType = propagationType; + propagationType = source; + inferFromTypes(target, target); + propagationType = savePropagationType; + return; + } + if (source.aliasSymbol && source.aliasSymbol === target.aliasSymbol) { + if (source.aliasTypeArguments) { + const params = getSymbolLinks(source.aliasSymbol).typeParameters; + const minParams = getMinTypeArgumentCount(params); + const sourceTypes = fillMissingTypeArguments(source.aliasTypeArguments, params, minParams, isInJSFile(source.aliasSymbol.valueDeclaration)); + const targetTypes = fillMissingTypeArguments(target.aliasTypeArguments, params, minParams, isInJSFile(source.aliasSymbol.valueDeclaration)); + inferFromTypeArguments(sourceTypes, targetTypes, getAliasVariances(source.aliasSymbol)); + } + return; + } + if (source === target && source.flags & 3145728 /* UnionOrIntersection */) { + for (const t of source.types) { + inferFromTypes(t, t); + } + return; + } + if (target.flags & 1048576 /* Union */) { + const [tempSources, tempTargets] = inferFromMatchingTypes(source.flags & 1048576 /* Union */ ? source.types : [source], target.types, isTypeOrBaseIdenticalTo); + const [sources, targets] = inferFromMatchingTypes(tempSources, tempTargets, isTypeCloselyMatchedBy); + if (targets.length === 0) { + return; + } + target = getUnionType(targets); + if (sources.length === 0) { + inferWithPriority(source, target, 1 /* NakedTypeVariable */); + return; + } + source = getUnionType(sources); + } else if (target.flags & 2097152 /* Intersection */ && !every(target.types, isNonGenericObjectType)) { + if (!(source.flags & 1048576 /* Union */)) { + const [sources, targets] = inferFromMatchingTypes(source.flags & 2097152 /* Intersection */ ? source.types : [source], target.types, isTypeIdenticalTo); + if (sources.length === 0 || targets.length === 0) { + return; + } + source = getIntersectionType(sources); + target = getIntersectionType(targets); + } + } + if (target.flags & (8388608 /* IndexedAccess */ | 33554432 /* Substitution */)) { + if (isNoInferType(target)) { + return; + } + target = getActualTypeVariable(target); + } + if (target.flags & 8650752 /* TypeVariable */) { + if (isFromInferenceBlockedSource(source)) { + return; + } + const inference = getInferenceInfoForType(target); + if (inference) { + if (getObjectFlags(source) & 262144 /* NonInferrableType */ || source === nonInferrableAnyType) { + return; + } + if (!inference.isFixed) { + const candidate = propagationType || source; + if (candidate === blockedStringType) { + return; + } + if (inference.priority === void 0 || priority < inference.priority) { + inference.candidates = void 0; + inference.contraCandidates = void 0; + inference.topLevel = true; + inference.priority = priority; + } + if (priority === inference.priority) { + if (contravariant && !bivariant) { + if (!contains(inference.contraCandidates, candidate)) { + inference.contraCandidates = append(inference.contraCandidates, candidate); + clearCachedInferences(inferences); + } + } else if (!contains(inference.candidates, candidate)) { + inference.candidates = append(inference.candidates, candidate); + clearCachedInferences(inferences); + } + } + if (!(priority & 128 /* ReturnType */) && target.flags & 262144 /* TypeParameter */ && inference.topLevel && !isTypeParameterAtTopLevel(originalTarget, target)) { + inference.topLevel = false; + clearCachedInferences(inferences); + } + } + inferencePriority = Math.min(inferencePriority, priority); + return; + } + const simplified = getSimplifiedType( + target, + /*writing*/ + false + ); + if (simplified !== target) { + inferFromTypes(source, simplified); + } else if (target.flags & 8388608 /* IndexedAccess */) { + const indexType = getSimplifiedType( + target.indexType, + /*writing*/ + false + ); + if (indexType.flags & 465829888 /* Instantiable */) { + const simplified2 = distributeIndexOverObjectType( + getSimplifiedType( + target.objectType, + /*writing*/ + false + ), + indexType, + /*writing*/ + false + ); + if (simplified2 && simplified2 !== target) { + inferFromTypes(source, simplified2); + } + } + } + } + if (getObjectFlags(source) & 4 /* Reference */ && getObjectFlags(target) & 4 /* Reference */ && (source.target === target.target || isArrayType(source) && isArrayType(target)) && !(source.node && target.node)) { + inferFromTypeArguments(getTypeArguments(source), getTypeArguments(target), getVariances(source.target)); + } else if (source.flags & 4194304 /* Index */ && target.flags & 4194304 /* Index */) { + inferFromContravariantTypes(source.type, target.type); + } else if ((isLiteralType(source) || source.flags & 4 /* String */) && target.flags & 4194304 /* Index */) { + const empty = createEmptyObjectTypeFromStringLiteral(source); + inferFromContravariantTypesWithPriority(empty, target.type, 256 /* LiteralKeyof */); + } else if (source.flags & 8388608 /* IndexedAccess */ && target.flags & 8388608 /* IndexedAccess */) { + inferFromTypes(source.objectType, target.objectType); + inferFromTypes(source.indexType, target.indexType); + } else if (source.flags & 268435456 /* StringMapping */ && target.flags & 268435456 /* StringMapping */) { + if (source.symbol === target.symbol) { + inferFromTypes(source.type, target.type); + } + } else if (source.flags & 33554432 /* Substitution */) { + inferFromTypes(source.baseType, target); + inferWithPriority(getSubstitutionIntersection(source), target, 4 /* SubstituteSource */); + } else if (target.flags & 16777216 /* Conditional */) { + invokeOnce(source, target, inferToConditionalType); + } else if (target.flags & 3145728 /* UnionOrIntersection */) { + inferToMultipleTypes(source, target.types, target.flags); + } else if (source.flags & 1048576 /* Union */) { + const sourceTypes = source.types; + for (const sourceType of sourceTypes) { + inferFromTypes(sourceType, target); + } + } else if (target.flags & 134217728 /* TemplateLiteral */) { + inferToTemplateLiteralType(source, target); + } else { + source = getReducedType(source); + if (isGenericMappedType(source) && isGenericMappedType(target)) { + invokeOnce(source, target, inferFromGenericMappedTypes); + } + if (!(priority & 512 /* NoConstraints */ && source.flags & (2097152 /* Intersection */ | 465829888 /* Instantiable */))) { + const apparentSource = getApparentType(source); + if (apparentSource !== source && !(apparentSource.flags & (524288 /* Object */ | 2097152 /* Intersection */))) { + return inferFromTypes(apparentSource, target); + } + source = apparentSource; + } + if (source.flags & (524288 /* Object */ | 2097152 /* Intersection */)) { + invokeOnce(source, target, inferFromObjectTypes); + } + } + } + function inferWithPriority(source, target, newPriority) { + const savePriority = priority; + priority |= newPriority; + inferFromTypes(source, target); + priority = savePriority; + } + function inferFromContravariantTypesWithPriority(source, target, newPriority) { + const savePriority = priority; + priority |= newPriority; + inferFromContravariantTypes(source, target); + priority = savePriority; + } + function inferToMultipleTypesWithPriority(source, targets, targetFlags, newPriority) { + const savePriority = priority; + priority |= newPriority; + inferToMultipleTypes(source, targets, targetFlags); + priority = savePriority; + } + function invokeOnce(source, target, action) { + const key = source.id + "," + target.id; + const status = visited && visited.get(key); + if (status !== void 0) { + inferencePriority = Math.min(inferencePriority, status); + return; + } + (visited || (visited = /* @__PURE__ */ new Map())).set(key, -1 /* Circularity */); + const saveInferencePriority = inferencePriority; + inferencePriority = 2048 /* MaxValue */; + const saveExpandingFlags = expandingFlags; + (sourceStack ?? (sourceStack = [])).push(source); + (targetStack ?? (targetStack = [])).push(target); + if (isDeeplyNestedType(source, sourceStack, sourceStack.length, 2)) expandingFlags |= 1 /* Source */; + if (isDeeplyNestedType(target, targetStack, targetStack.length, 2)) expandingFlags |= 2 /* Target */; + if (expandingFlags !== 3 /* Both */) { + action(source, target); + } else { + inferencePriority = -1 /* Circularity */; + } + targetStack.pop(); + sourceStack.pop(); + expandingFlags = saveExpandingFlags; + visited.set(key, inferencePriority); + inferencePriority = Math.min(inferencePriority, saveInferencePriority); + } + function inferFromMatchingTypes(sources, targets, matches) { + let matchedSources; + let matchedTargets; + for (const t of targets) { + for (const s of sources) { + if (matches(s, t)) { + inferFromTypes(s, t); + matchedSources = appendIfUnique(matchedSources, s); + matchedTargets = appendIfUnique(matchedTargets, t); + } + } + } + return [ + matchedSources ? filter(sources, (t) => !contains(matchedSources, t)) : sources, + matchedTargets ? filter(targets, (t) => !contains(matchedTargets, t)) : targets + ]; + } + function inferFromTypeArguments(sourceTypes, targetTypes, variances) { + const count = sourceTypes.length < targetTypes.length ? sourceTypes.length : targetTypes.length; + for (let i = 0; i < count; i++) { + if (i < variances.length && (variances[i] & 7 /* VarianceMask */) === 2 /* Contravariant */) { + inferFromContravariantTypes(sourceTypes[i], targetTypes[i]); + } else { + inferFromTypes(sourceTypes[i], targetTypes[i]); + } + } + } + function inferFromContravariantTypes(source, target) { + contravariant = !contravariant; + inferFromTypes(source, target); + contravariant = !contravariant; + } + function inferFromContravariantTypesIfStrictFunctionTypes(source, target) { + if (strictFunctionTypes || priority & 1024 /* AlwaysStrict */) { + inferFromContravariantTypes(source, target); + } else { + inferFromTypes(source, target); + } + } + function getInferenceInfoForType(type) { + if (type.flags & 8650752 /* TypeVariable */) { + for (const inference of inferences) { + if (type === inference.typeParameter) { + return inference; + } + } + } + return void 0; + } + function getSingleTypeVariableFromIntersectionTypes(types) { + let typeVariable; + for (const type of types) { + const t = type.flags & 2097152 /* Intersection */ && find(type.types, (t2) => !!getInferenceInfoForType(t2)); + if (!t || typeVariable && t !== typeVariable) { + return void 0; + } + typeVariable = t; + } + return typeVariable; + } + function inferToMultipleTypes(source, targets, targetFlags) { + let typeVariableCount = 0; + if (targetFlags & 1048576 /* Union */) { + let nakedTypeVariable; + const sources = source.flags & 1048576 /* Union */ ? source.types : [source]; + const matched = new Array(sources.length); + let inferenceCircularity = false; + for (const t of targets) { + if (getInferenceInfoForType(t)) { + nakedTypeVariable = t; + typeVariableCount++; + } else { + for (let i = 0; i < sources.length; i++) { + const saveInferencePriority = inferencePriority; + inferencePriority = 2048 /* MaxValue */; + inferFromTypes(sources[i], t); + if (inferencePriority === priority) matched[i] = true; + inferenceCircularity = inferenceCircularity || inferencePriority === -1 /* Circularity */; + inferencePriority = Math.min(inferencePriority, saveInferencePriority); + } + } + } + if (typeVariableCount === 0) { + const intersectionTypeVariable = getSingleTypeVariableFromIntersectionTypes(targets); + if (intersectionTypeVariable) { + inferWithPriority(source, intersectionTypeVariable, 1 /* NakedTypeVariable */); + } + return; + } + if (typeVariableCount === 1 && !inferenceCircularity) { + const unmatched = flatMap(sources, (s, i) => matched[i] ? void 0 : s); + if (unmatched.length) { + inferFromTypes(getUnionType(unmatched), nakedTypeVariable); + return; + } + } + } else { + for (const t of targets) { + if (getInferenceInfoForType(t)) { + typeVariableCount++; + } else { + inferFromTypes(source, t); + } + } + } + if (targetFlags & 2097152 /* Intersection */ ? typeVariableCount === 1 : typeVariableCount > 0) { + for (const t of targets) { + if (getInferenceInfoForType(t)) { + inferWithPriority(source, t, 1 /* NakedTypeVariable */); + } + } + } + } + function inferToMappedType(source, target, constraintType) { + if (constraintType.flags & 1048576 /* Union */ || constraintType.flags & 2097152 /* Intersection */) { + let result = false; + for (const type of constraintType.types) { + result = inferToMappedType(source, target, type) || result; + } + return result; + } + if (constraintType.flags & 4194304 /* Index */) { + const inference = getInferenceInfoForType(constraintType.type); + if (inference && !inference.isFixed && !isFromInferenceBlockedSource(source)) { + const inferredType = inferTypeForHomomorphicMappedType(source, target, constraintType); + if (inferredType) { + inferWithPriority( + inferredType, + inference.typeParameter, + getObjectFlags(source) & 262144 /* NonInferrableType */ ? 16 /* PartialHomomorphicMappedType */ : 8 /* HomomorphicMappedType */ + ); + } + } + return true; + } + if (constraintType.flags & 262144 /* TypeParameter */) { + inferWithPriority(getIndexType( + source, + /*indexFlags*/ + !!source.pattern ? 2 /* NoIndexSignatures */ : 0 /* None */ + ), constraintType, 32 /* MappedTypeConstraint */); + const extendedConstraint = getConstraintOfType(constraintType); + if (extendedConstraint && inferToMappedType(source, target, extendedConstraint)) { + return true; + } + const propTypes = map(getPropertiesOfType(source), getTypeOfSymbol); + const indexTypes = map(getIndexInfosOfType(source), (info) => info !== enumNumberIndexInfo ? info.type : neverType); + inferFromTypes(getUnionType(concatenate(propTypes, indexTypes)), getTemplateTypeFromMappedType(target)); + return true; + } + return false; + } + function inferToConditionalType(source, target) { + if (source.flags & 16777216 /* Conditional */) { + inferFromTypes(source.checkType, target.checkType); + inferFromTypes(source.extendsType, target.extendsType); + inferFromTypes(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target)); + inferFromTypes(getFalseTypeFromConditionalType(source), getFalseTypeFromConditionalType(target)); + } else { + const targetTypes = [getTrueTypeFromConditionalType(target), getFalseTypeFromConditionalType(target)]; + inferToMultipleTypesWithPriority(source, targetTypes, target.flags, contravariant ? 64 /* ContravariantConditional */ : 0); + } + } + function inferToTemplateLiteralType(source, target) { + const matches = inferTypesFromTemplateLiteralType(source, target); + const types = target.types; + if (matches || every(target.texts, (s) => s.length === 0)) { + for (let i = 0; i < types.length; i++) { + const source2 = matches ? matches[i] : neverType; + const target2 = types[i]; + if (source2.flags & 128 /* StringLiteral */ && target2.flags & 8650752 /* TypeVariable */) { + const inferenceContext = getInferenceInfoForType(target2); + const constraint = inferenceContext ? getBaseConstraintOfType(inferenceContext.typeParameter) : void 0; + if (constraint && !isTypeAny(constraint)) { + const constraintTypes = constraint.flags & 1048576 /* Union */ ? constraint.types : [constraint]; + let allTypeFlags = reduceLeft(constraintTypes, (flags, t) => flags | t.flags, 0); + if (!(allTypeFlags & 4 /* String */)) { + const str = source2.value; + if (allTypeFlags & 296 /* NumberLike */ && !isValidNumberString( + str, + /*roundTripOnly*/ + true + )) { + allTypeFlags &= ~296 /* NumberLike */; + } + if (allTypeFlags & 2112 /* BigIntLike */ && !isValidBigIntString( + str, + /*roundTripOnly*/ + true + )) { + allTypeFlags &= ~2112 /* BigIntLike */; + } + const matchingType = reduceLeft(constraintTypes, (left, right) => !(right.flags & allTypeFlags) ? left : left.flags & 4 /* String */ ? left : right.flags & 4 /* String */ ? source2 : left.flags & 134217728 /* TemplateLiteral */ ? left : right.flags & 134217728 /* TemplateLiteral */ && isTypeMatchedByTemplateLiteralType(source2, right) ? source2 : left.flags & 268435456 /* StringMapping */ ? left : right.flags & 268435456 /* StringMapping */ && str === applyStringMapping(right.symbol, str) ? source2 : left.flags & 128 /* StringLiteral */ ? left : right.flags & 128 /* StringLiteral */ && right.value === str ? right : left.flags & 8 /* Number */ ? left : right.flags & 8 /* Number */ ? getNumberLiteralType(+str) : left.flags & 32 /* Enum */ ? left : right.flags & 32 /* Enum */ ? getNumberLiteralType(+str) : left.flags & 256 /* NumberLiteral */ ? left : right.flags & 256 /* NumberLiteral */ && right.value === +str ? right : left.flags & 64 /* BigInt */ ? left : right.flags & 64 /* BigInt */ ? parseBigIntLiteralType(str) : left.flags & 2048 /* BigIntLiteral */ ? left : right.flags & 2048 /* BigIntLiteral */ && pseudoBigIntToString(right.value) === str ? right : left.flags & 16 /* Boolean */ ? left : right.flags & 16 /* Boolean */ ? str === "true" ? trueType : str === "false" ? falseType : booleanType : left.flags & 512 /* BooleanLiteral */ ? left : right.flags & 512 /* BooleanLiteral */ && right.intrinsicName === str ? right : left.flags & 32768 /* Undefined */ ? left : right.flags & 32768 /* Undefined */ && right.intrinsicName === str ? right : left.flags & 65536 /* Null */ ? left : right.flags & 65536 /* Null */ && right.intrinsicName === str ? right : left, neverType); + if (!(matchingType.flags & 131072 /* Never */)) { + inferFromTypes(matchingType, target2); + continue; + } + } + } + } + inferFromTypes(source2, target2); + } + } + } + function inferFromGenericMappedTypes(source, target) { + inferFromTypes(getConstraintTypeFromMappedType(source), getConstraintTypeFromMappedType(target)); + inferFromTypes(getTemplateTypeFromMappedType(source), getTemplateTypeFromMappedType(target)); + const sourceNameType = getNameTypeFromMappedType(source); + const targetNameType = getNameTypeFromMappedType(target); + if (sourceNameType && targetNameType) inferFromTypes(sourceNameType, targetNameType); + } + function inferFromObjectTypes(source, target) { + var _a, _b; + if (getObjectFlags(source) & 4 /* Reference */ && getObjectFlags(target) & 4 /* Reference */ && (source.target === target.target || isArrayType(source) && isArrayType(target))) { + inferFromTypeArguments(getTypeArguments(source), getTypeArguments(target), getVariances(source.target)); + return; + } + if (isGenericMappedType(source) && isGenericMappedType(target)) { + inferFromGenericMappedTypes(source, target); + } + if (getObjectFlags(target) & 32 /* Mapped */ && !target.declaration.nameType) { + const constraintType = getConstraintTypeFromMappedType(target); + if (inferToMappedType(source, target, constraintType)) { + return; + } + } + if (!typesDefinitelyUnrelated(source, target)) { + if (isArrayOrTupleType(source)) { + if (isTupleType(target)) { + const sourceArity = getTypeReferenceArity(source); + const targetArity = getTypeReferenceArity(target); + const elementTypes = getTypeArguments(target); + const elementFlags = target.target.elementFlags; + if (isTupleType(source) && isTupleTypeStructureMatching(source, target)) { + for (let i = 0; i < targetArity; i++) { + inferFromTypes(getTypeArguments(source)[i], elementTypes[i]); + } + return; + } + const startLength = isTupleType(source) ? Math.min(source.target.fixedLength, target.target.fixedLength) : 0; + const endLength = Math.min(isTupleType(source) ? getEndElementCount(source.target, 3 /* Fixed */) : 0, target.target.combinedFlags & 12 /* Variable */ ? getEndElementCount(target.target, 3 /* Fixed */) : 0); + for (let i = 0; i < startLength; i++) { + inferFromTypes(getTypeArguments(source)[i], elementTypes[i]); + } + if (!isTupleType(source) || sourceArity - startLength - endLength === 1 && source.target.elementFlags[startLength] & 4 /* Rest */) { + const restType = getTypeArguments(source)[startLength]; + for (let i = startLength; i < targetArity - endLength; i++) { + inferFromTypes(elementFlags[i] & 8 /* Variadic */ ? createArrayType(restType) : restType, elementTypes[i]); + } + } else { + const middleLength = targetArity - startLength - endLength; + if (middleLength === 2) { + if (elementFlags[startLength] & elementFlags[startLength + 1] & 8 /* Variadic */) { + const targetInfo = getInferenceInfoForType(elementTypes[startLength]); + if (targetInfo && targetInfo.impliedArity !== void 0) { + inferFromTypes(sliceTupleType(source, startLength, endLength + sourceArity - targetInfo.impliedArity), elementTypes[startLength]); + inferFromTypes(sliceTupleType(source, startLength + targetInfo.impliedArity, endLength), elementTypes[startLength + 1]); + } + } else if (elementFlags[startLength] & 8 /* Variadic */ && elementFlags[startLength + 1] & 4 /* Rest */) { + const param = (_a = getInferenceInfoForType(elementTypes[startLength])) == null ? void 0 : _a.typeParameter; + const constraint = param && getBaseConstraintOfType(param); + if (constraint && isTupleType(constraint) && !(constraint.target.combinedFlags & 12 /* Variable */)) { + const impliedArity = constraint.target.fixedLength; + inferFromTypes(sliceTupleType(source, startLength, sourceArity - (startLength + impliedArity)), elementTypes[startLength]); + inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength + impliedArity, endLength), elementTypes[startLength + 1]); + } + } else if (elementFlags[startLength] & 4 /* Rest */ && elementFlags[startLength + 1] & 8 /* Variadic */) { + const param = (_b = getInferenceInfoForType(elementTypes[startLength + 1])) == null ? void 0 : _b.typeParameter; + const constraint = param && getBaseConstraintOfType(param); + if (constraint && isTupleType(constraint) && !(constraint.target.combinedFlags & 12 /* Variable */)) { + const impliedArity = constraint.target.fixedLength; + const endIndex = sourceArity - getEndElementCount(target.target, 3 /* Fixed */); + const startIndex = endIndex - impliedArity; + const trailingSlice = createTupleType( + getTypeArguments(source).slice(startIndex, endIndex), + source.target.elementFlags.slice(startIndex, endIndex), + /*readonly*/ + false, + source.target.labeledElementDeclarations && source.target.labeledElementDeclarations.slice(startIndex, endIndex) + ); + inferFromTypes(getElementTypeOfSliceOfTupleType(source, startLength, endLength + impliedArity), elementTypes[startLength]); + inferFromTypes(trailingSlice, elementTypes[startLength + 1]); + } + } + } else if (middleLength === 1 && elementFlags[startLength] & 8 /* Variadic */) { + const endsInOptional = target.target.elementFlags[targetArity - 1] & 2 /* Optional */; + const sourceSlice = sliceTupleType(source, startLength, endLength); + inferWithPriority(sourceSlice, elementTypes[startLength], endsInOptional ? 2 /* SpeculativeTuple */ : 0); + } else if (middleLength === 1 && elementFlags[startLength] & 4 /* Rest */) { + const restType = getElementTypeOfSliceOfTupleType(source, startLength, endLength); + if (restType) { + inferFromTypes(restType, elementTypes[startLength]); + } + } + } + for (let i = 0; i < endLength; i++) { + inferFromTypes(getTypeArguments(source)[sourceArity - i - 1], elementTypes[targetArity - i - 1]); + } + return; + } + if (isArrayType(target)) { + inferFromIndexTypes(source, target); + return; + } + } + inferFromProperties(source, target); + inferFromSignatures(source, target, 0 /* Call */); + inferFromSignatures(source, target, 1 /* Construct */); + inferFromIndexTypes(source, target); + } + } + function inferFromProperties(source, target) { + const properties = getPropertiesOfObjectType(target); + for (const targetProp of properties) { + const sourceProp = getPropertyOfType(source, targetProp.escapedName); + if (sourceProp && !some(sourceProp.declarations, hasSkipDirectInferenceFlag)) { + inferFromTypes( + removeMissingType(getTypeOfSymbol(sourceProp), !!(sourceProp.flags & 16777216 /* Optional */)), + removeMissingType(getTypeOfSymbol(targetProp), !!(targetProp.flags & 16777216 /* Optional */)) + ); + } + } + } + function inferFromSignatures(source, target, kind) { + const sourceSignatures = getSignaturesOfType(source, kind); + const sourceLen = sourceSignatures.length; + if (sourceLen > 0) { + const targetSignatures = getSignaturesOfType(target, kind); + const targetLen = targetSignatures.length; + for (let i = 0; i < targetLen; i++) { + const sourceIndex = Math.max(sourceLen - targetLen + i, 0); + inferFromSignature(getBaseSignature(sourceSignatures[sourceIndex]), getErasedSignature(targetSignatures[i])); + } + } + } + function inferFromSignature(source, target) { + if (!(source.flags & 64 /* IsNonInferrable */)) { + const saveBivariant = bivariant; + const kind = target.declaration ? target.declaration.kind : 0 /* Unknown */; + bivariant = bivariant || kind === 175 /* MethodDeclaration */ || kind === 174 /* MethodSignature */ || kind === 177 /* Constructor */; + applyToParameterTypes(source, target, inferFromContravariantTypesIfStrictFunctionTypes); + bivariant = saveBivariant; + } + applyToReturnTypes(source, target, inferFromTypes); + } + function inferFromIndexTypes(source, target) { + const priority2 = getObjectFlags(source) & getObjectFlags(target) & 32 /* Mapped */ ? 8 /* HomomorphicMappedType */ : 0; + const indexInfos = getIndexInfosOfType(target); + if (isObjectTypeWithInferableIndex(source)) { + for (const targetInfo of indexInfos) { + const propTypes = []; + for (const prop of getPropertiesOfType(source)) { + if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) { + const propType = getTypeOfSymbol(prop); + propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType); + } + } + for (const info of getIndexInfosOfType(source)) { + if (isApplicableIndexType(info.keyType, targetInfo.keyType)) { + propTypes.push(info.type); + } + } + if (propTypes.length) { + inferWithPriority(getUnionType(propTypes), targetInfo.type, priority2); + } + } + } + for (const targetInfo of indexInfos) { + const sourceInfo = getApplicableIndexInfo(source, targetInfo.keyType); + if (sourceInfo) { + inferWithPriority(sourceInfo.type, targetInfo.type, priority2); + } + } + } + } + function isTypeOrBaseIdenticalTo(s, t) { + return t === missingType ? s === t : isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */); + } + function isTypeCloselyMatchedBy(s, t) { + return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol || s.aliasSymbol && s.aliasTypeArguments && s.aliasSymbol === t.aliasSymbol); + } + function hasPrimitiveConstraint(type) { + const constraint = getConstraintOfTypeParameter(type); + return !!constraint && maybeTypeOfKind(constraint.flags & 16777216 /* Conditional */ ? getDefaultConstraintOfConditionalType(constraint) : constraint, 402784252 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */); + } + function isObjectLiteralType2(type) { + return !!(getObjectFlags(type) & 128 /* ObjectLiteral */); + } + function isObjectOrArrayLiteralType(type) { + return !!(getObjectFlags(type) & (128 /* ObjectLiteral */ | 16384 /* ArrayLiteral */)); + } + function unionObjectAndArrayLiteralCandidates(candidates) { + if (candidates.length > 1) { + const objectLiterals = filter(candidates, isObjectOrArrayLiteralType); + if (objectLiterals.length) { + const literalsType = getUnionType(objectLiterals, 2 /* Subtype */); + return concatenate(filter(candidates, (t) => !isObjectOrArrayLiteralType(t)), [literalsType]); + } + } + return candidates; + } + function getContravariantInference(inference) { + return inference.priority & 416 /* PriorityImpliesCombination */ ? getIntersectionType(inference.contraCandidates) : getCommonSubtype(inference.contraCandidates); + } + function getCovariantInference(inference, signature) { + const candidates = unionObjectAndArrayLiteralCandidates(inference.candidates); + const primitiveConstraint = hasPrimitiveConstraint(inference.typeParameter) || isConstTypeVariable(inference.typeParameter); + const widenLiteralTypes = !primitiveConstraint && inference.topLevel && (inference.isFixed || !isTypeParameterAtTopLevelInReturnType(signature, inference.typeParameter)); + const baseCandidates = primitiveConstraint ? sameMap(candidates, getRegularTypeOfLiteralType) : widenLiteralTypes ? sameMap(candidates, getWidenedLiteralType) : candidates; + const unwidenedType = inference.priority & 416 /* PriorityImpliesCombination */ ? getUnionType(baseCandidates, 2 /* Subtype */) : getCommonSupertype(baseCandidates); + return getWidenedType(unwidenedType); + } + function getInferredType(context, index) { + const inference = context.inferences[index]; + if (!inference.inferredType) { + let inferredType; + let fallbackType; + if (context.signature) { + const inferredCovariantType = inference.candidates ? getCovariantInference(inference, context.signature) : void 0; + const inferredContravariantType = inference.contraCandidates ? getContravariantInference(inference) : void 0; + if (inferredCovariantType || inferredContravariantType) { + const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & (131072 /* Never */ | 1 /* Any */)) && some(inference.contraCandidates, (t) => isTypeAssignableTo(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeAssignableTo(t, inferredCovariantType)))); + inferredType = preferCovariantType ? inferredCovariantType : inferredContravariantType; + fallbackType = preferCovariantType ? inferredContravariantType : inferredCovariantType; + } else if (context.flags & 1 /* NoDefault */) { + inferredType = silentNeverType; + } else { + const defaultType = getDefaultFromTypeParameter(inference.typeParameter); + if (defaultType) { + inferredType = instantiateType(defaultType, mergeTypeMappers(createBackreferenceMapper(context, index), context.nonFixingMapper)); + } + } + } else { + inferredType = getTypeFromInference(inference); + } + inference.inferredType = inferredType || getDefaultTypeArgumentType(!!(context.flags & 2 /* AnyDefault */)); + const constraint = getConstraintOfTypeParameter(inference.typeParameter); + if (constraint) { + const instantiatedConstraint = instantiateType(constraint, context.nonFixingMapper); + if (!inferredType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { + inference.inferredType = fallbackType && context.compareTypes(fallbackType, getTypeWithThisArgument(instantiatedConstraint, fallbackType)) ? fallbackType : instantiatedConstraint; + } + } + clearActiveMapperCaches(); + } + return inference.inferredType; + } + function getDefaultTypeArgumentType(isInJavaScriptFile) { + return isInJavaScriptFile ? anyType : unknownType; + } + function getInferredTypes(context) { + const result = []; + for (let i = 0; i < context.inferences.length; i++) { + result.push(getInferredType(context, i)); + } + return result; + } + function getCannotFindNameDiagnosticForName(node) { + switch (node.escapedText) { + case "document": + case "console": + return Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom; + case "$": + return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery; + case "describe": + case "suite": + case "it": + case "test": + return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha; + case "process": + case "require": + case "Buffer": + case "module": + return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode; + case "Bun": + return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun; + case "Map": + case "Set": + case "Promise": + case "Symbol": + case "WeakMap": + case "WeakSet": + case "Iterator": + case "AsyncIterator": + case "SharedArrayBuffer": + case "Atomics": + case "AsyncIterable": + case "AsyncIterableIterator": + case "AsyncGenerator": + case "AsyncGeneratorFunction": + case "BigInt": + case "Reflect": + case "BigInt64Array": + case "BigUint64Array": + return Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later; + case "await": + if (isCallExpression(node.parent)) { + return Diagnostics.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function; + } + // falls through + default: + if (node.parent.kind === 305 /* ShorthandPropertyAssignment */) { + return Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer; + } else { + return Diagnostics.Cannot_find_name_0; + } + } + } + function getResolvedSymbol(node) { + const links = getNodeLinks(node); + if (!links.resolvedSymbol) { + links.resolvedSymbol = !nodeIsMissing(node) && resolveName( + node, + node, + 111551 /* Value */ | 1048576 /* ExportValue */, + getCannotFindNameDiagnosticForName(node), + !isWriteOnlyAccess(node), + /*excludeGlobals*/ + false + ) || unknownSymbol; + } + return links.resolvedSymbol; + } + function isInAmbientOrTypeNode(node) { + return !!(node.flags & 33554432 /* Ambient */ || findAncestor(node, (n) => isInterfaceDeclaration(n) || isTypeAliasDeclaration(n) || isTypeLiteralNode(n))); + } + function getFlowCacheKey(node, declaredType, initialType, flowContainer) { + switch (node.kind) { + case 80 /* Identifier */: + if (!isThisInTypeQuery(node)) { + const symbol = getResolvedSymbol(node); + return symbol !== unknownSymbol ? `${flowContainer ? getNodeId(flowContainer) : "-1"}|${getTypeId(declaredType)}|${getTypeId(initialType)}|${getSymbolId(symbol)}` : void 0; + } + // falls through + case 110 /* ThisKeyword */: + return `0|${flowContainer ? getNodeId(flowContainer) : "-1"}|${getTypeId(declaredType)}|${getTypeId(initialType)}`; + case 236 /* NonNullExpression */: + case 218 /* ParenthesizedExpression */: + return getFlowCacheKey(node.expression, declaredType, initialType, flowContainer); + case 167 /* QualifiedName */: + const left = getFlowCacheKey(node.left, declaredType, initialType, flowContainer); + return left && `${left}.${node.right.escapedText}`; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + const propName = getAccessedPropertyName(node); + if (propName !== void 0) { + const key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer); + return key && `${key}.${propName}`; + } + if (isElementAccessExpression(node) && isIdentifier(node.argumentExpression)) { + const symbol = getResolvedSymbol(node.argumentExpression); + if (isConstantVariable(symbol) || isParameterOrMutableLocalVariable(symbol) && !isSymbolAssigned(symbol)) { + const key = getFlowCacheKey(node.expression, declaredType, initialType, flowContainer); + return key && `${key}.@${getSymbolId(symbol)}`; + } + } + break; + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + return `${getNodeId(node)}#${getTypeId(declaredType)}`; + } + return void 0; + } + function isMatchingReference(source, target) { + switch (target.kind) { + case 218 /* ParenthesizedExpression */: + case 236 /* NonNullExpression */: + return isMatchingReference(source, target.expression); + case 227 /* BinaryExpression */: + return isAssignmentExpression(target) && isMatchingReference(source, target.left) || isBinaryExpression(target) && target.operatorToken.kind === 28 /* CommaToken */ && isMatchingReference(source, target.right); + } + switch (source.kind) { + case 237 /* MetaProperty */: + return target.kind === 237 /* MetaProperty */ && source.keywordToken === target.keywordToken && source.name.escapedText === target.name.escapedText; + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + return isThisInTypeQuery(source) ? target.kind === 110 /* ThisKeyword */ : target.kind === 80 /* Identifier */ && getResolvedSymbol(source) === getResolvedSymbol(target) || (isVariableDeclaration(target) || isBindingElement(target)) && getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(source)) === getSymbolOfDeclaration(target); + case 110 /* ThisKeyword */: + return target.kind === 110 /* ThisKeyword */; + case 108 /* SuperKeyword */: + return target.kind === 108 /* SuperKeyword */; + case 236 /* NonNullExpression */: + case 218 /* ParenthesizedExpression */: + case 239 /* SatisfiesExpression */: + return isMatchingReference(source.expression, target); + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + const sourcePropertyName = getAccessedPropertyName(source); + if (sourcePropertyName !== void 0) { + const targetPropertyName = isAccessExpression(target) ? getAccessedPropertyName(target) : void 0; + if (targetPropertyName !== void 0) { + return targetPropertyName === sourcePropertyName && isMatchingReference(source.expression, target.expression); + } + } + if (isElementAccessExpression(source) && isElementAccessExpression(target) && isIdentifier(source.argumentExpression) && isIdentifier(target.argumentExpression)) { + const symbol = getResolvedSymbol(source.argumentExpression); + if (symbol === getResolvedSymbol(target.argumentExpression) && (isConstantVariable(symbol) || isParameterOrMutableLocalVariable(symbol) && !isSymbolAssigned(symbol))) { + return isMatchingReference(source.expression, target.expression); + } + } + break; + case 167 /* QualifiedName */: + return isAccessExpression(target) && source.right.escapedText === getAccessedPropertyName(target) && isMatchingReference(source.left, target.expression); + case 227 /* BinaryExpression */: + return isBinaryExpression(source) && source.operatorToken.kind === 28 /* CommaToken */ && isMatchingReference(source.right, target); + } + return false; + } + function getAccessedPropertyName(access) { + if (isPropertyAccessExpression(access)) { + return access.name.escapedText; + } + if (isElementAccessExpression(access)) { + return tryGetElementAccessExpressionName(access); + } + if (isBindingElement(access)) { + const name = getDestructuringPropertyName(access); + return name ? escapeLeadingUnderscores(name) : void 0; + } + if (isParameter(access)) { + return "" + access.parent.parameters.indexOf(access); + } + return void 0; + } + function tryGetNameFromType(type) { + return type.flags & 8192 /* UniqueESSymbol */ ? type.escapedName : type.flags & 384 /* StringOrNumberLiteral */ ? escapeLeadingUnderscores("" + type.value) : void 0; + } + function tryGetElementAccessExpressionName(node) { + return isStringOrNumericLiteralLike(node.argumentExpression) ? escapeLeadingUnderscores(node.argumentExpression.text) : isEntityNameExpression(node.argumentExpression) ? tryGetNameFromEntityNameExpression(node.argumentExpression) : void 0; + } + function tryGetNameFromEntityNameExpression(node) { + const symbol = resolveEntityName( + node, + 111551 /* Value */, + /*ignoreErrors*/ + true + ); + if (!symbol || !(isConstantVariable(symbol) || symbol.flags & 8 /* EnumMember */)) return void 0; + const declaration = symbol.valueDeclaration; + if (declaration === void 0) return void 0; + const type = tryGetTypeFromEffectiveTypeNode(declaration); + if (type) { + const name = tryGetNameFromType(type); + if (name !== void 0) { + return name; + } + } + if (hasOnlyExpressionInitializer(declaration) && isBlockScopedNameDeclaredBeforeUse(declaration, node)) { + const initializer = getEffectiveInitializer(declaration); + if (initializer) { + const initializerType = isBindingPattern(declaration.parent) ? getTypeForBindingElement(declaration) : getTypeOfExpression(initializer); + return initializerType && tryGetNameFromType(initializerType); + } + if (isEnumMember(declaration)) { + return getTextOfPropertyName(declaration.name); + } + } + return void 0; + } + function containsMatchingReference(source, target) { + while (isAccessExpression(source)) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; + } + } + return false; + } + function optionalChainContainsReference(source, target) { + while (isOptionalChain(source)) { + source = source.expression; + if (isMatchingReference(source, target)) { + return true; + } + } + return false; + } + function isDiscriminantProperty(type, name) { + if (type && type.flags & 1048576 /* Union */) { + const prop = getUnionOrIntersectionProperty(type, name); + if (prop && getCheckFlags(prop) & 2 /* SyntheticProperty */) { + if (prop.links.isDiscriminantProperty === void 0) { + prop.links.isDiscriminantProperty = (prop.links.checkFlags & 192 /* Discriminant */) === 192 /* Discriminant */ && !isGenericType(getTypeOfSymbol(prop)); + } + return !!prop.links.isDiscriminantProperty; + } + } + return false; + } + function findDiscriminantProperties(sourceProperties, target) { + let result; + for (const sourceProperty of sourceProperties) { + if (isDiscriminantProperty(target, sourceProperty.escapedName)) { + if (result) { + result.push(sourceProperty); + continue; + } + result = [sourceProperty]; + } + } + return result; + } + function mapTypesByKeyProperty(types, name) { + const map2 = /* @__PURE__ */ new Map(); + let count = 0; + for (const type of types) { + if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) { + const discriminant = getTypeOfPropertyOfType(type, name); + if (discriminant) { + if (!isLiteralType(discriminant)) { + return void 0; + } + let duplicate = false; + forEachType(discriminant, (t) => { + const id = getTypeId(getRegularTypeOfLiteralType(t)); + const existing = map2.get(id); + if (!existing) { + map2.set(id, type); + } else if (existing !== unknownType) { + map2.set(id, unknownType); + duplicate = true; + } + }); + if (!duplicate) count++; + } + } + } + return count >= 10 && count * 2 >= types.length ? map2 : void 0; + } + function getKeyPropertyName(unionType) { + const types = unionType.types; + if (types.length < 10 || getObjectFlags(unionType) & 32768 /* PrimitiveUnion */ || countWhere(types, (t) => !!(t.flags & (524288 /* Object */ | 58982400 /* InstantiableNonPrimitive */))) < 10) { + return void 0; + } + if (unionType.keyPropertyName === void 0) { + const keyPropertyName = forEach(types, (t) => t.flags & (524288 /* Object */ | 58982400 /* InstantiableNonPrimitive */) ? forEach(getPropertiesOfType(t), (p) => isUnitType(getTypeOfSymbol(p)) ? p.escapedName : void 0) : void 0); + const mapByKeyProperty = keyPropertyName && mapTypesByKeyProperty(types, keyPropertyName); + unionType.keyPropertyName = mapByKeyProperty ? keyPropertyName : ""; + unionType.constituentMap = mapByKeyProperty; + } + return unionType.keyPropertyName.length ? unionType.keyPropertyName : void 0; + } + function getConstituentTypeForKeyType(unionType, keyType) { + var _a; + const result = (_a = unionType.constituentMap) == null ? void 0 : _a.get(getTypeId(getRegularTypeOfLiteralType(keyType))); + return result !== unknownType ? result : void 0; + } + function getMatchingUnionConstituentForType(unionType, type) { + const keyPropertyName = getKeyPropertyName(unionType); + const propType = keyPropertyName && getTypeOfPropertyOfType(type, keyPropertyName); + return propType && getConstituentTypeForKeyType(unionType, propType); + } + function getMatchingUnionConstituentForObjectLiteral(unionType, node) { + const keyPropertyName = getKeyPropertyName(unionType); + const propNode = keyPropertyName && find(node.properties, (p) => p.symbol && p.kind === 304 /* PropertyAssignment */ && p.symbol.escapedName === keyPropertyName && isPossiblyDiscriminantValue(p.initializer)); + const propType = propNode && getContextFreeTypeOfExpression(propNode.initializer); + return propType && getConstituentTypeForKeyType(unionType, propType); + } + function isOrContainsMatchingReference(source, target) { + return isMatchingReference(source, target) || containsMatchingReference(source, target); + } + function hasMatchingArgument(expression, reference) { + if (expression.arguments) { + for (const argument of expression.arguments) { + if (isOrContainsMatchingReference(reference, argument) || optionalChainContainsReference(argument, reference)) { + return true; + } + } + } + if (expression.expression.kind === 212 /* PropertyAccessExpression */ && isOrContainsMatchingReference(reference, expression.expression.expression)) { + return true; + } + return false; + } + function getFlowNodeId(flow) { + if (flow.id <= 0) { + flow.id = nextFlowId; + nextFlowId++; + } + return flow.id; + } + function typeMaybeAssignableTo(source, target) { + if (!(source.flags & 1048576 /* Union */)) { + return isTypeAssignableTo(source, target); + } + for (const t of source.types) { + if (isTypeAssignableTo(t, target)) { + return true; + } + } + return false; + } + function getAssignmentReducedType(declaredType, assignedType) { + if (declaredType === assignedType) { + return declaredType; + } + if (assignedType.flags & 131072 /* Never */) { + return assignedType; + } + const key = `A${getTypeId(declaredType)},${getTypeId(assignedType)}`; + return getCachedType(key) ?? setCachedType(key, getAssignmentReducedTypeWorker(declaredType, assignedType)); + } + function getAssignmentReducedTypeWorker(declaredType, assignedType) { + const filteredType = filterType(declaredType, (t) => typeMaybeAssignableTo(assignedType, t)); + const reducedType = assignedType.flags & 512 /* BooleanLiteral */ && isFreshLiteralType(assignedType) ? mapType(filteredType, getFreshTypeOfLiteralType) : filteredType; + return isTypeAssignableTo(assignedType, reducedType) ? reducedType : declaredType; + } + function isFunctionObjectType(type) { + if (getObjectFlags(type) & 256 /* EvolvingArray */) { + return false; + } + const resolved = resolveStructuredTypeMembers(type); + return !!(resolved.callSignatures.length || resolved.constructSignatures.length || resolved.members.get("bind") && isTypeSubtypeOf(type, globalFunctionType)); + } + function getTypeFacts(type, mask2) { + return getTypeFactsWorker(type, mask2) & mask2; + } + function hasTypeFacts(type, mask2) { + return getTypeFacts(type, mask2) !== 0; + } + function getTypeFactsWorker(type, callerOnlyNeeds) { + if (type.flags & (2097152 /* Intersection */ | 465829888 /* Instantiable */)) { + type = getBaseConstraintOfType(type) || unknownType; + } + const flags = type.flags; + if (flags & (4 /* String */ | 268435456 /* StringMapping */)) { + return strictNullChecks ? 16317953 /* StringStrictFacts */ : 16776705 /* StringFacts */; + } + if (flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */)) { + const isEmpty = flags & 128 /* StringLiteral */ && type.value === ""; + return strictNullChecks ? isEmpty ? 12123649 /* EmptyStringStrictFacts */ : 7929345 /* NonEmptyStringStrictFacts */ : isEmpty ? 12582401 /* EmptyStringFacts */ : 16776705 /* NonEmptyStringFacts */; + } + if (flags & (8 /* Number */ | 32 /* Enum */)) { + return strictNullChecks ? 16317698 /* NumberStrictFacts */ : 16776450 /* NumberFacts */; + } + if (flags & 256 /* NumberLiteral */) { + const isZero = type.value === 0; + return strictNullChecks ? isZero ? 12123394 /* ZeroNumberStrictFacts */ : 7929090 /* NonZeroNumberStrictFacts */ : isZero ? 12582146 /* ZeroNumberFacts */ : 16776450 /* NonZeroNumberFacts */; + } + if (flags & 64 /* BigInt */) { + return strictNullChecks ? 16317188 /* BigIntStrictFacts */ : 16775940 /* BigIntFacts */; + } + if (flags & 2048 /* BigIntLiteral */) { + const isZero = isZeroBigInt(type); + return strictNullChecks ? isZero ? 12122884 /* ZeroBigIntStrictFacts */ : 7928580 /* NonZeroBigIntStrictFacts */ : isZero ? 12581636 /* ZeroBigIntFacts */ : 16775940 /* NonZeroBigIntFacts */; + } + if (flags & 16 /* Boolean */) { + return strictNullChecks ? 16316168 /* BooleanStrictFacts */ : 16774920 /* BooleanFacts */; + } + if (flags & 528 /* BooleanLike */) { + return strictNullChecks ? type === falseType || type === regularFalseType ? 12121864 /* FalseStrictFacts */ : 7927560 /* TrueStrictFacts */ : type === falseType || type === regularFalseType ? 12580616 /* FalseFacts */ : 16774920 /* TrueFacts */; + } + if (flags & 524288 /* Object */) { + const possibleFacts = strictNullChecks ? 83427327 /* EmptyObjectStrictFacts */ | 7880640 /* FunctionStrictFacts */ | 7888800 /* ObjectStrictFacts */ : 83886079 /* EmptyObjectFacts */ | 16728e3 /* FunctionFacts */ | 16736160 /* ObjectFacts */; + if ((callerOnlyNeeds & possibleFacts) === 0) { + return 0; + } + return getObjectFlags(type) & 16 /* Anonymous */ && isEmptyObjectType(type) ? strictNullChecks ? 83427327 /* EmptyObjectStrictFacts */ : 83886079 /* EmptyObjectFacts */ : isFunctionObjectType(type) ? strictNullChecks ? 7880640 /* FunctionStrictFacts */ : 16728e3 /* FunctionFacts */ : strictNullChecks ? 7888800 /* ObjectStrictFacts */ : 16736160 /* ObjectFacts */; + } + if (flags & 16384 /* Void */) { + return 9830144 /* VoidFacts */; + } + if (flags & 32768 /* Undefined */) { + return 26607360 /* UndefinedFacts */; + } + if (flags & 65536 /* Null */) { + return 42917664 /* NullFacts */; + } + if (flags & 12288 /* ESSymbolLike */) { + return strictNullChecks ? 7925520 /* SymbolStrictFacts */ : 16772880 /* SymbolFacts */; + } + if (flags & 67108864 /* NonPrimitive */) { + return strictNullChecks ? 7888800 /* ObjectStrictFacts */ : 16736160 /* ObjectFacts */; + } + if (flags & 131072 /* Never */) { + return 0 /* None */; + } + if (flags & 1048576 /* Union */) { + return reduceLeft(type.types, (facts, t) => facts | getTypeFactsWorker(t, callerOnlyNeeds), 0 /* None */); + } + if (flags & 2097152 /* Intersection */) { + return getIntersectionTypeFacts(type, callerOnlyNeeds); + } + return 83886079 /* UnknownFacts */; + } + function getIntersectionTypeFacts(type, callerOnlyNeeds) { + const ignoreObjects = maybeTypeOfKind(type, 402784252 /* Primitive */); + let oredFacts = 0 /* None */; + let andedFacts = 134217727 /* All */; + for (const t of type.types) { + if (!(ignoreObjects && t.flags & 524288 /* Object */)) { + const f = getTypeFactsWorker(t, callerOnlyNeeds); + oredFacts |= f; + andedFacts &= f; + } + } + return oredFacts & 8256 /* OrFactsMask */ | andedFacts & 134209471 /* AndFactsMask */; + } + function getTypeWithFacts(type, include) { + return filterType(type, (t) => hasTypeFacts(t, include)); + } + function getAdjustedTypeWithFacts(type, facts) { + const reduced = recombineUnknownType(getTypeWithFacts(strictNullChecks && type.flags & 2 /* Unknown */ ? unknownUnionType : type, facts)); + if (strictNullChecks) { + switch (facts) { + case 524288 /* NEUndefined */: + return removeNullableByIntersection(reduced, 65536 /* EQUndefined */, 131072 /* EQNull */, 33554432 /* IsNull */, nullType); + case 1048576 /* NENull */: + return removeNullableByIntersection(reduced, 131072 /* EQNull */, 65536 /* EQUndefined */, 16777216 /* IsUndefined */, undefinedType); + case 2097152 /* NEUndefinedOrNull */: + case 4194304 /* Truthy */: + return mapType(reduced, (t) => hasTypeFacts(t, 262144 /* EQUndefinedOrNull */) ? getGlobalNonNullableTypeInstantiation(t) : t); + } + } + return reduced; + } + function removeNullableByIntersection(type, targetFacts, otherFacts, otherIncludesFacts, otherType) { + const facts = getTypeFacts(type, 65536 /* EQUndefined */ | 131072 /* EQNull */ | 16777216 /* IsUndefined */ | 33554432 /* IsNull */); + if (!(facts & targetFacts)) { + return type; + } + const emptyAndOtherUnion = getUnionType([emptyObjectType, otherType]); + return mapType(type, (t) => hasTypeFacts(t, targetFacts) ? getIntersectionType([t, !(facts & otherIncludesFacts) && hasTypeFacts(t, otherFacts) ? emptyAndOtherUnion : emptyObjectType]) : t); + } + function recombineUnknownType(type) { + return type === unknownUnionType ? unknownType : type; + } + function getTypeWithDefault(type, defaultExpression) { + return defaultExpression ? getUnionType([getNonUndefinedType(type), getTypeOfExpression(defaultExpression)]) : type; + } + function getTypeOfDestructuredProperty(type, name) { + var _a; + const nameType = getLiteralTypeFromPropertyName(name); + if (!isTypeUsableAsPropertyName(nameType)) return errorType; + const text = getPropertyNameFromType(nameType); + return getTypeOfPropertyOfType(type, text) || includeUndefinedInIndexSignature((_a = getApplicableIndexInfoForName(type, text)) == null ? void 0 : _a.type) || errorType; + } + function getTypeOfDestructuredArrayElement(type, index) { + return everyType(type, isTupleLikeType) && getTupleElementType(type, index) || includeUndefinedInIndexSignature(checkIteratedTypeOrElementType( + 65 /* Destructuring */, + type, + undefinedType, + /*errorNode*/ + void 0 + )) || errorType; + } + function includeUndefinedInIndexSignature(type) { + if (!type) return type; + return compilerOptions.noUncheckedIndexedAccess ? getUnionType([type, missingType]) : type; + } + function getTypeOfDestructuredSpreadExpression(type) { + return createArrayType(checkIteratedTypeOrElementType( + 65 /* Destructuring */, + type, + undefinedType, + /*errorNode*/ + void 0 + ) || errorType); + } + function getAssignedTypeOfBinaryExpression(node) { + const isDestructuringDefaultAssignment = node.parent.kind === 210 /* ArrayLiteralExpression */ && isDestructuringAssignmentTarget(node.parent) || node.parent.kind === 304 /* PropertyAssignment */ && isDestructuringAssignmentTarget(node.parent.parent); + return isDestructuringDefaultAssignment ? getTypeWithDefault(getAssignedType(node), node.right) : getTypeOfExpression(node.right); + } + function isDestructuringAssignmentTarget(parent2) { + return parent2.parent.kind === 227 /* BinaryExpression */ && parent2.parent.left === parent2 || parent2.parent.kind === 251 /* ForOfStatement */ && parent2.parent.initializer === parent2; + } + function getAssignedTypeOfArrayLiteralElement(node, element) { + return getTypeOfDestructuredArrayElement(getAssignedType(node), node.elements.indexOf(element)); + } + function getAssignedTypeOfSpreadExpression(node) { + return getTypeOfDestructuredSpreadExpression(getAssignedType(node.parent)); + } + function getAssignedTypeOfPropertyAssignment(node) { + return getTypeOfDestructuredProperty(getAssignedType(node.parent), node.name); + } + function getAssignedTypeOfShorthandPropertyAssignment(node) { + return getTypeWithDefault(getAssignedTypeOfPropertyAssignment(node), node.objectAssignmentInitializer); + } + function getAssignedType(node) { + const { parent: parent2 } = node; + switch (parent2.kind) { + case 250 /* ForInStatement */: + return stringType; + case 251 /* ForOfStatement */: + return checkRightHandSideOfForOf(parent2) || errorType; + case 227 /* BinaryExpression */: + return getAssignedTypeOfBinaryExpression(parent2); + case 221 /* DeleteExpression */: + return undefinedType; + case 210 /* ArrayLiteralExpression */: + return getAssignedTypeOfArrayLiteralElement(parent2, node); + case 231 /* SpreadElement */: + return getAssignedTypeOfSpreadExpression(parent2); + case 304 /* PropertyAssignment */: + return getAssignedTypeOfPropertyAssignment(parent2); + case 305 /* ShorthandPropertyAssignment */: + return getAssignedTypeOfShorthandPropertyAssignment(parent2); + } + return errorType; + } + function getInitialTypeOfBindingElement(node) { + const pattern = node.parent; + const parentType = getInitialType(pattern.parent); + const type = pattern.kind === 207 /* ObjectBindingPattern */ ? getTypeOfDestructuredProperty(parentType, node.propertyName || node.name) : !node.dotDotDotToken ? getTypeOfDestructuredArrayElement(parentType, pattern.elements.indexOf(node)) : getTypeOfDestructuredSpreadExpression(parentType); + return getTypeWithDefault(type, node.initializer); + } + function getTypeOfInitializer(node) { + const links = getNodeLinks(node); + return links.resolvedType || getTypeOfExpression(node); + } + function getInitialTypeOfVariableDeclaration(node) { + if (node.initializer) { + return getTypeOfInitializer(node.initializer); + } + if (node.parent.parent.kind === 250 /* ForInStatement */) { + return stringType; + } + if (node.parent.parent.kind === 251 /* ForOfStatement */) { + return checkRightHandSideOfForOf(node.parent.parent) || errorType; + } + return errorType; + } + function getInitialType(node) { + return node.kind === 261 /* VariableDeclaration */ ? getInitialTypeOfVariableDeclaration(node) : getInitialTypeOfBindingElement(node); + } + function isEmptyArrayAssignment(node) { + return node.kind === 261 /* VariableDeclaration */ && node.initializer && isEmptyArrayLiteral2(node.initializer) || node.kind !== 209 /* BindingElement */ && node.parent.kind === 227 /* BinaryExpression */ && isEmptyArrayLiteral2(node.parent.right); + } + function getReferenceCandidate(node) { + switch (node.kind) { + case 218 /* ParenthesizedExpression */: + return getReferenceCandidate(node.expression); + case 227 /* BinaryExpression */: + switch (node.operatorToken.kind) { + case 64 /* EqualsToken */: + case 76 /* BarBarEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return getReferenceCandidate(node.left); + case 28 /* CommaToken */: + return getReferenceCandidate(node.right); + } + } + return node; + } + function getReferenceRoot(node) { + const { parent: parent2 } = node; + return parent2.kind === 218 /* ParenthesizedExpression */ || parent2.kind === 227 /* BinaryExpression */ && parent2.operatorToken.kind === 64 /* EqualsToken */ && parent2.left === node || parent2.kind === 227 /* BinaryExpression */ && parent2.operatorToken.kind === 28 /* CommaToken */ && parent2.right === node ? getReferenceRoot(parent2) : node; + } + function getTypeOfSwitchClause(clause) { + if (clause.kind === 297 /* CaseClause */) { + return getRegularTypeOfLiteralType(getTypeOfExpression(clause.expression)); + } + return neverType; + } + function getSwitchClauseTypes(switchStatement) { + const links = getNodeLinks(switchStatement); + if (!links.switchTypes) { + links.switchTypes = []; + for (const clause of switchStatement.caseBlock.clauses) { + links.switchTypes.push(getTypeOfSwitchClause(clause)); + } + } + return links.switchTypes; + } + function getSwitchClauseTypeOfWitnesses(switchStatement) { + if (some(switchStatement.caseBlock.clauses, (clause) => clause.kind === 297 /* CaseClause */ && !isStringLiteralLike(clause.expression))) { + return void 0; + } + const witnesses = []; + for (const clause of switchStatement.caseBlock.clauses) { + const text = clause.kind === 297 /* CaseClause */ ? clause.expression.text : void 0; + witnesses.push(text && !contains(witnesses, text) ? text : void 0); + } + return witnesses; + } + function eachTypeContainedIn(source, types) { + return source.flags & 1048576 /* Union */ ? !forEach(source.types, (t) => !contains(types, t)) : contains(types, source); + } + function isTypeSubsetOf(source, target) { + return !!(source === target || source.flags & 131072 /* Never */ || target.flags & 1048576 /* Union */ && isTypeSubsetOfUnion(source, target)); + } + function isTypeSubsetOfUnion(source, target) { + if (source.flags & 1048576 /* Union */) { + for (const t of source.types) { + if (!containsType(target.types, t)) { + return false; + } + } + return true; + } + if (source.flags & 1056 /* EnumLike */ && getBaseTypeOfEnumLikeType(source) === target) { + return true; + } + return containsType(target.types, source); + } + function forEachType(type, f) { + return type.flags & 1048576 /* Union */ ? forEach(type.types, f) : f(type); + } + function someType(type, f) { + return type.flags & 1048576 /* Union */ ? some(type.types, f) : f(type); + } + function everyType(type, f) { + return type.flags & 1048576 /* Union */ ? every(type.types, f) : f(type); + } + function everyContainedType(type, f) { + return type.flags & 3145728 /* UnionOrIntersection */ ? every(type.types, f) : f(type); + } + function filterType(type, f) { + if (type.flags & 1048576 /* Union */) { + const types = type.types; + const filtered = filter(types, f); + if (filtered === types) { + return type; + } + const origin = type.origin; + let newOrigin; + if (origin && origin.flags & 1048576 /* Union */) { + const originTypes = origin.types; + const originFiltered = filter(originTypes, (t) => !!(t.flags & 1048576 /* Union */) || f(t)); + if (originTypes.length - originFiltered.length === types.length - filtered.length) { + if (originFiltered.length === 1) { + return originFiltered[0]; + } + newOrigin = createOriginUnionOrIntersectionType(1048576 /* Union */, originFiltered); + } + } + return getUnionTypeFromSortedList( + filtered, + type.objectFlags & (32768 /* PrimitiveUnion */ | 16777216 /* ContainsIntersections */), + /*aliasSymbol*/ + void 0, + /*aliasTypeArguments*/ + void 0, + newOrigin + ); + } + return type.flags & 131072 /* Never */ || f(type) ? type : neverType; + } + function removeType(type, targetType) { + return filterType(type, (t) => t !== targetType); + } + function countTypes(type) { + return type.flags & 1048576 /* Union */ ? type.types.length : 1; + } + function mapType(type, mapper, noReductions) { + if (type.flags & 131072 /* Never */) { + return type; + } + if (!(type.flags & 1048576 /* Union */)) { + return mapper(type); + } + const origin = type.origin; + const types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types; + let mappedTypes; + let changed = false; + for (const t of types) { + const mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t); + changed || (changed = t !== mapped); + if (mapped) { + if (!mappedTypes) { + mappedTypes = [mapped]; + } else { + mappedTypes.push(mapped); + } + } + } + return changed ? mappedTypes && getUnionType(mappedTypes, noReductions ? 0 /* None */ : 1 /* Literal */) : type; + } + function mapTypeWithAlias(type, mapper, aliasSymbol, aliasTypeArguments) { + return type.flags & 1048576 /* Union */ && aliasSymbol ? getUnionType(map(type.types, mapper), 1 /* Literal */, aliasSymbol, aliasTypeArguments) : mapType(type, mapper); + } + function extractTypesOfKind(type, kind) { + return filterType(type, (t) => (t.flags & kind) !== 0); + } + function replacePrimitivesWithLiterals(typeWithPrimitives, typeWithLiterals) { + if (maybeTypeOfKind(typeWithPrimitives, 4 /* String */ | 134217728 /* TemplateLiteral */ | 8 /* Number */ | 64 /* BigInt */) && maybeTypeOfKind(typeWithLiterals, 128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */ | 256 /* NumberLiteral */ | 2048 /* BigIntLiteral */)) { + return mapType(typeWithPrimitives, (t) => t.flags & 4 /* String */ ? extractTypesOfKind(typeWithLiterals, 4 /* String */ | 128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) : isPatternLiteralType(t) && !maybeTypeOfKind(typeWithLiterals, 4 /* String */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) ? extractTypesOfKind(typeWithLiterals, 128 /* StringLiteral */) : t.flags & 8 /* Number */ ? extractTypesOfKind(typeWithLiterals, 8 /* Number */ | 256 /* NumberLiteral */) : t.flags & 64 /* BigInt */ ? extractTypesOfKind(typeWithLiterals, 64 /* BigInt */ | 2048 /* BigIntLiteral */) : t); + } + return typeWithPrimitives; + } + function isIncomplete(flowType) { + return flowType.flags === 0; + } + function getTypeFromFlowType(flowType) { + return flowType.flags === 0 ? flowType.type : flowType; + } + function createFlowType(type, incomplete) { + return incomplete ? { flags: 0, type: type.flags & 131072 /* Never */ ? silentNeverType : type } : type; + } + function createEvolvingArrayType(elementType) { + const result = createObjectType(256 /* EvolvingArray */); + result.elementType = elementType; + return result; + } + function getEvolvingArrayType(elementType) { + return evolvingArrayTypes[elementType.id] || (evolvingArrayTypes[elementType.id] = createEvolvingArrayType(elementType)); + } + function addEvolvingArrayElementType(evolvingArrayType, node) { + const elementType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(getContextFreeTypeOfExpression(node))); + return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType])); + } + function createFinalArrayType(elementType) { + return elementType.flags & 131072 /* Never */ ? autoArrayType : createArrayType( + elementType.flags & 1048576 /* Union */ ? getUnionType(elementType.types, 2 /* Subtype */) : elementType + ); + } + function getFinalArrayType(evolvingArrayType) { + return evolvingArrayType.finalArrayType || (evolvingArrayType.finalArrayType = createFinalArrayType(evolvingArrayType.elementType)); + } + function finalizeEvolvingArrayType(type) { + return getObjectFlags(type) & 256 /* EvolvingArray */ ? getFinalArrayType(type) : type; + } + function getElementTypeOfEvolvingArrayType(type) { + return getObjectFlags(type) & 256 /* EvolvingArray */ ? type.elementType : neverType; + } + function isEvolvingArrayTypeList(types) { + let hasEvolvingArrayType = false; + for (const t of types) { + if (!(t.flags & 131072 /* Never */)) { + if (!(getObjectFlags(t) & 256 /* EvolvingArray */)) { + return false; + } + hasEvolvingArrayType = true; + } + } + return hasEvolvingArrayType; + } + function isEvolvingArrayOperationTarget(node) { + const root = getReferenceRoot(node); + const parent2 = root.parent; + const isLengthPushOrUnshift = isPropertyAccessExpression(parent2) && (parent2.name.escapedText === "length" || parent2.parent.kind === 214 /* CallExpression */ && isIdentifier(parent2.name) && isPushOrUnshiftIdentifier(parent2.name)); + const isElementAssignment = parent2.kind === 213 /* ElementAccessExpression */ && parent2.expression === root && parent2.parent.kind === 227 /* BinaryExpression */ && parent2.parent.operatorToken.kind === 64 /* EqualsToken */ && parent2.parent.left === parent2 && !isAssignmentTarget(parent2.parent) && isTypeAssignableToKind(getTypeOfExpression(parent2.argumentExpression), 296 /* NumberLike */); + return isLengthPushOrUnshift || isElementAssignment; + } + function isDeclarationWithExplicitTypeAnnotation(node) { + return (isVariableDeclaration(node) || isPropertyDeclaration(node) || isPropertySignature(node) || isParameter(node)) && !!(getEffectiveTypeAnnotationNode(node) || isInJSFile(node) && hasInitializer(node) && node.initializer && isFunctionExpressionOrArrowFunction(node.initializer) && getEffectiveReturnTypeNode(node.initializer)); + } + function getExplicitTypeOfSymbol(symbol, diagnostic) { + symbol = resolveSymbol(symbol); + if (symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 512 /* ValueModule */)) { + return getTypeOfSymbol(symbol); + } + if (symbol.flags & (3 /* Variable */ | 4 /* Property */)) { + if (getCheckFlags(symbol) & 262144 /* Mapped */) { + const origin = symbol.links.syntheticOrigin; + if (origin && getExplicitTypeOfSymbol(origin)) { + return getTypeOfSymbol(symbol); + } + } + const declaration = symbol.valueDeclaration; + if (declaration) { + if (isDeclarationWithExplicitTypeAnnotation(declaration)) { + return getTypeOfSymbol(symbol); + } + if (isVariableDeclaration(declaration) && declaration.parent.parent.kind === 251 /* ForOfStatement */) { + const statement = declaration.parent.parent; + const expressionType = getTypeOfDottedName( + statement.expression, + /*diagnostic*/ + void 0 + ); + if (expressionType) { + const use = statement.awaitModifier ? 15 /* ForAwaitOf */ : 13 /* ForOf */; + return checkIteratedTypeOrElementType( + use, + expressionType, + undefinedType, + /*errorNode*/ + void 0 + ); + } + } + if (diagnostic) { + addRelatedInfo(diagnostic, createDiagnosticForNode(declaration, Diagnostics._0_needs_an_explicit_type_annotation, symbolToString(symbol))); + } + } + } + } + function getTypeOfDottedName(node, diagnostic) { + if (!(node.flags & 67108864 /* InWithStatement */)) { + switch (node.kind) { + case 80 /* Identifier */: + const symbol = getExportSymbolOfValueSymbolIfExported(getResolvedSymbol(node)); + return getExplicitTypeOfSymbol(symbol, diagnostic); + case 110 /* ThisKeyword */: + return getExplicitThisType(node); + case 108 /* SuperKeyword */: + return checkSuperExpression(node); + case 212 /* PropertyAccessExpression */: { + const type = getTypeOfDottedName(node.expression, diagnostic); + if (type) { + const name = node.name; + let prop; + if (isPrivateIdentifier(name)) { + if (!type.symbol) { + return void 0; + } + prop = getPropertyOfType(type, getSymbolNameForPrivateIdentifier(type.symbol, name.escapedText)); + } else { + prop = getPropertyOfType(type, name.escapedText); + } + return prop && getExplicitTypeOfSymbol(prop, diagnostic); + } + return void 0; + } + case 218 /* ParenthesizedExpression */: + return getTypeOfDottedName(node.expression, diagnostic); + } + } + } + function getEffectsSignature(node) { + const links = getNodeLinks(node); + let signature = links.effectsSignature; + if (signature === void 0) { + let funcType; + if (isBinaryExpression(node)) { + const rightType = checkNonNullExpression(node.right); + funcType = getSymbolHasInstanceMethodOfObjectType(rightType); + } else if (node.parent.kind === 245 /* ExpressionStatement */) { + funcType = getTypeOfDottedName( + node.expression, + /*diagnostic*/ + void 0 + ); + } else if (node.expression.kind !== 108 /* SuperKeyword */) { + if (isOptionalChain(node)) { + funcType = checkNonNullType( + getOptionalExpressionType(checkExpression(node.expression), node.expression), + node.expression + ); + } else { + funcType = checkNonNullExpression(node.expression); + } + } + const signatures = getSignaturesOfType(funcType && getApparentType(funcType) || unknownType, 0 /* Call */); + const candidate = signatures.length === 1 && !signatures[0].typeParameters ? signatures[0] : some(signatures, hasTypePredicateOrNeverReturnType) ? getResolvedSignature(node) : void 0; + signature = links.effectsSignature = candidate && hasTypePredicateOrNeverReturnType(candidate) ? candidate : unknownSignature; + } + return signature === unknownSignature ? void 0 : signature; + } + function hasTypePredicateOrNeverReturnType(signature) { + return !!(getTypePredicateOfSignature(signature) || signature.declaration && (getReturnTypeFromAnnotation(signature.declaration) || unknownType).flags & 131072 /* Never */); + } + function getTypePredicateArgument(predicate, callExpression) { + if (predicate.kind === 1 /* Identifier */ || predicate.kind === 3 /* AssertsIdentifier */) { + return callExpression.arguments[predicate.parameterIndex]; + } + const invokedExpression = skipParentheses(callExpression.expression); + return isAccessExpression(invokedExpression) ? skipParentheses(invokedExpression.expression) : void 0; + } + function reportFlowControlError(node) { + const block = findAncestor(node, isFunctionOrModuleBlock); + const sourceFile = getSourceFileOfNode(node); + const span = getSpanOfTokenAtPosition(sourceFile, block.statements.pos); + diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.The_containing_function_or_module_body_is_too_large_for_control_flow_analysis)); + } + function isReachableFlowNode(flow) { + const result = isReachableFlowNodeWorker( + flow, + /*noCacheCheck*/ + false + ); + lastFlowNode = flow; + lastFlowNodeReachable = result; + return result; + } + function isFalseExpression(expr) { + const node = skipParentheses( + expr, + /*excludeJSDocTypeAssertions*/ + true + ); + return node.kind === 97 /* FalseKeyword */ || node.kind === 227 /* BinaryExpression */ && (node.operatorToken.kind === 56 /* AmpersandAmpersandToken */ && (isFalseExpression(node.left) || isFalseExpression(node.right)) || node.operatorToken.kind === 57 /* BarBarToken */ && isFalseExpression(node.left) && isFalseExpression(node.right)); + } + function isReachableFlowNodeWorker(flow, noCacheCheck) { + while (true) { + if (flow === lastFlowNode) { + return lastFlowNodeReachable; + } + const flags = flow.flags; + if (flags & 4096 /* Shared */) { + if (!noCacheCheck) { + const id = getFlowNodeId(flow); + const reachable = flowNodeReachable[id]; + return reachable !== void 0 ? reachable : flowNodeReachable[id] = isReachableFlowNodeWorker( + flow, + /*noCacheCheck*/ + true + ); + } + noCacheCheck = false; + } + if (flags & (16 /* Assignment */ | 96 /* Condition */ | 256 /* ArrayMutation */)) { + flow = flow.antecedent; + } else if (flags & 512 /* Call */) { + const signature = getEffectsSignature(flow.node); + if (signature) { + const predicate = getTypePredicateOfSignature(signature); + if (predicate && predicate.kind === 3 /* AssertsIdentifier */ && !predicate.type) { + const predicateArgument = flow.node.arguments[predicate.parameterIndex]; + if (predicateArgument && isFalseExpression(predicateArgument)) { + return false; + } + } + if (getReturnTypeOfSignature(signature).flags & 131072 /* Never */) { + return false; + } + } + flow = flow.antecedent; + } else if (flags & 4 /* BranchLabel */) { + return some(flow.antecedent, (f) => isReachableFlowNodeWorker( + f, + /*noCacheCheck*/ + false + )); + } else if (flags & 8 /* LoopLabel */) { + const antecedents = flow.antecedent; + if (antecedents === void 0 || antecedents.length === 0) { + return false; + } + flow = antecedents[0]; + } else if (flags & 128 /* SwitchClause */) { + const data = flow.node; + if (data.clauseStart === data.clauseEnd && isExhaustiveSwitchStatement(data.switchStatement)) { + return false; + } + flow = flow.antecedent; + } else if (flags & 1024 /* ReduceLabel */) { + lastFlowNode = void 0; + const target = flow.node.target; + const saveAntecedents = target.antecedent; + target.antecedent = flow.node.antecedents; + const result = isReachableFlowNodeWorker( + flow.antecedent, + /*noCacheCheck*/ + false + ); + target.antecedent = saveAntecedents; + return result; + } else { + return !(flags & 1 /* Unreachable */); + } + } + } + function isPostSuperFlowNode(flow, noCacheCheck) { + while (true) { + const flags = flow.flags; + if (flags & 4096 /* Shared */) { + if (!noCacheCheck) { + const id = getFlowNodeId(flow); + const postSuper = flowNodePostSuper[id]; + return postSuper !== void 0 ? postSuper : flowNodePostSuper[id] = isPostSuperFlowNode( + flow, + /*noCacheCheck*/ + true + ); + } + noCacheCheck = false; + } + if (flags & (16 /* Assignment */ | 96 /* Condition */ | 256 /* ArrayMutation */ | 128 /* SwitchClause */)) { + flow = flow.antecedent; + } else if (flags & 512 /* Call */) { + if (flow.node.expression.kind === 108 /* SuperKeyword */) { + return true; + } + flow = flow.antecedent; + } else if (flags & 4 /* BranchLabel */) { + return every(flow.antecedent, (f) => isPostSuperFlowNode( + f, + /*noCacheCheck*/ + false + )); + } else if (flags & 8 /* LoopLabel */) { + flow = flow.antecedent[0]; + } else if (flags & 1024 /* ReduceLabel */) { + const target = flow.node.target; + const saveAntecedents = target.antecedent; + target.antecedent = flow.node.antecedents; + const result = isPostSuperFlowNode( + flow.antecedent, + /*noCacheCheck*/ + false + ); + target.antecedent = saveAntecedents; + return result; + } else { + return !!(flags & 1 /* Unreachable */); + } + } + } + function isConstantReference(node) { + switch (node.kind) { + case 110 /* ThisKeyword */: + return true; + case 80 /* Identifier */: + if (!isThisInTypeQuery(node)) { + const symbol = getResolvedSymbol(node); + return isConstantVariable(symbol) || isParameterOrMutableLocalVariable(symbol) && !isSymbolAssigned(symbol) || !!symbol.valueDeclaration && isFunctionExpression(symbol.valueDeclaration); + } + break; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return isConstantReference(node.expression) && isReadonlySymbol(getNodeLinks(node).resolvedSymbol || unknownSymbol); + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + const rootDeclaration = getRootDeclaration(node.parent); + return isParameter(rootDeclaration) || isCatchClauseVariableDeclaration(rootDeclaration) ? !isSomeSymbolAssigned(rootDeclaration) : isVariableDeclaration(rootDeclaration) && isVarConstLike2(rootDeclaration); + } + return false; + } + function getFlowTypeOfReference(reference, declaredType, initialType = declaredType, flowContainer, flowNode = ((_a) => (_a = tryCast(reference, canHaveFlowNode)) == null ? void 0 : _a.flowNode)()) { + let key; + let isKeySet = false; + let flowDepth = 0; + if (flowAnalysisDisabled) { + return errorType; + } + if (!flowNode) { + return declaredType; + } + flowInvocationCount++; + const sharedFlowStart = sharedFlowCount; + const evolvedType = getTypeFromFlowType(getTypeAtFlowNode(flowNode)); + sharedFlowCount = sharedFlowStart; + const resultType = getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType); + if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 236 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) { + return declaredType; + } + return resultType; + function getOrSetCacheKey() { + if (isKeySet) { + return key; + } + isKeySet = true; + return key = getFlowCacheKey(reference, declaredType, initialType, flowContainer); + } + function getTypeAtFlowNode(flow) { + var _a2; + if (flowDepth === 2e3) { + (_a2 = tracing) == null ? void 0 : _a2.instant(tracing.Phase.CheckTypes, "getTypeAtFlowNode_DepthLimit", { flowId: flow.id }); + flowAnalysisDisabled = true; + reportFlowControlError(reference); + return errorType; + } + flowDepth++; + let sharedFlow; + while (true) { + const flags = flow.flags; + if (flags & 4096 /* Shared */) { + for (let i = sharedFlowStart; i < sharedFlowCount; i++) { + if (sharedFlowNodes[i] === flow) { + flowDepth--; + return sharedFlowTypes[i]; + } + } + sharedFlow = flow; + } + let type; + if (flags & 16 /* Assignment */) { + type = getTypeAtFlowAssignment(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } else if (flags & 512 /* Call */) { + type = getTypeAtFlowCall(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } else if (flags & 96 /* Condition */) { + type = getTypeAtFlowCondition(flow); + } else if (flags & 128 /* SwitchClause */) { + type = getTypeAtSwitchClause(flow); + } else if (flags & 12 /* Label */) { + if (flow.antecedent.length === 1) { + flow = flow.antecedent[0]; + continue; + } + type = flags & 4 /* BranchLabel */ ? getTypeAtFlowBranchLabel(flow) : getTypeAtFlowLoopLabel(flow); + } else if (flags & 256 /* ArrayMutation */) { + type = getTypeAtFlowArrayMutation(flow); + if (!type) { + flow = flow.antecedent; + continue; + } + } else if (flags & 1024 /* ReduceLabel */) { + const target = flow.node.target; + const saveAntecedents = target.antecedent; + target.antecedent = flow.node.antecedents; + type = getTypeAtFlowNode(flow.antecedent); + target.antecedent = saveAntecedents; + } else if (flags & 2 /* Start */) { + const container = flow.node; + if (container && container !== flowContainer && reference.kind !== 212 /* PropertyAccessExpression */ && reference.kind !== 213 /* ElementAccessExpression */ && !(reference.kind === 110 /* ThisKeyword */ && container.kind !== 220 /* ArrowFunction */)) { + flow = container.flowNode; + continue; + } + type = initialType; + } else { + type = convertAutoToAny(declaredType); + } + if (sharedFlow) { + sharedFlowNodes[sharedFlowCount] = sharedFlow; + sharedFlowTypes[sharedFlowCount] = type; + sharedFlowCount++; + } + flowDepth--; + return type; + } + } + function getInitialOrAssignedType(flow) { + const node = flow.node; + return getNarrowableTypeForReference( + node.kind === 261 /* VariableDeclaration */ || node.kind === 209 /* BindingElement */ ? getInitialType(node) : getAssignedType(node), + reference + ); + } + function getTypeAtFlowAssignment(flow) { + const node = flow.node; + if (isMatchingReference(reference, node)) { + if (!isReachableFlowNode(flow)) { + return unreachableNeverType; + } + if (getAssignmentTargetKind(node) === 2 /* Compound */) { + const flowType = getTypeAtFlowNode(flow.antecedent); + return createFlowType(getBaseTypeOfLiteralType(getTypeFromFlowType(flowType)), isIncomplete(flowType)); + } + if (declaredType === autoType || declaredType === autoArrayType) { + if (isEmptyArrayAssignment(node)) { + return getEvolvingArrayType(neverType); + } + const assignedType = getWidenedLiteralType(getInitialOrAssignedType(flow)); + return isTypeAssignableTo(assignedType, declaredType) ? assignedType : anyArrayType; + } + const t = isInCompoundLikeAssignment(node) ? getBaseTypeOfLiteralType(declaredType) : declaredType; + if (t.flags & 1048576 /* Union */) { + return getAssignmentReducedType(t, getInitialOrAssignedType(flow)); + } + return t; + } + if (containsMatchingReference(reference, node)) { + if (!isReachableFlowNode(flow)) { + return unreachableNeverType; + } + if (isVariableDeclaration(node) && (isInJSFile(node) || isVarConstLike2(node))) { + const init = getDeclaredExpandoInitializer(node); + if (init && (init.kind === 219 /* FunctionExpression */ || init.kind === 220 /* ArrowFunction */)) { + return getTypeAtFlowNode(flow.antecedent); + } + } + return declaredType; + } + if (isVariableDeclaration(node) && node.parent.parent.kind === 250 /* ForInStatement */ && (isMatchingReference(reference, node.parent.parent.expression) || optionalChainContainsReference(node.parent.parent.expression, reference))) { + return getNonNullableTypeIfNeeded(finalizeEvolvingArrayType(getTypeFromFlowType(getTypeAtFlowNode(flow.antecedent)))); + } + return void 0; + } + function narrowTypeByAssertion(type, expr) { + const node = skipParentheses( + expr, + /*excludeJSDocTypeAssertions*/ + true + ); + if (node.kind === 97 /* FalseKeyword */) { + return unreachableNeverType; + } + if (node.kind === 227 /* BinaryExpression */) { + if (node.operatorToken.kind === 56 /* AmpersandAmpersandToken */) { + return narrowTypeByAssertion(narrowTypeByAssertion(type, node.left), node.right); + } + if (node.operatorToken.kind === 57 /* BarBarToken */) { + return getUnionType([narrowTypeByAssertion(type, node.left), narrowTypeByAssertion(type, node.right)]); + } + } + return narrowType( + type, + node, + /*assumeTrue*/ + true + ); + } + function getTypeAtFlowCall(flow) { + const signature = getEffectsSignature(flow.node); + if (signature) { + const predicate = getTypePredicateOfSignature(signature); + if (predicate && (predicate.kind === 2 /* AssertsThis */ || predicate.kind === 3 /* AssertsIdentifier */)) { + const flowType = getTypeAtFlowNode(flow.antecedent); + const type = finalizeEvolvingArrayType(getTypeFromFlowType(flowType)); + const narrowedType = predicate.type ? narrowTypeByTypePredicate( + type, + predicate, + flow.node, + /*assumeTrue*/ + true + ) : predicate.kind === 3 /* AssertsIdentifier */ && predicate.parameterIndex >= 0 && predicate.parameterIndex < flow.node.arguments.length ? narrowTypeByAssertion(type, flow.node.arguments[predicate.parameterIndex]) : type; + return narrowedType === type ? flowType : createFlowType(narrowedType, isIncomplete(flowType)); + } + if (getReturnTypeOfSignature(signature).flags & 131072 /* Never */) { + return unreachableNeverType; + } + } + return void 0; + } + function getTypeAtFlowArrayMutation(flow) { + if (declaredType === autoType || declaredType === autoArrayType) { + const node = flow.node; + const expr = node.kind === 214 /* CallExpression */ ? node.expression.expression : node.left.expression; + if (isMatchingReference(reference, getReferenceCandidate(expr))) { + const flowType = getTypeAtFlowNode(flow.antecedent); + const type = getTypeFromFlowType(flowType); + if (getObjectFlags(type) & 256 /* EvolvingArray */) { + let evolvedType2 = type; + if (node.kind === 214 /* CallExpression */) { + for (const arg of node.arguments) { + evolvedType2 = addEvolvingArrayElementType(evolvedType2, arg); + } + } else { + const indexType = getContextFreeTypeOfExpression(node.left.argumentExpression); + if (isTypeAssignableToKind(indexType, 296 /* NumberLike */)) { + evolvedType2 = addEvolvingArrayElementType(evolvedType2, node.right); + } + } + return evolvedType2 === type ? flowType : createFlowType(evolvedType2, isIncomplete(flowType)); + } + return flowType; + } + } + return void 0; + } + function getTypeAtFlowCondition(flow) { + const flowType = getTypeAtFlowNode(flow.antecedent); + const type = getTypeFromFlowType(flowType); + if (type.flags & 131072 /* Never */) { + return flowType; + } + const assumeTrue = (flow.flags & 32 /* TrueCondition */) !== 0; + const nonEvolvingType = finalizeEvolvingArrayType(type); + const narrowedType = narrowType(nonEvolvingType, flow.node, assumeTrue); + if (narrowedType === nonEvolvingType) { + return flowType; + } + return createFlowType(narrowedType, isIncomplete(flowType)); + } + function getTypeAtSwitchClause(flow) { + const expr = skipParentheses(flow.node.switchStatement.expression); + const flowType = getTypeAtFlowNode(flow.antecedent); + let type = getTypeFromFlowType(flowType); + if (isMatchingReference(reference, expr)) { + type = narrowTypeBySwitchOnDiscriminant(type, flow.node); + } else if (expr.kind === 222 /* TypeOfExpression */ && isMatchingReference(reference, expr.expression)) { + type = narrowTypeBySwitchOnTypeOf(type, flow.node); + } else if (expr.kind === 112 /* TrueKeyword */) { + type = narrowTypeBySwitchOnTrue(type, flow.node); + } else { + if (strictNullChecks) { + if (optionalChainContainsReference(expr, reference)) { + type = narrowTypeBySwitchOptionalChainContainment(type, flow.node, (t) => !(t.flags & (32768 /* Undefined */ | 131072 /* Never */))); + } else if (expr.kind === 222 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) { + type = narrowTypeBySwitchOptionalChainContainment(type, flow.node, (t) => !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined")); + } + } + const access = getDiscriminantPropertyAccess(expr, type); + if (access) { + type = narrowTypeBySwitchOnDiscriminantProperty(type, access, flow.node); + } + } + return createFlowType(type, isIncomplete(flowType)); + } + function getTypeAtFlowBranchLabel(flow) { + const antecedentTypes = []; + let subtypeReduction = false; + let seenIncomplete = false; + let bypassFlow; + for (const antecedent of flow.antecedent) { + if (!bypassFlow && antecedent.flags & 128 /* SwitchClause */ && antecedent.node.clauseStart === antecedent.node.clauseEnd) { + bypassFlow = antecedent; + continue; + } + const flowType = getTypeAtFlowNode(antecedent); + const type = getTypeFromFlowType(flowType); + if (type === declaredType && declaredType === initialType) { + return type; + } + pushIfUnique(antecedentTypes, type); + if (!isTypeSubsetOf(type, initialType)) { + subtypeReduction = true; + } + if (isIncomplete(flowType)) { + seenIncomplete = true; + } + } + if (bypassFlow) { + const flowType = getTypeAtFlowNode(bypassFlow); + const type = getTypeFromFlowType(flowType); + if (!(type.flags & 131072 /* Never */) && !contains(antecedentTypes, type) && !isExhaustiveSwitchStatement(bypassFlow.node.switchStatement)) { + if (type === declaredType && declaredType === initialType) { + return type; + } + antecedentTypes.push(type); + if (!isTypeSubsetOf(type, initialType)) { + subtypeReduction = true; + } + if (isIncomplete(flowType)) { + seenIncomplete = true; + } + } + } + return createFlowType(getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 /* Subtype */ : 1 /* Literal */), seenIncomplete); + } + function getTypeAtFlowLoopLabel(flow) { + const id = getFlowNodeId(flow); + const cache = flowLoopCaches[id] || (flowLoopCaches[id] = /* @__PURE__ */ new Map()); + const key2 = getOrSetCacheKey(); + if (!key2) { + return declaredType; + } + const cached = cache.get(key2); + if (cached) { + return cached; + } + for (let i = flowLoopStart; i < flowLoopCount; i++) { + if (flowLoopNodes[i] === flow && flowLoopKeys[i] === key2 && flowLoopTypes[i].length) { + return createFlowType( + getUnionOrEvolvingArrayType(flowLoopTypes[i], 1 /* Literal */), + /*incomplete*/ + true + ); + } + } + const antecedentTypes = []; + let subtypeReduction = false; + let firstAntecedentType; + for (const antecedent of flow.antecedent) { + let flowType; + if (!firstAntecedentType) { + flowType = firstAntecedentType = getTypeAtFlowNode(antecedent); + } else { + flowLoopNodes[flowLoopCount] = flow; + flowLoopKeys[flowLoopCount] = key2; + flowLoopTypes[flowLoopCount] = antecedentTypes; + flowLoopCount++; + const saveFlowTypeCache = flowTypeCache; + flowTypeCache = void 0; + flowType = getTypeAtFlowNode(antecedent); + flowTypeCache = saveFlowTypeCache; + flowLoopCount--; + const cached2 = cache.get(key2); + if (cached2) { + return cached2; + } + } + const type = getTypeFromFlowType(flowType); + pushIfUnique(antecedentTypes, type); + if (!isTypeSubsetOf(type, initialType)) { + subtypeReduction = true; + } + if (type === declaredType) { + break; + } + } + const result = getUnionOrEvolvingArrayType(antecedentTypes, subtypeReduction ? 2 /* Subtype */ : 1 /* Literal */); + if (isIncomplete(firstAntecedentType)) { + return createFlowType( + result, + /*incomplete*/ + true + ); + } + cache.set(key2, result); + return result; + } + function getUnionOrEvolvingArrayType(types, subtypeReduction) { + if (isEvolvingArrayTypeList(types)) { + return getEvolvingArrayType(getUnionType(map(types, getElementTypeOfEvolvingArrayType))); + } + const result = recombineUnknownType(getUnionType(sameMap(types, finalizeEvolvingArrayType), subtypeReduction)); + if (result !== declaredType && result.flags & declaredType.flags & 1048576 /* Union */ && arrayIsEqualTo(result.types, declaredType.types)) { + return declaredType; + } + return result; + } + function getCandidateDiscriminantPropertyAccess(expr) { + if (isBindingPattern(reference) || isFunctionExpressionOrArrowFunction(reference) || isObjectLiteralMethod(reference)) { + if (isIdentifier(expr)) { + const symbol = getResolvedSymbol(expr); + const declaration = getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; + if (declaration && (isBindingElement(declaration) || isParameter(declaration)) && reference === declaration.parent && !declaration.initializer && !declaration.dotDotDotToken) { + return declaration; + } + } + } else if (isAccessExpression(expr)) { + if (isMatchingReference(reference, expr.expression)) { + return expr; + } + } else if (isIdentifier(expr)) { + const symbol = getResolvedSymbol(expr); + if (isConstantVariable(symbol)) { + const declaration = symbol.valueDeclaration; + if (isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isAccessExpression(declaration.initializer) && isMatchingReference(reference, declaration.initializer.expression)) { + return declaration.initializer; + } + if (isBindingElement(declaration) && !declaration.initializer) { + const parent2 = declaration.parent.parent; + if (isVariableDeclaration(parent2) && !parent2.type && parent2.initializer && (isIdentifier(parent2.initializer) || isAccessExpression(parent2.initializer)) && isMatchingReference(reference, parent2.initializer)) { + return declaration; + } + } + } + } + return void 0; + } + function getDiscriminantPropertyAccess(expr, computedType) { + if (declaredType.flags & 1048576 /* Union */ || computedType.flags & 1048576 /* Union */) { + const access = getCandidateDiscriminantPropertyAccess(expr); + if (access) { + const name = getAccessedPropertyName(access); + if (name) { + const type = declaredType.flags & 1048576 /* Union */ && isTypeSubsetOf(computedType, declaredType) ? declaredType : computedType; + if (isDiscriminantProperty(type, name)) { + return access; + } + } + } + } + return void 0; + } + function narrowTypeByDiscriminant(type, access, narrowType2) { + const propName = getAccessedPropertyName(access); + if (propName === void 0) { + return type; + } + const optionalChain = isOptionalChain(access); + const removeNullable = strictNullChecks && (optionalChain || isNonNullAccess(access)) && maybeTypeOfKind(type, 98304 /* Nullable */); + let propType = getTypeOfPropertyOfType(removeNullable ? getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */) : type, propName); + if (!propType) { + return type; + } + propType = removeNullable && optionalChain ? getOptionalType(propType) : propType; + const narrowedPropType = narrowType2(propType); + return filterType(type, (t) => { + const discriminantType = getTypeOfPropertyOrIndexSignatureOfType(t, propName) || unknownType; + return !(discriminantType.flags & 131072 /* Never */) && !(narrowedPropType.flags & 131072 /* Never */) && areTypesComparable(narrowedPropType, discriminantType); + }); + } + function narrowTypeByDiscriminantProperty(type, access, operator, value, assumeTrue) { + if ((operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) { + const keyPropertyName = getKeyPropertyName(type); + if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) { + const candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value)); + if (candidate) { + return operator === (assumeTrue ? 37 /* EqualsEqualsEqualsToken */ : 38 /* ExclamationEqualsEqualsToken */) ? candidate : isUnitType(getTypeOfPropertyOfType(candidate, keyPropertyName) || unknownType) ? removeType(type, candidate) : type; + } + } + } + return narrowTypeByDiscriminant(type, access, (t) => narrowTypeByEquality(t, operator, value, assumeTrue)); + } + function narrowTypeBySwitchOnDiscriminantProperty(type, access, data) { + if (data.clauseStart < data.clauseEnd && type.flags & 1048576 /* Union */ && getKeyPropertyName(type) === getAccessedPropertyName(access)) { + const clauseTypes = getSwitchClauseTypes(data.switchStatement).slice(data.clauseStart, data.clauseEnd); + const candidate = getUnionType(map(clauseTypes, (t) => getConstituentTypeForKeyType(type, t) || unknownType)); + if (candidate !== unknownType) { + return candidate; + } + } + return narrowTypeByDiscriminant(type, access, (t) => narrowTypeBySwitchOnDiscriminant(t, data)); + } + function narrowTypeByTruthiness(type, expr, assumeTrue) { + if (isMatchingReference(reference, expr)) { + return getAdjustedTypeWithFacts(type, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */); + } + if (strictNullChecks && assumeTrue && optionalChainContainsReference(expr, reference)) { + type = getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */); + } + const access = getDiscriminantPropertyAccess(expr, type); + if (access) { + return narrowTypeByDiscriminant(type, access, (t) => getTypeWithFacts(t, assumeTrue ? 4194304 /* Truthy */ : 8388608 /* Falsy */)); + } + return type; + } + function isTypePresencePossible(type, propName, assumeTrue) { + const prop = getPropertyOfType(type, propName); + return prop ? !!(prop.flags & 16777216 /* Optional */ || getCheckFlags(prop) & 48 /* Partial */) || assumeTrue : !!getApplicableIndexInfoForName(type, propName) || !assumeTrue; + } + function narrowTypeByInKeyword(type, nameType, assumeTrue) { + const name = getPropertyNameFromType(nameType); + const isKnownProperty2 = someType(type, (t) => isTypePresencePossible( + t, + name, + /*assumeTrue*/ + true + )); + if (isKnownProperty2) { + return filterType(type, (t) => isTypePresencePossible(t, name, assumeTrue)); + } + if (assumeTrue) { + const recordSymbol = getGlobalRecordSymbol(); + if (recordSymbol) { + return getIntersectionType([type, getTypeAliasInstantiation(recordSymbol, [nameType, unknownType])]); + } + } + return type; + } + function narrowTypeByBooleanComparison(type, expr, bool, operator, assumeTrue) { + assumeTrue = assumeTrue !== (bool.kind === 112 /* TrueKeyword */) !== (operator !== 38 /* ExclamationEqualsEqualsToken */ && operator !== 36 /* ExclamationEqualsToken */); + return narrowType(type, expr, assumeTrue); + } + function narrowTypeByBinaryExpression(type, expr, assumeTrue) { + switch (expr.operatorToken.kind) { + case 64 /* EqualsToken */: + case 76 /* BarBarEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return narrowTypeByTruthiness(narrowType(type, expr.right, assumeTrue), expr.left, assumeTrue); + case 35 /* EqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + case 37 /* EqualsEqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + const operator = expr.operatorToken.kind; + const left = getReferenceCandidate(expr.left); + const right = getReferenceCandidate(expr.right); + if (left.kind === 222 /* TypeOfExpression */ && isStringLiteralLike(right)) { + return narrowTypeByTypeof(type, left, operator, right, assumeTrue); + } + if (right.kind === 222 /* TypeOfExpression */ && isStringLiteralLike(left)) { + return narrowTypeByTypeof(type, right, operator, left, assumeTrue); + } + if (isMatchingReference(reference, left)) { + return narrowTypeByEquality(type, operator, right, assumeTrue); + } + if (isMatchingReference(reference, right)) { + return narrowTypeByEquality(type, operator, left, assumeTrue); + } + if (strictNullChecks) { + if (optionalChainContainsReference(left, reference)) { + type = narrowTypeByOptionalChainContainment(type, operator, right, assumeTrue); + } else if (optionalChainContainsReference(right, reference)) { + type = narrowTypeByOptionalChainContainment(type, operator, left, assumeTrue); + } + } + const leftAccess = getDiscriminantPropertyAccess(left, type); + if (leftAccess) { + return narrowTypeByDiscriminantProperty(type, leftAccess, operator, right, assumeTrue); + } + const rightAccess = getDiscriminantPropertyAccess(right, type); + if (rightAccess) { + return narrowTypeByDiscriminantProperty(type, rightAccess, operator, left, assumeTrue); + } + if (isMatchingConstructorReference(left)) { + return narrowTypeByConstructor(type, operator, right, assumeTrue); + } + if (isMatchingConstructorReference(right)) { + return narrowTypeByConstructor(type, operator, left, assumeTrue); + } + if (isBooleanLiteral(right) && !isAccessExpression(left)) { + return narrowTypeByBooleanComparison(type, left, right, operator, assumeTrue); + } + if (isBooleanLiteral(left) && !isAccessExpression(right)) { + return narrowTypeByBooleanComparison(type, right, left, operator, assumeTrue); + } + break; + case 104 /* InstanceOfKeyword */: + return narrowTypeByInstanceof(type, expr, assumeTrue); + case 103 /* InKeyword */: + if (isPrivateIdentifier(expr.left)) { + return narrowTypeByPrivateIdentifierInInExpression(type, expr, assumeTrue); + } + const target = getReferenceCandidate(expr.right); + if (containsMissingType(type) && isAccessExpression(reference) && isMatchingReference(reference.expression, target)) { + const leftType = getTypeOfExpression(expr.left); + if (isTypeUsableAsPropertyName(leftType) && getAccessedPropertyName(reference) === getPropertyNameFromType(leftType)) { + return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */); + } + } + if (isMatchingReference(reference, target)) { + const leftType = getTypeOfExpression(expr.left); + if (isTypeUsableAsPropertyName(leftType)) { + return narrowTypeByInKeyword(type, leftType, assumeTrue); + } + } + break; + case 28 /* CommaToken */: + return narrowType(type, expr.right, assumeTrue); + // Ordinarily we won't see && and || expressions in control flow analysis because the Binder breaks those + // expressions down to individual conditional control flows. However, we may encounter them when analyzing + // aliased conditional expressions. + case 56 /* AmpersandAmpersandToken */: + return assumeTrue ? narrowType( + narrowType( + type, + expr.left, + /*assumeTrue*/ + true + ), + expr.right, + /*assumeTrue*/ + true + ) : getUnionType([narrowType( + type, + expr.left, + /*assumeTrue*/ + false + ), narrowType( + type, + expr.right, + /*assumeTrue*/ + false + )]); + case 57 /* BarBarToken */: + return assumeTrue ? getUnionType([narrowType( + type, + expr.left, + /*assumeTrue*/ + true + ), narrowType( + type, + expr.right, + /*assumeTrue*/ + true + )]) : narrowType( + narrowType( + type, + expr.left, + /*assumeTrue*/ + false + ), + expr.right, + /*assumeTrue*/ + false + ); + } + return type; + } + function narrowTypeByPrivateIdentifierInInExpression(type, expr, assumeTrue) { + const target = getReferenceCandidate(expr.right); + if (!isMatchingReference(reference, target)) { + return type; + } + Debug.assertNode(expr.left, isPrivateIdentifier); + const symbol = getSymbolForPrivateIdentifierExpression(expr.left); + if (symbol === void 0) { + return type; + } + const classSymbol = symbol.parent; + const targetType = hasStaticModifier(Debug.checkDefined(symbol.valueDeclaration, "should always have a declaration")) ? getTypeOfSymbol(classSymbol) : getDeclaredTypeOfSymbol(classSymbol); + return getNarrowedType( + type, + targetType, + assumeTrue, + /*checkDerived*/ + true + ); + } + function narrowTypeByOptionalChainContainment(type, operator, value, assumeTrue) { + const equalsOperator = operator === 35 /* EqualsEqualsToken */ || operator === 37 /* EqualsEqualsEqualsToken */; + const nullableFlags = operator === 35 /* EqualsEqualsToken */ || operator === 36 /* ExclamationEqualsToken */ ? 98304 /* Nullable */ : 32768 /* Undefined */; + const valueType = getTypeOfExpression(value); + const removeNullable = equalsOperator !== assumeTrue && everyType(valueType, (t) => !!(t.flags & nullableFlags)) || equalsOperator === assumeTrue && everyType(valueType, (t) => !(t.flags & (3 /* AnyOrUnknown */ | nullableFlags))); + return removeNullable ? getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */) : type; + } + function narrowTypeByEquality(type, operator, value, assumeTrue) { + if (type.flags & 1 /* Any */) { + return type; + } + if (operator === 36 /* ExclamationEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */) { + assumeTrue = !assumeTrue; + } + const valueType = getTypeOfExpression(value); + const doubleEquals = operator === 35 /* EqualsEqualsToken */ || operator === 36 /* ExclamationEqualsToken */; + if (valueType.flags & 98304 /* Nullable */) { + if (!strictNullChecks) { + return type; + } + const facts = doubleEquals ? assumeTrue ? 262144 /* EQUndefinedOrNull */ : 2097152 /* NEUndefinedOrNull */ : valueType.flags & 65536 /* Null */ ? assumeTrue ? 131072 /* EQNull */ : 1048576 /* NENull */ : assumeTrue ? 65536 /* EQUndefined */ : 524288 /* NEUndefined */; + return getAdjustedTypeWithFacts(type, facts); + } + if (assumeTrue) { + if (!doubleEquals && (type.flags & 2 /* Unknown */ || someType(type, isEmptyAnonymousObjectType))) { + if (valueType.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */) || isEmptyAnonymousObjectType(valueType)) { + return valueType; + } + if (valueType.flags & 524288 /* Object */) { + return nonPrimitiveType; + } + } + const filteredType = filterType(type, (t) => areTypesComparable(t, valueType) || doubleEquals && isCoercibleUnderDoubleEquals(t, valueType)); + return replacePrimitivesWithLiterals(filteredType, valueType); + } + if (isUnitType(valueType)) { + return filterType(type, (t) => !(isUnitLikeType(t) && areTypesComparable(t, valueType))); + } + return type; + } + function narrowTypeByTypeof(type, typeOfExpr, operator, literal, assumeTrue) { + if (operator === 36 /* ExclamationEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */) { + assumeTrue = !assumeTrue; + } + const target = getReferenceCandidate(typeOfExpr.expression); + if (!isMatchingReference(reference, target)) { + if (strictNullChecks && optionalChainContainsReference(target, reference) && assumeTrue === (literal.text !== "undefined")) { + type = getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */); + } + const propertyAccess = getDiscriminantPropertyAccess(target, type); + if (propertyAccess) { + return narrowTypeByDiscriminant(type, propertyAccess, (t) => narrowTypeByLiteralExpression(t, literal, assumeTrue)); + } + return type; + } + return narrowTypeByLiteralExpression(type, literal, assumeTrue); + } + function narrowTypeByLiteralExpression(type, literal, assumeTrue) { + return assumeTrue ? narrowTypeByTypeName(type, literal.text) : getAdjustedTypeWithFacts(type, typeofNEFacts.get(literal.text) || 32768 /* TypeofNEHostObject */); + } + function narrowTypeBySwitchOptionalChainContainment(type, { switchStatement, clauseStart, clauseEnd }, clauseCheck) { + const everyClauseChecks = clauseStart !== clauseEnd && every(getSwitchClauseTypes(switchStatement).slice(clauseStart, clauseEnd), clauseCheck); + return everyClauseChecks ? getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */) : type; + } + function narrowTypeBySwitchOnDiscriminant(type, { switchStatement, clauseStart, clauseEnd }) { + const switchTypes = getSwitchClauseTypes(switchStatement); + if (!switchTypes.length) { + return type; + } + const clauseTypes = switchTypes.slice(clauseStart, clauseEnd); + const hasDefaultClause = clauseStart === clauseEnd || contains(clauseTypes, neverType); + if (type.flags & 2 /* Unknown */ && !hasDefaultClause) { + let groundClauseTypes; + for (let i = 0; i < clauseTypes.length; i += 1) { + const t = clauseTypes[i]; + if (t.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */)) { + if (groundClauseTypes !== void 0) { + groundClauseTypes.push(t); + } + } else if (t.flags & 524288 /* Object */) { + if (groundClauseTypes === void 0) { + groundClauseTypes = clauseTypes.slice(0, i); + } + groundClauseTypes.push(nonPrimitiveType); + } else { + return type; + } + } + return getUnionType(groundClauseTypes === void 0 ? clauseTypes : groundClauseTypes); + } + const discriminantType = getUnionType(clauseTypes); + const caseType = discriminantType.flags & 131072 /* Never */ ? neverType : replacePrimitivesWithLiterals(filterType(type, (t) => areTypesComparable(discriminantType, t)), discriminantType); + if (!hasDefaultClause) { + return caseType; + } + const defaultType = filterType(type, (t) => !(isUnitLikeType(t) && contains(switchTypes, t.flags & 32768 /* Undefined */ ? undefinedType : getRegularTypeOfLiteralType(extractUnitType(t))))); + return caseType.flags & 131072 /* Never */ ? defaultType : getUnionType([caseType, defaultType]); + } + function narrowTypeByTypeName(type, typeName) { + switch (typeName) { + case "string": + return narrowTypeByTypeFacts(type, stringType, 1 /* TypeofEQString */); + case "number": + return narrowTypeByTypeFacts(type, numberType, 2 /* TypeofEQNumber */); + case "bigint": + return narrowTypeByTypeFacts(type, bigintType, 4 /* TypeofEQBigInt */); + case "boolean": + return narrowTypeByTypeFacts(type, booleanType, 8 /* TypeofEQBoolean */); + case "symbol": + return narrowTypeByTypeFacts(type, esSymbolType, 16 /* TypeofEQSymbol */); + case "object": + return type.flags & 1 /* Any */ ? type : getUnionType([narrowTypeByTypeFacts(type, nonPrimitiveType, 32 /* TypeofEQObject */), narrowTypeByTypeFacts(type, nullType, 131072 /* EQNull */)]); + case "function": + return type.flags & 1 /* Any */ ? type : narrowTypeByTypeFacts(type, globalFunctionType, 64 /* TypeofEQFunction */); + case "undefined": + return narrowTypeByTypeFacts(type, undefinedType, 65536 /* EQUndefined */); + } + return narrowTypeByTypeFacts(type, nonPrimitiveType, 128 /* TypeofEQHostObject */); + } + function narrowTypeByTypeFacts(type, impliedType, facts) { + return mapType(type, (t) => ( + // We first check if a constituent is a subtype of the implied type. If so, we either keep or eliminate + // the constituent based on its type facts. We use the strict subtype relation because it treats `object` + // as a subtype of `{}`, and we need the type facts check because function types are subtypes of `object`, + // but are classified as "function" according to `typeof`. + isTypeRelatedTo(t, impliedType, strictSubtypeRelation) ? hasTypeFacts(t, facts) ? t : neverType : ( + // We next check if the consituent is a supertype of the implied type. If so, we substitute the implied + // type. This handles top types like `unknown` and `{}`, and supertypes like `{ toString(): string }`. + isTypeSubtypeOf(impliedType, t) ? impliedType : ( + // Neither the constituent nor the implied type is a subtype of the other, however their domains may still + // overlap. For example, an unconstrained type parameter and type `string`. If the type facts indicate + // possible overlap, we form an intersection. Otherwise, we eliminate the constituent. + hasTypeFacts(t, facts) ? getIntersectionType([t, impliedType]) : neverType + ) + ) + )); + } + function narrowTypeBySwitchOnTypeOf(type, { switchStatement, clauseStart, clauseEnd }) { + const witnesses = getSwitchClauseTypeOfWitnesses(switchStatement); + if (!witnesses) { + return type; + } + const defaultIndex = findIndex(switchStatement.caseBlock.clauses, (clause) => clause.kind === 298 /* DefaultClause */); + const hasDefaultClause = clauseStart === clauseEnd || defaultIndex >= clauseStart && defaultIndex < clauseEnd; + if (hasDefaultClause) { + const notEqualFacts = getNotEqualFactsFromTypeofSwitch(clauseStart, clauseEnd, witnesses); + return filterType(type, (t) => getTypeFacts(t, notEqualFacts) === notEqualFacts); + } + const clauseWitnesses = witnesses.slice(clauseStart, clauseEnd); + return getUnionType(map(clauseWitnesses, (text) => text ? narrowTypeByTypeName(type, text) : neverType)); + } + function narrowTypeBySwitchOnTrue(type, { switchStatement, clauseStart, clauseEnd }) { + const defaultIndex = findIndex(switchStatement.caseBlock.clauses, (clause) => clause.kind === 298 /* DefaultClause */); + const hasDefaultClause = clauseStart === clauseEnd || defaultIndex >= clauseStart && defaultIndex < clauseEnd; + for (let i = 0; i < clauseStart; i++) { + const clause = switchStatement.caseBlock.clauses[i]; + if (clause.kind === 297 /* CaseClause */) { + type = narrowType( + type, + clause.expression, + /*assumeTrue*/ + false + ); + } + } + if (hasDefaultClause) { + for (let i = clauseEnd; i < switchStatement.caseBlock.clauses.length; i++) { + const clause = switchStatement.caseBlock.clauses[i]; + if (clause.kind === 297 /* CaseClause */) { + type = narrowType( + type, + clause.expression, + /*assumeTrue*/ + false + ); + } + } + return type; + } + const clauses = switchStatement.caseBlock.clauses.slice(clauseStart, clauseEnd); + return getUnionType(map(clauses, (clause) => clause.kind === 297 /* CaseClause */ ? narrowType( + type, + clause.expression, + /*assumeTrue*/ + true + ) : neverType)); + } + function isMatchingConstructorReference(expr) { + return (isPropertyAccessExpression(expr) && idText(expr.name) === "constructor" || isElementAccessExpression(expr) && isStringLiteralLike(expr.argumentExpression) && expr.argumentExpression.text === "constructor") && isMatchingReference(reference, expr.expression); + } + function narrowTypeByConstructor(type, operator, identifier, assumeTrue) { + if (assumeTrue ? operator !== 35 /* EqualsEqualsToken */ && operator !== 37 /* EqualsEqualsEqualsToken */ : operator !== 36 /* ExclamationEqualsToken */ && operator !== 38 /* ExclamationEqualsEqualsToken */) { + return type; + } + const identifierType = getTypeOfExpression(identifier); + if (!isFunctionType(identifierType) && !isConstructorType(identifierType)) { + return type; + } + const prototypeProperty = getPropertyOfType(identifierType, "prototype"); + if (!prototypeProperty) { + return type; + } + const prototypeType = getTypeOfSymbol(prototypeProperty); + const candidate = !isTypeAny(prototypeType) ? prototypeType : void 0; + if (!candidate || candidate === globalObjectType || candidate === globalFunctionType) { + return type; + } + if (isTypeAny(type)) { + return candidate; + } + return filterType(type, (t) => isConstructedBy(t, candidate)); + function isConstructedBy(source, target) { + if (source.flags & 524288 /* Object */ && getObjectFlags(source) & 1 /* Class */ || target.flags & 524288 /* Object */ && getObjectFlags(target) & 1 /* Class */) { + return source.symbol === target.symbol; + } + return isTypeSubtypeOf(source, target); + } + } + function narrowTypeByInstanceof(type, expr, assumeTrue) { + const left = getReferenceCandidate(expr.left); + if (!isMatchingReference(reference, left)) { + if (assumeTrue && strictNullChecks && optionalChainContainsReference(left, reference)) { + return getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */); + } + return type; + } + const right = expr.right; + const rightType = getTypeOfExpression(right); + if (!isTypeDerivedFrom(rightType, globalObjectType)) { + return type; + } + const signature = getEffectsSignature(expr); + const predicate = signature && getTypePredicateOfSignature(signature); + if (predicate && predicate.kind === 1 /* Identifier */ && predicate.parameterIndex === 0) { + return getNarrowedType( + type, + predicate.type, + assumeTrue, + /*checkDerived*/ + true + ); + } + if (!isTypeDerivedFrom(rightType, globalFunctionType)) { + return type; + } + const instanceType = mapType(rightType, getInstanceType); + if (isTypeAny(type) && (instanceType === globalObjectType || instanceType === globalFunctionType) || !assumeTrue && !(instanceType.flags & 524288 /* Object */ && !isEmptyAnonymousObjectType(instanceType))) { + return type; + } + return getNarrowedType( + type, + instanceType, + assumeTrue, + /*checkDerived*/ + true + ); + } + function getInstanceType(constructorType) { + const prototypePropertyType = getTypeOfPropertyOfType(constructorType, "prototype"); + if (prototypePropertyType && !isTypeAny(prototypePropertyType)) { + return prototypePropertyType; + } + const constructSignatures = getSignaturesOfType(constructorType, 1 /* Construct */); + if (constructSignatures.length) { + return getUnionType(map(constructSignatures, (signature) => getReturnTypeOfSignature(getErasedSignature(signature)))); + } + return emptyObjectType; + } + function getNarrowedType(type, candidate, assumeTrue, checkDerived) { + const key2 = type.flags & 1048576 /* Union */ ? `N${getTypeId(type)},${getTypeId(candidate)},${(assumeTrue ? 1 : 0) | (checkDerived ? 2 : 0)}` : void 0; + return getCachedType(key2) ?? setCachedType(key2, getNarrowedTypeWorker(type, candidate, assumeTrue, checkDerived)); + } + function getNarrowedTypeWorker(type, candidate, assumeTrue, checkDerived) { + if (!assumeTrue) { + if (type === candidate) { + return neverType; + } + if (checkDerived) { + return filterType(type, (t) => !isTypeDerivedFrom(t, candidate)); + } + type = type.flags & 2 /* Unknown */ ? unknownUnionType : type; + const trueType2 = getNarrowedType( + type, + candidate, + /*assumeTrue*/ + true, + /*checkDerived*/ + false + ); + return recombineUnknownType(filterType(type, (t) => !isTypeSubsetOf(t, trueType2))); + } + if (type.flags & 3 /* AnyOrUnknown */) { + return candidate; + } + if (type === candidate) { + return candidate; + } + const isRelated = checkDerived ? isTypeDerivedFrom : isTypeSubtypeOf; + const keyPropertyName = type.flags & 1048576 /* Union */ ? getKeyPropertyName(type) : void 0; + const narrowedType = mapType(candidate, (c) => { + const discriminant = keyPropertyName && getTypeOfPropertyOfType(c, keyPropertyName); + const matching = discriminant && getConstituentTypeForKeyType(type, discriminant); + const directlyRelated = mapType( + matching || type, + checkDerived ? (t) => isTypeDerivedFrom(t, c) ? t : isTypeDerivedFrom(c, t) ? c : neverType : (t) => isTypeStrictSubtypeOf(t, c) ? t : isTypeStrictSubtypeOf(c, t) ? c : isTypeSubtypeOf(t, c) ? t : isTypeSubtypeOf(c, t) ? c : neverType + ); + return directlyRelated.flags & 131072 /* Never */ ? mapType(type, (t) => maybeTypeOfKind(t, 465829888 /* Instantiable */) && isRelated(c, getBaseConstraintOfType(t) || unknownType) ? getIntersectionType([t, c]) : neverType) : directlyRelated; + }); + return !(narrowedType.flags & 131072 /* Never */) ? narrowedType : isTypeSubtypeOf(candidate, type) ? candidate : isTypeAssignableTo(type, candidate) ? type : isTypeAssignableTo(candidate, type) ? candidate : getIntersectionType([type, candidate]); + } + function narrowTypeByCallExpression(type, callExpression, assumeTrue) { + if (hasMatchingArgument(callExpression, reference)) { + const signature = assumeTrue || !isCallChain(callExpression) ? getEffectsSignature(callExpression) : void 0; + const predicate = signature && getTypePredicateOfSignature(signature); + if (predicate && (predicate.kind === 0 /* This */ || predicate.kind === 1 /* Identifier */)) { + return narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue); + } + } + if (containsMissingType(type) && isAccessExpression(reference) && isPropertyAccessExpression(callExpression.expression)) { + const callAccess = callExpression.expression; + if (isMatchingReference(reference.expression, getReferenceCandidate(callAccess.expression)) && isIdentifier(callAccess.name) && callAccess.name.escapedText === "hasOwnProperty" && callExpression.arguments.length === 1) { + const argument = callExpression.arguments[0]; + if (isStringLiteralLike(argument) && getAccessedPropertyName(reference) === escapeLeadingUnderscores(argument.text)) { + return getTypeWithFacts(type, assumeTrue ? 524288 /* NEUndefined */ : 65536 /* EQUndefined */); + } + } + } + return type; + } + function narrowTypeByTypePredicate(type, predicate, callExpression, assumeTrue) { + if (predicate.type && !(isTypeAny(type) && (predicate.type === globalObjectType || predicate.type === globalFunctionType))) { + const predicateArgument = getTypePredicateArgument(predicate, callExpression); + if (predicateArgument) { + if (isMatchingReference(reference, predicateArgument)) { + return getNarrowedType( + type, + predicate.type, + assumeTrue, + /*checkDerived*/ + false + ); + } + if (strictNullChecks && optionalChainContainsReference(predicateArgument, reference) && (assumeTrue && !hasTypeFacts(predicate.type, 65536 /* EQUndefined */) || !assumeTrue && everyType(predicate.type, isNullableType))) { + type = getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */); + } + const access = getDiscriminantPropertyAccess(predicateArgument, type); + if (access) { + return narrowTypeByDiscriminant(type, access, (t) => getNarrowedType( + t, + predicate.type, + assumeTrue, + /*checkDerived*/ + false + )); + } + } + } + return type; + } + function narrowType(type, expr, assumeTrue) { + if (isExpressionOfOptionalChainRoot(expr) || isBinaryExpression(expr.parent) && (expr.parent.operatorToken.kind === 61 /* QuestionQuestionToken */ || expr.parent.operatorToken.kind === 78 /* QuestionQuestionEqualsToken */) && expr.parent.left === expr) { + return narrowTypeByOptionality(type, expr, assumeTrue); + } + switch (expr.kind) { + case 80 /* Identifier */: + if (!isMatchingReference(reference, expr) && inlineLevel < 5) { + const symbol = getResolvedSymbol(expr); + if (isConstantVariable(symbol)) { + const declaration = symbol.valueDeclaration; + if (declaration && isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isConstantReference(reference)) { + inlineLevel++; + const result = narrowType(type, declaration.initializer, assumeTrue); + inlineLevel--; + return result; + } + } + } + // falls through + case 110 /* ThisKeyword */: + case 108 /* SuperKeyword */: + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return narrowTypeByTruthiness(type, expr, assumeTrue); + case 214 /* CallExpression */: + return narrowTypeByCallExpression(type, expr, assumeTrue); + case 218 /* ParenthesizedExpression */: + case 236 /* NonNullExpression */: + case 239 /* SatisfiesExpression */: + return narrowType(type, expr.expression, assumeTrue); + case 227 /* BinaryExpression */: + return narrowTypeByBinaryExpression(type, expr, assumeTrue); + case 225 /* PrefixUnaryExpression */: + if (expr.operator === 54 /* ExclamationToken */) { + return narrowType(type, expr.operand, !assumeTrue); + } + break; + } + return type; + } + function narrowTypeByOptionality(type, expr, assumePresent) { + if (isMatchingReference(reference, expr)) { + return getAdjustedTypeWithFacts(type, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */); + } + const access = getDiscriminantPropertyAccess(expr, type); + if (access) { + return narrowTypeByDiscriminant(type, access, (t) => getTypeWithFacts(t, assumePresent ? 2097152 /* NEUndefinedOrNull */ : 262144 /* EQUndefinedOrNull */)); + } + return type; + } + } + function getTypeOfSymbolAtLocation(symbol, location) { + symbol = getExportSymbolOfValueSymbolIfExported(symbol); + if (location.kind === 80 /* Identifier */ || location.kind === 81 /* PrivateIdentifier */) { + if (isRightSideOfQualifiedNameOrPropertyAccess(location)) { + location = location.parent; + } + if (isExpressionNode(location) && (!isAssignmentTarget(location) || isWriteAccess(location))) { + const type = removeOptionalTypeMarker( + isWriteAccess(location) && location.kind === 212 /* PropertyAccessExpression */ ? checkPropertyAccessExpression( + location, + /*checkMode*/ + void 0, + /*writeOnly*/ + true + ) : getTypeOfExpression(location) + ); + if (getExportSymbolOfValueSymbolIfExported(getNodeLinks(location).resolvedSymbol) === symbol) { + return type; + } + } + } + if (isDeclarationName(location) && isSetAccessor(location.parent) && getAnnotatedAccessorTypeNode(location.parent)) { + return getWriteTypeOfAccessors(location.parent.symbol); + } + return isRightSideOfAccessExpression(location) && isWriteAccess(location.parent) ? getWriteTypeOfSymbol(symbol) : getNonMissingTypeOfSymbol(symbol); + } + function getControlFlowContainer(node) { + return findAncestor(node.parent, (node2) => isFunctionLike(node2) && !getImmediatelyInvokedFunctionExpression(node2) || node2.kind === 269 /* ModuleBlock */ || node2.kind === 308 /* SourceFile */ || node2.kind === 173 /* PropertyDeclaration */); + } + function isSymbolAssignedDefinitely(symbol) { + if (symbol.lastAssignmentPos !== void 0) { + return symbol.lastAssignmentPos < 0; + } + return isSymbolAssigned(symbol) && symbol.lastAssignmentPos !== void 0 && symbol.lastAssignmentPos < 0; + } + function isSymbolAssigned(symbol) { + return !isPastLastAssignment( + symbol, + /*location*/ + void 0 + ); + } + function isPastLastAssignment(symbol, location) { + const parent2 = findAncestor(symbol.valueDeclaration, isFunctionOrSourceFile); + if (!parent2) { + return false; + } + const links = getNodeLinks(parent2); + if (!(links.flags & 131072 /* AssignmentsMarked */)) { + links.flags |= 131072 /* AssignmentsMarked */; + if (!hasParentWithAssignmentsMarked(parent2)) { + markNodeAssignments(parent2); + } + } + return !symbol.lastAssignmentPos || location && Math.abs(symbol.lastAssignmentPos) < location.pos; + } + function isSomeSymbolAssigned(rootDeclaration) { + Debug.assert(isVariableDeclaration(rootDeclaration) || isParameter(rootDeclaration)); + return isSomeSymbolAssignedWorker(rootDeclaration.name); + } + function isSomeSymbolAssignedWorker(node) { + if (node.kind === 80 /* Identifier */) { + return isSymbolAssigned(getSymbolOfDeclaration(node.parent)); + } + return some(node.elements, (e) => e.kind !== 233 /* OmittedExpression */ && isSomeSymbolAssignedWorker(e.name)); + } + function hasParentWithAssignmentsMarked(node) { + return !!findAncestor(node.parent, (node2) => isFunctionOrSourceFile(node2) && !!(getNodeLinks(node2).flags & 131072 /* AssignmentsMarked */)); + } + function isFunctionOrSourceFile(node) { + return isFunctionLikeDeclaration(node) || isSourceFile(node); + } + function markNodeAssignments(node) { + switch (node.kind) { + case 80 /* Identifier */: + const assigmentTarget = getAssignmentTargetKind(node); + if (assigmentTarget !== 0 /* None */) { + const symbol = getResolvedSymbol(node); + const hasDefiniteAssignment = assigmentTarget === 1 /* Definite */ || symbol.lastAssignmentPos !== void 0 && symbol.lastAssignmentPos < 0; + if (isParameterOrMutableLocalVariable(symbol)) { + if (symbol.lastAssignmentPos === void 0 || Math.abs(symbol.lastAssignmentPos) !== Number.MAX_VALUE) { + const referencingFunction = findAncestor(node, isFunctionOrSourceFile); + const declaringFunction = findAncestor(symbol.valueDeclaration, isFunctionOrSourceFile); + symbol.lastAssignmentPos = referencingFunction === declaringFunction ? extendAssignmentPosition(node, symbol.valueDeclaration) : Number.MAX_VALUE; + } + if (hasDefiniteAssignment && symbol.lastAssignmentPos > 0) { + symbol.lastAssignmentPos *= -1; + } + } + } + return; + case 282 /* ExportSpecifier */: + const exportDeclaration = node.parent.parent; + const name = node.propertyName || node.name; + if (!node.isTypeOnly && !exportDeclaration.isTypeOnly && !exportDeclaration.moduleSpecifier && name.kind !== 11 /* StringLiteral */) { + const symbol = resolveEntityName( + name, + 111551 /* Value */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true + ); + if (symbol && isParameterOrMutableLocalVariable(symbol)) { + const sign = symbol.lastAssignmentPos !== void 0 && symbol.lastAssignmentPos < 0 ? -1 : 1; + symbol.lastAssignmentPos = sign * Number.MAX_VALUE; + } + } + return; + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 267 /* EnumDeclaration */: + return; + } + if (isTypeNode(node)) { + return; + } + forEachChild(node, markNodeAssignments); + } + function extendAssignmentPosition(node, declaration) { + let pos = node.pos; + while (node && node.pos > declaration.pos) { + switch (node.kind) { + case 244 /* VariableStatement */: + case 245 /* ExpressionStatement */: + case 246 /* IfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 255 /* WithStatement */: + case 256 /* SwitchStatement */: + case 259 /* TryStatement */: + case 264 /* ClassDeclaration */: + pos = node.end; + } + node = node.parent; + } + return pos; + } + function isConstantVariable(symbol) { + return symbol.flags & 3 /* Variable */ && (getDeclarationNodeFlagsFromSymbol(symbol) & 6 /* Constant */) !== 0; + } + function isParameterOrMutableLocalVariable(symbol) { + const declaration = symbol.valueDeclaration && getRootDeclaration(symbol.valueDeclaration); + return !!declaration && (isParameter(declaration) || isVariableDeclaration(declaration) && (isCatchClause(declaration.parent) || isMutableLocalVariableDeclaration(declaration))); + } + function isMutableLocalVariableDeclaration(declaration) { + return !!(declaration.parent.flags & 1 /* Let */) && !(getCombinedModifierFlags(declaration) & 32 /* Export */ || declaration.parent.parent.kind === 244 /* VariableStatement */ && isGlobalSourceFile(declaration.parent.parent.parent)); + } + function parameterInitializerContainsUndefined(declaration) { + const links = getNodeLinks(declaration); + if (links.parameterInitializerContainsUndefined === void 0) { + if (!pushTypeResolution(declaration, 8 /* ParameterInitializerContainsUndefined */)) { + reportCircularityError(declaration.symbol); + return true; + } + const containsUndefined = !!hasTypeFacts(checkDeclarationInitializer(declaration, 0 /* Normal */), 16777216 /* IsUndefined */); + if (!popTypeResolution()) { + reportCircularityError(declaration.symbol); + return true; + } + links.parameterInitializerContainsUndefined ?? (links.parameterInitializerContainsUndefined = containsUndefined); + } + return links.parameterInitializerContainsUndefined; + } + function removeOptionalityFromDeclaredType(declaredType, declaration) { + const removeUndefined = strictNullChecks && declaration.kind === 170 /* Parameter */ && declaration.initializer && hasTypeFacts(declaredType, 16777216 /* IsUndefined */) && !parameterInitializerContainsUndefined(declaration); + return removeUndefined ? getTypeWithFacts(declaredType, 524288 /* NEUndefined */) : declaredType; + } + function isConstraintPosition(type, node) { + const parent2 = node.parent; + return parent2.kind === 212 /* PropertyAccessExpression */ || parent2.kind === 167 /* QualifiedName */ || parent2.kind === 214 /* CallExpression */ && parent2.expression === node || parent2.kind === 215 /* NewExpression */ && parent2.expression === node || parent2.kind === 213 /* ElementAccessExpression */ && parent2.expression === node && !(someType(type, isGenericTypeWithoutNullableConstraint) && isGenericIndexType(getTypeOfExpression(parent2.argumentExpression))); + } + function isGenericTypeWithUnionConstraint(type) { + return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithUnionConstraint) : !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */)); + } + function isGenericTypeWithoutNullableConstraint(type) { + return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithoutNullableConstraint) : !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */)); + } + function hasContextualTypeWithNoGenericTypes(node, checkMode) { + const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 32 /* RestBindingElement */ ? getContextualType2(node, 8 /* SkipBindingPatterns */) : getContextualType2( + node, + /*contextFlags*/ + void 0 + )); + return contextualType && !isGenericType(contextualType); + } + function getNarrowableTypeForReference(type, reference, checkMode) { + if (isNoInferType(type)) { + type = type.baseType; + } + const substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) && someType(type, isGenericTypeWithUnionConstraint) && (isConstraintPosition(type, reference) || hasContextualTypeWithNoGenericTypes(reference, checkMode)); + return substituteConstraints ? mapType(type, getBaseConstraintOrType) : type; + } + function isExportOrExportExpression(location) { + return !!findAncestor(location, (n) => { + const parent2 = n.parent; + if (parent2 === void 0) { + return "quit"; + } + if (isExportAssignment(parent2)) { + return parent2.expression === n && isEntityNameExpression(n); + } + if (isExportSpecifier(parent2)) { + return parent2.name === n || parent2.propertyName === n; + } + return false; + }); + } + function markLinkedReferences(location, hint, propSymbol, parentType) { + if (!canCollectSymbolAliasAccessabilityData) { + return; + } + if (location.flags & 33554432 /* Ambient */ && !isPropertySignature(location) && !isPropertyDeclaration(location)) { + return; + } + switch (hint) { + case 1 /* Identifier */: + return markIdentifierAliasReferenced(location); + case 2 /* Property */: + return markPropertyAliasReferenced(location, propSymbol, parentType); + case 3 /* ExportAssignment */: + return markExportAssignmentAliasReferenced(location); + case 4 /* Jsx */: + return markJsxAliasReferenced(location); + case 5 /* AsyncFunction */: + return markAsyncFunctionAliasReferenced(location); + case 6 /* ExportImportEquals */: + return markImportEqualsAliasReferenced(location); + case 7 /* ExportSpecifier */: + return markExportSpecifierAliasReferenced(location); + case 8 /* Decorator */: + return markDecoratorAliasReferenced(location); + case 0 /* Unspecified */: { + if (isIdentifier(location) && (isExpressionNode(location) || isShorthandPropertyAssignment(location.parent) || isImportEqualsDeclaration(location.parent) && location.parent.moduleReference === location) && shouldMarkIdentifierAliasReferenced(location)) { + if (isPropertyAccessOrQualifiedName(location.parent)) { + const left = isPropertyAccessExpression(location.parent) ? location.parent.expression : location.parent.left; + if (left !== location) return; + } + markIdentifierAliasReferenced(location); + return; + } + if (isPropertyAccessOrQualifiedName(location)) { + let topProp = location; + while (isPropertyAccessOrQualifiedName(topProp)) { + if (isPartOfTypeNode(topProp)) return; + topProp = topProp.parent; + } + return markPropertyAliasReferenced(location); + } + if (isExportAssignment(location)) { + return markExportAssignmentAliasReferenced(location); + } + if (isJsxOpeningLikeElement(location) || isJsxOpeningFragment(location)) { + return markJsxAliasReferenced(location); + } + if (isImportEqualsDeclaration(location)) { + if (isInternalModuleImportEqualsDeclaration(location) || checkExternalImportOrExportDeclaration(location)) { + return markImportEqualsAliasReferenced(location); + } + return; + } + if (isExportSpecifier(location)) { + return markExportSpecifierAliasReferenced(location); + } + if (isFunctionLikeDeclaration(location) || isMethodSignature(location)) { + markAsyncFunctionAliasReferenced(location); + } + if (!compilerOptions.emitDecoratorMetadata) { + return; + } + if (!canHaveDecorators(location) || !hasDecorators(location) || !location.modifiers || !nodeCanBeDecorated(legacyDecorators, location, location.parent, location.parent.parent)) { + return; + } + return markDecoratorAliasReferenced(location); + } + default: + Debug.assertNever(hint, `Unhandled reference hint: ${hint}`); + } + } + function markIdentifierAliasReferenced(location) { + const symbol = getResolvedSymbol(location); + if (symbol && symbol !== argumentsSymbol && symbol !== unknownSymbol && !isThisInTypeQuery(location)) { + markAliasReferenced(symbol, location); + } + } + function markPropertyAliasReferenced(location, propSymbol, parentType) { + const left = isPropertyAccessExpression(location) ? location.expression : location.left; + if (isThisIdentifier(left) || !isIdentifier(left)) { + return; + } + const parentSymbol = getResolvedSymbol(left); + if (!parentSymbol || parentSymbol === unknownSymbol) { + return; + } + if (getIsolatedModules(compilerOptions) || shouldPreserveConstEnums(compilerOptions) && isExportOrExportExpression(location)) { + markAliasReferenced(parentSymbol, location); + return; + } + const leftType = parentType || checkExpressionCached(left); + if (isTypeAny(leftType) || leftType === silentNeverType) { + markAliasReferenced(parentSymbol, location); + return; + } + let prop = propSymbol; + if (!prop && !parentType) { + const right = isPropertyAccessExpression(location) ? location.name : location.right; + const lexicallyScopedSymbol = isPrivateIdentifier(right) && lookupSymbolForPrivateIdentifierDeclaration(right.escapedText, right); + const assignmentKind = getAssignmentTargetKind(location); + const apparentType = getApparentType(assignmentKind !== 0 /* None */ || isMethodAccessForCall(location) ? getWidenedType(leftType) : leftType); + prop = isPrivateIdentifier(right) ? lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(apparentType, lexicallyScopedSymbol) || void 0 : getPropertyOfType(apparentType, right.escapedText); + } + if (!(prop && (isConstEnumOrConstEnumOnlyModule(prop) || prop.flags & 8 /* EnumMember */ && location.parent.kind === 307 /* EnumMember */))) { + markAliasReferenced(parentSymbol, location); + } + return; + } + function markExportAssignmentAliasReferenced(location) { + if (isIdentifier(location.expression)) { + const id = location.expression; + const sym = getExportSymbolOfValueSymbolIfExported(resolveEntityName( + id, + -1 /* All */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + location + )); + if (sym) { + markAliasReferenced(sym, id); + } + } + } + function markJsxAliasReferenced(node) { + if (!getJsxNamespaceContainerForImplicitImport(node)) { + const jsxFactoryRefErr = diagnostics && compilerOptions.jsx === 2 /* React */ ? Diagnostics.This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found : void 0; + const jsxFactoryNamespace = getJsxNamespace(node); + const jsxFactoryLocation = isJsxOpeningLikeElement(node) ? node.tagName : node; + const shouldFactoryRefErr = compilerOptions.jsx !== 1 /* Preserve */ && compilerOptions.jsx !== 3 /* ReactNative */; + let jsxFactorySym; + if (!(isJsxOpeningFragment(node) && jsxFactoryNamespace === "null")) { + jsxFactorySym = resolveName( + jsxFactoryLocation, + jsxFactoryNamespace, + shouldFactoryRefErr ? 111551 /* Value */ : 111551 /* Value */ & ~384 /* Enum */, + jsxFactoryRefErr, + /*isUse*/ + true + ); + } + if (jsxFactorySym) { + jsxFactorySym.isReferenced = -1 /* All */; + if (canCollectSymbolAliasAccessabilityData && jsxFactorySym.flags & 2097152 /* Alias */ && !getTypeOnlyAliasDeclaration(jsxFactorySym)) { + markAliasSymbolAsReferenced(jsxFactorySym); + } + } + if (isJsxOpeningFragment(node)) { + const file = getSourceFileOfNode(node); + const entity = getJsxFactoryEntity(file); + if (entity) { + const localJsxNamespace = getFirstIdentifier(entity).escapedText; + resolveName( + jsxFactoryLocation, + localJsxNamespace, + shouldFactoryRefErr ? 111551 /* Value */ : 111551 /* Value */ & ~384 /* Enum */, + jsxFactoryRefErr, + /*isUse*/ + true + ); + } + } + } + return; + } + function markAsyncFunctionAliasReferenced(location) { + if (languageVersion < 2 /* ES2015 */) { + if (getFunctionFlags(location) & 2 /* Async */) { + const returnTypeNode = getEffectiveReturnTypeNode(location); + markTypeNodeAsReferenced(returnTypeNode); + } + } + } + function markImportEqualsAliasReferenced(location) { + if (hasSyntacticModifier(location, 32 /* Export */)) { + markExportAsReferenced(location); + } + } + function markExportSpecifierAliasReferenced(location) { + if (!location.parent.parent.moduleSpecifier && !location.isTypeOnly && !location.parent.parent.isTypeOnly) { + const exportedName = location.propertyName || location.name; + if (exportedName.kind === 11 /* StringLiteral */) { + return; + } + const symbol = resolveName( + exportedName, + exportedName.escapedText, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (symbol && (symbol === undefinedSymbol || symbol === globalThisSymbol || symbol.declarations && isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { + } else { + const target = symbol && (symbol.flags & 2097152 /* Alias */ ? resolveAlias(symbol) : symbol); + if (!target || getSymbolFlags(target) & 111551 /* Value */) { + markExportAsReferenced(location); + markIdentifierAliasReferenced(exportedName); + } + } + return; + } + } + function markDecoratorAliasReferenced(node) { + if (compilerOptions.emitDecoratorMetadata) { + const firstDecorator = find(node.modifiers, isDecorator); + if (!firstDecorator) { + return; + } + checkExternalEmitHelpers(firstDecorator, 16 /* Metadata */); + switch (node.kind) { + case 264 /* ClassDeclaration */: + const constructor = getFirstConstructorWithBody(node); + if (constructor) { + for (const parameter of constructor.parameters) { + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); + } + } + break; + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + const otherKind = node.kind === 178 /* GetAccessor */ ? 179 /* SetAccessor */ : 178 /* GetAccessor */; + const otherAccessor = getDeclarationOfKind(getSymbolOfDeclaration(node), otherKind); + markDecoratorMedataDataTypeNodeAsReferenced(getAnnotatedAccessorTypeNode(node) || otherAccessor && getAnnotatedAccessorTypeNode(otherAccessor)); + break; + case 175 /* MethodDeclaration */: + for (const parameter of node.parameters) { + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); + } + markDecoratorMedataDataTypeNodeAsReferenced(getEffectiveReturnTypeNode(node)); + break; + case 173 /* PropertyDeclaration */: + markDecoratorMedataDataTypeNodeAsReferenced(getEffectiveTypeAnnotationNode(node)); + break; + case 170 /* Parameter */: + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(node)); + const containingSignature = node.parent; + for (const parameter of containingSignature.parameters) { + markDecoratorMedataDataTypeNodeAsReferenced(getParameterTypeNodeForDecoratorCheck(parameter)); + } + markDecoratorMedataDataTypeNodeAsReferenced(getEffectiveReturnTypeNode(containingSignature)); + break; + } + } + } + function markAliasReferenced(symbol, location) { + if (!canCollectSymbolAliasAccessabilityData) { + return; + } + if (isNonLocalAlias( + symbol, + /*excludes*/ + 111551 /* Value */ + ) && !isInTypeQuery(location)) { + const target = resolveAlias(symbol); + if (getSymbolFlags( + symbol, + /*excludeTypeOnlyMeanings*/ + true + ) & (111551 /* Value */ | 1048576 /* ExportValue */)) { + if (getIsolatedModules(compilerOptions) || shouldPreserveConstEnums(compilerOptions) && isExportOrExportExpression(location) || !isConstEnumOrConstEnumOnlyModule(getExportSymbolOfValueSymbolIfExported(target))) { + markAliasSymbolAsReferenced(symbol); + } + } + } + } + function markAliasSymbolAsReferenced(symbol) { + Debug.assert(canCollectSymbolAliasAccessabilityData); + const links = getSymbolLinks(symbol); + if (!links.referenced) { + links.referenced = true; + const node = getDeclarationOfAliasSymbol(symbol); + if (!node) return Debug.fail(); + if (isInternalModuleImportEqualsDeclaration(node)) { + if (getSymbolFlags(resolveSymbol(symbol)) & 111551 /* Value */) { + const left = getFirstIdentifier(node.moduleReference); + markIdentifierAliasReferenced(left); + } + } + } + } + function markExportAsReferenced(node) { + const symbol = getSymbolOfDeclaration(node); + const target = resolveAlias(symbol); + if (target) { + const markAlias = target === unknownSymbol || getSymbolFlags( + symbol, + /*excludeTypeOnlyMeanings*/ + true + ) & 111551 /* Value */ && !isConstEnumOrConstEnumOnlyModule(target); + if (markAlias) { + markAliasSymbolAsReferenced(symbol); + } + } + } + function markEntityNameOrEntityExpressionAsReference(typeName, forDecoratorMetadata) { + if (!typeName) return; + const rootName = getFirstIdentifier(typeName); + const meaning = (typeName.kind === 80 /* Identifier */ ? 788968 /* Type */ : 1920 /* Namespace */) | 2097152 /* Alias */; + const rootSymbol = resolveName( + rootName, + rootName.escapedText, + meaning, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (rootSymbol && rootSymbol.flags & 2097152 /* Alias */) { + if (canCollectSymbolAliasAccessabilityData && symbolIsValue(rootSymbol) && !isConstEnumOrConstEnumOnlyModule(resolveAlias(rootSymbol)) && !getTypeOnlyAliasDeclaration(rootSymbol)) { + markAliasSymbolAsReferenced(rootSymbol); + } else if (forDecoratorMetadata && getIsolatedModules(compilerOptions) && getEmitModuleKind(compilerOptions) >= 5 /* ES2015 */ && !symbolIsValue(rootSymbol) && !some(rootSymbol.declarations, isTypeOnlyImportOrExportDeclaration)) { + const diag2 = error2(typeName, Diagnostics.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled); + const aliasDeclaration = find(rootSymbol.declarations || emptyArray, isAliasSymbolDeclaration); + if (aliasDeclaration) { + addRelatedInfo(diag2, createDiagnosticForNode(aliasDeclaration, Diagnostics._0_was_imported_here, idText(rootName))); + } + } + } + } + function markTypeNodeAsReferenced(node) { + markEntityNameOrEntityExpressionAsReference( + node && getEntityNameFromTypeNode(node), + /*forDecoratorMetadata*/ + false + ); + } + function markDecoratorMedataDataTypeNodeAsReferenced(node) { + const entityName = getEntityNameForDecoratorMetadata(node); + if (entityName && isEntityName(entityName)) { + markEntityNameOrEntityExpressionAsReference( + entityName, + /*forDecoratorMetadata*/ + true + ); + } + } + function getNarrowedTypeOfSymbol(symbol, location) { + var _a; + const type = getTypeOfSymbol(symbol); + const declaration = symbol.valueDeclaration; + if (declaration) { + if (isBindingElement(declaration) && !declaration.initializer && !declaration.dotDotDotToken && declaration.parent.elements.length >= 2) { + const parent2 = declaration.parent.parent; + const rootDeclaration = getRootDeclaration(parent2); + if (rootDeclaration.kind === 261 /* VariableDeclaration */ && getCombinedNodeFlagsCached(rootDeclaration) & 6 /* Constant */ || rootDeclaration.kind === 170 /* Parameter */) { + const links = getNodeLinks(parent2); + if (!(links.flags & 4194304 /* InCheckIdentifier */)) { + links.flags |= 4194304 /* InCheckIdentifier */; + const parentType = getTypeForBindingElementParent(parent2, 0 /* Normal */); + const parentTypeConstraint = parentType && mapType(parentType, getBaseConstraintOrType); + links.flags &= ~4194304 /* InCheckIdentifier */; + if (parentTypeConstraint && parentTypeConstraint.flags & 1048576 /* Union */ && !(rootDeclaration.kind === 170 /* Parameter */ && isSomeSymbolAssigned(rootDeclaration))) { + const pattern = declaration.parent; + const narrowedType = getFlowTypeOfReference( + pattern, + parentTypeConstraint, + parentTypeConstraint, + /*flowContainer*/ + void 0, + location.flowNode + ); + if (narrowedType.flags & 131072 /* Never */) { + return neverType; + } + return getBindingElementTypeFromParentType( + declaration, + narrowedType, + /*noTupleBoundsCheck*/ + true + ); + } + } + } + } + if (isParameter(declaration) && !declaration.type && !declaration.initializer && !declaration.dotDotDotToken) { + const func = declaration.parent; + if (func.parameters.length >= 2 && isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + const contextualSignature = getContextualSignature(func); + if (contextualSignature && contextualSignature.parameters.length === 1 && signatureHasRestParameter(contextualSignature)) { + const restType = getReducedApparentType(instantiateType(getTypeOfSymbol(contextualSignature.parameters[0]), (_a = getInferenceContext(func)) == null ? void 0 : _a.nonFixingMapper)); + if (restType.flags & 1048576 /* Union */ && everyType(restType, isTupleType) && !some(func.parameters, isSomeSymbolAssigned)) { + const narrowedType = getFlowTypeOfReference( + func, + restType, + restType, + /*flowContainer*/ + void 0, + location.flowNode + ); + const index = func.parameters.indexOf(declaration) - (getThisParameter(func) ? 1 : 0); + return getIndexedAccessType(narrowedType, getNumberLiteralType(index)); + } + } + } + } + } + return type; + } + function checkIdentifierCalculateNodeCheckFlags(node, symbol) { + if (isThisInTypeQuery(node)) return; + if (symbol === argumentsSymbol) { + if (isInPropertyInitializerOrClassStaticBlock( + node, + /*ignoreArrowFunctions*/ + true + )) { + error2(node, Diagnostics.arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks); + return; + } + let container = getContainingFunction(node); + if (container) { + if (languageVersion < 2 /* ES2015 */) { + if (container.kind === 220 /* ArrowFunction */) { + error2(node, Diagnostics.The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_function_expression); + } else if (hasSyntacticModifier(container, 1024 /* Async */)) { + error2(node, Diagnostics.The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_standard_function_or_method); + } + } + getNodeLinks(container).flags |= 512 /* CaptureArguments */; + while (container && isArrowFunction(container)) { + container = getContainingFunction(container); + if (container) { + getNodeLinks(container).flags |= 512 /* CaptureArguments */; + } + } + } + return; + } + const localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); + const targetSymbol = resolveAliasWithDeprecationCheck(localOrExportSymbol, node); + if (isDeprecatedSymbol(targetSymbol) && isUncalledFunctionReference(node, targetSymbol) && targetSymbol.declarations) { + addDeprecatedSuggestion(node, targetSymbol.declarations, node.escapedText); + } + const declaration = localOrExportSymbol.valueDeclaration; + if (declaration && localOrExportSymbol.flags & 32 /* Class */) { + if (isClassLike(declaration) && declaration.name !== node) { + let container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + while (container.kind !== 308 /* SourceFile */ && container.parent !== declaration) { + container = getThisContainer( + container, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + } + if (container.kind !== 308 /* SourceFile */) { + getNodeLinks(declaration).flags |= 262144 /* ContainsConstructorReference */; + getNodeLinks(container).flags |= 262144 /* ContainsConstructorReference */; + getNodeLinks(node).flags |= 536870912 /* ConstructorReference */; + } + } + } + checkNestedBlockScopedBinding(node, symbol); + } + function checkIdentifier(node, checkMode) { + if (isThisInTypeQuery(node)) { + return checkThisExpression(node); + } + const symbol = getResolvedSymbol(node); + if (symbol === unknownSymbol) { + return errorType; + } + checkIdentifierCalculateNodeCheckFlags(node, symbol); + if (symbol === argumentsSymbol) { + if (isInPropertyInitializerOrClassStaticBlock(node)) { + return errorType; + } + return getTypeOfSymbol(symbol); + } + if (shouldMarkIdentifierAliasReferenced(node)) { + markLinkedReferences(node, 1 /* Identifier */); + } + const localOrExportSymbol = getExportSymbolOfValueSymbolIfExported(symbol); + let declaration = localOrExportSymbol.valueDeclaration; + const immediateDeclaration = declaration; + if (declaration && declaration.kind === 209 /* BindingElement */ && contains(contextualBindingPatterns, declaration.parent) && findAncestor(node, (parent2) => parent2 === declaration.parent)) { + return nonInferrableAnyType; + } + let type = getNarrowedTypeOfSymbol(localOrExportSymbol, node); + const assignmentKind = getAssignmentTargetKind(node); + if (assignmentKind) { + if (!(localOrExportSymbol.flags & 3 /* Variable */) && !(isInJSFile(node) && localOrExportSymbol.flags & 512 /* ValueModule */)) { + const assignmentError = localOrExportSymbol.flags & 384 /* Enum */ ? Diagnostics.Cannot_assign_to_0_because_it_is_an_enum : localOrExportSymbol.flags & 32 /* Class */ ? Diagnostics.Cannot_assign_to_0_because_it_is_a_class : localOrExportSymbol.flags & 1536 /* Module */ ? Diagnostics.Cannot_assign_to_0_because_it_is_a_namespace : localOrExportSymbol.flags & 16 /* Function */ ? Diagnostics.Cannot_assign_to_0_because_it_is_a_function : localOrExportSymbol.flags & 2097152 /* Alias */ ? Diagnostics.Cannot_assign_to_0_because_it_is_an_import : Diagnostics.Cannot_assign_to_0_because_it_is_not_a_variable; + error2(node, assignmentError, symbolToString(symbol)); + return errorType; + } + if (isReadonlySymbol(localOrExportSymbol)) { + if (localOrExportSymbol.flags & 3 /* Variable */) { + error2(node, Diagnostics.Cannot_assign_to_0_because_it_is_a_constant, symbolToString(symbol)); + } else { + error2(node, Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, symbolToString(symbol)); + } + return errorType; + } + } + const isAlias = localOrExportSymbol.flags & 2097152 /* Alias */; + if (localOrExportSymbol.flags & 3 /* Variable */) { + if (assignmentKind === 1 /* Definite */) { + return isInCompoundLikeAssignment(node) ? getBaseTypeOfLiteralType(type) : type; + } + } else if (isAlias) { + declaration = getDeclarationOfAliasSymbol(symbol); + } else { + return type; + } + if (!declaration) { + return type; + } + type = getNarrowableTypeForReference(type, node, checkMode); + const isParameter2 = getRootDeclaration(declaration).kind === 170 /* Parameter */; + const declarationContainer = getControlFlowContainer(declaration); + let flowContainer = getControlFlowContainer(node); + const isOuterVariable = flowContainer !== declarationContainer; + const isSpreadDestructuringAssignmentTarget = node.parent && node.parent.parent && isSpreadAssignment(node.parent) && isDestructuringAssignmentTarget(node.parent.parent); + const isModuleExports = symbol.flags & 134217728 /* ModuleExports */; + const typeIsAutomatic = type === autoType || type === autoArrayType; + const isAutomaticTypeInNonNull = typeIsAutomatic && node.parent.kind === 236 /* NonNullExpression */; + while (flowContainer !== declarationContainer && (flowContainer.kind === 219 /* FunctionExpression */ || flowContainer.kind === 220 /* ArrowFunction */ || isObjectLiteralOrClassExpressionMethodOrAccessor(flowContainer)) && (isConstantVariable(localOrExportSymbol) && type !== autoArrayType || isParameterOrMutableLocalVariable(localOrExportSymbol) && isPastLastAssignment(localOrExportSymbol, node))) { + flowContainer = getControlFlowContainer(flowContainer); + } + const isNeverInitialized = immediateDeclaration && isVariableDeclaration(immediateDeclaration) && !immediateDeclaration.initializer && !immediateDeclaration.exclamationToken && isMutableLocalVariableDeclaration(immediateDeclaration) && !isSymbolAssignedDefinitely(symbol); + const assumeInitialized = isParameter2 || isAlias || isOuterVariable && !isNeverInitialized || isSpreadDestructuringAssignmentTarget || isModuleExports || isSameScopedBindingElement(node, declaration) || type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 || isInTypeQuery(node) || isInAmbientOrTypeNode(node) || node.parent.kind === 282 /* ExportSpecifier */) || node.parent.kind === 236 /* NonNullExpression */ || declaration.kind === 261 /* VariableDeclaration */ && declaration.exclamationToken || declaration.flags & 33554432 /* Ambient */; + const initialType = isAutomaticTypeInNonNull ? undefinedType : assumeInitialized ? isParameter2 ? removeOptionalityFromDeclaredType(type, declaration) : type : typeIsAutomatic ? undefinedType : getOptionalType(type); + const flowType = isAutomaticTypeInNonNull ? getNonNullableType(getFlowTypeOfReference(node, type, initialType, flowContainer)) : getFlowTypeOfReference(node, type, initialType, flowContainer); + if (!isEvolvingArrayOperationTarget(node) && (type === autoType || type === autoArrayType)) { + if (flowType === autoType || flowType === autoArrayType) { + if (noImplicitAny) { + error2(getNameOfDeclaration(declaration), Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined, symbolToString(symbol), typeToString(flowType)); + error2(node, Diagnostics.Variable_0_implicitly_has_an_1_type, symbolToString(symbol), typeToString(flowType)); + } + return convertAutoToAny(flowType); + } + } else if (!assumeInitialized && !containsUndefinedType(type) && containsUndefinedType(flowType)) { + error2(node, Diagnostics.Variable_0_is_used_before_being_assigned, symbolToString(symbol)); + return type; + } + return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; + } + function isSameScopedBindingElement(node, declaration) { + if (isBindingElement(declaration)) { + const bindingElement = findAncestor(node, isBindingElement); + return bindingElement && getRootDeclaration(bindingElement) === getRootDeclaration(declaration); + } + } + function shouldMarkIdentifierAliasReferenced(node) { + var _a; + const parent2 = node.parent; + if (parent2) { + if (isPropertyAccessExpression(parent2) && parent2.expression === node) { + return false; + } + if (isExportSpecifier(parent2) && parent2.isTypeOnly) { + return false; + } + const greatGrandparent = (_a = parent2.parent) == null ? void 0 : _a.parent; + if (greatGrandparent && isExportDeclaration(greatGrandparent) && greatGrandparent.isTypeOnly) { + return false; + } + } + return true; + } + function isInsideFunctionOrInstancePropertyInitializer(node, threshold) { + return !!findAncestor(node, (n) => n === threshold ? "quit" : isFunctionLike(n) || n.parent && isPropertyDeclaration(n.parent) && !hasStaticModifier(n.parent) && n.parent.initializer === n); + } + function getPartOfForStatementContainingNode(node, container) { + return findAncestor(node, (n) => n === container ? "quit" : n === container.initializer || n === container.condition || n === container.incrementor || n === container.statement); + } + function getEnclosingIterationStatement(node) { + return findAncestor(node, (n) => !n || nodeStartsNewLexicalEnvironment(n) ? "quit" : isIterationStatement( + n, + /*lookInLabeledStatements*/ + false + )); + } + function checkNestedBlockScopedBinding(node, symbol) { + if (languageVersion >= 2 /* ES2015 */ || (symbol.flags & (2 /* BlockScopedVariable */ | 32 /* Class */)) === 0 || !symbol.valueDeclaration || isSourceFile(symbol.valueDeclaration) || symbol.valueDeclaration.parent.kind === 300 /* CatchClause */) { + return; + } + const container = getEnclosingBlockScopeContainer(symbol.valueDeclaration); + const isCaptured = isInsideFunctionOrInstancePropertyInitializer(node, container); + const enclosingIterationStatement = getEnclosingIterationStatement(container); + if (enclosingIterationStatement) { + if (isCaptured) { + let capturesBlockScopeBindingInLoopBody = true; + if (isForStatement(container)) { + const varDeclList = getAncestor(symbol.valueDeclaration, 262 /* VariableDeclarationList */); + if (varDeclList && varDeclList.parent === container) { + const part = getPartOfForStatementContainingNode(node.parent, container); + if (part) { + const links = getNodeLinks(part); + links.flags |= 8192 /* ContainsCapturedBlockScopeBinding */; + const capturedBindings = links.capturedBlockScopeBindings || (links.capturedBlockScopeBindings = []); + pushIfUnique(capturedBindings, symbol); + if (part === container.initializer) { + capturesBlockScopeBindingInLoopBody = false; + } + } + } + } + if (capturesBlockScopeBindingInLoopBody) { + getNodeLinks(enclosingIterationStatement).flags |= 4096 /* LoopWithCapturedBlockScopedBinding */; + } + } + if (isForStatement(container)) { + const varDeclList = getAncestor(symbol.valueDeclaration, 262 /* VariableDeclarationList */); + if (varDeclList && varDeclList.parent === container && isAssignedInBodyOfForStatement(node, container)) { + getNodeLinks(symbol.valueDeclaration).flags |= 65536 /* NeedsLoopOutParameter */; + } + } + getNodeLinks(symbol.valueDeclaration).flags |= 32768 /* BlockScopedBindingInLoop */; + } + if (isCaptured) { + getNodeLinks(symbol.valueDeclaration).flags |= 16384 /* CapturedBlockScopedBinding */; + } + } + function isBindingCapturedByNode(node, decl) { + const links = getNodeLinks(node); + return !!links && contains(links.capturedBlockScopeBindings, getSymbolOfDeclaration(decl)); + } + function isAssignedInBodyOfForStatement(node, container) { + let current = node; + while (current.parent.kind === 218 /* ParenthesizedExpression */) { + current = current.parent; + } + let isAssigned = false; + if (isAssignmentTarget(current)) { + isAssigned = true; + } else if (current.parent.kind === 225 /* PrefixUnaryExpression */ || current.parent.kind === 226 /* PostfixUnaryExpression */) { + const expr = current.parent; + isAssigned = expr.operator === 46 /* PlusPlusToken */ || expr.operator === 47 /* MinusMinusToken */; + } + if (!isAssigned) { + return false; + } + return !!findAncestor(current, (n) => n === container ? "quit" : n === container.statement); + } + function captureLexicalThis(node, container) { + getNodeLinks(node).flags |= 2 /* LexicalThis */; + if (container.kind === 173 /* PropertyDeclaration */ || container.kind === 177 /* Constructor */) { + const classNode = container.parent; + getNodeLinks(classNode).flags |= 4 /* CaptureThis */; + } else { + getNodeLinks(container).flags |= 4 /* CaptureThis */; + } + } + function findFirstSuperCall(node) { + return isSuperCall(node) ? node : isFunctionLike(node) ? void 0 : forEachChild(node, findFirstSuperCall); + } + function classDeclarationExtendsNull(classDecl) { + const classSymbol = getSymbolOfDeclaration(classDecl); + const classInstanceType = getDeclaredTypeOfSymbol(classSymbol); + const baseConstructorType = getBaseConstructorTypeOfClass(classInstanceType); + return baseConstructorType === nullWideningType; + } + function checkThisBeforeSuper(node, container, diagnosticMessage) { + const containingClassDecl = container.parent; + const baseTypeNode = getClassExtendsHeritageElement(containingClassDecl); + if (baseTypeNode && !classDeclarationExtendsNull(containingClassDecl)) { + if (canHaveFlowNode(node) && node.flowNode && !isPostSuperFlowNode( + node.flowNode, + /*noCacheCheck*/ + false + )) { + error2(node, diagnosticMessage); + } + } + } + function checkThisInStaticClassFieldInitializerInDecoratedClass(thisExpression, container) { + if (isPropertyDeclaration(container) && hasStaticModifier(container) && legacyDecorators && container.initializer && textRangeContainsPositionInclusive(container.initializer, thisExpression.pos) && hasDecorators(container.parent)) { + error2(thisExpression, Diagnostics.Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class); + } + } + function checkThisExpression(node) { + const isNodeInTypeQuery = isInTypeQuery(node); + let container = getThisContainer( + node, + /*includeArrowFunctions*/ + true, + /*includeClassComputedPropertyName*/ + true + ); + let capturedByArrowFunction = false; + let thisInComputedPropertyName = false; + if (container.kind === 177 /* Constructor */) { + checkThisBeforeSuper(node, container, Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class); + } + while (true) { + if (container.kind === 220 /* ArrowFunction */) { + container = getThisContainer( + container, + /*includeArrowFunctions*/ + false, + !thisInComputedPropertyName + ); + capturedByArrowFunction = true; + } + if (container.kind === 168 /* ComputedPropertyName */) { + container = getThisContainer( + container, + !capturedByArrowFunction, + /*includeClassComputedPropertyName*/ + false + ); + thisInComputedPropertyName = true; + continue; + } + break; + } + checkThisInStaticClassFieldInitializerInDecoratedClass(node, container); + if (thisInComputedPropertyName) { + error2(node, Diagnostics.this_cannot_be_referenced_in_a_computed_property_name); + } else { + switch (container.kind) { + case 268 /* ModuleDeclaration */: + error2(node, Diagnostics.this_cannot_be_referenced_in_a_module_or_namespace_body); + break; + case 267 /* EnumDeclaration */: + error2(node, Diagnostics.this_cannot_be_referenced_in_current_location); + break; + } + } + if (!isNodeInTypeQuery && capturedByArrowFunction && languageVersion < 2 /* ES2015 */) { + captureLexicalThis(node, container); + } + const type = tryGetThisTypeAt( + node, + /*includeGlobalThis*/ + true, + container + ); + if (noImplicitThis) { + const globalThisType2 = getTypeOfSymbol(globalThisSymbol); + if (type === globalThisType2 && capturedByArrowFunction) { + error2(node, Diagnostics.The_containing_arrow_function_captures_the_global_value_of_this); + } else if (!type) { + const diag2 = error2(node, Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation); + if (!isSourceFile(container)) { + const outsideThis = tryGetThisTypeAt(container); + if (outsideThis && outsideThis !== globalThisType2) { + addRelatedInfo(diag2, createDiagnosticForNode(container, Diagnostics.An_outer_value_of_this_is_shadowed_by_this_container)); + } + } + } + } + return type || anyType; + } + function tryGetThisTypeAt(node, includeGlobalThis = true, container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + )) { + const isInJS = isInJSFile(node); + if (isFunctionLike(container) && (!isInParameterInitializerBeforeContainingFunction(node) || getThisParameter(container))) { + let thisType = getThisTypeOfDeclaration(container) || isInJS && getTypeForThisExpressionFromJSDoc(container); + if (!thisType) { + const className = getClassNameFromPrototypeMethod(container); + if (isInJS && className) { + const classSymbol = checkExpression(className).symbol; + if (classSymbol && classSymbol.members && classSymbol.flags & 16 /* Function */) { + thisType = getDeclaredTypeOfSymbol(classSymbol).thisType; + } + } else if (isJSConstructor(container)) { + thisType = getDeclaredTypeOfSymbol(getMergedSymbol(container.symbol)).thisType; + } + thisType || (thisType = getContextualThisParameterType(container)); + } + if (thisType) { + return getFlowTypeOfReference(node, thisType); + } + } + if (isClassLike(container.parent)) { + const symbol = getSymbolOfDeclaration(container.parent); + const type = isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; + return getFlowTypeOfReference(node, type); + } + if (isSourceFile(container)) { + if (container.commonJsModuleIndicator) { + const fileSymbol = getSymbolOfDeclaration(container); + return fileSymbol && getTypeOfSymbol(fileSymbol); + } else if (container.externalModuleIndicator) { + return undefinedType; + } else if (includeGlobalThis) { + return getTypeOfSymbol(globalThisSymbol); + } + } + } + function getExplicitThisType(node) { + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (isFunctionLike(container)) { + const signature = getSignatureFromDeclaration(container); + if (signature.thisParameter) { + return getExplicitTypeOfSymbol(signature.thisParameter); + } + } + if (isClassLike(container.parent)) { + const symbol = getSymbolOfDeclaration(container.parent); + return isStatic(container) ? getTypeOfSymbol(symbol) : getDeclaredTypeOfSymbol(symbol).thisType; + } + } + function getClassNameFromPrototypeMethod(container) { + if (container.kind === 219 /* FunctionExpression */ && isBinaryExpression(container.parent) && getAssignmentDeclarationKind(container.parent) === 3 /* PrototypeProperty */) { + return container.parent.left.expression.expression; + } else if (container.kind === 175 /* MethodDeclaration */ && container.parent.kind === 211 /* ObjectLiteralExpression */ && isBinaryExpression(container.parent.parent) && getAssignmentDeclarationKind(container.parent.parent) === 6 /* Prototype */) { + return container.parent.parent.left.expression; + } else if (container.kind === 219 /* FunctionExpression */ && container.parent.kind === 304 /* PropertyAssignment */ && container.parent.parent.kind === 211 /* ObjectLiteralExpression */ && isBinaryExpression(container.parent.parent.parent) && getAssignmentDeclarationKind(container.parent.parent.parent) === 6 /* Prototype */) { + return container.parent.parent.parent.left.expression; + } else if (container.kind === 219 /* FunctionExpression */ && isPropertyAssignment(container.parent) && isIdentifier(container.parent.name) && (container.parent.name.escapedText === "value" || container.parent.name.escapedText === "get" || container.parent.name.escapedText === "set") && isObjectLiteralExpression(container.parent.parent) && isCallExpression(container.parent.parent.parent) && container.parent.parent.parent.arguments[2] === container.parent.parent && getAssignmentDeclarationKind(container.parent.parent.parent) === 9 /* ObjectDefinePrototypeProperty */) { + return container.parent.parent.parent.arguments[0].expression; + } else if (isMethodDeclaration(container) && isIdentifier(container.name) && (container.name.escapedText === "value" || container.name.escapedText === "get" || container.name.escapedText === "set") && isObjectLiteralExpression(container.parent) && isCallExpression(container.parent.parent) && container.parent.parent.arguments[2] === container.parent && getAssignmentDeclarationKind(container.parent.parent) === 9 /* ObjectDefinePrototypeProperty */) { + return container.parent.parent.arguments[0].expression; + } + } + function getTypeForThisExpressionFromJSDoc(node) { + const thisTag = getJSDocThisTag(node); + if (thisTag && thisTag.typeExpression) { + return getTypeFromTypeNode(thisTag.typeExpression); + } + const signature = getSignatureOfTypeTag(node); + if (signature) { + return getThisTypeOfSignature(signature); + } + } + function isInConstructorArgumentInitializer(node, constructorDecl) { + return !!findAncestor(node, (n) => isFunctionLikeDeclaration(n) ? "quit" : n.kind === 170 /* Parameter */ && n.parent === constructorDecl); + } + function checkSuperExpression(node) { + const isCallExpression2 = node.parent.kind === 214 /* CallExpression */ && node.parent.expression === node; + const immediateContainer = getSuperContainer( + node, + /*stopOnFunctions*/ + true + ); + let container = immediateContainer; + let needToCaptureLexicalThis = false; + let inAsyncFunction = false; + if (!isCallExpression2) { + while (container && container.kind === 220 /* ArrowFunction */) { + if (hasSyntacticModifier(container, 1024 /* Async */)) inAsyncFunction = true; + container = getSuperContainer( + container, + /*stopOnFunctions*/ + true + ); + needToCaptureLexicalThis = languageVersion < 2 /* ES2015 */; + } + if (container && hasSyntacticModifier(container, 1024 /* Async */)) inAsyncFunction = true; + } + let nodeCheckFlag = 0; + if (!container || !isLegalUsageOfSuperExpression(container)) { + const current = findAncestor(node, (n) => n === container ? "quit" : n.kind === 168 /* ComputedPropertyName */); + if (current && current.kind === 168 /* ComputedPropertyName */) { + error2(node, Diagnostics.super_cannot_be_referenced_in_a_computed_property_name); + } else if (isCallExpression2) { + error2(node, Diagnostics.Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors); + } else if (!container || !container.parent || !(isClassLike(container.parent) || container.parent.kind === 211 /* ObjectLiteralExpression */)) { + error2(node, Diagnostics.super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions); + } else { + error2(node, Diagnostics.super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_derived_class); + } + return errorType; + } + if (!isCallExpression2 && immediateContainer.kind === 177 /* Constructor */) { + checkThisBeforeSuper(node, container, Diagnostics.super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class); + } + if (isStatic(container) || isCallExpression2) { + nodeCheckFlag = 32 /* SuperStatic */; + if (!isCallExpression2 && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ && (isPropertyDeclaration(container) || isClassStaticBlockDeclaration(container))) { + forEachEnclosingBlockScopeContainer(node.parent, (current) => { + if (!isSourceFile(current) || isExternalOrCommonJsModule(current)) { + getNodeLinks(current).flags |= 2097152 /* ContainsSuperPropertyInStaticInitializer */; + } + }); + } + } else { + nodeCheckFlag = 16 /* SuperInstance */; + } + getNodeLinks(node).flags |= nodeCheckFlag; + if (container.kind === 175 /* MethodDeclaration */ && inAsyncFunction) { + if (isSuperProperty(node.parent) && isAssignmentTarget(node.parent)) { + getNodeLinks(container).flags |= 256 /* MethodWithSuperPropertyAssignmentInAsync */; + } else { + getNodeLinks(container).flags |= 128 /* MethodWithSuperPropertyAccessInAsync */; + } + } + if (needToCaptureLexicalThis) { + captureLexicalThis(node.parent, container); + } + if (container.parent.kind === 211 /* ObjectLiteralExpression */) { + if (languageVersion < 2 /* ES2015 */) { + error2(node, Diagnostics.super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_higher); + return errorType; + } else { + return anyType; + } + } + const classLikeDeclaration = container.parent; + if (!getClassExtendsHeritageElement(classLikeDeclaration)) { + error2(node, Diagnostics.super_can_only_be_referenced_in_a_derived_class); + return errorType; + } + if (classDeclarationExtendsNull(classLikeDeclaration)) { + return isCallExpression2 ? errorType : nullWideningType; + } + const classType = getDeclaredTypeOfSymbol(getSymbolOfDeclaration(classLikeDeclaration)); + const baseClassType = classType && getBaseTypes(classType)[0]; + if (!baseClassType) { + return errorType; + } + if (container.kind === 177 /* Constructor */ && isInConstructorArgumentInitializer(node, container)) { + error2(node, Diagnostics.super_cannot_be_referenced_in_constructor_arguments); + return errorType; + } + return nodeCheckFlag === 32 /* SuperStatic */ ? getBaseConstructorTypeOfClass(classType) : getTypeWithThisArgument(baseClassType, classType.thisType); + function isLegalUsageOfSuperExpression(container2) { + if (isCallExpression2) { + return container2.kind === 177 /* Constructor */; + } else { + if (isClassLike(container2.parent) || container2.parent.kind === 211 /* ObjectLiteralExpression */) { + if (isStatic(container2)) { + return container2.kind === 175 /* MethodDeclaration */ || container2.kind === 174 /* MethodSignature */ || container2.kind === 178 /* GetAccessor */ || container2.kind === 179 /* SetAccessor */ || container2.kind === 173 /* PropertyDeclaration */ || container2.kind === 176 /* ClassStaticBlockDeclaration */; + } else { + return container2.kind === 175 /* MethodDeclaration */ || container2.kind === 174 /* MethodSignature */ || container2.kind === 178 /* GetAccessor */ || container2.kind === 179 /* SetAccessor */ || container2.kind === 173 /* PropertyDeclaration */ || container2.kind === 172 /* PropertySignature */ || container2.kind === 177 /* Constructor */; + } + } + } + return false; + } + } + function getContainingObjectLiteral(func) { + return (func.kind === 175 /* MethodDeclaration */ || func.kind === 178 /* GetAccessor */ || func.kind === 179 /* SetAccessor */) && func.parent.kind === 211 /* ObjectLiteralExpression */ ? func.parent : func.kind === 219 /* FunctionExpression */ && func.parent.kind === 304 /* PropertyAssignment */ ? func.parent.parent : void 0; + } + function getThisTypeArgument(type) { + return getObjectFlags(type) & 4 /* Reference */ && type.target === globalThisType ? getTypeArguments(type)[0] : void 0; + } + function getThisTypeFromContextualType(type) { + return mapType(type, (t) => { + return t.flags & 2097152 /* Intersection */ ? forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t); + }); + } + function getThisTypeOfObjectLiteralFromContextualType(containingLiteral, contextualType) { + let literal = containingLiteral; + let type = contextualType; + while (type) { + const thisType = getThisTypeFromContextualType(type); + if (thisType) { + return thisType; + } + if (literal.parent.kind !== 304 /* PropertyAssignment */) { + break; + } + literal = literal.parent.parent; + type = getApparentTypeOfContextualType( + literal, + /*contextFlags*/ + void 0 + ); + } + } + function getContextualThisParameterType(func) { + if (func.kind === 220 /* ArrowFunction */) { + return void 0; + } + if (isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + const contextualSignature = getContextualSignature(func); + if (contextualSignature) { + const thisParameter = contextualSignature.thisParameter; + if (thisParameter) { + return getTypeOfSymbol(thisParameter); + } + } + } + const inJs = isInJSFile(func); + if (noImplicitThis || inJs) { + const containingLiteral = getContainingObjectLiteral(func); + if (containingLiteral) { + const contextualType = getApparentTypeOfContextualType( + containingLiteral, + /*contextFlags*/ + void 0 + ); + const thisType = getThisTypeOfObjectLiteralFromContextualType(containingLiteral, contextualType); + if (thisType) { + return instantiateType(thisType, getMapperFromContext(getInferenceContext(containingLiteral))); + } + return getWidenedType(contextualType ? getNonNullableType(contextualType) : checkExpressionCached(containingLiteral)); + } + const parent2 = walkUpParenthesizedExpressions(func.parent); + if (isAssignmentExpression(parent2)) { + const target = parent2.left; + if (isAccessExpression(target)) { + const { expression } = target; + if (inJs && isIdentifier(expression)) { + const sourceFile = getSourceFileOfNode(parent2); + if (sourceFile.commonJsModuleIndicator && getResolvedSymbol(expression) === sourceFile.symbol) { + return void 0; + } + } + return getWidenedType(checkExpressionCached(expression)); + } + } + } + return void 0; + } + function getContextuallyTypedParameterType(parameter) { + const func = parameter.parent; + if (!isContextSensitiveFunctionOrObjectLiteralMethod(func)) { + return void 0; + } + const iife = getImmediatelyInvokedFunctionExpression(func); + if (iife && iife.arguments) { + const args = getEffectiveCallArguments(iife); + const indexOfParameter = func.parameters.indexOf(parameter); + if (parameter.dotDotDotToken) { + return getSpreadArgumentType( + args, + indexOfParameter, + args.length, + anyType, + /*context*/ + void 0, + 0 /* Normal */ + ); + } + const links = getNodeLinks(iife); + const cached = links.resolvedSignature; + links.resolvedSignature = anySignature; + const type = indexOfParameter < args.length ? getWidenedLiteralType(checkExpression(args[indexOfParameter])) : parameter.initializer ? void 0 : undefinedWideningType; + links.resolvedSignature = cached; + return type; + } + const contextualSignature = getContextualSignature(func); + if (contextualSignature) { + const index = func.parameters.indexOf(parameter) - (getThisParameter(func) ? 1 : 0); + return parameter.dotDotDotToken && lastOrUndefined(func.parameters) === parameter ? getRestTypeAtPosition(contextualSignature, index) : tryGetTypeAtPosition(contextualSignature, index); + } + } + function getContextualTypeForVariableLikeDeclaration(declaration, contextFlags) { + const typeNode = getEffectiveTypeAnnotationNode(declaration) || (isInJSFile(declaration) ? tryGetJSDocSatisfiesTypeNode(declaration) : void 0); + if (typeNode) { + return getTypeFromTypeNode(typeNode); + } + switch (declaration.kind) { + case 170 /* Parameter */: + return getContextuallyTypedParameterType(declaration); + case 209 /* BindingElement */: + return getContextualTypeForBindingElement(declaration, contextFlags); + case 173 /* PropertyDeclaration */: + if (isStatic(declaration)) { + return getContextualTypeForStaticPropertyDeclaration(declaration, contextFlags); + } + } + } + function getContextualTypeForBindingElement(declaration, contextFlags) { + const parent2 = declaration.parent.parent; + const name = declaration.propertyName || declaration.name; + const parentType = getContextualTypeForVariableLikeDeclaration(parent2, contextFlags) || parent2.kind !== 209 /* BindingElement */ && parent2.initializer && checkDeclarationInitializer(parent2, declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */); + if (!parentType || isBindingPattern(name) || isComputedNonLiteralName(name)) return void 0; + if (parent2.name.kind === 208 /* ArrayBindingPattern */) { + const index = indexOfNode(declaration.parent.elements, declaration); + if (index < 0) return void 0; + return getContextualTypeForElementExpression(parentType, index); + } + const nameType = getLiteralTypeFromPropertyName(name); + if (isTypeUsableAsPropertyName(nameType)) { + const text = getPropertyNameFromType(nameType); + return getTypeOfPropertyOfType(parentType, text); + } + } + function getContextualTypeForStaticPropertyDeclaration(declaration, contextFlags) { + const parentType = isExpression(declaration.parent) && getContextualType2(declaration.parent, contextFlags); + if (!parentType) return void 0; + return getTypeOfPropertyOfContextualType(parentType, getSymbolOfDeclaration(declaration).escapedName); + } + function getContextualTypeForInitializerExpression(node, contextFlags) { + const declaration = node.parent; + if (hasInitializer(declaration) && node === declaration.initializer) { + const result = getContextualTypeForVariableLikeDeclaration(declaration, contextFlags); + if (result) { + return result; + } + if (!(contextFlags & 8 /* SkipBindingPatterns */) && isBindingPattern(declaration.name) && declaration.name.elements.length > 0) { + return getTypeFromBindingPattern( + declaration.name, + /*includePatternInType*/ + true, + /*reportErrors*/ + false + ); + } + } + return void 0; + } + function getContextualTypeForReturnExpression(node, contextFlags) { + const func = getContainingFunction(node); + if (func) { + let contextualReturnType = getContextualReturnType(func, contextFlags); + if (contextualReturnType) { + const functionFlags = getFunctionFlags(func); + if (functionFlags & 1 /* Generator */) { + const isAsyncGenerator = (functionFlags & 2 /* Async */) !== 0; + if (contextualReturnType.flags & 1048576 /* Union */) { + contextualReturnType = filterType(contextualReturnType, (type) => !!getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, type, isAsyncGenerator)); + } + const iterationReturnType = getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, contextualReturnType, (functionFlags & 2 /* Async */) !== 0); + if (!iterationReturnType) { + return void 0; + } + contextualReturnType = iterationReturnType; + } + if (functionFlags & 2 /* Async */) { + const contextualAwaitedType = mapType(contextualReturnType, getAwaitedTypeNoAlias); + return contextualAwaitedType && getUnionType([contextualAwaitedType, createPromiseLikeType(contextualAwaitedType)]); + } + return contextualReturnType; + } + } + return void 0; + } + function getContextualTypeForAwaitOperand(node, contextFlags) { + const contextualType = getContextualType2(node, contextFlags); + if (contextualType) { + const contextualAwaitedType = getAwaitedTypeNoAlias(contextualType); + return contextualAwaitedType && getUnionType([contextualAwaitedType, createPromiseLikeType(contextualAwaitedType)]); + } + return void 0; + } + function getContextualTypeForYieldOperand(node, contextFlags) { + const func = getContainingFunction(node); + if (func) { + const functionFlags = getFunctionFlags(func); + let contextualReturnType = getContextualReturnType(func, contextFlags); + if (contextualReturnType) { + const isAsyncGenerator = (functionFlags & 2 /* Async */) !== 0; + if (!node.asteriskToken && contextualReturnType.flags & 1048576 /* Union */) { + contextualReturnType = filterType(contextualReturnType, (type) => !!getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, type, isAsyncGenerator)); + } + if (node.asteriskToken) { + const iterationTypes = getIterationTypesOfGeneratorFunctionReturnType(contextualReturnType, isAsyncGenerator); + const yieldType = (iterationTypes == null ? void 0 : iterationTypes.yieldType) ?? silentNeverType; + const returnType = getContextualType2(node, contextFlags) ?? silentNeverType; + const nextType = (iterationTypes == null ? void 0 : iterationTypes.nextType) ?? unknownType; + const generatorType = createGeneratorType( + yieldType, + returnType, + nextType, + /*isAsyncGenerator*/ + false + ); + if (isAsyncGenerator) { + const asyncGeneratorType = createGeneratorType( + yieldType, + returnType, + nextType, + /*isAsyncGenerator*/ + true + ); + return getUnionType([generatorType, asyncGeneratorType]); + } + return generatorType; + } + return getIterationTypeOfGeneratorFunctionReturnType(0 /* Yield */, contextualReturnType, isAsyncGenerator); + } + } + return void 0; + } + function isInParameterInitializerBeforeContainingFunction(node) { + let inBindingInitializer = false; + while (node.parent && !isFunctionLike(node.parent)) { + if (isParameter(node.parent) && (inBindingInitializer || node.parent.initializer === node)) { + return true; + } + if (isBindingElement(node.parent) && node.parent.initializer === node) { + inBindingInitializer = true; + } + node = node.parent; + } + return false; + } + function getContextualIterationType(kind, functionDecl) { + const isAsync = !!(getFunctionFlags(functionDecl) & 2 /* Async */); + const contextualReturnType = getContextualReturnType( + functionDecl, + /*contextFlags*/ + void 0 + ); + if (contextualReturnType) { + return getIterationTypeOfGeneratorFunctionReturnType(kind, contextualReturnType, isAsync) || void 0; + } + return void 0; + } + function getContextualReturnType(functionDecl, contextFlags) { + const returnType = getReturnTypeFromAnnotation(functionDecl); + if (returnType) { + return returnType; + } + const signature = getContextualSignatureForFunctionLikeDeclaration(functionDecl); + if (signature && !isResolvingReturnTypeOfSignature(signature)) { + const returnType2 = getReturnTypeOfSignature(signature); + const functionFlags = getFunctionFlags(functionDecl); + if (functionFlags & 1 /* Generator */) { + return filterType(returnType2, (t) => { + return !!(t.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */ | 58982400 /* InstantiableNonPrimitive */)) || checkGeneratorInstantiationAssignabilityToReturnType( + t, + functionFlags, + /*errorNode*/ + void 0 + ); + }); + } + if (functionFlags & 2 /* Async */) { + return filterType(returnType2, (t) => { + return !!(t.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */ | 58982400 /* InstantiableNonPrimitive */)) || !!getAwaitedTypeOfPromise(t); + }); + } + return returnType2; + } + const iife = getImmediatelyInvokedFunctionExpression(functionDecl); + if (iife) { + return getContextualType2(iife, contextFlags); + } + return void 0; + } + function getContextualTypeForArgument(callTarget, arg) { + const args = getEffectiveCallArguments(callTarget); + const argIndex = args.indexOf(arg); + return argIndex === -1 ? void 0 : getContextualTypeForArgumentAtIndex(callTarget, argIndex); + } + function getContextualTypeForArgumentAtIndex(callTarget, argIndex) { + if (isImportCall(callTarget)) { + return argIndex === 0 ? stringType : argIndex === 1 ? getGlobalImportCallOptionsType( + /*reportErrors*/ + false + ) : anyType; + } + const signature = getNodeLinks(callTarget).resolvedSignature === resolvingSignature ? resolvingSignature : getResolvedSignature(callTarget); + if (isJsxOpeningLikeElement(callTarget) && argIndex === 0) { + return getEffectiveFirstArgumentForJsxSignature(signature, callTarget); + } + const restIndex = signature.parameters.length - 1; + return signatureHasRestParameter(signature) && argIndex >= restIndex ? getIndexedAccessType(getTypeOfSymbol(signature.parameters[restIndex]), getNumberLiteralType(argIndex - restIndex), 256 /* Contextual */) : getTypeAtPosition(signature, argIndex); + } + function getContextualTypeForDecorator(decorator) { + const signature = getDecoratorCallSignature(decorator); + return signature ? getOrCreateTypeFromSignature(signature) : void 0; + } + function getContextualTypeForSubstitutionExpression(template, substitutionExpression) { + if (template.parent.kind === 216 /* TaggedTemplateExpression */) { + return getContextualTypeForArgument(template.parent, substitutionExpression); + } + return void 0; + } + function getContextualTypeForBinaryOperand(node, contextFlags) { + const binaryExpression = node.parent; + const { left, operatorToken, right } = binaryExpression; + switch (operatorToken.kind) { + case 64 /* EqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 76 /* BarBarEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return node === right ? getContextualTypeForAssignmentDeclaration(binaryExpression) : void 0; + case 57 /* BarBarToken */: + case 61 /* QuestionQuestionToken */: + const type = getContextualType2(binaryExpression, contextFlags); + return node === right && (type && type.pattern || !type && !isDefaultedExpandoInitializer(binaryExpression)) ? getTypeOfExpression(left) : type; + case 56 /* AmpersandAmpersandToken */: + case 28 /* CommaToken */: + return node === right ? getContextualType2(binaryExpression, contextFlags) : void 0; + default: + return void 0; + } + } + function getSymbolForExpression(e) { + if (canHaveSymbol(e) && e.symbol) { + return e.symbol; + } + if (isIdentifier(e)) { + return getResolvedSymbol(e); + } + if (isPropertyAccessExpression(e)) { + const lhsType = getTypeOfExpression(e.expression); + return isPrivateIdentifier(e.name) ? tryGetPrivateIdentifierPropertyOfType(lhsType, e.name) : getPropertyOfType(lhsType, e.name.escapedText); + } + if (isElementAccessExpression(e)) { + const propType = checkExpressionCached(e.argumentExpression); + if (!isTypeUsableAsPropertyName(propType)) { + return void 0; + } + const lhsType = getTypeOfExpression(e.expression); + return getPropertyOfType(lhsType, getPropertyNameFromType(propType)); + } + return void 0; + function tryGetPrivateIdentifierPropertyOfType(type, id) { + const lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(id.escapedText, id); + return lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(type, lexicallyScopedSymbol); + } + } + function getContextualTypeForAssignmentDeclaration(binaryExpression) { + var _a, _b; + const kind = getAssignmentDeclarationKind(binaryExpression); + switch (kind) { + case 0 /* None */: + case 4 /* ThisProperty */: + const lhsSymbol = getSymbolForExpression(binaryExpression.left); + const decl = lhsSymbol && lhsSymbol.valueDeclaration; + if (decl && (isPropertyDeclaration(decl) || isPropertySignature(decl))) { + const overallAnnotation = getEffectiveTypeAnnotationNode(decl); + return overallAnnotation && instantiateType(getTypeFromTypeNode(overallAnnotation), getSymbolLinks(lhsSymbol).mapper) || (isPropertyDeclaration(decl) ? decl.initializer && getTypeOfExpression(binaryExpression.left) : void 0); + } + if (kind === 0 /* None */) { + return getTypeOfExpression(binaryExpression.left); + } + return getContextualTypeForThisPropertyAssignment(binaryExpression); + case 5 /* Property */: + if (isPossiblyAliasedThisProperty(binaryExpression, kind)) { + return getContextualTypeForThisPropertyAssignment(binaryExpression); + } else if (!canHaveSymbol(binaryExpression.left) || !binaryExpression.left.symbol) { + return getTypeOfExpression(binaryExpression.left); + } else { + const decl2 = binaryExpression.left.symbol.valueDeclaration; + if (!decl2) { + return void 0; + } + const lhs = cast(binaryExpression.left, isAccessExpression); + const overallAnnotation = getEffectiveTypeAnnotationNode(decl2); + if (overallAnnotation) { + return getTypeFromTypeNode(overallAnnotation); + } else if (isIdentifier(lhs.expression)) { + const id = lhs.expression; + const parentSymbol = resolveName( + id, + id.escapedText, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (parentSymbol) { + const annotated2 = parentSymbol.valueDeclaration && getEffectiveTypeAnnotationNode(parentSymbol.valueDeclaration); + if (annotated2) { + const nameStr = getElementOrPropertyAccessName(lhs); + if (nameStr !== void 0) { + return getTypeOfPropertyOfContextualType(getTypeFromTypeNode(annotated2), nameStr); + } + } + return void 0; + } + } + return isInJSFile(decl2) || decl2 === binaryExpression.left ? void 0 : getTypeOfExpression(binaryExpression.left); + } + case 1 /* ExportsProperty */: + case 6 /* Prototype */: + case 3 /* PrototypeProperty */: + case 2 /* ModuleExports */: + let valueDeclaration; + if (kind !== 2 /* ModuleExports */) { + valueDeclaration = canHaveSymbol(binaryExpression.left) ? (_a = binaryExpression.left.symbol) == null ? void 0 : _a.valueDeclaration : void 0; + } + valueDeclaration || (valueDeclaration = (_b = binaryExpression.symbol) == null ? void 0 : _b.valueDeclaration); + const annotated = valueDeclaration && getEffectiveTypeAnnotationNode(valueDeclaration); + return annotated ? getTypeFromTypeNode(annotated) : void 0; + case 7 /* ObjectDefinePropertyValue */: + case 8 /* ObjectDefinePropertyExports */: + case 9 /* ObjectDefinePrototypeProperty */: + return Debug.fail("Does not apply"); + default: + return Debug.assertNever(kind); + } + } + function isPossiblyAliasedThisProperty(declaration, kind = getAssignmentDeclarationKind(declaration)) { + if (kind === 4 /* ThisProperty */) { + return true; + } + if (!isInJSFile(declaration) || kind !== 5 /* Property */ || !isIdentifier(declaration.left.expression)) { + return false; + } + const name = declaration.left.expression.escapedText; + const symbol = resolveName( + declaration.left, + name, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true, + /*excludeGlobals*/ + true + ); + return isThisInitializedDeclaration(symbol == null ? void 0 : symbol.valueDeclaration); + } + function getContextualTypeForThisPropertyAssignment(binaryExpression) { + if (!binaryExpression.symbol) return getTypeOfExpression(binaryExpression.left); + if (binaryExpression.symbol.valueDeclaration) { + const annotated = getEffectiveTypeAnnotationNode(binaryExpression.symbol.valueDeclaration); + if (annotated) { + const type = getTypeFromTypeNode(annotated); + if (type) { + return type; + } + } + } + const thisAccess = cast(binaryExpression.left, isAccessExpression); + if (!isObjectLiteralMethod(getThisContainer( + thisAccess.expression, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ))) { + return void 0; + } + const thisType = checkThisExpression(thisAccess.expression); + const nameStr = getElementOrPropertyAccessName(thisAccess); + return nameStr !== void 0 && getTypeOfPropertyOfContextualType(thisType, nameStr) || void 0; + } + function isCircularMappedProperty(symbol) { + return !!(getCheckFlags(symbol) & 262144 /* Mapped */ && !symbol.links.type && findResolutionCycleStartIndex(symbol, 0 /* Type */) >= 0); + } + function isExcludedMappedPropertyName(constraint, propertyNameType) { + if (constraint.flags & 16777216 /* Conditional */) { + const type = constraint; + return !!(getReducedType(getTrueTypeFromConditionalType(type)).flags & 131072 /* Never */) && getActualTypeVariable(getFalseTypeFromConditionalType(type)) === getActualTypeVariable(type.checkType) && isTypeAssignableTo(propertyNameType, type.extendsType); + } + if (constraint.flags & 2097152 /* Intersection */) { + return some(constraint.types, (t) => isExcludedMappedPropertyName(t, propertyNameType)); + } + return false; + } + function getTypeOfPropertyOfContextualType(type, name, nameType) { + return mapType( + type, + (t) => { + if (t.flags & 2097152 /* Intersection */) { + let types; + let indexInfoCandidates; + let ignoreIndexInfos = false; + for (const constituentType of t.types) { + if (!(constituentType.flags & 524288 /* Object */)) { + continue; + } + if (isGenericMappedType(constituentType) && getMappedTypeNameTypeKind(constituentType) !== 2 /* Remapping */) { + const substitutedType = getIndexedMappedTypeSubstitutedTypeOfContextualType(constituentType, name, nameType); + types = appendContextualPropertyTypeConstituent(types, substitutedType); + continue; + } + const propertyType = getTypeOfConcretePropertyOfContextualType(constituentType, name); + if (!propertyType) { + if (!ignoreIndexInfos) { + indexInfoCandidates = append(indexInfoCandidates, constituentType); + } + continue; + } + ignoreIndexInfos = true; + indexInfoCandidates = void 0; + types = appendContextualPropertyTypeConstituent(types, propertyType); + } + if (indexInfoCandidates) { + for (const candidate of indexInfoCandidates) { + const indexInfoType = getTypeFromIndexInfosOfContextualType(candidate, name, nameType); + types = appendContextualPropertyTypeConstituent(types, indexInfoType); + } + } + if (!types) { + return; + } + if (types.length === 1) { + return types[0]; + } + return getIntersectionType(types); + } + if (!(t.flags & 524288 /* Object */)) { + return; + } + return isGenericMappedType(t) && getMappedTypeNameTypeKind(t) !== 2 /* Remapping */ ? getIndexedMappedTypeSubstitutedTypeOfContextualType(t, name, nameType) : getTypeOfConcretePropertyOfContextualType(t, name) ?? getTypeFromIndexInfosOfContextualType(t, name, nameType); + }, + /*noReductions*/ + true + ); + } + function appendContextualPropertyTypeConstituent(types, type) { + return type ? append(types, type.flags & 1 /* Any */ ? unknownType : type) : types; + } + function getIndexedMappedTypeSubstitutedTypeOfContextualType(type, name, nameType) { + const propertyNameType = nameType || getStringLiteralType(unescapeLeadingUnderscores(name)); + const constraint = getConstraintTypeFromMappedType(type); + if (type.nameType && isExcludedMappedPropertyName(type.nameType, propertyNameType) || isExcludedMappedPropertyName(constraint, propertyNameType)) { + return; + } + const constraintOfConstraint = getBaseConstraintOfType(constraint) || constraint; + if (!isTypeAssignableTo(propertyNameType, constraintOfConstraint)) { + return; + } + return substituteIndexedMappedType(type, propertyNameType); + } + function getTypeOfConcretePropertyOfContextualType(type, name) { + const prop = getPropertyOfType(type, name); + if (!prop || isCircularMappedProperty(prop)) { + return; + } + return removeMissingType(getTypeOfSymbol(prop), !!(prop.flags & 16777216 /* Optional */)); + } + function getTypeFromIndexInfosOfContextualType(type, name, nameType) { + var _a; + if (isTupleType(type) && isNumericLiteralName(name) && +name >= 0) { + const restType = getElementTypeOfSliceOfTupleType( + type, + type.target.fixedLength, + /*endSkipCount*/ + 0, + /*writing*/ + false, + /*noReductions*/ + true + ); + if (restType) { + return restType; + } + } + return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(type), nameType || getStringLiteralType(unescapeLeadingUnderscores(name)))) == null ? void 0 : _a.type; + } + function getContextualTypeForObjectLiteralMethod(node, contextFlags) { + Debug.assert(isObjectLiteralMethod(node)); + if (node.flags & 67108864 /* InWithStatement */) { + return void 0; + } + return getContextualTypeForObjectLiteralElement(node, contextFlags); + } + function getContextualTypeForObjectLiteralElement(element, contextFlags) { + const objectLiteral = element.parent; + const propertyAssignmentType = isPropertyAssignment(element) && getContextualTypeForVariableLikeDeclaration(element, contextFlags); + if (propertyAssignmentType) { + return propertyAssignmentType; + } + const type = getApparentTypeOfContextualType(objectLiteral, contextFlags); + if (type) { + if (hasBindableName(element)) { + const symbol = getSymbolOfDeclaration(element); + return getTypeOfPropertyOfContextualType(type, symbol.escapedName, getSymbolLinks(symbol).nameType); + } + if (hasDynamicName(element)) { + const name = getNameOfDeclaration(element); + if (name && isComputedPropertyName(name)) { + const exprType = checkExpression(name.expression); + const propType = isTypeUsableAsPropertyName(exprType) && getTypeOfPropertyOfContextualType(type, getPropertyNameFromType(exprType)); + if (propType) { + return propType; + } + } + } + if (element.name) { + const nameType = getLiteralTypeFromPropertyName(element.name); + return mapType( + type, + (t) => { + var _a; + return (_a = findApplicableIndexInfo(getIndexInfosOfStructuredType(t), nameType)) == null ? void 0 : _a.type; + }, + /*noReductions*/ + true + ); + } + } + return void 0; + } + function getSpreadIndices(elements) { + let first2, last2; + for (let i = 0; i < elements.length; i++) { + if (isSpreadElement(elements[i])) { + first2 ?? (first2 = i); + last2 = i; + } + } + return { first: first2, last: last2 }; + } + function getContextualTypeForElementExpression(type, index, length2, firstSpreadIndex, lastSpreadIndex) { + return type && mapType( + type, + (t) => { + if (isTupleType(t)) { + if ((firstSpreadIndex === void 0 || index < firstSpreadIndex) && index < t.target.fixedLength) { + return removeMissingType(getTypeArguments(t)[index], !!(t.target.elementFlags[index] && 2 /* Optional */)); + } + const offset = length2 !== void 0 && (lastSpreadIndex === void 0 || index > lastSpreadIndex) ? length2 - index : 0; + const fixedEndLength = offset > 0 && t.target.combinedFlags & 12 /* Variable */ ? getEndElementCount(t.target, 3 /* Fixed */) : 0; + if (offset > 0 && offset <= fixedEndLength) { + return getTypeArguments(t)[getTypeReferenceArity(t) - offset]; + } + return getElementTypeOfSliceOfTupleType( + t, + firstSpreadIndex === void 0 ? t.target.fixedLength : Math.min(t.target.fixedLength, firstSpreadIndex), + length2 === void 0 || lastSpreadIndex === void 0 ? fixedEndLength : Math.min(fixedEndLength, length2 - lastSpreadIndex), + /*writing*/ + false, + /*noReductions*/ + true + ); + } + return (!firstSpreadIndex || index < firstSpreadIndex) && getTypeOfPropertyOfContextualType(t, "" + index) || getIteratedTypeOrElementType( + 1 /* Element */, + t, + undefinedType, + /*errorNode*/ + void 0, + /*checkAssignability*/ + false + ); + }, + /*noReductions*/ + true + ); + } + function getContextualTypeForConditionalOperand(node, contextFlags) { + const conditional = node.parent; + return node === conditional.whenTrue || node === conditional.whenFalse ? getContextualType2(conditional, contextFlags) : void 0; + } + function getContextualTypeForChildJsxExpression(node, child, contextFlags) { + const attributesType = getApparentTypeOfContextualType(node.openingElement.attributes, contextFlags); + const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node)); + if (!(attributesType && !isTypeAny(attributesType) && jsxChildrenPropertyName && jsxChildrenPropertyName !== "")) { + return void 0; + } + const realChildren = getSemanticJsxChildren(node.children); + const childIndex = realChildren.indexOf(child); + const childFieldType = getTypeOfPropertyOfContextualType(attributesType, jsxChildrenPropertyName); + return childFieldType && (realChildren.length === 1 ? childFieldType : mapType( + childFieldType, + (t) => { + if (isArrayLikeType(t)) { + return getIndexedAccessType(t, getNumberLiteralType(childIndex)); + } else { + return t; + } + }, + /*noReductions*/ + true + )); + } + function getContextualTypeForJsxExpression(node, contextFlags) { + const exprParent = node.parent; + return isJsxAttributeLike(exprParent) ? getContextualType2(node, contextFlags) : isJsxElement(exprParent) ? getContextualTypeForChildJsxExpression(exprParent, node, contextFlags) : void 0; + } + function getContextualTypeForJsxAttribute(attribute, contextFlags) { + if (isJsxAttribute(attribute)) { + const attributesType = getApparentTypeOfContextualType(attribute.parent, contextFlags); + if (!attributesType || isTypeAny(attributesType)) { + return void 0; + } + return getTypeOfPropertyOfContextualType(attributesType, getEscapedTextOfJsxAttributeName(attribute.name)); + } else { + return getContextualType2(attribute.parent, contextFlags); + } + } + function isPossiblyDiscriminantValue(node) { + switch (node.kind) { + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 229 /* TemplateExpression */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 106 /* NullKeyword */: + case 80 /* Identifier */: + case 157 /* UndefinedKeyword */: + return true; + case 212 /* PropertyAccessExpression */: + case 218 /* ParenthesizedExpression */: + return isPossiblyDiscriminantValue(node.expression); + case 295 /* JsxExpression */: + return !node.expression || isPossiblyDiscriminantValue(node.expression); + } + return false; + } + function discriminateContextualTypeByObjectMembers(node, contextualType) { + const key = `D${getNodeId(node)},${getTypeId(contextualType)}`; + return getCachedType(key) ?? setCachedType( + key, + getMatchingUnionConstituentForObjectLiteral(contextualType, node) ?? discriminateTypeByDiscriminableItems( + contextualType, + concatenate( + map( + filter(node.properties, (p) => { + if (!p.symbol) { + return false; + } + if (p.kind === 304 /* PropertyAssignment */) { + return isPossiblyDiscriminantValue(p.initializer) && isDiscriminantProperty(contextualType, p.symbol.escapedName); + } + if (p.kind === 305 /* ShorthandPropertyAssignment */) { + return isDiscriminantProperty(contextualType, p.symbol.escapedName); + } + return false; + }), + (prop) => [() => getContextFreeTypeOfExpression(prop.kind === 304 /* PropertyAssignment */ ? prop.initializer : prop.name), prop.symbol.escapedName] + ), + map( + filter(getPropertiesOfType(contextualType), (s) => { + var _a; + return !!(s.flags & 16777216 /* Optional */) && !!((_a = node == null ? void 0 : node.symbol) == null ? void 0 : _a.members) && !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); + }), + (s) => [() => undefinedType, s.escapedName] + ) + ), + isTypeAssignableTo + ) + ); + } + function discriminateContextualTypeByJSXAttributes(node, contextualType) { + const key = `D${getNodeId(node)},${getTypeId(contextualType)}`; + const cached = getCachedType(key); + if (cached) return cached; + const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(node)); + return setCachedType( + key, + discriminateTypeByDiscriminableItems( + contextualType, + concatenate( + map( + filter(node.properties, (p) => !!p.symbol && p.kind === 292 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer))), + (prop) => [!prop.initializer ? () => trueType : () => getContextFreeTypeOfExpression(prop.initializer), prop.symbol.escapedName] + ), + map( + filter(getPropertiesOfType(contextualType), (s) => { + var _a; + if (!(s.flags & 16777216 /* Optional */) || !((_a = node == null ? void 0 : node.symbol) == null ? void 0 : _a.members)) { + return false; + } + const element = node.parent.parent; + if (s.escapedName === jsxChildrenPropertyName && isJsxElement(element) && getSemanticJsxChildren(element.children).length) { + return false; + } + return !node.symbol.members.has(s.escapedName) && isDiscriminantProperty(contextualType, s.escapedName); + }), + (s) => [() => undefinedType, s.escapedName] + ) + ), + isTypeAssignableTo + ) + ); + } + function getApparentTypeOfContextualType(node, contextFlags) { + const contextualType = isObjectLiteralMethod(node) ? getContextualTypeForObjectLiteralMethod(node, contextFlags) : getContextualType2(node, contextFlags); + const instantiatedType = instantiateContextualType(contextualType, node, contextFlags); + if (instantiatedType && !(contextFlags && contextFlags & 2 /* NoConstraints */ && instantiatedType.flags & 8650752 /* TypeVariable */)) { + const apparentType = mapType( + instantiatedType, + // When obtaining apparent type of *contextual* type we don't want to get apparent type of mapped types. + // That would evaluate mapped types with array or tuple type constraints too eagerly + // and thus it would prevent `getTypeOfPropertyOfContextualType` from obtaining per-position contextual type for elements of array literal expressions. + // Apparent type of other mapped types is already the mapped type itself so we can just avoid calling `getApparentType` here for all mapped types. + (t) => getObjectFlags(t) & 32 /* Mapped */ ? t : getApparentType(t), + /*noReductions*/ + true + ); + return apparentType.flags & 1048576 /* Union */ && isObjectLiteralExpression(node) ? discriminateContextualTypeByObjectMembers(node, apparentType) : apparentType.flags & 1048576 /* Union */ && isJsxAttributes(node) ? discriminateContextualTypeByJSXAttributes(node, apparentType) : apparentType; + } + } + function instantiateContextualType(contextualType, node, contextFlags) { + if (contextualType && maybeTypeOfKind(contextualType, 465829888 /* Instantiable */)) { + const inferenceContext = getInferenceContext(node); + if (inferenceContext && contextFlags & 1 /* Signature */ && some(inferenceContext.inferences, hasInferenceCandidatesOrDefault)) { + return instantiateInstantiableTypes(contextualType, inferenceContext.nonFixingMapper); + } + if (inferenceContext == null ? void 0 : inferenceContext.returnMapper) { + const type = instantiateInstantiableTypes(contextualType, inferenceContext.returnMapper); + return type.flags & 1048576 /* Union */ && containsType(type.types, regularFalseType) && containsType(type.types, regularTrueType) ? filterType(type, (t) => t !== regularFalseType && t !== regularTrueType) : type; + } + } + return contextualType; + } + function instantiateInstantiableTypes(type, mapper) { + if (type.flags & 465829888 /* Instantiable */) { + return instantiateType(type, mapper); + } + if (type.flags & 1048576 /* Union */) { + return getUnionType(map(type.types, (t) => instantiateInstantiableTypes(t, mapper)), 0 /* None */); + } + if (type.flags & 2097152 /* Intersection */) { + return getIntersectionType(map(type.types, (t) => instantiateInstantiableTypes(t, mapper))); + } + return type; + } + function getContextualType2(node, contextFlags) { + var _a; + if (node.flags & 67108864 /* InWithStatement */) { + return void 0; + } + const index = findContextualNode( + node, + /*includeCaches*/ + !contextFlags + ); + if (index >= 0) { + return contextualTypes[index]; + } + const { parent: parent2 } = node; + switch (parent2.kind) { + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 209 /* BindingElement */: + return getContextualTypeForInitializerExpression(node, contextFlags); + case 220 /* ArrowFunction */: + case 254 /* ReturnStatement */: + return getContextualTypeForReturnExpression(node, contextFlags); + case 230 /* YieldExpression */: + return getContextualTypeForYieldOperand(parent2, contextFlags); + case 224 /* AwaitExpression */: + return getContextualTypeForAwaitOperand(parent2, contextFlags); + case 214 /* CallExpression */: + case 215 /* NewExpression */: + return getContextualTypeForArgument(parent2, node); + case 171 /* Decorator */: + return getContextualTypeForDecorator(parent2); + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + return isConstTypeReference(parent2.type) ? getContextualType2(parent2, contextFlags) : getTypeFromTypeNode(parent2.type); + case 227 /* BinaryExpression */: + return getContextualTypeForBinaryOperand(node, contextFlags); + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + return getContextualTypeForObjectLiteralElement(parent2, contextFlags); + case 306 /* SpreadAssignment */: + return getContextualType2(parent2.parent, contextFlags); + case 210 /* ArrayLiteralExpression */: { + const arrayLiteral = parent2; + const type = getApparentTypeOfContextualType(arrayLiteral, contextFlags); + const elementIndex = indexOfNode(arrayLiteral.elements, node); + const spreadIndices = (_a = getNodeLinks(arrayLiteral)).spreadIndices ?? (_a.spreadIndices = getSpreadIndices(arrayLiteral.elements)); + return getContextualTypeForElementExpression(type, elementIndex, arrayLiteral.elements.length, spreadIndices.first, spreadIndices.last); + } + case 228 /* ConditionalExpression */: + return getContextualTypeForConditionalOperand(node, contextFlags); + case 240 /* TemplateSpan */: + Debug.assert(parent2.parent.kind === 229 /* TemplateExpression */); + return getContextualTypeForSubstitutionExpression(parent2.parent, node); + case 218 /* ParenthesizedExpression */: { + if (isInJSFile(parent2)) { + if (isJSDocSatisfiesExpression(parent2)) { + return getTypeFromTypeNode(getJSDocSatisfiesExpressionType(parent2)); + } + const typeTag = getJSDocTypeTag(parent2); + if (typeTag && !isConstTypeReference(typeTag.typeExpression.type)) { + return getTypeFromTypeNode(typeTag.typeExpression.type); + } + } + return getContextualType2(parent2, contextFlags); + } + case 236 /* NonNullExpression */: + return getContextualType2(parent2, contextFlags); + case 239 /* SatisfiesExpression */: + return getTypeFromTypeNode(parent2.type); + case 278 /* ExportAssignment */: + return tryGetTypeFromEffectiveTypeNode(parent2); + case 295 /* JsxExpression */: + return getContextualTypeForJsxExpression(parent2, contextFlags); + case 292 /* JsxAttribute */: + case 294 /* JsxSpreadAttribute */: + return getContextualTypeForJsxAttribute(parent2, contextFlags); + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + return getContextualJsxElementAttributesType(parent2, contextFlags); + case 302 /* ImportAttribute */: + return getContextualImportAttributeType(parent2); + } + return void 0; + } + function pushCachedContextualType(node) { + pushContextualType( + node, + getContextualType2( + node, + /*contextFlags*/ + void 0 + ), + /*isCache*/ + true + ); + } + function pushContextualType(node, type, isCache) { + contextualTypeNodes[contextualTypeCount] = node; + contextualTypes[contextualTypeCount] = type; + contextualIsCache[contextualTypeCount] = isCache; + contextualTypeCount++; + } + function popContextualType() { + contextualTypeCount--; + contextualTypeNodes[contextualTypeCount] = void 0; + contextualTypes[contextualTypeCount] = void 0; + contextualIsCache[contextualTypeCount] = void 0; + } + function findContextualNode(node, includeCaches) { + for (let i = contextualTypeCount - 1; i >= 0; i--) { + if (node === contextualTypeNodes[i] && (includeCaches || !contextualIsCache[i])) { + return i; + } + } + return -1; + } + function pushInferenceContext(node, inferenceContext) { + inferenceContextNodes[inferenceContextCount] = node; + inferenceContexts[inferenceContextCount] = inferenceContext; + inferenceContextCount++; + } + function popInferenceContext() { + inferenceContextCount--; + inferenceContextNodes[inferenceContextCount] = void 0; + inferenceContexts[inferenceContextCount] = void 0; + } + function getInferenceContext(node) { + for (let i = inferenceContextCount - 1; i >= 0; i--) { + if (isNodeDescendantOf(node, inferenceContextNodes[i])) { + return inferenceContexts[i]; + } + } + } + function pushActiveMapper(mapper) { + activeTypeMappers[activeTypeMappersCount] = mapper; + activeTypeMappersCaches[activeTypeMappersCount] ?? (activeTypeMappersCaches[activeTypeMappersCount] = /* @__PURE__ */ new Map()); + activeTypeMappersCount++; + } + function popActiveMapper() { + activeTypeMappersCount--; + activeTypeMappers[activeTypeMappersCount] = void 0; + activeTypeMappersCaches[activeTypeMappersCount].clear(); + } + function findActiveMapper(mapper) { + for (let i = activeTypeMappersCount - 1; i >= 0; i--) { + if (mapper === activeTypeMappers[i]) { + return i; + } + } + return -1; + } + function clearActiveMapperCaches() { + for (let i = activeTypeMappersCount - 1; i >= 0; i--) { + activeTypeMappersCaches[i].clear(); + } + } + function getContextualImportAttributeType(node) { + return getTypeOfPropertyOfContextualType(getGlobalImportAttributesType( + /*reportErrors*/ + false + ), getNameFromImportAttribute(node)); + } + function getContextualJsxElementAttributesType(node, contextFlags) { + if (isJsxOpeningElement(node) && contextFlags !== 4 /* Completions */) { + const index = findContextualNode( + node.parent, + /*includeCaches*/ + !contextFlags + ); + if (index >= 0) { + return contextualTypes[index]; + } + } + return getContextualTypeForArgumentAtIndex(node, 0); + } + function getEffectiveFirstArgumentForJsxSignature(signature, node) { + return isJsxOpeningFragment(node) || getJsxReferenceKind(node) !== 0 /* Component */ ? getJsxPropsTypeFromCallSignature(signature, node) : getJsxPropsTypeFromClassType(signature, node); + } + function getJsxPropsTypeFromCallSignature(sig, context) { + let propsType = getTypeOfFirstParameterOfSignatureWithFallback(sig, unknownType); + propsType = getJsxManagedAttributesFromLocatedAttributes(context, getJsxNamespaceAt(context), propsType); + const intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes, context); + if (!isErrorType(intrinsicAttribs)) { + propsType = intersectTypes(intrinsicAttribs, propsType); + } + return propsType; + } + function getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation) { + if (sig.compositeSignatures) { + const results = []; + for (const signature of sig.compositeSignatures) { + const instance = getReturnTypeOfSignature(signature); + if (isTypeAny(instance)) { + return instance; + } + const propType = getTypeOfPropertyOfType(instance, forcedLookupLocation); + if (!propType) { + return; + } + results.push(propType); + } + return getIntersectionType(results); + } + const instanceType = getReturnTypeOfSignature(sig); + return isTypeAny(instanceType) ? instanceType : getTypeOfPropertyOfType(instanceType, forcedLookupLocation); + } + function getStaticTypeOfReferencedJsxConstructor(context) { + if (isJsxOpeningFragment(context)) return getJSXFragmentType(context); + if (isJsxIntrinsicTagName(context.tagName)) { + const result = getIntrinsicAttributesTypeFromJsxOpeningLikeElement(context); + const fakeSignature = createSignatureForJSXIntrinsic(context, result); + return getOrCreateTypeFromSignature(fakeSignature); + } + const tagType = checkExpressionCached(context.tagName); + if (tagType.flags & 128 /* StringLiteral */) { + const result = getIntrinsicAttributesTypeFromStringLiteralType(tagType, context); + if (!result) { + return errorType; + } + const fakeSignature = createSignatureForJSXIntrinsic(context, result); + return getOrCreateTypeFromSignature(fakeSignature); + } + return tagType; + } + function getJsxManagedAttributesFromLocatedAttributes(context, ns, attributesType) { + const managedSym = getJsxLibraryManagedAttributes(ns); + if (managedSym) { + const ctorType = getStaticTypeOfReferencedJsxConstructor(context); + const result = instantiateAliasOrInterfaceWithDefaults(managedSym, isInJSFile(context), ctorType, attributesType); + if (result) { + return result; + } + } + return attributesType; + } + function getJsxPropsTypeFromClassType(sig, context) { + const ns = getJsxNamespaceAt(context); + const forcedLookupLocation = getJsxElementPropertiesName(ns); + let attributesType = forcedLookupLocation === void 0 ? getTypeOfFirstParameterOfSignatureWithFallback(sig, unknownType) : forcedLookupLocation === "" ? getReturnTypeOfSignature(sig) : getJsxPropsTypeForSignatureFromMember(sig, forcedLookupLocation); + if (!attributesType) { + if (!!forcedLookupLocation && !!length(context.attributes.properties)) { + error2(context, Diagnostics.JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property, unescapeLeadingUnderscores(forcedLookupLocation)); + } + return unknownType; + } + attributesType = getJsxManagedAttributesFromLocatedAttributes(context, ns, attributesType); + if (isTypeAny(attributesType)) { + return attributesType; + } else { + let apparentAttributesType = attributesType; + const intrinsicClassAttribs = getJsxType(JsxNames.IntrinsicClassAttributes, context); + if (!isErrorType(intrinsicClassAttribs)) { + const typeParams = getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(intrinsicClassAttribs.symbol); + const hostClassType = getReturnTypeOfSignature(sig); + let libraryManagedAttributeType; + if (typeParams) { + const inferredArgs = fillMissingTypeArguments([hostClassType], typeParams, getMinTypeArgumentCount(typeParams), isInJSFile(context)); + libraryManagedAttributeType = instantiateType(intrinsicClassAttribs, createTypeMapper(typeParams, inferredArgs)); + } else libraryManagedAttributeType = intrinsicClassAttribs; + apparentAttributesType = intersectTypes(libraryManagedAttributeType, apparentAttributesType); + } + const intrinsicAttribs = getJsxType(JsxNames.IntrinsicAttributes, context); + if (!isErrorType(intrinsicAttribs)) { + apparentAttributesType = intersectTypes(intrinsicAttribs, apparentAttributesType); + } + return apparentAttributesType; + } + } + function getIntersectedSignatures(signatures) { + return getStrictOptionValue(compilerOptions, "noImplicitAny") ? reduceLeft( + signatures, + (left, right) => left === right || !left ? left : compareTypeParametersIdentical(left.typeParameters, right.typeParameters) ? combineSignaturesOfIntersectionMembers(left, right) : void 0 + ) : void 0; + } + function combineIntersectionThisParam(left, right, mapper) { + if (!left || !right) { + return left || right; + } + const thisType = getUnionType([getTypeOfSymbol(left), instantiateType(getTypeOfSymbol(right), mapper)]); + return createSymbolWithType(left, thisType); + } + function combineIntersectionParameters(left, right, mapper) { + const leftCount = getParameterCount(left); + const rightCount = getParameterCount(right); + const longest = leftCount >= rightCount ? left : right; + const shorter = longest === left ? right : left; + const longestCount = longest === left ? leftCount : rightCount; + const eitherHasEffectiveRest = hasEffectiveRestParameter(left) || hasEffectiveRestParameter(right); + const needsExtraRestElement = eitherHasEffectiveRest && !hasEffectiveRestParameter(longest); + const params = new Array(longestCount + (needsExtraRestElement ? 1 : 0)); + for (let i = 0; i < longestCount; i++) { + let longestParamType = tryGetTypeAtPosition(longest, i); + if (longest === right) { + longestParamType = instantiateType(longestParamType, mapper); + } + let shorterParamType = tryGetTypeAtPosition(shorter, i) || unknownType; + if (shorter === right) { + shorterParamType = instantiateType(shorterParamType, mapper); + } + const unionParamType = getUnionType([longestParamType, shorterParamType]); + const isRestParam = eitherHasEffectiveRest && !needsExtraRestElement && i === longestCount - 1; + const isOptional = i >= getMinArgumentCount(longest) && i >= getMinArgumentCount(shorter); + const leftName = i >= leftCount ? void 0 : getParameterNameAtPosition(left, i); + const rightName = i >= rightCount ? void 0 : getParameterNameAtPosition(right, i); + const paramName = leftName === rightName ? leftName : !leftName ? rightName : !rightName ? leftName : void 0; + const paramSymbol = createSymbol( + 1 /* FunctionScopedVariable */ | (isOptional && !isRestParam ? 16777216 /* Optional */ : 0), + paramName || `arg${i}`, + isRestParam ? 32768 /* RestParameter */ : isOptional ? 16384 /* OptionalParameter */ : 0 + ); + paramSymbol.links.type = isRestParam ? createArrayType(unionParamType) : unionParamType; + params[i] = paramSymbol; + } + if (needsExtraRestElement) { + const restParamSymbol = createSymbol(1 /* FunctionScopedVariable */, "args", 32768 /* RestParameter */); + restParamSymbol.links.type = createArrayType(getTypeAtPosition(shorter, longestCount)); + if (shorter === right) { + restParamSymbol.links.type = instantiateType(restParamSymbol.links.type, mapper); + } + params[longestCount] = restParamSymbol; + } + return params; + } + function combineSignaturesOfIntersectionMembers(left, right) { + const typeParams = left.typeParameters || right.typeParameters; + let paramMapper; + if (left.typeParameters && right.typeParameters) { + paramMapper = createTypeMapper(right.typeParameters, left.typeParameters); + } + let flags = (left.flags | right.flags) & (167 /* PropagatingFlags */ & ~1 /* HasRestParameter */); + const declaration = left.declaration; + const params = combineIntersectionParameters(left, right, paramMapper); + const lastParam = lastOrUndefined(params); + if (lastParam && getCheckFlags(lastParam) & 32768 /* RestParameter */) { + flags |= 1 /* HasRestParameter */; + } + const thisParam = combineIntersectionThisParam(left.thisParameter, right.thisParameter, paramMapper); + const minArgCount = Math.max(left.minArgumentCount, right.minArgumentCount); + const result = createSignature( + declaration, + typeParams, + thisParam, + params, + /*resolvedReturnType*/ + void 0, + /*resolvedTypePredicate*/ + void 0, + minArgCount, + flags + ); + result.compositeKind = 2097152 /* Intersection */; + result.compositeSignatures = concatenate(left.compositeKind === 2097152 /* Intersection */ && left.compositeSignatures || [left], [right]); + if (paramMapper) { + result.mapper = left.compositeKind === 2097152 /* Intersection */ && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper; + } + return result; + } + function getContextualCallSignature(type, node) { + const signatures = getSignaturesOfType(type, 0 /* Call */); + const applicableByArity = filter(signatures, (s) => !isAritySmaller(s, node)); + return applicableByArity.length === 1 ? applicableByArity[0] : getIntersectedSignatures(applicableByArity); + } + function isAritySmaller(signature, target) { + let targetParameterCount = 0; + for (; targetParameterCount < target.parameters.length; targetParameterCount++) { + const param = target.parameters[targetParameterCount]; + if (param.initializer || param.questionToken || param.dotDotDotToken || isJSDocOptionalParameter(param)) { + break; + } + } + if (target.parameters.length && parameterIsThisKeyword(target.parameters[0])) { + targetParameterCount--; + } + return !hasEffectiveRestParameter(signature) && getParameterCount(signature) < targetParameterCount; + } + function getContextualSignatureForFunctionLikeDeclaration(node) { + return isFunctionExpressionOrArrowFunction(node) || isObjectLiteralMethod(node) ? getContextualSignature(node) : void 0; + } + function getContextualSignature(node) { + Debug.assert(node.kind !== 175 /* MethodDeclaration */ || isObjectLiteralMethod(node)); + const typeTagSignature = getSignatureOfTypeTag(node); + if (typeTagSignature) { + return typeTagSignature; + } + const type = getApparentTypeOfContextualType(node, 1 /* Signature */); + if (!type) { + return void 0; + } + if (!(type.flags & 1048576 /* Union */)) { + return getContextualCallSignature(type, node); + } + let signatureList; + const types = type.types; + for (const current of types) { + const signature = getContextualCallSignature(current, node); + if (signature) { + if (!signatureList) { + signatureList = [signature]; + } else if (!compareSignaturesIdentical( + signatureList[0], + signature, + /*partialMatch*/ + false, + /*ignoreThisTypes*/ + true, + /*ignoreReturnTypes*/ + true, + compareTypesIdentical + )) { + return void 0; + } else { + signatureList.push(signature); + } + } + } + if (signatureList) { + return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList); + } + } + function checkGrammarRegularExpressionLiteral(node) { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile) && !node.isUnterminated) { + let lastError; + scanner2 ?? (scanner2 = createScanner( + 99 /* ESNext */, + /*skipTrivia*/ + true + )); + scanner2.setScriptTarget(sourceFile.languageVersion); + scanner2.setLanguageVariant(sourceFile.languageVariant); + scanner2.setOnError((message, length2, arg0) => { + const start = scanner2.getTokenEnd(); + if (message.category === 3 /* Message */ && lastError && start === lastError.start && length2 === lastError.length) { + const error3 = createDetachedDiagnostic(sourceFile.fileName, sourceFile.text, start, length2, message, arg0); + addRelatedInfo(lastError, error3); + } else if (!lastError || start !== lastError.start) { + lastError = createFileDiagnostic(sourceFile, start, length2, message, arg0); + diagnostics.add(lastError); + } + }); + scanner2.setText(sourceFile.text, node.pos, node.end - node.pos); + try { + scanner2.scan(); + Debug.assert(scanner2.reScanSlashToken( + /*reportErrors*/ + true + ) === 14 /* RegularExpressionLiteral */, "Expected scanner to rescan RegularExpressionLiteral"); + return !!lastError; + } finally { + scanner2.setText(""); + scanner2.setOnError( + /*onError*/ + void 0 + ); + } + } + return false; + } + function checkRegularExpressionLiteral(node) { + const nodeLinks2 = getNodeLinks(node); + if (!(nodeLinks2.flags & 1 /* TypeChecked */)) { + nodeLinks2.flags |= 1 /* TypeChecked */; + addLazyDiagnostic(() => checkGrammarRegularExpressionLiteral(node)); + } + return globalRegExpType; + } + function checkSpreadExpression(node, checkMode) { + if (languageVersion < LanguageFeatureMinimumTarget.SpreadElements) { + checkExternalEmitHelpers(node, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */); + } + const arrayOrIterableType = checkExpression(node.expression, checkMode); + return checkIteratedTypeOrElementType(33 /* Spread */, arrayOrIterableType, undefinedType, node.expression); + } + function checkSyntheticExpression(node) { + return node.isSpread ? getIndexedAccessType(node.type, numberType) : node.type; + } + function hasDefaultValue(node) { + return node.kind === 209 /* BindingElement */ && !!node.initializer || node.kind === 304 /* PropertyAssignment */ && hasDefaultValue(node.initializer) || node.kind === 305 /* ShorthandPropertyAssignment */ && !!node.objectAssignmentInitializer || node.kind === 227 /* BinaryExpression */ && node.operatorToken.kind === 64 /* EqualsToken */; + } + function isSpreadIntoCallOrNew(node) { + const parent2 = walkUpParenthesizedExpressions(node.parent); + return isSpreadElement(parent2) && isCallOrNewExpression(parent2.parent); + } + function checkArrayLiteral(node, checkMode, forceTuple) { + const elements = node.elements; + const elementCount = elements.length; + const elementTypes = []; + const elementFlags = []; + pushCachedContextualType(node); + const inDestructuringPattern = isAssignmentTarget(node); + const inConstContext = isConstContext(node); + const contextualType = getApparentTypeOfContextualType( + node, + /*contextFlags*/ + void 0 + ); + const inTupleContext = isSpreadIntoCallOrNew(node) || !!contextualType && someType(contextualType, (t) => isTupleLikeType(t) || isGenericMappedType(t) && !t.nameType && !!getHomomorphicTypeVariable(t.target || t)); + let hasOmittedExpression = false; + for (let i = 0; i < elementCount; i++) { + const e = elements[i]; + if (e.kind === 231 /* SpreadElement */) { + if (languageVersion < LanguageFeatureMinimumTarget.SpreadElements) { + checkExternalEmitHelpers(e, compilerOptions.downlevelIteration ? 1536 /* SpreadIncludes */ : 1024 /* SpreadArray */); + } + const spreadType = checkExpression(e.expression, checkMode, forceTuple); + if (isArrayLikeType(spreadType)) { + elementTypes.push(spreadType); + elementFlags.push(8 /* Variadic */); + } else if (inDestructuringPattern) { + const restElementType = getIndexTypeOfType(spreadType, numberType) || getIteratedTypeOrElementType( + 65 /* Destructuring */, + spreadType, + undefinedType, + /*errorNode*/ + void 0, + /*checkAssignability*/ + false + ) || unknownType; + elementTypes.push(restElementType); + elementFlags.push(4 /* Rest */); + } else { + elementTypes.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, e.expression)); + elementFlags.push(4 /* Rest */); + } + } else if (exactOptionalPropertyTypes && e.kind === 233 /* OmittedExpression */) { + hasOmittedExpression = true; + elementTypes.push(undefinedOrMissingType); + elementFlags.push(2 /* Optional */); + } else { + const type = checkExpressionForMutableLocation(e, checkMode, forceTuple); + elementTypes.push(addOptionality( + type, + /*isProperty*/ + true, + hasOmittedExpression + )); + elementFlags.push(hasOmittedExpression ? 2 /* Optional */ : 1 /* Required */); + if (inTupleContext && checkMode && checkMode & 2 /* Inferential */ && !(checkMode & 4 /* SkipContextSensitive */) && isContextSensitive(e)) { + const inferenceContext = getInferenceContext(node); + Debug.assert(inferenceContext); + addIntraExpressionInferenceSite(inferenceContext, e, type); + } + } + } + popContextualType(); + if (inDestructuringPattern) { + return createTupleType(elementTypes, elementFlags); + } + if (forceTuple || inConstContext || inTupleContext) { + return createArrayLiteralType(createTupleType( + elementTypes, + elementFlags, + /*readonly*/ + inConstContext && !(contextualType && someType(contextualType, isMutableArrayLikeType)) + )); + } + return createArrayLiteralType(createArrayType( + elementTypes.length ? getUnionType(sameMap(elementTypes, (t, i) => elementFlags[i] & 8 /* Variadic */ ? getIndexedAccessTypeOrUndefined(t, numberType) || anyType : t), 2 /* Subtype */) : strictNullChecks ? implicitNeverType : undefinedWideningType, + inConstContext + )); + } + function createArrayLiteralType(type) { + if (!(getObjectFlags(type) & 4 /* Reference */)) { + return type; + } + let literalType = type.literalType; + if (!literalType) { + literalType = type.literalType = cloneTypeReference(type); + literalType.objectFlags |= 16384 /* ArrayLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */; + } + return literalType; + } + function isNumericName(name) { + switch (name.kind) { + case 168 /* ComputedPropertyName */: + return isNumericComputedName(name); + case 80 /* Identifier */: + return isNumericLiteralName(name.escapedText); + case 9 /* NumericLiteral */: + case 11 /* StringLiteral */: + return isNumericLiteralName(name.text); + default: + return false; + } + } + function isNumericComputedName(name) { + return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */); + } + function checkComputedPropertyName(node) { + const links = getNodeLinks(node.expression); + if (!links.resolvedType) { + if ((isTypeLiteralNode(node.parent.parent) || isClassLike(node.parent.parent) || isInterfaceDeclaration(node.parent.parent)) && isBinaryExpression(node.expression) && node.expression.operatorToken.kind === 103 /* InKeyword */ && node.parent.kind !== 178 /* GetAccessor */ && node.parent.kind !== 179 /* SetAccessor */) { + return links.resolvedType = errorType; + } + links.resolvedType = checkExpression(node.expression); + if (isPropertyDeclaration(node.parent) && !hasStaticModifier(node.parent) && isClassExpression(node.parent.parent)) { + const container = getEnclosingBlockScopeContainer(node.parent.parent); + const enclosingIterationStatement = getEnclosingIterationStatement(container); + if (enclosingIterationStatement) { + getNodeLinks(enclosingIterationStatement).flags |= 4096 /* LoopWithCapturedBlockScopedBinding */; + getNodeLinks(node).flags |= 32768 /* BlockScopedBindingInLoop */; + getNodeLinks(node.parent.parent).flags |= 32768 /* BlockScopedBindingInLoop */; + } + } + if (links.resolvedType.flags & 98304 /* Nullable */ || !isTypeAssignableToKind(links.resolvedType, 402653316 /* StringLike */ | 296 /* NumberLike */ | 12288 /* ESSymbolLike */) && !isTypeAssignableTo(links.resolvedType, stringNumberSymbolType)) { + error2(node, Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any); + } + } + return links.resolvedType; + } + function isSymbolWithNumericName(symbol) { + var _a; + const firstDecl = (_a = symbol.declarations) == null ? void 0 : _a[0]; + return isNumericLiteralName(symbol.escapedName) || firstDecl && isNamedDeclaration(firstDecl) && isNumericName(firstDecl.name); + } + function isSymbolWithSymbolName(symbol) { + var _a; + const firstDecl = (_a = symbol.declarations) == null ? void 0 : _a[0]; + return isKnownSymbol(symbol) || firstDecl && isNamedDeclaration(firstDecl) && isComputedPropertyName(firstDecl.name) && isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */); + } + function isSymbolWithComputedName(symbol) { + var _a; + const firstDecl = (_a = symbol.declarations) == null ? void 0 : _a[0]; + return firstDecl && isNamedDeclaration(firstDecl) && isComputedPropertyName(firstDecl.name); + } + function getObjectLiteralIndexInfo(isReadonly, offset, properties, keyType) { + var _a; + const propTypes = []; + let components; + for (let i = offset; i < properties.length; i++) { + const prop = properties[i]; + if (keyType === stringType && !isSymbolWithSymbolName(prop) || keyType === numberType && isSymbolWithNumericName(prop) || keyType === esSymbolType && isSymbolWithSymbolName(prop)) { + propTypes.push(getTypeOfSymbol(properties[i])); + if (isSymbolWithComputedName(properties[i])) { + components = append(components, (_a = properties[i].declarations) == null ? void 0 : _a[0]); + } + } + } + const unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType; + return createIndexInfo( + keyType, + unionType, + isReadonly, + /*declaration*/ + void 0, + components + ); + } + function getImmediateAliasedSymbol(symbol) { + Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here."); + const links = getSymbolLinks(symbol); + if (!links.immediateTarget) { + const node = getDeclarationOfAliasSymbol(symbol); + if (!node) return Debug.fail(); + links.immediateTarget = getTargetOfAliasDeclaration( + node, + /*dontRecursivelyResolve*/ + true + ); + } + return links.immediateTarget; + } + function checkObjectLiteral(node, checkMode = 0 /* Normal */) { + const inDestructuringPattern = isAssignmentTarget(node); + checkGrammarObjectLiteralExpression(node, inDestructuringPattern); + const allPropertiesTable = strictNullChecks ? createSymbolTable() : void 0; + let propertiesTable = createSymbolTable(); + let propertiesArray = []; + let spread = emptyObjectType; + pushCachedContextualType(node); + const contextualType = getApparentTypeOfContextualType( + node, + /*contextFlags*/ + void 0 + ); + const contextualTypeHasPattern = contextualType && contextualType.pattern && (contextualType.pattern.kind === 207 /* ObjectBindingPattern */ || contextualType.pattern.kind === 211 /* ObjectLiteralExpression */); + const inConstContext = isConstContext(node); + const checkFlags = inConstContext ? 8 /* Readonly */ : 0; + const isInJavascript = isInJSFile(node) && !isInJsonFile(node); + const enumTag = isInJavascript ? getJSDocEnumTag(node) : void 0; + const isJSObjectLiteral = !contextualType && isInJavascript && !enumTag; + let objectFlags = 8192 /* FreshLiteral */; + let patternWithComputedProperties = false; + let hasComputedStringProperty = false; + let hasComputedNumberProperty = false; + let hasComputedSymbolProperty = false; + for (const elem of node.properties) { + if (elem.name && isComputedPropertyName(elem.name)) { + checkComputedPropertyName(elem.name); + } + } + let offset = 0; + for (const memberDecl of node.properties) { + let member = getSymbolOfDeclaration(memberDecl); + const computedNameType = memberDecl.name && memberDecl.name.kind === 168 /* ComputedPropertyName */ ? checkComputedPropertyName(memberDecl.name) : void 0; + if (memberDecl.kind === 304 /* PropertyAssignment */ || memberDecl.kind === 305 /* ShorthandPropertyAssignment */ || isObjectLiteralMethod(memberDecl)) { + let type = memberDecl.kind === 304 /* PropertyAssignment */ ? checkPropertyAssignment(memberDecl, checkMode) : ( + // avoid resolving the left side of the ShorthandPropertyAssignment outside of the destructuring + // for error recovery purposes. For example, if a user wrote `{ a = 100 }` instead of `{ a: 100 }`. + // we don't want to say "could not find 'a'". + memberDecl.kind === 305 /* ShorthandPropertyAssignment */ ? checkExpressionForMutableLocation(!inDestructuringPattern && memberDecl.objectAssignmentInitializer ? memberDecl.objectAssignmentInitializer : memberDecl.name, checkMode) : checkObjectLiteralMethod(memberDecl, checkMode) + ); + if (isInJavascript) { + const jsDocType = getTypeForDeclarationFromJSDocComment(memberDecl); + if (jsDocType) { + checkTypeAssignableTo(type, jsDocType, memberDecl); + type = jsDocType; + } else if (enumTag && enumTag.typeExpression) { + checkTypeAssignableTo(type, getTypeFromTypeNode(enumTag.typeExpression), memberDecl); + } + } + objectFlags |= getObjectFlags(type) & 458752 /* PropagatingFlags */; + const nameType = computedNameType && isTypeUsableAsPropertyName(computedNameType) ? computedNameType : void 0; + const prop = nameType ? createSymbol(4 /* Property */ | member.flags, getPropertyNameFromType(nameType), checkFlags | 4096 /* Late */) : createSymbol(4 /* Property */ | member.flags, member.escapedName, checkFlags); + if (nameType) { + prop.links.nameType = nameType; + } + if (inDestructuringPattern && hasDefaultValue(memberDecl)) { + prop.flags |= 16777216 /* Optional */; + } else if (contextualTypeHasPattern && !(getObjectFlags(contextualType) & 512 /* ObjectLiteralPatternWithComputedProperties */)) { + const impliedProp = getPropertyOfType(contextualType, member.escapedName); + if (impliedProp) { + prop.flags |= impliedProp.flags & 16777216 /* Optional */; + } else if (!getIndexInfoOfType(contextualType, stringType)) { + error2(memberDecl.name, Diagnostics.Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1, symbolToString(member), typeToString(contextualType)); + } + } + prop.declarations = member.declarations; + prop.parent = member.parent; + if (member.valueDeclaration) { + prop.valueDeclaration = member.valueDeclaration; + } + prop.links.type = type; + prop.links.target = member; + member = prop; + allPropertiesTable == null ? void 0 : allPropertiesTable.set(prop.escapedName, prop); + if (contextualType && checkMode & 2 /* Inferential */ && !(checkMode & 4 /* SkipContextSensitive */) && (memberDecl.kind === 304 /* PropertyAssignment */ || memberDecl.kind === 175 /* MethodDeclaration */) && isContextSensitive(memberDecl)) { + const inferenceContext = getInferenceContext(node); + Debug.assert(inferenceContext); + const inferenceNode = memberDecl.kind === 304 /* PropertyAssignment */ ? memberDecl.initializer : memberDecl; + addIntraExpressionInferenceSite(inferenceContext, inferenceNode, type); + } + } else if (memberDecl.kind === 306 /* SpreadAssignment */) { + if (languageVersion < LanguageFeatureMinimumTarget.ObjectAssign) { + checkExternalEmitHelpers(memberDecl, 2 /* Assign */); + } + if (propertiesArray.length > 0) { + spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, objectFlags, inConstContext); + propertiesArray = []; + propertiesTable = createSymbolTable(); + hasComputedStringProperty = false; + hasComputedNumberProperty = false; + hasComputedSymbolProperty = false; + } + const type = getReducedType(checkExpression(memberDecl.expression, checkMode & 2 /* Inferential */)); + if (isValidSpreadType(type)) { + const mergedType = tryMergeUnionOfObjectTypeAndEmptyObject(type, inConstContext); + if (allPropertiesTable) { + checkSpreadPropOverrides(mergedType, allPropertiesTable, memberDecl); + } + offset = propertiesArray.length; + if (isErrorType(spread)) { + continue; + } + spread = getSpreadType(spread, mergedType, node.symbol, objectFlags, inConstContext); + } else { + error2(memberDecl, Diagnostics.Spread_types_may_only_be_created_from_object_types); + spread = errorType; + } + continue; + } else { + Debug.assert(memberDecl.kind === 178 /* GetAccessor */ || memberDecl.kind === 179 /* SetAccessor */); + checkNodeDeferred(memberDecl); + } + if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) { + if (isTypeAssignableTo(computedNameType, stringNumberSymbolType)) { + if (isTypeAssignableTo(computedNameType, numberType)) { + hasComputedNumberProperty = true; + } else if (isTypeAssignableTo(computedNameType, esSymbolType)) { + hasComputedSymbolProperty = true; + } else { + hasComputedStringProperty = true; + } + if (inDestructuringPattern) { + patternWithComputedProperties = true; + } + } + } else { + propertiesTable.set(member.escapedName, member); + } + propertiesArray.push(member); + } + popContextualType(); + if (isErrorType(spread)) { + return errorType; + } + if (spread !== emptyObjectType) { + if (propertiesArray.length > 0) { + spread = getSpreadType(spread, createObjectLiteralType(), node.symbol, objectFlags, inConstContext); + propertiesArray = []; + propertiesTable = createSymbolTable(); + hasComputedStringProperty = false; + hasComputedNumberProperty = false; + } + return mapType(spread, (t) => t === emptyObjectType ? createObjectLiteralType() : t); + } + return createObjectLiteralType(); + function createObjectLiteralType() { + const indexInfos = []; + const isReadonly = isConstContext(node); + if (hasComputedStringProperty) indexInfos.push(getObjectLiteralIndexInfo(isReadonly, offset, propertiesArray, stringType)); + if (hasComputedNumberProperty) indexInfos.push(getObjectLiteralIndexInfo(isReadonly, offset, propertiesArray, numberType)); + if (hasComputedSymbolProperty) indexInfos.push(getObjectLiteralIndexInfo(isReadonly, offset, propertiesArray, esSymbolType)); + const result = createAnonymousType(node.symbol, propertiesTable, emptyArray, emptyArray, indexInfos); + result.objectFlags |= objectFlags | 128 /* ObjectLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */; + if (isJSObjectLiteral) { + result.objectFlags |= 4096 /* JSLiteral */; + } + if (patternWithComputedProperties) { + result.objectFlags |= 512 /* ObjectLiteralPatternWithComputedProperties */; + } + if (inDestructuringPattern) { + result.pattern = node; + } + return result; + } + } + function isValidSpreadType(type) { + const t = removeDefinitelyFalsyTypes(mapType(type, getBaseConstraintOrType)); + return !!(t.flags & (1 /* Any */ | 67108864 /* NonPrimitive */ | 524288 /* Object */ | 58982400 /* InstantiableNonPrimitive */) || t.flags & 3145728 /* UnionOrIntersection */ && every(t.types, isValidSpreadType)); + } + function checkJsxSelfClosingElementDeferred(node) { + checkJsxOpeningLikeElementOrOpeningFragment(node); + } + function checkJsxSelfClosingElement(node, _checkMode) { + checkNodeDeferred(node); + return getJsxElementTypeAt(node) || anyType; + } + function checkJsxElementDeferred(node) { + checkJsxOpeningLikeElementOrOpeningFragment(node.openingElement); + if (isJsxIntrinsicTagName(node.closingElement.tagName)) { + getIntrinsicTagSymbol(node.closingElement); + } else { + checkExpression(node.closingElement.tagName); + } + checkJsxChildren(node); + } + function checkJsxElement(node, _checkMode) { + checkNodeDeferred(node); + return getJsxElementTypeAt(node) || anyType; + } + function checkJsxFragment(node) { + checkJsxOpeningLikeElementOrOpeningFragment(node.openingFragment); + const nodeSourceFile = getSourceFileOfNode(node); + if (getJSXTransformEnabled(compilerOptions) && (compilerOptions.jsxFactory || nodeSourceFile.pragmas.has("jsx")) && !compilerOptions.jsxFragmentFactory && !nodeSourceFile.pragmas.has("jsxfrag")) { + error2( + node, + compilerOptions.jsxFactory ? Diagnostics.The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_compiler_option : Diagnostics.An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments + ); + } + checkJsxChildren(node); + const jsxElementType = getJsxElementTypeAt(node); + return isErrorType(jsxElementType) ? anyType : jsxElementType; + } + function isHyphenatedJsxName(name) { + return name.includes("-"); + } + function isJsxIntrinsicTagName(tagName) { + return isIdentifier(tagName) && isIntrinsicJsxName(tagName.escapedText) || isJsxNamespacedName(tagName); + } + function checkJsxAttribute(node, checkMode) { + return node.initializer ? checkExpressionForMutableLocation(node.initializer, checkMode) : trueType; + } + function createJsxAttributesTypeFromAttributesProperty(openingLikeElement, checkMode = 0 /* Normal */) { + const allAttributesTable = strictNullChecks ? createSymbolTable() : void 0; + let attributesTable = createSymbolTable(); + let spread = emptyJsxObjectType; + let hasSpreadAnyType = false; + let typeToIntersect; + let explicitlySpecifyChildrenAttribute = false; + let objectFlags = 2048 /* JsxAttributes */; + const jsxChildrenPropertyName = getJsxElementChildrenPropertyName(getJsxNamespaceAt(openingLikeElement)); + const isJsxOpenFragment = isJsxOpeningFragment(openingLikeElement); + let attributesSymbol; + let attributeParent = openingLikeElement; + if (!isJsxOpenFragment) { + const attributes = openingLikeElement.attributes; + attributesSymbol = attributes.symbol; + attributeParent = attributes; + const contextualType = getContextualType2(attributes, 0 /* None */); + for (const attributeDecl of attributes.properties) { + const member = attributeDecl.symbol; + if (isJsxAttribute(attributeDecl)) { + const exprType = checkJsxAttribute(attributeDecl, checkMode); + objectFlags |= getObjectFlags(exprType) & 458752 /* PropagatingFlags */; + const attributeSymbol = createSymbol(4 /* Property */ | member.flags, member.escapedName); + attributeSymbol.declarations = member.declarations; + attributeSymbol.parent = member.parent; + if (member.valueDeclaration) { + attributeSymbol.valueDeclaration = member.valueDeclaration; + } + attributeSymbol.links.type = exprType; + attributeSymbol.links.target = member; + attributesTable.set(attributeSymbol.escapedName, attributeSymbol); + allAttributesTable == null ? void 0 : allAttributesTable.set(attributeSymbol.escapedName, attributeSymbol); + if (getEscapedTextOfJsxAttributeName(attributeDecl.name) === jsxChildrenPropertyName) { + explicitlySpecifyChildrenAttribute = true; + } + if (contextualType) { + const prop = getPropertyOfType(contextualType, member.escapedName); + if (prop && prop.declarations && isDeprecatedSymbol(prop) && isIdentifier(attributeDecl.name)) { + addDeprecatedSuggestion(attributeDecl.name, prop.declarations, attributeDecl.name.escapedText); + } + } + if (contextualType && checkMode & 2 /* Inferential */ && !(checkMode & 4 /* SkipContextSensitive */) && isContextSensitive(attributeDecl)) { + const inferenceContext = getInferenceContext(attributes); + Debug.assert(inferenceContext); + const inferenceNode = attributeDecl.initializer.expression; + addIntraExpressionInferenceSite(inferenceContext, inferenceNode, exprType); + } + } else { + Debug.assert(attributeDecl.kind === 294 /* JsxSpreadAttribute */); + if (attributesTable.size > 0) { + spread = getSpreadType( + spread, + createJsxAttributesTypeHelper(), + attributes.symbol, + objectFlags, + /*readonly*/ + false + ); + attributesTable = createSymbolTable(); + } + const exprType = getReducedType(checkExpression(attributeDecl.expression, checkMode & 2 /* Inferential */)); + if (isTypeAny(exprType)) { + hasSpreadAnyType = true; + } + if (isValidSpreadType(exprType)) { + spread = getSpreadType( + spread, + exprType, + attributes.symbol, + objectFlags, + /*readonly*/ + false + ); + if (allAttributesTable) { + checkSpreadPropOverrides(exprType, allAttributesTable, attributeDecl); + } + } else { + error2(attributeDecl.expression, Diagnostics.Spread_types_may_only_be_created_from_object_types); + typeToIntersect = typeToIntersect ? getIntersectionType([typeToIntersect, exprType]) : exprType; + } + } + } + if (!hasSpreadAnyType) { + if (attributesTable.size > 0) { + spread = getSpreadType( + spread, + createJsxAttributesTypeHelper(), + attributes.symbol, + objectFlags, + /*readonly*/ + false + ); + } + } + } + const parent2 = openingLikeElement.parent; + if ((isJsxElement(parent2) && parent2.openingElement === openingLikeElement || isJsxFragment(parent2) && parent2.openingFragment === openingLikeElement) && getSemanticJsxChildren(parent2.children).length > 0) { + const childrenTypes = checkJsxChildren(parent2, checkMode); + if (!hasSpreadAnyType && jsxChildrenPropertyName && jsxChildrenPropertyName !== "") { + if (explicitlySpecifyChildrenAttribute) { + error2(attributeParent, Diagnostics._0_are_specified_twice_The_attribute_named_0_will_be_overwritten, unescapeLeadingUnderscores(jsxChildrenPropertyName)); + } + const contextualType = isJsxOpeningElement(openingLikeElement) ? getApparentTypeOfContextualType( + openingLikeElement.attributes, + /*contextFlags*/ + void 0 + ) : void 0; + const childrenContextualType = contextualType && getTypeOfPropertyOfContextualType(contextualType, jsxChildrenPropertyName); + const childrenPropSymbol = createSymbol(4 /* Property */, jsxChildrenPropertyName); + childrenPropSymbol.links.type = childrenTypes.length === 1 ? childrenTypes[0] : childrenContextualType && someType(childrenContextualType, isTupleLikeType) ? createTupleType(childrenTypes) : createArrayType(getUnionType(childrenTypes)); + childrenPropSymbol.valueDeclaration = factory.createPropertySignature( + /*modifiers*/ + void 0, + unescapeLeadingUnderscores(jsxChildrenPropertyName), + /*questionToken*/ + void 0, + /*type*/ + void 0 + ); + setParent(childrenPropSymbol.valueDeclaration, attributeParent); + childrenPropSymbol.valueDeclaration.symbol = childrenPropSymbol; + const childPropMap = createSymbolTable(); + childPropMap.set(jsxChildrenPropertyName, childrenPropSymbol); + spread = getSpreadType( + spread, + createAnonymousType(attributesSymbol, childPropMap, emptyArray, emptyArray, emptyArray), + attributesSymbol, + objectFlags, + /*readonly*/ + false + ); + } + } + if (hasSpreadAnyType) { + return anyType; + } + if (typeToIntersect && spread !== emptyJsxObjectType) { + return getIntersectionType([typeToIntersect, spread]); + } + return typeToIntersect || (spread === emptyJsxObjectType ? createJsxAttributesTypeHelper() : spread); + function createJsxAttributesTypeHelper() { + objectFlags |= 8192 /* FreshLiteral */; + return createJsxAttributesType(objectFlags, attributesSymbol, attributesTable); + } + } + function createJsxAttributesType(objectFlags, attributesSymbol, attributesTable) { + const result = createAnonymousType(attributesSymbol, attributesTable, emptyArray, emptyArray, emptyArray); + result.objectFlags |= objectFlags | 8192 /* FreshLiteral */ | 128 /* ObjectLiteral */ | 131072 /* ContainsObjectOrArrayLiteral */; + return result; + } + function checkJsxChildren(node, checkMode) { + const childrenTypes = []; + for (const child of node.children) { + if (child.kind === 12 /* JsxText */) { + if (!child.containsOnlyTriviaWhiteSpaces) { + childrenTypes.push(stringType); + } + } else if (child.kind === 295 /* JsxExpression */ && !child.expression) { + continue; + } else { + childrenTypes.push(checkExpressionForMutableLocation(child, checkMode)); + } + } + return childrenTypes; + } + function checkSpreadPropOverrides(type, props, spread) { + for (const right of getPropertiesOfType(type)) { + if (!(right.flags & 16777216 /* Optional */)) { + const left = props.get(right.escapedName); + if (left) { + const diagnostic = error2(left.valueDeclaration, Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, unescapeLeadingUnderscores(left.escapedName)); + addRelatedInfo(diagnostic, createDiagnosticForNode(spread, Diagnostics.This_spread_always_overwrites_this_property)); + } + } + } + } + function checkJsxAttributes(node, checkMode) { + return createJsxAttributesTypeFromAttributesProperty(node.parent, checkMode); + } + function getJsxType(name, location) { + const namespace = getJsxNamespaceAt(location); + const exports2 = namespace && getExportsOfSymbol(namespace); + const typeSymbol = exports2 && getSymbol2(exports2, name, 788968 /* Type */); + return typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType; + } + function getIntrinsicTagSymbol(node) { + const links = getNodeLinks(node); + if (!links.resolvedSymbol) { + const intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, node); + if (!isErrorType(intrinsicElementsType)) { + if (!isIdentifier(node.tagName) && !isJsxNamespacedName(node.tagName)) return Debug.fail(); + const propName = isJsxNamespacedName(node.tagName) ? getEscapedTextOfJsxNamespacedName(node.tagName) : node.tagName.escapedText; + const intrinsicProp = getPropertyOfType(intrinsicElementsType, propName); + if (intrinsicProp) { + links.jsxFlags |= 1 /* IntrinsicNamedElement */; + return links.resolvedSymbol = intrinsicProp; + } + const indexSymbol = getApplicableIndexSymbol(intrinsicElementsType, getStringLiteralType(unescapeLeadingUnderscores(propName))); + if (indexSymbol) { + links.jsxFlags |= 2 /* IntrinsicIndexedElement */; + return links.resolvedSymbol = indexSymbol; + } + if (getTypeOfPropertyOrIndexSignatureOfType(intrinsicElementsType, propName)) { + links.jsxFlags |= 2 /* IntrinsicIndexedElement */; + return links.resolvedSymbol = intrinsicElementsType.symbol; + } + error2(node, Diagnostics.Property_0_does_not_exist_on_type_1, intrinsicTagNameToString(node.tagName), "JSX." + JsxNames.IntrinsicElements); + return links.resolvedSymbol = unknownSymbol; + } else { + if (noImplicitAny) { + error2(node, Diagnostics.JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists, unescapeLeadingUnderscores(JsxNames.IntrinsicElements)); + } + return links.resolvedSymbol = unknownSymbol; + } + } + return links.resolvedSymbol; + } + function getJsxNamespaceContainerForImplicitImport(location) { + const file = location && getSourceFileOfNode(location); + const links = file && getNodeLinks(file); + if (links && links.jsxImplicitImportContainer === false) { + return void 0; + } + if (links && links.jsxImplicitImportContainer) { + return links.jsxImplicitImportContainer; + } + const runtimeImportSpecifier = getJSXRuntimeImport(getJSXImplicitImportBase(compilerOptions, file), compilerOptions); + if (!runtimeImportSpecifier) { + return void 0; + } + const isClassic = getEmitModuleResolutionKind(compilerOptions) === 1 /* Classic */; + const errorMessage = isClassic ? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option : Diagnostics.This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_for_the_appropriate_package_installed; + const specifier = getJSXRuntimeImportSpecifier(file, runtimeImportSpecifier); + const mod = resolveExternalModule(specifier || location, runtimeImportSpecifier, errorMessage, location); + const result = mod && mod !== unknownSymbol ? getMergedSymbol(resolveSymbol(mod)) : void 0; + if (links) { + links.jsxImplicitImportContainer = result || false; + } + return result; + } + function getJsxNamespaceAt(location) { + const links = location && getNodeLinks(location); + if (links && links.jsxNamespace) { + return links.jsxNamespace; + } + if (!links || links.jsxNamespace !== false) { + let resolvedNamespace = getJsxNamespaceContainerForImplicitImport(location); + if (!resolvedNamespace || resolvedNamespace === unknownSymbol) { + const namespaceName = getJsxNamespace(location); + resolvedNamespace = resolveName( + location, + namespaceName, + 1920 /* Namespace */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + } + if (resolvedNamespace) { + const candidate = resolveSymbol(getSymbol2(getExportsOfSymbol(resolveSymbol(resolvedNamespace)), JsxNames.JSX, 1920 /* Namespace */)); + if (candidate && candidate !== unknownSymbol) { + if (links) { + links.jsxNamespace = candidate; + } + return candidate; + } + } + if (links) { + links.jsxNamespace = false; + } + } + const s = resolveSymbol(getGlobalSymbol( + JsxNames.JSX, + 1920 /* Namespace */, + /*diagnostic*/ + void 0 + )); + if (s === unknownSymbol) { + return void 0; + } + return s; + } + function getNameFromJsxElementAttributesContainer(nameOfAttribPropContainer, jsxNamespace) { + const jsxElementAttribPropInterfaceSym = jsxNamespace && getSymbol2(jsxNamespace.exports, nameOfAttribPropContainer, 788968 /* Type */); + const jsxElementAttribPropInterfaceType = jsxElementAttribPropInterfaceSym && getDeclaredTypeOfSymbol(jsxElementAttribPropInterfaceSym); + const propertiesOfJsxElementAttribPropInterface = jsxElementAttribPropInterfaceType && getPropertiesOfType(jsxElementAttribPropInterfaceType); + if (propertiesOfJsxElementAttribPropInterface) { + if (propertiesOfJsxElementAttribPropInterface.length === 0) { + return ""; + } else if (propertiesOfJsxElementAttribPropInterface.length === 1) { + return propertiesOfJsxElementAttribPropInterface[0].escapedName; + } else if (propertiesOfJsxElementAttribPropInterface.length > 1 && jsxElementAttribPropInterfaceSym.declarations) { + error2(jsxElementAttribPropInterfaceSym.declarations[0], Diagnostics.The_global_type_JSX_0_may_not_have_more_than_one_property, unescapeLeadingUnderscores(nameOfAttribPropContainer)); + } + } + return void 0; + } + function getJsxLibraryManagedAttributes(jsxNamespace) { + return jsxNamespace && getSymbol2(jsxNamespace.exports, JsxNames.LibraryManagedAttributes, 788968 /* Type */); + } + function getJsxElementTypeSymbol(jsxNamespace) { + return jsxNamespace && getSymbol2(jsxNamespace.exports, JsxNames.ElementType, 788968 /* Type */); + } + function getJsxElementPropertiesName(jsxNamespace) { + return getNameFromJsxElementAttributesContainer(JsxNames.ElementAttributesPropertyNameContainer, jsxNamespace); + } + function getJsxElementChildrenPropertyName(jsxNamespace) { + if (compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */) { + return "children"; + } + return getNameFromJsxElementAttributesContainer(JsxNames.ElementChildrenAttributeNameContainer, jsxNamespace); + } + function getUninstantiatedJsxSignaturesOfType(elementType, caller) { + if (elementType.flags & 4 /* String */) { + return [anySignature]; + } else if (elementType.flags & 128 /* StringLiteral */) { + const intrinsicType = getIntrinsicAttributesTypeFromStringLiteralType(elementType, caller); + if (!intrinsicType) { + error2(caller, Diagnostics.Property_0_does_not_exist_on_type_1, elementType.value, "JSX." + JsxNames.IntrinsicElements); + return emptyArray; + } else { + const fakeSignature = createSignatureForJSXIntrinsic(caller, intrinsicType); + return [fakeSignature]; + } + } + const apparentElemType = getApparentType(elementType); + let signatures = getSignaturesOfType(apparentElemType, 1 /* Construct */); + if (signatures.length === 0) { + signatures = getSignaturesOfType(apparentElemType, 0 /* Call */); + } + if (signatures.length === 0 && apparentElemType.flags & 1048576 /* Union */) { + signatures = getUnionSignatures(map(apparentElemType.types, (t) => getUninstantiatedJsxSignaturesOfType(t, caller))); + } + return signatures; + } + function getIntrinsicAttributesTypeFromStringLiteralType(type, location) { + const intrinsicElementsType = getJsxType(JsxNames.IntrinsicElements, location); + if (!isErrorType(intrinsicElementsType)) { + const stringLiteralTypeName = type.value; + const intrinsicProp = getPropertyOfType(intrinsicElementsType, escapeLeadingUnderscores(stringLiteralTypeName)); + if (intrinsicProp) { + return getTypeOfSymbol(intrinsicProp); + } + const indexSignatureType = getIndexTypeOfType(intrinsicElementsType, stringType); + if (indexSignatureType) { + return indexSignatureType; + } + return void 0; + } + return anyType; + } + function checkJsxReturnAssignableToAppropriateBound(refKind, elemInstanceType, openingLikeElement) { + if (refKind === 1 /* Function */) { + const sfcReturnConstraint = getJsxStatelessElementTypeAt(openingLikeElement); + if (sfcReturnConstraint) { + checkTypeRelatedTo(elemInstanceType, sfcReturnConstraint, assignableRelation, openingLikeElement.tagName, Diagnostics.Its_return_type_0_is_not_a_valid_JSX_element, generateInitialErrorChain); + } + } else if (refKind === 0 /* Component */) { + const classConstraint = getJsxElementClassTypeAt(openingLikeElement); + if (classConstraint) { + checkTypeRelatedTo(elemInstanceType, classConstraint, assignableRelation, openingLikeElement.tagName, Diagnostics.Its_instance_type_0_is_not_a_valid_JSX_element, generateInitialErrorChain); + } + } else { + const sfcReturnConstraint = getJsxStatelessElementTypeAt(openingLikeElement); + const classConstraint = getJsxElementClassTypeAt(openingLikeElement); + if (!sfcReturnConstraint || !classConstraint) { + return; + } + const combined = getUnionType([sfcReturnConstraint, classConstraint]); + checkTypeRelatedTo(elemInstanceType, combined, assignableRelation, openingLikeElement.tagName, Diagnostics.Its_element_type_0_is_not_a_valid_JSX_element, generateInitialErrorChain); + } + function generateInitialErrorChain() { + const componentName = getTextOfNode(openingLikeElement.tagName); + return chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics._0_cannot_be_used_as_a_JSX_component, + componentName + ); + } + } + function getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node) { + var _a; + Debug.assert(isJsxIntrinsicTagName(node.tagName)); + const links = getNodeLinks(node); + if (!links.resolvedJsxElementAttributesType) { + const symbol = getIntrinsicTagSymbol(node); + if (links.jsxFlags & 1 /* IntrinsicNamedElement */) { + return links.resolvedJsxElementAttributesType = getTypeOfSymbol(symbol) || errorType; + } else if (links.jsxFlags & 2 /* IntrinsicIndexedElement */) { + const propName = isJsxNamespacedName(node.tagName) ? getEscapedTextOfJsxNamespacedName(node.tagName) : node.tagName.escapedText; + return links.resolvedJsxElementAttributesType = ((_a = getApplicableIndexInfoForName(getJsxType(JsxNames.IntrinsicElements, node), propName)) == null ? void 0 : _a.type) || errorType; + } else { + return links.resolvedJsxElementAttributesType = errorType; + } + } + return links.resolvedJsxElementAttributesType; + } + function getJsxElementClassTypeAt(location) { + const type = getJsxType(JsxNames.ElementClass, location); + if (isErrorType(type)) return void 0; + return type; + } + function getJsxElementTypeAt(location) { + return getJsxType(JsxNames.Element, location); + } + function getJsxStatelessElementTypeAt(location) { + const jsxElementType = getJsxElementTypeAt(location); + if (jsxElementType) { + return getUnionType([jsxElementType, nullType]); + } + } + function getJsxElementTypeTypeAt(location) { + const ns = getJsxNamespaceAt(location); + if (!ns) return void 0; + const sym = getJsxElementTypeSymbol(ns); + if (!sym) return void 0; + const type = instantiateAliasOrInterfaceWithDefaults(sym, isInJSFile(location)); + if (!type || isErrorType(type)) return void 0; + return type; + } + function instantiateAliasOrInterfaceWithDefaults(managedSym, inJs, ...typeArguments) { + const declaredManagedType = getDeclaredTypeOfSymbol(managedSym); + if (managedSym.flags & 524288 /* TypeAlias */) { + const params = getSymbolLinks(managedSym).typeParameters; + if (length(params) >= typeArguments.length) { + const args = fillMissingTypeArguments(typeArguments, params, typeArguments.length, inJs); + return length(args) === 0 ? declaredManagedType : getTypeAliasInstantiation(managedSym, args); + } + } + if (length(declaredManagedType.typeParameters) >= typeArguments.length) { + const args = fillMissingTypeArguments(typeArguments, declaredManagedType.typeParameters, typeArguments.length, inJs); + return createTypeReference(declaredManagedType, args); + } + return void 0; + } + function getJsxIntrinsicTagNamesAt(location) { + const intrinsics = getJsxType(JsxNames.IntrinsicElements, location); + return intrinsics ? getPropertiesOfType(intrinsics) : emptyArray; + } + function checkJsxPreconditions(errorNode) { + if ((compilerOptions.jsx || 0 /* None */) === 0 /* None */) { + error2(errorNode, Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided); + } + if (getJsxElementTypeAt(errorNode) === void 0) { + if (noImplicitAny) { + error2(errorNode, Diagnostics.JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist); + } + } + } + function checkJsxOpeningLikeElementOrOpeningFragment(node) { + const isNodeOpeningLikeElement = isJsxOpeningLikeElement(node); + if (isNodeOpeningLikeElement) { + checkGrammarJsxElement(node); + } + checkJsxPreconditions(node); + markJsxAliasReferenced(node); + const sig = getResolvedSignature(node); + checkDeprecatedSignature(sig, node); + if (isNodeOpeningLikeElement) { + const jsxOpeningLikeNode = node; + const elementTypeConstraint = getJsxElementTypeTypeAt(jsxOpeningLikeNode); + if (elementTypeConstraint !== void 0) { + const tagName = jsxOpeningLikeNode.tagName; + const tagType = isJsxIntrinsicTagName(tagName) ? getStringLiteralType(intrinsicTagNameToString(tagName)) : checkExpression(tagName); + checkTypeRelatedTo(tagType, elementTypeConstraint, assignableRelation, tagName, Diagnostics.Its_type_0_is_not_a_valid_JSX_element_type, () => { + const componentName = getTextOfNode(tagName); + return chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics._0_cannot_be_used_as_a_JSX_component, + componentName + ); + }); + } else { + checkJsxReturnAssignableToAppropriateBound(getJsxReferenceKind(jsxOpeningLikeNode), getReturnTypeOfSignature(sig), jsxOpeningLikeNode); + } + } + } + function isKnownProperty(targetType, name, isComparingJsxAttributes) { + if (targetType.flags & 524288 /* Object */) { + if (getPropertyOfObjectType(targetType, name) || getApplicableIndexInfoForName(targetType, name) || isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) || isComparingJsxAttributes && isHyphenatedJsxName(name)) { + return true; + } + } + if (targetType.flags & 33554432 /* Substitution */) { + return isKnownProperty(targetType.baseType, name, isComparingJsxAttributes); + } + if (targetType.flags & 3145728 /* UnionOrIntersection */ && isExcessPropertyCheckTarget(targetType)) { + for (const t of targetType.types) { + if (isKnownProperty(t, name, isComparingJsxAttributes)) { + return true; + } + } + } + return false; + } + function isExcessPropertyCheckTarget(type) { + return !!(type.flags & 524288 /* Object */ && !(getObjectFlags(type) & 512 /* ObjectLiteralPatternWithComputedProperties */) || type.flags & 67108864 /* NonPrimitive */ || type.flags & 33554432 /* Substitution */ && isExcessPropertyCheckTarget(type.baseType) || type.flags & 1048576 /* Union */ && some(type.types, isExcessPropertyCheckTarget) || type.flags & 2097152 /* Intersection */ && every(type.types, isExcessPropertyCheckTarget)); + } + function checkJsxExpression(node, checkMode) { + checkGrammarJsxExpression(node); + if (node.expression) { + const type = checkExpression(node.expression, checkMode); + if (node.dotDotDotToken && type !== anyType && !isArrayType(type)) { + error2(node, Diagnostics.JSX_spread_child_must_be_an_array_type); + } + return type; + } else { + return errorType; + } + } + function getDeclarationNodeFlagsFromSymbol(s) { + return s.valueDeclaration ? getCombinedNodeFlagsCached(s.valueDeclaration) : 0; + } + function isPrototypeProperty(symbol) { + if (symbol.flags & 8192 /* Method */ || getCheckFlags(symbol) & 4 /* SyntheticMethod */) { + return true; + } + if (isInJSFile(symbol.valueDeclaration)) { + const parent2 = symbol.valueDeclaration.parent; + return parent2 && isBinaryExpression(parent2) && getAssignmentDeclarationKind(parent2) === 3 /* PrototypeProperty */; + } + } + function checkPropertyAccessibility(node, isSuper, writing, type, prop, reportError = true) { + const errorNode = !reportError ? void 0 : node.kind === 167 /* QualifiedName */ ? node.right : node.kind === 206 /* ImportType */ ? node : node.kind === 209 /* BindingElement */ && node.propertyName ? node.propertyName : node.name; + return checkPropertyAccessibilityAtLocation(node, isSuper, writing, type, prop, errorNode); + } + function checkPropertyAccessibilityAtLocation(location, isSuper, writing, containingType, prop, errorNode) { + var _a; + const flags = getDeclarationModifierFlagsFromSymbol(prop, writing); + if (isSuper) { + if (languageVersion < 2 /* ES2015 */) { + if (symbolHasNonMethodDeclaration(prop)) { + if (errorNode) { + error2(errorNode, Diagnostics.Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword); + } + return false; + } + } + if (flags & 64 /* Abstract */) { + if (errorNode) { + error2(errorNode, Diagnostics.Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression, symbolToString(prop), typeToString(getDeclaringClass(prop))); + } + return false; + } + if (!(flags & 256 /* Static */) && ((_a = prop.declarations) == null ? void 0 : _a.some(isClassInstanceProperty))) { + if (errorNode) { + error2(errorNode, Diagnostics.Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super, symbolToString(prop)); + } + return false; + } + } + if (flags & 64 /* Abstract */ && symbolHasNonMethodDeclaration(prop) && (isThisProperty(location) || isThisInitializedObjectBindingExpression(location) || isObjectBindingPattern(location.parent) && isThisInitializedDeclaration(location.parent.parent))) { + const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)); + if (declaringClassDeclaration && isNodeUsedDuringClassInitialization(location)) { + if (errorNode) { + error2(errorNode, Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), getTextOfIdentifierOrLiteral(declaringClassDeclaration.name)); + } + return false; + } + } + if (!(flags & 6 /* NonPublicAccessibilityModifier */)) { + return true; + } + if (flags & 2 /* Private */) { + const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)); + if (!isNodeWithinClass(location, declaringClassDeclaration)) { + if (errorNode) { + error2(errorNode, Diagnostics.Property_0_is_private_and_only_accessible_within_class_1, symbolToString(prop), typeToString(getDeclaringClass(prop))); + } + return false; + } + return true; + } + if (isSuper) { + return true; + } + let enclosingClass = forEachEnclosingClass(location, (enclosingDeclaration) => { + const enclosingClass2 = getDeclaredTypeOfSymbol(getSymbolOfDeclaration(enclosingDeclaration)); + return isClassDerivedFromDeclaringClasses(enclosingClass2, prop, writing); + }); + if (!enclosingClass) { + enclosingClass = getEnclosingClassFromThisParameter(location); + enclosingClass = enclosingClass && isClassDerivedFromDeclaringClasses(enclosingClass, prop, writing); + if (flags & 256 /* Static */ || !enclosingClass) { + if (errorNode) { + error2(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses, symbolToString(prop), typeToString(getDeclaringClass(prop) || containingType)); + } + return false; + } + } + if (flags & 256 /* Static */) { + return true; + } + if (containingType.flags & 262144 /* TypeParameter */) { + containingType = containingType.isThisType ? getConstraintOfTypeParameter(containingType) : getBaseConstraintOfType(containingType); + } + if (!containingType || !hasBaseType(containingType, enclosingClass)) { + if (errorNode) { + error2(errorNode, Diagnostics.Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_class_2, symbolToString(prop), typeToString(enclosingClass), typeToString(containingType)); + } + return false; + } + return true; + } + function getEnclosingClassFromThisParameter(node) { + const thisParameter = getThisParameterFromNodeContext(node); + let thisType = (thisParameter == null ? void 0 : thisParameter.type) && getTypeFromTypeNode(thisParameter.type); + if (thisType) { + if (thisType.flags & 262144 /* TypeParameter */) { + thisType = getConstraintOfTypeParameter(thisType); + } + } else { + const thisContainer = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (isFunctionLike(thisContainer)) { + thisType = getContextualThisParameterType(thisContainer); + } + } + if (thisType && getObjectFlags(thisType) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { + return getTargetType(thisType); + } + return void 0; + } + function getThisParameterFromNodeContext(node) { + const thisContainer = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + return thisContainer && isFunctionLike(thisContainer) ? getThisParameter(thisContainer) : void 0; + } + function symbolHasNonMethodDeclaration(symbol) { + return !!forEachProperty2(symbol, (prop) => !(prop.flags & 8192 /* Method */)); + } + function checkNonNullExpression(node) { + return checkNonNullType(checkExpression(node), node); + } + function isNullableType(type) { + return hasTypeFacts(type, 50331648 /* IsUndefinedOrNull */); + } + function getNonNullableTypeIfNeeded(type) { + return isNullableType(type) ? getNonNullableType(type) : type; + } + function reportObjectPossiblyNullOrUndefinedError(node, facts) { + const nodeText2 = isEntityNameExpression(node) ? entityNameToString(node) : void 0; + if (node.kind === 106 /* NullKeyword */) { + error2(node, Diagnostics.The_value_0_cannot_be_used_here, "null"); + return; + } + if (nodeText2 !== void 0 && nodeText2.length < 100) { + if (isIdentifier(node) && nodeText2 === "undefined") { + error2(node, Diagnostics.The_value_0_cannot_be_used_here, "undefined"); + return; + } + error2( + node, + facts & 16777216 /* IsUndefined */ ? facts & 33554432 /* IsNull */ ? Diagnostics._0_is_possibly_null_or_undefined : Diagnostics._0_is_possibly_undefined : Diagnostics._0_is_possibly_null, + nodeText2 + ); + } else { + error2( + node, + facts & 16777216 /* IsUndefined */ ? facts & 33554432 /* IsNull */ ? Diagnostics.Object_is_possibly_null_or_undefined : Diagnostics.Object_is_possibly_undefined : Diagnostics.Object_is_possibly_null + ); + } + } + function reportCannotInvokePossiblyNullOrUndefinedError(node, facts) { + error2( + node, + facts & 16777216 /* IsUndefined */ ? facts & 33554432 /* IsNull */ ? Diagnostics.Cannot_invoke_an_object_which_is_possibly_null_or_undefined : Diagnostics.Cannot_invoke_an_object_which_is_possibly_undefined : Diagnostics.Cannot_invoke_an_object_which_is_possibly_null + ); + } + function checkNonNullTypeWithReporter(type, node, reportError) { + if (strictNullChecks && type.flags & 2 /* Unknown */) { + if (isEntityNameExpression(node)) { + const nodeText2 = entityNameToString(node); + if (nodeText2.length < 100) { + error2(node, Diagnostics._0_is_of_type_unknown, nodeText2); + return errorType; + } + } + error2(node, Diagnostics.Object_is_of_type_unknown); + return errorType; + } + const facts = getTypeFacts(type, 50331648 /* IsUndefinedOrNull */); + if (facts & 50331648 /* IsUndefinedOrNull */) { + reportError(node, facts); + const t = getNonNullableType(type); + return t.flags & (98304 /* Nullable */ | 131072 /* Never */) ? errorType : t; + } + return type; + } + function checkNonNullType(type, node) { + return checkNonNullTypeWithReporter(type, node, reportObjectPossiblyNullOrUndefinedError); + } + function checkNonNullNonVoidType(type, node) { + const nonNullType = checkNonNullType(type, node); + if (nonNullType.flags & 16384 /* Void */) { + if (isEntityNameExpression(node)) { + const nodeText2 = entityNameToString(node); + if (isIdentifier(node) && nodeText2 === "undefined") { + error2(node, Diagnostics.The_value_0_cannot_be_used_here, nodeText2); + return nonNullType; + } + if (nodeText2.length < 100) { + error2(node, Diagnostics._0_is_possibly_undefined, nodeText2); + return nonNullType; + } + } + error2(node, Diagnostics.Object_is_possibly_undefined); + } + return nonNullType; + } + function checkPropertyAccessExpression(node, checkMode, writeOnly) { + return node.flags & 64 /* OptionalChain */ ? checkPropertyAccessChain(node, checkMode) : checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullExpression(node.expression), node.name, checkMode, writeOnly); + } + function checkPropertyAccessChain(node, checkMode) { + const leftType = checkExpression(node.expression); + const nonOptionalType = getOptionalExpressionType(leftType, node.expression); + return propagateOptionalTypeMarker(checkPropertyAccessExpressionOrQualifiedName(node, node.expression, checkNonNullType(nonOptionalType, node.expression), node.name, checkMode), node, nonOptionalType !== leftType); + } + function checkQualifiedName(node, checkMode) { + const leftType = isPartOfTypeQuery(node) && isThisIdentifier(node.left) ? checkNonNullType(checkThisExpression(node.left), node.left) : checkNonNullExpression(node.left); + return checkPropertyAccessExpressionOrQualifiedName(node, node.left, leftType, node.right, checkMode); + } + function isMethodAccessForCall(node) { + while (node.parent.kind === 218 /* ParenthesizedExpression */) { + node = node.parent; + } + return isCallOrNewExpression(node.parent) && node.parent.expression === node; + } + function lookupSymbolForPrivateIdentifierDeclaration(propName, location) { + for (let containingClass = getContainingClassExcludingClassDecorators(location); !!containingClass; containingClass = getContainingClass(containingClass)) { + const { symbol } = containingClass; + const name = getSymbolNameForPrivateIdentifier(symbol, propName); + const prop = symbol.members && symbol.members.get(name) || symbol.exports && symbol.exports.get(name); + if (prop) { + return prop; + } + } + } + function checkGrammarPrivateIdentifierExpression(privId) { + if (!getContainingClass(privId)) { + return grammarErrorOnNode(privId, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + } + if (!isForInStatement(privId.parent)) { + if (!isExpressionNode(privId)) { + return grammarErrorOnNode(privId, Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression); + } + const isInOperation = isBinaryExpression(privId.parent) && privId.parent.operatorToken.kind === 103 /* InKeyword */; + if (!getSymbolForPrivateIdentifierExpression(privId) && !isInOperation) { + return grammarErrorOnNode(privId, Diagnostics.Cannot_find_name_0, idText(privId)); + } + } + return false; + } + function checkPrivateIdentifierExpression(privId) { + checkGrammarPrivateIdentifierExpression(privId); + const symbol = getSymbolForPrivateIdentifierExpression(privId); + if (symbol) { + markPropertyAsReferenced( + symbol, + /*nodeForCheckWriteOnly*/ + void 0, + /*isSelfTypeAccess*/ + false + ); + } + return anyType; + } + function getSymbolForPrivateIdentifierExpression(privId) { + if (!isExpressionNode(privId)) { + return void 0; + } + const links = getNodeLinks(privId); + if (links.resolvedSymbol === void 0) { + links.resolvedSymbol = lookupSymbolForPrivateIdentifierDeclaration(privId.escapedText, privId); + } + return links.resolvedSymbol; + } + function getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedIdentifier) { + return getPropertyOfType(leftType, lexicallyScopedIdentifier.escapedName); + } + function checkPrivateIdentifierPropertyAccess(leftType, right, lexicallyScopedIdentifier) { + let propertyOnType; + const properties = getPropertiesOfType(leftType); + if (properties) { + forEach(properties, (symbol) => { + const decl = symbol.valueDeclaration; + if (decl && isNamedDeclaration(decl) && isPrivateIdentifier(decl.name) && decl.name.escapedText === right.escapedText) { + propertyOnType = symbol; + return true; + } + }); + } + const diagName = diagnosticName(right); + if (propertyOnType) { + const typeValueDecl = Debug.checkDefined(propertyOnType.valueDeclaration); + const typeClass = Debug.checkDefined(getContainingClass(typeValueDecl)); + if (lexicallyScopedIdentifier == null ? void 0 : lexicallyScopedIdentifier.valueDeclaration) { + const lexicalValueDecl = lexicallyScopedIdentifier.valueDeclaration; + const lexicalClass = getContainingClass(lexicalValueDecl); + Debug.assert(!!lexicalClass); + if (findAncestor(lexicalClass, (n) => typeClass === n)) { + const diagnostic = error2( + right, + Diagnostics.The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_private_identifier_with_the_same_spelling, + diagName, + typeToString(leftType) + ); + addRelatedInfo( + diagnostic, + createDiagnosticForNode( + lexicalValueDecl, + Diagnostics.The_shadowing_declaration_of_0_is_defined_here, + diagName + ), + createDiagnosticForNode( + typeValueDecl, + Diagnostics.The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here, + diagName + ) + ); + return true; + } + } + error2( + right, + Diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier, + diagName, + diagnosticName(typeClass.name || anon) + ); + return true; + } + return false; + } + function isThisPropertyAccessInConstructor(node, prop) { + return (isConstructorDeclaredProperty(prop) || isThisProperty(node) && isAutoTypedProperty(prop)) && getThisContainer( + node, + /*includeArrowFunctions*/ + true, + /*includeClassComputedPropertyName*/ + false + ) === getDeclaringConstructor(prop); + } + function checkPropertyAccessExpressionOrQualifiedName(node, left, leftType, right, checkMode, writeOnly) { + const parentSymbol = getNodeLinks(left).resolvedSymbol; + const assignmentKind = getAssignmentTargetKind(node); + const apparentType = getApparentType(assignmentKind !== 0 /* None */ || isMethodAccessForCall(node) ? getWidenedType(leftType) : leftType); + const isAnyLike = isTypeAny(apparentType) || apparentType === silentNeverType; + let prop; + if (isPrivateIdentifier(right)) { + if (languageVersion < LanguageFeatureMinimumTarget.PrivateNamesAndClassStaticBlocks || languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators || !useDefineForClassFields) { + if (assignmentKind !== 0 /* None */) { + checkExternalEmitHelpers(node, 1048576 /* ClassPrivateFieldSet */); + } + if (assignmentKind !== 1 /* Definite */) { + checkExternalEmitHelpers(node, 524288 /* ClassPrivateFieldGet */); + } + } + const lexicallyScopedSymbol = lookupSymbolForPrivateIdentifierDeclaration(right.escapedText, right); + if (assignmentKind && lexicallyScopedSymbol && lexicallyScopedSymbol.valueDeclaration && isMethodDeclaration(lexicallyScopedSymbol.valueDeclaration)) { + grammarErrorOnNode(right, Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable, idText(right)); + } + if (isAnyLike) { + if (lexicallyScopedSymbol) { + return isErrorType(apparentType) ? errorType : apparentType; + } + if (getContainingClassExcludingClassDecorators(right) === void 0) { + grammarErrorOnNode(right, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + return anyType; + } + } + prop = lexicallyScopedSymbol && getPrivateIdentifierPropertyOfType(leftType, lexicallyScopedSymbol); + if (prop === void 0) { + if (checkPrivateIdentifierPropertyAccess(leftType, right, lexicallyScopedSymbol)) { + return errorType; + } + const containingClass = getContainingClassExcludingClassDecorators(right); + if (containingClass && isPlainJsFile(getSourceFileOfNode(containingClass), compilerOptions.checkJs)) { + grammarErrorOnNode(right, Diagnostics.Private_field_0_must_be_declared_in_an_enclosing_class, idText(right)); + } + } else { + const isSetonlyAccessor = prop.flags & 65536 /* SetAccessor */ && !(prop.flags & 32768 /* GetAccessor */); + if (isSetonlyAccessor && assignmentKind !== 1 /* Definite */) { + error2(node, Diagnostics.Private_accessor_was_defined_without_a_getter); + } + } + } else { + if (isAnyLike) { + if (isIdentifier(left) && parentSymbol) { + markLinkedReferences( + node, + 2 /* Property */, + /*propSymbol*/ + void 0, + leftType + ); + } + return isErrorType(apparentType) ? errorType : apparentType; + } + prop = getPropertyOfType( + apparentType, + right.escapedText, + /*skipObjectFunctionPropertyAugment*/ + isConstEnumObjectType(apparentType), + /*includeTypeOnlyMembers*/ + node.kind === 167 /* QualifiedName */ + ); + } + markLinkedReferences(node, 2 /* Property */, prop, leftType); + let propType; + if (!prop) { + const indexInfo = !isPrivateIdentifier(right) && (assignmentKind === 0 /* None */ || !isGenericObjectType(leftType) || isThisTypeParameter(leftType)) ? getApplicableIndexInfoForName(apparentType, right.escapedText) : void 0; + if (!(indexInfo && indexInfo.type)) { + const isUncheckedJS = isUncheckedJSSuggestion( + node, + leftType.symbol, + /*excludeClasses*/ + true + ); + if (!isUncheckedJS && isJSLiteralType(leftType)) { + return anyType; + } + if (leftType.symbol === globalThisSymbol) { + if (globalThisSymbol.exports.has(right.escapedText) && globalThisSymbol.exports.get(right.escapedText).flags & 418 /* BlockScoped */) { + error2(right, Diagnostics.Property_0_does_not_exist_on_type_1, unescapeLeadingUnderscores(right.escapedText), typeToString(leftType)); + } else if (noImplicitAny) { + error2(right, Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature, typeToString(leftType)); + } + return anyType; + } + if (right.escapedText && !checkAndReportErrorForExtendingInterface(node)) { + reportNonexistentProperty(right, isThisTypeParameter(leftType) ? apparentType : leftType, isUncheckedJS); + } + return errorType; + } + if (indexInfo.isReadonly && (isAssignmentTarget(node) || isDeleteTarget(node))) { + error2(node, Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(apparentType)); + } + propType = indexInfo.type; + if (compilerOptions.noUncheckedIndexedAccess && getAssignmentTargetKind(node) !== 1 /* Definite */) { + propType = getUnionType([propType, missingType]); + } + if (compilerOptions.noPropertyAccessFromIndexSignature && isPropertyAccessExpression(node)) { + error2(right, Diagnostics.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0, unescapeLeadingUnderscores(right.escapedText)); + } + if (indexInfo.declaration && isDeprecatedDeclaration2(indexInfo.declaration)) { + addDeprecatedSuggestion(right, [indexInfo.declaration], right.escapedText); + } + } else { + const targetPropSymbol = resolveAliasWithDeprecationCheck(prop, right); + if (isDeprecatedSymbol(targetPropSymbol) && isUncalledFunctionReference(node, targetPropSymbol) && targetPropSymbol.declarations) { + addDeprecatedSuggestion(right, targetPropSymbol.declarations, right.escapedText); + } + checkPropertyNotUsedBeforeDeclaration(prop, node, right); + markPropertyAsReferenced(prop, node, isSelfTypeAccess(left, parentSymbol)); + getNodeLinks(node).resolvedSymbol = prop; + checkPropertyAccessibility(node, left.kind === 108 /* SuperKeyword */, isWriteAccess(node), apparentType, prop); + if (isAssignmentToReadonlyEntity(node, prop, assignmentKind)) { + error2(right, Diagnostics.Cannot_assign_to_0_because_it_is_a_read_only_property, idText(right)); + return errorType; + } + propType = isThisPropertyAccessInConstructor(node, prop) ? autoType : writeOnly || isWriteOnlyAccess(node) ? getWriteTypeOfSymbol(prop) : getTypeOfSymbol(prop); + } + return getFlowTypeOfAccessExpression(node, prop, propType, right, checkMode); + } + function isUncheckedJSSuggestion(node, suggestion, excludeClasses) { + var _a; + const file = getSourceFileOfNode(node); + if (file) { + if (compilerOptions.checkJs === void 0 && file.checkJsDirective === void 0 && (file.scriptKind === 1 /* JS */ || file.scriptKind === 2 /* JSX */)) { + const declarationFile = forEach(suggestion == null ? void 0 : suggestion.declarations, getSourceFileOfNode); + const suggestionHasNoExtendsOrDecorators = !(suggestion == null ? void 0 : suggestion.valueDeclaration) || !isClassLike(suggestion.valueDeclaration) || ((_a = suggestion.valueDeclaration.heritageClauses) == null ? void 0 : _a.length) || classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + false, + suggestion.valueDeclaration + ); + return !(file !== declarationFile && !!declarationFile && isGlobalSourceFile(declarationFile)) && !(excludeClasses && suggestion && suggestion.flags & 32 /* Class */ && suggestionHasNoExtendsOrDecorators) && !(!!node && excludeClasses && isPropertyAccessExpression(node) && node.expression.kind === 110 /* ThisKeyword */ && suggestionHasNoExtendsOrDecorators); + } + } + return false; + } + function getFlowTypeOfAccessExpression(node, prop, propType, errorNode, checkMode) { + const assignmentKind = getAssignmentTargetKind(node); + if (assignmentKind === 1 /* Definite */) { + return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */)); + } + if (prop && !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */)) && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */) && !isDuplicatedCommonJSExport(prop.declarations)) { + return propType; + } + if (propType === autoType) { + return getFlowTypeOfProperty(node, prop); + } + propType = getNarrowableTypeForReference(propType, node, checkMode); + let assumeUninitialized = false; + if (strictNullChecks && strictPropertyInitialization && isAccessExpression(node) && node.expression.kind === 110 /* ThisKeyword */) { + const declaration = prop && prop.valueDeclaration; + if (declaration && isPropertyWithoutInitializer(declaration)) { + if (!isStatic(declaration)) { + const flowContainer = getControlFlowContainer(node); + if (flowContainer.kind === 177 /* Constructor */ && flowContainer.parent === declaration.parent && !(declaration.flags & 33554432 /* Ambient */)) { + assumeUninitialized = true; + } + } + } + } else if (strictNullChecks && prop && prop.valueDeclaration && isPropertyAccessExpression(prop.valueDeclaration) && getAssignmentDeclarationPropertyAccessKind(prop.valueDeclaration) && getControlFlowContainer(node) === getControlFlowContainer(prop.valueDeclaration)) { + assumeUninitialized = true; + } + const flowType = getFlowTypeOfReference(node, propType, assumeUninitialized ? getOptionalType(propType) : propType); + if (assumeUninitialized && !containsUndefinedType(propType) && containsUndefinedType(flowType)) { + error2(errorNode, Diagnostics.Property_0_is_used_before_being_assigned, symbolToString(prop)); + return propType; + } + return assignmentKind ? getBaseTypeOfLiteralType(flowType) : flowType; + } + function checkPropertyNotUsedBeforeDeclaration(prop, node, right) { + const { valueDeclaration } = prop; + if (!valueDeclaration || getSourceFileOfNode(node).isDeclarationFile) { + return; + } + let diagnosticMessage; + const declarationName = idText(right); + if (isInPropertyInitializerOrClassStaticBlock(node) && !isOptionalPropertyDeclaration(valueDeclaration) && !(isAccessExpression(node) && isAccessExpression(node.expression)) && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right) && !(isMethodDeclaration(valueDeclaration) && getCombinedModifierFlagsCached(valueDeclaration) & 256 /* Static */) && (useDefineForClassFields || !isPropertyDeclaredInAncestorClass(prop))) { + diagnosticMessage = error2(right, Diagnostics.Property_0_is_used_before_its_initialization, declarationName); + } else if (valueDeclaration.kind === 264 /* ClassDeclaration */ && node.parent.kind !== 184 /* TypeReference */ && !(valueDeclaration.flags & 33554432 /* Ambient */) && !isBlockScopedNameDeclaredBeforeUse(valueDeclaration, right)) { + diagnosticMessage = error2(right, Diagnostics.Class_0_used_before_its_declaration, declarationName); + } + if (diagnosticMessage) { + addRelatedInfo(diagnosticMessage, createDiagnosticForNode(valueDeclaration, Diagnostics._0_is_declared_here, declarationName)); + } + } + function isInPropertyInitializerOrClassStaticBlock(node, ignoreArrowFunctions) { + return !!findAncestor(node, (node2) => { + switch (node2.kind) { + case 173 /* PropertyDeclaration */: + case 176 /* ClassStaticBlockDeclaration */: + return true; + case 187 /* TypeQuery */: + case 288 /* JsxClosingElement */: + return "quit"; + case 220 /* ArrowFunction */: + return ignoreArrowFunctions ? false : "quit"; + case 242 /* Block */: + return isFunctionLikeDeclaration(node2.parent) && node2.parent.kind !== 220 /* ArrowFunction */ ? "quit" : false; + default: + return false; + } + }); + } + function isPropertyDeclaredInAncestorClass(prop) { + if (!(prop.parent.flags & 32 /* Class */)) { + return false; + } + let classType = getTypeOfSymbol(prop.parent); + while (true) { + classType = classType.symbol && getSuperClass(classType); + if (!classType) { + return false; + } + const superProperty = getPropertyOfType(classType, prop.escapedName); + if (superProperty && superProperty.valueDeclaration) { + return true; + } + } + } + function getSuperClass(classType) { + const x = getBaseTypes(classType); + if (x.length === 0) { + return void 0; + } + return getIntersectionType(x); + } + function reportNonexistentProperty(propNode, containingType, isUncheckedJS) { + const links = getNodeLinks(propNode); + const cache = links.nonExistentPropCheckCache || (links.nonExistentPropCheckCache = /* @__PURE__ */ new Set()); + const key = `${getTypeId(containingType)}|${isUncheckedJS}`; + if (cache.has(key)) { + return; + } + cache.add(key); + let errorInfo; + let relatedInfo; + if (!isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 402784252 /* Primitive */)) { + for (const subtype of containingType.types) { + if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) { + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(subtype)); + break; + } + } + } + if (typeHasStaticProperty(propNode.escapedText, containingType)) { + const propName = declarationNameToString(propNode); + const typeName = typeToString(containingType); + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead, propName, typeName, typeName + "." + propName); + } else { + const promisedType = getPromisedTypeOfPromise(containingType); + if (promisedType && getPropertyOfType(promisedType, propNode.escapedText)) { + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(containingType)); + relatedInfo = createDiagnosticForNode(propNode, Diagnostics.Did_you_forget_to_use_await); + } else { + const missingProperty = declarationNameToString(propNode); + const container = typeToString(containingType); + const libSuggestion = getSuggestedLibForNonExistentProperty(missingProperty, containingType); + if (libSuggestion !== void 0) { + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2_or_later, missingProperty, container, libSuggestion); + } else { + const suggestion = getSuggestedSymbolForNonexistentProperty(propNode, containingType); + if (suggestion !== void 0) { + const suggestedName = symbolName(suggestion); + const message = isUncheckedJS ? Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2 : Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2; + errorInfo = chainDiagnosticMessages(errorInfo, message, missingProperty, container, suggestedName); + relatedInfo = suggestion.valueDeclaration && createDiagnosticForNode(suggestion.valueDeclaration, Diagnostics._0_is_declared_here, suggestedName); + } else { + const diagnostic = containerSeemsToBeEmptyDomElement(containingType) ? Diagnostics.Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom : Diagnostics.Property_0_does_not_exist_on_type_1; + errorInfo = chainDiagnosticMessages(elaborateNeverIntersection(errorInfo, containingType), diagnostic, missingProperty, container); + } + } + } + } + const resultDiagnostic = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(propNode), propNode, errorInfo); + if (relatedInfo) { + addRelatedInfo(resultDiagnostic, relatedInfo); + } + addErrorOrSuggestion(!isUncheckedJS || errorInfo.code !== Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code, resultDiagnostic); + } + function containerSeemsToBeEmptyDomElement(containingType) { + return compilerOptions.lib && !compilerOptions.lib.includes("lib.dom.d.ts") && everyContainedType(containingType, (type) => type.symbol && /^(?:EventTarget|Node|(?:HTML[a-zA-Z]*)?Element)$/.test(unescapeLeadingUnderscores(type.symbol.escapedName))) && isEmptyObjectType(containingType); + } + function typeHasStaticProperty(propName, containingType) { + const prop = containingType.symbol && getPropertyOfType(getTypeOfSymbol(containingType.symbol), propName); + return prop !== void 0 && !!prop.valueDeclaration && isStatic(prop.valueDeclaration); + } + function getSuggestedLibForNonExistentName(name) { + const missingName = diagnosticName(name); + const allFeatures = getScriptTargetFeatures(); + const typeFeatures = allFeatures.get(missingName); + return typeFeatures && firstIterator(typeFeatures.keys()); + } + function getSuggestedLibForNonExistentProperty(missingProperty, containingType) { + const container = getApparentType(containingType).symbol; + if (!container) { + return void 0; + } + const containingTypeName = symbolName(container); + const allFeatures = getScriptTargetFeatures(); + const typeFeatures = allFeatures.get(containingTypeName); + if (typeFeatures) { + for (const [libTarget, featuresOfType] of typeFeatures) { + if (contains(featuresOfType, missingProperty)) { + return libTarget; + } + } + } + } + function getSuggestedSymbolForNonexistentClassMember(name, baseType) { + return getSpellingSuggestionForName(name, getPropertiesOfType(baseType), 106500 /* ClassMember */); + } + function getSuggestedSymbolForNonexistentProperty(name, containingType) { + let props = getPropertiesOfType(containingType); + if (typeof name !== "string") { + const parent2 = name.parent; + if (isPropertyAccessExpression(parent2)) { + props = filter(props, (prop) => isValidPropertyAccessForCompletions(parent2, containingType, prop)); + } + name = idText(name); + } + return getSpellingSuggestionForName(name, props, 111551 /* Value */); + } + function getSuggestedSymbolForNonexistentJSXAttribute(name, containingType) { + const strName = isString(name) ? name : idText(name); + const properties = getPropertiesOfType(containingType); + const jsxSpecific = strName === "for" ? find(properties, (x) => symbolName(x) === "htmlFor") : strName === "class" ? find(properties, (x) => symbolName(x) === "className") : void 0; + return jsxSpecific ?? getSpellingSuggestionForName(strName, properties, 111551 /* Value */); + } + function getSuggestionForNonexistentProperty(name, containingType) { + const suggestion = getSuggestedSymbolForNonexistentProperty(name, containingType); + return suggestion && symbolName(suggestion); + } + function getSuggestionForSymbolNameLookup(symbols, name, meaning) { + const symbol = getSymbol2(symbols, name, meaning); + if (symbol) return symbol; + let candidates; + if (symbols === globals) { + const primitives = mapDefined( + ["string", "number", "boolean", "object", "bigint", "symbol"], + (s) => symbols.has(s.charAt(0).toUpperCase() + s.slice(1)) ? createSymbol(524288 /* TypeAlias */, s) : void 0 + ); + candidates = primitives.concat(arrayFrom(symbols.values())); + } else { + candidates = arrayFrom(symbols.values()); + } + return getSpellingSuggestionForName(unescapeLeadingUnderscores(name), candidates, meaning); + } + function getSuggestedSymbolForNonexistentSymbol(location, outerName, meaning) { + Debug.assert(outerName !== void 0, "outername should always be defined"); + const result = resolveNameForSymbolSuggestion( + location, + outerName, + meaning, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false, + /*excludeGlobals*/ + false + ); + return result; + } + function getSuggestedSymbolForNonexistentModule(name, targetModule) { + return targetModule.exports && getSpellingSuggestionForName(idText(name), getExportsOfModuleAsArray(targetModule), 2623475 /* ModuleMember */); + } + function getSuggestionForNonexistentIndexSignature(objectType, expr, keyedType) { + function hasProp(name) { + const prop = getPropertyOfObjectType(objectType, name); + if (prop) { + const s = getSingleCallSignature(getTypeOfSymbol(prop)); + return !!s && getMinArgumentCount(s) >= 1 && isTypeAssignableTo(keyedType, getTypeAtPosition(s, 0)); + } + return false; + } + const suggestedMethod = isAssignmentTarget(expr) ? "set" : "get"; + if (!hasProp(suggestedMethod)) { + return void 0; + } + let suggestion = tryGetPropertyAccessOrIdentifierToString(expr.expression); + if (suggestion === void 0) { + suggestion = suggestedMethod; + } else { + suggestion += "." + suggestedMethod; + } + return suggestion; + } + function getSuggestedTypeForNonexistentStringLiteralType(source, target) { + const candidates = target.types.filter((type) => !!(type.flags & 128 /* StringLiteral */)); + return getSpellingSuggestion(source.value, candidates, (type) => type.value); + } + function getSpellingSuggestionForName(name, symbols, meaning) { + return getSpellingSuggestion(name, symbols, getCandidateName); + function getCandidateName(candidate) { + const candidateName = symbolName(candidate); + if (startsWith(candidateName, '"')) { + return void 0; + } + if (candidate.flags & meaning) { + return candidateName; + } + if (candidate.flags & 2097152 /* Alias */) { + const alias = tryResolveAlias(candidate); + if (alias && alias.flags & meaning) { + return candidateName; + } + } + return void 0; + } + } + function markPropertyAsReferenced(prop, nodeForCheckWriteOnly, isSelfTypeAccess2) { + const valueDeclaration = prop && prop.flags & 106500 /* ClassMember */ && prop.valueDeclaration; + if (!valueDeclaration) { + return; + } + const hasPrivateModifier = hasEffectiveModifier(valueDeclaration, 2 /* Private */); + const hasPrivateIdentifier = prop.valueDeclaration && isNamedDeclaration(prop.valueDeclaration) && isPrivateIdentifier(prop.valueDeclaration.name); + if (!hasPrivateModifier && !hasPrivateIdentifier) { + return; + } + if (nodeForCheckWriteOnly && isWriteOnlyAccess(nodeForCheckWriteOnly) && !(prop.flags & 65536 /* SetAccessor */)) { + return; + } + if (isSelfTypeAccess2) { + const containingMethod = findAncestor(nodeForCheckWriteOnly, isFunctionLikeDeclaration); + if (containingMethod && containingMethod.symbol === prop) { + return; + } + } + (getCheckFlags(prop) & 1 /* Instantiated */ ? getSymbolLinks(prop).target : prop).isReferenced = -1 /* All */; + } + function isSelfTypeAccess(name, parent2) { + return name.kind === 110 /* ThisKeyword */ || !!parent2 && isEntityNameExpression(name) && parent2 === getResolvedSymbol(getFirstIdentifier(name)); + } + function isValidPropertyAccess(node, propertyName) { + switch (node.kind) { + case 212 /* PropertyAccessExpression */: + return isValidPropertyAccessWithType(node, node.expression.kind === 108 /* SuperKeyword */, propertyName, getWidenedType(checkExpression(node.expression))); + case 167 /* QualifiedName */: + return isValidPropertyAccessWithType( + node, + /*isSuper*/ + false, + propertyName, + getWidenedType(checkExpression(node.left)) + ); + case 206 /* ImportType */: + return isValidPropertyAccessWithType( + node, + /*isSuper*/ + false, + propertyName, + getTypeFromTypeNode(node) + ); + } + } + function isValidPropertyAccessForCompletions(node, type, property) { + return isPropertyAccessible( + node, + node.kind === 212 /* PropertyAccessExpression */ && node.expression.kind === 108 /* SuperKeyword */, + /*isWrite*/ + false, + type, + property + ); + } + function isValidPropertyAccessWithType(node, isSuper, propertyName, type) { + if (isTypeAny(type)) { + return true; + } + const prop = getPropertyOfType(type, propertyName); + return !!prop && isPropertyAccessible( + node, + isSuper, + /*isWrite*/ + false, + type, + prop + ); + } + function isPropertyAccessible(node, isSuper, isWrite, containingType, property) { + if (isTypeAny(containingType)) { + return true; + } + if (property.valueDeclaration && isPrivateIdentifierClassElementDeclaration(property.valueDeclaration)) { + const declClass = getContainingClass(property.valueDeclaration); + return !isOptionalChain(node) && !!findAncestor(node, (parent2) => parent2 === declClass); + } + return checkPropertyAccessibilityAtLocation(node, isSuper, isWrite, containingType, property); + } + function getForInVariableSymbol(node) { + const initializer = node.initializer; + if (initializer.kind === 262 /* VariableDeclarationList */) { + const variable = initializer.declarations[0]; + if (variable && !isBindingPattern(variable.name)) { + return getSymbolOfDeclaration(variable); + } + } else if (initializer.kind === 80 /* Identifier */) { + return getResolvedSymbol(initializer); + } + return void 0; + } + function hasNumericPropertyNames(type) { + return getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, numberType); + } + function isForInVariableForNumericPropertyNames(expr) { + const e = skipParentheses(expr); + if (e.kind === 80 /* Identifier */) { + const symbol = getResolvedSymbol(e); + if (symbol.flags & 3 /* Variable */) { + let child = expr; + let node = expr.parent; + while (node) { + if (node.kind === 250 /* ForInStatement */ && child === node.statement && getForInVariableSymbol(node) === symbol && hasNumericPropertyNames(getTypeOfExpression(node.expression))) { + return true; + } + child = node; + node = node.parent; + } + } + } + return false; + } + function checkIndexedAccess(node, checkMode) { + return node.flags & 64 /* OptionalChain */ ? checkElementAccessChain(node, checkMode) : checkElementAccessExpression(node, checkNonNullExpression(node.expression), checkMode); + } + function checkElementAccessChain(node, checkMode) { + const exprType = checkExpression(node.expression); + const nonOptionalType = getOptionalExpressionType(exprType, node.expression); + return propagateOptionalTypeMarker(checkElementAccessExpression(node, checkNonNullType(nonOptionalType, node.expression), checkMode), node, nonOptionalType !== exprType); + } + function checkElementAccessExpression(node, exprType, checkMode) { + const objectType = getAssignmentTargetKind(node) !== 0 /* None */ || isMethodAccessForCall(node) ? getWidenedType(exprType) : exprType; + const indexExpression = node.argumentExpression; + const indexType = checkExpression(indexExpression); + if (isErrorType(objectType) || objectType === silentNeverType) { + return objectType; + } + if (isConstEnumObjectType(objectType) && !isStringLiteralLike(indexExpression)) { + error2(indexExpression, Diagnostics.A_const_enum_member_can_only_be_accessed_using_a_string_literal); + return errorType; + } + const effectiveIndexType = isForInVariableForNumericPropertyNames(indexExpression) ? numberType : indexType; + const assignmentTargetKind = getAssignmentTargetKind(node); + let accessFlags; + if (assignmentTargetKind === 0 /* None */) { + accessFlags = 32 /* ExpressionPosition */; + } else { + accessFlags = 4 /* Writing */ | (isGenericObjectType(objectType) && !isThisTypeParameter(objectType) ? 2 /* NoIndexSignatures */ : 0); + if (assignmentTargetKind === 2 /* Compound */) { + accessFlags |= 32 /* ExpressionPosition */; + } + } + const indexedAccessType = getIndexedAccessTypeOrUndefined(objectType, effectiveIndexType, accessFlags, node) || errorType; + return checkIndexedAccessIndexType(getFlowTypeOfAccessExpression(node, getNodeLinks(node).resolvedSymbol, indexedAccessType, indexExpression, checkMode), node); + } + function callLikeExpressionMayHaveTypeArguments(node) { + return isCallOrNewExpression(node) || isTaggedTemplateExpression(node) || isJsxOpeningLikeElement(node); + } + function resolveUntypedCall(node) { + if (callLikeExpressionMayHaveTypeArguments(node)) { + forEach(node.typeArguments, checkSourceElement); + } + if (node.kind === 216 /* TaggedTemplateExpression */) { + checkExpression(node.template); + } else if (isJsxOpeningLikeElement(node)) { + checkExpression(node.attributes); + } else if (isBinaryExpression(node)) { + checkExpression(node.left); + } else if (isCallOrNewExpression(node)) { + forEach(node.arguments, (argument) => { + checkExpression(argument); + }); + } + return anySignature; + } + function resolveErrorCall(node) { + resolveUntypedCall(node); + return unknownSignature; + } + function reorderCandidates(signatures, result, callChainFlags) { + let lastParent; + let lastSymbol; + let cutoffIndex = 0; + let index; + let specializedIndex = -1; + let spliceIndex; + Debug.assert(!result.length); + for (const signature of signatures) { + const symbol = signature.declaration && getSymbolOfDeclaration(signature.declaration); + const parent2 = signature.declaration && signature.declaration.parent; + if (!lastSymbol || symbol === lastSymbol) { + if (lastParent && parent2 === lastParent) { + index = index + 1; + } else { + lastParent = parent2; + index = cutoffIndex; + } + } else { + index = cutoffIndex = result.length; + lastParent = parent2; + } + lastSymbol = symbol; + if (signatureHasLiteralTypes(signature)) { + specializedIndex++; + spliceIndex = specializedIndex; + cutoffIndex++; + } else { + spliceIndex = index; + } + result.splice(spliceIndex, 0, callChainFlags ? getOptionalCallSignature(signature, callChainFlags) : signature); + } + } + function isSpreadArgument(arg) { + return !!arg && (arg.kind === 231 /* SpreadElement */ || arg.kind === 238 /* SyntheticExpression */ && arg.isSpread); + } + function getSpreadArgumentIndex(args) { + return findIndex(args, isSpreadArgument); + } + function acceptsVoid(t) { + return !!(t.flags & 16384 /* Void */); + } + function acceptsVoidUndefinedUnknownOrAny(t) { + return !!(t.flags & (16384 /* Void */ | 32768 /* Undefined */ | 2 /* Unknown */ | 1 /* Any */)); + } + function hasCorrectArity(node, args, signature, signatureHelpTrailingComma = false) { + if (isJsxOpeningFragment(node)) return true; + let argCount; + let callIsIncomplete = false; + let effectiveParameterCount = getParameterCount(signature); + let effectiveMinimumArguments = getMinArgumentCount(signature); + if (node.kind === 216 /* TaggedTemplateExpression */) { + argCount = args.length; + if (node.template.kind === 229 /* TemplateExpression */) { + const lastSpan = last(node.template.templateSpans); + callIsIncomplete = nodeIsMissing(lastSpan.literal) || !!lastSpan.literal.isUnterminated; + } else { + const templateLiteral = node.template; + Debug.assert(templateLiteral.kind === 15 /* NoSubstitutionTemplateLiteral */); + callIsIncomplete = !!templateLiteral.isUnterminated; + } + } else if (node.kind === 171 /* Decorator */) { + argCount = getDecoratorArgumentCount(node, signature); + } else if (node.kind === 227 /* BinaryExpression */) { + argCount = 1; + } else if (isJsxOpeningLikeElement(node)) { + callIsIncomplete = node.attributes.end === node.end; + if (callIsIncomplete) { + return true; + } + argCount = effectiveMinimumArguments === 0 ? args.length : 1; + effectiveParameterCount = args.length === 0 ? effectiveParameterCount : 1; + effectiveMinimumArguments = Math.min(effectiveMinimumArguments, 1); + } else if (!node.arguments) { + Debug.assert(node.kind === 215 /* NewExpression */); + return getMinArgumentCount(signature) === 0; + } else { + argCount = signatureHelpTrailingComma ? args.length + 1 : args.length; + callIsIncomplete = node.arguments.end === node.end; + const spreadArgIndex = getSpreadArgumentIndex(args); + if (spreadArgIndex >= 0) { + return spreadArgIndex >= getMinArgumentCount(signature) && (hasEffectiveRestParameter(signature) || spreadArgIndex < getParameterCount(signature)); + } + } + if (!hasEffectiveRestParameter(signature) && argCount > effectiveParameterCount) { + return false; + } + if (callIsIncomplete || argCount >= effectiveMinimumArguments) { + return true; + } + for (let i = argCount; i < effectiveMinimumArguments; i++) { + const type = getTypeAtPosition(signature, i); + if (filterType(type, isInJSFile(node) && !strictNullChecks ? acceptsVoidUndefinedUnknownOrAny : acceptsVoid).flags & 131072 /* Never */) { + return false; + } + } + return true; + } + function hasCorrectTypeArgumentArity(signature, typeArguments) { + const numTypeParameters = length(signature.typeParameters); + const minTypeArgumentCount = getMinTypeArgumentCount(signature.typeParameters); + return !some(typeArguments) || typeArguments.length >= minTypeArgumentCount && typeArguments.length <= numTypeParameters; + } + function isInstantiatedGenericParameter(signature, pos) { + let type; + return !!(signature.target && (type = tryGetTypeAtPosition(signature.target, pos)) && isGenericType(type)); + } + function getSingleCallSignature(type) { + return getSingleSignature( + type, + 0 /* Call */, + /*allowMembers*/ + false + ); + } + function getSingleCallOrConstructSignature(type) { + return getSingleSignature( + type, + 0 /* Call */, + /*allowMembers*/ + false + ) || getSingleSignature( + type, + 1 /* Construct */, + /*allowMembers*/ + false + ); + } + function getSingleSignature(type, kind, allowMembers) { + if (type.flags & 524288 /* Object */) { + const resolved = resolveStructuredTypeMembers(type); + if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) { + if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) { + return resolved.callSignatures[0]; + } + if (kind === 1 /* Construct */ && resolved.constructSignatures.length === 1 && resolved.callSignatures.length === 0) { + return resolved.constructSignatures[0]; + } + } + } + return void 0; + } + function instantiateSignatureInContextOf(signature, contextualSignature, inferenceContext, compareTypes) { + const context = createInferenceContext(getTypeParametersForMapper(signature), signature, 0 /* None */, compareTypes); + const restType = getEffectiveRestType(contextualSignature); + const mapper = inferenceContext && (restType && restType.flags & 262144 /* TypeParameter */ ? inferenceContext.nonFixingMapper : inferenceContext.mapper); + const sourceSignature = mapper ? instantiateSignature(contextualSignature, mapper) : contextualSignature; + applyToParameterTypes(sourceSignature, signature, (source, target) => { + inferTypes(context.inferences, source, target); + }); + if (!inferenceContext) { + applyToReturnTypes(contextualSignature, signature, (source, target) => { + inferTypes(context.inferences, source, target, 128 /* ReturnType */); + }); + } + return getSignatureInstantiation(signature, getInferredTypes(context), isInJSFile(contextualSignature.declaration)); + } + function inferJsxTypeArguments(node, signature, checkMode, context) { + const paramType = getEffectiveFirstArgumentForJsxSignature(signature, node); + const checkAttrType = checkExpressionWithContextualType(node.attributes, paramType, context, checkMode); + inferTypes(context.inferences, checkAttrType, paramType); + return getInferredTypes(context); + } + function getThisArgumentType(thisArgumentNode) { + if (!thisArgumentNode) { + return voidType; + } + const thisArgumentType = checkExpression(thisArgumentNode); + return isRightSideOfInstanceofExpression(thisArgumentNode) ? thisArgumentType : isOptionalChainRoot(thisArgumentNode.parent) ? getNonNullableType(thisArgumentType) : isOptionalChain(thisArgumentNode.parent) ? removeOptionalTypeMarker(thisArgumentType) : thisArgumentType; + } + function inferTypeArguments(node, signature, args, checkMode, context) { + if (isJsxOpeningLikeElement(node)) { + return inferJsxTypeArguments(node, signature, checkMode, context); + } + if (node.kind !== 171 /* Decorator */ && node.kind !== 227 /* BinaryExpression */) { + const skipBindingPatterns = every(signature.typeParameters, (p) => !!getDefaultFromTypeParameter(p)); + const contextualType = getContextualType2(node, skipBindingPatterns ? 8 /* SkipBindingPatterns */ : 0 /* None */); + if (contextualType) { + const inferenceTargetType = getReturnTypeOfSignature(signature); + if (couldContainTypeVariables(inferenceTargetType)) { + const outerContext = getInferenceContext(node); + const isFromBindingPattern = !skipBindingPatterns && getContextualType2(node, 8 /* SkipBindingPatterns */) !== contextualType; + if (!isFromBindingPattern) { + const outerMapper = getMapperFromContext(cloneInferenceContext(outerContext, 1 /* NoDefault */)); + const instantiatedType = instantiateType(contextualType, outerMapper); + const contextualSignature = getSingleCallSignature(instantiatedType); + const inferenceSourceType = contextualSignature && contextualSignature.typeParameters ? getOrCreateTypeFromSignature(getSignatureInstantiationWithoutFillingInTypeArguments(contextualSignature, contextualSignature.typeParameters)) : instantiatedType; + inferTypes(context.inferences, inferenceSourceType, inferenceTargetType, 128 /* ReturnType */); + } + const returnContext = createInferenceContext(signature.typeParameters, signature, context.flags); + const returnSourceType = instantiateType(contextualType, outerContext && createOuterReturnMapper(outerContext)); + inferTypes(returnContext.inferences, returnSourceType, inferenceTargetType); + context.returnMapper = some(returnContext.inferences, hasInferenceCandidates) ? getMapperFromContext(cloneInferredPartOfContext(returnContext)) : void 0; + } + } + } + const restType = getNonArrayRestType(signature); + const argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length; + if (restType && restType.flags & 262144 /* TypeParameter */) { + const info = find(context.inferences, (info2) => info2.typeParameter === restType); + if (info) { + info.impliedArity = findIndex(args, isSpreadArgument, argCount) < 0 ? args.length - argCount : void 0; + } + } + const thisType = getThisTypeOfSignature(signature); + if (thisType && couldContainTypeVariables(thisType)) { + const thisArgumentNode = getThisArgumentOfCall(node); + inferTypes(context.inferences, getThisArgumentType(thisArgumentNode), thisType); + } + for (let i = 0; i < argCount; i++) { + const arg = args[i]; + if (arg.kind !== 233 /* OmittedExpression */) { + const paramType = getTypeAtPosition(signature, i); + if (couldContainTypeVariables(paramType)) { + const argType = checkExpressionWithContextualType(arg, paramType, context, checkMode); + inferTypes(context.inferences, argType, paramType); + } + } + } + if (restType && couldContainTypeVariables(restType)) { + const spreadType = getSpreadArgumentType(args, argCount, args.length, restType, context, checkMode); + inferTypes(context.inferences, spreadType, restType); + } + return getInferredTypes(context); + } + function getMutableArrayOrTupleType(type) { + return type.flags & 1048576 /* Union */ ? mapType(type, getMutableArrayOrTupleType) : type.flags & 1 /* Any */ || isMutableArrayOrTuple(getBaseConstraintOfType(type) || type) ? type : isTupleType(type) ? createTupleType( + getElementTypes(type), + type.target.elementFlags, + /*readonly*/ + false, + type.target.labeledElementDeclarations + ) : createTupleType([type], [8 /* Variadic */]); + } + function getSpreadArgumentType(args, index, argCount, restType, context, checkMode) { + const inConstContext = isConstTypeVariable(restType); + if (index >= argCount - 1) { + const arg = args[argCount - 1]; + if (isSpreadArgument(arg)) { + const spreadType = arg.kind === 238 /* SyntheticExpression */ ? arg.type : checkExpressionWithContextualType(arg.expression, restType, context, checkMode); + if (isArrayLikeType(spreadType)) { + return getMutableArrayOrTupleType(spreadType); + } + return createArrayType(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 231 /* SpreadElement */ ? arg.expression : arg), inConstContext); + } + } + const types = []; + const flags = []; + const names = []; + for (let i = index; i < argCount; i++) { + const arg = args[i]; + if (isSpreadArgument(arg)) { + const spreadType = arg.kind === 238 /* SyntheticExpression */ ? arg.type : checkExpression(arg.expression); + if (isArrayLikeType(spreadType)) { + types.push(spreadType); + flags.push(8 /* Variadic */); + } else { + types.push(checkIteratedTypeOrElementType(33 /* Spread */, spreadType, undefinedType, arg.kind === 231 /* SpreadElement */ ? arg.expression : arg)); + flags.push(4 /* Rest */); + } + } else { + const contextualType = isTupleType(restType) ? getContextualTypeForElementExpression(restType, i - index, argCount - index) || unknownType : getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */); + const argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode); + const hasPrimitiveContextualType = inConstContext || maybeTypeOfKind(contextualType, 402784252 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */); + types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType)); + flags.push(1 /* Required */); + } + if (arg.kind === 238 /* SyntheticExpression */ && arg.tupleNameSource) { + names.push(arg.tupleNameSource); + } else { + names.push(void 0); + } + } + return createTupleType(types, flags, inConstContext && !someType(restType, isMutableArrayLikeType), names); + } + function checkTypeArguments(signature, typeArgumentNodes, reportErrors2, headMessage) { + const isJavascript = isInJSFile(signature.declaration); + const typeParameters = signature.typeParameters; + const typeArgumentTypes = fillMissingTypeArguments(map(typeArgumentNodes, getTypeFromTypeNode), typeParameters, getMinTypeArgumentCount(typeParameters), isJavascript); + let mapper; + for (let i = 0; i < typeArgumentNodes.length; i++) { + Debug.assert(typeParameters[i] !== void 0, "Should not call checkTypeArguments with too many type arguments"); + const constraint = getConstraintOfTypeParameter(typeParameters[i]); + if (constraint) { + const errorInfo = reportErrors2 && headMessage ? () => chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Type_0_does_not_satisfy_the_constraint_1 + ) : void 0; + const typeArgumentHeadMessage = headMessage || Diagnostics.Type_0_does_not_satisfy_the_constraint_1; + if (!mapper) { + mapper = createTypeMapper(typeParameters, typeArgumentTypes); + } + const typeArgument = typeArgumentTypes[i]; + if (!checkTypeAssignableTo( + typeArgument, + getTypeWithThisArgument(instantiateType(constraint, mapper), typeArgument), + reportErrors2 ? typeArgumentNodes[i] : void 0, + typeArgumentHeadMessage, + errorInfo + )) { + return void 0; + } + } + } + return typeArgumentTypes; + } + function getJsxReferenceKind(node) { + if (isJsxIntrinsicTagName(node.tagName)) { + return 2 /* Mixed */; + } + const tagType = getApparentType(checkExpression(node.tagName)); + if (length(getSignaturesOfType(tagType, 1 /* Construct */))) { + return 0 /* Component */; + } + if (length(getSignaturesOfType(tagType, 0 /* Call */))) { + return 1 /* Function */; + } + return 2 /* Mixed */; + } + function checkApplicableSignatureForJsxCallLikeElement(node, signature, relation, checkMode, reportErrors2, containingMessageChain, errorOutputContainer) { + const paramType = getEffectiveFirstArgumentForJsxSignature(signature, node); + const attributesType = isJsxOpeningFragment(node) ? createJsxAttributesTypeFromAttributesProperty(node) : checkExpressionWithContextualType( + node.attributes, + paramType, + /*inferenceContext*/ + void 0, + checkMode + ); + const checkAttributesType = checkMode & 4 /* SkipContextSensitive */ ? getRegularTypeOfObjectLiteral(attributesType) : attributesType; + return checkTagNameDoesNotExpectTooManyArguments() && checkTypeRelatedToAndOptionallyElaborate( + checkAttributesType, + paramType, + relation, + reportErrors2 ? isJsxOpeningFragment(node) ? node : node.tagName : void 0, + isJsxOpeningFragment(node) ? void 0 : node.attributes, + /*headMessage*/ + void 0, + containingMessageChain, + errorOutputContainer + ); + function checkTagNameDoesNotExpectTooManyArguments() { + var _a; + if (getJsxNamespaceContainerForImplicitImport(node)) { + return true; + } + const tagType = (isJsxOpeningElement(node) || isJsxSelfClosingElement(node)) && !(isJsxIntrinsicTagName(node.tagName) || isJsxNamespacedName(node.tagName)) ? checkExpression(node.tagName) : void 0; + if (!tagType) { + return true; + } + const tagCallSignatures = getSignaturesOfType(tagType, 0 /* Call */); + if (!length(tagCallSignatures)) { + return true; + } + const factory2 = getJsxFactoryEntity(node); + if (!factory2) { + return true; + } + const factorySymbol = resolveEntityName( + factory2, + 111551 /* Value */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + false, + node + ); + if (!factorySymbol) { + return true; + } + const factoryType = getTypeOfSymbol(factorySymbol); + const callSignatures = getSignaturesOfType(factoryType, 0 /* Call */); + if (!length(callSignatures)) { + return true; + } + let hasFirstParamSignatures = false; + let maxParamCount = 0; + for (const sig of callSignatures) { + const firstparam = getTypeAtPosition(sig, 0); + const signaturesOfParam = getSignaturesOfType(firstparam, 0 /* Call */); + if (!length(signaturesOfParam)) continue; + for (const paramSig of signaturesOfParam) { + hasFirstParamSignatures = true; + if (hasEffectiveRestParameter(paramSig)) { + return true; + } + const paramCount = getParameterCount(paramSig); + if (paramCount > maxParamCount) { + maxParamCount = paramCount; + } + } + } + if (!hasFirstParamSignatures) { + return true; + } + let absoluteMinArgCount = Infinity; + for (const tagSig of tagCallSignatures) { + const tagRequiredArgCount = getMinArgumentCount(tagSig); + if (tagRequiredArgCount < absoluteMinArgCount) { + absoluteMinArgCount = tagRequiredArgCount; + } + } + if (absoluteMinArgCount <= maxParamCount) { + return true; + } + if (reportErrors2) { + const tagName = node.tagName; + const diag2 = createDiagnosticForNode(tagName, Diagnostics.Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3, entityNameToString(tagName), absoluteMinArgCount, entityNameToString(factory2), maxParamCount); + const tagNameDeclaration = (_a = getSymbolAtLocation(tagName)) == null ? void 0 : _a.valueDeclaration; + if (tagNameDeclaration) { + addRelatedInfo(diag2, createDiagnosticForNode(tagNameDeclaration, Diagnostics._0_is_declared_here, entityNameToString(tagName))); + } + if (errorOutputContainer && errorOutputContainer.skipLogging) { + (errorOutputContainer.errors || (errorOutputContainer.errors = [])).push(diag2); + } + if (!errorOutputContainer.skipLogging) { + diagnostics.add(diag2); + } + } + return false; + } + } + function getEffectiveCheckNode(argument) { + const flags = isInJSFile(argument) ? 1 /* Parentheses */ | 32 /* Satisfies */ | -2147483648 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */ | 32 /* Satisfies */; + return skipOuterExpressions(argument, flags); + } + function getSignatureApplicabilityError(node, args, signature, relation, checkMode, reportErrors2, containingMessageChain) { + const errorOutputContainer = { errors: void 0, skipLogging: true }; + if (isJsxCallLike(node)) { + if (!checkApplicableSignatureForJsxCallLikeElement(node, signature, relation, checkMode, reportErrors2, containingMessageChain, errorOutputContainer)) { + Debug.assert(!reportErrors2 || !!errorOutputContainer.errors, "jsx should have errors when reporting errors"); + return errorOutputContainer.errors || emptyArray; + } + return void 0; + } + const thisType = getThisTypeOfSignature(signature); + if (thisType && thisType !== voidType && !(isNewExpression(node) || isCallExpression(node) && isSuperProperty(node.expression))) { + const thisArgumentNode = getThisArgumentOfCall(node); + const thisArgumentType = getThisArgumentType(thisArgumentNode); + const errorNode = reportErrors2 ? thisArgumentNode || node : void 0; + const headMessage2 = Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1; + if (!checkTypeRelatedTo(thisArgumentType, thisType, relation, errorNode, headMessage2, containingMessageChain, errorOutputContainer)) { + Debug.assert(!reportErrors2 || !!errorOutputContainer.errors, "this parameter should have errors when reporting errors"); + return errorOutputContainer.errors || emptyArray; + } + } + const headMessage = Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1; + const restType = getNonArrayRestType(signature); + const argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length; + for (let i = 0; i < argCount; i++) { + const arg = args[i]; + if (arg.kind !== 233 /* OmittedExpression */) { + const paramType = getTypeAtPosition(signature, i); + const argType = checkExpressionWithContextualType( + arg, + paramType, + /*inferenceContext*/ + void 0, + checkMode + ); + const checkArgType = checkMode & 4 /* SkipContextSensitive */ ? getRegularTypeOfObjectLiteral(argType) : argType; + const effectiveCheckArgumentNode = getEffectiveCheckNode(arg); + if (!checkTypeRelatedToAndOptionallyElaborate(checkArgType, paramType, relation, reportErrors2 ? effectiveCheckArgumentNode : void 0, effectiveCheckArgumentNode, headMessage, containingMessageChain, errorOutputContainer)) { + Debug.assert(!reportErrors2 || !!errorOutputContainer.errors, "parameter should have errors when reporting errors"); + maybeAddMissingAwaitInfo(arg, checkArgType, paramType); + return errorOutputContainer.errors || emptyArray; + } + } + } + if (restType) { + const spreadType = getSpreadArgumentType( + args, + argCount, + args.length, + restType, + /*context*/ + void 0, + checkMode + ); + const restArgCount = args.length - argCount; + const errorNode = !reportErrors2 ? void 0 : restArgCount === 0 ? node : restArgCount === 1 ? getEffectiveCheckNode(args[argCount]) : setTextRangePosEnd(createSyntheticExpression(node, spreadType), args[argCount].pos, args[args.length - 1].end); + if (!checkTypeRelatedTo( + spreadType, + restType, + relation, + errorNode, + headMessage, + /*containingMessageChain*/ + void 0, + errorOutputContainer + )) { + Debug.assert(!reportErrors2 || !!errorOutputContainer.errors, "rest parameter should have errors when reporting errors"); + maybeAddMissingAwaitInfo(errorNode, spreadType, restType); + return errorOutputContainer.errors || emptyArray; + } + } + return void 0; + function maybeAddMissingAwaitInfo(errorNode, source, target) { + if (errorNode && reportErrors2 && errorOutputContainer.errors && errorOutputContainer.errors.length) { + if (getAwaitedTypeOfPromise(target)) { + return; + } + const awaitedTypeOfSource = getAwaitedTypeOfPromise(source); + if (awaitedTypeOfSource && isTypeRelatedTo(awaitedTypeOfSource, target, relation)) { + addRelatedInfo(errorOutputContainer.errors[0], createDiagnosticForNode(errorNode, Diagnostics.Did_you_forget_to_use_await)); + } + } + } + } + function getThisArgumentOfCall(node) { + if (node.kind === 227 /* BinaryExpression */) { + return node.right; + } + const expression = node.kind === 214 /* CallExpression */ ? node.expression : node.kind === 216 /* TaggedTemplateExpression */ ? node.tag : node.kind === 171 /* Decorator */ && !legacyDecorators ? node.expression : void 0; + if (expression) { + const callee = skipOuterExpressions(expression); + if (isAccessExpression(callee)) { + return callee.expression; + } + } + } + function createSyntheticExpression(parent2, type, isSpread, tupleNameSource) { + const result = parseNodeFactory.createSyntheticExpression(type, isSpread, tupleNameSource); + setTextRange(result, parent2); + setParent(result, parent2); + return result; + } + function getEffectiveCallArguments(node) { + if (isJsxOpeningFragment(node)) { + return [createSyntheticExpression(node, emptyFreshJsxObjectType)]; + } + if (node.kind === 216 /* TaggedTemplateExpression */) { + const template = node.template; + const args2 = [createSyntheticExpression(template, getGlobalTemplateStringsArrayType())]; + if (template.kind === 229 /* TemplateExpression */) { + forEach(template.templateSpans, (span) => { + args2.push(span.expression); + }); + } + return args2; + } + if (node.kind === 171 /* Decorator */) { + return getEffectiveDecoratorArguments(node); + } + if (node.kind === 227 /* BinaryExpression */) { + return [node.left]; + } + if (isJsxOpeningLikeElement(node)) { + return node.attributes.properties.length > 0 || isJsxOpeningElement(node) && node.parent.children.length > 0 ? [node.attributes] : emptyArray; + } + const args = node.arguments || emptyArray; + const spreadIndex = getSpreadArgumentIndex(args); + if (spreadIndex >= 0) { + const effectiveArgs = args.slice(0, spreadIndex); + for (let i = spreadIndex; i < args.length; i++) { + const arg = args[i]; + const spreadType = arg.kind === 231 /* SpreadElement */ && (flowLoopCount ? checkExpression(arg.expression) : checkExpressionCached(arg.expression)); + if (spreadType && isTupleType(spreadType)) { + forEach(getElementTypes(spreadType), (t, i2) => { + var _a; + const flags = spreadType.target.elementFlags[i2]; + const syntheticArg = createSyntheticExpression(arg, flags & 4 /* Rest */ ? createArrayType(t) : t, !!(flags & 12 /* Variable */), (_a = spreadType.target.labeledElementDeclarations) == null ? void 0 : _a[i2]); + effectiveArgs.push(syntheticArg); + }); + } else { + effectiveArgs.push(arg); + } + } + return effectiveArgs; + } + return args; + } + function getEffectiveDecoratorArguments(node) { + const expr = node.expression; + const signature = getDecoratorCallSignature(node); + if (signature) { + const args = []; + for (const param of signature.parameters) { + const type = getTypeOfSymbol(param); + args.push(createSyntheticExpression(expr, type)); + } + return args; + } + return Debug.fail(); + } + function getDecoratorArgumentCount(node, signature) { + return compilerOptions.experimentalDecorators ? getLegacyDecoratorArgumentCount(node, signature) : ( + // Allow the runtime to oversupply arguments to an ES decorator as long as there's at least one parameter. + Math.min(Math.max(getParameterCount(signature), 1), 2) + ); + } + function getLegacyDecoratorArgumentCount(node, signature) { + switch (node.parent.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return 1; + case 173 /* PropertyDeclaration */: + return hasAccessorModifier(node.parent) ? 3 : 2; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return signature.parameters.length <= 2 ? 2 : 3; + case 170 /* Parameter */: + return 3; + default: + return Debug.fail(); + } + } + function getDiagnosticSpanForCallNode(node) { + const sourceFile = getSourceFileOfNode(node); + const { start, length: length2 } = getErrorSpanForNode(sourceFile, isPropertyAccessExpression(node.expression) ? node.expression.name : node.expression); + return { start, length: length2, sourceFile }; + } + function getDiagnosticForCallNode(node, message, ...args) { + if (isCallExpression(node)) { + const { sourceFile, start, length: length2 } = getDiagnosticSpanForCallNode(node); + if ("message" in message) { + return createFileDiagnostic(sourceFile, start, length2, message, ...args); + } + return createDiagnosticForFileFromMessageChain(sourceFile, message); + } else { + if ("message" in message) { + return createDiagnosticForNode(node, message, ...args); + } + return createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(node), node, message); + } + } + function getErrorNodeForCallNode(callLike) { + if (isCallOrNewExpression(callLike)) { + return isPropertyAccessExpression(callLike.expression) ? callLike.expression.name : callLike.expression; + } + if (isTaggedTemplateExpression(callLike)) { + return isPropertyAccessExpression(callLike.tag) ? callLike.tag.name : callLike.tag; + } + if (isJsxOpeningLikeElement(callLike)) { + return callLike.tagName; + } + return callLike; + } + function isPromiseResolveArityError(node) { + if (!isCallExpression(node) || !isIdentifier(node.expression)) return false; + const symbol = resolveName( + node.expression, + node.expression.escapedText, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + const decl = symbol == null ? void 0 : symbol.valueDeclaration; + if (!decl || !isParameter(decl) || !isFunctionExpressionOrArrowFunction(decl.parent) || !isNewExpression(decl.parent.parent) || !isIdentifier(decl.parent.parent.expression)) { + return false; + } + const globalPromiseSymbol = getGlobalPromiseConstructorSymbol( + /*reportErrors*/ + false + ); + if (!globalPromiseSymbol) return false; + const constructorSymbol = getSymbolAtLocation( + decl.parent.parent.expression, + /*ignoreErrors*/ + true + ); + return constructorSymbol === globalPromiseSymbol; + } + function getArgumentArityError(node, signatures, args, headMessage) { + var _a; + const spreadIndex = getSpreadArgumentIndex(args); + if (spreadIndex > -1) { + return createDiagnosticForNode(args[spreadIndex], Diagnostics.A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter); + } + let min2 = Number.POSITIVE_INFINITY; + let max = Number.NEGATIVE_INFINITY; + let maxBelow = Number.NEGATIVE_INFINITY; + let minAbove = Number.POSITIVE_INFINITY; + let closestSignature; + for (const sig of signatures) { + const minParameter = getMinArgumentCount(sig); + const maxParameter = getParameterCount(sig); + if (minParameter < min2) { + min2 = minParameter; + closestSignature = sig; + } + max = Math.max(max, maxParameter); + if (minParameter < args.length && minParameter > maxBelow) maxBelow = minParameter; + if (args.length < maxParameter && maxParameter < minAbove) minAbove = maxParameter; + } + const hasRestParameter2 = some(signatures, hasEffectiveRestParameter); + const parameterRange = hasRestParameter2 ? min2 : min2 < max ? min2 + "-" + max : min2; + const isVoidPromiseError = !hasRestParameter2 && parameterRange === 1 && args.length === 0 && isPromiseResolveArityError(node); + if (isVoidPromiseError && isInJSFile(node)) { + return getDiagnosticForCallNode(node, Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments); + } + const error3 = isDecorator(node) ? hasRestParameter2 ? Diagnostics.The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0 : Diagnostics.The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0 : hasRestParameter2 ? Diagnostics.Expected_at_least_0_arguments_but_got_1 : isVoidPromiseError ? Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise : Diagnostics.Expected_0_arguments_but_got_1; + if (min2 < args.length && args.length < max) { + if (headMessage) { + let chain = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, + args.length, + maxBelow, + minAbove + ); + chain = chainDiagnosticMessages(chain, headMessage); + return getDiagnosticForCallNode(node, chain); + } + return getDiagnosticForCallNode(node, Diagnostics.No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments, args.length, maxBelow, minAbove); + } else if (args.length < min2) { + let diagnostic; + if (headMessage) { + let chain = chainDiagnosticMessages( + /*details*/ + void 0, + error3, + parameterRange, + args.length + ); + chain = chainDiagnosticMessages(chain, headMessage); + diagnostic = getDiagnosticForCallNode(node, chain); + } else { + diagnostic = getDiagnosticForCallNode(node, error3, parameterRange, args.length); + } + const parameter = (_a = closestSignature == null ? void 0 : closestSignature.declaration) == null ? void 0 : _a.parameters[closestSignature.thisParameter ? args.length + 1 : args.length]; + if (parameter) { + const messageAndArgs = isBindingPattern(parameter.name) ? [Diagnostics.An_argument_matching_this_binding_pattern_was_not_provided] : isRestParameter(parameter) ? [Diagnostics.Arguments_for_the_rest_parameter_0_were_not_provided, idText(getFirstIdentifier(parameter.name))] : [Diagnostics.An_argument_for_0_was_not_provided, !parameter.name ? args.length : idText(getFirstIdentifier(parameter.name))]; + const parameterError = createDiagnosticForNode(parameter, ...messageAndArgs); + return addRelatedInfo(diagnostic, parameterError); + } + return diagnostic; + } else { + const errorSpan = factory.createNodeArray(args.slice(max)); + const pos = first(errorSpan).pos; + let end = last(errorSpan).end; + if (end === pos) { + end++; + } + setTextRangePosEnd(errorSpan, pos, end); + if (headMessage) { + let chain = chainDiagnosticMessages( + /*details*/ + void 0, + error3, + parameterRange, + args.length + ); + chain = chainDiagnosticMessages(chain, headMessage); + return createDiagnosticForNodeArrayFromMessageChain(getSourceFileOfNode(node), errorSpan, chain); + } + return createDiagnosticForNodeArray(getSourceFileOfNode(node), errorSpan, error3, parameterRange, args.length); + } + } + function getTypeArgumentArityError(node, signatures, typeArguments, headMessage) { + const argCount = typeArguments.length; + if (signatures.length === 1) { + const sig = signatures[0]; + const min2 = getMinTypeArgumentCount(sig.typeParameters); + const max = length(sig.typeParameters); + if (headMessage) { + let chain = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Expected_0_type_arguments_but_got_1, + min2 < max ? min2 + "-" + max : min2, + argCount + ); + chain = chainDiagnosticMessages(chain, headMessage); + return createDiagnosticForNodeArrayFromMessageChain(getSourceFileOfNode(node), typeArguments, chain); + } + return createDiagnosticForNodeArray(getSourceFileOfNode(node), typeArguments, Diagnostics.Expected_0_type_arguments_but_got_1, min2 < max ? min2 + "-" + max : min2, argCount); + } + let belowArgCount = -Infinity; + let aboveArgCount = Infinity; + for (const sig of signatures) { + const min2 = getMinTypeArgumentCount(sig.typeParameters); + const max = length(sig.typeParameters); + if (min2 > argCount) { + aboveArgCount = Math.min(aboveArgCount, min2); + } else if (max < argCount) { + belowArgCount = Math.max(belowArgCount, max); + } + } + if (belowArgCount !== -Infinity && aboveArgCount !== Infinity) { + if (headMessage) { + let chain = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments, + argCount, + belowArgCount, + aboveArgCount + ); + chain = chainDiagnosticMessages(chain, headMessage); + return createDiagnosticForNodeArrayFromMessageChain(getSourceFileOfNode(node), typeArguments, chain); + } + return createDiagnosticForNodeArray(getSourceFileOfNode(node), typeArguments, Diagnostics.No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments, argCount, belowArgCount, aboveArgCount); + } + if (headMessage) { + let chain = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Expected_0_type_arguments_but_got_1, + belowArgCount === -Infinity ? aboveArgCount : belowArgCount, + argCount + ); + chain = chainDiagnosticMessages(chain, headMessage); + return createDiagnosticForNodeArrayFromMessageChain(getSourceFileOfNode(node), typeArguments, chain); + } + return createDiagnosticForNodeArray(getSourceFileOfNode(node), typeArguments, Diagnostics.Expected_0_type_arguments_but_got_1, belowArgCount === -Infinity ? aboveArgCount : belowArgCount, argCount); + } + function resolveCall(node, signatures, candidatesOutArray, checkMode, callChainFlags, headMessage) { + const isTaggedTemplate = node.kind === 216 /* TaggedTemplateExpression */; + const isDecorator2 = node.kind === 171 /* Decorator */; + const isJsxOpeningOrSelfClosingElement = isJsxOpeningLikeElement(node); + const isJsxOpenFragment = isJsxOpeningFragment(node); + const isInstanceof = node.kind === 227 /* BinaryExpression */; + const reportErrors2 = !isInferencePartiallyBlocked && !candidatesOutArray; + let candidatesForArgumentError; + let candidateForArgumentArityError; + let candidateForTypeArgumentError; + let result; + let argCheckMode = 0 /* Normal */; + let candidates = []; + let typeArguments; + if (!isDecorator2 && !isInstanceof && !isSuperCall(node) && !isJsxOpenFragment) { + typeArguments = node.typeArguments; + if (isTaggedTemplate || isJsxOpeningOrSelfClosingElement || node.expression.kind !== 108 /* SuperKeyword */) { + forEach(typeArguments, checkSourceElement); + } + } + candidates = candidatesOutArray || []; + reorderCandidates(signatures, candidates, callChainFlags); + if (!isJsxOpenFragment) { + if (!candidates.length) { + if (reportErrors2) { + diagnostics.add(getDiagnosticForCallNode(node, Diagnostics.Call_target_does_not_contain_any_signatures)); + } + return resolveErrorCall(node); + } + } + const args = getEffectiveCallArguments(node); + const isSingleNonGenericCandidate = candidates.length === 1 && !candidates[0].typeParameters; + if (!isDecorator2 && !isSingleNonGenericCandidate && some(args, isContextSensitive)) { + argCheckMode = 4 /* SkipContextSensitive */; + } + const signatureHelpTrailingComma = !!(checkMode & 16 /* IsForSignatureHelp */) && node.kind === 214 /* CallExpression */ && node.arguments.hasTrailingComma; + if (candidates.length > 1) { + result = chooseOverload(candidates, subtypeRelation, isSingleNonGenericCandidate, signatureHelpTrailingComma); + } + if (!result) { + result = chooseOverload(candidates, assignableRelation, isSingleNonGenericCandidate, signatureHelpTrailingComma); + } + const links = getNodeLinks(node); + if (links.resolvedSignature !== resolvingSignature && !candidatesOutArray) { + Debug.assert(links.resolvedSignature); + return links.resolvedSignature; + } + if (result) { + return result; + } + result = getCandidateForOverloadFailure(node, candidates, args, !!candidatesOutArray, checkMode); + links.resolvedSignature = result; + if (reportErrors2) { + if (!headMessage && isInstanceof) { + headMessage = Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method; + } + if (candidatesForArgumentError) { + if (candidatesForArgumentError.length === 1 || candidatesForArgumentError.length > 3) { + const last2 = candidatesForArgumentError[candidatesForArgumentError.length - 1]; + let chain; + if (candidatesForArgumentError.length > 3) { + chain = chainDiagnosticMessages(chain, Diagnostics.The_last_overload_gave_the_following_error); + chain = chainDiagnosticMessages(chain, Diagnostics.No_overload_matches_this_call); + } + if (headMessage) { + chain = chainDiagnosticMessages(chain, headMessage); + } + const diags = getSignatureApplicabilityError( + node, + args, + last2, + assignableRelation, + 0 /* Normal */, + /*reportErrors*/ + true, + () => chain + ); + if (diags) { + for (const d of diags) { + if (last2.declaration && candidatesForArgumentError.length > 3) { + addRelatedInfo(d, createDiagnosticForNode(last2.declaration, Diagnostics.The_last_overload_is_declared_here)); + } + addImplementationSuccessElaboration(last2, d); + diagnostics.add(d); + } + } else { + Debug.fail("No error for last overload signature"); + } + } else { + const allDiagnostics = []; + let max = 0; + let min2 = Number.MAX_VALUE; + let minIndex = 0; + let i = 0; + for (const c of candidatesForArgumentError) { + const chain2 = () => chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Overload_0_of_1_2_gave_the_following_error, + i + 1, + candidates.length, + signatureToString(c) + ); + const diags2 = getSignatureApplicabilityError( + node, + args, + c, + assignableRelation, + 0 /* Normal */, + /*reportErrors*/ + true, + chain2 + ); + if (diags2) { + if (diags2.length <= min2) { + min2 = diags2.length; + minIndex = i; + } + max = Math.max(max, diags2.length); + allDiagnostics.push(diags2); + } else { + Debug.fail("No error for 3 or fewer overload signatures"); + } + i++; + } + const diags = max > 1 ? allDiagnostics[minIndex] : flatten(allDiagnostics); + Debug.assert(diags.length > 0, "No errors reported for 3 or fewer overload signatures"); + let chain = chainDiagnosticMessages( + map(diags, createDiagnosticMessageChainFromDiagnostic), + Diagnostics.No_overload_matches_this_call + ); + if (headMessage) { + chain = chainDiagnosticMessages(chain, headMessage); + } + const related = [...flatMap(diags, (d) => d.relatedInformation)]; + let diag2; + if (every(diags, (d) => d.start === diags[0].start && d.length === diags[0].length && d.file === diags[0].file)) { + const { file, start, length: length2 } = diags[0]; + diag2 = { file, start, length: length2, code: chain.code, category: chain.category, messageText: chain, relatedInformation: related }; + } else { + diag2 = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(node), getErrorNodeForCallNode(node), chain, related); + } + addImplementationSuccessElaboration(candidatesForArgumentError[0], diag2); + diagnostics.add(diag2); + } + } else if (candidateForArgumentArityError) { + diagnostics.add(getArgumentArityError(node, [candidateForArgumentArityError], args, headMessage)); + } else if (candidateForTypeArgumentError) { + checkTypeArguments( + candidateForTypeArgumentError, + node.typeArguments, + /*reportErrors*/ + true, + headMessage + ); + } else if (!isJsxOpenFragment) { + const signaturesWithCorrectTypeArgumentArity = filter(signatures, (s) => hasCorrectTypeArgumentArity(s, typeArguments)); + if (signaturesWithCorrectTypeArgumentArity.length === 0) { + diagnostics.add(getTypeArgumentArityError(node, signatures, typeArguments, headMessage)); + } else { + diagnostics.add(getArgumentArityError(node, signaturesWithCorrectTypeArgumentArity, args, headMessage)); + } + } + } + return result; + function addImplementationSuccessElaboration(failed2, diagnostic) { + var _a, _b; + const oldCandidatesForArgumentError = candidatesForArgumentError; + const oldCandidateForArgumentArityError = candidateForArgumentArityError; + const oldCandidateForTypeArgumentError = candidateForTypeArgumentError; + const failedSignatureDeclarations = ((_b = (_a = failed2.declaration) == null ? void 0 : _a.symbol) == null ? void 0 : _b.declarations) || emptyArray; + const isOverload2 = failedSignatureDeclarations.length > 1; + const implDecl = isOverload2 ? find(failedSignatureDeclarations, (d) => isFunctionLikeDeclaration(d) && nodeIsPresent(d.body)) : void 0; + if (implDecl) { + const candidate = getSignatureFromDeclaration(implDecl); + const isSingleNonGenericCandidate2 = !candidate.typeParameters; + if (chooseOverload([candidate], assignableRelation, isSingleNonGenericCandidate2)) { + addRelatedInfo(diagnostic, createDiagnosticForNode(implDecl, Diagnostics.The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_are_not_externally_visible)); + } + } + candidatesForArgumentError = oldCandidatesForArgumentError; + candidateForArgumentArityError = oldCandidateForArgumentArityError; + candidateForTypeArgumentError = oldCandidateForTypeArgumentError; + } + function chooseOverload(candidates2, relation, isSingleNonGenericCandidate2, signatureHelpTrailingComma2 = false) { + candidatesForArgumentError = void 0; + candidateForArgumentArityError = void 0; + candidateForTypeArgumentError = void 0; + if (isSingleNonGenericCandidate2) { + const candidate = candidates2[0]; + if (some(typeArguments) || !hasCorrectArity(node, args, candidate, signatureHelpTrailingComma2)) { + return void 0; + } + if (getSignatureApplicabilityError( + node, + args, + candidate, + relation, + 0 /* Normal */, + /*reportErrors*/ + false, + /*containingMessageChain*/ + void 0 + )) { + candidatesForArgumentError = [candidate]; + return void 0; + } + return candidate; + } + for (let candidateIndex = 0; candidateIndex < candidates2.length; candidateIndex++) { + const candidate = candidates2[candidateIndex]; + if (!hasCorrectTypeArgumentArity(candidate, typeArguments) || !hasCorrectArity(node, args, candidate, signatureHelpTrailingComma2)) { + continue; + } + let checkCandidate; + let inferenceContext; + if (candidate.typeParameters) { + let typeArgumentTypes; + if (some(typeArguments)) { + typeArgumentTypes = checkTypeArguments( + candidate, + typeArguments, + /*reportErrors*/ + false + ); + if (!typeArgumentTypes) { + candidateForTypeArgumentError = candidate; + continue; + } + } else { + inferenceContext = createInferenceContext( + candidate.typeParameters, + candidate, + /*flags*/ + isInJSFile(node) ? 2 /* AnyDefault */ : 0 /* None */ + ); + typeArgumentTypes = inferTypeArguments(node, candidate, args, argCheckMode | 8 /* SkipGenericFunctions */, inferenceContext); + argCheckMode |= inferenceContext.flags & 4 /* SkippedGenericFunction */ ? 8 /* SkipGenericFunctions */ : 0 /* Normal */; + } + checkCandidate = getSignatureInstantiation(candidate, typeArgumentTypes, isInJSFile(candidate.declaration), inferenceContext && inferenceContext.inferredTypeParameters); + if (getNonArrayRestType(candidate) && !hasCorrectArity(node, args, checkCandidate, signatureHelpTrailingComma2)) { + candidateForArgumentArityError = checkCandidate; + continue; + } + } else { + checkCandidate = candidate; + } + if (getSignatureApplicabilityError( + node, + args, + checkCandidate, + relation, + argCheckMode, + /*reportErrors*/ + false, + /*containingMessageChain*/ + void 0 + )) { + (candidatesForArgumentError || (candidatesForArgumentError = [])).push(checkCandidate); + continue; + } + if (argCheckMode) { + argCheckMode = 0 /* Normal */; + if (inferenceContext) { + const typeArgumentTypes = inferTypeArguments(node, candidate, args, argCheckMode, inferenceContext); + checkCandidate = getSignatureInstantiation(candidate, typeArgumentTypes, isInJSFile(candidate.declaration), inferenceContext.inferredTypeParameters); + if (getNonArrayRestType(candidate) && !hasCorrectArity(node, args, checkCandidate, signatureHelpTrailingComma2)) { + candidateForArgumentArityError = checkCandidate; + continue; + } + } + if (getSignatureApplicabilityError( + node, + args, + checkCandidate, + relation, + argCheckMode, + /*reportErrors*/ + false, + /*containingMessageChain*/ + void 0 + )) { + (candidatesForArgumentError || (candidatesForArgumentError = [])).push(checkCandidate); + continue; + } + } + candidates2[candidateIndex] = checkCandidate; + return checkCandidate; + } + return void 0; + } + } + function getCandidateForOverloadFailure(node, candidates, args, hasCandidatesOutArray, checkMode) { + Debug.assert(candidates.length > 0); + checkNodeDeferred(node); + return hasCandidatesOutArray || candidates.length === 1 || candidates.some((c) => !!c.typeParameters) ? pickLongestCandidateSignature(node, candidates, args, checkMode) : createUnionOfSignaturesForOverloadFailure(candidates); + } + function createUnionOfSignaturesForOverloadFailure(candidates) { + const thisParameters = mapDefined(candidates, (c) => c.thisParameter); + let thisParameter; + if (thisParameters.length) { + thisParameter = createCombinedSymbolFromTypes(thisParameters, thisParameters.map(getTypeOfParameter)); + } + const { min: minArgumentCount, max: maxNonRestParam } = minAndMax(candidates, getNumNonRestParameters); + const parameters = []; + for (let i = 0; i < maxNonRestParam; i++) { + const symbols = mapDefined(candidates, (s) => signatureHasRestParameter(s) ? i < s.parameters.length - 1 ? s.parameters[i] : last(s.parameters) : i < s.parameters.length ? s.parameters[i] : void 0); + Debug.assert(symbols.length !== 0); + parameters.push(createCombinedSymbolFromTypes(symbols, mapDefined(candidates, (candidate) => tryGetTypeAtPosition(candidate, i)))); + } + const restParameterSymbols = mapDefined(candidates, (c) => signatureHasRestParameter(c) ? last(c.parameters) : void 0); + let flags = 128 /* IsSignatureCandidateForOverloadFailure */; + if (restParameterSymbols.length !== 0) { + const type = createArrayType(getUnionType(mapDefined(candidates, tryGetRestTypeOfSignature), 2 /* Subtype */)); + parameters.push(createCombinedSymbolForOverloadFailure(restParameterSymbols, type)); + flags |= 1 /* HasRestParameter */; + } + if (candidates.some(signatureHasLiteralTypes)) { + flags |= 2 /* HasLiteralTypes */; + } + return createSignature( + candidates[0].declaration, + /*typeParameters*/ + void 0, + // Before calling this we tested for `!candidates.some(c => !!c.typeParameters)`. + thisParameter, + parameters, + /*resolvedReturnType*/ + getIntersectionType(candidates.map(getReturnTypeOfSignature)), + /*resolvedTypePredicate*/ + void 0, + minArgumentCount, + flags + ); + } + function getNumNonRestParameters(signature) { + const numParams = signature.parameters.length; + return signatureHasRestParameter(signature) ? numParams - 1 : numParams; + } + function createCombinedSymbolFromTypes(sources, types) { + return createCombinedSymbolForOverloadFailure(sources, getUnionType(types, 2 /* Subtype */)); + } + function createCombinedSymbolForOverloadFailure(sources, type) { + return createSymbolWithType(first(sources), type); + } + function pickLongestCandidateSignature(node, candidates, args, checkMode) { + const bestIndex = getLongestCandidateIndex(candidates, apparentArgumentCount === void 0 ? args.length : apparentArgumentCount); + const candidate = candidates[bestIndex]; + const { typeParameters } = candidate; + if (!typeParameters) { + return candidate; + } + const typeArgumentNodes = callLikeExpressionMayHaveTypeArguments(node) ? node.typeArguments : void 0; + const instantiated = typeArgumentNodes ? createSignatureInstantiation(candidate, getTypeArgumentsFromNodes(typeArgumentNodes, typeParameters, isInJSFile(node))) : inferSignatureInstantiationForOverloadFailure(node, typeParameters, candidate, args, checkMode); + candidates[bestIndex] = instantiated; + return instantiated; + } + function getTypeArgumentsFromNodes(typeArgumentNodes, typeParameters, isJs) { + const typeArguments = typeArgumentNodes.map(getTypeOfNode); + while (typeArguments.length > typeParameters.length) { + typeArguments.pop(); + } + while (typeArguments.length < typeParameters.length) { + typeArguments.push(getDefaultFromTypeParameter(typeParameters[typeArguments.length]) || getConstraintOfTypeParameter(typeParameters[typeArguments.length]) || getDefaultTypeArgumentType(isJs)); + } + return typeArguments; + } + function inferSignatureInstantiationForOverloadFailure(node, typeParameters, candidate, args, checkMode) { + const inferenceContext = createInferenceContext( + typeParameters, + candidate, + /*flags*/ + isInJSFile(node) ? 2 /* AnyDefault */ : 0 /* None */ + ); + const typeArgumentTypes = inferTypeArguments(node, candidate, args, checkMode | 4 /* SkipContextSensitive */ | 8 /* SkipGenericFunctions */, inferenceContext); + return createSignatureInstantiation(candidate, typeArgumentTypes); + } + function getLongestCandidateIndex(candidates, argsCount) { + let maxParamsIndex = -1; + let maxParams = -1; + for (let i = 0; i < candidates.length; i++) { + const candidate = candidates[i]; + const paramCount = getParameterCount(candidate); + if (hasEffectiveRestParameter(candidate) || paramCount >= argsCount) { + return i; + } + if (paramCount > maxParams) { + maxParams = paramCount; + maxParamsIndex = i; + } + } + return maxParamsIndex; + } + function resolveCallExpression(node, candidatesOutArray, checkMode) { + if (node.expression.kind === 108 /* SuperKeyword */) { + const superType = checkSuperExpression(node.expression); + if (isTypeAny(superType)) { + for (const arg of node.arguments) { + checkExpression(arg); + } + return anySignature; + } + if (!isErrorType(superType)) { + const baseTypeNode = getEffectiveBaseTypeNode(getContainingClass(node)); + if (baseTypeNode) { + const baseConstructors = getInstantiatedConstructorsForTypeArguments(superType, baseTypeNode.typeArguments, baseTypeNode); + return resolveCall(node, baseConstructors, candidatesOutArray, checkMode, 0 /* None */); + } + } + return resolveUntypedCall(node); + } + let callChainFlags; + let funcType = checkExpression(node.expression); + if (isCallChain(node)) { + const nonOptionalType = getOptionalExpressionType(funcType, node.expression); + callChainFlags = nonOptionalType === funcType ? 0 /* None */ : isOutermostOptionalChain(node) ? 16 /* IsOuterCallChain */ : 8 /* IsInnerCallChain */; + funcType = nonOptionalType; + } else { + callChainFlags = 0 /* None */; + } + funcType = checkNonNullTypeWithReporter( + funcType, + node.expression, + reportCannotInvokePossiblyNullOrUndefinedError + ); + if (funcType === silentNeverType) { + return silentNeverSignature; + } + const apparentType = getApparentType(funcType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const numConstructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */).length; + if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, numConstructSignatures)) { + if (!isErrorType(funcType) && node.typeArguments) { + error2(node, Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); + } + return resolveUntypedCall(node); + } + if (!callSignatures.length) { + if (numConstructSignatures) { + error2(node, Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType)); + } else { + let relatedInformation; + if (node.arguments.length === 1) { + const text = getSourceFileOfNode(node).text; + if (isLineBreak(text.charCodeAt(skipTrivia( + text, + node.expression.end, + /*stopAfterLineBreak*/ + true + ) - 1))) { + relatedInformation = createDiagnosticForNode(node.expression, Diagnostics.Are_you_missing_a_semicolon); + } + } + invocationError(node.expression, apparentType, 0 /* Call */, relatedInformation); + } + return resolveErrorCall(node); + } + if (checkMode & 8 /* SkipGenericFunctions */ && !node.typeArguments && callSignatures.some(isGenericFunctionReturningFunction)) { + skippedGenericFunction(node, checkMode); + return resolvingSignature; + } + if (callSignatures.some((sig) => isInJSFile(sig.declaration) && !!getJSDocClassTag(sig.declaration))) { + error2(node, Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new, typeToString(funcType)); + return resolveErrorCall(node); + } + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, callChainFlags); + } + function isGenericFunctionReturningFunction(signature) { + return !!(signature.typeParameters && isFunctionType(getReturnTypeOfSignature(signature))); + } + function isUntypedFunctionCall(funcType, apparentFuncType, numCallSignatures, numConstructSignatures) { + return isTypeAny(funcType) || isTypeAny(apparentFuncType) && !!(funcType.flags & 262144 /* TypeParameter */) || !numCallSignatures && !numConstructSignatures && !(apparentFuncType.flags & 1048576 /* Union */) && !(getReducedType(apparentFuncType).flags & 131072 /* Never */) && isTypeAssignableTo(funcType, globalFunctionType); + } + function resolveNewExpression(node, candidatesOutArray, checkMode) { + let expressionType = checkNonNullExpression(node.expression); + if (expressionType === silentNeverType) { + return silentNeverSignature; + } + expressionType = getApparentType(expressionType); + if (isErrorType(expressionType)) { + return resolveErrorCall(node); + } + if (isTypeAny(expressionType)) { + if (node.typeArguments) { + error2(node, Diagnostics.Untyped_function_calls_may_not_accept_type_arguments); + } + return resolveUntypedCall(node); + } + const constructSignatures = getSignaturesOfType(expressionType, 1 /* Construct */); + if (constructSignatures.length) { + if (!isConstructorAccessible(node, constructSignatures[0])) { + return resolveErrorCall(node); + } + if (someSignature(constructSignatures, (signature) => !!(signature.flags & 4 /* Abstract */))) { + error2(node, Diagnostics.Cannot_create_an_instance_of_an_abstract_class); + return resolveErrorCall(node); + } + const valueDecl = expressionType.symbol && getClassLikeDeclarationOfSymbol(expressionType.symbol); + if (valueDecl && hasSyntacticModifier(valueDecl, 64 /* Abstract */)) { + error2(node, Diagnostics.Cannot_create_an_instance_of_an_abstract_class); + return resolveErrorCall(node); + } + return resolveCall(node, constructSignatures, candidatesOutArray, checkMode, 0 /* None */); + } + const callSignatures = getSignaturesOfType(expressionType, 0 /* Call */); + if (callSignatures.length) { + const signature = resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */); + if (!noImplicitAny) { + if (signature.declaration && !isJSConstructor(signature.declaration) && getReturnTypeOfSignature(signature) !== voidType) { + error2(node, Diagnostics.Only_a_void_function_can_be_called_with_the_new_keyword); + } + if (getThisTypeOfSignature(signature) === voidType) { + error2(node, Diagnostics.A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void); + } + } + return signature; + } + invocationError(node.expression, expressionType, 1 /* Construct */); + return resolveErrorCall(node); + } + function someSignature(signatures, f) { + if (isArray(signatures)) { + return some(signatures, (signature) => someSignature(signature, f)); + } + return signatures.compositeKind === 1048576 /* Union */ ? some(signatures.compositeSignatures, f) : f(signatures); + } + function typeHasProtectedAccessibleBase(target, type) { + const baseTypes = getBaseTypes(type); + if (!length(baseTypes)) { + return false; + } + const firstBase = baseTypes[0]; + if (firstBase.flags & 2097152 /* Intersection */) { + const types = firstBase.types; + const mixinFlags = findMixins(types); + let i = 0; + for (const intersectionMember of firstBase.types) { + if (!mixinFlags[i]) { + if (getObjectFlags(intersectionMember) & (1 /* Class */ | 2 /* Interface */)) { + if (intersectionMember.symbol === target) { + return true; + } + if (typeHasProtectedAccessibleBase(target, intersectionMember)) { + return true; + } + } + } + i++; + } + return false; + } + if (firstBase.symbol === target) { + return true; + } + return typeHasProtectedAccessibleBase(target, firstBase); + } + function isConstructorAccessible(node, signature) { + if (!signature || !signature.declaration) { + return true; + } + const declaration = signature.declaration; + const modifiers = getSelectedEffectiveModifierFlags(declaration, 6 /* NonPublicAccessibilityModifier */); + if (!modifiers || declaration.kind !== 177 /* Constructor */) { + return true; + } + const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(declaration.parent.symbol); + const declaringClass = getDeclaredTypeOfSymbol(declaration.parent.symbol); + if (!isNodeWithinClass(node, declaringClassDeclaration)) { + const containingClass = getContainingClass(node); + if (containingClass && modifiers & 4 /* Protected */) { + const containingType = getTypeOfNode(containingClass); + if (typeHasProtectedAccessibleBase(declaration.parent.symbol, containingType)) { + return true; + } + } + if (modifiers & 2 /* Private */) { + error2(node, Diagnostics.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration, typeToString(declaringClass)); + } + if (modifiers & 4 /* Protected */) { + error2(node, Diagnostics.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration, typeToString(declaringClass)); + } + return false; + } + return true; + } + function invocationErrorDetails(errorTarget, apparentType, kind) { + let errorInfo; + const isCall = kind === 0 /* Call */; + const awaitedType = getAwaitedType(apparentType); + const maybeMissingAwait = awaitedType && getSignaturesOfType(awaitedType, kind).length > 0; + if (apparentType.flags & 1048576 /* Union */) { + const types = apparentType.types; + let hasSignatures2 = false; + for (const constituent of types) { + const signatures = getSignaturesOfType(constituent, kind); + if (signatures.length !== 0) { + hasSignatures2 = true; + if (errorInfo) { + break; + } + } else { + if (!errorInfo) { + errorInfo = chainDiagnosticMessages( + errorInfo, + isCall ? Diagnostics.Type_0_has_no_call_signatures : Diagnostics.Type_0_has_no_construct_signatures, + typeToString(constituent) + ); + errorInfo = chainDiagnosticMessages( + errorInfo, + isCall ? Diagnostics.Not_all_constituents_of_type_0_are_callable : Diagnostics.Not_all_constituents_of_type_0_are_constructable, + typeToString(apparentType) + ); + } + if (hasSignatures2) { + break; + } + } + } + if (!hasSignatures2) { + errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + isCall ? Diagnostics.No_constituent_of_type_0_is_callable : Diagnostics.No_constituent_of_type_0_is_constructable, + typeToString(apparentType) + ); + } + if (!errorInfo) { + errorInfo = chainDiagnosticMessages( + errorInfo, + isCall ? Diagnostics.Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_other : Diagnostics.Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_with_each_other, + typeToString(apparentType) + ); + } + } else { + errorInfo = chainDiagnosticMessages( + errorInfo, + isCall ? Diagnostics.Type_0_has_no_call_signatures : Diagnostics.Type_0_has_no_construct_signatures, + typeToString(apparentType) + ); + } + let headMessage = isCall ? Diagnostics.This_expression_is_not_callable : Diagnostics.This_expression_is_not_constructable; + if (isCallExpression(errorTarget.parent) && errorTarget.parent.arguments.length === 0) { + const { resolvedSymbol } = getNodeLinks(errorTarget); + if (resolvedSymbol && resolvedSymbol.flags & 32768 /* GetAccessor */) { + headMessage = Diagnostics.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without; + } + } + return { + messageChain: chainDiagnosticMessages(errorInfo, headMessage), + relatedMessage: maybeMissingAwait ? Diagnostics.Did_you_forget_to_use_await : void 0 + }; + } + function invocationError(errorTarget, apparentType, kind, relatedInformation) { + const { messageChain, relatedMessage: relatedInfo } = invocationErrorDetails(errorTarget, apparentType, kind); + const diagnostic = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(errorTarget), errorTarget, messageChain); + if (relatedInfo) { + addRelatedInfo(diagnostic, createDiagnosticForNode(errorTarget, relatedInfo)); + } + if (isCallExpression(errorTarget.parent)) { + const { start, length: length2 } = getDiagnosticSpanForCallNode(errorTarget.parent); + diagnostic.start = start; + diagnostic.length = length2; + } + diagnostics.add(diagnostic); + invocationErrorRecovery(apparentType, kind, relatedInformation ? addRelatedInfo(diagnostic, relatedInformation) : diagnostic); + } + function invocationErrorRecovery(apparentType, kind, diagnostic) { + if (!apparentType.symbol) { + return; + } + const importNode = getSymbolLinks(apparentType.symbol).originatingImport; + if (importNode && !isImportCall(importNode)) { + const sigs = getSignaturesOfType(getTypeOfSymbol(getSymbolLinks(apparentType.symbol).target), kind); + if (!sigs || !sigs.length) return; + addRelatedInfo(diagnostic, createDiagnosticForNode(importNode, Diagnostics.Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cause_a_failure_at_runtime_Consider_using_a_default_import_or_import_require_here_instead)); + } + } + function resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode) { + const tagType = checkExpression(node.tag); + const apparentType = getApparentType(tagType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const numConstructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */).length; + if (isUntypedFunctionCall(tagType, apparentType, callSignatures.length, numConstructSignatures)) { + return resolveUntypedCall(node); + } + if (!callSignatures.length) { + if (isArrayLiteralExpression(node.parent)) { + const diagnostic = createDiagnosticForNode(node.tag, Diagnostics.It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tagged_template_expression_which_cannot_be_invoked); + diagnostics.add(diagnostic); + return resolveErrorCall(node); + } + invocationError(node.tag, apparentType, 0 /* Call */); + return resolveErrorCall(node); + } + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */); + } + function getDiagnosticHeadMessageForDecoratorResolution(node) { + switch (node.parent.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return Diagnostics.Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression; + case 170 /* Parameter */: + return Diagnostics.Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression; + case 173 /* PropertyDeclaration */: + return Diagnostics.Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return Diagnostics.Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression; + default: + return Debug.fail(); + } + } + function resolveDecorator(node, candidatesOutArray, checkMode) { + const funcType = checkExpression(node.expression); + const apparentType = getApparentType(funcType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const numConstructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */).length; + if (isUntypedFunctionCall(funcType, apparentType, callSignatures.length, numConstructSignatures)) { + return resolveUntypedCall(node); + } + if (isPotentiallyUncalledDecorator(node, callSignatures) && !isParenthesizedExpression(node.expression)) { + const nodeStr = getTextOfNode( + node.expression, + /*includeTrivia*/ + false + ); + error2(node, Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0, nodeStr); + return resolveErrorCall(node); + } + const headMessage = getDiagnosticHeadMessageForDecoratorResolution(node); + if (!callSignatures.length) { + const errorDetails = invocationErrorDetails(node.expression, apparentType, 0 /* Call */); + const messageChain = chainDiagnosticMessages(errorDetails.messageChain, headMessage); + const diag2 = createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(node.expression), node.expression, messageChain); + if (errorDetails.relatedMessage) { + addRelatedInfo(diag2, createDiagnosticForNode(node.expression, errorDetails.relatedMessage)); + } + diagnostics.add(diag2); + invocationErrorRecovery(apparentType, 0 /* Call */, diag2); + return resolveErrorCall(node); + } + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */, headMessage); + } + function createSignatureForJSXIntrinsic(node, result) { + const namespace = getJsxNamespaceAt(node); + const exports2 = namespace && getExportsOfSymbol(namespace); + const typeSymbol = exports2 && getSymbol2(exports2, JsxNames.Element, 788968 /* Type */); + const returnNode = typeSymbol && nodeBuilder.symbolToEntityName(typeSymbol, 788968 /* Type */, node); + const declaration = factory.createFunctionTypeNode( + /*typeParameters*/ + void 0, + [factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "props", + /*questionToken*/ + void 0, + nodeBuilder.typeToTypeNode(result, node) + )], + returnNode ? factory.createTypeReferenceNode( + returnNode, + /*typeArguments*/ + void 0 + ) : factory.createKeywordTypeNode(133 /* AnyKeyword */) + ); + const parameterSymbol = createSymbol(1 /* FunctionScopedVariable */, "props"); + parameterSymbol.links.type = result; + return createSignature( + declaration, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [parameterSymbol], + typeSymbol ? getDeclaredTypeOfSymbol(typeSymbol) : errorType, + /*resolvedTypePredicate*/ + void 0, + 1, + 0 /* None */ + ); + } + function getJSXFragmentType(node) { + const sourceFileLinks = getNodeLinks(getSourceFileOfNode(node)); + if (sourceFileLinks.jsxFragmentType !== void 0) return sourceFileLinks.jsxFragmentType; + const jsxFragmentFactoryName = getJsxNamespace(node); + const shouldResolveFactoryReference = (compilerOptions.jsx === 2 /* React */ || compilerOptions.jsxFragmentFactory !== void 0) && jsxFragmentFactoryName !== "null"; + if (!shouldResolveFactoryReference) return sourceFileLinks.jsxFragmentType = anyType; + const shouldModuleRefErr = compilerOptions.jsx !== 1 /* Preserve */ && compilerOptions.jsx !== 3 /* ReactNative */; + const jsxFactoryRefErr = diagnostics ? Diagnostics.Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found : void 0; + const jsxFactorySymbol = getJsxNamespaceContainerForImplicitImport(node) ?? resolveName( + node, + jsxFragmentFactoryName, + shouldModuleRefErr ? 111551 /* Value */ : 111551 /* Value */ & ~384 /* Enum */, + /*nameNotFoundMessage*/ + jsxFactoryRefErr, + /*isUse*/ + true + ); + if (jsxFactorySymbol === void 0) return sourceFileLinks.jsxFragmentType = errorType; + if (jsxFactorySymbol.escapedName === ReactNames.Fragment) return sourceFileLinks.jsxFragmentType = getTypeOfSymbol(jsxFactorySymbol); + const resolvedAlias = (jsxFactorySymbol.flags & 2097152 /* Alias */) === 0 ? jsxFactorySymbol : resolveAlias(jsxFactorySymbol); + const reactExports = jsxFactorySymbol && getExportsOfSymbol(resolvedAlias); + const typeSymbol = reactExports && getSymbol2(reactExports, ReactNames.Fragment, 2 /* BlockScopedVariable */); + const type = typeSymbol && getTypeOfSymbol(typeSymbol); + return sourceFileLinks.jsxFragmentType = type === void 0 ? errorType : type; + } + function resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode) { + const isJsxOpenFragment = isJsxOpeningFragment(node); + let exprTypes; + if (!isJsxOpenFragment) { + if (isJsxIntrinsicTagName(node.tagName)) { + const result = getIntrinsicAttributesTypeFromJsxOpeningLikeElement(node); + const fakeSignature = createSignatureForJSXIntrinsic(node, result); + checkTypeAssignableToAndOptionallyElaborate(checkExpressionWithContextualType( + node.attributes, + getEffectiveFirstArgumentForJsxSignature(fakeSignature, node), + /*inferenceContext*/ + void 0, + 0 /* Normal */ + ), result, node.tagName, node.attributes); + if (length(node.typeArguments)) { + forEach(node.typeArguments, checkSourceElement); + diagnostics.add(createDiagnosticForNodeArray(getSourceFileOfNode(node), node.typeArguments, Diagnostics.Expected_0_type_arguments_but_got_1, 0, length(node.typeArguments))); + } + return fakeSignature; + } + exprTypes = checkExpression(node.tagName); + } else { + exprTypes = getJSXFragmentType(node); + } + const apparentType = getApparentType(exprTypes); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const signatures = getUninstantiatedJsxSignaturesOfType(exprTypes, node); + if (isUntypedFunctionCall( + exprTypes, + apparentType, + signatures.length, + /*constructSignatures*/ + 0 + )) { + return resolveUntypedCall(node); + } + if (signatures.length === 0) { + if (isJsxOpenFragment) { + error2(node, Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, getTextOfNode(node)); + } else { + error2(node.tagName, Diagnostics.JSX_element_type_0_does_not_have_any_construct_or_call_signatures, getTextOfNode(node.tagName)); + } + return resolveErrorCall(node); + } + return resolveCall(node, signatures, candidatesOutArray, checkMode, 0 /* None */); + } + function resolveInstanceofExpression(node, candidatesOutArray, checkMode) { + const rightType = checkExpression(node.right); + if (!isTypeAny(rightType)) { + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(rightType); + if (hasInstanceMethodType) { + const apparentType = getApparentType(hasInstanceMethodType); + if (isErrorType(apparentType)) { + return resolveErrorCall(node); + } + const callSignatures = getSignaturesOfType(apparentType, 0 /* Call */); + const constructSignatures = getSignaturesOfType(apparentType, 1 /* Construct */); + if (isUntypedFunctionCall(hasInstanceMethodType, apparentType, callSignatures.length, constructSignatures.length)) { + return resolveUntypedCall(node); + } + if (callSignatures.length) { + return resolveCall(node, callSignatures, candidatesOutArray, checkMode, 0 /* None */); + } + } else if (!(typeHasCallOrConstructSignatures(rightType) || isTypeSubtypeOf(rightType, globalFunctionType))) { + error2(node.right, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_type_assignable_to_the_Function_interface_type_or_an_object_type_with_a_Symbol_hasInstance_method); + return resolveErrorCall(node); + } + } + return anySignature; + } + function isPotentiallyUncalledDecorator(decorator, signatures) { + return signatures.length && every(signatures, (signature) => signature.minArgumentCount === 0 && !signatureHasRestParameter(signature) && signature.parameters.length < getDecoratorArgumentCount(decorator, signature)); + } + function resolveSignature(node, candidatesOutArray, checkMode) { + switch (node.kind) { + case 214 /* CallExpression */: + return resolveCallExpression(node, candidatesOutArray, checkMode); + case 215 /* NewExpression */: + return resolveNewExpression(node, candidatesOutArray, checkMode); + case 216 /* TaggedTemplateExpression */: + return resolveTaggedTemplateExpression(node, candidatesOutArray, checkMode); + case 171 /* Decorator */: + return resolveDecorator(node, candidatesOutArray, checkMode); + case 290 /* JsxOpeningFragment */: + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + return resolveJsxOpeningLikeElement(node, candidatesOutArray, checkMode); + case 227 /* BinaryExpression */: + return resolveInstanceofExpression(node, candidatesOutArray, checkMode); + } + Debug.assertNever(node, "Branch in 'resolveSignature' should be unreachable."); + } + function getResolvedSignature(node, candidatesOutArray, checkMode) { + const links = getNodeLinks(node); + const cached = links.resolvedSignature; + if (cached && cached !== resolvingSignature && !candidatesOutArray) { + return cached; + } + const saveResolutionStart = resolutionStart; + if (!cached) { + resolutionStart = resolutionTargets.length; + } + links.resolvedSignature = resolvingSignature; + const result = resolveSignature(node, candidatesOutArray, checkMode || 0 /* Normal */); + resolutionStart = saveResolutionStart; + if (result !== resolvingSignature) { + links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; + } + return result; + } + function isJSConstructor(node) { + var _a; + if (!node || !isInJSFile(node)) { + return false; + } + const func = isFunctionDeclaration(node) || isFunctionExpression(node) ? node : (isVariableDeclaration(node) || isPropertyAssignment(node)) && node.initializer && isFunctionExpression(node.initializer) ? node.initializer : void 0; + if (func) { + if (getJSDocClassTag(node)) return true; + if (isPropertyAssignment(walkUpParenthesizedExpressions(func.parent))) return false; + const symbol = getSymbolOfDeclaration(func); + return !!((_a = symbol == null ? void 0 : symbol.members) == null ? void 0 : _a.size); + } + return false; + } + function mergeJSSymbols(target, source) { + var _a, _b; + if (source) { + const links = getSymbolLinks(source); + if (!links.inferredClassSymbol || !links.inferredClassSymbol.has(getSymbolId(target))) { + const inferred = isTransientSymbol(target) ? target : cloneSymbol(target); + inferred.exports = inferred.exports || createSymbolTable(); + inferred.members = inferred.members || createSymbolTable(); + inferred.flags |= source.flags & 32 /* Class */; + if ((_a = source.exports) == null ? void 0 : _a.size) { + mergeSymbolTable(inferred.exports, source.exports); + } + if ((_b = source.members) == null ? void 0 : _b.size) { + mergeSymbolTable(inferred.members, source.members); + } + (links.inferredClassSymbol || (links.inferredClassSymbol = /* @__PURE__ */ new Map())).set(getSymbolId(inferred), inferred); + return inferred; + } + return links.inferredClassSymbol.get(getSymbolId(target)); + } + } + function getAssignedClassSymbol(decl) { + var _a; + const assignmentSymbol = decl && getSymbolOfExpando( + decl, + /*allowDeclaration*/ + true + ); + const prototype = (_a = assignmentSymbol == null ? void 0 : assignmentSymbol.exports) == null ? void 0 : _a.get("prototype"); + const init = (prototype == null ? void 0 : prototype.valueDeclaration) && getAssignedJSPrototype(prototype.valueDeclaration); + return init ? getSymbolOfDeclaration(init) : void 0; + } + function getSymbolOfExpando(node, allowDeclaration) { + if (!node.parent) { + return void 0; + } + let name; + let decl; + if (isVariableDeclaration(node.parent) && node.parent.initializer === node) { + if (!isInJSFile(node) && !(isVarConstLike2(node.parent) && isFunctionLikeDeclaration(node))) { + return void 0; + } + name = node.parent.name; + decl = node.parent; + } else if (isBinaryExpression(node.parent)) { + const parentNode = node.parent; + const parentNodeOperator = node.parent.operatorToken.kind; + if (parentNodeOperator === 64 /* EqualsToken */ && (allowDeclaration || parentNode.right === node)) { + name = parentNode.left; + decl = name; + } else if (parentNodeOperator === 57 /* BarBarToken */ || parentNodeOperator === 61 /* QuestionQuestionToken */) { + if (isVariableDeclaration(parentNode.parent) && parentNode.parent.initializer === parentNode) { + name = parentNode.parent.name; + decl = parentNode.parent; + } else if (isBinaryExpression(parentNode.parent) && parentNode.parent.operatorToken.kind === 64 /* EqualsToken */ && (allowDeclaration || parentNode.parent.right === parentNode)) { + name = parentNode.parent.left; + decl = name; + } + if (!name || !isBindableStaticNameExpression(name) || !isSameEntityName(name, parentNode.left)) { + return void 0; + } + } + } else if (allowDeclaration && isFunctionDeclaration(node)) { + name = node.name; + decl = node; + } + if (!decl || !name || !allowDeclaration && !getExpandoInitializer(node, isPrototypeAccess(name))) { + return void 0; + } + return getSymbolOfNode(decl); + } + function getAssignedJSPrototype(node) { + if (!node.parent) { + return false; + } + let parent2 = node.parent; + while (parent2 && parent2.kind === 212 /* PropertyAccessExpression */) { + parent2 = parent2.parent; + } + if (parent2 && isBinaryExpression(parent2) && isPrototypeAccess(parent2.left) && parent2.operatorToken.kind === 64 /* EqualsToken */) { + const right = getInitializerOfBinaryExpression(parent2); + return isObjectLiteralExpression(right) && right; + } + } + function checkCallExpression(node, checkMode) { + var _a, _b, _c; + checkGrammarTypeArguments(node, node.typeArguments); + const signature = getResolvedSignature( + node, + /*candidatesOutArray*/ + void 0, + checkMode + ); + if (signature === resolvingSignature) { + return silentNeverType; + } + checkDeprecatedSignature(signature, node); + if (node.expression.kind === 108 /* SuperKeyword */) { + return voidType; + } + if (node.kind === 215 /* NewExpression */) { + const declaration = signature.declaration; + if (declaration && declaration.kind !== 177 /* Constructor */ && declaration.kind !== 181 /* ConstructSignature */ && declaration.kind !== 186 /* ConstructorType */ && !(isJSDocSignature(declaration) && ((_b = (_a = getJSDocRoot(declaration)) == null ? void 0 : _a.parent) == null ? void 0 : _b.kind) === 177 /* Constructor */) && !isJSDocConstructSignature(declaration) && !isJSConstructor(declaration)) { + if (noImplicitAny) { + error2(node, Diagnostics.new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type); + } + return anyType; + } + } + if (isInJSFile(node) && isCommonJsRequire(node)) { + return resolveExternalModuleTypeByLiteral(node.arguments[0]); + } + const returnType = getReturnTypeOfSignature(signature); + if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) { + return getESSymbolLikeTypeForNode(walkUpParenthesizedExpressions(node.parent)); + } + if (node.kind === 214 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 245 /* ExpressionStatement */ && returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) { + if (!isDottedName(node.expression)) { + error2(node.expression, Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name); + } else if (!getEffectsSignature(node)) { + const diagnostic = error2(node.expression, Diagnostics.Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation); + getTypeOfDottedName(node.expression, diagnostic); + } + } + if (isInJSFile(node)) { + const jsSymbol = getSymbolOfExpando( + node, + /*allowDeclaration*/ + false + ); + if ((_c = jsSymbol == null ? void 0 : jsSymbol.exports) == null ? void 0 : _c.size) { + const jsAssignmentType = createAnonymousType(jsSymbol, jsSymbol.exports, emptyArray, emptyArray, emptyArray); + jsAssignmentType.objectFlags |= 4096 /* JSLiteral */; + return getIntersectionType([returnType, jsAssignmentType]); + } + } + return returnType; + } + function checkDeprecatedSignature(signature, node) { + if (signature.flags & 128 /* IsSignatureCandidateForOverloadFailure */) return; + if (signature.declaration && signature.declaration.flags & 536870912 /* Deprecated */) { + const suggestionNode = getDeprecatedSuggestionNode(node); + const name = tryGetPropertyAccessOrIdentifierToString(getInvokedExpression(node)); + addDeprecatedSuggestionWithSignature(suggestionNode, signature.declaration, name, signatureToString(signature)); + } + } + function getDeprecatedSuggestionNode(node) { + node = skipParentheses(node); + switch (node.kind) { + case 214 /* CallExpression */: + case 171 /* Decorator */: + case 215 /* NewExpression */: + return getDeprecatedSuggestionNode(node.expression); + case 216 /* TaggedTemplateExpression */: + return getDeprecatedSuggestionNode(node.tag); + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + return getDeprecatedSuggestionNode(node.tagName); + case 213 /* ElementAccessExpression */: + return node.argumentExpression; + case 212 /* PropertyAccessExpression */: + return node.name; + case 184 /* TypeReference */: + const typeReference = node; + return isQualifiedName(typeReference.typeName) ? typeReference.typeName.right : typeReference; + default: + return node; + } + } + function isSymbolOrSymbolForCall(node) { + if (!isCallExpression(node)) return false; + let left = node.expression; + if (isPropertyAccessExpression(left) && left.name.escapedText === "for") { + left = left.expression; + } + if (!isIdentifier(left) || left.escapedText !== "Symbol") { + return false; + } + const globalESSymbol = getGlobalESSymbolConstructorSymbol( + /*reportErrors*/ + false + ); + if (!globalESSymbol) { + return false; + } + return globalESSymbol === resolveName( + left, + "Symbol", + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + } + function checkImportCallExpression(node) { + checkGrammarImportCallExpression(node); + if (node.arguments.length === 0) { + return createPromiseReturnType(node, anyType); + } + const specifier = node.arguments[0]; + const specifierType = checkExpressionCached(specifier); + const optionsType = node.arguments.length > 1 ? checkExpressionCached(node.arguments[1]) : void 0; + for (let i = 2; i < node.arguments.length; ++i) { + checkExpressionCached(node.arguments[i]); + } + if (specifierType.flags & 32768 /* Undefined */ || specifierType.flags & 65536 /* Null */ || !isTypeAssignableTo(specifierType, stringType)) { + error2(specifier, Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType)); + } + if (optionsType) { + const importCallOptionsType = getGlobalImportCallOptionsType( + /*reportErrors*/ + true + ); + if (importCallOptionsType !== emptyObjectType) { + checkTypeAssignableTo(optionsType, getNullableType(importCallOptionsType, 32768 /* Undefined */), node.arguments[1]); + } + } + const moduleSymbol = resolveExternalModuleName(node, specifier); + if (moduleSymbol) { + const esModuleSymbol = resolveESModuleSymbol( + moduleSymbol, + specifier, + /*dontResolveAlias*/ + true, + /*suppressInteropError*/ + false + ); + if (esModuleSymbol) { + return createPromiseReturnType( + node, + getTypeWithSyntheticDefaultOnly(getTypeOfSymbol(esModuleSymbol), esModuleSymbol, moduleSymbol, specifier) || getTypeWithSyntheticDefaultImportType(getTypeOfSymbol(esModuleSymbol), esModuleSymbol, moduleSymbol, specifier) + ); + } + } + return createPromiseReturnType(node, anyType); + } + function createDefaultPropertyWrapperForModule(symbol, originalSymbol, anonymousSymbol) { + const memberTable = createSymbolTable(); + const newSymbol = createSymbol(2097152 /* Alias */, "default" /* Default */); + newSymbol.parent = originalSymbol; + newSymbol.links.nameType = getStringLiteralType("default"); + newSymbol.links.aliasTarget = resolveSymbol(symbol); + memberTable.set("default" /* Default */, newSymbol); + return createAnonymousType(anonymousSymbol, memberTable, emptyArray, emptyArray, emptyArray); + } + function getTypeWithSyntheticDefaultOnly(type, symbol, originalSymbol, moduleSpecifier) { + const hasDefaultOnly = isOnlyImportableAsDefault(moduleSpecifier); + if (hasDefaultOnly && type && !isErrorType(type)) { + const synthType = type; + if (!synthType.defaultOnlyType) { + const type2 = createDefaultPropertyWrapperForModule(symbol, originalSymbol); + synthType.defaultOnlyType = type2; + } + return synthType.defaultOnlyType; + } + return void 0; + } + function getTypeWithSyntheticDefaultImportType(type, symbol, originalSymbol, moduleSpecifier) { + var _a; + if (allowSyntheticDefaultImports && type && !isErrorType(type)) { + const synthType = type; + if (!synthType.syntheticType) { + const file = (_a = originalSymbol.declarations) == null ? void 0 : _a.find(isSourceFile); + const hasSyntheticDefault = canHaveSyntheticDefault( + file, + originalSymbol, + /*dontResolveAlias*/ + false, + moduleSpecifier + ); + if (hasSyntheticDefault) { + const anonymousSymbol = createSymbol(2048 /* TypeLiteral */, "__type" /* Type */); + const defaultContainingObject = createDefaultPropertyWrapperForModule(symbol, originalSymbol, anonymousSymbol); + anonymousSymbol.links.type = defaultContainingObject; + synthType.syntheticType = isValidSpreadType(type) ? getSpreadType( + type, + defaultContainingObject, + anonymousSymbol, + /*objectFlags*/ + 0, + /*readonly*/ + false + ) : defaultContainingObject; + } else { + synthType.syntheticType = type; + } + } + return synthType.syntheticType; + } + return type; + } + function isCommonJsRequire(node) { + if (!isRequireCall( + node, + /*requireStringLiteralLikeArgument*/ + true + )) { + return false; + } + if (!isIdentifier(node.expression)) return Debug.fail(); + const resolvedRequire = resolveName( + node.expression, + node.expression.escapedText, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (resolvedRequire === requireSymbol) { + return true; + } + if (resolvedRequire.flags & 2097152 /* Alias */) { + return false; + } + const targetDeclarationKind = resolvedRequire.flags & 16 /* Function */ ? 263 /* FunctionDeclaration */ : resolvedRequire.flags & 3 /* Variable */ ? 261 /* VariableDeclaration */ : 0 /* Unknown */; + if (targetDeclarationKind !== 0 /* Unknown */) { + const decl = getDeclarationOfKind(resolvedRequire, targetDeclarationKind); + return !!decl && !!(decl.flags & 33554432 /* Ambient */); + } + return false; + } + function checkTaggedTemplateExpression(node) { + if (!checkGrammarTaggedTemplateChain(node)) checkGrammarTypeArguments(node, node.typeArguments); + if (languageVersion < LanguageFeatureMinimumTarget.TaggedTemplates) { + checkExternalEmitHelpers(node, 262144 /* MakeTemplateObject */); + } + const signature = getResolvedSignature(node); + checkDeprecatedSignature(signature, node); + return getReturnTypeOfSignature(signature); + } + function checkAssertion(node, checkMode) { + if (node.kind === 217 /* TypeAssertionExpression */) { + const file = getSourceFileOfNode(node); + if (file && fileExtensionIsOneOf(file.fileName, [".cts" /* Cts */, ".mts" /* Mts */])) { + grammarErrorOnNode(node, Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead); + } + if (compilerOptions.erasableSyntaxOnly) { + const start = skipTrivia(file.text, node.pos); + const end = node.expression.pos; + diagnostics.add(createFileDiagnostic(file, start, end - start, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled)); + } + } + return checkAssertionWorker(node, checkMode); + } + function isValidConstAssertionArgument(node) { + switch (node.kind) { + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 210 /* ArrayLiteralExpression */: + case 211 /* ObjectLiteralExpression */: + case 229 /* TemplateExpression */: + return true; + case 218 /* ParenthesizedExpression */: + return isValidConstAssertionArgument(node.expression); + case 225 /* PrefixUnaryExpression */: + const op = node.operator; + const arg = node.operand; + return op === 41 /* MinusToken */ && (arg.kind === 9 /* NumericLiteral */ || arg.kind === 10 /* BigIntLiteral */) || op === 40 /* PlusToken */ && arg.kind === 9 /* NumericLiteral */; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + const expr = skipParentheses(node.expression); + const symbol = isEntityNameExpression(expr) ? resolveEntityName( + expr, + 111551 /* Value */, + /*ignoreErrors*/ + true + ) : void 0; + return !!(symbol && symbol.flags & 384 /* Enum */); + } + return false; + } + function checkAssertionWorker(node, checkMode) { + const { type, expression } = getAssertionTypeAndExpression(node); + const exprType = checkExpression(expression, checkMode); + if (isConstTypeReference(type)) { + if (!isValidConstAssertionArgument(expression)) { + error2(expression, Diagnostics.A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals); + } + return getRegularTypeOfLiteralType(exprType); + } + const links = getNodeLinks(node); + links.assertionExpressionType = exprType; + checkSourceElement(type); + checkNodeDeferred(node); + return getTypeFromTypeNode(type); + } + function getAssertionTypeAndExpression(node) { + let type; + let expression; + switch (node.kind) { + case 235 /* AsExpression */: + case 217 /* TypeAssertionExpression */: + type = node.type; + expression = node.expression; + break; + case 218 /* ParenthesizedExpression */: + type = getJSDocTypeAssertionType(node); + expression = node.expression; + break; + } + return { type, expression }; + } + function checkAssertionDeferred(node) { + const { type } = getAssertionTypeAndExpression(node); + const errNode = isParenthesizedExpression(node) ? type : node; + const links = getNodeLinks(node); + Debug.assertIsDefined(links.assertionExpressionType); + const exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(links.assertionExpressionType)); + const targetType = getTypeFromTypeNode(type); + if (!isErrorType(targetType)) { + addLazyDiagnostic(() => { + const widenedType = getWidenedType(exprType); + if (!isTypeComparableTo(targetType, widenedType)) { + checkTypeComparableTo(exprType, targetType, errNode, Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first); + } + }); + } + } + function checkNonNullChain(node) { + const leftType = checkExpression(node.expression); + const nonOptionalType = getOptionalExpressionType(leftType, node.expression); + return propagateOptionalTypeMarker(getNonNullableType(nonOptionalType), node, nonOptionalType !== leftType); + } + function checkNonNullAssertion(node) { + return node.flags & 64 /* OptionalChain */ ? checkNonNullChain(node) : getNonNullableType(checkExpression(node.expression)); + } + function checkExpressionWithTypeArguments(node) { + checkGrammarExpressionWithTypeArguments(node); + forEach(node.typeArguments, checkSourceElement); + if (node.kind === 234 /* ExpressionWithTypeArguments */) { + const parent2 = walkUpParenthesizedExpressions(node.parent); + if (parent2.kind === 227 /* BinaryExpression */ && parent2.operatorToken.kind === 104 /* InstanceOfKeyword */ && isNodeDescendantOf(node, parent2.right)) { + error2(node, Diagnostics.The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression); + } + } + const exprType = node.kind === 234 /* ExpressionWithTypeArguments */ ? checkExpression(node.expression) : isThisIdentifier(node.exprName) ? checkThisExpression(node.exprName) : checkExpression(node.exprName); + return getInstantiationExpressionType(exprType, node); + } + function getInstantiationExpressionType(exprType, node) { + const typeArguments = node.typeArguments; + if (exprType === silentNeverType || isErrorType(exprType) || !some(typeArguments)) { + return exprType; + } + const links = getNodeLinks(node); + if (!links.instantiationExpressionTypes) { + links.instantiationExpressionTypes = /* @__PURE__ */ new Map(); + } + if (links.instantiationExpressionTypes.has(exprType.id)) { + return links.instantiationExpressionTypes.get(exprType.id); + } + let hasSomeApplicableSignature = false; + let nonApplicableType; + const result = getInstantiatedType(exprType); + links.instantiationExpressionTypes.set(exprType.id, result); + const errorType2 = hasSomeApplicableSignature ? nonApplicableType : exprType; + if (errorType2) { + diagnostics.add(createDiagnosticForNodeArray(getSourceFileOfNode(node), typeArguments, Diagnostics.Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable, typeToString(errorType2))); + } + return result; + function getInstantiatedType(type) { + let hasSignatures2 = false; + let hasApplicableSignature = false; + const result2 = getInstantiatedTypePart(type); + hasSomeApplicableSignature || (hasSomeApplicableSignature = hasApplicableSignature); + if (hasSignatures2 && !hasApplicableSignature) { + nonApplicableType ?? (nonApplicableType = type); + } + return result2; + function getInstantiatedTypePart(type2) { + if (type2.flags & 524288 /* Object */) { + const resolved = resolveStructuredTypeMembers(type2); + const callSignatures = getInstantiatedSignatures(resolved.callSignatures); + const constructSignatures = getInstantiatedSignatures(resolved.constructSignatures); + hasSignatures2 || (hasSignatures2 = resolved.callSignatures.length !== 0 || resolved.constructSignatures.length !== 0); + hasApplicableSignature || (hasApplicableSignature = callSignatures.length !== 0 || constructSignatures.length !== 0); + if (callSignatures !== resolved.callSignatures || constructSignatures !== resolved.constructSignatures) { + const result3 = createAnonymousType(createSymbol(0 /* None */, "__instantiationExpression" /* InstantiationExpression */), resolved.members, callSignatures, constructSignatures, resolved.indexInfos); + result3.objectFlags |= 8388608 /* InstantiationExpressionType */; + result3.node = node; + return result3; + } + } else if (type2.flags & 58982400 /* InstantiableNonPrimitive */) { + const constraint = getBaseConstraintOfType(type2); + if (constraint) { + const instantiated = getInstantiatedTypePart(constraint); + if (instantiated !== constraint) { + return instantiated; + } + } + } else if (type2.flags & 1048576 /* Union */) { + return mapType(type2, getInstantiatedType); + } else if (type2.flags & 2097152 /* Intersection */) { + return getIntersectionType(sameMap(type2.types, getInstantiatedTypePart)); + } + return type2; + } + } + function getInstantiatedSignatures(signatures) { + const applicableSignatures = filter(signatures, (sig) => !!sig.typeParameters && hasCorrectTypeArgumentArity(sig, typeArguments)); + return sameMap(applicableSignatures, (sig) => { + const typeArgumentTypes = checkTypeArguments( + sig, + typeArguments, + /*reportErrors*/ + true + ); + return typeArgumentTypes ? getSignatureInstantiation(sig, typeArgumentTypes, isInJSFile(sig.declaration)) : sig; + }); + } + } + function checkSatisfiesExpression(node) { + checkSourceElement(node.type); + return checkSatisfiesExpressionWorker(node.expression, node.type); + } + function checkSatisfiesExpressionWorker(expression, target, checkMode) { + const exprType = checkExpression(expression, checkMode); + const targetType = getTypeFromTypeNode(target); + if (isErrorType(targetType)) { + return targetType; + } + const errorNode = findAncestor(target.parent, (n) => n.kind === 239 /* SatisfiesExpression */ || n.kind === 351 /* JSDocSatisfiesTag */); + checkTypeAssignableToAndOptionallyElaborate(exprType, targetType, errorNode, expression, Diagnostics.Type_0_does_not_satisfy_the_expected_type_1); + return exprType; + } + function checkMetaProperty(node) { + checkGrammarMetaProperty(node); + if (node.keywordToken === 105 /* NewKeyword */) { + return checkNewTargetMetaProperty(node); + } + if (node.keywordToken === 102 /* ImportKeyword */) { + if (node.name.escapedText === "defer") { + Debug.assert(!isCallExpression(node.parent) || node.parent.expression !== node, "Trying to get the type of `import.defer` in `import.defer(...)`"); + return errorType; + } + return checkImportMetaProperty(node); + } + return Debug.assertNever(node.keywordToken); + } + function checkMetaPropertyKeyword(node) { + switch (node.keywordToken) { + case 102 /* ImportKeyword */: + return getGlobalImportMetaExpressionType(); + case 105 /* NewKeyword */: + const type = checkNewTargetMetaProperty(node); + return isErrorType(type) ? errorType : createNewTargetExpressionType(type); + default: + Debug.assertNever(node.keywordToken); + } + } + function checkNewTargetMetaProperty(node) { + const container = getNewTargetContainer(node); + if (!container) { + error2(node, Diagnostics.Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constructor, "new.target"); + return errorType; + } else if (container.kind === 177 /* Constructor */) { + const symbol = getSymbolOfDeclaration(container.parent); + return getTypeOfSymbol(symbol); + } else { + const symbol = getSymbolOfDeclaration(container); + return getTypeOfSymbol(symbol); + } + } + function checkImportMetaProperty(node) { + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + if (getSourceFileOfNode(node).impliedNodeFormat !== 99 /* ESNext */) { + error2(node, Diagnostics.The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output); + } + } else if (moduleKind < 6 /* ES2020 */ && moduleKind !== 4 /* System */) { + error2(node, Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_node20_or_nodenext); + } + const file = getSourceFileOfNode(node); + Debug.assert(!!(file.flags & 8388608 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag."); + return node.name.escapedText === "meta" ? getGlobalImportMetaType() : errorType; + } + function getTypeOfParameter(symbol) { + const declaration = symbol.valueDeclaration; + return addOptionality( + getTypeOfSymbol(symbol), + /*isProperty*/ + false, + /*isOptional*/ + !!declaration && (hasInitializer(declaration) || isOptionalDeclaration(declaration)) + ); + } + function getTupleElementLabelFromBindingElement(node, index, elementFlags) { + switch (node.name.kind) { + case 80 /* Identifier */: { + const name = node.name.escapedText; + if (node.dotDotDotToken) { + return elementFlags & 12 /* Variable */ ? name : `${name}_${index}`; + } else { + return elementFlags & 3 /* Fixed */ ? name : `${name}_n`; + } + } + case 208 /* ArrayBindingPattern */: { + if (node.dotDotDotToken) { + const elements = node.name.elements; + const lastElement = tryCast(lastOrUndefined(elements), isBindingElement); + const elementCount = elements.length - ((lastElement == null ? void 0 : lastElement.dotDotDotToken) ? 1 : 0); + if (index < elementCount) { + const element = elements[index]; + if (isBindingElement(element)) { + return getTupleElementLabelFromBindingElement(element, index, elementFlags); + } + } else if (lastElement == null ? void 0 : lastElement.dotDotDotToken) { + return getTupleElementLabelFromBindingElement(lastElement, index - elementCount, elementFlags); + } + } + break; + } + } + return `arg_${index}`; + } + function getTupleElementLabel(d, index = 0, elementFlags = 3 /* Fixed */, restSymbol) { + if (!d) { + const restParameter = tryCast(restSymbol == null ? void 0 : restSymbol.valueDeclaration, isParameter); + return restParameter ? getTupleElementLabelFromBindingElement(restParameter, index, elementFlags) : `${(restSymbol == null ? void 0 : restSymbol.escapedName) ?? "arg"}_${index}`; + } + Debug.assert(isIdentifier(d.name)); + return d.name.escapedText; + } + function getParameterNameAtPosition(signature, pos, overrideRestType) { + var _a; + const paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); + if (pos < paramCount) { + return signature.parameters[pos].escapedName; + } + const restParameter = signature.parameters[paramCount] || unknownSymbol; + const restType = overrideRestType || getTypeOfSymbol(restParameter); + if (isTupleType(restType)) { + const tupleType = restType.target; + const index = pos - paramCount; + const associatedName = (_a = tupleType.labeledElementDeclarations) == null ? void 0 : _a[index]; + const elementFlags = tupleType.elementFlags[index]; + return getTupleElementLabel(associatedName, index, elementFlags, restParameter); + } + return restParameter.escapedName; + } + function getParameterIdentifierInfoAtPosition(signature, pos) { + var _a; + if (((_a = signature.declaration) == null ? void 0 : _a.kind) === 318 /* JSDocFunctionType */) { + return void 0; + } + const paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); + if (pos < paramCount) { + const param = signature.parameters[pos]; + const paramIdent = getParameterDeclarationIdentifier(param); + return paramIdent ? { + parameter: paramIdent, + parameterName: param.escapedName, + isRestParameter: false + } : void 0; + } + const restParameter = signature.parameters[paramCount] || unknownSymbol; + const restIdent = getParameterDeclarationIdentifier(restParameter); + if (!restIdent) { + return void 0; + } + const restType = getTypeOfSymbol(restParameter); + if (isTupleType(restType)) { + const associatedNames = restType.target.labeledElementDeclarations; + const index = pos - paramCount; + const associatedName = associatedNames == null ? void 0 : associatedNames[index]; + const isRestTupleElement = !!(associatedName == null ? void 0 : associatedName.dotDotDotToken); + if (associatedName) { + Debug.assert(isIdentifier(associatedName.name)); + return { parameter: associatedName.name, parameterName: associatedName.name.escapedText, isRestParameter: isRestTupleElement }; + } + return void 0; + } + if (pos === paramCount) { + return { parameter: restIdent, parameterName: restParameter.escapedName, isRestParameter: true }; + } + return void 0; + } + function getParameterDeclarationIdentifier(symbol) { + return symbol.valueDeclaration && isParameter(symbol.valueDeclaration) && isIdentifier(symbol.valueDeclaration.name) && symbol.valueDeclaration.name; + } + function isValidDeclarationForTupleLabel(d) { + return d.kind === 203 /* NamedTupleMember */ || isParameter(d) && d.name && isIdentifier(d.name); + } + function getNameableDeclarationAtPosition(signature, pos) { + const paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); + if (pos < paramCount) { + const decl = signature.parameters[pos].valueDeclaration; + return decl && isValidDeclarationForTupleLabel(decl) ? decl : void 0; + } + const restParameter = signature.parameters[paramCount] || unknownSymbol; + const restType = getTypeOfSymbol(restParameter); + if (isTupleType(restType)) { + const associatedNames = restType.target.labeledElementDeclarations; + const index = pos - paramCount; + return associatedNames && associatedNames[index]; + } + return restParameter.valueDeclaration && isValidDeclarationForTupleLabel(restParameter.valueDeclaration) ? restParameter.valueDeclaration : void 0; + } + function getTypeAtPosition(signature, pos) { + return tryGetTypeAtPosition(signature, pos) || anyType; + } + function tryGetTypeAtPosition(signature, pos) { + const paramCount = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); + if (pos < paramCount) { + return getTypeOfParameter(signature.parameters[pos]); + } + if (signatureHasRestParameter(signature)) { + const restType = getTypeOfSymbol(signature.parameters[paramCount]); + const index = pos - paramCount; + if (!isTupleType(restType) || restType.target.combinedFlags & 12 /* Variable */ || index < restType.target.fixedLength) { + return getIndexedAccessType(restType, getNumberLiteralType(index)); + } + } + return void 0; + } + function getRestTypeAtPosition(source, pos, readonly) { + const parameterCount = getParameterCount(source); + const minArgumentCount = getMinArgumentCount(source); + const restType = getEffectiveRestType(source); + if (restType && pos >= parameterCount - 1) { + return pos === parameterCount - 1 ? restType : createArrayType(getIndexedAccessType(restType, numberType)); + } + const types = []; + const flags = []; + const names = []; + for (let i = pos; i < parameterCount; i++) { + if (!restType || i < parameterCount - 1) { + types.push(getTypeAtPosition(source, i)); + flags.push(i < minArgumentCount ? 1 /* Required */ : 2 /* Optional */); + } else { + types.push(restType); + flags.push(8 /* Variadic */); + } + names.push(getNameableDeclarationAtPosition(source, i)); + } + return createTupleType(types, flags, readonly, names); + } + function getRestOrAnyTypeAtPosition(source, pos) { + const restType = getRestTypeAtPosition(source, pos); + const elementType = restType && getElementTypeOfArrayType(restType); + return elementType && isTypeAny(elementType) ? anyType : restType; + } + function getParameterCount(signature) { + const length2 = signature.parameters.length; + if (signatureHasRestParameter(signature)) { + const restType = getTypeOfSymbol(signature.parameters[length2 - 1]); + if (isTupleType(restType)) { + return length2 + restType.target.fixedLength - (restType.target.combinedFlags & 12 /* Variable */ ? 0 : 1); + } + } + return length2; + } + function getMinArgumentCount(signature, flags) { + const strongArityForUntypedJS = flags & 1 /* StrongArityForUntypedJS */; + const voidIsNonOptional = flags & 2 /* VoidIsNonOptional */; + if (voidIsNonOptional || signature.resolvedMinArgumentCount === void 0) { + let minArgumentCount; + if (signatureHasRestParameter(signature)) { + const restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + if (isTupleType(restType)) { + const firstOptionalIndex = findIndex(restType.target.elementFlags, (f) => !(f & 1 /* Required */)); + const requiredCount = firstOptionalIndex < 0 ? restType.target.fixedLength : firstOptionalIndex; + if (requiredCount > 0) { + minArgumentCount = signature.parameters.length - 1 + requiredCount; + } + } + } + if (minArgumentCount === void 0) { + if (!strongArityForUntypedJS && signature.flags & 32 /* IsUntypedSignatureInJSFile */) { + return 0; + } + minArgumentCount = signature.minArgumentCount; + } + if (voidIsNonOptional) { + return minArgumentCount; + } + for (let i = minArgumentCount - 1; i >= 0; i--) { + const type = getTypeAtPosition(signature, i); + if (filterType(type, acceptsVoid).flags & 131072 /* Never */) { + break; + } + minArgumentCount = i; + } + signature.resolvedMinArgumentCount = minArgumentCount; + } + return signature.resolvedMinArgumentCount; + } + function hasEffectiveRestParameter(signature) { + if (signatureHasRestParameter(signature)) { + const restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + return !isTupleType(restType) || !!(restType.target.combinedFlags & 12 /* Variable */); + } + return false; + } + function getEffectiveRestType(signature) { + if (signatureHasRestParameter(signature)) { + const restType = getTypeOfSymbol(signature.parameters[signature.parameters.length - 1]); + if (!isTupleType(restType)) { + return isTypeAny(restType) ? anyArrayType : restType; + } + if (restType.target.combinedFlags & 12 /* Variable */) { + return sliceTupleType(restType, restType.target.fixedLength); + } + } + return void 0; + } + function getNonArrayRestType(signature) { + const restType = getEffectiveRestType(signature); + return restType && !isArrayType(restType) && !isTypeAny(restType) ? restType : void 0; + } + function getTypeOfFirstParameterOfSignature(signature) { + return getTypeOfFirstParameterOfSignatureWithFallback(signature, neverType); + } + function getTypeOfFirstParameterOfSignatureWithFallback(signature, fallbackType) { + return signature.parameters.length > 0 ? getTypeAtPosition(signature, 0) : fallbackType; + } + function inferFromAnnotatedParametersAndReturn(signature, context, inferenceContext) { + const len = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); + for (let i = 0; i < len; i++) { + const declaration = signature.parameters[i].valueDeclaration; + const typeNode2 = getEffectiveTypeAnnotationNode(declaration); + if (typeNode2) { + const source = addOptionality( + getTypeFromTypeNode(typeNode2), + /*isProperty*/ + false, + isOptionalDeclaration(declaration) + ); + const target = getTypeAtPosition(context, i); + inferTypes(inferenceContext.inferences, source, target); + } + } + const typeNode = signature.declaration && getEffectiveReturnTypeNode(signature.declaration); + if (typeNode) { + const source = getTypeFromTypeNode(typeNode); + const target = getReturnTypeOfSignature(context); + inferTypes(inferenceContext.inferences, source, target); + } + } + function assignContextualParameterTypes(signature, context) { + if (context.typeParameters) { + if (!signature.typeParameters) { + signature.typeParameters = context.typeParameters; + } else { + return; + } + } + if (context.thisParameter) { + const parameter = signature.thisParameter; + if (!parameter || parameter.valueDeclaration && !parameter.valueDeclaration.type) { + if (!parameter) { + signature.thisParameter = createSymbolWithType( + context.thisParameter, + /*type*/ + void 0 + ); + } + assignParameterType(signature.thisParameter, getTypeOfSymbol(context.thisParameter)); + } + } + const len = signature.parameters.length - (signatureHasRestParameter(signature) ? 1 : 0); + for (let i = 0; i < len; i++) { + const parameter = signature.parameters[i]; + const declaration = parameter.valueDeclaration; + if (!getEffectiveTypeAnnotationNode(declaration)) { + let type = tryGetTypeAtPosition(context, i); + if (type && declaration.initializer) { + let initializerType = checkDeclarationInitializer(declaration, 0 /* Normal */); + if (!isTypeAssignableTo(initializerType, type) && isTypeAssignableTo(type, initializerType = widenTypeInferredFromInitializer(declaration, initializerType))) { + type = initializerType; + } + } + assignParameterType(parameter, type); + } + } + if (signatureHasRestParameter(signature)) { + const parameter = last(signature.parameters); + if (parameter.valueDeclaration ? !getEffectiveTypeAnnotationNode(parameter.valueDeclaration) : !!(getCheckFlags(parameter) & 65536 /* DeferredType */)) { + const contextualParameterType = getRestTypeAtPosition(context, len); + assignParameterType(parameter, contextualParameterType); + } + } + } + function assignNonContextualParameterTypes(signature) { + if (signature.thisParameter) { + assignParameterType(signature.thisParameter); + } + for (const parameter of signature.parameters) { + assignParameterType(parameter); + } + } + function assignParameterType(parameter, contextualType) { + const links = getSymbolLinks(parameter); + if (!links.type) { + const declaration = parameter.valueDeclaration; + links.type = addOptionality( + contextualType || (declaration ? getWidenedTypeForVariableLikeDeclaration( + declaration, + /*reportErrors*/ + true + ) : getTypeOfSymbol(parameter)), + /*isProperty*/ + false, + /*isOptional*/ + !!declaration && !declaration.initializer && isOptionalDeclaration(declaration) + ); + if (declaration && declaration.name.kind !== 80 /* Identifier */) { + if (links.type === unknownType) { + links.type = getTypeFromBindingPattern(declaration.name); + } + assignBindingElementTypes(declaration.name, links.type); + } + } else if (contextualType) { + Debug.assertEqual(links.type, contextualType, "Parameter symbol already has a cached type which differs from newly assigned type"); + } + } + function assignBindingElementTypes(pattern, parentType) { + for (const element of pattern.elements) { + if (!isOmittedExpression(element)) { + const type = getBindingElementTypeFromParentType( + element, + parentType, + /*noTupleBoundsCheck*/ + false + ); + if (element.name.kind === 80 /* Identifier */) { + getSymbolLinks(getSymbolOfDeclaration(element)).type = type; + } else { + assignBindingElementTypes(element.name, type); + } + } + } + } + function createClassDecoratorContextType(classType) { + return tryCreateTypeReference(getGlobalClassDecoratorContextType( + /*reportErrors*/ + true + ), [classType]); + } + function createClassMethodDecoratorContextType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassMethodDecoratorContextType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function createClassGetterDecoratorContextType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassGetterDecoratorContextType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function createClassSetterDecoratorContextType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassSetterDecoratorContextType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function createClassAccessorDecoratorContextType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassAccessorDecoratorContextType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function createClassFieldDecoratorContextType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassFieldDecoratorContextType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function getClassMemberDecoratorContextOverrideType(nameType, isPrivate, isStatic2) { + const key = `${isPrivate ? "p" : "P"}${isStatic2 ? "s" : "S"}${nameType.id}`; + let overrideType = decoratorContextOverrideTypeCache.get(key); + if (!overrideType) { + const members = createSymbolTable(); + members.set("name", createProperty("name", nameType)); + members.set("private", createProperty("private", isPrivate ? trueType : falseType)); + members.set("static", createProperty("static", isStatic2 ? trueType : falseType)); + overrideType = createAnonymousType( + /*symbol*/ + void 0, + members, + emptyArray, + emptyArray, + emptyArray + ); + decoratorContextOverrideTypeCache.set(key, overrideType); + } + return overrideType; + } + function createClassMemberDecoratorContextTypeForNode(node, thisType, valueType) { + const isStatic2 = hasStaticModifier(node); + const isPrivate = isPrivateIdentifier(node.name); + const nameType = isPrivate ? getStringLiteralType(idText(node.name)) : getLiteralTypeFromPropertyName(node.name); + const contextType = isMethodDeclaration(node) ? createClassMethodDecoratorContextType(thisType, valueType) : isGetAccessorDeclaration(node) ? createClassGetterDecoratorContextType(thisType, valueType) : isSetAccessorDeclaration(node) ? createClassSetterDecoratorContextType(thisType, valueType) : isAutoAccessorPropertyDeclaration(node) ? createClassAccessorDecoratorContextType(thisType, valueType) : isPropertyDeclaration(node) ? createClassFieldDecoratorContextType(thisType, valueType) : Debug.failBadSyntaxKind(node); + const overrideType = getClassMemberDecoratorContextOverrideType(nameType, isPrivate, isStatic2); + return getIntersectionType([contextType, overrideType]); + } + function createClassAccessorDecoratorTargetType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassAccessorDecoratorTargetType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function createClassAccessorDecoratorResultType(thisType, valueType) { + return tryCreateTypeReference(getGlobalClassAccessorDecoratorResultType( + /*reportErrors*/ + true + ), [thisType, valueType]); + } + function createClassFieldDecoratorInitializerMutatorType(thisType, valueType) { + const thisParam = createParameter2("this", thisType); + const valueParam = createParameter2("value", valueType); + return createFunctionType( + /*typeParameters*/ + void 0, + thisParam, + [valueParam], + valueType, + /*typePredicate*/ + void 0, + 1 + ); + } + function createESDecoratorCallSignature(targetType, contextType, nonOptionalReturnType) { + const targetParam = createParameter2("target", targetType); + const contextParam = createParameter2("context", contextType); + const returnType = getUnionType([nonOptionalReturnType, voidType]); + return createCallSignature( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [targetParam, contextParam], + returnType + ); + } + function getESDecoratorCallSignature(decorator) { + const { parent: parent2 } = decorator; + const links = getNodeLinks(parent2); + if (!links.decoratorSignature) { + links.decoratorSignature = anySignature; + switch (parent2.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: { + const node = parent2; + const targetType = getTypeOfSymbol(getSymbolOfDeclaration(node)); + const contextType = createClassDecoratorContextType(targetType); + links.decoratorSignature = createESDecoratorCallSignature(targetType, contextType, targetType); + break; + } + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: { + const node = parent2; + if (!isClassLike(node.parent)) break; + const valueType = isMethodDeclaration(node) ? getOrCreateTypeFromSignature(getSignatureFromDeclaration(node)) : getTypeOfNode(node); + const thisType = hasStaticModifier(node) ? getTypeOfSymbol(getSymbolOfDeclaration(node.parent)) : getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node.parent)); + const targetType = isGetAccessorDeclaration(node) ? createGetterFunctionType(valueType) : isSetAccessorDeclaration(node) ? createSetterFunctionType(valueType) : valueType; + const contextType = createClassMemberDecoratorContextTypeForNode(node, thisType, valueType); + const returnType = isGetAccessorDeclaration(node) ? createGetterFunctionType(valueType) : isSetAccessorDeclaration(node) ? createSetterFunctionType(valueType) : valueType; + links.decoratorSignature = createESDecoratorCallSignature(targetType, contextType, returnType); + break; + } + case 173 /* PropertyDeclaration */: { + const node = parent2; + if (!isClassLike(node.parent)) break; + const valueType = getTypeOfNode(node); + const thisType = hasStaticModifier(node) ? getTypeOfSymbol(getSymbolOfDeclaration(node.parent)) : getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(node.parent)); + const targetType = hasAccessorModifier(node) ? createClassAccessorDecoratorTargetType(thisType, valueType) : undefinedType; + const contextType = createClassMemberDecoratorContextTypeForNode(node, thisType, valueType); + const returnType = hasAccessorModifier(node) ? createClassAccessorDecoratorResultType(thisType, valueType) : createClassFieldDecoratorInitializerMutatorType(thisType, valueType); + links.decoratorSignature = createESDecoratorCallSignature(targetType, contextType, returnType); + break; + } + } + } + return links.decoratorSignature === anySignature ? void 0 : links.decoratorSignature; + } + function getLegacyDecoratorCallSignature(decorator) { + const { parent: parent2 } = decorator; + const links = getNodeLinks(parent2); + if (!links.decoratorSignature) { + links.decoratorSignature = anySignature; + switch (parent2.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: { + const node = parent2; + const targetType = getTypeOfSymbol(getSymbolOfDeclaration(node)); + const targetParam = createParameter2("target", targetType); + links.decoratorSignature = createCallSignature( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [targetParam], + getUnionType([targetType, voidType]) + ); + break; + } + case 170 /* Parameter */: { + const node = parent2; + if (!isConstructorDeclaration(node.parent) && !(isMethodDeclaration(node.parent) || isSetAccessorDeclaration(node.parent) && isClassLike(node.parent.parent))) { + break; + } + if (getThisParameter(node.parent) === node) { + break; + } + const index = getThisParameter(node.parent) ? node.parent.parameters.indexOf(node) - 1 : node.parent.parameters.indexOf(node); + Debug.assert(index >= 0); + const targetType = isConstructorDeclaration(node.parent) ? getTypeOfSymbol(getSymbolOfDeclaration(node.parent.parent)) : getParentTypeOfClassElement(node.parent); + const keyType = isConstructorDeclaration(node.parent) ? undefinedType : getClassElementPropertyKeyType(node.parent); + const indexType = getNumberLiteralType(index); + const targetParam = createParameter2("target", targetType); + const keyParam = createParameter2("propertyKey", keyType); + const indexParam = createParameter2("parameterIndex", indexType); + links.decoratorSignature = createCallSignature( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [targetParam, keyParam, indexParam], + voidType + ); + break; + } + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 173 /* PropertyDeclaration */: { + const node = parent2; + if (!isClassLike(node.parent)) break; + const targetType = getParentTypeOfClassElement(node); + const targetParam = createParameter2("target", targetType); + const keyType = getClassElementPropertyKeyType(node); + const keyParam = createParameter2("propertyKey", keyType); + const returnType = isPropertyDeclaration(node) ? voidType : createTypedPropertyDescriptorType(getTypeOfNode(node)); + const hasPropDesc = !isPropertyDeclaration(parent2) || hasAccessorModifier(parent2); + if (hasPropDesc) { + const descriptorType = createTypedPropertyDescriptorType(getTypeOfNode(node)); + const descriptorParam = createParameter2("descriptor", descriptorType); + links.decoratorSignature = createCallSignature( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [targetParam, keyParam, descriptorParam], + getUnionType([returnType, voidType]) + ); + } else { + links.decoratorSignature = createCallSignature( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [targetParam, keyParam], + getUnionType([returnType, voidType]) + ); + } + break; + } + } + } + return links.decoratorSignature === anySignature ? void 0 : links.decoratorSignature; + } + function getDecoratorCallSignature(decorator) { + return legacyDecorators ? getLegacyDecoratorCallSignature(decorator) : getESDecoratorCallSignature(decorator); + } + function createPromiseType(promisedType) { + const globalPromiseType = getGlobalPromiseType( + /*reportErrors*/ + true + ); + if (globalPromiseType !== emptyGenericType) { + promisedType = getAwaitedTypeNoAlias(unwrapAwaitedType(promisedType)) || unknownType; + return createTypeReference(globalPromiseType, [promisedType]); + } + return unknownType; + } + function createPromiseLikeType(promisedType) { + const globalPromiseLikeType = getGlobalPromiseLikeType( + /*reportErrors*/ + true + ); + if (globalPromiseLikeType !== emptyGenericType) { + promisedType = getAwaitedTypeNoAlias(unwrapAwaitedType(promisedType)) || unknownType; + return createTypeReference(globalPromiseLikeType, [promisedType]); + } + return unknownType; + } + function createPromiseReturnType(func, promisedType) { + const promiseType = createPromiseType(promisedType); + if (promiseType === unknownType) { + error2( + func, + isImportCall(func) ? Diagnostics.A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option : Diagnostics.An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES2015_in_your_lib_option + ); + return errorType; + } else if (!getGlobalPromiseConstructorSymbol( + /*reportErrors*/ + true + )) { + error2( + func, + isImportCall(func) ? Diagnostics.A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option : Diagnostics.An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option + ); + } + return promiseType; + } + function createNewTargetExpressionType(targetType) { + const symbol = createSymbol(0 /* None */, "NewTargetExpression"); + const targetPropertySymbol = createSymbol(4 /* Property */, "target", 8 /* Readonly */); + targetPropertySymbol.parent = symbol; + targetPropertySymbol.links.type = targetType; + const members = createSymbolTable([targetPropertySymbol]); + symbol.members = members; + return createAnonymousType(symbol, members, emptyArray, emptyArray, emptyArray); + } + function getReturnTypeFromBody(func, checkMode) { + if (!func.body) { + return errorType; + } + const functionFlags = getFunctionFlags(func); + const isAsync = (functionFlags & 2 /* Async */) !== 0; + const isGenerator = (functionFlags & 1 /* Generator */) !== 0; + let returnType; + let yieldType; + let nextType; + let fallbackReturnType = voidType; + if (func.body.kind !== 242 /* Block */) { + returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */); + if (isAsync) { + returnType = unwrapAwaitedType(checkAwaitedType( + returnType, + /*withAlias*/ + false, + /*errorNode*/ + func, + Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + )); + } + } else if (isGenerator) { + const returnTypes = checkAndAggregateReturnExpressionTypes(func, checkMode); + if (!returnTypes) { + fallbackReturnType = neverType; + } else if (returnTypes.length > 0) { + returnType = getUnionType(returnTypes, 2 /* Subtype */); + } + const { yieldTypes, nextTypes } = checkAndAggregateYieldOperandTypes(func, checkMode); + yieldType = some(yieldTypes) ? getUnionType(yieldTypes, 2 /* Subtype */) : void 0; + nextType = some(nextTypes) ? getIntersectionType(nextTypes) : void 0; + } else { + const types = checkAndAggregateReturnExpressionTypes(func, checkMode); + if (!types) { + return functionFlags & 2 /* Async */ ? createPromiseReturnType(func, neverType) : neverType; + } + if (types.length === 0) { + const contextualReturnType = getContextualReturnType( + func, + /*contextFlags*/ + void 0 + ); + const returnType2 = contextualReturnType && (unwrapReturnType(contextualReturnType, functionFlags) || voidType).flags & 32768 /* Undefined */ ? undefinedType : voidType; + return functionFlags & 2 /* Async */ ? createPromiseReturnType(func, returnType2) : ( + // Async function + returnType2 + ); + } + returnType = getUnionType(types, 2 /* Subtype */); + } + if (returnType || yieldType || nextType) { + if (yieldType) reportErrorsFromWidening(func, yieldType, 3 /* GeneratorYield */); + if (returnType) reportErrorsFromWidening(func, returnType, 1 /* FunctionReturn */); + if (nextType) reportErrorsFromWidening(func, nextType, 2 /* GeneratorNext */); + if (returnType && isUnitType(returnType) || yieldType && isUnitType(yieldType) || nextType && isUnitType(nextType)) { + const contextualSignature = getContextualSignatureForFunctionLikeDeclaration(func); + const contextualType = !contextualSignature ? void 0 : contextualSignature === getSignatureFromDeclaration(func) ? isGenerator ? void 0 : returnType : instantiateContextualType( + getReturnTypeOfSignature(contextualSignature), + func, + /*contextFlags*/ + void 0 + ); + if (isGenerator) { + yieldType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(yieldType, contextualType, 0 /* Yield */, isAsync); + returnType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(returnType, contextualType, 1 /* Return */, isAsync); + nextType = getWidenedLiteralLikeTypeForContextualIterationTypeIfNeeded(nextType, contextualType, 2 /* Next */, isAsync); + } else { + returnType = getWidenedLiteralLikeTypeForContextualReturnTypeIfNeeded(returnType, contextualType, isAsync); + } + } + if (yieldType) yieldType = getWidenedType(yieldType); + if (returnType) returnType = getWidenedType(returnType); + if (nextType) nextType = getWidenedType(nextType); + } + if (isGenerator) { + return createGeneratorType( + yieldType || neverType, + returnType || fallbackReturnType, + nextType || getContextualIterationType(2 /* Next */, func) || unknownType, + isAsync + ); + } else { + return isAsync ? createPromiseType(returnType || fallbackReturnType) : returnType || fallbackReturnType; + } + } + function createGeneratorType(yieldType, returnType, nextType, isAsyncGenerator) { + const resolver = isAsyncGenerator ? asyncIterationTypesResolver : syncIterationTypesResolver; + const globalGeneratorType = resolver.getGlobalGeneratorType( + /*reportErrors*/ + false + ); + yieldType = resolver.resolveIterationType( + yieldType, + /*errorNode*/ + void 0 + ) || unknownType; + returnType = resolver.resolveIterationType( + returnType, + /*errorNode*/ + void 0 + ) || unknownType; + if (globalGeneratorType === emptyGenericType) { + const globalIterableIteratorType = resolver.getGlobalIterableIteratorType( + /*reportErrors*/ + false + ); + if (globalIterableIteratorType !== emptyGenericType) { + return createTypeFromGenericGlobalType(globalIterableIteratorType, [yieldType, returnType, nextType]); + } + resolver.getGlobalIterableIteratorType( + /*reportErrors*/ + true + ); + return emptyObjectType; + } + return createTypeFromGenericGlobalType(globalGeneratorType, [yieldType, returnType, nextType]); + } + function checkAndAggregateYieldOperandTypes(func, checkMode) { + const yieldTypes = []; + const nextTypes = []; + const isAsync = (getFunctionFlags(func) & 2 /* Async */) !== 0; + forEachYieldExpression(func.body, (yieldExpression) => { + const yieldExpressionType = yieldExpression.expression ? checkExpression(yieldExpression.expression, checkMode) : undefinedWideningType; + pushIfUnique(yieldTypes, getYieldedTypeOfYieldExpression(yieldExpression, yieldExpressionType, anyType, isAsync)); + let nextType; + if (yieldExpression.asteriskToken) { + const iterationTypes = getIterationTypesOfIterable( + yieldExpressionType, + isAsync ? 19 /* AsyncYieldStar */ : 17 /* YieldStar */, + yieldExpression.expression + ); + nextType = iterationTypes && iterationTypes.nextType; + } else { + nextType = getContextualType2( + yieldExpression, + /*contextFlags*/ + void 0 + ); + } + if (nextType) pushIfUnique(nextTypes, nextType); + }); + return { yieldTypes, nextTypes }; + } + function getYieldedTypeOfYieldExpression(node, expressionType, sentType, isAsync) { + if (expressionType === silentNeverType) { + return silentNeverType; + } + const errorNode = node.expression || node; + const yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(isAsync ? 19 /* AsyncYieldStar */ : 17 /* YieldStar */, expressionType, sentType, errorNode) : expressionType; + return !isAsync ? yieldedType : getAwaitedType( + yieldedType, + errorNode, + node.asteriskToken ? Diagnostics.Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member : Diagnostics.Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + ); + } + function getNotEqualFactsFromTypeofSwitch(start, end, witnesses) { + let facts = 0 /* None */; + for (let i = 0; i < witnesses.length; i++) { + const witness = i < start || i >= end ? witnesses[i] : void 0; + facts |= witness !== void 0 ? typeofNEFacts.get(witness) || 32768 /* TypeofNEHostObject */ : 0; + } + return facts; + } + function isExhaustiveSwitchStatement(node) { + const links = getNodeLinks(node); + if (links.isExhaustive === void 0) { + links.isExhaustive = 0; + const exhaustive = computeExhaustiveSwitchStatement(node); + if (links.isExhaustive === 0) { + links.isExhaustive = exhaustive; + } + } else if (links.isExhaustive === 0) { + links.isExhaustive = false; + } + return links.isExhaustive; + } + function computeExhaustiveSwitchStatement(node) { + if (node.expression.kind === 222 /* TypeOfExpression */) { + const witnesses = getSwitchClauseTypeOfWitnesses(node); + if (!witnesses) { + return false; + } + const operandConstraint = getBaseConstraintOrType(checkExpressionCached(node.expression.expression)); + const notEqualFacts = getNotEqualFactsFromTypeofSwitch(0, 0, witnesses); + if (operandConstraint.flags & 3 /* AnyOrUnknown */) { + return (556800 /* AllTypeofNE */ & notEqualFacts) === 556800 /* AllTypeofNE */; + } + return !someType(operandConstraint, (t) => getTypeFacts(t, notEqualFacts) === notEqualFacts); + } + const type = getBaseConstraintOrType(checkExpressionCached(node.expression)); + if (!isLiteralType(type)) { + return false; + } + const switchTypes = getSwitchClauseTypes(node); + if (!switchTypes.length || some(switchTypes, isNeitherUnitTypeNorNever)) { + return false; + } + return eachTypeContainedIn(mapType(type, getRegularTypeOfLiteralType), switchTypes); + } + function functionHasImplicitReturn(func) { + return func.endFlowNode && isReachableFlowNode(func.endFlowNode); + } + function checkAndAggregateReturnExpressionTypes(func, checkMode) { + const functionFlags = getFunctionFlags(func); + const aggregatedTypes = []; + let hasReturnWithNoExpression = functionHasImplicitReturn(func); + let hasReturnOfTypeNever = false; + forEachReturnStatement(func.body, (returnStatement) => { + let expr = returnStatement.expression; + if (expr) { + expr = skipParentheses( + expr, + /*excludeJSDocTypeAssertions*/ + true + ); + if (functionFlags & 2 /* Async */ && expr.kind === 224 /* AwaitExpression */) { + expr = skipParentheses( + expr.expression, + /*excludeJSDocTypeAssertions*/ + true + ); + } + if (expr.kind === 214 /* CallExpression */ && expr.expression.kind === 80 /* Identifier */ && checkExpressionCached(expr.expression).symbol === getMergedSymbol(func.symbol) && (!isFunctionExpressionOrArrowFunction(func.symbol.valueDeclaration) || isConstantReference(expr.expression))) { + hasReturnOfTypeNever = true; + return; + } + let type = checkExpressionCached(expr, checkMode && checkMode & ~8 /* SkipGenericFunctions */); + if (functionFlags & 2 /* Async */) { + type = unwrapAwaitedType(checkAwaitedType( + type, + /*withAlias*/ + false, + func, + Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + )); + } + if (type.flags & 131072 /* Never */) { + hasReturnOfTypeNever = true; + } + pushIfUnique(aggregatedTypes, type); + } else { + hasReturnWithNoExpression = true; + } + }); + if (aggregatedTypes.length === 0 && !hasReturnWithNoExpression && (hasReturnOfTypeNever || mayReturnNever(func))) { + return void 0; + } + if (strictNullChecks && aggregatedTypes.length && hasReturnWithNoExpression && !(isJSConstructor(func) && aggregatedTypes.some((t) => t.symbol === func.symbol))) { + pushIfUnique(aggregatedTypes, undefinedType); + } + return aggregatedTypes; + } + function mayReturnNever(func) { + switch (func.kind) { + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return true; + case 175 /* MethodDeclaration */: + return func.parent.kind === 211 /* ObjectLiteralExpression */; + default: + return false; + } + } + function getTypePredicateFromBody(func) { + switch (func.kind) { + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return void 0; + } + const functionFlags = getFunctionFlags(func); + if (functionFlags !== 0 /* Normal */) return void 0; + let singleReturn; + if (func.body && func.body.kind !== 242 /* Block */) { + singleReturn = func.body; + } else { + const bailedEarly = forEachReturnStatement(func.body, (returnStatement) => { + if (singleReturn || !returnStatement.expression) return true; + singleReturn = returnStatement.expression; + }); + if (bailedEarly || !singleReturn || functionHasImplicitReturn(func)) return void 0; + } + return checkIfExpressionRefinesAnyParameter(func, singleReturn); + } + function checkIfExpressionRefinesAnyParameter(func, expr) { + expr = skipParentheses( + expr, + /*excludeJSDocTypeAssertions*/ + true + ); + const returnType = checkExpressionCached(expr); + if (!(returnType.flags & 16 /* Boolean */)) return void 0; + return forEach(func.parameters, (param, i) => { + const initType = getTypeOfSymbol(param.symbol); + if (!initType || initType.flags & 16 /* Boolean */ || !isIdentifier(param.name) || isSymbolAssigned(param.symbol) || isRestParameter(param)) { + return; + } + const trueType2 = checkIfExpressionRefinesParameter(func, expr, param, initType); + if (trueType2) { + return createTypePredicate(1 /* Identifier */, unescapeLeadingUnderscores(param.name.escapedText), i, trueType2); + } + }); + } + function checkIfExpressionRefinesParameter(func, expr, param, initType) { + const antecedent = canHaveFlowNode(expr) && expr.flowNode || expr.parent.kind === 254 /* ReturnStatement */ && expr.parent.flowNode || createFlowNode( + 2 /* Start */, + /*node*/ + void 0, + /*antecedent*/ + void 0 + ); + const trueCondition = createFlowNode(32 /* TrueCondition */, expr, antecedent); + const trueType2 = getFlowTypeOfReference(param.name, initType, initType, func, trueCondition); + if (trueType2 === initType) return void 0; + const falseCondition = createFlowNode(64 /* FalseCondition */, expr, antecedent); + const falseSubtype = getReducedType(getFlowTypeOfReference(param.name, initType, trueType2, func, falseCondition)); + return falseSubtype.flags & 131072 /* Never */ ? trueType2 : void 0; + } + function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) { + addLazyDiagnostic(checkAllCodePathsInNonVoidFunctionReturnOrThrowDiagnostics); + return; + function checkAllCodePathsInNonVoidFunctionReturnOrThrowDiagnostics() { + const functionFlags = getFunctionFlags(func); + const type = returnType && unwrapReturnType(returnType, functionFlags); + if (type && (maybeTypeOfKind(type, 16384 /* Void */) || type.flags & (1 /* Any */ | 32768 /* Undefined */))) { + return; + } + if (func.kind === 174 /* MethodSignature */ || nodeIsMissing(func.body) || func.body.kind !== 242 /* Block */ || !functionHasImplicitReturn(func)) { + return; + } + const hasExplicitReturn = func.flags & 1024 /* HasExplicitReturn */; + const errorNode = getEffectiveReturnTypeNode(func) || func; + if (type && type.flags & 131072 /* Never */) { + error2(errorNode, Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); + } else if (type && !hasExplicitReturn) { + error2(errorNode, Diagnostics.A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value); + } else if (type && strictNullChecks && !isTypeAssignableTo(undefinedType, type)) { + error2(errorNode, Diagnostics.Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined); + } else if (compilerOptions.noImplicitReturns) { + if (!type) { + if (!hasExplicitReturn) { + return; + } + const inferredReturnType = getReturnTypeOfSignature(getSignatureFromDeclaration(func)); + if (isUnwrappedReturnTypeUndefinedVoidOrAny(func, inferredReturnType)) { + return; + } + } + error2(errorNode, Diagnostics.Not_all_code_paths_return_a_value); + } + } + } + function checkFunctionExpressionOrObjectLiteralMethod(node, checkMode) { + Debug.assert(node.kind !== 175 /* MethodDeclaration */ || isObjectLiteralMethod(node)); + checkNodeDeferred(node); + if (isFunctionExpression(node)) { + checkCollisionsForDeclarationName(node, node.name); + } + if (checkMode && checkMode & 4 /* SkipContextSensitive */ && isContextSensitive(node)) { + if (!getEffectiveReturnTypeNode(node) && !hasContextSensitiveParameters(node)) { + const contextualSignature = getContextualSignature(node); + if (contextualSignature && couldContainTypeVariables(getReturnTypeOfSignature(contextualSignature))) { + const links = getNodeLinks(node); + if (links.contextFreeType) { + return links.contextFreeType; + } + const returnType = getReturnTypeFromBody(node, checkMode); + const returnOnlySignature = createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + returnType, + /*resolvedTypePredicate*/ + void 0, + 0, + 64 /* IsNonInferrable */ + ); + const returnOnlyType = createAnonymousType(node.symbol, emptySymbols, [returnOnlySignature], emptyArray, emptyArray); + returnOnlyType.objectFlags |= 262144 /* NonInferrableType */; + return links.contextFreeType = returnOnlyType; + } + } + return anyFunctionType; + } + const hasGrammarError = checkGrammarFunctionLikeDeclaration(node); + if (!hasGrammarError && node.kind === 219 /* FunctionExpression */) { + checkGrammarForGenerator(node); + } + contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode); + return getTypeOfSymbol(getSymbolOfDeclaration(node)); + } + function contextuallyCheckFunctionExpressionOrObjectLiteralMethod(node, checkMode) { + const links = getNodeLinks(node); + if (!(links.flags & 64 /* ContextChecked */)) { + const contextualSignature = getContextualSignature(node); + if (!(links.flags & 64 /* ContextChecked */)) { + links.flags |= 64 /* ContextChecked */; + const signature = firstOrUndefined(getSignaturesOfType(getTypeOfSymbol(getSymbolOfDeclaration(node)), 0 /* Call */)); + if (!signature) { + return; + } + if (isContextSensitive(node)) { + if (contextualSignature) { + const inferenceContext = getInferenceContext(node); + let instantiatedContextualSignature; + if (checkMode && checkMode & 2 /* Inferential */) { + inferFromAnnotatedParametersAndReturn(signature, contextualSignature, inferenceContext); + const restType = getEffectiveRestType(contextualSignature); + if (restType && restType.flags & 262144 /* TypeParameter */) { + instantiatedContextualSignature = instantiateSignature(contextualSignature, inferenceContext.nonFixingMapper); + } + } + instantiatedContextualSignature || (instantiatedContextualSignature = inferenceContext ? instantiateSignature(contextualSignature, inferenceContext.mapper) : contextualSignature); + assignContextualParameterTypes(signature, instantiatedContextualSignature); + } else { + assignNonContextualParameterTypes(signature); + } + } else if (contextualSignature && !node.typeParameters && contextualSignature.parameters.length > node.parameters.length) { + const inferenceContext = getInferenceContext(node); + if (checkMode && checkMode & 2 /* Inferential */) { + inferFromAnnotatedParametersAndReturn(signature, contextualSignature, inferenceContext); + } + } + if (contextualSignature && !getReturnTypeFromAnnotation(node) && !signature.resolvedReturnType) { + const returnType = getReturnTypeFromBody(node, checkMode); + if (!signature.resolvedReturnType) { + signature.resolvedReturnType = returnType; + } + } + checkSignatureDeclaration(node); + } + } + } + function checkFunctionExpressionOrObjectLiteralMethodDeferred(node) { + Debug.assert(node.kind !== 175 /* MethodDeclaration */ || isObjectLiteralMethod(node)); + const functionFlags = getFunctionFlags(node); + const returnType = getReturnTypeFromAnnotation(node); + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType); + if (node.body) { + if (!getEffectiveReturnTypeNode(node)) { + getReturnTypeOfSignature(getSignatureFromDeclaration(node)); + } + if (node.body.kind === 242 /* Block */) { + checkSourceElement(node.body); + } else { + const exprType = checkExpression(node.body); + const returnOrPromisedType = returnType && unwrapReturnType(returnType, functionFlags); + if (returnOrPromisedType) { + checkReturnExpression(node, returnOrPromisedType, node.body, node.body, exprType); + } + } + } + } + function checkArithmeticOperandType(operand, type, diagnostic, isAwaitValid = false) { + if (!isTypeAssignableTo(type, numberOrBigIntType)) { + const awaitedType = isAwaitValid && getAwaitedTypeOfPromise(type); + errorAndMaybeSuggestAwait( + operand, + !!awaitedType && isTypeAssignableTo(awaitedType, numberOrBigIntType), + diagnostic + ); + return false; + } + return true; + } + function isReadonlyAssignmentDeclaration(d) { + if (!isCallExpression(d)) { + return false; + } + if (!isBindableObjectDefinePropertyCall(d)) { + return false; + } + const objectLitType = checkExpressionCached(d.arguments[2]); + const valueType = getTypeOfPropertyOfType(objectLitType, "value"); + if (valueType) { + const writableProp = getPropertyOfType(objectLitType, "writable"); + const writableType = writableProp && getTypeOfSymbol(writableProp); + if (!writableType || writableType === falseType || writableType === regularFalseType) { + return true; + } + if (writableProp && writableProp.valueDeclaration && isPropertyAssignment(writableProp.valueDeclaration)) { + const initializer = writableProp.valueDeclaration.initializer; + const rawOriginalType = checkExpression(initializer); + if (rawOriginalType === falseType || rawOriginalType === regularFalseType) { + return true; + } + } + return false; + } + const setProp = getPropertyOfType(objectLitType, "set"); + return !setProp; + } + function isReadonlySymbol(symbol) { + return !!(getCheckFlags(symbol) & 8 /* Readonly */ || symbol.flags & 4 /* Property */ && getDeclarationModifierFlagsFromSymbol(symbol) & 8 /* Readonly */ || symbol.flags & 3 /* Variable */ && getDeclarationNodeFlagsFromSymbol(symbol) & 6 /* Constant */ || symbol.flags & 98304 /* Accessor */ && !(symbol.flags & 65536 /* SetAccessor */) || symbol.flags & 8 /* EnumMember */ || some(symbol.declarations, isReadonlyAssignmentDeclaration)); + } + function isAssignmentToReadonlyEntity(expr, symbol, assignmentKind) { + var _a, _b; + if (assignmentKind === 0 /* None */) { + return false; + } + if (isReadonlySymbol(symbol)) { + if (symbol.flags & 4 /* Property */ && isAccessExpression(expr) && expr.expression.kind === 110 /* ThisKeyword */) { + const ctor = getControlFlowContainer(expr); + if (!(ctor && (ctor.kind === 177 /* Constructor */ || isJSConstructor(ctor)))) { + return true; + } + if (symbol.valueDeclaration) { + const isAssignmentDeclaration2 = isBinaryExpression(symbol.valueDeclaration); + const isLocalPropertyDeclaration = ctor.parent === symbol.valueDeclaration.parent; + const isLocalParameterProperty = ctor === symbol.valueDeclaration.parent; + const isLocalThisPropertyAssignment = isAssignmentDeclaration2 && ((_a = symbol.parent) == null ? void 0 : _a.valueDeclaration) === ctor.parent; + const isLocalThisPropertyAssignmentConstructorFunction = isAssignmentDeclaration2 && ((_b = symbol.parent) == null ? void 0 : _b.valueDeclaration) === ctor; + const isWriteableSymbol = isLocalPropertyDeclaration || isLocalParameterProperty || isLocalThisPropertyAssignment || isLocalThisPropertyAssignmentConstructorFunction; + return !isWriteableSymbol; + } + } + return true; + } + if (isAccessExpression(expr)) { + const node = skipParentheses(expr.expression); + if (node.kind === 80 /* Identifier */) { + const symbol2 = getNodeLinks(node).resolvedSymbol; + if (symbol2.flags & 2097152 /* Alias */) { + const declaration = getDeclarationOfAliasSymbol(symbol2); + return !!declaration && declaration.kind === 275 /* NamespaceImport */; + } + } + } + return false; + } + function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) { + const node = skipOuterExpressions(expr, 38 /* Assertions */ | 1 /* Parentheses */); + if (node.kind !== 80 /* Identifier */ && !isAccessExpression(node)) { + error2(expr, invalidReferenceMessage); + return false; + } + if (node.flags & 64 /* OptionalChain */) { + error2(expr, invalidOptionalChainMessage); + return false; + } + return true; + } + function checkDeleteExpression(node) { + checkExpression(node.expression); + const expr = skipParentheses(node.expression); + if (!isAccessExpression(expr)) { + error2(expr, Diagnostics.The_operand_of_a_delete_operator_must_be_a_property_reference); + return booleanType; + } + if (isPropertyAccessExpression(expr) && isPrivateIdentifier(expr.name)) { + error2(expr, Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_private_identifier); + } + const links = getNodeLinks(expr); + const symbol = getExportSymbolOfValueSymbolIfExported(links.resolvedSymbol); + if (symbol) { + if (isReadonlySymbol(symbol)) { + error2(expr, Diagnostics.The_operand_of_a_delete_operator_cannot_be_a_read_only_property); + } else { + checkDeleteExpressionMustBeOptional(expr, symbol); + } + } + return booleanType; + } + function checkDeleteExpressionMustBeOptional(expr, symbol) { + const type = getTypeOfSymbol(symbol); + if (strictNullChecks && !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) && !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : hasTypeFacts(type, 16777216 /* IsUndefined */))) { + error2(expr, Diagnostics.The_operand_of_a_delete_operator_must_be_optional); + } + } + function checkTypeOfExpression(node) { + checkExpression(node.expression); + return typeofType; + } + function checkVoidExpression(node) { + checkNodeDeferred(node); + return undefinedWideningType; + } + function checkAwaitGrammar(node) { + let hasError = false; + const container = getContainingFunctionOrClassStaticBlock(node); + if (container && isClassStaticBlockDeclaration(container)) { + const message = isAwaitExpression(node) ? Diagnostics.await_expression_cannot_be_used_inside_a_class_static_block : Diagnostics.await_using_statements_cannot_be_used_inside_a_class_static_block; + error2(node, message); + hasError = true; + } else if (!(node.flags & 65536 /* AwaitContext */)) { + if (isInTopLevelContext(node)) { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + let span; + if (!isEffectiveExternalModule(sourceFile, compilerOptions)) { + span ?? (span = getSpanOfTokenAtPosition(sourceFile, node.pos)); + const message = isAwaitExpression(node) ? Diagnostics.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module : Diagnostics.await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module; + const diagnostic = createFileDiagnostic(sourceFile, span.start, span.length, message); + diagnostics.add(diagnostic); + hasError = true; + } + switch (moduleKind) { + case 100 /* Node16 */: + case 101 /* Node18 */: + case 102 /* Node20 */: + case 199 /* NodeNext */: + if (sourceFile.impliedNodeFormat === 1 /* CommonJS */) { + span ?? (span = getSpanOfTokenAtPosition(sourceFile, node.pos)); + diagnostics.add( + createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level) + ); + hasError = true; + break; + } + // fallthrough + case 7 /* ES2022 */: + case 99 /* ESNext */: + case 200 /* Preserve */: + case 4 /* System */: + if (languageVersion >= 4 /* ES2017 */) { + break; + } + // fallthrough + default: + span ?? (span = getSpanOfTokenAtPosition(sourceFile, node.pos)); + const message = isAwaitExpression(node) ? Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher : Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher; + diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, message)); + hasError = true; + break; + } + } + } else { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + const span = getSpanOfTokenAtPosition(sourceFile, node.pos); + const message = isAwaitExpression(node) ? Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules : Diagnostics.await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules; + const diagnostic = createFileDiagnostic(sourceFile, span.start, span.length, message); + if (container && container.kind !== 177 /* Constructor */ && (getFunctionFlags(container) & 2 /* Async */) === 0) { + const relatedInfo = createDiagnosticForNode(container, Diagnostics.Did_you_mean_to_mark_this_function_as_async); + addRelatedInfo(diagnostic, relatedInfo); + } + diagnostics.add(diagnostic); + hasError = true; + } + } + } + if (isAwaitExpression(node) && isInParameterInitializerBeforeContainingFunction(node)) { + error2(node, Diagnostics.await_expressions_cannot_be_used_in_a_parameter_initializer); + hasError = true; + } + return hasError; + } + function checkAwaitExpression(node) { + addLazyDiagnostic(() => checkAwaitGrammar(node)); + const operandType = checkExpression(node.expression); + const awaitedType = checkAwaitedType( + operandType, + /*withAlias*/ + true, + node, + Diagnostics.Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + ); + if (awaitedType === operandType && !isErrorType(awaitedType) && !(operandType.flags & 3 /* AnyOrUnknown */)) { + addErrorOrSuggestion( + /*isError*/ + false, + createDiagnosticForNode(node, Diagnostics.await_has_no_effect_on_the_type_of_this_expression) + ); + } + return awaitedType; + } + function checkPrefixUnaryExpression(node) { + const operandType = checkExpression(node.operand); + if (operandType === silentNeverType) { + return silentNeverType; + } + switch (node.operand.kind) { + case 9 /* NumericLiteral */: + switch (node.operator) { + case 41 /* MinusToken */: + return getFreshTypeOfLiteralType(getNumberLiteralType(-node.operand.text)); + case 40 /* PlusToken */: + return getFreshTypeOfLiteralType(getNumberLiteralType(+node.operand.text)); + } + break; + case 10 /* BigIntLiteral */: + if (node.operator === 41 /* MinusToken */) { + return getFreshTypeOfLiteralType(getBigIntLiteralType({ + negative: true, + base10Value: parsePseudoBigInt(node.operand.text) + })); + } + } + switch (node.operator) { + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + checkNonNullType(operandType, node.operand); + if (maybeTypeOfKindConsideringBaseConstraint(operandType, 12288 /* ESSymbolLike */)) { + error2(node.operand, Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, tokenToString(node.operator)); + } + if (node.operator === 40 /* PlusToken */) { + if (maybeTypeOfKindConsideringBaseConstraint(operandType, 2112 /* BigIntLike */)) { + error2(node.operand, Diagnostics.Operator_0_cannot_be_applied_to_type_1, tokenToString(node.operator), typeToString(getBaseTypeOfLiteralType(operandType))); + } + return numberType; + } + return getUnaryResultType(operandType); + case 54 /* ExclamationToken */: + checkTruthinessOfType(operandType, node.operand); + const facts = getTypeFacts(operandType, 4194304 /* Truthy */ | 8388608 /* Falsy */); + return facts === 4194304 /* Truthy */ ? falseType : facts === 8388608 /* Falsy */ ? trueType : booleanType; + case 46 /* PlusPlusToken */: + case 47 /* MinusMinusToken */: + const ok = checkArithmeticOperandType(node.operand, checkNonNullType(operandType, node.operand), Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type); + if (ok) { + checkReferenceExpression( + node.operand, + Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access, + Diagnostics.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access + ); + } + return getUnaryResultType(operandType); + } + return errorType; + } + function checkPostfixUnaryExpression(node) { + const operandType = checkExpression(node.operand); + if (operandType === silentNeverType) { + return silentNeverType; + } + const ok = checkArithmeticOperandType( + node.operand, + checkNonNullType(operandType, node.operand), + Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type + ); + if (ok) { + checkReferenceExpression( + node.operand, + Diagnostics.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access, + Diagnostics.The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access + ); + } + return getUnaryResultType(operandType); + } + function getUnaryResultType(operandType) { + if (maybeTypeOfKind(operandType, 2112 /* BigIntLike */)) { + return isTypeAssignableToKind(operandType, 3 /* AnyOrUnknown */) || maybeTypeOfKind(operandType, 296 /* NumberLike */) ? numberOrBigIntType : bigintType; + } + return numberType; + } + function maybeTypeOfKindConsideringBaseConstraint(type, kind) { + if (maybeTypeOfKind(type, kind)) { + return true; + } + const baseConstraint = getBaseConstraintOrType(type); + return !!baseConstraint && maybeTypeOfKind(baseConstraint, kind); + } + function maybeTypeOfKind(type, kind) { + if (type.flags & kind) { + return true; + } + if (type.flags & 3145728 /* UnionOrIntersection */) { + const types = type.types; + for (const t of types) { + if (maybeTypeOfKind(t, kind)) { + return true; + } + } + } + return false; + } + function isTypeAssignableToKind(source, kind, strict) { + if (source.flags & kind) { + return true; + } + if (strict && source.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */ | 32768 /* Undefined */ | 65536 /* Null */)) { + return false; + } + return !!(kind & 296 /* NumberLike */) && isTypeAssignableTo(source, numberType) || !!(kind & 2112 /* BigIntLike */) && isTypeAssignableTo(source, bigintType) || !!(kind & 402653316 /* StringLike */) && isTypeAssignableTo(source, stringType) || !!(kind & 528 /* BooleanLike */) && isTypeAssignableTo(source, booleanType) || !!(kind & 16384 /* Void */) && isTypeAssignableTo(source, voidType) || !!(kind & 131072 /* Never */) && isTypeAssignableTo(source, neverType) || !!(kind & 65536 /* Null */) && isTypeAssignableTo(source, nullType) || !!(kind & 32768 /* Undefined */) && isTypeAssignableTo(source, undefinedType) || !!(kind & 4096 /* ESSymbol */) && isTypeAssignableTo(source, esSymbolType) || !!(kind & 67108864 /* NonPrimitive */) && isTypeAssignableTo(source, nonPrimitiveType); + } + function allTypesAssignableToKind(source, kind, strict) { + return source.flags & 1048576 /* Union */ ? every(source.types, (subType) => allTypesAssignableToKind(subType, kind, strict)) : isTypeAssignableToKind(source, kind, strict); + } + function isConstEnumObjectType(type) { + return !!(getObjectFlags(type) & 16 /* Anonymous */) && !!type.symbol && isConstEnumSymbol(type.symbol); + } + function isConstEnumSymbol(symbol) { + return (symbol.flags & 128 /* ConstEnum */) !== 0; + } + function getSymbolHasInstanceMethodOfObjectType(type) { + const hasInstancePropertyName = getPropertyNameForKnownSymbolName("hasInstance"); + if (allTypesAssignableToKind(type, 67108864 /* NonPrimitive */)) { + const hasInstanceProperty = getPropertyOfType(type, hasInstancePropertyName); + if (hasInstanceProperty) { + const hasInstancePropertyType = getTypeOfSymbol(hasInstanceProperty); + if (hasInstancePropertyType && getSignaturesOfType(hasInstancePropertyType, 0 /* Call */).length !== 0) { + return hasInstancePropertyType; + } + } + } + } + function checkInstanceOfExpression(left, right, leftType, rightType, checkMode) { + if (leftType === silentNeverType || rightType === silentNeverType) { + return silentNeverType; + } + if (!isTypeAny(leftType) && allTypesAssignableToKind(leftType, 402784252 /* Primitive */)) { + error2(left, Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); + } + Debug.assert(isInstanceOfExpression(left.parent)); + const signature = getResolvedSignature( + left.parent, + /*candidatesOutArray*/ + void 0, + checkMode + ); + if (signature === resolvingSignature) { + return silentNeverType; + } + const returnType = getReturnTypeOfSignature(signature); + checkTypeAssignableTo(returnType, booleanType, right, Diagnostics.An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_hand_side_of_an_instanceof_expression); + return booleanType; + } + function hasEmptyObjectIntersection(type) { + return someType(type, (t) => t === unknownEmptyObjectType || !!(t.flags & 2097152 /* Intersection */) && isEmptyAnonymousObjectType(getBaseConstraintOrType(t))); + } + function checkInExpression(left, right, leftType, rightType) { + if (leftType === silentNeverType || rightType === silentNeverType) { + return silentNeverType; + } + if (isPrivateIdentifier(left)) { + if (languageVersion < LanguageFeatureMinimumTarget.PrivateNamesAndClassStaticBlocks || languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators || !useDefineForClassFields) { + checkExternalEmitHelpers(left, 2097152 /* ClassPrivateFieldIn */); + } + if (!getNodeLinks(left).resolvedSymbol && getContainingClass(left)) { + const isUncheckedJS = isUncheckedJSSuggestion( + left, + rightType.symbol, + /*excludeClasses*/ + true + ); + reportNonexistentProperty(left, rightType, isUncheckedJS); + } + } else { + checkTypeAssignableTo(checkNonNullType(leftType, left), stringNumberSymbolType, left); + } + if (checkTypeAssignableTo(checkNonNullType(rightType, right), nonPrimitiveType, right)) { + if (hasEmptyObjectIntersection(rightType)) { + error2(right, Diagnostics.Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operator, typeToString(rightType)); + } + } + return booleanType; + } + function checkObjectLiteralAssignment(node, sourceType, rightIsThis) { + const properties = node.properties; + if (strictNullChecks && properties.length === 0) { + return checkNonNullType(sourceType, node); + } + for (let i = 0; i < properties.length; i++) { + checkObjectLiteralDestructuringPropertyAssignment(node, sourceType, i, properties, rightIsThis); + } + return sourceType; + } + function checkObjectLiteralDestructuringPropertyAssignment(node, objectLiteralType, propertyIndex, allProperties, rightIsThis = false) { + const properties = node.properties; + const property = properties[propertyIndex]; + if (property.kind === 304 /* PropertyAssignment */ || property.kind === 305 /* ShorthandPropertyAssignment */) { + const name = property.name; + const exprType = getLiteralTypeFromPropertyName(name); + if (isTypeUsableAsPropertyName(exprType)) { + const text = getPropertyNameFromType(exprType); + const prop = getPropertyOfType(objectLiteralType, text); + if (prop) { + markPropertyAsReferenced(prop, property, rightIsThis); + checkPropertyAccessibility( + property, + /*isSuper*/ + false, + /*writing*/ + true, + objectLiteralType, + prop + ); + } + } + const elementType = getIndexedAccessType(objectLiteralType, exprType, 32 /* ExpressionPosition */ | (hasDefaultValue(property) ? 16 /* AllowMissing */ : 0), name); + const type = getFlowTypeOfDestructuring(property, elementType); + return checkDestructuringAssignment(property.kind === 305 /* ShorthandPropertyAssignment */ ? property : property.initializer, type); + } else if (property.kind === 306 /* SpreadAssignment */) { + if (propertyIndex < properties.length - 1) { + error2(property, Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern); + } else { + if (languageVersion < LanguageFeatureMinimumTarget.ObjectSpreadRest) { + checkExternalEmitHelpers(property, 4 /* Rest */); + } + const nonRestNames = []; + if (allProperties) { + for (const otherProperty of allProperties) { + if (!isSpreadAssignment(otherProperty)) { + nonRestNames.push(otherProperty.name); + } + } + } + const type = getRestType(objectLiteralType, nonRestNames, objectLiteralType.symbol); + checkGrammarForDisallowedTrailingComma(allProperties, Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); + return checkDestructuringAssignment(property.expression, type); + } + } else { + error2(property, Diagnostics.Property_assignment_expected); + } + } + function checkArrayLiteralAssignment(node, sourceType, checkMode) { + const elements = node.elements; + if (languageVersion < LanguageFeatureMinimumTarget.DestructuringAssignment && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 512 /* Read */); + } + const possiblyOutOfBoundsType = checkIteratedTypeOrElementType(65 /* Destructuring */ | 128 /* PossiblyOutOfBounds */, sourceType, undefinedType, node) || errorType; + let inBoundsType = compilerOptions.noUncheckedIndexedAccess ? void 0 : possiblyOutOfBoundsType; + for (let i = 0; i < elements.length; i++) { + let type = possiblyOutOfBoundsType; + if (node.elements[i].kind === 231 /* SpreadElement */) { + type = inBoundsType = inBoundsType ?? (checkIteratedTypeOrElementType(65 /* Destructuring */, sourceType, undefinedType, node) || errorType); + } + checkArrayLiteralDestructuringElementAssignment(node, sourceType, i, type, checkMode); + } + return sourceType; + } + function checkArrayLiteralDestructuringElementAssignment(node, sourceType, elementIndex, elementType, checkMode) { + const elements = node.elements; + const element = elements[elementIndex]; + if (element.kind !== 233 /* OmittedExpression */) { + if (element.kind !== 231 /* SpreadElement */) { + const indexType = getNumberLiteralType(elementIndex); + if (isArrayLikeType(sourceType)) { + const accessFlags = 32 /* ExpressionPosition */ | (hasDefaultValue(element) ? 16 /* AllowMissing */ : 0); + const elementType2 = getIndexedAccessTypeOrUndefined(sourceType, indexType, accessFlags, createSyntheticExpression(element, indexType)) || errorType; + const assignedType = hasDefaultValue(element) ? getTypeWithFacts(elementType2, 524288 /* NEUndefined */) : elementType2; + const type = getFlowTypeOfDestructuring(element, assignedType); + return checkDestructuringAssignment(element, type, checkMode); + } + return checkDestructuringAssignment(element, elementType, checkMode); + } + if (elementIndex < elements.length - 1) { + error2(element, Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern); + } else { + const restExpression = element.expression; + if (restExpression.kind === 227 /* BinaryExpression */ && restExpression.operatorToken.kind === 64 /* EqualsToken */) { + error2(restExpression.operatorToken, Diagnostics.A_rest_element_cannot_have_an_initializer); + } else { + checkGrammarForDisallowedTrailingComma(node.elements, Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); + const type = everyType(sourceType, isTupleType) ? mapType(sourceType, (t) => sliceTupleType(t, elementIndex)) : createArrayType(elementType); + return checkDestructuringAssignment(restExpression, type, checkMode); + } + } + } + return void 0; + } + function checkDestructuringAssignment(exprOrAssignment, sourceType, checkMode, rightIsThis) { + let target; + if (exprOrAssignment.kind === 305 /* ShorthandPropertyAssignment */) { + const prop = exprOrAssignment; + if (prop.objectAssignmentInitializer) { + if (strictNullChecks && !hasTypeFacts(checkExpression(prop.objectAssignmentInitializer), 16777216 /* IsUndefined */)) { + sourceType = getTypeWithFacts(sourceType, 524288 /* NEUndefined */); + } + checkBinaryLikeExpression(prop.name, prop.equalsToken, prop.objectAssignmentInitializer, checkMode); + } + target = exprOrAssignment.name; + } else { + target = exprOrAssignment; + } + if (target.kind === 227 /* BinaryExpression */ && target.operatorToken.kind === 64 /* EqualsToken */) { + checkBinaryExpression(target, checkMode); + target = target.left; + if (strictNullChecks) { + sourceType = getTypeWithFacts(sourceType, 524288 /* NEUndefined */); + } + } + if (target.kind === 211 /* ObjectLiteralExpression */) { + return checkObjectLiteralAssignment(target, sourceType, rightIsThis); + } + if (target.kind === 210 /* ArrayLiteralExpression */) { + return checkArrayLiteralAssignment(target, sourceType, checkMode); + } + return checkReferenceAssignment(target, sourceType, checkMode); + } + function checkReferenceAssignment(target, sourceType, checkMode) { + const targetType = checkExpression(target, checkMode); + const error3 = target.parent.kind === 306 /* SpreadAssignment */ ? Diagnostics.The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access : Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access; + const optionalError = target.parent.kind === 306 /* SpreadAssignment */ ? Diagnostics.The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access : Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access; + if (checkReferenceExpression(target, error3, optionalError)) { + checkTypeAssignableToAndOptionallyElaborate(sourceType, targetType, target, target); + } + if (isPrivateIdentifierPropertyAccessExpression(target)) { + checkExternalEmitHelpers(target.parent, 1048576 /* ClassPrivateFieldSet */); + } + return sourceType; + } + function isSideEffectFree(node) { + node = skipParentheses(node); + switch (node.kind) { + case 80 /* Identifier */: + case 11 /* StringLiteral */: + case 14 /* RegularExpressionLiteral */: + case 216 /* TaggedTemplateExpression */: + case 229 /* TemplateExpression */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 106 /* NullKeyword */: + case 157 /* UndefinedKeyword */: + case 219 /* FunctionExpression */: + case 232 /* ClassExpression */: + case 220 /* ArrowFunction */: + case 210 /* ArrayLiteralExpression */: + case 211 /* ObjectLiteralExpression */: + case 222 /* TypeOfExpression */: + case 236 /* NonNullExpression */: + case 286 /* JsxSelfClosingElement */: + case 285 /* JsxElement */: + return true; + case 228 /* ConditionalExpression */: + return isSideEffectFree(node.whenTrue) && isSideEffectFree(node.whenFalse); + case 227 /* BinaryExpression */: + if (isAssignmentOperator(node.operatorToken.kind)) { + return false; + } + return isSideEffectFree(node.left) && isSideEffectFree(node.right); + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + switch (node.operator) { + case 54 /* ExclamationToken */: + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + return true; + } + return false; + // Some forms listed here for clarity + case 223 /* VoidExpression */: + // Explicit opt-out + case 217 /* TypeAssertionExpression */: + // Not SEF, but can produce useful type warnings + case 235 /* AsExpression */: + // Not SEF, but can produce useful type warnings + default: + return false; + } + } + function isTypeEqualityComparableTo(source, target) { + return (target.flags & 98304 /* Nullable */) !== 0 || isTypeComparableTo(source, target); + } + function createCheckBinaryExpression() { + const trampoline = createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState); + return (node, checkMode) => { + const result = trampoline(node, checkMode); + Debug.assertIsDefined(result); + return result; + }; + function onEnter(node, state, checkMode) { + if (state) { + state.stackIndex++; + state.skip = false; + setLeftType( + state, + /*type*/ + void 0 + ); + setLastResult( + state, + /*type*/ + void 0 + ); + } else { + state = { + checkMode, + skip: false, + stackIndex: 0, + typeStack: [void 0, void 0] + }; + } + if (isInJSFile(node) && getAssignedExpandoInitializer(node)) { + state.skip = true; + setLastResult(state, checkExpression(node.right, checkMode)); + return state; + } + checkNullishCoalesceOperands(node); + const operator = node.operatorToken.kind; + if (operator === 64 /* EqualsToken */ && (node.left.kind === 211 /* ObjectLiteralExpression */ || node.left.kind === 210 /* ArrayLiteralExpression */)) { + state.skip = true; + setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 110 /* ThisKeyword */)); + return state; + } + return state; + } + function onLeft(left, state, _node) { + if (!state.skip) { + return maybeCheckExpression(state, left); + } + } + function onOperator(operatorToken, state, node) { + if (!state.skip) { + const leftType = getLastResult(state); + Debug.assertIsDefined(leftType); + setLeftType(state, leftType); + setLastResult( + state, + /*type*/ + void 0 + ); + const operator = operatorToken.kind; + if (isLogicalOrCoalescingBinaryOperator(operator)) { + let parent2 = node.parent; + while (parent2.kind === 218 /* ParenthesizedExpression */ || isLogicalOrCoalescingBinaryExpression(parent2)) { + parent2 = parent2.parent; + } + if (operator === 56 /* AmpersandAmpersandToken */ || isIfStatement(parent2)) { + checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.left, leftType, isIfStatement(parent2) ? parent2.thenStatement : void 0); + } + if (isBinaryLogicalOperator(operator)) { + checkTruthinessOfType(leftType, node.left); + } + } + } + } + function onRight(right, state, _node) { + if (!state.skip) { + return maybeCheckExpression(state, right); + } + } + function onExit(node, state) { + let result; + if (state.skip) { + result = getLastResult(state); + } else { + const leftType = getLeftType(state); + Debug.assertIsDefined(leftType); + const rightType = getLastResult(state); + Debug.assertIsDefined(rightType); + result = checkBinaryLikeExpressionWorker(node.left, node.operatorToken, node.right, leftType, rightType, state.checkMode, node); + } + state.skip = false; + setLeftType( + state, + /*type*/ + void 0 + ); + setLastResult( + state, + /*type*/ + void 0 + ); + state.stackIndex--; + return result; + } + function foldState(state, result, _side) { + setLastResult(state, result); + return state; + } + function maybeCheckExpression(state, node) { + if (isBinaryExpression(node)) { + return node; + } + setLastResult(state, checkExpression(node, state.checkMode)); + } + function getLeftType(state) { + return state.typeStack[state.stackIndex]; + } + function setLeftType(state, type) { + state.typeStack[state.stackIndex] = type; + } + function getLastResult(state) { + return state.typeStack[state.stackIndex + 1]; + } + function setLastResult(state, type) { + state.typeStack[state.stackIndex + 1] = type; + } + } + function checkNullishCoalesceOperands(node) { + if (node.operatorToken.kind !== 61 /* QuestionQuestionToken */) { + return; + } + if (isBinaryExpression(node.parent)) { + const { left, operatorToken } = node.parent; + if (isBinaryExpression(left) && operatorToken.kind === 57 /* BarBarToken */) { + grammarErrorOnNode(left, Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, tokenToString(61 /* QuestionQuestionToken */), tokenToString(operatorToken.kind)); + } + } else if (isBinaryExpression(node.left)) { + const { operatorToken } = node.left; + if (operatorToken.kind === 57 /* BarBarToken */ || operatorToken.kind === 56 /* AmpersandAmpersandToken */) { + grammarErrorOnNode(node.left, Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, tokenToString(operatorToken.kind), tokenToString(61 /* QuestionQuestionToken */)); + } + } else if (isBinaryExpression(node.right)) { + const { operatorToken } = node.right; + if (operatorToken.kind === 56 /* AmpersandAmpersandToken */) { + grammarErrorOnNode(node.right, Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, tokenToString(61 /* QuestionQuestionToken */), tokenToString(operatorToken.kind)); + } + } + checkNullishCoalesceOperandLeft(node); + checkNullishCoalesceOperandRight(node); + } + function checkNullishCoalesceOperandLeft(node) { + const leftTarget = skipOuterExpressions(node.left, 63 /* All */); + const nullishSemantics = getSyntacticNullishnessSemantics(leftTarget); + if (nullishSemantics !== 3 /* Sometimes */) { + if (nullishSemantics === 1 /* Always */) { + error2(leftTarget, Diagnostics.This_expression_is_always_nullish); + } else { + error2(leftTarget, Diagnostics.Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish); + } + } + } + function checkNullishCoalesceOperandRight(node) { + const rightTarget = skipOuterExpressions(node.right, 63 /* All */); + const nullishSemantics = getSyntacticNullishnessSemantics(rightTarget); + if (isNotWithinNullishCoalesceExpression(node)) { + return; + } + if (nullishSemantics === 1 /* Always */) { + error2(rightTarget, Diagnostics.This_expression_is_always_nullish); + } else if (nullishSemantics === 2 /* Never */) { + error2(rightTarget, Diagnostics.This_expression_is_never_nullish); + } + } + function isNotWithinNullishCoalesceExpression(node) { + return !isBinaryExpression(node.parent) || node.parent.operatorToken.kind !== 61 /* QuestionQuestionToken */; + } + function getSyntacticNullishnessSemantics(node) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 224 /* AwaitExpression */: + case 214 /* CallExpression */: + case 216 /* TaggedTemplateExpression */: + case 213 /* ElementAccessExpression */: + case 237 /* MetaProperty */: + case 215 /* NewExpression */: + case 212 /* PropertyAccessExpression */: + case 230 /* YieldExpression */: + case 110 /* ThisKeyword */: + return 3 /* Sometimes */; + case 227 /* BinaryExpression */: + switch (node.operatorToken.kind) { + case 64 /* EqualsToken */: + case 61 /* QuestionQuestionToken */: + case 78 /* QuestionQuestionEqualsToken */: + case 57 /* BarBarToken */: + case 76 /* BarBarEqualsToken */: + case 56 /* AmpersandAmpersandToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + return 3 /* Sometimes */; + case 28 /* CommaToken */: + return getSyntacticNullishnessSemantics(node.right); + } + return 2 /* Never */; + case 228 /* ConditionalExpression */: + return getSyntacticNullishnessSemantics(node.whenTrue) | getSyntacticNullishnessSemantics(node.whenFalse); + case 106 /* NullKeyword */: + return 1 /* Always */; + case 80 /* Identifier */: + if (getResolvedSymbol(node) === undefinedSymbol) { + return 1 /* Always */; + } + return 3 /* Sometimes */; + } + return 2 /* Never */; + } + function checkBinaryLikeExpression(left, operatorToken, right, checkMode, errorNode) { + const operator = operatorToken.kind; + if (operator === 64 /* EqualsToken */ && (left.kind === 211 /* ObjectLiteralExpression */ || left.kind === 210 /* ArrayLiteralExpression */)) { + return checkDestructuringAssignment(left, checkExpression(right, checkMode), checkMode, right.kind === 110 /* ThisKeyword */); + } + let leftType; + if (isBinaryLogicalOperator(operator)) { + leftType = checkTruthinessExpression(left, checkMode); + } else { + leftType = checkExpression(left, checkMode); + } + const rightType = checkExpression(right, checkMode); + return checkBinaryLikeExpressionWorker(left, operatorToken, right, leftType, rightType, checkMode, errorNode); + } + function checkBinaryLikeExpressionWorker(left, operatorToken, right, leftType, rightType, checkMode, errorNode) { + const operator = operatorToken.kind; + switch (operator) { + case 42 /* AsteriskToken */: + case 43 /* AsteriskAsteriskToken */: + case 67 /* AsteriskEqualsToken */: + case 68 /* AsteriskAsteriskEqualsToken */: + case 44 /* SlashToken */: + case 69 /* SlashEqualsToken */: + case 45 /* PercentToken */: + case 70 /* PercentEqualsToken */: + case 41 /* MinusToken */: + case 66 /* MinusEqualsToken */: + case 48 /* LessThanLessThanToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 52 /* BarToken */: + case 75 /* BarEqualsToken */: + case 53 /* CaretToken */: + case 79 /* CaretEqualsToken */: + case 51 /* AmpersandToken */: + case 74 /* AmpersandEqualsToken */: + if (leftType === silentNeverType || rightType === silentNeverType) { + return silentNeverType; + } + leftType = checkNonNullType(leftType, left); + rightType = checkNonNullType(rightType, right); + let suggestedOperator; + if (leftType.flags & 528 /* BooleanLike */ && rightType.flags & 528 /* BooleanLike */ && (suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== void 0) { + error2(errorNode || operatorToken, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(operatorToken.kind), tokenToString(suggestedOperator)); + return numberType; + } else { + const leftOk = checkArithmeticOperandType( + left, + leftType, + Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type, + /*isAwaitValid*/ + true + ); + const rightOk = checkArithmeticOperandType( + right, + rightType, + Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type, + /*isAwaitValid*/ + true + ); + let resultType2; + if (isTypeAssignableToKind(leftType, 3 /* AnyOrUnknown */) && isTypeAssignableToKind(rightType, 3 /* AnyOrUnknown */) || // Or, if neither could be bigint, implicit coercion results in a number result + !(maybeTypeOfKind(leftType, 2112 /* BigIntLike */) || maybeTypeOfKind(rightType, 2112 /* BigIntLike */))) { + resultType2 = numberType; + } else if (bothAreBigIntLike(leftType, rightType)) { + switch (operator) { + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + reportOperatorError(); + break; + case 43 /* AsteriskAsteriskToken */: + case 68 /* AsteriskAsteriskEqualsToken */: + if (languageVersion < 3 /* ES2016 */) { + error2(errorNode, Diagnostics.Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_later); + } + } + resultType2 = bigintType; + } else { + reportOperatorError(bothAreBigIntLike); + resultType2 = errorType; + } + if (leftOk && rightOk) { + checkAssignmentOperator(resultType2); + switch (operator) { + case 48 /* LessThanLessThanToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + const rhsEval = evaluate(right); + if (typeof rhsEval.value === "number" && Math.abs(rhsEval.value) >= 32) { + errorOrSuggestion( + isEnumMember(walkUpParenthesizedExpressions(right.parent.parent)), + // elevate from suggestion to error within an enum member + errorNode || operatorToken, + Diagnostics.This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2, + getTextOfNode(left), + tokenToString(operator), + rhsEval.value % 32 + ); + } + break; + default: + break; + } + } + return resultType2; + } + case 40 /* PlusToken */: + case 65 /* PlusEqualsToken */: + if (leftType === silentNeverType || rightType === silentNeverType) { + return silentNeverType; + } + if (!isTypeAssignableToKind(leftType, 402653316 /* StringLike */) && !isTypeAssignableToKind(rightType, 402653316 /* StringLike */)) { + leftType = checkNonNullType(leftType, left); + rightType = checkNonNullType(rightType, right); + } + let resultType; + if (isTypeAssignableToKind( + leftType, + 296 /* NumberLike */, + /*strict*/ + true + ) && isTypeAssignableToKind( + rightType, + 296 /* NumberLike */, + /*strict*/ + true + )) { + resultType = numberType; + } else if (isTypeAssignableToKind( + leftType, + 2112 /* BigIntLike */, + /*strict*/ + true + ) && isTypeAssignableToKind( + rightType, + 2112 /* BigIntLike */, + /*strict*/ + true + )) { + resultType = bigintType; + } else if (isTypeAssignableToKind( + leftType, + 402653316 /* StringLike */, + /*strict*/ + true + ) || isTypeAssignableToKind( + rightType, + 402653316 /* StringLike */, + /*strict*/ + true + )) { + resultType = stringType; + } else if (isTypeAny(leftType) || isTypeAny(rightType)) { + resultType = isErrorType(leftType) || isErrorType(rightType) ? errorType : anyType; + } + if (resultType && !checkForDisallowedESSymbolOperand(operator)) { + return resultType; + } + if (!resultType) { + const closeEnoughKind = 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 3 /* AnyOrUnknown */; + reportOperatorError( + (left2, right2) => isTypeAssignableToKind(left2, closeEnoughKind) && isTypeAssignableToKind(right2, closeEnoughKind) + ); + return anyType; + } + if (operator === 65 /* PlusEqualsToken */) { + checkAssignmentOperator(resultType); + } + return resultType; + case 30 /* LessThanToken */: + case 32 /* GreaterThanToken */: + case 33 /* LessThanEqualsToken */: + case 34 /* GreaterThanEqualsToken */: + if (checkForDisallowedESSymbolOperand(operator)) { + leftType = getBaseTypeOfLiteralTypeForComparison(checkNonNullType(leftType, left)); + rightType = getBaseTypeOfLiteralTypeForComparison(checkNonNullType(rightType, right)); + reportOperatorErrorUnless((left2, right2) => { + if (isTypeAny(left2) || isTypeAny(right2)) { + return true; + } + const leftAssignableToNumber = isTypeAssignableTo(left2, numberOrBigIntType); + const rightAssignableToNumber = isTypeAssignableTo(right2, numberOrBigIntType); + return leftAssignableToNumber && rightAssignableToNumber || !leftAssignableToNumber && !rightAssignableToNumber && areTypesComparable(left2, right2); + }); + } + return booleanType; + case 35 /* EqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + case 37 /* EqualsEqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + if (!(checkMode && checkMode & 64 /* TypeOnly */)) { + if ((isLiteralExpressionOfObject(left) || isLiteralExpressionOfObject(right)) && // only report for === and !== in JS, not == or != + (!isInJSFile(left) || (operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */))) { + const eqType = operator === 35 /* EqualsEqualsToken */ || operator === 37 /* EqualsEqualsEqualsToken */; + error2(errorNode, Diagnostics.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value, eqType ? "false" : "true"); + } + checkNaNEquality(errorNode, operator, left, right); + reportOperatorErrorUnless((left2, right2) => isTypeEqualityComparableTo(left2, right2) || isTypeEqualityComparableTo(right2, left2)); + } + return booleanType; + case 104 /* InstanceOfKeyword */: + return checkInstanceOfExpression(left, right, leftType, rightType, checkMode); + case 103 /* InKeyword */: + return checkInExpression(left, right, leftType, rightType); + case 56 /* AmpersandAmpersandToken */: + case 77 /* AmpersandAmpersandEqualsToken */: { + const resultType2 = hasTypeFacts(leftType, 4194304 /* Truthy */) ? getUnionType([extractDefinitelyFalsyTypes(strictNullChecks ? leftType : getBaseTypeOfLiteralType(rightType)), rightType]) : leftType; + if (operator === 77 /* AmpersandAmpersandEqualsToken */) { + checkAssignmentOperator(rightType); + } + return resultType2; + } + case 57 /* BarBarToken */: + case 76 /* BarBarEqualsToken */: { + const resultType2 = hasTypeFacts(leftType, 8388608 /* Falsy */) ? getUnionType([getNonNullableType(removeDefinitelyFalsyTypes(leftType)), rightType], 2 /* Subtype */) : leftType; + if (operator === 76 /* BarBarEqualsToken */) { + checkAssignmentOperator(rightType); + } + return resultType2; + } + case 61 /* QuestionQuestionToken */: + case 78 /* QuestionQuestionEqualsToken */: { + const resultType2 = hasTypeFacts(leftType, 262144 /* EQUndefinedOrNull */) ? getUnionType([getNonNullableType(leftType), rightType], 2 /* Subtype */) : leftType; + if (operator === 78 /* QuestionQuestionEqualsToken */) { + checkAssignmentOperator(rightType); + } + return resultType2; + } + case 64 /* EqualsToken */: + const declKind = isBinaryExpression(left.parent) ? getAssignmentDeclarationKind(left.parent) : 0 /* None */; + checkAssignmentDeclaration(declKind, rightType); + if (isAssignmentDeclaration2(declKind)) { + if (!(rightType.flags & 524288 /* Object */) || declKind !== 2 /* ModuleExports */ && declKind !== 6 /* Prototype */ && !isEmptyObjectType(rightType) && !isFunctionObjectType(rightType) && !(getObjectFlags(rightType) & 1 /* Class */)) { + checkAssignmentOperator(rightType); + } + return leftType; + } else { + checkAssignmentOperator(rightType); + return rightType; + } + case 28 /* CommaToken */: + if (!compilerOptions.allowUnreachableCode && isSideEffectFree(left) && !isIndirectCall(left.parent)) { + const sf = getSourceFileOfNode(left); + const sourceText = sf.text; + const start = skipTrivia(sourceText, left.pos); + const isInDiag2657 = sf.parseDiagnostics.some((diag2) => { + if (diag2.code !== Diagnostics.JSX_expressions_must_have_one_parent_element.code) return false; + return textSpanContainsPosition(diag2, start); + }); + if (!isInDiag2657) error2(left, Diagnostics.Left_side_of_comma_operator_is_unused_and_has_no_side_effects); + } + return rightType; + default: + return Debug.fail(); + } + function bothAreBigIntLike(left2, right2) { + return isTypeAssignableToKind(left2, 2112 /* BigIntLike */) && isTypeAssignableToKind(right2, 2112 /* BigIntLike */); + } + function checkAssignmentDeclaration(kind, rightType2) { + if (kind === 2 /* ModuleExports */) { + for (const prop of getPropertiesOfObjectType(rightType2)) { + const propType = getTypeOfSymbol(prop); + if (propType.symbol && propType.symbol.flags & 32 /* Class */) { + const name = prop.escapedName; + const symbol = resolveName( + prop.valueDeclaration, + name, + 788968 /* Type */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + if ((symbol == null ? void 0 : symbol.declarations) && symbol.declarations.some(isJSDocTypedefTag)) { + addDuplicateDeclarationErrorsForSymbols(symbol, Diagnostics.Duplicate_identifier_0, unescapeLeadingUnderscores(name), prop); + addDuplicateDeclarationErrorsForSymbols(prop, Diagnostics.Duplicate_identifier_0, unescapeLeadingUnderscores(name), symbol); + } + } + } + } + } + function isIndirectCall(node) { + return node.parent.kind === 218 /* ParenthesizedExpression */ && isNumericLiteral(node.left) && node.left.text === "0" && (isCallExpression(node.parent.parent) && node.parent.parent.expression === node.parent || node.parent.parent.kind === 216 /* TaggedTemplateExpression */) && // special-case for "eval" because it's the only non-access case where an indirect call actually affects behavior. + (isAccessExpression(node.right) || isIdentifier(node.right) && node.right.escapedText === "eval"); + } + function checkForDisallowedESSymbolOperand(operator2) { + const offendingSymbolOperand = maybeTypeOfKindConsideringBaseConstraint(leftType, 12288 /* ESSymbolLike */) ? left : maybeTypeOfKindConsideringBaseConstraint(rightType, 12288 /* ESSymbolLike */) ? right : void 0; + if (offendingSymbolOperand) { + error2(offendingSymbolOperand, Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, tokenToString(operator2)); + return false; + } + return true; + } + function getSuggestedBooleanOperator(operator2) { + switch (operator2) { + case 52 /* BarToken */: + case 75 /* BarEqualsToken */: + return 57 /* BarBarToken */; + case 53 /* CaretToken */: + case 79 /* CaretEqualsToken */: + return 38 /* ExclamationEqualsEqualsToken */; + case 51 /* AmpersandToken */: + case 74 /* AmpersandEqualsToken */: + return 56 /* AmpersandAmpersandToken */; + default: + return void 0; + } + } + function checkAssignmentOperator(valueType) { + if (isAssignmentOperator(operator)) { + addLazyDiagnostic(checkAssignmentOperatorWorker); + } + function checkAssignmentOperatorWorker() { + let assigneeType = leftType; + if (isCompoundAssignment(operatorToken.kind) && left.kind === 212 /* PropertyAccessExpression */) { + assigneeType = checkPropertyAccessExpression( + left, + /*checkMode*/ + void 0, + /*writeOnly*/ + true + ); + } + if (checkReferenceExpression(left, Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access, Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access)) { + let headMessage; + if (exactOptionalPropertyTypes && isPropertyAccessExpression(left) && maybeTypeOfKind(valueType, 32768 /* Undefined */)) { + const target = getTypeOfPropertyOfType(getTypeOfExpression(left.expression), left.name.escapedText); + if (isExactOptionalPropertyMismatch(valueType, target)) { + headMessage = Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target; + } + } + checkTypeAssignableToAndOptionallyElaborate(valueType, assigneeType, left, right, headMessage); + } + } + } + function isAssignmentDeclaration2(kind) { + var _a; + switch (kind) { + case 2 /* ModuleExports */: + return true; + case 1 /* ExportsProperty */: + case 5 /* Property */: + case 6 /* Prototype */: + case 3 /* PrototypeProperty */: + case 4 /* ThisProperty */: + const symbol = getSymbolOfNode(left); + const init = getAssignedExpandoInitializer(right); + return !!init && isObjectLiteralExpression(init) && !!((_a = symbol == null ? void 0 : symbol.exports) == null ? void 0 : _a.size); + default: + return false; + } + } + function reportOperatorErrorUnless(typesAreCompatible) { + if (!typesAreCompatible(leftType, rightType)) { + reportOperatorError(typesAreCompatible); + return true; + } + return false; + } + function reportOperatorError(isRelated) { + let wouldWorkWithAwait = false; + const errNode = errorNode || operatorToken; + if (isRelated) { + const awaitedLeftType = getAwaitedTypeNoAlias(leftType); + const awaitedRightType = getAwaitedTypeNoAlias(rightType); + wouldWorkWithAwait = !(awaitedLeftType === leftType && awaitedRightType === rightType) && !!(awaitedLeftType && awaitedRightType) && isRelated(awaitedLeftType, awaitedRightType); + } + let effectiveLeft = leftType; + let effectiveRight = rightType; + if (!wouldWorkWithAwait && isRelated) { + [effectiveLeft, effectiveRight] = getBaseTypesIfUnrelated(leftType, rightType, isRelated); + } + const [leftStr, rightStr] = getTypeNamesForErrorDisplay(effectiveLeft, effectiveRight); + if (!tryGiveBetterPrimaryError(errNode, wouldWorkWithAwait, leftStr, rightStr)) { + errorAndMaybeSuggestAwait( + errNode, + wouldWorkWithAwait, + Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2, + tokenToString(operatorToken.kind), + leftStr, + rightStr + ); + } + } + function tryGiveBetterPrimaryError(errNode, maybeMissingAwait, leftStr, rightStr) { + switch (operatorToken.kind) { + case 37 /* EqualsEqualsEqualsToken */: + case 35 /* EqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + return errorAndMaybeSuggestAwait( + errNode, + maybeMissingAwait, + Diagnostics.This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap, + leftStr, + rightStr + ); + default: + return void 0; + } + } + function checkNaNEquality(errorNode2, operator2, left2, right2) { + const isLeftNaN = isGlobalNaN(skipParentheses(left2)); + const isRightNaN = isGlobalNaN(skipParentheses(right2)); + if (isLeftNaN || isRightNaN) { + const err = error2(errorNode2, Diagnostics.This_condition_will_always_return_0, tokenToString(operator2 === 37 /* EqualsEqualsEqualsToken */ || operator2 === 35 /* EqualsEqualsToken */ ? 97 /* FalseKeyword */ : 112 /* TrueKeyword */)); + if (isLeftNaN && isRightNaN) return; + const operatorString = operator2 === 38 /* ExclamationEqualsEqualsToken */ || operator2 === 36 /* ExclamationEqualsToken */ ? tokenToString(54 /* ExclamationToken */) : ""; + const location = isLeftNaN ? right2 : left2; + const expression = skipParentheses(location); + addRelatedInfo(err, createDiagnosticForNode(location, Diagnostics.Did_you_mean_0, `${operatorString}Number.isNaN(${isEntityNameExpression(expression) ? entityNameToString(expression) : "..."})`)); + } + } + function isGlobalNaN(expr) { + if (isIdentifier(expr) && expr.escapedText === "NaN") { + const globalNaNSymbol = getGlobalNaNSymbol(); + return !!globalNaNSymbol && globalNaNSymbol === getResolvedSymbol(expr); + } + return false; + } + } + function getBaseTypesIfUnrelated(leftType, rightType, isRelated) { + let effectiveLeft = leftType; + let effectiveRight = rightType; + const leftBase = getBaseTypeOfLiteralType(leftType); + const rightBase = getBaseTypeOfLiteralType(rightType); + if (!isRelated(leftBase, rightBase)) { + effectiveLeft = leftBase; + effectiveRight = rightBase; + } + return [effectiveLeft, effectiveRight]; + } + function checkYieldExpression(node) { + addLazyDiagnostic(checkYieldExpressionGrammar); + const func = getContainingFunction(node); + if (!func) return anyType; + const functionFlags = getFunctionFlags(func); + if (!(functionFlags & 1 /* Generator */)) { + return anyType; + } + const isAsync = (functionFlags & 2 /* Async */) !== 0; + if (node.asteriskToken) { + if (isAsync && languageVersion < LanguageFeatureMinimumTarget.AsyncGenerators) { + checkExternalEmitHelpers(node, 26624 /* AsyncDelegatorIncludes */); + } + if (!isAsync && languageVersion < LanguageFeatureMinimumTarget.Generators && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 256 /* Values */); + } + } + let returnType = getReturnTypeFromAnnotation(func); + if (returnType && returnType.flags & 1048576 /* Union */) { + returnType = filterType(returnType, (t) => checkGeneratorInstantiationAssignabilityToReturnType( + t, + functionFlags, + /*errorNode*/ + void 0 + )); + } + const iterationTypes = returnType && getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsync); + const signatureYieldType = iterationTypes && iterationTypes.yieldType || anyType; + const signatureNextType = iterationTypes && iterationTypes.nextType || anyType; + const yieldExpressionType = node.expression ? checkExpression(node.expression) : undefinedWideningType; + const yieldedType = getYieldedTypeOfYieldExpression(node, yieldExpressionType, signatureNextType, isAsync); + if (returnType && yieldedType) { + checkTypeAssignableToAndOptionallyElaborate(yieldedType, signatureYieldType, node.expression || node, node.expression); + } + if (node.asteriskToken) { + const use = isAsync ? 19 /* AsyncYieldStar */ : 17 /* YieldStar */; + return getIterationTypeOfIterable(use, 1 /* Return */, yieldExpressionType, node.expression) || anyType; + } else if (returnType) { + return getIterationTypeOfGeneratorFunctionReturnType(2 /* Next */, returnType, isAsync) || anyType; + } + let type = getContextualIterationType(2 /* Next */, func); + if (!type) { + type = anyType; + addLazyDiagnostic(() => { + if (noImplicitAny && !expressionResultIsUnused(node)) { + const contextualType = getContextualType2( + node, + /*contextFlags*/ + void 0 + ); + if (!contextualType || isTypeAny(contextualType)) { + error2(node, Diagnostics.yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_type_annotation); + } + } + }); + } + return type; + function checkYieldExpressionGrammar() { + if (!(node.flags & 16384 /* YieldContext */)) { + grammarErrorOnFirstToken(node, Diagnostics.A_yield_expression_is_only_allowed_in_a_generator_body); + } + if (isInParameterInitializerBeforeContainingFunction(node)) { + error2(node, Diagnostics.yield_expressions_cannot_be_used_in_a_parameter_initializer); + } + } + } + function checkConditionalExpression(node, checkMode) { + const type = checkTruthinessExpression(node.condition, checkMode); + checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.condition, type, node.whenTrue); + const type1 = checkExpression(node.whenTrue, checkMode); + const type2 = checkExpression(node.whenFalse, checkMode); + return getUnionType([type1, type2], 2 /* Subtype */); + } + function isTemplateLiteralContext(node) { + const parent2 = node.parent; + return isParenthesizedExpression(parent2) && isTemplateLiteralContext(parent2) || isElementAccessExpression(parent2) && parent2.argumentExpression === node; + } + function checkTemplateExpression(node) { + const texts = [node.head.text]; + const types = []; + for (const span of node.templateSpans) { + const type = checkExpression(span.expression); + if (maybeTypeOfKindConsideringBaseConstraint(type, 12288 /* ESSymbolLike */)) { + error2(span.expression, Diagnostics.Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String); + } + texts.push(span.literal.text); + types.push(isTypeAssignableTo(type, templateConstraintType) ? type : stringType); + } + const evaluated = node.parent.kind !== 216 /* TaggedTemplateExpression */ && evaluate(node).value; + if (evaluated) { + return getFreshTypeOfLiteralType(getStringLiteralType(evaluated)); + } + if (isConstContext(node) || isTemplateLiteralContext(node) || someType(getContextualType2( + node, + /*contextFlags*/ + void 0 + ) || unknownType, isTemplateLiteralContextualType)) { + return getTemplateLiteralType(texts, types); + } + return stringType; + } + function isTemplateLiteralContextualType(type) { + return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) || type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */)); + } + function getContextNode2(node) { + if (isJsxAttributes(node) && !isJsxSelfClosingElement(node.parent)) { + return node.parent.parent; + } + return node; + } + function checkExpressionWithContextualType(node, contextualType, inferenceContext, checkMode) { + const contextNode = getContextNode2(node); + pushContextualType( + contextNode, + contextualType, + /*isCache*/ + false + ); + pushInferenceContext(contextNode, inferenceContext); + const type = checkExpression(node, checkMode | 1 /* Contextual */ | (inferenceContext ? 2 /* Inferential */ : 0)); + if (inferenceContext && inferenceContext.intraExpressionInferenceSites) { + inferenceContext.intraExpressionInferenceSites = void 0; + } + const result = maybeTypeOfKind(type, 2944 /* Literal */) && isLiteralOfContextualType(type, instantiateContextualType( + contextualType, + node, + /*contextFlags*/ + void 0 + )) ? getRegularTypeOfLiteralType(type) : type; + popInferenceContext(); + popContextualType(); + return result; + } + function checkExpressionCached(node, checkMode) { + if (checkMode) { + return checkExpression(node, checkMode); + } + const links = getNodeLinks(node); + if (!links.resolvedType) { + const saveFlowLoopStart = flowLoopStart; + const saveFlowTypeCache = flowTypeCache; + flowLoopStart = flowLoopCount; + flowTypeCache = void 0; + links.resolvedType = checkExpression(node, checkMode); + flowTypeCache = saveFlowTypeCache; + flowLoopStart = saveFlowLoopStart; + } + return links.resolvedType; + } + function isTypeAssertion(node) { + node = skipParentheses( + node, + /*excludeJSDocTypeAssertions*/ + true + ); + return node.kind === 217 /* TypeAssertionExpression */ || node.kind === 235 /* AsExpression */ || isJSDocTypeAssertion(node); + } + function checkDeclarationInitializer(declaration, checkMode, contextualType) { + const initializer = getEffectiveInitializer(declaration); + if (isInJSFile(declaration)) { + const typeNode = tryGetJSDocSatisfiesTypeNode(declaration); + if (typeNode) { + return checkSatisfiesExpressionWorker(initializer, typeNode, checkMode); + } + } + const type = getQuickTypeOfExpression(initializer) || (contextualType ? checkExpressionWithContextualType( + initializer, + contextualType, + /*inferenceContext*/ + void 0, + checkMode || 0 /* Normal */ + ) : checkExpressionCached(initializer, checkMode)); + if (isParameter(isBindingElement(declaration) ? walkUpBindingElementsAndPatterns(declaration) : declaration)) { + if (declaration.name.kind === 207 /* ObjectBindingPattern */ && isObjectLiteralType2(type)) { + return padObjectLiteralType(type, declaration.name); + } + if (declaration.name.kind === 208 /* ArrayBindingPattern */ && isTupleType(type)) { + return padTupleType(type, declaration.name); + } + } + return type; + } + function padObjectLiteralType(type, pattern) { + let missingElements; + for (const e of pattern.elements) { + if (e.initializer) { + const name = getPropertyNameFromBindingElement(e); + if (name && !getPropertyOfType(type, name)) { + missingElements = append(missingElements, e); + } + } + } + if (!missingElements) { + return type; + } + const members = createSymbolTable(); + for (const prop of getPropertiesOfObjectType(type)) { + members.set(prop.escapedName, prop); + } + for (const e of missingElements) { + const symbol = createSymbol(4 /* Property */ | 16777216 /* Optional */, getPropertyNameFromBindingElement(e)); + symbol.links.type = getTypeFromBindingElement( + e, + /*includePatternInType*/ + false, + /*reportErrors*/ + false + ); + members.set(symbol.escapedName, symbol); + } + const result = createAnonymousType(type.symbol, members, emptyArray, emptyArray, getIndexInfosOfType(type)); + result.objectFlags = type.objectFlags; + return result; + } + function getPropertyNameFromBindingElement(e) { + const exprType = getLiteralTypeFromPropertyName(e.propertyName || e.name); + return isTypeUsableAsPropertyName(exprType) ? getPropertyNameFromType(exprType) : void 0; + } + function padTupleType(type, pattern) { + if (type.target.combinedFlags & 12 /* Variable */ || getTypeReferenceArity(type) >= pattern.elements.length) { + return type; + } + const patternElements = pattern.elements; + const elementTypes = getElementTypes(type).slice(); + const elementFlags = type.target.elementFlags.slice(); + for (let i = getTypeReferenceArity(type); i < patternElements.length; i++) { + const e = patternElements[i]; + if (i < patternElements.length - 1 || !(e.kind === 209 /* BindingElement */ && e.dotDotDotToken)) { + elementTypes.push(!isOmittedExpression(e) && hasDefaultValue(e) ? getTypeFromBindingElement( + e, + /*includePatternInType*/ + false, + /*reportErrors*/ + false + ) : anyType); + elementFlags.push(2 /* Optional */); + if (!isOmittedExpression(e) && !hasDefaultValue(e)) { + reportImplicitAny(e, anyType); + } + } + } + return createTupleType(elementTypes, elementFlags, type.target.readonly); + } + function widenTypeInferredFromInitializer(declaration, type) { + const widened = getWidenedLiteralTypeForInitializer(declaration, type); + if (isInJSFile(declaration)) { + if (isEmptyLiteralType(widened)) { + reportImplicitAny(declaration, anyType); + return anyType; + } else if (isEmptyArrayLiteralType(widened)) { + reportImplicitAny(declaration, anyArrayType); + return anyArrayType; + } + } + return widened; + } + function getWidenedLiteralTypeForInitializer(declaration, type) { + return getCombinedNodeFlagsCached(declaration) & 6 /* Constant */ || isDeclarationReadonly(declaration) ? type : getWidenedLiteralType(type); + } + function isLiteralOfContextualType(candidateType, contextualType) { + if (contextualType) { + if (contextualType.flags & 3145728 /* UnionOrIntersection */) { + const types = contextualType.types; + return some(types, (t) => isLiteralOfContextualType(candidateType, t)); + } + if (contextualType.flags & 58982400 /* InstantiableNonPrimitive */) { + const constraint = getBaseConstraintOfType(contextualType) || unknownType; + return maybeTypeOfKind(constraint, 4 /* String */) && maybeTypeOfKind(candidateType, 128 /* StringLiteral */) || maybeTypeOfKind(constraint, 8 /* Number */) && maybeTypeOfKind(candidateType, 256 /* NumberLiteral */) || maybeTypeOfKind(constraint, 64 /* BigInt */) && maybeTypeOfKind(candidateType, 2048 /* BigIntLiteral */) || maybeTypeOfKind(constraint, 4096 /* ESSymbol */) && maybeTypeOfKind(candidateType, 8192 /* UniqueESSymbol */) || isLiteralOfContextualType(candidateType, constraint); + } + return !!(contextualType.flags & (128 /* StringLiteral */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && maybeTypeOfKind(candidateType, 128 /* StringLiteral */) || contextualType.flags & 256 /* NumberLiteral */ && maybeTypeOfKind(candidateType, 256 /* NumberLiteral */) || contextualType.flags & 2048 /* BigIntLiteral */ && maybeTypeOfKind(candidateType, 2048 /* BigIntLiteral */) || contextualType.flags & 512 /* BooleanLiteral */ && maybeTypeOfKind(candidateType, 512 /* BooleanLiteral */) || contextualType.flags & 8192 /* UniqueESSymbol */ && maybeTypeOfKind(candidateType, 8192 /* UniqueESSymbol */)); + } + return false; + } + function isConstContext(node) { + const parent2 = node.parent; + return isAssertionExpression(parent2) && isConstTypeReference(parent2.type) || isJSDocTypeAssertion(parent2) && isConstTypeReference(getJSDocTypeAssertionType(parent2)) || isValidConstAssertionArgument(node) && isConstTypeVariable(getContextualType2(node, 0 /* None */)) || (isParenthesizedExpression(parent2) || isArrayLiteralExpression(parent2) || isSpreadElement(parent2)) && isConstContext(parent2) || (isPropertyAssignment(parent2) || isShorthandPropertyAssignment(parent2) || isTemplateSpan(parent2)) && isConstContext(parent2.parent); + } + function checkExpressionForMutableLocation(node, checkMode, forceTuple) { + const type = checkExpression(node, checkMode, forceTuple); + return isConstContext(node) || isCommonJsExportedExpression(node) ? getRegularTypeOfLiteralType(type) : isTypeAssertion(node) ? type : getWidenedLiteralLikeTypeForContextualType(type, instantiateContextualType( + getContextualType2( + node, + /*contextFlags*/ + void 0 + ), + node, + /*contextFlags*/ + void 0 + )); + } + function checkPropertyAssignment(node, checkMode) { + if (node.name.kind === 168 /* ComputedPropertyName */) { + checkComputedPropertyName(node.name); + } + return checkExpressionForMutableLocation(node.initializer, checkMode); + } + function checkObjectLiteralMethod(node, checkMode) { + checkGrammarMethod(node); + if (node.name.kind === 168 /* ComputedPropertyName */) { + checkComputedPropertyName(node.name); + } + const uninstantiatedType = checkFunctionExpressionOrObjectLiteralMethod(node, checkMode); + return instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); + } + function instantiateTypeWithSingleGenericCallSignature(node, type, checkMode) { + if (checkMode && checkMode & (2 /* Inferential */ | 8 /* SkipGenericFunctions */)) { + const callSignature = getSingleSignature( + type, + 0 /* Call */, + /*allowMembers*/ + true + ); + const constructSignature = getSingleSignature( + type, + 1 /* Construct */, + /*allowMembers*/ + true + ); + const signature = callSignature || constructSignature; + if (signature && signature.typeParameters) { + const contextualType = getApparentTypeOfContextualType(node, 2 /* NoConstraints */); + if (contextualType) { + const contextualSignature = getSingleSignature( + getNonNullableType(contextualType), + callSignature ? 0 /* Call */ : 1 /* Construct */, + /*allowMembers*/ + false + ); + if (contextualSignature && !contextualSignature.typeParameters) { + if (checkMode & 8 /* SkipGenericFunctions */) { + skippedGenericFunction(node, checkMode); + return anyFunctionType; + } + const context = getInferenceContext(node); + const returnType = context.signature && getReturnTypeOfSignature(context.signature); + const returnSignature = returnType && getSingleCallOrConstructSignature(returnType); + if (returnSignature && !returnSignature.typeParameters && !every(context.inferences, hasInferenceCandidates)) { + const uniqueTypeParameters = getUniqueTypeParameters(context, signature.typeParameters); + const instantiatedSignature = getSignatureInstantiationWithoutFillingInTypeArguments(signature, uniqueTypeParameters); + const inferences = map(context.inferences, (info) => createInferenceInfo(info.typeParameter)); + applyToParameterTypes(instantiatedSignature, contextualSignature, (source, target) => { + inferTypes( + inferences, + source, + target, + /*priority*/ + 0, + /*contravariant*/ + true + ); + }); + if (some(inferences, hasInferenceCandidates)) { + applyToReturnTypes(instantiatedSignature, contextualSignature, (source, target) => { + inferTypes(inferences, source, target); + }); + if (!hasOverlappingInferences(context.inferences, inferences)) { + mergeInferences(context.inferences, inferences); + context.inferredTypeParameters = concatenate(context.inferredTypeParameters, uniqueTypeParameters); + return getOrCreateTypeFromSignature(instantiatedSignature); + } + } + } + return getOrCreateTypeFromSignature(instantiateSignatureInContextOf(signature, contextualSignature, context)); + } + } + } + } + return type; + } + function skippedGenericFunction(node, checkMode) { + if (checkMode & 2 /* Inferential */) { + const context = getInferenceContext(node); + context.flags |= 4 /* SkippedGenericFunction */; + } + } + function hasInferenceCandidates(info) { + return !!(info.candidates || info.contraCandidates); + } + function hasInferenceCandidatesOrDefault(info) { + return !!(info.candidates || info.contraCandidates || hasTypeParameterDefault(info.typeParameter)); + } + function hasOverlappingInferences(a, b) { + for (let i = 0; i < a.length; i++) { + if (hasInferenceCandidates(a[i]) && hasInferenceCandidates(b[i])) { + return true; + } + } + return false; + } + function mergeInferences(target, source) { + for (let i = 0; i < target.length; i++) { + if (!hasInferenceCandidates(target[i]) && hasInferenceCandidates(source[i])) { + target[i] = source[i]; + } + } + } + function getUniqueTypeParameters(context, typeParameters) { + const result = []; + let oldTypeParameters; + let newTypeParameters; + for (const tp of typeParameters) { + const name = tp.symbol.escapedName; + if (hasTypeParameterByName(context.inferredTypeParameters, name) || hasTypeParameterByName(result, name)) { + const newName = getUniqueTypeParameterName(concatenate(context.inferredTypeParameters, result), name); + const symbol = createSymbol(262144 /* TypeParameter */, newName); + const newTypeParameter = createTypeParameter(symbol); + newTypeParameter.target = tp; + oldTypeParameters = append(oldTypeParameters, tp); + newTypeParameters = append(newTypeParameters, newTypeParameter); + result.push(newTypeParameter); + } else { + result.push(tp); + } + } + if (newTypeParameters) { + const mapper = createTypeMapper(oldTypeParameters, newTypeParameters); + for (const tp of newTypeParameters) { + tp.mapper = mapper; + } + } + return result; + } + function hasTypeParameterByName(typeParameters, name) { + return some(typeParameters, (tp) => tp.symbol.escapedName === name); + } + function getUniqueTypeParameterName(typeParameters, baseName) { + let len = baseName.length; + while (len > 1 && baseName.charCodeAt(len - 1) >= 48 /* _0 */ && baseName.charCodeAt(len - 1) <= 57 /* _9 */) len--; + const s = baseName.slice(0, len); + for (let index = 1; true; index++) { + const augmentedName = s + index; + if (!hasTypeParameterByName(typeParameters, augmentedName)) { + return augmentedName; + } + } + } + function getReturnTypeOfSingleNonGenericCallSignature(funcType) { + const signature = getSingleCallSignature(funcType); + if (signature && !signature.typeParameters) { + return getReturnTypeOfSignature(signature); + } + } + function getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) { + const funcType = checkExpression(expr.expression); + const nonOptionalType = getOptionalExpressionType(funcType, expr.expression); + const returnType = getReturnTypeOfSingleNonGenericCallSignature(funcType); + return returnType && propagateOptionalTypeMarker(returnType, expr, nonOptionalType !== funcType); + } + function getTypeOfExpression(node) { + const quickType = getQuickTypeOfExpression(node); + if (quickType) { + return quickType; + } + if (node.flags & 268435456 /* TypeCached */ && flowTypeCache) { + const cachedType = flowTypeCache[getNodeId(node)]; + if (cachedType) { + return cachedType; + } + } + const startInvocationCount = flowInvocationCount; + const type = checkExpression(node, 64 /* TypeOnly */); + if (flowInvocationCount !== startInvocationCount) { + const cache = flowTypeCache || (flowTypeCache = []); + cache[getNodeId(node)] = type; + setNodeFlags(node, node.flags | 268435456 /* TypeCached */); + } + return type; + } + function getQuickTypeOfExpression(node) { + let expr = skipParentheses( + node, + /*excludeJSDocTypeAssertions*/ + true + ); + if (isJSDocTypeAssertion(expr)) { + const type = getJSDocTypeAssertionType(expr); + if (!isConstTypeReference(type)) { + return getTypeFromTypeNode(type); + } + } + expr = skipParentheses(node); + if (isAwaitExpression(expr)) { + const type = getQuickTypeOfExpression(expr.expression); + return type ? getAwaitedType(type) : void 0; + } + if (isCallExpression(expr) && expr.expression.kind !== 108 /* SuperKeyword */ && !isRequireCall( + expr, + /*requireStringLiteralLikeArgument*/ + true + ) && !isSymbolOrSymbolForCall(expr) && !isImportCall(expr)) { + return isCallChain(expr) ? getReturnTypeOfSingleNonGenericSignatureOfCallChain(expr) : getReturnTypeOfSingleNonGenericCallSignature(checkNonNullExpression(expr.expression)); + } else if (isAssertionExpression(expr) && !isConstTypeReference(expr.type)) { + return getTypeFromTypeNode(expr.type); + } else if (isLiteralExpression(node) || isBooleanLiteral(node)) { + return checkExpression(node); + } + return void 0; + } + function getContextFreeTypeOfExpression(node) { + const links = getNodeLinks(node); + if (links.contextFreeType) { + return links.contextFreeType; + } + pushContextualType( + node, + anyType, + /*isCache*/ + false + ); + const type = links.contextFreeType = checkExpression(node, 4 /* SkipContextSensitive */); + popContextualType(); + return type; + } + function checkExpression(node, checkMode, forceTuple) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Check, "checkExpression", { kind: node.kind, pos: node.pos, end: node.end, path: node.tracingPath }); + const saveCurrentNode = currentNode; + currentNode = node; + instantiationCount = 0; + const uninstantiatedType = checkExpressionWorker(node, checkMode, forceTuple); + const type = instantiateTypeWithSingleGenericCallSignature(node, uninstantiatedType, checkMode); + if (isConstEnumObjectType(type)) { + checkConstEnumAccess(node, type); + } + currentNode = saveCurrentNode; + (_b = tracing) == null ? void 0 : _b.pop(); + return type; + } + function checkConstEnumAccess(node, type) { + var _a; + const ok = node.parent.kind === 212 /* PropertyAccessExpression */ && node.parent.expression === node || node.parent.kind === 213 /* ElementAccessExpression */ && node.parent.expression === node || ((node.kind === 80 /* Identifier */ || node.kind === 167 /* QualifiedName */) && isInRightSideOfImportOrExportAssignment(node) || node.parent.kind === 187 /* TypeQuery */ && node.parent.exprName === node) || node.parent.kind === 282 /* ExportSpecifier */; + if (!ok) { + error2(node, Diagnostics.const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_import_declaration_or_export_assignment_or_type_query); + } + if (compilerOptions.isolatedModules || compilerOptions.verbatimModuleSyntax && ok && !resolveName( + node, + getFirstIdentifier(node), + 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false, + /*excludeGlobals*/ + true + )) { + Debug.assert(!!(type.symbol.flags & 128 /* ConstEnum */)); + const constEnumDeclaration = type.symbol.valueDeclaration; + const redirect = (_a = host.getRedirectFromOutput(getSourceFileOfNode(constEnumDeclaration).resolvedPath)) == null ? void 0 : _a.resolvedRef; + if (constEnumDeclaration.flags & 33554432 /* Ambient */ && !isValidTypeOnlyAliasUseSite(node) && (!redirect || !shouldPreserveConstEnums(redirect.commandLine.options))) { + error2(node, Diagnostics.Cannot_access_ambient_const_enums_when_0_is_enabled, isolatedModulesLikeFlagName); + } + } + } + function checkParenthesizedExpression(node, checkMode) { + if (hasJSDocNodes(node)) { + if (isJSDocSatisfiesExpression(node)) { + return checkSatisfiesExpressionWorker(node.expression, getJSDocSatisfiesExpressionType(node), checkMode); + } + if (isJSDocTypeAssertion(node)) { + return checkAssertionWorker(node, checkMode); + } + } + return checkExpression(node.expression, checkMode); + } + function checkExpressionWorker(node, checkMode, forceTuple) { + const kind = node.kind; + if (cancellationToken) { + switch (kind) { + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + cancellationToken.throwIfCancellationRequested(); + } + } + switch (kind) { + case 80 /* Identifier */: + return checkIdentifier(node, checkMode); + case 81 /* PrivateIdentifier */: + return checkPrivateIdentifierExpression(node); + case 110 /* ThisKeyword */: + return checkThisExpression(node); + case 108 /* SuperKeyword */: + return checkSuperExpression(node); + case 106 /* NullKeyword */: + return nullWideningType; + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: + return hasSkipDirectInferenceFlag(node) ? blockedStringType : getFreshTypeOfLiteralType(getStringLiteralType(node.text)); + case 9 /* NumericLiteral */: + checkGrammarNumericLiteral(node); + return getFreshTypeOfLiteralType(getNumberLiteralType(+node.text)); + case 10 /* BigIntLiteral */: + checkGrammarBigIntLiteral(node); + return getFreshTypeOfLiteralType(getBigIntLiteralType({ + negative: false, + base10Value: parsePseudoBigInt(node.text) + })); + case 112 /* TrueKeyword */: + return trueType; + case 97 /* FalseKeyword */: + return falseType; + case 229 /* TemplateExpression */: + return checkTemplateExpression(node); + case 14 /* RegularExpressionLiteral */: + return checkRegularExpressionLiteral(node); + case 210 /* ArrayLiteralExpression */: + return checkArrayLiteral(node, checkMode, forceTuple); + case 211 /* ObjectLiteralExpression */: + return checkObjectLiteral(node, checkMode); + case 212 /* PropertyAccessExpression */: + return checkPropertyAccessExpression(node, checkMode); + case 167 /* QualifiedName */: + return checkQualifiedName(node, checkMode); + case 213 /* ElementAccessExpression */: + return checkIndexedAccess(node, checkMode); + case 214 /* CallExpression */: + if (isImportCall(node)) { + return checkImportCallExpression(node); + } + // falls through + case 215 /* NewExpression */: + return checkCallExpression(node, checkMode); + case 216 /* TaggedTemplateExpression */: + return checkTaggedTemplateExpression(node); + case 218 /* ParenthesizedExpression */: + return checkParenthesizedExpression(node, checkMode); + case 232 /* ClassExpression */: + return checkClassExpression(node); + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return checkFunctionExpressionOrObjectLiteralMethod(node, checkMode); + case 222 /* TypeOfExpression */: + return checkTypeOfExpression(node); + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + return checkAssertion(node, checkMode); + case 236 /* NonNullExpression */: + return checkNonNullAssertion(node); + case 234 /* ExpressionWithTypeArguments */: + return checkExpressionWithTypeArguments(node); + case 239 /* SatisfiesExpression */: + return checkSatisfiesExpression(node); + case 237 /* MetaProperty */: + return checkMetaProperty(node); + case 221 /* DeleteExpression */: + return checkDeleteExpression(node); + case 223 /* VoidExpression */: + return checkVoidExpression(node); + case 224 /* AwaitExpression */: + return checkAwaitExpression(node); + case 225 /* PrefixUnaryExpression */: + return checkPrefixUnaryExpression(node); + case 226 /* PostfixUnaryExpression */: + return checkPostfixUnaryExpression(node); + case 227 /* BinaryExpression */: + return checkBinaryExpression(node, checkMode); + case 228 /* ConditionalExpression */: + return checkConditionalExpression(node, checkMode); + case 231 /* SpreadElement */: + return checkSpreadExpression(node, checkMode); + case 233 /* OmittedExpression */: + return undefinedWideningType; + case 230 /* YieldExpression */: + return checkYieldExpression(node); + case 238 /* SyntheticExpression */: + return checkSyntheticExpression(node); + case 295 /* JsxExpression */: + return checkJsxExpression(node, checkMode); + case 285 /* JsxElement */: + return checkJsxElement(node, checkMode); + case 286 /* JsxSelfClosingElement */: + return checkJsxSelfClosingElement(node, checkMode); + case 289 /* JsxFragment */: + return checkJsxFragment(node); + case 293 /* JsxAttributes */: + return checkJsxAttributes(node, checkMode); + case 287 /* JsxOpeningElement */: + Debug.fail("Shouldn't ever directly check a JsxOpeningElement"); + } + return errorType; + } + function checkTypeParameter(node) { + checkGrammarModifiers(node); + if (node.expression) { + grammarErrorOnFirstToken(node.expression, Diagnostics.Type_expected); + } + checkSourceElement(node.constraint); + checkSourceElement(node.default); + const typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node)); + getBaseConstraintOfType(typeParameter); + if (!hasNonCircularTypeParameterDefault(typeParameter)) { + error2(node.default, Diagnostics.Type_parameter_0_has_a_circular_default, typeToString(typeParameter)); + } + const constraintType = getConstraintOfTypeParameter(typeParameter); + const defaultType = getDefaultFromTypeParameter(typeParameter); + if (constraintType && defaultType) { + checkTypeAssignableTo(defaultType, getTypeWithThisArgument(instantiateType(constraintType, makeUnaryTypeMapper(typeParameter, defaultType)), defaultType), node.default, Diagnostics.Type_0_does_not_satisfy_the_constraint_1); + } + checkNodeDeferred(node); + addLazyDiagnostic(() => checkTypeNameIsReserved(node.name, Diagnostics.Type_parameter_name_cannot_be_0)); + } + function checkTypeParameterDeferred(node) { + var _a, _b; + if (isInterfaceDeclaration(node.parent) || isClassLike(node.parent) || isTypeAliasDeclaration(node.parent)) { + const typeParameter = getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node)); + const modifiers = getTypeParameterModifiers(typeParameter) & (8192 /* In */ | 16384 /* Out */); + if (modifiers) { + const symbol = getSymbolOfDeclaration(node.parent); + if (isTypeAliasDeclaration(node.parent) && !(getObjectFlags(getDeclaredTypeOfSymbol(symbol)) & (16 /* Anonymous */ | 32 /* Mapped */))) { + error2(node, Diagnostics.Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_types); + } else if (modifiers === 8192 /* In */ || modifiers === 16384 /* Out */) { + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.CheckTypes, "checkTypeParameterDeferred", { parent: getTypeId(getDeclaredTypeOfSymbol(symbol)), id: getTypeId(typeParameter) }); + const source = createMarkerType(symbol, typeParameter, modifiers === 16384 /* Out */ ? markerSubTypeForCheck : markerSuperTypeForCheck); + const target = createMarkerType(symbol, typeParameter, modifiers === 16384 /* Out */ ? markerSuperTypeForCheck : markerSubTypeForCheck); + const saveVarianceTypeParameter = typeParameter; + varianceTypeParameter = typeParameter; + checkTypeAssignableTo(source, target, node, Diagnostics.Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation); + varianceTypeParameter = saveVarianceTypeParameter; + (_b = tracing) == null ? void 0 : _b.pop(); + } + } + } + } + function checkParameter(node) { + checkGrammarModifiers(node); + checkVariableLikeDeclaration(node); + const func = getContainingFunction(node); + if (hasSyntacticModifier(node, 31 /* ParameterPropertyModifier */)) { + if (compilerOptions.erasableSyntaxOnly) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } + if (!(func.kind === 177 /* Constructor */ && nodeIsPresent(func.body))) { + error2(node, Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); + } + if (func.kind === 177 /* Constructor */ && isIdentifier(node.name) && node.name.escapedText === "constructor") { + error2(node.name, Diagnostics.constructor_cannot_be_used_as_a_parameter_property_name); + } + } + if (!node.initializer && isOptionalDeclaration(node) && isBindingPattern(node.name) && func.body) { + error2(node, Diagnostics.A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature); + } + if (node.name && isIdentifier(node.name) && (node.name.escapedText === "this" || node.name.escapedText === "new")) { + if (func.parameters.indexOf(node) !== 0) { + error2(node, Diagnostics.A_0_parameter_must_be_the_first_parameter, node.name.escapedText); + } + if (func.kind === 177 /* Constructor */ || func.kind === 181 /* ConstructSignature */ || func.kind === 186 /* ConstructorType */) { + error2(node, Diagnostics.A_constructor_cannot_have_a_this_parameter); + } + if (func.kind === 220 /* ArrowFunction */) { + error2(node, Diagnostics.An_arrow_function_cannot_have_a_this_parameter); + } + if (func.kind === 178 /* GetAccessor */ || func.kind === 179 /* SetAccessor */) { + error2(node, Diagnostics.get_and_set_accessors_cannot_declare_this_parameters); + } + } + if (node.dotDotDotToken && !isBindingPattern(node.name) && !isTypeAssignableTo(getReducedType(getTypeOfSymbol(node.symbol)), anyReadonlyArrayType)) { + error2(node, Diagnostics.A_rest_parameter_must_be_of_an_array_type); + } + } + function checkTypePredicate(node) { + const parent2 = getTypePredicateParent(node); + if (!parent2) { + error2(node, Diagnostics.A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods); + return; + } + const signature = getSignatureFromDeclaration(parent2); + const typePredicate = getTypePredicateOfSignature(signature); + if (!typePredicate) { + return; + } + checkSourceElement(node.type); + const { parameterName } = node; + if (typePredicate.kind !== 0 /* This */ && typePredicate.kind !== 2 /* AssertsThis */) { + if (typePredicate.parameterIndex >= 0) { + if (signatureHasRestParameter(signature) && typePredicate.parameterIndex === signature.parameters.length - 1) { + error2(parameterName, Diagnostics.A_type_predicate_cannot_reference_a_rest_parameter); + } else { + if (typePredicate.type) { + const leadingError = () => chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type + ); + checkTypeAssignableTo( + typePredicate.type, + getTypeOfSymbol(signature.parameters[typePredicate.parameterIndex]), + node.type, + /*headMessage*/ + void 0, + leadingError + ); + } + } + } else if (parameterName) { + let hasReportedError = false; + for (const { name } of parent2.parameters) { + if (isBindingPattern(name) && checkIfTypePredicateVariableIsDeclaredInBindingPattern(name, parameterName, typePredicate.parameterName)) { + hasReportedError = true; + break; + } + } + if (!hasReportedError) { + error2(node.parameterName, Diagnostics.Cannot_find_parameter_0, typePredicate.parameterName); + } + } + } + } + function getTypePredicateParent(node) { + switch (node.parent.kind) { + case 220 /* ArrowFunction */: + case 180 /* CallSignature */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 185 /* FunctionType */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + const parent2 = node.parent; + if (node === parent2.type) { + return parent2; + } + } + } + function checkIfTypePredicateVariableIsDeclaredInBindingPattern(pattern, predicateVariableNode, predicateVariableName) { + for (const element of pattern.elements) { + if (isOmittedExpression(element)) { + continue; + } + const name = element.name; + if (name.kind === 80 /* Identifier */ && name.escapedText === predicateVariableName) { + error2(predicateVariableNode, Diagnostics.A_type_predicate_cannot_reference_element_0_in_a_binding_pattern, predicateVariableName); + return true; + } else if (name.kind === 208 /* ArrayBindingPattern */ || name.kind === 207 /* ObjectBindingPattern */) { + if (checkIfTypePredicateVariableIsDeclaredInBindingPattern( + name, + predicateVariableNode, + predicateVariableName + )) { + return true; + } + } + } + } + function checkSignatureDeclaration(node) { + if (node.kind === 182 /* IndexSignature */) { + checkGrammarIndexSignature(node); + } else if (node.kind === 185 /* FunctionType */ || node.kind === 263 /* FunctionDeclaration */ || node.kind === 186 /* ConstructorType */ || node.kind === 180 /* CallSignature */ || node.kind === 177 /* Constructor */ || node.kind === 181 /* ConstructSignature */) { + checkGrammarFunctionLikeDeclaration(node); + } + const functionFlags = getFunctionFlags(node); + if (!(functionFlags & 4 /* Invalid */)) { + if ((functionFlags & 3 /* AsyncGenerator */) === 3 /* AsyncGenerator */ && languageVersion < LanguageFeatureMinimumTarget.AsyncGenerators) { + checkExternalEmitHelpers(node, 6144 /* AsyncGeneratorIncludes */); + } + if ((functionFlags & 3 /* AsyncGenerator */) === 2 /* Async */ && languageVersion < LanguageFeatureMinimumTarget.AsyncFunctions) { + checkExternalEmitHelpers(node, 64 /* Awaiter */); + } + if ((functionFlags & 3 /* AsyncGenerator */) !== 0 /* Normal */ && languageVersion < LanguageFeatureMinimumTarget.Generators) { + checkExternalEmitHelpers(node, 128 /* Generator */); + } + } + checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); + checkUnmatchedJSDocParameters(node); + forEach(node.parameters, checkParameter); + if (node.type) { + checkSourceElement(node.type); + } + addLazyDiagnostic(checkSignatureDeclarationDiagnostics); + function checkSignatureDeclarationDiagnostics() { + checkCollisionWithArgumentsInGeneratedCode(node); + let returnTypeNode = getEffectiveReturnTypeNode(node); + let returnTypeErrorLocation = returnTypeNode; + if (isInJSFile(node)) { + const typeTag = getJSDocTypeTag(node); + if (typeTag && typeTag.typeExpression && isTypeReferenceNode(typeTag.typeExpression.type)) { + const signature = getSingleCallSignature(getTypeFromTypeNode(typeTag.typeExpression)); + if (signature && signature.declaration) { + returnTypeNode = getEffectiveReturnTypeNode(signature.declaration); + returnTypeErrorLocation = typeTag.typeExpression.type; + } + } + } + if (noImplicitAny && !returnTypeNode) { + switch (node.kind) { + case 181 /* ConstructSignature */: + error2(node, Diagnostics.Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + case 180 /* CallSignature */: + error2(node, Diagnostics.Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type); + break; + } + } + if (returnTypeNode && returnTypeErrorLocation) { + const functionFlags2 = getFunctionFlags(node); + if ((functionFlags2 & (4 /* Invalid */ | 1 /* Generator */)) === 1 /* Generator */) { + const returnType = getTypeFromTypeNode(returnTypeNode); + if (returnType === voidType) { + error2(returnTypeErrorLocation, Diagnostics.A_generator_cannot_have_a_void_type_annotation); + } else { + checkGeneratorInstantiationAssignabilityToReturnType(returnType, functionFlags2, returnTypeErrorLocation); + } + } else if ((functionFlags2 & 3 /* AsyncGenerator */) === 2 /* Async */) { + checkAsyncFunctionReturnType(node, returnTypeNode, returnTypeErrorLocation); + } + } + if (node.kind !== 182 /* IndexSignature */ && node.kind !== 318 /* JSDocFunctionType */) { + registerForUnusedIdentifiersCheck(node); + } + } + } + function checkGeneratorInstantiationAssignabilityToReturnType(returnType, functionFlags, errorNode) { + const generatorYieldType = getIterationTypeOfGeneratorFunctionReturnType(0 /* Yield */, returnType, (functionFlags & 2 /* Async */) !== 0) || anyType; + const generatorReturnType = getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, returnType, (functionFlags & 2 /* Async */) !== 0) || generatorYieldType; + const generatorNextType = getIterationTypeOfGeneratorFunctionReturnType(2 /* Next */, returnType, (functionFlags & 2 /* Async */) !== 0) || unknownType; + const generatorInstantiation = createGeneratorType(generatorYieldType, generatorReturnType, generatorNextType, !!(functionFlags & 2 /* Async */)); + return checkTypeAssignableTo(generatorInstantiation, returnType, errorNode); + } + function checkClassForDuplicateDeclarations(node) { + const instanceNames = /* @__PURE__ */ new Map(); + const staticNames = /* @__PURE__ */ new Map(); + const privateIdentifiers = /* @__PURE__ */ new Map(); + for (const member of node.members) { + if (member.kind === 177 /* Constructor */) { + for (const param of member.parameters) { + if (isParameterPropertyDeclaration(param, member) && !isBindingPattern(param.name)) { + addName(instanceNames, param.name, param.name.escapedText, 3 /* GetOrSetAccessor */); + } + } + } else { + const isStaticMember = isStatic(member); + const name = member.name; + if (!name) { + continue; + } + const isPrivate = isPrivateIdentifier(name); + const privateStaticFlags = isPrivate && isStaticMember ? 16 /* PrivateStatic */ : 0; + const names = isPrivate ? privateIdentifiers : isStaticMember ? staticNames : instanceNames; + const memberName = name && getEffectivePropertyNameForPropertyNameNode(name); + if (memberName) { + switch (member.kind) { + case 178 /* GetAccessor */: + addName(names, name, memberName, 1 /* GetAccessor */ | privateStaticFlags); + break; + case 179 /* SetAccessor */: + addName(names, name, memberName, 2 /* SetAccessor */ | privateStaticFlags); + break; + case 173 /* PropertyDeclaration */: + addName(names, name, memberName, 3 /* GetOrSetAccessor */ | privateStaticFlags); + break; + case 175 /* MethodDeclaration */: + addName(names, name, memberName, 8 /* Method */ | privateStaticFlags); + break; + } + } + } + } + function addName(names, location, name, meaning) { + const prev = names.get(name); + if (prev) { + if ((prev & 16 /* PrivateStatic */) !== (meaning & 16 /* PrivateStatic */)) { + error2(location, Diagnostics.Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name, getTextOfNode(location)); + } else { + const prevIsMethod = !!(prev & 8 /* Method */); + const isMethod = !!(meaning & 8 /* Method */); + if (prevIsMethod || isMethod) { + if (prevIsMethod !== isMethod) { + error2(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location)); + } + } else if (prev & meaning & ~16 /* PrivateStatic */) { + error2(location, Diagnostics.Duplicate_identifier_0, getTextOfNode(location)); + } else { + names.set(name, prev | meaning); + } + } + } else { + names.set(name, meaning); + } + } + } + function checkClassForStaticPropertyNameConflicts(node) { + for (const member of node.members) { + const memberNameNode = member.name; + const isStaticMember = isStatic(member); + if (isStaticMember && memberNameNode) { + const memberName = getEffectivePropertyNameForPropertyNameNode(memberNameNode); + switch (memberName) { + case "name": + case "length": + case "caller": + case "arguments": + if (useDefineForClassFields) { + break; + } + // fall through + case "prototype": + const message = Diagnostics.Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1; + const className = getNameOfSymbolAsWritten(getSymbolOfDeclaration(node)); + error2(memberNameNode, message, memberName, className); + break; + } + } + } + } + function checkObjectTypeForDuplicateDeclarations(node) { + const names = /* @__PURE__ */ new Map(); + for (const member of node.members) { + if (member.kind === 172 /* PropertySignature */) { + let memberName; + const name = member.name; + switch (name.kind) { + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + memberName = name.text; + break; + case 80 /* Identifier */: + memberName = idText(name); + break; + default: + continue; + } + if (names.get(memberName)) { + error2(getNameOfDeclaration(member.symbol.valueDeclaration), Diagnostics.Duplicate_identifier_0, memberName); + error2(member.name, Diagnostics.Duplicate_identifier_0, memberName); + } else { + names.set(memberName, true); + } + } + } + } + function checkTypeForDuplicateIndexSignatures(node) { + if (node.kind === 265 /* InterfaceDeclaration */) { + const nodeSymbol = getSymbolOfDeclaration(node); + if (nodeSymbol.declarations && nodeSymbol.declarations.length > 0 && nodeSymbol.declarations[0] !== node) { + return; + } + } + const indexSymbol = getIndexSymbol(getSymbolOfDeclaration(node)); + if (indexSymbol == null ? void 0 : indexSymbol.declarations) { + const indexSignatureMap = /* @__PURE__ */ new Map(); + for (const declaration of indexSymbol.declarations) { + if (isIndexSignatureDeclaration(declaration)) { + if (declaration.parameters.length === 1 && declaration.parameters[0].type) { + forEachType(getTypeFromTypeNode(declaration.parameters[0].type), (type) => { + const entry = indexSignatureMap.get(getTypeId(type)); + if (entry) { + entry.declarations.push(declaration); + } else { + indexSignatureMap.set(getTypeId(type), { type, declarations: [declaration] }); + } + }); + } + } + } + indexSignatureMap.forEach((entry) => { + if (entry.declarations.length > 1) { + for (const declaration of entry.declarations) { + error2(declaration, Diagnostics.Duplicate_index_signature_for_type_0, typeToString(entry.type)); + } + } + }); + } + } + function checkPropertyDeclaration(node) { + if (!checkGrammarModifiers(node) && !checkGrammarProperty(node)) checkGrammarComputedPropertyName(node.name); + checkVariableLikeDeclaration(node); + setNodeLinksForPrivateIdentifierScope(node); + if (hasSyntacticModifier(node, 64 /* Abstract */) && node.kind === 173 /* PropertyDeclaration */ && node.initializer) { + error2(node, Diagnostics.Property_0_cannot_have_an_initializer_because_it_is_marked_abstract, declarationNameToString(node.name)); + } + } + function checkPropertySignature(node) { + if (isPrivateIdentifier(node.name)) { + error2(node, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + } + return checkPropertyDeclaration(node); + } + function checkMethodDeclaration(node) { + if (!checkGrammarMethod(node)) checkGrammarComputedPropertyName(node.name); + if (isMethodDeclaration(node) && node.asteriskToken && isIdentifier(node.name) && idText(node.name) === "constructor") { + error2(node.name, Diagnostics.Class_constructor_may_not_be_a_generator); + } + checkFunctionOrMethodDeclaration(node); + if (hasSyntacticModifier(node, 64 /* Abstract */) && node.kind === 175 /* MethodDeclaration */ && node.body) { + error2(node, Diagnostics.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract, declarationNameToString(node.name)); + } + if (isPrivateIdentifier(node.name) && !getContainingClass(node)) { + error2(node, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + } + setNodeLinksForPrivateIdentifierScope(node); + } + function setNodeLinksForPrivateIdentifierScope(node) { + if (isPrivateIdentifier(node.name)) { + if (languageVersion < LanguageFeatureMinimumTarget.PrivateNamesAndClassStaticBlocks || languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators || !useDefineForClassFields) { + for (let lexicalScope = getEnclosingBlockScopeContainer(node); !!lexicalScope; lexicalScope = getEnclosingBlockScopeContainer(lexicalScope)) { + getNodeLinks(lexicalScope).flags |= 1048576 /* ContainsClassWithPrivateIdentifiers */; + } + if (isClassExpression(node.parent)) { + const enclosingIterationStatement = getEnclosingIterationStatement(node.parent); + if (enclosingIterationStatement) { + getNodeLinks(node.name).flags |= 32768 /* BlockScopedBindingInLoop */; + getNodeLinks(enclosingIterationStatement).flags |= 4096 /* LoopWithCapturedBlockScopedBinding */; + } + } + } + } + } + function checkClassStaticBlockDeclaration(node) { + checkGrammarModifiers(node); + forEachChild(node, checkSourceElement); + } + function checkConstructorDeclaration(node) { + checkSignatureDeclaration(node); + if (!checkGrammarConstructorTypeParameters(node)) checkGrammarConstructorTypeAnnotation(node); + checkSourceElement(node.body); + const symbol = getSymbolOfDeclaration(node); + const firstDeclaration = getDeclarationOfKind(symbol, node.kind); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(symbol); + } + if (nodeIsMissing(node.body)) { + return; + } + addLazyDiagnostic(checkConstructorDeclarationDiagnostics); + return; + function isInstancePropertyWithInitializerOrPrivateIdentifierProperty(n) { + if (isPrivateIdentifierClassElementDeclaration(n)) { + return true; + } + return n.kind === 173 /* PropertyDeclaration */ && !isStatic(n) && !!n.initializer; + } + function checkConstructorDeclarationDiagnostics() { + const containingClassDecl = node.parent; + if (getClassExtendsHeritageElement(containingClassDecl)) { + captureLexicalThis(node.parent, containingClassDecl); + const classExtendsNull = classDeclarationExtendsNull(containingClassDecl); + const superCall = findFirstSuperCall(node.body); + if (superCall) { + if (classExtendsNull) { + error2(superCall, Diagnostics.A_constructor_cannot_contain_a_super_call_when_its_class_extends_null); + } + const superCallShouldBeRootLevel = !emitStandardClassFields && (some(node.parent.members, isInstancePropertyWithInitializerOrPrivateIdentifierProperty) || some(node.parameters, (p) => hasSyntacticModifier(p, 31 /* ParameterPropertyModifier */))); + if (superCallShouldBeRootLevel) { + if (!superCallIsRootLevelInConstructor(superCall, node.body)) { + error2(superCall, Diagnostics.A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_initialized_properties_parameter_properties_or_private_identifiers); + } else { + let superCallStatement; + for (const statement of node.body.statements) { + if (isExpressionStatement(statement) && isSuperCall(skipOuterExpressions(statement.expression))) { + superCallStatement = statement; + break; + } + if (nodeImmediatelyReferencesSuperOrThis(statement)) { + break; + } + } + if (superCallStatement === void 0) { + error2(node, Diagnostics.A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_class_contains_initialized_properties_parameter_properties_or_private_identifiers); + } + } + } + } else if (!classExtendsNull) { + error2(node, Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call); + } + } + } + } + function superCallIsRootLevelInConstructor(superCall, body) { + const superCallParent = walkUpParenthesizedExpressions(superCall.parent); + return isExpressionStatement(superCallParent) && superCallParent.parent === body; + } + function nodeImmediatelyReferencesSuperOrThis(node) { + if (node.kind === 108 /* SuperKeyword */ || node.kind === 110 /* ThisKeyword */) { + return true; + } + if (isThisContainerOrFunctionBlock(node)) { + return false; + } + return !!forEachChild(node, nodeImmediatelyReferencesSuperOrThis); + } + function checkAccessorDeclaration(node) { + if (isIdentifier(node.name) && idText(node.name) === "constructor" && isClassLike(node.parent)) { + error2(node.name, Diagnostics.Class_constructor_may_not_be_an_accessor); + } + addLazyDiagnostic(checkAccessorDeclarationDiagnostics); + checkSourceElement(node.body); + setNodeLinksForPrivateIdentifierScope(node); + function checkAccessorDeclarationDiagnostics() { + if (!checkGrammarFunctionLikeDeclaration(node) && !checkGrammarAccessor(node)) checkGrammarComputedPropertyName(node.name); + checkDecorators(node); + checkSignatureDeclaration(node); + if (node.kind === 178 /* GetAccessor */) { + if (!(node.flags & 33554432 /* Ambient */) && nodeIsPresent(node.body) && node.flags & 512 /* HasImplicitReturn */) { + if (!(node.flags & 1024 /* HasExplicitReturn */)) { + error2(node.name, Diagnostics.A_get_accessor_must_return_a_value); + } + } + } + if (node.name.kind === 168 /* ComputedPropertyName */) { + checkComputedPropertyName(node.name); + } + if (hasBindableName(node)) { + const symbol = getSymbolOfDeclaration(node); + const getter = getDeclarationOfKind(symbol, 178 /* GetAccessor */); + const setter = getDeclarationOfKind(symbol, 179 /* SetAccessor */); + if (getter && setter && !(getNodeCheckFlags(getter) & 1 /* TypeChecked */)) { + getNodeLinks(getter).flags |= 1 /* TypeChecked */; + const getterFlags = getEffectiveModifierFlags(getter); + const setterFlags = getEffectiveModifierFlags(setter); + if ((getterFlags & 64 /* Abstract */) !== (setterFlags & 64 /* Abstract */)) { + error2(getter.name, Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); + error2(setter.name, Diagnostics.Accessors_must_both_be_abstract_or_non_abstract); + } + if (getterFlags & 4 /* Protected */ && !(setterFlags & (4 /* Protected */ | 2 /* Private */)) || getterFlags & 2 /* Private */ && !(setterFlags & 2 /* Private */)) { + error2(getter.name, Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter); + error2(setter.name, Diagnostics.A_get_accessor_must_be_at_least_as_accessible_as_the_setter); + } + } + } + const returnType = getTypeOfAccessors(getSymbolOfDeclaration(node)); + if (node.kind === 178 /* GetAccessor */) { + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, returnType); + } + } + } + function checkMissingDeclaration(node) { + checkDecorators(node); + } + function getEffectiveTypeArgumentAtIndex(node, typeParameters, index) { + if (node.typeArguments && index < node.typeArguments.length) { + return getTypeFromTypeNode(node.typeArguments[index]); + } + return getEffectiveTypeArguments2(node, typeParameters)[index]; + } + function getEffectiveTypeArguments2(node, typeParameters) { + return fillMissingTypeArguments(map(node.typeArguments, getTypeFromTypeNode), typeParameters, getMinTypeArgumentCount(typeParameters), isInJSFile(node)); + } + function checkTypeArgumentConstraints(node, typeParameters) { + let typeArguments; + let mapper; + let result = true; + for (let i = 0; i < typeParameters.length; i++) { + const constraint = getConstraintOfTypeParameter(typeParameters[i]); + if (constraint) { + if (!typeArguments) { + typeArguments = getEffectiveTypeArguments2(node, typeParameters); + mapper = createTypeMapper(typeParameters, typeArguments); + } + result = result && checkTypeAssignableTo( + typeArguments[i], + instantiateType(constraint, mapper), + node.typeArguments[i], + Diagnostics.Type_0_does_not_satisfy_the_constraint_1 + ); + } + } + return result; + } + function getTypeParametersForTypeAndSymbol(type, symbol) { + if (!isErrorType(type)) { + return symbol.flags & 524288 /* TypeAlias */ && getSymbolLinks(symbol).typeParameters || (getObjectFlags(type) & 4 /* Reference */ ? type.target.localTypeParameters : void 0); + } + return void 0; + } + function getTypeParametersForTypeReferenceOrImport(node) { + const type = getTypeFromTypeNode(node); + if (!isErrorType(type)) { + const symbol = getNodeLinks(node).resolvedSymbol; + if (symbol) { + return getTypeParametersForTypeAndSymbol(type, symbol); + } + } + return void 0; + } + function checkTypeReferenceNode(node) { + checkGrammarTypeArguments(node, node.typeArguments); + if (node.kind === 184 /* TypeReference */ && !isInJSFile(node) && !isInJSDoc(node) && node.typeArguments && node.typeName.end !== node.typeArguments.pos) { + const sourceFile = getSourceFileOfNode(node); + if (scanTokenAtPosition(sourceFile, node.typeName.end) === 25 /* DotToken */) { + grammarErrorAtPos(node, skipTrivia(sourceFile.text, node.typeName.end), 1, Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments); + } + } + forEach(node.typeArguments, checkSourceElement); + checkTypeReferenceOrImport(node); + } + function checkTypeReferenceOrImport(node) { + const type = getTypeFromTypeNode(node); + if (!isErrorType(type)) { + if (node.typeArguments) { + addLazyDiagnostic(() => { + const typeParameters = getTypeParametersForTypeReferenceOrImport(node); + if (typeParameters) { + checkTypeArgumentConstraints(node, typeParameters); + } + }); + } + const symbol = getNodeLinks(node).resolvedSymbol; + if (symbol) { + if (some(symbol.declarations, (d) => isTypeDeclaration(d) && !!(d.flags & 536870912 /* Deprecated */))) { + addDeprecatedSuggestion( + getDeprecatedSuggestionNode(node), + symbol.declarations, + symbol.escapedName + ); + } + } + } + } + function getTypeArgumentConstraint(node) { + const typeReferenceNode = tryCast(node.parent, isTypeReferenceType); + if (!typeReferenceNode) return void 0; + const typeParameters = getTypeParametersForTypeReferenceOrImport(typeReferenceNode); + if (!typeParameters) return void 0; + const constraint = getConstraintOfTypeParameter(typeParameters[typeReferenceNode.typeArguments.indexOf(node)]); + return constraint && instantiateType(constraint, createTypeMapper(typeParameters, getEffectiveTypeArguments2(typeReferenceNode, typeParameters))); + } + function checkTypeQuery(node) { + getTypeFromTypeQueryNode(node); + } + function checkTypeLiteral(node) { + forEach(node.members, checkSourceElement); + addLazyDiagnostic(checkTypeLiteralDiagnostics); + function checkTypeLiteralDiagnostics() { + const type = getTypeFromTypeLiteralOrFunctionOrConstructorTypeNode(node); + checkIndexConstraints(type, type.symbol); + checkTypeForDuplicateIndexSignatures(node); + checkObjectTypeForDuplicateDeclarations(node); + } + } + function checkArrayType(node) { + checkSourceElement(node.elementType); + } + function checkTupleType(node) { + let seenOptionalElement = false; + let seenRestElement = false; + for (const e of node.elements) { + let flags = getTupleElementFlags(e); + if (flags & 8 /* Variadic */) { + const type = getTypeFromTypeNode(e.type); + if (!isArrayLikeType(type)) { + error2(e, Diagnostics.A_rest_element_type_must_be_an_array_type); + break; + } + if (isArrayType(type) || isTupleType(type) && type.target.combinedFlags & 4 /* Rest */) { + flags |= 4 /* Rest */; + } + } + if (flags & 4 /* Rest */) { + if (seenRestElement) { + grammarErrorOnNode(e, Diagnostics.A_rest_element_cannot_follow_another_rest_element); + break; + } + seenRestElement = true; + } else if (flags & 2 /* Optional */) { + if (seenRestElement) { + grammarErrorOnNode(e, Diagnostics.An_optional_element_cannot_follow_a_rest_element); + break; + } + seenOptionalElement = true; + } else if (flags & 1 /* Required */ && seenOptionalElement) { + grammarErrorOnNode(e, Diagnostics.A_required_element_cannot_follow_an_optional_element); + break; + } + } + forEach(node.elements, checkSourceElement); + getTypeFromTypeNode(node); + } + function checkUnionOrIntersectionType(node) { + forEach(node.types, checkSourceElement); + getTypeFromTypeNode(node); + } + function checkIndexedAccessIndexType(type, accessNode) { + if (!(type.flags & 8388608 /* IndexedAccess */)) { + return type; + } + const objectType = type.objectType; + const indexType = type.indexType; + const objectIndexType = isGenericMappedType(objectType) && getMappedTypeNameTypeKind(objectType) === 2 /* Remapping */ ? getIndexTypeForMappedType(objectType, 0 /* None */) : getIndexType(objectType, 0 /* None */); + const hasNumberIndexInfo = !!getIndexInfoOfType(objectType, numberType); + if (everyType(indexType, (t) => isTypeAssignableTo(t, objectIndexType) || hasNumberIndexInfo && isApplicableIndexType(t, numberType))) { + if (accessNode.kind === 213 /* ElementAccessExpression */ && isAssignmentTarget(accessNode) && getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) { + error2(accessNode, Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType)); + } + return type; + } + if (isGenericObjectType(objectType)) { + const propertyName = getPropertyNameFromIndex(indexType, accessNode); + if (propertyName) { + const propertySymbol = forEachType(getApparentType(objectType), (t) => getPropertyOfType(t, propertyName)); + if (propertySymbol && getDeclarationModifierFlagsFromSymbol(propertySymbol) & 6 /* NonPublicAccessibilityModifier */) { + error2(accessNode, Diagnostics.Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter, unescapeLeadingUnderscores(propertyName)); + return errorType; + } + } + } + error2(accessNode, Diagnostics.Type_0_cannot_be_used_to_index_type_1, typeToString(indexType), typeToString(objectType)); + return errorType; + } + function checkIndexedAccessType(node) { + checkSourceElement(node.objectType); + checkSourceElement(node.indexType); + checkIndexedAccessIndexType(getTypeFromIndexedAccessTypeNode(node), node); + } + function checkMappedType(node) { + checkGrammarMappedType(node); + checkSourceElement(node.typeParameter); + checkSourceElement(node.nameType); + checkSourceElement(node.type); + if (!node.type) { + reportImplicitAny(node, anyType); + } + const type = getTypeFromMappedTypeNode(node); + const nameType = getNameTypeFromMappedType(type); + if (nameType) { + checkTypeAssignableTo(nameType, stringNumberSymbolType, node.nameType); + } else { + const constraintType = getConstraintTypeFromMappedType(type); + checkTypeAssignableTo(constraintType, stringNumberSymbolType, getEffectiveConstraintOfTypeParameter(node.typeParameter)); + } + } + function checkGrammarMappedType(node) { + var _a; + if ((_a = node.members) == null ? void 0 : _a.length) { + return grammarErrorOnNode(node.members[0], Diagnostics.A_mapped_type_may_not_declare_properties_or_methods); + } + } + function checkThisType(node) { + getTypeFromThisTypeNode(node); + } + function checkTypeOperator(node) { + checkGrammarTypeOperatorNode(node); + checkSourceElement(node.type); + } + function checkConditionalType(node) { + forEachChild(node, checkSourceElement); + } + function checkInferType(node) { + if (!findAncestor(node, (n) => n.parent && n.parent.kind === 195 /* ConditionalType */ && n.parent.extendsType === n)) { + grammarErrorOnNode(node, Diagnostics.infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type); + } + checkSourceElement(node.typeParameter); + const symbol = getSymbolOfDeclaration(node.typeParameter); + if (symbol.declarations && symbol.declarations.length > 1) { + const links = getSymbolLinks(symbol); + if (!links.typeParametersChecked) { + links.typeParametersChecked = true; + const typeParameter = getDeclaredTypeOfTypeParameter(symbol); + const declarations = getDeclarationsOfKind(symbol, 169 /* TypeParameter */); + if (!areTypeParametersIdentical(declarations, [typeParameter], (decl) => [decl])) { + const name = symbolToString(symbol); + for (const declaration of declarations) { + error2(declaration.name, Diagnostics.All_declarations_of_0_must_have_identical_constraints, name); + } + } + } + } + registerForUnusedIdentifiersCheck(node); + } + function checkTemplateLiteralType(node) { + for (const span of node.templateSpans) { + checkSourceElement(span.type); + const type = getTypeFromTypeNode(span.type); + checkTypeAssignableTo(type, templateConstraintType, span.type); + } + getTypeFromTypeNode(node); + } + function checkImportType(node) { + checkSourceElement(node.argument); + if (node.attributes) { + getResolutionModeOverride(node.attributes, grammarErrorOnNode); + } + checkTypeReferenceOrImport(node); + } + function checkNamedTupleMember(node) { + if (node.dotDotDotToken && node.questionToken) { + grammarErrorOnNode(node, Diagnostics.A_tuple_member_cannot_be_both_optional_and_rest); + } + if (node.type.kind === 191 /* OptionalType */) { + grammarErrorOnNode(node.type, Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type); + } + if (node.type.kind === 192 /* RestType */) { + grammarErrorOnNode(node.type, Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type); + } + checkSourceElement(node.type); + getTypeFromTypeNode(node); + } + function isPrivateWithinAmbient(node) { + return (hasEffectiveModifier(node, 2 /* Private */) || isPrivateIdentifierClassElementDeclaration(node)) && !!(node.flags & 33554432 /* Ambient */); + } + function getEffectiveDeclarationFlags(n, flagsToCheck) { + let flags = getCombinedModifierFlagsCached(n); + if (n.parent.kind !== 265 /* InterfaceDeclaration */ && n.parent.kind !== 264 /* ClassDeclaration */ && n.parent.kind !== 232 /* ClassExpression */ && n.flags & 33554432 /* Ambient */) { + const container = getEnclosingContainer(n); + if (container && container.flags & 128 /* ExportContext */ && !(flags & 128 /* Ambient */) && !(isModuleBlock(n.parent) && isModuleDeclaration(n.parent.parent) && isGlobalScopeAugmentation(n.parent.parent))) { + flags |= 32 /* Export */; + } + flags |= 128 /* Ambient */; + } + return flags & flagsToCheck; + } + function checkFunctionOrConstructorSymbol(symbol) { + addLazyDiagnostic(() => checkFunctionOrConstructorSymbolWorker(symbol)); + } + function checkFunctionOrConstructorSymbolWorker(symbol) { + function getCanonicalOverload(overloads, implementation) { + const implementationSharesContainerWithFirstOverload = implementation !== void 0 && implementation.parent === overloads[0].parent; + return implementationSharesContainerWithFirstOverload ? implementation : overloads[0]; + } + function checkFlagAgreementBetweenOverloads(overloads, implementation, flagsToCheck2, someOverloadFlags, allOverloadFlags) { + const someButNotAllOverloadFlags = someOverloadFlags ^ allOverloadFlags; + if (someButNotAllOverloadFlags !== 0) { + const canonicalFlags = getEffectiveDeclarationFlags(getCanonicalOverload(overloads, implementation), flagsToCheck2); + group(overloads, (o) => getSourceFileOfNode(o).fileName).forEach((overloadsInFile) => { + const canonicalFlagsForFile = getEffectiveDeclarationFlags(getCanonicalOverload(overloadsInFile, implementation), flagsToCheck2); + for (const o of overloadsInFile) { + const deviation = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlags; + const deviationInFile = getEffectiveDeclarationFlags(o, flagsToCheck2) ^ canonicalFlagsForFile; + if (deviationInFile & 32 /* Export */) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_exported_or_non_exported); + } else if (deviationInFile & 128 /* Ambient */) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient); + } else if (deviation & (2 /* Private */ | 4 /* Protected */)) { + error2(getNameOfDeclaration(o) || o, Diagnostics.Overload_signatures_must_all_be_public_private_or_protected); + } else if (deviation & 64 /* Abstract */) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract); + } + } + }); + } + } + function checkQuestionTokenAgreementBetweenOverloads(overloads, implementation, someHaveQuestionToken2, allHaveQuestionToken2) { + if (someHaveQuestionToken2 !== allHaveQuestionToken2) { + const canonicalHasQuestionToken = hasQuestionToken(getCanonicalOverload(overloads, implementation)); + forEach(overloads, (o) => { + const deviation = hasQuestionToken(o) !== canonicalHasQuestionToken; + if (deviation) { + error2(getNameOfDeclaration(o), Diagnostics.Overload_signatures_must_all_be_optional_or_required); + } + }); + } + } + const flagsToCheck = 32 /* Export */ | 128 /* Ambient */ | 2 /* Private */ | 4 /* Protected */ | 64 /* Abstract */; + let someNodeFlags = 0 /* None */; + let allNodeFlags = flagsToCheck; + let someHaveQuestionToken = false; + let allHaveQuestionToken = true; + let hasOverloads = false; + let bodyDeclaration; + let lastSeenNonAmbientDeclaration; + let previousDeclaration; + const declarations = symbol.declarations; + const isConstructor = (symbol.flags & 16384 /* Constructor */) !== 0; + function reportImplementationExpectedError(node) { + if (node.name && nodeIsMissing(node.name)) { + return; + } + let seen = false; + const subsequentNode = forEachChild(node.parent, (c) => { + if (seen) { + return c; + } else { + seen = c === node; + } + }); + if (subsequentNode && subsequentNode.pos === node.end) { + if (subsequentNode.kind === node.kind) { + const errorNode2 = subsequentNode.name || subsequentNode; + const subsequentName = subsequentNode.name; + if (node.name && subsequentName && // both are private identifiers + (isPrivateIdentifier(node.name) && isPrivateIdentifier(subsequentName) && node.name.escapedText === subsequentName.escapedText || // Both are computed property names + isComputedPropertyName(node.name) && isComputedPropertyName(subsequentName) && isTypeIdenticalTo(checkComputedPropertyName(node.name), checkComputedPropertyName(subsequentName)) || // Both are literal property names that are the same. + isPropertyNameLiteral(node.name) && isPropertyNameLiteral(subsequentName) && getEscapedTextOfIdentifierOrLiteral(node.name) === getEscapedTextOfIdentifierOrLiteral(subsequentName))) { + const reportError = (node.kind === 175 /* MethodDeclaration */ || node.kind === 174 /* MethodSignature */) && isStatic(node) !== isStatic(subsequentNode); + if (reportError) { + const diagnostic = isStatic(node) ? Diagnostics.Function_overload_must_be_static : Diagnostics.Function_overload_must_not_be_static; + error2(errorNode2, diagnostic); + } + return; + } + if (nodeIsPresent(subsequentNode.body)) { + error2(errorNode2, Diagnostics.Function_implementation_name_must_be_0, declarationNameToString(node.name)); + return; + } + } + } + const errorNode = node.name || node; + if (isConstructor) { + error2(errorNode, Diagnostics.Constructor_implementation_is_missing); + } else { + if (hasSyntacticModifier(node, 64 /* Abstract */)) { + error2(errorNode, Diagnostics.All_declarations_of_an_abstract_method_must_be_consecutive); + } else { + error2(errorNode, Diagnostics.Function_implementation_is_missing_or_not_immediately_following_the_declaration); + } + } + } + let duplicateFunctionDeclaration = false; + let multipleConstructorImplementation = false; + let hasNonAmbientClass = false; + const functionDeclarations = []; + if (declarations) { + for (const current of declarations) { + const node = current; + const inAmbientContext = node.flags & 33554432 /* Ambient */; + const inAmbientContextOrInterface = node.parent && (node.parent.kind === 265 /* InterfaceDeclaration */ || node.parent.kind === 188 /* TypeLiteral */) || inAmbientContext; + if (inAmbientContextOrInterface) { + previousDeclaration = void 0; + } + if ((node.kind === 264 /* ClassDeclaration */ || node.kind === 232 /* ClassExpression */) && !inAmbientContext) { + hasNonAmbientClass = true; + } + if (node.kind === 263 /* FunctionDeclaration */ || node.kind === 175 /* MethodDeclaration */ || node.kind === 174 /* MethodSignature */ || node.kind === 177 /* Constructor */) { + functionDeclarations.push(node); + const currentNodeFlags = getEffectiveDeclarationFlags(node, flagsToCheck); + someNodeFlags |= currentNodeFlags; + allNodeFlags &= currentNodeFlags; + someHaveQuestionToken = someHaveQuestionToken || hasQuestionToken(node); + allHaveQuestionToken = allHaveQuestionToken && hasQuestionToken(node); + const bodyIsPresent = nodeIsPresent(node.body); + if (bodyIsPresent && bodyDeclaration) { + if (isConstructor) { + multipleConstructorImplementation = true; + } else { + duplicateFunctionDeclaration = true; + } + } else if ((previousDeclaration == null ? void 0 : previousDeclaration.parent) === node.parent && previousDeclaration.end !== node.pos) { + reportImplementationExpectedError(previousDeclaration); + } + if (bodyIsPresent) { + if (!bodyDeclaration) { + bodyDeclaration = node; + } + } else { + hasOverloads = true; + } + previousDeclaration = node; + if (!inAmbientContextOrInterface) { + lastSeenNonAmbientDeclaration = node; + } + } + if (isInJSFile(current) && isFunctionLike(current) && current.jsDoc) { + hasOverloads = length(getJSDocOverloadTags(current)) > 0; + } + } + } + if (multipleConstructorImplementation) { + forEach(functionDeclarations, (declaration) => { + error2(declaration, Diagnostics.Multiple_constructor_implementations_are_not_allowed); + }); + } + if (duplicateFunctionDeclaration) { + forEach(functionDeclarations, (declaration) => { + error2(getNameOfDeclaration(declaration) || declaration, Diagnostics.Duplicate_function_implementation); + }); + } + if (hasNonAmbientClass && !isConstructor && symbol.flags & 16 /* Function */ && declarations) { + const relatedDiagnostics = filter(declarations, (d) => d.kind === 264 /* ClassDeclaration */).map((d) => createDiagnosticForNode(d, Diagnostics.Consider_adding_a_declare_modifier_to_this_class)); + forEach(declarations, (declaration) => { + const diagnostic = declaration.kind === 264 /* ClassDeclaration */ ? Diagnostics.Class_declaration_cannot_implement_overload_list_for_0 : declaration.kind === 263 /* FunctionDeclaration */ ? Diagnostics.Function_with_bodies_can_only_merge_with_classes_that_are_ambient : void 0; + if (diagnostic) { + addRelatedInfo( + error2(getNameOfDeclaration(declaration) || declaration, diagnostic, symbolName(symbol)), + ...relatedDiagnostics + ); + } + }); + } + if (lastSeenNonAmbientDeclaration && !lastSeenNonAmbientDeclaration.body && !hasSyntacticModifier(lastSeenNonAmbientDeclaration, 64 /* Abstract */) && !lastSeenNonAmbientDeclaration.questionToken) { + reportImplementationExpectedError(lastSeenNonAmbientDeclaration); + } + if (hasOverloads) { + if (declarations) { + checkFlagAgreementBetweenOverloads(declarations, bodyDeclaration, flagsToCheck, someNodeFlags, allNodeFlags); + checkQuestionTokenAgreementBetweenOverloads(declarations, bodyDeclaration, someHaveQuestionToken, allHaveQuestionToken); + } + if (bodyDeclaration) { + const signatures = getSignaturesOfSymbol(symbol); + const bodySignature = getSignatureFromDeclaration(bodyDeclaration); + for (const signature of signatures) { + if (!isImplementationCompatibleWithOverload(bodySignature, signature)) { + const errorNode = signature.declaration && isJSDocSignature(signature.declaration) ? signature.declaration.parent.tagName : signature.declaration; + addRelatedInfo( + error2(errorNode, Diagnostics.This_overload_signature_is_not_compatible_with_its_implementation_signature), + createDiagnosticForNode(bodyDeclaration, Diagnostics.The_implementation_signature_is_declared_here) + ); + break; + } + } + } + } + } + function checkExportsOnMergedDeclarations(node) { + addLazyDiagnostic(() => checkExportsOnMergedDeclarationsWorker(node)); + } + function checkExportsOnMergedDeclarationsWorker(node) { + let symbol = node.localSymbol; + if (!symbol) { + symbol = getSymbolOfDeclaration(node); + if (!symbol.exportSymbol) { + return; + } + } + if (getDeclarationOfKind(symbol, node.kind) !== node) { + return; + } + let exportedDeclarationSpaces = 0 /* None */; + let nonExportedDeclarationSpaces = 0 /* None */; + let defaultExportedDeclarationSpaces = 0 /* None */; + for (const d of symbol.declarations) { + const declarationSpaces = getDeclarationSpaces(d); + const effectiveDeclarationFlags = getEffectiveDeclarationFlags(d, 32 /* Export */ | 2048 /* Default */); + if (effectiveDeclarationFlags & 32 /* Export */) { + if (effectiveDeclarationFlags & 2048 /* Default */) { + defaultExportedDeclarationSpaces |= declarationSpaces; + } else { + exportedDeclarationSpaces |= declarationSpaces; + } + } else { + nonExportedDeclarationSpaces |= declarationSpaces; + } + } + const nonDefaultExportedDeclarationSpaces = exportedDeclarationSpaces | nonExportedDeclarationSpaces; + const commonDeclarationSpacesForExportsAndLocals = exportedDeclarationSpaces & nonExportedDeclarationSpaces; + const commonDeclarationSpacesForDefaultAndNonDefault = defaultExportedDeclarationSpaces & nonDefaultExportedDeclarationSpaces; + if (commonDeclarationSpacesForExportsAndLocals || commonDeclarationSpacesForDefaultAndNonDefault) { + for (const d of symbol.declarations) { + const declarationSpaces = getDeclarationSpaces(d); + const name = getNameOfDeclaration(d); + if (declarationSpaces & commonDeclarationSpacesForDefaultAndNonDefault) { + error2(name, Diagnostics.Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_default_0_declaration_instead, declarationNameToString(name)); + } else if (declarationSpaces & commonDeclarationSpacesForExportsAndLocals) { + error2(name, Diagnostics.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local, declarationNameToString(name)); + } + } + } + function getDeclarationSpaces(decl) { + let d = decl; + switch (d.kind) { + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + // A jsdoc typedef and callback are, by definition, type aliases. + // falls through + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + return 2 /* ExportType */; + case 268 /* ModuleDeclaration */: + return isAmbientModule(d) || getModuleInstanceState(d) !== 0 /* NonInstantiated */ ? 4 /* ExportNamespace */ | 1 /* ExportValue */ : 4 /* ExportNamespace */; + case 264 /* ClassDeclaration */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + return 2 /* ExportType */ | 1 /* ExportValue */; + case 308 /* SourceFile */: + return 2 /* ExportType */ | 1 /* ExportValue */ | 4 /* ExportNamespace */; + case 278 /* ExportAssignment */: + case 227 /* BinaryExpression */: + const node2 = d; + const expression = isExportAssignment(node2) ? node2.expression : node2.right; + if (!isEntityNameExpression(expression)) { + return 1 /* ExportValue */; + } + d = expression; + // The below options all declare an Alias, which is allowed to merge with other values within the importing module. + // falls through + case 272 /* ImportEqualsDeclaration */: + case 275 /* NamespaceImport */: + case 274 /* ImportClause */: + let result = 0 /* None */; + const target = resolveAlias(getSymbolOfDeclaration(d)); + forEach(target.declarations, (d2) => { + result |= getDeclarationSpaces(d2); + }); + return result; + case 261 /* VariableDeclaration */: + case 209 /* BindingElement */: + case 263 /* FunctionDeclaration */: + case 277 /* ImportSpecifier */: + // https://github.com/Microsoft/TypeScript/pull/7591 + case 80 /* Identifier */: + return 1 /* ExportValue */; + case 174 /* MethodSignature */: + case 172 /* PropertySignature */: + return 2 /* ExportType */; + default: + return Debug.failBadSyntaxKind(d); + } + } + } + function getAwaitedTypeOfPromise(type, errorNode, diagnosticMessage, ...args) { + const promisedType = getPromisedTypeOfPromise(type, errorNode); + return promisedType && getAwaitedType(promisedType, errorNode, diagnosticMessage, ...args); + } + function getPromisedTypeOfPromise(type, errorNode, thisTypeForErrorOut) { + if (isTypeAny(type)) { + return void 0; + } + const typeAsPromise = type; + if (typeAsPromise.promisedTypeOfPromise) { + return typeAsPromise.promisedTypeOfPromise; + } + if (isReferenceToType2(type, getGlobalPromiseType( + /*reportErrors*/ + false + ))) { + return typeAsPromise.promisedTypeOfPromise = getTypeArguments(type)[0]; + } + if (allTypesAssignableToKind(getBaseConstraintOrType(type), 402784252 /* Primitive */ | 131072 /* Never */)) { + return void 0; + } + const thenFunction = getTypeOfPropertyOfType(type, "then"); + if (isTypeAny(thenFunction)) { + return void 0; + } + const thenSignatures = thenFunction ? getSignaturesOfType(thenFunction, 0 /* Call */) : emptyArray; + if (thenSignatures.length === 0) { + if (errorNode) { + error2(errorNode, Diagnostics.A_promise_must_have_a_then_method); + } + return void 0; + } + let thisTypeForError; + let candidates; + for (const thenSignature of thenSignatures) { + const thisType = getThisTypeOfSignature(thenSignature); + if (thisType && thisType !== voidType && !isTypeRelatedTo(type, thisType, subtypeRelation)) { + thisTypeForError = thisType; + } else { + candidates = append(candidates, thenSignature); + } + } + if (!candidates) { + Debug.assertIsDefined(thisTypeForError); + if (thisTypeForErrorOut) { + thisTypeForErrorOut.value = thisTypeForError; + } + if (errorNode) { + error2(errorNode, Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1, typeToString(type), typeToString(thisTypeForError)); + } + return void 0; + } + const onfulfilledParameterType = getTypeWithFacts(getUnionType(map(candidates, getTypeOfFirstParameterOfSignature)), 2097152 /* NEUndefinedOrNull */); + if (isTypeAny(onfulfilledParameterType)) { + return void 0; + } + const onfulfilledParameterSignatures = getSignaturesOfType(onfulfilledParameterType, 0 /* Call */); + if (onfulfilledParameterSignatures.length === 0) { + if (errorNode) { + error2(errorNode, Diagnostics.The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback); + } + return void 0; + } + return typeAsPromise.promisedTypeOfPromise = getUnionType(map(onfulfilledParameterSignatures, getTypeOfFirstParameterOfSignature), 2 /* Subtype */); + } + function checkAwaitedType(type, withAlias, errorNode, diagnosticMessage, ...args) { + const awaitedType = withAlias ? getAwaitedType(type, errorNode, diagnosticMessage, ...args) : getAwaitedTypeNoAlias(type, errorNode, diagnosticMessage, ...args); + return awaitedType || errorType; + } + function isThenableType(type) { + if (allTypesAssignableToKind(getBaseConstraintOrType(type), 402784252 /* Primitive */ | 131072 /* Never */)) { + return false; + } + const thenFunction = getTypeOfPropertyOfType(type, "then"); + return !!thenFunction && getSignaturesOfType(getTypeWithFacts(thenFunction, 2097152 /* NEUndefinedOrNull */), 0 /* Call */).length > 0; + } + function isAwaitedTypeInstantiation(type) { + var _a; + if (type.flags & 16777216 /* Conditional */) { + const awaitedSymbol = getGlobalAwaitedSymbol( + /*reportErrors*/ + false + ); + return !!awaitedSymbol && type.aliasSymbol === awaitedSymbol && ((_a = type.aliasTypeArguments) == null ? void 0 : _a.length) === 1; + } + return false; + } + function unwrapAwaitedType(type) { + return type.flags & 1048576 /* Union */ ? mapType(type, unwrapAwaitedType) : isAwaitedTypeInstantiation(type) ? type.aliasTypeArguments[0] : type; + } + function isAwaitedTypeNeeded(type) { + if (isTypeAny(type) || isAwaitedTypeInstantiation(type)) { + return false; + } + if (isGenericObjectType(type)) { + const baseConstraint = getBaseConstraintOfType(type); + if (baseConstraint ? baseConstraint.flags & 3 /* AnyOrUnknown */ || isEmptyObjectType(baseConstraint) || someType(baseConstraint, isThenableType) : maybeTypeOfKind(type, 8650752 /* TypeVariable */)) { + return true; + } + } + return false; + } + function tryCreateAwaitedType(type) { + const awaitedSymbol = getGlobalAwaitedSymbol( + /*reportErrors*/ + true + ); + if (awaitedSymbol) { + return getTypeAliasInstantiation(awaitedSymbol, [unwrapAwaitedType(type)]); + } + return void 0; + } + function createAwaitedTypeIfNeeded(type) { + if (isAwaitedTypeNeeded(type)) { + return tryCreateAwaitedType(type) ?? type; + } + Debug.assert(isAwaitedTypeInstantiation(type) || getPromisedTypeOfPromise(type) === void 0, "type provided should not be a non-generic 'promise'-like."); + return type; + } + function getAwaitedType(type, errorNode, diagnosticMessage, ...args) { + const awaitedType = getAwaitedTypeNoAlias(type, errorNode, diagnosticMessage, ...args); + return awaitedType && createAwaitedTypeIfNeeded(awaitedType); + } + function getAwaitedTypeNoAlias(type, errorNode, diagnosticMessage, ...args) { + if (isTypeAny(type)) { + return type; + } + if (isAwaitedTypeInstantiation(type)) { + return type; + } + const typeAsAwaitable = type; + if (typeAsAwaitable.awaitedTypeOfType) { + return typeAsAwaitable.awaitedTypeOfType; + } + if (type.flags & 1048576 /* Union */) { + if (awaitedTypeStack.lastIndexOf(type.id) >= 0) { + if (errorNode) { + error2(errorNode, Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method); + } + return void 0; + } + const mapper = errorNode ? (constituentType) => getAwaitedTypeNoAlias(constituentType, errorNode, diagnosticMessage, ...args) : getAwaitedTypeNoAlias; + awaitedTypeStack.push(type.id); + const mapped = mapType(type, mapper); + awaitedTypeStack.pop(); + return typeAsAwaitable.awaitedTypeOfType = mapped; + } + if (isAwaitedTypeNeeded(type)) { + return typeAsAwaitable.awaitedTypeOfType = type; + } + const thisTypeForErrorOut = { value: void 0 }; + const promisedType = getPromisedTypeOfPromise( + type, + /*errorNode*/ + void 0, + thisTypeForErrorOut + ); + if (promisedType) { + if (type.id === promisedType.id || awaitedTypeStack.lastIndexOf(promisedType.id) >= 0) { + if (errorNode) { + error2(errorNode, Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method); + } + return void 0; + } + awaitedTypeStack.push(type.id); + const awaitedType = getAwaitedTypeNoAlias(promisedType, errorNode, diagnosticMessage, ...args); + awaitedTypeStack.pop(); + if (!awaitedType) { + return void 0; + } + return typeAsAwaitable.awaitedTypeOfType = awaitedType; + } + if (isThenableType(type)) { + if (errorNode) { + Debug.assertIsDefined(diagnosticMessage); + let chain; + if (thisTypeForErrorOut.value) { + chain = chainDiagnosticMessages(chain, Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1, typeToString(type), typeToString(thisTypeForErrorOut.value)); + } + chain = chainDiagnosticMessages(chain, diagnosticMessage, ...args); + diagnostics.add(createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(errorNode), errorNode, chain)); + } + return void 0; + } + return typeAsAwaitable.awaitedTypeOfType = type; + } + function checkAsyncFunctionReturnType(node, returnTypeNode, returnTypeErrorLocation) { + const returnType = getTypeFromTypeNode(returnTypeNode); + if (languageVersion >= 2 /* ES2015 */) { + if (isErrorType(returnType)) { + return; + } + const globalPromiseType = getGlobalPromiseType( + /*reportErrors*/ + true + ); + if (globalPromiseType !== emptyGenericType && !isReferenceToType2(returnType, globalPromiseType)) { + reportErrorForInvalidReturnType(Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0, returnTypeNode, returnTypeErrorLocation, typeToString(getAwaitedTypeNoAlias(returnType) || voidType)); + return; + } + } else { + markLinkedReferences(node, 5 /* AsyncFunction */); + if (isErrorType(returnType)) { + return; + } + const promiseConstructorName = getEntityNameFromTypeNode(returnTypeNode); + if (promiseConstructorName === void 0) { + reportErrorForInvalidReturnType(Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, returnTypeNode, returnTypeErrorLocation, typeToString(returnType)); + return; + } + const promiseConstructorSymbol = resolveEntityName( + promiseConstructorName, + 111551 /* Value */, + /*ignoreErrors*/ + true + ); + const promiseConstructorType = promiseConstructorSymbol ? getTypeOfSymbol(promiseConstructorSymbol) : errorType; + if (isErrorType(promiseConstructorType)) { + if (promiseConstructorName.kind === 80 /* Identifier */ && promiseConstructorName.escapedText === "Promise" && getTargetType(returnType) === getGlobalPromiseType( + /*reportErrors*/ + false + )) { + error2(returnTypeErrorLocation, Diagnostics.An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_the_Promise_constructor_or_include_ES2015_in_your_lib_option); + } else { + reportErrorForInvalidReturnType(Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, returnTypeNode, returnTypeErrorLocation, entityNameToString(promiseConstructorName)); + } + return; + } + const globalPromiseConstructorLikeType = getGlobalPromiseConstructorLikeType( + /*reportErrors*/ + true + ); + if (globalPromiseConstructorLikeType === emptyObjectType) { + reportErrorForInvalidReturnType(Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compatible_constructor_value, returnTypeNode, returnTypeErrorLocation, entityNameToString(promiseConstructorName)); + return; + } + const headMessage = Diagnostics.Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compatible_constructor_value; + const errorInfo = () => returnTypeNode === returnTypeErrorLocation ? void 0 : chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type + ); + if (!checkTypeAssignableTo(promiseConstructorType, globalPromiseConstructorLikeType, returnTypeErrorLocation, headMessage, errorInfo)) { + return; + } + const rootName = promiseConstructorName && getFirstIdentifier(promiseConstructorName); + const collidingSymbol = getSymbol2(node.locals, rootName.escapedText, 111551 /* Value */); + if (collidingSymbol) { + error2(collidingSymbol.valueDeclaration, Diagnostics.Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions, idText(rootName), entityNameToString(promiseConstructorName)); + return; + } + } + checkAwaitedType( + returnType, + /*withAlias*/ + false, + node, + Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + ); + function reportErrorForInvalidReturnType(message, returnTypeNode2, returnTypeErrorLocation2, typeName) { + if (returnTypeNode2 === returnTypeErrorLocation2) { + error2(returnTypeErrorLocation2, message, typeName); + } else { + const diag2 = error2(returnTypeErrorLocation2, Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type); + addRelatedInfo(diag2, createDiagnosticForNode(returnTypeNode2, message, typeName)); + } + } + } + function checkGrammarDecorator(decorator) { + const sourceFile = getSourceFileOfNode(decorator); + if (!hasParseDiagnostics(sourceFile)) { + let node = decorator.expression; + if (isParenthesizedExpression(node)) { + return false; + } + let canHaveCallExpression = true; + let errorNode; + while (true) { + if (isExpressionWithTypeArguments(node) || isNonNullExpression(node)) { + node = node.expression; + continue; + } + if (isCallExpression(node)) { + if (!canHaveCallExpression) { + errorNode = node; + } + if (node.questionDotToken) { + errorNode = node.questionDotToken; + } + node = node.expression; + canHaveCallExpression = false; + continue; + } + if (isPropertyAccessExpression(node)) { + if (node.questionDotToken) { + errorNode = node.questionDotToken; + } + node = node.expression; + canHaveCallExpression = false; + continue; + } + if (!isIdentifier(node)) { + errorNode = node; + } + break; + } + if (errorNode) { + addRelatedInfo( + error2(decorator.expression, Diagnostics.Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator), + createDiagnosticForNode(errorNode, Diagnostics.Invalid_syntax_in_decorator) + ); + return true; + } + } + return false; + } + function checkDecorator(node) { + checkGrammarDecorator(node); + const signature = getResolvedSignature(node); + checkDeprecatedSignature(signature, node); + const returnType = getReturnTypeOfSignature(signature); + if (returnType.flags & 1 /* Any */) { + return; + } + const decoratorSignature = getDecoratorCallSignature(node); + if (!(decoratorSignature == null ? void 0 : decoratorSignature.resolvedReturnType)) return; + let headMessage; + const expectedReturnType = decoratorSignature.resolvedReturnType; + switch (node.parent.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + headMessage = Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1; + break; + case 173 /* PropertyDeclaration */: + if (!legacyDecorators) { + headMessage = Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1; + break; + } + // falls through + case 170 /* Parameter */: + headMessage = Diagnostics.Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any; + break; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + headMessage = Diagnostics.Decorator_function_return_type_0_is_not_assignable_to_type_1; + break; + default: + return Debug.failBadSyntaxKind(node.parent); + } + checkTypeAssignableTo(returnType, expectedReturnType, node.expression, headMessage); + } + function createCallSignature(typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount = parameters.length, flags = 0 /* None */) { + const decl = factory.createFunctionTypeNode( + /*typeParameters*/ + void 0, + emptyArray, + factory.createKeywordTypeNode(133 /* AnyKeyword */) + ); + return createSignature(decl, typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, flags); + } + function createFunctionType(typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, flags) { + const signature = createCallSignature(typeParameters, thisParameter, parameters, returnType, typePredicate, minArgumentCount, flags); + return getOrCreateTypeFromSignature(signature); + } + function createGetterFunctionType(type) { + return createFunctionType( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + emptyArray, + type + ); + } + function createSetterFunctionType(type) { + const valueParam = createParameter2("value", type); + return createFunctionType( + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + [valueParam], + voidType + ); + } + function getEntityNameForDecoratorMetadata(node) { + if (node) { + switch (node.kind) { + case 194 /* IntersectionType */: + case 193 /* UnionType */: + return getEntityNameForDecoratorMetadataFromTypeList(node.types); + case 195 /* ConditionalType */: + return getEntityNameForDecoratorMetadataFromTypeList([node.trueType, node.falseType]); + case 197 /* ParenthesizedType */: + case 203 /* NamedTupleMember */: + return getEntityNameForDecoratorMetadata(node.type); + case 184 /* TypeReference */: + return node.typeName; + } + } + } + function getEntityNameForDecoratorMetadataFromTypeList(types) { + let commonEntityName; + for (let typeNode of types) { + while (typeNode.kind === 197 /* ParenthesizedType */ || typeNode.kind === 203 /* NamedTupleMember */) { + typeNode = typeNode.type; + } + if (typeNode.kind === 146 /* NeverKeyword */) { + continue; + } + if (!strictNullChecks && (typeNode.kind === 202 /* LiteralType */ && typeNode.literal.kind === 106 /* NullKeyword */ || typeNode.kind === 157 /* UndefinedKeyword */)) { + continue; + } + const individualEntityName = getEntityNameForDecoratorMetadata(typeNode); + if (!individualEntityName) { + return void 0; + } + if (commonEntityName) { + if (!isIdentifier(commonEntityName) || !isIdentifier(individualEntityName) || commonEntityName.escapedText !== individualEntityName.escapedText) { + return void 0; + } + } else { + commonEntityName = individualEntityName; + } + } + return commonEntityName; + } + function getParameterTypeNodeForDecoratorCheck(node) { + const typeNode = getEffectiveTypeAnnotationNode(node); + return isRestParameter(node) ? getRestParameterElementType(typeNode) : typeNode; + } + function checkDecorators(node) { + if (!canHaveDecorators(node) || !hasDecorators(node) || !node.modifiers || !nodeCanBeDecorated(legacyDecorators, node, node.parent, node.parent.parent)) { + return; + } + const firstDecorator = find(node.modifiers, isDecorator); + if (!firstDecorator) { + return; + } + if (legacyDecorators) { + checkExternalEmitHelpers(firstDecorator, 8 /* Decorate */); + if (node.kind === 170 /* Parameter */) { + checkExternalEmitHelpers(firstDecorator, 32 /* Param */); + } + } else if (languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators) { + checkExternalEmitHelpers(firstDecorator, 8 /* ESDecorateAndRunInitializers */); + if (isClassDeclaration(node)) { + if (!node.name) { + checkExternalEmitHelpers(firstDecorator, 4194304 /* SetFunctionName */); + } else { + const member = getFirstTransformableStaticClassElement(node); + if (member) { + checkExternalEmitHelpers(firstDecorator, 4194304 /* SetFunctionName */); + } + } + } else if (!isClassExpression(node)) { + if (isPrivateIdentifier(node.name) && (isMethodDeclaration(node) || isAccessor(node) || isAutoAccessorPropertyDeclaration(node))) { + checkExternalEmitHelpers(firstDecorator, 4194304 /* SetFunctionName */); + } + if (isComputedPropertyName(node.name)) { + checkExternalEmitHelpers(firstDecorator, 8388608 /* PropKey */); + } + } + } + markLinkedReferences(node, 8 /* Decorator */); + for (const modifier of node.modifiers) { + if (isDecorator(modifier)) { + checkDecorator(modifier); + } + } + } + function checkFunctionDeclaration(node) { + addLazyDiagnostic(checkFunctionDeclarationDiagnostics); + function checkFunctionDeclarationDiagnostics() { + checkFunctionOrMethodDeclaration(node); + checkGrammarForGenerator(node); + checkCollisionsForDeclarationName(node, node.name); + } + } + function checkJSDocTypeAliasTag(node) { + if (!node.typeExpression) { + error2(node.name, Diagnostics.JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags); + } + if (node.name) { + checkTypeNameIsReserved(node.name, Diagnostics.Type_alias_name_cannot_be_0); + } + checkSourceElement(node.typeExpression); + checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); + } + function checkJSDocTemplateTag(node) { + checkSourceElement(node.constraint); + for (const tp of node.typeParameters) { + checkSourceElement(tp); + } + } + function checkJSDocTypeTag(node) { + checkSourceElement(node.typeExpression); + } + function checkJSDocSatisfiesTag(node) { + checkSourceElement(node.typeExpression); + const host2 = getEffectiveJSDocHost(node); + if (host2) { + const tags = getAllJSDocTags(host2, isJSDocSatisfiesTag); + if (length(tags) > 1) { + for (let i = 1; i < length(tags); i++) { + const tagName = tags[i].tagName; + error2(tagName, Diagnostics._0_tag_already_specified, idText(tagName)); + } + } + } + } + function checkJSDocLinkLikeTag(node) { + if (node.name) { + resolveJSDocMemberName( + node.name, + /*ignoreErrors*/ + true + ); + } + } + function checkJSDocParameterTag(node) { + checkSourceElement(node.typeExpression); + } + function checkJSDocPropertyTag(node) { + checkSourceElement(node.typeExpression); + } + function checkJSDocFunctionType(node) { + addLazyDiagnostic(checkJSDocFunctionTypeImplicitAny); + checkSignatureDeclaration(node); + function checkJSDocFunctionTypeImplicitAny() { + if (!node.type && !isJSDocConstructSignature(node)) { + reportImplicitAny(node, anyType); + } + } + } + function checkJSDocThisTag(node) { + const host2 = getEffectiveJSDocHost(node); + if (host2 && isArrowFunction(host2)) { + error2(node.tagName, Diagnostics.An_arrow_function_cannot_have_a_this_parameter); + } + } + function checkJSDocImportTag(node) { + checkImportAttributes(node); + } + function checkJSDocImplementsTag(node) { + const classLike = getEffectiveJSDocHost(node); + if (!classLike || !isClassDeclaration(classLike) && !isClassExpression(classLike)) { + error2(classLike, Diagnostics.JSDoc_0_is_not_attached_to_a_class, idText(node.tagName)); + } + } + function checkJSDocAugmentsTag(node) { + const classLike = getEffectiveJSDocHost(node); + if (!classLike || !isClassDeclaration(classLike) && !isClassExpression(classLike)) { + error2(classLike, Diagnostics.JSDoc_0_is_not_attached_to_a_class, idText(node.tagName)); + return; + } + const augmentsTags = getJSDocTags(classLike).filter(isJSDocAugmentsTag); + Debug.assert(augmentsTags.length > 0); + if (augmentsTags.length > 1) { + error2(augmentsTags[1], Diagnostics.Class_declarations_cannot_have_more_than_one_augments_or_extends_tag); + } + const name = getIdentifierFromEntityNameExpression(node.class.expression); + const extend2 = getClassExtendsHeritageElement(classLike); + if (extend2) { + const className = getIdentifierFromEntityNameExpression(extend2.expression); + if (className && name.escapedText !== className.escapedText) { + error2(name, Diagnostics.JSDoc_0_1_does_not_match_the_extends_2_clause, idText(node.tagName), idText(name), idText(className)); + } + } + } + function checkJSDocAccessibilityModifiers(node) { + const host2 = getJSDocHost(node); + if (host2 && isPrivateIdentifierClassElementDeclaration(host2)) { + error2(node, Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier); + } + } + function getIdentifierFromEntityNameExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return node; + case 212 /* PropertyAccessExpression */: + return node.name; + default: + return void 0; + } + } + function checkFunctionOrMethodDeclaration(node) { + var _a; + checkDecorators(node); + checkSignatureDeclaration(node); + const functionFlags = getFunctionFlags(node); + if (node.name && node.name.kind === 168 /* ComputedPropertyName */) { + checkComputedPropertyName(node.name); + } + if (hasBindableName(node)) { + const symbol = getSymbolOfDeclaration(node); + const localSymbol = node.localSymbol || symbol; + const firstDeclaration = (_a = localSymbol.declarations) == null ? void 0 : _a.find( + // Get first non javascript function declaration + (declaration) => declaration.kind === node.kind && !(declaration.flags & 524288 /* JavaScriptFile */) + ); + if (node === firstDeclaration) { + checkFunctionOrConstructorSymbol(localSymbol); + } + if (symbol.parent) { + checkFunctionOrConstructorSymbol(symbol); + } + } + const body = node.kind === 174 /* MethodSignature */ ? void 0 : node.body; + checkSourceElement(body); + checkAllCodePathsInNonVoidFunctionReturnOrThrow(node, getReturnTypeFromAnnotation(node)); + addLazyDiagnostic(checkFunctionOrMethodDeclarationDiagnostics); + if (isInJSFile(node)) { + const typeTag = getJSDocTypeTag(node); + if (typeTag && typeTag.typeExpression && !getContextualCallSignature(getTypeFromTypeNode(typeTag.typeExpression), node)) { + error2(typeTag.typeExpression.type, Diagnostics.The_type_of_a_function_declaration_must_match_the_function_s_signature); + } + } + function checkFunctionOrMethodDeclarationDiagnostics() { + if (!getEffectiveReturnTypeNode(node)) { + if (nodeIsMissing(body) && !isPrivateWithinAmbient(node)) { + reportImplicitAny(node, anyType); + } + if (functionFlags & 1 /* Generator */ && nodeIsPresent(body)) { + getReturnTypeOfSignature(getSignatureFromDeclaration(node)); + } + } + } + } + function registerForUnusedIdentifiersCheck(node) { + addLazyDiagnostic(registerForUnusedIdentifiersCheckDiagnostics); + function registerForUnusedIdentifiersCheckDiagnostics() { + const sourceFile = getSourceFileOfNode(node); + let potentiallyUnusedIdentifiers = allPotentiallyUnusedIdentifiers.get(sourceFile.path); + if (!potentiallyUnusedIdentifiers) { + potentiallyUnusedIdentifiers = []; + allPotentiallyUnusedIdentifiers.set(sourceFile.path, potentiallyUnusedIdentifiers); + } + potentiallyUnusedIdentifiers.push(node); + } + } + function checkUnusedIdentifiers(potentiallyUnusedIdentifiers, addDiagnostic) { + for (const node of potentiallyUnusedIdentifiers) { + switch (node.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + checkUnusedClassMembers(node, addDiagnostic); + checkUnusedTypeParameters(node, addDiagnostic); + break; + case 308 /* SourceFile */: + case 268 /* ModuleDeclaration */: + case 242 /* Block */: + case 270 /* CaseBlock */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + checkUnusedLocalsAndParameters(node, addDiagnostic); + break; + case 177 /* Constructor */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + if (node.body) { + checkUnusedLocalsAndParameters(node, addDiagnostic); + } + checkUnusedTypeParameters(node, addDiagnostic); + break; + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 266 /* TypeAliasDeclaration */: + case 265 /* InterfaceDeclaration */: + checkUnusedTypeParameters(node, addDiagnostic); + break; + case 196 /* InferType */: + checkUnusedInferTypeParameter(node, addDiagnostic); + break; + default: + Debug.assertNever(node, "Node should not have been registered for unused identifiers check"); + } + } + } + function errorUnusedLocal(declaration, name, addDiagnostic) { + const node = getNameOfDeclaration(declaration) || declaration; + const message = isTypeDeclaration(declaration) ? Diagnostics._0_is_declared_but_never_used : Diagnostics._0_is_declared_but_its_value_is_never_read; + addDiagnostic(declaration, 0 /* Local */, createDiagnosticForNode(node, message, name)); + } + function isIdentifierThatStartsWithUnderscore(node) { + return isIdentifier(node) && idText(node).charCodeAt(0) === 95 /* _ */; + } + function checkUnusedClassMembers(node, addDiagnostic) { + for (const member of node.members) { + switch (member.kind) { + case 175 /* MethodDeclaration */: + case 173 /* PropertyDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + if (member.kind === 179 /* SetAccessor */ && member.symbol.flags & 32768 /* GetAccessor */) { + break; + } + const symbol = getSymbolOfDeclaration(member); + if (!symbol.isReferenced && (hasEffectiveModifier(member, 2 /* Private */) || isNamedDeclaration(member) && isPrivateIdentifier(member.name)) && !(member.flags & 33554432 /* Ambient */)) { + addDiagnostic(member, 0 /* Local */, createDiagnosticForNode(member.name, Diagnostics._0_is_declared_but_its_value_is_never_read, symbolToString(symbol))); + } + break; + case 177 /* Constructor */: + for (const parameter of member.parameters) { + if (!parameter.symbol.isReferenced && hasSyntacticModifier(parameter, 2 /* Private */)) { + addDiagnostic(parameter, 0 /* Local */, createDiagnosticForNode(parameter.name, Diagnostics.Property_0_is_declared_but_its_value_is_never_read, symbolName(parameter.symbol))); + } + } + break; + case 182 /* IndexSignature */: + case 241 /* SemicolonClassElement */: + case 176 /* ClassStaticBlockDeclaration */: + break; + default: + Debug.fail("Unexpected class member"); + } + } + } + function checkUnusedInferTypeParameter(node, addDiagnostic) { + const { typeParameter } = node; + if (isTypeParameterUnused(typeParameter)) { + addDiagnostic(node, 1 /* Parameter */, createDiagnosticForNode(node, Diagnostics._0_is_declared_but_its_value_is_never_read, idText(typeParameter.name))); + } + } + function checkUnusedTypeParameters(node, addDiagnostic) { + const declarations = getSymbolOfDeclaration(node).declarations; + if (!declarations || last(declarations) !== node) return; + const typeParameters = getEffectiveTypeParameterDeclarations(node); + const seenParentsWithEveryUnused = /* @__PURE__ */ new Set(); + for (const typeParameter of typeParameters) { + if (!isTypeParameterUnused(typeParameter)) continue; + const name = idText(typeParameter.name); + const { parent: parent2 } = typeParameter; + if (parent2.kind !== 196 /* InferType */ && parent2.typeParameters.every(isTypeParameterUnused)) { + if (tryAddToSet(seenParentsWithEveryUnused, parent2)) { + const sourceFile = getSourceFileOfNode(parent2); + const range = isJSDocTemplateTag(parent2) ? rangeOfNode(parent2) : rangeOfTypeParameters(sourceFile, parent2.typeParameters); + const only = parent2.typeParameters.length === 1; + const messageAndArg = only ? [Diagnostics._0_is_declared_but_its_value_is_never_read, name] : [Diagnostics.All_type_parameters_are_unused]; + addDiagnostic(typeParameter, 1 /* Parameter */, createFileDiagnostic(sourceFile, range.pos, range.end - range.pos, ...messageAndArg)); + } + } else { + addDiagnostic(typeParameter, 1 /* Parameter */, createDiagnosticForNode(typeParameter, Diagnostics._0_is_declared_but_its_value_is_never_read, name)); + } + } + } + function isTypeParameterUnused(typeParameter) { + return !(getMergedSymbol(typeParameter.symbol).isReferenced & 262144 /* TypeParameter */) && !isIdentifierThatStartsWithUnderscore(typeParameter.name); + } + function addToGroup(map2, key, value, getKey) { + const keyString = String(getKey(key)); + const group2 = map2.get(keyString); + if (group2) { + group2[1].push(value); + } else { + map2.set(keyString, [key, [value]]); + } + } + function tryGetRootParameterDeclaration(node) { + return tryCast(getRootDeclaration(node), isParameter); + } + function isValidUnusedLocalDeclaration(declaration) { + if (isBindingElement(declaration)) { + if (isObjectBindingPattern(declaration.parent)) { + return !!(declaration.propertyName && isIdentifierThatStartsWithUnderscore(declaration.name)); + } + return isIdentifierThatStartsWithUnderscore(declaration.name); + } + return isAmbientModule(declaration) || (isVariableDeclaration(declaration) && isForInOrOfStatement(declaration.parent.parent) || isImportedDeclaration(declaration)) && isIdentifierThatStartsWithUnderscore(declaration.name); + } + function checkUnusedLocalsAndParameters(nodeWithLocals, addDiagnostic) { + const unusedImports = /* @__PURE__ */ new Map(); + const unusedDestructures = /* @__PURE__ */ new Map(); + const unusedVariables = /* @__PURE__ */ new Map(); + nodeWithLocals.locals.forEach((local) => { + if (local.flags & 262144 /* TypeParameter */ ? !(local.flags & 3 /* Variable */ && !(local.isReferenced & 3 /* Variable */)) : local.isReferenced || local.exportSymbol) { + return; + } + if (local.declarations) { + for (const declaration of local.declarations) { + if (isValidUnusedLocalDeclaration(declaration)) { + continue; + } + if (isImportedDeclaration(declaration)) { + addToGroup(unusedImports, importClauseFromImported(declaration), declaration, getNodeId); + } else if (isBindingElement(declaration) && isObjectBindingPattern(declaration.parent)) { + const lastElement = last(declaration.parent.elements); + if (declaration === lastElement || !last(declaration.parent.elements).dotDotDotToken) { + addToGroup(unusedDestructures, declaration.parent, declaration, getNodeId); + } + } else if (isVariableDeclaration(declaration)) { + const blockScopeKind = getCombinedNodeFlagsCached(declaration) & 7 /* BlockScoped */; + const name = getNameOfDeclaration(declaration); + if (blockScopeKind !== 4 /* Using */ && blockScopeKind !== 6 /* AwaitUsing */ || !name || !isIdentifierThatStartsWithUnderscore(name)) { + addToGroup(unusedVariables, declaration.parent, declaration, getNodeId); + } + } else { + const parameter = local.valueDeclaration && tryGetRootParameterDeclaration(local.valueDeclaration); + const name = local.valueDeclaration && getNameOfDeclaration(local.valueDeclaration); + if (parameter && name) { + if (!isParameterPropertyDeclaration(parameter, parameter.parent) && !parameterIsThisKeyword(parameter) && !isIdentifierThatStartsWithUnderscore(name)) { + if (isBindingElement(declaration) && isArrayBindingPattern(declaration.parent)) { + addToGroup(unusedDestructures, declaration.parent, declaration, getNodeId); + } else { + addDiagnostic(parameter, 1 /* Parameter */, createDiagnosticForNode(name, Diagnostics._0_is_declared_but_its_value_is_never_read, symbolName(local))); + } + } + } else { + errorUnusedLocal(declaration, symbolName(local), addDiagnostic); + } + } + } + } + }); + unusedImports.forEach(([importClause, unuseds]) => { + const importDecl = importClause.parent; + const nDeclarations = (importClause.name ? 1 : 0) + (importClause.namedBindings ? importClause.namedBindings.kind === 275 /* NamespaceImport */ ? 1 : importClause.namedBindings.elements.length : 0); + if (nDeclarations === unuseds.length) { + addDiagnostic( + importDecl, + 0 /* Local */, + unuseds.length === 1 ? createDiagnosticForNode(importDecl, Diagnostics._0_is_declared_but_its_value_is_never_read, idText(first(unuseds).name)) : createDiagnosticForNode(importDecl, Diagnostics.All_imports_in_import_declaration_are_unused) + ); + } else { + for (const unused of unuseds) errorUnusedLocal(unused, idText(unused.name), addDiagnostic); + } + }); + unusedDestructures.forEach(([bindingPattern, bindingElements]) => { + const kind = tryGetRootParameterDeclaration(bindingPattern.parent) ? 1 /* Parameter */ : 0 /* Local */; + if (bindingPattern.elements.length === bindingElements.length) { + if (bindingElements.length === 1 && bindingPattern.parent.kind === 261 /* VariableDeclaration */ && bindingPattern.parent.parent.kind === 262 /* VariableDeclarationList */) { + addToGroup(unusedVariables, bindingPattern.parent.parent, bindingPattern.parent, getNodeId); + } else { + addDiagnostic( + bindingPattern, + kind, + bindingElements.length === 1 ? createDiagnosticForNode(bindingPattern, Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(first(bindingElements).name)) : createDiagnosticForNode(bindingPattern, Diagnostics.All_destructured_elements_are_unused) + ); + } + } else { + for (const e of bindingElements) { + addDiagnostic(e, kind, createDiagnosticForNode(e, Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(e.name))); + } + } + }); + unusedVariables.forEach(([declarationList, declarations]) => { + if (declarationList.declarations.length === declarations.length) { + addDiagnostic( + declarationList, + 0 /* Local */, + declarations.length === 1 ? createDiagnosticForNode(first(declarations).name, Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(first(declarations).name)) : createDiagnosticForNode(declarationList.parent.kind === 244 /* VariableStatement */ ? declarationList.parent : declarationList, Diagnostics.All_variables_are_unused) + ); + } else { + for (const decl of declarations) { + addDiagnostic(decl, 0 /* Local */, createDiagnosticForNode(decl, Diagnostics._0_is_declared_but_its_value_is_never_read, bindingNameText(decl.name))); + } + } + }); + } + function checkPotentialUncheckedRenamedBindingElementsInTypes() { + var _a; + for (const node of potentialUnusedRenamedBindingElementsInTypes) { + if (!((_a = getSymbolOfDeclaration(node)) == null ? void 0 : _a.isReferenced)) { + const wrappingDeclaration = walkUpBindingElementsAndPatterns(node); + Debug.assert(isPartOfParameterDeclaration(wrappingDeclaration), "Only parameter declaration should be checked here"); + const diagnostic = createDiagnosticForNode(node.name, Diagnostics._0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation, declarationNameToString(node.name), declarationNameToString(node.propertyName)); + if (!wrappingDeclaration.type) { + addRelatedInfo( + diagnostic, + createFileDiagnostic(getSourceFileOfNode(wrappingDeclaration), wrappingDeclaration.end, 0, Diagnostics.We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here, declarationNameToString(node.propertyName)) + ); + } + diagnostics.add(diagnostic); + } + } + } + function bindingNameText(name) { + switch (name.kind) { + case 80 /* Identifier */: + return idText(name); + case 208 /* ArrayBindingPattern */: + case 207 /* ObjectBindingPattern */: + return bindingNameText(cast(first(name.elements), isBindingElement).name); + default: + return Debug.assertNever(name); + } + } + function isImportedDeclaration(node) { + return node.kind === 274 /* ImportClause */ || node.kind === 277 /* ImportSpecifier */ || node.kind === 275 /* NamespaceImport */; + } + function importClauseFromImported(decl) { + return decl.kind === 274 /* ImportClause */ ? decl : decl.kind === 275 /* NamespaceImport */ ? decl.parent : decl.parent.parent; + } + function checkBlock(node) { + if (node.kind === 242 /* Block */) { + checkGrammarStatementInAmbientContext(node); + } + if (isFunctionOrModuleBlock(node)) { + const saveFlowAnalysisDisabled = flowAnalysisDisabled; + forEach(node.statements, checkSourceElement); + flowAnalysisDisabled = saveFlowAnalysisDisabled; + } else { + forEach(node.statements, checkSourceElement); + } + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } + } + function checkCollisionWithArgumentsInGeneratedCode(node) { + if (languageVersion >= 2 /* ES2015 */ || !hasRestParameter(node) || node.flags & 33554432 /* Ambient */ || nodeIsMissing(node.body)) { + return; + } + forEach(node.parameters, (p) => { + if (p.name && !isBindingPattern(p.name) && p.name.escapedText === argumentsSymbol.escapedName) { + errorSkippedOn("noEmit", p, Diagnostics.Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters); + } + }); + } + function needCollisionCheckForIdentifier(node, identifier, name) { + if ((identifier == null ? void 0 : identifier.escapedText) !== name) { + return false; + } + if (node.kind === 173 /* PropertyDeclaration */ || node.kind === 172 /* PropertySignature */ || node.kind === 175 /* MethodDeclaration */ || node.kind === 174 /* MethodSignature */ || node.kind === 178 /* GetAccessor */ || node.kind === 179 /* SetAccessor */ || node.kind === 304 /* PropertyAssignment */) { + return false; + } + if (node.flags & 33554432 /* Ambient */) { + return false; + } + if (isImportClause(node) || isImportEqualsDeclaration(node) || isImportSpecifier(node)) { + if (isTypeOnlyImportOrExportDeclaration(node)) { + return false; + } + } + const root = getRootDeclaration(node); + if (isParameter(root) && nodeIsMissing(root.parent.body)) { + return false; + } + return true; + } + function checkIfThisIsCapturedInEnclosingScope(node) { + findAncestor(node, (current) => { + if (getNodeCheckFlags(current) & 4 /* CaptureThis */) { + const isDeclaration2 = node.kind !== 80 /* Identifier */; + if (isDeclaration2) { + error2(getNameOfDeclaration(node), Diagnostics.Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference); + } else { + error2(node, Diagnostics.Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference); + } + return true; + } + return false; + }); + } + function checkIfNewTargetIsCapturedInEnclosingScope(node) { + findAncestor(node, (current) => { + if (getNodeCheckFlags(current) & 8 /* CaptureNewTarget */) { + const isDeclaration2 = node.kind !== 80 /* Identifier */; + if (isDeclaration2) { + error2(getNameOfDeclaration(node), Diagnostics.Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_meta_property_reference); + } else { + error2(node, Diagnostics.Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta_property_reference); + } + return true; + } + return false; + }); + } + function checkCollisionWithRequireExportsInGeneratedCode(node, name) { + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) >= 5 /* ES2015 */) { + return; + } + if (!name || !needCollisionCheckForIdentifier(node, name, "require") && !needCollisionCheckForIdentifier(node, name, "exports")) { + return; + } + if (isModuleDeclaration(node) && getModuleInstanceState(node) !== 1 /* Instantiated */) { + return; + } + const parent2 = getDeclarationContainer(node); + if (parent2.kind === 308 /* SourceFile */ && isExternalOrCommonJsModule(parent2)) { + errorSkippedOn("noEmit", name, Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module, declarationNameToString(name), declarationNameToString(name)); + } + } + function checkCollisionWithGlobalPromiseInGeneratedCode(node, name) { + if (!name || languageVersion >= 4 /* ES2017 */ || !needCollisionCheckForIdentifier(node, name, "Promise")) { + return; + } + if (isModuleDeclaration(node) && getModuleInstanceState(node) !== 1 /* Instantiated */) { + return; + } + const parent2 = getDeclarationContainer(node); + if (parent2.kind === 308 /* SourceFile */ && isExternalOrCommonJsModule(parent2) && parent2.flags & 4096 /* HasAsyncFunctions */) { + errorSkippedOn("noEmit", name, Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_functions, declarationNameToString(name), declarationNameToString(name)); + } + } + function recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name) { + if (languageVersion <= 8 /* ES2021 */ && (needCollisionCheckForIdentifier(node, name, "WeakMap") || needCollisionCheckForIdentifier(node, name, "WeakSet"))) { + potentialWeakMapSetCollisions.push(node); + } + } + function checkWeakMapSetCollision(node) { + const enclosingBlockScope = getEnclosingBlockScopeContainer(node); + if (getNodeCheckFlags(enclosingBlockScope) & 1048576 /* ContainsClassWithPrivateIdentifiers */) { + Debug.assert(isNamedDeclaration(node) && isIdentifier(node.name) && typeof node.name.escapedText === "string", "The target of a WeakMap/WeakSet collision check should be an identifier"); + errorSkippedOn("noEmit", node, Diagnostics.Compiler_reserves_name_0_when_emitting_private_identifier_downlevel, node.name.escapedText); + } + } + function recordPotentialCollisionWithReflectInGeneratedCode(node, name) { + if (name && languageVersion >= 2 /* ES2015 */ && languageVersion <= 8 /* ES2021 */ && needCollisionCheckForIdentifier(node, name, "Reflect")) { + potentialReflectCollisions.push(node); + } + } + function checkReflectCollision(node) { + let hasCollision = false; + if (isClassExpression(node)) { + for (const member of node.members) { + if (getNodeCheckFlags(member) & 2097152 /* ContainsSuperPropertyInStaticInitializer */) { + hasCollision = true; + break; + } + } + } else if (isFunctionExpression(node)) { + if (getNodeCheckFlags(node) & 2097152 /* ContainsSuperPropertyInStaticInitializer */) { + hasCollision = true; + } + } else { + const container = getEnclosingBlockScopeContainer(node); + if (container && getNodeCheckFlags(container) & 2097152 /* ContainsSuperPropertyInStaticInitializer */) { + hasCollision = true; + } + } + if (hasCollision) { + Debug.assert(isNamedDeclaration(node) && isIdentifier(node.name), "The target of a Reflect collision check should be an identifier"); + errorSkippedOn("noEmit", node, Diagnostics.Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers, declarationNameToString(node.name), "Reflect"); + } + } + function checkCollisionsForDeclarationName(node, name) { + if (!name) return; + checkCollisionWithRequireExportsInGeneratedCode(node, name); + checkCollisionWithGlobalPromiseInGeneratedCode(node, name); + recordPotentialCollisionWithWeakMapSetInGeneratedCode(node, name); + recordPotentialCollisionWithReflectInGeneratedCode(node, name); + if (isClassLike(node)) { + checkTypeNameIsReserved(name, Diagnostics.Class_name_cannot_be_0); + if (!(node.flags & 33554432 /* Ambient */)) { + checkClassNameCollisionWithObject(name); + } + } else if (isEnumDeclaration(node)) { + checkTypeNameIsReserved(name, Diagnostics.Enum_name_cannot_be_0); + } + } + function checkVarDeclaredNamesNotShadowed(node) { + if ((getCombinedNodeFlagsCached(node) & 7 /* BlockScoped */) !== 0 || isPartOfParameterDeclaration(node)) { + return; + } + const symbol = getSymbolOfDeclaration(node); + if (symbol.flags & 1 /* FunctionScopedVariable */) { + if (!isIdentifier(node.name)) return Debug.fail(); + const localDeclarationSymbol = resolveName( + node, + node.name.escapedText, + 3 /* Variable */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + ); + if (localDeclarationSymbol && localDeclarationSymbol !== symbol && localDeclarationSymbol.flags & 2 /* BlockScopedVariable */) { + if (getDeclarationNodeFlagsFromSymbol(localDeclarationSymbol) & 7 /* BlockScoped */) { + const varDeclList = getAncestor(localDeclarationSymbol.valueDeclaration, 262 /* VariableDeclarationList */); + const container = varDeclList.parent.kind === 244 /* VariableStatement */ && varDeclList.parent.parent ? varDeclList.parent.parent : void 0; + const namesShareScope = container && (container.kind === 242 /* Block */ && isFunctionLike(container.parent) || container.kind === 269 /* ModuleBlock */ || container.kind === 268 /* ModuleDeclaration */ || container.kind === 308 /* SourceFile */); + if (!namesShareScope) { + const name = symbolToString(localDeclarationSymbol); + error2(node, Diagnostics.Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1, name, name); + } + } + } + } + } + function convertAutoToAny(type) { + return type === autoType ? anyType : type === autoArrayType ? anyArrayType : type; + } + function checkVariableLikeDeclaration(node) { + var _a; + checkDecorators(node); + if (!isBindingElement(node)) { + checkSourceElement(node.type); + } + if (!node.name) { + return; + } + if (node.name.kind === 168 /* ComputedPropertyName */) { + checkComputedPropertyName(node.name); + if (hasOnlyExpressionInitializer(node) && node.initializer) { + checkExpressionCached(node.initializer); + } + } + if (isBindingElement(node)) { + if (node.propertyName && isIdentifier(node.name) && isPartOfParameterDeclaration(node) && nodeIsMissing(getContainingFunction(node).body)) { + potentialUnusedRenamedBindingElementsInTypes.push(node); + return; + } + if (isObjectBindingPattern(node.parent) && node.dotDotDotToken && languageVersion < LanguageFeatureMinimumTarget.ObjectSpreadRest) { + checkExternalEmitHelpers(node, 4 /* Rest */); + } + if (node.propertyName && node.propertyName.kind === 168 /* ComputedPropertyName */) { + checkComputedPropertyName(node.propertyName); + } + const parent2 = node.parent.parent; + const parentCheckMode = node.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; + const parentType = getTypeForBindingElementParent(parent2, parentCheckMode); + const name = node.propertyName || node.name; + if (parentType && !isBindingPattern(name)) { + const exprType = getLiteralTypeFromPropertyName(name); + if (isTypeUsableAsPropertyName(exprType)) { + const nameText = getPropertyNameFromType(exprType); + const property = getPropertyOfType(parentType, nameText); + if (property) { + markPropertyAsReferenced( + property, + /*nodeForCheckWriteOnly*/ + void 0, + /*isSelfTypeAccess*/ + false + ); + checkPropertyAccessibility( + node, + !!parent2.initializer && parent2.initializer.kind === 108 /* SuperKeyword */, + /*writing*/ + false, + parentType, + property + ); + } + } + } + } + if (isBindingPattern(node.name)) { + if (node.name.kind === 208 /* ArrayBindingPattern */ && languageVersion < LanguageFeatureMinimumTarget.BindingPatterns && compilerOptions.downlevelIteration) { + checkExternalEmitHelpers(node, 512 /* Read */); + } + forEach(node.name.elements, checkSourceElement); + } + if (node.initializer && isPartOfParameterDeclaration(node) && nodeIsMissing(getContainingFunction(node).body)) { + error2(node, Diagnostics.A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation); + return; + } + if (isBindingPattern(node.name)) { + if (isInAmbientOrTypeNode(node)) { + return; + } + const needCheckInitializer = hasOnlyExpressionInitializer(node) && node.initializer && node.parent.parent.kind !== 250 /* ForInStatement */; + const needCheckWidenedType = !some(node.name.elements, not(isOmittedExpression)); + if (needCheckInitializer || needCheckWidenedType) { + const widenedType = getWidenedTypeForVariableLikeDeclaration(node); + if (needCheckInitializer) { + const initializerType = checkExpressionCached(node.initializer); + if (strictNullChecks && needCheckWidenedType) { + checkNonNullNonVoidType(initializerType, node); + } else { + checkTypeAssignableToAndOptionallyElaborate(initializerType, getWidenedTypeForVariableLikeDeclaration(node), node, node.initializer); + } + } + if (needCheckWidenedType) { + if (isArrayBindingPattern(node.name)) { + checkIteratedTypeOrElementType(65 /* Destructuring */, widenedType, undefinedType, node); + } else if (strictNullChecks) { + checkNonNullNonVoidType(widenedType, node); + } + } + } + return; + } + const symbol = getSymbolOfDeclaration(node); + if (symbol.flags & 2097152 /* Alias */ && (isVariableDeclarationInitializedToBareOrAccessedRequire(node) || isBindingElementOfBareOrAccessedRequire(node))) { + checkAliasSymbol(node); + return; + } + if (node.name.kind === 10 /* BigIntLiteral */) { + error2(node.name, Diagnostics.A_bigint_literal_cannot_be_used_as_a_property_name); + } + const type = convertAutoToAny(getTypeOfSymbol(symbol)); + if (node === symbol.valueDeclaration) { + const initializer = hasOnlyExpressionInitializer(node) && getEffectiveInitializer(node); + if (initializer) { + const isJSObjectLiteralInitializer = isInJSFile(node) && isObjectLiteralExpression(initializer) && (initializer.properties.length === 0 || isPrototypeAccess(node.name)) && !!((_a = symbol.exports) == null ? void 0 : _a.size); + if (!isJSObjectLiteralInitializer && node.parent.parent.kind !== 250 /* ForInStatement */) { + const initializerType = checkExpressionCached(initializer); + checkTypeAssignableToAndOptionallyElaborate( + initializerType, + type, + node, + initializer, + /*headMessage*/ + void 0 + ); + const blockScopeKind = getCombinedNodeFlagsCached(node) & 7 /* BlockScoped */; + if (blockScopeKind === 6 /* AwaitUsing */) { + const globalAsyncDisposableType = getGlobalAsyncDisposableType( + /*reportErrors*/ + true + ); + const globalDisposableType = getGlobalDisposableType( + /*reportErrors*/ + true + ); + if (globalAsyncDisposableType !== emptyObjectType && globalDisposableType !== emptyObjectType) { + const optionalDisposableType = getUnionType([globalAsyncDisposableType, globalDisposableType, nullType, undefinedType]); + checkTypeAssignableTo(widenTypeForVariableLikeDeclaration(initializerType, node), optionalDisposableType, initializer, Diagnostics.The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined); + } + } else if (blockScopeKind === 4 /* Using */) { + const globalDisposableType = getGlobalDisposableType( + /*reportErrors*/ + true + ); + if (globalDisposableType !== emptyObjectType) { + const optionalDisposableType = getUnionType([globalDisposableType, nullType, undefinedType]); + checkTypeAssignableTo(widenTypeForVariableLikeDeclaration(initializerType, node), optionalDisposableType, initializer, Diagnostics.The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_null_or_undefined); + } + } + } + } + if (symbol.declarations && symbol.declarations.length > 1) { + if (some(symbol.declarations, (d) => d !== node && isVariableLike(d) && !areDeclarationFlagsIdentical(d, node))) { + error2(node.name, Diagnostics.All_declarations_of_0_must_have_identical_modifiers, declarationNameToString(node.name)); + } + } + } else { + const declarationType = convertAutoToAny(getWidenedTypeForVariableLikeDeclaration(node)); + if (!isErrorType(type) && !isErrorType(declarationType) && !isTypeIdenticalTo(type, declarationType) && !(symbol.flags & 67108864 /* Assignment */)) { + errorNextVariableOrPropertyDeclarationMustHaveSameType(symbol.valueDeclaration, type, node, declarationType); + } + if (hasOnlyExpressionInitializer(node) && node.initializer) { + checkTypeAssignableToAndOptionallyElaborate( + checkExpressionCached(node.initializer), + declarationType, + node, + node.initializer, + /*headMessage*/ + void 0 + ); + } + if (symbol.valueDeclaration && !areDeclarationFlagsIdentical(node, symbol.valueDeclaration)) { + error2(node.name, Diagnostics.All_declarations_of_0_must_have_identical_modifiers, declarationNameToString(node.name)); + } + } + if (node.kind !== 173 /* PropertyDeclaration */ && node.kind !== 172 /* PropertySignature */) { + checkExportsOnMergedDeclarations(node); + if (node.kind === 261 /* VariableDeclaration */ || node.kind === 209 /* BindingElement */) { + checkVarDeclaredNamesNotShadowed(node); + } + checkCollisionsForDeclarationName(node, node.name); + } + } + function errorNextVariableOrPropertyDeclarationMustHaveSameType(firstDeclaration, firstType, nextDeclaration, nextType) { + const nextDeclarationName = getNameOfDeclaration(nextDeclaration); + const message = nextDeclaration.kind === 173 /* PropertyDeclaration */ || nextDeclaration.kind === 172 /* PropertySignature */ ? Diagnostics.Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_type_2 : Diagnostics.Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_type_2; + const declName = declarationNameToString(nextDeclarationName); + const err = error2( + nextDeclarationName, + message, + declName, + typeToString(firstType), + typeToString(nextType) + ); + if (firstDeclaration) { + addRelatedInfo(err, createDiagnosticForNode(firstDeclaration, Diagnostics._0_was_also_declared_here, declName)); + } + } + function areDeclarationFlagsIdentical(left, right) { + if (left.kind === 170 /* Parameter */ && right.kind === 261 /* VariableDeclaration */ || left.kind === 261 /* VariableDeclaration */ && right.kind === 170 /* Parameter */) { + return true; + } + if (hasQuestionToken(left) !== hasQuestionToken(right)) { + return false; + } + const interestingFlags = 2 /* Private */ | 4 /* Protected */ | 1024 /* Async */ | 64 /* Abstract */ | 8 /* Readonly */ | 256 /* Static */; + return getSelectedEffectiveModifierFlags(left, interestingFlags) === getSelectedEffectiveModifierFlags(right, interestingFlags); + } + function checkVariableDeclaration(node) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Check, "checkVariableDeclaration", { kind: node.kind, pos: node.pos, end: node.end, path: node.tracingPath }); + checkGrammarVariableDeclaration(node); + checkVariableLikeDeclaration(node); + (_b = tracing) == null ? void 0 : _b.pop(); + } + function checkBindingElement(node) { + checkGrammarBindingElement(node); + return checkVariableLikeDeclaration(node); + } + function checkVariableDeclarationList(node) { + const blockScopeKind = getCombinedNodeFlags(node) & 7 /* BlockScoped */; + if ((blockScopeKind === 4 /* Using */ || blockScopeKind === 6 /* AwaitUsing */) && languageVersion < LanguageFeatureMinimumTarget.UsingAndAwaitUsing) { + checkExternalEmitHelpers(node, 16777216 /* AddDisposableResourceAndDisposeResources */); + } + forEach(node.declarations, checkSourceElement); + } + function checkVariableStatement(node) { + if (!checkGrammarModifiers(node) && !checkGrammarVariableDeclarationList(node.declarationList)) checkGrammarForDisallowedBlockScopedVariableStatement(node); + checkVariableDeclarationList(node.declarationList); + } + function checkExpressionStatement(node) { + checkGrammarStatementInAmbientContext(node); + checkExpression(node.expression); + } + function checkIfStatement(node) { + checkGrammarStatementInAmbientContext(node); + const type = checkTruthinessExpression(node.expression); + checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(node.expression, type, node.thenStatement); + checkSourceElement(node.thenStatement); + if (node.thenStatement.kind === 243 /* EmptyStatement */) { + error2(node.thenStatement, Diagnostics.The_body_of_an_if_statement_cannot_be_the_empty_statement); + } + checkSourceElement(node.elseStatement); + } + function checkTestingKnownTruthyCallableOrAwaitableOrEnumMemberType(condExpr, condType, body) { + if (!strictNullChecks) return; + bothHelper(condExpr, body); + function bothHelper(condExpr2, body2) { + condExpr2 = skipParentheses(condExpr2); + helper(condExpr2, body2); + while (isBinaryExpression(condExpr2) && (condExpr2.operatorToken.kind === 57 /* BarBarToken */ || condExpr2.operatorToken.kind === 61 /* QuestionQuestionToken */)) { + condExpr2 = skipParentheses(condExpr2.left); + helper(condExpr2, body2); + } + } + function helper(condExpr2, body2) { + const location = isLogicalOrCoalescingBinaryExpression(condExpr2) ? skipParentheses(condExpr2.right) : condExpr2; + if (isModuleExportsAccessExpression(location)) { + return; + } + if (isLogicalOrCoalescingBinaryExpression(location)) { + bothHelper(location, body2); + return; + } + const type = location === condExpr2 ? condType : checkExpression(location); + if (type.flags & 1024 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) { + error2(location, Diagnostics.This_condition_will_always_return_0, !!type.value ? "true" : "false"); + return; + } + const isPropertyExpressionCast = isPropertyAccessExpression(location) && isTypeAssertion(location.expression); + if (!hasTypeFacts(type, 4194304 /* Truthy */) || isPropertyExpressionCast) return; + const callSignatures = getSignaturesOfType(type, 0 /* Call */); + const isPromise = !!getAwaitedTypeOfPromise(type); + if (callSignatures.length === 0 && !isPromise) { + return; + } + const testedNode = isIdentifier(location) ? location : isPropertyAccessExpression(location) ? location.name : void 0; + const testedSymbol = testedNode && getSymbolAtLocation(testedNode); + if (!testedSymbol && !isPromise) { + return; + } + const isUsed = testedSymbol && isBinaryExpression(condExpr2.parent) && isSymbolUsedInBinaryExpressionChain(condExpr2.parent, testedSymbol) || testedSymbol && body2 && isSymbolUsedInConditionBody(condExpr2, body2, testedNode, testedSymbol); + if (!isUsed) { + if (isPromise) { + errorAndMaybeSuggestAwait( + location, + /*maybeMissingAwait*/ + true, + Diagnostics.This_condition_will_always_return_true_since_this_0_is_always_defined, + getTypeNameForErrorDisplay(type) + ); + } else { + error2(location, Diagnostics.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead); + } + } + } + } + function isSymbolUsedInConditionBody(expr, body, testedNode, testedSymbol) { + return !!forEachChild(body, function check(childNode) { + if (isIdentifier(childNode)) { + const childSymbol = getSymbolAtLocation(childNode); + if (childSymbol && childSymbol === testedSymbol) { + if (isIdentifier(expr) || isIdentifier(testedNode) && isBinaryExpression(testedNode.parent)) { + return true; + } + let testedExpression = testedNode.parent; + let childExpression = childNode.parent; + while (testedExpression && childExpression) { + if (isIdentifier(testedExpression) && isIdentifier(childExpression) || testedExpression.kind === 110 /* ThisKeyword */ && childExpression.kind === 110 /* ThisKeyword */) { + return getSymbolAtLocation(testedExpression) === getSymbolAtLocation(childExpression); + } else if (isPropertyAccessExpression(testedExpression) && isPropertyAccessExpression(childExpression)) { + if (getSymbolAtLocation(testedExpression.name) !== getSymbolAtLocation(childExpression.name)) { + return false; + } + childExpression = childExpression.expression; + testedExpression = testedExpression.expression; + } else if (isCallExpression(testedExpression) && isCallExpression(childExpression)) { + childExpression = childExpression.expression; + testedExpression = testedExpression.expression; + } else { + return false; + } + } + } + } + return forEachChild(childNode, check); + }); + } + function isSymbolUsedInBinaryExpressionChain(node, testedSymbol) { + while (isBinaryExpression(node) && node.operatorToken.kind === 56 /* AmpersandAmpersandToken */) { + const isUsed = forEachChild(node.right, function visit(child) { + if (isIdentifier(child)) { + const symbol = getSymbolAtLocation(child); + if (symbol && symbol === testedSymbol) { + return true; + } + } + return forEachChild(child, visit); + }); + if (isUsed) { + return true; + } + node = node.parent; + } + return false; + } + function checkDoStatement(node) { + checkGrammarStatementInAmbientContext(node); + checkSourceElement(node.statement); + checkTruthinessExpression(node.expression); + } + function checkWhileStatement(node) { + checkGrammarStatementInAmbientContext(node); + checkTruthinessExpression(node.expression); + checkSourceElement(node.statement); + } + function checkTruthinessOfType(type, node) { + if (type.flags & 16384 /* Void */) { + error2(node, Diagnostics.An_expression_of_type_void_cannot_be_tested_for_truthiness); + } else { + const semantics = getSyntacticTruthySemantics(node); + if (semantics !== 3 /* Sometimes */) { + error2( + node, + semantics === 1 /* Always */ ? Diagnostics.This_kind_of_expression_is_always_truthy : Diagnostics.This_kind_of_expression_is_always_falsy + ); + } + } + return type; + } + function getSyntacticTruthySemantics(node) { + node = skipOuterExpressions(node); + switch (node.kind) { + case 9 /* NumericLiteral */: + if (node.text === "0" || node.text === "1") { + return 3 /* Sometimes */; + } + return 1 /* Always */; + case 210 /* ArrayLiteralExpression */: + case 220 /* ArrowFunction */: + case 10 /* BigIntLiteral */: + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 285 /* JsxElement */: + case 286 /* JsxSelfClosingElement */: + case 211 /* ObjectLiteralExpression */: + case 14 /* RegularExpressionLiteral */: + return 1 /* Always */; + case 223 /* VoidExpression */: + case 106 /* NullKeyword */: + return 2 /* Never */; + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: + return !!node.text ? 1 /* Always */ : 2 /* Never */; + case 228 /* ConditionalExpression */: + return getSyntacticTruthySemantics(node.whenTrue) | getSyntacticTruthySemantics(node.whenFalse); + case 80 /* Identifier */: + if (getResolvedSymbol(node) === undefinedSymbol) { + return 2 /* Never */; + } + return 3 /* Sometimes */; + } + return 3 /* Sometimes */; + } + function checkTruthinessExpression(node, checkMode) { + return checkTruthinessOfType(checkExpression(node, checkMode), node); + } + function checkForStatement(node) { + if (!checkGrammarStatementInAmbientContext(node)) { + if (node.initializer && node.initializer.kind === 262 /* VariableDeclarationList */) { + checkGrammarVariableDeclarationList(node.initializer); + } + } + if (node.initializer) { + if (node.initializer.kind === 262 /* VariableDeclarationList */) { + checkVariableDeclarationList(node.initializer); + } else { + checkExpression(node.initializer); + } + } + if (node.condition) checkTruthinessExpression(node.condition); + if (node.incrementor) checkExpression(node.incrementor); + checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } + } + function checkForOfStatement(node) { + checkGrammarForInOrForOfStatement(node); + const container = getContainingFunctionOrClassStaticBlock(node); + if (node.awaitModifier) { + if (container && isClassStaticBlockDeclaration(container)) { + grammarErrorOnNode(node.awaitModifier, Diagnostics.for_await_loops_cannot_be_used_inside_a_class_static_block); + } else { + const functionFlags = getFunctionFlags(container); + if ((functionFlags & (4 /* Invalid */ | 2 /* Async */)) === 2 /* Async */ && languageVersion < LanguageFeatureMinimumTarget.ForAwaitOf) { + checkExternalEmitHelpers(node, 16384 /* ForAwaitOfIncludes */); + } + } + } else if (compilerOptions.downlevelIteration && languageVersion < LanguageFeatureMinimumTarget.ForOf) { + checkExternalEmitHelpers(node, 256 /* ForOfIncludes */); + } + if (node.initializer.kind === 262 /* VariableDeclarationList */) { + checkVariableDeclarationList(node.initializer); + } else { + const varExpr = node.initializer; + const iteratedType = checkRightHandSideOfForOf(node); + if (varExpr.kind === 210 /* ArrayLiteralExpression */ || varExpr.kind === 211 /* ObjectLiteralExpression */) { + checkDestructuringAssignment(varExpr, iteratedType || errorType); + } else { + const leftType = checkExpression(varExpr); + checkReferenceExpression( + varExpr, + Diagnostics.The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access, + Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access + ); + if (iteratedType) { + checkTypeAssignableToAndOptionallyElaborate(iteratedType, leftType, varExpr, node.expression); + } + } + } + checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } + } + function checkForInStatement(node) { + checkGrammarForInOrForOfStatement(node); + const rightType = getNonNullableTypeIfNeeded(checkExpression(node.expression)); + if (node.initializer.kind === 262 /* VariableDeclarationList */) { + const variable = node.initializer.declarations[0]; + if (variable && isBindingPattern(variable.name)) { + error2(variable.name, Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); + } + checkVariableDeclarationList(node.initializer); + } else { + const varExpr = node.initializer; + const leftType = checkExpression(varExpr); + if (varExpr.kind === 210 /* ArrayLiteralExpression */ || varExpr.kind === 211 /* ObjectLiteralExpression */) { + error2(varExpr, Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern); + } else if (!isTypeAssignableTo(getIndexTypeOrString(rightType), leftType)) { + error2(varExpr, Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any); + } else { + checkReferenceExpression( + varExpr, + Diagnostics.The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access, + Diagnostics.The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access + ); + } + } + if (rightType === neverType || !isTypeAssignableToKind(rightType, 67108864 /* NonPrimitive */ | 58982400 /* InstantiableNonPrimitive */)) { + error2(node.expression, Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0, typeToString(rightType)); + } + checkSourceElement(node.statement); + if (node.locals) { + registerForUnusedIdentifiersCheck(node); + } + } + function checkRightHandSideOfForOf(statement) { + const use = statement.awaitModifier ? 15 /* ForAwaitOf */ : 13 /* ForOf */; + return checkIteratedTypeOrElementType(use, checkNonNullExpression(statement.expression), undefinedType, statement.expression); + } + function checkIteratedTypeOrElementType(use, inputType, sentType, errorNode) { + if (isTypeAny(inputType)) { + return inputType; + } + return getIteratedTypeOrElementType( + use, + inputType, + sentType, + errorNode, + /*checkAssignability*/ + true + ) || anyType; + } + function getIteratedTypeOrElementType(use, inputType, sentType, errorNode, checkAssignability) { + const allowAsyncIterables = (use & 2 /* AllowsAsyncIterablesFlag */) !== 0; + if (inputType === neverType) { + if (errorNode) { + reportTypeNotIterableError(errorNode, inputType, allowAsyncIterables); + } + return void 0; + } + const uplevelIteration = languageVersion >= 2 /* ES2015 */; + const downlevelIteration = !uplevelIteration && compilerOptions.downlevelIteration; + const possibleOutOfBounds = compilerOptions.noUncheckedIndexedAccess && !!(use & 128 /* PossiblyOutOfBounds */); + if (uplevelIteration || downlevelIteration || allowAsyncIterables) { + const iterationTypes = getIterationTypesOfIterable(inputType, use, uplevelIteration ? errorNode : void 0); + if (checkAssignability) { + if (iterationTypes) { + const diagnostic = use & 8 /* ForOfFlag */ ? Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_send_0 : use & 32 /* SpreadFlag */ ? Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_always_send_0 : use & 64 /* DestructuringFlag */ ? Diagnostics.Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring_will_always_send_0 : use & 16 /* YieldStarFlag */ ? Diagnostics.Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_containing_generator_will_always_send_0 : void 0; + if (diagnostic) { + checkTypeAssignableTo(sentType, iterationTypes.nextType, errorNode, diagnostic); + } + } + } + if (iterationTypes || uplevelIteration) { + return possibleOutOfBounds ? includeUndefinedInIndexSignature(iterationTypes && iterationTypes.yieldType) : iterationTypes && iterationTypes.yieldType; + } + } + let arrayType = inputType; + let hasStringConstituent = false; + if (use & 4 /* AllowsStringInputFlag */) { + if (arrayType.flags & 1048576 /* Union */) { + const arrayTypes = inputType.types; + const filteredTypes = filter(arrayTypes, (t) => !(t.flags & 402653316 /* StringLike */)); + if (filteredTypes !== arrayTypes) { + arrayType = getUnionType(filteredTypes, 2 /* Subtype */); + } + } else if (arrayType.flags & 402653316 /* StringLike */) { + arrayType = neverType; + } + hasStringConstituent = arrayType !== inputType; + if (hasStringConstituent) { + if (arrayType.flags & 131072 /* Never */) { + return possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType; + } + } + } + if (!isArrayLikeType(arrayType)) { + if (errorNode) { + const allowsStrings = !!(use & 4 /* AllowsStringInputFlag */) && !hasStringConstituent; + const [defaultDiagnostic, maybeMissingAwait] = getIterationDiagnosticDetails(allowsStrings, downlevelIteration); + errorAndMaybeSuggestAwait( + errorNode, + maybeMissingAwait && !!getAwaitedTypeOfPromise(arrayType), + defaultDiagnostic, + typeToString(arrayType) + ); + } + return hasStringConstituent ? possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType : void 0; + } + const arrayElementType = getIndexTypeOfType(arrayType, numberType); + if (hasStringConstituent && arrayElementType) { + if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) { + return stringType; + } + return getUnionType(possibleOutOfBounds ? [arrayElementType, stringType, undefinedType] : [arrayElementType, stringType], 2 /* Subtype */); + } + return use & 128 /* PossiblyOutOfBounds */ ? includeUndefinedInIndexSignature(arrayElementType) : arrayElementType; + function getIterationDiagnosticDetails(allowsStrings, downlevelIteration2) { + var _a; + if (downlevelIteration2) { + return allowsStrings ? [Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator, true] : [Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator, true]; + } + const yieldType = getIterationTypeOfIterable( + use, + 0 /* Yield */, + inputType, + /*errorNode*/ + void 0 + ); + if (yieldType) { + return [Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher, false]; + } + if (isES2015OrLaterIterable((_a = inputType.symbol) == null ? void 0 : _a.escapedName)) { + return [Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher, true]; + } + return allowsStrings ? [Diagnostics.Type_0_is_not_an_array_type_or_a_string_type, true] : [Diagnostics.Type_0_is_not_an_array_type, true]; + } + } + function isES2015OrLaterIterable(n) { + switch (n) { + case "Float32Array": + case "Float64Array": + case "Int16Array": + case "Int32Array": + case "Int8Array": + case "NodeList": + case "Uint16Array": + case "Uint32Array": + case "Uint8Array": + case "Uint8ClampedArray": + return true; + } + return false; + } + function getIterationTypeOfIterable(use, typeKind, inputType, errorNode) { + if (isTypeAny(inputType)) { + return void 0; + } + const iterationTypes = getIterationTypesOfIterable(inputType, use, errorNode); + return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(typeKind)]; + } + function createIterationTypes(yieldType = neverType, returnType = neverType, nextType = unknownType) { + if (yieldType.flags & 67359327 /* Intrinsic */ && returnType.flags & (1 /* Any */ | 131072 /* Never */ | 2 /* Unknown */ | 16384 /* Void */ | 32768 /* Undefined */) && nextType.flags & (1 /* Any */ | 131072 /* Never */ | 2 /* Unknown */ | 16384 /* Void */ | 32768 /* Undefined */)) { + const id = getTypeListId([yieldType, returnType, nextType]); + let iterationTypes = iterationTypesCache.get(id); + if (!iterationTypes) { + iterationTypes = { yieldType, returnType, nextType }; + iterationTypesCache.set(id, iterationTypes); + } + return iterationTypes; + } + return { yieldType, returnType, nextType }; + } + function combineIterationTypes(array) { + let yieldTypes; + let returnTypes; + let nextTypes; + for (const iterationTypes of array) { + if (iterationTypes === void 0 || iterationTypes === noIterationTypes) { + continue; + } + if (iterationTypes === anyIterationTypes) { + return anyIterationTypes; + } + yieldTypes = append(yieldTypes, iterationTypes.yieldType); + returnTypes = append(returnTypes, iterationTypes.returnType); + nextTypes = append(nextTypes, iterationTypes.nextType); + } + if (yieldTypes || returnTypes || nextTypes) { + return createIterationTypes( + yieldTypes && getUnionType(yieldTypes), + returnTypes && getUnionType(returnTypes), + nextTypes && getIntersectionType(nextTypes) + ); + } + return noIterationTypes; + } + function getCachedIterationTypes(type, cacheKey) { + return type[cacheKey]; + } + function setCachedIterationTypes(type, cacheKey, cachedTypes2) { + return type[cacheKey] = cachedTypes2; + } + function getIterationTypesOfIterable(type, use, errorNode) { + var _a, _b; + if (type === silentNeverType) { + return silentNeverIterationTypes; + } + if (isTypeAny(type)) { + return anyIterationTypes; + } + if (!(type.flags & 1048576 /* Union */)) { + const errorOutputContainer = errorNode ? { errors: void 0, skipLogging: true } : void 0; + const iterationTypes2 = getIterationTypesOfIterableWorker(type, use, errorNode, errorOutputContainer); + if (iterationTypes2 === noIterationTypes) { + if (errorNode) { + const rootDiag = reportTypeNotIterableError(errorNode, type, !!(use & 2 /* AllowsAsyncIterablesFlag */)); + if (errorOutputContainer == null ? void 0 : errorOutputContainer.errors) { + addRelatedInfo(rootDiag, ...errorOutputContainer.errors); + } + } + return void 0; + } else if ((_a = errorOutputContainer == null ? void 0 : errorOutputContainer.errors) == null ? void 0 : _a.length) { + for (const diag2 of errorOutputContainer.errors) { + diagnostics.add(diag2); + } + } + return iterationTypes2; + } + const cacheKey = use & 2 /* AllowsAsyncIterablesFlag */ ? "iterationTypesOfAsyncIterable" : "iterationTypesOfIterable"; + const cachedTypes2 = getCachedIterationTypes(type, cacheKey); + if (cachedTypes2) return cachedTypes2 === noIterationTypes ? void 0 : cachedTypes2; + let allIterationTypes; + for (const constituent of type.types) { + const errorOutputContainer = errorNode ? { errors: void 0 } : void 0; + const iterationTypes2 = getIterationTypesOfIterableWorker(constituent, use, errorNode, errorOutputContainer); + if (iterationTypes2 === noIterationTypes) { + if (errorNode) { + const rootDiag = reportTypeNotIterableError(errorNode, type, !!(use & 2 /* AllowsAsyncIterablesFlag */)); + if (errorOutputContainer == null ? void 0 : errorOutputContainer.errors) { + addRelatedInfo(rootDiag, ...errorOutputContainer.errors); + } + } + setCachedIterationTypes(type, cacheKey, noIterationTypes); + return void 0; + } else if ((_b = errorOutputContainer == null ? void 0 : errorOutputContainer.errors) == null ? void 0 : _b.length) { + for (const diag2 of errorOutputContainer.errors) { + diagnostics.add(diag2); + } + } + allIterationTypes = append(allIterationTypes, iterationTypes2); + } + const iterationTypes = allIterationTypes ? combineIterationTypes(allIterationTypes) : noIterationTypes; + setCachedIterationTypes(type, cacheKey, iterationTypes); + return iterationTypes === noIterationTypes ? void 0 : iterationTypes; + } + function getAsyncFromSyncIterationTypes(iterationTypes, errorNode) { + if (iterationTypes === noIterationTypes) return noIterationTypes; + if (iterationTypes === anyIterationTypes) return anyIterationTypes; + const { yieldType, returnType, nextType } = iterationTypes; + if (errorNode) { + getGlobalAwaitedSymbol( + /*reportErrors*/ + true + ); + } + return createIterationTypes( + getAwaitedType(yieldType, errorNode) || anyType, + getAwaitedType(returnType, errorNode) || anyType, + nextType + ); + } + function getIterationTypesOfIterableWorker(type, use, errorNode, errorOutputContainer) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + let noCache = false; + if (use & 2 /* AllowsAsyncIterablesFlag */) { + const iterationTypes = getIterationTypesOfIterableCached(type, asyncIterationTypesResolver) || getIterationTypesOfIterableFast(type, asyncIterationTypesResolver); + if (iterationTypes) { + if (iterationTypes === noIterationTypes && errorNode) { + noCache = true; + } else { + return use & 8 /* ForOfFlag */ ? getAsyncFromSyncIterationTypes(iterationTypes, errorNode) : iterationTypes; + } + } + } + if (use & 1 /* AllowsSyncIterablesFlag */) { + let iterationTypes = getIterationTypesOfIterableCached(type, syncIterationTypesResolver) || getIterationTypesOfIterableFast(type, syncIterationTypesResolver); + if (iterationTypes) { + if (iterationTypes === noIterationTypes && errorNode) { + noCache = true; + } else { + if (use & 2 /* AllowsAsyncIterablesFlag */) { + if (iterationTypes !== noIterationTypes) { + iterationTypes = getAsyncFromSyncIterationTypes(iterationTypes, errorNode); + return noCache ? iterationTypes : setCachedIterationTypes(type, "iterationTypesOfAsyncIterable", iterationTypes); + } + } else { + return iterationTypes; + } + } + } + } + if (use & 2 /* AllowsAsyncIterablesFlag */) { + const iterationTypes = getIterationTypesOfIterableSlow(type, asyncIterationTypesResolver, errorNode, errorOutputContainer, noCache); + if (iterationTypes !== noIterationTypes) { + return iterationTypes; + } + } + if (use & 1 /* AllowsSyncIterablesFlag */) { + let iterationTypes = getIterationTypesOfIterableSlow(type, syncIterationTypesResolver, errorNode, errorOutputContainer, noCache); + if (iterationTypes !== noIterationTypes) { + if (use & 2 /* AllowsAsyncIterablesFlag */) { + iterationTypes = getAsyncFromSyncIterationTypes(iterationTypes, errorNode); + return noCache ? iterationTypes : setCachedIterationTypes(type, "iterationTypesOfAsyncIterable", iterationTypes); + } else { + return iterationTypes; + } + } + } + return noIterationTypes; + } + function getIterationTypesOfIterableCached(type, resolver) { + return getCachedIterationTypes(type, resolver.iterableCacheKey); + } + function getIterationTypesOfIterableFast(type, resolver) { + if (isReferenceToType2(type, resolver.getGlobalIterableType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIteratorObjectType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIterableIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalGeneratorType( + /*reportErrors*/ + false + ))) { + const [yieldType, returnType, nextType] = getTypeArguments(type); + return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType( + yieldType, + /*errorNode*/ + void 0 + ) || yieldType, resolver.resolveIterationType( + returnType, + /*errorNode*/ + void 0 + ) || returnType, nextType)); + } + if (isReferenceToSomeType(type, resolver.getGlobalBuiltinIteratorTypes())) { + const [yieldType] = getTypeArguments(type); + const returnType = getBuiltinIteratorReturnType(); + const nextType = unknownType; + return setCachedIterationTypes(type, resolver.iterableCacheKey, createIterationTypes(resolver.resolveIterationType( + yieldType, + /*errorNode*/ + void 0 + ) || yieldType, resolver.resolveIterationType( + returnType, + /*errorNode*/ + void 0 + ) || returnType, nextType)); + } + } + function getPropertyNameForKnownSymbolName(symbolName2) { + const ctorType = getGlobalESSymbolConstructorSymbol( + /*reportErrors*/ + false + ); + const uniqueType = ctorType && getTypeOfPropertyOfType(getTypeOfSymbol(ctorType), escapeLeadingUnderscores(symbolName2)); + return uniqueType && isTypeUsableAsPropertyName(uniqueType) ? getPropertyNameFromType(uniqueType) : `__@${symbolName2}`; + } + function getIterationTypesOfIterableSlow(type, resolver, errorNode, errorOutputContainer, noCache) { + const method = getPropertyOfType(type, getPropertyNameForKnownSymbolName(resolver.iteratorSymbolName)); + const methodType = method && !(method.flags & 16777216 /* Optional */) ? getTypeOfSymbol(method) : void 0; + if (isTypeAny(methodType)) { + return noCache ? anyIterationTypes : setCachedIterationTypes(type, resolver.iterableCacheKey, anyIterationTypes); + } + const allSignatures = methodType ? getSignaturesOfType(methodType, 0 /* Call */) : void 0; + const validSignatures = filter(allSignatures, (sig) => getMinArgumentCount(sig) === 0); + if (!some(validSignatures)) { + if (errorNode && some(allSignatures)) { + checkTypeAssignableTo( + type, + resolver.getGlobalIterableType( + /*reportErrors*/ + true + ), + errorNode, + /*headMessage*/ + void 0, + /*containingMessageChain*/ + void 0, + errorOutputContainer + ); + } + return noCache ? noIterationTypes : setCachedIterationTypes(type, resolver.iterableCacheKey, noIterationTypes); + } + const iteratorType = getIntersectionType(map(validSignatures, getReturnTypeOfSignature)); + const iterationTypes = getIterationTypesOfIteratorWorker(iteratorType, resolver, errorNode, errorOutputContainer, noCache) ?? noIterationTypes; + return noCache ? iterationTypes : setCachedIterationTypes(type, resolver.iterableCacheKey, iterationTypes); + } + function reportTypeNotIterableError(errorNode, type, allowAsyncIterables) { + const message = allowAsyncIterables ? Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator : Diagnostics.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator; + const suggestAwait = ( + // for (const x of Promise<...>) or [...Promise<...>] + !!getAwaitedTypeOfPromise(type) || !allowAsyncIterables && isForOfStatement(errorNode.parent) && errorNode.parent.expression === errorNode && getGlobalAsyncIterableType( + /*reportErrors*/ + false + ) !== emptyGenericType && isTypeAssignableTo(type, createTypeFromGenericGlobalType(getGlobalAsyncIterableType( + /*reportErrors*/ + false + ), [anyType, anyType, anyType])) + ); + return errorAndMaybeSuggestAwait(errorNode, suggestAwait, message, typeToString(type)); + } + function getIterationTypesOfIterator(type, resolver, errorNode, errorOutputContainer) { + return getIterationTypesOfIteratorWorker( + type, + resolver, + errorNode, + errorOutputContainer, + /*noCache*/ + false + ); + } + function getIterationTypesOfIteratorWorker(type, resolver, errorNode, errorOutputContainer, noCache) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + let iterationTypes = getIterationTypesOfIteratorCached(type, resolver) || getIterationTypesOfIteratorFast(type, resolver); + if (iterationTypes === noIterationTypes && errorNode) { + iterationTypes = void 0; + noCache = true; + } + iterationTypes ?? (iterationTypes = getIterationTypesOfIteratorSlow(type, resolver, errorNode, errorOutputContainer, noCache)); + return iterationTypes === noIterationTypes ? void 0 : iterationTypes; + } + function getIterationTypesOfIteratorCached(type, resolver) { + return getCachedIterationTypes(type, resolver.iteratorCacheKey); + } + function getIterationTypesOfIteratorFast(type, resolver) { + if (isReferenceToType2(type, resolver.getGlobalIterableIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIteratorType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalIteratorObjectType( + /*reportErrors*/ + false + )) || isReferenceToType2(type, resolver.getGlobalGeneratorType( + /*reportErrors*/ + false + ))) { + const [yieldType, returnType, nextType] = getTypeArguments(type); + return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); + } + if (isReferenceToSomeType(type, resolver.getGlobalBuiltinIteratorTypes())) { + const [yieldType] = getTypeArguments(type); + const returnType = getBuiltinIteratorReturnType(); + const nextType = unknownType; + return setCachedIterationTypes(type, resolver.iteratorCacheKey, createIterationTypes(yieldType, returnType, nextType)); + } + } + function isIteratorResult(type, kind) { + const doneType = getTypeOfPropertyOfType(type, "done") || falseType; + return isTypeAssignableTo(kind === 0 /* Yield */ ? falseType : trueType, doneType); + } + function isYieldIteratorResult(type) { + return isIteratorResult(type, 0 /* Yield */); + } + function isReturnIteratorResult(type) { + return isIteratorResult(type, 1 /* Return */); + } + function getIterationTypesOfIteratorResult(type) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + const cachedTypes2 = getCachedIterationTypes(type, "iterationTypesOfIteratorResult"); + if (cachedTypes2) { + return cachedTypes2; + } + if (isReferenceToType2(type, getGlobalIteratorYieldResultType( + /*reportErrors*/ + false + ))) { + const yieldType2 = getTypeArguments(type)[0]; + return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", createIterationTypes( + yieldType2, + /*returnType*/ + void 0, + /*nextType*/ + void 0 + )); + } + if (isReferenceToType2(type, getGlobalIteratorReturnResultType( + /*reportErrors*/ + false + ))) { + const returnType2 = getTypeArguments(type)[0]; + return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", createIterationTypes( + /*yieldType*/ + void 0, + returnType2, + /*nextType*/ + void 0 + )); + } + const yieldIteratorResult = filterType(type, isYieldIteratorResult); + const yieldType = yieldIteratorResult !== neverType ? getTypeOfPropertyOfType(yieldIteratorResult, "value") : void 0; + const returnIteratorResult = filterType(type, isReturnIteratorResult); + const returnType = returnIteratorResult !== neverType ? getTypeOfPropertyOfType(returnIteratorResult, "value") : void 0; + if (!yieldType && !returnType) { + return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", noIterationTypes); + } + return setCachedIterationTypes(type, "iterationTypesOfIteratorResult", createIterationTypes( + yieldType, + returnType || voidType, + /*nextType*/ + void 0 + )); + } + function getIterationTypesOfMethod(type, resolver, methodName, errorNode, errorOutputContainer) { + var _a, _b, _c, _d; + const method = getPropertyOfType(type, methodName); + if (!method && methodName !== "next") { + return void 0; + } + const methodType = method && !(methodName === "next" && method.flags & 16777216 /* Optional */) ? methodName === "next" ? getTypeOfSymbol(method) : getTypeWithFacts(getTypeOfSymbol(method), 2097152 /* NEUndefinedOrNull */) : void 0; + if (isTypeAny(methodType)) { + return anyIterationTypes; + } + const methodSignatures = methodType ? getSignaturesOfType(methodType, 0 /* Call */) : emptyArray; + if (methodSignatures.length === 0) { + if (errorNode) { + const diagnostic = methodName === "next" ? resolver.mustHaveANextMethodDiagnostic : resolver.mustBeAMethodDiagnostic; + if (errorOutputContainer) { + errorOutputContainer.errors ?? (errorOutputContainer.errors = []); + errorOutputContainer.errors.push(createDiagnosticForNode(errorNode, diagnostic, methodName)); + } else { + error2(errorNode, diagnostic, methodName); + } + } + return methodName === "next" ? noIterationTypes : void 0; + } + if ((methodType == null ? void 0 : methodType.symbol) && methodSignatures.length === 1) { + const globalGeneratorType = resolver.getGlobalGeneratorType( + /*reportErrors*/ + false + ); + const globalIteratorType = resolver.getGlobalIteratorType( + /*reportErrors*/ + false + ); + const isGeneratorMethod = ((_b = (_a = globalGeneratorType.symbol) == null ? void 0 : _a.members) == null ? void 0 : _b.get(methodName)) === methodType.symbol; + const isIteratorMethod = !isGeneratorMethod && ((_d = (_c = globalIteratorType.symbol) == null ? void 0 : _c.members) == null ? void 0 : _d.get(methodName)) === methodType.symbol; + if (isGeneratorMethod || isIteratorMethod) { + const globalType = isGeneratorMethod ? globalGeneratorType : globalIteratorType; + const { mapper } = methodType; + return createIterationTypes( + getMappedType(globalType.typeParameters[0], mapper), + getMappedType(globalType.typeParameters[1], mapper), + methodName === "next" ? getMappedType(globalType.typeParameters[2], mapper) : void 0 + ); + } + } + let methodParameterTypes; + let methodReturnTypes; + for (const signature of methodSignatures) { + if (methodName !== "throw" && some(signature.parameters)) { + methodParameterTypes = append(methodParameterTypes, getTypeAtPosition(signature, 0)); + } + methodReturnTypes = append(methodReturnTypes, getReturnTypeOfSignature(signature)); + } + let returnTypes; + let nextType; + if (methodName !== "throw") { + const methodParameterType = methodParameterTypes ? getUnionType(methodParameterTypes) : unknownType; + if (methodName === "next") { + nextType = methodParameterType; + } else if (methodName === "return") { + const resolvedMethodParameterType = resolver.resolveIterationType(methodParameterType, errorNode) || anyType; + returnTypes = append(returnTypes, resolvedMethodParameterType); + } + } + let yieldType; + const methodReturnType = methodReturnTypes ? getIntersectionType(methodReturnTypes) : neverType; + const resolvedMethodReturnType = resolver.resolveIterationType(methodReturnType, errorNode) || anyType; + const iterationTypes = getIterationTypesOfIteratorResult(resolvedMethodReturnType); + if (iterationTypes === noIterationTypes) { + if (errorNode) { + if (errorOutputContainer) { + errorOutputContainer.errors ?? (errorOutputContainer.errors = []); + errorOutputContainer.errors.push(createDiagnosticForNode(errorNode, resolver.mustHaveAValueDiagnostic, methodName)); + } else { + error2(errorNode, resolver.mustHaveAValueDiagnostic, methodName); + } + } + yieldType = anyType; + returnTypes = append(returnTypes, anyType); + } else { + yieldType = iterationTypes.yieldType; + returnTypes = append(returnTypes, iterationTypes.returnType); + } + return createIterationTypes(yieldType, getUnionType(returnTypes), nextType); + } + function getIterationTypesOfIteratorSlow(type, resolver, errorNode, errorOutputContainer, noCache) { + const iterationTypes = combineIterationTypes([ + getIterationTypesOfMethod(type, resolver, "next", errorNode, errorOutputContainer), + getIterationTypesOfMethod(type, resolver, "return", errorNode, errorOutputContainer), + getIterationTypesOfMethod(type, resolver, "throw", errorNode, errorOutputContainer) + ]); + return noCache ? iterationTypes : setCachedIterationTypes(type, resolver.iteratorCacheKey, iterationTypes); + } + function getIterationTypeOfGeneratorFunctionReturnType(kind, returnType, isAsyncGenerator) { + if (isTypeAny(returnType)) { + return void 0; + } + const iterationTypes = getIterationTypesOfGeneratorFunctionReturnType(returnType, isAsyncGenerator); + return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(kind)]; + } + function getIterationTypesOfGeneratorFunctionReturnType(type, isAsyncGenerator) { + if (isTypeAny(type)) { + return anyIterationTypes; + } + const use = isAsyncGenerator ? 2 /* AsyncGeneratorReturnType */ : 1 /* GeneratorReturnType */; + const resolver = isAsyncGenerator ? asyncIterationTypesResolver : syncIterationTypesResolver; + return getIterationTypesOfIterable( + type, + use, + /*errorNode*/ + void 0 + ) || getIterationTypesOfIterator( + type, + resolver, + /*errorNode*/ + void 0, + /*errorOutputContainer*/ + void 0 + ); + } + function checkBreakOrContinueStatement(node) { + if (!checkGrammarStatementInAmbientContext(node)) checkGrammarBreakOrContinueStatement(node); + } + function unwrapReturnType(returnType, functionFlags) { + const isGenerator = !!(functionFlags & 1 /* Generator */); + const isAsync = !!(functionFlags & 2 /* Async */); + if (isGenerator) { + const returnIterationType = getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, returnType, isAsync); + if (!returnIterationType) { + return errorType; + } + return isAsync ? getAwaitedTypeNoAlias(unwrapAwaitedType(returnIterationType)) : returnIterationType; + } + return isAsync ? getAwaitedTypeNoAlias(returnType) || errorType : returnType; + } + function isUnwrappedReturnTypeUndefinedVoidOrAny(func, returnType) { + const type = unwrapReturnType(returnType, getFunctionFlags(func)); + return !!(type && (maybeTypeOfKind(type, 16384 /* Void */) || type.flags & (1 /* Any */ | 32768 /* Undefined */))); + } + function checkReturnStatement(node) { + if (checkGrammarStatementInAmbientContext(node)) { + return; + } + const container = getContainingFunctionOrClassStaticBlock(node); + if (container && isClassStaticBlockDeclaration(container)) { + grammarErrorOnFirstToken(node, Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block); + return; + } + if (!container) { + grammarErrorOnFirstToken(node, Diagnostics.A_return_statement_can_only_be_used_within_a_function_body); + return; + } + const signature = getSignatureFromDeclaration(container); + const returnType = getReturnTypeOfSignature(signature); + if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) { + const exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; + if (container.kind === 179 /* SetAccessor */) { + if (node.expression) { + error2(node, Diagnostics.Setters_cannot_return_a_value); + } + } else if (container.kind === 177 /* Constructor */) { + const exprType2 = node.expression ? checkExpressionCached(node.expression) : undefinedType; + if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType2, returnType, node, node.expression)) { + error2(node, Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); + } + } else if (getReturnTypeFromAnnotation(container)) { + const unwrappedReturnType = unwrapReturnType(returnType, getFunctionFlags(container)) ?? returnType; + checkReturnExpression(container, unwrappedReturnType, node, node.expression, exprType); + } + } else if (container.kind !== 177 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeUndefinedVoidOrAny(container, returnType)) { + error2(node, Diagnostics.Not_all_code_paths_return_a_value); + } + } + function checkReturnExpression(container, unwrappedReturnType, node, expr, exprType, inConditionalExpression = false) { + const excludeJSDocTypeAssertions = isInJSFile(node); + const functionFlags = getFunctionFlags(container); + if (expr) { + const unwrappedExpr = skipParentheses(expr, excludeJSDocTypeAssertions); + if (isConditionalExpression(unwrappedExpr)) { + checkReturnExpression( + container, + unwrappedReturnType, + node, + unwrappedExpr.whenTrue, + checkExpression(unwrappedExpr.whenTrue), + /*inConditionalExpression*/ + true + ); + checkReturnExpression( + container, + unwrappedReturnType, + node, + unwrappedExpr.whenFalse, + checkExpression(unwrappedExpr.whenFalse), + /*inConditionalExpression*/ + true + ); + return; + } + } + const inReturnStatement = node.kind === 254 /* ReturnStatement */; + const unwrappedExprType = functionFlags & 2 /* Async */ ? checkAwaitedType( + exprType, + /*withAlias*/ + false, + node, + Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + ) : exprType; + const effectiveExpr = expr && getEffectiveCheckNode(expr); + const errorNode = inReturnStatement && !inConditionalExpression ? node : effectiveExpr; + checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, errorNode, effectiveExpr); + } + function checkWithStatement(node) { + if (!checkGrammarStatementInAmbientContext(node)) { + if (node.flags & 65536 /* AwaitContext */) { + grammarErrorOnFirstToken(node, Diagnostics.with_statements_are_not_allowed_in_an_async_function_block); + } + } + checkExpression(node.expression); + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + const start = getSpanOfTokenAtPosition(sourceFile, node.pos).start; + const end = node.statement.pos; + grammarErrorAtPos(sourceFile, start, end - start, Diagnostics.The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any); + } + } + function checkSwitchStatement(node) { + checkGrammarStatementInAmbientContext(node); + let firstDefaultClause; + let hasDuplicateDefaultClause = false; + const expressionType = checkExpression(node.expression); + forEach(node.caseBlock.clauses, (clause) => { + if (clause.kind === 298 /* DefaultClause */ && !hasDuplicateDefaultClause) { + if (firstDefaultClause === void 0) { + firstDefaultClause = clause; + } else { + grammarErrorOnNode(clause, Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement); + hasDuplicateDefaultClause = true; + } + } + if (clause.kind === 297 /* CaseClause */) { + addLazyDiagnostic(createLazyCaseClauseDiagnostics(clause)); + } + forEach(clause.statements, checkSourceElement); + if (compilerOptions.noFallthroughCasesInSwitch && clause.fallthroughFlowNode && isReachableFlowNode(clause.fallthroughFlowNode)) { + error2(clause, Diagnostics.Fallthrough_case_in_switch); + } + function createLazyCaseClauseDiagnostics(clause2) { + return () => { + const caseType = checkExpression(clause2.expression); + if (!isTypeEqualityComparableTo(expressionType, caseType)) { + checkTypeComparableTo( + caseType, + expressionType, + clause2.expression, + /*headMessage*/ + void 0 + ); + } + }; + } + }); + if (node.caseBlock.locals) { + registerForUnusedIdentifiersCheck(node.caseBlock); + } + } + function checkLabeledStatement(node) { + if (!checkGrammarStatementInAmbientContext(node)) { + findAncestor(node.parent, (current) => { + if (isFunctionLike(current)) { + return "quit"; + } + if (current.kind === 257 /* LabeledStatement */ && current.label.escapedText === node.label.escapedText) { + grammarErrorOnNode(node.label, Diagnostics.Duplicate_label_0, getTextOfNode(node.label)); + return true; + } + return false; + }); + } + checkSourceElement(node.statement); + } + function checkThrowStatement(node) { + if (!checkGrammarStatementInAmbientContext(node)) { + if (isIdentifier(node.expression) && !node.expression.escapedText) { + grammarErrorAfterFirstToken(node, Diagnostics.Line_break_not_permitted_here); + } + } + if (node.expression) { + checkExpression(node.expression); + } + } + function checkTryStatement(node) { + checkGrammarStatementInAmbientContext(node); + checkBlock(node.tryBlock); + const catchClause = node.catchClause; + if (catchClause) { + if (catchClause.variableDeclaration) { + const declaration = catchClause.variableDeclaration; + checkVariableLikeDeclaration(declaration); + const typeNode = getEffectiveTypeAnnotationNode(declaration); + if (typeNode) { + const type = getTypeFromTypeNode(typeNode); + if (type && !(type.flags & 3 /* AnyOrUnknown */)) { + grammarErrorOnFirstToken(typeNode, Diagnostics.Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified); + } + } else if (declaration.initializer) { + grammarErrorOnFirstToken(declaration.initializer, Diagnostics.Catch_clause_variable_cannot_have_an_initializer); + } else { + const blockLocals = catchClause.block.locals; + if (blockLocals) { + forEachKey(catchClause.locals, (caughtName) => { + const blockLocal = blockLocals.get(caughtName); + if ((blockLocal == null ? void 0 : blockLocal.valueDeclaration) && (blockLocal.flags & 2 /* BlockScopedVariable */) !== 0) { + grammarErrorOnNode(blockLocal.valueDeclaration, Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause, unescapeLeadingUnderscores(caughtName)); + } + }); + } + } + } + checkBlock(catchClause.block); + } + if (node.finallyBlock) { + checkBlock(node.finallyBlock); + } + } + function checkIndexConstraints(type, symbol, isStaticIndex) { + const indexInfos = getIndexInfosOfType(type); + if (indexInfos.length === 0) { + return; + } + for (const prop of getPropertiesOfObjectType(type)) { + if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) { + checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty( + prop, + 8576 /* StringOrNumberLiteralOrUnique */, + /*includeNonPublic*/ + true + ), getNonMissingTypeOfSymbol(prop)); + } + } + const typeDeclaration = symbol.valueDeclaration; + if (typeDeclaration && isClassLike(typeDeclaration)) { + for (const member of typeDeclaration.members) { + if ((!isStaticIndex && !isStatic(member) || isStaticIndex && isStatic(member)) && !hasBindableName(member)) { + const symbol2 = getSymbolOfDeclaration(member); + checkIndexConstraintForProperty(type, symbol2, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol2)); + } + } + } + if (indexInfos.length > 1) { + for (const info of indexInfos) { + checkIndexConstraintForIndexSignature(type, info); + } + } + } + function checkIndexConstraintForProperty(type, prop, propNameType, propType) { + const declaration = prop.valueDeclaration; + const name = getNameOfDeclaration(declaration); + if (name && isPrivateIdentifier(name)) { + return; + } + const indexInfos = getApplicableIndexInfos(type, propNameType); + const interfaceDeclaration = getObjectFlags(type) & 2 /* Interface */ ? getDeclarationOfKind(type.symbol, 265 /* InterfaceDeclaration */) : void 0; + const propDeclaration = declaration && declaration.kind === 227 /* BinaryExpression */ || name && name.kind === 168 /* ComputedPropertyName */ ? declaration : void 0; + const localPropDeclaration = getParentOfSymbol(prop) === type.symbol ? declaration : void 0; + for (const info of indexInfos) { + const localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfDeclaration(info.declaration)) === type.symbol ? info.declaration : void 0; + const errorNode = localPropDeclaration || localIndexDeclaration || (interfaceDeclaration && !some(getBaseTypes(type), (base) => !!getPropertyOfObjectType(base, prop.escapedName) && !!getIndexTypeOfType(base, info.keyType)) ? interfaceDeclaration : void 0); + if (errorNode && !isTypeAssignableTo(propType, info.type)) { + const diagnostic = createError(errorNode, Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3, symbolToString(prop), typeToString(propType), typeToString(info.keyType), typeToString(info.type)); + if (propDeclaration && errorNode !== propDeclaration) { + addRelatedInfo(diagnostic, createDiagnosticForNode(propDeclaration, Diagnostics._0_is_declared_here, symbolToString(prop))); + } + diagnostics.add(diagnostic); + } + } + } + function checkIndexConstraintForIndexSignature(type, checkInfo) { + const declaration = checkInfo.declaration; + const indexInfos = getApplicableIndexInfos(type, checkInfo.keyType); + const interfaceDeclaration = getObjectFlags(type) & 2 /* Interface */ ? getDeclarationOfKind(type.symbol, 265 /* InterfaceDeclaration */) : void 0; + const localCheckDeclaration = declaration && getParentOfSymbol(getSymbolOfDeclaration(declaration)) === type.symbol ? declaration : void 0; + for (const info of indexInfos) { + if (info === checkInfo) continue; + const localIndexDeclaration = info.declaration && getParentOfSymbol(getSymbolOfDeclaration(info.declaration)) === type.symbol ? info.declaration : void 0; + const errorNode = localCheckDeclaration || localIndexDeclaration || (interfaceDeclaration && !some(getBaseTypes(type), (base) => !!getIndexInfoOfType(base, checkInfo.keyType) && !!getIndexTypeOfType(base, info.keyType)) ? interfaceDeclaration : void 0); + if (errorNode && !isTypeAssignableTo(checkInfo.type, info.type)) { + error2(errorNode, Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3, typeToString(checkInfo.keyType), typeToString(checkInfo.type), typeToString(info.keyType), typeToString(info.type)); + } + } + } + function checkTypeNameIsReserved(name, message) { + switch (name.escapedText) { + case "any": + case "unknown": + case "never": + case "number": + case "bigint": + case "boolean": + case "string": + case "symbol": + case "void": + case "object": + case "undefined": + error2(name, message, name.escapedText); + } + } + function checkClassNameCollisionWithObject(name) { + if (languageVersion >= 1 /* ES5 */ && name.escapedText === "Object" && host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < 5 /* ES2015 */) { + error2(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0, ModuleKind[moduleKind]); + } + } + function checkUnmatchedJSDocParameters(node) { + const jsdocParameters = filter(getJSDocTags(node), isJSDocParameterTag); + if (!length(jsdocParameters)) return; + const isJs = isInJSFile(node); + const parameters = /* @__PURE__ */ new Set(); + const excludedParameters = /* @__PURE__ */ new Set(); + forEach(node.parameters, ({ name }, index) => { + if (isIdentifier(name)) { + parameters.add(name.escapedText); + } + if (isBindingPattern(name)) { + excludedParameters.add(index); + } + }); + const containsArguments = containsArgumentsReference(node); + if (containsArguments) { + const lastJSDocParamIndex = jsdocParameters.length - 1; + const lastJSDocParam = jsdocParameters[lastJSDocParamIndex]; + if (isJs && lastJSDocParam && isIdentifier(lastJSDocParam.name) && lastJSDocParam.typeExpression && lastJSDocParam.typeExpression.type && !parameters.has(lastJSDocParam.name.escapedText) && !excludedParameters.has(lastJSDocParamIndex) && !isArrayType(getTypeFromTypeNode(lastJSDocParam.typeExpression.type))) { + error2(lastJSDocParam.name, Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_had_an_array_type, idText(lastJSDocParam.name)); + } + } else { + forEach(jsdocParameters, ({ name, isNameFirst }, index) => { + if (excludedParameters.has(index) || isIdentifier(name) && parameters.has(name.escapedText)) { + return; + } + if (isQualifiedName(name)) { + if (isJs) { + error2(name, Diagnostics.Qualified_name_0_is_not_allowed_without_a_leading_param_object_1, entityNameToString(name), entityNameToString(name.left)); + } + } else { + if (!isNameFirst) { + errorOrSuggestion(isJs, name, Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name, idText(name)); + } + } + }); + } + } + function checkTypeParameters(typeParameterDeclarations) { + let seenDefault = false; + if (typeParameterDeclarations) { + for (let i = 0; i < typeParameterDeclarations.length; i++) { + const node = typeParameterDeclarations[i]; + checkTypeParameter(node); + addLazyDiagnostic(createCheckTypeParameterDiagnostic(node, i)); + } + } + function createCheckTypeParameterDiagnostic(node, i) { + return () => { + if (node.default) { + seenDefault = true; + checkTypeParametersNotReferenced(node.default, typeParameterDeclarations, i); + } else if (seenDefault) { + error2(node, Diagnostics.Required_type_parameters_may_not_follow_optional_type_parameters); + } + for (let j = 0; j < i; j++) { + if (typeParameterDeclarations[j].symbol === node.symbol) { + error2(node.name, Diagnostics.Duplicate_identifier_0, declarationNameToString(node.name)); + } + } + }; + } + } + function checkTypeParametersNotReferenced(root, typeParameters, index) { + visit(root); + function visit(node) { + if (node.kind === 184 /* TypeReference */) { + const type = getTypeFromTypeReference(node); + if (type.flags & 262144 /* TypeParameter */) { + for (let i = index; i < typeParameters.length; i++) { + if (type.symbol === getSymbolOfDeclaration(typeParameters[i])) { + error2(node, Diagnostics.Type_parameter_defaults_can_only_reference_previously_declared_type_parameters); + } + } + } + } + forEachChild(node, visit); + } + } + function checkTypeParameterListsIdentical(symbol) { + if (symbol.declarations && symbol.declarations.length === 1) { + return; + } + const links = getSymbolLinks(symbol); + if (!links.typeParametersChecked) { + links.typeParametersChecked = true; + const declarations = getClassOrInterfaceDeclarationsOfSymbol(symbol); + if (!declarations || declarations.length <= 1) { + return; + } + const type = getDeclaredTypeOfSymbol(symbol); + if (!areTypeParametersIdentical(declarations, type.localTypeParameters, getEffectiveTypeParameterDeclarations)) { + const name = symbolToString(symbol); + for (const declaration of declarations) { + error2(declaration.name, Diagnostics.All_declarations_of_0_must_have_identical_type_parameters, name); + } + } + } + } + function areTypeParametersIdentical(declarations, targetParameters, getTypeParameterDeclarations) { + const maxTypeArgumentCount = length(targetParameters); + const minTypeArgumentCount = getMinTypeArgumentCount(targetParameters); + for (const declaration of declarations) { + const sourceParameters = getTypeParameterDeclarations(declaration); + const numTypeParameters = sourceParameters.length; + if (numTypeParameters < minTypeArgumentCount || numTypeParameters > maxTypeArgumentCount) { + return false; + } + for (let i = 0; i < numTypeParameters; i++) { + const source = sourceParameters[i]; + const target = targetParameters[i]; + if (source.name.escapedText !== target.symbol.escapedName) { + return false; + } + const constraint = getEffectiveConstraintOfTypeParameter(source); + const sourceConstraint = constraint && getTypeFromTypeNode(constraint); + const targetConstraint = getConstraintOfTypeParameter(target); + if (sourceConstraint && targetConstraint && !isTypeIdenticalTo(sourceConstraint, targetConstraint)) { + return false; + } + const sourceDefault = source.default && getTypeFromTypeNode(source.default); + const targetDefault = getDefaultFromTypeParameter(target); + if (sourceDefault && targetDefault && !isTypeIdenticalTo(sourceDefault, targetDefault)) { + return false; + } + } + } + return true; + } + function getFirstTransformableStaticClassElement(node) { + const willTransformStaticElementsOfDecoratedClass = !legacyDecorators && languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators && classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + false, + node + ); + const willTransformPrivateElementsOrClassStaticBlocks = languageVersion < LanguageFeatureMinimumTarget.PrivateNamesAndClassStaticBlocks || languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators; + const willTransformInitializers = !emitStandardClassFields; + if (willTransformStaticElementsOfDecoratedClass || willTransformPrivateElementsOrClassStaticBlocks) { + for (const member of node.members) { + if (willTransformStaticElementsOfDecoratedClass && classElementOrClassElementParameterIsDecorated( + /*useLegacyDecorators*/ + false, + member, + node + )) { + return firstOrUndefined(getDecorators(node)) ?? node; + } else if (willTransformPrivateElementsOrClassStaticBlocks) { + if (isClassStaticBlockDeclaration(member)) { + return member; + } else if (isStatic(member)) { + if (isPrivateIdentifierClassElementDeclaration(member) || willTransformInitializers && isInitializedProperty(member)) { + return member; + } + } + } + } + } + } + function checkClassExpressionExternalHelpers(node) { + if (node.name) return; + const parent2 = walkUpOuterExpressions(node); + if (!isNamedEvaluationSource(parent2)) return; + const willTransformESDecorators = !legacyDecorators && languageVersion < LanguageFeatureMinimumTarget.ClassAndClassElementDecorators; + let location; + if (willTransformESDecorators && classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + false, + node + )) { + location = firstOrUndefined(getDecorators(node)) ?? node; + } else { + location = getFirstTransformableStaticClassElement(node); + } + if (location) { + checkExternalEmitHelpers(location, 4194304 /* SetFunctionName */); + if ((isPropertyAssignment(parent2) || isPropertyDeclaration(parent2) || isBindingElement(parent2)) && isComputedPropertyName(parent2.name)) { + checkExternalEmitHelpers(location, 8388608 /* PropKey */); + } + } + } + function checkClassExpression(node) { + checkClassLikeDeclaration(node); + checkNodeDeferred(node); + checkClassExpressionExternalHelpers(node); + return getTypeOfSymbol(getSymbolOfDeclaration(node)); + } + function checkClassExpressionDeferred(node) { + forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); + } + function checkClassDeclaration(node) { + const firstDecorator = find(node.modifiers, isDecorator); + if (legacyDecorators && firstDecorator && some(node.members, (p) => hasStaticModifier(p) && isPrivateIdentifierClassElementDeclaration(p))) { + grammarErrorOnNode(firstDecorator, Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator); + } + if (!node.name && !hasSyntacticModifier(node, 2048 /* Default */)) { + grammarErrorOnFirstToken(node, Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name); + } + checkClassLikeDeclaration(node); + forEach(node.members, checkSourceElement); + registerForUnusedIdentifiersCheck(node); + } + function checkClassLikeDeclaration(node) { + checkGrammarClassLikeDeclaration(node); + checkDecorators(node); + checkCollisionsForDeclarationName(node, node.name); + checkTypeParameters(getEffectiveTypeParameterDeclarations(node)); + checkExportsOnMergedDeclarations(node); + const symbol = getSymbolOfDeclaration(node); + const type = getDeclaredTypeOfSymbol(symbol); + const typeWithThis = getTypeWithThisArgument(type); + const staticType = getTypeOfSymbol(symbol); + checkTypeParameterListsIdentical(symbol); + checkFunctionOrConstructorSymbol(symbol); + checkClassForDuplicateDeclarations(node); + const nodeInAmbientContext = !!(node.flags & 33554432 /* Ambient */); + if (!nodeInAmbientContext) { + checkClassForStaticPropertyNameConflicts(node); + } + const baseTypeNode = getEffectiveBaseTypeNode(node); + if (baseTypeNode) { + forEach(baseTypeNode.typeArguments, checkSourceElement); + if (languageVersion < LanguageFeatureMinimumTarget.Classes) { + checkExternalEmitHelpers(baseTypeNode.parent, 1 /* Extends */); + } + const extendsNode = getClassExtendsHeritageElement(node); + if (extendsNode && extendsNode !== baseTypeNode) { + checkExpression(extendsNode.expression); + } + const baseTypes = getBaseTypes(type); + if (baseTypes.length) { + addLazyDiagnostic(() => { + const baseType = baseTypes[0]; + const baseConstructorType = getBaseConstructorTypeOfClass(type); + const staticBaseType = getApparentType(baseConstructorType); + checkBaseTypeAccessibility(staticBaseType, baseTypeNode); + checkSourceElement(baseTypeNode.expression); + if (some(baseTypeNode.typeArguments)) { + forEach(baseTypeNode.typeArguments, checkSourceElement); + for (const constructor of getConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode)) { + if (!checkTypeArgumentConstraints(baseTypeNode, constructor.typeParameters)) { + break; + } + } + } + const baseWithThis = getTypeWithThisArgument(baseType, type.thisType); + if (!checkTypeAssignableTo( + typeWithThis, + baseWithThis, + /*errorNode*/ + void 0 + )) { + issueMemberSpecificError(node, typeWithThis, baseWithThis, Diagnostics.Class_0_incorrectly_extends_base_class_1); + } else { + checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); + } + if (baseConstructorType.flags & 8650752 /* TypeVariable */) { + if (!isMixinConstructorType(staticType)) { + error2(node.name || node, Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any); + } else { + const constructSignatures = getSignaturesOfType(baseConstructorType, 1 /* Construct */); + if (constructSignatures.some((signature) => signature.flags & 4 /* Abstract */) && !hasSyntacticModifier(node, 64 /* Abstract */)) { + error2(node.name || node, Diagnostics.A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_be_declared_abstract); + } + } + } + if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32 /* Class */) && !(baseConstructorType.flags & 8650752 /* TypeVariable */)) { + const constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode); + if (forEach(constructors, (sig) => !isJSConstructor(sig.declaration) && !isTypeIdenticalTo(getReturnTypeOfSignature(sig), baseType))) { + error2(baseTypeNode.expression, Diagnostics.Base_constructors_must_all_have_the_same_return_type); + } + } + checkKindsOfPropertyMemberOverrides(type, baseType); + }); + } + } + checkMembersForOverrideModifier(node, type, typeWithThis, staticType); + const implementedTypeNodes = getEffectiveImplementsTypeNodes(node); + if (implementedTypeNodes) { + for (const typeRefNode of implementedTypeNodes) { + if (!isEntityNameExpression(typeRefNode.expression) || isOptionalChain(typeRefNode.expression)) { + error2(typeRefNode.expression, Diagnostics.A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments); + } + checkTypeReferenceNode(typeRefNode); + addLazyDiagnostic(createImplementsDiagnostics(typeRefNode)); + } + } + addLazyDiagnostic(() => { + checkIndexConstraints(type, symbol); + checkIndexConstraints( + staticType, + symbol, + /*isStaticIndex*/ + true + ); + checkTypeForDuplicateIndexSignatures(node); + checkPropertyInitialization(node); + }); + function createImplementsDiagnostics(typeRefNode) { + return () => { + const t = getReducedType(getTypeFromTypeNode(typeRefNode)); + if (!isErrorType(t)) { + if (isValidBaseType(t)) { + const genericDiag = t.symbol && t.symbol.flags & 32 /* Class */ ? Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass : Diagnostics.Class_0_incorrectly_implements_interface_1; + const baseWithThis = getTypeWithThisArgument(t, type.thisType); + if (!checkTypeAssignableTo( + typeWithThis, + baseWithThis, + /*errorNode*/ + void 0 + )) { + issueMemberSpecificError(node, typeWithThis, baseWithThis, genericDiag); + } + } else { + error2(typeRefNode, Diagnostics.A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_members); + } + } + }; + } + } + function checkMembersForOverrideModifier(node, type, typeWithThis, staticType) { + const baseTypeNode = getEffectiveBaseTypeNode(node); + const baseTypes = baseTypeNode && getBaseTypes(type); + const baseWithThis = (baseTypes == null ? void 0 : baseTypes.length) ? getTypeWithThisArgument(first(baseTypes), type.thisType) : void 0; + const baseStaticType = getBaseConstructorTypeOfClass(type); + for (const member of node.members) { + if (hasAmbientModifier(member)) { + continue; + } + if (isConstructorDeclaration(member)) { + forEach(member.parameters, (param) => { + if (isParameterPropertyDeclaration(param, member)) { + checkExistingMemberForOverrideModifier( + node, + staticType, + baseStaticType, + baseWithThis, + type, + typeWithThis, + param, + /*memberIsParameterProperty*/ + true + ); + } + }); + } + checkExistingMemberForOverrideModifier( + node, + staticType, + baseStaticType, + baseWithThis, + type, + typeWithThis, + member, + /*memberIsParameterProperty*/ + false + ); + } + } + function checkExistingMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, member, memberIsParameterProperty, reportErrors2 = true) { + const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member); + if (!declaredProp) { + return 0 /* Ok */; + } + return checkMemberForOverrideModifier( + node, + staticType, + baseStaticType, + baseWithThis, + type, + typeWithThis, + hasOverrideModifier(member), + hasAbstractModifier(member), + isStatic(member), + memberIsParameterProperty, + declaredProp, + reportErrors2 ? member : void 0 + ); + } + function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, member, errorNode) { + const isJs = isInJSFile(node); + const nodeInAmbientContext = !!(node.flags & 33554432 /* Ambient */); + if (memberHasOverrideModifier && (member == null ? void 0 : member.valueDeclaration) && isClassElement(member.valueDeclaration) && member.valueDeclaration.name && isNonBindableDynamicName(member.valueDeclaration.name)) { + error2( + errorNode, + isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic : Diagnostics.This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic + ); + return 2 /* HasInvalidOverride */; + } + if (baseWithThis && (memberHasOverrideModifier || compilerOptions.noImplicitOverride)) { + const thisType = memberIsStatic ? staticType : typeWithThis; + const baseType = memberIsStatic ? baseStaticType : baseWithThis; + const prop = getPropertyOfType(thisType, member.escapedName); + const baseProp = getPropertyOfType(baseType, member.escapedName); + const baseClassName = typeToString(baseWithThis); + if (prop && !baseProp && memberHasOverrideModifier) { + if (errorNode) { + const suggestion = getSuggestedSymbolForNonexistentClassMember(symbolName(member), baseType); + suggestion ? error2( + errorNode, + isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1 : Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1, + baseClassName, + symbolToString(suggestion) + ) : error2( + errorNode, + isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0 : Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0, + baseClassName + ); + } + return 2 /* HasInvalidOverride */; + } else if (prop && (baseProp == null ? void 0 : baseProp.declarations) && compilerOptions.noImplicitOverride && !nodeInAmbientContext) { + const baseHasAbstract = some(baseProp.declarations, hasAbstractModifier); + if (memberHasOverrideModifier) { + return 0 /* Ok */; + } + if (!baseHasAbstract) { + if (errorNode) { + const diag2 = memberIsParameterProperty ? isJs ? Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 : Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0 : isJs ? Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0 : Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0; + error2(errorNode, diag2, baseClassName); + } + return 1 /* NeedsOverride */; + } else if (memberHasAbstractModifier && baseHasAbstract) { + if (errorNode) { + error2(errorNode, Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0, baseClassName); + } + return 1 /* NeedsOverride */; + } + } + } else if (memberHasOverrideModifier) { + if (errorNode) { + const className = typeToString(type); + error2( + errorNode, + isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class : Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class, + className + ); + } + return 2 /* HasInvalidOverride */; + } + return 0 /* Ok */; + } + function issueMemberSpecificError(node, typeWithThis, baseWithThis, broadDiag) { + let issuedMemberError = false; + for (const member of node.members) { + if (isStatic(member)) { + continue; + } + const declaredProp = member.name && getSymbolAtLocation(member.name) || getSymbolAtLocation(member); + if (declaredProp) { + const prop = getPropertyOfType(typeWithThis, declaredProp.escapedName); + const baseProp = getPropertyOfType(baseWithThis, declaredProp.escapedName); + if (prop && baseProp) { + const rootChain = () => chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2, + symbolToString(declaredProp), + typeToString(typeWithThis), + typeToString(baseWithThis) + ); + if (!checkTypeAssignableTo( + getTypeOfSymbol(prop), + getTypeOfSymbol(baseProp), + member.name || member, + /*headMessage*/ + void 0, + rootChain + )) { + issuedMemberError = true; + } + } + } + } + if (!issuedMemberError) { + checkTypeAssignableTo(typeWithThis, baseWithThis, node.name || node, broadDiag); + } + } + function checkBaseTypeAccessibility(type, node) { + const signatures = getSignaturesOfType(type, 1 /* Construct */); + if (signatures.length) { + const declaration = signatures[0].declaration; + if (declaration && hasEffectiveModifier(declaration, 2 /* Private */)) { + const typeClassDeclaration = getClassLikeDeclarationOfSymbol(type.symbol); + if (!isNodeWithinClass(node, typeClassDeclaration)) { + error2(node, Diagnostics.Cannot_extend_a_class_0_Class_constructor_is_marked_as_private, getFullyQualifiedName(type.symbol)); + } + } + } + } + function getMemberOverrideModifierStatus(node, member, memberSymbol) { + if (!member.name) { + return 0 /* Ok */; + } + const classSymbol = getSymbolOfDeclaration(node); + const type = getDeclaredTypeOfSymbol(classSymbol); + const typeWithThis = getTypeWithThisArgument(type); + const staticType = getTypeOfSymbol(classSymbol); + const baseTypeNode = getEffectiveBaseTypeNode(node); + const baseTypes = baseTypeNode && getBaseTypes(type); + const baseWithThis = (baseTypes == null ? void 0 : baseTypes.length) ? getTypeWithThisArgument(first(baseTypes), type.thisType) : void 0; + const baseStaticType = getBaseConstructorTypeOfClass(type); + const memberHasOverrideModifier = member.parent ? hasOverrideModifier(member) : hasSyntacticModifier(member, 16 /* Override */); + return checkMemberForOverrideModifier( + node, + staticType, + baseStaticType, + baseWithThis, + type, + typeWithThis, + memberHasOverrideModifier, + hasAbstractModifier(member), + isStatic(member), + /*memberIsParameterProperty*/ + false, + memberSymbol + ); + } + function getTargetSymbol(s) { + return getCheckFlags(s) & 1 /* Instantiated */ ? s.links.target : s; + } + function getClassOrInterfaceDeclarationsOfSymbol(symbol) { + return filter(symbol.declarations, (d) => d.kind === 264 /* ClassDeclaration */ || d.kind === 265 /* InterfaceDeclaration */); + } + function checkKindsOfPropertyMemberOverrides(type, baseType) { + var _a, _b, _c, _d, _e; + const baseProperties = getPropertiesOfType(baseType); + const notImplementedInfo = /* @__PURE__ */ new Map(); + basePropertyCheck: for (const baseProperty of baseProperties) { + const base = getTargetSymbol(baseProperty); + if (base.flags & 4194304 /* Prototype */) { + continue; + } + const baseSymbol = getPropertyOfObjectType(type, base.escapedName); + if (!baseSymbol) { + continue; + } + const derived = getTargetSymbol(baseSymbol); + const baseDeclarationFlags = getDeclarationModifierFlagsFromSymbol(base); + Debug.assert(!!derived, "derived should point to something, even if it is the base class' declaration."); + if (derived === base) { + const derivedClassDecl = getClassLikeDeclarationOfSymbol(type.symbol); + if (baseDeclarationFlags & 64 /* Abstract */ && (!derivedClassDecl || !hasSyntacticModifier(derivedClassDecl, 64 /* Abstract */))) { + for (const otherBaseType of getBaseTypes(type)) { + if (otherBaseType === baseType) continue; + const baseSymbol2 = getPropertyOfObjectType(otherBaseType, base.escapedName); + const derivedElsewhere = baseSymbol2 && getTargetSymbol(baseSymbol2); + if (derivedElsewhere && derivedElsewhere !== base) { + continue basePropertyCheck; + } + } + const baseTypeName = typeToString(baseType); + const typeName = typeToString(type); + const basePropertyName = symbolToString(baseProperty); + const missedProperties = append((_a = notImplementedInfo.get(derivedClassDecl)) == null ? void 0 : _a.missedProperties, basePropertyName); + notImplementedInfo.set(derivedClassDecl, { baseTypeName, typeName, missedProperties }); + } + } else { + const derivedDeclarationFlags = getDeclarationModifierFlagsFromSymbol(derived); + if (baseDeclarationFlags & 2 /* Private */ || derivedDeclarationFlags & 2 /* Private */) { + continue; + } + let errorMessage; + const basePropertyFlags = base.flags & 98308 /* PropertyOrAccessor */; + const derivedPropertyFlags = derived.flags & 98308 /* PropertyOrAccessor */; + if (basePropertyFlags && derivedPropertyFlags) { + if ((getCheckFlags(base) & 6 /* Synthetic */ ? (_b = base.declarations) == null ? void 0 : _b.some((d) => isPropertyAbstractOrInterface(d, baseDeclarationFlags)) : (_c = base.declarations) == null ? void 0 : _c.every((d) => isPropertyAbstractOrInterface(d, baseDeclarationFlags))) || getCheckFlags(base) & 262144 /* Mapped */ || derived.valueDeclaration && isBinaryExpression(derived.valueDeclaration)) { + continue; + } + const overriddenInstanceProperty = basePropertyFlags !== 4 /* Property */ && derivedPropertyFlags === 4 /* Property */; + const overriddenInstanceAccessor = basePropertyFlags === 4 /* Property */ && derivedPropertyFlags !== 4 /* Property */; + if (overriddenInstanceProperty || overriddenInstanceAccessor) { + const errorMessage2 = overriddenInstanceProperty ? Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property : Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor; + error2(getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage2, symbolToString(base), typeToString(baseType), typeToString(type)); + } else if (useDefineForClassFields) { + const uninitialized = (_d = derived.declarations) == null ? void 0 : _d.find((d) => d.kind === 173 /* PropertyDeclaration */ && !d.initializer); + if (uninitialized && !(derived.flags & 33554432 /* Transient */) && !(baseDeclarationFlags & 64 /* Abstract */) && !(derivedDeclarationFlags & 64 /* Abstract */) && !((_e = derived.declarations) == null ? void 0 : _e.some((d) => !!(d.flags & 33554432 /* Ambient */)))) { + const constructor = findConstructorDeclaration(getClassLikeDeclarationOfSymbol(type.symbol)); + const propName = uninitialized.name; + if (uninitialized.exclamationToken || !constructor || !isIdentifier(propName) || !strictNullChecks || !isPropertyInitializedInConstructor(propName, type, constructor)) { + const errorMessage2 = Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration; + error2(getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage2, symbolToString(base), typeToString(baseType)); + } + } + } + continue; + } else if (isPrototypeProperty(base)) { + if (isPrototypeProperty(derived) || derived.flags & 4 /* Property */) { + continue; + } else { + Debug.assert(!!(derived.flags & 98304 /* Accessor */)); + errorMessage = Diagnostics.Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_accessor; + } + } else if (base.flags & 98304 /* Accessor */) { + errorMessage = Diagnostics.Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_function; + } else { + errorMessage = Diagnostics.Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_function; + } + error2(getNameOfDeclaration(derived.valueDeclaration) || derived.valueDeclaration, errorMessage, typeToString(baseType), symbolToString(base), typeToString(type)); + } + } + for (const [errorNode, memberInfo] of notImplementedInfo) { + if (length(memberInfo.missedProperties) === 1) { + if (isClassExpression(errorNode)) { + error2(errorNode, Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1, first(memberInfo.missedProperties), memberInfo.baseTypeName); + } else { + error2(errorNode, Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2, memberInfo.typeName, first(memberInfo.missedProperties), memberInfo.baseTypeName); + } + } else if (length(memberInfo.missedProperties) > 5) { + const missedProperties = map(memberInfo.missedProperties.slice(0, 4), (prop) => `'${prop}'`).join(", "); + const remainingMissedProperties = length(memberInfo.missedProperties) - 4; + if (isClassExpression(errorNode)) { + error2(errorNode, Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more, memberInfo.baseTypeName, missedProperties, remainingMissedProperties); + } else { + error2(errorNode, Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more, memberInfo.typeName, memberInfo.baseTypeName, missedProperties, remainingMissedProperties); + } + } else { + const missedProperties = map(memberInfo.missedProperties, (prop) => `'${prop}'`).join(", "); + if (isClassExpression(errorNode)) { + error2(errorNode, Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1, memberInfo.baseTypeName, missedProperties); + } else { + error2(errorNode, Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2, memberInfo.typeName, memberInfo.baseTypeName, missedProperties); + } + } + } + } + function isPropertyAbstractOrInterface(declaration, baseDeclarationFlags) { + return baseDeclarationFlags & 64 /* Abstract */ && (!isPropertyDeclaration(declaration) || !declaration.initializer) || isInterfaceDeclaration(declaration.parent); + } + function getNonInheritedProperties(type, baseTypes, properties) { + if (!length(baseTypes)) { + return properties; + } + const seen = /* @__PURE__ */ new Map(); + forEach(properties, (p) => { + seen.set(p.escapedName, p); + }); + for (const base of baseTypes) { + const properties2 = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType)); + for (const prop of properties2) { + const existing = seen.get(prop.escapedName); + if (existing && prop.parent === existing.parent) { + seen.delete(prop.escapedName); + } + } + } + return arrayFrom(seen.values()); + } + function checkInheritedPropertiesAreIdentical(type, typeNode) { + const baseTypes = getBaseTypes(type); + if (baseTypes.length < 2) { + return true; + } + const seen = /* @__PURE__ */ new Map(); + forEach(resolveDeclaredMembers(type).declaredProperties, (p) => { + seen.set(p.escapedName, { prop: p, containingType: type }); + }); + let ok = true; + for (const base of baseTypes) { + const properties = getPropertiesOfType(getTypeWithThisArgument(base, type.thisType)); + for (const prop of properties) { + const existing = seen.get(prop.escapedName); + if (!existing) { + seen.set(prop.escapedName, { prop, containingType: base }); + } else { + const isInheritedProperty = existing.containingType !== type; + if (isInheritedProperty && !isPropertyIdenticalTo(existing.prop, prop)) { + ok = false; + const typeName1 = typeToString(existing.containingType); + const typeName2 = typeToString(base); + let errorInfo = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Named_property_0_of_types_1_and_2_are_not_identical, + symbolToString(prop), + typeName1, + typeName2 + ); + errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Interface_0_cannot_simultaneously_extend_types_1_and_2, typeToString(type), typeName1, typeName2); + diagnostics.add(createDiagnosticForNodeFromMessageChain(getSourceFileOfNode(typeNode), typeNode, errorInfo)); + } + } + } + } + return ok; + } + function checkPropertyInitialization(node) { + if (!strictNullChecks || !strictPropertyInitialization || node.flags & 33554432 /* Ambient */) { + return; + } + const constructor = findConstructorDeclaration(node); + for (const member of node.members) { + if (getEffectiveModifierFlags(member) & 128 /* Ambient */) { + continue; + } + if (!isStatic(member) && isPropertyWithoutInitializer(member)) { + const propName = member.name; + if (isIdentifier(propName) || isPrivateIdentifier(propName) || isComputedPropertyName(propName)) { + const type = getTypeOfSymbol(getSymbolOfDeclaration(member)); + if (!(type.flags & 3 /* AnyOrUnknown */ || containsUndefinedType(type))) { + if (!constructor || !isPropertyInitializedInConstructor(propName, type, constructor)) { + error2(member.name, Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor, declarationNameToString(propName)); + } + } + } + } + } + } + function isPropertyWithoutInitializer(node) { + return node.kind === 173 /* PropertyDeclaration */ && !hasAbstractModifier(node) && !node.exclamationToken && !node.initializer; + } + function isPropertyInitializedInStaticBlocks(propName, propType, staticBlocks, startPos, endPos) { + for (const staticBlock of staticBlocks) { + if (staticBlock.pos >= startPos && staticBlock.pos <= endPos) { + const reference = factory.createPropertyAccessExpression(factory.createThis(), propName); + setParent(reference.expression, reference); + setParent(reference, staticBlock); + reference.flowNode = staticBlock.returnFlowNode; + const flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); + if (!containsUndefinedType(flowType)) { + return true; + } + } + } + return false; + } + function isPropertyInitializedInConstructor(propName, propType, constructor) { + const reference = isComputedPropertyName(propName) ? factory.createElementAccessExpression(factory.createThis(), propName.expression) : factory.createPropertyAccessExpression(factory.createThis(), propName); + setParent(reference.expression, reference); + setParent(reference, constructor); + reference.flowNode = constructor.returnFlowNode; + const flowType = getFlowTypeOfReference(reference, propType, getOptionalType(propType)); + return !containsUndefinedType(flowType); + } + function checkInterfaceDeclaration(node) { + if (!checkGrammarModifiers(node)) checkGrammarInterfaceDeclaration(node); + if (!allowBlockDeclarations(node.parent)) { + grammarErrorOnNode(node, Diagnostics._0_declarations_can_only_be_declared_inside_a_block, "interface"); + } + checkTypeParameters(node.typeParameters); + addLazyDiagnostic(() => { + checkTypeNameIsReserved(node.name, Diagnostics.Interface_name_cannot_be_0); + checkExportsOnMergedDeclarations(node); + const symbol = getSymbolOfDeclaration(node); + checkTypeParameterListsIdentical(symbol); + const firstInterfaceDecl = getDeclarationOfKind(symbol, 265 /* InterfaceDeclaration */); + if (node === firstInterfaceDecl) { + const type = getDeclaredTypeOfSymbol(symbol); + const typeWithThis = getTypeWithThisArgument(type); + if (checkInheritedPropertiesAreIdentical(type, node.name)) { + for (const baseType of getBaseTypes(type)) { + checkTypeAssignableTo(typeWithThis, getTypeWithThisArgument(baseType, type.thisType), node.name, Diagnostics.Interface_0_incorrectly_extends_interface_1); + } + checkIndexConstraints(type, symbol); + } + } + checkObjectTypeForDuplicateDeclarations(node); + }); + forEach(getInterfaceBaseTypeNodes(node), (heritageElement) => { + if (!isEntityNameExpression(heritageElement.expression) || isOptionalChain(heritageElement.expression)) { + error2(heritageElement.expression, Diagnostics.An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments); + } + checkTypeReferenceNode(heritageElement); + }); + forEach(node.members, checkSourceElement); + addLazyDiagnostic(() => { + checkTypeForDuplicateIndexSignatures(node); + registerForUnusedIdentifiersCheck(node); + }); + } + function checkTypeAliasDeclaration(node) { + checkGrammarModifiers(node); + checkTypeNameIsReserved(node.name, Diagnostics.Type_alias_name_cannot_be_0); + if (!allowBlockDeclarations(node.parent)) { + grammarErrorOnNode(node, Diagnostics._0_declarations_can_only_be_declared_inside_a_block, "type"); + } + checkExportsOnMergedDeclarations(node); + checkTypeParameters(node.typeParameters); + if (node.type.kind === 141 /* IntrinsicKeyword */) { + const typeParameterCount = length(node.typeParameters); + const valid = typeParameterCount === 0 ? node.name.escapedText === "BuiltinIteratorReturn" : typeParameterCount === 1 && intrinsicTypeKinds.has(node.name.escapedText); + if (!valid) { + error2(node.type, Diagnostics.The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types); + } + } else { + checkSourceElement(node.type); + registerForUnusedIdentifiersCheck(node); + } + } + function computeEnumMemberValues(node) { + const nodeLinks2 = getNodeLinks(node); + if (!(nodeLinks2.flags & 1024 /* EnumValuesComputed */)) { + nodeLinks2.flags |= 1024 /* EnumValuesComputed */; + let autoValue = 0; + let previous; + for (const member of node.members) { + const result = computeEnumMemberValue(member, autoValue, previous); + getNodeLinks(member).enumMemberValue = result; + autoValue = typeof result.value === "number" ? result.value + 1 : void 0; + previous = member; + } + } + } + function computeEnumMemberValue(member, autoValue, previous) { + if (isComputedNonLiteralName(member.name)) { + error2(member.name, Diagnostics.Computed_property_names_are_not_allowed_in_enums); + } else if (isBigIntLiteral(member.name)) { + error2(member.name, Diagnostics.An_enum_member_cannot_have_a_numeric_name); + } else { + const text = getTextOfPropertyName(member.name); + if (isNumericLiteralName(text) && !isInfinityOrNaNString(text)) { + error2(member.name, Diagnostics.An_enum_member_cannot_have_a_numeric_name); + } + } + if (member.initializer) { + return computeConstantEnumMemberValue(member); + } + if (member.parent.flags & 33554432 /* Ambient */ && !isEnumConst(member.parent)) { + return evaluatorResult( + /*value*/ + void 0 + ); + } + if (autoValue === void 0) { + error2(member.name, Diagnostics.Enum_member_must_have_initializer); + return evaluatorResult( + /*value*/ + void 0 + ); + } + if (getIsolatedModules(compilerOptions) && (previous == null ? void 0 : previous.initializer)) { + const prevValue = getEnumMemberValue(previous); + if (!(typeof prevValue.value === "number" && !prevValue.resolvedOtherFiles)) { + error2( + member.name, + Diagnostics.Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is_enabled + ); + } + } + return evaluatorResult(autoValue); + } + function computeConstantEnumMemberValue(member) { + const isConstEnum = isEnumConst(member.parent); + const initializer = member.initializer; + const result = evaluate(initializer, member); + if (result.value !== void 0) { + if (isConstEnum && typeof result.value === "number" && !isFinite(result.value)) { + error2( + initializer, + isNaN(result.value) ? Diagnostics.const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN : Diagnostics.const_enum_member_initializer_was_evaluated_to_a_non_finite_value + ); + } else if (getIsolatedModules(compilerOptions) && typeof result.value === "string" && !result.isSyntacticallyString) { + error2( + initializer, + Diagnostics._0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is_enabled, + `${idText(member.parent.name)}.${getTextOfPropertyName(member.name)}` + ); + } + } else if (isConstEnum) { + error2(initializer, Diagnostics.const_enum_member_initializers_must_be_constant_expressions); + } else if (member.parent.flags & 33554432 /* Ambient */) { + error2(initializer, Diagnostics.In_ambient_enum_declarations_member_initializer_must_be_constant_expression); + } else { + checkTypeAssignableTo(checkExpression(initializer), numberType, initializer, Diagnostics.Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values); + } + return result; + } + function evaluateEntityNameExpression(expr, location) { + const symbol = resolveEntityName( + expr, + 111551 /* Value */, + /*ignoreErrors*/ + true + ); + if (!symbol) return evaluatorResult( + /*value*/ + void 0 + ); + if (expr.kind === 80 /* Identifier */) { + const identifier = expr; + if (isInfinityOrNaNString(identifier.escapedText) && symbol === getGlobalSymbol( + identifier.escapedText, + 111551 /* Value */, + /*diagnostic*/ + void 0 + )) { + return evaluatorResult( + +identifier.escapedText, + /*isSyntacticallyString*/ + false + ); + } + } + if (symbol.flags & 8 /* EnumMember */) { + return location ? evaluateEnumMember(expr, symbol, location) : getEnumMemberValue(symbol.valueDeclaration); + } + if (isConstantVariable(symbol)) { + const declaration = symbol.valueDeclaration; + if (declaration && isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && (!location || declaration !== location && isBlockScopedNameDeclaredBeforeUse(declaration, location))) { + const result = evaluate(declaration.initializer, declaration); + if (location && getSourceFileOfNode(location) !== getSourceFileOfNode(declaration)) { + return evaluatorResult( + result.value, + /*isSyntacticallyString*/ + false, + /*resolvedOtherFiles*/ + true, + /*hasExternalReferences*/ + true + ); + } + return evaluatorResult( + result.value, + result.isSyntacticallyString, + result.resolvedOtherFiles, + /*hasExternalReferences*/ + true + ); + } + } + return evaluatorResult( + /*value*/ + void 0 + ); + } + function evaluateElementAccessExpression(expr, location) { + const root = expr.expression; + if (isEntityNameExpression(root) && isStringLiteralLike(expr.argumentExpression)) { + const rootSymbol = resolveEntityName( + root, + 111551 /* Value */, + /*ignoreErrors*/ + true + ); + if (rootSymbol && rootSymbol.flags & 384 /* Enum */) { + const name = escapeLeadingUnderscores(expr.argumentExpression.text); + const member = rootSymbol.exports.get(name); + if (member) { + Debug.assert(getSourceFileOfNode(member.valueDeclaration) === getSourceFileOfNode(rootSymbol.valueDeclaration)); + return location ? evaluateEnumMember(expr, member, location) : getEnumMemberValue(member.valueDeclaration); + } + } + } + return evaluatorResult( + /*value*/ + void 0 + ); + } + function evaluateEnumMember(expr, symbol, location) { + const declaration = symbol.valueDeclaration; + if (!declaration || declaration === location) { + error2(expr, Diagnostics.Property_0_is_used_before_being_assigned, symbolToString(symbol)); + return evaluatorResult( + /*value*/ + void 0 + ); + } + if (!isBlockScopedNameDeclaredBeforeUse(declaration, location)) { + error2(expr, Diagnostics.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums); + return evaluatorResult( + /*value*/ + 0 + ); + } + const value = getEnumMemberValue(declaration); + if (location.parent !== declaration.parent) { + return evaluatorResult( + value.value, + value.isSyntacticallyString, + value.resolvedOtherFiles, + /*hasExternalReferences*/ + true + ); + } + return value; + } + function checkEnumDeclaration(node) { + addLazyDiagnostic(() => checkEnumDeclarationWorker(node)); + } + function checkEnumDeclarationWorker(node) { + checkGrammarModifiers(node); + checkCollisionsForDeclarationName(node, node.name); + checkExportsOnMergedDeclarations(node); + node.members.forEach(checkSourceElement); + if (compilerOptions.erasableSyntaxOnly && !(node.flags & 33554432 /* Ambient */)) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } + computeEnumMemberValues(node); + const enumSymbol = getSymbolOfDeclaration(node); + const firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); + if (node === firstDeclaration) { + if (enumSymbol.declarations && enumSymbol.declarations.length > 1) { + const enumIsConst = isEnumConst(node); + forEach(enumSymbol.declarations, (decl) => { + if (isEnumDeclaration(decl) && isEnumConst(decl) !== enumIsConst) { + error2(getNameOfDeclaration(decl), Diagnostics.Enum_declarations_must_all_be_const_or_non_const); + } + }); + } + let seenEnumMissingInitialInitializer = false; + forEach(enumSymbol.declarations, (declaration) => { + if (declaration.kind !== 267 /* EnumDeclaration */) { + return false; + } + const enumDeclaration = declaration; + if (!enumDeclaration.members.length) { + return false; + } + const firstEnumMember = enumDeclaration.members[0]; + if (!firstEnumMember.initializer) { + if (seenEnumMissingInitialInitializer) { + error2(firstEnumMember.name, Diagnostics.In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enum_element); + } else { + seenEnumMissingInitialInitializer = true; + } + } + }); + } + } + function checkEnumMember(node) { + if (isPrivateIdentifier(node.name)) { + error2(node, Diagnostics.An_enum_member_cannot_be_named_with_a_private_identifier); + } + if (node.initializer) { + checkExpression(node.initializer); + } + } + function getFirstNonAmbientClassOrFunctionDeclaration(symbol) { + const declarations = symbol.declarations; + if (declarations) { + for (const declaration of declarations) { + if ((declaration.kind === 264 /* ClassDeclaration */ || declaration.kind === 263 /* FunctionDeclaration */ && nodeIsPresent(declaration.body)) && !(declaration.flags & 33554432 /* Ambient */)) { + return declaration; + } + } + } + return void 0; + } + function inSameLexicalScope(node1, node2) { + const container1 = getEnclosingBlockScopeContainer(node1); + const container2 = getEnclosingBlockScopeContainer(node2); + if (isGlobalSourceFile(container1)) { + return isGlobalSourceFile(container2); + } else if (isGlobalSourceFile(container2)) { + return false; + } else { + return container1 === container2; + } + } + function checkModuleDeclaration(node) { + if (node.body) { + checkSourceElement(node.body); + if (!isGlobalScopeAugmentation(node)) { + registerForUnusedIdentifiersCheck(node); + } + } + addLazyDiagnostic(checkModuleDeclarationDiagnostics); + function checkModuleDeclarationDiagnostics() { + var _a, _b; + const isGlobalAugmentation = isGlobalScopeAugmentation(node); + const inAmbientContext = node.flags & 33554432 /* Ambient */; + if (isGlobalAugmentation && !inAmbientContext) { + error2(node.name, Diagnostics.Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambient_context); + } + const isAmbientExternalModule = isAmbientModule(node); + const contextErrorMessage = isAmbientExternalModule ? Diagnostics.An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file : Diagnostics.A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module; + if (checkGrammarModuleElementContext(node, contextErrorMessage)) { + return; + } + if (!checkGrammarModifiers(node)) { + if (!inAmbientContext && node.name.kind === 11 /* StringLiteral */) { + grammarErrorOnNode(node.name, Diagnostics.Only_ambient_modules_can_use_quoted_names); + } + } + if (isIdentifier(node.name)) { + checkCollisionsForDeclarationName(node, node.name); + if (!(node.flags & (32 /* Namespace */ | 2048 /* GlobalAugmentation */))) { + const sourceFile = getSourceFileOfNode(node); + const pos = getNonModifierTokenPosOfNode(node); + const span = getSpanOfTokenAtPosition(sourceFile, pos); + suggestionDiagnostics.add( + createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead) + ); + } + } + checkExportsOnMergedDeclarations(node); + const symbol = getSymbolOfDeclaration(node); + if (symbol.flags & 512 /* ValueModule */ && !inAmbientContext && isInstantiatedModule(node, shouldPreserveConstEnums(compilerOptions))) { + if (compilerOptions.erasableSyntaxOnly) { + error2(node.name, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } + if (getIsolatedModules(compilerOptions) && !getSourceFileOfNode(node).externalModuleIndicator) { + error2(node.name, Diagnostics.Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to_be_a_global_script_set_moduleDetection_to_force_or_add_an_empty_export_statement, isolatedModulesLikeFlagName); + } + if (((_a = symbol.declarations) == null ? void 0 : _a.length) > 1) { + const firstNonAmbientClassOrFunc = getFirstNonAmbientClassOrFunctionDeclaration(symbol); + if (firstNonAmbientClassOrFunc) { + if (getSourceFileOfNode(node) !== getSourceFileOfNode(firstNonAmbientClassOrFunc)) { + error2(node.name, Diagnostics.A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merged); + } else if (node.pos < firstNonAmbientClassOrFunc.pos) { + error2(node.name, Diagnostics.A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged); + } + } + const mergedClass = getDeclarationOfKind(symbol, 264 /* ClassDeclaration */); + if (mergedClass && inSameLexicalScope(node, mergedClass)) { + getNodeLinks(node).flags |= 2048 /* LexicalModuleMergesWithClass */; + } + } + if (compilerOptions.verbatimModuleSyntax && node.parent.kind === 308 /* SourceFile */ && host.getEmitModuleFormatOfFile(node.parent) === 1 /* CommonJS */) { + const exportModifier = (_b = node.modifiers) == null ? void 0 : _b.find((m) => m.kind === 95 /* ExportKeyword */); + if (exportModifier) { + error2(exportModifier, Diagnostics.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); + } + } + } + if (isAmbientExternalModule) { + if (isExternalModuleAugmentation(node)) { + const checkBody = isGlobalAugmentation || getSymbolOfDeclaration(node).flags & 33554432 /* Transient */; + if (checkBody && node.body) { + for (const statement of node.body.statements) { + checkModuleAugmentationElement(statement, isGlobalAugmentation); + } + } + } else if (isGlobalSourceFile(node.parent)) { + if (isGlobalAugmentation) { + error2(node.name, Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations); + } else if (isExternalModuleNameRelative(getTextOfIdentifierOrLiteral(node.name))) { + error2(node.name, Diagnostics.Ambient_module_declaration_cannot_specify_relative_module_name); + } + } else { + if (isGlobalAugmentation) { + error2(node.name, Diagnostics.Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_declarations); + } else { + error2(node.name, Diagnostics.Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces); + } + } + } + } + } + function checkModuleAugmentationElement(node, isGlobalAugmentation) { + switch (node.kind) { + case 244 /* VariableStatement */: + for (const decl of node.declarationList.declarations) { + checkModuleAugmentationElement(decl, isGlobalAugmentation); + } + break; + case 278 /* ExportAssignment */: + case 279 /* ExportDeclaration */: + grammarErrorOnFirstToken(node, Diagnostics.Exports_and_export_assignments_are_not_permitted_in_module_augmentations); + break; + case 272 /* ImportEqualsDeclaration */: + if (isInternalModuleImportEqualsDeclaration(node)) break; + // falls through + case 273 /* ImportDeclaration */: + grammarErrorOnFirstToken(node, Diagnostics.Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_module); + break; + case 209 /* BindingElement */: + case 261 /* VariableDeclaration */: + const name = node.name; + if (isBindingPattern(name)) { + for (const el of name.elements) { + checkModuleAugmentationElement(el, isGlobalAugmentation); + } + break; + } + // falls through + case 264 /* ClassDeclaration */: + case 267 /* EnumDeclaration */: + case 263 /* FunctionDeclaration */: + case 265 /* InterfaceDeclaration */: + case 268 /* ModuleDeclaration */: + case 266 /* TypeAliasDeclaration */: + if (isGlobalAugmentation) { + return; + } + break; + } + } + function getFirstNonModuleExportsIdentifier(node) { + switch (node.kind) { + case 80 /* Identifier */: + return node; + case 167 /* QualifiedName */: + do { + node = node.left; + } while (node.kind !== 80 /* Identifier */); + return node; + case 212 /* PropertyAccessExpression */: + do { + if (isModuleExportsAccessExpression(node.expression) && !isPrivateIdentifier(node.name)) { + return node.name; + } + node = node.expression; + } while (node.kind !== 80 /* Identifier */); + return node; + } + } + function checkExternalImportOrExportDeclaration(node) { + const moduleName = getExternalModuleName(node); + if (!moduleName || nodeIsMissing(moduleName)) { + return false; + } + if (!isStringLiteral(moduleName)) { + error2(moduleName, Diagnostics.String_literal_expected); + return false; + } + const inAmbientExternalModule = node.parent.kind === 269 /* ModuleBlock */ && isAmbientModule(node.parent.parent); + if (node.parent.kind !== 308 /* SourceFile */ && !inAmbientExternalModule) { + error2( + moduleName, + node.kind === 279 /* ExportDeclaration */ ? Diagnostics.Export_declarations_are_not_permitted_in_a_namespace : Diagnostics.Import_declarations_in_a_namespace_cannot_reference_a_module + ); + return false; + } + if (inAmbientExternalModule && isExternalModuleNameRelative(moduleName.text)) { + if (!isTopLevelInExternalModuleAugmentation(node)) { + error2(node, Diagnostics.Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relative_module_name); + return false; + } + } + if (!isImportEqualsDeclaration(node) && node.attributes) { + const diagnostic = node.attributes.token === 118 /* WithKeyword */ ? Diagnostics.Import_attribute_values_must_be_string_literal_expressions : Diagnostics.Import_assertion_values_must_be_string_literal_expressions; + let hasError = false; + for (const attr of node.attributes.elements) { + if (!isStringLiteral(attr.value)) { + hasError = true; + error2(attr.value, diagnostic); + } + } + return !hasError; + } + return true; + } + function checkModuleExportName(name, allowStringLiteral = true) { + if (name === void 0 || name.kind !== 11 /* StringLiteral */) { + return; + } + if (!allowStringLiteral) { + grammarErrorOnNode(name, Diagnostics.Identifier_expected); + } else if (moduleKind === 5 /* ES2015 */ || moduleKind === 6 /* ES2020 */) { + grammarErrorOnNode(name, Diagnostics.String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es2020); + } + } + function checkAliasSymbol(node) { + var _a, _b, _c, _d, _e; + let symbol = getSymbolOfDeclaration(node); + const target = resolveAlias(symbol); + if (target !== unknownSymbol) { + symbol = getMergedSymbol(symbol.exportSymbol || symbol); + if (isInJSFile(node) && !(target.flags & 111551 /* Value */) && !isTypeOnlyImportOrExportDeclaration(node)) { + const errorNode = isImportOrExportSpecifier(node) ? node.propertyName || node.name : isNamedDeclaration(node) ? node.name : node; + Debug.assert(node.kind !== 281 /* NamespaceExport */); + if (node.kind === 282 /* ExportSpecifier */) { + const diag2 = error2(errorNode, Diagnostics.Types_cannot_appear_in_export_declarations_in_JavaScript_files); + const alreadyExportedSymbol = (_b = (_a = getSourceFileOfNode(node).symbol) == null ? void 0 : _a.exports) == null ? void 0 : _b.get(moduleExportNameTextEscaped(node.propertyName || node.name)); + if (alreadyExportedSymbol === target) { + const exportingDeclaration = (_c = alreadyExportedSymbol.declarations) == null ? void 0 : _c.find(isJSDocNode); + if (exportingDeclaration) { + addRelatedInfo( + diag2, + createDiagnosticForNode( + exportingDeclaration, + Diagnostics._0_is_automatically_exported_here, + unescapeLeadingUnderscores(alreadyExportedSymbol.escapedName) + ) + ); + } + } + } else { + Debug.assert(node.kind !== 261 /* VariableDeclaration */); + const importDeclaration = findAncestor(node, or(isImportDeclaration, isImportEqualsDeclaration)); + const moduleSpecifier = (importDeclaration && ((_d = tryGetModuleSpecifierFromDeclaration(importDeclaration)) == null ? void 0 : _d.text)) ?? "..."; + const importedIdentifier = unescapeLeadingUnderscores(isIdentifier(errorNode) ? errorNode.escapedText : symbol.escapedName); + error2( + errorNode, + Diagnostics._0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation, + importedIdentifier, + `import("${moduleSpecifier}").${importedIdentifier}` + ); + } + return; + } + const targetFlags = getSymbolFlags(target); + const excludedMeanings = (symbol.flags & (111551 /* Value */ | 1048576 /* ExportValue */) ? 111551 /* Value */ : 0) | (symbol.flags & 788968 /* Type */ ? 788968 /* Type */ : 0) | (symbol.flags & 1920 /* Namespace */ ? 1920 /* Namespace */ : 0); + if (targetFlags & excludedMeanings) { + const message = node.kind === 282 /* ExportSpecifier */ ? Diagnostics.Export_declaration_conflicts_with_exported_declaration_of_0 : Diagnostics.Import_declaration_conflicts_with_local_declaration_of_0; + error2(node, message, symbolToString(symbol)); + } else if (node.kind !== 282 /* ExportSpecifier */) { + const appearsValueyToTranspiler = compilerOptions.isolatedModules && !findAncestor(node, isTypeOnlyImportOrExportDeclaration); + if (appearsValueyToTranspiler && symbol.flags & (111551 /* Value */ | 1048576 /* ExportValue */)) { + error2( + node, + Diagnostics.Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_is_enabled, + symbolToString(symbol), + isolatedModulesLikeFlagName + ); + } + } + if (getIsolatedModules(compilerOptions) && !isTypeOnlyImportOrExportDeclaration(node) && !(node.flags & 33554432 /* Ambient */)) { + const typeOnlyAlias = getTypeOnlyAliasDeclaration(symbol); + const isType = !(targetFlags & 111551 /* Value */); + if (isType || typeOnlyAlias) { + switch (node.kind) { + case 274 /* ImportClause */: + case 277 /* ImportSpecifier */: + case 272 /* ImportEqualsDeclaration */: { + if (compilerOptions.verbatimModuleSyntax) { + Debug.assertIsDefined(node.name, "An ImportClause with a symbol should have a name"); + const message = compilerOptions.verbatimModuleSyntax && isInternalModuleImportEqualsDeclaration(node) ? Diagnostics.An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabled : isType ? Diagnostics._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled : Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled; + const name = moduleExportNameTextUnescaped(node.kind === 277 /* ImportSpecifier */ ? node.propertyName || node.name : node.name); + addTypeOnlyDeclarationRelatedInfo( + error2(node, message, name), + isType ? void 0 : typeOnlyAlias, + name + ); + } + if (isType && node.kind === 272 /* ImportEqualsDeclaration */ && hasEffectiveModifier(node, 32 /* Export */)) { + error2(node, Diagnostics.Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled, isolatedModulesLikeFlagName); + } + break; + } + case 282 /* ExportSpecifier */: { + if (compilerOptions.verbatimModuleSyntax || getSourceFileOfNode(typeOnlyAlias) !== getSourceFileOfNode(node)) { + const name = moduleExportNameTextUnescaped(node.propertyName || node.name); + const diagnostic = isType ? error2(node, Diagnostics.Re_exporting_a_type_when_0_is_enabled_requires_using_export_type, isolatedModulesLikeFlagName) : error2(node, Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_enabled, name, isolatedModulesLikeFlagName); + addTypeOnlyDeclarationRelatedInfo(diagnostic, isType ? void 0 : typeOnlyAlias, name); + break; + } + } + } + } + if (compilerOptions.verbatimModuleSyntax && node.kind !== 272 /* ImportEqualsDeclaration */ && !isInJSFile(node) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { + error2(node, getVerbatimModuleSyntaxErrorMessage(node)); + } else if (moduleKind === 200 /* Preserve */ && node.kind !== 272 /* ImportEqualsDeclaration */ && node.kind !== 261 /* VariableDeclaration */ && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { + error2(node, Diagnostics.ECMAScript_module_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve); + } + if (compilerOptions.verbatimModuleSyntax && !isTypeOnlyImportOrExportDeclaration(node) && !(node.flags & 33554432 /* Ambient */) && targetFlags & 128 /* ConstEnum */) { + const constEnumDeclaration = target.valueDeclaration; + const redirect = (_e = host.getRedirectFromOutput(getSourceFileOfNode(constEnumDeclaration).resolvedPath)) == null ? void 0 : _e.resolvedRef; + if (constEnumDeclaration.flags & 33554432 /* Ambient */ && (!redirect || !shouldPreserveConstEnums(redirect.commandLine.options))) { + error2(node, Diagnostics.Cannot_access_ambient_const_enums_when_0_is_enabled, isolatedModulesLikeFlagName); + } + } + } + if (isImportSpecifier(node)) { + const targetSymbol = resolveAliasWithDeprecationCheck(symbol, node); + if (isDeprecatedSymbol(targetSymbol) && targetSymbol.declarations) { + addDeprecatedSuggestion(node, targetSymbol.declarations, targetSymbol.escapedName); + } + } + } + } + function resolveAliasWithDeprecationCheck(symbol, location) { + if (!(symbol.flags & 2097152 /* Alias */) || isDeprecatedSymbol(symbol) || !getDeclarationOfAliasSymbol(symbol)) { + return symbol; + } + const targetSymbol = resolveAlias(symbol); + if (targetSymbol === unknownSymbol) return targetSymbol; + while (symbol.flags & 2097152 /* Alias */) { + const target = getImmediateAliasedSymbol(symbol); + if (target) { + if (target === targetSymbol) break; + if (target.declarations && length(target.declarations)) { + if (isDeprecatedSymbol(target)) { + addDeprecatedSuggestion(location, target.declarations, target.escapedName); + break; + } else { + if (symbol === targetSymbol) break; + symbol = target; + } + } + } else { + break; + } + } + return targetSymbol; + } + function checkImportBinding(node) { + checkCollisionsForDeclarationName(node, node.name); + checkAliasSymbol(node); + if (node.kind === 277 /* ImportSpecifier */) { + checkModuleExportName(node.propertyName); + if (moduleExportNameIsDefault(node.propertyName || node.name) && getESModuleInterop(compilerOptions) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */) { + checkExternalEmitHelpers(node, 131072 /* ImportDefault */); + } + } + } + function checkImportAttributes(declaration) { + var _a; + const node = declaration.attributes; + if (node) { + const importAttributesType = getGlobalImportAttributesType( + /*reportErrors*/ + true + ); + if (importAttributesType !== emptyObjectType) { + checkTypeAssignableTo(getTypeFromImportAttributes(node), getNullableType(importAttributesType, 32768 /* Undefined */), node); + } + const validForTypeAttributes = isExclusivelyTypeOnlyImportOrExport(declaration); + const override = getResolutionModeOverride(node, validForTypeAttributes ? grammarErrorOnNode : void 0); + const isImportAttributes2 = declaration.attributes.token === 118 /* WithKeyword */; + if (validForTypeAttributes && override) { + return; + } + if (!moduleSupportsImportAttributes(moduleKind)) { + return grammarErrorOnNode( + node, + isImportAttributes2 ? Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve : Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext_or_preserve + ); + } + if (102 /* Node20 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ && !isImportAttributes2) { + return grammarErrorOnFirstToken(node, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert); + } + if (declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier) === 1 /* CommonJS */) { + return grammarErrorOnNode( + node, + isImportAttributes2 ? Diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls + ); + } + const isTypeOnly = isJSDocImportTag(declaration) || (isImportDeclaration(declaration) ? (_a = declaration.importClause) == null ? void 0 : _a.isTypeOnly : declaration.isTypeOnly); + if (isTypeOnly) { + return grammarErrorOnNode(node, isImportAttributes2 ? Diagnostics.Import_attributes_cannot_be_used_with_type_only_imports_or_exports : Diagnostics.Import_assertions_cannot_be_used_with_type_only_imports_or_exports); + } + if (override) { + return grammarErrorOnNode(node, Diagnostics.resolution_mode_can_only_be_set_for_type_only_imports); + } + } + } + function checkImportAttribute(node) { + return getRegularTypeOfLiteralType(checkExpressionCached(node.value)); + } + function checkImportDeclaration(node) { + if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { + return; + } + if (!checkGrammarModifiers(node) && node.modifiers) { + grammarErrorOnFirstToken(node, Diagnostics.An_import_declaration_cannot_have_modifiers); + } + if (checkExternalImportOrExportDeclaration(node)) { + let resolvedModule; + const importClause = node.importClause; + if (importClause && !checkGrammarImportClause(importClause)) { + if (importClause.name) { + checkImportBinding(importClause); + } + if (importClause.namedBindings) { + if (importClause.namedBindings.kind === 275 /* NamespaceImport */) { + checkImportBinding(importClause.namedBindings); + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && getESModuleInterop(compilerOptions)) { + checkExternalEmitHelpers(node, 65536 /* ImportStar */); + } + } else { + resolvedModule = resolveExternalModuleName(node, node.moduleSpecifier); + if (resolvedModule) { + forEach(importClause.namedBindings.elements, checkImportBinding); + } + } + } + if (!importClause.isTypeOnly && 101 /* Node18 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ && isOnlyImportableAsDefault(node.moduleSpecifier, resolvedModule) && !hasTypeJsonImportAttribute(node)) { + error2(node.moduleSpecifier, Diagnostics.Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0, ModuleKind[moduleKind]); + } + } else if (noUncheckedSideEffectImports && !importClause) { + void resolveExternalModuleName(node, node.moduleSpecifier); + } + } + checkImportAttributes(node); + } + function hasTypeJsonImportAttribute(node) { + return !!node.attributes && node.attributes.elements.some((attr) => { + var _a; + return getTextOfIdentifierOrLiteral(attr.name) === "type" && ((_a = tryCast(attr.value, isStringLiteralLike)) == null ? void 0 : _a.text) === "json"; + }); + } + function checkImportEqualsDeclaration(node) { + if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { + return; + } + checkGrammarModifiers(node); + if (compilerOptions.erasableSyntaxOnly && !(node.flags & 33554432 /* Ambient */)) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } + if (isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) { + checkImportBinding(node); + markLinkedReferences(node, 6 /* ExportImportEquals */); + if (node.moduleReference.kind !== 284 /* ExternalModuleReference */) { + const target = resolveAlias(getSymbolOfDeclaration(node)); + if (target !== unknownSymbol) { + const targetFlags = getSymbolFlags(target); + if (targetFlags & 111551 /* Value */) { + const moduleName = getFirstIdentifier(node.moduleReference); + if (!(resolveEntityName(moduleName, 111551 /* Value */ | 1920 /* Namespace */).flags & 1920 /* Namespace */)) { + error2(moduleName, Diagnostics.Module_0_is_hidden_by_a_local_declaration_with_the_same_name, declarationNameToString(moduleName)); + } + } + if (targetFlags & 788968 /* Type */) { + checkTypeNameIsReserved(node.name, Diagnostics.Import_name_cannot_be_0); + } + } + if (node.isTypeOnly) { + grammarErrorOnNode(node, Diagnostics.An_import_alias_cannot_use_import_type); + } + } else { + if (5 /* ES2015 */ <= moduleKind && moduleKind <= 99 /* ESNext */ && !node.isTypeOnly && !(node.flags & 33554432 /* Ambient */)) { + grammarErrorOnNode(node, Diagnostics.Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_ns_from_mod_import_a_from_mod_import_d_from_mod_or_another_module_format_instead); + } + } + } + } + function checkExportDeclaration(node) { + if (checkGrammarModuleElementContext(node, isInJSFile(node) ? Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module : Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module)) { + return; + } + if (!checkGrammarModifiers(node) && hasSyntacticModifiers(node)) { + grammarErrorOnFirstToken(node, Diagnostics.An_export_declaration_cannot_have_modifiers); + } + checkGrammarExportDeclaration(node); + if (!node.moduleSpecifier || checkExternalImportOrExportDeclaration(node)) { + if (node.exportClause && !isNamespaceExport(node.exportClause)) { + forEach(node.exportClause.elements, checkExportSpecifier); + const inAmbientExternalModule = node.parent.kind === 269 /* ModuleBlock */ && isAmbientModule(node.parent.parent); + const inAmbientNamespaceDeclaration = !inAmbientExternalModule && node.parent.kind === 269 /* ModuleBlock */ && !node.moduleSpecifier && node.flags & 33554432 /* Ambient */; + if (node.parent.kind !== 308 /* SourceFile */ && !inAmbientExternalModule && !inAmbientNamespaceDeclaration) { + error2(node, Diagnostics.Export_declarations_are_not_permitted_in_a_namespace); + } + } else { + const moduleSymbol = resolveExternalModuleName(node, node.moduleSpecifier); + if (moduleSymbol && hasExportAssignmentSymbol(moduleSymbol)) { + error2(node.moduleSpecifier, Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol)); + } else if (node.exportClause) { + checkAliasSymbol(node.exportClause); + checkModuleExportName(node.exportClause.name); + } + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */) { + if (node.exportClause) { + if (getESModuleInterop(compilerOptions)) { + checkExternalEmitHelpers(node, 65536 /* ImportStar */); + } + } else { + checkExternalEmitHelpers(node, 32768 /* ExportStar */); + } + } + } + } + checkImportAttributes(node); + } + function checkGrammarExportDeclaration(node) { + var _a; + if (node.isTypeOnly && ((_a = node.exportClause) == null ? void 0 : _a.kind) === 280 /* NamedExports */) { + return checkGrammarNamedImportsOrExports(node.exportClause); + } + return false; + } + function checkGrammarModuleElementContext(node, errorMessage) { + const isInAppropriateContext = node.parent.kind === 308 /* SourceFile */ || node.parent.kind === 269 /* ModuleBlock */ || node.parent.kind === 268 /* ModuleDeclaration */; + if (!isInAppropriateContext) { + grammarErrorOnFirstToken(node, errorMessage); + } + return !isInAppropriateContext; + } + function checkExportSpecifier(node) { + checkAliasSymbol(node); + const hasModuleSpecifier = node.parent.parent.moduleSpecifier !== void 0; + checkModuleExportName(node.propertyName, hasModuleSpecifier); + checkModuleExportName(node.name); + if (getEmitDeclarations(compilerOptions)) { + collectLinkedAliases( + node.propertyName || node.name, + /*setVisibility*/ + true + ); + } + if (!hasModuleSpecifier) { + const exportedName = node.propertyName || node.name; + if (exportedName.kind === 11 /* StringLiteral */) { + return; + } + const symbol = resolveName( + exportedName, + exportedName.escapedText, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (symbol && (symbol === undefinedSymbol || symbol === globalThisSymbol || symbol.declarations && isGlobalSourceFile(getDeclarationContainer(symbol.declarations[0])))) { + error2(exportedName, Diagnostics.Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module, idText(exportedName)); + } else { + markLinkedReferences(node, 7 /* ExportSpecifier */); + } + } else { + if (getESModuleInterop(compilerOptions) && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && moduleExportNameIsDefault(node.propertyName || node.name)) { + checkExternalEmitHelpers(node, 131072 /* ImportDefault */); + } + } + } + function checkExportAssignment(node) { + const illegalContextMessage = node.isExportEquals ? Diagnostics.An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration : Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration; + if (checkGrammarModuleElementContext(node, illegalContextMessage)) { + return; + } + if (compilerOptions.erasableSyntaxOnly && node.isExportEquals && !(node.flags & 33554432 /* Ambient */)) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } + const container = node.parent.kind === 308 /* SourceFile */ ? node.parent : node.parent.parent; + if (container.kind === 268 /* ModuleDeclaration */ && !isAmbientModule(container)) { + if (node.isExportEquals) { + error2(node, Diagnostics.An_export_assignment_cannot_be_used_in_a_namespace); + } else { + error2(node, Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module); + } + return; + } + if (!checkGrammarModifiers(node) && hasEffectiveModifiers(node)) { + grammarErrorOnFirstToken(node, Diagnostics.An_export_assignment_cannot_have_modifiers); + } + const typeAnnotationNode = getEffectiveTypeAnnotationNode(node); + if (typeAnnotationNode) { + checkTypeAssignableTo(checkExpressionCached(node.expression), getTypeFromTypeNode(typeAnnotationNode), node.expression); + } + const isIllegalExportDefaultInCJS = !node.isExportEquals && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */; + if (node.expression.kind === 80 /* Identifier */) { + const id = node.expression; + const sym = getExportSymbolOfValueSymbolIfExported(resolveEntityName( + id, + -1 /* All */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + node + )); + if (sym) { + markLinkedReferences(node, 3 /* ExportAssignment */); + const typeOnlyDeclaration = getTypeOnlyAliasDeclaration(sym, 111551 /* Value */); + if (getSymbolFlags(sym) & 111551 /* Value */) { + checkExpressionCached(id); + if (!isIllegalExportDefaultInCJS && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax && typeOnlyDeclaration) { + error2( + id, + node.isExportEquals ? Diagnostics.An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration : Diagnostics.An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_a_type_only_declaration, + idText(id) + ); + } + } else if (!isIllegalExportDefaultInCJS && !(node.flags & 33554432 /* Ambient */) && compilerOptions.verbatimModuleSyntax) { + error2( + id, + node.isExportEquals ? Diagnostics.An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type : Diagnostics.An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_type, + idText(id) + ); + } + if (!isIllegalExportDefaultInCJS && !(node.flags & 33554432 /* Ambient */) && getIsolatedModules(compilerOptions) && !(sym.flags & 111551 /* Value */)) { + const nonLocalMeanings = getSymbolFlags( + sym, + /*excludeTypeOnlyMeanings*/ + false, + /*excludeLocalMeanings*/ + true + ); + if (sym.flags & 2097152 /* Alias */ && nonLocalMeanings & 788968 /* Type */ && !(nonLocalMeanings & 111551 /* Value */) && (!typeOnlyDeclaration || getSourceFileOfNode(typeOnlyDeclaration) !== getSourceFileOfNode(node))) { + error2( + id, + node.isExportEquals ? Diagnostics._0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported : Diagnostics._0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default, + idText(id), + isolatedModulesLikeFlagName + ); + } else if (typeOnlyDeclaration && getSourceFileOfNode(typeOnlyDeclaration) !== getSourceFileOfNode(node)) { + addTypeOnlyDeclarationRelatedInfo( + error2( + id, + node.isExportEquals ? Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported : Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default, + idText(id), + isolatedModulesLikeFlagName + ), + typeOnlyDeclaration, + idText(id) + ); + } + } + } else { + checkExpressionCached(id); + } + if (getEmitDeclarations(compilerOptions)) { + collectLinkedAliases( + id, + /*setVisibility*/ + true + ); + } + } else { + checkExpressionCached(node.expression); + } + if (isIllegalExportDefaultInCJS) { + error2(node, getVerbatimModuleSyntaxErrorMessage(node)); + } + checkExternalModuleExports(container); + if (node.flags & 33554432 /* Ambient */ && !isEntityNameExpression(node.expression)) { + grammarErrorOnNode(node.expression, Diagnostics.The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context); + } + if (node.isExportEquals) { + if (moduleKind >= 5 /* ES2015 */ && moduleKind !== 200 /* Preserve */ && (node.flags & 33554432 /* Ambient */ && host.getImpliedNodeFormatForEmit(getSourceFileOfNode(node)) === 99 /* ESNext */ || !(node.flags & 33554432 /* Ambient */) && host.getImpliedNodeFormatForEmit(getSourceFileOfNode(node)) !== 1 /* CommonJS */)) { + grammarErrorOnNode(node, Diagnostics.Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or_another_module_format_instead); + } else if (moduleKind === 4 /* System */ && !(node.flags & 33554432 /* Ambient */)) { + grammarErrorOnNode(node, Diagnostics.Export_assignment_is_not_supported_when_module_flag_is_system); + } + } + } + function hasExportedMembers(moduleSymbol) { + return forEachEntry(moduleSymbol.exports, (_, id) => id !== "export="); + } + function checkExternalModuleExports(node) { + const moduleSymbol = getSymbolOfDeclaration(node); + const links = getSymbolLinks(moduleSymbol); + if (!links.exportsChecked) { + const exportEqualsSymbol = moduleSymbol.exports.get("export="); + if (exportEqualsSymbol && hasExportedMembers(moduleSymbol)) { + const declaration = getDeclarationOfAliasSymbol(exportEqualsSymbol) || exportEqualsSymbol.valueDeclaration; + if (declaration && !isTopLevelInExternalModuleAugmentation(declaration) && !isInJSFile(declaration)) { + error2(declaration, Diagnostics.An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements); + } + } + const exports2 = getExportsOfModule(moduleSymbol); + if (exports2) { + exports2.forEach(({ declarations, flags }, id) => { + if (id === "__export") { + return; + } + if (flags & (1920 /* Namespace */ | 384 /* Enum */)) { + return; + } + const exportedDeclarationsCount = countWhere(declarations, and(isNotOverloadAndNotAccessor, not(isInterfaceDeclaration))); + if (flags & 524288 /* TypeAlias */ && exportedDeclarationsCount <= 2) { + return; + } + if (exportedDeclarationsCount > 1) { + if (!isDuplicatedCommonJSExport(declarations)) { + for (const declaration of declarations) { + if (isNotOverload(declaration)) { + diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Cannot_redeclare_exported_variable_0, unescapeLeadingUnderscores(id))); + } + } + } + } + }); + } + links.exportsChecked = true; + } + } + function isDuplicatedCommonJSExport(declarations) { + return declarations && declarations.length > 1 && declarations.every((d) => isInJSFile(d) && isAccessExpression(d) && (isExportsIdentifier(d.expression) || isModuleExportsAccessExpression(d.expression))); + } + function checkSourceElement(node) { + if (node) { + const saveCurrentNode = currentNode; + currentNode = node; + instantiationCount = 0; + checkSourceElementWorker(node); + currentNode = saveCurrentNode; + } + } + function checkSourceElementWorker(node) { + if (getNodeCheckFlags(node) & 8388608 /* PartiallyTypeChecked */) { + return; + } + if (canHaveJSDoc(node)) { + forEach(node.jsDoc, ({ comment, tags }) => { + checkJSDocCommentWorker(comment); + forEach(tags, (tag) => { + checkJSDocCommentWorker(tag.comment); + if (isInJSFile(node)) { + checkSourceElement(tag); + } + }); + }); + } + const kind = node.kind; + if (cancellationToken) { + switch (kind) { + case 268 /* ModuleDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 263 /* FunctionDeclaration */: + cancellationToken.throwIfCancellationRequested(); + } + } + if (kind >= 244 /* FirstStatement */ && kind <= 260 /* LastStatement */ && canHaveFlowNode(node) && node.flowNode && !isReachableFlowNode(node.flowNode)) { + errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, Diagnostics.Unreachable_code_detected); + } + switch (kind) { + case 169 /* TypeParameter */: + return checkTypeParameter(node); + case 170 /* Parameter */: + return checkParameter(node); + case 173 /* PropertyDeclaration */: + return checkPropertyDeclaration(node); + case 172 /* PropertySignature */: + return checkPropertySignature(node); + case 186 /* ConstructorType */: + case 185 /* FunctionType */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 182 /* IndexSignature */: + return checkSignatureDeclaration(node); + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + return checkMethodDeclaration(node); + case 176 /* ClassStaticBlockDeclaration */: + return checkClassStaticBlockDeclaration(node); + case 177 /* Constructor */: + return checkConstructorDeclaration(node); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return checkAccessorDeclaration(node); + case 184 /* TypeReference */: + return checkTypeReferenceNode(node); + case 183 /* TypePredicate */: + return checkTypePredicate(node); + case 187 /* TypeQuery */: + return checkTypeQuery(node); + case 188 /* TypeLiteral */: + return checkTypeLiteral(node); + case 189 /* ArrayType */: + return checkArrayType(node); + case 190 /* TupleType */: + return checkTupleType(node); + case 193 /* UnionType */: + case 194 /* IntersectionType */: + return checkUnionOrIntersectionType(node); + case 197 /* ParenthesizedType */: + case 191 /* OptionalType */: + case 192 /* RestType */: + return checkSourceElement(node.type); + case 198 /* ThisType */: + return checkThisType(node); + case 199 /* TypeOperator */: + return checkTypeOperator(node); + case 195 /* ConditionalType */: + return checkConditionalType(node); + case 196 /* InferType */: + return checkInferType(node); + case 204 /* TemplateLiteralType */: + return checkTemplateLiteralType(node); + case 206 /* ImportType */: + return checkImportType(node); + case 203 /* NamedTupleMember */: + return checkNamedTupleMember(node); + case 329 /* JSDocAugmentsTag */: + return checkJSDocAugmentsTag(node); + case 330 /* JSDocImplementsTag */: + return checkJSDocImplementsTag(node); + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 341 /* JSDocEnumTag */: + return checkJSDocTypeAliasTag(node); + case 346 /* JSDocTemplateTag */: + return checkJSDocTemplateTag(node); + case 345 /* JSDocTypeTag */: + return checkJSDocTypeTag(node); + case 325 /* JSDocLink */: + case 326 /* JSDocLinkCode */: + case 327 /* JSDocLinkPlain */: + return checkJSDocLinkLikeTag(node); + case 342 /* JSDocParameterTag */: + return checkJSDocParameterTag(node); + case 349 /* JSDocPropertyTag */: + return checkJSDocPropertyTag(node); + case 318 /* JSDocFunctionType */: + checkJSDocFunctionType(node); + // falls through + case 316 /* JSDocNonNullableType */: + case 315 /* JSDocNullableType */: + case 313 /* JSDocAllType */: + case 314 /* JSDocUnknownType */: + case 323 /* JSDocTypeLiteral */: + checkJSDocTypeIsInJsFile(node); + forEachChild(node, checkSourceElement); + return; + case 319 /* JSDocVariadicType */: + checkJSDocVariadicType(node); + return; + case 310 /* JSDocTypeExpression */: + return checkSourceElement(node.type); + case 334 /* JSDocPublicTag */: + case 336 /* JSDocProtectedTag */: + case 335 /* JSDocPrivateTag */: + return checkJSDocAccessibilityModifiers(node); + case 351 /* JSDocSatisfiesTag */: + return checkJSDocSatisfiesTag(node); + case 344 /* JSDocThisTag */: + return checkJSDocThisTag(node); + case 352 /* JSDocImportTag */: + return checkJSDocImportTag(node); + case 200 /* IndexedAccessType */: + return checkIndexedAccessType(node); + case 201 /* MappedType */: + return checkMappedType(node); + case 263 /* FunctionDeclaration */: + return checkFunctionDeclaration(node); + case 242 /* Block */: + case 269 /* ModuleBlock */: + return checkBlock(node); + case 244 /* VariableStatement */: + return checkVariableStatement(node); + case 245 /* ExpressionStatement */: + return checkExpressionStatement(node); + case 246 /* IfStatement */: + return checkIfStatement(node); + case 247 /* DoStatement */: + return checkDoStatement(node); + case 248 /* WhileStatement */: + return checkWhileStatement(node); + case 249 /* ForStatement */: + return checkForStatement(node); + case 250 /* ForInStatement */: + return checkForInStatement(node); + case 251 /* ForOfStatement */: + return checkForOfStatement(node); + case 252 /* ContinueStatement */: + case 253 /* BreakStatement */: + return checkBreakOrContinueStatement(node); + case 254 /* ReturnStatement */: + return checkReturnStatement(node); + case 255 /* WithStatement */: + return checkWithStatement(node); + case 256 /* SwitchStatement */: + return checkSwitchStatement(node); + case 257 /* LabeledStatement */: + return checkLabeledStatement(node); + case 258 /* ThrowStatement */: + return checkThrowStatement(node); + case 259 /* TryStatement */: + return checkTryStatement(node); + case 261 /* VariableDeclaration */: + return checkVariableDeclaration(node); + case 209 /* BindingElement */: + return checkBindingElement(node); + case 264 /* ClassDeclaration */: + return checkClassDeclaration(node); + case 265 /* InterfaceDeclaration */: + return checkInterfaceDeclaration(node); + case 266 /* TypeAliasDeclaration */: + return checkTypeAliasDeclaration(node); + case 267 /* EnumDeclaration */: + return checkEnumDeclaration(node); + case 307 /* EnumMember */: + return checkEnumMember(node); + case 268 /* ModuleDeclaration */: + return checkModuleDeclaration(node); + case 273 /* ImportDeclaration */: + return checkImportDeclaration(node); + case 272 /* ImportEqualsDeclaration */: + return checkImportEqualsDeclaration(node); + case 279 /* ExportDeclaration */: + return checkExportDeclaration(node); + case 278 /* ExportAssignment */: + return checkExportAssignment(node); + case 243 /* EmptyStatement */: + case 260 /* DebuggerStatement */: + checkGrammarStatementInAmbientContext(node); + return; + case 283 /* MissingDeclaration */: + return checkMissingDeclaration(node); + } + } + function checkJSDocCommentWorker(node) { + if (isArray(node)) { + forEach(node, (tag) => { + if (isJSDocLinkLike(tag)) { + checkSourceElement(tag); + } + }); + } + } + function checkJSDocTypeIsInJsFile(node) { + if (!isInJSFile(node)) { + if (isJSDocNonNullableType(node) || isJSDocNullableType(node)) { + const token = tokenToString(isJSDocNonNullableType(node) ? 54 /* ExclamationToken */ : 58 /* QuestionToken */); + const diagnostic = node.postfix ? Diagnostics._0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1 : Diagnostics._0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1; + const typeNode = node.type; + const type = getTypeFromTypeNode(typeNode); + grammarErrorOnNode( + node, + diagnostic, + token, + typeToString( + isJSDocNullableType(node) && !(type === neverType || type === voidType) ? getUnionType(append([type, undefinedType], node.postfix ? void 0 : nullType)) : type + ) + ); + } else { + grammarErrorOnNode(node, Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments); + } + } + } + function checkJSDocVariadicType(node) { + checkJSDocTypeIsInJsFile(node); + checkSourceElement(node.type); + const { parent: parent2 } = node; + if (isParameter(parent2) && isJSDocFunctionType(parent2.parent)) { + if (last(parent2.parent.parameters) !== parent2) { + error2(node, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + } + return; + } + if (!isJSDocTypeExpression(parent2)) { + error2(node, Diagnostics.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature); + } + const paramTag = node.parent.parent; + if (!isJSDocParameterTag(paramTag)) { + error2(node, Diagnostics.JSDoc_may_only_appear_in_the_last_parameter_of_a_signature); + return; + } + const param = getParameterSymbolFromJSDoc(paramTag); + if (!param) { + return; + } + const host2 = getHostSignatureFromJSDoc(paramTag); + if (!host2 || last(host2.parameters).symbol !== param) { + error2(node, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + } + } + function getTypeFromJSDocVariadicType(node) { + const type = getTypeFromTypeNode(node.type); + const { parent: parent2 } = node; + const paramTag = node.parent.parent; + if (isJSDocTypeExpression(node.parent) && isJSDocParameterTag(paramTag)) { + const host2 = getHostSignatureFromJSDoc(paramTag); + const isCallbackTag = isJSDocCallbackTag(paramTag.parent.parent); + if (host2 || isCallbackTag) { + const lastParamDeclaration = isCallbackTag ? lastOrUndefined(paramTag.parent.parent.typeExpression.parameters) : lastOrUndefined(host2.parameters); + const symbol = getParameterSymbolFromJSDoc(paramTag); + if (!lastParamDeclaration || symbol && lastParamDeclaration.symbol === symbol && isRestParameter(lastParamDeclaration)) { + return createArrayType(type); + } + } + } + if (isParameter(parent2) && isJSDocFunctionType(parent2.parent)) { + return createArrayType(type); + } + return addOptionality(type); + } + function checkNodeDeferred(node) { + const enclosingFile = getSourceFileOfNode(node); + const links = getNodeLinks(enclosingFile); + if (!(links.flags & 1 /* TypeChecked */)) { + links.deferredNodes || (links.deferredNodes = /* @__PURE__ */ new Set()); + links.deferredNodes.add(node); + } else { + Debug.assert(!links.deferredNodes, "A type-checked file should have no deferred nodes."); + } + } + function checkDeferredNodes(context) { + const links = getNodeLinks(context); + if (links.deferredNodes) { + links.deferredNodes.forEach(checkDeferredNode); + } + links.deferredNodes = void 0; + } + function checkDeferredNode(node) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Check, "checkDeferredNode", { kind: node.kind, pos: node.pos, end: node.end, path: node.tracingPath }); + const saveCurrentNode = currentNode; + currentNode = node; + instantiationCount = 0; + switch (node.kind) { + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 216 /* TaggedTemplateExpression */: + case 171 /* Decorator */: + case 287 /* JsxOpeningElement */: + resolveUntypedCall(node); + break; + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + checkFunctionExpressionOrObjectLiteralMethodDeferred(node); + break; + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + checkAccessorDeclaration(node); + break; + case 232 /* ClassExpression */: + checkClassExpressionDeferred(node); + break; + case 169 /* TypeParameter */: + checkTypeParameterDeferred(node); + break; + case 286 /* JsxSelfClosingElement */: + checkJsxSelfClosingElementDeferred(node); + break; + case 285 /* JsxElement */: + checkJsxElementDeferred(node); + break; + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + case 218 /* ParenthesizedExpression */: + checkAssertionDeferred(node); + break; + case 223 /* VoidExpression */: + checkExpression(node.expression); + break; + case 227 /* BinaryExpression */: + if (isInstanceOfExpression(node)) { + resolveUntypedCall(node); + } + break; + } + currentNode = saveCurrentNode; + (_b = tracing) == null ? void 0 : _b.pop(); + } + function checkSourceFile(node, nodesToCheck) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push( + tracing.Phase.Check, + nodesToCheck ? "checkSourceFileNodes" : "checkSourceFile", + { path: node.path }, + /*separateBeginAndEnd*/ + true + ); + const beforeMark = nodesToCheck ? "beforeCheckNodes" : "beforeCheck"; + const afterMark = nodesToCheck ? "afterCheckNodes" : "afterCheck"; + mark(beforeMark); + nodesToCheck ? checkSourceFileNodesWorker(node, nodesToCheck) : checkSourceFileWorker(node); + mark(afterMark); + measure("Check", beforeMark, afterMark); + (_b = tracing) == null ? void 0 : _b.pop(); + } + function unusedIsError(kind, isAmbient) { + if (isAmbient) { + return false; + } + switch (kind) { + case 0 /* Local */: + return !!compilerOptions.noUnusedLocals; + case 1 /* Parameter */: + return !!compilerOptions.noUnusedParameters; + default: + return Debug.assertNever(kind); + } + } + function getPotentiallyUnusedIdentifiers(sourceFile) { + return allPotentiallyUnusedIdentifiers.get(sourceFile.path) || emptyArray; + } + function checkSourceFileWorker(node) { + const links = getNodeLinks(node); + if (!(links.flags & 1 /* TypeChecked */)) { + if (skipTypeChecking(node, compilerOptions, host)) { + return; + } + checkGrammarSourceFile(node); + clear(potentialThisCollisions); + clear(potentialNewTargetCollisions); + clear(potentialWeakMapSetCollisions); + clear(potentialReflectCollisions); + clear(potentialUnusedRenamedBindingElementsInTypes); + if (links.flags & 8388608 /* PartiallyTypeChecked */) { + potentialThisCollisions = links.potentialThisCollisions; + potentialNewTargetCollisions = links.potentialNewTargetCollisions; + potentialWeakMapSetCollisions = links.potentialWeakMapSetCollisions; + potentialReflectCollisions = links.potentialReflectCollisions; + potentialUnusedRenamedBindingElementsInTypes = links.potentialUnusedRenamedBindingElementsInTypes; + } + forEach(node.statements, checkSourceElement); + checkSourceElement(node.endOfFileToken); + checkDeferredNodes(node); + if (isExternalOrCommonJsModule(node)) { + registerForUnusedIdentifiersCheck(node); + } + addLazyDiagnostic(() => { + if (!node.isDeclarationFile && (compilerOptions.noUnusedLocals || compilerOptions.noUnusedParameters)) { + checkUnusedIdentifiers(getPotentiallyUnusedIdentifiers(node), (containingNode, kind, diag2) => { + if (!containsParseError(containingNode) && unusedIsError(kind, !!(containingNode.flags & 33554432 /* Ambient */))) { + diagnostics.add(diag2); + } + }); + } + if (!node.isDeclarationFile) { + checkPotentialUncheckedRenamedBindingElementsInTypes(); + } + }); + if (isExternalOrCommonJsModule(node)) { + checkExternalModuleExports(node); + } + if (potentialThisCollisions.length) { + forEach(potentialThisCollisions, checkIfThisIsCapturedInEnclosingScope); + clear(potentialThisCollisions); + } + if (potentialNewTargetCollisions.length) { + forEach(potentialNewTargetCollisions, checkIfNewTargetIsCapturedInEnclosingScope); + clear(potentialNewTargetCollisions); + } + if (potentialWeakMapSetCollisions.length) { + forEach(potentialWeakMapSetCollisions, checkWeakMapSetCollision); + clear(potentialWeakMapSetCollisions); + } + if (potentialReflectCollisions.length) { + forEach(potentialReflectCollisions, checkReflectCollision); + clear(potentialReflectCollisions); + } + links.flags |= 1 /* TypeChecked */; + } + } + function checkSourceFileNodesWorker(file, nodes) { + const links = getNodeLinks(file); + if (!(links.flags & 1 /* TypeChecked */)) { + if (skipTypeChecking(file, compilerOptions, host)) { + return; + } + checkGrammarSourceFile(file); + clear(potentialThisCollisions); + clear(potentialNewTargetCollisions); + clear(potentialWeakMapSetCollisions); + clear(potentialReflectCollisions); + clear(potentialUnusedRenamedBindingElementsInTypes); + forEach(nodes, checkSourceElement); + checkDeferredNodes(file); + (links.potentialThisCollisions || (links.potentialThisCollisions = [])).push(...potentialThisCollisions); + (links.potentialNewTargetCollisions || (links.potentialNewTargetCollisions = [])).push(...potentialNewTargetCollisions); + (links.potentialWeakMapSetCollisions || (links.potentialWeakMapSetCollisions = [])).push(...potentialWeakMapSetCollisions); + (links.potentialReflectCollisions || (links.potentialReflectCollisions = [])).push(...potentialReflectCollisions); + (links.potentialUnusedRenamedBindingElementsInTypes || (links.potentialUnusedRenamedBindingElementsInTypes = [])).push( + ...potentialUnusedRenamedBindingElementsInTypes + ); + links.flags |= 8388608 /* PartiallyTypeChecked */; + for (const node of nodes) { + const nodeLinks2 = getNodeLinks(node); + nodeLinks2.flags |= 8388608 /* PartiallyTypeChecked */; + } + } + } + function getDiagnostics2(sourceFile, ct, nodesToCheck) { + try { + cancellationToken = ct; + return getDiagnosticsWorker(sourceFile, nodesToCheck); + } finally { + cancellationToken = void 0; + } + } + function ensurePendingDiagnosticWorkComplete() { + for (const cb of deferredDiagnosticsCallbacks) { + cb(); + } + deferredDiagnosticsCallbacks = []; + } + function checkSourceFileWithEagerDiagnostics(sourceFile, nodesToCheck) { + ensurePendingDiagnosticWorkComplete(); + const oldAddLazyDiagnostics = addLazyDiagnostic; + addLazyDiagnostic = (cb) => cb(); + checkSourceFile(sourceFile, nodesToCheck); + addLazyDiagnostic = oldAddLazyDiagnostics; + } + function getDiagnosticsWorker(sourceFile, nodesToCheck) { + if (sourceFile) { + ensurePendingDiagnosticWorkComplete(); + const previousGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); + const previousGlobalDiagnosticsSize = previousGlobalDiagnostics.length; + checkSourceFileWithEagerDiagnostics(sourceFile, nodesToCheck); + const semanticDiagnostics = diagnostics.getDiagnostics(sourceFile.fileName); + if (nodesToCheck) { + return semanticDiagnostics; + } + const currentGlobalDiagnostics = diagnostics.getGlobalDiagnostics(); + if (currentGlobalDiagnostics !== previousGlobalDiagnostics) { + const deferredGlobalDiagnostics = relativeComplement(previousGlobalDiagnostics, currentGlobalDiagnostics, compareDiagnostics); + return concatenate(deferredGlobalDiagnostics, semanticDiagnostics); + } else if (previousGlobalDiagnosticsSize === 0 && currentGlobalDiagnostics.length > 0) { + return concatenate(currentGlobalDiagnostics, semanticDiagnostics); + } + return semanticDiagnostics; + } + forEach(host.getSourceFiles(), (file) => checkSourceFileWithEagerDiagnostics(file)); + return diagnostics.getDiagnostics(); + } + function getGlobalDiagnostics() { + ensurePendingDiagnosticWorkComplete(); + return diagnostics.getGlobalDiagnostics(); + } + function getSymbolsInScope(location, meaning) { + if (location.flags & 67108864 /* InWithStatement */) { + return []; + } + const symbols = createSymbolTable(); + let isStaticSymbol = false; + populateSymbols(); + symbols.delete("this" /* This */); + return symbolsToArray(symbols); + function populateSymbols() { + while (location) { + if (canHaveLocals(location) && location.locals && !isGlobalSourceFile(location)) { + copySymbols(location.locals, meaning); + } + switch (location.kind) { + case 308 /* SourceFile */: + if (!isExternalModule(location)) break; + // falls through + case 268 /* ModuleDeclaration */: + copyLocallyVisibleExportSymbols(getSymbolOfDeclaration(location).exports, meaning & 2623475 /* ModuleMember */); + break; + case 267 /* EnumDeclaration */: + copySymbols(getSymbolOfDeclaration(location).exports, meaning & 8 /* EnumMember */); + break; + case 232 /* ClassExpression */: + const className = location.name; + if (className) { + copySymbol(location.symbol, meaning); + } + // this fall-through is necessary because we would like to handle + // type parameter inside class expression similar to how we handle it in classDeclaration and interface Declaration. + // falls through + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + if (!isStaticSymbol) { + copySymbols(getMembersOfSymbol(getSymbolOfDeclaration(location)), meaning & 788968 /* Type */); + } + break; + case 219 /* FunctionExpression */: + const funcName = location.name; + if (funcName) { + copySymbol(location.symbol, meaning); + } + break; + } + if (introducesArgumentsExoticObject(location)) { + copySymbol(argumentsSymbol, meaning); + } + isStaticSymbol = isStatic(location); + location = location.parent; + } + copySymbols(globals, meaning); + } + function copySymbol(symbol, meaning2) { + if (getCombinedLocalAndExportSymbolFlags(symbol) & meaning2) { + const id = symbol.escapedName; + if (!symbols.has(id)) { + symbols.set(id, symbol); + } + } + } + function copySymbols(source, meaning2) { + if (meaning2) { + source.forEach((symbol) => { + copySymbol(symbol, meaning2); + }); + } + } + function copyLocallyVisibleExportSymbols(source, meaning2) { + if (meaning2) { + source.forEach((symbol) => { + if (!getDeclarationOfKind(symbol, 282 /* ExportSpecifier */) && !getDeclarationOfKind(symbol, 281 /* NamespaceExport */) && symbol.escapedName !== "default" /* Default */) { + copySymbol(symbol, meaning2); + } + }); + } + } + } + function isTypeDeclarationName(name) { + return name.kind === 80 /* Identifier */ && isTypeDeclaration(name.parent) && getNameOfDeclaration(name.parent) === name; + } + function isTypeReferenceIdentifier(node) { + while (node.parent.kind === 167 /* QualifiedName */) { + node = node.parent; + } + return node.parent.kind === 184 /* TypeReference */; + } + function isInNameOfExpressionWithTypeArguments(node) { + while (node.parent.kind === 212 /* PropertyAccessExpression */) { + node = node.parent; + } + return node.parent.kind === 234 /* ExpressionWithTypeArguments */; + } + function forEachEnclosingClass(node, callback) { + let result; + let containingClass = getContainingClass(node); + while (containingClass) { + if (result = callback(containingClass)) break; + containingClass = getContainingClass(containingClass); + } + return result; + } + function isNodeUsedDuringClassInitialization(node) { + return !!findAncestor(node, (element) => { + if (isConstructorDeclaration(element) && nodeIsPresent(element.body) || isPropertyDeclaration(element)) { + return true; + } else if (isClassLike(element) || isFunctionLikeDeclaration(element)) { + return "quit"; + } + return false; + }); + } + function isNodeWithinClass(node, classDeclaration) { + return !!forEachEnclosingClass(node, (n) => n === classDeclaration); + } + function getLeftSideOfImportEqualsOrExportAssignment(nodeOnRightSide) { + while (nodeOnRightSide.parent.kind === 167 /* QualifiedName */) { + nodeOnRightSide = nodeOnRightSide.parent; + } + if (nodeOnRightSide.parent.kind === 272 /* ImportEqualsDeclaration */) { + return nodeOnRightSide.parent.moduleReference === nodeOnRightSide ? nodeOnRightSide.parent : void 0; + } + if (nodeOnRightSide.parent.kind === 278 /* ExportAssignment */) { + return nodeOnRightSide.parent.expression === nodeOnRightSide ? nodeOnRightSide.parent : void 0; + } + return void 0; + } + function isInRightSideOfImportOrExportAssignment(node) { + return getLeftSideOfImportEqualsOrExportAssignment(node) !== void 0; + } + function getSpecialPropertyAssignmentSymbolFromEntityName(entityName) { + const specialPropertyAssignmentKind = getAssignmentDeclarationKind(entityName.parent.parent); + switch (specialPropertyAssignmentKind) { + case 1 /* ExportsProperty */: + case 3 /* PrototypeProperty */: + return getSymbolOfNode(entityName.parent); + case 5 /* Property */: + if (isPropertyAccessExpression(entityName.parent) && getLeftmostAccessExpression(entityName.parent) === entityName) { + return void 0; + } + // falls through + case 4 /* ThisProperty */: + case 2 /* ModuleExports */: + return getSymbolOfDeclaration(entityName.parent.parent); + } + } + function isImportTypeQualifierPart(node) { + let parent2 = node.parent; + while (isQualifiedName(parent2)) { + node = parent2; + parent2 = parent2.parent; + } + if (parent2 && parent2.kind === 206 /* ImportType */ && parent2.qualifier === node) { + return parent2; + } + return void 0; + } + function isThisPropertyAndThisTyped(node) { + if (node.expression.kind === 110 /* ThisKeyword */) { + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (isFunctionLike(container)) { + const containingLiteral = getContainingObjectLiteral(container); + if (containingLiteral) { + const contextualType = getApparentTypeOfContextualType( + containingLiteral, + /*contextFlags*/ + void 0 + ); + const type = getThisTypeOfObjectLiteralFromContextualType(containingLiteral, contextualType); + return type && !isTypeAny(type); + } + } + } + } + function getSymbolOfNameOrPropertyAccessExpression(name) { + if (isDeclarationName(name)) { + return getSymbolOfNode(name.parent); + } + if (isInJSFile(name) && name.parent.kind === 212 /* PropertyAccessExpression */ && name.parent === name.parent.parent.left) { + if (!isPrivateIdentifier(name) && !isJSDocMemberName(name) && !isThisPropertyAndThisTyped(name.parent)) { + const specialPropertyAssignmentSymbol = getSpecialPropertyAssignmentSymbolFromEntityName(name); + if (specialPropertyAssignmentSymbol) { + return specialPropertyAssignmentSymbol; + } + } + } + if (name.parent.kind === 278 /* ExportAssignment */ && isEntityNameExpression(name)) { + const success = resolveEntityName( + name, + /*all meanings*/ + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, + /*ignoreErrors*/ + true + ); + if (success && success !== unknownSymbol) { + return success; + } + } else if (isEntityName(name) && isInRightSideOfImportOrExportAssignment(name)) { + const importEqualsDeclaration = getAncestor(name, 272 /* ImportEqualsDeclaration */); + Debug.assert(importEqualsDeclaration !== void 0); + return getSymbolOfPartOfRightHandSideOfImportEquals( + name, + /*dontResolveAlias*/ + true + ); + } + if (isEntityName(name)) { + const possibleImportNode = isImportTypeQualifierPart(name); + if (possibleImportNode) { + getTypeFromTypeNode(possibleImportNode); + const sym = getNodeLinks(name).resolvedSymbol; + return sym === unknownSymbol ? void 0 : sym; + } + } + while (isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName(name)) { + name = name.parent; + } + if (isInNameOfExpressionWithTypeArguments(name)) { + let meaning = 0 /* None */; + if (name.parent.kind === 234 /* ExpressionWithTypeArguments */) { + meaning = isPartOfTypeNode(name) ? 788968 /* Type */ : 111551 /* Value */; + if (isExpressionWithTypeArgumentsInClassExtendsClause(name.parent)) { + meaning |= 111551 /* Value */; + } + } else { + meaning = 1920 /* Namespace */; + } + meaning |= 2097152 /* Alias */; + const entityNameSymbol = isEntityNameExpression(name) ? resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + true + ) : void 0; + if (entityNameSymbol) { + return entityNameSymbol; + } + } + if (name.parent.kind === 342 /* JSDocParameterTag */) { + return getParameterSymbolFromJSDoc(name.parent); + } + if (name.parent.kind === 169 /* TypeParameter */ && name.parent.parent.kind === 346 /* JSDocTemplateTag */) { + Debug.assert(!isInJSFile(name)); + const typeParameter = getTypeParameterFromJsDoc(name.parent); + return typeParameter && typeParameter.symbol; + } + if (isExpressionNode(name)) { + if (nodeIsMissing(name)) { + return void 0; + } + const isJSDoc2 = findAncestor(name, or(isJSDocLinkLike, isJSDocNameReference, isJSDocMemberName)); + const meaning = isJSDoc2 ? 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */ : 111551 /* Value */; + if (name.kind === 80 /* Identifier */) { + if (isJSXTagName(name) && isJsxIntrinsicTagName(name)) { + const symbol = getIntrinsicTagSymbol(name.parent); + return symbol === unknownSymbol ? void 0 : symbol; + } + const result = resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + getHostSignatureFromJSDoc(name) + ); + if (!result && isJSDoc2) { + const container = findAncestor(name, or(isClassLike, isInterfaceDeclaration)); + if (container) { + return resolveJSDocMemberName( + name, + /*ignoreErrors*/ + true, + getSymbolOfDeclaration(container) + ); + } + } + if (result && isJSDoc2) { + const container = getJSDocHost(name); + if (container && isEnumMember(container) && container === result.valueDeclaration) { + return resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + getSourceFileOfNode(container) + ) || result; + } + } + return result; + } else if (isPrivateIdentifier(name)) { + return getSymbolForPrivateIdentifierExpression(name); + } else if (name.kind === 212 /* PropertyAccessExpression */ || name.kind === 167 /* QualifiedName */) { + const links = getNodeLinks(name); + if (links.resolvedSymbol) { + return links.resolvedSymbol; + } + if (name.kind === 212 /* PropertyAccessExpression */) { + checkPropertyAccessExpression(name, 0 /* Normal */); + if (!links.resolvedSymbol) { + links.resolvedSymbol = getApplicableIndexSymbol(checkExpressionCached(name.expression), getLiteralTypeFromPropertyName(name.name)); + } + } else { + checkQualifiedName(name, 0 /* Normal */); + } + if (!links.resolvedSymbol && isJSDoc2 && isQualifiedName(name)) { + return resolveJSDocMemberName(name); + } + return links.resolvedSymbol; + } else if (isJSDocMemberName(name)) { + return resolveJSDocMemberName(name); + } + } else if (isEntityName(name) && isTypeReferenceIdentifier(name)) { + const meaning = name.parent.kind === 184 /* TypeReference */ ? 788968 /* Type */ : 1920 /* Namespace */; + const symbol = resolveEntityName( + name, + meaning, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true + ); + return symbol && symbol !== unknownSymbol ? symbol : getUnresolvedSymbolForEntityName(name); + } + if (name.parent.kind === 183 /* TypePredicate */) { + return resolveEntityName( + name, + /*meaning*/ + 1 /* FunctionScopedVariable */, + /*ignoreErrors*/ + true + ); + } + return void 0; + } + function getApplicableIndexSymbol(type, keyType) { + const infos = getApplicableIndexInfos(type, keyType); + if (infos.length && type.members) { + const symbol = getIndexSymbolFromSymbolTable(resolveStructuredTypeMembers(type).members); + if (infos === getIndexInfosOfType(type)) { + return symbol; + } else if (symbol) { + const symbolLinks2 = getSymbolLinks(symbol); + const declarationList = mapDefined(infos, (i) => i.declaration); + const nodeListId = map(declarationList, getNodeId).join(","); + if (!symbolLinks2.filteredIndexSymbolCache) { + symbolLinks2.filteredIndexSymbolCache = /* @__PURE__ */ new Map(); + } + if (symbolLinks2.filteredIndexSymbolCache.has(nodeListId)) { + return symbolLinks2.filteredIndexSymbolCache.get(nodeListId); + } else { + const copy = createSymbol(131072 /* Signature */, "__index" /* Index */); + copy.declarations = mapDefined(infos, (i) => i.declaration); + copy.parent = type.aliasSymbol ? type.aliasSymbol : type.symbol ? type.symbol : getSymbolAtLocation(copy.declarations[0].parent); + symbolLinks2.filteredIndexSymbolCache.set(nodeListId, copy); + return copy; + } + } + } + } + function resolveJSDocMemberName(name, ignoreErrors, container) { + if (isEntityName(name)) { + const meaning = 788968 /* Type */ | 1920 /* Namespace */ | 111551 /* Value */; + let symbol = resolveEntityName( + name, + meaning, + ignoreErrors, + /*dontResolveAlias*/ + true, + getHostSignatureFromJSDoc(name) + ); + if (!symbol && isIdentifier(name) && container) { + symbol = getMergedSymbol(getSymbol2(getExportsOfSymbol(container), name.escapedText, meaning)); + } + if (symbol) { + return symbol; + } + } + const left = isIdentifier(name) ? container : resolveJSDocMemberName(name.left, ignoreErrors, container); + const right = isIdentifier(name) ? name.escapedText : name.right.escapedText; + if (left) { + const proto = left.flags & 111551 /* Value */ && getPropertyOfType(getTypeOfSymbol(left), "prototype"); + const t = proto ? getTypeOfSymbol(proto) : getDeclaredTypeOfSymbol(left); + return getPropertyOfType(t, right); + } + } + function getSymbolAtLocation(node, ignoreErrors) { + if (isSourceFile(node)) { + return isExternalModule(node) ? getMergedSymbol(node.symbol) : void 0; + } + const { parent: parent2 } = node; + const grandParent = parent2.parent; + if (node.flags & 67108864 /* InWithStatement */) { + return void 0; + } + if (isDeclarationNameOrImportPropertyName(node)) { + const parentSymbol = getSymbolOfDeclaration(parent2); + return isImportOrExportSpecifier(node.parent) && node.parent.propertyName === node ? getImmediateAliasedSymbol(parentSymbol) : parentSymbol; + } else if (isLiteralComputedPropertyDeclarationName(node)) { + return getSymbolOfDeclaration(parent2.parent); + } + if (node.kind === 80 /* Identifier */) { + if (isInRightSideOfImportOrExportAssignment(node)) { + return getSymbolOfNameOrPropertyAccessExpression(node); + } else if (parent2.kind === 209 /* BindingElement */ && grandParent.kind === 207 /* ObjectBindingPattern */ && node === parent2.propertyName) { + const typeOfPattern = getTypeOfNode(grandParent); + const propertyDeclaration = getPropertyOfType(typeOfPattern, node.escapedText); + if (propertyDeclaration) { + return propertyDeclaration; + } + } else if (isMetaProperty(parent2) && parent2.name === node) { + if (parent2.keywordToken === 105 /* NewKeyword */ && idText(node) === "target") { + return checkNewTargetMetaProperty(parent2).symbol; + } + if (parent2.keywordToken === 102 /* ImportKeyword */ && idText(node) === "meta") { + return getGlobalImportMetaExpressionType().members.get("meta"); + } + return void 0; + } + } + switch (node.kind) { + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + case 212 /* PropertyAccessExpression */: + case 167 /* QualifiedName */: + if (!isThisInTypeQuery(node)) { + return getSymbolOfNameOrPropertyAccessExpression(node); + } + // falls through + case 110 /* ThisKeyword */: + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (isFunctionLike(container)) { + const sig = getSignatureFromDeclaration(container); + if (sig.thisParameter) { + return sig.thisParameter; + } + } + if (isInExpressionContext(node)) { + return checkExpression(node).symbol; + } + // falls through + case 198 /* ThisType */: + return getTypeFromThisTypeNode(node).symbol; + case 108 /* SuperKeyword */: + return checkExpression(node).symbol; + case 137 /* ConstructorKeyword */: + const constructorDeclaration = node.parent; + if (constructorDeclaration && constructorDeclaration.kind === 177 /* Constructor */) { + return constructorDeclaration.parent.symbol; + } + return void 0; + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + if (isExternalModuleImportEqualsDeclaration(node.parent.parent) && getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node || (node.parent.kind === 273 /* ImportDeclaration */ || node.parent.kind === 279 /* ExportDeclaration */) && node.parent.moduleSpecifier === node || isInJSFile(node) && isJSDocImportTag(node.parent) && node.parent.moduleSpecifier === node || (isInJSFile(node) && isRequireCall( + node.parent, + /*requireStringLiteralLikeArgument*/ + false + ) || isImportCall(node.parent)) || isLiteralTypeNode(node.parent) && isLiteralImportTypeNode(node.parent.parent) && node.parent.parent.argument === node.parent) { + return resolveExternalModuleName(node, node, ignoreErrors); + } + if (isCallExpression(parent2) && isBindableObjectDefinePropertyCall(parent2) && parent2.arguments[1] === node) { + return getSymbolOfDeclaration(parent2); + } + // falls through + case 9 /* NumericLiteral */: + const objectType = isElementAccessExpression(parent2) ? parent2.argumentExpression === node ? getTypeOfExpression(parent2.expression) : void 0 : isLiteralTypeNode(parent2) && isIndexedAccessTypeNode(grandParent) ? getTypeFromTypeNode(grandParent.objectType) : void 0; + return objectType && getPropertyOfType(objectType, escapeLeadingUnderscores(node.text)); + case 90 /* DefaultKeyword */: + case 100 /* FunctionKeyword */: + case 39 /* EqualsGreaterThanToken */: + case 86 /* ClassKeyword */: + return getSymbolOfNode(node.parent); + case 206 /* ImportType */: + return isLiteralImportTypeNode(node) ? getSymbolAtLocation(node.argument.literal, ignoreErrors) : void 0; + case 95 /* ExportKeyword */: + return isExportAssignment(node.parent) ? Debug.checkDefined(node.parent.symbol) : void 0; + case 102 /* ImportKeyword */: + if (isMetaProperty(node.parent) && node.parent.name.escapedText === "defer") { + return void 0; + } + // falls through + case 105 /* NewKeyword */: + return isMetaProperty(node.parent) ? checkMetaPropertyKeyword(node.parent).symbol : void 0; + case 104 /* InstanceOfKeyword */: + if (isBinaryExpression(node.parent)) { + const type = getTypeOfExpression(node.parent.right); + const hasInstanceMethodType = getSymbolHasInstanceMethodOfObjectType(type); + return (hasInstanceMethodType == null ? void 0 : hasInstanceMethodType.symbol) ?? type.symbol; + } + return void 0; + case 237 /* MetaProperty */: + return checkExpression(node).symbol; + case 296 /* JsxNamespacedName */: + if (isJSXTagName(node) && isJsxIntrinsicTagName(node)) { + const symbol = getIntrinsicTagSymbol(node.parent); + return symbol === unknownSymbol ? void 0 : symbol; + } + // falls through + default: + return void 0; + } + } + function getIndexInfosAtLocation(node) { + if (isIdentifier(node) && isPropertyAccessExpression(node.parent) && node.parent.name === node) { + const keyType = getLiteralTypeFromPropertyName(node); + const objectType = getTypeOfExpression(node.parent.expression); + const objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType]; + return flatMap(objectTypes, (t) => filter(getIndexInfosOfType(t), (info) => isApplicableIndexType(keyType, info.keyType))); + } + return void 0; + } + function getShorthandAssignmentValueSymbol(location) { + if (location && location.kind === 305 /* ShorthandPropertyAssignment */) { + return resolveEntityName( + location.name, + 111551 /* Value */ | 2097152 /* Alias */, + /*ignoreErrors*/ + true + ); + } + return void 0; + } + function getExportSpecifierLocalTargetSymbol(node) { + if (isExportSpecifier(node)) { + const name = node.propertyName || node.name; + return node.parent.parent.moduleSpecifier ? getExternalModuleMember(node.parent.parent, node) : name.kind === 11 /* StringLiteral */ ? void 0 : ( + // Skip for invalid syntax like this: export { "x" } + resolveEntityName( + name, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, + /*ignoreErrors*/ + true + ) + ); + } else { + return resolveEntityName( + node, + 111551 /* Value */ | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */, + /*ignoreErrors*/ + true + ); + } + } + function getTypeOfNode(node) { + if (isSourceFile(node) && !isExternalModule(node)) { + return errorType; + } + if (node.flags & 67108864 /* InWithStatement */) { + return errorType; + } + const classDecl = tryGetClassImplementingOrExtendingExpressionWithTypeArguments(node); + const classType = classDecl && getDeclaredTypeOfClassOrInterface(getSymbolOfDeclaration(classDecl.class)); + if (isPartOfTypeNode(node)) { + const typeFromTypeNode = getTypeFromTypeNode(node); + return classType ? getTypeWithThisArgument(typeFromTypeNode, classType.thisType) : typeFromTypeNode; + } + if (isExpressionNode(node)) { + return getRegularTypeOfExpression(node); + } + if (classType && !classDecl.isImplements) { + const baseType = firstOrUndefined(getBaseTypes(classType)); + return baseType ? getTypeWithThisArgument(baseType, classType.thisType) : errorType; + } + if (isTypeDeclaration(node)) { + const symbol = getSymbolOfDeclaration(node); + return getDeclaredTypeOfSymbol(symbol); + } + if (isTypeDeclarationName(node)) { + const symbol = getSymbolAtLocation(node); + return symbol ? getDeclaredTypeOfSymbol(symbol) : errorType; + } + if (isBindingElement(node)) { + return getTypeForVariableLikeDeclaration( + node, + /*includeOptionality*/ + true, + 0 /* Normal */ + ) || errorType; + } + if (isDeclaration(node)) { + const symbol = getSymbolOfDeclaration(node); + return symbol ? getTypeOfSymbol(symbol) : errorType; + } + if (isDeclarationNameOrImportPropertyName(node)) { + const symbol = getSymbolAtLocation(node); + if (symbol) { + return getTypeOfSymbol(symbol); + } + return errorType; + } + if (isBindingPattern(node)) { + return getTypeForVariableLikeDeclaration( + node.parent, + /*includeOptionality*/ + true, + 0 /* Normal */ + ) || errorType; + } + if (isInRightSideOfImportOrExportAssignment(node)) { + const symbol = getSymbolAtLocation(node); + if (symbol) { + const declaredType = getDeclaredTypeOfSymbol(symbol); + return !isErrorType(declaredType) ? declaredType : getTypeOfSymbol(symbol); + } + } + if (isMetaProperty(node.parent) && node.parent.keywordToken === node.kind) { + return checkMetaPropertyKeyword(node.parent); + } + if (isImportAttributes(node)) { + return getGlobalImportAttributesType( + /*reportErrors*/ + false + ); + } + return errorType; + } + function getTypeOfAssignmentPattern(expr) { + Debug.assert(expr.kind === 211 /* ObjectLiteralExpression */ || expr.kind === 210 /* ArrayLiteralExpression */); + if (expr.parent.kind === 251 /* ForOfStatement */) { + const iteratedType = checkRightHandSideOfForOf(expr.parent); + return checkDestructuringAssignment(expr, iteratedType || errorType); + } + if (expr.parent.kind === 227 /* BinaryExpression */) { + const iteratedType = getTypeOfExpression(expr.parent.right); + return checkDestructuringAssignment(expr, iteratedType || errorType); + } + if (expr.parent.kind === 304 /* PropertyAssignment */) { + const node2 = cast(expr.parent.parent, isObjectLiteralExpression); + const typeOfParentObjectLiteral = getTypeOfAssignmentPattern(node2) || errorType; + const propertyIndex = indexOfNode(node2.properties, expr.parent); + return checkObjectLiteralDestructuringPropertyAssignment(node2, typeOfParentObjectLiteral, propertyIndex); + } + const node = cast(expr.parent, isArrayLiteralExpression); + const typeOfArrayLiteral = getTypeOfAssignmentPattern(node) || errorType; + const elementType = checkIteratedTypeOrElementType(65 /* Destructuring */, typeOfArrayLiteral, undefinedType, expr.parent) || errorType; + return checkArrayLiteralDestructuringElementAssignment(node, typeOfArrayLiteral, node.elements.indexOf(expr), elementType); + } + function getPropertySymbolOfDestructuringAssignment(location) { + const typeOfObjectLiteral = getTypeOfAssignmentPattern(cast(location.parent.parent, isAssignmentPattern)); + return typeOfObjectLiteral && getPropertyOfType(typeOfObjectLiteral, location.escapedText); + } + function getRegularTypeOfExpression(expr) { + if (isRightSideOfQualifiedNameOrPropertyAccess(expr)) { + expr = expr.parent; + } + return getRegularTypeOfLiteralType(getTypeOfExpression(expr)); + } + function getParentTypeOfClassElement(node) { + const classSymbol = getSymbolOfNode(node.parent); + return isStatic(node) ? getTypeOfSymbol(classSymbol) : getDeclaredTypeOfSymbol(classSymbol); + } + function getClassElementPropertyKeyType(element) { + const name = element.name; + switch (name.kind) { + case 80 /* Identifier */: + return getStringLiteralType(idText(name)); + case 9 /* NumericLiteral */: + case 11 /* StringLiteral */: + return getStringLiteralType(name.text); + case 168 /* ComputedPropertyName */: + const nameType = checkComputedPropertyName(name); + return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType; + default: + return Debug.fail("Unsupported property name."); + } + } + function getAugmentedPropertiesOfType(type) { + type = getApparentType(type); + const propsByName = createSymbolTable(getPropertiesOfType(type)); + const functionType = getSignaturesOfType(type, 0 /* Call */).length ? globalCallableFunctionType : getSignaturesOfType(type, 1 /* Construct */).length ? globalNewableFunctionType : void 0; + if (functionType) { + forEach(getPropertiesOfType(functionType), (p) => { + if (!propsByName.has(p.escapedName)) { + propsByName.set(p.escapedName, p); + } + }); + } + return getNamedMembers(propsByName); + } + function typeHasCallOrConstructSignatures(type) { + return getSignaturesOfType(type, 0 /* Call */).length !== 0 || getSignaturesOfType(type, 1 /* Construct */).length !== 0; + } + function getRootSymbols(symbol) { + const roots = getImmediateRootSymbols(symbol); + return roots ? flatMap(roots, getRootSymbols) : [symbol]; + } + function getImmediateRootSymbols(symbol) { + if (getCheckFlags(symbol) & 6 /* Synthetic */) { + return mapDefined(getSymbolLinks(symbol).containingType.types, (type) => getPropertyOfType(type, symbol.escapedName)); + } else if (symbol.flags & 33554432 /* Transient */) { + const { links: { leftSpread, rightSpread, syntheticOrigin } } = symbol; + return leftSpread ? [leftSpread, rightSpread] : syntheticOrigin ? [syntheticOrigin] : singleElementArray(tryGetTarget(symbol)); + } + return void 0; + } + function tryGetTarget(symbol) { + let target; + let next = symbol; + while (next = getSymbolLinks(next).target) { + target = next; + } + return target; + } + function isArgumentsLocalBinding(nodeIn) { + if (isGeneratedIdentifier(nodeIn)) return false; + const node = getParseTreeNode(nodeIn, isIdentifier); + if (!node) return false; + const parent2 = node.parent; + if (!parent2) return false; + const isPropertyName2 = (isPropertyAccessExpression(parent2) || isPropertyAssignment(parent2)) && parent2.name === node; + return !isPropertyName2 && getReferencedValueSymbol(node) === argumentsSymbol; + } + function isNameOfModuleOrEnumDeclaration(node) { + return isModuleOrEnumDeclaration(node.parent) && node === node.parent.name; + } + function getReferencedExportContainer(nodeIn, prefixLocals) { + var _a; + const node = getParseTreeNode(nodeIn, isIdentifier); + if (node) { + let symbol = getReferencedValueSymbol( + node, + /*startInDeclarationContainer*/ + isNameOfModuleOrEnumDeclaration(node) + ); + if (symbol) { + if (symbol.flags & 1048576 /* ExportValue */) { + const exportSymbol = getMergedSymbol(symbol.exportSymbol); + if (!prefixLocals && exportSymbol.flags & 944 /* ExportHasLocal */ && !(exportSymbol.flags & 3 /* Variable */)) { + return void 0; + } + symbol = exportSymbol; + } + const parentSymbol = getParentOfSymbol(symbol); + if (parentSymbol) { + if (parentSymbol.flags & 512 /* ValueModule */ && ((_a = parentSymbol.valueDeclaration) == null ? void 0 : _a.kind) === 308 /* SourceFile */) { + const symbolFile = parentSymbol.valueDeclaration; + const referenceFile = getSourceFileOfNode(node); + const symbolIsUmdExport = symbolFile !== referenceFile; + return symbolIsUmdExport ? void 0 : symbolFile; + } + return findAncestor(node.parent, (n) => isModuleOrEnumDeclaration(n) && getSymbolOfDeclaration(n) === parentSymbol); + } + } + } + } + function getReferencedImportDeclaration(nodeIn) { + const specifier = getIdentifierGeneratedImportReference(nodeIn); + if (specifier) { + return specifier; + } + const node = getParseTreeNode(nodeIn, isIdentifier); + if (node) { + const symbol = getReferencedValueOrAliasSymbol(node); + if (isNonLocalAlias( + symbol, + /*excludes*/ + 111551 /* Value */ + ) && !getTypeOnlyAliasDeclaration(symbol, 111551 /* Value */)) { + return getDeclarationOfAliasSymbol(symbol); + } + } + return void 0; + } + function isSymbolOfDestructuredElementOfCatchBinding(symbol) { + return symbol.valueDeclaration && isBindingElement(symbol.valueDeclaration) && walkUpBindingElementsAndPatterns(symbol.valueDeclaration).parent.kind === 300 /* CatchClause */; + } + function isSymbolOfDeclarationWithCollidingName(symbol) { + if (symbol.flags & 418 /* BlockScoped */ && symbol.valueDeclaration && !isSourceFile(symbol.valueDeclaration)) { + const links = getSymbolLinks(symbol); + if (links.isDeclarationWithCollidingName === void 0) { + const container = getEnclosingBlockScopeContainer(symbol.valueDeclaration); + if (isStatementWithLocals(container) || isSymbolOfDestructuredElementOfCatchBinding(symbol)) { + if (resolveName( + container.parent, + symbol.escapedName, + 111551 /* Value */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + false + )) { + links.isDeclarationWithCollidingName = true; + } else if (hasNodeCheckFlag(symbol.valueDeclaration, 16384 /* CapturedBlockScopedBinding */)) { + const isDeclaredInLoop = hasNodeCheckFlag(symbol.valueDeclaration, 32768 /* BlockScopedBindingInLoop */); + const inLoopInitializer = isIterationStatement( + container, + /*lookInLabeledStatements*/ + false + ); + const inLoopBodyBlock = container.kind === 242 /* Block */ && isIterationStatement( + container.parent, + /*lookInLabeledStatements*/ + false + ); + links.isDeclarationWithCollidingName = !isBlockScopedContainerTopLevel(container) && (!isDeclaredInLoop || !inLoopInitializer && !inLoopBodyBlock); + } else { + links.isDeclarationWithCollidingName = false; + } + } + } + return links.isDeclarationWithCollidingName; + } + return false; + } + function getReferencedDeclarationWithCollidingName(nodeIn) { + if (!isGeneratedIdentifier(nodeIn)) { + const node = getParseTreeNode(nodeIn, isIdentifier); + if (node) { + const symbol = getReferencedValueSymbol(node); + if (symbol && isSymbolOfDeclarationWithCollidingName(symbol)) { + return symbol.valueDeclaration; + } + } + } + return void 0; + } + function isDeclarationWithCollidingName(nodeIn) { + const node = getParseTreeNode(nodeIn, isDeclaration); + if (node) { + const symbol = getSymbolOfDeclaration(node); + if (symbol) { + return isSymbolOfDeclarationWithCollidingName(symbol); + } + } + return false; + } + function isValueAliasDeclaration(node) { + Debug.assert(canCollectSymbolAliasAccessabilityData); + switch (node.kind) { + case 272 /* ImportEqualsDeclaration */: + return isAliasResolvedToValue(getSymbolOfDeclaration(node)); + case 274 /* ImportClause */: + case 275 /* NamespaceImport */: + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: + const symbol = getSymbolOfDeclaration(node); + return !!symbol && isAliasResolvedToValue( + symbol, + /*excludeTypeOnlyValues*/ + true + ); + case 279 /* ExportDeclaration */: + const exportClause = node.exportClause; + return !!exportClause && (isNamespaceExport(exportClause) || some(exportClause.elements, isValueAliasDeclaration)); + case 278 /* ExportAssignment */: + return node.expression && node.expression.kind === 80 /* Identifier */ ? isAliasResolvedToValue( + getSymbolOfDeclaration(node), + /*excludeTypeOnlyValues*/ + true + ) : true; + } + return false; + } + function isTopLevelValueImportEqualsWithEntityName(nodeIn) { + const node = getParseTreeNode(nodeIn, isImportEqualsDeclaration); + if (node === void 0 || node.parent.kind !== 308 /* SourceFile */ || !isInternalModuleImportEqualsDeclaration(node)) { + return false; + } + const isValue = isAliasResolvedToValue(getSymbolOfDeclaration(node)); + return isValue && node.moduleReference && !nodeIsMissing(node.moduleReference); + } + function isAliasResolvedToValue(symbol, excludeTypeOnlyValues) { + if (!symbol) { + return false; + } + const container = getSourceFileOfNode(symbol.valueDeclaration); + const fileSymbol = container && getSymbolOfDeclaration(container); + void resolveExternalModuleSymbol(fileSymbol); + const target = getExportSymbolOfValueSymbolIfExported(resolveAlias(symbol)); + if (target === unknownSymbol) { + return !excludeTypeOnlyValues || !getTypeOnlyAliasDeclaration(symbol); + } + return !!(getSymbolFlags( + symbol, + excludeTypeOnlyValues, + /*excludeLocalMeanings*/ + true + ) & 111551 /* Value */) && (shouldPreserveConstEnums(compilerOptions) || !isConstEnumOrConstEnumOnlyModule(target)); + } + function isConstEnumOrConstEnumOnlyModule(s) { + return isConstEnumSymbol(s) || !!s.constEnumOnlyModule; + } + function isReferencedAliasDeclaration(node, checkChildren) { + Debug.assert(canCollectSymbolAliasAccessabilityData); + if (isAliasSymbolDeclaration(node)) { + const symbol = getSymbolOfDeclaration(node); + const links = symbol && getSymbolLinks(symbol); + if (links == null ? void 0 : links.referenced) { + return true; + } + const target = getSymbolLinks(symbol).aliasTarget; + if (target && getEffectiveModifierFlags(node) & 32 /* Export */ && getSymbolFlags(target) & 111551 /* Value */ && (shouldPreserveConstEnums(compilerOptions) || !isConstEnumOrConstEnumOnlyModule(target))) { + return true; + } + } + if (checkChildren) { + return !!forEachChild(node, (node2) => isReferencedAliasDeclaration(node2, checkChildren)); + } + return false; + } + function isImplementationOfOverload(node) { + if (nodeIsPresent(node.body)) { + if (isGetAccessor(node) || isSetAccessor(node)) return false; + const symbol = getSymbolOfDeclaration(node); + const signaturesOfSymbol = getSignaturesOfSymbol(symbol); + return signaturesOfSymbol.length > 1 || // If there is single signature for the symbol, it is overload if that signature isn't coming from the node + // e.g.: function foo(a: string): string; + // function foo(a: any) { // This is implementation of the overloads + // return a; + // } + signaturesOfSymbol.length === 1 && signaturesOfSymbol[0].declaration !== node; + } + return false; + } + function declaredParameterTypeContainsUndefined(parameter) { + const typeNode = getNonlocalEffectiveTypeAnnotationNode(parameter); + if (!typeNode) return false; + const type = getTypeFromTypeNode(typeNode); + return isErrorType(type) || containsUndefinedType(type); + } + function requiresAddingImplicitUndefined(parameter, enclosingDeclaration) { + return (isRequiredInitializedParameter(parameter, enclosingDeclaration) || isOptionalUninitializedParameterProperty(parameter)) && !declaredParameterTypeContainsUndefined(parameter); + } + function isRequiredInitializedParameter(parameter, enclosingDeclaration) { + if (!strictNullChecks || isOptionalParameter(parameter) || isJSDocParameterTag(parameter) || !parameter.initializer) { + return false; + } + if (hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */)) { + return !!enclosingDeclaration && isFunctionLikeDeclaration(enclosingDeclaration); + } + return true; + } + function isOptionalUninitializedParameterProperty(parameter) { + return strictNullChecks && isOptionalParameter(parameter) && (isJSDocParameterTag(parameter) || !parameter.initializer) && hasSyntacticModifier(parameter, 31 /* ParameterPropertyModifier */); + } + function isExpandoFunctionDeclaration(node) { + const declaration = getParseTreeNode(node, (n) => isFunctionDeclaration(n) || isVariableDeclaration(n)); + if (!declaration) { + return false; + } + let symbol; + if (isVariableDeclaration(declaration)) { + if (declaration.type || !isInJSFile(declaration) && !isVarConstLike2(declaration)) { + return false; + } + const initializer = getDeclaredExpandoInitializer(declaration); + if (!initializer || !canHaveSymbol(initializer)) { + return false; + } + symbol = getSymbolOfDeclaration(initializer); + } else { + symbol = getSymbolOfDeclaration(declaration); + } + if (!symbol || !(symbol.flags & 16 /* Function */ | 3 /* Variable */)) { + return false; + } + return !!forEachEntry(getExportsOfSymbol(symbol), (p) => p.flags & 111551 /* Value */ && isExpandoPropertyDeclaration(p.valueDeclaration)); + } + function getPropertiesOfContainerFunction(node) { + const declaration = getParseTreeNode(node, isFunctionDeclaration); + if (!declaration) { + return emptyArray; + } + const symbol = getSymbolOfDeclaration(declaration); + return symbol && getPropertiesOfType(getTypeOfSymbol(symbol)) || emptyArray; + } + function getNodeCheckFlags(node) { + var _a; + const nodeId = node.id || 0; + if (nodeId < 0 || nodeId >= nodeLinks.length) return 0; + return ((_a = nodeLinks[nodeId]) == null ? void 0 : _a.flags) || 0; + } + function hasNodeCheckFlag(node, flag) { + calculateNodeCheckFlagWorker(node, flag); + return !!(getNodeCheckFlags(node) & flag); + } + function calculateNodeCheckFlagWorker(node, flag) { + if (!compilerOptions.noCheck && canIncludeBindAndCheckDiagnostics(getSourceFileOfNode(node), compilerOptions)) { + return; + } + const links = getNodeLinks(node); + if (links.calculatedFlags & flag) { + return; + } + switch (flag) { + case 16 /* SuperInstance */: + case 32 /* SuperStatic */: + return checkSingleSuperExpression(node); + case 128 /* MethodWithSuperPropertyAccessInAsync */: + case 256 /* MethodWithSuperPropertyAssignmentInAsync */: + case 2097152 /* ContainsSuperPropertyInStaticInitializer */: + return checkChildSuperExpressions(node); + case 512 /* CaptureArguments */: + case 8192 /* ContainsCapturedBlockScopeBinding */: + case 65536 /* NeedsLoopOutParameter */: + case 262144 /* ContainsConstructorReference */: + return checkChildIdentifiers(node); + case 536870912 /* ConstructorReference */: + return checkSingleIdentifier(node); + case 4096 /* LoopWithCapturedBlockScopedBinding */: + case 32768 /* BlockScopedBindingInLoop */: + case 16384 /* CapturedBlockScopedBinding */: + return checkContainingBlockScopeBindingUses(node); + default: + return Debug.assertNever(flag, `Unhandled node check flag calculation: ${Debug.formatNodeCheckFlags(flag)}`); + } + function forEachNodeRecursively(root, cb) { + const rootResult = cb(root, root.parent); + if (rootResult === "skip") return void 0; + if (rootResult) return rootResult; + return forEachChildRecursively(root, cb); + } + function checkSuperExpressions(node2) { + const links2 = getNodeLinks(node2); + if (links2.calculatedFlags & flag) return "skip"; + links2.calculatedFlags |= 128 /* MethodWithSuperPropertyAccessInAsync */ | 256 /* MethodWithSuperPropertyAssignmentInAsync */ | 2097152 /* ContainsSuperPropertyInStaticInitializer */; + checkSingleSuperExpression(node2); + return void 0; + } + function checkChildSuperExpressions(node2) { + forEachNodeRecursively(node2, checkSuperExpressions); + } + function checkSingleSuperExpression(node2) { + const nodeLinks2 = getNodeLinks(node2); + nodeLinks2.calculatedFlags |= 16 /* SuperInstance */ | 32 /* SuperStatic */; + if (node2.kind === 108 /* SuperKeyword */) { + checkSuperExpression(node2); + } + } + function checkIdentifiers(node2) { + const links2 = getNodeLinks(node2); + if (links2.calculatedFlags & flag) return "skip"; + links2.calculatedFlags |= 512 /* CaptureArguments */ | 8192 /* ContainsCapturedBlockScopeBinding */ | 65536 /* NeedsLoopOutParameter */ | 262144 /* ContainsConstructorReference */; + checkSingleIdentifier(node2); + return void 0; + } + function checkChildIdentifiers(node2) { + forEachNodeRecursively(node2, checkIdentifiers); + } + function isExpressionNodeOrShorthandPropertyAssignmentName(node2) { + return isExpressionNode(node2) || isShorthandPropertyAssignment(node2.parent) && (node2.parent.objectAssignmentInitializer ?? node2.parent.name) === node2; + } + function checkSingleIdentifier(node2) { + const nodeLinks2 = getNodeLinks(node2); + nodeLinks2.calculatedFlags |= 536870912 /* ConstructorReference */; + if (isIdentifier(node2)) { + nodeLinks2.calculatedFlags |= 32768 /* BlockScopedBindingInLoop */ | 16384 /* CapturedBlockScopedBinding */; + if (isExpressionNodeOrShorthandPropertyAssignmentName(node2) && !(isPropertyAccessExpression(node2.parent) && node2.parent.name === node2)) { + const s = getResolvedSymbol(node2); + if (s && s !== unknownSymbol) { + checkIdentifierCalculateNodeCheckFlags(node2, s); + } + } + } + } + function checkBlockScopeBindings(node2) { + const links2 = getNodeLinks(node2); + if (links2.calculatedFlags & flag) return "skip"; + links2.calculatedFlags |= 4096 /* LoopWithCapturedBlockScopedBinding */ | 32768 /* BlockScopedBindingInLoop */ | 16384 /* CapturedBlockScopedBinding */; + checkSingleBlockScopeBinding(node2); + return void 0; + } + function checkContainingBlockScopeBindingUses(node2) { + const scope = getEnclosingBlockScopeContainer(isDeclarationName(node2) ? node2.parent : node2); + forEachNodeRecursively(scope, checkBlockScopeBindings); + } + function checkSingleBlockScopeBinding(node2) { + checkSingleIdentifier(node2); + if (isComputedPropertyName(node2)) { + checkComputedPropertyName(node2); + } + if (isPrivateIdentifier(node2) && isClassElement(node2.parent)) { + setNodeLinksForPrivateIdentifierScope(node2.parent); + } + } + } + function getEnumMemberValue(node) { + computeEnumMemberValues(node.parent); + return getNodeLinks(node).enumMemberValue ?? evaluatorResult( + /*value*/ + void 0 + ); + } + function canHaveConstantValue(node) { + switch (node.kind) { + case 307 /* EnumMember */: + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return true; + } + return false; + } + function getConstantValue2(node) { + if (node.kind === 307 /* EnumMember */) { + return getEnumMemberValue(node).value; + } + if (!getNodeLinks(node).resolvedSymbol) { + void checkExpressionCached(node); + } + const symbol = getNodeLinks(node).resolvedSymbol || (isEntityNameExpression(node) ? resolveEntityName( + node, + 111551 /* Value */, + /*ignoreErrors*/ + true + ) : void 0); + if (symbol && symbol.flags & 8 /* EnumMember */) { + const member = symbol.valueDeclaration; + if (isEnumConst(member.parent)) { + return getEnumMemberValue(member).value; + } + } + return void 0; + } + function isFunctionType(type) { + return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0; + } + function getTypeReferenceSerializationKind(typeNameIn, location) { + var _a; + const typeName = getParseTreeNode(typeNameIn, isEntityName); + if (!typeName) return 0 /* Unknown */; + if (location) { + location = getParseTreeNode(location); + if (!location) return 0 /* Unknown */; + } + let isTypeOnly = false; + if (isQualifiedName(typeName)) { + const rootValueSymbol = resolveEntityName( + getFirstIdentifier(typeName), + 111551 /* Value */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + location + ); + isTypeOnly = !!((_a = rootValueSymbol == null ? void 0 : rootValueSymbol.declarations) == null ? void 0 : _a.every(isTypeOnlyImportOrExportDeclaration)); + } + const valueSymbol = resolveEntityName( + typeName, + 111551 /* Value */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + location + ); + const resolvedValueSymbol = valueSymbol && valueSymbol.flags & 2097152 /* Alias */ ? resolveAlias(valueSymbol) : valueSymbol; + isTypeOnly || (isTypeOnly = !!(valueSymbol && getTypeOnlyAliasDeclaration(valueSymbol, 111551 /* Value */))); + const typeSymbol = resolveEntityName( + typeName, + 788968 /* Type */, + /*ignoreErrors*/ + true, + /*dontResolveAlias*/ + true, + location + ); + const resolvedTypeSymbol = typeSymbol && typeSymbol.flags & 2097152 /* Alias */ ? resolveAlias(typeSymbol) : typeSymbol; + if (!valueSymbol) { + isTypeOnly || (isTypeOnly = !!(typeSymbol && getTypeOnlyAliasDeclaration(typeSymbol, 788968 /* Type */))); + } + if (resolvedValueSymbol && resolvedValueSymbol === resolvedTypeSymbol) { + const globalPromiseSymbol = getGlobalPromiseConstructorSymbol( + /*reportErrors*/ + false + ); + if (globalPromiseSymbol && resolvedValueSymbol === globalPromiseSymbol) { + return 9 /* Promise */; + } + const constructorType = getTypeOfSymbol(resolvedValueSymbol); + if (constructorType && isConstructorType(constructorType)) { + return isTypeOnly ? 10 /* TypeWithCallSignature */ : 1 /* TypeWithConstructSignatureAndValue */; + } + } + if (!resolvedTypeSymbol) { + return isTypeOnly ? 11 /* ObjectType */ : 0 /* Unknown */; + } + const type = getDeclaredTypeOfSymbol(resolvedTypeSymbol); + if (isErrorType(type)) { + return isTypeOnly ? 11 /* ObjectType */ : 0 /* Unknown */; + } else if (type.flags & 3 /* AnyOrUnknown */) { + return 11 /* ObjectType */; + } else if (isTypeAssignableToKind(type, 16384 /* Void */ | 98304 /* Nullable */ | 131072 /* Never */)) { + return 2 /* VoidNullableOrNeverType */; + } else if (isTypeAssignableToKind(type, 528 /* BooleanLike */)) { + return 6 /* BooleanType */; + } else if (isTypeAssignableToKind(type, 296 /* NumberLike */)) { + return 3 /* NumberLikeType */; + } else if (isTypeAssignableToKind(type, 2112 /* BigIntLike */)) { + return 4 /* BigIntLikeType */; + } else if (isTypeAssignableToKind(type, 402653316 /* StringLike */)) { + return 5 /* StringLikeType */; + } else if (isTupleType(type)) { + return 7 /* ArrayLikeType */; + } else if (isTypeAssignableToKind(type, 12288 /* ESSymbolLike */)) { + return 8 /* ESSymbolType */; + } else if (isFunctionType(type)) { + return 10 /* TypeWithCallSignature */; + } else if (isArrayType(type)) { + return 7 /* ArrayLikeType */; + } else { + return 11 /* ObjectType */; + } + } + function createTypeOfDeclaration(declarationIn, enclosingDeclaration, flags, internalFlags, tracker) { + const declaration = getParseTreeNode(declarationIn, hasInferredType); + if (!declaration) { + return factory.createToken(133 /* AnyKeyword */); + } + const symbol = getSymbolOfDeclaration(declaration); + return nodeBuilder.serializeTypeForDeclaration(declaration, symbol, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); + } + function getAllAccessorDeclarationsForDeclaration(accessor) { + accessor = getParseTreeNode(accessor, isGetOrSetAccessorDeclaration); + const otherKind = accessor.kind === 179 /* SetAccessor */ ? 178 /* GetAccessor */ : 179 /* SetAccessor */; + const otherAccessor = getDeclarationOfKind(getSymbolOfDeclaration(accessor), otherKind); + const firstAccessor = otherAccessor && otherAccessor.pos < accessor.pos ? otherAccessor : accessor; + const secondAccessor = otherAccessor && otherAccessor.pos < accessor.pos ? accessor : otherAccessor; + const setAccessor = accessor.kind === 179 /* SetAccessor */ ? accessor : otherAccessor; + const getAccessor = accessor.kind === 178 /* GetAccessor */ ? accessor : otherAccessor; + return { + firstAccessor, + secondAccessor, + setAccessor, + getAccessor + }; + } + function createReturnTypeOfSignatureDeclaration(signatureDeclarationIn, enclosingDeclaration, flags, internalFlags, tracker) { + const signatureDeclaration = getParseTreeNode(signatureDeclarationIn, isFunctionLike); + if (!signatureDeclaration) { + return factory.createToken(133 /* AnyKeyword */); + } + return nodeBuilder.serializeReturnTypeForSignature(signatureDeclaration, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); + } + function createTypeOfExpression(exprIn, enclosingDeclaration, flags, internalFlags, tracker) { + const expr = getParseTreeNode(exprIn, isExpression); + if (!expr) { + return factory.createToken(133 /* AnyKeyword */); + } + return nodeBuilder.serializeTypeForExpression(expr, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */, internalFlags, tracker); + } + function hasGlobalName(name) { + return globals.has(escapeLeadingUnderscores(name)); + } + function getReferencedValueSymbol(reference, startInDeclarationContainer) { + const resolvedSymbol = getNodeLinks(reference).resolvedSymbol; + if (resolvedSymbol) { + return resolvedSymbol; + } + let location = reference; + if (startInDeclarationContainer) { + const parent2 = reference.parent; + if (isDeclaration(parent2) && reference === parent2.name) { + location = getDeclarationContainer(parent2); + } + } + return resolveName( + location, + reference.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */ | 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + } + function getReferencedValueOrAliasSymbol(reference) { + const resolvedSymbol = getNodeLinks(reference).resolvedSymbol; + if (resolvedSymbol && resolvedSymbol !== unknownSymbol) { + return resolvedSymbol; + } + return resolveName( + reference, + reference.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */ | 2097152 /* Alias */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true, + /*excludeGlobals*/ + void 0 + ); + } + function getReferencedValueDeclaration(referenceIn) { + if (!isGeneratedIdentifier(referenceIn)) { + const reference = getParseTreeNode(referenceIn, isIdentifier); + if (reference) { + const symbol = getReferencedValueSymbol(reference); + if (symbol) { + return getExportSymbolOfValueSymbolIfExported(symbol).valueDeclaration; + } + } + } + return void 0; + } + function getReferencedValueDeclarations(referenceIn) { + if (!isGeneratedIdentifier(referenceIn)) { + const reference = getParseTreeNode(referenceIn, isIdentifier); + if (reference) { + const symbol = getReferencedValueSymbol(reference); + if (symbol) { + return filter(getExportSymbolOfValueSymbolIfExported(symbol).declarations, (declaration) => { + switch (declaration.kind) { + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 173 /* PropertyDeclaration */: + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 307 /* EnumMember */: + case 211 /* ObjectLiteralExpression */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 267 /* EnumDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 268 /* ModuleDeclaration */: + return true; + } + return false; + }); + } + } + } + return void 0; + } + function isLiteralConstDeclaration(node) { + if (isDeclarationReadonly(node) || isVariableDeclaration(node) && isVarConstLike2(node)) { + return isFreshLiteralType(getTypeOfSymbol(getSymbolOfDeclaration(node))); + } + return false; + } + function literalTypeToNode(type, enclosing, tracker) { + const enumResult = type.flags & 1056 /* EnumLike */ ? nodeBuilder.symbolToExpression( + type.symbol, + 111551 /* Value */, + enclosing, + /*flags*/ + void 0, + /*internalFlags*/ + void 0, + tracker + ) : type === trueType ? factory.createTrue() : type === falseType && factory.createFalse(); + if (enumResult) return enumResult; + const literalValue = type.value; + return typeof literalValue === "object" ? factory.createBigIntLiteral(literalValue) : typeof literalValue === "string" ? factory.createStringLiteral(literalValue) : literalValue < 0 ? factory.createPrefixUnaryExpression(41 /* MinusToken */, factory.createNumericLiteral(-literalValue)) : factory.createNumericLiteral(literalValue); + } + function createLiteralConstValue(node, tracker) { + const type = getTypeOfSymbol(getSymbolOfDeclaration(node)); + return literalTypeToNode(type, node, tracker); + } + function getJsxFactoryEntity(location) { + return location ? (getJsxNamespace(location), getSourceFileOfNode(location).localJsxFactory || _jsxFactoryEntity) : _jsxFactoryEntity; + } + function getJsxFragmentFactoryEntity(location) { + if (location) { + const file = getSourceFileOfNode(location); + if (file) { + if (file.localJsxFragmentFactory) { + return file.localJsxFragmentFactory; + } + const jsxFragPragmas = file.pragmas.get("jsxfrag"); + const jsxFragPragma = isArray(jsxFragPragmas) ? jsxFragPragmas[0] : jsxFragPragmas; + if (jsxFragPragma) { + file.localJsxFragmentFactory = parseIsolatedEntityName(jsxFragPragma.arguments.factory, languageVersion); + return file.localJsxFragmentFactory; + } + } + } + if (compilerOptions.jsxFragmentFactory) { + return parseIsolatedEntityName(compilerOptions.jsxFragmentFactory, languageVersion); + } + } + function getNonlocalEffectiveTypeAnnotationNode(node) { + const direct = getEffectiveTypeAnnotationNode(node); + if (direct) { + return direct; + } + if (node.kind === 170 /* Parameter */ && node.parent.kind === 179 /* SetAccessor */) { + const other = getAllAccessorDeclarationsForDeclaration(node.parent).getAccessor; + if (other) { + return getEffectiveReturnTypeNode(other); + } + } + return void 0; + } + function createResolver() { + return { + getReferencedExportContainer, + getReferencedImportDeclaration, + getReferencedDeclarationWithCollidingName, + isDeclarationWithCollidingName, + isValueAliasDeclaration: (nodeIn) => { + const node = getParseTreeNode(nodeIn); + return node && canCollectSymbolAliasAccessabilityData ? isValueAliasDeclaration(node) : true; + }, + hasGlobalName, + isReferencedAliasDeclaration: (nodeIn, checkChildren) => { + const node = getParseTreeNode(nodeIn); + return node && canCollectSymbolAliasAccessabilityData ? isReferencedAliasDeclaration(node, checkChildren) : true; + }, + hasNodeCheckFlag: (nodeIn, flag) => { + const node = getParseTreeNode(nodeIn); + if (!node) return false; + return hasNodeCheckFlag(node, flag); + }, + isTopLevelValueImportEqualsWithEntityName, + isDeclarationVisible, + isImplementationOfOverload, + requiresAddingImplicitUndefined, + isExpandoFunctionDeclaration, + getPropertiesOfContainerFunction, + createTypeOfDeclaration, + createReturnTypeOfSignatureDeclaration, + createTypeOfExpression, + createLiteralConstValue, + isSymbolAccessible, + isEntityNameVisible, + getConstantValue: (nodeIn) => { + const node = getParseTreeNode(nodeIn, canHaveConstantValue); + return node ? getConstantValue2(node) : void 0; + }, + getEnumMemberValue: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isEnumMember); + return node ? getEnumMemberValue(node) : void 0; + }, + collectLinkedAliases, + markLinkedReferences: (nodeIn) => { + const node = getParseTreeNode(nodeIn); + return node && markLinkedReferences(node, 0 /* Unspecified */); + }, + getReferencedValueDeclaration, + getReferencedValueDeclarations, + getTypeReferenceSerializationKind, + isOptionalParameter, + isArgumentsLocalBinding, + getExternalModuleFileFromDeclaration: (nodeIn) => { + const node = getParseTreeNode(nodeIn, hasPossibleExternalModuleReference); + return node && getExternalModuleFileFromDeclaration(node); + }, + isLiteralConstDeclaration, + isLateBound: (nodeIn) => { + const node = getParseTreeNode(nodeIn, isDeclaration); + const symbol = node && getSymbolOfDeclaration(node); + return !!(symbol && getCheckFlags(symbol) & 4096 /* Late */); + }, + getJsxFactoryEntity, + getJsxFragmentFactoryEntity, + isBindingCapturedByNode: (node, decl) => { + const parseNode = getParseTreeNode(node); + const parseDecl = getParseTreeNode(decl); + return !!parseNode && !!parseDecl && (isVariableDeclaration(parseDecl) || isBindingElement(parseDecl)) && isBindingCapturedByNode(parseNode, parseDecl); + }, + getDeclarationStatementsForSourceFile: (node, flags, internalFlags, tracker) => { + const n = getParseTreeNode(node); + Debug.assert(n && n.kind === 308 /* SourceFile */, "Non-sourcefile node passed into getDeclarationsForSourceFile"); + const sym = getSymbolOfDeclaration(node); + if (!sym) { + return !node.locals ? [] : nodeBuilder.symbolTableToDeclarationStatements(node.locals, node, flags, internalFlags, tracker); + } + resolveExternalModuleSymbol(sym); + return !sym.exports ? [] : nodeBuilder.symbolTableToDeclarationStatements(sym.exports, node, flags, internalFlags, tracker); + }, + isImportRequiredByAugmentation, + isDefinitelyReferenceToGlobalSymbolObject, + createLateBoundIndexSignatures: (cls, enclosing, flags, internalFlags, tracker) => { + const sym = cls.symbol; + const staticInfos = getIndexInfosOfType(getTypeOfSymbol(sym)); + const instanceIndexSymbol = getIndexSymbol(sym); + const instanceInfos = instanceIndexSymbol && getIndexInfosOfIndexSymbol(instanceIndexSymbol, arrayFrom(getMembersOfSymbol(sym).values())); + let result; + for (const infoList of [staticInfos, instanceInfos]) { + if (!length(infoList)) continue; + result || (result = []); + for (const info of infoList) { + if (info.declaration) continue; + if (info === anyBaseTypeIndexInfo) continue; + if (info.components) { + const allComponentComputedNamesSerializable = every(info.components, (e) => { + var _a; + return !!(e.name && isComputedPropertyName(e.name) && isEntityNameExpression(e.name.expression) && enclosing && ((_a = isEntityNameVisible( + e.name.expression, + enclosing, + /*shouldComputeAliasToMakeVisible*/ + false + )) == null ? void 0 : _a.accessibility) === 0 /* Accessible */); + }); + if (allComponentComputedNamesSerializable) { + const newComponents = filter(info.components, (e) => { + return !hasLateBindableName(e); + }); + result.push(...map(newComponents, (e) => { + trackComputedName(e.name.expression); + const mods = infoList === staticInfos ? [factory.createModifier(126 /* StaticKeyword */)] : void 0; + return factory.createPropertyDeclaration( + append(mods, info.isReadonly ? factory.createModifier(148 /* ReadonlyKeyword */) : void 0), + e.name, + (isPropertySignature(e) || isPropertyDeclaration(e) || isMethodSignature(e) || isMethodDeclaration(e) || isGetAccessor(e) || isSetAccessor(e)) && e.questionToken ? factory.createToken(58 /* QuestionToken */) : void 0, + nodeBuilder.typeToTypeNode(getTypeOfSymbol(e.symbol), enclosing, flags, internalFlags, tracker), + /*initializer*/ + void 0 + ); + })); + continue; + } + } + const node = nodeBuilder.indexInfoToIndexSignatureDeclaration(info, enclosing, flags, internalFlags, tracker); + if (node && infoList === staticInfos) { + (node.modifiers || (node.modifiers = factory.createNodeArray())).unshift(factory.createModifier(126 /* StaticKeyword */)); + } + if (node) { + result.push(node); + } + } + } + return result; + function trackComputedName(accessExpression) { + if (!tracker.trackSymbol) return; + const firstIdentifier = getFirstIdentifier(accessExpression); + const name = resolveName( + firstIdentifier, + firstIdentifier.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (name) { + tracker.trackSymbol(name, enclosing, 111551 /* Value */); + } + } + }, + symbolToDeclarations: (symbol, meaning, flags, maximumLength, verbosityLevel, out) => { + return nodeBuilder.symbolToDeclarations(symbol, meaning, flags, maximumLength, verbosityLevel, out); + } + }; + function isImportRequiredByAugmentation(node) { + const file = getSourceFileOfNode(node); + if (!file.symbol) return false; + const importTarget = getExternalModuleFileFromDeclaration(node); + if (!importTarget) return false; + if (importTarget === file) return false; + const exports2 = getExportsOfModule(file.symbol); + for (const s of arrayFrom(exports2.values())) { + if (s.mergeId) { + const merged = getMergedSymbol(s); + if (merged.declarations) { + for (const d of merged.declarations) { + const declFile = getSourceFileOfNode(d); + if (declFile === importTarget) { + return true; + } + } + } + } + } + return false; + } + } + function getExternalModuleFileFromDeclaration(declaration) { + const specifier = declaration.kind === 268 /* ModuleDeclaration */ ? tryCast(declaration.name, isStringLiteral) : getExternalModuleName(declaration); + const moduleSymbol = resolveExternalModuleNameWorker( + specifier, + specifier, + /*moduleNotFoundError*/ + void 0 + ); + if (!moduleSymbol) { + return void 0; + } + return getDeclarationOfKind(moduleSymbol, 308 /* SourceFile */); + } + function initializeTypeChecker() { + for (const file of host.getSourceFiles()) { + bindSourceFile(file, compilerOptions); + } + amalgamatedDuplicates = /* @__PURE__ */ new Map(); + let augmentations; + for (const file of host.getSourceFiles()) { + if (file.redirectInfo) { + continue; + } + if (!isExternalOrCommonJsModule(file)) { + const fileGlobalThisSymbol = file.locals.get("globalThis"); + if (fileGlobalThisSymbol == null ? void 0 : fileGlobalThisSymbol.declarations) { + for (const declaration of fileGlobalThisSymbol.declarations) { + diagnostics.add(createDiagnosticForNode(declaration, Diagnostics.Declaration_name_conflicts_with_built_in_global_identifier_0, "globalThis")); + } + } + mergeSymbolTable(globals, file.locals); + } + if (file.jsGlobalAugmentations) { + mergeSymbolTable(globals, file.jsGlobalAugmentations); + } + if (file.patternAmbientModules && file.patternAmbientModules.length) { + patternAmbientModules = concatenate(patternAmbientModules, file.patternAmbientModules); + } + if (file.moduleAugmentations.length) { + (augmentations || (augmentations = [])).push(file.moduleAugmentations); + } + if (file.symbol && file.symbol.globalExports) { + const source = file.symbol.globalExports; + source.forEach((sourceSymbol, id) => { + if (!globals.has(id)) { + globals.set(id, sourceSymbol); + } + }); + } + } + if (augmentations) { + for (const list of augmentations) { + for (const augmentation of list) { + if (!isGlobalScopeAugmentation(augmentation.parent)) continue; + mergeModuleAugmentation(augmentation); + } + } + } + addUndefinedToGlobalsOrErrorOnRedeclaration(); + getSymbolLinks(undefinedSymbol).type = undefinedWideningType; + getSymbolLinks(argumentsSymbol).type = getGlobalType( + "IArguments", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + getSymbolLinks(unknownSymbol).type = errorType; + getSymbolLinks(globalThisSymbol).type = createObjectType(16 /* Anonymous */, globalThisSymbol); + globalArrayType = getGlobalType( + "Array", + /*arity*/ + 1, + /*reportErrors*/ + true + ); + globalObjectType = getGlobalType( + "Object", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + globalFunctionType = getGlobalType( + "Function", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + globalCallableFunctionType = strictBindCallApply && getGlobalType( + "CallableFunction", + /*arity*/ + 0, + /*reportErrors*/ + true + ) || globalFunctionType; + globalNewableFunctionType = strictBindCallApply && getGlobalType( + "NewableFunction", + /*arity*/ + 0, + /*reportErrors*/ + true + ) || globalFunctionType; + globalStringType = getGlobalType( + "String", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + globalNumberType = getGlobalType( + "Number", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + globalBooleanType = getGlobalType( + "Boolean", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + globalRegExpType = getGlobalType( + "RegExp", + /*arity*/ + 0, + /*reportErrors*/ + true + ); + anyArrayType = createArrayType(anyType); + autoArrayType = createArrayType(autoType); + if (autoArrayType === emptyObjectType) { + autoArrayType = createAnonymousType( + /*symbol*/ + void 0, + emptySymbols, + emptyArray, + emptyArray, + emptyArray + ); + } + globalReadonlyArrayType = getGlobalTypeOrUndefined( + "ReadonlyArray", + /*arity*/ + 1 + ) || globalArrayType; + anyReadonlyArrayType = globalReadonlyArrayType ? createTypeFromGenericGlobalType(globalReadonlyArrayType, [anyType]) : anyArrayType; + globalThisType = getGlobalTypeOrUndefined( + "ThisType", + /*arity*/ + 1 + ); + if (augmentations) { + for (const list of augmentations) { + for (const augmentation of list) { + if (isGlobalScopeAugmentation(augmentation.parent)) continue; + mergeModuleAugmentation(augmentation); + } + } + } + amalgamatedDuplicates.forEach(({ firstFile, secondFile, conflictingSymbols }) => { + if (conflictingSymbols.size < 8) { + conflictingSymbols.forEach(({ isBlockScoped, firstFileLocations, secondFileLocations }, symbolName2) => { + const message = isBlockScoped ? Diagnostics.Cannot_redeclare_block_scoped_variable_0 : Diagnostics.Duplicate_identifier_0; + for (const node of firstFileLocations) { + addDuplicateDeclarationError(node, message, symbolName2, secondFileLocations); + } + for (const node of secondFileLocations) { + addDuplicateDeclarationError(node, message, symbolName2, firstFileLocations); + } + }); + } else { + const list = arrayFrom(conflictingSymbols.keys()).join(", "); + diagnostics.add(addRelatedInfo( + createDiagnosticForNode(firstFile, Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), + createDiagnosticForNode(secondFile, Diagnostics.Conflicts_are_in_this_file) + )); + diagnostics.add(addRelatedInfo( + createDiagnosticForNode(secondFile, Diagnostics.Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0, list), + createDiagnosticForNode(firstFile, Diagnostics.Conflicts_are_in_this_file) + )); + } + }); + amalgamatedDuplicates = void 0; + } + function checkExternalEmitHelpers(location, helpers) { + if (compilerOptions.importHelpers) { + const sourceFile = getSourceFileOfNode(location); + if (isEffectiveExternalModule(sourceFile, compilerOptions) && !(location.flags & 33554432 /* Ambient */)) { + const helpersModule = resolveHelpersModule(sourceFile, location); + if (helpersModule !== unknownSymbol) { + const links = getSymbolLinks(helpersModule); + links.requestedExternalEmitHelpers ?? (links.requestedExternalEmitHelpers = 0); + if ((links.requestedExternalEmitHelpers & helpers) !== helpers) { + const uncheckedHelpers = helpers & ~links.requestedExternalEmitHelpers; + for (let helper = 1 /* FirstEmitHelper */; helper <= 16777216 /* LastEmitHelper */; helper <<= 1) { + if (uncheckedHelpers & helper) { + for (const name of getHelperNames(helper)) { + const symbol = resolveSymbol(getSymbol2(getExportsOfModule(helpersModule), escapeLeadingUnderscores(name), 111551 /* Value */)); + if (!symbol) { + error2(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name); + } else if (helper & 524288 /* ClassPrivateFieldGet */) { + if (!some(getSignaturesOfSymbol(symbol), (signature) => getParameterCount(signature) > 3)) { + error2(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name, 4); + } + } else if (helper & 1048576 /* ClassPrivateFieldSet */) { + if (!some(getSignaturesOfSymbol(symbol), (signature) => getParameterCount(signature) > 4)) { + error2(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name, 5); + } + } else if (helper & 1024 /* SpreadArray */) { + if (!some(getSignaturesOfSymbol(symbol), (signature) => getParameterCount(signature) > 2)) { + error2(location, Diagnostics.This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_one_in_0_Consider_upgrading_your_version_of_0, externalHelpersModuleNameText, name, 3); + } + } + } + } + } + } + links.requestedExternalEmitHelpers |= helpers; + } + } + } + } + function getHelperNames(helper) { + switch (helper) { + case 1 /* Extends */: + return ["__extends"]; + case 2 /* Assign */: + return ["__assign"]; + case 4 /* Rest */: + return ["__rest"]; + case 8 /* Decorate */: + return legacyDecorators ? ["__decorate"] : ["__esDecorate", "__runInitializers"]; + case 16 /* Metadata */: + return ["__metadata"]; + case 32 /* Param */: + return ["__param"]; + case 64 /* Awaiter */: + return ["__awaiter"]; + case 128 /* Generator */: + return ["__generator"]; + case 256 /* Values */: + return ["__values"]; + case 512 /* Read */: + return ["__read"]; + case 1024 /* SpreadArray */: + return ["__spreadArray"]; + case 2048 /* Await */: + return ["__await"]; + case 4096 /* AsyncGenerator */: + return ["__asyncGenerator"]; + case 8192 /* AsyncDelegator */: + return ["__asyncDelegator"]; + case 16384 /* AsyncValues */: + return ["__asyncValues"]; + case 32768 /* ExportStar */: + return ["__exportStar"]; + case 65536 /* ImportStar */: + return ["__importStar"]; + case 131072 /* ImportDefault */: + return ["__importDefault"]; + case 262144 /* MakeTemplateObject */: + return ["__makeTemplateObject"]; + case 524288 /* ClassPrivateFieldGet */: + return ["__classPrivateFieldGet"]; + case 1048576 /* ClassPrivateFieldSet */: + return ["__classPrivateFieldSet"]; + case 2097152 /* ClassPrivateFieldIn */: + return ["__classPrivateFieldIn"]; + case 4194304 /* SetFunctionName */: + return ["__setFunctionName"]; + case 8388608 /* PropKey */: + return ["__propKey"]; + case 16777216 /* AddDisposableResourceAndDisposeResources */: + return ["__addDisposableResource", "__disposeResources"]; + case 33554432 /* RewriteRelativeImportExtension */: + return ["__rewriteRelativeImportExtension"]; + default: + return Debug.fail("Unrecognized helper"); + } + } + function resolveHelpersModule(file, errorNode) { + const links = getNodeLinks(file); + if (!links.externalHelpersModule) { + links.externalHelpersModule = resolveExternalModule(getImportHelpersImportSpecifier(file), externalHelpersModuleNameText, Diagnostics.This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found, errorNode) || unknownSymbol; + } + return links.externalHelpersModule; + } + function checkGrammarModifiers(node) { + var _a; + const quickResult = reportObviousDecoratorErrors(node) || reportObviousModifierErrors(node); + if (quickResult !== void 0) { + return quickResult; + } + if (isParameter(node) && parameterIsThisKeyword(node)) { + return grammarErrorOnFirstToken(node, Diagnostics.Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters); + } + const blockScopeKind = isVariableStatement(node) ? node.declarationList.flags & 7 /* BlockScoped */ : 0 /* None */; + let lastStatic, lastDeclare, lastAsync, lastOverride, firstDecorator; + let flags = 0 /* None */; + let sawExportBeforeDecorators = false; + let hasLeadingDecorators = false; + for (const modifier of node.modifiers) { + if (isDecorator(modifier)) { + if (!nodeCanBeDecorated(legacyDecorators, node, node.parent, node.parent.parent)) { + if (node.kind === 175 /* MethodDeclaration */ && !nodeIsPresent(node.body)) { + return grammarErrorOnFirstToken(node, Diagnostics.A_decorator_can_only_decorate_a_method_implementation_not_an_overload); + } else { + return grammarErrorOnFirstToken(node, Diagnostics.Decorators_are_not_valid_here); + } + } else if (legacyDecorators && (node.kind === 178 /* GetAccessor */ || node.kind === 179 /* SetAccessor */)) { + const accessors = getAllAccessorDeclarationsForDeclaration(node); + if (hasDecorators(accessors.firstAccessor) && node === accessors.secondAccessor) { + return grammarErrorOnFirstToken(node, Diagnostics.Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name); + } + } + if (flags & ~(2080 /* ExportDefault */ | 32768 /* Decorator */)) { + return grammarErrorOnNode(modifier, Diagnostics.Decorators_are_not_valid_here); + } + if (hasLeadingDecorators && flags & 98303 /* Modifier */) { + Debug.assertIsDefined(firstDecorator); + const sourceFile = getSourceFileOfNode(modifier); + if (!hasParseDiagnostics(sourceFile)) { + addRelatedInfo( + error2(modifier, Diagnostics.Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export), + createDiagnosticForNode(firstDecorator, Diagnostics.Decorator_used_before_export_here) + ); + return true; + } + return false; + } + flags |= 32768 /* Decorator */; + if (!(flags & 98303 /* Modifier */)) { + hasLeadingDecorators = true; + } else if (flags & 32 /* Export */) { + sawExportBeforeDecorators = true; + } + firstDecorator ?? (firstDecorator = modifier); + } else { + if (modifier.kind !== 148 /* ReadonlyKeyword */) { + if (node.kind === 172 /* PropertySignature */ || node.kind === 174 /* MethodSignature */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_type_member, tokenToString(modifier.kind)); + } + if (node.kind === 182 /* IndexSignature */ && (modifier.kind !== 126 /* StaticKeyword */ || !isClassLike(node.parent))) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_an_index_signature, tokenToString(modifier.kind)); + } + } + if (modifier.kind !== 103 /* InKeyword */ && modifier.kind !== 147 /* OutKeyword */ && modifier.kind !== 87 /* ConstKeyword */) { + if (node.kind === 169 /* TypeParameter */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_type_parameter, tokenToString(modifier.kind)); + } + } + switch (modifier.kind) { + case 87 /* ConstKeyword */: { + if (node.kind !== 267 /* EnumDeclaration */ && node.kind !== 169 /* TypeParameter */) { + return grammarErrorOnNode(node, Diagnostics.A_class_member_cannot_have_the_0_keyword, tokenToString(87 /* ConstKeyword */)); + } + const parent2 = isJSDocTemplateTag(node.parent) && getEffectiveJSDocHost(node.parent) || node.parent; + if (node.kind === 169 /* TypeParameter */ && !(isFunctionLikeDeclaration(parent2) || isClassLike(parent2) || isFunctionTypeNode(parent2) || isConstructorTypeNode(parent2) || isCallSignatureDeclaration(parent2) || isConstructSignatureDeclaration(parent2) || isMethodSignature(parent2))) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class, tokenToString(modifier.kind)); + } + break; + } + case 164 /* OverrideKeyword */: + if (flags & 16 /* Override */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "override"); + } else if (flags & 128 /* Ambient */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "override", "declare"); + } else if (flags & 8 /* Readonly */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "readonly"); + } else if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "accessor"); + } else if (flags & 1024 /* Async */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "override", "async"); + } + flags |= 16 /* Override */; + lastOverride = modifier; + break; + case 125 /* PublicKeyword */: + case 124 /* ProtectedKeyword */: + case 123 /* PrivateKeyword */: + const text = visibilityToString(modifierToFlag(modifier.kind)); + if (flags & 7 /* AccessibilityModifier */) { + return grammarErrorOnNode(modifier, Diagnostics.Accessibility_modifier_already_seen); + } else if (flags & 16 /* Override */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "override"); + } else if (flags & 256 /* Static */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "static"); + } else if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "accessor"); + } else if (flags & 8 /* Readonly */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "readonly"); + } else if (flags & 1024 /* Async */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "async"); + } else if (node.parent.kind === 269 /* ModuleBlock */ || node.parent.kind === 308 /* SourceFile */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, text); + } else if (flags & 64 /* Abstract */) { + if (modifier.kind === 123 /* PrivateKeyword */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, text, "abstract"); + } else { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, text, "abstract"); + } + } else if (isPrivateIdentifierClassElementDeclaration(node)) { + return grammarErrorOnNode(modifier, Diagnostics.An_accessibility_modifier_cannot_be_used_with_a_private_identifier); + } + flags |= modifierToFlag(modifier.kind); + break; + case 126 /* StaticKeyword */: + if (flags & 256 /* Static */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "static"); + } else if (flags & 8 /* Readonly */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "readonly"); + } else if (flags & 1024 /* Async */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "async"); + } else if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "accessor"); + } else if (node.parent.kind === 269 /* ModuleBlock */ || node.parent.kind === 308 /* SourceFile */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element, "static"); + } else if (node.kind === 170 /* Parameter */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "static"); + } else if (flags & 64 /* Abstract */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); + } else if (flags & 16 /* Override */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "static", "override"); + } + flags |= 256 /* Static */; + lastStatic = modifier; + break; + case 129 /* AccessorKeyword */: + if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "accessor"); + } else if (flags & 8 /* Readonly */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "accessor", "readonly"); + } else if (flags & 128 /* Ambient */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "accessor", "declare"); + } else if (node.kind !== 173 /* PropertyDeclaration */) { + return grammarErrorOnNode(modifier, Diagnostics.accessor_modifier_can_only_appear_on_a_property_declaration); + } + flags |= 512 /* Accessor */; + break; + case 148 /* ReadonlyKeyword */: + if (flags & 8 /* Readonly */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "readonly"); + } else if (node.kind !== 173 /* PropertyDeclaration */ && node.kind !== 172 /* PropertySignature */ && node.kind !== 182 /* IndexSignature */ && node.kind !== 170 /* Parameter */) { + return grammarErrorOnNode(modifier, Diagnostics.readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature); + } else if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "readonly", "accessor"); + } + flags |= 8 /* Readonly */; + break; + case 95 /* ExportKeyword */: + if (compilerOptions.verbatimModuleSyntax && !(node.flags & 33554432 /* Ambient */) && node.kind !== 266 /* TypeAliasDeclaration */ && node.kind !== 265 /* InterfaceDeclaration */ && // ModuleDeclaration needs to be checked that it is uninstantiated later + node.kind !== 268 /* ModuleDeclaration */ && node.parent.kind === 308 /* SourceFile */ && host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) === 1 /* CommonJS */) { + return grammarErrorOnNode(modifier, Diagnostics.A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); + } + if (flags & 32 /* Export */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "export"); + } else if (flags & 128 /* Ambient */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "export", "declare"); + } else if (flags & 64 /* Abstract */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "export", "abstract"); + } else if (flags & 1024 /* Async */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "export", "async"); + } else if (isClassLike(node.parent)) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "export"); + } else if (node.kind === 170 /* Parameter */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "export"); + } else if (blockScopeKind === 4 /* Using */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_using_declaration, "export"); + } else if (blockScopeKind === 6 /* AwaitUsing */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_an_await_using_declaration, "export"); + } + flags |= 32 /* Export */; + break; + case 90 /* DefaultKeyword */: + const container = node.parent.kind === 308 /* SourceFile */ ? node.parent : node.parent.parent; + if (container.kind === 268 /* ModuleDeclaration */ && !isAmbientModule(container)) { + return grammarErrorOnNode(modifier, Diagnostics.A_default_export_can_only_be_used_in_an_ECMAScript_style_module); + } else if (blockScopeKind === 4 /* Using */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_using_declaration, "default"); + } else if (blockScopeKind === 6 /* AwaitUsing */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_an_await_using_declaration, "default"); + } else if (!(flags & 32 /* Export */)) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "export", "default"); + } else if (sawExportBeforeDecorators) { + return grammarErrorOnNode(firstDecorator, Diagnostics.Decorators_are_not_valid_here); + } + flags |= 2048 /* Default */; + break; + case 138 /* DeclareKeyword */: + if (flags & 128 /* Ambient */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "declare"); + } else if (flags & 1024 /* Async */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); + } else if (flags & 16 /* Override */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "override"); + } else if (isClassLike(node.parent) && !isPropertyDeclaration(node)) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind, "declare"); + } else if (node.kind === 170 /* Parameter */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "declare"); + } else if (blockScopeKind === 4 /* Using */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_using_declaration, "declare"); + } else if (blockScopeKind === 6 /* AwaitUsing */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_an_await_using_declaration, "declare"); + } else if (node.parent.flags & 33554432 /* Ambient */ && node.parent.kind === 269 /* ModuleBlock */) { + return grammarErrorOnNode(modifier, Diagnostics.A_declare_modifier_cannot_be_used_in_an_already_ambient_context); + } else if (isPrivateIdentifierClassElementDeclaration(node)) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "declare"); + } else if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "declare", "accessor"); + } + flags |= 128 /* Ambient */; + lastDeclare = modifier; + break; + case 128 /* AbstractKeyword */: + if (flags & 64 /* Abstract */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "abstract"); + } + if (node.kind !== 264 /* ClassDeclaration */ && node.kind !== 186 /* ConstructorType */) { + if (node.kind !== 175 /* MethodDeclaration */ && node.kind !== 173 /* PropertyDeclaration */ && node.kind !== 178 /* GetAccessor */ && node.kind !== 179 /* SetAccessor */) { + return grammarErrorOnNode(modifier, Diagnostics.abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration); + } + if (!(node.parent.kind === 264 /* ClassDeclaration */ && hasSyntacticModifier(node.parent, 64 /* Abstract */))) { + const message = node.kind === 173 /* PropertyDeclaration */ ? Diagnostics.Abstract_properties_can_only_appear_within_an_abstract_class : Diagnostics.Abstract_methods_can_only_appear_within_an_abstract_class; + return grammarErrorOnNode(modifier, message); + } + if (flags & 256 /* Static */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "static", "abstract"); + } + if (flags & 2 /* Private */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "private", "abstract"); + } + if (flags & 1024 /* Async */ && lastAsync) { + return grammarErrorOnNode(lastAsync, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "async", "abstract"); + } + if (flags & 16 /* Override */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "override"); + } + if (flags & 512 /* Accessor */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "abstract", "accessor"); + } + } + if (isNamedDeclaration(node) && node.name.kind === 81 /* PrivateIdentifier */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_a_private_identifier, "abstract"); + } + flags |= 64 /* Abstract */; + break; + case 134 /* AsyncKeyword */: + if (flags & 1024 /* Async */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, "async"); + } else if (flags & 128 /* Ambient */ || node.parent.flags & 33554432 /* Ambient */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_in_an_ambient_context, "async"); + } else if (node.kind === 170 /* Parameter */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_appear_on_a_parameter, "async"); + } + if (flags & 64 /* Abstract */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_cannot_be_used_with_1_modifier, "async", "abstract"); + } + flags |= 1024 /* Async */; + lastAsync = modifier; + break; + case 103 /* InKeyword */: + case 147 /* OutKeyword */: { + const inOutFlag = modifier.kind === 103 /* InKeyword */ ? 8192 /* In */ : 16384 /* Out */; + const inOutText = modifier.kind === 103 /* InKeyword */ ? "in" : "out"; + const parent2 = isJSDocTemplateTag(node.parent) && (getEffectiveJSDocHost(node.parent) || find((_a = getJSDocRoot(node.parent)) == null ? void 0 : _a.tags, isJSDocTypedefTag)) || node.parent; + if (node.kind !== 169 /* TypeParameter */ || parent2 && !(isInterfaceDeclaration(parent2) || isClassLike(parent2) || isTypeAliasDeclaration(parent2) || isJSDocTypedefTag(parent2))) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias, inOutText); + } + if (flags & inOutFlag) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_already_seen, inOutText); + } + if (inOutFlag & 8192 /* In */ && flags & 16384 /* Out */) { + return grammarErrorOnNode(modifier, Diagnostics._0_modifier_must_precede_1_modifier, "in", "out"); + } + flags |= inOutFlag; + break; + } + } + } + } + if (node.kind === 177 /* Constructor */) { + if (flags & 256 /* Static */) { + return grammarErrorOnNode(lastStatic, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "static"); + } + if (flags & 16 /* Override */) { + return grammarErrorOnNode(lastOverride, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "override"); + } + if (flags & 1024 /* Async */) { + return grammarErrorOnNode(lastAsync, Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration, "async"); + } + return false; + } else if ((node.kind === 273 /* ImportDeclaration */ || node.kind === 272 /* ImportEqualsDeclaration */) && flags & 128 /* Ambient */) { + return grammarErrorOnNode(lastDeclare, Diagnostics.A_0_modifier_cannot_be_used_with_an_import_declaration, "declare"); + } else if (node.kind === 170 /* Parameter */ && flags & 31 /* ParameterPropertyModifier */ && isBindingPattern(node.name)) { + return grammarErrorOnNode(node, Diagnostics.A_parameter_property_may_not_be_declared_using_a_binding_pattern); + } else if (node.kind === 170 /* Parameter */ && flags & 31 /* ParameterPropertyModifier */ && node.dotDotDotToken) { + return grammarErrorOnNode(node, Diagnostics.A_parameter_property_cannot_be_declared_using_a_rest_parameter); + } + if (flags & 1024 /* Async */) { + return checkGrammarAsyncModifier(node, lastAsync); + } + return false; + } + function reportObviousModifierErrors(node) { + if (!node.modifiers) return false; + const modifier = findFirstIllegalModifier(node); + return modifier && grammarErrorOnFirstToken(modifier, Diagnostics.Modifiers_cannot_appear_here); + } + function findFirstModifierExcept(node, allowedModifier) { + const modifier = find(node.modifiers, isModifier); + return modifier && modifier.kind !== allowedModifier ? modifier : void 0; + } + function findFirstIllegalModifier(node) { + switch (node.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 177 /* Constructor */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 182 /* IndexSignature */: + case 268 /* ModuleDeclaration */: + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 279 /* ExportDeclaration */: + case 278 /* ExportAssignment */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 170 /* Parameter */: + case 169 /* TypeParameter */: + return void 0; + case 176 /* ClassStaticBlockDeclaration */: + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 271 /* NamespaceExportDeclaration */: + case 283 /* MissingDeclaration */: + return find(node.modifiers, isModifier); + default: + if (node.parent.kind === 269 /* ModuleBlock */ || node.parent.kind === 308 /* SourceFile */) { + return void 0; + } + switch (node.kind) { + case 263 /* FunctionDeclaration */: + return findFirstModifierExcept(node, 134 /* AsyncKeyword */); + case 264 /* ClassDeclaration */: + case 186 /* ConstructorType */: + return findFirstModifierExcept(node, 128 /* AbstractKeyword */); + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + return find(node.modifiers, isModifier); + case 244 /* VariableStatement */: + return node.declarationList.flags & 4 /* Using */ ? findFirstModifierExcept(node, 135 /* AwaitKeyword */) : find(node.modifiers, isModifier); + case 267 /* EnumDeclaration */: + return findFirstModifierExcept(node, 87 /* ConstKeyword */); + default: + Debug.assertNever(node); + } + } + } + function reportObviousDecoratorErrors(node) { + const decorator = findFirstIllegalDecorator(node); + return decorator && grammarErrorOnFirstToken(decorator, Diagnostics.Decorators_are_not_valid_here); + } + function findFirstIllegalDecorator(node) { + return canHaveIllegalDecorators(node) ? find(node.modifiers, isDecorator) : void 0; + } + function checkGrammarAsyncModifier(node, asyncModifier) { + switch (node.kind) { + case 175 /* MethodDeclaration */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return false; + } + return grammarErrorOnNode(asyncModifier, Diagnostics._0_modifier_cannot_be_used_here, "async"); + } + function checkGrammarForDisallowedTrailingComma(list, diag2 = Diagnostics.Trailing_comma_not_allowed) { + if (list && list.hasTrailingComma) { + return grammarErrorAtPos(list[0], list.end - ",".length, ",".length, diag2); + } + return false; + } + function checkGrammarTypeParameterList(typeParameters, file) { + if (typeParameters && typeParameters.length === 0) { + const start = typeParameters.pos - "<".length; + const end = skipTrivia(file.text, typeParameters.end) + ">".length; + return grammarErrorAtPos(file, start, end - start, Diagnostics.Type_parameter_list_cannot_be_empty); + } + return false; + } + function checkGrammarParameterList(parameters) { + let seenOptionalParameter = false; + const parameterCount = parameters.length; + for (let i = 0; i < parameterCount; i++) { + const parameter = parameters[i]; + if (parameter.dotDotDotToken) { + if (i !== parameterCount - 1) { + return grammarErrorOnNode(parameter.dotDotDotToken, Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list); + } + if (!(parameter.flags & 33554432 /* Ambient */)) { + checkGrammarForDisallowedTrailingComma(parameters, Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); + } + if (parameter.questionToken) { + return grammarErrorOnNode(parameter.questionToken, Diagnostics.A_rest_parameter_cannot_be_optional); + } + if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, Diagnostics.A_rest_parameter_cannot_have_an_initializer); + } + } else if (hasEffectiveQuestionToken(parameter)) { + seenOptionalParameter = true; + if (parameter.questionToken && parameter.initializer) { + return grammarErrorOnNode(parameter.name, Diagnostics.Parameter_cannot_have_question_mark_and_initializer); + } + } else if (seenOptionalParameter && !parameter.initializer) { + return grammarErrorOnNode(parameter.name, Diagnostics.A_required_parameter_cannot_follow_an_optional_parameter); + } + } + } + function getNonSimpleParameters(parameters) { + return filter(parameters, (parameter) => !!parameter.initializer || isBindingPattern(parameter.name) || isRestParameter(parameter)); + } + function checkGrammarForUseStrictSimpleParameterList(node) { + if (languageVersion >= 3 /* ES2016 */) { + const useStrictDirective = node.body && isBlock(node.body) && findUseStrictPrologue(node.body.statements); + if (useStrictDirective) { + const nonSimpleParameters = getNonSimpleParameters(node.parameters); + if (length(nonSimpleParameters)) { + forEach(nonSimpleParameters, (parameter) => { + addRelatedInfo( + error2(parameter, Diagnostics.This_parameter_is_not_allowed_with_use_strict_directive), + createDiagnosticForNode(useStrictDirective, Diagnostics.use_strict_directive_used_here) + ); + }); + const diagnostics2 = nonSimpleParameters.map((parameter, index) => index === 0 ? createDiagnosticForNode(parameter, Diagnostics.Non_simple_parameter_declared_here) : createDiagnosticForNode(parameter, Diagnostics.and_here)); + addRelatedInfo(error2(useStrictDirective, Diagnostics.use_strict_directive_cannot_be_used_with_non_simple_parameter_list), ...diagnostics2); + return true; + } + } + } + return false; + } + function checkGrammarFunctionLikeDeclaration(node) { + const file = getSourceFileOfNode(node); + return checkGrammarModifiers(node) || checkGrammarTypeParameterList(node.typeParameters, file) || checkGrammarParameterList(node.parameters) || checkGrammarArrowFunction(node, file) || isFunctionLikeDeclaration(node) && checkGrammarForUseStrictSimpleParameterList(node); + } + function checkGrammarClassLikeDeclaration(node) { + const file = getSourceFileOfNode(node); + return checkGrammarClassDeclarationHeritageClauses(node) || checkGrammarTypeParameterList(node.typeParameters, file); + } + function checkGrammarArrowFunction(node, file) { + if (!isArrowFunction(node)) { + return false; + } + if (node.typeParameters && !(length(node.typeParameters) > 1 || node.typeParameters.hasTrailingComma || node.typeParameters[0].constraint)) { + if (file && fileExtensionIsOneOf(file.fileName, [".mts" /* Mts */, ".cts" /* Cts */])) { + grammarErrorOnNode(node.typeParameters[0], Diagnostics.This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_constraint); + } + } + const { equalsGreaterThanToken } = node; + const startLine = getLineAndCharacterOfPosition(file, equalsGreaterThanToken.pos).line; + const endLine = getLineAndCharacterOfPosition(file, equalsGreaterThanToken.end).line; + return startLine !== endLine && grammarErrorOnNode(equalsGreaterThanToken, Diagnostics.Line_terminator_not_permitted_before_arrow); + } + function checkGrammarIndexSignatureParameters(node) { + const parameter = node.parameters[0]; + if (node.parameters.length !== 1) { + if (parameter) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } else { + return grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_exactly_one_parameter); + } + } + checkGrammarForDisallowedTrailingComma(node.parameters, Diagnostics.An_index_signature_cannot_have_a_trailing_comma); + if (parameter.dotDotDotToken) { + return grammarErrorOnNode(parameter.dotDotDotToken, Diagnostics.An_index_signature_cannot_have_a_rest_parameter); + } + if (hasEffectiveModifiers(parameter)) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_accessibility_modifier); + } + if (parameter.questionToken) { + return grammarErrorOnNode(parameter.questionToken, Diagnostics.An_index_signature_parameter_cannot_have_a_question_mark); + } + if (parameter.initializer) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_cannot_have_an_initializer); + } + if (!parameter.type) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); + } + const type = getTypeFromTypeNode(parameter.type); + if (someType(type, (t) => !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */)) || isGenericType(type)) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead); + } + if (!everyType(type, isValidIndexKeyType)) { + return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type); + } + if (!node.type) { + return grammarErrorOnNode(node, Diagnostics.An_index_signature_must_have_a_type_annotation); + } + return false; + } + function checkGrammarIndexSignature(node) { + return checkGrammarModifiers(node) || checkGrammarIndexSignatureParameters(node); + } + function checkGrammarForAtLeastOneTypeArgument(node, typeArguments) { + if (typeArguments && typeArguments.length === 0) { + const sourceFile = getSourceFileOfNode(node); + const start = typeArguments.pos - "<".length; + const end = skipTrivia(sourceFile.text, typeArguments.end) + ">".length; + return grammarErrorAtPos(sourceFile, start, end - start, Diagnostics.Type_argument_list_cannot_be_empty); + } + return false; + } + function checkGrammarTypeArguments(node, typeArguments) { + return checkGrammarForDisallowedTrailingComma(typeArguments) || checkGrammarForAtLeastOneTypeArgument(node, typeArguments); + } + function checkGrammarTaggedTemplateChain(node) { + if (node.questionDotToken || node.flags & 64 /* OptionalChain */) { + return grammarErrorOnNode(node.template, Diagnostics.Tagged_template_expressions_are_not_permitted_in_an_optional_chain); + } + return false; + } + function checkGrammarHeritageClause(node) { + const types = node.types; + if (checkGrammarForDisallowedTrailingComma(types)) { + return true; + } + if (types && types.length === 0) { + const listType = tokenToString(node.token); + return grammarErrorAtPos(node, types.pos, 0, Diagnostics._0_list_cannot_be_empty, listType); + } + return some(types, checkGrammarExpressionWithTypeArguments); + } + function checkGrammarExpressionWithTypeArguments(node) { + if (isExpressionWithTypeArguments(node) && isImportKeyword(node.expression) && node.typeArguments) { + return grammarErrorOnNode(node, Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments); + } + return checkGrammarTypeArguments(node, node.typeArguments); + } + function checkGrammarClassDeclarationHeritageClauses(node) { + let seenExtendsClause = false; + let seenImplementsClause = false; + if (!checkGrammarModifiers(node) && node.heritageClauses) { + for (const heritageClause of node.heritageClauses) { + if (heritageClause.token === 96 /* ExtendsKeyword */) { + if (seenExtendsClause) { + return grammarErrorOnFirstToken(heritageClause, Diagnostics.extends_clause_already_seen); + } + if (seenImplementsClause) { + return grammarErrorOnFirstToken(heritageClause, Diagnostics.extends_clause_must_precede_implements_clause); + } + if (heritageClause.types.length > 1) { + return grammarErrorOnFirstToken(heritageClause.types[1], Diagnostics.Classes_can_only_extend_a_single_class); + } + seenExtendsClause = true; + } else { + Debug.assert(heritageClause.token === 119 /* ImplementsKeyword */); + if (seenImplementsClause) { + return grammarErrorOnFirstToken(heritageClause, Diagnostics.implements_clause_already_seen); + } + seenImplementsClause = true; + } + checkGrammarHeritageClause(heritageClause); + } + } + } + function checkGrammarInterfaceDeclaration(node) { + let seenExtendsClause = false; + if (node.heritageClauses) { + for (const heritageClause of node.heritageClauses) { + if (heritageClause.token === 96 /* ExtendsKeyword */) { + if (seenExtendsClause) { + return grammarErrorOnFirstToken(heritageClause, Diagnostics.extends_clause_already_seen); + } + seenExtendsClause = true; + } else { + Debug.assert(heritageClause.token === 119 /* ImplementsKeyword */); + return grammarErrorOnFirstToken(heritageClause, Diagnostics.Interface_declaration_cannot_have_implements_clause); + } + checkGrammarHeritageClause(heritageClause); + } + } + return false; + } + function checkGrammarComputedPropertyName(node) { + if (node.kind !== 168 /* ComputedPropertyName */) { + return false; + } + const computedPropertyName = node; + if (computedPropertyName.expression.kind === 227 /* BinaryExpression */ && computedPropertyName.expression.operatorToken.kind === 28 /* CommaToken */) { + return grammarErrorOnNode(computedPropertyName.expression, Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name); + } + return false; + } + function checkGrammarForGenerator(node) { + if (node.asteriskToken) { + Debug.assert( + node.kind === 263 /* FunctionDeclaration */ || node.kind === 219 /* FunctionExpression */ || node.kind === 175 /* MethodDeclaration */ + ); + if (node.flags & 33554432 /* Ambient */) { + return grammarErrorOnNode(node.asteriskToken, Diagnostics.Generators_are_not_allowed_in_an_ambient_context); + } + if (!node.body) { + return grammarErrorOnNode(node.asteriskToken, Diagnostics.An_overload_signature_cannot_be_declared_as_a_generator); + } + } + } + function checkGrammarForInvalidQuestionMark(questionToken, message) { + return !!questionToken && grammarErrorOnNode(questionToken, message); + } + function checkGrammarForInvalidExclamationToken(exclamationToken, message) { + return !!exclamationToken && grammarErrorOnNode(exclamationToken, message); + } + function checkGrammarObjectLiteralExpression(node, inDestructuring) { + const seen = /* @__PURE__ */ new Map(); + for (const prop of node.properties) { + if (prop.kind === 306 /* SpreadAssignment */) { + if (inDestructuring) { + const expression = skipParentheses(prop.expression); + if (isArrayLiteralExpression(expression) || isObjectLiteralExpression(expression)) { + return grammarErrorOnNode(prop.expression, Diagnostics.A_rest_element_cannot_contain_a_binding_pattern); + } + } + continue; + } + const name = prop.name; + if (name.kind === 168 /* ComputedPropertyName */) { + checkGrammarComputedPropertyName(name); + } + if (prop.kind === 305 /* ShorthandPropertyAssignment */ && !inDestructuring && prop.objectAssignmentInitializer) { + grammarErrorOnNode(prop.equalsToken, Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern); + } + if (name.kind === 81 /* PrivateIdentifier */) { + grammarErrorOnNode(name, Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies); + } + if (canHaveModifiers(prop) && prop.modifiers) { + for (const mod of prop.modifiers) { + if (isModifier(mod) && (mod.kind !== 134 /* AsyncKeyword */ || prop.kind !== 175 /* MethodDeclaration */)) { + grammarErrorOnNode(mod, Diagnostics._0_modifier_cannot_be_used_here, getTextOfNode(mod)); + } + } + } else if (canHaveIllegalModifiers(prop) && prop.modifiers) { + for (const mod of prop.modifiers) { + if (isModifier(mod)) { + grammarErrorOnNode(mod, Diagnostics._0_modifier_cannot_be_used_here, getTextOfNode(mod)); + } + } + } + let currentKind; + switch (prop.kind) { + case 305 /* ShorthandPropertyAssignment */: + case 304 /* PropertyAssignment */: + checkGrammarForInvalidExclamationToken(prop.exclamationToken, Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context); + checkGrammarForInvalidQuestionMark(prop.questionToken, Diagnostics.An_object_member_cannot_be_declared_optional); + if (name.kind === 9 /* NumericLiteral */) { + checkGrammarNumericLiteral(name); + } + if (name.kind === 10 /* BigIntLiteral */) { + addErrorOrSuggestion( + /*isError*/ + true, + createDiagnosticForNode(name, Diagnostics.A_bigint_literal_cannot_be_used_as_a_property_name) + ); + } + currentKind = 4 /* PropertyAssignment */; + break; + case 175 /* MethodDeclaration */: + currentKind = 8 /* Method */; + break; + case 178 /* GetAccessor */: + currentKind = 1 /* GetAccessor */; + break; + case 179 /* SetAccessor */: + currentKind = 2 /* SetAccessor */; + break; + default: + Debug.assertNever(prop, "Unexpected syntax kind:" + prop.kind); + } + if (!inDestructuring) { + const effectiveName = getEffectivePropertyNameForPropertyNameNode(name); + if (effectiveName === void 0) { + continue; + } + const existingKind = seen.get(effectiveName); + if (!existingKind) { + seen.set(effectiveName, currentKind); + } else { + if (currentKind & 8 /* Method */ && existingKind & 8 /* Method */) { + grammarErrorOnNode(name, Diagnostics.Duplicate_identifier_0, getTextOfNode(name)); + } else if (currentKind & 4 /* PropertyAssignment */ && existingKind & 4 /* PropertyAssignment */) { + grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_properties_with_the_same_name, getTextOfNode(name)); + } else if (currentKind & 3 /* GetOrSetAccessor */ && existingKind & 3 /* GetOrSetAccessor */) { + if (existingKind !== 3 /* GetOrSetAccessor */ && currentKind !== existingKind) { + seen.set(effectiveName, currentKind | existingKind); + } else { + return grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name); + } + } else { + return grammarErrorOnNode(name, Diagnostics.An_object_literal_cannot_have_property_and_accessor_with_the_same_name); + } + } + } + } + } + function checkGrammarJsxElement(node) { + checkGrammarJsxName(node.tagName); + checkGrammarTypeArguments(node, node.typeArguments); + const seen = /* @__PURE__ */ new Map(); + for (const attr of node.attributes.properties) { + if (attr.kind === 294 /* JsxSpreadAttribute */) { + continue; + } + const { name, initializer } = attr; + const escapedText = getEscapedTextOfJsxAttributeName(name); + if (!seen.get(escapedText)) { + seen.set(escapedText, true); + } else { + return grammarErrorOnNode(name, Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name); + } + if (initializer && initializer.kind === 295 /* JsxExpression */ && !initializer.expression) { + return grammarErrorOnNode(initializer, Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression); + } + } + } + function checkGrammarJsxName(node) { + if (isPropertyAccessExpression(node) && isJsxNamespacedName(node.expression)) { + return grammarErrorOnNode(node.expression, Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names); + } + if (isJsxNamespacedName(node) && getJSXTransformEnabled(compilerOptions) && !isIntrinsicJsxName(node.namespace.escapedText)) { + return grammarErrorOnNode(node, Diagnostics.React_components_cannot_include_JSX_namespace_names); + } + } + function checkGrammarJsxExpression(node) { + if (node.expression && isCommaSequence(node.expression)) { + return grammarErrorOnNode(node.expression, Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array); + } + } + function checkGrammarForInOrForOfStatement(forInOrOfStatement) { + if (checkGrammarStatementInAmbientContext(forInOrOfStatement)) { + return true; + } + if (forInOrOfStatement.kind === 251 /* ForOfStatement */ && forInOrOfStatement.awaitModifier) { + if (!(forInOrOfStatement.flags & 65536 /* AwaitContext */)) { + const sourceFile = getSourceFileOfNode(forInOrOfStatement); + if (isInTopLevelContext(forInOrOfStatement)) { + if (!hasParseDiagnostics(sourceFile)) { + if (!isEffectiveExternalModule(sourceFile, compilerOptions)) { + diagnostics.add(createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module)); + } + switch (moduleKind) { + case 100 /* Node16 */: + case 101 /* Node18 */: + case 102 /* Node20 */: + case 199 /* NodeNext */: + if (sourceFile.impliedNodeFormat === 1 /* CommonJS */) { + diagnostics.add( + createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level) + ); + break; + } + // fallthrough + case 7 /* ES2022 */: + case 99 /* ESNext */: + case 200 /* Preserve */: + case 4 /* System */: + if (languageVersion >= 4 /* ES2017 */) { + break; + } + // fallthrough + default: + diagnostics.add( + createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher) + ); + break; + } + } + } else { + if (!hasParseDiagnostics(sourceFile)) { + const diagnostic = createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules); + const func = getContainingFunction(forInOrOfStatement); + if (func && func.kind !== 177 /* Constructor */) { + Debug.assert((getFunctionFlags(func) & 2 /* Async */) === 0, "Enclosing function should never be an async function."); + const relatedInfo = createDiagnosticForNode(func, Diagnostics.Did_you_mean_to_mark_this_function_as_async); + addRelatedInfo(diagnostic, relatedInfo); + } + diagnostics.add(diagnostic); + return true; + } + } + } + } + if (isForOfStatement(forInOrOfStatement) && !(forInOrOfStatement.flags & 65536 /* AwaitContext */) && isIdentifier(forInOrOfStatement.initializer) && forInOrOfStatement.initializer.escapedText === "async") { + grammarErrorOnNode(forInOrOfStatement.initializer, Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async); + return false; + } + if (forInOrOfStatement.initializer.kind === 262 /* VariableDeclarationList */) { + const variableList = forInOrOfStatement.initializer; + if (!checkGrammarVariableDeclarationList(variableList)) { + const declarations = variableList.declarations; + if (!declarations.length) { + return false; + } + if (declarations.length > 1) { + const diagnostic = forInOrOfStatement.kind === 250 /* ForInStatement */ ? Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement : Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement; + return grammarErrorOnFirstToken(variableList.declarations[1], diagnostic); + } + const firstDeclaration = declarations[0]; + if (firstDeclaration.initializer) { + const diagnostic = forInOrOfStatement.kind === 250 /* ForInStatement */ ? Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer : Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer; + return grammarErrorOnNode(firstDeclaration.name, diagnostic); + } + if (firstDeclaration.type) { + const diagnostic = forInOrOfStatement.kind === 250 /* ForInStatement */ ? Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation : Diagnostics.The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation; + return grammarErrorOnNode(firstDeclaration, diagnostic); + } + } + } + return false; + } + function checkGrammarAccessor(accessor) { + if (!(accessor.flags & 33554432 /* Ambient */) && accessor.parent.kind !== 188 /* TypeLiteral */ && accessor.parent.kind !== 265 /* InterfaceDeclaration */) { + if (languageVersion < 2 /* ES2015 */ && isPrivateIdentifier(accessor.name)) { + return grammarErrorOnNode(accessor.name, Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher); + } + if (accessor.body === void 0 && !hasSyntacticModifier(accessor, 64 /* Abstract */)) { + return grammarErrorAtPos(accessor, accessor.end - 1, ";".length, Diagnostics._0_expected, "{"); + } + } + if (accessor.body) { + if (hasSyntacticModifier(accessor, 64 /* Abstract */)) { + return grammarErrorOnNode(accessor, Diagnostics.An_abstract_accessor_cannot_have_an_implementation); + } + if (accessor.parent.kind === 188 /* TypeLiteral */ || accessor.parent.kind === 265 /* InterfaceDeclaration */) { + return grammarErrorOnNode(accessor.body, Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts); + } + } + if (accessor.typeParameters) { + return grammarErrorOnNode(accessor.name, Diagnostics.An_accessor_cannot_have_type_parameters); + } + if (!doesAccessorHaveCorrectParameterCount(accessor)) { + return grammarErrorOnNode( + accessor.name, + accessor.kind === 178 /* GetAccessor */ ? Diagnostics.A_get_accessor_cannot_have_parameters : Diagnostics.A_set_accessor_must_have_exactly_one_parameter + ); + } + if (accessor.kind === 179 /* SetAccessor */) { + if (accessor.type) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_cannot_have_a_return_type_annotation); + } + const parameter = Debug.checkDefined(getSetAccessorValueParameter(accessor), "Return value does not match parameter count assertion."); + if (parameter.dotDotDotToken) { + return grammarErrorOnNode(parameter.dotDotDotToken, Diagnostics.A_set_accessor_cannot_have_rest_parameter); + } + if (parameter.questionToken) { + return grammarErrorOnNode(parameter.questionToken, Diagnostics.A_set_accessor_cannot_have_an_optional_parameter); + } + if (parameter.initializer) { + return grammarErrorOnNode(accessor.name, Diagnostics.A_set_accessor_parameter_cannot_have_an_initializer); + } + } + return false; + } + function doesAccessorHaveCorrectParameterCount(accessor) { + return getAccessorThisParameter(accessor) || accessor.parameters.length === (accessor.kind === 178 /* GetAccessor */ ? 0 : 1); + } + function getAccessorThisParameter(accessor) { + if (accessor.parameters.length === (accessor.kind === 178 /* GetAccessor */ ? 1 : 2)) { + return getThisParameter(accessor); + } + } + function checkGrammarTypeOperatorNode(node) { + if (node.operator === 158 /* UniqueKeyword */) { + if (node.type.kind !== 155 /* SymbolKeyword */) { + return grammarErrorOnNode(node.type, Diagnostics._0_expected, tokenToString(155 /* SymbolKeyword */)); + } + let parent2 = walkUpParenthesizedTypes(node.parent); + if (isInJSFile(parent2) && isJSDocTypeExpression(parent2)) { + const host2 = getJSDocHost(parent2); + if (host2) { + parent2 = getSingleVariableOfVariableStatement(host2) || host2; + } + } + switch (parent2.kind) { + case 261 /* VariableDeclaration */: + const decl = parent2; + if (decl.name.kind !== 80 /* Identifier */) { + return grammarErrorOnNode(node, Diagnostics.unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name); + } + if (!isVariableDeclarationInVariableStatement(decl)) { + return grammarErrorOnNode(node, Diagnostics.unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement); + } + if (!(decl.parent.flags & 2 /* Const */)) { + return grammarErrorOnNode(parent2.name, Diagnostics.A_variable_whose_type_is_a_unique_symbol_type_must_be_const); + } + break; + case 173 /* PropertyDeclaration */: + if (!isStatic(parent2) || !hasEffectiveReadonlyModifier(parent2)) { + return grammarErrorOnNode(parent2.name, Diagnostics.A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly); + } + break; + case 172 /* PropertySignature */: + if (!hasSyntacticModifier(parent2, 8 /* Readonly */)) { + return grammarErrorOnNode(parent2.name, Diagnostics.A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly); + } + break; + default: + return grammarErrorOnNode(node, Diagnostics.unique_symbol_types_are_not_allowed_here); + } + } else if (node.operator === 148 /* ReadonlyKeyword */) { + if (node.type.kind !== 189 /* ArrayType */ && node.type.kind !== 190 /* TupleType */) { + return grammarErrorOnFirstToken(node, Diagnostics.readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types, tokenToString(155 /* SymbolKeyword */)); + } + } + } + function checkGrammarForInvalidDynamicName(node, message) { + if (isNonBindableDynamicName(node) && !isEntityNameExpression(isElementAccessExpression(node) ? skipParentheses(node.argumentExpression) : node.expression)) { + return grammarErrorOnNode(node, message); + } + } + function checkGrammarMethod(node) { + if (checkGrammarFunctionLikeDeclaration(node)) { + return true; + } + if (node.kind === 175 /* MethodDeclaration */) { + if (node.parent.kind === 211 /* ObjectLiteralExpression */) { + if (node.modifiers && !(node.modifiers.length === 1 && first(node.modifiers).kind === 134 /* AsyncKeyword */)) { + return grammarErrorOnFirstToken(node, Diagnostics.Modifiers_cannot_appear_here); + } else if (checkGrammarForInvalidQuestionMark(node.questionToken, Diagnostics.An_object_member_cannot_be_declared_optional)) { + return true; + } else if (checkGrammarForInvalidExclamationToken(node.exclamationToken, Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context)) { + return true; + } else if (node.body === void 0) { + return grammarErrorAtPos(node, node.end - 1, ";".length, Diagnostics._0_expected, "{"); + } + } + if (checkGrammarForGenerator(node)) { + return true; + } + } + if (isClassLike(node.parent)) { + if (languageVersion < 2 /* ES2015 */ && isPrivateIdentifier(node.name)) { + return grammarErrorOnNode(node.name, Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher); + } + if (node.flags & 33554432 /* Ambient */) { + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); + } else if (node.kind === 175 /* MethodDeclaration */ && !node.body) { + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); + } + } else if (node.parent.kind === 265 /* InterfaceDeclaration */) { + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); + } else if (node.parent.kind === 188 /* TypeLiteral */) { + return checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type); + } + } + function checkGrammarBreakOrContinueStatement(node) { + let current = node; + while (current) { + if (isFunctionLikeOrClassStaticBlockDeclaration(current)) { + return grammarErrorOnNode(node, Diagnostics.Jump_target_cannot_cross_function_boundary); + } + switch (current.kind) { + case 257 /* LabeledStatement */: + if (node.label && current.label.escapedText === node.label.escapedText) { + const isMisplacedContinueLabel = node.kind === 252 /* ContinueStatement */ && !isIterationStatement( + current.statement, + /*lookInLabeledStatements*/ + true + ); + if (isMisplacedContinueLabel) { + return grammarErrorOnNode(node, Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement); + } + return false; + } + break; + case 256 /* SwitchStatement */: + if (node.kind === 253 /* BreakStatement */ && !node.label) { + return false; + } + break; + default: + if (isIterationStatement( + current, + /*lookInLabeledStatements*/ + false + ) && !node.label) { + return false; + } + break; + } + current = current.parent; + } + if (node.label) { + const message = node.kind === 253 /* BreakStatement */ ? Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement : Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message); + } else { + const message = node.kind === 253 /* BreakStatement */ ? Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement : Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement; + return grammarErrorOnNode(node, message); + } + } + function checkGrammarBindingElement(node) { + if (node.dotDotDotToken) { + const elements = node.parent.elements; + if (node !== last(elements)) { + return grammarErrorOnNode(node, Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern); + } + checkGrammarForDisallowedTrailingComma(elements, Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma); + if (node.propertyName) { + return grammarErrorOnNode(node.name, Diagnostics.A_rest_element_cannot_have_a_property_name); + } + } + if (node.dotDotDotToken && node.initializer) { + return grammarErrorAtPos(node, node.initializer.pos - 1, 1, Diagnostics.A_rest_element_cannot_have_an_initializer); + } + } + function isStringOrNumberLiteralExpression(expr) { + return isStringOrNumericLiteralLike(expr) || expr.kind === 225 /* PrefixUnaryExpression */ && expr.operator === 41 /* MinusToken */ && expr.operand.kind === 9 /* NumericLiteral */; + } + function isBigIntLiteralExpression(expr) { + return expr.kind === 10 /* BigIntLiteral */ || expr.kind === 225 /* PrefixUnaryExpression */ && expr.operator === 41 /* MinusToken */ && expr.operand.kind === 10 /* BigIntLiteral */; + } + function isSimpleLiteralEnumReference(expr) { + if ((isPropertyAccessExpression(expr) || isElementAccessExpression(expr) && isStringOrNumberLiteralExpression(expr.argumentExpression)) && isEntityNameExpression(expr.expression)) { + return !!(checkExpressionCached(expr).flags & 1056 /* EnumLike */); + } + } + function checkAmbientInitializer(node) { + const initializer = node.initializer; + if (initializer) { + const isInvalidInitializer = !(isStringOrNumberLiteralExpression(initializer) || isSimpleLiteralEnumReference(initializer) || initializer.kind === 112 /* TrueKeyword */ || initializer.kind === 97 /* FalseKeyword */ || isBigIntLiteralExpression(initializer)); + const isConstOrReadonly = isDeclarationReadonly(node) || isVariableDeclaration(node) && isVarConstLike2(node); + if (isConstOrReadonly && !node.type) { + if (isInvalidInitializer) { + return grammarErrorOnNode(initializer, Diagnostics.A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_reference); + } + } else { + return grammarErrorOnNode(initializer, Diagnostics.Initializers_are_not_allowed_in_ambient_contexts); + } + } + } + function checkGrammarVariableDeclaration(node) { + const nodeFlags = getCombinedNodeFlagsCached(node); + const blockScopeKind = nodeFlags & 7 /* BlockScoped */; + if (isBindingPattern(node.name)) { + switch (blockScopeKind) { + case 6 /* AwaitUsing */: + return grammarErrorOnNode(node, Diagnostics._0_declarations_may_not_have_binding_patterns, "await using"); + case 4 /* Using */: + return grammarErrorOnNode(node, Diagnostics._0_declarations_may_not_have_binding_patterns, "using"); + } + } + if (node.parent.parent.kind !== 250 /* ForInStatement */ && node.parent.parent.kind !== 251 /* ForOfStatement */) { + if (nodeFlags & 33554432 /* Ambient */) { + checkAmbientInitializer(node); + } else if (!node.initializer) { + if (isBindingPattern(node.name) && !isBindingPattern(node.parent)) { + return grammarErrorOnNode(node, Diagnostics.A_destructuring_declaration_must_have_an_initializer); + } + switch (blockScopeKind) { + case 6 /* AwaitUsing */: + return grammarErrorOnNode(node, Diagnostics._0_declarations_must_be_initialized, "await using"); + case 4 /* Using */: + return grammarErrorOnNode(node, Diagnostics._0_declarations_must_be_initialized, "using"); + case 2 /* Const */: + return grammarErrorOnNode(node, Diagnostics._0_declarations_must_be_initialized, "const"); + } + } + } + if (node.exclamationToken && (node.parent.parent.kind !== 244 /* VariableStatement */ || !node.type || node.initializer || nodeFlags & 33554432 /* Ambient */)) { + const message = node.initializer ? Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions : !node.type ? Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations : Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context; + return grammarErrorOnNode(node.exclamationToken, message); + } + if (host.getEmitModuleFormatOfFile(getSourceFileOfNode(node)) < 4 /* System */ && !(node.parent.parent.flags & 33554432 /* Ambient */) && hasSyntacticModifier(node.parent.parent, 32 /* Export */)) { + checkESModuleMarker(node.name); + } + return !!blockScopeKind && checkGrammarNameInLetOrConstDeclarations(node.name); + } + function checkESModuleMarker(name) { + if (name.kind === 80 /* Identifier */) { + if (idText(name) === "__esModule") { + return grammarErrorOnNodeSkippedOn("noEmit", name, Diagnostics.Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules); + } + } else { + const elements = name.elements; + for (const element of elements) { + if (!isOmittedExpression(element)) { + return checkESModuleMarker(element.name); + } + } + } + return false; + } + function checkGrammarNameInLetOrConstDeclarations(name) { + if (name.kind === 80 /* Identifier */) { + if (name.escapedText === "let") { + return grammarErrorOnNode(name, Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations); + } + } else { + const elements = name.elements; + for (const element of elements) { + if (!isOmittedExpression(element)) { + checkGrammarNameInLetOrConstDeclarations(element.name); + } + } + } + return false; + } + function checkGrammarVariableDeclarationList(declarationList) { + const declarations = declarationList.declarations; + if (checkGrammarForDisallowedTrailingComma(declarationList.declarations)) { + return true; + } + if (!declarationList.declarations.length) { + return grammarErrorAtPos(declarationList, declarations.pos, declarations.end - declarations.pos, Diagnostics.Variable_declaration_list_cannot_be_empty); + } + const blockScopeFlags = declarationList.flags & 7 /* BlockScoped */; + if (blockScopeFlags === 4 /* Using */ || blockScopeFlags === 6 /* AwaitUsing */) { + if (isForInStatement(declarationList.parent)) { + return grammarErrorOnNode( + declarationList, + blockScopeFlags === 4 /* Using */ ? Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration : Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration + ); + } + if (declarationList.flags & 33554432 /* Ambient */) { + return grammarErrorOnNode( + declarationList, + blockScopeFlags === 4 /* Using */ ? Diagnostics.using_declarations_are_not_allowed_in_ambient_contexts : Diagnostics.await_using_declarations_are_not_allowed_in_ambient_contexts + ); + } + if (blockScopeFlags === 6 /* AwaitUsing */) { + return checkAwaitGrammar(declarationList); + } + } + return false; + } + function allowBlockDeclarations(parent2) { + switch (parent2.kind) { + case 246 /* IfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 255 /* WithStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + return false; + case 257 /* LabeledStatement */: + return allowBlockDeclarations(parent2.parent); + } + return true; + } + function checkGrammarForDisallowedBlockScopedVariableStatement(node) { + if (!allowBlockDeclarations(node.parent)) { + const blockScopeKind = getCombinedNodeFlagsCached(node.declarationList) & 7 /* BlockScoped */; + if (blockScopeKind) { + const keyword = blockScopeKind === 1 /* Let */ ? "let" : blockScopeKind === 2 /* Const */ ? "const" : blockScopeKind === 4 /* Using */ ? "using" : blockScopeKind === 6 /* AwaitUsing */ ? "await using" : Debug.fail("Unknown BlockScope flag"); + error2(node, Diagnostics._0_declarations_can_only_be_declared_inside_a_block, keyword); + } + } + } + function checkGrammarMetaProperty(node) { + const escapedText = node.name.escapedText; + switch (node.keywordToken) { + case 105 /* NewKeyword */: + if (escapedText !== "target") { + return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, unescapeLeadingUnderscores(node.name.escapedText), tokenToString(node.keywordToken), "target"); + } + break; + case 102 /* ImportKeyword */: + if (escapedText !== "meta") { + const isCallee = isCallExpression(node.parent) && node.parent.expression === node; + if (escapedText === "defer") { + if (!isCallee) { + return grammarErrorAtPos(node, node.end, 0, Diagnostics._0_expected, "("); + } + } else { + if (isCallee) { + return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer, unescapeLeadingUnderscores(node.name.escapedText)); + } + return grammarErrorOnNode(node.name, Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2, unescapeLeadingUnderscores(node.name.escapedText), tokenToString(node.keywordToken), "meta"); + } + } + break; + } + } + function hasParseDiagnostics(sourceFile) { + return sourceFile.parseDiagnostics.length > 0; + } + function grammarErrorOnFirstToken(node, message, ...args) { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + const span = getSpanOfTokenAtPosition(sourceFile, node.pos); + diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, message, ...args)); + return true; + } + return false; + } + function grammarErrorAtPos(nodeForSourceFile, start, length2, message, ...args) { + const sourceFile = getSourceFileOfNode(nodeForSourceFile); + if (!hasParseDiagnostics(sourceFile)) { + diagnostics.add(createFileDiagnostic(sourceFile, start, length2, message, ...args)); + return true; + } + return false; + } + function grammarErrorOnNodeSkippedOn(key, node, message, ...args) { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + errorSkippedOn(key, node, message, ...args); + return true; + } + return false; + } + function grammarErrorOnNode(node, message, ...args) { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + error2(node, message, ...args); + return true; + } + return false; + } + function checkGrammarConstructorTypeParameters(node) { + const jsdocTypeParameters = isInJSFile(node) ? getJSDocTypeParameterDeclarations(node) : void 0; + const range = node.typeParameters || jsdocTypeParameters && firstOrUndefined(jsdocTypeParameters); + if (range) { + const pos = range.pos === range.end ? range.pos : skipTrivia(getSourceFileOfNode(node).text, range.pos); + return grammarErrorAtPos(node, pos, range.end - pos, Diagnostics.Type_parameters_cannot_appear_on_a_constructor_declaration); + } + } + function checkGrammarConstructorTypeAnnotation(node) { + const type = node.type || getEffectiveReturnTypeNode(node); + if (type) { + return grammarErrorOnNode(type, Diagnostics.Type_annotation_cannot_appear_on_a_constructor_declaration); + } + } + function checkGrammarProperty(node) { + if (isComputedPropertyName(node.name) && isBinaryExpression(node.name.expression) && node.name.expression.operatorToken.kind === 103 /* InKeyword */) { + return grammarErrorOnNode(node.parent.members[0], Diagnostics.A_mapped_type_may_not_declare_properties_or_methods); + } + if (isClassLike(node.parent)) { + if (isStringLiteral(node.name) && node.name.text === "constructor") { + return grammarErrorOnNode(node.name, Diagnostics.Classes_may_not_have_a_field_named_constructor); + } + if (checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_symbol_type)) { + return true; + } + if (languageVersion < 2 /* ES2015 */ && isPrivateIdentifier(node.name)) { + return grammarErrorOnNode(node.name, Diagnostics.Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher); + } + if (languageVersion < 2 /* ES2015 */ && isAutoAccessorPropertyDeclaration(node) && !(node.flags & 33554432 /* Ambient */)) { + return grammarErrorOnNode(node.name, Diagnostics.Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher); + } + if (isAutoAccessorPropertyDeclaration(node) && checkGrammarForInvalidQuestionMark(node.questionToken, Diagnostics.An_accessor_property_cannot_be_declared_optional)) { + return true; + } + } else if (node.parent.kind === 265 /* InterfaceDeclaration */) { + if (checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { + return true; + } + Debug.assertNode(node, isPropertySignature); + if (node.initializer) { + return grammarErrorOnNode(node.initializer, Diagnostics.An_interface_property_cannot_have_an_initializer); + } + } else if (isTypeLiteralNode(node.parent)) { + if (checkGrammarForInvalidDynamicName(node.name, Diagnostics.A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type_or_a_unique_symbol_type)) { + return true; + } + Debug.assertNode(node, isPropertySignature); + if (node.initializer) { + return grammarErrorOnNode(node.initializer, Diagnostics.A_type_literal_property_cannot_have_an_initializer); + } + } + if (node.flags & 33554432 /* Ambient */) { + checkAmbientInitializer(node); + } + if (isPropertyDeclaration(node) && node.exclamationToken && (!isClassLike(node.parent) || !node.type || node.initializer || node.flags & 33554432 /* Ambient */ || isStatic(node) || hasAbstractModifier(node))) { + const message = node.initializer ? Diagnostics.Declarations_with_initializers_cannot_also_have_definite_assignment_assertions : !node.type ? Diagnostics.Declarations_with_definite_assignment_assertions_must_also_have_type_annotations : Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context; + return grammarErrorOnNode(node.exclamationToken, message); + } + } + function checkGrammarTopLevelElementForRequiredDeclareModifier(node) { + if (node.kind === 265 /* InterfaceDeclaration */ || node.kind === 266 /* TypeAliasDeclaration */ || node.kind === 273 /* ImportDeclaration */ || node.kind === 272 /* ImportEqualsDeclaration */ || node.kind === 279 /* ExportDeclaration */ || node.kind === 278 /* ExportAssignment */ || node.kind === 271 /* NamespaceExportDeclaration */ || hasSyntacticModifier(node, 128 /* Ambient */ | 32 /* Export */ | 2048 /* Default */)) { + return false; + } + return grammarErrorOnFirstToken(node, Diagnostics.Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier); + } + function checkGrammarTopLevelElementsForRequiredDeclareModifier(file) { + for (const decl of file.statements) { + if (isDeclaration(decl) || decl.kind === 244 /* VariableStatement */) { + if (checkGrammarTopLevelElementForRequiredDeclareModifier(decl)) { + return true; + } + } + } + return false; + } + function checkGrammarSourceFile(node) { + return !!(node.flags & 33554432 /* Ambient */) && checkGrammarTopLevelElementsForRequiredDeclareModifier(node); + } + function checkGrammarStatementInAmbientContext(node) { + if (node.flags & 33554432 /* Ambient */) { + const links = getNodeLinks(node); + if (!links.hasReportedStatementInAmbientContext && (isFunctionLike(node.parent) || isAccessor(node.parent))) { + return getNodeLinks(node).hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, Diagnostics.An_implementation_cannot_be_declared_in_ambient_contexts); + } + if (node.parent.kind === 242 /* Block */ || node.parent.kind === 269 /* ModuleBlock */ || node.parent.kind === 308 /* SourceFile */) { + const links2 = getNodeLinks(node.parent); + if (!links2.hasReportedStatementInAmbientContext) { + return links2.hasReportedStatementInAmbientContext = grammarErrorOnFirstToken(node, Diagnostics.Statements_are_not_allowed_in_ambient_contexts); + } + } else { + } + } + return false; + } + function checkGrammarNumericLiteral(node) { + const isFractional = getTextOfNode(node).includes("."); + const isScientific = node.numericLiteralFlags & 16 /* Scientific */; + if (isFractional || isScientific) { + return; + } + const value = +node.text; + if (value <= 2 ** 53 - 1) { + return; + } + addErrorOrSuggestion( + /*isError*/ + false, + createDiagnosticForNode(node, Diagnostics.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers) + ); + } + function checkGrammarBigIntLiteral(node) { + const literalType = isLiteralTypeNode(node.parent) || isPrefixUnaryExpression(node.parent) && isLiteralTypeNode(node.parent.parent); + if (!literalType) { + if (!(node.flags & 33554432 /* Ambient */) && languageVersion < 7 /* ES2020 */) { + if (grammarErrorOnNode(node, Diagnostics.BigInt_literals_are_not_available_when_targeting_lower_than_ES2020)) { + return true; + } + } + } + return false; + } + function grammarErrorAfterFirstToken(node, message, ...args) { + const sourceFile = getSourceFileOfNode(node); + if (!hasParseDiagnostics(sourceFile)) { + const span = getSpanOfTokenAtPosition(sourceFile, node.pos); + diagnostics.add(createFileDiagnostic( + sourceFile, + textSpanEnd(span), + /*length*/ + 0, + message, + ...args + )); + return true; + } + return false; + } + function getAmbientModules() { + if (!ambientModulesCache) { + ambientModulesCache = []; + globals.forEach((global2, sym) => { + if (ambientModuleSymbolRegex.test(sym)) { + ambientModulesCache.push(global2); + } + }); + } + return ambientModulesCache; + } + function checkGrammarImportClause(node) { + var _a, _b; + if (node.phaseModifier === 156 /* TypeKeyword */) { + if (node.name && node.namedBindings) { + return grammarErrorOnNode(node, Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both); + } + if (((_a = node.namedBindings) == null ? void 0 : _a.kind) === 276 /* NamedImports */) { + return checkGrammarNamedImportsOrExports(node.namedBindings); + } + } else if (node.phaseModifier === 166 /* DeferKeyword */) { + if (node.name) { + return grammarErrorOnNode(node, Diagnostics.Default_imports_are_not_allowed_in_a_deferred_import); + } + if (((_b = node.namedBindings) == null ? void 0 : _b.kind) === 276 /* NamedImports */) { + return grammarErrorOnNode(node, Diagnostics.Named_imports_are_not_allowed_in_a_deferred_import); + } + if (moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { + return grammarErrorOnNode(node, Diagnostics.Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve); + } + } + return false; + } + function checkGrammarNamedImportsOrExports(namedBindings) { + return !!forEach(namedBindings.elements, (specifier) => { + if (specifier.isTypeOnly) { + return grammarErrorOnFirstToken( + specifier, + specifier.kind === 277 /* ImportSpecifier */ ? Diagnostics.The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement : Diagnostics.The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement + ); + } + }); + } + function checkGrammarImportCallExpression(node) { + if (compilerOptions.verbatimModuleSyntax && moduleKind === 1 /* CommonJS */) { + return grammarErrorOnNode(node, getVerbatimModuleSyntaxErrorMessage(node)); + } + if (node.expression.kind === 237 /* MetaProperty */) { + if (moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { + return grammarErrorOnNode(node, Diagnostics.Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve); + } + } else if (moduleKind === 5 /* ES2015 */) { + return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_node20_or_nodenext); + } + if (node.typeArguments) { + return grammarErrorOnNode(node, Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments); + } + const nodeArguments = node.arguments; + if (!(100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) && moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { + checkGrammarForDisallowedTrailingComma(nodeArguments); + if (nodeArguments.length > 1) { + const importAttributesArgument = nodeArguments[1]; + return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_node20_nodenext_or_preserve); + } + } + if (nodeArguments.length === 0 || nodeArguments.length > 2) { + return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments); + } + const spreadElement = find(nodeArguments, isSpreadElement); + if (spreadElement) { + return grammarErrorOnNode(spreadElement, Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element); + } + return false; + } + function findMatchingTypeReferenceOrTypeAliasReference(source, unionTarget) { + const sourceObjectFlags = getObjectFlags(source); + if (sourceObjectFlags & (4 /* Reference */ | 16 /* Anonymous */) && unionTarget.flags & 1048576 /* Union */) { + return find(unionTarget.types, (target) => { + if (target.flags & 524288 /* Object */) { + const overlapObjFlags = sourceObjectFlags & getObjectFlags(target); + if (overlapObjFlags & 4 /* Reference */) { + return source.target === target.target; + } + if (overlapObjFlags & 16 /* Anonymous */) { + return !!source.aliasSymbol && source.aliasSymbol === target.aliasSymbol; + } + } + return false; + }); + } + } + function findBestTypeForObjectLiteral(source, unionTarget) { + if (getObjectFlags(source) & 128 /* ObjectLiteral */ && someType(unionTarget, isArrayLikeType)) { + return find(unionTarget.types, (t) => !isArrayLikeType(t)); + } + } + function findBestTypeForInvokable(source, unionTarget) { + let signatureKind = 0 /* Call */; + const hasSignatures2 = getSignaturesOfType(source, signatureKind).length > 0 || (signatureKind = 1 /* Construct */, getSignaturesOfType(source, signatureKind).length > 0); + if (hasSignatures2) { + return find(unionTarget.types, (t) => getSignaturesOfType(t, signatureKind).length > 0); + } + } + function findMostOverlappyType(source, unionTarget) { + let bestMatch; + if (!(source.flags & (402784252 /* Primitive */ | 406847488 /* InstantiablePrimitive */))) { + let matchingCount = 0; + for (const target of unionTarget.types) { + if (!(target.flags & (402784252 /* Primitive */ | 406847488 /* InstantiablePrimitive */))) { + const overlap = getIntersectionType([getIndexType(source), getIndexType(target)]); + if (overlap.flags & 4194304 /* Index */) { + return target; + } else if (isUnitType(overlap) || overlap.flags & 1048576 /* Union */) { + const len = overlap.flags & 1048576 /* Union */ ? countWhere(overlap.types, isUnitType) : 1; + if (len >= matchingCount) { + bestMatch = target; + matchingCount = len; + } + } + } + } + } + return bestMatch; + } + function filterPrimitivesIfContainsNonPrimitive(type) { + if (maybeTypeOfKind(type, 67108864 /* NonPrimitive */)) { + const result = filterType(type, (t) => !(t.flags & 402784252 /* Primitive */)); + if (!(result.flags & 131072 /* Never */)) { + return result; + } + } + return type; + } + function findMatchingDiscriminantType(source, target, isRelatedTo) { + if (target.flags & 1048576 /* Union */ && source.flags & (2097152 /* Intersection */ | 524288 /* Object */)) { + const match = getMatchingUnionConstituentForType(target, source); + if (match) { + return match; + } + const sourceProperties = getPropertiesOfType(source); + if (sourceProperties) { + const sourcePropertiesFiltered = findDiscriminantProperties(sourceProperties, target); + if (sourcePropertiesFiltered) { + const discriminated = discriminateTypeByDiscriminableItems(target, map(sourcePropertiesFiltered, (p) => [() => getTypeOfSymbol(p), p.escapedName]), isRelatedTo); + if (discriminated !== target) { + return discriminated; + } + } + } + } + return void 0; + } + function getEffectivePropertyNameForPropertyNameNode(node) { + const name = getPropertyNameForPropertyNameNode(node); + return name ? name : isComputedPropertyName(node) ? tryGetNameFromType(getTypeOfExpression(node.expression)) : void 0; + } + function getCombinedModifierFlagsCached(node) { + if (lastGetCombinedModifierFlagsNode === node) { + return lastGetCombinedModifierFlagsResult; + } + lastGetCombinedModifierFlagsNode = node; + lastGetCombinedModifierFlagsResult = getCombinedModifierFlags(node); + return lastGetCombinedModifierFlagsResult; + } + function getCombinedNodeFlagsCached(node) { + if (lastGetCombinedNodeFlagsNode === node) { + return lastGetCombinedNodeFlagsResult; + } + lastGetCombinedNodeFlagsNode = node; + lastGetCombinedNodeFlagsResult = getCombinedNodeFlags(node); + return lastGetCombinedNodeFlagsResult; + } + function isVarConstLike2(node) { + const blockScopeKind = getCombinedNodeFlagsCached(node) & 7 /* BlockScoped */; + return blockScopeKind === 2 /* Const */ || blockScopeKind === 4 /* Using */ || blockScopeKind === 6 /* AwaitUsing */; + } + function getJSXRuntimeImportSpecifier(file, specifierText) { + const jsxImportIndex = compilerOptions.importHelpers ? 1 : 0; + const specifier = file == null ? void 0 : file.imports[jsxImportIndex]; + if (specifier) { + Debug.assert(nodeIsSynthesized(specifier) && specifier.text === specifierText, `Expected sourceFile.imports[${jsxImportIndex}] to be the synthesized JSX runtime import`); + } + return specifier; + } + function getImportHelpersImportSpecifier(file) { + Debug.assert(compilerOptions.importHelpers, "Expected importHelpers to be enabled"); + const specifier = file.imports[0]; + Debug.assert(specifier && nodeIsSynthesized(specifier) && specifier.text === "tslib", `Expected sourceFile.imports[0] to be the synthesized tslib import`); + return specifier; + } +} +function isNotAccessor(declaration) { + return !isAccessor(declaration); +} +function isNotOverload(declaration) { + return declaration.kind !== 263 /* FunctionDeclaration */ && declaration.kind !== 175 /* MethodDeclaration */ || !!declaration.body; +} +function isDeclarationNameOrImportPropertyName(name) { + switch (name.parent.kind) { + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: + return isIdentifier(name) || name.kind === 11 /* StringLiteral */; + default: + return isDeclarationName(name); + } +} +var JsxNames; +((JsxNames2) => { + JsxNames2.JSX = "JSX"; + JsxNames2.IntrinsicElements = "IntrinsicElements"; + JsxNames2.ElementClass = "ElementClass"; + JsxNames2.ElementAttributesPropertyNameContainer = "ElementAttributesProperty"; + JsxNames2.ElementChildrenAttributeNameContainer = "ElementChildrenAttribute"; + JsxNames2.Element = "Element"; + JsxNames2.ElementType = "ElementType"; + JsxNames2.IntrinsicAttributes = "IntrinsicAttributes"; + JsxNames2.IntrinsicClassAttributes = "IntrinsicClassAttributes"; + JsxNames2.LibraryManagedAttributes = "LibraryManagedAttributes"; +})(JsxNames || (JsxNames = {})); +var ReactNames; +((ReactNames2) => { + ReactNames2.Fragment = "Fragment"; +})(ReactNames || (ReactNames = {})); +function getIterationTypesKeyFromIterationTypeKind(typeKind) { + switch (typeKind) { + case 0 /* Yield */: + return "yieldType"; + case 1 /* Return */: + return "returnType"; + case 2 /* Next */: + return "nextType"; + } +} +function signatureHasRestParameter(s) { + return !!(s.flags & 1 /* HasRestParameter */); +} +function signatureHasLiteralTypes(s) { + return !!(s.flags & 2 /* HasLiteralTypes */); +} +function createBasicNodeBuilderModuleSpecifierResolutionHost(host) { + return { + getCommonSourceDirectory: !!host.getCommonSourceDirectory ? () => host.getCommonSourceDirectory() : () => "", + getCurrentDirectory: () => host.getCurrentDirectory(), + getSymlinkCache: maybeBind(host, host.getSymlinkCache), + getPackageJsonInfoCache: () => { + var _a; + return (_a = host.getPackageJsonInfoCache) == null ? void 0 : _a.call(host); + }, + useCaseSensitiveFileNames: () => host.useCaseSensitiveFileNames(), + redirectTargetsMap: host.redirectTargetsMap, + getRedirectFromSourceFile: (fileName) => host.getRedirectFromSourceFile(fileName), + isSourceOfProjectReferenceRedirect: (fileName) => host.isSourceOfProjectReferenceRedirect(fileName), + fileExists: (fileName) => host.fileExists(fileName), + getFileIncludeReasons: () => host.getFileIncludeReasons(), + readFile: host.readFile ? (fileName) => host.readFile(fileName) : void 0, + getDefaultResolutionModeForFile: (file) => host.getDefaultResolutionModeForFile(file), + getModeForResolutionAtIndex: (file, index) => host.getModeForResolutionAtIndex(file, index), + getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation) + }; +} +var SymbolTrackerImpl = class _SymbolTrackerImpl { + constructor(context, tracker, moduleResolverHost) { + this.moduleResolverHost = void 0; + this.inner = void 0; + this.disableTrackSymbol = false; + var _a; + while (tracker instanceof _SymbolTrackerImpl) { + tracker = tracker.inner; + } + this.inner = tracker; + this.moduleResolverHost = moduleResolverHost; + this.context = context; + this.canTrackSymbol = !!((_a = this.inner) == null ? void 0 : _a.trackSymbol); + } + trackSymbol(symbol, enclosingDeclaration, meaning) { + var _a, _b; + if (((_a = this.inner) == null ? void 0 : _a.trackSymbol) && !this.disableTrackSymbol) { + if (this.inner.trackSymbol(symbol, enclosingDeclaration, meaning)) { + this.onDiagnosticReported(); + return true; + } + if (!(symbol.flags & 262144 /* TypeParameter */)) ((_b = this.context).trackedSymbols ?? (_b.trackedSymbols = [])).push([symbol, enclosingDeclaration, meaning]); + } + return false; + } + reportInaccessibleThisError() { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportInaccessibleThisError) { + this.onDiagnosticReported(); + this.inner.reportInaccessibleThisError(); + } + } + reportPrivateInBaseOfClassExpression(propertyName) { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportPrivateInBaseOfClassExpression) { + this.onDiagnosticReported(); + this.inner.reportPrivateInBaseOfClassExpression(propertyName); + } + } + reportInaccessibleUniqueSymbolError() { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportInaccessibleUniqueSymbolError) { + this.onDiagnosticReported(); + this.inner.reportInaccessibleUniqueSymbolError(); + } + } + reportCyclicStructureError() { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportCyclicStructureError) { + this.onDiagnosticReported(); + this.inner.reportCyclicStructureError(); + } + } + reportLikelyUnsafeImportRequiredError(specifier) { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportLikelyUnsafeImportRequiredError) { + this.onDiagnosticReported(); + this.inner.reportLikelyUnsafeImportRequiredError(specifier); + } + } + reportTruncationError() { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportTruncationError) { + this.onDiagnosticReported(); + this.inner.reportTruncationError(); + } + } + reportNonlocalAugmentation(containingFile, parentSymbol, augmentingSymbol) { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportNonlocalAugmentation) { + this.onDiagnosticReported(); + this.inner.reportNonlocalAugmentation(containingFile, parentSymbol, augmentingSymbol); + } + } + reportNonSerializableProperty(propertyName) { + var _a; + if ((_a = this.inner) == null ? void 0 : _a.reportNonSerializableProperty) { + this.onDiagnosticReported(); + this.inner.reportNonSerializableProperty(propertyName); + } + } + onDiagnosticReported() { + this.context.reportedDiagnostic = true; + } + reportInferenceFallback(node) { + var _a; + if (((_a = this.inner) == null ? void 0 : _a.reportInferenceFallback) && !this.context.suppressReportInferenceFallback) { + this.onDiagnosticReported(); + this.inner.reportInferenceFallback(node); + } + } + pushErrorFallbackNode(node) { + var _a, _b; + return (_b = (_a = this.inner) == null ? void 0 : _a.pushErrorFallbackNode) == null ? void 0 : _b.call(_a, node); + } + popErrorFallbackNode() { + var _a, _b; + return (_b = (_a = this.inner) == null ? void 0 : _a.popErrorFallbackNode) == null ? void 0 : _b.call(_a); + } +}; + +// src/compiler/visitorPublic.ts +function visitNode(node, visitor, test, lift) { + if (node === void 0) { + return node; + } + const visited = visitor(node); + let visitedNode; + if (visited === void 0) { + return void 0; + } else if (isArray(visited)) { + visitedNode = (lift || extractSingleNode)(visited); + } else { + visitedNode = visited; + } + Debug.assertNode(visitedNode, test); + return visitedNode; +} +function visitNodes2(nodes, visitor, test, start, count) { + if (nodes === void 0) { + return nodes; + } + const length2 = nodes.length; + if (start === void 0 || start < 0) { + start = 0; + } + if (count === void 0 || count > length2 - start) { + count = length2 - start; + } + let hasTrailingComma; + let pos = -1; + let end = -1; + if (start > 0 || count < length2) { + hasTrailingComma = nodes.hasTrailingComma && start + count === length2; + } else { + pos = nodes.pos; + end = nodes.end; + hasTrailingComma = nodes.hasTrailingComma; + } + const updated = visitArrayWorker(nodes, visitor, test, start, count); + if (updated !== nodes) { + const updatedArray = factory.createNodeArray(updated, hasTrailingComma); + setTextRangePosEnd(updatedArray, pos, end); + return updatedArray; + } + return nodes; +} +function visitArray(nodes, visitor, test, start, count) { + if (nodes === void 0) { + return nodes; + } + const length2 = nodes.length; + if (start === void 0 || start < 0) { + start = 0; + } + if (count === void 0 || count > length2 - start) { + count = length2 - start; + } + return visitArrayWorker(nodes, visitor, test, start, count); +} +function visitArrayWorker(nodes, visitor, test, start, count) { + let updated; + const length2 = nodes.length; + if (start > 0 || count < length2) { + updated = []; + } + for (let i = 0; i < count; i++) { + const node = nodes[i + start]; + const visited = node !== void 0 ? visitor ? visitor(node) : node : void 0; + if (updated !== void 0 || visited === void 0 || visited !== node) { + if (updated === void 0) { + updated = nodes.slice(0, i); + Debug.assertEachNode(updated, test); + } + if (visited) { + if (isArray(visited)) { + for (const visitedNode of visited) { + Debug.assertNode(visitedNode, test); + updated.push(visitedNode); + } + } else { + Debug.assertNode(visited, test); + updated.push(visited); + } + } + } + } + if (updated) { + return updated; + } + Debug.assertEachNode(nodes, test); + return nodes; +} +function visitLexicalEnvironment(statements, visitor, context, start, ensureUseStrict, nodesVisitor = visitNodes2) { + context.startLexicalEnvironment(); + statements = nodesVisitor(statements, visitor, isStatement, start); + if (ensureUseStrict) statements = context.factory.ensureUseStrict(statements); + return factory.mergeLexicalEnvironment(statements, context.endLexicalEnvironment()); +} +function visitParameterList(nodes, visitor, context, nodesVisitor = visitNodes2) { + let updated; + context.startLexicalEnvironment(); + if (nodes) { + context.setLexicalEnvironmentFlags(1 /* InParameters */, true); + updated = nodesVisitor(nodes, visitor, isParameter); + if (context.getLexicalEnvironmentFlags() & 2 /* VariablesHoistedInParameters */ && getEmitScriptTarget(context.getCompilerOptions()) >= 2 /* ES2015 */) { + updated = addDefaultValueAssignmentsIfNeeded(updated, context); + } + context.setLexicalEnvironmentFlags(1 /* InParameters */, false); + } + context.suspendLexicalEnvironment(); + return updated; +} +function addDefaultValueAssignmentsIfNeeded(parameters, context) { + let result; + for (let i = 0; i < parameters.length; i++) { + const parameter = parameters[i]; + const updated = addDefaultValueAssignmentIfNeeded(parameter, context); + if (result || updated !== parameter) { + if (!result) result = parameters.slice(0, i); + result[i] = updated; + } + } + if (result) { + return setTextRange(context.factory.createNodeArray(result, parameters.hasTrailingComma), parameters); + } + return parameters; +} +function addDefaultValueAssignmentIfNeeded(parameter, context) { + return parameter.dotDotDotToken ? parameter : isBindingPattern(parameter.name) ? addDefaultValueAssignmentForBindingPattern(parameter, context) : parameter.initializer ? addDefaultValueAssignmentForInitializer(parameter, parameter.name, parameter.initializer, context) : parameter; +} +function addDefaultValueAssignmentForBindingPattern(parameter, context) { + const { factory: factory2 } = context; + context.addInitializationStatement( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + parameter.name, + /*exclamationToken*/ + void 0, + parameter.type, + parameter.initializer ? factory2.createConditionalExpression( + factory2.createStrictEquality( + factory2.getGeneratedNameForNode(parameter), + factory2.createVoidZero() + ), + /*questionToken*/ + void 0, + parameter.initializer, + /*colonToken*/ + void 0, + factory2.getGeneratedNameForNode(parameter) + ) : factory2.getGeneratedNameForNode(parameter) + ) + ]) + ) + ); + return factory2.updateParameterDeclaration( + parameter, + parameter.modifiers, + parameter.dotDotDotToken, + factory2.getGeneratedNameForNode(parameter), + parameter.questionToken, + parameter.type, + /*initializer*/ + void 0 + ); +} +function addDefaultValueAssignmentForInitializer(parameter, name, initializer, context) { + const factory2 = context.factory; + context.addInitializationStatement( + factory2.createIfStatement( + factory2.createTypeCheck(factory2.cloneNode(name), "undefined"), + setEmitFlags( + setTextRange( + factory2.createBlock([ + factory2.createExpressionStatement( + setEmitFlags( + setTextRange( + factory2.createAssignment( + setEmitFlags(factory2.cloneNode(name), 96 /* NoSourceMap */), + setEmitFlags(initializer, 96 /* NoSourceMap */ | getEmitFlags(initializer) | 3072 /* NoComments */) + ), + parameter + ), + 3072 /* NoComments */ + ) + ) + ]), + parameter + ), + 1 /* SingleLine */ | 64 /* NoTrailingSourceMap */ | 768 /* NoTokenSourceMaps */ | 3072 /* NoComments */ + ) + ) + ); + return factory2.updateParameterDeclaration( + parameter, + parameter.modifiers, + parameter.dotDotDotToken, + parameter.name, + parameter.questionToken, + parameter.type, + /*initializer*/ + void 0 + ); +} +function visitFunctionBody(node, visitor, context, nodeVisitor = visitNode) { + context.resumeLexicalEnvironment(); + const updated = nodeVisitor(node, visitor, isConciseBody); + const declarations = context.endLexicalEnvironment(); + if (some(declarations)) { + if (!updated) { + return context.factory.createBlock(declarations); + } + const block = context.factory.converters.convertToFunctionBlock(updated); + const statements = factory.mergeLexicalEnvironment(block.statements, declarations); + return context.factory.updateBlock(block, statements); + } + return updated; +} +function visitIterationBody(body, visitor, context, nodeVisitor = visitNode) { + context.startBlockScope(); + const updated = nodeVisitor(body, visitor, isStatement, context.factory.liftToBlock); + Debug.assert(updated); + const declarations = context.endBlockScope(); + if (some(declarations)) { + if (isBlock(updated)) { + declarations.push(...updated.statements); + return context.factory.updateBlock(updated, declarations); + } + declarations.push(updated); + return context.factory.createBlock(declarations); + } + return updated; +} +function visitCommaListElements(elements, visitor, discardVisitor = visitor) { + if (discardVisitor === visitor || elements.length <= 1) { + return visitNodes2(elements, visitor, isExpression); + } + let i = 0; + const length2 = elements.length; + return visitNodes2(elements, (node) => { + const discarded = i < length2 - 1; + i++; + return discarded ? discardVisitor(node) : visitor(node); + }, isExpression); +} +function visitEachChild(node, visitor, context = nullTransformationContext, nodesVisitor = visitNodes2, tokenVisitor, nodeVisitor = visitNode) { + if (node === void 0) { + return void 0; + } + const fn = visitEachChildTable[node.kind]; + return fn === void 0 ? node : fn(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor); +} +var visitEachChildTable = { + [167 /* QualifiedName */]: function visitEachChildOfQualifiedName(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateQualifiedName( + node, + Debug.checkDefined(nodeVisitor(node.left, visitor, isEntityName)), + Debug.checkDefined(nodeVisitor(node.right, visitor, isIdentifier)) + ); + }, + [168 /* ComputedPropertyName */]: function visitEachChildOfComputedPropertyName(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateComputedPropertyName( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + // Signature elements + [169 /* TypeParameter */]: function visitEachChildOfTypeParameterDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeParameterDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + nodeVisitor(node.constraint, visitor, isTypeNode), + nodeVisitor(node.default, visitor, isTypeNode) + ); + }, + [170 /* Parameter */]: function visitEachChildOfParameterDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateParameterDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + tokenVisitor ? nodeVisitor(node.dotDotDotToken, tokenVisitor, isDotDotDotToken) : node.dotDotDotToken, + Debug.checkDefined(nodeVisitor(node.name, visitor, isBindingName)), + tokenVisitor ? nodeVisitor(node.questionToken, tokenVisitor, isQuestionToken) : node.questionToken, + nodeVisitor(node.type, visitor, isTypeNode), + nodeVisitor(node.initializer, visitor, isExpression) + ); + }, + [171 /* Decorator */]: function visitEachChildOfDecorator(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateDecorator( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + // Type elements + [172 /* PropertySignature */]: function visitEachChildOfPropertySignature(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updatePropertySignature( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + tokenVisitor ? nodeVisitor(node.questionToken, tokenVisitor, isQuestionToken) : node.questionToken, + nodeVisitor(node.type, visitor, isTypeNode) + ); + }, + [173 /* PropertyDeclaration */]: function visitEachChildOfPropertyDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updatePropertyDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + // QuestionToken and ExclamationToken are mutually exclusive in PropertyDeclaration + tokenVisitor ? nodeVisitor(node.questionToken ?? node.exclamationToken, tokenVisitor, isQuestionOrExclamationToken) : node.questionToken ?? node.exclamationToken, + nodeVisitor(node.type, visitor, isTypeNode), + nodeVisitor(node.initializer, visitor, isExpression) + ); + }, + [174 /* MethodSignature */]: function visitEachChildOfMethodSignature(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateMethodSignature( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + tokenVisitor ? nodeVisitor(node.questionToken, tokenVisitor, isQuestionToken) : node.questionToken, + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.parameters, visitor, isParameter), + nodeVisitor(node.type, visitor, isTypeNode) + ); + }, + [175 /* MethodDeclaration */]: function visitEachChildOfMethodDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateMethodDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + tokenVisitor ? nodeVisitor(node.asteriskToken, tokenVisitor, isAsteriskToken) : node.asteriskToken, + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + tokenVisitor ? nodeVisitor(node.questionToken, tokenVisitor, isQuestionToken) : node.questionToken, + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + nodeVisitor(node.type, visitor, isTypeNode), + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [177 /* Constructor */]: function visitEachChildOfConstructorDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateConstructorDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [178 /* GetAccessor */]: function visitEachChildOfGetAccessorDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateGetAccessorDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + nodeVisitor(node.type, visitor, isTypeNode), + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [179 /* SetAccessor */]: function visitEachChildOfSetAccessorDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateSetAccessorDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [176 /* ClassStaticBlockDeclaration */]: function visitEachChildOfClassStaticBlockDeclaration(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + context.startLexicalEnvironment(); + context.suspendLexicalEnvironment(); + return context.factory.updateClassStaticBlockDeclaration( + node, + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [180 /* CallSignature */]: function visitEachChildOfCallSignatureDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateCallSignature( + node, + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.parameters, visitor, isParameter), + nodeVisitor(node.type, visitor, isTypeNode) + ); + }, + [181 /* ConstructSignature */]: function visitEachChildOfConstructSignatureDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateConstructSignature( + node, + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.parameters, visitor, isParameter), + nodeVisitor(node.type, visitor, isTypeNode) + ); + }, + [182 /* IndexSignature */]: function visitEachChildOfIndexSignatureDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateIndexSignature( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + nodesVisitor(node.parameters, visitor, isParameter), + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + // Types + [183 /* TypePredicate */]: function visitEachChildOfTypePredicateNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypePredicateNode( + node, + nodeVisitor(node.assertsModifier, visitor, isAssertsKeyword), + Debug.checkDefined(nodeVisitor(node.parameterName, visitor, isIdentifierOrThisTypeNode)), + nodeVisitor(node.type, visitor, isTypeNode) + ); + }, + [184 /* TypeReference */]: function visitEachChildOfTypeReferenceNode(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeReferenceNode( + node, + Debug.checkDefined(nodeVisitor(node.typeName, visitor, isEntityName)), + nodesVisitor(node.typeArguments, visitor, isTypeNode) + ); + }, + [185 /* FunctionType */]: function visitEachChildOfFunctionTypeNode(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateFunctionTypeNode( + node, + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.parameters, visitor, isParameter), + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [186 /* ConstructorType */]: function visitEachChildOfConstructorTypeNode(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateConstructorTypeNode( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.parameters, visitor, isParameter), + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [187 /* TypeQuery */]: function visitEachChildOfTypeQueryNode(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeQueryNode( + node, + Debug.checkDefined(nodeVisitor(node.exprName, visitor, isEntityName)), + nodesVisitor(node.typeArguments, visitor, isTypeNode) + ); + }, + [188 /* TypeLiteral */]: function visitEachChildOfTypeLiteralNode(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeLiteralNode( + node, + nodesVisitor(node.members, visitor, isTypeElement) + ); + }, + [189 /* ArrayType */]: function visitEachChildOfArrayTypeNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateArrayTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.elementType, visitor, isTypeNode)) + ); + }, + [190 /* TupleType */]: function visitEachChildOfTupleTypeNode(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateTupleTypeNode( + node, + nodesVisitor(node.elements, visitor, isTypeNode) + ); + }, + [191 /* OptionalType */]: function visitEachChildOfOptionalTypeNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateOptionalTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [192 /* RestType */]: function visitEachChildOfRestTypeNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateRestTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [193 /* UnionType */]: function visitEachChildOfUnionTypeNode(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateUnionTypeNode( + node, + nodesVisitor(node.types, visitor, isTypeNode) + ); + }, + [194 /* IntersectionType */]: function visitEachChildOfIntersectionTypeNode(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateIntersectionTypeNode( + node, + nodesVisitor(node.types, visitor, isTypeNode) + ); + }, + [195 /* ConditionalType */]: function visitEachChildOfConditionalTypeNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateConditionalTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.checkType, visitor, isTypeNode)), + Debug.checkDefined(nodeVisitor(node.extendsType, visitor, isTypeNode)), + Debug.checkDefined(nodeVisitor(node.trueType, visitor, isTypeNode)), + Debug.checkDefined(nodeVisitor(node.falseType, visitor, isTypeNode)) + ); + }, + [196 /* InferType */]: function visitEachChildOfInferTypeNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateInferTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.typeParameter, visitor, isTypeParameterDeclaration)) + ); + }, + [206 /* ImportType */]: function visitEachChildOfImportTypeNode(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.argument, visitor, isTypeNode)), + nodeVisitor(node.attributes, visitor, isImportAttributes), + nodeVisitor(node.qualifier, visitor, isEntityName), + nodesVisitor(node.typeArguments, visitor, isTypeNode), + node.isTypeOf + ); + }, + [303 /* ImportTypeAssertionContainer */]: function visitEachChildOfImportTypeAssertionContainer(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportTypeAssertionContainer( + node, + Debug.checkDefined(nodeVisitor(node.assertClause, visitor, isAssertClause)), + node.multiLine + ); + }, + [203 /* NamedTupleMember */]: function visitEachChildOfNamedTupleMember(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateNamedTupleMember( + node, + tokenVisitor ? nodeVisitor(node.dotDotDotToken, tokenVisitor, isDotDotDotToken) : node.dotDotDotToken, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + tokenVisitor ? nodeVisitor(node.questionToken, tokenVisitor, isQuestionToken) : node.questionToken, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [197 /* ParenthesizedType */]: function visitEachChildOfParenthesizedType(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateParenthesizedType( + node, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [199 /* TypeOperator */]: function visitEachChildOfTypeOperatorNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeOperatorNode( + node, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [200 /* IndexedAccessType */]: function visitEachChildOfIndexedAccessType(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateIndexedAccessTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.objectType, visitor, isTypeNode)), + Debug.checkDefined(nodeVisitor(node.indexType, visitor, isTypeNode)) + ); + }, + [201 /* MappedType */]: function visitEachChildOfMappedType(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateMappedTypeNode( + node, + tokenVisitor ? nodeVisitor(node.readonlyToken, tokenVisitor, isReadonlyKeywordOrPlusOrMinusToken) : node.readonlyToken, + Debug.checkDefined(nodeVisitor(node.typeParameter, visitor, isTypeParameterDeclaration)), + nodeVisitor(node.nameType, visitor, isTypeNode), + tokenVisitor ? nodeVisitor(node.questionToken, tokenVisitor, isQuestionOrPlusOrMinusToken) : node.questionToken, + nodeVisitor(node.type, visitor, isTypeNode), + nodesVisitor(node.members, visitor, isTypeElement) + ); + }, + [202 /* LiteralType */]: function visitEachChildOfLiteralTypeNode(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateLiteralTypeNode( + node, + Debug.checkDefined(nodeVisitor(node.literal, visitor, isLiteralTypeLiteral)) + ); + }, + [204 /* TemplateLiteralType */]: function visitEachChildOfTemplateLiteralType(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTemplateLiteralType( + node, + Debug.checkDefined(nodeVisitor(node.head, visitor, isTemplateHead)), + nodesVisitor(node.templateSpans, visitor, isTemplateLiteralTypeSpan) + ); + }, + [205 /* TemplateLiteralTypeSpan */]: function visitEachChildOfTemplateLiteralTypeSpan(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTemplateLiteralTypeSpan( + node, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)), + Debug.checkDefined(nodeVisitor(node.literal, visitor, isTemplateMiddleOrTemplateTail)) + ); + }, + // Binding patterns + [207 /* ObjectBindingPattern */]: function visitEachChildOfObjectBindingPattern(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateObjectBindingPattern( + node, + nodesVisitor(node.elements, visitor, isBindingElement) + ); + }, + [208 /* ArrayBindingPattern */]: function visitEachChildOfArrayBindingPattern(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateArrayBindingPattern( + node, + nodesVisitor(node.elements, visitor, isArrayBindingElement) + ); + }, + [209 /* BindingElement */]: function visitEachChildOfBindingElement(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateBindingElement( + node, + tokenVisitor ? nodeVisitor(node.dotDotDotToken, tokenVisitor, isDotDotDotToken) : node.dotDotDotToken, + nodeVisitor(node.propertyName, visitor, isPropertyName), + Debug.checkDefined(nodeVisitor(node.name, visitor, isBindingName)), + nodeVisitor(node.initializer, visitor, isExpression) + ); + }, + // Expression + [210 /* ArrayLiteralExpression */]: function visitEachChildOfArrayLiteralExpression(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateArrayLiteralExpression( + node, + nodesVisitor(node.elements, visitor, isExpression) + ); + }, + [211 /* ObjectLiteralExpression */]: function visitEachChildOfObjectLiteralExpression(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateObjectLiteralExpression( + node, + nodesVisitor(node.properties, visitor, isObjectLiteralElementLike) + ); + }, + [212 /* PropertyAccessExpression */]: function visitEachChildOfPropertyAccessExpression(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return isPropertyAccessChain(node) ? context.factory.updatePropertyAccessChain( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + tokenVisitor ? nodeVisitor(node.questionDotToken, tokenVisitor, isQuestionDotToken) : node.questionDotToken, + Debug.checkDefined(nodeVisitor(node.name, visitor, isMemberName)) + ) : context.factory.updatePropertyAccessExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.name, visitor, isMemberName)) + ); + }, + [213 /* ElementAccessExpression */]: function visitEachChildOfElementAccessExpression(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return isElementAccessChain(node) ? context.factory.updateElementAccessChain( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + tokenVisitor ? nodeVisitor(node.questionDotToken, tokenVisitor, isQuestionDotToken) : node.questionDotToken, + Debug.checkDefined(nodeVisitor(node.argumentExpression, visitor, isExpression)) + ) : context.factory.updateElementAccessExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.argumentExpression, visitor, isExpression)) + ); + }, + [214 /* CallExpression */]: function visitEachChildOfCallExpression(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return isCallChain(node) ? context.factory.updateCallChain( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + tokenVisitor ? nodeVisitor(node.questionDotToken, tokenVisitor, isQuestionDotToken) : node.questionDotToken, + nodesVisitor(node.typeArguments, visitor, isTypeNode), + nodesVisitor(node.arguments, visitor, isExpression) + ) : context.factory.updateCallExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + nodesVisitor(node.typeArguments, visitor, isTypeNode), + nodesVisitor(node.arguments, visitor, isExpression) + ); + }, + [215 /* NewExpression */]: function visitEachChildOfNewExpression(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateNewExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + nodesVisitor(node.typeArguments, visitor, isTypeNode), + nodesVisitor(node.arguments, visitor, isExpression) + ); + }, + [216 /* TaggedTemplateExpression */]: function visitEachChildOfTaggedTemplateExpression(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTaggedTemplateExpression( + node, + Debug.checkDefined(nodeVisitor(node.tag, visitor, isExpression)), + nodesVisitor(node.typeArguments, visitor, isTypeNode), + Debug.checkDefined(nodeVisitor(node.template, visitor, isTemplateLiteral)) + ); + }, + [217 /* TypeAssertionExpression */]: function visitEachChildOfTypeAssertionExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeAssertion( + node, + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)), + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [218 /* ParenthesizedExpression */]: function visitEachChildOfParenthesizedExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateParenthesizedExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [219 /* FunctionExpression */]: function visitEachChildOfFunctionExpression(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateFunctionExpression( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + tokenVisitor ? nodeVisitor(node.asteriskToken, tokenVisitor, isAsteriskToken) : node.asteriskToken, + nodeVisitor(node.name, visitor, isIdentifier), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + nodeVisitor(node.type, visitor, isTypeNode), + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [220 /* ArrowFunction */]: function visitEachChildOfArrowFunction(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateArrowFunction( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + nodeVisitor(node.type, visitor, isTypeNode), + tokenVisitor ? Debug.checkDefined(nodeVisitor(node.equalsGreaterThanToken, tokenVisitor, isEqualsGreaterThanToken)) : node.equalsGreaterThanToken, + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [221 /* DeleteExpression */]: function visitEachChildOfDeleteExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateDeleteExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [222 /* TypeOfExpression */]: function visitEachChildOfTypeOfExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeOfExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [223 /* VoidExpression */]: function visitEachChildOfVoidExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateVoidExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [224 /* AwaitExpression */]: function visitEachChildOfAwaitExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateAwaitExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [225 /* PrefixUnaryExpression */]: function visitEachChildOfPrefixUnaryExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updatePrefixUnaryExpression( + node, + Debug.checkDefined(nodeVisitor(node.operand, visitor, isExpression)) + ); + }, + [226 /* PostfixUnaryExpression */]: function visitEachChildOfPostfixUnaryExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updatePostfixUnaryExpression( + node, + Debug.checkDefined(nodeVisitor(node.operand, visitor, isExpression)) + ); + }, + [227 /* BinaryExpression */]: function visitEachChildOfBinaryExpression(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateBinaryExpression( + node, + Debug.checkDefined(nodeVisitor(node.left, visitor, isExpression)), + tokenVisitor ? Debug.checkDefined(nodeVisitor(node.operatorToken, tokenVisitor, isBinaryOperatorToken)) : node.operatorToken, + Debug.checkDefined(nodeVisitor(node.right, visitor, isExpression)) + ); + }, + [228 /* ConditionalExpression */]: function visitEachChildOfConditionalExpression(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateConditionalExpression( + node, + Debug.checkDefined(nodeVisitor(node.condition, visitor, isExpression)), + tokenVisitor ? Debug.checkDefined(nodeVisitor(node.questionToken, tokenVisitor, isQuestionToken)) : node.questionToken, + Debug.checkDefined(nodeVisitor(node.whenTrue, visitor, isExpression)), + tokenVisitor ? Debug.checkDefined(nodeVisitor(node.colonToken, tokenVisitor, isColonToken)) : node.colonToken, + Debug.checkDefined(nodeVisitor(node.whenFalse, visitor, isExpression)) + ); + }, + [229 /* TemplateExpression */]: function visitEachChildOfTemplateExpression(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTemplateExpression( + node, + Debug.checkDefined(nodeVisitor(node.head, visitor, isTemplateHead)), + nodesVisitor(node.templateSpans, visitor, isTemplateSpan) + ); + }, + [230 /* YieldExpression */]: function visitEachChildOfYieldExpression(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateYieldExpression( + node, + tokenVisitor ? nodeVisitor(node.asteriskToken, tokenVisitor, isAsteriskToken) : node.asteriskToken, + nodeVisitor(node.expression, visitor, isExpression) + ); + }, + [231 /* SpreadElement */]: function visitEachChildOfSpreadElement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateSpreadElement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [232 /* ClassExpression */]: function visitEachChildOfClassExpression(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateClassExpression( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + nodeVisitor(node.name, visitor, isIdentifier), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.heritageClauses, visitor, isHeritageClause), + nodesVisitor(node.members, visitor, isClassElement) + ); + }, + [234 /* ExpressionWithTypeArguments */]: function visitEachChildOfExpressionWithTypeArguments(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateExpressionWithTypeArguments( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + nodesVisitor(node.typeArguments, visitor, isTypeNode) + ); + }, + [235 /* AsExpression */]: function visitEachChildOfAsExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateAsExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [239 /* SatisfiesExpression */]: function visitEachChildOfSatisfiesExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateSatisfiesExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [236 /* NonNullExpression */]: function visitEachChildOfNonNullExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return isOptionalChain(node) ? context.factory.updateNonNullChain( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ) : context.factory.updateNonNullExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [237 /* MetaProperty */]: function visitEachChildOfMetaProperty(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateMetaProperty( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + ); + }, + // Misc + [240 /* TemplateSpan */]: function visitEachChildOfTemplateSpan(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTemplateSpan( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.literal, visitor, isTemplateMiddleOrTemplateTail)) + ); + }, + // Element + [242 /* Block */]: function visitEachChildOfBlock(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateBlock( + node, + nodesVisitor(node.statements, visitor, isStatement) + ); + }, + [244 /* VariableStatement */]: function visitEachChildOfVariableStatement(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateVariableStatement( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.declarationList, visitor, isVariableDeclarationList)) + ); + }, + [245 /* ExpressionStatement */]: function visitEachChildOfExpressionStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateExpressionStatement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [246 /* IfStatement */]: function visitEachChildOfIfStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateIfStatement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.thenStatement, visitor, isStatement, context.factory.liftToBlock)), + nodeVisitor(node.elseStatement, visitor, isStatement, context.factory.liftToBlock) + ); + }, + [247 /* DoStatement */]: function visitEachChildOfDoStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateDoStatement( + node, + visitIterationBody(node.statement, visitor, context, nodeVisitor), + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [248 /* WhileStatement */]: function visitEachChildOfWhileStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateWhileStatement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + visitIterationBody(node.statement, visitor, context, nodeVisitor) + ); + }, + [249 /* ForStatement */]: function visitEachChildOfForStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateForStatement( + node, + nodeVisitor(node.initializer, visitor, isForInitializer), + nodeVisitor(node.condition, visitor, isExpression), + nodeVisitor(node.incrementor, visitor, isExpression), + visitIterationBody(node.statement, visitor, context, nodeVisitor) + ); + }, + [250 /* ForInStatement */]: function visitEachChildOfForInStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateForInStatement( + node, + Debug.checkDefined(nodeVisitor(node.initializer, visitor, isForInitializer)), + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + visitIterationBody(node.statement, visitor, context, nodeVisitor) + ); + }, + [251 /* ForOfStatement */]: function visitEachChildOfForOfStatement(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateForOfStatement( + node, + tokenVisitor ? nodeVisitor(node.awaitModifier, tokenVisitor, isAwaitKeyword) : node.awaitModifier, + Debug.checkDefined(nodeVisitor(node.initializer, visitor, isForInitializer)), + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + visitIterationBody(node.statement, visitor, context, nodeVisitor) + ); + }, + [252 /* ContinueStatement */]: function visitEachChildOfContinueStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateContinueStatement( + node, + nodeVisitor(node.label, visitor, isIdentifier) + ); + }, + [253 /* BreakStatement */]: function visitEachChildOfBreakStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateBreakStatement( + node, + nodeVisitor(node.label, visitor, isIdentifier) + ); + }, + [254 /* ReturnStatement */]: function visitEachChildOfReturnStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateReturnStatement( + node, + nodeVisitor(node.expression, visitor, isExpression) + ); + }, + [255 /* WithStatement */]: function visitEachChildOfWithStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateWithStatement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.statement, visitor, isStatement, context.factory.liftToBlock)) + ); + }, + [256 /* SwitchStatement */]: function visitEachChildOfSwitchStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateSwitchStatement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + Debug.checkDefined(nodeVisitor(node.caseBlock, visitor, isCaseBlock)) + ); + }, + [257 /* LabeledStatement */]: function visitEachChildOfLabeledStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateLabeledStatement( + node, + Debug.checkDefined(nodeVisitor(node.label, visitor, isIdentifier)), + Debug.checkDefined(nodeVisitor(node.statement, visitor, isStatement, context.factory.liftToBlock)) + ); + }, + [258 /* ThrowStatement */]: function visitEachChildOfThrowStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateThrowStatement( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [259 /* TryStatement */]: function visitEachChildOfTryStatement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTryStatement( + node, + Debug.checkDefined(nodeVisitor(node.tryBlock, visitor, isBlock)), + nodeVisitor(node.catchClause, visitor, isCatchClause), + nodeVisitor(node.finallyBlock, visitor, isBlock) + ); + }, + [261 /* VariableDeclaration */]: function visitEachChildOfVariableDeclaration(node, visitor, context, _nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateVariableDeclaration( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isBindingName)), + tokenVisitor ? nodeVisitor(node.exclamationToken, tokenVisitor, isExclamationToken) : node.exclamationToken, + nodeVisitor(node.type, visitor, isTypeNode), + nodeVisitor(node.initializer, visitor, isExpression) + ); + }, + [262 /* VariableDeclarationList */]: function visitEachChildOfVariableDeclarationList(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateVariableDeclarationList( + node, + nodesVisitor(node.declarations, visitor, isVariableDeclaration) + ); + }, + [263 /* FunctionDeclaration */]: function visitEachChildOfFunctionDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, tokenVisitor) { + return context.factory.updateFunctionDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifier), + tokenVisitor ? nodeVisitor(node.asteriskToken, tokenVisitor, isAsteriskToken) : node.asteriskToken, + nodeVisitor(node.name, visitor, isIdentifier), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + visitParameterList(node.parameters, visitor, context, nodesVisitor), + nodeVisitor(node.type, visitor, isTypeNode), + visitFunctionBody(node.body, visitor, context, nodeVisitor) + ); + }, + [264 /* ClassDeclaration */]: function visitEachChildOfClassDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateClassDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + nodeVisitor(node.name, visitor, isIdentifier), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.heritageClauses, visitor, isHeritageClause), + nodesVisitor(node.members, visitor, isClassElement) + ); + }, + [265 /* InterfaceDeclaration */]: function visitEachChildOfInterfaceDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateInterfaceDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + nodesVisitor(node.heritageClauses, visitor, isHeritageClause), + nodesVisitor(node.members, visitor, isTypeElement) + ); + }, + [266 /* TypeAliasDeclaration */]: function visitEachChildOfTypeAliasDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateTypeAliasDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + nodesVisitor(node.typeParameters, visitor, isTypeParameterDeclaration), + Debug.checkDefined(nodeVisitor(node.type, visitor, isTypeNode)) + ); + }, + [267 /* EnumDeclaration */]: function visitEachChildOfEnumDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateEnumDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + nodesVisitor(node.members, visitor, isEnumMember) + ); + }, + [268 /* ModuleDeclaration */]: function visitEachChildOfModuleDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateModuleDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.name, visitor, isModuleName)), + nodeVisitor(node.body, visitor, isModuleBody) + ); + }, + [269 /* ModuleBlock */]: function visitEachChildOfModuleBlock(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateModuleBlock( + node, + nodesVisitor(node.statements, visitor, isStatement) + ); + }, + [270 /* CaseBlock */]: function visitEachChildOfCaseBlock(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateCaseBlock( + node, + nodesVisitor(node.clauses, visitor, isCaseOrDefaultClause) + ); + }, + [271 /* NamespaceExportDeclaration */]: function visitEachChildOfNamespaceExportDeclaration(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateNamespaceExportDeclaration( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + ); + }, + [272 /* ImportEqualsDeclaration */]: function visitEachChildOfImportEqualsDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportEqualsDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + node.isTypeOnly, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + Debug.checkDefined(nodeVisitor(node.moduleReference, visitor, isModuleReference)) + ); + }, + [273 /* ImportDeclaration */]: function visitEachChildOfImportDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + nodeVisitor(node.importClause, visitor, isImportClause), + Debug.checkDefined(nodeVisitor(node.moduleSpecifier, visitor, isExpression)), + nodeVisitor(node.attributes, visitor, isImportAttributes) + ); + }, + [301 /* ImportAttributes */]: function visitEachChildOfImportAttributes(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateImportAttributes( + node, + nodesVisitor(node.elements, visitor, isImportAttribute), + node.multiLine + ); + }, + [302 /* ImportAttribute */]: function visitEachChildOfImportAttribute(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportAttribute( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isImportAttributeName)), + Debug.checkDefined(nodeVisitor(node.value, visitor, isExpression)) + ); + }, + [274 /* ImportClause */]: function visitEachChildOfImportClause(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportClause( + node, + node.phaseModifier, + nodeVisitor(node.name, visitor, isIdentifier), + nodeVisitor(node.namedBindings, visitor, isNamedImportBindings) + ); + }, + [275 /* NamespaceImport */]: function visitEachChildOfNamespaceImport(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateNamespaceImport( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + ); + }, + [281 /* NamespaceExport */]: function visitEachChildOfNamespaceExport(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateNamespaceExport( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + ); + }, + [276 /* NamedImports */]: function visitEachChildOfNamedImports(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateNamedImports( + node, + nodesVisitor(node.elements, visitor, isImportSpecifier) + ); + }, + [277 /* ImportSpecifier */]: function visitEachChildOfImportSpecifier(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateImportSpecifier( + node, + node.isTypeOnly, + nodeVisitor(node.propertyName, visitor, isModuleExportName), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + ); + }, + [278 /* ExportAssignment */]: function visitEachChildOfExportAssignment(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateExportAssignment( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [279 /* ExportDeclaration */]: function visitEachChildOfExportDeclaration(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateExportDeclaration( + node, + nodesVisitor(node.modifiers, visitor, isModifierLike), + node.isTypeOnly, + nodeVisitor(node.exportClause, visitor, isNamedExportBindings), + nodeVisitor(node.moduleSpecifier, visitor, isExpression), + nodeVisitor(node.attributes, visitor, isImportAttributes) + ); + }, + [280 /* NamedExports */]: function visitEachChildOfNamedExports(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateNamedExports( + node, + nodesVisitor(node.elements, visitor, isExportSpecifier) + ); + }, + [282 /* ExportSpecifier */]: function visitEachChildOfExportSpecifier(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateExportSpecifier( + node, + node.isTypeOnly, + nodeVisitor(node.propertyName, visitor, isModuleExportName), + Debug.checkDefined(nodeVisitor(node.name, visitor, isModuleExportName)) + ); + }, + // Module references + [284 /* ExternalModuleReference */]: function visitEachChildOfExternalModuleReference(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateExternalModuleReference( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + // JSX + [285 /* JsxElement */]: function visitEachChildOfJsxElement(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxElement( + node, + Debug.checkDefined(nodeVisitor(node.openingElement, visitor, isJsxOpeningElement)), + nodesVisitor(node.children, visitor, isJsxChild), + Debug.checkDefined(nodeVisitor(node.closingElement, visitor, isJsxClosingElement)) + ); + }, + [286 /* JsxSelfClosingElement */]: function visitEachChildOfJsxSelfClosingElement(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxSelfClosingElement( + node, + Debug.checkDefined(nodeVisitor(node.tagName, visitor, isJsxTagNameExpression)), + nodesVisitor(node.typeArguments, visitor, isTypeNode), + Debug.checkDefined(nodeVisitor(node.attributes, visitor, isJsxAttributes)) + ); + }, + [287 /* JsxOpeningElement */]: function visitEachChildOfJsxOpeningElement(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxOpeningElement( + node, + Debug.checkDefined(nodeVisitor(node.tagName, visitor, isJsxTagNameExpression)), + nodesVisitor(node.typeArguments, visitor, isTypeNode), + Debug.checkDefined(nodeVisitor(node.attributes, visitor, isJsxAttributes)) + ); + }, + [288 /* JsxClosingElement */]: function visitEachChildOfJsxClosingElement(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxClosingElement( + node, + Debug.checkDefined(nodeVisitor(node.tagName, visitor, isJsxTagNameExpression)) + ); + }, + [296 /* JsxNamespacedName */]: function forEachChildInJsxNamespacedName2(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxNamespacedName( + node, + Debug.checkDefined(nodeVisitor(node.namespace, visitor, isIdentifier)), + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)) + ); + }, + [289 /* JsxFragment */]: function visitEachChildOfJsxFragment(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxFragment( + node, + Debug.checkDefined(nodeVisitor(node.openingFragment, visitor, isJsxOpeningFragment)), + nodesVisitor(node.children, visitor, isJsxChild), + Debug.checkDefined(nodeVisitor(node.closingFragment, visitor, isJsxClosingFragment)) + ); + }, + [292 /* JsxAttribute */]: function visitEachChildOfJsxAttribute(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxAttribute( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isJsxAttributeName)), + nodeVisitor(node.initializer, visitor, isStringLiteralOrJsxExpression) + ); + }, + [293 /* JsxAttributes */]: function visitEachChildOfJsxAttributes(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxAttributes( + node, + nodesVisitor(node.properties, visitor, isJsxAttributeLike) + ); + }, + [294 /* JsxSpreadAttribute */]: function visitEachChildOfJsxSpreadAttribute(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxSpreadAttribute( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [295 /* JsxExpression */]: function visitEachChildOfJsxExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateJsxExpression( + node, + nodeVisitor(node.expression, visitor, isExpression) + ); + }, + // Clauses + [297 /* CaseClause */]: function visitEachChildOfCaseClause(node, visitor, context, nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateCaseClause( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)), + nodesVisitor(node.statements, visitor, isStatement) + ); + }, + [298 /* DefaultClause */]: function visitEachChildOfDefaultClause(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateDefaultClause( + node, + nodesVisitor(node.statements, visitor, isStatement) + ); + }, + [299 /* HeritageClause */]: function visitEachChildOfHeritageClause(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateHeritageClause( + node, + nodesVisitor(node.types, visitor, isExpressionWithTypeArguments) + ); + }, + [300 /* CatchClause */]: function visitEachChildOfCatchClause(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateCatchClause( + node, + nodeVisitor(node.variableDeclaration, visitor, isVariableDeclaration), + Debug.checkDefined(nodeVisitor(node.block, visitor, isBlock)) + ); + }, + // Property assignments + [304 /* PropertyAssignment */]: function visitEachChildOfPropertyAssignment(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updatePropertyAssignment( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + Debug.checkDefined(nodeVisitor(node.initializer, visitor, isExpression)) + ); + }, + [305 /* ShorthandPropertyAssignment */]: function visitEachChildOfShorthandPropertyAssignment(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateShorthandPropertyAssignment( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isIdentifier)), + nodeVisitor(node.objectAssignmentInitializer, visitor, isExpression) + ); + }, + [306 /* SpreadAssignment */]: function visitEachChildOfSpreadAssignment(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateSpreadAssignment( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + // Enum + [307 /* EnumMember */]: function visitEachChildOfEnumMember(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updateEnumMember( + node, + Debug.checkDefined(nodeVisitor(node.name, visitor, isPropertyName)), + nodeVisitor(node.initializer, visitor, isExpression) + ); + }, + // Top-level nodes + [308 /* SourceFile */]: function visitEachChildOfSourceFile(node, visitor, context, _nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateSourceFile( + node, + visitLexicalEnvironment(node.statements, visitor, context) + ); + }, + // Transformation nodes + [356 /* PartiallyEmittedExpression */]: function visitEachChildOfPartiallyEmittedExpression(node, visitor, context, _nodesVisitor, nodeVisitor, _tokenVisitor) { + return context.factory.updatePartiallyEmittedExpression( + node, + Debug.checkDefined(nodeVisitor(node.expression, visitor, isExpression)) + ); + }, + [357 /* CommaListExpression */]: function visitEachChildOfCommaListExpression(node, visitor, context, nodesVisitor, _nodeVisitor, _tokenVisitor) { + return context.factory.updateCommaListExpression( + node, + nodesVisitor(node.elements, visitor, isExpression) + ); + } +}; +function extractSingleNode(nodes) { + Debug.assert(nodes.length <= 1, "Too many nodes written to output."); + return singleOrUndefined(nodes); +} + +// src/compiler/sourcemap.ts +function createSourceMapGenerator(host, file, sourceRoot, sourcesDirectoryPath, generatorOptions) { + var { enter, exit } = generatorOptions.extendedDiagnostics ? createTimer("Source Map", "beforeSourcemap", "afterSourcemap") : nullTimer; + var rawSources = []; + var sources = []; + var sourceToSourceIndexMap = /* @__PURE__ */ new Map(); + var sourcesContent; + var names = []; + var nameToNameIndexMap; + var mappingCharCodes = []; + var mappings = ""; + var lastGeneratedLine = 0; + var lastGeneratedCharacter = 0; + var lastSourceIndex = 0; + var lastSourceLine = 0; + var lastSourceCharacter = 0; + var lastNameIndex = 0; + var hasLast = false; + var pendingGeneratedLine = 0; + var pendingGeneratedCharacter = 0; + var pendingSourceIndex = 0; + var pendingSourceLine = 0; + var pendingSourceCharacter = 0; + var pendingNameIndex = 0; + var hasPending = false; + var hasPendingSource = false; + var hasPendingName = false; + return { + getSources: () => rawSources, + addSource, + setSourceContent, + addName, + addMapping, + appendSourceMap, + toJSON, + toString: () => JSON.stringify(toJSON()) + }; + function addSource(fileName) { + enter(); + const source = getRelativePathToDirectoryOrUrl( + sourcesDirectoryPath, + fileName, + host.getCurrentDirectory(), + host.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ + true + ); + let sourceIndex = sourceToSourceIndexMap.get(source); + if (sourceIndex === void 0) { + sourceIndex = sources.length; + sources.push(source); + rawSources.push(fileName); + sourceToSourceIndexMap.set(source, sourceIndex); + } + exit(); + return sourceIndex; + } + function setSourceContent(sourceIndex, content) { + enter(); + if (content !== null) { + if (!sourcesContent) sourcesContent = []; + while (sourcesContent.length < sourceIndex) { + sourcesContent.push(null); + } + sourcesContent[sourceIndex] = content; + } + exit(); + } + function addName(name) { + enter(); + if (!nameToNameIndexMap) nameToNameIndexMap = /* @__PURE__ */ new Map(); + let nameIndex = nameToNameIndexMap.get(name); + if (nameIndex === void 0) { + nameIndex = names.length; + names.push(name); + nameToNameIndexMap.set(name, nameIndex); + } + exit(); + return nameIndex; + } + function isNewGeneratedPosition(generatedLine, generatedCharacter) { + return !hasPending || pendingGeneratedLine !== generatedLine || pendingGeneratedCharacter !== generatedCharacter; + } + function isBacktrackingSourcePosition(sourceIndex, sourceLine, sourceCharacter) { + return sourceIndex !== void 0 && sourceLine !== void 0 && sourceCharacter !== void 0 && pendingSourceIndex === sourceIndex && (pendingSourceLine > sourceLine || pendingSourceLine === sourceLine && pendingSourceCharacter > sourceCharacter); + } + function addMapping(generatedLine, generatedCharacter, sourceIndex, sourceLine, sourceCharacter, nameIndex) { + Debug.assert(generatedLine >= pendingGeneratedLine, "generatedLine cannot backtrack"); + Debug.assert(generatedCharacter >= 0, "generatedCharacter cannot be negative"); + Debug.assert(sourceIndex === void 0 || sourceIndex >= 0, "sourceIndex cannot be negative"); + Debug.assert(sourceLine === void 0 || sourceLine >= 0, "sourceLine cannot be negative"); + Debug.assert(sourceCharacter === void 0 || sourceCharacter >= 0, "sourceCharacter cannot be negative"); + enter(); + if (isNewGeneratedPosition(generatedLine, generatedCharacter) || isBacktrackingSourcePosition(sourceIndex, sourceLine, sourceCharacter)) { + commitPendingMapping(); + pendingGeneratedLine = generatedLine; + pendingGeneratedCharacter = generatedCharacter; + hasPendingSource = false; + hasPendingName = false; + hasPending = true; + } + if (sourceIndex !== void 0 && sourceLine !== void 0 && sourceCharacter !== void 0) { + pendingSourceIndex = sourceIndex; + pendingSourceLine = sourceLine; + pendingSourceCharacter = sourceCharacter; + hasPendingSource = true; + if (nameIndex !== void 0) { + pendingNameIndex = nameIndex; + hasPendingName = true; + } + } + exit(); + } + function appendSourceMap(generatedLine, generatedCharacter, map2, sourceMapPath, start, end) { + Debug.assert(generatedLine >= pendingGeneratedLine, "generatedLine cannot backtrack"); + Debug.assert(generatedCharacter >= 0, "generatedCharacter cannot be negative"); + enter(); + const sourceIndexToNewSourceIndexMap = []; + let nameIndexToNewNameIndexMap; + const mappingIterator = decodeMappings(map2.mappings); + for (const raw of mappingIterator) { + if (end && (raw.generatedLine > end.line || raw.generatedLine === end.line && raw.generatedCharacter > end.character)) { + break; + } + if (start && (raw.generatedLine < start.line || start.line === raw.generatedLine && raw.generatedCharacter < start.character)) { + continue; + } + let newSourceIndex; + let newSourceLine; + let newSourceCharacter; + let newNameIndex; + if (raw.sourceIndex !== void 0) { + newSourceIndex = sourceIndexToNewSourceIndexMap[raw.sourceIndex]; + if (newSourceIndex === void 0) { + const rawPath = map2.sources[raw.sourceIndex]; + const relativePath = map2.sourceRoot ? combinePaths(map2.sourceRoot, rawPath) : rawPath; + const combinedPath = combinePaths(getDirectoryPath(sourceMapPath), relativePath); + sourceIndexToNewSourceIndexMap[raw.sourceIndex] = newSourceIndex = addSource(combinedPath); + if (map2.sourcesContent && typeof map2.sourcesContent[raw.sourceIndex] === "string") { + setSourceContent(newSourceIndex, map2.sourcesContent[raw.sourceIndex]); + } + } + newSourceLine = raw.sourceLine; + newSourceCharacter = raw.sourceCharacter; + if (map2.names && raw.nameIndex !== void 0) { + if (!nameIndexToNewNameIndexMap) nameIndexToNewNameIndexMap = []; + newNameIndex = nameIndexToNewNameIndexMap[raw.nameIndex]; + if (newNameIndex === void 0) { + nameIndexToNewNameIndexMap[raw.nameIndex] = newNameIndex = addName(map2.names[raw.nameIndex]); + } + } + } + const rawGeneratedLine = raw.generatedLine - (start ? start.line : 0); + const newGeneratedLine = rawGeneratedLine + generatedLine; + const rawGeneratedCharacter = start && start.line === raw.generatedLine ? raw.generatedCharacter - start.character : raw.generatedCharacter; + const newGeneratedCharacter = rawGeneratedLine === 0 ? rawGeneratedCharacter + generatedCharacter : rawGeneratedCharacter; + addMapping(newGeneratedLine, newGeneratedCharacter, newSourceIndex, newSourceLine, newSourceCharacter, newNameIndex); + } + exit(); + } + function shouldCommitMapping() { + return !hasLast || lastGeneratedLine !== pendingGeneratedLine || lastGeneratedCharacter !== pendingGeneratedCharacter || lastSourceIndex !== pendingSourceIndex || lastSourceLine !== pendingSourceLine || lastSourceCharacter !== pendingSourceCharacter || lastNameIndex !== pendingNameIndex; + } + function appendMappingCharCode(charCode) { + mappingCharCodes.push(charCode); + if (mappingCharCodes.length >= 1024) { + flushMappingBuffer(); + } + } + function commitPendingMapping() { + if (!hasPending || !shouldCommitMapping()) { + return; + } + enter(); + if (lastGeneratedLine < pendingGeneratedLine) { + do { + appendMappingCharCode(59 /* semicolon */); + lastGeneratedLine++; + } while (lastGeneratedLine < pendingGeneratedLine); + lastGeneratedCharacter = 0; + } else { + Debug.assertEqual(lastGeneratedLine, pendingGeneratedLine, "generatedLine cannot backtrack"); + if (hasLast) { + appendMappingCharCode(44 /* comma */); + } + } + appendBase64VLQ(pendingGeneratedCharacter - lastGeneratedCharacter); + lastGeneratedCharacter = pendingGeneratedCharacter; + if (hasPendingSource) { + appendBase64VLQ(pendingSourceIndex - lastSourceIndex); + lastSourceIndex = pendingSourceIndex; + appendBase64VLQ(pendingSourceLine - lastSourceLine); + lastSourceLine = pendingSourceLine; + appendBase64VLQ(pendingSourceCharacter - lastSourceCharacter); + lastSourceCharacter = pendingSourceCharacter; + if (hasPendingName) { + appendBase64VLQ(pendingNameIndex - lastNameIndex); + lastNameIndex = pendingNameIndex; + } + } + hasLast = true; + exit(); + } + function flushMappingBuffer() { + if (mappingCharCodes.length > 0) { + mappings += String.fromCharCode.apply(void 0, mappingCharCodes); + mappingCharCodes.length = 0; + } + } + function toJSON() { + commitPendingMapping(); + flushMappingBuffer(); + return { + version: 3, + file, + sourceRoot, + sources, + names, + mappings, + sourcesContent + }; + } + function appendBase64VLQ(inValue) { + if (inValue < 0) { + inValue = (-inValue << 1) + 1; + } else { + inValue = inValue << 1; + } + do { + let currentDigit = inValue & 31; + inValue = inValue >> 5; + if (inValue > 0) { + currentDigit = currentDigit | 32; + } + appendMappingCharCode(base64FormatEncode(currentDigit)); + } while (inValue > 0); + } +} +var sourceMapCommentRegExpDontCareLineStart = /\/\/[@#] source[M]appingURL=(.+)\r?\n?$/; +var sourceMapCommentRegExp = /^\/\/[@#] source[M]appingURL=(.+)\r?\n?$/; +var whitespaceOrMapCommentRegExp = /^\s*(\/\/[@#] .*)?$/; +function getLineInfo(text, lineStarts) { + return { + getLineCount: () => lineStarts.length, + getLineText: (line) => text.substring(lineStarts[line], lineStarts[line + 1]) + }; +} +function tryGetSourceMappingURL(lineInfo) { + for (let index = lineInfo.getLineCount() - 1; index >= 0; index--) { + const line = lineInfo.getLineText(index); + const comment = sourceMapCommentRegExp.exec(line); + if (comment) { + return comment[1].trimEnd(); + } else if (!line.match(whitespaceOrMapCommentRegExp)) { + break; + } + } +} +function isStringOrNull(x) { + return typeof x === "string" || x === null; +} +function isRawSourceMap(x) { + return x !== null && typeof x === "object" && x.version === 3 && typeof x.file === "string" && typeof x.mappings === "string" && isArray(x.sources) && every(x.sources, isString) && (x.sourceRoot === void 0 || x.sourceRoot === null || typeof x.sourceRoot === "string") && (x.sourcesContent === void 0 || x.sourcesContent === null || isArray(x.sourcesContent) && every(x.sourcesContent, isStringOrNull)) && (x.names === void 0 || x.names === null || isArray(x.names) && every(x.names, isString)); +} +function tryParseRawSourceMap(text) { + try { + const parsed = JSON.parse(text); + if (isRawSourceMap(parsed)) { + return parsed; + } + } catch { + } + return void 0; +} +function decodeMappings(mappings) { + let done = false; + let pos = 0; + let generatedLine = 0; + let generatedCharacter = 0; + let sourceIndex = 0; + let sourceLine = 0; + let sourceCharacter = 0; + let nameIndex = 0; + let error2; + return { + get pos() { + return pos; + }, + get error() { + return error2; + }, + get state() { + return captureMapping( + /*hasSource*/ + true, + /*hasName*/ + true + ); + }, + next() { + while (!done && pos < mappings.length) { + const ch = mappings.charCodeAt(pos); + if (ch === 59 /* semicolon */) { + generatedLine++; + generatedCharacter = 0; + pos++; + continue; + } + if (ch === 44 /* comma */) { + pos++; + continue; + } + let hasSource = false; + let hasName = false; + generatedCharacter += base64VLQFormatDecode(); + if (hasReportedError()) return stopIterating(); + if (generatedCharacter < 0) return setErrorAndStopIterating("Invalid generatedCharacter found"); + if (!isSourceMappingSegmentEnd()) { + hasSource = true; + sourceIndex += base64VLQFormatDecode(); + if (hasReportedError()) return stopIterating(); + if (sourceIndex < 0) return setErrorAndStopIterating("Invalid sourceIndex found"); + if (isSourceMappingSegmentEnd()) return setErrorAndStopIterating("Unsupported Format: No entries after sourceIndex"); + sourceLine += base64VLQFormatDecode(); + if (hasReportedError()) return stopIterating(); + if (sourceLine < 0) return setErrorAndStopIterating("Invalid sourceLine found"); + if (isSourceMappingSegmentEnd()) return setErrorAndStopIterating("Unsupported Format: No entries after sourceLine"); + sourceCharacter += base64VLQFormatDecode(); + if (hasReportedError()) return stopIterating(); + if (sourceCharacter < 0) return setErrorAndStopIterating("Invalid sourceCharacter found"); + if (!isSourceMappingSegmentEnd()) { + hasName = true; + nameIndex += base64VLQFormatDecode(); + if (hasReportedError()) return stopIterating(); + if (nameIndex < 0) return setErrorAndStopIterating("Invalid nameIndex found"); + if (!isSourceMappingSegmentEnd()) return setErrorAndStopIterating("Unsupported Error Format: Entries after nameIndex"); + } + } + return { value: captureMapping(hasSource, hasName), done }; + } + return stopIterating(); + }, + [Symbol.iterator]() { + return this; + } + }; + function captureMapping(hasSource, hasName) { + return { + generatedLine, + generatedCharacter, + sourceIndex: hasSource ? sourceIndex : void 0, + sourceLine: hasSource ? sourceLine : void 0, + sourceCharacter: hasSource ? sourceCharacter : void 0, + nameIndex: hasName ? nameIndex : void 0 + }; + } + function stopIterating() { + done = true; + return { value: void 0, done: true }; + } + function setError(message) { + if (error2 === void 0) { + error2 = message; + } + } + function setErrorAndStopIterating(message) { + setError(message); + return stopIterating(); + } + function hasReportedError() { + return error2 !== void 0; + } + function isSourceMappingSegmentEnd() { + return pos === mappings.length || mappings.charCodeAt(pos) === 44 /* comma */ || mappings.charCodeAt(pos) === 59 /* semicolon */; + } + function base64VLQFormatDecode() { + let moreDigits = true; + let shiftCount = 0; + let value = 0; + for (; moreDigits; pos++) { + if (pos >= mappings.length) return setError("Error in decoding base64VLQFormatDecode, past the mapping string"), -1; + const currentByte = base64FormatDecode(mappings.charCodeAt(pos)); + if (currentByte === -1) return setError("Invalid character in VLQ"), -1; + moreDigits = (currentByte & 32) !== 0; + value = value | (currentByte & 31) << shiftCount; + shiftCount += 5; + } + if ((value & 1) === 0) { + value = value >> 1; + } else { + value = value >> 1; + value = -value; + } + return value; + } +} +function sameMapping(left, right) { + return left === right || left.generatedLine === right.generatedLine && left.generatedCharacter === right.generatedCharacter && left.sourceIndex === right.sourceIndex && left.sourceLine === right.sourceLine && left.sourceCharacter === right.sourceCharacter && left.nameIndex === right.nameIndex; +} +function isSourceMapping(mapping) { + return mapping.sourceIndex !== void 0 && mapping.sourceLine !== void 0 && mapping.sourceCharacter !== void 0; +} +function base64FormatEncode(value) { + return value >= 0 && value < 26 ? 65 /* A */ + value : value >= 26 && value < 52 ? 97 /* a */ + value - 26 : value >= 52 && value < 62 ? 48 /* _0 */ + value - 52 : value === 62 ? 43 /* plus */ : value === 63 ? 47 /* slash */ : Debug.fail(`${value}: not a base64 value`); +} +function base64FormatDecode(ch) { + return ch >= 65 /* A */ && ch <= 90 /* Z */ ? ch - 65 /* A */ : ch >= 97 /* a */ && ch <= 122 /* z */ ? ch - 97 /* a */ + 26 : ch >= 48 /* _0 */ && ch <= 57 /* _9 */ ? ch - 48 /* _0 */ + 52 : ch === 43 /* plus */ ? 62 : ch === 47 /* slash */ ? 63 : -1; +} +function isSourceMappedPosition(value) { + return value.sourceIndex !== void 0 && value.sourcePosition !== void 0; +} +function sameMappedPosition(left, right) { + return left.generatedPosition === right.generatedPosition && left.sourceIndex === right.sourceIndex && left.sourcePosition === right.sourcePosition; +} +function compareSourcePositions(left, right) { + Debug.assert(left.sourceIndex === right.sourceIndex); + return compareValues(left.sourcePosition, right.sourcePosition); +} +function compareGeneratedPositions(left, right) { + return compareValues(left.generatedPosition, right.generatedPosition); +} +function getSourcePositionOfMapping(value) { + return value.sourcePosition; +} +function getGeneratedPositionOfMapping(value) { + return value.generatedPosition; +} +function createDocumentPositionMapper(host, map2, mapPath) { + const mapDirectory = getDirectoryPath(mapPath); + const sourceRoot = map2.sourceRoot ? getNormalizedAbsolutePath(map2.sourceRoot, mapDirectory) : mapDirectory; + const generatedAbsoluteFilePath = getNormalizedAbsolutePath(map2.file, mapDirectory); + const generatedFile = host.getSourceFileLike(generatedAbsoluteFilePath); + const sourceFileAbsolutePaths = map2.sources.map((source) => getNormalizedAbsolutePath(source, sourceRoot)); + const sourceToSourceIndexMap = new Map(sourceFileAbsolutePaths.map((source, i) => [host.getCanonicalFileName(source), i])); + let decodedMappings; + let generatedMappings; + let sourceMappings; + return { + getSourcePosition, + getGeneratedPosition + }; + function processMapping(mapping) { + const generatedPosition = generatedFile !== void 0 ? getPositionOfLineAndCharacter( + generatedFile, + mapping.generatedLine, + mapping.generatedCharacter, + /*allowEdits*/ + true + ) : -1; + let source; + let sourcePosition; + if (isSourceMapping(mapping)) { + const sourceFile = host.getSourceFileLike(sourceFileAbsolutePaths[mapping.sourceIndex]); + source = map2.sources[mapping.sourceIndex]; + sourcePosition = sourceFile !== void 0 ? getPositionOfLineAndCharacter( + sourceFile, + mapping.sourceLine, + mapping.sourceCharacter, + /*allowEdits*/ + true + ) : -1; + } + return { + generatedPosition, + source, + sourceIndex: mapping.sourceIndex, + sourcePosition, + nameIndex: mapping.nameIndex + }; + } + function getDecodedMappings() { + if (decodedMappings === void 0) { + const decoder = decodeMappings(map2.mappings); + const mappings = arrayFrom(decoder, processMapping); + if (decoder.error !== void 0) { + if (host.log) { + host.log(`Encountered error while decoding sourcemap: ${decoder.error}`); + } + decodedMappings = emptyArray; + } else { + decodedMappings = mappings; + } + } + return decodedMappings; + } + function getSourceMappings(sourceIndex) { + if (sourceMappings === void 0) { + const lists = []; + for (const mapping of getDecodedMappings()) { + if (!isSourceMappedPosition(mapping)) continue; + let list = lists[mapping.sourceIndex]; + if (!list) lists[mapping.sourceIndex] = list = []; + list.push(mapping); + } + sourceMappings = lists.map((list) => sortAndDeduplicate(list, compareSourcePositions, sameMappedPosition)); + } + return sourceMappings[sourceIndex]; + } + function getGeneratedMappings() { + if (generatedMappings === void 0) { + const list = []; + for (const mapping of getDecodedMappings()) { + list.push(mapping); + } + generatedMappings = sortAndDeduplicate(list, compareGeneratedPositions, sameMappedPosition); + } + return generatedMappings; + } + function getGeneratedPosition(loc) { + const sourceIndex = sourceToSourceIndexMap.get(host.getCanonicalFileName(loc.fileName)); + if (sourceIndex === void 0) return loc; + const sourceMappings2 = getSourceMappings(sourceIndex); + if (!some(sourceMappings2)) return loc; + let targetIndex = binarySearchKey(sourceMappings2, loc.pos, getSourcePositionOfMapping, compareValues); + if (targetIndex < 0) { + targetIndex = ~targetIndex; + } + const mapping = sourceMappings2[targetIndex]; + if (mapping === void 0 || mapping.sourceIndex !== sourceIndex) { + return loc; + } + return { fileName: generatedAbsoluteFilePath, pos: mapping.generatedPosition }; + } + function getSourcePosition(loc) { + const generatedMappings2 = getGeneratedMappings(); + if (!some(generatedMappings2)) return loc; + let targetIndex = binarySearchKey(generatedMappings2, loc.pos, getGeneratedPositionOfMapping, compareValues); + if (targetIndex < 0) { + targetIndex = ~targetIndex; + } + const mapping = generatedMappings2[targetIndex]; + if (mapping === void 0 || !isSourceMappedPosition(mapping)) { + return loc; + } + return { fileName: sourceFileAbsolutePaths[mapping.sourceIndex], pos: mapping.sourcePosition }; + } +} +var identitySourceMapConsumer = { + getSourcePosition: identity, + getGeneratedPosition: identity +}; + +// src/compiler/transformers/utilities.ts +function getOriginalNodeId(node) { + node = getOriginalNode(node); + return node ? getNodeId(node) : 0; +} +function containsDefaultReference(node) { + if (!node) return false; + if (!isNamedImports(node) && !isNamedExports(node)) return false; + return some(node.elements, isNamedDefaultReference); +} +function isNamedDefaultReference(e) { + return moduleExportNameIsDefault(e.propertyName || e.name); +} +function chainBundle(context, transformSourceFile) { + return transformSourceFileOrBundle; + function transformSourceFileOrBundle(node) { + return node.kind === 308 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node); + } + function transformBundle(node) { + return context.factory.createBundle(map(node.sourceFiles, transformSourceFile)); + } +} +function getExportNeedsImportStarHelper(node) { + return !!getNamespaceDeclarationNode(node); +} +function getImportNeedsImportStarHelper(node) { + if (!!getNamespaceDeclarationNode(node)) { + return true; + } + const bindings = node.importClause && node.importClause.namedBindings; + if (!bindings) { + return false; + } + if (!isNamedImports(bindings)) return false; + let defaultRefCount = 0; + for (const binding of bindings.elements) { + if (isNamedDefaultReference(binding)) { + defaultRefCount++; + } + } + return defaultRefCount > 0 && defaultRefCount !== bindings.elements.length || !!(bindings.elements.length - defaultRefCount) && isDefaultImport(node); +} +function getImportNeedsImportDefaultHelper(node) { + return !getImportNeedsImportStarHelper(node) && (isDefaultImport(node) || !!node.importClause && isNamedImports(node.importClause.namedBindings) && containsDefaultReference(node.importClause.namedBindings)); +} +function collectExternalModuleInfo(context, sourceFile) { + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const externalImports = []; + const exportSpecifiers = new IdentifierNameMultiMap(); + const exportedBindings = []; + const uniqueExports = /* @__PURE__ */ new Map(); + const exportedFunctions = /* @__PURE__ */ new Set(); + let exportedNames; + let hasExportDefault = false; + let exportEquals; + let hasExportStarsToExportValues = false; + let hasImportStar = false; + let hasImportDefault = false; + for (const node of sourceFile.statements) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + externalImports.push(node); + if (!hasImportStar && getImportNeedsImportStarHelper(node)) { + hasImportStar = true; + } + if (!hasImportDefault && getImportNeedsImportDefaultHelper(node)) { + hasImportDefault = true; + } + break; + case 272 /* ImportEqualsDeclaration */: + if (node.moduleReference.kind === 284 /* ExternalModuleReference */) { + externalImports.push(node); + } + break; + case 279 /* ExportDeclaration */: + if (node.moduleSpecifier) { + if (!node.exportClause) { + externalImports.push(node); + hasExportStarsToExportValues = true; + } else { + externalImports.push(node); + if (isNamedExports(node.exportClause)) { + addExportedNamesForExportDeclaration(node); + hasImportDefault || (hasImportDefault = containsDefaultReference(node.exportClause)); + } else { + const name = node.exportClause.name; + const nameText = moduleExportNameTextUnescaped(name); + if (!uniqueExports.get(nameText)) { + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); + uniqueExports.set(nameText, true); + exportedNames = append(exportedNames, name); + } + hasImportStar = true; + } + } + } else { + addExportedNamesForExportDeclaration(node); + } + break; + case 278 /* ExportAssignment */: + if (node.isExportEquals && !exportEquals) { + exportEquals = node; + } + break; + case 244 /* VariableStatement */: + if (hasSyntacticModifier(node, 32 /* Export */)) { + for (const decl of node.declarationList.declarations) { + exportedNames = collectExportedVariableInfo(decl, uniqueExports, exportedNames, exportedBindings); + } + } + break; + case 263 /* FunctionDeclaration */: + if (hasSyntacticModifier(node, 32 /* Export */)) { + addExportedFunctionDeclaration( + node, + /*name*/ + void 0, + hasSyntacticModifier(node, 2048 /* Default */) + ); + } + break; + case 264 /* ClassDeclaration */: + if (hasSyntacticModifier(node, 32 /* Export */)) { + if (hasSyntacticModifier(node, 2048 /* Default */)) { + if (!hasExportDefault) { + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), context.factory.getDeclarationName(node)); + hasExportDefault = true; + } + } else { + const name = node.name; + if (name && !uniqueExports.get(idText(name))) { + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); + uniqueExports.set(idText(name), true); + exportedNames = append(exportedNames, name); + } + } + } + break; + } + } + const externalHelpersImportDeclaration = createExternalHelpersImportDeclarationIfNeeded(context.factory, context.getEmitHelperFactory(), sourceFile, compilerOptions, hasExportStarsToExportValues, hasImportStar, hasImportDefault); + if (externalHelpersImportDeclaration) { + externalImports.unshift(externalHelpersImportDeclaration); + } + return { externalImports, exportSpecifiers, exportEquals, hasExportStarsToExportValues, exportedBindings, exportedNames, exportedFunctions, externalHelpersImportDeclaration }; + function addExportedNamesForExportDeclaration(node) { + for (const specifier of cast(node.exportClause, isNamedExports).elements) { + const specifierNameText = moduleExportNameTextUnescaped(specifier.name); + if (!uniqueExports.get(specifierNameText)) { + const name = specifier.propertyName || specifier.name; + if (name.kind !== 11 /* StringLiteral */) { + if (!node.moduleSpecifier) { + exportSpecifiers.add(name, specifier); + } + const decl = resolver.getReferencedImportDeclaration(name) || resolver.getReferencedValueDeclaration(name); + if (decl) { + if (decl.kind === 263 /* FunctionDeclaration */) { + addExportedFunctionDeclaration(decl, specifier.name, moduleExportNameIsDefault(specifier.name)); + continue; + } + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), specifier.name); + } + } + uniqueExports.set(specifierNameText, true); + exportedNames = append(exportedNames, specifier.name); + } + } + } + function addExportedFunctionDeclaration(node, name, isDefault) { + exportedFunctions.add(getOriginalNode(node, isFunctionDeclaration)); + if (isDefault) { + if (!hasExportDefault) { + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name ?? context.factory.getDeclarationName(node)); + hasExportDefault = true; + } + } else { + name ?? (name = node.name); + const nameText = moduleExportNameTextUnescaped(name); + if (!uniqueExports.get(nameText)) { + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(node), name); + uniqueExports.set(nameText, true); + } + } + } +} +function collectExportedVariableInfo(decl, uniqueExports, exportedNames, exportedBindings) { + if (isBindingPattern(decl.name)) { + for (const element of decl.name.elements) { + if (!isOmittedExpression(element)) { + exportedNames = collectExportedVariableInfo(element, uniqueExports, exportedNames, exportedBindings); + } + } + } else if (!isGeneratedIdentifier(decl.name)) { + const text = idText(decl.name); + if (!uniqueExports.get(text)) { + uniqueExports.set(text, true); + exportedNames = append(exportedNames, decl.name); + if (isLocalName(decl.name)) { + multiMapSparseArrayAdd(exportedBindings, getOriginalNodeId(decl), decl.name); + } + } + } + return exportedNames; +} +function multiMapSparseArrayAdd(map2, key, value) { + let values = map2[key]; + if (values) { + values.push(value); + } else { + map2[key] = values = [value]; + } + return values; +} +var IdentifierNameMap = class _IdentifierNameMap { + constructor() { + this._map = /* @__PURE__ */ new Map(); + } + get size() { + return this._map.size; + } + has(key) { + return this._map.has(_IdentifierNameMap.toKey(key)); + } + get(key) { + return this._map.get(_IdentifierNameMap.toKey(key)); + } + set(key, value) { + this._map.set(_IdentifierNameMap.toKey(key), value); + return this; + } + delete(key) { + var _a; + return ((_a = this._map) == null ? void 0 : _a.delete(_IdentifierNameMap.toKey(key))) ?? false; + } + clear() { + this._map.clear(); + } + values() { + return this._map.values(); + } + static toKey(name) { + if (isGeneratedPrivateIdentifier(name) || isGeneratedIdentifier(name)) { + const autoGenerate = name.emitNode.autoGenerate; + if ((autoGenerate.flags & 7 /* KindMask */) === 4 /* Node */) { + const node = getNodeForGeneratedName(name); + const baseName = isMemberName(node) && node !== name ? _IdentifierNameMap.toKey(node) : `(generated@${getNodeId(node)})`; + return formatGeneratedName( + /*privateName*/ + false, + autoGenerate.prefix, + baseName, + autoGenerate.suffix, + _IdentifierNameMap.toKey + ); + } else { + const baseName = `(auto@${autoGenerate.id})`; + return formatGeneratedName( + /*privateName*/ + false, + autoGenerate.prefix, + baseName, + autoGenerate.suffix, + _IdentifierNameMap.toKey + ); + } + } + if (isPrivateIdentifier(name)) { + return idText(name).slice(1); + } + return idText(name); + } +}; +var IdentifierNameMultiMap = class extends IdentifierNameMap { + add(key, value) { + let values = this.get(key); + if (values) { + values.push(value); + } else { + this.set(key, values = [value]); + } + return values; + } + remove(key, value) { + const values = this.get(key); + if (values) { + unorderedRemoveItem(values, value); + if (!values.length) { + this.delete(key); + } + } + } +}; +function isSimpleCopiableExpression(expression) { + return isStringLiteralLike(expression) || expression.kind === 9 /* NumericLiteral */ || isKeyword(expression.kind) || isIdentifier(expression); +} +function isSimpleInlineableExpression(expression) { + return !isIdentifier(expression) && isSimpleCopiableExpression(expression); +} +function isCompoundAssignment(kind) { + return kind >= 65 /* FirstCompoundAssignment */ && kind <= 79 /* LastCompoundAssignment */; +} +function getNonAssignmentOperatorForCompoundAssignment(kind) { + switch (kind) { + case 65 /* PlusEqualsToken */: + return 40 /* PlusToken */; + case 66 /* MinusEqualsToken */: + return 41 /* MinusToken */; + case 67 /* AsteriskEqualsToken */: + return 42 /* AsteriskToken */; + case 68 /* AsteriskAsteriskEqualsToken */: + return 43 /* AsteriskAsteriskToken */; + case 69 /* SlashEqualsToken */: + return 44 /* SlashToken */; + case 70 /* PercentEqualsToken */: + return 45 /* PercentToken */; + case 71 /* LessThanLessThanEqualsToken */: + return 48 /* LessThanLessThanToken */; + case 72 /* GreaterThanGreaterThanEqualsToken */: + return 49 /* GreaterThanGreaterThanToken */; + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + return 50 /* GreaterThanGreaterThanGreaterThanToken */; + case 74 /* AmpersandEqualsToken */: + return 51 /* AmpersandToken */; + case 75 /* BarEqualsToken */: + return 52 /* BarToken */; + case 79 /* CaretEqualsToken */: + return 53 /* CaretToken */; + case 76 /* BarBarEqualsToken */: + return 57 /* BarBarToken */; + case 77 /* AmpersandAmpersandEqualsToken */: + return 56 /* AmpersandAmpersandToken */; + case 78 /* QuestionQuestionEqualsToken */: + return 61 /* QuestionQuestionToken */; + } +} +function getSuperCallFromStatement(statement) { + if (!isExpressionStatement(statement)) { + return void 0; + } + const expression = skipParentheses(statement.expression); + return isSuperCall(expression) ? expression : void 0; +} +function findSuperStatementIndexPathWorker(statements, start, indices) { + for (let i = start; i < statements.length; i += 1) { + const statement = statements[i]; + if (getSuperCallFromStatement(statement)) { + indices.unshift(i); + return true; + } else if (isTryStatement(statement) && findSuperStatementIndexPathWorker(statement.tryBlock.statements, 0, indices)) { + indices.unshift(i); + return true; + } + } + return false; +} +function findSuperStatementIndexPath(statements, start) { + const indices = []; + findSuperStatementIndexPathWorker(statements, start, indices); + return indices; +} +function getProperties(node, requireInitializer, isStatic2) { + return filter(node.members, (m) => isInitializedOrStaticProperty(m, requireInitializer, isStatic2)); +} +function isStaticPropertyDeclarationOrClassStaticBlockDeclaration(element) { + return isStaticPropertyDeclaration(element) || isClassStaticBlockDeclaration(element); +} +function getStaticPropertiesAndClassStaticBlock(node) { + return filter(node.members, isStaticPropertyDeclarationOrClassStaticBlockDeclaration); +} +function isInitializedOrStaticProperty(member, requireInitializer, isStatic2) { + return isPropertyDeclaration(member) && (!!member.initializer || !requireInitializer) && hasStaticModifier(member) === isStatic2; +} +function isStaticPropertyDeclaration(member) { + return isPropertyDeclaration(member) && hasStaticModifier(member); +} +function isInitializedProperty(member) { + return member.kind === 173 /* PropertyDeclaration */ && member.initializer !== void 0; +} +function isNonStaticMethodOrAccessorWithPrivateName(member) { + return !isStatic(member) && (isMethodOrAccessor(member) || isAutoAccessorPropertyDeclaration(member)) && isPrivateIdentifier(member.name); +} +function getDecoratorsOfParameters(node) { + let decorators; + if (node) { + const parameters = node.parameters; + const firstParameterIsThis = parameters.length > 0 && parameterIsThisKeyword(parameters[0]); + const firstParameterOffset = firstParameterIsThis ? 1 : 0; + const numParameters = firstParameterIsThis ? parameters.length - 1 : parameters.length; + for (let i = 0; i < numParameters; i++) { + const parameter = parameters[i + firstParameterOffset]; + if (decorators || hasDecorators(parameter)) { + if (!decorators) { + decorators = new Array(numParameters); + } + decorators[i] = getDecorators(parameter); + } + } + } + return decorators; +} +function getAllDecoratorsOfClass(node, useLegacyDecorators) { + const decorators = getDecorators(node); + const parameters = useLegacyDecorators ? getDecoratorsOfParameters(getFirstConstructorWithBody(node)) : void 0; + if (!some(decorators) && !some(parameters)) { + return void 0; + } + return { + decorators, + parameters + }; +} +function getAllDecoratorsOfClassElement(member, parent2, useLegacyDecorators) { + switch (member.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + if (!useLegacyDecorators) { + return getAllDecoratorsOfMethod( + member, + /*useLegacyDecorators*/ + false + ); + } + return getAllDecoratorsOfAccessors( + member, + parent2, + /*useLegacyDecorators*/ + true + ); + case 175 /* MethodDeclaration */: + return getAllDecoratorsOfMethod(member, useLegacyDecorators); + case 173 /* PropertyDeclaration */: + return getAllDecoratorsOfProperty(member); + default: + return void 0; + } +} +function getAllDecoratorsOfAccessors(accessor, parent2, useLegacyDecorators) { + if (!accessor.body) { + return void 0; + } + const { firstAccessor, secondAccessor, getAccessor, setAccessor } = getAllAccessorDeclarations(parent2.members, accessor); + const firstAccessorWithDecorators = hasDecorators(firstAccessor) ? firstAccessor : secondAccessor && hasDecorators(secondAccessor) ? secondAccessor : void 0; + if (!firstAccessorWithDecorators || accessor !== firstAccessorWithDecorators) { + return void 0; + } + const decorators = getDecorators(firstAccessorWithDecorators); + const parameters = useLegacyDecorators ? getDecoratorsOfParameters(setAccessor) : void 0; + if (!some(decorators) && !some(parameters)) { + return void 0; + } + return { + decorators, + parameters, + getDecorators: getAccessor && getDecorators(getAccessor), + setDecorators: setAccessor && getDecorators(setAccessor) + }; +} +function getAllDecoratorsOfMethod(method, useLegacyDecorators) { + if (!method.body) { + return void 0; + } + const decorators = getDecorators(method); + const parameters = useLegacyDecorators ? getDecoratorsOfParameters(method) : void 0; + if (!some(decorators) && !some(parameters)) { + return void 0; + } + return { decorators, parameters }; +} +function getAllDecoratorsOfProperty(property) { + const decorators = getDecorators(property); + if (!some(decorators)) { + return void 0; + } + return { decorators }; +} +function walkUpLexicalEnvironments(env, cb) { + while (env) { + const result = cb(env); + if (result !== void 0) return result; + env = env.previous; + } +} +function newPrivateEnvironment(data) { + return { data }; +} +function getPrivateIdentifier(privateEnv, name) { + var _a, _b; + return isGeneratedPrivateIdentifier(name) ? (_a = privateEnv == null ? void 0 : privateEnv.generatedIdentifiers) == null ? void 0 : _a.get(getNodeForGeneratedName(name)) : (_b = privateEnv == null ? void 0 : privateEnv.identifiers) == null ? void 0 : _b.get(name.escapedText); +} +function setPrivateIdentifier(privateEnv, name, entry) { + if (isGeneratedPrivateIdentifier(name)) { + privateEnv.generatedIdentifiers ?? (privateEnv.generatedIdentifiers = /* @__PURE__ */ new Map()); + privateEnv.generatedIdentifiers.set(getNodeForGeneratedName(name), entry); + } else { + privateEnv.identifiers ?? (privateEnv.identifiers = /* @__PURE__ */ new Map()); + privateEnv.identifiers.set(name.escapedText, entry); + } +} +function accessPrivateIdentifier(env, name) { + return walkUpLexicalEnvironments(env, (env2) => getPrivateIdentifier(env2.privateEnv, name)); +} +function isSimpleParameter(node) { + return !node.initializer && isIdentifier(node.name); +} +function isSimpleParameterList(nodes) { + return every(nodes, isSimpleParameter); +} +function rewriteModuleSpecifier(node, compilerOptions) { + if (!node || !isStringLiteral(node) || !shouldRewriteModuleSpecifier(node.text, compilerOptions)) { + return node; + } + const updatedText = changeExtension(node.text, getOutputExtension(node.text, compilerOptions)); + return updatedText !== node.text ? setOriginalNode(setTextRange(factory.createStringLiteral(updatedText, node.singleQuote), node), node) : node; +} + +// src/compiler/transformers/destructuring.ts +var FlattenLevel = /* @__PURE__ */ ((FlattenLevel2) => { + FlattenLevel2[FlattenLevel2["All"] = 0] = "All"; + FlattenLevel2[FlattenLevel2["ObjectRest"] = 1] = "ObjectRest"; + return FlattenLevel2; +})(FlattenLevel || {}); +function flattenDestructuringAssignment(node, visitor, context, level, needsValue, createAssignmentCallback) { + let location = node; + let value; + if (isDestructuringAssignment(node)) { + value = node.right; + while (isEmptyArrayLiteral(node.left) || isEmptyObjectLiteral(node.left)) { + if (isDestructuringAssignment(value)) { + location = node = value; + value = node.right; + } else { + return Debug.checkDefined(visitNode(value, visitor, isExpression)); + } + } + } + let expressions; + const flattenContext = { + context, + level, + downlevelIteration: !!context.getCompilerOptions().downlevelIteration, + hoistTempVariables: true, + emitExpression, + emitBindingOrAssignment, + createArrayBindingOrAssignmentPattern: (elements) => makeArrayAssignmentPattern(context.factory, elements), + createObjectBindingOrAssignmentPattern: (elements) => makeObjectAssignmentPattern(context.factory, elements), + createArrayBindingOrAssignmentElement: makeAssignmentElement, + visitor + }; + if (value) { + value = visitNode(value, visitor, isExpression); + Debug.assert(value); + if (isIdentifier(value) && bindingOrAssignmentElementAssignsToName(node, value.escapedText) || bindingOrAssignmentElementContainsNonLiteralComputedName(node)) { + value = ensureIdentifier( + flattenContext, + value, + /*reuseIdentifierExpressions*/ + false, + location + ); + } else if (needsValue) { + value = ensureIdentifier( + flattenContext, + value, + /*reuseIdentifierExpressions*/ + true, + location + ); + } else if (nodeIsSynthesized(node)) { + location = value; + } + } + flattenBindingOrAssignmentElement( + flattenContext, + node, + value, + location, + /*skipInitializer*/ + isDestructuringAssignment(node) + ); + if (value && needsValue) { + if (!some(expressions)) { + return value; + } + expressions.push(value); + } + return context.factory.inlineExpressions(expressions) || context.factory.createOmittedExpression(); + function emitExpression(expression) { + expressions = append(expressions, expression); + } + function emitBindingOrAssignment(target, value2, location2, original) { + Debug.assertNode(target, createAssignmentCallback ? isIdentifier : isExpression); + const expression = createAssignmentCallback ? createAssignmentCallback(target, value2, location2) : setTextRange( + context.factory.createAssignment(Debug.checkDefined(visitNode(target, visitor, isExpression)), value2), + location2 + ); + expression.original = original; + emitExpression(expression); + } +} +function bindingOrAssignmentElementAssignsToName(element, escapedName) { + const target = getTargetOfBindingOrAssignmentElement(element); + if (isBindingOrAssignmentPattern(target)) { + return bindingOrAssignmentPatternAssignsToName(target, escapedName); + } else if (isIdentifier(target)) { + return target.escapedText === escapedName; + } + return false; +} +function bindingOrAssignmentPatternAssignsToName(pattern, escapedName) { + const elements = getElementsOfBindingOrAssignmentPattern(pattern); + for (const element of elements) { + if (bindingOrAssignmentElementAssignsToName(element, escapedName)) { + return true; + } + } + return false; +} +function bindingOrAssignmentElementContainsNonLiteralComputedName(element) { + const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(element); + if (propertyName && isComputedPropertyName(propertyName) && !isLiteralExpression(propertyName.expression)) { + return true; + } + const target = getTargetOfBindingOrAssignmentElement(element); + return !!target && isBindingOrAssignmentPattern(target) && bindingOrAssignmentPatternContainsNonLiteralComputedName(target); +} +function bindingOrAssignmentPatternContainsNonLiteralComputedName(pattern) { + return !!forEach(getElementsOfBindingOrAssignmentPattern(pattern), bindingOrAssignmentElementContainsNonLiteralComputedName); +} +function flattenDestructuringBinding(node, visitor, context, level, rval, hoistTempVariables = false, skipInitializer) { + let pendingExpressions; + const pendingDeclarations = []; + const declarations = []; + const flattenContext = { + context, + level, + downlevelIteration: !!context.getCompilerOptions().downlevelIteration, + hoistTempVariables, + emitExpression, + emitBindingOrAssignment, + createArrayBindingOrAssignmentPattern: (elements) => makeArrayBindingPattern(context.factory, elements), + createObjectBindingOrAssignmentPattern: (elements) => makeObjectBindingPattern(context.factory, elements), + createArrayBindingOrAssignmentElement: (name) => makeBindingElement(context.factory, name), + visitor + }; + if (isVariableDeclaration(node)) { + let initializer = getInitializerOfBindingOrAssignmentElement(node); + if (initializer && (isIdentifier(initializer) && bindingOrAssignmentElementAssignsToName(node, initializer.escapedText) || bindingOrAssignmentElementContainsNonLiteralComputedName(node))) { + initializer = ensureIdentifier( + flattenContext, + Debug.checkDefined(visitNode(initializer, flattenContext.visitor, isExpression)), + /*reuseIdentifierExpressions*/ + false, + initializer + ); + node = context.factory.updateVariableDeclaration( + node, + node.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ); + } + } + flattenBindingOrAssignmentElement(flattenContext, node, rval, node, skipInitializer); + if (pendingExpressions) { + const temp = context.factory.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + if (hoistTempVariables) { + const value = context.factory.inlineExpressions(pendingExpressions); + pendingExpressions = void 0; + emitBindingOrAssignment( + temp, + value, + /*location*/ + void 0, + /*original*/ + void 0 + ); + } else { + context.hoistVariableDeclaration(temp); + const pendingDeclaration = last(pendingDeclarations); + pendingDeclaration.pendingExpressions = append( + pendingDeclaration.pendingExpressions, + context.factory.createAssignment(temp, pendingDeclaration.value) + ); + addRange(pendingDeclaration.pendingExpressions, pendingExpressions); + pendingDeclaration.value = temp; + } + } + for (const { pendingExpressions: pendingExpressions2, name, value, location, original } of pendingDeclarations) { + const variable = context.factory.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + pendingExpressions2 ? context.factory.inlineExpressions(append(pendingExpressions2, value)) : value + ); + variable.original = original; + setTextRange(variable, location); + declarations.push(variable); + } + return declarations; + function emitExpression(value) { + pendingExpressions = append(pendingExpressions, value); + } + function emitBindingOrAssignment(target, value, location, original) { + Debug.assertNode(target, isBindingName); + if (pendingExpressions) { + value = context.factory.inlineExpressions(append(pendingExpressions, value)); + pendingExpressions = void 0; + } + pendingDeclarations.push({ pendingExpressions, name: target, value, location, original }); + } +} +function flattenBindingOrAssignmentElement(flattenContext, element, value, location, skipInitializer) { + const bindingTarget = getTargetOfBindingOrAssignmentElement(element); + if (!skipInitializer) { + const initializer = visitNode(getInitializerOfBindingOrAssignmentElement(element), flattenContext.visitor, isExpression); + if (initializer) { + if (value) { + value = createDefaultValueCheck(flattenContext, value, initializer, location); + if (!isSimpleInlineableExpression(initializer) && isBindingOrAssignmentPattern(bindingTarget)) { + value = ensureIdentifier( + flattenContext, + value, + /*reuseIdentifierExpressions*/ + true, + location + ); + } + } else { + value = initializer; + } + } else if (!value) { + value = flattenContext.context.factory.createVoidZero(); + } + } + if (isObjectBindingOrAssignmentPattern(bindingTarget)) { + flattenObjectBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location); + } else if (isArrayBindingOrAssignmentPattern(bindingTarget)) { + flattenArrayBindingOrAssignmentPattern(flattenContext, element, bindingTarget, value, location); + } else { + flattenContext.emitBindingOrAssignment( + bindingTarget, + value, + location, + /*original*/ + element + ); + } +} +function flattenObjectBindingOrAssignmentPattern(flattenContext, parent2, pattern, value, location) { + const elements = getElementsOfBindingOrAssignmentPattern(pattern); + const numElements = elements.length; + if (numElements !== 1) { + const reuseIdentifierExpressions = !isDeclarationBindingElement(parent2) || numElements !== 0; + value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location); + } + let bindingElements; + let computedTempVariables; + for (let i = 0; i < numElements; i++) { + const element = elements[i]; + if (!getRestIndicatorOfBindingOrAssignmentElement(element)) { + const propertyName = getPropertyNameOfBindingOrAssignmentElement(element); + if (flattenContext.level >= 1 /* ObjectRest */ && !(element.transformFlags & (32768 /* ContainsRestOrSpread */ | 65536 /* ContainsObjectRestOrSpread */)) && !(getTargetOfBindingOrAssignmentElement(element).transformFlags & (32768 /* ContainsRestOrSpread */ | 65536 /* ContainsObjectRestOrSpread */)) && !isComputedPropertyName(propertyName)) { + bindingElements = append(bindingElements, visitNode(element, flattenContext.visitor, isBindingOrAssignmentElement)); + } else { + if (bindingElements) { + flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); + bindingElements = void 0; + } + const rhsValue = createDestructuringPropertyAccess(flattenContext, value, propertyName); + if (isComputedPropertyName(propertyName)) { + computedTempVariables = append(computedTempVariables, rhsValue.argumentExpression); + } + flattenBindingOrAssignmentElement( + flattenContext, + element, + rhsValue, + /*location*/ + element + ); + } + } else if (i === numElements - 1) { + if (bindingElements) { + flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); + bindingElements = void 0; + } + const rhsValue = flattenContext.context.getEmitHelperFactory().createRestHelper(value, elements, computedTempVariables, pattern); + flattenBindingOrAssignmentElement(flattenContext, element, rhsValue, element); + } + } + if (bindingElements) { + flattenContext.emitBindingOrAssignment(flattenContext.createObjectBindingOrAssignmentPattern(bindingElements), value, location, pattern); + } +} +function flattenArrayBindingOrAssignmentPattern(flattenContext, parent2, pattern, value, location) { + const elements = getElementsOfBindingOrAssignmentPattern(pattern); + const numElements = elements.length; + if (flattenContext.level < 1 /* ObjectRest */ && flattenContext.downlevelIteration) { + value = ensureIdentifier( + flattenContext, + setTextRange( + flattenContext.context.getEmitHelperFactory().createReadHelper( + value, + numElements > 0 && getRestIndicatorOfBindingOrAssignmentElement(elements[numElements - 1]) ? void 0 : numElements + ), + location + ), + /*reuseIdentifierExpressions*/ + false, + location + ); + } else if (numElements !== 1 && (flattenContext.level < 1 /* ObjectRest */ || numElements === 0) || every(elements, isOmittedExpression)) { + const reuseIdentifierExpressions = !isDeclarationBindingElement(parent2) || numElements !== 0; + value = ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location); + } + let bindingElements; + let restContainingElements; + for (let i = 0; i < numElements; i++) { + const element = elements[i]; + if (flattenContext.level >= 1 /* ObjectRest */) { + if (element.transformFlags & 65536 /* ContainsObjectRestOrSpread */ || flattenContext.hasTransformedPriorElement && !isSimpleBindingOrAssignmentElement(element)) { + flattenContext.hasTransformedPriorElement = true; + const temp = flattenContext.context.factory.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + if (flattenContext.hoistTempVariables) { + flattenContext.context.hoistVariableDeclaration(temp); + } + restContainingElements = append(restContainingElements, [temp, element]); + bindingElements = append(bindingElements, flattenContext.createArrayBindingOrAssignmentElement(temp)); + } else { + bindingElements = append(bindingElements, element); + } + } else if (isOmittedExpression(element)) { + continue; + } else if (!getRestIndicatorOfBindingOrAssignmentElement(element)) { + const rhsValue = flattenContext.context.factory.createElementAccessExpression(value, i); + flattenBindingOrAssignmentElement( + flattenContext, + element, + rhsValue, + /*location*/ + element + ); + } else if (i === numElements - 1) { + const rhsValue = flattenContext.context.factory.createArraySliceCall(value, i); + flattenBindingOrAssignmentElement( + flattenContext, + element, + rhsValue, + /*location*/ + element + ); + } + } + if (bindingElements) { + flattenContext.emitBindingOrAssignment(flattenContext.createArrayBindingOrAssignmentPattern(bindingElements), value, location, pattern); + } + if (restContainingElements) { + for (const [id, element] of restContainingElements) { + flattenBindingOrAssignmentElement(flattenContext, element, id, element); + } + } +} +function isSimpleBindingOrAssignmentElement(element) { + const target = getTargetOfBindingOrAssignmentElement(element); + if (!target || isOmittedExpression(target)) return true; + const propertyName = tryGetPropertyNameOfBindingOrAssignmentElement(element); + if (propertyName && !isPropertyNameLiteral(propertyName)) return false; + const initializer = getInitializerOfBindingOrAssignmentElement(element); + if (initializer && !isSimpleInlineableExpression(initializer)) return false; + if (isBindingOrAssignmentPattern(target)) return every(getElementsOfBindingOrAssignmentPattern(target), isSimpleBindingOrAssignmentElement); + return isIdentifier(target); +} +function createDefaultValueCheck(flattenContext, value, defaultValue, location) { + value = ensureIdentifier( + flattenContext, + value, + /*reuseIdentifierExpressions*/ + true, + location + ); + return flattenContext.context.factory.createConditionalExpression( + flattenContext.context.factory.createTypeCheck(value, "undefined"), + /*questionToken*/ + void 0, + defaultValue, + /*colonToken*/ + void 0, + value + ); +} +function createDestructuringPropertyAccess(flattenContext, value, propertyName) { + const { factory: factory2 } = flattenContext.context; + if (isComputedPropertyName(propertyName)) { + const argumentExpression = ensureIdentifier( + flattenContext, + Debug.checkDefined(visitNode(propertyName.expression, flattenContext.visitor, isExpression)), + /*reuseIdentifierExpressions*/ + false, + /*location*/ + propertyName + ); + return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression); + } else if (isStringOrNumericLiteralLike(propertyName) || isBigIntLiteral(propertyName)) { + const argumentExpression = factory2.cloneNode(propertyName); + return flattenContext.context.factory.createElementAccessExpression(value, argumentExpression); + } else { + const name = flattenContext.context.factory.createIdentifier(idText(propertyName)); + return flattenContext.context.factory.createPropertyAccessExpression(value, name); + } +} +function ensureIdentifier(flattenContext, value, reuseIdentifierExpressions, location) { + if (isIdentifier(value) && reuseIdentifierExpressions) { + return value; + } else { + const temp = flattenContext.context.factory.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + if (flattenContext.hoistTempVariables) { + flattenContext.context.hoistVariableDeclaration(temp); + flattenContext.emitExpression(setTextRange(flattenContext.context.factory.createAssignment(temp, value), location)); + } else { + flattenContext.emitBindingOrAssignment( + temp, + value, + location, + /*original*/ + void 0 + ); + } + return temp; + } +} +function makeArrayBindingPattern(factory2, elements) { + Debug.assertEachNode(elements, isArrayBindingElement); + return factory2.createArrayBindingPattern(elements); +} +function makeArrayAssignmentPattern(factory2, elements) { + Debug.assertEachNode(elements, isArrayBindingOrAssignmentElement); + return factory2.createArrayLiteralExpression(map(elements, factory2.converters.convertToArrayAssignmentElement)); +} +function makeObjectBindingPattern(factory2, elements) { + Debug.assertEachNode(elements, isBindingElement); + return factory2.createObjectBindingPattern(elements); +} +function makeObjectAssignmentPattern(factory2, elements) { + Debug.assertEachNode(elements, isObjectBindingOrAssignmentElement); + return factory2.createObjectLiteralExpression(map(elements, factory2.converters.convertToObjectAssignmentElement)); +} +function makeBindingElement(factory2, name) { + return factory2.createBindingElement( + /*dotDotDotToken*/ + void 0, + /*propertyName*/ + void 0, + name + ); +} +function makeAssignmentElement(name) { + return name; +} + +// src/compiler/transformers/classThis.ts +function createClassThisAssignmentBlock(factory2, classThis, thisExpression = factory2.createThis()) { + const expression = factory2.createAssignment(classThis, thisExpression); + const statement = factory2.createExpressionStatement(expression); + const body = factory2.createBlock( + [statement], + /*multiLine*/ + false + ); + const block = factory2.createClassStaticBlockDeclaration(body); + getOrCreateEmitNode(block).classThis = classThis; + return block; +} +function isClassThisAssignmentBlock(node) { + var _a; + if (!isClassStaticBlockDeclaration(node) || node.body.statements.length !== 1) { + return false; + } + const statement = node.body.statements[0]; + return isExpressionStatement(statement) && isAssignmentExpression( + statement.expression, + /*excludeCompoundAssignment*/ + true + ) && isIdentifier(statement.expression.left) && ((_a = node.emitNode) == null ? void 0 : _a.classThis) === statement.expression.left && statement.expression.right.kind === 110 /* ThisKeyword */; +} +function classHasClassThisAssignment(node) { + var _a; + return !!((_a = node.emitNode) == null ? void 0 : _a.classThis) && some(node.members, isClassThisAssignmentBlock); +} +function injectClassThisAssignmentIfMissing(factory2, node, classThis, thisExpression) { + if (classHasClassThisAssignment(node)) { + return node; + } + const staticBlock = createClassThisAssignmentBlock(factory2, classThis, thisExpression); + if (node.name) { + setSourceMapRange(staticBlock.body.statements[0], node.name); + } + const members = factory2.createNodeArray([staticBlock, ...node.members]); + setTextRange(members, node.members); + const updatedNode = isClassDeclaration(node) ? factory2.updateClassDeclaration( + node, + node.modifiers, + node.name, + node.typeParameters, + node.heritageClauses, + members + ) : factory2.updateClassExpression( + node, + node.modifiers, + node.name, + node.typeParameters, + node.heritageClauses, + members + ); + getOrCreateEmitNode(updatedNode).classThis = classThis; + return updatedNode; +} + +// src/compiler/transformers/namedEvaluation.ts +function getAssignedNameOfIdentifier(factory2, name, expression) { + const original = getOriginalNode(skipOuterExpressions(expression)); + if ((isClassDeclaration(original) || isFunctionDeclaration(original)) && !original.name && hasSyntacticModifier(original, 2048 /* Default */)) { + return factory2.createStringLiteral("default"); + } + return factory2.createStringLiteralFromNode(name); +} +function getAssignedNameOfPropertyName(context, name, assignedNameText) { + const { factory: factory2 } = context; + if (assignedNameText !== void 0) { + const assignedName2 = factory2.createStringLiteral(assignedNameText); + return { assignedName: assignedName2, name }; + } + if (isPropertyNameLiteral(name) || isPrivateIdentifier(name)) { + const assignedName2 = factory2.createStringLiteralFromNode(name); + return { assignedName: assignedName2, name }; + } + if (isPropertyNameLiteral(name.expression) && !isIdentifier(name.expression)) { + const assignedName2 = factory2.createStringLiteralFromNode(name.expression); + return { assignedName: assignedName2, name }; + } + const assignedName = factory2.getGeneratedNameForNode(name); + context.hoistVariableDeclaration(assignedName); + const key = context.getEmitHelperFactory().createPropKeyHelper(name.expression); + const assignment = factory2.createAssignment(assignedName, key); + const updatedName = factory2.updateComputedPropertyName(name, assignment); + return { assignedName, name: updatedName }; +} +function createClassNamedEvaluationHelperBlock(context, assignedName, thisExpression = context.factory.createThis()) { + const { factory: factory2 } = context; + const expression = context.getEmitHelperFactory().createSetFunctionNameHelper(thisExpression, assignedName); + const statement = factory2.createExpressionStatement(expression); + const body = factory2.createBlock( + [statement], + /*multiLine*/ + false + ); + const block = factory2.createClassStaticBlockDeclaration(body); + getOrCreateEmitNode(block).assignedName = assignedName; + return block; +} +function isClassNamedEvaluationHelperBlock(node) { + var _a; + if (!isClassStaticBlockDeclaration(node) || node.body.statements.length !== 1) { + return false; + } + const statement = node.body.statements[0]; + return isExpressionStatement(statement) && isCallToHelper(statement.expression, "___setFunctionName") && statement.expression.arguments.length >= 2 && statement.expression.arguments[1] === ((_a = node.emitNode) == null ? void 0 : _a.assignedName); +} +function classHasExplicitlyAssignedName(node) { + var _a; + return !!((_a = node.emitNode) == null ? void 0 : _a.assignedName) && some(node.members, isClassNamedEvaluationHelperBlock); +} +function classHasDeclaredOrExplicitlyAssignedName(node) { + return !!node.name || classHasExplicitlyAssignedName(node); +} +function injectClassNamedEvaluationHelperBlockIfMissing(context, node, assignedName, thisExpression) { + if (classHasExplicitlyAssignedName(node)) { + return node; + } + const { factory: factory2 } = context; + const namedEvaluationBlock = createClassNamedEvaluationHelperBlock(context, assignedName, thisExpression); + if (node.name) { + setSourceMapRange(namedEvaluationBlock.body.statements[0], node.name); + } + const insertionIndex = findIndex(node.members, isClassThisAssignmentBlock) + 1; + const leading = node.members.slice(0, insertionIndex); + const trailing = node.members.slice(insertionIndex); + const members = factory2.createNodeArray([...leading, namedEvaluationBlock, ...trailing]); + setTextRange(members, node.members); + node = isClassDeclaration(node) ? factory2.updateClassDeclaration( + node, + node.modifiers, + node.name, + node.typeParameters, + node.heritageClauses, + members + ) : factory2.updateClassExpression( + node, + node.modifiers, + node.name, + node.typeParameters, + node.heritageClauses, + members + ); + getOrCreateEmitNode(node).assignedName = assignedName; + return node; +} +function finishTransformNamedEvaluation(context, expression, assignedName, ignoreEmptyStringLiteral) { + if (ignoreEmptyStringLiteral && isStringLiteral(assignedName) && isEmptyStringLiteral(assignedName)) { + return expression; + } + const { factory: factory2 } = context; + const innerExpression = skipOuterExpressions(expression); + const updatedExpression = isClassExpression(innerExpression) ? cast(injectClassNamedEvaluationHelperBlockIfMissing(context, innerExpression, assignedName), isClassExpression) : context.getEmitHelperFactory().createSetFunctionNameHelper(innerExpression, assignedName); + return factory2.restoreOuterExpressions(expression, updatedExpression); +} +function transformNamedEvaluationOfPropertyAssignment(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const { assignedName, name } = getAssignedNameOfPropertyName(context, node.name, assignedNameText); + const initializer = finishTransformNamedEvaluation(context, node.initializer, assignedName, ignoreEmptyStringLiteral); + return factory2.updatePropertyAssignment( + node, + name, + initializer + ); +} +function transformNamedEvaluationOfShorthandAssignmentProperty(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const assignedName = assignedNameText !== void 0 ? factory2.createStringLiteral(assignedNameText) : getAssignedNameOfIdentifier(factory2, node.name, node.objectAssignmentInitializer); + const objectAssignmentInitializer = finishTransformNamedEvaluation(context, node.objectAssignmentInitializer, assignedName, ignoreEmptyStringLiteral); + return factory2.updateShorthandPropertyAssignment( + node, + node.name, + objectAssignmentInitializer + ); +} +function transformNamedEvaluationOfVariableDeclaration(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const assignedName = assignedNameText !== void 0 ? factory2.createStringLiteral(assignedNameText) : getAssignedNameOfIdentifier(factory2, node.name, node.initializer); + const initializer = finishTransformNamedEvaluation(context, node.initializer, assignedName, ignoreEmptyStringLiteral); + return factory2.updateVariableDeclaration( + node, + node.name, + node.exclamationToken, + node.type, + initializer + ); +} +function transformNamedEvaluationOfParameterDeclaration(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const assignedName = assignedNameText !== void 0 ? factory2.createStringLiteral(assignedNameText) : getAssignedNameOfIdentifier(factory2, node.name, node.initializer); + const initializer = finishTransformNamedEvaluation(context, node.initializer, assignedName, ignoreEmptyStringLiteral); + return factory2.updateParameterDeclaration( + node, + node.modifiers, + node.dotDotDotToken, + node.name, + node.questionToken, + node.type, + initializer + ); +} +function transformNamedEvaluationOfBindingElement(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const assignedName = assignedNameText !== void 0 ? factory2.createStringLiteral(assignedNameText) : getAssignedNameOfIdentifier(factory2, node.name, node.initializer); + const initializer = finishTransformNamedEvaluation(context, node.initializer, assignedName, ignoreEmptyStringLiteral); + return factory2.updateBindingElement( + node, + node.dotDotDotToken, + node.propertyName, + node.name, + initializer + ); +} +function transformNamedEvaluationOfPropertyDeclaration(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const { assignedName, name } = getAssignedNameOfPropertyName(context, node.name, assignedNameText); + const initializer = finishTransformNamedEvaluation(context, node.initializer, assignedName, ignoreEmptyStringLiteral); + return factory2.updatePropertyDeclaration( + node, + node.modifiers, + name, + node.questionToken ?? node.exclamationToken, + node.type, + initializer + ); +} +function transformNamedEvaluationOfAssignmentExpression(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const assignedName = assignedNameText !== void 0 ? factory2.createStringLiteral(assignedNameText) : getAssignedNameOfIdentifier(factory2, node.left, node.right); + const right = finishTransformNamedEvaluation(context, node.right, assignedName, ignoreEmptyStringLiteral); + return factory2.updateBinaryExpression( + node, + node.left, + node.operatorToken, + right + ); +} +function transformNamedEvaluationOfExportAssignment(context, node, ignoreEmptyStringLiteral, assignedNameText) { + const { factory: factory2 } = context; + const assignedName = assignedNameText !== void 0 ? factory2.createStringLiteral(assignedNameText) : factory2.createStringLiteral(node.isExportEquals ? "" : "default"); + const expression = finishTransformNamedEvaluation(context, node.expression, assignedName, ignoreEmptyStringLiteral); + return factory2.updateExportAssignment( + node, + node.modifiers, + expression + ); +} +function transformNamedEvaluation(context, node, ignoreEmptyStringLiteral, assignedName) { + switch (node.kind) { + case 304 /* PropertyAssignment */: + return transformNamedEvaluationOfPropertyAssignment(context, node, ignoreEmptyStringLiteral, assignedName); + case 305 /* ShorthandPropertyAssignment */: + return transformNamedEvaluationOfShorthandAssignmentProperty(context, node, ignoreEmptyStringLiteral, assignedName); + case 261 /* VariableDeclaration */: + return transformNamedEvaluationOfVariableDeclaration(context, node, ignoreEmptyStringLiteral, assignedName); + case 170 /* Parameter */: + return transformNamedEvaluationOfParameterDeclaration(context, node, ignoreEmptyStringLiteral, assignedName); + case 209 /* BindingElement */: + return transformNamedEvaluationOfBindingElement(context, node, ignoreEmptyStringLiteral, assignedName); + case 173 /* PropertyDeclaration */: + return transformNamedEvaluationOfPropertyDeclaration(context, node, ignoreEmptyStringLiteral, assignedName); + case 227 /* BinaryExpression */: + return transformNamedEvaluationOfAssignmentExpression(context, node, ignoreEmptyStringLiteral, assignedName); + case 278 /* ExportAssignment */: + return transformNamedEvaluationOfExportAssignment(context, node, ignoreEmptyStringLiteral, assignedName); + } +} + +// src/compiler/transformers/taggedTemplate.ts +var ProcessLevel = /* @__PURE__ */ ((ProcessLevel2) => { + ProcessLevel2[ProcessLevel2["LiftRestriction"] = 0] = "LiftRestriction"; + ProcessLevel2[ProcessLevel2["All"] = 1] = "All"; + return ProcessLevel2; +})(ProcessLevel || {}); +function processTaggedTemplateExpression(context, node, visitor, currentSourceFile, recordTaggedTemplateString, level) { + const tag = visitNode(node.tag, visitor, isExpression); + Debug.assert(tag); + const templateArguments = [void 0]; + const cookedStrings = []; + const rawStrings = []; + const template = node.template; + if (level === 0 /* LiftRestriction */ && !hasInvalidEscape(template)) { + return visitEachChild(node, visitor, context); + } + const { factory: factory2 } = context; + if (isNoSubstitutionTemplateLiteral(template)) { + cookedStrings.push(createTemplateCooked(factory2, template)); + rawStrings.push(getRawLiteral(factory2, template, currentSourceFile)); + } else { + cookedStrings.push(createTemplateCooked(factory2, template.head)); + rawStrings.push(getRawLiteral(factory2, template.head, currentSourceFile)); + for (const templateSpan of template.templateSpans) { + cookedStrings.push(createTemplateCooked(factory2, templateSpan.literal)); + rawStrings.push(getRawLiteral(factory2, templateSpan.literal, currentSourceFile)); + templateArguments.push(Debug.checkDefined(visitNode(templateSpan.expression, visitor, isExpression))); + } + } + const helperCall = context.getEmitHelperFactory().createTemplateObjectHelper( + factory2.createArrayLiteralExpression(cookedStrings), + factory2.createArrayLiteralExpression(rawStrings) + ); + if (isExternalModule(currentSourceFile)) { + const tempVar = factory2.createUniqueName("templateObject"); + recordTaggedTemplateString(tempVar); + templateArguments[0] = factory2.createLogicalOr( + tempVar, + factory2.createAssignment( + tempVar, + helperCall + ) + ); + } else { + templateArguments[0] = helperCall; + } + return factory2.createCallExpression( + tag, + /*typeArguments*/ + void 0, + templateArguments + ); +} +function createTemplateCooked(factory2, template) { + return template.templateFlags & 26656 /* IsInvalid */ ? factory2.createVoidZero() : factory2.createStringLiteral(template.text); +} +function getRawLiteral(factory2, node, currentSourceFile) { + let text = node.rawText; + if (text === void 0) { + Debug.assertIsDefined(currentSourceFile, "Template literal node is missing 'rawText' and does not have a source file. Possibly bad transform."); + text = getSourceTextOfNodeFromSourceFile(currentSourceFile, node); + const isLast = node.kind === 15 /* NoSubstitutionTemplateLiteral */ || node.kind === 18 /* TemplateTail */; + text = text.substring(1, text.length - (isLast ? 1 : 2)); + } + text = text.replace(/\r\n?/g, "\n"); + return setTextRange(factory2.createStringLiteral(text), node); +} + +// src/compiler/transformers/ts.ts +var USE_NEW_TYPE_METADATA_FORMAT = false; +function transformTypeScript(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + startLexicalEnvironment, + resumeLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const moduleKind = getEmitModuleKind(compilerOptions); + const legacyDecorators = !!compilerOptions.experimentalDecorators; + const typeSerializer = compilerOptions.emitDecoratorMetadata ? createRuntimeTypeSerializer(context) : void 0; + const previousOnEmitNode = context.onEmitNode; + const previousOnSubstituteNode = context.onSubstituteNode; + context.onEmitNode = onEmitNode; + context.onSubstituteNode = onSubstituteNode; + context.enableSubstitution(212 /* PropertyAccessExpression */); + context.enableSubstitution(213 /* ElementAccessExpression */); + let currentSourceFile; + let currentNamespace; + let currentNamespaceContainerName; + let currentLexicalScope; + let currentScopeFirstDeclarationsOfName; + let enabledSubstitutions = 0 /* None */; + let applicableSubstitutions; + return transformSourceFileOrBundle; + function transformSourceFileOrBundle(node) { + if (node.kind === 309 /* Bundle */) { + return transformBundle(node); + } + return transformSourceFile(node); + } + function transformBundle(node) { + return factory2.createBundle( + node.sourceFiles.map(transformSourceFile) + ); + } + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + currentSourceFile = node; + const visited = saveStateAndInvoke(node, visitSourceFile); + addEmitHelpers(visited, context.readEmitHelpers()); + currentSourceFile = void 0; + return visited; + } + function saveStateAndInvoke(node, f) { + const savedCurrentScope = currentLexicalScope; + const savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; + onBeforeVisitNode(node); + const visited = f(node); + if (currentLexicalScope !== savedCurrentScope) { + currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; + } + currentLexicalScope = savedCurrentScope; + return visited; + } + function onBeforeVisitNode(node) { + switch (node.kind) { + case 308 /* SourceFile */: + case 270 /* CaseBlock */: + case 269 /* ModuleBlock */: + case 242 /* Block */: + currentLexicalScope = node; + currentScopeFirstDeclarationsOfName = void 0; + break; + case 264 /* ClassDeclaration */: + case 263 /* FunctionDeclaration */: + if (hasSyntacticModifier(node, 128 /* Ambient */)) { + break; + } + if (node.name) { + recordEmittedDeclarationInScope(node); + } else { + Debug.assert(node.kind === 264 /* ClassDeclaration */ || hasSyntacticModifier(node, 2048 /* Default */)); + } + break; + } + } + function visitor(node) { + return saveStateAndInvoke(node, visitorWorker); + } + function visitorWorker(node) { + if (node.transformFlags & 1 /* ContainsTypeScript */) { + return visitTypeScript(node); + } + return node; + } + function sourceElementVisitor(node) { + return saveStateAndInvoke(node, sourceElementVisitorWorker); + } + function sourceElementVisitorWorker(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 278 /* ExportAssignment */: + case 279 /* ExportDeclaration */: + return visitElidableStatement(node); + default: + return visitorWorker(node); + } + } + function isElisionBlocked(node) { + const parsed = getParseTreeNode(node); + if (parsed === node || isExportAssignment(node)) { + return false; + } + if (!parsed || parsed.kind !== node.kind) { + return true; + } + switch (node.kind) { + case 273 /* ImportDeclaration */: + Debug.assertNode(parsed, isImportDeclaration); + if (node.importClause !== parsed.importClause) { + return true; + } + if (node.attributes !== parsed.attributes) { + return true; + } + break; + case 272 /* ImportEqualsDeclaration */: + Debug.assertNode(parsed, isImportEqualsDeclaration); + if (node.name !== parsed.name) { + return true; + } + if (node.isTypeOnly !== parsed.isTypeOnly) { + return true; + } + if (node.moduleReference !== parsed.moduleReference && (isEntityName(node.moduleReference) || isEntityName(parsed.moduleReference))) { + return true; + } + break; + case 279 /* ExportDeclaration */: + Debug.assertNode(parsed, isExportDeclaration); + if (node.exportClause !== parsed.exportClause) { + return true; + } + if (node.attributes !== parsed.attributes) { + return true; + } + break; + } + return false; + } + function visitElidableStatement(node) { + if (isElisionBlocked(node)) { + if (node.transformFlags & 1 /* ContainsTypeScript */) { + return visitEachChild(node, visitor, context); + } + return node; + } + switch (node.kind) { + case 273 /* ImportDeclaration */: + return visitImportDeclaration(node); + case 272 /* ImportEqualsDeclaration */: + return visitImportEqualsDeclaration(node); + case 278 /* ExportAssignment */: + return visitExportAssignment(node); + case 279 /* ExportDeclaration */: + return visitExportDeclaration(node); + default: + Debug.fail("Unhandled ellided statement"); + } + } + function namespaceElementVisitor(node) { + return saveStateAndInvoke(node, namespaceElementVisitorWorker); + } + function namespaceElementVisitorWorker(node) { + if (node.kind === 279 /* ExportDeclaration */ || node.kind === 273 /* ImportDeclaration */ || node.kind === 274 /* ImportClause */ || node.kind === 272 /* ImportEqualsDeclaration */ && node.moduleReference.kind === 284 /* ExternalModuleReference */) { + return void 0; + } else if (node.transformFlags & 1 /* ContainsTypeScript */ || hasSyntacticModifier(node, 32 /* Export */)) { + return visitTypeScript(node); + } + return node; + } + function getClassElementVisitor(parent2) { + return (node) => saveStateAndInvoke(node, (n) => classElementVisitorWorker(n, parent2)); + } + function classElementVisitorWorker(node, parent2) { + switch (node.kind) { + case 177 /* Constructor */: + return visitConstructor(node); + case 173 /* PropertyDeclaration */: + return visitPropertyDeclaration(node, parent2); + case 178 /* GetAccessor */: + return visitGetAccessor(node, parent2); + case 179 /* SetAccessor */: + return visitSetAccessor(node, parent2); + case 175 /* MethodDeclaration */: + return visitMethodDeclaration(node, parent2); + case 176 /* ClassStaticBlockDeclaration */: + return visitEachChild(node, visitor, context); + case 241 /* SemicolonClassElement */: + return node; + case 182 /* IndexSignature */: + return; + default: + return Debug.failBadSyntaxKind(node); + } + } + function getObjectLiteralElementVisitor(parent2) { + return (node) => saveStateAndInvoke(node, (n) => objectLiteralElementVisitorWorker(n, parent2)); + } + function objectLiteralElementVisitorWorker(node, parent2) { + switch (node.kind) { + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 306 /* SpreadAssignment */: + return visitor(node); + case 178 /* GetAccessor */: + return visitGetAccessor(node, parent2); + case 179 /* SetAccessor */: + return visitSetAccessor(node, parent2); + case 175 /* MethodDeclaration */: + return visitMethodDeclaration(node, parent2); + default: + return Debug.failBadSyntaxKind(node); + } + } + function decoratorElidingVisitor(node) { + return isDecorator(node) ? void 0 : visitor(node); + } + function modifierElidingVisitor(node) { + return isModifier(node) ? void 0 : visitor(node); + } + function modifierVisitor(node) { + if (isDecorator(node)) return void 0; + if (modifierToFlag(node.kind) & 28895 /* TypeScriptModifier */) { + return void 0; + } else if (currentNamespace && node.kind === 95 /* ExportKeyword */) { + return void 0; + } + return node; + } + function visitTypeScript(node) { + if (isStatement(node) && hasSyntacticModifier(node, 128 /* Ambient */)) { + return factory2.createNotEmittedStatement(node); + } + switch (node.kind) { + case 95 /* ExportKeyword */: + case 90 /* DefaultKeyword */: + return currentNamespace ? void 0 : node; + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 128 /* AbstractKeyword */: + case 164 /* OverrideKeyword */: + case 87 /* ConstKeyword */: + case 138 /* DeclareKeyword */: + case 148 /* ReadonlyKeyword */: + case 103 /* InKeyword */: + case 147 /* OutKeyword */: + // TypeScript accessibility and readonly modifiers are elided + // falls through + case 189 /* ArrayType */: + case 190 /* TupleType */: + case 191 /* OptionalType */: + case 192 /* RestType */: + case 188 /* TypeLiteral */: + case 183 /* TypePredicate */: + case 169 /* TypeParameter */: + case 133 /* AnyKeyword */: + case 159 /* UnknownKeyword */: + case 136 /* BooleanKeyword */: + case 154 /* StringKeyword */: + case 150 /* NumberKeyword */: + case 146 /* NeverKeyword */: + case 116 /* VoidKeyword */: + case 155 /* SymbolKeyword */: + case 186 /* ConstructorType */: + case 185 /* FunctionType */: + case 187 /* TypeQuery */: + case 184 /* TypeReference */: + case 193 /* UnionType */: + case 194 /* IntersectionType */: + case 195 /* ConditionalType */: + case 197 /* ParenthesizedType */: + case 198 /* ThisType */: + case 199 /* TypeOperator */: + case 200 /* IndexedAccessType */: + case 201 /* MappedType */: + case 202 /* LiteralType */: + // TypeScript type nodes are elided. + // falls through + case 182 /* IndexSignature */: + return void 0; + case 266 /* TypeAliasDeclaration */: + return factory2.createNotEmittedStatement(node); + case 271 /* NamespaceExportDeclaration */: + return void 0; + case 265 /* InterfaceDeclaration */: + return factory2.createNotEmittedStatement(node); + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 232 /* ClassExpression */: + return visitClassExpression(node); + case 299 /* HeritageClause */: + return visitHeritageClause(node); + case 234 /* ExpressionWithTypeArguments */: + return visitExpressionWithTypeArguments(node); + case 211 /* ObjectLiteralExpression */: + return visitObjectLiteralExpression(node); + case 177 /* Constructor */: + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 176 /* ClassStaticBlockDeclaration */: + return Debug.fail("Class and object literal elements must be visited with their respective visitors"); + case 263 /* FunctionDeclaration */: + return visitFunctionDeclaration(node); + case 219 /* FunctionExpression */: + return visitFunctionExpression(node); + case 220 /* ArrowFunction */: + return visitArrowFunction(node); + case 170 /* Parameter */: + return visitParameter(node); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression(node); + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + return visitAssertionExpression(node); + case 239 /* SatisfiesExpression */: + return visitSatisfiesExpression(node); + case 214 /* CallExpression */: + return visitCallExpression(node); + case 215 /* NewExpression */: + return visitNewExpression(node); + case 216 /* TaggedTemplateExpression */: + return visitTaggedTemplateExpression(node); + case 236 /* NonNullExpression */: + return visitNonNullExpression(node); + case 267 /* EnumDeclaration */: + return visitEnumDeclaration(node); + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 261 /* VariableDeclaration */: + return visitVariableDeclaration(node); + case 268 /* ModuleDeclaration */: + return visitModuleDeclaration(node); + case 272 /* ImportEqualsDeclaration */: + return visitImportEqualsDeclaration(node); + case 286 /* JsxSelfClosingElement */: + return visitJsxSelfClosingElement(node); + case 287 /* JsxOpeningElement */: + return visitJsxJsxOpeningElement(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitSourceFile(node) { + const alwaysStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") && !(isExternalModule(node) && moduleKind >= 5 /* ES2015 */) && !isJsonSourceFile(node); + return factory2.updateSourceFile( + node, + visitLexicalEnvironment( + node.statements, + sourceElementVisitor, + context, + /*start*/ + 0, + alwaysStrict + ) + ); + } + function visitObjectLiteralExpression(node) { + return factory2.updateObjectLiteralExpression( + node, + visitNodes2(node.properties, getObjectLiteralElementVisitor(node), isObjectLiteralElementLike) + ); + } + function getClassFacts(node) { + let facts = 0 /* None */; + if (some(getProperties( + node, + /*requireInitializer*/ + true, + /*isStatic*/ + true + ))) facts |= 1 /* HasStaticInitializedProperties */; + const extendsClauseElement = getEffectiveBaseTypeNode(node); + if (extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== 106 /* NullKeyword */) facts |= 64 /* IsDerivedClass */; + if (classOrConstructorParameterIsDecorated(legacyDecorators, node)) facts |= 2 /* HasClassOrConstructorParameterDecorators */; + if (childIsDecorated(legacyDecorators, node)) facts |= 4 /* HasMemberDecorators */; + if (isExportOfNamespace(node)) facts |= 8 /* IsExportOfNamespace */; + else if (isDefaultExternalModuleExport(node)) facts |= 32 /* IsDefaultExternalExport */; + else if (isNamedExternalModuleExport(node)) facts |= 16 /* IsNamedExternalExport */; + return facts; + } + function hasTypeScriptClassSyntax(node) { + return !!(node.transformFlags & 8192 /* ContainsTypeScriptClassSyntax */); + } + function isClassLikeDeclarationWithTypeScriptSyntax(node) { + return hasDecorators(node) || some(node.typeParameters) || some(node.heritageClauses, hasTypeScriptClassSyntax) || some(node.members, hasTypeScriptClassSyntax); + } + function visitClassDeclaration(node) { + const facts = getClassFacts(node); + const promoteToIIFE = languageVersion <= 1 /* ES5 */ && !!(facts & 7 /* MayNeedImmediatelyInvokedFunctionExpression */); + if (!isClassLikeDeclarationWithTypeScriptSyntax(node) && !classOrConstructorParameterIsDecorated(legacyDecorators, node) && !isExportOfNamespace(node)) { + return factory2.updateClassDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + node.name, + /*typeParameters*/ + void 0, + visitNodes2(node.heritageClauses, visitor, isHeritageClause), + visitNodes2(node.members, getClassElementVisitor(node), isClassElement) + ); + } + if (promoteToIIFE) { + context.startLexicalEnvironment(); + } + const moveModifiers = promoteToIIFE || facts & 8 /* IsExportOfNamespace */; + let modifiers = moveModifiers ? visitNodes2(node.modifiers, modifierElidingVisitor, isModifierLike) : visitNodes2(node.modifiers, visitor, isModifierLike); + if (facts & 2 /* HasClassOrConstructorParameterDecorators */) { + modifiers = injectClassTypeMetadata(modifiers, node); + } + const needsName = moveModifiers && !node.name || facts & 4 /* HasMemberDecorators */ || facts & 1 /* HasStaticInitializedProperties */; + const name = needsName ? node.name ?? factory2.getGeneratedNameForNode(node) : node.name; + const classDeclaration = factory2.updateClassDeclaration( + node, + modifiers, + name, + /*typeParameters*/ + void 0, + visitNodes2(node.heritageClauses, visitor, isHeritageClause), + transformClassMembers(node) + ); + let emitFlags = getEmitFlags(node); + if (facts & 1 /* HasStaticInitializedProperties */) { + emitFlags |= 64 /* NoTrailingSourceMap */; + } + setEmitFlags(classDeclaration, emitFlags); + let statement; + if (promoteToIIFE) { + const statements = [classDeclaration]; + const closingBraceLocation = createTokenRange(skipTrivia(currentSourceFile.text, node.members.end), 20 /* CloseBraceToken */); + const localName = factory2.getInternalName(node); + const outer = factory2.createPartiallyEmittedExpression(localName); + setTextRangeEnd(outer, closingBraceLocation.end); + setEmitFlags(outer, 3072 /* NoComments */); + const returnStatement = factory2.createReturnStatement(outer); + setTextRangePos(returnStatement, closingBraceLocation.pos); + setEmitFlags(returnStatement, 3072 /* NoComments */ | 768 /* NoTokenSourceMaps */); + statements.push(returnStatement); + insertStatementsAfterStandardPrologue(statements, context.endLexicalEnvironment()); + const iife = factory2.createImmediatelyInvokedArrowFunction(statements); + setInternalEmitFlags(iife, 1 /* TypeScriptClassWrapper */); + const varDecl = factory2.createVariableDeclaration( + factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + false + ), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + iife + ); + setOriginalNode(varDecl, node); + const varStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([varDecl], 1 /* Let */) + ); + setOriginalNode(varStatement, node); + setCommentRange(varStatement, node); + setSourceMapRange(varStatement, moveRangePastDecorators(node)); + startOnNewLine(varStatement); + statement = varStatement; + } else { + statement = classDeclaration; + } + if (moveModifiers) { + if (facts & 8 /* IsExportOfNamespace */) { + return [ + statement, + createExportMemberAssignmentStatement(node) + ]; + } + if (facts & 32 /* IsDefaultExternalExport */) { + return [ + statement, + factory2.createExportDefault(factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + )) + ]; + } + if (facts & 16 /* IsNamedExternalExport */) { + return [ + statement, + factory2.createExternalModuleExport(factory2.getDeclarationName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + )) + ]; + } + } + return statement; + } + function visitClassExpression(node) { + let modifiers = visitNodes2(node.modifiers, modifierElidingVisitor, isModifierLike); + if (classOrConstructorParameterIsDecorated(legacyDecorators, node)) { + modifiers = injectClassTypeMetadata(modifiers, node); + } + return factory2.updateClassExpression( + node, + modifiers, + node.name, + /*typeParameters*/ + void 0, + visitNodes2(node.heritageClauses, visitor, isHeritageClause), + transformClassMembers(node) + ); + } + function transformClassMembers(node) { + const members = visitNodes2(node.members, getClassElementVisitor(node), isClassElement); + let newMembers; + const constructor = getFirstConstructorWithBody(node); + const parametersWithPropertyAssignments = constructor && filter(constructor.parameters, (p) => isParameterPropertyDeclaration(p, constructor)); + if (parametersWithPropertyAssignments) { + for (const parameter of parametersWithPropertyAssignments) { + const parameterProperty = factory2.createPropertyDeclaration( + /*modifiers*/ + void 0, + parameter.name, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + setOriginalNode(parameterProperty, parameter); + newMembers = append(newMembers, parameterProperty); + } + } + if (newMembers) { + newMembers = addRange(newMembers, members); + return setTextRange( + factory2.createNodeArray(newMembers), + /*location*/ + node.members + ); + } + return members; + } + function injectClassTypeMetadata(modifiers, node) { + const metadata = getTypeMetadata(node, node); + if (some(metadata)) { + const modifiersArray = []; + addRange(modifiersArray, takeWhile(modifiers, isExportOrDefaultModifier)); + addRange(modifiersArray, filter(modifiers, isDecorator)); + addRange(modifiersArray, metadata); + addRange(modifiersArray, filter(skipWhile(modifiers, isExportOrDefaultModifier), isModifier)); + modifiers = setTextRange(factory2.createNodeArray(modifiersArray), modifiers); + } + return modifiers; + } + function injectClassElementTypeMetadata(modifiers, node, container) { + if (isClassLike(container) && classElementOrClassElementParameterIsDecorated(legacyDecorators, node, container)) { + const metadata = getTypeMetadata(node, container); + if (some(metadata)) { + const modifiersArray = []; + addRange(modifiersArray, filter(modifiers, isDecorator)); + addRange(modifiersArray, metadata); + addRange(modifiersArray, filter(modifiers, isModifier)); + modifiers = setTextRange(factory2.createNodeArray(modifiersArray), modifiers); + } + } + return modifiers; + } + function getTypeMetadata(node, container) { + if (!legacyDecorators) return void 0; + return USE_NEW_TYPE_METADATA_FORMAT ? getNewTypeMetadata(node, container) : getOldTypeMetadata(node, container); + } + function getOldTypeMetadata(node, container) { + if (typeSerializer) { + let decorators; + if (shouldAddTypeMetadata(node)) { + const typeMetadata = emitHelpers().createMetadataHelper("design:type", typeSerializer.serializeTypeOfNode({ currentLexicalScope, currentNameScope: container }, node, container)); + decorators = append(decorators, factory2.createDecorator(typeMetadata)); + } + if (shouldAddParamTypesMetadata(node)) { + const paramTypesMetadata = emitHelpers().createMetadataHelper("design:paramtypes", typeSerializer.serializeParameterTypesOfNode({ currentLexicalScope, currentNameScope: container }, node, container)); + decorators = append(decorators, factory2.createDecorator(paramTypesMetadata)); + } + if (shouldAddReturnTypeMetadata(node)) { + const returnTypeMetadata = emitHelpers().createMetadataHelper("design:returntype", typeSerializer.serializeReturnTypeOfNode({ currentLexicalScope, currentNameScope: container }, node)); + decorators = append(decorators, factory2.createDecorator(returnTypeMetadata)); + } + return decorators; + } + } + function getNewTypeMetadata(node, container) { + if (typeSerializer) { + let properties; + if (shouldAddTypeMetadata(node)) { + const typeProperty = factory2.createPropertyAssignment("type", factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + [], + /*type*/ + void 0, + factory2.createToken(39 /* EqualsGreaterThanToken */), + typeSerializer.serializeTypeOfNode({ currentLexicalScope, currentNameScope: container }, node, container) + )); + properties = append(properties, typeProperty); + } + if (shouldAddParamTypesMetadata(node)) { + const paramTypeProperty = factory2.createPropertyAssignment("paramTypes", factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + [], + /*type*/ + void 0, + factory2.createToken(39 /* EqualsGreaterThanToken */), + typeSerializer.serializeParameterTypesOfNode({ currentLexicalScope, currentNameScope: container }, node, container) + )); + properties = append(properties, paramTypeProperty); + } + if (shouldAddReturnTypeMetadata(node)) { + const returnTypeProperty = factory2.createPropertyAssignment("returnType", factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + [], + /*type*/ + void 0, + factory2.createToken(39 /* EqualsGreaterThanToken */), + typeSerializer.serializeReturnTypeOfNode({ currentLexicalScope, currentNameScope: container }, node) + )); + properties = append(properties, returnTypeProperty); + } + if (properties) { + const typeInfoMetadata = emitHelpers().createMetadataHelper("design:typeinfo", factory2.createObjectLiteralExpression( + properties, + /*multiLine*/ + true + )); + return [factory2.createDecorator(typeInfoMetadata)]; + } + } + } + function shouldAddTypeMetadata(node) { + const kind = node.kind; + return kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */ || kind === 173 /* PropertyDeclaration */; + } + function shouldAddReturnTypeMetadata(node) { + return node.kind === 175 /* MethodDeclaration */; + } + function shouldAddParamTypesMetadata(node) { + switch (node.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return getFirstConstructorWithBody(node) !== void 0; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return true; + } + return false; + } + function getExpressionForPropertyName(member, generateNameForComputedPropertyName) { + const name = member.name; + if (isPrivateIdentifier(name)) { + return factory2.createIdentifier(""); + } else if (isComputedPropertyName(name)) { + return generateNameForComputedPropertyName && !isSimpleInlineableExpression(name.expression) ? factory2.getGeneratedNameForNode(name) : name.expression; + } else if (isIdentifier(name)) { + return factory2.createStringLiteral(idText(name)); + } else { + return factory2.cloneNode(name); + } + } + function visitPropertyNameOfClassElement(member) { + const name = member.name; + if (legacyDecorators && isComputedPropertyName(name) && hasDecorators(member)) { + const expression = visitNode(name.expression, visitor, isExpression); + Debug.assert(expression); + const innerExpression = skipPartiallyEmittedExpressions(expression); + if (!isSimpleInlineableExpression(innerExpression)) { + const generatedName = factory2.getGeneratedNameForNode(name); + hoistVariableDeclaration(generatedName); + return factory2.updateComputedPropertyName(name, factory2.createAssignment(generatedName, expression)); + } + } + return Debug.checkDefined(visitNode(name, visitor, isPropertyName)); + } + function visitHeritageClause(node) { + if (node.token === 119 /* ImplementsKeyword */) { + return void 0; + } + return visitEachChild(node, visitor, context); + } + function visitExpressionWithTypeArguments(node) { + return factory2.updateExpressionWithTypeArguments( + node, + Debug.checkDefined(visitNode(node.expression, visitor, isLeftHandSideExpression)), + /*typeArguments*/ + void 0 + ); + } + function shouldEmitFunctionLikeDeclaration(node) { + return !nodeIsMissing(node.body); + } + function visitPropertyDeclaration(node, parent2) { + const isAmbient = node.flags & 33554432 /* Ambient */ || hasSyntacticModifier(node, 64 /* Abstract */); + if (isAmbient && !(legacyDecorators && hasDecorators(node))) { + return void 0; + } + let modifiers = isClassLike(parent2) ? !isAmbient ? visitNodes2(node.modifiers, visitor, isModifierLike) : visitNodes2(node.modifiers, modifierElidingVisitor, isModifierLike) : visitNodes2(node.modifiers, decoratorElidingVisitor, isModifierLike); + modifiers = injectClassElementTypeMetadata(modifiers, node, parent2); + if (isAmbient) { + return factory2.updatePropertyDeclaration( + node, + concatenate(modifiers, factory2.createModifiersFromModifierFlags(128 /* Ambient */)), + Debug.checkDefined(visitNode(node.name, visitor, isPropertyName)), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + } + return factory2.updatePropertyDeclaration( + node, + modifiers, + visitPropertyNameOfClassElement(node), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + } + function visitConstructor(node) { + if (!shouldEmitFunctionLikeDeclaration(node)) { + return void 0; + } + return factory2.updateConstructorDeclaration( + node, + /*modifiers*/ + void 0, + visitParameterList(node.parameters, visitor, context), + transformConstructorBody(node.body, node) + ); + } + function transformConstructorBodyWorker(statementsOut, statementsIn, statementOffset, superPath, superPathDepth, initializerStatements) { + const superStatementIndex = superPath[superPathDepth]; + const superStatement = statementsIn[superStatementIndex]; + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, statementOffset, superStatementIndex - statementOffset)); + if (isTryStatement(superStatement)) { + const tryBlockStatements = []; + transformConstructorBodyWorker( + tryBlockStatements, + superStatement.tryBlock.statements, + /*statementOffset*/ + 0, + superPath, + superPathDepth + 1, + initializerStatements + ); + const tryBlockStatementsArray = factory2.createNodeArray(tryBlockStatements); + setTextRange(tryBlockStatementsArray, superStatement.tryBlock.statements); + statementsOut.push(factory2.updateTryStatement( + superStatement, + factory2.updateBlock(superStatement.tryBlock, tryBlockStatements), + visitNode(superStatement.catchClause, visitor, isCatchClause), + visitNode(superStatement.finallyBlock, visitor, isBlock) + )); + } else { + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, superStatementIndex, 1)); + addRange(statementsOut, initializerStatements); + } + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, superStatementIndex + 1)); + } + function transformConstructorBody(body, constructor) { + const parametersWithPropertyAssignments = constructor && filter(constructor.parameters, (p) => isParameterPropertyDeclaration(p, constructor)); + if (!some(parametersWithPropertyAssignments)) { + return visitFunctionBody(body, visitor, context); + } + let statements = []; + resumeLexicalEnvironment(); + const prologueStatementCount = factory2.copyPrologue( + body.statements, + statements, + /*ensureUseStrict*/ + false, + visitor + ); + const superPath = findSuperStatementIndexPath(body.statements, prologueStatementCount); + const parameterPropertyAssignments = mapDefined(parametersWithPropertyAssignments, transformParameterWithPropertyAssignment); + if (superPath.length) { + transformConstructorBodyWorker( + statements, + body.statements, + prologueStatementCount, + superPath, + /*superPathDepth*/ + 0, + parameterPropertyAssignments + ); + } else { + addRange(statements, parameterPropertyAssignments); + addRange(statements, visitNodes2(body.statements, visitor, isStatement, prologueStatementCount)); + } + statements = factory2.mergeLexicalEnvironment(statements, endLexicalEnvironment()); + const block = factory2.createBlock( + setTextRange(factory2.createNodeArray(statements), body.statements), + /*multiLine*/ + true + ); + setTextRange( + block, + /*location*/ + body + ); + setOriginalNode(block, body); + return block; + } + function transformParameterWithPropertyAssignment(node) { + const name = node.name; + if (!isIdentifier(name)) { + return void 0; + } + const propertyName = setParent(setTextRange(factory2.cloneNode(name), name), name.parent); + setEmitFlags(propertyName, 3072 /* NoComments */ | 96 /* NoSourceMap */); + const localName = setParent(setTextRange(factory2.cloneNode(name), name), name.parent); + setEmitFlags(localName, 3072 /* NoComments */); + return startOnNewLine( + removeAllComments( + setTextRange( + setOriginalNode( + factory2.createExpressionStatement( + factory2.createAssignment( + setTextRange( + factory2.createPropertyAccessExpression( + factory2.createThis(), + propertyName + ), + node.name + ), + localName + ) + ), + node + ), + moveRangePos(node, -1) + ) + ) + ); + } + function visitMethodDeclaration(node, parent2) { + if (!(node.transformFlags & 1 /* ContainsTypeScript */)) { + return node; + } + if (!shouldEmitFunctionLikeDeclaration(node)) { + return void 0; + } + let modifiers = isClassLike(parent2) ? visitNodes2(node.modifiers, visitor, isModifierLike) : visitNodes2(node.modifiers, decoratorElidingVisitor, isModifierLike); + modifiers = injectClassElementTypeMetadata(modifiers, node, parent2); + return factory2.updateMethodDeclaration( + node, + modifiers, + node.asteriskToken, + visitPropertyNameOfClassElement(node), + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + visitFunctionBody(node.body, visitor, context) + ); + } + function shouldEmitAccessorDeclaration(node) { + return !(nodeIsMissing(node.body) && hasSyntacticModifier(node, 64 /* Abstract */)); + } + function visitGetAccessor(node, parent2) { + if (!(node.transformFlags & 1 /* ContainsTypeScript */)) { + return node; + } + if (!shouldEmitAccessorDeclaration(node)) { + return void 0; + } + let modifiers = isClassLike(parent2) ? visitNodes2(node.modifiers, visitor, isModifierLike) : visitNodes2(node.modifiers, decoratorElidingVisitor, isModifierLike); + modifiers = injectClassElementTypeMetadata(modifiers, node, parent2); + return factory2.updateGetAccessorDeclaration( + node, + modifiers, + visitPropertyNameOfClassElement(node), + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + visitFunctionBody(node.body, visitor, context) || factory2.createBlock([]) + ); + } + function visitSetAccessor(node, parent2) { + if (!(node.transformFlags & 1 /* ContainsTypeScript */)) { + return node; + } + if (!shouldEmitAccessorDeclaration(node)) { + return void 0; + } + let modifiers = isClassLike(parent2) ? visitNodes2(node.modifiers, visitor, isModifierLike) : visitNodes2(node.modifiers, decoratorElidingVisitor, isModifierLike); + modifiers = injectClassElementTypeMetadata(modifiers, node, parent2); + return factory2.updateSetAccessorDeclaration( + node, + modifiers, + visitPropertyNameOfClassElement(node), + visitParameterList(node.parameters, visitor, context), + visitFunctionBody(node.body, visitor, context) || factory2.createBlock([]) + ); + } + function visitFunctionDeclaration(node) { + if (!shouldEmitFunctionLikeDeclaration(node)) { + return factory2.createNotEmittedStatement(node); + } + const updated = factory2.updateFunctionDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + node.asteriskToken, + node.name, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + visitFunctionBody(node.body, visitor, context) || factory2.createBlock([]) + ); + if (isExportOfNamespace(node)) { + const statements = [updated]; + addExportMemberAssignment(statements, node); + return statements; + } + return updated; + } + function visitFunctionExpression(node) { + if (!shouldEmitFunctionLikeDeclaration(node)) { + return factory2.createOmittedExpression(); + } + const updated = factory2.updateFunctionExpression( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + node.asteriskToken, + node.name, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + visitFunctionBody(node.body, visitor, context) || factory2.createBlock([]) + ); + return updated; + } + function visitArrowFunction(node) { + const updated = factory2.updateArrowFunction( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + node.equalsGreaterThanToken, + visitFunctionBody(node.body, visitor, context) + ); + return updated; + } + function visitParameter(node) { + if (parameterIsThisKeyword(node)) { + return void 0; + } + const updated = factory2.updateParameterDeclaration( + node, + visitNodes2(node.modifiers, (node2) => isDecorator(node2) ? visitor(node2) : void 0, isModifierLike), + node.dotDotDotToken, + Debug.checkDefined(visitNode(node.name, visitor, isBindingName)), + /*questionToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + if (updated !== node) { + setCommentRange(updated, node); + setTextRange(updated, moveRangePastModifiers(node)); + setSourceMapRange(updated, moveRangePastModifiers(node)); + setEmitFlags(updated.name, 64 /* NoTrailingSourceMap */); + } + return updated; + } + function visitVariableStatement(node) { + if (isExportOfNamespace(node)) { + const variables = getInitializedVariables(node.declarationList); + if (variables.length === 0) { + return void 0; + } + return setTextRange( + factory2.createExpressionStatement( + factory2.inlineExpressions( + map(variables, transformInitializedVariable) + ) + ), + node + ); + } else { + return visitEachChild(node, visitor, context); + } + } + function transformInitializedVariable(node) { + const name = node.name; + if (isBindingPattern(name)) { + return flattenDestructuringAssignment( + node, + visitor, + context, + 0 /* All */, + /*needsValue*/ + false, + createNamespaceExportExpression + ); + } else { + return setTextRange( + factory2.createAssignment( + getNamespaceMemberNameWithSourceMapsAndWithoutComments(name), + Debug.checkDefined(visitNode(node.initializer, visitor, isExpression)) + ), + /*location*/ + node + ); + } + } + function visitVariableDeclaration(node) { + const updated = factory2.updateVariableDeclaration( + node, + Debug.checkDefined(visitNode(node.name, visitor, isBindingName)), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + if (node.type) { + setTypeNode(updated.name, node.type); + } + return updated; + } + function visitParenthesizedExpression(node) { + const innerExpression = skipOuterExpressions(node.expression, ~(38 /* Assertions */ | 16 /* ExpressionsWithTypeArguments */)); + if (isAssertionExpression(innerExpression) || isSatisfiesExpression(innerExpression)) { + const expression = visitNode(node.expression, visitor, isExpression); + Debug.assert(expression); + return factory2.createPartiallyEmittedExpression(expression, node); + } + return visitEachChild(node, visitor, context); + } + function visitAssertionExpression(node) { + const expression = visitNode(node.expression, visitor, isExpression); + Debug.assert(expression); + return factory2.createPartiallyEmittedExpression(expression, node); + } + function visitNonNullExpression(node) { + const expression = visitNode(node.expression, visitor, isLeftHandSideExpression); + Debug.assert(expression); + return factory2.createPartiallyEmittedExpression(expression, node); + } + function visitSatisfiesExpression(node) { + const expression = visitNode(node.expression, visitor, isExpression); + Debug.assert(expression); + return factory2.createPartiallyEmittedExpression(expression, node); + } + function visitCallExpression(node) { + return factory2.updateCallExpression( + node, + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + /*typeArguments*/ + void 0, + visitNodes2(node.arguments, visitor, isExpression) + ); + } + function visitNewExpression(node) { + return factory2.updateNewExpression( + node, + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + /*typeArguments*/ + void 0, + visitNodes2(node.arguments, visitor, isExpression) + ); + } + function visitTaggedTemplateExpression(node) { + return factory2.updateTaggedTemplateExpression( + node, + Debug.checkDefined(visitNode(node.tag, visitor, isExpression)), + /*typeArguments*/ + void 0, + Debug.checkDefined(visitNode(node.template, visitor, isTemplateLiteral)) + ); + } + function visitJsxSelfClosingElement(node) { + return factory2.updateJsxSelfClosingElement( + node, + Debug.checkDefined(visitNode(node.tagName, visitor, isJsxTagNameExpression)), + /*typeArguments*/ + void 0, + Debug.checkDefined(visitNode(node.attributes, visitor, isJsxAttributes)) + ); + } + function visitJsxJsxOpeningElement(node) { + return factory2.updateJsxOpeningElement( + node, + Debug.checkDefined(visitNode(node.tagName, visitor, isJsxTagNameExpression)), + /*typeArguments*/ + void 0, + Debug.checkDefined(visitNode(node.attributes, visitor, isJsxAttributes)) + ); + } + function shouldEmitEnumDeclaration(node) { + return !isEnumConst(node) || shouldPreserveConstEnums(compilerOptions); + } + function visitEnumDeclaration(node) { + if (!shouldEmitEnumDeclaration(node)) { + return factory2.createNotEmittedStatement(node); + } + const statements = []; + let emitFlags = 4 /* AdviseOnEmitNode */; + const varAdded = addVarForEnumOrModuleDeclaration(statements, node); + if (varAdded) { + if (moduleKind !== 4 /* System */ || currentLexicalScope !== currentSourceFile) { + emitFlags |= 1024 /* NoLeadingComments */; + } + } + const parameterName = getNamespaceParameterName(node); + const containerName = getNamespaceContainerName(node); + const exportName = isExportOfNamespace(node) ? factory2.getExternalModuleOrNamespaceExportName( + currentNamespaceContainerName, + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ) : factory2.getDeclarationName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + let moduleArg = factory2.createLogicalOr( + exportName, + factory2.createAssignment( + exportName, + factory2.createObjectLiteralExpression() + ) + ); + if (isExportOfNamespace(node)) { + const localName = factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + moduleArg = factory2.createAssignment(localName, moduleArg); + } + const enumStatement = factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + parameterName + )], + /*type*/ + void 0, + transformEnumBody(node, containerName) + ), + /*typeArguments*/ + void 0, + [moduleArg] + ) + ); + setOriginalNode(enumStatement, node); + if (varAdded) { + setSyntheticLeadingComments(enumStatement, void 0); + setSyntheticTrailingComments(enumStatement, void 0); + } + setTextRange(enumStatement, node); + addEmitFlags(enumStatement, emitFlags); + statements.push(enumStatement); + return statements; + } + function transformEnumBody(node, localName) { + const savedCurrentNamespaceLocalName = currentNamespaceContainerName; + currentNamespaceContainerName = localName; + const statements = []; + startLexicalEnvironment(); + const members = map(node.members, transformEnumMember); + insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment()); + addRange(statements, members); + currentNamespaceContainerName = savedCurrentNamespaceLocalName; + return factory2.createBlock( + setTextRange( + factory2.createNodeArray(statements), + /*location*/ + node.members + ), + /*multiLine*/ + true + ); + } + function transformEnumMember(member) { + const name = getExpressionForPropertyName( + member, + /*generateNameForComputedPropertyName*/ + false + ); + const evaluated = resolver.getEnumMemberValue(member); + const valueExpression = transformEnumMemberDeclarationValue(member, evaluated == null ? void 0 : evaluated.value); + const innerAssignment = factory2.createAssignment( + factory2.createElementAccessExpression( + currentNamespaceContainerName, + name + ), + valueExpression + ); + const outerAssignment = typeof (evaluated == null ? void 0 : evaluated.value) === "string" || (evaluated == null ? void 0 : evaluated.isSyntacticallyString) ? innerAssignment : factory2.createAssignment( + factory2.createElementAccessExpression( + currentNamespaceContainerName, + innerAssignment + ), + name + ); + return setTextRange( + factory2.createExpressionStatement( + setTextRange( + outerAssignment, + member + ) + ), + member + ); + } + function transformEnumMemberDeclarationValue(member, constantValue) { + if (constantValue !== void 0) { + return typeof constantValue === "string" ? factory2.createStringLiteral(constantValue) : constantValue < 0 ? factory2.createPrefixUnaryExpression(41 /* MinusToken */, factory2.createNumericLiteral(-constantValue)) : factory2.createNumericLiteral(constantValue); + } else { + enableSubstitutionForNonQualifiedEnumMembers(); + if (member.initializer) { + return Debug.checkDefined(visitNode(member.initializer, visitor, isExpression)); + } else { + return factory2.createVoidZero(); + } + } + } + function shouldEmitModuleDeclaration(nodeIn) { + const node = getParseTreeNode(nodeIn, isModuleDeclaration); + if (!node) { + return true; + } + return isInstantiatedModule(node, shouldPreserveConstEnums(compilerOptions)); + } + function recordEmittedDeclarationInScope(node) { + if (!currentScopeFirstDeclarationsOfName) { + currentScopeFirstDeclarationsOfName = /* @__PURE__ */ new Map(); + } + const name = declaredNameInScope(node); + if (!currentScopeFirstDeclarationsOfName.has(name)) { + currentScopeFirstDeclarationsOfName.set(name, node); + } + } + function isFirstEmittedDeclarationInScope(node) { + if (currentScopeFirstDeclarationsOfName) { + const name = declaredNameInScope(node); + return currentScopeFirstDeclarationsOfName.get(name) === node; + } + return true; + } + function declaredNameInScope(node) { + Debug.assertNode(node.name, isIdentifier); + return node.name.escapedText; + } + function addVarForEnumOrModuleDeclaration(statements, node) { + const varDecl = factory2.createVariableDeclaration(factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + )); + const varFlags = currentLexicalScope.kind === 308 /* SourceFile */ ? 0 /* None */ : 1 /* Let */; + const statement = factory2.createVariableStatement( + visitNodes2(node.modifiers, modifierVisitor, isModifier), + factory2.createVariableDeclarationList([varDecl], varFlags) + ); + setOriginalNode(varDecl, node); + setSyntheticLeadingComments(varDecl, void 0); + setSyntheticTrailingComments(varDecl, void 0); + setOriginalNode(statement, node); + recordEmittedDeclarationInScope(node); + if (isFirstEmittedDeclarationInScope(node)) { + if (node.kind === 267 /* EnumDeclaration */) { + setSourceMapRange(statement.declarationList, node); + } else { + setSourceMapRange(statement, node); + } + setCommentRange(statement, node); + addEmitFlags(statement, 2048 /* NoTrailingComments */); + statements.push(statement); + return true; + } + return false; + } + function visitModuleDeclaration(node) { + if (!shouldEmitModuleDeclaration(node)) { + return factory2.createNotEmittedStatement(node); + } + Debug.assertNode(node.name, isIdentifier, "A TypeScript namespace should have an Identifier name."); + enableSubstitutionForNamespaceExports(); + const statements = []; + let emitFlags = 4 /* AdviseOnEmitNode */; + const varAdded = addVarForEnumOrModuleDeclaration(statements, node); + if (varAdded) { + if (moduleKind !== 4 /* System */ || currentLexicalScope !== currentSourceFile) { + emitFlags |= 1024 /* NoLeadingComments */; + } + } + const parameterName = getNamespaceParameterName(node); + const containerName = getNamespaceContainerName(node); + const exportName = isExportOfNamespace(node) ? factory2.getExternalModuleOrNamespaceExportName( + currentNamespaceContainerName, + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ) : factory2.getDeclarationName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + let moduleArg = factory2.createLogicalOr( + exportName, + factory2.createAssignment( + exportName, + factory2.createObjectLiteralExpression() + ) + ); + if (isExportOfNamespace(node)) { + const localName = factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + moduleArg = factory2.createAssignment(localName, moduleArg); + } + const moduleStatement = factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + parameterName + )], + /*type*/ + void 0, + transformModuleBody(node, containerName) + ), + /*typeArguments*/ + void 0, + [moduleArg] + ) + ); + setOriginalNode(moduleStatement, node); + if (varAdded) { + setSyntheticLeadingComments(moduleStatement, void 0); + setSyntheticTrailingComments(moduleStatement, void 0); + } + setTextRange(moduleStatement, node); + addEmitFlags(moduleStatement, emitFlags); + statements.push(moduleStatement); + return statements; + } + function transformModuleBody(node, namespaceLocalName) { + const savedCurrentNamespaceContainerName = currentNamespaceContainerName; + const savedCurrentNamespace = currentNamespace; + const savedCurrentScopeFirstDeclarationsOfName = currentScopeFirstDeclarationsOfName; + currentNamespaceContainerName = namespaceLocalName; + currentNamespace = node; + currentScopeFirstDeclarationsOfName = void 0; + const statements = []; + startLexicalEnvironment(); + let statementsLocation; + let blockLocation; + if (node.body) { + if (node.body.kind === 269 /* ModuleBlock */) { + saveStateAndInvoke(node.body, (body) => addRange(statements, visitNodes2(body.statements, namespaceElementVisitor, isStatement))); + statementsLocation = node.body.statements; + blockLocation = node.body; + } else { + const result = visitModuleDeclaration(node.body); + if (result) { + if (isArray(result)) { + addRange(statements, result); + } else { + statements.push(result); + } + } + const moduleBlock = getInnerMostModuleDeclarationFromDottedModule(node).body; + statementsLocation = moveRangePos(moduleBlock.statements, -1); + } + } + insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment()); + currentNamespaceContainerName = savedCurrentNamespaceContainerName; + currentNamespace = savedCurrentNamespace; + currentScopeFirstDeclarationsOfName = savedCurrentScopeFirstDeclarationsOfName; + const block = factory2.createBlock( + setTextRange( + factory2.createNodeArray(statements), + /*location*/ + statementsLocation + ), + /*multiLine*/ + true + ); + setTextRange(block, blockLocation); + if (!node.body || node.body.kind !== 269 /* ModuleBlock */) { + setEmitFlags(block, getEmitFlags(block) | 3072 /* NoComments */); + } + return block; + } + function getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration) { + if (moduleDeclaration.body.kind === 268 /* ModuleDeclaration */) { + const recursiveInnerModule = getInnerMostModuleDeclarationFromDottedModule(moduleDeclaration.body); + return recursiveInnerModule || moduleDeclaration.body; + } + } + function visitImportDeclaration(node) { + if (!node.importClause) { + return node; + } + if (node.importClause.isTypeOnly) { + return void 0; + } + const importClause = visitNode(node.importClause, visitImportClause, isImportClause); + return importClause ? factory2.updateImportDeclaration( + node, + /*modifiers*/ + void 0, + importClause, + node.moduleSpecifier, + node.attributes + ) : void 0; + } + function visitImportClause(node) { + Debug.assert(node.phaseModifier !== 156 /* TypeKeyword */); + const name = shouldEmitAliasDeclaration(node) ? node.name : void 0; + const namedBindings = visitNode(node.namedBindings, visitNamedImportBindings, isNamedImportBindings); + return name || namedBindings ? factory2.updateImportClause(node, node.phaseModifier, name, namedBindings) : void 0; + } + function visitNamedImportBindings(node) { + if (node.kind === 275 /* NamespaceImport */) { + return shouldEmitAliasDeclaration(node) ? node : void 0; + } else { + const allowEmpty = compilerOptions.verbatimModuleSyntax; + const elements = visitNodes2(node.elements, visitImportSpecifier, isImportSpecifier); + return allowEmpty || some(elements) ? factory2.updateNamedImports(node, elements) : void 0; + } + } + function visitImportSpecifier(node) { + return !node.isTypeOnly && shouldEmitAliasDeclaration(node) ? node : void 0; + } + function visitExportAssignment(node) { + return compilerOptions.verbatimModuleSyntax || resolver.isValueAliasDeclaration(node) ? visitEachChild(node, visitor, context) : void 0; + } + function visitExportDeclaration(node) { + if (node.isTypeOnly) { + return void 0; + } + if (!node.exportClause || isNamespaceExport(node.exportClause)) { + return factory2.updateExportDeclaration( + node, + node.modifiers, + node.isTypeOnly, + node.exportClause, + node.moduleSpecifier, + node.attributes + ); + } + const allowEmpty = !!compilerOptions.verbatimModuleSyntax; + const exportClause = visitNode( + node.exportClause, + (bindings) => visitNamedExportBindings(bindings, allowEmpty), + isNamedExportBindings + ); + return exportClause ? factory2.updateExportDeclaration( + node, + /*modifiers*/ + void 0, + node.isTypeOnly, + exportClause, + node.moduleSpecifier, + node.attributes + ) : void 0; + } + function visitNamedExports(node, allowEmpty) { + const elements = visitNodes2(node.elements, visitExportSpecifier, isExportSpecifier); + return allowEmpty || some(elements) ? factory2.updateNamedExports(node, elements) : void 0; + } + function visitNamespaceExports(node) { + return factory2.updateNamespaceExport(node, Debug.checkDefined(visitNode(node.name, visitor, isIdentifier))); + } + function visitNamedExportBindings(node, allowEmpty) { + return isNamespaceExport(node) ? visitNamespaceExports(node) : visitNamedExports(node, allowEmpty); + } + function visitExportSpecifier(node) { + return !node.isTypeOnly && (compilerOptions.verbatimModuleSyntax || resolver.isValueAliasDeclaration(node)) ? node : void 0; + } + function shouldEmitImportEqualsDeclaration(node) { + return shouldEmitAliasDeclaration(node) || !isExternalModule(currentSourceFile) && resolver.isTopLevelValueImportEqualsWithEntityName(node); + } + function visitImportEqualsDeclaration(node) { + if (node.isTypeOnly) { + return void 0; + } + if (isExternalModuleImportEqualsDeclaration(node)) { + if (!shouldEmitAliasDeclaration(node)) { + return void 0; + } + return visitEachChild(node, visitor, context); + } + if (!shouldEmitImportEqualsDeclaration(node)) { + return void 0; + } + const moduleReference = createExpressionFromEntityName(factory2, node.moduleReference); + setEmitFlags(moduleReference, 3072 /* NoComments */ | 4096 /* NoNestedComments */); + if (isNamedExternalModuleExport(node) || !isExportOfNamespace(node)) { + return setOriginalNode( + setTextRange( + factory2.createVariableStatement( + visitNodes2(node.modifiers, modifierVisitor, isModifier), + factory2.createVariableDeclarationList([ + setOriginalNode( + factory2.createVariableDeclaration( + node.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + moduleReference + ), + node + ) + ]) + ), + node + ), + node + ); + } else { + return setOriginalNode( + createNamespaceExport( + node.name, + moduleReference, + node + ), + node + ); + } + } + function isExportOfNamespace(node) { + return currentNamespace !== void 0 && hasSyntacticModifier(node, 32 /* Export */); + } + function isExternalModuleExport(node) { + return currentNamespace === void 0 && hasSyntacticModifier(node, 32 /* Export */); + } + function isNamedExternalModuleExport(node) { + return isExternalModuleExport(node) && !hasSyntacticModifier(node, 2048 /* Default */); + } + function isDefaultExternalModuleExport(node) { + return isExternalModuleExport(node) && hasSyntacticModifier(node, 2048 /* Default */); + } + function createExportMemberAssignmentStatement(node) { + const expression = factory2.createAssignment( + factory2.getExternalModuleOrNamespaceExportName( + currentNamespaceContainerName, + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ), + factory2.getLocalName(node) + ); + setSourceMapRange(expression, createRange(node.name ? node.name.pos : node.pos, node.end)); + const statement = factory2.createExpressionStatement(expression); + setSourceMapRange(statement, createRange(-1, node.end)); + return statement; + } + function addExportMemberAssignment(statements, node) { + statements.push(createExportMemberAssignmentStatement(node)); + } + function createNamespaceExport(exportName, exportValue, location) { + return setTextRange( + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.getNamespaceMemberName( + currentNamespaceContainerName, + exportName, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ), + exportValue + ) + ), + location + ); + } + function createNamespaceExportExpression(exportName, exportValue, location) { + return setTextRange(factory2.createAssignment(getNamespaceMemberNameWithSourceMapsAndWithoutComments(exportName), exportValue), location); + } + function getNamespaceMemberNameWithSourceMapsAndWithoutComments(name) { + return factory2.getNamespaceMemberName( + currentNamespaceContainerName, + name, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + } + function getNamespaceParameterName(node) { + const name = factory2.getGeneratedNameForNode(node); + setSourceMapRange(name, node.name); + return name; + } + function getNamespaceContainerName(node) { + return factory2.getGeneratedNameForNode(node); + } + function enableSubstitutionForNonQualifiedEnumMembers() { + if ((enabledSubstitutions & 8 /* NonQualifiedEnumMembers */) === 0) { + enabledSubstitutions |= 8 /* NonQualifiedEnumMembers */; + context.enableSubstitution(80 /* Identifier */); + } + } + function enableSubstitutionForNamespaceExports() { + if ((enabledSubstitutions & 2 /* NamespaceExports */) === 0) { + enabledSubstitutions |= 2 /* NamespaceExports */; + context.enableSubstitution(80 /* Identifier */); + context.enableSubstitution(305 /* ShorthandPropertyAssignment */); + context.enableEmitNotification(268 /* ModuleDeclaration */); + } + } + function isTransformedModuleDeclaration(node) { + return getOriginalNode(node).kind === 268 /* ModuleDeclaration */; + } + function isTransformedEnumDeclaration(node) { + return getOriginalNode(node).kind === 267 /* EnumDeclaration */; + } + function onEmitNode(hint, node, emitCallback) { + const savedApplicableSubstitutions = applicableSubstitutions; + const savedCurrentSourceFile = currentSourceFile; + if (isSourceFile(node)) { + currentSourceFile = node; + } + if (enabledSubstitutions & 2 /* NamespaceExports */ && isTransformedModuleDeclaration(node)) { + applicableSubstitutions |= 2 /* NamespaceExports */; + } + if (enabledSubstitutions & 8 /* NonQualifiedEnumMembers */ && isTransformedEnumDeclaration(node)) { + applicableSubstitutions |= 8 /* NonQualifiedEnumMembers */; + } + previousOnEmitNode(hint, node, emitCallback); + applicableSubstitutions = savedApplicableSubstitutions; + currentSourceFile = savedCurrentSourceFile; + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } else if (isShorthandPropertyAssignment(node)) { + return substituteShorthandPropertyAssignment(node); + } + return node; + } + function substituteShorthandPropertyAssignment(node) { + if (enabledSubstitutions & 2 /* NamespaceExports */) { + const name = node.name; + const exportedName = trySubstituteNamespaceExportedName(name); + if (exportedName) { + if (node.objectAssignmentInitializer) { + const initializer = factory2.createAssignment(exportedName, node.objectAssignmentInitializer); + return setTextRange(factory2.createPropertyAssignment(name, initializer), node); + } + return setTextRange(factory2.createPropertyAssignment(name, exportedName), node); + } + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return substituteExpressionIdentifier(node); + case 212 /* PropertyAccessExpression */: + return substitutePropertyAccessExpression(node); + case 213 /* ElementAccessExpression */: + return substituteElementAccessExpression(node); + } + return node; + } + function substituteExpressionIdentifier(node) { + return trySubstituteNamespaceExportedName(node) || node; + } + function trySubstituteNamespaceExportedName(node) { + if (enabledSubstitutions & applicableSubstitutions && !isGeneratedIdentifier(node) && !isLocalName(node)) { + const container = resolver.getReferencedExportContainer( + node, + /*prefixLocals*/ + false + ); + if (container && container.kind !== 308 /* SourceFile */) { + const substitute = applicableSubstitutions & 2 /* NamespaceExports */ && container.kind === 268 /* ModuleDeclaration */ || applicableSubstitutions & 8 /* NonQualifiedEnumMembers */ && container.kind === 267 /* EnumDeclaration */; + if (substitute) { + return setTextRange( + factory2.createPropertyAccessExpression(factory2.getGeneratedNameForNode(container), node), + /*location*/ + node + ); + } + } + } + return void 0; + } + function substitutePropertyAccessExpression(node) { + return substituteConstantValue(node); + } + function substituteElementAccessExpression(node) { + return substituteConstantValue(node); + } + function safeMultiLineComment(value) { + return value.replace(/\*\//g, "*_/"); + } + function substituteConstantValue(node) { + const constantValue = tryGetConstEnumValue(node); + if (constantValue !== void 0) { + setConstantValue(node, constantValue); + const substitute = typeof constantValue === "string" ? factory2.createStringLiteral(constantValue) : constantValue < 0 ? factory2.createPrefixUnaryExpression(41 /* MinusToken */, factory2.createNumericLiteral(-constantValue)) : factory2.createNumericLiteral(constantValue); + if (!compilerOptions.removeComments) { + const originalNode = getOriginalNode(node, isAccessExpression); + addSyntheticTrailingComment(substitute, 3 /* MultiLineCommentTrivia */, ` ${safeMultiLineComment(getTextOfNode(originalNode))} `); + } + return substitute; + } + return node; + } + function tryGetConstEnumValue(node) { + if (getIsolatedModules(compilerOptions)) { + return void 0; + } + return isPropertyAccessExpression(node) || isElementAccessExpression(node) ? resolver.getConstantValue(node) : void 0; + } + function shouldEmitAliasDeclaration(node) { + return compilerOptions.verbatimModuleSyntax || isInJSFile(node) || resolver.isReferencedAliasDeclaration(node); + } +} + +// src/compiler/transformers/classFields.ts +function transformClassFields(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + hoistVariableDeclaration, + endLexicalEnvironment, + startLexicalEnvironment, + resumeLexicalEnvironment, + addBlockScopedVariable + } = context; + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const useDefineForClassFields = getUseDefineForClassFields(compilerOptions); + const legacyDecorators = !!compilerOptions.experimentalDecorators; + const shouldTransformInitializersUsingSet = !useDefineForClassFields; + const shouldTransformInitializersUsingDefine = useDefineForClassFields && languageVersion < 9 /* ES2022 */; + const shouldTransformInitializers = shouldTransformInitializersUsingSet || shouldTransformInitializersUsingDefine; + const shouldTransformPrivateElementsOrClassStaticBlocks = languageVersion < 9 /* ES2022 */; + const shouldTransformAutoAccessors = languageVersion < 99 /* ESNext */ ? -1 /* True */ : !useDefineForClassFields ? 3 /* Maybe */ : 0 /* False */; + const shouldTransformThisInStaticInitializers = languageVersion < 9 /* ES2022 */; + const shouldTransformSuperInStaticInitializers = shouldTransformThisInStaticInitializers && languageVersion >= 2 /* ES2015 */; + const shouldTransformAnything = shouldTransformInitializers || shouldTransformPrivateElementsOrClassStaticBlocks || shouldTransformAutoAccessors === -1 /* True */; + const previousOnSubstituteNode = context.onSubstituteNode; + context.onSubstituteNode = onSubstituteNode; + const previousOnEmitNode = context.onEmitNode; + context.onEmitNode = onEmitNode; + let shouldTransformPrivateStaticElementsInFile = false; + let enabledSubstitutions = 0 /* None */; + let classAliases; + let pendingExpressions; + let pendingStatements; + let lexicalEnvironment; + const lexicalEnvironmentMap = /* @__PURE__ */ new Map(); + const noSubstitution = /* @__PURE__ */ new Set(); + let currentClassContainer; + let currentClassElement; + let shouldSubstituteThisWithClassThis = false; + let previousShouldSubstituteThisWithClassThis = false; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + lexicalEnvironment = void 0; + shouldTransformPrivateStaticElementsInFile = !!(getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */); + if (!shouldTransformAnything && !shouldTransformPrivateStaticElementsInFile) { + return node; + } + const visited = visitEachChild(node, visitor, context); + addEmitHelpers(visited, context.readEmitHelpers()); + return visited; + } + function modifierVisitor(node) { + switch (node.kind) { + case 129 /* AccessorKeyword */: + return shouldTransformAutoAccessorsInCurrentClass() ? void 0 : node; + default: + return tryCast(node, isModifier); + } + } + function visitor(node) { + if (!(node.transformFlags & 16777216 /* ContainsClassFields */) && !(node.transformFlags & 134234112 /* ContainsLexicalThisOrSuper */)) { + return node; + } + switch (node.kind) { + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 232 /* ClassExpression */: + return visitClassExpression(node); + case 176 /* ClassStaticBlockDeclaration */: + case 173 /* PropertyDeclaration */: + return Debug.fail("Use `classElementVisitor` instead."); + case 304 /* PropertyAssignment */: + return visitPropertyAssignment(node); + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 261 /* VariableDeclaration */: + return visitVariableDeclaration(node); + case 170 /* Parameter */: + return visitParameterDeclaration(node); + case 209 /* BindingElement */: + return visitBindingElement(node); + case 278 /* ExportAssignment */: + return visitExportAssignment(node); + case 81 /* PrivateIdentifier */: + return visitPrivateIdentifier(node); + case 212 /* PropertyAccessExpression */: + return visitPropertyAccessExpression(node); + case 213 /* ElementAccessExpression */: + return visitElementAccessExpression(node); + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return visitPreOrPostfixUnaryExpression( + node, + /*discarded*/ + false + ); + case 227 /* BinaryExpression */: + return visitBinaryExpression( + node, + /*discarded*/ + false + ); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression( + node, + /*discarded*/ + false + ); + case 214 /* CallExpression */: + return visitCallExpression(node); + case 245 /* ExpressionStatement */: + return visitExpressionStatement(node); + case 216 /* TaggedTemplateExpression */: + return visitTaggedTemplateExpression(node); + case 249 /* ForStatement */: + return visitForStatement(node); + case 110 /* ThisKeyword */: + return visitThisExpression(node); + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + return setCurrentClassElementAnd( + /*classElement*/ + void 0, + fallbackVisitor, + node + ); + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: { + return setCurrentClassElementAnd( + node, + fallbackVisitor, + node + ); + } + default: + return fallbackVisitor(node); + } + } + function fallbackVisitor(node) { + return visitEachChild(node, visitor, context); + } + function discardedValueVisitor(node) { + switch (node.kind) { + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return visitPreOrPostfixUnaryExpression( + node, + /*discarded*/ + true + ); + case 227 /* BinaryExpression */: + return visitBinaryExpression( + node, + /*discarded*/ + true + ); + case 357 /* CommaListExpression */: + return visitCommaListExpression( + node, + /*discarded*/ + true + ); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression( + node, + /*discarded*/ + true + ); + default: + return visitor(node); + } + } + function heritageClauseVisitor(node) { + switch (node.kind) { + case 299 /* HeritageClause */: + return visitEachChild(node, heritageClauseVisitor, context); + case 234 /* ExpressionWithTypeArguments */: + return visitExpressionWithTypeArgumentsInHeritageClause(node); + default: + return visitor(node); + } + } + function assignmentTargetVisitor(node) { + switch (node.kind) { + case 211 /* ObjectLiteralExpression */: + case 210 /* ArrayLiteralExpression */: + return visitAssignmentPattern(node); + default: + return visitor(node); + } + } + function classElementVisitor(node) { + switch (node.kind) { + case 177 /* Constructor */: + return setCurrentClassElementAnd( + node, + visitConstructorDeclaration, + node + ); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + return setCurrentClassElementAnd( + node, + visitMethodOrAccessorDeclaration, + node + ); + case 173 /* PropertyDeclaration */: + return setCurrentClassElementAnd( + node, + visitPropertyDeclaration, + node + ); + case 176 /* ClassStaticBlockDeclaration */: + return setCurrentClassElementAnd( + node, + visitClassStaticBlockDeclaration, + node + ); + case 168 /* ComputedPropertyName */: + return visitComputedPropertyName(node); + case 241 /* SemicolonClassElement */: + return node; + default: + return isModifierLike(node) ? modifierVisitor(node) : visitor(node); + } + } + function propertyNameVisitor(node) { + switch (node.kind) { + case 168 /* ComputedPropertyName */: + return visitComputedPropertyName(node); + default: + return visitor(node); + } + } + function accessorFieldResultVisitor(node) { + switch (node.kind) { + case 173 /* PropertyDeclaration */: + return transformFieldInitializer(node); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return classElementVisitor(node); + default: + Debug.assertMissingNode(node, "Expected node to either be a PropertyDeclaration, GetAccessorDeclaration, or SetAccessorDeclaration"); + break; + } + } + function visitPrivateIdentifier(node) { + if (!shouldTransformPrivateElementsOrClassStaticBlocks) { + return node; + } + if (isStatement(node.parent)) { + return node; + } + return setOriginalNode(factory2.createIdentifier(""), node); + } + function transformPrivateIdentifierInInExpression(node) { + const info = accessPrivateIdentifier2(node.left); + if (info) { + const receiver = visitNode(node.right, visitor, isExpression); + return setOriginalNode( + emitHelpers().createClassPrivateFieldInHelper(info.brandCheckIdentifier, receiver), + node + ); + } + return visitEachChild(node, visitor, context); + } + function visitPropertyAssignment(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + return visitEachChild(node, visitor, context); + } + function visitVariableStatement(node) { + const savedPendingStatements = pendingStatements; + pendingStatements = []; + const visitedNode = visitEachChild(node, visitor, context); + const statement = some(pendingStatements) ? [visitedNode, ...pendingStatements] : visitedNode; + pendingStatements = savedPendingStatements; + return statement; + } + function visitVariableDeclaration(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + return visitEachChild(node, visitor, context); + } + function visitParameterDeclaration(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + return visitEachChild(node, visitor, context); + } + function visitBindingElement(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + return visitEachChild(node, visitor, context); + } + function visitExportAssignment(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation( + context, + node, + /*ignoreEmptyStringLiteral*/ + true, + node.isExportEquals ? "" : "default" + ); + } + return visitEachChild(node, visitor, context); + } + function injectPendingExpressions(expression) { + if (some(pendingExpressions)) { + if (isParenthesizedExpression(expression)) { + pendingExpressions.push(expression.expression); + expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions)); + } else { + pendingExpressions.push(expression); + expression = factory2.inlineExpressions(pendingExpressions); + } + pendingExpressions = void 0; + } + return expression; + } + function visitComputedPropertyName(node) { + const expression = visitNode(node.expression, visitor, isExpression); + return factory2.updateComputedPropertyName(node, injectPendingExpressions(expression)); + } + function visitConstructorDeclaration(node) { + if (currentClassContainer) { + return transformConstructor(node, currentClassContainer); + } + return fallbackVisitor(node); + } + function shouldTransformClassElementToWeakMap(node) { + if (shouldTransformPrivateElementsOrClassStaticBlocks) return true; + if (hasStaticModifier(node) && getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */) return true; + return false; + } + function visitMethodOrAccessorDeclaration(node) { + Debug.assert(!hasDecorators(node)); + if (!isPrivateIdentifierClassElementDeclaration(node) || !shouldTransformClassElementToWeakMap(node)) { + return visitEachChild(node, classElementVisitor, context); + } + const info = accessPrivateIdentifier2(node.name); + Debug.assert(info, "Undeclared private name for property declaration."); + if (!info.isValid) { + return node; + } + const functionName = getHoistedFunctionName(node); + if (functionName) { + getPendingExpressions().push( + factory2.createAssignment( + functionName, + factory2.createFunctionExpression( + filter(node.modifiers, (m) => isModifier(m) && !isStaticModifier(m) && !isAccessorModifier(m)), + node.asteriskToken, + functionName, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + visitFunctionBody(node.body, visitor, context) + ) + ) + ); + } + return void 0; + } + function setCurrentClassElementAnd(classElement, visitor2, arg) { + if (classElement !== currentClassElement) { + const savedCurrentClassElement = currentClassElement; + currentClassElement = classElement; + const result = visitor2(arg); + currentClassElement = savedCurrentClassElement; + return result; + } + return visitor2(arg); + } + function getHoistedFunctionName(node) { + Debug.assert(isPrivateIdentifier(node.name)); + const info = accessPrivateIdentifier2(node.name); + Debug.assert(info, "Undeclared private name for property declaration."); + if (info.kind === "m" /* Method */) { + return info.methodName; + } + if (info.kind === "a" /* Accessor */) { + if (isGetAccessor(node)) { + return info.getterName; + } + if (isSetAccessor(node)) { + return info.setterName; + } + } + } + function tryGetClassThis() { + const lex = getClassLexicalEnvironment(); + return lex.classThis ?? lex.classConstructor ?? (currentClassContainer == null ? void 0 : currentClassContainer.name); + } + function transformAutoAccessor(node) { + const commentRange = getCommentRange(node); + const sourceMapRange = getSourceMapRange(node); + const name = node.name; + let getterName = name; + let setterName = name; + if (isComputedPropertyName(name) && !isSimpleInlineableExpression(name.expression)) { + const cacheAssignment = findComputedPropertyNameCacheAssignment(name); + if (cacheAssignment) { + getterName = factory2.updateComputedPropertyName(name, visitNode(name.expression, visitor, isExpression)); + setterName = factory2.updateComputedPropertyName(name, cacheAssignment.left); + } else { + const temp = factory2.createTempVariable(hoistVariableDeclaration); + setSourceMapRange(temp, name.expression); + const expression = visitNode(name.expression, visitor, isExpression); + const assignment = factory2.createAssignment(temp, expression); + setSourceMapRange(assignment, name.expression); + getterName = factory2.updateComputedPropertyName(name, assignment); + setterName = factory2.updateComputedPropertyName(name, temp); + } + } + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const backingField = createAccessorPropertyBackingField(factory2, node, modifiers, node.initializer); + setOriginalNode(backingField, node); + setEmitFlags(backingField, 3072 /* NoComments */); + setSourceMapRange(backingField, sourceMapRange); + const receiver = isStatic(node) ? tryGetClassThis() ?? factory2.createThis() : factory2.createThis(); + const getter = createAccessorPropertyGetRedirector(factory2, node, modifiers, getterName, receiver); + setOriginalNode(getter, node); + setCommentRange(getter, commentRange); + setSourceMapRange(getter, sourceMapRange); + const setterModifiers = factory2.createModifiersFromModifierFlags(modifiersToFlags(modifiers)); + const setter = createAccessorPropertySetRedirector(factory2, node, setterModifiers, setterName, receiver); + setOriginalNode(setter, node); + setEmitFlags(setter, 3072 /* NoComments */); + setSourceMapRange(setter, sourceMapRange); + return visitArray([backingField, getter, setter], accessorFieldResultVisitor, isClassElement); + } + function transformPrivateFieldInitializer(node) { + if (shouldTransformClassElementToWeakMap(node)) { + const info = accessPrivateIdentifier2(node.name); + Debug.assert(info, "Undeclared private name for property declaration."); + if (!info.isValid) { + return node; + } + if (info.isStatic && !shouldTransformPrivateElementsOrClassStaticBlocks) { + const statement = transformPropertyOrClassStaticBlock(node, factory2.createThis()); + if (statement) { + return factory2.createClassStaticBlockDeclaration(factory2.createBlock( + [statement], + /*multiLine*/ + true + )); + } + } + return void 0; + } + if (shouldTransformInitializersUsingSet && !isStatic(node) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) && lexicalEnvironment.data.facts & 16 /* WillHoistInitializersToConstructor */) { + return factory2.updatePropertyDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifierLike), + node.name, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + } + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + return factory2.updatePropertyDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + visitNode(node.name, propertyNameVisitor, isPropertyName), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + } + function transformPublicFieldInitializer(node) { + if (shouldTransformInitializers && !isAutoAccessorPropertyDeclaration(node)) { + const expr = getPropertyNameExpressionIfNeeded( + node.name, + /*shouldHoist*/ + !!node.initializer || useDefineForClassFields + ); + if (expr) { + getPendingExpressions().push(...flattenCommaList(expr)); + } + if (isStatic(node) && !shouldTransformPrivateElementsOrClassStaticBlocks) { + const initializerStatement = transformPropertyOrClassStaticBlock(node, factory2.createThis()); + if (initializerStatement) { + const staticBlock = factory2.createClassStaticBlockDeclaration( + factory2.createBlock([initializerStatement]) + ); + setOriginalNode(staticBlock, node); + setCommentRange(staticBlock, node); + setCommentRange(initializerStatement, { pos: -1, end: -1 }); + setSyntheticLeadingComments(initializerStatement, void 0); + setSyntheticTrailingComments(initializerStatement, void 0); + return staticBlock; + } + } + return void 0; + } + return factory2.updatePropertyDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + visitNode(node.name, propertyNameVisitor, isPropertyName), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + } + function transformFieldInitializer(node) { + Debug.assert(!hasDecorators(node), "Decorators should already have been transformed and elided."); + return isPrivateIdentifierClassElementDeclaration(node) ? transformPrivateFieldInitializer(node) : transformPublicFieldInitializer(node); + } + function shouldTransformAutoAccessorsInCurrentClass() { + return shouldTransformAutoAccessors === -1 /* True */ || shouldTransformAutoAccessors === 3 /* Maybe */ && !!(lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) && !!(lexicalEnvironment.data.facts & 16 /* WillHoistInitializersToConstructor */); + } + function visitPropertyDeclaration(node) { + if (isAutoAccessorPropertyDeclaration(node) && (shouldTransformAutoAccessorsInCurrentClass() || hasStaticModifier(node) && getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */)) { + return transformAutoAccessor(node); + } + return transformFieldInitializer(node); + } + function shouldForceDynamicThis() { + return !!currentClassElement && hasStaticModifier(currentClassElement) && isAccessor(currentClassElement) && isAutoAccessorPropertyDeclaration(getOriginalNode(currentClassElement)); + } + function ensureDynamicThisIfNeeded(node) { + if (shouldForceDynamicThis()) { + const innerExpression = skipOuterExpressions(node); + if (innerExpression.kind === 110 /* ThisKeyword */) { + noSubstitution.add(innerExpression); + } + } + } + function createPrivateIdentifierAccess(info, receiver) { + receiver = visitNode(receiver, visitor, isExpression); + ensureDynamicThisIfNeeded(receiver); + return createPrivateIdentifierAccessHelper(info, receiver); + } + function createPrivateIdentifierAccessHelper(info, receiver) { + setCommentRange(receiver, moveRangePos(receiver, -1)); + switch (info.kind) { + case "a" /* Accessor */: + return emitHelpers().createClassPrivateFieldGetHelper( + receiver, + info.brandCheckIdentifier, + info.kind, + info.getterName + ); + case "m" /* Method */: + return emitHelpers().createClassPrivateFieldGetHelper( + receiver, + info.brandCheckIdentifier, + info.kind, + info.methodName + ); + case "f" /* Field */: + return emitHelpers().createClassPrivateFieldGetHelper( + receiver, + info.brandCheckIdentifier, + info.kind, + info.isStatic ? info.variableName : void 0 + ); + case "untransformed": + return Debug.fail("Access helpers should not be created for untransformed private elements"); + default: + Debug.assertNever(info, "Unknown private element type"); + } + } + function visitPropertyAccessExpression(node) { + if (isPrivateIdentifier(node.name)) { + const privateIdentifierInfo = accessPrivateIdentifier2(node.name); + if (privateIdentifierInfo) { + return setTextRange( + setOriginalNode( + createPrivateIdentifierAccess(privateIdentifierInfo, node.expression), + node + ), + node + ); + } + } + if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(node) && isIdentifier(node.name) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data)) { + const { classConstructor, superClassReference, facts } = lexicalEnvironment.data; + if (facts & 1 /* ClassWasDecorated */) { + return visitInvalidSuperProperty(node); + } + if (classConstructor && superClassReference) { + const superProperty = factory2.createReflectGetCall( + superClassReference, + factory2.createStringLiteralFromNode(node.name), + classConstructor + ); + setOriginalNode(superProperty, node.expression); + setTextRange(superProperty, node.expression); + return superProperty; + } + } + return visitEachChild(node, visitor, context); + } + function visitElementAccessExpression(node) { + if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(node) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data)) { + const { classConstructor, superClassReference, facts } = lexicalEnvironment.data; + if (facts & 1 /* ClassWasDecorated */) { + return visitInvalidSuperProperty(node); + } + if (classConstructor && superClassReference) { + const superProperty = factory2.createReflectGetCall( + superClassReference, + visitNode(node.argumentExpression, visitor, isExpression), + classConstructor + ); + setOriginalNode(superProperty, node.expression); + setTextRange(superProperty, node.expression); + return superProperty; + } + } + return visitEachChild(node, visitor, context); + } + function visitPreOrPostfixUnaryExpression(node, discarded) { + if (node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) { + const operand = skipParentheses(node.operand); + if (isPrivateIdentifierPropertyAccessExpression(operand)) { + let info; + if (info = accessPrivateIdentifier2(operand.name)) { + const receiver = visitNode(operand.expression, visitor, isExpression); + ensureDynamicThisIfNeeded(receiver); + const { readExpression, initializeExpression } = createCopiableReceiverExpr(receiver); + let expression = createPrivateIdentifierAccess(info, readExpression); + const temp = isPrefixUnaryExpression(node) || discarded ? void 0 : factory2.createTempVariable(hoistVariableDeclaration); + expression = expandPreOrPostfixIncrementOrDecrementExpression(factory2, node, expression, hoistVariableDeclaration, temp); + expression = createPrivateIdentifierAssignment( + info, + initializeExpression || readExpression, + expression, + 64 /* EqualsToken */ + ); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } else if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(operand) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data)) { + const { classConstructor, superClassReference, facts } = lexicalEnvironment.data; + if (facts & 1 /* ClassWasDecorated */) { + const expression = visitInvalidSuperProperty(operand); + return isPrefixUnaryExpression(node) ? factory2.updatePrefixUnaryExpression(node, expression) : factory2.updatePostfixUnaryExpression(node, expression); + } + if (classConstructor && superClassReference) { + let setterName; + let getterName; + if (isPropertyAccessExpression(operand)) { + if (isIdentifier(operand.name)) { + getterName = setterName = factory2.createStringLiteralFromNode(operand.name); + } + } else { + if (isSimpleInlineableExpression(operand.argumentExpression)) { + getterName = setterName = operand.argumentExpression; + } else { + getterName = factory2.createTempVariable(hoistVariableDeclaration); + setterName = factory2.createAssignment(getterName, visitNode(operand.argumentExpression, visitor, isExpression)); + } + } + if (setterName && getterName) { + let expression = factory2.createReflectGetCall(superClassReference, getterName, classConstructor); + setTextRange(expression, operand); + const temp = discarded ? void 0 : factory2.createTempVariable(hoistVariableDeclaration); + expression = expandPreOrPostfixIncrementOrDecrementExpression(factory2, node, expression, hoistVariableDeclaration, temp); + expression = factory2.createReflectSetCall(superClassReference, setterName, expression, classConstructor); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + } + } + return visitEachChild(node, visitor, context); + } + function visitForStatement(node) { + return factory2.updateForStatement( + node, + visitNode(node.initializer, discardedValueVisitor, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, discardedValueVisitor, isExpression), + visitIterationBody(node.statement, visitor, context) + ); + } + function visitExpressionStatement(node) { + return factory2.updateExpressionStatement( + node, + visitNode(node.expression, discardedValueVisitor, isExpression) + ); + } + function createCopiableReceiverExpr(receiver) { + const clone2 = nodeIsSynthesized(receiver) ? receiver : factory2.cloneNode(receiver); + if (receiver.kind === 110 /* ThisKeyword */ && noSubstitution.has(receiver)) { + noSubstitution.add(clone2); + } + if (isSimpleInlineableExpression(receiver)) { + return { readExpression: clone2, initializeExpression: void 0 }; + } + const readExpression = factory2.createTempVariable(hoistVariableDeclaration); + const initializeExpression = factory2.createAssignment(readExpression, clone2); + return { readExpression, initializeExpression }; + } + function visitCallExpression(node) { + var _a; + if (isPrivateIdentifierPropertyAccessExpression(node.expression) && accessPrivateIdentifier2(node.expression.name)) { + const { thisArg, target } = factory2.createCallBinding(node.expression, hoistVariableDeclaration, languageVersion); + if (isCallChain(node)) { + return factory2.updateCallChain( + node, + factory2.createPropertyAccessChain(visitNode(target, visitor, isExpression), node.questionDotToken, "call"), + /*questionDotToken*/ + void 0, + /*typeArguments*/ + void 0, + [visitNode(thisArg, visitor, isExpression), ...visitNodes2(node.arguments, visitor, isExpression)] + ); + } + return factory2.updateCallExpression( + node, + factory2.createPropertyAccessExpression(visitNode(target, visitor, isExpression), "call"), + /*typeArguments*/ + void 0, + [visitNode(thisArg, visitor, isExpression), ...visitNodes2(node.arguments, visitor, isExpression)] + ); + } + if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(node.expression) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && ((_a = lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) == null ? void 0 : _a.classConstructor)) { + const invocation = factory2.createFunctionCallCall( + visitNode(node.expression, visitor, isExpression), + lexicalEnvironment.data.classConstructor, + visitNodes2(node.arguments, visitor, isExpression) + ); + setOriginalNode(invocation, node); + setTextRange(invocation, node); + return invocation; + } + return visitEachChild(node, visitor, context); + } + function visitTaggedTemplateExpression(node) { + var _a; + if (isPrivateIdentifierPropertyAccessExpression(node.tag) && accessPrivateIdentifier2(node.tag.name)) { + const { thisArg, target } = factory2.createCallBinding(node.tag, hoistVariableDeclaration, languageVersion); + return factory2.updateTaggedTemplateExpression( + node, + factory2.createCallExpression( + factory2.createPropertyAccessExpression(visitNode(target, visitor, isExpression), "bind"), + /*typeArguments*/ + void 0, + [visitNode(thisArg, visitor, isExpression)] + ), + /*typeArguments*/ + void 0, + visitNode(node.template, visitor, isTemplateLiteral) + ); + } + if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(node.tag) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && ((_a = lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) == null ? void 0 : _a.classConstructor)) { + const invocation = factory2.createFunctionBindCall( + visitNode(node.tag, visitor, isExpression), + lexicalEnvironment.data.classConstructor, + [] + ); + setOriginalNode(invocation, node); + setTextRange(invocation, node); + return factory2.updateTaggedTemplateExpression( + node, + invocation, + /*typeArguments*/ + void 0, + visitNode(node.template, visitor, isTemplateLiteral) + ); + } + return visitEachChild(node, visitor, context); + } + function transformClassStaticBlockDeclaration(node) { + if (lexicalEnvironment) { + lexicalEnvironmentMap.set(getOriginalNode(node), lexicalEnvironment); + } + if (shouldTransformPrivateElementsOrClassStaticBlocks) { + if (isClassThisAssignmentBlock(node)) { + const result = visitNode(node.body.statements[0].expression, visitor, isExpression); + if (isAssignmentExpression( + result, + /*excludeCompoundAssignment*/ + true + ) && result.left === result.right) { + return void 0; + } + return result; + } + if (isClassNamedEvaluationHelperBlock(node)) { + return visitNode(node.body.statements[0].expression, visitor, isExpression); + } + startLexicalEnvironment(); + let statements = setCurrentClassElementAnd( + node, + (statements2) => visitNodes2(statements2, visitor, isStatement), + node.body.statements + ); + statements = factory2.mergeLexicalEnvironment(statements, endLexicalEnvironment()); + const iife = factory2.createImmediatelyInvokedArrowFunction(statements); + setOriginalNode(skipParentheses(iife.expression), node); + addEmitFlags(skipParentheses(iife.expression), 4 /* AdviseOnEmitNode */); + setOriginalNode(iife, node); + setTextRange(iife, node); + return iife; + } + } + function isAnonymousClassNeedingAssignedName(node) { + if (isClassExpression(node) && !node.name) { + const staticPropertiesOrClassStaticBlocks = getStaticPropertiesAndClassStaticBlock(node); + if (some(staticPropertiesOrClassStaticBlocks, isClassNamedEvaluationHelperBlock)) { + return false; + } + const hasTransformableStatics = (shouldTransformPrivateElementsOrClassStaticBlocks || !!(getInternalEmitFlags(node) && 32 /* TransformPrivateStaticElements */)) && some(staticPropertiesOrClassStaticBlocks, (node2) => isClassStaticBlockDeclaration(node2) || isPrivateIdentifierClassElementDeclaration(node2) || shouldTransformInitializers && isInitializedProperty(node2)); + return hasTransformableStatics; + } + return false; + } + function visitBinaryExpression(node, discarded) { + if (isDestructuringAssignment(node)) { + const savedPendingExpressions = pendingExpressions; + pendingExpressions = void 0; + node = factory2.updateBinaryExpression( + node, + visitNode(node.left, assignmentTargetVisitor, isExpression), + node.operatorToken, + visitNode(node.right, visitor, isExpression) + ); + const expr = some(pendingExpressions) ? factory2.inlineExpressions(compact([...pendingExpressions, node])) : node; + pendingExpressions = savedPendingExpressions; + return expr; + } + if (isAssignmentExpression(node)) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + Debug.assertNode(node, isAssignmentExpression); + } + const left = skipOuterExpressions(node.left, 8 /* PartiallyEmittedExpressions */ | 1 /* Parentheses */); + if (isPrivateIdentifierPropertyAccessExpression(left)) { + const info = accessPrivateIdentifier2(left.name); + if (info) { + return setTextRange( + setOriginalNode( + createPrivateIdentifierAssignment(info, left.expression, node.right, node.operatorToken.kind), + node + ), + node + ); + } + } else if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(node.left) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data)) { + const { classConstructor, superClassReference, facts } = lexicalEnvironment.data; + if (facts & 1 /* ClassWasDecorated */) { + return factory2.updateBinaryExpression( + node, + visitInvalidSuperProperty(node.left), + node.operatorToken, + visitNode(node.right, visitor, isExpression) + ); + } + if (classConstructor && superClassReference) { + let setterName = isElementAccessExpression(node.left) ? visitNode(node.left.argumentExpression, visitor, isExpression) : isIdentifier(node.left.name) ? factory2.createStringLiteralFromNode(node.left.name) : void 0; + if (setterName) { + let expression = visitNode(node.right, visitor, isExpression); + if (isCompoundAssignment(node.operatorToken.kind)) { + let getterName = setterName; + if (!isSimpleInlineableExpression(setterName)) { + getterName = factory2.createTempVariable(hoistVariableDeclaration); + setterName = factory2.createAssignment(getterName, setterName); + } + const superPropertyGet = factory2.createReflectGetCall( + superClassReference, + getterName, + classConstructor + ); + setOriginalNode(superPropertyGet, node.left); + setTextRange(superPropertyGet, node.left); + expression = factory2.createBinaryExpression( + superPropertyGet, + getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), + expression + ); + setTextRange(expression, node); + } + const temp = discarded ? void 0 : factory2.createTempVariable(hoistVariableDeclaration); + if (temp) { + expression = factory2.createAssignment(temp, expression); + setTextRange(temp, node); + } + expression = factory2.createReflectSetCall( + superClassReference, + setterName, + expression, + classConstructor + ); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + } + } + if (isPrivateIdentifierInExpression(node)) { + return transformPrivateIdentifierInInExpression(node); + } + return visitEachChild(node, visitor, context); + } + function visitCommaListExpression(node, discarded) { + const elements = discarded ? visitCommaListElements(node.elements, discardedValueVisitor) : visitCommaListElements(node.elements, visitor, discardedValueVisitor); + return factory2.updateCommaListExpression(node, elements); + } + function visitParenthesizedExpression(node, discarded) { + const visitorFunc = discarded ? discardedValueVisitor : visitor; + const expression = visitNode(node.expression, visitorFunc, isExpression); + return factory2.updateParenthesizedExpression(node, expression); + } + function createPrivateIdentifierAssignment(info, receiver, right, operator) { + receiver = visitNode(receiver, visitor, isExpression); + right = visitNode(right, visitor, isExpression); + ensureDynamicThisIfNeeded(receiver); + if (isCompoundAssignment(operator)) { + const { readExpression, initializeExpression } = createCopiableReceiverExpr(receiver); + receiver = initializeExpression || readExpression; + right = factory2.createBinaryExpression( + createPrivateIdentifierAccessHelper(info, readExpression), + getNonAssignmentOperatorForCompoundAssignment(operator), + right + ); + } + setCommentRange(receiver, moveRangePos(receiver, -1)); + switch (info.kind) { + case "a" /* Accessor */: + return emitHelpers().createClassPrivateFieldSetHelper( + receiver, + info.brandCheckIdentifier, + right, + info.kind, + info.setterName + ); + case "m" /* Method */: + return emitHelpers().createClassPrivateFieldSetHelper( + receiver, + info.brandCheckIdentifier, + right, + info.kind, + /*f*/ + void 0 + ); + case "f" /* Field */: + return emitHelpers().createClassPrivateFieldSetHelper( + receiver, + info.brandCheckIdentifier, + right, + info.kind, + info.isStatic ? info.variableName : void 0 + ); + case "untransformed": + return Debug.fail("Access helpers should not be created for untransformed private elements"); + default: + Debug.assertNever(info, "Unknown private element type"); + } + } + function getPrivateInstanceMethodsAndAccessors(node) { + return filter(node.members, isNonStaticMethodOrAccessorWithPrivateName); + } + function getClassFacts(node) { + var _a; + let facts = 0 /* None */; + const original = getOriginalNode(node); + if (isClassLike(original) && classOrConstructorParameterIsDecorated(legacyDecorators, original)) { + facts |= 1 /* ClassWasDecorated */; + } + if (shouldTransformPrivateElementsOrClassStaticBlocks && (classHasClassThisAssignment(node) || classHasExplicitlyAssignedName(node))) { + facts |= 2 /* NeedsClassConstructorReference */; + } + let containsPublicInstanceFields = false; + let containsInitializedPublicInstanceFields = false; + let containsInstancePrivateElements = false; + let containsInstanceAutoAccessors = false; + for (const member of node.members) { + if (isStatic(member)) { + if (member.name && (isPrivateIdentifier(member.name) || isAutoAccessorPropertyDeclaration(member)) && shouldTransformPrivateElementsOrClassStaticBlocks) { + facts |= 2 /* NeedsClassConstructorReference */; + } else if (isAutoAccessorPropertyDeclaration(member) && shouldTransformAutoAccessors === -1 /* True */ && !node.name && !((_a = node.emitNode) == null ? void 0 : _a.classThis)) { + facts |= 2 /* NeedsClassConstructorReference */; + } + if (isPropertyDeclaration(member) || isClassStaticBlockDeclaration(member)) { + if (shouldTransformThisInStaticInitializers && member.transformFlags & 16384 /* ContainsLexicalThis */) { + facts |= 8 /* NeedsSubstitutionForThisInClassStaticField */; + if (!(facts & 1 /* ClassWasDecorated */)) { + facts |= 2 /* NeedsClassConstructorReference */; + } + } + if (shouldTransformSuperInStaticInitializers && member.transformFlags & 134217728 /* ContainsLexicalSuper */) { + if (!(facts & 1 /* ClassWasDecorated */)) { + facts |= 2 /* NeedsClassConstructorReference */ | 4 /* NeedsClassSuperReference */; + } + } + } + } else if (!hasAbstractModifier(getOriginalNode(member))) { + if (isAutoAccessorPropertyDeclaration(member)) { + containsInstanceAutoAccessors = true; + containsInstancePrivateElements || (containsInstancePrivateElements = isPrivateIdentifierClassElementDeclaration(member)); + } else if (isPrivateIdentifierClassElementDeclaration(member)) { + containsInstancePrivateElements = true; + if (resolver.hasNodeCheckFlag(member, 262144 /* ContainsConstructorReference */)) { + facts |= 2 /* NeedsClassConstructorReference */; + } + } else if (isPropertyDeclaration(member)) { + containsPublicInstanceFields = true; + containsInitializedPublicInstanceFields || (containsInitializedPublicInstanceFields = !!member.initializer); + } + } + } + const willHoistInitializersToConstructor = shouldTransformInitializersUsingDefine && containsPublicInstanceFields || shouldTransformInitializersUsingSet && containsInitializedPublicInstanceFields || shouldTransformPrivateElementsOrClassStaticBlocks && containsInstancePrivateElements || shouldTransformPrivateElementsOrClassStaticBlocks && containsInstanceAutoAccessors && shouldTransformAutoAccessors === -1 /* True */; + if (willHoistInitializersToConstructor) { + facts |= 16 /* WillHoistInitializersToConstructor */; + } + return facts; + } + function visitExpressionWithTypeArgumentsInHeritageClause(node) { + var _a; + const facts = ((_a = lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) == null ? void 0 : _a.facts) || 0 /* None */; + if (facts & 4 /* NeedsClassSuperReference */) { + const temp = factory2.createTempVariable( + hoistVariableDeclaration, + /*reservedInNestedScopes*/ + true + ); + getClassLexicalEnvironment().superClassReference = temp; + return factory2.updateExpressionWithTypeArguments( + node, + factory2.createAssignment( + temp, + visitNode(node.expression, visitor, isExpression) + ), + /*typeArguments*/ + void 0 + ); + } + return visitEachChild(node, visitor, context); + } + function visitInNewClassLexicalEnvironment(node, visitor2) { + var _a; + const savedCurrentClassContainer = currentClassContainer; + const savedPendingExpressions = pendingExpressions; + const savedLexicalEnvironment = lexicalEnvironment; + currentClassContainer = node; + pendingExpressions = void 0; + startClassLexicalEnvironment(); + const shouldAlwaysTransformPrivateStaticElements = getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */; + if (shouldTransformPrivateElementsOrClassStaticBlocks || shouldAlwaysTransformPrivateStaticElements) { + const name = getNameOfDeclaration(node); + if (name && isIdentifier(name)) { + getPrivateIdentifierEnvironment().data.className = name; + } else if ((_a = node.emitNode) == null ? void 0 : _a.assignedName) { + if (isStringLiteral(node.emitNode.assignedName)) { + if (node.emitNode.assignedName.textSourceNode && isIdentifier(node.emitNode.assignedName.textSourceNode)) { + getPrivateIdentifierEnvironment().data.className = node.emitNode.assignedName.textSourceNode; + } else if (isIdentifierText(node.emitNode.assignedName.text, languageVersion)) { + const prefixName = factory2.createIdentifier(node.emitNode.assignedName.text); + getPrivateIdentifierEnvironment().data.className = prefixName; + } + } + } + } + if (shouldTransformPrivateElementsOrClassStaticBlocks) { + const privateInstanceMethodsAndAccessors = getPrivateInstanceMethodsAndAccessors(node); + if (some(privateInstanceMethodsAndAccessors)) { + getPrivateIdentifierEnvironment().data.weakSetName = createHoistedVariableForClass( + "instances", + privateInstanceMethodsAndAccessors[0].name + ); + } + } + const facts = getClassFacts(node); + if (facts) { + getClassLexicalEnvironment().facts = facts; + } + if (facts & 8 /* NeedsSubstitutionForThisInClassStaticField */) { + enableSubstitutionForClassStaticThisOrSuperReference(); + } + const result = visitor2(node, facts); + endClassLexicalEnvironment(); + Debug.assert(lexicalEnvironment === savedLexicalEnvironment); + currentClassContainer = savedCurrentClassContainer; + pendingExpressions = savedPendingExpressions; + return result; + } + function visitClassDeclaration(node) { + return visitInNewClassLexicalEnvironment(node, visitClassDeclarationInNewClassLexicalEnvironment); + } + function visitClassDeclarationInNewClassLexicalEnvironment(node, facts) { + var _a, _b; + let pendingClassReferenceAssignment; + if (facts & 2 /* NeedsClassConstructorReference */) { + if (shouldTransformPrivateElementsOrClassStaticBlocks && ((_a = node.emitNode) == null ? void 0 : _a.classThis)) { + getClassLexicalEnvironment().classConstructor = node.emitNode.classThis; + pendingClassReferenceAssignment = factory2.createAssignment(node.emitNode.classThis, factory2.getInternalName(node)); + } else { + const temp = factory2.createTempVariable( + hoistVariableDeclaration, + /*reservedInNestedScopes*/ + true + ); + getClassLexicalEnvironment().classConstructor = factory2.cloneNode(temp); + pendingClassReferenceAssignment = factory2.createAssignment(temp, factory2.getInternalName(node)); + } + } + if ((_b = node.emitNode) == null ? void 0 : _b.classThis) { + getClassLexicalEnvironment().classThis = node.emitNode.classThis; + } + const isClassWithConstructorReference = resolver.hasNodeCheckFlag(node, 262144 /* ContainsConstructorReference */); + const isExport = hasSyntacticModifier(node, 32 /* Export */); + const isDefault = hasSyntacticModifier(node, 2048 /* Default */); + let modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const heritageClauses = visitNodes2(node.heritageClauses, heritageClauseVisitor, isHeritageClause); + const { members, prologue } = transformClassMembers(node); + const statements = []; + if (pendingClassReferenceAssignment) { + getPendingExpressions().unshift(pendingClassReferenceAssignment); + } + if (some(pendingExpressions)) { + statements.push(factory2.createExpressionStatement(factory2.inlineExpressions(pendingExpressions))); + } + if (shouldTransformInitializersUsingSet || shouldTransformPrivateElementsOrClassStaticBlocks || getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */) { + const staticProperties = getStaticPropertiesAndClassStaticBlock(node); + if (some(staticProperties)) { + addPropertyOrClassStaticBlockStatements(statements, staticProperties, factory2.getInternalName(node)); + } + } + if (statements.length > 0 && isExport && isDefault) { + modifiers = visitNodes2(modifiers, (node2) => isExportOrDefaultModifier(node2) ? void 0 : node2, isModifier); + statements.push(factory2.createExportAssignment( + /*modifiers*/ + void 0, + /*isExportEquals*/ + false, + factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ) + )); + } + const alias = getClassLexicalEnvironment().classConstructor; + if (isClassWithConstructorReference && alias) { + enableSubstitutionForClassAliases(); + classAliases[getOriginalNodeId(node)] = alias; + } + const classDecl = factory2.updateClassDeclaration( + node, + modifiers, + node.name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + statements.unshift(classDecl); + if (prologue) { + statements.unshift(factory2.createExpressionStatement(prologue)); + } + return statements; + } + function visitClassExpression(node) { + return visitInNewClassLexicalEnvironment(node, visitClassExpressionInNewClassLexicalEnvironment); + } + function visitClassExpressionInNewClassLexicalEnvironment(node, facts) { + var _a, _b, _c; + const isDecoratedClassDeclaration = !!(facts & 1 /* ClassWasDecorated */); + const staticPropertiesOrClassStaticBlocks = getStaticPropertiesAndClassStaticBlock(node); + const isClassWithConstructorReference = resolver.hasNodeCheckFlag(node, 262144 /* ContainsConstructorReference */); + const requiresBlockScopedVar = resolver.hasNodeCheckFlag(node, 32768 /* BlockScopedBindingInLoop */); + let temp; + function createClassTempVar() { + var _a2; + if (shouldTransformPrivateElementsOrClassStaticBlocks && ((_a2 = node.emitNode) == null ? void 0 : _a2.classThis)) { + return getClassLexicalEnvironment().classConstructor = node.emitNode.classThis; + } + const temp2 = factory2.createTempVariable( + requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, + /*reservedInNestedScopes*/ + true + ); + getClassLexicalEnvironment().classConstructor = factory2.cloneNode(temp2); + return temp2; + } + if ((_a = node.emitNode) == null ? void 0 : _a.classThis) { + getClassLexicalEnvironment().classThis = node.emitNode.classThis; + } + if (facts & 2 /* NeedsClassConstructorReference */) { + temp ?? (temp = createClassTempVar()); + } + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const heritageClauses = visitNodes2(node.heritageClauses, heritageClauseVisitor, isHeritageClause); + const { members, prologue } = transformClassMembers(node); + const classExpression = factory2.updateClassExpression( + node, + modifiers, + node.name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + const expressions = []; + if (prologue) { + expressions.push(prologue); + } + const hasTransformableStatics = (shouldTransformPrivateElementsOrClassStaticBlocks || getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */) && some(staticPropertiesOrClassStaticBlocks, (node2) => isClassStaticBlockDeclaration(node2) || isPrivateIdentifierClassElementDeclaration(node2) || shouldTransformInitializers && isInitializedProperty(node2)); + if (hasTransformableStatics || some(pendingExpressions)) { + if (isDecoratedClassDeclaration) { + Debug.assertIsDefined(pendingStatements, "Decorated classes transformed by TypeScript are expected to be within a variable declaration."); + if (some(pendingExpressions)) { + addRange(pendingStatements, map(pendingExpressions, factory2.createExpressionStatement)); + } + if (some(staticPropertiesOrClassStaticBlocks)) { + addPropertyOrClassStaticBlockStatements(pendingStatements, staticPropertiesOrClassStaticBlocks, ((_b = node.emitNode) == null ? void 0 : _b.classThis) ?? factory2.getInternalName(node)); + } + if (temp) { + expressions.push(factory2.createAssignment(temp, classExpression)); + } else if (shouldTransformPrivateElementsOrClassStaticBlocks && ((_c = node.emitNode) == null ? void 0 : _c.classThis)) { + expressions.push(factory2.createAssignment(node.emitNode.classThis, classExpression)); + } else { + expressions.push(classExpression); + } + } else { + temp ?? (temp = createClassTempVar()); + if (isClassWithConstructorReference) { + enableSubstitutionForClassAliases(); + const alias = factory2.cloneNode(temp); + alias.emitNode.autoGenerate.flags &= ~8 /* ReservedInNestedScopes */; + classAliases[getOriginalNodeId(node)] = alias; + } + expressions.push(factory2.createAssignment(temp, classExpression)); + addRange(expressions, pendingExpressions); + addRange(expressions, generateInitializedPropertyExpressionsOrClassStaticBlock(staticPropertiesOrClassStaticBlocks, temp)); + expressions.push(factory2.cloneNode(temp)); + } + } else { + expressions.push(classExpression); + } + if (expressions.length > 1) { + addEmitFlags(classExpression, 131072 /* Indented */); + expressions.forEach(startOnNewLine); + } + return factory2.inlineExpressions(expressions); + } + function visitClassStaticBlockDeclaration(node) { + if (!shouldTransformPrivateElementsOrClassStaticBlocks) { + return visitEachChild(node, visitor, context); + } + return void 0; + } + function visitThisExpression(node) { + if (shouldTransformThisInStaticInitializers && currentClassElement && isClassStaticBlockDeclaration(currentClassElement) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data)) { + const { classThis, classConstructor } = lexicalEnvironment.data; + return classThis ?? classConstructor ?? node; + } + return node; + } + function transformClassMembers(node) { + const shouldTransformPrivateStaticElementsInClass = !!(getInternalEmitFlags(node) & 32 /* TransformPrivateStaticElements */); + if (shouldTransformPrivateElementsOrClassStaticBlocks || shouldTransformPrivateStaticElementsInFile) { + for (const member of node.members) { + if (isPrivateIdentifierClassElementDeclaration(member)) { + if (shouldTransformClassElementToWeakMap(member)) { + addPrivateIdentifierToEnvironment(member, member.name, addPrivateIdentifierClassElementToEnvironment); + } else { + const privateEnv = getPrivateIdentifierEnvironment(); + setPrivateIdentifier(privateEnv, member.name, { kind: "untransformed" }); + } + } + } + if (shouldTransformPrivateElementsOrClassStaticBlocks) { + if (some(getPrivateInstanceMethodsAndAccessors(node))) { + createBrandCheckWeakSetForPrivateMethods(); + } + } + if (shouldTransformAutoAccessorsInCurrentClass()) { + for (const member of node.members) { + if (isAutoAccessorPropertyDeclaration(member)) { + const storageName = factory2.getGeneratedPrivateNameForNode( + member.name, + /*prefix*/ + void 0, + "_accessor_storage" + ); + if (shouldTransformPrivateElementsOrClassStaticBlocks || shouldTransformPrivateStaticElementsInClass && hasStaticModifier(member)) { + addPrivateIdentifierToEnvironment(member, storageName, addPrivateIdentifierPropertyDeclarationToEnvironment); + } else { + const privateEnv = getPrivateIdentifierEnvironment(); + setPrivateIdentifier(privateEnv, storageName, { kind: "untransformed" }); + } + } + } + } + } + let members = visitNodes2(node.members, classElementVisitor, isClassElement); + let syntheticConstructor; + if (!some(members, isConstructorDeclaration)) { + syntheticConstructor = transformConstructor( + /*constructor*/ + void 0, + node + ); + } + let prologue; + let syntheticStaticBlock; + if (!shouldTransformPrivateElementsOrClassStaticBlocks && some(pendingExpressions)) { + let statement = factory2.createExpressionStatement(factory2.inlineExpressions(pendingExpressions)); + if (statement.transformFlags & 134234112 /* ContainsLexicalThisOrSuper */) { + const temp = factory2.createTempVariable(hoistVariableDeclaration); + const arrow = factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + [], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + factory2.createBlock([statement]) + ); + prologue = factory2.createAssignment(temp, arrow); + statement = factory2.createExpressionStatement(factory2.createCallExpression( + temp, + /*typeArguments*/ + void 0, + [] + )); + } + const block = factory2.createBlock([statement]); + syntheticStaticBlock = factory2.createClassStaticBlockDeclaration(block); + pendingExpressions = void 0; + } + if (syntheticConstructor || syntheticStaticBlock) { + let membersArray; + const classThisAssignmentBlock = find(members, isClassThisAssignmentBlock); + const classNamedEvaluationHelperBlock = find(members, isClassNamedEvaluationHelperBlock); + membersArray = append(membersArray, classThisAssignmentBlock); + membersArray = append(membersArray, classNamedEvaluationHelperBlock); + membersArray = append(membersArray, syntheticConstructor); + membersArray = append(membersArray, syntheticStaticBlock); + const remainingMembers = classThisAssignmentBlock || classNamedEvaluationHelperBlock ? filter(members, (member) => member !== classThisAssignmentBlock && member !== classNamedEvaluationHelperBlock) : members; + membersArray = addRange(membersArray, remainingMembers); + members = setTextRange( + factory2.createNodeArray(membersArray), + /*location*/ + node.members + ); + } + return { members, prologue }; + } + function createBrandCheckWeakSetForPrivateMethods() { + const { weakSetName } = getPrivateIdentifierEnvironment().data; + Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); + getPendingExpressions().push( + factory2.createAssignment( + weakSetName, + factory2.createNewExpression( + factory2.createIdentifier("WeakSet"), + /*typeArguments*/ + void 0, + [] + ) + ) + ); + } + function transformConstructor(constructor, container) { + constructor = visitNode(constructor, visitor, isConstructorDeclaration); + if (!(lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) || !(lexicalEnvironment.data.facts & 16 /* WillHoistInitializersToConstructor */)) { + return constructor; + } + const extendsClauseElement = getEffectiveBaseTypeNode(container); + const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== 106 /* NullKeyword */); + const parameters = visitParameterList(constructor ? constructor.parameters : void 0, visitor, context); + const body = transformConstructorBody(container, constructor, isDerivedClass); + if (!body) { + return constructor; + } + if (constructor) { + Debug.assert(parameters); + return factory2.updateConstructorDeclaration( + constructor, + /*modifiers*/ + void 0, + parameters, + body + ); + } + return startOnNewLine( + setOriginalNode( + setTextRange( + factory2.createConstructorDeclaration( + /*modifiers*/ + void 0, + parameters ?? [], + body + ), + constructor || container + ), + constructor + ) + ); + } + function transformConstructorBodyWorker(statementsOut, statementsIn, statementOffset, superPath, superPathDepth, initializerStatements, constructor) { + const superStatementIndex = superPath[superPathDepth]; + const superStatement = statementsIn[superStatementIndex]; + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, statementOffset, superStatementIndex - statementOffset)); + statementOffset = superStatementIndex + 1; + if (isTryStatement(superStatement)) { + const tryBlockStatements = []; + transformConstructorBodyWorker( + tryBlockStatements, + superStatement.tryBlock.statements, + /*statementOffset*/ + 0, + superPath, + superPathDepth + 1, + initializerStatements, + constructor + ); + const tryBlockStatementsArray = factory2.createNodeArray(tryBlockStatements); + setTextRange(tryBlockStatementsArray, superStatement.tryBlock.statements); + statementsOut.push(factory2.updateTryStatement( + superStatement, + factory2.updateBlock(superStatement.tryBlock, tryBlockStatements), + visitNode(superStatement.catchClause, visitor, isCatchClause), + visitNode(superStatement.finallyBlock, visitor, isBlock) + )); + } else { + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, superStatementIndex, 1)); + while (statementOffset < statementsIn.length) { + const statement = statementsIn[statementOffset]; + if (isParameterPropertyDeclaration(getOriginalNode(statement), constructor)) { + statementOffset++; + } else { + break; + } + } + addRange(statementsOut, initializerStatements); + } + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, statementOffset)); + } + function transformConstructorBody(node, constructor, isDerivedClass) { + var _a; + const instanceProperties = getProperties( + node, + /*requireInitializer*/ + false, + /*isStatic*/ + false + ); + let properties = instanceProperties; + if (!useDefineForClassFields) { + properties = filter(properties, (property) => !!property.initializer || isPrivateIdentifier(property.name) || hasAccessorModifier(property)); + } + const privateMethodsAndAccessors = getPrivateInstanceMethodsAndAccessors(node); + const needsConstructorBody = some(properties) || some(privateMethodsAndAccessors); + if (!constructor && !needsConstructorBody) { + return visitFunctionBody( + /*node*/ + void 0, + visitor, + context + ); + } + resumeLexicalEnvironment(); + const needsSyntheticConstructor = !constructor && isDerivedClass; + let statementOffset = 0; + let statements = []; + const initializerStatements = []; + const receiver = factory2.createThis(); + addInstanceMethodStatements(initializerStatements, privateMethodsAndAccessors, receiver); + if (constructor) { + const parameterProperties = filter(instanceProperties, (prop) => isParameterPropertyDeclaration(getOriginalNode(prop), constructor)); + const nonParameterProperties = filter(properties, (prop) => !isParameterPropertyDeclaration(getOriginalNode(prop), constructor)); + addPropertyOrClassStaticBlockStatements(initializerStatements, parameterProperties, receiver); + addPropertyOrClassStaticBlockStatements(initializerStatements, nonParameterProperties, receiver); + } else { + addPropertyOrClassStaticBlockStatements(initializerStatements, properties, receiver); + } + if (constructor == null ? void 0 : constructor.body) { + statementOffset = factory2.copyPrologue( + constructor.body.statements, + statements, + /*ensureUseStrict*/ + false, + visitor + ); + const superStatementIndices = findSuperStatementIndexPath(constructor.body.statements, statementOffset); + if (superStatementIndices.length) { + transformConstructorBodyWorker( + statements, + constructor.body.statements, + statementOffset, + superStatementIndices, + /*superPathDepth*/ + 0, + initializerStatements, + constructor + ); + } else { + while (statementOffset < constructor.body.statements.length) { + const statement = constructor.body.statements[statementOffset]; + if (isParameterPropertyDeclaration(getOriginalNode(statement), constructor)) { + statementOffset++; + } else { + break; + } + } + addRange(statements, initializerStatements); + addRange(statements, visitNodes2(constructor.body.statements, visitor, isStatement, statementOffset)); + } + } else { + if (needsSyntheticConstructor) { + statements.push( + factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createSuper(), + /*typeArguments*/ + void 0, + [factory2.createSpreadElement(factory2.createIdentifier("arguments"))] + ) + ) + ); + } + addRange(statements, initializerStatements); + } + statements = factory2.mergeLexicalEnvironment(statements, endLexicalEnvironment()); + if (statements.length === 0 && !constructor) { + return void 0; + } + const multiLine = (constructor == null ? void 0 : constructor.body) && constructor.body.statements.length >= statements.length ? constructor.body.multiLine ?? statements.length > 0 : statements.length > 0; + return setTextRange( + factory2.createBlock( + setTextRange( + factory2.createNodeArray(statements), + /*location*/ + ((_a = constructor == null ? void 0 : constructor.body) == null ? void 0 : _a.statements) ?? node.members + ), + multiLine + ), + /*location*/ + constructor == null ? void 0 : constructor.body + ); + } + function addPropertyOrClassStaticBlockStatements(statements, properties, receiver) { + for (const property of properties) { + if (isStatic(property) && !shouldTransformPrivateElementsOrClassStaticBlocks) { + continue; + } + const statement = transformPropertyOrClassStaticBlock(property, receiver); + if (!statement) { + continue; + } + statements.push(statement); + } + } + function transformPropertyOrClassStaticBlock(property, receiver) { + const expression = isClassStaticBlockDeclaration(property) ? setCurrentClassElementAnd(property, transformClassStaticBlockDeclaration, property) : transformProperty(property, receiver); + if (!expression) { + return void 0; + } + const statement = factory2.createExpressionStatement(expression); + setOriginalNode(statement, property); + addEmitFlags(statement, getEmitFlags(property) & 3072 /* NoComments */); + setCommentRange(statement, property); + const propertyOriginalNode = getOriginalNode(property); + if (isParameter(propertyOriginalNode)) { + setSourceMapRange(statement, propertyOriginalNode); + removeAllComments(statement); + } else { + setSourceMapRange(statement, moveRangePastModifiers(property)); + } + setSyntheticLeadingComments(expression, void 0); + setSyntheticTrailingComments(expression, void 0); + if (hasAccessorModifier(propertyOriginalNode)) { + addEmitFlags(statement, 3072 /* NoComments */); + } + return statement; + } + function generateInitializedPropertyExpressionsOrClassStaticBlock(propertiesOrClassStaticBlocks, receiver) { + const expressions = []; + for (const property of propertiesOrClassStaticBlocks) { + const expression = isClassStaticBlockDeclaration(property) ? setCurrentClassElementAnd(property, transformClassStaticBlockDeclaration, property) : setCurrentClassElementAnd( + property, + () => transformProperty(property, receiver), + /*arg*/ + void 0 + ); + if (!expression) { + continue; + } + startOnNewLine(expression); + setOriginalNode(expression, property); + addEmitFlags(expression, getEmitFlags(property) & 3072 /* NoComments */); + setSourceMapRange(expression, moveRangePastModifiers(property)); + setCommentRange(expression, property); + expressions.push(expression); + } + return expressions; + } + function transformProperty(property, receiver) { + var _a; + const savedCurrentClassElement = currentClassElement; + const transformed = transformPropertyWorker(property, receiver); + if (transformed && hasStaticModifier(property) && ((_a = lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) == null ? void 0 : _a.facts)) { + setOriginalNode(transformed, property); + addEmitFlags(transformed, 4 /* AdviseOnEmitNode */); + setSourceMapRange(transformed, getSourceMapRange(property.name)); + lexicalEnvironmentMap.set(getOriginalNode(property), lexicalEnvironment); + } + currentClassElement = savedCurrentClassElement; + return transformed; + } + function transformPropertyWorker(property, receiver) { + const emitAssignment = !useDefineForClassFields; + if (isNamedEvaluation(property, isAnonymousClassNeedingAssignedName)) { + property = transformNamedEvaluation(context, property); + } + const propertyName = hasAccessorModifier(property) ? factory2.getGeneratedPrivateNameForNode(property.name) : isComputedPropertyName(property.name) && !isSimpleInlineableExpression(property.name.expression) ? factory2.updateComputedPropertyName(property.name, factory2.getGeneratedNameForNode(property.name)) : property.name; + if (hasStaticModifier(property)) { + currentClassElement = property; + } + if (isPrivateIdentifier(propertyName) && shouldTransformClassElementToWeakMap(property)) { + const privateIdentifierInfo = accessPrivateIdentifier2(propertyName); + if (privateIdentifierInfo) { + if (privateIdentifierInfo.kind === "f" /* Field */) { + if (!privateIdentifierInfo.isStatic) { + return createPrivateInstanceFieldInitializer( + factory2, + receiver, + visitNode(property.initializer, visitor, isExpression), + privateIdentifierInfo.brandCheckIdentifier + ); + } else { + return createPrivateStaticFieldInitializer( + factory2, + privateIdentifierInfo.variableName, + visitNode(property.initializer, visitor, isExpression) + ); + } + } else { + return void 0; + } + } else { + Debug.fail("Undeclared private name for property declaration."); + } + } + if ((isPrivateIdentifier(propertyName) || hasStaticModifier(property)) && !property.initializer) { + return void 0; + } + const propertyOriginalNode = getOriginalNode(property); + if (hasSyntacticModifier(propertyOriginalNode, 64 /* Abstract */)) { + return void 0; + } + let initializer = visitNode(property.initializer, visitor, isExpression); + if (isParameterPropertyDeclaration(propertyOriginalNode, propertyOriginalNode.parent) && isIdentifier(propertyName)) { + const localName = factory2.cloneNode(propertyName); + if (initializer) { + if (isParenthesizedExpression(initializer) && isCommaExpression(initializer.expression) && isCallToHelper(initializer.expression.left, "___runInitializers") && isVoidExpression(initializer.expression.right) && isNumericLiteral(initializer.expression.right.expression)) { + initializer = initializer.expression.left; + } + initializer = factory2.inlineExpressions([initializer, localName]); + } else { + initializer = localName; + } + setEmitFlags(propertyName, 3072 /* NoComments */ | 96 /* NoSourceMap */); + setSourceMapRange(localName, propertyOriginalNode.name); + setEmitFlags(localName, 3072 /* NoComments */); + } else { + initializer ?? (initializer = factory2.createVoidZero()); + } + if (emitAssignment || isPrivateIdentifier(propertyName)) { + const memberAccess = createMemberAccessForPropertyName( + factory2, + receiver, + propertyName, + /*location*/ + propertyName + ); + addEmitFlags(memberAccess, 1024 /* NoLeadingComments */); + const expression = factory2.createAssignment(memberAccess, initializer); + return expression; + } else { + const name = isComputedPropertyName(propertyName) ? propertyName.expression : isIdentifier(propertyName) ? factory2.createStringLiteral(unescapeLeadingUnderscores(propertyName.escapedText)) : propertyName; + const descriptor = factory2.createPropertyDescriptor({ value: initializer, configurable: true, writable: true, enumerable: true }); + return factory2.createObjectDefinePropertyCall(receiver, name, descriptor); + } + } + function enableSubstitutionForClassAliases() { + if ((enabledSubstitutions & 1 /* ClassAliases */) === 0) { + enabledSubstitutions |= 1 /* ClassAliases */; + context.enableSubstitution(80 /* Identifier */); + classAliases = []; + } + } + function enableSubstitutionForClassStaticThisOrSuperReference() { + if ((enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */) === 0) { + enabledSubstitutions |= 2 /* ClassStaticThisOrSuperReference */; + context.enableSubstitution(110 /* ThisKeyword */); + context.enableEmitNotification(263 /* FunctionDeclaration */); + context.enableEmitNotification(219 /* FunctionExpression */); + context.enableEmitNotification(177 /* Constructor */); + context.enableEmitNotification(178 /* GetAccessor */); + context.enableEmitNotification(179 /* SetAccessor */); + context.enableEmitNotification(175 /* MethodDeclaration */); + context.enableEmitNotification(173 /* PropertyDeclaration */); + context.enableEmitNotification(168 /* ComputedPropertyName */); + } + } + function addInstanceMethodStatements(statements, methods, receiver) { + if (!shouldTransformPrivateElementsOrClassStaticBlocks || !some(methods)) { + return; + } + const { weakSetName } = getPrivateIdentifierEnvironment().data; + Debug.assert(weakSetName, "weakSetName should be set in private identifier environment"); + statements.push( + factory2.createExpressionStatement( + createPrivateInstanceMethodInitializer(factory2, receiver, weakSetName) + ) + ); + } + function visitInvalidSuperProperty(node) { + return isPropertyAccessExpression(node) ? factory2.updatePropertyAccessExpression( + node, + factory2.createVoidZero(), + node.name + ) : factory2.updateElementAccessExpression( + node, + factory2.createVoidZero(), + visitNode(node.argumentExpression, visitor, isExpression) + ); + } + function getPropertyNameExpressionIfNeeded(name, shouldHoist) { + if (isComputedPropertyName(name)) { + const cacheAssignment = findComputedPropertyNameCacheAssignment(name); + const expression = visitNode(name.expression, visitor, isExpression); + const innerExpression = skipPartiallyEmittedExpressions(expression); + const inlinable = isSimpleInlineableExpression(innerExpression); + const alreadyTransformed = !!cacheAssignment || isAssignmentExpression(innerExpression) && isGeneratedIdentifier(innerExpression.left); + if (!alreadyTransformed && !inlinable && shouldHoist) { + const generatedName = factory2.getGeneratedNameForNode(name); + if (resolver.hasNodeCheckFlag(name, 32768 /* BlockScopedBindingInLoop */)) { + addBlockScopedVariable(generatedName); + } else { + hoistVariableDeclaration(generatedName); + } + return factory2.createAssignment(generatedName, expression); + } + return inlinable || isIdentifier(innerExpression) ? void 0 : expression; + } + } + function startClassLexicalEnvironment() { + lexicalEnvironment = { previous: lexicalEnvironment, data: void 0 }; + } + function endClassLexicalEnvironment() { + lexicalEnvironment = lexicalEnvironment == null ? void 0 : lexicalEnvironment.previous; + } + function getClassLexicalEnvironment() { + Debug.assert(lexicalEnvironment); + return lexicalEnvironment.data ?? (lexicalEnvironment.data = { + facts: 0 /* None */, + classConstructor: void 0, + classThis: void 0, + superClassReference: void 0 + // privateIdentifierEnvironment: undefined, + }); + } + function getPrivateIdentifierEnvironment() { + Debug.assert(lexicalEnvironment); + return lexicalEnvironment.privateEnv ?? (lexicalEnvironment.privateEnv = newPrivateEnvironment({ + className: void 0, + weakSetName: void 0 + })); + } + function getPendingExpressions() { + return pendingExpressions ?? (pendingExpressions = []); + } + function addPrivateIdentifierClassElementToEnvironment(node, name, lex, privateEnv, isStatic2, isValid, previousInfo) { + if (isAutoAccessorPropertyDeclaration(node)) { + addPrivateIdentifierAutoAccessorPropertyDeclarationToEnvironment(node, name, lex, privateEnv, isStatic2, isValid, previousInfo); + } else if (isPropertyDeclaration(node)) { + addPrivateIdentifierPropertyDeclarationToEnvironment(node, name, lex, privateEnv, isStatic2, isValid, previousInfo); + } else if (isMethodDeclaration(node)) { + addPrivateIdentifierMethodDeclarationToEnvironment(node, name, lex, privateEnv, isStatic2, isValid, previousInfo); + } else if (isGetAccessorDeclaration(node)) { + addPrivateIdentifierGetAccessorDeclarationToEnvironment(node, name, lex, privateEnv, isStatic2, isValid, previousInfo); + } else if (isSetAccessorDeclaration(node)) { + addPrivateIdentifierSetAccessorDeclarationToEnvironment(node, name, lex, privateEnv, isStatic2, isValid, previousInfo); + } + } + function addPrivateIdentifierPropertyDeclarationToEnvironment(_node, name, lex, privateEnv, isStatic2, isValid, _previousInfo) { + if (isStatic2) { + const brandCheckIdentifier = Debug.checkDefined(lex.classThis ?? lex.classConstructor, "classConstructor should be set in private identifier environment"); + const variableName = createHoistedVariableForPrivateName(name); + setPrivateIdentifier(privateEnv, name, { + kind: "f" /* Field */, + isStatic: true, + brandCheckIdentifier, + variableName, + isValid + }); + } else { + const weakMapName = createHoistedVariableForPrivateName(name); + setPrivateIdentifier(privateEnv, name, { + kind: "f" /* Field */, + isStatic: false, + brandCheckIdentifier: weakMapName, + isValid + }); + getPendingExpressions().push(factory2.createAssignment( + weakMapName, + factory2.createNewExpression( + factory2.createIdentifier("WeakMap"), + /*typeArguments*/ + void 0, + [] + ) + )); + } + } + function addPrivateIdentifierMethodDeclarationToEnvironment(_node, name, lex, privateEnv, isStatic2, isValid, _previousInfo) { + const methodName = createHoistedVariableForPrivateName(name); + const brandCheckIdentifier = isStatic2 ? Debug.checkDefined(lex.classThis ?? lex.classConstructor, "classConstructor should be set in private identifier environment") : Debug.checkDefined(privateEnv.data.weakSetName, "weakSetName should be set in private identifier environment"); + setPrivateIdentifier(privateEnv, name, { + kind: "m" /* Method */, + methodName, + brandCheckIdentifier, + isStatic: isStatic2, + isValid + }); + } + function addPrivateIdentifierGetAccessorDeclarationToEnvironment(_node, name, lex, privateEnv, isStatic2, isValid, previousInfo) { + const getterName = createHoistedVariableForPrivateName(name, "_get"); + const brandCheckIdentifier = isStatic2 ? Debug.checkDefined(lex.classThis ?? lex.classConstructor, "classConstructor should be set in private identifier environment") : Debug.checkDefined(privateEnv.data.weakSetName, "weakSetName should be set in private identifier environment"); + if ((previousInfo == null ? void 0 : previousInfo.kind) === "a" /* Accessor */ && previousInfo.isStatic === isStatic2 && !previousInfo.getterName) { + previousInfo.getterName = getterName; + } else { + setPrivateIdentifier(privateEnv, name, { + kind: "a" /* Accessor */, + getterName, + setterName: void 0, + brandCheckIdentifier, + isStatic: isStatic2, + isValid + }); + } + } + function addPrivateIdentifierSetAccessorDeclarationToEnvironment(_node, name, lex, privateEnv, isStatic2, isValid, previousInfo) { + const setterName = createHoistedVariableForPrivateName(name, "_set"); + const brandCheckIdentifier = isStatic2 ? Debug.checkDefined(lex.classThis ?? lex.classConstructor, "classConstructor should be set in private identifier environment") : Debug.checkDefined(privateEnv.data.weakSetName, "weakSetName should be set in private identifier environment"); + if ((previousInfo == null ? void 0 : previousInfo.kind) === "a" /* Accessor */ && previousInfo.isStatic === isStatic2 && !previousInfo.setterName) { + previousInfo.setterName = setterName; + } else { + setPrivateIdentifier(privateEnv, name, { + kind: "a" /* Accessor */, + getterName: void 0, + setterName, + brandCheckIdentifier, + isStatic: isStatic2, + isValid + }); + } + } + function addPrivateIdentifierAutoAccessorPropertyDeclarationToEnvironment(_node, name, lex, privateEnv, isStatic2, isValid, _previousInfo) { + const getterName = createHoistedVariableForPrivateName(name, "_get"); + const setterName = createHoistedVariableForPrivateName(name, "_set"); + const brandCheckIdentifier = isStatic2 ? Debug.checkDefined(lex.classThis ?? lex.classConstructor, "classConstructor should be set in private identifier environment") : Debug.checkDefined(privateEnv.data.weakSetName, "weakSetName should be set in private identifier environment"); + setPrivateIdentifier(privateEnv, name, { + kind: "a" /* Accessor */, + getterName, + setterName, + brandCheckIdentifier, + isStatic: isStatic2, + isValid + }); + } + function addPrivateIdentifierToEnvironment(node, name, addDeclaration) { + const lex = getClassLexicalEnvironment(); + const privateEnv = getPrivateIdentifierEnvironment(); + const previousInfo = getPrivateIdentifier(privateEnv, name); + const isStatic2 = hasStaticModifier(node); + const isValid = !isReservedPrivateName(name) && previousInfo === void 0; + addDeclaration(node, name, lex, privateEnv, isStatic2, isValid, previousInfo); + } + function createHoistedVariableForClass(name, node, suffix) { + const { className } = getPrivateIdentifierEnvironment().data; + const prefix = className ? { prefix: "_", node: className, suffix: "_" } : "_"; + const identifier = typeof name === "object" ? factory2.getGeneratedNameForNode(name, 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */, prefix, suffix) : typeof name === "string" ? factory2.createUniqueName(name, 16 /* Optimistic */, prefix, suffix) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0, + /*reservedInNestedScopes*/ + true, + prefix, + suffix + ); + if (resolver.hasNodeCheckFlag(node, 32768 /* BlockScopedBindingInLoop */)) { + addBlockScopedVariable(identifier); + } else { + hoistVariableDeclaration(identifier); + } + return identifier; + } + function createHoistedVariableForPrivateName(name, suffix) { + const text = tryGetTextOfPropertyName(name); + return createHoistedVariableForClass((text == null ? void 0 : text.substring(1)) ?? name, name, suffix); + } + function accessPrivateIdentifier2(name) { + const info = accessPrivateIdentifier(lexicalEnvironment, name); + return (info == null ? void 0 : info.kind) === "untransformed" ? void 0 : info; + } + function wrapPrivateIdentifierForDestructuringTarget(node) { + const parameter = factory2.getGeneratedNameForNode(node); + const info = accessPrivateIdentifier2(node.name); + if (!info) { + return visitEachChild(node, visitor, context); + } + let receiver = node.expression; + if (isThisProperty(node) || isSuperProperty(node) || !isSimpleCopiableExpression(node.expression)) { + receiver = factory2.createTempVariable( + hoistVariableDeclaration, + /*reservedInNestedScopes*/ + true + ); + getPendingExpressions().push(factory2.createBinaryExpression(receiver, 64 /* EqualsToken */, visitNode(node.expression, visitor, isExpression))); + } + return factory2.createAssignmentTargetWrapper( + parameter, + createPrivateIdentifierAssignment( + info, + receiver, + parameter, + 64 /* EqualsToken */ + ) + ); + } + function visitDestructuringAssignmentTarget(node) { + if (isObjectLiteralExpression(node) || isArrayLiteralExpression(node)) { + return visitAssignmentPattern(node); + } + if (isPrivateIdentifierPropertyAccessExpression(node)) { + return wrapPrivateIdentifierForDestructuringTarget(node); + } else if (shouldTransformSuperInStaticInitializers && currentClassElement && isSuperProperty(node) && isStaticPropertyDeclarationOrClassStaticBlock(currentClassElement) && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data)) { + const { classConstructor, superClassReference, facts } = lexicalEnvironment.data; + if (facts & 1 /* ClassWasDecorated */) { + return visitInvalidSuperProperty(node); + } else if (classConstructor && superClassReference) { + const name = isElementAccessExpression(node) ? visitNode(node.argumentExpression, visitor, isExpression) : isIdentifier(node.name) ? factory2.createStringLiteralFromNode(node.name) : void 0; + if (name) { + const temp = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + return factory2.createAssignmentTargetWrapper( + temp, + factory2.createReflectSetCall( + superClassReference, + name, + temp, + classConstructor + ) + ); + } + } + } + return visitEachChild(node, visitor, context); + } + function visitAssignmentElement(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + if (isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + )) { + const left = visitDestructuringAssignmentTarget(node.left); + const right = visitNode(node.right, visitor, isExpression); + return factory2.updateBinaryExpression(node, left, node.operatorToken, right); + } + return visitDestructuringAssignmentTarget(node); + } + function visitAssignmentRestElement(node) { + if (isLeftHandSideExpression(node.expression)) { + const expression = visitDestructuringAssignmentTarget(node.expression); + return factory2.updateSpreadElement(node, expression); + } + return visitEachChild(node, visitor, context); + } + function visitArrayAssignmentElement(node) { + if (isArrayBindingOrAssignmentElement(node)) { + if (isSpreadElement(node)) return visitAssignmentRestElement(node); + if (!isOmittedExpression(node)) return visitAssignmentElement(node); + } + return visitEachChild(node, visitor, context); + } + function visitAssignmentProperty(node) { + const name = visitNode(node.name, visitor, isPropertyName); + if (isAssignmentExpression( + node.initializer, + /*excludeCompoundAssignment*/ + true + )) { + const assignmentElement = visitAssignmentElement(node.initializer); + return factory2.updatePropertyAssignment(node, name, assignmentElement); + } + if (isLeftHandSideExpression(node.initializer)) { + const assignmentElement = visitDestructuringAssignmentTarget(node.initializer); + return factory2.updatePropertyAssignment(node, name, assignmentElement); + } + return visitEachChild(node, visitor, context); + } + function visitShorthandAssignmentProperty(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node); + } + return visitEachChild(node, visitor, context); + } + function visitAssignmentRestProperty(node) { + if (isLeftHandSideExpression(node.expression)) { + const expression = visitDestructuringAssignmentTarget(node.expression); + return factory2.updateSpreadAssignment(node, expression); + } + return visitEachChild(node, visitor, context); + } + function visitObjectAssignmentElement(node) { + Debug.assertNode(node, isObjectBindingOrAssignmentElement); + if (isSpreadAssignment(node)) return visitAssignmentRestProperty(node); + if (isShorthandPropertyAssignment(node)) return visitShorthandAssignmentProperty(node); + if (isPropertyAssignment(node)) return visitAssignmentProperty(node); + return visitEachChild(node, visitor, context); + } + function visitAssignmentPattern(node) { + if (isArrayLiteralExpression(node)) { + return factory2.updateArrayLiteralExpression( + node, + visitNodes2(node.elements, visitArrayAssignmentElement, isExpression) + ); + } else { + return factory2.updateObjectLiteralExpression( + node, + visitNodes2(node.properties, visitObjectAssignmentElement, isObjectLiteralElementLike) + ); + } + } + function onEmitNode(hint, node, emitCallback) { + const original = getOriginalNode(node); + const lex = lexicalEnvironmentMap.get(original); + if (lex) { + const savedLexicalEnvironment = lexicalEnvironment; + const savedPreviousShouldSubstituteThisWithClassThis = previousShouldSubstituteThisWithClassThis; + lexicalEnvironment = lex; + previousShouldSubstituteThisWithClassThis = shouldSubstituteThisWithClassThis; + shouldSubstituteThisWithClassThis = !isClassStaticBlockDeclaration(original) || !(getInternalEmitFlags(original) & 32 /* TransformPrivateStaticElements */); + previousOnEmitNode(hint, node, emitCallback); + shouldSubstituteThisWithClassThis = previousShouldSubstituteThisWithClassThis; + previousShouldSubstituteThisWithClassThis = savedPreviousShouldSubstituteThisWithClassThis; + lexicalEnvironment = savedLexicalEnvironment; + return; + } + switch (node.kind) { + case 219 /* FunctionExpression */: + if (isArrowFunction(original) || getEmitFlags(node) & 524288 /* AsyncFunctionBody */) { + break; + } + // falls through + case 263 /* FunctionDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + case 173 /* PropertyDeclaration */: { + const savedLexicalEnvironment = lexicalEnvironment; + const savedPreviousShouldSubstituteThisWithClassThis = previousShouldSubstituteThisWithClassThis; + lexicalEnvironment = void 0; + previousShouldSubstituteThisWithClassThis = shouldSubstituteThisWithClassThis; + shouldSubstituteThisWithClassThis = false; + previousOnEmitNode(hint, node, emitCallback); + shouldSubstituteThisWithClassThis = previousShouldSubstituteThisWithClassThis; + previousShouldSubstituteThisWithClassThis = savedPreviousShouldSubstituteThisWithClassThis; + lexicalEnvironment = savedLexicalEnvironment; + return; + } + case 168 /* ComputedPropertyName */: { + const savedLexicalEnvironment = lexicalEnvironment; + const savedShouldSubstituteThisWithClassThis = shouldSubstituteThisWithClassThis; + lexicalEnvironment = lexicalEnvironment == null ? void 0 : lexicalEnvironment.previous; + shouldSubstituteThisWithClassThis = previousShouldSubstituteThisWithClassThis; + previousOnEmitNode(hint, node, emitCallback); + shouldSubstituteThisWithClassThis = savedShouldSubstituteThisWithClassThis; + lexicalEnvironment = savedLexicalEnvironment; + return; + } + } + previousOnEmitNode(hint, node, emitCallback); + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return substituteExpressionIdentifier(node); + case 110 /* ThisKeyword */: + return substituteThisExpression(node); + } + return node; + } + function substituteThisExpression(node) { + if (enabledSubstitutions & 2 /* ClassStaticThisOrSuperReference */ && (lexicalEnvironment == null ? void 0 : lexicalEnvironment.data) && !noSubstitution.has(node)) { + const { facts, classConstructor, classThis } = lexicalEnvironment.data; + const substituteThis = shouldSubstituteThisWithClassThis ? classThis ?? classConstructor : classConstructor; + if (substituteThis) { + return setTextRange( + setOriginalNode( + factory2.cloneNode(substituteThis), + node + ), + node + ); + } + if (facts & 1 /* ClassWasDecorated */ && legacyDecorators) { + return factory2.createParenthesizedExpression(factory2.createVoidZero()); + } + } + return node; + } + function substituteExpressionIdentifier(node) { + return trySubstituteClassAlias(node) || node; + } + function trySubstituteClassAlias(node) { + if (enabledSubstitutions & 1 /* ClassAliases */) { + if (resolver.hasNodeCheckFlag(node, 536870912 /* ConstructorReference */)) { + const declaration = resolver.getReferencedValueDeclaration(node); + if (declaration) { + const classAlias = classAliases[declaration.id]; + if (classAlias) { + const clone2 = factory2.cloneNode(classAlias); + setSourceMapRange(clone2, node); + setCommentRange(clone2, node); + return clone2; + } + } + } + } + return void 0; + } +} +function createPrivateStaticFieldInitializer(factory2, variableName, initializer) { + return factory2.createAssignment( + variableName, + factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("value", initializer || factory2.createVoidZero()) + ]) + ); +} +function createPrivateInstanceFieldInitializer(factory2, receiver, initializer, weakMapName) { + return factory2.createCallExpression( + factory2.createPropertyAccessExpression(weakMapName, "set"), + /*typeArguments*/ + void 0, + [receiver, initializer || factory2.createVoidZero()] + ); +} +function createPrivateInstanceMethodInitializer(factory2, receiver, weakSetName) { + return factory2.createCallExpression( + factory2.createPropertyAccessExpression(weakSetName, "add"), + /*typeArguments*/ + void 0, + [receiver] + ); +} +function isReservedPrivateName(node) { + return !isGeneratedPrivateIdentifier(node) && node.escapedText === "#constructor"; +} +function isPrivateIdentifierInExpression(node) { + return isPrivateIdentifier(node.left) && node.operatorToken.kind === 103 /* InKeyword */; +} +function isStaticPropertyDeclaration2(node) { + return isPropertyDeclaration(node) && hasStaticModifier(node); +} +function isStaticPropertyDeclarationOrClassStaticBlock(node) { + return isClassStaticBlockDeclaration(node) || isStaticPropertyDeclaration2(node); +} + +// src/compiler/transformers/typeSerializer.ts +function createRuntimeTypeSerializer(context) { + const { + factory: factory2, + hoistVariableDeclaration + } = context; + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const strictNullChecks = getStrictOptionValue(compilerOptions, "strictNullChecks"); + let currentLexicalScope; + let currentNameScope; + return { + serializeTypeNode: (serializerContext, node) => setSerializerContextAnd(serializerContext, serializeTypeNode, node), + serializeTypeOfNode: (serializerContext, node, container) => setSerializerContextAnd(serializerContext, serializeTypeOfNode, node, container), + serializeParameterTypesOfNode: (serializerContext, node, container) => setSerializerContextAnd(serializerContext, serializeParameterTypesOfNode, node, container), + serializeReturnTypeOfNode: (serializerContext, node) => setSerializerContextAnd(serializerContext, serializeReturnTypeOfNode, node) + }; + function setSerializerContextAnd(serializerContext, cb, node, arg) { + const savedCurrentLexicalScope = currentLexicalScope; + const savedCurrentNameScope = currentNameScope; + currentLexicalScope = serializerContext.currentLexicalScope; + currentNameScope = serializerContext.currentNameScope; + const result = arg === void 0 ? cb(node) : cb(node, arg); + currentLexicalScope = savedCurrentLexicalScope; + currentNameScope = savedCurrentNameScope; + return result; + } + function getAccessorTypeNode(node, container) { + const accessors = getAllAccessorDeclarations(container.members, node); + return accessors.setAccessor && getSetAccessorTypeAnnotationNode(accessors.setAccessor) || accessors.getAccessor && getEffectiveReturnTypeNode(accessors.getAccessor); + } + function serializeTypeOfNode(node, container) { + switch (node.kind) { + case 173 /* PropertyDeclaration */: + case 170 /* Parameter */: + return serializeTypeNode(node.type); + case 179 /* SetAccessor */: + case 178 /* GetAccessor */: + return serializeTypeNode(getAccessorTypeNode(node, container)); + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 175 /* MethodDeclaration */: + return factory2.createIdentifier("Function"); + default: + return factory2.createVoidZero(); + } + } + function serializeParameterTypesOfNode(node, container) { + const valueDeclaration = isClassLike(node) ? getFirstConstructorWithBody(node) : isFunctionLike(node) && nodeIsPresent(node.body) ? node : void 0; + const expressions = []; + if (valueDeclaration) { + const parameters = getParametersOfDecoratedDeclaration(valueDeclaration, container); + const numParameters = parameters.length; + for (let i = 0; i < numParameters; i++) { + const parameter = parameters[i]; + if (i === 0 && isIdentifier(parameter.name) && parameter.name.escapedText === "this") { + continue; + } + if (parameter.dotDotDotToken) { + expressions.push(serializeTypeNode(getRestParameterElementType(parameter.type))); + } else { + expressions.push(serializeTypeOfNode(parameter, container)); + } + } + } + return factory2.createArrayLiteralExpression(expressions); + } + function getParametersOfDecoratedDeclaration(node, container) { + if (container && node.kind === 178 /* GetAccessor */) { + const { setAccessor } = getAllAccessorDeclarations(container.members, node); + if (setAccessor) { + return setAccessor.parameters; + } + } + return node.parameters; + } + function serializeReturnTypeOfNode(node) { + if (isFunctionLike(node) && node.type) { + return serializeTypeNode(node.type); + } else if (isAsyncFunction(node)) { + return factory2.createIdentifier("Promise"); + } + return factory2.createVoidZero(); + } + function serializeTypeNode(node) { + if (node === void 0) { + return factory2.createIdentifier("Object"); + } + node = skipTypeParentheses(node); + switch (node.kind) { + case 116 /* VoidKeyword */: + case 157 /* UndefinedKeyword */: + case 146 /* NeverKeyword */: + return factory2.createVoidZero(); + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + return factory2.createIdentifier("Function"); + case 189 /* ArrayType */: + case 190 /* TupleType */: + return factory2.createIdentifier("Array"); + case 183 /* TypePredicate */: + return node.assertsModifier ? factory2.createVoidZero() : factory2.createIdentifier("Boolean"); + case 136 /* BooleanKeyword */: + return factory2.createIdentifier("Boolean"); + case 204 /* TemplateLiteralType */: + case 154 /* StringKeyword */: + return factory2.createIdentifier("String"); + case 151 /* ObjectKeyword */: + return factory2.createIdentifier("Object"); + case 202 /* LiteralType */: + return serializeLiteralOfLiteralTypeNode(node.literal); + case 150 /* NumberKeyword */: + return factory2.createIdentifier("Number"); + case 163 /* BigIntKeyword */: + return getGlobalConstructor("BigInt", 7 /* ES2020 */); + case 155 /* SymbolKeyword */: + return getGlobalConstructor("Symbol", 2 /* ES2015 */); + case 184 /* TypeReference */: + return serializeTypeReferenceNode(node); + case 194 /* IntersectionType */: + return serializeUnionOrIntersectionConstituents( + node.types, + /*isIntersection*/ + true + ); + case 193 /* UnionType */: + return serializeUnionOrIntersectionConstituents( + node.types, + /*isIntersection*/ + false + ); + case 195 /* ConditionalType */: + return serializeUnionOrIntersectionConstituents( + [node.trueType, node.falseType], + /*isIntersection*/ + false + ); + case 199 /* TypeOperator */: + if (node.operator === 148 /* ReadonlyKeyword */) { + return serializeTypeNode(node.type); + } + break; + case 187 /* TypeQuery */: + case 200 /* IndexedAccessType */: + case 201 /* MappedType */: + case 188 /* TypeLiteral */: + case 133 /* AnyKeyword */: + case 159 /* UnknownKeyword */: + case 198 /* ThisType */: + case 206 /* ImportType */: + break; + // handle JSDoc types from an invalid parse + case 313 /* JSDocAllType */: + case 314 /* JSDocUnknownType */: + case 318 /* JSDocFunctionType */: + case 319 /* JSDocVariadicType */: + case 320 /* JSDocNamepathType */: + break; + case 315 /* JSDocNullableType */: + case 316 /* JSDocNonNullableType */: + case 317 /* JSDocOptionalType */: + return serializeTypeNode(node.type); + default: + return Debug.failBadSyntaxKind(node); + } + return factory2.createIdentifier("Object"); + } + function serializeLiteralOfLiteralTypeNode(node) { + switch (node.kind) { + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + return factory2.createIdentifier("String"); + case 225 /* PrefixUnaryExpression */: { + const operand = node.operand; + switch (operand.kind) { + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + return serializeLiteralOfLiteralTypeNode(operand); + default: + return Debug.failBadSyntaxKind(operand); + } + } + case 9 /* NumericLiteral */: + return factory2.createIdentifier("Number"); + case 10 /* BigIntLiteral */: + return getGlobalConstructor("BigInt", 7 /* ES2020 */); + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + return factory2.createIdentifier("Boolean"); + case 106 /* NullKeyword */: + return factory2.createVoidZero(); + default: + return Debug.failBadSyntaxKind(node); + } + } + function serializeUnionOrIntersectionConstituents(types, isIntersection) { + let serializedType; + for (let typeNode of types) { + typeNode = skipTypeParentheses(typeNode); + if (typeNode.kind === 146 /* NeverKeyword */) { + if (isIntersection) return factory2.createVoidZero(); + continue; + } + if (typeNode.kind === 159 /* UnknownKeyword */) { + if (!isIntersection) return factory2.createIdentifier("Object"); + continue; + } + if (typeNode.kind === 133 /* AnyKeyword */) { + return factory2.createIdentifier("Object"); + } + if (!strictNullChecks && (isLiteralTypeNode(typeNode) && typeNode.literal.kind === 106 /* NullKeyword */ || typeNode.kind === 157 /* UndefinedKeyword */)) { + continue; + } + const serializedConstituent = serializeTypeNode(typeNode); + if (isIdentifier(serializedConstituent) && serializedConstituent.escapedText === "Object") { + return serializedConstituent; + } + if (serializedType) { + if (!equateSerializedTypeNodes(serializedType, serializedConstituent)) { + return factory2.createIdentifier("Object"); + } + } else { + serializedType = serializedConstituent; + } + } + return serializedType ?? factory2.createVoidZero(); + } + function equateSerializedTypeNodes(left, right) { + return ( + // temp vars used in fallback + isGeneratedIdentifier(left) ? isGeneratedIdentifier(right) : ( + // entity names + isIdentifier(left) ? isIdentifier(right) && left.escapedText === right.escapedText : isPropertyAccessExpression(left) ? isPropertyAccessExpression(right) && equateSerializedTypeNodes(left.expression, right.expression) && equateSerializedTypeNodes(left.name, right.name) : ( + // `void 0` + isVoidExpression(left) ? isVoidExpression(right) && isNumericLiteral(left.expression) && left.expression.text === "0" && isNumericLiteral(right.expression) && right.expression.text === "0" : ( + // `"undefined"` or `"function"` in `typeof` checks + isStringLiteral(left) ? isStringLiteral(right) && left.text === right.text : ( + // used in `typeof` checks for fallback + isTypeOfExpression(left) ? isTypeOfExpression(right) && equateSerializedTypeNodes(left.expression, right.expression) : ( + // parens in `typeof` checks with temps + isParenthesizedExpression(left) ? isParenthesizedExpression(right) && equateSerializedTypeNodes(left.expression, right.expression) : ( + // conditionals used in fallback + isConditionalExpression(left) ? isConditionalExpression(right) && equateSerializedTypeNodes(left.condition, right.condition) && equateSerializedTypeNodes(left.whenTrue, right.whenTrue) && equateSerializedTypeNodes(left.whenFalse, right.whenFalse) : ( + // logical binary and assignments used in fallback + isBinaryExpression(left) ? isBinaryExpression(right) && left.operatorToken.kind === right.operatorToken.kind && equateSerializedTypeNodes(left.left, right.left) && equateSerializedTypeNodes(left.right, right.right) : false + ) + ) + ) + ) + ) + ) + ) + ); + } + function serializeTypeReferenceNode(node) { + const kind = resolver.getTypeReferenceSerializationKind(node.typeName, currentNameScope ?? currentLexicalScope); + switch (kind) { + case 0 /* Unknown */: + if (findAncestor(node, (n) => n.parent && isConditionalTypeNode(n.parent) && (n.parent.trueType === n || n.parent.falseType === n))) { + return factory2.createIdentifier("Object"); + } + const serialized = serializeEntityNameAsExpressionFallback(node.typeName); + const temp = factory2.createTempVariable(hoistVariableDeclaration); + return factory2.createConditionalExpression( + factory2.createTypeCheck(factory2.createAssignment(temp, serialized), "function"), + /*questionToken*/ + void 0, + temp, + /*colonToken*/ + void 0, + factory2.createIdentifier("Object") + ); + case 1 /* TypeWithConstructSignatureAndValue */: + return serializeEntityNameAsExpression(node.typeName); + case 2 /* VoidNullableOrNeverType */: + return factory2.createVoidZero(); + case 4 /* BigIntLikeType */: + return getGlobalConstructor("BigInt", 7 /* ES2020 */); + case 6 /* BooleanType */: + return factory2.createIdentifier("Boolean"); + case 3 /* NumberLikeType */: + return factory2.createIdentifier("Number"); + case 5 /* StringLikeType */: + return factory2.createIdentifier("String"); + case 7 /* ArrayLikeType */: + return factory2.createIdentifier("Array"); + case 8 /* ESSymbolType */: + return getGlobalConstructor("Symbol", 2 /* ES2015 */); + case 10 /* TypeWithCallSignature */: + return factory2.createIdentifier("Function"); + case 9 /* Promise */: + return factory2.createIdentifier("Promise"); + case 11 /* ObjectType */: + return factory2.createIdentifier("Object"); + default: + return Debug.assertNever(kind); + } + } + function createCheckedValue(left, right) { + return factory2.createLogicalAnd( + factory2.createStrictInequality(factory2.createTypeOfExpression(left), factory2.createStringLiteral("undefined")), + right + ); + } + function serializeEntityNameAsExpressionFallback(node) { + if (node.kind === 80 /* Identifier */) { + const copied = serializeEntityNameAsExpression(node); + return createCheckedValue(copied, copied); + } + if (node.left.kind === 80 /* Identifier */) { + return createCheckedValue(serializeEntityNameAsExpression(node.left), serializeEntityNameAsExpression(node)); + } + const left = serializeEntityNameAsExpressionFallback(node.left); + const temp = factory2.createTempVariable(hoistVariableDeclaration); + return factory2.createLogicalAnd( + factory2.createLogicalAnd( + left.left, + factory2.createStrictInequality(factory2.createAssignment(temp, left.right), factory2.createVoidZero()) + ), + factory2.createPropertyAccessExpression(temp, node.right) + ); + } + function serializeEntityNameAsExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + const name = setParent(setTextRange(parseNodeFactory.cloneNode(node), node), node.parent); + name.original = void 0; + setParent(name, getParseTreeNode(currentLexicalScope)); + return name; + case 167 /* QualifiedName */: + return serializeQualifiedNameAsExpression(node); + } + } + function serializeQualifiedNameAsExpression(node) { + return factory2.createPropertyAccessExpression(serializeEntityNameAsExpression(node.left), node.right); + } + function getGlobalConstructorWithFallback(name) { + return factory2.createConditionalExpression( + factory2.createTypeCheck(factory2.createIdentifier(name), "function"), + /*questionToken*/ + void 0, + factory2.createIdentifier(name), + /*colonToken*/ + void 0, + factory2.createIdentifier("Object") + ); + } + function getGlobalConstructor(name, minLanguageVersion) { + return languageVersion < minLanguageVersion ? getGlobalConstructorWithFallback(name) : factory2.createIdentifier(name); + } +} + +// src/compiler/transformers/legacyDecorators.ts +function transformLegacyDecorators(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + hoistVariableDeclaration + } = context; + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const previousOnSubstituteNode = context.onSubstituteNode; + context.onSubstituteNode = onSubstituteNode; + let classAliases; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + const visited = visitEachChild(node, visitor, context); + addEmitHelpers(visited, context.readEmitHelpers()); + return visited; + } + function modifierVisitor(node) { + return isDecorator(node) ? void 0 : node; + } + function visitor(node) { + if (!(node.transformFlags & 33554432 /* ContainsDecorators */)) { + return node; + } + switch (node.kind) { + case 171 /* Decorator */: + return void 0; + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 232 /* ClassExpression */: + return visitClassExpression(node); + case 177 /* Constructor */: + return visitConstructorDeclaration(node); + case 175 /* MethodDeclaration */: + return visitMethodDeclaration(node); + case 179 /* SetAccessor */: + return visitSetAccessorDeclaration(node); + case 178 /* GetAccessor */: + return visitGetAccessorDeclaration(node); + case 173 /* PropertyDeclaration */: + return visitPropertyDeclaration(node); + case 170 /* Parameter */: + return visitParameterDeclaration(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitClassDeclaration(node) { + if (!(classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + true, + node + ) || childIsDecorated( + /*useLegacyDecorators*/ + true, + node + ))) { + return visitEachChild(node, visitor, context); + } + const statements = classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + true, + node + ) ? transformClassDeclarationWithClassDecorators(node, node.name) : transformClassDeclarationWithoutClassDecorators(node, node.name); + return singleOrMany(statements); + } + function decoratorContainsPrivateIdentifierInExpression(decorator) { + return !!(decorator.transformFlags & 536870912 /* ContainsPrivateIdentifierInExpression */); + } + function parameterDecoratorsContainPrivateIdentifierInExpression(parameterDecorators) { + return some(parameterDecorators, decoratorContainsPrivateIdentifierInExpression); + } + function hasClassElementWithDecoratorContainingPrivateIdentifierInExpression(node) { + for (const member of node.members) { + if (!canHaveDecorators(member)) continue; + const allDecorators = getAllDecoratorsOfClassElement( + member, + node, + /*useLegacyDecorators*/ + true + ); + if (some(allDecorators == null ? void 0 : allDecorators.decorators, decoratorContainsPrivateIdentifierInExpression)) return true; + if (some(allDecorators == null ? void 0 : allDecorators.parameters, parameterDecoratorsContainPrivateIdentifierInExpression)) return true; + } + return false; + } + function transformDecoratorsOfClassElements(node, members) { + let decorationStatements = []; + addClassElementDecorationStatements( + decorationStatements, + node, + /*isStatic*/ + false + ); + addClassElementDecorationStatements( + decorationStatements, + node, + /*isStatic*/ + true + ); + if (hasClassElementWithDecoratorContainingPrivateIdentifierInExpression(node)) { + members = setTextRange( + factory2.createNodeArray([ + ...members, + factory2.createClassStaticBlockDeclaration( + factory2.createBlock( + decorationStatements, + /*multiLine*/ + true + ) + ) + ]), + members + ); + decorationStatements = void 0; + } + return { decorationStatements, members }; + } + function transformClassDeclarationWithoutClassDecorators(node, name) { + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const heritageClauses = visitNodes2(node.heritageClauses, visitor, isHeritageClause); + let members = visitNodes2(node.members, visitor, isClassElement); + let decorationStatements = []; + ({ members, decorationStatements } = transformDecoratorsOfClassElements(node, members)); + const updated = factory2.updateClassDeclaration( + node, + modifiers, + name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + return addRange([updated], decorationStatements); + } + function transformClassDeclarationWithClassDecorators(node, name) { + const isExport = hasSyntacticModifier(node, 32 /* Export */); + const isDefault = hasSyntacticModifier(node, 2048 /* Default */); + const modifiers = visitNodes2(node.modifiers, (node2) => isExportOrDefaultModifier(node2) || isDecorator(node2) ? void 0 : node2, isModifierLike); + const location = moveRangePastModifiers(node); + const classAlias = getClassAliasIfNeeded(node); + const declName = languageVersion < 2 /* ES2015 */ ? factory2.getInternalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ) : factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + const heritageClauses = visitNodes2(node.heritageClauses, visitor, isHeritageClause); + let members = visitNodes2(node.members, visitor, isClassElement); + let decorationStatements = []; + ({ members, decorationStatements } = transformDecoratorsOfClassElements(node, members)); + const assignClassAliasInStaticBlock = languageVersion >= 9 /* ES2022 */ && !!classAlias && some(members, (member) => isPropertyDeclaration(member) && hasSyntacticModifier(member, 256 /* Static */) || isClassStaticBlockDeclaration(member)); + if (assignClassAliasInStaticBlock) { + members = setTextRange( + factory2.createNodeArray([ + factory2.createClassStaticBlockDeclaration( + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createAssignment(classAlias, factory2.createThis()) + ) + ]) + ), + ...members + ]), + members + ); + } + const classExpression = factory2.createClassExpression( + modifiers, + name && isGeneratedIdentifier(name) ? void 0 : name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + setOriginalNode(classExpression, node); + setTextRange(classExpression, location); + const varInitializer = classAlias && !assignClassAliasInStaticBlock ? factory2.createAssignment(classAlias, classExpression) : classExpression; + const varDecl = factory2.createVariableDeclaration( + declName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + varInitializer + ); + setOriginalNode(varDecl, node); + const varDeclList = factory2.createVariableDeclarationList([varDecl], 1 /* Let */); + const varStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + varDeclList + ); + setOriginalNode(varStatement, node); + setTextRange(varStatement, location); + setCommentRange(varStatement, node); + const statements = [varStatement]; + addRange(statements, decorationStatements); + addConstructorDecorationStatement(statements, node); + if (isExport) { + if (isDefault) { + const exportStatement = factory2.createExportDefault(declName); + statements.push(exportStatement); + } else { + const exportStatement = factory2.createExternalModuleExport(factory2.getDeclarationName(node)); + statements.push(exportStatement); + } + } + return statements; + } + function visitClassExpression(node) { + return factory2.updateClassExpression( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + node.name, + /*typeParameters*/ + void 0, + visitNodes2(node.heritageClauses, visitor, isHeritageClause), + visitNodes2(node.members, visitor, isClassElement) + ); + } + function visitConstructorDeclaration(node) { + return factory2.updateConstructorDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + visitNodes2(node.parameters, visitor, isParameter), + visitNode(node.body, visitor, isBlock) + ); + } + function finishClassElement(updated, original) { + if (updated !== original) { + setCommentRange(updated, original); + setSourceMapRange(updated, moveRangePastModifiers(original)); + } + return updated; + } + function visitMethodDeclaration(node) { + return finishClassElement( + factory2.updateMethodDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + node.asteriskToken, + Debug.checkDefined(visitNode(node.name, visitor, isPropertyName)), + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + visitNodes2(node.parameters, visitor, isParameter), + /*type*/ + void 0, + visitNode(node.body, visitor, isBlock) + ), + node + ); + } + function visitGetAccessorDeclaration(node) { + return finishClassElement( + factory2.updateGetAccessorDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + Debug.checkDefined(visitNode(node.name, visitor, isPropertyName)), + visitNodes2(node.parameters, visitor, isParameter), + /*type*/ + void 0, + visitNode(node.body, visitor, isBlock) + ), + node + ); + } + function visitSetAccessorDeclaration(node) { + return finishClassElement( + factory2.updateSetAccessorDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + Debug.checkDefined(visitNode(node.name, visitor, isPropertyName)), + visitNodes2(node.parameters, visitor, isParameter), + visitNode(node.body, visitor, isBlock) + ), + node + ); + } + function visitPropertyDeclaration(node) { + if (node.flags & 33554432 /* Ambient */ || hasSyntacticModifier(node, 128 /* Ambient */)) { + return void 0; + } + return finishClassElement( + factory2.updatePropertyDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifier), + Debug.checkDefined(visitNode(node.name, visitor, isPropertyName)), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ), + node + ); + } + function visitParameterDeclaration(node) { + const updated = factory2.updateParameterDeclaration( + node, + elideNodes(factory2, node.modifiers), + node.dotDotDotToken, + Debug.checkDefined(visitNode(node.name, visitor, isBindingName)), + /*questionToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + if (updated !== node) { + setCommentRange(updated, node); + setTextRange(updated, moveRangePastModifiers(node)); + setSourceMapRange(updated, moveRangePastModifiers(node)); + setEmitFlags(updated.name, 64 /* NoTrailingSourceMap */); + } + return updated; + } + function isSyntheticMetadataDecorator(node) { + return isCallToHelper(node.expression, "___metadata"); + } + function transformAllDecoratorsOfDeclaration(allDecorators) { + if (!allDecorators) { + return void 0; + } + const { false: decorators, true: metadata } = groupBy(allDecorators.decorators, isSyntheticMetadataDecorator); + const decoratorExpressions = []; + addRange(decoratorExpressions, map(decorators, transformDecorator)); + addRange(decoratorExpressions, flatMap(allDecorators.parameters, transformDecoratorsOfParameter)); + addRange(decoratorExpressions, map(metadata, transformDecorator)); + return decoratorExpressions; + } + function addClassElementDecorationStatements(statements, node, isStatic2) { + addRange(statements, map(generateClassElementDecorationExpressions(node, isStatic2), (expr) => factory2.createExpressionStatement(expr))); + } + function isDecoratedClassElement(member, isStaticElement, parent2) { + return nodeOrChildIsDecorated( + /*useLegacyDecorators*/ + true, + member, + parent2 + ) && isStaticElement === isStatic(member); + } + function getDecoratedClassElements(node, isStatic2) { + return filter(node.members, (m) => isDecoratedClassElement(m, isStatic2, node)); + } + function generateClassElementDecorationExpressions(node, isStatic2) { + const members = getDecoratedClassElements(node, isStatic2); + let expressions; + for (const member of members) { + expressions = append(expressions, generateClassElementDecorationExpression(node, member)); + } + return expressions; + } + function generateClassElementDecorationExpression(node, member) { + const allDecorators = getAllDecoratorsOfClassElement( + member, + node, + /*useLegacyDecorators*/ + true + ); + const decoratorExpressions = transformAllDecoratorsOfDeclaration(allDecorators); + if (!decoratorExpressions) { + return void 0; + } + const prefix = getClassMemberPrefix(node, member); + const memberName = getExpressionForPropertyName( + member, + /*generateNameForComputedPropertyName*/ + !hasSyntacticModifier(member, 128 /* Ambient */) + ); + const descriptor = isPropertyDeclaration(member) && !hasAccessorModifier(member) ? factory2.createVoidZero() : factory2.createNull(); + const helper = emitHelpers().createDecorateHelper( + decoratorExpressions, + prefix, + memberName, + descriptor + ); + setEmitFlags(helper, 3072 /* NoComments */); + setSourceMapRange(helper, moveRangePastModifiers(member)); + return helper; + } + function addConstructorDecorationStatement(statements, node) { + const expression = generateConstructorDecorationExpression(node); + if (expression) { + statements.push(setOriginalNode(factory2.createExpressionStatement(expression), node)); + } + } + function generateConstructorDecorationExpression(node) { + const allDecorators = getAllDecoratorsOfClass( + node, + /*useLegacyDecorators*/ + true + ); + const decoratorExpressions = transformAllDecoratorsOfDeclaration(allDecorators); + if (!decoratorExpressions) { + return void 0; + } + const classAlias = classAliases && classAliases[getOriginalNodeId(node)]; + const localName = languageVersion < 2 /* ES2015 */ ? factory2.getInternalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ) : factory2.getDeclarationName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + const decorate = emitHelpers().createDecorateHelper(decoratorExpressions, localName); + const expression = factory2.createAssignment(localName, classAlias ? factory2.createAssignment(classAlias, decorate) : decorate); + setEmitFlags(expression, 3072 /* NoComments */); + setSourceMapRange(expression, moveRangePastModifiers(node)); + return expression; + } + function transformDecorator(decorator) { + return Debug.checkDefined(visitNode(decorator.expression, visitor, isExpression)); + } + function transformDecoratorsOfParameter(decorators, parameterOffset) { + let expressions; + if (decorators) { + expressions = []; + for (const decorator of decorators) { + const helper = emitHelpers().createParamHelper( + transformDecorator(decorator), + parameterOffset + ); + setTextRange(helper, decorator.expression); + setEmitFlags(helper, 3072 /* NoComments */); + expressions.push(helper); + } + } + return expressions; + } + function getExpressionForPropertyName(member, generateNameForComputedPropertyName) { + const name = member.name; + if (isPrivateIdentifier(name)) { + return factory2.createIdentifier(""); + } else if (isComputedPropertyName(name)) { + return generateNameForComputedPropertyName && !isSimpleInlineableExpression(name.expression) ? factory2.getGeneratedNameForNode(name) : name.expression; + } else if (isIdentifier(name)) { + return factory2.createStringLiteral(idText(name)); + } else { + return factory2.cloneNode(name); + } + } + function enableSubstitutionForClassAliases() { + if (!classAliases) { + context.enableSubstitution(80 /* Identifier */); + classAliases = []; + } + } + function getClassAliasIfNeeded(node) { + if (resolver.hasNodeCheckFlag(node, 262144 /* ContainsConstructorReference */)) { + enableSubstitutionForClassAliases(); + const classAlias = factory2.createUniqueName(node.name && !isGeneratedIdentifier(node.name) ? idText(node.name) : "default"); + classAliases[getOriginalNodeId(node)] = classAlias; + hoistVariableDeclaration(classAlias); + return classAlias; + } + } + function getClassPrototype(node) { + return factory2.createPropertyAccessExpression(factory2.getDeclarationName(node), "prototype"); + } + function getClassMemberPrefix(node, member) { + return isStatic(member) ? factory2.getDeclarationName(node) : getClassPrototype(node); + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return substituteExpressionIdentifier(node); + } + return node; + } + function substituteExpressionIdentifier(node) { + return trySubstituteClassAlias(node) ?? node; + } + function trySubstituteClassAlias(node) { + if (classAliases) { + if (resolver.hasNodeCheckFlag(node, 536870912 /* ConstructorReference */)) { + const declaration = resolver.getReferencedValueDeclaration(node); + if (declaration) { + const classAlias = classAliases[declaration.id]; + if (classAlias) { + const clone2 = factory2.cloneNode(classAlias); + setSourceMapRange(clone2, node); + setCommentRange(clone2, node); + return clone2; + } + } + } + } + return void 0; + } +} + +// src/compiler/transformers/esDecorators.ts +function transformESDecorators(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + startLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const languageVersion = getEmitScriptTarget(context.getCompilerOptions()); + let top; + let classInfo; + let classThis; + let classSuper; + let pendingExpressions; + let shouldTransformPrivateStaticElementsInFile; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + top = void 0; + shouldTransformPrivateStaticElementsInFile = false; + const visited = visitEachChild(node, visitor, context); + addEmitHelpers(visited, context.readEmitHelpers()); + if (shouldTransformPrivateStaticElementsInFile) { + addInternalEmitFlags(visited, 32 /* TransformPrivateStaticElements */); + shouldTransformPrivateStaticElementsInFile = false; + } + return visited; + } + function updateState() { + classInfo = void 0; + classThis = void 0; + classSuper = void 0; + switch (top == null ? void 0 : top.kind) { + case "class": + classInfo = top.classInfo; + break; + case "class-element": + classInfo = top.next.classInfo; + classThis = top.classThis; + classSuper = top.classSuper; + break; + case "name": + const grandparent = top.next.next.next; + if ((grandparent == null ? void 0 : grandparent.kind) === "class-element") { + classInfo = grandparent.next.classInfo; + classThis = grandparent.classThis; + classSuper = grandparent.classSuper; + } + break; + } + } + function enterClass(classInfo2) { + top = { kind: "class", next: top, classInfo: classInfo2, savedPendingExpressions: pendingExpressions }; + pendingExpressions = void 0; + updateState(); + } + function exitClass() { + Debug.assert((top == null ? void 0 : top.kind) === "class", "Incorrect value for top.kind.", () => `Expected top.kind to be 'class' but got '${top == null ? void 0 : top.kind}' instead.`); + pendingExpressions = top.savedPendingExpressions; + top = top.next; + updateState(); + } + function enterClassElement(node) { + var _a, _b; + Debug.assert((top == null ? void 0 : top.kind) === "class", "Incorrect value for top.kind.", () => `Expected top.kind to be 'class' but got '${top == null ? void 0 : top.kind}' instead.`); + top = { kind: "class-element", next: top }; + if (isClassStaticBlockDeclaration(node) || isPropertyDeclaration(node) && hasStaticModifier(node)) { + top.classThis = (_a = top.next.classInfo) == null ? void 0 : _a.classThis; + top.classSuper = (_b = top.next.classInfo) == null ? void 0 : _b.classSuper; + } + updateState(); + } + function exitClassElement() { + var _a; + Debug.assert((top == null ? void 0 : top.kind) === "class-element", "Incorrect value for top.kind.", () => `Expected top.kind to be 'class-element' but got '${top == null ? void 0 : top.kind}' instead.`); + Debug.assert(((_a = top.next) == null ? void 0 : _a.kind) === "class", "Incorrect value for top.next.kind.", () => { + var _a2; + return `Expected top.next.kind to be 'class' but got '${(_a2 = top.next) == null ? void 0 : _a2.kind}' instead.`; + }); + top = top.next; + updateState(); + } + function enterName() { + Debug.assert((top == null ? void 0 : top.kind) === "class-element", "Incorrect value for top.kind.", () => `Expected top.kind to be 'class-element' but got '${top == null ? void 0 : top.kind}' instead.`); + top = { kind: "name", next: top }; + updateState(); + } + function exitName() { + Debug.assert((top == null ? void 0 : top.kind) === "name", "Incorrect value for top.kind.", () => `Expected top.kind to be 'name' but got '${top == null ? void 0 : top.kind}' instead.`); + top = top.next; + updateState(); + } + function enterOther() { + if ((top == null ? void 0 : top.kind) === "other") { + Debug.assert(!pendingExpressions); + top.depth++; + } else { + top = { kind: "other", next: top, depth: 0, savedPendingExpressions: pendingExpressions }; + pendingExpressions = void 0; + updateState(); + } + } + function exitOther() { + Debug.assert((top == null ? void 0 : top.kind) === "other", "Incorrect value for top.kind.", () => `Expected top.kind to be 'other' but got '${top == null ? void 0 : top.kind}' instead.`); + if (top.depth > 0) { + Debug.assert(!pendingExpressions); + top.depth--; + } else { + pendingExpressions = top.savedPendingExpressions; + top = top.next; + updateState(); + } + } + function shouldVisitNode(node) { + return !!(node.transformFlags & 33554432 /* ContainsDecorators */) || !!classThis && !!(node.transformFlags & 16384 /* ContainsLexicalThis */) || !!classThis && !!classSuper && !!(node.transformFlags & 134217728 /* ContainsLexicalSuper */); + } + function visitor(node) { + if (!shouldVisitNode(node)) { + return node; + } + switch (node.kind) { + case 171 /* Decorator */: + return Debug.fail("Use `modifierVisitor` instead."); + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 232 /* ClassExpression */: + return visitClassExpression(node); + case 177 /* Constructor */: + case 173 /* PropertyDeclaration */: + case 176 /* ClassStaticBlockDeclaration */: + return Debug.fail("Not supported outside of a class. Use 'classElementVisitor' instead."); + case 170 /* Parameter */: + return visitParameterDeclaration(node); + // Support NamedEvaluation to ensure the correct class name for class expressions. + case 227 /* BinaryExpression */: + return visitBinaryExpression( + node, + /*discarded*/ + false + ); + case 304 /* PropertyAssignment */: + return visitPropertyAssignment(node); + case 261 /* VariableDeclaration */: + return visitVariableDeclaration(node); + case 209 /* BindingElement */: + return visitBindingElement(node); + case 278 /* ExportAssignment */: + return visitExportAssignment(node); + case 110 /* ThisKeyword */: + return visitThisExpression(node); + case 249 /* ForStatement */: + return visitForStatement(node); + case 245 /* ExpressionStatement */: + return visitExpressionStatement(node); + case 357 /* CommaListExpression */: + return visitCommaListExpression( + node, + /*discarded*/ + false + ); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression( + node, + /*discarded*/ + false + ); + case 356 /* PartiallyEmittedExpression */: + return visitPartiallyEmittedExpression( + node, + /*discarded*/ + false + ); + case 214 /* CallExpression */: + return visitCallExpression(node); + case 216 /* TaggedTemplateExpression */: + return visitTaggedTemplateExpression(node); + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return visitPreOrPostfixUnaryExpression( + node, + /*discarded*/ + false + ); + case 212 /* PropertyAccessExpression */: + return visitPropertyAccessExpression(node); + case 213 /* ElementAccessExpression */: + return visitElementAccessExpression(node); + case 168 /* ComputedPropertyName */: + return visitComputedPropertyName(node); + case 175 /* MethodDeclaration */: + // object literal methods and accessors + case 179 /* SetAccessor */: + case 178 /* GetAccessor */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: { + enterOther(); + const result = visitEachChild(node, fallbackVisitor, context); + exitOther(); + return result; + } + default: + return visitEachChild(node, fallbackVisitor, context); + } + } + function fallbackVisitor(node) { + switch (node.kind) { + case 171 /* Decorator */: + return void 0; + default: + return visitor(node); + } + } + function modifierVisitor(node) { + switch (node.kind) { + case 171 /* Decorator */: + return void 0; + default: + return node; + } + } + function classElementVisitor(node) { + switch (node.kind) { + case 177 /* Constructor */: + return visitConstructorDeclaration(node); + case 175 /* MethodDeclaration */: + return visitMethodDeclaration(node); + case 178 /* GetAccessor */: + return visitGetAccessorDeclaration(node); + case 179 /* SetAccessor */: + return visitSetAccessorDeclaration(node); + case 173 /* PropertyDeclaration */: + return visitPropertyDeclaration(node); + case 176 /* ClassStaticBlockDeclaration */: + return visitClassStaticBlockDeclaration(node); + default: + return visitor(node); + } + } + function discardedValueVisitor(node) { + switch (node.kind) { + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return visitPreOrPostfixUnaryExpression( + node, + /*discarded*/ + true + ); + case 227 /* BinaryExpression */: + return visitBinaryExpression( + node, + /*discarded*/ + true + ); + case 357 /* CommaListExpression */: + return visitCommaListExpression( + node, + /*discarded*/ + true + ); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression( + node, + /*discarded*/ + true + ); + default: + return visitor(node); + } + } + function getHelperVariableName(node) { + let declarationName = node.name && isIdentifier(node.name) && !isGeneratedIdentifier(node.name) ? idText(node.name) : node.name && isPrivateIdentifier(node.name) && !isGeneratedIdentifier(node.name) ? idText(node.name).slice(1) : node.name && isStringLiteral(node.name) && isIdentifierText(node.name.text, 99 /* ESNext */) ? node.name.text : isClassLike(node) ? "class" : "member"; + if (isGetAccessor(node)) declarationName = `get_${declarationName}`; + if (isSetAccessor(node)) declarationName = `set_${declarationName}`; + if (node.name && isPrivateIdentifier(node.name)) declarationName = `private_${declarationName}`; + if (isStatic(node)) declarationName = `static_${declarationName}`; + return "_" + declarationName; + } + function createHelperVariable(node, suffix) { + return factory2.createUniqueName(`${getHelperVariableName(node)}_${suffix}`, 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */); + } + function createLet(name, initializer) { + return factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ) + ], 1 /* Let */) + ); + } + function createClassInfo(node) { + const metadataReference = factory2.createUniqueName("_metadata", 16 /* Optimistic */ | 32 /* FileLevel */); + let instanceMethodExtraInitializersName; + let staticMethodExtraInitializersName; + let hasStaticInitializers = false; + let hasNonAmbientInstanceFields = false; + let hasStaticPrivateClassElements = false; + let classThis2; + let pendingStaticInitializers; + let pendingInstanceInitializers; + if (nodeIsDecorated( + /*useLegacyDecorators*/ + false, + node + )) { + const needsUniqueClassThis = some(node.members, (member) => (isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member)); + classThis2 = factory2.createUniqueName( + "_classThis", + needsUniqueClassThis ? 16 /* Optimistic */ | 8 /* ReservedInNestedScopes */ : 16 /* Optimistic */ | 32 /* FileLevel */ + ); + } + for (const member of node.members) { + if (isMethodOrAccessor(member) && nodeOrChildIsDecorated( + /*useLegacyDecorators*/ + false, + member, + node + )) { + if (hasStaticModifier(member)) { + if (!staticMethodExtraInitializersName) { + staticMethodExtraInitializersName = factory2.createUniqueName("_staticExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */); + const initializer = emitHelpers().createRunInitializersHelper(classThis2 ?? factory2.createThis(), staticMethodExtraInitializersName); + setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node)); + pendingStaticInitializers ?? (pendingStaticInitializers = []); + pendingStaticInitializers.push(initializer); + } + } else { + if (!instanceMethodExtraInitializersName) { + instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */); + const initializer = emitHelpers().createRunInitializersHelper(factory2.createThis(), instanceMethodExtraInitializersName); + setSourceMapRange(initializer, node.name ?? moveRangePastDecorators(node)); + pendingInstanceInitializers ?? (pendingInstanceInitializers = []); + pendingInstanceInitializers.push(initializer); + } + instanceMethodExtraInitializersName ?? (instanceMethodExtraInitializersName = factory2.createUniqueName("_instanceExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */)); + } + } + if (isClassStaticBlockDeclaration(member)) { + if (!isClassNamedEvaluationHelperBlock(member)) { + hasStaticInitializers = true; + } + } else if (isPropertyDeclaration(member)) { + if (hasStaticModifier(member)) { + hasStaticInitializers || (hasStaticInitializers = !!member.initializer || hasDecorators(member)); + } else { + hasNonAmbientInstanceFields || (hasNonAmbientInstanceFields = !isAmbientPropertyDeclaration(member)); + } + } + if ((isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member)) { + hasStaticPrivateClassElements = true; + } + if (staticMethodExtraInitializersName && instanceMethodExtraInitializersName && hasStaticInitializers && hasNonAmbientInstanceFields && hasStaticPrivateClassElements) { + break; + } + } + return { + class: node, + classThis: classThis2, + metadataReference, + instanceMethodExtraInitializersName, + staticMethodExtraInitializersName, + hasStaticInitializers, + hasNonAmbientInstanceFields, + hasStaticPrivateClassElements, + pendingStaticInitializers, + pendingInstanceInitializers + }; + } + function transformClassLike(node) { + startLexicalEnvironment(); + if (!classHasDeclaredOrExplicitlyAssignedName(node) && classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + false, + node + )) { + node = injectClassNamedEvaluationHelperBlockIfMissing(context, node, factory2.createStringLiteral("")); + } + const classReference = factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + false, + /*ignoreAssignedName*/ + true + ); + const classInfo2 = createClassInfo(node); + const classDefinitionStatements = []; + let leadingBlockStatements; + let trailingBlockStatements; + let syntheticConstructor; + let heritageClauses; + let shouldTransformPrivateStaticElementsInClass = false; + const classDecorators = transformAllDecoratorsOfDeclaration(getAllDecoratorsOfClass( + node, + /*useLegacyDecorators*/ + false + )); + if (classDecorators) { + classInfo2.classDecoratorsName = factory2.createUniqueName("_classDecorators", 16 /* Optimistic */ | 32 /* FileLevel */); + classInfo2.classDescriptorName = factory2.createUniqueName("_classDescriptor", 16 /* Optimistic */ | 32 /* FileLevel */); + classInfo2.classExtraInitializersName = factory2.createUniqueName("_classExtraInitializers", 16 /* Optimistic */ | 32 /* FileLevel */); + Debug.assertIsDefined(classInfo2.classThis); + classDefinitionStatements.push( + createLet(classInfo2.classDecoratorsName, factory2.createArrayLiteralExpression(classDecorators)), + createLet(classInfo2.classDescriptorName), + createLet(classInfo2.classExtraInitializersName, factory2.createArrayLiteralExpression()), + createLet(classInfo2.classThis) + ); + if (classInfo2.hasStaticPrivateClassElements) { + shouldTransformPrivateStaticElementsInClass = true; + shouldTransformPrivateStaticElementsInFile = true; + } + } + const extendsClause = getHeritageClause(node.heritageClauses, 96 /* ExtendsKeyword */); + const extendsElement = extendsClause && firstOrUndefined(extendsClause.types); + const extendsExpression = extendsElement && visitNode(extendsElement.expression, visitor, isExpression); + if (extendsExpression) { + classInfo2.classSuper = factory2.createUniqueName("_classSuper", 16 /* Optimistic */ | 32 /* FileLevel */); + const unwrapped = skipOuterExpressions(extendsExpression); + const safeExtendsExpression = isClassExpression(unwrapped) && !unwrapped.name || isFunctionExpression(unwrapped) && !unwrapped.name || isArrowFunction(unwrapped) ? factory2.createComma(factory2.createNumericLiteral(0), extendsExpression) : extendsExpression; + classDefinitionStatements.push(createLet(classInfo2.classSuper, safeExtendsExpression)); + const updatedExtendsElement = factory2.updateExpressionWithTypeArguments( + extendsElement, + classInfo2.classSuper, + /*typeArguments*/ + void 0 + ); + const updatedExtendsClause = factory2.updateHeritageClause(extendsClause, [updatedExtendsElement]); + heritageClauses = factory2.createNodeArray([updatedExtendsClause]); + } + const renamedClassThis = classInfo2.classThis ?? factory2.createThis(); + enterClass(classInfo2); + leadingBlockStatements = append(leadingBlockStatements, createMetadata(classInfo2.metadataReference, classInfo2.classSuper)); + let members = node.members; + members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? node2 : classElementVisitor(node2), isClassElement); + members = visitNodes2(members, (node2) => isConstructorDeclaration(node2) ? classElementVisitor(node2) : node2, isClassElement); + if (pendingExpressions) { + let outerThis; + for (let expression of pendingExpressions) { + expression = visitNode(expression, function thisVisitor(node2) { + if (!(node2.transformFlags & 16384 /* ContainsLexicalThis */)) { + return node2; + } + switch (node2.kind) { + case 110 /* ThisKeyword */: + if (!outerThis) { + outerThis = factory2.createUniqueName("_outerThis", 16 /* Optimistic */); + classDefinitionStatements.unshift(createLet(outerThis, factory2.createThis())); + } + return outerThis; + default: + return visitEachChild(node2, thisVisitor, context); + } + }, isExpression); + const statement = factory2.createExpressionStatement(expression); + leadingBlockStatements = append(leadingBlockStatements, statement); + } + pendingExpressions = void 0; + } + exitClass(); + if (some(classInfo2.pendingInstanceInitializers) && !getFirstConstructorWithBody(node)) { + const initializerStatements = prepareConstructor(node, classInfo2); + if (initializerStatements) { + const extendsClauseElement = getEffectiveBaseTypeNode(node); + const isDerivedClass = !!(extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== 106 /* NullKeyword */); + const constructorStatements = []; + if (isDerivedClass) { + const spreadArguments = factory2.createSpreadElement(factory2.createIdentifier("arguments")); + const superCall = factory2.createCallExpression( + factory2.createSuper(), + /*typeArguments*/ + void 0, + [spreadArguments] + ); + constructorStatements.push(factory2.createExpressionStatement(superCall)); + } + addRange(constructorStatements, initializerStatements); + const constructorBody = factory2.createBlock( + constructorStatements, + /*multiLine*/ + true + ); + syntheticConstructor = factory2.createConstructorDeclaration( + /*modifiers*/ + void 0, + [], + constructorBody + ); + } + } + if (classInfo2.staticMethodExtraInitializersName) { + classDefinitionStatements.push( + createLet(classInfo2.staticMethodExtraInitializersName, factory2.createArrayLiteralExpression()) + ); + } + if (classInfo2.instanceMethodExtraInitializersName) { + classDefinitionStatements.push( + createLet(classInfo2.instanceMethodExtraInitializersName, factory2.createArrayLiteralExpression()) + ); + } + if (classInfo2.memberInfos) { + forEachEntry(classInfo2.memberInfos, (memberInfo, member) => { + if (isStatic(member)) { + classDefinitionStatements.push(createLet(memberInfo.memberDecoratorsName)); + if (memberInfo.memberInitializersName) { + classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression())); + } + if (memberInfo.memberExtraInitializersName) { + classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression())); + } + if (memberInfo.memberDescriptorName) { + classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName)); + } + } + }); + } + if (classInfo2.memberInfos) { + forEachEntry(classInfo2.memberInfos, (memberInfo, member) => { + if (!isStatic(member)) { + classDefinitionStatements.push(createLet(memberInfo.memberDecoratorsName)); + if (memberInfo.memberInitializersName) { + classDefinitionStatements.push(createLet(memberInfo.memberInitializersName, factory2.createArrayLiteralExpression())); + } + if (memberInfo.memberExtraInitializersName) { + classDefinitionStatements.push(createLet(memberInfo.memberExtraInitializersName, factory2.createArrayLiteralExpression())); + } + if (memberInfo.memberDescriptorName) { + classDefinitionStatements.push(createLet(memberInfo.memberDescriptorName)); + } + } + }); + } + leadingBlockStatements = addRange(leadingBlockStatements, classInfo2.staticNonFieldDecorationStatements); + leadingBlockStatements = addRange(leadingBlockStatements, classInfo2.nonStaticNonFieldDecorationStatements); + leadingBlockStatements = addRange(leadingBlockStatements, classInfo2.staticFieldDecorationStatements); + leadingBlockStatements = addRange(leadingBlockStatements, classInfo2.nonStaticFieldDecorationStatements); + if (classInfo2.classDescriptorName && classInfo2.classDecoratorsName && classInfo2.classExtraInitializersName && classInfo2.classThis) { + leadingBlockStatements ?? (leadingBlockStatements = []); + const valueProperty = factory2.createPropertyAssignment("value", renamedClassThis); + const classDescriptor = factory2.createObjectLiteralExpression([valueProperty]); + const classDescriptorAssignment = factory2.createAssignment(classInfo2.classDescriptorName, classDescriptor); + const classNameReference = factory2.createPropertyAccessExpression(renamedClassThis, "name"); + const esDecorateHelper2 = emitHelpers().createESDecorateHelper( + factory2.createNull(), + classDescriptorAssignment, + classInfo2.classDecoratorsName, + { kind: "class", name: classNameReference, metadata: classInfo2.metadataReference }, + factory2.createNull(), + classInfo2.classExtraInitializersName + ); + const esDecorateStatement = factory2.createExpressionStatement(esDecorateHelper2); + setSourceMapRange(esDecorateStatement, moveRangePastDecorators(node)); + leadingBlockStatements.push(esDecorateStatement); + const classDescriptorValueReference = factory2.createPropertyAccessExpression(classInfo2.classDescriptorName, "value"); + const classThisAssignment = factory2.createAssignment(classInfo2.classThis, classDescriptorValueReference); + const classReferenceAssignment = factory2.createAssignment(classReference, classThisAssignment); + leadingBlockStatements.push(factory2.createExpressionStatement(classReferenceAssignment)); + } + leadingBlockStatements.push(createSymbolMetadata(renamedClassThis, classInfo2.metadataReference)); + if (some(classInfo2.pendingStaticInitializers)) { + for (const initializer of classInfo2.pendingStaticInitializers) { + const initializerStatement = factory2.createExpressionStatement(initializer); + setSourceMapRange(initializerStatement, getSourceMapRange(initializer)); + trailingBlockStatements = append(trailingBlockStatements, initializerStatement); + } + classInfo2.pendingStaticInitializers = void 0; + } + if (classInfo2.classExtraInitializersName) { + const runClassInitializersHelper = emitHelpers().createRunInitializersHelper(renamedClassThis, classInfo2.classExtraInitializersName); + const runClassInitializersStatement = factory2.createExpressionStatement(runClassInitializersHelper); + setSourceMapRange(runClassInitializersStatement, node.name ?? moveRangePastDecorators(node)); + trailingBlockStatements = append(trailingBlockStatements, runClassInitializersStatement); + } + if (leadingBlockStatements && trailingBlockStatements && !classInfo2.hasStaticInitializers) { + addRange(leadingBlockStatements, trailingBlockStatements); + trailingBlockStatements = void 0; + } + const leadingStaticBlock = leadingBlockStatements && factory2.createClassStaticBlockDeclaration(factory2.createBlock( + leadingBlockStatements, + /*multiLine*/ + true + )); + if (leadingStaticBlock && shouldTransformPrivateStaticElementsInClass) { + setInternalEmitFlags(leadingStaticBlock, 32 /* TransformPrivateStaticElements */); + } + const trailingStaticBlock = trailingBlockStatements && factory2.createClassStaticBlockDeclaration(factory2.createBlock( + trailingBlockStatements, + /*multiLine*/ + true + )); + if (leadingStaticBlock || syntheticConstructor || trailingStaticBlock) { + const newMembers = []; + const existingNamedEvaluationHelperBlockIndex = members.findIndex(isClassNamedEvaluationHelperBlock); + if (leadingStaticBlock) { + addRange(newMembers, members, 0, existingNamedEvaluationHelperBlockIndex + 1); + newMembers.push(leadingStaticBlock); + addRange(newMembers, members, existingNamedEvaluationHelperBlockIndex + 1); + } else { + addRange(newMembers, members); + } + if (syntheticConstructor) { + newMembers.push(syntheticConstructor); + } + if (trailingStaticBlock) { + newMembers.push(trailingStaticBlock); + } + members = setTextRange(factory2.createNodeArray(newMembers), members); + } + const lexicalEnvironment = endLexicalEnvironment(); + let classExpression; + if (classDecorators) { + classExpression = factory2.createClassExpression( + /*modifiers*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + if (classInfo2.classThis) { + classExpression = injectClassThisAssignmentIfMissing(factory2, classExpression, classInfo2.classThis); + } + const classReferenceDeclaration = factory2.createVariableDeclaration( + classReference, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + classExpression + ); + const classReferenceVarDeclList = factory2.createVariableDeclarationList([classReferenceDeclaration]); + const returnExpr = classInfo2.classThis ? factory2.createAssignment(classReference, classInfo2.classThis) : classReference; + classDefinitionStatements.push( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + classReferenceVarDeclList + ), + factory2.createReturnStatement(returnExpr) + ); + } else { + classExpression = factory2.createClassExpression( + /*modifiers*/ + void 0, + node.name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + classDefinitionStatements.push(factory2.createReturnStatement(classExpression)); + } + if (shouldTransformPrivateStaticElementsInClass) { + addInternalEmitFlags(classExpression, 32 /* TransformPrivateStaticElements */); + for (const member of classExpression.members) { + if ((isPrivateIdentifierClassElementDeclaration(member) || isAutoAccessorPropertyDeclaration(member)) && hasStaticModifier(member)) { + addInternalEmitFlags(member, 32 /* TransformPrivateStaticElements */); + } + } + } + setOriginalNode(classExpression, node); + return factory2.createImmediatelyInvokedArrowFunction(factory2.mergeLexicalEnvironment(classDefinitionStatements, lexicalEnvironment)); + } + function isDecoratedClassLike(node) { + return classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + false, + node + ) || childIsDecorated( + /*useLegacyDecorators*/ + false, + node + ); + } + function visitClassDeclaration(node) { + if (isDecoratedClassLike(node)) { + const statements = []; + const originalClass = getOriginalNode(node, isClassLike) ?? node; + const className = originalClass.name ? factory2.createStringLiteralFromNode(originalClass.name) : factory2.createStringLiteral("default"); + const isExport = hasSyntacticModifier(node, 32 /* Export */); + const isDefault = hasSyntacticModifier(node, 2048 /* Default */); + if (!node.name) { + node = injectClassNamedEvaluationHelperBlockIfMissing(context, node, className); + } + if (isExport && isDefault) { + const iife = transformClassLike(node); + if (node.name) { + const varDecl = factory2.createVariableDeclaration( + factory2.getLocalName(node), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + iife + ); + setOriginalNode(varDecl, node); + const varDecls = factory2.createVariableDeclarationList([varDecl], 1 /* Let */); + const varStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + varDecls + ); + statements.push(varStatement); + const exportStatement = factory2.createExportDefault(factory2.getDeclarationName(node)); + setOriginalNode(exportStatement, node); + setCommentRange(exportStatement, getCommentRange(node)); + setSourceMapRange(exportStatement, moveRangePastDecorators(node)); + statements.push(exportStatement); + } else { + const exportStatement = factory2.createExportDefault(iife); + setOriginalNode(exportStatement, node); + setCommentRange(exportStatement, getCommentRange(node)); + setSourceMapRange(exportStatement, moveRangePastDecorators(node)); + statements.push(exportStatement); + } + } else { + Debug.assertIsDefined(node.name, "A class declaration that is not a default export must have a name."); + const iife = transformClassLike(node); + const modifierVisitorNoExport = isExport ? (node2) => isExportModifier(node2) ? void 0 : modifierVisitor(node2) : modifierVisitor; + const modifiers = visitNodes2(node.modifiers, modifierVisitorNoExport, isModifier); + const declName = factory2.getLocalName( + node, + /*allowComments*/ + false, + /*allowSourceMaps*/ + true + ); + const varDecl = factory2.createVariableDeclaration( + declName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + iife + ); + setOriginalNode(varDecl, node); + const varDecls = factory2.createVariableDeclarationList([varDecl], 1 /* Let */); + const varStatement = factory2.createVariableStatement(modifiers, varDecls); + setOriginalNode(varStatement, node); + setCommentRange(varStatement, getCommentRange(node)); + statements.push(varStatement); + if (isExport) { + const exportStatement = factory2.createExternalModuleExport(declName); + setOriginalNode(exportStatement, node); + statements.push(exportStatement); + } + } + return singleOrMany(statements); + } else { + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const heritageClauses = visitNodes2(node.heritageClauses, visitor, isHeritageClause); + enterClass( + /*classInfo*/ + void 0 + ); + const members = visitNodes2(node.members, classElementVisitor, isClassElement); + exitClass(); + return factory2.updateClassDeclaration( + node, + modifiers, + node.name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + } + } + function visitClassExpression(node) { + if (isDecoratedClassLike(node)) { + const iife = transformClassLike(node); + setOriginalNode(iife, node); + return iife; + } else { + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const heritageClauses = visitNodes2(node.heritageClauses, visitor, isHeritageClause); + enterClass( + /*classInfo*/ + void 0 + ); + const members = visitNodes2(node.members, classElementVisitor, isClassElement); + exitClass(); + return factory2.updateClassExpression( + node, + modifiers, + node.name, + /*typeParameters*/ + void 0, + heritageClauses, + members + ); + } + } + function prepareConstructor(_parent, classInfo2) { + if (some(classInfo2.pendingInstanceInitializers)) { + const statements = []; + statements.push( + factory2.createExpressionStatement( + factory2.inlineExpressions(classInfo2.pendingInstanceInitializers) + ) + ); + classInfo2.pendingInstanceInitializers = void 0; + return statements; + } + } + function transformConstructorBodyWorker(statementsOut, statementsIn, statementOffset, superPath, superPathDepth, initializerStatements) { + const superStatementIndex = superPath[superPathDepth]; + const superStatement = statementsIn[superStatementIndex]; + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, statementOffset, superStatementIndex - statementOffset)); + if (isTryStatement(superStatement)) { + const tryBlockStatements = []; + transformConstructorBodyWorker( + tryBlockStatements, + superStatement.tryBlock.statements, + /*statementOffset*/ + 0, + superPath, + superPathDepth + 1, + initializerStatements + ); + const tryBlockStatementsArray = factory2.createNodeArray(tryBlockStatements); + setTextRange(tryBlockStatementsArray, superStatement.tryBlock.statements); + statementsOut.push(factory2.updateTryStatement( + superStatement, + factory2.updateBlock(superStatement.tryBlock, tryBlockStatements), + visitNode(superStatement.catchClause, visitor, isCatchClause), + visitNode(superStatement.finallyBlock, visitor, isBlock) + )); + } else { + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, superStatementIndex, 1)); + addRange(statementsOut, initializerStatements); + } + addRange(statementsOut, visitNodes2(statementsIn, visitor, isStatement, superStatementIndex + 1)); + } + function visitConstructorDeclaration(node) { + enterClassElement(node); + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + const parameters = visitNodes2(node.parameters, visitor, isParameter); + let body; + if (node.body && classInfo) { + const initializerStatements = prepareConstructor(classInfo.class, classInfo); + if (initializerStatements) { + const statements = []; + const nonPrologueStart = factory2.copyPrologue( + node.body.statements, + statements, + /*ensureUseStrict*/ + false, + visitor + ); + const superStatementIndices = findSuperStatementIndexPath(node.body.statements, nonPrologueStart); + if (superStatementIndices.length > 0) { + transformConstructorBodyWorker(statements, node.body.statements, nonPrologueStart, superStatementIndices, 0, initializerStatements); + } else { + addRange(statements, initializerStatements); + addRange(statements, visitNodes2(node.body.statements, visitor, isStatement)); + } + body = factory2.createBlock( + statements, + /*multiLine*/ + true + ); + setOriginalNode(body, node.body); + setTextRange(body, node.body); + } + } + body ?? (body = visitNode(node.body, visitor, isBlock)); + exitClassElement(); + return factory2.updateConstructorDeclaration(node, modifiers, parameters, body); + } + function finishClassElement(updated, original) { + if (updated !== original) { + setCommentRange(updated, original); + setSourceMapRange(updated, moveRangePastDecorators(original)); + } + return updated; + } + function partialTransformClassElement(member, classInfo2, createDescriptor) { + let referencedName; + let name; + let initializersName; + let extraInitializersName; + let thisArg; + let descriptorName; + if (!classInfo2) { + const modifiers2 = visitNodes2(member.modifiers, modifierVisitor, isModifier); + enterName(); + name = visitPropertyName(member.name); + exitName(); + return { modifiers: modifiers2, referencedName, name, initializersName, descriptorName, thisArg }; + } + const memberDecorators = transformAllDecoratorsOfDeclaration(getAllDecoratorsOfClassElement( + member, + classInfo2.class, + /*useLegacyDecorators*/ + false + )); + const modifiers = visitNodes2(member.modifiers, modifierVisitor, isModifier); + if (memberDecorators) { + const memberDecoratorsName = createHelperVariable(member, "decorators"); + const memberDecoratorsArray = factory2.createArrayLiteralExpression(memberDecorators); + const memberDecoratorsAssignment = factory2.createAssignment(memberDecoratorsName, memberDecoratorsArray); + const memberInfo = { memberDecoratorsName }; + classInfo2.memberInfos ?? (classInfo2.memberInfos = /* @__PURE__ */ new Map()); + classInfo2.memberInfos.set(member, memberInfo); + pendingExpressions ?? (pendingExpressions = []); + pendingExpressions.push(memberDecoratorsAssignment); + const statements = isMethodOrAccessor(member) || isAutoAccessorPropertyDeclaration(member) ? isStatic(member) ? classInfo2.staticNonFieldDecorationStatements ?? (classInfo2.staticNonFieldDecorationStatements = []) : classInfo2.nonStaticNonFieldDecorationStatements ?? (classInfo2.nonStaticNonFieldDecorationStatements = []) : isPropertyDeclaration(member) && !isAutoAccessorPropertyDeclaration(member) ? isStatic(member) ? classInfo2.staticFieldDecorationStatements ?? (classInfo2.staticFieldDecorationStatements = []) : classInfo2.nonStaticFieldDecorationStatements ?? (classInfo2.nonStaticFieldDecorationStatements = []) : Debug.fail(); + const kind = isGetAccessorDeclaration(member) ? "getter" : isSetAccessorDeclaration(member) ? "setter" : isMethodDeclaration(member) ? "method" : isAutoAccessorPropertyDeclaration(member) ? "accessor" : isPropertyDeclaration(member) ? "field" : Debug.fail(); + let propertyName; + if (isIdentifier(member.name) || isPrivateIdentifier(member.name)) { + propertyName = { computed: false, name: member.name }; + } else if (isPropertyNameLiteral(member.name)) { + propertyName = { computed: true, name: factory2.createStringLiteralFromNode(member.name) }; + } else { + const expression = member.name.expression; + if (isPropertyNameLiteral(expression) && !isIdentifier(expression)) { + propertyName = { computed: true, name: factory2.createStringLiteralFromNode(expression) }; + } else { + enterName(); + ({ referencedName, name } = visitReferencedPropertyName(member.name)); + propertyName = { computed: true, name: referencedName }; + exitName(); + } + } + const context2 = { + kind, + name: propertyName, + static: isStatic(member), + private: isPrivateIdentifier(member.name), + access: { + // 15.7.3 CreateDecoratorAccessObject (kind, name) + // 2. If _kind_ is ~field~, ~method~, ~accessor~, or ~getter~, then ... + get: isPropertyDeclaration(member) || isGetAccessorDeclaration(member) || isMethodDeclaration(member), + // 3. If _kind_ is ~field~, ~accessor~, or ~setter~, then ... + set: isPropertyDeclaration(member) || isSetAccessorDeclaration(member) + }, + metadata: classInfo2.metadataReference + }; + if (isMethodOrAccessor(member)) { + const methodExtraInitializersName = isStatic(member) ? classInfo2.staticMethodExtraInitializersName : classInfo2.instanceMethodExtraInitializersName; + Debug.assertIsDefined(methodExtraInitializersName); + let descriptor; + if (isPrivateIdentifierClassElementDeclaration(member) && createDescriptor) { + descriptor = createDescriptor(member, visitNodes2(modifiers, (node) => tryCast(node, isAsyncModifier), isModifier)); + memberInfo.memberDescriptorName = descriptorName = createHelperVariable(member, "descriptor"); + descriptor = factory2.createAssignment(descriptorName, descriptor); + } + const esDecorateExpression = emitHelpers().createESDecorateHelper(factory2.createThis(), descriptor ?? factory2.createNull(), memberDecoratorsName, context2, factory2.createNull(), methodExtraInitializersName); + const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression); + setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member)); + statements.push(esDecorateStatement); + } else if (isPropertyDeclaration(member)) { + initializersName = memberInfo.memberInitializersName ?? (memberInfo.memberInitializersName = createHelperVariable(member, "initializers")); + extraInitializersName = memberInfo.memberExtraInitializersName ?? (memberInfo.memberExtraInitializersName = createHelperVariable(member, "extraInitializers")); + if (isStatic(member)) { + thisArg = classInfo2.classThis; + } + let descriptor; + if (isPrivateIdentifierClassElementDeclaration(member) && hasAccessorModifier(member) && createDescriptor) { + descriptor = createDescriptor( + member, + /*modifiers*/ + void 0 + ); + memberInfo.memberDescriptorName = descriptorName = createHelperVariable(member, "descriptor"); + descriptor = factory2.createAssignment(descriptorName, descriptor); + } + const esDecorateExpression = emitHelpers().createESDecorateHelper( + isAutoAccessorPropertyDeclaration(member) ? factory2.createThis() : factory2.createNull(), + descriptor ?? factory2.createNull(), + memberDecoratorsName, + context2, + initializersName, + extraInitializersName + ); + const esDecorateStatement = factory2.createExpressionStatement(esDecorateExpression); + setSourceMapRange(esDecorateStatement, moveRangePastDecorators(member)); + statements.push(esDecorateStatement); + } + } + if (name === void 0) { + enterName(); + name = visitPropertyName(member.name); + exitName(); + } + if (!some(modifiers) && (isMethodDeclaration(member) || isPropertyDeclaration(member))) { + setEmitFlags(name, 1024 /* NoLeadingComments */); + } + return { modifiers, referencedName, name, initializersName, extraInitializersName, descriptorName, thisArg }; + } + function visitMethodDeclaration(node) { + enterClassElement(node); + const { modifiers, name, descriptorName } = partialTransformClassElement(node, classInfo, createMethodDescriptorObject); + if (descriptorName) { + exitClassElement(); + return finishClassElement(createMethodDescriptorForwarder(modifiers, name, descriptorName), node); + } else { + const parameters = visitNodes2(node.parameters, visitor, isParameter); + const body = visitNode(node.body, visitor, isBlock); + exitClassElement(); + return finishClassElement(factory2.updateMethodDeclaration( + node, + modifiers, + node.asteriskToken, + name, + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body + ), node); + } + } + function visitGetAccessorDeclaration(node) { + enterClassElement(node); + const { modifiers, name, descriptorName } = partialTransformClassElement(node, classInfo, createGetAccessorDescriptorObject); + if (descriptorName) { + exitClassElement(); + return finishClassElement(createGetAccessorDescriptorForwarder(modifiers, name, descriptorName), node); + } else { + const parameters = visitNodes2(node.parameters, visitor, isParameter); + const body = visitNode(node.body, visitor, isBlock); + exitClassElement(); + return finishClassElement(factory2.updateGetAccessorDeclaration( + node, + modifiers, + name, + parameters, + /*type*/ + void 0, + body + ), node); + } + } + function visitSetAccessorDeclaration(node) { + enterClassElement(node); + const { modifiers, name, descriptorName } = partialTransformClassElement(node, classInfo, createSetAccessorDescriptorObject); + if (descriptorName) { + exitClassElement(); + return finishClassElement(createSetAccessorDescriptorForwarder(modifiers, name, descriptorName), node); + } else { + const parameters = visitNodes2(node.parameters, visitor, isParameter); + const body = visitNode(node.body, visitor, isBlock); + exitClassElement(); + return finishClassElement(factory2.updateSetAccessorDeclaration(node, modifiers, name, parameters, body), node); + } + } + function visitClassStaticBlockDeclaration(node) { + enterClassElement(node); + let result; + if (isClassNamedEvaluationHelperBlock(node)) { + result = visitEachChild(node, visitor, context); + } else if (isClassThisAssignmentBlock(node)) { + const savedClassThis = classThis; + classThis = void 0; + result = visitEachChild(node, visitor, context); + classThis = savedClassThis; + } else { + node = visitEachChild(node, visitor, context); + result = node; + if (classInfo) { + classInfo.hasStaticInitializers = true; + if (some(classInfo.pendingStaticInitializers)) { + const statements = []; + for (const initializer of classInfo.pendingStaticInitializers) { + const initializerStatement = factory2.createExpressionStatement(initializer); + setSourceMapRange(initializerStatement, getSourceMapRange(initializer)); + statements.push(initializerStatement); + } + const body = factory2.createBlock( + statements, + /*multiLine*/ + true + ); + const staticBlock = factory2.createClassStaticBlockDeclaration(body); + result = [staticBlock, result]; + classInfo.pendingStaticInitializers = void 0; + } + } + } + exitClassElement(); + return result; + } + function visitPropertyDeclaration(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.initializer)); + } + enterClassElement(node); + Debug.assert(!isAmbientPropertyDeclaration(node), "Not yet implemented."); + const { modifiers, name, initializersName, extraInitializersName, descriptorName, thisArg } = partialTransformClassElement(node, classInfo, hasAccessorModifier(node) ? createAccessorPropertyDescriptorObject : void 0); + startLexicalEnvironment(); + let initializer = visitNode(node.initializer, visitor, isExpression); + if (initializersName) { + initializer = emitHelpers().createRunInitializersHelper( + thisArg ?? factory2.createThis(), + initializersName, + initializer ?? factory2.createVoidZero() + ); + } + if (isStatic(node) && classInfo && initializer) { + classInfo.hasStaticInitializers = true; + } + const declarations = endLexicalEnvironment(); + if (some(declarations)) { + initializer = factory2.createImmediatelyInvokedArrowFunction([ + ...declarations, + factory2.createReturnStatement(initializer) + ]); + } + if (classInfo) { + if (isStatic(node)) { + initializer = injectPendingInitializers( + classInfo, + /*isStatic*/ + true, + initializer + ); + if (extraInitializersName) { + classInfo.pendingStaticInitializers ?? (classInfo.pendingStaticInitializers = []); + classInfo.pendingStaticInitializers.push( + emitHelpers().createRunInitializersHelper( + classInfo.classThis ?? factory2.createThis(), + extraInitializersName + ) + ); + } + } else { + initializer = injectPendingInitializers( + classInfo, + /*isStatic*/ + false, + initializer + ); + if (extraInitializersName) { + classInfo.pendingInstanceInitializers ?? (classInfo.pendingInstanceInitializers = []); + classInfo.pendingInstanceInitializers.push( + emitHelpers().createRunInitializersHelper( + factory2.createThis(), + extraInitializersName + ) + ); + } + } + } + exitClassElement(); + if (hasAccessorModifier(node) && descriptorName) { + const commentRange = getCommentRange(node); + const sourceMapRange = getSourceMapRange(node); + const name2 = node.name; + let getterName = name2; + let setterName = name2; + if (isComputedPropertyName(name2) && !isSimpleInlineableExpression(name2.expression)) { + const cacheAssignment = findComputedPropertyNameCacheAssignment(name2); + if (cacheAssignment) { + getterName = factory2.updateComputedPropertyName(name2, visitNode(name2.expression, visitor, isExpression)); + setterName = factory2.updateComputedPropertyName(name2, cacheAssignment.left); + } else { + const temp = factory2.createTempVariable(hoistVariableDeclaration); + setSourceMapRange(temp, name2.expression); + const expression = visitNode(name2.expression, visitor, isExpression); + const assignment = factory2.createAssignment(temp, expression); + setSourceMapRange(assignment, name2.expression); + getterName = factory2.updateComputedPropertyName(name2, assignment); + setterName = factory2.updateComputedPropertyName(name2, temp); + } + } + const modifiersWithoutAccessor = visitNodes2(modifiers, (node2) => node2.kind !== 129 /* AccessorKeyword */ ? node2 : void 0, isModifier); + const backingField = createAccessorPropertyBackingField(factory2, node, modifiersWithoutAccessor, initializer); + setOriginalNode(backingField, node); + setEmitFlags(backingField, 3072 /* NoComments */); + setSourceMapRange(backingField, sourceMapRange); + setSourceMapRange(backingField.name, node.name); + const getter = createGetAccessorDescriptorForwarder(modifiersWithoutAccessor, getterName, descriptorName); + setOriginalNode(getter, node); + setCommentRange(getter, commentRange); + setSourceMapRange(getter, sourceMapRange); + const setter = createSetAccessorDescriptorForwarder(modifiersWithoutAccessor, setterName, descriptorName); + setOriginalNode(setter, node); + setEmitFlags(setter, 3072 /* NoComments */); + setSourceMapRange(setter, sourceMapRange); + return [backingField, getter, setter]; + } + return finishClassElement(factory2.updatePropertyDeclaration( + node, + modifiers, + name, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ), node); + } + function visitThisExpression(node) { + return classThis ?? node; + } + function visitCallExpression(node) { + if (isSuperProperty(node.expression) && classThis) { + const expression = visitNode(node.expression, visitor, isExpression); + const argumentsList = visitNodes2(node.arguments, visitor, isExpression); + const invocation = factory2.createFunctionCallCall(expression, classThis, argumentsList); + setOriginalNode(invocation, node); + setTextRange(invocation, node); + return invocation; + } + return visitEachChild(node, visitor, context); + } + function visitTaggedTemplateExpression(node) { + if (isSuperProperty(node.tag) && classThis) { + const tag = visitNode(node.tag, visitor, isExpression); + const boundTag = factory2.createFunctionBindCall(tag, classThis, []); + setOriginalNode(boundTag, node); + setTextRange(boundTag, node); + const template = visitNode(node.template, visitor, isTemplateLiteral); + return factory2.updateTaggedTemplateExpression( + node, + boundTag, + /*typeArguments*/ + void 0, + template + ); + } + return visitEachChild(node, visitor, context); + } + function visitPropertyAccessExpression(node) { + if (isSuperProperty(node) && isIdentifier(node.name) && classThis && classSuper) { + const propertyName = factory2.createStringLiteralFromNode(node.name); + const superProperty = factory2.createReflectGetCall(classSuper, propertyName, classThis); + setOriginalNode(superProperty, node.expression); + setTextRange(superProperty, node.expression); + return superProperty; + } + return visitEachChild(node, visitor, context); + } + function visitElementAccessExpression(node) { + if (isSuperProperty(node) && classThis && classSuper) { + const propertyName = visitNode(node.argumentExpression, visitor, isExpression); + const superProperty = factory2.createReflectGetCall(classSuper, propertyName, classThis); + setOriginalNode(superProperty, node.expression); + setTextRange(superProperty, node.expression); + return superProperty; + } + return visitEachChild(node, visitor, context); + } + function visitParameterDeclaration(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.initializer)); + } + const updated = factory2.updateParameterDeclaration( + node, + /*modifiers*/ + void 0, + node.dotDotDotToken, + visitNode(node.name, visitor, isBindingName), + /*questionToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + if (updated !== node) { + setCommentRange(updated, node); + setTextRange(updated, moveRangePastModifiers(node)); + setSourceMapRange(updated, moveRangePastModifiers(node)); + setEmitFlags(updated.name, 64 /* NoTrailingSourceMap */); + } + return updated; + } + function isAnonymousClassNeedingAssignedName(node) { + return isClassExpression(node) && !node.name && isDecoratedClassLike(node); + } + function canIgnoreEmptyStringLiteralInAssignedName(node) { + const innerExpression = skipOuterExpressions(node); + return isClassExpression(innerExpression) && !innerExpression.name && !classOrConstructorParameterIsDecorated( + /*useLegacyDecorators*/ + false, + innerExpression + ); + } + function visitForStatement(node) { + return factory2.updateForStatement( + node, + visitNode(node.initializer, discardedValueVisitor, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, discardedValueVisitor, isExpression), + visitIterationBody(node.statement, visitor, context) + ); + } + function visitExpressionStatement(node) { + return visitEachChild(node, discardedValueVisitor, context); + } + function visitBinaryExpression(node, discarded) { + if (isDestructuringAssignment(node)) { + const left = visitAssignmentPattern(node.left); + const right = visitNode(node.right, visitor, isExpression); + return factory2.updateBinaryExpression(node, left, node.operatorToken, right); + } + if (isAssignmentExpression(node)) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.right)); + return visitEachChild(node, visitor, context); + } + if (isSuperProperty(node.left) && classThis && classSuper) { + let setterName = isElementAccessExpression(node.left) ? visitNode(node.left.argumentExpression, visitor, isExpression) : isIdentifier(node.left.name) ? factory2.createStringLiteralFromNode(node.left.name) : void 0; + if (setterName) { + let expression = visitNode(node.right, visitor, isExpression); + if (isCompoundAssignment(node.operatorToken.kind)) { + let getterName = setterName; + if (!isSimpleInlineableExpression(setterName)) { + getterName = factory2.createTempVariable(hoistVariableDeclaration); + setterName = factory2.createAssignment(getterName, setterName); + } + const superPropertyGet = factory2.createReflectGetCall( + classSuper, + getterName, + classThis + ); + setOriginalNode(superPropertyGet, node.left); + setTextRange(superPropertyGet, node.left); + expression = factory2.createBinaryExpression( + superPropertyGet, + getNonAssignmentOperatorForCompoundAssignment(node.operatorToken.kind), + expression + ); + setTextRange(expression, node); + } + const temp = discarded ? void 0 : factory2.createTempVariable(hoistVariableDeclaration); + if (temp) { + expression = factory2.createAssignment(temp, expression); + setTextRange(temp, node); + } + expression = factory2.createReflectSetCall( + classSuper, + setterName, + expression, + classThis + ); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + } + if (node.operatorToken.kind === 28 /* CommaToken */) { + const left = visitNode(node.left, discardedValueVisitor, isExpression); + const right = visitNode(node.right, discarded ? discardedValueVisitor : visitor, isExpression); + return factory2.updateBinaryExpression(node, left, node.operatorToken, right); + } + return visitEachChild(node, visitor, context); + } + function visitPreOrPostfixUnaryExpression(node, discarded) { + if (node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) { + const operand = skipParentheses(node.operand); + if (isSuperProperty(operand) && classThis && classSuper) { + let setterName = isElementAccessExpression(operand) ? visitNode(operand.argumentExpression, visitor, isExpression) : isIdentifier(operand.name) ? factory2.createStringLiteralFromNode(operand.name) : void 0; + if (setterName) { + let getterName = setterName; + if (!isSimpleInlineableExpression(setterName)) { + getterName = factory2.createTempVariable(hoistVariableDeclaration); + setterName = factory2.createAssignment(getterName, setterName); + } + let expression = factory2.createReflectGetCall(classSuper, getterName, classThis); + setOriginalNode(expression, node); + setTextRange(expression, node); + const temp = discarded ? void 0 : factory2.createTempVariable(hoistVariableDeclaration); + expression = expandPreOrPostfixIncrementOrDecrementExpression(factory2, node, expression, hoistVariableDeclaration, temp); + expression = factory2.createReflectSetCall(classSuper, setterName, expression, classThis); + setOriginalNode(expression, node); + setTextRange(expression, node); + if (temp) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + } + return visitEachChild(node, visitor, context); + } + function visitCommaListExpression(node, discarded) { + const elements = discarded ? visitCommaListElements(node.elements, discardedValueVisitor) : visitCommaListElements(node.elements, visitor, discardedValueVisitor); + return factory2.updateCommaListExpression(node, elements); + } + function visitReferencedPropertyName(node) { + if (isPropertyNameLiteral(node) || isPrivateIdentifier(node)) { + const referencedName2 = factory2.createStringLiteralFromNode(node); + const name2 = visitNode(node, visitor, isPropertyName); + return { referencedName: referencedName2, name: name2 }; + } + if (isPropertyNameLiteral(node.expression) && !isIdentifier(node.expression)) { + const referencedName2 = factory2.createStringLiteralFromNode(node.expression); + const name2 = visitNode(node, visitor, isPropertyName); + return { referencedName: referencedName2, name: name2 }; + } + const referencedName = factory2.getGeneratedNameForNode(node); + hoistVariableDeclaration(referencedName); + const key = emitHelpers().createPropKeyHelper(visitNode(node.expression, visitor, isExpression)); + const assignment = factory2.createAssignment(referencedName, key); + const name = factory2.updateComputedPropertyName(node, injectPendingExpressions(assignment)); + return { referencedName, name }; + } + function visitPropertyName(node) { + if (isComputedPropertyName(node)) { + return visitComputedPropertyName(node); + } + return visitNode(node, visitor, isPropertyName); + } + function visitComputedPropertyName(node) { + let expression = visitNode(node.expression, visitor, isExpression); + if (!isSimpleInlineableExpression(expression)) { + expression = injectPendingExpressions(expression); + } + return factory2.updateComputedPropertyName(node, expression); + } + function visitPropertyAssignment(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.initializer)); + } + return visitEachChild(node, visitor, context); + } + function visitVariableDeclaration(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.initializer)); + } + return visitEachChild(node, visitor, context); + } + function visitBindingElement(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.initializer)); + } + return visitEachChild(node, visitor, context); + } + function visitDestructuringAssignmentTarget(node) { + if (isObjectLiteralExpression(node) || isArrayLiteralExpression(node)) { + return visitAssignmentPattern(node); + } + if (isSuperProperty(node) && classThis && classSuper) { + const propertyName = isElementAccessExpression(node) ? visitNode(node.argumentExpression, visitor, isExpression) : isIdentifier(node.name) ? factory2.createStringLiteralFromNode(node.name) : void 0; + if (propertyName) { + const paramName = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const expression = factory2.createAssignmentTargetWrapper( + paramName, + factory2.createReflectSetCall( + classSuper, + propertyName, + paramName, + classThis + ) + ); + setOriginalNode(expression, node); + setTextRange(expression, node); + return expression; + } + } + return visitEachChild(node, visitor, context); + } + function visitAssignmentElement(node) { + if (isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + )) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.right)); + } + const assignmentTarget = visitDestructuringAssignmentTarget(node.left); + const initializer = visitNode(node.right, visitor, isExpression); + return factory2.updateBinaryExpression(node, assignmentTarget, node.operatorToken, initializer); + } else { + return visitDestructuringAssignmentTarget(node); + } + } + function visitAssignmentRestElement(node) { + if (isLeftHandSideExpression(node.expression)) { + const expression = visitDestructuringAssignmentTarget(node.expression); + return factory2.updateSpreadElement(node, expression); + } + return visitEachChild(node, visitor, context); + } + function visitArrayAssignmentElement(node) { + Debug.assertNode(node, isArrayBindingOrAssignmentElement); + if (isSpreadElement(node)) return visitAssignmentRestElement(node); + if (!isOmittedExpression(node)) return visitAssignmentElement(node); + return visitEachChild(node, visitor, context); + } + function visitAssignmentProperty(node) { + const name = visitNode(node.name, visitor, isPropertyName); + if (isAssignmentExpression( + node.initializer, + /*excludeCompoundAssignment*/ + true + )) { + const assignmentElement = visitAssignmentElement(node.initializer); + return factory2.updatePropertyAssignment(node, name, assignmentElement); + } + if (isLeftHandSideExpression(node.initializer)) { + const assignmentElement = visitDestructuringAssignmentTarget(node.initializer); + return factory2.updatePropertyAssignment(node, name, assignmentElement); + } + return visitEachChild(node, visitor, context); + } + function visitShorthandAssignmentProperty(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.objectAssignmentInitializer)); + } + return visitEachChild(node, visitor, context); + } + function visitAssignmentRestProperty(node) { + if (isLeftHandSideExpression(node.expression)) { + const expression = visitDestructuringAssignmentTarget(node.expression); + return factory2.updateSpreadAssignment(node, expression); + } + return visitEachChild(node, visitor, context); + } + function visitObjectAssignmentElement(node) { + Debug.assertNode(node, isObjectBindingOrAssignmentElement); + if (isSpreadAssignment(node)) return visitAssignmentRestProperty(node); + if (isShorthandPropertyAssignment(node)) return visitShorthandAssignmentProperty(node); + if (isPropertyAssignment(node)) return visitAssignmentProperty(node); + return visitEachChild(node, visitor, context); + } + function visitAssignmentPattern(node) { + if (isArrayLiteralExpression(node)) { + const elements = visitNodes2(node.elements, visitArrayAssignmentElement, isExpression); + return factory2.updateArrayLiteralExpression(node, elements); + } else { + const properties = visitNodes2(node.properties, visitObjectAssignmentElement, isObjectLiteralElementLike); + return factory2.updateObjectLiteralExpression(node, properties); + } + } + function visitExportAssignment(node) { + if (isNamedEvaluation(node, isAnonymousClassNeedingAssignedName)) { + node = transformNamedEvaluation(context, node, canIgnoreEmptyStringLiteralInAssignedName(node.expression)); + } + return visitEachChild(node, visitor, context); + } + function visitParenthesizedExpression(node, discarded) { + const visitorFunc = discarded ? discardedValueVisitor : visitor; + const expression = visitNode(node.expression, visitorFunc, isExpression); + return factory2.updateParenthesizedExpression(node, expression); + } + function visitPartiallyEmittedExpression(node, discarded) { + const visitorFunc = discarded ? discardedValueVisitor : visitor; + const expression = visitNode(node.expression, visitorFunc, isExpression); + return factory2.updatePartiallyEmittedExpression(node, expression); + } + function injectPendingExpressionsCommon(pendingExpressions2, expression) { + if (some(pendingExpressions2)) { + if (expression) { + if (isParenthesizedExpression(expression)) { + pendingExpressions2.push(expression.expression); + expression = factory2.updateParenthesizedExpression(expression, factory2.inlineExpressions(pendingExpressions2)); + } else { + pendingExpressions2.push(expression); + expression = factory2.inlineExpressions(pendingExpressions2); + } + } else { + expression = factory2.inlineExpressions(pendingExpressions2); + } + } + return expression; + } + function injectPendingExpressions(expression) { + const result = injectPendingExpressionsCommon(pendingExpressions, expression); + Debug.assertIsDefined(result); + if (result !== expression) { + pendingExpressions = void 0; + } + return result; + } + function injectPendingInitializers(classInfo2, isStatic2, expression) { + const result = injectPendingExpressionsCommon(isStatic2 ? classInfo2.pendingStaticInitializers : classInfo2.pendingInstanceInitializers, expression); + if (result !== expression) { + if (isStatic2) { + classInfo2.pendingStaticInitializers = void 0; + } else { + classInfo2.pendingInstanceInitializers = void 0; + } + } + return result; + } + function transformAllDecoratorsOfDeclaration(allDecorators) { + if (!allDecorators) { + return void 0; + } + const decoratorExpressions = []; + addRange(decoratorExpressions, map(allDecorators.decorators, transformDecorator)); + return decoratorExpressions; + } + function transformDecorator(decorator) { + const expression = visitNode(decorator.expression, visitor, isExpression); + setEmitFlags(expression, 3072 /* NoComments */); + const innerExpression = skipOuterExpressions(expression); + if (isAccessExpression(innerExpression)) { + const { target, thisArg } = factory2.createCallBinding( + expression, + hoistVariableDeclaration, + languageVersion, + /*cacheIdentifiers*/ + true + ); + return factory2.restoreOuterExpressions(expression, factory2.createFunctionBindCall(target, thisArg, [])); + } + return expression; + } + function createDescriptorMethod(original, name, modifiers, asteriskToken, kind, parameters, body) { + const func = factory2.createFunctionExpression( + modifiers, + asteriskToken, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body ?? factory2.createBlock([]) + ); + setOriginalNode(func, original); + setSourceMapRange(func, moveRangePastDecorators(original)); + setEmitFlags(func, 3072 /* NoComments */); + const prefix = kind === "get" || kind === "set" ? kind : void 0; + const functionName = factory2.createStringLiteralFromNode( + name, + /*isSingleQuote*/ + void 0 + ); + const namedFunction = emitHelpers().createSetFunctionNameHelper(func, functionName, prefix); + const method = factory2.createPropertyAssignment(factory2.createIdentifier(kind), namedFunction); + setOriginalNode(method, original); + setSourceMapRange(method, moveRangePastDecorators(original)); + setEmitFlags(method, 3072 /* NoComments */); + return method; + } + function createMethodDescriptorObject(node, modifiers) { + return factory2.createObjectLiteralExpression([ + createDescriptorMethod( + node, + node.name, + modifiers, + node.asteriskToken, + "value", + visitNodes2(node.parameters, visitor, isParameter), + visitNode(node.body, visitor, isBlock) + ) + ]); + } + function createGetAccessorDescriptorObject(node, modifiers) { + return factory2.createObjectLiteralExpression([ + createDescriptorMethod( + node, + node.name, + modifiers, + /*asteriskToken*/ + void 0, + "get", + [], + visitNode(node.body, visitor, isBlock) + ) + ]); + } + function createSetAccessorDescriptorObject(node, modifiers) { + return factory2.createObjectLiteralExpression([ + createDescriptorMethod( + node, + node.name, + modifiers, + /*asteriskToken*/ + void 0, + "set", + visitNodes2(node.parameters, visitor, isParameter), + visitNode(node.body, visitor, isBlock) + ) + ]); + } + function createAccessorPropertyDescriptorObject(node, modifiers) { + return factory2.createObjectLiteralExpression([ + createDescriptorMethod( + node, + node.name, + modifiers, + /*asteriskToken*/ + void 0, + "get", + [], + factory2.createBlock([ + factory2.createReturnStatement( + factory2.createPropertyAccessExpression( + factory2.createThis(), + factory2.getGeneratedPrivateNameForNode(node.name) + ) + ) + ]) + ), + createDescriptorMethod( + node, + node.name, + modifiers, + /*asteriskToken*/ + void 0, + "set", + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "value" + )], + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression( + factory2.createThis(), + factory2.getGeneratedPrivateNameForNode(node.name) + ), + factory2.createIdentifier("value") + ) + ) + ]) + ) + ]); + } + function createMethodDescriptorForwarder(modifiers, name, descriptorName) { + modifiers = visitNodes2(modifiers, (node) => isStaticModifier(node) ? node : void 0, isModifier); + return factory2.createGetAccessorDeclaration( + modifiers, + name, + [], + /*type*/ + void 0, + factory2.createBlock([ + factory2.createReturnStatement( + factory2.createPropertyAccessExpression( + descriptorName, + factory2.createIdentifier("value") + ) + ) + ]) + ); + } + function createGetAccessorDescriptorForwarder(modifiers, name, descriptorName) { + modifiers = visitNodes2(modifiers, (node) => isStaticModifier(node) ? node : void 0, isModifier); + return factory2.createGetAccessorDeclaration( + modifiers, + name, + [], + /*type*/ + void 0, + factory2.createBlock([ + factory2.createReturnStatement( + factory2.createFunctionCallCall( + factory2.createPropertyAccessExpression( + descriptorName, + factory2.createIdentifier("get") + ), + factory2.createThis(), + [] + ) + ) + ]) + ); + } + function createSetAccessorDescriptorForwarder(modifiers, name, descriptorName) { + modifiers = visitNodes2(modifiers, (node) => isStaticModifier(node) ? node : void 0, isModifier); + return factory2.createSetAccessorDeclaration( + modifiers, + name, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "value" + )], + factory2.createBlock([ + factory2.createReturnStatement( + factory2.createFunctionCallCall( + factory2.createPropertyAccessExpression( + descriptorName, + factory2.createIdentifier("set") + ), + factory2.createThis(), + [factory2.createIdentifier("value")] + ) + ) + ]) + ); + } + function createMetadata(name, classSuper2) { + const varDecl = factory2.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createConditionalExpression( + factory2.createLogicalAnd( + factory2.createTypeCheck(factory2.createIdentifier("Symbol"), "function"), + factory2.createPropertyAccessExpression(factory2.createIdentifier("Symbol"), "metadata") + ), + factory2.createToken(58 /* QuestionToken */), + factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createIdentifier("Object"), "create"), + /*typeArguments*/ + void 0, + [classSuper2 ? createSymbolMetadataReference(classSuper2) : factory2.createNull()] + ), + factory2.createToken(59 /* ColonToken */), + factory2.createVoidZero() + ) + ); + return factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([varDecl], 2 /* Const */) + ); + } + function createSymbolMetadata(target, value) { + const defineProperty = factory2.createObjectDefinePropertyCall( + target, + factory2.createPropertyAccessExpression(factory2.createIdentifier("Symbol"), "metadata"), + factory2.createPropertyDescriptor( + { configurable: true, writable: true, enumerable: true, value }, + /*singleLine*/ + true + ) + ); + return setEmitFlags( + factory2.createIfStatement(value, factory2.createExpressionStatement(defineProperty)), + 1 /* SingleLine */ + ); + } + function createSymbolMetadataReference(classSuper2) { + return factory2.createBinaryExpression( + factory2.createElementAccessExpression( + classSuper2, + factory2.createPropertyAccessExpression(factory2.createIdentifier("Symbol"), "metadata") + ), + 61 /* QuestionQuestionToken */, + factory2.createNull() + ); + } +} + +// src/compiler/transformers/es2017.ts +function transformES2017(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + resumeLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + let enabledSubstitutions = 0 /* None */; + let enclosingSuperContainerFlags = 0; + let enclosingFunctionParameterNames; + let capturedSuperProperties; + let hasSuperElementAccess; + let lexicalArgumentsBinding; + const substitutedSuperAccessors = []; + let contextFlags = 0 /* None */; + const previousOnEmitNode = context.onEmitNode; + const previousOnSubstituteNode = context.onSubstituteNode; + context.onEmitNode = onEmitNode; + context.onSubstituteNode = onSubstituteNode; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + setContextFlag(1 /* NonTopLevel */, false); + setContextFlag(2 /* HasLexicalThis */, !isEffectiveStrictModeSourceFile(node, compilerOptions)); + const visited = visitEachChild(node, visitor, context); + addEmitHelpers(visited, context.readEmitHelpers()); + return visited; + } + function setContextFlag(flag, val) { + contextFlags = val ? contextFlags | flag : contextFlags & ~flag; + } + function inContext(flags) { + return (contextFlags & flags) !== 0; + } + function inTopLevelContext() { + return !inContext(1 /* NonTopLevel */); + } + function inHasLexicalThisContext() { + return inContext(2 /* HasLexicalThis */); + } + function doWithContext(flags, cb, value) { + const contextFlagsToSet = flags & ~contextFlags; + if (contextFlagsToSet) { + setContextFlag( + contextFlagsToSet, + /*val*/ + true + ); + const result = cb(value); + setContextFlag( + contextFlagsToSet, + /*val*/ + false + ); + return result; + } + return cb(value); + } + function visitDefault(node) { + return visitEachChild(node, visitor, context); + } + function argumentsVisitor(node) { + switch (node.kind) { + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 177 /* Constructor */: + return node; + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 261 /* VariableDeclaration */: + break; + case 80 /* Identifier */: + if (lexicalArgumentsBinding && resolver.isArgumentsLocalBinding(node)) { + return lexicalArgumentsBinding; + } + break; + } + return visitEachChild(node, argumentsVisitor, context); + } + function visitor(node) { + if ((node.transformFlags & 256 /* ContainsES2017 */) === 0) { + return lexicalArgumentsBinding ? argumentsVisitor(node) : node; + } + switch (node.kind) { + case 134 /* AsyncKeyword */: + return void 0; + case 224 /* AwaitExpression */: + return visitAwaitExpression(node); + case 175 /* MethodDeclaration */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitMethodDeclaration, node); + case 263 /* FunctionDeclaration */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionDeclaration, node); + case 219 /* FunctionExpression */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitFunctionExpression, node); + case 220 /* ArrowFunction */: + return doWithContext(1 /* NonTopLevel */, visitArrowFunction, node); + case 212 /* PropertyAccessExpression */: + if (capturedSuperProperties && isPropertyAccessExpression(node) && node.expression.kind === 108 /* SuperKeyword */) { + capturedSuperProperties.add(node.name.escapedText); + } + return visitEachChild(node, visitor, context); + case 213 /* ElementAccessExpression */: + if (capturedSuperProperties && node.expression.kind === 108 /* SuperKeyword */) { + hasSuperElementAccess = true; + } + return visitEachChild(node, visitor, context); + case 178 /* GetAccessor */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitGetAccessorDeclaration, node); + case 179 /* SetAccessor */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitSetAccessorDeclaration, node); + case 177 /* Constructor */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitConstructorDeclaration, node); + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return doWithContext(1 /* NonTopLevel */ | 2 /* HasLexicalThis */, visitDefault, node); + default: + return visitEachChild(node, visitor, context); + } + } + function asyncBodyVisitor(node) { + if (isNodeWithPossibleHoistedDeclaration(node)) { + switch (node.kind) { + case 244 /* VariableStatement */: + return visitVariableStatementInAsyncBody(node); + case 249 /* ForStatement */: + return visitForStatementInAsyncBody(node); + case 250 /* ForInStatement */: + return visitForInStatementInAsyncBody(node); + case 251 /* ForOfStatement */: + return visitForOfStatementInAsyncBody(node); + case 300 /* CatchClause */: + return visitCatchClauseInAsyncBody(node); + case 242 /* Block */: + case 256 /* SwitchStatement */: + case 270 /* CaseBlock */: + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + case 259 /* TryStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 246 /* IfStatement */: + case 255 /* WithStatement */: + case 257 /* LabeledStatement */: + return visitEachChild(node, asyncBodyVisitor, context); + default: + return Debug.assertNever(node, "Unhandled node."); + } + } + return visitor(node); + } + function visitCatchClauseInAsyncBody(node) { + const catchClauseNames = /* @__PURE__ */ new Set(); + recordDeclarationName(node.variableDeclaration, catchClauseNames); + let catchClauseUnshadowedNames; + catchClauseNames.forEach((_, escapedName) => { + if (enclosingFunctionParameterNames.has(escapedName)) { + if (!catchClauseUnshadowedNames) { + catchClauseUnshadowedNames = new Set(enclosingFunctionParameterNames); + } + catchClauseUnshadowedNames.delete(escapedName); + } + }); + if (catchClauseUnshadowedNames) { + const savedEnclosingFunctionParameterNames = enclosingFunctionParameterNames; + enclosingFunctionParameterNames = catchClauseUnshadowedNames; + const result = visitEachChild(node, asyncBodyVisitor, context); + enclosingFunctionParameterNames = savedEnclosingFunctionParameterNames; + return result; + } else { + return visitEachChild(node, asyncBodyVisitor, context); + } + } + function visitVariableStatementInAsyncBody(node) { + if (isVariableDeclarationListWithCollidingName(node.declarationList)) { + const expression = visitVariableDeclarationListWithCollidingNames( + node.declarationList, + /*hasReceiver*/ + false + ); + return expression ? factory2.createExpressionStatement(expression) : void 0; + } + return visitEachChild(node, visitor, context); + } + function visitForInStatementInAsyncBody(node) { + return factory2.updateForInStatement( + node, + isVariableDeclarationListWithCollidingName(node.initializer) ? visitVariableDeclarationListWithCollidingNames( + node.initializer, + /*hasReceiver*/ + true + ) : Debug.checkDefined(visitNode(node.initializer, visitor, isForInitializer)), + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + visitIterationBody(node.statement, asyncBodyVisitor, context) + ); + } + function visitForOfStatementInAsyncBody(node) { + return factory2.updateForOfStatement( + node, + visitNode(node.awaitModifier, visitor, isAwaitKeyword), + isVariableDeclarationListWithCollidingName(node.initializer) ? visitVariableDeclarationListWithCollidingNames( + node.initializer, + /*hasReceiver*/ + true + ) : Debug.checkDefined(visitNode(node.initializer, visitor, isForInitializer)), + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + visitIterationBody(node.statement, asyncBodyVisitor, context) + ); + } + function visitForStatementInAsyncBody(node) { + const initializer = node.initializer; + return factory2.updateForStatement( + node, + isVariableDeclarationListWithCollidingName(initializer) ? visitVariableDeclarationListWithCollidingNames( + initializer, + /*hasReceiver*/ + false + ) : visitNode(node.initializer, visitor, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, visitor, isExpression), + visitIterationBody(node.statement, asyncBodyVisitor, context) + ); + } + function visitAwaitExpression(node) { + if (inTopLevelContext()) { + return visitEachChild(node, visitor, context); + } + return setOriginalNode( + setTextRange( + factory2.createYieldExpression( + /*asteriskToken*/ + void 0, + visitNode(node.expression, visitor, isExpression) + ), + node + ), + node + ); + } + function visitConstructorDeclaration(node) { + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + lexicalArgumentsBinding = void 0; + const updated = factory2.updateConstructorDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifier), + visitParameterList(node.parameters, visitor, context), + transformMethodBody(node) + ); + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + return updated; + } + function visitMethodDeclaration(node) { + let parameters; + const functionFlags = getFunctionFlags(node); + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + lexicalArgumentsBinding = void 0; + const updated = factory2.updateMethodDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifierLike), + node.asteriskToken, + node.name, + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + parameters = functionFlags & 2 /* Async */ ? transformAsyncFunctionParameterList(node) : visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + functionFlags & 2 /* Async */ ? transformAsyncFunctionBody(node, parameters) : transformMethodBody(node) + ); + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + return updated; + } + function visitGetAccessorDeclaration(node) { + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + lexicalArgumentsBinding = void 0; + const updated = factory2.updateGetAccessorDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifierLike), + node.name, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + transformMethodBody(node) + ); + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + return updated; + } + function visitSetAccessorDeclaration(node) { + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + lexicalArgumentsBinding = void 0; + const updated = factory2.updateSetAccessorDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifierLike), + node.name, + visitParameterList(node.parameters, visitor, context), + transformMethodBody(node) + ); + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + return updated; + } + function visitFunctionDeclaration(node) { + let parameters; + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + lexicalArgumentsBinding = void 0; + const functionFlags = getFunctionFlags(node); + const updated = factory2.updateFunctionDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifierLike), + node.asteriskToken, + node.name, + /*typeParameters*/ + void 0, + parameters = functionFlags & 2 /* Async */ ? transformAsyncFunctionParameterList(node) : visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + functionFlags & 2 /* Async */ ? transformAsyncFunctionBody(node, parameters) : visitFunctionBody(node.body, visitor, context) + ); + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + return updated; + } + function visitFunctionExpression(node) { + let parameters; + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + lexicalArgumentsBinding = void 0; + const functionFlags = getFunctionFlags(node); + const updated = factory2.updateFunctionExpression( + node, + visitNodes2(node.modifiers, visitor, isModifier), + node.asteriskToken, + node.name, + /*typeParameters*/ + void 0, + parameters = functionFlags & 2 /* Async */ ? transformAsyncFunctionParameterList(node) : visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + functionFlags & 2 /* Async */ ? transformAsyncFunctionBody(node, parameters) : visitFunctionBody(node.body, visitor, context) + ); + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + return updated; + } + function visitArrowFunction(node) { + let parameters; + const functionFlags = getFunctionFlags(node); + return factory2.updateArrowFunction( + node, + visitNodes2(node.modifiers, visitor, isModifier), + /*typeParameters*/ + void 0, + parameters = functionFlags & 2 /* Async */ ? transformAsyncFunctionParameterList(node) : visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + node.equalsGreaterThanToken, + functionFlags & 2 /* Async */ ? transformAsyncFunctionBody(node, parameters) : visitFunctionBody(node.body, visitor, context) + ); + } + function recordDeclarationName({ name }, names) { + if (isIdentifier(name)) { + names.add(name.escapedText); + } else { + for (const element of name.elements) { + if (!isOmittedExpression(element)) { + recordDeclarationName(element, names); + } + } + } + } + function isVariableDeclarationListWithCollidingName(node) { + return !!node && isVariableDeclarationList(node) && !(node.flags & 7 /* BlockScoped */) && node.declarations.some(collidesWithParameterName); + } + function visitVariableDeclarationListWithCollidingNames(node, hasReceiver) { + hoistVariableDeclarationList(node); + const variables = getInitializedVariables(node); + if (variables.length === 0) { + if (hasReceiver) { + return visitNode(factory2.converters.convertToAssignmentElementTarget(node.declarations[0].name), visitor, isExpression); + } + return void 0; + } + return factory2.inlineExpressions(map(variables, transformInitializedVariable)); + } + function hoistVariableDeclarationList(node) { + forEach(node.declarations, hoistVariable); + } + function hoistVariable({ name }) { + if (isIdentifier(name)) { + hoistVariableDeclaration(name); + } else { + for (const element of name.elements) { + if (!isOmittedExpression(element)) { + hoistVariable(element); + } + } + } + } + function transformInitializedVariable(node) { + const converted = setSourceMapRange( + factory2.createAssignment( + factory2.converters.convertToAssignmentElementTarget(node.name), + node.initializer + ), + node + ); + return Debug.checkDefined(visitNode(converted, visitor, isExpression)); + } + function collidesWithParameterName({ name }) { + if (isIdentifier(name)) { + return enclosingFunctionParameterNames.has(name.escapedText); + } else { + for (const element of name.elements) { + if (!isOmittedExpression(element) && collidesWithParameterName(element)) { + return true; + } + } + } + return false; + } + function transformMethodBody(node) { + Debug.assertIsDefined(node.body); + const savedCapturedSuperProperties = capturedSuperProperties; + const savedHasSuperElementAccess = hasSuperElementAccess; + capturedSuperProperties = /* @__PURE__ */ new Set(); + hasSuperElementAccess = false; + let updated = visitFunctionBody(node.body, visitor, context); + const originalMethod = getOriginalNode(node, isFunctionLikeDeclaration); + const emitSuperHelpers = languageVersion >= 2 /* ES2015 */ && (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */) || resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */)) && (getFunctionFlags(originalMethod) & 3 /* AsyncGenerator */) !== 3 /* AsyncGenerator */; + if (emitSuperHelpers) { + enableSubstitutionForAsyncMethodsWithSuper(); + if (capturedSuperProperties.size) { + const variableStatement = createSuperAccessVariableStatement(factory2, resolver, node, capturedSuperProperties); + substitutedSuperAccessors[getNodeId(variableStatement)] = true; + const statements = updated.statements.slice(); + insertStatementsAfterStandardPrologue(statements, [variableStatement]); + updated = factory2.updateBlock(updated, statements); + } + if (hasSuperElementAccess) { + if (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */)) { + addEmitHelper(updated, advancedAsyncSuperHelper); + } else if (resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */)) { + addEmitHelper(updated, asyncSuperHelper); + } + } + } + capturedSuperProperties = savedCapturedSuperProperties; + hasSuperElementAccess = savedHasSuperElementAccess; + return updated; + } + function createCaptureArgumentsStatement() { + Debug.assert(lexicalArgumentsBinding); + const variable = factory2.createVariableDeclaration( + lexicalArgumentsBinding, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createIdentifier("arguments") + ); + const statement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + [variable] + ); + startOnNewLine(statement); + addEmitFlags(statement, 2097152 /* CustomPrologue */); + return statement; + } + function transformAsyncFunctionParameterList(node) { + if (isSimpleParameterList(node.parameters)) { + return visitParameterList(node.parameters, visitor, context); + } + const newParameters = []; + for (const parameter of node.parameters) { + if (parameter.initializer || parameter.dotDotDotToken) { + if (node.kind === 220 /* ArrowFunction */) { + const restParameter = factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + factory2.createToken(26 /* DotDotDotToken */), + factory2.createUniqueName("args", 8 /* ReservedInNestedScopes */) + ); + newParameters.push(restParameter); + } + break; + } + const newParameter = factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.getGeneratedNameForNode(parameter.name, 8 /* ReservedInNestedScopes */) + ); + newParameters.push(newParameter); + } + const newParametersArray = factory2.createNodeArray(newParameters); + setTextRange(newParametersArray, node.parameters); + return newParametersArray; + } + function transformAsyncFunctionBody(node, outerParameters) { + const innerParameters = !isSimpleParameterList(node.parameters) ? visitParameterList(node.parameters, visitor, context) : void 0; + resumeLexicalEnvironment(); + const original = getOriginalNode(node, isFunctionLike); + const nodeType = original.type; + const promiseConstructor = languageVersion < 2 /* ES2015 */ ? getPromiseConstructor(nodeType) : void 0; + const isArrowFunction2 = node.kind === 220 /* ArrowFunction */; + const savedLexicalArgumentsBinding = lexicalArgumentsBinding; + const hasLexicalArguments = resolver.hasNodeCheckFlag(node, 512 /* CaptureArguments */); + const captureLexicalArguments = hasLexicalArguments && !lexicalArgumentsBinding; + if (captureLexicalArguments) { + lexicalArgumentsBinding = factory2.createUniqueName("arguments"); + } + let argumentsExpression; + if (innerParameters) { + if (isArrowFunction2) { + const parameterBindings = []; + Debug.assert(outerParameters.length <= node.parameters.length); + for (let i = 0; i < node.parameters.length; i++) { + Debug.assert(i < outerParameters.length); + const originalParameter = node.parameters[i]; + const outerParameter = outerParameters[i]; + Debug.assertNode(outerParameter.name, isIdentifier); + if (originalParameter.initializer || originalParameter.dotDotDotToken) { + Debug.assert(i === outerParameters.length - 1); + parameterBindings.push(factory2.createSpreadElement(outerParameter.name)); + break; + } + parameterBindings.push(outerParameter.name); + } + argumentsExpression = factory2.createArrayLiteralExpression(parameterBindings); + } else { + argumentsExpression = factory2.createIdentifier("arguments"); + } + } + const savedEnclosingFunctionParameterNames = enclosingFunctionParameterNames; + enclosingFunctionParameterNames = /* @__PURE__ */ new Set(); + for (const parameter of node.parameters) { + recordDeclarationName(parameter, enclosingFunctionParameterNames); + } + const savedCapturedSuperProperties = capturedSuperProperties; + const savedHasSuperElementAccess = hasSuperElementAccess; + if (!isArrowFunction2) { + capturedSuperProperties = /* @__PURE__ */ new Set(); + hasSuperElementAccess = false; + } + const hasLexicalThis = inHasLexicalThisContext(); + let asyncBody = transformAsyncFunctionBodyWorker(node.body); + asyncBody = factory2.updateBlock(asyncBody, factory2.mergeLexicalEnvironment(asyncBody.statements, endLexicalEnvironment())); + let result; + if (!isArrowFunction2) { + const statements = []; + statements.push( + factory2.createReturnStatement( + emitHelpers().createAwaiterHelper( + hasLexicalThis, + argumentsExpression, + promiseConstructor, + innerParameters, + asyncBody + ) + ) + ); + const emitSuperHelpers = languageVersion >= 2 /* ES2015 */ && (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */) || resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */)); + if (emitSuperHelpers) { + enableSubstitutionForAsyncMethodsWithSuper(); + if (capturedSuperProperties.size) { + const variableStatement = createSuperAccessVariableStatement(factory2, resolver, node, capturedSuperProperties); + substitutedSuperAccessors[getNodeId(variableStatement)] = true; + insertStatementsAfterStandardPrologue(statements, [variableStatement]); + } + } + if (captureLexicalArguments) { + insertStatementsAfterStandardPrologue(statements, [createCaptureArgumentsStatement()]); + } + const block = factory2.createBlock( + statements, + /*multiLine*/ + true + ); + setTextRange(block, node.body); + if (emitSuperHelpers && hasSuperElementAccess) { + if (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */)) { + addEmitHelper(block, advancedAsyncSuperHelper); + } else if (resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */)) { + addEmitHelper(block, asyncSuperHelper); + } + } + result = block; + } else { + result = emitHelpers().createAwaiterHelper( + hasLexicalThis, + argumentsExpression, + promiseConstructor, + innerParameters, + asyncBody + ); + if (captureLexicalArguments) { + const block = factory2.converters.convertToFunctionBlock(result); + result = factory2.updateBlock(block, factory2.mergeLexicalEnvironment(block.statements, [createCaptureArgumentsStatement()])); + } + } + enclosingFunctionParameterNames = savedEnclosingFunctionParameterNames; + if (!isArrowFunction2) { + capturedSuperProperties = savedCapturedSuperProperties; + hasSuperElementAccess = savedHasSuperElementAccess; + lexicalArgumentsBinding = savedLexicalArgumentsBinding; + } + return result; + } + function transformAsyncFunctionBodyWorker(body, start) { + if (isBlock(body)) { + return factory2.updateBlock(body, visitNodes2(body.statements, asyncBodyVisitor, isStatement, start)); + } else { + return factory2.converters.convertToFunctionBlock(Debug.checkDefined(visitNode(body, asyncBodyVisitor, isConciseBody))); + } + } + function getPromiseConstructor(type) { + const typeName = type && getEntityNameFromTypeNode(type); + if (typeName && isEntityName(typeName)) { + const serializationKind = resolver.getTypeReferenceSerializationKind(typeName); + if (serializationKind === 1 /* TypeWithConstructSignatureAndValue */ || serializationKind === 0 /* Unknown */) { + return typeName; + } + } + return void 0; + } + function enableSubstitutionForAsyncMethodsWithSuper() { + if ((enabledSubstitutions & 1 /* AsyncMethodsWithSuper */) === 0) { + enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */; + context.enableSubstitution(214 /* CallExpression */); + context.enableSubstitution(212 /* PropertyAccessExpression */); + context.enableSubstitution(213 /* ElementAccessExpression */); + context.enableEmitNotification(264 /* ClassDeclaration */); + context.enableEmitNotification(175 /* MethodDeclaration */); + context.enableEmitNotification(178 /* GetAccessor */); + context.enableEmitNotification(179 /* SetAccessor */); + context.enableEmitNotification(177 /* Constructor */); + context.enableEmitNotification(244 /* VariableStatement */); + } + } + function onEmitNode(hint, node, emitCallback) { + if (enabledSubstitutions & 1 /* AsyncMethodsWithSuper */ && isSuperContainer(node)) { + const superContainerFlags = (resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */) ? 128 /* MethodWithSuperPropertyAccessInAsync */ : 0) | (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */) ? 256 /* MethodWithSuperPropertyAssignmentInAsync */ : 0); + if (superContainerFlags !== enclosingSuperContainerFlags) { + const savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; + enclosingSuperContainerFlags = superContainerFlags; + previousOnEmitNode(hint, node, emitCallback); + enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags; + return; + } + } else if (enabledSubstitutions && substitutedSuperAccessors[getNodeId(node)]) { + const savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; + enclosingSuperContainerFlags = 0; + previousOnEmitNode(hint, node, emitCallback); + enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags; + return; + } + previousOnEmitNode(hint, node, emitCallback); + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */ && enclosingSuperContainerFlags) { + return substituteExpression(node); + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 212 /* PropertyAccessExpression */: + return substitutePropertyAccessExpression(node); + case 213 /* ElementAccessExpression */: + return substituteElementAccessExpression(node); + case 214 /* CallExpression */: + return substituteCallExpression(node); + } + return node; + } + function substitutePropertyAccessExpression(node) { + if (node.expression.kind === 108 /* SuperKeyword */) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), + node.name + ), + node + ); + } + return node; + } + function substituteElementAccessExpression(node) { + if (node.expression.kind === 108 /* SuperKeyword */) { + return createSuperElementAccessInAsyncMethod( + node.argumentExpression, + node + ); + } + return node; + } + function substituteCallExpression(node) { + const expression = node.expression; + if (isSuperProperty(expression)) { + const argumentExpression = isPropertyAccessExpression(expression) ? substitutePropertyAccessExpression(expression) : substituteElementAccessExpression(expression); + return factory2.createCallExpression( + factory2.createPropertyAccessExpression(argumentExpression, "call"), + /*typeArguments*/ + void 0, + [ + factory2.createThis(), + ...node.arguments + ] + ); + } + return node; + } + function isSuperContainer(node) { + const kind = node.kind; + return kind === 264 /* ClassDeclaration */ || kind === 177 /* Constructor */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */; + } + function createSuperElementAccessInAsyncMethod(argumentExpression, location) { + if (enclosingSuperContainerFlags & 256 /* MethodWithSuperPropertyAssignmentInAsync */) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.createCallExpression( + factory2.createUniqueName("_superIndex", 16 /* Optimistic */ | 32 /* FileLevel */), + /*typeArguments*/ + void 0, + [argumentExpression] + ), + "value" + ), + location + ); + } else { + return setTextRange( + factory2.createCallExpression( + factory2.createUniqueName("_superIndex", 16 /* Optimistic */ | 32 /* FileLevel */), + /*typeArguments*/ + void 0, + [argumentExpression] + ), + location + ); + } + } +} +function createSuperAccessVariableStatement(factory2, resolver, node, names) { + const hasBinding = resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */); + const accessors = []; + names.forEach((_, key) => { + const name = unescapeLeadingUnderscores(key); + const getterAndSetter = []; + getterAndSetter.push(factory2.createPropertyAssignment( + "get", + factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + /* parameters */ + [], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + setEmitFlags( + factory2.createPropertyAccessExpression( + setEmitFlags( + factory2.createSuper(), + 8 /* NoSubstitution */ + ), + name + ), + 8 /* NoSubstitution */ + ) + ) + )); + if (hasBinding) { + getterAndSetter.push( + factory2.createPropertyAssignment( + "set", + factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + /* parameters */ + [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "v", + /*questionToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ) + ], + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + factory2.createAssignment( + setEmitFlags( + factory2.createPropertyAccessExpression( + setEmitFlags( + factory2.createSuper(), + 8 /* NoSubstitution */ + ), + name + ), + 8 /* NoSubstitution */ + ), + factory2.createIdentifier("v") + ) + ) + ) + ); + } + accessors.push( + factory2.createPropertyAssignment( + name, + factory2.createObjectLiteralExpression(getterAndSetter) + ) + ); + }); + return factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + [ + factory2.createVariableDeclaration( + factory2.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createCallExpression( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("Object"), + "create" + ), + /*typeArguments*/ + void 0, + [ + factory2.createNull(), + factory2.createObjectLiteralExpression( + accessors, + /*multiLine*/ + true + ) + ] + ) + ) + ], + 2 /* Const */ + ) + ); +} + +// src/compiler/transformers/es2018.ts +function transformES2018(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + resumeLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const previousOnEmitNode = context.onEmitNode; + context.onEmitNode = onEmitNode; + const previousOnSubstituteNode = context.onSubstituteNode; + context.onSubstituteNode = onSubstituteNode; + let exportedVariableStatement = false; + let enabledSubstitutions = 0 /* None */; + let enclosingFunctionFlags; + let parametersWithPrecedingObjectRestOrSpread; + let enclosingSuperContainerFlags = 0; + let hierarchyFacts = 0; + let currentSourceFile; + let taggedTemplateStringDeclarations; + let capturedSuperProperties; + let hasSuperElementAccess; + const substitutedSuperAccessors = []; + return chainBundle(context, transformSourceFile); + function affectsSubtree(excludeFacts, includeFacts) { + return hierarchyFacts !== (hierarchyFacts & ~excludeFacts | includeFacts); + } + function enterSubtree(excludeFacts, includeFacts) { + const ancestorFacts = hierarchyFacts; + hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 3 /* AncestorFactsMask */; + return ancestorFacts; + } + function exitSubtree(ancestorFacts) { + hierarchyFacts = ancestorFacts; + } + function recordTaggedTemplateString(temp) { + taggedTemplateStringDeclarations = append( + taggedTemplateStringDeclarations, + factory2.createVariableDeclaration(temp) + ); + } + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + currentSourceFile = node; + const visited = visitSourceFile(node); + addEmitHelpers(visited, context.readEmitHelpers()); + currentSourceFile = void 0; + taggedTemplateStringDeclarations = void 0; + return visited; + } + function visitor(node) { + return visitorWorker( + node, + /*expressionResultIsUnused*/ + false + ); + } + function visitorWithUnusedExpressionResult(node) { + return visitorWorker( + node, + /*expressionResultIsUnused*/ + true + ); + } + function visitorNoAsyncModifier(node) { + if (node.kind === 134 /* AsyncKeyword */) { + return void 0; + } + return node; + } + function doWithHierarchyFacts(cb, value, excludeFacts, includeFacts) { + if (affectsSubtree(excludeFacts, includeFacts)) { + const ancestorFacts = enterSubtree(excludeFacts, includeFacts); + const result = cb(value); + exitSubtree(ancestorFacts); + return result; + } + return cb(value); + } + function visitDefault(node) { + return visitEachChild(node, visitor, context); + } + function visitorWorker(node, expressionResultIsUnused2) { + if ((node.transformFlags & 128 /* ContainsES2018 */) === 0) { + return node; + } + switch (node.kind) { + case 224 /* AwaitExpression */: + return visitAwaitExpression(node); + case 230 /* YieldExpression */: + return visitYieldExpression(node); + case 254 /* ReturnStatement */: + return visitReturnStatement(node); + case 257 /* LabeledStatement */: + return visitLabeledStatement(node); + case 211 /* ObjectLiteralExpression */: + return visitObjectLiteralExpression(node); + case 227 /* BinaryExpression */: + return visitBinaryExpression(node, expressionResultIsUnused2); + case 357 /* CommaListExpression */: + return visitCommaListExpression(node, expressionResultIsUnused2); + case 300 /* CatchClause */: + return visitCatchClause(node); + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 261 /* VariableDeclaration */: + return visitVariableDeclaration(node); + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 250 /* ForInStatement */: + return doWithHierarchyFacts( + visitDefault, + node, + 0 /* IterationStatementExcludes */, + 2 /* IterationStatementIncludes */ + ); + case 251 /* ForOfStatement */: + return visitForOfStatement( + node, + /*outermostLabeledStatement*/ + void 0 + ); + case 249 /* ForStatement */: + return doWithHierarchyFacts( + visitForStatement, + node, + 0 /* IterationStatementExcludes */, + 2 /* IterationStatementIncludes */ + ); + case 223 /* VoidExpression */: + return visitVoidExpression(node); + case 177 /* Constructor */: + return doWithHierarchyFacts( + visitConstructorDeclaration, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + case 175 /* MethodDeclaration */: + return doWithHierarchyFacts( + visitMethodDeclaration, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + case 178 /* GetAccessor */: + return doWithHierarchyFacts( + visitGetAccessorDeclaration, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + case 179 /* SetAccessor */: + return doWithHierarchyFacts( + visitSetAccessorDeclaration, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + case 263 /* FunctionDeclaration */: + return doWithHierarchyFacts( + visitFunctionDeclaration, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + case 219 /* FunctionExpression */: + return doWithHierarchyFacts( + visitFunctionExpression, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + case 220 /* ArrowFunction */: + return doWithHierarchyFacts( + visitArrowFunction, + node, + 2 /* ArrowFunctionExcludes */, + 0 /* ArrowFunctionIncludes */ + ); + case 170 /* Parameter */: + return visitParameter(node); + case 245 /* ExpressionStatement */: + return visitExpressionStatement(node); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression(node, expressionResultIsUnused2); + case 216 /* TaggedTemplateExpression */: + return visitTaggedTemplateExpression(node); + case 212 /* PropertyAccessExpression */: + if (capturedSuperProperties && isPropertyAccessExpression(node) && node.expression.kind === 108 /* SuperKeyword */) { + capturedSuperProperties.add(node.name.escapedText); + } + return visitEachChild(node, visitor, context); + case 213 /* ElementAccessExpression */: + if (capturedSuperProperties && node.expression.kind === 108 /* SuperKeyword */) { + hasSuperElementAccess = true; + } + return visitEachChild(node, visitor, context); + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return doWithHierarchyFacts( + visitDefault, + node, + 2 /* ClassOrFunctionExcludes */, + 1 /* ClassOrFunctionIncludes */ + ); + default: + return visitEachChild(node, visitor, context); + } + } + function visitAwaitExpression(node) { + if (enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */) { + return setOriginalNode( + setTextRange( + factory2.createYieldExpression( + /*asteriskToken*/ + void 0, + emitHelpers().createAwaitHelper(visitNode(node.expression, visitor, isExpression)) + ), + /*location*/ + node + ), + node + ); + } + return visitEachChild(node, visitor, context); + } + function visitYieldExpression(node) { + if (enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */) { + if (node.asteriskToken) { + const expression = visitNode(Debug.checkDefined(node.expression), visitor, isExpression); + return setOriginalNode( + setTextRange( + factory2.createYieldExpression( + /*asteriskToken*/ + void 0, + emitHelpers().createAwaitHelper( + factory2.updateYieldExpression( + node, + node.asteriskToken, + setTextRange( + emitHelpers().createAsyncDelegatorHelper( + setTextRange( + emitHelpers().createAsyncValuesHelper(expression), + expression + ) + ), + expression + ) + ) + ) + ), + node + ), + node + ); + } + return setOriginalNode( + setTextRange( + factory2.createYieldExpression( + /*asteriskToken*/ + void 0, + createDownlevelAwait( + node.expression ? visitNode(node.expression, visitor, isExpression) : factory2.createVoidZero() + ) + ), + node + ), + node + ); + } + return visitEachChild(node, visitor, context); + } + function visitReturnStatement(node) { + if (enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */) { + return factory2.updateReturnStatement( + node, + createDownlevelAwait( + node.expression ? visitNode(node.expression, visitor, isExpression) : factory2.createVoidZero() + ) + ); + } + return visitEachChild(node, visitor, context); + } + function visitLabeledStatement(node) { + if (enclosingFunctionFlags & 2 /* Async */) { + const statement = unwrapInnermostStatementOfLabel(node); + if (statement.kind === 251 /* ForOfStatement */ && statement.awaitModifier) { + return visitForOfStatement(statement, node); + } + return factory2.restoreEnclosingLabel(visitNode(statement, visitor, isStatement, factory2.liftToBlock), node); + } + return visitEachChild(node, visitor, context); + } + function chunkObjectLiteralElements(elements) { + let chunkObject; + const objects = []; + for (const e of elements) { + if (e.kind === 306 /* SpreadAssignment */) { + if (chunkObject) { + objects.push(factory2.createObjectLiteralExpression(chunkObject)); + chunkObject = void 0; + } + const target = e.expression; + objects.push(visitNode(target, visitor, isExpression)); + } else { + chunkObject = append( + chunkObject, + e.kind === 304 /* PropertyAssignment */ ? factory2.createPropertyAssignment(e.name, visitNode(e.initializer, visitor, isExpression)) : visitNode(e, visitor, isObjectLiteralElementLike) + ); + } + } + if (chunkObject) { + objects.push(factory2.createObjectLiteralExpression(chunkObject)); + } + return objects; + } + function visitObjectLiteralExpression(node) { + if (node.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + const objects = chunkObjectLiteralElements(node.properties); + if (objects.length && objects[0].kind !== 211 /* ObjectLiteralExpression */) { + objects.unshift(factory2.createObjectLiteralExpression()); + } + let expression = objects[0]; + if (objects.length > 1) { + for (let i = 1; i < objects.length; i++) { + expression = emitHelpers().createAssignHelper([expression, objects[i]]); + } + return expression; + } else { + return emitHelpers().createAssignHelper(objects); + } + } + return visitEachChild(node, visitor, context); + } + function visitExpressionStatement(node) { + return visitEachChild(node, visitorWithUnusedExpressionResult, context); + } + function visitParenthesizedExpression(node, expressionResultIsUnused2) { + return visitEachChild(node, expressionResultIsUnused2 ? visitorWithUnusedExpressionResult : visitor, context); + } + function visitSourceFile(node) { + const ancestorFacts = enterSubtree( + 2 /* SourceFileExcludes */, + isEffectiveStrictModeSourceFile(node, compilerOptions) ? 0 /* StrictModeSourceFileIncludes */ : 1 /* SourceFileIncludes */ + ); + exportedVariableStatement = false; + const visited = visitEachChild(node, visitor, context); + const statement = concatenate( + visited.statements, + taggedTemplateStringDeclarations && [ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList(taggedTemplateStringDeclarations) + ) + ] + ); + const result = factory2.updateSourceFile(visited, setTextRange(factory2.createNodeArray(statement), node.statements)); + exitSubtree(ancestorFacts); + return result; + } + function visitTaggedTemplateExpression(node) { + return processTaggedTemplateExpression( + context, + node, + visitor, + currentSourceFile, + recordTaggedTemplateString, + 0 /* LiftRestriction */ + ); + } + function visitBinaryExpression(node, expressionResultIsUnused2) { + if (isDestructuringAssignment(node) && containsObjectRestOrSpread(node.left)) { + return flattenDestructuringAssignment( + node, + visitor, + context, + 1 /* ObjectRest */, + !expressionResultIsUnused2 + ); + } + if (node.operatorToken.kind === 28 /* CommaToken */) { + return factory2.updateBinaryExpression( + node, + visitNode(node.left, visitorWithUnusedExpressionResult, isExpression), + node.operatorToken, + visitNode(node.right, expressionResultIsUnused2 ? visitorWithUnusedExpressionResult : visitor, isExpression) + ); + } + return visitEachChild(node, visitor, context); + } + function visitCommaListExpression(node, expressionResultIsUnused2) { + if (expressionResultIsUnused2) { + return visitEachChild(node, visitorWithUnusedExpressionResult, context); + } + let result; + for (let i = 0; i < node.elements.length; i++) { + const element = node.elements[i]; + const visited = visitNode(element, i < node.elements.length - 1 ? visitorWithUnusedExpressionResult : visitor, isExpression); + if (result || visited !== element) { + result || (result = node.elements.slice(0, i)); + result.push(visited); + } + } + const elements = result ? setTextRange(factory2.createNodeArray(result), node.elements) : node.elements; + return factory2.updateCommaListExpression(node, elements); + } + function visitCatchClause(node) { + if (node.variableDeclaration && isBindingPattern(node.variableDeclaration.name) && node.variableDeclaration.name.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + const name = factory2.getGeneratedNameForNode(node.variableDeclaration.name); + const updatedDecl = factory2.updateVariableDeclaration( + node.variableDeclaration, + node.variableDeclaration.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + name + ); + const visitedBindings = flattenDestructuringBinding(updatedDecl, visitor, context, 1 /* ObjectRest */); + let block = visitNode(node.block, visitor, isBlock); + if (some(visitedBindings)) { + block = factory2.updateBlock(block, [ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + visitedBindings + ), + ...block.statements + ]); + } + return factory2.updateCatchClause( + node, + factory2.updateVariableDeclaration( + node.variableDeclaration, + name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ), + block + ); + } + return visitEachChild(node, visitor, context); + } + function visitVariableStatement(node) { + if (hasSyntacticModifier(node, 32 /* Export */)) { + const savedExportedVariableStatement = exportedVariableStatement; + exportedVariableStatement = true; + const visited = visitEachChild(node, visitor, context); + exportedVariableStatement = savedExportedVariableStatement; + return visited; + } + return visitEachChild(node, visitor, context); + } + function visitVariableDeclaration(node) { + if (exportedVariableStatement) { + const savedExportedVariableStatement = exportedVariableStatement; + exportedVariableStatement = false; + const visited = visitVariableDeclarationWorker( + node, + /*exportedVariableStatement*/ + true + ); + exportedVariableStatement = savedExportedVariableStatement; + return visited; + } + return visitVariableDeclarationWorker( + node, + /*exportedVariableStatement*/ + false + ); + } + function visitVariableDeclarationWorker(node, exportedVariableStatement2) { + if (isBindingPattern(node.name) && node.name.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + return flattenDestructuringBinding( + node, + visitor, + context, + 1 /* ObjectRest */, + /*rval*/ + void 0, + exportedVariableStatement2 + ); + } + return visitEachChild(node, visitor, context); + } + function visitForStatement(node) { + return factory2.updateForStatement( + node, + visitNode(node.initializer, visitorWithUnusedExpressionResult, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, visitorWithUnusedExpressionResult, isExpression), + visitIterationBody(node.statement, visitor, context) + ); + } + function visitVoidExpression(node) { + return visitEachChild(node, visitorWithUnusedExpressionResult, context); + } + function visitForOfStatement(node, outermostLabeledStatement) { + const ancestorFacts = enterSubtree(0 /* IterationStatementExcludes */, 2 /* IterationStatementIncludes */); + if (node.initializer.transformFlags & 65536 /* ContainsObjectRestOrSpread */ || isAssignmentPattern(node.initializer) && containsObjectRestOrSpread(node.initializer)) { + node = transformForOfStatementWithObjectRest(node); + } + const result = node.awaitModifier ? transformForAwaitOfStatement(node, outermostLabeledStatement, ancestorFacts) : factory2.restoreEnclosingLabel(visitEachChild(node, visitor, context), outermostLabeledStatement); + exitSubtree(ancestorFacts); + return result; + } + function transformForOfStatementWithObjectRest(node) { + const initializerWithoutParens = skipParentheses(node.initializer); + if (isVariableDeclarationList(initializerWithoutParens) || isAssignmentPattern(initializerWithoutParens)) { + let bodyLocation; + let statementsLocation; + const temp = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const statements = [createForOfBindingStatement(factory2, initializerWithoutParens, temp)]; + if (isBlock(node.statement)) { + addRange(statements, node.statement.statements); + bodyLocation = node.statement; + statementsLocation = node.statement.statements; + } else if (node.statement) { + append(statements, node.statement); + bodyLocation = node.statement; + statementsLocation = node.statement; + } + return factory2.updateForOfStatement( + node, + node.awaitModifier, + setTextRange( + factory2.createVariableDeclarationList( + [ + setTextRange(factory2.createVariableDeclaration(temp), node.initializer) + ], + 1 /* Let */ + ), + node.initializer + ), + node.expression, + setTextRange( + factory2.createBlock( + setTextRange(factory2.createNodeArray(statements), statementsLocation), + /*multiLine*/ + true + ), + bodyLocation + ) + ); + } + return node; + } + function convertForOfStatementHead(node, boundValue, nonUserCode) { + const value = factory2.createTempVariable(hoistVariableDeclaration); + const iteratorValueExpression = factory2.createAssignment(value, boundValue); + const iteratorValueStatement = factory2.createExpressionStatement(iteratorValueExpression); + setSourceMapRange(iteratorValueStatement, node.expression); + const exitNonUserCodeExpression = factory2.createAssignment(nonUserCode, factory2.createFalse()); + const exitNonUserCodeStatement = factory2.createExpressionStatement(exitNonUserCodeExpression); + setSourceMapRange(exitNonUserCodeStatement, node.expression); + const statements = [iteratorValueStatement, exitNonUserCodeStatement]; + const binding = createForOfBindingStatement(factory2, node.initializer, value); + statements.push(visitNode(binding, visitor, isStatement)); + let bodyLocation; + let statementsLocation; + const statement = visitIterationBody(node.statement, visitor, context); + if (isBlock(statement)) { + addRange(statements, statement.statements); + bodyLocation = statement; + statementsLocation = statement.statements; + } else { + statements.push(statement); + } + return setTextRange( + factory2.createBlock( + setTextRange(factory2.createNodeArray(statements), statementsLocation), + /*multiLine*/ + true + ), + bodyLocation + ); + } + function createDownlevelAwait(expression) { + return enclosingFunctionFlags & 1 /* Generator */ ? factory2.createYieldExpression( + /*asteriskToken*/ + void 0, + emitHelpers().createAwaitHelper(expression) + ) : factory2.createAwaitExpression(expression); + } + function transformForAwaitOfStatement(node, outermostLabeledStatement, ancestorFacts) { + const expression = visitNode(node.expression, visitor, isExpression); + const iterator = isIdentifier(expression) ? factory2.getGeneratedNameForNode(expression) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const result = isIdentifier(expression) ? factory2.getGeneratedNameForNode(iterator) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const nonUserCode = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const done = factory2.createTempVariable(hoistVariableDeclaration); + const errorRecord = factory2.createUniqueName("e"); + const catchVariable = factory2.getGeneratedNameForNode(errorRecord); + const returnMethod = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const callValues = setTextRange(emitHelpers().createAsyncValuesHelper(expression), node.expression); + const callNext = factory2.createCallExpression( + factory2.createPropertyAccessExpression(iterator, "next"), + /*typeArguments*/ + void 0, + [] + ); + const getDone = factory2.createPropertyAccessExpression(result, "done"); + const getValue = factory2.createPropertyAccessExpression(result, "value"); + const callReturn = factory2.createFunctionCallCall(returnMethod, iterator, []); + hoistVariableDeclaration(errorRecord); + hoistVariableDeclaration(returnMethod); + const initializer = ancestorFacts & 2 /* IterationContainer */ ? factory2.inlineExpressions([factory2.createAssignment(errorRecord, factory2.createVoidZero()), callValues]) : callValues; + const forStatement = setEmitFlags( + setTextRange( + factory2.createForStatement( + /*initializer*/ + setEmitFlags( + setTextRange( + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + nonUserCode, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createTrue() + ), + setTextRange(factory2.createVariableDeclaration( + iterator, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ), node.expression), + factory2.createVariableDeclaration(result) + ]), + node.expression + ), + 4194304 /* NoHoisting */ + ), + /*condition*/ + factory2.inlineExpressions([ + factory2.createAssignment(result, createDownlevelAwait(callNext)), + factory2.createAssignment(done, getDone), + factory2.createLogicalNot(done) + ]), + /*incrementor*/ + factory2.createAssignment(nonUserCode, factory2.createTrue()), + /*statement*/ + convertForOfStatementHead(node, getValue, nonUserCode) + ), + /*location*/ + node + ), + 512 /* NoTokenTrailingSourceMaps */ + ); + setOriginalNode(forStatement, node); + return factory2.createTryStatement( + factory2.createBlock([ + factory2.restoreEnclosingLabel( + forStatement, + outermostLabeledStatement + ) + ]), + factory2.createCatchClause( + factory2.createVariableDeclaration(catchVariable), + setEmitFlags( + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createAssignment( + errorRecord, + factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("error", catchVariable) + ]) + ) + ) + ]), + 1 /* SingleLine */ + ) + ), + factory2.createBlock([ + factory2.createTryStatement( + /*tryBlock*/ + factory2.createBlock([ + setEmitFlags( + factory2.createIfStatement( + factory2.createLogicalAnd( + factory2.createLogicalAnd( + factory2.createLogicalNot(nonUserCode), + factory2.createLogicalNot(done) + ), + factory2.createAssignment( + returnMethod, + factory2.createPropertyAccessExpression(iterator, "return") + ) + ), + factory2.createExpressionStatement(createDownlevelAwait(callReturn)) + ), + 1 /* SingleLine */ + ) + ]), + /*catchClause*/ + void 0, + /*finallyBlock*/ + setEmitFlags( + factory2.createBlock([ + setEmitFlags( + factory2.createIfStatement( + errorRecord, + factory2.createThrowStatement( + factory2.createPropertyAccessExpression(errorRecord, "error") + ) + ), + 1 /* SingleLine */ + ) + ]), + 1 /* SingleLine */ + ) + ) + ]) + ); + } + function parameterVisitor(node) { + Debug.assertNode(node, isParameter); + return visitParameter(node); + } + function visitParameter(node) { + if (parametersWithPrecedingObjectRestOrSpread == null ? void 0 : parametersWithPrecedingObjectRestOrSpread.has(node)) { + return factory2.updateParameterDeclaration( + node, + /*modifiers*/ + void 0, + node.dotDotDotToken, + isBindingPattern(node.name) ? factory2.getGeneratedNameForNode(node) : node.name, + /*questionToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + } + if (node.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + return factory2.updateParameterDeclaration( + node, + /*modifiers*/ + void 0, + node.dotDotDotToken, + factory2.getGeneratedNameForNode(node), + /*questionToken*/ + void 0, + /*type*/ + void 0, + visitNode(node.initializer, visitor, isExpression) + ); + } + return visitEachChild(node, visitor, context); + } + function collectParametersWithPrecedingObjectRestOrSpread(node) { + let parameters; + for (const parameter of node.parameters) { + if (parameters) { + parameters.add(parameter); + } else if (parameter.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + parameters = /* @__PURE__ */ new Set(); + } + } + return parameters; + } + function visitConstructorDeclaration(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateConstructorDeclaration( + node, + node.modifiers, + visitParameterList(node.parameters, parameterVisitor, context), + transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function visitGetAccessorDeclaration(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateGetAccessorDeclaration( + node, + node.modifiers, + visitNode(node.name, visitor, isPropertyName), + visitParameterList(node.parameters, parameterVisitor, context), + /*type*/ + void 0, + transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function visitSetAccessorDeclaration(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateSetAccessorDeclaration( + node, + node.modifiers, + visitNode(node.name, visitor, isPropertyName), + visitParameterList(node.parameters, parameterVisitor, context), + transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function visitMethodDeclaration(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateMethodDeclaration( + node, + enclosingFunctionFlags & 1 /* Generator */ ? visitNodes2(node.modifiers, visitorNoAsyncModifier, isModifierLike) : node.modifiers, + enclosingFunctionFlags & 2 /* Async */ ? void 0 : node.asteriskToken, + visitNode(node.name, visitor, isPropertyName), + visitNode( + /*node*/ + void 0, + visitor, + isQuestionToken + ), + /*typeParameters*/ + void 0, + enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ ? transformAsyncGeneratorFunctionParameterList(node) : visitParameterList(node.parameters, parameterVisitor, context), + /*type*/ + void 0, + enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function visitFunctionDeclaration(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateFunctionDeclaration( + node, + enclosingFunctionFlags & 1 /* Generator */ ? visitNodes2(node.modifiers, visitorNoAsyncModifier, isModifier) : node.modifiers, + enclosingFunctionFlags & 2 /* Async */ ? void 0 : node.asteriskToken, + node.name, + /*typeParameters*/ + void 0, + enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ ? transformAsyncGeneratorFunctionParameterList(node) : visitParameterList(node.parameters, parameterVisitor, context), + /*type*/ + void 0, + enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function visitArrowFunction(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateArrowFunction( + node, + node.modifiers, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, parameterVisitor, context), + /*type*/ + void 0, + node.equalsGreaterThanToken, + transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function visitFunctionExpression(node) { + const savedEnclosingFunctionFlags = enclosingFunctionFlags; + const savedParametersWithPrecedingObjectRestOrSpread = parametersWithPrecedingObjectRestOrSpread; + enclosingFunctionFlags = getFunctionFlags(node); + parametersWithPrecedingObjectRestOrSpread = collectParametersWithPrecedingObjectRestOrSpread(node); + const updated = factory2.updateFunctionExpression( + node, + enclosingFunctionFlags & 1 /* Generator */ ? visitNodes2(node.modifiers, visitorNoAsyncModifier, isModifier) : node.modifiers, + enclosingFunctionFlags & 2 /* Async */ ? void 0 : node.asteriskToken, + node.name, + /*typeParameters*/ + void 0, + enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ ? transformAsyncGeneratorFunctionParameterList(node) : visitParameterList(node.parameters, parameterVisitor, context), + /*type*/ + void 0, + enclosingFunctionFlags & 2 /* Async */ && enclosingFunctionFlags & 1 /* Generator */ ? transformAsyncGeneratorFunctionBody(node) : transformFunctionBody2(node) + ); + enclosingFunctionFlags = savedEnclosingFunctionFlags; + parametersWithPrecedingObjectRestOrSpread = savedParametersWithPrecedingObjectRestOrSpread; + return updated; + } + function transformAsyncGeneratorFunctionParameterList(node) { + if (isSimpleParameterList(node.parameters)) { + return visitParameterList(node.parameters, visitor, context); + } + const newParameters = []; + for (const parameter of node.parameters) { + if (parameter.initializer || parameter.dotDotDotToken) { + break; + } + const newParameter = factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.getGeneratedNameForNode(parameter.name, 8 /* ReservedInNestedScopes */) + ); + newParameters.push(newParameter); + } + const newParametersArray = factory2.createNodeArray(newParameters); + setTextRange(newParametersArray, node.parameters); + return newParametersArray; + } + function transformAsyncGeneratorFunctionBody(node) { + const innerParameters = !isSimpleParameterList(node.parameters) ? visitParameterList(node.parameters, visitor, context) : void 0; + resumeLexicalEnvironment(); + const savedCapturedSuperProperties = capturedSuperProperties; + const savedHasSuperElementAccess = hasSuperElementAccess; + capturedSuperProperties = /* @__PURE__ */ new Set(); + hasSuperElementAccess = false; + const outerStatements = []; + let asyncBody = factory2.updateBlock(node.body, visitNodes2(node.body.statements, visitor, isStatement)); + asyncBody = factory2.updateBlock(asyncBody, factory2.mergeLexicalEnvironment(asyncBody.statements, appendObjectRestAssignmentsIfNeeded(endLexicalEnvironment(), node))); + const returnStatement = factory2.createReturnStatement( + emitHelpers().createAsyncGeneratorHelper( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + factory2.createToken(42 /* AsteriskToken */), + node.name && factory2.getGeneratedNameForNode(node.name), + /*typeParameters*/ + void 0, + innerParameters ?? [], + /*type*/ + void 0, + asyncBody + ), + !!(hierarchyFacts & 1 /* HasLexicalThis */) + ) + ); + const emitSuperHelpers = languageVersion >= 2 /* ES2015 */ && (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */) || resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */)); + if (emitSuperHelpers) { + enableSubstitutionForAsyncMethodsWithSuper(); + const variableStatement = createSuperAccessVariableStatement(factory2, resolver, node, capturedSuperProperties); + substitutedSuperAccessors[getNodeId(variableStatement)] = true; + insertStatementsAfterStandardPrologue(outerStatements, [variableStatement]); + } + outerStatements.push(returnStatement); + const block = factory2.updateBlock(node.body, outerStatements); + if (emitSuperHelpers && hasSuperElementAccess) { + if (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */)) { + addEmitHelper(block, advancedAsyncSuperHelper); + } else if (resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */)) { + addEmitHelper(block, asyncSuperHelper); + } + } + capturedSuperProperties = savedCapturedSuperProperties; + hasSuperElementAccess = savedHasSuperElementAccess; + return block; + } + function transformFunctionBody2(node) { + resumeLexicalEnvironment(); + let statementOffset = 0; + const statements = []; + const body = visitNode(node.body, visitor, isConciseBody) ?? factory2.createBlock([]); + if (isBlock(body)) { + statementOffset = factory2.copyPrologue( + body.statements, + statements, + /*ensureUseStrict*/ + false, + visitor + ); + } + addRange(statements, appendObjectRestAssignmentsIfNeeded( + /*statements*/ + void 0, + node + )); + const leadingStatements = endLexicalEnvironment(); + if (statementOffset > 0 || some(statements) || some(leadingStatements)) { + const block = factory2.converters.convertToFunctionBlock( + body, + /*multiLine*/ + true + ); + insertStatementsAfterStandardPrologue(statements, leadingStatements); + addRange(statements, block.statements.slice(statementOffset)); + return factory2.updateBlock(block, setTextRange(factory2.createNodeArray(statements), block.statements)); + } + return body; + } + function appendObjectRestAssignmentsIfNeeded(statements, node) { + let containsPrecedingObjectRestOrSpread = false; + for (const parameter of node.parameters) { + if (containsPrecedingObjectRestOrSpread) { + if (isBindingPattern(parameter.name)) { + if (parameter.name.elements.length > 0) { + const declarations = flattenDestructuringBinding( + parameter, + visitor, + context, + 0 /* All */, + factory2.getGeneratedNameForNode(parameter) + ); + if (some(declarations)) { + const declarationList = factory2.createVariableDeclarationList(declarations); + const statement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + declarationList + ); + setEmitFlags(statement, 2097152 /* CustomPrologue */); + statements = append(statements, statement); + } + } else if (parameter.initializer) { + const name = factory2.getGeneratedNameForNode(parameter); + const initializer = visitNode(parameter.initializer, visitor, isExpression); + const assignment = factory2.createAssignment(name, initializer); + const statement = factory2.createExpressionStatement(assignment); + setEmitFlags(statement, 2097152 /* CustomPrologue */); + statements = append(statements, statement); + } + } else if (parameter.initializer) { + const name = factory2.cloneNode(parameter.name); + setTextRange(name, parameter.name); + setEmitFlags(name, 96 /* NoSourceMap */); + const initializer = visitNode(parameter.initializer, visitor, isExpression); + addEmitFlags(initializer, 96 /* NoSourceMap */ | 3072 /* NoComments */); + const assignment = factory2.createAssignment(name, initializer); + setTextRange(assignment, parameter); + setEmitFlags(assignment, 3072 /* NoComments */); + const block = factory2.createBlock([factory2.createExpressionStatement(assignment)]); + setTextRange(block, parameter); + setEmitFlags(block, 1 /* SingleLine */ | 64 /* NoTrailingSourceMap */ | 768 /* NoTokenSourceMaps */ | 3072 /* NoComments */); + const typeCheck = factory2.createTypeCheck(factory2.cloneNode(parameter.name), "undefined"); + const statement = factory2.createIfStatement(typeCheck, block); + startOnNewLine(statement); + setTextRange(statement, parameter); + setEmitFlags(statement, 768 /* NoTokenSourceMaps */ | 64 /* NoTrailingSourceMap */ | 2097152 /* CustomPrologue */ | 3072 /* NoComments */); + statements = append(statements, statement); + } + } else if (parameter.transformFlags & 65536 /* ContainsObjectRestOrSpread */) { + containsPrecedingObjectRestOrSpread = true; + const declarations = flattenDestructuringBinding( + parameter, + visitor, + context, + 1 /* ObjectRest */, + factory2.getGeneratedNameForNode(parameter), + /*hoistTempVariables*/ + false, + /*skipInitializer*/ + true + ); + if (some(declarations)) { + const declarationList = factory2.createVariableDeclarationList(declarations); + const statement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + declarationList + ); + setEmitFlags(statement, 2097152 /* CustomPrologue */); + statements = append(statements, statement); + } + } + } + return statements; + } + function enableSubstitutionForAsyncMethodsWithSuper() { + if ((enabledSubstitutions & 1 /* AsyncMethodsWithSuper */) === 0) { + enabledSubstitutions |= 1 /* AsyncMethodsWithSuper */; + context.enableSubstitution(214 /* CallExpression */); + context.enableSubstitution(212 /* PropertyAccessExpression */); + context.enableSubstitution(213 /* ElementAccessExpression */); + context.enableEmitNotification(264 /* ClassDeclaration */); + context.enableEmitNotification(175 /* MethodDeclaration */); + context.enableEmitNotification(178 /* GetAccessor */); + context.enableEmitNotification(179 /* SetAccessor */); + context.enableEmitNotification(177 /* Constructor */); + context.enableEmitNotification(244 /* VariableStatement */); + } + } + function onEmitNode(hint, node, emitCallback) { + if (enabledSubstitutions & 1 /* AsyncMethodsWithSuper */ && isSuperContainer(node)) { + const superContainerFlags = (resolver.hasNodeCheckFlag(node, 128 /* MethodWithSuperPropertyAccessInAsync */) ? 128 /* MethodWithSuperPropertyAccessInAsync */ : 0) | (resolver.hasNodeCheckFlag(node, 256 /* MethodWithSuperPropertyAssignmentInAsync */) ? 256 /* MethodWithSuperPropertyAssignmentInAsync */ : 0); + if (superContainerFlags !== enclosingSuperContainerFlags) { + const savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; + enclosingSuperContainerFlags = superContainerFlags; + previousOnEmitNode(hint, node, emitCallback); + enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags; + return; + } + } else if (enabledSubstitutions && substitutedSuperAccessors[getNodeId(node)]) { + const savedEnclosingSuperContainerFlags = enclosingSuperContainerFlags; + enclosingSuperContainerFlags = 0; + previousOnEmitNode(hint, node, emitCallback); + enclosingSuperContainerFlags = savedEnclosingSuperContainerFlags; + return; + } + previousOnEmitNode(hint, node, emitCallback); + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */ && enclosingSuperContainerFlags) { + return substituteExpression(node); + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 212 /* PropertyAccessExpression */: + return substitutePropertyAccessExpression(node); + case 213 /* ElementAccessExpression */: + return substituteElementAccessExpression(node); + case 214 /* CallExpression */: + return substituteCallExpression(node); + } + return node; + } + function substitutePropertyAccessExpression(node) { + if (node.expression.kind === 108 /* SuperKeyword */) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */), + node.name + ), + node + ); + } + return node; + } + function substituteElementAccessExpression(node) { + if (node.expression.kind === 108 /* SuperKeyword */) { + return createSuperElementAccessInAsyncMethod( + node.argumentExpression, + node + ); + } + return node; + } + function substituteCallExpression(node) { + const expression = node.expression; + if (isSuperProperty(expression)) { + const argumentExpression = isPropertyAccessExpression(expression) ? substitutePropertyAccessExpression(expression) : substituteElementAccessExpression(expression); + return factory2.createCallExpression( + factory2.createPropertyAccessExpression(argumentExpression, "call"), + /*typeArguments*/ + void 0, + [ + factory2.createThis(), + ...node.arguments + ] + ); + } + return node; + } + function isSuperContainer(node) { + const kind = node.kind; + return kind === 264 /* ClassDeclaration */ || kind === 177 /* Constructor */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */; + } + function createSuperElementAccessInAsyncMethod(argumentExpression, location) { + if (enclosingSuperContainerFlags & 256 /* MethodWithSuperPropertyAssignmentInAsync */) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.createCallExpression( + factory2.createIdentifier("_superIndex"), + /*typeArguments*/ + void 0, + [argumentExpression] + ), + "value" + ), + location + ); + } else { + return setTextRange( + factory2.createCallExpression( + factory2.createIdentifier("_superIndex"), + /*typeArguments*/ + void 0, + [argumentExpression] + ), + location + ); + } + } +} + +// src/compiler/transformers/es2019.ts +function transformES2019(context) { + const factory2 = context.factory; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + return visitEachChild(node, visitor, context); + } + function visitor(node) { + if ((node.transformFlags & 64 /* ContainsES2019 */) === 0) { + return node; + } + switch (node.kind) { + case 300 /* CatchClause */: + return visitCatchClause(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitCatchClause(node) { + if (!node.variableDeclaration) { + return factory2.updateCatchClause( + node, + factory2.createVariableDeclaration(factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + )), + visitNode(node.block, visitor, isBlock) + ); + } + return visitEachChild(node, visitor, context); + } +} + +// src/compiler/transformers/es2020.ts +function transformES2020(context) { + const { + factory: factory2, + hoistVariableDeclaration + } = context; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + return visitEachChild(node, visitor, context); + } + function visitor(node) { + if ((node.transformFlags & 32 /* ContainsES2020 */) === 0) { + return node; + } + switch (node.kind) { + case 214 /* CallExpression */: { + const updated = visitNonOptionalCallExpression( + node, + /*captureThisArg*/ + false + ); + Debug.assertNotNode(updated, isSyntheticReference); + return updated; + } + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + if (isOptionalChain(node)) { + const updated = visitOptionalExpression( + node, + /*captureThisArg*/ + false, + /*isDelete*/ + false + ); + Debug.assertNotNode(updated, isSyntheticReference); + return updated; + } + return visitEachChild(node, visitor, context); + case 227 /* BinaryExpression */: + if (node.operatorToken.kind === 61 /* QuestionQuestionToken */) { + return transformNullishCoalescingExpression(node); + } + return visitEachChild(node, visitor, context); + case 221 /* DeleteExpression */: + return visitDeleteExpression(node); + default: + return visitEachChild(node, visitor, context); + } + } + function flattenChain(chain) { + Debug.assertNotNode(chain, isNonNullChain); + const links = [chain]; + while (!chain.questionDotToken && !isTaggedTemplateExpression(chain)) { + chain = cast(skipPartiallyEmittedExpressions(chain.expression), isOptionalChain); + Debug.assertNotNode(chain, isNonNullChain); + links.unshift(chain); + } + return { expression: chain.expression, chain: links }; + } + function visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete) { + const expression = visitNonOptionalExpression(node.expression, captureThisArg, isDelete); + if (isSyntheticReference(expression)) { + return factory2.createSyntheticReferenceExpression(factory2.updateParenthesizedExpression(node, expression.expression), expression.thisArg); + } + return factory2.updateParenthesizedExpression(node, expression); + } + function visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete) { + if (isOptionalChain(node)) { + return visitOptionalExpression(node, captureThisArg, isDelete); + } + let expression = visitNode(node.expression, visitor, isExpression); + Debug.assertNotNode(expression, isSyntheticReference); + let thisArg; + if (captureThisArg) { + if (!isSimpleCopiableExpression(expression)) { + thisArg = factory2.createTempVariable(hoistVariableDeclaration); + expression = factory2.createAssignment(thisArg, expression); + } else { + thisArg = expression; + } + } + expression = node.kind === 212 /* PropertyAccessExpression */ ? factory2.updatePropertyAccessExpression(node, expression, visitNode(node.name, visitor, isIdentifier)) : factory2.updateElementAccessExpression(node, expression, visitNode(node.argumentExpression, visitor, isExpression)); + return thisArg ? factory2.createSyntheticReferenceExpression(expression, thisArg) : expression; + } + function visitNonOptionalCallExpression(node, captureThisArg) { + if (isOptionalChain(node)) { + return visitOptionalExpression( + node, + captureThisArg, + /*isDelete*/ + false + ); + } + if (isParenthesizedExpression(node.expression) && isOptionalChain(skipParentheses(node.expression))) { + const expression = visitNonOptionalParenthesizedExpression( + node.expression, + /*captureThisArg*/ + true, + /*isDelete*/ + false + ); + const args = visitNodes2(node.arguments, visitor, isExpression); + if (isSyntheticReference(expression)) { + return setTextRange(factory2.createFunctionCallCall(expression.expression, expression.thisArg, args), node); + } + return factory2.updateCallExpression( + node, + expression, + /*typeArguments*/ + void 0, + args + ); + } + return visitEachChild(node, visitor, context); + } + function visitNonOptionalExpression(node, captureThisArg, isDelete) { + switch (node.kind) { + case 218 /* ParenthesizedExpression */: + return visitNonOptionalParenthesizedExpression(node, captureThisArg, isDelete); + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return visitNonOptionalPropertyOrElementAccessExpression(node, captureThisArg, isDelete); + case 214 /* CallExpression */: + return visitNonOptionalCallExpression(node, captureThisArg); + default: + return visitNode(node, visitor, isExpression); + } + } + function visitOptionalExpression(node, captureThisArg, isDelete) { + const { expression, chain } = flattenChain(node); + const left = visitNonOptionalExpression( + skipPartiallyEmittedExpressions(expression), + isCallChain(chain[0]), + /*isDelete*/ + false + ); + let leftThisArg = isSyntheticReference(left) ? left.thisArg : void 0; + let capturedLeft = isSyntheticReference(left) ? left.expression : left; + let leftExpression = factory2.restoreOuterExpressions(expression, capturedLeft, 8 /* PartiallyEmittedExpressions */); + if (!isSimpleCopiableExpression(capturedLeft)) { + capturedLeft = factory2.createTempVariable(hoistVariableDeclaration); + leftExpression = factory2.createAssignment(capturedLeft, leftExpression); + } + let rightExpression = capturedLeft; + let thisArg; + for (let i = 0; i < chain.length; i++) { + const segment = chain[i]; + switch (segment.kind) { + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + if (i === chain.length - 1 && captureThisArg) { + if (!isSimpleCopiableExpression(rightExpression)) { + thisArg = factory2.createTempVariable(hoistVariableDeclaration); + rightExpression = factory2.createAssignment(thisArg, rightExpression); + } else { + thisArg = rightExpression; + } + } + rightExpression = segment.kind === 212 /* PropertyAccessExpression */ ? factory2.createPropertyAccessExpression(rightExpression, visitNode(segment.name, visitor, isIdentifier)) : factory2.createElementAccessExpression(rightExpression, visitNode(segment.argumentExpression, visitor, isExpression)); + break; + case 214 /* CallExpression */: + if (i === 0 && leftThisArg) { + if (!isGeneratedIdentifier(leftThisArg)) { + leftThisArg = factory2.cloneNode(leftThisArg); + addEmitFlags(leftThisArg, 3072 /* NoComments */); + } + rightExpression = factory2.createFunctionCallCall( + rightExpression, + leftThisArg.kind === 108 /* SuperKeyword */ ? factory2.createThis() : leftThisArg, + visitNodes2(segment.arguments, visitor, isExpression) + ); + } else { + rightExpression = factory2.createCallExpression( + rightExpression, + /*typeArguments*/ + void 0, + visitNodes2(segment.arguments, visitor, isExpression) + ); + } + break; + } + setOriginalNode(rightExpression, segment); + } + const target = isDelete ? factory2.createConditionalExpression( + createNotNullCondition( + leftExpression, + capturedLeft, + /*invert*/ + true + ), + /*questionToken*/ + void 0, + factory2.createTrue(), + /*colonToken*/ + void 0, + factory2.createDeleteExpression(rightExpression) + ) : factory2.createConditionalExpression( + createNotNullCondition( + leftExpression, + capturedLeft, + /*invert*/ + true + ), + /*questionToken*/ + void 0, + factory2.createVoidZero(), + /*colonToken*/ + void 0, + rightExpression + ); + setTextRange(target, node); + return thisArg ? factory2.createSyntheticReferenceExpression(target, thisArg) : target; + } + function createNotNullCondition(left, right, invert) { + return factory2.createBinaryExpression( + factory2.createBinaryExpression( + left, + factory2.createToken(invert ? 37 /* EqualsEqualsEqualsToken */ : 38 /* ExclamationEqualsEqualsToken */), + factory2.createNull() + ), + factory2.createToken(invert ? 57 /* BarBarToken */ : 56 /* AmpersandAmpersandToken */), + factory2.createBinaryExpression( + right, + factory2.createToken(invert ? 37 /* EqualsEqualsEqualsToken */ : 38 /* ExclamationEqualsEqualsToken */), + factory2.createVoidZero() + ) + ); + } + function transformNullishCoalescingExpression(node) { + let left = visitNode(node.left, visitor, isExpression); + let right = left; + if (!isSimpleCopiableExpression(left)) { + right = factory2.createTempVariable(hoistVariableDeclaration); + left = factory2.createAssignment(right, left); + } + return setTextRange( + factory2.createConditionalExpression( + createNotNullCondition(left, right), + /*questionToken*/ + void 0, + right, + /*colonToken*/ + void 0, + visitNode(node.right, visitor, isExpression) + ), + node + ); + } + function visitDeleteExpression(node) { + return isOptionalChain(skipParentheses(node.expression)) ? setOriginalNode(visitNonOptionalExpression( + node.expression, + /*captureThisArg*/ + false, + /*isDelete*/ + true + ), node) : factory2.updateDeleteExpression(node, visitNode(node.expression, visitor, isExpression)); + } +} + +// src/compiler/transformers/es2021.ts +function transformES2021(context) { + const { + hoistVariableDeclaration, + factory: factory2 + } = context; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + return visitEachChild(node, visitor, context); + } + function visitor(node) { + if ((node.transformFlags & 16 /* ContainsES2021 */) === 0) { + return node; + } + if (isLogicalOrCoalescingAssignmentExpression(node)) { + return transformLogicalAssignment(node); + } + return visitEachChild(node, visitor, context); + } + function transformLogicalAssignment(binaryExpression) { + const operator = binaryExpression.operatorToken; + const nonAssignmentOperator = getNonAssignmentOperatorForCompoundAssignment(operator.kind); + let left = skipParentheses(visitNode(binaryExpression.left, visitor, isLeftHandSideExpression)); + let assignmentTarget = left; + const right = skipParentheses(visitNode(binaryExpression.right, visitor, isExpression)); + if (isAccessExpression(left)) { + const propertyAccessTargetSimpleCopiable = isSimpleCopiableExpression(left.expression); + const propertyAccessTarget = propertyAccessTargetSimpleCopiable ? left.expression : factory2.createTempVariable(hoistVariableDeclaration); + const propertyAccessTargetAssignment = propertyAccessTargetSimpleCopiable ? left.expression : factory2.createAssignment( + propertyAccessTarget, + left.expression + ); + if (isPropertyAccessExpression(left)) { + assignmentTarget = factory2.createPropertyAccessExpression( + propertyAccessTarget, + left.name + ); + left = factory2.createPropertyAccessExpression( + propertyAccessTargetAssignment, + left.name + ); + } else { + const elementAccessArgumentSimpleCopiable = isSimpleCopiableExpression(left.argumentExpression); + const elementAccessArgument = elementAccessArgumentSimpleCopiable ? left.argumentExpression : factory2.createTempVariable(hoistVariableDeclaration); + assignmentTarget = factory2.createElementAccessExpression( + propertyAccessTarget, + elementAccessArgument + ); + left = factory2.createElementAccessExpression( + propertyAccessTargetAssignment, + elementAccessArgumentSimpleCopiable ? left.argumentExpression : factory2.createAssignment( + elementAccessArgument, + left.argumentExpression + ) + ); + } + } + return factory2.createBinaryExpression( + left, + nonAssignmentOperator, + factory2.createParenthesizedExpression( + factory2.createAssignment( + assignmentTarget, + right + ) + ) + ); + } +} + +// src/compiler/transformers/esnext.ts +function transformESNext(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + hoistVariableDeclaration, + startLexicalEnvironment, + endLexicalEnvironment + } = context; + let exportBindings; + let exportVars; + let defaultExportBinding; + let exportEqualsBinding; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + const visited = visitNode(node, visitor, isSourceFile); + addEmitHelpers(visited, context.readEmitHelpers()); + exportVars = void 0; + exportBindings = void 0; + defaultExportBinding = void 0; + return visited; + } + function visitor(node) { + if ((node.transformFlags & 4 /* ContainsESNext */) === 0) { + return node; + } + switch (node.kind) { + case 308 /* SourceFile */: + return visitSourceFile(node); + case 242 /* Block */: + return visitBlock(node); + case 249 /* ForStatement */: + return visitForStatement(node); + case 251 /* ForOfStatement */: + return visitForOfStatement(node); + case 256 /* SwitchStatement */: + return visitSwitchStatement(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitSourceFile(node) { + const usingKind = getUsingKindOfStatements(node.statements); + if (usingKind) { + startLexicalEnvironment(); + exportBindings = new IdentifierNameMap(); + exportVars = []; + const prologueCount = countPrologueStatements(node.statements); + const topLevelStatements = []; + addRange(topLevelStatements, visitArray(node.statements, visitor, isStatement, 0, prologueCount)); + let pos = prologueCount; + while (pos < node.statements.length) { + const statement = node.statements[pos]; + if (getUsingKind(statement) !== 0 /* None */) { + if (pos > prologueCount) { + addRange(topLevelStatements, visitNodes2(node.statements, visitor, isStatement, prologueCount, pos - prologueCount)); + } + break; + } + pos++; + } + Debug.assert(pos < node.statements.length, "Should have encountered at least one 'using' statement."); + const envBinding = createEnvBinding(); + const bodyStatements = transformUsingDeclarations(node.statements, pos, node.statements.length, envBinding, topLevelStatements); + if (exportBindings.size) { + append( + topLevelStatements, + factory2.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory2.createNamedExports(arrayFrom(exportBindings.values())) + ) + ); + } + addRange(topLevelStatements, endLexicalEnvironment()); + if (exportVars.length) { + topLevelStatements.push(factory2.createVariableStatement( + factory2.createModifiersFromModifierFlags(32 /* Export */), + factory2.createVariableDeclarationList( + exportVars, + 1 /* Let */ + ) + )); + } + addRange(topLevelStatements, createDownlevelUsingStatements(bodyStatements, envBinding, usingKind === 2 /* Async */)); + if (exportEqualsBinding) { + topLevelStatements.push(factory2.createExportAssignment( + /*modifiers*/ + void 0, + /*isExportEquals*/ + true, + exportEqualsBinding + )); + } + return factory2.updateSourceFile(node, topLevelStatements); + } + return visitEachChild(node, visitor, context); + } + function visitBlock(node) { + const usingKind = getUsingKindOfStatements(node.statements); + if (usingKind) { + const prologueCount = countPrologueStatements(node.statements); + const envBinding = createEnvBinding(); + return factory2.updateBlock( + node, + [ + ...visitArray(node.statements, visitor, isStatement, 0, prologueCount), + ...createDownlevelUsingStatements( + transformUsingDeclarations( + node.statements, + prologueCount, + node.statements.length, + envBinding, + /*topLevelStatements*/ + void 0 + ), + envBinding, + usingKind === 2 /* Async */ + ) + ] + ); + } + return visitEachChild(node, visitor, context); + } + function visitForStatement(node) { + if (node.initializer && isUsingVariableDeclarationList(node.initializer)) { + return visitNode( + factory2.createBlock([ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + node.initializer + ), + factory2.updateForStatement( + node, + /*initializer*/ + void 0, + node.condition, + node.incrementor, + node.statement + ) + ]), + visitor, + isStatement + ); + } + return visitEachChild(node, visitor, context); + } + function visitForOfStatement(node) { + if (isUsingVariableDeclarationList(node.initializer)) { + const forInitializer = node.initializer; + const forDecl = firstOrUndefined(forInitializer.declarations) || factory2.createVariableDeclaration(factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + )); + const isAwaitUsing = getUsingKindOfVariableDeclarationList(forInitializer) === 2 /* Async */; + const temp = factory2.getGeneratedNameForNode(forDecl.name); + const usingVar = factory2.updateVariableDeclaration( + forDecl, + forDecl.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + temp + ); + const usingVarList = factory2.createVariableDeclarationList([usingVar], isAwaitUsing ? 6 /* AwaitUsing */ : 4 /* Using */); + const usingVarStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + usingVarList + ); + return visitNode( + factory2.updateForOfStatement( + node, + node.awaitModifier, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration(temp) + ], 2 /* Const */), + node.expression, + isBlock(node.statement) ? factory2.updateBlock(node.statement, [ + usingVarStatement, + ...node.statement.statements + ]) : factory2.createBlock( + [ + usingVarStatement, + node.statement + ], + /*multiLine*/ + true + ) + ), + visitor, + isStatement + ); + } + return visitEachChild(node, visitor, context); + } + function visitCaseOrDefaultClause(node, envBinding) { + if (getUsingKindOfStatements(node.statements) !== 0 /* None */) { + if (isCaseClause(node)) { + return factory2.updateCaseClause( + node, + visitNode(node.expression, visitor, isExpression), + transformUsingDeclarations( + node.statements, + /*start*/ + 0, + node.statements.length, + envBinding, + /*topLevelStatements*/ + void 0 + ) + ); + } else { + return factory2.updateDefaultClause( + node, + transformUsingDeclarations( + node.statements, + /*start*/ + 0, + node.statements.length, + envBinding, + /*topLevelStatements*/ + void 0 + ) + ); + } + } + return visitEachChild(node, visitor, context); + } + function visitSwitchStatement(node) { + const usingKind = getUsingKindOfCaseOrDefaultClauses(node.caseBlock.clauses); + if (usingKind) { + const envBinding = createEnvBinding(); + return createDownlevelUsingStatements( + [ + factory2.updateSwitchStatement( + node, + visitNode(node.expression, visitor, isExpression), + factory2.updateCaseBlock( + node.caseBlock, + node.caseBlock.clauses.map((clause) => visitCaseOrDefaultClause(clause, envBinding)) + ) + ) + ], + envBinding, + usingKind === 2 /* Async */ + ); + } + return visitEachChild(node, visitor, context); + } + function transformUsingDeclarations(statementsIn, start, end, envBinding, topLevelStatements) { + const statements = []; + for (let i = start; i < end; i++) { + const statement = statementsIn[i]; + const usingKind = getUsingKind(statement); + if (usingKind) { + Debug.assertNode(statement, isVariableStatement); + const declarations = []; + for (let declaration of statement.declarationList.declarations) { + if (!isIdentifier(declaration.name)) { + declarations.length = 0; + break; + } + if (isNamedEvaluation(declaration)) { + declaration = transformNamedEvaluation(context, declaration); + } + const initializer = visitNode(declaration.initializer, visitor, isExpression) ?? factory2.createVoidZero(); + declarations.push(factory2.updateVariableDeclaration( + declaration, + declaration.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + emitHelpers().createAddDisposableResourceHelper( + envBinding, + initializer, + usingKind === 2 /* Async */ + ) + )); + } + if (declarations.length) { + const varList = factory2.createVariableDeclarationList(declarations, 2 /* Const */); + setOriginalNode(varList, statement.declarationList); + setTextRange(varList, statement.declarationList); + hoistOrAppendNode(factory2.updateVariableStatement( + statement, + /*modifiers*/ + void 0, + varList + )); + continue; + } + } + const result = visitor(statement); + if (isArray(result)) { + result.forEach(hoistOrAppendNode); + } else if (result) { + hoistOrAppendNode(result); + } + } + return statements; + function hoistOrAppendNode(node) { + Debug.assertNode(node, isStatement); + append(statements, hoist(node)); + } + function hoist(node) { + if (!topLevelStatements) return node; + switch (node.kind) { + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 279 /* ExportDeclaration */: + case 263 /* FunctionDeclaration */: + return hoistImportOrExportOrHoistedDeclaration(node, topLevelStatements); + case 278 /* ExportAssignment */: + return hoistExportAssignment(node); + case 264 /* ClassDeclaration */: + return hoistClassDeclaration(node); + case 244 /* VariableStatement */: + return hoistVariableStatement(node); + } + return node; + } + } + function hoistImportOrExportOrHoistedDeclaration(node, topLevelStatements) { + topLevelStatements.push(node); + return void 0; + } + function hoistExportAssignment(node) { + return node.isExportEquals ? hoistExportEquals(node) : hoistExportDefault(node); + } + function hoistExportDefault(node) { + if (defaultExportBinding) { + return node; + } + defaultExportBinding = factory2.createUniqueName("_default", 8 /* ReservedInNestedScopes */ | 32 /* FileLevel */ | 16 /* Optimistic */); + hoistBindingIdentifier( + defaultExportBinding, + /*isExport*/ + true, + "default", + node + ); + let expression = node.expression; + let innerExpression = skipOuterExpressions(expression); + if (isNamedEvaluation(innerExpression)) { + innerExpression = transformNamedEvaluation( + context, + innerExpression, + /*ignoreEmptyStringLiteral*/ + false, + "default" + ); + expression = factory2.restoreOuterExpressions(expression, innerExpression); + } + const assignment = factory2.createAssignment(defaultExportBinding, expression); + return factory2.createExpressionStatement(assignment); + } + function hoistExportEquals(node) { + if (exportEqualsBinding) { + return node; + } + exportEqualsBinding = factory2.createUniqueName("_default", 8 /* ReservedInNestedScopes */ | 32 /* FileLevel */ | 16 /* Optimistic */); + hoistVariableDeclaration(exportEqualsBinding); + const assignment = factory2.createAssignment(exportEqualsBinding, node.expression); + return factory2.createExpressionStatement(assignment); + } + function hoistClassDeclaration(node) { + if (!node.name && defaultExportBinding) { + return node; + } + const isExported2 = hasSyntacticModifier(node, 32 /* Export */); + const isDefault = hasSyntacticModifier(node, 2048 /* Default */); + let expression = factory2.converters.convertToClassExpression(node); + if (node.name) { + hoistBindingIdentifier( + factory2.getLocalName(node), + isExported2 && !isDefault, + /*exportAlias*/ + void 0, + node + ); + expression = factory2.createAssignment(factory2.getDeclarationName(node), expression); + if (isNamedEvaluation(expression)) { + expression = transformNamedEvaluation( + context, + expression, + /*ignoreEmptyStringLiteral*/ + false + ); + } + setOriginalNode(expression, node); + setSourceMapRange(expression, node); + setCommentRange(expression, node); + } + if (isDefault && !defaultExportBinding) { + defaultExportBinding = factory2.createUniqueName("_default", 8 /* ReservedInNestedScopes */ | 32 /* FileLevel */ | 16 /* Optimistic */); + hoistBindingIdentifier( + defaultExportBinding, + /*isExport*/ + true, + "default", + node + ); + expression = factory2.createAssignment(defaultExportBinding, expression); + if (isNamedEvaluation(expression)) { + expression = transformNamedEvaluation( + context, + expression, + /*ignoreEmptyStringLiteral*/ + false, + "default" + ); + } + setOriginalNode(expression, node); + } + return factory2.createExpressionStatement(expression); + } + function hoistVariableStatement(node) { + let expressions; + const isExported2 = hasSyntacticModifier(node, 32 /* Export */); + for (const variable of node.declarationList.declarations) { + hoistBindingElement(variable, isExported2, variable); + if (variable.initializer) { + expressions = append(expressions, hoistInitializedVariable(variable)); + } + } + if (expressions) { + const statement = factory2.createExpressionStatement(factory2.inlineExpressions(expressions)); + setOriginalNode(statement, node); + setCommentRange(statement, node); + setSourceMapRange(statement, node); + return statement; + } + return void 0; + } + function hoistInitializedVariable(node) { + Debug.assertIsDefined(node.initializer); + let target; + if (isIdentifier(node.name)) { + target = factory2.cloneNode(node.name); + setEmitFlags(target, getEmitFlags(target) & ~(32768 /* LocalName */ | 16384 /* ExportName */ | 65536 /* InternalName */)); + } else { + target = factory2.converters.convertToAssignmentPattern(node.name); + } + const assignment = factory2.createAssignment(target, node.initializer); + setOriginalNode(assignment, node); + setCommentRange(assignment, node); + setSourceMapRange(assignment, node); + return assignment; + } + function hoistBindingElement(node, isExportedDeclaration, original) { + if (isBindingPattern(node.name)) { + for (const element of node.name.elements) { + if (!isOmittedExpression(element)) { + hoistBindingElement(element, isExportedDeclaration, original); + } + } + } else { + hoistBindingIdentifier( + node.name, + isExportedDeclaration, + /*exportAlias*/ + void 0, + original + ); + } + } + function hoistBindingIdentifier(node, isExport, exportAlias, original) { + const name = isGeneratedIdentifier(node) ? node : factory2.cloneNode(node); + if (isExport) { + if (exportAlias === void 0 && !isLocalName(name)) { + const varDecl = factory2.createVariableDeclaration(name); + if (original) { + setOriginalNode(varDecl, original); + } + exportVars.push(varDecl); + return; + } + const localName = exportAlias !== void 0 ? name : void 0; + const exportName = exportAlias !== void 0 ? exportAlias : name; + const specifier = factory2.createExportSpecifier( + /*isTypeOnly*/ + false, + localName, + exportName + ); + if (original) { + setOriginalNode(specifier, original); + } + exportBindings.set(name, specifier); + } + hoistVariableDeclaration(name); + } + function createEnvBinding() { + return factory2.createUniqueName("env"); + } + function createDownlevelUsingStatements(bodyStatements, envBinding, async) { + const statements = []; + const envObject = factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("stack", factory2.createArrayLiteralExpression()), + factory2.createPropertyAssignment("error", factory2.createVoidZero()), + factory2.createPropertyAssignment("hasError", factory2.createFalse()) + ]); + const envVar = factory2.createVariableDeclaration( + envBinding, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + envObject + ); + const envVarList = factory2.createVariableDeclarationList([envVar], 2 /* Const */); + const envVarStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + envVarList + ); + statements.push(envVarStatement); + const tryBlock = factory2.createBlock( + bodyStatements, + /*multiLine*/ + true + ); + const bodyCatchBinding = factory2.createUniqueName("e"); + const catchClause = factory2.createCatchClause( + bodyCatchBinding, + factory2.createBlock( + [ + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression(envBinding, "error"), + bodyCatchBinding + ) + ), + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression(envBinding, "hasError"), + factory2.createTrue() + ) + ) + ], + /*multiLine*/ + true + ) + ); + let finallyBlock; + if (async) { + const result = factory2.createUniqueName("result"); + finallyBlock = factory2.createBlock( + [ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + result, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + emitHelpers().createDisposeResourcesHelper(envBinding) + ) + ], 2 /* Const */) + ), + factory2.createIfStatement(result, factory2.createExpressionStatement(factory2.createAwaitExpression(result))) + ], + /*multiLine*/ + true + ); + } else { + finallyBlock = factory2.createBlock( + [ + factory2.createExpressionStatement( + emitHelpers().createDisposeResourcesHelper(envBinding) + ) + ], + /*multiLine*/ + true + ); + } + const tryStatement = factory2.createTryStatement(tryBlock, catchClause, finallyBlock); + statements.push(tryStatement); + return statements; + } +} +function countPrologueStatements(statements) { + for (let i = 0; i < statements.length; i++) { + if (!isPrologueDirective(statements[i]) && !isCustomPrologue(statements[i])) { + return i; + } + } + return 0; +} +function isUsingVariableDeclarationList(node) { + return isVariableDeclarationList(node) && getUsingKindOfVariableDeclarationList(node) !== 0 /* None */; +} +function getUsingKindOfVariableDeclarationList(node) { + return (node.flags & 7 /* BlockScoped */) === 6 /* AwaitUsing */ ? 2 /* Async */ : (node.flags & 7 /* BlockScoped */) === 4 /* Using */ ? 1 /* Sync */ : 0 /* None */; +} +function getUsingKindOfVariableStatement(node) { + return getUsingKindOfVariableDeclarationList(node.declarationList); +} +function getUsingKind(statement) { + return isVariableStatement(statement) ? getUsingKindOfVariableStatement(statement) : 0 /* None */; +} +function getUsingKindOfStatements(statements) { + let result = 0 /* None */; + for (const statement of statements) { + const usingKind = getUsingKind(statement); + if (usingKind === 2 /* Async */) return 2 /* Async */; + if (usingKind > result) result = usingKind; + } + return result; +} +function getUsingKindOfCaseOrDefaultClauses(clauses) { + let result = 0 /* None */; + for (const clause of clauses) { + const usingKind = getUsingKindOfStatements(clause.statements); + if (usingKind === 2 /* Async */) return 2 /* Async */; + if (usingKind > result) result = usingKind; + } + return result; +} + +// src/compiler/transformers/jsx.ts +function transformJsx(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers + } = context; + const compilerOptions = context.getCompilerOptions(); + let currentSourceFile; + let currentFileState; + return chainBundle(context, transformSourceFile); + function getCurrentFileNameExpression() { + if (currentFileState.filenameDeclaration) { + return currentFileState.filenameDeclaration.name; + } + const declaration = factory2.createVariableDeclaration( + factory2.createUniqueName("_jsxFileName", 16 /* Optimistic */ | 32 /* FileLevel */), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createStringLiteral(currentSourceFile.fileName) + ); + currentFileState.filenameDeclaration = declaration; + return currentFileState.filenameDeclaration.name; + } + function getJsxFactoryCalleePrimitive(isStaticChildren) { + return compilerOptions.jsx === 5 /* ReactJSXDev */ ? "jsxDEV" : isStaticChildren ? "jsxs" : "jsx"; + } + function getJsxFactoryCallee(isStaticChildren) { + const type = getJsxFactoryCalleePrimitive(isStaticChildren); + return getImplicitImportForName(type); + } + function getImplicitJsxFragmentReference() { + return getImplicitImportForName("Fragment"); + } + function getImplicitImportForName(name) { + var _a, _b; + const importSource = name === "createElement" ? currentFileState.importSpecifier : getJSXRuntimeImport(currentFileState.importSpecifier, compilerOptions); + const existing = (_b = (_a = currentFileState.utilizedImplicitRuntimeImports) == null ? void 0 : _a.get(importSource)) == null ? void 0 : _b.get(name); + if (existing) { + return existing.name; + } + if (!currentFileState.utilizedImplicitRuntimeImports) { + currentFileState.utilizedImplicitRuntimeImports = /* @__PURE__ */ new Map(); + } + let specifierSourceImports = currentFileState.utilizedImplicitRuntimeImports.get(importSource); + if (!specifierSourceImports) { + specifierSourceImports = /* @__PURE__ */ new Map(); + currentFileState.utilizedImplicitRuntimeImports.set(importSource, specifierSourceImports); + } + const generatedName = factory2.createUniqueName(`_${name}`, 16 /* Optimistic */ | 32 /* FileLevel */ | 64 /* AllowNameSubstitution */); + const specifier = factory2.createImportSpecifier( + /*isTypeOnly*/ + false, + factory2.createIdentifier(name), + generatedName + ); + setIdentifierGeneratedImportReference(generatedName, specifier); + specifierSourceImports.set(name, specifier); + return generatedName; + } + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + currentSourceFile = node; + currentFileState = {}; + currentFileState.importSpecifier = getJSXImplicitImportBase(compilerOptions, node); + let visited = visitEachChild(node, visitor, context); + addEmitHelpers(visited, context.readEmitHelpers()); + let statements = visited.statements; + if (currentFileState.filenameDeclaration) { + statements = insertStatementAfterCustomPrologue(statements.slice(), factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([currentFileState.filenameDeclaration], 2 /* Const */) + )); + } + if (currentFileState.utilizedImplicitRuntimeImports) { + for (const [importSource, importSpecifiersMap] of arrayFrom(currentFileState.utilizedImplicitRuntimeImports.entries())) { + if (isExternalModule(node)) { + const importStatement = factory2.createImportDeclaration( + /*modifiers*/ + void 0, + factory2.createImportClause( + /*phaseModifier*/ + void 0, + /*name*/ + void 0, + factory2.createNamedImports(arrayFrom(importSpecifiersMap.values())) + ), + factory2.createStringLiteral(importSource), + /*attributes*/ + void 0 + ); + setParentRecursive( + importStatement, + /*incremental*/ + false + ); + statements = insertStatementAfterCustomPrologue(statements.slice(), importStatement); + } else if (isExternalOrCommonJsModule(node)) { + const requireStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + factory2.createObjectBindingPattern(arrayFrom(importSpecifiersMap.values(), (s) => factory2.createBindingElement( + /*dotDotDotToken*/ + void 0, + s.propertyName, + s.name + ))), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createCallExpression( + factory2.createIdentifier("require"), + /*typeArguments*/ + void 0, + [factory2.createStringLiteral(importSource)] + ) + ) + ], 2 /* Const */) + ); + setParentRecursive( + requireStatement, + /*incremental*/ + false + ); + statements = insertStatementAfterCustomPrologue(statements.slice(), requireStatement); + } else { + } + } + } + if (statements !== visited.statements) { + visited = factory2.updateSourceFile(visited, statements); + } + currentFileState = void 0; + return visited; + } + function visitor(node) { + if (node.transformFlags & 2 /* ContainsJsx */) { + return visitorWorker(node); + } else { + return node; + } + } + function visitorWorker(node) { + switch (node.kind) { + case 285 /* JsxElement */: + return visitJsxElement( + node, + /*isChild*/ + false + ); + case 286 /* JsxSelfClosingElement */: + return visitJsxSelfClosingElement( + node, + /*isChild*/ + false + ); + case 289 /* JsxFragment */: + return visitJsxFragment( + node, + /*isChild*/ + false + ); + case 295 /* JsxExpression */: + return visitJsxExpression(node); + default: + return visitEachChild(node, visitor, context); + } + } + function transformJsxChildToExpression(node) { + switch (node.kind) { + case 12 /* JsxText */: + return visitJsxText(node); + case 295 /* JsxExpression */: + return visitJsxExpression(node); + case 285 /* JsxElement */: + return visitJsxElement( + node, + /*isChild*/ + true + ); + case 286 /* JsxSelfClosingElement */: + return visitJsxSelfClosingElement( + node, + /*isChild*/ + true + ); + case 289 /* JsxFragment */: + return visitJsxFragment( + node, + /*isChild*/ + true + ); + default: + return Debug.failBadSyntaxKind(node); + } + } + function hasProto(obj) { + return obj.properties.some( + (p) => isPropertyAssignment(p) && (isIdentifier(p.name) && idText(p.name) === "__proto__" || isStringLiteral(p.name) && p.name.text === "__proto__") + ); + } + function hasKeyAfterPropsSpread(node) { + let spread = false; + for (const elem of node.attributes.properties) { + if (isJsxSpreadAttribute(elem) && (!isObjectLiteralExpression(elem.expression) || elem.expression.properties.some(isSpreadAssignment))) { + spread = true; + } else if (spread && isJsxAttribute(elem) && isIdentifier(elem.name) && elem.name.escapedText === "key") { + return true; + } + } + return false; + } + function shouldUseCreateElement(node) { + return currentFileState.importSpecifier === void 0 || hasKeyAfterPropsSpread(node); + } + function visitJsxElement(node, isChild) { + const tagTransform = shouldUseCreateElement(node.openingElement) ? visitJsxOpeningLikeElementCreateElement : visitJsxOpeningLikeElementJSX; + return tagTransform( + node.openingElement, + node.children, + isChild, + /*location*/ + node + ); + } + function visitJsxSelfClosingElement(node, isChild) { + const tagTransform = shouldUseCreateElement(node) ? visitJsxOpeningLikeElementCreateElement : visitJsxOpeningLikeElementJSX; + return tagTransform( + node, + /*children*/ + void 0, + isChild, + /*location*/ + node + ); + } + function visitJsxFragment(node, isChild) { + const tagTransform = currentFileState.importSpecifier === void 0 ? visitJsxOpeningFragmentCreateElement : visitJsxOpeningFragmentJSX; + return tagTransform( + node.openingFragment, + node.children, + isChild, + /*location*/ + node + ); + } + function convertJsxChildrenToChildrenPropObject(children) { + const prop = convertJsxChildrenToChildrenPropAssignment(children); + return prop && factory2.createObjectLiteralExpression([prop]); + } + function convertJsxChildrenToChildrenPropAssignment(children) { + const nonWhitespaceChildren = getSemanticJsxChildren(children); + if (length(nonWhitespaceChildren) === 1 && !nonWhitespaceChildren[0].dotDotDotToken) { + const result2 = transformJsxChildToExpression(nonWhitespaceChildren[0]); + return result2 && factory2.createPropertyAssignment("children", result2); + } + const result = mapDefined(children, transformJsxChildToExpression); + return length(result) ? factory2.createPropertyAssignment("children", factory2.createArrayLiteralExpression(result)) : void 0; + } + function visitJsxOpeningLikeElementJSX(node, children, isChild, location) { + const tagName = getTagName(node); + const childrenProp = children && children.length ? convertJsxChildrenToChildrenPropAssignment(children) : void 0; + const keyAttr = find(node.attributes.properties, (p) => !!p.name && isIdentifier(p.name) && p.name.escapedText === "key"); + const attrs = keyAttr ? filter(node.attributes.properties, (p) => p !== keyAttr) : node.attributes.properties; + const objectProperties = length(attrs) ? transformJsxAttributesToObjectProps(attrs, childrenProp) : factory2.createObjectLiteralExpression(childrenProp ? [childrenProp] : emptyArray); + return visitJsxOpeningLikeElementOrFragmentJSX( + tagName, + objectProperties, + keyAttr, + children || emptyArray, + isChild, + location + ); + } + function visitJsxOpeningLikeElementOrFragmentJSX(tagName, objectProperties, keyAttr, children, isChild, location) { + var _a; + const nonWhitespaceChildren = getSemanticJsxChildren(children); + const isStaticChildren = length(nonWhitespaceChildren) > 1 || !!((_a = nonWhitespaceChildren[0]) == null ? void 0 : _a.dotDotDotToken); + const args = [tagName, objectProperties]; + if (keyAttr) { + args.push(transformJsxAttributeInitializer(keyAttr.initializer)); + } + if (compilerOptions.jsx === 5 /* ReactJSXDev */) { + const originalFile = getOriginalNode(currentSourceFile); + if (originalFile && isSourceFile(originalFile)) { + if (keyAttr === void 0) { + args.push(factory2.createVoidZero()); + } + args.push(isStaticChildren ? factory2.createTrue() : factory2.createFalse()); + const lineCol = getLineAndCharacterOfPosition(originalFile, location.pos); + args.push(factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("fileName", getCurrentFileNameExpression()), + factory2.createPropertyAssignment("lineNumber", factory2.createNumericLiteral(lineCol.line + 1)), + factory2.createPropertyAssignment("columnNumber", factory2.createNumericLiteral(lineCol.character + 1)) + ])); + args.push(factory2.createThis()); + } + } + const element = setTextRange( + factory2.createCallExpression( + getJsxFactoryCallee(isStaticChildren), + /*typeArguments*/ + void 0, + args + ), + location + ); + if (isChild) { + startOnNewLine(element); + } + return element; + } + function visitJsxOpeningLikeElementCreateElement(node, children, isChild, location) { + const tagName = getTagName(node); + const attrs = node.attributes.properties; + const objectProperties = length(attrs) ? transformJsxAttributesToObjectProps(attrs) : factory2.createNull(); + const callee = currentFileState.importSpecifier === void 0 ? createJsxFactoryExpression( + factory2, + context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), + compilerOptions.reactNamespace, + // TODO: GH#18217 + node + ) : getImplicitImportForName("createElement"); + const element = createExpressionForJsxElement( + factory2, + callee, + tagName, + objectProperties, + mapDefined(children, transformJsxChildToExpression), + location + ); + if (isChild) { + startOnNewLine(element); + } + return element; + } + function visitJsxOpeningFragmentJSX(_node, children, isChild, location) { + let childrenProps; + if (children && children.length) { + const result = convertJsxChildrenToChildrenPropObject(children); + if (result) { + childrenProps = result; + } + } + return visitJsxOpeningLikeElementOrFragmentJSX( + getImplicitJsxFragmentReference(), + childrenProps || factory2.createObjectLiteralExpression([]), + /*keyAttr*/ + void 0, + children, + isChild, + location + ); + } + function visitJsxOpeningFragmentCreateElement(node, children, isChild, location) { + const element = createExpressionForJsxFragment( + factory2, + context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), + context.getEmitResolver().getJsxFragmentFactoryEntity(currentSourceFile), + compilerOptions.reactNamespace, + // TODO: GH#18217 + mapDefined(children, transformJsxChildToExpression), + node, + location + ); + if (isChild) { + startOnNewLine(element); + } + return element; + } + function transformJsxSpreadAttributeToProps(node) { + if (isObjectLiteralExpression(node.expression) && !hasProto(node.expression)) { + return sameMap(node.expression.properties, (p) => Debug.checkDefined(visitNode(p, visitor, isObjectLiteralElementLike))); + } + return factory2.createSpreadAssignment(Debug.checkDefined(visitNode(node.expression, visitor, isExpression))); + } + function transformJsxAttributesToObjectProps(attrs, children) { + const target = getEmitScriptTarget(compilerOptions); + return target && target >= 5 /* ES2018 */ ? factory2.createObjectLiteralExpression(transformJsxAttributesToProps(attrs, children)) : transformJsxAttributesToExpression(attrs, children); + } + function transformJsxAttributesToProps(attrs, children) { + const props = flatten(spanMap(attrs, isJsxSpreadAttribute, (attrs2, isSpread) => flatten(map(attrs2, (attr) => isSpread ? transformJsxSpreadAttributeToProps(attr) : transformJsxAttributeToObjectLiteralElement(attr))))); + if (children) { + props.push(children); + } + return props; + } + function transformJsxAttributesToExpression(attrs, children) { + const expressions = []; + let properties = []; + for (const attr of attrs) { + if (isJsxSpreadAttribute(attr)) { + if (isObjectLiteralExpression(attr.expression) && !hasProto(attr.expression)) { + for (const prop of attr.expression.properties) { + if (isSpreadAssignment(prop)) { + finishObjectLiteralIfNeeded(); + expressions.push(Debug.checkDefined(visitNode(prop.expression, visitor, isExpression))); + continue; + } + properties.push(Debug.checkDefined(visitNode(prop, visitor))); + } + continue; + } + finishObjectLiteralIfNeeded(); + expressions.push(Debug.checkDefined(visitNode(attr.expression, visitor, isExpression))); + continue; + } + properties.push(transformJsxAttributeToObjectLiteralElement(attr)); + } + if (children) { + properties.push(children); + } + finishObjectLiteralIfNeeded(); + if (expressions.length && !isObjectLiteralExpression(expressions[0])) { + expressions.unshift(factory2.createObjectLiteralExpression()); + } + return singleOrUndefined(expressions) || emitHelpers().createAssignHelper(expressions); + function finishObjectLiteralIfNeeded() { + if (properties.length) { + expressions.push(factory2.createObjectLiteralExpression(properties)); + properties = []; + } + } + } + function transformJsxAttributeToObjectLiteralElement(node) { + const name = getAttributeName(node); + const expression = transformJsxAttributeInitializer(node.initializer); + return factory2.createPropertyAssignment(name, expression); + } + function transformJsxAttributeInitializer(node) { + if (node === void 0) { + return factory2.createTrue(); + } + if (node.kind === 11 /* StringLiteral */) { + const singleQuote = node.singleQuote !== void 0 ? node.singleQuote : !isStringDoubleQuoted(node, currentSourceFile); + const literal = factory2.createStringLiteral(tryDecodeEntities(node.text) || node.text, singleQuote); + return setTextRange(literal, node); + } + if (node.kind === 295 /* JsxExpression */) { + if (node.expression === void 0) { + return factory2.createTrue(); + } + return Debug.checkDefined(visitNode(node.expression, visitor, isExpression)); + } + if (isJsxElement(node)) { + return visitJsxElement( + node, + /*isChild*/ + false + ); + } + if (isJsxSelfClosingElement(node)) { + return visitJsxSelfClosingElement( + node, + /*isChild*/ + false + ); + } + if (isJsxFragment(node)) { + return visitJsxFragment( + node, + /*isChild*/ + false + ); + } + return Debug.failBadSyntaxKind(node); + } + function visitJsxText(node) { + const fixed = fixupWhitespaceAndDecodeEntities(node.text); + return fixed === void 0 ? void 0 : factory2.createStringLiteral(fixed); + } + function fixupWhitespaceAndDecodeEntities(text) { + let acc; + let firstNonWhitespace = 0; + let lastNonWhitespace = -1; + for (let i = 0; i < text.length; i++) { + const c = text.charCodeAt(i); + if (isLineBreak(c)) { + if (firstNonWhitespace !== -1 && lastNonWhitespace !== -1) { + acc = addLineOfJsxText(acc, text.substr(firstNonWhitespace, lastNonWhitespace - firstNonWhitespace + 1)); + } + firstNonWhitespace = -1; + } else if (!isWhiteSpaceSingleLine(c)) { + lastNonWhitespace = i; + if (firstNonWhitespace === -1) { + firstNonWhitespace = i; + } + } + } + return firstNonWhitespace !== -1 ? addLineOfJsxText(acc, text.substr(firstNonWhitespace)) : acc; + } + function addLineOfJsxText(acc, trimmedLine) { + const decoded = decodeEntities(trimmedLine); + return acc === void 0 ? decoded : acc + " " + decoded; + } + function decodeEntities(text) { + return text.replace(/&((#((\d+)|x([\da-fA-F]+)))|(\w+));/g, (match, _all, _number, _digits, decimal, hex, word) => { + if (decimal) { + return utf16EncodeAsString(parseInt(decimal, 10)); + } else if (hex) { + return utf16EncodeAsString(parseInt(hex, 16)); + } else { + const ch = entities.get(word); + return ch ? utf16EncodeAsString(ch) : match; + } + }); + } + function tryDecodeEntities(text) { + const decoded = decodeEntities(text); + return decoded === text ? void 0 : decoded; + } + function getTagName(node) { + if (node.kind === 285 /* JsxElement */) { + return getTagName(node.openingElement); + } else { + const tagName = node.tagName; + if (isIdentifier(tagName) && isIntrinsicJsxName(tagName.escapedText)) { + return factory2.createStringLiteral(idText(tagName)); + } else if (isJsxNamespacedName(tagName)) { + return factory2.createStringLiteral(idText(tagName.namespace) + ":" + idText(tagName.name)); + } else { + return createExpressionFromEntityName(factory2, tagName); + } + } + } + function getAttributeName(node) { + const name = node.name; + if (isIdentifier(name)) { + const text = idText(name); + return /^[A-Z_]\w*$/i.test(text) ? name : factory2.createStringLiteral(text); + } + return factory2.createStringLiteral(idText(name.namespace) + ":" + idText(name.name)); + } + function visitJsxExpression(node) { + const expression = visitNode(node.expression, visitor, isExpression); + return node.dotDotDotToken ? factory2.createSpreadElement(expression) : expression; + } +} +var entities = new Map(Object.entries({ + quot: 34, + amp: 38, + apos: 39, + lt: 60, + gt: 62, + nbsp: 160, + iexcl: 161, + cent: 162, + pound: 163, + curren: 164, + yen: 165, + brvbar: 166, + sect: 167, + uml: 168, + copy: 169, + ordf: 170, + laquo: 171, + not: 172, + shy: 173, + reg: 174, + macr: 175, + deg: 176, + plusmn: 177, + sup2: 178, + sup3: 179, + acute: 180, + micro: 181, + para: 182, + middot: 183, + cedil: 184, + sup1: 185, + ordm: 186, + raquo: 187, + frac14: 188, + frac12: 189, + frac34: 190, + iquest: 191, + Agrave: 192, + Aacute: 193, + Acirc: 194, + Atilde: 195, + Auml: 196, + Aring: 197, + AElig: 198, + Ccedil: 199, + Egrave: 200, + Eacute: 201, + Ecirc: 202, + Euml: 203, + Igrave: 204, + Iacute: 205, + Icirc: 206, + Iuml: 207, + ETH: 208, + Ntilde: 209, + Ograve: 210, + Oacute: 211, + Ocirc: 212, + Otilde: 213, + Ouml: 214, + times: 215, + Oslash: 216, + Ugrave: 217, + Uacute: 218, + Ucirc: 219, + Uuml: 220, + Yacute: 221, + THORN: 222, + szlig: 223, + agrave: 224, + aacute: 225, + acirc: 226, + atilde: 227, + auml: 228, + aring: 229, + aelig: 230, + ccedil: 231, + egrave: 232, + eacute: 233, + ecirc: 234, + euml: 235, + igrave: 236, + iacute: 237, + icirc: 238, + iuml: 239, + eth: 240, + ntilde: 241, + ograve: 242, + oacute: 243, + ocirc: 244, + otilde: 245, + ouml: 246, + divide: 247, + oslash: 248, + ugrave: 249, + uacute: 250, + ucirc: 251, + uuml: 252, + yacute: 253, + thorn: 254, + yuml: 255, + OElig: 338, + oelig: 339, + Scaron: 352, + scaron: 353, + Yuml: 376, + fnof: 402, + circ: 710, + tilde: 732, + Alpha: 913, + Beta: 914, + Gamma: 915, + Delta: 916, + Epsilon: 917, + Zeta: 918, + Eta: 919, + Theta: 920, + Iota: 921, + Kappa: 922, + Lambda: 923, + Mu: 924, + Nu: 925, + Xi: 926, + Omicron: 927, + Pi: 928, + Rho: 929, + Sigma: 931, + Tau: 932, + Upsilon: 933, + Phi: 934, + Chi: 935, + Psi: 936, + Omega: 937, + alpha: 945, + beta: 946, + gamma: 947, + delta: 948, + epsilon: 949, + zeta: 950, + eta: 951, + theta: 952, + iota: 953, + kappa: 954, + lambda: 955, + mu: 956, + nu: 957, + xi: 958, + omicron: 959, + pi: 960, + rho: 961, + sigmaf: 962, + sigma: 963, + tau: 964, + upsilon: 965, + phi: 966, + chi: 967, + psi: 968, + omega: 969, + thetasym: 977, + upsih: 978, + piv: 982, + ensp: 8194, + emsp: 8195, + thinsp: 8201, + zwnj: 8204, + zwj: 8205, + lrm: 8206, + rlm: 8207, + ndash: 8211, + mdash: 8212, + lsquo: 8216, + rsquo: 8217, + sbquo: 8218, + ldquo: 8220, + rdquo: 8221, + bdquo: 8222, + dagger: 8224, + Dagger: 8225, + bull: 8226, + hellip: 8230, + permil: 8240, + prime: 8242, + Prime: 8243, + lsaquo: 8249, + rsaquo: 8250, + oline: 8254, + frasl: 8260, + euro: 8364, + image: 8465, + weierp: 8472, + real: 8476, + trade: 8482, + alefsym: 8501, + larr: 8592, + uarr: 8593, + rarr: 8594, + darr: 8595, + harr: 8596, + crarr: 8629, + lArr: 8656, + uArr: 8657, + rArr: 8658, + dArr: 8659, + hArr: 8660, + forall: 8704, + part: 8706, + exist: 8707, + empty: 8709, + nabla: 8711, + isin: 8712, + notin: 8713, + ni: 8715, + prod: 8719, + sum: 8721, + minus: 8722, + lowast: 8727, + radic: 8730, + prop: 8733, + infin: 8734, + ang: 8736, + and: 8743, + or: 8744, + cap: 8745, + cup: 8746, + int: 8747, + there4: 8756, + sim: 8764, + cong: 8773, + asymp: 8776, + ne: 8800, + equiv: 8801, + le: 8804, + ge: 8805, + sub: 8834, + sup: 8835, + nsub: 8836, + sube: 8838, + supe: 8839, + oplus: 8853, + otimes: 8855, + perp: 8869, + sdot: 8901, + lceil: 8968, + rceil: 8969, + lfloor: 8970, + rfloor: 8971, + lang: 9001, + rang: 9002, + loz: 9674, + spades: 9824, + clubs: 9827, + hearts: 9829, + diams: 9830 +})); + +// src/compiler/transformers/es2016.ts +function transformES2016(context) { + const { + factory: factory2, + hoistVariableDeclaration + } = context; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + return visitEachChild(node, visitor, context); + } + function visitor(node) { + if ((node.transformFlags & 512 /* ContainsES2016 */) === 0) { + return node; + } + switch (node.kind) { + case 227 /* BinaryExpression */: + return visitBinaryExpression(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitBinaryExpression(node) { + switch (node.operatorToken.kind) { + case 68 /* AsteriskAsteriskEqualsToken */: + return visitExponentiationAssignmentExpression(node); + case 43 /* AsteriskAsteriskToken */: + return visitExponentiationExpression(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitExponentiationAssignmentExpression(node) { + let target; + let value; + const left = visitNode(node.left, visitor, isExpression); + const right = visitNode(node.right, visitor, isExpression); + if (isElementAccessExpression(left)) { + const expressionTemp = factory2.createTempVariable(hoistVariableDeclaration); + const argumentExpressionTemp = factory2.createTempVariable(hoistVariableDeclaration); + target = setTextRange( + factory2.createElementAccessExpression( + setTextRange(factory2.createAssignment(expressionTemp, left.expression), left.expression), + setTextRange(factory2.createAssignment(argumentExpressionTemp, left.argumentExpression), left.argumentExpression) + ), + left + ); + value = setTextRange( + factory2.createElementAccessExpression( + expressionTemp, + argumentExpressionTemp + ), + left + ); + } else if (isPropertyAccessExpression(left)) { + const expressionTemp = factory2.createTempVariable(hoistVariableDeclaration); + target = setTextRange( + factory2.createPropertyAccessExpression( + setTextRange(factory2.createAssignment(expressionTemp, left.expression), left.expression), + left.name + ), + left + ); + value = setTextRange( + factory2.createPropertyAccessExpression( + expressionTemp, + left.name + ), + left + ); + } else { + target = left; + value = left; + } + return setTextRange( + factory2.createAssignment( + target, + setTextRange(factory2.createGlobalMethodCall("Math", "pow", [value, right]), node) + ), + node + ); + } + function visitExponentiationExpression(node) { + const left = visitNode(node.left, visitor, isExpression); + const right = visitNode(node.right, visitor, isExpression); + return setTextRange(factory2.createGlobalMethodCall("Math", "pow", [left, right]), node); + } +} + +// src/compiler/transformers/es2015.ts +function createSpreadSegment(kind, expression) { + return { kind, expression }; +} +function transformES2015(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + startLexicalEnvironment, + resumeLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const compilerOptions = context.getCompilerOptions(); + const resolver = context.getEmitResolver(); + const previousOnSubstituteNode = context.onSubstituteNode; + const previousOnEmitNode = context.onEmitNode; + context.onEmitNode = onEmitNode; + context.onSubstituteNode = onSubstituteNode; + let currentSourceFile; + let currentText; + let hierarchyFacts; + let taggedTemplateStringDeclarations; + function recordTaggedTemplateString(temp) { + taggedTemplateStringDeclarations = append( + taggedTemplateStringDeclarations, + factory2.createVariableDeclaration(temp) + ); + } + let convertedLoopState; + let enabledSubstitutions = 0 /* None */; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + currentSourceFile = node; + currentText = node.text; + const visited = visitSourceFile(node); + addEmitHelpers(visited, context.readEmitHelpers()); + currentSourceFile = void 0; + currentText = void 0; + taggedTemplateStringDeclarations = void 0; + hierarchyFacts = 0 /* None */; + return visited; + } + function enterSubtree(excludeFacts, includeFacts) { + const ancestorFacts = hierarchyFacts; + hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & 32767 /* AncestorFactsMask */; + return ancestorFacts; + } + function exitSubtree(ancestorFacts, excludeFacts, includeFacts) { + hierarchyFacts = (hierarchyFacts & ~excludeFacts | includeFacts) & -32768 /* SubtreeFactsMask */ | ancestorFacts; + } + function isReturnVoidStatementInConstructorWithCapturedSuper(node) { + return (hierarchyFacts & 8192 /* ConstructorWithSuperCall */) !== 0 && node.kind === 254 /* ReturnStatement */ && !node.expression; + } + function isOrMayContainReturnCompletion(node) { + return node.transformFlags & 4194304 /* ContainsHoistedDeclarationOrCompletion */ && (isReturnStatement(node) || isIfStatement(node) || isWithStatement(node) || isSwitchStatement(node) || isCaseBlock(node) || isCaseClause(node) || isDefaultClause(node) || isTryStatement(node) || isCatchClause(node) || isLabeledStatement(node) || isIterationStatement( + node, + /*lookInLabeledStatements*/ + false + ) || isBlock(node)); + } + function shouldVisitNode(node) { + return (node.transformFlags & 1024 /* ContainsES2015 */) !== 0 || convertedLoopState !== void 0 || hierarchyFacts & 8192 /* ConstructorWithSuperCall */ && isOrMayContainReturnCompletion(node) || isIterationStatement( + node, + /*lookInLabeledStatements*/ + false + ) && shouldConvertIterationStatement(node) || (getInternalEmitFlags(node) & 1 /* TypeScriptClassWrapper */) !== 0; + } + function visitor(node) { + return shouldVisitNode(node) ? visitorWorker( + node, + /*expressionResultIsUnused*/ + false + ) : node; + } + function visitorWithUnusedExpressionResult(node) { + return shouldVisitNode(node) ? visitorWorker( + node, + /*expressionResultIsUnused*/ + true + ) : node; + } + function classWrapperStatementVisitor(node) { + if (shouldVisitNode(node)) { + const original = getOriginalNode(node); + if (isPropertyDeclaration(original) && hasStaticModifier(original)) { + const ancestorFacts = enterSubtree( + 32670 /* StaticInitializerExcludes */, + 16449 /* StaticInitializerIncludes */ + ); + const result = visitorWorker( + node, + /*expressionResultIsUnused*/ + false + ); + exitSubtree(ancestorFacts, 229376 /* FunctionSubtreeExcludes */, 0 /* None */); + return result; + } + return visitorWorker( + node, + /*expressionResultIsUnused*/ + false + ); + } + return node; + } + function callExpressionVisitor(node) { + if (node.kind === 108 /* SuperKeyword */) { + return visitSuperKeyword( + node, + /*isExpressionOfCall*/ + true + ); + } + return visitor(node); + } + function visitorWorker(node, expressionResultIsUnused2) { + switch (node.kind) { + case 126 /* StaticKeyword */: + return void 0; + // elide static keyword + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 232 /* ClassExpression */: + return visitClassExpression(node); + case 170 /* Parameter */: + return visitParameter(node); + case 263 /* FunctionDeclaration */: + return visitFunctionDeclaration(node); + case 220 /* ArrowFunction */: + return visitArrowFunction(node); + case 219 /* FunctionExpression */: + return visitFunctionExpression(node); + case 261 /* VariableDeclaration */: + return visitVariableDeclaration(node); + case 80 /* Identifier */: + return visitIdentifier(node); + case 262 /* VariableDeclarationList */: + return visitVariableDeclarationList(node); + case 256 /* SwitchStatement */: + return visitSwitchStatement(node); + case 270 /* CaseBlock */: + return visitCaseBlock(node); + case 242 /* Block */: + return visitBlock( + node, + /*isFunctionBody*/ + false + ); + case 253 /* BreakStatement */: + case 252 /* ContinueStatement */: + return visitBreakOrContinueStatement(node); + case 257 /* LabeledStatement */: + return visitLabeledStatement(node); + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + return visitDoOrWhileStatement( + node, + /*outermostLabeledStatement*/ + void 0 + ); + case 249 /* ForStatement */: + return visitForStatement( + node, + /*outermostLabeledStatement*/ + void 0 + ); + case 250 /* ForInStatement */: + return visitForInStatement( + node, + /*outermostLabeledStatement*/ + void 0 + ); + case 251 /* ForOfStatement */: + return visitForOfStatement( + node, + /*outermostLabeledStatement*/ + void 0 + ); + case 245 /* ExpressionStatement */: + return visitExpressionStatement(node); + case 211 /* ObjectLiteralExpression */: + return visitObjectLiteralExpression(node); + case 300 /* CatchClause */: + return visitCatchClause(node); + case 305 /* ShorthandPropertyAssignment */: + return visitShorthandPropertyAssignment(node); + case 168 /* ComputedPropertyName */: + return visitComputedPropertyName(node); + case 210 /* ArrayLiteralExpression */: + return visitArrayLiteralExpression(node); + case 214 /* CallExpression */: + return visitCallExpression(node); + case 215 /* NewExpression */: + return visitNewExpression(node); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression(node, expressionResultIsUnused2); + case 227 /* BinaryExpression */: + return visitBinaryExpression(node, expressionResultIsUnused2); + case 357 /* CommaListExpression */: + return visitCommaListExpression(node, expressionResultIsUnused2); + case 15 /* NoSubstitutionTemplateLiteral */: + case 16 /* TemplateHead */: + case 17 /* TemplateMiddle */: + case 18 /* TemplateTail */: + return visitTemplateLiteral(node); + case 11 /* StringLiteral */: + return visitStringLiteral(node); + case 9 /* NumericLiteral */: + return visitNumericLiteral(node); + case 216 /* TaggedTemplateExpression */: + return visitTaggedTemplateExpression(node); + case 229 /* TemplateExpression */: + return visitTemplateExpression(node); + case 230 /* YieldExpression */: + return visitYieldExpression(node); + case 231 /* SpreadElement */: + return visitSpreadElement(node); + case 108 /* SuperKeyword */: + return visitSuperKeyword( + node, + /*isExpressionOfCall*/ + false + ); + case 110 /* ThisKeyword */: + return visitThisKeyword(node); + case 237 /* MetaProperty */: + return visitMetaProperty(node); + case 175 /* MethodDeclaration */: + return visitMethodDeclaration(node); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return visitAccessorDeclaration(node); + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 254 /* ReturnStatement */: + return visitReturnStatement(node); + case 223 /* VoidExpression */: + return visitVoidExpression(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitSourceFile(node) { + const ancestorFacts = enterSubtree(8064 /* SourceFileExcludes */, 64 /* SourceFileIncludes */); + const prologue = []; + const statements = []; + startLexicalEnvironment(); + const statementOffset = factory2.copyPrologue( + node.statements, + prologue, + /*ensureUseStrict*/ + false, + visitor + ); + addRange(statements, visitNodes2(node.statements, visitor, isStatement, statementOffset)); + if (taggedTemplateStringDeclarations) { + statements.push( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList(taggedTemplateStringDeclarations) + ) + ); + } + factory2.mergeLexicalEnvironment(prologue, endLexicalEnvironment()); + insertCaptureThisForNodeIfNeeded(prologue, node); + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return factory2.updateSourceFile( + node, + setTextRange(factory2.createNodeArray(concatenate(prologue, statements)), node.statements) + ); + } + function visitSwitchStatement(node) { + if (convertedLoopState !== void 0) { + const savedAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; + convertedLoopState.allowedNonLabeledJumps |= 2 /* Break */; + const result = visitEachChild(node, visitor, context); + convertedLoopState.allowedNonLabeledJumps = savedAllowedNonLabeledJumps; + return result; + } + return visitEachChild(node, visitor, context); + } + function visitCaseBlock(node) { + const ancestorFacts = enterSubtree(7104 /* BlockScopeExcludes */, 0 /* BlockScopeIncludes */); + const updated = visitEachChild(node, visitor, context); + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return updated; + } + function returnCapturedThis(node) { + return setOriginalNode(factory2.createReturnStatement(createCapturedThis()), node); + } + function createCapturedThis() { + return factory2.createUniqueName("_this", 16 /* Optimistic */ | 32 /* FileLevel */); + } + function visitReturnStatement(node) { + if (convertedLoopState) { + convertedLoopState.nonLocalJumps |= 8 /* Return */; + if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) { + node = returnCapturedThis(node); + } + return factory2.createReturnStatement( + factory2.createObjectLiteralExpression( + [ + factory2.createPropertyAssignment( + factory2.createIdentifier("value"), + node.expression ? Debug.checkDefined(visitNode(node.expression, visitor, isExpression)) : factory2.createVoidZero() + ) + ] + ) + ); + } else if (isReturnVoidStatementInConstructorWithCapturedSuper(node)) { + return returnCapturedThis(node); + } + return visitEachChild(node, visitor, context); + } + function visitThisKeyword(node) { + hierarchyFacts |= 65536 /* LexicalThis */; + if (hierarchyFacts & 2 /* ArrowFunction */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) { + hierarchyFacts |= 131072 /* CapturedLexicalThis */; + } + if (convertedLoopState) { + if (hierarchyFacts & 2 /* ArrowFunction */) { + convertedLoopState.containsLexicalThis = true; + return node; + } + return convertedLoopState.thisName || (convertedLoopState.thisName = factory2.createUniqueName("this")); + } + return node; + } + function visitVoidExpression(node) { + return visitEachChild(node, visitorWithUnusedExpressionResult, context); + } + function visitIdentifier(node) { + if (convertedLoopState) { + if (resolver.isArgumentsLocalBinding(node)) { + return convertedLoopState.argumentsName || (convertedLoopState.argumentsName = factory2.createUniqueName("arguments")); + } + } + if (node.flags & 256 /* IdentifierHasExtendedUnicodeEscape */) { + return setOriginalNode( + setTextRange( + factory2.createIdentifier(unescapeLeadingUnderscores(node.escapedText)), + node + ), + node + ); + } + return node; + } + function visitBreakOrContinueStatement(node) { + if (convertedLoopState) { + const jump = node.kind === 253 /* BreakStatement */ ? 2 /* Break */ : 4 /* Continue */; + const canUseBreakOrContinue = node.label && convertedLoopState.labels && convertedLoopState.labels.get(idText(node.label)) || !node.label && convertedLoopState.allowedNonLabeledJumps & jump; + if (!canUseBreakOrContinue) { + let labelMarker; + const label = node.label; + if (!label) { + if (node.kind === 253 /* BreakStatement */) { + convertedLoopState.nonLocalJumps |= 2 /* Break */; + labelMarker = "break"; + } else { + convertedLoopState.nonLocalJumps |= 4 /* Continue */; + labelMarker = "continue"; + } + } else { + if (node.kind === 253 /* BreakStatement */) { + labelMarker = `break-${label.escapedText}`; + setLabeledJump( + convertedLoopState, + /*isBreak*/ + true, + idText(label), + labelMarker + ); + } else { + labelMarker = `continue-${label.escapedText}`; + setLabeledJump( + convertedLoopState, + /*isBreak*/ + false, + idText(label), + labelMarker + ); + } + } + let returnExpression = factory2.createStringLiteral(labelMarker); + if (convertedLoopState.loopOutParameters.length) { + const outParams = convertedLoopState.loopOutParameters; + let expr; + for (let i = 0; i < outParams.length; i++) { + const copyExpr = copyOutParameter(outParams[i], 1 /* ToOutParameter */); + if (i === 0) { + expr = copyExpr; + } else { + expr = factory2.createBinaryExpression(expr, 28 /* CommaToken */, copyExpr); + } + } + returnExpression = factory2.createBinaryExpression(expr, 28 /* CommaToken */, returnExpression); + } + return factory2.createReturnStatement(returnExpression); + } + } + return visitEachChild(node, visitor, context); + } + function visitClassDeclaration(node) { + const variable = factory2.createVariableDeclaration( + factory2.getLocalName( + node, + /*allowComments*/ + true + ), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + transformClassLikeDeclarationToExpression(node) + ); + setOriginalNode(variable, node); + const statements = []; + const statement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([variable]) + ); + setOriginalNode(statement, node); + setTextRange(statement, node); + startOnNewLine(statement); + statements.push(statement); + if (hasSyntacticModifier(node, 32 /* Export */)) { + const exportStatement = hasSyntacticModifier(node, 2048 /* Default */) ? factory2.createExportDefault(factory2.getLocalName(node)) : factory2.createExternalModuleExport(factory2.getLocalName(node)); + setOriginalNode(exportStatement, statement); + statements.push(exportStatement); + } + return singleOrMany(statements); + } + function visitClassExpression(node) { + return transformClassLikeDeclarationToExpression(node); + } + function transformClassLikeDeclarationToExpression(node) { + if (node.name) { + enableSubstitutionsForBlockScopedBindings(); + } + const extendsClauseElement = getClassExtendsHeritageElement(node); + const classFunction = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + extendsClauseElement ? [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + createSyntheticSuper() + )] : [], + /*type*/ + void 0, + transformClassBody(node, extendsClauseElement) + ); + setEmitFlags(classFunction, getEmitFlags(node) & 131072 /* Indented */ | 1048576 /* ReuseTempVariableScope */); + const inner = factory2.createPartiallyEmittedExpression(classFunction); + setTextRangeEnd(inner, node.end); + setEmitFlags(inner, 3072 /* NoComments */); + const outer = factory2.createPartiallyEmittedExpression(inner); + setTextRangeEnd(outer, skipTrivia(currentText, node.pos)); + setEmitFlags(outer, 3072 /* NoComments */); + const result = factory2.createParenthesizedExpression( + factory2.createCallExpression( + outer, + /*typeArguments*/ + void 0, + extendsClauseElement ? [Debug.checkDefined(visitNode(extendsClauseElement.expression, visitor, isExpression))] : [] + ) + ); + addSyntheticLeadingComment(result, 3 /* MultiLineCommentTrivia */, "* @class "); + return result; + } + function transformClassBody(node, extendsClauseElement) { + const statements = []; + const name = factory2.getInternalName(node); + const constructorLikeName = isIdentifierANonContextualKeyword(name) ? factory2.getGeneratedNameForNode(name) : name; + startLexicalEnvironment(); + addExtendsHelperIfNeeded(statements, node, extendsClauseElement); + addConstructor(statements, node, constructorLikeName, extendsClauseElement); + addClassMembers(statements, node); + const closingBraceLocation = createTokenRange(skipTrivia(currentText, node.members.end), 20 /* CloseBraceToken */); + const outer = factory2.createPartiallyEmittedExpression(constructorLikeName); + setTextRangeEnd(outer, closingBraceLocation.end); + setEmitFlags(outer, 3072 /* NoComments */); + const statement = factory2.createReturnStatement(outer); + setTextRangePos(statement, closingBraceLocation.pos); + setEmitFlags(statement, 3072 /* NoComments */ | 768 /* NoTokenSourceMaps */); + statements.push(statement); + insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment()); + const block = factory2.createBlock( + setTextRange( + factory2.createNodeArray(statements), + /*location*/ + node.members + ), + /*multiLine*/ + true + ); + setEmitFlags(block, 3072 /* NoComments */); + return block; + } + function addExtendsHelperIfNeeded(statements, node, extendsClauseElement) { + if (extendsClauseElement) { + statements.push( + setTextRange( + factory2.createExpressionStatement( + emitHelpers().createExtendsHelper(factory2.getInternalName(node)) + ), + /*location*/ + extendsClauseElement + ) + ); + } + } + function addConstructor(statements, node, name, extendsClauseElement) { + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const ancestorFacts = enterSubtree(32662 /* ConstructorExcludes */, 73 /* ConstructorIncludes */); + const constructor = getFirstConstructorWithBody(node); + const hasSynthesizedSuper = hasSynthesizedDefaultSuperCall(constructor, extendsClauseElement !== void 0); + const constructorFunction = factory2.createFunctionDeclaration( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + name, + /*typeParameters*/ + void 0, + transformConstructorParameters(constructor, hasSynthesizedSuper), + /*type*/ + void 0, + transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) + ); + setTextRange(constructorFunction, constructor || node); + if (extendsClauseElement) { + setEmitFlags(constructorFunction, 16 /* CapturesThis */); + } + statements.push(constructorFunction); + exitSubtree(ancestorFacts, 229376 /* FunctionSubtreeExcludes */, 0 /* None */); + convertedLoopState = savedConvertedLoopState; + } + function transformConstructorParameters(constructor, hasSynthesizedSuper) { + return visitParameterList(constructor && !hasSynthesizedSuper ? constructor.parameters : void 0, visitor, context) || []; + } + function createDefaultConstructorBody(node, isDerivedClass) { + const statements = []; + resumeLexicalEnvironment(); + factory2.mergeLexicalEnvironment(statements, endLexicalEnvironment()); + if (isDerivedClass) { + statements.push(factory2.createReturnStatement(createDefaultSuperCallOrThis())); + } + const statementsArray = factory2.createNodeArray(statements); + setTextRange(statementsArray, node.members); + const block = factory2.createBlock( + statementsArray, + /*multiLine*/ + true + ); + setTextRange(block, node); + setEmitFlags(block, 3072 /* NoComments */); + return block; + } + function isUninitializedVariableStatement(node) { + return isVariableStatement(node) && every(node.declarationList.declarations, (decl) => isIdentifier(decl.name) && !decl.initializer); + } + function containsSuperCall(node) { + if (isSuperCall(node)) { + return true; + } + if (!(node.transformFlags & 134217728 /* ContainsLexicalSuper */)) { + return false; + } + switch (node.kind) { + // stop at function boundaries + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 177 /* Constructor */: + case 176 /* ClassStaticBlockDeclaration */: + return false; + // only step into computed property names for class and object literal elements + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + case 173 /* PropertyDeclaration */: { + const named = node; + if (isComputedPropertyName(named.name)) { + return !!forEachChild(named.name, containsSuperCall); + } + return false; + } + } + return !!forEachChild(node, containsSuperCall); + } + function transformConstructorBody(constructor, node, extendsClauseElement, hasSynthesizedSuper) { + const isDerivedClass = !!extendsClauseElement && skipOuterExpressions(extendsClauseElement.expression).kind !== 106 /* NullKeyword */; + if (!constructor) return createDefaultConstructorBody(node, isDerivedClass); + const prologue = []; + const statements = []; + resumeLexicalEnvironment(); + const standardPrologueEnd = factory2.copyStandardPrologue( + constructor.body.statements, + prologue, + /*statementOffset*/ + 0 + ); + if (hasSynthesizedSuper || containsSuperCall(constructor.body)) { + hierarchyFacts |= 8192 /* ConstructorWithSuperCall */; + } + addRange(statements, visitNodes2(constructor.body.statements, visitor, isStatement, standardPrologueEnd)); + const mayReplaceThis = isDerivedClass || hierarchyFacts & 8192 /* ConstructorWithSuperCall */; + addDefaultValueAssignmentsIfNeeded2(prologue, constructor); + addRestParameterIfNeeded(prologue, constructor, hasSynthesizedSuper); + insertCaptureNewTargetIfNeeded(prologue, constructor); + if (mayReplaceThis) { + insertCaptureThisForNode(prologue, constructor, createActualThis()); + } else { + insertCaptureThisForNodeIfNeeded(prologue, constructor); + } + factory2.mergeLexicalEnvironment(prologue, endLexicalEnvironment()); + if (mayReplaceThis && !isSufficientlyCoveredByReturnStatements(constructor.body)) { + statements.push(factory2.createReturnStatement(createCapturedThis())); + } + const body = factory2.createBlock( + setTextRange( + factory2.createNodeArray( + [ + ...prologue, + ...statements + ] + ), + /*location*/ + constructor.body.statements + ), + /*multiLine*/ + true + ); + setTextRange(body, constructor.body); + return simplifyConstructor(body, constructor.body, hasSynthesizedSuper); + } + function isCapturedThis(node) { + return isGeneratedIdentifier(node) && idText(node) === "_this"; + } + function isSyntheticSuper(node) { + return isGeneratedIdentifier(node) && idText(node) === "_super"; + } + function isThisCapturingVariableStatement(node) { + return isVariableStatement(node) && node.declarationList.declarations.length === 1 && isThisCapturingVariableDeclaration(node.declarationList.declarations[0]); + } + function isThisCapturingVariableDeclaration(node) { + return isVariableDeclaration(node) && isCapturedThis(node.name) && !!node.initializer; + } + function isThisCapturingAssignment(node) { + return isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + ) && isCapturedThis(node.left); + } + function isTransformedSuperCall(node) { + return isCallExpression(node) && isPropertyAccessExpression(node.expression) && isSyntheticSuper(node.expression.expression) && isIdentifier(node.expression.name) && (idText(node.expression.name) === "call" || idText(node.expression.name) === "apply") && node.arguments.length >= 1 && node.arguments[0].kind === 110 /* ThisKeyword */; + } + function isTransformedSuperCallWithFallback(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 57 /* BarBarToken */ && node.right.kind === 110 /* ThisKeyword */ && isTransformedSuperCall(node.left); + } + function isImplicitSuperCall(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 56 /* AmpersandAmpersandToken */ && isBinaryExpression(node.left) && node.left.operatorToken.kind === 38 /* ExclamationEqualsEqualsToken */ && isSyntheticSuper(node.left.left) && node.left.right.kind === 106 /* NullKeyword */ && isTransformedSuperCall(node.right) && idText(node.right.expression.name) === "apply"; + } + function isImplicitSuperCallWithFallback(node) { + return isBinaryExpression(node) && node.operatorToken.kind === 57 /* BarBarToken */ && node.right.kind === 110 /* ThisKeyword */ && isImplicitSuperCall(node.left); + } + function isThisCapturingTransformedSuperCallWithFallback(node) { + return isThisCapturingAssignment(node) && isTransformedSuperCallWithFallback(node.right); + } + function isThisCapturingImplicitSuperCallWithFallback(node) { + return isThisCapturingAssignment(node) && isImplicitSuperCallWithFallback(node.right); + } + function isTransformedSuperCallLike(node) { + return isTransformedSuperCall(node) || isTransformedSuperCallWithFallback(node) || isThisCapturingTransformedSuperCallWithFallback(node) || isImplicitSuperCall(node) || isImplicitSuperCallWithFallback(node) || isThisCapturingImplicitSuperCallWithFallback(node); + } + function simplifyConstructorInlineSuperInThisCaptureVariable(body) { + for (let i = 0; i < body.statements.length - 1; i++) { + const statement = body.statements[i]; + if (!isThisCapturingVariableStatement(statement)) { + continue; + } + const varDecl = statement.declarationList.declarations[0]; + if (varDecl.initializer.kind !== 110 /* ThisKeyword */) { + continue; + } + const thisCaptureStatementIndex = i; + let superCallIndex = i + 1; + while (superCallIndex < body.statements.length) { + const statement2 = body.statements[superCallIndex]; + if (isExpressionStatement(statement2)) { + if (isTransformedSuperCallLike(skipOuterExpressions(statement2.expression))) { + break; + } + } + if (isUninitializedVariableStatement(statement2)) { + superCallIndex++; + continue; + } + return body; + } + const following = body.statements[superCallIndex]; + let expression = following.expression; + if (isThisCapturingAssignment(expression)) { + expression = expression.right; + } + const newVarDecl = factory2.updateVariableDeclaration( + varDecl, + varDecl.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + expression + ); + const newDeclList = factory2.updateVariableDeclarationList(statement.declarationList, [newVarDecl]); + const newVarStatement = factory2.createVariableStatement(statement.modifiers, newDeclList); + setOriginalNode(newVarStatement, following); + setTextRange(newVarStatement, following); + const newStatements = factory2.createNodeArray([ + ...body.statements.slice(0, thisCaptureStatementIndex), + // copy statements preceding to `var _this` + ...body.statements.slice(thisCaptureStatementIndex + 1, superCallIndex), + // copy intervening temp variables + newVarStatement, + ...body.statements.slice(superCallIndex + 1) + // copy statements following `super.call(this, ...)` + ]); + setTextRange(newStatements, body.statements); + return factory2.updateBlock(body, newStatements); + } + return body; + } + function simplifyConstructorInlineSuperReturn(body, original) { + for (const statement of original.statements) { + if (statement.transformFlags & 134217728 /* ContainsLexicalSuper */ && !getSuperCallFromStatement(statement)) { + return body; + } + } + const canElideThisCapturingVariable = !(original.transformFlags & 16384 /* ContainsLexicalThis */) && !(hierarchyFacts & 65536 /* LexicalThis */) && !(hierarchyFacts & 131072 /* CapturedLexicalThis */); + for (let i = body.statements.length - 1; i > 0; i--) { + const statement = body.statements[i]; + if (isReturnStatement(statement) && statement.expression && isCapturedThis(statement.expression)) { + const preceding = body.statements[i - 1]; + let expression; + if (isExpressionStatement(preceding) && isThisCapturingTransformedSuperCallWithFallback(skipOuterExpressions(preceding.expression))) { + expression = preceding.expression; + } else if (canElideThisCapturingVariable && isThisCapturingVariableStatement(preceding)) { + const varDecl = preceding.declarationList.declarations[0]; + if (isTransformedSuperCallLike(skipOuterExpressions(varDecl.initializer))) { + expression = factory2.createAssignment( + createCapturedThis(), + varDecl.initializer + ); + } + } + if (!expression) { + break; + } + const newReturnStatement = factory2.createReturnStatement(expression); + setOriginalNode(newReturnStatement, preceding); + setTextRange(newReturnStatement, preceding); + const newStatements = factory2.createNodeArray([ + ...body.statements.slice(0, i - 1), + // copy all statements preceding `_super.call(this, ...)` + newReturnStatement, + ...body.statements.slice(i + 1) + // copy all statements following `return _this;` + ]); + setTextRange(newStatements, body.statements); + return factory2.updateBlock(body, newStatements); + } + } + return body; + } + function elideUnusedThisCaptureWorker(node) { + if (isThisCapturingVariableStatement(node)) { + const varDecl = node.declarationList.declarations[0]; + if (varDecl.initializer.kind === 110 /* ThisKeyword */) { + return void 0; + } + } else if (isThisCapturingAssignment(node)) { + return factory2.createPartiallyEmittedExpression(node.right, node); + } + switch (node.kind) { + // stop at function boundaries + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 177 /* Constructor */: + case 176 /* ClassStaticBlockDeclaration */: + return node; + // only step into computed property names for class and object literal elements + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + case 173 /* PropertyDeclaration */: { + const named = node; + if (isComputedPropertyName(named.name)) { + return factory2.replacePropertyName(named, visitEachChild( + named.name, + elideUnusedThisCaptureWorker, + /*context*/ + void 0 + )); + } + return node; + } + } + return visitEachChild( + node, + elideUnusedThisCaptureWorker, + /*context*/ + void 0 + ); + } + function simplifyConstructorElideUnusedThisCapture(body, original) { + if (original.transformFlags & 16384 /* ContainsLexicalThis */ || hierarchyFacts & 65536 /* LexicalThis */ || hierarchyFacts & 131072 /* CapturedLexicalThis */) { + return body; + } + for (const statement of original.statements) { + if (statement.transformFlags & 134217728 /* ContainsLexicalSuper */ && !getSuperCallFromStatement(statement)) { + return body; + } + } + return factory2.updateBlock(body, visitNodes2(body.statements, elideUnusedThisCaptureWorker, isStatement)); + } + function injectSuperPresenceCheckWorker(node) { + if (isTransformedSuperCall(node) && node.arguments.length === 2 && isIdentifier(node.arguments[1]) && idText(node.arguments[1]) === "arguments") { + return factory2.createLogicalAnd( + factory2.createStrictInequality( + createSyntheticSuper(), + factory2.createNull() + ), + node + ); + } + switch (node.kind) { + // stop at function boundaries + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 177 /* Constructor */: + case 176 /* ClassStaticBlockDeclaration */: + return node; + // only step into computed property names for class and object literal elements + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + case 173 /* PropertyDeclaration */: { + const named = node; + if (isComputedPropertyName(named.name)) { + return factory2.replacePropertyName(named, visitEachChild( + named.name, + injectSuperPresenceCheckWorker, + /*context*/ + void 0 + )); + } + return node; + } + } + return visitEachChild( + node, + injectSuperPresenceCheckWorker, + /*context*/ + void 0 + ); + } + function complicateConstructorInjectSuperPresenceCheck(body) { + return factory2.updateBlock(body, visitNodes2(body.statements, injectSuperPresenceCheckWorker, isStatement)); + } + function simplifyConstructor(body, original, hasSynthesizedSuper) { + const inputBody = body; + body = simplifyConstructorInlineSuperInThisCaptureVariable(body); + body = simplifyConstructorInlineSuperReturn(body, original); + if (body !== inputBody) { + body = simplifyConstructorElideUnusedThisCapture(body, original); + } + if (hasSynthesizedSuper) { + body = complicateConstructorInjectSuperPresenceCheck(body); + } + return body; + } + function isSufficientlyCoveredByReturnStatements(statement) { + if (statement.kind === 254 /* ReturnStatement */) { + return true; + } else if (statement.kind === 246 /* IfStatement */) { + const ifStatement = statement; + if (ifStatement.elseStatement) { + return isSufficientlyCoveredByReturnStatements(ifStatement.thenStatement) && isSufficientlyCoveredByReturnStatements(ifStatement.elseStatement); + } + } else if (statement.kind === 242 /* Block */) { + const lastStatement = lastOrUndefined(statement.statements); + if (lastStatement && isSufficientlyCoveredByReturnStatements(lastStatement)) { + return true; + } + } + return false; + } + function createActualThis() { + return setEmitFlags(factory2.createThis(), 8 /* NoSubstitution */); + } + function createDefaultSuperCallOrThis() { + return factory2.createLogicalOr( + factory2.createLogicalAnd( + factory2.createStrictInequality( + createSyntheticSuper(), + factory2.createNull() + ), + factory2.createFunctionApplyCall( + createSyntheticSuper(), + createActualThis(), + factory2.createIdentifier("arguments") + ) + ), + createActualThis() + ); + } + function visitParameter(node) { + if (node.dotDotDotToken) { + return void 0; + } else if (isBindingPattern(node.name)) { + return setOriginalNode( + setTextRange( + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory2.getGeneratedNameForNode(node), + /*questionToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ), + /*location*/ + node + ), + /*original*/ + node + ); + } else if (node.initializer) { + return setOriginalNode( + setTextRange( + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + node.name, + /*questionToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ), + /*location*/ + node + ), + /*original*/ + node + ); + } else { + return node; + } + } + function hasDefaultValueOrBindingPattern(node) { + return node.initializer !== void 0 || isBindingPattern(node.name); + } + function addDefaultValueAssignmentsIfNeeded2(statements, node) { + if (!some(node.parameters, hasDefaultValueOrBindingPattern)) { + return false; + } + let added = false; + for (const parameter of node.parameters) { + const { name, initializer, dotDotDotToken } = parameter; + if (dotDotDotToken) { + continue; + } + if (isBindingPattern(name)) { + added = insertDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) || added; + } else if (initializer) { + insertDefaultValueAssignmentForInitializer(statements, parameter, name, initializer); + added = true; + } + } + return added; + } + function insertDefaultValueAssignmentForBindingPattern(statements, parameter, name, initializer) { + if (name.elements.length > 0) { + insertStatementAfterCustomPrologue( + statements, + setEmitFlags( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + flattenDestructuringBinding( + parameter, + visitor, + context, + 0 /* All */, + factory2.getGeneratedNameForNode(parameter) + ) + ) + ), + 2097152 /* CustomPrologue */ + ) + ); + return true; + } else if (initializer) { + insertStatementAfterCustomPrologue( + statements, + setEmitFlags( + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.getGeneratedNameForNode(parameter), + Debug.checkDefined(visitNode(initializer, visitor, isExpression)) + ) + ), + 2097152 /* CustomPrologue */ + ) + ); + return true; + } + return false; + } + function insertDefaultValueAssignmentForInitializer(statements, parameter, name, initializer) { + initializer = Debug.checkDefined(visitNode(initializer, visitor, isExpression)); + const statement = factory2.createIfStatement( + factory2.createTypeCheck(factory2.cloneNode(name), "undefined"), + setEmitFlags( + setTextRange( + factory2.createBlock([ + factory2.createExpressionStatement( + setEmitFlags( + setTextRange( + factory2.createAssignment( + // TODO(rbuckton): Does this need to be parented? + setEmitFlags(setParent(setTextRange(factory2.cloneNode(name), name), name.parent), 96 /* NoSourceMap */), + setEmitFlags(initializer, 96 /* NoSourceMap */ | getEmitFlags(initializer) | 3072 /* NoComments */) + ), + parameter + ), + 3072 /* NoComments */ + ) + ) + ]), + parameter + ), + 1 /* SingleLine */ | 64 /* NoTrailingSourceMap */ | 768 /* NoTokenSourceMaps */ | 3072 /* NoComments */ + ) + ); + startOnNewLine(statement); + setTextRange(statement, parameter); + setEmitFlags(statement, 768 /* NoTokenSourceMaps */ | 64 /* NoTrailingSourceMap */ | 2097152 /* CustomPrologue */ | 3072 /* NoComments */); + insertStatementAfterCustomPrologue(statements, statement); + } + function shouldAddRestParameter(node, inConstructorWithSynthesizedSuper) { + return !!(node && node.dotDotDotToken && !inConstructorWithSynthesizedSuper); + } + function addRestParameterIfNeeded(statements, node, inConstructorWithSynthesizedSuper) { + const prologueStatements = []; + const parameter = lastOrUndefined(node.parameters); + if (!shouldAddRestParameter(parameter, inConstructorWithSynthesizedSuper)) { + return false; + } + const declarationName = parameter.name.kind === 80 /* Identifier */ ? setParent(setTextRange(factory2.cloneNode(parameter.name), parameter.name), parameter.name.parent) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + setEmitFlags(declarationName, 96 /* NoSourceMap */); + const expressionName = parameter.name.kind === 80 /* Identifier */ ? factory2.cloneNode(parameter.name) : declarationName; + const restIndex = node.parameters.length - 1; + const temp = factory2.createLoopVariable(); + prologueStatements.push( + setEmitFlags( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + declarationName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createArrayLiteralExpression([]) + ) + ]) + ), + /*location*/ + parameter + ), + 2097152 /* CustomPrologue */ + ) + ); + const forStatement = factory2.createForStatement( + setTextRange( + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + temp, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createNumericLiteral(restIndex) + ) + ]), + parameter + ), + setTextRange( + factory2.createLessThan( + temp, + factory2.createPropertyAccessExpression(factory2.createIdentifier("arguments"), "length") + ), + parameter + ), + setTextRange(factory2.createPostfixIncrement(temp), parameter), + factory2.createBlock([ + startOnNewLine( + setTextRange( + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createElementAccessExpression( + expressionName, + restIndex === 0 ? temp : factory2.createSubtract(temp, factory2.createNumericLiteral(restIndex)) + ), + factory2.createElementAccessExpression(factory2.createIdentifier("arguments"), temp) + ) + ), + /*location*/ + parameter + ) + ) + ]) + ); + setEmitFlags(forStatement, 2097152 /* CustomPrologue */); + startOnNewLine(forStatement); + prologueStatements.push(forStatement); + if (parameter.name.kind !== 80 /* Identifier */) { + prologueStatements.push( + setEmitFlags( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + flattenDestructuringBinding(parameter, visitor, context, 0 /* All */, expressionName) + ) + ), + parameter + ), + 2097152 /* CustomPrologue */ + ) + ); + } + insertStatementsAfterCustomPrologue(statements, prologueStatements); + return true; + } + function insertCaptureThisForNodeIfNeeded(statements, node) { + if (hierarchyFacts & 131072 /* CapturedLexicalThis */ && node.kind !== 220 /* ArrowFunction */) { + insertCaptureThisForNode(statements, node, factory2.createThis()); + return true; + } + return false; + } + function insertCaptureThisForNode(statements, node, initializer) { + enableSubstitutionsForCapturedThis(); + const captureThisStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + createCapturedThis(), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ) + ]) + ); + setEmitFlags(captureThisStatement, 3072 /* NoComments */ | 2097152 /* CustomPrologue */); + setSourceMapRange(captureThisStatement, node); + insertStatementAfterCustomPrologue(statements, captureThisStatement); + } + function insertCaptureNewTargetIfNeeded(statements, node) { + if (hierarchyFacts & 32768 /* NewTarget */) { + let newTarget; + switch (node.kind) { + case 220 /* ArrowFunction */: + return statements; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + newTarget = factory2.createVoidZero(); + break; + case 177 /* Constructor */: + newTarget = factory2.createPropertyAccessExpression( + setEmitFlags(factory2.createThis(), 8 /* NoSubstitution */), + "constructor" + ); + break; + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + newTarget = factory2.createConditionalExpression( + factory2.createLogicalAnd( + setEmitFlags(factory2.createThis(), 8 /* NoSubstitution */), + factory2.createBinaryExpression( + setEmitFlags(factory2.createThis(), 8 /* NoSubstitution */), + 104 /* InstanceOfKeyword */, + factory2.getLocalName(node) + ) + ), + /*questionToken*/ + void 0, + factory2.createPropertyAccessExpression( + setEmitFlags(factory2.createThis(), 8 /* NoSubstitution */), + "constructor" + ), + /*colonToken*/ + void 0, + factory2.createVoidZero() + ); + break; + default: + return Debug.failBadSyntaxKind(node); + } + const captureNewTargetStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + factory2.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + newTarget + ) + ]) + ); + setEmitFlags(captureNewTargetStatement, 3072 /* NoComments */ | 2097152 /* CustomPrologue */); + insertStatementAfterCustomPrologue(statements, captureNewTargetStatement); + } + return statements; + } + function addClassMembers(statements, node) { + for (const member of node.members) { + switch (member.kind) { + case 241 /* SemicolonClassElement */: + statements.push(transformSemicolonClassElementToStatement(member)); + break; + case 175 /* MethodDeclaration */: + statements.push(transformClassMethodDeclarationToStatement(getClassMemberPrefix(node, member), member, node)); + break; + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + const accessors = getAllAccessorDeclarations(node.members, member); + if (member === accessors.firstAccessor) { + statements.push(transformAccessorsToStatement(getClassMemberPrefix(node, member), accessors, node)); + } + break; + case 177 /* Constructor */: + case 176 /* ClassStaticBlockDeclaration */: + break; + default: + Debug.failBadSyntaxKind(member, currentSourceFile && currentSourceFile.fileName); + break; + } + } + } + function transformSemicolonClassElementToStatement(member) { + return setTextRange(factory2.createEmptyStatement(), member); + } + function transformClassMethodDeclarationToStatement(receiver, member, container) { + const commentRange = getCommentRange(member); + const sourceMapRange = getSourceMapRange(member); + const memberFunction = transformFunctionLikeToExpression( + member, + /*location*/ + member, + /*name*/ + void 0, + container + ); + const propertyName = visitNode(member.name, visitor, isPropertyName); + Debug.assert(propertyName); + let e; + if (!isPrivateIdentifier(propertyName) && getUseDefineForClassFields(context.getCompilerOptions())) { + const name = isComputedPropertyName(propertyName) ? propertyName.expression : isIdentifier(propertyName) ? factory2.createStringLiteral(unescapeLeadingUnderscores(propertyName.escapedText)) : propertyName; + e = factory2.createObjectDefinePropertyCall(receiver, name, factory2.createPropertyDescriptor({ value: memberFunction, enumerable: false, writable: true, configurable: true })); + } else { + const memberName = createMemberAccessForPropertyName( + factory2, + receiver, + propertyName, + /*location*/ + member.name + ); + e = factory2.createAssignment(memberName, memberFunction); + } + setEmitFlags(memberFunction, 3072 /* NoComments */); + setSourceMapRange(memberFunction, sourceMapRange); + const statement = setTextRange( + factory2.createExpressionStatement(e), + /*location*/ + member + ); + setOriginalNode(statement, member); + setCommentRange(statement, commentRange); + setEmitFlags(statement, 96 /* NoSourceMap */); + return statement; + } + function transformAccessorsToStatement(receiver, accessors, container) { + const statement = factory2.createExpressionStatement(transformAccessorsToExpression( + receiver, + accessors, + container, + /*startsOnNewLine*/ + false + )); + setEmitFlags(statement, 3072 /* NoComments */); + setSourceMapRange(statement, getSourceMapRange(accessors.firstAccessor)); + return statement; + } + function transformAccessorsToExpression(receiver, { firstAccessor, getAccessor, setAccessor }, container, startsOnNewLine) { + const target = setParent(setTextRange(factory2.cloneNode(receiver), receiver), receiver.parent); + setEmitFlags(target, 3072 /* NoComments */ | 64 /* NoTrailingSourceMap */); + setSourceMapRange(target, firstAccessor.name); + const visitedAccessorName = visitNode(firstAccessor.name, visitor, isPropertyName); + Debug.assert(visitedAccessorName); + if (isPrivateIdentifier(visitedAccessorName)) { + return Debug.failBadSyntaxKind(visitedAccessorName, "Encountered unhandled private identifier while transforming ES2015."); + } + const propertyName = createExpressionForPropertyName(factory2, visitedAccessorName); + setEmitFlags(propertyName, 3072 /* NoComments */ | 32 /* NoLeadingSourceMap */); + setSourceMapRange(propertyName, firstAccessor.name); + const properties = []; + if (getAccessor) { + const getterFunction = transformFunctionLikeToExpression( + getAccessor, + /*location*/ + void 0, + /*name*/ + void 0, + container + ); + setSourceMapRange(getterFunction, getSourceMapRange(getAccessor)); + setEmitFlags(getterFunction, 1024 /* NoLeadingComments */); + const getter = factory2.createPropertyAssignment("get", getterFunction); + setCommentRange(getter, getCommentRange(getAccessor)); + properties.push(getter); + } + if (setAccessor) { + const setterFunction = transformFunctionLikeToExpression( + setAccessor, + /*location*/ + void 0, + /*name*/ + void 0, + container + ); + setSourceMapRange(setterFunction, getSourceMapRange(setAccessor)); + setEmitFlags(setterFunction, 1024 /* NoLeadingComments */); + const setter = factory2.createPropertyAssignment("set", setterFunction); + setCommentRange(setter, getCommentRange(setAccessor)); + properties.push(setter); + } + properties.push( + factory2.createPropertyAssignment("enumerable", getAccessor || setAccessor ? factory2.createFalse() : factory2.createTrue()), + factory2.createPropertyAssignment("configurable", factory2.createTrue()) + ); + const call = factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createIdentifier("Object"), "defineProperty"), + /*typeArguments*/ + void 0, + [ + target, + propertyName, + factory2.createObjectLiteralExpression( + properties, + /*multiLine*/ + true + ) + ] + ); + if (startsOnNewLine) { + startOnNewLine(call); + } + return call; + } + function visitArrowFunction(node) { + if (node.transformFlags & 16384 /* ContainsLexicalThis */ && !(hierarchyFacts & 16384 /* StaticInitializer */)) { + hierarchyFacts |= 131072 /* CapturedLexicalThis */; + } + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const ancestorFacts = enterSubtree(15232 /* ArrowFunctionExcludes */, 66 /* ArrowFunctionIncludes */); + const func = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + transformFunctionBody2(node) + ); + setTextRange(func, node); + setOriginalNode(func, node); + setEmitFlags(func, 16 /* CapturesThis */); + exitSubtree(ancestorFacts, 0 /* ArrowFunctionSubtreeExcludes */, 0 /* None */); + convertedLoopState = savedConvertedLoopState; + return func; + } + function visitFunctionExpression(node) { + const ancestorFacts = getEmitFlags(node) & 524288 /* AsyncFunctionBody */ ? enterSubtree(32662 /* AsyncFunctionBodyExcludes */, 69 /* AsyncFunctionBodyIncludes */) : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */); + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const parameters = visitParameterList(node.parameters, visitor, context); + const body = transformFunctionBody2(node); + const name = hierarchyFacts & 32768 /* NewTarget */ ? factory2.getLocalName(node) : node.name; + exitSubtree(ancestorFacts, 229376 /* FunctionSubtreeExcludes */, 0 /* None */); + convertedLoopState = savedConvertedLoopState; + return factory2.updateFunctionExpression( + node, + /*modifiers*/ + void 0, + node.asteriskToken, + name, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body + ); + } + function visitFunctionDeclaration(node) { + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */); + const parameters = visitParameterList(node.parameters, visitor, context); + const body = transformFunctionBody2(node); + const name = hierarchyFacts & 32768 /* NewTarget */ ? factory2.getLocalName(node) : node.name; + exitSubtree(ancestorFacts, 229376 /* FunctionSubtreeExcludes */, 0 /* None */); + convertedLoopState = savedConvertedLoopState; + return factory2.updateFunctionDeclaration( + node, + visitNodes2(node.modifiers, visitor, isModifier), + node.asteriskToken, + name, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body + ); + } + function transformFunctionLikeToExpression(node, location, name, container) { + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const ancestorFacts = container && isClassLike(container) && !isStatic(node) ? enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */ | 8 /* NonStaticClassElement */) : enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */); + const parameters = visitParameterList(node.parameters, visitor, context); + const body = transformFunctionBody2(node); + if (hierarchyFacts & 32768 /* NewTarget */ && !name && (node.kind === 263 /* FunctionDeclaration */ || node.kind === 219 /* FunctionExpression */)) { + name = factory2.getGeneratedNameForNode(node); + } + exitSubtree(ancestorFacts, 229376 /* FunctionSubtreeExcludes */, 0 /* None */); + convertedLoopState = savedConvertedLoopState; + return setOriginalNode( + setTextRange( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + node.asteriskToken, + name, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body + ), + location + ), + /*original*/ + node + ); + } + function transformFunctionBody2(node) { + let multiLine = false; + let singleLine = false; + let statementsLocation; + let closeBraceLocation; + const prologue = []; + const statements = []; + const body = node.body; + let statementOffset; + resumeLexicalEnvironment(); + if (isBlock(body)) { + statementOffset = factory2.copyStandardPrologue( + body.statements, + prologue, + 0, + /*ensureUseStrict*/ + false + ); + statementOffset = factory2.copyCustomPrologue(body.statements, statements, statementOffset, visitor, isHoistedFunction); + statementOffset = factory2.copyCustomPrologue(body.statements, statements, statementOffset, visitor, isHoistedVariableStatement); + } + multiLine = addDefaultValueAssignmentsIfNeeded2(statements, node) || multiLine; + multiLine = addRestParameterIfNeeded( + statements, + node, + /*inConstructorWithSynthesizedSuper*/ + false + ) || multiLine; + if (isBlock(body)) { + statementOffset = factory2.copyCustomPrologue(body.statements, statements, statementOffset, visitor); + statementsLocation = body.statements; + addRange(statements, visitNodes2(body.statements, visitor, isStatement, statementOffset)); + if (!multiLine && body.multiLine) { + multiLine = true; + } + } else { + Debug.assert(node.kind === 220 /* ArrowFunction */); + statementsLocation = moveRangeEnd(body, -1); + const equalsGreaterThanToken = node.equalsGreaterThanToken; + if (!nodeIsSynthesized(equalsGreaterThanToken) && !nodeIsSynthesized(body)) { + if (rangeEndIsOnSameLineAsRangeStart(equalsGreaterThanToken, body, currentSourceFile)) { + singleLine = true; + } else { + multiLine = true; + } + } + const expression = visitNode(body, visitor, isExpression); + const returnStatement = factory2.createReturnStatement(expression); + setTextRange(returnStatement, body); + moveSyntheticComments(returnStatement, body); + setEmitFlags(returnStatement, 768 /* NoTokenSourceMaps */ | 64 /* NoTrailingSourceMap */ | 2048 /* NoTrailingComments */); + statements.push(returnStatement); + closeBraceLocation = body; + } + factory2.mergeLexicalEnvironment(prologue, endLexicalEnvironment()); + insertCaptureNewTargetIfNeeded(prologue, node); + insertCaptureThisForNodeIfNeeded(prologue, node); + if (some(prologue)) { + multiLine = true; + } + statements.unshift(...prologue); + if (isBlock(body) && arrayIsEqualTo(statements, body.statements)) { + return body; + } + const block = factory2.createBlock(setTextRange(factory2.createNodeArray(statements), statementsLocation), multiLine); + setTextRange(block, node.body); + if (!multiLine && singleLine) { + setEmitFlags(block, 1 /* SingleLine */); + } + if (closeBraceLocation) { + setTokenSourceMapRange(block, 20 /* CloseBraceToken */, closeBraceLocation); + } + setOriginalNode(block, node.body); + return block; + } + function visitBlock(node, isFunctionBody2) { + if (isFunctionBody2) { + return visitEachChild(node, visitor, context); + } + const ancestorFacts = hierarchyFacts & 256 /* IterationStatement */ ? enterSubtree(7104 /* IterationStatementBlockExcludes */, 512 /* IterationStatementBlockIncludes */) : enterSubtree(6976 /* BlockExcludes */, 128 /* BlockIncludes */); + const updated = visitEachChild(node, visitor, context); + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return updated; + } + function visitExpressionStatement(node) { + return visitEachChild(node, visitorWithUnusedExpressionResult, context); + } + function visitParenthesizedExpression(node, expressionResultIsUnused2) { + return visitEachChild(node, expressionResultIsUnused2 ? visitorWithUnusedExpressionResult : visitor, context); + } + function visitBinaryExpression(node, expressionResultIsUnused2) { + if (isDestructuringAssignment(node)) { + return flattenDestructuringAssignment( + node, + visitor, + context, + 0 /* All */, + !expressionResultIsUnused2 + ); + } + if (node.operatorToken.kind === 28 /* CommaToken */) { + return factory2.updateBinaryExpression( + node, + Debug.checkDefined(visitNode(node.left, visitorWithUnusedExpressionResult, isExpression)), + node.operatorToken, + Debug.checkDefined(visitNode(node.right, expressionResultIsUnused2 ? visitorWithUnusedExpressionResult : visitor, isExpression)) + ); + } + return visitEachChild(node, visitor, context); + } + function visitCommaListExpression(node, expressionResultIsUnused2) { + if (expressionResultIsUnused2) { + return visitEachChild(node, visitorWithUnusedExpressionResult, context); + } + let result; + for (let i = 0; i < node.elements.length; i++) { + const element = node.elements[i]; + const visited = visitNode(element, i < node.elements.length - 1 ? visitorWithUnusedExpressionResult : visitor, isExpression); + if (result || visited !== element) { + result || (result = node.elements.slice(0, i)); + Debug.assert(visited); + result.push(visited); + } + } + const elements = result ? setTextRange(factory2.createNodeArray(result), node.elements) : node.elements; + return factory2.updateCommaListExpression(node, elements); + } + function isVariableStatementOfTypeScriptClassWrapper(node) { + return node.declarationList.declarations.length === 1 && !!node.declarationList.declarations[0].initializer && !!(getInternalEmitFlags(node.declarationList.declarations[0].initializer) & 1 /* TypeScriptClassWrapper */); + } + function visitVariableStatement(node) { + const ancestorFacts = enterSubtree(0 /* None */, hasSyntacticModifier(node, 32 /* Export */) ? 32 /* ExportedVariableStatement */ : 0 /* None */); + let updated; + if (convertedLoopState && (node.declarationList.flags & 7 /* BlockScoped */) === 0 && !isVariableStatementOfTypeScriptClassWrapper(node)) { + let assignments; + for (const decl of node.declarationList.declarations) { + hoistVariableDeclarationDeclaredInConvertedLoop(convertedLoopState, decl); + if (decl.initializer) { + let assignment; + if (isBindingPattern(decl.name)) { + assignment = flattenDestructuringAssignment( + decl, + visitor, + context, + 0 /* All */ + ); + } else { + assignment = factory2.createBinaryExpression(decl.name, 64 /* EqualsToken */, Debug.checkDefined(visitNode(decl.initializer, visitor, isExpression))); + setTextRange(assignment, decl); + } + assignments = append(assignments, assignment); + } + } + if (assignments) { + updated = setTextRange(factory2.createExpressionStatement(factory2.inlineExpressions(assignments)), node); + } else { + updated = void 0; + } + } else { + updated = visitEachChild(node, visitor, context); + } + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return updated; + } + function visitVariableDeclarationList(node) { + if (node.flags & 7 /* BlockScoped */ || node.transformFlags & 524288 /* ContainsBindingPattern */) { + if (node.flags & 7 /* BlockScoped */) { + enableSubstitutionsForBlockScopedBindings(); + } + const declarations = visitNodes2( + node.declarations, + node.flags & 1 /* Let */ ? visitVariableDeclarationInLetDeclarationList : visitVariableDeclaration, + isVariableDeclaration + ); + const declarationList = factory2.createVariableDeclarationList(declarations); + setOriginalNode(declarationList, node); + setTextRange(declarationList, node); + setCommentRange(declarationList, node); + if (node.transformFlags & 524288 /* ContainsBindingPattern */ && (isBindingPattern(node.declarations[0].name) || isBindingPattern(last(node.declarations).name))) { + setSourceMapRange(declarationList, getRangeUnion(declarations)); + } + return declarationList; + } + return visitEachChild(node, visitor, context); + } + function getRangeUnion(declarations) { + let pos = -1, end = -1; + for (const node of declarations) { + pos = pos === -1 ? node.pos : node.pos === -1 ? pos : Math.min(pos, node.pos); + end = Math.max(end, node.end); + } + return createRange(pos, end); + } + function shouldEmitExplicitInitializerForLetDeclaration(node) { + const isCapturedInFunction = resolver.hasNodeCheckFlag(node, 16384 /* CapturedBlockScopedBinding */); + const isDeclaredInLoop = resolver.hasNodeCheckFlag(node, 32768 /* BlockScopedBindingInLoop */); + const emittedAsTopLevel = (hierarchyFacts & 64 /* TopLevel */) !== 0 || isCapturedInFunction && isDeclaredInLoop && (hierarchyFacts & 512 /* IterationStatementBlock */) !== 0; + const emitExplicitInitializer = !emittedAsTopLevel && (hierarchyFacts & 4096 /* ForInOrForOfStatement */) === 0 && (!resolver.isDeclarationWithCollidingName(node) || isDeclaredInLoop && !isCapturedInFunction && (hierarchyFacts & (2048 /* ForStatement */ | 4096 /* ForInOrForOfStatement */)) === 0); + return emitExplicitInitializer; + } + function visitVariableDeclarationInLetDeclarationList(node) { + const name = node.name; + if (isBindingPattern(name)) { + return visitVariableDeclaration(node); + } + if (!node.initializer && shouldEmitExplicitInitializerForLetDeclaration(node)) { + return factory2.updateVariableDeclaration( + node, + node.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createVoidZero() + ); + } + return visitEachChild(node, visitor, context); + } + function visitVariableDeclaration(node) { + const ancestorFacts = enterSubtree(32 /* ExportedVariableStatement */, 0 /* None */); + let updated; + if (isBindingPattern(node.name)) { + updated = flattenDestructuringBinding( + node, + visitor, + context, + 0 /* All */, + /*rval*/ + void 0, + (ancestorFacts & 32 /* ExportedVariableStatement */) !== 0 + ); + } else { + updated = visitEachChild(node, visitor, context); + } + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return updated; + } + function recordLabel(node) { + convertedLoopState.labels.set(idText(node.label), true); + } + function resetLabel(node) { + convertedLoopState.labels.set(idText(node.label), false); + } + function visitLabeledStatement(node) { + if (convertedLoopState && !convertedLoopState.labels) { + convertedLoopState.labels = /* @__PURE__ */ new Map(); + } + const statement = unwrapInnermostStatementOfLabel(node, convertedLoopState && recordLabel); + return isIterationStatement( + statement, + /*lookInLabeledStatements*/ + false + ) ? visitIterationStatement( + statement, + /*outermostLabeledStatement*/ + node + ) : factory2.restoreEnclosingLabel(visitNode(statement, visitor, isStatement, factory2.liftToBlock) ?? setTextRange(factory2.createEmptyStatement(), statement), node, convertedLoopState && resetLabel); + } + function visitIterationStatement(node, outermostLabeledStatement) { + switch (node.kind) { + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + return visitDoOrWhileStatement(node, outermostLabeledStatement); + case 249 /* ForStatement */: + return visitForStatement(node, outermostLabeledStatement); + case 250 /* ForInStatement */: + return visitForInStatement(node, outermostLabeledStatement); + case 251 /* ForOfStatement */: + return visitForOfStatement(node, outermostLabeledStatement); + } + } + function visitIterationStatementWithFacts(excludeFacts, includeFacts, node, outermostLabeledStatement, convert) { + const ancestorFacts = enterSubtree(excludeFacts, includeFacts); + const updated = convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, ancestorFacts, convert); + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return updated; + } + function visitDoOrWhileStatement(node, outermostLabeledStatement) { + return visitIterationStatementWithFacts( + 0 /* DoOrWhileStatementExcludes */, + 1280 /* DoOrWhileStatementIncludes */, + node, + outermostLabeledStatement + ); + } + function visitForStatement(node, outermostLabeledStatement) { + return visitIterationStatementWithFacts( + 5056 /* ForStatementExcludes */, + 3328 /* ForStatementIncludes */, + node, + outermostLabeledStatement + ); + } + function visitEachChildOfForStatement2(node) { + return factory2.updateForStatement( + node, + visitNode(node.initializer, visitorWithUnusedExpressionResult, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, visitorWithUnusedExpressionResult, isExpression), + Debug.checkDefined(visitNode(node.statement, visitor, isStatement, factory2.liftToBlock)) + ); + } + function visitForInStatement(node, outermostLabeledStatement) { + return visitIterationStatementWithFacts( + 3008 /* ForInOrForOfStatementExcludes */, + 5376 /* ForInOrForOfStatementIncludes */, + node, + outermostLabeledStatement + ); + } + function visitForOfStatement(node, outermostLabeledStatement) { + return visitIterationStatementWithFacts( + 3008 /* ForInOrForOfStatementExcludes */, + 5376 /* ForInOrForOfStatementIncludes */, + node, + outermostLabeledStatement, + compilerOptions.downlevelIteration ? convertForOfStatementForIterable : convertForOfStatementForArray + ); + } + function convertForOfStatementHead(node, boundValue, convertedLoopBodyStatements) { + const statements = []; + const initializer = node.initializer; + if (isVariableDeclarationList(initializer)) { + if (node.initializer.flags & 7 /* BlockScoped */) { + enableSubstitutionsForBlockScopedBindings(); + } + const firstOriginalDeclaration = firstOrUndefined(initializer.declarations); + if (firstOriginalDeclaration && isBindingPattern(firstOriginalDeclaration.name)) { + const declarations = flattenDestructuringBinding( + firstOriginalDeclaration, + visitor, + context, + 0 /* All */, + boundValue + ); + const declarationList = setTextRange(factory2.createVariableDeclarationList(declarations), node.initializer); + setOriginalNode(declarationList, node.initializer); + setSourceMapRange(declarationList, createRange(declarations[0].pos, last(declarations).end)); + statements.push( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + declarationList + ) + ); + } else { + statements.push( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + setOriginalNode( + setTextRange( + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + firstOriginalDeclaration ? firstOriginalDeclaration.name : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + boundValue + ) + ]), + moveRangePos(initializer, -1) + ), + initializer + ) + ), + moveRangeEnd(initializer, -1) + ) + ); + } + } else { + const assignment = factory2.createAssignment(initializer, boundValue); + if (isDestructuringAssignment(assignment)) { + statements.push(factory2.createExpressionStatement(visitBinaryExpression( + assignment, + /*expressionResultIsUnused*/ + true + ))); + } else { + setTextRangeEnd(assignment, initializer.end); + statements.push(setTextRange(factory2.createExpressionStatement(Debug.checkDefined(visitNode(assignment, visitor, isExpression))), moveRangeEnd(initializer, -1))); + } + } + if (convertedLoopBodyStatements) { + return createSyntheticBlockForConvertedStatements(addRange(statements, convertedLoopBodyStatements)); + } else { + const statement = visitNode(node.statement, visitor, isStatement, factory2.liftToBlock); + Debug.assert(statement); + if (isBlock(statement)) { + return factory2.updateBlock(statement, setTextRange(factory2.createNodeArray(concatenate(statements, statement.statements)), statement.statements)); + } else { + statements.push(statement); + return createSyntheticBlockForConvertedStatements(statements); + } + } + } + function createSyntheticBlockForConvertedStatements(statements) { + return setEmitFlags( + factory2.createBlock( + factory2.createNodeArray(statements), + /*multiLine*/ + true + ), + 96 /* NoSourceMap */ | 768 /* NoTokenSourceMaps */ + ); + } + function convertForOfStatementForArray(node, outermostLabeledStatement, convertedLoopBodyStatements) { + const expression = visitNode(node.expression, visitor, isExpression); + Debug.assert(expression); + const counter = factory2.createLoopVariable(); + const rhsReference = isIdentifier(expression) ? factory2.getGeneratedNameForNode(expression) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + setEmitFlags(expression, 96 /* NoSourceMap */ | getEmitFlags(expression)); + const forStatement = setTextRange( + factory2.createForStatement( + /*initializer*/ + setEmitFlags( + setTextRange( + factory2.createVariableDeclarationList([ + setTextRange(factory2.createVariableDeclaration( + counter, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createNumericLiteral(0) + ), moveRangePos(node.expression, -1)), + setTextRange(factory2.createVariableDeclaration( + rhsReference, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + expression + ), node.expression) + ]), + node.expression + ), + 4194304 /* NoHoisting */ + ), + /*condition*/ + setTextRange( + factory2.createLessThan( + counter, + factory2.createPropertyAccessExpression(rhsReference, "length") + ), + node.expression + ), + /*incrementor*/ + setTextRange(factory2.createPostfixIncrement(counter), node.expression), + /*statement*/ + convertForOfStatementHead( + node, + factory2.createElementAccessExpression(rhsReference, counter), + convertedLoopBodyStatements + ) + ), + /*location*/ + node + ); + setEmitFlags(forStatement, 512 /* NoTokenTrailingSourceMaps */); + setTextRange(forStatement, node); + return factory2.restoreEnclosingLabel(forStatement, outermostLabeledStatement, convertedLoopState && resetLabel); + } + function convertForOfStatementForIterable(node, outermostLabeledStatement, convertedLoopBodyStatements, ancestorFacts) { + const expression = visitNode(node.expression, visitor, isExpression); + Debug.assert(expression); + const iterator = isIdentifier(expression) ? factory2.getGeneratedNameForNode(expression) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const result = isIdentifier(expression) ? factory2.getGeneratedNameForNode(iterator) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const errorRecord = factory2.createUniqueName("e"); + const catchVariable = factory2.getGeneratedNameForNode(errorRecord); + const returnMethod = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const values = setTextRange(emitHelpers().createValuesHelper(expression), node.expression); + const next = factory2.createCallExpression( + factory2.createPropertyAccessExpression(iterator, "next"), + /*typeArguments*/ + void 0, + [] + ); + hoistVariableDeclaration(errorRecord); + hoistVariableDeclaration(returnMethod); + const initializer = ancestorFacts & 1024 /* IterationContainer */ ? factory2.inlineExpressions([factory2.createAssignment(errorRecord, factory2.createVoidZero()), values]) : values; + const forStatement = setEmitFlags( + setTextRange( + factory2.createForStatement( + /*initializer*/ + setEmitFlags( + setTextRange( + factory2.createVariableDeclarationList([ + setTextRange(factory2.createVariableDeclaration( + iterator, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ), node.expression), + factory2.createVariableDeclaration( + result, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + next + ) + ]), + node.expression + ), + 4194304 /* NoHoisting */ + ), + /*condition*/ + factory2.createLogicalNot(factory2.createPropertyAccessExpression(result, "done")), + /*incrementor*/ + factory2.createAssignment(result, next), + /*statement*/ + convertForOfStatementHead( + node, + factory2.createPropertyAccessExpression(result, "value"), + convertedLoopBodyStatements + ) + ), + /*location*/ + node + ), + 512 /* NoTokenTrailingSourceMaps */ + ); + return factory2.createTryStatement( + factory2.createBlock([ + factory2.restoreEnclosingLabel( + forStatement, + outermostLabeledStatement, + convertedLoopState && resetLabel + ) + ]), + factory2.createCatchClause( + factory2.createVariableDeclaration(catchVariable), + setEmitFlags( + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createAssignment( + errorRecord, + factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("error", catchVariable) + ]) + ) + ) + ]), + 1 /* SingleLine */ + ) + ), + factory2.createBlock([ + factory2.createTryStatement( + /*tryBlock*/ + factory2.createBlock([ + setEmitFlags( + factory2.createIfStatement( + factory2.createLogicalAnd( + factory2.createLogicalAnd( + result, + factory2.createLogicalNot( + factory2.createPropertyAccessExpression(result, "done") + ) + ), + factory2.createAssignment( + returnMethod, + factory2.createPropertyAccessExpression(iterator, "return") + ) + ), + factory2.createExpressionStatement( + factory2.createFunctionCallCall(returnMethod, iterator, []) + ) + ), + 1 /* SingleLine */ + ) + ]), + /*catchClause*/ + void 0, + /*finallyBlock*/ + setEmitFlags( + factory2.createBlock([ + setEmitFlags( + factory2.createIfStatement( + errorRecord, + factory2.createThrowStatement( + factory2.createPropertyAccessExpression(errorRecord, "error") + ) + ), + 1 /* SingleLine */ + ) + ]), + 1 /* SingleLine */ + ) + ) + ]) + ); + } + function visitObjectLiteralExpression(node) { + const properties = node.properties; + let numInitialProperties = -1, hasComputed = false; + for (let i = 0; i < properties.length; i++) { + const property = properties[i]; + if (property.transformFlags & 1048576 /* ContainsYield */ && hierarchyFacts & 4 /* AsyncFunctionBody */ || (hasComputed = Debug.checkDefined(property.name).kind === 168 /* ComputedPropertyName */)) { + numInitialProperties = i; + break; + } + } + if (numInitialProperties < 0) { + return visitEachChild(node, visitor, context); + } + const temp = factory2.createTempVariable(hoistVariableDeclaration); + const expressions = []; + const assignment = factory2.createAssignment( + temp, + setEmitFlags( + factory2.createObjectLiteralExpression( + visitNodes2(properties, visitor, isObjectLiteralElementLike, 0, numInitialProperties), + node.multiLine + ), + hasComputed ? 131072 /* Indented */ : 0 + ) + ); + if (node.multiLine) { + startOnNewLine(assignment); + } + expressions.push(assignment); + addObjectLiteralMembers(expressions, node, temp, numInitialProperties); + expressions.push(node.multiLine ? startOnNewLine(setParent(setTextRange(factory2.cloneNode(temp), temp), temp.parent)) : temp); + return factory2.inlineExpressions(expressions); + } + function shouldConvertPartOfIterationStatement(node) { + return resolver.hasNodeCheckFlag(node, 8192 /* ContainsCapturedBlockScopeBinding */); + } + function shouldConvertInitializerOfForStatement(node) { + return isForStatement(node) && !!node.initializer && shouldConvertPartOfIterationStatement(node.initializer); + } + function shouldConvertConditionOfForStatement(node) { + return isForStatement(node) && !!node.condition && shouldConvertPartOfIterationStatement(node.condition); + } + function shouldConvertIncrementorOfForStatement(node) { + return isForStatement(node) && !!node.incrementor && shouldConvertPartOfIterationStatement(node.incrementor); + } + function shouldConvertIterationStatement(node) { + return shouldConvertBodyOfIterationStatement(node) || shouldConvertInitializerOfForStatement(node); + } + function shouldConvertBodyOfIterationStatement(node) { + return resolver.hasNodeCheckFlag(node, 4096 /* LoopWithCapturedBlockScopedBinding */); + } + function hoistVariableDeclarationDeclaredInConvertedLoop(state, node) { + if (!state.hoistedLocalVariables) { + state.hoistedLocalVariables = []; + } + visit(node.name); + function visit(node2) { + if (node2.kind === 80 /* Identifier */) { + state.hoistedLocalVariables.push(node2); + } else { + for (const element of node2.elements) { + if (!isOmittedExpression(element)) { + visit(element.name); + } + } + } + } + } + function convertIterationStatementBodyIfNecessary(node, outermostLabeledStatement, ancestorFacts, convert) { + if (!shouldConvertIterationStatement(node)) { + let saveAllowedNonLabeledJumps; + if (convertedLoopState) { + saveAllowedNonLabeledJumps = convertedLoopState.allowedNonLabeledJumps; + convertedLoopState.allowedNonLabeledJumps = 2 /* Break */ | 4 /* Continue */; + } + const result = convert ? convert( + node, + outermostLabeledStatement, + /*convertedLoopBodyStatements*/ + void 0, + ancestorFacts + ) : factory2.restoreEnclosingLabel( + isForStatement(node) ? visitEachChildOfForStatement2(node) : visitEachChild(node, visitor, context), + outermostLabeledStatement, + convertedLoopState && resetLabel + ); + if (convertedLoopState) { + convertedLoopState.allowedNonLabeledJumps = saveAllowedNonLabeledJumps; + } + return result; + } + const currentState = createConvertedLoopState(node); + const statements = []; + const outerConvertedLoopState = convertedLoopState; + convertedLoopState = currentState; + const initializerFunction = shouldConvertInitializerOfForStatement(node) ? createFunctionForInitializerOfForStatement(node, currentState) : void 0; + const bodyFunction = shouldConvertBodyOfIterationStatement(node) ? createFunctionForBodyOfIterationStatement(node, currentState, outerConvertedLoopState) : void 0; + convertedLoopState = outerConvertedLoopState; + if (initializerFunction) statements.push(initializerFunction.functionDeclaration); + if (bodyFunction) statements.push(bodyFunction.functionDeclaration); + addExtraDeclarationsForConvertedLoop(statements, currentState, outerConvertedLoopState); + if (initializerFunction) { + statements.push(generateCallToConvertedLoopInitializer(initializerFunction.functionName, initializerFunction.containsYield)); + } + let loop; + if (bodyFunction) { + if (convert) { + loop = convert(node, outermostLabeledStatement, bodyFunction.part, ancestorFacts); + } else { + const clone2 = convertIterationStatementCore(node, initializerFunction, factory2.createBlock( + bodyFunction.part, + /*multiLine*/ + true + )); + loop = factory2.restoreEnclosingLabel(clone2, outermostLabeledStatement, convertedLoopState && resetLabel); + } + } else { + const clone2 = convertIterationStatementCore(node, initializerFunction, Debug.checkDefined(visitNode(node.statement, visitor, isStatement, factory2.liftToBlock))); + loop = factory2.restoreEnclosingLabel(clone2, outermostLabeledStatement, convertedLoopState && resetLabel); + } + statements.push(loop); + return statements; + } + function convertIterationStatementCore(node, initializerFunction, convertedLoopBody) { + switch (node.kind) { + case 249 /* ForStatement */: + return convertForStatement(node, initializerFunction, convertedLoopBody); + case 250 /* ForInStatement */: + return convertForInStatement(node, convertedLoopBody); + case 251 /* ForOfStatement */: + return convertForOfStatement(node, convertedLoopBody); + case 247 /* DoStatement */: + return convertDoStatement(node, convertedLoopBody); + case 248 /* WhileStatement */: + return convertWhileStatement(node, convertedLoopBody); + default: + return Debug.failBadSyntaxKind(node, "IterationStatement expected"); + } + } + function convertForStatement(node, initializerFunction, convertedLoopBody) { + const shouldConvertCondition = node.condition && shouldConvertPartOfIterationStatement(node.condition); + const shouldConvertIncrementor = shouldConvertCondition || node.incrementor && shouldConvertPartOfIterationStatement(node.incrementor); + return factory2.updateForStatement( + node, + visitNode(initializerFunction ? initializerFunction.part : node.initializer, visitorWithUnusedExpressionResult, isForInitializer), + visitNode(shouldConvertCondition ? void 0 : node.condition, visitor, isExpression), + visitNode(shouldConvertIncrementor ? void 0 : node.incrementor, visitorWithUnusedExpressionResult, isExpression), + convertedLoopBody + ); + } + function convertForOfStatement(node, convertedLoopBody) { + return factory2.updateForOfStatement( + node, + /*awaitModifier*/ + void 0, + Debug.checkDefined(visitNode(node.initializer, visitor, isForInitializer)), + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + convertedLoopBody + ); + } + function convertForInStatement(node, convertedLoopBody) { + return factory2.updateForInStatement( + node, + Debug.checkDefined(visitNode(node.initializer, visitor, isForInitializer)), + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + convertedLoopBody + ); + } + function convertDoStatement(node, convertedLoopBody) { + return factory2.updateDoStatement( + node, + convertedLoopBody, + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)) + ); + } + function convertWhileStatement(node, convertedLoopBody) { + return factory2.updateWhileStatement( + node, + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + convertedLoopBody + ); + } + function createConvertedLoopState(node) { + let loopInitializer; + switch (node.kind) { + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + const initializer = node.initializer; + if (initializer && initializer.kind === 262 /* VariableDeclarationList */) { + loopInitializer = initializer; + } + break; + } + const loopParameters = []; + const loopOutParameters = []; + if (loopInitializer && getCombinedNodeFlags(loopInitializer) & 7 /* BlockScoped */) { + const hasCapturedBindingsInForHead = shouldConvertInitializerOfForStatement(node) || shouldConvertConditionOfForStatement(node) || shouldConvertIncrementorOfForStatement(node); + for (const decl of loopInitializer.declarations) { + processLoopVariableDeclaration(node, decl, loopParameters, loopOutParameters, hasCapturedBindingsInForHead); + } + } + const currentState = { loopParameters, loopOutParameters }; + if (convertedLoopState) { + if (convertedLoopState.argumentsName) { + currentState.argumentsName = convertedLoopState.argumentsName; + } + if (convertedLoopState.thisName) { + currentState.thisName = convertedLoopState.thisName; + } + if (convertedLoopState.hoistedLocalVariables) { + currentState.hoistedLocalVariables = convertedLoopState.hoistedLocalVariables; + } + } + return currentState; + } + function addExtraDeclarationsForConvertedLoop(statements, state, outerState) { + let extraVariableDeclarations; + if (state.argumentsName) { + if (outerState) { + outerState.argumentsName = state.argumentsName; + } else { + (extraVariableDeclarations || (extraVariableDeclarations = [])).push( + factory2.createVariableDeclaration( + state.argumentsName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createIdentifier("arguments") + ) + ); + } + } + if (state.thisName) { + if (outerState) { + outerState.thisName = state.thisName; + } else { + (extraVariableDeclarations || (extraVariableDeclarations = [])).push( + factory2.createVariableDeclaration( + state.thisName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createIdentifier("this") + ) + ); + } + } + if (state.hoistedLocalVariables) { + if (outerState) { + outerState.hoistedLocalVariables = state.hoistedLocalVariables; + } else { + if (!extraVariableDeclarations) { + extraVariableDeclarations = []; + } + for (const identifier of state.hoistedLocalVariables) { + extraVariableDeclarations.push(factory2.createVariableDeclaration(identifier)); + } + } + } + if (state.loopOutParameters.length) { + if (!extraVariableDeclarations) { + extraVariableDeclarations = []; + } + for (const outParam of state.loopOutParameters) { + extraVariableDeclarations.push(factory2.createVariableDeclaration(outParam.outParamName)); + } + } + if (state.conditionVariable) { + if (!extraVariableDeclarations) { + extraVariableDeclarations = []; + } + extraVariableDeclarations.push(factory2.createVariableDeclaration( + state.conditionVariable, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createFalse() + )); + } + if (extraVariableDeclarations) { + statements.push(factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList(extraVariableDeclarations) + )); + } + } + function createOutVariable(p) { + return factory2.createVariableDeclaration( + p.originalName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + p.outParamName + ); + } + function createFunctionForInitializerOfForStatement(node, currentState) { + const functionName = factory2.createUniqueName("_loop_init"); + const containsYield = (node.initializer.transformFlags & 1048576 /* ContainsYield */) !== 0; + let emitFlags = 0 /* None */; + if (currentState.containsLexicalThis) emitFlags |= 16 /* CapturesThis */; + if (containsYield && hierarchyFacts & 4 /* AsyncFunctionBody */) emitFlags |= 524288 /* AsyncFunctionBody */; + const statements = []; + statements.push(factory2.createVariableStatement( + /*modifiers*/ + void 0, + node.initializer + )); + copyOutParameters(currentState.loopOutParameters, 2 /* Initializer */, 1 /* ToOutParameter */, statements); + const functionDeclaration = factory2.createVariableStatement( + /*modifiers*/ + void 0, + setEmitFlags( + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + functionName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + setEmitFlags( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + containsYield ? factory2.createToken(42 /* AsteriskToken */) : void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + void 0, + /*type*/ + void 0, + Debug.checkDefined(visitNode( + factory2.createBlock( + statements, + /*multiLine*/ + true + ), + visitor, + isBlock + )) + ), + emitFlags + ) + ) + ]), + 4194304 /* NoHoisting */ + ) + ); + const part = factory2.createVariableDeclarationList(map(currentState.loopOutParameters, createOutVariable)); + return { functionName, containsYield, functionDeclaration, part }; + } + function createFunctionForBodyOfIterationStatement(node, currentState, outerState) { + const functionName = factory2.createUniqueName("_loop"); + startLexicalEnvironment(); + const statement = visitNode(node.statement, visitor, isStatement, factory2.liftToBlock); + const lexicalEnvironment = endLexicalEnvironment(); + const statements = []; + if (shouldConvertConditionOfForStatement(node) || shouldConvertIncrementorOfForStatement(node)) { + currentState.conditionVariable = factory2.createUniqueName("inc"); + if (node.incrementor) { + statements.push(factory2.createIfStatement( + currentState.conditionVariable, + factory2.createExpressionStatement(Debug.checkDefined(visitNode(node.incrementor, visitor, isExpression))), + factory2.createExpressionStatement(factory2.createAssignment(currentState.conditionVariable, factory2.createTrue())) + )); + } else { + statements.push(factory2.createIfStatement( + factory2.createLogicalNot(currentState.conditionVariable), + factory2.createExpressionStatement(factory2.createAssignment(currentState.conditionVariable, factory2.createTrue())) + )); + } + if (shouldConvertConditionOfForStatement(node)) { + statements.push(factory2.createIfStatement( + factory2.createPrefixUnaryExpression(54 /* ExclamationToken */, Debug.checkDefined(visitNode(node.condition, visitor, isExpression))), + Debug.checkDefined(visitNode(factory2.createBreakStatement(), visitor, isStatement)) + )); + } + } + Debug.assert(statement); + if (isBlock(statement)) { + addRange(statements, statement.statements); + } else { + statements.push(statement); + } + copyOutParameters(currentState.loopOutParameters, 1 /* Body */, 1 /* ToOutParameter */, statements); + insertStatementsAfterStandardPrologue(statements, lexicalEnvironment); + const loopBody = factory2.createBlock( + statements, + /*multiLine*/ + true + ); + if (isBlock(statement)) setOriginalNode(loopBody, statement); + const containsYield = (node.statement.transformFlags & 1048576 /* ContainsYield */) !== 0; + let emitFlags = 1048576 /* ReuseTempVariableScope */; + if (currentState.containsLexicalThis) emitFlags |= 16 /* CapturesThis */; + if (containsYield && (hierarchyFacts & 4 /* AsyncFunctionBody */) !== 0) emitFlags |= 524288 /* AsyncFunctionBody */; + const functionDeclaration = factory2.createVariableStatement( + /*modifiers*/ + void 0, + setEmitFlags( + factory2.createVariableDeclarationList( + [ + factory2.createVariableDeclaration( + functionName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + setEmitFlags( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + containsYield ? factory2.createToken(42 /* AsteriskToken */) : void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + currentState.loopParameters, + /*type*/ + void 0, + loopBody + ), + emitFlags + ) + ) + ] + ), + 4194304 /* NoHoisting */ + ) + ); + const part = generateCallToConvertedLoop(functionName, currentState, outerState, containsYield); + return { functionName, containsYield, functionDeclaration, part }; + } + function copyOutParameter(outParam, copyDirection) { + const source = copyDirection === 0 /* ToOriginal */ ? outParam.outParamName : outParam.originalName; + const target = copyDirection === 0 /* ToOriginal */ ? outParam.originalName : outParam.outParamName; + return factory2.createBinaryExpression(target, 64 /* EqualsToken */, source); + } + function copyOutParameters(outParams, partFlags, copyDirection, statements) { + for (const outParam of outParams) { + if (outParam.flags & partFlags) { + statements.push(factory2.createExpressionStatement(copyOutParameter(outParam, copyDirection))); + } + } + } + function generateCallToConvertedLoopInitializer(initFunctionExpressionName, containsYield) { + const call = factory2.createCallExpression( + initFunctionExpressionName, + /*typeArguments*/ + void 0, + [] + ); + const callResult = containsYield ? factory2.createYieldExpression( + factory2.createToken(42 /* AsteriskToken */), + setEmitFlags(call, 8388608 /* Iterator */) + ) : call; + return factory2.createExpressionStatement(callResult); + } + function generateCallToConvertedLoop(loopFunctionExpressionName, state, outerState, containsYield) { + const statements = []; + const isSimpleLoop = !(state.nonLocalJumps & ~4 /* Continue */) && !state.labeledNonLocalBreaks && !state.labeledNonLocalContinues; + const call = factory2.createCallExpression( + loopFunctionExpressionName, + /*typeArguments*/ + void 0, + map(state.loopParameters, (p) => p.name) + ); + const callResult = containsYield ? factory2.createYieldExpression( + factory2.createToken(42 /* AsteriskToken */), + setEmitFlags(call, 8388608 /* Iterator */) + ) : call; + if (isSimpleLoop) { + statements.push(factory2.createExpressionStatement(callResult)); + copyOutParameters(state.loopOutParameters, 1 /* Body */, 0 /* ToOriginal */, statements); + } else { + const loopResultName = factory2.createUniqueName("state"); + const stateVariable = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + [factory2.createVariableDeclaration( + loopResultName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + callResult + )] + ) + ); + statements.push(stateVariable); + copyOutParameters(state.loopOutParameters, 1 /* Body */, 0 /* ToOriginal */, statements); + if (state.nonLocalJumps & 8 /* Return */) { + let returnStatement; + if (outerState) { + outerState.nonLocalJumps |= 8 /* Return */; + returnStatement = factory2.createReturnStatement(loopResultName); + } else { + returnStatement = factory2.createReturnStatement(factory2.createPropertyAccessExpression(loopResultName, "value")); + } + statements.push( + factory2.createIfStatement( + factory2.createTypeCheck(loopResultName, "object"), + returnStatement + ) + ); + } + if (state.nonLocalJumps & 2 /* Break */) { + statements.push( + factory2.createIfStatement( + factory2.createStrictEquality( + loopResultName, + factory2.createStringLiteral("break") + ), + factory2.createBreakStatement() + ) + ); + } + if (state.labeledNonLocalBreaks || state.labeledNonLocalContinues) { + const caseClauses = []; + processLabeledJumps( + state.labeledNonLocalBreaks, + /*isBreak*/ + true, + loopResultName, + outerState, + caseClauses + ); + processLabeledJumps( + state.labeledNonLocalContinues, + /*isBreak*/ + false, + loopResultName, + outerState, + caseClauses + ); + statements.push( + factory2.createSwitchStatement( + loopResultName, + factory2.createCaseBlock(caseClauses) + ) + ); + } + } + return statements; + } + function setLabeledJump(state, isBreak, labelText, labelMarker) { + if (isBreak) { + if (!state.labeledNonLocalBreaks) { + state.labeledNonLocalBreaks = /* @__PURE__ */ new Map(); + } + state.labeledNonLocalBreaks.set(labelText, labelMarker); + } else { + if (!state.labeledNonLocalContinues) { + state.labeledNonLocalContinues = /* @__PURE__ */ new Map(); + } + state.labeledNonLocalContinues.set(labelText, labelMarker); + } + } + function processLabeledJumps(table, isBreak, loopResultName, outerLoop, caseClauses) { + if (!table) { + return; + } + table.forEach((labelMarker, labelText) => { + const statements = []; + if (!outerLoop || outerLoop.labels && outerLoop.labels.get(labelText)) { + const label = factory2.createIdentifier(labelText); + statements.push(isBreak ? factory2.createBreakStatement(label) : factory2.createContinueStatement(label)); + } else { + setLabeledJump(outerLoop, isBreak, labelText, labelMarker); + statements.push(factory2.createReturnStatement(loopResultName)); + } + caseClauses.push(factory2.createCaseClause(factory2.createStringLiteral(labelMarker), statements)); + }); + } + function processLoopVariableDeclaration(container, decl, loopParameters, loopOutParameters, hasCapturedBindingsInForHead) { + const name = decl.name; + if (isBindingPattern(name)) { + for (const element of name.elements) { + if (!isOmittedExpression(element)) { + processLoopVariableDeclaration(container, element, loopParameters, loopOutParameters, hasCapturedBindingsInForHead); + } + } + } else { + loopParameters.push(factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + name + )); + const needsOutParam = resolver.hasNodeCheckFlag(decl, 65536 /* NeedsLoopOutParameter */); + if (needsOutParam || hasCapturedBindingsInForHead) { + const outParamName = factory2.createUniqueName("out_" + idText(name)); + let flags = 0 /* None */; + if (needsOutParam) { + flags |= 1 /* Body */; + } + if (isForStatement(container)) { + if (container.initializer && resolver.isBindingCapturedByNode(container.initializer, decl)) { + flags |= 2 /* Initializer */; + } + if (container.condition && resolver.isBindingCapturedByNode(container.condition, decl) || container.incrementor && resolver.isBindingCapturedByNode(container.incrementor, decl)) { + flags |= 1 /* Body */; + } + } + loopOutParameters.push({ flags, originalName: name, outParamName }); + } + } + } + function addObjectLiteralMembers(expressions, node, receiver, start) { + const properties = node.properties; + const numProperties = properties.length; + for (let i = start; i < numProperties; i++) { + const property = properties[i]; + switch (property.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + const accessors = getAllAccessorDeclarations(node.properties, property); + if (property === accessors.firstAccessor) { + expressions.push(transformAccessorsToExpression(receiver, accessors, node, !!node.multiLine)); + } + break; + case 175 /* MethodDeclaration */: + expressions.push(transformObjectLiteralMethodDeclarationToExpression(property, receiver, node, node.multiLine)); + break; + case 304 /* PropertyAssignment */: + expressions.push(transformPropertyAssignmentToExpression(property, receiver, node.multiLine)); + break; + case 305 /* ShorthandPropertyAssignment */: + expressions.push(transformShorthandPropertyAssignmentToExpression(property, receiver, node.multiLine)); + break; + default: + Debug.failBadSyntaxKind(node); + break; + } + } + } + function transformPropertyAssignmentToExpression(property, receiver, startsOnNewLine) { + const expression = factory2.createAssignment( + createMemberAccessForPropertyName( + factory2, + receiver, + Debug.checkDefined(visitNode(property.name, visitor, isPropertyName)) + ), + Debug.checkDefined(visitNode(property.initializer, visitor, isExpression)) + ); + setTextRange(expression, property); + if (startsOnNewLine) { + startOnNewLine(expression); + } + return expression; + } + function transformShorthandPropertyAssignmentToExpression(property, receiver, startsOnNewLine) { + const expression = factory2.createAssignment( + createMemberAccessForPropertyName( + factory2, + receiver, + Debug.checkDefined(visitNode(property.name, visitor, isPropertyName)) + ), + factory2.cloneNode(property.name) + ); + setTextRange(expression, property); + if (startsOnNewLine) { + startOnNewLine(expression); + } + return expression; + } + function transformObjectLiteralMethodDeclarationToExpression(method, receiver, container, startsOnNewLine) { + const expression = factory2.createAssignment( + createMemberAccessForPropertyName( + factory2, + receiver, + Debug.checkDefined(visitNode(method.name, visitor, isPropertyName)) + ), + transformFunctionLikeToExpression( + method, + /*location*/ + method, + /*name*/ + void 0, + container + ) + ); + setTextRange(expression, method); + if (startsOnNewLine) { + startOnNewLine(expression); + } + return expression; + } + function visitCatchClause(node) { + const ancestorFacts = enterSubtree(7104 /* BlockScopeExcludes */, 0 /* BlockScopeIncludes */); + let updated; + Debug.assert(!!node.variableDeclaration, "Catch clause variable should always be present when downleveling ES2015."); + if (isBindingPattern(node.variableDeclaration.name)) { + const temp = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + const newVariableDeclaration = factory2.createVariableDeclaration(temp); + setTextRange(newVariableDeclaration, node.variableDeclaration); + const vars = flattenDestructuringBinding( + node.variableDeclaration, + visitor, + context, + 0 /* All */, + temp + ); + const list = factory2.createVariableDeclarationList(vars); + setTextRange(list, node.variableDeclaration); + const destructure = factory2.createVariableStatement( + /*modifiers*/ + void 0, + list + ); + updated = factory2.updateCatchClause(node, newVariableDeclaration, addStatementToStartOfBlock(node.block, destructure)); + } else { + updated = visitEachChild(node, visitor, context); + } + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return updated; + } + function addStatementToStartOfBlock(block, statement) { + const transformedStatements = visitNodes2(block.statements, visitor, isStatement); + return factory2.updateBlock(block, [statement, ...transformedStatements]); + } + function visitMethodDeclaration(node) { + Debug.assert(!isComputedPropertyName(node.name)); + const functionExpression = transformFunctionLikeToExpression( + node, + /*location*/ + moveRangePos(node, -1), + /*name*/ + void 0, + /*container*/ + void 0 + ); + setEmitFlags(functionExpression, 1024 /* NoLeadingComments */ | getEmitFlags(functionExpression)); + return setTextRange( + factory2.createPropertyAssignment( + node.name, + functionExpression + ), + /*location*/ + node + ); + } + function visitAccessorDeclaration(node) { + Debug.assert(!isComputedPropertyName(node.name)); + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const ancestorFacts = enterSubtree(32670 /* FunctionExcludes */, 65 /* FunctionIncludes */); + let updated; + const parameters = visitParameterList(node.parameters, visitor, context); + const body = transformFunctionBody2(node); + if (node.kind === 178 /* GetAccessor */) { + updated = factory2.updateGetAccessorDeclaration(node, node.modifiers, node.name, parameters, node.type, body); + } else { + updated = factory2.updateSetAccessorDeclaration(node, node.modifiers, node.name, parameters, body); + } + exitSubtree(ancestorFacts, 229376 /* FunctionSubtreeExcludes */, 0 /* None */); + convertedLoopState = savedConvertedLoopState; + return updated; + } + function visitShorthandPropertyAssignment(node) { + return setTextRange( + factory2.createPropertyAssignment( + node.name, + visitIdentifier(factory2.cloneNode(node.name)) + ), + /*location*/ + node + ); + } + function visitComputedPropertyName(node) { + return visitEachChild(node, visitor, context); + } + function visitYieldExpression(node) { + return visitEachChild(node, visitor, context); + } + function visitArrayLiteralExpression(node) { + if (some(node.elements, isSpreadElement)) { + return transformAndSpreadElements( + node.elements, + /*isArgumentList*/ + false, + !!node.multiLine, + /*hasTrailingComma*/ + !!node.elements.hasTrailingComma + ); + } + return visitEachChild(node, visitor, context); + } + function visitCallExpression(node) { + if (getInternalEmitFlags(node) & 1 /* TypeScriptClassWrapper */) { + return visitTypeScriptClassWrapper(node); + } + const expression = skipOuterExpressions(node.expression); + if (expression.kind === 108 /* SuperKeyword */ || isSuperProperty(expression) || some(node.arguments, isSpreadElement)) { + return visitCallExpressionWithPotentialCapturedThisAssignment( + node, + /*assignToCapturedThis*/ + true + ); + } + return factory2.updateCallExpression( + node, + Debug.checkDefined(visitNode(node.expression, callExpressionVisitor, isExpression)), + /*typeArguments*/ + void 0, + visitNodes2(node.arguments, visitor, isExpression) + ); + } + function visitTypeScriptClassWrapper(node) { + const body = cast(cast(skipOuterExpressions(node.expression), isArrowFunction).body, isBlock); + const isVariableStatementWithInitializer = (stmt) => isVariableStatement(stmt) && !!first(stmt.declarationList.declarations).initializer; + const savedConvertedLoopState = convertedLoopState; + convertedLoopState = void 0; + const bodyStatements = visitNodes2(body.statements, classWrapperStatementVisitor, isStatement); + convertedLoopState = savedConvertedLoopState; + const classStatements = filter(bodyStatements, isVariableStatementWithInitializer); + const remainingStatements = filter(bodyStatements, (stmt) => !isVariableStatementWithInitializer(stmt)); + const varStatement = cast(first(classStatements), isVariableStatement); + const variable = varStatement.declarationList.declarations[0]; + const initializer = skipOuterExpressions(variable.initializer); + let aliasAssignment = tryCast(initializer, isAssignmentExpression); + if (!aliasAssignment && isBinaryExpression(initializer) && initializer.operatorToken.kind === 28 /* CommaToken */) { + aliasAssignment = tryCast(initializer.left, isAssignmentExpression); + } + const call = cast(aliasAssignment ? skipOuterExpressions(aliasAssignment.right) : initializer, isCallExpression); + const func = cast(skipOuterExpressions(call.expression), isFunctionExpression); + const funcStatements = func.body.statements; + let classBodyStart = 0; + let classBodyEnd = -1; + const statements = []; + if (aliasAssignment) { + const extendsCall = tryCast(funcStatements[classBodyStart], isExpressionStatement); + if (extendsCall) { + statements.push(extendsCall); + classBodyStart++; + } + statements.push(funcStatements[classBodyStart]); + classBodyStart++; + statements.push( + factory2.createExpressionStatement( + factory2.createAssignment( + aliasAssignment.left, + cast(variable.name, isIdentifier) + ) + ) + ); + } + while (!isReturnStatement(elementAt(funcStatements, classBodyEnd))) { + classBodyEnd--; + } + addRange(statements, funcStatements, classBodyStart, classBodyEnd); + if (classBodyEnd < -1) { + addRange(statements, funcStatements, classBodyEnd + 1); + } + const returnStatement = tryCast(elementAt(funcStatements, classBodyEnd), isReturnStatement); + for (const statement of remainingStatements) { + if (isReturnStatement(statement) && (returnStatement == null ? void 0 : returnStatement.expression) && !isIdentifier(returnStatement.expression)) { + statements.push(returnStatement); + } else { + statements.push(statement); + } + } + addRange( + statements, + classStatements, + /*start*/ + 1 + ); + return factory2.restoreOuterExpressions( + node.expression, + factory2.restoreOuterExpressions( + variable.initializer, + factory2.restoreOuterExpressions( + aliasAssignment && aliasAssignment.right, + factory2.updateCallExpression( + call, + factory2.restoreOuterExpressions( + call.expression, + factory2.updateFunctionExpression( + func, + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + func.parameters, + /*type*/ + void 0, + factory2.updateBlock( + func.body, + statements + ) + ) + ), + /*typeArguments*/ + void 0, + call.arguments + ) + ) + ) + ); + } + function visitCallExpressionWithPotentialCapturedThisAssignment(node, assignToCapturedThis) { + if (node.transformFlags & 32768 /* ContainsRestOrSpread */ || node.expression.kind === 108 /* SuperKeyword */ || isSuperProperty(skipOuterExpressions(node.expression))) { + const { target, thisArg } = factory2.createCallBinding(node.expression, hoistVariableDeclaration); + if (node.expression.kind === 108 /* SuperKeyword */) { + setEmitFlags(thisArg, 8 /* NoSubstitution */); + } + let resultingCall; + if (node.transformFlags & 32768 /* ContainsRestOrSpread */) { + resultingCall = factory2.createFunctionApplyCall( + Debug.checkDefined(visitNode(target, callExpressionVisitor, isExpression)), + node.expression.kind === 108 /* SuperKeyword */ ? thisArg : Debug.checkDefined(visitNode(thisArg, visitor, isExpression)), + transformAndSpreadElements( + node.arguments, + /*isArgumentList*/ + true, + /*multiLine*/ + false, + /*hasTrailingComma*/ + false + ) + ); + } else { + resultingCall = setTextRange( + factory2.createFunctionCallCall( + Debug.checkDefined(visitNode(target, callExpressionVisitor, isExpression)), + node.expression.kind === 108 /* SuperKeyword */ ? thisArg : Debug.checkDefined(visitNode(thisArg, visitor, isExpression)), + visitNodes2(node.arguments, visitor, isExpression) + ), + node + ); + } + if (node.expression.kind === 108 /* SuperKeyword */) { + const initializer = factory2.createLogicalOr( + resultingCall, + createActualThis() + ); + resultingCall = assignToCapturedThis ? factory2.createAssignment(createCapturedThis(), initializer) : initializer; + } + return setOriginalNode(resultingCall, node); + } + if (isSuperCall(node)) { + hierarchyFacts |= 131072 /* CapturedLexicalThis */; + } + return visitEachChild(node, visitor, context); + } + function visitNewExpression(node) { + if (some(node.arguments, isSpreadElement)) { + const { target, thisArg } = factory2.createCallBinding(factory2.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration); + return factory2.createNewExpression( + factory2.createFunctionApplyCall( + Debug.checkDefined(visitNode(target, visitor, isExpression)), + thisArg, + transformAndSpreadElements( + factory2.createNodeArray([factory2.createVoidZero(), ...node.arguments]), + /*isArgumentList*/ + true, + /*multiLine*/ + false, + /*hasTrailingComma*/ + false + ) + ), + /*typeArguments*/ + void 0, + [] + ); + } + return visitEachChild(node, visitor, context); + } + function transformAndSpreadElements(elements, isArgumentList, multiLine, hasTrailingComma) { + const numElements = elements.length; + const segments = flatten( + // As we visit each element, we return one of two functions to use as the "key": + // - `visitSpanOfSpreads` for one or more contiguous `...` spread expressions, i.e. `...a, ...b` in `[1, 2, ...a, ...b]` + // - `visitSpanOfNonSpreads` for one or more contiguous non-spread elements, i.e. `1, 2`, in `[1, 2, ...a, ...b]` + spanMap(elements, partitionSpread, (partition, visitPartition, _start, end) => visitPartition(partition, multiLine, hasTrailingComma && end === numElements)) + ); + if (segments.length === 1) { + const firstSegment = segments[0]; + if (isArgumentList && !compilerOptions.downlevelIteration || isPackedArrayLiteral(firstSegment.expression) || isCallToHelper(firstSegment.expression, "___spreadArray")) { + return firstSegment.expression; + } + } + const helpers = emitHelpers(); + const startsWithSpread = segments[0].kind !== 0 /* None */; + let expression = startsWithSpread ? factory2.createArrayLiteralExpression() : segments[0].expression; + for (let i = startsWithSpread ? 0 : 1; i < segments.length; i++) { + const segment = segments[i]; + expression = helpers.createSpreadArrayHelper( + expression, + segment.expression, + segment.kind === 1 /* UnpackedSpread */ && !isArgumentList + ); + } + return expression; + } + function partitionSpread(node) { + return isSpreadElement(node) ? visitSpanOfSpreads : visitSpanOfNonSpreads; + } + function visitSpanOfSpreads(chunk) { + return map(chunk, visitExpressionOfSpread); + } + function visitExpressionOfSpread(node) { + Debug.assertNode(node, isSpreadElement); + let expression = visitNode(node.expression, visitor, isExpression); + Debug.assert(expression); + const isCallToReadHelper = isCallToHelper(expression, "___read"); + let kind = isCallToReadHelper || isPackedArrayLiteral(expression) ? 2 /* PackedSpread */ : 1 /* UnpackedSpread */; + if (compilerOptions.downlevelIteration && kind === 1 /* UnpackedSpread */ && !isArrayLiteralExpression(expression) && !isCallToReadHelper) { + expression = emitHelpers().createReadHelper( + expression, + /*count*/ + void 0 + ); + kind = 2 /* PackedSpread */; + } + return createSpreadSegment(kind, expression); + } + function visitSpanOfNonSpreads(chunk, multiLine, hasTrailingComma) { + const expression = factory2.createArrayLiteralExpression( + visitNodes2(factory2.createNodeArray(chunk, hasTrailingComma), visitor, isExpression), + multiLine + ); + return createSpreadSegment(0 /* None */, expression); + } + function visitSpreadElement(node) { + return visitNode(node.expression, visitor, isExpression); + } + function visitTemplateLiteral(node) { + return setTextRange(factory2.createStringLiteral(node.text), node); + } + function visitStringLiteral(node) { + if (node.hasExtendedUnicodeEscape) { + return setTextRange(factory2.createStringLiteral(node.text), node); + } + return node; + } + function visitNumericLiteral(node) { + if (node.numericLiteralFlags & 384 /* BinaryOrOctalSpecifier */) { + return setTextRange(factory2.createNumericLiteral(node.text), node); + } + return node; + } + function visitTaggedTemplateExpression(node) { + return processTaggedTemplateExpression( + context, + node, + visitor, + currentSourceFile, + recordTaggedTemplateString, + 1 /* All */ + ); + } + function visitTemplateExpression(node) { + let expression = factory2.createStringLiteral(node.head.text); + for (const span of node.templateSpans) { + const args = [Debug.checkDefined(visitNode(span.expression, visitor, isExpression))]; + if (span.literal.text.length > 0) { + args.push(factory2.createStringLiteral(span.literal.text)); + } + expression = factory2.createCallExpression( + factory2.createPropertyAccessExpression(expression, "concat"), + /*typeArguments*/ + void 0, + args + ); + } + return setTextRange(expression, node); + } + function createSyntheticSuper() { + return factory2.createUniqueName("_super", 16 /* Optimistic */ | 32 /* FileLevel */); + } + function visitSuperKeyword(node, isExpressionOfCall) { + const expression = hierarchyFacts & 8 /* NonStaticClassElement */ && !isExpressionOfCall ? factory2.createPropertyAccessExpression(setOriginalNode(createSyntheticSuper(), node), "prototype") : createSyntheticSuper(); + setOriginalNode(expression, node); + setCommentRange(expression, node); + setSourceMapRange(expression, node); + return expression; + } + function visitMetaProperty(node) { + if (node.keywordToken === 105 /* NewKeyword */ && node.name.escapedText === "target") { + hierarchyFacts |= 32768 /* NewTarget */; + return factory2.createUniqueName("_newTarget", 16 /* Optimistic */ | 32 /* FileLevel */); + } + return node; + } + function onEmitNode(hint, node, emitCallback) { + if (enabledSubstitutions & 1 /* CapturedThis */ && isFunctionLike(node)) { + const ancestorFacts = enterSubtree( + 32670 /* FunctionExcludes */, + getEmitFlags(node) & 16 /* CapturesThis */ ? 65 /* FunctionIncludes */ | 16 /* CapturesThis */ : 65 /* FunctionIncludes */ + ); + previousOnEmitNode(hint, node, emitCallback); + exitSubtree(ancestorFacts, 0 /* None */, 0 /* None */); + return; + } + previousOnEmitNode(hint, node, emitCallback); + } + function enableSubstitutionsForBlockScopedBindings() { + if ((enabledSubstitutions & 2 /* BlockScopedBindings */) === 0) { + enabledSubstitutions |= 2 /* BlockScopedBindings */; + context.enableSubstitution(80 /* Identifier */); + } + } + function enableSubstitutionsForCapturedThis() { + if ((enabledSubstitutions & 1 /* CapturedThis */) === 0) { + enabledSubstitutions |= 1 /* CapturedThis */; + context.enableSubstitution(110 /* ThisKeyword */); + context.enableEmitNotification(177 /* Constructor */); + context.enableEmitNotification(175 /* MethodDeclaration */); + context.enableEmitNotification(178 /* GetAccessor */); + context.enableEmitNotification(179 /* SetAccessor */); + context.enableEmitNotification(220 /* ArrowFunction */); + context.enableEmitNotification(219 /* FunctionExpression */); + context.enableEmitNotification(263 /* FunctionDeclaration */); + } + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } + if (isIdentifier(node)) { + return substituteIdentifier(node); + } + return node; + } + function substituteIdentifier(node) { + if (enabledSubstitutions & 2 /* BlockScopedBindings */ && !isInternalName(node)) { + const original = getParseTreeNode(node, isIdentifier); + if (original && isNameOfDeclarationWithCollidingName(original)) { + return setTextRange(factory2.getGeneratedNameForNode(original), node); + } + } + return node; + } + function isNameOfDeclarationWithCollidingName(node) { + switch (node.parent.kind) { + case 209 /* BindingElement */: + case 264 /* ClassDeclaration */: + case 267 /* EnumDeclaration */: + case 261 /* VariableDeclaration */: + return node.parent.name === node && resolver.isDeclarationWithCollidingName(node.parent); + } + return false; + } + function substituteExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return substituteExpressionIdentifier(node); + case 110 /* ThisKeyword */: + return substituteThisKeyword(node); + } + return node; + } + function substituteExpressionIdentifier(node) { + if (enabledSubstitutions & 2 /* BlockScopedBindings */ && !isInternalName(node)) { + const declaration = resolver.getReferencedDeclarationWithCollidingName(node); + if (declaration && !(isClassLike(declaration) && isPartOfClassBody(declaration, node))) { + return setTextRange(factory2.getGeneratedNameForNode(getNameOfDeclaration(declaration)), node); + } + } + return node; + } + function isPartOfClassBody(declaration, node) { + let currentNode = getParseTreeNode(node); + if (!currentNode || currentNode === declaration || currentNode.end <= declaration.pos || currentNode.pos >= declaration.end) { + return false; + } + const blockScope = getEnclosingBlockScopeContainer(declaration); + while (currentNode) { + if (currentNode === blockScope || currentNode === declaration) { + return false; + } + if (isClassElement(currentNode) && currentNode.parent === declaration) { + return true; + } + currentNode = currentNode.parent; + } + return false; + } + function substituteThisKeyword(node) { + if (enabledSubstitutions & 1 /* CapturedThis */ && hierarchyFacts & 16 /* CapturesThis */) { + return setTextRange(createCapturedThis(), node); + } + return node; + } + function getClassMemberPrefix(node, member) { + return isStatic(member) ? factory2.getInternalName(node) : factory2.createPropertyAccessExpression(factory2.getInternalName(node), "prototype"); + } + function hasSynthesizedDefaultSuperCall(constructor, hasExtendsClause) { + if (!constructor || !hasExtendsClause) { + return false; + } + if (some(constructor.parameters)) { + return false; + } + const statement = firstOrUndefined(constructor.body.statements); + if (!statement || !nodeIsSynthesized(statement) || statement.kind !== 245 /* ExpressionStatement */) { + return false; + } + const statementExpression = statement.expression; + if (!nodeIsSynthesized(statementExpression) || statementExpression.kind !== 214 /* CallExpression */) { + return false; + } + const callTarget = statementExpression.expression; + if (!nodeIsSynthesized(callTarget) || callTarget.kind !== 108 /* SuperKeyword */) { + return false; + } + const callArgument = singleOrUndefined(statementExpression.arguments); + if (!callArgument || !nodeIsSynthesized(callArgument) || callArgument.kind !== 231 /* SpreadElement */) { + return false; + } + const expression = callArgument.expression; + return isIdentifier(expression) && expression.escapedText === "arguments"; + } +} + +// src/compiler/transformers/generators.ts +function getInstructionName(instruction) { + switch (instruction) { + case 2 /* Return */: + return "return"; + case 3 /* Break */: + return "break"; + case 4 /* Yield */: + return "yield"; + case 5 /* YieldStar */: + return "yield*"; + case 7 /* Endfinally */: + return "endfinally"; + default: + return void 0; + } +} +function transformGenerators(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + resumeLexicalEnvironment, + endLexicalEnvironment, + hoistFunctionDeclaration, + hoistVariableDeclaration + } = context; + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const resolver = context.getEmitResolver(); + const previousOnSubstituteNode = context.onSubstituteNode; + context.onSubstituteNode = onSubstituteNode; + let renamedCatchVariables; + let renamedCatchVariableDeclarations; + let inGeneratorFunctionBody; + let inStatementContainingYield; + let blocks; + let blockOffsets; + let blockActions; + let blockStack; + let labelOffsets; + let labelExpressions; + let nextLabelId = 1; + let operations; + let operationArguments; + let operationLocations; + let state; + let blockIndex = 0; + let labelNumber = 0; + let labelNumbers; + let lastOperationWasAbrupt; + let lastOperationWasCompletion; + let clauses; + let statements; + let exceptionBlockStack; + let currentExceptionBlock; + let withBlockStack; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile || (node.transformFlags & 2048 /* ContainsGenerator */) === 0) { + return node; + } + const visited = visitEachChild(node, visitor, context); + addEmitHelpers(visited, context.readEmitHelpers()); + return visited; + } + function visitor(node) { + const transformFlags = node.transformFlags; + if (inStatementContainingYield) { + return visitJavaScriptInStatementContainingYield(node); + } else if (inGeneratorFunctionBody) { + return visitJavaScriptInGeneratorFunctionBody(node); + } else if (isFunctionLikeDeclaration(node) && node.asteriskToken) { + return visitGenerator(node); + } else if (transformFlags & 2048 /* ContainsGenerator */) { + return visitEachChild(node, visitor, context); + } else { + return node; + } + } + function visitJavaScriptInStatementContainingYield(node) { + switch (node.kind) { + case 247 /* DoStatement */: + return visitDoStatement(node); + case 248 /* WhileStatement */: + return visitWhileStatement(node); + case 256 /* SwitchStatement */: + return visitSwitchStatement(node); + case 257 /* LabeledStatement */: + return visitLabeledStatement(node); + default: + return visitJavaScriptInGeneratorFunctionBody(node); + } + } + function visitJavaScriptInGeneratorFunctionBody(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + return visitFunctionDeclaration(node); + case 219 /* FunctionExpression */: + return visitFunctionExpression(node); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return visitAccessorDeclaration(node); + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 249 /* ForStatement */: + return visitForStatement(node); + case 250 /* ForInStatement */: + return visitForInStatement(node); + case 253 /* BreakStatement */: + return visitBreakStatement(node); + case 252 /* ContinueStatement */: + return visitContinueStatement(node); + case 254 /* ReturnStatement */: + return visitReturnStatement(node); + default: + if (node.transformFlags & 1048576 /* ContainsYield */) { + return visitJavaScriptContainingYield(node); + } else if (node.transformFlags & (2048 /* ContainsGenerator */ | 4194304 /* ContainsHoistedDeclarationOrCompletion */)) { + return visitEachChild(node, visitor, context); + } else { + return node; + } + } + } + function visitJavaScriptContainingYield(node) { + switch (node.kind) { + case 227 /* BinaryExpression */: + return visitBinaryExpression(node); + case 357 /* CommaListExpression */: + return visitCommaListExpression(node); + case 228 /* ConditionalExpression */: + return visitConditionalExpression(node); + case 230 /* YieldExpression */: + return visitYieldExpression(node); + case 210 /* ArrayLiteralExpression */: + return visitArrayLiteralExpression(node); + case 211 /* ObjectLiteralExpression */: + return visitObjectLiteralExpression(node); + case 213 /* ElementAccessExpression */: + return visitElementAccessExpression(node); + case 214 /* CallExpression */: + return visitCallExpression(node); + case 215 /* NewExpression */: + return visitNewExpression(node); + default: + return visitEachChild(node, visitor, context); + } + } + function visitGenerator(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + return visitFunctionDeclaration(node); + case 219 /* FunctionExpression */: + return visitFunctionExpression(node); + default: + return Debug.failBadSyntaxKind(node); + } + } + function visitFunctionDeclaration(node) { + if (node.asteriskToken) { + node = setOriginalNode( + setTextRange( + factory2.createFunctionDeclaration( + node.modifiers, + /*asteriskToken*/ + void 0, + node.name, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + transformGeneratorFunctionBody(node.body) + ), + /*location*/ + node + ), + node + ); + } else { + const savedInGeneratorFunctionBody = inGeneratorFunctionBody; + const savedInStatementContainingYield = inStatementContainingYield; + inGeneratorFunctionBody = false; + inStatementContainingYield = false; + node = visitEachChild(node, visitor, context); + inGeneratorFunctionBody = savedInGeneratorFunctionBody; + inStatementContainingYield = savedInStatementContainingYield; + } + if (inGeneratorFunctionBody) { + hoistFunctionDeclaration(node); + return void 0; + } else { + return node; + } + } + function visitFunctionExpression(node) { + if (node.asteriskToken) { + node = setOriginalNode( + setTextRange( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + node.name, + /*typeParameters*/ + void 0, + visitParameterList(node.parameters, visitor, context), + /*type*/ + void 0, + transformGeneratorFunctionBody(node.body) + ), + /*location*/ + node + ), + node + ); + } else { + const savedInGeneratorFunctionBody = inGeneratorFunctionBody; + const savedInStatementContainingYield = inStatementContainingYield; + inGeneratorFunctionBody = false; + inStatementContainingYield = false; + node = visitEachChild(node, visitor, context); + inGeneratorFunctionBody = savedInGeneratorFunctionBody; + inStatementContainingYield = savedInStatementContainingYield; + } + return node; + } + function visitAccessorDeclaration(node) { + const savedInGeneratorFunctionBody = inGeneratorFunctionBody; + const savedInStatementContainingYield = inStatementContainingYield; + inGeneratorFunctionBody = false; + inStatementContainingYield = false; + node = visitEachChild(node, visitor, context); + inGeneratorFunctionBody = savedInGeneratorFunctionBody; + inStatementContainingYield = savedInStatementContainingYield; + return node; + } + function transformGeneratorFunctionBody(body) { + const statements2 = []; + const savedInGeneratorFunctionBody = inGeneratorFunctionBody; + const savedInStatementContainingYield = inStatementContainingYield; + const savedBlocks = blocks; + const savedBlockOffsets = blockOffsets; + const savedBlockActions = blockActions; + const savedBlockStack = blockStack; + const savedLabelOffsets = labelOffsets; + const savedLabelExpressions = labelExpressions; + const savedNextLabelId = nextLabelId; + const savedOperations = operations; + const savedOperationArguments = operationArguments; + const savedOperationLocations = operationLocations; + const savedState = state; + inGeneratorFunctionBody = true; + inStatementContainingYield = false; + blocks = void 0; + blockOffsets = void 0; + blockActions = void 0; + blockStack = void 0; + labelOffsets = void 0; + labelExpressions = void 0; + nextLabelId = 1; + operations = void 0; + operationArguments = void 0; + operationLocations = void 0; + state = factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + resumeLexicalEnvironment(); + const statementOffset = factory2.copyPrologue( + body.statements, + statements2, + /*ensureUseStrict*/ + false, + visitor + ); + transformAndEmitStatements(body.statements, statementOffset); + const buildResult = build2(); + insertStatementsAfterStandardPrologue(statements2, endLexicalEnvironment()); + statements2.push(factory2.createReturnStatement(buildResult)); + inGeneratorFunctionBody = savedInGeneratorFunctionBody; + inStatementContainingYield = savedInStatementContainingYield; + blocks = savedBlocks; + blockOffsets = savedBlockOffsets; + blockActions = savedBlockActions; + blockStack = savedBlockStack; + labelOffsets = savedLabelOffsets; + labelExpressions = savedLabelExpressions; + nextLabelId = savedNextLabelId; + operations = savedOperations; + operationArguments = savedOperationArguments; + operationLocations = savedOperationLocations; + state = savedState; + return setTextRange(factory2.createBlock(statements2, body.multiLine), body); + } + function visitVariableStatement(node) { + if (node.transformFlags & 1048576 /* ContainsYield */) { + transformAndEmitVariableDeclarationList(node.declarationList); + return void 0; + } else { + if (getEmitFlags(node) & 2097152 /* CustomPrologue */) { + return node; + } + for (const variable of node.declarationList.declarations) { + hoistVariableDeclaration(variable.name); + } + const variables = getInitializedVariables(node.declarationList); + if (variables.length === 0) { + return void 0; + } + return setSourceMapRange( + factory2.createExpressionStatement( + factory2.inlineExpressions( + map(variables, transformInitializedVariable) + ) + ), + node + ); + } + } + function visitBinaryExpression(node) { + const assoc = getExpressionAssociativity(node); + switch (assoc) { + case 0 /* Left */: + return visitLeftAssociativeBinaryExpression(node); + case 1 /* Right */: + return visitRightAssociativeBinaryExpression(node); + default: + return Debug.assertNever(assoc); + } + } + function visitRightAssociativeBinaryExpression(node) { + const { left, right } = node; + if (containsYield(right)) { + let target; + switch (left.kind) { + case 212 /* PropertyAccessExpression */: + target = factory2.updatePropertyAccessExpression( + left, + cacheExpression(Debug.checkDefined(visitNode(left.expression, visitor, isLeftHandSideExpression))), + left.name + ); + break; + case 213 /* ElementAccessExpression */: + target = factory2.updateElementAccessExpression(left, cacheExpression(Debug.checkDefined(visitNode(left.expression, visitor, isLeftHandSideExpression))), cacheExpression(Debug.checkDefined(visitNode(left.argumentExpression, visitor, isExpression)))); + break; + default: + target = Debug.checkDefined(visitNode(left, visitor, isExpression)); + break; + } + const operator = node.operatorToken.kind; + if (isCompoundAssignment(operator)) { + return setTextRange( + factory2.createAssignment( + target, + setTextRange( + factory2.createBinaryExpression( + cacheExpression(target), + getNonAssignmentOperatorForCompoundAssignment(operator), + Debug.checkDefined(visitNode(right, visitor, isExpression)) + ), + node + ) + ), + node + ); + } else { + return factory2.updateBinaryExpression(node, target, node.operatorToken, Debug.checkDefined(visitNode(right, visitor, isExpression))); + } + } + return visitEachChild(node, visitor, context); + } + function visitLeftAssociativeBinaryExpression(node) { + if (containsYield(node.right)) { + if (isLogicalOperator(node.operatorToken.kind)) { + return visitLogicalBinaryExpression(node); + } else if (node.operatorToken.kind === 28 /* CommaToken */) { + return visitCommaExpression(node); + } + return factory2.updateBinaryExpression(node, cacheExpression(Debug.checkDefined(visitNode(node.left, visitor, isExpression))), node.operatorToken, Debug.checkDefined(visitNode(node.right, visitor, isExpression))); + } + return visitEachChild(node, visitor, context); + } + function visitCommaExpression(node) { + let pendingExpressions = []; + visit(node.left); + visit(node.right); + return factory2.inlineExpressions(pendingExpressions); + function visit(node2) { + if (isBinaryExpression(node2) && node2.operatorToken.kind === 28 /* CommaToken */) { + visit(node2.left); + visit(node2.right); + } else { + if (containsYield(node2) && pendingExpressions.length > 0) { + emitWorker(1 /* Statement */, [factory2.createExpressionStatement(factory2.inlineExpressions(pendingExpressions))]); + pendingExpressions = []; + } + pendingExpressions.push(Debug.checkDefined(visitNode(node2, visitor, isExpression))); + } + } + } + function visitCommaListExpression(node) { + let pendingExpressions = []; + for (const elem of node.elements) { + if (isBinaryExpression(elem) && elem.operatorToken.kind === 28 /* CommaToken */) { + pendingExpressions.push(visitCommaExpression(elem)); + } else { + if (containsYield(elem) && pendingExpressions.length > 0) { + emitWorker(1 /* Statement */, [factory2.createExpressionStatement(factory2.inlineExpressions(pendingExpressions))]); + pendingExpressions = []; + } + pendingExpressions.push(Debug.checkDefined(visitNode(elem, visitor, isExpression))); + } + } + return factory2.inlineExpressions(pendingExpressions); + } + function visitLogicalBinaryExpression(node) { + const resultLabel = defineLabel(); + const resultLocal = declareLocal(); + emitAssignment( + resultLocal, + Debug.checkDefined(visitNode(node.left, visitor, isExpression)), + /*location*/ + node.left + ); + if (node.operatorToken.kind === 56 /* AmpersandAmpersandToken */) { + emitBreakWhenFalse( + resultLabel, + resultLocal, + /*location*/ + node.left + ); + } else { + emitBreakWhenTrue( + resultLabel, + resultLocal, + /*location*/ + node.left + ); + } + emitAssignment( + resultLocal, + Debug.checkDefined(visitNode(node.right, visitor, isExpression)), + /*location*/ + node.right + ); + markLabel(resultLabel); + return resultLocal; + } + function visitConditionalExpression(node) { + if (containsYield(node.whenTrue) || containsYield(node.whenFalse)) { + const whenFalseLabel = defineLabel(); + const resultLabel = defineLabel(); + const resultLocal = declareLocal(); + emitBreakWhenFalse( + whenFalseLabel, + Debug.checkDefined(visitNode(node.condition, visitor, isExpression)), + /*location*/ + node.condition + ); + emitAssignment( + resultLocal, + Debug.checkDefined(visitNode(node.whenTrue, visitor, isExpression)), + /*location*/ + node.whenTrue + ); + emitBreak(resultLabel); + markLabel(whenFalseLabel); + emitAssignment( + resultLocal, + Debug.checkDefined(visitNode(node.whenFalse, visitor, isExpression)), + /*location*/ + node.whenFalse + ); + markLabel(resultLabel); + return resultLocal; + } + return visitEachChild(node, visitor, context); + } + function visitYieldExpression(node) { + const resumeLabel = defineLabel(); + const expression = visitNode(node.expression, visitor, isExpression); + if (node.asteriskToken) { + const iterator = (getEmitFlags(node.expression) & 8388608 /* Iterator */) === 0 ? setTextRange(emitHelpers().createValuesHelper(expression), node) : expression; + emitYieldStar( + iterator, + /*location*/ + node + ); + } else { + emitYield( + expression, + /*location*/ + node + ); + } + markLabel(resumeLabel); + return createGeneratorResume( + /*location*/ + node + ); + } + function visitArrayLiteralExpression(node) { + return visitElements( + node.elements, + /*leadingElement*/ + void 0, + /*location*/ + void 0, + node.multiLine + ); + } + function visitElements(elements, leadingElement, location, multiLine) { + const numInitialElements = countInitialNodesWithoutYield(elements); + let temp; + if (numInitialElements > 0) { + temp = declareLocal(); + const initialElements = visitNodes2(elements, visitor, isExpression, 0, numInitialElements); + emitAssignment( + temp, + factory2.createArrayLiteralExpression( + leadingElement ? [leadingElement, ...initialElements] : initialElements + ) + ); + leadingElement = void 0; + } + const expressions = reduceLeft(elements, reduceElement, [], numInitialElements); + return temp ? factory2.createArrayConcatCall(temp, [factory2.createArrayLiteralExpression(expressions, multiLine)]) : setTextRange( + factory2.createArrayLiteralExpression(leadingElement ? [leadingElement, ...expressions] : expressions, multiLine), + location + ); + function reduceElement(expressions2, element) { + if (containsYield(element) && expressions2.length > 0) { + const hasAssignedTemp = temp !== void 0; + if (!temp) { + temp = declareLocal(); + } + emitAssignment( + temp, + hasAssignedTemp ? factory2.createArrayConcatCall( + temp, + [factory2.createArrayLiteralExpression(expressions2, multiLine)] + ) : factory2.createArrayLiteralExpression( + leadingElement ? [leadingElement, ...expressions2] : expressions2, + multiLine + ) + ); + leadingElement = void 0; + expressions2 = []; + } + expressions2.push(Debug.checkDefined(visitNode(element, visitor, isExpression))); + return expressions2; + } + } + function visitObjectLiteralExpression(node) { + const properties = node.properties; + const multiLine = node.multiLine; + const numInitialProperties = countInitialNodesWithoutYield(properties); + const temp = declareLocal(); + emitAssignment( + temp, + factory2.createObjectLiteralExpression( + visitNodes2(properties, visitor, isObjectLiteralElementLike, 0, numInitialProperties), + multiLine + ) + ); + const expressions = reduceLeft(properties, reduceProperty, [], numInitialProperties); + expressions.push(multiLine ? startOnNewLine(setParent(setTextRange(factory2.cloneNode(temp), temp), temp.parent)) : temp); + return factory2.inlineExpressions(expressions); + function reduceProperty(expressions2, property) { + if (containsYield(property) && expressions2.length > 0) { + emitStatement(factory2.createExpressionStatement(factory2.inlineExpressions(expressions2))); + expressions2 = []; + } + const expression = createExpressionForObjectLiteralElementLike(factory2, node, property, temp); + const visited = visitNode(expression, visitor, isExpression); + if (visited) { + if (multiLine) { + startOnNewLine(visited); + } + expressions2.push(visited); + } + return expressions2; + } + } + function visitElementAccessExpression(node) { + if (containsYield(node.argumentExpression)) { + return factory2.updateElementAccessExpression(node, cacheExpression(Debug.checkDefined(visitNode(node.expression, visitor, isLeftHandSideExpression))), Debug.checkDefined(visitNode(node.argumentExpression, visitor, isExpression))); + } + return visitEachChild(node, visitor, context); + } + function visitCallExpression(node) { + if (!isImportCall(node) && forEach(node.arguments, containsYield)) { + const { target, thisArg } = factory2.createCallBinding( + node.expression, + hoistVariableDeclaration, + languageVersion, + /*cacheIdentifiers*/ + true + ); + return setOriginalNode( + setTextRange( + factory2.createFunctionApplyCall( + cacheExpression(Debug.checkDefined(visitNode(target, visitor, isLeftHandSideExpression))), + thisArg, + visitElements(node.arguments) + ), + node + ), + node + ); + } + return visitEachChild(node, visitor, context); + } + function visitNewExpression(node) { + if (forEach(node.arguments, containsYield)) { + const { target, thisArg } = factory2.createCallBinding(factory2.createPropertyAccessExpression(node.expression, "bind"), hoistVariableDeclaration); + return setOriginalNode( + setTextRange( + factory2.createNewExpression( + factory2.createFunctionApplyCall( + cacheExpression(Debug.checkDefined(visitNode(target, visitor, isExpression))), + thisArg, + visitElements( + node.arguments, + /*leadingElement*/ + factory2.createVoidZero() + ) + ), + /*typeArguments*/ + void 0, + [] + ), + node + ), + node + ); + } + return visitEachChild(node, visitor, context); + } + function transformAndEmitStatements(statements2, start = 0) { + const numStatements = statements2.length; + for (let i = start; i < numStatements; i++) { + transformAndEmitStatement(statements2[i]); + } + } + function transformAndEmitEmbeddedStatement(node) { + if (isBlock(node)) { + transformAndEmitStatements(node.statements); + } else { + transformAndEmitStatement(node); + } + } + function transformAndEmitStatement(node) { + const savedInStatementContainingYield = inStatementContainingYield; + if (!inStatementContainingYield) { + inStatementContainingYield = containsYield(node); + } + transformAndEmitStatementWorker(node); + inStatementContainingYield = savedInStatementContainingYield; + } + function transformAndEmitStatementWorker(node) { + switch (node.kind) { + case 242 /* Block */: + return transformAndEmitBlock(node); + case 245 /* ExpressionStatement */: + return transformAndEmitExpressionStatement(node); + case 246 /* IfStatement */: + return transformAndEmitIfStatement(node); + case 247 /* DoStatement */: + return transformAndEmitDoStatement(node); + case 248 /* WhileStatement */: + return transformAndEmitWhileStatement(node); + case 249 /* ForStatement */: + return transformAndEmitForStatement(node); + case 250 /* ForInStatement */: + return transformAndEmitForInStatement(node); + case 252 /* ContinueStatement */: + return transformAndEmitContinueStatement(node); + case 253 /* BreakStatement */: + return transformAndEmitBreakStatement(node); + case 254 /* ReturnStatement */: + return transformAndEmitReturnStatement(node); + case 255 /* WithStatement */: + return transformAndEmitWithStatement(node); + case 256 /* SwitchStatement */: + return transformAndEmitSwitchStatement(node); + case 257 /* LabeledStatement */: + return transformAndEmitLabeledStatement(node); + case 258 /* ThrowStatement */: + return transformAndEmitThrowStatement(node); + case 259 /* TryStatement */: + return transformAndEmitTryStatement(node); + default: + return emitStatement(visitNode(node, visitor, isStatement)); + } + } + function transformAndEmitBlock(node) { + if (containsYield(node)) { + transformAndEmitStatements(node.statements); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function transformAndEmitExpressionStatement(node) { + emitStatement(visitNode(node, visitor, isStatement)); + } + function transformAndEmitVariableDeclarationList(node) { + for (const variable of node.declarations) { + const name = factory2.cloneNode(variable.name); + setCommentRange(name, variable.name); + hoistVariableDeclaration(name); + } + const variables = getInitializedVariables(node); + const numVariables = variables.length; + let variablesWritten = 0; + let pendingExpressions = []; + while (variablesWritten < numVariables) { + for (let i = variablesWritten; i < numVariables; i++) { + const variable = variables[i]; + if (containsYield(variable.initializer) && pendingExpressions.length > 0) { + break; + } + pendingExpressions.push(transformInitializedVariable(variable)); + } + if (pendingExpressions.length) { + emitStatement(factory2.createExpressionStatement(factory2.inlineExpressions(pendingExpressions))); + variablesWritten += pendingExpressions.length; + pendingExpressions = []; + } + } + return void 0; + } + function transformInitializedVariable(node) { + return setSourceMapRange( + factory2.createAssignment( + setSourceMapRange(factory2.cloneNode(node.name), node.name), + Debug.checkDefined(visitNode(node.initializer, visitor, isExpression)) + ), + node + ); + } + function transformAndEmitIfStatement(node) { + if (containsYield(node)) { + if (containsYield(node.thenStatement) || containsYield(node.elseStatement)) { + const endLabel = defineLabel(); + const elseLabel = node.elseStatement ? defineLabel() : void 0; + emitBreakWhenFalse( + node.elseStatement ? elseLabel : endLabel, + Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), + /*location*/ + node.expression + ); + transformAndEmitEmbeddedStatement(node.thenStatement); + if (node.elseStatement) { + emitBreak(endLabel); + markLabel(elseLabel); + transformAndEmitEmbeddedStatement(node.elseStatement); + } + markLabel(endLabel); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function transformAndEmitDoStatement(node) { + if (containsYield(node)) { + const conditionLabel = defineLabel(); + const loopLabel = defineLabel(); + beginLoopBlock( + /*continueLabel*/ + conditionLabel + ); + markLabel(loopLabel); + transformAndEmitEmbeddedStatement(node.statement); + markLabel(conditionLabel); + emitBreakWhenTrue(loopLabel, Debug.checkDefined(visitNode(node.expression, visitor, isExpression))); + endLoopBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function visitDoStatement(node) { + if (inStatementContainingYield) { + beginScriptLoopBlock(); + node = visitEachChild(node, visitor, context); + endLoopBlock(); + return node; + } else { + return visitEachChild(node, visitor, context); + } + } + function transformAndEmitWhileStatement(node) { + if (containsYield(node)) { + const loopLabel = defineLabel(); + const endLabel = beginLoopBlock(loopLabel); + markLabel(loopLabel); + emitBreakWhenFalse(endLabel, Debug.checkDefined(visitNode(node.expression, visitor, isExpression))); + transformAndEmitEmbeddedStatement(node.statement); + emitBreak(loopLabel); + endLoopBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function visitWhileStatement(node) { + if (inStatementContainingYield) { + beginScriptLoopBlock(); + node = visitEachChild(node, visitor, context); + endLoopBlock(); + return node; + } else { + return visitEachChild(node, visitor, context); + } + } + function transformAndEmitForStatement(node) { + if (containsYield(node)) { + const conditionLabel = defineLabel(); + const incrementLabel = defineLabel(); + const endLabel = beginLoopBlock(incrementLabel); + if (node.initializer) { + const initializer = node.initializer; + if (isVariableDeclarationList(initializer)) { + transformAndEmitVariableDeclarationList(initializer); + } else { + emitStatement( + setTextRange( + factory2.createExpressionStatement( + Debug.checkDefined(visitNode(initializer, visitor, isExpression)) + ), + initializer + ) + ); + } + } + markLabel(conditionLabel); + if (node.condition) { + emitBreakWhenFalse(endLabel, Debug.checkDefined(visitNode(node.condition, visitor, isExpression))); + } + transformAndEmitEmbeddedStatement(node.statement); + markLabel(incrementLabel); + if (node.incrementor) { + emitStatement( + setTextRange( + factory2.createExpressionStatement( + Debug.checkDefined(visitNode(node.incrementor, visitor, isExpression)) + ), + node.incrementor + ) + ); + } + emitBreak(conditionLabel); + endLoopBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function visitForStatement(node) { + if (inStatementContainingYield) { + beginScriptLoopBlock(); + } + const initializer = node.initializer; + if (initializer && isVariableDeclarationList(initializer)) { + for (const variable of initializer.declarations) { + hoistVariableDeclaration(variable.name); + } + const variables = getInitializedVariables(initializer); + node = factory2.updateForStatement( + node, + variables.length > 0 ? factory2.inlineExpressions(map(variables, transformInitializedVariable)) : void 0, + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, visitor, isExpression), + visitIterationBody(node.statement, visitor, context) + ); + } else { + node = visitEachChild(node, visitor, context); + } + if (inStatementContainingYield) { + endLoopBlock(); + } + return node; + } + function transformAndEmitForInStatement(node) { + if (containsYield(node)) { + const obj = declareLocal(); + const keysArray = declareLocal(); + const key = declareLocal(); + const keysIndex = factory2.createLoopVariable(); + const initializer = node.initializer; + hoistVariableDeclaration(keysIndex); + emitAssignment(obj, Debug.checkDefined(visitNode(node.expression, visitor, isExpression))); + emitAssignment(keysArray, factory2.createArrayLiteralExpression()); + emitStatement( + factory2.createForInStatement( + key, + obj, + factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createPropertyAccessExpression(keysArray, "push"), + /*typeArguments*/ + void 0, + [key] + ) + ) + ) + ); + emitAssignment(keysIndex, factory2.createNumericLiteral(0)); + const conditionLabel = defineLabel(); + const incrementLabel = defineLabel(); + const endLoopLabel = beginLoopBlock(incrementLabel); + markLabel(conditionLabel); + emitBreakWhenFalse(endLoopLabel, factory2.createLessThan(keysIndex, factory2.createPropertyAccessExpression(keysArray, "length"))); + emitAssignment(key, factory2.createElementAccessExpression(keysArray, keysIndex)); + emitBreakWhenFalse(incrementLabel, factory2.createBinaryExpression(key, 103 /* InKeyword */, obj)); + let variable; + if (isVariableDeclarationList(initializer)) { + for (const variable2 of initializer.declarations) { + hoistVariableDeclaration(variable2.name); + } + variable = factory2.cloneNode(initializer.declarations[0].name); + } else { + variable = Debug.checkDefined(visitNode(initializer, visitor, isExpression)); + Debug.assert(isLeftHandSideExpression(variable)); + } + emitAssignment(variable, key); + transformAndEmitEmbeddedStatement(node.statement); + markLabel(incrementLabel); + emitStatement(factory2.createExpressionStatement(factory2.createPostfixIncrement(keysIndex))); + emitBreak(conditionLabel); + endLoopBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function visitForInStatement(node) { + if (inStatementContainingYield) { + beginScriptLoopBlock(); + } + const initializer = node.initializer; + if (isVariableDeclarationList(initializer)) { + for (const variable of initializer.declarations) { + hoistVariableDeclaration(variable.name); + } + node = factory2.updateForInStatement(node, initializer.declarations[0].name, Debug.checkDefined(visitNode(node.expression, visitor, isExpression)), Debug.checkDefined(visitNode(node.statement, visitor, isStatement, factory2.liftToBlock))); + } else { + node = visitEachChild(node, visitor, context); + } + if (inStatementContainingYield) { + endLoopBlock(); + } + return node; + } + function transformAndEmitContinueStatement(node) { + const label = findContinueTarget(node.label ? idText(node.label) : void 0); + if (label > 0) { + emitBreak( + label, + /*location*/ + node + ); + } else { + emitStatement(node); + } + } + function visitContinueStatement(node) { + if (inStatementContainingYield) { + const label = findContinueTarget(node.label && idText(node.label)); + if (label > 0) { + return createInlineBreak( + label, + /*location*/ + node + ); + } + } + return visitEachChild(node, visitor, context); + } + function transformAndEmitBreakStatement(node) { + const label = findBreakTarget(node.label ? idText(node.label) : void 0); + if (label > 0) { + emitBreak( + label, + /*location*/ + node + ); + } else { + emitStatement(node); + } + } + function visitBreakStatement(node) { + if (inStatementContainingYield) { + const label = findBreakTarget(node.label && idText(node.label)); + if (label > 0) { + return createInlineBreak( + label, + /*location*/ + node + ); + } + } + return visitEachChild(node, visitor, context); + } + function transformAndEmitReturnStatement(node) { + emitReturn( + visitNode(node.expression, visitor, isExpression), + /*location*/ + node + ); + } + function visitReturnStatement(node) { + return createInlineReturn( + visitNode(node.expression, visitor, isExpression), + /*location*/ + node + ); + } + function transformAndEmitWithStatement(node) { + if (containsYield(node)) { + beginWithBlock(cacheExpression(Debug.checkDefined(visitNode(node.expression, visitor, isExpression)))); + transformAndEmitEmbeddedStatement(node.statement); + endWithBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function transformAndEmitSwitchStatement(node) { + if (containsYield(node.caseBlock)) { + const caseBlock = node.caseBlock; + const numClauses = caseBlock.clauses.length; + const endLabel = beginSwitchBlock(); + const expression = cacheExpression(Debug.checkDefined(visitNode(node.expression, visitor, isExpression))); + const clauseLabels = []; + let defaultClauseIndex = -1; + for (let i = 0; i < numClauses; i++) { + const clause = caseBlock.clauses[i]; + clauseLabels.push(defineLabel()); + if (clause.kind === 298 /* DefaultClause */ && defaultClauseIndex === -1) { + defaultClauseIndex = i; + } + } + let clausesWritten = 0; + let pendingClauses = []; + while (clausesWritten < numClauses) { + let defaultClausesSkipped = 0; + for (let i = clausesWritten; i < numClauses; i++) { + const clause = caseBlock.clauses[i]; + if (clause.kind === 297 /* CaseClause */) { + if (containsYield(clause.expression) && pendingClauses.length > 0) { + break; + } + pendingClauses.push( + factory2.createCaseClause( + Debug.checkDefined(visitNode(clause.expression, visitor, isExpression)), + [ + createInlineBreak( + clauseLabels[i], + /*location*/ + clause.expression + ) + ] + ) + ); + } else { + defaultClausesSkipped++; + } + } + if (pendingClauses.length) { + emitStatement(factory2.createSwitchStatement(expression, factory2.createCaseBlock(pendingClauses))); + clausesWritten += pendingClauses.length; + pendingClauses = []; + } + if (defaultClausesSkipped > 0) { + clausesWritten += defaultClausesSkipped; + defaultClausesSkipped = 0; + } + } + if (defaultClauseIndex >= 0) { + emitBreak(clauseLabels[defaultClauseIndex]); + } else { + emitBreak(endLabel); + } + for (let i = 0; i < numClauses; i++) { + markLabel(clauseLabels[i]); + transformAndEmitStatements(caseBlock.clauses[i].statements); + } + endSwitchBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function visitSwitchStatement(node) { + if (inStatementContainingYield) { + beginScriptSwitchBlock(); + } + node = visitEachChild(node, visitor, context); + if (inStatementContainingYield) { + endSwitchBlock(); + } + return node; + } + function transformAndEmitLabeledStatement(node) { + if (containsYield(node)) { + beginLabeledBlock(idText(node.label)); + transformAndEmitEmbeddedStatement(node.statement); + endLabeledBlock(); + } else { + emitStatement(visitNode(node, visitor, isStatement)); + } + } + function visitLabeledStatement(node) { + if (inStatementContainingYield) { + beginScriptLabeledBlock(idText(node.label)); + } + node = visitEachChild(node, visitor, context); + if (inStatementContainingYield) { + endLabeledBlock(); + } + return node; + } + function transformAndEmitThrowStatement(node) { + emitThrow( + Debug.checkDefined(visitNode(node.expression ?? factory2.createVoidZero(), visitor, isExpression)), + /*location*/ + node + ); + } + function transformAndEmitTryStatement(node) { + if (containsYield(node)) { + beginExceptionBlock(); + transformAndEmitEmbeddedStatement(node.tryBlock); + if (node.catchClause) { + beginCatchBlock(node.catchClause.variableDeclaration); + transformAndEmitEmbeddedStatement(node.catchClause.block); + } + if (node.finallyBlock) { + beginFinallyBlock(); + transformAndEmitEmbeddedStatement(node.finallyBlock); + } + endExceptionBlock(); + } else { + emitStatement(visitEachChild(node, visitor, context)); + } + } + function containsYield(node) { + return !!node && (node.transformFlags & 1048576 /* ContainsYield */) !== 0; + } + function countInitialNodesWithoutYield(nodes) { + const numNodes = nodes.length; + for (let i = 0; i < numNodes; i++) { + if (containsYield(nodes[i])) { + return i; + } + } + return -1; + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } + return node; + } + function substituteExpression(node) { + if (isIdentifier(node)) { + return substituteExpressionIdentifier(node); + } + return node; + } + function substituteExpressionIdentifier(node) { + if (!isGeneratedIdentifier(node) && renamedCatchVariables && renamedCatchVariables.has(idText(node))) { + const original = getOriginalNode(node); + if (isIdentifier(original) && original.parent) { + const declaration = resolver.getReferencedValueDeclaration(original); + if (declaration) { + const name = renamedCatchVariableDeclarations[getOriginalNodeId(declaration)]; + if (name) { + const clone2 = setParent(setTextRange(factory2.cloneNode(name), name), name.parent); + setSourceMapRange(clone2, node); + setCommentRange(clone2, node); + return clone2; + } + } + } + } + return node; + } + function cacheExpression(node) { + if (isGeneratedIdentifier(node) || getEmitFlags(node) & 8192 /* HelperName */) { + return node; + } + const temp = factory2.createTempVariable(hoistVariableDeclaration); + emitAssignment( + temp, + node, + /*location*/ + node + ); + return temp; + } + function declareLocal(name) { + const temp = name ? factory2.createUniqueName(name) : factory2.createTempVariable( + /*recordTempVariable*/ + void 0 + ); + hoistVariableDeclaration(temp); + return temp; + } + function defineLabel() { + if (!labelOffsets) { + labelOffsets = []; + } + const label = nextLabelId; + nextLabelId++; + labelOffsets[label] = -1; + return label; + } + function markLabel(label) { + Debug.assert(labelOffsets !== void 0, "No labels were defined."); + labelOffsets[label] = operations ? operations.length : 0; + } + function beginBlock(block) { + if (!blocks) { + blocks = []; + blockActions = []; + blockOffsets = []; + blockStack = []; + } + const index = blockActions.length; + blockActions[index] = 0 /* Open */; + blockOffsets[index] = operations ? operations.length : 0; + blocks[index] = block; + blockStack.push(block); + return index; + } + function endBlock() { + const block = peekBlock(); + if (block === void 0) return Debug.fail("beginBlock was never called."); + const index = blockActions.length; + blockActions[index] = 1 /* Close */; + blockOffsets[index] = operations ? operations.length : 0; + blocks[index] = block; + blockStack.pop(); + return block; + } + function peekBlock() { + return lastOrUndefined(blockStack); + } + function peekBlockKind() { + const block = peekBlock(); + return block && block.kind; + } + function beginWithBlock(expression) { + const startLabel = defineLabel(); + const endLabel = defineLabel(); + markLabel(startLabel); + beginBlock({ + kind: 1 /* With */, + expression, + startLabel, + endLabel + }); + } + function endWithBlock() { + Debug.assert(peekBlockKind() === 1 /* With */); + const block = endBlock(); + markLabel(block.endLabel); + } + function beginExceptionBlock() { + const startLabel = defineLabel(); + const endLabel = defineLabel(); + markLabel(startLabel); + beginBlock({ + kind: 0 /* Exception */, + state: 0 /* Try */, + startLabel, + endLabel + }); + emitNop(); + return endLabel; + } + function beginCatchBlock(variable) { + Debug.assert(peekBlockKind() === 0 /* Exception */); + let name; + if (isGeneratedIdentifier(variable.name)) { + name = variable.name; + hoistVariableDeclaration(variable.name); + } else { + const text = idText(variable.name); + name = declareLocal(text); + if (!renamedCatchVariables) { + renamedCatchVariables = /* @__PURE__ */ new Map(); + renamedCatchVariableDeclarations = []; + context.enableSubstitution(80 /* Identifier */); + } + renamedCatchVariables.set(text, true); + renamedCatchVariableDeclarations[getOriginalNodeId(variable)] = name; + } + const exception = peekBlock(); + Debug.assert(exception.state < 1 /* Catch */); + const endLabel = exception.endLabel; + emitBreak(endLabel); + const catchLabel = defineLabel(); + markLabel(catchLabel); + exception.state = 1 /* Catch */; + exception.catchVariable = name; + exception.catchLabel = catchLabel; + emitAssignment(name, factory2.createCallExpression( + factory2.createPropertyAccessExpression(state, "sent"), + /*typeArguments*/ + void 0, + [] + )); + emitNop(); + } + function beginFinallyBlock() { + Debug.assert(peekBlockKind() === 0 /* Exception */); + const exception = peekBlock(); + Debug.assert(exception.state < 2 /* Finally */); + const endLabel = exception.endLabel; + emitBreak(endLabel); + const finallyLabel = defineLabel(); + markLabel(finallyLabel); + exception.state = 2 /* Finally */; + exception.finallyLabel = finallyLabel; + } + function endExceptionBlock() { + Debug.assert(peekBlockKind() === 0 /* Exception */); + const exception = endBlock(); + const state2 = exception.state; + if (state2 < 2 /* Finally */) { + emitBreak(exception.endLabel); + } else { + emitEndfinally(); + } + markLabel(exception.endLabel); + emitNop(); + exception.state = 3 /* Done */; + } + function beginScriptLoopBlock() { + beginBlock({ + kind: 3 /* Loop */, + isScript: true, + breakLabel: -1, + continueLabel: -1 + }); + } + function beginLoopBlock(continueLabel) { + const breakLabel = defineLabel(); + beginBlock({ + kind: 3 /* Loop */, + isScript: false, + breakLabel, + continueLabel + }); + return breakLabel; + } + function endLoopBlock() { + Debug.assert(peekBlockKind() === 3 /* Loop */); + const block = endBlock(); + const breakLabel = block.breakLabel; + if (!block.isScript) { + markLabel(breakLabel); + } + } + function beginScriptSwitchBlock() { + beginBlock({ + kind: 2 /* Switch */, + isScript: true, + breakLabel: -1 + }); + } + function beginSwitchBlock() { + const breakLabel = defineLabel(); + beginBlock({ + kind: 2 /* Switch */, + isScript: false, + breakLabel + }); + return breakLabel; + } + function endSwitchBlock() { + Debug.assert(peekBlockKind() === 2 /* Switch */); + const block = endBlock(); + const breakLabel = block.breakLabel; + if (!block.isScript) { + markLabel(breakLabel); + } + } + function beginScriptLabeledBlock(labelText) { + beginBlock({ + kind: 4 /* Labeled */, + isScript: true, + labelText, + breakLabel: -1 + }); + } + function beginLabeledBlock(labelText) { + const breakLabel = defineLabel(); + beginBlock({ + kind: 4 /* Labeled */, + isScript: false, + labelText, + breakLabel + }); + } + function endLabeledBlock() { + Debug.assert(peekBlockKind() === 4 /* Labeled */); + const block = endBlock(); + if (!block.isScript) { + markLabel(block.breakLabel); + } + } + function supportsUnlabeledBreak(block) { + return block.kind === 2 /* Switch */ || block.kind === 3 /* Loop */; + } + function supportsLabeledBreakOrContinue(block) { + return block.kind === 4 /* Labeled */; + } + function supportsUnlabeledContinue(block) { + return block.kind === 3 /* Loop */; + } + function hasImmediateContainingLabeledBlock(labelText, start) { + for (let j = start; j >= 0; j--) { + const containingBlock = blockStack[j]; + if (supportsLabeledBreakOrContinue(containingBlock)) { + if (containingBlock.labelText === labelText) { + return true; + } + } else { + break; + } + } + return false; + } + function findBreakTarget(labelText) { + if (blockStack) { + if (labelText) { + for (let i = blockStack.length - 1; i >= 0; i--) { + const block = blockStack[i]; + if (supportsLabeledBreakOrContinue(block) && block.labelText === labelText) { + return block.breakLabel; + } else if (supportsUnlabeledBreak(block) && hasImmediateContainingLabeledBlock(labelText, i - 1)) { + return block.breakLabel; + } + } + } else { + for (let i = blockStack.length - 1; i >= 0; i--) { + const block = blockStack[i]; + if (supportsUnlabeledBreak(block)) { + return block.breakLabel; + } + } + } + } + return 0; + } + function findContinueTarget(labelText) { + if (blockStack) { + if (labelText) { + for (let i = blockStack.length - 1; i >= 0; i--) { + const block = blockStack[i]; + if (supportsUnlabeledContinue(block) && hasImmediateContainingLabeledBlock(labelText, i - 1)) { + return block.continueLabel; + } + } + } else { + for (let i = blockStack.length - 1; i >= 0; i--) { + const block = blockStack[i]; + if (supportsUnlabeledContinue(block)) { + return block.continueLabel; + } + } + } + } + return 0; + } + function createLabel(label) { + if (label !== void 0 && label > 0) { + if (labelExpressions === void 0) { + labelExpressions = []; + } + const expression = factory2.createNumericLiteral(Number.MAX_SAFE_INTEGER); + if (labelExpressions[label] === void 0) { + labelExpressions[label] = [expression]; + } else { + labelExpressions[label].push(expression); + } + return expression; + } + return factory2.createOmittedExpression(); + } + function createInstruction(instruction) { + const literal = factory2.createNumericLiteral(instruction); + addSyntheticTrailingComment(literal, 3 /* MultiLineCommentTrivia */, getInstructionName(instruction)); + return literal; + } + function createInlineBreak(label, location) { + Debug.assertLessThan(0, label, "Invalid label"); + return setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression([ + createInstruction(3 /* Break */), + createLabel(label) + ]) + ), + location + ); + } + function createInlineReturn(expression, location) { + return setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression( + expression ? [createInstruction(2 /* Return */), expression] : [createInstruction(2 /* Return */)] + ) + ), + location + ); + } + function createGeneratorResume(location) { + return setTextRange( + factory2.createCallExpression( + factory2.createPropertyAccessExpression(state, "sent"), + /*typeArguments*/ + void 0, + [] + ), + location + ); + } + function emitNop() { + emitWorker(0 /* Nop */); + } + function emitStatement(node) { + if (node) { + emitWorker(1 /* Statement */, [node]); + } else { + emitNop(); + } + } + function emitAssignment(left, right, location) { + emitWorker(2 /* Assign */, [left, right], location); + } + function emitBreak(label, location) { + emitWorker(3 /* Break */, [label], location); + } + function emitBreakWhenTrue(label, condition, location) { + emitWorker(4 /* BreakWhenTrue */, [label, condition], location); + } + function emitBreakWhenFalse(label, condition, location) { + emitWorker(5 /* BreakWhenFalse */, [label, condition], location); + } + function emitYieldStar(expression, location) { + emitWorker(7 /* YieldStar */, [expression], location); + } + function emitYield(expression, location) { + emitWorker(6 /* Yield */, [expression], location); + } + function emitReturn(expression, location) { + emitWorker(8 /* Return */, [expression], location); + } + function emitThrow(expression, location) { + emitWorker(9 /* Throw */, [expression], location); + } + function emitEndfinally() { + emitWorker(10 /* Endfinally */); + } + function emitWorker(code, args, location) { + if (operations === void 0) { + operations = []; + operationArguments = []; + operationLocations = []; + } + if (labelOffsets === void 0) { + markLabel(defineLabel()); + } + const operationIndex = operations.length; + operations[operationIndex] = code; + operationArguments[operationIndex] = args; + operationLocations[operationIndex] = location; + } + function build2() { + blockIndex = 0; + labelNumber = 0; + labelNumbers = void 0; + lastOperationWasAbrupt = false; + lastOperationWasCompletion = false; + clauses = void 0; + statements = void 0; + exceptionBlockStack = void 0; + currentExceptionBlock = void 0; + withBlockStack = void 0; + const buildResult = buildStatements(); + return emitHelpers().createGeneratorHelper( + setEmitFlags( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + state + )], + /*type*/ + void 0, + factory2.createBlock( + buildResult, + /*multiLine*/ + buildResult.length > 0 + ) + ), + 1048576 /* ReuseTempVariableScope */ + ) + ); + } + function buildStatements() { + if (operations) { + for (let operationIndex = 0; operationIndex < operations.length; operationIndex++) { + writeOperation(operationIndex); + } + flushFinalLabel(operations.length); + } else { + flushFinalLabel(0); + } + if (clauses) { + const labelExpression = factory2.createPropertyAccessExpression(state, "label"); + const switchStatement = factory2.createSwitchStatement(labelExpression, factory2.createCaseBlock(clauses)); + return [startOnNewLine(switchStatement)]; + } + if (statements) { + return statements; + } + return []; + } + function flushLabel() { + if (!statements) { + return; + } + appendLabel( + /*markLabelEnd*/ + !lastOperationWasAbrupt + ); + lastOperationWasAbrupt = false; + lastOperationWasCompletion = false; + labelNumber++; + } + function flushFinalLabel(operationIndex) { + if (isFinalLabelReachable(operationIndex)) { + tryEnterLabel(operationIndex); + withBlockStack = void 0; + writeReturn( + /*expression*/ + void 0, + /*operationLocation*/ + void 0 + ); + } + if (statements && clauses) { + appendLabel( + /*markLabelEnd*/ + false + ); + } + updateLabelExpressions(); + } + function isFinalLabelReachable(operationIndex) { + if (!lastOperationWasCompletion) { + return true; + } + if (!labelOffsets || !labelExpressions) { + return false; + } + for (let label = 0; label < labelOffsets.length; label++) { + if (labelOffsets[label] === operationIndex && labelExpressions[label]) { + return true; + } + } + return false; + } + function appendLabel(markLabelEnd) { + if (!clauses) { + clauses = []; + } + if (statements) { + if (withBlockStack) { + for (let i = withBlockStack.length - 1; i >= 0; i--) { + const withBlock = withBlockStack[i]; + statements = [factory2.createWithStatement(withBlock.expression, factory2.createBlock(statements))]; + } + } + if (currentExceptionBlock) { + const { startLabel, catchLabel, finallyLabel, endLabel } = currentExceptionBlock; + statements.unshift( + factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createPropertyAccessExpression(state, "trys"), "push"), + /*typeArguments*/ + void 0, + [ + factory2.createArrayLiteralExpression([ + createLabel(startLabel), + createLabel(catchLabel), + createLabel(finallyLabel), + createLabel(endLabel) + ]) + ] + ) + ) + ); + currentExceptionBlock = void 0; + } + if (markLabelEnd) { + statements.push( + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression(state, "label"), + factory2.createNumericLiteral(labelNumber + 1) + ) + ) + ); + } + } + clauses.push( + factory2.createCaseClause( + factory2.createNumericLiteral(labelNumber), + statements || [] + ) + ); + statements = void 0; + } + function tryEnterLabel(operationIndex) { + if (!labelOffsets) { + return; + } + for (let label = 0; label < labelOffsets.length; label++) { + if (labelOffsets[label] === operationIndex) { + flushLabel(); + if (labelNumbers === void 0) { + labelNumbers = []; + } + if (labelNumbers[labelNumber] === void 0) { + labelNumbers[labelNumber] = [label]; + } else { + labelNumbers[labelNumber].push(label); + } + } + } + } + function updateLabelExpressions() { + if (labelExpressions !== void 0 && labelNumbers !== void 0) { + for (let labelNumber2 = 0; labelNumber2 < labelNumbers.length; labelNumber2++) { + const labels = labelNumbers[labelNumber2]; + if (labels !== void 0) { + for (const label of labels) { + const expressions = labelExpressions[label]; + if (expressions !== void 0) { + for (const expression of expressions) { + expression.text = String(labelNumber2); + } + } + } + } + } + } + } + function tryEnterOrLeaveBlock(operationIndex) { + if (blocks) { + for (; blockIndex < blockActions.length && blockOffsets[blockIndex] <= operationIndex; blockIndex++) { + const block = blocks[blockIndex]; + const blockAction = blockActions[blockIndex]; + switch (block.kind) { + case 0 /* Exception */: + if (blockAction === 0 /* Open */) { + if (!exceptionBlockStack) { + exceptionBlockStack = []; + } + if (!statements) { + statements = []; + } + exceptionBlockStack.push(currentExceptionBlock); + currentExceptionBlock = block; + } else if (blockAction === 1 /* Close */) { + currentExceptionBlock = exceptionBlockStack.pop(); + } + break; + case 1 /* With */: + if (blockAction === 0 /* Open */) { + if (!withBlockStack) { + withBlockStack = []; + } + withBlockStack.push(block); + } else if (blockAction === 1 /* Close */) { + withBlockStack.pop(); + } + break; + } + } + } + } + function writeOperation(operationIndex) { + tryEnterLabel(operationIndex); + tryEnterOrLeaveBlock(operationIndex); + if (lastOperationWasAbrupt) { + return; + } + lastOperationWasAbrupt = false; + lastOperationWasCompletion = false; + const opcode = operations[operationIndex]; + if (opcode === 0 /* Nop */) { + return; + } else if (opcode === 10 /* Endfinally */) { + return writeEndfinally(); + } + const args = operationArguments[operationIndex]; + if (opcode === 1 /* Statement */) { + return writeStatement(args[0]); + } + const location = operationLocations[operationIndex]; + switch (opcode) { + case 2 /* Assign */: + return writeAssign(args[0], args[1], location); + case 3 /* Break */: + return writeBreak(args[0], location); + case 4 /* BreakWhenTrue */: + return writeBreakWhenTrue(args[0], args[1], location); + case 5 /* BreakWhenFalse */: + return writeBreakWhenFalse(args[0], args[1], location); + case 6 /* Yield */: + return writeYield(args[0], location); + case 7 /* YieldStar */: + return writeYieldStar(args[0], location); + case 8 /* Return */: + return writeReturn(args[0], location); + case 9 /* Throw */: + return writeThrow(args[0], location); + } + } + function writeStatement(statement) { + if (statement) { + if (!statements) { + statements = [statement]; + } else { + statements.push(statement); + } + } + } + function writeAssign(left, right, operationLocation) { + writeStatement(setTextRange(factory2.createExpressionStatement(factory2.createAssignment(left, right)), operationLocation)); + } + function writeThrow(expression, operationLocation) { + lastOperationWasAbrupt = true; + lastOperationWasCompletion = true; + writeStatement(setTextRange(factory2.createThrowStatement(expression), operationLocation)); + } + function writeReturn(expression, operationLocation) { + lastOperationWasAbrupt = true; + lastOperationWasCompletion = true; + writeStatement( + setEmitFlags( + setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression( + expression ? [createInstruction(2 /* Return */), expression] : [createInstruction(2 /* Return */)] + ) + ), + operationLocation + ), + 768 /* NoTokenSourceMaps */ + ) + ); + } + function writeBreak(label, operationLocation) { + lastOperationWasAbrupt = true; + writeStatement( + setEmitFlags( + setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression([ + createInstruction(3 /* Break */), + createLabel(label) + ]) + ), + operationLocation + ), + 768 /* NoTokenSourceMaps */ + ) + ); + } + function writeBreakWhenTrue(label, condition, operationLocation) { + writeStatement( + setEmitFlags( + factory2.createIfStatement( + condition, + setEmitFlags( + setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression([ + createInstruction(3 /* Break */), + createLabel(label) + ]) + ), + operationLocation + ), + 768 /* NoTokenSourceMaps */ + ) + ), + 1 /* SingleLine */ + ) + ); + } + function writeBreakWhenFalse(label, condition, operationLocation) { + writeStatement( + setEmitFlags( + factory2.createIfStatement( + factory2.createLogicalNot(condition), + setEmitFlags( + setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression([ + createInstruction(3 /* Break */), + createLabel(label) + ]) + ), + operationLocation + ), + 768 /* NoTokenSourceMaps */ + ) + ), + 1 /* SingleLine */ + ) + ); + } + function writeYield(expression, operationLocation) { + lastOperationWasAbrupt = true; + writeStatement( + setEmitFlags( + setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression( + expression ? [createInstruction(4 /* Yield */), expression] : [createInstruction(4 /* Yield */)] + ) + ), + operationLocation + ), + 768 /* NoTokenSourceMaps */ + ) + ); + } + function writeYieldStar(expression, operationLocation) { + lastOperationWasAbrupt = true; + writeStatement( + setEmitFlags( + setTextRange( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression([ + createInstruction(5 /* YieldStar */), + expression + ]) + ), + operationLocation + ), + 768 /* NoTokenSourceMaps */ + ) + ); + } + function writeEndfinally() { + lastOperationWasAbrupt = true; + writeStatement( + factory2.createReturnStatement( + factory2.createArrayLiteralExpression([ + createInstruction(7 /* Endfinally */) + ]) + ) + ); + } +} + +// src/compiler/transformers/module/module.ts +function transformModule(context) { + function getTransformModuleDelegate(moduleKind2) { + switch (moduleKind2) { + case 2 /* AMD */: + return transformAMDModule; + case 3 /* UMD */: + return transformUMDModule; + default: + return transformCommonJSModule; + } + } + const { + factory: factory2, + getEmitHelperFactory: emitHelpers, + startLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const compilerOptions = context.getCompilerOptions(); + const resolver = context.getEmitResolver(); + const host = context.getEmitHost(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const moduleKind = getEmitModuleKind(compilerOptions); + const previousOnSubstituteNode = context.onSubstituteNode; + const previousOnEmitNode = context.onEmitNode; + context.onSubstituteNode = onSubstituteNode; + context.onEmitNode = onEmitNode; + context.enableSubstitution(214 /* CallExpression */); + context.enableSubstitution(216 /* TaggedTemplateExpression */); + context.enableSubstitution(80 /* Identifier */); + context.enableSubstitution(227 /* BinaryExpression */); + context.enableSubstitution(305 /* ShorthandPropertyAssignment */); + context.enableEmitNotification(308 /* SourceFile */); + const moduleInfoMap = []; + let currentSourceFile; + let currentModuleInfo; + let importsAndRequiresToRewriteOrShim; + const noSubstitution = []; + let needUMDDynamicImportHelper; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile || !(isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 8388608 /* ContainsDynamicImport */ || isJsonSourceFile(node) && hasJsonModuleEmitEnabled(compilerOptions) && compilerOptions.outFile)) { + return node; + } + currentSourceFile = node; + currentModuleInfo = collectExternalModuleInfo(context, node); + moduleInfoMap[getOriginalNodeId(node)] = currentModuleInfo; + if (compilerOptions.rewriteRelativeImportExtensions) { + forEachDynamicImportOrRequireCall( + node, + /*includeTypeSpaceImports*/ + false, + /*requireStringLiteralLikeArgument*/ + false, + (node2) => { + if (!isStringLiteralLike(node2.arguments[0]) || shouldRewriteModuleSpecifier(node2.arguments[0].text, compilerOptions)) { + importsAndRequiresToRewriteOrShim = append(importsAndRequiresToRewriteOrShim, node2); + } + } + ); + } + const transformModule2 = getTransformModuleDelegate(moduleKind); + const updated = transformModule2(node); + currentSourceFile = void 0; + currentModuleInfo = void 0; + needUMDDynamicImportHelper = false; + return updated; + } + function shouldEmitUnderscoreUnderscoreESModule() { + if (hasJSFileExtension(currentSourceFile.fileName) && currentSourceFile.commonJsModuleIndicator && (!currentSourceFile.externalModuleIndicator || currentSourceFile.externalModuleIndicator === true)) { + return false; + } + if (!currentModuleInfo.exportEquals && isExternalModule(currentSourceFile)) { + return true; + } + return false; + } + function transformCommonJSModule(node) { + startLexicalEnvironment(); + const statements = []; + const ensureUseStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") || isExternalModule(currentSourceFile); + const statementOffset = factory2.copyPrologue(node.statements, statements, ensureUseStrict && !isJsonSourceFile(node), topLevelVisitor); + if (shouldEmitUnderscoreUnderscoreESModule()) { + append(statements, createUnderscoreUnderscoreESModule()); + } + if (some(currentModuleInfo.exportedNames)) { + const chunkSize = 50; + for (let i = 0; i < currentModuleInfo.exportedNames.length; i += chunkSize) { + append( + statements, + factory2.createExpressionStatement( + reduceLeft( + currentModuleInfo.exportedNames.slice(i, i + chunkSize), + (prev, nextId) => nextId.kind === 11 /* StringLiteral */ ? factory2.createAssignment(factory2.createElementAccessExpression(factory2.createIdentifier("exports"), factory2.createStringLiteral(nextId.text)), prev) : factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), + factory2.createVoidZero() + ) + ) + ); + } + } + for (const f of currentModuleInfo.exportedFunctions) { + appendExportsOfHoistedDeclaration(statements, f); + } + append(statements, visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, isStatement)); + addRange(statements, visitNodes2(node.statements, topLevelVisitor, isStatement, statementOffset)); + addExportEqualsIfNeeded( + statements, + /*emitAsReturn*/ + false + ); + insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment()); + const updated = factory2.updateSourceFile(node, setTextRange(factory2.createNodeArray(statements), node.statements)); + addEmitHelpers(updated, context.readEmitHelpers()); + return updated; + } + function transformAMDModule(node) { + const define = factory2.createIdentifier("define"); + const moduleName = tryGetModuleNameFromFile(factory2, node, host, compilerOptions); + const jsonSourceFile = isJsonSourceFile(node) && node; + const { aliasedModuleNames, unaliasedModuleNames, importAliasNames } = collectAsynchronousDependencies( + node, + /*includeNonAmdDependencies*/ + true + ); + const updated = factory2.updateSourceFile( + node, + setTextRange( + factory2.createNodeArray([ + factory2.createExpressionStatement( + factory2.createCallExpression( + define, + /*typeArguments*/ + void 0, + [ + // Add the module name (if provided). + ...moduleName ? [moduleName] : [], + // Add the dependency array argument: + // + // ["require", "exports", module1", "module2", ...] + factory2.createArrayLiteralExpression( + jsonSourceFile ? emptyArray : [ + factory2.createStringLiteral("require"), + factory2.createStringLiteral("exports"), + ...aliasedModuleNames, + ...unaliasedModuleNames + ] + ), + // Add the module body function argument: + // + // function (require, exports, module1, module2) ... + jsonSourceFile ? jsonSourceFile.statements.length ? jsonSourceFile.statements[0].expression : factory2.createObjectLiteralExpression() : factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "require" + ), + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "exports" + ), + ...importAliasNames + ], + /*type*/ + void 0, + transformAsynchronousModuleBody(node) + ) + ] + ) + ) + ]), + /*location*/ + node.statements + ) + ); + addEmitHelpers(updated, context.readEmitHelpers()); + return updated; + } + function transformUMDModule(node) { + const { aliasedModuleNames, unaliasedModuleNames, importAliasNames } = collectAsynchronousDependencies( + node, + /*includeNonAmdDependencies*/ + false + ); + const moduleName = tryGetModuleNameFromFile(factory2, node, host, compilerOptions); + const umdHeader = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "factory" + )], + /*type*/ + void 0, + setTextRange( + factory2.createBlock( + [ + factory2.createIfStatement( + factory2.createLogicalAnd( + factory2.createTypeCheck(factory2.createIdentifier("module"), "object"), + factory2.createTypeCheck(factory2.createPropertyAccessExpression(factory2.createIdentifier("module"), "exports"), "object") + ), + factory2.createBlock([ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + [ + factory2.createVariableDeclaration( + "v", + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createCallExpression( + factory2.createIdentifier("factory"), + /*typeArguments*/ + void 0, + [ + factory2.createIdentifier("require"), + factory2.createIdentifier("exports") + ] + ) + ) + ] + ), + setEmitFlags( + factory2.createIfStatement( + factory2.createStrictInequality( + factory2.createIdentifier("v"), + factory2.createIdentifier("undefined") + ), + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression(factory2.createIdentifier("module"), "exports"), + factory2.createIdentifier("v") + ) + ) + ), + 1 /* SingleLine */ + ) + ]), + factory2.createIfStatement( + factory2.createLogicalAnd( + factory2.createTypeCheck(factory2.createIdentifier("define"), "function"), + factory2.createPropertyAccessExpression(factory2.createIdentifier("define"), "amd") + ), + factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createIdentifier("define"), + /*typeArguments*/ + void 0, + [ + // Add the module name (if provided). + ...moduleName ? [moduleName] : [], + factory2.createArrayLiteralExpression([ + factory2.createStringLiteral("require"), + factory2.createStringLiteral("exports"), + ...aliasedModuleNames, + ...unaliasedModuleNames + ]), + factory2.createIdentifier("factory") + ] + ) + ) + ]) + ) + ) + ], + /*multiLine*/ + true + ), + /*location*/ + void 0 + ) + ); + const updated = factory2.updateSourceFile( + node, + setTextRange( + factory2.createNodeArray([ + factory2.createExpressionStatement( + factory2.createCallExpression( + umdHeader, + /*typeArguments*/ + void 0, + [ + // Add the module body function argument: + // + // function (require, exports) ... + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "require" + ), + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "exports" + ), + ...importAliasNames + ], + /*type*/ + void 0, + transformAsynchronousModuleBody(node) + ) + ] + ) + ) + ]), + /*location*/ + node.statements + ) + ); + addEmitHelpers(updated, context.readEmitHelpers()); + return updated; + } + function collectAsynchronousDependencies(node, includeNonAmdDependencies) { + const aliasedModuleNames = []; + const unaliasedModuleNames = []; + const importAliasNames = []; + for (const amdDependency of node.amdDependencies) { + if (amdDependency.name) { + aliasedModuleNames.push(factory2.createStringLiteral(amdDependency.path)); + importAliasNames.push(factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + amdDependency.name + )); + } else { + unaliasedModuleNames.push(factory2.createStringLiteral(amdDependency.path)); + } + } + for (const importNode of currentModuleInfo.externalImports) { + const externalModuleName = getExternalModuleNameLiteral(factory2, importNode, currentSourceFile, host, resolver, compilerOptions); + const importAliasName = getLocalNameForExternalImport(factory2, importNode, currentSourceFile); + if (externalModuleName) { + if (includeNonAmdDependencies && importAliasName) { + setEmitFlags(importAliasName, 8 /* NoSubstitution */); + aliasedModuleNames.push(externalModuleName); + importAliasNames.push(factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + importAliasName + )); + } else { + unaliasedModuleNames.push(externalModuleName); + } + } + } + return { aliasedModuleNames, unaliasedModuleNames, importAliasNames }; + } + function getAMDImportExpressionForImport(node) { + if (isImportEqualsDeclaration(node) || isExportDeclaration(node) || !getExternalModuleNameLiteral(factory2, node, currentSourceFile, host, resolver, compilerOptions)) { + return void 0; + } + const name = getLocalNameForExternalImport(factory2, node, currentSourceFile); + const expr = getHelperExpressionForImport(node, name); + if (expr === name) { + return void 0; + } + return factory2.createExpressionStatement(factory2.createAssignment(name, expr)); + } + function transformAsynchronousModuleBody(node) { + startLexicalEnvironment(); + const statements = []; + const statementOffset = factory2.copyPrologue( + node.statements, + statements, + /*ensureUseStrict*/ + true, + topLevelVisitor + ); + if (shouldEmitUnderscoreUnderscoreESModule()) { + append(statements, createUnderscoreUnderscoreESModule()); + } + if (some(currentModuleInfo.exportedNames)) { + append( + statements, + factory2.createExpressionStatement(reduceLeft(currentModuleInfo.exportedNames, (prev, nextId) => nextId.kind === 11 /* StringLiteral */ ? factory2.createAssignment(factory2.createElementAccessExpression(factory2.createIdentifier("exports"), factory2.createStringLiteral(nextId.text)), prev) : factory2.createAssignment(factory2.createPropertyAccessExpression(factory2.createIdentifier("exports"), factory2.createIdentifier(idText(nextId))), prev), factory2.createVoidZero())) + ); + } + for (const f of currentModuleInfo.exportedFunctions) { + appendExportsOfHoistedDeclaration(statements, f); + } + append(statements, visitNode(currentModuleInfo.externalHelpersImportDeclaration, topLevelVisitor, isStatement)); + if (moduleKind === 2 /* AMD */) { + addRange(statements, mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport)); + } + addRange(statements, visitNodes2(node.statements, topLevelVisitor, isStatement, statementOffset)); + addExportEqualsIfNeeded( + statements, + /*emitAsReturn*/ + true + ); + insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment()); + const body = factory2.createBlock( + statements, + /*multiLine*/ + true + ); + if (needUMDDynamicImportHelper) { + addEmitHelper(body, dynamicImportUMDHelper); + } + return body; + } + function addExportEqualsIfNeeded(statements, emitAsReturn) { + if (currentModuleInfo.exportEquals) { + const expressionResult = visitNode(currentModuleInfo.exportEquals.expression, visitor, isExpression); + if (expressionResult) { + if (emitAsReturn) { + const statement = factory2.createReturnStatement(expressionResult); + setTextRange(statement, currentModuleInfo.exportEquals); + setEmitFlags(statement, 768 /* NoTokenSourceMaps */ | 3072 /* NoComments */); + statements.push(statement); + } else { + const statement = factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("module"), + "exports" + ), + expressionResult + ) + ); + setTextRange(statement, currentModuleInfo.exportEquals); + setEmitFlags(statement, 3072 /* NoComments */); + statements.push(statement); + } + } + } + } + function topLevelVisitor(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + return visitTopLevelImportDeclaration(node); + case 272 /* ImportEqualsDeclaration */: + return visitTopLevelImportEqualsDeclaration(node); + case 279 /* ExportDeclaration */: + return visitTopLevelExportDeclaration(node); + case 278 /* ExportAssignment */: + return visitTopLevelExportAssignment(node); + default: + return topLevelNestedVisitor(node); + } + } + function topLevelNestedVisitor(node) { + switch (node.kind) { + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 263 /* FunctionDeclaration */: + return visitFunctionDeclaration(node); + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 249 /* ForStatement */: + return visitForStatement( + node, + /*isTopLevel*/ + true + ); + case 250 /* ForInStatement */: + return visitForInStatement(node); + case 251 /* ForOfStatement */: + return visitForOfStatement(node); + case 247 /* DoStatement */: + return visitDoStatement(node); + case 248 /* WhileStatement */: + return visitWhileStatement(node); + case 257 /* LabeledStatement */: + return visitLabeledStatement(node); + case 255 /* WithStatement */: + return visitWithStatement(node); + case 246 /* IfStatement */: + return visitIfStatement(node); + case 256 /* SwitchStatement */: + return visitSwitchStatement(node); + case 270 /* CaseBlock */: + return visitCaseBlock(node); + case 297 /* CaseClause */: + return visitCaseClause(node); + case 298 /* DefaultClause */: + return visitDefaultClause(node); + case 259 /* TryStatement */: + return visitTryStatement(node); + case 300 /* CatchClause */: + return visitCatchClause(node); + case 242 /* Block */: + return visitBlock(node); + default: + return visitor(node); + } + } + function visitorWorker(node, valueIsDiscarded) { + if (!(node.transformFlags & (8388608 /* ContainsDynamicImport */ | 4096 /* ContainsDestructuringAssignment */ | 268435456 /* ContainsUpdateExpressionForIdentifier */)) && !(importsAndRequiresToRewriteOrShim == null ? void 0 : importsAndRequiresToRewriteOrShim.length)) { + return node; + } + switch (node.kind) { + case 249 /* ForStatement */: + return visitForStatement( + node, + /*isTopLevel*/ + false + ); + case 245 /* ExpressionStatement */: + return visitExpressionStatement(node); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression(node, valueIsDiscarded); + case 356 /* PartiallyEmittedExpression */: + return visitPartiallyEmittedExpression(node, valueIsDiscarded); + case 214 /* CallExpression */: + const needsRewrite = node === firstOrUndefined(importsAndRequiresToRewriteOrShim); + if (needsRewrite) { + importsAndRequiresToRewriteOrShim.shift(); + } + if (isImportCall(node) && host.shouldTransformImportCall(currentSourceFile)) { + return visitImportCallExpression(node, needsRewrite); + } else if (needsRewrite) { + return shimOrRewriteImportOrRequireCall(node); + } + break; + case 227 /* BinaryExpression */: + if (isDestructuringAssignment(node)) { + return visitDestructuringAssignment(node, valueIsDiscarded); + } + break; + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return visitPreOrPostfixUnaryExpression(node, valueIsDiscarded); + } + return visitEachChild(node, visitor, context); + } + function visitor(node) { + return visitorWorker( + node, + /*valueIsDiscarded*/ + false + ); + } + function discardedValueVisitor(node) { + return visitorWorker( + node, + /*valueIsDiscarded*/ + true + ); + } + function destructuringNeedsFlattening(node) { + if (isObjectLiteralExpression(node)) { + for (const elem of node.properties) { + switch (elem.kind) { + case 304 /* PropertyAssignment */: + if (destructuringNeedsFlattening(elem.initializer)) { + return true; + } + break; + case 305 /* ShorthandPropertyAssignment */: + if (destructuringNeedsFlattening(elem.name)) { + return true; + } + break; + case 306 /* SpreadAssignment */: + if (destructuringNeedsFlattening(elem.expression)) { + return true; + } + break; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return false; + default: + Debug.assertNever(elem, "Unhandled object member kind"); + } + } + } else if (isArrayLiteralExpression(node)) { + for (const elem of node.elements) { + if (isSpreadElement(elem)) { + if (destructuringNeedsFlattening(elem.expression)) { + return true; + } + } else if (destructuringNeedsFlattening(elem)) { + return true; + } + } + } else if (isIdentifier(node)) { + return length(getExports(node)) > (isExportName(node) ? 1 : 0); + } + return false; + } + function visitDestructuringAssignment(node, valueIsDiscarded) { + if (destructuringNeedsFlattening(node.left)) { + return flattenDestructuringAssignment(node, visitor, context, 0 /* All */, !valueIsDiscarded, createAllExportExpressions); + } + return visitEachChild(node, visitor, context); + } + function visitForStatement(node, isTopLevel) { + if (isTopLevel && node.initializer && isVariableDeclarationList(node.initializer) && !(node.initializer.flags & 7 /* BlockScoped */)) { + const exportStatements = appendExportsOfVariableDeclarationList( + /*statements*/ + void 0, + node.initializer, + /*isForInOrOfInitializer*/ + false + ); + if (exportStatements) { + const statements = []; + const varDeclList = visitNode(node.initializer, discardedValueVisitor, isVariableDeclarationList); + const varStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + varDeclList + ); + statements.push(varStatement); + addRange(statements, exportStatements); + const condition = visitNode(node.condition, visitor, isExpression); + const incrementor = visitNode(node.incrementor, discardedValueVisitor, isExpression); + const body = visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context); + statements.push(factory2.updateForStatement( + node, + /*initializer*/ + void 0, + condition, + incrementor, + body + )); + return statements; + } + } + return factory2.updateForStatement( + node, + visitNode(node.initializer, discardedValueVisitor, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, discardedValueVisitor, isExpression), + visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context) + ); + } + function visitForInStatement(node) { + if (isVariableDeclarationList(node.initializer) && !(node.initializer.flags & 7 /* BlockScoped */)) { + const exportStatements = appendExportsOfVariableDeclarationList( + /*statements*/ + void 0, + node.initializer, + /*isForInOrOfInitializer*/ + true + ); + if (some(exportStatements)) { + const initializer = visitNode(node.initializer, discardedValueVisitor, isForInitializer); + const expression = visitNode(node.expression, visitor, isExpression); + const body = visitIterationBody(node.statement, topLevelNestedVisitor, context); + const mergedBody = isBlock(body) ? factory2.updateBlock(body, [...exportStatements, ...body.statements]) : factory2.createBlock( + [...exportStatements, body], + /*multiLine*/ + true + ); + return factory2.updateForInStatement(node, initializer, expression, mergedBody); + } + } + return factory2.updateForInStatement( + node, + visitNode(node.initializer, discardedValueVisitor, isForInitializer), + visitNode(node.expression, visitor, isExpression), + visitIterationBody(node.statement, topLevelNestedVisitor, context) + ); + } + function visitForOfStatement(node) { + if (isVariableDeclarationList(node.initializer) && !(node.initializer.flags & 7 /* BlockScoped */)) { + const exportStatements = appendExportsOfVariableDeclarationList( + /*statements*/ + void 0, + node.initializer, + /*isForInOrOfInitializer*/ + true + ); + const initializer = visitNode(node.initializer, discardedValueVisitor, isForInitializer); + const expression = visitNode(node.expression, visitor, isExpression); + let body = visitIterationBody(node.statement, topLevelNestedVisitor, context); + if (some(exportStatements)) { + body = isBlock(body) ? factory2.updateBlock(body, [...exportStatements, ...body.statements]) : factory2.createBlock( + [...exportStatements, body], + /*multiLine*/ + true + ); + } + return factory2.updateForOfStatement(node, node.awaitModifier, initializer, expression, body); + } + return factory2.updateForOfStatement( + node, + node.awaitModifier, + visitNode(node.initializer, discardedValueVisitor, isForInitializer), + visitNode(node.expression, visitor, isExpression), + visitIterationBody(node.statement, topLevelNestedVisitor, context) + ); + } + function visitDoStatement(node) { + return factory2.updateDoStatement( + node, + visitIterationBody(node.statement, topLevelNestedVisitor, context), + visitNode(node.expression, visitor, isExpression) + ); + } + function visitWhileStatement(node) { + return factory2.updateWhileStatement( + node, + visitNode(node.expression, visitor, isExpression), + visitIterationBody(node.statement, topLevelNestedVisitor, context) + ); + } + function visitLabeledStatement(node) { + return factory2.updateLabeledStatement( + node, + node.label, + visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? setTextRange(factory2.createEmptyStatement(), node.statement) + ); + } + function visitWithStatement(node) { + return factory2.updateWithStatement( + node, + visitNode(node.expression, visitor, isExpression), + Debug.checkDefined(visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)) + ); + } + function visitIfStatement(node) { + return factory2.updateIfStatement( + node, + visitNode(node.expression, visitor, isExpression), + visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createBlock([]), + visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) + ); + } + function visitSwitchStatement(node) { + return factory2.updateSwitchStatement( + node, + visitNode(node.expression, visitor, isExpression), + Debug.checkDefined(visitNode(node.caseBlock, topLevelNestedVisitor, isCaseBlock)) + ); + } + function visitCaseBlock(node) { + return factory2.updateCaseBlock( + node, + visitNodes2(node.clauses, topLevelNestedVisitor, isCaseOrDefaultClause) + ); + } + function visitCaseClause(node) { + return factory2.updateCaseClause( + node, + visitNode(node.expression, visitor, isExpression), + visitNodes2(node.statements, topLevelNestedVisitor, isStatement) + ); + } + function visitDefaultClause(node) { + return visitEachChild(node, topLevelNestedVisitor, context); + } + function visitTryStatement(node) { + return visitEachChild(node, topLevelNestedVisitor, context); + } + function visitCatchClause(node) { + return factory2.updateCatchClause( + node, + node.variableDeclaration, + Debug.checkDefined(visitNode(node.block, topLevelNestedVisitor, isBlock)) + ); + } + function visitBlock(node) { + node = visitEachChild(node, topLevelNestedVisitor, context); + return node; + } + function visitExpressionStatement(node) { + return factory2.updateExpressionStatement( + node, + visitNode(node.expression, discardedValueVisitor, isExpression) + ); + } + function visitParenthesizedExpression(node, valueIsDiscarded) { + return factory2.updateParenthesizedExpression(node, visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, isExpression)); + } + function visitPartiallyEmittedExpression(node, valueIsDiscarded) { + return factory2.updatePartiallyEmittedExpression(node, visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, isExpression)); + } + function visitPreOrPostfixUnaryExpression(node, valueIsDiscarded) { + if ((node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) && isIdentifier(node.operand) && !isGeneratedIdentifier(node.operand) && !isLocalName(node.operand) && !isDeclarationNameOfEnumOrNamespace(node.operand)) { + const exportedNames = getExports(node.operand); + if (exportedNames) { + let temp; + let expression = visitNode(node.operand, visitor, isExpression); + if (isPrefixUnaryExpression(node)) { + expression = factory2.updatePrefixUnaryExpression(node, expression); + } else { + expression = factory2.updatePostfixUnaryExpression(node, expression); + if (!valueIsDiscarded) { + temp = factory2.createTempVariable(hoistVariableDeclaration); + expression = factory2.createAssignment(temp, expression); + setTextRange(expression, node); + } + expression = factory2.createComma(expression, factory2.cloneNode(node.operand)); + setTextRange(expression, node); + } + for (const exportName of exportedNames) { + noSubstitution[getNodeId(expression)] = true; + expression = createExportExpression(exportName, expression); + setTextRange(expression, node); + } + if (temp) { + noSubstitution[getNodeId(expression)] = true; + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + return visitEachChild(node, visitor, context); + } + function shimOrRewriteImportOrRequireCall(node) { + return factory2.updateCallExpression( + node, + node.expression, + /*typeArguments*/ + void 0, + visitNodes2(node.arguments, (arg) => { + if (arg === node.arguments[0]) { + return isStringLiteralLike(arg) ? rewriteModuleSpecifier(arg, compilerOptions) : emitHelpers().createRewriteRelativeImportExtensionsHelper(arg); + } + return visitor(arg); + }, isExpression) + ); + } + function visitImportCallExpression(node, rewriteOrShim) { + if (moduleKind === 0 /* None */ && languageVersion >= 7 /* ES2020 */) { + return visitEachChild(node, visitor, context); + } + const externalModuleName = getExternalModuleNameLiteral(factory2, node, currentSourceFile, host, resolver, compilerOptions); + const firstArgument = visitNode(firstOrUndefined(node.arguments), visitor, isExpression); + const argument = externalModuleName && (!firstArgument || !isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument && rewriteOrShim ? isStringLiteral(firstArgument) ? rewriteModuleSpecifier(firstArgument, compilerOptions) : emitHelpers().createRewriteRelativeImportExtensionsHelper(firstArgument) : firstArgument; + const containsLexicalThis = !!(node.transformFlags & 16384 /* ContainsLexicalThis */); + switch (compilerOptions.module) { + case 2 /* AMD */: + return createImportCallExpressionAMD(argument, containsLexicalThis); + case 3 /* UMD */: + return createImportCallExpressionUMD(argument ?? factory2.createVoidZero(), containsLexicalThis); + case 1 /* CommonJS */: + default: + return createImportCallExpressionCommonJS(argument); + } + } + function createImportCallExpressionUMD(arg, containsLexicalThis) { + needUMDDynamicImportHelper = true; + if (isSimpleCopiableExpression(arg)) { + const argClone = isGeneratedIdentifier(arg) ? arg : isStringLiteral(arg) ? factory2.createStringLiteralFromNode(arg) : setEmitFlags(setTextRange(factory2.cloneNode(arg), arg), 3072 /* NoComments */); + return factory2.createConditionalExpression( + /*condition*/ + factory2.createIdentifier("__syncRequire"), + /*questionToken*/ + void 0, + /*whenTrue*/ + createImportCallExpressionCommonJS(arg), + /*colonToken*/ + void 0, + /*whenFalse*/ + createImportCallExpressionAMD(argClone, containsLexicalThis) + ); + } else { + const temp = factory2.createTempVariable(hoistVariableDeclaration); + return factory2.createComma( + factory2.createAssignment(temp, arg), + factory2.createConditionalExpression( + /*condition*/ + factory2.createIdentifier("__syncRequire"), + /*questionToken*/ + void 0, + /*whenTrue*/ + createImportCallExpressionCommonJS( + temp, + /*isInlineable*/ + true + ), + /*colonToken*/ + void 0, + /*whenFalse*/ + createImportCallExpressionAMD(temp, containsLexicalThis) + ) + ); + } + } + function createImportCallExpressionAMD(arg, containsLexicalThis) { + const resolve = factory2.createUniqueName("resolve"); + const reject = factory2.createUniqueName("reject"); + const parameters = [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + /*name*/ + resolve + ), + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + /*name*/ + reject + ) + ]; + const body = factory2.createBlock([ + factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createIdentifier("require"), + /*typeArguments*/ + void 0, + [factory2.createArrayLiteralExpression([arg || factory2.createOmittedExpression()]), resolve, reject] + ) + ) + ]); + let func; + if (languageVersion >= 2 /* ES2015 */) { + func = factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + body + ); + } else { + func = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body + ); + if (containsLexicalThis) { + setEmitFlags(func, 16 /* CapturesThis */); + } + } + const promise = factory2.createNewExpression( + factory2.createIdentifier("Promise"), + /*typeArguments*/ + void 0, + [func] + ); + if (getESModuleInterop(compilerOptions)) { + return factory2.createCallExpression( + factory2.createPropertyAccessExpression(promise, factory2.createIdentifier("then")), + /*typeArguments*/ + void 0, + [emitHelpers().createImportStarCallbackHelper()] + ); + } + return promise; + } + function createImportCallExpressionCommonJS(arg, isInlineable) { + const needSyncEval = arg && !isSimpleInlineableExpression(arg) && !isInlineable; + const promiseResolveCall = factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createIdentifier("Promise"), "resolve"), + /*typeArguments*/ + void 0, + /*argumentsArray*/ + needSyncEval ? languageVersion >= 2 /* ES2015 */ ? [ + factory2.createTemplateExpression(factory2.createTemplateHead(""), [ + factory2.createTemplateSpan(arg, factory2.createTemplateTail("")) + ]) + ] : [ + factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createStringLiteral(""), "concat"), + /*typeArguments*/ + void 0, + [arg] + ) + ] : [] + ); + let requireCall = factory2.createCallExpression( + factory2.createIdentifier("require"), + /*typeArguments*/ + void 0, + needSyncEval ? [factory2.createIdentifier("s")] : arg ? [arg] : [] + ); + if (getESModuleInterop(compilerOptions)) { + requireCall = emitHelpers().createImportStarHelper(requireCall); + } + const parameters = needSyncEval ? [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + /*name*/ + "s" + ) + ] : []; + let func; + if (languageVersion >= 2 /* ES2015 */) { + func = factory2.createArrowFunction( + /*modifiers*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + parameters, + /*type*/ + void 0, + /*equalsGreaterThanToken*/ + void 0, + requireCall + ); + } else { + func = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + parameters, + /*type*/ + void 0, + factory2.createBlock([factory2.createReturnStatement(requireCall)]) + ); + } + const downleveledImport = factory2.createCallExpression( + factory2.createPropertyAccessExpression(promiseResolveCall, "then"), + /*typeArguments*/ + void 0, + [func] + ); + return downleveledImport; + } + function getHelperExpressionForExport(node, innerExpr) { + if (!getESModuleInterop(compilerOptions) || getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) { + return innerExpr; + } + if (getExportNeedsImportStarHelper(node)) { + return emitHelpers().createImportStarHelper(innerExpr); + } + return innerExpr; + } + function getHelperExpressionForImport(node, innerExpr) { + if (!getESModuleInterop(compilerOptions) || getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) { + return innerExpr; + } + if (getImportNeedsImportStarHelper(node)) { + return emitHelpers().createImportStarHelper(innerExpr); + } + if (getImportNeedsImportDefaultHelper(node)) { + return emitHelpers().createImportDefaultHelper(innerExpr); + } + return innerExpr; + } + function visitTopLevelImportDeclaration(node) { + let statements; + const namespaceDeclaration = getNamespaceDeclarationNode(node); + if (moduleKind !== 2 /* AMD */) { + if (!node.importClause) { + return setOriginalNode(setTextRange(factory2.createExpressionStatement(createRequireCall2(node)), node), node); + } else { + const variables = []; + if (namespaceDeclaration && !isDefaultImport(node)) { + variables.push( + factory2.createVariableDeclaration( + factory2.cloneNode(namespaceDeclaration.name), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + getHelperExpressionForImport(node, createRequireCall2(node)) + ) + ); + } else { + variables.push( + factory2.createVariableDeclaration( + factory2.getGeneratedNameForNode(node), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + getHelperExpressionForImport(node, createRequireCall2(node)) + ) + ); + if (namespaceDeclaration && isDefaultImport(node)) { + variables.push( + factory2.createVariableDeclaration( + factory2.cloneNode(namespaceDeclaration.name), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.getGeneratedNameForNode(node) + ) + ); + } + } + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + variables, + languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */ + ) + ), + /*location*/ + node + ), + /*original*/ + node + ) + ); + } + } else if (namespaceDeclaration && isDefaultImport(node)) { + statements = append( + statements, + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + [ + setOriginalNode( + setTextRange( + factory2.createVariableDeclaration( + factory2.cloneNode(namespaceDeclaration.name), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.getGeneratedNameForNode(node) + ), + /*location*/ + node + ), + /*original*/ + node + ) + ], + languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */ + ) + ) + ); + } + statements = appendExportsOfImportDeclaration(statements, node); + return singleOrMany(statements); + } + function createRequireCall2(importNode) { + const moduleName = getExternalModuleNameLiteral(factory2, importNode, currentSourceFile, host, resolver, compilerOptions); + const args = []; + if (moduleName) { + args.push(rewriteModuleSpecifier(moduleName, compilerOptions)); + } + return factory2.createCallExpression( + factory2.createIdentifier("require"), + /*typeArguments*/ + void 0, + args + ); + } + function visitTopLevelImportEqualsDeclaration(node) { + Debug.assert(isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer."); + let statements; + if (moduleKind !== 2 /* AMD */) { + if (hasSyntacticModifier(node, 32 /* Export */)) { + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createExpressionStatement( + createExportExpression( + node.name, + createRequireCall2(node) + ) + ), + node + ), + node + ) + ); + } else { + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + [ + factory2.createVariableDeclaration( + factory2.cloneNode(node.name), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + createRequireCall2(node) + ) + ], + /*flags*/ + languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */ + ) + ), + node + ), + node + ) + ); + } + } else { + if (hasSyntacticModifier(node, 32 /* Export */)) { + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createExpressionStatement( + createExportExpression(factory2.getExportName(node), factory2.getLocalName(node)) + ), + node + ), + node + ) + ); + } + } + statements = appendExportsOfImportEqualsDeclaration(statements, node); + return singleOrMany(statements); + } + function visitTopLevelExportDeclaration(node) { + if (!node.moduleSpecifier) { + return void 0; + } + const generatedName = factory2.getGeneratedNameForNode(node); + if (node.exportClause && isNamedExports(node.exportClause)) { + const statements = []; + if (moduleKind !== 2 /* AMD */) { + statements.push( + setOriginalNode( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + generatedName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + createRequireCall2(node) + ) + ]) + ), + /*location*/ + node + ), + /* original */ + node + ) + ); + } + for (const specifier of node.exportClause.elements) { + const specifierName = specifier.propertyName || specifier.name; + const exportNeedsImportDefault = !!getESModuleInterop(compilerOptions) && !(getInternalEmitFlags(node) & 2 /* NeverApplyImportHelper */) && moduleExportNameIsDefault(specifierName); + const target = exportNeedsImportDefault ? emitHelpers().createImportDefaultHelper(generatedName) : generatedName; + const exportedValue = specifierName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, specifierName) : factory2.createPropertyAccessExpression(target, specifierName); + statements.push( + setOriginalNode( + setTextRange( + factory2.createExpressionStatement( + createExportExpression( + specifier.name.kind === 11 /* StringLiteral */ ? factory2.cloneNode(specifier.name) : factory2.getExportName(specifier), + exportedValue, + /*location*/ + void 0, + /*liveBinding*/ + true + ) + ), + specifier + ), + specifier + ) + ); + } + return singleOrMany(statements); + } else if (node.exportClause) { + const statements = []; + statements.push( + setOriginalNode( + setTextRange( + factory2.createExpressionStatement( + createExportExpression( + factory2.cloneNode(node.exportClause.name), + getHelperExpressionForExport( + node, + moduleKind !== 2 /* AMD */ ? createRequireCall2(node) : isExportNamespaceAsDefaultDeclaration(node) ? generatedName : node.exportClause.name.kind === 11 /* StringLiteral */ ? generatedName : factory2.createIdentifier(idText(node.exportClause.name)) + ) + ) + ), + node + ), + node + ) + ); + return singleOrMany(statements); + } else { + return setOriginalNode( + setTextRange( + factory2.createExpressionStatement( + emitHelpers().createExportStarHelper(moduleKind !== 2 /* AMD */ ? createRequireCall2(node) : generatedName) + ), + node + ), + node + ); + } + } + function visitTopLevelExportAssignment(node) { + if (node.isExportEquals) { + return void 0; + } + return createExportStatement( + factory2.createIdentifier("default"), + visitNode(node.expression, visitor, isExpression), + /*location*/ + node, + /*allowComments*/ + true + ); + } + function visitFunctionDeclaration(node) { + let statements; + if (hasSyntacticModifier(node, 32 /* Export */)) { + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createFunctionDeclaration( + visitNodes2(node.modifiers, modifierVisitor, isModifier), + node.asteriskToken, + factory2.getDeclarationName( + node, + /*allowComments*/ + true, + /*allowSourceMaps*/ + true + ), + /*typeParameters*/ + void 0, + visitNodes2(node.parameters, visitor, isParameter), + /*type*/ + void 0, + visitEachChild(node.body, visitor, context) + ), + /*location*/ + node + ), + /*original*/ + node + ) + ); + } else { + statements = append(statements, visitEachChild(node, visitor, context)); + } + return singleOrMany(statements); + } + function visitClassDeclaration(node) { + let statements; + if (hasSyntacticModifier(node, 32 /* Export */)) { + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createClassDeclaration( + visitNodes2(node.modifiers, modifierVisitor, isModifierLike), + factory2.getDeclarationName( + node, + /*allowComments*/ + true, + /*allowSourceMaps*/ + true + ), + /*typeParameters*/ + void 0, + visitNodes2(node.heritageClauses, visitor, isHeritageClause), + visitNodes2(node.members, visitor, isClassElement) + ), + node + ), + node + ) + ); + } else { + statements = append(statements, visitEachChild(node, visitor, context)); + } + statements = appendExportsOfHoistedDeclaration(statements, node); + return singleOrMany(statements); + } + function visitVariableStatement(node) { + let statements; + let variables; + let expressions; + if (hasSyntacticModifier(node, 32 /* Export */)) { + let modifiers; + let removeCommentsOnExpressions = false; + for (const variable of node.declarationList.declarations) { + if (isIdentifier(variable.name) && isLocalName(variable.name)) { + if (!modifiers) { + modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifier); + } + if (variable.initializer) { + const updatedVariable = factory2.updateVariableDeclaration( + variable, + variable.name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + createExportExpression( + variable.name, + visitNode(variable.initializer, visitor, isExpression) + ) + ); + variables = append(variables, updatedVariable); + } else { + variables = append(variables, variable); + } + } else if (variable.initializer) { + if (!isBindingPattern(variable.name) && (isArrowFunction(variable.initializer) || isFunctionExpression(variable.initializer) || isClassExpression(variable.initializer))) { + const expression = factory2.createAssignment( + setTextRange( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("exports"), + variable.name + ), + /*location*/ + variable.name + ), + factory2.createIdentifier(getTextOfIdentifierOrLiteral(variable.name)) + ); + const updatedVariable = factory2.createVariableDeclaration( + variable.name, + variable.exclamationToken, + variable.type, + visitNode(variable.initializer, visitor, isExpression) + ); + variables = append(variables, updatedVariable); + expressions = append(expressions, expression); + removeCommentsOnExpressions = true; + } else { + expressions = append(expressions, transformInitializedVariable(variable)); + } + } + } + if (variables) { + statements = append(statements, factory2.updateVariableStatement(node, modifiers, factory2.updateVariableDeclarationList(node.declarationList, variables))); + } + if (expressions) { + const statement = setOriginalNode(setTextRange(factory2.createExpressionStatement(factory2.inlineExpressions(expressions)), node), node); + if (removeCommentsOnExpressions) { + removeAllComments(statement); + } + statements = append(statements, statement); + } + } else { + statements = append(statements, visitEachChild(node, visitor, context)); + } + statements = appendExportsOfVariableStatement(statements, node); + return singleOrMany(statements); + } + function createAllExportExpressions(name, value, location) { + const exportedNames = getExports(name); + if (exportedNames) { + let expression = isExportName(name) ? value : factory2.createAssignment(name, value); + for (const exportName of exportedNames) { + setEmitFlags(expression, 8 /* NoSubstitution */); + expression = createExportExpression( + exportName, + expression, + /*location*/ + location + ); + } + return expression; + } + return factory2.createAssignment(name, value); + } + function transformInitializedVariable(node) { + if (isBindingPattern(node.name)) { + return flattenDestructuringAssignment( + visitNode(node, visitor, isInitializedVariable), + visitor, + context, + 0 /* All */, + /*needsValue*/ + false, + createAllExportExpressions + ); + } else { + return factory2.createAssignment( + setTextRange( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("exports"), + node.name + ), + /*location*/ + node.name + ), + node.initializer ? visitNode(node.initializer, visitor, isExpression) : factory2.createVoidZero() + ); + } + } + function appendExportsOfImportDeclaration(statements, decl) { + if (currentModuleInfo.exportEquals) { + return statements; + } + const importClause = decl.importClause; + if (!importClause) { + return statements; + } + const seen = new IdentifierNameMap(); + if (importClause.name) { + statements = appendExportsOfDeclaration(statements, seen, importClause); + } + const namedBindings = importClause.namedBindings; + if (namedBindings) { + switch (namedBindings.kind) { + case 275 /* NamespaceImport */: + statements = appendExportsOfDeclaration(statements, seen, namedBindings); + break; + case 276 /* NamedImports */: + for (const importBinding of namedBindings.elements) { + statements = appendExportsOfDeclaration( + statements, + seen, + importBinding, + /*liveBinding*/ + true + ); + } + break; + } + } + return statements; + } + function appendExportsOfImportEqualsDeclaration(statements, decl) { + if (currentModuleInfo.exportEquals) { + return statements; + } + return appendExportsOfDeclaration(statements, new IdentifierNameMap(), decl); + } + function appendExportsOfVariableStatement(statements, node) { + return appendExportsOfVariableDeclarationList( + statements, + node.declarationList, + /*isForInOrOfInitializer*/ + false + ); + } + function appendExportsOfVariableDeclarationList(statements, node, isForInOrOfInitializer) { + if (currentModuleInfo.exportEquals) { + return statements; + } + for (const decl of node.declarations) { + statements = appendExportsOfBindingElement(statements, decl, isForInOrOfInitializer); + } + return statements; + } + function appendExportsOfBindingElement(statements, decl, isForInOrOfInitializer) { + if (currentModuleInfo.exportEquals) { + return statements; + } + if (isBindingPattern(decl.name)) { + for (const element of decl.name.elements) { + if (!isOmittedExpression(element)) { + statements = appendExportsOfBindingElement(statements, element, isForInOrOfInitializer); + } + } + } else if (!isGeneratedIdentifier(decl.name) && (!isVariableDeclaration(decl) || decl.initializer || isForInOrOfInitializer)) { + statements = appendExportsOfDeclaration(statements, new IdentifierNameMap(), decl); + } + return statements; + } + function appendExportsOfHoistedDeclaration(statements, decl) { + if (currentModuleInfo.exportEquals) { + return statements; + } + const seen = new IdentifierNameMap(); + if (hasSyntacticModifier(decl, 32 /* Export */)) { + const exportName = hasSyntacticModifier(decl, 2048 /* Default */) ? factory2.createIdentifier("default") : factory2.getDeclarationName(decl); + statements = appendExportStatement( + statements, + seen, + exportName, + factory2.getLocalName(decl), + /*location*/ + decl + ); + } + if (decl.name) { + statements = appendExportsOfDeclaration(statements, seen, decl); + } + return statements; + } + function appendExportsOfDeclaration(statements, seen, decl, liveBinding) { + const name = factory2.getDeclarationName(decl); + const exportSpecifiers = currentModuleInfo.exportSpecifiers.get(name); + if (exportSpecifiers) { + for (const exportSpecifier of exportSpecifiers) { + statements = appendExportStatement( + statements, + seen, + exportSpecifier.name, + name, + /*location*/ + exportSpecifier.name, + /*allowComments*/ + void 0, + liveBinding + ); + } + } + return statements; + } + function appendExportStatement(statements, seen, exportName, expression, location, allowComments, liveBinding) { + if (exportName.kind !== 11 /* StringLiteral */) { + if (seen.has(exportName)) { + return statements; + } + seen.set(exportName, true); + } + statements = append(statements, createExportStatement(exportName, expression, location, allowComments, liveBinding)); + return statements; + } + function createUnderscoreUnderscoreESModule() { + const statement = factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createIdentifier("Object"), "defineProperty"), + /*typeArguments*/ + void 0, + [ + factory2.createIdentifier("exports"), + factory2.createStringLiteral("__esModule"), + factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("value", factory2.createTrue()) + ]) + ] + ) + ); + setEmitFlags(statement, 2097152 /* CustomPrologue */); + return statement; + } + function createExportStatement(name, value, location, allowComments, liveBinding) { + const statement = setTextRange(factory2.createExpressionStatement(createExportExpression( + name, + value, + /*location*/ + void 0, + liveBinding + )), location); + startOnNewLine(statement); + if (!allowComments) { + setEmitFlags(statement, 3072 /* NoComments */); + } + return statement; + } + function createExportExpression(name, value, location, liveBinding) { + return setTextRange( + liveBinding ? factory2.createCallExpression( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("Object"), + "defineProperty" + ), + /*typeArguments*/ + void 0, + [ + factory2.createIdentifier("exports"), + factory2.createStringLiteralFromNode(name), + factory2.createObjectLiteralExpression([ + factory2.createPropertyAssignment("enumerable", factory2.createTrue()), + factory2.createPropertyAssignment( + "get", + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + [], + /*type*/ + void 0, + factory2.createBlock([factory2.createReturnStatement(value)]) + ) + ) + ]) + ] + ) : factory2.createAssignment( + name.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression( + factory2.createIdentifier("exports"), + factory2.cloneNode(name) + ) : factory2.createPropertyAccessExpression( + factory2.createIdentifier("exports"), + factory2.cloneNode(name) + ), + value + ), + location + ); + } + function modifierVisitor(node) { + switch (node.kind) { + case 95 /* ExportKeyword */: + case 90 /* DefaultKeyword */: + return void 0; + } + return node; + } + function onEmitNode(hint, node, emitCallback) { + if (node.kind === 308 /* SourceFile */) { + currentSourceFile = node; + currentModuleInfo = moduleInfoMap[getOriginalNodeId(currentSourceFile)]; + previousOnEmitNode(hint, node, emitCallback); + currentSourceFile = void 0; + currentModuleInfo = void 0; + } else { + previousOnEmitNode(hint, node, emitCallback); + } + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (node.id && noSubstitution[node.id]) { + return node; + } + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } else if (isShorthandPropertyAssignment(node)) { + return substituteShorthandPropertyAssignment(node); + } + return node; + } + function substituteShorthandPropertyAssignment(node) { + const name = node.name; + const exportedOrImportedName = substituteExpressionIdentifier(name); + if (exportedOrImportedName !== name) { + if (node.objectAssignmentInitializer) { + const initializer = factory2.createAssignment(exportedOrImportedName, node.objectAssignmentInitializer); + return setTextRange(factory2.createPropertyAssignment(name, initializer), node); + } + return setTextRange(factory2.createPropertyAssignment(name, exportedOrImportedName), node); + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return substituteExpressionIdentifier(node); + case 214 /* CallExpression */: + return substituteCallExpression(node); + case 216 /* TaggedTemplateExpression */: + return substituteTaggedTemplateExpression(node); + case 227 /* BinaryExpression */: + return substituteBinaryExpression(node); + } + return node; + } + function substituteCallExpression(node) { + if (isIdentifier(node.expression)) { + const expression = substituteExpressionIdentifier(node.expression); + noSubstitution[getNodeId(expression)] = true; + if (!isIdentifier(expression) && !(getEmitFlags(node.expression) & 8192 /* HelperName */)) { + return addInternalEmitFlags( + factory2.updateCallExpression( + node, + expression, + /*typeArguments*/ + void 0, + node.arguments + ), + 16 /* IndirectCall */ + ); + } + } + return node; + } + function substituteTaggedTemplateExpression(node) { + if (isIdentifier(node.tag)) { + const tag = substituteExpressionIdentifier(node.tag); + noSubstitution[getNodeId(tag)] = true; + if (!isIdentifier(tag) && !(getEmitFlags(node.tag) & 8192 /* HelperName */)) { + return addInternalEmitFlags( + factory2.updateTaggedTemplateExpression( + node, + tag, + /*typeArguments*/ + void 0, + node.template + ), + 16 /* IndirectCall */ + ); + } + } + return node; + } + function substituteExpressionIdentifier(node) { + var _a, _b; + if (getEmitFlags(node) & 8192 /* HelperName */) { + const externalHelpersModuleName = getExternalHelpersModuleName(currentSourceFile); + if (externalHelpersModuleName) { + return factory2.createPropertyAccessExpression(externalHelpersModuleName, node); + } + return node; + } else if (!(isGeneratedIdentifier(node) && !(node.emitNode.autoGenerate.flags & 64 /* AllowNameSubstitution */)) && !isLocalName(node)) { + const exportContainer = resolver.getReferencedExportContainer(node, isExportName(node)); + if (exportContainer && exportContainer.kind === 308 /* SourceFile */) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("exports"), + factory2.cloneNode(node) + ), + /*location*/ + node + ); + } + const importDeclaration = resolver.getReferencedImportDeclaration(node); + if (importDeclaration) { + if (isImportClause(importDeclaration)) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.getGeneratedNameForNode(importDeclaration.parent), + factory2.createIdentifier("default") + ), + /*location*/ + node + ); + } else if (isImportSpecifier(importDeclaration)) { + const name = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); + return setTextRange( + name.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(name)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(name)), + /*location*/ + node + ); + } + } + } + return node; + } + function substituteBinaryExpression(node) { + if (isAssignmentOperator(node.operatorToken.kind) && isIdentifier(node.left) && (!isGeneratedIdentifier(node.left) || isFileLevelReservedGeneratedIdentifier(node.left)) && !isLocalName(node.left)) { + const exportedNames = getExports(node.left); + if (exportedNames) { + let expression = node; + for (const exportName of exportedNames) { + noSubstitution[getNodeId(expression)] = true; + expression = createExportExpression( + exportName, + expression, + /*location*/ + node + ); + } + return expression; + } + } + return node; + } + function getExports(name) { + if (!isGeneratedIdentifier(name)) { + const importDeclaration = resolver.getReferencedImportDeclaration(name); + if (importDeclaration) { + return currentModuleInfo == null ? void 0 : currentModuleInfo.exportedBindings[getOriginalNodeId(importDeclaration)]; + } + const bindingsSet = /* @__PURE__ */ new Set(); + const declarations = resolver.getReferencedValueDeclarations(name); + if (declarations) { + for (const declaration of declarations) { + const bindings = currentModuleInfo == null ? void 0 : currentModuleInfo.exportedBindings[getOriginalNodeId(declaration)]; + if (bindings) { + for (const binding of bindings) { + bindingsSet.add(binding); + } + } + } + if (bindingsSet.size) { + return arrayFrom(bindingsSet); + } + } + } else if (isFileLevelReservedGeneratedIdentifier(name)) { + const exportSpecifiers = currentModuleInfo == null ? void 0 : currentModuleInfo.exportSpecifiers.get(name); + if (exportSpecifiers) { + const exportedNames = []; + for (const exportSpecifier of exportSpecifiers) { + exportedNames.push(exportSpecifier.name); + } + return exportedNames; + } + } + } +} +var dynamicImportUMDHelper = { + name: "typescript:dynamicimport-sync-require", + scoped: true, + text: ` + var __syncRequire = typeof module === "object" && typeof module.exports === "object";` +}; + +// src/compiler/transformers/module/system.ts +function transformSystemModule(context) { + const { + factory: factory2, + startLexicalEnvironment, + endLexicalEnvironment, + hoistVariableDeclaration + } = context; + const compilerOptions = context.getCompilerOptions(); + const resolver = context.getEmitResolver(); + const host = context.getEmitHost(); + const previousOnSubstituteNode = context.onSubstituteNode; + const previousOnEmitNode = context.onEmitNode; + context.onSubstituteNode = onSubstituteNode; + context.onEmitNode = onEmitNode; + context.enableSubstitution(80 /* Identifier */); + context.enableSubstitution(305 /* ShorthandPropertyAssignment */); + context.enableSubstitution(227 /* BinaryExpression */); + context.enableSubstitution(237 /* MetaProperty */); + context.enableEmitNotification(308 /* SourceFile */); + const moduleInfoMap = []; + const exportFunctionsMap = []; + const noSubstitutionMap = []; + const contextObjectMap = []; + let currentSourceFile; + let moduleInfo; + let exportFunction; + let contextObject; + let hoistedStatements; + let enclosingBlockScopedContainer; + let noSubstitution; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile || !(isEffectiveExternalModule(node, compilerOptions) || node.transformFlags & 8388608 /* ContainsDynamicImport */)) { + return node; + } + const id = getOriginalNodeId(node); + currentSourceFile = node; + enclosingBlockScopedContainer = node; + moduleInfo = moduleInfoMap[id] = collectExternalModuleInfo(context, node); + exportFunction = factory2.createUniqueName("exports"); + exportFunctionsMap[id] = exportFunction; + contextObject = contextObjectMap[id] = factory2.createUniqueName("context"); + const dependencyGroups = collectDependencyGroups(moduleInfo.externalImports); + const moduleBodyBlock = createSystemModuleBody(node, dependencyGroups); + const moduleBodyFunction = factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [ + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + exportFunction + ), + factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + contextObject + ) + ], + /*type*/ + void 0, + moduleBodyBlock + ); + const moduleName = tryGetModuleNameFromFile(factory2, node, host, compilerOptions); + const dependencies = factory2.createArrayLiteralExpression(map(dependencyGroups, (dependencyGroup) => dependencyGroup.name)); + const updated = setEmitFlags( + factory2.updateSourceFile( + node, + setTextRange( + factory2.createNodeArray([ + factory2.createExpressionStatement( + factory2.createCallExpression( + factory2.createPropertyAccessExpression(factory2.createIdentifier("System"), "register"), + /*typeArguments*/ + void 0, + moduleName ? [moduleName, dependencies, moduleBodyFunction] : [dependencies, moduleBodyFunction] + ) + ) + ]), + node.statements + ) + ), + 2048 /* NoTrailingComments */ + ); + if (!compilerOptions.outFile) { + moveEmitHelpers(updated, moduleBodyBlock, (helper) => !helper.scoped); + } + if (noSubstitution) { + noSubstitutionMap[id] = noSubstitution; + noSubstitution = void 0; + } + currentSourceFile = void 0; + moduleInfo = void 0; + exportFunction = void 0; + contextObject = void 0; + hoistedStatements = void 0; + enclosingBlockScopedContainer = void 0; + return updated; + } + function collectDependencyGroups(externalImports) { + const groupIndices = /* @__PURE__ */ new Map(); + const dependencyGroups = []; + for (const externalImport of externalImports) { + const externalModuleName = getExternalModuleNameLiteral(factory2, externalImport, currentSourceFile, host, resolver, compilerOptions); + if (externalModuleName) { + const text = externalModuleName.text; + const groupIndex = groupIndices.get(text); + if (groupIndex !== void 0) { + dependencyGroups[groupIndex].externalImports.push(externalImport); + } else { + groupIndices.set(text, dependencyGroups.length); + dependencyGroups.push({ + name: externalModuleName, + externalImports: [externalImport] + }); + } + } + } + return dependencyGroups; + } + function createSystemModuleBody(node, dependencyGroups) { + const statements = []; + startLexicalEnvironment(); + const ensureUseStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") || isExternalModule(currentSourceFile); + const statementOffset = factory2.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor); + statements.push( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + "__moduleName", + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createLogicalAnd( + contextObject, + factory2.createPropertyAccessExpression(contextObject, "id") + ) + ) + ]) + ) + ); + visitNode(moduleInfo.externalHelpersImportDeclaration, topLevelVisitor, isStatement); + const executeStatements = visitNodes2(node.statements, topLevelVisitor, isStatement, statementOffset); + addRange(statements, hoistedStatements); + insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment()); + const exportStarFunction = addExportStarIfNeeded(statements); + const modifiers = node.transformFlags & 2097152 /* ContainsAwait */ ? factory2.createModifiersFromModifierFlags(1024 /* Async */) : void 0; + const moduleObject = factory2.createObjectLiteralExpression( + [ + factory2.createPropertyAssignment("setters", createSettersArray(exportStarFunction, dependencyGroups)), + factory2.createPropertyAssignment( + "execute", + factory2.createFunctionExpression( + modifiers, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + /*parameters*/ + [], + /*type*/ + void 0, + factory2.createBlock( + executeStatements, + /*multiLine*/ + true + ) + ) + ) + ], + /*multiLine*/ + true + ); + statements.push(factory2.createReturnStatement(moduleObject)); + return factory2.createBlock( + statements, + /*multiLine*/ + true + ); + } + function addExportStarIfNeeded(statements) { + if (!moduleInfo.hasExportStarsToExportValues) { + return; + } + if (!some(moduleInfo.exportedNames) && moduleInfo.exportedFunctions.size === 0 && moduleInfo.exportSpecifiers.size === 0) { + let hasExportDeclarationWithExportClause = false; + for (const externalImport of moduleInfo.externalImports) { + if (externalImport.kind === 279 /* ExportDeclaration */ && externalImport.exportClause) { + hasExportDeclarationWithExportClause = true; + break; + } + } + if (!hasExportDeclarationWithExportClause) { + const exportStarFunction2 = createExportStarFunction( + /*localNames*/ + void 0 + ); + statements.push(exportStarFunction2); + return exportStarFunction2.name; + } + } + const exportedNames = []; + if (moduleInfo.exportedNames) { + for (const exportedLocalName of moduleInfo.exportedNames) { + if (moduleExportNameIsDefault(exportedLocalName)) { + continue; + } + exportedNames.push( + factory2.createPropertyAssignment( + factory2.createStringLiteralFromNode(exportedLocalName), + factory2.createTrue() + ) + ); + } + } + for (const f of moduleInfo.exportedFunctions) { + if (hasSyntacticModifier(f, 2048 /* Default */)) { + continue; + } + Debug.assert(!!f.name); + exportedNames.push( + factory2.createPropertyAssignment( + factory2.createStringLiteralFromNode(f.name), + factory2.createTrue() + ) + ); + } + const exportedNamesStorageRef = factory2.createUniqueName("exportedNames"); + statements.push( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + exportedNamesStorageRef, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createObjectLiteralExpression( + exportedNames, + /*multiLine*/ + true + ) + ) + ]) + ) + ); + const exportStarFunction = createExportStarFunction(exportedNamesStorageRef); + statements.push(exportStarFunction); + return exportStarFunction.name; + } + function createExportStarFunction(localNames) { + const exportStarFunction = factory2.createUniqueName("exportStar"); + const m = factory2.createIdentifier("m"); + const n = factory2.createIdentifier("n"); + const exports2 = factory2.createIdentifier("exports"); + let condition = factory2.createStrictInequality(n, factory2.createStringLiteral("default")); + if (localNames) { + condition = factory2.createLogicalAnd( + condition, + factory2.createLogicalNot( + factory2.createCallExpression( + factory2.createPropertyAccessExpression(localNames, "hasOwnProperty"), + /*typeArguments*/ + void 0, + [n] + ) + ) + ); + } + return factory2.createFunctionDeclaration( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + exportStarFunction, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + m + )], + /*type*/ + void 0, + factory2.createBlock( + [ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration( + exports2, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createObjectLiteralExpression([]) + ) + ]) + ), + factory2.createForInStatement( + factory2.createVariableDeclarationList([ + factory2.createVariableDeclaration(n) + ]), + m, + factory2.createBlock([ + setEmitFlags( + factory2.createIfStatement( + condition, + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createElementAccessExpression(exports2, n), + factory2.createElementAccessExpression(m, n) + ) + ) + ), + 1 /* SingleLine */ + ) + ]) + ), + factory2.createExpressionStatement( + factory2.createCallExpression( + exportFunction, + /*typeArguments*/ + void 0, + [exports2] + ) + ) + ], + /*multiLine*/ + true + ) + ); + } + function createSettersArray(exportStarFunction, dependencyGroups) { + const setters = []; + for (const group2 of dependencyGroups) { + const localName = forEach(group2.externalImports, (i) => getLocalNameForExternalImport(factory2, i, currentSourceFile)); + const parameterName = localName ? factory2.getGeneratedNameForNode(localName) : factory2.createUniqueName(""); + const statements = []; + for (const entry of group2.externalImports) { + const importVariableName = getLocalNameForExternalImport(factory2, entry, currentSourceFile); + switch (entry.kind) { + case 273 /* ImportDeclaration */: + if (!entry.importClause) { + break; + } + // falls through + case 272 /* ImportEqualsDeclaration */: + Debug.assert(importVariableName !== void 0); + statements.push( + factory2.createExpressionStatement( + factory2.createAssignment(importVariableName, parameterName) + ) + ); + if (hasSyntacticModifier(entry, 32 /* Export */)) { + statements.push( + factory2.createExpressionStatement( + factory2.createCallExpression( + exportFunction, + /*typeArguments*/ + void 0, + [ + factory2.createStringLiteral(idText(importVariableName)), + parameterName + ] + ) + ) + ); + } + break; + case 279 /* ExportDeclaration */: + Debug.assert(importVariableName !== void 0); + if (entry.exportClause) { + if (isNamedExports(entry.exportClause)) { + const properties = []; + for (const e of entry.exportClause.elements) { + properties.push( + factory2.createPropertyAssignment( + factory2.createStringLiteral(moduleExportNameTextUnescaped(e.name)), + factory2.createElementAccessExpression( + parameterName, + factory2.createStringLiteral(moduleExportNameTextUnescaped(e.propertyName || e.name)) + ) + ) + ); + } + statements.push( + factory2.createExpressionStatement( + factory2.createCallExpression( + exportFunction, + /*typeArguments*/ + void 0, + [factory2.createObjectLiteralExpression( + properties, + /*multiLine*/ + true + )] + ) + ) + ); + } else { + statements.push( + factory2.createExpressionStatement( + factory2.createCallExpression( + exportFunction, + /*typeArguments*/ + void 0, + [ + factory2.createStringLiteral(moduleExportNameTextUnescaped(entry.exportClause.name)), + parameterName + ] + ) + ) + ); + } + } else { + statements.push( + factory2.createExpressionStatement( + factory2.createCallExpression( + exportStarFunction, + /*typeArguments*/ + void 0, + [parameterName] + ) + ) + ); + } + break; + } + } + setters.push( + factory2.createFunctionExpression( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + /*name*/ + void 0, + /*typeParameters*/ + void 0, + [factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + parameterName + )], + /*type*/ + void 0, + factory2.createBlock( + statements, + /*multiLine*/ + true + ) + ) + ); + } + return factory2.createArrayLiteralExpression( + setters, + /*multiLine*/ + true + ); + } + function topLevelVisitor(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + return visitImportDeclaration(node); + case 272 /* ImportEqualsDeclaration */: + return visitImportEqualsDeclaration(node); + case 279 /* ExportDeclaration */: + return visitExportDeclaration(node); + case 278 /* ExportAssignment */: + return visitExportAssignment(node); + default: + return topLevelNestedVisitor(node); + } + } + function visitImportDeclaration(node) { + let statements; + if (node.importClause) { + hoistVariableDeclaration(getLocalNameForExternalImport(factory2, node, currentSourceFile)); + } + return singleOrMany(appendExportsOfImportDeclaration(statements, node)); + } + function visitExportDeclaration(node) { + Debug.assertIsDefined(node); + return void 0; + } + function visitImportEqualsDeclaration(node) { + Debug.assert(isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer."); + let statements; + hoistVariableDeclaration(getLocalNameForExternalImport(factory2, node, currentSourceFile)); + return singleOrMany(appendExportsOfImportEqualsDeclaration(statements, node)); + } + function visitExportAssignment(node) { + if (node.isExportEquals) { + return void 0; + } + const expression = visitNode(node.expression, visitor, isExpression); + return createExportStatement( + factory2.createIdentifier("default"), + expression, + /*allowComments*/ + true + ); + } + function visitFunctionDeclaration(node) { + if (hasSyntacticModifier(node, 32 /* Export */)) { + hoistedStatements = append( + hoistedStatements, + factory2.updateFunctionDeclaration( + node, + visitNodes2(node.modifiers, modifierVisitor, isModifierLike), + node.asteriskToken, + factory2.getDeclarationName( + node, + /*allowComments*/ + true, + /*allowSourceMaps*/ + true + ), + /*typeParameters*/ + void 0, + visitNodes2(node.parameters, visitor, isParameter), + /*type*/ + void 0, + visitNode(node.body, visitor, isBlock) + ) + ); + } else { + hoistedStatements = append(hoistedStatements, visitEachChild(node, visitor, context)); + } + hoistedStatements = appendExportsOfHoistedDeclaration(hoistedStatements, node); + return void 0; + } + function visitClassDeclaration(node) { + let statements; + const name = factory2.getLocalName(node); + hoistVariableDeclaration(name); + statements = append( + statements, + setTextRange( + factory2.createExpressionStatement( + factory2.createAssignment( + name, + setTextRange( + factory2.createClassExpression( + visitNodes2(node.modifiers, modifierVisitor, isModifierLike), + node.name, + /*typeParameters*/ + void 0, + visitNodes2(node.heritageClauses, visitor, isHeritageClause), + visitNodes2(node.members, visitor, isClassElement) + ), + node + ) + ) + ), + node + ) + ); + statements = appendExportsOfHoistedDeclaration(statements, node); + return singleOrMany(statements); + } + function visitVariableStatement(node) { + if (!shouldHoistVariableDeclarationList(node.declarationList)) { + return visitNode(node, visitor, isStatement); + } + let statements; + if (isVarUsing(node.declarationList) || isVarAwaitUsing(node.declarationList)) { + const modifiers = visitNodes2(node.modifiers, modifierVisitor, isModifierLike); + const declarations = []; + for (const variable of node.declarationList.declarations) { + declarations.push(factory2.updateVariableDeclaration( + variable, + factory2.getGeneratedNameForNode(variable.name), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + transformInitializedVariable( + variable, + /*isExportedDeclaration*/ + false + ) + )); + } + const declarationList = factory2.updateVariableDeclarationList( + node.declarationList, + declarations + ); + statements = append(statements, factory2.updateVariableStatement(node, modifiers, declarationList)); + } else { + let expressions; + const isExportedDeclaration = hasSyntacticModifier(node, 32 /* Export */); + for (const variable of node.declarationList.declarations) { + if (variable.initializer) { + expressions = append(expressions, transformInitializedVariable(variable, isExportedDeclaration)); + } else { + hoistBindingElement(variable); + } + } + if (expressions) { + statements = append(statements, setTextRange(factory2.createExpressionStatement(factory2.inlineExpressions(expressions)), node)); + } + } + statements = appendExportsOfVariableStatement( + statements, + node, + /*exportSelf*/ + false + ); + return singleOrMany(statements); + } + function hoistBindingElement(node) { + if (isBindingPattern(node.name)) { + for (const element of node.name.elements) { + if (!isOmittedExpression(element)) { + hoistBindingElement(element); + } + } + } else { + hoistVariableDeclaration(factory2.cloneNode(node.name)); + } + } + function shouldHoistVariableDeclarationList(node) { + return (getEmitFlags(node) & 4194304 /* NoHoisting */) === 0 && (enclosingBlockScopedContainer.kind === 308 /* SourceFile */ || (getOriginalNode(node).flags & 7 /* BlockScoped */) === 0); + } + function transformInitializedVariable(node, isExportedDeclaration) { + const createAssignment = isExportedDeclaration ? createExportedVariableAssignment : createNonExportedVariableAssignment; + return isBindingPattern(node.name) ? flattenDestructuringAssignment( + node, + visitor, + context, + 0 /* All */, + /*needsValue*/ + false, + createAssignment + ) : node.initializer ? createAssignment(node.name, visitNode(node.initializer, visitor, isExpression)) : node.name; + } + function createExportedVariableAssignment(name, value, location) { + return createVariableAssignment( + name, + value, + location, + /*isExportedDeclaration*/ + true + ); + } + function createNonExportedVariableAssignment(name, value, location) { + return createVariableAssignment( + name, + value, + location, + /*isExportedDeclaration*/ + false + ); + } + function createVariableAssignment(name, value, location, isExportedDeclaration) { + hoistVariableDeclaration(factory2.cloneNode(name)); + return isExportedDeclaration ? createExportExpression(name, preventSubstitution(setTextRange(factory2.createAssignment(name, value), location))) : preventSubstitution(setTextRange(factory2.createAssignment(name, value), location)); + } + function appendExportsOfImportDeclaration(statements, decl) { + if (moduleInfo.exportEquals) { + return statements; + } + const importClause = decl.importClause; + if (!importClause) { + return statements; + } + if (importClause.name) { + statements = appendExportsOfDeclaration(statements, importClause); + } + const namedBindings = importClause.namedBindings; + if (namedBindings) { + switch (namedBindings.kind) { + case 275 /* NamespaceImport */: + statements = appendExportsOfDeclaration(statements, namedBindings); + break; + case 276 /* NamedImports */: + for (const importBinding of namedBindings.elements) { + statements = appendExportsOfDeclaration(statements, importBinding); + } + break; + } + } + return statements; + } + function appendExportsOfImportEqualsDeclaration(statements, decl) { + if (moduleInfo.exportEquals) { + return statements; + } + return appendExportsOfDeclaration(statements, decl); + } + function appendExportsOfVariableStatement(statements, node, exportSelf) { + if (moduleInfo.exportEquals) { + return statements; + } + for (const decl of node.declarationList.declarations) { + if (decl.initializer || exportSelf) { + statements = appendExportsOfBindingElement(statements, decl, exportSelf); + } + } + return statements; + } + function appendExportsOfBindingElement(statements, decl, exportSelf) { + if (moduleInfo.exportEquals) { + return statements; + } + if (isBindingPattern(decl.name)) { + for (const element of decl.name.elements) { + if (!isOmittedExpression(element)) { + statements = appendExportsOfBindingElement(statements, element, exportSelf); + } + } + } else if (!isGeneratedIdentifier(decl.name)) { + let excludeName; + if (exportSelf) { + statements = appendExportStatement(statements, decl.name, factory2.getLocalName(decl)); + excludeName = idText(decl.name); + } + statements = appendExportsOfDeclaration(statements, decl, excludeName); + } + return statements; + } + function appendExportsOfHoistedDeclaration(statements, decl) { + if (moduleInfo.exportEquals) { + return statements; + } + let excludeName; + if (hasSyntacticModifier(decl, 32 /* Export */)) { + const exportName = hasSyntacticModifier(decl, 2048 /* Default */) ? factory2.createStringLiteral("default") : decl.name; + statements = appendExportStatement(statements, exportName, factory2.getLocalName(decl)); + excludeName = getTextOfIdentifierOrLiteral(exportName); + } + if (decl.name) { + statements = appendExportsOfDeclaration(statements, decl, excludeName); + } + return statements; + } + function appendExportsOfDeclaration(statements, decl, excludeName) { + if (moduleInfo.exportEquals) { + return statements; + } + const name = factory2.getDeclarationName(decl); + const exportSpecifiers = moduleInfo.exportSpecifiers.get(name); + if (exportSpecifiers) { + for (const exportSpecifier of exportSpecifiers) { + if (moduleExportNameTextUnescaped(exportSpecifier.name) !== excludeName) { + statements = appendExportStatement(statements, exportSpecifier.name, name); + } + } + } + return statements; + } + function appendExportStatement(statements, exportName, expression, allowComments) { + statements = append(statements, createExportStatement(exportName, expression, allowComments)); + return statements; + } + function createExportStatement(name, value, allowComments) { + const statement = factory2.createExpressionStatement(createExportExpression(name, value)); + startOnNewLine(statement); + if (!allowComments) { + setEmitFlags(statement, 3072 /* NoComments */); + } + return statement; + } + function createExportExpression(name, value) { + const exportName = isIdentifier(name) ? factory2.createStringLiteralFromNode(name) : name; + setEmitFlags(value, getEmitFlags(value) | 3072 /* NoComments */); + return setCommentRange(factory2.createCallExpression( + exportFunction, + /*typeArguments*/ + void 0, + [exportName, value] + ), value); + } + function topLevelNestedVisitor(node) { + switch (node.kind) { + case 244 /* VariableStatement */: + return visitVariableStatement(node); + case 263 /* FunctionDeclaration */: + return visitFunctionDeclaration(node); + case 264 /* ClassDeclaration */: + return visitClassDeclaration(node); + case 249 /* ForStatement */: + return visitForStatement( + node, + /*isTopLevel*/ + true + ); + case 250 /* ForInStatement */: + return visitForInStatement(node); + case 251 /* ForOfStatement */: + return visitForOfStatement(node); + case 247 /* DoStatement */: + return visitDoStatement(node); + case 248 /* WhileStatement */: + return visitWhileStatement(node); + case 257 /* LabeledStatement */: + return visitLabeledStatement(node); + case 255 /* WithStatement */: + return visitWithStatement(node); + case 246 /* IfStatement */: + return visitIfStatement(node); + case 256 /* SwitchStatement */: + return visitSwitchStatement(node); + case 270 /* CaseBlock */: + return visitCaseBlock(node); + case 297 /* CaseClause */: + return visitCaseClause(node); + case 298 /* DefaultClause */: + return visitDefaultClause(node); + case 259 /* TryStatement */: + return visitTryStatement(node); + case 300 /* CatchClause */: + return visitCatchClause(node); + case 242 /* Block */: + return visitBlock(node); + default: + return visitor(node); + } + } + function visitForStatement(node, isTopLevel) { + const savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; + enclosingBlockScopedContainer = node; + node = factory2.updateForStatement( + node, + visitNode(node.initializer, isTopLevel ? visitForInitializer : discardedValueVisitor, isForInitializer), + visitNode(node.condition, visitor, isExpression), + visitNode(node.incrementor, discardedValueVisitor, isExpression), + visitIterationBody(node.statement, isTopLevel ? topLevelNestedVisitor : visitor, context) + ); + enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; + return node; + } + function visitForInStatement(node) { + const savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; + enclosingBlockScopedContainer = node; + node = factory2.updateForInStatement( + node, + visitForInitializer(node.initializer), + visitNode(node.expression, visitor, isExpression), + visitIterationBody(node.statement, topLevelNestedVisitor, context) + ); + enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; + return node; + } + function visitForOfStatement(node) { + const savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; + enclosingBlockScopedContainer = node; + node = factory2.updateForOfStatement( + node, + node.awaitModifier, + visitForInitializer(node.initializer), + visitNode(node.expression, visitor, isExpression), + visitIterationBody(node.statement, topLevelNestedVisitor, context) + ); + enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; + return node; + } + function shouldHoistForInitializer(node) { + return isVariableDeclarationList(node) && shouldHoistVariableDeclarationList(node); + } + function visitForInitializer(node) { + if (shouldHoistForInitializer(node)) { + let expressions; + for (const variable of node.declarations) { + expressions = append(expressions, transformInitializedVariable( + variable, + /*isExportedDeclaration*/ + false + )); + if (!variable.initializer) { + hoistBindingElement(variable); + } + } + return expressions ? factory2.inlineExpressions(expressions) : factory2.createOmittedExpression(); + } else { + return visitNode(node, discardedValueVisitor, isForInitializer); + } + } + function visitDoStatement(node) { + return factory2.updateDoStatement( + node, + visitIterationBody(node.statement, topLevelNestedVisitor, context), + visitNode(node.expression, visitor, isExpression) + ); + } + function visitWhileStatement(node) { + return factory2.updateWhileStatement( + node, + visitNode(node.expression, visitor, isExpression), + visitIterationBody(node.statement, topLevelNestedVisitor, context) + ); + } + function visitLabeledStatement(node) { + return factory2.updateLabeledStatement( + node, + node.label, + visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createExpressionStatement(factory2.createIdentifier("")) + ); + } + function visitWithStatement(node) { + return factory2.updateWithStatement( + node, + visitNode(node.expression, visitor, isExpression), + Debug.checkDefined(visitNode(node.statement, topLevelNestedVisitor, isStatement, factory2.liftToBlock)) + ); + } + function visitIfStatement(node) { + return factory2.updateIfStatement( + node, + visitNode(node.expression, visitor, isExpression), + visitNode(node.thenStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) ?? factory2.createBlock([]), + visitNode(node.elseStatement, topLevelNestedVisitor, isStatement, factory2.liftToBlock) + ); + } + function visitSwitchStatement(node) { + return factory2.updateSwitchStatement( + node, + visitNode(node.expression, visitor, isExpression), + Debug.checkDefined(visitNode(node.caseBlock, topLevelNestedVisitor, isCaseBlock)) + ); + } + function visitCaseBlock(node) { + const savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; + enclosingBlockScopedContainer = node; + node = factory2.updateCaseBlock( + node, + visitNodes2(node.clauses, topLevelNestedVisitor, isCaseOrDefaultClause) + ); + enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; + return node; + } + function visitCaseClause(node) { + return factory2.updateCaseClause( + node, + visitNode(node.expression, visitor, isExpression), + visitNodes2(node.statements, topLevelNestedVisitor, isStatement) + ); + } + function visitDefaultClause(node) { + return visitEachChild(node, topLevelNestedVisitor, context); + } + function visitTryStatement(node) { + return visitEachChild(node, topLevelNestedVisitor, context); + } + function visitCatchClause(node) { + const savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; + enclosingBlockScopedContainer = node; + node = factory2.updateCatchClause( + node, + node.variableDeclaration, + Debug.checkDefined(visitNode(node.block, topLevelNestedVisitor, isBlock)) + ); + enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; + return node; + } + function visitBlock(node) { + const savedEnclosingBlockScopedContainer = enclosingBlockScopedContainer; + enclosingBlockScopedContainer = node; + node = visitEachChild(node, topLevelNestedVisitor, context); + enclosingBlockScopedContainer = savedEnclosingBlockScopedContainer; + return node; + } + function visitorWorker(node, valueIsDiscarded) { + if (!(node.transformFlags & (4096 /* ContainsDestructuringAssignment */ | 8388608 /* ContainsDynamicImport */ | 268435456 /* ContainsUpdateExpressionForIdentifier */))) { + return node; + } + switch (node.kind) { + case 249 /* ForStatement */: + return visitForStatement( + node, + /*isTopLevel*/ + false + ); + case 245 /* ExpressionStatement */: + return visitExpressionStatement(node); + case 218 /* ParenthesizedExpression */: + return visitParenthesizedExpression(node, valueIsDiscarded); + case 356 /* PartiallyEmittedExpression */: + return visitPartiallyEmittedExpression(node, valueIsDiscarded); + case 227 /* BinaryExpression */: + if (isDestructuringAssignment(node)) { + return visitDestructuringAssignment(node, valueIsDiscarded); + } + break; + case 214 /* CallExpression */: + if (isImportCall(node)) { + return visitImportCallExpression(node); + } + break; + case 225 /* PrefixUnaryExpression */: + case 226 /* PostfixUnaryExpression */: + return visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded); + } + return visitEachChild(node, visitor, context); + } + function visitor(node) { + return visitorWorker( + node, + /*valueIsDiscarded*/ + false + ); + } + function discardedValueVisitor(node) { + return visitorWorker( + node, + /*valueIsDiscarded*/ + true + ); + } + function visitExpressionStatement(node) { + return factory2.updateExpressionStatement(node, visitNode(node.expression, discardedValueVisitor, isExpression)); + } + function visitParenthesizedExpression(node, valueIsDiscarded) { + return factory2.updateParenthesizedExpression(node, visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, isExpression)); + } + function visitPartiallyEmittedExpression(node, valueIsDiscarded) { + return factory2.updatePartiallyEmittedExpression(node, visitNode(node.expression, valueIsDiscarded ? discardedValueVisitor : visitor, isExpression)); + } + function visitImportCallExpression(node) { + const externalModuleName = getExternalModuleNameLiteral(factory2, node, currentSourceFile, host, resolver, compilerOptions); + const firstArgument = visitNode(firstOrUndefined(node.arguments), visitor, isExpression); + const argument = externalModuleName && (!firstArgument || !isStringLiteral(firstArgument) || firstArgument.text !== externalModuleName.text) ? externalModuleName : firstArgument; + return factory2.createCallExpression( + factory2.createPropertyAccessExpression( + contextObject, + factory2.createIdentifier("import") + ), + /*typeArguments*/ + void 0, + argument ? [argument] : [] + ); + } + function visitDestructuringAssignment(node, valueIsDiscarded) { + if (hasExportedReferenceInDestructuringTarget(node.left)) { + return flattenDestructuringAssignment( + node, + visitor, + context, + 0 /* All */, + !valueIsDiscarded + ); + } + return visitEachChild(node, visitor, context); + } + function hasExportedReferenceInDestructuringTarget(node) { + if (isAssignmentExpression( + node, + /*excludeCompoundAssignment*/ + true + )) { + return hasExportedReferenceInDestructuringTarget(node.left); + } else if (isSpreadElement(node)) { + return hasExportedReferenceInDestructuringTarget(node.expression); + } else if (isObjectLiteralExpression(node)) { + return some(node.properties, hasExportedReferenceInDestructuringTarget); + } else if (isArrayLiteralExpression(node)) { + return some(node.elements, hasExportedReferenceInDestructuringTarget); + } else if (isShorthandPropertyAssignment(node)) { + return hasExportedReferenceInDestructuringTarget(node.name); + } else if (isPropertyAssignment(node)) { + return hasExportedReferenceInDestructuringTarget(node.initializer); + } else if (isIdentifier(node)) { + const container = resolver.getReferencedExportContainer(node); + return container !== void 0 && container.kind === 308 /* SourceFile */; + } else { + return false; + } + } + function visitPrefixOrPostfixUnaryExpression(node, valueIsDiscarded) { + if ((node.operator === 46 /* PlusPlusToken */ || node.operator === 47 /* MinusMinusToken */) && isIdentifier(node.operand) && !isGeneratedIdentifier(node.operand) && !isLocalName(node.operand) && !isDeclarationNameOfEnumOrNamespace(node.operand)) { + const exportedNames = getExports(node.operand); + if (exportedNames) { + let temp; + let expression = visitNode(node.operand, visitor, isExpression); + if (isPrefixUnaryExpression(node)) { + expression = factory2.updatePrefixUnaryExpression(node, expression); + } else { + expression = factory2.updatePostfixUnaryExpression(node, expression); + if (!valueIsDiscarded) { + temp = factory2.createTempVariable(hoistVariableDeclaration); + expression = factory2.createAssignment(temp, expression); + setTextRange(expression, node); + } + expression = factory2.createComma(expression, factory2.cloneNode(node.operand)); + setTextRange(expression, node); + } + for (const exportName of exportedNames) { + expression = createExportExpression(exportName, preventSubstitution(expression)); + } + if (temp) { + expression = factory2.createComma(expression, temp); + setTextRange(expression, node); + } + return expression; + } + } + return visitEachChild(node, visitor, context); + } + function modifierVisitor(node) { + switch (node.kind) { + case 95 /* ExportKeyword */: + case 90 /* DefaultKeyword */: + return void 0; + } + return node; + } + function onEmitNode(hint, node, emitCallback) { + if (node.kind === 308 /* SourceFile */) { + const id = getOriginalNodeId(node); + currentSourceFile = node; + moduleInfo = moduleInfoMap[id]; + exportFunction = exportFunctionsMap[id]; + noSubstitution = noSubstitutionMap[id]; + contextObject = contextObjectMap[id]; + if (noSubstitution) { + delete noSubstitutionMap[id]; + } + previousOnEmitNode(hint, node, emitCallback); + currentSourceFile = void 0; + moduleInfo = void 0; + exportFunction = void 0; + contextObject = void 0; + noSubstitution = void 0; + } else { + previousOnEmitNode(hint, node, emitCallback); + } + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (isSubstitutionPrevented(node)) { + return node; + } + if (hint === 1 /* Expression */) { + return substituteExpression(node); + } else if (hint === 4 /* Unspecified */) { + return substituteUnspecified(node); + } + return node; + } + function substituteUnspecified(node) { + switch (node.kind) { + case 305 /* ShorthandPropertyAssignment */: + return substituteShorthandPropertyAssignment(node); + } + return node; + } + function substituteShorthandPropertyAssignment(node) { + var _a, _b; + const name = node.name; + if (!isGeneratedIdentifier(name) && !isLocalName(name)) { + const importDeclaration = resolver.getReferencedImportDeclaration(name); + if (importDeclaration) { + if (isImportClause(importDeclaration)) { + return setTextRange( + factory2.createPropertyAssignment( + factory2.cloneNode(name), + factory2.createPropertyAccessExpression( + factory2.getGeneratedNameForNode(importDeclaration.parent), + factory2.createIdentifier("default") + ) + ), + /*location*/ + node + ); + } else if (isImportSpecifier(importDeclaration)) { + const importedName = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); + return setTextRange( + factory2.createPropertyAssignment( + factory2.cloneNode(name), + importedName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(importedName)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(importedName)) + ), + /*location*/ + node + ); + } + } + } + return node; + } + function substituteExpression(node) { + switch (node.kind) { + case 80 /* Identifier */: + return substituteExpressionIdentifier(node); + case 227 /* BinaryExpression */: + return substituteBinaryExpression(node); + case 237 /* MetaProperty */: + return substituteMetaProperty(node); + } + return node; + } + function substituteExpressionIdentifier(node) { + var _a, _b; + if (getEmitFlags(node) & 8192 /* HelperName */) { + const externalHelpersModuleName = getExternalHelpersModuleName(currentSourceFile); + if (externalHelpersModuleName) { + return factory2.createPropertyAccessExpression(externalHelpersModuleName, node); + } + return node; + } + if (!isGeneratedIdentifier(node) && !isLocalName(node)) { + const importDeclaration = resolver.getReferencedImportDeclaration(node); + if (importDeclaration) { + if (isImportClause(importDeclaration)) { + return setTextRange( + factory2.createPropertyAccessExpression( + factory2.getGeneratedNameForNode(importDeclaration.parent), + factory2.createIdentifier("default") + ), + /*location*/ + node + ); + } else if (isImportSpecifier(importDeclaration)) { + const importedName = importDeclaration.propertyName || importDeclaration.name; + const target = factory2.getGeneratedNameForNode(((_b = (_a = importDeclaration.parent) == null ? void 0 : _a.parent) == null ? void 0 : _b.parent) || importDeclaration); + return setTextRange( + importedName.kind === 11 /* StringLiteral */ ? factory2.createElementAccessExpression(target, factory2.cloneNode(importedName)) : factory2.createPropertyAccessExpression(target, factory2.cloneNode(importedName)), + /*location*/ + node + ); + } + } + } + return node; + } + function substituteBinaryExpression(node) { + if (isAssignmentOperator(node.operatorToken.kind) && isIdentifier(node.left) && (!isGeneratedIdentifier(node.left) || isFileLevelReservedGeneratedIdentifier(node.left)) && !isLocalName(node.left)) { + const exportedNames = getExports(node.left); + if (exportedNames) { + let expression = node; + for (const exportName of exportedNames) { + expression = createExportExpression(exportName, preventSubstitution(expression)); + } + return expression; + } + } + return node; + } + function substituteMetaProperty(node) { + if (isImportMeta(node)) { + return factory2.createPropertyAccessExpression(contextObject, factory2.createIdentifier("meta")); + } + return node; + } + function getExports(name) { + let exportedNames; + const valueDeclaration = getReferencedDeclaration(name); + if (valueDeclaration) { + const exportContainer = resolver.getReferencedExportContainer( + name, + /*prefixLocals*/ + false + ); + if (exportContainer && exportContainer.kind === 308 /* SourceFile */) { + exportedNames = append(exportedNames, factory2.getDeclarationName(valueDeclaration)); + } + exportedNames = addRange(exportedNames, moduleInfo == null ? void 0 : moduleInfo.exportedBindings[getOriginalNodeId(valueDeclaration)]); + } else if (isGeneratedIdentifier(name) && isFileLevelReservedGeneratedIdentifier(name)) { + const exportSpecifiers = moduleInfo == null ? void 0 : moduleInfo.exportSpecifiers.get(name); + if (exportSpecifiers) { + const exportedNames2 = []; + for (const exportSpecifier of exportSpecifiers) { + exportedNames2.push(exportSpecifier.name); + } + return exportedNames2; + } + } + return exportedNames; + } + function getReferencedDeclaration(name) { + if (!isGeneratedIdentifier(name)) { + const importDeclaration = resolver.getReferencedImportDeclaration(name); + if (importDeclaration) return importDeclaration; + const valueDeclaration = resolver.getReferencedValueDeclaration(name); + if (valueDeclaration && (moduleInfo == null ? void 0 : moduleInfo.exportedBindings[getOriginalNodeId(valueDeclaration)])) return valueDeclaration; + const declarations = resolver.getReferencedValueDeclarations(name); + if (declarations) { + for (const declaration of declarations) { + if (declaration !== valueDeclaration && (moduleInfo == null ? void 0 : moduleInfo.exportedBindings[getOriginalNodeId(declaration)])) return declaration; + } + } + return valueDeclaration; + } + } + function preventSubstitution(node) { + if (noSubstitution === void 0) noSubstitution = []; + noSubstitution[getNodeId(node)] = true; + return node; + } + function isSubstitutionPrevented(node) { + return noSubstitution && node.id && noSubstitution[node.id]; + } +} + +// src/compiler/transformers/module/esnextAnd2015.ts +function transformECMAScriptModule(context) { + const { + factory: factory2, + getEmitHelperFactory: emitHelpers + } = context; + const host = context.getEmitHost(); + const resolver = context.getEmitResolver(); + const compilerOptions = context.getCompilerOptions(); + const languageVersion = getEmitScriptTarget(compilerOptions); + const previousOnEmitNode = context.onEmitNode; + const previousOnSubstituteNode = context.onSubstituteNode; + context.onEmitNode = onEmitNode; + context.onSubstituteNode = onSubstituteNode; + context.enableEmitNotification(308 /* SourceFile */); + context.enableSubstitution(80 /* Identifier */); + const noSubstitution = /* @__PURE__ */ new Set(); + let importsAndRequiresToRewriteOrShim; + let helperNameSubstitutions; + let currentSourceFile; + let importRequireStatements; + return chainBundle(context, transformSourceFile); + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + if (isExternalModule(node) || getIsolatedModules(compilerOptions)) { + currentSourceFile = node; + importRequireStatements = void 0; + if (compilerOptions.rewriteRelativeImportExtensions && (currentSourceFile.flags & 4194304 /* PossiblyContainsDynamicImport */ || isInJSFile(node))) { + forEachDynamicImportOrRequireCall( + node, + /*includeTypeSpaceImports*/ + false, + /*requireStringLiteralLikeArgument*/ + false, + (node2) => { + if (!isStringLiteralLike(node2.arguments[0]) || shouldRewriteModuleSpecifier(node2.arguments[0].text, compilerOptions)) { + importsAndRequiresToRewriteOrShim = append(importsAndRequiresToRewriteOrShim, node2); + } + } + ); + } + let result = updateExternalModule(node); + addEmitHelpers(result, context.readEmitHelpers()); + currentSourceFile = void 0; + if (importRequireStatements) { + result = factory2.updateSourceFile( + result, + setTextRange(factory2.createNodeArray(insertStatementsAfterCustomPrologue(result.statements.slice(), importRequireStatements)), result.statements) + ); + } + if (!isExternalModule(node) || getEmitModuleKind(compilerOptions) === 200 /* Preserve */ || some(result.statements, isExternalModuleIndicator)) { + return result; + } + return factory2.updateSourceFile( + result, + setTextRange(factory2.createNodeArray([...result.statements, createEmptyExports(factory2)]), result.statements) + ); + } + return node; + } + function updateExternalModule(node) { + const externalHelpersImportDeclaration = createExternalHelpersImportDeclarationIfNeeded(factory2, emitHelpers(), node, compilerOptions); + if (externalHelpersImportDeclaration) { + const statements = []; + const statementOffset = factory2.copyPrologue(node.statements, statements); + addRange(statements, visitArray([externalHelpersImportDeclaration], visitor, isStatement)); + addRange(statements, visitNodes2(node.statements, visitor, isStatement, statementOffset)); + return factory2.updateSourceFile( + node, + setTextRange(factory2.createNodeArray(statements), node.statements) + ); + } else { + return visitEachChild(node, visitor, context); + } + } + function visitor(node) { + switch (node.kind) { + case 272 /* ImportEqualsDeclaration */: + return getEmitModuleKind(compilerOptions) >= 100 /* Node16 */ ? visitImportEqualsDeclaration(node) : void 0; + case 278 /* ExportAssignment */: + return visitExportAssignment(node); + case 279 /* ExportDeclaration */: + const exportDecl = node; + return visitExportDeclaration(exportDecl); + case 273 /* ImportDeclaration */: + return visitImportDeclaration(node); + case 214 /* CallExpression */: + if (node === (importsAndRequiresToRewriteOrShim == null ? void 0 : importsAndRequiresToRewriteOrShim[0])) { + return visitImportOrRequireCall(importsAndRequiresToRewriteOrShim.shift()); + } + // fallthrough + default: + if ((importsAndRequiresToRewriteOrShim == null ? void 0 : importsAndRequiresToRewriteOrShim.length) && rangeContainsRange(node, importsAndRequiresToRewriteOrShim[0])) { + return visitEachChild(node, visitor, context); + } + } + return node; + } + function visitImportDeclaration(node) { + if (!compilerOptions.rewriteRelativeImportExtensions) { + return node; + } + const updatedModuleSpecifier = rewriteModuleSpecifier(node.moduleSpecifier, compilerOptions); + if (updatedModuleSpecifier === node.moduleSpecifier) { + return node; + } + return factory2.updateImportDeclaration( + node, + node.modifiers, + node.importClause, + updatedModuleSpecifier, + node.attributes + ); + } + function visitImportOrRequireCall(node) { + return factory2.updateCallExpression( + node, + node.expression, + node.typeArguments, + [ + isStringLiteralLike(node.arguments[0]) ? rewriteModuleSpecifier(node.arguments[0], compilerOptions) : emitHelpers().createRewriteRelativeImportExtensionsHelper(node.arguments[0]), + ...node.arguments.slice(1) + ] + ); + } + function createRequireCall2(importNode) { + const moduleName = getExternalModuleNameLiteral(factory2, importNode, Debug.checkDefined(currentSourceFile), host, resolver, compilerOptions); + const args = []; + if (moduleName) { + args.push(rewriteModuleSpecifier(moduleName, compilerOptions)); + } + if (getEmitModuleKind(compilerOptions) === 200 /* Preserve */) { + return factory2.createCallExpression( + factory2.createIdentifier("require"), + /*typeArguments*/ + void 0, + args + ); + } + if (!importRequireStatements) { + const createRequireName = factory2.createUniqueName("_createRequire", 16 /* Optimistic */ | 32 /* FileLevel */); + const importStatement = factory2.createImportDeclaration( + /*modifiers*/ + void 0, + factory2.createImportClause( + /*phaseModifier*/ + void 0, + /*name*/ + void 0, + factory2.createNamedImports([ + factory2.createImportSpecifier( + /*isTypeOnly*/ + false, + factory2.createIdentifier("createRequire"), + createRequireName + ) + ]) + ), + factory2.createStringLiteral("module"), + /*attributes*/ + void 0 + ); + const requireHelperName = factory2.createUniqueName("__require", 16 /* Optimistic */ | 32 /* FileLevel */); + const requireStatement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + [ + factory2.createVariableDeclaration( + requireHelperName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory2.createCallExpression( + factory2.cloneNode(createRequireName), + /*typeArguments*/ + void 0, + [ + factory2.createPropertyAccessExpression(factory2.createMetaProperty(102 /* ImportKeyword */, factory2.createIdentifier("meta")), factory2.createIdentifier("url")) + ] + ) + ) + ], + /*flags*/ + languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */ + ) + ); + importRequireStatements = [importStatement, requireStatement]; + } + const name = importRequireStatements[1].declarationList.declarations[0].name; + Debug.assertNode(name, isIdentifier); + return factory2.createCallExpression( + factory2.cloneNode(name), + /*typeArguments*/ + void 0, + args + ); + } + function visitImportEqualsDeclaration(node) { + Debug.assert(isExternalModuleImportEqualsDeclaration(node), "import= for internal module references should be handled in an earlier transformer."); + let statements; + statements = append( + statements, + setOriginalNode( + setTextRange( + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + [ + factory2.createVariableDeclaration( + factory2.cloneNode(node.name), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + createRequireCall2(node) + ) + ], + /*flags*/ + languageVersion >= 2 /* ES2015 */ ? 2 /* Const */ : 0 /* None */ + ) + ), + node + ), + node + ) + ); + statements = appendExportsOfImportEqualsDeclaration(statements, node); + return singleOrMany(statements); + } + function appendExportsOfImportEqualsDeclaration(statements, node) { + if (hasSyntacticModifier(node, 32 /* Export */)) { + statements = append( + statements, + factory2.createExportDeclaration( + /*modifiers*/ + void 0, + node.isTypeOnly, + factory2.createNamedExports([factory2.createExportSpecifier( + /*isTypeOnly*/ + false, + /*propertyName*/ + void 0, + idText(node.name) + )]) + ) + ); + } + return statements; + } + function visitExportAssignment(node) { + if (node.isExportEquals) { + if (getEmitModuleKind(compilerOptions) === 200 /* Preserve */) { + const statement = setOriginalNode( + factory2.createExpressionStatement( + factory2.createAssignment( + factory2.createPropertyAccessExpression( + factory2.createIdentifier("module"), + "exports" + ), + node.expression + ) + ), + node + ); + return statement; + } + return void 0; + } + return node; + } + function visitExportDeclaration(node) { + const updatedModuleSpecifier = rewriteModuleSpecifier(node.moduleSpecifier, compilerOptions); + if (compilerOptions.module !== void 0 && compilerOptions.module > 5 /* ES2015 */ || !node.exportClause || !isNamespaceExport(node.exportClause) || !node.moduleSpecifier) { + return !node.moduleSpecifier || updatedModuleSpecifier === node.moduleSpecifier ? node : factory2.updateExportDeclaration( + node, + node.modifiers, + node.isTypeOnly, + node.exportClause, + updatedModuleSpecifier, + node.attributes + ); + } + const oldIdentifier = node.exportClause.name; + const synthName = factory2.getGeneratedNameForNode(oldIdentifier); + const importDecl = factory2.createImportDeclaration( + /*modifiers*/ + void 0, + factory2.createImportClause( + /*phaseModifier*/ + void 0, + /*name*/ + void 0, + factory2.createNamespaceImport( + synthName + ) + ), + updatedModuleSpecifier, + node.attributes + ); + setOriginalNode(importDecl, node.exportClause); + const exportDecl = isExportNamespaceAsDefaultDeclaration(node) ? factory2.createExportDefault(synthName) : factory2.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory2.createNamedExports([factory2.createExportSpecifier( + /*isTypeOnly*/ + false, + synthName, + oldIdentifier + )]) + ); + setOriginalNode(exportDecl, node); + return [importDecl, exportDecl]; + } + function onEmitNode(hint, node, emitCallback) { + if (isSourceFile(node)) { + if ((isExternalModule(node) || getIsolatedModules(compilerOptions)) && compilerOptions.importHelpers) { + helperNameSubstitutions = /* @__PURE__ */ new Map(); + } + currentSourceFile = node; + previousOnEmitNode(hint, node, emitCallback); + currentSourceFile = void 0; + helperNameSubstitutions = void 0; + } else { + previousOnEmitNode(hint, node, emitCallback); + } + } + function onSubstituteNode(hint, node) { + node = previousOnSubstituteNode(hint, node); + if (node.id && noSubstitution.has(node.id)) { + return node; + } + if (isIdentifier(node) && getEmitFlags(node) & 8192 /* HelperName */) { + return substituteHelperName(node); + } + return node; + } + function substituteHelperName(node) { + const externalHelpersModuleName = currentSourceFile && getExternalHelpersModuleName(currentSourceFile); + if (externalHelpersModuleName) { + noSubstitution.add(getNodeId(node)); + return factory2.createPropertyAccessExpression(externalHelpersModuleName, node); + } + if (helperNameSubstitutions) { + const name = idText(node); + let substitution = helperNameSubstitutions.get(name); + if (!substitution) { + helperNameSubstitutions.set(name, substitution = factory2.createUniqueName(name, 16 /* Optimistic */ | 32 /* FileLevel */)); + } + return substitution; + } + return node; + } +} + +// src/compiler/transformers/module/impliedNodeFormatDependent.ts +function transformImpliedNodeFormatDependentModule(context) { + const previousOnSubstituteNode = context.onSubstituteNode; + const previousOnEmitNode = context.onEmitNode; + const esmTransform = transformECMAScriptModule(context); + const esmOnSubstituteNode = context.onSubstituteNode; + const esmOnEmitNode = context.onEmitNode; + context.onSubstituteNode = previousOnSubstituteNode; + context.onEmitNode = previousOnEmitNode; + const cjsTransform = transformModule(context); + const cjsOnSubstituteNode = context.onSubstituteNode; + const cjsOnEmitNode = context.onEmitNode; + const getEmitModuleFormatOfFile2 = (file) => context.getEmitHost().getEmitModuleFormatOfFile(file); + context.onSubstituteNode = onSubstituteNode; + context.onEmitNode = onEmitNode; + context.enableSubstitution(308 /* SourceFile */); + context.enableEmitNotification(308 /* SourceFile */); + let currentSourceFile; + return transformSourceFileOrBundle; + function onSubstituteNode(hint, node) { + if (isSourceFile(node)) { + currentSourceFile = node; + return previousOnSubstituteNode(hint, node); + } else { + if (!currentSourceFile) { + return previousOnSubstituteNode(hint, node); + } + if (getEmitModuleFormatOfFile2(currentSourceFile) >= 5 /* ES2015 */) { + return esmOnSubstituteNode(hint, node); + } + return cjsOnSubstituteNode(hint, node); + } + } + function onEmitNode(hint, node, emitCallback) { + if (isSourceFile(node)) { + currentSourceFile = node; + } + if (!currentSourceFile) { + return previousOnEmitNode(hint, node, emitCallback); + } + if (getEmitModuleFormatOfFile2(currentSourceFile) >= 5 /* ES2015 */) { + return esmOnEmitNode(hint, node, emitCallback); + } + return cjsOnEmitNode(hint, node, emitCallback); + } + function getModuleTransformForFile(file) { + return getEmitModuleFormatOfFile2(file) >= 5 /* ES2015 */ ? esmTransform : cjsTransform; + } + function transformSourceFile(node) { + if (node.isDeclarationFile) { + return node; + } + currentSourceFile = node; + const result = getModuleTransformForFile(node)(node); + currentSourceFile = void 0; + Debug.assert(isSourceFile(result)); + return result; + } + function transformSourceFileOrBundle(node) { + return node.kind === 308 /* SourceFile */ ? transformSourceFile(node) : transformBundle(node); + } + function transformBundle(node) { + return context.factory.createBundle(map(node.sourceFiles, transformSourceFile)); + } +} + +// src/compiler/transformers/declarations/diagnostics.ts +function canProduceDiagnostics(node) { + return isVariableDeclaration(node) || isPropertyDeclaration(node) || isPropertySignature(node) || isBindingElement(node) || isSetAccessor(node) || isGetAccessor(node) || isConstructSignatureDeclaration(node) || isCallSignatureDeclaration(node) || isMethodDeclaration(node) || isMethodSignature(node) || isFunctionDeclaration(node) || isParameter(node) || isTypeParameterDeclaration(node) || isExpressionWithTypeArguments(node) || isImportEqualsDeclaration(node) || isTypeAliasDeclaration(node) || isConstructorDeclaration(node) || isIndexSignatureDeclaration(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node) || isBinaryExpression(node) || isJSDocTypeAlias(node); +} +function createGetSymbolAccessibilityDiagnosticForNodeName(node) { + if (isSetAccessor(node) || isGetAccessor(node)) { + return getAccessorNameVisibilityError; + } else if (isMethodSignature(node) || isMethodDeclaration(node)) { + return getMethodNameVisibilityError; + } else { + return createGetSymbolAccessibilityDiagnosticForNode(node); + } + function getAccessorNameVisibilityError(symbolAccessibilityResult) { + const diagnosticMessage = getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult); + return diagnosticMessage !== void 0 ? { + diagnosticMessage, + errorNode: node, + typeName: node.name + } : void 0; + } + function getAccessorNameVisibilityDiagnosticMessage(symbolAccessibilityResult) { + if (isStatic(node)) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } else if (node.parent.kind === 264 /* ClassDeclaration */) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } else { + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + function getMethodNameVisibilityError(symbolAccessibilityResult) { + const diagnosticMessage = getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult); + return diagnosticMessage !== void 0 ? { + diagnosticMessage, + errorNode: node, + typeName: node.name + } : void 0; + } + function getMethodNameVisibilityDiagnosticMessage(symbolAccessibilityResult) { + if (isStatic(node)) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_static_method_0_of_exported_class_has_or_is_using_private_name_1; + } else if (node.parent.kind === 264 /* ClassDeclaration */) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_method_0_of_exported_class_has_or_is_using_private_name_1; + } else { + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Method_0_of_exported_interface_has_or_is_using_private_name_1; + } + } +} +function createGetSymbolAccessibilityDiagnosticForNode(node) { + if (isVariableDeclaration(node) || isPropertyDeclaration(node) || isPropertySignature(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node) || isBinaryExpression(node) || isBindingElement(node) || isConstructorDeclaration(node)) { + return getVariableDeclarationTypeVisibilityError; + } else if (isSetAccessor(node) || isGetAccessor(node)) { + return getAccessorDeclarationTypeVisibilityError; + } else if (isConstructSignatureDeclaration(node) || isCallSignatureDeclaration(node) || isMethodDeclaration(node) || isMethodSignature(node) || isFunctionDeclaration(node) || isIndexSignatureDeclaration(node)) { + return getReturnTypeVisibilityError; + } else if (isParameter(node)) { + if (isParameterPropertyDeclaration(node, node.parent) && hasSyntacticModifier(node.parent, 2 /* Private */)) { + return getVariableDeclarationTypeVisibilityError; + } + return getParameterDeclarationTypeVisibilityError; + } else if (isTypeParameterDeclaration(node)) { + return getTypeParameterConstraintVisibilityError; + } else if (isExpressionWithTypeArguments(node)) { + return getHeritageClauseVisibilityError; + } else if (isImportEqualsDeclaration(node)) { + return getImportEntityNameVisibilityError; + } else if (isTypeAliasDeclaration(node) || isJSDocTypeAlias(node)) { + return getTypeAliasDeclarationVisibilityError; + } else { + return Debug.assertNever(node, `Attempted to set a declaration diagnostic context for unhandled node kind: ${Debug.formatSyntaxKind(node.kind)}`); + } + function getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { + if (node.kind === 261 /* VariableDeclaration */ || node.kind === 209 /* BindingElement */) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Exported_variable_0_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Exported_variable_0_has_or_is_using_private_name_1; + } else if (node.kind === 173 /* PropertyDeclaration */ || node.kind === 212 /* PropertyAccessExpression */ || node.kind === 213 /* ElementAccessExpression */ || node.kind === 227 /* BinaryExpression */ || node.kind === 172 /* PropertySignature */ || node.kind === 170 /* Parameter */ && hasSyntacticModifier(node.parent, 2 /* Private */)) { + if (isStatic(node)) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_static_property_0_of_exported_class_has_or_is_using_private_name_1; + } else if (node.parent.kind === 264 /* ClassDeclaration */ || node.kind === 170 /* Parameter */) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Public_property_0_of_exported_class_has_or_is_using_private_name_1; + } else { + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Property_0_of_exported_interface_has_or_is_using_private_name_1; + } + } + } + function getVariableDeclarationTypeVisibilityError(symbolAccessibilityResult) { + const diagnosticMessage = getVariableDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult); + return diagnosticMessage !== void 0 ? { + diagnosticMessage, + errorNode: node, + typeName: node.name + } : void 0; + } + function getAccessorDeclarationTypeVisibilityError(symbolAccessibilityResult) { + let diagnosticMessage; + if (node.kind === 179 /* SetAccessor */) { + if (isStatic(node)) { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1; + } else { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1; + } + } else { + if (isStatic(node)) { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1; + } else { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1; + } + } + return { + diagnosticMessage, + errorNode: node.name, + typeName: node.name + }; + } + function getReturnTypeVisibilityError(symbolAccessibilityResult) { + let diagnosticMessage; + switch (node.kind) { + case 181 /* ConstructSignature */: + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 180 /* CallSignature */: + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 182 /* IndexSignature */: + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0; + break; + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + if (isStatic(node)) { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0; + } else if (node.parent.kind === 264 /* ClassDeclaration */) { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0; + } else { + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0; + } + break; + case 263 /* FunctionDeclaration */: + diagnosticMessage = symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named : Diagnostics.Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1 : Diagnostics.Return_type_of_exported_function_has_or_is_using_private_name_0; + break; + default: + return Debug.fail("This is unknown kind for signature: " + node.kind); + } + return { + diagnosticMessage, + errorNode: node.name || node + }; + } + function getParameterDeclarationTypeVisibilityError(symbolAccessibilityResult) { + const diagnosticMessage = getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult); + return diagnosticMessage !== void 0 ? { + diagnosticMessage, + errorNode: node, + typeName: node.name + } : void 0; + } + function getParameterDeclarationTypeVisibilityDiagnosticMessage(symbolAccessibilityResult) { + switch (node.parent.kind) { + case 177 /* Constructor */: + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1; + case 181 /* ConstructSignature */: + case 186 /* ConstructorType */: + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + case 180 /* CallSignature */: + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + case 182 /* IndexSignature */: + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1; + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + if (isStatic(node.parent)) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } else if (node.parent.parent.kind === 264 /* ClassDeclaration */) { + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } else { + return symbolAccessibilityResult.errorModuleName ? Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + case 263 /* FunctionDeclaration */: + case 185 /* FunctionType */: + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_exported_function_has_or_is_using_private_name_1; + case 179 /* SetAccessor */: + case 178 /* GetAccessor */: + return symbolAccessibilityResult.errorModuleName ? symbolAccessibilityResult.accessibility === 2 /* CannotBeNamed */ ? Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named : Diagnostics.Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2 : Diagnostics.Parameter_0_of_accessor_has_or_is_using_private_name_1; + default: + return Debug.fail(`Unknown parent for parameter: ${Debug.formatSyntaxKind(node.parent.kind)}`); + } + } + function getTypeParameterConstraintVisibilityError() { + let diagnosticMessage; + switch (node.parent.kind) { + case 264 /* ClassDeclaration */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_class_has_or_is_using_private_name_1; + break; + case 265 /* InterfaceDeclaration */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; + break; + case 201 /* MappedType */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1; + break; + case 186 /* ConstructorType */: + case 181 /* ConstructSignature */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 180 /* CallSignature */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1; + break; + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + if (isStatic(node.parent)) { + diagnosticMessage = Diagnostics.Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1; + } else if (node.parent.parent.kind === 264 /* ClassDeclaration */) { + diagnosticMessage = Diagnostics.Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1; + } else { + diagnosticMessage = Diagnostics.Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1; + } + break; + case 185 /* FunctionType */: + case 263 /* FunctionDeclaration */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; + break; + case 196 /* InferType */: + diagnosticMessage = Diagnostics.Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1; + break; + case 266 /* TypeAliasDeclaration */: + diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1; + break; + default: + return Debug.fail("This is unknown parent for type parameter: " + node.parent.kind); + } + return { + diagnosticMessage, + errorNode: node, + typeName: node.name + }; + } + function getHeritageClauseVisibilityError() { + let diagnosticMessage; + if (isClassDeclaration(node.parent.parent)) { + diagnosticMessage = isHeritageClause(node.parent) && node.parent.token === 119 /* ImplementsKeyword */ ? Diagnostics.Implements_clause_of_exported_class_0_has_or_is_using_private_name_1 : node.parent.parent.name ? Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1 : Diagnostics.extends_clause_of_exported_class_has_or_is_using_private_name_0; + } else { + diagnosticMessage = Diagnostics.extends_clause_of_exported_interface_0_has_or_is_using_private_name_1; + } + return { + diagnosticMessage, + errorNode: node, + typeName: getNameOfDeclaration(node.parent.parent) + }; + } + function getImportEntityNameVisibilityError() { + return { + diagnosticMessage: Diagnostics.Import_declaration_0_is_using_private_name_1, + errorNode: node, + typeName: node.name + }; + } + function getTypeAliasDeclarationVisibilityError(symbolAccessibilityResult) { + return { + diagnosticMessage: symbolAccessibilityResult.errorModuleName ? Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2 : Diagnostics.Exported_type_alias_0_has_or_is_using_private_name_1, + errorNode: isJSDocTypeAlias(node) ? Debug.checkDefined(node.typeExpression) : node.type, + typeName: isJSDocTypeAlias(node) ? getNameOfDeclaration(node) : node.name + }; + } +} +function createGetIsolatedDeclarationErrors(resolver) { + const relatedSuggestionByDeclarationKind = { + [220 /* ArrowFunction */]: Diagnostics.Add_a_return_type_to_the_function_expression, + [219 /* FunctionExpression */]: Diagnostics.Add_a_return_type_to_the_function_expression, + [175 /* MethodDeclaration */]: Diagnostics.Add_a_return_type_to_the_method, + [178 /* GetAccessor */]: Diagnostics.Add_a_return_type_to_the_get_accessor_declaration, + [179 /* SetAccessor */]: Diagnostics.Add_a_type_to_parameter_of_the_set_accessor_declaration, + [263 /* FunctionDeclaration */]: Diagnostics.Add_a_return_type_to_the_function_declaration, + [181 /* ConstructSignature */]: Diagnostics.Add_a_return_type_to_the_function_declaration, + [170 /* Parameter */]: Diagnostics.Add_a_type_annotation_to_the_parameter_0, + [261 /* VariableDeclaration */]: Diagnostics.Add_a_type_annotation_to_the_variable_0, + [173 /* PropertyDeclaration */]: Diagnostics.Add_a_type_annotation_to_the_property_0, + [172 /* PropertySignature */]: Diagnostics.Add_a_type_annotation_to_the_property_0, + [278 /* ExportAssignment */]: Diagnostics.Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it + }; + const errorByDeclarationKind = { + [219 /* FunctionExpression */]: Diagnostics.Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations, + [263 /* FunctionDeclaration */]: Diagnostics.Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations, + [220 /* ArrowFunction */]: Diagnostics.Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations, + [175 /* MethodDeclaration */]: Diagnostics.Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations, + [181 /* ConstructSignature */]: Diagnostics.Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations, + [178 /* GetAccessor */]: Diagnostics.At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations, + [179 /* SetAccessor */]: Diagnostics.At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations, + [170 /* Parameter */]: Diagnostics.Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations, + [261 /* VariableDeclaration */]: Diagnostics.Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations, + [173 /* PropertyDeclaration */]: Diagnostics.Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations, + [172 /* PropertySignature */]: Diagnostics.Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations, + [168 /* ComputedPropertyName */]: Diagnostics.Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations, + [306 /* SpreadAssignment */]: Diagnostics.Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations, + [305 /* ShorthandPropertyAssignment */]: Diagnostics.Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations, + [210 /* ArrayLiteralExpression */]: Diagnostics.Only_const_arrays_can_be_inferred_with_isolatedDeclarations, + [278 /* ExportAssignment */]: Diagnostics.Default_exports_can_t_be_inferred_with_isolatedDeclarations, + [231 /* SpreadElement */]: Diagnostics.Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations + }; + return getDiagnostic2; + function getDiagnostic2(node) { + const heritageClause = findAncestor(node, isHeritageClause); + if (heritageClause) { + return createDiagnosticForNode(node, Diagnostics.Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations); + } + if ((isPartOfTypeNode(node) || isTypeQueryNode(node.parent)) && (isEntityName(node) || isEntityNameExpression(node))) { + return createEntityInTypeNodeError(node); + } + Debug.type(node); + switch (node.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return createAccessorTypeError(node); + case 168 /* ComputedPropertyName */: + case 305 /* ShorthandPropertyAssignment */: + case 306 /* SpreadAssignment */: + return createObjectLiteralError(node); + case 210 /* ArrayLiteralExpression */: + case 231 /* SpreadElement */: + return createArrayLiteralError(node); + case 175 /* MethodDeclaration */: + case 181 /* ConstructSignature */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 263 /* FunctionDeclaration */: + return createReturnTypeError(node); + case 209 /* BindingElement */: + return createBindingElementError(node); + case 173 /* PropertyDeclaration */: + case 261 /* VariableDeclaration */: + return createVariableOrPropertyError(node); + case 170 /* Parameter */: + return createParameterError(node); + case 304 /* PropertyAssignment */: + return createExpressionError(node.initializer); + case 232 /* ClassExpression */: + return createClassExpressionError(node); + default: + assertType(node); + return createExpressionError(node); + } + } + function findNearestDeclaration(node) { + const result = findAncestor(node, (n) => isExportAssignment(n) || isStatement(n) || isVariableDeclaration(n) || isPropertyDeclaration(n) || isParameter(n)); + if (!result) return void 0; + if (isExportAssignment(result)) return result; + if (isReturnStatement(result)) { + return findAncestor(result, (n) => isFunctionLikeDeclaration(n) && !isConstructorDeclaration(n)); + } + return isStatement(result) ? void 0 : result; + } + function createAccessorTypeError(node) { + const { getAccessor, setAccessor } = getAllAccessorDeclarations(node.symbol.declarations, node); + const targetNode = (isSetAccessor(node) ? node.parameters[0] : node) ?? node; + const diag2 = createDiagnosticForNode(targetNode, errorByDeclarationKind[node.kind]); + if (setAccessor) { + addRelatedInfo(diag2, createDiagnosticForNode(setAccessor, relatedSuggestionByDeclarationKind[setAccessor.kind])); + } + if (getAccessor) { + addRelatedInfo(diag2, createDiagnosticForNode(getAccessor, relatedSuggestionByDeclarationKind[getAccessor.kind])); + } + return diag2; + } + function addParentDeclarationRelatedInfo(node, diag2) { + const parentDeclaration = findNearestDeclaration(node); + if (parentDeclaration) { + const targetStr = isExportAssignment(parentDeclaration) || !parentDeclaration.name ? "" : getTextOfNode( + parentDeclaration.name, + /*includeTrivia*/ + false + ); + addRelatedInfo(diag2, createDiagnosticForNode(parentDeclaration, relatedSuggestionByDeclarationKind[parentDeclaration.kind], targetStr)); + } + return diag2; + } + function createObjectLiteralError(node) { + const diag2 = createDiagnosticForNode(node, errorByDeclarationKind[node.kind]); + addParentDeclarationRelatedInfo(node, diag2); + return diag2; + } + function createArrayLiteralError(node) { + const diag2 = createDiagnosticForNode(node, errorByDeclarationKind[node.kind]); + addParentDeclarationRelatedInfo(node, diag2); + return diag2; + } + function createReturnTypeError(node) { + const diag2 = createDiagnosticForNode(node, errorByDeclarationKind[node.kind]); + addParentDeclarationRelatedInfo(node, diag2); + addRelatedInfo(diag2, createDiagnosticForNode(node, relatedSuggestionByDeclarationKind[node.kind])); + return diag2; + } + function createBindingElementError(node) { + return createDiagnosticForNode(node, Diagnostics.Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations); + } + function createVariableOrPropertyError(node) { + const diag2 = createDiagnosticForNode(node, errorByDeclarationKind[node.kind]); + const targetStr = getTextOfNode( + node.name, + /*includeTrivia*/ + false + ); + addRelatedInfo(diag2, createDiagnosticForNode(node, relatedSuggestionByDeclarationKind[node.kind], targetStr)); + return diag2; + } + function createParameterError(node) { + if (isSetAccessor(node.parent)) { + return createAccessorTypeError(node.parent); + } + const addUndefined = resolver.requiresAddingImplicitUndefined(node, node.parent); + if (!addUndefined && node.initializer) { + return createExpressionError(node.initializer); + } + const message = addUndefined ? Diagnostics.Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_supported_with_isolatedDeclarations : errorByDeclarationKind[node.kind]; + const diag2 = createDiagnosticForNode(node, message); + const targetStr = getTextOfNode( + node.name, + /*includeTrivia*/ + false + ); + addRelatedInfo(diag2, createDiagnosticForNode(node, relatedSuggestionByDeclarationKind[node.kind], targetStr)); + return diag2; + } + function createClassExpressionError(node) { + return createExpressionError(node, Diagnostics.Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations); + } + function createEntityInTypeNodeError(node) { + const diag2 = createDiagnosticForNode(node, Diagnostics.Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations, getTextOfNode( + node, + /*includeTrivia*/ + false + )); + addParentDeclarationRelatedInfo(node, diag2); + return diag2; + } + function createExpressionError(node, diagnosticMessage) { + const parentDeclaration = findNearestDeclaration(node); + let diag2; + if (parentDeclaration) { + const targetStr = isExportAssignment(parentDeclaration) || !parentDeclaration.name ? "" : getTextOfNode( + parentDeclaration.name, + /*includeTrivia*/ + false + ); + const parent2 = findAncestor(node.parent, (n) => isExportAssignment(n) || (isStatement(n) ? "quit" : !isParenthesizedExpression(n) && !isTypeAssertionExpression(n) && !isAsExpression(n))); + if (parentDeclaration === parent2) { + diag2 = createDiagnosticForNode(node, diagnosticMessage ?? errorByDeclarationKind[parentDeclaration.kind]); + addRelatedInfo(diag2, createDiagnosticForNode(parentDeclaration, relatedSuggestionByDeclarationKind[parentDeclaration.kind], targetStr)); + } else { + diag2 = createDiagnosticForNode(node, diagnosticMessage ?? Diagnostics.Expression_type_can_t_be_inferred_with_isolatedDeclarations); + addRelatedInfo(diag2, createDiagnosticForNode(parentDeclaration, relatedSuggestionByDeclarationKind[parentDeclaration.kind], targetStr)); + addRelatedInfo(diag2, createDiagnosticForNode(node, Diagnostics.Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit)); + } + } else { + diag2 = createDiagnosticForNode(node, diagnosticMessage ?? Diagnostics.Expression_type_can_t_be_inferred_with_isolatedDeclarations); + } + return diag2; + } +} + +// src/compiler/transformers/declarations.ts +function getDeclarationDiagnostics(host, resolver, file) { + const compilerOptions = host.getCompilerOptions(); + const files = filter(getSourceFilesToEmit(host, file), isSourceFileNotJson); + return contains(files, file) ? transformNodes( + resolver, + host, + factory, + compilerOptions, + [file], + [transformDeclarations], + /*allowDtsFiles*/ + false + ).diagnostics : void 0; +} +var declarationEmitNodeBuilderFlags = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitInternalNodeBuilderFlags = 8 /* AllowUnresolvedNames */; +function transformDeclarations(context) { + const throwDiagnostic = () => Debug.fail("Diagnostic emitted without context"); + let getSymbolAccessibilityDiagnostic = throwDiagnostic; + let needsDeclare = true; + let isBundledEmit = false; + let resultHasExternalModuleIndicator = false; + let needsScopeFixMarker = false; + let resultHasScopeMarker = false; + let enclosingDeclaration; + let lateMarkedStatements; + let lateStatementReplacementMap; + let suppressNewDiagnosticContexts; + const { factory: factory2 } = context; + const host = context.getEmitHost(); + let restoreFallbackNode = () => void 0; + const symbolTracker = { + trackSymbol, + reportInaccessibleThisError, + reportInaccessibleUniqueSymbolError, + reportCyclicStructureError, + reportPrivateInBaseOfClassExpression, + reportLikelyUnsafeImportRequiredError, + reportTruncationError, + moduleResolverHost: host, + reportNonlocalAugmentation, + reportNonSerializableProperty, + reportInferenceFallback, + pushErrorFallbackNode(node) { + const currentFallback = errorFallbackNode; + const currentRestore = restoreFallbackNode; + restoreFallbackNode = () => { + restoreFallbackNode = currentRestore; + errorFallbackNode = currentFallback; + }; + errorFallbackNode = node; + }, + popErrorFallbackNode() { + restoreFallbackNode(); + } + }; + let errorNameNode; + let errorFallbackNode; + let currentSourceFile; + let rawReferencedFiles; + let rawTypeReferenceDirectives; + let rawLibReferenceDirectives; + const resolver = context.getEmitResolver(); + const options = context.getCompilerOptions(); + const getIsolatedDeclarationError = createGetIsolatedDeclarationErrors(resolver); + const { stripInternal, isolatedDeclarations } = options; + return transformRoot; + function reportExpandoFunctionErrors(node) { + resolver.getPropertiesOfContainerFunction(node).forEach((p) => { + if (isExpandoPropertyDeclaration(p.valueDeclaration)) { + const errorTarget = isBinaryExpression(p.valueDeclaration) ? p.valueDeclaration.left : p.valueDeclaration; + context.addDiagnostic(createDiagnosticForNode( + errorTarget, + Diagnostics.Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations_Add_an_explicit_declaration_for_the_properties_assigned_to_this_function + )); + } + }); + } + function reportInferenceFallback(node) { + if (!isolatedDeclarations || isSourceFileJS(currentSourceFile)) return; + if (getSourceFileOfNode(node) !== currentSourceFile) return; + if (isVariableDeclaration(node) && resolver.isExpandoFunctionDeclaration(node)) { + reportExpandoFunctionErrors(node); + } else { + context.addDiagnostic(getIsolatedDeclarationError(node)); + } + } + function handleSymbolAccessibilityError(symbolAccessibilityResult) { + if (symbolAccessibilityResult.accessibility === 0 /* Accessible */) { + if (symbolAccessibilityResult.aliasesToMakeVisible) { + if (!lateMarkedStatements) { + lateMarkedStatements = symbolAccessibilityResult.aliasesToMakeVisible; + } else { + for (const ref of symbolAccessibilityResult.aliasesToMakeVisible) { + pushIfUnique(lateMarkedStatements, ref); + } + } + } + } else if (symbolAccessibilityResult.accessibility !== 3 /* NotResolved */) { + const errorInfo = getSymbolAccessibilityDiagnostic(symbolAccessibilityResult); + if (errorInfo) { + if (errorInfo.typeName) { + context.addDiagnostic(createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, getTextOfNode(errorInfo.typeName), symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName)); + } else { + context.addDiagnostic(createDiagnosticForNode(symbolAccessibilityResult.errorNode || errorInfo.errorNode, errorInfo.diagnosticMessage, symbolAccessibilityResult.errorSymbolName, symbolAccessibilityResult.errorModuleName)); + } + return true; + } + } + return false; + } + function trackSymbol(symbol, enclosingDeclaration2, meaning) { + if (symbol.flags & 262144 /* TypeParameter */) return false; + const issuedDiagnostic = handleSymbolAccessibilityError(resolver.isSymbolAccessible( + symbol, + enclosingDeclaration2, + meaning, + /*shouldComputeAliasToMarkVisible*/ + true + )); + return issuedDiagnostic; + } + function reportPrivateInBaseOfClassExpression(propertyName) { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic( + addRelatedInfo( + createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected, propertyName), + ...isVariableDeclaration((errorNameNode || errorFallbackNode).parent) ? [createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.Add_a_type_annotation_to_the_variable_0, errorDeclarationNameWithFallback())] : [] + ) + ); + } + } + function errorDeclarationNameWithFallback() { + return errorNameNode ? declarationNameToString(errorNameNode) : errorFallbackNode && getNameOfDeclaration(errorFallbackNode) ? declarationNameToString(getNameOfDeclaration(errorFallbackNode)) : errorFallbackNode && isExportAssignment(errorFallbackNode) ? errorFallbackNode.isExportEquals ? "export=" : "default" : "(Missing)"; + } + function reportInaccessibleUniqueSymbolError() { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "unique symbol")); + } + } + function reportCyclicStructureError() { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialized_A_type_annotation_is_necessary, errorDeclarationNameWithFallback())); + } + } + function reportInaccessibleThisError() { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this")); + } + } + function reportLikelyUnsafeImportRequiredError(specifier) { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier)); + } + } + function reportTruncationError() { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_type_annotation_is_needed)); + } + } + function reportNonlocalAugmentation(containingFile, parentSymbol, symbol) { + var _a; + const primaryDeclaration = (_a = parentSymbol.declarations) == null ? void 0 : _a.find((d) => getSourceFileOfNode(d) === containingFile); + const augmentingDeclarations = filter(symbol.declarations, (d) => getSourceFileOfNode(d) !== containingFile); + if (primaryDeclaration && augmentingDeclarations) { + for (const augmentations of augmentingDeclarations) { + context.addDiagnostic(addRelatedInfo( + createDiagnosticForNode(augmentations, Diagnostics.Declaration_augments_declaration_in_another_file_This_cannot_be_serialized), + createDiagnosticForNode(primaryDeclaration, Diagnostics.This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_file) + )); + } + } + } + function reportNonSerializableProperty(propertyName) { + if (errorNameNode || errorFallbackNode) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized, propertyName)); + } + } + function transformDeclarationsForJS(sourceFile) { + const oldDiag = getSymbolAccessibilityDiagnostic; + getSymbolAccessibilityDiagnostic = (s) => s.errorNode && canProduceDiagnostics(s.errorNode) ? createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : { + diagnosticMessage: s.errorModuleName ? Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotation_may_unblock_declaration_emit : Diagnostics.Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_declaration_emit, + errorNode: s.errorNode || sourceFile + }; + const result = resolver.getDeclarationStatementsForSourceFile(sourceFile, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); + getSymbolAccessibilityDiagnostic = oldDiag; + return result; + } + function transformRoot(node) { + if (node.kind === 308 /* SourceFile */ && node.isDeclarationFile) { + return node; + } + if (node.kind === 309 /* Bundle */) { + isBundledEmit = true; + rawReferencedFiles = []; + rawTypeReferenceDirectives = []; + rawLibReferenceDirectives = []; + let hasNoDefaultLib = false; + const bundle = factory2.createBundle( + map(node.sourceFiles, (sourceFile) => { + if (sourceFile.isDeclarationFile) return void 0; + hasNoDefaultLib = hasNoDefaultLib || sourceFile.hasNoDefaultLib; + currentSourceFile = sourceFile; + enclosingDeclaration = sourceFile; + lateMarkedStatements = void 0; + suppressNewDiagnosticContexts = false; + lateStatementReplacementMap = /* @__PURE__ */ new Map(); + getSymbolAccessibilityDiagnostic = throwDiagnostic; + needsScopeFixMarker = false; + resultHasScopeMarker = false; + collectFileReferences(sourceFile); + if (isExternalOrCommonJsModule(sourceFile) || isJsonSourceFile(sourceFile)) { + resultHasExternalModuleIndicator = false; + needsDeclare = false; + const statements = isSourceFileJS(sourceFile) ? factory2.createNodeArray(transformDeclarationsForJS(sourceFile)) : visitNodes2(sourceFile.statements, visitDeclarationStatements, isStatement); + const newFile = factory2.updateSourceFile( + sourceFile, + [factory2.createModuleDeclaration( + [factory2.createModifier(138 /* DeclareKeyword */)], + factory2.createStringLiteral(getResolvedExternalModuleName(context.getEmitHost(), sourceFile)), + factory2.createModuleBlock(setTextRange(factory2.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), sourceFile.statements)) + )], + /*isDeclarationFile*/ + true, + /*referencedFiles*/ + [], + /*typeReferences*/ + [], + /*hasNoDefaultLib*/ + false, + /*libReferences*/ + [] + ); + return newFile; + } + needsDeclare = true; + const updated = isSourceFileJS(sourceFile) ? factory2.createNodeArray(transformDeclarationsForJS(sourceFile)) : visitNodes2(sourceFile.statements, visitDeclarationStatements, isStatement); + return factory2.updateSourceFile( + sourceFile, + transformAndReplaceLatePaintedStatements(updated), + /*isDeclarationFile*/ + true, + /*referencedFiles*/ + [], + /*typeReferences*/ + [], + /*hasNoDefaultLib*/ + false, + /*libReferences*/ + [] + ); + }) + ); + const outputFilePath2 = getDirectoryPath(normalizeSlashes(getOutputPathsFor( + node, + host, + /*forceDtsPaths*/ + true + ).declarationFilePath)); + bundle.syntheticFileReferences = getReferencedFiles(outputFilePath2); + bundle.syntheticTypeReferences = getTypeReferences(); + bundle.syntheticLibReferences = getLibReferences(); + bundle.hasNoDefaultLib = hasNoDefaultLib; + return bundle; + } + needsDeclare = true; + needsScopeFixMarker = false; + resultHasScopeMarker = false; + enclosingDeclaration = node; + currentSourceFile = node; + getSymbolAccessibilityDiagnostic = throwDiagnostic; + isBundledEmit = false; + resultHasExternalModuleIndicator = false; + suppressNewDiagnosticContexts = false; + lateMarkedStatements = void 0; + lateStatementReplacementMap = /* @__PURE__ */ new Map(); + rawReferencedFiles = []; + rawTypeReferenceDirectives = []; + rawLibReferenceDirectives = []; + collectFileReferences(currentSourceFile); + let combinedStatements; + if (isSourceFileJS(currentSourceFile)) { + combinedStatements = factory2.createNodeArray(transformDeclarationsForJS(node)); + } else { + const statements = visitNodes2(node.statements, visitDeclarationStatements, isStatement); + combinedStatements = setTextRange(factory2.createNodeArray(transformAndReplaceLatePaintedStatements(statements)), node.statements); + if (isExternalModule(node) && (!resultHasExternalModuleIndicator || needsScopeFixMarker && !resultHasScopeMarker)) { + combinedStatements = setTextRange(factory2.createNodeArray([...combinedStatements, createEmptyExports(factory2)]), combinedStatements); + } + } + const outputFilePath = getDirectoryPath(normalizeSlashes(getOutputPathsFor( + node, + host, + /*forceDtsPaths*/ + true + ).declarationFilePath)); + return factory2.updateSourceFile( + node, + combinedStatements, + /*isDeclarationFile*/ + true, + getReferencedFiles(outputFilePath), + getTypeReferences(), + node.hasNoDefaultLib, + getLibReferences() + ); + function collectFileReferences(sourceFile) { + rawReferencedFiles = concatenate(rawReferencedFiles, map(sourceFile.referencedFiles, (f) => [sourceFile, f])); + rawTypeReferenceDirectives = concatenate(rawTypeReferenceDirectives, sourceFile.typeReferenceDirectives); + rawLibReferenceDirectives = concatenate(rawLibReferenceDirectives, sourceFile.libReferenceDirectives); + } + function copyFileReferenceAsSynthetic(ref) { + const newRef = { ...ref }; + newRef.pos = -1; + newRef.end = -1; + return newRef; + } + function getTypeReferences() { + return mapDefined(rawTypeReferenceDirectives, (ref) => { + if (!ref.preserve) return void 0; + return copyFileReferenceAsSynthetic(ref); + }); + } + function getLibReferences() { + return mapDefined(rawLibReferenceDirectives, (ref) => { + if (!ref.preserve) return void 0; + return copyFileReferenceAsSynthetic(ref); + }); + } + function getReferencedFiles(outputFilePath2) { + return mapDefined(rawReferencedFiles, ([sourceFile, ref]) => { + if (!ref.preserve) return void 0; + const file = host.getSourceFileFromReference(sourceFile, ref); + if (!file) { + return void 0; + } + let declFileName; + if (file.isDeclarationFile) { + declFileName = file.fileName; + } else { + if (isBundledEmit && contains(node.sourceFiles, file)) return; + const paths = getOutputPathsFor( + file, + host, + /*forceDtsPaths*/ + true + ); + declFileName = paths.declarationFilePath || paths.jsFilePath || file.fileName; + } + if (!declFileName) return void 0; + const fileName = getRelativePathToDirectoryOrUrl( + outputFilePath2, + declFileName, + host.getCurrentDirectory(), + host.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ + false + ); + const newRef = copyFileReferenceAsSynthetic(ref); + newRef.fileName = fileName; + return newRef; + }); + } + } + function filterBindingPatternInitializers(name) { + if (name.kind === 80 /* Identifier */) { + return name; + } else { + if (name.kind === 208 /* ArrayBindingPattern */) { + return factory2.updateArrayBindingPattern(name, visitNodes2(name.elements, visitBindingElement, isArrayBindingElement)); + } else { + return factory2.updateObjectBindingPattern(name, visitNodes2(name.elements, visitBindingElement, isBindingElement)); + } + } + function visitBindingElement(elem) { + if (elem.kind === 233 /* OmittedExpression */) { + return elem; + } + if (elem.propertyName && isComputedPropertyName(elem.propertyName) && isEntityNameExpression(elem.propertyName.expression)) { + checkEntityNameVisibility(elem.propertyName.expression, enclosingDeclaration); + } + return factory2.updateBindingElement( + elem, + elem.dotDotDotToken, + elem.propertyName, + filterBindingPatternInitializers(elem.name), + /*initializer*/ + void 0 + ); + } + } + function ensureParameter(p, modifierMask) { + let oldDiag; + if (!suppressNewDiagnosticContexts) { + oldDiag = getSymbolAccessibilityDiagnostic; + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(p); + } + const newParam = factory2.updateParameterDeclaration( + p, + maskModifiers(factory2, p, modifierMask), + p.dotDotDotToken, + filterBindingPatternInitializers(p.name), + resolver.isOptionalParameter(p) ? p.questionToken || factory2.createToken(58 /* QuestionToken */) : void 0, + ensureType( + p, + /*ignorePrivate*/ + true + ), + // Ignore private param props, since this type is going straight back into a param + ensureNoInitializer(p) + ); + if (!suppressNewDiagnosticContexts) { + getSymbolAccessibilityDiagnostic = oldDiag; + } + return newParam; + } + function shouldPrintWithInitializer(node) { + return canHaveLiteralInitializer(node) && !!node.initializer && resolver.isLiteralConstDeclaration(getParseTreeNode(node)); + } + function ensureNoInitializer(node) { + if (shouldPrintWithInitializer(node)) { + const unwrappedInitializer = unwrapParenthesizedExpression(node.initializer); + if (!isPrimitiveLiteralValue(unwrappedInitializer)) { + reportInferenceFallback(node); + } + return resolver.createLiteralConstValue(getParseTreeNode(node, canHaveLiteralInitializer), symbolTracker); + } + return void 0; + } + function ensureType(node, ignorePrivate) { + if (!ignorePrivate && hasEffectiveModifier(node, 2 /* Private */)) { + return; + } + if (shouldPrintWithInitializer(node)) { + return; + } + if (!isExportAssignment(node) && !isBindingElement(node) && node.type && (!isParameter(node) || !resolver.requiresAddingImplicitUndefined(node, enclosingDeclaration))) { + return visitNode(node.type, visitDeclarationSubtree, isTypeNode); + } + const oldErrorNameNode = errorNameNode; + errorNameNode = node.name; + let oldDiag; + if (!suppressNewDiagnosticContexts) { + oldDiag = getSymbolAccessibilityDiagnostic; + if (canProduceDiagnostics(node)) { + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(node); + } + } + let typeNode; + if (hasInferredType(node)) { + typeNode = resolver.createTypeOfDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); + } else if (isFunctionLike(node)) { + typeNode = resolver.createReturnTypeOfSignatureDeclaration(node, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); + } else { + Debug.assertNever(node); + } + errorNameNode = oldErrorNameNode; + if (!suppressNewDiagnosticContexts) { + getSymbolAccessibilityDiagnostic = oldDiag; + } + return typeNode ?? factory2.createKeywordTypeNode(133 /* AnyKeyword */); + } + function isDeclarationAndNotVisible(node) { + node = getParseTreeNode(node); + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 268 /* ModuleDeclaration */: + case 265 /* InterfaceDeclaration */: + case 264 /* ClassDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 267 /* EnumDeclaration */: + return !resolver.isDeclarationVisible(node); + // The following should be doing their own visibility checks based on filtering their members + case 261 /* VariableDeclaration */: + return !getBindingNameVisible(node); + case 272 /* ImportEqualsDeclaration */: + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 278 /* ExportAssignment */: + return false; + case 176 /* ClassStaticBlockDeclaration */: + return true; + } + return false; + } + function shouldEmitFunctionProperties(input) { + var _a; + if (input.body) { + return true; + } + const overloadSignatures = (_a = input.symbol.declarations) == null ? void 0 : _a.filter((decl) => isFunctionDeclaration(decl) && !decl.body); + return !overloadSignatures || overloadSignatures.indexOf(input) === overloadSignatures.length - 1; + } + function getBindingNameVisible(elem) { + if (isOmittedExpression(elem)) { + return false; + } + if (isBindingPattern(elem.name)) { + return some(elem.name.elements, getBindingNameVisible); + } else { + return resolver.isDeclarationVisible(elem); + } + } + function updateParamsList(node, params, modifierMask) { + if (hasEffectiveModifier(node, 2 /* Private */)) { + return factory2.createNodeArray(); + } + const newParams = map(params, (p) => ensureParameter(p, modifierMask)); + if (!newParams) { + return factory2.createNodeArray(); + } + return factory2.createNodeArray(newParams, params.hasTrailingComma); + } + function updateAccessorParamsList(input, isPrivate) { + let newParams; + if (!isPrivate) { + const thisParameter = getThisParameter(input); + if (thisParameter) { + newParams = [ensureParameter(thisParameter)]; + } + } + if (isSetAccessorDeclaration(input)) { + let newValueParameter; + if (!isPrivate) { + const valueParameter = getSetAccessorValueParameter(input); + if (valueParameter) { + newValueParameter = ensureParameter(valueParameter); + } + } + if (!newValueParameter) { + newValueParameter = factory2.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "value" + ); + } + newParams = append(newParams, newValueParameter); + } + return factory2.createNodeArray(newParams || emptyArray); + } + function ensureTypeParams(node, params) { + return hasEffectiveModifier(node, 2 /* Private */) ? void 0 : visitNodes2(params, visitDeclarationSubtree, isTypeParameterDeclaration); + } + function isEnclosingDeclaration(node) { + return isSourceFile(node) || isTypeAliasDeclaration(node) || isModuleDeclaration(node) || isClassDeclaration(node) || isInterfaceDeclaration(node) || isFunctionLike(node) || isIndexSignatureDeclaration(node) || isMappedTypeNode(node); + } + function checkEntityNameVisibility(entityName, enclosingDeclaration2) { + const visibilityResult = resolver.isEntityNameVisible(entityName, enclosingDeclaration2); + handleSymbolAccessibilityError(visibilityResult); + } + function preserveJsDoc(updated, original) { + if (hasJSDocNodes(updated) && hasJSDocNodes(original)) { + updated.jsDoc = original.jsDoc; + } + return setCommentRange(updated, getCommentRange(original)); + } + function rewriteModuleSpecifier2(parent2, input) { + if (!input) return void 0; + resultHasExternalModuleIndicator = resultHasExternalModuleIndicator || parent2.kind !== 268 /* ModuleDeclaration */ && parent2.kind !== 206 /* ImportType */; + if (isStringLiteralLike(input)) { + if (isBundledEmit) { + const newName = getExternalModuleNameFromDeclaration(context.getEmitHost(), resolver, parent2); + if (newName) { + return factory2.createStringLiteral(newName); + } + } + } + return input; + } + function transformImportEqualsDeclaration(decl) { + if (!resolver.isDeclarationVisible(decl)) return; + if (decl.moduleReference.kind === 284 /* ExternalModuleReference */) { + const specifier = getExternalModuleImportEqualsDeclarationExpression(decl); + return factory2.updateImportEqualsDeclaration( + decl, + decl.modifiers, + decl.isTypeOnly, + decl.name, + factory2.updateExternalModuleReference(decl.moduleReference, rewriteModuleSpecifier2(decl, specifier)) + ); + } else { + const oldDiag = getSymbolAccessibilityDiagnostic; + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(decl); + checkEntityNameVisibility(decl.moduleReference, enclosingDeclaration); + getSymbolAccessibilityDiagnostic = oldDiag; + return decl; + } + } + function transformImportDeclaration(decl) { + if (!decl.importClause) { + return factory2.updateImportDeclaration( + decl, + decl.modifiers, + decl.importClause, + rewriteModuleSpecifier2(decl, decl.moduleSpecifier), + tryGetResolutionModeOverride(decl.attributes) + ); + } + const phaseModifier = decl.importClause.phaseModifier === 166 /* DeferKeyword */ ? void 0 : decl.importClause.phaseModifier; + const visibleDefaultBinding = decl.importClause && decl.importClause.name && resolver.isDeclarationVisible(decl.importClause) ? decl.importClause.name : void 0; + if (!decl.importClause.namedBindings) { + return visibleDefaultBinding && factory2.updateImportDeclaration( + decl, + decl.modifiers, + factory2.updateImportClause( + decl.importClause, + phaseModifier, + visibleDefaultBinding, + /*namedBindings*/ + void 0 + ), + rewriteModuleSpecifier2(decl, decl.moduleSpecifier), + tryGetResolutionModeOverride(decl.attributes) + ); + } + if (decl.importClause.namedBindings.kind === 275 /* NamespaceImport */) { + const namedBindings = resolver.isDeclarationVisible(decl.importClause.namedBindings) ? decl.importClause.namedBindings : ( + /*namedBindings*/ + void 0 + ); + return visibleDefaultBinding || namedBindings ? factory2.updateImportDeclaration( + decl, + decl.modifiers, + factory2.updateImportClause( + decl.importClause, + phaseModifier, + visibleDefaultBinding, + namedBindings + ), + rewriteModuleSpecifier2(decl, decl.moduleSpecifier), + tryGetResolutionModeOverride(decl.attributes) + ) : void 0; + } + const bindingList = mapDefined(decl.importClause.namedBindings.elements, (b) => resolver.isDeclarationVisible(b) ? b : void 0); + if (bindingList && bindingList.length || visibleDefaultBinding) { + return factory2.updateImportDeclaration( + decl, + decl.modifiers, + factory2.updateImportClause( + decl.importClause, + phaseModifier, + visibleDefaultBinding, + bindingList && bindingList.length ? factory2.updateNamedImports(decl.importClause.namedBindings, bindingList) : void 0 + ), + rewriteModuleSpecifier2(decl, decl.moduleSpecifier), + tryGetResolutionModeOverride(decl.attributes) + ); + } + if (resolver.isImportRequiredByAugmentation(decl)) { + if (isolatedDeclarations) { + context.addDiagnostic(createDiagnosticForNode(decl, Diagnostics.Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_supported_with_isolatedDeclarations)); + } + return factory2.updateImportDeclaration( + decl, + decl.modifiers, + /*importClause*/ + void 0, + rewriteModuleSpecifier2(decl, decl.moduleSpecifier), + tryGetResolutionModeOverride(decl.attributes) + ); + } + } + function tryGetResolutionModeOverride(node) { + const mode = getResolutionModeOverride(node); + return node && mode !== void 0 ? node : void 0; + } + function transformAndReplaceLatePaintedStatements(statements) { + while (length(lateMarkedStatements)) { + const i = lateMarkedStatements.shift(); + if (!isLateVisibilityPaintedStatement(i)) { + return Debug.fail(`Late replaced statement was found which is not handled by the declaration transformer!: ${Debug.formatSyntaxKind(i.kind)}`); + } + const priorNeedsDeclare = needsDeclare; + needsDeclare = i.parent && isSourceFile(i.parent) && !(isExternalModule(i.parent) && isBundledEmit); + const result = transformTopLevelDeclaration(i); + needsDeclare = priorNeedsDeclare; + lateStatementReplacementMap.set(getOriginalNodeId(i), result); + } + return visitNodes2(statements, visitLateVisibilityMarkedStatements, isStatement); + function visitLateVisibilityMarkedStatements(statement) { + if (isLateVisibilityPaintedStatement(statement)) { + const key = getOriginalNodeId(statement); + if (lateStatementReplacementMap.has(key)) { + const result = lateStatementReplacementMap.get(key); + lateStatementReplacementMap.delete(key); + if (result) { + if (isArray(result) ? some(result, needsScopeMarker) : needsScopeMarker(result)) { + needsScopeFixMarker = true; + } + if (isSourceFile(statement.parent) && (isArray(result) ? some(result, isExternalModuleIndicator) : isExternalModuleIndicator(result))) { + resultHasExternalModuleIndicator = true; + } + } + return result; + } + } + return statement; + } + } + function visitDeclarationSubtree(input) { + if (shouldStripInternal(input)) return; + if (isDeclaration(input)) { + if (isDeclarationAndNotVisible(input)) return; + if (hasDynamicName(input)) { + if (isolatedDeclarations) { + if (!resolver.isDefinitelyReferenceToGlobalSymbolObject(input.name.expression)) { + if (isClassDeclaration(input.parent) || isObjectLiteralExpression(input.parent)) { + context.addDiagnostic(createDiagnosticForNode(input, Diagnostics.Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations)); + return; + } else if ( + // Type declarations just need to double-check that the input computed name is an entity name expression + (isInterfaceDeclaration(input.parent) || isTypeLiteralNode(input.parent)) && !isEntityNameExpression(input.name.expression) + ) { + context.addDiagnostic(createDiagnosticForNode(input, Diagnostics.Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedDeclarations)); + return; + } + } + } else if (!resolver.isLateBound(getParseTreeNode(input)) || !isEntityNameExpression(input.name.expression)) { + return; + } + } + } + if (isFunctionLike(input) && resolver.isImplementationOfOverload(input)) return; + if (isSemicolonClassElement(input)) return; + let previousEnclosingDeclaration; + if (isEnclosingDeclaration(input)) { + previousEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = input; + } + const oldDiag = getSymbolAccessibilityDiagnostic; + const canProduceDiagnostic = canProduceDiagnostics(input); + const oldWithinObjectLiteralType = suppressNewDiagnosticContexts; + let shouldEnterSuppressNewDiagnosticsContextContext = (input.kind === 188 /* TypeLiteral */ || input.kind === 201 /* MappedType */) && input.parent.kind !== 266 /* TypeAliasDeclaration */; + if (isMethodDeclaration(input) || isMethodSignature(input)) { + if (hasEffectiveModifier(input, 2 /* Private */)) { + if (input.symbol && input.symbol.declarations && input.symbol.declarations[0] !== input) return; + return cleanup(factory2.createPropertyDeclaration( + ensureModifiers(input), + input.name, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + )); + } + } + if (canProduceDiagnostic && !suppressNewDiagnosticContexts) { + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(input); + } + if (isTypeQueryNode(input)) { + checkEntityNameVisibility(input.exprName, enclosingDeclaration); + } + if (shouldEnterSuppressNewDiagnosticsContextContext) { + suppressNewDiagnosticContexts = true; + } + if (isProcessedComponent(input)) { + switch (input.kind) { + case 234 /* ExpressionWithTypeArguments */: { + if (isEntityName(input.expression) || isEntityNameExpression(input.expression)) { + checkEntityNameVisibility(input.expression, enclosingDeclaration); + } + const node = visitEachChild(input, visitDeclarationSubtree, context); + return cleanup(factory2.updateExpressionWithTypeArguments(node, node.expression, node.typeArguments)); + } + case 184 /* TypeReference */: { + checkEntityNameVisibility(input.typeName, enclosingDeclaration); + const node = visitEachChild(input, visitDeclarationSubtree, context); + return cleanup(factory2.updateTypeReferenceNode(node, node.typeName, node.typeArguments)); + } + case 181 /* ConstructSignature */: + return cleanup(factory2.updateConstructSignature( + input, + ensureTypeParams(input, input.typeParameters), + updateParamsList(input, input.parameters), + ensureType(input) + )); + case 177 /* Constructor */: { + const ctor = factory2.createConstructorDeclaration( + /*modifiers*/ + ensureModifiers(input), + updateParamsList(input, input.parameters, 0 /* None */), + /*body*/ + void 0 + ); + return cleanup(ctor); + } + case 175 /* MethodDeclaration */: { + if (isPrivateIdentifier(input.name)) { + return cleanup( + /*returnValue*/ + void 0 + ); + } + const sig = factory2.createMethodDeclaration( + ensureModifiers(input), + /*asteriskToken*/ + void 0, + input.name, + input.questionToken, + ensureTypeParams(input, input.typeParameters), + updateParamsList(input, input.parameters), + ensureType(input), + /*body*/ + void 0 + ); + return cleanup(sig); + } + case 178 /* GetAccessor */: { + if (isPrivateIdentifier(input.name)) { + return cleanup( + /*returnValue*/ + void 0 + ); + } + return cleanup(factory2.updateGetAccessorDeclaration( + input, + ensureModifiers(input), + input.name, + updateAccessorParamsList(input, hasEffectiveModifier(input, 2 /* Private */)), + ensureType(input), + /*body*/ + void 0 + )); + } + case 179 /* SetAccessor */: { + if (isPrivateIdentifier(input.name)) { + return cleanup( + /*returnValue*/ + void 0 + ); + } + return cleanup(factory2.updateSetAccessorDeclaration( + input, + ensureModifiers(input), + input.name, + updateAccessorParamsList(input, hasEffectiveModifier(input, 2 /* Private */)), + /*body*/ + void 0 + )); + } + case 173 /* PropertyDeclaration */: + if (isPrivateIdentifier(input.name)) { + return cleanup( + /*returnValue*/ + void 0 + ); + } + return cleanup(factory2.updatePropertyDeclaration( + input, + ensureModifiers(input), + input.name, + input.questionToken, + ensureType(input), + ensureNoInitializer(input) + )); + case 172 /* PropertySignature */: + if (isPrivateIdentifier(input.name)) { + return cleanup( + /*returnValue*/ + void 0 + ); + } + return cleanup(factory2.updatePropertySignature( + input, + ensureModifiers(input), + input.name, + input.questionToken, + ensureType(input) + )); + case 174 /* MethodSignature */: { + if (isPrivateIdentifier(input.name)) { + return cleanup( + /*returnValue*/ + void 0 + ); + } + return cleanup(factory2.updateMethodSignature( + input, + ensureModifiers(input), + input.name, + input.questionToken, + ensureTypeParams(input, input.typeParameters), + updateParamsList(input, input.parameters), + ensureType(input) + )); + } + case 180 /* CallSignature */: { + return cleanup( + factory2.updateCallSignature( + input, + ensureTypeParams(input, input.typeParameters), + updateParamsList(input, input.parameters), + ensureType(input) + ) + ); + } + case 182 /* IndexSignature */: { + return cleanup(factory2.updateIndexSignature( + input, + ensureModifiers(input), + updateParamsList(input, input.parameters), + visitNode(input.type, visitDeclarationSubtree, isTypeNode) || factory2.createKeywordTypeNode(133 /* AnyKeyword */) + )); + } + case 261 /* VariableDeclaration */: { + if (isBindingPattern(input.name)) { + return recreateBindingPattern(input.name); + } + shouldEnterSuppressNewDiagnosticsContextContext = true; + suppressNewDiagnosticContexts = true; + return cleanup(factory2.updateVariableDeclaration( + input, + input.name, + /*exclamationToken*/ + void 0, + ensureType(input), + ensureNoInitializer(input) + )); + } + case 169 /* TypeParameter */: { + if (isPrivateMethodTypeParameter(input) && (input.default || input.constraint)) { + return cleanup(factory2.updateTypeParameterDeclaration( + input, + input.modifiers, + input.name, + /*constraint*/ + void 0, + /*defaultType*/ + void 0 + )); + } + return cleanup(visitEachChild(input, visitDeclarationSubtree, context)); + } + case 195 /* ConditionalType */: { + const checkType = visitNode(input.checkType, visitDeclarationSubtree, isTypeNode); + const extendsType = visitNode(input.extendsType, visitDeclarationSubtree, isTypeNode); + const oldEnclosingDecl = enclosingDeclaration; + enclosingDeclaration = input.trueType; + const trueType = visitNode(input.trueType, visitDeclarationSubtree, isTypeNode); + enclosingDeclaration = oldEnclosingDecl; + const falseType = visitNode(input.falseType, visitDeclarationSubtree, isTypeNode); + Debug.assert(checkType); + Debug.assert(extendsType); + Debug.assert(trueType); + Debug.assert(falseType); + return cleanup(factory2.updateConditionalTypeNode(input, checkType, extendsType, trueType, falseType)); + } + case 185 /* FunctionType */: { + return cleanup(factory2.updateFunctionTypeNode( + input, + visitNodes2(input.typeParameters, visitDeclarationSubtree, isTypeParameterDeclaration), + updateParamsList(input, input.parameters), + Debug.checkDefined(visitNode(input.type, visitDeclarationSubtree, isTypeNode)) + )); + } + case 186 /* ConstructorType */: { + return cleanup(factory2.updateConstructorTypeNode( + input, + ensureModifiers(input), + visitNodes2(input.typeParameters, visitDeclarationSubtree, isTypeParameterDeclaration), + updateParamsList(input, input.parameters), + Debug.checkDefined(visitNode(input.type, visitDeclarationSubtree, isTypeNode)) + )); + } + case 206 /* ImportType */: { + if (!isLiteralImportTypeNode(input)) return cleanup(input); + return cleanup(factory2.updateImportTypeNode( + input, + factory2.updateLiteralTypeNode(input.argument, rewriteModuleSpecifier2(input, input.argument.literal)), + input.attributes, + input.qualifier, + visitNodes2(input.typeArguments, visitDeclarationSubtree, isTypeNode), + input.isTypeOf + )); + } + default: + Debug.assertNever(input, `Attempted to process unhandled node kind: ${Debug.formatSyntaxKind(input.kind)}`); + } + } + if (isTupleTypeNode(input) && getLineAndCharacterOfPosition(currentSourceFile, input.pos).line === getLineAndCharacterOfPosition(currentSourceFile, input.end).line) { + setEmitFlags(input, 1 /* SingleLine */); + } + return cleanup(visitEachChild(input, visitDeclarationSubtree, context)); + function cleanup(returnValue) { + if (returnValue && canProduceDiagnostic && hasDynamicName(input)) { + checkName(input); + } + if (isEnclosingDeclaration(input)) { + enclosingDeclaration = previousEnclosingDeclaration; + } + if (canProduceDiagnostic && !suppressNewDiagnosticContexts) { + getSymbolAccessibilityDiagnostic = oldDiag; + } + if (shouldEnterSuppressNewDiagnosticsContextContext) { + suppressNewDiagnosticContexts = oldWithinObjectLiteralType; + } + if (returnValue === input) { + return returnValue; + } + return returnValue && setOriginalNode(preserveJsDoc(returnValue, input), input); + } + } + function isPrivateMethodTypeParameter(node) { + return node.parent.kind === 175 /* MethodDeclaration */ && hasEffectiveModifier(node.parent, 2 /* Private */); + } + function visitDeclarationStatements(input) { + if (!isPreservedDeclarationStatement(input)) { + return; + } + if (shouldStripInternal(input)) return; + switch (input.kind) { + case 279 /* ExportDeclaration */: { + if (isSourceFile(input.parent)) { + resultHasExternalModuleIndicator = true; + } + resultHasScopeMarker = true; + return factory2.updateExportDeclaration( + input, + input.modifiers, + input.isTypeOnly, + input.exportClause, + rewriteModuleSpecifier2(input, input.moduleSpecifier), + tryGetResolutionModeOverride(input.attributes) + ); + } + case 278 /* ExportAssignment */: { + if (isSourceFile(input.parent)) { + resultHasExternalModuleIndicator = true; + } + resultHasScopeMarker = true; + if (input.expression.kind === 80 /* Identifier */) { + return input; + } else { + const newId = factory2.createUniqueName("_default", 16 /* Optimistic */); + getSymbolAccessibilityDiagnostic = () => ({ + diagnosticMessage: Diagnostics.Default_export_of_the_module_has_or_is_using_private_name_0, + errorNode: input + }); + errorFallbackNode = input; + const type = ensureType(input); + const varDecl = factory2.createVariableDeclaration( + newId, + /*exclamationToken*/ + void 0, + type, + /*initializer*/ + void 0 + ); + errorFallbackNode = void 0; + const statement = factory2.createVariableStatement(needsDeclare ? [factory2.createModifier(138 /* DeclareKeyword */)] : [], factory2.createVariableDeclarationList([varDecl], 2 /* Const */)); + preserveJsDoc(statement, input); + removeAllComments(input); + return [statement, factory2.updateExportAssignment(input, input.modifiers, newId)]; + } + } + } + const result = transformTopLevelDeclaration(input); + lateStatementReplacementMap.set(getOriginalNodeId(input), result); + return input; + } + function stripExportModifiers(statement) { + if (isImportEqualsDeclaration(statement) || hasEffectiveModifier(statement, 2048 /* Default */) || !canHaveModifiers(statement)) { + return statement; + } + const modifiers = factory2.createModifiersFromModifierFlags(getEffectiveModifierFlags(statement) & (131071 /* All */ ^ 32 /* Export */)); + return factory2.replaceModifiers(statement, modifiers); + } + function updateModuleDeclarationAndKeyword(node, modifiers, name, body) { + const updated = factory2.updateModuleDeclaration(node, modifiers, name, body); + if (isAmbientModule(updated) || updated.flags & 32 /* Namespace */) { + return updated; + } + const fixed = factory2.createModuleDeclaration( + updated.modifiers, + updated.name, + updated.body, + updated.flags | 32 /* Namespace */ + ); + setOriginalNode(fixed, updated); + setTextRange(fixed, updated); + return fixed; + } + function transformTopLevelDeclaration(input) { + if (lateMarkedStatements) { + while (orderedRemoveItem(lateMarkedStatements, input)) ; + } + if (shouldStripInternal(input)) return; + switch (input.kind) { + case 272 /* ImportEqualsDeclaration */: { + return transformImportEqualsDeclaration(input); + } + case 273 /* ImportDeclaration */: { + return transformImportDeclaration(input); + } + } + if (isDeclaration(input) && isDeclarationAndNotVisible(input)) return; + if (isJSDocImportTag(input)) return; + if (isFunctionLike(input) && resolver.isImplementationOfOverload(input)) return; + let previousEnclosingDeclaration; + if (isEnclosingDeclaration(input)) { + previousEnclosingDeclaration = enclosingDeclaration; + enclosingDeclaration = input; + } + const canProdiceDiagnostic = canProduceDiagnostics(input); + const oldDiag = getSymbolAccessibilityDiagnostic; + if (canProdiceDiagnostic) { + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(input); + } + const previousNeedsDeclare = needsDeclare; + switch (input.kind) { + case 266 /* TypeAliasDeclaration */: { + needsDeclare = false; + const clean2 = cleanup(factory2.updateTypeAliasDeclaration( + input, + ensureModifiers(input), + input.name, + visitNodes2(input.typeParameters, visitDeclarationSubtree, isTypeParameterDeclaration), + Debug.checkDefined(visitNode(input.type, visitDeclarationSubtree, isTypeNode)) + )); + needsDeclare = previousNeedsDeclare; + return clean2; + } + case 265 /* InterfaceDeclaration */: { + return cleanup(factory2.updateInterfaceDeclaration( + input, + ensureModifiers(input), + input.name, + ensureTypeParams(input, input.typeParameters), + transformHeritageClauses(input.heritageClauses), + visitNodes2(input.members, visitDeclarationSubtree, isTypeElement) + )); + } + case 263 /* FunctionDeclaration */: { + const clean2 = cleanup(factory2.updateFunctionDeclaration( + input, + ensureModifiers(input), + /*asteriskToken*/ + void 0, + input.name, + ensureTypeParams(input, input.typeParameters), + updateParamsList(input, input.parameters), + ensureType(input), + /*body*/ + void 0 + )); + if (clean2 && resolver.isExpandoFunctionDeclaration(input) && shouldEmitFunctionProperties(input)) { + const props = resolver.getPropertiesOfContainerFunction(input); + if (isolatedDeclarations) { + reportExpandoFunctionErrors(input); + } + const fakespace = parseNodeFactory.createModuleDeclaration( + /*modifiers*/ + void 0, + clean2.name || factory2.createIdentifier("_default"), + factory2.createModuleBlock([]), + 32 /* Namespace */ + ); + setParent(fakespace, enclosingDeclaration); + fakespace.locals = createSymbolTable(props); + fakespace.symbol = props[0].parent; + const exportMappings = []; + let declarations = mapDefined(props, (p) => { + if (!isExpandoPropertyDeclaration(p.valueDeclaration)) { + return void 0; + } + const nameStr = unescapeLeadingUnderscores(p.escapedName); + if (!isIdentifierText(nameStr, 99 /* ESNext */)) { + return void 0; + } + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(p.valueDeclaration); + const type = resolver.createTypeOfDeclaration(p.valueDeclaration, fakespace, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags | 2 /* NoSyntacticPrinter */, symbolTracker); + getSymbolAccessibilityDiagnostic = oldDiag; + const isNonContextualKeywordName = isStringANonContextualKeyword(nameStr); + const name = isNonContextualKeywordName ? factory2.getGeneratedNameForNode(p.valueDeclaration) : factory2.createIdentifier(nameStr); + if (isNonContextualKeywordName) { + exportMappings.push([name, nameStr]); + } + const varDecl = factory2.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + type, + /*initializer*/ + void 0 + ); + return factory2.createVariableStatement(isNonContextualKeywordName ? void 0 : [factory2.createToken(95 /* ExportKeyword */)], factory2.createVariableDeclarationList([varDecl])); + }); + if (!exportMappings.length) { + declarations = mapDefined(declarations, (declaration) => factory2.replaceModifiers(declaration, 0 /* None */)); + } else { + declarations.push(factory2.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory2.createNamedExports(map(exportMappings, ([gen, exp]) => { + return factory2.createExportSpecifier( + /*isTypeOnly*/ + false, + gen, + exp + ); + })) + )); + } + const namespaceDecl = factory2.createModuleDeclaration(ensureModifiers(input), input.name, factory2.createModuleBlock(declarations), 32 /* Namespace */); + if (!hasEffectiveModifier(clean2, 2048 /* Default */)) { + return [clean2, namespaceDecl]; + } + const modifiers = factory2.createModifiersFromModifierFlags(getEffectiveModifierFlags(clean2) & ~2080 /* ExportDefault */ | 128 /* Ambient */); + const cleanDeclaration = factory2.updateFunctionDeclaration( + clean2, + modifiers, + /*asteriskToken*/ + void 0, + clean2.name, + clean2.typeParameters, + clean2.parameters, + clean2.type, + /*body*/ + void 0 + ); + const namespaceDeclaration = factory2.updateModuleDeclaration( + namespaceDecl, + modifiers, + namespaceDecl.name, + namespaceDecl.body + ); + const exportDefaultDeclaration = factory2.createExportAssignment( + /*modifiers*/ + void 0, + /*isExportEquals*/ + false, + namespaceDecl.name + ); + if (isSourceFile(input.parent)) { + resultHasExternalModuleIndicator = true; + } + resultHasScopeMarker = true; + return [cleanDeclaration, namespaceDeclaration, exportDefaultDeclaration]; + } else { + return clean2; + } + } + case 268 /* ModuleDeclaration */: { + needsDeclare = false; + const inner = input.body; + if (inner && inner.kind === 269 /* ModuleBlock */) { + const oldNeedsScopeFix = needsScopeFixMarker; + const oldHasScopeFix = resultHasScopeMarker; + resultHasScopeMarker = false; + needsScopeFixMarker = false; + const statements = visitNodes2(inner.statements, visitDeclarationStatements, isStatement); + let lateStatements = transformAndReplaceLatePaintedStatements(statements); + if (input.flags & 33554432 /* Ambient */) { + needsScopeFixMarker = false; + } + if (!isGlobalScopeAugmentation(input) && !hasScopeMarker2(lateStatements) && !resultHasScopeMarker) { + if (needsScopeFixMarker) { + lateStatements = factory2.createNodeArray([...lateStatements, createEmptyExports(factory2)]); + } else { + lateStatements = visitNodes2(lateStatements, stripExportModifiers, isStatement); + } + } + const body = factory2.updateModuleBlock(inner, lateStatements); + needsDeclare = previousNeedsDeclare; + needsScopeFixMarker = oldNeedsScopeFix; + resultHasScopeMarker = oldHasScopeFix; + const mods = ensureModifiers(input); + return cleanup(updateModuleDeclarationAndKeyword( + input, + mods, + isExternalModuleAugmentation(input) ? rewriteModuleSpecifier2(input, input.name) : input.name, + body + )); + } else { + needsDeclare = previousNeedsDeclare; + const mods = ensureModifiers(input); + needsDeclare = false; + visitNode(inner, visitDeclarationStatements); + const id = getOriginalNodeId(inner); + const body = lateStatementReplacementMap.get(id); + lateStatementReplacementMap.delete(id); + return cleanup(updateModuleDeclarationAndKeyword( + input, + mods, + input.name, + body + )); + } + } + case 264 /* ClassDeclaration */: { + errorNameNode = input.name; + errorFallbackNode = input; + const modifiers = factory2.createNodeArray(ensureModifiers(input)); + const typeParameters = ensureTypeParams(input, input.typeParameters); + const ctor = getFirstConstructorWithBody(input); + let parameterProperties; + if (ctor) { + const oldDiag2 = getSymbolAccessibilityDiagnostic; + parameterProperties = compact(flatMap(ctor.parameters, (param) => { + if (!hasSyntacticModifier(param, 31 /* ParameterPropertyModifier */) || shouldStripInternal(param)) return; + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(param); + if (param.name.kind === 80 /* Identifier */) { + return preserveJsDoc( + factory2.createPropertyDeclaration( + ensureModifiers(param), + param.name, + param.questionToken, + ensureType(param), + ensureNoInitializer(param) + ), + param + ); + } else { + return walkBindingPattern(param.name); + } + function walkBindingPattern(pattern) { + let elems; + for (const elem of pattern.elements) { + if (isOmittedExpression(elem)) continue; + if (isBindingPattern(elem.name)) { + elems = concatenate(elems, walkBindingPattern(elem.name)); + } + elems = elems || []; + elems.push(factory2.createPropertyDeclaration( + ensureModifiers(param), + elem.name, + /*questionOrExclamationToken*/ + void 0, + ensureType(elem), + /*initializer*/ + void 0 + )); + } + return elems; + } + })); + getSymbolAccessibilityDiagnostic = oldDiag2; + } + const hasPrivateIdentifier = some(input.members, (member) => !!member.name && isPrivateIdentifier(member.name)); + const privateIdentifier = hasPrivateIdentifier ? [ + factory2.createPropertyDeclaration( + /*modifiers*/ + void 0, + factory2.createPrivateIdentifier("#private"), + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ) + ] : void 0; + const lateIndexes = resolver.createLateBoundIndexSignatures(input, enclosingDeclaration, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker); + const memberNodes = concatenate(concatenate(concatenate(privateIdentifier, lateIndexes), parameterProperties), visitNodes2(input.members, visitDeclarationSubtree, isClassElement)); + const members = factory2.createNodeArray(memberNodes); + const extendsClause = getEffectiveBaseTypeNode(input); + if (extendsClause && !isEntityNameExpression(extendsClause.expression) && extendsClause.expression.kind !== 106 /* NullKeyword */) { + const oldId = input.name ? unescapeLeadingUnderscores(input.name.escapedText) : "default"; + const newId = factory2.createUniqueName(`${oldId}_base`, 16 /* Optimistic */); + getSymbolAccessibilityDiagnostic = () => ({ + diagnosticMessage: Diagnostics.extends_clause_of_exported_class_0_has_or_is_using_private_name_1, + errorNode: extendsClause, + typeName: input.name + }); + const varDecl = factory2.createVariableDeclaration( + newId, + /*exclamationToken*/ + void 0, + resolver.createTypeOfExpression(extendsClause.expression, input, declarationEmitNodeBuilderFlags, declarationEmitInternalNodeBuilderFlags, symbolTracker), + /*initializer*/ + void 0 + ); + const statement = factory2.createVariableStatement(needsDeclare ? [factory2.createModifier(138 /* DeclareKeyword */)] : [], factory2.createVariableDeclarationList([varDecl], 2 /* Const */)); + const heritageClauses = factory2.createNodeArray(map(input.heritageClauses, (clause) => { + if (clause.token === 96 /* ExtendsKeyword */) { + const oldDiag2 = getSymbolAccessibilityDiagnostic; + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNode(clause.types[0]); + const newClause = factory2.updateHeritageClause(clause, map(clause.types, (t) => factory2.updateExpressionWithTypeArguments(t, newId, visitNodes2(t.typeArguments, visitDeclarationSubtree, isTypeNode)))); + getSymbolAccessibilityDiagnostic = oldDiag2; + return newClause; + } + return factory2.updateHeritageClause(clause, visitNodes2(factory2.createNodeArray(filter(clause.types, (t) => isEntityNameExpression(t.expression) || t.expression.kind === 106 /* NullKeyword */)), visitDeclarationSubtree, isExpressionWithTypeArguments)); + })); + return [ + statement, + cleanup(factory2.updateClassDeclaration( + input, + modifiers, + input.name, + typeParameters, + heritageClauses, + members + )) + ]; + } else { + const heritageClauses = transformHeritageClauses(input.heritageClauses); + return cleanup(factory2.updateClassDeclaration( + input, + modifiers, + input.name, + typeParameters, + heritageClauses, + members + )); + } + } + case 244 /* VariableStatement */: { + return cleanup(transformVariableStatement(input)); + } + case 267 /* EnumDeclaration */: { + return cleanup(factory2.updateEnumDeclaration( + input, + factory2.createNodeArray(ensureModifiers(input)), + input.name, + factory2.createNodeArray(mapDefined(input.members, (m) => { + if (shouldStripInternal(m)) return; + const enumValue = resolver.getEnumMemberValue(m); + const constValue = enumValue == null ? void 0 : enumValue.value; + if (isolatedDeclarations && m.initializer && (enumValue == null ? void 0 : enumValue.hasExternalReferences) && // This will be its own compiler error instead, so don't report. + !isComputedPropertyName(m.name)) { + context.addDiagnostic(createDiagnosticForNode(m, Diagnostics.Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDeclarations)); + } + const newInitializer = constValue === void 0 ? void 0 : typeof constValue === "string" ? factory2.createStringLiteral(constValue) : constValue < 0 ? factory2.createPrefixUnaryExpression(41 /* MinusToken */, factory2.createNumericLiteral(-constValue)) : factory2.createNumericLiteral(constValue); + return preserveJsDoc(factory2.updateEnumMember(m, m.name, newInitializer), m); + })) + )); + } + } + return Debug.assertNever(input, `Unhandled top-level node in declaration emit: ${Debug.formatSyntaxKind(input.kind)}`); + function cleanup(node) { + if (isEnclosingDeclaration(input)) { + enclosingDeclaration = previousEnclosingDeclaration; + } + if (canProdiceDiagnostic) { + getSymbolAccessibilityDiagnostic = oldDiag; + } + if (input.kind === 268 /* ModuleDeclaration */) { + needsDeclare = previousNeedsDeclare; + } + if (node === input) { + return node; + } + errorFallbackNode = void 0; + errorNameNode = void 0; + return node && setOriginalNode(preserveJsDoc(node, input), input); + } + } + function transformVariableStatement(input) { + if (!forEach(input.declarationList.declarations, getBindingNameVisible)) return; + const nodes = visitNodes2(input.declarationList.declarations, visitDeclarationSubtree, isVariableDeclaration); + if (!length(nodes)) return; + const modifiers = factory2.createNodeArray(ensureModifiers(input)); + let declList; + if (isVarUsing(input.declarationList) || isVarAwaitUsing(input.declarationList)) { + declList = factory2.createVariableDeclarationList(nodes, 2 /* Const */); + setOriginalNode(declList, input.declarationList); + setTextRange(declList, input.declarationList); + setCommentRange(declList, input.declarationList); + } else { + declList = factory2.updateVariableDeclarationList(input.declarationList, nodes); + } + return factory2.updateVariableStatement(input, modifiers, declList); + } + function recreateBindingPattern(d) { + return flatten(mapDefined(d.elements, (e) => recreateBindingElement(e))); + } + function recreateBindingElement(e) { + if (e.kind === 233 /* OmittedExpression */) { + return; + } + if (e.name) { + if (!getBindingNameVisible(e)) return; + if (isBindingPattern(e.name)) { + return recreateBindingPattern(e.name); + } else { + return factory2.createVariableDeclaration( + e.name, + /*exclamationToken*/ + void 0, + ensureType(e), + /*initializer*/ + void 0 + ); + } + } + } + function checkName(node) { + let oldDiag; + if (!suppressNewDiagnosticContexts) { + oldDiag = getSymbolAccessibilityDiagnostic; + getSymbolAccessibilityDiagnostic = createGetSymbolAccessibilityDiagnosticForNodeName(node); + } + errorNameNode = node.name; + Debug.assert(hasDynamicName(node)); + const decl = node; + const entityName = decl.name.expression; + checkEntityNameVisibility(entityName, enclosingDeclaration); + if (!suppressNewDiagnosticContexts) { + getSymbolAccessibilityDiagnostic = oldDiag; + } + errorNameNode = void 0; + } + function shouldStripInternal(node) { + return !!stripInternal && !!node && isInternalDeclaration(node, currentSourceFile); + } + function isScopeMarker2(node) { + return isExportAssignment(node) || isExportDeclaration(node); + } + function hasScopeMarker2(statements) { + return some(statements, isScopeMarker2); + } + function ensureModifiers(node) { + const currentFlags = getEffectiveModifierFlags(node); + const newFlags = ensureModifierFlags(node); + if (currentFlags === newFlags) { + return visitArray(node.modifiers, (n) => tryCast(n, isModifier), isModifier); + } + return factory2.createModifiersFromModifierFlags(newFlags); + } + function ensureModifierFlags(node) { + let mask2 = 131071 /* All */ ^ (1 /* Public */ | 1024 /* Async */ | 16 /* Override */); + let additions = needsDeclare && !isAlwaysType(node) ? 128 /* Ambient */ : 0 /* None */; + const parentIsFile = node.parent.kind === 308 /* SourceFile */; + if (!parentIsFile || isBundledEmit && parentIsFile && isExternalModule(node.parent)) { + mask2 ^= 128 /* Ambient */; + additions = 0 /* None */; + } + return maskModifierFlags(node, mask2, additions); + } + function transformHeritageClauses(nodes) { + return factory2.createNodeArray(filter( + map(nodes, (clause) => factory2.updateHeritageClause( + clause, + visitNodes2( + factory2.createNodeArray(filter(clause.types, (t) => { + return isEntityNameExpression(t.expression) || clause.token === 96 /* ExtendsKeyword */ && t.expression.kind === 106 /* NullKeyword */; + })), + visitDeclarationSubtree, + isExpressionWithTypeArguments + ) + )), + (clause) => clause.types && !!clause.types.length + )); + } +} +function isAlwaysType(node) { + if (node.kind === 265 /* InterfaceDeclaration */) { + return true; + } + return false; +} +function maskModifiers(factory2, node, modifierMask, modifierAdditions) { + return factory2.createModifiersFromModifierFlags(maskModifierFlags(node, modifierMask, modifierAdditions)); +} +function maskModifierFlags(node, modifierMask = 131071 /* All */ ^ 1 /* Public */, modifierAdditions = 0 /* None */) { + let flags = getEffectiveModifierFlags(node) & modifierMask | modifierAdditions; + if (flags & 2048 /* Default */ && !(flags & 32 /* Export */)) { + flags ^= 32 /* Export */; + } + if (flags & 2048 /* Default */ && flags & 128 /* Ambient */) { + flags ^= 128 /* Ambient */; + } + return flags; +} +function canHaveLiteralInitializer(node) { + switch (node.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return !hasEffectiveModifier(node, 2 /* Private */); + case 170 /* Parameter */: + case 261 /* VariableDeclaration */: + return true; + } + return false; +} +function isPreservedDeclarationStatement(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 268 /* ModuleDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 265 /* InterfaceDeclaration */: + case 264 /* ClassDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 267 /* EnumDeclaration */: + case 244 /* VariableStatement */: + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 278 /* ExportAssignment */: + return true; + } + return false; +} +function isProcessedComponent(node) { + switch (node.kind) { + case 181 /* ConstructSignature */: + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 182 /* IndexSignature */: + case 261 /* VariableDeclaration */: + case 169 /* TypeParameter */: + case 234 /* ExpressionWithTypeArguments */: + case 184 /* TypeReference */: + case 195 /* ConditionalType */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 206 /* ImportType */: + return true; + } + return false; +} + +// src/compiler/transformer.ts +function getModuleTransformer(moduleKind) { + switch (moduleKind) { + case 200 /* Preserve */: + return transformECMAScriptModule; + case 99 /* ESNext */: + case 7 /* ES2022 */: + case 6 /* ES2020 */: + case 5 /* ES2015 */: + case 100 /* Node16 */: + case 101 /* Node18 */: + case 102 /* Node20 */: + case 199 /* NodeNext */: + case 1 /* CommonJS */: + return transformImpliedNodeFormatDependentModule; + case 4 /* System */: + return transformSystemModule; + default: + return transformModule; + } +} +var noTransformers = { scriptTransformers: emptyArray, declarationTransformers: emptyArray }; +function getTransformers(compilerOptions, customTransformers, emitOnly) { + return { + scriptTransformers: getScriptTransformers(compilerOptions, customTransformers, emitOnly), + declarationTransformers: getDeclarationTransformers(customTransformers) + }; +} +function getScriptTransformers(compilerOptions, customTransformers, emitOnly) { + if (emitOnly) return emptyArray; + const languageVersion = getEmitScriptTarget(compilerOptions); + const moduleKind = getEmitModuleKind(compilerOptions); + const useDefineForClassFields = getUseDefineForClassFields(compilerOptions); + const transformers = []; + addRange(transformers, customTransformers && map(customTransformers.before, wrapScriptTransformerFactory)); + transformers.push(transformTypeScript); + if (compilerOptions.experimentalDecorators) { + transformers.push(transformLegacyDecorators); + } + if (getJSXTransformEnabled(compilerOptions)) { + transformers.push(transformJsx); + } + if (languageVersion < 99 /* ESNext */) { + transformers.push(transformESNext); + } + if (!compilerOptions.experimentalDecorators && (languageVersion < 99 /* ESNext */ || !useDefineForClassFields)) { + transformers.push(transformESDecorators); + } + transformers.push(transformClassFields); + if (languageVersion < 8 /* ES2021 */) { + transformers.push(transformES2021); + } + if (languageVersion < 7 /* ES2020 */) { + transformers.push(transformES2020); + } + if (languageVersion < 6 /* ES2019 */) { + transformers.push(transformES2019); + } + if (languageVersion < 5 /* ES2018 */) { + transformers.push(transformES2018); + } + if (languageVersion < 4 /* ES2017 */) { + transformers.push(transformES2017); + } + if (languageVersion < 3 /* ES2016 */) { + transformers.push(transformES2016); + } + if (languageVersion < 2 /* ES2015 */) { + transformers.push(transformES2015); + transformers.push(transformGenerators); + } + transformers.push(getModuleTransformer(moduleKind)); + addRange(transformers, customTransformers && map(customTransformers.after, wrapScriptTransformerFactory)); + return transformers; +} +function getDeclarationTransformers(customTransformers) { + const transformers = []; + transformers.push(transformDeclarations); + addRange(transformers, customTransformers && map(customTransformers.afterDeclarations, wrapDeclarationTransformerFactory)); + return transformers; +} +function wrapCustomTransformer(transformer) { + return (node) => isBundle(node) ? transformer.transformBundle(node) : transformer.transformSourceFile(node); +} +function wrapCustomTransformerFactory(transformer, handleDefault) { + return (context) => { + const customTransformer = transformer(context); + return typeof customTransformer === "function" ? handleDefault(context, customTransformer) : wrapCustomTransformer(customTransformer); + }; +} +function wrapScriptTransformerFactory(transformer) { + return wrapCustomTransformerFactory(transformer, chainBundle); +} +function wrapDeclarationTransformerFactory(transformer) { + return wrapCustomTransformerFactory(transformer, (_, node) => node); +} +function noEmitSubstitution(_hint, node) { + return node; +} +function noEmitNotification(hint, node, callback) { + callback(hint, node); +} +function transformNodes(resolver, host, factory2, options, nodes, transformers, allowDtsFiles) { + var _a, _b; + const enabledSyntaxKindFeatures = new Array(359 /* Count */); + let lexicalEnvironmentVariableDeclarations; + let lexicalEnvironmentFunctionDeclarations; + let lexicalEnvironmentStatements; + let lexicalEnvironmentFlags = 0 /* None */; + let lexicalEnvironmentVariableDeclarationsStack = []; + let lexicalEnvironmentFunctionDeclarationsStack = []; + let lexicalEnvironmentStatementsStack = []; + let lexicalEnvironmentFlagsStack = []; + let lexicalEnvironmentStackOffset = 0; + let lexicalEnvironmentSuspended = false; + let blockScopedVariableDeclarationsStack = []; + let blockScopeStackOffset = 0; + let blockScopedVariableDeclarations; + let emitHelpers; + let onSubstituteNode = noEmitSubstitution; + let onEmitNode = noEmitNotification; + let state = 0 /* Uninitialized */; + const diagnostics = []; + const context = { + factory: factory2, + getCompilerOptions: () => options, + getEmitResolver: () => resolver, + // TODO: GH#18217 + getEmitHost: () => host, + // TODO: GH#18217 + getEmitHelperFactory: memoize(() => createEmitHelperFactory(context)), + startLexicalEnvironment, + suspendLexicalEnvironment, + resumeLexicalEnvironment, + endLexicalEnvironment, + setLexicalEnvironmentFlags, + getLexicalEnvironmentFlags, + hoistVariableDeclaration, + hoistFunctionDeclaration, + addInitializationStatement, + startBlockScope, + endBlockScope, + addBlockScopedVariable, + requestEmitHelper, + readEmitHelpers, + enableSubstitution, + enableEmitNotification, + isSubstitutionEnabled, + isEmitNotificationEnabled, + get onSubstituteNode() { + return onSubstituteNode; + }, + set onSubstituteNode(value) { + Debug.assert(state < 1 /* Initialized */, "Cannot modify transformation hooks after initialization has completed."); + Debug.assert(value !== void 0, "Value must not be 'undefined'"); + onSubstituteNode = value; + }, + get onEmitNode() { + return onEmitNode; + }, + set onEmitNode(value) { + Debug.assert(state < 1 /* Initialized */, "Cannot modify transformation hooks after initialization has completed."); + Debug.assert(value !== void 0, "Value must not be 'undefined'"); + onEmitNode = value; + }, + addDiagnostic(diag2) { + diagnostics.push(diag2); + } + }; + for (const node of nodes) { + disposeEmitNodes(getSourceFileOfNode(getParseTreeNode(node))); + } + mark("beforeTransform"); + const transformersWithContext = transformers.map((t) => t(context)); + const transformation = (node) => { + for (const transform2 of transformersWithContext) { + node = transform2(node); + } + return node; + }; + state = 1 /* Initialized */; + const transformed = []; + for (const node of nodes) { + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Emit, "transformNodes", node.kind === 308 /* SourceFile */ ? { path: node.path } : { kind: node.kind, pos: node.pos, end: node.end }); + transformed.push((allowDtsFiles ? transformation : transformRoot)(node)); + (_b = tracing) == null ? void 0 : _b.pop(); + } + state = 2 /* Completed */; + mark("afterTransform"); + measure("transformTime", "beforeTransform", "afterTransform"); + return { + transformed, + substituteNode, + emitNodeWithNotification, + isEmitNotificationEnabled, + dispose, + diagnostics + }; + function transformRoot(node) { + return node && (!isSourceFile(node) || !node.isDeclarationFile) ? transformation(node) : node; + } + function enableSubstitution(kind) { + Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); + enabledSyntaxKindFeatures[kind] |= 1 /* Substitution */; + } + function isSubstitutionEnabled(node) { + return (enabledSyntaxKindFeatures[node.kind] & 1 /* Substitution */) !== 0 && (getEmitFlags(node) & 8 /* NoSubstitution */) === 0; + } + function substituteNode(hint, node) { + Debug.assert(state < 3 /* Disposed */, "Cannot substitute a node after the result is disposed."); + return node && isSubstitutionEnabled(node) && onSubstituteNode(hint, node) || node; + } + function enableEmitNotification(kind) { + Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); + enabledSyntaxKindFeatures[kind] |= 2 /* EmitNotifications */; + } + function isEmitNotificationEnabled(node) { + return (enabledSyntaxKindFeatures[node.kind] & 2 /* EmitNotifications */) !== 0 || (getEmitFlags(node) & 4 /* AdviseOnEmitNode */) !== 0; + } + function emitNodeWithNotification(hint, node, emitCallback) { + Debug.assert(state < 3 /* Disposed */, "Cannot invoke TransformationResult callbacks after the result is disposed."); + if (node) { + if (isEmitNotificationEnabled(node)) { + onEmitNode(hint, node, emitCallback); + } else { + emitCallback(hint, node); + } + } + } + function hoistVariableDeclaration(name) { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + const decl = setEmitFlags(factory2.createVariableDeclaration(name), 128 /* NoNestedSourceMaps */); + if (!lexicalEnvironmentVariableDeclarations) { + lexicalEnvironmentVariableDeclarations = [decl]; + } else { + lexicalEnvironmentVariableDeclarations.push(decl); + } + if (lexicalEnvironmentFlags & 1 /* InParameters */) { + lexicalEnvironmentFlags |= 2 /* VariablesHoistedInParameters */; + } + } + function hoistFunctionDeclaration(func) { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + setEmitFlags(func, 2097152 /* CustomPrologue */); + if (!lexicalEnvironmentFunctionDeclarations) { + lexicalEnvironmentFunctionDeclarations = [func]; + } else { + lexicalEnvironmentFunctionDeclarations.push(func); + } + } + function addInitializationStatement(node) { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + setEmitFlags(node, 2097152 /* CustomPrologue */); + if (!lexicalEnvironmentStatements) { + lexicalEnvironmentStatements = [node]; + } else { + lexicalEnvironmentStatements.push(node); + } + } + function startLexicalEnvironment() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended."); + lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentVariableDeclarations; + lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFunctionDeclarations; + lexicalEnvironmentStatementsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentStatements; + lexicalEnvironmentFlagsStack[lexicalEnvironmentStackOffset] = lexicalEnvironmentFlags; + lexicalEnvironmentStackOffset++; + lexicalEnvironmentVariableDeclarations = void 0; + lexicalEnvironmentFunctionDeclarations = void 0; + lexicalEnvironmentStatements = void 0; + lexicalEnvironmentFlags = 0 /* None */; + } + function suspendLexicalEnvironment() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is already suspended."); + lexicalEnvironmentSuspended = true; + } + function resumeLexicalEnvironment() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + Debug.assert(lexicalEnvironmentSuspended, "Lexical environment is not suspended."); + lexicalEnvironmentSuspended = false; + } + function endLexicalEnvironment() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the lexical environment during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the lexical environment after transformation has completed."); + Debug.assert(!lexicalEnvironmentSuspended, "Lexical environment is suspended."); + let statements; + if (lexicalEnvironmentVariableDeclarations || lexicalEnvironmentFunctionDeclarations || lexicalEnvironmentStatements) { + if (lexicalEnvironmentFunctionDeclarations) { + statements = [...lexicalEnvironmentFunctionDeclarations]; + } + if (lexicalEnvironmentVariableDeclarations) { + const statement = factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList(lexicalEnvironmentVariableDeclarations) + ); + setEmitFlags(statement, 2097152 /* CustomPrologue */); + if (!statements) { + statements = [statement]; + } else { + statements.push(statement); + } + } + if (lexicalEnvironmentStatements) { + if (!statements) { + statements = [...lexicalEnvironmentStatements]; + } else { + statements = [...statements, ...lexicalEnvironmentStatements]; + } + } + } + lexicalEnvironmentStackOffset--; + lexicalEnvironmentVariableDeclarations = lexicalEnvironmentVariableDeclarationsStack[lexicalEnvironmentStackOffset]; + lexicalEnvironmentFunctionDeclarations = lexicalEnvironmentFunctionDeclarationsStack[lexicalEnvironmentStackOffset]; + lexicalEnvironmentStatements = lexicalEnvironmentStatementsStack[lexicalEnvironmentStackOffset]; + lexicalEnvironmentFlags = lexicalEnvironmentFlagsStack[lexicalEnvironmentStackOffset]; + if (lexicalEnvironmentStackOffset === 0) { + lexicalEnvironmentVariableDeclarationsStack = []; + lexicalEnvironmentFunctionDeclarationsStack = []; + lexicalEnvironmentStatementsStack = []; + lexicalEnvironmentFlagsStack = []; + } + return statements; + } + function setLexicalEnvironmentFlags(flags, value) { + lexicalEnvironmentFlags = value ? lexicalEnvironmentFlags | flags : lexicalEnvironmentFlags & ~flags; + } + function getLexicalEnvironmentFlags() { + return lexicalEnvironmentFlags; + } + function startBlockScope() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot start a block scope during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot start a block scope after transformation has completed."); + blockScopedVariableDeclarationsStack[blockScopeStackOffset] = blockScopedVariableDeclarations; + blockScopeStackOffset++; + blockScopedVariableDeclarations = void 0; + } + function endBlockScope() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot end a block scope during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot end a block scope after transformation has completed."); + const statements = some(blockScopedVariableDeclarations) ? [ + factory2.createVariableStatement( + /*modifiers*/ + void 0, + factory2.createVariableDeclarationList( + blockScopedVariableDeclarations.map((identifier) => factory2.createVariableDeclaration(identifier)), + 1 /* Let */ + ) + ) + ] : void 0; + blockScopeStackOffset--; + blockScopedVariableDeclarations = blockScopedVariableDeclarationsStack[blockScopeStackOffset]; + if (blockScopeStackOffset === 0) { + blockScopedVariableDeclarationsStack = []; + } + return statements; + } + function addBlockScopedVariable(name) { + Debug.assert(blockScopeStackOffset > 0, "Cannot add a block scoped variable outside of an iteration body."); + (blockScopedVariableDeclarations || (blockScopedVariableDeclarations = [])).push(name); + } + function requestEmitHelper(helper) { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the transformation context during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); + Debug.assert(!helper.scoped, "Cannot request a scoped emit helper."); + if (helper.dependencies) { + for (const h of helper.dependencies) { + requestEmitHelper(h); + } + } + emitHelpers = append(emitHelpers, helper); + } + function readEmitHelpers() { + Debug.assert(state > 0 /* Uninitialized */, "Cannot modify the transformation context during initialization."); + Debug.assert(state < 2 /* Completed */, "Cannot modify the transformation context after transformation has completed."); + const helpers = emitHelpers; + emitHelpers = void 0; + return helpers; + } + function dispose() { + if (state < 3 /* Disposed */) { + for (const node of nodes) { + disposeEmitNodes(getSourceFileOfNode(getParseTreeNode(node))); + } + lexicalEnvironmentVariableDeclarations = void 0; + lexicalEnvironmentVariableDeclarationsStack = void 0; + lexicalEnvironmentFunctionDeclarations = void 0; + lexicalEnvironmentFunctionDeclarationsStack = void 0; + onSubstituteNode = void 0; + onEmitNode = void 0; + emitHelpers = void 0; + state = 3 /* Disposed */; + } + } +} +var nullTransformationContext = { + factory, + // eslint-disable-line object-shorthand + getCompilerOptions: () => ({}), + getEmitResolver: notImplemented, + getEmitHost: notImplemented, + getEmitHelperFactory: notImplemented, + startLexicalEnvironment: noop, + resumeLexicalEnvironment: noop, + suspendLexicalEnvironment: noop, + endLexicalEnvironment: returnUndefined, + setLexicalEnvironmentFlags: noop, + getLexicalEnvironmentFlags: () => 0, + hoistVariableDeclaration: noop, + hoistFunctionDeclaration: noop, + addInitializationStatement: noop, + startBlockScope: noop, + endBlockScope: returnUndefined, + addBlockScopedVariable: noop, + requestEmitHelper: noop, + readEmitHelpers: notImplemented, + enableSubstitution: noop, + enableEmitNotification: noop, + isSubstitutionEnabled: notImplemented, + isEmitNotificationEnabled: notImplemented, + onSubstituteNode: noEmitSubstitution, + onEmitNode: noEmitNotification, + addDiagnostic: noop +}; + +// src/compiler/emitter.ts +var brackets = createBracketsMap(); +function isBuildInfoFile(file) { + return fileExtensionIs(file, ".tsbuildinfo" /* TsBuildInfo */); +} +function forEachEmittedFile(host, action, sourceFilesOrTargetSourceFile, forceDtsEmit = false, onlyBuildInfo, includeBuildInfo) { + const sourceFiles = isArray(sourceFilesOrTargetSourceFile) ? sourceFilesOrTargetSourceFile : getSourceFilesToEmit(host, sourceFilesOrTargetSourceFile, forceDtsEmit); + const options = host.getCompilerOptions(); + if (!onlyBuildInfo) { + if (options.outFile) { + if (sourceFiles.length) { + const bundle = factory.createBundle(sourceFiles); + const result = action(getOutputPathsFor(bundle, host, forceDtsEmit), bundle); + if (result) { + return result; + } + } + } else { + for (const sourceFile of sourceFiles) { + const result = action(getOutputPathsFor(sourceFile, host, forceDtsEmit), sourceFile); + if (result) { + return result; + } + } + } + } + if (includeBuildInfo) { + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(options); + if (buildInfoPath) return action( + { buildInfoPath }, + /*sourceFileOrBundle*/ + void 0 + ); + } +} +function getTsBuildInfoEmitOutputFilePath(options) { + const configFile = options.configFilePath; + if (!canEmitTsBuildInfo(options)) return void 0; + if (options.tsBuildInfoFile) return options.tsBuildInfoFile; + const outPath = options.outFile; + let buildInfoExtensionLess; + if (outPath) { + buildInfoExtensionLess = removeFileExtension(outPath); + } else { + if (!configFile) return void 0; + const configFileExtensionLess = removeFileExtension(configFile); + buildInfoExtensionLess = options.outDir ? options.rootDir ? resolvePath(options.outDir, getRelativePathFromDirectory( + options.rootDir, + configFileExtensionLess, + /*ignoreCase*/ + true + )) : combinePaths(options.outDir, getBaseFileName(configFileExtensionLess)) : configFileExtensionLess; + } + return buildInfoExtensionLess + ".tsbuildinfo" /* TsBuildInfo */; +} +function canEmitTsBuildInfo(options) { + return isIncrementalCompilation(options) || !!options.tscBuild; +} +function getOutputPathsForBundle(options, forceDtsPaths) { + const outPath = options.outFile; + const jsFilePath = options.emitDeclarationOnly ? void 0 : outPath; + const sourceMapFilePath = jsFilePath && getSourceMapFilePath(jsFilePath, options); + const declarationFilePath = forceDtsPaths || getEmitDeclarations(options) ? removeFileExtension(outPath) + ".d.ts" /* Dts */ : void 0; + const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : void 0; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath }; +} +function getOutputPathsFor(sourceFile, host, forceDtsPaths) { + const options = host.getCompilerOptions(); + if (sourceFile.kind === 309 /* Bundle */) { + return getOutputPathsForBundle(options, forceDtsPaths); + } else { + const ownOutputFilePath = getOwnEmitOutputFilePath(sourceFile.fileName, host, getOutputExtension(sourceFile.fileName, options)); + const isJsonFile = isJsonSourceFile(sourceFile); + const isJsonEmittedToSameLocation = isJsonFile && comparePaths(sourceFile.fileName, ownOutputFilePath, host.getCurrentDirectory(), !host.useCaseSensitiveFileNames()) === 0 /* EqualTo */; + const jsFilePath = options.emitDeclarationOnly || isJsonEmittedToSameLocation ? void 0 : ownOutputFilePath; + const sourceMapFilePath = !jsFilePath || isJsonSourceFile(sourceFile) ? void 0 : getSourceMapFilePath(jsFilePath, options); + const declarationFilePath = forceDtsPaths || getEmitDeclarations(options) && !isJsonFile ? getDeclarationEmitOutputFilePath(sourceFile.fileName, host) : void 0; + const declarationMapPath = declarationFilePath && getAreDeclarationMapsEnabled(options) ? declarationFilePath + ".map" : void 0; + return { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath }; + } +} +function getSourceMapFilePath(jsFilePath, options) { + return options.sourceMap && !options.inlineSourceMap ? jsFilePath + ".map" : void 0; +} +function getOutputExtension(fileName, options) { + return fileExtensionIs(fileName, ".json" /* Json */) ? ".json" /* Json */ : options.jsx === 1 /* Preserve */ && fileExtensionIsOneOf(fileName, [".jsx" /* Jsx */, ".tsx" /* Tsx */]) ? ".jsx" /* Jsx */ : fileExtensionIsOneOf(fileName, [".mts" /* Mts */, ".mjs" /* Mjs */]) ? ".mjs" /* Mjs */ : fileExtensionIsOneOf(fileName, [".cts" /* Cts */, ".cjs" /* Cjs */]) ? ".cjs" /* Cjs */ : ".js" /* Js */; +} +function getOutputPathWithoutChangingExt(inputFileName, ignoreCase, outputDir, getCommonSourceDirectory2) { + return outputDir ? resolvePath( + outputDir, + getRelativePathFromDirectory(getCommonSourceDirectory2(), inputFileName, ignoreCase) + ) : inputFileName; +} +function getOutputDeclarationFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory2 = () => getCommonSourceDirectoryOfConfig(configFile, ignoreCase)) { + return getOutputDeclarationFileNameWorker(inputFileName, configFile.options, ignoreCase, getCommonSourceDirectory2); +} +function getOutputDeclarationFileNameWorker(inputFileName, options, ignoreCase, getCommonSourceDirectory2) { + return changeExtension( + getOutputPathWithoutChangingExt(inputFileName, ignoreCase, options.declarationDir || options.outDir, getCommonSourceDirectory2), + getDeclarationEmitExtensionForPath(inputFileName) + ); +} +function getOutputJSFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory2 = () => getCommonSourceDirectoryOfConfig(configFile, ignoreCase)) { + if (configFile.options.emitDeclarationOnly) return void 0; + const isJsonFile = fileExtensionIs(inputFileName, ".json" /* Json */); + const outputFileName = getOutputJSFileNameWorker(inputFileName, configFile.options, ignoreCase, getCommonSourceDirectory2); + return !isJsonFile || comparePaths(inputFileName, outputFileName, Debug.checkDefined(configFile.options.configFilePath), ignoreCase) !== 0 /* EqualTo */ ? outputFileName : void 0; +} +function getOutputJSFileNameWorker(inputFileName, options, ignoreCase, getCommonSourceDirectory2) { + return changeExtension( + getOutputPathWithoutChangingExt(inputFileName, ignoreCase, options.outDir, getCommonSourceDirectory2), + getOutputExtension(inputFileName, options) + ); +} +function createAddOutput() { + let outputs; + return { addOutput, getOutputs }; + function addOutput(path) { + if (path) { + (outputs || (outputs = [])).push(path); + } + } + function getOutputs() { + return outputs || emptyArray; + } +} +function getSingleOutputFileNames(configFile, addOutput) { + const { jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath } = getOutputPathsForBundle( + configFile.options, + /*forceDtsPaths*/ + false + ); + addOutput(jsFilePath); + addOutput(sourceMapFilePath); + addOutput(declarationFilePath); + addOutput(declarationMapPath); +} +function getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory2) { + if (isDeclarationFileName(inputFileName)) return; + const js = getOutputJSFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory2); + addOutput(js); + if (fileExtensionIs(inputFileName, ".json" /* Json */)) return; + if (js && configFile.options.sourceMap) { + addOutput(`${js}.map`); + } + if (getEmitDeclarations(configFile.options)) { + const dts = getOutputDeclarationFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory2); + addOutput(dts); + if (configFile.options.declarationMap) { + addOutput(`${dts}.map`); + } + } +} +function getCommonSourceDirectory(options, emittedFiles, currentDirectory, getCanonicalFileName, checkSourceFilesBelongToPath) { + let commonSourceDirectory; + if (options.rootDir) { + commonSourceDirectory = getNormalizedAbsolutePath(options.rootDir, currentDirectory); + checkSourceFilesBelongToPath == null ? void 0 : checkSourceFilesBelongToPath(options.rootDir); + } else if (options.composite && options.configFilePath) { + commonSourceDirectory = getDirectoryPath(normalizeSlashes(options.configFilePath)); + checkSourceFilesBelongToPath == null ? void 0 : checkSourceFilesBelongToPath(commonSourceDirectory); + } else { + commonSourceDirectory = computeCommonSourceDirectoryOfFilenames(emittedFiles(), currentDirectory, getCanonicalFileName); + } + if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== directorySeparator) { + commonSourceDirectory += directorySeparator; + } + return commonSourceDirectory; +} +function getCommonSourceDirectoryOfConfig({ options, fileNames }, ignoreCase) { + return getCommonSourceDirectory( + options, + () => filter(fileNames, (file) => !(options.noEmitForJsFiles && fileExtensionIsOneOf(file, supportedJSExtensionsFlat)) && !isDeclarationFileName(file)), + getDirectoryPath(normalizeSlashes(Debug.checkDefined(options.configFilePath))), + createGetCanonicalFileName(!ignoreCase) + ); +} +function getAllProjectOutputs(configFile, ignoreCase) { + const { addOutput, getOutputs } = createAddOutput(); + if (configFile.options.outFile) { + getSingleOutputFileNames(configFile, addOutput); + } else { + const getCommonSourceDirectory2 = memoize(() => getCommonSourceDirectoryOfConfig(configFile, ignoreCase)); + for (const inputFileName of configFile.fileNames) { + getOwnOutputFileNames(configFile, inputFileName, ignoreCase, addOutput, getCommonSourceDirectory2); + } + } + addOutput(getTsBuildInfoEmitOutputFilePath(configFile.options)); + return getOutputs(); +} +function getOutputFileNames(commandLine, inputFileName, ignoreCase) { + inputFileName = normalizePath(inputFileName); + Debug.assert(contains(commandLine.fileNames, inputFileName), `Expected fileName to be present in command line`); + const { addOutput, getOutputs } = createAddOutput(); + if (commandLine.options.outFile) { + getSingleOutputFileNames(commandLine, addOutput); + } else { + getOwnOutputFileNames(commandLine, inputFileName, ignoreCase, addOutput); + } + return getOutputs(); +} +function getFirstProjectOutput(configFile, ignoreCase) { + if (configFile.options.outFile) { + const { jsFilePath, declarationFilePath } = getOutputPathsForBundle( + configFile.options, + /*forceDtsPaths*/ + false + ); + return Debug.checkDefined(jsFilePath || declarationFilePath, `project ${configFile.options.configFilePath} expected to have at least one output`); + } + const getCommonSourceDirectory2 = memoize(() => getCommonSourceDirectoryOfConfig(configFile, ignoreCase)); + for (const inputFileName of configFile.fileNames) { + if (isDeclarationFileName(inputFileName)) continue; + const jsFilePath = getOutputJSFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory2); + if (jsFilePath) return jsFilePath; + if (fileExtensionIs(inputFileName, ".json" /* Json */)) continue; + if (getEmitDeclarations(configFile.options)) { + return getOutputDeclarationFileName(inputFileName, configFile, ignoreCase, getCommonSourceDirectory2); + } + } + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(configFile.options); + if (buildInfoPath) return buildInfoPath; + return Debug.fail(`project ${configFile.options.configFilePath} expected to have at least one output`); +} +function emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) { + return !!forceDtsEmit && !!emitOnly; +} +function emitFiles(resolver, host, targetSourceFile, { scriptTransformers, declarationTransformers }, emitOnly, onlyBuildInfo, forceDtsEmit, skipBuildInfo) { + var compilerOptions = host.getCompilerOptions(); + var sourceMapDataList = compilerOptions.sourceMap || compilerOptions.inlineSourceMap || getAreDeclarationMapsEnabled(compilerOptions) ? [] : void 0; + var emittedFilesList = compilerOptions.listEmittedFiles ? [] : void 0; + var emitterDiagnostics = createDiagnosticCollection(); + var newLine = getNewLineCharacter(compilerOptions); + var writer = createTextWriter(newLine); + var { enter, exit } = createTimer("printTime", "beforePrint", "afterPrint"); + var emitSkipped = false; + enter(); + forEachEmittedFile( + host, + emitSourceFileOrBundle, + getSourceFilesToEmit(host, targetSourceFile, forceDtsEmit), + forceDtsEmit, + onlyBuildInfo, + !targetSourceFile && !skipBuildInfo + ); + exit(); + return { + emitSkipped, + diagnostics: emitterDiagnostics.getDiagnostics(), + emittedFiles: emittedFilesList, + sourceMaps: sourceMapDataList + }; + function emitSourceFileOrBundle({ jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath, buildInfoPath }, sourceFileOrBundle) { + var _a, _b, _c, _d, _e, _f; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Emit, "emitJsFileOrBundle", { jsFilePath }); + emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath); + (_b = tracing) == null ? void 0 : _b.pop(); + (_c = tracing) == null ? void 0 : _c.push(tracing.Phase.Emit, "emitDeclarationFileOrBundle", { declarationFilePath }); + emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath); + (_d = tracing) == null ? void 0 : _d.pop(); + (_e = tracing) == null ? void 0 : _e.push(tracing.Phase.Emit, "emitBuildInfo", { buildInfoPath }); + emitBuildInfo(buildInfoPath); + (_f = tracing) == null ? void 0 : _f.pop(); + } + function emitBuildInfo(buildInfoPath) { + if (!buildInfoPath || targetSourceFile) return; + if (host.isEmitBlocked(buildInfoPath)) { + emitSkipped = true; + return; + } + const buildInfo = host.getBuildInfo() || { version }; + writeFile( + host, + emitterDiagnostics, + buildInfoPath, + getBuildInfoText(buildInfo), + /*writeByteOrderMark*/ + false, + /*sourceFiles*/ + void 0, + { buildInfo } + ); + emittedFilesList == null ? void 0 : emittedFilesList.push(buildInfoPath); + } + function emitJsFileOrBundle(sourceFileOrBundle, jsFilePath, sourceMapFilePath) { + if (!sourceFileOrBundle || emitOnly || !jsFilePath) { + return; + } + if (host.isEmitBlocked(jsFilePath) || compilerOptions.noEmit) { + emitSkipped = true; + return; + } + (isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : filter(sourceFileOrBundle.sourceFiles, isSourceFileNotJson)).forEach( + (sourceFile) => { + if (compilerOptions.noCheck || !canIncludeBindAndCheckDiagnostics(sourceFile, compilerOptions)) markLinkedReferences(sourceFile); + } + ); + const transform2 = transformNodes( + resolver, + host, + factory, + compilerOptions, + [sourceFileOrBundle], + scriptTransformers, + /*allowDtsFiles*/ + false + ); + const printerOptions = { + removeComments: compilerOptions.removeComments, + newLine: compilerOptions.newLine, + noEmitHelpers: compilerOptions.noEmitHelpers, + module: getEmitModuleKind(compilerOptions), + moduleResolution: getEmitModuleResolutionKind(compilerOptions), + target: getEmitScriptTarget(compilerOptions), + sourceMap: compilerOptions.sourceMap, + inlineSourceMap: compilerOptions.inlineSourceMap, + inlineSources: compilerOptions.inlineSources, + extendedDiagnostics: compilerOptions.extendedDiagnostics + }; + const printer = createPrinter(printerOptions, { + // resolver hooks + hasGlobalName: resolver.hasGlobalName, + // transform hooks + onEmitNode: transform2.emitNodeWithNotification, + isEmitNotificationEnabled: transform2.isEmitNotificationEnabled, + substituteNode: transform2.substituteNode + }); + Debug.assert(transform2.transformed.length === 1, "Should only see one output from the transform"); + printSourceFileOrBundle(jsFilePath, sourceMapFilePath, transform2, printer, compilerOptions); + transform2.dispose(); + if (emittedFilesList) { + emittedFilesList.push(jsFilePath); + if (sourceMapFilePath) { + emittedFilesList.push(sourceMapFilePath); + } + } + } + function emitDeclarationFileOrBundle(sourceFileOrBundle, declarationFilePath, declarationMapPath) { + if (!sourceFileOrBundle || emitOnly === 0 /* Js */) return; + if (!declarationFilePath) { + if (emitOnly || compilerOptions.emitDeclarationOnly) emitSkipped = true; + return; + } + const sourceFiles = isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : sourceFileOrBundle.sourceFiles; + const filesForEmit = forceDtsEmit ? sourceFiles : filter(sourceFiles, isSourceFileNotJson); + const inputListOrBundle = compilerOptions.outFile ? [factory.createBundle(filesForEmit)] : filesForEmit; + filesForEmit.forEach((sourceFile) => { + if (emitOnly && !getEmitDeclarations(compilerOptions) || compilerOptions.noCheck || emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) || !canIncludeBindAndCheckDiagnostics(sourceFile, compilerOptions)) { + collectLinkedAliases(sourceFile); + } + }); + const declarationTransform = transformNodes( + resolver, + host, + factory, + compilerOptions, + inputListOrBundle, + declarationTransformers, + /*allowDtsFiles*/ + false + ); + if (length(declarationTransform.diagnostics)) { + for (const diagnostic of declarationTransform.diagnostics) { + emitterDiagnostics.add(diagnostic); + } + } + const declBlocked = !!declarationTransform.diagnostics && !!declarationTransform.diagnostics.length || !!host.isEmitBlocked(declarationFilePath) || !!compilerOptions.noEmit; + emitSkipped = emitSkipped || declBlocked; + if (!declBlocked || forceDtsEmit) { + Debug.assert(declarationTransform.transformed.length === 1, "Should only see one output from the decl transform"); + const printerOptions = { + removeComments: compilerOptions.removeComments, + newLine: compilerOptions.newLine, + noEmitHelpers: true, + module: compilerOptions.module, + moduleResolution: compilerOptions.moduleResolution, + target: compilerOptions.target, + sourceMap: emitOnly !== 2 /* BuilderSignature */ && compilerOptions.declarationMap, + inlineSourceMap: compilerOptions.inlineSourceMap, + extendedDiagnostics: compilerOptions.extendedDiagnostics, + onlyPrintJsDocStyle: true, + omitBraceSourceMapPositions: true + }; + const declarationPrinter = createPrinter(printerOptions, { + // resolver hooks + hasGlobalName: resolver.hasGlobalName, + // transform hooks + onEmitNode: declarationTransform.emitNodeWithNotification, + isEmitNotificationEnabled: declarationTransform.isEmitNotificationEnabled, + substituteNode: declarationTransform.substituteNode + }); + const dtsWritten = printSourceFileOrBundle( + declarationFilePath, + declarationMapPath, + declarationTransform, + declarationPrinter, + { + sourceMap: printerOptions.sourceMap, + sourceRoot: compilerOptions.sourceRoot, + mapRoot: compilerOptions.mapRoot, + extendedDiagnostics: compilerOptions.extendedDiagnostics + // Explicitly do not passthru either `inline` option + } + ); + if (emittedFilesList) { + if (dtsWritten) emittedFilesList.push(declarationFilePath); + if (declarationMapPath) { + emittedFilesList.push(declarationMapPath); + } + } + } + declarationTransform.dispose(); + } + function collectLinkedAliases(node) { + if (isExportAssignment(node)) { + if (node.expression.kind === 80 /* Identifier */) { + resolver.collectLinkedAliases( + node.expression, + /*setVisibility*/ + true + ); + } + return; + } else if (isExportSpecifier(node)) { + resolver.collectLinkedAliases( + node.propertyName || node.name, + /*setVisibility*/ + true + ); + return; + } + forEachChild(node, collectLinkedAliases); + } + function markLinkedReferences(file) { + if (isSourceFileJS(file)) return; + forEachChildRecursively(file, (n) => { + if (isImportEqualsDeclaration(n) && !(getSyntacticModifierFlags(n) & 32 /* Export */)) return "skip"; + if (isImportDeclaration(n)) return "skip"; + resolver.markLinkedReferences(n); + }); + } + function printSourceFileOrBundle(jsFilePath, sourceMapFilePath, transform2, printer, mapOptions) { + const sourceFileOrBundle = transform2.transformed[0]; + const bundle = sourceFileOrBundle.kind === 309 /* Bundle */ ? sourceFileOrBundle : void 0; + const sourceFile = sourceFileOrBundle.kind === 308 /* SourceFile */ ? sourceFileOrBundle : void 0; + const sourceFiles = bundle ? bundle.sourceFiles : [sourceFile]; + let sourceMapGenerator; + if (shouldEmitSourceMaps(mapOptions, sourceFileOrBundle)) { + sourceMapGenerator = createSourceMapGenerator( + host, + getBaseFileName(normalizeSlashes(jsFilePath)), + getSourceRoot(mapOptions), + getSourceMapDirectory(mapOptions, jsFilePath, sourceFile), + mapOptions + ); + } + if (bundle) { + printer.writeBundle(bundle, writer, sourceMapGenerator); + } else { + printer.writeFile(sourceFile, writer, sourceMapGenerator); + } + let sourceMapUrlPos; + if (sourceMapGenerator) { + if (sourceMapDataList) { + sourceMapDataList.push({ + inputSourceFileNames: sourceMapGenerator.getSources(), + sourceMap: sourceMapGenerator.toJSON() + }); + } + const sourceMappingURL = getSourceMappingURL( + mapOptions, + sourceMapGenerator, + jsFilePath, + sourceMapFilePath, + sourceFile + ); + if (sourceMappingURL) { + if (!writer.isAtStartOfLine()) writer.rawWrite(newLine); + sourceMapUrlPos = writer.getTextPos(); + writer.writeComment(`//# ${"sourceMappingURL"}=${sourceMappingURL}`); + } + if (sourceMapFilePath) { + const sourceMap = sourceMapGenerator.toString(); + writeFile( + host, + emitterDiagnostics, + sourceMapFilePath, + sourceMap, + /*writeByteOrderMark*/ + false, + sourceFiles + ); + } + } else { + writer.writeLine(); + } + const text = writer.getText(); + const data = { sourceMapUrlPos, diagnostics: transform2.diagnostics }; + writeFile(host, emitterDiagnostics, jsFilePath, text, !!compilerOptions.emitBOM, sourceFiles, data); + writer.clear(); + return !data.skippedDtsWrite; + } + function shouldEmitSourceMaps(mapOptions, sourceFileOrBundle) { + return (mapOptions.sourceMap || mapOptions.inlineSourceMap) && (sourceFileOrBundle.kind !== 308 /* SourceFile */ || !fileExtensionIs(sourceFileOrBundle.fileName, ".json" /* Json */)); + } + function getSourceRoot(mapOptions) { + const sourceRoot = normalizeSlashes(mapOptions.sourceRoot || ""); + return sourceRoot ? ensureTrailingDirectorySeparator(sourceRoot) : sourceRoot; + } + function getSourceMapDirectory(mapOptions, filePath, sourceFile) { + if (mapOptions.sourceRoot) return host.getCommonSourceDirectory(); + if (mapOptions.mapRoot) { + let sourceMapDir = normalizeSlashes(mapOptions.mapRoot); + if (sourceFile) { + sourceMapDir = getDirectoryPath(getSourceFilePathInNewDir(sourceFile.fileName, host, sourceMapDir)); + } + if (getRootLength(sourceMapDir) === 0) { + sourceMapDir = combinePaths(host.getCommonSourceDirectory(), sourceMapDir); + } + return sourceMapDir; + } + return getDirectoryPath(normalizePath(filePath)); + } + function getSourceMappingURL(mapOptions, sourceMapGenerator, filePath, sourceMapFilePath, sourceFile) { + if (mapOptions.inlineSourceMap) { + const sourceMapText = sourceMapGenerator.toString(); + const base64SourceMapText = base64encode(sys, sourceMapText); + return `data:application/json;base64,${base64SourceMapText}`; + } + const sourceMapFile = getBaseFileName(normalizeSlashes(Debug.checkDefined(sourceMapFilePath))); + if (mapOptions.mapRoot) { + let sourceMapDir = normalizeSlashes(mapOptions.mapRoot); + if (sourceFile) { + sourceMapDir = getDirectoryPath(getSourceFilePathInNewDir(sourceFile.fileName, host, sourceMapDir)); + } + if (getRootLength(sourceMapDir) === 0) { + sourceMapDir = combinePaths(host.getCommonSourceDirectory(), sourceMapDir); + return encodeURI( + getRelativePathToDirectoryOrUrl( + getDirectoryPath(normalizePath(filePath)), + // get the relative sourceMapDir path based on jsFilePath + combinePaths(sourceMapDir, sourceMapFile), + // this is where user expects to see sourceMap + host.getCurrentDirectory(), + host.getCanonicalFileName, + /*isAbsolutePathAnUrl*/ + true + ) + ); + } else { + return encodeURI(combinePaths(sourceMapDir, sourceMapFile)); + } + } + return encodeURI(sourceMapFile); + } +} +function getBuildInfoText(buildInfo) { + return JSON.stringify(buildInfo); +} +function getBuildInfo(buildInfoFile, buildInfoText) { + return readJsonOrUndefined(buildInfoFile, buildInfoText); +} +var notImplementedResolver = { + hasGlobalName: notImplemented, + getReferencedExportContainer: notImplemented, + getReferencedImportDeclaration: notImplemented, + getReferencedDeclarationWithCollidingName: notImplemented, + isDeclarationWithCollidingName: notImplemented, + isValueAliasDeclaration: notImplemented, + isReferencedAliasDeclaration: notImplemented, + isTopLevelValueImportEqualsWithEntityName: notImplemented, + hasNodeCheckFlag: notImplemented, + isDeclarationVisible: notImplemented, + isLateBound: (_node) => false, + collectLinkedAliases: notImplemented, + markLinkedReferences: notImplemented, + isImplementationOfOverload: notImplemented, + requiresAddingImplicitUndefined: notImplemented, + isExpandoFunctionDeclaration: notImplemented, + getPropertiesOfContainerFunction: notImplemented, + createTypeOfDeclaration: notImplemented, + createReturnTypeOfSignatureDeclaration: notImplemented, + createTypeOfExpression: notImplemented, + createLiteralConstValue: notImplemented, + isSymbolAccessible: notImplemented, + isEntityNameVisible: notImplemented, + // Returns the constant value this property access resolves to: notImplemented, or 'undefined' for a non-constant + getConstantValue: notImplemented, + getEnumMemberValue: notImplemented, + getReferencedValueDeclaration: notImplemented, + getReferencedValueDeclarations: notImplemented, + getTypeReferenceSerializationKind: notImplemented, + isOptionalParameter: notImplemented, + isArgumentsLocalBinding: notImplemented, + getExternalModuleFileFromDeclaration: notImplemented, + isLiteralConstDeclaration: notImplemented, + getJsxFactoryEntity: notImplemented, + getJsxFragmentFactoryEntity: notImplemented, + isBindingCapturedByNode: notImplemented, + getDeclarationStatementsForSourceFile: notImplemented, + isImportRequiredByAugmentation: notImplemented, + isDefinitelyReferenceToGlobalSymbolObject: notImplemented, + createLateBoundIndexSignatures: notImplemented, + symbolToDeclarations: notImplemented +}; +var createPrinterWithDefaults = /* @__PURE__ */ memoize(() => createPrinter({})); +var createPrinterWithRemoveComments = /* @__PURE__ */ memoize(() => createPrinter({ removeComments: true })); +var createPrinterWithRemoveCommentsNeverAsciiEscape = /* @__PURE__ */ memoize(() => createPrinter({ removeComments: true, neverAsciiEscape: true })); +var createPrinterWithRemoveCommentsOmitTrailingSemicolon = /* @__PURE__ */ memoize(() => createPrinter({ removeComments: true, omitTrailingSemicolon: true })); +function createPrinter(printerOptions = {}, handlers = {}) { + var { + hasGlobalName, + onEmitNode = noEmitNotification, + isEmitNotificationEnabled, + substituteNode = noEmitSubstitution, + onBeforeEmitNode, + onAfterEmitNode, + onBeforeEmitNodeArray, + onAfterEmitNodeArray, + onBeforeEmitToken, + onAfterEmitToken + } = handlers; + var extendedDiagnostics = !!printerOptions.extendedDiagnostics; + var omitBraceSourcePositions = !!printerOptions.omitBraceSourceMapPositions; + var newLine = getNewLineCharacter(printerOptions); + var moduleKind = getEmitModuleKind(printerOptions); + var bundledHelpers = /* @__PURE__ */ new Map(); + var currentSourceFile; + var nodeIdToGeneratedName; + var nodeIdToGeneratedPrivateName; + var autoGeneratedIdToGeneratedName; + var generatedNames; + var formattedNameTempFlagsStack; + var formattedNameTempFlags; + var privateNameTempFlagsStack; + var privateNameTempFlags; + var tempFlagsStack; + var tempFlags; + var reservedNamesStack; + var reservedNames; + var reservedPrivateNamesStack; + var reservedPrivateNames; + var preserveSourceNewlines = printerOptions.preserveSourceNewlines; + var nextListElementPos; + var writer; + var ownWriter; + var write = writeBase; + var isOwnFileEmit; + var sourceMapsDisabled = true; + var sourceMapGenerator; + var sourceMapSource; + var sourceMapSourceIndex = -1; + var mostRecentlyAddedSourceMapSource; + var mostRecentlyAddedSourceMapSourceIndex = -1; + var containerPos = -1; + var containerEnd = -1; + var declarationListContainerEnd = -1; + var currentLineMap; + var detachedCommentsInfo; + var hasWrittenComment = false; + var commentsDisabled = !!printerOptions.removeComments; + var lastSubstitution; + var currentParenthesizerRule; + var { enter: enterComment, exit: exitComment } = createTimerIf(extendedDiagnostics, "commentTime", "beforeComment", "afterComment"); + var parenthesizer = factory.parenthesizer; + var typeArgumentParenthesizerRuleSelector = { + select: (index) => index === 0 ? parenthesizer.parenthesizeLeadingTypeArgument : void 0 + }; + var emitBinaryExpression = createEmitBinaryExpression(); + reset2(); + return { + // public API + printNode, + printList, + printFile, + printBundle, + // internal API + writeNode, + writeList, + writeFile: writeFile2, + writeBundle + }; + function printNode(hint, node, sourceFile) { + switch (hint) { + case 0 /* SourceFile */: + Debug.assert(isSourceFile(node), "Expected a SourceFile node."); + break; + case 2 /* IdentifierName */: + Debug.assert(isIdentifier(node), "Expected an Identifier node."); + break; + case 1 /* Expression */: + Debug.assert(isExpression(node), "Expected an Expression node."); + break; + } + switch (node.kind) { + case 308 /* SourceFile */: + return printFile(node); + case 309 /* Bundle */: + return printBundle(node); + } + writeNode(hint, node, sourceFile, beginPrint()); + return endPrint(); + } + function printList(format, nodes, sourceFile) { + writeList(format, nodes, sourceFile, beginPrint()); + return endPrint(); + } + function printBundle(bundle) { + writeBundle( + bundle, + beginPrint(), + /*sourceMapGenerator*/ + void 0 + ); + return endPrint(); + } + function printFile(sourceFile) { + writeFile2( + sourceFile, + beginPrint(), + /*sourceMapGenerator*/ + void 0 + ); + return endPrint(); + } + function writeNode(hint, node, sourceFile, output) { + const previousWriter = writer; + setWriter( + output, + /*_sourceMapGenerator*/ + void 0 + ); + print(hint, node, sourceFile); + reset2(); + writer = previousWriter; + } + function writeList(format, nodes, sourceFile, output) { + const previousWriter = writer; + setWriter( + output, + /*_sourceMapGenerator*/ + void 0 + ); + if (sourceFile) { + setSourceFile(sourceFile); + } + emitList( + /*parentNode*/ + void 0, + nodes, + format + ); + reset2(); + writer = previousWriter; + } + function writeBundle(bundle, output, sourceMapGenerator2) { + isOwnFileEmit = false; + const previousWriter = writer; + setWriter(output, sourceMapGenerator2); + emitShebangIfNeeded(bundle); + emitPrologueDirectivesIfNeeded(bundle); + emitHelpers(bundle); + emitSyntheticTripleSlashReferencesIfNeeded(bundle); + for (const sourceFile of bundle.sourceFiles) { + print(0 /* SourceFile */, sourceFile, sourceFile); + } + reset2(); + writer = previousWriter; + } + function writeFile2(sourceFile, output, sourceMapGenerator2) { + isOwnFileEmit = true; + const previousWriter = writer; + setWriter(output, sourceMapGenerator2); + emitShebangIfNeeded(sourceFile); + emitPrologueDirectivesIfNeeded(sourceFile); + print(0 /* SourceFile */, sourceFile, sourceFile); + reset2(); + writer = previousWriter; + } + function beginPrint() { + return ownWriter || (ownWriter = createTextWriter(newLine)); + } + function endPrint() { + const text = ownWriter.getText(); + ownWriter.clear(); + return text; + } + function print(hint, node, sourceFile) { + if (sourceFile) { + setSourceFile(sourceFile); + } + pipelineEmit( + hint, + node, + /*parenthesizerRule*/ + void 0 + ); + } + function setSourceFile(sourceFile) { + currentSourceFile = sourceFile; + currentLineMap = void 0; + detachedCommentsInfo = void 0; + if (sourceFile) { + setSourceMapSource(sourceFile); + } + } + function setWriter(_writer, _sourceMapGenerator) { + if (_writer && printerOptions.omitTrailingSemicolon) { + _writer = getTrailingSemicolonDeferringWriter(_writer); + } + writer = _writer; + sourceMapGenerator = _sourceMapGenerator; + sourceMapsDisabled = !writer || !sourceMapGenerator; + } + function reset2() { + nodeIdToGeneratedName = []; + nodeIdToGeneratedPrivateName = []; + autoGeneratedIdToGeneratedName = []; + generatedNames = /* @__PURE__ */ new Set(); + formattedNameTempFlagsStack = []; + formattedNameTempFlags = /* @__PURE__ */ new Map(); + privateNameTempFlagsStack = []; + privateNameTempFlags = 0 /* Auto */; + tempFlagsStack = []; + tempFlags = 0 /* Auto */; + reservedNamesStack = []; + reservedNames = void 0; + reservedPrivateNamesStack = []; + reservedPrivateNames = void 0; + currentSourceFile = void 0; + currentLineMap = void 0; + detachedCommentsInfo = void 0; + setWriter( + /*output*/ + void 0, + /*_sourceMapGenerator*/ + void 0 + ); + } + function getCurrentLineMap() { + return currentLineMap || (currentLineMap = getLineStarts(Debug.checkDefined(currentSourceFile))); + } + function emit(node, parenthesizerRule) { + if (node === void 0) return; + pipelineEmit(4 /* Unspecified */, node, parenthesizerRule); + } + function emitIdentifierName(node) { + if (node === void 0) return; + pipelineEmit( + 2 /* IdentifierName */, + node, + /*parenthesizerRule*/ + void 0 + ); + } + function emitExpression(node, parenthesizerRule) { + if (node === void 0) return; + pipelineEmit(1 /* Expression */, node, parenthesizerRule); + } + function emitJsxAttributeValue(node) { + pipelineEmit(isStringLiteral(node) ? 6 /* JsxAttributeValue */ : 4 /* Unspecified */, node); + } + function beforeEmitNode(node) { + if (preserveSourceNewlines && getInternalEmitFlags(node) & 4 /* IgnoreSourceNewlines */) { + preserveSourceNewlines = false; + } + } + function afterEmitNode(savedPreserveSourceNewlines) { + preserveSourceNewlines = savedPreserveSourceNewlines; + } + function pipelineEmit(emitHint, node, parenthesizerRule) { + currentParenthesizerRule = parenthesizerRule; + const pipelinePhase = getPipelinePhase(0 /* Notification */, emitHint, node); + pipelinePhase(emitHint, node); + currentParenthesizerRule = void 0; + } + function shouldEmitComments(node) { + return !commentsDisabled && !isSourceFile(node); + } + function shouldEmitSourceMaps(node) { + return !sourceMapsDisabled && !isSourceFile(node) && !isInJsonFile(node); + } + function getPipelinePhase(phase, emitHint, node) { + switch (phase) { + case 0 /* Notification */: + if (onEmitNode !== noEmitNotification && (!isEmitNotificationEnabled || isEmitNotificationEnabled(node))) { + return pipelineEmitWithNotification; + } + // falls through + case 1 /* Substitution */: + if (substituteNode !== noEmitSubstitution && (lastSubstitution = substituteNode(emitHint, node) || node) !== node) { + if (currentParenthesizerRule) { + lastSubstitution = currentParenthesizerRule(lastSubstitution); + } + return pipelineEmitWithSubstitution; + } + // falls through + case 2 /* Comments */: + if (shouldEmitComments(node)) { + return pipelineEmitWithComments; + } + // falls through + case 3 /* SourceMaps */: + if (shouldEmitSourceMaps(node)) { + return pipelineEmitWithSourceMaps; + } + // falls through + case 4 /* Emit */: + return pipelineEmitWithHint; + default: + return Debug.assertNever(phase); + } + } + function getNextPipelinePhase(currentPhase, emitHint, node) { + return getPipelinePhase(currentPhase + 1, emitHint, node); + } + function pipelineEmitWithNotification(hint, node) { + const pipelinePhase = getNextPipelinePhase(0 /* Notification */, hint, node); + onEmitNode(hint, node, pipelinePhase); + } + function pipelineEmitWithHint(hint, node) { + onBeforeEmitNode == null ? void 0 : onBeforeEmitNode(node); + if (preserveSourceNewlines) { + const savedPreserveSourceNewlines = preserveSourceNewlines; + beforeEmitNode(node); + pipelineEmitWithHintWorker(hint, node); + afterEmitNode(savedPreserveSourceNewlines); + } else { + pipelineEmitWithHintWorker(hint, node); + } + onAfterEmitNode == null ? void 0 : onAfterEmitNode(node); + currentParenthesizerRule = void 0; + } + function pipelineEmitWithHintWorker(hint, node, allowSnippets = true) { + if (allowSnippets) { + const snippet = getSnippetElement(node); + if (snippet) { + return emitSnippetNode(hint, node, snippet); + } + } + if (hint === 0 /* SourceFile */) return emitSourceFile(cast(node, isSourceFile)); + if (hint === 2 /* IdentifierName */) return emitIdentifier(cast(node, isIdentifier)); + if (hint === 6 /* JsxAttributeValue */) return emitLiteral( + cast(node, isStringLiteral), + /*jsxAttributeEscape*/ + true + ); + if (hint === 3 /* MappedTypeParameter */) return emitMappedTypeParameter(cast(node, isTypeParameterDeclaration)); + if (hint === 7 /* ImportTypeNodeAttributes */) return emitImportTypeNodeAttributes(cast(node, isImportAttributes)); + if (hint === 5 /* EmbeddedStatement */) { + Debug.assertNode(node, isEmptyStatement); + return emitEmptyStatement( + /*isEmbeddedStatement*/ + true + ); + } + if (hint === 4 /* Unspecified */) { + switch (node.kind) { + // Pseudo-literals + case 16 /* TemplateHead */: + case 17 /* TemplateMiddle */: + case 18 /* TemplateTail */: + return emitLiteral( + node, + /*jsxAttributeEscape*/ + false + ); + // Identifiers + case 80 /* Identifier */: + return emitIdentifier(node); + // PrivateIdentifiers + case 81 /* PrivateIdentifier */: + return emitPrivateIdentifier(node); + // Parse tree nodes + // Names + case 167 /* QualifiedName */: + return emitQualifiedName(node); + case 168 /* ComputedPropertyName */: + return emitComputedPropertyName(node); + // Signature elements + case 169 /* TypeParameter */: + return emitTypeParameter(node); + case 170 /* Parameter */: + return emitParameter(node); + case 171 /* Decorator */: + return emitDecorator(node); + // Type members + case 172 /* PropertySignature */: + return emitPropertySignature(node); + case 173 /* PropertyDeclaration */: + return emitPropertyDeclaration(node); + case 174 /* MethodSignature */: + return emitMethodSignature(node); + case 175 /* MethodDeclaration */: + return emitMethodDeclaration(node); + case 176 /* ClassStaticBlockDeclaration */: + return emitClassStaticBlockDeclaration(node); + case 177 /* Constructor */: + return emitConstructor(node); + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return emitAccessorDeclaration(node); + case 180 /* CallSignature */: + return emitCallSignature(node); + case 181 /* ConstructSignature */: + return emitConstructSignature(node); + case 182 /* IndexSignature */: + return emitIndexSignature(node); + // Types + case 183 /* TypePredicate */: + return emitTypePredicate(node); + case 184 /* TypeReference */: + return emitTypeReference(node); + case 185 /* FunctionType */: + return emitFunctionType(node); + case 186 /* ConstructorType */: + return emitConstructorType(node); + case 187 /* TypeQuery */: + return emitTypeQuery(node); + case 188 /* TypeLiteral */: + return emitTypeLiteral(node); + case 189 /* ArrayType */: + return emitArrayType(node); + case 190 /* TupleType */: + return emitTupleType(node); + case 191 /* OptionalType */: + return emitOptionalType(node); + // SyntaxKind.RestType is handled below + case 193 /* UnionType */: + return emitUnionType(node); + case 194 /* IntersectionType */: + return emitIntersectionType(node); + case 195 /* ConditionalType */: + return emitConditionalType(node); + case 196 /* InferType */: + return emitInferType(node); + case 197 /* ParenthesizedType */: + return emitParenthesizedType(node); + case 234 /* ExpressionWithTypeArguments */: + return emitExpressionWithTypeArguments(node); + case 198 /* ThisType */: + return emitThisType(); + case 199 /* TypeOperator */: + return emitTypeOperator(node); + case 200 /* IndexedAccessType */: + return emitIndexedAccessType(node); + case 201 /* MappedType */: + return emitMappedType(node); + case 202 /* LiteralType */: + return emitLiteralType(node); + case 203 /* NamedTupleMember */: + return emitNamedTupleMember(node); + case 204 /* TemplateLiteralType */: + return emitTemplateType(node); + case 205 /* TemplateLiteralTypeSpan */: + return emitTemplateTypeSpan(node); + case 206 /* ImportType */: + return emitImportTypeNode(node); + // Binding patterns + case 207 /* ObjectBindingPattern */: + return emitObjectBindingPattern(node); + case 208 /* ArrayBindingPattern */: + return emitArrayBindingPattern(node); + case 209 /* BindingElement */: + return emitBindingElement(node); + // Misc + case 240 /* TemplateSpan */: + return emitTemplateSpan(node); + case 241 /* SemicolonClassElement */: + return emitSemicolonClassElement(); + // Statements + case 242 /* Block */: + return emitBlock(node); + case 244 /* VariableStatement */: + return emitVariableStatement(node); + case 243 /* EmptyStatement */: + return emitEmptyStatement( + /*isEmbeddedStatement*/ + false + ); + case 245 /* ExpressionStatement */: + return emitExpressionStatement(node); + case 246 /* IfStatement */: + return emitIfStatement(node); + case 247 /* DoStatement */: + return emitDoStatement(node); + case 248 /* WhileStatement */: + return emitWhileStatement(node); + case 249 /* ForStatement */: + return emitForStatement(node); + case 250 /* ForInStatement */: + return emitForInStatement(node); + case 251 /* ForOfStatement */: + return emitForOfStatement(node); + case 252 /* ContinueStatement */: + return emitContinueStatement(node); + case 253 /* BreakStatement */: + return emitBreakStatement(node); + case 254 /* ReturnStatement */: + return emitReturnStatement(node); + case 255 /* WithStatement */: + return emitWithStatement(node); + case 256 /* SwitchStatement */: + return emitSwitchStatement(node); + case 257 /* LabeledStatement */: + return emitLabeledStatement(node); + case 258 /* ThrowStatement */: + return emitThrowStatement(node); + case 259 /* TryStatement */: + return emitTryStatement(node); + case 260 /* DebuggerStatement */: + return emitDebuggerStatement(node); + // Declarations + case 261 /* VariableDeclaration */: + return emitVariableDeclaration(node); + case 262 /* VariableDeclarationList */: + return emitVariableDeclarationList(node); + case 263 /* FunctionDeclaration */: + return emitFunctionDeclaration(node); + case 264 /* ClassDeclaration */: + return emitClassDeclaration(node); + case 265 /* InterfaceDeclaration */: + return emitInterfaceDeclaration(node); + case 266 /* TypeAliasDeclaration */: + return emitTypeAliasDeclaration(node); + case 267 /* EnumDeclaration */: + return emitEnumDeclaration(node); + case 268 /* ModuleDeclaration */: + return emitModuleDeclaration(node); + case 269 /* ModuleBlock */: + return emitModuleBlock(node); + case 270 /* CaseBlock */: + return emitCaseBlock(node); + case 271 /* NamespaceExportDeclaration */: + return emitNamespaceExportDeclaration(node); + case 272 /* ImportEqualsDeclaration */: + return emitImportEqualsDeclaration(node); + case 273 /* ImportDeclaration */: + return emitImportDeclaration(node); + case 274 /* ImportClause */: + return emitImportClause(node); + case 275 /* NamespaceImport */: + return emitNamespaceImport(node); + case 281 /* NamespaceExport */: + return emitNamespaceExport(node); + case 276 /* NamedImports */: + return emitNamedImports(node); + case 277 /* ImportSpecifier */: + return emitImportSpecifier(node); + case 278 /* ExportAssignment */: + return emitExportAssignment(node); + case 279 /* ExportDeclaration */: + return emitExportDeclaration(node); + case 280 /* NamedExports */: + return emitNamedExports(node); + case 282 /* ExportSpecifier */: + return emitExportSpecifier(node); + case 301 /* ImportAttributes */: + return emitImportAttributes(node); + case 302 /* ImportAttribute */: + return emitImportAttribute(node); + case 283 /* MissingDeclaration */: + return; + // Module references + case 284 /* ExternalModuleReference */: + return emitExternalModuleReference(node); + // JSX (non-expression) + case 12 /* JsxText */: + return emitJsxText(node); + case 287 /* JsxOpeningElement */: + case 290 /* JsxOpeningFragment */: + return emitJsxOpeningElementOrFragment(node); + case 288 /* JsxClosingElement */: + case 291 /* JsxClosingFragment */: + return emitJsxClosingElementOrFragment(node); + case 292 /* JsxAttribute */: + return emitJsxAttribute(node); + case 293 /* JsxAttributes */: + return emitJsxAttributes(node); + case 294 /* JsxSpreadAttribute */: + return emitJsxSpreadAttribute(node); + case 295 /* JsxExpression */: + return emitJsxExpression(node); + case 296 /* JsxNamespacedName */: + return emitJsxNamespacedName(node); + // Clauses + case 297 /* CaseClause */: + return emitCaseClause(node); + case 298 /* DefaultClause */: + return emitDefaultClause(node); + case 299 /* HeritageClause */: + return emitHeritageClause(node); + case 300 /* CatchClause */: + return emitCatchClause(node); + // Property assignments + case 304 /* PropertyAssignment */: + return emitPropertyAssignment(node); + case 305 /* ShorthandPropertyAssignment */: + return emitShorthandPropertyAssignment(node); + case 306 /* SpreadAssignment */: + return emitSpreadAssignment(node); + // Enum + case 307 /* EnumMember */: + return emitEnumMember(node); + // Top-level nodes + case 308 /* SourceFile */: + return emitSourceFile(node); + case 309 /* Bundle */: + return Debug.fail("Bundles should be printed using printBundle"); + // JSDoc nodes (only used in codefixes currently) + case 310 /* JSDocTypeExpression */: + return emitJSDocTypeExpression(node); + case 311 /* JSDocNameReference */: + return emitJSDocNameReference(node); + case 313 /* JSDocAllType */: + return writePunctuation("*"); + case 314 /* JSDocUnknownType */: + return writePunctuation("?"); + case 315 /* JSDocNullableType */: + return emitJSDocNullableType(node); + case 316 /* JSDocNonNullableType */: + return emitJSDocNonNullableType(node); + case 317 /* JSDocOptionalType */: + return emitJSDocOptionalType(node); + case 318 /* JSDocFunctionType */: + return emitJSDocFunctionType(node); + case 192 /* RestType */: + case 319 /* JSDocVariadicType */: + return emitRestOrJSDocVariadicType(node); + case 320 /* JSDocNamepathType */: + return; + case 321 /* JSDoc */: + return emitJSDoc(node); + case 323 /* JSDocTypeLiteral */: + return emitJSDocTypeLiteral(node); + case 324 /* JSDocSignature */: + return emitJSDocSignature(node); + case 328 /* JSDocTag */: + case 333 /* JSDocClassTag */: + case 338 /* JSDocOverrideTag */: + return emitJSDocSimpleTag(node); + case 329 /* JSDocAugmentsTag */: + case 330 /* JSDocImplementsTag */: + return emitJSDocHeritageTag(node); + case 331 /* JSDocAuthorTag */: + case 332 /* JSDocDeprecatedTag */: + return; + // SyntaxKind.JSDocClassTag (see JSDocTag, above) + case 334 /* JSDocPublicTag */: + case 335 /* JSDocPrivateTag */: + case 336 /* JSDocProtectedTag */: + case 337 /* JSDocReadonlyTag */: + return; + case 339 /* JSDocCallbackTag */: + return emitJSDocCallbackTag(node); + case 340 /* JSDocOverloadTag */: + return emitJSDocOverloadTag(node); + // SyntaxKind.JSDocEnumTag (see below) + case 342 /* JSDocParameterTag */: + case 349 /* JSDocPropertyTag */: + return emitJSDocPropertyLikeTag(node); + case 341 /* JSDocEnumTag */: + case 343 /* JSDocReturnTag */: + case 344 /* JSDocThisTag */: + case 345 /* JSDocTypeTag */: + case 350 /* JSDocThrowsTag */: + case 351 /* JSDocSatisfiesTag */: + return emitJSDocSimpleTypedTag(node); + case 346 /* JSDocTemplateTag */: + return emitJSDocTemplateTag(node); + case 347 /* JSDocTypedefTag */: + return emitJSDocTypedefTag(node); + case 348 /* JSDocSeeTag */: + return emitJSDocSeeTag(node); + case 352 /* JSDocImportTag */: + return emitJSDocImportTag(node); + // SyntaxKind.JSDocPropertyTag (see JSDocParameterTag, above) + // Transformation nodes + case 354 /* NotEmittedStatement */: + case 355 /* NotEmittedTypeElement */: + return; + } + if (isExpression(node)) { + hint = 1 /* Expression */; + if (substituteNode !== noEmitSubstitution) { + const substitute = substituteNode(hint, node) || node; + if (substitute !== node) { + node = substitute; + if (currentParenthesizerRule) { + node = currentParenthesizerRule(node); + } + } + } + } + } + if (hint === 1 /* Expression */) { + switch (node.kind) { + // Literals + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + return emitNumericOrBigIntLiteral(node); + case 11 /* StringLiteral */: + case 14 /* RegularExpressionLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + return emitLiteral( + node, + /*jsxAttributeEscape*/ + false + ); + // Identifiers + case 80 /* Identifier */: + return emitIdentifier(node); + case 81 /* PrivateIdentifier */: + return emitPrivateIdentifier(node); + // Expressions + case 210 /* ArrayLiteralExpression */: + return emitArrayLiteralExpression(node); + case 211 /* ObjectLiteralExpression */: + return emitObjectLiteralExpression(node); + case 212 /* PropertyAccessExpression */: + return emitPropertyAccessExpression(node); + case 213 /* ElementAccessExpression */: + return emitElementAccessExpression(node); + case 214 /* CallExpression */: + return emitCallExpression(node); + case 215 /* NewExpression */: + return emitNewExpression(node); + case 216 /* TaggedTemplateExpression */: + return emitTaggedTemplateExpression(node); + case 217 /* TypeAssertionExpression */: + return emitTypeAssertionExpression(node); + case 218 /* ParenthesizedExpression */: + return emitParenthesizedExpression(node); + case 219 /* FunctionExpression */: + return emitFunctionExpression(node); + case 220 /* ArrowFunction */: + return emitArrowFunction(node); + case 221 /* DeleteExpression */: + return emitDeleteExpression(node); + case 222 /* TypeOfExpression */: + return emitTypeOfExpression(node); + case 223 /* VoidExpression */: + return emitVoidExpression(node); + case 224 /* AwaitExpression */: + return emitAwaitExpression(node); + case 225 /* PrefixUnaryExpression */: + return emitPrefixUnaryExpression(node); + case 226 /* PostfixUnaryExpression */: + return emitPostfixUnaryExpression(node); + case 227 /* BinaryExpression */: + return emitBinaryExpression(node); + case 228 /* ConditionalExpression */: + return emitConditionalExpression(node); + case 229 /* TemplateExpression */: + return emitTemplateExpression(node); + case 230 /* YieldExpression */: + return emitYieldExpression(node); + case 231 /* SpreadElement */: + return emitSpreadElement(node); + case 232 /* ClassExpression */: + return emitClassExpression(node); + case 233 /* OmittedExpression */: + return; + case 235 /* AsExpression */: + return emitAsExpression(node); + case 236 /* NonNullExpression */: + return emitNonNullExpression(node); + case 234 /* ExpressionWithTypeArguments */: + return emitExpressionWithTypeArguments(node); + case 239 /* SatisfiesExpression */: + return emitSatisfiesExpression(node); + case 237 /* MetaProperty */: + return emitMetaProperty(node); + case 238 /* SyntheticExpression */: + return Debug.fail("SyntheticExpression should never be printed."); + case 283 /* MissingDeclaration */: + return; + // JSX + case 285 /* JsxElement */: + return emitJsxElement(node); + case 286 /* JsxSelfClosingElement */: + return emitJsxSelfClosingElement(node); + case 289 /* JsxFragment */: + return emitJsxFragment(node); + // Synthesized list + case 353 /* SyntaxList */: + return Debug.fail("SyntaxList should not be printed"); + // Transformation nodes + case 354 /* NotEmittedStatement */: + return; + case 356 /* PartiallyEmittedExpression */: + return emitPartiallyEmittedExpression(node); + case 357 /* CommaListExpression */: + return emitCommaList(node); + case 358 /* SyntheticReferenceExpression */: + return Debug.fail("SyntheticReferenceExpression should not be printed"); + } + } + if (isKeyword(node.kind)) return writeTokenNode(node, writeKeyword); + if (isTokenKind(node.kind)) return writeTokenNode(node, writePunctuation); + Debug.fail(`Unhandled SyntaxKind: ${Debug.formatSyntaxKind(node.kind)}.`); + } + function emitMappedTypeParameter(node) { + emit(node.name); + writeSpace(); + writeKeyword("in"); + writeSpace(); + emit(node.constraint); + } + function pipelineEmitWithSubstitution(hint, node) { + const pipelinePhase = getNextPipelinePhase(1 /* Substitution */, hint, node); + Debug.assertIsDefined(lastSubstitution); + node = lastSubstitution; + lastSubstitution = void 0; + pipelinePhase(hint, node); + } + function emitHelpers(node) { + let helpersEmitted = false; + const bundle = node.kind === 309 /* Bundle */ ? node : void 0; + if (bundle && moduleKind === 0 /* None */) { + return; + } + const numNodes = bundle ? bundle.sourceFiles.length : 1; + for (let i = 0; i < numNodes; i++) { + const currentNode = bundle ? bundle.sourceFiles[i] : node; + const sourceFile = isSourceFile(currentNode) ? currentNode : currentSourceFile; + const shouldSkip = printerOptions.noEmitHelpers || !!sourceFile && hasRecordedExternalHelpers(sourceFile); + const shouldBundle = isSourceFile(currentNode) && !isOwnFileEmit; + const helpers = getSortedEmitHelpers(currentNode); + if (helpers) { + for (const helper of helpers) { + if (!helper.scoped) { + if (shouldSkip) continue; + if (shouldBundle) { + if (bundledHelpers.get(helper.name)) { + continue; + } + bundledHelpers.set(helper.name, true); + } + } else if (bundle) { + continue; + } + if (typeof helper.text === "string") { + writeLines(helper.text); + } else { + writeLines(helper.text(makeFileLevelOptimisticUniqueName)); + } + helpersEmitted = true; + } + } + } + return helpersEmitted; + } + function getSortedEmitHelpers(node) { + const helpers = getEmitHelpers(node); + return helpers && toSorted(helpers, compareEmitHelpers); + } + function emitNumericOrBigIntLiteral(node) { + emitLiteral( + node, + /*jsxAttributeEscape*/ + false + ); + } + function emitLiteral(node, jsxAttributeEscape) { + const text = getLiteralTextOfNode( + node, + /*sourceFile*/ + void 0, + printerOptions.neverAsciiEscape, + jsxAttributeEscape + ); + if ((printerOptions.sourceMap || printerOptions.inlineSourceMap) && (node.kind === 11 /* StringLiteral */ || isTemplateLiteralKind(node.kind))) { + writeLiteral(text); + } else { + writeStringLiteral(text); + } + } + function emitSnippetNode(hint, node, snippet) { + switch (snippet.kind) { + case 1 /* Placeholder */: + emitPlaceholder(hint, node, snippet); + break; + case 0 /* TabStop */: + emitTabStop(hint, node, snippet); + break; + } + } + function emitPlaceholder(hint, node, snippet) { + nonEscapingWrite(`\${${snippet.order}:`); + pipelineEmitWithHintWorker( + hint, + node, + /*allowSnippets*/ + false + ); + nonEscapingWrite(`}`); + } + function emitTabStop(hint, node, snippet) { + Debug.assert(node.kind === 243 /* EmptyStatement */, `A tab stop cannot be attached to a node of kind ${Debug.formatSyntaxKind(node.kind)}.`); + Debug.assert(hint !== 5 /* EmbeddedStatement */, `A tab stop cannot be attached to an embedded statement.`); + nonEscapingWrite(`$${snippet.order}`); + } + function emitIdentifier(node) { + const writeText = node.symbol ? writeSymbol : write; + writeText(getTextOfNode2( + node, + /*includeTrivia*/ + false + ), node.symbol); + emitList(node, getIdentifierTypeArguments(node), 53776 /* TypeParameters */); + } + function emitPrivateIdentifier(node) { + write(getTextOfNode2( + node, + /*includeTrivia*/ + false + )); + } + function emitQualifiedName(node) { + emitEntityName(node.left); + writePunctuation("."); + emit(node.right); + } + function emitEntityName(node) { + if (node.kind === 80 /* Identifier */) { + emitExpression(node); + } else { + emit(node); + } + } + function emitComputedPropertyName(node) { + writePunctuation("["); + emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfComputedPropertyName); + writePunctuation("]"); + } + function emitTypeParameter(node) { + emitModifierList(node, node.modifiers); + emit(node.name); + if (node.constraint) { + writeSpace(); + writeKeyword("extends"); + writeSpace(); + emit(node.constraint); + } + if (node.default) { + writeSpace(); + writeOperator("="); + writeSpace(); + emit(node.default); + } + } + function emitParameter(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + true + ); + emit(node.dotDotDotToken); + emitNodeWithWriter(node.name, writeParameter); + emit(node.questionToken); + if (node.parent && node.parent.kind === 318 /* JSDocFunctionType */ && !node.name) { + emit(node.type); + } else { + emitTypeAnnotation(node.type); + } + emitInitializer(node.initializer, node.type ? node.type.end : node.questionToken ? node.questionToken.end : node.name ? node.name.end : node.modifiers ? node.modifiers.end : node.pos, node, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitDecorator(decorator) { + writePunctuation("@"); + emitExpression(decorator.expression, parenthesizer.parenthesizeLeftSideOfAccess); + } + function emitPropertySignature(node) { + emitModifierList(node, node.modifiers); + emitNodeWithWriter(node.name, writeProperty); + emit(node.questionToken); + emitTypeAnnotation(node.type); + writeTrailingSemicolon(); + } + function emitPropertyDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + true + ); + emit(node.name); + emit(node.questionToken); + emit(node.exclamationToken); + emitTypeAnnotation(node.type); + emitInitializer(node.initializer, node.type ? node.type.end : node.questionToken ? node.questionToken.end : node.name.end, node); + writeTrailingSemicolon(); + } + function emitMethodSignature(node) { + emitModifierList(node, node.modifiers); + emit(node.name); + emit(node.questionToken); + emitSignatureAndBody(node, emitSignatureHead, emitEmptyFunctionBody); + } + function emitMethodDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + true + ); + emit(node.asteriskToken); + emit(node.name); + emit(node.questionToken); + emitSignatureAndBody(node, emitSignatureHead, emitFunctionBody); + } + function emitClassStaticBlockDeclaration(node) { + writeKeyword("static"); + pushNameGenerationScope(node); + emitBlockFunctionBody(node.body); + popNameGenerationScope(node); + } + function emitConstructor(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + writeKeyword("constructor"); + emitSignatureAndBody(node, emitSignatureHead, emitFunctionBody); + } + function emitAccessorDeclaration(node) { + const pos = emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + true + ); + const token = node.kind === 178 /* GetAccessor */ ? 139 /* GetKeyword */ : 153 /* SetKeyword */; + emitTokenWithComment(token, pos, writeKeyword, node); + writeSpace(); + emit(node.name); + emitSignatureAndBody(node, emitSignatureHead, emitFunctionBody); + } + function emitCallSignature(node) { + emitSignatureAndBody(node, emitSignatureHead, emitEmptyFunctionBody); + } + function emitConstructSignature(node) { + writeKeyword("new"); + writeSpace(); + emitSignatureAndBody(node, emitSignatureHead, emitEmptyFunctionBody); + } + function emitIndexSignature(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + emitParametersForIndexSignature(node, node.parameters); + emitTypeAnnotation(node.type); + writeTrailingSemicolon(); + } + function emitTemplateTypeSpan(node) { + emit(node.type); + emit(node.literal); + } + function emitSemicolonClassElement() { + writeTrailingSemicolon(); + } + function emitTypePredicate(node) { + if (node.assertsModifier) { + emit(node.assertsModifier); + writeSpace(); + } + emit(node.parameterName); + if (node.type) { + writeSpace(); + writeKeyword("is"); + writeSpace(); + emit(node.type); + } + } + function emitTypeReference(node) { + emit(node.typeName); + emitTypeArguments(node, node.typeArguments); + } + function emitFunctionType(node) { + emitSignatureAndBody(node, emitFunctionTypeHead, emitFunctionTypeBody); + } + function emitFunctionTypeHead(node) { + emitTypeParameters(node, node.typeParameters); + emitParametersForArrow(node, node.parameters); + writeSpace(); + writePunctuation("=>"); + } + function emitFunctionTypeBody(node) { + writeSpace(); + emit(node.type); + } + function emitJSDocFunctionType(node) { + writeKeyword("function"); + emitParameters(node, node.parameters); + writePunctuation(":"); + emit(node.type); + } + function emitJSDocNullableType(node) { + writePunctuation("?"); + emit(node.type); + } + function emitJSDocNonNullableType(node) { + writePunctuation("!"); + emit(node.type); + } + function emitJSDocOptionalType(node) { + emit(node.type); + writePunctuation("="); + } + function emitConstructorType(node) { + emitModifierList(node, node.modifiers); + writeKeyword("new"); + writeSpace(); + emitSignatureAndBody(node, emitFunctionTypeHead, emitFunctionTypeBody); + } + function emitTypeQuery(node) { + writeKeyword("typeof"); + writeSpace(); + emit(node.exprName); + emitTypeArguments(node, node.typeArguments); + } + function emitTypeLiteral(node) { + pushNameGenerationScope(node); + forEach(node.members, generateMemberNames); + writePunctuation("{"); + const flags = getEmitFlags(node) & 1 /* SingleLine */ ? 768 /* SingleLineTypeLiteralMembers */ : 32897 /* MultiLineTypeLiteralMembers */; + emitList(node, node.members, flags | 524288 /* NoSpaceIfEmpty */); + writePunctuation("}"); + popNameGenerationScope(node); + } + function emitArrayType(node) { + emit(node.elementType, parenthesizer.parenthesizeNonArrayTypeOfPostfixType); + writePunctuation("["); + writePunctuation("]"); + } + function emitRestOrJSDocVariadicType(node) { + writePunctuation("..."); + emit(node.type); + } + function emitTupleType(node) { + emitTokenWithComment(23 /* OpenBracketToken */, node.pos, writePunctuation, node); + const flags = getEmitFlags(node) & 1 /* SingleLine */ ? 528 /* SingleLineTupleTypeElements */ : 657 /* MultiLineTupleTypeElements */; + emitList(node, node.elements, flags | 524288 /* NoSpaceIfEmpty */, parenthesizer.parenthesizeElementTypeOfTupleType); + emitTokenWithComment(24 /* CloseBracketToken */, node.elements.end, writePunctuation, node); + } + function emitNamedTupleMember(node) { + emit(node.dotDotDotToken); + emit(node.name); + emit(node.questionToken); + emitTokenWithComment(59 /* ColonToken */, node.name.end, writePunctuation, node); + writeSpace(); + emit(node.type); + } + function emitOptionalType(node) { + emit(node.type, parenthesizer.parenthesizeTypeOfOptionalType); + writePunctuation("?"); + } + function emitUnionType(node) { + emitList(node, node.types, 516 /* UnionTypeConstituents */, parenthesizer.parenthesizeConstituentTypeOfUnionType); + } + function emitIntersectionType(node) { + emitList(node, node.types, 520 /* IntersectionTypeConstituents */, parenthesizer.parenthesizeConstituentTypeOfIntersectionType); + } + function emitConditionalType(node) { + emit(node.checkType, parenthesizer.parenthesizeCheckTypeOfConditionalType); + writeSpace(); + writeKeyword("extends"); + writeSpace(); + emit(node.extendsType, parenthesizer.parenthesizeExtendsTypeOfConditionalType); + writeSpace(); + writePunctuation("?"); + writeSpace(); + emit(node.trueType); + writeSpace(); + writePunctuation(":"); + writeSpace(); + emit(node.falseType); + } + function emitInferType(node) { + writeKeyword("infer"); + writeSpace(); + emit(node.typeParameter); + } + function emitParenthesizedType(node) { + writePunctuation("("); + emit(node.type); + writePunctuation(")"); + } + function emitThisType() { + writeKeyword("this"); + } + function emitTypeOperator(node) { + writeTokenText(node.operator, writeKeyword); + writeSpace(); + const parenthesizerRule = node.operator === 148 /* ReadonlyKeyword */ ? parenthesizer.parenthesizeOperandOfReadonlyTypeOperator : parenthesizer.parenthesizeOperandOfTypeOperator; + emit(node.type, parenthesizerRule); + } + function emitIndexedAccessType(node) { + emit(node.objectType, parenthesizer.parenthesizeNonArrayTypeOfPostfixType); + writePunctuation("["); + emit(node.indexType); + writePunctuation("]"); + } + function emitMappedType(node) { + const emitFlags = getEmitFlags(node); + writePunctuation("{"); + if (emitFlags & 1 /* SingleLine */) { + writeSpace(); + } else { + writeLine(); + increaseIndent(); + } + if (node.readonlyToken) { + emit(node.readonlyToken); + if (node.readonlyToken.kind !== 148 /* ReadonlyKeyword */) { + writeKeyword("readonly"); + } + writeSpace(); + } + writePunctuation("["); + pipelineEmit(3 /* MappedTypeParameter */, node.typeParameter); + if (node.nameType) { + writeSpace(); + writeKeyword("as"); + writeSpace(); + emit(node.nameType); + } + writePunctuation("]"); + if (node.questionToken) { + emit(node.questionToken); + if (node.questionToken.kind !== 58 /* QuestionToken */) { + writePunctuation("?"); + } + } + writePunctuation(":"); + writeSpace(); + emit(node.type); + writeTrailingSemicolon(); + if (emitFlags & 1 /* SingleLine */) { + writeSpace(); + } else { + writeLine(); + decreaseIndent(); + } + emitList(node, node.members, 2 /* PreserveLines */); + writePunctuation("}"); + } + function emitLiteralType(node) { + emitExpression(node.literal); + } + function emitTemplateType(node) { + emit(node.head); + emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */); + } + function emitImportTypeNode(node) { + if (node.isTypeOf) { + writeKeyword("typeof"); + writeSpace(); + } + writeKeyword("import"); + writePunctuation("("); + emit(node.argument); + if (node.attributes) { + writePunctuation(","); + writeSpace(); + pipelineEmit(7 /* ImportTypeNodeAttributes */, node.attributes); + } + writePunctuation(")"); + if (node.qualifier) { + writePunctuation("."); + emit(node.qualifier); + } + emitTypeArguments(node, node.typeArguments); + } + function emitObjectBindingPattern(node) { + writePunctuation("{"); + emitList(node, node.elements, 525136 /* ObjectBindingPatternElements */); + writePunctuation("}"); + } + function emitArrayBindingPattern(node) { + writePunctuation("["); + emitList(node, node.elements, 524880 /* ArrayBindingPatternElements */); + writePunctuation("]"); + } + function emitBindingElement(node) { + emit(node.dotDotDotToken); + if (node.propertyName) { + emit(node.propertyName); + writePunctuation(":"); + writeSpace(); + } + emit(node.name); + emitInitializer(node.initializer, node.name.end, node, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitArrayLiteralExpression(node) { + const elements = node.elements; + const preferNewLine = node.multiLine ? 65536 /* PreferNewLine */ : 0 /* None */; + emitExpressionList(node, elements, 8914 /* ArrayLiteralExpressionElements */ | preferNewLine, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitObjectLiteralExpression(node) { + pushNameGenerationScope(node); + forEach(node.properties, generateMemberNames); + const indentedFlag = getEmitFlags(node) & 131072 /* Indented */; + if (indentedFlag) { + increaseIndent(); + } + const preferNewLine = node.multiLine ? 65536 /* PreferNewLine */ : 0 /* None */; + const allowTrailingComma = currentSourceFile && currentSourceFile.languageVersion >= 1 /* ES5 */ && !isJsonSourceFile(currentSourceFile) ? 64 /* AllowTrailingComma */ : 0 /* None */; + emitList(node, node.properties, 526226 /* ObjectLiteralExpressionProperties */ | allowTrailingComma | preferNewLine); + if (indentedFlag) { + decreaseIndent(); + } + popNameGenerationScope(node); + } + function emitPropertyAccessExpression(node) { + emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess); + const token = node.questionDotToken || setTextRangePosEnd(factory.createToken(25 /* DotToken */), node.expression.end, node.name.pos); + const linesBeforeDot = getLinesBetweenNodes(node, node.expression, token); + const linesAfterDot = getLinesBetweenNodes(node, token, node.name); + writeLinesAndIndent( + linesBeforeDot, + /*writeSpaceIfNotIndenting*/ + false + ); + const shouldEmitDotDot = token.kind !== 29 /* QuestionDotToken */ && mayNeedDotDotForPropertyAccess(node.expression) && !writer.hasTrailingComment() && !writer.hasTrailingWhitespace(); + if (shouldEmitDotDot) { + writePunctuation("."); + } + if (node.questionDotToken) { + emit(token); + } else { + emitTokenWithComment(token.kind, node.expression.end, writePunctuation, node); + } + writeLinesAndIndent( + linesAfterDot, + /*writeSpaceIfNotIndenting*/ + false + ); + emit(node.name); + decreaseIndentIf(linesBeforeDot, linesAfterDot); + } + function mayNeedDotDotForPropertyAccess(expression) { + expression = skipPartiallyEmittedExpressions(expression); + if (isNumericLiteral(expression)) { + const text = getLiteralTextOfNode( + expression, + /*sourceFile*/ + void 0, + /*neverAsciiEscape*/ + true, + /*jsxAttributeEscape*/ + false + ); + return !(expression.numericLiteralFlags & 448 /* WithSpecifier */) && !text.includes(tokenToString(25 /* DotToken */)) && !text.includes(String.fromCharCode(69 /* E */)) && !text.includes(String.fromCharCode(101 /* e */)); + } else if (isAccessExpression(expression)) { + const constantValue = getConstantValue(expression); + return typeof constantValue === "number" && isFinite(constantValue) && constantValue >= 0 && Math.floor(constantValue) === constantValue; + } + } + function emitElementAccessExpression(node) { + emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess); + emit(node.questionDotToken); + emitTokenWithComment(23 /* OpenBracketToken */, node.expression.end, writePunctuation, node); + emitExpression(node.argumentExpression); + emitTokenWithComment(24 /* CloseBracketToken */, node.argumentExpression.end, writePunctuation, node); + } + function emitCallExpression(node) { + const indirectCall = getInternalEmitFlags(node) & 16 /* IndirectCall */; + if (indirectCall) { + writePunctuation("("); + writeLiteral("0"); + writePunctuation(","); + writeSpace(); + } + emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess); + if (indirectCall) { + writePunctuation(")"); + } + emit(node.questionDotToken); + emitTypeArguments(node, node.typeArguments); + emitExpressionList(node, node.arguments, 2576 /* CallExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitNewExpression(node) { + emitTokenWithComment(105 /* NewKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfNew); + emitTypeArguments(node, node.typeArguments); + emitExpressionList(node, node.arguments, 18960 /* NewExpressionArguments */, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitTaggedTemplateExpression(node) { + const indirectCall = getInternalEmitFlags(node) & 16 /* IndirectCall */; + if (indirectCall) { + writePunctuation("("); + writeLiteral("0"); + writePunctuation(","); + writeSpace(); + } + emitExpression(node.tag, parenthesizer.parenthesizeLeftSideOfAccess); + if (indirectCall) { + writePunctuation(")"); + } + emitTypeArguments(node, node.typeArguments); + writeSpace(); + emitExpression(node.template); + } + function emitTypeAssertionExpression(node) { + writePunctuation("<"); + emit(node.type); + writePunctuation(">"); + emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary); + } + function emitParenthesizedExpression(node) { + const openParenPos = emitTokenWithComment(21 /* OpenParenToken */, node.pos, writePunctuation, node); + const indented = writeLineSeparatorsAndIndentBefore(node.expression, node); + emitExpression( + node.expression, + /*parenthesizerRule*/ + void 0 + ); + writeLineSeparatorsAfter(node.expression, node); + decreaseIndentIf(indented); + emitTokenWithComment(22 /* CloseParenToken */, node.expression ? node.expression.end : openParenPos, writePunctuation, node); + } + function emitFunctionExpression(node) { + generateNameIfNeeded(node.name); + emitFunctionDeclarationOrExpression(node); + } + function emitArrowFunction(node) { + emitModifierList(node, node.modifiers); + emitSignatureAndBody(node, emitArrowFunctionHead, emitArrowFunctionBody); + } + function emitArrowFunctionHead(node) { + emitTypeParameters(node, node.typeParameters); + emitParametersForArrow(node, node.parameters); + emitTypeAnnotation(node.type); + writeSpace(); + emit(node.equalsGreaterThanToken); + } + function emitArrowFunctionBody(node) { + if (isBlock(node.body)) { + emitBlockFunctionBody(node.body); + } else { + writeSpace(); + emitExpression(node.body, parenthesizer.parenthesizeConciseBodyOfArrowFunction); + } + } + function emitDeleteExpression(node) { + emitTokenWithComment(91 /* DeleteKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary); + } + function emitTypeOfExpression(node) { + emitTokenWithComment(114 /* TypeOfKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary); + } + function emitVoidExpression(node) { + emitTokenWithComment(116 /* VoidKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary); + } + function emitAwaitExpression(node) { + emitTokenWithComment(135 /* AwaitKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitExpression(node.expression, parenthesizer.parenthesizeOperandOfPrefixUnary); + } + function emitPrefixUnaryExpression(node) { + writeTokenText(node.operator, writeOperator); + if (shouldEmitWhitespaceBeforeOperand(node)) { + writeSpace(); + } + emitExpression(node.operand, parenthesizer.parenthesizeOperandOfPrefixUnary); + } + function shouldEmitWhitespaceBeforeOperand(node) { + const operand = node.operand; + return operand.kind === 225 /* PrefixUnaryExpression */ && (node.operator === 40 /* PlusToken */ && (operand.operator === 40 /* PlusToken */ || operand.operator === 46 /* PlusPlusToken */) || node.operator === 41 /* MinusToken */ && (operand.operator === 41 /* MinusToken */ || operand.operator === 47 /* MinusMinusToken */)); + } + function emitPostfixUnaryExpression(node) { + emitExpression(node.operand, parenthesizer.parenthesizeOperandOfPostfixUnary); + writeTokenText(node.operator, writeOperator); + } + function createEmitBinaryExpression() { + return createBinaryExpressionTrampoline( + onEnter, + onLeft, + onOperator, + onRight, + onExit, + /*foldState*/ + void 0 + ); + function onEnter(node, state) { + if (state) { + state.stackIndex++; + state.preserveSourceNewlinesStack[state.stackIndex] = preserveSourceNewlines; + state.containerPosStack[state.stackIndex] = containerPos; + state.containerEndStack[state.stackIndex] = containerEnd; + state.declarationListContainerEndStack[state.stackIndex] = declarationListContainerEnd; + const emitComments2 = state.shouldEmitCommentsStack[state.stackIndex] = shouldEmitComments(node); + const emitSourceMaps = state.shouldEmitSourceMapsStack[state.stackIndex] = shouldEmitSourceMaps(node); + onBeforeEmitNode == null ? void 0 : onBeforeEmitNode(node); + if (emitComments2) emitCommentsBeforeNode(node); + if (emitSourceMaps) emitSourceMapsBeforeNode(node); + beforeEmitNode(node); + } else { + state = { + stackIndex: 0, + preserveSourceNewlinesStack: [void 0], + containerPosStack: [-1], + containerEndStack: [-1], + declarationListContainerEndStack: [-1], + shouldEmitCommentsStack: [false], + shouldEmitSourceMapsStack: [false] + }; + } + return state; + } + function onLeft(next, _workArea, parent2) { + return maybeEmitExpression(next, parent2, "left"); + } + function onOperator(operatorToken, _state, node) { + const isCommaOperator = operatorToken.kind !== 28 /* CommaToken */; + const linesBeforeOperator = getLinesBetweenNodes(node, node.left, operatorToken); + const linesAfterOperator = getLinesBetweenNodes(node, operatorToken, node.right); + writeLinesAndIndent(linesBeforeOperator, isCommaOperator); + emitLeadingCommentsOfPosition(operatorToken.pos); + writeTokenNode(operatorToken, operatorToken.kind === 103 /* InKeyword */ ? writeKeyword : writeOperator); + emitTrailingCommentsOfPosition( + operatorToken.end, + /*prefixSpace*/ + true + ); + writeLinesAndIndent( + linesAfterOperator, + /*writeSpaceIfNotIndenting*/ + true + ); + } + function onRight(next, _workArea, parent2) { + return maybeEmitExpression(next, parent2, "right"); + } + function onExit(node, state) { + const linesBeforeOperator = getLinesBetweenNodes(node, node.left, node.operatorToken); + const linesAfterOperator = getLinesBetweenNodes(node, node.operatorToken, node.right); + decreaseIndentIf(linesBeforeOperator, linesAfterOperator); + if (state.stackIndex > 0) { + const savedPreserveSourceNewlines = state.preserveSourceNewlinesStack[state.stackIndex]; + const savedContainerPos = state.containerPosStack[state.stackIndex]; + const savedContainerEnd = state.containerEndStack[state.stackIndex]; + const savedDeclarationListContainerEnd = state.declarationListContainerEndStack[state.stackIndex]; + const shouldEmitComments2 = state.shouldEmitCommentsStack[state.stackIndex]; + const shouldEmitSourceMaps2 = state.shouldEmitSourceMapsStack[state.stackIndex]; + afterEmitNode(savedPreserveSourceNewlines); + if (shouldEmitSourceMaps2) emitSourceMapsAfterNode(node); + if (shouldEmitComments2) emitCommentsAfterNode(node, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd); + onAfterEmitNode == null ? void 0 : onAfterEmitNode(node); + state.stackIndex--; + } + } + function maybeEmitExpression(next, parent2, side) { + const parenthesizerRule = side === "left" ? parenthesizer.getParenthesizeLeftSideOfBinaryForOperator(parent2.operatorToken.kind) : parenthesizer.getParenthesizeRightSideOfBinaryForOperator(parent2.operatorToken.kind); + let pipelinePhase = getPipelinePhase(0 /* Notification */, 1 /* Expression */, next); + if (pipelinePhase === pipelineEmitWithSubstitution) { + Debug.assertIsDefined(lastSubstitution); + next = parenthesizerRule(cast(lastSubstitution, isExpression)); + pipelinePhase = getNextPipelinePhase(1 /* Substitution */, 1 /* Expression */, next); + lastSubstitution = void 0; + } + if (pipelinePhase === pipelineEmitWithComments || pipelinePhase === pipelineEmitWithSourceMaps || pipelinePhase === pipelineEmitWithHint) { + if (isBinaryExpression(next)) { + return next; + } + } + currentParenthesizerRule = parenthesizerRule; + pipelinePhase(1 /* Expression */, next); + } + } + function emitConditionalExpression(node) { + const linesBeforeQuestion = getLinesBetweenNodes(node, node.condition, node.questionToken); + const linesAfterQuestion = getLinesBetweenNodes(node, node.questionToken, node.whenTrue); + const linesBeforeColon = getLinesBetweenNodes(node, node.whenTrue, node.colonToken); + const linesAfterColon = getLinesBetweenNodes(node, node.colonToken, node.whenFalse); + emitExpression(node.condition, parenthesizer.parenthesizeConditionOfConditionalExpression); + writeLinesAndIndent( + linesBeforeQuestion, + /*writeSpaceIfNotIndenting*/ + true + ); + emit(node.questionToken); + writeLinesAndIndent( + linesAfterQuestion, + /*writeSpaceIfNotIndenting*/ + true + ); + emitExpression(node.whenTrue, parenthesizer.parenthesizeBranchOfConditionalExpression); + decreaseIndentIf(linesBeforeQuestion, linesAfterQuestion); + writeLinesAndIndent( + linesBeforeColon, + /*writeSpaceIfNotIndenting*/ + true + ); + emit(node.colonToken); + writeLinesAndIndent( + linesAfterColon, + /*writeSpaceIfNotIndenting*/ + true + ); + emitExpression(node.whenFalse, parenthesizer.parenthesizeBranchOfConditionalExpression); + decreaseIndentIf(linesBeforeColon, linesAfterColon); + } + function emitTemplateExpression(node) { + emit(node.head); + emitList(node, node.templateSpans, 262144 /* TemplateExpressionSpans */); + } + function emitYieldExpression(node) { + emitTokenWithComment(127 /* YieldKeyword */, node.pos, writeKeyword, node); + emit(node.asteriskToken); + emitExpressionWithLeadingSpace(node.expression && parenthesizeExpressionForNoAsi(node.expression), parenthesizeExpressionForNoAsiAndDisallowedComma); + } + function emitSpreadElement(node) { + emitTokenWithComment(26 /* DotDotDotToken */, node.pos, writePunctuation, node); + emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitClassExpression(node) { + generateNameIfNeeded(node.name); + emitClassDeclarationOrExpression(node); + } + function emitExpressionWithTypeArguments(node) { + emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess); + emitTypeArguments(node, node.typeArguments); + } + function emitAsExpression(node) { + emitExpression( + node.expression, + /*parenthesizerRule*/ + void 0 + ); + if (node.type) { + writeSpace(); + writeKeyword("as"); + writeSpace(); + emit(node.type); + } + } + function emitNonNullExpression(node) { + emitExpression(node.expression, parenthesizer.parenthesizeLeftSideOfAccess); + writeOperator("!"); + } + function emitSatisfiesExpression(node) { + emitExpression( + node.expression, + /*parenthesizerRule*/ + void 0 + ); + if (node.type) { + writeSpace(); + writeKeyword("satisfies"); + writeSpace(); + emit(node.type); + } + } + function emitMetaProperty(node) { + writeToken(node.keywordToken, node.pos, writePunctuation); + writePunctuation("."); + emit(node.name); + } + function emitTemplateSpan(node) { + emitExpression(node.expression); + emit(node.literal); + } + function emitBlock(node) { + emitBlockStatements( + node, + /*forceSingleLine*/ + !node.multiLine && isEmptyBlock(node) + ); + } + function emitBlockStatements(node, forceSingleLine) { + emitTokenWithComment( + 19 /* OpenBraceToken */, + node.pos, + writePunctuation, + /*contextNode*/ + node + ); + const format = forceSingleLine || getEmitFlags(node) & 1 /* SingleLine */ ? 768 /* SingleLineBlockStatements */ : 129 /* MultiLineBlockStatements */; + emitList(node, node.statements, format); + emitTokenWithComment( + 20 /* CloseBraceToken */, + node.statements.end, + writePunctuation, + /*contextNode*/ + node, + /*indentLeading*/ + !!(format & 1 /* MultiLine */) + ); + } + function emitVariableStatement(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + emit(node.declarationList); + writeTrailingSemicolon(); + } + function emitEmptyStatement(isEmbeddedStatement) { + if (isEmbeddedStatement) { + writePunctuation(";"); + } else { + writeTrailingSemicolon(); + } + } + function emitExpressionStatement(node) { + emitExpression(node.expression, parenthesizer.parenthesizeExpressionOfExpressionStatement); + if (!currentSourceFile || !isJsonSourceFile(currentSourceFile) || nodeIsSynthesized(node.expression)) { + writeTrailingSemicolon(); + } + } + function emitIfStatement(node) { + const openParenPos = emitTokenWithComment(101 /* IfKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitExpression(node.expression); + emitTokenWithComment(22 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitEmbeddedStatement(node, node.thenStatement); + if (node.elseStatement) { + writeLineOrSpace(node, node.thenStatement, node.elseStatement); + emitTokenWithComment(93 /* ElseKeyword */, node.thenStatement.end, writeKeyword, node); + if (node.elseStatement.kind === 246 /* IfStatement */) { + writeSpace(); + emit(node.elseStatement); + } else { + emitEmbeddedStatement(node, node.elseStatement); + } + } + } + function emitWhileClause(node, startPos) { + const openParenPos = emitTokenWithComment(117 /* WhileKeyword */, startPos, writeKeyword, node); + writeSpace(); + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitExpression(node.expression); + emitTokenWithComment(22 /* CloseParenToken */, node.expression.end, writePunctuation, node); + } + function emitDoStatement(node) { + emitTokenWithComment(92 /* DoKeyword */, node.pos, writeKeyword, node); + emitEmbeddedStatement(node, node.statement); + if (isBlock(node.statement) && !preserveSourceNewlines) { + writeSpace(); + } else { + writeLineOrSpace(node, node.statement, node.expression); + } + emitWhileClause(node, node.statement.end); + writeTrailingSemicolon(); + } + function emitWhileStatement(node) { + emitWhileClause(node, node.pos); + emitEmbeddedStatement(node, node.statement); + } + function emitForStatement(node) { + const openParenPos = emitTokenWithComment(99 /* ForKeyword */, node.pos, writeKeyword, node); + writeSpace(); + let pos = emitTokenWithComment( + 21 /* OpenParenToken */, + openParenPos, + writePunctuation, + /*contextNode*/ + node + ); + emitForBinding(node.initializer); + pos = emitTokenWithComment(27 /* SemicolonToken */, node.initializer ? node.initializer.end : pos, writePunctuation, node); + emitExpressionWithLeadingSpace(node.condition); + pos = emitTokenWithComment(27 /* SemicolonToken */, node.condition ? node.condition.end : pos, writePunctuation, node); + emitExpressionWithLeadingSpace(node.incrementor); + emitTokenWithComment(22 /* CloseParenToken */, node.incrementor ? node.incrementor.end : pos, writePunctuation, node); + emitEmbeddedStatement(node, node.statement); + } + function emitForInStatement(node) { + const openParenPos = emitTokenWithComment(99 /* ForKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitForBinding(node.initializer); + writeSpace(); + emitTokenWithComment(103 /* InKeyword */, node.initializer.end, writeKeyword, node); + writeSpace(); + emitExpression(node.expression); + emitTokenWithComment(22 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitEmbeddedStatement(node, node.statement); + } + function emitForOfStatement(node) { + const openParenPos = emitTokenWithComment(99 /* ForKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitWithTrailingSpace(node.awaitModifier); + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitForBinding(node.initializer); + writeSpace(); + emitTokenWithComment(165 /* OfKeyword */, node.initializer.end, writeKeyword, node); + writeSpace(); + emitExpression(node.expression); + emitTokenWithComment(22 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitEmbeddedStatement(node, node.statement); + } + function emitForBinding(node) { + if (node !== void 0) { + if (node.kind === 262 /* VariableDeclarationList */) { + emit(node); + } else { + emitExpression(node); + } + } + } + function emitContinueStatement(node) { + emitTokenWithComment(88 /* ContinueKeyword */, node.pos, writeKeyword, node); + emitWithLeadingSpace(node.label); + writeTrailingSemicolon(); + } + function emitBreakStatement(node) { + emitTokenWithComment(83 /* BreakKeyword */, node.pos, writeKeyword, node); + emitWithLeadingSpace(node.label); + writeTrailingSemicolon(); + } + function emitTokenWithComment(token, pos, writer2, contextNode, indentLeading) { + const node = getParseTreeNode(contextNode); + const isSimilarNode = node && node.kind === contextNode.kind; + const startPos = pos; + if (isSimilarNode && currentSourceFile) { + pos = skipTrivia(currentSourceFile.text, pos); + } + if (isSimilarNode && contextNode.pos !== startPos) { + const needsIndent = indentLeading && currentSourceFile && !positionsAreOnSameLine(startPos, pos, currentSourceFile); + if (needsIndent) { + increaseIndent(); + } + emitLeadingCommentsOfPosition(startPos); + if (needsIndent) { + decreaseIndent(); + } + } + if (!omitBraceSourcePositions && (token === 19 /* OpenBraceToken */ || token === 20 /* CloseBraceToken */)) { + pos = writeToken(token, pos, writer2, contextNode); + } else { + pos = writeTokenText(token, writer2, pos); + } + if (isSimilarNode && contextNode.end !== pos) { + const isJsxExprContext = contextNode.kind === 295 /* JsxExpression */; + emitTrailingCommentsOfPosition( + pos, + /*prefixSpace*/ + !isJsxExprContext, + /*forceNoNewline*/ + isJsxExprContext + ); + } + return pos; + } + function commentWillEmitNewLine(node) { + return node.kind === 2 /* SingleLineCommentTrivia */ || !!node.hasTrailingNewLine; + } + function willEmitLeadingNewLine(node) { + if (!currentSourceFile) return false; + const leadingCommentRanges = getLeadingCommentRanges(currentSourceFile.text, node.pos); + if (leadingCommentRanges) { + const parseNode = getParseTreeNode(node); + if (parseNode && isParenthesizedExpression(parseNode.parent)) { + return true; + } + } + if (some(leadingCommentRanges, commentWillEmitNewLine)) return true; + if (some(getSyntheticLeadingComments(node), commentWillEmitNewLine)) return true; + if (isPartiallyEmittedExpression(node)) { + if (node.pos !== node.expression.pos) { + if (some(getTrailingCommentRanges(currentSourceFile.text, node.expression.pos), commentWillEmitNewLine)) return true; + } + return willEmitLeadingNewLine(node.expression); + } + return false; + } + function parenthesizeExpressionForNoAsi(node) { + if (!commentsDisabled) { + switch (node.kind) { + case 356 /* PartiallyEmittedExpression */: + if (willEmitLeadingNewLine(node)) { + const parseNode = getParseTreeNode(node); + if (parseNode && isParenthesizedExpression(parseNode)) { + const parens = factory.createParenthesizedExpression(node.expression); + setOriginalNode(parens, node); + setTextRange(parens, parseNode); + return parens; + } + return factory.createParenthesizedExpression(node); + } + return factory.updatePartiallyEmittedExpression( + node, + parenthesizeExpressionForNoAsi(node.expression) + ); + case 212 /* PropertyAccessExpression */: + return factory.updatePropertyAccessExpression( + node, + parenthesizeExpressionForNoAsi(node.expression), + node.name + ); + case 213 /* ElementAccessExpression */: + return factory.updateElementAccessExpression( + node, + parenthesizeExpressionForNoAsi(node.expression), + node.argumentExpression + ); + case 214 /* CallExpression */: + return factory.updateCallExpression( + node, + parenthesizeExpressionForNoAsi(node.expression), + node.typeArguments, + node.arguments + ); + case 216 /* TaggedTemplateExpression */: + return factory.updateTaggedTemplateExpression( + node, + parenthesizeExpressionForNoAsi(node.tag), + node.typeArguments, + node.template + ); + case 226 /* PostfixUnaryExpression */: + return factory.updatePostfixUnaryExpression( + node, + parenthesizeExpressionForNoAsi(node.operand) + ); + case 227 /* BinaryExpression */: + return factory.updateBinaryExpression( + node, + parenthesizeExpressionForNoAsi(node.left), + node.operatorToken, + node.right + ); + case 228 /* ConditionalExpression */: + return factory.updateConditionalExpression( + node, + parenthesizeExpressionForNoAsi(node.condition), + node.questionToken, + node.whenTrue, + node.colonToken, + node.whenFalse + ); + case 235 /* AsExpression */: + return factory.updateAsExpression( + node, + parenthesizeExpressionForNoAsi(node.expression), + node.type + ); + case 239 /* SatisfiesExpression */: + return factory.updateSatisfiesExpression( + node, + parenthesizeExpressionForNoAsi(node.expression), + node.type + ); + case 236 /* NonNullExpression */: + return factory.updateNonNullExpression( + node, + parenthesizeExpressionForNoAsi(node.expression) + ); + } + } + return node; + } + function parenthesizeExpressionForNoAsiAndDisallowedComma(node) { + return parenthesizeExpressionForNoAsi(parenthesizer.parenthesizeExpressionForDisallowedComma(node)); + } + function emitReturnStatement(node) { + emitTokenWithComment( + 107 /* ReturnKeyword */, + node.pos, + writeKeyword, + /*contextNode*/ + node + ); + emitExpressionWithLeadingSpace(node.expression && parenthesizeExpressionForNoAsi(node.expression), parenthesizeExpressionForNoAsi); + writeTrailingSemicolon(); + } + function emitWithStatement(node) { + const openParenPos = emitTokenWithComment(118 /* WithKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitExpression(node.expression); + emitTokenWithComment(22 /* CloseParenToken */, node.expression.end, writePunctuation, node); + emitEmbeddedStatement(node, node.statement); + } + function emitSwitchStatement(node) { + const openParenPos = emitTokenWithComment(109 /* SwitchKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emitExpression(node.expression); + emitTokenWithComment(22 /* CloseParenToken */, node.expression.end, writePunctuation, node); + writeSpace(); + emit(node.caseBlock); + } + function emitLabeledStatement(node) { + emit(node.label); + emitTokenWithComment(59 /* ColonToken */, node.label.end, writePunctuation, node); + writeSpace(); + emit(node.statement); + } + function emitThrowStatement(node) { + emitTokenWithComment(111 /* ThrowKeyword */, node.pos, writeKeyword, node); + emitExpressionWithLeadingSpace(parenthesizeExpressionForNoAsi(node.expression), parenthesizeExpressionForNoAsi); + writeTrailingSemicolon(); + } + function emitTryStatement(node) { + emitTokenWithComment(113 /* TryKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emit(node.tryBlock); + if (node.catchClause) { + writeLineOrSpace(node, node.tryBlock, node.catchClause); + emit(node.catchClause); + } + if (node.finallyBlock) { + writeLineOrSpace(node, node.catchClause || node.tryBlock, node.finallyBlock); + emitTokenWithComment(98 /* FinallyKeyword */, (node.catchClause || node.tryBlock).end, writeKeyword, node); + writeSpace(); + emit(node.finallyBlock); + } + } + function emitDebuggerStatement(node) { + writeToken(89 /* DebuggerKeyword */, node.pos, writeKeyword); + writeTrailingSemicolon(); + } + function emitVariableDeclaration(node) { + var _a, _b, _c; + emit(node.name); + emit(node.exclamationToken); + emitTypeAnnotation(node.type); + emitInitializer(node.initializer, ((_a = node.type) == null ? void 0 : _a.end) ?? ((_c = (_b = node.name.emitNode) == null ? void 0 : _b.typeNode) == null ? void 0 : _c.end) ?? node.name.end, node, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitVariableDeclarationList(node) { + if (isVarAwaitUsing(node)) { + writeKeyword("await"); + writeSpace(); + writeKeyword("using"); + } else { + const head = isLet(node) ? "let" : isVarConst(node) ? "const" : isVarUsing(node) ? "using" : "var"; + writeKeyword(head); + } + writeSpace(); + emitList(node, node.declarations, 528 /* VariableDeclarationList */); + } + function emitFunctionDeclaration(node) { + emitFunctionDeclarationOrExpression(node); + } + function emitFunctionDeclarationOrExpression(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + writeKeyword("function"); + emit(node.asteriskToken); + writeSpace(); + emitIdentifierName(node.name); + emitSignatureAndBody(node, emitSignatureHead, emitFunctionBody); + } + function emitSignatureAndBody(node, emitSignatureHead2, emitBody) { + const indentedFlag = getEmitFlags(node) & 131072 /* Indented */; + if (indentedFlag) { + increaseIndent(); + } + pushNameGenerationScope(node); + forEach(node.parameters, generateNames); + emitSignatureHead2(node); + emitBody(node); + popNameGenerationScope(node); + if (indentedFlag) { + decreaseIndent(); + } + } + function emitFunctionBody(node) { + const body = node.body; + if (body) { + emitBlockFunctionBody(body); + } else { + writeTrailingSemicolon(); + } + } + function emitEmptyFunctionBody(_node) { + writeTrailingSemicolon(); + } + function emitSignatureHead(node) { + emitTypeParameters(node, node.typeParameters); + emitParameters(node, node.parameters); + emitTypeAnnotation(node.type); + } + function shouldEmitBlockFunctionBodyOnSingleLine(body) { + if (getEmitFlags(body) & 1 /* SingleLine */) { + return true; + } + if (body.multiLine) { + return false; + } + if (!nodeIsSynthesized(body) && currentSourceFile && !rangeIsOnSingleLine(body, currentSourceFile)) { + return false; + } + if (getLeadingLineTerminatorCount(body, firstOrUndefined(body.statements), 2 /* PreserveLines */) || getClosingLineTerminatorCount(body, lastOrUndefined(body.statements), 2 /* PreserveLines */, body.statements)) { + return false; + } + let previousStatement; + for (const statement of body.statements) { + if (getSeparatingLineTerminatorCount(previousStatement, statement, 2 /* PreserveLines */) > 0) { + return false; + } + previousStatement = statement; + } + return true; + } + function emitBlockFunctionBody(body) { + generateNames(body); + onBeforeEmitNode == null ? void 0 : onBeforeEmitNode(body); + writeSpace(); + writePunctuation("{"); + increaseIndent(); + const emitBlockFunctionBody2 = shouldEmitBlockFunctionBodyOnSingleLine(body) ? emitBlockFunctionBodyOnSingleLine : emitBlockFunctionBodyWorker; + emitBodyWithDetachedComments(body, body.statements, emitBlockFunctionBody2); + decreaseIndent(); + writeToken(20 /* CloseBraceToken */, body.statements.end, writePunctuation, body); + onAfterEmitNode == null ? void 0 : onAfterEmitNode(body); + } + function emitBlockFunctionBodyOnSingleLine(body) { + emitBlockFunctionBodyWorker( + body, + /*emitBlockFunctionBodyOnSingleLine*/ + true + ); + } + function emitBlockFunctionBodyWorker(body, emitBlockFunctionBodyOnSingleLine2) { + const statementOffset = emitPrologueDirectives(body.statements); + const pos = writer.getTextPos(); + emitHelpers(body); + if (statementOffset === 0 && pos === writer.getTextPos() && emitBlockFunctionBodyOnSingleLine2) { + decreaseIndent(); + emitList(body, body.statements, 768 /* SingleLineFunctionBodyStatements */); + increaseIndent(); + } else { + emitList( + body, + body.statements, + 1 /* MultiLineFunctionBodyStatements */, + /*parenthesizerRule*/ + void 0, + statementOffset + ); + } + } + function emitClassDeclaration(node) { + emitClassDeclarationOrExpression(node); + } + function emitClassDeclarationOrExpression(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + true + ); + emitTokenWithComment(86 /* ClassKeyword */, moveRangePastModifiers(node).pos, writeKeyword, node); + if (node.name) { + writeSpace(); + emitIdentifierName(node.name); + } + const indentedFlag = getEmitFlags(node) & 131072 /* Indented */; + if (indentedFlag) { + increaseIndent(); + } + emitTypeParameters(node, node.typeParameters); + emitList(node, node.heritageClauses, 0 /* ClassHeritageClauses */); + writeSpace(); + writePunctuation("{"); + pushNameGenerationScope(node); + forEach(node.members, generateMemberNames); + emitList(node, node.members, 129 /* ClassMembers */); + popNameGenerationScope(node); + writePunctuation("}"); + if (indentedFlag) { + decreaseIndent(); + } + } + function emitInterfaceDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + writeKeyword("interface"); + writeSpace(); + emit(node.name); + emitTypeParameters(node, node.typeParameters); + emitList(node, node.heritageClauses, 512 /* HeritageClauses */); + writeSpace(); + writePunctuation("{"); + pushNameGenerationScope(node); + forEach(node.members, generateMemberNames); + emitList(node, node.members, 129 /* InterfaceMembers */); + popNameGenerationScope(node); + writePunctuation("}"); + } + function emitTypeAliasDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + writeKeyword("type"); + writeSpace(); + emit(node.name); + emitTypeParameters(node, node.typeParameters); + writeSpace(); + writePunctuation("="); + writeSpace(); + emit(node.type); + writeTrailingSemicolon(); + } + function emitEnumDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + writeKeyword("enum"); + writeSpace(); + emit(node.name); + writeSpace(); + writePunctuation("{"); + emitList(node, node.members, 145 /* EnumMembers */); + writePunctuation("}"); + } + function emitModuleDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + if (~node.flags & 2048 /* GlobalAugmentation */) { + writeKeyword(node.flags & 32 /* Namespace */ ? "namespace" : "module"); + writeSpace(); + } + emit(node.name); + let body = node.body; + if (!body) return writeTrailingSemicolon(); + while (body && isModuleDeclaration(body)) { + writePunctuation("."); + emit(body.name); + body = body.body; + } + writeSpace(); + emit(body); + } + function emitModuleBlock(node) { + pushNameGenerationScope(node); + forEach(node.statements, generateNames); + emitBlockStatements( + node, + /*forceSingleLine*/ + isEmptyBlock(node) + ); + popNameGenerationScope(node); + } + function emitCaseBlock(node) { + emitTokenWithComment(19 /* OpenBraceToken */, node.pos, writePunctuation, node); + emitList(node, node.clauses, 129 /* CaseBlockClauses */); + emitTokenWithComment( + 20 /* CloseBraceToken */, + node.clauses.end, + writePunctuation, + node, + /*indentLeading*/ + true + ); + } + function emitImportEqualsDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + emitTokenWithComment(102 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); + writeSpace(); + if (node.isTypeOnly) { + emitTokenWithComment(156 /* TypeKeyword */, node.pos, writeKeyword, node); + writeSpace(); + } + emit(node.name); + writeSpace(); + emitTokenWithComment(64 /* EqualsToken */, node.name.end, writePunctuation, node); + writeSpace(); + emitModuleReference(node.moduleReference); + writeTrailingSemicolon(); + } + function emitModuleReference(node) { + if (node.kind === 80 /* Identifier */) { + emitExpression(node); + } else { + emit(node); + } + } + function emitImportDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + emitTokenWithComment(102 /* ImportKeyword */, node.modifiers ? node.modifiers.end : node.pos, writeKeyword, node); + writeSpace(); + if (node.importClause) { + emit(node.importClause); + writeSpace(); + emitTokenWithComment(161 /* FromKeyword */, node.importClause.end, writeKeyword, node); + writeSpace(); + } + emitExpression(node.moduleSpecifier); + if (node.attributes) { + emitWithLeadingSpace(node.attributes); + } + writeTrailingSemicolon(); + } + function emitImportClause(node) { + if (node.phaseModifier !== void 0) { + emitTokenWithComment(node.phaseModifier, node.pos, writeKeyword, node); + writeSpace(); + } + emit(node.name); + if (node.name && node.namedBindings) { + emitTokenWithComment(28 /* CommaToken */, node.name.end, writePunctuation, node); + writeSpace(); + } + emit(node.namedBindings); + } + function emitNamespaceImport(node) { + const asPos = emitTokenWithComment(42 /* AsteriskToken */, node.pos, writePunctuation, node); + writeSpace(); + emitTokenWithComment(130 /* AsKeyword */, asPos, writeKeyword, node); + writeSpace(); + emit(node.name); + } + function emitNamedImports(node) { + emitNamedImportsOrExports(node); + } + function emitImportSpecifier(node) { + emitImportOrExportSpecifier(node); + } + function emitExportAssignment(node) { + const nextPos = emitTokenWithComment(95 /* ExportKeyword */, node.pos, writeKeyword, node); + writeSpace(); + if (node.isExportEquals) { + emitTokenWithComment(64 /* EqualsToken */, nextPos, writeOperator, node); + } else { + emitTokenWithComment(90 /* DefaultKeyword */, nextPos, writeKeyword, node); + } + writeSpace(); + emitExpression( + node.expression, + node.isExportEquals ? parenthesizer.getParenthesizeRightSideOfBinaryForOperator(64 /* EqualsToken */) : parenthesizer.parenthesizeExpressionOfExportDefault + ); + writeTrailingSemicolon(); + } + function emitExportDeclaration(node) { + emitDecoratorsAndModifiers( + node, + node.modifiers, + /*allowDecorators*/ + false + ); + let nextPos = emitTokenWithComment(95 /* ExportKeyword */, node.pos, writeKeyword, node); + writeSpace(); + if (node.isTypeOnly) { + nextPos = emitTokenWithComment(156 /* TypeKeyword */, nextPos, writeKeyword, node); + writeSpace(); + } + if (node.exportClause) { + emit(node.exportClause); + } else { + nextPos = emitTokenWithComment(42 /* AsteriskToken */, nextPos, writePunctuation, node); + } + if (node.moduleSpecifier) { + writeSpace(); + const fromPos = node.exportClause ? node.exportClause.end : nextPos; + emitTokenWithComment(161 /* FromKeyword */, fromPos, writeKeyword, node); + writeSpace(); + emitExpression(node.moduleSpecifier); + } + if (node.attributes) { + emitWithLeadingSpace(node.attributes); + } + writeTrailingSemicolon(); + } + function emitImportTypeNodeAttributes(node) { + writePunctuation("{"); + writeSpace(); + writeKeyword(node.token === 132 /* AssertKeyword */ ? "assert" : "with"); + writePunctuation(":"); + writeSpace(); + const elements = node.elements; + emitList(node, elements, 526226 /* ImportAttributes */); + writeSpace(); + writePunctuation("}"); + } + function emitImportAttributes(node) { + emitTokenWithComment(node.token, node.pos, writeKeyword, node); + writeSpace(); + const elements = node.elements; + emitList(node, elements, 526226 /* ImportAttributes */); + } + function emitImportAttribute(node) { + emit(node.name); + writePunctuation(":"); + writeSpace(); + const value = node.value; + if ((getEmitFlags(value) & 1024 /* NoLeadingComments */) === 0) { + const commentRange = getCommentRange(value); + emitTrailingCommentsOfPosition(commentRange.pos); + } + emit(value); + } + function emitNamespaceExportDeclaration(node) { + let nextPos = emitTokenWithComment(95 /* ExportKeyword */, node.pos, writeKeyword, node); + writeSpace(); + nextPos = emitTokenWithComment(130 /* AsKeyword */, nextPos, writeKeyword, node); + writeSpace(); + nextPos = emitTokenWithComment(145 /* NamespaceKeyword */, nextPos, writeKeyword, node); + writeSpace(); + emit(node.name); + writeTrailingSemicolon(); + } + function emitNamespaceExport(node) { + const asPos = emitTokenWithComment(42 /* AsteriskToken */, node.pos, writePunctuation, node); + writeSpace(); + emitTokenWithComment(130 /* AsKeyword */, asPos, writeKeyword, node); + writeSpace(); + emit(node.name); + } + function emitNamedExports(node) { + emitNamedImportsOrExports(node); + } + function emitExportSpecifier(node) { + emitImportOrExportSpecifier(node); + } + function emitNamedImportsOrExports(node) { + writePunctuation("{"); + emitList(node, node.elements, 525136 /* NamedImportsOrExportsElements */); + writePunctuation("}"); + } + function emitImportOrExportSpecifier(node) { + if (node.isTypeOnly) { + writeKeyword("type"); + writeSpace(); + } + if (node.propertyName) { + emit(node.propertyName); + writeSpace(); + emitTokenWithComment(130 /* AsKeyword */, node.propertyName.end, writeKeyword, node); + writeSpace(); + } + emit(node.name); + } + function emitExternalModuleReference(node) { + writeKeyword("require"); + writePunctuation("("); + emitExpression(node.expression); + writePunctuation(")"); + } + function emitJsxElement(node) { + emit(node.openingElement); + emitList(node, node.children, 262144 /* JsxElementOrFragmentChildren */); + emit(node.closingElement); + } + function emitJsxSelfClosingElement(node) { + writePunctuation("<"); + emitJsxTagName(node.tagName); + emitTypeArguments(node, node.typeArguments); + writeSpace(); + emit(node.attributes); + writePunctuation("/>"); + } + function emitJsxFragment(node) { + emit(node.openingFragment); + emitList(node, node.children, 262144 /* JsxElementOrFragmentChildren */); + emit(node.closingFragment); + } + function emitJsxOpeningElementOrFragment(node) { + writePunctuation("<"); + if (isJsxOpeningElement(node)) { + const indented = writeLineSeparatorsAndIndentBefore(node.tagName, node); + emitJsxTagName(node.tagName); + emitTypeArguments(node, node.typeArguments); + if (node.attributes.properties && node.attributes.properties.length > 0) { + writeSpace(); + } + emit(node.attributes); + writeLineSeparatorsAfter(node.attributes, node); + decreaseIndentIf(indented); + } + writePunctuation(">"); + } + function emitJsxText(node) { + writer.writeLiteral(node.text); + } + function emitJsxClosingElementOrFragment(node) { + writePunctuation(""); + } + function emitJsxAttributes(node) { + emitList(node, node.properties, 262656 /* JsxElementAttributes */); + } + function emitJsxAttribute(node) { + emit(node.name); + emitNodeWithPrefix("=", writePunctuation, node.initializer, emitJsxAttributeValue); + } + function emitJsxSpreadAttribute(node) { + writePunctuation("{..."); + emitExpression(node.expression); + writePunctuation("}"); + } + function hasTrailingCommentsAtPosition(pos) { + let result = false; + forEachTrailingCommentRange((currentSourceFile == null ? void 0 : currentSourceFile.text) || "", pos + 1, () => result = true); + return result; + } + function hasLeadingCommentsAtPosition(pos) { + let result = false; + forEachLeadingCommentRange((currentSourceFile == null ? void 0 : currentSourceFile.text) || "", pos + 1, () => result = true); + return result; + } + function hasCommentsAtPosition(pos) { + return hasTrailingCommentsAtPosition(pos) || hasLeadingCommentsAtPosition(pos); + } + function emitJsxExpression(node) { + var _a; + if (node.expression || !commentsDisabled && !nodeIsSynthesized(node) && hasCommentsAtPosition(node.pos)) { + const isMultiline = currentSourceFile && !nodeIsSynthesized(node) && getLineAndCharacterOfPosition(currentSourceFile, node.pos).line !== getLineAndCharacterOfPosition(currentSourceFile, node.end).line; + if (isMultiline) { + writer.increaseIndent(); + } + const end = emitTokenWithComment(19 /* OpenBraceToken */, node.pos, writePunctuation, node); + emit(node.dotDotDotToken); + emitExpression(node.expression); + emitTokenWithComment(20 /* CloseBraceToken */, ((_a = node.expression) == null ? void 0 : _a.end) || end, writePunctuation, node); + if (isMultiline) { + writer.decreaseIndent(); + } + } + } + function emitJsxNamespacedName(node) { + emitIdentifierName(node.namespace); + writePunctuation(":"); + emitIdentifierName(node.name); + } + function emitJsxTagName(node) { + if (node.kind === 80 /* Identifier */) { + emitExpression(node); + } else { + emit(node); + } + } + function emitCaseClause(node) { + emitTokenWithComment(84 /* CaseKeyword */, node.pos, writeKeyword, node); + writeSpace(); + emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma); + emitCaseOrDefaultClauseRest(node, node.statements, node.expression.end); + } + function emitDefaultClause(node) { + const pos = emitTokenWithComment(90 /* DefaultKeyword */, node.pos, writeKeyword, node); + emitCaseOrDefaultClauseRest(node, node.statements, pos); + } + function emitCaseOrDefaultClauseRest(parentNode, statements, colonPos) { + const emitAsSingleStatement = statements.length === 1 && // treat synthesized nodes as located on the same line for emit purposes + (!currentSourceFile || nodeIsSynthesized(parentNode) || nodeIsSynthesized(statements[0]) || rangeStartPositionsAreOnSameLine(parentNode, statements[0], currentSourceFile)); + let format = 163969 /* CaseOrDefaultClauseStatements */; + if (emitAsSingleStatement) { + writeToken(59 /* ColonToken */, colonPos, writePunctuation, parentNode); + writeSpace(); + format &= ~(1 /* MultiLine */ | 128 /* Indented */); + } else { + emitTokenWithComment(59 /* ColonToken */, colonPos, writePunctuation, parentNode); + } + emitList(parentNode, statements, format); + } + function emitHeritageClause(node) { + writeSpace(); + writeTokenText(node.token, writeKeyword); + writeSpace(); + emitList(node, node.types, 528 /* HeritageClauseTypes */); + } + function emitCatchClause(node) { + const openParenPos = emitTokenWithComment(85 /* CatchKeyword */, node.pos, writeKeyword, node); + writeSpace(); + if (node.variableDeclaration) { + emitTokenWithComment(21 /* OpenParenToken */, openParenPos, writePunctuation, node); + emit(node.variableDeclaration); + emitTokenWithComment(22 /* CloseParenToken */, node.variableDeclaration.end, writePunctuation, node); + writeSpace(); + } + emit(node.block); + } + function emitPropertyAssignment(node) { + emit(node.name); + writePunctuation(":"); + writeSpace(); + const initializer = node.initializer; + if ((getEmitFlags(initializer) & 1024 /* NoLeadingComments */) === 0) { + const commentRange = getCommentRange(initializer); + emitTrailingCommentsOfPosition(commentRange.pos); + } + emitExpression(initializer, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitShorthandPropertyAssignment(node) { + emit(node.name); + if (node.objectAssignmentInitializer) { + writeSpace(); + writePunctuation("="); + writeSpace(); + emitExpression(node.objectAssignmentInitializer, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + } + function emitSpreadAssignment(node) { + if (node.expression) { + emitTokenWithComment(26 /* DotDotDotToken */, node.pos, writePunctuation, node); + emitExpression(node.expression, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + } + function emitEnumMember(node) { + emit(node.name); + emitInitializer(node.initializer, node.name.end, node, parenthesizer.parenthesizeExpressionForDisallowedComma); + } + function emitJSDoc(node) { + write("/**"); + if (node.comment) { + const text = getTextOfJSDocComment(node.comment); + if (text) { + const lines = text.split(/\r\n?|\n/); + for (const line of lines) { + writeLine(); + writeSpace(); + writePunctuation("*"); + writeSpace(); + write(line); + } + } + } + if (node.tags) { + if (node.tags.length === 1 && node.tags[0].kind === 345 /* JSDocTypeTag */ && !node.comment) { + writeSpace(); + emit(node.tags[0]); + } else { + emitList(node, node.tags, 33 /* JSDocComment */); + } + } + writeSpace(); + write("*/"); + } + function emitJSDocSimpleTypedTag(tag) { + emitJSDocTagName(tag.tagName); + emitJSDocTypeExpression(tag.typeExpression); + emitJSDocComment(tag.comment); + } + function emitJSDocSeeTag(tag) { + emitJSDocTagName(tag.tagName); + emit(tag.name); + emitJSDocComment(tag.comment); + } + function emitJSDocImportTag(tag) { + emitJSDocTagName(tag.tagName); + writeSpace(); + if (tag.importClause) { + emit(tag.importClause); + writeSpace(); + emitTokenWithComment(161 /* FromKeyword */, tag.importClause.end, writeKeyword, tag); + writeSpace(); + } + emitExpression(tag.moduleSpecifier); + if (tag.attributes) { + emitWithLeadingSpace(tag.attributes); + } + emitJSDocComment(tag.comment); + } + function emitJSDocNameReference(node) { + writeSpace(); + writePunctuation("{"); + emit(node.name); + writePunctuation("}"); + } + function emitJSDocHeritageTag(tag) { + emitJSDocTagName(tag.tagName); + writeSpace(); + writePunctuation("{"); + emit(tag.class); + writePunctuation("}"); + emitJSDocComment(tag.comment); + } + function emitJSDocTemplateTag(tag) { + emitJSDocTagName(tag.tagName); + emitJSDocTypeExpression(tag.constraint); + writeSpace(); + emitList(tag, tag.typeParameters, 528 /* CommaListElements */); + emitJSDocComment(tag.comment); + } + function emitJSDocTypedefTag(tag) { + emitJSDocTagName(tag.tagName); + if (tag.typeExpression) { + if (tag.typeExpression.kind === 310 /* JSDocTypeExpression */) { + emitJSDocTypeExpression(tag.typeExpression); + } else { + writeSpace(); + writePunctuation("{"); + write("Object"); + if (tag.typeExpression.isArrayType) { + writePunctuation("["); + writePunctuation("]"); + } + writePunctuation("}"); + } + } + if (tag.fullName) { + writeSpace(); + emit(tag.fullName); + } + emitJSDocComment(tag.comment); + if (tag.typeExpression && tag.typeExpression.kind === 323 /* JSDocTypeLiteral */) { + emitJSDocTypeLiteral(tag.typeExpression); + } + } + function emitJSDocCallbackTag(tag) { + emitJSDocTagName(tag.tagName); + if (tag.name) { + writeSpace(); + emit(tag.name); + } + emitJSDocComment(tag.comment); + emitJSDocSignature(tag.typeExpression); + } + function emitJSDocOverloadTag(tag) { + emitJSDocComment(tag.comment); + emitJSDocSignature(tag.typeExpression); + } + function emitJSDocSimpleTag(tag) { + emitJSDocTagName(tag.tagName); + emitJSDocComment(tag.comment); + } + function emitJSDocTypeLiteral(lit) { + emitList(lit, factory.createNodeArray(lit.jsDocPropertyTags), 33 /* JSDocComment */); + } + function emitJSDocSignature(sig) { + if (sig.typeParameters) { + emitList(sig, factory.createNodeArray(sig.typeParameters), 33 /* JSDocComment */); + } + if (sig.parameters) { + emitList(sig, factory.createNodeArray(sig.parameters), 33 /* JSDocComment */); + } + if (sig.type) { + writeLine(); + writeSpace(); + writePunctuation("*"); + writeSpace(); + emit(sig.type); + } + } + function emitJSDocPropertyLikeTag(param) { + emitJSDocTagName(param.tagName); + emitJSDocTypeExpression(param.typeExpression); + writeSpace(); + if (param.isBracketed) { + writePunctuation("["); + } + emit(param.name); + if (param.isBracketed) { + writePunctuation("]"); + } + emitJSDocComment(param.comment); + } + function emitJSDocTagName(tagName) { + writePunctuation("@"); + emit(tagName); + } + function emitJSDocComment(comment) { + const text = getTextOfJSDocComment(comment); + if (text) { + writeSpace(); + write(text); + } + } + function emitJSDocTypeExpression(typeExpression) { + if (typeExpression) { + writeSpace(); + writePunctuation("{"); + emit(typeExpression.type); + writePunctuation("}"); + } + } + function emitSourceFile(node) { + writeLine(); + const statements = node.statements; + const shouldEmitDetachedComment = statements.length === 0 || !isPrologueDirective(statements[0]) || nodeIsSynthesized(statements[0]); + if (shouldEmitDetachedComment) { + emitBodyWithDetachedComments(node, statements, emitSourceFileWorker); + return; + } + emitSourceFileWorker(node); + } + function emitSyntheticTripleSlashReferencesIfNeeded(node) { + emitTripleSlashDirectives(!!node.hasNoDefaultLib, node.syntheticFileReferences || [], node.syntheticTypeReferences || [], node.syntheticLibReferences || []); + } + function emitTripleSlashDirectivesIfNeeded(node) { + if (node.isDeclarationFile) emitTripleSlashDirectives(node.hasNoDefaultLib, node.referencedFiles, node.typeReferenceDirectives, node.libReferenceDirectives); + } + function emitTripleSlashDirectives(hasNoDefaultLib, files, types, libs2) { + if (hasNoDefaultLib) { + writeComment(`/// `); + writeLine(); + } + if (currentSourceFile && currentSourceFile.moduleName) { + writeComment(`/// `); + writeLine(); + } + if (currentSourceFile && currentSourceFile.amdDependencies) { + for (const dep of currentSourceFile.amdDependencies) { + if (dep.name) { + writeComment(`/// `); + } else { + writeComment(`/// `); + } + writeLine(); + } + } + function writeDirectives(kind, directives) { + for (const directive of directives) { + const resolutionMode = directive.resolutionMode ? `resolution-mode="${directive.resolutionMode === 99 /* ESNext */ ? "import" : "require"}" ` : ""; + const preserve = directive.preserve ? `preserve="true" ` : ""; + writeComment(`/// `); + writeLine(); + } + } + writeDirectives("path", files); + writeDirectives("types", types); + writeDirectives("lib", libs2); + } + function emitSourceFileWorker(node) { + const statements = node.statements; + pushNameGenerationScope(node); + forEach(node.statements, generateNames); + emitHelpers(node); + const index = findIndex(statements, (statement) => !isPrologueDirective(statement)); + emitTripleSlashDirectivesIfNeeded(node); + emitList( + node, + statements, + 1 /* MultiLine */, + /*parenthesizerRule*/ + void 0, + index === -1 ? statements.length : index + ); + popNameGenerationScope(node); + } + function emitPartiallyEmittedExpression(node) { + const emitFlags = getEmitFlags(node); + if (!(emitFlags & 1024 /* NoLeadingComments */) && node.pos !== node.expression.pos) { + emitTrailingCommentsOfPosition(node.expression.pos); + } + emitExpression(node.expression); + if (!(emitFlags & 2048 /* NoTrailingComments */) && node.end !== node.expression.end) { + emitLeadingCommentsOfPosition(node.expression.end); + } + } + function emitCommaList(node) { + emitExpressionList( + node, + node.elements, + 528 /* CommaListElements */, + /*parenthesizerRule*/ + void 0 + ); + } + function emitPrologueDirectives(statements, sourceFile, seenPrologueDirectives) { + let needsToSetSourceFile = !!sourceFile; + for (let i = 0; i < statements.length; i++) { + const statement = statements[i]; + if (isPrologueDirective(statement)) { + const shouldEmitPrologueDirective = seenPrologueDirectives ? !seenPrologueDirectives.has(statement.expression.text) : true; + if (shouldEmitPrologueDirective) { + if (needsToSetSourceFile) { + needsToSetSourceFile = false; + setSourceFile(sourceFile); + } + writeLine(); + emit(statement); + if (seenPrologueDirectives) { + seenPrologueDirectives.add(statement.expression.text); + } + } + } else { + return i; + } + } + return statements.length; + } + function emitPrologueDirectivesIfNeeded(sourceFileOrBundle) { + if (isSourceFile(sourceFileOrBundle)) { + emitPrologueDirectives(sourceFileOrBundle.statements, sourceFileOrBundle); + } else { + const seenPrologueDirectives = /* @__PURE__ */ new Set(); + for (const sourceFile of sourceFileOrBundle.sourceFiles) { + emitPrologueDirectives(sourceFile.statements, sourceFile, seenPrologueDirectives); + } + setSourceFile(void 0); + } + } + function emitShebangIfNeeded(sourceFileOrBundle) { + if (isSourceFile(sourceFileOrBundle)) { + const shebang = getShebang(sourceFileOrBundle.text); + if (shebang) { + writeComment(shebang); + writeLine(); + return true; + } + } else { + for (const sourceFile of sourceFileOrBundle.sourceFiles) { + if (emitShebangIfNeeded(sourceFile)) { + return true; + } + } + } + } + function emitNodeWithWriter(node, writer2) { + if (!node) return; + const savedWrite = write; + write = writer2; + emit(node); + write = savedWrite; + } + function emitDecoratorsAndModifiers(node, modifiers, allowDecorators) { + if (modifiers == null ? void 0 : modifiers.length) { + if (every(modifiers, isModifier)) { + return emitModifierList(node, modifiers); + } + if (every(modifiers, isDecorator)) { + if (allowDecorators) { + return emitDecoratorList(node, modifiers); + } + return node.pos; + } + onBeforeEmitNodeArray == null ? void 0 : onBeforeEmitNodeArray(modifiers); + let lastMode; + let mode; + let start = 0; + let pos = 0; + let lastModifier; + while (start < modifiers.length) { + while (pos < modifiers.length) { + lastModifier = modifiers[pos]; + mode = isDecorator(lastModifier) ? "decorators" : "modifiers"; + if (lastMode === void 0) { + lastMode = mode; + } else if (mode !== lastMode) { + break; + } + pos++; + } + const textRange = { pos: -1, end: -1 }; + if (start === 0) textRange.pos = modifiers.pos; + if (pos === modifiers.length - 1) textRange.end = modifiers.end; + if (lastMode === "modifiers" || allowDecorators) { + emitNodeListItems( + emit, + node, + modifiers, + lastMode === "modifiers" ? 2359808 /* Modifiers */ : 2146305 /* Decorators */, + /*parenthesizerRule*/ + void 0, + start, + pos - start, + /*hasTrailingComma*/ + false, + textRange + ); + } + start = pos; + lastMode = mode; + pos++; + } + onAfterEmitNodeArray == null ? void 0 : onAfterEmitNodeArray(modifiers); + if (lastModifier && !positionIsSynthesized(lastModifier.end)) { + return lastModifier.end; + } + } + return node.pos; + } + function emitModifierList(node, modifiers) { + emitList(node, modifiers, 2359808 /* Modifiers */); + const lastModifier = lastOrUndefined(modifiers); + return lastModifier && !positionIsSynthesized(lastModifier.end) ? lastModifier.end : node.pos; + } + function emitTypeAnnotation(node) { + if (node) { + writePunctuation(":"); + writeSpace(); + emit(node); + } + } + function emitInitializer(node, equalCommentStartPos, container, parenthesizerRule) { + if (node) { + writeSpace(); + emitTokenWithComment(64 /* EqualsToken */, equalCommentStartPos, writeOperator, container); + writeSpace(); + emitExpression(node, parenthesizerRule); + } + } + function emitNodeWithPrefix(prefix, prefixWriter, node, emit2) { + if (node) { + prefixWriter(prefix); + emit2(node); + } + } + function emitWithLeadingSpace(node) { + if (node) { + writeSpace(); + emit(node); + } + } + function emitExpressionWithLeadingSpace(node, parenthesizerRule) { + if (node) { + writeSpace(); + emitExpression(node, parenthesizerRule); + } + } + function emitWithTrailingSpace(node) { + if (node) { + emit(node); + writeSpace(); + } + } + function emitEmbeddedStatement(parent2, node) { + if (isBlock(node) || getEmitFlags(parent2) & 1 /* SingleLine */ || preserveSourceNewlines && !getLeadingLineTerminatorCount(parent2, node, 0 /* None */)) { + writeSpace(); + emit(node); + } else { + writeLine(); + increaseIndent(); + if (isEmptyStatement(node)) { + pipelineEmit(5 /* EmbeddedStatement */, node); + } else { + emit(node); + } + decreaseIndent(); + } + } + function emitDecoratorList(parentNode, decorators) { + emitList(parentNode, decorators, 2146305 /* Decorators */); + const lastDecorator = lastOrUndefined(decorators); + return lastDecorator && !positionIsSynthesized(lastDecorator.end) ? lastDecorator.end : parentNode.pos; + } + function emitTypeArguments(parentNode, typeArguments) { + emitList(parentNode, typeArguments, 53776 /* TypeArguments */, typeArgumentParenthesizerRuleSelector); + } + function emitTypeParameters(parentNode, typeParameters) { + if (isFunctionLike(parentNode) && parentNode.typeArguments) { + return emitTypeArguments(parentNode, parentNode.typeArguments); + } + emitList(parentNode, typeParameters, 53776 /* TypeParameters */ | (isArrowFunction(parentNode) ? 64 /* AllowTrailingComma */ : 0 /* None */)); + } + function emitParameters(parentNode, parameters) { + emitList(parentNode, parameters, 2576 /* Parameters */); + } + function canEmitSimpleArrowHead(parentNode, parameters) { + const parameter = singleOrUndefined(parameters); + return parameter && parameter.pos === parentNode.pos && isArrowFunction(parentNode) && !parentNode.type && !some(parentNode.modifiers) && !some(parentNode.typeParameters) && !some(parameter.modifiers) && !parameter.dotDotDotToken && !parameter.questionToken && !parameter.type && !parameter.initializer && isIdentifier(parameter.name); + } + function emitParametersForArrow(parentNode, parameters) { + if (canEmitSimpleArrowHead(parentNode, parameters)) { + emitList(parentNode, parameters, 2576 /* Parameters */ & ~2048 /* Parenthesis */); + } else { + emitParameters(parentNode, parameters); + } + } + function emitParametersForIndexSignature(parentNode, parameters) { + emitList(parentNode, parameters, 8848 /* IndexSignatureParameters */); + } + function writeDelimiter(format) { + switch (format & 60 /* DelimitersMask */) { + case 0 /* None */: + break; + case 16 /* CommaDelimited */: + writePunctuation(","); + break; + case 4 /* BarDelimited */: + writeSpace(); + writePunctuation("|"); + break; + case 32 /* AsteriskDelimited */: + writeSpace(); + writePunctuation("*"); + writeSpace(); + break; + case 8 /* AmpersandDelimited */: + writeSpace(); + writePunctuation("&"); + break; + } + } + function emitList(parentNode, children, format, parenthesizerRule, start, count) { + emitNodeList( + emit, + parentNode, + children, + format | (parentNode && getEmitFlags(parentNode) & 2 /* MultiLine */ ? 65536 /* PreferNewLine */ : 0), + parenthesizerRule, + start, + count + ); + } + function emitExpressionList(parentNode, children, format, parenthesizerRule, start, count) { + emitNodeList(emitExpression, parentNode, children, format, parenthesizerRule, start, count); + } + function emitNodeList(emit2, parentNode, children, format, parenthesizerRule, start = 0, count = children ? children.length - start : 0) { + const isUndefined = children === void 0; + if (isUndefined && format & 16384 /* OptionalIfUndefined */) { + return; + } + const isEmpty = children === void 0 || start >= children.length || count === 0; + if (isEmpty && format & 32768 /* OptionalIfEmpty */) { + onBeforeEmitNodeArray == null ? void 0 : onBeforeEmitNodeArray(children); + onAfterEmitNodeArray == null ? void 0 : onAfterEmitNodeArray(children); + return; + } + if (format & 15360 /* BracketsMask */) { + writePunctuation(getOpeningBracket(format)); + if (isEmpty && children) { + emitTrailingCommentsOfPosition( + children.pos, + /*prefixSpace*/ + true + ); + } + } + onBeforeEmitNodeArray == null ? void 0 : onBeforeEmitNodeArray(children); + if (isEmpty) { + if (format & 1 /* MultiLine */ && !(preserveSourceNewlines && (!parentNode || currentSourceFile && rangeIsOnSingleLine(parentNode, currentSourceFile)))) { + writeLine(); + } else if (format & 256 /* SpaceBetweenBraces */ && !(format & 524288 /* NoSpaceIfEmpty */)) { + writeSpace(); + } + } else { + emitNodeListItems(emit2, parentNode, children, format, parenthesizerRule, start, count, children.hasTrailingComma, children); + } + onAfterEmitNodeArray == null ? void 0 : onAfterEmitNodeArray(children); + if (format & 15360 /* BracketsMask */) { + if (isEmpty && children) { + emitLeadingCommentsOfPosition(children.end); + } + writePunctuation(getClosingBracket(format)); + } + } + function emitNodeListItems(emit2, parentNode, children, format, parenthesizerRule, start, count, hasTrailingComma, childrenTextRange) { + const mayEmitInterveningComments = (format & 262144 /* NoInterveningComments */) === 0; + let shouldEmitInterveningComments = mayEmitInterveningComments; + const leadingLineTerminatorCount = getLeadingLineTerminatorCount(parentNode, children[start], format); + if (leadingLineTerminatorCount) { + writeLine(leadingLineTerminatorCount); + shouldEmitInterveningComments = false; + } else if (format & 256 /* SpaceBetweenBraces */) { + writeSpace(); + } + if (format & 128 /* Indented */) { + increaseIndent(); + } + const emitListItem = getEmitListItem(emit2, parenthesizerRule); + let previousSibling; + let shouldDecreaseIndentAfterEmit = false; + for (let i = 0; i < count; i++) { + const child = children[start + i]; + if (format & 32 /* AsteriskDelimited */) { + writeLine(); + writeDelimiter(format); + } else if (previousSibling) { + if (format & 60 /* DelimitersMask */ && previousSibling.end !== (parentNode ? parentNode.end : -1)) { + const previousSiblingEmitFlags = getEmitFlags(previousSibling); + if (!(previousSiblingEmitFlags & 2048 /* NoTrailingComments */)) { + emitLeadingCommentsOfPosition(previousSibling.end); + } + } + writeDelimiter(format); + const separatingLineTerminatorCount = getSeparatingLineTerminatorCount(previousSibling, child, format); + if (separatingLineTerminatorCount > 0) { + if ((format & (3 /* LinesMask */ | 128 /* Indented */)) === 0 /* SingleLine */) { + increaseIndent(); + shouldDecreaseIndentAfterEmit = true; + } + if (shouldEmitInterveningComments && format & 60 /* DelimitersMask */ && !positionIsSynthesized(child.pos)) { + const commentRange = getCommentRange(child); + emitTrailingCommentsOfPosition( + commentRange.pos, + /*prefixSpace*/ + !!(format & 512 /* SpaceBetweenSiblings */), + /*forceNoNewline*/ + true + ); + } + writeLine(separatingLineTerminatorCount); + shouldEmitInterveningComments = false; + } else if (previousSibling && format & 512 /* SpaceBetweenSiblings */) { + writeSpace(); + } + } + if (shouldEmitInterveningComments) { + const commentRange = getCommentRange(child); + emitTrailingCommentsOfPosition(commentRange.pos); + } else { + shouldEmitInterveningComments = mayEmitInterveningComments; + } + nextListElementPos = child.pos; + emitListItem(child, emit2, parenthesizerRule, i); + if (shouldDecreaseIndentAfterEmit) { + decreaseIndent(); + shouldDecreaseIndentAfterEmit = false; + } + previousSibling = child; + } + const emitFlags = previousSibling ? getEmitFlags(previousSibling) : 0; + const skipTrailingComments = commentsDisabled || !!(emitFlags & 2048 /* NoTrailingComments */); + const emitTrailingComma = hasTrailingComma && format & 64 /* AllowTrailingComma */ && format & 16 /* CommaDelimited */; + if (emitTrailingComma) { + if (previousSibling && !skipTrailingComments) { + emitTokenWithComment(28 /* CommaToken */, previousSibling.end, writePunctuation, previousSibling); + } else { + writePunctuation(","); + } + } + if (previousSibling && (parentNode ? parentNode.end : -1) !== previousSibling.end && format & 60 /* DelimitersMask */ && !skipTrailingComments) { + emitLeadingCommentsOfPosition(emitTrailingComma && (childrenTextRange == null ? void 0 : childrenTextRange.end) ? childrenTextRange.end : previousSibling.end); + } + if (format & 128 /* Indented */) { + decreaseIndent(); + } + const closingLineTerminatorCount = getClosingLineTerminatorCount(parentNode, children[start + count - 1], format, childrenTextRange); + if (closingLineTerminatorCount) { + writeLine(closingLineTerminatorCount); + } else if (format & (2097152 /* SpaceAfterList */ | 256 /* SpaceBetweenBraces */)) { + writeSpace(); + } + } + function writeLiteral(s) { + writer.writeLiteral(s); + } + function writeStringLiteral(s) { + writer.writeStringLiteral(s); + } + function writeBase(s) { + writer.write(s); + } + function writeSymbol(s, sym) { + writer.writeSymbol(s, sym); + } + function writePunctuation(s) { + writer.writePunctuation(s); + } + function writeTrailingSemicolon() { + writer.writeTrailingSemicolon(";"); + } + function writeKeyword(s) { + writer.writeKeyword(s); + } + function writeOperator(s) { + writer.writeOperator(s); + } + function writeParameter(s) { + writer.writeParameter(s); + } + function writeComment(s) { + writer.writeComment(s); + } + function writeSpace() { + writer.writeSpace(" "); + } + function writeProperty(s) { + writer.writeProperty(s); + } + function nonEscapingWrite(s) { + if (writer.nonEscapingWrite) { + writer.nonEscapingWrite(s); + } else { + writer.write(s); + } + } + function writeLine(count = 1) { + for (let i = 0; i < count; i++) { + writer.writeLine(i > 0); + } + } + function increaseIndent() { + writer.increaseIndent(); + } + function decreaseIndent() { + writer.decreaseIndent(); + } + function writeToken(token, pos, writer2, contextNode) { + return !sourceMapsDisabled ? emitTokenWithSourceMap(contextNode, token, writer2, pos, writeTokenText) : writeTokenText(token, writer2, pos); + } + function writeTokenNode(node, writer2) { + if (onBeforeEmitToken) { + onBeforeEmitToken(node); + } + writer2(tokenToString(node.kind)); + if (onAfterEmitToken) { + onAfterEmitToken(node); + } + } + function writeTokenText(token, writer2, pos) { + const tokenString = tokenToString(token); + writer2(tokenString); + return pos < 0 ? pos : pos + tokenString.length; + } + function writeLineOrSpace(parentNode, prevChildNode, nextChildNode) { + if (getEmitFlags(parentNode) & 1 /* SingleLine */) { + writeSpace(); + } else if (preserveSourceNewlines) { + const lines = getLinesBetweenNodes(parentNode, prevChildNode, nextChildNode); + if (lines) { + writeLine(lines); + } else { + writeSpace(); + } + } else { + writeLine(); + } + } + function writeLines(text) { + const lines = text.split(/\r\n?|\n/); + const indentation = guessIndentation(lines); + for (const lineText of lines) { + const line = indentation ? lineText.slice(indentation) : lineText; + if (line.length) { + writeLine(); + write(line); + } + } + } + function writeLinesAndIndent(lineCount, writeSpaceIfNotIndenting) { + if (lineCount) { + increaseIndent(); + writeLine(lineCount); + } else if (writeSpaceIfNotIndenting) { + writeSpace(); + } + } + function decreaseIndentIf(value1, value2) { + if (value1) { + decreaseIndent(); + } + if (value2) { + decreaseIndent(); + } + } + function getLeadingLineTerminatorCount(parentNode, firstChild, format) { + if (format & 2 /* PreserveLines */ || preserveSourceNewlines) { + if (format & 65536 /* PreferNewLine */) { + return 1; + } + if (firstChild === void 0) { + return !parentNode || currentSourceFile && rangeIsOnSingleLine(parentNode, currentSourceFile) ? 0 : 1; + } + if (firstChild.pos === nextListElementPos) { + return 0; + } + if (firstChild.kind === 12 /* JsxText */) { + return 0; + } + if (currentSourceFile && parentNode && !positionIsSynthesized(parentNode.pos) && !nodeIsSynthesized(firstChild) && (!firstChild.parent || getOriginalNode(firstChild.parent) === getOriginalNode(parentNode))) { + if (preserveSourceNewlines) { + return getEffectiveLines( + (includeComments) => getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter( + firstChild.pos, + parentNode.pos, + currentSourceFile, + includeComments + ) + ); + } + return rangeStartPositionsAreOnSameLine(parentNode, firstChild, currentSourceFile) ? 0 : 1; + } + if (synthesizedNodeStartsOnNewLine(firstChild, format)) { + return 1; + } + } + return format & 1 /* MultiLine */ ? 1 : 0; + } + function getSeparatingLineTerminatorCount(previousNode, nextNode, format) { + if (format & 2 /* PreserveLines */ || preserveSourceNewlines) { + if (previousNode === void 0 || nextNode === void 0) { + return 0; + } + if (nextNode.kind === 12 /* JsxText */) { + return 0; + } else if (currentSourceFile && !nodeIsSynthesized(previousNode) && !nodeIsSynthesized(nextNode)) { + if (preserveSourceNewlines && siblingNodePositionsAreComparable(previousNode, nextNode)) { + return getEffectiveLines( + (includeComments) => getLinesBetweenRangeEndAndRangeStart( + previousNode, + nextNode, + currentSourceFile, + includeComments + ) + ); + } else if (!preserveSourceNewlines && originalNodesHaveSameParent(previousNode, nextNode)) { + return rangeEndIsOnSameLineAsRangeStart(previousNode, nextNode, currentSourceFile) ? 0 : 1; + } + return format & 65536 /* PreferNewLine */ ? 1 : 0; + } else if (synthesizedNodeStartsOnNewLine(previousNode, format) || synthesizedNodeStartsOnNewLine(nextNode, format)) { + return 1; + } + } else if (getStartsOnNewLine(nextNode)) { + return 1; + } + return format & 1 /* MultiLine */ ? 1 : 0; + } + function getClosingLineTerminatorCount(parentNode, lastChild, format, childrenTextRange) { + if (format & 2 /* PreserveLines */ || preserveSourceNewlines) { + if (format & 65536 /* PreferNewLine */) { + return 1; + } + if (lastChild === void 0) { + return !parentNode || currentSourceFile && rangeIsOnSingleLine(parentNode, currentSourceFile) ? 0 : 1; + } + if (currentSourceFile && parentNode && !positionIsSynthesized(parentNode.pos) && !nodeIsSynthesized(lastChild) && (!lastChild.parent || lastChild.parent === parentNode)) { + if (preserveSourceNewlines) { + const end = childrenTextRange && !positionIsSynthesized(childrenTextRange.end) ? childrenTextRange.end : lastChild.end; + return getEffectiveLines( + (includeComments) => getLinesBetweenPositionAndNextNonWhitespaceCharacter( + end, + parentNode.end, + currentSourceFile, + includeComments + ) + ); + } + return rangeEndPositionsAreOnSameLine(parentNode, lastChild, currentSourceFile) ? 0 : 1; + } + if (synthesizedNodeStartsOnNewLine(lastChild, format)) { + return 1; + } + } + if (format & 1 /* MultiLine */ && !(format & 131072 /* NoTrailingNewLine */)) { + return 1; + } + return 0; + } + function getEffectiveLines(getLineDifference) { + Debug.assert(!!preserveSourceNewlines); + const lines = getLineDifference( + /*includeComments*/ + true + ); + if (lines === 0) { + return getLineDifference( + /*includeComments*/ + false + ); + } + return lines; + } + function writeLineSeparatorsAndIndentBefore(node, parent2) { + const leadingNewlines = preserveSourceNewlines && getLeadingLineTerminatorCount(parent2, node, 0 /* None */); + if (leadingNewlines) { + writeLinesAndIndent( + leadingNewlines, + /*writeSpaceIfNotIndenting*/ + false + ); + } + return !!leadingNewlines; + } + function writeLineSeparatorsAfter(node, parent2) { + const trailingNewlines = preserveSourceNewlines && getClosingLineTerminatorCount( + parent2, + node, + 0 /* None */, + /*childrenTextRange*/ + void 0 + ); + if (trailingNewlines) { + writeLine(trailingNewlines); + } + } + function synthesizedNodeStartsOnNewLine(node, format) { + if (nodeIsSynthesized(node)) { + const startsOnNewLine = getStartsOnNewLine(node); + if (startsOnNewLine === void 0) { + return (format & 65536 /* PreferNewLine */) !== 0; + } + return startsOnNewLine; + } + return (format & 65536 /* PreferNewLine */) !== 0; + } + function getLinesBetweenNodes(parent2, node1, node2) { + if (getEmitFlags(parent2) & 262144 /* NoIndentation */) { + return 0; + } + parent2 = skipSynthesizedParentheses(parent2); + node1 = skipSynthesizedParentheses(node1); + node2 = skipSynthesizedParentheses(node2); + if (getStartsOnNewLine(node2)) { + return 1; + } + if (currentSourceFile && !nodeIsSynthesized(parent2) && !nodeIsSynthesized(node1) && !nodeIsSynthesized(node2)) { + if (preserveSourceNewlines) { + return getEffectiveLines( + (includeComments) => getLinesBetweenRangeEndAndRangeStart( + node1, + node2, + currentSourceFile, + includeComments + ) + ); + } + return rangeEndIsOnSameLineAsRangeStart(node1, node2, currentSourceFile) ? 0 : 1; + } + return 0; + } + function isEmptyBlock(block) { + return block.statements.length === 0 && (!currentSourceFile || rangeEndIsOnSameLineAsRangeStart(block, block, currentSourceFile)); + } + function skipSynthesizedParentheses(node) { + while (node.kind === 218 /* ParenthesizedExpression */ && nodeIsSynthesized(node)) { + node = node.expression; + } + return node; + } + function getTextOfNode2(node, includeTrivia) { + if (isGeneratedIdentifier(node) || isGeneratedPrivateIdentifier(node)) { + return generateName(node); + } + if (isStringLiteral(node) && node.textSourceNode) { + return getTextOfNode2(node.textSourceNode, includeTrivia); + } + const sourceFile = currentSourceFile; + const canUseSourceFile = !!sourceFile && !!node.parent && !nodeIsSynthesized(node); + if (isMemberName(node)) { + if (!canUseSourceFile || getSourceFileOfNode(node) !== getOriginalNode(sourceFile)) { + return idText(node); + } + } else if (isJsxNamespacedName(node)) { + if (!canUseSourceFile || getSourceFileOfNode(node) !== getOriginalNode(sourceFile)) { + return getTextOfJsxNamespacedName(node); + } + } else { + Debug.assertNode(node, isLiteralExpression); + if (!canUseSourceFile) { + return node.text; + } + } + return getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia); + } + function getLiteralTextOfNode(node, sourceFile = currentSourceFile, neverAsciiEscape, jsxAttributeEscape) { + if (node.kind === 11 /* StringLiteral */ && node.textSourceNode) { + const textSourceNode = node.textSourceNode; + if (isIdentifier(textSourceNode) || isPrivateIdentifier(textSourceNode) || isNumericLiteral(textSourceNode) || isJsxNamespacedName(textSourceNode)) { + const text = isNumericLiteral(textSourceNode) ? textSourceNode.text : getTextOfNode2(textSourceNode); + return jsxAttributeEscape ? `"${escapeJsxAttributeString(text)}"` : neverAsciiEscape || getEmitFlags(node) & 16777216 /* NoAsciiEscaping */ ? `"${escapeString(text)}"` : `"${escapeNonAsciiString(text)}"`; + } else { + return getLiteralTextOfNode(textSourceNode, getSourceFileOfNode(textSourceNode), neverAsciiEscape, jsxAttributeEscape); + } + } + const flags = (neverAsciiEscape ? 1 /* NeverAsciiEscape */ : 0) | (jsxAttributeEscape ? 2 /* JsxAttributeEscape */ : 0) | (printerOptions.terminateUnterminatedLiterals ? 4 /* TerminateUnterminatedLiterals */ : 0) | (printerOptions.target && printerOptions.target >= 8 /* ES2021 */ ? 8 /* AllowNumericSeparator */ : 0); + return getLiteralText(node, sourceFile, flags); + } + function pushNameGenerationScope(node) { + privateNameTempFlagsStack.push(privateNameTempFlags); + privateNameTempFlags = 0 /* Auto */; + reservedPrivateNamesStack.push(reservedPrivateNames); + if (node && getEmitFlags(node) & 1048576 /* ReuseTempVariableScope */) { + return; + } + tempFlagsStack.push(tempFlags); + tempFlags = 0 /* Auto */; + formattedNameTempFlagsStack.push(formattedNameTempFlags); + formattedNameTempFlags = void 0; + reservedNamesStack.push(reservedNames); + } + function popNameGenerationScope(node) { + privateNameTempFlags = privateNameTempFlagsStack.pop(); + reservedPrivateNames = reservedPrivateNamesStack.pop(); + if (node && getEmitFlags(node) & 1048576 /* ReuseTempVariableScope */) { + return; + } + tempFlags = tempFlagsStack.pop(); + formattedNameTempFlags = formattedNameTempFlagsStack.pop(); + reservedNames = reservedNamesStack.pop(); + } + function reserveNameInNestedScopes(name) { + if (!reservedNames || reservedNames === lastOrUndefined(reservedNamesStack)) { + reservedNames = /* @__PURE__ */ new Set(); + } + reservedNames.add(name); + } + function reservePrivateNameInNestedScopes(name) { + if (!reservedPrivateNames || reservedPrivateNames === lastOrUndefined(reservedPrivateNamesStack)) { + reservedPrivateNames = /* @__PURE__ */ new Set(); + } + reservedPrivateNames.add(name); + } + function generateNames(node) { + if (!node) return; + switch (node.kind) { + case 242 /* Block */: + forEach(node.statements, generateNames); + break; + case 257 /* LabeledStatement */: + case 255 /* WithStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + generateNames(node.statement); + break; + case 246 /* IfStatement */: + generateNames(node.thenStatement); + generateNames(node.elseStatement); + break; + case 249 /* ForStatement */: + case 251 /* ForOfStatement */: + case 250 /* ForInStatement */: + generateNames(node.initializer); + generateNames(node.statement); + break; + case 256 /* SwitchStatement */: + generateNames(node.caseBlock); + break; + case 270 /* CaseBlock */: + forEach(node.clauses, generateNames); + break; + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + forEach(node.statements, generateNames); + break; + case 259 /* TryStatement */: + generateNames(node.tryBlock); + generateNames(node.catchClause); + generateNames(node.finallyBlock); + break; + case 300 /* CatchClause */: + generateNames(node.variableDeclaration); + generateNames(node.block); + break; + case 244 /* VariableStatement */: + generateNames(node.declarationList); + break; + case 262 /* VariableDeclarationList */: + forEach(node.declarations, generateNames); + break; + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 264 /* ClassDeclaration */: + generateNameIfNeeded(node.name); + break; + case 263 /* FunctionDeclaration */: + generateNameIfNeeded(node.name); + if (getEmitFlags(node) & 1048576 /* ReuseTempVariableScope */) { + forEach(node.parameters, generateNames); + generateNames(node.body); + } + break; + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + forEach(node.elements, generateNames); + break; + case 273 /* ImportDeclaration */: + generateNames(node.importClause); + break; + case 274 /* ImportClause */: + generateNameIfNeeded(node.name); + generateNames(node.namedBindings); + break; + case 275 /* NamespaceImport */: + generateNameIfNeeded(node.name); + break; + case 281 /* NamespaceExport */: + generateNameIfNeeded(node.name); + break; + case 276 /* NamedImports */: + forEach(node.elements, generateNames); + break; + case 277 /* ImportSpecifier */: + generateNameIfNeeded(node.propertyName || node.name); + break; + } + } + function generateMemberNames(node) { + if (!node) return; + switch (node.kind) { + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + generateNameIfNeeded(node.name); + break; + } + } + function generateNameIfNeeded(name) { + if (name) { + if (isGeneratedIdentifier(name) || isGeneratedPrivateIdentifier(name)) { + generateName(name); + } else if (isBindingPattern(name)) { + generateNames(name); + } + } + } + function generateName(name) { + const autoGenerate = name.emitNode.autoGenerate; + if ((autoGenerate.flags & 7 /* KindMask */) === 4 /* Node */) { + return generateNameCached(getNodeForGeneratedName(name), isPrivateIdentifier(name), autoGenerate.flags, autoGenerate.prefix, autoGenerate.suffix); + } else { + const autoGenerateId = autoGenerate.id; + return autoGeneratedIdToGeneratedName[autoGenerateId] || (autoGeneratedIdToGeneratedName[autoGenerateId] = makeName(name)); + } + } + function generateNameCached(node, privateName, flags, prefix, suffix) { + const nodeId = getNodeId(node); + const cache = privateName ? nodeIdToGeneratedPrivateName : nodeIdToGeneratedName; + return cache[nodeId] || (cache[nodeId] = generateNameForNode(node, privateName, flags ?? 0 /* None */, formatGeneratedNamePart(prefix, generateName), formatGeneratedNamePart(suffix))); + } + function isUniqueName(name, privateName) { + return isFileLevelUniqueNameInCurrentFile(name, privateName) && !isReservedName(name, privateName) && !generatedNames.has(name); + } + function isReservedName(name, privateName) { + let set; + let stack; + if (privateName) { + set = reservedPrivateNames; + stack = reservedPrivateNamesStack; + } else { + set = reservedNames; + stack = reservedNamesStack; + } + if (set == null ? void 0 : set.has(name)) { + return true; + } + for (let i = stack.length - 1; i >= 0; i--) { + if (set === stack[i]) { + continue; + } + set = stack[i]; + if (set == null ? void 0 : set.has(name)) { + return true; + } + } + return false; + } + function isFileLevelUniqueNameInCurrentFile(name, _isPrivate) { + return currentSourceFile ? isFileLevelUniqueName(currentSourceFile, name, hasGlobalName) : true; + } + function isUniqueLocalName(name, container) { + for (let node = container; node && isNodeDescendantOf(node, container); node = node.nextContainer) { + if (canHaveLocals(node) && node.locals) { + const local = node.locals.get(escapeLeadingUnderscores(name)); + if (local && local.flags & (111551 /* Value */ | 1048576 /* ExportValue */ | 2097152 /* Alias */)) { + return false; + } + } + } + return true; + } + function getTempFlags(formattedNameKey) { + switch (formattedNameKey) { + case "": + return tempFlags; + case "#": + return privateNameTempFlags; + default: + return (formattedNameTempFlags == null ? void 0 : formattedNameTempFlags.get(formattedNameKey)) ?? 0 /* Auto */; + } + } + function setTempFlags(formattedNameKey, flags) { + switch (formattedNameKey) { + case "": + tempFlags = flags; + break; + case "#": + privateNameTempFlags = flags; + break; + default: + formattedNameTempFlags ?? (formattedNameTempFlags = /* @__PURE__ */ new Map()); + formattedNameTempFlags.set(formattedNameKey, flags); + break; + } + } + function makeTempVariableName(flags, reservedInNestedScopes, privateName, prefix, suffix) { + if (prefix.length > 0 && prefix.charCodeAt(0) === 35 /* hash */) { + prefix = prefix.slice(1); + } + const key = formatGeneratedName(privateName, prefix, "", suffix); + let tempFlags2 = getTempFlags(key); + if (flags && !(tempFlags2 & flags)) { + const name = flags === 268435456 /* _i */ ? "_i" : "_n"; + const fullName = formatGeneratedName(privateName, prefix, name, suffix); + if (isUniqueName(fullName, privateName)) { + tempFlags2 |= flags; + if (privateName) { + reservePrivateNameInNestedScopes(fullName); + } else if (reservedInNestedScopes) { + reserveNameInNestedScopes(fullName); + } + setTempFlags(key, tempFlags2); + return fullName; + } + } + while (true) { + const count = tempFlags2 & 268435455 /* CountMask */; + tempFlags2++; + if (count !== 8 && count !== 13) { + const name = count < 26 ? "_" + String.fromCharCode(97 /* a */ + count) : "_" + (count - 26); + const fullName = formatGeneratedName(privateName, prefix, name, suffix); + if (isUniqueName(fullName, privateName)) { + if (privateName) { + reservePrivateNameInNestedScopes(fullName); + } else if (reservedInNestedScopes) { + reserveNameInNestedScopes(fullName); + } + setTempFlags(key, tempFlags2); + return fullName; + } + } + } + } + function makeUniqueName2(baseName, checkFn = isUniqueName, optimistic, scoped, privateName, prefix, suffix) { + if (baseName.length > 0 && baseName.charCodeAt(0) === 35 /* hash */) { + baseName = baseName.slice(1); + } + if (prefix.length > 0 && prefix.charCodeAt(0) === 35 /* hash */) { + prefix = prefix.slice(1); + } + if (optimistic) { + const fullName = formatGeneratedName(privateName, prefix, baseName, suffix); + if (checkFn(fullName, privateName)) { + if (privateName) { + reservePrivateNameInNestedScopes(fullName); + } else if (scoped) { + reserveNameInNestedScopes(fullName); + } else { + generatedNames.add(fullName); + } + return fullName; + } + } + if (baseName.charCodeAt(baseName.length - 1) !== 95 /* _ */) { + baseName += "_"; + } + let i = 1; + while (true) { + const fullName = formatGeneratedName(privateName, prefix, baseName + i, suffix); + if (checkFn(fullName, privateName)) { + if (privateName) { + reservePrivateNameInNestedScopes(fullName); + } else if (scoped) { + reserveNameInNestedScopes(fullName); + } else { + generatedNames.add(fullName); + } + return fullName; + } + i++; + } + } + function makeFileLevelOptimisticUniqueName(name) { + return makeUniqueName2( + name, + isFileLevelUniqueNameInCurrentFile, + /*optimistic*/ + true, + /*scoped*/ + false, + /*privateName*/ + false, + /*prefix*/ + "", + /*suffix*/ + "" + ); + } + function generateNameForModuleOrEnum(node) { + const name = getTextOfNode2(node.name); + return isUniqueLocalName(name, tryCast(node, canHaveLocals)) ? name : makeUniqueName2( + name, + isUniqueName, + /*optimistic*/ + false, + /*scoped*/ + false, + /*privateName*/ + false, + /*prefix*/ + "", + /*suffix*/ + "" + ); + } + function generateNameForImportOrExportDeclaration(node) { + const expr = getExternalModuleName(node); + const baseName = isStringLiteral(expr) ? makeIdentifierFromModuleName(expr.text) : "module"; + return makeUniqueName2( + baseName, + isUniqueName, + /*optimistic*/ + false, + /*scoped*/ + false, + /*privateName*/ + false, + /*prefix*/ + "", + /*suffix*/ + "" + ); + } + function generateNameForExportDefault() { + return makeUniqueName2( + "default", + isUniqueName, + /*optimistic*/ + false, + /*scoped*/ + false, + /*privateName*/ + false, + /*prefix*/ + "", + /*suffix*/ + "" + ); + } + function generateNameForClassExpression() { + return makeUniqueName2( + "class", + isUniqueName, + /*optimistic*/ + false, + /*scoped*/ + false, + /*privateName*/ + false, + /*prefix*/ + "", + /*suffix*/ + "" + ); + } + function generateNameForMethodOrAccessor(node, privateName, prefix, suffix) { + if (isIdentifier(node.name)) { + return generateNameCached(node.name, privateName); + } + return makeTempVariableName( + 0 /* Auto */, + /*reservedInNestedScopes*/ + false, + privateName, + prefix, + suffix + ); + } + function generateNameForNode(node, privateName, flags, prefix, suffix) { + switch (node.kind) { + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + return makeUniqueName2( + getTextOfNode2(node), + isUniqueName, + !!(flags & 16 /* Optimistic */), + !!(flags & 8 /* ReservedInNestedScopes */), + privateName, + prefix, + suffix + ); + case 268 /* ModuleDeclaration */: + case 267 /* EnumDeclaration */: + Debug.assert(!prefix && !suffix && !privateName); + return generateNameForModuleOrEnum(node); + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + Debug.assert(!prefix && !suffix && !privateName); + return generateNameForImportOrExportDeclaration(node); + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: { + Debug.assert(!prefix && !suffix && !privateName); + const name = node.name; + if (name && !isGeneratedIdentifier(name)) { + return generateNameForNode( + name, + /*privateName*/ + false, + flags, + prefix, + suffix + ); + } + return generateNameForExportDefault(); + } + case 278 /* ExportAssignment */: + Debug.assert(!prefix && !suffix && !privateName); + return generateNameForExportDefault(); + case 232 /* ClassExpression */: + Debug.assert(!prefix && !suffix && !privateName); + return generateNameForClassExpression(); + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return generateNameForMethodOrAccessor(node, privateName, prefix, suffix); + case 168 /* ComputedPropertyName */: + return makeTempVariableName( + 0 /* Auto */, + /*reservedInNestedScopes*/ + true, + privateName, + prefix, + suffix + ); + default: + return makeTempVariableName( + 0 /* Auto */, + /*reservedInNestedScopes*/ + false, + privateName, + prefix, + suffix + ); + } + } + function makeName(name) { + const autoGenerate = name.emitNode.autoGenerate; + const prefix = formatGeneratedNamePart(autoGenerate.prefix, generateName); + const suffix = formatGeneratedNamePart(autoGenerate.suffix); + switch (autoGenerate.flags & 7 /* KindMask */) { + case 1 /* Auto */: + return makeTempVariableName(0 /* Auto */, !!(autoGenerate.flags & 8 /* ReservedInNestedScopes */), isPrivateIdentifier(name), prefix, suffix); + case 2 /* Loop */: + Debug.assertNode(name, isIdentifier); + return makeTempVariableName( + 268435456 /* _i */, + !!(autoGenerate.flags & 8 /* ReservedInNestedScopes */), + /*privateName*/ + false, + prefix, + suffix + ); + case 3 /* Unique */: + return makeUniqueName2( + idText(name), + autoGenerate.flags & 32 /* FileLevel */ ? isFileLevelUniqueNameInCurrentFile : isUniqueName, + !!(autoGenerate.flags & 16 /* Optimistic */), + !!(autoGenerate.flags & 8 /* ReservedInNestedScopes */), + isPrivateIdentifier(name), + prefix, + suffix + ); + } + return Debug.fail(`Unsupported GeneratedIdentifierKind: ${Debug.formatEnum( + autoGenerate.flags & 7 /* KindMask */, + GeneratedIdentifierFlags, + /*isFlags*/ + true + )}.`); + } + function pipelineEmitWithComments(hint, node) { + const pipelinePhase = getNextPipelinePhase(2 /* Comments */, hint, node); + const savedContainerPos = containerPos; + const savedContainerEnd = containerEnd; + const savedDeclarationListContainerEnd = declarationListContainerEnd; + emitCommentsBeforeNode(node); + pipelinePhase(hint, node); + emitCommentsAfterNode(node, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd); + } + function emitCommentsBeforeNode(node) { + const emitFlags = getEmitFlags(node); + const commentRange = getCommentRange(node); + emitLeadingCommentsOfNode(node, emitFlags, commentRange.pos, commentRange.end); + if (emitFlags & 4096 /* NoNestedComments */) { + commentsDisabled = true; + } + } + function emitCommentsAfterNode(node, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd) { + const emitFlags = getEmitFlags(node); + const commentRange = getCommentRange(node); + if (emitFlags & 4096 /* NoNestedComments */) { + commentsDisabled = false; + } + emitTrailingCommentsOfNode(node, emitFlags, commentRange.pos, commentRange.end, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd); + const typeNode = getTypeNode(node); + if (typeNode) { + emitTrailingCommentsOfNode(node, emitFlags, typeNode.pos, typeNode.end, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd); + } + } + function emitLeadingCommentsOfNode(node, emitFlags, pos, end) { + enterComment(); + hasWrittenComment = false; + const skipLeadingComments = pos < 0 || (emitFlags & 1024 /* NoLeadingComments */) !== 0 || node.kind === 12 /* JsxText */; + const skipTrailingComments = end < 0 || (emitFlags & 2048 /* NoTrailingComments */) !== 0 || node.kind === 12 /* JsxText */; + if ((pos > 0 || end > 0) && pos !== end) { + if (!skipLeadingComments) { + emitLeadingComments( + pos, + /*isEmittedNode*/ + node.kind !== 354 /* NotEmittedStatement */ + ); + } + if (!skipLeadingComments || pos >= 0 && (emitFlags & 1024 /* NoLeadingComments */) !== 0) { + containerPos = pos; + } + if (!skipTrailingComments || end >= 0 && (emitFlags & 2048 /* NoTrailingComments */) !== 0) { + containerEnd = end; + if (node.kind === 262 /* VariableDeclarationList */) { + declarationListContainerEnd = end; + } + } + } + forEach(getSyntheticLeadingComments(node), emitLeadingSynthesizedComment); + exitComment(); + } + function emitTrailingCommentsOfNode(node, emitFlags, pos, end, savedContainerPos, savedContainerEnd, savedDeclarationListContainerEnd) { + enterComment(); + const skipTrailingComments = end < 0 || (emitFlags & 2048 /* NoTrailingComments */) !== 0 || node.kind === 12 /* JsxText */; + forEach(getSyntheticTrailingComments(node), emitTrailingSynthesizedComment); + if ((pos > 0 || end > 0) && pos !== end) { + containerPos = savedContainerPos; + containerEnd = savedContainerEnd; + declarationListContainerEnd = savedDeclarationListContainerEnd; + if (!skipTrailingComments && node.kind !== 354 /* NotEmittedStatement */) { + emitTrailingComments(end); + } + } + exitComment(); + } + function emitLeadingSynthesizedComment(comment) { + if (comment.hasLeadingNewline || comment.kind === 2 /* SingleLineCommentTrivia */) { + writer.writeLine(); + } + writeSynthesizedComment(comment); + if (comment.hasTrailingNewLine || comment.kind === 2 /* SingleLineCommentTrivia */) { + writer.writeLine(); + } else { + writer.writeSpace(" "); + } + } + function emitTrailingSynthesizedComment(comment) { + if (!writer.isAtStartOfLine()) { + writer.writeSpace(" "); + } + writeSynthesizedComment(comment); + if (comment.hasTrailingNewLine) { + writer.writeLine(); + } + } + function writeSynthesizedComment(comment) { + const text = formatSynthesizedComment(comment); + const lineMap = comment.kind === 3 /* MultiLineCommentTrivia */ ? computeLineStarts(text) : void 0; + writeCommentRange(text, lineMap, writer, 0, text.length, newLine); + } + function formatSynthesizedComment(comment) { + return comment.kind === 3 /* MultiLineCommentTrivia */ ? `/*${comment.text}*/` : `//${comment.text}`; + } + function emitBodyWithDetachedComments(node, detachedRange, emitCallback) { + enterComment(); + const { pos, end } = detachedRange; + const emitFlags = getEmitFlags(node); + const skipLeadingComments = pos < 0 || (emitFlags & 1024 /* NoLeadingComments */) !== 0; + const skipTrailingComments = commentsDisabled || end < 0 || (emitFlags & 2048 /* NoTrailingComments */) !== 0; + if (!skipLeadingComments) { + emitDetachedCommentsAndUpdateCommentsInfo(detachedRange); + } + exitComment(); + if (emitFlags & 4096 /* NoNestedComments */ && !commentsDisabled) { + commentsDisabled = true; + emitCallback(node); + commentsDisabled = false; + } else { + emitCallback(node); + } + enterComment(); + if (!skipTrailingComments) { + emitLeadingComments( + detachedRange.end, + /*isEmittedNode*/ + true + ); + if (hasWrittenComment && !writer.isAtStartOfLine()) { + writer.writeLine(); + } + } + exitComment(); + } + function originalNodesHaveSameParent(nodeA, nodeB) { + nodeA = getOriginalNode(nodeA); + return nodeA.parent && nodeA.parent === getOriginalNode(nodeB).parent; + } + function siblingNodePositionsAreComparable(previousNode, nextNode) { + if (nextNode.pos < previousNode.end) { + return false; + } + previousNode = getOriginalNode(previousNode); + nextNode = getOriginalNode(nextNode); + const parent2 = previousNode.parent; + if (!parent2 || parent2 !== nextNode.parent) { + return false; + } + const parentNodeArray = getContainingNodeArray(previousNode); + const prevNodeIndex = parentNodeArray == null ? void 0 : parentNodeArray.indexOf(previousNode); + return prevNodeIndex !== void 0 && prevNodeIndex > -1 && parentNodeArray.indexOf(nextNode) === prevNodeIndex + 1; + } + function emitLeadingComments(pos, isEmittedNode) { + hasWrittenComment = false; + if (isEmittedNode) { + if (pos === 0 && (currentSourceFile == null ? void 0 : currentSourceFile.isDeclarationFile)) { + forEachLeadingCommentToEmit(pos, emitNonTripleSlashLeadingComment); + } else { + forEachLeadingCommentToEmit(pos, emitLeadingComment); + } + } else if (pos === 0) { + forEachLeadingCommentToEmit(pos, emitTripleSlashLeadingComment); + } + } + function emitTripleSlashLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos) { + if (isTripleSlashComment(commentPos, commentEnd)) { + emitLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos); + } + } + function emitNonTripleSlashLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos) { + if (!isTripleSlashComment(commentPos, commentEnd)) { + emitLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos); + } + } + function shouldWriteComment(text, pos) { + if (printerOptions.onlyPrintJsDocStyle) { + return isJSDocLikeText(text, pos) || isPinnedComment(text, pos); + } + return true; + } + function emitLeadingComment(commentPos, commentEnd, kind, hasTrailingNewLine, rangePos) { + if (!currentSourceFile || !shouldWriteComment(currentSourceFile.text, commentPos)) return; + if (!hasWrittenComment) { + emitNewLineBeforeLeadingCommentOfPosition(getCurrentLineMap(), writer, rangePos, commentPos); + hasWrittenComment = true; + } + emitPos(commentPos); + writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine); + emitPos(commentEnd); + if (hasTrailingNewLine) { + writer.writeLine(); + } else if (kind === 3 /* MultiLineCommentTrivia */) { + writer.writeSpace(" "); + } + } + function emitLeadingCommentsOfPosition(pos) { + if (commentsDisabled || pos === -1) { + return; + } + emitLeadingComments( + pos, + /*isEmittedNode*/ + true + ); + } + function emitTrailingComments(pos) { + forEachTrailingCommentToEmit(pos, emitTrailingComment); + } + function emitTrailingComment(commentPos, commentEnd, _kind, hasTrailingNewLine) { + if (!currentSourceFile || !shouldWriteComment(currentSourceFile.text, commentPos)) return; + if (!writer.isAtStartOfLine()) { + writer.writeSpace(" "); + } + emitPos(commentPos); + writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine); + emitPos(commentEnd); + if (hasTrailingNewLine) { + writer.writeLine(); + } + } + function emitTrailingCommentsOfPosition(pos, prefixSpace, forceNoNewline) { + if (commentsDisabled) { + return; + } + enterComment(); + forEachTrailingCommentToEmit(pos, prefixSpace ? emitTrailingComment : forceNoNewline ? emitTrailingCommentOfPositionNoNewline : emitTrailingCommentOfPosition); + exitComment(); + } + function emitTrailingCommentOfPositionNoNewline(commentPos, commentEnd, kind) { + if (!currentSourceFile) return; + emitPos(commentPos); + writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine); + emitPos(commentEnd); + if (kind === 2 /* SingleLineCommentTrivia */) { + writer.writeLine(); + } + } + function emitTrailingCommentOfPosition(commentPos, commentEnd, _kind, hasTrailingNewLine) { + if (!currentSourceFile) return; + emitPos(commentPos); + writeCommentRange(currentSourceFile.text, getCurrentLineMap(), writer, commentPos, commentEnd, newLine); + emitPos(commentEnd); + if (hasTrailingNewLine) { + writer.writeLine(); + } else { + writer.writeSpace(" "); + } + } + function forEachLeadingCommentToEmit(pos, cb) { + if (currentSourceFile && (containerPos === -1 || pos !== containerPos)) { + if (hasDetachedComments(pos)) { + forEachLeadingCommentWithoutDetachedComments(cb); + } else { + forEachLeadingCommentRange( + currentSourceFile.text, + pos, + cb, + /*state*/ + pos + ); + } + } + } + function forEachTrailingCommentToEmit(end, cb) { + if (currentSourceFile && (containerEnd === -1 || end !== containerEnd && end !== declarationListContainerEnd)) { + forEachTrailingCommentRange(currentSourceFile.text, end, cb); + } + } + function hasDetachedComments(pos) { + return detachedCommentsInfo !== void 0 && last(detachedCommentsInfo).nodePos === pos; + } + function forEachLeadingCommentWithoutDetachedComments(cb) { + if (!currentSourceFile) return; + const pos = last(detachedCommentsInfo).detachedCommentEndPos; + if (detachedCommentsInfo.length - 1) { + detachedCommentsInfo.pop(); + } else { + detachedCommentsInfo = void 0; + } + forEachLeadingCommentRange( + currentSourceFile.text, + pos, + cb, + /*state*/ + pos + ); + } + function emitDetachedCommentsAndUpdateCommentsInfo(range) { + const currentDetachedCommentInfo = currentSourceFile && emitDetachedComments(currentSourceFile.text, getCurrentLineMap(), writer, emitComment, range, newLine, commentsDisabled); + if (currentDetachedCommentInfo) { + if (detachedCommentsInfo) { + detachedCommentsInfo.push(currentDetachedCommentInfo); + } else { + detachedCommentsInfo = [currentDetachedCommentInfo]; + } + } + } + function emitComment(text, lineMap, writer2, commentPos, commentEnd, newLine2) { + if (!currentSourceFile || !shouldWriteComment(currentSourceFile.text, commentPos)) return; + emitPos(commentPos); + writeCommentRange(text, lineMap, writer2, commentPos, commentEnd, newLine2); + emitPos(commentEnd); + } + function isTripleSlashComment(commentPos, commentEnd) { + return !!currentSourceFile && isRecognizedTripleSlashComment(currentSourceFile.text, commentPos, commentEnd); + } + function pipelineEmitWithSourceMaps(hint, node) { + const pipelinePhase = getNextPipelinePhase(3 /* SourceMaps */, hint, node); + emitSourceMapsBeforeNode(node); + pipelinePhase(hint, node); + emitSourceMapsAfterNode(node); + } + function emitSourceMapsBeforeNode(node) { + const emitFlags = getEmitFlags(node); + const sourceMapRange = getSourceMapRange(node); + const source = sourceMapRange.source || sourceMapSource; + if (node.kind !== 354 /* NotEmittedStatement */ && (emitFlags & 32 /* NoLeadingSourceMap */) === 0 && sourceMapRange.pos >= 0) { + emitSourcePos(sourceMapRange.source || sourceMapSource, skipSourceTrivia(source, sourceMapRange.pos)); + } + if (emitFlags & 128 /* NoNestedSourceMaps */) { + sourceMapsDisabled = true; + } + } + function emitSourceMapsAfterNode(node) { + const emitFlags = getEmitFlags(node); + const sourceMapRange = getSourceMapRange(node); + if (emitFlags & 128 /* NoNestedSourceMaps */) { + sourceMapsDisabled = false; + } + if (node.kind !== 354 /* NotEmittedStatement */ && (emitFlags & 64 /* NoTrailingSourceMap */) === 0 && sourceMapRange.end >= 0) { + emitSourcePos(sourceMapRange.source || sourceMapSource, sourceMapRange.end); + } + } + function skipSourceTrivia(source, pos) { + return source.skipTrivia ? source.skipTrivia(pos) : skipTrivia(source.text, pos); + } + function emitPos(pos) { + if (sourceMapsDisabled || positionIsSynthesized(pos) || isJsonSourceMapSource(sourceMapSource)) { + return; + } + const { line: sourceLine, character: sourceCharacter } = getLineAndCharacterOfPosition(sourceMapSource, pos); + sourceMapGenerator.addMapping( + writer.getLine(), + writer.getColumn(), + sourceMapSourceIndex, + sourceLine, + sourceCharacter, + /*nameIndex*/ + void 0 + ); + } + function emitSourcePos(source, pos) { + if (source !== sourceMapSource) { + const savedSourceMapSource = sourceMapSource; + const savedSourceMapSourceIndex = sourceMapSourceIndex; + setSourceMapSource(source); + emitPos(pos); + resetSourceMapSource(savedSourceMapSource, savedSourceMapSourceIndex); + } else { + emitPos(pos); + } + } + function emitTokenWithSourceMap(node, token, writer2, tokenPos, emitCallback) { + if (sourceMapsDisabled || node && isInJsonFile(node)) { + return emitCallback(token, writer2, tokenPos); + } + const emitNode = node && node.emitNode; + const emitFlags = emitNode && emitNode.flags || 0 /* None */; + const range = emitNode && emitNode.tokenSourceMapRanges && emitNode.tokenSourceMapRanges[token]; + const source = range && range.source || sourceMapSource; + tokenPos = skipSourceTrivia(source, range ? range.pos : tokenPos); + if ((emitFlags & 256 /* NoTokenLeadingSourceMaps */) === 0 && tokenPos >= 0) { + emitSourcePos(source, tokenPos); + } + tokenPos = emitCallback(token, writer2, tokenPos); + if (range) tokenPos = range.end; + if ((emitFlags & 512 /* NoTokenTrailingSourceMaps */) === 0 && tokenPos >= 0) { + emitSourcePos(source, tokenPos); + } + return tokenPos; + } + function setSourceMapSource(source) { + if (sourceMapsDisabled) { + return; + } + sourceMapSource = source; + if (source === mostRecentlyAddedSourceMapSource) { + sourceMapSourceIndex = mostRecentlyAddedSourceMapSourceIndex; + return; + } + if (isJsonSourceMapSource(source)) { + return; + } + sourceMapSourceIndex = sourceMapGenerator.addSource(source.fileName); + if (printerOptions.inlineSources) { + sourceMapGenerator.setSourceContent(sourceMapSourceIndex, source.text); + } + mostRecentlyAddedSourceMapSource = source; + mostRecentlyAddedSourceMapSourceIndex = sourceMapSourceIndex; + } + function resetSourceMapSource(source, sourceIndex) { + sourceMapSource = source; + sourceMapSourceIndex = sourceIndex; + } + function isJsonSourceMapSource(sourceFile) { + return fileExtensionIs(sourceFile.fileName, ".json" /* Json */); + } +} +function createBracketsMap() { + const brackets2 = []; + brackets2[1024 /* Braces */] = ["{", "}"]; + brackets2[2048 /* Parenthesis */] = ["(", ")"]; + brackets2[4096 /* AngleBrackets */] = ["<", ">"]; + brackets2[8192 /* SquareBrackets */] = ["[", "]"]; + return brackets2; +} +function getOpeningBracket(format) { + return brackets[format & 15360 /* BracketsMask */][0]; +} +function getClosingBracket(format) { + return brackets[format & 15360 /* BracketsMask */][1]; +} +function emitListItemNoParenthesizer(node, emit, _parenthesizerRule, _index) { + emit(node); +} +function emitListItemWithParenthesizerRuleSelector(node, emit, parenthesizerRuleSelector, index) { + emit(node, parenthesizerRuleSelector.select(index)); +} +function emitListItemWithParenthesizerRule(node, emit, parenthesizerRule, _index) { + emit(node, parenthesizerRule); +} +function getEmitListItem(emit, parenthesizerRule) { + return emit.length === 1 ? emitListItemNoParenthesizer : typeof parenthesizerRule === "object" ? emitListItemWithParenthesizerRuleSelector : emitListItemWithParenthesizerRule; +} + +// src/compiler/watchUtilities.ts +function createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames2) { + if (!host.getDirectories || !host.readDirectory) { + return void 0; + } + const cachedReadDirectoryResult = /* @__PURE__ */ new Map(); + const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames2); + return { + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + fileExists, + readFile: (path, encoding) => host.readFile(path, encoding), + directoryExists: host.directoryExists && directoryExists, + getDirectories, + readDirectory, + createDirectory: host.createDirectory && createDirectory, + writeFile: host.writeFile && writeFile2, + addOrDeleteFileOrDirectory, + addOrDeleteFile, + clearCache, + realpath: host.realpath && realpath + }; + function toPath3(fileName) { + return toPath(fileName, currentDirectory, getCanonicalFileName); + } + function getCachedFileSystemEntries(rootDirPath) { + return cachedReadDirectoryResult.get(ensureTrailingDirectorySeparator(rootDirPath)); + } + function getCachedFileSystemEntriesForBaseDir(path) { + const entries = getCachedFileSystemEntries(getDirectoryPath(path)); + if (!entries) { + return entries; + } + if (!entries.sortedAndCanonicalizedFiles) { + entries.sortedAndCanonicalizedFiles = entries.files.map(getCanonicalFileName).sort(); + entries.sortedAndCanonicalizedDirectories = entries.directories.map(getCanonicalFileName).sort(); + } + return entries; + } + function getBaseNameOfFileName(fileName) { + return getBaseFileName(normalizePath(fileName)); + } + function createCachedFileSystemEntries(rootDir, rootDirPath) { + var _a; + if (!host.realpath || ensureTrailingDirectorySeparator(toPath3(host.realpath(rootDir))) === rootDirPath) { + const resultFromHost = { + files: map(host.readDirectory( + rootDir, + /*extensions*/ + void 0, + /*exclude*/ + void 0, + /*include*/ + ["*.*"] + ), getBaseNameOfFileName) || [], + directories: host.getDirectories(rootDir) || [] + }; + cachedReadDirectoryResult.set(ensureTrailingDirectorySeparator(rootDirPath), resultFromHost); + return resultFromHost; + } + if ((_a = host.directoryExists) == null ? void 0 : _a.call(host, rootDir)) { + cachedReadDirectoryResult.set(rootDirPath, false); + return false; + } + return void 0; + } + function tryReadDirectory2(rootDir, rootDirPath) { + rootDirPath = ensureTrailingDirectorySeparator(rootDirPath); + const cachedResult = getCachedFileSystemEntries(rootDirPath); + if (cachedResult) { + return cachedResult; + } + try { + return createCachedFileSystemEntries(rootDir, rootDirPath); + } catch { + Debug.assert(!cachedReadDirectoryResult.has(ensureTrailingDirectorySeparator(rootDirPath))); + return void 0; + } + } + function hasEntry(entries, name) { + const index = binarySearch(entries, name, identity, compareStringsCaseSensitive); + return index >= 0; + } + function writeFile2(fileName, data, writeByteOrderMark) { + const path = toPath3(fileName); + const result = getCachedFileSystemEntriesForBaseDir(path); + if (result) { + updateFilesOfFileSystemEntry( + result, + getBaseNameOfFileName(fileName), + /*fileExists*/ + true + ); + } + return host.writeFile(fileName, data, writeByteOrderMark); + } + function fileExists(fileName) { + const path = toPath3(fileName); + const result = getCachedFileSystemEntriesForBaseDir(path); + return result && hasEntry(result.sortedAndCanonicalizedFiles, getCanonicalFileName(getBaseNameOfFileName(fileName))) || host.fileExists(fileName); + } + function directoryExists(dirPath) { + const path = toPath3(dirPath); + return cachedReadDirectoryResult.has(ensureTrailingDirectorySeparator(path)) || host.directoryExists(dirPath); + } + function createDirectory(dirPath) { + const path = toPath3(dirPath); + const result = getCachedFileSystemEntriesForBaseDir(path); + if (result) { + const baseName = getBaseNameOfFileName(dirPath); + const canonicalizedBaseName = getCanonicalFileName(baseName); + const canonicalizedDirectories = result.sortedAndCanonicalizedDirectories; + if (insertSorted(canonicalizedDirectories, canonicalizedBaseName, compareStringsCaseSensitive)) { + result.directories.push(baseName); + } + } + host.createDirectory(dirPath); + } + function getDirectories(rootDir) { + const rootDirPath = toPath3(rootDir); + const result = tryReadDirectory2(rootDir, rootDirPath); + if (result) { + return result.directories.slice(); + } + return host.getDirectories(rootDir); + } + function readDirectory(rootDir, extensions, excludes, includes, depth) { + const rootDirPath = toPath3(rootDir); + const rootResult = tryReadDirectory2(rootDir, rootDirPath); + let rootSymLinkResult; + if (rootResult !== void 0) { + return matchFiles(rootDir, extensions, excludes, includes, useCaseSensitiveFileNames2, currentDirectory, depth, getFileSystemEntries, realpath); + } + return host.readDirectory(rootDir, extensions, excludes, includes, depth); + function getFileSystemEntries(dir) { + const path = toPath3(dir); + if (path === rootDirPath) { + return rootResult || getFileSystemEntriesFromHost(dir, path); + } + const result = tryReadDirectory2(dir, path); + return result !== void 0 ? result || getFileSystemEntriesFromHost(dir, path) : emptyFileSystemEntries; + } + function getFileSystemEntriesFromHost(dir, path) { + if (rootSymLinkResult && path === rootDirPath) return rootSymLinkResult; + const result = { + files: map(host.readDirectory( + dir, + /*extensions*/ + void 0, + /*exclude*/ + void 0, + /*include*/ + ["*.*"] + ), getBaseNameOfFileName) || emptyArray, + directories: host.getDirectories(dir) || emptyArray + }; + if (path === rootDirPath) rootSymLinkResult = result; + return result; + } + } + function realpath(s) { + return host.realpath ? host.realpath(s) : s; + } + function clearFirstAncestorEntry(fileOrDirectoryPath) { + forEachAncestorDirectory( + getDirectoryPath(fileOrDirectoryPath), + (ancestor) => cachedReadDirectoryResult.delete(ensureTrailingDirectorySeparator(ancestor)) ? true : void 0 + ); + } + function addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath) { + const existingResult = getCachedFileSystemEntries(fileOrDirectoryPath); + if (existingResult !== void 0) { + clearCache(); + return void 0; + } + const parentResult = getCachedFileSystemEntriesForBaseDir(fileOrDirectoryPath); + if (!parentResult) { + clearFirstAncestorEntry(fileOrDirectoryPath); + return void 0; + } + if (!host.directoryExists) { + clearCache(); + return void 0; + } + const baseName = getBaseNameOfFileName(fileOrDirectory); + const fsQueryResult = { + fileExists: host.fileExists(fileOrDirectory), + directoryExists: host.directoryExists(fileOrDirectory) + }; + if (fsQueryResult.directoryExists || hasEntry(parentResult.sortedAndCanonicalizedDirectories, getCanonicalFileName(baseName))) { + clearCache(); + } else { + updateFilesOfFileSystemEntry(parentResult, baseName, fsQueryResult.fileExists); + } + return fsQueryResult; + } + function addOrDeleteFile(fileName, filePath, eventKind) { + if (eventKind === 1 /* Changed */) { + return; + } + const parentResult = getCachedFileSystemEntriesForBaseDir(filePath); + if (parentResult) { + updateFilesOfFileSystemEntry(parentResult, getBaseNameOfFileName(fileName), eventKind === 0 /* Created */); + } else { + clearFirstAncestorEntry(filePath); + } + } + function updateFilesOfFileSystemEntry(parentResult, baseName, fileExists2) { + const canonicalizedFiles = parentResult.sortedAndCanonicalizedFiles; + const canonicalizedBaseName = getCanonicalFileName(baseName); + if (fileExists2) { + if (insertSorted(canonicalizedFiles, canonicalizedBaseName, compareStringsCaseSensitive)) { + parentResult.files.push(baseName); + } + } else { + const sortedIndex = binarySearch(canonicalizedFiles, canonicalizedBaseName, identity, compareStringsCaseSensitive); + if (sortedIndex >= 0) { + canonicalizedFiles.splice(sortedIndex, 1); + const unsortedIndex = parentResult.files.findIndex((entry) => getCanonicalFileName(entry) === canonicalizedBaseName); + parentResult.files.splice(unsortedIndex, 1); + } + } + } + function clearCache() { + cachedReadDirectoryResult.clear(); + } +} +var ProgramUpdateLevel = /* @__PURE__ */ ((ProgramUpdateLevel2) => { + ProgramUpdateLevel2[ProgramUpdateLevel2["Update"] = 0] = "Update"; + ProgramUpdateLevel2[ProgramUpdateLevel2["RootNamesAndUpdate"] = 1] = "RootNamesAndUpdate"; + ProgramUpdateLevel2[ProgramUpdateLevel2["Full"] = 2] = "Full"; + return ProgramUpdateLevel2; +})(ProgramUpdateLevel || {}); +function updateSharedExtendedConfigFileWatcher(projectPath, options, extendedConfigFilesMap, createExtendedConfigFileWatch, toPath3) { + var _a; + const extendedConfigs = arrayToMap(((_a = options == null ? void 0 : options.configFile) == null ? void 0 : _a.extendedSourceFiles) || emptyArray, toPath3); + extendedConfigFilesMap.forEach((watcher, extendedConfigFilePath) => { + if (!extendedConfigs.has(extendedConfigFilePath)) { + watcher.projects.delete(projectPath); + watcher.close(); + } + }); + extendedConfigs.forEach((extendedConfigFileName, extendedConfigFilePath) => { + const existing = extendedConfigFilesMap.get(extendedConfigFilePath); + if (existing) { + existing.projects.add(projectPath); + } else { + extendedConfigFilesMap.set(extendedConfigFilePath, { + projects: /* @__PURE__ */ new Set([projectPath]), + watcher: createExtendedConfigFileWatch(extendedConfigFileName, extendedConfigFilePath), + close: () => { + const existing2 = extendedConfigFilesMap.get(extendedConfigFilePath); + if (!existing2 || existing2.projects.size !== 0) return; + existing2.watcher.close(); + extendedConfigFilesMap.delete(extendedConfigFilePath); + } + }); + } + }); +} +function clearSharedExtendedConfigFileWatcher(projectPath, extendedConfigFilesMap) { + extendedConfigFilesMap.forEach((watcher) => { + if (watcher.projects.delete(projectPath)) watcher.close(); + }); +} +function cleanExtendedConfigCache(extendedConfigCache, extendedConfigFilePath, toPath3) { + if (!extendedConfigCache.delete(extendedConfigFilePath)) return; + extendedConfigCache.forEach(({ extendedResult }, key) => { + var _a; + if ((_a = extendedResult.extendedSourceFiles) == null ? void 0 : _a.some((extendedFile) => toPath3(extendedFile) === extendedConfigFilePath)) { + cleanExtendedConfigCache(extendedConfigCache, key, toPath3); + } + }); +} +function updateMissingFilePathsWatch(program, missingFileWatches, createMissingFileWatch) { + mutateMap( + missingFileWatches, + program.getMissingFilePaths(), + { + // Watch the missing files + createNewValue: createMissingFileWatch, + // Files that are no longer missing (e.g. because they are no longer required) + // should no longer be watched. + onDeleteValue: closeFileWatcher + } + ); +} +function updateWatchingWildcardDirectories(existingWatchedForWildcards, wildcardDirectories, watchDirectory) { + if (wildcardDirectories) { + mutateMap( + existingWatchedForWildcards, + new Map(Object.entries(wildcardDirectories)), + { + // Create new watch and recursive info + createNewValue: createWildcardDirectoryWatcher, + // Close existing watch thats not needed any more + onDeleteValue: closeFileWatcherOf, + // Close existing watch that doesnt match in the flags + onExistingValue: updateWildcardDirectoryWatcher + } + ); + } else { + clearMap(existingWatchedForWildcards, closeFileWatcherOf); + } + function createWildcardDirectoryWatcher(directory, flags) { + return { + watcher: watchDirectory(directory, flags), + flags + }; + } + function updateWildcardDirectoryWatcher(existingWatcher, flags, directory) { + if (existingWatcher.flags === flags) { + return; + } + existingWatcher.watcher.close(); + existingWatchedForWildcards.set(directory, createWildcardDirectoryWatcher(directory, flags)); + } +} +function isIgnoredFileFromWildCardWatching({ + watchedDirPath, + fileOrDirectory, + fileOrDirectoryPath, + configFileName, + options, + program, + extraFileExtensions, + currentDirectory, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + writeLog, + toPath: toPath3, + getScriptKind: getScriptKind2 +}) { + const newPath = removeIgnoredPath(fileOrDirectoryPath); + if (!newPath) { + writeLog(`Project: ${configFileName} Detected ignored path: ${fileOrDirectory}`); + return true; + } + fileOrDirectoryPath = newPath; + if (fileOrDirectoryPath === watchedDirPath) return false; + if (hasExtension(fileOrDirectoryPath) && !(isSupportedSourceFileName(fileOrDirectory, options, extraFileExtensions) || isSupportedScriptKind())) { + writeLog(`Project: ${configFileName} Detected file add/remove of non supported extension: ${fileOrDirectory}`); + return true; + } + if (isExcludedFile(fileOrDirectory, options.configFile.configFileSpecs, getNormalizedAbsolutePath(getDirectoryPath(configFileName), currentDirectory), useCaseSensitiveFileNames2, currentDirectory)) { + writeLog(`Project: ${configFileName} Detected excluded file: ${fileOrDirectory}`); + return true; + } + if (!program) return false; + if (options.outFile || options.outDir) return false; + if (isDeclarationFileName(fileOrDirectoryPath)) { + if (options.declarationDir) return false; + } else if (!fileExtensionIsOneOf(fileOrDirectoryPath, supportedJSExtensionsFlat)) { + return false; + } + const filePathWithoutExtension = removeFileExtension(fileOrDirectoryPath); + const realProgram = isArray(program) ? void 0 : isBuilderProgram(program) ? program.getProgramOrUndefined() : program; + const builderProgram = !realProgram && !isArray(program) ? program : void 0; + if (hasSourceFile(filePathWithoutExtension + ".ts" /* Ts */) || hasSourceFile(filePathWithoutExtension + ".tsx" /* Tsx */)) { + writeLog(`Project: ${configFileName} Detected output file: ${fileOrDirectory}`); + return true; + } + return false; + function hasSourceFile(file) { + return realProgram ? !!realProgram.getSourceFileByPath(file) : builderProgram ? builderProgram.state.fileInfos.has(file) : !!find(program, (rootFile) => toPath3(rootFile) === file); + } + function isSupportedScriptKind() { + if (!getScriptKind2) return false; + const scriptKind = getScriptKind2(fileOrDirectory); + switch (scriptKind) { + case 3 /* TS */: + case 4 /* TSX */: + case 7 /* Deferred */: + case 5 /* External */: + return true; + case 1 /* JS */: + case 2 /* JSX */: + return getAllowJSCompilerOption(options); + case 6 /* JSON */: + return getResolveJsonModule(options); + case 0 /* Unknown */: + return false; + } + } +} +function isEmittedFileOfProgram(program, file) { + if (!program) { + return false; + } + return program.isEmittedFile(file); +} +var WatchLogLevel = /* @__PURE__ */ ((WatchLogLevel2) => { + WatchLogLevel2[WatchLogLevel2["None"] = 0] = "None"; + WatchLogLevel2[WatchLogLevel2["TriggerOnly"] = 1] = "TriggerOnly"; + WatchLogLevel2[WatchLogLevel2["Verbose"] = 2] = "Verbose"; + return WatchLogLevel2; +})(WatchLogLevel || {}); +function getWatchFactory(host, watchLogLevel, log, getDetailWatchInfo2) { + setSysLog(watchLogLevel === 2 /* Verbose */ ? log : noop); + const plainInvokeFactory = { + watchFile: (file, callback, pollingInterval, options) => host.watchFile(file, callback, pollingInterval, options), + watchDirectory: (directory, callback, flags, options) => host.watchDirectory(directory, callback, (flags & 1 /* Recursive */) !== 0, options) + }; + const triggerInvokingFactory = watchLogLevel !== 0 /* None */ ? { + watchFile: createTriggerLoggingAddWatch("watchFile"), + watchDirectory: createTriggerLoggingAddWatch("watchDirectory") + } : void 0; + const factory2 = watchLogLevel === 2 /* Verbose */ ? { + watchFile: createFileWatcherWithLogging, + watchDirectory: createDirectoryWatcherWithLogging + } : triggerInvokingFactory || plainInvokeFactory; + const excludeWatcherFactory = watchLogLevel === 2 /* Verbose */ ? createExcludeWatcherWithLogging : returnNoopFileWatcher; + return { + watchFile: createExcludeHandlingAddWatch("watchFile"), + watchDirectory: createExcludeHandlingAddWatch("watchDirectory") + }; + function createExcludeHandlingAddWatch(key) { + return (file, cb, flags, options, detailInfo1, detailInfo2) => { + var _a; + return !matchesExclude(file, key === "watchFile" ? options == null ? void 0 : options.excludeFiles : options == null ? void 0 : options.excludeDirectories, useCaseSensitiveFileNames2(), ((_a = host.getCurrentDirectory) == null ? void 0 : _a.call(host)) || "") ? factory2[key].call( + /*thisArgs*/ + void 0, + file, + cb, + flags, + options, + detailInfo1, + detailInfo2 + ) : excludeWatcherFactory(file, flags, options, detailInfo1, detailInfo2); + }; + } + function useCaseSensitiveFileNames2() { + return typeof host.useCaseSensitiveFileNames === "boolean" ? host.useCaseSensitiveFileNames : host.useCaseSensitiveFileNames(); + } + function createExcludeWatcherWithLogging(file, flags, options, detailInfo1, detailInfo2) { + log(`ExcludeWatcher:: Added:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`); + return { + close: () => log(`ExcludeWatcher:: Close:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`) + }; + } + function createFileWatcherWithLogging(file, cb, flags, options, detailInfo1, detailInfo2) { + log(`FileWatcher:: Added:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`); + const watcher = triggerInvokingFactory.watchFile(file, cb, flags, options, detailInfo1, detailInfo2); + return { + close: () => { + log(`FileWatcher:: Close:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`); + watcher.close(); + } + }; + } + function createDirectoryWatcherWithLogging(file, cb, flags, options, detailInfo1, detailInfo2) { + const watchInfo = `DirectoryWatcher:: Added:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`; + log(watchInfo); + const start = timestamp(); + const watcher = triggerInvokingFactory.watchDirectory(file, cb, flags, options, detailInfo1, detailInfo2); + const elapsed = timestamp() - start; + log(`Elapsed:: ${elapsed}ms ${watchInfo}`); + return { + close: () => { + const watchInfo2 = `DirectoryWatcher:: Close:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`; + log(watchInfo2); + const start2 = timestamp(); + watcher.close(); + const elapsed2 = timestamp() - start2; + log(`Elapsed:: ${elapsed2}ms ${watchInfo2}`); + } + }; + } + function createTriggerLoggingAddWatch(key) { + return (file, cb, flags, options, detailInfo1, detailInfo2) => plainInvokeFactory[key].call( + /*thisArgs*/ + void 0, + file, + (...args) => { + const triggerredInfo = `${key === "watchFile" ? "FileWatcher" : "DirectoryWatcher"}:: Triggered with ${args[0]} ${args[1] !== void 0 ? args[1] : ""}:: ${getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo2)}`; + log(triggerredInfo); + const start = timestamp(); + cb.call( + /*thisArg*/ + void 0, + ...args + ); + const elapsed = timestamp() - start; + log(`Elapsed:: ${elapsed}ms ${triggerredInfo}`); + }, + flags, + options, + detailInfo1, + detailInfo2 + ); + } + function getWatchInfo(file, flags, options, detailInfo1, detailInfo2, getDetailWatchInfo3) { + return `WatchInfo: ${file} ${flags} ${JSON.stringify(options)} ${getDetailWatchInfo3 ? getDetailWatchInfo3(detailInfo1, detailInfo2) : detailInfo2 === void 0 ? detailInfo1 : `${detailInfo1} ${detailInfo2}`}`; + } +} +function getFallbackOptions(options) { + const fallbackPolling = options == null ? void 0 : options.fallbackPolling; + return { + watchFile: fallbackPolling !== void 0 ? fallbackPolling : 1 /* PriorityPollingInterval */ + }; +} +function closeFileWatcherOf(objWithWatcher) { + objWithWatcher.watcher.close(); +} + +// src/compiler/program.ts +function findConfigFile(searchPath, fileExists, configName = "tsconfig.json") { + return forEachAncestorDirectory(searchPath, (ancestor) => { + const fileName = combinePaths(ancestor, configName); + return fileExists(fileName) ? fileName : void 0; + }); +} +function resolveTripleslashReference(moduleName, containingFile) { + const basePath = getDirectoryPath(containingFile); + const referencedFileName = isRootedDiskPath(moduleName) ? moduleName : combinePaths(basePath, moduleName); + return normalizePath(referencedFileName); +} +function computeCommonSourceDirectoryOfFilenames(fileNames, currentDirectory, getCanonicalFileName) { + let commonPathComponents; + const failed2 = forEach(fileNames, (sourceFile) => { + const sourcePathComponents = getNormalizedPathComponents(sourceFile, currentDirectory); + sourcePathComponents.pop(); + if (!commonPathComponents) { + commonPathComponents = sourcePathComponents; + return; + } + const n = Math.min(commonPathComponents.length, sourcePathComponents.length); + for (let i = 0; i < n; i++) { + if (getCanonicalFileName(commonPathComponents[i]) !== getCanonicalFileName(sourcePathComponents[i])) { + if (i === 0) { + return true; + } + commonPathComponents.length = i; + break; + } + } + if (sourcePathComponents.length < commonPathComponents.length) { + commonPathComponents.length = sourcePathComponents.length; + } + }); + if (failed2) { + return ""; + } + if (!commonPathComponents) { + return currentDirectory; + } + return getPathFromPathComponents(commonPathComponents); +} +function createCompilerHost(options, setParentNodes) { + return createCompilerHostWorker(options, setParentNodes); +} +function createGetSourceFile(readFile, setParentNodes) { + return (fileName, languageVersionOrOptions, onError) => { + let text; + try { + mark("beforeIORead"); + text = readFile(fileName); + mark("afterIORead"); + measure("I/O Read", "beforeIORead", "afterIORead"); + } catch (e) { + if (onError) { + onError(e.message); + } + text = ""; + } + return text !== void 0 ? createSourceFile(fileName, text, languageVersionOrOptions, setParentNodes) : void 0; + }; +} +function createWriteFileMeasuringIO(actualWriteFile, createDirectory, directoryExists) { + return (fileName, data, writeByteOrderMark, onError) => { + try { + mark("beforeIOWrite"); + writeFileEnsuringDirectories( + fileName, + data, + writeByteOrderMark, + actualWriteFile, + createDirectory, + directoryExists + ); + mark("afterIOWrite"); + measure("I/O Write", "beforeIOWrite", "afterIOWrite"); + } catch (e) { + if (onError) { + onError(e.message); + } + } + }; +} +function createCompilerHostWorker(options, setParentNodes, system = sys) { + const existingDirectories = /* @__PURE__ */ new Map(); + const getCanonicalFileName = createGetCanonicalFileName(system.useCaseSensitiveFileNames); + function directoryExists(directoryPath) { + if (existingDirectories.has(directoryPath)) { + return true; + } + if ((compilerHost.directoryExists || system.directoryExists)(directoryPath)) { + existingDirectories.set(directoryPath, true); + return true; + } + return false; + } + function getDefaultLibLocation() { + return getDirectoryPath(normalizePath(system.getExecutingFilePath())); + } + const newLine = getNewLineCharacter(options); + const realpath = system.realpath && ((path) => system.realpath(path)); + const compilerHost = { + getSourceFile: createGetSourceFile((fileName) => compilerHost.readFile(fileName), setParentNodes), + getDefaultLibLocation, + getDefaultLibFileName: (options2) => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options2)), + writeFile: createWriteFileMeasuringIO( + (path, data, writeByteOrderMark) => system.writeFile(path, data, writeByteOrderMark), + (path) => (compilerHost.createDirectory || system.createDirectory)(path), + (path) => directoryExists(path) + ), + getCurrentDirectory: memoize(() => system.getCurrentDirectory()), + useCaseSensitiveFileNames: () => system.useCaseSensitiveFileNames, + getCanonicalFileName, + getNewLine: () => newLine, + fileExists: (fileName) => system.fileExists(fileName), + readFile: (fileName) => system.readFile(fileName), + trace: (s) => system.write(s + newLine), + directoryExists: (directoryName) => system.directoryExists(directoryName), + getEnvironmentVariable: (name) => system.getEnvironmentVariable ? system.getEnvironmentVariable(name) : "", + getDirectories: (path) => system.getDirectories(path), + realpath, + readDirectory: (path, extensions, include, exclude, depth) => system.readDirectory(path, extensions, include, exclude, depth), + createDirectory: (d) => system.createDirectory(d), + createHash: maybeBind(system, system.createHash) + }; + return compilerHost; +} +function changeCompilerHostLikeToUseCache(host, toPath3, getSourceFile) { + const originalReadFile = host.readFile; + const originalFileExists = host.fileExists; + const originalDirectoryExists = host.directoryExists; + const originalCreateDirectory = host.createDirectory; + const originalWriteFile = host.writeFile; + const readFileCache = /* @__PURE__ */ new Map(); + const fileExistsCache = /* @__PURE__ */ new Map(); + const directoryExistsCache = /* @__PURE__ */ new Map(); + const sourceFileCache = /* @__PURE__ */ new Map(); + const readFileWithCache = (fileName) => { + const key = toPath3(fileName); + const value = readFileCache.get(key); + if (value !== void 0) return value !== false ? value : void 0; + return setReadFileCache(key, fileName); + }; + const setReadFileCache = (key, fileName) => { + const newValue = originalReadFile.call(host, fileName); + readFileCache.set(key, newValue !== void 0 ? newValue : false); + return newValue; + }; + host.readFile = (fileName) => { + const key = toPath3(fileName); + const value = readFileCache.get(key); + if (value !== void 0) return value !== false ? value : void 0; + if (!fileExtensionIs(fileName, ".json" /* Json */) && !isBuildInfoFile(fileName)) { + return originalReadFile.call(host, fileName); + } + return setReadFileCache(key, fileName); + }; + const getSourceFileWithCache = getSourceFile ? (fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) => { + const key = toPath3(fileName); + const impliedNodeFormat = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions.impliedNodeFormat : void 0; + const forImpliedNodeFormat = sourceFileCache.get(impliedNodeFormat); + const value = forImpliedNodeFormat == null ? void 0 : forImpliedNodeFormat.get(key); + if (value) return value; + const sourceFile = getSourceFile(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile); + if (sourceFile && (isDeclarationFileName(fileName) || fileExtensionIs(fileName, ".json" /* Json */))) { + sourceFileCache.set(impliedNodeFormat, (forImpliedNodeFormat || /* @__PURE__ */ new Map()).set(key, sourceFile)); + } + return sourceFile; + } : void 0; + host.fileExists = (fileName) => { + const key = toPath3(fileName); + const value = fileExistsCache.get(key); + if (value !== void 0) return value; + const newValue = originalFileExists.call(host, fileName); + fileExistsCache.set(key, !!newValue); + return newValue; + }; + if (originalWriteFile) { + host.writeFile = (fileName, data, ...rest) => { + const key = toPath3(fileName); + fileExistsCache.delete(key); + const value = readFileCache.get(key); + if (value !== void 0 && value !== data) { + readFileCache.delete(key); + sourceFileCache.forEach((map2) => map2.delete(key)); + } else if (getSourceFileWithCache) { + sourceFileCache.forEach((map2) => { + const sourceFile = map2.get(key); + if (sourceFile && sourceFile.text !== data) { + map2.delete(key); + } + }); + } + originalWriteFile.call(host, fileName, data, ...rest); + }; + } + if (originalDirectoryExists) { + host.directoryExists = (directory) => { + const key = toPath3(directory); + const value = directoryExistsCache.get(key); + if (value !== void 0) return value; + const newValue = originalDirectoryExists.call(host, directory); + directoryExistsCache.set(key, !!newValue); + return newValue; + }; + if (originalCreateDirectory) { + host.createDirectory = (directory) => { + const key = toPath3(directory); + directoryExistsCache.delete(key); + originalCreateDirectory.call(host, directory); + }; + } + } + return { + originalReadFile, + originalFileExists, + originalDirectoryExists, + originalCreateDirectory, + originalWriteFile, + getSourceFileWithCache, + readFileWithCache + }; +} +function getPreEmitDiagnostics(program, sourceFile, cancellationToken) { + let diagnostics; + diagnostics = addRange(diagnostics, program.getConfigFileParsingDiagnostics()); + diagnostics = addRange(diagnostics, program.getOptionsDiagnostics(cancellationToken)); + diagnostics = addRange(diagnostics, program.getSyntacticDiagnostics(sourceFile, cancellationToken)); + diagnostics = addRange(diagnostics, program.getGlobalDiagnostics(cancellationToken)); + diagnostics = addRange(diagnostics, program.getSemanticDiagnostics(sourceFile, cancellationToken)); + if (getEmitDeclarations(program.getCompilerOptions())) { + diagnostics = addRange(diagnostics, program.getDeclarationDiagnostics(sourceFile, cancellationToken)); + } + return sortAndDeduplicateDiagnostics(diagnostics || emptyArray); +} +function formatDiagnostics(diagnostics, host) { + let output = ""; + for (const diagnostic of diagnostics) { + output += formatDiagnostic(diagnostic, host); + } + return output; +} +function formatDiagnostic(diagnostic, host) { + const errorMessage = `${diagnosticCategoryName(diagnostic)} TS${diagnostic.code}: ${flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine())}${host.getNewLine()}`; + if (diagnostic.file) { + const { line, character } = getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start); + const fileName = diagnostic.file.fileName; + const relativeFileName = convertToRelativePath(fileName, host.getCurrentDirectory(), (fileName2) => host.getCanonicalFileName(fileName2)); + return `${relativeFileName}(${line + 1},${character + 1}): ` + errorMessage; + } + return errorMessage; +} +var ForegroundColorEscapeSequences = /* @__PURE__ */ ((ForegroundColorEscapeSequences2) => { + ForegroundColorEscapeSequences2["Grey"] = "\x1B[90m"; + ForegroundColorEscapeSequences2["Red"] = "\x1B[91m"; + ForegroundColorEscapeSequences2["Yellow"] = "\x1B[93m"; + ForegroundColorEscapeSequences2["Blue"] = "\x1B[94m"; + ForegroundColorEscapeSequences2["Cyan"] = "\x1B[96m"; + return ForegroundColorEscapeSequences2; +})(ForegroundColorEscapeSequences || {}); +var gutterStyleSequence = "\x1B[7m"; +var gutterSeparator = " "; +var resetEscapeSequence = "\x1B[0m"; +var ellipsis = "..."; +var halfIndent = " "; +var indent = " "; +function getCategoryFormat(category) { + switch (category) { + case 1 /* Error */: + return "\x1B[91m" /* Red */; + case 0 /* Warning */: + return "\x1B[93m" /* Yellow */; + case 2 /* Suggestion */: + return Debug.fail("Should never get an Info diagnostic on the command line."); + case 3 /* Message */: + return "\x1B[94m" /* Blue */; + } +} +function formatColorAndReset(text, formatStyle) { + return formatStyle + text + resetEscapeSequence; +} +function formatCodeSpan(file, start, length2, indent3, squiggleColor, host) { + const { line: firstLine, character: firstLineChar } = getLineAndCharacterOfPosition(file, start); + const { line: lastLine, character: lastLineChar } = getLineAndCharacterOfPosition(file, start + length2); + const lastLineInFile = getLineAndCharacterOfPosition(file, file.text.length).line; + const hasMoreThanFiveLines = lastLine - firstLine >= 4; + let gutterWidth = (lastLine + 1 + "").length; + if (hasMoreThanFiveLines) { + gutterWidth = Math.max(ellipsis.length, gutterWidth); + } + let context = ""; + for (let i = firstLine; i <= lastLine; i++) { + context += host.getNewLine(); + if (hasMoreThanFiveLines && firstLine + 1 < i && i < lastLine - 1) { + context += indent3 + formatColorAndReset(ellipsis.padStart(gutterWidth), gutterStyleSequence) + gutterSeparator + host.getNewLine(); + i = lastLine - 1; + } + const lineStart = getPositionOfLineAndCharacter(file, i, 0); + const lineEnd = i < lastLineInFile ? getPositionOfLineAndCharacter(file, i + 1, 0) : file.text.length; + let lineContent = file.text.slice(lineStart, lineEnd); + lineContent = lineContent.trimEnd(); + lineContent = lineContent.replace(/\t/g, " "); + context += indent3 + formatColorAndReset((i + 1 + "").padStart(gutterWidth), gutterStyleSequence) + gutterSeparator; + context += lineContent + host.getNewLine(); + context += indent3 + formatColorAndReset("".padStart(gutterWidth), gutterStyleSequence) + gutterSeparator; + context += squiggleColor; + if (i === firstLine) { + const lastCharForLine = i === lastLine ? lastLineChar : void 0; + context += lineContent.slice(0, firstLineChar).replace(/\S/g, " "); + context += lineContent.slice(firstLineChar, lastCharForLine).replace(/./g, "~"); + } else if (i === lastLine) { + context += lineContent.slice(0, lastLineChar).replace(/./g, "~"); + } else { + context += lineContent.replace(/./g, "~"); + } + context += resetEscapeSequence; + } + return context; +} +function formatLocation(file, start, host, color = formatColorAndReset) { + const { line: firstLine, character: firstLineChar } = getLineAndCharacterOfPosition(file, start); + const relativeFileName = host ? convertToRelativePath(file.fileName, host.getCurrentDirectory(), (fileName) => host.getCanonicalFileName(fileName)) : file.fileName; + let output = ""; + output += color(relativeFileName, "\x1B[96m" /* Cyan */); + output += ":"; + output += color(`${firstLine + 1}`, "\x1B[93m" /* Yellow */); + output += ":"; + output += color(`${firstLineChar + 1}`, "\x1B[93m" /* Yellow */); + return output; +} +function formatDiagnosticsWithColorAndContext(diagnostics, host) { + let output = ""; + for (const diagnostic of diagnostics) { + if (diagnostic.file) { + const { file, start } = diagnostic; + output += formatLocation(file, start, host); + output += " - "; + } + output += formatColorAndReset(diagnosticCategoryName(diagnostic), getCategoryFormat(diagnostic.category)); + output += formatColorAndReset(` TS${diagnostic.code}: `, "\x1B[90m" /* Grey */); + output += flattenDiagnosticMessageText(diagnostic.messageText, host.getNewLine()); + if (diagnostic.file && diagnostic.code !== Diagnostics.File_appears_to_be_binary.code) { + output += host.getNewLine(); + output += formatCodeSpan(diagnostic.file, diagnostic.start, diagnostic.length, "", getCategoryFormat(diagnostic.category), host); + } + if (diagnostic.relatedInformation) { + output += host.getNewLine(); + for (const { file, start, length: length2, messageText } of diagnostic.relatedInformation) { + if (file) { + output += host.getNewLine(); + output += halfIndent + formatLocation(file, start, host); + output += formatCodeSpan(file, start, length2, indent, "\x1B[96m" /* Cyan */, host); + } + output += host.getNewLine(); + output += indent + flattenDiagnosticMessageText(messageText, host.getNewLine()); + } + } + output += host.getNewLine(); + } + return output; +} +function flattenDiagnosticMessageText(diag2, newLine, indent3 = 0) { + if (isString(diag2)) { + return diag2; + } else if (diag2 === void 0) { + return ""; + } + let result = ""; + if (indent3) { + result += newLine; + for (let i = 0; i < indent3; i++) { + result += " "; + } + } + result += diag2.messageText; + indent3++; + if (diag2.next) { + for (const kid of diag2.next) { + result += flattenDiagnosticMessageText(kid, newLine, indent3); + } + } + return result; +} +function getModeForFileReference(ref, containingFileMode) { + return (isString(ref) ? containingFileMode : ref.resolutionMode) || containingFileMode; +} +function getModeForResolutionAtIndex(file, index, compilerOptions) { + return getModeForUsageLocationWorker(file, getModuleNameStringLiteralAt(file, index), compilerOptions); +} +function isExclusivelyTypeOnlyImportOrExport(decl) { + var _a; + if (isExportDeclaration(decl)) { + return decl.isTypeOnly; + } + if ((_a = decl.importClause) == null ? void 0 : _a.isTypeOnly) { + return true; + } + return false; +} +function getModeForUsageLocation(file, usage, compilerOptions) { + return getModeForUsageLocationWorker(file, usage, compilerOptions); +} +function getModeForUsageLocationWorker(file, usage, compilerOptions) { + if (isImportDeclaration(usage.parent) || isExportDeclaration(usage.parent) || isJSDocImportTag(usage.parent)) { + const isTypeOnly = isExclusivelyTypeOnlyImportOrExport(usage.parent); + if (isTypeOnly) { + const override = getResolutionModeOverride(usage.parent.attributes); + if (override) { + return override; + } + } + } + if (usage.parent.parent && isImportTypeNode(usage.parent.parent)) { + const override = getResolutionModeOverride(usage.parent.parent.attributes); + if (override) { + return override; + } + } + if (compilerOptions && importSyntaxAffectsModuleResolution(compilerOptions)) { + return getEmitSyntaxForUsageLocationWorker(file, usage, compilerOptions); + } +} +function getEmitSyntaxForUsageLocationWorker(file, usage, compilerOptions) { + var _a; + if (!compilerOptions) { + return void 0; + } + const exprParentParent = (_a = walkUpParenthesizedExpressions(usage.parent)) == null ? void 0 : _a.parent; + if (exprParentParent && isImportEqualsDeclaration(exprParentParent) || isRequireCall( + usage.parent, + /*requireStringLiteralLikeArgument*/ + false + )) { + return 1 /* CommonJS */; + } + if (isImportCall(walkUpParenthesizedExpressions(usage.parent))) { + return shouldTransformImportCallWorker(file, compilerOptions) ? 1 /* CommonJS */ : 99 /* ESNext */; + } + const fileEmitMode = getEmitModuleFormatOfFileWorker(file, compilerOptions); + return fileEmitMode === 1 /* CommonJS */ ? 1 /* CommonJS */ : emitModuleKindIsNonNodeESM(fileEmitMode) || fileEmitMode === 200 /* Preserve */ ? 99 /* ESNext */ : void 0; +} +function getResolutionModeOverride(node, grammarErrorOnNode) { + if (!node) return void 0; + if (length(node.elements) !== 1) { + grammarErrorOnNode == null ? void 0 : grammarErrorOnNode( + node, + node.token === 118 /* WithKeyword */ ? Diagnostics.Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require : Diagnostics.Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require + ); + return void 0; + } + const elem = node.elements[0]; + if (!isStringLiteralLike(elem.name)) return void 0; + if (elem.name.text !== "resolution-mode") { + grammarErrorOnNode == null ? void 0 : grammarErrorOnNode( + elem.name, + node.token === 118 /* WithKeyword */ ? Diagnostics.resolution_mode_is_the_only_valid_key_for_type_import_attributes : Diagnostics.resolution_mode_is_the_only_valid_key_for_type_import_assertions + ); + return void 0; + } + if (!isStringLiteralLike(elem.value)) return void 0; + if (elem.value.text !== "import" && elem.value.text !== "require") { + grammarErrorOnNode == null ? void 0 : grammarErrorOnNode(elem.value, Diagnostics.resolution_mode_should_be_either_require_or_import); + return void 0; + } + return elem.value.text === "import" ? 99 /* ESNext */ : 1 /* CommonJS */; +} +var emptyResolution = { + resolvedModule: void 0, + resolvedTypeReferenceDirective: void 0 +}; +function getModuleResolutionName(literal) { + return literal.text; +} +var moduleResolutionNameAndModeGetter = { + getName: getModuleResolutionName, + getMode: (entry, file, compilerOptions) => getModeForUsageLocation(file, entry, compilerOptions) +}; +function createModuleResolutionLoader(containingFile, redirectedReference, options, host, cache) { + return { + nameAndMode: moduleResolutionNameAndModeGetter, + resolve: (moduleName, resolutionMode) => resolveModuleName( + moduleName, + containingFile, + options, + host, + cache, + redirectedReference, + resolutionMode + ) + }; +} +function getTypeReferenceResolutionName(entry) { + return !isString(entry) ? entry.fileName : entry; +} +var typeReferenceResolutionNameAndModeGetter = { + getName: getTypeReferenceResolutionName, + getMode: (entry, file, compilerOptions) => getModeForFileReference(entry, file && getDefaultResolutionModeForFileWorker(file, compilerOptions)) +}; +function createTypeReferenceResolutionLoader(containingFile, redirectedReference, options, host, cache) { + return { + nameAndMode: typeReferenceResolutionNameAndModeGetter, + resolve: (typeRef, resoluionMode) => resolveTypeReferenceDirective( + typeRef, + containingFile, + options, + host, + redirectedReference, + cache, + resoluionMode + ) + }; +} +function loadWithModeAwareCache(entries, containingFile, redirectedReference, options, containingSourceFile, host, resolutionCache, createLoader) { + if (entries.length === 0) return emptyArray; + const resolutions = []; + const cache = /* @__PURE__ */ new Map(); + const loader = createLoader(containingFile, redirectedReference, options, host, resolutionCache); + for (const entry of entries) { + const name = loader.nameAndMode.getName(entry); + const mode = loader.nameAndMode.getMode(entry, containingSourceFile, (redirectedReference == null ? void 0 : redirectedReference.commandLine.options) || options); + const key = createModeAwareCacheKey(name, mode); + let result = cache.get(key); + if (!result) { + cache.set(key, result = loader.resolve(name, mode)); + } + resolutions.push(result); + } + return resolutions; +} +var inferredTypesContainingFile = "__inferred type names__.ts"; +function getInferredLibraryNameResolveFrom(options, currentDirectory, libFileName) { + const containingDirectory = options.configFilePath ? getDirectoryPath(options.configFilePath) : currentDirectory; + return combinePaths(containingDirectory, `__lib_node_modules_lookup_${libFileName}__.ts`); +} +function getLibraryNameFromLibFileName(libFileName) { + const components = libFileName.split("."); + let path = components[1]; + let i = 2; + while (components[i] && components[i] !== "d") { + path += (i === 2 ? "/" : "-") + components[i]; + i++; + } + return "@typescript/lib-" + path; +} +function isReferencedFile(reason) { + switch (reason == null ? void 0 : reason.kind) { + case 3 /* Import */: + case 4 /* ReferenceFile */: + case 5 /* TypeReferenceDirective */: + case 7 /* LibReferenceDirective */: + return true; + default: + return false; + } +} +function isReferenceFileLocation(location) { + return location.pos !== void 0; +} +function getReferencedFileLocation(program, ref) { + var _a, _b, _c, _d; + const file = Debug.checkDefined(program.getSourceFileByPath(ref.file)); + const { kind, index } = ref; + let pos, end, packageId; + switch (kind) { + case 3 /* Import */: + const importLiteral = getModuleNameStringLiteralAt(file, index); + packageId = (_b = (_a = program.getResolvedModuleFromModuleSpecifier(importLiteral, file)) == null ? void 0 : _a.resolvedModule) == null ? void 0 : _b.packageId; + if (importLiteral.pos === -1) return { file, packageId, text: importLiteral.text }; + pos = skipTrivia(file.text, importLiteral.pos); + end = importLiteral.end; + break; + case 4 /* ReferenceFile */: + ({ pos, end } = file.referencedFiles[index]); + break; + case 5 /* TypeReferenceDirective */: + ({ pos, end } = file.typeReferenceDirectives[index]); + packageId = (_d = (_c = program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(file.typeReferenceDirectives[index], file)) == null ? void 0 : _c.resolvedTypeReferenceDirective) == null ? void 0 : _d.packageId; + break; + case 7 /* LibReferenceDirective */: + ({ pos, end } = file.libReferenceDirectives[index]); + break; + default: + return Debug.assertNever(kind); + } + return { file, pos, end, packageId }; +} +function isProgramUptoDate(program, rootFileNames, newOptions, getSourceVersion, fileExists, hasInvalidatedResolutions, hasInvalidatedLibResolutions, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences) { + if (!program || (hasChangedAutomaticTypeDirectiveNames == null ? void 0 : hasChangedAutomaticTypeDirectiveNames())) return false; + if (!arrayIsEqualTo(program.getRootFileNames(), rootFileNames)) return false; + let seenResolvedRefs; + if (!arrayIsEqualTo(program.getProjectReferences(), projectReferences, projectReferenceUptoDate)) return false; + if (program.getSourceFiles().some(sourceFileNotUptoDate)) return false; + const missingPaths = program.getMissingFilePaths(); + if (missingPaths && forEachEntry(missingPaths, fileExists)) return false; + const currentOptions = program.getCompilerOptions(); + if (!compareDataObjects(currentOptions, newOptions)) return false; + if (program.resolvedLibReferences && forEachEntry(program.resolvedLibReferences, (_value, libFileName) => hasInvalidatedLibResolutions(libFileName))) return false; + if (currentOptions.configFile && newOptions.configFile) return currentOptions.configFile.text === newOptions.configFile.text; + return true; + function sourceFileNotUptoDate(sourceFile) { + return !sourceFileVersionUptoDate(sourceFile) || hasInvalidatedResolutions(sourceFile.path); + } + function sourceFileVersionUptoDate(sourceFile) { + return sourceFile.version === getSourceVersion(sourceFile.resolvedPath, sourceFile.fileName); + } + function projectReferenceUptoDate(oldRef, newRef, index) { + return projectReferenceIsEqualTo(oldRef, newRef) && resolvedProjectReferenceUptoDate(program.getResolvedProjectReferences()[index], oldRef); + } + function resolvedProjectReferenceUptoDate(oldResolvedRef, oldRef) { + if (oldResolvedRef) { + if (contains(seenResolvedRefs, oldResolvedRef)) return true; + const refPath2 = resolveProjectReferencePath(oldRef); + const newParsedCommandLine = getParsedCommandLine(refPath2); + if (!newParsedCommandLine) return false; + if (oldResolvedRef.commandLine.options.configFile !== newParsedCommandLine.options.configFile) return false; + if (!arrayIsEqualTo(oldResolvedRef.commandLine.fileNames, newParsedCommandLine.fileNames)) return false; + (seenResolvedRefs || (seenResolvedRefs = [])).push(oldResolvedRef); + return !forEach( + oldResolvedRef.references, + (childResolvedRef, index) => !resolvedProjectReferenceUptoDate( + childResolvedRef, + oldResolvedRef.commandLine.projectReferences[index] + ) + ); + } + const refPath = resolveProjectReferencePath(oldRef); + return !getParsedCommandLine(refPath); + } +} +function getConfigFileParsingDiagnostics(configFileParseResult) { + return configFileParseResult.options.configFile ? [...configFileParseResult.options.configFile.parseDiagnostics, ...configFileParseResult.errors] : configFileParseResult.errors; +} +function getImpliedNodeFormatForFile(fileName, packageJsonInfoCache, host, options) { + const result = getImpliedNodeFormatForFileWorker(fileName, packageJsonInfoCache, host, options); + return typeof result === "object" ? result.impliedNodeFormat : result; +} +function getImpliedNodeFormatForFileWorker(fileName, packageJsonInfoCache, host, options) { + const moduleResolution = getEmitModuleResolutionKind(options); + const shouldLookupFromPackageJson = 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || pathContainsNodeModules(fileName); + return fileExtensionIsOneOf(fileName, [".d.mts" /* Dmts */, ".mts" /* Mts */, ".mjs" /* Mjs */]) ? 99 /* ESNext */ : fileExtensionIsOneOf(fileName, [".d.cts" /* Dcts */, ".cts" /* Cts */, ".cjs" /* Cjs */]) ? 1 /* CommonJS */ : shouldLookupFromPackageJson && fileExtensionIsOneOf(fileName, [".d.ts" /* Dts */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".js" /* Js */, ".jsx" /* Jsx */]) ? lookupFromPackageJson() : void 0; + function lookupFromPackageJson() { + const state = getTemporaryModuleResolutionState(packageJsonInfoCache, host, options); + const packageJsonLocations = []; + state.failedLookupLocations = packageJsonLocations; + state.affectingLocations = packageJsonLocations; + const packageJsonScope = getPackageScopeForPath(getDirectoryPath(fileName), state); + const impliedNodeFormat = (packageJsonScope == null ? void 0 : packageJsonScope.contents.packageJsonContent.type) === "module" ? 99 /* ESNext */ : 1 /* CommonJS */; + return { impliedNodeFormat, packageJsonLocations, packageJsonScope }; + } +} +var plainJSErrors = /* @__PURE__ */ new Set([ + // binder errors + Diagnostics.Cannot_redeclare_block_scoped_variable_0.code, + Diagnostics.A_module_cannot_have_multiple_default_exports.code, + Diagnostics.Another_export_default_is_here.code, + Diagnostics.The_first_export_default_is_here.code, + Diagnostics.Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module.code, + Diagnostics.Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode.code, + Diagnostics.Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here.code, + Diagnostics.constructor_is_a_reserved_word.code, + Diagnostics.delete_cannot_be_called_on_an_identifier_in_strict_mode.code, + Diagnostics.Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of_0_For_more_information_see_https_Colon_Slash_Slashdeveloper_mozilla_org_Slashen_US_Slashdocs_SlashWeb_SlashJavaScript_SlashReference_SlashStrict_mode.code, + Diagnostics.Invalid_use_of_0_Modules_are_automatically_in_strict_mode.code, + Diagnostics.Invalid_use_of_0_in_strict_mode.code, + Diagnostics.A_label_is_not_allowed_here.code, + Diagnostics.with_statements_are_not_allowed_in_strict_mode.code, + // grammar errors + Diagnostics.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement.code, + Diagnostics.A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement.code, + Diagnostics.A_class_declaration_without_the_default_modifier_must_have_a_name.code, + Diagnostics.A_class_member_cannot_have_the_0_keyword.code, + Diagnostics.A_comma_expression_is_not_allowed_in_a_computed_property_name.code, + Diagnostics.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement.code, + Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code, + Diagnostics.A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement.code, + Diagnostics.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement.code, + Diagnostics.A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration.code, + Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context.code, + Diagnostics.A_destructuring_declaration_must_have_an_initializer.code, + Diagnostics.A_get_accessor_cannot_have_parameters.code, + Diagnostics.A_rest_element_cannot_contain_a_binding_pattern.code, + Diagnostics.A_rest_element_cannot_have_a_property_name.code, + Diagnostics.A_rest_element_cannot_have_an_initializer.code, + Diagnostics.A_rest_element_must_be_last_in_a_destructuring_pattern.code, + Diagnostics.A_rest_parameter_cannot_have_an_initializer.code, + Diagnostics.A_rest_parameter_must_be_last_in_a_parameter_list.code, + Diagnostics.A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma.code, + Diagnostics.A_return_statement_cannot_be_used_inside_a_class_static_block.code, + Diagnostics.A_set_accessor_cannot_have_rest_parameter.code, + Diagnostics.A_set_accessor_must_have_exactly_one_parameter.code, + Diagnostics.An_export_declaration_can_only_be_used_at_the_top_level_of_a_module.code, + Diagnostics.An_export_declaration_cannot_have_modifiers.code, + Diagnostics.An_import_declaration_can_only_be_used_at_the_top_level_of_a_module.code, + Diagnostics.An_import_declaration_cannot_have_modifiers.code, + Diagnostics.An_object_member_cannot_be_declared_optional.code, + Diagnostics.Argument_of_dynamic_import_cannot_be_spread_element.code, + Diagnostics.Cannot_assign_to_private_method_0_Private_methods_are_not_writable.code, + Diagnostics.Cannot_redeclare_identifier_0_in_catch_clause.code, + Diagnostics.Catch_clause_variable_cannot_have_an_initializer.code, + Diagnostics.Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_decorator.code, + Diagnostics.Classes_can_only_extend_a_single_class.code, + Diagnostics.Classes_may_not_have_a_field_named_constructor.code, + Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code, + Diagnostics.Duplicate_label_0.code, + Diagnostics.Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments.code, + Diagnostics.for_await_loops_cannot_be_used_inside_a_class_static_block.code, + Diagnostics.JSX_attributes_must_only_be_assigned_a_non_empty_expression.code, + Diagnostics.JSX_elements_cannot_have_multiple_attributes_with_the_same_name.code, + Diagnostics.JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array.code, + Diagnostics.JSX_property_access_expressions_cannot_include_JSX_namespace_names.code, + Diagnostics.Jump_target_cannot_cross_function_boundary.code, + Diagnostics.Line_terminator_not_permitted_before_arrow.code, + Diagnostics.Modifiers_cannot_appear_here.code, + Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement.code, + Diagnostics.Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement.code, + Diagnostics.Private_identifiers_are_not_allowed_outside_class_bodies.code, + Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code, + Diagnostics.Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier.code, + Diagnostics.Tagged_template_expressions_are_not_permitted_in_an_optional_chain.code, + Diagnostics.The_left_hand_side_of_a_for_of_statement_may_not_be_async.code, + Diagnostics.The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer.code, + Diagnostics.The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer.code, + Diagnostics.Trailing_comma_not_allowed.code, + Diagnostics.Variable_declaration_list_cannot_be_empty.code, + Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses.code, + Diagnostics._0_expected.code, + Diagnostics._0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2.code, + Diagnostics._0_list_cannot_be_empty.code, + Diagnostics._0_modifier_already_seen.code, + Diagnostics._0_modifier_cannot_appear_on_a_constructor_declaration.code, + Diagnostics._0_modifier_cannot_appear_on_a_module_or_namespace_element.code, + Diagnostics._0_modifier_cannot_appear_on_a_parameter.code, + Diagnostics._0_modifier_cannot_appear_on_class_elements_of_this_kind.code, + Diagnostics._0_modifier_cannot_be_used_here.code, + Diagnostics._0_modifier_must_precede_1_modifier.code, + Diagnostics._0_declarations_can_only_be_declared_inside_a_block.code, + Diagnostics._0_declarations_must_be_initialized.code, + Diagnostics.extends_clause_already_seen.code, + Diagnostics.let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations.code, + Diagnostics.Class_constructor_may_not_be_a_generator.code, + Diagnostics.Class_constructor_may_not_be_an_accessor.code, + Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code, + Diagnostics.await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code, + Diagnostics.Private_field_0_must_be_declared_in_an_enclosing_class.code, + // Type errors + Diagnostics.This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value.code +]); +function shouldProgramCreateNewSourceFiles(program, newOptions) { + if (!program) return false; + return optionsHaveChanges(program.getCompilerOptions(), newOptions, sourceFileAffectingCompilerOptions); +} +function createCreateProgramOptions(rootNames, options, host, oldProgram, configFileParsingDiagnostics, typeScriptVersion3) { + return { + rootNames, + options, + host, + oldProgram, + configFileParsingDiagnostics, + typeScriptVersion: typeScriptVersion3 + }; +} +function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) { + var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p; + let _createProgramOptions = isArray(_rootNamesOrOptions) ? createCreateProgramOptions(_rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) : _rootNamesOrOptions; + const { rootNames, options, configFileParsingDiagnostics, projectReferences, typeScriptVersion: typeScriptVersion3, host: createProgramOptionsHost } = _createProgramOptions; + let { oldProgram } = _createProgramOptions; + _createProgramOptions = void 0; + _rootNamesOrOptions = void 0; + for (const option of commandLineOptionOfCustomType) { + if (hasProperty(options, option.name)) { + if (typeof options[option.name] === "string") { + throw new Error(`${option.name} is a string value; tsconfig JSON must be parsed with parseJsonSourceFileConfigFileContent or getParsedCommandLineOfConfigFile before passing to createProgram`); + } + } + } + const reportInvalidIgnoreDeprecations = memoize(() => createOptionValueDiagnostic("ignoreDeprecations", Diagnostics.Invalid_value_for_ignoreDeprecations)); + let processingDefaultLibFiles; + let processingOtherFiles; + let files; + let symlinks; + let typeChecker; + let classifiableNames; + let filesWithReferencesProcessed; + let cachedBindAndCheckDiagnosticsForFile; + let cachedDeclarationDiagnosticsForFile; + const programDiagnostics = createProgramDiagnostics(getCompilerOptionsObjectLiteralSyntax); + let automaticTypeDirectiveNames; + let automaticTypeDirectiveResolutions; + let resolvedLibReferences; + let resolvedLibProcessing; + let resolvedModules; + let resolvedModulesProcessing; + let resolvedTypeReferenceDirectiveNames; + let resolvedTypeReferenceDirectiveNamesProcessing; + let packageMap; + const maxNodeModuleJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 0; + let currentNodeModulesDepth = 0; + const modulesWithElidedImports = /* @__PURE__ */ new Map(); + const sourceFilesFoundSearchingNodeModules = /* @__PURE__ */ new Map(); + (_a = tracing) == null ? void 0 : _a.push( + tracing.Phase.Program, + "createProgram", + { configFilePath: options.configFilePath, rootDir: options.rootDir }, + /*separateBeginAndEnd*/ + true + ); + mark("beforeProgram"); + const host = createProgramOptionsHost || createCompilerHost(options); + const configParsingHost = parseConfigHostFromCompilerHostLike(host); + let skipDefaultLib = options.noLib; + const getDefaultLibraryFileName = memoize(() => host.getDefaultLibFileName(options)); + const defaultLibraryPath = host.getDefaultLibLocation ? host.getDefaultLibLocation() : getDirectoryPath(getDefaultLibraryFileName()); + let skipVerifyCompilerOptions = false; + const currentDirectory = host.getCurrentDirectory(); + const supportedExtensions = getSupportedExtensions(options); + const supportedExtensionsWithJsonIfResolveJsonModule = getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); + const hasEmitBlockingDiagnostics = /* @__PURE__ */ new Map(); + let _compilerOptionsObjectLiteralSyntax; + let _compilerOptionsPropertySyntax; + let moduleResolutionCache; + let actualResolveModuleNamesWorker; + const hasInvalidatedResolutions = host.hasInvalidatedResolutions || returnFalse; + if (host.resolveModuleNameLiterals) { + actualResolveModuleNamesWorker = host.resolveModuleNameLiterals.bind(host); + moduleResolutionCache = (_b = host.getModuleResolutionCache) == null ? void 0 : _b.call(host); + } else if (host.resolveModuleNames) { + actualResolveModuleNamesWorker = (moduleNames, containingFile, redirectedReference, options2, containingSourceFile, reusedNames) => host.resolveModuleNames( + moduleNames.map(getModuleResolutionName), + containingFile, + reusedNames == null ? void 0 : reusedNames.map(getModuleResolutionName), + redirectedReference, + options2, + containingSourceFile + ).map( + (resolved) => resolved ? resolved.extension !== void 0 ? { resolvedModule: resolved } : ( + // An older host may have omitted extension, in which case we should infer it from the file extension of resolvedFileName. + { resolvedModule: { ...resolved, extension: extensionFromPath(resolved.resolvedFileName) } } + ) : emptyResolution + ); + moduleResolutionCache = (_c = host.getModuleResolutionCache) == null ? void 0 : _c.call(host); + } else { + moduleResolutionCache = createModuleResolutionCache(currentDirectory, getCanonicalFileName, options); + actualResolveModuleNamesWorker = (moduleNames, containingFile, redirectedReference, options2, containingSourceFile) => loadWithModeAwareCache( + moduleNames, + containingFile, + redirectedReference, + options2, + containingSourceFile, + host, + moduleResolutionCache, + createModuleResolutionLoader + ); + } + let actualResolveTypeReferenceDirectiveNamesWorker; + if (host.resolveTypeReferenceDirectiveReferences) { + actualResolveTypeReferenceDirectiveNamesWorker = host.resolveTypeReferenceDirectiveReferences.bind(host); + } else if (host.resolveTypeReferenceDirectives) { + actualResolveTypeReferenceDirectiveNamesWorker = (typeDirectiveNames, containingFile, redirectedReference, options2, containingSourceFile) => host.resolveTypeReferenceDirectives( + typeDirectiveNames.map(getTypeReferenceResolutionName), + containingFile, + redirectedReference, + options2, + containingSourceFile == null ? void 0 : containingSourceFile.impliedNodeFormat + ).map((resolvedTypeReferenceDirective) => ({ resolvedTypeReferenceDirective })); + } else { + const typeReferenceDirectiveResolutionCache = createTypeReferenceDirectiveResolutionCache( + currentDirectory, + getCanonicalFileName, + /*options*/ + void 0, + moduleResolutionCache == null ? void 0 : moduleResolutionCache.getPackageJsonInfoCache(), + moduleResolutionCache == null ? void 0 : moduleResolutionCache.optionsToRedirectsKey + ); + actualResolveTypeReferenceDirectiveNamesWorker = (typeDirectiveNames, containingFile, redirectedReference, options2, containingSourceFile) => loadWithModeAwareCache( + typeDirectiveNames, + containingFile, + redirectedReference, + options2, + containingSourceFile, + host, + typeReferenceDirectiveResolutionCache, + createTypeReferenceResolutionLoader + ); + } + const hasInvalidatedLibResolutions = host.hasInvalidatedLibResolutions || returnFalse; + let actualResolveLibrary; + if (host.resolveLibrary) { + actualResolveLibrary = host.resolveLibrary.bind(host); + } else { + const libraryResolutionCache = createModuleResolutionCache(currentDirectory, getCanonicalFileName, options, moduleResolutionCache == null ? void 0 : moduleResolutionCache.getPackageJsonInfoCache()); + actualResolveLibrary = (libraryName, resolveFrom, options2) => resolveLibrary(libraryName, resolveFrom, options2, host, libraryResolutionCache); + } + const packageIdToSourceFile = /* @__PURE__ */ new Map(); + let sourceFileToPackageName = /* @__PURE__ */ new Map(); + let redirectTargetsMap = createMultiMap(); + let usesUriStyleNodeCoreModules; + const filesByName = /* @__PURE__ */ new Map(); + let missingFileNames = /* @__PURE__ */ new Map(); + const filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? /* @__PURE__ */ new Map() : void 0; + let resolvedProjectReferences; + let projectReferenceRedirects; + let mapSourceFileToResolvedRef; + let mapOutputFileToResolvedRef; + const useSourceOfProjectReferenceRedirect = !!((_d = host.useSourceOfProjectReferenceRedirect) == null ? void 0 : _d.call(host)) && !options.disableSourceOfProjectReferenceRedirect; + const { onProgramCreateComplete, fileExists, directoryExists } = updateHostForUseSourceOfProjectReferenceRedirect({ + compilerHost: host, + getSymlinkCache, + useSourceOfProjectReferenceRedirect, + toPath: toPath3, + getResolvedProjectReferences, + getRedirectFromOutput, + forEachResolvedProjectReference: forEachResolvedProjectReference2 + }); + const readFile = host.readFile.bind(host); + (_e = tracing) == null ? void 0 : _e.push(tracing.Phase.Program, "shouldProgramCreateNewSourceFiles", { hasOldProgram: !!oldProgram }); + const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options); + (_f = tracing) == null ? void 0 : _f.pop(); + let structureIsReused; + (_g = tracing) == null ? void 0 : _g.push(tracing.Phase.Program, "tryReuseStructureFromOldProgram", {}); + structureIsReused = tryReuseStructureFromOldProgram(); + (_h = tracing) == null ? void 0 : _h.pop(); + if (structureIsReused !== 2 /* Completely */) { + processingDefaultLibFiles = []; + processingOtherFiles = []; + if (projectReferences) { + if (!resolvedProjectReferences) { + resolvedProjectReferences = projectReferences.map(parseProjectReferenceConfigFile); + } + if (rootNames.length) { + resolvedProjectReferences == null ? void 0 : resolvedProjectReferences.forEach((parsedRef, index) => { + if (!parsedRef) return; + const out = parsedRef.commandLine.options.outFile; + if (useSourceOfProjectReferenceRedirect) { + if (out || getEmitModuleKind(parsedRef.commandLine.options) === 0 /* None */) { + for (const fileName of parsedRef.commandLine.fileNames) { + processProjectReferenceFile(fileName, { kind: 1 /* SourceFromProjectReference */, index }); + } + } + } else { + if (out) { + processProjectReferenceFile(changeExtension(out, ".d.ts"), { kind: 2 /* OutputFromProjectReference */, index }); + } else if (getEmitModuleKind(parsedRef.commandLine.options) === 0 /* None */) { + const getCommonSourceDirectory3 = memoize(() => getCommonSourceDirectoryOfConfig(parsedRef.commandLine, !host.useCaseSensitiveFileNames())); + for (const fileName of parsedRef.commandLine.fileNames) { + if (!isDeclarationFileName(fileName) && !fileExtensionIs(fileName, ".json" /* Json */)) { + processProjectReferenceFile(getOutputDeclarationFileName(fileName, parsedRef.commandLine, !host.useCaseSensitiveFileNames(), getCommonSourceDirectory3), { kind: 2 /* OutputFromProjectReference */, index }); + } + } + } + } + }); + } + } + (_i = tracing) == null ? void 0 : _i.push(tracing.Phase.Program, "processRootFiles", { count: rootNames.length }); + forEach(rootNames, (name, index) => processRootFile( + name, + /*isDefaultLib*/ + false, + /*ignoreNoDefaultLib*/ + false, + { kind: 0 /* RootFile */, index } + )); + (_j = tracing) == null ? void 0 : _j.pop(); + automaticTypeDirectiveNames ?? (automaticTypeDirectiveNames = rootNames.length ? getAutomaticTypeDirectiveNames(options, host) : emptyArray); + automaticTypeDirectiveResolutions = createModeAwareCache(); + if (automaticTypeDirectiveNames.length) { + (_k = tracing) == null ? void 0 : _k.push(tracing.Phase.Program, "processTypeReferences", { count: automaticTypeDirectiveNames.length }); + const containingDirectory = options.configFilePath ? getDirectoryPath(options.configFilePath) : currentDirectory; + const containingFilename = combinePaths(containingDirectory, inferredTypesContainingFile); + const resolutions = resolveTypeReferenceDirectiveNamesReusingOldState(automaticTypeDirectiveNames, containingFilename); + for (let i = 0; i < automaticTypeDirectiveNames.length; i++) { + automaticTypeDirectiveResolutions.set( + automaticTypeDirectiveNames[i], + /*mode*/ + void 0, + resolutions[i] + ); + processTypeReferenceDirective( + automaticTypeDirectiveNames[i], + /*mode*/ + void 0, + resolutions[i], + { + kind: 8 /* AutomaticTypeDirectiveFile */, + typeReference: automaticTypeDirectiveNames[i], + packageId: (_m = (_l = resolutions[i]) == null ? void 0 : _l.resolvedTypeReferenceDirective) == null ? void 0 : _m.packageId + } + ); + } + (_n = tracing) == null ? void 0 : _n.pop(); + } + if (rootNames.length && !skipDefaultLib) { + const defaultLibraryFileName = getDefaultLibraryFileName(); + if (!options.lib && defaultLibraryFileName) { + processRootFile( + defaultLibraryFileName, + /*isDefaultLib*/ + true, + /*ignoreNoDefaultLib*/ + false, + { kind: 6 /* LibFile */ } + ); + } else { + forEach(options.lib, (libFileName, index) => { + processRootFile( + pathForLibFile(libFileName), + /*isDefaultLib*/ + true, + /*ignoreNoDefaultLib*/ + false, + { kind: 6 /* LibFile */, index } + ); + }); + } + } + files = toSorted(processingDefaultLibFiles, compareDefaultLibFiles).concat(processingOtherFiles); + processingDefaultLibFiles = void 0; + processingOtherFiles = void 0; + filesWithReferencesProcessed = void 0; + } + if (oldProgram && host.onReleaseOldSourceFile) { + const oldSourceFiles = oldProgram.getSourceFiles(); + for (const oldSourceFile of oldSourceFiles) { + const newFile = getSourceFileByPath(oldSourceFile.resolvedPath); + if (shouldCreateNewSourceFile || !newFile || newFile.impliedNodeFormat !== oldSourceFile.impliedNodeFormat || // old file wasn't redirect but new file is + oldSourceFile.resolvedPath === oldSourceFile.path && newFile.resolvedPath !== oldSourceFile.path) { + host.onReleaseOldSourceFile(oldSourceFile, oldProgram.getCompilerOptions(), !!getSourceFileByPath(oldSourceFile.path), newFile); + } + } + if (!host.getParsedCommandLine) { + oldProgram.forEachResolvedProjectReference((resolvedProjectReference) => { + if (!getResolvedProjectReferenceByPath(resolvedProjectReference.sourceFile.path)) { + host.onReleaseOldSourceFile( + resolvedProjectReference.sourceFile, + oldProgram.getCompilerOptions(), + /*hasSourceFileByPath*/ + false, + /*newSourceFileByResolvedPath*/ + void 0 + ); + } + }); + } + } + if (oldProgram && host.onReleaseParsedCommandLine) { + forEachProjectReference( + oldProgram.getProjectReferences(), + oldProgram.getResolvedProjectReferences(), + (oldResolvedRef, parent2, index) => { + const oldReference = (parent2 == null ? void 0 : parent2.commandLine.projectReferences[index]) || oldProgram.getProjectReferences()[index]; + const oldRefPath = resolveProjectReferencePath(oldReference); + if (!(projectReferenceRedirects == null ? void 0 : projectReferenceRedirects.has(toPath3(oldRefPath)))) { + host.onReleaseParsedCommandLine(oldRefPath, oldResolvedRef, oldProgram.getCompilerOptions()); + } + } + ); + } + oldProgram = void 0; + resolvedLibProcessing = void 0; + resolvedModulesProcessing = void 0; + resolvedTypeReferenceDirectiveNamesProcessing = void 0; + const program = { + getRootFileNames: () => rootNames, + getSourceFile, + getSourceFileByPath, + getSourceFiles: () => files, + getMissingFilePaths: () => missingFileNames, + getModuleResolutionCache: () => moduleResolutionCache, + getFilesByNameMap: () => filesByName, + getCompilerOptions: () => options, + getSyntacticDiagnostics, + getOptionsDiagnostics, + getGlobalDiagnostics, + getSemanticDiagnostics, + getCachedSemanticDiagnostics, + getSuggestionDiagnostics, + getDeclarationDiagnostics: getDeclarationDiagnostics2, + getBindAndCheckDiagnostics, + getProgramDiagnostics, + getTypeChecker, + getClassifiableNames, + getCommonSourceDirectory: getCommonSourceDirectory2, + emit, + getCurrentDirectory: () => currentDirectory, + getNodeCount: () => getTypeChecker().getNodeCount(), + getIdentifierCount: () => getTypeChecker().getIdentifierCount(), + getSymbolCount: () => getTypeChecker().getSymbolCount(), + getTypeCount: () => getTypeChecker().getTypeCount(), + getInstantiationCount: () => getTypeChecker().getInstantiationCount(), + getRelationCacheSizes: () => getTypeChecker().getRelationCacheSizes(), + getFileProcessingDiagnostics: () => programDiagnostics.getFileProcessingDiagnostics(), + getAutomaticTypeDirectiveNames: () => automaticTypeDirectiveNames, + getAutomaticTypeDirectiveResolutions: () => automaticTypeDirectiveResolutions, + isSourceFileFromExternalLibrary, + isSourceFileDefaultLibrary, + getModeForUsageLocation: getModeForUsageLocation2, + getEmitSyntaxForUsageLocation, + getModeForResolutionAtIndex: getModeForResolutionAtIndex2, + getSourceFileFromReference, + getLibFileFromReference, + sourceFileToPackageName, + redirectTargetsMap, + usesUriStyleNodeCoreModules, + resolvedModules, + resolvedTypeReferenceDirectiveNames, + resolvedLibReferences, + getProgramDiagnosticsContainer: () => programDiagnostics, + getResolvedModule, + getResolvedModuleFromModuleSpecifier, + getResolvedTypeReferenceDirective, + getResolvedTypeReferenceDirectiveFromTypeReferenceDirective, + forEachResolvedModule, + forEachResolvedTypeReferenceDirective, + getCurrentPackagesMap: () => packageMap, + typesPackageExists, + packageBundlesTypes, + isEmittedFile, + getConfigFileParsingDiagnostics: getConfigFileParsingDiagnostics2, + getProjectReferences, + getResolvedProjectReferences, + getRedirectFromSourceFile, + getResolvedProjectReferenceByPath, + forEachResolvedProjectReference: forEachResolvedProjectReference2, + isSourceOfProjectReferenceRedirect, + getRedirectFromOutput, + getCompilerOptionsForFile, + getDefaultResolutionModeForFile: getDefaultResolutionModeForFile2, + getEmitModuleFormatOfFile: getEmitModuleFormatOfFile2, + getImpliedNodeFormatForEmit: getImpliedNodeFormatForEmit2, + shouldTransformImportCall, + emitBuildInfo, + fileExists, + readFile, + directoryExists, + getSymlinkCache, + realpath: (_o = host.realpath) == null ? void 0 : _o.bind(host), + useCaseSensitiveFileNames: () => host.useCaseSensitiveFileNames(), + getCanonicalFileName, + getFileIncludeReasons: () => programDiagnostics.getFileReasons(), + structureIsReused, + writeFile: writeFile2, + getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation) + }; + onProgramCreateComplete(); + if (!skipVerifyCompilerOptions) { + verifyCompilerOptions(); + } + mark("afterProgram"); + measure("Program", "beforeProgram", "afterProgram"); + (_p = tracing) == null ? void 0 : _p.pop(); + return program; + function getResolvedModule(file, moduleName, mode) { + var _a2; + return (_a2 = resolvedModules == null ? void 0 : resolvedModules.get(file.path)) == null ? void 0 : _a2.get(moduleName, mode); + } + function getResolvedModuleFromModuleSpecifier(moduleSpecifier, sourceFile) { + sourceFile ?? (sourceFile = getSourceFileOfNode(moduleSpecifier)); + Debug.assertIsDefined(sourceFile, "`moduleSpecifier` must have a `SourceFile` ancestor. Use `program.getResolvedModule` instead to provide the containing file and resolution mode."); + return getResolvedModule(sourceFile, moduleSpecifier.text, getModeForUsageLocation2(sourceFile, moduleSpecifier)); + } + function getResolvedTypeReferenceDirective(file, typeDirectiveName, mode) { + var _a2; + return (_a2 = resolvedTypeReferenceDirectiveNames == null ? void 0 : resolvedTypeReferenceDirectiveNames.get(file.path)) == null ? void 0 : _a2.get(typeDirectiveName, mode); + } + function getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(typeRef, sourceFile) { + return getResolvedTypeReferenceDirective( + sourceFile, + typeRef.fileName, + getModeForTypeReferenceDirectiveInFile(typeRef, sourceFile) + ); + } + function forEachResolvedModule(callback, file) { + forEachResolution(resolvedModules, callback, file); + } + function forEachResolvedTypeReferenceDirective(callback, file) { + forEachResolution(resolvedTypeReferenceDirectiveNames, callback, file); + } + function forEachResolution(resolutionCache, callback, file) { + var _a2; + if (file) (_a2 = resolutionCache == null ? void 0 : resolutionCache.get(file.path)) == null ? void 0 : _a2.forEach((resolution, name, mode) => callback(resolution, name, mode, file.path)); + else resolutionCache == null ? void 0 : resolutionCache.forEach((resolutions, filePath) => resolutions.forEach((resolution, name, mode) => callback(resolution, name, mode, filePath))); + } + function getPackagesMap() { + if (packageMap) return packageMap; + packageMap = /* @__PURE__ */ new Map(); + forEachResolvedModule(({ resolvedModule }) => { + if (resolvedModule == null ? void 0 : resolvedModule.packageId) packageMap.set(resolvedModule.packageId.name, resolvedModule.extension === ".d.ts" /* Dts */ || !!packageMap.get(resolvedModule.packageId.name)); + }); + return packageMap; + } + function typesPackageExists(packageName) { + return getPackagesMap().has(getTypesPackageName(packageName)); + } + function packageBundlesTypes(packageName) { + return !!getPackagesMap().get(packageName); + } + function addResolutionDiagnostics(resolution) { + var _a2; + if (!((_a2 = resolution.resolutionDiagnostics) == null ? void 0 : _a2.length)) return; + programDiagnostics.addFileProcessingDiagnostic({ + kind: 2 /* ResolutionDiagnostics */, + diagnostics: resolution.resolutionDiagnostics + }); + } + function addResolutionDiagnosticsFromResolutionOrCache(containingFile, name, resolution, mode) { + if (host.resolveModuleNameLiterals || !host.resolveModuleNames) return addResolutionDiagnostics(resolution); + if (!moduleResolutionCache || isExternalModuleNameRelative(name)) return; + const containingFileName = getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory); + const containingDir = getDirectoryPath(containingFileName); + const redirectedReference = getRedirectReferenceForResolution(containingFile); + const fromCache = moduleResolutionCache.getFromNonRelativeNameCache(name, mode, containingDir, redirectedReference); + if (fromCache) addResolutionDiagnostics(fromCache); + } + function resolveModuleNamesWorker(moduleNames, containingFile, reusedNames) { + var _a2, _b2; + const containingFileName = getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory); + const redirectedReference = getRedirectReferenceForResolution(containingFile); + (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "resolveModuleNamesWorker", { containingFileName }); + mark("beforeResolveModule"); + const result = actualResolveModuleNamesWorker( + moduleNames, + containingFileName, + redirectedReference, + options, + containingFile, + reusedNames + ); + mark("afterResolveModule"); + measure("ResolveModule", "beforeResolveModule", "afterResolveModule"); + (_b2 = tracing) == null ? void 0 : _b2.pop(); + return result; + } + function resolveTypeReferenceDirectiveNamesWorker(typeDirectiveNames, containingFile, reusedNames) { + var _a2, _b2; + const containingSourceFile = !isString(containingFile) ? containingFile : void 0; + const containingFileName = !isString(containingFile) ? getNormalizedAbsolutePath(containingFile.originalFileName, currentDirectory) : containingFile; + const redirectedReference = containingSourceFile && getRedirectReferenceForResolution(containingSourceFile); + (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "resolveTypeReferenceDirectiveNamesWorker", { containingFileName }); + mark("beforeResolveTypeReference"); + const result = actualResolveTypeReferenceDirectiveNamesWorker( + typeDirectiveNames, + containingFileName, + redirectedReference, + options, + containingSourceFile, + reusedNames + ); + mark("afterResolveTypeReference"); + measure("ResolveTypeReference", "beforeResolveTypeReference", "afterResolveTypeReference"); + (_b2 = tracing) == null ? void 0 : _b2.pop(); + return result; + } + function getRedirectReferenceForResolution(file) { + var _a2, _b2; + const redirect = getRedirectFromSourceFile(file.originalFileName); + if (redirect || !isDeclarationFileName(file.originalFileName)) return redirect == null ? void 0 : redirect.resolvedRef; + const resultFromDts = (_a2 = getRedirectFromOutput(file.path)) == null ? void 0 : _a2.resolvedRef; + if (resultFromDts) return resultFromDts; + if (!host.realpath || !options.preserveSymlinks || !file.originalFileName.includes(nodeModulesPathPart)) return void 0; + const realDeclarationPath = toPath3(host.realpath(file.originalFileName)); + return realDeclarationPath === file.path ? void 0 : (_b2 = getRedirectFromOutput(realDeclarationPath)) == null ? void 0 : _b2.resolvedRef; + } + function compareDefaultLibFiles(a, b) { + return compareValues(getDefaultLibFilePriority(a), getDefaultLibFilePriority(b)); + } + function getDefaultLibFilePriority(a) { + if (containsPath( + defaultLibraryPath, + a.fileName, + /*ignoreCase*/ + false + )) { + const basename = getBaseFileName(a.fileName); + if (basename === "lib.d.ts" || basename === "lib.es6.d.ts") return 0; + const name = removeSuffix(removePrefix(basename, "lib."), ".d.ts"); + const index = libs.indexOf(name); + if (index !== -1) return index + 1; + } + return libs.length + 2; + } + function toPath3(fileName) { + return toPath(fileName, currentDirectory, getCanonicalFileName); + } + function getCommonSourceDirectory2() { + let commonSourceDirectory = programDiagnostics.getCommonSourceDirectory(); + if (commonSourceDirectory !== void 0) { + return commonSourceDirectory; + } + const emittedFiles = filter(files, (file) => sourceFileMayBeEmitted(file, program)); + commonSourceDirectory = getCommonSourceDirectory( + options, + () => mapDefined(emittedFiles, (file) => file.isDeclarationFile ? void 0 : file.fileName), + currentDirectory, + getCanonicalFileName, + (commonSourceDirectory2) => checkSourceFilesBelongToPath(emittedFiles, commonSourceDirectory2) + ); + programDiagnostics.setCommonSourceDirectory(commonSourceDirectory); + return commonSourceDirectory; + } + function getClassifiableNames() { + var _a2; + if (!classifiableNames) { + getTypeChecker(); + classifiableNames = /* @__PURE__ */ new Set(); + for (const sourceFile of files) { + (_a2 = sourceFile.classifiableNames) == null ? void 0 : _a2.forEach((value) => classifiableNames.add(value)); + } + } + return classifiableNames; + } + function resolveModuleNamesReusingOldState(moduleNames, containingFile) { + return resolveNamesReusingOldState({ + entries: moduleNames, + containingFile, + containingSourceFile: containingFile, + redirectedReference: getRedirectReferenceForResolution(containingFile), + nameAndModeGetter: moduleResolutionNameAndModeGetter, + resolutionWorker: resolveModuleNamesWorker, + getResolutionFromOldProgram: (name, mode) => oldProgram == null ? void 0 : oldProgram.getResolvedModule(containingFile, name, mode), + getResolved: getResolvedModuleFromResolution, + canReuseResolutionsInFile: () => containingFile === (oldProgram == null ? void 0 : oldProgram.getSourceFile(containingFile.fileName)) && !hasInvalidatedResolutions(containingFile.path), + resolveToOwnAmbientModule: true + }); + } + function resolveTypeReferenceDirectiveNamesReusingOldState(typeDirectiveNames, containingFile) { + const containingSourceFile = !isString(containingFile) ? containingFile : void 0; + return resolveNamesReusingOldState({ + entries: typeDirectiveNames, + containingFile, + containingSourceFile, + redirectedReference: containingSourceFile && getRedirectReferenceForResolution(containingSourceFile), + nameAndModeGetter: typeReferenceResolutionNameAndModeGetter, + resolutionWorker: resolveTypeReferenceDirectiveNamesWorker, + getResolutionFromOldProgram: (name, mode) => { + var _a2; + return containingSourceFile ? oldProgram == null ? void 0 : oldProgram.getResolvedTypeReferenceDirective(containingSourceFile, name, mode) : (_a2 = oldProgram == null ? void 0 : oldProgram.getAutomaticTypeDirectiveResolutions()) == null ? void 0 : _a2.get(name, mode); + }, + getResolved: getResolvedTypeReferenceDirectiveFromResolution, + canReuseResolutionsInFile: () => containingSourceFile ? containingSourceFile === (oldProgram == null ? void 0 : oldProgram.getSourceFile(containingSourceFile.fileName)) && !hasInvalidatedResolutions(containingSourceFile.path) : !hasInvalidatedResolutions(toPath3(containingFile)) + }); + } + function resolveNamesReusingOldState({ + entries, + containingFile, + containingSourceFile, + redirectedReference, + nameAndModeGetter, + resolutionWorker, + getResolutionFromOldProgram, + getResolved, + canReuseResolutionsInFile, + resolveToOwnAmbientModule + }) { + if (!entries.length) return emptyArray; + if (structureIsReused === 0 /* Not */ && (!resolveToOwnAmbientModule || !containingSourceFile.ambientModuleNames.length)) { + return resolutionWorker( + entries, + containingFile, + /*reusedNames*/ + void 0 + ); + } + let unknownEntries; + let unknownEntryIndices; + let result; + let reusedNames; + const reuseResolutions = canReuseResolutionsInFile(); + for (let i = 0; i < entries.length; i++) { + const entry = entries[i]; + if (reuseResolutions) { + const name = nameAndModeGetter.getName(entry); + const mode = nameAndModeGetter.getMode(entry, containingSourceFile, (redirectedReference == null ? void 0 : redirectedReference.commandLine.options) ?? options); + const oldResolution = getResolutionFromOldProgram(name, mode); + const oldResolved = oldResolution && getResolved(oldResolution); + if (oldResolved) { + if (isTraceEnabled(options, host)) { + trace( + host, + resolutionWorker === resolveModuleNamesWorker ? oldResolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : oldResolved.packageId ? Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2, + name, + containingSourceFile ? getNormalizedAbsolutePath(containingSourceFile.originalFileName, currentDirectory) : containingFile, + oldResolved.resolvedFileName, + oldResolved.packageId && packageIdToString(oldResolved.packageId) + ); + } + (result ?? (result = new Array(entries.length)))[i] = oldResolution; + (reusedNames ?? (reusedNames = [])).push(entry); + continue; + } + } + if (resolveToOwnAmbientModule) { + const name = nameAndModeGetter.getName(entry); + if (contains(containingSourceFile.ambientModuleNames, name)) { + if (isTraceEnabled(options, host)) { + trace( + host, + Diagnostics.Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1, + name, + getNormalizedAbsolutePath(containingSourceFile.originalFileName, currentDirectory) + ); + } + (result ?? (result = new Array(entries.length)))[i] = emptyResolution; + continue; + } + } + (unknownEntries ?? (unknownEntries = [])).push(entry); + (unknownEntryIndices ?? (unknownEntryIndices = [])).push(i); + } + if (!unknownEntries) return result; + const resolutions = resolutionWorker(unknownEntries, containingFile, reusedNames); + if (!result) return resolutions; + resolutions.forEach((resolution, index) => result[unknownEntryIndices[index]] = resolution); + return result; + } + function canReuseProjectReferences() { + return !forEachProjectReference( + oldProgram.getProjectReferences(), + oldProgram.getResolvedProjectReferences(), + (oldResolvedRef, parent2, index) => { + const newRef = (parent2 ? parent2.commandLine.projectReferences : projectReferences)[index]; + const newResolvedRef = parseProjectReferenceConfigFile(newRef); + if (oldResolvedRef) { + return !newResolvedRef || newResolvedRef.sourceFile !== oldResolvedRef.sourceFile || !arrayIsEqualTo(oldResolvedRef.commandLine.fileNames, newResolvedRef.commandLine.fileNames); + } else { + return newResolvedRef !== void 0; + } + }, + (oldProjectReferences, parent2) => { + const newReferences = parent2 ? getResolvedProjectReferenceByPath(parent2.sourceFile.path).commandLine.projectReferences : projectReferences; + return !arrayIsEqualTo(oldProjectReferences, newReferences, projectReferenceIsEqualTo); + } + ); + } + function tryReuseStructureFromOldProgram() { + var _a2; + if (!oldProgram) { + return 0 /* Not */; + } + const oldOptions = oldProgram.getCompilerOptions(); + if (changesAffectModuleResolution(oldOptions, options)) { + return 0 /* Not */; + } + const oldRootNames = oldProgram.getRootFileNames(); + if (!arrayIsEqualTo(oldRootNames, rootNames)) { + return 0 /* Not */; + } + if (!canReuseProjectReferences()) { + return 0 /* Not */; + } + if (projectReferences) { + resolvedProjectReferences = projectReferences.map(parseProjectReferenceConfigFile); + } + const newSourceFiles = []; + const modifiedSourceFiles = []; + structureIsReused = 2 /* Completely */; + if (forEachEntry(oldProgram.getMissingFilePaths(), (missingFileName) => host.fileExists(missingFileName))) { + return 0 /* Not */; + } + const oldSourceFiles = oldProgram.getSourceFiles(); + let SeenPackageName; + ((SeenPackageName2) => { + SeenPackageName2[SeenPackageName2["Exists"] = 0] = "Exists"; + SeenPackageName2[SeenPackageName2["Modified"] = 1] = "Modified"; + })(SeenPackageName || (SeenPackageName = {})); + const seenPackageNames = /* @__PURE__ */ new Map(); + for (const oldSourceFile of oldSourceFiles) { + const sourceFileOptions = getCreateSourceFileOptions(oldSourceFile.fileName, moduleResolutionCache, host, options); + let newSourceFile = host.getSourceFileByPath ? host.getSourceFileByPath( + oldSourceFile.fileName, + oldSourceFile.resolvedPath, + sourceFileOptions, + /*onError*/ + void 0, + shouldCreateNewSourceFile + ) : host.getSourceFile( + oldSourceFile.fileName, + sourceFileOptions, + /*onError*/ + void 0, + shouldCreateNewSourceFile + ); + if (!newSourceFile) { + return 0 /* Not */; + } + newSourceFile.packageJsonLocations = ((_a2 = sourceFileOptions.packageJsonLocations) == null ? void 0 : _a2.length) ? sourceFileOptions.packageJsonLocations : void 0; + newSourceFile.packageJsonScope = sourceFileOptions.packageJsonScope; + Debug.assert(!newSourceFile.redirectInfo, "Host should not return a redirect source file from `getSourceFile`"); + let fileChanged; + if (oldSourceFile.redirectInfo) { + if (newSourceFile !== oldSourceFile.redirectInfo.unredirected) { + return 0 /* Not */; + } + fileChanged = false; + newSourceFile = oldSourceFile; + } else if (oldProgram.redirectTargetsMap.has(oldSourceFile.path)) { + if (newSourceFile !== oldSourceFile) { + return 0 /* Not */; + } + fileChanged = false; + } else { + fileChanged = newSourceFile !== oldSourceFile; + } + newSourceFile.path = oldSourceFile.path; + newSourceFile.originalFileName = oldSourceFile.originalFileName; + newSourceFile.resolvedPath = oldSourceFile.resolvedPath; + newSourceFile.fileName = oldSourceFile.fileName; + const packageName = oldProgram.sourceFileToPackageName.get(oldSourceFile.path); + if (packageName !== void 0) { + const prevKind = seenPackageNames.get(packageName); + const newKind = fileChanged ? 1 /* Modified */ : 0 /* Exists */; + if (prevKind !== void 0 && newKind === 1 /* Modified */ || prevKind === 1 /* Modified */) { + return 0 /* Not */; + } + seenPackageNames.set(packageName, newKind); + } + if (fileChanged) { + if (oldSourceFile.impliedNodeFormat !== newSourceFile.impliedNodeFormat) { + structureIsReused = 1 /* SafeModules */; + } else if (!arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) { + structureIsReused = 1 /* SafeModules */; + } else if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) { + structureIsReused = 1 /* SafeModules */; + } else if (!arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) { + structureIsReused = 1 /* SafeModules */; + } else { + collectExternalModuleReferences(newSourceFile); + if (!arrayIsEqualTo(oldSourceFile.imports, newSourceFile.imports, moduleNameIsEqualTo)) { + structureIsReused = 1 /* SafeModules */; + } else if (!arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations, moduleNameIsEqualTo)) { + structureIsReused = 1 /* SafeModules */; + } else if ((oldSourceFile.flags & 12582912 /* PermanentlySetIncrementalFlags */) !== (newSourceFile.flags & 12582912 /* PermanentlySetIncrementalFlags */)) { + structureIsReused = 1 /* SafeModules */; + } else if (!arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) { + structureIsReused = 1 /* SafeModules */; + } + } + modifiedSourceFiles.push(newSourceFile); + } else if (hasInvalidatedResolutions(oldSourceFile.path)) { + structureIsReused = 1 /* SafeModules */; + modifiedSourceFiles.push(newSourceFile); + } + newSourceFiles.push(newSourceFile); + } + if (structureIsReused !== 2 /* Completely */) { + return structureIsReused; + } + for (const newSourceFile of modifiedSourceFiles) { + const moduleNames = getModuleNames(newSourceFile); + const resolutions = resolveModuleNamesReusingOldState(moduleNames, newSourceFile); + (resolvedModulesProcessing ?? (resolvedModulesProcessing = /* @__PURE__ */ new Map())).set(newSourceFile.path, resolutions); + const optionsForFile = getCompilerOptionsForFile(newSourceFile); + const resolutionsChanged = hasChangesInResolutions( + moduleNames, + resolutions, + (name) => oldProgram.getResolvedModule(newSourceFile, name.text, getModeForUsageLocationWorker(newSourceFile, name, optionsForFile)), + moduleResolutionIsEqualTo + ); + if (resolutionsChanged) structureIsReused = 1 /* SafeModules */; + const typesReferenceDirectives = newSourceFile.typeReferenceDirectives; + const typeReferenceResolutions = resolveTypeReferenceDirectiveNamesReusingOldState(typesReferenceDirectives, newSourceFile); + (resolvedTypeReferenceDirectiveNamesProcessing ?? (resolvedTypeReferenceDirectiveNamesProcessing = /* @__PURE__ */ new Map())).set(newSourceFile.path, typeReferenceResolutions); + const typeReferenceResolutionsChanged = hasChangesInResolutions( + typesReferenceDirectives, + typeReferenceResolutions, + (name) => oldProgram.getResolvedTypeReferenceDirective( + newSourceFile, + getTypeReferenceResolutionName(name), + getModeForTypeReferenceDirectiveInFile(name, newSourceFile) + ), + typeDirectiveIsEqualTo + ); + if (typeReferenceResolutionsChanged) structureIsReused = 1 /* SafeModules */; + } + if (structureIsReused !== 2 /* Completely */) { + return structureIsReused; + } + if (changesAffectingProgramStructure(oldOptions, options)) { + return 1 /* SafeModules */; + } + if (oldProgram.resolvedLibReferences && forEachEntry(oldProgram.resolvedLibReferences, (resolution, libFileName) => pathForLibFileWorker(libFileName).actual !== resolution.actual)) { + return 1 /* SafeModules */; + } + if (host.hasChangedAutomaticTypeDirectiveNames) { + if (host.hasChangedAutomaticTypeDirectiveNames()) return 1 /* SafeModules */; + } else { + automaticTypeDirectiveNames = getAutomaticTypeDirectiveNames(options, host); + if (!arrayIsEqualTo(oldProgram.getAutomaticTypeDirectiveNames(), automaticTypeDirectiveNames)) return 1 /* SafeModules */; + } + missingFileNames = oldProgram.getMissingFilePaths(); + Debug.assert(newSourceFiles.length === oldProgram.getSourceFiles().length); + for (const newSourceFile of newSourceFiles) { + filesByName.set(newSourceFile.path, newSourceFile); + } + const oldFilesByNameMap = oldProgram.getFilesByNameMap(); + oldFilesByNameMap.forEach((oldFile, path) => { + if (!oldFile) { + filesByName.set(path, oldFile); + return; + } + if (oldFile.path === path) { + if (oldProgram.isSourceFileFromExternalLibrary(oldFile)) { + sourceFilesFoundSearchingNodeModules.set(oldFile.path, true); + } + return; + } + filesByName.set(path, filesByName.get(oldFile.path)); + }); + const isConfigIdentical = oldOptions.configFile && oldOptions.configFile === options.configFile || !oldOptions.configFile && !options.configFile && !optionsHaveChanges(oldOptions, options, optionDeclarations); + programDiagnostics.reuseStateFromOldProgram(oldProgram.getProgramDiagnosticsContainer(), isConfigIdentical); + skipVerifyCompilerOptions = isConfigIdentical; + files = newSourceFiles; + automaticTypeDirectiveNames = oldProgram.getAutomaticTypeDirectiveNames(); + automaticTypeDirectiveResolutions = oldProgram.getAutomaticTypeDirectiveResolutions(); + sourceFileToPackageName = oldProgram.sourceFileToPackageName; + redirectTargetsMap = oldProgram.redirectTargetsMap; + usesUriStyleNodeCoreModules = oldProgram.usesUriStyleNodeCoreModules; + resolvedModules = oldProgram.resolvedModules; + resolvedTypeReferenceDirectiveNames = oldProgram.resolvedTypeReferenceDirectiveNames; + resolvedLibReferences = oldProgram.resolvedLibReferences; + packageMap = oldProgram.getCurrentPackagesMap(); + return 2 /* Completely */; + } + function getEmitHost(writeFileCallback) { + return { + getCanonicalFileName, + getCommonSourceDirectory: program.getCommonSourceDirectory, + getCompilerOptions: program.getCompilerOptions, + getCurrentDirectory: () => currentDirectory, + getSourceFile: program.getSourceFile, + getSourceFileByPath: program.getSourceFileByPath, + getSourceFiles: program.getSourceFiles, + isSourceFileFromExternalLibrary, + getRedirectFromSourceFile, + isSourceOfProjectReferenceRedirect, + getSymlinkCache, + writeFile: writeFileCallback || writeFile2, + isEmitBlocked, + shouldTransformImportCall, + getEmitModuleFormatOfFile: getEmitModuleFormatOfFile2, + getDefaultResolutionModeForFile: getDefaultResolutionModeForFile2, + getModeForResolutionAtIndex: getModeForResolutionAtIndex2, + readFile: (f) => host.readFile(f), + fileExists: (f) => { + const path = toPath3(f); + if (getSourceFileByPath(path)) return true; + if (missingFileNames.has(path)) return false; + return host.fileExists(f); + }, + realpath: maybeBind(host, host.realpath), + useCaseSensitiveFileNames: () => host.useCaseSensitiveFileNames(), + getBuildInfo: () => { + var _a2; + return (_a2 = program.getBuildInfo) == null ? void 0 : _a2.call(program); + }, + getSourceFileFromReference: (file, ref) => program.getSourceFileFromReference(file, ref), + redirectTargetsMap, + getFileIncludeReasons: program.getFileIncludeReasons, + createHash: maybeBind(host, host.createHash), + getModuleResolutionCache: () => program.getModuleResolutionCache(), + trace: maybeBind(host, host.trace), + getGlobalTypingsCacheLocation: program.getGlobalTypingsCacheLocation + }; + } + function writeFile2(fileName, text, writeByteOrderMark, onError, sourceFiles, data) { + host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data); + } + function emitBuildInfo(writeFileCallback) { + var _a2, _b2; + (_a2 = tracing) == null ? void 0 : _a2.push( + tracing.Phase.Emit, + "emitBuildInfo", + {}, + /*separateBeginAndEnd*/ + true + ); + mark("beforeEmit"); + const emitResult = emitFiles( + notImplementedResolver, + getEmitHost(writeFileCallback), + /*targetSourceFile*/ + void 0, + /*transformers*/ + noTransformers, + /*emitOnly*/ + false, + /*onlyBuildInfo*/ + true + ); + mark("afterEmit"); + measure("Emit", "beforeEmit", "afterEmit"); + (_b2 = tracing) == null ? void 0 : _b2.pop(); + return emitResult; + } + function getResolvedProjectReferences() { + return resolvedProjectReferences; + } + function getProjectReferences() { + return projectReferences; + } + function isSourceFileFromExternalLibrary(file) { + return !!sourceFilesFoundSearchingNodeModules.get(file.path); + } + function isSourceFileDefaultLibrary(file) { + if (!file.isDeclarationFile) { + return false; + } + if (file.hasNoDefaultLib) { + return true; + } + if (options.noLib) { + return false; + } + const equalityComparer = host.useCaseSensitiveFileNames() ? equateStringsCaseSensitive : equateStringsCaseInsensitive; + if (!options.lib) { + return equalityComparer(file.fileName, getDefaultLibraryFileName()); + } else { + return some(options.lib, (libFileName) => { + const resolvedLib = resolvedLibReferences.get(libFileName); + return !!resolvedLib && equalityComparer(file.fileName, resolvedLib.actual); + }); + } + } + function getTypeChecker() { + return typeChecker || (typeChecker = createTypeChecker(program)); + } + function emit(sourceFile, writeFileCallback, cancellationToken, emitOnly, transformers, forceDtsEmit, skipBuildInfo) { + var _a2, _b2; + (_a2 = tracing) == null ? void 0 : _a2.push( + tracing.Phase.Emit, + "emit", + { path: sourceFile == null ? void 0 : sourceFile.path }, + /*separateBeginAndEnd*/ + true + ); + const result = runWithCancellationToken( + () => emitWorker( + program, + sourceFile, + writeFileCallback, + cancellationToken, + emitOnly, + transformers, + forceDtsEmit, + skipBuildInfo + ) + ); + (_b2 = tracing) == null ? void 0 : _b2.pop(); + return result; + } + function isEmitBlocked(emitFileName) { + return hasEmitBlockingDiagnostics.has(toPath3(emitFileName)); + } + function emitWorker(program2, sourceFile, writeFileCallback, cancellationToken, emitOnly, customTransformers, forceDtsEmit, skipBuildInfo) { + if (!forceDtsEmit) { + const result = handleNoEmitOptions(program2, sourceFile, writeFileCallback, cancellationToken); + if (result) return result; + } + const typeChecker2 = getTypeChecker(); + const emitResolver = typeChecker2.getEmitResolver( + options.outFile ? void 0 : sourceFile, + cancellationToken, + emitResolverSkipsTypeChecking(emitOnly, forceDtsEmit) + ); + mark("beforeEmit"); + const emitResult = typeChecker2.runWithCancellationToken( + cancellationToken, + () => emitFiles( + emitResolver, + getEmitHost(writeFileCallback), + sourceFile, + getTransformers(options, customTransformers, emitOnly), + emitOnly, + /*onlyBuildInfo*/ + false, + forceDtsEmit, + skipBuildInfo + ) + ); + mark("afterEmit"); + measure("Emit", "beforeEmit", "afterEmit"); + return emitResult; + } + function getSourceFile(fileName) { + return getSourceFileByPath(toPath3(fileName)); + } + function getSourceFileByPath(path) { + return filesByName.get(path) || void 0; + } + function getDiagnosticsHelper(sourceFile, getDiagnostics2, cancellationToken) { + if (sourceFile) { + return sortAndDeduplicateDiagnostics(getDiagnostics2(sourceFile, cancellationToken)); + } + return sortAndDeduplicateDiagnostics(flatMap(program.getSourceFiles(), (sourceFile2) => { + if (cancellationToken) { + cancellationToken.throwIfCancellationRequested(); + } + return getDiagnostics2(sourceFile2, cancellationToken); + })); + } + function getSyntacticDiagnostics(sourceFile, cancellationToken) { + return getDiagnosticsHelper(sourceFile, getSyntacticDiagnosticsForFile, cancellationToken); + } + function getSemanticDiagnostics(sourceFile, cancellationToken, nodesToCheck) { + return getDiagnosticsHelper( + sourceFile, + (sourceFile2, cancellationToken2) => getSemanticDiagnosticsForFile(sourceFile2, cancellationToken2, nodesToCheck), + cancellationToken + ); + } + function getCachedSemanticDiagnostics(sourceFile) { + return cachedBindAndCheckDiagnosticsForFile == null ? void 0 : cachedBindAndCheckDiagnosticsForFile.get(sourceFile.path); + } + function getBindAndCheckDiagnostics(sourceFile, cancellationToken) { + return getBindAndCheckDiagnosticsForFile( + sourceFile, + cancellationToken, + /*nodesToCheck*/ + void 0 + ); + } + function getProgramDiagnostics(sourceFile) { + var _a2; + if (skipTypeChecking(sourceFile, options, program)) { + return emptyArray; + } + const programDiagnosticsInFile = programDiagnostics.getCombinedDiagnostics(program).getDiagnostics(sourceFile.fileName); + if (!((_a2 = sourceFile.commentDirectives) == null ? void 0 : _a2.length)) { + return programDiagnosticsInFile; + } + return getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, programDiagnosticsInFile).diagnostics; + } + function getDeclarationDiagnostics2(sourceFile, cancellationToken) { + return getDiagnosticsHelper(sourceFile, getDeclarationDiagnosticsForFile, cancellationToken); + } + function getSyntacticDiagnosticsForFile(sourceFile) { + if (isSourceFileJS(sourceFile)) { + if (!sourceFile.additionalSyntacticDiagnostics) { + sourceFile.additionalSyntacticDiagnostics = getJSSyntacticDiagnosticsForFile(sourceFile); + } + return concatenate(sourceFile.additionalSyntacticDiagnostics, sourceFile.parseDiagnostics); + } + return sourceFile.parseDiagnostics; + } + function runWithCancellationToken(func) { + try { + return func(); + } catch (e) { + if (e instanceof OperationCanceledException) { + typeChecker = void 0; + } + throw e; + } + } + function getSemanticDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck) { + return concatenate( + filterSemanticDiagnostics(getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck), options), + getProgramDiagnostics(sourceFile) + ); + } + function getBindAndCheckDiagnosticsForFile(sourceFile, cancellationToken, nodesToCheck) { + if (nodesToCheck) { + return getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken, nodesToCheck); + } + let result = cachedBindAndCheckDiagnosticsForFile == null ? void 0 : cachedBindAndCheckDiagnosticsForFile.get(sourceFile.path); + if (!result) { + (cachedBindAndCheckDiagnosticsForFile ?? (cachedBindAndCheckDiagnosticsForFile = /* @__PURE__ */ new Map())).set( + sourceFile.path, + result = getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken) + ); + } + return result; + } + function getBindAndCheckDiagnosticsForFileNoCache(sourceFile, cancellationToken, nodesToCheck) { + return runWithCancellationToken(() => { + if (skipTypeChecking(sourceFile, options, program)) { + return emptyArray; + } + const typeChecker2 = getTypeChecker(); + Debug.assert(!!sourceFile.bindDiagnostics); + const isJs = sourceFile.scriptKind === 1 /* JS */ || sourceFile.scriptKind === 2 /* JSX */; + const isPlainJs = isPlainJsFile(sourceFile, options.checkJs); + const isCheckJs = isJs && isCheckJsEnabledForFile(sourceFile, options); + let bindDiagnostics = sourceFile.bindDiagnostics; + let checkDiagnostics = typeChecker2.getDiagnostics(sourceFile, cancellationToken, nodesToCheck); + if (isPlainJs) { + bindDiagnostics = filter(bindDiagnostics, (d) => plainJSErrors.has(d.code)); + checkDiagnostics = filter(checkDiagnostics, (d) => plainJSErrors.has(d.code)); + } + return getMergedBindAndCheckDiagnostics( + sourceFile, + !isPlainJs, + !!nodesToCheck, + bindDiagnostics, + checkDiagnostics, + isCheckJs ? sourceFile.jsDocDiagnostics : void 0 + ); + }); + } + function getMergedBindAndCheckDiagnostics(sourceFile, includeBindAndCheckDiagnostics, partialCheck, ...allDiagnostics) { + var _a2; + const flatDiagnostics = flatten(allDiagnostics); + if (!includeBindAndCheckDiagnostics || !((_a2 = sourceFile.commentDirectives) == null ? void 0 : _a2.length)) { + return flatDiagnostics; + } + const { diagnostics, directives } = getDiagnosticsWithPrecedingDirectives(sourceFile, sourceFile.commentDirectives, flatDiagnostics); + if (partialCheck) { + return diagnostics; + } + for (const errorExpectation of directives.getUnusedExpectations()) { + diagnostics.push(createDiagnosticForRange(sourceFile, errorExpectation.range, Diagnostics.Unused_ts_expect_error_directive)); + } + return diagnostics; + } + function getDiagnosticsWithPrecedingDirectives(sourceFile, commentDirectives, flatDiagnostics) { + const directives = createCommentDirectivesMap(sourceFile, commentDirectives); + const diagnostics = flatDiagnostics.filter((diagnostic) => markPrecedingCommentDirectiveLine(diagnostic, directives) === -1); + return { diagnostics, directives }; + } + function getSuggestionDiagnostics(sourceFile, cancellationToken) { + return runWithCancellationToken(() => { + return getTypeChecker().getSuggestionDiagnostics(sourceFile, cancellationToken); + }); + } + function markPrecedingCommentDirectiveLine(diagnostic, directives) { + const { file, start } = diagnostic; + if (!file) { + return -1; + } + const lineStarts = getLineStarts(file); + let line = computeLineAndCharacterOfPosition(lineStarts, start).line - 1; + while (line >= 0) { + if (directives.markUsed(line)) { + return line; + } + const lineText = file.text.slice(lineStarts[line], lineStarts[line + 1]).trim(); + if (lineText !== "" && !/^\s*\/\/.*$/.test(lineText)) { + return -1; + } + line--; + } + return -1; + } + function getJSSyntacticDiagnosticsForFile(sourceFile) { + return runWithCancellationToken(() => { + const diagnostics = []; + walk(sourceFile, sourceFile); + forEachChildRecursively(sourceFile, walk, walkArray); + return diagnostics; + function walk(node, parent2) { + switch (parent2.kind) { + case 170 /* Parameter */: + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + if (parent2.questionToken === node) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, "?")); + return "skip"; + } + // falls through + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 220 /* ArrowFunction */: + case 261 /* VariableDeclaration */: + if (parent2.type === node) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.Type_annotations_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + } + switch (node.kind) { + case 274 /* ImportClause */: + if (node.isTypeOnly) { + diagnostics.push(createDiagnosticForNode2(parent2, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "import type")); + return "skip"; + } + break; + case 279 /* ExportDeclaration */: + if (node.isTypeOnly) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, "export type")); + return "skip"; + } + break; + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: + if (node.isTypeOnly) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, isImportSpecifier(node) ? "import...type" : "export...type")); + return "skip"; + } + break; + case 272 /* ImportEqualsDeclaration */: + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.import_can_only_be_used_in_TypeScript_files)); + return "skip"; + case 278 /* ExportAssignment */: + if (node.isExportEquals) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.export_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + break; + case 299 /* HeritageClause */: + const heritageClause = node; + if (heritageClause.token === 119 /* ImplementsKeyword */) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.implements_clauses_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + break; + case 265 /* InterfaceDeclaration */: + const interfaceKeyword = tokenToString(120 /* InterfaceKeyword */); + Debug.assertIsDefined(interfaceKeyword); + diagnostics.push(createDiagnosticForNode2(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, interfaceKeyword)); + return "skip"; + case 268 /* ModuleDeclaration */: + const moduleKeyword = node.flags & 32 /* Namespace */ ? tokenToString(145 /* NamespaceKeyword */) : tokenToString(144 /* ModuleKeyword */); + Debug.assertIsDefined(moduleKeyword); + diagnostics.push(createDiagnosticForNode2(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, moduleKeyword)); + return "skip"; + case 266 /* TypeAliasDeclaration */: + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files)); + return "skip"; + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 263 /* FunctionDeclaration */: + if (!node.body) { + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.Signature_declarations_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + return; + case 267 /* EnumDeclaration */: + const enumKeyword = Debug.checkDefined(tokenToString(94 /* EnumKeyword */)); + diagnostics.push(createDiagnosticForNode2(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword)); + return "skip"; + case 236 /* NonNullExpression */: + diagnostics.push(createDiagnosticForNode2(node, Diagnostics.Non_null_assertions_can_only_be_used_in_TypeScript_files)); + return "skip"; + case 235 /* AsExpression */: + diagnostics.push(createDiagnosticForNode2(node.type, Diagnostics.Type_assertion_expressions_can_only_be_used_in_TypeScript_files)); + return "skip"; + case 239 /* SatisfiesExpression */: + diagnostics.push(createDiagnosticForNode2(node.type, Diagnostics.Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files)); + return "skip"; + case 217 /* TypeAssertionExpression */: + Debug.fail(); + } + } + function walkArray(nodes, parent2) { + if (canHaveIllegalDecorators(parent2)) { + const decorator = find(parent2.modifiers, isDecorator); + if (decorator) { + diagnostics.push(createDiagnosticForNode2(decorator, Diagnostics.Decorators_are_not_valid_here)); + } + } else if (canHaveDecorators(parent2) && parent2.modifiers) { + const decoratorIndex = findIndex(parent2.modifiers, isDecorator); + if (decoratorIndex >= 0) { + if (isParameter(parent2) && !options.experimentalDecorators) { + diagnostics.push(createDiagnosticForNode2(parent2.modifiers[decoratorIndex], Diagnostics.Decorators_are_not_valid_here)); + } else if (isClassDeclaration(parent2)) { + const exportIndex = findIndex(parent2.modifiers, isExportModifier); + if (exportIndex >= 0) { + const defaultIndex = findIndex(parent2.modifiers, isDefaultModifier); + if (decoratorIndex > exportIndex && defaultIndex >= 0 && decoratorIndex < defaultIndex) { + diagnostics.push(createDiagnosticForNode2(parent2.modifiers[decoratorIndex], Diagnostics.Decorators_are_not_valid_here)); + } else if (exportIndex >= 0 && decoratorIndex < exportIndex) { + const trailingDecoratorIndex = findIndex(parent2.modifiers, isDecorator, exportIndex); + if (trailingDecoratorIndex >= 0) { + diagnostics.push(addRelatedInfo( + createDiagnosticForNode2(parent2.modifiers[trailingDecoratorIndex], Diagnostics.Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export), + createDiagnosticForNode2(parent2.modifiers[decoratorIndex], Diagnostics.Decorator_used_before_export_here) + )); + } + } + } + } + } + } + switch (parent2.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 220 /* ArrowFunction */: + if (nodes === parent2.typeParameters) { + diagnostics.push(createDiagnosticForNodeArray2(nodes, Diagnostics.Type_parameter_declarations_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + // falls through + case 244 /* VariableStatement */: + if (nodes === parent2.modifiers) { + checkModifiers(parent2.modifiers, parent2.kind === 244 /* VariableStatement */); + return "skip"; + } + break; + case 173 /* PropertyDeclaration */: + if (nodes === parent2.modifiers) { + for (const modifier of nodes) { + if (isModifier(modifier) && modifier.kind !== 126 /* StaticKeyword */ && modifier.kind !== 129 /* AccessorKeyword */) { + diagnostics.push(createDiagnosticForNode2(modifier, Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, tokenToString(modifier.kind))); + } + } + return "skip"; + } + break; + case 170 /* Parameter */: + if (nodes === parent2.modifiers && some(nodes, isModifier)) { + diagnostics.push(createDiagnosticForNodeArray2(nodes, Diagnostics.Parameter_modifiers_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + break; + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 234 /* ExpressionWithTypeArguments */: + case 286 /* JsxSelfClosingElement */: + case 287 /* JsxOpeningElement */: + case 216 /* TaggedTemplateExpression */: + if (nodes === parent2.typeArguments) { + diagnostics.push(createDiagnosticForNodeArray2(nodes, Diagnostics.Type_arguments_can_only_be_used_in_TypeScript_files)); + return "skip"; + } + break; + } + } + function checkModifiers(modifiers, isConstValid) { + for (const modifier of modifiers) { + switch (modifier.kind) { + case 87 /* ConstKeyword */: + if (isConstValid) { + continue; + } + // to report error, + // falls through + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 148 /* ReadonlyKeyword */: + case 138 /* DeclareKeyword */: + case 128 /* AbstractKeyword */: + case 164 /* OverrideKeyword */: + case 103 /* InKeyword */: + case 147 /* OutKeyword */: + diagnostics.push(createDiagnosticForNode2(modifier, Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, tokenToString(modifier.kind))); + break; + // These are all legal modifiers. + case 126 /* StaticKeyword */: + case 95 /* ExportKeyword */: + case 90 /* DefaultKeyword */: + case 129 /* AccessorKeyword */: + } + } + } + function createDiagnosticForNodeArray2(nodes, message, ...args) { + const start = nodes.pos; + return createFileDiagnostic(sourceFile, start, nodes.end - start, message, ...args); + } + function createDiagnosticForNode2(node, message, ...args) { + return createDiagnosticForNodeInSourceFile(sourceFile, node, message, ...args); + } + }); + } + function getDeclarationDiagnosticsWorker(sourceFile, cancellationToken) { + let result = cachedDeclarationDiagnosticsForFile == null ? void 0 : cachedDeclarationDiagnosticsForFile.get(sourceFile.path); + if (!result) { + (cachedDeclarationDiagnosticsForFile ?? (cachedDeclarationDiagnosticsForFile = /* @__PURE__ */ new Map())).set( + sourceFile.path, + result = getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) + ); + } + return result; + } + function getDeclarationDiagnosticsForFileNoCache(sourceFile, cancellationToken) { + return runWithCancellationToken(() => { + const resolver = getTypeChecker().getEmitResolver(sourceFile, cancellationToken); + return getDeclarationDiagnostics(getEmitHost(noop), resolver, sourceFile) || emptyArray; + }); + } + function getDeclarationDiagnosticsForFile(sourceFile, cancellationToken) { + return sourceFile.isDeclarationFile ? emptyArray : getDeclarationDiagnosticsWorker(sourceFile, cancellationToken); + } + function getOptionsDiagnostics() { + return sortAndDeduplicateDiagnostics(concatenate( + programDiagnostics.getCombinedDiagnostics(program).getGlobalDiagnostics(), + getOptionsDiagnosticsOfConfigFile() + )); + } + function getOptionsDiagnosticsOfConfigFile() { + if (!options.configFile) return emptyArray; + let diagnostics = programDiagnostics.getCombinedDiagnostics(program).getDiagnostics(options.configFile.fileName); + forEachResolvedProjectReference2((resolvedRef) => { + diagnostics = concatenate(diagnostics, programDiagnostics.getCombinedDiagnostics(program).getDiagnostics(resolvedRef.sourceFile.fileName)); + }); + return diagnostics; + } + function getGlobalDiagnostics() { + return rootNames.length ? sortAndDeduplicateDiagnostics(getTypeChecker().getGlobalDiagnostics().slice()) : emptyArray; + } + function getConfigFileParsingDiagnostics2() { + return configFileParsingDiagnostics || emptyArray; + } + function processRootFile(fileName, isDefaultLib, ignoreNoDefaultLib, reason) { + processSourceFile( + normalizePath(fileName), + isDefaultLib, + ignoreNoDefaultLib, + /*packageId*/ + void 0, + reason + ); + } + function fileReferenceIsEqualTo(a, b) { + return a.fileName === b.fileName; + } + function moduleNameIsEqualTo(a, b) { + return a.kind === 80 /* Identifier */ ? b.kind === 80 /* Identifier */ && a.escapedText === b.escapedText : b.kind === 11 /* StringLiteral */ && a.text === b.text; + } + function createSyntheticImport(text, file) { + const externalHelpersModuleReference = factory.createStringLiteral(text); + const importDecl = factory.createImportDeclaration( + /*modifiers*/ + void 0, + /*importClause*/ + void 0, + externalHelpersModuleReference + ); + addInternalEmitFlags(importDecl, 2 /* NeverApplyImportHelper */); + setParent(externalHelpersModuleReference, importDecl); + setParent(importDecl, file); + externalHelpersModuleReference.flags &= ~16 /* Synthesized */; + importDecl.flags &= ~16 /* Synthesized */; + return externalHelpersModuleReference; + } + function collectExternalModuleReferences(file) { + if (file.imports) { + return; + } + const isJavaScriptFile = isSourceFileJS(file); + const isExternalModuleFile = isExternalModule(file); + let imports; + let moduleAugmentations; + let ambientModules; + if (isJavaScriptFile || !file.isDeclarationFile && (getIsolatedModules(options) || isExternalModule(file))) { + if (options.importHelpers) { + imports = [createSyntheticImport(externalHelpersModuleNameText, file)]; + } + const jsxImport = getJSXRuntimeImport(getJSXImplicitImportBase(options, file), options); + if (jsxImport) { + (imports || (imports = [])).push(createSyntheticImport(jsxImport, file)); + } + } + for (const node of file.statements) { + collectModuleReferences( + node, + /*inAmbientModule*/ + false + ); + } + if (file.flags & 4194304 /* PossiblyContainsDynamicImport */ || isJavaScriptFile) { + forEachDynamicImportOrRequireCall( + file, + /*includeTypeSpaceImports*/ + true, + /*requireStringLiteralLikeArgument*/ + true, + (node, moduleSpecifier) => { + setParentRecursive( + node, + /*incremental*/ + false + ); + imports = append(imports, moduleSpecifier); + } + ); + } + file.imports = imports || emptyArray; + file.moduleAugmentations = moduleAugmentations || emptyArray; + file.ambientModuleNames = ambientModules || emptyArray; + return; + function collectModuleReferences(node, inAmbientModule) { + if (isAnyImportOrReExport(node)) { + const moduleNameExpr = getExternalModuleName(node); + if (moduleNameExpr && isStringLiteral(moduleNameExpr) && moduleNameExpr.text && (!inAmbientModule || !isExternalModuleNameRelative(moduleNameExpr.text))) { + setParentRecursive( + node, + /*incremental*/ + false + ); + imports = append(imports, moduleNameExpr); + if (!usesUriStyleNodeCoreModules && currentNodeModulesDepth === 0 && !file.isDeclarationFile) { + if (startsWith(moduleNameExpr.text, "node:") && !exclusivelyPrefixedNodeCoreModules.has(moduleNameExpr.text)) { + usesUriStyleNodeCoreModules = true; + } else if (usesUriStyleNodeCoreModules === void 0 && unprefixedNodeCoreModules.has(moduleNameExpr.text)) { + usesUriStyleNodeCoreModules = false; + } + } + } + } else if (isModuleDeclaration(node)) { + if (isAmbientModule(node) && (inAmbientModule || hasSyntacticModifier(node, 128 /* Ambient */) || file.isDeclarationFile)) { + node.name.parent = node; + const nameText = getTextOfIdentifierOrLiteral(node.name); + if (isExternalModuleFile || inAmbientModule && !isExternalModuleNameRelative(nameText)) { + (moduleAugmentations || (moduleAugmentations = [])).push(node.name); + } else if (!inAmbientModule) { + if (file.isDeclarationFile) { + (ambientModules || (ambientModules = [])).push(nameText); + } + const body = node.body; + if (body) { + for (const statement of body.statements) { + collectModuleReferences( + statement, + /*inAmbientModule*/ + true + ); + } + } + } + } + } + } + } + function getLibFileFromReference(ref) { + var _a2; + const libFileName = getLibFileNameFromLibReference(ref); + const actualFileName = libFileName && ((_a2 = resolvedLibReferences == null ? void 0 : resolvedLibReferences.get(libFileName)) == null ? void 0 : _a2.actual); + return actualFileName !== void 0 ? getSourceFile(actualFileName) : void 0; + } + function getSourceFileFromReference(referencingFile, ref) { + return getSourceFileFromReferenceWorker(resolveTripleslashReference(ref.fileName, referencingFile.fileName), getSourceFile); + } + function getSourceFileFromReferenceWorker(fileName, getSourceFile2, fail, reason) { + if (hasExtension(fileName)) { + const canonicalFileName = host.getCanonicalFileName(fileName); + if (!options.allowNonTsExtensions && !forEach(flatten(supportedExtensionsWithJsonIfResolveJsonModule), (extension) => fileExtensionIs(canonicalFileName, extension))) { + if (fail) { + if (hasJSFileExtension(canonicalFileName)) { + fail(Diagnostics.File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option, fileName); + } else { + fail(Diagnostics.File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1, fileName, "'" + flatten(supportedExtensions).join("', '") + "'"); + } + } + return void 0; + } + const sourceFile = getSourceFile2(fileName); + if (fail) { + if (!sourceFile) { + const redirect = getRedirectFromSourceFile(fileName); + if (redirect == null ? void 0 : redirect.outputDts) { + fail(Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, redirect.outputDts, fileName); + } else { + fail(Diagnostics.File_0_not_found, fileName); + } + } else if (isReferencedFile(reason) && canonicalFileName === host.getCanonicalFileName(getSourceFileByPath(reason.file).fileName)) { + fail(Diagnostics.A_file_cannot_have_a_reference_to_itself); + } + } + return sourceFile; + } else { + const sourceFileNoExtension = options.allowNonTsExtensions && getSourceFile2(fileName); + if (sourceFileNoExtension) return sourceFileNoExtension; + if (fail && options.allowNonTsExtensions) { + fail(Diagnostics.File_0_not_found, fileName); + return void 0; + } + const sourceFileWithAddedExtension = forEach(supportedExtensions[0], (extension) => getSourceFile2(fileName + extension)); + if (fail && !sourceFileWithAddedExtension) fail(Diagnostics.Could_not_resolve_the_path_0_with_the_extensions_Colon_1, fileName, "'" + flatten(supportedExtensions).join("', '") + "'"); + return sourceFileWithAddedExtension; + } + } + function processSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, packageId, reason) { + getSourceFileFromReferenceWorker( + fileName, + (fileName2) => findSourceFile(fileName2, isDefaultLib, ignoreNoDefaultLib, reason, packageId), + // TODO: GH#18217 + (diagnostic, ...args) => addFilePreprocessingFileExplainingDiagnostic( + /*file*/ + void 0, + reason, + diagnostic, + args + ), + reason + ); + } + function processProjectReferenceFile(fileName, reason) { + return processSourceFile( + fileName, + /*isDefaultLib*/ + false, + /*ignoreNoDefaultLib*/ + false, + /*packageId*/ + void 0, + reason + ); + } + function reportFileNamesDifferOnlyInCasingError(fileName, existingFile, reason) { + const hasExistingReasonToReportErrorOn = !isReferencedFile(reason) && some(programDiagnostics.getFileReasons().get(existingFile.path), isReferencedFile); + if (hasExistingReasonToReportErrorOn) { + addFilePreprocessingFileExplainingDiagnostic(existingFile, reason, Diagnostics.Already_included_file_name_0_differs_from_file_name_1_only_in_casing, [existingFile.fileName, fileName]); + } else { + addFilePreprocessingFileExplainingDiagnostic(existingFile, reason, Diagnostics.File_name_0_differs_from_already_included_file_name_1_only_in_casing, [fileName, existingFile.fileName]); + } + } + function createRedirectedSourceFile(redirectTarget, unredirected, fileName, path, resolvedPath, originalFileName, sourceFileOptions) { + var _a2; + const redirect = parseNodeFactory.createRedirectedSourceFile({ redirectTarget, unredirected }); + redirect.fileName = fileName; + redirect.path = path; + redirect.resolvedPath = resolvedPath; + redirect.originalFileName = originalFileName; + redirect.packageJsonLocations = ((_a2 = sourceFileOptions.packageJsonLocations) == null ? void 0 : _a2.length) ? sourceFileOptions.packageJsonLocations : void 0; + redirect.packageJsonScope = sourceFileOptions.packageJsonScope; + sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0); + return redirect; + } + function findSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId) { + var _a2, _b2; + (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "findSourceFile", { + fileName, + isDefaultLib: isDefaultLib || void 0, + fileIncludeKind: FileIncludeKind[reason.kind] + }); + const result = findSourceFileWorker(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId); + (_b2 = tracing) == null ? void 0 : _b2.pop(); + return result; + } + function getCreateSourceFileOptions(fileName, moduleResolutionCache2, host2, options2) { + const result = getImpliedNodeFormatForFileWorker(getNormalizedAbsolutePath(fileName, currentDirectory), moduleResolutionCache2 == null ? void 0 : moduleResolutionCache2.getPackageJsonInfoCache(), host2, options2); + const languageVersion = getEmitScriptTarget(options2); + const setExternalModuleIndicator2 = getSetExternalModuleIndicator(options2); + return typeof result === "object" ? { ...result, languageVersion, setExternalModuleIndicator: setExternalModuleIndicator2, jsDocParsingMode: host2.jsDocParsingMode } : { languageVersion, impliedNodeFormat: result, setExternalModuleIndicator: setExternalModuleIndicator2, jsDocParsingMode: host2.jsDocParsingMode }; + } + function findSourceFileWorker(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId) { + var _a2, _b2; + const path = toPath3(fileName); + if (useSourceOfProjectReferenceRedirect) { + let source = getRedirectFromOutput(path); + if (!source && host.realpath && options.preserveSymlinks && isDeclarationFileName(fileName) && fileName.includes(nodeModulesPathPart)) { + const realPath2 = toPath3(host.realpath(fileName)); + if (realPath2 !== path) source = getRedirectFromOutput(realPath2); + } + if (source == null ? void 0 : source.source) { + const file2 = findSourceFile(source.source, isDefaultLib, ignoreNoDefaultLib, reason, packageId); + if (file2) addFileToFilesByName( + file2, + path, + fileName, + /*redirectedPath*/ + void 0 + ); + return file2; + } + } + const originalFileName = fileName; + if (filesByName.has(path)) { + const file2 = filesByName.get(path); + const addedReason = addFileIncludeReason( + file2 || void 0, + reason, + /*checkExisting*/ + true + ); + if (file2 && addedReason && !(options.forceConsistentCasingInFileNames === false)) { + const checkedName = file2.fileName; + const isRedirect = toPath3(checkedName) !== toPath3(fileName); + if (isRedirect) { + fileName = ((_a2 = getRedirectFromSourceFile(fileName)) == null ? void 0 : _a2.outputDts) || fileName; + } + const checkedAbsolutePath = getNormalizedAbsolutePathWithoutRoot(checkedName, currentDirectory); + const inputAbsolutePath = getNormalizedAbsolutePathWithoutRoot(fileName, currentDirectory); + if (checkedAbsolutePath !== inputAbsolutePath) { + reportFileNamesDifferOnlyInCasingError(fileName, file2, reason); + } + } + if (file2 && sourceFilesFoundSearchingNodeModules.get(file2.path) && currentNodeModulesDepth === 0) { + sourceFilesFoundSearchingNodeModules.set(file2.path, false); + if (!options.noResolve) { + processReferencedFiles(file2, isDefaultLib); + processTypeReferenceDirectives(file2); + } + if (!options.noLib) { + processLibReferenceDirectives(file2); + } + modulesWithElidedImports.set(file2.path, false); + processImportedModules(file2); + } else if (file2 && modulesWithElidedImports.get(file2.path)) { + if (currentNodeModulesDepth < maxNodeModuleJsDepth) { + modulesWithElidedImports.set(file2.path, false); + processImportedModules(file2); + } + } + return file2 || void 0; + } + let redirectedPath; + if (!useSourceOfProjectReferenceRedirect) { + const redirectProject = getRedirectFromSourceFile(fileName); + if (redirectProject == null ? void 0 : redirectProject.outputDts) { + if (redirectProject.resolvedRef.commandLine.options.outFile) { + return void 0; + } + fileName = redirectProject.outputDts; + redirectedPath = toPath3(redirectProject.outputDts); + } + } + const sourceFileOptions = getCreateSourceFileOptions(fileName, moduleResolutionCache, host, options); + const file = host.getSourceFile( + fileName, + sourceFileOptions, + (hostErrorMessage) => addFilePreprocessingFileExplainingDiagnostic( + /*file*/ + void 0, + reason, + Diagnostics.Cannot_read_file_0_Colon_1, + [fileName, hostErrorMessage] + ), + shouldCreateNewSourceFile + ); + if (packageId) { + const packageIdKey = packageIdToString(packageId); + const fileFromPackageId = packageIdToSourceFile.get(packageIdKey); + if (fileFromPackageId) { + const dupFile = createRedirectedSourceFile(fileFromPackageId, file, fileName, path, toPath3(fileName), originalFileName, sourceFileOptions); + redirectTargetsMap.add(fileFromPackageId.path, fileName); + addFileToFilesByName(dupFile, path, fileName, redirectedPath); + addFileIncludeReason( + dupFile, + reason, + /*checkExisting*/ + false + ); + sourceFileToPackageName.set(path, packageIdToPackageName(packageId)); + processingOtherFiles.push(dupFile); + return dupFile; + } else if (file) { + packageIdToSourceFile.set(packageIdKey, file); + sourceFileToPackageName.set(path, packageIdToPackageName(packageId)); + } + } + addFileToFilesByName(file, path, fileName, redirectedPath); + if (file) { + sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0); + file.fileName = fileName; + file.path = path; + file.resolvedPath = toPath3(fileName); + file.originalFileName = originalFileName; + file.packageJsonLocations = ((_b2 = sourceFileOptions.packageJsonLocations) == null ? void 0 : _b2.length) ? sourceFileOptions.packageJsonLocations : void 0; + file.packageJsonScope = sourceFileOptions.packageJsonScope; + addFileIncludeReason( + file, + reason, + /*checkExisting*/ + false + ); + if (host.useCaseSensitiveFileNames()) { + const pathLowerCase = toFileNameLowerCase(path); + const existingFile = filesByNameIgnoreCase.get(pathLowerCase); + if (existingFile) { + reportFileNamesDifferOnlyInCasingError(fileName, existingFile, reason); + } else { + filesByNameIgnoreCase.set(pathLowerCase, file); + } + } + skipDefaultLib = skipDefaultLib || file.hasNoDefaultLib && !ignoreNoDefaultLib; + if (!options.noResolve) { + processReferencedFiles(file, isDefaultLib); + processTypeReferenceDirectives(file); + } + if (!options.noLib) { + processLibReferenceDirectives(file); + } + processImportedModules(file); + if (isDefaultLib) { + processingDefaultLibFiles.push(file); + } else { + processingOtherFiles.push(file); + } + (filesWithReferencesProcessed ?? (filesWithReferencesProcessed = /* @__PURE__ */ new Set())).add(file.path); + } + return file; + } + function addFileIncludeReason(file, reason, checkExisting) { + if (file && (!checkExisting || !isReferencedFile(reason) || !(filesWithReferencesProcessed == null ? void 0 : filesWithReferencesProcessed.has(reason.file)))) { + programDiagnostics.getFileReasons().add(file.path, reason); + return true; + } + return false; + } + function addFileToFilesByName(file, path, fileName, redirectedPath) { + if (redirectedPath) { + updateFilesByNameMap(fileName, redirectedPath, file); + updateFilesByNameMap(fileName, path, file || false); + } else { + updateFilesByNameMap(fileName, path, file); + } + } + function updateFilesByNameMap(fileName, path, file) { + filesByName.set(path, file); + if (file !== void 0) missingFileNames.delete(path); + else missingFileNames.set(path, fileName); + } + function getRedirectFromSourceFile(fileName) { + return mapSourceFileToResolvedRef == null ? void 0 : mapSourceFileToResolvedRef.get(toPath3(fileName)); + } + function forEachResolvedProjectReference2(cb) { + return forEachResolvedProjectReference(resolvedProjectReferences, cb); + } + function getRedirectFromOutput(path) { + return mapOutputFileToResolvedRef == null ? void 0 : mapOutputFileToResolvedRef.get(path); + } + function isSourceOfProjectReferenceRedirect(fileName) { + return useSourceOfProjectReferenceRedirect && !!getRedirectFromSourceFile(fileName); + } + function getResolvedProjectReferenceByPath(projectReferencePath) { + if (!projectReferenceRedirects) { + return void 0; + } + return projectReferenceRedirects.get(projectReferencePath) || void 0; + } + function processReferencedFiles(file, isDefaultLib) { + forEach(file.referencedFiles, (ref, index) => { + processSourceFile( + resolveTripleslashReference(ref.fileName, file.fileName), + isDefaultLib, + /*ignoreNoDefaultLib*/ + false, + /*packageId*/ + void 0, + { kind: 4 /* ReferenceFile */, file: file.path, index } + ); + }); + } + function processTypeReferenceDirectives(file) { + const typeDirectives = file.typeReferenceDirectives; + if (!typeDirectives.length) return; + const resolutions = (resolvedTypeReferenceDirectiveNamesProcessing == null ? void 0 : resolvedTypeReferenceDirectiveNamesProcessing.get(file.path)) || resolveTypeReferenceDirectiveNamesReusingOldState(typeDirectives, file); + const resolutionsInFile = createModeAwareCache(); + (resolvedTypeReferenceDirectiveNames ?? (resolvedTypeReferenceDirectiveNames = /* @__PURE__ */ new Map())).set(file.path, resolutionsInFile); + for (let index = 0; index < typeDirectives.length; index++) { + const ref = file.typeReferenceDirectives[index]; + const resolvedTypeReferenceDirective = resolutions[index]; + const fileName = ref.fileName; + const mode = getModeForTypeReferenceDirectiveInFile(ref, file); + resolutionsInFile.set(fileName, mode, resolvedTypeReferenceDirective); + processTypeReferenceDirective(fileName, mode, resolvedTypeReferenceDirective, { kind: 5 /* TypeReferenceDirective */, file: file.path, index }); + } + } + function getCompilerOptionsForFile(file) { + var _a2; + return ((_a2 = getRedirectReferenceForResolution(file)) == null ? void 0 : _a2.commandLine.options) || options; + } + function processTypeReferenceDirective(typeReferenceDirective, mode, resolution, reason) { + var _a2, _b2; + (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "processTypeReferenceDirective", { directive: typeReferenceDirective, hasResolved: !!resolution.resolvedTypeReferenceDirective, refKind: reason.kind, refPath: isReferencedFile(reason) ? reason.file : void 0 }); + processTypeReferenceDirectiveWorker(typeReferenceDirective, mode, resolution, reason); + (_b2 = tracing) == null ? void 0 : _b2.pop(); + } + function processTypeReferenceDirectiveWorker(typeReferenceDirective, mode, resolution, reason) { + addResolutionDiagnostics(resolution); + const { resolvedTypeReferenceDirective } = resolution; + if (resolvedTypeReferenceDirective) { + if (resolvedTypeReferenceDirective.isExternalLibraryImport) currentNodeModulesDepth++; + processSourceFile( + resolvedTypeReferenceDirective.resolvedFileName, + /*isDefaultLib*/ + false, + /*ignoreNoDefaultLib*/ + false, + resolvedTypeReferenceDirective.packageId, + reason + ); + if (resolvedTypeReferenceDirective.isExternalLibraryImport) currentNodeModulesDepth--; + } else { + addFilePreprocessingFileExplainingDiagnostic( + /*file*/ + void 0, + reason, + Diagnostics.Cannot_find_type_definition_file_for_0, + [typeReferenceDirective] + ); + } + } + function pathForLibFile(libFileName) { + const existing = resolvedLibReferences == null ? void 0 : resolvedLibReferences.get(libFileName); + if (existing) return existing.actual; + const result = pathForLibFileWorker(libFileName); + (resolvedLibReferences ?? (resolvedLibReferences = /* @__PURE__ */ new Map())).set(libFileName, result); + return result.actual; + } + function pathForLibFileWorker(libFileName) { + var _a2, _b2, _c2, _d2, _e2; + const existing = resolvedLibProcessing == null ? void 0 : resolvedLibProcessing.get(libFileName); + if (existing) return existing; + if (options.libReplacement === false) { + const result2 = { + resolution: { + resolvedModule: void 0 + }, + actual: combinePaths(defaultLibraryPath, libFileName) + }; + (resolvedLibProcessing ?? (resolvedLibProcessing = /* @__PURE__ */ new Map())).set(libFileName, result2); + return result2; + } + if (structureIsReused !== 0 /* Not */ && oldProgram && !hasInvalidatedLibResolutions(libFileName)) { + const oldResolution = (_a2 = oldProgram.resolvedLibReferences) == null ? void 0 : _a2.get(libFileName); + if (oldResolution) { + if (oldResolution.resolution && isTraceEnabled(options, host)) { + const libraryName2 = getLibraryNameFromLibFileName(libFileName); + const resolveFrom2 = getInferredLibraryNameResolveFrom(options, currentDirectory, libFileName); + trace( + host, + oldResolution.resolution.resolvedModule ? oldResolution.resolution.resolvedModule.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved, + libraryName2, + getNormalizedAbsolutePath(resolveFrom2, currentDirectory), + (_b2 = oldResolution.resolution.resolvedModule) == null ? void 0 : _b2.resolvedFileName, + ((_c2 = oldResolution.resolution.resolvedModule) == null ? void 0 : _c2.packageId) && packageIdToString(oldResolution.resolution.resolvedModule.packageId) + ); + } + (resolvedLibProcessing ?? (resolvedLibProcessing = /* @__PURE__ */ new Map())).set(libFileName, oldResolution); + return oldResolution; + } + } + const libraryName = getLibraryNameFromLibFileName(libFileName); + const resolveFrom = getInferredLibraryNameResolveFrom(options, currentDirectory, libFileName); + (_d2 = tracing) == null ? void 0 : _d2.push(tracing.Phase.Program, "resolveLibrary", { resolveFrom }); + mark("beforeResolveLibrary"); + const resolution = actualResolveLibrary(libraryName, resolveFrom, options, libFileName); + mark("afterResolveLibrary"); + measure("ResolveLibrary", "beforeResolveLibrary", "afterResolveLibrary"); + (_e2 = tracing) == null ? void 0 : _e2.pop(); + const result = { + resolution, + actual: resolution.resolvedModule ? resolution.resolvedModule.resolvedFileName : combinePaths(defaultLibraryPath, libFileName) + }; + (resolvedLibProcessing ?? (resolvedLibProcessing = /* @__PURE__ */ new Map())).set(libFileName, result); + return result; + } + function processLibReferenceDirectives(file) { + forEach(file.libReferenceDirectives, (libReference, index) => { + const libFileName = getLibFileNameFromLibReference(libReference); + if (libFileName) { + processRootFile( + pathForLibFile(libFileName), + /*isDefaultLib*/ + true, + /*ignoreNoDefaultLib*/ + true, + { kind: 7 /* LibReferenceDirective */, file: file.path, index } + ); + } else { + programDiagnostics.addFileProcessingDiagnostic({ + kind: 0 /* FilePreprocessingLibReferenceDiagnostic */, + reason: { kind: 7 /* LibReferenceDirective */, file: file.path, index } + }); + } + }); + } + function getCanonicalFileName(fileName) { + return host.getCanonicalFileName(fileName); + } + function processImportedModules(file) { + collectExternalModuleReferences(file); + if (file.imports.length || file.moduleAugmentations.length) { + const moduleNames = getModuleNames(file); + const resolutions = (resolvedModulesProcessing == null ? void 0 : resolvedModulesProcessing.get(file.path)) || resolveModuleNamesReusingOldState(moduleNames, file); + Debug.assert(resolutions.length === moduleNames.length); + const optionsForFile = getCompilerOptionsForFile(file); + const resolutionsInFile = createModeAwareCache(); + (resolvedModules ?? (resolvedModules = /* @__PURE__ */ new Map())).set(file.path, resolutionsInFile); + for (let index = 0; index < moduleNames.length; index++) { + const resolution = resolutions[index].resolvedModule; + const moduleName = moduleNames[index].text; + const mode = getModeForUsageLocationWorker(file, moduleNames[index], optionsForFile); + resolutionsInFile.set(moduleName, mode, resolutions[index]); + addResolutionDiagnosticsFromResolutionOrCache(file, moduleName, resolutions[index], mode); + if (!resolution) { + continue; + } + const isFromNodeModulesSearch = resolution.isExternalLibraryImport; + const isJsFile = !resolutionExtensionIsTSOrJson(resolution.extension) && !getRedirectFromSourceFile(resolution.resolvedFileName); + const isJsFileFromNodeModules = isFromNodeModulesSearch && isJsFile && (!resolution.originalPath || pathContainsNodeModules(resolution.resolvedFileName)); + const resolvedFileName = resolution.resolvedFileName; + if (isFromNodeModulesSearch) { + currentNodeModulesDepth++; + } + const elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModuleJsDepth; + const shouldAddFile = resolvedFileName && !getResolutionDiagnostic(optionsForFile, resolution, file) && !optionsForFile.noResolve && index < file.imports.length && !elideImport && !(isJsFile && !getAllowJSCompilerOption(optionsForFile)) && (isInJSFile(file.imports[index]) || !(file.imports[index].flags & 16777216 /* JSDoc */)); + if (elideImport) { + modulesWithElidedImports.set(file.path, true); + } else if (shouldAddFile) { + findSourceFile( + resolvedFileName, + /*isDefaultLib*/ + false, + /*ignoreNoDefaultLib*/ + false, + { kind: 3 /* Import */, file: file.path, index }, + resolution.packageId + ); + } + if (isFromNodeModulesSearch) { + currentNodeModulesDepth--; + } + } + } + } + function checkSourceFilesBelongToPath(sourceFiles, rootDirectory) { + let allFilesBelongToPath = true; + const absoluteRootDirectoryPath = host.getCanonicalFileName(getNormalizedAbsolutePath(rootDirectory, currentDirectory)); + for (const sourceFile of sourceFiles) { + if (!sourceFile.isDeclarationFile) { + const absoluteSourceFilePath = host.getCanonicalFileName(getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory)); + if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) { + programDiagnostics.addLazyConfigDiagnostic( + sourceFile, + Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, + sourceFile.fileName, + rootDirectory + ); + allFilesBelongToPath = false; + } + } + } + return allFilesBelongToPath; + } + function parseProjectReferenceConfigFile(ref) { + if (!projectReferenceRedirects) { + projectReferenceRedirects = /* @__PURE__ */ new Map(); + } + const refPath = resolveProjectReferencePath(ref); + const sourceFilePath = toPath3(refPath); + const fromCache = projectReferenceRedirects.get(sourceFilePath); + if (fromCache !== void 0) { + return fromCache || void 0; + } + let commandLine; + let sourceFile; + if (host.getParsedCommandLine) { + commandLine = host.getParsedCommandLine(refPath); + if (!commandLine) { + addFileToFilesByName( + /*file*/ + void 0, + sourceFilePath, + refPath, + /*redirectedPath*/ + void 0 + ); + projectReferenceRedirects.set(sourceFilePath, false); + return void 0; + } + sourceFile = Debug.checkDefined(commandLine.options.configFile); + Debug.assert(!sourceFile.path || sourceFile.path === sourceFilePath); + addFileToFilesByName( + sourceFile, + sourceFilePath, + refPath, + /*redirectedPath*/ + void 0 + ); + } else { + const basePath = getNormalizedAbsolutePath(getDirectoryPath(refPath), currentDirectory); + sourceFile = host.getSourceFile(refPath, 100 /* JSON */); + addFileToFilesByName( + sourceFile, + sourceFilePath, + refPath, + /*redirectedPath*/ + void 0 + ); + if (sourceFile === void 0) { + projectReferenceRedirects.set(sourceFilePath, false); + return void 0; + } + commandLine = parseJsonSourceFileConfigFileContent( + sourceFile, + configParsingHost, + basePath, + /*existingOptions*/ + void 0, + refPath + ); + } + sourceFile.fileName = refPath; + sourceFile.path = sourceFilePath; + sourceFile.resolvedPath = sourceFilePath; + sourceFile.originalFileName = refPath; + const resolvedRef = { commandLine, sourceFile }; + projectReferenceRedirects.set(sourceFilePath, resolvedRef); + if (options.configFile !== sourceFile) { + mapSourceFileToResolvedRef ?? (mapSourceFileToResolvedRef = /* @__PURE__ */ new Map()); + mapOutputFileToResolvedRef ?? (mapOutputFileToResolvedRef = /* @__PURE__ */ new Map()); + let outDts; + if (commandLine.options.outFile) { + outDts = changeExtension(commandLine.options.outFile, ".d.ts" /* Dts */); + mapOutputFileToResolvedRef == null ? void 0 : mapOutputFileToResolvedRef.set(toPath3(outDts), { resolvedRef }); + } + const getCommonSourceDirectory3 = memoize(() => getCommonSourceDirectoryOfConfig(resolvedRef.commandLine, !host.useCaseSensitiveFileNames())); + commandLine.fileNames.forEach((fileName) => { + const path = toPath3(fileName); + let outputDts; + if (!isDeclarationFileName(fileName) && !fileExtensionIs(fileName, ".json" /* Json */)) { + if (!commandLine.options.outFile) { + outputDts = getOutputDeclarationFileName(fileName, resolvedRef.commandLine, !host.useCaseSensitiveFileNames(), getCommonSourceDirectory3); + mapOutputFileToResolvedRef.set(toPath3(outputDts), { resolvedRef, source: fileName }); + } else { + outputDts = outDts; + } + } + mapSourceFileToResolvedRef.set(path, { resolvedRef, outputDts }); + }); + } + if (commandLine.projectReferences) { + resolvedRef.references = commandLine.projectReferences.map(parseProjectReferenceConfigFile); + } + return resolvedRef; + } + function verifyCompilerOptions() { + if (options.strictPropertyInitialization && !getStrictOptionValue(options, "strictNullChecks")) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "strictPropertyInitialization", "strictNullChecks"); + } + if (options.exactOptionalPropertyTypes && !getStrictOptionValue(options, "strictNullChecks")) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "exactOptionalPropertyTypes", "strictNullChecks"); + } + if (options.isolatedModules || options.verbatimModuleSyntax) { + if (options.outFile) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "outFile", options.verbatimModuleSyntax ? "verbatimModuleSyntax" : "isolatedModules"); + } + } + if (options.isolatedDeclarations) { + if (getAllowJSCompilerOption(options)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "allowJs", "isolatedDeclarations"); + } + if (!getEmitDeclarations(options)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "isolatedDeclarations", "declaration", "composite"); + } + } + if (options.inlineSourceMap) { + if (options.sourceMap) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "sourceMap", "inlineSourceMap"); + } + if (options.mapRoot) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "mapRoot", "inlineSourceMap"); + } + } + if (options.composite) { + if (options.declaration === false) { + createDiagnosticForOptionName(Diagnostics.Composite_projects_may_not_disable_declaration_emit, "declaration"); + } + if (options.incremental === false) { + createDiagnosticForOptionName(Diagnostics.Composite_projects_may_not_disable_incremental_compilation, "declaration"); + } + } + const outputFile = options.outFile; + if (!options.tsBuildInfoFile && options.incremental && !outputFile && !options.configFilePath) { + programDiagnostics.addConfigDiagnostic(createCompilerDiagnostic(Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified)); + } + verifyDeprecatedCompilerOptions(); + verifyProjectReferences(); + if (options.composite) { + const rootPaths = new Set(rootNames.map(toPath3)); + for (const file of files) { + if (sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) { + programDiagnostics.addLazyConfigDiagnostic( + file, + Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, + file.fileName, + options.configFilePath || "" + ); + } + } + } + if (options.paths) { + for (const key in options.paths) { + if (!hasProperty(options.paths, key)) { + continue; + } + if (!hasZeroOrOneAsteriskCharacter(key)) { + createDiagnosticForOptionPaths( + /*onKey*/ + true, + key, + Diagnostics.Pattern_0_can_have_at_most_one_Asterisk_character, + key + ); + } + if (isArray(options.paths[key])) { + const len = options.paths[key].length; + if (len === 0) { + createDiagnosticForOptionPaths( + /*onKey*/ + false, + key, + Diagnostics.Substitutions_for_pattern_0_shouldn_t_be_an_empty_array, + key + ); + } + for (let i = 0; i < len; i++) { + const subst = options.paths[key][i]; + const typeOfSubst = typeof subst; + if (typeOfSubst === "string") { + if (!hasZeroOrOneAsteriskCharacter(subst)) { + createDiagnosticForOptionPathKeyValue(key, i, Diagnostics.Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character, subst, key); + } + if (!options.baseUrl && !pathIsRelative(subst) && !pathIsAbsolute(subst)) { + createDiagnosticForOptionPathKeyValue(key, i, Diagnostics.Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash); + } + } else { + createDiagnosticForOptionPathKeyValue(key, i, Diagnostics.Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2, subst, key, typeOfSubst); + } + } + } else { + createDiagnosticForOptionPaths( + /*onKey*/ + false, + key, + Diagnostics.Substitutions_for_pattern_0_should_be_an_array, + key + ); + } + } + } + if (!options.sourceMap && !options.inlineSourceMap) { + if (options.inlineSources) { + createDiagnosticForOptionName(Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided, "inlineSources"); + } + if (options.sourceRoot) { + createDiagnosticForOptionName(Diagnostics.Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided, "sourceRoot"); + } + } + if (options.mapRoot && !(options.sourceMap || options.declarationMap)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "mapRoot", "sourceMap", "declarationMap"); + } + if (options.declarationDir) { + if (!getEmitDeclarations(options)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "declarationDir", "declaration", "composite"); + } + if (outputFile) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "declarationDir", "outFile"); + } + } + if (options.declarationMap && !getEmitDeclarations(options)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "declarationMap", "declaration", "composite"); + } + if (options.lib && options.noLib) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "lib", "noLib"); + } + const languageVersion = getEmitScriptTarget(options); + const firstNonAmbientExternalModuleSourceFile = find(files, (f) => isExternalModule(f) && !f.isDeclarationFile); + if (options.isolatedModules || options.verbatimModuleSyntax) { + if (options.module === 0 /* None */ && languageVersion < 2 /* ES2015 */ && options.isolatedModules) { + createDiagnosticForOptionName(Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher, "isolatedModules", "target"); + } + if (options.preserveConstEnums === false) { + createDiagnosticForOptionName(Diagnostics.Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled, options.verbatimModuleSyntax ? "verbatimModuleSyntax" : "isolatedModules", "preserveConstEnums"); + } + } else if (firstNonAmbientExternalModuleSourceFile && languageVersion < 2 /* ES2015 */ && options.module === 0 /* None */) { + const span = getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, typeof firstNonAmbientExternalModuleSourceFile.externalModuleIndicator === "boolean" ? firstNonAmbientExternalModuleSourceFile : firstNonAmbientExternalModuleSourceFile.externalModuleIndicator); + programDiagnostics.addConfigDiagnostic(createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); + } + if (outputFile && !options.emitDeclarationOnly) { + if (options.module && !(options.module === 2 /* AMD */ || options.module === 4 /* System */)) { + createDiagnosticForOptionName(Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, "outFile", "module"); + } else if (options.module === void 0 && firstNonAmbientExternalModuleSourceFile) { + const span = getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, typeof firstNonAmbientExternalModuleSourceFile.externalModuleIndicator === "boolean" ? firstNonAmbientExternalModuleSourceFile : firstNonAmbientExternalModuleSourceFile.externalModuleIndicator); + programDiagnostics.addConfigDiagnostic(createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system, "outFile")); + } + } + if (getResolveJsonModule(options)) { + if (getEmitModuleResolutionKind(options) === 1 /* Classic */) { + createDiagnosticForOptionName(Diagnostics.Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic, "resolveJsonModule"); + } else if (!hasJsonModuleEmitEnabled(options)) { + createDiagnosticForOptionName(Diagnostics.Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd, "resolveJsonModule", "module"); + } + } + if (options.outDir || // there is --outDir specified + options.rootDir || // there is --rootDir specified + options.sourceRoot || // there is --sourceRoot specified + options.mapRoot || // there is --mapRoot specified + getEmitDeclarations(options) && options.declarationDir) { + const dir = getCommonSourceDirectory2(); + if (options.outDir && dir === "" && files.some((file) => getRootLength(file.fileName) > 1)) { + createDiagnosticForOptionName(Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files, "outDir"); + } + } + if (options.checkJs && !getAllowJSCompilerOption(options)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "checkJs", "allowJs"); + } + if (options.emitDeclarationOnly) { + if (!getEmitDeclarations(options)) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "emitDeclarationOnly", "declaration", "composite"); + } + } + if (options.emitDecoratorMetadata && !options.experimentalDecorators) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "emitDecoratorMetadata", "experimentalDecorators"); + } + if (options.jsxFactory) { + if (options.reactNamespace) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "reactNamespace", "jsxFactory"); + } + if (options.jsx === 4 /* ReactJSX */ || options.jsx === 5 /* ReactJSXDev */) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "jsxFactory", inverseJsxOptionMap.get("" + options.jsx)); + } + if (!parseIsolatedEntityName(options.jsxFactory, languageVersion)) { + createOptionValueDiagnostic("jsxFactory", Diagnostics.Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name, options.jsxFactory); + } + } else if (options.reactNamespace && !isIdentifierText(options.reactNamespace, languageVersion)) { + createOptionValueDiagnostic("reactNamespace", Diagnostics.Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier, options.reactNamespace); + } + if (options.jsxFragmentFactory) { + if (!options.jsxFactory) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "jsxFragmentFactory", "jsxFactory"); + } + if (options.jsx === 4 /* ReactJSX */ || options.jsx === 5 /* ReactJSXDev */) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "jsxFragmentFactory", inverseJsxOptionMap.get("" + options.jsx)); + } + if (!parseIsolatedEntityName(options.jsxFragmentFactory, languageVersion)) { + createOptionValueDiagnostic("jsxFragmentFactory", Diagnostics.Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name, options.jsxFragmentFactory); + } + } + if (options.reactNamespace) { + if (options.jsx === 4 /* ReactJSX */ || options.jsx === 5 /* ReactJSXDev */) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "reactNamespace", inverseJsxOptionMap.get("" + options.jsx)); + } + } + if (options.jsxImportSource) { + if (options.jsx === 2 /* React */) { + createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_when_option_jsx_is_1, "jsxImportSource", inverseJsxOptionMap.get("" + options.jsx)); + } + } + const moduleKind = getEmitModuleKind(options); + if (options.verbatimModuleSyntax) { + if (moduleKind === 2 /* AMD */ || moduleKind === 3 /* UMD */ || moduleKind === 4 /* System */) { + createDiagnosticForOptionName(Diagnostics.Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System, "verbatimModuleSyntax"); + } + } + if (options.allowImportingTsExtensions && !(options.noEmit || options.emitDeclarationOnly || options.rewriteRelativeImportExtensions)) { + createOptionValueDiagnostic("allowImportingTsExtensions", Diagnostics.Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set); + } + const moduleResolution = getEmitModuleResolutionKind(options); + if (options.resolvePackageJsonExports && !moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { + createDiagnosticForOptionName(Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler, "resolvePackageJsonExports"); + } + if (options.resolvePackageJsonImports && !moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { + createDiagnosticForOptionName(Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler, "resolvePackageJsonImports"); + } + if (options.customConditions && !moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { + createDiagnosticForOptionName(Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler, "customConditions"); + } + if (moduleResolution === 100 /* Bundler */ && !emitModuleKindIsNonNodeESM(moduleKind) && moduleKind !== 200 /* Preserve */) { + createOptionValueDiagnostic("moduleResolution", Diagnostics.Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later, "bundler"); + } + if (ModuleKind[moduleKind] && (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) && !(3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */)) { + const moduleKindName = ModuleKind[moduleKind]; + const moduleResolutionName = ModuleResolutionKind[moduleKindName] ? moduleKindName : "Node16"; + createOptionValueDiagnostic("moduleResolution", Diagnostics.Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1, moduleResolutionName, moduleKindName); + } else if (ModuleResolutionKind[moduleResolution] && (3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */) && !(100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */)) { + const moduleResolutionName = ModuleResolutionKind[moduleResolution]; + createOptionValueDiagnostic("module", Diagnostics.Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1, moduleResolutionName, moduleResolutionName); + } + if (!options.noEmit && !options.suppressOutputPathCheck) { + const emitHost = getEmitHost(); + const emitFilesSeen = /* @__PURE__ */ new Set(); + forEachEmittedFile(emitHost, (emitFileNames) => { + if (!options.emitDeclarationOnly) { + verifyEmitFilePath(emitFileNames.jsFilePath, emitFilesSeen); + } + verifyEmitFilePath(emitFileNames.declarationFilePath, emitFilesSeen); + }); + } + function verifyEmitFilePath(emitFileName, emitFilesSeen) { + if (emitFileName) { + const emitFilePath = toPath3(emitFileName); + if (filesByName.has(emitFilePath)) { + let chain; + if (!options.configFilePath) { + chain = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript_files_Learn_more_at_https_Colon_Slash_Slashaka_ms_Slashtsconfig + ); + } + chain = chainDiagnosticMessages(chain, Diagnostics.Cannot_write_file_0_because_it_would_overwrite_input_file, emitFileName); + blockEmittingOfFile(emitFileName, createCompilerDiagnosticFromMessageChain(chain)); + } + const emitFileKey = !host.useCaseSensitiveFileNames() ? toFileNameLowerCase(emitFilePath) : emitFilePath; + if (emitFilesSeen.has(emitFileKey)) { + blockEmittingOfFile(emitFileName, createCompilerDiagnostic(Diagnostics.Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files, emitFileName)); + } else { + emitFilesSeen.add(emitFileKey); + } + } + } + } + function getIgnoreDeprecationsVersion() { + const ignoreDeprecations = options.ignoreDeprecations; + if (ignoreDeprecations) { + if (ignoreDeprecations === "5.0") { + return new Version(ignoreDeprecations); + } + reportInvalidIgnoreDeprecations(); + } + return Version.zero; + } + function checkDeprecations(deprecatedIn, removedIn, createDiagnostic, fn) { + const deprecatedInVersion = new Version(deprecatedIn); + const removedInVersion = new Version(removedIn); + const typescriptVersion = new Version(typeScriptVersion3 || versionMajorMinor); + const ignoreDeprecationsVersion = getIgnoreDeprecationsVersion(); + const mustBeRemoved = !(removedInVersion.compareTo(typescriptVersion) === 1 /* GreaterThan */); + const canBeSilenced = !mustBeRemoved && ignoreDeprecationsVersion.compareTo(deprecatedInVersion) === -1 /* LessThan */; + if (mustBeRemoved || canBeSilenced) { + fn((name, value, useInstead) => { + if (mustBeRemoved) { + if (value === void 0) { + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_has_been_removed_Please_remove_it_from_your_configuration, name); + } else { + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_has_been_removed_Please_remove_it_from_your_configuration, name, value); + } + } else { + if (value === void 0) { + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn); + } else { + createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn); + } + } + }); + } + } + function verifyDeprecatedCompilerOptions() { + function createDiagnostic(name, value, useInstead, message, ...args) { + if (useInstead) { + const details = chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Use_0_instead, + useInstead + ); + const chain = chainDiagnosticMessages(details, message, ...args); + createDiagnosticForOption( + /*onKey*/ + !value, + name, + /*option2*/ + void 0, + chain + ); + } else { + createDiagnosticForOption( + /*onKey*/ + !value, + name, + /*option2*/ + void 0, + message, + ...args + ); + } + } + checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { + if (options.target === 0 /* ES3 */) { + createDeprecatedDiagnostic("target", "ES3"); + } + if (options.noImplicitUseStrict) { + createDeprecatedDiagnostic("noImplicitUseStrict"); + } + if (options.keyofStringsOnly) { + createDeprecatedDiagnostic("keyofStringsOnly"); + } + if (options.suppressExcessPropertyErrors) { + createDeprecatedDiagnostic("suppressExcessPropertyErrors"); + } + if (options.suppressImplicitAnyIndexErrors) { + createDeprecatedDiagnostic("suppressImplicitAnyIndexErrors"); + } + if (options.noStrictGenericChecks) { + createDeprecatedDiagnostic("noStrictGenericChecks"); + } + if (options.charset) { + createDeprecatedDiagnostic("charset"); + } + if (options.out) { + createDeprecatedDiagnostic( + "out", + /*value*/ + void 0, + "outFile" + ); + } + if (options.importsNotUsedAsValues) { + createDeprecatedDiagnostic( + "importsNotUsedAsValues", + /*value*/ + void 0, + "verbatimModuleSyntax" + ); + } + if (options.preserveValueImports) { + createDeprecatedDiagnostic( + "preserveValueImports", + /*value*/ + void 0, + "verbatimModuleSyntax" + ); + } + }); + } + function verifyDeprecatedProjectReference(ref, parentFile, index) { + function createDiagnostic(_name, _value, _useInstead, message, ...args) { + createDiagnosticForReference(parentFile, index, message, ...args); + } + checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { + if (ref.prepend) { + createDeprecatedDiagnostic("prepend"); + } + }); + } + function addFilePreprocessingFileExplainingDiagnostic(file, fileProcessingReason, diagnostic, args) { + programDiagnostics.addFileProcessingDiagnostic({ + kind: 1 /* FilePreprocessingFileExplainingDiagnostic */, + file: file && file.path, + fileProcessingReason, + diagnostic, + args + }); + } + function verifyProjectReferences() { + const buildInfoPath = !options.suppressOutputPathCheck ? getTsBuildInfoEmitOutputFilePath(options) : void 0; + forEachProjectReference( + projectReferences, + resolvedProjectReferences, + (resolvedRef, parent2, index) => { + const ref = (parent2 ? parent2.commandLine.projectReferences : projectReferences)[index]; + const parentFile = parent2 && parent2.sourceFile; + verifyDeprecatedProjectReference(ref, parentFile, index); + if (!resolvedRef) { + createDiagnosticForReference(parentFile, index, Diagnostics.File_0_not_found, ref.path); + return; + } + const options2 = resolvedRef.commandLine.options; + if (!options2.composite || options2.noEmit) { + const inputs = parent2 ? parent2.commandLine.fileNames : rootNames; + if (inputs.length) { + if (!options2.composite) createDiagnosticForReference(parentFile, index, Diagnostics.Referenced_project_0_must_have_setting_composite_Colon_true, ref.path); + if (options2.noEmit) createDiagnosticForReference(parentFile, index, Diagnostics.Referenced_project_0_may_not_disable_emit, ref.path); + } + } + if (!parent2 && buildInfoPath && buildInfoPath === getTsBuildInfoEmitOutputFilePath(options2)) { + createDiagnosticForReference(parentFile, index, Diagnostics.Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1, buildInfoPath, ref.path); + hasEmitBlockingDiagnostics.set(toPath3(buildInfoPath), true); + } + } + ); + } + function createDiagnosticForOptionPathKeyValue(key, valueIndex, message, ...args) { + let needCompilerDiagnostic = true; + forEachOptionPathsSyntax((pathProp) => { + if (isObjectLiteralExpression(pathProp.initializer)) { + forEachPropertyAssignment(pathProp.initializer, key, (keyProps) => { + const initializer = keyProps.initializer; + if (isArrayLiteralExpression(initializer) && initializer.elements.length > valueIndex) { + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(options.configFile, initializer.elements[valueIndex], message, ...args)); + needCompilerDiagnostic = false; + } + }); + } + }); + if (needCompilerDiagnostic) { + createCompilerOptionsDiagnostic(message, ...args); + } + } + function createDiagnosticForOptionPaths(onKey, key, message, ...args) { + let needCompilerDiagnostic = true; + forEachOptionPathsSyntax((pathProp) => { + if (isObjectLiteralExpression(pathProp.initializer) && createOptionDiagnosticInObjectLiteralSyntax( + pathProp.initializer, + onKey, + key, + /*key2*/ + void 0, + message, + ...args + )) { + needCompilerDiagnostic = false; + } + }); + if (needCompilerDiagnostic) { + createCompilerOptionsDiagnostic(message, ...args); + } + } + function forEachOptionPathsSyntax(callback) { + return forEachOptionsSyntaxByName(getCompilerOptionsObjectLiteralSyntax(), "paths", callback); + } + function createDiagnosticForOptionName(message, option1, option2, option3) { + createDiagnosticForOption( + /*onKey*/ + true, + option1, + option2, + message, + option1, + option2, + option3 + ); + } + function createOptionValueDiagnostic(option1, message, ...args) { + createDiagnosticForOption( + /*onKey*/ + false, + option1, + /*option2*/ + void 0, + message, + ...args + ); + } + function createDiagnosticForReference(sourceFile, index, message, ...args) { + const referencesSyntax = forEachTsConfigPropArray(sourceFile || options.configFile, "references", (property) => isArrayLiteralExpression(property.initializer) ? property.initializer : void 0); + if (referencesSyntax && referencesSyntax.elements.length > index) { + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(sourceFile || options.configFile, referencesSyntax.elements[index], message, ...args)); + } else { + programDiagnostics.addConfigDiagnostic(createCompilerDiagnostic(message, ...args)); + } + } + function createDiagnosticForOption(onKey, option1, option2, message, ...args) { + const compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax(); + const needCompilerDiagnostic = !compilerOptionsObjectLiteralSyntax || !createOptionDiagnosticInObjectLiteralSyntax(compilerOptionsObjectLiteralSyntax, onKey, option1, option2, message, ...args); + if (needCompilerDiagnostic) { + createCompilerOptionsDiagnostic(message, ...args); + } + } + function createCompilerOptionsDiagnostic(message, ...args) { + const compilerOptionsProperty = getCompilerOptionsPropertySyntax(); + if (compilerOptionsProperty) { + if ("messageText" in message) { + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeFromMessageChain(options.configFile, compilerOptionsProperty.name, message)); + } else { + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(options.configFile, compilerOptionsProperty.name, message, ...args)); + } + } else if ("messageText" in message) { + programDiagnostics.addConfigDiagnostic(createCompilerDiagnosticFromMessageChain(message)); + } else { + programDiagnostics.addConfigDiagnostic(createCompilerDiagnostic(message, ...args)); + } + } + function getCompilerOptionsObjectLiteralSyntax() { + if (_compilerOptionsObjectLiteralSyntax === void 0) { + const compilerOptionsProperty = getCompilerOptionsPropertySyntax(); + _compilerOptionsObjectLiteralSyntax = compilerOptionsProperty ? tryCast(compilerOptionsProperty.initializer, isObjectLiteralExpression) || false : false; + } + return _compilerOptionsObjectLiteralSyntax || void 0; + } + function getCompilerOptionsPropertySyntax() { + if (_compilerOptionsPropertySyntax === void 0) { + _compilerOptionsPropertySyntax = forEachPropertyAssignment( + getTsConfigObjectLiteralExpression(options.configFile), + "compilerOptions", + identity + ) || false; + } + return _compilerOptionsPropertySyntax || void 0; + } + function createOptionDiagnosticInObjectLiteralSyntax(objectLiteral, onKey, key1, key2, message, ...args) { + let needsCompilerDiagnostic = false; + forEachPropertyAssignment(objectLiteral, key1, (prop) => { + if ("messageText" in message) { + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeFromMessageChain(options.configFile, onKey ? prop.name : prop.initializer, message)); + } else { + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(options.configFile, onKey ? prop.name : prop.initializer, message, ...args)); + } + needsCompilerDiagnostic = true; + }, key2); + return needsCompilerDiagnostic; + } + function blockEmittingOfFile(emitFileName, diag2) { + hasEmitBlockingDiagnostics.set(toPath3(emitFileName), true); + programDiagnostics.addConfigDiagnostic(diag2); + } + function isEmittedFile(file) { + if (options.noEmit) { + return false; + } + const filePath = toPath3(file); + if (getSourceFileByPath(filePath)) { + return false; + } + const out = options.outFile; + if (out) { + return isSameFile(filePath, out) || isSameFile(filePath, removeFileExtension(out) + ".d.ts" /* Dts */); + } + if (options.declarationDir && containsPath(options.declarationDir, filePath, currentDirectory, !host.useCaseSensitiveFileNames())) { + return true; + } + if (options.outDir) { + return containsPath(options.outDir, filePath, currentDirectory, !host.useCaseSensitiveFileNames()); + } + if (fileExtensionIsOneOf(filePath, supportedJSExtensionsFlat) || isDeclarationFileName(filePath)) { + const filePathWithoutExtension = removeFileExtension(filePath); + return !!getSourceFileByPath(filePathWithoutExtension + ".ts" /* Ts */) || !!getSourceFileByPath(filePathWithoutExtension + ".tsx" /* Tsx */); + } + return false; + } + function isSameFile(file1, file2) { + return comparePaths(file1, file2, currentDirectory, !host.useCaseSensitiveFileNames()) === 0 /* EqualTo */; + } + function getSymlinkCache() { + if (host.getSymlinkCache) { + return host.getSymlinkCache(); + } + if (!symlinks) { + symlinks = createSymlinkCache(currentDirectory, getCanonicalFileName); + } + if (files && !symlinks.hasProcessedResolutions()) { + symlinks.setSymlinksFromResolutions(forEachResolvedModule, forEachResolvedTypeReferenceDirective, automaticTypeDirectiveResolutions); + } + return symlinks; + } + function getModeForUsageLocation2(file, usage) { + return getModeForUsageLocationWorker(file, usage, getCompilerOptionsForFile(file)); + } + function getEmitSyntaxForUsageLocation(file, usage) { + return getEmitSyntaxForUsageLocationWorker(file, usage, getCompilerOptionsForFile(file)); + } + function getModeForResolutionAtIndex2(file, index) { + return getModeForUsageLocation2(file, getModuleNameStringLiteralAt(file, index)); + } + function getDefaultResolutionModeForFile2(sourceFile) { + return getDefaultResolutionModeForFileWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getImpliedNodeFormatForEmit2(sourceFile) { + return getImpliedNodeFormatForEmitWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getEmitModuleFormatOfFile2(sourceFile) { + return getEmitModuleFormatOfFileWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function shouldTransformImportCall(sourceFile) { + return shouldTransformImportCallWorker(sourceFile, getCompilerOptionsForFile(sourceFile)); + } + function getModeForTypeReferenceDirectiveInFile(ref, sourceFile) { + return ref.resolutionMode || getDefaultResolutionModeForFile2(sourceFile); + } +} +function shouldTransformImportCallWorker(sourceFile, options) { + const moduleKind = getEmitModuleKind(options); + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ || moduleKind === 200 /* Preserve */) { + return false; + } + return getEmitModuleFormatOfFileWorker(sourceFile, options) < 5 /* ES2015 */; +} +function getEmitModuleFormatOfFileWorker(sourceFile, options) { + return getImpliedNodeFormatForEmitWorker(sourceFile, options) ?? getEmitModuleKind(options); +} +function getImpliedNodeFormatForEmitWorker(sourceFile, options) { + var _a, _b; + const moduleKind = getEmitModuleKind(options); + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { + return sourceFile.impliedNodeFormat; + } + if (sourceFile.impliedNodeFormat === 1 /* CommonJS */ && (((_a = sourceFile.packageJsonScope) == null ? void 0 : _a.contents.packageJsonContent.type) === "commonjs" || fileExtensionIsOneOf(sourceFile.fileName, [".cjs" /* Cjs */, ".cts" /* Cts */]))) { + return 1 /* CommonJS */; + } + if (sourceFile.impliedNodeFormat === 99 /* ESNext */ && (((_b = sourceFile.packageJsonScope) == null ? void 0 : _b.contents.packageJsonContent.type) === "module" || fileExtensionIsOneOf(sourceFile.fileName, [".mjs" /* Mjs */, ".mts" /* Mts */]))) { + return 99 /* ESNext */; + } + return void 0; +} +function getDefaultResolutionModeForFileWorker(sourceFile, options) { + return importSyntaxAffectsModuleResolution(options) ? getImpliedNodeFormatForEmitWorker(sourceFile, options) : void 0; +} +function updateHostForUseSourceOfProjectReferenceRedirect(host) { + let setOfDeclarationDirectories; + const originalFileExists = host.compilerHost.fileExists; + const originalDirectoryExists = host.compilerHost.directoryExists; + const originalGetDirectories = host.compilerHost.getDirectories; + const originalRealpath = host.compilerHost.realpath; + if (!host.useSourceOfProjectReferenceRedirect) return { onProgramCreateComplete: noop, fileExists }; + host.compilerHost.fileExists = fileExists; + let directoryExists; + if (originalDirectoryExists) { + directoryExists = host.compilerHost.directoryExists = (path) => { + if (originalDirectoryExists.call(host.compilerHost, path)) { + handleDirectoryCouldBeSymlink(path); + return true; + } + if (!host.getResolvedProjectReferences()) return false; + if (!setOfDeclarationDirectories) { + setOfDeclarationDirectories = /* @__PURE__ */ new Set(); + host.forEachResolvedProjectReference((ref) => { + const out = ref.commandLine.options.outFile; + if (out) { + setOfDeclarationDirectories.add(getDirectoryPath(host.toPath(out))); + } else { + const declarationDir = ref.commandLine.options.declarationDir || ref.commandLine.options.outDir; + if (declarationDir) { + setOfDeclarationDirectories.add(host.toPath(declarationDir)); + } + } + }); + } + return fileOrDirectoryExistsUsingSource( + path, + /*isFile*/ + false + ); + }; + } + if (originalGetDirectories) { + host.compilerHost.getDirectories = (path) => !host.getResolvedProjectReferences() || originalDirectoryExists && originalDirectoryExists.call(host.compilerHost, path) ? originalGetDirectories.call(host.compilerHost, path) : []; + } + if (originalRealpath) { + host.compilerHost.realpath = (s) => { + var _a; + return ((_a = host.getSymlinkCache().getSymlinkedFiles()) == null ? void 0 : _a.get(host.toPath(s))) || originalRealpath.call(host.compilerHost, s); + }; + } + return { onProgramCreateComplete, fileExists, directoryExists }; + function onProgramCreateComplete() { + host.compilerHost.fileExists = originalFileExists; + host.compilerHost.directoryExists = originalDirectoryExists; + host.compilerHost.getDirectories = originalGetDirectories; + } + function fileExists(file) { + if (originalFileExists.call(host.compilerHost, file)) return true; + if (!host.getResolvedProjectReferences()) return false; + if (!isDeclarationFileName(file)) return false; + return fileOrDirectoryExistsUsingSource( + file, + /*isFile*/ + true + ); + } + function fileExistsIfProjectReferenceDts(file) { + const source = host.getRedirectFromOutput(host.toPath(file)); + return source !== void 0 ? isString(source.source) ? originalFileExists.call(host.compilerHost, source.source) : true : void 0; + } + function directoryExistsIfProjectReferenceDeclDir(dir) { + const dirPath = host.toPath(dir); + const dirPathWithTrailingDirectorySeparator = `${dirPath}${directorySeparator}`; + return forEachKey( + setOfDeclarationDirectories, + (declDirPath) => dirPath === declDirPath || // Any parent directory of declaration dir + startsWith(declDirPath, dirPathWithTrailingDirectorySeparator) || // Any directory inside declaration dir + startsWith(dirPath, `${declDirPath}/`) + ); + } + function handleDirectoryCouldBeSymlink(directory) { + var _a; + if (!host.getResolvedProjectReferences() || containsIgnoredPath(directory)) return; + if (!originalRealpath || !directory.includes(nodeModulesPathPart)) return; + const symlinkCache = host.getSymlinkCache(); + const directoryPath = ensureTrailingDirectorySeparator(host.toPath(directory)); + if ((_a = symlinkCache.getSymlinkedDirectories()) == null ? void 0 : _a.has(directoryPath)) return; + const real = normalizePath(originalRealpath.call(host.compilerHost, directory)); + let realPath2; + if (real === directory || (realPath2 = ensureTrailingDirectorySeparator(host.toPath(real))) === directoryPath) { + symlinkCache.setSymlinkedDirectory(directoryPath, false); + return; + } + symlinkCache.setSymlinkedDirectory(directory, { + real: ensureTrailingDirectorySeparator(real), + realPath: realPath2 + }); + } + function fileOrDirectoryExistsUsingSource(fileOrDirectory, isFile) { + var _a; + const fileOrDirectoryExistsUsingSource2 = isFile ? fileExistsIfProjectReferenceDts : directoryExistsIfProjectReferenceDeclDir; + const result = fileOrDirectoryExistsUsingSource2(fileOrDirectory); + if (result !== void 0) return result; + const symlinkCache = host.getSymlinkCache(); + const symlinkedDirectories = symlinkCache.getSymlinkedDirectories(); + if (!symlinkedDirectories) return false; + const fileOrDirectoryPath = host.toPath(fileOrDirectory); + if (!fileOrDirectoryPath.includes(nodeModulesPathPart)) return false; + if (isFile && ((_a = symlinkCache.getSymlinkedFiles()) == null ? void 0 : _a.has(fileOrDirectoryPath))) return true; + return firstDefinedIterator( + symlinkedDirectories.entries(), + ([directoryPath, symlinkedDirectory]) => { + if (!symlinkedDirectory || !startsWith(fileOrDirectoryPath, directoryPath)) return void 0; + const result2 = fileOrDirectoryExistsUsingSource2(fileOrDirectoryPath.replace(directoryPath, symlinkedDirectory.realPath)); + if (isFile && result2) { + const absolutePath = getNormalizedAbsolutePath(fileOrDirectory, host.compilerHost.getCurrentDirectory()); + symlinkCache.setSymlinkedFile( + fileOrDirectoryPath, + `${symlinkedDirectory.real}${absolutePath.replace(new RegExp(directoryPath, "i"), "")}` + ); + } + return result2; + } + ) || false; + } +} +var emitSkippedWithNoDiagnostics = { diagnostics: emptyArray, sourceMaps: void 0, emittedFiles: void 0, emitSkipped: true }; +function handleNoEmitOptions(program, sourceFile, writeFile2, cancellationToken) { + const options = program.getCompilerOptions(); + if (options.noEmit) { + return sourceFile ? emitSkippedWithNoDiagnostics : program.emitBuildInfo(writeFile2, cancellationToken); + } + if (!options.noEmitOnError) return void 0; + let diagnostics = [ + ...program.getOptionsDiagnostics(cancellationToken), + ...program.getSyntacticDiagnostics(sourceFile, cancellationToken), + ...program.getGlobalDiagnostics(cancellationToken), + ...program.getSemanticDiagnostics(sourceFile, cancellationToken) + ]; + if (diagnostics.length === 0 && getEmitDeclarations(program.getCompilerOptions())) { + diagnostics = program.getDeclarationDiagnostics( + /*sourceFile*/ + void 0, + cancellationToken + ); + } + if (!diagnostics.length) return void 0; + let emittedFiles; + if (!sourceFile) { + const emitResult = program.emitBuildInfo(writeFile2, cancellationToken); + if (emitResult.diagnostics) diagnostics = [...diagnostics, ...emitResult.diagnostics]; + emittedFiles = emitResult.emittedFiles; + } + return { diagnostics, sourceMaps: void 0, emittedFiles, emitSkipped: true }; +} +function filterSemanticDiagnostics(diagnostic, option) { + return filter(diagnostic, (d) => !d.skippedOn || !option[d.skippedOn]); +} +function parseConfigHostFromCompilerHostLike(host, directoryStructureHost = host) { + return { + fileExists: (f) => directoryStructureHost.fileExists(f), + readDirectory(root, extensions, excludes, includes, depth) { + Debug.assertIsDefined(directoryStructureHost.readDirectory, "'CompilerHost.readDirectory' must be implemented to correctly process 'projectReferences'"); + return directoryStructureHost.readDirectory(root, extensions, excludes, includes, depth); + }, + readFile: (f) => directoryStructureHost.readFile(f), + directoryExists: maybeBind(directoryStructureHost, directoryStructureHost.directoryExists), + getDirectories: maybeBind(directoryStructureHost, directoryStructureHost.getDirectories), + realpath: maybeBind(directoryStructureHost, directoryStructureHost.realpath), + useCaseSensitiveFileNames: host.useCaseSensitiveFileNames(), + getCurrentDirectory: () => host.getCurrentDirectory(), + onUnRecoverableConfigFileDiagnostic: host.onUnRecoverableConfigFileDiagnostic || returnUndefined, + trace: host.trace ? (s) => host.trace(s) : void 0 + }; +} +function resolveProjectReferencePath(ref) { + return resolveConfigFileProjectName(ref.path); +} +function getResolutionDiagnostic(options, { extension }, { isDeclarationFile }) { + switch (extension) { + case ".ts" /* Ts */: + case ".d.ts" /* Dts */: + case ".mts" /* Mts */: + case ".d.mts" /* Dmts */: + case ".cts" /* Cts */: + case ".d.cts" /* Dcts */: + return void 0; + case ".tsx" /* Tsx */: + return needJsx(); + case ".jsx" /* Jsx */: + return needJsx() || needAllowJs(); + case ".js" /* Js */: + case ".mjs" /* Mjs */: + case ".cjs" /* Cjs */: + return needAllowJs(); + case ".json" /* Json */: + return needResolveJsonModule(); + default: + return needAllowArbitraryExtensions(); + } + function needJsx() { + return options.jsx ? void 0 : Diagnostics.Module_0_was_resolved_to_1_but_jsx_is_not_set; + } + function needAllowJs() { + return getAllowJSCompilerOption(options) || !getStrictOptionValue(options, "noImplicitAny") ? void 0 : Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type; + } + function needResolveJsonModule() { + return getResolveJsonModule(options) ? void 0 : Diagnostics.Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used; + } + function needAllowArbitraryExtensions() { + return isDeclarationFile || options.allowArbitraryExtensions ? void 0 : Diagnostics.Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set; + } +} +function getModuleNames({ imports, moduleAugmentations }) { + const res = imports.map((i) => i); + for (const aug of moduleAugmentations) { + if (aug.kind === 11 /* StringLiteral */) { + res.push(aug); + } + } + return res; +} +function getModuleNameStringLiteralAt({ imports, moduleAugmentations }, index) { + if (index < imports.length) return imports[index]; + let augIndex = imports.length; + for (const aug of moduleAugmentations) { + if (aug.kind === 11 /* StringLiteral */) { + if (index === augIndex) return aug; + augIndex++; + } + } + Debug.fail("should never ask for module name at index higher than possible module name"); +} + +// src/compiler/programDiagnostics.ts +function createProgramDiagnostics(getCompilerOptionsObjectLiteralSyntax) { + let computedDiagnostics; + let fileReasons = createMultiMap(); + let fileProcessingDiagnostics; + let commonSourceDirectory; + let configDiagnostics; + let lazyConfigDiagnostics; + let fileReasonsToChain; + let reasonToRelatedInfo; + return { + addConfigDiagnostic(diag2) { + Debug.assert(computedDiagnostics === void 0, "Cannot modify program diagnostic state after requesting combined diagnostics"); + (configDiagnostics ?? (configDiagnostics = createDiagnosticCollection())).add(diag2); + }, + addLazyConfigDiagnostic(file, message, ...args) { + Debug.assert(computedDiagnostics === void 0, "Cannot modify program diagnostic state after requesting combined diagnostics"); + (lazyConfigDiagnostics ?? (lazyConfigDiagnostics = [])).push({ file, diagnostic: message, args }); + }, + addFileProcessingDiagnostic(diag2) { + Debug.assert(computedDiagnostics === void 0, "Cannot modify program diagnostic state after requesting combined diagnostics"); + (fileProcessingDiagnostics ?? (fileProcessingDiagnostics = [])).push(diag2); + }, + setCommonSourceDirectory(directory) { + commonSourceDirectory = directory; + }, + reuseStateFromOldProgram(oldProgramDiagnostics, isConfigIdentical) { + fileReasons = oldProgramDiagnostics.getFileReasons(); + fileProcessingDiagnostics = oldProgramDiagnostics.getFileProcessingDiagnostics(); + if (isConfigIdentical) { + commonSourceDirectory = oldProgramDiagnostics.getCommonSourceDirectory(); + configDiagnostics = oldProgramDiagnostics.getConfigDiagnostics(); + lazyConfigDiagnostics = oldProgramDiagnostics.getLazyConfigDiagnostics(); + } + }, + getFileProcessingDiagnostics() { + return fileProcessingDiagnostics; + }, + getFileReasons() { + return fileReasons; + }, + getCommonSourceDirectory() { + return commonSourceDirectory; + }, + getConfigDiagnostics() { + return configDiagnostics; + }, + getLazyConfigDiagnostics() { + return lazyConfigDiagnostics; + }, + getCombinedDiagnostics(program) { + if (computedDiagnostics) { + return computedDiagnostics; + } + computedDiagnostics = createDiagnosticCollection(); + configDiagnostics == null ? void 0 : configDiagnostics.getDiagnostics().forEach((d) => computedDiagnostics.add(d)); + fileProcessingDiagnostics == null ? void 0 : fileProcessingDiagnostics.forEach((diagnostic) => { + switch (diagnostic.kind) { + case 1 /* FilePreprocessingFileExplainingDiagnostic */: + return computedDiagnostics.add( + createDiagnosticExplainingFile( + program, + diagnostic.file && program.getSourceFileByPath(diagnostic.file), + diagnostic.fileProcessingReason, + diagnostic.diagnostic, + diagnostic.args || emptyArray + ) + ); + case 0 /* FilePreprocessingLibReferenceDiagnostic */: + return computedDiagnostics.add(filePreprocessingLibreferenceDiagnostic(program, diagnostic)); + case 2 /* ResolutionDiagnostics */: + return diagnostic.diagnostics.forEach((d) => computedDiagnostics.add(d)); + default: + Debug.assertNever(diagnostic); + } + }); + lazyConfigDiagnostics == null ? void 0 : lazyConfigDiagnostics.forEach( + ({ file, diagnostic, args }) => computedDiagnostics.add( + createDiagnosticExplainingFile( + program, + file, + /*fileProcessingReason*/ + void 0, + diagnostic, + args + ) + ) + ); + fileReasonsToChain = void 0; + reasonToRelatedInfo = void 0; + return computedDiagnostics; + } + }; + function filePreprocessingLibreferenceDiagnostic(program, { reason }) { + const { file, pos, end } = getReferencedFileLocation(program, reason); + const libReference = file.libReferenceDirectives[reason.index]; + const libName = getLibNameFromLibReference(libReference); + const unqualifiedLibName = removeSuffix(removePrefix(libName, "lib."), ".d.ts"); + const suggestion = getSpellingSuggestion(unqualifiedLibName, libs, identity); + return createFileDiagnostic( + file, + Debug.checkDefined(pos), + Debug.checkDefined(end) - pos, + suggestion ? Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1 : Diagnostics.Cannot_find_lib_definition_for_0, + libName, + suggestion + ); + } + function createDiagnosticExplainingFile(program, file, fileProcessingReason, diagnostic, args) { + let seenReasons; + let fileIncludeReasons; + let relatedInfo; + let fileIncludeReasonDetails; + let redirectInfo; + let chain; + const reasons = file && fileReasons.get(file.path); + let locationReason = isReferencedFile(fileProcessingReason) ? fileProcessingReason : void 0; + let cachedChain = file && (fileReasonsToChain == null ? void 0 : fileReasonsToChain.get(file.path)); + if (cachedChain) { + if (cachedChain.fileIncludeReasonDetails) { + seenReasons = new Set(reasons); + reasons == null ? void 0 : reasons.forEach(populateRelatedInfo); + } else { + reasons == null ? void 0 : reasons.forEach(processReason); + } + redirectInfo = cachedChain.redirectInfo; + } else { + reasons == null ? void 0 : reasons.forEach(processReason); + redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file, program.getCompilerOptionsForFile(file)); + } + if (fileProcessingReason) processReason(fileProcessingReason); + const processedExtraReason = (seenReasons == null ? void 0 : seenReasons.size) !== (reasons == null ? void 0 : reasons.length); + if (locationReason && (seenReasons == null ? void 0 : seenReasons.size) === 1) seenReasons = void 0; + if (seenReasons && cachedChain) { + if (cachedChain.details && !processedExtraReason) { + chain = chainDiagnosticMessages(cachedChain.details, diagnostic, ...args ?? emptyArray); + } else if (cachedChain.fileIncludeReasonDetails) { + if (!processedExtraReason) { + if (!cachedFileIncludeDetailsHasProcessedExtraReason()) { + fileIncludeReasonDetails = cachedChain.fileIncludeReasonDetails; + } else { + fileIncludeReasons = cachedChain.fileIncludeReasonDetails.next.slice(0, reasons.length); + } + } else { + if (!cachedFileIncludeDetailsHasProcessedExtraReason()) { + fileIncludeReasons = [...cachedChain.fileIncludeReasonDetails.next, fileIncludeReasons[0]]; + } else { + fileIncludeReasons = append(cachedChain.fileIncludeReasonDetails.next.slice(0, reasons.length), fileIncludeReasons[0]); + } + } + } + } + if (!chain) { + if (!fileIncludeReasonDetails) fileIncludeReasonDetails = seenReasons && chainDiagnosticMessages(fileIncludeReasons, Diagnostics.The_file_is_in_the_program_because_Colon); + chain = chainDiagnosticMessages( + redirectInfo ? fileIncludeReasonDetails ? [fileIncludeReasonDetails, ...redirectInfo] : redirectInfo : fileIncludeReasonDetails, + diagnostic, + ...args || emptyArray + ); + } + if (file) { + if (cachedChain) { + if (!cachedChain.fileIncludeReasonDetails || !processedExtraReason && fileIncludeReasonDetails) { + cachedChain.fileIncludeReasonDetails = fileIncludeReasonDetails; + } + } else { + (fileReasonsToChain ?? (fileReasonsToChain = /* @__PURE__ */ new Map())).set(file.path, cachedChain = { fileIncludeReasonDetails, redirectInfo }); + } + if (!cachedChain.details && !processedExtraReason) cachedChain.details = chain.next; + } + const location = locationReason && getReferencedFileLocation(program, locationReason); + return location && isReferenceFileLocation(location) ? createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) : createCompilerDiagnosticFromMessageChain(chain, relatedInfo); + function processReason(reason) { + if (seenReasons == null ? void 0 : seenReasons.has(reason)) return; + (seenReasons ?? (seenReasons = /* @__PURE__ */ new Set())).add(reason); + (fileIncludeReasons ?? (fileIncludeReasons = [])).push(fileIncludeReasonToDiagnostics(program, reason)); + populateRelatedInfo(reason); + } + function populateRelatedInfo(reason) { + if (!locationReason && isReferencedFile(reason)) { + locationReason = reason; + } else if (locationReason !== reason) { + relatedInfo = append(relatedInfo, getFileIncludeReasonToRelatedInformation(program, reason)); + } + } + function cachedFileIncludeDetailsHasProcessedExtraReason() { + var _a; + return ((_a = cachedChain.fileIncludeReasonDetails.next) == null ? void 0 : _a.length) !== (reasons == null ? void 0 : reasons.length); + } + } + function getFileIncludeReasonToRelatedInformation(program, reason) { + let relatedInfo = reasonToRelatedInfo == null ? void 0 : reasonToRelatedInfo.get(reason); + if (relatedInfo === void 0) (reasonToRelatedInfo ?? (reasonToRelatedInfo = /* @__PURE__ */ new Map())).set(reason, relatedInfo = fileIncludeReasonToRelatedInformation(program, reason) ?? false); + return relatedInfo || void 0; + } + function fileIncludeReasonToRelatedInformation(program, reason) { + if (isReferencedFile(reason)) { + const referenceLocation = getReferencedFileLocation(program, reason); + let message2; + switch (reason.kind) { + case 3 /* Import */: + message2 = Diagnostics.File_is_included_via_import_here; + break; + case 4 /* ReferenceFile */: + message2 = Diagnostics.File_is_included_via_reference_here; + break; + case 5 /* TypeReferenceDirective */: + message2 = Diagnostics.File_is_included_via_type_library_reference_here; + break; + case 7 /* LibReferenceDirective */: + message2 = Diagnostics.File_is_included_via_library_reference_here; + break; + default: + Debug.assertNever(reason); + } + return isReferenceFileLocation(referenceLocation) ? createFileDiagnostic( + referenceLocation.file, + referenceLocation.pos, + referenceLocation.end - referenceLocation.pos, + message2 + ) : void 0; + } + const currentDirectory = program.getCurrentDirectory(); + const rootNames = program.getRootFileNames(); + const options = program.getCompilerOptions(); + if (!options.configFile) return void 0; + let configFileNode; + let message; + switch (reason.kind) { + case 0 /* RootFile */: + if (!options.configFile.configFileSpecs) return void 0; + const fileName = getNormalizedAbsolutePath(rootNames[reason.index], currentDirectory); + const matchedByFiles = getMatchedFileSpec(program, fileName); + if (matchedByFiles) { + configFileNode = getTsConfigPropArrayElementValue(options.configFile, "files", matchedByFiles); + message = Diagnostics.File_is_matched_by_files_list_specified_here; + break; + } + const matchedByInclude = getMatchedIncludeSpec(program, fileName); + if (!matchedByInclude || !isString(matchedByInclude)) return void 0; + configFileNode = getTsConfigPropArrayElementValue(options.configFile, "include", matchedByInclude); + message = Diagnostics.File_is_matched_by_include_pattern_specified_here; + break; + case 1 /* SourceFromProjectReference */: + case 2 /* OutputFromProjectReference */: + const resolvedProjectReferences = program.getResolvedProjectReferences(); + const projectReferences = program.getProjectReferences(); + const referencedResolvedRef = Debug.checkDefined(resolvedProjectReferences == null ? void 0 : resolvedProjectReferences[reason.index]); + const referenceInfo = forEachProjectReference( + projectReferences, + resolvedProjectReferences, + (resolvedRef, parent2, index2) => resolvedRef === referencedResolvedRef ? { sourceFile: (parent2 == null ? void 0 : parent2.sourceFile) || options.configFile, index: index2 } : void 0 + ); + if (!referenceInfo) return void 0; + const { sourceFile, index } = referenceInfo; + const referencesSyntax = forEachTsConfigPropArray(sourceFile, "references", (property) => isArrayLiteralExpression(property.initializer) ? property.initializer : void 0); + return referencesSyntax && referencesSyntax.elements.length > index ? createDiagnosticForNodeInSourceFile( + sourceFile, + referencesSyntax.elements[index], + reason.kind === 2 /* OutputFromProjectReference */ ? Diagnostics.File_is_output_from_referenced_project_specified_here : Diagnostics.File_is_source_from_referenced_project_specified_here + ) : void 0; + case 8 /* AutomaticTypeDirectiveFile */: + if (!options.types) return void 0; + configFileNode = getOptionsSyntaxByArrayElementValue(getCompilerOptionsObjectLiteralSyntax(), "types", reason.typeReference); + message = Diagnostics.File_is_entry_point_of_type_library_specified_here; + break; + case 6 /* LibFile */: + if (reason.index !== void 0) { + configFileNode = getOptionsSyntaxByArrayElementValue(getCompilerOptionsObjectLiteralSyntax(), "lib", options.lib[reason.index]); + message = Diagnostics.File_is_library_specified_here; + break; + } + const target = getNameOfScriptTarget(getEmitScriptTarget(options)); + configFileNode = target ? getOptionsSyntaxByValue(getCompilerOptionsObjectLiteralSyntax(), "target", target) : void 0; + message = Diagnostics.File_is_default_library_for_target_specified_here; + break; + default: + Debug.assertNever(reason); + } + return configFileNode && createDiagnosticForNodeInSourceFile( + options.configFile, + configFileNode, + message + ); + } +} + +// src/compiler/builderState.ts +function getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers, forceDtsEmit) { + const outputFiles = []; + const { emitSkipped, diagnostics } = program.emit(sourceFile, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers, forceDtsEmit); + return { outputFiles, emitSkipped, diagnostics }; + function writeFile2(fileName, text, writeByteOrderMark) { + outputFiles.push({ name: fileName, writeByteOrderMark, text }); + } +} +var SignatureInfo = /* @__PURE__ */ ((SignatureInfo2) => { + SignatureInfo2[SignatureInfo2["ComputedDts"] = 0] = "ComputedDts"; + SignatureInfo2[SignatureInfo2["StoredSignatureAtEmit"] = 1] = "StoredSignatureAtEmit"; + SignatureInfo2[SignatureInfo2["UsedVersion"] = 2] = "UsedVersion"; + return SignatureInfo2; +})(SignatureInfo || {}); +var BuilderState; +((BuilderState2) => { + function createManyToManyPathMap() { + function create2(forward, reverse, deleted) { + const map2 = { + getKeys: (v) => reverse.get(v), + getValues: (k) => forward.get(k), + keys: () => forward.keys(), + size: () => forward.size, + deleteKey: (k) => { + (deleted || (deleted = /* @__PURE__ */ new Set())).add(k); + const set = forward.get(k); + if (!set) { + return false; + } + set.forEach((v) => deleteFromMultimap(reverse, v, k)); + forward.delete(k); + return true; + }, + set: (k, vSet) => { + deleted == null ? void 0 : deleted.delete(k); + const existingVSet = forward.get(k); + forward.set(k, vSet); + existingVSet == null ? void 0 : existingVSet.forEach((v) => { + if (!vSet.has(v)) { + deleteFromMultimap(reverse, v, k); + } + }); + vSet.forEach((v) => { + if (!(existingVSet == null ? void 0 : existingVSet.has(v))) { + addToMultimap(reverse, v, k); + } + }); + return map2; + } + }; + return map2; + } + return create2( + /* @__PURE__ */ new Map(), + /* @__PURE__ */ new Map(), + /*deleted*/ + void 0 + ); + } + BuilderState2.createManyToManyPathMap = createManyToManyPathMap; + function addToMultimap(map2, k, v) { + let set = map2.get(k); + if (!set) { + set = /* @__PURE__ */ new Set(); + map2.set(k, set); + } + set.add(v); + } + function deleteFromMultimap(map2, k, v) { + const set = map2.get(k); + if (set == null ? void 0 : set.delete(v)) { + if (!set.size) { + map2.delete(k); + } + return true; + } + return false; + } + function getReferencedFilesFromImportedModuleSymbol(symbol) { + return mapDefined(symbol.declarations, (declaration) => { + var _a; + return (_a = getSourceFileOfNode(declaration)) == null ? void 0 : _a.resolvedPath; + }); + } + function getReferencedFilesFromImportLiteral(checker, importName) { + const symbol = checker.getSymbolAtLocation(importName); + return symbol && getReferencedFilesFromImportedModuleSymbol(symbol); + } + function getReferencedFileFromFileName(program, fileName, sourceFileDirectory, getCanonicalFileName) { + var _a; + return toPath(((_a = program.getRedirectFromSourceFile(fileName)) == null ? void 0 : _a.outputDts) || fileName, sourceFileDirectory, getCanonicalFileName); + } + function getReferencedFiles(program, sourceFile, getCanonicalFileName) { + let referencedFiles; + if (sourceFile.imports && sourceFile.imports.length > 0) { + const checker = program.getTypeChecker(); + for (const importName of sourceFile.imports) { + const declarationSourceFilePaths = getReferencedFilesFromImportLiteral(checker, importName); + declarationSourceFilePaths == null ? void 0 : declarationSourceFilePaths.forEach(addReferencedFile); + } + } + const sourceFileDirectory = getDirectoryPath(sourceFile.resolvedPath); + if (sourceFile.referencedFiles && sourceFile.referencedFiles.length > 0) { + for (const referencedFile of sourceFile.referencedFiles) { + const referencedPath = getReferencedFileFromFileName(program, referencedFile.fileName, sourceFileDirectory, getCanonicalFileName); + addReferencedFile(referencedPath); + } + } + program.forEachResolvedTypeReferenceDirective(({ resolvedTypeReferenceDirective }) => { + if (!resolvedTypeReferenceDirective) { + return; + } + const fileName = resolvedTypeReferenceDirective.resolvedFileName; + const typeFilePath = getReferencedFileFromFileName(program, fileName, sourceFileDirectory, getCanonicalFileName); + addReferencedFile(typeFilePath); + }, sourceFile); + if (sourceFile.moduleAugmentations.length) { + const checker = program.getTypeChecker(); + for (const moduleName of sourceFile.moduleAugmentations) { + if (!isStringLiteral(moduleName)) continue; + const symbol = checker.getSymbolAtLocation(moduleName); + if (!symbol) continue; + addReferenceFromAmbientModule(symbol); + } + } + for (const ambientModule of program.getTypeChecker().getAmbientModules()) { + if (ambientModule.declarations && ambientModule.declarations.length > 1) { + addReferenceFromAmbientModule(ambientModule); + } + } + return referencedFiles; + function addReferenceFromAmbientModule(symbol) { + if (!symbol.declarations) { + return; + } + for (const declaration of symbol.declarations) { + const declarationSourceFile = getSourceFileOfNode(declaration); + if (declarationSourceFile && declarationSourceFile !== sourceFile) { + addReferencedFile(declarationSourceFile.resolvedPath); + } + } + } + function addReferencedFile(referencedPath) { + (referencedFiles || (referencedFiles = /* @__PURE__ */ new Set())).add(referencedPath); + } + } + function canReuseOldState(newReferencedMap, oldState) { + return oldState && !oldState.referencedMap === !newReferencedMap; + } + BuilderState2.canReuseOldState = canReuseOldState; + function createReferencedMap(options) { + return options.module !== 0 /* None */ && !options.outFile ? createManyToManyPathMap() : void 0; + } + BuilderState2.createReferencedMap = createReferencedMap; + function create(newProgram, oldState, disableUseFileVersionAsSignature) { + var _a, _b; + const fileInfos = /* @__PURE__ */ new Map(); + const options = newProgram.getCompilerOptions(); + const referencedMap = createReferencedMap(options); + const useOldState = canReuseOldState(referencedMap, oldState); + newProgram.getTypeChecker(); + for (const sourceFile of newProgram.getSourceFiles()) { + const version2 = Debug.checkDefined(sourceFile.version, "Program intended to be used with Builder should have source files with versions set"); + const oldUncommittedSignature = useOldState ? (_a = oldState.oldSignatures) == null ? void 0 : _a.get(sourceFile.resolvedPath) : void 0; + const signature = oldUncommittedSignature === void 0 ? useOldState ? (_b = oldState.fileInfos.get(sourceFile.resolvedPath)) == null ? void 0 : _b.signature : void 0 : oldUncommittedSignature || void 0; + if (referencedMap) { + const newReferences = getReferencedFiles(newProgram, sourceFile, newProgram.getCanonicalFileName); + if (newReferences) { + referencedMap.set(sourceFile.resolvedPath, newReferences); + } + } + fileInfos.set(sourceFile.resolvedPath, { + version: version2, + signature, + // No need to calculate affectsGlobalScope with --out since its not used at all + affectsGlobalScope: !options.outFile ? isFileAffectingGlobalScope(sourceFile) || void 0 : void 0, + impliedFormat: sourceFile.impliedNodeFormat + }); + } + return { + fileInfos, + referencedMap, + useFileVersionAsSignature: !disableUseFileVersionAsSignature && !useOldState + }; + } + BuilderState2.create = create; + function releaseCache2(state) { + state.allFilesExcludingDefaultLibraryFile = void 0; + state.allFileNames = void 0; + } + BuilderState2.releaseCache = releaseCache2; + function getFilesAffectedBy(state, programOfThisState, path, cancellationToken, host) { + var _a; + const result = getFilesAffectedByWithOldState( + state, + programOfThisState, + path, + cancellationToken, + host + ); + (_a = state.oldSignatures) == null ? void 0 : _a.clear(); + return result; + } + BuilderState2.getFilesAffectedBy = getFilesAffectedBy; + function getFilesAffectedByWithOldState(state, programOfThisState, path, cancellationToken, host) { + const sourceFile = programOfThisState.getSourceFileByPath(path); + if (!sourceFile) { + return emptyArray; + } + if (!updateShapeSignature(state, programOfThisState, sourceFile, cancellationToken, host)) { + return [sourceFile]; + } + return (state.referencedMap ? getFilesAffectedByUpdatedShapeWhenModuleEmit : getFilesAffectedByUpdatedShapeWhenNonModuleEmit)(state, programOfThisState, sourceFile, cancellationToken, host); + } + BuilderState2.getFilesAffectedByWithOldState = getFilesAffectedByWithOldState; + function updateSignatureOfFile(state, signature, path) { + state.fileInfos.get(path).signature = signature; + (state.hasCalledUpdateShapeSignature || (state.hasCalledUpdateShapeSignature = /* @__PURE__ */ new Set())).add(path); + } + BuilderState2.updateSignatureOfFile = updateSignatureOfFile; + function computeDtsSignature(programOfThisState, sourceFile, cancellationToken, host, onNewSignature) { + programOfThisState.emit( + sourceFile, + (fileName, text, _writeByteOrderMark, _onError, sourceFiles, data) => { + Debug.assert(isDeclarationFileName(fileName), `File extension for signature expected to be dts: Got:: ${fileName}`); + onNewSignature( + computeSignatureWithDiagnostics( + programOfThisState, + sourceFile, + text, + host, + data + ), + sourceFiles + ); + }, + cancellationToken, + 2 /* BuilderSignature */, + /*customTransformers*/ + void 0, + /*forceDtsEmit*/ + true + ); + } + BuilderState2.computeDtsSignature = computeDtsSignature; + function updateShapeSignature(state, programOfThisState, sourceFile, cancellationToken, host, useFileVersionAsSignature = state.useFileVersionAsSignature) { + var _a; + if ((_a = state.hasCalledUpdateShapeSignature) == null ? void 0 : _a.has(sourceFile.resolvedPath)) return false; + const info = state.fileInfos.get(sourceFile.resolvedPath); + const prevSignature = info.signature; + let latestSignature; + if (!sourceFile.isDeclarationFile && !useFileVersionAsSignature) { + computeDtsSignature(programOfThisState, sourceFile, cancellationToken, host, (signature) => { + latestSignature = signature; + if (host.storeSignatureInfo) (state.signatureInfo ?? (state.signatureInfo = /* @__PURE__ */ new Map())).set(sourceFile.resolvedPath, 0 /* ComputedDts */); + }); + } + if (latestSignature === void 0) { + latestSignature = sourceFile.version; + if (host.storeSignatureInfo) (state.signatureInfo ?? (state.signatureInfo = /* @__PURE__ */ new Map())).set(sourceFile.resolvedPath, 2 /* UsedVersion */); + } + (state.oldSignatures || (state.oldSignatures = /* @__PURE__ */ new Map())).set(sourceFile.resolvedPath, prevSignature || false); + (state.hasCalledUpdateShapeSignature || (state.hasCalledUpdateShapeSignature = /* @__PURE__ */ new Set())).add(sourceFile.resolvedPath); + info.signature = latestSignature; + return latestSignature !== prevSignature; + } + BuilderState2.updateShapeSignature = updateShapeSignature; + function getAllDependencies(state, programOfThisState, sourceFile) { + const compilerOptions = programOfThisState.getCompilerOptions(); + if (compilerOptions.outFile) { + return getAllFileNames(state, programOfThisState); + } + if (!state.referencedMap || isFileAffectingGlobalScope(sourceFile)) { + return getAllFileNames(state, programOfThisState); + } + const seenMap = /* @__PURE__ */ new Set(); + const queue = [sourceFile.resolvedPath]; + while (queue.length) { + const path = queue.pop(); + if (!seenMap.has(path)) { + seenMap.add(path); + const references = state.referencedMap.getValues(path); + if (references) { + for (const key of references.keys()) { + queue.push(key); + } + } + } + } + return arrayFrom(mapDefinedIterator(seenMap.keys(), (path) => { + var _a; + return ((_a = programOfThisState.getSourceFileByPath(path)) == null ? void 0 : _a.fileName) ?? path; + })); + } + BuilderState2.getAllDependencies = getAllDependencies; + function getAllFileNames(state, programOfThisState) { + if (!state.allFileNames) { + const sourceFiles = programOfThisState.getSourceFiles(); + state.allFileNames = sourceFiles === emptyArray ? emptyArray : sourceFiles.map((file) => file.fileName); + } + return state.allFileNames; + } + function getReferencedByPaths(state, referencedFilePath) { + const keys = state.referencedMap.getKeys(referencedFilePath); + return keys ? arrayFrom(keys.keys()) : []; + } + BuilderState2.getReferencedByPaths = getReferencedByPaths; + function containsOnlyAmbientModules(sourceFile) { + for (const statement of sourceFile.statements) { + if (!isModuleWithStringLiteralName(statement)) { + return false; + } + } + return true; + } + function containsGlobalScopeAugmentation(sourceFile) { + return some(sourceFile.moduleAugmentations, (augmentation) => isGlobalScopeAugmentation(augmentation.parent)); + } + function isFileAffectingGlobalScope(sourceFile) { + return containsGlobalScopeAugmentation(sourceFile) || !isExternalOrCommonJsModule(sourceFile) && !isJsonSourceFile(sourceFile) && !containsOnlyAmbientModules(sourceFile); + } + function getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, firstSourceFile) { + if (state.allFilesExcludingDefaultLibraryFile) { + return state.allFilesExcludingDefaultLibraryFile; + } + let result; + if (firstSourceFile) addSourceFile(firstSourceFile); + for (const sourceFile of programOfThisState.getSourceFiles()) { + if (sourceFile !== firstSourceFile) { + addSourceFile(sourceFile); + } + } + state.allFilesExcludingDefaultLibraryFile = result || emptyArray; + return state.allFilesExcludingDefaultLibraryFile; + function addSourceFile(sourceFile) { + if (!programOfThisState.isSourceFileDefaultLibrary(sourceFile)) { + (result || (result = [])).push(sourceFile); + } + } + } + BuilderState2.getAllFilesExcludingDefaultLibraryFile = getAllFilesExcludingDefaultLibraryFile; + function getFilesAffectedByUpdatedShapeWhenNonModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape) { + const compilerOptions = programOfThisState.getCompilerOptions(); + if (compilerOptions && compilerOptions.outFile) { + return [sourceFileWithUpdatedShape]; + } + return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape); + } + function getFilesAffectedByUpdatedShapeWhenModuleEmit(state, programOfThisState, sourceFileWithUpdatedShape, cancellationToken, host) { + if (isFileAffectingGlobalScope(sourceFileWithUpdatedShape)) { + return getAllFilesExcludingDefaultLibraryFile(state, programOfThisState, sourceFileWithUpdatedShape); + } + const compilerOptions = programOfThisState.getCompilerOptions(); + if (compilerOptions && (getIsolatedModules(compilerOptions) || compilerOptions.outFile)) { + return [sourceFileWithUpdatedShape]; + } + const seenFileNamesMap = /* @__PURE__ */ new Map(); + seenFileNamesMap.set(sourceFileWithUpdatedShape.resolvedPath, sourceFileWithUpdatedShape); + const queue = getReferencedByPaths(state, sourceFileWithUpdatedShape.resolvedPath); + while (queue.length > 0) { + const currentPath = queue.pop(); + if (!seenFileNamesMap.has(currentPath)) { + const currentSourceFile = programOfThisState.getSourceFileByPath(currentPath); + seenFileNamesMap.set(currentPath, currentSourceFile); + if (currentSourceFile && updateShapeSignature(state, programOfThisState, currentSourceFile, cancellationToken, host)) { + queue.push(...getReferencedByPaths(state, currentSourceFile.resolvedPath)); + } + } + } + return arrayFrom(mapDefinedIterator(seenFileNamesMap.values(), (value) => value)); + } +})(BuilderState || (BuilderState = {})); + +// src/compiler/builder.ts +var BuilderFileEmit = /* @__PURE__ */ ((BuilderFileEmit2) => { + BuilderFileEmit2[BuilderFileEmit2["None"] = 0] = "None"; + BuilderFileEmit2[BuilderFileEmit2["Js"] = 1] = "Js"; + BuilderFileEmit2[BuilderFileEmit2["JsMap"] = 2] = "JsMap"; + BuilderFileEmit2[BuilderFileEmit2["JsInlineMap"] = 4] = "JsInlineMap"; + BuilderFileEmit2[BuilderFileEmit2["DtsErrors"] = 8] = "DtsErrors"; + BuilderFileEmit2[BuilderFileEmit2["DtsEmit"] = 16] = "DtsEmit"; + BuilderFileEmit2[BuilderFileEmit2["DtsMap"] = 32] = "DtsMap"; + BuilderFileEmit2[BuilderFileEmit2["Dts"] = 24] = "Dts"; + BuilderFileEmit2[BuilderFileEmit2["AllJs"] = 7] = "AllJs"; + BuilderFileEmit2[BuilderFileEmit2["AllDtsEmit"] = 48] = "AllDtsEmit"; + BuilderFileEmit2[BuilderFileEmit2["AllDts"] = 56] = "AllDts"; + BuilderFileEmit2[BuilderFileEmit2["All"] = 63] = "All"; + return BuilderFileEmit2; +})(BuilderFileEmit || {}); +function isBuilderProgramStateWithDefinedProgram(state) { + return state.program !== void 0; +} +function toBuilderProgramStateWithDefinedProgram(state) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + return state; +} +function getBuilderFileEmit(options) { + let result = 1 /* Js */; + if (options.sourceMap) result = result | 2 /* JsMap */; + if (options.inlineSourceMap) result = result | 4 /* JsInlineMap */; + if (getEmitDeclarations(options)) result = result | 24 /* Dts */; + if (options.declarationMap) result = result | 32 /* DtsMap */; + if (options.emitDeclarationOnly) result = result & 56 /* AllDts */; + return result; +} +function getPendingEmitKind(optionsOrEmitKind, oldOptionsOrEmitKind) { + const oldEmitKind = oldOptionsOrEmitKind && (isNumber(oldOptionsOrEmitKind) ? oldOptionsOrEmitKind : getBuilderFileEmit(oldOptionsOrEmitKind)); + const emitKind = isNumber(optionsOrEmitKind) ? optionsOrEmitKind : getBuilderFileEmit(optionsOrEmitKind); + if (oldEmitKind === emitKind) return 0 /* None */; + if (!oldEmitKind || !emitKind) return emitKind; + const diff = oldEmitKind ^ emitKind; + let result = 0 /* None */; + if (diff & 7 /* AllJs */) result = emitKind & 7 /* AllJs */; + if (diff & 8 /* DtsErrors */) result = result | emitKind & 8 /* DtsErrors */; + if (diff & 48 /* AllDtsEmit */) result = result | emitKind & 48 /* AllDtsEmit */; + return result; +} +function hasSameKeys(map1, map2) { + return map1 === map2 || map1 !== void 0 && map2 !== void 0 && map1.size === map2.size && !forEachKey(map1, (key) => !map2.has(key)); +} +function createBuilderProgramState(newProgram, oldState) { + var _a, _b; + const state = BuilderState.create( + newProgram, + oldState, + /*disableUseFileVersionAsSignature*/ + false + ); + state.program = newProgram; + const compilerOptions = newProgram.getCompilerOptions(); + state.compilerOptions = compilerOptions; + const outFilePath = compilerOptions.outFile; + state.semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); + if (outFilePath && compilerOptions.composite && (oldState == null ? void 0 : oldState.outSignature) && outFilePath === oldState.compilerOptions.outFile) { + state.outSignature = oldState.outSignature && getEmitSignatureFromOldSignature(compilerOptions, oldState.compilerOptions, oldState.outSignature); + } + state.changedFilesSet = /* @__PURE__ */ new Set(); + state.latestChangedDtsFile = compilerOptions.composite ? oldState == null ? void 0 : oldState.latestChangedDtsFile : void 0; + state.checkPending = state.compilerOptions.noCheck ? true : void 0; + const useOldState = BuilderState.canReuseOldState(state.referencedMap, oldState); + const oldCompilerOptions = useOldState ? oldState.compilerOptions : void 0; + let canCopySemanticDiagnostics = useOldState && !compilerOptionsAffectSemanticDiagnostics(compilerOptions, oldCompilerOptions); + const canCopyEmitSignatures = compilerOptions.composite && (oldState == null ? void 0 : oldState.emitSignatures) && !outFilePath && !compilerOptionsAffectDeclarationPath(compilerOptions, oldState.compilerOptions); + let canCopyEmitDiagnostics = true; + if (useOldState) { + (_a = oldState.changedFilesSet) == null ? void 0 : _a.forEach((value) => state.changedFilesSet.add(value)); + if (!outFilePath && ((_b = oldState.affectedFilesPendingEmit) == null ? void 0 : _b.size)) { + state.affectedFilesPendingEmit = new Map(oldState.affectedFilesPendingEmit); + state.seenAffectedFiles = /* @__PURE__ */ new Set(); + } + state.programEmitPending = oldState.programEmitPending; + if (outFilePath && state.changedFilesSet.size) { + canCopySemanticDiagnostics = false; + canCopyEmitDiagnostics = false; + } + state.hasErrorsFromOldState = oldState.hasErrors; + } else { + state.buildInfoEmitPending = isIncrementalCompilation(compilerOptions); + } + const referencedMap = state.referencedMap; + const oldReferencedMap = useOldState ? oldState.referencedMap : void 0; + const copyDeclarationFileDiagnostics = canCopySemanticDiagnostics && !compilerOptions.skipLibCheck === !oldCompilerOptions.skipLibCheck; + const copyLibFileDiagnostics = copyDeclarationFileDiagnostics && !compilerOptions.skipDefaultLibCheck === !oldCompilerOptions.skipDefaultLibCheck; + state.fileInfos.forEach((info, sourceFilePath) => { + var _a2; + let oldInfo; + let newReferences; + if (!useOldState || // File wasn't present in old state + !(oldInfo = oldState.fileInfos.get(sourceFilePath)) || // versions dont match + oldInfo.version !== info.version || // Implied formats dont match + oldInfo.impliedFormat !== info.impliedFormat || // Referenced files changed + !hasSameKeys(newReferences = referencedMap && referencedMap.getValues(sourceFilePath), oldReferencedMap && oldReferencedMap.getValues(sourceFilePath)) || // Referenced file was deleted in the new program + newReferences && forEachKey(newReferences, (path) => !state.fileInfos.has(path) && oldState.fileInfos.has(path))) { + addFileToChangeSet(sourceFilePath); + } else { + const sourceFile = newProgram.getSourceFileByPath(sourceFilePath); + const emitDiagnostics = canCopyEmitDiagnostics ? (_a2 = oldState.emitDiagnosticsPerFile) == null ? void 0 : _a2.get(sourceFilePath) : void 0; + if (emitDiagnostics) { + (state.emitDiagnosticsPerFile ?? (state.emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set( + sourceFilePath, + oldState.hasReusableDiagnostic ? convertToDiagnostics(emitDiagnostics, sourceFilePath, newProgram) : repopulateDiagnostics(emitDiagnostics, newProgram) + ); + } + if (canCopySemanticDiagnostics) { + if (sourceFile.isDeclarationFile && !copyDeclarationFileDiagnostics) return; + if (sourceFile.hasNoDefaultLib && !copyLibFileDiagnostics) return; + const diagnostics = oldState.semanticDiagnosticsPerFile.get(sourceFilePath); + if (diagnostics) { + state.semanticDiagnosticsPerFile.set( + sourceFilePath, + oldState.hasReusableDiagnostic ? convertToDiagnostics(diagnostics, sourceFilePath, newProgram) : repopulateDiagnostics(diagnostics, newProgram) + ); + (state.semanticDiagnosticsFromOldState ?? (state.semanticDiagnosticsFromOldState = /* @__PURE__ */ new Set())).add(sourceFilePath); + } + } + } + if (canCopyEmitSignatures) { + const oldEmitSignature = oldState.emitSignatures.get(sourceFilePath); + if (oldEmitSignature) { + (state.emitSignatures ?? (state.emitSignatures = /* @__PURE__ */ new Map())).set(sourceFilePath, getEmitSignatureFromOldSignature(compilerOptions, oldState.compilerOptions, oldEmitSignature)); + } + } + }); + if (useOldState && forEachEntry(oldState.fileInfos, (info, sourceFilePath) => { + if (state.fileInfos.has(sourceFilePath)) return false; + if (info.affectsGlobalScope) return true; + state.buildInfoEmitPending = true; + return !!outFilePath; + })) { + BuilderState.getAllFilesExcludingDefaultLibraryFile( + state, + newProgram, + /*firstSourceFile*/ + void 0 + ).forEach((file) => addFileToChangeSet(file.resolvedPath)); + } else if (oldCompilerOptions) { + const pendingEmitKind = compilerOptionsAffectEmit(compilerOptions, oldCompilerOptions) ? getBuilderFileEmit(compilerOptions) : getPendingEmitKind(compilerOptions, oldCompilerOptions); + if (pendingEmitKind !== 0 /* None */) { + if (!outFilePath) { + newProgram.getSourceFiles().forEach((f) => { + if (!state.changedFilesSet.has(f.resolvedPath)) { + addToAffectedFilesPendingEmit( + state, + f.resolvedPath, + pendingEmitKind + ); + } + }); + Debug.assert(!state.seenAffectedFiles || !state.seenAffectedFiles.size); + state.seenAffectedFiles = state.seenAffectedFiles || /* @__PURE__ */ new Set(); + } else if (!state.changedFilesSet.size) { + state.programEmitPending = state.programEmitPending ? state.programEmitPending | pendingEmitKind : pendingEmitKind; + } + state.buildInfoEmitPending = true; + } + } + if (useOldState && state.semanticDiagnosticsPerFile.size !== state.fileInfos.size && oldState.checkPending !== state.checkPending) state.buildInfoEmitPending = true; + return state; + function addFileToChangeSet(path) { + state.changedFilesSet.add(path); + if (outFilePath) { + canCopySemanticDiagnostics = false; + canCopyEmitDiagnostics = false; + state.semanticDiagnosticsFromOldState = void 0; + state.semanticDiagnosticsPerFile.clear(); + state.emitDiagnosticsPerFile = void 0; + } + state.buildInfoEmitPending = true; + state.programEmitPending = void 0; + } +} +function getEmitSignatureFromOldSignature(options, oldOptions, oldEmitSignature) { + return !!options.declarationMap === !!oldOptions.declarationMap ? ( + // Use same format of signature + oldEmitSignature + ) : ( + // Convert to different format + isString(oldEmitSignature) ? [oldEmitSignature] : oldEmitSignature[0] + ); +} +function repopulateDiagnostics(diagnostics, newProgram) { + if (!diagnostics.length) return diagnostics; + return sameMap(diagnostics, (diag2) => { + if (isString(diag2.messageText)) return diag2; + const repopulatedChain = convertOrRepopulateDiagnosticMessageChain(diag2.messageText, diag2.file, newProgram, (chain) => { + var _a; + return (_a = chain.repopulateInfo) == null ? void 0 : _a.call(chain); + }); + return repopulatedChain === diag2.messageText ? diag2 : { ...diag2, messageText: repopulatedChain }; + }); +} +function convertOrRepopulateDiagnosticMessageChain(chain, sourceFile, newProgram, repopulateInfo) { + const info = repopulateInfo(chain); + if (info === true) { + return { + ...createModeMismatchDetails(sourceFile), + next: convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo) + }; + } else if (info) { + return { + ...createModuleNotFoundChain(sourceFile, newProgram, info.moduleReference, info.mode, info.packageName || info.moduleReference), + next: convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo) + }; + } + const next = convertOrRepopulateDiagnosticMessageChainArray(chain.next, sourceFile, newProgram, repopulateInfo); + return next === chain.next ? chain : { ...chain, next }; +} +function convertOrRepopulateDiagnosticMessageChainArray(array, sourceFile, newProgram, repopulateInfo) { + return sameMap(array, (chain) => convertOrRepopulateDiagnosticMessageChain(chain, sourceFile, newProgram, repopulateInfo)); +} +function convertToDiagnostics(diagnostics, diagnosticFilePath, newProgram) { + if (!diagnostics.length) return emptyArray; + let buildInfoDirectory; + return diagnostics.map((diagnostic) => { + const result = convertToDiagnosticRelatedInformation(diagnostic, diagnosticFilePath, newProgram, toPathInBuildInfoDirectory); + result.reportsUnnecessary = diagnostic.reportsUnnecessary; + result.reportsDeprecated = diagnostic.reportDeprecated; + result.source = diagnostic.source; + result.skippedOn = diagnostic.skippedOn; + const { relatedInformation } = diagnostic; + result.relatedInformation = relatedInformation ? relatedInformation.length ? relatedInformation.map((r) => convertToDiagnosticRelatedInformation(r, diagnosticFilePath, newProgram, toPathInBuildInfoDirectory)) : [] : void 0; + return result; + }); + function toPathInBuildInfoDirectory(path) { + buildInfoDirectory ?? (buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(getTsBuildInfoEmitOutputFilePath(newProgram.getCompilerOptions()), newProgram.getCurrentDirectory()))); + return toPath(path, buildInfoDirectory, newProgram.getCanonicalFileName); + } +} +function convertToDiagnosticRelatedInformation(diagnostic, diagnosticFilePath, newProgram, toPath3) { + const { file } = diagnostic; + const sourceFile = file !== false ? newProgram.getSourceFileByPath(file ? toPath3(file) : diagnosticFilePath) : void 0; + return { + ...diagnostic, + file: sourceFile, + messageText: isString(diagnostic.messageText) ? diagnostic.messageText : convertOrRepopulateDiagnosticMessageChain(diagnostic.messageText, sourceFile, newProgram, (chain) => chain.info) + }; +} +function releaseCache(state) { + BuilderState.releaseCache(state); + state.program = void 0; +} +function assertSourceFileOkWithoutNextAffectedCall(state, sourceFile) { + Debug.assert(!sourceFile || !state.affectedFiles || state.affectedFiles[state.affectedFilesIndex - 1] !== sourceFile || !state.semanticDiagnosticsPerFile.has(sourceFile.resolvedPath)); +} +function getNextAffectedFile(state, cancellationToken, host) { + var _a; + while (true) { + const { affectedFiles } = state; + if (affectedFiles) { + const seenAffectedFiles = state.seenAffectedFiles; + let affectedFilesIndex = state.affectedFilesIndex; + while (affectedFilesIndex < affectedFiles.length) { + const affectedFile = affectedFiles[affectedFilesIndex]; + if (!seenAffectedFiles.has(affectedFile.resolvedPath)) { + state.affectedFilesIndex = affectedFilesIndex; + addToAffectedFilesPendingEmit( + state, + affectedFile.resolvedPath, + getBuilderFileEmit(state.compilerOptions) + ); + handleDtsMayChangeOfAffectedFile( + state, + affectedFile, + cancellationToken, + host + ); + return affectedFile; + } + affectedFilesIndex++; + } + state.changedFilesSet.delete(state.currentChangedFilePath); + state.currentChangedFilePath = void 0; + (_a = state.oldSignatures) == null ? void 0 : _a.clear(); + state.affectedFiles = void 0; + } + const nextKey = state.changedFilesSet.keys().next(); + if (nextKey.done) { + return void 0; + } + const compilerOptions = state.program.getCompilerOptions(); + if (compilerOptions.outFile) return state.program; + state.affectedFiles = BuilderState.getFilesAffectedByWithOldState( + state, + state.program, + nextKey.value, + cancellationToken, + host + ); + state.currentChangedFilePath = nextKey.value; + state.affectedFilesIndex = 0; + if (!state.seenAffectedFiles) state.seenAffectedFiles = /* @__PURE__ */ new Set(); + } +} +function clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles, isForDtsErrors) { + var _a, _b; + if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size) && !state.programEmitPending) return; + if (!emitOnlyDtsFiles && !isForDtsErrors) { + state.affectedFilesPendingEmit = void 0; + state.programEmitPending = void 0; + } + (_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.forEach((emitKind, path) => { + const pending = !isForDtsErrors ? emitKind & 7 /* AllJs */ : emitKind & (7 /* AllJs */ | 48 /* AllDtsEmit */); + if (!pending) state.affectedFilesPendingEmit.delete(path); + else state.affectedFilesPendingEmit.set(path, pending); + }); + if (state.programEmitPending) { + const pending = !isForDtsErrors ? state.programEmitPending & 7 /* AllJs */ : state.programEmitPending & (7 /* AllJs */ | 48 /* AllDtsEmit */); + if (!pending) state.programEmitPending = void 0; + else state.programEmitPending = pending; + } +} +function getPendingEmitKindWithSeen(optionsOrEmitKind, seenOldOptionsOrEmitKind, emitOnlyDtsFiles, isForDtsErrors) { + let pendingKind = getPendingEmitKind(optionsOrEmitKind, seenOldOptionsOrEmitKind); + if (emitOnlyDtsFiles) pendingKind = pendingKind & 56 /* AllDts */; + if (isForDtsErrors) pendingKind = pendingKind & 8 /* DtsErrors */; + return pendingKind; +} +function getBuilderFileEmitAllDts(isForDtsErrors) { + return !isForDtsErrors ? 56 /* AllDts */ : 8 /* DtsErrors */; +} +function getNextAffectedFilePendingEmit(state, emitOnlyDtsFiles, isForDtsErrors) { + var _a; + if (!((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.size)) return void 0; + return forEachEntry(state.affectedFilesPendingEmit, (emitKind, path) => { + var _a2; + const affectedFile = state.program.getSourceFileByPath(path); + if (!affectedFile || !sourceFileMayBeEmitted(affectedFile, state.program)) { + state.affectedFilesPendingEmit.delete(path); + return void 0; + } + const seenKind = (_a2 = state.seenEmittedFiles) == null ? void 0 : _a2.get(affectedFile.resolvedPath); + const pendingKind = getPendingEmitKindWithSeen( + emitKind, + seenKind, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (pendingKind) return { affectedFile, emitKind: pendingKind }; + }); +} +function getNextPendingEmitDiagnosticsFile(state, isForDtsErrors) { + var _a; + if (!((_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.size)) return void 0; + return forEachEntry(state.emitDiagnosticsPerFile, (diagnostics, path) => { + var _a2; + const affectedFile = state.program.getSourceFileByPath(path); + if (!affectedFile || !sourceFileMayBeEmitted(affectedFile, state.program)) { + state.emitDiagnosticsPerFile.delete(path); + return void 0; + } + const seenKind = ((_a2 = state.seenEmittedFiles) == null ? void 0 : _a2.get(affectedFile.resolvedPath)) || 0 /* None */; + if (!(seenKind & getBuilderFileEmitAllDts(isForDtsErrors))) return { affectedFile, diagnostics, seenKind }; + }); +} +function removeDiagnosticsOfLibraryFiles(state) { + if (!state.cleanedDiagnosticsOfLibFiles) { + state.cleanedDiagnosticsOfLibFiles = true; + const options = state.program.getCompilerOptions(); + forEach(state.program.getSourceFiles(), (f) => state.program.isSourceFileDefaultLibrary(f) && !skipTypeCheckingIgnoringNoCheck(f, options, state.program) && removeSemanticDiagnosticsOf(state, f.resolvedPath)); + } +} +function handleDtsMayChangeOfAffectedFile(state, affectedFile, cancellationToken, host) { + removeSemanticDiagnosticsOf(state, affectedFile.resolvedPath); + if (state.allFilesExcludingDefaultLibraryFile === state.affectedFiles) { + removeDiagnosticsOfLibraryFiles(state); + BuilderState.updateShapeSignature( + state, + state.program, + affectedFile, + cancellationToken, + host + ); + return; + } + if (state.compilerOptions.assumeChangesOnlyAffectDirectDependencies) return; + handleDtsMayChangeOfReferencingExportOfAffectedFile( + state, + affectedFile, + cancellationToken, + host + ); +} +function handleDtsMayChangeOf(state, path, invalidateJsFiles, cancellationToken, host) { + removeSemanticDiagnosticsOf(state, path); + if (!state.changedFilesSet.has(path)) { + const sourceFile = state.program.getSourceFileByPath(path); + if (sourceFile) { + BuilderState.updateShapeSignature( + state, + state.program, + sourceFile, + cancellationToken, + host, + /*useFileVersionAsSignature*/ + true + ); + if (invalidateJsFiles) { + addToAffectedFilesPendingEmit( + state, + path, + getBuilderFileEmit(state.compilerOptions) + ); + } else if (getEmitDeclarations(state.compilerOptions)) { + addToAffectedFilesPendingEmit( + state, + path, + state.compilerOptions.declarationMap ? 56 /* AllDts */ : 24 /* Dts */ + ); + } + } + } +} +function removeSemanticDiagnosticsOf(state, path) { + if (!state.semanticDiagnosticsFromOldState) { + return true; + } + state.semanticDiagnosticsFromOldState.delete(path); + state.semanticDiagnosticsPerFile.delete(path); + return !state.semanticDiagnosticsFromOldState.size; +} +function isChangedSignature(state, path) { + const oldSignature = Debug.checkDefined(state.oldSignatures).get(path) || void 0; + const newSignature = Debug.checkDefined(state.fileInfos.get(path)).signature; + return newSignature !== oldSignature; +} +function handleDtsMayChangeOfGlobalScope(state, filePath, invalidateJsFiles, cancellationToken, host) { + var _a; + if (!((_a = state.fileInfos.get(filePath)) == null ? void 0 : _a.affectsGlobalScope)) return false; + BuilderState.getAllFilesExcludingDefaultLibraryFile( + state, + state.program, + /*firstSourceFile*/ + void 0 + ).forEach( + (file) => handleDtsMayChangeOf( + state, + file.resolvedPath, + invalidateJsFiles, + cancellationToken, + host + ) + ); + removeDiagnosticsOfLibraryFiles(state); + return true; +} +function handleDtsMayChangeOfReferencingExportOfAffectedFile(state, affectedFile, cancellationToken, host) { + var _a, _b; + if (!state.referencedMap || !state.changedFilesSet.has(affectedFile.resolvedPath)) return; + if (!isChangedSignature(state, affectedFile.resolvedPath)) return; + if (getIsolatedModules(state.compilerOptions)) { + const seenFileNamesMap = /* @__PURE__ */ new Map(); + seenFileNamesMap.set(affectedFile.resolvedPath, true); + const queue = BuilderState.getReferencedByPaths(state, affectedFile.resolvedPath); + while (queue.length > 0) { + const currentPath = queue.pop(); + if (!seenFileNamesMap.has(currentPath)) { + seenFileNamesMap.set(currentPath, true); + if (handleDtsMayChangeOfGlobalScope( + state, + currentPath, + /*invalidateJsFiles*/ + false, + cancellationToken, + host + )) return; + handleDtsMayChangeOf( + state, + currentPath, + /*invalidateJsFiles*/ + false, + cancellationToken, + host + ); + if (isChangedSignature(state, currentPath)) { + const currentSourceFile = state.program.getSourceFileByPath(currentPath); + queue.push(...BuilderState.getReferencedByPaths(state, currentSourceFile.resolvedPath)); + } + } + } + } + const seenFileAndExportsOfFile = /* @__PURE__ */ new Set(); + const invalidateJsFiles = !!((_a = affectedFile.symbol) == null ? void 0 : _a.exports) && !!forEachEntry( + affectedFile.symbol.exports, + (exported) => { + if ((exported.flags & 128 /* ConstEnum */) !== 0) return true; + const aliased = skipAlias(exported, state.program.getTypeChecker()); + if (aliased === exported) return false; + return (aliased.flags & 128 /* ConstEnum */) !== 0 && some(aliased.declarations, (d) => getSourceFileOfNode(d) === affectedFile); + } + ); + (_b = state.referencedMap.getKeys(affectedFile.resolvedPath)) == null ? void 0 : _b.forEach((exportedFromPath) => { + if (handleDtsMayChangeOfGlobalScope(state, exportedFromPath, invalidateJsFiles, cancellationToken, host)) return true; + const references = state.referencedMap.getKeys(exportedFromPath); + return references && forEachKey(references, (filePath) => handleDtsMayChangeOfFileAndExportsOfFile( + state, + filePath, + invalidateJsFiles, + seenFileAndExportsOfFile, + cancellationToken, + host + )); + }); +} +function handleDtsMayChangeOfFileAndExportsOfFile(state, filePath, invalidateJsFiles, seenFileAndExportsOfFile, cancellationToken, host) { + var _a; + if (!tryAddToSet(seenFileAndExportsOfFile, filePath)) return void 0; + if (handleDtsMayChangeOfGlobalScope(state, filePath, invalidateJsFiles, cancellationToken, host)) return true; + handleDtsMayChangeOf(state, filePath, invalidateJsFiles, cancellationToken, host); + (_a = state.referencedMap.getKeys(filePath)) == null ? void 0 : _a.forEach( + (referencingFilePath) => handleDtsMayChangeOfFileAndExportsOfFile( + state, + referencingFilePath, + invalidateJsFiles, + seenFileAndExportsOfFile, + cancellationToken, + host + ) + ); + return void 0; +} +function getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile) { + if (state.compilerOptions.noCheck) return emptyArray; + return concatenate( + getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile), + state.program.getProgramDiagnostics(sourceFile) + ); +} +function getBinderAndCheckerDiagnosticsOfFile(state, sourceFile, cancellationToken, semanticDiagnosticsPerFile) { + semanticDiagnosticsPerFile ?? (semanticDiagnosticsPerFile = state.semanticDiagnosticsPerFile); + const path = sourceFile.resolvedPath; + const cachedDiagnostics = semanticDiagnosticsPerFile.get(path); + if (cachedDiagnostics) { + return filterSemanticDiagnostics(cachedDiagnostics, state.compilerOptions); + } + const diagnostics = state.program.getBindAndCheckDiagnostics(sourceFile, cancellationToken); + semanticDiagnosticsPerFile.set(path, diagnostics); + state.buildInfoEmitPending = true; + return filterSemanticDiagnostics(diagnostics, state.compilerOptions); +} +function isIncrementalBundleEmitBuildInfo(info) { + var _a; + return !!((_a = info.options) == null ? void 0 : _a.outFile); +} +function isIncrementalBuildInfo(info) { + return !!info.fileNames; +} +function isNonIncrementalBuildInfo(info) { + return !isIncrementalBuildInfo(info) && !!info.root; +} +function ensureHasErrorsForState(state) { + if (state.hasErrors !== void 0) return; + if (isIncrementalCompilation(state.compilerOptions)) { + state.hasErrors = !some(state.program.getSourceFiles(), (f) => { + var _a, _b; + const bindAndCheckDiagnostics = state.semanticDiagnosticsPerFile.get(f.resolvedPath); + return bindAndCheckDiagnostics === void 0 || // Missing semantic diagnostics in cache will be encoded in buildInfo + !!bindAndCheckDiagnostics.length || // cached semantic diagnostics will be encoded in buildInfo + !!((_b = (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(f.resolvedPath)) == null ? void 0 : _b.length); + }) && (hasSyntaxOrGlobalErrors(state) || some(state.program.getSourceFiles(), (f) => !!state.program.getProgramDiagnostics(f).length)); + } else { + state.hasErrors = some(state.program.getSourceFiles(), (f) => { + var _a, _b; + const bindAndCheckDiagnostics = state.semanticDiagnosticsPerFile.get(f.resolvedPath); + return !!(bindAndCheckDiagnostics == null ? void 0 : bindAndCheckDiagnostics.length) || // If has semantic diagnostics + !!((_b = (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(f.resolvedPath)) == null ? void 0 : _b.length); + }) || hasSyntaxOrGlobalErrors(state); + } +} +function hasSyntaxOrGlobalErrors(state) { + return !!state.program.getConfigFileParsingDiagnostics().length || !!state.program.getSyntacticDiagnostics().length || !!state.program.getOptionsDiagnostics().length || !!state.program.getGlobalDiagnostics().length; +} +function getBuildInfoEmitPending(state) { + ensureHasErrorsForState(state); + return state.buildInfoEmitPending ?? (state.buildInfoEmitPending = !!state.hasErrorsFromOldState !== !!state.hasErrors); +} +function getBuildInfo2(state) { + var _a, _b; + const currentDirectory = state.program.getCurrentDirectory(); + const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(getTsBuildInfoEmitOutputFilePath(state.compilerOptions), currentDirectory)); + const latestChangedDtsFile = state.latestChangedDtsFile ? relativeToBuildInfoEnsuringAbsolutePath(state.latestChangedDtsFile) : void 0; + const fileNames = []; + const fileNameToFileId = /* @__PURE__ */ new Map(); + const rootFileNames = new Set(state.program.getRootFileNames().map((f) => toPath(f, currentDirectory, state.program.getCanonicalFileName))); + ensureHasErrorsForState(state); + if (!isIncrementalCompilation(state.compilerOptions)) { + const buildInfo2 = { + root: arrayFrom(rootFileNames, (r) => relativeToBuildInfo(r)), + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version + }; + return buildInfo2; + } + const root = []; + if (state.compilerOptions.outFile) { + const fileInfos2 = arrayFrom(state.fileInfos.entries(), ([key, value]) => { + const fileId = toFileId(key); + tryAddRoot(key, fileId); + return value.impliedFormat ? { version: value.version, impliedFormat: value.impliedFormat, signature: void 0, affectsGlobalScope: void 0 } : value.version; + }); + const buildInfo2 = { + fileNames, + fileInfos: fileInfos2, + root, + resolvedRoot: toResolvedRoot(), + options: toIncrementalBuildInfoCompilerOptions(state.compilerOptions), + semanticDiagnosticsPerFile: !state.changedFilesSet.size ? toIncrementalBuildInfoDiagnostics() : void 0, + emitDiagnosticsPerFile: toIncrementalBuildInfoEmitDiagnostics(), + changeFileSet: toChangeFileSet(), + outSignature: state.outSignature, + latestChangedDtsFile, + pendingEmit: !state.programEmitPending ? void 0 : ( + // Pending is undefined or None is encoded as undefined + state.programEmitPending === getBuilderFileEmit(state.compilerOptions) ? false : ( + // Pending emit is same as deteremined by compilerOptions + state.programEmitPending + ) + ), + // Actual value + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version + }; + return buildInfo2; + } + let fileIdsList; + let fileNamesToFileIdListId; + let emitSignatures; + const fileInfos = arrayFrom(state.fileInfos.entries(), ([key, value]) => { + var _a2, _b2; + const fileId = toFileId(key); + tryAddRoot(key, fileId); + Debug.assert(fileNames[fileId - 1] === relativeToBuildInfo(key)); + const oldSignature = (_a2 = state.oldSignatures) == null ? void 0 : _a2.get(key); + const actualSignature = oldSignature !== void 0 ? oldSignature || void 0 : value.signature; + if (state.compilerOptions.composite) { + const file = state.program.getSourceFileByPath(key); + if (!isJsonSourceFile(file) && sourceFileMayBeEmitted(file, state.program)) { + const emitSignature = (_b2 = state.emitSignatures) == null ? void 0 : _b2.get(key); + if (emitSignature !== actualSignature) { + emitSignatures = append( + emitSignatures, + emitSignature === void 0 ? fileId : ( + // There is no emit, encode as false + // fileId, signature: emptyArray if signature only differs in dtsMap option than our own compilerOptions otherwise EmitSignature + [fileId, !isString(emitSignature) && emitSignature[0] === actualSignature ? emptyArray : emitSignature] + ) + ); + } + } + } + return value.version === actualSignature ? value.affectsGlobalScope || value.impliedFormat ? ( + // If file version is same as signature, dont serialize signature + { version: value.version, signature: void 0, affectsGlobalScope: value.affectsGlobalScope, impliedFormat: value.impliedFormat } + ) : ( + // If file info only contains version and signature and both are same we can just write string + value.version + ) : actualSignature !== void 0 ? ( + // If signature is not same as version, encode signature in the fileInfo + oldSignature === void 0 ? ( + // If we havent computed signature, use fileInfo as is + value + ) : ( + // Serialize fileInfo with new updated signature + { version: value.version, signature: actualSignature, affectsGlobalScope: value.affectsGlobalScope, impliedFormat: value.impliedFormat } + ) + ) : ( + // Signature of the FileInfo is undefined, serialize it as false + { version: value.version, signature: false, affectsGlobalScope: value.affectsGlobalScope, impliedFormat: value.impliedFormat } + ); + }); + let referencedMap; + if ((_a = state.referencedMap) == null ? void 0 : _a.size()) { + referencedMap = arrayFrom(state.referencedMap.keys()).sort(compareStringsCaseSensitive).map((key) => [ + toFileId(key), + toFileIdListId(state.referencedMap.getValues(key)) + ]); + } + const semanticDiagnosticsPerFile = toIncrementalBuildInfoDiagnostics(); + let affectedFilesPendingEmit; + if ((_b = state.affectedFilesPendingEmit) == null ? void 0 : _b.size) { + const fullEmitForOptions = getBuilderFileEmit(state.compilerOptions); + const seenFiles = /* @__PURE__ */ new Set(); + for (const path of arrayFrom(state.affectedFilesPendingEmit.keys()).sort(compareStringsCaseSensitive)) { + if (tryAddToSet(seenFiles, path)) { + const file = state.program.getSourceFileByPath(path); + if (!file || !sourceFileMayBeEmitted(file, state.program)) continue; + const fileId = toFileId(path), pendingEmit = state.affectedFilesPendingEmit.get(path); + affectedFilesPendingEmit = append( + affectedFilesPendingEmit, + pendingEmit === fullEmitForOptions ? fileId : ( + // Pending full emit per options + pendingEmit === 24 /* Dts */ ? [fileId] : ( + // Pending on Dts only + [fileId, pendingEmit] + ) + ) + // Anything else + ); + } + } + } + const buildInfo = { + fileNames, + fileIdsList, + fileInfos, + root, + resolvedRoot: toResolvedRoot(), + options: toIncrementalBuildInfoCompilerOptions(state.compilerOptions), + referencedMap, + semanticDiagnosticsPerFile, + emitDiagnosticsPerFile: toIncrementalBuildInfoEmitDiagnostics(), + changeFileSet: toChangeFileSet(), + affectedFilesPendingEmit, + emitSignatures, + latestChangedDtsFile, + errors: state.hasErrors ? true : void 0, + checkPending: state.checkPending, + version + }; + return buildInfo; + function relativeToBuildInfoEnsuringAbsolutePath(path) { + return relativeToBuildInfo(getNormalizedAbsolutePath(path, currentDirectory)); + } + function relativeToBuildInfo(path) { + return ensurePathIsNonModuleName(getRelativePathFromDirectory(buildInfoDirectory, path, state.program.getCanonicalFileName)); + } + function toFileId(path) { + let fileId = fileNameToFileId.get(path); + if (fileId === void 0) { + fileNames.push(relativeToBuildInfo(path)); + fileNameToFileId.set(path, fileId = fileNames.length); + } + return fileId; + } + function toFileIdListId(set) { + const fileIds = arrayFrom(set.keys(), toFileId).sort(compareValues); + const key = fileIds.join(); + let fileIdListId = fileNamesToFileIdListId == null ? void 0 : fileNamesToFileIdListId.get(key); + if (fileIdListId === void 0) { + fileIdsList = append(fileIdsList, fileIds); + (fileNamesToFileIdListId ?? (fileNamesToFileIdListId = /* @__PURE__ */ new Map())).set(key, fileIdListId = fileIdsList.length); + } + return fileIdListId; + } + function tryAddRoot(path, fileId) { + const file = state.program.getSourceFile(path); + if (!state.program.getFileIncludeReasons().get(file.path).some((r) => r.kind === 0 /* RootFile */)) return; + if (!root.length) return root.push(fileId); + const last2 = root[root.length - 1]; + const isLastStartEnd = isArray(last2); + if (isLastStartEnd && last2[1] === fileId - 1) return last2[1] = fileId; + if (isLastStartEnd || root.length === 1 || last2 !== fileId - 1) return root.push(fileId); + const lastButOne = root[root.length - 2]; + if (!isNumber(lastButOne) || lastButOne !== last2 - 1) return root.push(fileId); + root[root.length - 2] = [lastButOne, fileId]; + return root.length = root.length - 1; + } + function toResolvedRoot() { + let result; + rootFileNames.forEach((path) => { + const file = state.program.getSourceFileByPath(path); + if (file && path !== file.resolvedPath) { + result = append(result, [toFileId(file.resolvedPath), toFileId(path)]); + } + }); + return result; + } + function toIncrementalBuildInfoCompilerOptions(options) { + let result; + const { optionsNameMap } = getOptionsNameMap(); + for (const name of getOwnKeys(options).sort(compareStringsCaseSensitive)) { + const optionInfo = optionsNameMap.get(name.toLowerCase()); + if (optionInfo == null ? void 0 : optionInfo.affectsBuildInfo) { + (result || (result = {}))[name] = toReusableCompilerOptionValue( + optionInfo, + options[name] + ); + } + } + return result; + } + function toReusableCompilerOptionValue(option, value) { + if (option) { + Debug.assert(option.type !== "listOrElement"); + if (option.type === "list") { + const values = value; + if (option.element.isFilePath && values.length) { + return values.map(relativeToBuildInfoEnsuringAbsolutePath); + } + } else if (option.isFilePath) { + return relativeToBuildInfoEnsuringAbsolutePath(value); + } + } + return value; + } + function toIncrementalBuildInfoDiagnostics() { + let result; + state.fileInfos.forEach((_value, key) => { + const value = state.semanticDiagnosticsPerFile.get(key); + if (!value) { + if (!state.changedFilesSet.has(key)) result = append(result, toFileId(key)); + } else if (value.length) { + result = append(result, [ + toFileId(key), + toReusableDiagnostic(value, key) + ]); + } + }); + return result; + } + function toIncrementalBuildInfoEmitDiagnostics() { + var _a2; + let result; + if (!((_a2 = state.emitDiagnosticsPerFile) == null ? void 0 : _a2.size)) return result; + for (const key of arrayFrom(state.emitDiagnosticsPerFile.keys()).sort(compareStringsCaseSensitive)) { + const value = state.emitDiagnosticsPerFile.get(key); + result = append(result, [ + toFileId(key), + toReusableDiagnostic(value, key) + ]); + } + return result; + } + function toReusableDiagnostic(diagnostics, diagnosticFilePath) { + Debug.assert(!!diagnostics.length); + return diagnostics.map((diagnostic) => { + const result = toReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath); + result.reportsUnnecessary = diagnostic.reportsUnnecessary; + result.reportDeprecated = diagnostic.reportsDeprecated; + result.source = diagnostic.source; + result.skippedOn = diagnostic.skippedOn; + const { relatedInformation } = diagnostic; + result.relatedInformation = relatedInformation ? relatedInformation.length ? relatedInformation.map((r) => toReusableDiagnosticRelatedInformation(r, diagnosticFilePath)) : [] : void 0; + return result; + }); + } + function toReusableDiagnosticRelatedInformation(diagnostic, diagnosticFilePath) { + const { file } = diagnostic; + return { + ...diagnostic, + file: file ? file.resolvedPath === diagnosticFilePath ? void 0 : relativeToBuildInfo(file.resolvedPath) : false, + messageText: isString(diagnostic.messageText) ? diagnostic.messageText : toReusableDiagnosticMessageChain(diagnostic.messageText) + }; + } + function toReusableDiagnosticMessageChain(chain) { + if (chain.repopulateInfo) { + return { + info: chain.repopulateInfo(), + next: toReusableDiagnosticMessageChainArray(chain.next) + }; + } + const next = toReusableDiagnosticMessageChainArray(chain.next); + return next === chain.next ? chain : { ...chain, next }; + } + function toReusableDiagnosticMessageChainArray(array) { + if (!array) return array; + return forEach(array, (chain, index) => { + const reusable = toReusableDiagnosticMessageChain(chain); + if (chain === reusable) return void 0; + const result = index > 0 ? array.slice(0, index - 1) : []; + result.push(reusable); + for (let i = index + 1; i < array.length; i++) { + result.push(toReusableDiagnosticMessageChain(array[i])); + } + return result; + }) || array; + } + function toChangeFileSet() { + let changeFileSet; + if (state.changedFilesSet.size) { + for (const path of arrayFrom(state.changedFilesSet.keys()).sort(compareStringsCaseSensitive)) { + changeFileSet = append(changeFileSet, toFileId(path)); + } + } + return changeFileSet; + } +} +var BuilderProgramKind = /* @__PURE__ */ ((BuilderProgramKind2) => { + BuilderProgramKind2[BuilderProgramKind2["SemanticDiagnosticsBuilderProgram"] = 0] = "SemanticDiagnosticsBuilderProgram"; + BuilderProgramKind2[BuilderProgramKind2["EmitAndSemanticDiagnosticsBuilderProgram"] = 1] = "EmitAndSemanticDiagnosticsBuilderProgram"; + return BuilderProgramKind2; +})(BuilderProgramKind || {}); +function getBuilderCreationParameters(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { + let host; + let newProgram; + let oldProgram; + if (newProgramOrRootNames === void 0) { + Debug.assert(hostOrOptions === void 0); + host = oldProgramOrHost; + oldProgram = configFileParsingDiagnosticsOrOldProgram; + Debug.assert(!!oldProgram); + newProgram = oldProgram.getProgram(); + } else if (isArray(newProgramOrRootNames)) { + oldProgram = configFileParsingDiagnosticsOrOldProgram; + newProgram = createProgram({ + rootNames: newProgramOrRootNames, + options: hostOrOptions, + host: oldProgramOrHost, + oldProgram: oldProgram && oldProgram.getProgramOrUndefined(), + configFileParsingDiagnostics, + projectReferences + }); + host = oldProgramOrHost; + } else { + newProgram = newProgramOrRootNames; + host = hostOrOptions; + oldProgram = oldProgramOrHost; + configFileParsingDiagnostics = configFileParsingDiagnosticsOrOldProgram; + } + return { host, newProgram, oldProgram, configFileParsingDiagnostics: configFileParsingDiagnostics || emptyArray }; +} +function getTextHandlingSourceMapForSignature(text, data) { + return (data == null ? void 0 : data.sourceMapUrlPos) !== void 0 ? text.substring(0, data.sourceMapUrlPos) : text; +} +function computeSignatureWithDiagnostics(program, sourceFile, text, host, data) { + var _a; + text = getTextHandlingSourceMapForSignature(text, data); + let sourceFileDirectory; + if ((_a = data == null ? void 0 : data.diagnostics) == null ? void 0 : _a.length) { + text += data.diagnostics.map((diagnostic) => `${locationInfo(diagnostic)}${DiagnosticCategory[diagnostic.category]}${diagnostic.code}: ${flattenDiagnosticMessageText2(diagnostic.messageText)}`).join("\n"); + } + return (host.createHash ?? generateDjb2Hash)(text); + function flattenDiagnosticMessageText2(diagnostic) { + return isString(diagnostic) ? diagnostic : diagnostic === void 0 ? "" : !diagnostic.next ? diagnostic.messageText : diagnostic.messageText + diagnostic.next.map(flattenDiagnosticMessageText2).join("\n"); + } + function locationInfo(diagnostic) { + if (diagnostic.file.resolvedPath === sourceFile.resolvedPath) return `(${diagnostic.start},${diagnostic.length})`; + if (sourceFileDirectory === void 0) sourceFileDirectory = getDirectoryPath(sourceFile.resolvedPath); + return `${ensurePathIsNonModuleName(getRelativePathFromDirectory( + sourceFileDirectory, + diagnostic.file.resolvedPath, + program.getCanonicalFileName + ))}(${diagnostic.start},${diagnostic.length})`; + } +} +function computeSignature(text, host, data) { + return (host.createHash ?? generateDjb2Hash)(getTextHandlingSourceMapForSignature(text, data)); +} +function createBuilderProgram(kind, { newProgram, host, oldProgram, configFileParsingDiagnostics }) { + let oldState = oldProgram && oldProgram.state; + if (oldState && newProgram === oldState.program && configFileParsingDiagnostics === newProgram.getConfigFileParsingDiagnostics()) { + newProgram = void 0; + oldState = void 0; + return oldProgram; + } + const state = createBuilderProgramState(newProgram, oldState); + newProgram.getBuildInfo = () => getBuildInfo2(toBuilderProgramStateWithDefinedProgram(state)); + newProgram = void 0; + oldProgram = void 0; + oldState = void 0; + const builderProgram = createRedirectedBuilderProgram(state, configFileParsingDiagnostics); + builderProgram.state = state; + builderProgram.hasChangedEmitSignature = () => !!state.hasChangedEmitSignature; + builderProgram.getAllDependencies = (sourceFile) => BuilderState.getAllDependencies( + state, + Debug.checkDefined(state.program), + sourceFile + ); + builderProgram.getSemanticDiagnostics = getSemanticDiagnostics; + builderProgram.getDeclarationDiagnostics = getDeclarationDiagnostics2; + builderProgram.emit = emit; + builderProgram.releaseProgram = () => releaseCache(state); + if (kind === 0 /* SemanticDiagnosticsBuilderProgram */) { + builderProgram.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile; + } else if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + builderProgram.getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile; + builderProgram.emitNextAffectedFile = emitNextAffectedFile; + builderProgram.emitBuildInfo = emitBuildInfo; + } else { + notImplemented(); + } + return builderProgram; + function emitBuildInfo(writeFile2, cancellationToken) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (getBuildInfoEmitPending(state)) { + const result = state.program.emitBuildInfo( + writeFile2 || maybeBind(host, host.writeFile), + cancellationToken + ); + state.buildInfoEmitPending = false; + return result; + } + return emitSkippedWithNoDiagnostics; + } + function emitNextAffectedFileOrDtsErrors(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers, isForDtsErrors) { + var _a, _b, _c, _d; + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + let affected = getNextAffectedFile(state, cancellationToken, host); + const programEmitKind = getBuilderFileEmit(state.compilerOptions); + let emitKind = !isForDtsErrors ? emitOnlyDtsFiles ? programEmitKind & 56 /* AllDts */ : programEmitKind : 8 /* DtsErrors */; + if (!affected) { + if (!state.compilerOptions.outFile) { + const pendingAffectedFile = getNextAffectedFilePendingEmit( + state, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (pendingAffectedFile) { + ({ affectedFile: affected, emitKind } = pendingAffectedFile); + } else { + const pendingForDiagnostics = getNextPendingEmitDiagnosticsFile( + state, + isForDtsErrors + ); + if (pendingForDiagnostics) { + (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set( + pendingForDiagnostics.affectedFile.resolvedPath, + pendingForDiagnostics.seenKind | getBuilderFileEmitAllDts(isForDtsErrors) + ); + return { + result: { emitSkipped: true, diagnostics: pendingForDiagnostics.diagnostics }, + affected: pendingForDiagnostics.affectedFile + }; + } + } + } else { + if (state.programEmitPending) { + emitKind = getPendingEmitKindWithSeen( + state.programEmitPending, + state.seenProgramEmit, + emitOnlyDtsFiles, + isForDtsErrors + ); + if (emitKind) affected = state.program; + } + if (!affected && ((_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.size)) { + const seenKind = state.seenProgramEmit || 0 /* None */; + if (!(seenKind & getBuilderFileEmitAllDts(isForDtsErrors))) { + state.seenProgramEmit = getBuilderFileEmitAllDts(isForDtsErrors) | seenKind; + const diagnostics = []; + state.emitDiagnosticsPerFile.forEach((d) => addRange(diagnostics, d)); + return { + result: { emitSkipped: true, diagnostics }, + affected: state.program + }; + } + } + } + if (!affected) { + if (isForDtsErrors || !getBuildInfoEmitPending(state)) return void 0; + const affected2 = state.program; + const result2 = affected2.emitBuildInfo( + writeFile2 || maybeBind(host, host.writeFile), + cancellationToken + ); + state.buildInfoEmitPending = false; + return { result: result2, affected: affected2 }; + } + } + let emitOnly; + if (emitKind & 7 /* AllJs */) emitOnly = 0 /* Js */; + if (emitKind & 56 /* AllDts */) emitOnly = emitOnly === void 0 ? 1 /* Dts */ : void 0; + const result = !isForDtsErrors ? state.program.emit( + affected === state.program ? void 0 : affected, + getWriteFileCallback(writeFile2, customTransformers), + cancellationToken, + emitOnly, + customTransformers, + /*forceDtsEmit*/ + void 0, + /*skipBuildInfo*/ + true + ) : { + emitSkipped: true, + diagnostics: state.program.getDeclarationDiagnostics( + affected === state.program ? void 0 : affected, + cancellationToken + ) + }; + if (affected !== state.program) { + const affectedSourceFile = affected; + state.seenAffectedFiles.add(affectedSourceFile.resolvedPath); + if (state.affectedFilesIndex !== void 0) state.affectedFilesIndex++; + state.buildInfoEmitPending = true; + const existing = ((_b = state.seenEmittedFiles) == null ? void 0 : _b.get(affectedSourceFile.resolvedPath)) || 0 /* None */; + (state.seenEmittedFiles ?? (state.seenEmittedFiles = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, emitKind | existing); + const existingPending = ((_c = state.affectedFilesPendingEmit) == null ? void 0 : _c.get(affectedSourceFile.resolvedPath)) || programEmitKind; + const pendingKind = getPendingEmitKind(existingPending, emitKind | existing); + if (pendingKind) (state.affectedFilesPendingEmit ?? (state.affectedFilesPendingEmit = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, pendingKind); + else (_d = state.affectedFilesPendingEmit) == null ? void 0 : _d.delete(affectedSourceFile.resolvedPath); + if (result.diagnostics.length) (state.emitDiagnosticsPerFile ?? (state.emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set(affectedSourceFile.resolvedPath, result.diagnostics); + } else { + state.changedFilesSet.clear(); + state.programEmitPending = state.changedFilesSet.size ? getPendingEmitKind(programEmitKind, emitKind) : state.programEmitPending ? getPendingEmitKind(state.programEmitPending, emitKind) : void 0; + state.seenProgramEmit = emitKind | (state.seenProgramEmit || 0 /* None */); + setEmitDiagnosticsPerFile(result.diagnostics); + state.buildInfoEmitPending = true; + } + return { result, affected }; + } + function setEmitDiagnosticsPerFile(diagnostics) { + let emitDiagnosticsPerFile; + diagnostics.forEach((d) => { + if (!d.file) return; + let diagnostics2 = emitDiagnosticsPerFile == null ? void 0 : emitDiagnosticsPerFile.get(d.file.resolvedPath); + if (!diagnostics2) (emitDiagnosticsPerFile ?? (emitDiagnosticsPerFile = /* @__PURE__ */ new Map())).set(d.file.resolvedPath, diagnostics2 = []); + diagnostics2.push(d); + }); + if (emitDiagnosticsPerFile) state.emitDiagnosticsPerFile = emitDiagnosticsPerFile; + } + function emitNextAffectedFile(writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + return emitNextAffectedFileOrDtsErrors( + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers, + /*isForDtsErrors*/ + false + ); + } + function getWriteFileCallback(writeFile2, customTransformers) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (!getEmitDeclarations(state.compilerOptions)) return writeFile2 || maybeBind(host, host.writeFile); + return (fileName, text, writeByteOrderMark, onError, sourceFiles, data) => { + var _a, _b, _c; + if (isDeclarationFileName(fileName)) { + if (!state.compilerOptions.outFile) { + Debug.assert((sourceFiles == null ? void 0 : sourceFiles.length) === 1); + let emitSignature; + if (!customTransformers) { + const file = sourceFiles[0]; + const info = state.fileInfos.get(file.resolvedPath); + if (info.signature === file.version) { + const signature = computeSignatureWithDiagnostics( + state.program, + file, + text, + host, + data + ); + if (!((_a = data == null ? void 0 : data.diagnostics) == null ? void 0 : _a.length)) emitSignature = signature; + if (signature !== file.version) { + if (host.storeSignatureInfo) (state.signatureInfo ?? (state.signatureInfo = /* @__PURE__ */ new Map())).set(file.resolvedPath, 1 /* StoredSignatureAtEmit */); + if (state.affectedFiles) { + const existing = (_b = state.oldSignatures) == null ? void 0 : _b.get(file.resolvedPath); + if (existing === void 0) (state.oldSignatures ?? (state.oldSignatures = /* @__PURE__ */ new Map())).set(file.resolvedPath, info.signature || false); + info.signature = signature; + } else { + info.signature = signature; + } + } + } + } + if (state.compilerOptions.composite) { + const filePath = sourceFiles[0].resolvedPath; + emitSignature = handleNewSignature((_c = state.emitSignatures) == null ? void 0 : _c.get(filePath), emitSignature); + if (!emitSignature) return data.skippedDtsWrite = true; + (state.emitSignatures ?? (state.emitSignatures = /* @__PURE__ */ new Map())).set(filePath, emitSignature); + } + } else if (state.compilerOptions.composite) { + const newSignature = handleNewSignature( + state.outSignature, + /*newSignature*/ + void 0 + ); + if (!newSignature) return data.skippedDtsWrite = true; + state.outSignature = newSignature; + } + } + if (writeFile2) writeFile2(fileName, text, writeByteOrderMark, onError, sourceFiles, data); + else if (host.writeFile) host.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data); + else state.program.writeFile(fileName, text, writeByteOrderMark, onError, sourceFiles, data); + function handleNewSignature(oldSignatureFormat, newSignature) { + const oldSignature = !oldSignatureFormat || isString(oldSignatureFormat) ? oldSignatureFormat : oldSignatureFormat[0]; + newSignature ?? (newSignature = computeSignature(text, host, data)); + if (newSignature === oldSignature) { + if (oldSignatureFormat === oldSignature) return void 0; + else if (data) data.differsOnlyInMap = true; + else data = { differsOnlyInMap: true }; + } else { + state.hasChangedEmitSignature = true; + state.latestChangedDtsFile = fileName; + } + return newSignature; + } + }; + } + function emit(targetSourceFile, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + assertSourceFileOkWithoutNextAffectedCall(state, targetSourceFile); + } + const result = handleNoEmitOptions(builderProgram, targetSourceFile, writeFile2, cancellationToken); + if (result) return result; + if (!targetSourceFile) { + if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + let sourceMaps = []; + let emitSkipped = false; + let diagnostics; + let emittedFiles = []; + let affectedEmitResult; + while (affectedEmitResult = emitNextAffectedFile( + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers + )) { + emitSkipped = emitSkipped || affectedEmitResult.result.emitSkipped; + diagnostics = addRange(diagnostics, affectedEmitResult.result.diagnostics); + emittedFiles = addRange(emittedFiles, affectedEmitResult.result.emittedFiles); + sourceMaps = addRange(sourceMaps, affectedEmitResult.result.sourceMaps); + } + return { + emitSkipped, + diagnostics: diagnostics || emptyArray, + emittedFiles, + sourceMaps + }; + } else { + clearAffectedFilesPendingEmit( + state, + emitOnlyDtsFiles, + /*isForDtsErrors*/ + false + ); + } + } + const emitResult = state.program.emit( + targetSourceFile, + getWriteFileCallback(writeFile2, customTransformers), + cancellationToken, + emitOnlyDtsFiles, + customTransformers + ); + handleNonEmitBuilderWithEmitOrDtsErrors( + targetSourceFile, + emitOnlyDtsFiles, + /*isForDtsErrors*/ + false, + emitResult.diagnostics + ); + return emitResult; + } + function handleNonEmitBuilderWithEmitOrDtsErrors(targetSourceFile, emitOnlyDtsFiles, isForDtsErrors, diagnostics) { + if (!targetSourceFile && kind !== 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + clearAffectedFilesPendingEmit(state, emitOnlyDtsFiles, isForDtsErrors); + setEmitDiagnosticsPerFile(diagnostics); + } + } + function getDeclarationDiagnostics2(sourceFile, cancellationToken) { + var _a; + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + if (kind === 1 /* EmitAndSemanticDiagnosticsBuilderProgram */) { + assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); + let affectedEmitResult; + let diagnostics; + while (affectedEmitResult = emitNextAffectedFileOrDtsErrors( + /*writeFile*/ + void 0, + cancellationToken, + /*emitOnlyDtsFiles*/ + void 0, + /*customTransformers*/ + void 0, + /*isForDtsErrors*/ + true + )) { + if (!sourceFile) diagnostics = addRange(diagnostics, affectedEmitResult.result.diagnostics); + } + return (!sourceFile ? diagnostics : (_a = state.emitDiagnosticsPerFile) == null ? void 0 : _a.get(sourceFile.resolvedPath)) || emptyArray; + } else { + const result = state.program.getDeclarationDiagnostics(sourceFile, cancellationToken); + handleNonEmitBuilderWithEmitOrDtsErrors( + sourceFile, + /*emitOnlyDtsFiles*/ + void 0, + /*isForDtsErrors*/ + true, + result + ); + return result; + } + } + function getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + while (true) { + const affected = getNextAffectedFile(state, cancellationToken, host); + let result; + if (!affected) { + if (state.checkPending && !state.compilerOptions.noCheck) { + state.checkPending = void 0; + state.buildInfoEmitPending = true; + } + return void 0; + } else if (affected !== state.program) { + const affectedSourceFile = affected; + if (!ignoreSourceFile || !ignoreSourceFile(affectedSourceFile)) { + result = getSemanticDiagnosticsOfFile(state, affectedSourceFile, cancellationToken); + } + state.seenAffectedFiles.add(affectedSourceFile.resolvedPath); + state.affectedFilesIndex++; + state.buildInfoEmitPending = true; + if (!result) continue; + } else { + let diagnostics; + const semanticDiagnosticsPerFile = /* @__PURE__ */ new Map(); + state.program.getSourceFiles().forEach( + (sourceFile) => diagnostics = addRange( + diagnostics, + getSemanticDiagnosticsOfFile( + state, + sourceFile, + cancellationToken, + semanticDiagnosticsPerFile + ) + ) + ); + state.semanticDiagnosticsPerFile = semanticDiagnosticsPerFile; + result = diagnostics || emptyArray; + state.changedFilesSet.clear(); + state.programEmitPending = getBuilderFileEmit(state.compilerOptions); + if (!state.compilerOptions.noCheck) state.checkPending = void 0; + state.buildInfoEmitPending = true; + } + return { result, affected }; + } + } + function getSemanticDiagnostics(sourceFile, cancellationToken) { + Debug.assert(isBuilderProgramStateWithDefinedProgram(state)); + assertSourceFileOkWithoutNextAffectedCall(state, sourceFile); + if (sourceFile) { + return getSemanticDiagnosticsOfFile(state, sourceFile, cancellationToken); + } + while (true) { + const affectedResult = getSemanticDiagnosticsOfNextAffectedFile(cancellationToken); + if (!affectedResult) break; + if (affectedResult.affected === state.program) return affectedResult.result; + } + let diagnostics; + for (const sourceFile2 of state.program.getSourceFiles()) { + diagnostics = addRange(diagnostics, getSemanticDiagnosticsOfFile(state, sourceFile2, cancellationToken)); + } + if (state.checkPending && !state.compilerOptions.noCheck) { + state.checkPending = void 0; + state.buildInfoEmitPending = true; + } + return diagnostics || emptyArray; + } +} +function addToAffectedFilesPendingEmit(state, affectedFilePendingEmit, kind) { + var _a, _b; + const existingKind = ((_a = state.affectedFilesPendingEmit) == null ? void 0 : _a.get(affectedFilePendingEmit)) || 0 /* None */; + (state.affectedFilesPendingEmit ?? (state.affectedFilesPendingEmit = /* @__PURE__ */ new Map())).set(affectedFilePendingEmit, existingKind | kind); + (_b = state.emitDiagnosticsPerFile) == null ? void 0 : _b.delete(affectedFilePendingEmit); +} +function toBuilderStateFileInfoForMultiEmit(fileInfo) { + return isString(fileInfo) ? { version: fileInfo, signature: fileInfo, affectsGlobalScope: void 0, impliedFormat: void 0 } : isString(fileInfo.signature) ? fileInfo : { version: fileInfo.version, signature: fileInfo.signature === false ? void 0 : fileInfo.version, affectsGlobalScope: fileInfo.affectsGlobalScope, impliedFormat: fileInfo.impliedFormat }; +} +function toBuilderFileEmit(value, fullEmitForOptions) { + return isNumber(value) ? fullEmitForOptions : value[1] || 24 /* Dts */; +} +function toProgramEmitPending(value, options) { + return !value ? getBuilderFileEmit(options || {}) : value; +} +function createBuilderProgramUsingIncrementalBuildInfo(buildInfo, buildInfoPath, host) { + var _a, _b, _c, _d; + const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + let state; + const filePaths = (_a = buildInfo.fileNames) == null ? void 0 : _a.map(toPathInBuildInfoDirectory); + let filePathsSetList; + const latestChangedDtsFile = buildInfo.latestChangedDtsFile ? toAbsolutePath(buildInfo.latestChangedDtsFile) : void 0; + const fileInfos = /* @__PURE__ */ new Map(); + const changedFilesSet = new Set(map(buildInfo.changeFileSet, toFilePath)); + if (isIncrementalBundleEmitBuildInfo(buildInfo)) { + buildInfo.fileInfos.forEach((fileInfo, index) => { + const path = toFilePath(index + 1); + fileInfos.set(path, isString(fileInfo) ? { version: fileInfo, signature: void 0, affectsGlobalScope: void 0, impliedFormat: void 0 } : fileInfo); + }); + state = { + fileInfos, + compilerOptions: buildInfo.options ? convertToOptionsWithAbsolutePaths(buildInfo.options, toAbsolutePath) : {}, + semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(buildInfo.semanticDiagnosticsPerFile), + emitDiagnosticsPerFile: toPerFileEmitDiagnostics(buildInfo.emitDiagnosticsPerFile), + hasReusableDiagnostic: true, + changedFilesSet, + latestChangedDtsFile, + outSignature: buildInfo.outSignature, + programEmitPending: buildInfo.pendingEmit === void 0 ? void 0 : toProgramEmitPending(buildInfo.pendingEmit, buildInfo.options), + hasErrors: buildInfo.errors, + checkPending: buildInfo.checkPending + }; + } else { + filePathsSetList = (_b = buildInfo.fileIdsList) == null ? void 0 : _b.map((fileIds) => new Set(fileIds.map(toFilePath))); + const emitSignatures = ((_c = buildInfo.options) == null ? void 0 : _c.composite) && !buildInfo.options.outFile ? /* @__PURE__ */ new Map() : void 0; + buildInfo.fileInfos.forEach((fileInfo, index) => { + const path = toFilePath(index + 1); + const stateFileInfo = toBuilderStateFileInfoForMultiEmit(fileInfo); + fileInfos.set(path, stateFileInfo); + if (emitSignatures && stateFileInfo.signature) emitSignatures.set(path, stateFileInfo.signature); + }); + (_d = buildInfo.emitSignatures) == null ? void 0 : _d.forEach((value) => { + if (isNumber(value)) emitSignatures.delete(toFilePath(value)); + else { + const key = toFilePath(value[0]); + emitSignatures.set( + key, + !isString(value[1]) && !value[1].length ? ( + // File signature is emit signature but differs in map + [emitSignatures.get(key)] + ) : value[1] + ); + } + }); + const fullEmitForOptions = buildInfo.affectedFilesPendingEmit ? getBuilderFileEmit(buildInfo.options || {}) : void 0; + state = { + fileInfos, + compilerOptions: buildInfo.options ? convertToOptionsWithAbsolutePaths(buildInfo.options, toAbsolutePath) : {}, + referencedMap: toManyToManyPathMap(buildInfo.referencedMap, buildInfo.options ?? {}), + semanticDiagnosticsPerFile: toPerFileSemanticDiagnostics(buildInfo.semanticDiagnosticsPerFile), + emitDiagnosticsPerFile: toPerFileEmitDiagnostics(buildInfo.emitDiagnosticsPerFile), + hasReusableDiagnostic: true, + changedFilesSet, + affectedFilesPendingEmit: buildInfo.affectedFilesPendingEmit && arrayToMap(buildInfo.affectedFilesPendingEmit, (value) => toFilePath(isNumber(value) ? value : value[0]), (value) => toBuilderFileEmit(value, fullEmitForOptions)), + latestChangedDtsFile, + emitSignatures: (emitSignatures == null ? void 0 : emitSignatures.size) ? emitSignatures : void 0, + hasErrors: buildInfo.errors, + checkPending: buildInfo.checkPending + }; + } + return { + state, + getProgram: notImplemented, + getProgramOrUndefined: returnUndefined, + releaseProgram: noop, + getCompilerOptions: () => state.compilerOptions, + getSourceFile: notImplemented, + getSourceFiles: notImplemented, + getOptionsDiagnostics: notImplemented, + getGlobalDiagnostics: notImplemented, + getConfigFileParsingDiagnostics: notImplemented, + getSyntacticDiagnostics: notImplemented, + getDeclarationDiagnostics: notImplemented, + getSemanticDiagnostics: notImplemented, + emit: notImplemented, + getAllDependencies: notImplemented, + getCurrentDirectory: notImplemented, + emitNextAffectedFile: notImplemented, + getSemanticDiagnosticsOfNextAffectedFile: notImplemented, + emitBuildInfo: notImplemented, + close: noop, + hasChangedEmitSignature: returnFalse + }; + function toPathInBuildInfoDirectory(path) { + return toPath(path, buildInfoDirectory, getCanonicalFileName); + } + function toAbsolutePath(path) { + return getNormalizedAbsolutePath(path, buildInfoDirectory); + } + function toFilePath(fileId) { + return filePaths[fileId - 1]; + } + function toFilePathsSet(fileIdsListId) { + return filePathsSetList[fileIdsListId - 1]; + } + function toManyToManyPathMap(referenceMap, options) { + const map2 = BuilderState.createReferencedMap(options); + if (!map2 || !referenceMap) return map2; + referenceMap.forEach(([fileId, fileIdListId]) => map2.set(toFilePath(fileId), toFilePathsSet(fileIdListId))); + return map2; + } + function toPerFileSemanticDiagnostics(diagnostics) { + const semanticDiagnostics = new Map( + mapDefinedIterator( + fileInfos.keys(), + (key) => !changedFilesSet.has(key) ? [key, emptyArray] : void 0 + ) + ); + diagnostics == null ? void 0 : diagnostics.forEach((value) => { + if (isNumber(value)) semanticDiagnostics.delete(toFilePath(value)); + else semanticDiagnostics.set(toFilePath(value[0]), value[1]); + }); + return semanticDiagnostics; + } + function toPerFileEmitDiagnostics(diagnostics) { + return diagnostics && arrayToMap(diagnostics, (value) => toFilePath(value[0]), (value) => value[1]); + } +} +function getBuildInfoFileVersionMap(program, buildInfoPath, host) { + const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + const fileInfos = /* @__PURE__ */ new Map(); + let rootIndex = 0; + const roots = /* @__PURE__ */ new Map(); + const resolvedRoots = new Map(program.resolvedRoot); + program.fileInfos.forEach((fileInfo, index) => { + const path = toPath(program.fileNames[index], buildInfoDirectory, getCanonicalFileName); + const version2 = isString(fileInfo) ? fileInfo : fileInfo.version; + fileInfos.set(path, version2); + if (rootIndex < program.root.length) { + const current = program.root[rootIndex]; + const fileId = index + 1; + if (isArray(current)) { + if (current[0] <= fileId && fileId <= current[1]) { + addRoot(fileId, path); + if (current[1] === fileId) rootIndex++; + } + } else if (current === fileId) { + addRoot(fileId, path); + rootIndex++; + } + } + }); + return { fileInfos, roots }; + function addRoot(fileId, path) { + const root = resolvedRoots.get(fileId); + if (root) { + roots.set(toPath(program.fileNames[root - 1], buildInfoDirectory, getCanonicalFileName), path); + } else { + roots.set(path, void 0); + } + } +} +function getNonIncrementalBuildInfoRoots(buildInfo, buildInfoPath, host) { + if (!isNonIncrementalBuildInfo(buildInfo)) return void 0; + const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(buildInfoPath, host.getCurrentDirectory())); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + return buildInfo.root.map((r) => toPath(r, buildInfoDirectory, getCanonicalFileName)); +} +function createRedirectedBuilderProgram(state, configFileParsingDiagnostics) { + return { + state: void 0, + getProgram, + getProgramOrUndefined: () => state.program, + releaseProgram: () => state.program = void 0, + getCompilerOptions: () => state.compilerOptions, + getSourceFile: (fileName) => getProgram().getSourceFile(fileName), + getSourceFiles: () => getProgram().getSourceFiles(), + getOptionsDiagnostics: (cancellationToken) => getProgram().getOptionsDiagnostics(cancellationToken), + getGlobalDiagnostics: (cancellationToken) => getProgram().getGlobalDiagnostics(cancellationToken), + getConfigFileParsingDiagnostics: () => configFileParsingDiagnostics, + getSyntacticDiagnostics: (sourceFile, cancellationToken) => getProgram().getSyntacticDiagnostics(sourceFile, cancellationToken), + getDeclarationDiagnostics: (sourceFile, cancellationToken) => getProgram().getDeclarationDiagnostics(sourceFile, cancellationToken), + getSemanticDiagnostics: (sourceFile, cancellationToken) => getProgram().getSemanticDiagnostics(sourceFile, cancellationToken), + emit: (sourceFile, writeFile2, cancellationToken, emitOnlyDts, customTransformers) => getProgram().emit(sourceFile, writeFile2, cancellationToken, emitOnlyDts, customTransformers), + emitBuildInfo: (writeFile2, cancellationToken) => getProgram().emitBuildInfo(writeFile2, cancellationToken), + getAllDependencies: notImplemented, + getCurrentDirectory: () => getProgram().getCurrentDirectory(), + close: noop + }; + function getProgram() { + return Debug.checkDefined(state.program); + } +} + +// src/compiler/builderPublic.ts +function createSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { + return createBuilderProgram( + 0 /* SemanticDiagnosticsBuilderProgram */, + getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ) + ); +} +function createEmitAndSemanticDiagnosticsBuilderProgram(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { + return createBuilderProgram( + 1 /* EmitAndSemanticDiagnosticsBuilderProgram */, + getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ) + ); +} +function createAbstractBuilder(newProgramOrRootNames, hostOrOptions, oldProgramOrHost, configFileParsingDiagnosticsOrOldProgram, configFileParsingDiagnostics, projectReferences) { + const { newProgram, configFileParsingDiagnostics: newConfigFileParsingDiagnostics } = getBuilderCreationParameters( + newProgramOrRootNames, + hostOrOptions, + oldProgramOrHost, + configFileParsingDiagnosticsOrOldProgram, + configFileParsingDiagnostics, + projectReferences + ); + return createRedirectedBuilderProgram( + { program: newProgram, compilerOptions: newProgram.getCompilerOptions() }, + newConfigFileParsingDiagnostics + ); +} + +// src/compiler/resolutionCache.ts +function removeIgnoredPath(path) { + if (endsWith(path, "/node_modules/.staging")) { + return removeSuffix(path, "/.staging"); + } + return some(ignoredPaths, (searchPath) => path.includes(searchPath)) ? void 0 : path; +} +function perceivedOsRootLengthForWatching(pathComponents2, length2) { + if (length2 <= 1) return 1; + let indexAfterOsRoot = 1; + let isDosStyle = pathComponents2[0].search(/[a-z]:/i) === 0; + if (pathComponents2[0] !== directorySeparator && !isDosStyle && // Non dos style paths + pathComponents2[1].search(/[a-z]\$$/i) === 0) { + if (length2 === 2) return 2; + indexAfterOsRoot = 2; + isDosStyle = true; + } + if (isDosStyle && !pathComponents2[indexAfterOsRoot].match(/^users$/i)) { + return indexAfterOsRoot; + } + if (pathComponents2[indexAfterOsRoot].match(/^workspaces$/i)) { + return indexAfterOsRoot + 1; + } + return indexAfterOsRoot + 2; +} +function canWatchDirectoryOrFile(pathComponents2, length2) { + if (length2 === void 0) length2 = pathComponents2.length; + if (length2 <= 2) return false; + const perceivedOsRootLength = perceivedOsRootLengthForWatching(pathComponents2, length2); + return length2 > perceivedOsRootLength + 1; +} +function canWatchDirectoryOrFilePath(path) { + return canWatchDirectoryOrFile(getPathComponents(path)); +} +function canWatchAtTypes(atTypes) { + return canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(getDirectoryPath(atTypes)); +} +function isInDirectoryPath(dirComponents, fileOrDirComponents) { + if (fileOrDirComponents.length < dirComponents.length) return false; + for (let i = 0; i < dirComponents.length; i++) { + if (fileOrDirComponents[i] !== dirComponents[i]) return false; + } + return true; +} +function canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(fileOrDirPath) { + return canWatchDirectoryOrFilePath(fileOrDirPath); +} +function canWatchAffectingLocation(filePath) { + return canWatchAffectedPackageJsonOrNodeModulesOfAtTypes(filePath); +} +function getDirectoryToWatchFailedLookupLocation(failedLookupLocation, failedLookupLocationPath, rootDir, rootPath, rootPathComponents, isRootWatchable, getCurrentDirectory, preferNonRecursiveWatch) { + const failedLookupPathComponents = getPathComponents(failedLookupLocationPath); + failedLookupLocation = isRootedDiskPath(failedLookupLocation) ? normalizePath(failedLookupLocation) : getNormalizedAbsolutePath(failedLookupLocation, getCurrentDirectory()); + const failedLookupComponents = getPathComponents(failedLookupLocation); + const perceivedOsRootLength = perceivedOsRootLengthForWatching(failedLookupPathComponents, failedLookupPathComponents.length); + if (failedLookupPathComponents.length <= perceivedOsRootLength + 1) return void 0; + const nodeModulesIndex = failedLookupPathComponents.indexOf("node_modules"); + if (nodeModulesIndex !== -1 && nodeModulesIndex + 1 <= perceivedOsRootLength + 1) return void 0; + const lastNodeModulesIndex = failedLookupPathComponents.lastIndexOf("node_modules"); + if (isRootWatchable && isInDirectoryPath(rootPathComponents, failedLookupPathComponents)) { + if (failedLookupPathComponents.length > rootPathComponents.length + 1) { + return getDirectoryOfFailedLookupWatch( + failedLookupComponents, + failedLookupPathComponents, + Math.max(rootPathComponents.length + 1, perceivedOsRootLength + 1), + lastNodeModulesIndex + ); + } else { + return { + dir: rootDir, + dirPath: rootPath, + nonRecursive: true + }; + } + } + return getDirectoryToWatchFromFailedLookupLocationDirectory( + failedLookupComponents, + failedLookupPathComponents, + failedLookupPathComponents.length - 1, + perceivedOsRootLength, + nodeModulesIndex, + rootPathComponents, + lastNodeModulesIndex, + preferNonRecursiveWatch + ); +} +function getDirectoryToWatchFromFailedLookupLocationDirectory(dirComponents, dirPathComponents, dirPathComponentsLength, perceivedOsRootLength, nodeModulesIndex, rootPathComponents, lastNodeModulesIndex, preferNonRecursiveWatch) { + if (nodeModulesIndex !== -1) { + return getDirectoryOfFailedLookupWatch( + dirComponents, + dirPathComponents, + nodeModulesIndex + 1, + lastNodeModulesIndex + ); + } + let nonRecursive = true; + let length2 = dirPathComponentsLength; + if (!preferNonRecursiveWatch) { + for (let i = 0; i < dirPathComponentsLength; i++) { + if (dirPathComponents[i] !== rootPathComponents[i]) { + nonRecursive = false; + length2 = Math.max(i + 1, perceivedOsRootLength + 1); + break; + } + } + } + return getDirectoryOfFailedLookupWatch( + dirComponents, + dirPathComponents, + length2, + lastNodeModulesIndex, + nonRecursive + ); +} +function getDirectoryOfFailedLookupWatch(dirComponents, dirPathComponents, length2, lastNodeModulesIndex, nonRecursive) { + let packageDirLength; + if (lastNodeModulesIndex !== -1 && lastNodeModulesIndex + 1 >= length2 && lastNodeModulesIndex + 2 < dirPathComponents.length) { + if (!startsWith(dirPathComponents[lastNodeModulesIndex + 1], "@")) { + packageDirLength = lastNodeModulesIndex + 2; + } else if (lastNodeModulesIndex + 3 < dirPathComponents.length) { + packageDirLength = lastNodeModulesIndex + 3; + } + } + return { + dir: getPathFromPathComponents(dirComponents, length2), + dirPath: getPathFromPathComponents(dirPathComponents, length2), + nonRecursive, + packageDir: packageDirLength !== void 0 ? getPathFromPathComponents(dirComponents, packageDirLength) : void 0, + packageDirPath: packageDirLength !== void 0 ? getPathFromPathComponents(dirPathComponents, packageDirLength) : void 0 + }; +} +function getDirectoryToWatchFailedLookupLocationFromTypeRoot(typeRoot, typeRootPath, rootPath, rootPathComponents, isRootWatchable, getCurrentDirectory, preferNonRecursiveWatch, filterCustomPath) { + const typeRootPathComponents = getPathComponents(typeRootPath); + if (isRootWatchable && isInDirectoryPath(rootPathComponents, typeRootPathComponents)) { + return rootPath; + } + typeRoot = isRootedDiskPath(typeRoot) ? normalizePath(typeRoot) : getNormalizedAbsolutePath(typeRoot, getCurrentDirectory()); + const toWatch = getDirectoryToWatchFromFailedLookupLocationDirectory( + getPathComponents(typeRoot), + typeRootPathComponents, + typeRootPathComponents.length, + perceivedOsRootLengthForWatching(typeRootPathComponents, typeRootPathComponents.length), + typeRootPathComponents.indexOf("node_modules"), + rootPathComponents, + typeRootPathComponents.lastIndexOf("node_modules"), + preferNonRecursiveWatch + ); + return toWatch && filterCustomPath(toWatch.dirPath) ? toWatch.dirPath : void 0; +} +function getRootDirectoryOfResolutionCache(rootDirForResolution, getCurrentDirectory) { + const normalized = getNormalizedAbsolutePath(rootDirForResolution, getCurrentDirectory()); + return !isDiskPathRoot(normalized) ? removeTrailingDirectorySeparator(normalized) : normalized; +} +function getModuleResolutionHost(resolutionHost) { + var _a; + return ((_a = resolutionHost.getCompilerHost) == null ? void 0 : _a.call(resolutionHost)) || resolutionHost; +} +function createModuleResolutionLoaderUsingGlobalCache(containingFile, redirectedReference, options, resolutionHost, moduleResolutionCache) { + return { + nameAndMode: moduleResolutionNameAndModeGetter, + resolve: (moduleName, resoluionMode) => resolveModuleNameUsingGlobalCache( + resolutionHost, + moduleResolutionCache, + moduleName, + containingFile, + options, + redirectedReference, + resoluionMode + ) + }; +} +function resolveModuleNameUsingGlobalCache(resolutionHost, moduleResolutionCache, moduleName, containingFile, compilerOptions, redirectedReference, mode) { + const host = getModuleResolutionHost(resolutionHost); + const primaryResult = resolveModuleName(moduleName, containingFile, compilerOptions, host, moduleResolutionCache, redirectedReference, mode); + if (!resolutionHost.getGlobalTypingsCacheLocation) { + return primaryResult; + } + const globalCache = resolutionHost.getGlobalTypingsCacheLocation(); + if (globalCache !== void 0 && !isExternalModuleNameRelative(moduleName) && !(primaryResult.resolvedModule && extensionIsTS(primaryResult.resolvedModule.extension))) { + const { resolvedModule, failedLookupLocations, affectingLocations, resolutionDiagnostics } = loadModuleFromGlobalCache( + Debug.checkDefined(resolutionHost.globalCacheResolutionModuleName)(moduleName), + resolutionHost.projectName, + compilerOptions, + host, + globalCache, + moduleResolutionCache + ); + if (resolvedModule) { + primaryResult.resolvedModule = resolvedModule; + primaryResult.failedLookupLocations = updateResolutionField(primaryResult.failedLookupLocations, failedLookupLocations); + primaryResult.affectingLocations = updateResolutionField(primaryResult.affectingLocations, affectingLocations); + primaryResult.resolutionDiagnostics = updateResolutionField(primaryResult.resolutionDiagnostics, resolutionDiagnostics); + return primaryResult; + } + } + return primaryResult; +} +function createResolutionCache(resolutionHost, rootDirForResolution, logChangesWhenResolvingModule) { + let filesWithChangedSetOfUnresolvedImports; + let filesWithInvalidatedResolutions; + let filesWithInvalidatedNonRelativeUnresolvedImports; + const nonRelativeExternalModuleResolutions = /* @__PURE__ */ new Set(); + const resolutionsWithFailedLookups = /* @__PURE__ */ new Set(); + const resolutionsWithOnlyAffectingLocations = /* @__PURE__ */ new Set(); + const resolvedFileToResolution = /* @__PURE__ */ new Map(); + const impliedFormatPackageJsons = /* @__PURE__ */ new Map(); + let hasChangedAutomaticTypeDirectiveNames = false; + let affectingPathChecksForFile; + let affectingPathChecks; + let failedLookupChecks; + let startsWithPathChecks; + let isInDirectoryChecks; + let allModuleAndTypeResolutionsAreInvalidated = false; + const getCurrentDirectory = memoize(() => resolutionHost.getCurrentDirectory()); + const cachedDirectoryStructureHost = resolutionHost.getCachedDirectoryStructureHost(); + const resolvedModuleNames = /* @__PURE__ */ new Map(); + const moduleResolutionCache = createModuleResolutionCache( + getCurrentDirectory(), + resolutionHost.getCanonicalFileName, + resolutionHost.getCompilationSettings() + ); + const resolvedTypeReferenceDirectives = /* @__PURE__ */ new Map(); + const typeReferenceDirectiveResolutionCache = createTypeReferenceDirectiveResolutionCache( + getCurrentDirectory(), + resolutionHost.getCanonicalFileName, + resolutionHost.getCompilationSettings(), + moduleResolutionCache.getPackageJsonInfoCache(), + moduleResolutionCache.optionsToRedirectsKey + ); + const resolvedLibraries = /* @__PURE__ */ new Map(); + const libraryResolutionCache = createModuleResolutionCache( + getCurrentDirectory(), + resolutionHost.getCanonicalFileName, + getOptionsForLibraryResolution(resolutionHost.getCompilationSettings()), + moduleResolutionCache.getPackageJsonInfoCache() + ); + const directoryWatchesOfFailedLookups = /* @__PURE__ */ new Map(); + const fileWatchesOfAffectingLocations = /* @__PURE__ */ new Map(); + const rootDir = getRootDirectoryOfResolutionCache(rootDirForResolution, getCurrentDirectory); + const rootPath = resolutionHost.toPath(rootDir); + const rootPathComponents = getPathComponents(rootPath); + const isRootWatchable = canWatchDirectoryOrFile(rootPathComponents); + const isSymlinkCache = /* @__PURE__ */ new Map(); + const packageDirWatchers = /* @__PURE__ */ new Map(); + const dirPathToSymlinkPackageRefCount = /* @__PURE__ */ new Map(); + const typeRootsWatches = /* @__PURE__ */ new Map(); + return { + rootDirForResolution, + resolvedModuleNames, + resolvedTypeReferenceDirectives, + resolvedLibraries, + resolvedFileToResolution, + resolutionsWithFailedLookups, + resolutionsWithOnlyAffectingLocations, + directoryWatchesOfFailedLookups, + fileWatchesOfAffectingLocations, + packageDirWatchers, + dirPathToSymlinkPackageRefCount, + watchFailedLookupLocationsOfExternalModuleResolutions, + getModuleResolutionCache: () => moduleResolutionCache, + startRecordingFilesWithChangedResolutions, + finishRecordingFilesWithChangedResolutions, + // perDirectoryResolvedModuleNames and perDirectoryResolvedTypeReferenceDirectives could be non empty if there was exception during program update + // (between startCachingPerDirectoryResolution and finishCachingPerDirectoryResolution) + startCachingPerDirectoryResolution, + finishCachingPerDirectoryResolution, + resolveModuleNameLiterals, + resolveTypeReferenceDirectiveReferences, + resolveLibrary: resolveLibrary2, + resolveSingleModuleNameWithoutWatching, + removeResolutionsFromProjectReferenceRedirects, + removeResolutionsOfFile, + hasChangedAutomaticTypeDirectiveNames: () => hasChangedAutomaticTypeDirectiveNames, + invalidateResolutionOfFile, + invalidateResolutionsOfFailedLookupLocations, + setFilesWithInvalidatedNonRelativeUnresolvedImports, + createHasInvalidatedResolutions, + isFileWithInvalidatedNonRelativeUnresolvedImports, + updateTypeRootsWatch, + closeTypeRootsWatch, + clear: clear2, + onChangesAffectModuleResolution + }; + function clear2() { + clearMap(directoryWatchesOfFailedLookups, closeFileWatcherOf); + clearMap(fileWatchesOfAffectingLocations, closeFileWatcherOf); + isSymlinkCache.clear(); + packageDirWatchers.clear(); + dirPathToSymlinkPackageRefCount.clear(); + nonRelativeExternalModuleResolutions.clear(); + closeTypeRootsWatch(); + resolvedModuleNames.clear(); + resolvedTypeReferenceDirectives.clear(); + resolvedFileToResolution.clear(); + resolutionsWithFailedLookups.clear(); + resolutionsWithOnlyAffectingLocations.clear(); + failedLookupChecks = void 0; + startsWithPathChecks = void 0; + isInDirectoryChecks = void 0; + affectingPathChecks = void 0; + affectingPathChecksForFile = void 0; + allModuleAndTypeResolutionsAreInvalidated = false; + moduleResolutionCache.clear(); + typeReferenceDirectiveResolutionCache.clear(); + moduleResolutionCache.update(resolutionHost.getCompilationSettings()); + typeReferenceDirectiveResolutionCache.update(resolutionHost.getCompilationSettings()); + libraryResolutionCache.clear(); + impliedFormatPackageJsons.clear(); + resolvedLibraries.clear(); + hasChangedAutomaticTypeDirectiveNames = false; + } + function onChangesAffectModuleResolution() { + allModuleAndTypeResolutionsAreInvalidated = true; + moduleResolutionCache.clearAllExceptPackageJsonInfoCache(); + typeReferenceDirectiveResolutionCache.clearAllExceptPackageJsonInfoCache(); + moduleResolutionCache.update(resolutionHost.getCompilationSettings()); + typeReferenceDirectiveResolutionCache.update(resolutionHost.getCompilationSettings()); + } + function startRecordingFilesWithChangedResolutions() { + filesWithChangedSetOfUnresolvedImports = []; + } + function finishRecordingFilesWithChangedResolutions() { + const collected = filesWithChangedSetOfUnresolvedImports; + filesWithChangedSetOfUnresolvedImports = void 0; + return collected; + } + function isFileWithInvalidatedNonRelativeUnresolvedImports(path) { + if (!filesWithInvalidatedNonRelativeUnresolvedImports) { + return false; + } + const value = filesWithInvalidatedNonRelativeUnresolvedImports.get(path); + return !!value && !!value.length; + } + function createHasInvalidatedResolutions(customHasInvalidatedResolutions, customHasInvalidatedLibResolutions) { + invalidateResolutionsOfFailedLookupLocations(); + const collected = filesWithInvalidatedResolutions; + filesWithInvalidatedResolutions = void 0; + return { + hasInvalidatedResolutions: (path) => customHasInvalidatedResolutions(path) || allModuleAndTypeResolutionsAreInvalidated || !!(collected == null ? void 0 : collected.has(path)) || isFileWithInvalidatedNonRelativeUnresolvedImports(path), + hasInvalidatedLibResolutions: (libFileName) => { + var _a; + return customHasInvalidatedLibResolutions(libFileName) || !!((_a = resolvedLibraries == null ? void 0 : resolvedLibraries.get(libFileName)) == null ? void 0 : _a.isInvalidated); + } + }; + } + function startCachingPerDirectoryResolution() { + moduleResolutionCache.isReadonly = void 0; + typeReferenceDirectiveResolutionCache.isReadonly = void 0; + libraryResolutionCache.isReadonly = void 0; + moduleResolutionCache.getPackageJsonInfoCache().isReadonly = void 0; + moduleResolutionCache.clearAllExceptPackageJsonInfoCache(); + typeReferenceDirectiveResolutionCache.clearAllExceptPackageJsonInfoCache(); + libraryResolutionCache.clearAllExceptPackageJsonInfoCache(); + watchFailedLookupLocationOfNonRelativeModuleResolutions(); + isSymlinkCache.clear(); + } + function cleanupLibResolutionWatching(newProgram) { + resolvedLibraries.forEach((resolution, libFileName) => { + var _a; + if (!((_a = newProgram == null ? void 0 : newProgram.resolvedLibReferences) == null ? void 0 : _a.has(libFileName))) { + stopWatchFailedLookupLocationOfResolution( + resolution, + resolutionHost.toPath(getInferredLibraryNameResolveFrom(resolutionHost.getCompilationSettings(), getCurrentDirectory(), libFileName)), + getResolvedModuleFromResolution + ); + resolvedLibraries.delete(libFileName); + } + }); + } + function finishCachingPerDirectoryResolution(newProgram, oldProgram) { + filesWithInvalidatedNonRelativeUnresolvedImports = void 0; + allModuleAndTypeResolutionsAreInvalidated = false; + watchFailedLookupLocationOfNonRelativeModuleResolutions(); + if (newProgram !== oldProgram) { + cleanupLibResolutionWatching(newProgram); + newProgram == null ? void 0 : newProgram.getSourceFiles().forEach((newFile) => { + var _a; + const expected = ((_a = newFile.packageJsonLocations) == null ? void 0 : _a.length) ?? 0; + const existing = impliedFormatPackageJsons.get(newFile.resolvedPath) ?? emptyArray; + for (let i = existing.length; i < expected; i++) { + createFileWatcherOfAffectingLocation( + newFile.packageJsonLocations[i], + /*forResolution*/ + false + ); + } + if (existing.length > expected) { + for (let i = expected; i < existing.length; i++) { + fileWatchesOfAffectingLocations.get(existing[i]).files--; + } + } + if (expected) impliedFormatPackageJsons.set(newFile.resolvedPath, newFile.packageJsonLocations); + else impliedFormatPackageJsons.delete(newFile.resolvedPath); + }); + impliedFormatPackageJsons.forEach((existing, path) => { + const newFile = newProgram == null ? void 0 : newProgram.getSourceFileByPath(path); + if (!newFile || newFile.resolvedPath !== path) { + existing.forEach((location) => fileWatchesOfAffectingLocations.get(location).files--); + impliedFormatPackageJsons.delete(path); + } + }); + } + directoryWatchesOfFailedLookups.forEach(closeDirectoryWatchesOfFailedLookup); + fileWatchesOfAffectingLocations.forEach(closeFileWatcherOfAffectingLocation); + packageDirWatchers.forEach(closePackageDirWatcher); + hasChangedAutomaticTypeDirectiveNames = false; + moduleResolutionCache.isReadonly = true; + typeReferenceDirectiveResolutionCache.isReadonly = true; + libraryResolutionCache.isReadonly = true; + moduleResolutionCache.getPackageJsonInfoCache().isReadonly = true; + isSymlinkCache.clear(); + } + function closePackageDirWatcher(watcher, packageDirPath) { + if (watcher.dirPathToWatcher.size === 0) { + packageDirWatchers.delete(packageDirPath); + } + } + function closeDirectoryWatchesOfFailedLookup(watcher, path) { + if (watcher.refCount === 0) { + directoryWatchesOfFailedLookups.delete(path); + watcher.watcher.close(); + } + } + function closeFileWatcherOfAffectingLocation(watcher, path) { + var _a; + if (watcher.files === 0 && watcher.resolutions === 0 && !((_a = watcher.symlinks) == null ? void 0 : _a.size)) { + fileWatchesOfAffectingLocations.delete(path); + watcher.watcher.close(); + } + } + function resolveNamesWithLocalCache({ + entries, + containingFile, + containingSourceFile, + redirectedReference, + options, + perFileCache, + reusedNames, + loader, + getResolutionWithResolvedFileName, + deferWatchingNonRelativeResolution, + shouldRetryResolution, + logChanges + }) { + var _a; + const path = resolutionHost.toPath(containingFile); + const resolutionsInFile = perFileCache.get(path) || perFileCache.set(path, createModeAwareCache()).get(path); + const resolvedModules = []; + const hasInvalidatedNonRelativeUnresolvedImport = logChanges && isFileWithInvalidatedNonRelativeUnresolvedImports(path); + const program = resolutionHost.getCurrentProgram(); + const oldRedirect = program && ((_a = program.getRedirectFromSourceFile(containingFile)) == null ? void 0 : _a.resolvedRef); + const unmatchedRedirects = oldRedirect ? !redirectedReference || redirectedReference.sourceFile.path !== oldRedirect.sourceFile.path : !!redirectedReference; + const seenNamesInFile = createModeAwareCache(); + for (const entry of entries) { + const name = loader.nameAndMode.getName(entry); + const mode = loader.nameAndMode.getMode(entry, containingSourceFile, (redirectedReference == null ? void 0 : redirectedReference.commandLine.options) || options); + let resolution = resolutionsInFile.get(name, mode); + if (!seenNamesInFile.has(name, mode) && (allModuleAndTypeResolutionsAreInvalidated || unmatchedRedirects || !resolution || resolution.isInvalidated || // If the name is unresolved import that was invalidated, recalculate + hasInvalidatedNonRelativeUnresolvedImport && !isExternalModuleNameRelative(name) && shouldRetryResolution(resolution))) { + const existingResolution = resolution; + resolution = loader.resolve(name, mode); + if (resolutionHost.onDiscoveredSymlink && resolutionIsSymlink(resolution)) { + resolutionHost.onDiscoveredSymlink(); + } + resolutionsInFile.set(name, mode, resolution); + if (resolution !== existingResolution) { + watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, path, getResolutionWithResolvedFileName, deferWatchingNonRelativeResolution); + if (existingResolution) { + stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolutionWithResolvedFileName); + } + } + if (logChanges && filesWithChangedSetOfUnresolvedImports && !resolutionIsEqualTo(existingResolution, resolution)) { + filesWithChangedSetOfUnresolvedImports.push(path); + logChanges = false; + } + } else { + const host = getModuleResolutionHost(resolutionHost); + if (isTraceEnabled(options, host) && !seenNamesInFile.has(name, mode)) { + const resolved = getResolutionWithResolvedFileName(resolution); + trace( + host, + perFileCache === resolvedModuleNames ? (resolved == null ? void 0 : resolved.resolvedFileName) ? resolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved : (resolved == null ? void 0 : resolved.resolvedFileName) ? resolved.packageId ? Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : Diagnostics.Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved, + name, + containingFile, + resolved == null ? void 0 : resolved.resolvedFileName, + (resolved == null ? void 0 : resolved.packageId) && packageIdToString(resolved.packageId) + ); + } + } + Debug.assert(resolution !== void 0 && !resolution.isInvalidated); + seenNamesInFile.set(name, mode, true); + resolvedModules.push(resolution); + } + reusedNames == null ? void 0 : reusedNames.forEach( + (entry) => seenNamesInFile.set( + loader.nameAndMode.getName(entry), + loader.nameAndMode.getMode(entry, containingSourceFile, (redirectedReference == null ? void 0 : redirectedReference.commandLine.options) || options), + true + ) + ); + if (resolutionsInFile.size() !== seenNamesInFile.size()) { + resolutionsInFile.forEach((resolution, name, mode) => { + if (!seenNamesInFile.has(name, mode)) { + stopWatchFailedLookupLocationOfResolution(resolution, path, getResolutionWithResolvedFileName); + resolutionsInFile.delete(name, mode); + } + }); + } + return resolvedModules; + function resolutionIsEqualTo(oldResolution, newResolution) { + if (oldResolution === newResolution) { + return true; + } + if (!oldResolution || !newResolution) { + return false; + } + const oldResult = getResolutionWithResolvedFileName(oldResolution); + const newResult = getResolutionWithResolvedFileName(newResolution); + if (oldResult === newResult) { + return true; + } + if (!oldResult || !newResult) { + return false; + } + return oldResult.resolvedFileName === newResult.resolvedFileName; + } + } + function resolveTypeReferenceDirectiveReferences(typeDirectiveReferences, containingFile, redirectedReference, options, containingSourceFile, reusedNames) { + return resolveNamesWithLocalCache({ + entries: typeDirectiveReferences, + containingFile, + containingSourceFile, + redirectedReference, + options, + reusedNames, + perFileCache: resolvedTypeReferenceDirectives, + loader: createTypeReferenceResolutionLoader( + containingFile, + redirectedReference, + options, + getModuleResolutionHost(resolutionHost), + typeReferenceDirectiveResolutionCache + ), + getResolutionWithResolvedFileName: getResolvedTypeReferenceDirectiveFromResolution, + shouldRetryResolution: (resolution) => resolution.resolvedTypeReferenceDirective === void 0, + deferWatchingNonRelativeResolution: false + }); + } + function resolveModuleNameLiterals(moduleLiterals, containingFile, redirectedReference, options, containingSourceFile, reusedNames) { + return resolveNamesWithLocalCache({ + entries: moduleLiterals, + containingFile, + containingSourceFile, + redirectedReference, + options, + reusedNames, + perFileCache: resolvedModuleNames, + loader: createModuleResolutionLoaderUsingGlobalCache( + containingFile, + redirectedReference, + options, + resolutionHost, + moduleResolutionCache + ), + getResolutionWithResolvedFileName: getResolvedModuleFromResolution, + shouldRetryResolution: (resolution) => !resolution.resolvedModule || !resolutionExtensionIsTSOrJson(resolution.resolvedModule.extension), + logChanges: logChangesWhenResolvingModule, + deferWatchingNonRelativeResolution: true + // Defer non relative resolution watch because we could be using ambient modules + }); + } + function resolveLibrary2(libraryName, resolveFrom, options, libFileName) { + const host = getModuleResolutionHost(resolutionHost); + let resolution = resolvedLibraries == null ? void 0 : resolvedLibraries.get(libFileName); + if (!resolution || resolution.isInvalidated) { + const existingResolution = resolution; + resolution = resolveLibrary(libraryName, resolveFrom, options, host, libraryResolutionCache); + const path = resolutionHost.toPath(resolveFrom); + watchFailedLookupLocationsOfExternalModuleResolutions( + libraryName, + resolution, + path, + getResolvedModuleFromResolution, + /*deferWatchingNonRelativeResolution*/ + false + ); + resolvedLibraries.set(libFileName, resolution); + if (existingResolution) { + stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolvedModuleFromResolution); + } + } else { + if (isTraceEnabled(options, host)) { + const resolved = getResolvedModuleFromResolution(resolution); + trace( + host, + (resolved == null ? void 0 : resolved.resolvedFileName) ? resolved.packageId ? Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package_ID_3 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2 : Diagnostics.Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved, + libraryName, + resolveFrom, + resolved == null ? void 0 : resolved.resolvedFileName, + (resolved == null ? void 0 : resolved.packageId) && packageIdToString(resolved.packageId) + ); + } + } + return resolution; + } + function resolveSingleModuleNameWithoutWatching(moduleName, containingFile) { + var _a, _b; + const path = resolutionHost.toPath(containingFile); + const resolutionsInFile = resolvedModuleNames.get(path); + const resolution = resolutionsInFile == null ? void 0 : resolutionsInFile.get( + moduleName, + /*mode*/ + void 0 + ); + if (resolution && !resolution.isInvalidated) return resolution; + const data = (_a = resolutionHost.beforeResolveSingleModuleNameWithoutWatching) == null ? void 0 : _a.call(resolutionHost, moduleResolutionCache); + const host = getModuleResolutionHost(resolutionHost); + const result = resolveModuleName( + moduleName, + containingFile, + resolutionHost.getCompilationSettings(), + host, + moduleResolutionCache + ); + (_b = resolutionHost.afterResolveSingleModuleNameWithoutWatching) == null ? void 0 : _b.call(resolutionHost, moduleResolutionCache, moduleName, containingFile, result, data); + return result; + } + function isNodeModulesAtTypesDirectory(dirPath) { + return endsWith(dirPath, "/node_modules/@types"); + } + function watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, filePath, getResolutionWithResolvedFileName, deferWatchingNonRelativeResolution) { + (resolution.files ?? (resolution.files = /* @__PURE__ */ new Set())).add(filePath); + if (resolution.files.size !== 1) return; + if (!deferWatchingNonRelativeResolution || isExternalModuleNameRelative(name)) { + watchFailedLookupLocationOfResolution(resolution); + } else { + nonRelativeExternalModuleResolutions.add(resolution); + } + const resolved = getResolutionWithResolvedFileName(resolution); + if (resolved && resolved.resolvedFileName) { + const key = resolutionHost.toPath(resolved.resolvedFileName); + let resolutions = resolvedFileToResolution.get(key); + if (!resolutions) resolvedFileToResolution.set(key, resolutions = /* @__PURE__ */ new Set()); + resolutions.add(resolution); + } + } + function watchFailedLookupLocation(failedLookupLocation, setAtRoot) { + const failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); + const toWatch = getDirectoryToWatchFailedLookupLocation( + failedLookupLocation, + failedLookupLocationPath, + rootDir, + rootPath, + rootPathComponents, + isRootWatchable, + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch + ); + if (toWatch) { + const { dir, dirPath, nonRecursive, packageDir, packageDirPath } = toWatch; + if (dirPath === rootPath) { + Debug.assert(nonRecursive); + Debug.assert(!packageDir); + setAtRoot = true; + } else { + setDirectoryWatcher(dir, dirPath, packageDir, packageDirPath, nonRecursive); + } + } + return setAtRoot; + } + function watchFailedLookupLocationOfResolution(resolution) { + var _a; + Debug.assert(!!((_a = resolution.files) == null ? void 0 : _a.size)); + const { failedLookupLocations, affectingLocations, alternateResult } = resolution; + if (!(failedLookupLocations == null ? void 0 : failedLookupLocations.length) && !(affectingLocations == null ? void 0 : affectingLocations.length) && !alternateResult) return; + if ((failedLookupLocations == null ? void 0 : failedLookupLocations.length) || alternateResult) resolutionsWithFailedLookups.add(resolution); + let setAtRoot = false; + if (failedLookupLocations) { + for (const failedLookupLocation of failedLookupLocations) { + setAtRoot = watchFailedLookupLocation(failedLookupLocation, setAtRoot); + } + } + if (alternateResult) setAtRoot = watchFailedLookupLocation(alternateResult, setAtRoot); + if (setAtRoot) { + setDirectoryWatcher( + rootDir, + rootPath, + /*packageDir*/ + void 0, + /*packageDirPath*/ + void 0, + /*nonRecursive*/ + true + ); + } + watchAffectingLocationsOfResolution(resolution, !(failedLookupLocations == null ? void 0 : failedLookupLocations.length) && !alternateResult); + } + function watchAffectingLocationsOfResolution(resolution, addToResolutionsWithOnlyAffectingLocations) { + var _a; + Debug.assert(!!((_a = resolution.files) == null ? void 0 : _a.size)); + const { affectingLocations } = resolution; + if (!(affectingLocations == null ? void 0 : affectingLocations.length)) return; + if (addToResolutionsWithOnlyAffectingLocations) resolutionsWithOnlyAffectingLocations.add(resolution); + for (const affectingLocation of affectingLocations) { + createFileWatcherOfAffectingLocation( + affectingLocation, + /*forResolution*/ + true + ); + } + } + function createFileWatcherOfAffectingLocation(affectingLocation, forResolution) { + const fileWatcher = fileWatchesOfAffectingLocations.get(affectingLocation); + if (fileWatcher) { + if (forResolution) fileWatcher.resolutions++; + else fileWatcher.files++; + return; + } + let locationToWatch = affectingLocation; + let isSymlink = false; + let symlinkWatcher; + if (resolutionHost.realpath) { + locationToWatch = resolutionHost.realpath(affectingLocation); + if (affectingLocation !== locationToWatch) { + isSymlink = true; + symlinkWatcher = fileWatchesOfAffectingLocations.get(locationToWatch); + } + } + const resolutions = forResolution ? 1 : 0; + const files = forResolution ? 0 : 1; + if (!isSymlink || !symlinkWatcher) { + const watcher = { + watcher: canWatchAffectingLocation(resolutionHost.toPath(locationToWatch)) ? resolutionHost.watchAffectingFileLocation(locationToWatch, (fileName, eventKind) => { + cachedDirectoryStructureHost == null ? void 0 : cachedDirectoryStructureHost.addOrDeleteFile(fileName, resolutionHost.toPath(locationToWatch), eventKind); + invalidateAffectingFileWatcher(locationToWatch, moduleResolutionCache.getPackageJsonInfoCache().getInternalMap()); + resolutionHost.scheduleInvalidateResolutionsOfFailedLookupLocations(); + }) : noopFileWatcher, + resolutions: isSymlink ? 0 : resolutions, + files: isSymlink ? 0 : files, + symlinks: void 0 + }; + fileWatchesOfAffectingLocations.set(locationToWatch, watcher); + if (isSymlink) symlinkWatcher = watcher; + } + if (isSymlink) { + Debug.assert(!!symlinkWatcher); + const watcher = { + watcher: { + close: () => { + var _a; + const symlinkWatcher2 = fileWatchesOfAffectingLocations.get(locationToWatch); + if (((_a = symlinkWatcher2 == null ? void 0 : symlinkWatcher2.symlinks) == null ? void 0 : _a.delete(affectingLocation)) && !symlinkWatcher2.symlinks.size && !symlinkWatcher2.resolutions && !symlinkWatcher2.files) { + fileWatchesOfAffectingLocations.delete(locationToWatch); + symlinkWatcher2.watcher.close(); + } + } + }, + resolutions, + files, + symlinks: void 0 + }; + fileWatchesOfAffectingLocations.set(affectingLocation, watcher); + (symlinkWatcher.symlinks ?? (symlinkWatcher.symlinks = /* @__PURE__ */ new Set())).add(affectingLocation); + } + } + function invalidateAffectingFileWatcher(path, packageJsonMap) { + var _a; + const watcher = fileWatchesOfAffectingLocations.get(path); + if (watcher == null ? void 0 : watcher.resolutions) (affectingPathChecks ?? (affectingPathChecks = /* @__PURE__ */ new Set())).add(path); + if (watcher == null ? void 0 : watcher.files) (affectingPathChecksForFile ?? (affectingPathChecksForFile = /* @__PURE__ */ new Set())).add(path); + (_a = watcher == null ? void 0 : watcher.symlinks) == null ? void 0 : _a.forEach((path2) => invalidateAffectingFileWatcher(path2, packageJsonMap)); + packageJsonMap == null ? void 0 : packageJsonMap.delete(resolutionHost.toPath(path)); + } + function watchFailedLookupLocationOfNonRelativeModuleResolutions() { + nonRelativeExternalModuleResolutions.forEach(watchFailedLookupLocationOfResolution); + nonRelativeExternalModuleResolutions.clear(); + } + function createDirectoryWatcherForPackageDir(dir, dirPath, packageDir, packageDirPath, nonRecursive) { + Debug.assert(!nonRecursive); + let isSymlink = isSymlinkCache.get(packageDirPath); + let packageDirWatcher = packageDirWatchers.get(packageDirPath); + if (isSymlink === void 0) { + const realPath2 = resolutionHost.realpath(packageDir); + isSymlink = realPath2 !== packageDir && resolutionHost.toPath(realPath2) !== packageDirPath; + isSymlinkCache.set(packageDirPath, isSymlink); + if (!packageDirWatcher) { + packageDirWatchers.set( + packageDirPath, + packageDirWatcher = { + dirPathToWatcher: /* @__PURE__ */ new Map(), + isSymlink + } + ); + } else if (packageDirWatcher.isSymlink !== isSymlink) { + packageDirWatcher.dirPathToWatcher.forEach((watcher) => { + removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath); + watcher.watcher = createDirPathToWatcher(); + }); + packageDirWatcher.isSymlink = isSymlink; + } + } else { + Debug.assertIsDefined(packageDirWatcher); + Debug.assert(isSymlink === packageDirWatcher.isSymlink); + } + const forDirPath = packageDirWatcher.dirPathToWatcher.get(dirPath); + if (forDirPath) { + forDirPath.refCount++; + } else { + packageDirWatcher.dirPathToWatcher.set(dirPath, { + watcher: createDirPathToWatcher(), + refCount: 1 + }); + if (isSymlink) dirPathToSymlinkPackageRefCount.set(dirPath, (dirPathToSymlinkPackageRefCount.get(dirPath) ?? 0) + 1); + } + function createDirPathToWatcher() { + return isSymlink ? createOrAddRefToDirectoryWatchOfFailedLookups(packageDir, packageDirPath, nonRecursive) : createOrAddRefToDirectoryWatchOfFailedLookups(dir, dirPath, nonRecursive); + } + } + function setDirectoryWatcher(dir, dirPath, packageDir, packageDirPath, nonRecursive) { + if (!packageDirPath || !resolutionHost.realpath) { + createOrAddRefToDirectoryWatchOfFailedLookups(dir, dirPath, nonRecursive); + } else { + createDirectoryWatcherForPackageDir(dir, dirPath, packageDir, packageDirPath, nonRecursive); + } + } + function createOrAddRefToDirectoryWatchOfFailedLookups(dir, dirPath, nonRecursive) { + let dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); + if (dirWatcher) { + Debug.assert(!!nonRecursive === !!dirWatcher.nonRecursive); + dirWatcher.refCount++; + } else { + directoryWatchesOfFailedLookups.set(dirPath, dirWatcher = { watcher: createDirectoryWatcher(dir, dirPath, nonRecursive), refCount: 1, nonRecursive }); + } + return dirWatcher; + } + function stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot) { + const failedLookupLocationPath = resolutionHost.toPath(failedLookupLocation); + const toWatch = getDirectoryToWatchFailedLookupLocation( + failedLookupLocation, + failedLookupLocationPath, + rootDir, + rootPath, + rootPathComponents, + isRootWatchable, + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch + ); + if (toWatch) { + const { dirPath, packageDirPath } = toWatch; + if (dirPath === rootPath) { + removeAtRoot = true; + } else if (packageDirPath && resolutionHost.realpath) { + const packageDirWatcher = packageDirWatchers.get(packageDirPath); + const forDirPath = packageDirWatcher.dirPathToWatcher.get(dirPath); + forDirPath.refCount--; + if (forDirPath.refCount === 0) { + removeDirectoryWatcher(packageDirWatcher.isSymlink ? packageDirPath : dirPath); + packageDirWatcher.dirPathToWatcher.delete(dirPath); + if (packageDirWatcher.isSymlink) { + const refCount = dirPathToSymlinkPackageRefCount.get(dirPath) - 1; + if (refCount === 0) { + dirPathToSymlinkPackageRefCount.delete(dirPath); + } else { + dirPathToSymlinkPackageRefCount.set(dirPath, refCount); + } + } + } + } else { + removeDirectoryWatcher(dirPath); + } + } + return removeAtRoot; + } + function stopWatchFailedLookupLocationOfResolution(resolution, filePath, getResolutionWithResolvedFileName) { + Debug.checkDefined(resolution.files).delete(filePath); + if (resolution.files.size) return; + resolution.files = void 0; + const resolved = getResolutionWithResolvedFileName(resolution); + if (resolved && resolved.resolvedFileName) { + const key = resolutionHost.toPath(resolved.resolvedFileName); + const resolutions = resolvedFileToResolution.get(key); + if ((resolutions == null ? void 0 : resolutions.delete(resolution)) && !resolutions.size) resolvedFileToResolution.delete(key); + } + const { failedLookupLocations, affectingLocations, alternateResult } = resolution; + if (resolutionsWithFailedLookups.delete(resolution)) { + let removeAtRoot = false; + if (failedLookupLocations) { + for (const failedLookupLocation of failedLookupLocations) { + removeAtRoot = stopWatchFailedLookupLocation(failedLookupLocation, removeAtRoot); + } + } + if (alternateResult) removeAtRoot = stopWatchFailedLookupLocation(alternateResult, removeAtRoot); + if (removeAtRoot) removeDirectoryWatcher(rootPath); + } else if (affectingLocations == null ? void 0 : affectingLocations.length) { + resolutionsWithOnlyAffectingLocations.delete(resolution); + } + if (affectingLocations) { + for (const affectingLocation of affectingLocations) { + const watcher = fileWatchesOfAffectingLocations.get(affectingLocation); + watcher.resolutions--; + } + } + } + function removeDirectoryWatcher(dirPath) { + const dirWatcher = directoryWatchesOfFailedLookups.get(dirPath); + dirWatcher.refCount--; + } + function createDirectoryWatcher(directory, dirPath, nonRecursive) { + return resolutionHost.watchDirectoryOfFailedLookupLocation(directory, (fileOrDirectory) => { + const fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory); + if (cachedDirectoryStructureHost) { + cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); + } + scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath); + }, nonRecursive ? 0 /* None */ : 1 /* Recursive */); + } + function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName) { + const resolutions = cache.get(filePath); + if (resolutions) { + resolutions.forEach( + (resolution) => stopWatchFailedLookupLocationOfResolution( + resolution, + filePath, + getResolutionWithResolvedFileName + ) + ); + cache.delete(filePath); + } + } + function removeResolutionsFromProjectReferenceRedirects(filePath) { + if (!fileExtensionIs(filePath, ".json" /* Json */)) return; + const program = resolutionHost.getCurrentProgram(); + if (!program) return; + const resolvedProjectReference = program.getResolvedProjectReferenceByPath(filePath); + if (!resolvedProjectReference) return; + resolvedProjectReference.commandLine.fileNames.forEach((f) => removeResolutionsOfFile(resolutionHost.toPath(f))); + } + function removeResolutionsOfFile(filePath) { + removeResolutionsOfFileFromCache(resolvedModuleNames, filePath, getResolvedModuleFromResolution); + removeResolutionsOfFileFromCache(resolvedTypeReferenceDirectives, filePath, getResolvedTypeReferenceDirectiveFromResolution); + } + function invalidateResolutions(resolutions, canInvalidate) { + if (!resolutions) return false; + let invalidated = false; + resolutions.forEach((resolution) => { + if (resolution.isInvalidated || !canInvalidate(resolution)) return; + resolution.isInvalidated = invalidated = true; + for (const containingFilePath of Debug.checkDefined(resolution.files)) { + (filesWithInvalidatedResolutions ?? (filesWithInvalidatedResolutions = /* @__PURE__ */ new Set())).add(containingFilePath); + hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames || endsWith(containingFilePath, inferredTypesContainingFile); + } + }); + return invalidated; + } + function invalidateResolutionOfFile(filePath) { + removeResolutionsOfFile(filePath); + const prevHasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames; + if (invalidateResolutions(resolvedFileToResolution.get(filePath), returnTrue) && hasChangedAutomaticTypeDirectiveNames && !prevHasChangedAutomaticTypeDirectiveNames) { + resolutionHost.onChangedAutomaticTypeDirectiveNames(); + } + } + function setFilesWithInvalidatedNonRelativeUnresolvedImports(filesMap) { + Debug.assert(filesWithInvalidatedNonRelativeUnresolvedImports === filesMap || filesWithInvalidatedNonRelativeUnresolvedImports === void 0); + filesWithInvalidatedNonRelativeUnresolvedImports = filesMap; + } + function scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, isCreatingWatchedDirectory) { + if (isCreatingWatchedDirectory) { + (isInDirectoryChecks || (isInDirectoryChecks = /* @__PURE__ */ new Set())).add(fileOrDirectoryPath); + } else { + const updatedPath = removeIgnoredPath(fileOrDirectoryPath); + if (!updatedPath) return false; + fileOrDirectoryPath = updatedPath; + if (resolutionHost.fileIsOpen(fileOrDirectoryPath)) { + return false; + } + const dirOfFileOrDirectory = getDirectoryPath(fileOrDirectoryPath); + if (isNodeModulesAtTypesDirectory(fileOrDirectoryPath) || isNodeModulesDirectory(fileOrDirectoryPath) || isNodeModulesAtTypesDirectory(dirOfFileOrDirectory) || isNodeModulesDirectory(dirOfFileOrDirectory)) { + (failedLookupChecks || (failedLookupChecks = /* @__PURE__ */ new Set())).add(fileOrDirectoryPath); + (startsWithPathChecks || (startsWithPathChecks = /* @__PURE__ */ new Set())).add(fileOrDirectoryPath); + } else { + if (isEmittedFileOfProgram(resolutionHost.getCurrentProgram(), fileOrDirectoryPath)) { + return false; + } + if (fileExtensionIs(fileOrDirectoryPath, ".map")) { + return false; + } + (failedLookupChecks || (failedLookupChecks = /* @__PURE__ */ new Set())).add(fileOrDirectoryPath); + (startsWithPathChecks || (startsWithPathChecks = /* @__PURE__ */ new Set())).add(fileOrDirectoryPath); + const packagePath = parseNodeModuleFromPath( + fileOrDirectoryPath, + /*isFolder*/ + true + ); + if (packagePath) (startsWithPathChecks || (startsWithPathChecks = /* @__PURE__ */ new Set())).add(packagePath); + } + } + resolutionHost.scheduleInvalidateResolutionsOfFailedLookupLocations(); + } + function invalidatePackageJsonMap() { + const packageJsonMap = moduleResolutionCache.getPackageJsonInfoCache().getInternalMap(); + if (packageJsonMap && (failedLookupChecks || startsWithPathChecks || isInDirectoryChecks)) { + packageJsonMap.forEach((_value, path) => isInvalidatedFailedLookup(path) ? packageJsonMap.delete(path) : void 0); + } + } + function invalidateResolutionsOfFailedLookupLocations() { + var _a; + if (allModuleAndTypeResolutionsAreInvalidated) { + affectingPathChecksForFile = void 0; + invalidatePackageJsonMap(); + if (failedLookupChecks || startsWithPathChecks || isInDirectoryChecks || affectingPathChecks) { + invalidateResolutions(resolvedLibraries, canInvalidateFailedLookupResolution); + } + failedLookupChecks = void 0; + startsWithPathChecks = void 0; + isInDirectoryChecks = void 0; + affectingPathChecks = void 0; + return true; + } + let invalidated = false; + if (affectingPathChecksForFile) { + (_a = resolutionHost.getCurrentProgram()) == null ? void 0 : _a.getSourceFiles().forEach((f) => { + if (some(f.packageJsonLocations, (location) => affectingPathChecksForFile.has(location))) { + (filesWithInvalidatedResolutions ?? (filesWithInvalidatedResolutions = /* @__PURE__ */ new Set())).add(f.path); + invalidated = true; + } + }); + affectingPathChecksForFile = void 0; + } + if (!failedLookupChecks && !startsWithPathChecks && !isInDirectoryChecks && !affectingPathChecks) { + return invalidated; + } + invalidated = invalidateResolutions(resolutionsWithFailedLookups, canInvalidateFailedLookupResolution) || invalidated; + invalidatePackageJsonMap(); + failedLookupChecks = void 0; + startsWithPathChecks = void 0; + isInDirectoryChecks = void 0; + invalidated = invalidateResolutions(resolutionsWithOnlyAffectingLocations, canInvalidatedFailedLookupResolutionWithAffectingLocation) || invalidated; + affectingPathChecks = void 0; + return invalidated; + } + function canInvalidateFailedLookupResolution(resolution) { + var _a; + if (canInvalidatedFailedLookupResolutionWithAffectingLocation(resolution)) return true; + if (!failedLookupChecks && !startsWithPathChecks && !isInDirectoryChecks) return false; + return ((_a = resolution.failedLookupLocations) == null ? void 0 : _a.some((location) => isInvalidatedFailedLookup(resolutionHost.toPath(location)))) || !!resolution.alternateResult && isInvalidatedFailedLookup(resolutionHost.toPath(resolution.alternateResult)); + } + function isInvalidatedFailedLookup(locationPath) { + return (failedLookupChecks == null ? void 0 : failedLookupChecks.has(locationPath)) || firstDefinedIterator((startsWithPathChecks == null ? void 0 : startsWithPathChecks.keys()) || [], (fileOrDirectoryPath) => startsWith(locationPath, fileOrDirectoryPath) ? true : void 0) || firstDefinedIterator((isInDirectoryChecks == null ? void 0 : isInDirectoryChecks.keys()) || [], (dirPath) => locationPath.length > dirPath.length && startsWith(locationPath, dirPath) && (isDiskPathRoot(dirPath) || locationPath[dirPath.length] === directorySeparator) ? true : void 0); + } + function canInvalidatedFailedLookupResolutionWithAffectingLocation(resolution) { + var _a; + return !!affectingPathChecks && ((_a = resolution.affectingLocations) == null ? void 0 : _a.some((location) => affectingPathChecks.has(location))); + } + function closeTypeRootsWatch() { + clearMap(typeRootsWatches, closeFileWatcher); + } + function createTypeRootsWatch(typeRoot) { + return canWatchTypeRootPath(typeRoot) ? resolutionHost.watchTypeRootsDirectory(typeRoot, (fileOrDirectory) => { + const fileOrDirectoryPath = resolutionHost.toPath(fileOrDirectory); + if (cachedDirectoryStructureHost) { + cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); + } + hasChangedAutomaticTypeDirectiveNames = true; + resolutionHost.onChangedAutomaticTypeDirectiveNames(); + const dirPath = getDirectoryToWatchFailedLookupLocationFromTypeRoot( + typeRoot, + resolutionHost.toPath(typeRoot), + rootPath, + rootPathComponents, + isRootWatchable, + getCurrentDirectory, + resolutionHost.preferNonRecursiveWatch, + (dirPath2) => directoryWatchesOfFailedLookups.has(dirPath2) || dirPathToSymlinkPackageRefCount.has(dirPath2) + ); + if (dirPath) { + scheduleInvalidateResolutionOfFailedLookupLocation(fileOrDirectoryPath, dirPath === fileOrDirectoryPath); + } + }, 1 /* Recursive */) : noopFileWatcher; + } + function updateTypeRootsWatch() { + const options = resolutionHost.getCompilationSettings(); + if (options.types) { + closeTypeRootsWatch(); + return; + } + const typeRoots = getEffectiveTypeRoots(options, { getCurrentDirectory }); + if (typeRoots) { + mutateMap( + typeRootsWatches, + new Set(typeRoots), + { + createNewValue: createTypeRootsWatch, + onDeleteValue: closeFileWatcher + } + ); + } else { + closeTypeRootsWatch(); + } + } + function canWatchTypeRootPath(typeRoot) { + if (resolutionHost.getCompilationSettings().typeRoots) return true; + return canWatchAtTypes(resolutionHost.toPath(typeRoot)); + } +} +function resolutionIsSymlink(resolution) { + var _a, _b; + return !!(((_a = resolution.resolvedModule) == null ? void 0 : _a.originalPath) || ((_b = resolution.resolvedTypeReferenceDirective) == null ? void 0 : _b.originalPath)); +} + +// src/compiler/watch.ts +var sysFormatDiagnosticsHost = sys ? { + getCurrentDirectory: () => sys.getCurrentDirectory(), + getNewLine: () => sys.newLine, + getCanonicalFileName: createGetCanonicalFileName(sys.useCaseSensitiveFileNames) +} : void 0; +function createDiagnosticReporter(system, pretty) { + const host = system === sys && sysFormatDiagnosticsHost ? sysFormatDiagnosticsHost : { + getCurrentDirectory: () => system.getCurrentDirectory(), + getNewLine: () => system.newLine, + getCanonicalFileName: createGetCanonicalFileName(system.useCaseSensitiveFileNames) + }; + if (!pretty) { + return (diagnostic) => system.write(formatDiagnostic(diagnostic, host)); + } + const diagnostics = new Array(1); + return (diagnostic) => { + diagnostics[0] = diagnostic; + system.write(formatDiagnosticsWithColorAndContext(diagnostics, host) + host.getNewLine()); + diagnostics[0] = void 0; + }; +} +function clearScreenIfNotWatchingForFileChanges(system, diagnostic, options) { + if (system.clearScreen && !options.preserveWatchOutput && !options.extendedDiagnostics && !options.diagnostics && contains(screenStartingMessageCodes, diagnostic.code)) { + system.clearScreen(); + return true; + } + return false; +} +var screenStartingMessageCodes = [ + Diagnostics.Starting_compilation_in_watch_mode.code, + Diagnostics.File_change_detected_Starting_incremental_compilation.code +]; +function getPlainDiagnosticFollowingNewLines(diagnostic, newLine) { + return contains(screenStartingMessageCodes, diagnostic.code) ? newLine + newLine : newLine; +} +function getLocaleTimeString(system) { + return !system.now ? (/* @__PURE__ */ new Date()).toLocaleTimeString() : ( + // On some systems / builds of Node, there's a non-breaking space between the time and AM/PM. + // This branch is solely for testing, so just switch it to a normal space for baseline stability. + // See: + // - https://github.com/nodejs/node/issues/45171 + // - https://github.com/nodejs/node/issues/45753 + system.now().toLocaleTimeString("en-US", { timeZone: "UTC" }).replace("\u202F", " ") + ); +} +function createWatchStatusReporter(system, pretty) { + return pretty ? (diagnostic, newLine, options) => { + clearScreenIfNotWatchingForFileChanges(system, diagnostic, options); + let output = `[${formatColorAndReset(getLocaleTimeString(system), "\x1B[90m" /* Grey */)}] `; + output += `${flattenDiagnosticMessageText(diagnostic.messageText, system.newLine)}${newLine + newLine}`; + system.write(output); + } : (diagnostic, newLine, options) => { + let output = ""; + if (!clearScreenIfNotWatchingForFileChanges(system, diagnostic, options)) { + output += newLine; + } + output += `${getLocaleTimeString(system)} - `; + output += `${flattenDiagnosticMessageText(diagnostic.messageText, system.newLine)}${getPlainDiagnosticFollowingNewLines(diagnostic, newLine)}`; + system.write(output); + }; +} +function parseConfigFileWithSystem(configFileName, optionsToExtend, extendedConfigCache, watchOptionsToExtend, system, reportDiagnostic) { + const host = system; + host.onUnRecoverableConfigFileDiagnostic = (diagnostic) => reportUnrecoverableDiagnostic(system, reportDiagnostic, diagnostic); + const result = getParsedCommandLineOfConfigFile(configFileName, optionsToExtend, host, extendedConfigCache, watchOptionsToExtend); + host.onUnRecoverableConfigFileDiagnostic = void 0; + return result; +} +function getErrorCountForSummary(diagnostics) { + return countWhere(diagnostics, (diagnostic) => diagnostic.category === 1 /* Error */); +} +function getFilesInErrorForSummary(diagnostics) { + const filesInError = filter(diagnostics, (diagnostic) => diagnostic.category === 1 /* Error */).map( + (errorDiagnostic) => { + if (errorDiagnostic.file === void 0) return; + return `${errorDiagnostic.file.fileName}`; + } + ); + return filesInError.map((fileName) => { + if (fileName === void 0) { + return void 0; + } + const diagnosticForFileName = find(diagnostics, (diagnostic) => diagnostic.file !== void 0 && diagnostic.file.fileName === fileName); + if (diagnosticForFileName !== void 0) { + const { line } = getLineAndCharacterOfPosition(diagnosticForFileName.file, diagnosticForFileName.start); + return { + fileName, + line: line + 1 + }; + } + }); +} +function getWatchErrorSummaryDiagnosticMessage(errorCount) { + return errorCount === 1 ? Diagnostics.Found_1_error_Watching_for_file_changes : Diagnostics.Found_0_errors_Watching_for_file_changes; +} +function prettyPathForFileError(error2, cwd) { + const line = formatColorAndReset(":" + error2.line, "\x1B[90m" /* Grey */); + if (pathIsAbsolute(error2.fileName) && pathIsAbsolute(cwd)) { + return getRelativePathFromDirectory( + cwd, + error2.fileName, + /*ignoreCase*/ + false + ) + line; + } + return error2.fileName + line; +} +function getErrorSummaryText(errorCount, filesInError, newLine, host) { + if (errorCount === 0) return ""; + const nonNilFiles = filesInError.filter((fileInError) => fileInError !== void 0); + const distinctFileNamesWithLines = nonNilFiles.map((fileInError) => `${fileInError.fileName}:${fileInError.line}`).filter((value, index, self) => self.indexOf(value) === index); + const firstFileReference = nonNilFiles[0] && prettyPathForFileError(nonNilFiles[0], host.getCurrentDirectory()); + let messageAndArgs; + if (errorCount === 1) { + messageAndArgs = filesInError[0] !== void 0 ? [Diagnostics.Found_1_error_in_0, firstFileReference] : [Diagnostics.Found_1_error]; + } else { + messageAndArgs = distinctFileNamesWithLines.length === 0 ? [Diagnostics.Found_0_errors, errorCount] : distinctFileNamesWithLines.length === 1 ? [Diagnostics.Found_0_errors_in_the_same_file_starting_at_Colon_1, errorCount, firstFileReference] : [Diagnostics.Found_0_errors_in_1_files, errorCount, distinctFileNamesWithLines.length]; + } + const d = createCompilerDiagnostic(...messageAndArgs); + const suffix = distinctFileNamesWithLines.length > 1 ? createTabularErrorsDisplay(nonNilFiles, host) : ""; + return `${newLine}${flattenDiagnosticMessageText(d.messageText, newLine)}${newLine}${newLine}${suffix}`; +} +function createTabularErrorsDisplay(filesInError, host) { + const distinctFiles = filesInError.filter((value, index, self) => index === self.findIndex((file) => (file == null ? void 0 : file.fileName) === (value == null ? void 0 : value.fileName))); + if (distinctFiles.length === 0) return ""; + const numberLength = (num) => Math.log(num) * Math.LOG10E + 1; + const fileToErrorCount = distinctFiles.map((file) => [file, countWhere(filesInError, (fileInError) => fileInError.fileName === file.fileName)]); + const maxErrors = maxBy(fileToErrorCount, 0, (value) => value[1]); + const headerRow = Diagnostics.Errors_Files.message; + const leftColumnHeadingLength = headerRow.split(" ")[0].length; + const leftPaddingGoal = Math.max(leftColumnHeadingLength, numberLength(maxErrors)); + const headerPadding = Math.max(numberLength(maxErrors) - leftColumnHeadingLength, 0); + let tabularData = ""; + tabularData += " ".repeat(headerPadding) + headerRow + "\n"; + fileToErrorCount.forEach((row) => { + const [file, errorCount] = row; + const errorCountDigitsLength = Math.log(errorCount) * Math.LOG10E + 1 | 0; + const leftPadding = errorCountDigitsLength < leftPaddingGoal ? " ".repeat(leftPaddingGoal - errorCountDigitsLength) : ""; + const fileRef = prettyPathForFileError(file, host.getCurrentDirectory()); + tabularData += `${leftPadding}${errorCount} ${fileRef} +`; + }); + return tabularData; +} +function isBuilderProgram(program) { + return !!program.state; +} +function listFiles(program, write) { + const options = program.getCompilerOptions(); + if (options.explainFiles) { + explainFiles(isBuilderProgram(program) ? program.getProgram() : program, write); + } else if (options.listFiles || options.listFilesOnly) { + forEach(program.getSourceFiles(), (file) => { + write(file.fileName); + }); + } +} +function explainFiles(program, write) { + var _a, _b; + const reasons = program.getFileIncludeReasons(); + const relativeFileName = (fileName) => convertToRelativePath(fileName, program.getCurrentDirectory(), program.getCanonicalFileName); + for (const file of program.getSourceFiles()) { + write(`${toFileName(file, relativeFileName)}`); + (_a = reasons.get(file.path)) == null ? void 0 : _a.forEach((reason) => write(` ${fileIncludeReasonToDiagnostics(program, reason, relativeFileName).messageText}`)); + (_b = explainIfFileIsRedirectAndImpliedFormat(file, program.getCompilerOptionsForFile(file), relativeFileName)) == null ? void 0 : _b.forEach((d) => write(` ${d.messageText}`)); + } +} +function explainIfFileIsRedirectAndImpliedFormat(file, options, fileNameConvertor) { + var _a; + let result; + if (file.path !== file.resolvedPath) { + (result ?? (result = [])).push(chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.File_is_output_of_project_reference_source_0, + toFileName(file.originalFileName, fileNameConvertor) + )); + } + if (file.redirectInfo) { + (result ?? (result = [])).push(chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.File_redirects_to_file_0, + toFileName(file.redirectInfo.redirectTarget, fileNameConvertor) + )); + } + if (isExternalOrCommonJsModule(file)) { + switch (getImpliedNodeFormatForEmitWorker(file, options)) { + case 99 /* ESNext */: + if (file.packageJsonScope) { + (result ?? (result = [])).push(chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.File_is_ECMAScript_module_because_0_has_field_type_with_value_module, + toFileName(last(file.packageJsonLocations), fileNameConvertor) + )); + } + break; + case 1 /* CommonJS */: + if (file.packageJsonScope) { + (result ?? (result = [])).push(chainDiagnosticMessages( + /*details*/ + void 0, + file.packageJsonScope.contents.packageJsonContent.type ? Diagnostics.File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module : Diagnostics.File_is_CommonJS_module_because_0_does_not_have_field_type, + toFileName(last(file.packageJsonLocations), fileNameConvertor) + )); + } else if ((_a = file.packageJsonLocations) == null ? void 0 : _a.length) { + (result ?? (result = [])).push(chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.File_is_CommonJS_module_because_package_json_was_not_found + )); + } + break; + } + } + return result; +} +function getMatchedFileSpec(program, fileName) { + var _a; + const configFile = program.getCompilerOptions().configFile; + if (!((_a = configFile == null ? void 0 : configFile.configFileSpecs) == null ? void 0 : _a.validatedFilesSpec)) return void 0; + const filePath = program.getCanonicalFileName(fileName); + const basePath = getDirectoryPath(getNormalizedAbsolutePath(configFile.fileName, program.getCurrentDirectory())); + const index = findIndex(configFile.configFileSpecs.validatedFilesSpec, (fileSpec) => program.getCanonicalFileName(getNormalizedAbsolutePath(fileSpec, basePath)) === filePath); + return index !== -1 ? configFile.configFileSpecs.validatedFilesSpecBeforeSubstitution[index] : void 0; +} +function getMatchedIncludeSpec(program, fileName) { + var _a, _b; + const configFile = program.getCompilerOptions().configFile; + if (!((_a = configFile == null ? void 0 : configFile.configFileSpecs) == null ? void 0 : _a.validatedIncludeSpecs)) return void 0; + if (configFile.configFileSpecs.isDefaultIncludeSpec) return true; + const isJsonFile = fileExtensionIs(fileName, ".json" /* Json */); + const basePath = getDirectoryPath(getNormalizedAbsolutePath(configFile.fileName, program.getCurrentDirectory())); + const useCaseSensitiveFileNames2 = program.useCaseSensitiveFileNames(); + const index = findIndex((_b = configFile == null ? void 0 : configFile.configFileSpecs) == null ? void 0 : _b.validatedIncludeSpecs, (includeSpec) => { + if (isJsonFile && !endsWith(includeSpec, ".json" /* Json */)) return false; + const pattern = getPatternFromSpec(includeSpec, basePath, "files"); + return !!pattern && getRegexFromPattern(`(?:${pattern})$`, useCaseSensitiveFileNames2).test(fileName); + }); + return index !== -1 ? configFile.configFileSpecs.validatedIncludeSpecsBeforeSubstitution[index] : void 0; +} +function fileIncludeReasonToDiagnostics(program, reason, fileNameConvertor) { + var _a, _b; + const options = program.getCompilerOptions(); + if (isReferencedFile(reason)) { + const referenceLocation = getReferencedFileLocation(program, reason); + const referenceText = isReferenceFileLocation(referenceLocation) ? referenceLocation.file.text.substring(referenceLocation.pos, referenceLocation.end) : `"${referenceLocation.text}"`; + let message; + Debug.assert(isReferenceFileLocation(referenceLocation) || reason.kind === 3 /* Import */, "Only synthetic references are imports"); + switch (reason.kind) { + case 3 /* Import */: + if (isReferenceFileLocation(referenceLocation)) { + message = referenceLocation.packageId ? Diagnostics.Imported_via_0_from_file_1_with_packageId_2 : Diagnostics.Imported_via_0_from_file_1; + } else if (referenceLocation.text === externalHelpersModuleNameText) { + message = referenceLocation.packageId ? Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions : Diagnostics.Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions; + } else { + message = referenceLocation.packageId ? Diagnostics.Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions : Diagnostics.Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions; + } + break; + case 4 /* ReferenceFile */: + Debug.assert(!referenceLocation.packageId); + message = Diagnostics.Referenced_via_0_from_file_1; + break; + case 5 /* TypeReferenceDirective */: + message = referenceLocation.packageId ? Diagnostics.Type_library_referenced_via_0_from_file_1_with_packageId_2 : Diagnostics.Type_library_referenced_via_0_from_file_1; + break; + case 7 /* LibReferenceDirective */: + Debug.assert(!referenceLocation.packageId); + message = Diagnostics.Library_referenced_via_0_from_file_1; + break; + default: + Debug.assertNever(reason); + } + return chainDiagnosticMessages( + /*details*/ + void 0, + message, + referenceText, + toFileName(referenceLocation.file, fileNameConvertor), + referenceLocation.packageId && packageIdToString(referenceLocation.packageId) + ); + } + switch (reason.kind) { + case 0 /* RootFile */: + if (!((_a = options.configFile) == null ? void 0 : _a.configFileSpecs)) return chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Root_file_specified_for_compilation + ); + const fileName = getNormalizedAbsolutePath(program.getRootFileNames()[reason.index], program.getCurrentDirectory()); + const matchedByFiles = getMatchedFileSpec(program, fileName); + if (matchedByFiles) return chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Part_of_files_list_in_tsconfig_json + ); + const matchedByInclude = getMatchedIncludeSpec(program, fileName); + return isString(matchedByInclude) ? chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Matched_by_include_pattern_0_in_1, + matchedByInclude, + toFileName(options.configFile, fileNameConvertor) + ) : ( + // Could be additional files specified as roots or matched by default include + chainDiagnosticMessages( + /*details*/ + void 0, + matchedByInclude ? Diagnostics.Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk : Diagnostics.Root_file_specified_for_compilation + ) + ); + case 1 /* SourceFromProjectReference */: + case 2 /* OutputFromProjectReference */: + const isOutput = reason.kind === 2 /* OutputFromProjectReference */; + const referencedResolvedRef = Debug.checkDefined((_b = program.getResolvedProjectReferences()) == null ? void 0 : _b[reason.index]); + return chainDiagnosticMessages( + /*details*/ + void 0, + options.outFile ? isOutput ? Diagnostics.Output_from_referenced_project_0_included_because_1_specified : Diagnostics.Source_from_referenced_project_0_included_because_1_specified : isOutput ? Diagnostics.Output_from_referenced_project_0_included_because_module_is_specified_as_none : Diagnostics.Source_from_referenced_project_0_included_because_module_is_specified_as_none, + toFileName(referencedResolvedRef.sourceFile.fileName, fileNameConvertor), + options.outFile ? "--outFile" : "--out" + ); + case 8 /* AutomaticTypeDirectiveFile */: { + const messageAndArgs = options.types ? reason.packageId ? [Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1, reason.typeReference, packageIdToString(reason.packageId)] : [Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions, reason.typeReference] : reason.packageId ? [Diagnostics.Entry_point_for_implicit_type_library_0_with_packageId_1, reason.typeReference, packageIdToString(reason.packageId)] : [Diagnostics.Entry_point_for_implicit_type_library_0, reason.typeReference]; + return chainDiagnosticMessages( + /*details*/ + void 0, + ...messageAndArgs + ); + } + case 6 /* LibFile */: { + if (reason.index !== void 0) return chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Library_0_specified_in_compilerOptions, + options.lib[reason.index] + ); + const target = getNameOfScriptTarget(getEmitScriptTarget(options)); + const messageAndArgs = target ? [Diagnostics.Default_library_for_target_0, target] : [Diagnostics.Default_library]; + return chainDiagnosticMessages( + /*details*/ + void 0, + ...messageAndArgs + ); + } + default: + Debug.assertNever(reason); + } +} +function toFileName(file, fileNameConvertor) { + const fileName = isString(file) ? file : file.fileName; + return fileNameConvertor ? fileNameConvertor(fileName) : fileName; +} +function emitFilesAndReportErrors(program, reportDiagnostic, write, reportSummary, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + const options = program.getCompilerOptions(); + const allDiagnostics = program.getConfigFileParsingDiagnostics().slice(); + const configFileParsingDiagnosticsLength = allDiagnostics.length; + addRange(allDiagnostics, program.getSyntacticDiagnostics( + /*sourceFile*/ + void 0, + cancellationToken + )); + if (allDiagnostics.length === configFileParsingDiagnosticsLength) { + addRange(allDiagnostics, program.getOptionsDiagnostics(cancellationToken)); + if (!options.listFilesOnly) { + addRange(allDiagnostics, program.getGlobalDiagnostics(cancellationToken)); + if (allDiagnostics.length === configFileParsingDiagnosticsLength) { + addRange(allDiagnostics, program.getSemanticDiagnostics( + /*sourceFile*/ + void 0, + cancellationToken + )); + } + if (options.noEmit && getEmitDeclarations(options) && allDiagnostics.length === configFileParsingDiagnosticsLength) { + addRange(allDiagnostics, program.getDeclarationDiagnostics( + /*sourceFile*/ + void 0, + cancellationToken + )); + } + } + } + const emitResult = options.listFilesOnly ? { emitSkipped: true, diagnostics: emptyArray } : program.emit( + /*targetSourceFile*/ + void 0, + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers + ); + addRange(allDiagnostics, emitResult.diagnostics); + const diagnostics = sortAndDeduplicateDiagnostics(allDiagnostics); + diagnostics.forEach(reportDiagnostic); + if (write) { + const currentDir = program.getCurrentDirectory(); + forEach(emitResult.emittedFiles, (file) => { + const filepath = getNormalizedAbsolutePath(file, currentDir); + write(`TSFILE: ${filepath}`); + }); + listFiles(program, write); + } + if (reportSummary) { + reportSummary(getErrorCountForSummary(diagnostics), getFilesInErrorForSummary(diagnostics)); + } + return { + emitResult, + diagnostics + }; +} +function emitFilesAndReportErrorsAndGetExitStatus(program, reportDiagnostic, write, reportSummary, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) { + const { emitResult, diagnostics } = emitFilesAndReportErrors( + program, + reportDiagnostic, + write, + reportSummary, + writeFile2, + cancellationToken, + emitOnlyDtsFiles, + customTransformers + ); + if (emitResult.emitSkipped && diagnostics.length > 0) { + return 1 /* DiagnosticsPresent_OutputsSkipped */; + } else if (diagnostics.length > 0) { + return 2 /* DiagnosticsPresent_OutputsGenerated */; + } + return 0 /* Success */; +} +var noopFileWatcher = { close: noop }; +var returnNoopFileWatcher = () => noopFileWatcher; +function createWatchHost(system = sys, reportWatchStatus2) { + const onWatchStatusChange = reportWatchStatus2 || createWatchStatusReporter(system); + return { + onWatchStatusChange, + watchFile: maybeBind(system, system.watchFile) || returnNoopFileWatcher, + watchDirectory: maybeBind(system, system.watchDirectory) || returnNoopFileWatcher, + setTimeout: maybeBind(system, system.setTimeout) || noop, + clearTimeout: maybeBind(system, system.clearTimeout) || noop, + preferNonRecursiveWatch: system.preferNonRecursiveWatch + }; +} +var WatchType = { + ConfigFile: "Config file", + ExtendedConfigFile: "Extended config file", + SourceFile: "Source file", + MissingFile: "Missing file", + WildcardDirectory: "Wild card directory", + FailedLookupLocations: "Failed Lookup Locations", + AffectingFileLocation: "File location affecting resolution", + TypeRoots: "Type roots", + ConfigFileOfReferencedProject: "Config file of referened project", + ExtendedConfigOfReferencedProject: "Extended config file of referenced project", + WildcardDirectoryOfReferencedProject: "Wild card directory of referenced project", + PackageJson: "package.json file", + ClosedScriptInfo: "Closed Script info", + ConfigFileForInferredRoot: "Config file for the inferred project root", + NodeModules: "node_modules for closed script infos and package.jsons affecting module specifier cache", + MissingSourceMapFile: "Missing source map file", + NoopConfigFileForInferredRoot: "Noop Config file for the inferred project root", + MissingGeneratedFile: "Missing generated file", + NodeModulesForModuleSpecifierCache: "node_modules for module specifier cache invalidation", + TypingInstallerLocationFile: "File location for typing installer", + TypingInstallerLocationDirectory: "Directory location for typing installer" +}; +function createWatchFactory(host, options) { + const watchLogLevel = host.trace ? options.extendedDiagnostics ? 2 /* Verbose */ : options.diagnostics ? 1 /* TriggerOnly */ : 0 /* None */ : 0 /* None */; + const writeLog = watchLogLevel !== 0 /* None */ ? (s) => host.trace(s) : noop; + const result = getWatchFactory(host, watchLogLevel, writeLog); + result.writeLog = writeLog; + return result; +} +function createCompilerHostFromProgramHost(host, getCompilerOptions, directoryStructureHost = host) { + const useCaseSensitiveFileNames2 = host.useCaseSensitiveFileNames(); + const compilerHost = { + getSourceFile: createGetSourceFile( + (fileName, encoding) => !encoding ? compilerHost.readFile(fileName) : host.readFile(fileName, encoding), + /*setParentNodes*/ + void 0 + ), + getDefaultLibLocation: maybeBind(host, host.getDefaultLibLocation), + getDefaultLibFileName: (options) => host.getDefaultLibFileName(options), + writeFile: createWriteFileMeasuringIO( + (path, data, writeByteOrderMark) => host.writeFile(path, data, writeByteOrderMark), + (path) => host.createDirectory(path), + (path) => host.directoryExists(path) + ), + getCurrentDirectory: memoize(() => host.getCurrentDirectory()), + useCaseSensitiveFileNames: () => useCaseSensitiveFileNames2, + getCanonicalFileName: createGetCanonicalFileName(useCaseSensitiveFileNames2), + getNewLine: () => getNewLineCharacter(getCompilerOptions()), + fileExists: (f) => host.fileExists(f), + readFile: (f) => host.readFile(f), + trace: maybeBind(host, host.trace), + directoryExists: maybeBind(directoryStructureHost, directoryStructureHost.directoryExists), + getDirectories: maybeBind(directoryStructureHost, directoryStructureHost.getDirectories), + realpath: maybeBind(host, host.realpath), + getEnvironmentVariable: maybeBind(host, host.getEnvironmentVariable) || (() => ""), + createHash: maybeBind(host, host.createHash), + readDirectory: maybeBind(host, host.readDirectory), + storeSignatureInfo: host.storeSignatureInfo, + jsDocParsingMode: host.jsDocParsingMode + }; + return compilerHost; +} +function getSourceFileVersionAsHashFromText(host, text) { + if (text.match(sourceMapCommentRegExpDontCareLineStart)) { + let lineEnd = text.length; + let lineStart = lineEnd; + for (let pos = lineEnd - 1; pos >= 0; pos--) { + const ch = text.charCodeAt(pos); + switch (ch) { + case 10 /* lineFeed */: + if (pos && text.charCodeAt(pos - 1) === 13 /* carriageReturn */) { + pos--; + } + // falls through + case 13 /* carriageReturn */: + break; + default: + if (ch < 127 /* maxAsciiCharacter */ || !isLineBreak(ch)) { + lineStart = pos; + continue; + } + break; + } + const line = text.substring(lineStart, lineEnd); + if (line.match(sourceMapCommentRegExp)) { + text = text.substring(0, lineStart); + break; + } else if (!line.match(whitespaceOrMapCommentRegExp)) { + break; + } + lineEnd = lineStart; + } + } + return (host.createHash || generateDjb2Hash)(text); +} +function setGetSourceFileAsHashVersioned(compilerHost) { + const originalGetSourceFile = compilerHost.getSourceFile; + compilerHost.getSourceFile = (...args) => { + const result = originalGetSourceFile.call(compilerHost, ...args); + if (result) { + result.version = getSourceFileVersionAsHashFromText(compilerHost, result.text); + } + return result; + }; +} +function createProgramHost(system, createProgram2) { + const getDefaultLibLocation = memoize(() => getDirectoryPath(normalizePath(system.getExecutingFilePath()))); + return { + useCaseSensitiveFileNames: () => system.useCaseSensitiveFileNames, + getNewLine: () => system.newLine, + getCurrentDirectory: memoize(() => system.getCurrentDirectory()), + getDefaultLibLocation, + getDefaultLibFileName: (options) => combinePaths(getDefaultLibLocation(), getDefaultLibFileName(options)), + fileExists: (path) => system.fileExists(path), + readFile: (path, encoding) => system.readFile(path, encoding), + directoryExists: (path) => system.directoryExists(path), + getDirectories: (path) => system.getDirectories(path), + readDirectory: (path, extensions, exclude, include, depth) => system.readDirectory(path, extensions, exclude, include, depth), + realpath: maybeBind(system, system.realpath), + getEnvironmentVariable: maybeBind(system, system.getEnvironmentVariable), + trace: (s) => system.write(s + system.newLine), + createDirectory: (path) => system.createDirectory(path), + writeFile: (path, data, writeByteOrderMark) => system.writeFile(path, data, writeByteOrderMark), + createHash: maybeBind(system, system.createHash), + createProgram: createProgram2 || createEmitAndSemanticDiagnosticsBuilderProgram, + storeSignatureInfo: system.storeSignatureInfo, + now: maybeBind(system, system.now) + }; +} +function createWatchCompilerHost(system = sys, createProgram2, reportDiagnostic, reportWatchStatus2) { + const write = (s) => system.write(s + system.newLine); + const result = createProgramHost(system, createProgram2); + copyProperties(result, createWatchHost(system, reportWatchStatus2)); + result.afterProgramCreate = (builderProgram) => { + const compilerOptions = builderProgram.getCompilerOptions(); + const newLine = getNewLineCharacter(compilerOptions); + emitFilesAndReportErrors( + builderProgram, + reportDiagnostic, + write, + (errorCount) => result.onWatchStatusChange( + createCompilerDiagnostic(getWatchErrorSummaryDiagnosticMessage(errorCount), errorCount), + newLine, + compilerOptions, + errorCount + ) + ); + }; + return result; +} +function reportUnrecoverableDiagnostic(system, reportDiagnostic, diagnostic) { + reportDiagnostic(diagnostic); + system.exit(1 /* DiagnosticsPresent_OutputsSkipped */); +} +function createWatchCompilerHostOfConfigFile({ + configFileName, + optionsToExtend, + watchOptionsToExtend, + extraFileExtensions, + system, + createProgram: createProgram2, + reportDiagnostic, + reportWatchStatus: reportWatchStatus2 +}) { + const diagnosticReporter = reportDiagnostic || createDiagnosticReporter(system); + const host = createWatchCompilerHost(system, createProgram2, diagnosticReporter, reportWatchStatus2); + host.onUnRecoverableConfigFileDiagnostic = (diagnostic) => reportUnrecoverableDiagnostic(system, diagnosticReporter, diagnostic); + host.configFileName = configFileName; + host.optionsToExtend = optionsToExtend; + host.watchOptionsToExtend = watchOptionsToExtend; + host.extraFileExtensions = extraFileExtensions; + return host; +} +function createWatchCompilerHostOfFilesAndCompilerOptions({ + rootFiles, + options, + watchOptions, + projectReferences, + system, + createProgram: createProgram2, + reportDiagnostic, + reportWatchStatus: reportWatchStatus2 +}) { + const host = createWatchCompilerHost(system, createProgram2, reportDiagnostic || createDiagnosticReporter(system), reportWatchStatus2); + host.rootFiles = rootFiles; + host.options = options; + host.watchOptions = watchOptions; + host.projectReferences = projectReferences; + return host; +} +function performIncrementalCompilation(input) { + const system = input.system || sys; + const host = input.host || (input.host = createIncrementalCompilerHost(input.options, system)); + const builderProgram = createIncrementalProgram(input); + const exitStatus = emitFilesAndReportErrorsAndGetExitStatus( + builderProgram, + input.reportDiagnostic || createDiagnosticReporter(system), + (s) => host.trace && host.trace(s), + input.reportErrorSummary || input.options.pretty ? (errorCount, filesInError) => system.write(getErrorSummaryText(errorCount, filesInError, system.newLine, host)) : void 0 + ); + if (input.afterProgramEmitAndDiagnostics) input.afterProgramEmitAndDiagnostics(builderProgram); + return exitStatus; +} + +// src/compiler/watchPublic.ts +function readBuilderProgram(compilerOptions, host) { + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(compilerOptions); + if (!buildInfoPath) return void 0; + let buildInfo; + if (host.getBuildInfo) { + buildInfo = host.getBuildInfo(buildInfoPath, compilerOptions.configFilePath); + } else { + const content = host.readFile(buildInfoPath); + if (!content) return void 0; + buildInfo = getBuildInfo(buildInfoPath, content); + } + if (!buildInfo || buildInfo.version !== version || !isIncrementalBuildInfo(buildInfo)) return void 0; + return createBuilderProgramUsingIncrementalBuildInfo(buildInfo, buildInfoPath, host); +} +function createIncrementalCompilerHost(options, system = sys) { + const host = createCompilerHostWorker( + options, + /*setParentNodes*/ + void 0, + system + ); + host.createHash = maybeBind(system, system.createHash); + host.storeSignatureInfo = system.storeSignatureInfo; + setGetSourceFileAsHashVersioned(host); + changeCompilerHostLikeToUseCache(host, (fileName) => toPath(fileName, host.getCurrentDirectory(), host.getCanonicalFileName)); + return host; +} +function createIncrementalProgram({ + rootNames, + options, + configFileParsingDiagnostics, + projectReferences, + host, + createProgram: createProgram2 +}) { + host = host || createIncrementalCompilerHost(options); + createProgram2 = createProgram2 || createEmitAndSemanticDiagnosticsBuilderProgram; + const oldProgram = readBuilderProgram(options, host); + return createProgram2(rootNames, options, host, oldProgram, configFileParsingDiagnostics, projectReferences); +} +function createWatchCompilerHost2(rootFilesOrConfigFileName, options, system, createProgram2, reportDiagnostic, reportWatchStatus2, projectReferencesOrWatchOptionsToExtend, watchOptionsOrExtraFileExtensions) { + if (isArray(rootFilesOrConfigFileName)) { + return createWatchCompilerHostOfFilesAndCompilerOptions({ + rootFiles: rootFilesOrConfigFileName, + options, + watchOptions: watchOptionsOrExtraFileExtensions, + projectReferences: projectReferencesOrWatchOptionsToExtend, + system, + createProgram: createProgram2, + reportDiagnostic, + reportWatchStatus: reportWatchStatus2 + }); + } else { + return createWatchCompilerHostOfConfigFile({ + configFileName: rootFilesOrConfigFileName, + optionsToExtend: options, + watchOptionsToExtend: projectReferencesOrWatchOptionsToExtend, + extraFileExtensions: watchOptionsOrExtraFileExtensions, + system, + createProgram: createProgram2, + reportDiagnostic, + reportWatchStatus: reportWatchStatus2 + }); + } +} +function createWatchProgram(host) { + let builderProgram; + let updateLevel; + let missingFilesMap; + let watchedWildcardDirectories; + let staleWatches = /* @__PURE__ */ new Map([[void 0, void 0]]); + let timerToUpdateProgram; + let timerToInvalidateFailedLookupResolutions; + let parsedConfigs; + let sharedExtendedConfigFileWatchers; + let extendedConfigCache = host.extendedConfigCache; + let reportFileChangeDetectedOnCreateProgram = false; + const sourceFilesCache = /* @__PURE__ */ new Map(); + let missingFilePathsRequestedForRelease; + let hasChangedCompilerOptions = false; + const useCaseSensitiveFileNames2 = host.useCaseSensitiveFileNames(); + const currentDirectory = host.getCurrentDirectory(); + const { configFileName, optionsToExtend: optionsToExtendForConfigFile = {}, watchOptionsToExtend, extraFileExtensions, createProgram: createProgram2 } = host; + let { rootFiles: rootFileNames, options: compilerOptions, watchOptions, projectReferences } = host; + let wildcardDirectories; + let configFileParsingDiagnostics; + let canConfigFileJsonReportNoInputFiles = false; + let hasChangedConfigFileParsingErrors = false; + const cachedDirectoryStructureHost = configFileName === void 0 ? void 0 : createCachedDirectoryStructureHost(host, currentDirectory, useCaseSensitiveFileNames2); + const directoryStructureHost = cachedDirectoryStructureHost || host; + const parseConfigFileHost = parseConfigHostFromCompilerHostLike(host, directoryStructureHost); + let newLine = updateNewLine(); + if (configFileName && host.configFileParsingResult) { + setConfigFileParsingResult(host.configFileParsingResult); + newLine = updateNewLine(); + } + reportWatchDiagnostic(Diagnostics.Starting_compilation_in_watch_mode); + if (configFileName && !host.configFileParsingResult) { + newLine = getNewLineCharacter(optionsToExtendForConfigFile); + Debug.assert(!rootFileNames); + parseConfigFile2(); + newLine = updateNewLine(); + } + Debug.assert(compilerOptions); + Debug.assert(rootFileNames); + const { watchFile: watchFile2, watchDirectory, writeLog } = createWatchFactory(host, compilerOptions); + const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames2); + writeLog(`Current directory: ${currentDirectory} CaseSensitiveFileNames: ${useCaseSensitiveFileNames2}`); + let configFileWatcher; + if (configFileName) { + configFileWatcher = watchFile2(configFileName, scheduleProgramReload, 2e3 /* High */, watchOptions, WatchType.ConfigFile); + } + const compilerHost = createCompilerHostFromProgramHost(host, () => compilerOptions, directoryStructureHost); + setGetSourceFileAsHashVersioned(compilerHost); + const getNewSourceFile = compilerHost.getSourceFile; + compilerHost.getSourceFile = (fileName, ...args) => getVersionedSourceFileByPath(fileName, toPath3(fileName), ...args); + compilerHost.getSourceFileByPath = getVersionedSourceFileByPath; + compilerHost.getNewLine = () => newLine; + compilerHost.fileExists = fileExists; + compilerHost.onReleaseOldSourceFile = onReleaseOldSourceFile; + compilerHost.onReleaseParsedCommandLine = onReleaseParsedCommandLine; + compilerHost.toPath = toPath3; + compilerHost.getCompilationSettings = () => compilerOptions; + compilerHost.useSourceOfProjectReferenceRedirect = maybeBind(host, host.useSourceOfProjectReferenceRedirect); + compilerHost.preferNonRecursiveWatch = host.preferNonRecursiveWatch; + compilerHost.watchDirectoryOfFailedLookupLocation = (dir, cb, flags) => watchDirectory(dir, cb, flags, watchOptions, WatchType.FailedLookupLocations); + compilerHost.watchAffectingFileLocation = (file, cb) => watchFile2(file, cb, 2e3 /* High */, watchOptions, WatchType.AffectingFileLocation); + compilerHost.watchTypeRootsDirectory = (dir, cb, flags) => watchDirectory(dir, cb, flags, watchOptions, WatchType.TypeRoots); + compilerHost.getCachedDirectoryStructureHost = () => cachedDirectoryStructureHost; + compilerHost.scheduleInvalidateResolutionsOfFailedLookupLocations = scheduleInvalidateResolutionsOfFailedLookupLocations; + compilerHost.onInvalidatedResolution = scheduleProgramUpdate; + compilerHost.onChangedAutomaticTypeDirectiveNames = scheduleProgramUpdate; + compilerHost.fileIsOpen = returnFalse; + compilerHost.getCurrentProgram = getCurrentProgram; + compilerHost.writeLog = writeLog; + compilerHost.getParsedCommandLine = getParsedCommandLine; + const resolutionCache = createResolutionCache( + compilerHost, + configFileName ? getDirectoryPath(getNormalizedAbsolutePath(configFileName, currentDirectory)) : currentDirectory, + /*logChangesWhenResolvingModule*/ + false + ); + compilerHost.resolveModuleNameLiterals = maybeBind(host, host.resolveModuleNameLiterals); + compilerHost.resolveModuleNames = maybeBind(host, host.resolveModuleNames); + if (!compilerHost.resolveModuleNameLiterals && !compilerHost.resolveModuleNames) { + compilerHost.resolveModuleNameLiterals = resolutionCache.resolveModuleNameLiterals.bind(resolutionCache); + } + compilerHost.resolveTypeReferenceDirectiveReferences = maybeBind(host, host.resolveTypeReferenceDirectiveReferences); + compilerHost.resolveTypeReferenceDirectives = maybeBind(host, host.resolveTypeReferenceDirectives); + if (!compilerHost.resolveTypeReferenceDirectiveReferences && !compilerHost.resolveTypeReferenceDirectives) { + compilerHost.resolveTypeReferenceDirectiveReferences = resolutionCache.resolveTypeReferenceDirectiveReferences.bind(resolutionCache); + } + compilerHost.resolveLibrary = !host.resolveLibrary ? resolutionCache.resolveLibrary.bind(resolutionCache) : host.resolveLibrary.bind(host); + compilerHost.getModuleResolutionCache = host.resolveModuleNameLiterals || host.resolveModuleNames ? maybeBind(host, host.getModuleResolutionCache) : () => resolutionCache.getModuleResolutionCache(); + const userProvidedResolution = !!host.resolveModuleNameLiterals || !!host.resolveTypeReferenceDirectiveReferences || !!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives; + const customHasInvalidatedResolutions = userProvidedResolution ? maybeBind(host, host.hasInvalidatedResolutions) || returnTrue : returnFalse; + const customHasInvalidLibResolutions = host.resolveLibrary ? maybeBind(host, host.hasInvalidatedLibResolutions) || returnTrue : returnFalse; + builderProgram = readBuilderProgram(compilerOptions, compilerHost); + synchronizeProgram(); + return configFileName ? { getCurrentProgram: getCurrentBuilderProgram, getProgram: updateProgram, close, getResolutionCache } : { getCurrentProgram: getCurrentBuilderProgram, getProgram: updateProgram, updateRootFileNames, close, getResolutionCache }; + function close() { + clearInvalidateResolutionsOfFailedLookupLocations(); + resolutionCache.clear(); + clearMap(sourceFilesCache, (value) => { + if (value && value.fileWatcher) { + value.fileWatcher.close(); + value.fileWatcher = void 0; + } + }); + if (configFileWatcher) { + configFileWatcher.close(); + configFileWatcher = void 0; + } + extendedConfigCache == null ? void 0 : extendedConfigCache.clear(); + extendedConfigCache = void 0; + if (sharedExtendedConfigFileWatchers) { + clearMap(sharedExtendedConfigFileWatchers, closeFileWatcherOf); + sharedExtendedConfigFileWatchers = void 0; + } + if (watchedWildcardDirectories) { + clearMap(watchedWildcardDirectories, closeFileWatcherOf); + watchedWildcardDirectories = void 0; + } + if (missingFilesMap) { + clearMap(missingFilesMap, closeFileWatcher); + missingFilesMap = void 0; + } + if (parsedConfigs) { + clearMap(parsedConfigs, (config) => { + var _a; + (_a = config.watcher) == null ? void 0 : _a.close(); + config.watcher = void 0; + if (config.watchedDirectories) clearMap(config.watchedDirectories, closeFileWatcherOf); + config.watchedDirectories = void 0; + }); + parsedConfigs = void 0; + } + builderProgram = void 0; + } + function getResolutionCache() { + return resolutionCache; + } + function getCurrentBuilderProgram() { + return builderProgram; + } + function getCurrentProgram() { + return builderProgram && builderProgram.getProgramOrUndefined(); + } + function synchronizeProgram() { + writeLog(`Synchronizing program`); + Debug.assert(compilerOptions); + Debug.assert(rootFileNames); + clearInvalidateResolutionsOfFailedLookupLocations(); + const program = getCurrentBuilderProgram(); + if (hasChangedCompilerOptions) { + newLine = updateNewLine(); + if (program && changesAffectModuleResolution(program.getCompilerOptions(), compilerOptions)) { + resolutionCache.onChangesAffectModuleResolution(); + } + } + const { hasInvalidatedResolutions, hasInvalidatedLibResolutions } = resolutionCache.createHasInvalidatedResolutions(customHasInvalidatedResolutions, customHasInvalidLibResolutions); + const { + originalReadFile, + originalFileExists, + originalDirectoryExists, + originalCreateDirectory, + originalWriteFile, + readFileWithCache + } = changeCompilerHostLikeToUseCache(compilerHost, toPath3); + if (isProgramUptoDate(getCurrentProgram(), rootFileNames, compilerOptions, (path) => getSourceVersion(path, readFileWithCache), (fileName) => compilerHost.fileExists(fileName), hasInvalidatedResolutions, hasInvalidatedLibResolutions, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + if (hasChangedConfigFileParsingErrors) { + if (reportFileChangeDetectedOnCreateProgram) { + reportWatchDiagnostic(Diagnostics.File_change_detected_Starting_incremental_compilation); + } + builderProgram = createProgram2( + /*rootNames*/ + void 0, + /*options*/ + void 0, + compilerHost, + builderProgram, + configFileParsingDiagnostics, + projectReferences + ); + hasChangedConfigFileParsingErrors = false; + } + } else { + if (reportFileChangeDetectedOnCreateProgram) { + reportWatchDiagnostic(Diagnostics.File_change_detected_Starting_incremental_compilation); + } + createNewProgram(hasInvalidatedResolutions, hasInvalidatedLibResolutions); + } + reportFileChangeDetectedOnCreateProgram = false; + if (host.afterProgramCreate && program !== builderProgram) { + host.afterProgramCreate(builderProgram); + } + compilerHost.readFile = originalReadFile; + compilerHost.fileExists = originalFileExists; + compilerHost.directoryExists = originalDirectoryExists; + compilerHost.createDirectory = originalCreateDirectory; + compilerHost.writeFile = originalWriteFile; + staleWatches == null ? void 0 : staleWatches.forEach((configFile, configPath) => { + if (!configPath) { + watchConfigFileWildCardDirectories(); + if (configFileName) updateExtendedConfigFilesWatches(toPath3(configFileName), compilerOptions, watchOptions, WatchType.ExtendedConfigFile); + } else { + const config = parsedConfigs == null ? void 0 : parsedConfigs.get(configPath); + if (config) watchReferencedProject(configFile, configPath, config); + } + }); + staleWatches = void 0; + return builderProgram; + } + function createNewProgram(hasInvalidatedResolutions, hasInvalidatedLibResolutions) { + writeLog("CreatingProgramWith::"); + writeLog(` roots: ${JSON.stringify(rootFileNames)}`); + writeLog(` options: ${JSON.stringify(compilerOptions)}`); + if (projectReferences) writeLog(` projectReferences: ${JSON.stringify(projectReferences)}`); + const needsUpdateInTypeRootWatch = hasChangedCompilerOptions || !getCurrentProgram(); + hasChangedCompilerOptions = false; + hasChangedConfigFileParsingErrors = false; + resolutionCache.startCachingPerDirectoryResolution(); + compilerHost.hasInvalidatedResolutions = hasInvalidatedResolutions; + compilerHost.hasInvalidatedLibResolutions = hasInvalidatedLibResolutions; + compilerHost.hasChangedAutomaticTypeDirectiveNames = hasChangedAutomaticTypeDirectiveNames; + const oldProgram = getCurrentProgram(); + builderProgram = createProgram2(rootFileNames, compilerOptions, compilerHost, builderProgram, configFileParsingDiagnostics, projectReferences); + resolutionCache.finishCachingPerDirectoryResolution(builderProgram.getProgram(), oldProgram); + updateMissingFilePathsWatch( + builderProgram.getProgram(), + missingFilesMap || (missingFilesMap = /* @__PURE__ */ new Map()), + watchMissingFilePath + ); + if (needsUpdateInTypeRootWatch) { + resolutionCache.updateTypeRootsWatch(); + } + if (missingFilePathsRequestedForRelease) { + for (const missingFilePath of missingFilePathsRequestedForRelease) { + if (!missingFilesMap.has(missingFilePath)) { + sourceFilesCache.delete(missingFilePath); + } + } + missingFilePathsRequestedForRelease = void 0; + } + } + function updateRootFileNames(files) { + Debug.assert(!configFileName, "Cannot update root file names with config file watch mode"); + rootFileNames = files; + scheduleProgramUpdate(); + } + function updateNewLine() { + return getNewLineCharacter(compilerOptions || optionsToExtendForConfigFile); + } + function toPath3(fileName) { + return toPath(fileName, currentDirectory, getCanonicalFileName); + } + function isFileMissingOnHost(hostSourceFile) { + return typeof hostSourceFile === "boolean"; + } + function isFilePresenceUnknownOnHost(hostSourceFile) { + return typeof hostSourceFile.version === "boolean"; + } + function fileExists(fileName) { + const path = toPath3(fileName); + if (isFileMissingOnHost(sourceFilesCache.get(path))) { + return false; + } + return directoryStructureHost.fileExists(fileName); + } + function getVersionedSourceFileByPath(fileName, path, languageVersionOrOptions, onError, shouldCreateNewSourceFile) { + const hostSourceFile = sourceFilesCache.get(path); + if (isFileMissingOnHost(hostSourceFile)) { + return void 0; + } + const impliedNodeFormat = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions.impliedNodeFormat : void 0; + if (hostSourceFile === void 0 || shouldCreateNewSourceFile || isFilePresenceUnknownOnHost(hostSourceFile) || hostSourceFile.sourceFile.impliedNodeFormat !== impliedNodeFormat) { + const sourceFile = getNewSourceFile(fileName, languageVersionOrOptions, onError); + if (hostSourceFile) { + if (sourceFile) { + hostSourceFile.sourceFile = sourceFile; + hostSourceFile.version = sourceFile.version; + if (!hostSourceFile.fileWatcher) { + hostSourceFile.fileWatcher = watchFilePath(path, fileName, onSourceFileChange, 250 /* Low */, watchOptions, WatchType.SourceFile); + } + } else { + if (hostSourceFile.fileWatcher) { + hostSourceFile.fileWatcher.close(); + } + sourceFilesCache.set(path, false); + } + } else { + if (sourceFile) { + const fileWatcher = watchFilePath(path, fileName, onSourceFileChange, 250 /* Low */, watchOptions, WatchType.SourceFile); + sourceFilesCache.set(path, { sourceFile, version: sourceFile.version, fileWatcher }); + } else { + sourceFilesCache.set(path, false); + } + } + return sourceFile; + } + return hostSourceFile.sourceFile; + } + function nextSourceFileVersion(path) { + const hostSourceFile = sourceFilesCache.get(path); + if (hostSourceFile !== void 0) { + if (isFileMissingOnHost(hostSourceFile)) { + sourceFilesCache.set(path, { version: false }); + } else { + hostSourceFile.version = false; + } + } + } + function getSourceVersion(path, readFileWithCache) { + const hostSourceFile = sourceFilesCache.get(path); + if (!hostSourceFile) return void 0; + if (hostSourceFile.version) return hostSourceFile.version; + const text = readFileWithCache(path); + return text !== void 0 ? getSourceFileVersionAsHashFromText(compilerHost, text) : void 0; + } + function onReleaseOldSourceFile(oldSourceFile, _oldOptions, hasSourceFileByPath) { + const hostSourceFileInfo = sourceFilesCache.get(oldSourceFile.resolvedPath); + if (hostSourceFileInfo !== void 0) { + if (isFileMissingOnHost(hostSourceFileInfo)) { + (missingFilePathsRequestedForRelease || (missingFilePathsRequestedForRelease = [])).push(oldSourceFile.path); + } else if (hostSourceFileInfo.sourceFile === oldSourceFile) { + if (hostSourceFileInfo.fileWatcher) { + hostSourceFileInfo.fileWatcher.close(); + } + sourceFilesCache.delete(oldSourceFile.resolvedPath); + if (!hasSourceFileByPath) { + resolutionCache.removeResolutionsOfFile(oldSourceFile.path); + } + } + } + } + function reportWatchDiagnostic(message) { + if (host.onWatchStatusChange) { + host.onWatchStatusChange(createCompilerDiagnostic(message), newLine, compilerOptions || optionsToExtendForConfigFile); + } + } + function hasChangedAutomaticTypeDirectiveNames() { + return resolutionCache.hasChangedAutomaticTypeDirectiveNames(); + } + function clearInvalidateResolutionsOfFailedLookupLocations() { + if (!timerToInvalidateFailedLookupResolutions) return false; + host.clearTimeout(timerToInvalidateFailedLookupResolutions); + timerToInvalidateFailedLookupResolutions = void 0; + return true; + } + function scheduleInvalidateResolutionsOfFailedLookupLocations() { + if (!host.setTimeout || !host.clearTimeout) { + return resolutionCache.invalidateResolutionsOfFailedLookupLocations(); + } + const pending = clearInvalidateResolutionsOfFailedLookupLocations(); + writeLog(`Scheduling invalidateFailedLookup${pending ? ", Cancelled earlier one" : ""}`); + timerToInvalidateFailedLookupResolutions = host.setTimeout(invalidateResolutionsOfFailedLookup, 250, "timerToInvalidateFailedLookupResolutions"); + } + function invalidateResolutionsOfFailedLookup() { + timerToInvalidateFailedLookupResolutions = void 0; + if (resolutionCache.invalidateResolutionsOfFailedLookupLocations()) { + scheduleProgramUpdate(); + } + } + function scheduleProgramUpdate() { + if (!host.setTimeout || !host.clearTimeout) { + return; + } + if (timerToUpdateProgram) { + host.clearTimeout(timerToUpdateProgram); + } + writeLog("Scheduling update"); + timerToUpdateProgram = host.setTimeout(updateProgramWithWatchStatus, 250, "timerToUpdateProgram"); + } + function scheduleProgramReload() { + Debug.assert(!!configFileName); + updateLevel = 2 /* Full */; + scheduleProgramUpdate(); + } + function updateProgramWithWatchStatus() { + timerToUpdateProgram = void 0; + reportFileChangeDetectedOnCreateProgram = true; + updateProgram(); + } + function updateProgram() { + switch (updateLevel) { + case 1 /* RootNamesAndUpdate */: + reloadFileNamesFromConfigFile(); + break; + case 2 /* Full */: + reloadConfigFile(); + break; + default: + synchronizeProgram(); + break; + } + return getCurrentBuilderProgram(); + } + function reloadFileNamesFromConfigFile() { + writeLog("Reloading new file names and options"); + Debug.assert(compilerOptions); + Debug.assert(configFileName); + updateLevel = 0 /* Update */; + rootFileNames = getFileNamesFromConfigSpecs(compilerOptions.configFile.configFileSpecs, getNormalizedAbsolutePath(getDirectoryPath(configFileName), currentDirectory), compilerOptions, parseConfigFileHost, extraFileExtensions); + if (updateErrorForNoInputFiles( + rootFileNames, + getNormalizedAbsolutePath(configFileName, currentDirectory), + compilerOptions.configFile.configFileSpecs, + configFileParsingDiagnostics, + canConfigFileJsonReportNoInputFiles + )) { + hasChangedConfigFileParsingErrors = true; + } + synchronizeProgram(); + } + function reloadConfigFile() { + Debug.assert(configFileName); + writeLog(`Reloading config file: ${configFileName}`); + updateLevel = 0 /* Update */; + if (cachedDirectoryStructureHost) { + cachedDirectoryStructureHost.clearCache(); + } + parseConfigFile2(); + hasChangedCompilerOptions = true; + (staleWatches ?? (staleWatches = /* @__PURE__ */ new Map())).set(void 0, void 0); + synchronizeProgram(); + } + function parseConfigFile2() { + Debug.assert(configFileName); + setConfigFileParsingResult( + getParsedCommandLineOfConfigFile( + configFileName, + optionsToExtendForConfigFile, + parseConfigFileHost, + extendedConfigCache || (extendedConfigCache = /* @__PURE__ */ new Map()), + watchOptionsToExtend, + extraFileExtensions + ) + ); + } + function setConfigFileParsingResult(configFileParseResult) { + rootFileNames = configFileParseResult.fileNames; + compilerOptions = configFileParseResult.options; + watchOptions = configFileParseResult.watchOptions; + projectReferences = configFileParseResult.projectReferences; + wildcardDirectories = configFileParseResult.wildcardDirectories; + configFileParsingDiagnostics = getConfigFileParsingDiagnostics(configFileParseResult).slice(); + canConfigFileJsonReportNoInputFiles = canJsonReportNoInputFiles(configFileParseResult.raw); + hasChangedConfigFileParsingErrors = true; + } + function getParsedCommandLine(configFileName2) { + const configPath = toPath3(configFileName2); + let config = parsedConfigs == null ? void 0 : parsedConfigs.get(configPath); + if (config) { + if (!config.updateLevel) return config.parsedCommandLine; + if (config.parsedCommandLine && config.updateLevel === 1 /* RootNamesAndUpdate */ && !host.getParsedCommandLine) { + writeLog("Reloading new file names and options"); + Debug.assert(compilerOptions); + const fileNames = getFileNamesFromConfigSpecs( + config.parsedCommandLine.options.configFile.configFileSpecs, + getNormalizedAbsolutePath(getDirectoryPath(configFileName2), currentDirectory), + compilerOptions, + parseConfigFileHost + ); + config.parsedCommandLine = { ...config.parsedCommandLine, fileNames }; + config.updateLevel = void 0; + return config.parsedCommandLine; + } + } + writeLog(`Loading config file: ${configFileName2}`); + const parsedCommandLine = host.getParsedCommandLine ? host.getParsedCommandLine(configFileName2) : getParsedCommandLineFromConfigFileHost(configFileName2); + if (config) { + config.parsedCommandLine = parsedCommandLine; + config.updateLevel = void 0; + } else { + (parsedConfigs || (parsedConfigs = /* @__PURE__ */ new Map())).set(configPath, config = { parsedCommandLine }); + } + (staleWatches ?? (staleWatches = /* @__PURE__ */ new Map())).set(configPath, configFileName2); + return parsedCommandLine; + } + function getParsedCommandLineFromConfigFileHost(configFileName2) { + const onUnRecoverableConfigFileDiagnostic = parseConfigFileHost.onUnRecoverableConfigFileDiagnostic; + parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = noop; + const parsedCommandLine = getParsedCommandLineOfConfigFile( + configFileName2, + /*optionsToExtend*/ + void 0, + parseConfigFileHost, + extendedConfigCache || (extendedConfigCache = /* @__PURE__ */ new Map()), + watchOptionsToExtend + ); + parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = onUnRecoverableConfigFileDiagnostic; + return parsedCommandLine; + } + function onReleaseParsedCommandLine(fileName) { + var _a; + const path = toPath3(fileName); + const config = parsedConfigs == null ? void 0 : parsedConfigs.get(path); + if (!config) return; + parsedConfigs.delete(path); + if (config.watchedDirectories) clearMap(config.watchedDirectories, closeFileWatcherOf); + (_a = config.watcher) == null ? void 0 : _a.close(); + clearSharedExtendedConfigFileWatcher(path, sharedExtendedConfigFileWatchers); + } + function watchFilePath(path, file, callback, pollingInterval, options, watchType) { + return watchFile2(file, (fileName, eventKind) => callback(fileName, eventKind, path), pollingInterval, options, watchType); + } + function onSourceFileChange(fileName, eventKind, path) { + updateCachedSystemWithFile(fileName, path, eventKind); + if (eventKind === 2 /* Deleted */ && sourceFilesCache.has(path)) { + resolutionCache.invalidateResolutionOfFile(path); + } + nextSourceFileVersion(path); + scheduleProgramUpdate(); + } + function updateCachedSystemWithFile(fileName, path, eventKind) { + if (cachedDirectoryStructureHost) { + cachedDirectoryStructureHost.addOrDeleteFile(fileName, path, eventKind); + } + } + function watchMissingFilePath(missingFilePath, missingFileName) { + return (parsedConfigs == null ? void 0 : parsedConfigs.has(missingFilePath)) ? noopFileWatcher : watchFilePath( + missingFilePath, + missingFileName, + onMissingFileChange, + 500 /* Medium */, + watchOptions, + WatchType.MissingFile + ); + } + function onMissingFileChange(fileName, eventKind, missingFilePath) { + updateCachedSystemWithFile(fileName, missingFilePath, eventKind); + if (eventKind === 0 /* Created */ && missingFilesMap.has(missingFilePath)) { + missingFilesMap.get(missingFilePath).close(); + missingFilesMap.delete(missingFilePath); + nextSourceFileVersion(missingFilePath); + scheduleProgramUpdate(); + } + } + function watchConfigFileWildCardDirectories() { + updateWatchingWildcardDirectories( + watchedWildcardDirectories || (watchedWildcardDirectories = /* @__PURE__ */ new Map()), + wildcardDirectories, + watchWildcardDirectory + ); + } + function watchWildcardDirectory(directory, flags) { + return watchDirectory( + directory, + (fileOrDirectory) => { + Debug.assert(configFileName); + Debug.assert(compilerOptions); + const fileOrDirectoryPath = toPath3(fileOrDirectory); + if (cachedDirectoryStructureHost) { + cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); + } + nextSourceFileVersion(fileOrDirectoryPath); + if (isIgnoredFileFromWildCardWatching({ + watchedDirPath: toPath3(directory), + fileOrDirectory, + fileOrDirectoryPath, + configFileName, + extraFileExtensions, + options: compilerOptions, + program: getCurrentBuilderProgram() || rootFileNames, + currentDirectory, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + writeLog, + toPath: toPath3 + })) return; + if (updateLevel !== 2 /* Full */) { + updateLevel = 1 /* RootNamesAndUpdate */; + scheduleProgramUpdate(); + } + }, + flags, + watchOptions, + WatchType.WildcardDirectory + ); + } + function updateExtendedConfigFilesWatches(forProjectPath, options, watchOptions2, watchType) { + updateSharedExtendedConfigFileWatcher( + forProjectPath, + options, + sharedExtendedConfigFileWatchers || (sharedExtendedConfigFileWatchers = /* @__PURE__ */ new Map()), + (extendedConfigFileName, extendedConfigFilePath) => watchFile2( + extendedConfigFileName, + (_fileName, eventKind) => { + var _a; + updateCachedSystemWithFile(extendedConfigFileName, extendedConfigFilePath, eventKind); + if (extendedConfigCache) cleanExtendedConfigCache(extendedConfigCache, extendedConfigFilePath, toPath3); + const projects = (_a = sharedExtendedConfigFileWatchers.get(extendedConfigFilePath)) == null ? void 0 : _a.projects; + if (!(projects == null ? void 0 : projects.size)) return; + projects.forEach((projectPath) => { + if (configFileName && toPath3(configFileName) === projectPath) { + updateLevel = 2 /* Full */; + } else { + const config = parsedConfigs == null ? void 0 : parsedConfigs.get(projectPath); + if (config) config.updateLevel = 2 /* Full */; + resolutionCache.removeResolutionsFromProjectReferenceRedirects(projectPath); + } + scheduleProgramUpdate(); + }); + }, + 2e3 /* High */, + watchOptions2, + watchType + ), + toPath3 + ); + } + function watchReferencedProject(configFileName2, configPath, commandLine) { + var _a, _b, _c, _d; + commandLine.watcher || (commandLine.watcher = watchFile2( + configFileName2, + (_fileName, eventKind) => { + updateCachedSystemWithFile(configFileName2, configPath, eventKind); + const config = parsedConfigs == null ? void 0 : parsedConfigs.get(configPath); + if (config) config.updateLevel = 2 /* Full */; + resolutionCache.removeResolutionsFromProjectReferenceRedirects(configPath); + scheduleProgramUpdate(); + }, + 2e3 /* High */, + ((_a = commandLine.parsedCommandLine) == null ? void 0 : _a.watchOptions) || watchOptions, + WatchType.ConfigFileOfReferencedProject + )); + updateWatchingWildcardDirectories( + commandLine.watchedDirectories || (commandLine.watchedDirectories = /* @__PURE__ */ new Map()), + (_b = commandLine.parsedCommandLine) == null ? void 0 : _b.wildcardDirectories, + (directory, flags) => { + var _a2; + return watchDirectory( + directory, + (fileOrDirectory) => { + const fileOrDirectoryPath = toPath3(fileOrDirectory); + if (cachedDirectoryStructureHost) { + cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); + } + nextSourceFileVersion(fileOrDirectoryPath); + const config = parsedConfigs == null ? void 0 : parsedConfigs.get(configPath); + if (!(config == null ? void 0 : config.parsedCommandLine)) return; + if (isIgnoredFileFromWildCardWatching({ + watchedDirPath: toPath3(directory), + fileOrDirectory, + fileOrDirectoryPath, + configFileName: configFileName2, + options: config.parsedCommandLine.options, + program: config.parsedCommandLine.fileNames, + currentDirectory, + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + writeLog, + toPath: toPath3 + })) return; + if (config.updateLevel !== 2 /* Full */) { + config.updateLevel = 1 /* RootNamesAndUpdate */; + scheduleProgramUpdate(); + } + }, + flags, + ((_a2 = commandLine.parsedCommandLine) == null ? void 0 : _a2.watchOptions) || watchOptions, + WatchType.WildcardDirectoryOfReferencedProject + ); + } + ); + updateExtendedConfigFilesWatches( + configPath, + (_c = commandLine.parsedCommandLine) == null ? void 0 : _c.options, + ((_d = commandLine.parsedCommandLine) == null ? void 0 : _d.watchOptions) || watchOptions, + WatchType.ExtendedConfigOfReferencedProject + ); + } +} + +// src/compiler/tsbuild.ts +var UpToDateStatusType = /* @__PURE__ */ ((UpToDateStatusType2) => { + UpToDateStatusType2[UpToDateStatusType2["Unbuildable"] = 0] = "Unbuildable"; + UpToDateStatusType2[UpToDateStatusType2["UpToDate"] = 1] = "UpToDate"; + UpToDateStatusType2[UpToDateStatusType2["UpToDateWithUpstreamTypes"] = 2] = "UpToDateWithUpstreamTypes"; + UpToDateStatusType2[UpToDateStatusType2["OutputMissing"] = 3] = "OutputMissing"; + UpToDateStatusType2[UpToDateStatusType2["ErrorReadingFile"] = 4] = "ErrorReadingFile"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateWithSelf"] = 5] = "OutOfDateWithSelf"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateWithUpstream"] = 6] = "OutOfDateWithUpstream"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateBuildInfoWithPendingEmit"] = 7] = "OutOfDateBuildInfoWithPendingEmit"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateBuildInfoWithErrors"] = 8] = "OutOfDateBuildInfoWithErrors"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateOptions"] = 9] = "OutOfDateOptions"; + UpToDateStatusType2[UpToDateStatusType2["OutOfDateRoots"] = 10] = "OutOfDateRoots"; + UpToDateStatusType2[UpToDateStatusType2["UpstreamOutOfDate"] = 11] = "UpstreamOutOfDate"; + UpToDateStatusType2[UpToDateStatusType2["UpstreamBlocked"] = 12] = "UpstreamBlocked"; + UpToDateStatusType2[UpToDateStatusType2["ComputingUpstream"] = 13] = "ComputingUpstream"; + UpToDateStatusType2[UpToDateStatusType2["TsVersionOutputOfDate"] = 14] = "TsVersionOutputOfDate"; + UpToDateStatusType2[UpToDateStatusType2["UpToDateWithInputFileText"] = 15] = "UpToDateWithInputFileText"; + UpToDateStatusType2[UpToDateStatusType2["ContainerOnly"] = 16] = "ContainerOnly"; + UpToDateStatusType2[UpToDateStatusType2["ForceBuild"] = 17] = "ForceBuild"; + return UpToDateStatusType2; +})(UpToDateStatusType || {}); +function resolveConfigFileProjectName(project) { + if (fileExtensionIs(project, ".json" /* Json */)) { + return project; + } + return combinePaths(project, "tsconfig.json"); +} + +// src/compiler/tsbuildPublic.ts +var minimumDate = /* @__PURE__ */ new Date(-864e13); +function getOrCreateValueFromConfigFileMap(configFileMap, resolved, createT) { + const existingValue = configFileMap.get(resolved); + let newValue; + if (!existingValue) { + newValue = createT(); + configFileMap.set(resolved, newValue); + } + return existingValue || newValue; +} +function getOrCreateValueMapFromConfigFileMap(configFileMap, resolved) { + return getOrCreateValueFromConfigFileMap(configFileMap, resolved, () => /* @__PURE__ */ new Map()); +} +function getCurrentTime(host) { + return host.now ? host.now() : /* @__PURE__ */ new Date(); +} +function isCircularBuildOrder(buildOrder) { + return !!buildOrder && !!buildOrder.buildOrder; +} +function getBuildOrderFromAnyBuildOrder(anyBuildOrder) { + return isCircularBuildOrder(anyBuildOrder) ? anyBuildOrder.buildOrder : anyBuildOrder; +} +function createBuilderStatusReporter(system, pretty) { + return (diagnostic) => { + let output = pretty ? `[${formatColorAndReset(getLocaleTimeString(system), "\x1B[90m" /* Grey */)}] ` : `${getLocaleTimeString(system)} - `; + output += `${flattenDiagnosticMessageText(diagnostic.messageText, system.newLine)}${system.newLine + system.newLine}`; + system.write(output); + }; +} +function createSolutionBuilderHostBase(system, createProgram2, reportDiagnostic, reportSolutionBuilderStatus) { + const host = createProgramHost(system, createProgram2); + host.getModifiedTime = system.getModifiedTime ? (path) => system.getModifiedTime(path) : returnUndefined; + host.setModifiedTime = system.setModifiedTime ? (path, date) => system.setModifiedTime(path, date) : noop; + host.deleteFile = system.deleteFile ? (path) => system.deleteFile(path) : noop; + host.reportDiagnostic = reportDiagnostic || createDiagnosticReporter(system); + host.reportSolutionBuilderStatus = reportSolutionBuilderStatus || createBuilderStatusReporter(system); + host.now = maybeBind(system, system.now); + return host; +} +function createSolutionBuilderHost(system = sys, createProgram2, reportDiagnostic, reportSolutionBuilderStatus, reportErrorSummary2) { + const host = createSolutionBuilderHostBase(system, createProgram2, reportDiagnostic, reportSolutionBuilderStatus); + host.reportErrorSummary = reportErrorSummary2; + return host; +} +function createSolutionBuilderWithWatchHost(system = sys, createProgram2, reportDiagnostic, reportSolutionBuilderStatus, reportWatchStatus2) { + const host = createSolutionBuilderHostBase(system, createProgram2, reportDiagnostic, reportSolutionBuilderStatus); + const watchHost = createWatchHost(system, reportWatchStatus2); + copyProperties(host, watchHost); + return host; +} +function getCompilerOptionsOfBuildOptions(buildOptions) { + const result = {}; + commonOptionsWithBuild.forEach((option) => { + if (hasProperty(buildOptions, option.name)) result[option.name] = buildOptions[option.name]; + }); + result.tscBuild = true; + return result; +} +function createSolutionBuilder(host, rootNames, defaultOptions) { + return createSolutionBuilderWorker( + /*watch*/ + false, + host, + rootNames, + defaultOptions + ); +} +function createSolutionBuilderWithWatch(host, rootNames, defaultOptions, baseWatchOptions) { + return createSolutionBuilderWorker( + /*watch*/ + true, + host, + rootNames, + defaultOptions, + baseWatchOptions + ); +} +function createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) { + const host = hostOrHostWithWatch; + const hostWithWatch = hostOrHostWithWatch; + const baseCompilerOptions = getCompilerOptionsOfBuildOptions(options); + const compilerHost = createCompilerHostFromProgramHost(host, () => state.projectCompilerOptions); + setGetSourceFileAsHashVersioned(compilerHost); + compilerHost.getParsedCommandLine = (fileName) => parseConfigFile(state, fileName, toResolvedConfigFilePath(state, fileName)); + compilerHost.resolveModuleNameLiterals = maybeBind(host, host.resolveModuleNameLiterals); + compilerHost.resolveTypeReferenceDirectiveReferences = maybeBind(host, host.resolveTypeReferenceDirectiveReferences); + compilerHost.resolveLibrary = maybeBind(host, host.resolveLibrary); + compilerHost.resolveModuleNames = maybeBind(host, host.resolveModuleNames); + compilerHost.resolveTypeReferenceDirectives = maybeBind(host, host.resolveTypeReferenceDirectives); + compilerHost.getModuleResolutionCache = maybeBind(host, host.getModuleResolutionCache); + let moduleResolutionCache, typeReferenceDirectiveResolutionCache; + if (!compilerHost.resolveModuleNameLiterals && !compilerHost.resolveModuleNames) { + moduleResolutionCache = createModuleResolutionCache(compilerHost.getCurrentDirectory(), compilerHost.getCanonicalFileName); + compilerHost.resolveModuleNameLiterals = (moduleNames, containingFile, redirectedReference, options2, containingSourceFile) => loadWithModeAwareCache( + moduleNames, + containingFile, + redirectedReference, + options2, + containingSourceFile, + host, + moduleResolutionCache, + createModuleResolutionLoader + ); + compilerHost.getModuleResolutionCache = () => moduleResolutionCache; + } + if (!compilerHost.resolveTypeReferenceDirectiveReferences && !compilerHost.resolveTypeReferenceDirectives) { + typeReferenceDirectiveResolutionCache = createTypeReferenceDirectiveResolutionCache( + compilerHost.getCurrentDirectory(), + compilerHost.getCanonicalFileName, + /*options*/ + void 0, + moduleResolutionCache == null ? void 0 : moduleResolutionCache.getPackageJsonInfoCache(), + moduleResolutionCache == null ? void 0 : moduleResolutionCache.optionsToRedirectsKey + ); + compilerHost.resolveTypeReferenceDirectiveReferences = (typeDirectiveNames, containingFile, redirectedReference, options2, containingSourceFile) => loadWithModeAwareCache( + typeDirectiveNames, + containingFile, + redirectedReference, + options2, + containingSourceFile, + host, + typeReferenceDirectiveResolutionCache, + createTypeReferenceResolutionLoader + ); + } + let libraryResolutionCache; + if (!compilerHost.resolveLibrary) { + libraryResolutionCache = createModuleResolutionCache( + compilerHost.getCurrentDirectory(), + compilerHost.getCanonicalFileName, + /*options*/ + void 0, + moduleResolutionCache == null ? void 0 : moduleResolutionCache.getPackageJsonInfoCache() + ); + compilerHost.resolveLibrary = (libraryName, resolveFrom, options2) => resolveLibrary( + libraryName, + resolveFrom, + options2, + host, + libraryResolutionCache + ); + } + compilerHost.getBuildInfo = (fileName, configFilePath) => getBuildInfo3( + state, + fileName, + toResolvedConfigFilePath(state, configFilePath), + /*modifiedTime*/ + void 0 + ); + const { watchFile: watchFile2, watchDirectory, writeLog } = createWatchFactory(hostWithWatch, options); + const state = { + host, + hostWithWatch, + parseConfigFileHost: parseConfigHostFromCompilerHostLike(host), + write: maybeBind(host, host.trace), + // State of solution + options, + baseCompilerOptions, + rootNames, + baseWatchOptions, + resolvedConfigFilePaths: /* @__PURE__ */ new Map(), + configFileCache: /* @__PURE__ */ new Map(), + projectStatus: /* @__PURE__ */ new Map(), + extendedConfigCache: /* @__PURE__ */ new Map(), + buildInfoCache: /* @__PURE__ */ new Map(), + outputTimeStamps: /* @__PURE__ */ new Map(), + builderPrograms: /* @__PURE__ */ new Map(), + diagnostics: /* @__PURE__ */ new Map(), + projectPendingBuild: /* @__PURE__ */ new Map(), + projectErrorsReported: /* @__PURE__ */ new Map(), + compilerHost, + moduleResolutionCache, + typeReferenceDirectiveResolutionCache, + libraryResolutionCache, + // Mutable state + buildOrder: void 0, + readFileWithCache: (f) => host.readFile(f), + projectCompilerOptions: baseCompilerOptions, + cache: void 0, + allProjectBuildPending: true, + needsSummary: true, + watchAllProjectsPending: watch, + // Watch state + watch, + allWatchedWildcardDirectories: /* @__PURE__ */ new Map(), + allWatchedInputFiles: /* @__PURE__ */ new Map(), + allWatchedConfigFiles: /* @__PURE__ */ new Map(), + allWatchedExtendedConfigFiles: /* @__PURE__ */ new Map(), + allWatchedPackageJsonFiles: /* @__PURE__ */ new Map(), + filesWatched: /* @__PURE__ */ new Map(), + lastCachedPackageJsonLookups: /* @__PURE__ */ new Map(), + timerToBuildInvalidatedProject: void 0, + reportFileChangeDetected: false, + watchFile: watchFile2, + watchDirectory, + writeLog + }; + return state; +} +function toPath2(state, fileName) { + return toPath(fileName, state.compilerHost.getCurrentDirectory(), state.compilerHost.getCanonicalFileName); +} +function toResolvedConfigFilePath(state, fileName) { + const { resolvedConfigFilePaths } = state; + const path = resolvedConfigFilePaths.get(fileName); + if (path !== void 0) return path; + const resolvedPath = toPath2(state, fileName); + resolvedConfigFilePaths.set(fileName, resolvedPath); + return resolvedPath; +} +function isParsedCommandLine(entry) { + return !!entry.options; +} +function getCachedParsedConfigFile(state, configFilePath) { + const value = state.configFileCache.get(configFilePath); + return value && isParsedCommandLine(value) ? value : void 0; +} +function parseConfigFile(state, configFileName, configFilePath) { + const { configFileCache } = state; + const value = configFileCache.get(configFilePath); + if (value) { + return isParsedCommandLine(value) ? value : void 0; + } + mark("SolutionBuilder::beforeConfigFileParsing"); + let diagnostic; + const { parseConfigFileHost, baseCompilerOptions, baseWatchOptions, extendedConfigCache, host } = state; + let parsed; + if (host.getParsedCommandLine) { + parsed = host.getParsedCommandLine(configFileName); + if (!parsed) diagnostic = createCompilerDiagnostic(Diagnostics.File_0_not_found, configFileName); + } else { + parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = (d) => diagnostic = d; + parsed = getParsedCommandLineOfConfigFile(configFileName, baseCompilerOptions, parseConfigFileHost, extendedConfigCache, baseWatchOptions); + parseConfigFileHost.onUnRecoverableConfigFileDiagnostic = noop; + } + configFileCache.set(configFilePath, parsed || diagnostic); + mark("SolutionBuilder::afterConfigFileParsing"); + measure("SolutionBuilder::Config file parsing", "SolutionBuilder::beforeConfigFileParsing", "SolutionBuilder::afterConfigFileParsing"); + return parsed; +} +function resolveProjectName(state, name) { + return resolveConfigFileProjectName(resolvePath(state.compilerHost.getCurrentDirectory(), name)); +} +function createBuildOrder(state, roots) { + const temporaryMarks = /* @__PURE__ */ new Map(); + const permanentMarks = /* @__PURE__ */ new Map(); + const circularityReportStack = []; + let buildOrder; + let circularDiagnostics; + for (const root of roots) { + visit(root); + } + return circularDiagnostics ? { buildOrder: buildOrder || emptyArray, circularDiagnostics } : buildOrder || emptyArray; + function visit(configFileName, inCircularContext) { + const projPath = toResolvedConfigFilePath(state, configFileName); + if (permanentMarks.has(projPath)) return; + if (temporaryMarks.has(projPath)) { + if (!inCircularContext) { + (circularDiagnostics || (circularDiagnostics = [])).push( + createCompilerDiagnostic( + Diagnostics.Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0, + circularityReportStack.join("\r\n") + ) + ); + } + return; + } + temporaryMarks.set(projPath, true); + circularityReportStack.push(configFileName); + const parsed = parseConfigFile(state, configFileName, projPath); + if (parsed && parsed.projectReferences) { + for (const ref of parsed.projectReferences) { + const resolvedRefPath = resolveProjectName(state, ref.path); + visit(resolvedRefPath, inCircularContext || ref.circular); + } + } + circularityReportStack.pop(); + permanentMarks.set(projPath, true); + (buildOrder || (buildOrder = [])).push(configFileName); + } +} +function getBuildOrder(state) { + return state.buildOrder || createStateBuildOrder(state); +} +function createStateBuildOrder(state) { + const buildOrder = createBuildOrder(state, state.rootNames.map((f) => resolveProjectName(state, f))); + state.resolvedConfigFilePaths.clear(); + const currentProjects = new Set( + getBuildOrderFromAnyBuildOrder(buildOrder).map( + (resolved) => toResolvedConfigFilePath(state, resolved) + ) + ); + const noopOnDelete = { onDeleteValue: noop }; + mutateMapSkippingNewValues(state.configFileCache, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.projectStatus, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.builderPrograms, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.diagnostics, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.projectPendingBuild, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.projectErrorsReported, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.buildInfoCache, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.outputTimeStamps, currentProjects, noopOnDelete); + mutateMapSkippingNewValues(state.lastCachedPackageJsonLookups, currentProjects, noopOnDelete); + if (state.watch) { + mutateMapSkippingNewValues( + state.allWatchedConfigFiles, + currentProjects, + { onDeleteValue: closeFileWatcher } + ); + state.allWatchedExtendedConfigFiles.forEach((watcher) => { + watcher.projects.forEach((project) => { + if (!currentProjects.has(project)) { + watcher.projects.delete(project); + } + }); + watcher.close(); + }); + mutateMapSkippingNewValues( + state.allWatchedWildcardDirectories, + currentProjects, + { onDeleteValue: (existingMap) => existingMap.forEach(closeFileWatcherOf) } + ); + mutateMapSkippingNewValues( + state.allWatchedInputFiles, + currentProjects, + { onDeleteValue: (existingMap) => existingMap.forEach(closeFileWatcher) } + ); + mutateMapSkippingNewValues( + state.allWatchedPackageJsonFiles, + currentProjects, + { onDeleteValue: (existingMap) => existingMap.forEach(closeFileWatcher) } + ); + } + return state.buildOrder = buildOrder; +} +function getBuildOrderFor(state, project, onlyReferences) { + const resolvedProject = project && resolveProjectName(state, project); + const buildOrderFromState = getBuildOrder(state); + if (isCircularBuildOrder(buildOrderFromState)) return buildOrderFromState; + if (resolvedProject) { + const projectPath = toResolvedConfigFilePath(state, resolvedProject); + const projectIndex = findIndex( + buildOrderFromState, + (configFileName) => toResolvedConfigFilePath(state, configFileName) === projectPath + ); + if (projectIndex === -1) return void 0; + } + const buildOrder = resolvedProject ? createBuildOrder(state, [resolvedProject]) : buildOrderFromState; + Debug.assert(!isCircularBuildOrder(buildOrder)); + Debug.assert(!onlyReferences || resolvedProject !== void 0); + Debug.assert(!onlyReferences || buildOrder[buildOrder.length - 1] === resolvedProject); + return onlyReferences ? buildOrder.slice(0, buildOrder.length - 1) : buildOrder; +} +function enableCache(state) { + if (state.cache) { + disableCache(state); + } + const { compilerHost, host } = state; + const originalReadFileWithCache = state.readFileWithCache; + const originalGetSourceFile = compilerHost.getSourceFile; + const { + originalReadFile, + originalFileExists, + originalDirectoryExists, + originalCreateDirectory, + originalWriteFile, + getSourceFileWithCache, + readFileWithCache + } = changeCompilerHostLikeToUseCache( + host, + (fileName) => toPath2(state, fileName), + (...args) => originalGetSourceFile.call(compilerHost, ...args) + ); + state.readFileWithCache = readFileWithCache; + compilerHost.getSourceFile = getSourceFileWithCache; + state.cache = { + originalReadFile, + originalFileExists, + originalDirectoryExists, + originalCreateDirectory, + originalWriteFile, + originalReadFileWithCache, + originalGetSourceFile + }; +} +function disableCache(state) { + if (!state.cache) return; + const { cache, host, compilerHost, extendedConfigCache, moduleResolutionCache, typeReferenceDirectiveResolutionCache, libraryResolutionCache } = state; + host.readFile = cache.originalReadFile; + host.fileExists = cache.originalFileExists; + host.directoryExists = cache.originalDirectoryExists; + host.createDirectory = cache.originalCreateDirectory; + host.writeFile = cache.originalWriteFile; + compilerHost.getSourceFile = cache.originalGetSourceFile; + state.readFileWithCache = cache.originalReadFileWithCache; + extendedConfigCache.clear(); + moduleResolutionCache == null ? void 0 : moduleResolutionCache.clear(); + typeReferenceDirectiveResolutionCache == null ? void 0 : typeReferenceDirectiveResolutionCache.clear(); + libraryResolutionCache == null ? void 0 : libraryResolutionCache.clear(); + state.cache = void 0; +} +function clearProjectStatus(state, resolved) { + state.projectStatus.delete(resolved); + state.diagnostics.delete(resolved); +} +function addProjToQueue({ projectPendingBuild }, proj, updateLevel) { + const value = projectPendingBuild.get(proj); + if (value === void 0) { + projectPendingBuild.set(proj, updateLevel); + } else if (value < updateLevel) { + projectPendingBuild.set(proj, updateLevel); + } +} +function setupInitialBuild(state, cancellationToken) { + if (!state.allProjectBuildPending) return; + state.allProjectBuildPending = false; + if (state.options.watch) reportWatchStatus(state, Diagnostics.Starting_compilation_in_watch_mode); + enableCache(state); + const buildOrder = getBuildOrderFromAnyBuildOrder(getBuildOrder(state)); + buildOrder.forEach( + (configFileName) => state.projectPendingBuild.set( + toResolvedConfigFilePath(state, configFileName), + 0 /* Update */ + ) + ); + if (cancellationToken) { + cancellationToken.throwIfCancellationRequested(); + } +} +var InvalidatedProjectKind = /* @__PURE__ */ ((InvalidatedProjectKind2) => { + InvalidatedProjectKind2[InvalidatedProjectKind2["Build"] = 0] = "Build"; + InvalidatedProjectKind2[InvalidatedProjectKind2["UpdateOutputFileStamps"] = 1] = "UpdateOutputFileStamps"; + return InvalidatedProjectKind2; +})(InvalidatedProjectKind || {}); +function doneInvalidatedProject(state, projectPath) { + state.projectPendingBuild.delete(projectPath); + return state.diagnostics.has(projectPath) ? 1 /* DiagnosticsPresent_OutputsSkipped */ : 0 /* Success */; +} +function createUpdateOutputFileStampsProject(state, project, projectPath, config, buildOrder) { + let updateOutputFileStampsPending = true; + return { + kind: 1 /* UpdateOutputFileStamps */, + project, + projectPath, + buildOrder, + getCompilerOptions: () => config.options, + getCurrentDirectory: () => state.compilerHost.getCurrentDirectory(), + updateOutputFileStatmps: () => { + updateOutputTimestamps(state, config, projectPath); + updateOutputFileStampsPending = false; + }, + done: () => { + if (updateOutputFileStampsPending) { + updateOutputTimestamps(state, config, projectPath); + } + mark("SolutionBuilder::Timestamps only updates"); + return doneInvalidatedProject(state, projectPath); + } + }; +} +function createBuildOrUpdateInvalidedProject(state, project, projectPath, projectIndex, config, status, buildOrder) { + let step = 0 /* CreateProgram */; + let program; + let buildResult; + return { + kind: 0 /* Build */, + project, + projectPath, + buildOrder, + getCompilerOptions: () => config.options, + getCurrentDirectory: () => state.compilerHost.getCurrentDirectory(), + getBuilderProgram: () => withProgramOrUndefined(identity), + getProgram: () => withProgramOrUndefined( + (program2) => program2.getProgramOrUndefined() + ), + getSourceFile: (fileName) => withProgramOrUndefined( + (program2) => program2.getSourceFile(fileName) + ), + getSourceFiles: () => withProgramOrEmptyArray( + (program2) => program2.getSourceFiles() + ), + getOptionsDiagnostics: (cancellationToken) => withProgramOrEmptyArray( + (program2) => program2.getOptionsDiagnostics(cancellationToken) + ), + getGlobalDiagnostics: (cancellationToken) => withProgramOrEmptyArray( + (program2) => program2.getGlobalDiagnostics(cancellationToken) + ), + getConfigFileParsingDiagnostics: () => withProgramOrEmptyArray( + (program2) => program2.getConfigFileParsingDiagnostics() + ), + getSyntacticDiagnostics: (sourceFile, cancellationToken) => withProgramOrEmptyArray( + (program2) => program2.getSyntacticDiagnostics(sourceFile, cancellationToken) + ), + getAllDependencies: (sourceFile) => withProgramOrEmptyArray( + (program2) => program2.getAllDependencies(sourceFile) + ), + getSemanticDiagnostics: (sourceFile, cancellationToken) => withProgramOrEmptyArray( + (program2) => program2.getSemanticDiagnostics(sourceFile, cancellationToken) + ), + getSemanticDiagnosticsOfNextAffectedFile: (cancellationToken, ignoreSourceFile) => withProgramOrUndefined( + (program2) => program2.getSemanticDiagnosticsOfNextAffectedFile && program2.getSemanticDiagnosticsOfNextAffectedFile(cancellationToken, ignoreSourceFile) + ), + emit: (targetSourceFile, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers) => { + if (targetSourceFile || emitOnlyDtsFiles) { + return withProgramOrUndefined( + (program2) => { + var _a, _b; + return program2.emit(targetSourceFile, writeFile2, cancellationToken, emitOnlyDtsFiles, customTransformers || ((_b = (_a = state.host).getCustomTransformers) == null ? void 0 : _b.call(_a, project))); + } + ); + } + executeSteps(0 /* CreateProgram */, cancellationToken); + return emit(writeFile2, cancellationToken, customTransformers); + }, + done + }; + function done(cancellationToken, writeFile2, customTransformers) { + executeSteps(3 /* Done */, cancellationToken, writeFile2, customTransformers); + mark("SolutionBuilder::Projects built"); + return doneInvalidatedProject(state, projectPath); + } + function withProgramOrUndefined(action) { + executeSteps(0 /* CreateProgram */); + return program && action(program); + } + function withProgramOrEmptyArray(action) { + return withProgramOrUndefined(action) || emptyArray; + } + function createProgram2() { + var _a, _b, _c; + Debug.assert(program === void 0); + if (state.options.dry) { + reportStatus(state, Diagnostics.A_non_dry_build_would_build_project_0, project); + buildResult = 1 /* Success */; + step = 2 /* QueueReferencingProjects */; + return; + } + if (state.options.verbose) reportStatus(state, Diagnostics.Building_project_0, project); + if (config.fileNames.length === 0) { + reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); + buildResult = 0 /* None */; + step = 2 /* QueueReferencingProjects */; + return; + } + const { host, compilerHost } = state; + state.projectCompilerOptions = config.options; + (_a = state.moduleResolutionCache) == null ? void 0 : _a.update(config.options); + (_b = state.typeReferenceDirectiveResolutionCache) == null ? void 0 : _b.update(config.options); + program = host.createProgram( + config.fileNames, + config.options, + compilerHost, + getOldProgram(state, projectPath, config), + getConfigFileParsingDiagnostics(config), + config.projectReferences + ); + if (state.watch) { + const internalMap = (_c = state.moduleResolutionCache) == null ? void 0 : _c.getPackageJsonInfoCache().getInternalMap(); + state.lastCachedPackageJsonLookups.set( + projectPath, + internalMap && new Set(arrayFrom( + internalMap.values(), + (data) => state.host.realpath && (isPackageJsonInfo(data) || data.directoryExists) ? state.host.realpath(combinePaths(data.packageDirectory, "package.json")) : combinePaths(data.packageDirectory, "package.json") + )) + ); + state.builderPrograms.set(projectPath, program); + } + step++; + } + function emit(writeFileCallback, cancellationToken, customTransformers) { + var _a, _b, _c; + Debug.assertIsDefined(program); + Debug.assert(step === 1 /* Emit */); + const { host, compilerHost } = state; + const emittedOutputs = /* @__PURE__ */ new Map(); + const options = program.getCompilerOptions(); + const isIncremental = isIncrementalCompilation(options); + let outputTimeStampMap; + let now; + const { emitResult, diagnostics } = emitFilesAndReportErrors( + program, + (d) => host.reportDiagnostic(d), + state.write, + /*reportSummary*/ + void 0, + (name, text, writeByteOrderMark, onError, sourceFiles, data) => { + var _a2; + const path = toPath2(state, name); + emittedOutputs.set(toPath2(state, name), name); + if (data == null ? void 0 : data.buildInfo) { + now || (now = getCurrentTime(state.host)); + const isChangedSignature2 = (_a2 = program.hasChangedEmitSignature) == null ? void 0 : _a2.call(program); + const existing = getBuildInfoCacheEntry(state, name, projectPath); + if (existing) { + existing.buildInfo = data.buildInfo; + existing.modifiedTime = now; + if (isChangedSignature2) existing.latestChangedDtsTime = now; + } else { + state.buildInfoCache.set(projectPath, { + path: toPath2(state, name), + buildInfo: data.buildInfo, + modifiedTime: now, + latestChangedDtsTime: isChangedSignature2 ? now : void 0 + }); + } + } + const modifiedTime = (data == null ? void 0 : data.differsOnlyInMap) ? getModifiedTime(state.host, name) : void 0; + (writeFileCallback || compilerHost.writeFile)( + name, + text, + writeByteOrderMark, + onError, + sourceFiles, + data + ); + if (data == null ? void 0 : data.differsOnlyInMap) state.host.setModifiedTime(name, modifiedTime); + else if (!isIncremental && state.watch) { + (outputTimeStampMap || (outputTimeStampMap = getOutputTimeStampMap(state, projectPath))).set(path, now || (now = getCurrentTime(state.host))); + } + }, + cancellationToken, + /*emitOnlyDtsFiles*/ + void 0, + customTransformers || ((_b = (_a = state.host).getCustomTransformers) == null ? void 0 : _b.call(_a, project)) + ); + if ((!options.noEmitOnError || !diagnostics.length) && (emittedOutputs.size || status.type !== 8 /* OutOfDateBuildInfoWithErrors */)) { + updateOutputTimestampsWorker(state, config, projectPath, Diagnostics.Updating_unchanged_output_timestamps_of_project_0, emittedOutputs); + } + state.projectErrorsReported.set(projectPath, true); + buildResult = ((_c = program.hasChangedEmitSignature) == null ? void 0 : _c.call(program)) ? 0 /* None */ : 2 /* DeclarationOutputUnchanged */; + if (!diagnostics.length) { + state.diagnostics.delete(projectPath); + state.projectStatus.set(projectPath, { + type: 1 /* UpToDate */, + oldestOutputFileName: firstOrUndefinedIterator(emittedOutputs.values()) ?? getFirstProjectOutput(config, !host.useCaseSensitiveFileNames()) + }); + } else { + state.diagnostics.set(projectPath, diagnostics); + state.projectStatus.set(projectPath, { type: 0 /* Unbuildable */, reason: `it had errors` }); + buildResult |= 4 /* AnyErrors */; + } + afterProgramDone(state, program); + step = 2 /* QueueReferencingProjects */; + return emitResult; + } + function executeSteps(till, cancellationToken, writeFile2, customTransformers) { + while (step <= till && step < 3 /* Done */) { + const currentStep = step; + switch (step) { + case 0 /* CreateProgram */: + createProgram2(); + break; + case 1 /* Emit */: + emit(writeFile2, cancellationToken, customTransformers); + break; + case 2 /* QueueReferencingProjects */: + queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, Debug.checkDefined(buildResult)); + step++; + break; + // Should never be done + case 3 /* Done */: + default: + assertType(step); + } + Debug.assert(step > currentStep); + } + } +} +function getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue) { + if (!state.projectPendingBuild.size) return void 0; + if (isCircularBuildOrder(buildOrder)) return void 0; + const { options, projectPendingBuild } = state; + for (let projectIndex = 0; projectIndex < buildOrder.length; projectIndex++) { + const project = buildOrder[projectIndex]; + const projectPath = toResolvedConfigFilePath(state, project); + const updateLevel = state.projectPendingBuild.get(projectPath); + if (updateLevel === void 0) continue; + if (reportQueue) { + reportQueue = false; + reportBuildQueue(state, buildOrder); + } + const config = parseConfigFile(state, project, projectPath); + if (!config) { + reportParseConfigFileDiagnostic(state, projectPath); + projectPendingBuild.delete(projectPath); + continue; + } + if (updateLevel === 2 /* Full */) { + watchConfigFile(state, project, projectPath, config); + watchExtendedConfigFiles(state, projectPath, config); + watchWildCardDirectories(state, project, projectPath, config); + watchInputFiles(state, project, projectPath, config); + watchPackageJsonFiles(state, project, projectPath, config); + } else if (updateLevel === 1 /* RootNamesAndUpdate */) { + config.fileNames = getFileNamesFromConfigSpecs(config.options.configFile.configFileSpecs, getDirectoryPath(project), config.options, state.parseConfigFileHost); + updateErrorForNoInputFiles( + config.fileNames, + project, + config.options.configFile.configFileSpecs, + config.errors, + canJsonReportNoInputFiles(config.raw) + ); + watchInputFiles(state, project, projectPath, config); + watchPackageJsonFiles(state, project, projectPath, config); + } + const status = getUpToDateStatus(state, config, projectPath); + if (!options.force) { + if (status.type === 1 /* UpToDate */) { + verboseReportProjectStatus(state, project, status); + reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); + projectPendingBuild.delete(projectPath); + if (options.dry) { + reportStatus(state, Diagnostics.Project_0_is_up_to_date, project); + } + continue; + } + if (status.type === 2 /* UpToDateWithUpstreamTypes */ || status.type === 15 /* UpToDateWithInputFileText */) { + reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); + return { + kind: 1 /* UpdateOutputFileStamps */, + status, + project, + projectPath, + projectIndex, + config + }; + } + } + if (status.type === 12 /* UpstreamBlocked */) { + verboseReportProjectStatus(state, project, status); + reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); + projectPendingBuild.delete(projectPath); + if (options.verbose) { + reportStatus( + state, + status.upstreamProjectBlocked ? Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_was_not_built : Diagnostics.Skipping_build_of_project_0_because_its_dependency_1_has_errors, + project, + status.upstreamProjectName + ); + } + continue; + } + if (status.type === 16 /* ContainerOnly */) { + verboseReportProjectStatus(state, project, status); + reportAndStoreErrors(state, projectPath, getConfigFileParsingDiagnostics(config)); + projectPendingBuild.delete(projectPath); + continue; + } + return { + kind: 0 /* Build */, + status, + project, + projectPath, + projectIndex, + config + }; + } + return void 0; +} +function createInvalidatedProjectWithInfo(state, info, buildOrder) { + verboseReportProjectStatus(state, info.project, info.status); + return info.kind !== 1 /* UpdateOutputFileStamps */ ? createBuildOrUpdateInvalidedProject( + state, + info.project, + info.projectPath, + info.projectIndex, + info.config, + info.status, + buildOrder + ) : createUpdateOutputFileStampsProject( + state, + info.project, + info.projectPath, + info.config, + buildOrder + ); +} +function getNextInvalidatedProject(state, buildOrder, reportQueue) { + const info = getNextInvalidatedProjectCreateInfo(state, buildOrder, reportQueue); + if (!info) return info; + return createInvalidatedProjectWithInfo(state, info, buildOrder); +} +function getOldProgram({ options, builderPrograms, compilerHost }, proj, parsed) { + if (options.force) return void 0; + const value = builderPrograms.get(proj); + if (value) return value; + return readBuilderProgram(parsed.options, compilerHost); +} +function afterProgramDone(state, program) { + if (program) { + if (state.host.afterProgramEmitAndDiagnostics) { + state.host.afterProgramEmitAndDiagnostics(program); + } + program.releaseProgram(); + } + state.projectCompilerOptions = state.baseCompilerOptions; +} +function isFileWatcherWithModifiedTime(value) { + return !!value.watcher; +} +function getModifiedTime2(state, fileName) { + const path = toPath2(state, fileName); + const existing = state.filesWatched.get(path); + if (state.watch && !!existing) { + if (!isFileWatcherWithModifiedTime(existing)) return existing; + if (existing.modifiedTime) return existing.modifiedTime; + } + const result = getModifiedTime(state.host, fileName); + if (state.watch) { + if (existing) existing.modifiedTime = result; + else state.filesWatched.set(path, result); + } + return result; +} +function watchFile(state, file, callback, pollingInterval, options, watchType, project) { + const path = toPath2(state, file); + const existing = state.filesWatched.get(path); + if (existing && isFileWatcherWithModifiedTime(existing)) { + existing.callbacks.push(callback); + } else { + const watcher = state.watchFile( + file, + (fileName, eventKind, modifiedTime) => { + const existing2 = Debug.checkDefined(state.filesWatched.get(path)); + Debug.assert(isFileWatcherWithModifiedTime(existing2)); + existing2.modifiedTime = modifiedTime; + existing2.callbacks.forEach((cb) => cb(fileName, eventKind, modifiedTime)); + }, + pollingInterval, + options, + watchType, + project + ); + state.filesWatched.set(path, { callbacks: [callback], watcher, modifiedTime: existing }); + } + return { + close: () => { + const existing2 = Debug.checkDefined(state.filesWatched.get(path)); + Debug.assert(isFileWatcherWithModifiedTime(existing2)); + if (existing2.callbacks.length === 1) { + state.filesWatched.delete(path); + closeFileWatcherOf(existing2); + } else { + unorderedRemoveItem(existing2.callbacks, callback); + } + } + }; +} +function getOutputTimeStampMap(state, resolvedConfigFilePath) { + if (!state.watch) return void 0; + let result = state.outputTimeStamps.get(resolvedConfigFilePath); + if (!result) state.outputTimeStamps.set(resolvedConfigFilePath, result = /* @__PURE__ */ new Map()); + return result; +} +function getBuildInfoCacheEntry(state, buildInfoPath, resolvedConfigPath) { + const path = toPath2(state, buildInfoPath); + const existing = state.buildInfoCache.get(resolvedConfigPath); + return (existing == null ? void 0 : existing.path) === path ? existing : void 0; +} +function getBuildInfo3(state, buildInfoPath, resolvedConfigPath, modifiedTime) { + const path = toPath2(state, buildInfoPath); + const existing = state.buildInfoCache.get(resolvedConfigPath); + if (existing !== void 0 && existing.path === path) { + return existing.buildInfo || void 0; + } + const value = state.readFileWithCache(buildInfoPath); + const buildInfo = value ? getBuildInfo(buildInfoPath, value) : void 0; + state.buildInfoCache.set(resolvedConfigPath, { path, buildInfo: buildInfo || false, modifiedTime: modifiedTime || missingFileModifiedTime }); + return buildInfo; +} +function checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName) { + const tsconfigTime = getModifiedTime2(state, configFile); + if (oldestOutputFileTime < tsconfigTime) { + return { + type: 5 /* OutOfDateWithSelf */, + outOfDateOutputFileName: oldestOutputFileName, + newerInputFileName: configFile + }; + } +} +function getUpToDateStatusWorker(state, project, resolvedPath) { + var _a, _b, _c, _d, _e; + if (isSolutionConfig(project)) return { type: 16 /* ContainerOnly */ }; + let referenceStatuses; + const force = !!state.options.force; + if (project.projectReferences) { + state.projectStatus.set(resolvedPath, { type: 13 /* ComputingUpstream */ }); + for (const ref of project.projectReferences) { + const resolvedRef = resolveProjectReferencePath(ref); + const resolvedRefPath = toResolvedConfigFilePath(state, resolvedRef); + const resolvedConfig = parseConfigFile(state, resolvedRef, resolvedRefPath); + const refStatus = getUpToDateStatus(state, resolvedConfig, resolvedRefPath); + if (refStatus.type === 13 /* ComputingUpstream */ || refStatus.type === 16 /* ContainerOnly */) { + continue; + } + if (state.options.stopBuildOnErrors && (refStatus.type === 0 /* Unbuildable */ || refStatus.type === 12 /* UpstreamBlocked */)) { + return { + type: 12 /* UpstreamBlocked */, + upstreamProjectName: ref.path, + upstreamProjectBlocked: refStatus.type === 12 /* UpstreamBlocked */ + }; + } + if (!force) (referenceStatuses || (referenceStatuses = [])).push({ ref, refStatus, resolvedRefPath, resolvedConfig }); + } + } + if (force) return { type: 17 /* ForceBuild */ }; + const { host } = state; + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(project.options); + const isIncremental = isIncrementalCompilation(project.options); + let buildInfoCacheEntry = getBuildInfoCacheEntry(state, buildInfoPath, resolvedPath); + const buildInfoTime = (buildInfoCacheEntry == null ? void 0 : buildInfoCacheEntry.modifiedTime) || getModifiedTime(host, buildInfoPath); + if (buildInfoTime === missingFileModifiedTime) { + if (!buildInfoCacheEntry) { + state.buildInfoCache.set(resolvedPath, { + path: toPath2(state, buildInfoPath), + buildInfo: false, + modifiedTime: buildInfoTime + }); + } + return { + type: 3 /* OutputMissing */, + missingOutputFileName: buildInfoPath + }; + } + const buildInfo = getBuildInfo3(state, buildInfoPath, resolvedPath, buildInfoTime); + if (!buildInfo) { + return { + type: 4 /* ErrorReadingFile */, + fileName: buildInfoPath + }; + } + const incrementalBuildInfo = isIncremental && isIncrementalBuildInfo(buildInfo) ? buildInfo : void 0; + if ((incrementalBuildInfo || !isIncremental) && buildInfo.version !== version) { + return { + type: 14 /* TsVersionOutputOfDate */, + version: buildInfo.version + }; + } + if (!project.options.noCheck && (buildInfo.errors || // TODO: syntax errors???? + buildInfo.checkPending)) { + return { + type: 8 /* OutOfDateBuildInfoWithErrors */, + buildInfoFile: buildInfoPath + }; + } + if (incrementalBuildInfo) { + if (!project.options.noCheck && (((_a = incrementalBuildInfo.changeFileSet) == null ? void 0 : _a.length) || ((_b = incrementalBuildInfo.semanticDiagnosticsPerFile) == null ? void 0 : _b.length) || getEmitDeclarations(project.options) && ((_c = incrementalBuildInfo.emitDiagnosticsPerFile) == null ? void 0 : _c.length))) { + return { + type: 8 /* OutOfDateBuildInfoWithErrors */, + buildInfoFile: buildInfoPath + }; + } + if (!project.options.noEmit && (((_d = incrementalBuildInfo.changeFileSet) == null ? void 0 : _d.length) || ((_e = incrementalBuildInfo.affectedFilesPendingEmit) == null ? void 0 : _e.length) || incrementalBuildInfo.pendingEmit !== void 0)) { + return { + type: 7 /* OutOfDateBuildInfoWithPendingEmit */, + buildInfoFile: buildInfoPath + }; + } + if ((!project.options.noEmit || project.options.noEmit && getEmitDeclarations(project.options)) && getPendingEmitKindWithSeen( + project.options, + incrementalBuildInfo.options || {}, + /*emitOnlyDtsFiles*/ + void 0, + !!project.options.noEmit + )) { + return { + type: 9 /* OutOfDateOptions */, + buildInfoFile: buildInfoPath + }; + } + } + let oldestOutputFileTime = buildInfoTime; + let oldestOutputFileName = buildInfoPath; + let newestInputFileName = void 0; + let newestInputFileTime = minimumDate; + let pseudoInputUpToDate = false; + const seenRoots = /* @__PURE__ */ new Set(); + let buildInfoVersionMap; + for (const inputFile of project.fileNames) { + const inputTime = getModifiedTime2(state, inputFile); + if (inputTime === missingFileModifiedTime) { + return { + type: 0 /* Unbuildable */, + reason: `${inputFile} does not exist` + }; + } + const inputPath = toPath2(state, inputFile); + if (buildInfoTime < inputTime) { + let version2; + let currentVersion; + if (incrementalBuildInfo) { + if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(incrementalBuildInfo, buildInfoPath, host); + const resolvedInputPath = buildInfoVersionMap.roots.get(inputPath); + version2 = buildInfoVersionMap.fileInfos.get(resolvedInputPath ?? inputPath); + const text = version2 ? state.readFileWithCache(resolvedInputPath ?? inputFile) : void 0; + currentVersion = text !== void 0 ? getSourceFileVersionAsHashFromText(host, text) : void 0; + if (version2 && version2 === currentVersion) pseudoInputUpToDate = true; + } + if (!version2 || version2 !== currentVersion) { + return { + type: 5 /* OutOfDateWithSelf */, + outOfDateOutputFileName: buildInfoPath, + newerInputFileName: inputFile + }; + } + } + if (inputTime > newestInputFileTime) { + newestInputFileName = inputFile; + newestInputFileTime = inputTime; + } + seenRoots.add(inputPath); + } + let existingRoot; + if (incrementalBuildInfo) { + if (!buildInfoVersionMap) buildInfoVersionMap = getBuildInfoFileVersionMap(incrementalBuildInfo, buildInfoPath, host); + existingRoot = forEachEntry( + buildInfoVersionMap.roots, + // File was root file when project was built but its not any more + (_resolved, existingRoot2) => !seenRoots.has(existingRoot2) ? existingRoot2 : void 0 + ); + } else { + existingRoot = forEach( + getNonIncrementalBuildInfoRoots(buildInfo, buildInfoPath, host), + (root) => !seenRoots.has(root) ? root : void 0 + ); + } + if (existingRoot) { + return { + type: 10 /* OutOfDateRoots */, + buildInfoFile: buildInfoPath, + inputFile: existingRoot + }; + } + if (!isIncremental) { + const outputs = getAllProjectOutputs(project, !host.useCaseSensitiveFileNames()); + const outputTimeStampMap = getOutputTimeStampMap(state, resolvedPath); + for (const output of outputs) { + if (output === buildInfoPath) continue; + const path = toPath2(state, output); + let outputTime = outputTimeStampMap == null ? void 0 : outputTimeStampMap.get(path); + if (!outputTime) { + outputTime = getModifiedTime(state.host, output); + outputTimeStampMap == null ? void 0 : outputTimeStampMap.set(path, outputTime); + } + if (outputTime === missingFileModifiedTime) { + return { + type: 3 /* OutputMissing */, + missingOutputFileName: output + }; + } + if (outputTime < newestInputFileTime) { + return { + type: 5 /* OutOfDateWithSelf */, + outOfDateOutputFileName: output, + newerInputFileName: newestInputFileName + }; + } + if (outputTime < oldestOutputFileTime) { + oldestOutputFileTime = outputTime; + oldestOutputFileName = output; + } + } + } + let pseudoUpToDate = false; + if (referenceStatuses) { + for (const { ref, refStatus, resolvedConfig, resolvedRefPath } of referenceStatuses) { + if (refStatus.newestInputFileTime && refStatus.newestInputFileTime <= oldestOutputFileTime) { + continue; + } + if (hasSameBuildInfo(state, buildInfoCacheEntry ?? (buildInfoCacheEntry = state.buildInfoCache.get(resolvedPath)), resolvedRefPath)) { + return { + type: 6 /* OutOfDateWithUpstream */, + outOfDateOutputFileName: buildInfoPath, + newerProjectName: ref.path + }; + } + const newestDeclarationFileContentChangedTime = getLatestChangedDtsTime(state, resolvedConfig.options, resolvedRefPath); + if (newestDeclarationFileContentChangedTime && newestDeclarationFileContentChangedTime <= oldestOutputFileTime) { + pseudoUpToDate = true; + continue; + } + Debug.assert(oldestOutputFileName !== void 0, "Should have an oldest output filename here"); + return { + type: 6 /* OutOfDateWithUpstream */, + outOfDateOutputFileName: oldestOutputFileName, + newerProjectName: ref.path + }; + } + } + const configStatus = checkConfigFileUpToDateStatus(state, project.options.configFilePath, oldestOutputFileTime, oldestOutputFileName); + if (configStatus) return configStatus; + const extendedConfigStatus = forEach(project.options.configFile.extendedSourceFiles || emptyArray, (configFile) => checkConfigFileUpToDateStatus(state, configFile, oldestOutputFileTime, oldestOutputFileName)); + if (extendedConfigStatus) return extendedConfigStatus; + const packageJsonLookups = state.lastCachedPackageJsonLookups.get(resolvedPath); + const dependentPackageFileStatus = packageJsonLookups && forEachKey( + packageJsonLookups, + (path) => checkConfigFileUpToDateStatus(state, path, oldestOutputFileTime, oldestOutputFileName) + ); + if (dependentPackageFileStatus) return dependentPackageFileStatus; + return { + type: pseudoUpToDate ? 2 /* UpToDateWithUpstreamTypes */ : pseudoInputUpToDate ? 15 /* UpToDateWithInputFileText */ : 1 /* UpToDate */, + newestInputFileTime, + newestInputFileName, + oldestOutputFileName + }; +} +function hasSameBuildInfo(state, buildInfoCacheEntry, resolvedRefPath) { + const refBuildInfo = state.buildInfoCache.get(resolvedRefPath); + return refBuildInfo.path === buildInfoCacheEntry.path; +} +function getUpToDateStatus(state, project, resolvedPath) { + if (project === void 0) { + return { type: 0 /* Unbuildable */, reason: "config file deleted mid-build" }; + } + const prior = state.projectStatus.get(resolvedPath); + if (prior !== void 0) { + return prior; + } + mark("SolutionBuilder::beforeUpToDateCheck"); + const actual = getUpToDateStatusWorker(state, project, resolvedPath); + mark("SolutionBuilder::afterUpToDateCheck"); + measure("SolutionBuilder::Up-to-date check", "SolutionBuilder::beforeUpToDateCheck", "SolutionBuilder::afterUpToDateCheck"); + state.projectStatus.set(resolvedPath, actual); + return actual; +} +function updateOutputTimestampsWorker(state, proj, projectPath, verboseMessage, skipOutputs) { + if (proj.options.noEmit) return; + let now; + const buildInfoPath = getTsBuildInfoEmitOutputFilePath(proj.options); + const isIncremental = isIncrementalCompilation(proj.options); + if (buildInfoPath && isIncremental) { + if (!(skipOutputs == null ? void 0 : skipOutputs.has(toPath2(state, buildInfoPath)))) { + if (!!state.options.verbose) reportStatus(state, verboseMessage, proj.options.configFilePath); + state.host.setModifiedTime(buildInfoPath, now = getCurrentTime(state.host)); + getBuildInfoCacheEntry(state, buildInfoPath, projectPath).modifiedTime = now; + } + state.outputTimeStamps.delete(projectPath); + return; + } + const { host } = state; + const outputs = getAllProjectOutputs(proj, !host.useCaseSensitiveFileNames()); + const outputTimeStampMap = getOutputTimeStampMap(state, projectPath); + const modifiedOutputs = outputTimeStampMap ? /* @__PURE__ */ new Set() : void 0; + if (!skipOutputs || outputs.length !== skipOutputs.size) { + let reportVerbose = !!state.options.verbose; + for (const file of outputs) { + const path = toPath2(state, file); + if (skipOutputs == null ? void 0 : skipOutputs.has(path)) continue; + if (reportVerbose) { + reportVerbose = false; + reportStatus(state, verboseMessage, proj.options.configFilePath); + } + host.setModifiedTime(file, now || (now = getCurrentTime(state.host))); + if (file === buildInfoPath) getBuildInfoCacheEntry(state, buildInfoPath, projectPath).modifiedTime = now; + else if (outputTimeStampMap) { + outputTimeStampMap.set(path, now); + modifiedOutputs.add(path); + } + } + } + outputTimeStampMap == null ? void 0 : outputTimeStampMap.forEach((_value, key) => { + if (!(skipOutputs == null ? void 0 : skipOutputs.has(key)) && !modifiedOutputs.has(key)) outputTimeStampMap.delete(key); + }); +} +function getLatestChangedDtsTime(state, options, resolvedConfigPath) { + if (!options.composite) return void 0; + const entry = Debug.checkDefined(state.buildInfoCache.get(resolvedConfigPath)); + if (entry.latestChangedDtsTime !== void 0) return entry.latestChangedDtsTime || void 0; + const latestChangedDtsTime = entry.buildInfo && isIncrementalBuildInfo(entry.buildInfo) && entry.buildInfo.latestChangedDtsFile ? state.host.getModifiedTime(getNormalizedAbsolutePath(entry.buildInfo.latestChangedDtsFile, getDirectoryPath(entry.path))) : void 0; + entry.latestChangedDtsTime = latestChangedDtsTime || false; + return latestChangedDtsTime; +} +function updateOutputTimestamps(state, proj, resolvedPath) { + if (state.options.dry) { + return reportStatus(state, Diagnostics.A_non_dry_build_would_update_timestamps_for_output_of_project_0, proj.options.configFilePath); + } + updateOutputTimestampsWorker(state, proj, resolvedPath, Diagnostics.Updating_output_timestamps_of_project_0); + state.projectStatus.set(resolvedPath, { + type: 1 /* UpToDate */, + oldestOutputFileName: getFirstProjectOutput(proj, !state.host.useCaseSensitiveFileNames()) + }); +} +function queueReferencingProjects(state, project, projectPath, projectIndex, config, buildOrder, buildResult) { + if (state.options.stopBuildOnErrors && buildResult & 4 /* AnyErrors */) return; + if (!config.options.composite) return; + for (let index = projectIndex + 1; index < buildOrder.length; index++) { + const nextProject = buildOrder[index]; + const nextProjectPath = toResolvedConfigFilePath(state, nextProject); + if (state.projectPendingBuild.has(nextProjectPath)) continue; + const nextProjectConfig = parseConfigFile(state, nextProject, nextProjectPath); + if (!nextProjectConfig || !nextProjectConfig.projectReferences) continue; + for (const ref of nextProjectConfig.projectReferences) { + const resolvedRefPath = resolveProjectName(state, ref.path); + if (toResolvedConfigFilePath(state, resolvedRefPath) !== projectPath) continue; + const status = state.projectStatus.get(nextProjectPath); + if (status) { + switch (status.type) { + case 1 /* UpToDate */: + if (buildResult & 2 /* DeclarationOutputUnchanged */) { + status.type = 2 /* UpToDateWithUpstreamTypes */; + break; + } + // falls through + case 15 /* UpToDateWithInputFileText */: + case 2 /* UpToDateWithUpstreamTypes */: + if (!(buildResult & 2 /* DeclarationOutputUnchanged */)) { + state.projectStatus.set(nextProjectPath, { + type: 6 /* OutOfDateWithUpstream */, + outOfDateOutputFileName: status.oldestOutputFileName, + newerProjectName: project + }); + } + break; + case 12 /* UpstreamBlocked */: + if (toResolvedConfigFilePath(state, resolveProjectName(state, status.upstreamProjectName)) === projectPath) { + clearProjectStatus(state, nextProjectPath); + } + break; + } + } + addProjToQueue(state, nextProjectPath, 0 /* Update */); + break; + } + } +} +function build(state, project, cancellationToken, writeFile2, getCustomTransformers, onlyReferences) { + mark("SolutionBuilder::beforeBuild"); + const result = buildWorker(state, project, cancellationToken, writeFile2, getCustomTransformers, onlyReferences); + mark("SolutionBuilder::afterBuild"); + measure("SolutionBuilder::Build", "SolutionBuilder::beforeBuild", "SolutionBuilder::afterBuild"); + return result; +} +function buildWorker(state, project, cancellationToken, writeFile2, getCustomTransformers, onlyReferences) { + const buildOrder = getBuildOrderFor(state, project, onlyReferences); + if (!buildOrder) return 3 /* InvalidProject_OutputsSkipped */; + setupInitialBuild(state, cancellationToken); + let reportQueue = true; + let successfulProjects = 0; + while (true) { + const invalidatedProject = getNextInvalidatedProject(state, buildOrder, reportQueue); + if (!invalidatedProject) break; + reportQueue = false; + invalidatedProject.done(cancellationToken, writeFile2, getCustomTransformers == null ? void 0 : getCustomTransformers(invalidatedProject.project)); + if (!state.diagnostics.has(invalidatedProject.projectPath)) successfulProjects++; + } + disableCache(state); + reportErrorSummary(state, buildOrder); + startWatching(state, buildOrder); + return isCircularBuildOrder(buildOrder) ? 4 /* ProjectReferenceCycle_OutputsSkipped */ : !buildOrder.some((p) => state.diagnostics.has(toResolvedConfigFilePath(state, p))) ? 0 /* Success */ : successfulProjects ? 2 /* DiagnosticsPresent_OutputsGenerated */ : 1 /* DiagnosticsPresent_OutputsSkipped */; +} +function clean(state, project, onlyReferences) { + mark("SolutionBuilder::beforeClean"); + const result = cleanWorker(state, project, onlyReferences); + mark("SolutionBuilder::afterClean"); + measure("SolutionBuilder::Clean", "SolutionBuilder::beforeClean", "SolutionBuilder::afterClean"); + return result; +} +function cleanWorker(state, project, onlyReferences) { + const buildOrder = getBuildOrderFor(state, project, onlyReferences); + if (!buildOrder) return 3 /* InvalidProject_OutputsSkipped */; + if (isCircularBuildOrder(buildOrder)) { + reportErrors(state, buildOrder.circularDiagnostics); + return 4 /* ProjectReferenceCycle_OutputsSkipped */; + } + const { options, host } = state; + const filesToDelete = options.dry ? [] : void 0; + for (const proj of buildOrder) { + const resolvedPath = toResolvedConfigFilePath(state, proj); + const parsed = parseConfigFile(state, proj, resolvedPath); + if (parsed === void 0) { + reportParseConfigFileDiagnostic(state, resolvedPath); + continue; + } + const outputs = getAllProjectOutputs(parsed, !host.useCaseSensitiveFileNames()); + if (!outputs.length) continue; + const inputFileNames = new Set(parsed.fileNames.map((f) => toPath2(state, f))); + for (const output of outputs) { + if (inputFileNames.has(toPath2(state, output))) continue; + if (host.fileExists(output)) { + if (filesToDelete) { + filesToDelete.push(output); + } else { + host.deleteFile(output); + invalidateProject(state, resolvedPath, 0 /* Update */); + } + } + } + } + if (filesToDelete) { + reportStatus(state, Diagnostics.A_non_dry_build_would_delete_the_following_files_Colon_0, filesToDelete.map((f) => `\r + * ${f}`).join("")); + } + return 0 /* Success */; +} +function invalidateProject(state, resolved, updateLevel) { + if (state.host.getParsedCommandLine && updateLevel === 1 /* RootNamesAndUpdate */) { + updateLevel = 2 /* Full */; + } + if (updateLevel === 2 /* Full */) { + state.configFileCache.delete(resolved); + state.buildOrder = void 0; + } + state.needsSummary = true; + clearProjectStatus(state, resolved); + addProjToQueue(state, resolved, updateLevel); + enableCache(state); +} +function invalidateProjectAndScheduleBuilds(state, resolvedPath, updateLevel) { + state.reportFileChangeDetected = true; + invalidateProject(state, resolvedPath, updateLevel); + scheduleBuildInvalidatedProject( + state, + 250, + /*changeDetected*/ + true + ); +} +function scheduleBuildInvalidatedProject(state, time, changeDetected) { + const { hostWithWatch } = state; + if (!hostWithWatch.setTimeout || !hostWithWatch.clearTimeout) { + return; + } + if (state.timerToBuildInvalidatedProject) { + hostWithWatch.clearTimeout(state.timerToBuildInvalidatedProject); + } + state.timerToBuildInvalidatedProject = hostWithWatch.setTimeout(buildNextInvalidatedProject, time, "timerToBuildInvalidatedProject", state, changeDetected); +} +function buildNextInvalidatedProject(_timeoutType, state, changeDetected) { + mark("SolutionBuilder::beforeBuild"); + const buildOrder = buildNextInvalidatedProjectWorker(state, changeDetected); + mark("SolutionBuilder::afterBuild"); + measure("SolutionBuilder::Build", "SolutionBuilder::beforeBuild", "SolutionBuilder::afterBuild"); + if (buildOrder) reportErrorSummary(state, buildOrder); +} +function buildNextInvalidatedProjectWorker(state, changeDetected) { + state.timerToBuildInvalidatedProject = void 0; + if (state.reportFileChangeDetected) { + state.reportFileChangeDetected = false; + state.projectErrorsReported.clear(); + reportWatchStatus(state, Diagnostics.File_change_detected_Starting_incremental_compilation); + } + let projectsBuilt = 0; + const buildOrder = getBuildOrder(state); + const invalidatedProject = getNextInvalidatedProject( + state, + buildOrder, + /*reportQueue*/ + false + ); + if (invalidatedProject) { + invalidatedProject.done(); + projectsBuilt++; + while (state.projectPendingBuild.size) { + if (state.timerToBuildInvalidatedProject) return; + const info = getNextInvalidatedProjectCreateInfo( + state, + buildOrder, + /*reportQueue*/ + false + ); + if (!info) break; + if (info.kind !== 1 /* UpdateOutputFileStamps */ && (changeDetected || projectsBuilt === 5)) { + scheduleBuildInvalidatedProject( + state, + 100, + /*changeDetected*/ + false + ); + return; + } + const project = createInvalidatedProjectWithInfo(state, info, buildOrder); + project.done(); + if (info.kind !== 1 /* UpdateOutputFileStamps */) projectsBuilt++; + } + } + disableCache(state); + return buildOrder; +} +function watchConfigFile(state, resolved, resolvedPath, parsed) { + if (!state.watch || state.allWatchedConfigFiles.has(resolvedPath)) return; + state.allWatchedConfigFiles.set( + resolvedPath, + watchFile( + state, + resolved, + () => invalidateProjectAndScheduleBuilds(state, resolvedPath, 2 /* Full */), + 2e3 /* High */, + parsed == null ? void 0 : parsed.watchOptions, + WatchType.ConfigFile, + resolved + ) + ); +} +function watchExtendedConfigFiles(state, resolvedPath, parsed) { + updateSharedExtendedConfigFileWatcher( + resolvedPath, + parsed == null ? void 0 : parsed.options, + state.allWatchedExtendedConfigFiles, + (extendedConfigFileName, extendedConfigFilePath) => watchFile( + state, + extendedConfigFileName, + () => { + var _a; + return (_a = state.allWatchedExtendedConfigFiles.get(extendedConfigFilePath)) == null ? void 0 : _a.projects.forEach((projectConfigFilePath) => invalidateProjectAndScheduleBuilds(state, projectConfigFilePath, 2 /* Full */)); + }, + 2e3 /* High */, + parsed == null ? void 0 : parsed.watchOptions, + WatchType.ExtendedConfigFile + ), + (fileName) => toPath2(state, fileName) + ); +} +function watchWildCardDirectories(state, resolved, resolvedPath, parsed) { + if (!state.watch) return; + updateWatchingWildcardDirectories( + getOrCreateValueMapFromConfigFileMap(state.allWatchedWildcardDirectories, resolvedPath), + parsed.wildcardDirectories, + (dir, flags) => state.watchDirectory( + dir, + (fileOrDirectory) => { + var _a; + if (isIgnoredFileFromWildCardWatching({ + watchedDirPath: toPath2(state, dir), + fileOrDirectory, + fileOrDirectoryPath: toPath2(state, fileOrDirectory), + configFileName: resolved, + currentDirectory: state.compilerHost.getCurrentDirectory(), + options: parsed.options, + program: state.builderPrograms.get(resolvedPath) || ((_a = getCachedParsedConfigFile(state, resolvedPath)) == null ? void 0 : _a.fileNames), + useCaseSensitiveFileNames: state.parseConfigFileHost.useCaseSensitiveFileNames, + writeLog: (s) => state.writeLog(s), + toPath: (fileName) => toPath2(state, fileName) + })) return; + invalidateProjectAndScheduleBuilds(state, resolvedPath, 1 /* RootNamesAndUpdate */); + }, + flags, + parsed == null ? void 0 : parsed.watchOptions, + WatchType.WildcardDirectory, + resolved + ) + ); +} +function watchInputFiles(state, resolved, resolvedPath, parsed) { + if (!state.watch) return; + mutateMap( + getOrCreateValueMapFromConfigFileMap(state.allWatchedInputFiles, resolvedPath), + new Set(parsed.fileNames), + { + createNewValue: (input) => watchFile( + state, + input, + () => invalidateProjectAndScheduleBuilds(state, resolvedPath, 0 /* Update */), + 250 /* Low */, + parsed == null ? void 0 : parsed.watchOptions, + WatchType.SourceFile, + resolved + ), + onDeleteValue: closeFileWatcher + } + ); +} +function watchPackageJsonFiles(state, resolved, resolvedPath, parsed) { + if (!state.watch || !state.lastCachedPackageJsonLookups) return; + mutateMap( + getOrCreateValueMapFromConfigFileMap(state.allWatchedPackageJsonFiles, resolvedPath), + state.lastCachedPackageJsonLookups.get(resolvedPath), + { + createNewValue: (input) => watchFile( + state, + input, + () => invalidateProjectAndScheduleBuilds(state, resolvedPath, 0 /* Update */), + 2e3 /* High */, + parsed == null ? void 0 : parsed.watchOptions, + WatchType.PackageJson, + resolved + ), + onDeleteValue: closeFileWatcher + } + ); +} +function startWatching(state, buildOrder) { + if (!state.watchAllProjectsPending) return; + mark("SolutionBuilder::beforeWatcherCreation"); + state.watchAllProjectsPending = false; + for (const resolved of getBuildOrderFromAnyBuildOrder(buildOrder)) { + const resolvedPath = toResolvedConfigFilePath(state, resolved); + const cfg = parseConfigFile(state, resolved, resolvedPath); + watchConfigFile(state, resolved, resolvedPath, cfg); + watchExtendedConfigFiles(state, resolvedPath, cfg); + if (cfg) { + watchWildCardDirectories(state, resolved, resolvedPath, cfg); + watchInputFiles(state, resolved, resolvedPath, cfg); + watchPackageJsonFiles(state, resolved, resolvedPath, cfg); + } + } + mark("SolutionBuilder::afterWatcherCreation"); + measure("SolutionBuilder::Watcher creation", "SolutionBuilder::beforeWatcherCreation", "SolutionBuilder::afterWatcherCreation"); +} +function stopWatching(state) { + clearMap(state.allWatchedConfigFiles, closeFileWatcher); + clearMap(state.allWatchedExtendedConfigFiles, closeFileWatcherOf); + clearMap(state.allWatchedWildcardDirectories, (watchedWildcardDirectories) => clearMap(watchedWildcardDirectories, closeFileWatcherOf)); + clearMap(state.allWatchedInputFiles, (watchedWildcardDirectories) => clearMap(watchedWildcardDirectories, closeFileWatcher)); + clearMap(state.allWatchedPackageJsonFiles, (watchedPacageJsonFiles) => clearMap(watchedPacageJsonFiles, closeFileWatcher)); +} +function createSolutionBuilderWorker(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions) { + const state = createSolutionBuilderState(watch, hostOrHostWithWatch, rootNames, options, baseWatchOptions); + return { + build: (project, cancellationToken, writeFile2, getCustomTransformers) => build(state, project, cancellationToken, writeFile2, getCustomTransformers), + clean: (project) => clean(state, project), + buildReferences: (project, cancellationToken, writeFile2, getCustomTransformers) => build( + state, + project, + cancellationToken, + writeFile2, + getCustomTransformers, + /*onlyReferences*/ + true + ), + cleanReferences: (project) => clean( + state, + project, + /*onlyReferences*/ + true + ), + getNextInvalidatedProject: (cancellationToken) => { + setupInitialBuild(state, cancellationToken); + return getNextInvalidatedProject( + state, + getBuildOrder(state), + /*reportQueue*/ + false + ); + }, + getBuildOrder: () => getBuildOrder(state), + getUpToDateStatusOfProject: (project) => { + const configFileName = resolveProjectName(state, project); + const configFilePath = toResolvedConfigFilePath(state, configFileName); + return getUpToDateStatus(state, parseConfigFile(state, configFileName, configFilePath), configFilePath); + }, + invalidateProject: (configFilePath, updateLevel) => invalidateProject(state, configFilePath, updateLevel || 0 /* Update */), + close: () => stopWatching(state) + }; +} +function relName(state, path) { + return convertToRelativePath(path, state.compilerHost.getCurrentDirectory(), state.compilerHost.getCanonicalFileName); +} +function reportStatus(state, message, ...args) { + state.host.reportSolutionBuilderStatus(createCompilerDiagnostic(message, ...args)); +} +function reportWatchStatus(state, message, ...args) { + var _a, _b; + (_b = (_a = state.hostWithWatch).onWatchStatusChange) == null ? void 0 : _b.call(_a, createCompilerDiagnostic(message, ...args), state.host.getNewLine(), state.baseCompilerOptions); +} +function reportErrors({ host }, errors) { + errors.forEach((err) => host.reportDiagnostic(err)); +} +function reportAndStoreErrors(state, proj, errors) { + reportErrors(state, errors); + state.projectErrorsReported.set(proj, true); + if (errors.length) { + state.diagnostics.set(proj, errors); + } +} +function reportParseConfigFileDiagnostic(state, proj) { + reportAndStoreErrors(state, proj, [state.configFileCache.get(proj)]); +} +function reportErrorSummary(state, buildOrder) { + if (!state.needsSummary) return; + state.needsSummary = false; + const canReportSummary = state.watch || !!state.host.reportErrorSummary; + const { diagnostics } = state; + let totalErrors = 0; + let filesInError = []; + if (isCircularBuildOrder(buildOrder)) { + reportBuildQueue(state, buildOrder.buildOrder); + reportErrors(state, buildOrder.circularDiagnostics); + if (canReportSummary) totalErrors += getErrorCountForSummary(buildOrder.circularDiagnostics); + if (canReportSummary) filesInError = [...filesInError, ...getFilesInErrorForSummary(buildOrder.circularDiagnostics)]; + } else { + buildOrder.forEach((project) => { + const projectPath = toResolvedConfigFilePath(state, project); + if (!state.projectErrorsReported.has(projectPath)) { + reportErrors(state, diagnostics.get(projectPath) || emptyArray); + } + }); + if (canReportSummary) diagnostics.forEach((singleProjectErrors) => totalErrors += getErrorCountForSummary(singleProjectErrors)); + if (canReportSummary) diagnostics.forEach((singleProjectErrors) => [...filesInError, ...getFilesInErrorForSummary(singleProjectErrors)]); + } + if (state.watch) { + reportWatchStatus(state, getWatchErrorSummaryDiagnosticMessage(totalErrors), totalErrors); + } else if (state.host.reportErrorSummary) { + state.host.reportErrorSummary(totalErrors, filesInError); + } +} +function reportBuildQueue(state, buildQueue) { + if (state.options.verbose) { + reportStatus(state, Diagnostics.Projects_in_this_build_Colon_0, buildQueue.map((s) => "\r\n * " + relName(state, s)).join("")); + } +} +function reportUpToDateStatus(state, configFileName, status) { + switch (status.type) { + case 5 /* OutOfDateWithSelf */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_output_1_is_older_than_input_2, + relName(state, configFileName), + relName(state, status.outOfDateOutputFileName), + relName(state, status.newerInputFileName) + ); + case 6 /* OutOfDateWithUpstream */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_output_1_is_older_than_input_2, + relName(state, configFileName), + relName(state, status.outOfDateOutputFileName), + relName(state, status.newerProjectName) + ); + case 3 /* OutputMissing */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_output_file_1_does_not_exist, + relName(state, configFileName), + relName(state, status.missingOutputFileName) + ); + case 4 /* ErrorReadingFile */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_there_was_error_reading_file_1, + relName(state, configFileName), + relName(state, status.fileName) + ); + case 7 /* OutOfDateBuildInfoWithPendingEmit */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitted, + relName(state, configFileName), + relName(state, status.buildInfoFile) + ); + case 8 /* OutOfDateBuildInfoWithErrors */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors, + relName(state, configFileName), + relName(state, status.buildInfoFile) + ); + case 9 /* OutOfDateOptions */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions, + relName(state, configFileName), + relName(state, status.buildInfoFile) + ); + case 10 /* OutOfDateRoots */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_but_not_any_more, + relName(state, configFileName), + relName(state, status.buildInfoFile), + relName(state, status.inputFile) + ); + case 1 /* UpToDate */: + if (status.newestInputFileTime !== void 0) { + return reportStatus( + state, + Diagnostics.Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2, + relName(state, configFileName), + relName(state, status.newestInputFileName || ""), + relName(state, status.oldestOutputFileName || "") + ); + } + break; + case 2 /* UpToDateWithUpstreamTypes */: + return reportStatus( + state, + Diagnostics.Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies, + relName(state, configFileName) + ); + case 15 /* UpToDateWithInputFileText */: + return reportStatus( + state, + Diagnostics.Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_files, + relName(state, configFileName) + ); + case 11 /* UpstreamOutOfDate */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date, + relName(state, configFileName), + relName(state, status.upstreamProjectName) + ); + case 12 /* UpstreamBlocked */: + return reportStatus( + state, + status.upstreamProjectBlocked ? Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_was_not_built : Diagnostics.Project_0_can_t_be_built_because_its_dependency_1_has_errors, + relName(state, configFileName), + relName(state, status.upstreamProjectName) + ); + case 0 /* Unbuildable */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_1, + relName(state, configFileName), + status.reason + ); + case 14 /* TsVersionOutputOfDate */: + return reportStatus( + state, + Diagnostics.Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_current_version_2, + relName(state, configFileName), + status.version, + version + ); + case 17 /* ForceBuild */: + return reportStatus( + state, + Diagnostics.Project_0_is_being_forcibly_rebuilt, + relName(state, configFileName) + ); + case 16 /* ContainerOnly */: + // Don't report status on "solution" projects + // falls through + case 13 /* ComputingUpstream */: + break; + default: + assertType(status); + } +} +function verboseReportProjectStatus(state, configFileName, status) { + if (state.options.verbose) { + reportUpToDateStatus(state, configFileName, status); + } +} + +// src/compiler/executeCommandLine.ts +var StatisticType = /* @__PURE__ */ ((StatisticType2) => { + StatisticType2[StatisticType2["time"] = 0] = "time"; + StatisticType2[StatisticType2["count"] = 1] = "count"; + StatisticType2[StatisticType2["memory"] = 2] = "memory"; + return StatisticType2; +})(StatisticType || {}); +function countLines(program) { + const counts2 = getCountsMap(); + forEach(program.getSourceFiles(), (file) => { + const key = getCountKey(program, file); + const lineCount = getLineStarts(file).length; + counts2.set(key, counts2.get(key) + lineCount); + }); + return counts2; +} +function getCountsMap() { + const counts2 = /* @__PURE__ */ new Map(); + counts2.set("Library", 0); + counts2.set("Definitions", 0); + counts2.set("TypeScript", 0); + counts2.set("JavaScript", 0); + counts2.set("JSON", 0); + counts2.set("Other", 0); + return counts2; +} +function getCountKey(program, file) { + if (program.isSourceFileDefaultLibrary(file)) { + return "Library"; + } else if (file.isDeclarationFile) { + return "Definitions"; + } + const path = file.path; + if (fileExtensionIsOneOf(path, supportedTSExtensionsFlat)) { + return "TypeScript"; + } else if (fileExtensionIsOneOf(path, supportedJSExtensionsFlat)) { + return "JavaScript"; + } else if (fileExtensionIs(path, ".json" /* Json */)) { + return "JSON"; + } else { + return "Other"; + } +} +function updateReportDiagnostic(sys2, existing, options) { + return shouldBePretty(sys2, options) ? createDiagnosticReporter( + sys2, + /*pretty*/ + true + ) : existing; +} +function defaultIsPretty(sys2) { + return !!sys2.writeOutputIsTTY && sys2.writeOutputIsTTY() && !sys2.getEnvironmentVariable("NO_COLOR"); +} +function shouldBePretty(sys2, options) { + if (!options || typeof options.pretty === "undefined") { + return defaultIsPretty(sys2); + } + return options.pretty; +} +function getOptionsForHelp(commandLine) { + return !!commandLine.options.all ? toSorted(optionDeclarations.concat(tscBuildOption), (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(optionDeclarations.concat(tscBuildOption), (v) => !!v.showInSimplifiedHelpView); +} +function printVersion(sys2) { + sys2.write(getDiagnosticText(Diagnostics.Version_0, version) + sys2.newLine); +} +function createColors(sys2) { + const showColors = defaultIsPretty(sys2); + if (!showColors) { + return { + bold: (str) => str, + blue: (str) => str, + blueBackground: (str) => str, + brightWhite: (str) => str + }; + } + function bold(str) { + return `\x1B[1m${str}\x1B[22m`; + } + const isWindows = sys2.getEnvironmentVariable("OS") && sys2.getEnvironmentVariable("OS").toLowerCase().includes("windows"); + const isWindowsTerminal = sys2.getEnvironmentVariable("WT_SESSION"); + const isVSCode = sys2.getEnvironmentVariable("TERM_PROGRAM") && sys2.getEnvironmentVariable("TERM_PROGRAM") === "vscode"; + function blue(str) { + if (isWindows && !isWindowsTerminal && !isVSCode) { + return brightWhite(str); + } + return `\x1B[94m${str}\x1B[39m`; + } + const supportsRicherColors = sys2.getEnvironmentVariable("COLORTERM") === "truecolor" || sys2.getEnvironmentVariable("TERM") === "xterm-256color"; + function blueBackground(str) { + if (supportsRicherColors) { + return `\x1B[48;5;68m${str}\x1B[39;49m`; + } else { + return `\x1B[44m${str}\x1B[39;49m`; + } + } + function brightWhite(str) { + return `\x1B[97m${str}\x1B[39m`; + } + return { + bold, + blue, + brightWhite, + blueBackground + }; +} +function getDisplayNameTextOfOption(option) { + return `--${option.name}${option.shortName ? `, -${option.shortName}` : ""}`; +} +function generateOptionOutput(sys2, option, rightAlignOfLeft, leftAlignOfRight) { + var _a; + const text = []; + const colors = createColors(sys2); + const name = getDisplayNameTextOfOption(option); + const valueCandidates = getValueCandidate(option); + const defaultValueDescription = typeof option.defaultValueDescription === "object" ? getDiagnosticText(option.defaultValueDescription) : formatDefaultValue( + option.defaultValueDescription, + option.type === "list" || option.type === "listOrElement" ? option.element.type : option.type + ); + const terminalWidth = ((_a = sys2.getWidthOfTerminal) == null ? void 0 : _a.call(sys2)) ?? 0; + if (terminalWidth >= 80) { + let description3 = ""; + if (option.description) { + description3 = getDiagnosticText(option.description); + } + text.push(...getPrettyOutput( + name, + description3, + rightAlignOfLeft, + leftAlignOfRight, + terminalWidth, + /*colorLeft*/ + true + ), sys2.newLine); + if (showAdditionalInfoOutput(valueCandidates, option)) { + if (valueCandidates) { + text.push(...getPrettyOutput( + valueCandidates.valueType, + valueCandidates.possibleValues, + rightAlignOfLeft, + leftAlignOfRight, + terminalWidth, + /*colorLeft*/ + false + ), sys2.newLine); + } + if (defaultValueDescription) { + text.push(...getPrettyOutput( + getDiagnosticText(Diagnostics.default_Colon), + defaultValueDescription, + rightAlignOfLeft, + leftAlignOfRight, + terminalWidth, + /*colorLeft*/ + false + ), sys2.newLine); + } + } + text.push(sys2.newLine); + } else { + text.push(colors.blue(name), sys2.newLine); + if (option.description) { + const description3 = getDiagnosticText(option.description); + text.push(description3); + } + text.push(sys2.newLine); + if (showAdditionalInfoOutput(valueCandidates, option)) { + if (valueCandidates) { + text.push(`${valueCandidates.valueType} ${valueCandidates.possibleValues}`); + } + if (defaultValueDescription) { + if (valueCandidates) text.push(sys2.newLine); + const diagType = getDiagnosticText(Diagnostics.default_Colon); + text.push(`${diagType} ${defaultValueDescription}`); + } + text.push(sys2.newLine); + } + text.push(sys2.newLine); + } + return text; + function formatDefaultValue(defaultValue, type) { + return defaultValue !== void 0 && typeof type === "object" ? arrayFrom(type.entries()).filter(([, value]) => value === defaultValue).map(([name2]) => name2).join("/") : String(defaultValue); + } + function showAdditionalInfoOutput(valueCandidates2, option2) { + const ignoreValues = ["string"]; + const ignoredDescriptions = [void 0, "false", "n/a"]; + const defaultValueDescription2 = option2.defaultValueDescription; + if (option2.category === Diagnostics.Command_line_Options) return false; + if (contains(ignoreValues, valueCandidates2 == null ? void 0 : valueCandidates2.possibleValues) && contains(ignoredDescriptions, defaultValueDescription2)) { + return false; + } + return true; + } + function getPrettyOutput(left, right, rightAlignOfLeft2, leftAlignOfRight2, terminalWidth2, colorLeft) { + const res = []; + let isFirstLine = true; + let remainRight = right; + const rightCharacterNumber = terminalWidth2 - leftAlignOfRight2; + while (remainRight.length > 0) { + let curLeft = ""; + if (isFirstLine) { + curLeft = left.padStart(rightAlignOfLeft2); + curLeft = curLeft.padEnd(leftAlignOfRight2); + curLeft = colorLeft ? colors.blue(curLeft) : curLeft; + } else { + curLeft = "".padStart(leftAlignOfRight2); + } + const curRight = remainRight.substr(0, rightCharacterNumber); + remainRight = remainRight.slice(rightCharacterNumber); + res.push(`${curLeft}${curRight}`); + isFirstLine = false; + } + return res; + } + function getValueCandidate(option2) { + if (option2.type === "object") { + return void 0; + } + return { + valueType: getValueType(option2), + possibleValues: getPossibleValues(option2) + }; + function getValueType(option3) { + Debug.assert(option3.type !== "listOrElement"); + switch (option3.type) { + case "string": + case "number": + case "boolean": + return getDiagnosticText(Diagnostics.type_Colon); + case "list": + return getDiagnosticText(Diagnostics.one_or_more_Colon); + default: + return getDiagnosticText(Diagnostics.one_of_Colon); + } + } + function getPossibleValues(option3) { + let possibleValues; + switch (option3.type) { + case "string": + case "number": + case "boolean": + possibleValues = option3.type; + break; + case "list": + case "listOrElement": + possibleValues = getPossibleValues(option3.element); + break; + case "object": + possibleValues = ""; + break; + default: + const inverted = {}; + option3.type.forEach((value, name2) => { + var _a2; + if (!((_a2 = option3.deprecatedKeys) == null ? void 0 : _a2.has(name2))) { + (inverted[value] || (inverted[value] = [])).push(name2); + } + }); + return Object.entries(inverted).map(([, synonyms]) => synonyms.join("/")).join(", "); + } + return possibleValues; + } + } +} +function generateGroupOptionOutput(sys2, optionsList) { + let maxLength2 = 0; + for (const option of optionsList) { + const curLength = getDisplayNameTextOfOption(option).length; + maxLength2 = maxLength2 > curLength ? maxLength2 : curLength; + } + const rightAlignOfLeftPart = maxLength2 + 2; + const leftAlignOfRightPart = rightAlignOfLeftPart + 2; + let lines = []; + for (const option of optionsList) { + const tmp = generateOptionOutput(sys2, option, rightAlignOfLeftPart, leftAlignOfRightPart); + lines = [...lines, ...tmp]; + } + if (lines[lines.length - 2] !== sys2.newLine) { + lines.push(sys2.newLine); + } + return lines; +} +function generateSectionOptionsOutput(sys2, sectionName, options, subCategory, beforeOptionsDescription, afterOptionsDescription) { + let res = []; + res.push(createColors(sys2).bold(sectionName) + sys2.newLine + sys2.newLine); + if (beforeOptionsDescription) { + res.push(beforeOptionsDescription + sys2.newLine + sys2.newLine); + } + if (!subCategory) { + res = [...res, ...generateGroupOptionOutput(sys2, options)]; + if (afterOptionsDescription) { + res.push(afterOptionsDescription + sys2.newLine + sys2.newLine); + } + return res; + } + const categoryMap = /* @__PURE__ */ new Map(); + for (const option of options) { + if (!option.category) { + continue; + } + const curCategory = getDiagnosticText(option.category); + const optionsOfCurCategory = categoryMap.get(curCategory) ?? []; + optionsOfCurCategory.push(option); + categoryMap.set(curCategory, optionsOfCurCategory); + } + categoryMap.forEach((value, key) => { + res.push(`### ${key}${sys2.newLine}${sys2.newLine}`); + res = [...res, ...generateGroupOptionOutput(sys2, value)]; + }); + if (afterOptionsDescription) { + res.push(afterOptionsDescription + sys2.newLine + sys2.newLine); + } + return res; +} +function printEasyHelp(sys2, simpleOptions) { + const colors = createColors(sys2); + let output = [...getHeader(sys2, `${getDiagnosticText(Diagnostics.tsc_Colon_The_TypeScript_Compiler)} - ${getDiagnosticText(Diagnostics.Version_0, version)}`)]; + output.push(colors.bold(getDiagnosticText(Diagnostics.COMMON_COMMANDS)) + sys2.newLine + sys2.newLine); + example("tsc", Diagnostics.Compiles_the_current_project_tsconfig_json_in_the_working_directory); + example("tsc app.ts util.ts", Diagnostics.Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options); + example("tsc -b", Diagnostics.Build_a_composite_project_in_the_working_directory); + example("tsc --init", Diagnostics.Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory); + example("tsc -p ./path/to/tsconfig.json", Diagnostics.Compiles_the_TypeScript_project_located_at_the_specified_path); + example("tsc --help --all", Diagnostics.An_expanded_version_of_this_information_showing_all_possible_compiler_options); + example(["tsc --noEmit", "tsc --target esnext"], Diagnostics.Compiles_the_current_project_with_additional_settings); + const cliCommands = simpleOptions.filter((opt) => opt.isCommandLineOnly || opt.category === Diagnostics.Command_line_Options); + const configOpts = simpleOptions.filter((opt) => !contains(cliCommands, opt)); + output = [ + ...output, + ...generateSectionOptionsOutput( + sys2, + getDiagnosticText(Diagnostics.COMMAND_LINE_FLAGS), + cliCommands, + /*subCategory*/ + false, + /*beforeOptionsDescription*/ + void 0, + /*afterOptionsDescription*/ + void 0 + ), + ...generateSectionOptionsOutput( + sys2, + getDiagnosticText(Diagnostics.COMMON_COMPILER_OPTIONS), + configOpts, + /*subCategory*/ + false, + /*beforeOptionsDescription*/ + void 0, + formatMessage(Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, "https://aka.ms/tsc") + ) + ]; + for (const line of output) { + sys2.write(line); + } + function example(ex, desc) { + const examples = typeof ex === "string" ? [ex] : ex; + for (const example2 of examples) { + output.push(" " + colors.blue(example2) + sys2.newLine); + } + output.push(" " + getDiagnosticText(desc) + sys2.newLine + sys2.newLine); + } +} +function printAllHelp(sys2, compilerOptions, buildOptions, watchOptions) { + let output = [...getHeader(sys2, `${getDiagnosticText(Diagnostics.tsc_Colon_The_TypeScript_Compiler)} - ${getDiagnosticText(Diagnostics.Version_0, version)}`)]; + output = [...output, ...generateSectionOptionsOutput( + sys2, + getDiagnosticText(Diagnostics.ALL_COMPILER_OPTIONS), + compilerOptions, + /*subCategory*/ + true, + /*beforeOptionsDescription*/ + void 0, + formatMessage(Diagnostics.You_can_learn_about_all_of_the_compiler_options_at_0, "https://aka.ms/tsc") + )]; + output = [...output, ...generateSectionOptionsOutput( + sys2, + getDiagnosticText(Diagnostics.WATCH_OPTIONS), + watchOptions, + /*subCategory*/ + false, + getDiagnosticText(Diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon) + )]; + output = [...output, ...generateSectionOptionsOutput( + sys2, + getDiagnosticText(Diagnostics.BUILD_OPTIONS), + filter(buildOptions, (option) => option !== tscBuildOption), + /*subCategory*/ + false, + formatMessage(Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds") + )]; + for (const line of output) { + sys2.write(line); + } +} +function printBuildHelp(sys2, buildOptions) { + let output = [...getHeader(sys2, `${getDiagnosticText(Diagnostics.tsc_Colon_The_TypeScript_Compiler)} - ${getDiagnosticText(Diagnostics.Version_0, version)}`)]; + output = [...output, ...generateSectionOptionsOutput( + sys2, + getDiagnosticText(Diagnostics.BUILD_OPTIONS), + filter(buildOptions, (option) => option !== tscBuildOption), + /*subCategory*/ + false, + formatMessage(Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds") + )]; + for (const line of output) { + sys2.write(line); + } +} +function getHeader(sys2, message) { + var _a; + const colors = createColors(sys2); + const header = []; + const terminalWidth = ((_a = sys2.getWidthOfTerminal) == null ? void 0 : _a.call(sys2)) ?? 0; + const tsIconLength = 5; + const tsIconFirstLine = colors.blueBackground("".padStart(tsIconLength)); + const tsIconSecondLine = colors.blueBackground(colors.brightWhite("TS ".padStart(tsIconLength))); + if (terminalWidth >= message.length + tsIconLength) { + const rightAlign = terminalWidth > 120 ? 120 : terminalWidth; + const leftAlign = rightAlign - tsIconLength; + header.push(message.padEnd(leftAlign) + tsIconFirstLine + sys2.newLine); + header.push("".padStart(leftAlign) + tsIconSecondLine + sys2.newLine); + } else { + header.push(message + sys2.newLine); + header.push(sys2.newLine); + } + return header; +} +function printHelp(sys2, commandLine) { + if (!commandLine.options.all) { + printEasyHelp(sys2, getOptionsForHelp(commandLine)); + } else { + printAllHelp(sys2, getOptionsForHelp(commandLine), optionsForBuild, optionsForWatch); + } +} +function executeCommandLineWorker(sys2, cb, commandLine) { + let reportDiagnostic = createDiagnosticReporter(sys2); + let configFileName; + if (commandLine.options.locale) { + validateLocaleAndSetLanguage(commandLine.options.locale, sys2, commandLine.errors); + } + if (commandLine.errors.length > 0) { + commandLine.errors.forEach(reportDiagnostic); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + if (commandLine.options.init) { + writeConfigFile(sys2, reportDiagnostic, commandLine.options); + return sys2.exit(0 /* Success */); + } + if (commandLine.options.version) { + printVersion(sys2); + return sys2.exit(0 /* Success */); + } + if (commandLine.options.help || commandLine.options.all) { + printHelp(sys2, commandLine); + return sys2.exit(0 /* Success */); + } + if (commandLine.options.watch && commandLine.options.listFilesOnly) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.Options_0_and_1_cannot_be_combined, "watch", "listFilesOnly")); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + if (commandLine.options.project) { + if (commandLine.fileNames.length !== 0) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.Option_project_cannot_be_mixed_with_source_files_on_a_command_line)); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + const fileOrDirectory = normalizePath(commandLine.options.project); + if (!fileOrDirectory || sys2.directoryExists(fileOrDirectory)) { + configFileName = combinePaths(fileOrDirectory, "tsconfig.json"); + if (!sys2.fileExists(configFileName)) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0, commandLine.options.project)); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + } else { + configFileName = fileOrDirectory; + if (!sys2.fileExists(configFileName)) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_specified_path_does_not_exist_Colon_0, commandLine.options.project)); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + } + } else if (commandLine.fileNames.length === 0) { + const searchPath = normalizePath(sys2.getCurrentDirectory()); + configFileName = findConfigFile(searchPath, (fileName) => sys2.fileExists(fileName)); + } + if (commandLine.fileNames.length === 0 && !configFileName) { + if (commandLine.options.showConfig) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, normalizePath(sys2.getCurrentDirectory()))); + } else { + printVersion(sys2); + printHelp(sys2, commandLine); + } + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + const currentDirectory = sys2.getCurrentDirectory(); + const commandLineOptions = convertToOptionsWithAbsolutePaths( + commandLine.options, + (fileName) => getNormalizedAbsolutePath(fileName, currentDirectory) + ); + if (configFileName) { + const extendedConfigCache = /* @__PURE__ */ new Map(); + const configParseResult = parseConfigFileWithSystem(configFileName, commandLineOptions, extendedConfigCache, commandLine.watchOptions, sys2, reportDiagnostic); + if (commandLineOptions.showConfig) { + if (configParseResult.errors.length !== 0) { + reportDiagnostic = updateReportDiagnostic( + sys2, + reportDiagnostic, + configParseResult.options + ); + configParseResult.errors.forEach(reportDiagnostic); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + sys2.write(JSON.stringify(convertToTSConfig(configParseResult, configFileName, sys2), null, 4) + sys2.newLine); + return sys2.exit(0 /* Success */); + } + reportDiagnostic = updateReportDiagnostic( + sys2, + reportDiagnostic, + configParseResult.options + ); + if (isWatchSet(configParseResult.options)) { + if (reportWatchModeWithoutSysSupport(sys2, reportDiagnostic)) return; + return createWatchOfConfigFile( + sys2, + cb, + reportDiagnostic, + configParseResult, + commandLineOptions, + commandLine.watchOptions, + extendedConfigCache + ); + } else if (isIncrementalCompilation(configParseResult.options)) { + performIncrementalCompilation2( + sys2, + cb, + reportDiagnostic, + configParseResult + ); + } else { + performCompilation( + sys2, + cb, + reportDiagnostic, + configParseResult + ); + } + } else { + if (commandLineOptions.showConfig) { + sys2.write(JSON.stringify(convertToTSConfig(commandLine, combinePaths(currentDirectory, "tsconfig.json"), sys2), null, 4) + sys2.newLine); + return sys2.exit(0 /* Success */); + } + reportDiagnostic = updateReportDiagnostic( + sys2, + reportDiagnostic, + commandLineOptions + ); + if (isWatchSet(commandLineOptions)) { + if (reportWatchModeWithoutSysSupport(sys2, reportDiagnostic)) return; + return createWatchOfFilesAndCompilerOptions( + sys2, + cb, + reportDiagnostic, + commandLine.fileNames, + commandLineOptions, + commandLine.watchOptions + ); + } else if (isIncrementalCompilation(commandLineOptions)) { + performIncrementalCompilation2( + sys2, + cb, + reportDiagnostic, + { ...commandLine, options: commandLineOptions } + ); + } else { + performCompilation( + sys2, + cb, + reportDiagnostic, + { ...commandLine, options: commandLineOptions } + ); + } + } +} +function isBuildCommand(commandLineArgs) { + if (commandLineArgs.length > 0 && commandLineArgs[0].charCodeAt(0) === 45 /* minus */) { + const firstOption = commandLineArgs[0].slice(commandLineArgs[0].charCodeAt(1) === 45 /* minus */ ? 2 : 1).toLowerCase(); + return firstOption === tscBuildOption.name || firstOption === tscBuildOption.shortName; + } + return false; +} +function executeCommandLine(system, cb, commandLineArgs) { + if (isBuildCommand(commandLineArgs)) { + const { buildOptions, watchOptions, projects, errors } = parseBuildCommand(commandLineArgs); + if (buildOptions.generateCpuProfile && system.enableCPUProfiler) { + system.enableCPUProfiler(buildOptions.generateCpuProfile, () => performBuild( + system, + cb, + buildOptions, + watchOptions, + projects, + errors + )); + } else { + return performBuild( + system, + cb, + buildOptions, + watchOptions, + projects, + errors + ); + } + } + const commandLine = parseCommandLine(commandLineArgs, (path) => system.readFile(path)); + if (commandLine.options.generateCpuProfile && system.enableCPUProfiler) { + system.enableCPUProfiler(commandLine.options.generateCpuProfile, () => executeCommandLineWorker( + system, + cb, + commandLine + )); + } else { + return executeCommandLineWorker(system, cb, commandLine); + } +} +function reportWatchModeWithoutSysSupport(sys2, reportDiagnostic) { + if (!sys2.watchFile || !sys2.watchDirectory) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_current_host_does_not_support_the_0_option, "--watch")); + sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + return true; + } + return false; +} +var defaultJSDocParsingMode = 2 /* ParseForTypeErrors */; +function performBuild(sys2, cb, buildOptions, watchOptions, projects, errors) { + const reportDiagnostic = updateReportDiagnostic( + sys2, + createDiagnosticReporter(sys2), + buildOptions + ); + if (buildOptions.locale) { + validateLocaleAndSetLanguage(buildOptions.locale, sys2, errors); + } + if (errors.length > 0) { + errors.forEach(reportDiagnostic); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + if (buildOptions.help) { + printVersion(sys2); + printBuildHelp(sys2, buildOpts); + return sys2.exit(0 /* Success */); + } + if (projects.length === 0) { + printVersion(sys2); + printBuildHelp(sys2, buildOpts); + return sys2.exit(0 /* Success */); + } + if (!sys2.getModifiedTime || !sys2.setModifiedTime || buildOptions.clean && !sys2.deleteFile) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.The_current_host_does_not_support_the_0_option, "--build")); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + if (buildOptions.watch) { + if (reportWatchModeWithoutSysSupport(sys2, reportDiagnostic)) return; + const buildHost2 = createSolutionBuilderWithWatchHost( + sys2, + /*createProgram*/ + void 0, + reportDiagnostic, + createBuilderStatusReporter(sys2, shouldBePretty(sys2, buildOptions)), + createWatchStatusReporter2(sys2, buildOptions) + ); + buildHost2.jsDocParsingMode = defaultJSDocParsingMode; + const solutionPerformance2 = enableSolutionPerformance(sys2, buildOptions); + updateSolutionBuilderHost(sys2, cb, buildHost2, solutionPerformance2); + const onWatchStatusChange = buildHost2.onWatchStatusChange; + let reportBuildStatistics = false; + buildHost2.onWatchStatusChange = (d, newLine, options, errorCount) => { + onWatchStatusChange == null ? void 0 : onWatchStatusChange(d, newLine, options, errorCount); + if (reportBuildStatistics && (d.code === Diagnostics.Found_0_errors_Watching_for_file_changes.code || d.code === Diagnostics.Found_1_error_Watching_for_file_changes.code)) { + reportSolutionBuilderTimes(builder2, solutionPerformance2); + } + }; + const builder2 = createSolutionBuilderWithWatch(buildHost2, projects, buildOptions, watchOptions); + builder2.build(); + reportSolutionBuilderTimes(builder2, solutionPerformance2); + reportBuildStatistics = true; + return builder2; + } + const buildHost = createSolutionBuilderHost( + sys2, + /*createProgram*/ + void 0, + reportDiagnostic, + createBuilderStatusReporter(sys2, shouldBePretty(sys2, buildOptions)), + createReportErrorSummary(sys2, buildOptions) + ); + buildHost.jsDocParsingMode = defaultJSDocParsingMode; + const solutionPerformance = enableSolutionPerformance(sys2, buildOptions); + updateSolutionBuilderHost(sys2, cb, buildHost, solutionPerformance); + const builder = createSolutionBuilder(buildHost, projects, buildOptions); + const exitStatus = buildOptions.clean ? builder.clean() : builder.build(); + reportSolutionBuilderTimes(builder, solutionPerformance); + dumpTracingLegend(); + return sys2.exit(exitStatus); +} +function createReportErrorSummary(sys2, options) { + return shouldBePretty(sys2, options) ? (errorCount, filesInError) => sys2.write(getErrorSummaryText(errorCount, filesInError, sys2.newLine, sys2)) : void 0; +} +function performCompilation(sys2, cb, reportDiagnostic, config) { + const { fileNames, options, projectReferences } = config; + const host = createCompilerHostWorker( + options, + /*setParentNodes*/ + void 0, + sys2 + ); + host.jsDocParsingMode = defaultJSDocParsingMode; + const currentDirectory = host.getCurrentDirectory(); + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + changeCompilerHostLikeToUseCache(host, (fileName) => toPath(fileName, currentDirectory, getCanonicalFileName)); + enableStatisticsAndTracing( + sys2, + options, + /*isBuildMode*/ + false + ); + const programOptions = { + rootNames: fileNames, + options, + projectReferences, + host, + configFileParsingDiagnostics: getConfigFileParsingDiagnostics(config) + }; + const program = createProgram(programOptions); + const exitStatus = emitFilesAndReportErrorsAndGetExitStatus( + program, + reportDiagnostic, + (s) => sys2.write(s + sys2.newLine), + createReportErrorSummary(sys2, options) + ); + reportStatistics( + sys2, + program, + /*solutionPerformance*/ + void 0 + ); + cb(program); + return sys2.exit(exitStatus); +} +function performIncrementalCompilation2(sys2, cb, reportDiagnostic, config) { + const { options, fileNames, projectReferences } = config; + enableStatisticsAndTracing( + sys2, + options, + /*isBuildMode*/ + false + ); + const host = createIncrementalCompilerHost(options, sys2); + host.jsDocParsingMode = defaultJSDocParsingMode; + const exitStatus = performIncrementalCompilation({ + host, + system: sys2, + rootNames: fileNames, + options, + configFileParsingDiagnostics: getConfigFileParsingDiagnostics(config), + projectReferences, + reportDiagnostic, + reportErrorSummary: createReportErrorSummary(sys2, options), + afterProgramEmitAndDiagnostics: (builderProgram) => { + reportStatistics( + sys2, + builderProgram.getProgram(), + /*solutionPerformance*/ + void 0 + ); + cb(builderProgram); + } + }); + return sys2.exit(exitStatus); +} +function updateSolutionBuilderHost(sys2, cb, buildHost, solutionPerformance) { + updateCreateProgram( + sys2, + buildHost, + /*isBuildMode*/ + true + ); + buildHost.afterProgramEmitAndDiagnostics = (program) => { + reportStatistics(sys2, program.getProgram(), solutionPerformance); + cb(program); + }; +} +function updateCreateProgram(sys2, host, isBuildMode) { + const compileUsingBuilder = host.createProgram; + host.createProgram = (rootNames, options, host2, oldProgram, configFileParsingDiagnostics, projectReferences) => { + Debug.assert(rootNames !== void 0 || options === void 0 && !!oldProgram); + if (options !== void 0) { + enableStatisticsAndTracing(sys2, options, isBuildMode); + } + return compileUsingBuilder(rootNames, options, host2, oldProgram, configFileParsingDiagnostics, projectReferences); + }; +} +function updateWatchCompilationHost(sys2, cb, watchCompilerHost) { + watchCompilerHost.jsDocParsingMode = defaultJSDocParsingMode; + updateCreateProgram( + sys2, + watchCompilerHost, + /*isBuildMode*/ + false + ); + const emitFilesUsingBuilder = watchCompilerHost.afterProgramCreate; + watchCompilerHost.afterProgramCreate = (builderProgram) => { + emitFilesUsingBuilder(builderProgram); + reportStatistics( + sys2, + builderProgram.getProgram(), + /*solutionPerformance*/ + void 0 + ); + cb(builderProgram); + }; +} +function createWatchStatusReporter2(sys2, options) { + return createWatchStatusReporter(sys2, shouldBePretty(sys2, options)); +} +function createWatchOfConfigFile(system, cb, reportDiagnostic, configParseResult, optionsToExtend, watchOptionsToExtend, extendedConfigCache) { + const watchCompilerHost = createWatchCompilerHostOfConfigFile({ + configFileName: configParseResult.options.configFilePath, + optionsToExtend, + watchOptionsToExtend, + system, + reportDiagnostic, + reportWatchStatus: createWatchStatusReporter2(system, configParseResult.options) + }); + updateWatchCompilationHost(system, cb, watchCompilerHost); + watchCompilerHost.configFileParsingResult = configParseResult; + watchCompilerHost.extendedConfigCache = extendedConfigCache; + return createWatchProgram(watchCompilerHost); +} +function createWatchOfFilesAndCompilerOptions(system, cb, reportDiagnostic, rootFiles, options, watchOptions) { + const watchCompilerHost = createWatchCompilerHostOfFilesAndCompilerOptions({ + rootFiles, + options, + watchOptions, + system, + reportDiagnostic, + reportWatchStatus: createWatchStatusReporter2(system, options) + }); + updateWatchCompilationHost(system, cb, watchCompilerHost); + return createWatchProgram(watchCompilerHost); +} +function enableSolutionPerformance(system, options) { + if (system === sys && options.extendedDiagnostics) { + enable(); + return createSolutionPerfomrance(); + } +} +function createSolutionPerfomrance() { + let statistics; + return { + addAggregateStatistic, + forEachAggregateStatistics: forEachAggreateStatistics, + clear: clear2 + }; + function addAggregateStatistic(s) { + const existing = statistics == null ? void 0 : statistics.get(s.name); + if (existing) { + if (existing.type === 2 /* memory */) existing.value = Math.max(existing.value, s.value); + else existing.value += s.value; + } else { + (statistics ?? (statistics = /* @__PURE__ */ new Map())).set(s.name, s); + } + } + function forEachAggreateStatistics(cb) { + statistics == null ? void 0 : statistics.forEach(cb); + } + function clear2() { + statistics = void 0; + } +} +function reportSolutionBuilderTimes(builder, solutionPerformance) { + if (!solutionPerformance) return; + if (!isEnabled()) { + sys.write(Diagnostics.Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found.message + "\n"); + return; + } + const statistics = []; + statistics.push( + { name: "Projects in scope", value: getBuildOrderFromAnyBuildOrder(builder.getBuildOrder()).length, type: 1 /* count */ } + ); + reportSolutionBuilderCountStatistic("SolutionBuilder::Projects built"); + reportSolutionBuilderCountStatistic("SolutionBuilder::Timestamps only updates"); + reportSolutionBuilderCountStatistic("SolutionBuilder::Bundles updated"); + solutionPerformance.forEachAggregateStatistics((s) => { + s.name = `Aggregate ${s.name}`; + statistics.push(s); + }); + forEachMeasure((name, duration) => { + if (isSolutionMarkOrMeasure(name)) statistics.push({ name: `${getNameFromSolutionBuilderMarkOrMeasure(name)} time`, value: duration, type: 0 /* time */ }); + }); + disable(); + enable(); + solutionPerformance.clear(); + reportAllStatistics(sys, statistics); + function reportSolutionBuilderCountStatistic(name) { + const value = getCount(name); + if (value) { + statistics.push({ name: getNameFromSolutionBuilderMarkOrMeasure(name), value, type: 1 /* count */ }); + } + } + function getNameFromSolutionBuilderMarkOrMeasure(name) { + return name.replace("SolutionBuilder::", ""); + } +} +function canReportDiagnostics(system, compilerOptions) { + return system === sys && (compilerOptions.diagnostics || compilerOptions.extendedDiagnostics); +} +function canTrace(system, compilerOptions) { + return system === sys && compilerOptions.generateTrace; +} +function enableStatisticsAndTracing(system, compilerOptions, isBuildMode) { + if (canReportDiagnostics(system, compilerOptions)) { + enable(system); + } + if (canTrace(system, compilerOptions)) { + startTracing(isBuildMode ? "build" : "project", compilerOptions.generateTrace, compilerOptions.configFilePath); + } +} +function isSolutionMarkOrMeasure(name) { + return startsWith(name, "SolutionBuilder::"); +} +function reportStatistics(sys2, program, solutionPerformance) { + var _a; + const compilerOptions = program.getCompilerOptions(); + if (canTrace(sys2, compilerOptions)) { + (_a = tracing) == null ? void 0 : _a.stopTracing(); + } + let statistics; + if (canReportDiagnostics(sys2, compilerOptions)) { + statistics = []; + const memoryUsed = sys2.getMemoryUsage ? sys2.getMemoryUsage() : -1; + reportCountStatistic("Files", program.getSourceFiles().length); + const lineCounts = countLines(program); + if (compilerOptions.extendedDiagnostics) { + for (const [key, value] of lineCounts.entries()) { + reportCountStatistic("Lines of " + key, value); + } + } else { + reportCountStatistic("Lines", reduceLeftIterator(lineCounts.values(), (sum, count) => sum + count, 0)); + } + reportCountStatistic("Identifiers", program.getIdentifierCount()); + reportCountStatistic("Symbols", program.getSymbolCount()); + reportCountStatistic("Types", program.getTypeCount()); + reportCountStatistic("Instantiations", program.getInstantiationCount()); + if (memoryUsed >= 0) { + reportStatisticalValue( + { name: "Memory used", value: memoryUsed, type: 2 /* memory */ }, + /*aggregate*/ + true + ); + } + const isPerformanceEnabled = isEnabled(); + const programTime = isPerformanceEnabled ? getDuration("Program") : 0; + const bindTime = isPerformanceEnabled ? getDuration("Bind") : 0; + const checkTime = isPerformanceEnabled ? getDuration("Check") : 0; + const emitTime = isPerformanceEnabled ? getDuration("Emit") : 0; + if (compilerOptions.extendedDiagnostics) { + const caches = program.getRelationCacheSizes(); + reportCountStatistic("Assignability cache size", caches.assignable); + reportCountStatistic("Identity cache size", caches.identity); + reportCountStatistic("Subtype cache size", caches.subtype); + reportCountStatistic("Strict subtype cache size", caches.strictSubtype); + if (isPerformanceEnabled) { + forEachMeasure((name, duration) => { + if (!isSolutionMarkOrMeasure(name)) reportTimeStatistic( + `${name} time`, + duration, + /*aggregate*/ + true + ); + }); + } + } else if (isPerformanceEnabled) { + reportTimeStatistic( + "I/O read", + getDuration("I/O Read"), + /*aggregate*/ + true + ); + reportTimeStatistic( + "I/O write", + getDuration("I/O Write"), + /*aggregate*/ + true + ); + reportTimeStatistic( + "Parse time", + programTime, + /*aggregate*/ + true + ); + reportTimeStatistic( + "Bind time", + bindTime, + /*aggregate*/ + true + ); + reportTimeStatistic( + "Check time", + checkTime, + /*aggregate*/ + true + ); + reportTimeStatistic( + "Emit time", + emitTime, + /*aggregate*/ + true + ); + } + if (isPerformanceEnabled) { + reportTimeStatistic( + "Total time", + programTime + bindTime + checkTime + emitTime, + /*aggregate*/ + false + ); + } + reportAllStatistics(sys2, statistics); + if (!isPerformanceEnabled) { + sys2.write(Diagnostics.Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_native_implementation_of_the_Web_Performance_API_could_not_be_found.message + "\n"); + } else { + if (solutionPerformance) { + forEachMeasure((name) => { + if (!isSolutionMarkOrMeasure(name)) clearMeasures(name); + }); + forEachMark((name) => { + if (!isSolutionMarkOrMeasure(name)) clearMarks(name); + }); + } else { + disable(); + } + } + } + function reportStatisticalValue(s, aggregate) { + statistics.push(s); + if (aggregate) solutionPerformance == null ? void 0 : solutionPerformance.addAggregateStatistic(s); + } + function reportCountStatistic(name, count) { + reportStatisticalValue( + { name, value: count, type: 1 /* count */ }, + /*aggregate*/ + true + ); + } + function reportTimeStatistic(name, time, aggregate) { + reportStatisticalValue({ name, value: time, type: 0 /* time */ }, aggregate); + } +} +function reportAllStatistics(sys2, statistics) { + let nameSize = 0; + let valueSize = 0; + for (const s of statistics) { + if (s.name.length > nameSize) { + nameSize = s.name.length; + } + const value = statisticValue(s); + if (value.length > valueSize) { + valueSize = value.length; + } + } + for (const s of statistics) { + sys2.write(`${s.name}:`.padEnd(nameSize + 2) + statisticValue(s).toString().padStart(valueSize) + sys2.newLine); + } +} +function statisticValue(s) { + switch (s.type) { + case 1 /* count */: + return "" + s.value; + case 0 /* time */: + return (s.value / 1e3).toFixed(2) + "s"; + case 2 /* memory */: + return Math.round(s.value / 1e3) + "K"; + default: + Debug.assertNever(s.type); + } +} +function writeConfigFile(sys2, reportDiagnostic, options) { + const currentDirectory = sys2.getCurrentDirectory(); + const file = normalizePath(combinePaths(currentDirectory, "tsconfig.json")); + if (sys2.fileExists(file)) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.A_tsconfig_json_file_is_already_defined_at_Colon_0, file)); + } else { + sys2.writeFile(file, generateTSConfig(options, sys2.newLine)); + const output = [sys2.newLine, ...getHeader(sys2, "Created a new tsconfig.json")]; + output.push(`You can learn more at https://aka.ms/tsconfig` + sys2.newLine); + for (const line of output) { + sys2.write(line); + } + } + return; +} + +// src/compiler/expressionToTypeNode.ts +function syntacticResult(type, reportFallback = true) { + return { type, reportFallback }; +} +var notImplemented2 = syntacticResult( + /*type*/ + void 0, + /*reportFallback*/ + false +); +var alreadyReported = syntacticResult( + /*type*/ + void 0, + /*reportFallback*/ + false +); +var failed = syntacticResult( + /*type*/ + void 0, + /*reportFallback*/ + true +); +function createSyntacticTypeNodeBuilder(options, resolver) { + const strictNullChecks = getStrictOptionValue(options, "strictNullChecks"); + return { + serializeTypeOfDeclaration, + serializeReturnTypeForSignature, + serializeTypeOfExpression, + serializeTypeOfAccessor, + tryReuseExistingTypeNode(context, existing) { + if (!resolver.canReuseTypeNode(context, existing)) { + return void 0; + } + return tryReuseExistingTypeNode(context, existing); + } + }; + function reuseNode(context, node, range = node) { + return node === void 0 ? void 0 : resolver.markNodeReuse(context, node.flags & 16 /* Synthesized */ ? node : factory.cloneNode(node), range ?? node); + } + function tryReuseExistingTypeNode(context, existing) { + const { finalizeBoundary, startRecoveryScope, hadError, markError } = resolver.createRecoveryBoundary(context); + const transformed = visitNode(existing, visitExistingNodeTreeSymbols, isTypeNode); + if (!finalizeBoundary()) { + return void 0; + } + context.approximateLength += existing.end - existing.pos; + return transformed; + function visitExistingNodeTreeSymbols(node) { + if (hadError()) return node; + const recover = startRecoveryScope(); + const onExitNewScope = isNewScopeNode(node) ? resolver.enterNewScope(context, node) : void 0; + const result = visitExistingNodeTreeSymbolsWorker(node); + onExitNewScope == null ? void 0 : onExitNewScope(); + if (hadError()) { + if (isTypeNode(node) && !isTypePredicateNode(node)) { + recover(); + return resolver.serializeExistingTypeNode(context, node); + } + return node; + } + return result ? resolver.markNodeReuse(context, result, node) : void 0; + } + function tryVisitSimpleTypeNode(node) { + const innerNode = skipTypeParentheses(node); + switch (innerNode.kind) { + case 184 /* TypeReference */: + return tryVisitTypeReference(innerNode); + case 187 /* TypeQuery */: + return tryVisitTypeQuery(innerNode); + case 200 /* IndexedAccessType */: + return tryVisitIndexedAccess(innerNode); + case 199 /* TypeOperator */: + const typeOperatorNode = innerNode; + if (typeOperatorNode.operator === 143 /* KeyOfKeyword */) { + return tryVisitKeyOf(typeOperatorNode); + } + } + return visitNode(node, visitExistingNodeTreeSymbols, isTypeNode); + } + function tryVisitIndexedAccess(node) { + const resultObjectType = tryVisitSimpleTypeNode(node.objectType); + if (resultObjectType === void 0) { + return void 0; + } + return factory.updateIndexedAccessTypeNode(node, resultObjectType, visitNode(node.indexType, visitExistingNodeTreeSymbols, isTypeNode)); + } + function tryVisitKeyOf(node) { + Debug.assertEqual(node.operator, 143 /* KeyOfKeyword */); + const type = tryVisitSimpleTypeNode(node.type); + if (type === void 0) { + return void 0; + } + return factory.updateTypeOperatorNode(node, type); + } + function tryVisitTypeQuery(node) { + const { introducesError, node: exprName } = resolver.trackExistingEntityName(context, node.exprName); + if (!introducesError) { + return factory.updateTypeQueryNode( + node, + exprName, + visitNodes2(node.typeArguments, visitExistingNodeTreeSymbols, isTypeNode) + ); + } + const serializedName = resolver.serializeTypeName( + context, + node.exprName, + /*isTypeOf*/ + true + ); + if (serializedName) { + return resolver.markNodeReuse(context, serializedName, node.exprName); + } + } + function tryVisitTypeReference(node) { + if (resolver.canReuseTypeNode(context, node)) { + const { introducesError, node: newName } = resolver.trackExistingEntityName(context, node.typeName); + const typeArguments = visitNodes2(node.typeArguments, visitExistingNodeTreeSymbols, isTypeNode); + if (!introducesError) { + const updated = factory.updateTypeReferenceNode( + node, + newName, + typeArguments + ); + return resolver.markNodeReuse(context, updated, node); + } else { + const serializedName = resolver.serializeTypeName( + context, + node.typeName, + /*isTypeOf*/ + false, + typeArguments + ); + if (serializedName) { + return resolver.markNodeReuse(context, serializedName, node.typeName); + } + } + } + } + function visitExistingNodeTreeSymbolsWorker(node) { + var _a; + if (isJSDocTypeExpression(node)) { + return visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode); + } + if (isJSDocAllType(node) || node.kind === 320 /* JSDocNamepathType */) { + return factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + if (isJSDocUnknownType(node)) { + return factory.createKeywordTypeNode(159 /* UnknownKeyword */); + } + if (isJSDocNullableType(node)) { + return factory.createUnionTypeNode([visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode), factory.createLiteralTypeNode(factory.createNull())]); + } + if (isJSDocOptionalType(node)) { + return factory.createUnionTypeNode([visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode), factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); + } + if (isJSDocNonNullableType(node)) { + return visitNode(node.type, visitExistingNodeTreeSymbols); + } + if (isJSDocVariadicType(node)) { + return factory.createArrayTypeNode(visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode)); + } + if (isJSDocTypeLiteral(node)) { + return factory.createTypeLiteralNode(map(node.jsDocPropertyTags, (t) => { + const name = visitNode(isIdentifier(t.name) ? t.name : t.name.right, visitExistingNodeTreeSymbols, isIdentifier); + const overrideTypeNode = resolver.getJsDocPropertyOverride(context, node, t); + return factory.createPropertySignature( + /*modifiers*/ + void 0, + name, + t.isBracketed || t.typeExpression && isJSDocOptionalType(t.typeExpression.type) ? factory.createToken(58 /* QuestionToken */) : void 0, + overrideTypeNode || t.typeExpression && visitNode(t.typeExpression.type, visitExistingNodeTreeSymbols, isTypeNode) || factory.createKeywordTypeNode(133 /* AnyKeyword */) + ); + })); + } + if (isTypeReferenceNode(node) && isIdentifier(node.typeName) && node.typeName.escapedText === "") { + return setOriginalNode(factory.createKeywordTypeNode(133 /* AnyKeyword */), node); + } + if ((isExpressionWithTypeArguments(node) || isTypeReferenceNode(node)) && isJSDocIndexSignature(node)) { + return factory.createTypeLiteralNode([factory.createIndexSignature( + /*modifiers*/ + void 0, + [factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "x", + /*questionToken*/ + void 0, + visitNode(node.typeArguments[0], visitExistingNodeTreeSymbols, isTypeNode) + )], + visitNode(node.typeArguments[1], visitExistingNodeTreeSymbols, isTypeNode) + )]); + } + if (isJSDocFunctionType(node)) { + if (isJSDocConstructSignature(node)) { + let newTypeNode; + return factory.createConstructorTypeNode( + /*modifiers*/ + void 0, + visitNodes2(node.typeParameters, visitExistingNodeTreeSymbols, isTypeParameterDeclaration), + mapDefined(node.parameters, (p, i) => p.name && isIdentifier(p.name) && p.name.escapedText === "new" ? (newTypeNode = p.type, void 0) : factory.createParameterDeclaration( + /*modifiers*/ + void 0, + getEffectiveDotDotDotForParameter(p), + resolver.markNodeReuse(context, factory.createIdentifier(getNameForJSDocFunctionParameter(p, i)), p), + factory.cloneNode(p.questionToken), + visitNode(p.type, visitExistingNodeTreeSymbols, isTypeNode), + /*initializer*/ + void 0 + )), + visitNode(newTypeNode || node.type, visitExistingNodeTreeSymbols, isTypeNode) || factory.createKeywordTypeNode(133 /* AnyKeyword */) + ); + } else { + return factory.createFunctionTypeNode( + visitNodes2(node.typeParameters, visitExistingNodeTreeSymbols, isTypeParameterDeclaration), + map(node.parameters, (p, i) => factory.createParameterDeclaration( + /*modifiers*/ + void 0, + getEffectiveDotDotDotForParameter(p), + resolver.markNodeReuse(context, factory.createIdentifier(getNameForJSDocFunctionParameter(p, i)), p), + factory.cloneNode(p.questionToken), + visitNode(p.type, visitExistingNodeTreeSymbols, isTypeNode), + /*initializer*/ + void 0 + )), + visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode) || factory.createKeywordTypeNode(133 /* AnyKeyword */) + ); + } + } + if (isThisTypeNode(node)) { + if (resolver.canReuseTypeNode(context, node)) { + return node; + } + markError(); + return node; + } + if (isTypeParameterDeclaration(node)) { + const { node: newName } = resolver.trackExistingEntityName(context, node.name); + return factory.updateTypeParameterDeclaration( + node, + visitNodes2(node.modifiers, visitExistingNodeTreeSymbols, isModifier), + // resolver.markNodeReuse(context, typeParameterToName(getDeclaredTypeOfSymbol(getSymbolOfDeclaration(node)), context), node), + newName, + visitNode(node.constraint, visitExistingNodeTreeSymbols, isTypeNode), + visitNode(node.default, visitExistingNodeTreeSymbols, isTypeNode) + ); + } + if (isIndexedAccessTypeNode(node)) { + const result = tryVisitIndexedAccess(node); + if (!result) { + markError(); + return node; + } + return result; + } + if (isTypeReferenceNode(node)) { + const result = tryVisitTypeReference(node); + if (result) { + return result; + } + markError(); + return node; + } + if (isLiteralImportTypeNode(node)) { + if (((_a = node.attributes) == null ? void 0 : _a.token) === 132 /* AssertKeyword */) { + markError(); + return node; + } + if (!resolver.canReuseTypeNode(context, node)) { + return resolver.serializeExistingTypeNode(context, node); + } + const specifier = rewriteModuleSpecifier2(node, node.argument.literal); + const literal = specifier === node.argument.literal ? reuseNode(context, node.argument.literal) : specifier; + return factory.updateImportTypeNode( + node, + literal === node.argument.literal ? reuseNode(context, node.argument) : factory.createLiteralTypeNode(literal), + visitNode(node.attributes, visitExistingNodeTreeSymbols, isImportAttributes), + visitNode(node.qualifier, visitExistingNodeTreeSymbols, isEntityName), + visitNodes2(node.typeArguments, visitExistingNodeTreeSymbols, isTypeNode), + node.isTypeOf + ); + } + if (isNamedDeclaration(node) && node.name.kind === 168 /* ComputedPropertyName */ && !resolver.hasLateBindableName(node)) { + if (!hasDynamicName(node)) { + return visitEachChild2(node, visitExistingNodeTreeSymbols); + } + if (resolver.shouldRemoveDeclaration(context, node)) { + return void 0; + } + } + if (isFunctionLike(node) && !node.type || isPropertyDeclaration(node) && !node.type && !node.initializer || isPropertySignature(node) && !node.type && !node.initializer || isParameter(node) && !node.type && !node.initializer) { + let visited = visitEachChild2(node, visitExistingNodeTreeSymbols); + if (visited === node) { + visited = resolver.markNodeReuse(context, factory.cloneNode(node), node); + } + visited.type = factory.createKeywordTypeNode(133 /* AnyKeyword */); + if (isParameter(node)) { + visited.modifiers = void 0; + } + return visited; + } + if (isTypeQueryNode(node)) { + const result = tryVisitTypeQuery(node); + if (!result) { + markError(); + return node; + } + return result; + } + if (isComputedPropertyName(node) && isEntityNameExpression(node.expression)) { + const { node: result, introducesError } = resolver.trackExistingEntityName(context, node.expression); + if (!introducesError) { + return factory.updateComputedPropertyName(node, result); + } else { + const computedPropertyNameType = resolver.serializeTypeOfExpression(context, node.expression); + let literal; + if (isLiteralTypeNode(computedPropertyNameType)) { + literal = computedPropertyNameType.literal; + } else { + const evaluated = resolver.evaluateEntityNameExpression(node.expression); + const literalNode = typeof evaluated.value === "string" ? factory.createStringLiteral( + evaluated.value, + /*isSingleQuote*/ + void 0 + ) : typeof evaluated.value === "number" ? factory.createNumericLiteral( + evaluated.value, + /*numericLiteralFlags*/ + 0 + ) : void 0; + if (!literalNode) { + if (isImportTypeNode(computedPropertyNameType)) { + resolver.trackComputedName(context, node.expression); + } + return node; + } + literal = literalNode; + } + if (literal.kind === 11 /* StringLiteral */ && isIdentifierText(literal.text, getEmitScriptTarget(options))) { + return factory.createIdentifier(literal.text); + } + if (literal.kind === 9 /* NumericLiteral */ && !literal.text.startsWith("-")) { + return literal; + } + return factory.updateComputedPropertyName(node, literal); + } + } + if (isTypePredicateNode(node)) { + let parameterName; + if (isIdentifier(node.parameterName)) { + const { node: result, introducesError } = resolver.trackExistingEntityName(context, node.parameterName); + if (introducesError) markError(); + parameterName = result; + } else { + parameterName = factory.cloneNode(node.parameterName); + } + return factory.updateTypePredicateNode(node, factory.cloneNode(node.assertsModifier), parameterName, visitNode(node.type, visitExistingNodeTreeSymbols, isTypeNode)); + } + if (isTupleTypeNode(node) || isTypeLiteralNode(node) || isMappedTypeNode(node)) { + const visited = visitEachChild2(node, visitExistingNodeTreeSymbols); + const clone2 = resolver.markNodeReuse(context, visited === node ? factory.cloneNode(node) : visited, node); + const flags = getEmitFlags(clone2); + setEmitFlags(clone2, flags | (context.flags & 1024 /* MultilineObjectLiterals */ && isTypeLiteralNode(node) ? 0 : 1 /* SingleLine */)); + return clone2; + } + if (isStringLiteral(node) && !!(context.flags & 268435456 /* UseSingleQuotesForStringLiteralType */) && !node.singleQuote) { + const clone2 = factory.cloneNode(node); + clone2.singleQuote = true; + return clone2; + } + if (isConditionalTypeNode(node)) { + const checkType = visitNode(node.checkType, visitExistingNodeTreeSymbols, isTypeNode); + const disposeScope = resolver.enterNewScope(context, node); + const extendType = visitNode(node.extendsType, visitExistingNodeTreeSymbols, isTypeNode); + const trueType = visitNode(node.trueType, visitExistingNodeTreeSymbols, isTypeNode); + disposeScope(); + const falseType = visitNode(node.falseType, visitExistingNodeTreeSymbols, isTypeNode); + return factory.updateConditionalTypeNode( + node, + checkType, + extendType, + trueType, + falseType + ); + } + if (isTypeOperatorNode(node)) { + if (node.operator === 158 /* UniqueKeyword */ && node.type.kind === 155 /* SymbolKeyword */) { + if (!resolver.canReuseTypeNode(context, node)) { + markError(); + return node; + } + } else if (node.operator === 143 /* KeyOfKeyword */) { + const result = tryVisitKeyOf(node); + if (!result) { + markError(); + return node; + } + return result; + } + } + return visitEachChild2(node, visitExistingNodeTreeSymbols); + function visitEachChild2(node2, visitor) { + const nonlocalNode = !context.enclosingFile || context.enclosingFile !== getSourceFileOfNode(node2); + return visitEachChild( + node2, + visitor, + /*context*/ + void 0, + nonlocalNode ? visitNodesWithoutCopyingPositions : void 0 + ); + } + function visitNodesWithoutCopyingPositions(nodes, visitor, test, start, count) { + let result = visitNodes2(nodes, visitor, test, start, count); + if (result) { + if (result.pos !== -1 || result.end !== -1) { + if (result === nodes) { + result = factory.createNodeArray(nodes.slice(), nodes.hasTrailingComma); + } + setTextRangePosEnd(result, -1, -1); + } + } + return result; + } + function getEffectiveDotDotDotForParameter(p) { + return p.dotDotDotToken || (p.type && isJSDocVariadicType(p.type) ? factory.createToken(26 /* DotDotDotToken */) : void 0); + } + function getNameForJSDocFunctionParameter(p, index) { + return p.name && isIdentifier(p.name) && p.name.escapedText === "this" ? "this" : getEffectiveDotDotDotForParameter(p) ? `args` : `arg${index}`; + } + function rewriteModuleSpecifier2(parent2, lit) { + const newName = resolver.getModuleSpecifierOverride(context, parent2, lit); + return newName ? setOriginalNode(factory.createStringLiteral(newName), lit) : lit; + } + } + } + function serializeExistingTypeNode(typeNode, context, addUndefined) { + if (!typeNode) return void 0; + let result; + if ((!addUndefined || canAddUndefined(typeNode)) && resolver.canReuseTypeNode(context, typeNode)) { + result = tryReuseExistingTypeNode(context, typeNode); + if (result !== void 0) { + result = addUndefinedIfNeeded( + result, + addUndefined, + /*owner*/ + void 0, + context + ); + } + } + return result; + } + function serializeTypeAnnotationOfDeclaration(declaredType, context, node, symbol, requiresAddingUndefined, useFallback = requiresAddingUndefined !== void 0) { + if (!declaredType) return void 0; + if (!resolver.canReuseTypeNodeAnnotation(context, node, declaredType, symbol, requiresAddingUndefined)) { + if (!requiresAddingUndefined || !resolver.canReuseTypeNodeAnnotation( + context, + node, + declaredType, + symbol, + /*requiresAddingUndefined*/ + false + )) { + return void 0; + } + } + let result; + if (!requiresAddingUndefined || canAddUndefined(declaredType)) { + result = serializeExistingTypeNode(declaredType, context, requiresAddingUndefined); + } + if (result !== void 0 || !useFallback) { + return result; + } + context.tracker.reportInferenceFallback(node); + return resolver.serializeExistingTypeNode(context, declaredType, requiresAddingUndefined) ?? factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + function serializeExistingTypeNodeWithFallback(typeNode, context, addUndefined, targetNode) { + if (!typeNode) return void 0; + const result = serializeExistingTypeNode(typeNode, context, addUndefined); + if (result !== void 0) { + return result; + } + context.tracker.reportInferenceFallback(targetNode ?? typeNode); + return resolver.serializeExistingTypeNode(context, typeNode, addUndefined) ?? factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + function serializeTypeOfAccessor(accessor, symbol, context) { + return typeFromAccessor(accessor, symbol, context) ?? inferAccessorType(accessor, resolver.getAllAccessorDeclarations(accessor), context, symbol); + } + function serializeTypeOfExpression(expr, context, addUndefined, preserveLiterals) { + const result = typeFromExpression( + expr, + context, + /*isConstContext*/ + false, + addUndefined, + preserveLiterals + ); + return result.type !== void 0 ? result.type : inferExpressionType(expr, context, result.reportFallback); + } + function serializeTypeOfDeclaration(node, symbol, context) { + switch (node.kind) { + case 170 /* Parameter */: + case 342 /* JSDocParameterTag */: + return typeFromParameter(node, symbol, context); + case 261 /* VariableDeclaration */: + return typeFromVariable(node, symbol, context); + case 172 /* PropertySignature */: + case 349 /* JSDocPropertyTag */: + case 173 /* PropertyDeclaration */: + return typeFromProperty(node, symbol, context); + case 209 /* BindingElement */: + return inferTypeOfDeclaration(node, symbol, context); + case 278 /* ExportAssignment */: + return serializeTypeOfExpression( + node.expression, + context, + /*addUndefined*/ + void 0, + /*preserveLiterals*/ + true + ); + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + case 227 /* BinaryExpression */: + return typeFromExpandoProperty(node, symbol, context); + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + return typeFromPropertyAssignment(node, symbol, context); + default: + Debug.assertNever(node, `Node needs to be an inferrable node, found ${Debug.formatSyntaxKind(node.kind)}`); + } + } + function typeFromPropertyAssignment(node, symbol, context) { + const typeAnnotation = getEffectiveTypeAnnotationNode(node); + let result; + if (typeAnnotation && resolver.canReuseTypeNodeAnnotation(context, node, typeAnnotation, symbol)) { + result = serializeExistingTypeNode(typeAnnotation, context); + } + if (!result && node.kind === 304 /* PropertyAssignment */) { + const initializer = node.initializer; + const assertionNode = isJSDocTypeAssertion(initializer) ? getJSDocTypeAssertionType(initializer) : initializer.kind === 235 /* AsExpression */ || initializer.kind === 217 /* TypeAssertionExpression */ ? initializer.type : void 0; + if (assertionNode && !isConstTypeReference(assertionNode) && resolver.canReuseTypeNodeAnnotation(context, node, assertionNode, symbol)) { + result = serializeExistingTypeNode(assertionNode, context); + } + } + return result ?? inferTypeOfDeclaration( + node, + symbol, + context, + /*reportFallback*/ + false + ); + } + function serializeReturnTypeForSignature(node, symbol, context) { + switch (node.kind) { + case 178 /* GetAccessor */: + return serializeTypeOfAccessor(node, symbol, context); + case 175 /* MethodDeclaration */: + case 263 /* FunctionDeclaration */: + case 181 /* ConstructSignature */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 177 /* Constructor */: + case 179 /* SetAccessor */: + case 182 /* IndexSignature */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 318 /* JSDocFunctionType */: + case 324 /* JSDocSignature */: + return createReturnFromSignature(node, symbol, context); + default: + Debug.assertNever(node, `Node needs to be an inferrable node, found ${Debug.formatSyntaxKind(node.kind)}`); + } + } + function getTypeAnnotationFromAccessor(accessor) { + if (accessor) { + return accessor.kind === 178 /* GetAccessor */ ? isInJSFile(accessor) && getJSDocType(accessor) || getEffectiveReturnTypeNode(accessor) : getEffectiveSetAccessorTypeAnnotationNode(accessor); + } + } + function getTypeAnnotationFromAllAccessorDeclarations(node, accessors) { + let accessorType = getTypeAnnotationFromAccessor(node); + if (!accessorType && node !== accessors.firstAccessor) { + accessorType = getTypeAnnotationFromAccessor(accessors.firstAccessor); + } + if (!accessorType && accessors.secondAccessor && node !== accessors.secondAccessor) { + accessorType = getTypeAnnotationFromAccessor(accessors.secondAccessor); + } + return accessorType; + } + function typeFromAccessor(node, symbol, context) { + const accessorDeclarations = resolver.getAllAccessorDeclarations(node); + const accessorType = getTypeAnnotationFromAllAccessorDeclarations(node, accessorDeclarations); + if (accessorType && !isTypePredicateNode(accessorType)) { + return withNewScope(context, node, () => serializeTypeAnnotationOfDeclaration(accessorType, context, node, symbol) ?? inferTypeOfDeclaration(node, symbol, context)); + } + if (accessorDeclarations.getAccessor) { + return withNewScope(context, accessorDeclarations.getAccessor, () => createReturnFromSignature(accessorDeclarations.getAccessor, symbol, context)); + } + return void 0; + } + function typeFromVariable(node, symbol, context) { + var _a; + const declaredType = getEffectiveTypeAnnotationNode(node); + let resultType = failed; + if (declaredType) { + resultType = syntacticResult(serializeTypeAnnotationOfDeclaration(declaredType, context, node, symbol)); + } else if (node.initializer && (((_a = symbol.declarations) == null ? void 0 : _a.length) === 1 || countWhere(symbol.declarations, isVariableDeclaration) === 1)) { + if (!resolver.isExpandoFunctionDeclaration(node) && !isContextuallyTyped(node)) { + resultType = typeFromExpression( + node.initializer, + context, + /*isConstContext*/ + void 0, + /*requiresAddingUndefined*/ + void 0, + isVarConstLike(node) + ); + } + } + return resultType.type !== void 0 ? resultType.type : inferTypeOfDeclaration(node, symbol, context, resultType.reportFallback); + } + function typeFromParameter(node, symbol, context) { + const parent2 = node.parent; + if (parent2.kind === 179 /* SetAccessor */) { + return serializeTypeOfAccessor( + parent2, + /*symbol*/ + void 0, + context + ); + } + const declaredType = getEffectiveTypeAnnotationNode(node); + const addUndefined = resolver.requiresAddingImplicitUndefined(node, symbol, context.enclosingDeclaration); + let resultType = failed; + if (declaredType) { + resultType = syntacticResult(serializeTypeAnnotationOfDeclaration(declaredType, context, node, symbol, addUndefined)); + } else if (isParameter(node) && node.initializer && isIdentifier(node.name) && !isContextuallyTyped(node)) { + resultType = typeFromExpression( + node.initializer, + context, + /*isConstContext*/ + void 0, + addUndefined + ); + } + return resultType.type !== void 0 ? resultType.type : inferTypeOfDeclaration(node, symbol, context, resultType.reportFallback); + } + function typeFromExpandoProperty(node, symbol, context) { + const declaredType = getEffectiveTypeAnnotationNode(node); + let result; + if (declaredType) { + result = serializeTypeAnnotationOfDeclaration(declaredType, context, node, symbol); + } + const oldSuppressReportInferenceFallback = context.suppressReportInferenceFallback; + context.suppressReportInferenceFallback = true; + const resultType = result ?? inferTypeOfDeclaration( + node, + symbol, + context, + /*reportFallback*/ + false + ); + context.suppressReportInferenceFallback = oldSuppressReportInferenceFallback; + return resultType; + } + function typeFromProperty(node, symbol, context) { + const declaredType = getEffectiveTypeAnnotationNode(node); + const requiresAddingUndefined = resolver.requiresAddingImplicitUndefined(node, symbol, context.enclosingDeclaration); + let resultType = failed; + if (declaredType) { + resultType = syntacticResult(serializeTypeAnnotationOfDeclaration(declaredType, context, node, symbol, requiresAddingUndefined)); + } else { + const initializer = isPropertyDeclaration(node) ? node.initializer : void 0; + if (initializer && !isContextuallyTyped(node)) { + const isReadonly = isDeclarationReadonly(node); + resultType = typeFromExpression( + initializer, + context, + /*isConstContext*/ + void 0, + requiresAddingUndefined, + isReadonly + ); + } + } + return resultType.type !== void 0 ? resultType.type : inferTypeOfDeclaration(node, symbol, context, resultType.reportFallback); + } + function inferTypeOfDeclaration(node, symbol, context, reportFallback = true) { + if (reportFallback) { + context.tracker.reportInferenceFallback(node); + } + if (context.noInferenceFallback === true) { + return factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + return resolver.serializeTypeOfDeclaration(context, node, symbol); + } + function inferExpressionType(node, context, reportFallback = true, requiresAddingUndefined) { + Debug.assert(!requiresAddingUndefined); + if (reportFallback) { + context.tracker.reportInferenceFallback(node); + } + if (context.noInferenceFallback === true) { + return factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + return resolver.serializeTypeOfExpression(context, node) ?? factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + function inferReturnTypeOfSignatureSignature(node, context, symbol, reportFallback) { + if (reportFallback) { + context.tracker.reportInferenceFallback(node); + } + if (context.noInferenceFallback === true) { + return factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + return resolver.serializeReturnTypeForSignature(context, node, symbol) ?? factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + function inferAccessorType(node, allAccessors, context, symbol, reportFallback = true) { + if (node.kind === 178 /* GetAccessor */) { + return createReturnFromSignature(node, symbol, context, reportFallback); + } else { + if (reportFallback) { + context.tracker.reportInferenceFallback(node); + } + const result = allAccessors.getAccessor && createReturnFromSignature(allAccessors.getAccessor, symbol, context, reportFallback); + return result ?? resolver.serializeTypeOfDeclaration(context, node, symbol) ?? factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + } + function withNewScope(context, node, fn) { + const cleanup = resolver.enterNewScope(context, node); + const result = fn(); + cleanup(); + return result; + } + function typeFromTypeAssertion(expression, type, context, requiresAddingUndefined) { + if (isConstTypeReference(type)) { + return typeFromExpression( + expression, + context, + /*isConstContext*/ + true, + requiresAddingUndefined + ); + } + return syntacticResult(serializeExistingTypeNodeWithFallback(type, context, requiresAddingUndefined)); + } + function typeFromExpression(node, context, isConstContext = false, requiresAddingUndefined = false, preserveLiterals = false) { + switch (node.kind) { + case 218 /* ParenthesizedExpression */: + if (isJSDocTypeAssertion(node)) { + return typeFromTypeAssertion(node.expression, getJSDocTypeAssertionType(node), context, requiresAddingUndefined); + } + return typeFromExpression(node.expression, context, isConstContext, requiresAddingUndefined); + case 80 /* Identifier */: + if (resolver.isUndefinedIdentifierExpression(node)) { + return syntacticResult(createUndefinedTypeNode()); + } + break; + case 106 /* NullKeyword */: + if (strictNullChecks) { + return syntacticResult(addUndefinedIfNeeded(factory.createLiteralTypeNode(factory.createNull()), requiresAddingUndefined, node, context)); + } else { + return syntacticResult(factory.createKeywordTypeNode(133 /* AnyKeyword */)); + } + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + Debug.type(node); + return withNewScope(context, node, () => typeFromFunctionLikeExpression(node, context)); + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + const asExpression = node; + return typeFromTypeAssertion(asExpression.expression, asExpression.type, context, requiresAddingUndefined); + case 225 /* PrefixUnaryExpression */: + const unaryExpression = node; + if (isPrimitiveLiteralValue(unaryExpression)) { + return typeFromPrimitiveLiteral( + unaryExpression.operator === 40 /* PlusToken */ ? unaryExpression.operand : unaryExpression, + unaryExpression.operand.kind === 10 /* BigIntLiteral */ ? 163 /* BigIntKeyword */ : 150 /* NumberKeyword */, + context, + isConstContext || preserveLiterals, + requiresAddingUndefined + ); + } + break; + case 210 /* ArrayLiteralExpression */: + return typeFromArrayLiteral(node, context, isConstContext, requiresAddingUndefined); + case 211 /* ObjectLiteralExpression */: + return typeFromObjectLiteral(node, context, isConstContext, requiresAddingUndefined); + case 232 /* ClassExpression */: + return syntacticResult(inferExpressionType( + node, + context, + /*reportFallback*/ + true, + requiresAddingUndefined + )); + case 229 /* TemplateExpression */: + if (!isConstContext && !preserveLiterals) { + return syntacticResult(factory.createKeywordTypeNode(154 /* StringKeyword */)); + } + break; + default: + let typeKind; + let primitiveNode = node; + switch (node.kind) { + case 9 /* NumericLiteral */: + typeKind = 150 /* NumberKeyword */; + break; + case 15 /* NoSubstitutionTemplateLiteral */: + primitiveNode = factory.createStringLiteral(node.text); + typeKind = 154 /* StringKeyword */; + break; + case 11 /* StringLiteral */: + typeKind = 154 /* StringKeyword */; + break; + case 10 /* BigIntLiteral */: + typeKind = 163 /* BigIntKeyword */; + break; + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + typeKind = 136 /* BooleanKeyword */; + break; + } + if (typeKind) { + return typeFromPrimitiveLiteral(primitiveNode, typeKind, context, isConstContext || preserveLiterals, requiresAddingUndefined); + } + } + return failed; + } + function typeFromFunctionLikeExpression(fnNode, context) { + const returnType = createReturnFromSignature( + fnNode, + /*symbol*/ + void 0, + context + ); + const typeParameters = reuseTypeParameters(fnNode.typeParameters, context); + const parameters = fnNode.parameters.map((p) => ensureParameter(p, context)); + return syntacticResult( + factory.createFunctionTypeNode( + typeParameters, + parameters, + returnType + ) + ); + } + function canGetTypeFromArrayLiteral(arrayLiteral, context, isConstContext) { + if (!isConstContext) { + context.tracker.reportInferenceFallback(arrayLiteral); + return false; + } + for (const element of arrayLiteral.elements) { + if (element.kind === 231 /* SpreadElement */) { + context.tracker.reportInferenceFallback(element); + return false; + } + } + return true; + } + function typeFromArrayLiteral(arrayLiteral, context, isConstContext, requiresAddingUndefined) { + if (!canGetTypeFromArrayLiteral(arrayLiteral, context, isConstContext)) { + if (requiresAddingUndefined || isDeclaration(walkUpParenthesizedExpressions(arrayLiteral).parent)) { + return alreadyReported; + } + return syntacticResult(inferExpressionType( + arrayLiteral, + context, + /*reportFallback*/ + false, + requiresAddingUndefined + )); + } + const oldNoInferenceFallback = context.noInferenceFallback; + context.noInferenceFallback = true; + const elementTypesInfo = []; + for (const element of arrayLiteral.elements) { + Debug.assert(element.kind !== 231 /* SpreadElement */); + if (element.kind === 233 /* OmittedExpression */) { + elementTypesInfo.push( + createUndefinedTypeNode() + ); + } else { + const expressionType = typeFromExpression(element, context, isConstContext); + const elementType = expressionType.type !== void 0 ? expressionType.type : inferExpressionType(element, context, expressionType.reportFallback); + elementTypesInfo.push(elementType); + } + } + const tupleType = factory.createTupleTypeNode(elementTypesInfo); + tupleType.emitNode = { flags: 1, autoGenerate: void 0, internalFlags: 0 }; + context.noInferenceFallback = oldNoInferenceFallback; + return notImplemented2; + } + function canGetTypeFromObjectLiteral(objectLiteral, context) { + let result = true; + for (const prop of objectLiteral.properties) { + if (prop.flags & 262144 /* ThisNodeHasError */) { + result = false; + break; + } + if (prop.kind === 305 /* ShorthandPropertyAssignment */ || prop.kind === 306 /* SpreadAssignment */) { + context.tracker.reportInferenceFallback(prop); + result = false; + } else if (prop.name.flags & 262144 /* ThisNodeHasError */) { + result = false; + break; + } else if (prop.name.kind === 81 /* PrivateIdentifier */) { + result = false; + } else if (prop.name.kind === 168 /* ComputedPropertyName */) { + const expression = prop.name.expression; + if (!isPrimitiveLiteralValue( + expression, + /*includeBigInt*/ + false + ) && !resolver.isDefinitelyReferenceToGlobalSymbolObject(expression)) { + context.tracker.reportInferenceFallback(prop.name); + result = false; + } + } + } + return result; + } + function typeFromObjectLiteral(objectLiteral, context, isConstContext, requiresAddingUndefined) { + if (!canGetTypeFromObjectLiteral(objectLiteral, context)) { + if (requiresAddingUndefined || isDeclaration(walkUpParenthesizedExpressions(objectLiteral).parent)) { + return alreadyReported; + } + return syntacticResult(inferExpressionType( + objectLiteral, + context, + /*reportFallback*/ + false, + requiresAddingUndefined + )); + } + const oldNoInferenceFallback = context.noInferenceFallback; + context.noInferenceFallback = true; + const properties = []; + const oldFlags = context.flags; + context.flags |= 4194304 /* InObjectTypeLiteral */; + for (const prop of objectLiteral.properties) { + Debug.assert(!isShorthandPropertyAssignment(prop) && !isSpreadAssignment(prop)); + const name = prop.name; + let newProp; + switch (prop.kind) { + case 175 /* MethodDeclaration */: + newProp = withNewScope(context, prop, () => typeFromObjectLiteralMethod(prop, name, context, isConstContext)); + break; + case 304 /* PropertyAssignment */: + newProp = typeFromObjectLiteralPropertyAssignment(prop, name, context, isConstContext); + break; + case 179 /* SetAccessor */: + case 178 /* GetAccessor */: + newProp = typeFromObjectLiteralAccessor(prop, name, context); + break; + } + if (newProp) { + setCommentRange(newProp, prop); + properties.push(newProp); + } + } + context.flags = oldFlags; + const typeNode = factory.createTypeLiteralNode(properties); + if (!(context.flags & 1024 /* MultilineObjectLiterals */)) { + setEmitFlags(typeNode, 1 /* SingleLine */); + } + context.noInferenceFallback = oldNoInferenceFallback; + return notImplemented2; + } + function typeFromObjectLiteralPropertyAssignment(prop, name, context, isConstContext) { + const modifiers = isConstContext ? [factory.createModifier(148 /* ReadonlyKeyword */)] : []; + const expressionResult = typeFromExpression(prop.initializer, context, isConstContext); + const typeNode = expressionResult.type !== void 0 ? expressionResult.type : inferTypeOfDeclaration( + prop, + /*symbol*/ + void 0, + context, + expressionResult.reportFallback + ); + return factory.createPropertySignature( + modifiers, + reuseNode(context, name), + /*questionToken*/ + void 0, + typeNode + ); + } + function ensureParameter(p, context) { + return factory.updateParameterDeclaration( + p, + /*modifiers*/ + void 0, + reuseNode(context, p.dotDotDotToken), + resolver.serializeNameOfParameter(context, p), + resolver.isOptionalParameter(p) ? factory.createToken(58 /* QuestionToken */) : void 0, + typeFromParameter( + p, + /*symbol*/ + void 0, + context + ), + // Ignore private param props, since this type is going straight back into a param + /*initializer*/ + void 0 + ); + } + function reuseTypeParameters(typeParameters, context) { + return typeParameters == null ? void 0 : typeParameters.map((tp) => { + var _a; + const { node: tpName } = resolver.trackExistingEntityName(context, tp.name); + return factory.updateTypeParameterDeclaration( + tp, + (_a = tp.modifiers) == null ? void 0 : _a.map((m) => reuseNode(context, m)), + tpName, + serializeExistingTypeNodeWithFallback(tp.constraint, context), + serializeExistingTypeNodeWithFallback(tp.default, context) + ); + }); + } + function typeFromObjectLiteralMethod(method, name, context, isConstContext) { + const returnType = createReturnFromSignature( + method, + /*symbol*/ + void 0, + context + ); + const typeParameters = reuseTypeParameters(method.typeParameters, context); + const parameters = method.parameters.map((p) => ensureParameter(p, context)); + if (isConstContext) { + return factory.createPropertySignature( + [factory.createModifier(148 /* ReadonlyKeyword */)], + reuseNode(context, name), + reuseNode(context, method.questionToken), + factory.createFunctionTypeNode( + typeParameters, + parameters, + returnType + ) + ); + } else { + if (isIdentifier(name) && name.escapedText === "new") { + name = factory.createStringLiteral("new"); + } + return factory.createMethodSignature( + [], + reuseNode(context, name), + reuseNode(context, method.questionToken), + typeParameters, + parameters, + returnType + ); + } + } + function typeFromObjectLiteralAccessor(accessor, name, context) { + const allAccessors = resolver.getAllAccessorDeclarations(accessor); + const getAccessorType = allAccessors.getAccessor && getTypeAnnotationFromAccessor(allAccessors.getAccessor); + const setAccessorType = allAccessors.setAccessor && getTypeAnnotationFromAccessor(allAccessors.setAccessor); + if (getAccessorType !== void 0 && setAccessorType !== void 0) { + return withNewScope(context, accessor, () => { + const parameters = accessor.parameters.map((p) => ensureParameter(p, context)); + if (isGetAccessor(accessor)) { + return factory.updateGetAccessorDeclaration( + accessor, + [], + reuseNode(context, name), + parameters, + serializeExistingTypeNodeWithFallback(getAccessorType, context), + /*body*/ + void 0 + ); + } else { + return factory.updateSetAccessorDeclaration( + accessor, + [], + reuseNode(context, name), + parameters, + /*body*/ + void 0 + ); + } + }); + } else if (allAccessors.firstAccessor === accessor) { + const foundType = getAccessorType ? withNewScope(context, allAccessors.getAccessor, () => serializeExistingTypeNodeWithFallback(getAccessorType, context)) : setAccessorType ? withNewScope(context, allAccessors.setAccessor, () => serializeExistingTypeNodeWithFallback(setAccessorType, context)) : void 0; + const propertyType = foundType ?? inferAccessorType( + accessor, + allAccessors, + context, + /*symbol*/ + void 0 + ); + const propertySignature = factory.createPropertySignature( + allAccessors.setAccessor === void 0 ? [factory.createModifier(148 /* ReadonlyKeyword */)] : [], + reuseNode(context, name), + /*questionToken*/ + void 0, + propertyType + ); + return propertySignature; + } + } + function createUndefinedTypeNode() { + if (strictNullChecks) { + return factory.createKeywordTypeNode(157 /* UndefinedKeyword */); + } else { + return factory.createKeywordTypeNode(133 /* AnyKeyword */); + } + } + function typeFromPrimitiveLiteral(node, baseType, context, preserveLiterals, requiresAddingUndefined) { + let result; + if (preserveLiterals) { + if (node.kind === 225 /* PrefixUnaryExpression */ && node.operator === 40 /* PlusToken */) { + result = factory.createLiteralTypeNode(reuseNode(context, node.operand)); + } + result = factory.createLiteralTypeNode(reuseNode(context, node)); + } else { + result = factory.createKeywordTypeNode(baseType); + } + return syntacticResult(addUndefinedIfNeeded(result, requiresAddingUndefined, node, context)); + } + function addUndefinedIfNeeded(node, addUndefined, owner, context) { + const parentDeclaration = owner && walkUpParenthesizedExpressions(owner).parent; + const optionalDeclaration = parentDeclaration && isDeclaration(parentDeclaration) && isOptionalDeclaration(parentDeclaration); + if (!strictNullChecks || !(addUndefined || optionalDeclaration)) return node; + if (!canAddUndefined(node)) { + context.tracker.reportInferenceFallback(node); + } + if (isUnionTypeNode(node)) { + return factory.createUnionTypeNode([...node.types, factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); + } + return factory.createUnionTypeNode([node, factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); + } + function canAddUndefined(node) { + if (!strictNullChecks) return true; + if (isKeyword(node.kind) || node.kind === 202 /* LiteralType */ || node.kind === 185 /* FunctionType */ || node.kind === 186 /* ConstructorType */ || node.kind === 189 /* ArrayType */ || node.kind === 190 /* TupleType */ || node.kind === 188 /* TypeLiteral */ || node.kind === 204 /* TemplateLiteralType */ || node.kind === 198 /* ThisType */) { + return true; + } + if (node.kind === 197 /* ParenthesizedType */) { + return canAddUndefined(node.type); + } + if (node.kind === 193 /* UnionType */ || node.kind === 194 /* IntersectionType */) { + return node.types.every(canAddUndefined); + } + return false; + } + function createReturnFromSignature(fn, symbol, context, reportFallback = true) { + let returnType = failed; + const returnTypeNode = isJSDocConstructSignature(fn) ? getEffectiveTypeAnnotationNode(fn.parameters[0]) : getEffectiveReturnTypeNode(fn); + if (returnTypeNode) { + returnType = syntacticResult(serializeTypeAnnotationOfDeclaration(returnTypeNode, context, fn, symbol)); + } else if (isValueSignatureDeclaration(fn)) { + returnType = typeFromSingleReturnExpression(fn, context); + } + return returnType.type !== void 0 ? returnType.type : inferReturnTypeOfSignatureSignature(fn, context, symbol, reportFallback && returnType.reportFallback && !returnTypeNode); + } + function typeFromSingleReturnExpression(declaration, context) { + let candidateExpr; + if (declaration && !nodeIsMissing(declaration.body)) { + const flags = getFunctionFlags(declaration); + if (flags & 3 /* AsyncGenerator */) return failed; + const body = declaration.body; + if (body && isBlock(body)) { + forEachReturnStatement(body, (s) => { + if (s.parent !== body) { + candidateExpr = void 0; + return true; + } + if (!candidateExpr) { + candidateExpr = s.expression; + } else { + candidateExpr = void 0; + return true; + } + }); + } else { + candidateExpr = body; + } + } + if (candidateExpr) { + if (isContextuallyTyped(candidateExpr)) { + const type = isJSDocTypeAssertion(candidateExpr) ? getJSDocTypeAssertionType(candidateExpr) : isAsExpression(candidateExpr) || isTypeAssertionExpression(candidateExpr) ? candidateExpr.type : void 0; + if (type && !isConstTypeReference(type)) { + return syntacticResult(serializeExistingTypeNode(type, context)); + } + } else { + return typeFromExpression(candidateExpr, context); + } + } + return failed; + } + function isContextuallyTyped(node) { + return findAncestor(node.parent, (n) => { + return isCallExpression(n) || !isFunctionLikeDeclaration(n) && !!getEffectiveTypeAnnotationNode(n) || isJsxElement(n) || isJsxExpression(n); + }); + } +} + +// src/jsTyping/_namespaces/ts.JsTyping.ts +var ts_JsTyping_exports = {}; +__export(ts_JsTyping_exports, { + NameValidationResult: () => NameValidationResult, + discoverTypings: () => discoverTypings, + isTypingUpToDate: () => isTypingUpToDate, + loadSafeList: () => loadSafeList, + loadTypesMap: () => loadTypesMap, + nonRelativeModuleNameForTypingCache: () => nonRelativeModuleNameForTypingCache, + renderPackageNameValidationFailure: () => renderPackageNameValidationFailure, + validatePackageName: () => validatePackageName +}); + +// src/jsTyping/shared.ts +var ActionSet = "action::set"; +var ActionInvalidate = "action::invalidate"; +var ActionPackageInstalled = "action::packageInstalled"; +var EventTypesRegistry = "event::typesRegistry"; +var EventBeginInstallTypes = "event::beginInstallTypes"; +var EventEndInstallTypes = "event::endInstallTypes"; +var EventInitializationFailed = "event::initializationFailed"; +var ActionWatchTypingLocations = "action::watchTypingLocations"; +var Arguments; +((Arguments2) => { + Arguments2.GlobalCacheLocation = "--globalTypingsCacheLocation"; + Arguments2.LogFile = "--logFile"; + Arguments2.EnableTelemetry = "--enableTelemetry"; + Arguments2.TypingSafeListLocation = "--typingSafeListLocation"; + Arguments2.TypesMapLocation = "--typesMapLocation"; + Arguments2.NpmLocation = "--npmLocation"; + Arguments2.ValidateDefaultNpmLocation = "--validateDefaultNpmLocation"; +})(Arguments || (Arguments = {})); +function hasArgument(argumentName) { + return sys.args.includes(argumentName); +} +function findArgument(argumentName) { + const index = sys.args.indexOf(argumentName); + return index >= 0 && index < sys.args.length - 1 ? sys.args[index + 1] : void 0; +} +function nowString() { + const d = /* @__PURE__ */ new Date(); + return `${d.getHours().toString().padStart(2, "0")}:${d.getMinutes().toString().padStart(2, "0")}:${d.getSeconds().toString().padStart(2, "0")}.${d.getMilliseconds().toString().padStart(3, "0")}`; +} +var indentStr = "\n "; +function indent2(str) { + return indentStr + str.replace(/\n/g, indentStr); +} +function stringifyIndented(json) { + return indent2(JSON.stringify(json, void 0, 2)); +} + +// src/jsTyping/jsTyping.ts +function isTypingUpToDate(cachedTyping, availableTypingVersions) { + const availableVersion = new Version(getProperty(availableTypingVersions, `ts${versionMajorMinor}`) || getProperty(availableTypingVersions, "latest")); + return availableVersion.compareTo(cachedTyping.version) <= 0; +} +function nonRelativeModuleNameForTypingCache(moduleName) { + return nodeCoreModules.has(moduleName) ? "node" : moduleName; +} +function loadSafeList(host, safeListPath) { + const result = readConfigFile(safeListPath, (path) => host.readFile(path)); + return new Map(Object.entries(result.config)); +} +function loadTypesMap(host, typesMapPath) { + var _a; + const result = readConfigFile(typesMapPath, (path) => host.readFile(path)); + if ((_a = result.config) == null ? void 0 : _a.simpleMap) { + return new Map(Object.entries(result.config.simpleMap)); + } + return void 0; +} +function discoverTypings(host, log, fileNames, projectRootPath, safeList, packageNameToTypingLocation, typeAcquisition, unresolvedImports, typesRegistry, compilerOptions) { + if (!typeAcquisition || !typeAcquisition.enable) { + return { cachedTypingPaths: [], newTypingNames: [], filesToWatch: [] }; + } + const inferredTypings = /* @__PURE__ */ new Map(); + fileNames = mapDefined(fileNames, (fileName) => { + const path = normalizePath(fileName); + if (hasJSFileExtension(path)) { + return path; + } + }); + const filesToWatch = []; + if (typeAcquisition.include) addInferredTypings(typeAcquisition.include, "Explicitly included types"); + const exclude = typeAcquisition.exclude || []; + if (!compilerOptions.types) { + const possibleSearchDirs = new Set(fileNames.map(getDirectoryPath)); + possibleSearchDirs.add(projectRootPath); + possibleSearchDirs.forEach((searchDir) => { + getTypingNames(searchDir, "bower.json", "bower_components", filesToWatch); + getTypingNames(searchDir, "package.json", "node_modules", filesToWatch); + }); + } + if (!typeAcquisition.disableFilenameBasedTypeAcquisition) { + getTypingNamesFromSourceFileNames(fileNames); + } + if (unresolvedImports) { + const module2 = deduplicate( + unresolvedImports.map(nonRelativeModuleNameForTypingCache), + equateStringsCaseSensitive, + compareStringsCaseSensitive + ); + addInferredTypings(module2, "Inferred typings from unresolved imports"); + } + for (const excludeTypingName of exclude) { + const didDelete = inferredTypings.delete(excludeTypingName); + if (didDelete && log) log(`Typing for ${excludeTypingName} is in exclude list, will be ignored.`); + } + packageNameToTypingLocation.forEach((typing, name) => { + const registryEntry = typesRegistry.get(name); + if (inferredTypings.get(name) === false && registryEntry !== void 0 && isTypingUpToDate(typing, registryEntry)) { + inferredTypings.set(name, typing.typingLocation); + } + }); + const newTypingNames = []; + const cachedTypingPaths = []; + inferredTypings.forEach((inferred, typing) => { + if (inferred) { + cachedTypingPaths.push(inferred); + } else { + newTypingNames.push(typing); + } + }); + const result = { cachedTypingPaths, newTypingNames, filesToWatch }; + if (log) log(`Finished typings discovery:${stringifyIndented(result)}`); + return result; + function addInferredTyping(typingName) { + if (!inferredTypings.has(typingName)) { + inferredTypings.set(typingName, false); + } + } + function addInferredTypings(typingNames, message) { + if (log) log(`${message}: ${JSON.stringify(typingNames)}`); + forEach(typingNames, addInferredTyping); + } + function getTypingNames(projectRootPath2, manifestName, modulesDirName, filesToWatch2) { + const manifestPath = combinePaths(projectRootPath2, manifestName); + let manifest; + let manifestTypingNames; + if (host.fileExists(manifestPath)) { + filesToWatch2.push(manifestPath); + manifest = readConfigFile(manifestPath, (path) => host.readFile(path)).config; + manifestTypingNames = flatMap([manifest.dependencies, manifest.devDependencies, manifest.optionalDependencies, manifest.peerDependencies], getOwnKeys); + addInferredTypings(manifestTypingNames, `Typing names in '${manifestPath}' dependencies`); + } + const packagesFolderPath = combinePaths(projectRootPath2, modulesDirName); + filesToWatch2.push(packagesFolderPath); + if (!host.directoryExists(packagesFolderPath)) { + return; + } + const packageNames = []; + const dependencyManifestNames = manifestTypingNames ? manifestTypingNames.map((typingName) => combinePaths(packagesFolderPath, typingName, manifestName)) : host.readDirectory( + packagesFolderPath, + [".json" /* Json */], + /*excludes*/ + void 0, + /*includes*/ + void 0, + /*depth*/ + 3 + ).filter((manifestPath2) => { + if (getBaseFileName(manifestPath2) !== manifestName) { + return false; + } + const pathComponents2 = getPathComponents(normalizePath(manifestPath2)); + const isScoped = pathComponents2[pathComponents2.length - 3][0] === "@"; + return isScoped && toFileNameLowerCase(pathComponents2[pathComponents2.length - 4]) === modulesDirName || // `node_modules/@foo/bar` + !isScoped && toFileNameLowerCase(pathComponents2[pathComponents2.length - 3]) === modulesDirName; + }); + if (log) log(`Searching for typing names in ${packagesFolderPath}; all files: ${JSON.stringify(dependencyManifestNames)}`); + for (const manifestPath2 of dependencyManifestNames) { + const normalizedFileName = normalizePath(manifestPath2); + const result2 = readConfigFile(normalizedFileName, (path) => host.readFile(path)); + const manifest2 = result2.config; + if (!manifest2.name) { + continue; + } + const ownTypes = manifest2.types || manifest2.typings; + if (ownTypes) { + const absolutePath = getNormalizedAbsolutePath(ownTypes, getDirectoryPath(normalizedFileName)); + if (host.fileExists(absolutePath)) { + if (log) log(` Package '${manifest2.name}' provides its own types.`); + inferredTypings.set(manifest2.name, absolutePath); + } else { + if (log) log(` Package '${manifest2.name}' provides its own types but they are missing.`); + } + } else { + packageNames.push(manifest2.name); + } + } + addInferredTypings(packageNames, " Found package names"); + } + function getTypingNamesFromSourceFileNames(fileNames2) { + const fromFileNames = mapDefined(fileNames2, (j) => { + if (!hasJSFileExtension(j)) return void 0; + const inferredTypingName = removeFileExtension(toFileNameLowerCase(getBaseFileName(j))); + const cleanedTypingName = removeMinAndVersionNumbers(inferredTypingName); + return safeList.get(cleanedTypingName); + }); + if (fromFileNames.length) { + addInferredTypings(fromFileNames, "Inferred typings from file names"); + } + const hasJsxFile = some(fileNames2, (f) => fileExtensionIs(f, ".jsx" /* Jsx */)); + if (hasJsxFile) { + if (log) log(`Inferred 'react' typings due to presence of '.jsx' extension`); + addInferredTyping("react"); + } + } +} +var NameValidationResult = /* @__PURE__ */ ((NameValidationResult2) => { + NameValidationResult2[NameValidationResult2["Ok"] = 0] = "Ok"; + NameValidationResult2[NameValidationResult2["EmptyName"] = 1] = "EmptyName"; + NameValidationResult2[NameValidationResult2["NameTooLong"] = 2] = "NameTooLong"; + NameValidationResult2[NameValidationResult2["NameStartsWithDot"] = 3] = "NameStartsWithDot"; + NameValidationResult2[NameValidationResult2["NameStartsWithUnderscore"] = 4] = "NameStartsWithUnderscore"; + NameValidationResult2[NameValidationResult2["NameContainsNonURISafeCharacters"] = 5] = "NameContainsNonURISafeCharacters"; + return NameValidationResult2; +})(NameValidationResult || {}); +var maxPackageNameLength = 214; +function validatePackageName(packageName) { + return validatePackageNameWorker( + packageName, + /*supportScopedPackage*/ + true + ); +} +function validatePackageNameWorker(packageName, supportScopedPackage) { + if (!packageName) { + return 1 /* EmptyName */; + } + if (packageName.length > maxPackageNameLength) { + return 2 /* NameTooLong */; + } + if (packageName.charCodeAt(0) === 46 /* dot */) { + return 3 /* NameStartsWithDot */; + } + if (packageName.charCodeAt(0) === 95 /* _ */) { + return 4 /* NameStartsWithUnderscore */; + } + if (supportScopedPackage) { + const matches = /^@([^/]+)\/([^/]+)$/.exec(packageName); + if (matches) { + const scopeResult = validatePackageNameWorker( + matches[1], + /*supportScopedPackage*/ + false + ); + if (scopeResult !== 0 /* Ok */) { + return { name: matches[1], isScopeName: true, result: scopeResult }; + } + const packageResult = validatePackageNameWorker( + matches[2], + /*supportScopedPackage*/ + false + ); + if (packageResult !== 0 /* Ok */) { + return { name: matches[2], isScopeName: false, result: packageResult }; + } + return 0 /* Ok */; + } + } + if (encodeURIComponent(packageName) !== packageName) { + return 5 /* NameContainsNonURISafeCharacters */; + } + return 0 /* Ok */; +} +function renderPackageNameValidationFailure(result, typing) { + return typeof result === "object" ? renderPackageNameValidationFailureWorker(typing, result.result, result.name, result.isScopeName) : renderPackageNameValidationFailureWorker( + typing, + result, + typing, + /*isScopeName*/ + false + ); +} +function renderPackageNameValidationFailureWorker(typing, result, name, isScopeName) { + const kind = isScopeName ? "Scope" : "Package"; + switch (result) { + case 1 /* EmptyName */: + return `'${typing}':: ${kind} name '${name}' cannot be empty`; + case 2 /* NameTooLong */: + return `'${typing}':: ${kind} name '${name}' should be less than ${maxPackageNameLength} characters`; + case 3 /* NameStartsWithDot */: + return `'${typing}':: ${kind} name '${name}' cannot start with '.'`; + case 4 /* NameStartsWithUnderscore */: + return `'${typing}':: ${kind} name '${name}' cannot start with '_'`; + case 5 /* NameContainsNonURISafeCharacters */: + return `'${typing}':: ${kind} name '${name}' contains non URI safe characters`; + case 0 /* Ok */: + return Debug.fail(); + // Shouldn't have called this. + default: + Debug.assertNever(result); + } +} + +// src/services/types.ts +var ScriptSnapshot; +((ScriptSnapshot2) => { + class StringScriptSnapshot { + constructor(text) { + this.text = text; + } + getText(start, end) { + return start === 0 && end === this.text.length ? this.text : this.text.substring(start, end); + } + getLength() { + return this.text.length; + } + getChangeRange() { + return void 0; + } + } + function fromString(text) { + return new StringScriptSnapshot(text); + } + ScriptSnapshot2.fromString = fromString; +})(ScriptSnapshot || (ScriptSnapshot = {})); +var PackageJsonDependencyGroup = /* @__PURE__ */ ((PackageJsonDependencyGroup2) => { + PackageJsonDependencyGroup2[PackageJsonDependencyGroup2["Dependencies"] = 1] = "Dependencies"; + PackageJsonDependencyGroup2[PackageJsonDependencyGroup2["DevDependencies"] = 2] = "DevDependencies"; + PackageJsonDependencyGroup2[PackageJsonDependencyGroup2["PeerDependencies"] = 4] = "PeerDependencies"; + PackageJsonDependencyGroup2[PackageJsonDependencyGroup2["OptionalDependencies"] = 8] = "OptionalDependencies"; + PackageJsonDependencyGroup2[PackageJsonDependencyGroup2["All"] = 15] = "All"; + return PackageJsonDependencyGroup2; +})(PackageJsonDependencyGroup || {}); +var PackageJsonAutoImportPreference = /* @__PURE__ */ ((PackageJsonAutoImportPreference2) => { + PackageJsonAutoImportPreference2[PackageJsonAutoImportPreference2["Off"] = 0] = "Off"; + PackageJsonAutoImportPreference2[PackageJsonAutoImportPreference2["On"] = 1] = "On"; + PackageJsonAutoImportPreference2[PackageJsonAutoImportPreference2["Auto"] = 2] = "Auto"; + return PackageJsonAutoImportPreference2; +})(PackageJsonAutoImportPreference || {}); +var LanguageServiceMode = /* @__PURE__ */ ((LanguageServiceMode2) => { + LanguageServiceMode2[LanguageServiceMode2["Semantic"] = 0] = "Semantic"; + LanguageServiceMode2[LanguageServiceMode2["PartialSemantic"] = 1] = "PartialSemantic"; + LanguageServiceMode2[LanguageServiceMode2["Syntactic"] = 2] = "Syntactic"; + return LanguageServiceMode2; +})(LanguageServiceMode || {}); +var emptyOptions = {}; +var SemanticClassificationFormat = /* @__PURE__ */ ((SemanticClassificationFormat2) => { + SemanticClassificationFormat2["Original"] = "original"; + SemanticClassificationFormat2["TwentyTwenty"] = "2020"; + return SemanticClassificationFormat2; +})(SemanticClassificationFormat || {}); +var OrganizeImportsMode = /* @__PURE__ */ ((OrganizeImportsMode2) => { + OrganizeImportsMode2["All"] = "All"; + OrganizeImportsMode2["SortAndCombine"] = "SortAndCombine"; + OrganizeImportsMode2["RemoveUnused"] = "RemoveUnused"; + return OrganizeImportsMode2; +})(OrganizeImportsMode || {}); +var CompletionTriggerKind = /* @__PURE__ */ ((CompletionTriggerKind2) => { + CompletionTriggerKind2[CompletionTriggerKind2["Invoked"] = 1] = "Invoked"; + CompletionTriggerKind2[CompletionTriggerKind2["TriggerCharacter"] = 2] = "TriggerCharacter"; + CompletionTriggerKind2[CompletionTriggerKind2["TriggerForIncompleteCompletions"] = 3] = "TriggerForIncompleteCompletions"; + return CompletionTriggerKind2; +})(CompletionTriggerKind || {}); +var InlayHintKind2 = /* @__PURE__ */ ((InlayHintKind3) => { + InlayHintKind3["Type"] = "Type"; + InlayHintKind3["Parameter"] = "Parameter"; + InlayHintKind3["Enum"] = "Enum"; + return InlayHintKind3; +})(InlayHintKind2 || {}); +var HighlightSpanKind = /* @__PURE__ */ ((HighlightSpanKind2) => { + HighlightSpanKind2["none"] = "none"; + HighlightSpanKind2["definition"] = "definition"; + HighlightSpanKind2["reference"] = "reference"; + HighlightSpanKind2["writtenReference"] = "writtenReference"; + return HighlightSpanKind2; +})(HighlightSpanKind || {}); +var IndentStyle = /* @__PURE__ */ ((IndentStyle3) => { + IndentStyle3[IndentStyle3["None"] = 0] = "None"; + IndentStyle3[IndentStyle3["Block"] = 1] = "Block"; + IndentStyle3[IndentStyle3["Smart"] = 2] = "Smart"; + return IndentStyle3; +})(IndentStyle || {}); +var SemicolonPreference = /* @__PURE__ */ ((SemicolonPreference2) => { + SemicolonPreference2["Ignore"] = "ignore"; + SemicolonPreference2["Insert"] = "insert"; + SemicolonPreference2["Remove"] = "remove"; + return SemicolonPreference2; +})(SemicolonPreference || {}); +function getDefaultFormatCodeSettings(newLineCharacter) { + return { + indentSize: 4, + tabSize: 4, + newLineCharacter: newLineCharacter || "\n", + convertTabsToSpaces: true, + indentStyle: 2 /* Smart */, + insertSpaceAfterConstructor: false, + insertSpaceAfterCommaDelimiter: true, + insertSpaceAfterSemicolonInForStatements: true, + insertSpaceBeforeAndAfterBinaryOperators: true, + insertSpaceAfterKeywordsInControlFlowStatements: true, + insertSpaceAfterFunctionKeywordForAnonymousFunctions: false, + insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis: false, + insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets: false, + insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces: true, + insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces: false, + insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces: false, + insertSpaceBeforeFunctionParenthesis: false, + placeOpenBraceOnNewLineForFunctions: false, + placeOpenBraceOnNewLineForControlBlocks: false, + semicolons: "ignore" /* Ignore */, + trimTrailingWhitespace: true, + indentSwitchCase: true + }; +} +var testFormatSettings = getDefaultFormatCodeSettings("\n"); +var SymbolDisplayPartKind = /* @__PURE__ */ ((SymbolDisplayPartKind2) => { + SymbolDisplayPartKind2[SymbolDisplayPartKind2["aliasName"] = 0] = "aliasName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["className"] = 1] = "className"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["enumName"] = 2] = "enumName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["fieldName"] = 3] = "fieldName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["interfaceName"] = 4] = "interfaceName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["keyword"] = 5] = "keyword"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["lineBreak"] = 6] = "lineBreak"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["numericLiteral"] = 7] = "numericLiteral"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["stringLiteral"] = 8] = "stringLiteral"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["localName"] = 9] = "localName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["methodName"] = 10] = "methodName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["moduleName"] = 11] = "moduleName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["operator"] = 12] = "operator"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["parameterName"] = 13] = "parameterName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["propertyName"] = 14] = "propertyName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["punctuation"] = 15] = "punctuation"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["space"] = 16] = "space"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["text"] = 17] = "text"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["typeParameterName"] = 18] = "typeParameterName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["enumMemberName"] = 19] = "enumMemberName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["functionName"] = 20] = "functionName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["regularExpressionLiteral"] = 21] = "regularExpressionLiteral"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["link"] = 22] = "link"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["linkName"] = 23] = "linkName"; + SymbolDisplayPartKind2[SymbolDisplayPartKind2["linkText"] = 24] = "linkText"; + return SymbolDisplayPartKind2; +})(SymbolDisplayPartKind || {}); +var CompletionInfoFlags = /* @__PURE__ */ ((CompletionInfoFlags2) => { + CompletionInfoFlags2[CompletionInfoFlags2["None"] = 0] = "None"; + CompletionInfoFlags2[CompletionInfoFlags2["MayIncludeAutoImports"] = 1] = "MayIncludeAutoImports"; + CompletionInfoFlags2[CompletionInfoFlags2["IsImportStatementCompletion"] = 2] = "IsImportStatementCompletion"; + CompletionInfoFlags2[CompletionInfoFlags2["IsContinuation"] = 4] = "IsContinuation"; + CompletionInfoFlags2[CompletionInfoFlags2["ResolvedModuleSpecifiers"] = 8] = "ResolvedModuleSpecifiers"; + CompletionInfoFlags2[CompletionInfoFlags2["ResolvedModuleSpecifiersBeyondLimit"] = 16] = "ResolvedModuleSpecifiersBeyondLimit"; + CompletionInfoFlags2[CompletionInfoFlags2["MayIncludeMethodSnippets"] = 32] = "MayIncludeMethodSnippets"; + return CompletionInfoFlags2; +})(CompletionInfoFlags || {}); +var OutliningSpanKind = /* @__PURE__ */ ((OutliningSpanKind2) => { + OutliningSpanKind2["Comment"] = "comment"; + OutliningSpanKind2["Region"] = "region"; + OutliningSpanKind2["Code"] = "code"; + OutliningSpanKind2["Imports"] = "imports"; + return OutliningSpanKind2; +})(OutliningSpanKind || {}); +var OutputFileType = /* @__PURE__ */ ((OutputFileType2) => { + OutputFileType2[OutputFileType2["JavaScript"] = 0] = "JavaScript"; + OutputFileType2[OutputFileType2["SourceMap"] = 1] = "SourceMap"; + OutputFileType2[OutputFileType2["Declaration"] = 2] = "Declaration"; + return OutputFileType2; +})(OutputFileType || {}); +var EndOfLineState = /* @__PURE__ */ ((EndOfLineState2) => { + EndOfLineState2[EndOfLineState2["None"] = 0] = "None"; + EndOfLineState2[EndOfLineState2["InMultiLineCommentTrivia"] = 1] = "InMultiLineCommentTrivia"; + EndOfLineState2[EndOfLineState2["InSingleQuoteStringLiteral"] = 2] = "InSingleQuoteStringLiteral"; + EndOfLineState2[EndOfLineState2["InDoubleQuoteStringLiteral"] = 3] = "InDoubleQuoteStringLiteral"; + EndOfLineState2[EndOfLineState2["InTemplateHeadOrNoSubstitutionTemplate"] = 4] = "InTemplateHeadOrNoSubstitutionTemplate"; + EndOfLineState2[EndOfLineState2["InTemplateMiddleOrTail"] = 5] = "InTemplateMiddleOrTail"; + EndOfLineState2[EndOfLineState2["InTemplateSubstitutionPosition"] = 6] = "InTemplateSubstitutionPosition"; + return EndOfLineState2; +})(EndOfLineState || {}); +var TokenClass = /* @__PURE__ */ ((TokenClass2) => { + TokenClass2[TokenClass2["Punctuation"] = 0] = "Punctuation"; + TokenClass2[TokenClass2["Keyword"] = 1] = "Keyword"; + TokenClass2[TokenClass2["Operator"] = 2] = "Operator"; + TokenClass2[TokenClass2["Comment"] = 3] = "Comment"; + TokenClass2[TokenClass2["Whitespace"] = 4] = "Whitespace"; + TokenClass2[TokenClass2["Identifier"] = 5] = "Identifier"; + TokenClass2[TokenClass2["NumberLiteral"] = 6] = "NumberLiteral"; + TokenClass2[TokenClass2["BigIntLiteral"] = 7] = "BigIntLiteral"; + TokenClass2[TokenClass2["StringLiteral"] = 8] = "StringLiteral"; + TokenClass2[TokenClass2["RegExpLiteral"] = 9] = "RegExpLiteral"; + return TokenClass2; +})(TokenClass || {}); +var ScriptElementKind = /* @__PURE__ */ ((ScriptElementKind2) => { + ScriptElementKind2["unknown"] = ""; + ScriptElementKind2["warning"] = "warning"; + ScriptElementKind2["keyword"] = "keyword"; + ScriptElementKind2["scriptElement"] = "script"; + ScriptElementKind2["moduleElement"] = "module"; + ScriptElementKind2["classElement"] = "class"; + ScriptElementKind2["localClassElement"] = "local class"; + ScriptElementKind2["interfaceElement"] = "interface"; + ScriptElementKind2["typeElement"] = "type"; + ScriptElementKind2["enumElement"] = "enum"; + ScriptElementKind2["enumMemberElement"] = "enum member"; + ScriptElementKind2["variableElement"] = "var"; + ScriptElementKind2["localVariableElement"] = "local var"; + ScriptElementKind2["variableUsingElement"] = "using"; + ScriptElementKind2["variableAwaitUsingElement"] = "await using"; + ScriptElementKind2["functionElement"] = "function"; + ScriptElementKind2["localFunctionElement"] = "local function"; + ScriptElementKind2["memberFunctionElement"] = "method"; + ScriptElementKind2["memberGetAccessorElement"] = "getter"; + ScriptElementKind2["memberSetAccessorElement"] = "setter"; + ScriptElementKind2["memberVariableElement"] = "property"; + ScriptElementKind2["memberAccessorVariableElement"] = "accessor"; + ScriptElementKind2["constructorImplementationElement"] = "constructor"; + ScriptElementKind2["callSignatureElement"] = "call"; + ScriptElementKind2["indexSignatureElement"] = "index"; + ScriptElementKind2["constructSignatureElement"] = "construct"; + ScriptElementKind2["parameterElement"] = "parameter"; + ScriptElementKind2["typeParameterElement"] = "type parameter"; + ScriptElementKind2["primitiveType"] = "primitive type"; + ScriptElementKind2["label"] = "label"; + ScriptElementKind2["alias"] = "alias"; + ScriptElementKind2["constElement"] = "const"; + ScriptElementKind2["letElement"] = "let"; + ScriptElementKind2["directory"] = "directory"; + ScriptElementKind2["externalModuleName"] = "external module name"; + ScriptElementKind2["jsxAttribute"] = "JSX attribute"; + ScriptElementKind2["string"] = "string"; + ScriptElementKind2["link"] = "link"; + ScriptElementKind2["linkName"] = "link name"; + ScriptElementKind2["linkText"] = "link text"; + return ScriptElementKind2; +})(ScriptElementKind || {}); +var ScriptElementKindModifier = /* @__PURE__ */ ((ScriptElementKindModifier2) => { + ScriptElementKindModifier2["none"] = ""; + ScriptElementKindModifier2["publicMemberModifier"] = "public"; + ScriptElementKindModifier2["privateMemberModifier"] = "private"; + ScriptElementKindModifier2["protectedMemberModifier"] = "protected"; + ScriptElementKindModifier2["exportedModifier"] = "export"; + ScriptElementKindModifier2["ambientModifier"] = "declare"; + ScriptElementKindModifier2["staticModifier"] = "static"; + ScriptElementKindModifier2["abstractModifier"] = "abstract"; + ScriptElementKindModifier2["optionalModifier"] = "optional"; + ScriptElementKindModifier2["deprecatedModifier"] = "deprecated"; + ScriptElementKindModifier2["dtsModifier"] = ".d.ts"; + ScriptElementKindModifier2["tsModifier"] = ".ts"; + ScriptElementKindModifier2["tsxModifier"] = ".tsx"; + ScriptElementKindModifier2["jsModifier"] = ".js"; + ScriptElementKindModifier2["jsxModifier"] = ".jsx"; + ScriptElementKindModifier2["jsonModifier"] = ".json"; + ScriptElementKindModifier2["dmtsModifier"] = ".d.mts"; + ScriptElementKindModifier2["mtsModifier"] = ".mts"; + ScriptElementKindModifier2["mjsModifier"] = ".mjs"; + ScriptElementKindModifier2["dctsModifier"] = ".d.cts"; + ScriptElementKindModifier2["ctsModifier"] = ".cts"; + ScriptElementKindModifier2["cjsModifier"] = ".cjs"; + return ScriptElementKindModifier2; +})(ScriptElementKindModifier || {}); +var ClassificationTypeNames = /* @__PURE__ */ ((ClassificationTypeNames2) => { + ClassificationTypeNames2["comment"] = "comment"; + ClassificationTypeNames2["identifier"] = "identifier"; + ClassificationTypeNames2["keyword"] = "keyword"; + ClassificationTypeNames2["numericLiteral"] = "number"; + ClassificationTypeNames2["bigintLiteral"] = "bigint"; + ClassificationTypeNames2["operator"] = "operator"; + ClassificationTypeNames2["stringLiteral"] = "string"; + ClassificationTypeNames2["whiteSpace"] = "whitespace"; + ClassificationTypeNames2["text"] = "text"; + ClassificationTypeNames2["punctuation"] = "punctuation"; + ClassificationTypeNames2["className"] = "class name"; + ClassificationTypeNames2["enumName"] = "enum name"; + ClassificationTypeNames2["interfaceName"] = "interface name"; + ClassificationTypeNames2["moduleName"] = "module name"; + ClassificationTypeNames2["typeParameterName"] = "type parameter name"; + ClassificationTypeNames2["typeAliasName"] = "type alias name"; + ClassificationTypeNames2["parameterName"] = "parameter name"; + ClassificationTypeNames2["docCommentTagName"] = "doc comment tag name"; + ClassificationTypeNames2["jsxOpenTagName"] = "jsx open tag name"; + ClassificationTypeNames2["jsxCloseTagName"] = "jsx close tag name"; + ClassificationTypeNames2["jsxSelfClosingTagName"] = "jsx self closing tag name"; + ClassificationTypeNames2["jsxAttribute"] = "jsx attribute"; + ClassificationTypeNames2["jsxText"] = "jsx text"; + ClassificationTypeNames2["jsxAttributeStringLiteralValue"] = "jsx attribute string literal value"; + return ClassificationTypeNames2; +})(ClassificationTypeNames || {}); +var ClassificationType = /* @__PURE__ */ ((ClassificationType2) => { + ClassificationType2[ClassificationType2["comment"] = 1] = "comment"; + ClassificationType2[ClassificationType2["identifier"] = 2] = "identifier"; + ClassificationType2[ClassificationType2["keyword"] = 3] = "keyword"; + ClassificationType2[ClassificationType2["numericLiteral"] = 4] = "numericLiteral"; + ClassificationType2[ClassificationType2["operator"] = 5] = "operator"; + ClassificationType2[ClassificationType2["stringLiteral"] = 6] = "stringLiteral"; + ClassificationType2[ClassificationType2["regularExpressionLiteral"] = 7] = "regularExpressionLiteral"; + ClassificationType2[ClassificationType2["whiteSpace"] = 8] = "whiteSpace"; + ClassificationType2[ClassificationType2["text"] = 9] = "text"; + ClassificationType2[ClassificationType2["punctuation"] = 10] = "punctuation"; + ClassificationType2[ClassificationType2["className"] = 11] = "className"; + ClassificationType2[ClassificationType2["enumName"] = 12] = "enumName"; + ClassificationType2[ClassificationType2["interfaceName"] = 13] = "interfaceName"; + ClassificationType2[ClassificationType2["moduleName"] = 14] = "moduleName"; + ClassificationType2[ClassificationType2["typeParameterName"] = 15] = "typeParameterName"; + ClassificationType2[ClassificationType2["typeAliasName"] = 16] = "typeAliasName"; + ClassificationType2[ClassificationType2["parameterName"] = 17] = "parameterName"; + ClassificationType2[ClassificationType2["docCommentTagName"] = 18] = "docCommentTagName"; + ClassificationType2[ClassificationType2["jsxOpenTagName"] = 19] = "jsxOpenTagName"; + ClassificationType2[ClassificationType2["jsxCloseTagName"] = 20] = "jsxCloseTagName"; + ClassificationType2[ClassificationType2["jsxSelfClosingTagName"] = 21] = "jsxSelfClosingTagName"; + ClassificationType2[ClassificationType2["jsxAttribute"] = 22] = "jsxAttribute"; + ClassificationType2[ClassificationType2["jsxText"] = 23] = "jsxText"; + ClassificationType2[ClassificationType2["jsxAttributeStringLiteralValue"] = 24] = "jsxAttributeStringLiteralValue"; + ClassificationType2[ClassificationType2["bigintLiteral"] = 25] = "bigintLiteral"; + return ClassificationType2; +})(ClassificationType || {}); + +// src/services/utilities.ts +var scanner = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + true +); +var SemanticMeaning = /* @__PURE__ */ ((SemanticMeaning2) => { + SemanticMeaning2[SemanticMeaning2["None"] = 0] = "None"; + SemanticMeaning2[SemanticMeaning2["Value"] = 1] = "Value"; + SemanticMeaning2[SemanticMeaning2["Type"] = 2] = "Type"; + SemanticMeaning2[SemanticMeaning2["Namespace"] = 4] = "Namespace"; + SemanticMeaning2[SemanticMeaning2["All"] = 7] = "All"; + return SemanticMeaning2; +})(SemanticMeaning || {}); +function getMeaningFromDeclaration(node) { + switch (node.kind) { + case 261 /* VariableDeclaration */: + return isInJSFile(node) && getJSDocEnumTag(node) ? 7 /* All */ : 1 /* Value */; + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 300 /* CatchClause */: + case 292 /* JsxAttribute */: + return 1 /* Value */; + case 169 /* TypeParameter */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 188 /* TypeLiteral */: + return 2 /* Type */; + case 347 /* JSDocTypedefTag */: + return node.name === void 0 ? 1 /* Value */ | 2 /* Type */ : 2 /* Type */; + case 307 /* EnumMember */: + case 264 /* ClassDeclaration */: + return 1 /* Value */ | 2 /* Type */; + case 268 /* ModuleDeclaration */: + if (isAmbientModule(node)) { + return 4 /* Namespace */ | 1 /* Value */; + } else if (getModuleInstanceState(node) === 1 /* Instantiated */) { + return 4 /* Namespace */ | 1 /* Value */; + } else { + return 4 /* Namespace */; + } + case 267 /* EnumDeclaration */: + case 276 /* NamedImports */: + case 277 /* ImportSpecifier */: + case 272 /* ImportEqualsDeclaration */: + case 273 /* ImportDeclaration */: + case 278 /* ExportAssignment */: + case 279 /* ExportDeclaration */: + return 7 /* All */; + // An external module can be a Value + case 308 /* SourceFile */: + return 4 /* Namespace */ | 1 /* Value */; + } + return 7 /* All */; +} +function getMeaningFromLocation(node) { + node = getAdjustedReferenceLocation(node); + const parent2 = node.parent; + if (node.kind === 308 /* SourceFile */) { + return 1 /* Value */; + } else if (isExportAssignment(parent2) || isExportSpecifier(parent2) || isExternalModuleReference(parent2) || isImportSpecifier(parent2) || isImportClause(parent2) || isImportEqualsDeclaration(parent2) && node === parent2.name) { + return 7 /* All */; + } else if (isInRightSideOfInternalImportEqualsDeclaration(node)) { + return getMeaningFromRightHandSideOfImportEquals(node); + } else if (isDeclarationName(node)) { + return getMeaningFromDeclaration(parent2); + } else if (isEntityName(node) && findAncestor(node, or(isJSDocNameReference, isJSDocLinkLike, isJSDocMemberName))) { + return 7 /* All */; + } else if (isTypeReference(node)) { + return 2 /* Type */; + } else if (isNamespaceReference(node)) { + return 4 /* Namespace */; + } else if (isTypeParameterDeclaration(parent2)) { + Debug.assert(isJSDocTemplateTag(parent2.parent)); + return 2 /* Type */; + } else if (isLiteralTypeNode(parent2)) { + return 2 /* Type */ | 1 /* Value */; + } else { + return 1 /* Value */; + } +} +function getMeaningFromRightHandSideOfImportEquals(node) { + const name = node.kind === 167 /* QualifiedName */ ? node : isQualifiedName(node.parent) && node.parent.right === node ? node.parent : void 0; + return name && name.parent.kind === 272 /* ImportEqualsDeclaration */ ? 7 /* All */ : 4 /* Namespace */; +} +function isInRightSideOfInternalImportEqualsDeclaration(node) { + if (!node.parent) { + return false; + } + while (node.parent.kind === 167 /* QualifiedName */) { + node = node.parent; + } + return isInternalModuleImportEqualsDeclaration(node.parent) && node.parent.moduleReference === node; +} +function isNamespaceReference(node) { + return isQualifiedNameNamespaceReference(node) || isPropertyAccessNamespaceReference(node); +} +function isQualifiedNameNamespaceReference(node) { + let root = node; + let isLastClause = true; + if (root.parent.kind === 167 /* QualifiedName */) { + while (root.parent && root.parent.kind === 167 /* QualifiedName */) { + root = root.parent; + } + isLastClause = root.right === node; + } + return root.parent.kind === 184 /* TypeReference */ && !isLastClause; +} +function isPropertyAccessNamespaceReference(node) { + let root = node; + let isLastClause = true; + if (root.parent.kind === 212 /* PropertyAccessExpression */) { + while (root.parent && root.parent.kind === 212 /* PropertyAccessExpression */) { + root = root.parent; + } + isLastClause = root.name === node; + } + if (!isLastClause && root.parent.kind === 234 /* ExpressionWithTypeArguments */ && root.parent.parent.kind === 299 /* HeritageClause */) { + const decl = root.parent.parent.parent; + return decl.kind === 264 /* ClassDeclaration */ && root.parent.parent.token === 119 /* ImplementsKeyword */ || decl.kind === 265 /* InterfaceDeclaration */ && root.parent.parent.token === 96 /* ExtendsKeyword */; + } + return false; +} +function isTypeReference(node) { + if (isRightSideOfQualifiedNameOrPropertyAccess(node)) { + node = node.parent; + } + switch (node.kind) { + case 110 /* ThisKeyword */: + return !isExpressionNode(node); + case 198 /* ThisType */: + return true; + } + switch (node.parent.kind) { + case 184 /* TypeReference */: + return true; + case 206 /* ImportType */: + return !node.parent.isTypeOf; + case 234 /* ExpressionWithTypeArguments */: + return isPartOfTypeNode(node.parent); + } + return false; +} +function isCallExpressionTarget(node, includeElementAccess = false, skipPastOuterExpressions = false) { + return isCalleeWorker(node, isCallExpression, selectExpressionOfCallOrNewExpressionOrDecorator, includeElementAccess, skipPastOuterExpressions); +} +function isNewExpressionTarget(node, includeElementAccess = false, skipPastOuterExpressions = false) { + return isCalleeWorker(node, isNewExpression, selectExpressionOfCallOrNewExpressionOrDecorator, includeElementAccess, skipPastOuterExpressions); +} +function isCallOrNewExpressionTarget(node, includeElementAccess = false, skipPastOuterExpressions = false) { + return isCalleeWorker(node, isCallOrNewExpression, selectExpressionOfCallOrNewExpressionOrDecorator, includeElementAccess, skipPastOuterExpressions); +} +function isTaggedTemplateTag(node, includeElementAccess = false, skipPastOuterExpressions = false) { + return isCalleeWorker(node, isTaggedTemplateExpression, selectTagOfTaggedTemplateExpression, includeElementAccess, skipPastOuterExpressions); +} +function isDecoratorTarget(node, includeElementAccess = false, skipPastOuterExpressions = false) { + return isCalleeWorker(node, isDecorator, selectExpressionOfCallOrNewExpressionOrDecorator, includeElementAccess, skipPastOuterExpressions); +} +function isJsxOpeningLikeElementTagName(node, includeElementAccess = false, skipPastOuterExpressions = false) { + return isCalleeWorker(node, isJsxOpeningLikeElement, selectTagNameOfJsxOpeningLikeElement, includeElementAccess, skipPastOuterExpressions); +} +function selectExpressionOfCallOrNewExpressionOrDecorator(node) { + return node.expression; +} +function selectTagOfTaggedTemplateExpression(node) { + return node.tag; +} +function selectTagNameOfJsxOpeningLikeElement(node) { + return node.tagName; +} +function isCalleeWorker(node, pred, calleeSelector, includeElementAccess, skipPastOuterExpressions) { + let target = includeElementAccess ? climbPastPropertyOrElementAccess(node) : climbPastPropertyAccess(node); + if (skipPastOuterExpressions) { + target = skipOuterExpressions(target); + } + return !!target && !!target.parent && pred(target.parent) && calleeSelector(target.parent) === target; +} +function climbPastPropertyAccess(node) { + return isRightSideOfPropertyAccess(node) ? node.parent : node; +} +function climbPastPropertyOrElementAccess(node) { + return isRightSideOfPropertyAccess(node) || isArgumentExpressionOfElementAccess(node) ? node.parent : node; +} +function getTargetLabel(referenceNode, labelName) { + while (referenceNode) { + if (referenceNode.kind === 257 /* LabeledStatement */ && referenceNode.label.escapedText === labelName) { + return referenceNode.label; + } + referenceNode = referenceNode.parent; + } + return void 0; +} +function hasPropertyAccessExpressionWithName(node, funcName) { + if (!isPropertyAccessExpression(node.expression)) { + return false; + } + return node.expression.name.text === funcName; +} +function isJumpStatementTarget(node) { + var _a; + return isIdentifier(node) && ((_a = tryCast(node.parent, isBreakOrContinueStatement)) == null ? void 0 : _a.label) === node; +} +function isLabelOfLabeledStatement(node) { + var _a; + return isIdentifier(node) && ((_a = tryCast(node.parent, isLabeledStatement)) == null ? void 0 : _a.label) === node; +} +function isLabelName(node) { + return isLabelOfLabeledStatement(node) || isJumpStatementTarget(node); +} +function isTagName(node) { + var _a; + return ((_a = tryCast(node.parent, isJSDocTag)) == null ? void 0 : _a.tagName) === node; +} +function isRightSideOfQualifiedName(node) { + var _a; + return ((_a = tryCast(node.parent, isQualifiedName)) == null ? void 0 : _a.right) === node; +} +function isRightSideOfPropertyAccess(node) { + var _a; + return ((_a = tryCast(node.parent, isPropertyAccessExpression)) == null ? void 0 : _a.name) === node; +} +function isArgumentExpressionOfElementAccess(node) { + var _a; + return ((_a = tryCast(node.parent, isElementAccessExpression)) == null ? void 0 : _a.argumentExpression) === node; +} +function isNameOfModuleDeclaration(node) { + var _a; + return ((_a = tryCast(node.parent, isModuleDeclaration)) == null ? void 0 : _a.name) === node; +} +function isNameOfFunctionDeclaration(node) { + var _a; + return isIdentifier(node) && ((_a = tryCast(node.parent, isFunctionLike)) == null ? void 0 : _a.name) === node; +} +function isLiteralNameOfPropertyDeclarationOrIndexAccess(node) { + switch (node.parent.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 304 /* PropertyAssignment */: + case 307 /* EnumMember */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 268 /* ModuleDeclaration */: + return getNameOfDeclaration(node.parent) === node; + case 213 /* ElementAccessExpression */: + return node.parent.argumentExpression === node; + case 168 /* ComputedPropertyName */: + return true; + case 202 /* LiteralType */: + return node.parent.parent.kind === 200 /* IndexedAccessType */; + default: + return false; + } +} +function isExpressionOfExternalModuleImportEqualsDeclaration(node) { + return isExternalModuleImportEqualsDeclaration(node.parent.parent) && getExternalModuleImportEqualsDeclarationExpression(node.parent.parent) === node; +} +function getContainerNode(node) { + if (isJSDocTypeAlias(node)) { + node = node.parent.parent; + } + while (true) { + node = node.parent; + if (!node) { + return void 0; + } + switch (node.kind) { + case 308 /* SourceFile */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 268 /* ModuleDeclaration */: + return node; + } + } +} +function getNodeKind(node) { + switch (node.kind) { + case 308 /* SourceFile */: + return isExternalModule(node) ? "module" /* moduleElement */ : "script" /* scriptElement */; + case 268 /* ModuleDeclaration */: + return "module" /* moduleElement */; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return "class" /* classElement */; + case 265 /* InterfaceDeclaration */: + return "interface" /* interfaceElement */; + case 266 /* TypeAliasDeclaration */: + case 339 /* JSDocCallbackTag */: + case 347 /* JSDocTypedefTag */: + return "type" /* typeElement */; + case 267 /* EnumDeclaration */: + return "enum" /* enumElement */; + case 261 /* VariableDeclaration */: + return getKindOfVariableDeclaration(node); + case 209 /* BindingElement */: + return getKindOfVariableDeclaration(getRootDeclaration(node)); + case 220 /* ArrowFunction */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + return "function" /* functionElement */; + case 178 /* GetAccessor */: + return "getter" /* memberGetAccessorElement */; + case 179 /* SetAccessor */: + return "setter" /* memberSetAccessorElement */; + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + return "method" /* memberFunctionElement */; + case 304 /* PropertyAssignment */: + const { initializer } = node; + return isFunctionLike(initializer) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */; + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 305 /* ShorthandPropertyAssignment */: + case 306 /* SpreadAssignment */: + return "property" /* memberVariableElement */; + case 182 /* IndexSignature */: + return "index" /* indexSignatureElement */; + case 181 /* ConstructSignature */: + return "construct" /* constructSignatureElement */; + case 180 /* CallSignature */: + return "call" /* callSignatureElement */; + case 177 /* Constructor */: + case 176 /* ClassStaticBlockDeclaration */: + return "constructor" /* constructorImplementationElement */; + case 169 /* TypeParameter */: + return "type parameter" /* typeParameterElement */; + case 307 /* EnumMember */: + return "enum member" /* enumMemberElement */; + case 170 /* Parameter */: + return hasSyntacticModifier(node, 31 /* ParameterPropertyModifier */) ? "property" /* memberVariableElement */ : "parameter" /* parameterElement */; + case 272 /* ImportEqualsDeclaration */: + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: + case 275 /* NamespaceImport */: + case 281 /* NamespaceExport */: + return "alias" /* alias */; + case 227 /* BinaryExpression */: + const kind = getAssignmentDeclarationKind(node); + const { right } = node; + switch (kind) { + case 7 /* ObjectDefinePropertyValue */: + case 8 /* ObjectDefinePropertyExports */: + case 9 /* ObjectDefinePrototypeProperty */: + case 0 /* None */: + return "" /* unknown */; + case 1 /* ExportsProperty */: + case 2 /* ModuleExports */: + const rightKind = getNodeKind(right); + return rightKind === "" /* unknown */ ? "const" /* constElement */ : rightKind; + case 3 /* PrototypeProperty */: + return isFunctionExpression(right) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */; + case 4 /* ThisProperty */: + return "property" /* memberVariableElement */; + // property + case 5 /* Property */: + return isFunctionExpression(right) ? "method" /* memberFunctionElement */ : "property" /* memberVariableElement */; + case 6 /* Prototype */: + return "local class" /* localClassElement */; + default: { + assertType(kind); + return "" /* unknown */; + } + } + case 80 /* Identifier */: + return isImportClause(node.parent) ? "alias" /* alias */ : "" /* unknown */; + case 278 /* ExportAssignment */: + const scriptKind = getNodeKind(node.expression); + return scriptKind === "" /* unknown */ ? "const" /* constElement */ : scriptKind; + default: + return "" /* unknown */; + } + function getKindOfVariableDeclaration(v) { + return isVarConst(v) ? "const" /* constElement */ : isLet(v) ? "let" /* letElement */ : "var" /* variableElement */; + } +} +function isThis(node) { + switch (node.kind) { + case 110 /* ThisKeyword */: + return true; + case 80 /* Identifier */: + return identifierIsThisKeyword(node) && node.parent.kind === 170 /* Parameter */; + default: + return false; + } +} +var tripleSlashDirectivePrefixRegex = /^\/\/\/\s*= end; +} +function rangeOverlapsWithStartEnd(r1, start, end) { + return startEndOverlapsWithStartEnd(r1.pos, r1.end, start, end); +} +function nodeOverlapsWithStartEnd(node, sourceFile, start, end) { + return startEndOverlapsWithStartEnd(node.getStart(sourceFile), node.end, start, end); +} +function startEndOverlapsWithStartEnd(start1, end1, start2, end2) { + const start = Math.max(start1, start2); + const end = Math.min(end1, end2); + return start < end; +} +function positionBelongsToNode(candidate, position, sourceFile) { + Debug.assert(candidate.pos <= position); + return position < candidate.end || !isCompletedNode(candidate, sourceFile); +} +function isCompletedNode(n, sourceFile) { + if (n === void 0 || nodeIsMissing(n)) { + return false; + } + switch (n.kind) { + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 211 /* ObjectLiteralExpression */: + case 207 /* ObjectBindingPattern */: + case 188 /* TypeLiteral */: + case 242 /* Block */: + case 269 /* ModuleBlock */: + case 270 /* CaseBlock */: + case 276 /* NamedImports */: + case 280 /* NamedExports */: + return nodeEndsWith(n, 20 /* CloseBraceToken */, sourceFile); + case 300 /* CatchClause */: + return isCompletedNode(n.block, sourceFile); + case 215 /* NewExpression */: + if (!n.arguments) { + return true; + } + // falls through + case 214 /* CallExpression */: + case 218 /* ParenthesizedExpression */: + case 197 /* ParenthesizedType */: + return nodeEndsWith(n, 22 /* CloseParenToken */, sourceFile); + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + return isCompletedNode(n.type, sourceFile); + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 181 /* ConstructSignature */: + case 180 /* CallSignature */: + case 220 /* ArrowFunction */: + if (n.body) { + return isCompletedNode(n.body, sourceFile); + } + if (n.type) { + return isCompletedNode(n.type, sourceFile); + } + return hasChildOfKind(n, 22 /* CloseParenToken */, sourceFile); + case 268 /* ModuleDeclaration */: + return !!n.body && isCompletedNode(n.body, sourceFile); + case 246 /* IfStatement */: + if (n.elseStatement) { + return isCompletedNode(n.elseStatement, sourceFile); + } + return isCompletedNode(n.thenStatement, sourceFile); + case 245 /* ExpressionStatement */: + return isCompletedNode(n.expression, sourceFile) || hasChildOfKind(n, 27 /* SemicolonToken */, sourceFile); + case 210 /* ArrayLiteralExpression */: + case 208 /* ArrayBindingPattern */: + case 213 /* ElementAccessExpression */: + case 168 /* ComputedPropertyName */: + case 190 /* TupleType */: + return nodeEndsWith(n, 24 /* CloseBracketToken */, sourceFile); + case 182 /* IndexSignature */: + if (n.type) { + return isCompletedNode(n.type, sourceFile); + } + return hasChildOfKind(n, 24 /* CloseBracketToken */, sourceFile); + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + return false; + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 248 /* WhileStatement */: + return isCompletedNode(n.statement, sourceFile); + case 247 /* DoStatement */: + return hasChildOfKind(n, 117 /* WhileKeyword */, sourceFile) ? nodeEndsWith(n, 22 /* CloseParenToken */, sourceFile) : isCompletedNode(n.statement, sourceFile); + case 187 /* TypeQuery */: + return isCompletedNode(n.exprName, sourceFile); + case 222 /* TypeOfExpression */: + case 221 /* DeleteExpression */: + case 223 /* VoidExpression */: + case 230 /* YieldExpression */: + case 231 /* SpreadElement */: + const unaryWordExpression = n; + return isCompletedNode(unaryWordExpression.expression, sourceFile); + case 216 /* TaggedTemplateExpression */: + return isCompletedNode(n.template, sourceFile); + case 229 /* TemplateExpression */: + const lastSpan = lastOrUndefined(n.templateSpans); + return isCompletedNode(lastSpan, sourceFile); + case 240 /* TemplateSpan */: + return nodeIsPresent(n.literal); + case 279 /* ExportDeclaration */: + case 273 /* ImportDeclaration */: + return nodeIsPresent(n.moduleSpecifier); + case 225 /* PrefixUnaryExpression */: + return isCompletedNode(n.operand, sourceFile); + case 227 /* BinaryExpression */: + return isCompletedNode(n.right, sourceFile); + case 228 /* ConditionalExpression */: + return isCompletedNode(n.whenFalse, sourceFile); + default: + return true; + } +} +function nodeEndsWith(n, expectedLastToken, sourceFile) { + const children = n.getChildren(sourceFile); + if (children.length) { + const lastChild = last(children); + if (lastChild.kind === expectedLastToken) { + return true; + } else if (lastChild.kind === 27 /* SemicolonToken */ && children.length !== 1) { + return children[children.length - 2].kind === expectedLastToken; + } + } + return false; +} +function findListItemInfo(node) { + const list = findContainingList(node); + if (!list) { + return void 0; + } + const children = list.getChildren(); + const listItemIndex = indexOfNode(children, node); + return { + listItemIndex, + list + }; +} +function hasChildOfKind(n, kind, sourceFile) { + return !!findChildOfKind(n, kind, sourceFile); +} +function findChildOfKind(n, kind, sourceFile) { + return find(n.getChildren(sourceFile), (c) => c.kind === kind); +} +function findContainingList(node) { + const syntaxList = find(node.parent.getChildren(), (c) => isSyntaxList(c) && rangeContainsRange(c, node)); + Debug.assert(!syntaxList || contains(syntaxList.getChildren(), node)); + return syntaxList; +} +function isDefaultModifier2(node) { + return node.kind === 90 /* DefaultKeyword */; +} +function isClassKeyword(node) { + return node.kind === 86 /* ClassKeyword */; +} +function isFunctionKeyword(node) { + return node.kind === 100 /* FunctionKeyword */; +} +function getAdjustedLocationForClass(node) { + if (isNamedDeclaration(node)) { + return node.name; + } + if (isClassDeclaration(node)) { + const defaultModifier = node.modifiers && find(node.modifiers, isDefaultModifier2); + if (defaultModifier) return defaultModifier; + } + if (isClassExpression(node)) { + const classKeyword = find(node.getChildren(), isClassKeyword); + if (classKeyword) return classKeyword; + } +} +function getAdjustedLocationForFunction(node) { + if (isNamedDeclaration(node)) { + return node.name; + } + if (isFunctionDeclaration(node)) { + const defaultModifier = find(node.modifiers, isDefaultModifier2); + if (defaultModifier) return defaultModifier; + } + if (isFunctionExpression(node)) { + const functionKeyword = find(node.getChildren(), isFunctionKeyword); + if (functionKeyword) return functionKeyword; + } +} +function getAncestorTypeNode(node) { + let lastTypeNode; + findAncestor(node, (a) => { + if (isTypeNode(a)) { + lastTypeNode = a; + } + return !isQualifiedName(a.parent) && !isTypeNode(a.parent) && !isTypeElement(a.parent); + }); + return lastTypeNode; +} +function getContextualTypeFromParentOrAncestorTypeNode(node, checker) { + if (node.flags & (16777216 /* JSDoc */ & ~524288 /* JavaScriptFile */)) return void 0; + const contextualType = getContextualTypeFromParent(node, checker); + if (contextualType) return contextualType; + const ancestorTypeNode = getAncestorTypeNode(node); + return ancestorTypeNode && checker.getTypeAtLocation(ancestorTypeNode); +} +function getAdjustedLocationForDeclaration(node, forRename) { + if (!forRename) { + switch (node.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + return getAdjustedLocationForClass(node); + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + return getAdjustedLocationForFunction(node); + case 177 /* Constructor */: + return node; + } + } + if (isNamedDeclaration(node)) { + return node.name; + } +} +function getAdjustedLocationForImportDeclaration(node, forRename) { + if (node.importClause) { + if (node.importClause.name && node.importClause.namedBindings) { + return; + } + if (node.importClause.name) { + return node.importClause.name; + } + if (node.importClause.namedBindings) { + if (isNamedImports(node.importClause.namedBindings)) { + const onlyBinding = singleOrUndefined(node.importClause.namedBindings.elements); + if (!onlyBinding) { + return; + } + return onlyBinding.name; + } else if (isNamespaceImport(node.importClause.namedBindings)) { + return node.importClause.namedBindings.name; + } + } + } + if (!forRename) { + return node.moduleSpecifier; + } +} +function getAdjustedLocationForExportDeclaration(node, forRename) { + if (node.exportClause) { + if (isNamedExports(node.exportClause)) { + const onlyBinding = singleOrUndefined(node.exportClause.elements); + if (!onlyBinding) { + return; + } + return node.exportClause.elements[0].name; + } else if (isNamespaceExport(node.exportClause)) { + return node.exportClause.name; + } + } + if (!forRename) { + return node.moduleSpecifier; + } +} +function getAdjustedLocationForHeritageClause(node) { + if (node.types.length === 1) { + return node.types[0].expression; + } +} +function getAdjustedLocation(node, forRename) { + const { parent: parent2 } = node; + if (isModifier(node) && (forRename || node.kind !== 90 /* DefaultKeyword */) ? canHaveModifiers(parent2) && contains(parent2.modifiers, node) : node.kind === 86 /* ClassKeyword */ ? isClassDeclaration(parent2) || isClassExpression(node) : node.kind === 100 /* FunctionKeyword */ ? isFunctionDeclaration(parent2) || isFunctionExpression(node) : node.kind === 120 /* InterfaceKeyword */ ? isInterfaceDeclaration(parent2) : node.kind === 94 /* EnumKeyword */ ? isEnumDeclaration(parent2) : node.kind === 156 /* TypeKeyword */ ? isTypeAliasDeclaration(parent2) : node.kind === 145 /* NamespaceKeyword */ || node.kind === 144 /* ModuleKeyword */ ? isModuleDeclaration(parent2) : node.kind === 102 /* ImportKeyword */ ? isImportEqualsDeclaration(parent2) : node.kind === 139 /* GetKeyword */ ? isGetAccessorDeclaration(parent2) : node.kind === 153 /* SetKeyword */ && isSetAccessorDeclaration(parent2)) { + const location = getAdjustedLocationForDeclaration(parent2, forRename); + if (location) { + return location; + } + } + if ((node.kind === 115 /* VarKeyword */ || node.kind === 87 /* ConstKeyword */ || node.kind === 121 /* LetKeyword */) && isVariableDeclarationList(parent2) && parent2.declarations.length === 1) { + const decl = parent2.declarations[0]; + if (isIdentifier(decl.name)) { + return decl.name; + } + } + if (node.kind === 156 /* TypeKeyword */) { + if (isImportClause(parent2) && parent2.isTypeOnly) { + const location = getAdjustedLocationForImportDeclaration(parent2.parent, forRename); + if (location) { + return location; + } + } + if (isExportDeclaration(parent2) && parent2.isTypeOnly) { + const location = getAdjustedLocationForExportDeclaration(parent2, forRename); + if (location) { + return location; + } + } + } + if (node.kind === 130 /* AsKeyword */) { + if (isImportSpecifier(parent2) && parent2.propertyName || isExportSpecifier(parent2) && parent2.propertyName || isNamespaceImport(parent2) || isNamespaceExport(parent2)) { + return parent2.name; + } + if (isExportDeclaration(parent2) && parent2.exportClause && isNamespaceExport(parent2.exportClause)) { + return parent2.exportClause.name; + } + } + if (node.kind === 102 /* ImportKeyword */ && isImportDeclaration(parent2)) { + const location = getAdjustedLocationForImportDeclaration(parent2, forRename); + if (location) { + return location; + } + } + if (node.kind === 95 /* ExportKeyword */) { + if (isExportDeclaration(parent2)) { + const location = getAdjustedLocationForExportDeclaration(parent2, forRename); + if (location) { + return location; + } + } + if (isExportAssignment(parent2)) { + return skipOuterExpressions(parent2.expression); + } + } + if (node.kind === 149 /* RequireKeyword */ && isExternalModuleReference(parent2)) { + return parent2.expression; + } + if (node.kind === 161 /* FromKeyword */ && (isImportDeclaration(parent2) || isExportDeclaration(parent2)) && parent2.moduleSpecifier) { + return parent2.moduleSpecifier; + } + if ((node.kind === 96 /* ExtendsKeyword */ || node.kind === 119 /* ImplementsKeyword */) && isHeritageClause(parent2) && parent2.token === node.kind) { + const location = getAdjustedLocationForHeritageClause(parent2); + if (location) { + return location; + } + } + if (node.kind === 96 /* ExtendsKeyword */) { + if (isTypeParameterDeclaration(parent2) && parent2.constraint && isTypeReferenceNode(parent2.constraint)) { + return parent2.constraint.typeName; + } + if (isConditionalTypeNode(parent2) && isTypeReferenceNode(parent2.extendsType)) { + return parent2.extendsType.typeName; + } + } + if (node.kind === 140 /* InferKeyword */ && isInferTypeNode(parent2)) { + return parent2.typeParameter.name; + } + if (node.kind === 103 /* InKeyword */ && isTypeParameterDeclaration(parent2) && isMappedTypeNode(parent2.parent)) { + return parent2.name; + } + if (node.kind === 143 /* KeyOfKeyword */ && isTypeOperatorNode(parent2) && parent2.operator === 143 /* KeyOfKeyword */ && isTypeReferenceNode(parent2.type)) { + return parent2.type.typeName; + } + if (node.kind === 148 /* ReadonlyKeyword */ && isTypeOperatorNode(parent2) && parent2.operator === 148 /* ReadonlyKeyword */ && isArrayTypeNode(parent2.type) && isTypeReferenceNode(parent2.type.elementType)) { + return parent2.type.elementType.typeName; + } + if (!forRename) { + if (node.kind === 105 /* NewKeyword */ && isNewExpression(parent2) || node.kind === 116 /* VoidKeyword */ && isVoidExpression(parent2) || node.kind === 114 /* TypeOfKeyword */ && isTypeOfExpression(parent2) || node.kind === 135 /* AwaitKeyword */ && isAwaitExpression(parent2) || node.kind === 127 /* YieldKeyword */ && isYieldExpression(parent2) || node.kind === 91 /* DeleteKeyword */ && isDeleteExpression(parent2)) { + if (parent2.expression) { + return skipOuterExpressions(parent2.expression); + } + } + if ((node.kind === 103 /* InKeyword */ || node.kind === 104 /* InstanceOfKeyword */) && isBinaryExpression(parent2) && parent2.operatorToken === node) { + return skipOuterExpressions(parent2.right); + } + if (node.kind === 130 /* AsKeyword */ && isAsExpression(parent2) && isTypeReferenceNode(parent2.type)) { + return parent2.type.typeName; + } + if (node.kind === 103 /* InKeyword */ && isForInStatement(parent2) || node.kind === 165 /* OfKeyword */ && isForOfStatement(parent2)) { + return skipOuterExpressions(parent2.expression); + } + } + return node; +} +function getAdjustedReferenceLocation(node) { + return getAdjustedLocation( + node, + /*forRename*/ + false + ); +} +function getAdjustedRenameLocation(node) { + return getAdjustedLocation( + node, + /*forRename*/ + true + ); +} +function getTouchingPropertyName(sourceFile, position) { + return getTouchingToken(sourceFile, position, (n) => isPropertyNameLiteral(n) || isKeyword(n.kind) || isPrivateIdentifier(n)); +} +function getTouchingToken(sourceFile, position, includePrecedingTokenAtEndPosition) { + return getTokenAtPositionWorker( + sourceFile, + position, + /*allowPositionInLeadingTrivia*/ + false, + includePrecedingTokenAtEndPosition, + /*includeEndPosition*/ + false + ); +} +function getTokenAtPosition(sourceFile, position) { + return getTokenAtPositionWorker( + sourceFile, + position, + /*allowPositionInLeadingTrivia*/ + true, + /*includePrecedingTokenAtEndPosition*/ + void 0, + /*includeEndPosition*/ + false + ); +} +function getTokenAtPositionWorker(sourceFile, position, allowPositionInLeadingTrivia, includePrecedingTokenAtEndPosition, includeEndPosition) { + let current = sourceFile; + let foundToken; + outer: + while (true) { + const children = current.getChildren(sourceFile); + const i = binarySearchKey(children, position, (_, i2) => i2, (middle, _) => { + const end = children[middle].getEnd(); + if (end < position) { + return -1 /* LessThan */; + } + const start = allowPositionInLeadingTrivia ? children[middle].getFullStart() : children[middle].getStart( + sourceFile, + /*includeJsDocComment*/ + true + ); + if (start > position) { + return 1 /* GreaterThan */; + } + if (nodeContainsPosition(children[middle], start, end)) { + if (children[middle - 1]) { + if (nodeContainsPosition(children[middle - 1])) { + return 1 /* GreaterThan */; + } + } + return 0 /* EqualTo */; + } + if (includePrecedingTokenAtEndPosition && start === position && children[middle - 1] && children[middle - 1].getEnd() === position && nodeContainsPosition(children[middle - 1])) { + return 1 /* GreaterThan */; + } + return -1 /* LessThan */; + }); + if (foundToken) { + return foundToken; + } + if (i >= 0 && children[i]) { + current = children[i]; + continue outer; + } + return current; + } + function nodeContainsPosition(node, start, end) { + end ?? (end = node.getEnd()); + if (end < position) { + return false; + } + start ?? (start = allowPositionInLeadingTrivia ? node.getFullStart() : node.getStart( + sourceFile, + /*includeJsDocComment*/ + true + )); + if (start > position) { + return false; + } + if (position < end || position === end && (node.kind === 1 /* EndOfFileToken */ || includeEndPosition)) { + return true; + } else if (includePrecedingTokenAtEndPosition && end === position) { + const previousToken = findPrecedingToken(position, sourceFile, node); + if (previousToken && includePrecedingTokenAtEndPosition(previousToken)) { + foundToken = previousToken; + return true; + } + } + return false; + } +} +function findFirstNonJsxWhitespaceToken(sourceFile, position) { + let tokenAtPosition = getTokenAtPosition(sourceFile, position); + while (isWhiteSpaceOnlyJsxText(tokenAtPosition)) { + const nextToken = findNextToken(tokenAtPosition, tokenAtPosition.parent, sourceFile); + if (!nextToken) return; + tokenAtPosition = nextToken; + } + return tokenAtPosition; +} +function findTokenOnLeftOfPosition(file, position) { + const tokenAtPosition = getTokenAtPosition(file, position); + if (isToken(tokenAtPosition) && position > tokenAtPosition.getStart(file) && position < tokenAtPosition.getEnd()) { + return tokenAtPosition; + } + return findPrecedingToken(position, file); +} +function findNextToken(previousToken, parent2, sourceFile) { + return find2(parent2); + function find2(n) { + if (isToken(n) && n.pos === previousToken.end) { + return n; + } + return firstDefined(n.getChildren(sourceFile), (child) => { + const shouldDiveInChildNode = ( + // previous token is enclosed somewhere in the child + child.pos <= previousToken.pos && child.end > previousToken.end || // previous token ends exactly at the beginning of child + child.pos === previousToken.end + ); + return shouldDiveInChildNode && nodeHasTokens(child, sourceFile) ? find2(child) : void 0; + }); + } +} +function findPrecedingToken(position, sourceFile, startNode2, excludeJsdoc) { + const result = find2(startNode2 || sourceFile); + Debug.assert(!(result && isWhiteSpaceOnlyJsxText(result))); + return result; + function find2(n) { + if (isNonWhitespaceToken(n) && n.kind !== 1 /* EndOfFileToken */) { + return n; + } + const children = n.getChildren(sourceFile); + const i = binarySearchKey(children, position, (_, i2) => i2, (middle, _) => { + if (position < children[middle].end) { + if (!children[middle - 1] || position >= children[middle - 1].end) { + return 0 /* EqualTo */; + } + return 1 /* GreaterThan */; + } + return -1 /* LessThan */; + }); + if (i >= 0 && children[i]) { + const child = children[i]; + if (position < child.end) { + const start = child.getStart( + sourceFile, + /*includeJsDoc*/ + !excludeJsdoc + ); + const lookInPreviousChild = start >= position || // cursor in the leading trivia + !nodeHasTokens(child, sourceFile) || isWhiteSpaceOnlyJsxText(child); + if (lookInPreviousChild) { + const candidate2 = findRightmostChildNodeWithTokens( + children, + /*exclusiveStartPosition*/ + i, + sourceFile, + n.kind + ); + if (candidate2) { + if (!excludeJsdoc && isJSDocCommentContainingNode(candidate2) && candidate2.getChildren(sourceFile).length) { + return find2(candidate2); + } + return findRightmostToken(candidate2, sourceFile); + } + return void 0; + } else { + return find2(child); + } + } + } + Debug.assert(startNode2 !== void 0 || n.kind === 308 /* SourceFile */ || n.kind === 1 /* EndOfFileToken */ || isJSDocCommentContainingNode(n)); + const candidate = findRightmostChildNodeWithTokens( + children, + /*exclusiveStartPosition*/ + children.length, + sourceFile, + n.kind + ); + return candidate && findRightmostToken(candidate, sourceFile); + } +} +function isNonWhitespaceToken(n) { + return isToken(n) && !isWhiteSpaceOnlyJsxText(n); +} +function findRightmostToken(n, sourceFile) { + if (isNonWhitespaceToken(n)) { + return n; + } + const children = n.getChildren(sourceFile); + if (children.length === 0) { + return n; + } + const candidate = findRightmostChildNodeWithTokens( + children, + /*exclusiveStartPosition*/ + children.length, + sourceFile, + n.kind + ); + return candidate && findRightmostToken(candidate, sourceFile); +} +function findRightmostChildNodeWithTokens(children, exclusiveStartPosition, sourceFile, parentKind) { + for (let i = exclusiveStartPosition - 1; i >= 0; i--) { + const child = children[i]; + if (isWhiteSpaceOnlyJsxText(child)) { + if (i === 0 && (parentKind === 12 /* JsxText */ || parentKind === 286 /* JsxSelfClosingElement */)) { + Debug.fail("`JsxText` tokens should not be the first child of `JsxElement | JsxSelfClosingElement`"); + } + } else if (nodeHasTokens(children[i], sourceFile)) { + return children[i]; + } + } +} +function isInString(sourceFile, position, previousToken = findPrecedingToken(position, sourceFile)) { + if (previousToken && isStringTextContainingNode(previousToken)) { + const start = previousToken.getStart(sourceFile); + const end = previousToken.getEnd(); + if (start < position && position < end) { + return true; + } + if (position === end) { + return !!previousToken.isUnterminated; + } + } + return false; +} +function isInsideJsxElementOrAttribute(sourceFile, position) { + const token = getTokenAtPosition(sourceFile, position); + if (!token) { + return false; + } + if (token.kind === 12 /* JsxText */) { + return true; + } + if (token.kind === 30 /* LessThanToken */ && token.parent.kind === 12 /* JsxText */) { + return true; + } + if (token.kind === 30 /* LessThanToken */ && token.parent.kind === 295 /* JsxExpression */) { + return true; + } + if (token && token.kind === 20 /* CloseBraceToken */ && token.parent.kind === 295 /* JsxExpression */) { + return true; + } + if (token.kind === 30 /* LessThanToken */ && token.parent.kind === 288 /* JsxClosingElement */) { + return true; + } + return false; +} +function isWhiteSpaceOnlyJsxText(node) { + return isJsxText(node) && node.containsOnlyTriviaWhiteSpaces; +} +function isInTemplateString(sourceFile, position) { + const token = getTokenAtPosition(sourceFile, position); + return isTemplateLiteralKind(token.kind) && position > token.getStart(sourceFile); +} +function isInJSXText(sourceFile, position) { + const token = getTokenAtPosition(sourceFile, position); + if (isJsxText(token)) { + return true; + } + if (token.kind === 19 /* OpenBraceToken */ && isJsxExpression(token.parent) && isJsxElement(token.parent.parent)) { + return true; + } + if (token.kind === 30 /* LessThanToken */ && isJsxOpeningLikeElement(token.parent) && isJsxElement(token.parent.parent)) { + return true; + } + return false; +} +function isInsideJsxElement(sourceFile, position) { + function isInsideJsxElementTraversal(node) { + while (node) { + if (node.kind >= 286 /* JsxSelfClosingElement */ && node.kind <= 295 /* JsxExpression */ || node.kind === 12 /* JsxText */ || node.kind === 30 /* LessThanToken */ || node.kind === 32 /* GreaterThanToken */ || node.kind === 80 /* Identifier */ || node.kind === 20 /* CloseBraceToken */ || node.kind === 19 /* OpenBraceToken */ || node.kind === 44 /* SlashToken */) { + node = node.parent; + } else if (node.kind === 285 /* JsxElement */) { + if (position > node.getStart(sourceFile)) return true; + node = node.parent; + } else { + return false; + } + } + return false; + } + return isInsideJsxElementTraversal(getTokenAtPosition(sourceFile, position)); +} +function findPrecedingMatchingToken(token, matchingTokenKind, sourceFile) { + const closeTokenText = tokenToString(token.kind); + const matchingTokenText = tokenToString(matchingTokenKind); + const tokenFullStart = token.getFullStart(); + const bestGuessIndex = sourceFile.text.lastIndexOf(matchingTokenText, tokenFullStart); + if (bestGuessIndex === -1) { + return void 0; + } + if (sourceFile.text.lastIndexOf(closeTokenText, tokenFullStart - 1) < bestGuessIndex) { + const nodeAtGuess = findPrecedingToken(bestGuessIndex + 1, sourceFile); + if (nodeAtGuess && nodeAtGuess.kind === matchingTokenKind) { + return nodeAtGuess; + } + } + const tokenKind = token.kind; + let remainingMatchingTokens = 0; + while (true) { + const preceding = findPrecedingToken(token.getFullStart(), sourceFile); + if (!preceding) { + return void 0; + } + token = preceding; + if (token.kind === matchingTokenKind) { + if (remainingMatchingTokens === 0) { + return token; + } + remainingMatchingTokens--; + } else if (token.kind === tokenKind) { + remainingMatchingTokens++; + } + } +} +function removeOptionality(type, isOptionalExpression, isOptionalChain2) { + return isOptionalExpression ? type.getNonNullableType() : isOptionalChain2 ? type.getNonOptionalType() : type; +} +function isPossiblyTypeArgumentPosition(token, sourceFile, checker) { + const info = getPossibleTypeArgumentsInfo(token, sourceFile); + return info !== void 0 && (isPartOfTypeNode(info.called) || getPossibleGenericSignatures(info.called, info.nTypeArguments, checker).length !== 0 || isPossiblyTypeArgumentPosition(info.called, sourceFile, checker)); +} +function getPossibleGenericSignatures(called, typeArgumentCount, checker) { + let type = checker.getTypeAtLocation(called); + if (isOptionalChain(called.parent)) { + type = removeOptionality( + type, + isOptionalChainRoot(called.parent), + /*isOptionalChain*/ + true + ); + } + const signatures = isNewExpression(called.parent) ? type.getConstructSignatures() : type.getCallSignatures(); + return signatures.filter((candidate) => !!candidate.typeParameters && candidate.typeParameters.length >= typeArgumentCount); +} +function getPossibleTypeArgumentsInfo(tokenIn, sourceFile) { + if (sourceFile.text.lastIndexOf("<", tokenIn ? tokenIn.pos : sourceFile.text.length) === -1) { + return void 0; + } + let token = tokenIn; + let remainingLessThanTokens = 0; + let nTypeArguments = 0; + while (token) { + switch (token.kind) { + case 30 /* LessThanToken */: + token = findPrecedingToken(token.getFullStart(), sourceFile); + if (token && token.kind === 29 /* QuestionDotToken */) { + token = findPrecedingToken(token.getFullStart(), sourceFile); + } + if (!token || !isIdentifier(token)) return void 0; + if (!remainingLessThanTokens) { + return isDeclarationName(token) ? void 0 : { called: token, nTypeArguments }; + } + remainingLessThanTokens--; + break; + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + remainingLessThanTokens = 3; + break; + case 49 /* GreaterThanGreaterThanToken */: + remainingLessThanTokens = 2; + break; + case 32 /* GreaterThanToken */: + remainingLessThanTokens++; + break; + case 20 /* CloseBraceToken */: + token = findPrecedingMatchingToken(token, 19 /* OpenBraceToken */, sourceFile); + if (!token) return void 0; + break; + case 22 /* CloseParenToken */: + token = findPrecedingMatchingToken(token, 21 /* OpenParenToken */, sourceFile); + if (!token) return void 0; + break; + case 24 /* CloseBracketToken */: + token = findPrecedingMatchingToken(token, 23 /* OpenBracketToken */, sourceFile); + if (!token) return void 0; + break; + // Valid tokens in a type name. Skip. + case 28 /* CommaToken */: + nTypeArguments++; + break; + case 39 /* EqualsGreaterThanToken */: + // falls through + case 80 /* Identifier */: + case 11 /* StringLiteral */: + case 9 /* NumericLiteral */: + case 10 /* BigIntLiteral */: + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + // falls through + case 114 /* TypeOfKeyword */: + case 96 /* ExtendsKeyword */: + case 143 /* KeyOfKeyword */: + case 25 /* DotToken */: + case 52 /* BarToken */: + case 58 /* QuestionToken */: + case 59 /* ColonToken */: + break; + default: + if (isTypeNode(token)) { + break; + } + return void 0; + } + token = findPrecedingToken(token.getFullStart(), sourceFile); + } + return void 0; +} +function isInComment(sourceFile, position, tokenAtPosition) { + return ts_formatting_exports.getRangeOfEnclosingComment( + sourceFile, + position, + /*precedingToken*/ + void 0, + tokenAtPosition + ); +} +function hasDocComment(sourceFile, position) { + const token = getTokenAtPosition(sourceFile, position); + return !!findAncestor(token, isJSDoc); +} +function nodeHasTokens(n, sourceFile) { + return n.kind === 1 /* EndOfFileToken */ ? !!n.jsDoc : n.getWidth(sourceFile) !== 0; +} +function getNodeModifiers(node, excludeFlags = 0 /* None */) { + const result = []; + const flags = isDeclaration(node) ? getCombinedNodeFlagsAlwaysIncludeJSDoc(node) & ~excludeFlags : 0 /* None */; + if (flags & 2 /* Private */) result.push("private" /* privateMemberModifier */); + if (flags & 4 /* Protected */) result.push("protected" /* protectedMemberModifier */); + if (flags & 1 /* Public */) result.push("public" /* publicMemberModifier */); + if (flags & 256 /* Static */ || isClassStaticBlockDeclaration(node)) result.push("static" /* staticModifier */); + if (flags & 64 /* Abstract */) result.push("abstract" /* abstractModifier */); + if (flags & 32 /* Export */) result.push("export" /* exportedModifier */); + if (flags & 65536 /* Deprecated */) result.push("deprecated" /* deprecatedModifier */); + if (node.flags & 33554432 /* Ambient */) result.push("declare" /* ambientModifier */); + if (node.kind === 278 /* ExportAssignment */) result.push("export" /* exportedModifier */); + return result.length > 0 ? result.join(",") : "" /* none */; +} +function getTypeArgumentOrTypeParameterList(node) { + if (node.kind === 184 /* TypeReference */ || node.kind === 214 /* CallExpression */) { + return node.typeArguments; + } + if (isFunctionLike(node) || node.kind === 264 /* ClassDeclaration */ || node.kind === 265 /* InterfaceDeclaration */) { + return node.typeParameters; + } + return void 0; +} +function isComment(kind) { + return kind === 2 /* SingleLineCommentTrivia */ || kind === 3 /* MultiLineCommentTrivia */; +} +function isStringOrRegularExpressionOrTemplateLiteral(kind) { + if (kind === 11 /* StringLiteral */ || kind === 14 /* RegularExpressionLiteral */ || isTemplateLiteralKind(kind)) { + return true; + } + return false; +} +function areIntersectedTypesAvoidingStringReduction(checker, t1, t2) { + return !!(t1.flags & 4 /* String */) && checker.isEmptyAnonymousObjectType(t2); +} +function isStringAndEmptyAnonymousObjectIntersection(type) { + if (!type.isIntersection()) { + return false; + } + const { types, checker } = type; + return types.length === 2 && (areIntersectedTypesAvoidingStringReduction(checker, types[0], types[1]) || areIntersectedTypesAvoidingStringReduction(checker, types[1], types[0])); +} +function isInsideTemplateLiteral(node, position, sourceFile) { + return isTemplateLiteralKind(node.kind) && (node.getStart(sourceFile) < position && position < node.end) || !!node.isUnterminated && position === node.end; +} +function isAccessibilityModifier(kind) { + switch (kind) { + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + return true; + } + return false; +} +function cloneCompilerOptions(options) { + const result = clone(options); + setConfigFileInOptions(result, options && options.configFile); + return result; +} +function isArrayLiteralOrObjectLiteralDestructuringPattern(node) { + if (node.kind === 210 /* ArrayLiteralExpression */ || node.kind === 211 /* ObjectLiteralExpression */) { + if (node.parent.kind === 227 /* BinaryExpression */ && node.parent.left === node && node.parent.operatorToken.kind === 64 /* EqualsToken */) { + return true; + } + if (node.parent.kind === 251 /* ForOfStatement */ && node.parent.initializer === node) { + return true; + } + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.kind === 304 /* PropertyAssignment */ ? node.parent.parent : node.parent)) { + return true; + } + } + return false; +} +function isInReferenceComment(sourceFile, position) { + return isInReferenceCommentWorker( + sourceFile, + position, + /*shouldBeReference*/ + true + ); +} +function isInNonReferenceComment(sourceFile, position) { + return isInReferenceCommentWorker( + sourceFile, + position, + /*shouldBeReference*/ + false + ); +} +function isInReferenceCommentWorker(sourceFile, position, shouldBeReference) { + const range = isInComment( + sourceFile, + position, + /*tokenAtPosition*/ + void 0 + ); + return !!range && shouldBeReference === tripleSlashDirectivePrefixRegex.test(sourceFile.text.substring(range.pos, range.end)); +} +function getReplacementSpanForContextToken(contextToken, position) { + if (!contextToken) return void 0; + switch (contextToken.kind) { + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + return createTextSpanFromStringLiteralLikeContent(contextToken, position); + default: + return createTextSpanFromNode(contextToken); + } +} +function createTextSpanFromNode(node, sourceFile, endNode2) { + return createTextSpanFromBounds(node.getStart(sourceFile), (endNode2 || node).getEnd()); +} +function createTextSpanFromStringLiteralLikeContent(node, position) { + let replacementEnd = node.getEnd() - 1; + if (node.isUnterminated) { + if (node.getStart() === replacementEnd) return void 0; + replacementEnd = Math.min(position, node.getEnd()); + } + return createTextSpanFromBounds(node.getStart() + 1, replacementEnd); +} +function createTextRangeFromNode(node, sourceFile) { + return createRange(node.getStart(sourceFile), node.end); +} +function createTextSpanFromRange(range) { + return createTextSpanFromBounds(range.pos, range.end); +} +function createTextRangeFromSpan(span) { + return createRange(span.start, span.start + span.length); +} +function createTextChangeFromStartLength(start, length2, newText) { + return createTextChange(createTextSpan(start, length2), newText); +} +function createTextChange(span, newText) { + return { span, newText }; +} +var typeKeywords = [ + 133 /* AnyKeyword */, + 131 /* AssertsKeyword */, + 163 /* BigIntKeyword */, + 136 /* BooleanKeyword */, + 97 /* FalseKeyword */, + 140 /* InferKeyword */, + 143 /* KeyOfKeyword */, + 146 /* NeverKeyword */, + 106 /* NullKeyword */, + 150 /* NumberKeyword */, + 151 /* ObjectKeyword */, + 148 /* ReadonlyKeyword */, + 154 /* StringKeyword */, + 155 /* SymbolKeyword */, + 114 /* TypeOfKeyword */, + 112 /* TrueKeyword */, + 116 /* VoidKeyword */, + 157 /* UndefinedKeyword */, + 158 /* UniqueKeyword */, + 159 /* UnknownKeyword */ +]; +function isTypeKeyword(kind) { + return contains(typeKeywords, kind); +} +function isTypeKeywordToken(node) { + return node.kind === 156 /* TypeKeyword */; +} +function isTypeKeywordTokenOrIdentifier(node) { + return isTypeKeywordToken(node) || isIdentifier(node) && node.text === "type"; +} +function nodeSeenTracker() { + const seen = []; + return (node) => { + const id = getNodeId(node); + return !seen[id] && (seen[id] = true); + }; +} +function getSnapshotText(snap) { + return snap.getText(0, snap.getLength()); +} +function repeatString(str, count) { + let result = ""; + for (let i = 0; i < count; i++) { + result += str; + } + return result; +} +function skipConstraint(type) { + return type.isTypeParameter() ? type.getConstraint() || type : type; +} +function getNameFromPropertyName(name) { + return name.kind === 168 /* ComputedPropertyName */ ? isStringOrNumericLiteralLike(name.expression) ? name.expression.text : void 0 : isPrivateIdentifier(name) ? idText(name) : getTextOfIdentifierOrLiteral(name); +} +function programContainsModules(program) { + return program.getSourceFiles().some((s) => !s.isDeclarationFile && !program.isSourceFileFromExternalLibrary(s) && !!(s.externalModuleIndicator || s.commonJsModuleIndicator)); +} +function programContainsEsModules(program) { + return program.getSourceFiles().some((s) => !s.isDeclarationFile && !program.isSourceFileFromExternalLibrary(s) && !!s.externalModuleIndicator); +} +function compilerOptionsIndicateEsModules(compilerOptions) { + return !!compilerOptions.module || getEmitScriptTarget(compilerOptions) >= 2 /* ES2015 */ || !!compilerOptions.noEmit; +} +function createModuleSpecifierResolutionHost(program, host) { + return { + fileExists: (fileName) => program.fileExists(fileName), + getCurrentDirectory: () => host.getCurrentDirectory(), + readFile: maybeBind(host, host.readFile), + useCaseSensitiveFileNames: maybeBind(host, host.useCaseSensitiveFileNames) || program.useCaseSensitiveFileNames, + getSymlinkCache: maybeBind(host, host.getSymlinkCache) || program.getSymlinkCache, + getModuleSpecifierCache: maybeBind(host, host.getModuleSpecifierCache), + getPackageJsonInfoCache: () => { + var _a; + return (_a = program.getModuleResolutionCache()) == null ? void 0 : _a.getPackageJsonInfoCache(); + }, + getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation), + redirectTargetsMap: program.redirectTargetsMap, + getRedirectFromSourceFile: (fileName) => program.getRedirectFromSourceFile(fileName), + isSourceOfProjectReferenceRedirect: (fileName) => program.isSourceOfProjectReferenceRedirect(fileName), + getNearestAncestorDirectoryWithPackageJson: maybeBind(host, host.getNearestAncestorDirectoryWithPackageJson), + getFileIncludeReasons: () => program.getFileIncludeReasons(), + getCommonSourceDirectory: () => program.getCommonSourceDirectory(), + getDefaultResolutionModeForFile: (file) => program.getDefaultResolutionModeForFile(file), + getModeForResolutionAtIndex: (file, index) => program.getModeForResolutionAtIndex(file, index) + }; +} +function getModuleSpecifierResolverHost(program, host) { + return { + ...createModuleSpecifierResolutionHost(program, host), + getCommonSourceDirectory: () => program.getCommonSourceDirectory() + }; +} +function moduleResolutionUsesNodeModules(moduleResolution) { + return moduleResolution === 2 /* Node10 */ || moduleResolution >= 3 /* Node16 */ && moduleResolution <= 99 /* NodeNext */ || moduleResolution === 100 /* Bundler */; +} +function makeImport(defaultImport, namedImports, moduleSpecifier, quotePreference, isTypeOnly) { + return factory.createImportDeclaration( + /*modifiers*/ + void 0, + defaultImport || namedImports ? factory.createImportClause(isTypeOnly ? 156 /* TypeKeyword */ : void 0, defaultImport, namedImports && namedImports.length ? factory.createNamedImports(namedImports) : void 0) : void 0, + typeof moduleSpecifier === "string" ? makeStringLiteral(moduleSpecifier, quotePreference) : moduleSpecifier, + /*attributes*/ + void 0 + ); +} +function makeStringLiteral(text, quotePreference) { + return factory.createStringLiteral(text, quotePreference === 0 /* Single */); +} +var QuotePreference = /* @__PURE__ */ ((QuotePreference6) => { + QuotePreference6[QuotePreference6["Single"] = 0] = "Single"; + QuotePreference6[QuotePreference6["Double"] = 1] = "Double"; + return QuotePreference6; +})(QuotePreference || {}); +function quotePreferenceFromString(str, sourceFile) { + return isStringDoubleQuoted(str, sourceFile) ? 1 /* Double */ : 0 /* Single */; +} +function getQuotePreference(sourceFile, preferences) { + if (preferences.quotePreference && preferences.quotePreference !== "auto") { + return preferences.quotePreference === "single" ? 0 /* Single */ : 1 /* Double */; + } else { + const firstModuleSpecifier = isFullSourceFile(sourceFile) && sourceFile.imports && find(sourceFile.imports, (n) => isStringLiteral(n) && !nodeIsSynthesized(n.parent)); + return firstModuleSpecifier ? quotePreferenceFromString(firstModuleSpecifier, sourceFile) : 1 /* Double */; + } +} +function getQuoteFromPreference(qp) { + switch (qp) { + case 0 /* Single */: + return "'"; + case 1 /* Double */: + return '"'; + default: + return Debug.assertNever(qp); + } +} +function symbolNameNoDefault(symbol) { + const escaped = symbolEscapedNameNoDefault(symbol); + return escaped === void 0 ? void 0 : unescapeLeadingUnderscores(escaped); +} +function symbolEscapedNameNoDefault(symbol) { + if (symbol.escapedName !== "default" /* Default */) { + return symbol.escapedName; + } + return firstDefined(symbol.declarations, (decl) => { + const name = getNameOfDeclaration(decl); + return name && name.kind === 80 /* Identifier */ ? name.escapedText : void 0; + }); +} +function isModuleSpecifierLike(node) { + return isStringLiteralLike(node) && (isExternalModuleReference(node.parent) || isImportDeclaration(node.parent) || isJSDocImportTag(node.parent) || isRequireCall( + node.parent, + /*requireStringLiteralLikeArgument*/ + false + ) && node.parent.arguments[0] === node || isImportCall(node.parent) && node.parent.arguments[0] === node); +} +function isObjectBindingElementWithoutPropertyName(bindingElement) { + return isBindingElement(bindingElement) && isObjectBindingPattern(bindingElement.parent) && isIdentifier(bindingElement.name) && !bindingElement.propertyName; +} +function getPropertySymbolFromBindingElement(checker, bindingElement) { + const typeOfPattern = checker.getTypeAtLocation(bindingElement.parent); + return typeOfPattern && checker.getPropertyOfType(typeOfPattern, bindingElement.name.text); +} +function getParentNodeInSpan(node, file, span) { + if (!node) return void 0; + while (node.parent) { + if (isSourceFile(node.parent) || !spanContainsNode(span, node.parent, file)) { + return node; + } + node = node.parent; + } +} +function spanContainsNode(span, node, file) { + return textSpanContainsPosition(span, node.getStart(file)) && node.getEnd() <= textSpanEnd(span); +} +function findModifier(node, kind) { + return canHaveModifiers(node) ? find(node.modifiers, (m) => m.kind === kind) : void 0; +} +function insertImports(changes, sourceFile, imports, blankLineBetween, preferences) { + var _a; + const decl = isArray(imports) ? imports[0] : imports; + const importKindPredicate = decl.kind === 244 /* VariableStatement */ ? isRequireVariableStatement : isAnyImportSyntax; + const existingImportStatements = filter(sourceFile.statements, importKindPredicate); + const { comparer, isSorted } = ts_OrganizeImports_exports.getOrganizeImportsStringComparerWithDetection(existingImportStatements, preferences); + const sortedNewImports = isArray(imports) ? toSorted(imports, (a, b) => ts_OrganizeImports_exports.compareImportsOrRequireStatements(a, b, comparer)) : [imports]; + if (!(existingImportStatements == null ? void 0 : existingImportStatements.length)) { + if (isFullSourceFile(sourceFile)) { + changes.insertNodesAtTopOfFile(sourceFile, sortedNewImports, blankLineBetween); + } else { + for (const newImport of sortedNewImports) { + changes.insertStatementsInNewFile(sourceFile.fileName, [newImport], (_a = getOriginalNode(newImport)) == null ? void 0 : _a.getSourceFile()); + } + } + return; + } + Debug.assert(isFullSourceFile(sourceFile)); + if (existingImportStatements && isSorted) { + for (const newImport of sortedNewImports) { + const insertionIndex = ts_OrganizeImports_exports.getImportDeclarationInsertionIndex(existingImportStatements, newImport, comparer); + if (insertionIndex === 0) { + const options = existingImportStatements[0] === sourceFile.statements[0] ? { leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude } : {}; + changes.insertNodeBefore( + sourceFile, + existingImportStatements[0], + newImport, + /*blankLineBetween*/ + false, + options + ); + } else { + const prevImport = existingImportStatements[insertionIndex - 1]; + changes.insertNodeAfter(sourceFile, prevImport, newImport); + } + } + } else { + const lastExistingImport = lastOrUndefined(existingImportStatements); + if (lastExistingImport) { + changes.insertNodesAfter(sourceFile, lastExistingImport, sortedNewImports); + } else { + changes.insertNodesAtTopOfFile(sourceFile, sortedNewImports, blankLineBetween); + } + } +} +function getTypeKeywordOfTypeOnlyImport(importClause, sourceFile) { + Debug.assert(importClause.isTypeOnly); + return cast(importClause.getChildAt(0, sourceFile), isTypeKeywordToken); +} +function textSpansEqual(a, b) { + return !!a && !!b && a.start === b.start && a.length === b.length; +} +function documentSpansEqual(a, b, useCaseSensitiveFileNames2) { + return (useCaseSensitiveFileNames2 ? equateStringsCaseSensitive : equateStringsCaseInsensitive)(a.fileName, b.fileName) && textSpansEqual(a.textSpan, b.textSpan); +} +function getDocumentSpansEqualityComparer(useCaseSensitiveFileNames2) { + return (a, b) => documentSpansEqual(a, b, useCaseSensitiveFileNames2); +} +function forEachUnique(array, callback) { + if (array) { + for (let i = 0; i < array.length; i++) { + if (array.indexOf(array[i]) === i) { + const result = callback(array[i], i); + if (result) { + return result; + } + } + } + } + return void 0; +} +function isTextWhiteSpaceLike(text, startPos, endPos) { + for (let i = startPos; i < endPos; i++) { + if (!isWhiteSpaceLike(text.charCodeAt(i))) { + return false; + } + } + return true; +} +function getMappedLocation(location, sourceMapper, fileExists) { + const mapsTo = sourceMapper.tryGetSourcePosition(location); + return mapsTo && (!fileExists || fileExists(normalizePath(mapsTo.fileName)) ? mapsTo : void 0); +} +function getMappedDocumentSpan(documentSpan, sourceMapper, fileExists) { + const { fileName, textSpan } = documentSpan; + const newPosition = getMappedLocation({ fileName, pos: textSpan.start }, sourceMapper, fileExists); + if (!newPosition) return void 0; + const newEndPosition = getMappedLocation({ fileName, pos: textSpan.start + textSpan.length }, sourceMapper, fileExists); + const newLength = newEndPosition ? newEndPosition.pos - newPosition.pos : textSpan.length; + return { + fileName: newPosition.fileName, + textSpan: { + start: newPosition.pos, + length: newLength + }, + originalFileName: documentSpan.fileName, + originalTextSpan: documentSpan.textSpan, + contextSpan: getMappedContextSpan(documentSpan, sourceMapper, fileExists), + originalContextSpan: documentSpan.contextSpan + }; +} +function getMappedContextSpan(documentSpan, sourceMapper, fileExists) { + const contextSpanStart = documentSpan.contextSpan && getMappedLocation( + { fileName: documentSpan.fileName, pos: documentSpan.contextSpan.start }, + sourceMapper, + fileExists + ); + const contextSpanEnd = documentSpan.contextSpan && getMappedLocation( + { fileName: documentSpan.fileName, pos: documentSpan.contextSpan.start + documentSpan.contextSpan.length }, + sourceMapper, + fileExists + ); + return contextSpanStart && contextSpanEnd ? { start: contextSpanStart.pos, length: contextSpanEnd.pos - contextSpanStart.pos } : void 0; +} +function isFirstDeclarationOfSymbolParameter(symbol) { + const declaration = symbol.declarations ? firstOrUndefined(symbol.declarations) : void 0; + return !!findAncestor(declaration, (n) => isParameter(n) ? true : isBindingElement(n) || isObjectBindingPattern(n) || isArrayBindingPattern(n) ? false : "quit"); +} +var displayPartWriterCache = /* @__PURE__ */ new Map(); +function getDisplayPartWriter(maximumLength) { + maximumLength = maximumLength || defaultMaximumTruncationLength; + if (!displayPartWriterCache.has(maximumLength)) { + displayPartWriterCache.set(maximumLength, getDisplayPartWriterWorker(maximumLength)); + } + return displayPartWriterCache.get(maximumLength); +} +function getDisplayPartWriterWorker(maximumLength) { + const absoluteMaximumLength = maximumLength * 10; + let displayParts; + let lineStart; + let indent3; + let length2; + resetWriter(); + const unknownWrite = (text) => writeKind(text, 17 /* text */); + return { + displayParts: () => { + const finalText = displayParts.length && displayParts[displayParts.length - 1].text; + if (length2 > absoluteMaximumLength && finalText && finalText !== "...") { + if (!isWhiteSpaceLike(finalText.charCodeAt(finalText.length - 1))) { + displayParts.push(displayPart(" ", 16 /* space */)); + } + displayParts.push(displayPart("...", 15 /* punctuation */)); + } + return displayParts; + }, + writeKeyword: (text) => writeKind(text, 5 /* keyword */), + writeOperator: (text) => writeKind(text, 12 /* operator */), + writePunctuation: (text) => writeKind(text, 15 /* punctuation */), + writeTrailingSemicolon: (text) => writeKind(text, 15 /* punctuation */), + writeSpace: (text) => writeKind(text, 16 /* space */), + writeStringLiteral: (text) => writeKind(text, 8 /* stringLiteral */), + writeParameter: (text) => writeKind(text, 13 /* parameterName */), + writeProperty: (text) => writeKind(text, 14 /* propertyName */), + writeLiteral: (text) => writeKind(text, 8 /* stringLiteral */), + writeSymbol, + writeLine, + write: unknownWrite, + writeComment: unknownWrite, + getText: () => "", + getTextPos: () => 0, + getColumn: () => 0, + getLine: () => 0, + isAtStartOfLine: () => false, + hasTrailingWhitespace: () => false, + hasTrailingComment: () => false, + rawWrite: notImplemented, + getIndent: () => indent3, + increaseIndent: () => { + indent3++; + }, + decreaseIndent: () => { + indent3--; + }, + clear: resetWriter + }; + function writeIndent() { + if (length2 > absoluteMaximumLength) return; + if (lineStart) { + const indentString = getIndentString(indent3); + if (indentString) { + length2 += indentString.length; + displayParts.push(displayPart(indentString, 16 /* space */)); + } + lineStart = false; + } + } + function writeKind(text, kind) { + if (length2 > absoluteMaximumLength) return; + writeIndent(); + length2 += text.length; + displayParts.push(displayPart(text, kind)); + } + function writeSymbol(text, symbol) { + if (length2 > absoluteMaximumLength) return; + writeIndent(); + length2 += text.length; + displayParts.push(symbolPart(text, symbol)); + } + function writeLine() { + if (length2 > absoluteMaximumLength) return; + length2 += 1; + displayParts.push(lineBreakPart()); + lineStart = true; + } + function resetWriter() { + displayParts = []; + lineStart = true; + indent3 = 0; + length2 = 0; + } +} +function symbolPart(text, symbol) { + return displayPart(text, displayPartKind(symbol)); + function displayPartKind(symbol2) { + const flags = symbol2.flags; + if (flags & 3 /* Variable */) { + return isFirstDeclarationOfSymbolParameter(symbol2) ? 13 /* parameterName */ : 9 /* localName */; + } + if (flags & 4 /* Property */) return 14 /* propertyName */; + if (flags & 32768 /* GetAccessor */) return 14 /* propertyName */; + if (flags & 65536 /* SetAccessor */) return 14 /* propertyName */; + if (flags & 8 /* EnumMember */) return 19 /* enumMemberName */; + if (flags & 16 /* Function */) return 20 /* functionName */; + if (flags & 32 /* Class */) return 1 /* className */; + if (flags & 64 /* Interface */) return 4 /* interfaceName */; + if (flags & 384 /* Enum */) return 2 /* enumName */; + if (flags & 1536 /* Module */) return 11 /* moduleName */; + if (flags & 8192 /* Method */) return 10 /* methodName */; + if (flags & 262144 /* TypeParameter */) return 18 /* typeParameterName */; + if (flags & 524288 /* TypeAlias */) return 0 /* aliasName */; + if (flags & 2097152 /* Alias */) return 0 /* aliasName */; + return 17 /* text */; + } +} +function displayPart(text, kind) { + return { text, kind: SymbolDisplayPartKind[kind] }; +} +function spacePart() { + return displayPart(" ", 16 /* space */); +} +function keywordPart(kind) { + return displayPart(tokenToString(kind), 5 /* keyword */); +} +function punctuationPart(kind) { + return displayPart(tokenToString(kind), 15 /* punctuation */); +} +function operatorPart(kind) { + return displayPart(tokenToString(kind), 12 /* operator */); +} +function parameterNamePart(text) { + return displayPart(text, 13 /* parameterName */); +} +function propertyNamePart(text) { + return displayPart(text, 14 /* propertyName */); +} +function textOrKeywordPart(text) { + const kind = stringToToken(text); + return kind === void 0 ? textPart(text) : keywordPart(kind); +} +function textPart(text) { + return displayPart(text, 17 /* text */); +} +function typeAliasNamePart(text) { + return displayPart(text, 0 /* aliasName */); +} +function typeParameterNamePart(text) { + return displayPart(text, 18 /* typeParameterName */); +} +function linkTextPart(text) { + return displayPart(text, 24 /* linkText */); +} +function linkNamePart(text, target) { + return { + text, + kind: SymbolDisplayPartKind[23 /* linkName */], + target: { + fileName: getSourceFileOfNode(target).fileName, + textSpan: createTextSpanFromNode(target) + } + }; +} +function linkPart(text) { + return displayPart(text, 22 /* link */); +} +function buildLinkParts(link, checker) { + var _a; + const prefix = isJSDocLink(link) ? "link" : isJSDocLinkCode(link) ? "linkcode" : "linkplain"; + const parts = [linkPart(`{@${prefix} `)]; + if (!link.name) { + if (link.text) { + parts.push(linkTextPart(link.text)); + } + } else { + const symbol = checker == null ? void 0 : checker.getSymbolAtLocation(link.name); + const targetSymbol = symbol && checker ? getSymbolTarget(symbol, checker) : void 0; + const suffix = findLinkNameEnd(link.text); + const name = getTextOfNode(link.name) + link.text.slice(0, suffix); + const text = skipSeparatorFromLinkText(link.text.slice(suffix)); + const decl = (targetSymbol == null ? void 0 : targetSymbol.valueDeclaration) || ((_a = targetSymbol == null ? void 0 : targetSymbol.declarations) == null ? void 0 : _a[0]); + if (decl) { + parts.push(linkNamePart(name, decl)); + if (text) parts.push(linkTextPart(text)); + } else { + const separator = suffix === 0 || link.text.charCodeAt(suffix) === 124 /* bar */ && name.charCodeAt(name.length - 1) !== 32 /* space */ ? " " : ""; + parts.push(linkTextPart(name + separator + text)); + } + } + parts.push(linkPart("}")); + return parts; +} +function skipSeparatorFromLinkText(text) { + let pos = 0; + if (text.charCodeAt(pos++) === 124 /* bar */) { + while (pos < text.length && text.charCodeAt(pos) === 32 /* space */) pos++; + return text.slice(pos); + } + return text; +} +function findLinkNameEnd(text) { + let pos = text.indexOf("://"); + if (pos === 0) { + while (pos < text.length && text.charCodeAt(pos) !== 124 /* bar */) pos++; + return pos; + } + if (text.indexOf("()") === 0) return 2; + if (text.charAt(0) === "<") { + let brackets2 = 0; + let i = 0; + while (i < text.length) { + if (text[i] === "<") brackets2++; + if (text[i] === ">") brackets2--; + i++; + if (!brackets2) return i; + } + } + return 0; +} +var lineFeed2 = "\n"; +function getNewLineOrDefaultFromHost(host, formatSettings) { + var _a; + return (formatSettings == null ? void 0 : formatSettings.newLineCharacter) || ((_a = host.getNewLine) == null ? void 0 : _a.call(host)) || lineFeed2; +} +function lineBreakPart() { + return displayPart("\n", 6 /* lineBreak */); +} +function mapToDisplayParts(writeDisplayParts, maximumLength) { + const displayPartWriter = getDisplayPartWriter(maximumLength); + try { + writeDisplayParts(displayPartWriter); + return displayPartWriter.displayParts(); + } finally { + displayPartWriter.clear(); + } +} +function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags = 0 /* None */, maximumLength, verbosityLevel, out) { + return mapToDisplayParts((writer) => { + typechecker.writeType(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer, maximumLength, verbosityLevel, out); + }, maximumLength); +} +function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags = 0 /* None */) { + return mapToDisplayParts((writer) => { + typeChecker.writeSymbol(symbol, enclosingDeclaration, meaning, flags | 8 /* UseAliasDefinedOutsideCurrentScope */, writer); + }); +} +function signatureToDisplayParts(typechecker, signature, enclosingDeclaration, flags = 0 /* None */, maximumLength, verbosityLevel, out) { + flags |= 16384 /* UseAliasDefinedOutsideCurrentScope */ | 1024 /* MultilineObjectLiterals */ | 32 /* WriteTypeArgumentsOfSignature */ | 8192 /* OmitParameterModifiers */; + return mapToDisplayParts((writer) => { + typechecker.writeSignature( + signature, + enclosingDeclaration, + flags, + /*kind*/ + void 0, + writer, + maximumLength, + verbosityLevel, + out + ); + }, maximumLength); +} +function isImportOrExportSpecifierName(location) { + return !!location.parent && isImportOrExportSpecifier(location.parent) && location.parent.propertyName === location; +} +function getScriptKind(fileName, host) { + return ensureScriptKind(fileName, host.getScriptKind && host.getScriptKind(fileName)); +} +function getSymbolTarget(symbol, checker) { + let next = symbol; + while (isAliasSymbol(next) || isTransientSymbol(next) && next.links.target) { + if (isTransientSymbol(next) && next.links.target) { + next = next.links.target; + } else { + next = skipAlias(next, checker); + } + } + return next; +} +function isAliasSymbol(symbol) { + return (symbol.flags & 2097152 /* Alias */) !== 0; +} +function getUniqueSymbolId(symbol, checker) { + return getSymbolId(skipAlias(symbol, checker)); +} +function getFirstNonSpaceCharacterPosition(text, position) { + while (isWhiteSpaceLike(text.charCodeAt(position))) { + position += 1; + } + return position; +} +function getPrecedingNonSpaceCharacterPosition(text, position) { + while (position > -1 && isWhiteSpaceSingleLine(text.charCodeAt(position))) { + position -= 1; + } + return position + 1; +} +function copyComments(sourceNode, targetNode) { + const sourceFile = sourceNode.getSourceFile(); + const text = sourceFile.text; + if (hasLeadingLineBreak(sourceNode, text)) { + copyLeadingComments(sourceNode, targetNode, sourceFile); + } else { + copyTrailingAsLeadingComments(sourceNode, targetNode, sourceFile); + } + copyTrailingComments(sourceNode, targetNode, sourceFile); +} +function hasLeadingLineBreak(node, text) { + const start = node.getFullStart(); + const end = node.getStart(); + for (let i = start; i < end; i++) { + if (text.charCodeAt(i) === 10 /* lineFeed */) return true; + } + return false; +} +function getUniqueName(baseName, sourceFile) { + let nameText = baseName; + for (let i = 1; !isFileLevelUniqueName(sourceFile, nameText); i++) { + nameText = `${baseName}_${i}`; + } + return nameText; +} +function getRenameLocation(edits, renameFilename, name, preferLastLocation) { + let delta = 0; + let lastPos = -1; + for (const { fileName, textChanges: textChanges2 } of edits) { + Debug.assert(fileName === renameFilename); + for (const change of textChanges2) { + const { span, newText } = change; + const index = indexInTextChange(newText, escapeString(name)); + if (index !== -1) { + lastPos = span.start + delta + index; + if (!preferLastLocation) { + return lastPos; + } + } + delta += newText.length - span.length; + } + } + Debug.assert(preferLastLocation); + Debug.assert(lastPos >= 0); + return lastPos; +} +function copyLeadingComments(sourceNode, targetNode, sourceFile, commentKind, hasTrailingNewLine) { + forEachLeadingCommentRange(sourceFile.text, sourceNode.pos, getAddCommentsFunction(targetNode, sourceFile, commentKind, hasTrailingNewLine, addSyntheticLeadingComment)); +} +function copyTrailingComments(sourceNode, targetNode, sourceFile, commentKind, hasTrailingNewLine) { + forEachTrailingCommentRange(sourceFile.text, sourceNode.end, getAddCommentsFunction(targetNode, sourceFile, commentKind, hasTrailingNewLine, addSyntheticTrailingComment)); +} +function copyTrailingAsLeadingComments(sourceNode, targetNode, sourceFile, commentKind, hasTrailingNewLine) { + forEachTrailingCommentRange(sourceFile.text, sourceNode.pos, getAddCommentsFunction(targetNode, sourceFile, commentKind, hasTrailingNewLine, addSyntheticLeadingComment)); +} +function getAddCommentsFunction(targetNode, sourceFile, commentKind, hasTrailingNewLine, cb) { + return (pos, end, kind, htnl) => { + if (kind === 3 /* MultiLineCommentTrivia */) { + pos += 2; + end -= 2; + } else { + pos += 2; + } + cb(targetNode, commentKind || kind, sourceFile.text.slice(pos, end), hasTrailingNewLine !== void 0 ? hasTrailingNewLine : htnl); + }; +} +function indexInTextChange(change, name) { + if (startsWith(change, name)) return 0; + let idx = change.indexOf(" " + name); + if (idx === -1) idx = change.indexOf("." + name); + if (idx === -1) idx = change.indexOf('"' + name); + return idx === -1 ? -1 : idx + 1; +} +function needsParentheses(expression) { + return isBinaryExpression(expression) && expression.operatorToken.kind === 28 /* CommaToken */ || isObjectLiteralExpression(expression) || (isAsExpression(expression) || isSatisfiesExpression(expression)) && isObjectLiteralExpression(expression.expression); +} +function getContextualTypeFromParent(node, checker, contextFlags) { + const parent2 = walkUpParenthesizedExpressions(node.parent); + switch (parent2.kind) { + case 215 /* NewExpression */: + return checker.getContextualType(parent2, contextFlags); + case 227 /* BinaryExpression */: { + const { left, operatorToken, right } = parent2; + return isEqualityOperatorKind(operatorToken.kind) ? checker.getTypeAtLocation(node === right ? left : right) : checker.getContextualType(node, contextFlags); + } + case 297 /* CaseClause */: + return getSwitchedType(parent2, checker); + default: + return checker.getContextualType(node, contextFlags); + } +} +function quote(sourceFile, preferences, text) { + const quotePreference = getQuotePreference(sourceFile, preferences); + const quoted = JSON.stringify(text); + return quotePreference === 0 /* Single */ ? `'${stripQuotes(quoted).replace(/'/g, () => "\\'").replace(/\\"/g, '"')}'` : quoted; +} +function isEqualityOperatorKind(kind) { + switch (kind) { + case 37 /* EqualsEqualsEqualsToken */: + case 35 /* EqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + return true; + default: + return false; + } +} +function isStringLiteralOrTemplate(node) { + switch (node.kind) { + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 229 /* TemplateExpression */: + case 216 /* TaggedTemplateExpression */: + return true; + default: + return false; + } +} +function hasIndexSignature(type) { + return !!type.getStringIndexType() || !!type.getNumberIndexType(); +} +function getSwitchedType(caseClause, checker) { + return checker.getTypeAtLocation(caseClause.parent.parent.expression); +} +var ANONYMOUS = "anonymous function"; +function getTypeNodeIfAccessible(type, enclosingScope, program, host) { + const checker = program.getTypeChecker(); + let typeIsAccessible = true; + const notAccessible = () => typeIsAccessible = false; + const res = checker.typeToTypeNode(type, enclosingScope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */, { + trackSymbol: (symbol, declaration, meaning) => { + typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible( + symbol, + declaration, + meaning, + /*shouldComputeAliasToMarkVisible*/ + false + ).accessibility === 0 /* Accessible */; + return !typeIsAccessible; + }, + reportInaccessibleThisError: notAccessible, + reportPrivateInBaseOfClassExpression: notAccessible, + reportInaccessibleUniqueSymbolError: notAccessible, + moduleResolverHost: getModuleSpecifierResolverHost(program, host) + }); + return typeIsAccessible ? res : void 0; +} +function syntaxRequiresTrailingCommaOrSemicolonOrASI(kind) { + return kind === 180 /* CallSignature */ || kind === 181 /* ConstructSignature */ || kind === 182 /* IndexSignature */ || kind === 172 /* PropertySignature */ || kind === 174 /* MethodSignature */; +} +function syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI(kind) { + return kind === 263 /* FunctionDeclaration */ || kind === 177 /* Constructor */ || kind === 175 /* MethodDeclaration */ || kind === 178 /* GetAccessor */ || kind === 179 /* SetAccessor */; +} +function syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(kind) { + return kind === 268 /* ModuleDeclaration */; +} +function syntaxRequiresTrailingSemicolonOrASI(kind) { + return kind === 244 /* VariableStatement */ || kind === 245 /* ExpressionStatement */ || kind === 247 /* DoStatement */ || kind === 252 /* ContinueStatement */ || kind === 253 /* BreakStatement */ || kind === 254 /* ReturnStatement */ || kind === 258 /* ThrowStatement */ || kind === 260 /* DebuggerStatement */ || kind === 173 /* PropertyDeclaration */ || kind === 266 /* TypeAliasDeclaration */ || kind === 273 /* ImportDeclaration */ || kind === 272 /* ImportEqualsDeclaration */ || kind === 279 /* ExportDeclaration */ || kind === 271 /* NamespaceExportDeclaration */ || kind === 278 /* ExportAssignment */; +} +var syntaxMayBeASICandidate = or( + syntaxRequiresTrailingCommaOrSemicolonOrASI, + syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI, + syntaxRequiresTrailingModuleBlockOrSemicolonOrASI, + syntaxRequiresTrailingSemicolonOrASI +); +function nodeIsASICandidate(node, sourceFile) { + const lastToken = node.getLastToken(sourceFile); + if (lastToken && lastToken.kind === 27 /* SemicolonToken */) { + return false; + } + if (syntaxRequiresTrailingCommaOrSemicolonOrASI(node.kind)) { + if (lastToken && lastToken.kind === 28 /* CommaToken */) { + return false; + } + } else if (syntaxRequiresTrailingModuleBlockOrSemicolonOrASI(node.kind)) { + const lastChild = last(node.getChildren(sourceFile)); + if (lastChild && isModuleBlock(lastChild)) { + return false; + } + } else if (syntaxRequiresTrailingFunctionBlockOrSemicolonOrASI(node.kind)) { + const lastChild = last(node.getChildren(sourceFile)); + if (lastChild && isFunctionBlock(lastChild)) { + return false; + } + } else if (!syntaxRequiresTrailingSemicolonOrASI(node.kind)) { + return false; + } + if (node.kind === 247 /* DoStatement */) { + return true; + } + const topNode = findAncestor(node, (ancestor) => !ancestor.parent); + const nextToken = findNextToken(node, topNode, sourceFile); + if (!nextToken || nextToken.kind === 20 /* CloseBraceToken */) { + return true; + } + const startLine = sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line; + const endLine = sourceFile.getLineAndCharacterOfPosition(nextToken.getStart(sourceFile)).line; + return startLine !== endLine; +} +function positionIsASICandidate(pos, context, sourceFile) { + const contextAncestor = findAncestor(context, (ancestor) => { + if (ancestor.end !== pos) { + return "quit"; + } + return syntaxMayBeASICandidate(ancestor.kind); + }); + return !!contextAncestor && nodeIsASICandidate(contextAncestor, sourceFile); +} +function probablyUsesSemicolons(sourceFile) { + let withSemicolon = 0; + let withoutSemicolon = 0; + const nStatementsToObserve = 5; + forEachChild(sourceFile, function visit(node) { + if (syntaxRequiresTrailingSemicolonOrASI(node.kind)) { + const lastToken = node.getLastToken(sourceFile); + if ((lastToken == null ? void 0 : lastToken.kind) === 27 /* SemicolonToken */) { + withSemicolon++; + } else { + withoutSemicolon++; + } + } else if (syntaxRequiresTrailingCommaOrSemicolonOrASI(node.kind)) { + const lastToken = node.getLastToken(sourceFile); + if ((lastToken == null ? void 0 : lastToken.kind) === 27 /* SemicolonToken */) { + withSemicolon++; + } else if (lastToken && lastToken.kind !== 28 /* CommaToken */) { + const lastTokenLine = getLineAndCharacterOfPosition(sourceFile, lastToken.getStart(sourceFile)).line; + const nextTokenLine = getLineAndCharacterOfPosition(sourceFile, getSpanOfTokenAtPosition(sourceFile, lastToken.end).start).line; + if (lastTokenLine !== nextTokenLine) { + withoutSemicolon++; + } + } + } + if (withSemicolon + withoutSemicolon >= nStatementsToObserve) { + return true; + } + return forEachChild(node, visit); + }); + if (withSemicolon === 0 && withoutSemicolon <= 1) { + return true; + } + return withSemicolon / withoutSemicolon > 1 / nStatementsToObserve; +} +function tryGetDirectories(host, directoryName) { + return tryIOAndConsumeErrors(host, host.getDirectories, directoryName) || []; +} +function tryReadDirectory(host, path, extensions, exclude, include) { + return tryIOAndConsumeErrors(host, host.readDirectory, path, extensions, exclude, include) || emptyArray; +} +function tryFileExists(host, path) { + return tryIOAndConsumeErrors(host, host.fileExists, path); +} +function tryDirectoryExists(host, path) { + return tryAndIgnoreErrors(() => directoryProbablyExists(path, host)) || false; +} +function tryAndIgnoreErrors(cb) { + try { + return cb(); + } catch { + return void 0; + } +} +function tryIOAndConsumeErrors(host, toApply, ...args) { + return tryAndIgnoreErrors(() => toApply && toApply.apply(host, args)); +} +function findPackageJsons(startDirectory, host) { + const paths = []; + forEachAncestorDirectoryStoppingAtGlobalCache( + host, + startDirectory, + (ancestor) => { + const currentConfigPath = combinePaths(ancestor, "package.json"); + if (tryFileExists(host, currentConfigPath)) { + paths.push(currentConfigPath); + } + } + ); + return paths; +} +function findPackageJson(directory, host) { + let packageJson; + forEachAncestorDirectoryStoppingAtGlobalCache( + host, + directory, + (ancestor) => { + if (ancestor === "node_modules") return true; + packageJson = findConfigFile(ancestor, (f) => tryFileExists(host, f), "package.json"); + if (packageJson) { + return true; + } + } + ); + return packageJson; +} +function getPackageJsonsVisibleToFile(fileName, host) { + if (!host.fileExists) { + return []; + } + const packageJsons = []; + forEachAncestorDirectoryStoppingAtGlobalCache( + host, + getDirectoryPath(fileName), + (ancestor) => { + const packageJsonFileName = combinePaths(ancestor, "package.json"); + if (host.fileExists(packageJsonFileName)) { + const info = createPackageJsonInfo(packageJsonFileName, host); + if (info) { + packageJsons.push(info); + } + } + } + ); + return packageJsons; +} +function createPackageJsonInfo(fileName, host) { + if (!host.readFile) { + return void 0; + } + const dependencyKeys = ["dependencies", "devDependencies", "optionalDependencies", "peerDependencies"]; + const stringContent = host.readFile(fileName) || ""; + const content = tryParseJson(stringContent); + const info = {}; + if (content) { + for (const key of dependencyKeys) { + const dependencies = content[key]; + if (!dependencies) { + continue; + } + const dependencyMap = /* @__PURE__ */ new Map(); + for (const packageName in dependencies) { + dependencyMap.set(packageName, dependencies[packageName]); + } + info[key] = dependencyMap; + } + } + const dependencyGroups = [ + [1 /* Dependencies */, info.dependencies], + [2 /* DevDependencies */, info.devDependencies], + [8 /* OptionalDependencies */, info.optionalDependencies], + [4 /* PeerDependencies */, info.peerDependencies] + ]; + return { + ...info, + parseable: !!content, + fileName, + get, + has(dependencyName, inGroups) { + return !!get(dependencyName, inGroups); + } + }; + function get(dependencyName, inGroups = 15 /* All */) { + for (const [group2, deps] of dependencyGroups) { + if (deps && inGroups & group2) { + const dep = deps.get(dependencyName); + if (dep !== void 0) { + return dep; + } + } + } + } +} +function createPackageJsonImportFilter(fromFile, preferences, host) { + const packageJsons = (host.getPackageJsonsVisibleToFile && host.getPackageJsonsVisibleToFile(fromFile.fileName) || getPackageJsonsVisibleToFile(fromFile.fileName, host)).filter((p) => p.parseable); + let usesNodeCoreModules; + let ambientModuleCache; + let sourceFileCache; + return { + allowsImportingAmbientModule, + getSourceFileInfo, + allowsImportingSpecifier + }; + function moduleSpecifierIsCoveredByPackageJson(specifier) { + const packageName = getNodeModuleRootSpecifier(specifier); + for (const packageJson of packageJsons) { + if (packageJson.has(packageName) || packageJson.has(getTypesPackageName(packageName))) { + return true; + } + } + return false; + } + function allowsImportingAmbientModule(moduleSymbol, moduleSpecifierResolutionHost) { + if (!packageJsons.length || !moduleSymbol.valueDeclaration) { + return true; + } + if (!ambientModuleCache) { + ambientModuleCache = /* @__PURE__ */ new Map(); + } else { + const cached = ambientModuleCache.get(moduleSymbol); + if (cached !== void 0) { + return cached; + } + } + const declaredModuleSpecifier = stripQuotes(moduleSymbol.getName()); + if (isAllowedCoreNodeModulesImport(declaredModuleSpecifier)) { + ambientModuleCache.set(moduleSymbol, true); + return true; + } + const declaringSourceFile = moduleSymbol.valueDeclaration.getSourceFile(); + const declaringNodeModuleName = getNodeModulesPackageNameFromFileName(declaringSourceFile.fileName, moduleSpecifierResolutionHost); + if (typeof declaringNodeModuleName === "undefined") { + ambientModuleCache.set(moduleSymbol, true); + return true; + } + const result = moduleSpecifierIsCoveredByPackageJson(declaringNodeModuleName) || moduleSpecifierIsCoveredByPackageJson(declaredModuleSpecifier); + ambientModuleCache.set(moduleSymbol, result); + return result; + } + function getSourceFileInfo(sourceFile, moduleSpecifierResolutionHost) { + if (!packageJsons.length) { + return { importable: true, packageName: void 0 }; + } + if (!sourceFileCache) { + sourceFileCache = /* @__PURE__ */ new Map(); + } else { + const cached = sourceFileCache.get(sourceFile); + if (cached !== void 0) { + return cached; + } + } + const packageName = getNodeModulesPackageNameFromFileName(sourceFile.fileName, moduleSpecifierResolutionHost); + if (!packageName) { + const result2 = { importable: true, packageName }; + sourceFileCache.set(sourceFile, result2); + return result2; + } + const importable = moduleSpecifierIsCoveredByPackageJson(packageName); + const result = { importable, packageName }; + sourceFileCache.set(sourceFile, result); + return result; + } + function allowsImportingSpecifier(moduleSpecifier) { + if (!packageJsons.length || isAllowedCoreNodeModulesImport(moduleSpecifier)) { + return true; + } + if (pathIsRelative(moduleSpecifier) || isRootedDiskPath(moduleSpecifier)) { + return true; + } + return moduleSpecifierIsCoveredByPackageJson(moduleSpecifier); + } + function isAllowedCoreNodeModulesImport(moduleSpecifier) { + if (isFullSourceFile(fromFile) && isSourceFileJS(fromFile) && nodeCoreModules.has(moduleSpecifier)) { + if (usesNodeCoreModules === void 0) { + usesNodeCoreModules = consumesNodeCoreModules(fromFile); + } + if (usesNodeCoreModules) { + return true; + } + } + return false; + } + function getNodeModulesPackageNameFromFileName(importedFileName, moduleSpecifierResolutionHost) { + if (!importedFileName.includes("node_modules")) { + return void 0; + } + const specifier = ts_moduleSpecifiers_exports.getNodeModulesPackageName( + host.getCompilationSettings(), + fromFile, + importedFileName, + moduleSpecifierResolutionHost, + preferences + ); + if (!specifier) { + return void 0; + } + if (!pathIsRelative(specifier) && !isRootedDiskPath(specifier)) { + return getNodeModuleRootSpecifier(specifier); + } + } + function getNodeModuleRootSpecifier(fullSpecifier) { + const components = getPathComponents(getPackageNameFromTypesPackageName(fullSpecifier)).slice(1); + if (startsWith(components[0], "@")) { + return `${components[0]}/${components[1]}`; + } + return components[0]; + } +} +function consumesNodeCoreModules(sourceFile) { + return some(sourceFile.imports, ({ text }) => nodeCoreModules.has(text)); +} +function isInsideNodeModules(fileOrDirectory) { + return contains(getPathComponents(fileOrDirectory), "node_modules"); +} +function isDiagnosticWithLocation(diagnostic) { + return diagnostic.file !== void 0 && diagnostic.start !== void 0 && diagnostic.length !== void 0; +} +function findDiagnosticForNode(node, sortedFileDiagnostics) { + const span = createTextSpanFromNode(node); + const index = binarySearchKey(sortedFileDiagnostics, span, identity, compareTextSpans); + if (index >= 0) { + const diagnostic = sortedFileDiagnostics[index]; + Debug.assertEqual(diagnostic.file, node.getSourceFile(), "Diagnostics proided to 'findDiagnosticForNode' must be from a single SourceFile"); + return cast(diagnostic, isDiagnosticWithLocation); + } +} +function getDiagnosticsWithinSpan(span, sortedFileDiagnostics) { + var _a; + let index = binarySearchKey(sortedFileDiagnostics, span.start, (diag2) => diag2.start, compareValues); + if (index < 0) { + index = ~index; + } + while (((_a = sortedFileDiagnostics[index - 1]) == null ? void 0 : _a.start) === span.start) { + index--; + } + const result = []; + const end = textSpanEnd(span); + while (true) { + const diagnostic = tryCast(sortedFileDiagnostics[index], isDiagnosticWithLocation); + if (!diagnostic || diagnostic.start > end) { + break; + } + if (textSpanContainsTextSpan(span, diagnostic)) { + result.push(diagnostic); + } + index++; + } + return result; +} +function getRefactorContextSpan({ startPosition, endPosition }) { + return createTextSpanFromBounds(startPosition, endPosition === void 0 ? startPosition : endPosition); +} +function getFixableErrorSpanExpression(sourceFile, span) { + const token = getTokenAtPosition(sourceFile, span.start); + const expression = findAncestor(token, (node) => { + if (node.getStart(sourceFile) < span.start || node.getEnd() > textSpanEnd(span)) { + return "quit"; + } + return isExpression(node) && textSpansEqual(span, createTextSpanFromNode(node, sourceFile)); + }); + return expression; +} +function mapOneOrMany(valueOrArray, f, resultSelector = identity) { + return valueOrArray ? isArray(valueOrArray) ? resultSelector(map(valueOrArray, f)) : f(valueOrArray, 0) : void 0; +} +function firstOrOnly(valueOrArray) { + return isArray(valueOrArray) ? first(valueOrArray) : valueOrArray; +} +function getNameForExportedSymbol(symbol, scriptTarget, preferCapitalized) { + if (symbol.escapedName === "export=" /* ExportEquals */ || symbol.escapedName === "default" /* Default */) { + return getDefaultLikeExportNameFromDeclaration(symbol) || moduleSymbolToValidIdentifier(getSymbolParentOrFail(symbol), scriptTarget, !!preferCapitalized); + } + return symbol.name; +} +function getDefaultLikeExportNameFromDeclaration(symbol) { + return firstDefined(symbol.declarations, (d) => { + var _a, _b, _c; + if (isExportAssignment(d)) { + return (_a = tryCast(skipOuterExpressions(d.expression), isIdentifier)) == null ? void 0 : _a.text; + } + if (isExportSpecifier(d) && d.symbol.flags === 2097152 /* Alias */) { + return (_b = tryCast(d.propertyName, isIdentifier)) == null ? void 0 : _b.text; + } + const name = (_c = tryCast(getNameOfDeclaration(d), isIdentifier)) == null ? void 0 : _c.text; + if (name) { + return name; + } + if (symbol.parent && !isExternalModuleSymbol(symbol.parent)) { + return symbol.parent.getName(); + } + }); +} +function getSymbolParentOrFail(symbol) { + var _a; + return Debug.checkDefined( + symbol.parent, + `Symbol parent was undefined. Flags: ${Debug.formatSymbolFlags(symbol.flags)}. Declarations: ${(_a = symbol.declarations) == null ? void 0 : _a.map((d) => { + const kind = Debug.formatSyntaxKind(d.kind); + const inJS = isInJSFile(d); + const { expression } = d; + return (inJS ? "[JS]" : "") + kind + (expression ? ` (expression: ${Debug.formatSyntaxKind(expression.kind)})` : ""); + }).join(", ")}.` + ); +} +function moduleSymbolToValidIdentifier(moduleSymbol, target, forceCapitalize) { + return moduleSpecifierToValidIdentifier(removeFileExtension(stripQuotes(moduleSymbol.name)), target, forceCapitalize); +} +function moduleSpecifierToValidIdentifier(moduleSpecifier, target, forceCapitalize) { + const baseName = getBaseFileName(removeSuffix(removeFileExtension(moduleSpecifier), "/index")); + let res = ""; + let lastCharWasValid = true; + const firstCharCode = baseName.charCodeAt(0); + if (isIdentifierStart(firstCharCode, target)) { + res += String.fromCharCode(firstCharCode); + if (forceCapitalize) { + res = res.toUpperCase(); + } + } else { + lastCharWasValid = false; + } + for (let i = 1; i < baseName.length; i++) { + const ch = baseName.charCodeAt(i); + const isValid = isIdentifierPart(ch, target); + if (isValid) { + let char = String.fromCharCode(ch); + if (!lastCharWasValid) { + char = char.toUpperCase(); + } + res += char; + } + lastCharWasValid = isValid; + } + return !isStringANonContextualKeyword(res) ? res || "_" : `_${res}`; +} +function stringContainsAt(haystack, needle, startIndex) { + const needleLength = needle.length; + if (needleLength + startIndex > haystack.length) { + return false; + } + for (let i = 0; i < needleLength; i++) { + if (needle.charCodeAt(i) !== haystack.charCodeAt(i + startIndex)) return false; + } + return true; +} +function startsWithUnderscore(name) { + return name.charCodeAt(0) === 95 /* _ */; +} +function isDeprecatedDeclaration(decl) { + return !!(getCombinedNodeFlagsAlwaysIncludeJSDoc(decl) & 65536 /* Deprecated */); +} +function shouldUseUriStyleNodeCoreModules(file, program) { + let decisionFromFile; + for (const node of file.imports) { + if (nodeCoreModules.has(node.text) && !exclusivelyPrefixedNodeCoreModules.has(node.text)) { + if (startsWith(node.text, "node:")) { + return true; + } else { + decisionFromFile = false; + } + } + } + return decisionFromFile ?? program.usesUriStyleNodeCoreModules; +} +function getNewLineKind(newLineCharacter) { + return newLineCharacter === "\n" ? 1 /* LineFeed */ : 0 /* CarriageReturnLineFeed */; +} +function diagnosticToString(diag2) { + return isArray(diag2) ? formatStringFromArgs(getLocaleSpecificMessage(diag2[0]), diag2.slice(1)) : getLocaleSpecificMessage(diag2); +} +function getFormatCodeSettingsForWriting({ options }, sourceFile) { + const shouldAutoDetectSemicolonPreference = !options.semicolons || options.semicolons === "ignore" /* Ignore */; + const shouldRemoveSemicolons = options.semicolons === "remove" /* Remove */ || shouldAutoDetectSemicolonPreference && !probablyUsesSemicolons(sourceFile); + return { + ...options, + semicolons: shouldRemoveSemicolons ? "remove" /* Remove */ : "ignore" /* Ignore */ + }; +} +function jsxModeNeedsExplicitImport(jsx) { + return jsx === 2 /* React */ || jsx === 3 /* ReactNative */; +} +function isSourceFileFromLibrary(program, node) { + return program.isSourceFileFromExternalLibrary(node) || program.isSourceFileDefaultLibrary(node); +} +function newCaseClauseTracker(checker, clauses) { + const existingStrings = /* @__PURE__ */ new Set(); + const existingNumbers = /* @__PURE__ */ new Set(); + const existingBigInts = /* @__PURE__ */ new Set(); + for (const clause of clauses) { + if (!isDefaultClause(clause)) { + const expression = skipParentheses(clause.expression); + if (isLiteralExpression(expression)) { + switch (expression.kind) { + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: + existingStrings.add(expression.text); + break; + case 9 /* NumericLiteral */: + existingNumbers.add(parseInt(expression.text)); + break; + case 10 /* BigIntLiteral */: + const parsedBigInt = parseBigInt(endsWith(expression.text, "n") ? expression.text.slice(0, -1) : expression.text); + if (parsedBigInt) { + existingBigInts.add(pseudoBigIntToString(parsedBigInt)); + } + break; + } + } else { + const symbol = checker.getSymbolAtLocation(clause.expression); + if (symbol && symbol.valueDeclaration && isEnumMember(symbol.valueDeclaration)) { + const enumValue = checker.getConstantValue(symbol.valueDeclaration); + if (enumValue !== void 0) { + addValue(enumValue); + } + } + } + } + } + return { + addValue, + hasValue + }; + function addValue(value) { + switch (typeof value) { + case "string": + existingStrings.add(value); + break; + case "number": + existingNumbers.add(value); + } + } + function hasValue(value) { + switch (typeof value) { + case "string": + return existingStrings.has(value); + case "number": + return existingNumbers.has(value); + case "object": + return existingBigInts.has(pseudoBigIntToString(value)); + } + } +} +function fileShouldUseJavaScriptRequire(file, program, host, preferRequire) { + var _a; + const fileName = typeof file === "string" ? file : file.fileName; + if (!hasJSFileExtension(fileName)) { + return false; + } + const compilerOptions = typeof file === "string" ? program.getCompilerOptions() : program.getCompilerOptionsForFile(file); + const moduleKind = getEmitModuleKind(compilerOptions); + const sourceFileLike = typeof file === "string" ? { + fileName: file, + impliedNodeFormat: getImpliedNodeFormatForFile(toPath(file, host.getCurrentDirectory(), hostGetCanonicalFileName(host)), (_a = program.getPackageJsonInfoCache) == null ? void 0 : _a.call(program), host, compilerOptions) + } : file; + const impliedNodeFormat = getImpliedNodeFormatForEmitWorker(sourceFileLike, compilerOptions); + if (impliedNodeFormat === 99 /* ESNext */) { + return false; + } + if (impliedNodeFormat === 1 /* CommonJS */) { + return true; + } + if (compilerOptions.verbatimModuleSyntax && moduleKind === 1 /* CommonJS */) { + return true; + } + if (compilerOptions.verbatimModuleSyntax && emitModuleKindIsNonNodeESM(moduleKind)) { + return false; + } + if (typeof file === "object") { + if (file.commonJsModuleIndicator) { + return true; + } + if (file.externalModuleIndicator) { + return false; + } + } + return preferRequire; +} +function isBlockLike(node) { + switch (node.kind) { + case 242 /* Block */: + case 308 /* SourceFile */: + case 269 /* ModuleBlock */: + case 297 /* CaseClause */: + return true; + default: + return false; + } +} +function createFutureSourceFile(fileName, syntaxModuleIndicator, program, moduleResolutionHost) { + var _a; + const result = getImpliedNodeFormatForFileWorker(fileName, (_a = program.getPackageJsonInfoCache) == null ? void 0 : _a.call(program), moduleResolutionHost, program.getCompilerOptions()); + let impliedNodeFormat, packageJsonScope; + if (typeof result === "object") { + impliedNodeFormat = result.impliedNodeFormat; + packageJsonScope = result.packageJsonScope; + } + return { + path: toPath(fileName, program.getCurrentDirectory(), program.getCanonicalFileName), + fileName, + externalModuleIndicator: syntaxModuleIndicator === 99 /* ESNext */ ? true : void 0, + commonJsModuleIndicator: syntaxModuleIndicator === 1 /* CommonJS */ ? true : void 0, + impliedNodeFormat, + packageJsonScope, + statements: emptyArray, + imports: emptyArray + }; +} + +// src/services/exportInfoMap.ts +var ImportKind = /* @__PURE__ */ ((ImportKind2) => { + ImportKind2[ImportKind2["Named"] = 0] = "Named"; + ImportKind2[ImportKind2["Default"] = 1] = "Default"; + ImportKind2[ImportKind2["Namespace"] = 2] = "Namespace"; + ImportKind2[ImportKind2["CommonJS"] = 3] = "CommonJS"; + return ImportKind2; +})(ImportKind || {}); +var ExportKind = /* @__PURE__ */ ((ExportKind3) => { + ExportKind3[ExportKind3["Named"] = 0] = "Named"; + ExportKind3[ExportKind3["Default"] = 1] = "Default"; + ExportKind3[ExportKind3["ExportEquals"] = 2] = "ExportEquals"; + ExportKind3[ExportKind3["UMD"] = 3] = "UMD"; + ExportKind3[ExportKind3["Module"] = 4] = "Module"; + return ExportKind3; +})(ExportKind || {}); +function createCacheableExportInfoMap(host) { + let exportInfoId = 1; + const exportInfo = createMultiMap(); + const symbols = /* @__PURE__ */ new Map(); + const packages = /* @__PURE__ */ new Map(); + let usableByFileName; + const cache = { + isUsableByFile: (importingFile) => importingFile === usableByFileName, + isEmpty: () => !exportInfo.size, + clear: () => { + exportInfo.clear(); + symbols.clear(); + usableByFileName = void 0; + }, + add: (importingFile, symbol, symbolTableKey, moduleSymbol, moduleFile, exportKind, isFromPackageJson, checker) => { + if (importingFile !== usableByFileName) { + cache.clear(); + usableByFileName = importingFile; + } + let packageName; + if (moduleFile) { + const nodeModulesPathParts = getNodeModulePathParts(moduleFile.fileName); + if (nodeModulesPathParts) { + const { topLevelNodeModulesIndex, topLevelPackageNameIndex, packageRootIndex } = nodeModulesPathParts; + packageName = unmangleScopedPackageName(getPackageNameFromTypesPackageName(moduleFile.fileName.substring(topLevelPackageNameIndex + 1, packageRootIndex))); + if (startsWith(importingFile, moduleFile.path.substring(0, topLevelNodeModulesIndex))) { + const prevDeepestNodeModulesPath = packages.get(packageName); + const nodeModulesPath = moduleFile.fileName.substring(0, topLevelPackageNameIndex + 1); + if (prevDeepestNodeModulesPath) { + const prevDeepestNodeModulesIndex = prevDeepestNodeModulesPath.indexOf(nodeModulesPathPart); + if (topLevelNodeModulesIndex > prevDeepestNodeModulesIndex) { + packages.set(packageName, nodeModulesPath); + } + } else { + packages.set(packageName, nodeModulesPath); + } + } + } + } + const isDefault = exportKind === 1 /* Default */; + const namedSymbol = isDefault && getLocalSymbolForExportDefault(symbol) || symbol; + const names = exportKind === 0 /* Named */ || isExternalModuleSymbol(namedSymbol) ? unescapeLeadingUnderscores(symbolTableKey) : getNamesForExportedSymbol( + namedSymbol, + checker, + /*scriptTarget*/ + void 0 + ); + const symbolName2 = typeof names === "string" ? names : names[0]; + const capitalizedSymbolName = typeof names === "string" ? void 0 : names[1]; + const moduleName = stripQuotes(moduleSymbol.name); + const id = exportInfoId++; + const target = skipAlias(symbol, checker); + const storedSymbol = symbol.flags & 33554432 /* Transient */ ? void 0 : symbol; + const storedModuleSymbol = moduleSymbol.flags & 33554432 /* Transient */ ? void 0 : moduleSymbol; + if (!storedSymbol || !storedModuleSymbol) symbols.set(id, [symbol, moduleSymbol]); + exportInfo.add(key(symbolName2, symbol, isExternalModuleNameRelative(moduleName) ? void 0 : moduleName, checker), { + id, + symbolTableKey, + symbolName: symbolName2, + capitalizedSymbolName, + moduleName, + moduleFile, + moduleFileName: moduleFile == null ? void 0 : moduleFile.fileName, + packageName, + exportKind, + targetFlags: target.flags, + isFromPackageJson, + symbol: storedSymbol, + moduleSymbol: storedModuleSymbol + }); + }, + get: (importingFile, key2) => { + if (importingFile !== usableByFileName) return; + const result = exportInfo.get(key2); + return result == null ? void 0 : result.map(rehydrateCachedInfo); + }, + search: (importingFile, preferCapitalized, matches, action) => { + if (importingFile !== usableByFileName) return; + return forEachEntry(exportInfo, (info, key2) => { + const { symbolName: symbolName2, ambientModuleName } = parseKey(key2); + const name = preferCapitalized && info[0].capitalizedSymbolName || symbolName2; + if (matches(name, info[0].targetFlags)) { + const rehydrated = info.map(rehydrateCachedInfo); + const filtered = rehydrated.filter((r, i) => isNotShadowedByDeeperNodeModulesPackage(r, info[i].packageName)); + if (filtered.length) { + const res = action(filtered, name, !!ambientModuleName, key2); + if (res !== void 0) return res; + } + } + }); + }, + releaseSymbols: () => { + symbols.clear(); + }, + onFileChanged: (oldSourceFile, newSourceFile, typeAcquisitionEnabled) => { + if (fileIsGlobalOnly(oldSourceFile) && fileIsGlobalOnly(newSourceFile)) { + return false; + } + if (usableByFileName && usableByFileName !== newSourceFile.path || // If ATA is enabled, auto-imports uses existing imports to guess whether you want auto-imports from node. + // Adding or removing imports from node could change the outcome of that guess, so could change the suggestions list. + typeAcquisitionEnabled && consumesNodeCoreModules(oldSourceFile) !== consumesNodeCoreModules(newSourceFile) || // Module agumentation and ambient module changes can add or remove exports available to be auto-imported. + // Changes elsewhere in the file can change the *type* of an export in a module augmentation, + // but type info is gathered in getCompletionEntryDetails, which doesn't use the cache. + !arrayIsEqualTo(oldSourceFile.moduleAugmentations, newSourceFile.moduleAugmentations) || !ambientModuleDeclarationsAreEqual(oldSourceFile, newSourceFile)) { + cache.clear(); + return true; + } + usableByFileName = newSourceFile.path; + return false; + } + }; + if (Debug.isDebugging) { + Object.defineProperty(cache, "__cache", { value: exportInfo }); + } + return cache; + function rehydrateCachedInfo(info) { + if (info.symbol && info.moduleSymbol) return info; + const { id, exportKind, targetFlags, isFromPackageJson, moduleFileName } = info; + const [cachedSymbol, cachedModuleSymbol] = symbols.get(id) || emptyArray; + if (cachedSymbol && cachedModuleSymbol) { + return { + symbol: cachedSymbol, + moduleSymbol: cachedModuleSymbol, + moduleFileName, + exportKind, + targetFlags, + isFromPackageJson + }; + } + const checker = (isFromPackageJson ? host.getPackageJsonAutoImportProvider() : host.getCurrentProgram()).getTypeChecker(); + const moduleSymbol = info.moduleSymbol || cachedModuleSymbol || Debug.checkDefined( + info.moduleFile ? checker.getMergedSymbol(info.moduleFile.symbol) : checker.tryFindAmbientModule(info.moduleName) + ); + const symbol = info.symbol || cachedSymbol || Debug.checkDefined( + exportKind === 2 /* ExportEquals */ ? checker.resolveExternalModuleSymbol(moduleSymbol) : checker.tryGetMemberInModuleExportsAndProperties(unescapeLeadingUnderscores(info.symbolTableKey), moduleSymbol), + `Could not find symbol '${info.symbolName}' by key '${info.symbolTableKey}' in module ${moduleSymbol.name}` + ); + symbols.set(id, [symbol, moduleSymbol]); + return { + symbol, + moduleSymbol, + moduleFileName, + exportKind, + targetFlags, + isFromPackageJson + }; + } + function key(importedName, symbol, ambientModuleName, checker) { + const moduleKey = ambientModuleName || ""; + return `${importedName.length} ${getSymbolId(skipAlias(symbol, checker))} ${importedName} ${moduleKey}`; + } + function parseKey(key2) { + const firstSpace = key2.indexOf(" "); + const secondSpace = key2.indexOf(" ", firstSpace + 1); + const symbolNameLength = parseInt(key2.substring(0, firstSpace), 10); + const data = key2.substring(secondSpace + 1); + const symbolName2 = data.substring(0, symbolNameLength); + const moduleKey = data.substring(symbolNameLength + 1); + const ambientModuleName = moduleKey === "" ? void 0 : moduleKey; + return { symbolName: symbolName2, ambientModuleName }; + } + function fileIsGlobalOnly(file) { + return !file.commonJsModuleIndicator && !file.externalModuleIndicator && !file.moduleAugmentations && !file.ambientModuleNames; + } + function ambientModuleDeclarationsAreEqual(oldSourceFile, newSourceFile) { + if (!arrayIsEqualTo(oldSourceFile.ambientModuleNames, newSourceFile.ambientModuleNames)) { + return false; + } + let oldFileStatementIndex = -1; + let newFileStatementIndex = -1; + for (const ambientModuleName of newSourceFile.ambientModuleNames) { + const isMatchingModuleDeclaration = (node) => isNonGlobalAmbientModule(node) && node.name.text === ambientModuleName; + oldFileStatementIndex = findIndex(oldSourceFile.statements, isMatchingModuleDeclaration, oldFileStatementIndex + 1); + newFileStatementIndex = findIndex(newSourceFile.statements, isMatchingModuleDeclaration, newFileStatementIndex + 1); + if (oldSourceFile.statements[oldFileStatementIndex] !== newSourceFile.statements[newFileStatementIndex]) { + return false; + } + } + return true; + } + function isNotShadowedByDeeperNodeModulesPackage(info, packageName) { + if (!packageName || !info.moduleFileName) return true; + const typingsCacheLocation = host.getGlobalTypingsCacheLocation(); + if (typingsCacheLocation && startsWith(info.moduleFileName, typingsCacheLocation)) return true; + const packageDeepestNodeModulesPath = packages.get(packageName); + return !packageDeepestNodeModulesPath || startsWith(info.moduleFileName, packageDeepestNodeModulesPath); + } +} +function isImportable(program, fromFile, toFile, toModule, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache) { + var _a; + if (!toFile) { + let useNodePrefix; + const moduleName = stripQuotes(toModule.name); + if (nodeCoreModules.has(moduleName) && (useNodePrefix = shouldUseUriStyleNodeCoreModules(fromFile, program)) !== void 0) { + return useNodePrefix === startsWith(moduleName, "node:"); + } + return !packageJsonFilter || packageJsonFilter.allowsImportingAmbientModule(toModule, moduleSpecifierResolutionHost) || fileContainsPackageImport(fromFile, moduleName); + } + Debug.assertIsDefined(toFile); + if (fromFile === toFile) return false; + const cachedResult = moduleSpecifierCache == null ? void 0 : moduleSpecifierCache.get(fromFile.path, toFile.path, preferences, {}); + if ((cachedResult == null ? void 0 : cachedResult.isBlockedByPackageJsonDependencies) !== void 0) { + return !cachedResult.isBlockedByPackageJsonDependencies || !!cachedResult.packageName && fileContainsPackageImport(fromFile, cachedResult.packageName); + } + const getCanonicalFileName = hostGetCanonicalFileName(moduleSpecifierResolutionHost); + const globalTypingsCache = (_a = moduleSpecifierResolutionHost.getGlobalTypingsCacheLocation) == null ? void 0 : _a.call(moduleSpecifierResolutionHost); + const hasImportablePath = !!ts_moduleSpecifiers_exports.forEachFileNameOfModule( + fromFile.fileName, + toFile.fileName, + moduleSpecifierResolutionHost, + /*preferSymlinks*/ + false, + (toPath3) => { + const file = program.getSourceFile(toPath3); + return (file === toFile || !file) && isImportablePath( + fromFile.fileName, + toPath3, + getCanonicalFileName, + globalTypingsCache, + moduleSpecifierResolutionHost + ); + } + ); + if (packageJsonFilter) { + const importInfo = hasImportablePath ? packageJsonFilter.getSourceFileInfo(toFile, moduleSpecifierResolutionHost) : void 0; + moduleSpecifierCache == null ? void 0 : moduleSpecifierCache.setBlockedByPackageJsonDependencies(fromFile.path, toFile.path, preferences, {}, importInfo == null ? void 0 : importInfo.packageName, !(importInfo == null ? void 0 : importInfo.importable)); + return !!(importInfo == null ? void 0 : importInfo.importable) || hasImportablePath && !!(importInfo == null ? void 0 : importInfo.packageName) && fileContainsPackageImport(fromFile, importInfo.packageName); + } + return hasImportablePath; +} +function fileContainsPackageImport(sourceFile, packageName) { + return sourceFile.imports && sourceFile.imports.some((i) => i.text === packageName || i.text.startsWith(packageName + "/")); +} +function isImportablePath(fromPath, toPath3, getCanonicalFileName, globalCachePath, host) { + const toNodeModules = forEachAncestorDirectoryStoppingAtGlobalCache( + host, + toPath3, + (ancestor) => getBaseFileName(ancestor) === "node_modules" ? ancestor : void 0 + ); + const toNodeModulesParent = toNodeModules && getDirectoryPath(getCanonicalFileName(toNodeModules)); + return toNodeModulesParent === void 0 || startsWith(getCanonicalFileName(fromPath), toNodeModulesParent) || !!globalCachePath && startsWith(getCanonicalFileName(globalCachePath), toNodeModulesParent); +} +function forEachExternalModuleToImportFrom(program, host, preferences, useAutoImportProvider, cb) { + var _a, _b; + const useCaseSensitiveFileNames2 = hostUsesCaseSensitiveFileNames(host); + const excludePatterns = preferences.autoImportFileExcludePatterns && getIsExcludedPatterns(preferences, useCaseSensitiveFileNames2); + forEachExternalModule(program.getTypeChecker(), program.getSourceFiles(), excludePatterns, host, (module2, file) => cb( + module2, + file, + program, + /*isFromPackageJson*/ + false + )); + const autoImportProvider = useAutoImportProvider && ((_a = host.getPackageJsonAutoImportProvider) == null ? void 0 : _a.call(host)); + if (autoImportProvider) { + const start = timestamp(); + const checker = program.getTypeChecker(); + forEachExternalModule(autoImportProvider.getTypeChecker(), autoImportProvider.getSourceFiles(), excludePatterns, host, (module2, file) => { + if (file && !program.getSourceFile(file.fileName) || !file && !checker.resolveName( + module2.name, + /*location*/ + void 0, + 1536 /* Module */, + /*excludeGlobals*/ + false + )) { + cb( + module2, + file, + autoImportProvider, + /*isFromPackageJson*/ + true + ); + } + }); + (_b = host.log) == null ? void 0 : _b.call(host, `forEachExternalModuleToImportFrom autoImportProvider: ${timestamp() - start}`); + } +} +function getIsExcludedPatterns(preferences, useCaseSensitiveFileNames2) { + return mapDefined(preferences.autoImportFileExcludePatterns, (spec) => { + const pattern = getSubPatternFromSpec(spec, "", "exclude"); + return pattern ? getRegexFromPattern(pattern, useCaseSensitiveFileNames2) : void 0; + }); +} +function forEachExternalModule(checker, allSourceFiles, excludePatterns, host, cb) { + var _a; + const isExcluded = excludePatterns && getIsExcluded(excludePatterns, host); + for (const ambient of checker.getAmbientModules()) { + if (!ambient.name.includes("*") && !(excludePatterns && ((_a = ambient.declarations) == null ? void 0 : _a.every((d) => isExcluded(d.getSourceFile()))))) { + cb( + ambient, + /*sourceFile*/ + void 0 + ); + } + } + for (const sourceFile of allSourceFiles) { + if (isExternalOrCommonJsModule(sourceFile) && !(isExcluded == null ? void 0 : isExcluded(sourceFile))) { + cb(checker.getMergedSymbol(sourceFile.symbol), sourceFile); + } + } +} +function getIsExcluded(excludePatterns, host) { + var _a; + const realpathsWithSymlinks = (_a = host.getSymlinkCache) == null ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath(); + return ({ fileName, path }) => { + if (excludePatterns.some((p) => p.test(fileName))) return true; + if ((realpathsWithSymlinks == null ? void 0 : realpathsWithSymlinks.size) && pathContainsNodeModules(fileName)) { + let dir = getDirectoryPath(fileName); + return forEachAncestorDirectoryStoppingAtGlobalCache( + host, + getDirectoryPath(path), + (dirPath) => { + const symlinks = realpathsWithSymlinks.get(ensureTrailingDirectorySeparator(dirPath)); + if (symlinks) { + return symlinks.some((s) => excludePatterns.some((p) => p.test(fileName.replace(dir, s)))); + } + dir = getDirectoryPath(dir); + } + ) ?? false; + } + return false; + }; +} +function getIsFileExcluded(host, preferences) { + if (!preferences.autoImportFileExcludePatterns) return () => false; + return getIsExcluded(getIsExcludedPatterns(preferences, hostUsesCaseSensitiveFileNames(host)), host); +} +function getExportInfoMap(importingFile, host, program, preferences, cancellationToken) { + var _a, _b, _c, _d, _e; + const start = timestamp(); + (_a = host.getPackageJsonAutoImportProvider) == null ? void 0 : _a.call(host); + const cache = ((_b = host.getCachedExportInfoMap) == null ? void 0 : _b.call(host)) || createCacheableExportInfoMap({ + getCurrentProgram: () => program, + getPackageJsonAutoImportProvider: () => { + var _a2; + return (_a2 = host.getPackageJsonAutoImportProvider) == null ? void 0 : _a2.call(host); + }, + getGlobalTypingsCacheLocation: () => { + var _a2; + return (_a2 = host.getGlobalTypingsCacheLocation) == null ? void 0 : _a2.call(host); + } + }); + if (cache.isUsableByFile(importingFile.path)) { + (_c = host.log) == null ? void 0 : _c.call(host, "getExportInfoMap: cache hit"); + return cache; + } + (_d = host.log) == null ? void 0 : _d.call(host, "getExportInfoMap: cache miss or empty; calculating new results"); + let moduleCount = 0; + try { + forEachExternalModuleToImportFrom( + program, + host, + preferences, + /*useAutoImportProvider*/ + true, + (moduleSymbol, moduleFile, program2, isFromPackageJson) => { + if (++moduleCount % 100 === 0) cancellationToken == null ? void 0 : cancellationToken.throwIfCancellationRequested(); + const seenExports = /* @__PURE__ */ new Set(); + const checker = program2.getTypeChecker(); + const defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker); + if (defaultInfo && isImportableSymbol(defaultInfo.symbol, checker)) { + cache.add( + importingFile.path, + defaultInfo.symbol, + defaultInfo.exportKind === 1 /* Default */ ? "default" /* Default */ : "export=" /* ExportEquals */, + moduleSymbol, + moduleFile, + defaultInfo.exportKind, + isFromPackageJson, + checker + ); + } + checker.forEachExportAndPropertyOfModule(moduleSymbol, (exported, key) => { + if (exported !== (defaultInfo == null ? void 0 : defaultInfo.symbol) && isImportableSymbol(exported, checker) && addToSeen(seenExports, key)) { + cache.add( + importingFile.path, + exported, + key, + moduleSymbol, + moduleFile, + 0 /* Named */, + isFromPackageJson, + checker + ); + } + }); + } + ); + } catch (err) { + cache.clear(); + throw err; + } + (_e = host.log) == null ? void 0 : _e.call(host, `getExportInfoMap: done in ${timestamp() - start} ms`); + return cache; +} +function getDefaultLikeExportInfo(moduleSymbol, checker) { + const exportEquals = checker.resolveExternalModuleSymbol(moduleSymbol); + if (exportEquals !== moduleSymbol) { + const defaultExport2 = checker.tryGetMemberInModuleExports("default" /* Default */, exportEquals); + if (defaultExport2) return { symbol: defaultExport2, exportKind: 1 /* Default */ }; + return { symbol: exportEquals, exportKind: 2 /* ExportEquals */ }; + } + const defaultExport = checker.tryGetMemberInModuleExports("default" /* Default */, moduleSymbol); + if (defaultExport) return { symbol: defaultExport, exportKind: 1 /* Default */ }; +} +function isImportableSymbol(symbol, checker) { + return !checker.isUndefinedSymbol(symbol) && !checker.isUnknownSymbol(symbol) && !isKnownSymbol(symbol) && !isPrivateIdentifierSymbol(symbol); +} +function getNamesForExportedSymbol(defaultExport, checker, scriptTarget) { + let names; + forEachNameOfDefaultExport(defaultExport, checker, scriptTarget, (name, capitalizedName) => { + names = capitalizedName ? [name, capitalizedName] : name; + return true; + }); + return Debug.checkDefined(names); +} +function forEachNameOfDefaultExport(defaultExport, checker, scriptTarget, cb) { + let chain; + let current = defaultExport; + const seen = /* @__PURE__ */ new Set(); + while (current) { + const fromDeclaration = getDefaultLikeExportNameFromDeclaration(current); + if (fromDeclaration) { + const final = cb(fromDeclaration); + if (final) return final; + } + if (current.escapedName !== "default" /* Default */ && current.escapedName !== "export=" /* ExportEquals */) { + const final = cb(current.name); + if (final) return final; + } + chain = append(chain, current); + if (!addToSeen(seen, current)) break; + current = current.flags & 2097152 /* Alias */ ? checker.getImmediateAliasedSymbol(current) : void 0; + } + for (const symbol of chain ?? emptyArray) { + if (symbol.parent && isExternalModuleSymbol(symbol.parent)) { + const final = cb( + moduleSymbolToValidIdentifier( + symbol.parent, + scriptTarget, + /*forceCapitalize*/ + false + ), + moduleSymbolToValidIdentifier( + symbol.parent, + scriptTarget, + /*forceCapitalize*/ + true + ) + ); + if (final) return final; + } + } +} + +// src/services/classifier.ts +function createClassifier() { + const scanner2 = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + false + ); + function getClassificationsForLine(text, lexState, syntacticClassifierAbsent) { + return convertClassificationsToResult(getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent), text); + } + function getEncodedLexicalClassifications(text, lexState, syntacticClassifierAbsent) { + let token = 0 /* Unknown */; + let lastNonTriviaToken = 0 /* Unknown */; + const templateStack = []; + const { prefix, pushTemplate } = getPrefixFromLexState(lexState); + text = prefix + text; + const offset = prefix.length; + if (pushTemplate) { + templateStack.push(16 /* TemplateHead */); + } + scanner2.setText(text); + let endOfLineState = 0 /* None */; + const spans = []; + let angleBracketStack = 0; + do { + token = scanner2.scan(); + if (!isTrivia(token)) { + handleToken(); + lastNonTriviaToken = token; + } + const end = scanner2.getTokenEnd(); + pushEncodedClassification(scanner2.getTokenStart(), end, offset, classFromKind(token), spans); + if (end >= text.length) { + const end2 = getNewEndOfLineState(scanner2, token, lastOrUndefined(templateStack)); + if (end2 !== void 0) { + endOfLineState = end2; + } + } + } while (token !== 1 /* EndOfFileToken */); + function handleToken() { + switch (token) { + case 44 /* SlashToken */: + case 69 /* SlashEqualsToken */: + if (!noRegexTable[lastNonTriviaToken] && scanner2.reScanSlashToken() === 14 /* RegularExpressionLiteral */) { + token = 14 /* RegularExpressionLiteral */; + } + break; + case 30 /* LessThanToken */: + if (lastNonTriviaToken === 80 /* Identifier */) { + angleBracketStack++; + } + break; + case 32 /* GreaterThanToken */: + if (angleBracketStack > 0) { + angleBracketStack--; + } + break; + case 133 /* AnyKeyword */: + case 154 /* StringKeyword */: + case 150 /* NumberKeyword */: + case 136 /* BooleanKeyword */: + case 155 /* SymbolKeyword */: + if (angleBracketStack > 0 && !syntacticClassifierAbsent) { + token = 80 /* Identifier */; + } + break; + case 16 /* TemplateHead */: + templateStack.push(token); + break; + case 19 /* OpenBraceToken */: + if (templateStack.length > 0) { + templateStack.push(token); + } + break; + case 20 /* CloseBraceToken */: + if (templateStack.length > 0) { + const lastTemplateStackToken = lastOrUndefined(templateStack); + if (lastTemplateStackToken === 16 /* TemplateHead */) { + token = scanner2.reScanTemplateToken( + /*isTaggedTemplate*/ + false + ); + if (token === 18 /* TemplateTail */) { + templateStack.pop(); + } else { + Debug.assertEqual(token, 17 /* TemplateMiddle */, "Should have been a template middle."); + } + } else { + Debug.assertEqual(lastTemplateStackToken, 19 /* OpenBraceToken */, "Should have been an open brace"); + templateStack.pop(); + } + } + break; + default: + if (!isKeyword(token)) { + break; + } + if (lastNonTriviaToken === 25 /* DotToken */) { + token = 80 /* Identifier */; + } else if (isKeyword(lastNonTriviaToken) && isKeyword(token) && !canFollow(lastNonTriviaToken, token)) { + token = 80 /* Identifier */; + } + } + } + return { endOfLineState, spans }; + } + return { getClassificationsForLine, getEncodedLexicalClassifications }; +} +var noRegexTable = arrayToNumericMap( + [ + 80 /* Identifier */, + 11 /* StringLiteral */, + 9 /* NumericLiteral */, + 10 /* BigIntLiteral */, + 14 /* RegularExpressionLiteral */, + 110 /* ThisKeyword */, + 46 /* PlusPlusToken */, + 47 /* MinusMinusToken */, + 22 /* CloseParenToken */, + 24 /* CloseBracketToken */, + 20 /* CloseBraceToken */, + 112 /* TrueKeyword */, + 97 /* FalseKeyword */ + ], + (token) => token, + () => true +); +function getNewEndOfLineState(scanner2, token, lastOnTemplateStack) { + switch (token) { + case 11 /* StringLiteral */: { + if (!scanner2.isUnterminated()) return void 0; + const tokenText = scanner2.getTokenText(); + const lastCharIndex = tokenText.length - 1; + let numBackslashes = 0; + while (tokenText.charCodeAt(lastCharIndex - numBackslashes) === 92 /* backslash */) { + numBackslashes++; + } + if ((numBackslashes & 1) === 0) return void 0; + return tokenText.charCodeAt(0) === 34 /* doubleQuote */ ? 3 /* InDoubleQuoteStringLiteral */ : 2 /* InSingleQuoteStringLiteral */; + } + case 3 /* MultiLineCommentTrivia */: + return scanner2.isUnterminated() ? 1 /* InMultiLineCommentTrivia */ : void 0; + default: + if (isTemplateLiteralKind(token)) { + if (!scanner2.isUnterminated()) { + return void 0; + } + switch (token) { + case 18 /* TemplateTail */: + return 5 /* InTemplateMiddleOrTail */; + case 15 /* NoSubstitutionTemplateLiteral */: + return 4 /* InTemplateHeadOrNoSubstitutionTemplate */; + default: + return Debug.fail("Only 'NoSubstitutionTemplateLiteral's and 'TemplateTail's can be unterminated; got SyntaxKind #" + token); + } + } + return lastOnTemplateStack === 16 /* TemplateHead */ ? 6 /* InTemplateSubstitutionPosition */ : void 0; + } +} +function pushEncodedClassification(start, end, offset, classification, result) { + if (classification === 8 /* whiteSpace */) { + return; + } + if (start === 0 && offset > 0) { + start += offset; + } + const length2 = end - start; + if (length2 > 0) { + result.push(start - offset, length2, classification); + } +} +function convertClassificationsToResult(classifications, text) { + const entries = []; + const dense = classifications.spans; + let lastEnd = 0; + for (let i = 0; i < dense.length; i += 3) { + const start = dense[i]; + const length2 = dense[i + 1]; + const type = dense[i + 2]; + if (lastEnd >= 0) { + const whitespaceLength2 = start - lastEnd; + if (whitespaceLength2 > 0) { + entries.push({ length: whitespaceLength2, classification: 4 /* Whitespace */ }); + } + } + entries.push({ length: length2, classification: convertClassification(type) }); + lastEnd = start + length2; + } + const whitespaceLength = text.length - lastEnd; + if (whitespaceLength > 0) { + entries.push({ length: whitespaceLength, classification: 4 /* Whitespace */ }); + } + return { entries, finalLexState: classifications.endOfLineState }; +} +function convertClassification(type) { + switch (type) { + case 1 /* comment */: + return 3 /* Comment */; + case 3 /* keyword */: + return 1 /* Keyword */; + case 4 /* numericLiteral */: + return 6 /* NumberLiteral */; + case 25 /* bigintLiteral */: + return 7 /* BigIntLiteral */; + case 5 /* operator */: + return 2 /* Operator */; + case 6 /* stringLiteral */: + return 8 /* StringLiteral */; + case 8 /* whiteSpace */: + return 4 /* Whitespace */; + case 10 /* punctuation */: + return 0 /* Punctuation */; + case 2 /* identifier */: + case 11 /* className */: + case 12 /* enumName */: + case 13 /* interfaceName */: + case 14 /* moduleName */: + case 15 /* typeParameterName */: + case 16 /* typeAliasName */: + case 9 /* text */: + case 17 /* parameterName */: + return 5 /* Identifier */; + default: + return void 0; + } +} +function canFollow(keyword1, keyword2) { + if (!isAccessibilityModifier(keyword1)) { + return true; + } + switch (keyword2) { + case 139 /* GetKeyword */: + case 153 /* SetKeyword */: + case 137 /* ConstructorKeyword */: + case 126 /* StaticKeyword */: + case 129 /* AccessorKeyword */: + return true; + // Allow things like "public get", "public constructor" and "public static". + default: + return false; + } +} +function getPrefixFromLexState(lexState) { + switch (lexState) { + case 3 /* InDoubleQuoteStringLiteral */: + return { prefix: '"\\\n' }; + case 2 /* InSingleQuoteStringLiteral */: + return { prefix: "'\\\n" }; + case 1 /* InMultiLineCommentTrivia */: + return { prefix: "/*\n" }; + case 4 /* InTemplateHeadOrNoSubstitutionTemplate */: + return { prefix: "`\n" }; + case 5 /* InTemplateMiddleOrTail */: + return { prefix: "}\n", pushTemplate: true }; + case 6 /* InTemplateSubstitutionPosition */: + return { prefix: "", pushTemplate: true }; + case 0 /* None */: + return { prefix: "" }; + default: + return Debug.assertNever(lexState); + } +} +function isBinaryExpressionOperatorToken(token) { + switch (token) { + case 42 /* AsteriskToken */: + case 44 /* SlashToken */: + case 45 /* PercentToken */: + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 48 /* LessThanLessThanToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 30 /* LessThanToken */: + case 32 /* GreaterThanToken */: + case 33 /* LessThanEqualsToken */: + case 34 /* GreaterThanEqualsToken */: + case 104 /* InstanceOfKeyword */: + case 103 /* InKeyword */: + case 130 /* AsKeyword */: + case 152 /* SatisfiesKeyword */: + case 35 /* EqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + case 37 /* EqualsEqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + case 51 /* AmpersandToken */: + case 53 /* CaretToken */: + case 52 /* BarToken */: + case 56 /* AmpersandAmpersandToken */: + case 57 /* BarBarToken */: + case 75 /* BarEqualsToken */: + case 74 /* AmpersandEqualsToken */: + case 79 /* CaretEqualsToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 65 /* PlusEqualsToken */: + case 66 /* MinusEqualsToken */: + case 67 /* AsteriskEqualsToken */: + case 69 /* SlashEqualsToken */: + case 70 /* PercentEqualsToken */: + case 64 /* EqualsToken */: + case 28 /* CommaToken */: + case 61 /* QuestionQuestionToken */: + case 76 /* BarBarEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + return true; + default: + return false; + } +} +function isPrefixUnaryExpressionOperatorToken(token) { + switch (token) { + case 40 /* PlusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + case 54 /* ExclamationToken */: + case 46 /* PlusPlusToken */: + case 47 /* MinusMinusToken */: + return true; + default: + return false; + } +} +function classFromKind(token) { + if (isKeyword(token)) { + return 3 /* keyword */; + } else if (isBinaryExpressionOperatorToken(token) || isPrefixUnaryExpressionOperatorToken(token)) { + return 5 /* operator */; + } else if (token >= 19 /* FirstPunctuation */ && token <= 79 /* LastPunctuation */) { + return 10 /* punctuation */; + } + switch (token) { + case 9 /* NumericLiteral */: + return 4 /* numericLiteral */; + case 10 /* BigIntLiteral */: + return 25 /* bigintLiteral */; + case 11 /* StringLiteral */: + return 6 /* stringLiteral */; + case 14 /* RegularExpressionLiteral */: + return 7 /* regularExpressionLiteral */; + case 7 /* ConflictMarkerTrivia */: + case 3 /* MultiLineCommentTrivia */: + case 2 /* SingleLineCommentTrivia */: + return 1 /* comment */; + case 5 /* WhitespaceTrivia */: + case 4 /* NewLineTrivia */: + return 8 /* whiteSpace */; + case 80 /* Identifier */: + default: + if (isTemplateLiteralKind(token)) { + return 6 /* stringLiteral */; + } + return 2 /* identifier */; + } +} +function getSemanticClassifications(typeChecker, cancellationToken, sourceFile, classifiableNames, span) { + return convertClassificationsToSpans(getEncodedSemanticClassifications(typeChecker, cancellationToken, sourceFile, classifiableNames, span)); +} +function checkForClassificationCancellation(cancellationToken, kind) { + switch (kind) { + case 268 /* ModuleDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 263 /* FunctionDeclaration */: + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + cancellationToken.throwIfCancellationRequested(); + } +} +function getEncodedSemanticClassifications(typeChecker, cancellationToken, sourceFile, classifiableNames, span) { + const spans = []; + sourceFile.forEachChild(function cb(node) { + if (!node || !textSpanIntersectsWith(span, node.pos, node.getFullWidth())) { + return; + } + checkForClassificationCancellation(cancellationToken, node.kind); + if (isIdentifier(node) && !nodeIsMissing(node) && classifiableNames.has(node.escapedText)) { + const symbol = typeChecker.getSymbolAtLocation(node); + const type = symbol && classifySymbol(symbol, getMeaningFromLocation(node), typeChecker); + if (type) { + pushClassification(node.getStart(sourceFile), node.getEnd(), type); + } + } + node.forEachChild(cb); + }); + return { spans, endOfLineState: 0 /* None */ }; + function pushClassification(start, end, type) { + const length2 = end - start; + Debug.assert(length2 > 0, `Classification had non-positive length of ${length2}`); + spans.push(start); + spans.push(length2); + spans.push(type); + } +} +function classifySymbol(symbol, meaningAtPosition, checker) { + const flags = symbol.getFlags(); + if ((flags & 2885600 /* Classifiable */) === 0 /* None */) { + return void 0; + } else if (flags & 32 /* Class */) { + return 11 /* className */; + } else if (flags & 384 /* Enum */) { + return 12 /* enumName */; + } else if (flags & 524288 /* TypeAlias */) { + return 16 /* typeAliasName */; + } else if (flags & 1536 /* Module */) { + return meaningAtPosition & 4 /* Namespace */ || meaningAtPosition & 1 /* Value */ && hasValueSideModule(symbol) ? 14 /* moduleName */ : void 0; + } else if (flags & 2097152 /* Alias */) { + return classifySymbol(checker.getAliasedSymbol(symbol), meaningAtPosition, checker); + } else if (meaningAtPosition & 2 /* Type */) { + return flags & 64 /* Interface */ ? 13 /* interfaceName */ : flags & 262144 /* TypeParameter */ ? 15 /* typeParameterName */ : void 0; + } else { + return void 0; + } +} +function hasValueSideModule(symbol) { + return some(symbol.declarations, (declaration) => isModuleDeclaration(declaration) && getModuleInstanceState(declaration) === 1 /* Instantiated */); +} +function getClassificationTypeName(type) { + switch (type) { + case 1 /* comment */: + return "comment" /* comment */; + case 2 /* identifier */: + return "identifier" /* identifier */; + case 3 /* keyword */: + return "keyword" /* keyword */; + case 4 /* numericLiteral */: + return "number" /* numericLiteral */; + case 25 /* bigintLiteral */: + return "bigint" /* bigintLiteral */; + case 5 /* operator */: + return "operator" /* operator */; + case 6 /* stringLiteral */: + return "string" /* stringLiteral */; + case 8 /* whiteSpace */: + return "whitespace" /* whiteSpace */; + case 9 /* text */: + return "text" /* text */; + case 10 /* punctuation */: + return "punctuation" /* punctuation */; + case 11 /* className */: + return "class name" /* className */; + case 12 /* enumName */: + return "enum name" /* enumName */; + case 13 /* interfaceName */: + return "interface name" /* interfaceName */; + case 14 /* moduleName */: + return "module name" /* moduleName */; + case 15 /* typeParameterName */: + return "type parameter name" /* typeParameterName */; + case 16 /* typeAliasName */: + return "type alias name" /* typeAliasName */; + case 17 /* parameterName */: + return "parameter name" /* parameterName */; + case 18 /* docCommentTagName */: + return "doc comment tag name" /* docCommentTagName */; + case 19 /* jsxOpenTagName */: + return "jsx open tag name" /* jsxOpenTagName */; + case 20 /* jsxCloseTagName */: + return "jsx close tag name" /* jsxCloseTagName */; + case 21 /* jsxSelfClosingTagName */: + return "jsx self closing tag name" /* jsxSelfClosingTagName */; + case 22 /* jsxAttribute */: + return "jsx attribute" /* jsxAttribute */; + case 23 /* jsxText */: + return "jsx text" /* jsxText */; + case 24 /* jsxAttributeStringLiteralValue */: + return "jsx attribute string literal value" /* jsxAttributeStringLiteralValue */; + default: + return void 0; + } +} +function convertClassificationsToSpans(classifications) { + Debug.assert(classifications.spans.length % 3 === 0); + const dense = classifications.spans; + const result = []; + for (let i = 0; i < dense.length; i += 3) { + result.push({ + textSpan: createTextSpan(dense[i], dense[i + 1]), + classificationType: getClassificationTypeName(dense[i + 2]) + }); + } + return result; +} +function getSyntacticClassifications(cancellationToken, sourceFile, span) { + return convertClassificationsToSpans(getEncodedSyntacticClassifications(cancellationToken, sourceFile, span)); +} +function getEncodedSyntacticClassifications(cancellationToken, sourceFile, span) { + const spanStart = span.start; + const spanLength = span.length; + const triviaScanner = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + false, + sourceFile.languageVariant, + sourceFile.text + ); + const mergeConflictScanner = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + false, + sourceFile.languageVariant, + sourceFile.text + ); + const result = []; + processElement(sourceFile); + return { spans: result, endOfLineState: 0 /* None */ }; + function pushClassification(start, length2, type) { + result.push(start); + result.push(length2); + result.push(type); + } + function classifyLeadingTriviaAndGetTokenStart(token) { + triviaScanner.resetTokenState(token.pos); + while (true) { + const start = triviaScanner.getTokenEnd(); + if (!couldStartTrivia(sourceFile.text, start)) { + return start; + } + const kind = triviaScanner.scan(); + const end = triviaScanner.getTokenEnd(); + const width = end - start; + if (!isTrivia(kind)) { + return start; + } + switch (kind) { + case 4 /* NewLineTrivia */: + case 5 /* WhitespaceTrivia */: + continue; + case 2 /* SingleLineCommentTrivia */: + case 3 /* MultiLineCommentTrivia */: + classifyComment(token, kind, start, width); + triviaScanner.resetTokenState(end); + continue; + case 7 /* ConflictMarkerTrivia */: + const text = sourceFile.text; + const ch = text.charCodeAt(start); + if (ch === 60 /* lessThan */ || ch === 62 /* greaterThan */) { + pushClassification(start, width, 1 /* comment */); + continue; + } + Debug.assert(ch === 124 /* bar */ || ch === 61 /* equals */); + classifyDisabledMergeCode(text, start, end); + break; + case 6 /* ShebangTrivia */: + break; + default: + Debug.assertNever(kind); + } + } + } + function classifyComment(token, kind, start, width) { + if (kind === 3 /* MultiLineCommentTrivia */) { + const docCommentAndDiagnostics = parseIsolatedJSDocComment(sourceFile.text, start, width); + if (docCommentAndDiagnostics && docCommentAndDiagnostics.jsDoc) { + setParent(docCommentAndDiagnostics.jsDoc, token); + classifyJSDocComment(docCommentAndDiagnostics.jsDoc); + return; + } + } else if (kind === 2 /* SingleLineCommentTrivia */) { + if (tryClassifyTripleSlashComment(start, width)) { + return; + } + } + pushCommentRange(start, width); + } + function pushCommentRange(start, width) { + pushClassification(start, width, 1 /* comment */); + } + function classifyJSDocComment(docComment) { + var _a, _b, _c, _d, _e, _f, _g, _h; + let pos = docComment.pos; + if (docComment.tags) { + for (const tag of docComment.tags) { + if (tag.pos !== pos) { + pushCommentRange(pos, tag.pos - pos); + } + pushClassification(tag.pos, 1, 10 /* punctuation */); + pushClassification(tag.tagName.pos, tag.tagName.end - tag.tagName.pos, 18 /* docCommentTagName */); + pos = tag.tagName.end; + let commentStart = tag.tagName.end; + switch (tag.kind) { + case 342 /* JSDocParameterTag */: + const param = tag; + processJSDocParameterTag(param); + commentStart = param.isNameFirst && ((_a = param.typeExpression) == null ? void 0 : _a.end) || param.name.end; + break; + case 349 /* JSDocPropertyTag */: + const prop = tag; + commentStart = prop.isNameFirst && ((_b = prop.typeExpression) == null ? void 0 : _b.end) || prop.name.end; + break; + case 346 /* JSDocTemplateTag */: + processJSDocTemplateTag(tag); + pos = tag.end; + commentStart = tag.typeParameters.end; + break; + case 347 /* JSDocTypedefTag */: + const type = tag; + commentStart = ((_c = type.typeExpression) == null ? void 0 : _c.kind) === 310 /* JSDocTypeExpression */ && ((_d = type.fullName) == null ? void 0 : _d.end) || ((_e = type.typeExpression) == null ? void 0 : _e.end) || commentStart; + break; + case 339 /* JSDocCallbackTag */: + commentStart = tag.typeExpression.end; + break; + case 345 /* JSDocTypeTag */: + processElement(tag.typeExpression); + pos = tag.end; + commentStart = tag.typeExpression.end; + break; + case 344 /* JSDocThisTag */: + case 341 /* JSDocEnumTag */: + commentStart = tag.typeExpression.end; + break; + case 343 /* JSDocReturnTag */: + processElement(tag.typeExpression); + pos = tag.end; + commentStart = ((_f = tag.typeExpression) == null ? void 0 : _f.end) || commentStart; + break; + case 348 /* JSDocSeeTag */: + commentStart = ((_g = tag.name) == null ? void 0 : _g.end) || commentStart; + break; + case 329 /* JSDocAugmentsTag */: + case 330 /* JSDocImplementsTag */: + commentStart = tag.class.end; + break; + case 350 /* JSDocThrowsTag */: + processElement(tag.typeExpression); + pos = tag.end; + commentStart = ((_h = tag.typeExpression) == null ? void 0 : _h.end) || commentStart; + break; + } + if (typeof tag.comment === "object") { + pushCommentRange(tag.comment.pos, tag.comment.end - tag.comment.pos); + } else if (typeof tag.comment === "string") { + pushCommentRange(commentStart, tag.end - commentStart); + } + } + } + if (pos !== docComment.end) { + pushCommentRange(pos, docComment.end - pos); + } + return; + function processJSDocParameterTag(tag) { + if (tag.isNameFirst) { + pushCommentRange(pos, tag.name.pos - pos); + pushClassification(tag.name.pos, tag.name.end - tag.name.pos, 17 /* parameterName */); + pos = tag.name.end; + } + if (tag.typeExpression) { + pushCommentRange(pos, tag.typeExpression.pos - pos); + processElement(tag.typeExpression); + pos = tag.typeExpression.end; + } + if (!tag.isNameFirst) { + pushCommentRange(pos, tag.name.pos - pos); + pushClassification(tag.name.pos, tag.name.end - tag.name.pos, 17 /* parameterName */); + pos = tag.name.end; + } + } + } + function tryClassifyTripleSlashComment(start, width) { + const tripleSlashXMLCommentRegEx = /^(\/\/\/\s*)(<)(?:(\S+)((?:[^/]|\/[^>])*)(\/>)?)?/m; + const attributeRegex = /(\s)(\S+)(\s*)(=)(\s*)('[^']+'|"[^"]+")/g; + const text = sourceFile.text.substr(start, width); + const match = tripleSlashXMLCommentRegEx.exec(text); + if (!match) { + return false; + } + if (!match[3] || !(match[3] in commentPragmas)) { + return false; + } + let pos = start; + pushCommentRange(pos, match[1].length); + pos += match[1].length; + pushClassification(pos, match[2].length, 10 /* punctuation */); + pos += match[2].length; + pushClassification(pos, match[3].length, 21 /* jsxSelfClosingTagName */); + pos += match[3].length; + const attrText = match[4]; + let attrPos = pos; + while (true) { + const attrMatch = attributeRegex.exec(attrText); + if (!attrMatch) { + break; + } + const newAttrPos = pos + attrMatch.index + attrMatch[1].length; + if (newAttrPos > attrPos) { + pushCommentRange(attrPos, newAttrPos - attrPos); + attrPos = newAttrPos; + } + pushClassification(attrPos, attrMatch[2].length, 22 /* jsxAttribute */); + attrPos += attrMatch[2].length; + if (attrMatch[3].length) { + pushCommentRange(attrPos, attrMatch[3].length); + attrPos += attrMatch[3].length; + } + pushClassification(attrPos, attrMatch[4].length, 5 /* operator */); + attrPos += attrMatch[4].length; + if (attrMatch[5].length) { + pushCommentRange(attrPos, attrMatch[5].length); + attrPos += attrMatch[5].length; + } + pushClassification(attrPos, attrMatch[6].length, 24 /* jsxAttributeStringLiteralValue */); + attrPos += attrMatch[6].length; + } + pos += match[4].length; + if (pos > attrPos) { + pushCommentRange(attrPos, pos - attrPos); + } + if (match[5]) { + pushClassification(pos, match[5].length, 10 /* punctuation */); + pos += match[5].length; + } + const end = start + width; + if (pos < end) { + pushCommentRange(pos, end - pos); + } + return true; + } + function processJSDocTemplateTag(tag) { + for (const child of tag.getChildren()) { + processElement(child); + } + } + function classifyDisabledMergeCode(text, start, end) { + let i; + for (i = start; i < end; i++) { + if (isLineBreak(text.charCodeAt(i))) { + break; + } + } + pushClassification(start, i - start, 1 /* comment */); + mergeConflictScanner.resetTokenState(i); + while (mergeConflictScanner.getTokenEnd() < end) { + classifyDisabledCodeToken(); + } + } + function classifyDisabledCodeToken() { + const start = mergeConflictScanner.getTokenEnd(); + const tokenKind = mergeConflictScanner.scan(); + const end = mergeConflictScanner.getTokenEnd(); + const type = classifyTokenType(tokenKind); + if (type) { + pushClassification(start, end - start, type); + } + } + function tryClassifyNode(node) { + if (isJSDoc(node)) { + return true; + } + if (nodeIsMissing(node)) { + return true; + } + const classifiedElementName = tryClassifyJsxElementName(node); + if (!isToken(node) && node.kind !== 12 /* JsxText */ && classifiedElementName === void 0) { + return false; + } + const tokenStart = node.kind === 12 /* JsxText */ ? node.pos : classifyLeadingTriviaAndGetTokenStart(node); + const tokenWidth = node.end - tokenStart; + Debug.assert(tokenWidth >= 0); + if (tokenWidth > 0) { + const type = classifiedElementName || classifyTokenType(node.kind, node); + if (type) { + pushClassification(tokenStart, tokenWidth, type); + } + } + return true; + } + function tryClassifyJsxElementName(token) { + switch (token.parent && token.parent.kind) { + case 287 /* JsxOpeningElement */: + if (token.parent.tagName === token) { + return 19 /* jsxOpenTagName */; + } + break; + case 288 /* JsxClosingElement */: + if (token.parent.tagName === token) { + return 20 /* jsxCloseTagName */; + } + break; + case 286 /* JsxSelfClosingElement */: + if (token.parent.tagName === token) { + return 21 /* jsxSelfClosingTagName */; + } + break; + case 292 /* JsxAttribute */: + if (token.parent.name === token) { + return 22 /* jsxAttribute */; + } + break; + } + return void 0; + } + function classifyTokenType(tokenKind, token) { + if (isKeyword(tokenKind)) { + return 3 /* keyword */; + } + if (tokenKind === 30 /* LessThanToken */ || tokenKind === 32 /* GreaterThanToken */) { + if (token && getTypeArgumentOrTypeParameterList(token.parent)) { + return 10 /* punctuation */; + } + } + if (isPunctuation(tokenKind)) { + if (token) { + const parent2 = token.parent; + if (tokenKind === 64 /* EqualsToken */) { + if (parent2.kind === 261 /* VariableDeclaration */ || parent2.kind === 173 /* PropertyDeclaration */ || parent2.kind === 170 /* Parameter */ || parent2.kind === 292 /* JsxAttribute */) { + return 5 /* operator */; + } + } + if (parent2.kind === 227 /* BinaryExpression */ || parent2.kind === 225 /* PrefixUnaryExpression */ || parent2.kind === 226 /* PostfixUnaryExpression */ || parent2.kind === 228 /* ConditionalExpression */) { + return 5 /* operator */; + } + } + return 10 /* punctuation */; + } else if (tokenKind === 9 /* NumericLiteral */) { + return 4 /* numericLiteral */; + } else if (tokenKind === 10 /* BigIntLiteral */) { + return 25 /* bigintLiteral */; + } else if (tokenKind === 11 /* StringLiteral */) { + return token && token.parent.kind === 292 /* JsxAttribute */ ? 24 /* jsxAttributeStringLiteralValue */ : 6 /* stringLiteral */; + } else if (tokenKind === 14 /* RegularExpressionLiteral */) { + return 6 /* stringLiteral */; + } else if (isTemplateLiteralKind(tokenKind)) { + return 6 /* stringLiteral */; + } else if (tokenKind === 12 /* JsxText */) { + return 23 /* jsxText */; + } else if (tokenKind === 80 /* Identifier */) { + if (token) { + switch (token.parent.kind) { + case 264 /* ClassDeclaration */: + if (token.parent.name === token) { + return 11 /* className */; + } + return; + case 169 /* TypeParameter */: + if (token.parent.name === token) { + return 15 /* typeParameterName */; + } + return; + case 265 /* InterfaceDeclaration */: + if (token.parent.name === token) { + return 13 /* interfaceName */; + } + return; + case 267 /* EnumDeclaration */: + if (token.parent.name === token) { + return 12 /* enumName */; + } + return; + case 268 /* ModuleDeclaration */: + if (token.parent.name === token) { + return 14 /* moduleName */; + } + return; + case 170 /* Parameter */: + if (token.parent.name === token) { + return isThisIdentifier(token) ? 3 /* keyword */ : 17 /* parameterName */; + } + return; + } + if (isConstTypeReference(token.parent)) { + return 3 /* keyword */; + } + } + return 2 /* identifier */; + } + } + function processElement(element) { + if (!element) { + return; + } + if (decodedTextSpanIntersectsWith(spanStart, spanLength, element.pos, element.getFullWidth())) { + checkForClassificationCancellation(cancellationToken, element.kind); + for (const child of element.getChildren(sourceFile)) { + if (!tryClassifyNode(child)) { + processElement(child); + } + } + } + } +} + +// src/services/documentHighlights.ts +var DocumentHighlights; +((DocumentHighlights3) => { + function getDocumentHighlights(program, cancellationToken, sourceFile, position, sourceFilesToSearch) { + const node = getTouchingPropertyName(sourceFile, position); + if (node.parent && (isJsxOpeningElement(node.parent) && node.parent.tagName === node || isJsxClosingElement(node.parent))) { + const { openingElement, closingElement } = node.parent.parent; + const highlightSpans = [openingElement, closingElement].map(({ tagName }) => getHighlightSpanForNode(tagName, sourceFile)); + return [{ fileName: sourceFile.fileName, highlightSpans }]; + } + return getSemanticDocumentHighlights(position, node, program, cancellationToken, sourceFilesToSearch) || getSyntacticDocumentHighlights(node, sourceFile); + } + DocumentHighlights3.getDocumentHighlights = getDocumentHighlights; + function getHighlightSpanForNode(node, sourceFile) { + return { + fileName: sourceFile.fileName, + textSpan: createTextSpanFromNode(node, sourceFile), + kind: "none" /* none */ + }; + } + function getSemanticDocumentHighlights(position, node, program, cancellationToken, sourceFilesToSearch) { + const sourceFilesSet = new Set(sourceFilesToSearch.map((f) => f.fileName)); + const referenceEntries = ts_FindAllReferences_exports.getReferenceEntriesForNode( + position, + node, + program, + sourceFilesToSearch, + cancellationToken, + /*options*/ + void 0, + sourceFilesSet + ); + if (!referenceEntries) return void 0; + const map2 = arrayToMultiMap(referenceEntries.map(ts_FindAllReferences_exports.toHighlightSpan), (e) => e.fileName, (e) => e.span); + const getCanonicalFileName = createGetCanonicalFileName(program.useCaseSensitiveFileNames()); + return arrayFrom(mapDefinedIterator(map2.entries(), ([fileName, highlightSpans]) => { + if (!sourceFilesSet.has(fileName)) { + if (!program.redirectTargetsMap.has(toPath(fileName, program.getCurrentDirectory(), getCanonicalFileName))) { + return void 0; + } + const redirectTarget = program.getSourceFile(fileName); + const redirect = find(sourceFilesToSearch, (f) => !!f.redirectInfo && f.redirectInfo.redirectTarget === redirectTarget); + fileName = redirect.fileName; + Debug.assert(sourceFilesSet.has(fileName)); + } + return { fileName, highlightSpans }; + })); + } + function getSyntacticDocumentHighlights(node, sourceFile) { + const highlightSpans = getHighlightSpans(node, sourceFile); + return highlightSpans && [{ fileName: sourceFile.fileName, highlightSpans }]; + } + function getHighlightSpans(node, sourceFile) { + switch (node.kind) { + case 101 /* IfKeyword */: + case 93 /* ElseKeyword */: + return isIfStatement(node.parent) ? getIfElseOccurrences(node.parent, sourceFile) : void 0; + case 107 /* ReturnKeyword */: + return useParent(node.parent, isReturnStatement, getReturnOccurrences); + case 111 /* ThrowKeyword */: + return useParent(node.parent, isThrowStatement, getThrowOccurrences); + case 113 /* TryKeyword */: + case 85 /* CatchKeyword */: + case 98 /* FinallyKeyword */: + const tryStatement = node.kind === 85 /* CatchKeyword */ ? node.parent.parent : node.parent; + return useParent(tryStatement, isTryStatement, getTryCatchFinallyOccurrences); + case 109 /* SwitchKeyword */: + return useParent(node.parent, isSwitchStatement, getSwitchCaseDefaultOccurrences); + case 84 /* CaseKeyword */: + case 90 /* DefaultKeyword */: { + if (isDefaultClause(node.parent) || isCaseClause(node.parent)) { + return useParent(node.parent.parent.parent, isSwitchStatement, getSwitchCaseDefaultOccurrences); + } + return void 0; + } + case 83 /* BreakKeyword */: + case 88 /* ContinueKeyword */: + return useParent(node.parent, isBreakOrContinueStatement, getBreakOrContinueStatementOccurrences); + case 99 /* ForKeyword */: + case 117 /* WhileKeyword */: + case 92 /* DoKeyword */: + return useParent(node.parent, (n) => isIterationStatement( + n, + /*lookInLabeledStatements*/ + true + ), getLoopBreakContinueOccurrences); + case 137 /* ConstructorKeyword */: + return getFromAllDeclarations(isConstructorDeclaration, [137 /* ConstructorKeyword */]); + case 139 /* GetKeyword */: + case 153 /* SetKeyword */: + return getFromAllDeclarations(isAccessor, [139 /* GetKeyword */, 153 /* SetKeyword */]); + case 135 /* AwaitKeyword */: + return useParent(node.parent, isAwaitExpression, getAsyncAndAwaitOccurrences); + case 134 /* AsyncKeyword */: + return highlightSpans(getAsyncAndAwaitOccurrences(node)); + case 127 /* YieldKeyword */: + return highlightSpans(getYieldOccurrences(node)); + case 103 /* InKeyword */: + case 147 /* OutKeyword */: + return void 0; + default: + return isModifierKind(node.kind) && (isDeclaration(node.parent) || isVariableStatement(node.parent)) ? highlightSpans(getModifierOccurrences(node.kind, node.parent)) : void 0; + } + function getFromAllDeclarations(nodeTest, keywords) { + return useParent(node.parent, nodeTest, (decl) => { + var _a; + return mapDefined((_a = tryCast(decl, canHaveSymbol)) == null ? void 0 : _a.symbol.declarations, (d) => nodeTest(d) ? find(d.getChildren(sourceFile), (c) => contains(keywords, c.kind)) : void 0); + }); + } + function useParent(node2, nodeTest, getNodes4) { + return nodeTest(node2) ? highlightSpans(getNodes4(node2, sourceFile)) : void 0; + } + function highlightSpans(nodes) { + return nodes && nodes.map((node2) => getHighlightSpanForNode(node2, sourceFile)); + } + } + function aggregateOwnedThrowStatements(node) { + if (isThrowStatement(node)) { + return [node]; + } else if (isTryStatement(node)) { + return concatenate( + node.catchClause ? aggregateOwnedThrowStatements(node.catchClause) : node.tryBlock && aggregateOwnedThrowStatements(node.tryBlock), + node.finallyBlock && aggregateOwnedThrowStatements(node.finallyBlock) + ); + } + return isFunctionLike(node) ? void 0 : flatMapChildren(node, aggregateOwnedThrowStatements); + } + function getThrowStatementOwner(throwStatement) { + let child = throwStatement; + while (child.parent) { + const parent2 = child.parent; + if (isFunctionBlock(parent2) || parent2.kind === 308 /* SourceFile */) { + return parent2; + } + if (isTryStatement(parent2) && parent2.tryBlock === child && parent2.catchClause) { + return child; + } + child = parent2; + } + return void 0; + } + function aggregateAllBreakAndContinueStatements(node) { + return isBreakOrContinueStatement(node) ? [node] : isFunctionLike(node) ? void 0 : flatMapChildren(node, aggregateAllBreakAndContinueStatements); + } + function flatMapChildren(node, cb) { + const result = []; + node.forEachChild((child) => { + const value = cb(child); + if (value !== void 0) { + result.push(...toArray(value)); + } + }); + return result; + } + function ownsBreakOrContinueStatement(owner, statement) { + const actualOwner = getBreakOrContinueOwner(statement); + return !!actualOwner && actualOwner === owner; + } + function getBreakOrContinueOwner(statement) { + return findAncestor(statement, (node) => { + switch (node.kind) { + case 256 /* SwitchStatement */: + if (statement.kind === 252 /* ContinueStatement */) { + return false; + } + // falls through + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 248 /* WhileStatement */: + case 247 /* DoStatement */: + return !statement.label || isLabeledBy(node, statement.label.escapedText); + default: + return isFunctionLike(node) && "quit"; + } + }); + } + function getModifierOccurrences(modifier, declaration) { + return mapDefined(getNodesToSearchForModifier(declaration, modifierToFlag(modifier)), (node) => findModifier(node, modifier)); + } + function getNodesToSearchForModifier(declaration, modifierFlag) { + const container = declaration.parent; + switch (container.kind) { + case 269 /* ModuleBlock */: + case 308 /* SourceFile */: + case 242 /* Block */: + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + if (modifierFlag & 64 /* Abstract */ && isClassDeclaration(declaration)) { + return [...declaration.members, declaration]; + } else { + return container.statements; + } + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 263 /* FunctionDeclaration */: + return [...container.parameters, ...isClassLike(container.parent) ? container.parent.members : []]; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 188 /* TypeLiteral */: + const nodes = container.members; + if (modifierFlag & (7 /* AccessibilityModifier */ | 8 /* Readonly */)) { + const constructor = find(container.members, isConstructorDeclaration); + if (constructor) { + return [...nodes, ...constructor.parameters]; + } + } else if (modifierFlag & 64 /* Abstract */) { + return [...nodes, container]; + } + return nodes; + // Syntactically invalid positions that the parser might produce anyway + default: + return void 0; + } + } + function pushKeywordIf(keywordList, token, ...expected) { + if (token && contains(expected, token.kind)) { + keywordList.push(token); + return true; + } + return false; + } + function getLoopBreakContinueOccurrences(loopNode) { + const keywords = []; + if (pushKeywordIf(keywords, loopNode.getFirstToken(), 99 /* ForKeyword */, 117 /* WhileKeyword */, 92 /* DoKeyword */)) { + if (loopNode.kind === 247 /* DoStatement */) { + const loopTokens = loopNode.getChildren(); + for (let i = loopTokens.length - 1; i >= 0; i--) { + if (pushKeywordIf(keywords, loopTokens[i], 117 /* WhileKeyword */)) { + break; + } + } + } + } + forEach(aggregateAllBreakAndContinueStatements(loopNode.statement), (statement) => { + if (ownsBreakOrContinueStatement(loopNode, statement)) { + pushKeywordIf(keywords, statement.getFirstToken(), 83 /* BreakKeyword */, 88 /* ContinueKeyword */); + } + }); + return keywords; + } + function getBreakOrContinueStatementOccurrences(breakOrContinueStatement) { + const owner = getBreakOrContinueOwner(breakOrContinueStatement); + if (owner) { + switch (owner.kind) { + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + return getLoopBreakContinueOccurrences(owner); + case 256 /* SwitchStatement */: + return getSwitchCaseDefaultOccurrences(owner); + } + } + return void 0; + } + function getSwitchCaseDefaultOccurrences(switchStatement) { + const keywords = []; + pushKeywordIf(keywords, switchStatement.getFirstToken(), 109 /* SwitchKeyword */); + forEach(switchStatement.caseBlock.clauses, (clause) => { + pushKeywordIf(keywords, clause.getFirstToken(), 84 /* CaseKeyword */, 90 /* DefaultKeyword */); + forEach(aggregateAllBreakAndContinueStatements(clause), (statement) => { + if (ownsBreakOrContinueStatement(switchStatement, statement)) { + pushKeywordIf(keywords, statement.getFirstToken(), 83 /* BreakKeyword */); + } + }); + }); + return keywords; + } + function getTryCatchFinallyOccurrences(tryStatement, sourceFile) { + const keywords = []; + pushKeywordIf(keywords, tryStatement.getFirstToken(), 113 /* TryKeyword */); + if (tryStatement.catchClause) { + pushKeywordIf(keywords, tryStatement.catchClause.getFirstToken(), 85 /* CatchKeyword */); + } + if (tryStatement.finallyBlock) { + const finallyKeyword = findChildOfKind(tryStatement, 98 /* FinallyKeyword */, sourceFile); + pushKeywordIf(keywords, finallyKeyword, 98 /* FinallyKeyword */); + } + return keywords; + } + function getThrowOccurrences(throwStatement, sourceFile) { + const owner = getThrowStatementOwner(throwStatement); + if (!owner) { + return void 0; + } + const keywords = []; + forEach(aggregateOwnedThrowStatements(owner), (throwStatement2) => { + keywords.push(findChildOfKind(throwStatement2, 111 /* ThrowKeyword */, sourceFile)); + }); + if (isFunctionBlock(owner)) { + forEachReturnStatement(owner, (returnStatement) => { + keywords.push(findChildOfKind(returnStatement, 107 /* ReturnKeyword */, sourceFile)); + }); + } + return keywords; + } + function getReturnOccurrences(returnStatement, sourceFile) { + const func = getContainingFunction(returnStatement); + if (!func) { + return void 0; + } + const keywords = []; + forEachReturnStatement(cast(func.body, isBlock), (returnStatement2) => { + keywords.push(findChildOfKind(returnStatement2, 107 /* ReturnKeyword */, sourceFile)); + }); + forEach(aggregateOwnedThrowStatements(func.body), (throwStatement) => { + keywords.push(findChildOfKind(throwStatement, 111 /* ThrowKeyword */, sourceFile)); + }); + return keywords; + } + function getAsyncAndAwaitOccurrences(node) { + const func = getContainingFunction(node); + if (!func) { + return void 0; + } + const keywords = []; + if (func.modifiers) { + func.modifiers.forEach((modifier) => { + pushKeywordIf(keywords, modifier, 134 /* AsyncKeyword */); + }); + } + forEachChild(func, (child) => { + traverseWithoutCrossingFunction(child, (node2) => { + if (isAwaitExpression(node2)) { + pushKeywordIf(keywords, node2.getFirstToken(), 135 /* AwaitKeyword */); + } + }); + }); + return keywords; + } + function getYieldOccurrences(node) { + const func = getContainingFunction(node); + if (!func) { + return void 0; + } + const keywords = []; + forEachChild(func, (child) => { + traverseWithoutCrossingFunction(child, (node2) => { + if (isYieldExpression(node2)) { + pushKeywordIf(keywords, node2.getFirstToken(), 127 /* YieldKeyword */); + } + }); + }); + return keywords; + } + function traverseWithoutCrossingFunction(node, cb) { + cb(node); + if (!isFunctionLike(node) && !isClassLike(node) && !isInterfaceDeclaration(node) && !isModuleDeclaration(node) && !isTypeAliasDeclaration(node) && !isTypeNode(node)) { + forEachChild(node, (child) => traverseWithoutCrossingFunction(child, cb)); + } + } + function getIfElseOccurrences(ifStatement, sourceFile) { + const keywords = getIfElseKeywords(ifStatement, sourceFile); + const result = []; + for (let i = 0; i < keywords.length; i++) { + if (keywords[i].kind === 93 /* ElseKeyword */ && i < keywords.length - 1) { + const elseKeyword = keywords[i]; + const ifKeyword = keywords[i + 1]; + let shouldCombineElseAndIf = true; + for (let j = ifKeyword.getStart(sourceFile) - 1; j >= elseKeyword.end; j--) { + if (!isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(j))) { + shouldCombineElseAndIf = false; + break; + } + } + if (shouldCombineElseAndIf) { + result.push({ + fileName: sourceFile.fileName, + textSpan: createTextSpanFromBounds(elseKeyword.getStart(), ifKeyword.end), + kind: "reference" /* reference */ + }); + i++; + continue; + } + } + result.push(getHighlightSpanForNode(keywords[i], sourceFile)); + } + return result; + } + function getIfElseKeywords(ifStatement, sourceFile) { + const keywords = []; + while (isIfStatement(ifStatement.parent) && ifStatement.parent.elseStatement === ifStatement) { + ifStatement = ifStatement.parent; + } + while (true) { + const children = ifStatement.getChildren(sourceFile); + pushKeywordIf(keywords, children[0], 101 /* IfKeyword */); + for (let i = children.length - 1; i >= 0; i--) { + if (pushKeywordIf(keywords, children[i], 93 /* ElseKeyword */)) { + break; + } + } + if (!ifStatement.elseStatement || !isIfStatement(ifStatement.elseStatement)) { + break; + } + ifStatement = ifStatement.elseStatement; + } + return keywords; + } + function isLabeledBy(node, labelName) { + return !!findAncestor(node.parent, (owner) => !isLabeledStatement(owner) ? "quit" : owner.label.escapedText === labelName); + } +})(DocumentHighlights || (DocumentHighlights = {})); + +// src/services/documentRegistry.ts +function isDocumentRegistryEntry(entry) { + return !!entry.sourceFile; +} +function createDocumentRegistry(useCaseSensitiveFileNames2, currentDirectory, jsDocParsingMode) { + return createDocumentRegistryInternal(useCaseSensitiveFileNames2, currentDirectory, jsDocParsingMode); +} +function createDocumentRegistryInternal(useCaseSensitiveFileNames2, currentDirectory = "", jsDocParsingMode, externalCache) { + const buckets = /* @__PURE__ */ new Map(); + const getCanonicalFileName = createGetCanonicalFileName(!!useCaseSensitiveFileNames2); + function reportStats() { + const bucketInfoArray = arrayFrom(buckets.keys()).filter((name) => name && name.charAt(0) === "_").map((name) => { + const entries = buckets.get(name); + const sourceFiles = []; + entries.forEach((entry, name2) => { + if (isDocumentRegistryEntry(entry)) { + sourceFiles.push({ + name: name2, + scriptKind: entry.sourceFile.scriptKind, + refCount: entry.languageServiceRefCount + }); + } else { + entry.forEach((value, scriptKind) => sourceFiles.push({ name: name2, scriptKind, refCount: value.languageServiceRefCount })); + } + }); + sourceFiles.sort((x, y) => y.refCount - x.refCount); + return { + bucket: name, + sourceFiles + }; + }); + return JSON.stringify(bucketInfoArray, void 0, 2); + } + function getCompilationSettings(settingsOrHost) { + if (typeof settingsOrHost.getCompilationSettings === "function") { + return settingsOrHost.getCompilationSettings(); + } + return settingsOrHost; + } + function acquireDocument(fileName, compilationSettings, scriptSnapshot, version2, scriptKind, languageVersionOrOptions) { + const path = toPath(fileName, currentDirectory, getCanonicalFileName); + const key = getKeyForCompilationSettings(getCompilationSettings(compilationSettings)); + return acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version2, scriptKind, languageVersionOrOptions); + } + function acquireDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version2, scriptKind, languageVersionOrOptions) { + return acquireOrUpdateDocument( + fileName, + path, + compilationSettings, + key, + scriptSnapshot, + version2, + /*acquiring*/ + true, + scriptKind, + languageVersionOrOptions + ); + } + function updateDocument(fileName, compilationSettings, scriptSnapshot, version2, scriptKind, languageVersionOrOptions) { + const path = toPath(fileName, currentDirectory, getCanonicalFileName); + const key = getKeyForCompilationSettings(getCompilationSettings(compilationSettings)); + return updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version2, scriptKind, languageVersionOrOptions); + } + function updateDocumentWithKey(fileName, path, compilationSettings, key, scriptSnapshot, version2, scriptKind, languageVersionOrOptions) { + return acquireOrUpdateDocument( + fileName, + path, + getCompilationSettings(compilationSettings), + key, + scriptSnapshot, + version2, + /*acquiring*/ + false, + scriptKind, + languageVersionOrOptions + ); + } + function getDocumentRegistryEntry(bucketEntry, scriptKind) { + const entry = isDocumentRegistryEntry(bucketEntry) ? bucketEntry : bucketEntry.get(Debug.checkDefined(scriptKind, "If there are more than one scriptKind's for same document the scriptKind should be provided")); + Debug.assert(scriptKind === void 0 || !entry || entry.sourceFile.scriptKind === scriptKind, `Script kind should match provided ScriptKind:${scriptKind} and sourceFile.scriptKind: ${entry == null ? void 0 : entry.sourceFile.scriptKind}, !entry: ${!entry}`); + return entry; + } + function acquireOrUpdateDocument(fileName, path, compilationSettingsOrHost, key, scriptSnapshot, version2, acquiring, scriptKind, languageVersionOrOptions) { + var _a, _b, _c, _d; + scriptKind = ensureScriptKind(fileName, scriptKind); + const compilationSettings = getCompilationSettings(compilationSettingsOrHost); + const host = compilationSettingsOrHost === compilationSettings ? void 0 : compilationSettingsOrHost; + const scriptTarget = scriptKind === 6 /* JSON */ ? 100 /* JSON */ : getEmitScriptTarget(compilationSettings); + const sourceFileOptions = typeof languageVersionOrOptions === "object" ? languageVersionOrOptions : { + languageVersion: scriptTarget, + impliedNodeFormat: host && getImpliedNodeFormatForFile(path, (_d = (_c = (_b = (_a = host.getCompilerHost) == null ? void 0 : _a.call(host)) == null ? void 0 : _b.getModuleResolutionCache) == null ? void 0 : _c.call(_b)) == null ? void 0 : _d.getPackageJsonInfoCache(), host, compilationSettings), + setExternalModuleIndicator: getSetExternalModuleIndicator(compilationSettings), + jsDocParsingMode + }; + sourceFileOptions.languageVersion = scriptTarget; + Debug.assertEqual(jsDocParsingMode, sourceFileOptions.jsDocParsingMode); + const oldBucketCount = buckets.size; + const keyWithMode = getDocumentRegistryBucketKeyWithMode(key, sourceFileOptions.impliedNodeFormat); + const bucket = getOrUpdate(buckets, keyWithMode, () => /* @__PURE__ */ new Map()); + if (tracing) { + if (buckets.size > oldBucketCount) { + tracing.instant(tracing.Phase.Session, "createdDocumentRegistryBucket", { configFilePath: compilationSettings.configFilePath, key: keyWithMode }); + } + const otherBucketKey = !isDeclarationFileName(path) && forEachEntry(buckets, (bucket2, bucketKey) => bucketKey !== keyWithMode && bucket2.has(path) && bucketKey); + if (otherBucketKey) { + tracing.instant(tracing.Phase.Session, "documentRegistryBucketOverlap", { path, key1: otherBucketKey, key2: keyWithMode }); + } + } + const bucketEntry = bucket.get(path); + let entry = bucketEntry && getDocumentRegistryEntry(bucketEntry, scriptKind); + if (!entry && externalCache) { + const sourceFile = externalCache.getDocument(keyWithMode, path); + if (sourceFile && sourceFile.scriptKind === scriptKind && sourceFile.text === getSnapshotText(scriptSnapshot)) { + Debug.assert(acquiring); + entry = { + sourceFile, + languageServiceRefCount: 0 + }; + setBucketEntry(); + } + } + if (!entry) { + const sourceFile = createLanguageServiceSourceFile( + fileName, + scriptSnapshot, + sourceFileOptions, + version2, + /*setNodeParents*/ + false, + scriptKind + ); + if (externalCache) { + externalCache.setDocument(keyWithMode, path, sourceFile); + } + entry = { + sourceFile, + languageServiceRefCount: 1 + }; + setBucketEntry(); + } else { + if (entry.sourceFile.version !== version2) { + entry.sourceFile = updateLanguageServiceSourceFile(entry.sourceFile, scriptSnapshot, version2, scriptSnapshot.getChangeRange(entry.sourceFile.scriptSnapshot)); + if (externalCache) { + externalCache.setDocument(keyWithMode, path, entry.sourceFile); + } + } + if (acquiring) { + entry.languageServiceRefCount++; + } + } + Debug.assert(entry.languageServiceRefCount !== 0); + return entry.sourceFile; + function setBucketEntry() { + if (!bucketEntry) { + bucket.set(path, entry); + } else if (isDocumentRegistryEntry(bucketEntry)) { + const scriptKindMap = /* @__PURE__ */ new Map(); + scriptKindMap.set(bucketEntry.sourceFile.scriptKind, bucketEntry); + scriptKindMap.set(scriptKind, entry); + bucket.set(path, scriptKindMap); + } else { + bucketEntry.set(scriptKind, entry); + } + } + } + function releaseDocument(fileName, compilationSettings, scriptKind, impliedNodeFormat) { + const path = toPath(fileName, currentDirectory, getCanonicalFileName); + const key = getKeyForCompilationSettings(compilationSettings); + return releaseDocumentWithKey(path, key, scriptKind, impliedNodeFormat); + } + function releaseDocumentWithKey(path, key, scriptKind, impliedNodeFormat) { + const bucket = Debug.checkDefined(buckets.get(getDocumentRegistryBucketKeyWithMode(key, impliedNodeFormat))); + const bucketEntry = bucket.get(path); + const entry = getDocumentRegistryEntry(bucketEntry, scriptKind); + entry.languageServiceRefCount--; + Debug.assert(entry.languageServiceRefCount >= 0); + if (entry.languageServiceRefCount === 0) { + if (isDocumentRegistryEntry(bucketEntry)) { + bucket.delete(path); + } else { + bucketEntry.delete(scriptKind); + if (bucketEntry.size === 1) { + bucket.set(path, firstDefinedIterator(bucketEntry.values(), identity)); + } + } + } + } + return { + acquireDocument, + acquireDocumentWithKey, + updateDocument, + updateDocumentWithKey, + releaseDocument, + releaseDocumentWithKey, + getKeyForCompilationSettings, + getDocumentRegistryBucketKeyWithMode, + reportStats, + getBuckets: () => buckets + }; +} +function getKeyForCompilationSettings(settings) { + return getKeyForCompilerOptions(settings, sourceFileAffectingCompilerOptions); +} +function getDocumentRegistryBucketKeyWithMode(key, mode) { + return mode ? `${key}|${mode}` : key; +} + +// src/services/getEditsForFileRename.ts +function getEditsForFileRename(program, oldFileOrDirPath, newFileOrDirPath, host, formatContext, preferences, sourceMapper) { + const useCaseSensitiveFileNames2 = hostUsesCaseSensitiveFileNames(host); + const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames2); + const oldToNew = getPathUpdater(oldFileOrDirPath, newFileOrDirPath, getCanonicalFileName, sourceMapper); + const newToOld = getPathUpdater(newFileOrDirPath, oldFileOrDirPath, getCanonicalFileName, sourceMapper); + return ts_textChanges_exports.ChangeTracker.with({ host, formatContext, preferences }, (changeTracker) => { + updateTsconfigFiles(program, changeTracker, oldToNew, oldFileOrDirPath, newFileOrDirPath, host.getCurrentDirectory(), useCaseSensitiveFileNames2); + updateImports(program, changeTracker, oldToNew, newToOld, host, getCanonicalFileName); + }); +} +function getPathUpdater(oldFileOrDirPath, newFileOrDirPath, getCanonicalFileName, sourceMapper) { + const canonicalOldPath = getCanonicalFileName(oldFileOrDirPath); + return (path) => { + const originalPath = sourceMapper && sourceMapper.tryGetSourcePosition({ fileName: path, pos: 0 }); + const updatedPath = getUpdatedPath(originalPath ? originalPath.fileName : path); + return originalPath ? updatedPath === void 0 ? void 0 : makeCorrespondingRelativeChange(originalPath.fileName, updatedPath, path, getCanonicalFileName) : updatedPath; + }; + function getUpdatedPath(pathToUpdate) { + if (getCanonicalFileName(pathToUpdate) === canonicalOldPath) return newFileOrDirPath; + const suffix = tryRemoveDirectoryPrefix(pathToUpdate, canonicalOldPath, getCanonicalFileName); + return suffix === void 0 ? void 0 : newFileOrDirPath + "/" + suffix; + } +} +function makeCorrespondingRelativeChange(a0, b0, a1, getCanonicalFileName) { + const rel = getRelativePathFromFile(a0, b0, getCanonicalFileName); + return combinePathsSafe(getDirectoryPath(a1), rel); +} +function updateTsconfigFiles(program, changeTracker, oldToNew, oldFileOrDirPath, newFileOrDirPath, currentDirectory, useCaseSensitiveFileNames2) { + const { configFile } = program.getCompilerOptions(); + if (!configFile) return; + const configDir = getDirectoryPath(configFile.fileName); + const jsonObjectLiteral = getTsConfigObjectLiteralExpression(configFile); + if (!jsonObjectLiteral) return; + forEachProperty(jsonObjectLiteral, (property, propertyName) => { + switch (propertyName) { + case "files": + case "include": + case "exclude": { + const foundExactMatch = updatePaths(property); + if (foundExactMatch || propertyName !== "include" || !isArrayLiteralExpression(property.initializer)) return; + const includes = mapDefined(property.initializer.elements, (e) => isStringLiteral(e) ? e.text : void 0); + if (includes.length === 0) return; + const matchers = getFileMatcherPatterns( + configDir, + /*excludes*/ + [], + includes, + useCaseSensitiveFileNames2, + currentDirectory + ); + if (getRegexFromPattern(Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames2).test(oldFileOrDirPath) && !getRegexFromPattern(Debug.checkDefined(matchers.includeFilePattern), useCaseSensitiveFileNames2).test(newFileOrDirPath)) { + changeTracker.insertNodeAfter(configFile, last(property.initializer.elements), factory.createStringLiteral(relativePath(newFileOrDirPath))); + } + return; + } + case "compilerOptions": + forEachProperty(property.initializer, (property2, propertyName2) => { + const option = getOptionFromName(propertyName2); + Debug.assert((option == null ? void 0 : option.type) !== "listOrElement"); + if (option && (option.isFilePath || option.type === "list" && option.element.isFilePath)) { + updatePaths(property2); + } else if (propertyName2 === "paths") { + forEachProperty(property2.initializer, (pathsProperty) => { + if (!isArrayLiteralExpression(pathsProperty.initializer)) return; + for (const e of pathsProperty.initializer.elements) { + tryUpdateString(e); + } + }); + } + }); + return; + } + }); + function updatePaths(property) { + const elements = isArrayLiteralExpression(property.initializer) ? property.initializer.elements : [property.initializer]; + let foundExactMatch = false; + for (const element of elements) { + foundExactMatch = tryUpdateString(element) || foundExactMatch; + } + return foundExactMatch; + } + function tryUpdateString(element) { + if (!isStringLiteral(element)) return false; + const elementFileName = combinePathsSafe(configDir, element.text); + const updated = oldToNew(elementFileName); + if (updated !== void 0) { + changeTracker.replaceRangeWithText(configFile, createStringRange(element, configFile), relativePath(updated)); + return true; + } + return false; + } + function relativePath(path) { + return getRelativePathFromDirectory( + configDir, + path, + /*ignoreCase*/ + !useCaseSensitiveFileNames2 + ); + } +} +function updateImports(program, changeTracker, oldToNew, newToOld, host, getCanonicalFileName) { + const allFiles = program.getSourceFiles(); + for (const sourceFile of allFiles) { + const newFromOld = oldToNew(sourceFile.fileName); + const newImportFromPath = newFromOld ?? sourceFile.fileName; + const newImportFromDirectory = getDirectoryPath(newImportFromPath); + const oldFromNew = newToOld(sourceFile.fileName); + const oldImportFromPath = oldFromNew || sourceFile.fileName; + const oldImportFromDirectory = getDirectoryPath(oldImportFromPath); + const importingSourceFileMoved = newFromOld !== void 0 || oldFromNew !== void 0; + updateImportsWorker(sourceFile, changeTracker, (referenceText) => { + if (!pathIsRelative(referenceText)) return void 0; + const oldAbsolute = combinePathsSafe(oldImportFromDirectory, referenceText); + const newAbsolute = oldToNew(oldAbsolute); + return newAbsolute === void 0 ? void 0 : ensurePathIsNonModuleName(getRelativePathFromDirectory(newImportFromDirectory, newAbsolute, getCanonicalFileName)); + }, (importLiteral) => { + const importedModuleSymbol = program.getTypeChecker().getSymbolAtLocation(importLiteral); + if ((importedModuleSymbol == null ? void 0 : importedModuleSymbol.declarations) && importedModuleSymbol.declarations.some((d) => isAmbientModule(d))) return void 0; + const toImport = oldFromNew !== void 0 ? getSourceFileToImportFromResolved(importLiteral, resolveModuleName(importLiteral.text, oldImportFromPath, program.getCompilerOptions(), host), oldToNew, allFiles) : getSourceFileToImport(importedModuleSymbol, importLiteral, sourceFile, program, host, oldToNew); + return toImport !== void 0 && (toImport.updated || importingSourceFileMoved && pathIsRelative(importLiteral.text)) ? ts_moduleSpecifiers_exports.updateModuleSpecifier(program.getCompilerOptions(), sourceFile, newImportFromPath, toImport.newFileName, createModuleSpecifierResolutionHost(program, host), importLiteral.text) : void 0; + }); + } +} +function combineNormal(pathA, pathB) { + return normalizePath(combinePaths(pathA, pathB)); +} +function combinePathsSafe(pathA, pathB) { + return ensurePathIsNonModuleName(combineNormal(pathA, pathB)); +} +function getSourceFileToImport(importedModuleSymbol, importLiteral, importingSourceFile, program, host, oldToNew) { + if (importedModuleSymbol) { + const oldFileName = find(importedModuleSymbol.declarations, isSourceFile).fileName; + const newFileName = oldToNew(oldFileName); + return newFileName === void 0 ? { newFileName: oldFileName, updated: false } : { newFileName, updated: true }; + } else { + const mode = program.getModeForUsageLocation(importingSourceFile, importLiteral); + const resolved = host.resolveModuleNameLiterals || !host.resolveModuleNames ? program.getResolvedModuleFromModuleSpecifier(importLiteral, importingSourceFile) : host.getResolvedModuleWithFailedLookupLocationsFromCache && host.getResolvedModuleWithFailedLookupLocationsFromCache(importLiteral.text, importingSourceFile.fileName, mode); + return getSourceFileToImportFromResolved(importLiteral, resolved, oldToNew, program.getSourceFiles()); + } +} +function getSourceFileToImportFromResolved(importLiteral, resolved, oldToNew, sourceFiles) { + if (!resolved) return void 0; + if (resolved.resolvedModule) { + const result2 = tryChange(resolved.resolvedModule.resolvedFileName); + if (result2) return result2; + } + const result = forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJsonExisting) || pathIsRelative(importLiteral.text) && forEach(resolved.failedLookupLocations, tryChangeWithIgnoringPackageJson); + if (result) return result; + return resolved.resolvedModule && { newFileName: resolved.resolvedModule.resolvedFileName, updated: false }; + function tryChangeWithIgnoringPackageJsonExisting(oldFileName) { + const newFileName = oldToNew(oldFileName); + return newFileName && find(sourceFiles, (src) => src.fileName === newFileName) ? tryChangeWithIgnoringPackageJson(oldFileName) : void 0; + } + function tryChangeWithIgnoringPackageJson(oldFileName) { + return !endsWith(oldFileName, "/package.json") ? tryChange(oldFileName) : void 0; + } + function tryChange(oldFileName) { + const newFileName = oldToNew(oldFileName); + return newFileName && { newFileName, updated: true }; + } +} +function updateImportsWorker(sourceFile, changeTracker, updateRef, updateImport) { + for (const ref of sourceFile.referencedFiles || emptyArray) { + const updated = updateRef(ref.fileName); + if (updated !== void 0 && updated !== sourceFile.text.slice(ref.pos, ref.end)) changeTracker.replaceRangeWithText(sourceFile, ref, updated); + } + for (const importStringLiteral of sourceFile.imports) { + const updated = updateImport(importStringLiteral); + if (updated !== void 0 && updated !== importStringLiteral.text) changeTracker.replaceRangeWithText(sourceFile, createStringRange(importStringLiteral, sourceFile), updated); + } +} +function createStringRange(node, sourceFile) { + return createRange(node.getStart(sourceFile) + 1, node.end - 1); +} +function forEachProperty(objectLiteral, cb) { + if (!isObjectLiteralExpression(objectLiteral)) return; + for (const property of objectLiteral.properties) { + if (isPropertyAssignment(property) && isStringLiteral(property.name)) { + cb(property, property.name.text); + } + } +} + +// src/services/patternMatcher.ts +var PatternMatchKind = /* @__PURE__ */ ((PatternMatchKind2) => { + PatternMatchKind2[PatternMatchKind2["exact"] = 0] = "exact"; + PatternMatchKind2[PatternMatchKind2["prefix"] = 1] = "prefix"; + PatternMatchKind2[PatternMatchKind2["substring"] = 2] = "substring"; + PatternMatchKind2[PatternMatchKind2["camelCase"] = 3] = "camelCase"; + return PatternMatchKind2; +})(PatternMatchKind || {}); +function createPatternMatch(kind, isCaseSensitive) { + return { + kind, + isCaseSensitive + }; +} +function createPatternMatcher(pattern) { + const stringToWordSpans = /* @__PURE__ */ new Map(); + const dotSeparatedSegments = pattern.trim().split(".").map((p) => createSegment(p.trim())); + if (dotSeparatedSegments.length === 1 && dotSeparatedSegments[0].totalTextChunk.text === "") { + return { + getMatchForLastSegmentOfPattern: () => createPatternMatch( + 2 /* substring */, + /*isCaseSensitive*/ + true + ), + getFullMatch: () => createPatternMatch( + 2 /* substring */, + /*isCaseSensitive*/ + true + ), + patternContainsDots: false + }; + } + if (dotSeparatedSegments.some((segment) => !segment.subWordTextChunks.length)) return void 0; + return { + getFullMatch: (containers, candidate) => getFullMatch(containers, candidate, dotSeparatedSegments, stringToWordSpans), + getMatchForLastSegmentOfPattern: (candidate) => matchSegment(candidate, last(dotSeparatedSegments), stringToWordSpans), + patternContainsDots: dotSeparatedSegments.length > 1 + }; +} +function getFullMatch(candidateContainers, candidate, dotSeparatedSegments, stringToWordSpans) { + const candidateMatch = matchSegment(candidate, last(dotSeparatedSegments), stringToWordSpans); + if (!candidateMatch) { + return void 0; + } + if (dotSeparatedSegments.length - 1 > candidateContainers.length) { + return void 0; + } + let bestMatch; + for (let i = dotSeparatedSegments.length - 2, j = candidateContainers.length - 1; i >= 0; i -= 1, j -= 1) { + bestMatch = betterMatch(bestMatch, matchSegment(candidateContainers[j], dotSeparatedSegments[i], stringToWordSpans)); + } + return bestMatch; +} +function getWordSpans(word, stringToWordSpans) { + let spans = stringToWordSpans.get(word); + if (!spans) { + stringToWordSpans.set(word, spans = breakIntoWordSpans(word)); + } + return spans; +} +function matchTextChunk(candidate, chunk, stringToWordSpans) { + const index = indexOfIgnoringCase(candidate, chunk.textLowerCase); + if (index === 0) { + return createPatternMatch( + chunk.text.length === candidate.length ? 0 /* exact */ : 1 /* prefix */, + /*isCaseSensitive:*/ + startsWith(candidate, chunk.text) + ); + } + if (chunk.isLowerCase) { + if (index === -1) return void 0; + const wordSpans = getWordSpans(candidate, stringToWordSpans); + for (const span of wordSpans) { + if (partStartsWith( + candidate, + span, + chunk.text, + /*ignoreCase*/ + true + )) { + return createPatternMatch( + 2 /* substring */, + /*isCaseSensitive:*/ + partStartsWith( + candidate, + span, + chunk.text, + /*ignoreCase*/ + false + ) + ); + } + } + if (chunk.text.length < candidate.length && isUpperCaseLetter(candidate.charCodeAt(index))) { + return createPatternMatch( + 2 /* substring */, + /*isCaseSensitive*/ + false + ); + } + } else { + if (candidate.indexOf(chunk.text) > 0) { + return createPatternMatch( + 2 /* substring */, + /*isCaseSensitive*/ + true + ); + } + if (chunk.characterSpans.length > 0) { + const candidateParts = getWordSpans(candidate, stringToWordSpans); + const isCaseSensitive = tryCamelCaseMatch( + candidate, + candidateParts, + chunk, + /*ignoreCase*/ + false + ) ? true : tryCamelCaseMatch( + candidate, + candidateParts, + chunk, + /*ignoreCase*/ + true + ) ? false : void 0; + if (isCaseSensitive !== void 0) { + return createPatternMatch(3 /* camelCase */, isCaseSensitive); + } + } + } +} +function matchSegment(candidate, segment, stringToWordSpans) { + if (every2(segment.totalTextChunk.text, (ch) => ch !== 32 /* space */ && ch !== 42 /* asterisk */)) { + const match = matchTextChunk(candidate, segment.totalTextChunk, stringToWordSpans); + if (match) return match; + } + const subWordTextChunks = segment.subWordTextChunks; + let bestMatch; + for (const subWordTextChunk of subWordTextChunks) { + bestMatch = betterMatch(bestMatch, matchTextChunk(candidate, subWordTextChunk, stringToWordSpans)); + } + return bestMatch; +} +function betterMatch(a, b) { + return min([a, b], compareMatches); +} +function compareMatches(a, b) { + return a === void 0 ? 1 /* GreaterThan */ : b === void 0 ? -1 /* LessThan */ : compareValues(a.kind, b.kind) || compareBooleans(!a.isCaseSensitive, !b.isCaseSensitive); +} +function partStartsWith(candidate, candidateSpan, pattern, ignoreCase, patternSpan = { start: 0, length: pattern.length }) { + return patternSpan.length <= candidateSpan.length && everyInRange(0, patternSpan.length, (i) => equalChars(pattern.charCodeAt(patternSpan.start + i), candidate.charCodeAt(candidateSpan.start + i), ignoreCase)); +} +function equalChars(ch1, ch2, ignoreCase) { + return ignoreCase ? toLowerCase2(ch1) === toLowerCase2(ch2) : ch1 === ch2; +} +function tryCamelCaseMatch(candidate, candidateParts, chunk, ignoreCase) { + const chunkCharacterSpans = chunk.characterSpans; + let currentCandidate = 0; + let currentChunkSpan = 0; + let firstMatch; + let contiguous; + while (true) { + if (currentChunkSpan === chunkCharacterSpans.length) { + return true; + } else if (currentCandidate === candidateParts.length) { + return false; + } + let candidatePart = candidateParts[currentCandidate]; + let gotOneMatchThisCandidate = false; + for (; currentChunkSpan < chunkCharacterSpans.length; currentChunkSpan++) { + const chunkCharacterSpan = chunkCharacterSpans[currentChunkSpan]; + if (gotOneMatchThisCandidate) { + if (!isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan - 1].start)) || !isUpperCaseLetter(chunk.text.charCodeAt(chunkCharacterSpans[currentChunkSpan].start))) { + break; + } + } + if (!partStartsWith(candidate, candidatePart, chunk.text, ignoreCase, chunkCharacterSpan)) { + break; + } + gotOneMatchThisCandidate = true; + firstMatch = firstMatch === void 0 ? currentCandidate : firstMatch; + contiguous = contiguous === void 0 ? true : contiguous; + candidatePart = createTextSpan(candidatePart.start + chunkCharacterSpan.length, candidatePart.length - chunkCharacterSpan.length); + } + if (!gotOneMatchThisCandidate && contiguous !== void 0) { + contiguous = false; + } + currentCandidate++; + } +} +function createSegment(text) { + return { + totalTextChunk: createTextChunk(text), + subWordTextChunks: breakPatternIntoTextChunks(text) + }; +} +function isUpperCaseLetter(ch) { + if (ch >= 65 /* A */ && ch <= 90 /* Z */) { + return true; + } + if (ch < 127 /* maxAsciiCharacter */ || !isUnicodeIdentifierStart(ch, 99 /* Latest */)) { + return false; + } + const str = String.fromCharCode(ch); + return str === str.toUpperCase(); +} +function isLowerCaseLetter(ch) { + if (ch >= 97 /* a */ && ch <= 122 /* z */) { + return true; + } + if (ch < 127 /* maxAsciiCharacter */ || !isUnicodeIdentifierStart(ch, 99 /* Latest */)) { + return false; + } + const str = String.fromCharCode(ch); + return str === str.toLowerCase(); +} +function indexOfIgnoringCase(str, value) { + const n = str.length - value.length; + for (let start = 0; start <= n; start++) { + if (every2(value, (valueChar, i) => toLowerCase2(str.charCodeAt(i + start)) === valueChar)) { + return start; + } + } + return -1; +} +function toLowerCase2(ch) { + if (ch >= 65 /* A */ && ch <= 90 /* Z */) { + return 97 /* a */ + (ch - 65 /* A */); + } + if (ch < 127 /* maxAsciiCharacter */) { + return ch; + } + return String.fromCharCode(ch).toLowerCase().charCodeAt(0); +} +function isDigit2(ch) { + return ch >= 48 /* _0 */ && ch <= 57 /* _9 */; +} +function isWordChar(ch) { + return isUpperCaseLetter(ch) || isLowerCaseLetter(ch) || isDigit2(ch) || ch === 95 /* _ */ || ch === 36 /* $ */; +} +function breakPatternIntoTextChunks(pattern) { + const result = []; + let wordStart = 0; + let wordLength = 0; + for (let i = 0; i < pattern.length; i++) { + const ch = pattern.charCodeAt(i); + if (isWordChar(ch)) { + if (wordLength === 0) { + wordStart = i; + } + wordLength++; + } else { + if (wordLength > 0) { + result.push(createTextChunk(pattern.substr(wordStart, wordLength))); + wordLength = 0; + } + } + } + if (wordLength > 0) { + result.push(createTextChunk(pattern.substr(wordStart, wordLength))); + } + return result; +} +function createTextChunk(text) { + const textLowerCase = text.toLowerCase(); + return { + text, + textLowerCase, + isLowerCase: text === textLowerCase, + characterSpans: breakIntoCharacterSpans(text) + }; +} +function breakIntoCharacterSpans(identifier) { + return breakIntoSpans( + identifier, + /*word*/ + false + ); +} +function breakIntoWordSpans(identifier) { + return breakIntoSpans( + identifier, + /*word*/ + true + ); +} +function breakIntoSpans(identifier, word) { + const result = []; + let wordStart = 0; + for (let i = 1; i < identifier.length; i++) { + const lastIsDigit = isDigit2(identifier.charCodeAt(i - 1)); + const currentIsDigit = isDigit2(identifier.charCodeAt(i)); + const hasTransitionFromLowerToUpper = transitionFromLowerToUpper(identifier, word, i); + const hasTransitionFromUpperToLower = word && transitionFromUpperToLower(identifier, i, wordStart); + if (charIsPunctuation(identifier.charCodeAt(i - 1)) || charIsPunctuation(identifier.charCodeAt(i)) || lastIsDigit !== currentIsDigit || hasTransitionFromLowerToUpper || hasTransitionFromUpperToLower) { + if (!isAllPunctuation(identifier, wordStart, i)) { + result.push(createTextSpan(wordStart, i - wordStart)); + } + wordStart = i; + } + } + if (!isAllPunctuation(identifier, wordStart, identifier.length)) { + result.push(createTextSpan(wordStart, identifier.length - wordStart)); + } + return result; +} +function charIsPunctuation(ch) { + switch (ch) { + case 33 /* exclamation */: + case 34 /* doubleQuote */: + case 35 /* hash */: + case 37 /* percent */: + case 38 /* ampersand */: + case 39 /* singleQuote */: + case 40 /* openParen */: + case 41 /* closeParen */: + case 42 /* asterisk */: + case 44 /* comma */: + case 45 /* minus */: + case 46 /* dot */: + case 47 /* slash */: + case 58 /* colon */: + case 59 /* semicolon */: + case 63 /* question */: + case 64 /* at */: + case 91 /* openBracket */: + case 92 /* backslash */: + case 93 /* closeBracket */: + case 95 /* _ */: + case 123 /* openBrace */: + case 125 /* closeBrace */: + return true; + } + return false; +} +function isAllPunctuation(identifier, start, end) { + return every2(identifier, (ch) => charIsPunctuation(ch) && ch !== 95 /* _ */, start, end); +} +function transitionFromUpperToLower(identifier, index, wordStart) { + return index !== wordStart && index + 1 < identifier.length && isUpperCaseLetter(identifier.charCodeAt(index)) && isLowerCaseLetter(identifier.charCodeAt(index + 1)) && every2(identifier, isUpperCaseLetter, wordStart, index); +} +function transitionFromLowerToUpper(identifier, word, index) { + const lastIsUpper = isUpperCaseLetter(identifier.charCodeAt(index - 1)); + const currentIsUpper = isUpperCaseLetter(identifier.charCodeAt(index)); + return currentIsUpper && (!word || !lastIsUpper); +} +function everyInRange(start, end, pred) { + for (let i = start; i < end; i++) { + if (!pred(i)) { + return false; + } + } + return true; +} +function every2(s, pred, start = 0, end = s.length) { + return everyInRange(start, end, (i) => pred(s.charCodeAt(i), i)); +} + +// src/services/preProcess.ts +function preProcessFile(sourceText, readImportFiles = true, detectJavaScriptImports = false) { + const pragmaContext = { + languageVersion: 1 /* ES5 */, + // controls whether the token scanner considers unicode identifiers or not - shouldn't matter, since we're only using it for trivia + pragmas: void 0, + checkJsDirective: void 0, + referencedFiles: [], + typeReferenceDirectives: [], + libReferenceDirectives: [], + amdDependencies: [], + hasNoDefaultLib: void 0, + moduleName: void 0 + }; + const importedFiles = []; + let ambientExternalModules; + let lastToken; + let currentToken; + let braceNesting = 0; + let externalModule = false; + function nextToken() { + lastToken = currentToken; + currentToken = scanner.scan(); + if (currentToken === 19 /* OpenBraceToken */) { + braceNesting++; + } else if (currentToken === 20 /* CloseBraceToken */) { + braceNesting--; + } + return currentToken; + } + function getFileReference() { + const fileName = scanner.getTokenValue(); + const pos = scanner.getTokenStart(); + return { fileName, pos, end: pos + fileName.length }; + } + function recordAmbientExternalModule() { + if (!ambientExternalModules) { + ambientExternalModules = []; + } + ambientExternalModules.push({ ref: getFileReference(), depth: braceNesting }); + } + function recordModuleName() { + importedFiles.push(getFileReference()); + markAsExternalModuleIfTopLevel(); + } + function markAsExternalModuleIfTopLevel() { + if (braceNesting === 0) { + externalModule = true; + } + } + function tryConsumeDeclare() { + let token = scanner.getToken(); + if (token === 138 /* DeclareKeyword */) { + token = nextToken(); + if (token === 144 /* ModuleKeyword */) { + token = nextToken(); + if (token === 11 /* StringLiteral */) { + recordAmbientExternalModule(); + } + } + return true; + } + return false; + } + function tryConsumeImport() { + if (lastToken === 25 /* DotToken */) { + return false; + } + let token = scanner.getToken(); + if (token === 102 /* ImportKeyword */) { + token = nextToken(); + if (token === 21 /* OpenParenToken */) { + token = nextToken(); + if (token === 11 /* StringLiteral */ || token === 15 /* NoSubstitutionTemplateLiteral */) { + recordModuleName(); + return true; + } + } else if (token === 11 /* StringLiteral */) { + recordModuleName(); + return true; + } else { + if (token === 156 /* TypeKeyword */) { + const skipTypeKeyword = scanner.lookAhead(() => { + const token2 = scanner.scan(); + return token2 !== 161 /* FromKeyword */ && (token2 === 42 /* AsteriskToken */ || token2 === 19 /* OpenBraceToken */ || token2 === 80 /* Identifier */ || isKeyword(token2)); + }); + if (skipTypeKeyword) { + token = nextToken(); + } + } + if (token === 80 /* Identifier */ || isKeyword(token)) { + token = nextToken(); + if (token === 161 /* FromKeyword */) { + token = nextToken(); + if (token === 11 /* StringLiteral */) { + recordModuleName(); + return true; + } + } else if (token === 64 /* EqualsToken */) { + if (tryConsumeRequireCall( + /*skipCurrentToken*/ + true + )) { + return true; + } + } else if (token === 28 /* CommaToken */) { + token = nextToken(); + } else { + return true; + } + } + if (token === 19 /* OpenBraceToken */) { + token = nextToken(); + while (token !== 20 /* CloseBraceToken */ && token !== 1 /* EndOfFileToken */) { + token = nextToken(); + } + if (token === 20 /* CloseBraceToken */) { + token = nextToken(); + if (token === 161 /* FromKeyword */) { + token = nextToken(); + if (token === 11 /* StringLiteral */) { + recordModuleName(); + } + } + } + } else if (token === 42 /* AsteriskToken */) { + token = nextToken(); + if (token === 130 /* AsKeyword */) { + token = nextToken(); + if (token === 80 /* Identifier */ || isKeyword(token)) { + token = nextToken(); + if (token === 161 /* FromKeyword */) { + token = nextToken(); + if (token === 11 /* StringLiteral */) { + recordModuleName(); + } + } + } + } + } + } + return true; + } + return false; + } + function tryConsumeExport() { + let token = scanner.getToken(); + if (token === 95 /* ExportKeyword */) { + markAsExternalModuleIfTopLevel(); + token = nextToken(); + if (token === 156 /* TypeKeyword */) { + const skipTypeKeyword = scanner.lookAhead(() => { + const token2 = scanner.scan(); + return token2 === 42 /* AsteriskToken */ || token2 === 19 /* OpenBraceToken */; + }); + if (skipTypeKeyword) { + token = nextToken(); + } + } + if (token === 19 /* OpenBraceToken */) { + token = nextToken(); + while (token !== 20 /* CloseBraceToken */ && token !== 1 /* EndOfFileToken */) { + token = nextToken(); + } + if (token === 20 /* CloseBraceToken */) { + token = nextToken(); + if (token === 161 /* FromKeyword */) { + token = nextToken(); + if (token === 11 /* StringLiteral */) { + recordModuleName(); + } + } + } + } else if (token === 42 /* AsteriskToken */) { + token = nextToken(); + if (token === 161 /* FromKeyword */) { + token = nextToken(); + if (token === 11 /* StringLiteral */) { + recordModuleName(); + } + } + } else if (token === 102 /* ImportKeyword */) { + token = nextToken(); + if (token === 156 /* TypeKeyword */) { + const skipTypeKeyword = scanner.lookAhead(() => { + const token2 = scanner.scan(); + return token2 === 80 /* Identifier */ || isKeyword(token2); + }); + if (skipTypeKeyword) { + token = nextToken(); + } + } + if (token === 80 /* Identifier */ || isKeyword(token)) { + token = nextToken(); + if (token === 64 /* EqualsToken */) { + if (tryConsumeRequireCall( + /*skipCurrentToken*/ + true + )) { + return true; + } + } + } + } + return true; + } + return false; + } + function tryConsumeRequireCall(skipCurrentToken, allowTemplateLiterals = false) { + let token = skipCurrentToken ? nextToken() : scanner.getToken(); + if (token === 149 /* RequireKeyword */) { + token = nextToken(); + if (token === 21 /* OpenParenToken */) { + token = nextToken(); + if (token === 11 /* StringLiteral */ || allowTemplateLiterals && token === 15 /* NoSubstitutionTemplateLiteral */) { + recordModuleName(); + } + } + return true; + } + return false; + } + function tryConsumeDefine() { + let token = scanner.getToken(); + if (token === 80 /* Identifier */ && scanner.getTokenValue() === "define") { + token = nextToken(); + if (token !== 21 /* OpenParenToken */) { + return true; + } + token = nextToken(); + if (token === 11 /* StringLiteral */ || token === 15 /* NoSubstitutionTemplateLiteral */) { + token = nextToken(); + if (token === 28 /* CommaToken */) { + token = nextToken(); + } else { + return true; + } + } + if (token !== 23 /* OpenBracketToken */) { + return true; + } + token = nextToken(); + while (token !== 24 /* CloseBracketToken */ && token !== 1 /* EndOfFileToken */) { + if (token === 11 /* StringLiteral */ || token === 15 /* NoSubstitutionTemplateLiteral */) { + recordModuleName(); + } + token = nextToken(); + } + return true; + } + return false; + } + function processImports() { + scanner.setText(sourceText); + nextToken(); + while (true) { + if (scanner.getToken() === 1 /* EndOfFileToken */) { + break; + } + if (scanner.getToken() === 16 /* TemplateHead */) { + const stack = [scanner.getToken()]; + loop: + while (length(stack)) { + const token = scanner.scan(); + switch (token) { + case 1 /* EndOfFileToken */: + break loop; + case 102 /* ImportKeyword */: + tryConsumeImport(); + break; + case 16 /* TemplateHead */: + stack.push(token); + break; + case 19 /* OpenBraceToken */: + if (length(stack)) { + stack.push(token); + } + break; + case 20 /* CloseBraceToken */: + if (length(stack)) { + if (lastOrUndefined(stack) === 16 /* TemplateHead */) { + if (scanner.reScanTemplateToken( + /*isTaggedTemplate*/ + false + ) === 18 /* TemplateTail */) { + stack.pop(); + } + } else { + stack.pop(); + } + } + break; + } + } + nextToken(); + } + if (tryConsumeDeclare() || tryConsumeImport() || tryConsumeExport() || detectJavaScriptImports && (tryConsumeRequireCall( + /*skipCurrentToken*/ + false, + /*allowTemplateLiterals*/ + true + ) || tryConsumeDefine())) { + continue; + } else { + nextToken(); + } + } + scanner.setText(void 0); + } + if (readImportFiles) { + processImports(); + } + processCommentPragmas(pragmaContext, sourceText); + processPragmasIntoFields(pragmaContext, noop); + if (externalModule) { + if (ambientExternalModules) { + for (const decl of ambientExternalModules) { + importedFiles.push(decl.ref); + } + } + return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles, isLibFile: !!pragmaContext.hasNoDefaultLib, ambientExternalModules: void 0 }; + } else { + let ambientModuleNames; + if (ambientExternalModules) { + for (const decl of ambientExternalModules) { + if (decl.depth === 0) { + if (!ambientModuleNames) { + ambientModuleNames = []; + } + ambientModuleNames.push(decl.ref.fileName); + } else { + importedFiles.push(decl.ref); + } + } + } + return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles, isLibFile: !!pragmaContext.hasNoDefaultLib, ambientExternalModules: ambientModuleNames }; + } +} + +// src/services/sourcemaps.ts +var base64UrlRegExp = /^data:(?:application\/json;charset=[uU][tT][fF]-8;base64,([A-Za-z0-9+/=]+)$)?/; +function getSourceMapper(host) { + const getCanonicalFileName = createGetCanonicalFileName(host.useCaseSensitiveFileNames()); + const currentDirectory = host.getCurrentDirectory(); + const sourceFileLike = /* @__PURE__ */ new Map(); + const documentPositionMappers = /* @__PURE__ */ new Map(); + return { + tryGetSourcePosition, + tryGetGeneratedPosition, + toLineColumnOffset, + clearCache, + documentPositionMappers + }; + function toPath3(fileName) { + return toPath(fileName, currentDirectory, getCanonicalFileName); + } + function getDocumentPositionMapper2(generatedFileName, sourceFileName) { + const path = toPath3(generatedFileName); + const value = documentPositionMappers.get(path); + if (value) return value; + let mapper; + if (host.getDocumentPositionMapper) { + mapper = host.getDocumentPositionMapper(generatedFileName, sourceFileName); + } else if (host.readFile) { + const file = getSourceFileLike(generatedFileName); + mapper = file && getDocumentPositionMapper( + { getSourceFileLike, getCanonicalFileName, log: (s) => host.log(s) }, + generatedFileName, + getLineInfo(file.text, getLineStarts(file)), + (f) => !host.fileExists || host.fileExists(f) ? host.readFile(f) : void 0 + ); + } + documentPositionMappers.set(path, mapper || identitySourceMapConsumer); + return mapper || identitySourceMapConsumer; + } + function tryGetSourcePosition(info) { + if (!isDeclarationFileName(info.fileName)) return void 0; + const file = getSourceFile(info.fileName); + if (!file) return void 0; + const newLoc = getDocumentPositionMapper2(info.fileName).getSourcePosition(info); + return !newLoc || newLoc === info ? void 0 : tryGetSourcePosition(newLoc) || newLoc; + } + function tryGetGeneratedPosition(info) { + if (isDeclarationFileName(info.fileName)) return void 0; + const sourceFile = getSourceFile(info.fileName); + if (!sourceFile) return void 0; + const program = host.getProgram(); + if (program.isSourceOfProjectReferenceRedirect(sourceFile.fileName)) { + return void 0; + } + const options = program.getCompilerOptions(); + const outPath = options.outFile; + const declarationPath = outPath ? removeFileExtension(outPath) + ".d.ts" /* Dts */ : getDeclarationEmitOutputFilePathWorker(info.fileName, program.getCompilerOptions(), program); + if (declarationPath === void 0) return void 0; + const newLoc = getDocumentPositionMapper2(declarationPath, info.fileName).getGeneratedPosition(info); + return newLoc === info ? void 0 : newLoc; + } + function getSourceFile(fileName) { + const program = host.getProgram(); + if (!program) return void 0; + const path = toPath3(fileName); + const file = program.getSourceFileByPath(path); + return file && file.resolvedPath === path ? file : void 0; + } + function getOrCreateSourceFileLike(fileName) { + const path = toPath3(fileName); + const fileFromCache = sourceFileLike.get(path); + if (fileFromCache !== void 0) return fileFromCache ? fileFromCache : void 0; + if (!host.readFile || host.fileExists && !host.fileExists(fileName)) { + sourceFileLike.set(path, false); + return void 0; + } + const text = host.readFile(fileName); + const file = text ? createSourceFileLike(text) : false; + sourceFileLike.set(path, file); + return file ? file : void 0; + } + function getSourceFileLike(fileName) { + return !host.getSourceFileLike ? getSourceFile(fileName) || getOrCreateSourceFileLike(fileName) : host.getSourceFileLike(fileName); + } + function toLineColumnOffset(fileName, position) { + const file = getSourceFileLike(fileName); + return file.getLineAndCharacterOfPosition(position); + } + function clearCache() { + sourceFileLike.clear(); + documentPositionMappers.clear(); + } +} +function getDocumentPositionMapper(host, generatedFileName, generatedFileLineInfo, readMapFile) { + let mapFileName = tryGetSourceMappingURL(generatedFileLineInfo); + if (mapFileName) { + const match = base64UrlRegExp.exec(mapFileName); + if (match) { + if (match[1]) { + const base64Object = match[1]; + return convertDocumentToSourceMapper(host, base64decode(sys, base64Object), generatedFileName); + } + mapFileName = void 0; + } + } + const possibleMapLocations = []; + if (mapFileName) { + possibleMapLocations.push(mapFileName); + } + possibleMapLocations.push(generatedFileName + ".map"); + const originalMapFileName = mapFileName && getNormalizedAbsolutePath(mapFileName, getDirectoryPath(generatedFileName)); + for (const location of possibleMapLocations) { + const mapFileName2 = getNormalizedAbsolutePath(location, getDirectoryPath(generatedFileName)); + const mapFileContents = readMapFile(mapFileName2, originalMapFileName); + if (isString(mapFileContents)) { + return convertDocumentToSourceMapper(host, mapFileContents, mapFileName2); + } + if (mapFileContents !== void 0) { + return mapFileContents || void 0; + } + } + return void 0; +} +function convertDocumentToSourceMapper(host, contents, mapFileName) { + const map2 = tryParseRawSourceMap(contents); + if (!map2 || !map2.sources || !map2.file || !map2.mappings) { + return void 0; + } + if (map2.sourcesContent && map2.sourcesContent.some(isString)) return void 0; + return createDocumentPositionMapper(host, map2, mapFileName); +} +function createSourceFileLike(text, lineMap) { + return { + text, + lineMap, + getLineAndCharacterOfPosition(pos) { + return computeLineAndCharacterOfPosition(getLineStarts(this), pos); + } + }; +} + +// src/services/suggestionDiagnostics.ts +var visitedNestedConvertibleFunctions = /* @__PURE__ */ new Map(); +function computeSuggestionDiagnostics(sourceFile, program, cancellationToken) { + var _a; + program.getSemanticDiagnostics(sourceFile, cancellationToken); + const diags = []; + const checker = program.getTypeChecker(); + const isCommonJSFile = program.getImpliedNodeFormatForEmit(sourceFile) === 1 /* CommonJS */ || fileExtensionIsOneOf(sourceFile.fileName, [".cts" /* Cts */, ".cjs" /* Cjs */]); + if (!isCommonJSFile && sourceFile.commonJsModuleIndicator && (programContainsEsModules(program) || compilerOptionsIndicateEsModules(program.getCompilerOptions())) && containsTopLevelCommonjs(sourceFile)) { + diags.push(createDiagnosticForNode(getErrorNodeFromCommonJsIndicator(sourceFile.commonJsModuleIndicator), Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module)); + } + const isJsFile = isSourceFileJS(sourceFile); + visitedNestedConvertibleFunctions.clear(); + check(sourceFile); + if (getAllowSyntheticDefaultImports(program.getCompilerOptions())) { + for (const moduleSpecifier of sourceFile.imports) { + const importNode = importFromModuleSpecifier(moduleSpecifier); + if (isImportEqualsDeclaration(importNode) && hasSyntacticModifier(importNode, 32 /* Export */)) continue; + const name = importNameForConvertToDefaultImport(importNode); + if (!name) continue; + const module2 = (_a = program.getResolvedModuleFromModuleSpecifier(moduleSpecifier, sourceFile)) == null ? void 0 : _a.resolvedModule; + const resolvedFile = module2 && program.getSourceFile(module2.resolvedFileName); + if (resolvedFile && resolvedFile.externalModuleIndicator && resolvedFile.externalModuleIndicator !== true && isExportAssignment(resolvedFile.externalModuleIndicator) && resolvedFile.externalModuleIndicator.isExportEquals) { + diags.push(createDiagnosticForNode(name, Diagnostics.Import_may_be_converted_to_a_default_import)); + } + } + } + addRange(diags, sourceFile.bindSuggestionDiagnostics); + addRange(diags, program.getSuggestionDiagnostics(sourceFile, cancellationToken)); + diags.sort((d1, d2) => d1.start - d2.start); + return diags; + function check(node) { + if (isJsFile) { + if (canBeConvertedToClass(node, checker)) { + diags.push(createDiagnosticForNode(isVariableDeclaration(node.parent) ? node.parent.name : node, Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration)); + } + } else { + if (isVariableStatement(node) && node.parent === sourceFile && node.declarationList.flags & 2 /* Const */ && node.declarationList.declarations.length === 1) { + const init = node.declarationList.declarations[0].initializer; + if (init && isRequireCall( + init, + /*requireStringLiteralLikeArgument*/ + true + )) { + diags.push(createDiagnosticForNode(init, Diagnostics.require_call_may_be_converted_to_an_import)); + } + } + const jsdocTypedefNodes = ts_codefix_exports.getJSDocTypedefNodes(node); + for (const jsdocTypedefNode of jsdocTypedefNodes) { + diags.push(createDiagnosticForNode(jsdocTypedefNode, Diagnostics.JSDoc_typedef_may_be_converted_to_TypeScript_type)); + } + if (ts_codefix_exports.parameterShouldGetTypeFromJSDoc(node)) { + diags.push(createDiagnosticForNode(node.name || node, Diagnostics.JSDoc_types_may_be_moved_to_TypeScript_types)); + } + } + if (canBeConvertedToAsync(node)) { + addConvertToAsyncFunctionDiagnostics(node, checker, diags); + } + node.forEachChild(check); + } +} +function containsTopLevelCommonjs(sourceFile) { + return sourceFile.statements.some((statement) => { + switch (statement.kind) { + case 244 /* VariableStatement */: + return statement.declarationList.declarations.some((decl) => !!decl.initializer && isRequireCall( + propertyAccessLeftHandSide(decl.initializer), + /*requireStringLiteralLikeArgument*/ + true + )); + case 245 /* ExpressionStatement */: { + const { expression } = statement; + if (!isBinaryExpression(expression)) return isRequireCall( + expression, + /*requireStringLiteralLikeArgument*/ + true + ); + const kind = getAssignmentDeclarationKind(expression); + return kind === 1 /* ExportsProperty */ || kind === 2 /* ModuleExports */; + } + default: + return false; + } + }); +} +function propertyAccessLeftHandSide(node) { + return isPropertyAccessExpression(node) ? propertyAccessLeftHandSide(node.expression) : node; +} +function importNameForConvertToDefaultImport(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + const { importClause, moduleSpecifier } = node; + return importClause && !importClause.name && importClause.namedBindings && importClause.namedBindings.kind === 275 /* NamespaceImport */ && isStringLiteral(moduleSpecifier) ? importClause.namedBindings.name : void 0; + case 272 /* ImportEqualsDeclaration */: + return node.name; + default: + return void 0; + } +} +function addConvertToAsyncFunctionDiagnostics(node, checker, diags) { + if (isConvertibleFunction(node, checker) && !visitedNestedConvertibleFunctions.has(getKeyFromNode(node))) { + diags.push(createDiagnosticForNode( + !node.name && isVariableDeclaration(node.parent) && isIdentifier(node.parent.name) ? node.parent.name : node, + Diagnostics.This_may_be_converted_to_an_async_function + )); + } +} +function isConvertibleFunction(node, checker) { + return !isAsyncFunction(node) && node.body && isBlock(node.body) && hasReturnStatementWithPromiseHandler(node.body, checker) && returnsPromise(node, checker); +} +function returnsPromise(node, checker) { + const signature = checker.getSignatureFromDeclaration(node); + const returnType = signature ? checker.getReturnTypeOfSignature(signature) : void 0; + return !!returnType && !!checker.getPromisedTypeOfPromise(returnType); +} +function getErrorNodeFromCommonJsIndicator(commonJsModuleIndicator) { + return isBinaryExpression(commonJsModuleIndicator) ? commonJsModuleIndicator.left : commonJsModuleIndicator; +} +function hasReturnStatementWithPromiseHandler(body, checker) { + return !!forEachReturnStatement(body, (statement) => isReturnStatementWithFixablePromiseHandler(statement, checker)); +} +function isReturnStatementWithFixablePromiseHandler(node, checker) { + return isReturnStatement(node) && !!node.expression && isFixablePromiseHandler(node.expression, checker); +} +function isFixablePromiseHandler(node, checker) { + if (!isPromiseHandler(node) || !hasSupportedNumberOfArguments(node) || !node.arguments.every((arg) => isFixablePromiseArgument(arg, checker))) { + return false; + } + let currentNode = node.expression.expression; + while (isPromiseHandler(currentNode) || isPropertyAccessExpression(currentNode)) { + if (isCallExpression(currentNode)) { + if (!hasSupportedNumberOfArguments(currentNode) || !currentNode.arguments.every((arg) => isFixablePromiseArgument(arg, checker))) { + return false; + } + currentNode = currentNode.expression.expression; + } else { + currentNode = currentNode.expression; + } + } + return true; +} +function isPromiseHandler(node) { + return isCallExpression(node) && (hasPropertyAccessExpressionWithName(node, "then") || hasPropertyAccessExpressionWithName(node, "catch") || hasPropertyAccessExpressionWithName(node, "finally")); +} +function hasSupportedNumberOfArguments(node) { + const name = node.expression.name.text; + const maxArguments = name === "then" ? 2 : name === "catch" ? 1 : name === "finally" ? 1 : 0; + if (node.arguments.length > maxArguments) return false; + if (node.arguments.length < maxArguments) return true; + return maxArguments === 1 || some(node.arguments, (arg) => { + return arg.kind === 106 /* NullKeyword */ || isIdentifier(arg) && arg.text === "undefined"; + }); +} +function isFixablePromiseArgument(arg, checker) { + switch (arg.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + const functionFlags = getFunctionFlags(arg); + if (functionFlags & 1 /* Generator */) { + return false; + } + // falls through + case 220 /* ArrowFunction */: + visitedNestedConvertibleFunctions.set(getKeyFromNode(arg), true); + // falls through + case 106 /* NullKeyword */: + return true; + case 80 /* Identifier */: + case 212 /* PropertyAccessExpression */: { + const symbol = checker.getSymbolAtLocation(arg); + if (!symbol) { + return false; + } + return checker.isUndefinedSymbol(symbol) || some(skipAlias(symbol, checker).declarations, (d) => isFunctionLike(d) || hasInitializer(d) && !!d.initializer && isFunctionLike(d.initializer)); + } + default: + return false; + } +} +function getKeyFromNode(exp) { + return `${exp.pos.toString()}:${exp.end.toString()}`; +} +function canBeConvertedToClass(node, checker) { + var _a, _b, _c, _d; + if (isFunctionExpression(node)) { + if (isVariableDeclaration(node.parent) && ((_a = node.symbol.members) == null ? void 0 : _a.size)) { + return true; + } + const symbol = checker.getSymbolOfExpando( + node, + /*allowDeclaration*/ + false + ); + return !!(symbol && (((_b = symbol.exports) == null ? void 0 : _b.size) || ((_c = symbol.members) == null ? void 0 : _c.size))); + } + if (isFunctionDeclaration(node)) { + return !!((_d = node.symbol.members) == null ? void 0 : _d.size); + } + return false; +} +function canBeConvertedToAsync(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return true; + default: + return false; + } +} + +// src/services/transpile.ts +var optionsRedundantWithVerbatimModuleSyntax = /* @__PURE__ */ new Set([ + "isolatedModules" +]); +function transpileModule(input, transpileOptions) { + return transpileWorker( + input, + transpileOptions, + /*declaration*/ + false + ); +} +function transpileDeclaration(input, transpileOptions) { + return transpileWorker( + input, + transpileOptions, + /*declaration*/ + true + ); +} +var barebonesLibContent = `/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number {} +interface Object {} +interface RegExp {} +interface String {} +interface Array { length: number; [n: number]: T; } +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +}`; +var barebonesLibName = "lib.d.ts"; +var barebonesLibSourceFile; +function transpileWorker(input, transpileOptions, declaration) { + barebonesLibSourceFile ?? (barebonesLibSourceFile = createSourceFile(barebonesLibName, barebonesLibContent, { languageVersion: 99 /* Latest */ })); + const diagnostics = []; + const options = transpileOptions.compilerOptions ? fixupCompilerOptions(transpileOptions.compilerOptions, diagnostics) : {}; + const defaultOptions = getDefaultCompilerOptions2(); + for (const key in defaultOptions) { + if (hasProperty(defaultOptions, key) && options[key] === void 0) { + options[key] = defaultOptions[key]; + } + } + for (const option of transpileOptionValueCompilerOptions) { + if (options.verbatimModuleSyntax && optionsRedundantWithVerbatimModuleSyntax.has(option.name)) { + continue; + } + options[option.name] = option.transpileOptionValue; + } + options.suppressOutputPathCheck = true; + options.allowNonTsExtensions = true; + if (declaration) { + options.declaration = true; + options.emitDeclarationOnly = true; + options.isolatedDeclarations = true; + } else { + options.declaration = false; + options.declarationMap = false; + } + const newLine = getNewLineCharacter(options); + const compilerHost = { + getSourceFile: (fileName) => fileName === normalizePath(inputFileName) ? sourceFile : fileName === normalizePath(barebonesLibName) ? barebonesLibSourceFile : void 0, + writeFile: (name, text) => { + if (fileExtensionIs(name, ".map")) { + Debug.assertEqual(sourceMapText, void 0, "Unexpected multiple source map outputs, file:", name); + sourceMapText = text; + } else { + Debug.assertEqual(outputText, void 0, "Unexpected multiple outputs, file:", name); + outputText = text; + } + }, + getDefaultLibFileName: () => barebonesLibName, + useCaseSensitiveFileNames: () => false, + getCanonicalFileName: (fileName) => fileName, + getCurrentDirectory: () => "", + getNewLine: () => newLine, + fileExists: (fileName) => fileName === inputFileName || !!declaration && fileName === barebonesLibName, + readFile: () => "", + directoryExists: () => true, + getDirectories: () => [] + }; + const inputFileName = transpileOptions.fileName || (transpileOptions.compilerOptions && transpileOptions.compilerOptions.jsx ? "module.tsx" : "module.ts"); + const sourceFile = createSourceFile( + inputFileName, + input, + { + languageVersion: getEmitScriptTarget(options), + impliedNodeFormat: getImpliedNodeFormatForFile( + toPath(inputFileName, "", compilerHost.getCanonicalFileName), + /*packageJsonInfoCache*/ + void 0, + compilerHost, + options + ), + setExternalModuleIndicator: getSetExternalModuleIndicator(options), + jsDocParsingMode: transpileOptions.jsDocParsingMode ?? 0 /* ParseAll */ + } + ); + if (transpileOptions.moduleName) { + sourceFile.moduleName = transpileOptions.moduleName; + } + if (transpileOptions.renamedDependencies) { + sourceFile.renamedDependencies = new Map(Object.entries(transpileOptions.renamedDependencies)); + } + let outputText; + let sourceMapText; + const inputs = declaration ? [inputFileName, barebonesLibName] : [inputFileName]; + const program = createProgram(inputs, options, compilerHost); + if (transpileOptions.reportDiagnostics) { + addRange( + /*to*/ + diagnostics, + /*from*/ + program.getSyntacticDiagnostics(sourceFile) + ); + addRange( + /*to*/ + diagnostics, + /*from*/ + program.getOptionsDiagnostics() + ); + } + const result = program.emit( + /*targetSourceFile*/ + void 0, + /*writeFile*/ + void 0, + /*cancellationToken*/ + void 0, + /*emitOnlyDtsFiles*/ + declaration, + transpileOptions.transformers, + /*forceDtsEmit*/ + declaration + ); + addRange( + /*to*/ + diagnostics, + /*from*/ + result.diagnostics + ); + if (outputText === void 0) return Debug.fail("Output generation failed"); + return { outputText, diagnostics, sourceMapText }; +} +function transpile(input, compilerOptions, fileName, diagnostics, moduleName) { + const output = transpileModule(input, { compilerOptions, fileName, reportDiagnostics: !!diagnostics, moduleName }); + addRange(diagnostics, output.diagnostics); + return output.outputText; +} +var commandLineOptionsStringToEnum; +function fixupCompilerOptions(options, diagnostics) { + commandLineOptionsStringToEnum = commandLineOptionsStringToEnum || filter(optionDeclarations, (o) => typeof o.type === "object" && !forEachEntry(o.type, (v) => typeof v !== "number")); + options = cloneCompilerOptions(options); + for (const opt of commandLineOptionsStringToEnum) { + if (!hasProperty(options, opt.name)) { + continue; + } + const value = options[opt.name]; + if (isString(value)) { + options[opt.name] = parseCustomTypeOption(opt, value, diagnostics); + } else { + if (!forEachEntry(opt.type, (v) => v === value)) { + diagnostics.push(createCompilerDiagnosticForInvalidCustomType(opt)); + } + } + } + return options; +} + +// src/services/_namespaces/ts.NavigateTo.ts +var ts_NavigateTo_exports = {}; +__export(ts_NavigateTo_exports, { + getNavigateToItems: () => getNavigateToItems +}); + +// src/services/navigateTo.ts +function getNavigateToItems(sourceFiles, checker, cancellationToken, searchValue, maxResultCount, excludeDtsFiles, excludeLibFiles) { + const patternMatcher = createPatternMatcher(searchValue); + if (!patternMatcher) return emptyArray; + const rawItems = []; + const singleCurrentFile = sourceFiles.length === 1 ? sourceFiles[0] : void 0; + for (const sourceFile of sourceFiles) { + cancellationToken.throwIfCancellationRequested(); + if (excludeDtsFiles && sourceFile.isDeclarationFile) { + continue; + } + if (shouldExcludeFile(sourceFile, !!excludeLibFiles, singleCurrentFile)) { + continue; + } + sourceFile.getNamedDeclarations().forEach((declarations, name) => { + getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, sourceFile.fileName, !!excludeLibFiles, singleCurrentFile, rawItems); + }); + } + rawItems.sort(compareNavigateToItems); + return (maxResultCount === void 0 ? rawItems : rawItems.slice(0, maxResultCount)).map(createNavigateToItem); +} +function shouldExcludeFile(file, excludeLibFiles, singleCurrentFile) { + return file !== singleCurrentFile && excludeLibFiles && (isInsideNodeModules(file.path) || file.hasNoDefaultLib); +} +function getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, fileName, excludeLibFiles, singleCurrentFile, rawItems) { + const match = patternMatcher.getMatchForLastSegmentOfPattern(name); + if (!match) { + return; + } + for (const declaration of declarations) { + if (!shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile)) continue; + if (patternMatcher.patternContainsDots) { + const fullMatch = patternMatcher.getFullMatch(getContainers(declaration), name); + if (fullMatch) { + rawItems.push({ name, fileName, matchKind: fullMatch.kind, isCaseSensitive: fullMatch.isCaseSensitive, declaration }); + } + } else { + rawItems.push({ name, fileName, matchKind: match.kind, isCaseSensitive: match.isCaseSensitive, declaration }); + } + } +} +function shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile) { + var _a; + switch (declaration.kind) { + case 274 /* ImportClause */: + case 277 /* ImportSpecifier */: + case 272 /* ImportEqualsDeclaration */: + const importer = checker.getSymbolAtLocation(declaration.name); + const imported = checker.getAliasedSymbol(importer); + return importer.escapedName !== imported.escapedName && !((_a = imported.declarations) == null ? void 0 : _a.every((d) => shouldExcludeFile(d.getSourceFile(), excludeLibFiles, singleCurrentFile))); + default: + return true; + } +} +function tryAddSingleDeclarationName(declaration, containers) { + const name = getNameOfDeclaration(declaration); + return !!name && (pushLiteral(name, containers) || name.kind === 168 /* ComputedPropertyName */ && tryAddComputedPropertyName(name.expression, containers)); +} +function tryAddComputedPropertyName(expression, containers) { + return pushLiteral(expression, containers) || isPropertyAccessExpression(expression) && (containers.push(expression.name.text), true) && tryAddComputedPropertyName(expression.expression, containers); +} +function pushLiteral(node, containers) { + return isPropertyNameLiteral(node) && (containers.push(getTextOfIdentifierOrLiteral(node)), true); +} +function getContainers(declaration) { + const containers = []; + const name = getNameOfDeclaration(declaration); + if (name && name.kind === 168 /* ComputedPropertyName */ && !tryAddComputedPropertyName(name.expression, containers)) { + return emptyArray; + } + containers.shift(); + let container = getContainerNode(declaration); + while (container) { + if (!tryAddSingleDeclarationName(container, containers)) { + return emptyArray; + } + container = getContainerNode(container); + } + containers.reverse(); + return containers; +} +function compareNavigateToItems(i1, i2) { + return compareValues(i1.matchKind, i2.matchKind) || compareStringsCaseSensitiveUI(i1.name, i2.name); +} +function createNavigateToItem(rawItem) { + const declaration = rawItem.declaration; + const container = getContainerNode(declaration); + const containerName = container && getNameOfDeclaration(container); + return { + name: rawItem.name, + kind: getNodeKind(declaration), + kindModifiers: getNodeModifiers(declaration), + matchKind: PatternMatchKind[rawItem.matchKind], + isCaseSensitive: rawItem.isCaseSensitive, + fileName: rawItem.fileName, + textSpan: createTextSpanFromNode(declaration), + // TODO(jfreeman): What should be the containerName when the container has a computed name? + containerName: containerName ? containerName.text : "", + containerKind: containerName ? getNodeKind(container) : "" /* unknown */ + }; +} + +// src/services/_namespaces/ts.NavigationBar.ts +var ts_NavigationBar_exports = {}; +__export(ts_NavigationBar_exports, { + getNavigationBarItems: () => getNavigationBarItems, + getNavigationTree: () => getNavigationTree +}); + +// src/services/navigationBar.ts +var whiteSpaceRegex = /\s+/g; +var maxLength = 150; +var curCancellationToken; +var curSourceFile; +var parentsStack = []; +var parent; +var trackedEs5ClassesStack = []; +var trackedEs5Classes; +var emptyChildItemArray = []; +function getNavigationBarItems(sourceFile, cancellationToken) { + curCancellationToken = cancellationToken; + curSourceFile = sourceFile; + try { + return map(primaryNavBarMenuItems(rootNavigationBarNode(sourceFile)), convertToPrimaryNavBarMenuItem); + } finally { + reset(); + } +} +function getNavigationTree(sourceFile, cancellationToken) { + curCancellationToken = cancellationToken; + curSourceFile = sourceFile; + try { + return convertToTree(rootNavigationBarNode(sourceFile)); + } finally { + reset(); + } +} +function reset() { + curSourceFile = void 0; + curCancellationToken = void 0; + parentsStack = []; + parent = void 0; + emptyChildItemArray = []; +} +function nodeText(node) { + return cleanText(node.getText(curSourceFile)); +} +function navigationBarNodeKind(n) { + return n.node.kind; +} +function pushChild(parent2, child) { + if (parent2.children) { + parent2.children.push(child); + } else { + parent2.children = [child]; + } +} +function rootNavigationBarNode(sourceFile) { + Debug.assert(!parentsStack.length); + const root = { node: sourceFile, name: void 0, additionalNodes: void 0, parent: void 0, children: void 0, indent: 0 }; + parent = root; + for (const statement of sourceFile.statements) { + addChildrenRecursively(statement); + } + endNode(); + Debug.assert(!parent && !parentsStack.length); + return root; +} +function addLeafNode(node, name) { + pushChild(parent, emptyNavigationBarNode(node, name)); +} +function emptyNavigationBarNode(node, name) { + return { + node, + name: name || (isDeclaration(node) || isExpression(node) ? getNameOfDeclaration(node) : void 0), + additionalNodes: void 0, + parent, + children: void 0, + indent: parent.indent + 1 + }; +} +function addTrackedEs5Class(name) { + if (!trackedEs5Classes) { + trackedEs5Classes = /* @__PURE__ */ new Map(); + } + trackedEs5Classes.set(name, true); +} +function endNestedNodes(depth) { + for (let i = 0; i < depth; i++) endNode(); +} +function startNestedNodes(targetNode, entityName) { + const names = []; + while (!isPropertyNameLiteral(entityName)) { + const name = getNameOrArgument(entityName); + const nameText = getElementOrPropertyAccessName(entityName); + entityName = entityName.expression; + if (nameText === "prototype" || isPrivateIdentifier(name)) continue; + names.push(name); + } + names.push(entityName); + for (let i = names.length - 1; i > 0; i--) { + const name = names[i]; + startNode(targetNode, name); + } + return [names.length - 1, names[0]]; +} +function startNode(node, name) { + const navNode = emptyNavigationBarNode(node, name); + pushChild(parent, navNode); + parentsStack.push(parent); + trackedEs5ClassesStack.push(trackedEs5Classes); + trackedEs5Classes = void 0; + parent = navNode; +} +function endNode() { + if (parent.children) { + mergeChildren(parent.children, parent); + sortChildren(parent.children); + } + parent = parentsStack.pop(); + trackedEs5Classes = trackedEs5ClassesStack.pop(); +} +function addNodeWithRecursiveChild(node, child, name) { + startNode(node, name); + addChildrenRecursively(child); + endNode(); +} +function addNodeWithRecursiveInitializer(node) { + if (node.initializer && isFunctionOrClassExpression(node.initializer)) { + startNode(node); + forEachChild(node.initializer, addChildrenRecursively); + endNode(); + } else { + addNodeWithRecursiveChild(node, node.initializer); + } +} +function hasNavigationBarName(node) { + const name = getNameOfDeclaration(node); + if (name === void 0) return false; + if (isComputedPropertyName(name)) { + const expression = name.expression; + return isEntityNameExpression(expression) || isNumericLiteral(expression) || isStringOrNumericLiteralLike(expression); + } + return !!name; +} +function addChildrenRecursively(node) { + curCancellationToken.throwIfCancellationRequested(); + if (!node || isToken(node)) { + return; + } + switch (node.kind) { + case 177 /* Constructor */: + const ctr = node; + addNodeWithRecursiveChild(ctr, ctr.body); + for (const param of ctr.parameters) { + if (isParameterPropertyDeclaration(param, ctr)) { + addLeafNode(param); + } + } + break; + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 174 /* MethodSignature */: + if (hasNavigationBarName(node)) { + addNodeWithRecursiveChild(node, node.body); + } + break; + case 173 /* PropertyDeclaration */: + if (hasNavigationBarName(node)) { + addNodeWithRecursiveInitializer(node); + } + break; + case 172 /* PropertySignature */: + if (hasNavigationBarName(node)) { + addLeafNode(node); + } + break; + case 274 /* ImportClause */: + const importClause = node; + if (importClause.name) { + addLeafNode(importClause.name); + } + const { namedBindings } = importClause; + if (namedBindings) { + if (namedBindings.kind === 275 /* NamespaceImport */) { + addLeafNode(namedBindings); + } else { + for (const element of namedBindings.elements) { + addLeafNode(element); + } + } + } + break; + case 305 /* ShorthandPropertyAssignment */: + addNodeWithRecursiveChild(node, node.name); + break; + case 306 /* SpreadAssignment */: + const { expression } = node; + isIdentifier(expression) ? addLeafNode(node, expression) : addLeafNode(node); + break; + case 209 /* BindingElement */: + case 304 /* PropertyAssignment */: + case 261 /* VariableDeclaration */: { + const child = node; + if (isBindingPattern(child.name)) { + addChildrenRecursively(child.name); + } else { + addNodeWithRecursiveInitializer(child); + } + break; + } + case 263 /* FunctionDeclaration */: + const nameNode = node.name; + if (nameNode && isIdentifier(nameNode)) { + addTrackedEs5Class(nameNode.text); + } + addNodeWithRecursiveChild(node, node.body); + break; + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + addNodeWithRecursiveChild(node, node.body); + break; + case 267 /* EnumDeclaration */: + startNode(node); + for (const member of node.members) { + if (!isComputedProperty(member)) { + addLeafNode(member); + } + } + endNode(); + break; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + startNode(node); + for (const member of node.members) { + addChildrenRecursively(member); + } + endNode(); + break; + case 268 /* ModuleDeclaration */: + addNodeWithRecursiveChild(node, getInteriorModule(node).body); + break; + case 278 /* ExportAssignment */: { + const expression2 = node.expression; + const child = isObjectLiteralExpression(expression2) || isCallExpression(expression2) ? expression2 : isArrowFunction(expression2) || isFunctionExpression(expression2) ? expression2.body : void 0; + if (child) { + startNode(node); + addChildrenRecursively(child); + endNode(); + } else { + addLeafNode(node); + } + break; + } + case 282 /* ExportSpecifier */: + case 272 /* ImportEqualsDeclaration */: + case 182 /* IndexSignature */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 266 /* TypeAliasDeclaration */: + addLeafNode(node); + break; + case 214 /* CallExpression */: + case 227 /* BinaryExpression */: { + const special = getAssignmentDeclarationKind(node); + switch (special) { + case 1 /* ExportsProperty */: + case 2 /* ModuleExports */: + addNodeWithRecursiveChild(node, node.right); + return; + case 6 /* Prototype */: + case 3 /* PrototypeProperty */: { + const binaryExpression = node; + const assignmentTarget = binaryExpression.left; + const prototypeAccess = special === 3 /* PrototypeProperty */ ? assignmentTarget.expression : assignmentTarget; + let depth = 0; + let className; + if (isIdentifier(prototypeAccess.expression)) { + addTrackedEs5Class(prototypeAccess.expression.text); + className = prototypeAccess.expression; + } else { + [depth, className] = startNestedNodes(binaryExpression, prototypeAccess.expression); + } + if (special === 6 /* Prototype */) { + if (isObjectLiteralExpression(binaryExpression.right)) { + if (binaryExpression.right.properties.length > 0) { + startNode(binaryExpression, className); + forEachChild(binaryExpression.right, addChildrenRecursively); + endNode(); + } + } + } else if (isFunctionExpression(binaryExpression.right) || isArrowFunction(binaryExpression.right)) { + addNodeWithRecursiveChild(node, binaryExpression.right, className); + } else { + startNode(binaryExpression, className); + addNodeWithRecursiveChild(node, binaryExpression.right, assignmentTarget.name); + endNode(); + } + endNestedNodes(depth); + return; + } + case 7 /* ObjectDefinePropertyValue */: + case 9 /* ObjectDefinePrototypeProperty */: { + const defineCall = node; + const className = special === 7 /* ObjectDefinePropertyValue */ ? defineCall.arguments[0] : defineCall.arguments[0].expression; + const memberName = defineCall.arguments[1]; + const [depth, classNameIdentifier] = startNestedNodes(node, className); + startNode(node, classNameIdentifier); + startNode(node, setTextRange(factory.createIdentifier(memberName.text), memberName)); + addChildrenRecursively(node.arguments[2]); + endNode(); + endNode(); + endNestedNodes(depth); + return; + } + case 5 /* Property */: { + const binaryExpression = node; + const assignmentTarget = binaryExpression.left; + const targetFunction = assignmentTarget.expression; + if (isIdentifier(targetFunction) && getElementOrPropertyAccessName(assignmentTarget) !== "prototype" && trackedEs5Classes && trackedEs5Classes.has(targetFunction.text)) { + if (isFunctionExpression(binaryExpression.right) || isArrowFunction(binaryExpression.right)) { + addNodeWithRecursiveChild(node, binaryExpression.right, targetFunction); + } else if (isBindableStaticAccessExpression(assignmentTarget)) { + startNode(binaryExpression, targetFunction); + addNodeWithRecursiveChild(binaryExpression.left, binaryExpression.right, getNameOrArgument(assignmentTarget)); + endNode(); + } + return; + } + break; + } + case 4 /* ThisProperty */: + case 0 /* None */: + case 8 /* ObjectDefinePropertyExports */: + break; + default: + Debug.assertNever(special); + } + } + // falls through + default: + if (hasJSDocNodes(node)) { + forEach(node.jsDoc, (jsDoc) => { + forEach(jsDoc.tags, (tag) => { + if (isJSDocTypeAlias(tag)) { + addLeafNode(tag); + } + }); + }); + } + forEachChild(node, addChildrenRecursively); + } +} +function mergeChildren(children, node) { + const nameToItems = /* @__PURE__ */ new Map(); + filterMutate(children, (child, index) => { + const declName = child.name || getNameOfDeclaration(child.node); + const name = declName && nodeText(declName); + if (!name) { + return true; + } + const itemsWithSameName = nameToItems.get(name); + if (!itemsWithSameName) { + nameToItems.set(name, child); + return true; + } + if (itemsWithSameName instanceof Array) { + for (const itemWithSameName of itemsWithSameName) { + if (tryMerge(itemWithSameName, child, index, node)) { + return false; + } + } + itemsWithSameName.push(child); + return true; + } else { + const itemWithSameName = itemsWithSameName; + if (tryMerge(itemWithSameName, child, index, node)) { + return false; + } + nameToItems.set(name, [itemWithSameName, child]); + return true; + } + }); +} +var isEs5ClassMember = { + [5 /* Property */]: true, + [3 /* PrototypeProperty */]: true, + [7 /* ObjectDefinePropertyValue */]: true, + [9 /* ObjectDefinePrototypeProperty */]: true, + [0 /* None */]: false, + [1 /* ExportsProperty */]: false, + [2 /* ModuleExports */]: false, + [8 /* ObjectDefinePropertyExports */]: false, + [6 /* Prototype */]: true, + [4 /* ThisProperty */]: false +}; +function tryMergeEs5Class(a, b, bIndex, parent2) { + function isPossibleConstructor(node) { + return isFunctionExpression(node) || isFunctionDeclaration(node) || isVariableDeclaration(node); + } + const bAssignmentDeclarationKind = isBinaryExpression(b.node) || isCallExpression(b.node) ? getAssignmentDeclarationKind(b.node) : 0 /* None */; + const aAssignmentDeclarationKind = isBinaryExpression(a.node) || isCallExpression(a.node) ? getAssignmentDeclarationKind(a.node) : 0 /* None */; + if (isEs5ClassMember[bAssignmentDeclarationKind] && isEs5ClassMember[aAssignmentDeclarationKind] || isPossibleConstructor(a.node) && isEs5ClassMember[bAssignmentDeclarationKind] || isPossibleConstructor(b.node) && isEs5ClassMember[aAssignmentDeclarationKind] || isClassDeclaration(a.node) && isSynthesized(a.node) && isEs5ClassMember[bAssignmentDeclarationKind] || isClassDeclaration(b.node) && isEs5ClassMember[aAssignmentDeclarationKind] || isClassDeclaration(a.node) && isSynthesized(a.node) && isPossibleConstructor(b.node) || isClassDeclaration(b.node) && isPossibleConstructor(a.node) && isSynthesized(a.node)) { + let lastANode = a.additionalNodes && lastOrUndefined(a.additionalNodes) || a.node; + if (!isClassDeclaration(a.node) && !isClassDeclaration(b.node) || isPossibleConstructor(a.node) || isPossibleConstructor(b.node)) { + const ctorFunction = isPossibleConstructor(a.node) ? a.node : isPossibleConstructor(b.node) ? b.node : void 0; + if (ctorFunction !== void 0) { + const ctorNode = setTextRange( + factory.createConstructorDeclaration( + /*modifiers*/ + void 0, + [], + /*body*/ + void 0 + ), + ctorFunction + ); + const ctor = emptyNavigationBarNode(ctorNode); + ctor.indent = a.indent + 1; + ctor.children = a.node === ctorFunction ? a.children : b.children; + a.children = a.node === ctorFunction ? concatenate([ctor], b.children || [b]) : concatenate(a.children || [{ ...a }], [ctor]); + } else { + if (a.children || b.children) { + a.children = concatenate(a.children || [{ ...a }], b.children || [b]); + if (a.children) { + mergeChildren(a.children, a); + sortChildren(a.children); + } + } + } + lastANode = a.node = setTextRange( + factory.createClassDeclaration( + /*modifiers*/ + void 0, + a.name || factory.createIdentifier("__class__"), + /*typeParameters*/ + void 0, + /*heritageClauses*/ + void 0, + [] + ), + a.node + ); + } else { + a.children = concatenate(a.children, b.children); + if (a.children) { + mergeChildren(a.children, a); + } + } + const bNode = b.node; + if (parent2.children[bIndex - 1].node.end === lastANode.end) { + setTextRange(lastANode, { pos: lastANode.pos, end: bNode.end }); + } else { + if (!a.additionalNodes) a.additionalNodes = []; + a.additionalNodes.push(setTextRange( + factory.createClassDeclaration( + /*modifiers*/ + void 0, + a.name || factory.createIdentifier("__class__"), + /*typeParameters*/ + void 0, + /*heritageClauses*/ + void 0, + [] + ), + b.node + )); + } + return true; + } + return bAssignmentDeclarationKind === 0 /* None */ ? false : true; +} +function tryMerge(a, b, bIndex, parent2) { + if (tryMergeEs5Class(a, b, bIndex, parent2)) { + return true; + } + if (shouldReallyMerge(a.node, b.node, parent2)) { + merge(a, b); + return true; + } + return false; +} +function shouldReallyMerge(a, b, parent2) { + if (a.kind !== b.kind || a.parent !== b.parent && !(isOwnChild(a, parent2) && isOwnChild(b, parent2))) { + return false; + } + switch (a.kind) { + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return isStatic(a) === isStatic(b); + case 268 /* ModuleDeclaration */: + return areSameModule(a, b) && getFullyQualifiedModuleName(a) === getFullyQualifiedModuleName(b); + default: + return true; + } +} +function isSynthesized(node) { + return !!(node.flags & 16 /* Synthesized */); +} +function isOwnChild(n, parent2) { + if (n.parent === void 0) return false; + const par = isModuleBlock(n.parent) ? n.parent.parent : n.parent; + return par === parent2.node || contains(parent2.additionalNodes, par); +} +function areSameModule(a, b) { + if (!a.body || !b.body) { + return a.body === b.body; + } + return a.body.kind === b.body.kind && (a.body.kind !== 268 /* ModuleDeclaration */ || areSameModule(a.body, b.body)); +} +function merge(target, source) { + target.additionalNodes = target.additionalNodes || []; + target.additionalNodes.push(source.node); + if (source.additionalNodes) { + target.additionalNodes.push(...source.additionalNodes); + } + target.children = concatenate(target.children, source.children); + if (target.children) { + mergeChildren(target.children, target); + sortChildren(target.children); + } +} +function sortChildren(children) { + children.sort(compareChildren); +} +function compareChildren(child1, child2) { + return compareStringsCaseSensitiveUI(tryGetName(child1.node), tryGetName(child2.node)) || compareValues(navigationBarNodeKind(child1), navigationBarNodeKind(child2)); +} +function tryGetName(node) { + if (node.kind === 268 /* ModuleDeclaration */) { + return getModuleName(node); + } + const declName = getNameOfDeclaration(node); + if (declName && isPropertyName(declName)) { + const propertyName = getPropertyNameForPropertyNameNode(declName); + return propertyName && unescapeLeadingUnderscores(propertyName); + } + switch (node.kind) { + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 232 /* ClassExpression */: + return getFunctionOrClassName(node); + default: + return void 0; + } +} +function getItemName(node, name) { + if (node.kind === 268 /* ModuleDeclaration */) { + return cleanText(getModuleName(node)); + } + if (name) { + const text = isIdentifier(name) ? name.text : isElementAccessExpression(name) ? `[${nodeText(name.argumentExpression)}]` : nodeText(name); + if (text.length > 0) { + return cleanText(text); + } + } + switch (node.kind) { + case 308 /* SourceFile */: + const sourceFile = node; + return isExternalModule(sourceFile) ? `"${escapeString(getBaseFileName(removeFileExtension(normalizePath(sourceFile.fileName))))}"` : ""; + case 278 /* ExportAssignment */: + return isExportAssignment(node) && node.isExportEquals ? "export=" /* ExportEquals */ : "default" /* Default */; + case 220 /* ArrowFunction */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + if (getSyntacticModifierFlags(node) & 2048 /* Default */) { + return "default"; + } + return getFunctionOrClassName(node); + case 177 /* Constructor */: + return "constructor"; + case 181 /* ConstructSignature */: + return "new()"; + case 180 /* CallSignature */: + return "()"; + case 182 /* IndexSignature */: + return "[]"; + default: + return ""; + } +} +function primaryNavBarMenuItems(root) { + const primaryNavBarMenuItems2 = []; + function recur(item) { + if (shouldAppearInPrimaryNavBarMenu(item)) { + primaryNavBarMenuItems2.push(item); + if (item.children) { + for (const child of item.children) { + recur(child); + } + } + } + } + recur(root); + return primaryNavBarMenuItems2; + function shouldAppearInPrimaryNavBarMenu(item) { + if (item.children) { + return true; + } + switch (navigationBarNodeKind(item)) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 267 /* EnumDeclaration */: + case 265 /* InterfaceDeclaration */: + case 268 /* ModuleDeclaration */: + case 308 /* SourceFile */: + case 266 /* TypeAliasDeclaration */: + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + return true; + case 220 /* ArrowFunction */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + return isTopLevelFunctionDeclaration(item); + default: + return false; + } + function isTopLevelFunctionDeclaration(item2) { + if (!item2.node.body) { + return false; + } + switch (navigationBarNodeKind(item2.parent)) { + case 269 /* ModuleBlock */: + case 308 /* SourceFile */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + return true; + default: + return false; + } + } + } +} +function convertToTree(n) { + return { + text: getItemName(n.node, n.name), + kind: getNodeKind(n.node), + kindModifiers: getModifiers2(n.node), + spans: getSpans(n), + nameSpan: n.name && getNodeSpan(n.name), + childItems: map(n.children, convertToTree) + }; +} +function convertToPrimaryNavBarMenuItem(n) { + return { + text: getItemName(n.node, n.name), + kind: getNodeKind(n.node), + kindModifiers: getModifiers2(n.node), + spans: getSpans(n), + childItems: map(n.children, convertToSecondaryNavBarMenuItem) || emptyChildItemArray, + indent: n.indent, + bolded: false, + grayed: false + }; + function convertToSecondaryNavBarMenuItem(n2) { + return { + text: getItemName(n2.node, n2.name), + kind: getNodeKind(n2.node), + kindModifiers: getNodeModifiers(n2.node), + spans: getSpans(n2), + childItems: emptyChildItemArray, + indent: 0, + bolded: false, + grayed: false + }; + } +} +function getSpans(n) { + const spans = [getNodeSpan(n.node)]; + if (n.additionalNodes) { + for (const node of n.additionalNodes) { + spans.push(getNodeSpan(node)); + } + } + return spans; +} +function getModuleName(moduleDeclaration) { + if (isAmbientModule(moduleDeclaration)) { + return getTextOfNode(moduleDeclaration.name); + } + return getFullyQualifiedModuleName(moduleDeclaration); +} +function getFullyQualifiedModuleName(moduleDeclaration) { + const result = [getTextOfIdentifierOrLiteral(moduleDeclaration.name)]; + while (moduleDeclaration.body && moduleDeclaration.body.kind === 268 /* ModuleDeclaration */) { + moduleDeclaration = moduleDeclaration.body; + result.push(getTextOfIdentifierOrLiteral(moduleDeclaration.name)); + } + return result.join("."); +} +function getInteriorModule(decl) { + return decl.body && isModuleDeclaration(decl.body) ? getInteriorModule(decl.body) : decl; +} +function isComputedProperty(member) { + return !member.name || member.name.kind === 168 /* ComputedPropertyName */; +} +function getNodeSpan(node) { + return node.kind === 308 /* SourceFile */ ? createTextSpanFromRange(node) : createTextSpanFromNode(node, curSourceFile); +} +function getModifiers2(node) { + if (node.parent && node.parent.kind === 261 /* VariableDeclaration */) { + node = node.parent; + } + return getNodeModifiers(node); +} +function getFunctionOrClassName(node) { + const { parent: parent2 } = node; + if (node.name && getFullWidth(node.name) > 0) { + return cleanText(declarationNameToString(node.name)); + } else if (isVariableDeclaration(parent2)) { + return cleanText(declarationNameToString(parent2.name)); + } else if (isBinaryExpression(parent2) && parent2.operatorToken.kind === 64 /* EqualsToken */) { + return nodeText(parent2.left).replace(whiteSpaceRegex, ""); + } else if (isPropertyAssignment(parent2)) { + return nodeText(parent2.name); + } else if (getSyntacticModifierFlags(node) & 2048 /* Default */) { + return "default"; + } else if (isClassLike(node)) { + return ""; + } else if (isCallExpression(parent2)) { + let name = getCalledExpressionName(parent2.expression); + if (name !== void 0) { + name = cleanText(name); + if (name.length > maxLength) { + return `${name} callback`; + } + const args = cleanText(mapDefined(parent2.arguments, (a) => isStringLiteralLike(a) || isTemplateLiteral(a) ? a.getText(curSourceFile) : void 0).join(", ")); + return `${name}(${args}) callback`; + } + } + return ""; +} +function getCalledExpressionName(expr) { + if (isIdentifier(expr)) { + return expr.text; + } else if (isPropertyAccessExpression(expr)) { + const left = getCalledExpressionName(expr.expression); + const right = expr.name.text; + return left === void 0 ? right : `${left}.${right}`; + } else { + return void 0; + } +} +function isFunctionOrClassExpression(node) { + switch (node.kind) { + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 232 /* ClassExpression */: + return true; + default: + return false; + } +} +function cleanText(text) { + text = text.length > maxLength ? text.substring(0, maxLength) + "..." : text; + return text.replace(/\\?(?:\r?\n|[\r\u2028\u2029])/g, ""); +} + +// src/services/_namespaces/ts.refactor.ts +var ts_refactor_exports = {}; +__export(ts_refactor_exports, { + addExportsInOldFile: () => addExportsInOldFile, + addImportsForMovedSymbols: () => addImportsForMovedSymbols, + addNewFileToTsconfig: () => addNewFileToTsconfig, + addOrRemoveBracesToArrowFunction: () => ts_refactor_addOrRemoveBracesToArrowFunction_exports, + addTargetFileImports: () => addTargetFileImports, + containsJsx: () => containsJsx, + convertArrowFunctionOrFunctionExpression: () => ts_refactor_convertArrowFunctionOrFunctionExpression_exports, + convertParamsToDestructuredObject: () => ts_refactor_convertParamsToDestructuredObject_exports, + convertStringOrTemplateLiteral: () => ts_refactor_convertStringOrTemplateLiteral_exports, + convertToOptionalChainExpression: () => ts_refactor_convertToOptionalChainExpression_exports, + createNewFileName: () => createNewFileName, + doChangeNamedToNamespaceOrDefault: () => doChangeNamedToNamespaceOrDefault, + extractSymbol: () => ts_refactor_extractSymbol_exports, + generateGetAccessorAndSetAccessor: () => ts_refactor_generateGetAccessorAndSetAccessor_exports, + getApplicableRefactors: () => getApplicableRefactors, + getEditsForRefactor: () => getEditsForRefactor, + getExistingLocals: () => getExistingLocals, + getIdentifierForNode: () => getIdentifierForNode, + getNewStatementsAndRemoveFromOldFile: () => getNewStatementsAndRemoveFromOldFile, + getStatementsToMove: () => getStatementsToMove, + getUsageInfo: () => getUsageInfo, + inferFunctionReturnType: () => ts_refactor_inferFunctionReturnType_exports, + isInImport: () => isInImport, + isRefactorErrorInfo: () => isRefactorErrorInfo, + refactorKindBeginsWith: () => refactorKindBeginsWith, + registerRefactor: () => registerRefactor +}); + +// src/services/refactorProvider.ts +var refactors = /* @__PURE__ */ new Map(); +function registerRefactor(name, refactor) { + refactors.set(name, refactor); +} +function getApplicableRefactors(context, includeInteractiveActions) { + return arrayFrom(flatMapIterator(refactors.values(), (refactor) => { + var _a; + return context.cancellationToken && context.cancellationToken.isCancellationRequested() || !((_a = refactor.kinds) == null ? void 0 : _a.some((kind) => refactorKindBeginsWith(kind, context.kind))) ? void 0 : refactor.getAvailableActions(context, includeInteractiveActions); + })); +} +function getEditsForRefactor(context, refactorName14, actionName2, interactiveRefactorArguments) { + const refactor = refactors.get(refactorName14); + return refactor && refactor.getEditsForAction(context, actionName2, interactiveRefactorArguments); +} + +// src/services/refactors/convertExport.ts +var refactorName = "Convert export"; +var defaultToNamedAction = { + name: "Convert default export to named export", + description: getLocaleSpecificMessage(Diagnostics.Convert_default_export_to_named_export), + kind: "refactor.rewrite.export.named" +}; +var namedToDefaultAction = { + name: "Convert named export to default export", + description: getLocaleSpecificMessage(Diagnostics.Convert_named_export_to_default_export), + kind: "refactor.rewrite.export.default" +}; +registerRefactor(refactorName, { + kinds: [ + defaultToNamedAction.kind, + namedToDefaultAction.kind + ], + getAvailableActions: function getRefactorActionsToConvertBetweenNamedAndDefaultExports(context) { + const info = getInfo2(context, context.triggerReason === "invoked"); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + const action = info.wasDefault ? defaultToNamedAction : namedToDefaultAction; + return [{ name: refactorName, description: action.description, actions: [action] }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [ + { + name: refactorName, + description: getLocaleSpecificMessage(Diagnostics.Convert_default_export_to_named_export), + actions: [ + { ...defaultToNamedAction, notApplicableReason: info.error }, + { ...namedToDefaultAction, notApplicableReason: info.error } + ] + } + ]; + } + return emptyArray; + }, + getEditsForAction: function getRefactorEditsToConvertBetweenNamedAndDefaultExports(context, actionName2) { + Debug.assert(actionName2 === defaultToNamedAction.name || actionName2 === namedToDefaultAction.name, "Unexpected action name"); + const info = getInfo2(context); + Debug.assert(info && !isRefactorErrorInfo(info), "Expected applicable refactor info"); + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange(context.file, context.program, info, t, context.cancellationToken)); + return { edits, renameFilename: void 0, renameLocation: void 0 }; + } +}); +function getInfo2(context, considerPartialSpans = true) { + const { file, program } = context; + const span = getRefactorContextSpan(context); + const token = getTokenAtPosition(file, span.start); + const exportNode = !!(token.parent && getSyntacticModifierFlags(token.parent) & 32 /* Export */) && considerPartialSpans ? token.parent : getParentNodeInSpan(token, file, span); + if (!exportNode || !isSourceFile(exportNode.parent) && !(isModuleBlock(exportNode.parent) && isAmbientModule(exportNode.parent.parent))) { + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_export_statement) }; + } + const checker = program.getTypeChecker(); + const exportingModuleSymbol = getExportingModuleSymbol(exportNode.parent, checker); + const flags = getSyntacticModifierFlags(exportNode) || (isExportAssignment(exportNode) && !exportNode.isExportEquals ? 2080 /* ExportDefault */ : 0 /* None */); + const wasDefault = !!(flags & 2048 /* Default */); + if (!(flags & 32 /* Export */) || !wasDefault && exportingModuleSymbol.exports.has("default" /* Default */)) { + return { error: getLocaleSpecificMessage(Diagnostics.This_file_already_has_a_default_export) }; + } + const noSymbolError = (id) => isIdentifier(id) && checker.getSymbolAtLocation(id) ? void 0 : { error: getLocaleSpecificMessage(Diagnostics.Can_only_convert_named_export) }; + switch (exportNode.kind) { + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 268 /* ModuleDeclaration */: { + const node = exportNode; + if (!node.name) return void 0; + return noSymbolError(node.name) || { exportNode: node, exportName: node.name, wasDefault, exportingModuleSymbol }; + } + case 244 /* VariableStatement */: { + const vs = exportNode; + if (!(vs.declarationList.flags & 2 /* Const */) || vs.declarationList.declarations.length !== 1) { + return void 0; + } + const decl = first(vs.declarationList.declarations); + if (!decl.initializer) return void 0; + Debug.assert(!wasDefault, "Can't have a default flag here"); + return noSymbolError(decl.name) || { exportNode: vs, exportName: decl.name, wasDefault, exportingModuleSymbol }; + } + case 278 /* ExportAssignment */: { + const node = exportNode; + if (node.isExportEquals) return void 0; + return noSymbolError(node.expression) || { exportNode: node, exportName: node.expression, wasDefault, exportingModuleSymbol }; + } + default: + return void 0; + } +} +function doChange(exportingSourceFile, program, info, changes, cancellationToken) { + changeExport(exportingSourceFile, info, changes, program.getTypeChecker()); + changeImports(program, info, changes, cancellationToken); +} +function changeExport(exportingSourceFile, { wasDefault, exportNode, exportName }, changes, checker) { + if (wasDefault) { + if (isExportAssignment(exportNode) && !exportNode.isExportEquals) { + const exp = exportNode.expression; + const spec = makeExportSpecifier(exp.text, exp.text); + changes.replaceNode(exportingSourceFile, exportNode, factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([spec]) + )); + } else { + changes.delete(exportingSourceFile, Debug.checkDefined(findModifier(exportNode, 90 /* DefaultKeyword */), "Should find a default keyword in modifier list")); + } + } else { + const exportKeyword = Debug.checkDefined(findModifier(exportNode, 95 /* ExportKeyword */), "Should find an export keyword in modifier list"); + switch (exportNode.kind) { + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + changes.insertNodeAfter(exportingSourceFile, exportKeyword, factory.createToken(90 /* DefaultKeyword */)); + break; + case 244 /* VariableStatement */: + const decl = first(exportNode.declarationList.declarations); + if (!ts_FindAllReferences_exports.Core.isSymbolReferencedInFile(exportName, checker, exportingSourceFile) && !decl.type) { + changes.replaceNode(exportingSourceFile, exportNode, factory.createExportDefault(Debug.checkDefined(decl.initializer, "Initializer was previously known to be present"))); + break; + } + // falls through + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 268 /* ModuleDeclaration */: + changes.deleteModifier(exportingSourceFile, exportKeyword); + changes.insertNodeAfter(exportingSourceFile, exportNode, factory.createExportDefault(factory.createIdentifier(exportName.text))); + break; + default: + Debug.fail(`Unexpected exportNode kind ${exportNode.kind}`); + } + } +} +function changeImports(program, { wasDefault, exportName, exportingModuleSymbol }, changes, cancellationToken) { + const checker = program.getTypeChecker(); + const exportSymbol = Debug.checkDefined(checker.getSymbolAtLocation(exportName), "Export name should resolve to a symbol"); + ts_FindAllReferences_exports.Core.eachExportReference(program.getSourceFiles(), checker, cancellationToken, exportSymbol, exportingModuleSymbol, exportName.text, wasDefault, (ref) => { + if (exportName === ref) return; + const importingSourceFile = ref.getSourceFile(); + if (wasDefault) { + changeDefaultToNamedImport(importingSourceFile, ref, changes, exportName.text); + } else { + changeNamedToDefaultImport(importingSourceFile, ref, changes); + } + }); +} +function changeDefaultToNamedImport(importingSourceFile, ref, changes, exportName) { + const { parent: parent2 } = ref; + switch (parent2.kind) { + case 212 /* PropertyAccessExpression */: + changes.replaceNode(importingSourceFile, ref, factory.createIdentifier(exportName)); + break; + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: { + const spec = parent2; + changes.replaceNode(importingSourceFile, spec, makeImportSpecifier(exportName, spec.name.text)); + break; + } + case 274 /* ImportClause */: { + const clause = parent2; + Debug.assert(clause.name === ref, "Import clause name should match provided ref"); + const spec = makeImportSpecifier(exportName, ref.text); + const { namedBindings } = clause; + if (!namedBindings) { + changes.replaceNode(importingSourceFile, ref, factory.createNamedImports([spec])); + } else if (namedBindings.kind === 275 /* NamespaceImport */) { + changes.deleteRange(importingSourceFile, { pos: ref.getStart(importingSourceFile), end: namedBindings.getStart(importingSourceFile) }); + const quotePreference = isStringLiteral(clause.parent.moduleSpecifier) ? quotePreferenceFromString(clause.parent.moduleSpecifier, importingSourceFile) : 1 /* Double */; + const newImport = makeImport( + /*defaultImport*/ + void 0, + [makeImportSpecifier(exportName, ref.text)], + clause.parent.moduleSpecifier, + quotePreference + ); + changes.insertNodeAfter(importingSourceFile, clause.parent, newImport); + } else { + changes.delete(importingSourceFile, ref); + changes.insertNodeAtEndOfList(importingSourceFile, namedBindings.elements, spec); + } + break; + } + case 206 /* ImportType */: + const importTypeNode = parent2; + changes.replaceNode(importingSourceFile, parent2, factory.createImportTypeNode(importTypeNode.argument, importTypeNode.attributes, factory.createIdentifier(exportName), importTypeNode.typeArguments, importTypeNode.isTypeOf)); + break; + default: + Debug.failBadSyntaxKind(parent2); + } +} +function changeNamedToDefaultImport(importingSourceFile, ref, changes) { + const parent2 = ref.parent; + switch (parent2.kind) { + case 212 /* PropertyAccessExpression */: + changes.replaceNode(importingSourceFile, ref, factory.createIdentifier("default")); + break; + case 277 /* ImportSpecifier */: { + const defaultImport = factory.createIdentifier(parent2.name.text); + if (parent2.parent.elements.length === 1) { + changes.replaceNode(importingSourceFile, parent2.parent, defaultImport); + } else { + changes.delete(importingSourceFile, parent2); + changes.insertNodeBefore(importingSourceFile, parent2.parent, defaultImport); + } + break; + } + case 282 /* ExportSpecifier */: { + changes.replaceNode(importingSourceFile, parent2, makeExportSpecifier("default", parent2.name.text)); + break; + } + default: + Debug.assertNever(parent2, `Unexpected parent kind ${parent2.kind}`); + } +} +function makeImportSpecifier(propertyName, name) { + return factory.createImportSpecifier( + /*isTypeOnly*/ + false, + propertyName === name ? void 0 : factory.createIdentifier(propertyName), + factory.createIdentifier(name) + ); +} +function makeExportSpecifier(propertyName, name) { + return factory.createExportSpecifier( + /*isTypeOnly*/ + false, + propertyName === name ? void 0 : factory.createIdentifier(propertyName), + factory.createIdentifier(name) + ); +} +function getExportingModuleSymbol(parent2, checker) { + if (isSourceFile(parent2)) { + return parent2.symbol; + } + const symbol = parent2.parent.symbol; + if (symbol.valueDeclaration && isExternalModuleAugmentation(symbol.valueDeclaration)) { + return checker.getMergedSymbol(symbol); + } + return symbol; +} + +// src/services/refactors/convertImport.ts +var refactorName2 = "Convert import"; +var actions = { + [0 /* Named */]: { + name: "Convert namespace import to named imports", + description: getLocaleSpecificMessage(Diagnostics.Convert_namespace_import_to_named_imports), + kind: "refactor.rewrite.import.named" + }, + [2 /* Namespace */]: { + name: "Convert named imports to namespace import", + description: getLocaleSpecificMessage(Diagnostics.Convert_named_imports_to_namespace_import), + kind: "refactor.rewrite.import.namespace" + }, + [1 /* Default */]: { + name: "Convert named imports to default import", + description: getLocaleSpecificMessage(Diagnostics.Convert_named_imports_to_default_import), + kind: "refactor.rewrite.import.default" + } +}; +registerRefactor(refactorName2, { + kinds: getOwnValues(actions).map((a) => a.kind), + getAvailableActions: function getRefactorActionsToConvertBetweenNamedAndNamespacedImports(context) { + const info = getImportConversionInfo(context, context.triggerReason === "invoked"); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + const action = actions[info.convertTo]; + return [{ name: refactorName2, description: action.description, actions: [action] }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return getOwnValues(actions).map((action) => ({ + name: refactorName2, + description: action.description, + actions: [{ ...action, notApplicableReason: info.error }] + })); + } + return emptyArray; + }, + getEditsForAction: function getRefactorEditsToConvertBetweenNamedAndNamespacedImports(context, actionName2) { + Debug.assert(some(getOwnValues(actions), (action) => action.name === actionName2), "Unexpected action name"); + const info = getImportConversionInfo(context); + Debug.assert(info && !isRefactorErrorInfo(info), "Expected applicable refactor info"); + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange2(context.file, context.program, t, info)); + return { edits, renameFilename: void 0, renameLocation: void 0 }; + } +}); +function getImportConversionInfo(context, considerPartialSpans = true) { + const { file } = context; + const span = getRefactorContextSpan(context); + const token = getTokenAtPosition(file, span.start); + const importDecl = considerPartialSpans ? findAncestor(token, or(isImportDeclaration, isJSDocImportTag)) : getParentNodeInSpan(token, file, span); + if (importDecl === void 0 || !(isImportDeclaration(importDecl) || isJSDocImportTag(importDecl))) return { error: "Selection is not an import declaration." }; + const end = span.start + span.length; + const nextToken = findNextToken(importDecl, importDecl.parent, file); + if (nextToken && end > nextToken.getStart()) return void 0; + const { importClause } = importDecl; + if (!importClause) { + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_import_clause) }; + } + if (!importClause.namedBindings) { + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_namespace_import_or_named_imports) }; + } + if (importClause.namedBindings.kind === 275 /* NamespaceImport */) { + return { convertTo: 0 /* Named */, import: importClause.namedBindings }; + } + const shouldUseDefault = getShouldUseDefault(context.program, importClause); + return shouldUseDefault ? { convertTo: 1 /* Default */, import: importClause.namedBindings } : { convertTo: 2 /* Namespace */, import: importClause.namedBindings }; +} +function getShouldUseDefault(program, importClause) { + return getAllowSyntheticDefaultImports(program.getCompilerOptions()) && isExportEqualsModule(importClause.parent.moduleSpecifier, program.getTypeChecker()); +} +function doChange2(sourceFile, program, changes, info) { + const checker = program.getTypeChecker(); + if (info.convertTo === 0 /* Named */) { + doChangeNamespaceToNamed(sourceFile, checker, changes, info.import, getAllowSyntheticDefaultImports(program.getCompilerOptions())); + } else { + doChangeNamedToNamespaceOrDefault(sourceFile, program, changes, info.import, info.convertTo === 1 /* Default */); + } +} +function doChangeNamespaceToNamed(sourceFile, checker, changes, toConvert, allowSyntheticDefaultImports) { + let usedAsNamespaceOrDefault = false; + const nodesToReplace = []; + const conflictingNames = /* @__PURE__ */ new Map(); + ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(toConvert.name, checker, sourceFile, (id) => { + if (!isPropertyAccessOrQualifiedName(id.parent)) { + usedAsNamespaceOrDefault = true; + } else { + const exportName = getRightOfPropertyAccessOrQualifiedName(id.parent).text; + if (checker.resolveName( + exportName, + id, + -1 /* All */, + /*excludeGlobals*/ + true + )) { + conflictingNames.set(exportName, true); + } + Debug.assert(getLeftOfPropertyAccessOrQualifiedName(id.parent) === id, "Parent expression should match id"); + nodesToReplace.push(id.parent); + } + }); + const exportNameToImportName = /* @__PURE__ */ new Map(); + for (const propertyAccessOrQualifiedName of nodesToReplace) { + const exportName = getRightOfPropertyAccessOrQualifiedName(propertyAccessOrQualifiedName).text; + let importName = exportNameToImportName.get(exportName); + if (importName === void 0) { + exportNameToImportName.set(exportName, importName = conflictingNames.has(exportName) ? getUniqueName(exportName, sourceFile) : exportName); + } + changes.replaceNode(sourceFile, propertyAccessOrQualifiedName, factory.createIdentifier(importName)); + } + const importSpecifiers = []; + exportNameToImportName.forEach((name, propertyName) => { + importSpecifiers.push(factory.createImportSpecifier( + /*isTypeOnly*/ + false, + name === propertyName ? void 0 : factory.createIdentifier(propertyName), + factory.createIdentifier(name) + )); + }); + const importDecl = toConvert.parent.parent; + if (usedAsNamespaceOrDefault && !allowSyntheticDefaultImports && isImportDeclaration(importDecl)) { + changes.insertNodeAfter(sourceFile, importDecl, createImport( + importDecl, + /*defaultImportName*/ + void 0, + importSpecifiers + )); + } else { + const defaultImportName = usedAsNamespaceOrDefault ? factory.createIdentifier(toConvert.name.text) : void 0; + changes.replaceNode(sourceFile, toConvert.parent, createImportClause(defaultImportName, importSpecifiers)); + } +} +function getRightOfPropertyAccessOrQualifiedName(propertyAccessOrQualifiedName) { + return isPropertyAccessExpression(propertyAccessOrQualifiedName) ? propertyAccessOrQualifiedName.name : propertyAccessOrQualifiedName.right; +} +function getLeftOfPropertyAccessOrQualifiedName(propertyAccessOrQualifiedName) { + return isPropertyAccessExpression(propertyAccessOrQualifiedName) ? propertyAccessOrQualifiedName.expression : propertyAccessOrQualifiedName.left; +} +function doChangeNamedToNamespaceOrDefault(sourceFile, program, changes, toConvert, shouldUseDefault = getShouldUseDefault(program, toConvert.parent)) { + const checker = program.getTypeChecker(); + const importDecl = toConvert.parent.parent; + const { moduleSpecifier } = importDecl; + const toConvertSymbols = /* @__PURE__ */ new Set(); + toConvert.elements.forEach((namedImport) => { + const symbol = checker.getSymbolAtLocation(namedImport.name); + if (symbol) { + toConvertSymbols.add(symbol); + } + }); + const preferredName = moduleSpecifier && isStringLiteral(moduleSpecifier) ? moduleSpecifierToValidIdentifier(moduleSpecifier.text, 99 /* ESNext */) : "module"; + function hasNamespaceNameConflict(namedImport) { + return !!ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(namedImport.name, checker, sourceFile, (id) => { + const symbol = checker.resolveName( + preferredName, + id, + -1 /* All */, + /*excludeGlobals*/ + true + ); + if (symbol) { + if (toConvertSymbols.has(symbol)) { + return isExportSpecifier(id.parent); + } + return true; + } + return false; + }); + } + const namespaceNameConflicts = toConvert.elements.some(hasNamespaceNameConflict); + const namespaceImportName = namespaceNameConflicts ? getUniqueName(preferredName, sourceFile) : preferredName; + const neededNamedImports = /* @__PURE__ */ new Set(); + for (const element of toConvert.elements) { + const propertyName = element.propertyName || element.name; + ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(element.name, checker, sourceFile, (id) => { + const access = propertyName.kind === 11 /* StringLiteral */ ? factory.createElementAccessExpression(factory.createIdentifier(namespaceImportName), factory.cloneNode(propertyName)) : factory.createPropertyAccessExpression(factory.createIdentifier(namespaceImportName), factory.cloneNode(propertyName)); + if (isShorthandPropertyAssignment(id.parent)) { + changes.replaceNode(sourceFile, id.parent, factory.createPropertyAssignment(id.text, access)); + } else if (isExportSpecifier(id.parent)) { + neededNamedImports.add(element); + } else { + changes.replaceNode(sourceFile, id, access); + } + }); + } + changes.replaceNode( + sourceFile, + toConvert, + shouldUseDefault ? factory.createIdentifier(namespaceImportName) : factory.createNamespaceImport(factory.createIdentifier(namespaceImportName)) + ); + if (neededNamedImports.size && isImportDeclaration(importDecl)) { + const newNamedImports = arrayFrom(neededNamedImports.values(), (element) => factory.createImportSpecifier(element.isTypeOnly, element.propertyName && factory.cloneNode(element.propertyName), factory.cloneNode(element.name))); + changes.insertNodeAfter(sourceFile, toConvert.parent.parent, createImport( + importDecl, + /*defaultImportName*/ + void 0, + newNamedImports + )); + } +} +function isExportEqualsModule(moduleSpecifier, checker) { + const externalModule = checker.resolveExternalModuleName(moduleSpecifier); + if (!externalModule) return false; + const exportEquals = checker.resolveExternalModuleSymbol(externalModule); + return externalModule !== exportEquals; +} +function createImport(node, defaultImportName, elements) { + return factory.createImportDeclaration( + /*modifiers*/ + void 0, + createImportClause(defaultImportName, elements), + node.moduleSpecifier, + /*attributes*/ + void 0 + ); +} +function createImportClause(defaultImportName, elements) { + return factory.createImportClause( + /*phaseModifier*/ + void 0, + defaultImportName, + elements && elements.length ? factory.createNamedImports(elements) : void 0 + ); +} + +// src/services/refactors/extractType.ts +var refactorName3 = "Extract type"; +var extractToTypeAliasAction = { + name: "Extract to type alias", + description: getLocaleSpecificMessage(Diagnostics.Extract_to_type_alias), + kind: "refactor.extract.type" +}; +var extractToInterfaceAction = { + name: "Extract to interface", + description: getLocaleSpecificMessage(Diagnostics.Extract_to_interface), + kind: "refactor.extract.interface" +}; +var extractToTypeDefAction = { + name: "Extract to typedef", + description: getLocaleSpecificMessage(Diagnostics.Extract_to_typedef), + kind: "refactor.extract.typedef" +}; +registerRefactor(refactorName3, { + kinds: [ + extractToTypeAliasAction.kind, + extractToInterfaceAction.kind, + extractToTypeDefAction.kind + ], + getAvailableActions: function getRefactorActionsToExtractType(context) { + const { info, affectedTextRange } = getRangeToExtract(context, context.triggerReason === "invoked"); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + const refactorInfo = [{ + name: refactorName3, + description: getLocaleSpecificMessage(Diagnostics.Extract_type), + actions: info.isJS ? [extractToTypeDefAction] : append([extractToTypeAliasAction], info.typeElements && extractToInterfaceAction) + }]; + return refactorInfo.map((info2) => ({ + ...info2, + actions: info2.actions.map((action) => ({ + ...action, + range: affectedTextRange ? { + start: { line: getLineAndCharacterOfPosition(context.file, affectedTextRange.pos).line, offset: getLineAndCharacterOfPosition(context.file, affectedTextRange.pos).character }, + end: { line: getLineAndCharacterOfPosition(context.file, affectedTextRange.end).line, offset: getLineAndCharacterOfPosition(context.file, affectedTextRange.end).character } + } : void 0 + })) + })); + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ + name: refactorName3, + description: getLocaleSpecificMessage(Diagnostics.Extract_type), + actions: [ + { ...extractToTypeDefAction, notApplicableReason: info.error }, + { ...extractToTypeAliasAction, notApplicableReason: info.error }, + { ...extractToInterfaceAction, notApplicableReason: info.error } + ] + }]; + } + return emptyArray; + }, + getEditsForAction: function getRefactorEditsToExtractType(context, actionName2) { + const { file } = context; + const { info } = getRangeToExtract(context); + Debug.assert(info && !isRefactorErrorInfo(info), "Expected to find a range to extract"); + const name = getUniqueName("NewType", file); + const edits = ts_textChanges_exports.ChangeTracker.with(context, (changes) => { + switch (actionName2) { + case extractToTypeAliasAction.name: + Debug.assert(!info.isJS, "Invalid actionName/JS combo"); + return doTypeAliasChange(changes, file, name, info); + case extractToTypeDefAction.name: + Debug.assert(info.isJS, "Invalid actionName/JS combo"); + return doTypedefChange(changes, context, file, name, info); + case extractToInterfaceAction.name: + Debug.assert(!info.isJS && !!info.typeElements, "Invalid actionName/JS combo"); + return doInterfaceChange(changes, file, name, info); + default: + Debug.fail("Unexpected action name"); + } + }); + const renameFilename = file.fileName; + const renameLocation = getRenameLocation( + edits, + renameFilename, + name, + /*preferLastLocation*/ + false + ); + return { edits, renameFilename, renameLocation }; + } +}); +function getRangeToExtract(context, considerEmptySpans = true) { + const { file, startPosition } = context; + const isJS = isSourceFileJS(file); + const range = createTextRangeFromSpan(getRefactorContextSpan(context)); + const isCursorRequest = range.pos === range.end && considerEmptySpans; + const firstType = getFirstTypeAt(file, startPosition, range, isCursorRequest); + if (!firstType || !isTypeNode(firstType)) return { info: { error: getLocaleSpecificMessage(Diagnostics.Selection_is_not_a_valid_type_node) }, affectedTextRange: void 0 }; + const checker = context.program.getTypeChecker(); + const enclosingNode = getEnclosingNode(firstType, isJS); + if (enclosingNode === void 0) return { info: { error: getLocaleSpecificMessage(Diagnostics.No_type_could_be_extracted_from_this_type_node) }, affectedTextRange: void 0 }; + const expandedFirstType = getExpandedSelectionNode(firstType, enclosingNode); + if (!isTypeNode(expandedFirstType)) return { info: { error: getLocaleSpecificMessage(Diagnostics.Selection_is_not_a_valid_type_node) }, affectedTextRange: void 0 }; + const typeList = []; + if ((isUnionTypeNode(expandedFirstType.parent) || isIntersectionTypeNode(expandedFirstType.parent)) && range.end > firstType.end) { + addRange( + typeList, + expandedFirstType.parent.types.filter((type) => { + return nodeOverlapsWithStartEnd(type, file, range.pos, range.end); + }) + ); + } + const selection = typeList.length > 1 ? typeList : expandedFirstType; + const { typeParameters, affectedTextRange } = collectTypeParameters(checker, selection, enclosingNode, file); + if (!typeParameters) return { info: { error: getLocaleSpecificMessage(Diagnostics.No_type_could_be_extracted_from_this_type_node) }, affectedTextRange: void 0 }; + const typeElements = flattenTypeLiteralNodeReference(checker, selection); + return { info: { isJS, selection, enclosingNode, typeParameters, typeElements }, affectedTextRange }; +} +function getFirstTypeAt(file, startPosition, range, isCursorRequest) { + const currentNodes = [ + () => getTokenAtPosition(file, startPosition), + () => getTouchingToken(file, startPosition, () => true) + ]; + for (const f of currentNodes) { + const current = f(); + const overlappingRange = nodeOverlapsWithStartEnd(current, file, range.pos, range.end); + const firstType = findAncestor(current, (node) => node.parent && isTypeNode(node) && !rangeContainsSkipTrivia(range, node.parent, file) && (isCursorRequest || overlappingRange)); + if (firstType) { + return firstType; + } + } + return void 0; +} +function flattenTypeLiteralNodeReference(checker, selection) { + if (!selection) return void 0; + if (isArray(selection)) { + const result = []; + for (const type of selection) { + const flattenedTypeMembers = flattenTypeLiteralNodeReference(checker, type); + if (!flattenedTypeMembers) return void 0; + addRange(result, flattenedTypeMembers); + } + return result; + } + if (isIntersectionTypeNode(selection)) { + const result = []; + const seen = /* @__PURE__ */ new Set(); + for (const type of selection.types) { + const flattenedTypeMembers = flattenTypeLiteralNodeReference(checker, type); + if (!flattenedTypeMembers || !flattenedTypeMembers.every((type2) => type2.name && addToSeen(seen, getNameFromPropertyName(type2.name)))) { + return void 0; + } + addRange(result, flattenedTypeMembers); + } + return result; + } else if (isParenthesizedTypeNode(selection)) { + return flattenTypeLiteralNodeReference(checker, selection.type); + } else if (isTypeLiteralNode(selection)) { + return selection.members; + } + return void 0; +} +function rangeContainsSkipTrivia(r1, node, file) { + return rangeContainsStartEnd(r1, skipTrivia(file.text, node.pos), node.end); +} +function collectTypeParameters(checker, selection, enclosingNode, file) { + const result = []; + const selectionArray = toArray(selection); + const selectionRange = { pos: selectionArray[0].getStart(file), end: selectionArray[selectionArray.length - 1].end }; + for (const t of selectionArray) { + if (visitor(t)) return { typeParameters: void 0, affectedTextRange: void 0 }; + } + return { typeParameters: result, affectedTextRange: selectionRange }; + function visitor(node) { + if (isTypeReferenceNode(node)) { + if (isIdentifier(node.typeName)) { + const typeName = node.typeName; + const symbol = checker.resolveName( + typeName.text, + typeName, + 262144 /* TypeParameter */, + /*excludeGlobals*/ + true + ); + for (const decl of (symbol == null ? void 0 : symbol.declarations) || emptyArray) { + if (isTypeParameterDeclaration(decl) && decl.getSourceFile() === file) { + if (decl.name.escapedText === typeName.escapedText && rangeContainsSkipTrivia(decl, selectionRange, file)) { + return true; + } + if (rangeContainsSkipTrivia(enclosingNode, decl, file) && !rangeContainsSkipTrivia(selectionRange, decl, file)) { + pushIfUnique(result, decl); + break; + } + } + } + } + } else if (isInferTypeNode(node)) { + const conditionalTypeNode = findAncestor(node, (n) => isConditionalTypeNode(n) && rangeContainsSkipTrivia(n.extendsType, node, file)); + if (!conditionalTypeNode || !rangeContainsSkipTrivia(selectionRange, conditionalTypeNode, file)) { + return true; + } + } else if (isTypePredicateNode(node) || isThisTypeNode(node)) { + const functionLikeNode = findAncestor(node.parent, isFunctionLike); + if (functionLikeNode && functionLikeNode.type && rangeContainsSkipTrivia(functionLikeNode.type, node, file) && !rangeContainsSkipTrivia(selectionRange, functionLikeNode, file)) { + return true; + } + } else if (isTypeQueryNode(node)) { + if (isIdentifier(node.exprName)) { + const symbol = checker.resolveName( + node.exprName.text, + node.exprName, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + if ((symbol == null ? void 0 : symbol.valueDeclaration) && rangeContainsSkipTrivia(enclosingNode, symbol.valueDeclaration, file) && !rangeContainsSkipTrivia(selectionRange, symbol.valueDeclaration, file)) { + return true; + } + } else { + if (isThisIdentifier(node.exprName.left) && !rangeContainsSkipTrivia(selectionRange, node.parent, file)) { + return true; + } + } + } + if (file && isTupleTypeNode(node) && getLineAndCharacterOfPosition(file, node.pos).line === getLineAndCharacterOfPosition(file, node.end).line) { + setEmitFlags(node, 1 /* SingleLine */); + } + return forEachChild(node, visitor); + } +} +function doTypeAliasChange(changes, file, name, info) { + const { enclosingNode, typeParameters } = info; + const { firstTypeNode, lastTypeNode, newTypeNode } = getNodesToEdit(info); + const newTypeDeclaration = factory.createTypeAliasDeclaration( + /*modifiers*/ + void 0, + name, + typeParameters.map((id) => factory.updateTypeParameterDeclaration( + id, + id.modifiers, + id.name, + id.constraint, + /*defaultType*/ + void 0 + )), + newTypeNode + ); + changes.insertNodeBefore( + file, + enclosingNode, + ignoreSourceNewlines(newTypeDeclaration), + /*blankLineBetween*/ + true + ); + changes.replaceNodeRange(file, firstTypeNode, lastTypeNode, factory.createTypeReferenceNode(name, typeParameters.map((id) => factory.createTypeReferenceNode( + id.name, + /*typeArguments*/ + void 0 + ))), { leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude, trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.ExcludeWhitespace }); +} +function doInterfaceChange(changes, file, name, info) { + var _a; + const { enclosingNode, typeParameters, typeElements } = info; + const newTypeNode = factory.createInterfaceDeclaration( + /*modifiers*/ + void 0, + name, + typeParameters, + /*heritageClauses*/ + void 0, + typeElements + ); + setTextRange(newTypeNode, (_a = typeElements[0]) == null ? void 0 : _a.parent); + changes.insertNodeBefore( + file, + enclosingNode, + ignoreSourceNewlines(newTypeNode), + /*blankLineBetween*/ + true + ); + const { firstTypeNode, lastTypeNode } = getNodesToEdit(info); + changes.replaceNodeRange(file, firstTypeNode, lastTypeNode, factory.createTypeReferenceNode(name, typeParameters.map((id) => factory.createTypeReferenceNode( + id.name, + /*typeArguments*/ + void 0 + ))), { leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude, trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.ExcludeWhitespace }); +} +function doTypedefChange(changes, context, file, name, info) { + var _a; + toArray(info.selection).forEach((typeNode) => { + setEmitFlags(typeNode, 3072 /* NoComments */ | 4096 /* NoNestedComments */); + }); + const { enclosingNode, typeParameters } = info; + const { firstTypeNode, lastTypeNode, newTypeNode } = getNodesToEdit(info); + const node = factory.createJSDocTypedefTag( + factory.createIdentifier("typedef"), + factory.createJSDocTypeExpression(newTypeNode), + factory.createIdentifier(name) + ); + const templates = []; + forEach(typeParameters, (typeParameter) => { + const constraint = getEffectiveConstraintOfTypeParameter(typeParameter); + const parameter = factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + typeParameter.name + ); + const template = factory.createJSDocTemplateTag( + factory.createIdentifier("template"), + constraint && cast(constraint, isJSDocTypeExpression), + [parameter] + ); + templates.push(template); + }); + const jsDoc = factory.createJSDocComment( + /*comment*/ + void 0, + factory.createNodeArray(concatenate(templates, [node])) + ); + if (isJSDoc(enclosingNode)) { + const pos = enclosingNode.getStart(file); + const newLineCharacter = getNewLineOrDefaultFromHost(context.host, (_a = context.formatContext) == null ? void 0 : _a.options); + changes.insertNodeAt(file, enclosingNode.getStart(file), jsDoc, { + suffix: newLineCharacter + newLineCharacter + file.text.slice(getPrecedingNonSpaceCharacterPosition(file.text, pos - 1), pos) + }); + } else { + changes.insertNodeBefore( + file, + enclosingNode, + jsDoc, + /*blankLineBetween*/ + true + ); + } + changes.replaceNodeRange(file, firstTypeNode, lastTypeNode, factory.createTypeReferenceNode(name, typeParameters.map((id) => factory.createTypeReferenceNode( + id.name, + /*typeArguments*/ + void 0 + )))); +} +function getNodesToEdit(info) { + if (isArray(info.selection)) { + return { + firstTypeNode: info.selection[0], + lastTypeNode: info.selection[info.selection.length - 1], + newTypeNode: isUnionTypeNode(info.selection[0].parent) ? factory.createUnionTypeNode(info.selection) : factory.createIntersectionTypeNode(info.selection) + }; + } + return { + firstTypeNode: info.selection, + lastTypeNode: info.selection, + newTypeNode: info.selection + }; +} +function getEnclosingNode(node, isJS) { + return findAncestor(node, isStatement) || (isJS ? findAncestor(node, isJSDoc) : void 0); +} +function getExpandedSelectionNode(firstType, enclosingNode) { + return findAncestor(firstType, (node) => { + if (node === enclosingNode) return "quit"; + if (isUnionTypeNode(node.parent) || isIntersectionTypeNode(node.parent)) { + return true; + } + return false; + }) ?? firstType; +} + +// src/services/refactors/moveToFile.ts +var refactorNameForMoveToFile = "Move to file"; +var description = getLocaleSpecificMessage(Diagnostics.Move_to_file); +var moveToFileAction = { + name: "Move to file", + description, + kind: "refactor.move.file" +}; +registerRefactor(refactorNameForMoveToFile, { + kinds: [moveToFileAction.kind], + getAvailableActions: function getRefactorActionsToMoveToFile(context, interactiveRefactorArguments) { + const file = context.file; + const statements = getStatementsToMove(context); + if (!interactiveRefactorArguments) { + return emptyArray; + } + if (context.triggerReason === "implicit" && context.endPosition !== void 0) { + const startNodeAncestor = findAncestor(getTokenAtPosition(file, context.startPosition), isBlockLike); + const endNodeAncestor = findAncestor(getTokenAtPosition(file, context.endPosition), isBlockLike); + if (startNodeAncestor && !isSourceFile(startNodeAncestor) && endNodeAncestor && !isSourceFile(endNodeAncestor)) { + return emptyArray; + } + } + if (context.preferences.allowTextChangesInNewFiles && statements) { + const affectedTextRange = { + start: { line: getLineAndCharacterOfPosition(file, statements.all[0].getStart(file)).line, offset: getLineAndCharacterOfPosition(file, statements.all[0].getStart(file)).character }, + end: { line: getLineAndCharacterOfPosition(file, last(statements.all).end).line, offset: getLineAndCharacterOfPosition(file, last(statements.all).end).character } + }; + return [{ name: refactorNameForMoveToFile, description, actions: [{ ...moveToFileAction, range: affectedTextRange }] }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ name: refactorNameForMoveToFile, description, actions: [{ ...moveToFileAction, notApplicableReason: getLocaleSpecificMessage(Diagnostics.Selection_is_not_a_valid_statement_or_statements) }] }]; + } + return emptyArray; + }, + getEditsForAction: function getRefactorEditsToMoveToFile(context, actionName2, interactiveRefactorArguments) { + Debug.assert(actionName2 === refactorNameForMoveToFile, "Wrong refactor invoked"); + const statements = Debug.checkDefined(getStatementsToMove(context)); + const { host, program } = context; + Debug.assert(interactiveRefactorArguments, "No interactive refactor arguments available"); + const targetFile = interactiveRefactorArguments.targetFile; + if (hasJSFileExtension(targetFile) || hasTSFileExtension(targetFile)) { + if (host.fileExists(targetFile) && program.getSourceFile(targetFile) === void 0) { + return error(getLocaleSpecificMessage(Diagnostics.Cannot_move_statements_to_the_selected_file)); + } + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange3(context, context.file, interactiveRefactorArguments.targetFile, context.program, statements, t, context.host, context.preferences)); + return { edits, renameFilename: void 0, renameLocation: void 0 }; + } + return error(getLocaleSpecificMessage(Diagnostics.Cannot_move_to_file_selected_file_is_invalid)); + } +}); +function error(notApplicableReason) { + return { edits: [], renameFilename: void 0, renameLocation: void 0, notApplicableReason }; +} +function doChange3(context, oldFile, targetFile, program, toMove, changes, host, preferences) { + const checker = program.getTypeChecker(); + const isForNewFile = !host.fileExists(targetFile); + const targetSourceFile = isForNewFile ? createFutureSourceFile(targetFile, oldFile.externalModuleIndicator ? 99 /* ESNext */ : oldFile.commonJsModuleIndicator ? 1 /* CommonJS */ : void 0, program, host) : Debug.checkDefined(program.getSourceFile(targetFile)); + const importAdderForOldFile = ts_codefix_exports.createImportAdder(oldFile, context.program, context.preferences, context.host); + const importAdderForNewFile = ts_codefix_exports.createImportAdder(targetSourceFile, context.program, context.preferences, context.host); + getNewStatementsAndRemoveFromOldFile(oldFile, targetSourceFile, getUsageInfo(oldFile, toMove.all, checker, isForNewFile ? void 0 : getExistingLocals(targetSourceFile, toMove.all, checker)), changes, toMove, program, host, preferences, importAdderForNewFile, importAdderForOldFile); + if (isForNewFile) { + addNewFileToTsconfig(program, changes, oldFile.fileName, targetFile, hostGetCanonicalFileName(host)); + } +} +function getNewStatementsAndRemoveFromOldFile(oldFile, targetFile, usage, changes, toMove, program, host, preferences, importAdderForNewFile, importAdderForOldFile) { + const checker = program.getTypeChecker(); + const prologueDirectives = takeWhile(oldFile.statements, isPrologueDirective); + const useEsModuleSyntax = !fileShouldUseJavaScriptRequire(targetFile.fileName, program, host, !!oldFile.commonJsModuleIndicator); + const quotePreference = getQuotePreference(oldFile, preferences); + addImportsForMovedSymbols(usage.oldFileImportsFromTargetFile, targetFile.fileName, importAdderForOldFile, program); + deleteUnusedOldImports(oldFile, toMove.all, usage.unusedImportsFromOldFile, importAdderForOldFile); + importAdderForOldFile.writeFixes(changes, quotePreference); + deleteMovedStatements(oldFile, toMove.ranges, changes); + updateImportsInOtherFiles(changes, program, host, oldFile, usage.movedSymbols, targetFile.fileName, quotePreference); + addExportsInOldFile(oldFile, usage.targetFileImportsFromOldFile, changes, useEsModuleSyntax); + addTargetFileImports(oldFile, usage.oldImportsNeededByTargetFile, usage.targetFileImportsFromOldFile, checker, program, importAdderForNewFile); + if (!isFullSourceFile(targetFile) && prologueDirectives.length) { + changes.insertStatementsInNewFile(targetFile.fileName, prologueDirectives, oldFile); + } + importAdderForNewFile.writeFixes(changes, quotePreference); + const body = addExports(oldFile, toMove.all, arrayFrom(usage.oldFileImportsFromTargetFile.keys()), useEsModuleSyntax); + if (isFullSourceFile(targetFile) && targetFile.statements.length > 0) { + moveStatementsToTargetFile(changes, program, body, targetFile, toMove); + } else if (isFullSourceFile(targetFile)) { + changes.insertNodesAtEndOfFile( + targetFile, + body, + /*blankLineBetween*/ + false + ); + } else { + changes.insertStatementsInNewFile(targetFile.fileName, importAdderForNewFile.hasFixes() ? [4 /* NewLineTrivia */, ...body] : body, oldFile); + } +} +function addNewFileToTsconfig(program, changes, oldFileName, newFileNameWithExtension, getCanonicalFileName) { + const cfg = program.getCompilerOptions().configFile; + if (!cfg) return; + const newFileAbsolutePath = normalizePath(combinePaths(oldFileName, "..", newFileNameWithExtension)); + const newFilePath = getRelativePathFromFile(cfg.fileName, newFileAbsolutePath, getCanonicalFileName); + const cfgObject = cfg.statements[0] && tryCast(cfg.statements[0].expression, isObjectLiteralExpression); + const filesProp = cfgObject && find(cfgObject.properties, (prop) => isPropertyAssignment(prop) && isStringLiteral(prop.name) && prop.name.text === "files"); + if (filesProp && isArrayLiteralExpression(filesProp.initializer)) { + changes.insertNodeInListAfter(cfg, last(filesProp.initializer.elements), factory.createStringLiteral(newFilePath), filesProp.initializer.elements); + } +} +function deleteMovedStatements(sourceFile, moved, changes) { + for (const { first: first2, afterLast } of moved) { + changes.deleteNodeRangeExcludingEnd(sourceFile, first2, afterLast); + } +} +function deleteUnusedOldImports(oldFile, toMove, toDelete, importAdder) { + for (const statement of oldFile.statements) { + if (contains(toMove, statement)) continue; + forEachImportInStatement(statement, (i) => { + forEachAliasDeclarationInImportOrRequire(i, (decl) => { + if (toDelete.has(decl.symbol)) { + importAdder.removeExistingImport(decl); + } + }); + }); + } +} +function addExportsInOldFile(oldFile, targetFileImportsFromOldFile, changes, useEsModuleSyntax) { + const markSeenTop = nodeSeenTracker(); + targetFileImportsFromOldFile.forEach((_, symbol) => { + if (!symbol.declarations) { + return; + } + for (const decl of symbol.declarations) { + if (!isTopLevelDeclaration(decl)) continue; + const name = nameOfTopLevelDeclaration(decl); + if (!name) continue; + const top = getTopLevelDeclarationStatement(decl); + if (markSeenTop(top)) { + addExportToChanges(oldFile, top, name, changes, useEsModuleSyntax); + } + } + }); +} +function updateImportsInOtherFiles(changes, program, host, oldFile, movedSymbols, targetFileName, quotePreference) { + const checker = program.getTypeChecker(); + for (const sourceFile of program.getSourceFiles()) { + if (sourceFile === oldFile) continue; + for (const statement of sourceFile.statements) { + forEachImportInStatement(statement, (importNode) => { + if (checker.getSymbolAtLocation(moduleSpecifierFromImport(importNode)) !== oldFile.symbol) return; + const shouldMove = (name) => { + const symbol = isBindingElement(name.parent) ? getPropertySymbolFromBindingElement(checker, name.parent) : skipAlias(checker.getSymbolAtLocation(name), checker); + return !!symbol && movedSymbols.has(symbol); + }; + deleteUnusedImports(sourceFile, importNode, changes, shouldMove); + const pathToTargetFileWithExtension = resolvePath(getDirectoryPath(getNormalizedAbsolutePath(oldFile.fileName, program.getCurrentDirectory())), targetFileName); + if (getStringComparer(!program.useCaseSensitiveFileNames())(pathToTargetFileWithExtension, sourceFile.fileName) === 0 /* EqualTo */) return; + const newModuleSpecifier = ts_moduleSpecifiers_exports.getModuleSpecifier(program.getCompilerOptions(), sourceFile, sourceFile.fileName, pathToTargetFileWithExtension, createModuleSpecifierResolutionHost(program, host)); + const newImportDeclaration = filterImport(importNode, makeStringLiteral(newModuleSpecifier, quotePreference), shouldMove); + if (newImportDeclaration) changes.insertNodeAfter(sourceFile, statement, newImportDeclaration); + const ns = getNamespaceLikeImport(importNode); + if (ns) updateNamespaceLikeImport(changes, sourceFile, checker, movedSymbols, newModuleSpecifier, ns, importNode, quotePreference); + }); + } + } +} +function getNamespaceLikeImport(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + return node.importClause && node.importClause.namedBindings && node.importClause.namedBindings.kind === 275 /* NamespaceImport */ ? node.importClause.namedBindings.name : void 0; + case 272 /* ImportEqualsDeclaration */: + return node.name; + case 261 /* VariableDeclaration */: + return tryCast(node.name, isIdentifier); + default: + return Debug.assertNever(node, `Unexpected node kind ${node.kind}`); + } +} +function updateNamespaceLikeImport(changes, sourceFile, checker, movedSymbols, newModuleSpecifier, oldImportId, oldImportNode, quotePreference) { + const preferredNewNamespaceName = moduleSpecifierToValidIdentifier(newModuleSpecifier, 99 /* ESNext */); + let needUniqueName = false; + const toChange = []; + ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(oldImportId, checker, sourceFile, (ref) => { + if (!isPropertyAccessExpression(ref.parent)) return; + needUniqueName = needUniqueName || !!checker.resolveName( + preferredNewNamespaceName, + ref, + -1 /* All */, + /*excludeGlobals*/ + true + ); + if (movedSymbols.has(checker.getSymbolAtLocation(ref.parent.name))) { + toChange.push(ref); + } + }); + if (toChange.length) { + const newNamespaceName = needUniqueName ? getUniqueName(preferredNewNamespaceName, sourceFile) : preferredNewNamespaceName; + for (const ref of toChange) { + changes.replaceNode(sourceFile, ref, factory.createIdentifier(newNamespaceName)); + } + changes.insertNodeAfter(sourceFile, oldImportNode, updateNamespaceLikeImportNode(oldImportNode, preferredNewNamespaceName, newModuleSpecifier, quotePreference)); + } +} +function updateNamespaceLikeImportNode(node, newNamespaceName, newModuleSpecifier, quotePreference) { + const newNamespaceId = factory.createIdentifier(newNamespaceName); + const newModuleString = makeStringLiteral(newModuleSpecifier, quotePreference); + switch (node.kind) { + case 273 /* ImportDeclaration */: + return factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + /*phaseModifier*/ + void 0, + /*name*/ + void 0, + factory.createNamespaceImport(newNamespaceId) + ), + newModuleString, + /*attributes*/ + void 0 + ); + case 272 /* ImportEqualsDeclaration */: + return factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + newNamespaceId, + factory.createExternalModuleReference(newModuleString) + ); + case 261 /* VariableDeclaration */: + return factory.createVariableDeclaration( + newNamespaceId, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + createRequireCall(newModuleString) + ); + default: + return Debug.assertNever(node, `Unexpected node kind ${node.kind}`); + } +} +function createRequireCall(moduleSpecifier) { + return factory.createCallExpression( + factory.createIdentifier("require"), + /*typeArguments*/ + void 0, + [moduleSpecifier] + ); +} +function moduleSpecifierFromImport(i) { + return i.kind === 273 /* ImportDeclaration */ ? i.moduleSpecifier : i.kind === 272 /* ImportEqualsDeclaration */ ? i.moduleReference.expression : i.initializer.arguments[0]; +} +function forEachImportInStatement(statement, cb) { + if (isImportDeclaration(statement)) { + if (isStringLiteral(statement.moduleSpecifier)) cb(statement); + } else if (isImportEqualsDeclaration(statement)) { + if (isExternalModuleReference(statement.moduleReference) && isStringLiteralLike(statement.moduleReference.expression)) { + cb(statement); + } + } else if (isVariableStatement(statement)) { + for (const decl of statement.declarationList.declarations) { + if (decl.initializer && isRequireCall( + decl.initializer, + /*requireStringLiteralLikeArgument*/ + true + )) { + cb(decl); + } + } + } +} +function forEachAliasDeclarationInImportOrRequire(importOrRequire, cb) { + var _a, _b, _c, _d, _e; + if (importOrRequire.kind === 273 /* ImportDeclaration */) { + if ((_a = importOrRequire.importClause) == null ? void 0 : _a.name) { + cb(importOrRequire.importClause); + } + if (((_c = (_b = importOrRequire.importClause) == null ? void 0 : _b.namedBindings) == null ? void 0 : _c.kind) === 275 /* NamespaceImport */) { + cb(importOrRequire.importClause.namedBindings); + } + if (((_e = (_d = importOrRequire.importClause) == null ? void 0 : _d.namedBindings) == null ? void 0 : _e.kind) === 276 /* NamedImports */) { + for (const element of importOrRequire.importClause.namedBindings.elements) { + cb(element); + } + } + } else if (importOrRequire.kind === 272 /* ImportEqualsDeclaration */) { + cb(importOrRequire); + } else if (importOrRequire.kind === 261 /* VariableDeclaration */) { + if (importOrRequire.name.kind === 80 /* Identifier */) { + cb(importOrRequire); + } else if (importOrRequire.name.kind === 207 /* ObjectBindingPattern */) { + for (const element of importOrRequire.name.elements) { + if (isIdentifier(element.name)) { + cb(element); + } + } + } + } +} +function addImportsForMovedSymbols(symbols, targetFileName, importAdder, program) { + for (const [symbol, isValidTypeOnlyUseSite] of symbols) { + const symbolName2 = getNameForExportedSymbol(symbol, getEmitScriptTarget(program.getCompilerOptions())); + const exportKind = symbol.name === "default" && symbol.parent ? 1 /* Default */ : 0 /* Named */; + importAdder.addImportForNonExistentExport(symbolName2, targetFileName, exportKind, symbol.flags, isValidTypeOnlyUseSite); + } +} +function makeVariableStatement(name, type, initializer, flags = 2 /* Const */) { + return factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([factory.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + type, + initializer + )], flags) + ); +} +function addExports(sourceFile, toMove, needExport, useEs6Exports) { + return flatMap(toMove, (statement) => { + if (isTopLevelDeclarationStatement(statement) && !isExported(sourceFile, statement, useEs6Exports) && forEachTopLevelDeclaration(statement, (d) => { + var _a; + return needExport.includes(Debug.checkDefined((_a = tryCast(d, canHaveSymbol)) == null ? void 0 : _a.symbol)); + })) { + const exports2 = addExport(getSynthesizedDeepClone(statement), useEs6Exports); + if (exports2) return exports2; + } + return getSynthesizedDeepClone(statement); + }); +} +function isExported(sourceFile, decl, useEs6Exports, name) { + var _a; + if (useEs6Exports) { + return !isExpressionStatement(decl) && hasSyntacticModifier(decl, 32 /* Export */) || !!(name && sourceFile.symbol && ((_a = sourceFile.symbol.exports) == null ? void 0 : _a.has(name.escapedText))); + } + return !!sourceFile.symbol && !!sourceFile.symbol.exports && getNamesToExportInCommonJS(decl).some((name2) => sourceFile.symbol.exports.has(escapeLeadingUnderscores(name2))); +} +function deleteUnusedImports(sourceFile, importDecl, changes, isUnused) { + if (importDecl.kind === 273 /* ImportDeclaration */ && importDecl.importClause) { + const { name, namedBindings } = importDecl.importClause; + if ((!name || isUnused(name)) && (!namedBindings || namedBindings.kind === 276 /* NamedImports */ && namedBindings.elements.length !== 0 && namedBindings.elements.every((e) => isUnused(e.name)))) { + return changes.delete(sourceFile, importDecl); + } + } + forEachAliasDeclarationInImportOrRequire(importDecl, (i) => { + if (i.name && isIdentifier(i.name) && isUnused(i.name)) { + changes.delete(sourceFile, i); + } + }); +} +function isTopLevelDeclarationStatement(node) { + Debug.assert(isSourceFile(node.parent), "Node parent should be a SourceFile"); + return isNonVariableTopLevelDeclaration(node) || isVariableStatement(node); +} +function addExport(decl, useEs6Exports) { + return useEs6Exports ? [addEs6Export(decl)] : addCommonjsExport(decl); +} +function addEs6Export(d) { + const modifiers = canHaveModifiers(d) ? concatenate([factory.createModifier(95 /* ExportKeyword */)], getModifiers(d)) : void 0; + switch (d.kind) { + case 263 /* FunctionDeclaration */: + return factory.updateFunctionDeclaration(d, modifiers, d.asteriskToken, d.name, d.typeParameters, d.parameters, d.type, d.body); + case 264 /* ClassDeclaration */: + const decorators = canHaveDecorators(d) ? getDecorators(d) : void 0; + return factory.updateClassDeclaration(d, concatenate(decorators, modifiers), d.name, d.typeParameters, d.heritageClauses, d.members); + case 244 /* VariableStatement */: + return factory.updateVariableStatement(d, modifiers, d.declarationList); + case 268 /* ModuleDeclaration */: + return factory.updateModuleDeclaration(d, modifiers, d.name, d.body); + case 267 /* EnumDeclaration */: + return factory.updateEnumDeclaration(d, modifiers, d.name, d.members); + case 266 /* TypeAliasDeclaration */: + return factory.updateTypeAliasDeclaration(d, modifiers, d.name, d.typeParameters, d.type); + case 265 /* InterfaceDeclaration */: + return factory.updateInterfaceDeclaration(d, modifiers, d.name, d.typeParameters, d.heritageClauses, d.members); + case 272 /* ImportEqualsDeclaration */: + return factory.updateImportEqualsDeclaration(d, modifiers, d.isTypeOnly, d.name, d.moduleReference); + case 245 /* ExpressionStatement */: + return Debug.fail(); + default: + return Debug.assertNever(d, `Unexpected declaration kind ${d.kind}`); + } +} +function addCommonjsExport(decl) { + return [decl, ...getNamesToExportInCommonJS(decl).map(createExportAssignment)]; +} +function createExportAssignment(name) { + return factory.createExpressionStatement( + factory.createBinaryExpression( + factory.createPropertyAccessExpression(factory.createIdentifier("exports"), factory.createIdentifier(name)), + 64 /* EqualsToken */, + factory.createIdentifier(name) + ) + ); +} +function getNamesToExportInCommonJS(decl) { + switch (decl.kind) { + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + return [decl.name.text]; + // TODO: GH#18217 + case 244 /* VariableStatement */: + return mapDefined(decl.declarationList.declarations, (d) => isIdentifier(d.name) ? d.name.text : void 0); + case 268 /* ModuleDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 265 /* InterfaceDeclaration */: + case 272 /* ImportEqualsDeclaration */: + return emptyArray; + case 245 /* ExpressionStatement */: + return Debug.fail("Can't export an ExpressionStatement"); + default: + return Debug.assertNever(decl, `Unexpected decl kind ${decl.kind}`); + } +} +function filterImport(i, moduleSpecifier, keep) { + switch (i.kind) { + case 273 /* ImportDeclaration */: { + const clause = i.importClause; + if (!clause) return void 0; + const defaultImport = clause.name && keep(clause.name) ? clause.name : void 0; + const namedBindings = clause.namedBindings && filterNamedBindings(clause.namedBindings, keep); + return defaultImport || namedBindings ? factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause(clause.phaseModifier, defaultImport, namedBindings), + getSynthesizedDeepClone(moduleSpecifier), + /*attributes*/ + void 0 + ) : void 0; + } + case 272 /* ImportEqualsDeclaration */: + return keep(i.name) ? i : void 0; + case 261 /* VariableDeclaration */: { + const name = filterBindingName(i.name, keep); + return name ? makeVariableStatement(name, i.type, createRequireCall(moduleSpecifier), i.parent.flags) : void 0; + } + default: + return Debug.assertNever(i, `Unexpected import kind ${i.kind}`); + } +} +function filterNamedBindings(namedBindings, keep) { + if (namedBindings.kind === 275 /* NamespaceImport */) { + return keep(namedBindings.name) ? namedBindings : void 0; + } else { + const newElements = namedBindings.elements.filter((e) => keep(e.name)); + return newElements.length ? factory.createNamedImports(newElements) : void 0; + } +} +function filterBindingName(name, keep) { + switch (name.kind) { + case 80 /* Identifier */: + return keep(name) ? name : void 0; + case 208 /* ArrayBindingPattern */: + return name; + case 207 /* ObjectBindingPattern */: { + const newElements = name.elements.filter((prop) => prop.propertyName || !isIdentifier(prop.name) || keep(prop.name)); + return newElements.length ? factory.createObjectBindingPattern(newElements) : void 0; + } + } +} +function nameOfTopLevelDeclaration(d) { + return isExpressionStatement(d) ? tryCast(d.expression.left.name, isIdentifier) : tryCast(d.name, isIdentifier); +} +function getTopLevelDeclarationStatement(d) { + switch (d.kind) { + case 261 /* VariableDeclaration */: + return d.parent.parent; + case 209 /* BindingElement */: + return getTopLevelDeclarationStatement( + cast(d.parent.parent, (p) => isVariableDeclaration(p) || isBindingElement(p)) + ); + default: + return d; + } +} +function addExportToChanges(sourceFile, decl, name, changes, useEs6Exports) { + if (isExported(sourceFile, decl, useEs6Exports, name)) return; + if (useEs6Exports) { + if (!isExpressionStatement(decl)) changes.insertExportModifier(sourceFile, decl); + } else { + const names = getNamesToExportInCommonJS(decl); + if (names.length !== 0) changes.insertNodesAfter(sourceFile, decl, names.map(createExportAssignment)); + } +} +function createNewFileName(oldFile, program, host, toMove) { + const checker = program.getTypeChecker(); + if (toMove) { + const usage = getUsageInfo(oldFile, toMove.all, checker); + const currentDirectory = getDirectoryPath(oldFile.fileName); + const extension = extensionFromPath(oldFile.fileName); + const newFileName = combinePaths( + // new file is always placed in the same directory as the old file + currentDirectory, + // ensures the filename computed below isn't already taken + makeUniqueFilename( + // infers a name for the new file from the symbols being moved + inferNewFileName(usage.oldFileImportsFromTargetFile, usage.movedSymbols), + extension, + currentDirectory, + host + ) + ) + extension; + return newFileName; + } + return ""; +} +function getRangeToMove(context) { + const { file } = context; + const range = createTextRangeFromSpan(getRefactorContextSpan(context)); + const { statements } = file; + let startNodeIndex = findIndex(statements, (s) => s.end > range.pos); + if (startNodeIndex === -1) return void 0; + const startStatement = statements[startNodeIndex]; + const overloadRangeToMove = getOverloadRangeToMove(file, startStatement); + if (overloadRangeToMove) { + startNodeIndex = overloadRangeToMove.start; + } + let endNodeIndex = findIndex(statements, (s) => s.end >= range.end, startNodeIndex); + if (endNodeIndex !== -1 && range.end <= statements[endNodeIndex].getStart()) { + endNodeIndex--; + } + const endingOverloadRangeToMove = getOverloadRangeToMove(file, statements[endNodeIndex]); + if (endingOverloadRangeToMove) { + endNodeIndex = endingOverloadRangeToMove.end; + } + return { + toMove: statements.slice(startNodeIndex, endNodeIndex === -1 ? statements.length : endNodeIndex + 1), + afterLast: endNodeIndex === -1 ? void 0 : statements[endNodeIndex + 1] + }; +} +function getStatementsToMove(context) { + const rangeToMove = getRangeToMove(context); + if (rangeToMove === void 0) return void 0; + const all = []; + const ranges = []; + const { toMove, afterLast } = rangeToMove; + getRangesWhere(toMove, isAllowedStatementToMove, (start, afterEndIndex) => { + for (let i = start; i < afterEndIndex; i++) all.push(toMove[i]); + ranges.push({ first: toMove[start], afterLast }); + }); + return all.length === 0 ? void 0 : { all, ranges }; +} +function containsJsx(statements) { + return find(statements, (statement) => !!(statement.transformFlags & 2 /* ContainsJsx */)); +} +function isAllowedStatementToMove(statement) { + return !isPureImport(statement) && !isPrologueDirective(statement); +} +function isPureImport(node) { + switch (node.kind) { + case 273 /* ImportDeclaration */: + return true; + case 272 /* ImportEqualsDeclaration */: + return !hasSyntacticModifier(node, 32 /* Export */); + case 244 /* VariableStatement */: + return node.declarationList.declarations.every((d) => !!d.initializer && isRequireCall( + d.initializer, + /*requireStringLiteralLikeArgument*/ + true + )); + default: + return false; + } +} +function getUsageInfo(oldFile, toMove, checker, existingTargetLocals = /* @__PURE__ */ new Set(), enclosingRange) { + var _a; + const movedSymbols = /* @__PURE__ */ new Set(); + const oldImportsNeededByTargetFile = /* @__PURE__ */ new Map(); + const targetFileImportsFromOldFile = /* @__PURE__ */ new Map(); + const jsxNamespaceSymbol = getJsxNamespaceSymbol(containsJsx(toMove)); + if (jsxNamespaceSymbol) { + oldImportsNeededByTargetFile.set(jsxNamespaceSymbol, [false, tryCast((_a = jsxNamespaceSymbol.declarations) == null ? void 0 : _a[0], (d) => isImportSpecifier(d) || isImportClause(d) || isNamespaceImport(d) || isImportEqualsDeclaration(d) || isBindingElement(d) || isVariableDeclaration(d))]); + } + for (const statement of toMove) { + forEachTopLevelDeclaration(statement, (decl) => { + movedSymbols.add(Debug.checkDefined(isExpressionStatement(decl) ? checker.getSymbolAtLocation(decl.expression.left) : decl.symbol, "Need a symbol here")); + }); + } + const unusedImportsFromOldFile = /* @__PURE__ */ new Set(); + for (const statement of toMove) { + forEachReference(statement, checker, enclosingRange, (symbol, isValidTypeOnlyUseSite) => { + if (!some(symbol.declarations)) { + return; + } + if (existingTargetLocals.has(skipAlias(symbol, checker))) { + unusedImportsFromOldFile.add(symbol); + return; + } + const importedDeclaration = find(symbol.declarations, isInImport); + if (importedDeclaration) { + const prevIsTypeOnly = oldImportsNeededByTargetFile.get(symbol); + oldImportsNeededByTargetFile.set(symbol, [ + prevIsTypeOnly === void 0 ? isValidTypeOnlyUseSite : prevIsTypeOnly && isValidTypeOnlyUseSite, + tryCast(importedDeclaration, (d) => isImportSpecifier(d) || isImportClause(d) || isNamespaceImport(d) || isImportEqualsDeclaration(d) || isBindingElement(d) || isVariableDeclaration(d)) + ]); + } else if (!movedSymbols.has(symbol) && every(symbol.declarations, (decl) => isTopLevelDeclaration(decl) && sourceFileOfTopLevelDeclaration(decl) === oldFile)) { + targetFileImportsFromOldFile.set(symbol, isValidTypeOnlyUseSite); + } + }); + } + for (const unusedImport of oldImportsNeededByTargetFile.keys()) { + unusedImportsFromOldFile.add(unusedImport); + } + const oldFileImportsFromTargetFile = /* @__PURE__ */ new Map(); + for (const statement of oldFile.statements) { + if (contains(toMove, statement)) continue; + if (jsxNamespaceSymbol && !!(statement.transformFlags & 2 /* ContainsJsx */)) { + unusedImportsFromOldFile.delete(jsxNamespaceSymbol); + } + forEachReference(statement, checker, enclosingRange, (symbol, isValidTypeOnlyUseSite) => { + if (movedSymbols.has(symbol)) oldFileImportsFromTargetFile.set(symbol, isValidTypeOnlyUseSite); + unusedImportsFromOldFile.delete(symbol); + }); + } + return { movedSymbols, targetFileImportsFromOldFile, oldFileImportsFromTargetFile, oldImportsNeededByTargetFile, unusedImportsFromOldFile }; + function getJsxNamespaceSymbol(containsJsx2) { + if (containsJsx2 === void 0) { + return void 0; + } + const jsxNamespace = checker.getJsxNamespace(containsJsx2); + const jsxNamespaceSymbol2 = checker.resolveName( + jsxNamespace, + containsJsx2, + 1920 /* Namespace */, + /*excludeGlobals*/ + true + ); + return !!jsxNamespaceSymbol2 && some(jsxNamespaceSymbol2.declarations, isInImport) ? jsxNamespaceSymbol2 : void 0; + } +} +function makeUniqueFilename(proposedFilename, extension, inDirectory, host) { + let newFilename = proposedFilename; + for (let i = 1; ; i++) { + const name = combinePaths(inDirectory, newFilename + extension); + if (!host.fileExists(name)) return newFilename; + newFilename = `${proposedFilename}.${i}`; + } +} +function inferNewFileName(importsFromNewFile, movedSymbols) { + return forEachKey(importsFromNewFile, symbolNameNoDefault) || forEachKey(movedSymbols, symbolNameNoDefault) || "newFile"; +} +function forEachReference(node, checker, enclosingRange, onReference) { + node.forEachChild(function cb(node2) { + if (isIdentifier(node2) && !isDeclarationName(node2)) { + if (enclosingRange && !rangeContainsRange(enclosingRange, node2)) { + return; + } + const sym = checker.getSymbolAtLocation(node2); + if (sym) onReference(sym, isValidTypeOnlyAliasUseSite(node2)); + } else { + node2.forEachChild(cb); + } + }); +} +function forEachTopLevelDeclaration(statement, cb) { + switch (statement.kind) { + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + case 268 /* ModuleDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 265 /* InterfaceDeclaration */: + case 272 /* ImportEqualsDeclaration */: + return cb(statement); + case 244 /* VariableStatement */: + return firstDefined(statement.declarationList.declarations, (decl) => forEachTopLevelDeclarationInBindingName(decl.name, cb)); + case 245 /* ExpressionStatement */: { + const { expression } = statement; + return isBinaryExpression(expression) && getAssignmentDeclarationKind(expression) === 1 /* ExportsProperty */ ? cb(statement) : void 0; + } + } +} +function isInImport(decl) { + switch (decl.kind) { + case 272 /* ImportEqualsDeclaration */: + case 277 /* ImportSpecifier */: + case 274 /* ImportClause */: + case 275 /* NamespaceImport */: + return true; + case 261 /* VariableDeclaration */: + return isVariableDeclarationInImport(decl); + case 209 /* BindingElement */: + return isVariableDeclaration(decl.parent.parent) && isVariableDeclarationInImport(decl.parent.parent); + default: + return false; + } +} +function isVariableDeclarationInImport(decl) { + return isSourceFile(decl.parent.parent.parent) && !!decl.initializer && isRequireCall( + decl.initializer, + /*requireStringLiteralLikeArgument*/ + true + ); +} +function isTopLevelDeclaration(node) { + return isNonVariableTopLevelDeclaration(node) && isSourceFile(node.parent) || isVariableDeclaration(node) && isSourceFile(node.parent.parent.parent); +} +function sourceFileOfTopLevelDeclaration(node) { + return isVariableDeclaration(node) ? node.parent.parent.parent : node.parent; +} +function forEachTopLevelDeclarationInBindingName(name, cb) { + switch (name.kind) { + case 80 /* Identifier */: + return cb(cast(name.parent, (x) => isVariableDeclaration(x) || isBindingElement(x))); + case 208 /* ArrayBindingPattern */: + case 207 /* ObjectBindingPattern */: + return firstDefined(name.elements, (em) => isOmittedExpression(em) ? void 0 : forEachTopLevelDeclarationInBindingName(em.name, cb)); + default: + return Debug.assertNever(name, `Unexpected name kind ${name.kind}`); + } +} +function isNonVariableTopLevelDeclaration(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + case 268 /* ModuleDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 265 /* InterfaceDeclaration */: + case 272 /* ImportEqualsDeclaration */: + return true; + default: + return false; + } +} +function moveStatementsToTargetFile(changes, program, statements, targetFile, toMove) { + var _a; + const removedExports = /* @__PURE__ */ new Set(); + const targetExports = (_a = targetFile.symbol) == null ? void 0 : _a.exports; + if (targetExports) { + const checker = program.getTypeChecker(); + const targetToSourceExports = /* @__PURE__ */ new Map(); + for (const node of toMove.all) { + if (isTopLevelDeclarationStatement(node) && hasSyntacticModifier(node, 32 /* Export */)) { + forEachTopLevelDeclaration(node, (declaration) => { + var _a2; + const targetDeclarations = canHaveSymbol(declaration) ? (_a2 = targetExports.get(declaration.symbol.escapedName)) == null ? void 0 : _a2.declarations : void 0; + const exportDeclaration = firstDefined(targetDeclarations, (d) => isExportDeclaration(d) ? d : isExportSpecifier(d) ? tryCast(d.parent.parent, isExportDeclaration) : void 0); + if (exportDeclaration && exportDeclaration.moduleSpecifier) { + targetToSourceExports.set(exportDeclaration, (targetToSourceExports.get(exportDeclaration) || /* @__PURE__ */ new Set()).add(declaration)); + } + }); + } + } + for (const [exportDeclaration, topLevelDeclarations] of arrayFrom(targetToSourceExports)) { + if (exportDeclaration.exportClause && isNamedExports(exportDeclaration.exportClause) && length(exportDeclaration.exportClause.elements)) { + const elements = exportDeclaration.exportClause.elements; + const updatedElements = filter(elements, (elem) => find(skipAlias(elem.symbol, checker).declarations, (d) => isTopLevelDeclaration(d) && topLevelDeclarations.has(d)) === void 0); + if (length(updatedElements) === 0) { + changes.deleteNode(targetFile, exportDeclaration); + removedExports.add(exportDeclaration); + continue; + } + if (length(updatedElements) < length(elements)) { + changes.replaceNode(targetFile, exportDeclaration, factory.updateExportDeclaration(exportDeclaration, exportDeclaration.modifiers, exportDeclaration.isTypeOnly, factory.updateNamedExports(exportDeclaration.exportClause, factory.createNodeArray(updatedElements, elements.hasTrailingComma)), exportDeclaration.moduleSpecifier, exportDeclaration.attributes)); + } + } + } + } + const lastReExport = findLast(targetFile.statements, (n) => isExportDeclaration(n) && !!n.moduleSpecifier && !removedExports.has(n)); + if (lastReExport) { + changes.insertNodesBefore( + targetFile, + lastReExport, + statements, + /*blankLineBetween*/ + true + ); + } else { + changes.insertNodesAfter(targetFile, targetFile.statements[targetFile.statements.length - 1], statements); + } +} +function getOverloadRangeToMove(sourceFile, statement) { + if (isFunctionLikeDeclaration(statement)) { + const declarations = statement.symbol.declarations; + if (declarations === void 0 || length(declarations) <= 1 || !contains(declarations, statement)) { + return void 0; + } + const firstDecl = declarations[0]; + const lastDecl = declarations[length(declarations) - 1]; + const statementsToMove = mapDefined(declarations, (d) => getSourceFileOfNode(d) === sourceFile && isStatement(d) ? d : void 0); + const end = findIndex(sourceFile.statements, (s) => s.end >= lastDecl.end); + const start = findIndex(sourceFile.statements, (s) => s.end >= firstDecl.end); + return { toMove: statementsToMove, start, end }; + } + return void 0; +} +function getExistingLocals(sourceFile, statements, checker) { + const existingLocals = /* @__PURE__ */ new Set(); + for (const moduleSpecifier of sourceFile.imports) { + const declaration = importFromModuleSpecifier(moduleSpecifier); + if (isImportDeclaration(declaration) && declaration.importClause && declaration.importClause.namedBindings && isNamedImports(declaration.importClause.namedBindings)) { + for (const e of declaration.importClause.namedBindings.elements) { + const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); + if (symbol) { + existingLocals.add(skipAlias(symbol, checker)); + } + } + } + if (isVariableDeclarationInitializedToRequire(declaration.parent) && isObjectBindingPattern(declaration.parent.name)) { + for (const e of declaration.parent.name.elements) { + const symbol = checker.getSymbolAtLocation(e.propertyName || e.name); + if (symbol) { + existingLocals.add(skipAlias(symbol, checker)); + } + } + } + } + for (const statement of statements) { + forEachReference( + statement, + checker, + /*enclosingRange*/ + void 0, + (s) => { + const symbol = skipAlias(s, checker); + if (symbol.valueDeclaration && getSourceFileOfNode(symbol.valueDeclaration).path === sourceFile.path) { + existingLocals.add(symbol); + } + } + ); + } + return existingLocals; +} + +// src/services/refactors/helpers.ts +function isRefactorErrorInfo(info) { + return info.error !== void 0; +} +function refactorKindBeginsWith(known, requested) { + if (!requested) return true; + return known.substr(0, requested.length) === requested; +} +function getIdentifierForNode(node, scope, checker, file) { + return isPropertyAccessExpression(node) && !isClassLike(scope) && !checker.resolveName( + node.name.text, + node, + 111551 /* Value */, + /*excludeGlobals*/ + false + ) && !isPrivateIdentifier(node.name) && !identifierToKeywordKind(node.name) ? node.name.text : getUniqueName(isClassLike(scope) ? "newProperty" : "newLocal", file); +} +function addTargetFileImports(oldFile, importsToCopy, targetFileImportsFromOldFile, checker, program, importAdder) { + importsToCopy.forEach(([isValidTypeOnlyUseSite, declaration], symbol) => { + var _a; + const targetSymbol = skipAlias(symbol, checker); + if (checker.isUnknownSymbol(targetSymbol)) { + importAdder.addVerbatimImport(Debug.checkDefined(declaration ?? findAncestor((_a = symbol.declarations) == null ? void 0 : _a[0], isAnyImportOrRequireStatement))); + } else if (targetSymbol.parent === void 0) { + Debug.assert(declaration !== void 0, "expected module symbol to have a declaration"); + importAdder.addImportForModuleSymbol(symbol, isValidTypeOnlyUseSite, declaration); + } else { + importAdder.addImportFromExportedSymbol(targetSymbol, isValidTypeOnlyUseSite, declaration); + } + }); + addImportsForMovedSymbols(targetFileImportsFromOldFile, oldFile.fileName, importAdder, program); +} + +// src/services/refactors/inlineVariable.ts +var refactorName4 = "Inline variable"; +var refactorDescription = getLocaleSpecificMessage(Diagnostics.Inline_variable); +var inlineVariableAction = { + name: refactorName4, + description: refactorDescription, + kind: "refactor.inline.variable" +}; +registerRefactor(refactorName4, { + kinds: [inlineVariableAction.kind], + getAvailableActions(context) { + const { + file, + program, + preferences, + startPosition, + triggerReason + } = context; + const info = getInliningInfo(file, startPosition, triggerReason === "invoked", program); + if (!info) { + return emptyArray; + } + if (!ts_refactor_exports.isRefactorErrorInfo(info)) { + return [{ + name: refactorName4, + description: refactorDescription, + actions: [inlineVariableAction] + }]; + } + if (preferences.provideRefactorNotApplicableReason) { + return [{ + name: refactorName4, + description: refactorDescription, + actions: [{ + ...inlineVariableAction, + notApplicableReason: info.error + }] + }]; + } + return emptyArray; + }, + getEditsForAction(context, actionName2) { + Debug.assert(actionName2 === refactorName4, "Unexpected refactor invoked"); + const { file, program, startPosition } = context; + const info = getInliningInfo( + file, + startPosition, + /*tryWithReferenceToken*/ + true, + program + ); + if (!info || ts_refactor_exports.isRefactorErrorInfo(info)) { + return void 0; + } + const { references, declaration, replacement } = info; + const edits = ts_textChanges_exports.ChangeTracker.with(context, (tracker) => { + for (const node of references) { + const closestStringIdentifierParent = isStringLiteral(replacement) && isIdentifier(node) && walkUpParenthesizedExpressions(node.parent); + if (closestStringIdentifierParent && isTemplateSpan(closestStringIdentifierParent) && !isTaggedTemplateExpression(closestStringIdentifierParent.parent.parent)) { + replaceTemplateStringVariableWithLiteral(tracker, file, closestStringIdentifierParent, replacement); + } else { + tracker.replaceNode(file, node, getReplacementExpression(node, replacement)); + } + } + tracker.delete(file, declaration); + }); + return { edits }; + } +}); +function getInliningInfo(file, startPosition, tryWithReferenceToken, program) { + var _a, _b; + const checker = program.getTypeChecker(); + const token = getTouchingPropertyName(file, startPosition); + const parent2 = token.parent; + if (!isIdentifier(token)) { + return void 0; + } + if (isInitializedVariable(parent2) && isVariableDeclarationInVariableStatement(parent2) && isIdentifier(parent2.name)) { + if (((_a = checker.getMergedSymbol(parent2.symbol).declarations) == null ? void 0 : _a.length) !== 1) { + return { error: getLocaleSpecificMessage(Diagnostics.Variables_with_multiple_declarations_cannot_be_inlined) }; + } + if (isDeclarationExported(parent2)) { + return void 0; + } + const references = getReferenceNodes(parent2, checker, file); + return references && { references, declaration: parent2, replacement: parent2.initializer }; + } + if (tryWithReferenceToken) { + let definition = checker.resolveName( + token.text, + token, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + definition = definition && checker.getMergedSymbol(definition); + if (((_b = definition == null ? void 0 : definition.declarations) == null ? void 0 : _b.length) !== 1) { + return { error: getLocaleSpecificMessage(Diagnostics.Variables_with_multiple_declarations_cannot_be_inlined) }; + } + const declaration = definition.declarations[0]; + if (!isInitializedVariable(declaration) || !isVariableDeclarationInVariableStatement(declaration) || !isIdentifier(declaration.name)) { + return void 0; + } + if (isDeclarationExported(declaration)) { + return void 0; + } + const references = getReferenceNodes(declaration, checker, file); + return references && { references, declaration, replacement: declaration.initializer }; + } + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_variable_to_inline) }; +} +function isDeclarationExported(declaration) { + const variableStatement = cast(declaration.parent.parent, isVariableStatement); + return some(variableStatement.modifiers, isExportModifier); +} +function getReferenceNodes(declaration, checker, file) { + const references = []; + const cannotInline = ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(declaration.name, checker, file, (ref) => { + if (ts_FindAllReferences_exports.isWriteAccessForReference(ref) && !isShorthandPropertyAssignment(ref.parent)) { + return true; + } + if (isExportSpecifier(ref.parent) || isExportAssignment(ref.parent)) { + return true; + } + if (isTypeQueryNode(ref.parent)) { + return true; + } + if (textRangeContainsPositionInclusive(declaration, ref.pos)) { + return true; + } + references.push(ref); + }); + return references.length === 0 || cannotInline ? void 0 : references; +} +function getReplacementExpression(reference, replacement) { + replacement = getSynthesizedDeepClone(replacement); + const { parent: parent2 } = reference; + if (isExpression(parent2) && (getExpressionPrecedence(replacement) < getExpressionPrecedence(parent2) || needsParentheses(parent2))) { + return factory.createParenthesizedExpression(replacement); + } + if (isFunctionLike(replacement) && (isCallLikeExpression(parent2) || isPropertyAccessExpression(parent2))) { + return factory.createParenthesizedExpression(replacement); + } + if (isPropertyAccessExpression(parent2) && (isNumericLiteral(replacement) || isObjectLiteralExpression(replacement))) { + return factory.createParenthesizedExpression(replacement); + } + if (isIdentifier(reference) && isShorthandPropertyAssignment(parent2)) { + return factory.createPropertyAssignment(reference, replacement); + } + return replacement; +} +function replaceTemplateStringVariableWithLiteral(tracker, sourceFile, reference, replacement) { + const templateExpression = reference.parent; + const index = templateExpression.templateSpans.indexOf(reference); + const prevNode = index === 0 ? templateExpression.head : templateExpression.templateSpans[index - 1]; + tracker.replaceRangeWithText( + sourceFile, + { + pos: prevNode.getEnd() - 2, + end: reference.literal.getStart() + 1 + }, + replacement.text.replace(/\\/g, "\\\\").replace(/`/g, "\\`") + ); +} + +// src/services/refactors/moveToNewFile.ts +var refactorName5 = "Move to a new file"; +var description2 = getLocaleSpecificMessage(Diagnostics.Move_to_a_new_file); +var moveToNewFileAction = { + name: refactorName5, + description: description2, + kind: "refactor.move.newFile" +}; +registerRefactor(refactorName5, { + kinds: [moveToNewFileAction.kind], + getAvailableActions: function getRefactorActionsToMoveToNewFile(context) { + const statements = getStatementsToMove(context); + const file = context.file; + if (context.triggerReason === "implicit" && context.endPosition !== void 0) { + const startNodeAncestor = findAncestor(getTokenAtPosition(file, context.startPosition), isBlockLike); + const endNodeAncestor = findAncestor(getTokenAtPosition(file, context.endPosition), isBlockLike); + if (startNodeAncestor && !isSourceFile(startNodeAncestor) && endNodeAncestor && !isSourceFile(endNodeAncestor)) { + return emptyArray; + } + } + if (context.preferences.allowTextChangesInNewFiles && statements) { + const file2 = context.file; + const affectedTextRange = { + start: { line: getLineAndCharacterOfPosition(file2, statements.all[0].getStart(file2)).line, offset: getLineAndCharacterOfPosition(file2, statements.all[0].getStart(file2)).character }, + end: { line: getLineAndCharacterOfPosition(file2, last(statements.all).end).line, offset: getLineAndCharacterOfPosition(file2, last(statements.all).end).character } + }; + return [{ name: refactorName5, description: description2, actions: [{ ...moveToNewFileAction, range: affectedTextRange }] }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ name: refactorName5, description: description2, actions: [{ ...moveToNewFileAction, notApplicableReason: getLocaleSpecificMessage(Diagnostics.Selection_is_not_a_valid_statement_or_statements) }] }]; + } + return emptyArray; + }, + getEditsForAction: function getRefactorEditsToMoveToNewFile(context, actionName2) { + Debug.assert(actionName2 === refactorName5, "Wrong refactor invoked"); + const statements = Debug.checkDefined(getStatementsToMove(context)); + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange4(context.file, context.program, statements, t, context.host, context, context.preferences)); + return { edits, renameFilename: void 0, renameLocation: void 0 }; + } +}); +function doChange4(oldFile, program, toMove, changes, host, context, preferences) { + const checker = program.getTypeChecker(); + const usage = getUsageInfo(oldFile, toMove.all, checker); + const newFilename = createNewFileName(oldFile, program, host, toMove); + const newSourceFile = createFutureSourceFile(newFilename, oldFile.externalModuleIndicator ? 99 /* ESNext */ : oldFile.commonJsModuleIndicator ? 1 /* CommonJS */ : void 0, program, host); + const importAdderForOldFile = ts_codefix_exports.createImportAdder(oldFile, context.program, context.preferences, context.host); + const importAdderForNewFile = ts_codefix_exports.createImportAdder(newSourceFile, context.program, context.preferences, context.host); + getNewStatementsAndRemoveFromOldFile(oldFile, newSourceFile, usage, changes, toMove, program, host, preferences, importAdderForNewFile, importAdderForOldFile); + addNewFileToTsconfig(program, changes, oldFile.fileName, newFilename, hostGetCanonicalFileName(host)); +} + +// src/services/_namespaces/ts.refactor.addOrRemoveBracesToArrowFunction.ts +var ts_refactor_addOrRemoveBracesToArrowFunction_exports = {}; + +// src/services/refactors/convertOverloadListToSingleSignature.ts +var refactorName6 = "Convert overload list to single signature"; +var refactorDescription2 = getLocaleSpecificMessage(Diagnostics.Convert_overload_list_to_single_signature); +var functionOverloadAction = { + name: refactorName6, + description: refactorDescription2, + kind: "refactor.rewrite.function.overloadList" +}; +registerRefactor(refactorName6, { + kinds: [functionOverloadAction.kind], + getEditsForAction: getRefactorEditsToConvertOverloadsToOneSignature, + getAvailableActions: getRefactorActionsToConvertOverloadsToOneSignature +}); +function getRefactorActionsToConvertOverloadsToOneSignature(context) { + const { file, startPosition, program } = context; + const info = getConvertableOverloadListAtPosition(file, startPosition, program); + if (!info) return emptyArray; + return [{ + name: refactorName6, + description: refactorDescription2, + actions: [functionOverloadAction] + }]; +} +function getRefactorEditsToConvertOverloadsToOneSignature(context) { + const { file, startPosition, program } = context; + const signatureDecls = getConvertableOverloadListAtPosition(file, startPosition, program); + if (!signatureDecls) return void 0; + const checker = program.getTypeChecker(); + const lastDeclaration = signatureDecls[signatureDecls.length - 1]; + let updated = lastDeclaration; + switch (lastDeclaration.kind) { + case 174 /* MethodSignature */: { + updated = factory.updateMethodSignature( + lastDeclaration, + lastDeclaration.modifiers, + lastDeclaration.name, + lastDeclaration.questionToken, + lastDeclaration.typeParameters, + getNewParametersForCombinedSignature(signatureDecls), + lastDeclaration.type + ); + break; + } + case 175 /* MethodDeclaration */: { + updated = factory.updateMethodDeclaration( + lastDeclaration, + lastDeclaration.modifiers, + lastDeclaration.asteriskToken, + lastDeclaration.name, + lastDeclaration.questionToken, + lastDeclaration.typeParameters, + getNewParametersForCombinedSignature(signatureDecls), + lastDeclaration.type, + lastDeclaration.body + ); + break; + } + case 180 /* CallSignature */: { + updated = factory.updateCallSignature( + lastDeclaration, + lastDeclaration.typeParameters, + getNewParametersForCombinedSignature(signatureDecls), + lastDeclaration.type + ); + break; + } + case 177 /* Constructor */: { + updated = factory.updateConstructorDeclaration( + lastDeclaration, + lastDeclaration.modifiers, + getNewParametersForCombinedSignature(signatureDecls), + lastDeclaration.body + ); + break; + } + case 181 /* ConstructSignature */: { + updated = factory.updateConstructSignature( + lastDeclaration, + lastDeclaration.typeParameters, + getNewParametersForCombinedSignature(signatureDecls), + lastDeclaration.type + ); + break; + } + case 263 /* FunctionDeclaration */: { + updated = factory.updateFunctionDeclaration( + lastDeclaration, + lastDeclaration.modifiers, + lastDeclaration.asteriskToken, + lastDeclaration.name, + lastDeclaration.typeParameters, + getNewParametersForCombinedSignature(signatureDecls), + lastDeclaration.type, + lastDeclaration.body + ); + break; + } + default: + return Debug.failBadSyntaxKind(lastDeclaration, "Unhandled signature kind in overload list conversion refactoring"); + } + if (updated === lastDeclaration) { + return; + } + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => { + t.replaceNodeRange(file, signatureDecls[0], signatureDecls[signatureDecls.length - 1], updated); + }); + return { renameFilename: void 0, renameLocation: void 0, edits }; + function getNewParametersForCombinedSignature(signatureDeclarations) { + const lastSig = signatureDeclarations[signatureDeclarations.length - 1]; + if (isFunctionLikeDeclaration(lastSig) && lastSig.body) { + signatureDeclarations = signatureDeclarations.slice(0, signatureDeclarations.length - 1); + } + return factory.createNodeArray([ + factory.createParameterDeclaration( + /*modifiers*/ + void 0, + factory.createToken(26 /* DotDotDotToken */), + "args", + /*questionToken*/ + void 0, + factory.createUnionTypeNode(map(signatureDeclarations, convertSignatureParametersToTuple)) + ) + ]); + } + function convertSignatureParametersToTuple(decl) { + const members = map(decl.parameters, convertParameterToNamedTupleMember); + return setEmitFlags(factory.createTupleTypeNode(members), some(members, (m) => !!length(getSyntheticLeadingComments(m))) ? 0 /* None */ : 1 /* SingleLine */); + } + function convertParameterToNamedTupleMember(p) { + Debug.assert(isIdentifier(p.name)); + const result = setTextRange( + factory.createNamedTupleMember( + p.dotDotDotToken, + p.name, + p.questionToken, + p.type || factory.createKeywordTypeNode(133 /* AnyKeyword */) + ), + p + ); + const parameterDocComment = p.symbol && p.symbol.getDocumentationComment(checker); + if (parameterDocComment) { + const newComment = displayPartsToString(parameterDocComment); + if (newComment.length) { + setSyntheticLeadingComments(result, [{ + text: `* +${newComment.split("\n").map((c) => ` * ${c}`).join("\n")} + `, + kind: 3 /* MultiLineCommentTrivia */, + pos: -1, + end: -1, + hasTrailingNewLine: true, + hasLeadingNewline: true + }]); + } + } + return result; + } +} +function isConvertableSignatureDeclaration(d) { + switch (d.kind) { + case 174 /* MethodSignature */: + case 175 /* MethodDeclaration */: + case 180 /* CallSignature */: + case 177 /* Constructor */: + case 181 /* ConstructSignature */: + case 263 /* FunctionDeclaration */: + return true; + } + return false; +} +function getConvertableOverloadListAtPosition(file, startPosition, program) { + const node = getTokenAtPosition(file, startPosition); + const containingDecl = findAncestor(node, isConvertableSignatureDeclaration); + if (!containingDecl) { + return; + } + if (isFunctionLikeDeclaration(containingDecl) && containingDecl.body && rangeContainsPosition(containingDecl.body, startPosition)) { + return; + } + const checker = program.getTypeChecker(); + const signatureSymbol = containingDecl.symbol; + if (!signatureSymbol) { + return; + } + const decls = signatureSymbol.declarations; + if (length(decls) <= 1) { + return; + } + if (!every(decls, (d) => getSourceFileOfNode(d) === file)) { + return; + } + if (!isConvertableSignatureDeclaration(decls[0])) { + return; + } + const kindOne = decls[0].kind; + if (!every(decls, (d) => d.kind === kindOne)) { + return; + } + const signatureDecls = decls; + if (some(signatureDecls, (d) => !!d.typeParameters || some(d.parameters, (p) => !!p.modifiers || !isIdentifier(p.name)))) { + return; + } + const signatures = mapDefined(signatureDecls, (d) => checker.getSignatureFromDeclaration(d)); + if (length(signatures) !== length(decls)) { + return; + } + const returnOne = checker.getReturnTypeOfSignature(signatures[0]); + if (!every(signatures, (s) => checker.getReturnTypeOfSignature(s) === returnOne)) { + return; + } + return signatureDecls; +} + +// src/services/refactors/addOrRemoveBracesToArrowFunction.ts +var refactorName7 = "Add or remove braces in an arrow function"; +var refactorDescription3 = getLocaleSpecificMessage(Diagnostics.Add_or_remove_braces_in_an_arrow_function); +var addBracesAction = { + name: "Add braces to arrow function", + description: getLocaleSpecificMessage(Diagnostics.Add_braces_to_arrow_function), + kind: "refactor.rewrite.arrow.braces.add" +}; +var removeBracesAction = { + name: "Remove braces from arrow function", + description: getLocaleSpecificMessage(Diagnostics.Remove_braces_from_arrow_function), + kind: "refactor.rewrite.arrow.braces.remove" +}; +registerRefactor(refactorName7, { + kinds: [removeBracesAction.kind], + getEditsForAction: getRefactorEditsToRemoveFunctionBraces, + getAvailableActions: getRefactorActionsToRemoveFunctionBraces +}); +function getRefactorActionsToRemoveFunctionBraces(context) { + const { file, startPosition, triggerReason } = context; + const info = getConvertibleArrowFunctionAtPosition(file, startPosition, triggerReason === "invoked"); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + return [{ + name: refactorName7, + description: refactorDescription3, + actions: [ + info.addBraces ? addBracesAction : removeBracesAction + ] + }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ + name: refactorName7, + description: refactorDescription3, + actions: [ + { ...addBracesAction, notApplicableReason: info.error }, + { ...removeBracesAction, notApplicableReason: info.error } + ] + }]; + } + return emptyArray; +} +function getRefactorEditsToRemoveFunctionBraces(context, actionName2) { + const { file, startPosition } = context; + const info = getConvertibleArrowFunctionAtPosition(file, startPosition); + Debug.assert(info && !isRefactorErrorInfo(info), "Expected applicable refactor info"); + const { expression, returnStatement, func } = info; + let body; + if (actionName2 === addBracesAction.name) { + const returnStatement2 = factory.createReturnStatement(expression); + body = factory.createBlock( + [returnStatement2], + /*multiLine*/ + true + ); + copyLeadingComments( + expression, + returnStatement2, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + true + ); + } else if (actionName2 === removeBracesAction.name && returnStatement) { + const actualExpression = expression || factory.createVoidZero(); + body = needsParentheses(actualExpression) ? factory.createParenthesizedExpression(actualExpression) : actualExpression; + copyTrailingAsLeadingComments( + returnStatement, + body, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); + copyLeadingComments( + returnStatement, + body, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); + copyTrailingComments( + returnStatement, + body, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); + } else { + Debug.fail("invalid action"); + } + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => { + t.replaceNode(file, func.body, body); + }); + return { renameFilename: void 0, renameLocation: void 0, edits }; +} +function getConvertibleArrowFunctionAtPosition(file, startPosition, considerFunctionBodies = true, kind) { + const node = getTokenAtPosition(file, startPosition); + const func = getContainingFunction(node); + if (!func) { + return { + error: getLocaleSpecificMessage(Diagnostics.Could_not_find_a_containing_arrow_function) + }; + } + if (!isArrowFunction(func)) { + return { + error: getLocaleSpecificMessage(Diagnostics.Containing_function_is_not_an_arrow_function) + }; + } + if (!rangeContainsRange(func, node) || rangeContainsRange(func.body, node) && !considerFunctionBodies) { + return void 0; + } + if (refactorKindBeginsWith(addBracesAction.kind, kind) && isExpression(func.body)) { + return { func, addBraces: true, expression: func.body }; + } else if (refactorKindBeginsWith(removeBracesAction.kind, kind) && isBlock(func.body) && func.body.statements.length === 1) { + const firstStatement = first(func.body.statements); + if (isReturnStatement(firstStatement)) { + const expression = firstStatement.expression && isObjectLiteralExpression(getLeftmostExpression( + firstStatement.expression, + /*stopAtCallExpressions*/ + false + )) ? factory.createParenthesizedExpression(firstStatement.expression) : firstStatement.expression; + return { func, addBraces: false, expression, returnStatement: firstStatement }; + } + } + return void 0; +} + +// src/services/_namespaces/ts.refactor.convertArrowFunctionOrFunctionExpression.ts +var ts_refactor_convertArrowFunctionOrFunctionExpression_exports = {}; + +// src/services/refactors/convertArrowFunctionOrFunctionExpression.ts +var refactorName8 = "Convert arrow function or function expression"; +var refactorDescription4 = getLocaleSpecificMessage(Diagnostics.Convert_arrow_function_or_function_expression); +var toAnonymousFunctionAction = { + name: "Convert to anonymous function", + description: getLocaleSpecificMessage(Diagnostics.Convert_to_anonymous_function), + kind: "refactor.rewrite.function.anonymous" +}; +var toNamedFunctionAction = { + name: "Convert to named function", + description: getLocaleSpecificMessage(Diagnostics.Convert_to_named_function), + kind: "refactor.rewrite.function.named" +}; +var toArrowFunctionAction = { + name: "Convert to arrow function", + description: getLocaleSpecificMessage(Diagnostics.Convert_to_arrow_function), + kind: "refactor.rewrite.function.arrow" +}; +registerRefactor(refactorName8, { + kinds: [ + toAnonymousFunctionAction.kind, + toNamedFunctionAction.kind, + toArrowFunctionAction.kind + ], + getEditsForAction: getRefactorEditsToConvertFunctionExpressions, + getAvailableActions: getRefactorActionsToConvertFunctionExpressions +}); +function getRefactorActionsToConvertFunctionExpressions(context) { + const { file, startPosition, program, kind } = context; + const info = getFunctionInfo(file, startPosition, program); + if (!info) return emptyArray; + const { selectedVariableDeclaration, func } = info; + const possibleActions = []; + const errors = []; + if (refactorKindBeginsWith(toNamedFunctionAction.kind, kind)) { + const error2 = selectedVariableDeclaration || isArrowFunction(func) && isVariableDeclaration(func.parent) ? void 0 : getLocaleSpecificMessage(Diagnostics.Could_not_convert_to_named_function); + if (error2) { + errors.push({ ...toNamedFunctionAction, notApplicableReason: error2 }); + } else { + possibleActions.push(toNamedFunctionAction); + } + } + if (refactorKindBeginsWith(toAnonymousFunctionAction.kind, kind)) { + const error2 = !selectedVariableDeclaration && isArrowFunction(func) ? void 0 : getLocaleSpecificMessage(Diagnostics.Could_not_convert_to_anonymous_function); + if (error2) { + errors.push({ ...toAnonymousFunctionAction, notApplicableReason: error2 }); + } else { + possibleActions.push(toAnonymousFunctionAction); + } + } + if (refactorKindBeginsWith(toArrowFunctionAction.kind, kind)) { + const error2 = isFunctionExpression(func) ? void 0 : getLocaleSpecificMessage(Diagnostics.Could_not_convert_to_arrow_function); + if (error2) { + errors.push({ ...toArrowFunctionAction, notApplicableReason: error2 }); + } else { + possibleActions.push(toArrowFunctionAction); + } + } + return [{ + name: refactorName8, + description: refactorDescription4, + actions: possibleActions.length === 0 && context.preferences.provideRefactorNotApplicableReason ? errors : possibleActions + }]; +} +function getRefactorEditsToConvertFunctionExpressions(context, actionName2) { + const { file, startPosition, program } = context; + const info = getFunctionInfo(file, startPosition, program); + if (!info) return void 0; + const { func } = info; + const edits = []; + switch (actionName2) { + case toAnonymousFunctionAction.name: + edits.push(...getEditInfoForConvertToAnonymousFunction(context, func)); + break; + case toNamedFunctionAction.name: + const variableInfo = getVariableInfo(func); + if (!variableInfo) return void 0; + edits.push(...getEditInfoForConvertToNamedFunction(context, func, variableInfo)); + break; + case toArrowFunctionAction.name: + if (!isFunctionExpression(func)) return void 0; + edits.push(...getEditInfoForConvertToArrowFunction(context, func)); + break; + default: + return Debug.fail("invalid action"); + } + return { renameFilename: void 0, renameLocation: void 0, edits }; +} +function containingThis(node) { + let containsThis = false; + node.forEachChild(function checkThis(child) { + if (isThis(child)) { + containsThis = true; + return; + } + if (!isClassLike(child) && !isFunctionDeclaration(child) && !isFunctionExpression(child)) { + forEachChild(child, checkThis); + } + }); + return containsThis; +} +function getFunctionInfo(file, startPosition, program) { + const token = getTokenAtPosition(file, startPosition); + const typeChecker = program.getTypeChecker(); + const func = tryGetFunctionFromVariableDeclaration(file, typeChecker, token.parent); + if (func && !containingThis(func.body) && !typeChecker.containsArgumentsReference(func)) { + return { selectedVariableDeclaration: true, func }; + } + const maybeFunc = getContainingFunction(token); + if (maybeFunc && (isFunctionExpression(maybeFunc) || isArrowFunction(maybeFunc)) && !rangeContainsRange(maybeFunc.body, token) && !containingThis(maybeFunc.body) && !typeChecker.containsArgumentsReference(maybeFunc)) { + if (isFunctionExpression(maybeFunc) && isFunctionReferencedInFile(file, typeChecker, maybeFunc)) return void 0; + return { selectedVariableDeclaration: false, func: maybeFunc }; + } + return void 0; +} +function isSingleVariableDeclaration(parent2) { + return isVariableDeclaration(parent2) || isVariableDeclarationList(parent2) && parent2.declarations.length === 1; +} +function tryGetFunctionFromVariableDeclaration(sourceFile, typeChecker, parent2) { + if (!isSingleVariableDeclaration(parent2)) { + return void 0; + } + const variableDeclaration = isVariableDeclaration(parent2) ? parent2 : first(parent2.declarations); + const initializer = variableDeclaration.initializer; + if (initializer && (isArrowFunction(initializer) || isFunctionExpression(initializer) && !isFunctionReferencedInFile(sourceFile, typeChecker, initializer))) { + return initializer; + } + return void 0; +} +function convertToBlock(body) { + if (isExpression(body)) { + const returnStatement = factory.createReturnStatement(body); + const file = body.getSourceFile(); + setTextRange(returnStatement, body); + suppressLeadingAndTrailingTrivia(returnStatement); + copyTrailingAsLeadingComments( + body, + returnStatement, + file, + /*commentKind*/ + void 0, + /*hasTrailingNewLine*/ + true + ); + return factory.createBlock( + [returnStatement], + /*multiLine*/ + true + ); + } else { + return body; + } +} +function getVariableInfo(func) { + const variableDeclaration = func.parent; + if (!isVariableDeclaration(variableDeclaration) || !isVariableDeclarationInVariableStatement(variableDeclaration)) return void 0; + const variableDeclarationList = variableDeclaration.parent; + const statement = variableDeclarationList.parent; + if (!isVariableDeclarationList(variableDeclarationList) || !isVariableStatement(statement) || !isIdentifier(variableDeclaration.name)) return void 0; + return { variableDeclaration, variableDeclarationList, statement, name: variableDeclaration.name }; +} +function getEditInfoForConvertToAnonymousFunction(context, func) { + const { file } = context; + const body = convertToBlock(func.body); + const newNode = factory.createFunctionExpression( + func.modifiers, + func.asteriskToken, + /*name*/ + void 0, + func.typeParameters, + func.parameters, + func.type, + body + ); + return ts_textChanges_exports.ChangeTracker.with(context, (t) => t.replaceNode(file, func, newNode)); +} +function getEditInfoForConvertToNamedFunction(context, func, variableInfo) { + const { file } = context; + const body = convertToBlock(func.body); + const { variableDeclaration, variableDeclarationList, statement, name } = variableInfo; + suppressLeadingTrivia(statement); + const modifiersFlags = getCombinedModifierFlags(variableDeclaration) & 32 /* Export */ | getEffectiveModifierFlags(func); + const modifiers = factory.createModifiersFromModifierFlags(modifiersFlags); + const newNode = factory.createFunctionDeclaration(length(modifiers) ? modifiers : void 0, func.asteriskToken, name, func.typeParameters, func.parameters, func.type, body); + if (variableDeclarationList.declarations.length === 1) { + return ts_textChanges_exports.ChangeTracker.with(context, (t) => t.replaceNode(file, statement, newNode)); + } else { + return ts_textChanges_exports.ChangeTracker.with(context, (t) => { + t.delete(file, variableDeclaration); + t.insertNodeAfter(file, statement, newNode); + }); + } +} +function getEditInfoForConvertToArrowFunction(context, func) { + const { file } = context; + const statements = func.body.statements; + const head = statements[0]; + let body; + if (canBeConvertedToExpression(func.body, head)) { + body = head.expression; + suppressLeadingAndTrailingTrivia(body); + copyComments(head, body); + } else { + body = func.body; + } + const newNode = factory.createArrowFunction(func.modifiers, func.typeParameters, func.parameters, func.type, factory.createToken(39 /* EqualsGreaterThanToken */), body); + return ts_textChanges_exports.ChangeTracker.with(context, (t) => t.replaceNode(file, func, newNode)); +} +function canBeConvertedToExpression(body, head) { + return body.statements.length === 1 && (isReturnStatement(head) && !!head.expression); +} +function isFunctionReferencedInFile(sourceFile, typeChecker, node) { + return !!node.name && ts_FindAllReferences_exports.Core.isSymbolReferencedInFile(node.name, typeChecker, sourceFile); +} + +// src/services/_namespaces/ts.refactor.convertParamsToDestructuredObject.ts +var ts_refactor_convertParamsToDestructuredObject_exports = {}; + +// src/services/refactors/convertParamsToDestructuredObject.ts +var refactorName9 = "Convert parameters to destructured object"; +var minimumParameterLength = 1; +var refactorDescription5 = getLocaleSpecificMessage(Diagnostics.Convert_parameters_to_destructured_object); +var toDestructuredAction = { + name: refactorName9, + description: refactorDescription5, + kind: "refactor.rewrite.parameters.toDestructured" +}; +registerRefactor(refactorName9, { + kinds: [toDestructuredAction.kind], + getEditsForAction: getRefactorEditsToConvertParametersToDestructuredObject, + getAvailableActions: getRefactorActionsToConvertParametersToDestructuredObject +}); +function getRefactorActionsToConvertParametersToDestructuredObject(context) { + const { file, startPosition } = context; + const isJSFile = isSourceFileJS(file); + if (isJSFile) return emptyArray; + const functionDeclaration = getFunctionDeclarationAtPosition(file, startPosition, context.program.getTypeChecker()); + if (!functionDeclaration) return emptyArray; + return [{ + name: refactorName9, + description: refactorDescription5, + actions: [toDestructuredAction] + }]; +} +function getRefactorEditsToConvertParametersToDestructuredObject(context, actionName2) { + Debug.assert(actionName2 === refactorName9, "Unexpected action name"); + const { file, startPosition, program, cancellationToken, host } = context; + const functionDeclaration = getFunctionDeclarationAtPosition(file, startPosition, program.getTypeChecker()); + if (!functionDeclaration || !cancellationToken) return void 0; + const groupedReferences = getGroupedReferences(functionDeclaration, program, cancellationToken); + if (groupedReferences.valid) { + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange5(file, program, host, t, functionDeclaration, groupedReferences)); + return { renameFilename: void 0, renameLocation: void 0, edits }; + } + return { edits: [] }; +} +function doChange5(sourceFile, program, host, changes, functionDeclaration, groupedReferences) { + const signature = groupedReferences.signature; + const newFunctionDeclarationParams = map(createNewParameters(functionDeclaration, program, host), (param) => getSynthesizedDeepClone(param)); + if (signature) { + const newSignatureParams = map(createNewParameters(signature, program, host), (param) => getSynthesizedDeepClone(param)); + replaceParameters(signature, newSignatureParams); + } + replaceParameters(functionDeclaration, newFunctionDeclarationParams); + const functionCalls = sortAndDeduplicate( + groupedReferences.functionCalls, + /*comparer*/ + (a, b) => compareValues(a.pos, b.pos) + ); + for (const call of functionCalls) { + if (call.arguments && call.arguments.length) { + const newArgument = getSynthesizedDeepClone( + createNewArgument(functionDeclaration, call.arguments), + /*includeTrivia*/ + true + ); + changes.replaceNodeRange( + getSourceFileOfNode(call), + first(call.arguments), + last(call.arguments), + newArgument, + { leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.IncludeAll, trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include } + ); + } + } + function replaceParameters(declarationOrSignature, parameterDeclarations) { + changes.replaceNodeRangeWithNodes( + sourceFile, + first(declarationOrSignature.parameters), + last(declarationOrSignature.parameters), + parameterDeclarations, + { + joiner: ", ", + // indentation is set to 0 because otherwise the object parameter will be indented if there is a `this` parameter + indentation: 0, + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.IncludeAll, + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include + } + ); + } +} +function getGroupedReferences(functionDeclaration, program, cancellationToken) { + const functionNames = getFunctionNames(functionDeclaration); + const classNames = isConstructorDeclaration(functionDeclaration) ? getClassNames(functionDeclaration) : []; + const names = deduplicate([...functionNames, ...classNames], equateValues); + const checker = program.getTypeChecker(); + const references = flatMap( + names, + /*mapfn*/ + (name) => ts_FindAllReferences_exports.getReferenceEntriesForNode(-1, name, program, program.getSourceFiles(), cancellationToken) + ); + const groupedReferences = groupReferences(references); + if (!every( + groupedReferences.declarations, + /*callback*/ + (decl) => contains(names, decl) + )) { + groupedReferences.valid = false; + } + return groupedReferences; + function groupReferences(referenceEntries) { + const classReferences = { accessExpressions: [], typeUsages: [] }; + const groupedReferences2 = { functionCalls: [], declarations: [], classReferences, valid: true }; + const functionSymbols = map(functionNames, getSymbolTargetAtLocation); + const classSymbols = map(classNames, getSymbolTargetAtLocation); + const isConstructor = isConstructorDeclaration(functionDeclaration); + const contextualSymbols = map(functionNames, (name) => getSymbolForContextualType(name, checker)); + for (const entry of referenceEntries) { + if (entry.kind === ts_FindAllReferences_exports.EntryKind.Span) { + groupedReferences2.valid = false; + continue; + } + if (contains(contextualSymbols, getSymbolTargetAtLocation(entry.node))) { + if (isValidMethodSignature(entry.node.parent)) { + groupedReferences2.signature = entry.node.parent; + continue; + } + const call = entryToFunctionCall(entry); + if (call) { + groupedReferences2.functionCalls.push(call); + continue; + } + } + const contextualSymbol = getSymbolForContextualType(entry.node, checker); + if (contextualSymbol && contains(contextualSymbols, contextualSymbol)) { + const decl = entryToDeclaration(entry); + if (decl) { + groupedReferences2.declarations.push(decl); + continue; + } + } + if (contains(functionSymbols, getSymbolTargetAtLocation(entry.node)) || isNewExpressionTarget(entry.node)) { + const importOrExportReference = entryToImportOrExport(entry); + if (importOrExportReference) { + continue; + } + const decl = entryToDeclaration(entry); + if (decl) { + groupedReferences2.declarations.push(decl); + continue; + } + const call = entryToFunctionCall(entry); + if (call) { + groupedReferences2.functionCalls.push(call); + continue; + } + } + if (isConstructor && contains(classSymbols, getSymbolTargetAtLocation(entry.node))) { + const importOrExportReference = entryToImportOrExport(entry); + if (importOrExportReference) { + continue; + } + const decl = entryToDeclaration(entry); + if (decl) { + groupedReferences2.declarations.push(decl); + continue; + } + const accessExpression = entryToAccessExpression(entry); + if (accessExpression) { + classReferences.accessExpressions.push(accessExpression); + continue; + } + if (isClassDeclaration(functionDeclaration.parent)) { + const type = entryToType(entry); + if (type) { + classReferences.typeUsages.push(type); + continue; + } + } + } + groupedReferences2.valid = false; + } + return groupedReferences2; + } + function getSymbolTargetAtLocation(node) { + const symbol = checker.getSymbolAtLocation(node); + return symbol && getSymbolTarget(symbol, checker); + } +} +function getSymbolForContextualType(node, checker) { + const element = getContainingObjectLiteralElement(node); + if (element) { + const contextualType = checker.getContextualTypeForObjectLiteralElement(element); + const symbol = contextualType == null ? void 0 : contextualType.getSymbol(); + if (symbol && !(getCheckFlags(symbol) & 6 /* Synthetic */)) { + return symbol; + } + } +} +function entryToImportOrExport(entry) { + const node = entry.node; + if (isImportSpecifier(node.parent) || isImportClause(node.parent) || isImportEqualsDeclaration(node.parent) || isNamespaceImport(node.parent)) { + return node; + } + if (isExportSpecifier(node.parent) || isExportAssignment(node.parent)) { + return node; + } + return void 0; +} +function entryToDeclaration(entry) { + if (isDeclaration(entry.node.parent)) { + return entry.node; + } + return void 0; +} +function entryToFunctionCall(entry) { + if (entry.node.parent) { + const functionReference = entry.node; + const parent2 = functionReference.parent; + switch (parent2.kind) { + // foo(...) or super(...) or new Foo(...) + case 214 /* CallExpression */: + case 215 /* NewExpression */: + const callOrNewExpression = tryCast(parent2, isCallOrNewExpression); + if (callOrNewExpression && callOrNewExpression.expression === functionReference) { + return callOrNewExpression; + } + break; + // x.foo(...) + case 212 /* PropertyAccessExpression */: + const propertyAccessExpression = tryCast(parent2, isPropertyAccessExpression); + if (propertyAccessExpression && propertyAccessExpression.parent && propertyAccessExpression.name === functionReference) { + const callOrNewExpression2 = tryCast(propertyAccessExpression.parent, isCallOrNewExpression); + if (callOrNewExpression2 && callOrNewExpression2.expression === propertyAccessExpression) { + return callOrNewExpression2; + } + } + break; + // x["foo"](...) + case 213 /* ElementAccessExpression */: + const elementAccessExpression = tryCast(parent2, isElementAccessExpression); + if (elementAccessExpression && elementAccessExpression.parent && elementAccessExpression.argumentExpression === functionReference) { + const callOrNewExpression2 = tryCast(elementAccessExpression.parent, isCallOrNewExpression); + if (callOrNewExpression2 && callOrNewExpression2.expression === elementAccessExpression) { + return callOrNewExpression2; + } + } + break; + } + } + return void 0; +} +function entryToAccessExpression(entry) { + if (entry.node.parent) { + const reference = entry.node; + const parent2 = reference.parent; + switch (parent2.kind) { + // `C.foo` + case 212 /* PropertyAccessExpression */: + const propertyAccessExpression = tryCast(parent2, isPropertyAccessExpression); + if (propertyAccessExpression && propertyAccessExpression.expression === reference) { + return propertyAccessExpression; + } + break; + // `C["foo"]` + case 213 /* ElementAccessExpression */: + const elementAccessExpression = tryCast(parent2, isElementAccessExpression); + if (elementAccessExpression && elementAccessExpression.expression === reference) { + return elementAccessExpression; + } + break; + } + } + return void 0; +} +function entryToType(entry) { + const reference = entry.node; + if (getMeaningFromLocation(reference) === 2 /* Type */ || isExpressionWithTypeArgumentsInClassExtendsClause(reference.parent)) { + return reference; + } + return void 0; +} +function getFunctionDeclarationAtPosition(file, startPosition, checker) { + const node = getTouchingToken(file, startPosition); + const functionDeclaration = getContainingFunctionDeclaration(node); + if (isTopLevelJSDoc(node)) return void 0; + if (functionDeclaration && isValidFunctionDeclaration(functionDeclaration, checker) && rangeContainsRange(functionDeclaration, node) && !(functionDeclaration.body && rangeContainsRange(functionDeclaration.body, node))) return functionDeclaration; + return void 0; +} +function isTopLevelJSDoc(node) { + const containingJSDoc = findAncestor(node, isJSDocNode); + if (containingJSDoc) { + const containingNonJSDoc = findAncestor(containingJSDoc, (n) => !isJSDocNode(n)); + return !!containingNonJSDoc && isFunctionLikeDeclaration(containingNonJSDoc); + } + return false; +} +function isValidMethodSignature(node) { + return isMethodSignature(node) && (isInterfaceDeclaration(node.parent) || isTypeLiteralNode(node.parent)); +} +function isValidFunctionDeclaration(functionDeclaration, checker) { + var _a; + if (!isValidParameterNodeArray(functionDeclaration.parameters, checker)) return false; + switch (functionDeclaration.kind) { + case 263 /* FunctionDeclaration */: + return hasNameOrDefault(functionDeclaration) && isSingleImplementation(functionDeclaration, checker); + case 175 /* MethodDeclaration */: + if (isObjectLiteralExpression(functionDeclaration.parent)) { + const contextualSymbol = getSymbolForContextualType(functionDeclaration.name, checker); + return ((_a = contextualSymbol == null ? void 0 : contextualSymbol.declarations) == null ? void 0 : _a.length) === 1 && isSingleImplementation(functionDeclaration, checker); + } + return isSingleImplementation(functionDeclaration, checker); + case 177 /* Constructor */: + if (isClassDeclaration(functionDeclaration.parent)) { + return hasNameOrDefault(functionDeclaration.parent) && isSingleImplementation(functionDeclaration, checker); + } else { + return isValidVariableDeclaration(functionDeclaration.parent.parent) && isSingleImplementation(functionDeclaration, checker); + } + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return isValidVariableDeclaration(functionDeclaration.parent); + } + return false; +} +function isSingleImplementation(functionDeclaration, checker) { + return !!functionDeclaration.body && !checker.isImplementationOfOverload(functionDeclaration); +} +function hasNameOrDefault(functionOrClassDeclaration) { + if (!functionOrClassDeclaration.name) { + const defaultKeyword = findModifier(functionOrClassDeclaration, 90 /* DefaultKeyword */); + return !!defaultKeyword; + } + return true; +} +function isValidParameterNodeArray(parameters, checker) { + return getRefactorableParametersLength(parameters) >= minimumParameterLength && every( + parameters, + /*callback*/ + (paramDecl) => isValidParameterDeclaration(paramDecl, checker) + ); +} +function isValidParameterDeclaration(parameterDeclaration, checker) { + if (isRestParameter(parameterDeclaration)) { + const type = checker.getTypeAtLocation(parameterDeclaration); + if (!checker.isArrayType(type) && !checker.isTupleType(type)) return false; + } + return !parameterDeclaration.modifiers && isIdentifier(parameterDeclaration.name); +} +function isValidVariableDeclaration(node) { + return isVariableDeclaration(node) && isVarConst(node) && isIdentifier(node.name) && !node.type; +} +function hasThisParameter(parameters) { + return parameters.length > 0 && isThis(parameters[0].name); +} +function getRefactorableParametersLength(parameters) { + if (hasThisParameter(parameters)) { + return parameters.length - 1; + } + return parameters.length; +} +function getRefactorableParameters(parameters) { + if (hasThisParameter(parameters)) { + parameters = factory.createNodeArray(parameters.slice(1), parameters.hasTrailingComma); + } + return parameters; +} +function createPropertyOrShorthandAssignment(name, initializer) { + if (isIdentifier(initializer) && getTextOfIdentifierOrLiteral(initializer) === name) { + return factory.createShorthandPropertyAssignment(name); + } + return factory.createPropertyAssignment(name, initializer); +} +function createNewArgument(functionDeclaration, functionArguments) { + const parameters = getRefactorableParameters(functionDeclaration.parameters); + const hasRestParameter2 = isRestParameter(last(parameters)); + const nonRestArguments = hasRestParameter2 ? functionArguments.slice(0, parameters.length - 1) : functionArguments; + const properties = map(nonRestArguments, (arg, i) => { + const parameterName = getParameterName(parameters[i]); + const property = createPropertyOrShorthandAssignment(parameterName, arg); + suppressLeadingAndTrailingTrivia(property.name); + if (isPropertyAssignment(property)) suppressLeadingAndTrailingTrivia(property.initializer); + copyComments(arg, property); + return property; + }); + if (hasRestParameter2 && functionArguments.length >= parameters.length) { + const restArguments = functionArguments.slice(parameters.length - 1); + const restProperty = factory.createPropertyAssignment(getParameterName(last(parameters)), factory.createArrayLiteralExpression(restArguments)); + properties.push(restProperty); + } + const objectLiteral = factory.createObjectLiteralExpression( + properties, + /*multiLine*/ + false + ); + return objectLiteral; +} +function createNewParameters(functionDeclaration, program, host) { + const checker = program.getTypeChecker(); + const refactorableParameters = getRefactorableParameters(functionDeclaration.parameters); + const bindingElements = map(refactorableParameters, createBindingElementFromParameterDeclaration); + const objectParameterName = factory.createObjectBindingPattern(bindingElements); + const objectParameterType = createParameterTypeNode(refactorableParameters); + let objectInitializer; + if (every(refactorableParameters, isOptionalParameter)) { + objectInitializer = factory.createObjectLiteralExpression(); + } + const objectParameter = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + objectParameterName, + /*questionToken*/ + void 0, + objectParameterType, + objectInitializer + ); + if (hasThisParameter(functionDeclaration.parameters)) { + const thisParameter = functionDeclaration.parameters[0]; + const newThisParameter = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + thisParameter.name, + /*questionToken*/ + void 0, + thisParameter.type + ); + suppressLeadingAndTrailingTrivia(newThisParameter.name); + copyComments(thisParameter.name, newThisParameter.name); + if (thisParameter.type) { + suppressLeadingAndTrailingTrivia(newThisParameter.type); + copyComments(thisParameter.type, newThisParameter.type); + } + return factory.createNodeArray([newThisParameter, objectParameter]); + } + return factory.createNodeArray([objectParameter]); + function createBindingElementFromParameterDeclaration(parameterDeclaration) { + const element = factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + /*propertyName*/ + void 0, + getParameterName(parameterDeclaration), + isRestParameter(parameterDeclaration) && isOptionalParameter(parameterDeclaration) ? factory.createArrayLiteralExpression() : parameterDeclaration.initializer + ); + suppressLeadingAndTrailingTrivia(element); + if (parameterDeclaration.initializer && element.initializer) { + copyComments(parameterDeclaration.initializer, element.initializer); + } + return element; + } + function createParameterTypeNode(parameters) { + const members = map(parameters, createPropertySignatureFromParameterDeclaration); + const typeNode = addEmitFlags(factory.createTypeLiteralNode(members), 1 /* SingleLine */); + return typeNode; + } + function createPropertySignatureFromParameterDeclaration(parameterDeclaration) { + let parameterType = parameterDeclaration.type; + if (!parameterType && (parameterDeclaration.initializer || isRestParameter(parameterDeclaration))) { + parameterType = getTypeNode3(parameterDeclaration); + } + const propertySignature = factory.createPropertySignature( + /*modifiers*/ + void 0, + getParameterName(parameterDeclaration), + isOptionalParameter(parameterDeclaration) ? factory.createToken(58 /* QuestionToken */) : parameterDeclaration.questionToken, + parameterType + ); + suppressLeadingAndTrailingTrivia(propertySignature); + copyComments(parameterDeclaration.name, propertySignature.name); + if (parameterDeclaration.type && propertySignature.type) { + copyComments(parameterDeclaration.type, propertySignature.type); + } + return propertySignature; + } + function getTypeNode3(node) { + const type = checker.getTypeAtLocation(node); + return getTypeNodeIfAccessible(type, node, program, host); + } + function isOptionalParameter(parameterDeclaration) { + if (isRestParameter(parameterDeclaration)) { + const type = checker.getTypeAtLocation(parameterDeclaration); + return !checker.isTupleType(type); + } + return checker.isOptionalParameter(parameterDeclaration); + } +} +function getParameterName(paramDeclaration) { + return getTextOfIdentifierOrLiteral(paramDeclaration.name); +} +function getClassNames(constructorDeclaration) { + switch (constructorDeclaration.parent.kind) { + case 264 /* ClassDeclaration */: + const classDeclaration = constructorDeclaration.parent; + if (classDeclaration.name) return [classDeclaration.name]; + const defaultModifier = Debug.checkDefined( + findModifier(classDeclaration, 90 /* DefaultKeyword */), + "Nameless class declaration should be a default export" + ); + return [defaultModifier]; + case 232 /* ClassExpression */: + const classExpression = constructorDeclaration.parent; + const variableDeclaration = constructorDeclaration.parent.parent; + const className = classExpression.name; + if (className) return [className, variableDeclaration.name]; + return [variableDeclaration.name]; + } +} +function getFunctionNames(functionDeclaration) { + switch (functionDeclaration.kind) { + case 263 /* FunctionDeclaration */: + if (functionDeclaration.name) return [functionDeclaration.name]; + const defaultModifier = Debug.checkDefined( + findModifier(functionDeclaration, 90 /* DefaultKeyword */), + "Nameless function declaration should be a default export" + ); + return [defaultModifier]; + case 175 /* MethodDeclaration */: + return [functionDeclaration.name]; + case 177 /* Constructor */: + const ctrKeyword = Debug.checkDefined( + findChildOfKind(functionDeclaration, 137 /* ConstructorKeyword */, functionDeclaration.getSourceFile()), + "Constructor declaration should have constructor keyword" + ); + if (functionDeclaration.parent.kind === 232 /* ClassExpression */) { + const variableDeclaration = functionDeclaration.parent.parent; + return [variableDeclaration.name, ctrKeyword]; + } + return [ctrKeyword]; + case 220 /* ArrowFunction */: + return [functionDeclaration.parent.name]; + case 219 /* FunctionExpression */: + if (functionDeclaration.name) return [functionDeclaration.name, functionDeclaration.parent.name]; + return [functionDeclaration.parent.name]; + default: + return Debug.assertNever(functionDeclaration, `Unexpected function declaration kind ${functionDeclaration.kind}`); + } +} + +// src/services/_namespaces/ts.refactor.convertStringOrTemplateLiteral.ts +var ts_refactor_convertStringOrTemplateLiteral_exports = {}; + +// src/services/refactors/convertStringOrTemplateLiteral.ts +var refactorName10 = "Convert to template string"; +var refactorDescription6 = getLocaleSpecificMessage(Diagnostics.Convert_to_template_string); +var convertStringAction = { + name: refactorName10, + description: refactorDescription6, + kind: "refactor.rewrite.string" +}; +registerRefactor(refactorName10, { + kinds: [convertStringAction.kind], + getEditsForAction: getRefactorEditsToConvertToTemplateString, + getAvailableActions: getRefactorActionsToConvertToTemplateString +}); +function getRefactorActionsToConvertToTemplateString(context) { + const { file, startPosition } = context; + const node = getNodeOrParentOfParentheses(file, startPosition); + const maybeBinary = getParentBinaryExpression(node); + const nodeIsStringLiteral = isStringLiteral(maybeBinary); + const refactorInfo = { name: refactorName10, description: refactorDescription6, actions: [] }; + if (nodeIsStringLiteral && context.triggerReason !== "invoked") { + return emptyArray; + } + if (isExpressionNode(maybeBinary) && (nodeIsStringLiteral || isBinaryExpression(maybeBinary) && treeToArray(maybeBinary).isValidConcatenation)) { + refactorInfo.actions.push(convertStringAction); + return [refactorInfo]; + } else if (context.preferences.provideRefactorNotApplicableReason) { + refactorInfo.actions.push({ ...convertStringAction, notApplicableReason: getLocaleSpecificMessage(Diagnostics.Can_only_convert_string_concatenations_and_string_literals) }); + return [refactorInfo]; + } + return emptyArray; +} +function getNodeOrParentOfParentheses(file, startPosition) { + const node = getTokenAtPosition(file, startPosition); + const nestedBinary = getParentBinaryExpression(node); + const isNonStringBinary = !treeToArray(nestedBinary).isValidConcatenation; + if (isNonStringBinary && isParenthesizedExpression(nestedBinary.parent) && isBinaryExpression(nestedBinary.parent.parent)) { + return nestedBinary.parent.parent; + } + return node; +} +function getRefactorEditsToConvertToTemplateString(context, actionName2) { + const { file, startPosition } = context; + const node = getNodeOrParentOfParentheses(file, startPosition); + switch (actionName2) { + case refactorDescription6: + return { edits: getEditsForToTemplateLiteral(context, node) }; + default: + return Debug.fail("invalid action"); + } +} +function getEditsForToTemplateLiteral(context, node) { + const maybeBinary = getParentBinaryExpression(node); + const file = context.file; + const templateLiteral = nodesToTemplate(treeToArray(maybeBinary), file); + const trailingCommentRanges = getTrailingCommentRanges(file.text, maybeBinary.end); + if (trailingCommentRanges) { + const lastComment = trailingCommentRanges[trailingCommentRanges.length - 1]; + const trailingRange = { pos: trailingCommentRanges[0].pos, end: lastComment.end }; + return ts_textChanges_exports.ChangeTracker.with(context, (t) => { + t.deleteRange(file, trailingRange); + t.replaceNode(file, maybeBinary, templateLiteral); + }); + } else { + return ts_textChanges_exports.ChangeTracker.with(context, (t) => t.replaceNode(file, maybeBinary, templateLiteral)); + } +} +function isNotEqualsOperator(node) { + return !(node.operatorToken.kind === 64 /* EqualsToken */ || node.operatorToken.kind === 65 /* PlusEqualsToken */); +} +function getParentBinaryExpression(expr) { + const container = findAncestor(expr.parent, (n) => { + switch (n.kind) { + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + return false; + case 229 /* TemplateExpression */: + case 227 /* BinaryExpression */: + return !(isBinaryExpression(n.parent) && isNotEqualsOperator(n.parent)); + default: + return "quit"; + } + }); + return container || expr; +} +function treeToArray(current) { + const loop = (current2) => { + if (!isBinaryExpression(current2)) { + return { nodes: [current2], operators: [], validOperators: true, hasString: isStringLiteral(current2) || isNoSubstitutionTemplateLiteral(current2) }; + } + const { nodes: nodes2, operators: operators2, hasString: leftHasString, validOperators: leftOperatorValid } = loop(current2.left); + if (!(leftHasString || isStringLiteral(current2.right) || isTemplateExpression(current2.right))) { + return { nodes: [current2], operators: [], hasString: false, validOperators: true }; + } + const currentOperatorValid = current2.operatorToken.kind === 40 /* PlusToken */; + const validOperators2 = leftOperatorValid && currentOperatorValid; + nodes2.push(current2.right); + operators2.push(current2.operatorToken); + return { nodes: nodes2, operators: operators2, hasString: true, validOperators: validOperators2 }; + }; + const { nodes, operators, validOperators, hasString } = loop(current); + return { nodes, operators, isValidConcatenation: validOperators && hasString }; +} +var copyTrailingOperatorComments = (operators, file) => (index, targetNode) => { + if (index < operators.length) { + copyTrailingComments( + operators[index], + targetNode, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); + } +}; +var copyCommentFromMultiNode = (nodes, file, copyOperatorComments) => (indexes, targetNode) => { + while (indexes.length > 0) { + const index = indexes.shift(); + copyTrailingComments( + nodes[index], + targetNode, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); + copyOperatorComments(index, targetNode); + } +}; +function escapeRawStringForTemplate(s) { + return s.replace(/\\.|[$`]/g, (m) => m[0] === "\\" ? m : "\\" + m); +} +function getRawTextOfTemplate(node) { + const rightShaving = isTemplateHead(node) || isTemplateMiddle(node) ? -2 : -1; + return getTextOfNode(node).slice(1, rightShaving); +} +function concatConsecutiveString(index, nodes) { + const indexes = []; + let text = "", rawText = ""; + while (index < nodes.length) { + const node = nodes[index]; + if (isStringLiteralLike(node)) { + text += node.text; + rawText += escapeRawStringForTemplate(getTextOfNode(node).slice(1, -1)); + indexes.push(index); + index++; + } else if (isTemplateExpression(node)) { + text += node.head.text; + rawText += getRawTextOfTemplate(node.head); + break; + } else { + break; + } + } + return [index, text, rawText, indexes]; +} +function nodesToTemplate({ nodes, operators }, file) { + const copyOperatorComments = copyTrailingOperatorComments(operators, file); + const copyCommentFromStringLiterals = copyCommentFromMultiNode(nodes, file, copyOperatorComments); + const [begin, headText, rawHeadText, headIndexes] = concatConsecutiveString(0, nodes); + if (begin === nodes.length) { + const noSubstitutionTemplateLiteral = factory.createNoSubstitutionTemplateLiteral(headText, rawHeadText); + copyCommentFromStringLiterals(headIndexes, noSubstitutionTemplateLiteral); + return noSubstitutionTemplateLiteral; + } + const templateSpans = []; + const templateHead = factory.createTemplateHead(headText, rawHeadText); + copyCommentFromStringLiterals(headIndexes, templateHead); + for (let i = begin; i < nodes.length; i++) { + const currentNode = getExpressionFromParenthesesOrExpression(nodes[i]); + copyOperatorComments(i, currentNode); + const [newIndex, subsequentText, rawSubsequentText, stringIndexes] = concatConsecutiveString(i + 1, nodes); + i = newIndex - 1; + const isLast = i === nodes.length - 1; + if (isTemplateExpression(currentNode)) { + const spans = map(currentNode.templateSpans, (span, index) => { + copyExpressionComments(span); + const isLastSpan = index === currentNode.templateSpans.length - 1; + const text = span.literal.text + (isLastSpan ? subsequentText : ""); + const rawText = getRawTextOfTemplate(span.literal) + (isLastSpan ? rawSubsequentText : ""); + return factory.createTemplateSpan( + span.expression, + isLast && isLastSpan ? factory.createTemplateTail(text, rawText) : factory.createTemplateMiddle(text, rawText) + ); + }); + templateSpans.push(...spans); + } else { + const templatePart = isLast ? factory.createTemplateTail(subsequentText, rawSubsequentText) : factory.createTemplateMiddle(subsequentText, rawSubsequentText); + copyCommentFromStringLiterals(stringIndexes, templatePart); + templateSpans.push(factory.createTemplateSpan(currentNode, templatePart)); + } + } + return factory.createTemplateExpression(templateHead, templateSpans); +} +function copyExpressionComments(node) { + const file = node.getSourceFile(); + copyTrailingComments( + node, + node.expression, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); + copyTrailingAsLeadingComments( + node.expression, + node.expression, + file, + 3 /* MultiLineCommentTrivia */, + /*hasTrailingNewLine*/ + false + ); +} +function getExpressionFromParenthesesOrExpression(node) { + if (isParenthesizedExpression(node)) { + copyExpressionComments(node); + node = node.expression; + } + return node; +} + +// src/services/_namespaces/ts.refactor.convertToOptionalChainExpression.ts +var ts_refactor_convertToOptionalChainExpression_exports = {}; + +// src/services/refactors/convertToOptionalChainExpression.ts +var refactorName11 = "Convert to optional chain expression"; +var convertToOptionalChainExpressionMessage = getLocaleSpecificMessage(Diagnostics.Convert_to_optional_chain_expression); +var toOptionalChainAction = { + name: refactorName11, + description: convertToOptionalChainExpressionMessage, + kind: "refactor.rewrite.expression.optionalChain" +}; +registerRefactor(refactorName11, { + kinds: [toOptionalChainAction.kind], + getEditsForAction: getRefactorEditsToConvertToOptionalChain, + getAvailableActions: getRefactorActionsToConvertToOptionalChain +}); +function getRefactorActionsToConvertToOptionalChain(context) { + const info = getInfo3(context, context.triggerReason === "invoked"); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + return [{ + name: refactorName11, + description: convertToOptionalChainExpressionMessage, + actions: [toOptionalChainAction] + }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ + name: refactorName11, + description: convertToOptionalChainExpressionMessage, + actions: [{ ...toOptionalChainAction, notApplicableReason: info.error }] + }]; + } + return emptyArray; +} +function getRefactorEditsToConvertToOptionalChain(context, actionName2) { + const info = getInfo3(context); + Debug.assert(info && !isRefactorErrorInfo(info), "Expected applicable refactor info"); + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange6(context.file, context.program.getTypeChecker(), t, info, actionName2)); + return { edits, renameFilename: void 0, renameLocation: void 0 }; +} +function isValidExpression(node) { + return isBinaryExpression(node) || isConditionalExpression(node); +} +function isValidStatement(node) { + return isExpressionStatement(node) || isReturnStatement(node) || isVariableStatement(node); +} +function isValidExpressionOrStatement(node) { + return isValidExpression(node) || isValidStatement(node); +} +function getInfo3(context, considerEmptySpans = true) { + const { file, program } = context; + const span = getRefactorContextSpan(context); + const forEmptySpan = span.length === 0; + if (forEmptySpan && !considerEmptySpans) return void 0; + const startToken = getTokenAtPosition(file, span.start); + const endToken = findTokenOnLeftOfPosition(file, span.start + span.length); + const adjustedSpan = createTextSpanFromBounds(startToken.pos, endToken && endToken.end >= startToken.pos ? endToken.getEnd() : startToken.getEnd()); + const parent2 = forEmptySpan ? getValidParentNodeOfEmptySpan(startToken) : getValidParentNodeContainingSpan(startToken, adjustedSpan); + const expression = parent2 && isValidExpressionOrStatement(parent2) ? getExpression(parent2) : void 0; + if (!expression) return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_convertible_access_expression) }; + const checker = program.getTypeChecker(); + return isConditionalExpression(expression) ? getConditionalInfo(expression, checker) : getBinaryInfo(expression); +} +function getConditionalInfo(expression, checker) { + const condition = expression.condition; + const finalExpression = getFinalExpressionInChain(expression.whenTrue); + if (!finalExpression || checker.isNullableType(checker.getTypeAtLocation(finalExpression))) { + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_convertible_access_expression) }; + } + if ((isPropertyAccessExpression(condition) || isIdentifier(condition)) && getMatchingStart(condition, finalExpression.expression)) { + return { finalExpression, occurrences: [condition], expression }; + } else if (isBinaryExpression(condition)) { + const occurrences = getOccurrencesInExpression(finalExpression.expression, condition); + return occurrences ? { finalExpression, occurrences, expression } : { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_matching_access_expressions) }; + } +} +function getBinaryInfo(expression) { + if (expression.operatorToken.kind !== 56 /* AmpersandAmpersandToken */) { + return { error: getLocaleSpecificMessage(Diagnostics.Can_only_convert_logical_AND_access_chains) }; + } + const finalExpression = getFinalExpressionInChain(expression.right); + if (!finalExpression) return { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_convertible_access_expression) }; + const occurrences = getOccurrencesInExpression(finalExpression.expression, expression.left); + return occurrences ? { finalExpression, occurrences, expression } : { error: getLocaleSpecificMessage(Diagnostics.Could_not_find_matching_access_expressions) }; +} +function getOccurrencesInExpression(matchTo, expression) { + const occurrences = []; + while (isBinaryExpression(expression) && expression.operatorToken.kind === 56 /* AmpersandAmpersandToken */) { + const match = getMatchingStart(skipParentheses(matchTo), skipParentheses(expression.right)); + if (!match) { + break; + } + occurrences.push(match); + matchTo = match; + expression = expression.left; + } + const finalMatch = getMatchingStart(matchTo, expression); + if (finalMatch) { + occurrences.push(finalMatch); + } + return occurrences.length > 0 ? occurrences : void 0; +} +function getMatchingStart(chain, subchain) { + if (!isIdentifier(subchain) && !isPropertyAccessExpression(subchain) && !isElementAccessExpression(subchain)) { + return void 0; + } + return chainStartsWith(chain, subchain) ? subchain : void 0; +} +function chainStartsWith(chain, subchain) { + while (isCallExpression(chain) || isPropertyAccessExpression(chain) || isElementAccessExpression(chain)) { + if (getTextOfChainNode(chain) === getTextOfChainNode(subchain)) break; + chain = chain.expression; + } + while (isPropertyAccessExpression(chain) && isPropertyAccessExpression(subchain) || isElementAccessExpression(chain) && isElementAccessExpression(subchain)) { + if (getTextOfChainNode(chain) !== getTextOfChainNode(subchain)) return false; + chain = chain.expression; + subchain = subchain.expression; + } + return isIdentifier(chain) && isIdentifier(subchain) && chain.getText() === subchain.getText(); +} +function getTextOfChainNode(node) { + if (isIdentifier(node) || isStringOrNumericLiteralLike(node)) { + return node.getText(); + } + if (isPropertyAccessExpression(node)) { + return getTextOfChainNode(node.name); + } + if (isElementAccessExpression(node)) { + return getTextOfChainNode(node.argumentExpression); + } + return void 0; +} +function getValidParentNodeContainingSpan(node, span) { + while (node.parent) { + if (isValidExpressionOrStatement(node) && span.length !== 0 && node.end >= span.start + span.length) { + return node; + } + node = node.parent; + } + return void 0; +} +function getValidParentNodeOfEmptySpan(node) { + while (node.parent) { + if (isValidExpressionOrStatement(node) && !isValidExpressionOrStatement(node.parent)) { + return node; + } + node = node.parent; + } + return void 0; +} +function getExpression(node) { + if (isValidExpression(node)) { + return node; + } + if (isVariableStatement(node)) { + const variable = getSingleVariableOfVariableStatement(node); + const initializer = variable == null ? void 0 : variable.initializer; + return initializer && isValidExpression(initializer) ? initializer : void 0; + } + return node.expression && isValidExpression(node.expression) ? node.expression : void 0; +} +function getFinalExpressionInChain(node) { + node = skipParentheses(node); + if (isBinaryExpression(node)) { + return getFinalExpressionInChain(node.left); + } else if ((isPropertyAccessExpression(node) || isElementAccessExpression(node) || isCallExpression(node)) && !isOptionalChain(node)) { + return node; + } + return void 0; +} +function convertOccurrences(checker, toConvert, occurrences) { + if (isPropertyAccessExpression(toConvert) || isElementAccessExpression(toConvert) || isCallExpression(toConvert)) { + const chain = convertOccurrences(checker, toConvert.expression, occurrences); + const lastOccurrence = occurrences.length > 0 ? occurrences[occurrences.length - 1] : void 0; + const isOccurrence = (lastOccurrence == null ? void 0 : lastOccurrence.getText()) === toConvert.expression.getText(); + if (isOccurrence) occurrences.pop(); + if (isCallExpression(toConvert)) { + return isOccurrence ? factory.createCallChain(chain, factory.createToken(29 /* QuestionDotToken */), toConvert.typeArguments, toConvert.arguments) : factory.createCallChain(chain, toConvert.questionDotToken, toConvert.typeArguments, toConvert.arguments); + } else if (isPropertyAccessExpression(toConvert)) { + return isOccurrence ? factory.createPropertyAccessChain(chain, factory.createToken(29 /* QuestionDotToken */), toConvert.name) : factory.createPropertyAccessChain(chain, toConvert.questionDotToken, toConvert.name); + } else if (isElementAccessExpression(toConvert)) { + return isOccurrence ? factory.createElementAccessChain(chain, factory.createToken(29 /* QuestionDotToken */), toConvert.argumentExpression) : factory.createElementAccessChain(chain, toConvert.questionDotToken, toConvert.argumentExpression); + } + } + return toConvert; +} +function doChange6(sourceFile, checker, changes, info, _actionName) { + const { finalExpression, occurrences, expression } = info; + const firstOccurrence = occurrences[occurrences.length - 1]; + const convertedChain = convertOccurrences(checker, finalExpression, occurrences); + if (convertedChain && (isPropertyAccessExpression(convertedChain) || isElementAccessExpression(convertedChain) || isCallExpression(convertedChain))) { + if (isBinaryExpression(expression)) { + changes.replaceNodeRange(sourceFile, firstOccurrence, finalExpression, convertedChain); + } else if (isConditionalExpression(expression)) { + changes.replaceNode(sourceFile, expression, factory.createBinaryExpression(convertedChain, factory.createToken(61 /* QuestionQuestionToken */), expression.whenFalse)); + } + } +} + +// src/services/_namespaces/ts.refactor.extractSymbol.ts +var ts_refactor_extractSymbol_exports = {}; +__export(ts_refactor_extractSymbol_exports, { + Messages: () => Messages, + RangeFacts: () => RangeFacts, + getRangeToExtract: () => getRangeToExtract2, + getRefactorActionsToExtractSymbol: () => getRefactorActionsToExtractSymbol, + getRefactorEditsToExtractSymbol: () => getRefactorEditsToExtractSymbol +}); + +// src/services/refactors/extractSymbol.ts +var refactorName12 = "Extract Symbol"; +var extractConstantAction = { + name: "Extract Constant", + description: getLocaleSpecificMessage(Diagnostics.Extract_constant), + kind: "refactor.extract.constant" +}; +var extractFunctionAction = { + name: "Extract Function", + description: getLocaleSpecificMessage(Diagnostics.Extract_function), + kind: "refactor.extract.function" +}; +registerRefactor(refactorName12, { + kinds: [ + extractConstantAction.kind, + extractFunctionAction.kind + ], + getEditsForAction: getRefactorEditsToExtractSymbol, + getAvailableActions: getRefactorActionsToExtractSymbol +}); +function getRefactorActionsToExtractSymbol(context) { + const requestedRefactor = context.kind; + const rangeToExtract = getRangeToExtract2(context.file, getRefactorContextSpan(context), context.triggerReason === "invoked"); + const targetRange = rangeToExtract.targetRange; + if (targetRange === void 0) { + if (!rangeToExtract.errors || rangeToExtract.errors.length === 0 || !context.preferences.provideRefactorNotApplicableReason) { + return emptyArray; + } + const errors = []; + if (refactorKindBeginsWith(extractFunctionAction.kind, requestedRefactor)) { + errors.push({ + name: refactorName12, + description: extractFunctionAction.description, + actions: [{ ...extractFunctionAction, notApplicableReason: getStringError(rangeToExtract.errors) }] + }); + } + if (refactorKindBeginsWith(extractConstantAction.kind, requestedRefactor)) { + errors.push({ + name: refactorName12, + description: extractConstantAction.description, + actions: [{ ...extractConstantAction, notApplicableReason: getStringError(rangeToExtract.errors) }] + }); + } + return errors; + } + const { affectedTextRange, extractions } = getPossibleExtractions(targetRange, context); + if (extractions === void 0) { + return emptyArray; + } + const functionActions = []; + const usedFunctionNames = /* @__PURE__ */ new Map(); + let innermostErrorFunctionAction; + const constantActions = []; + const usedConstantNames = /* @__PURE__ */ new Map(); + let innermostErrorConstantAction; + let i = 0; + for (const { functionExtraction, constantExtraction } of extractions) { + if (refactorKindBeginsWith(extractFunctionAction.kind, requestedRefactor)) { + const description3 = functionExtraction.description; + if (functionExtraction.errors.length === 0) { + if (!usedFunctionNames.has(description3)) { + usedFunctionNames.set(description3, true); + functionActions.push({ + description: description3, + name: `function_scope_${i}`, + kind: extractFunctionAction.kind, + range: { + start: { line: getLineAndCharacterOfPosition(context.file, affectedTextRange.pos).line, offset: getLineAndCharacterOfPosition(context.file, affectedTextRange.pos).character }, + end: { line: getLineAndCharacterOfPosition(context.file, affectedTextRange.end).line, offset: getLineAndCharacterOfPosition(context.file, affectedTextRange.end).character } + } + }); + } + } else if (!innermostErrorFunctionAction) { + innermostErrorFunctionAction = { + description: description3, + name: `function_scope_${i}`, + notApplicableReason: getStringError(functionExtraction.errors), + kind: extractFunctionAction.kind + }; + } + } + if (refactorKindBeginsWith(extractConstantAction.kind, requestedRefactor)) { + const description3 = constantExtraction.description; + if (constantExtraction.errors.length === 0) { + if (!usedConstantNames.has(description3)) { + usedConstantNames.set(description3, true); + constantActions.push({ + description: description3, + name: `constant_scope_${i}`, + kind: extractConstantAction.kind, + range: { + start: { line: getLineAndCharacterOfPosition(context.file, affectedTextRange.pos).line, offset: getLineAndCharacterOfPosition(context.file, affectedTextRange.pos).character }, + end: { line: getLineAndCharacterOfPosition(context.file, affectedTextRange.end).line, offset: getLineAndCharacterOfPosition(context.file, affectedTextRange.end).character } + } + }); + } + } else if (!innermostErrorConstantAction) { + innermostErrorConstantAction = { + description: description3, + name: `constant_scope_${i}`, + notApplicableReason: getStringError(constantExtraction.errors), + kind: extractConstantAction.kind + }; + } + } + i++; + } + const infos = []; + if (functionActions.length) { + infos.push({ + name: refactorName12, + description: getLocaleSpecificMessage(Diagnostics.Extract_function), + actions: functionActions + }); + } else if (context.preferences.provideRefactorNotApplicableReason && innermostErrorFunctionAction) { + infos.push({ + name: refactorName12, + description: getLocaleSpecificMessage(Diagnostics.Extract_function), + actions: [innermostErrorFunctionAction] + }); + } + if (constantActions.length) { + infos.push({ + name: refactorName12, + description: getLocaleSpecificMessage(Diagnostics.Extract_constant), + actions: constantActions + }); + } else if (context.preferences.provideRefactorNotApplicableReason && innermostErrorConstantAction) { + infos.push({ + name: refactorName12, + description: getLocaleSpecificMessage(Diagnostics.Extract_constant), + actions: [innermostErrorConstantAction] + }); + } + return infos.length ? infos : emptyArray; + function getStringError(errors) { + let error2 = errors[0].messageText; + if (typeof error2 !== "string") { + error2 = error2.messageText; + } + return error2; + } +} +function getRefactorEditsToExtractSymbol(context, actionName2) { + const rangeToExtract = getRangeToExtract2(context.file, getRefactorContextSpan(context)); + const targetRange = rangeToExtract.targetRange; + const parsedFunctionIndexMatch = /^function_scope_(\d+)$/.exec(actionName2); + if (parsedFunctionIndexMatch) { + const index = +parsedFunctionIndexMatch[1]; + Debug.assert(isFinite(index), "Expected to parse a finite number from the function scope index"); + return getFunctionExtractionAtIndex(targetRange, context, index); + } + const parsedConstantIndexMatch = /^constant_scope_(\d+)$/.exec(actionName2); + if (parsedConstantIndexMatch) { + const index = +parsedConstantIndexMatch[1]; + Debug.assert(isFinite(index), "Expected to parse a finite number from the constant scope index"); + return getConstantExtractionAtIndex(targetRange, context, index); + } + Debug.fail("Unrecognized action name"); +} +var Messages; +((Messages2) => { + function createMessage(message) { + return { message, code: 0, category: 3 /* Message */, key: message }; + } + Messages2.cannotExtractRange = createMessage("Cannot extract range."); + Messages2.cannotExtractImport = createMessage("Cannot extract import statement."); + Messages2.cannotExtractSuper = createMessage("Cannot extract super call."); + Messages2.cannotExtractJSDoc = createMessage("Cannot extract JSDoc."); + Messages2.cannotExtractEmpty = createMessage("Cannot extract empty range."); + Messages2.expressionExpected = createMessage("expression expected."); + Messages2.uselessConstantType = createMessage("No reason to extract constant of type."); + Messages2.statementOrExpressionExpected = createMessage("Statement or expression expected."); + Messages2.cannotExtractRangeContainingConditionalBreakOrContinueStatements = createMessage("Cannot extract range containing conditional break or continue statements."); + Messages2.cannotExtractRangeContainingConditionalReturnStatement = createMessage("Cannot extract range containing conditional return statement."); + Messages2.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange = createMessage("Cannot extract range containing labeled break or continue with target outside of the range."); + Messages2.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators = createMessage("Cannot extract range containing writes to references located outside of the target range in generators."); + Messages2.typeWillNotBeVisibleInTheNewScope = createMessage("Type will not visible in the new scope."); + Messages2.functionWillNotBeVisibleInTheNewScope = createMessage("Function will not visible in the new scope."); + Messages2.cannotExtractIdentifier = createMessage("Select more than a single identifier."); + Messages2.cannotExtractExportedEntity = createMessage("Cannot extract exported declaration"); + Messages2.cannotWriteInExpression = createMessage("Cannot write back side-effects when extracting an expression"); + Messages2.cannotExtractReadonlyPropertyInitializerOutsideConstructor = createMessage("Cannot move initialization of read-only class property outside of the constructor"); + Messages2.cannotExtractAmbientBlock = createMessage("Cannot extract code from ambient contexts"); + Messages2.cannotAccessVariablesFromNestedScopes = createMessage("Cannot access variables from nested scopes"); + Messages2.cannotExtractToJSClass = createMessage("Cannot extract constant to a class scope in JS"); + Messages2.cannotExtractToExpressionArrowFunction = createMessage("Cannot extract constant to an arrow function without a block"); + Messages2.cannotExtractFunctionsContainingThisToMethod = createMessage("Cannot extract functions containing this to method"); +})(Messages || (Messages = {})); +var RangeFacts = /* @__PURE__ */ ((RangeFacts2) => { + RangeFacts2[RangeFacts2["None"] = 0] = "None"; + RangeFacts2[RangeFacts2["HasReturn"] = 1] = "HasReturn"; + RangeFacts2[RangeFacts2["IsGenerator"] = 2] = "IsGenerator"; + RangeFacts2[RangeFacts2["IsAsyncFunction"] = 4] = "IsAsyncFunction"; + RangeFacts2[RangeFacts2["UsesThis"] = 8] = "UsesThis"; + RangeFacts2[RangeFacts2["UsesThisInFunction"] = 16] = "UsesThisInFunction"; + RangeFacts2[RangeFacts2["InStaticRegion"] = 32] = "InStaticRegion"; + return RangeFacts2; +})(RangeFacts || {}); +function getRangeToExtract2(sourceFile, span, invoked = true) { + const { length: length2 } = span; + if (length2 === 0 && !invoked) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractEmpty)] }; + } + const cursorRequest = length2 === 0 && invoked; + const startToken = findFirstNonJsxWhitespaceToken(sourceFile, span.start); + const endToken = findTokenOnLeftOfPosition(sourceFile, textSpanEnd(span)); + const adjustedSpan = startToken && endToken && invoked ? getAdjustedSpanFromNodes(startToken, endToken, sourceFile) : span; + const start = cursorRequest ? getExtractableParent(startToken) : getParentNodeInSpan(startToken, sourceFile, adjustedSpan); + const end = cursorRequest ? start : getParentNodeInSpan(endToken, sourceFile, adjustedSpan); + let rangeFacts = 0 /* None */; + let thisNode; + if (!start || !end) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractRange)] }; + } + if (start.flags & 16777216 /* JSDoc */) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractJSDoc)] }; + } + if (start.parent !== end.parent) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractRange)] }; + } + if (start !== end) { + if (!isBlockLike(start.parent)) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractRange)] }; + } + const statements = []; + for (const statement of start.parent.statements) { + if (statement === start || statements.length) { + const errors2 = checkNode(statement); + if (errors2) { + return { errors: errors2 }; + } + statements.push(statement); + } + if (statement === end) { + break; + } + } + if (!statements.length) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractRange)] }; + } + return { targetRange: { range: statements, facts: rangeFacts, thisNode } }; + } + if (isReturnStatement(start) && !start.expression) { + return { errors: [createFileDiagnostic(sourceFile, span.start, length2, Messages.cannotExtractRange)] }; + } + const node = refineNode(start); + const errors = checkRootNode(node) || checkNode(node); + if (errors) { + return { errors }; + } + return { targetRange: { range: getStatementOrExpressionRange(node), facts: rangeFacts, thisNode } }; + function refineNode(node2) { + if (isReturnStatement(node2)) { + if (node2.expression) { + return node2.expression; + } + } else if (isVariableStatement(node2) || isVariableDeclarationList(node2)) { + const declarations = isVariableStatement(node2) ? node2.declarationList.declarations : node2.declarations; + let numInitializers = 0; + let lastInitializer; + for (const declaration of declarations) { + if (declaration.initializer) { + numInitializers++; + lastInitializer = declaration.initializer; + } + } + if (numInitializers === 1) { + return lastInitializer; + } + } else if (isVariableDeclaration(node2)) { + if (node2.initializer) { + return node2.initializer; + } + } + return node2; + } + function checkRootNode(node2) { + if (isIdentifier(isExpressionStatement(node2) ? node2.expression : node2)) { + return [createDiagnosticForNode(node2, Messages.cannotExtractIdentifier)]; + } + return void 0; + } + function checkForStaticContext(nodeToCheck, containingClass) { + let current = nodeToCheck; + while (current !== containingClass) { + if (current.kind === 173 /* PropertyDeclaration */) { + if (isStatic(current)) { + rangeFacts |= 32 /* InStaticRegion */; + } + break; + } else if (current.kind === 170 /* Parameter */) { + const ctorOrMethod = getContainingFunction(current); + if (ctorOrMethod.kind === 177 /* Constructor */) { + rangeFacts |= 32 /* InStaticRegion */; + } + break; + } else if (current.kind === 175 /* MethodDeclaration */) { + if (isStatic(current)) { + rangeFacts |= 32 /* InStaticRegion */; + } + } + current = current.parent; + } + } + function checkNode(nodeToCheck) { + let PermittedJumps; + ((PermittedJumps2) => { + PermittedJumps2[PermittedJumps2["None"] = 0] = "None"; + PermittedJumps2[PermittedJumps2["Break"] = 1] = "Break"; + PermittedJumps2[PermittedJumps2["Continue"] = 2] = "Continue"; + PermittedJumps2[PermittedJumps2["Return"] = 4] = "Return"; + })(PermittedJumps || (PermittedJumps = {})); + Debug.assert(nodeToCheck.pos <= nodeToCheck.end, "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809 (1)"); + Debug.assert(!positionIsSynthesized(nodeToCheck.pos), "This failure could trigger https://github.com/Microsoft/TypeScript/issues/20809 (2)"); + if (!isStatement(nodeToCheck) && !(isExpressionNode(nodeToCheck) && isExtractableExpression(nodeToCheck)) && !isStringLiteralJsxAttribute(nodeToCheck)) { + return [createDiagnosticForNode(nodeToCheck, Messages.statementOrExpressionExpected)]; + } + if (nodeToCheck.flags & 33554432 /* Ambient */) { + return [createDiagnosticForNode(nodeToCheck, Messages.cannotExtractAmbientBlock)]; + } + const containingClass = getContainingClass(nodeToCheck); + if (containingClass) { + checkForStaticContext(nodeToCheck, containingClass); + } + let errors2; + let permittedJumps = 4 /* Return */; + let seenLabels; + visit(nodeToCheck); + if (rangeFacts & 8 /* UsesThis */) { + const container = getThisContainer( + nodeToCheck, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (container.kind === 263 /* FunctionDeclaration */ || container.kind === 175 /* MethodDeclaration */ && container.parent.kind === 211 /* ObjectLiteralExpression */ || container.kind === 219 /* FunctionExpression */) { + rangeFacts |= 16 /* UsesThisInFunction */; + } + } + return errors2; + function visit(node2) { + if (errors2) { + return true; + } + if (isDeclaration(node2)) { + const declaringNode = node2.kind === 261 /* VariableDeclaration */ ? node2.parent.parent : node2; + if (hasSyntacticModifier(declaringNode, 32 /* Export */)) { + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractExportedEntity)); + return true; + } + } + switch (node2.kind) { + case 273 /* ImportDeclaration */: + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractImport)); + return true; + case 278 /* ExportAssignment */: + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractExportedEntity)); + return true; + case 108 /* SuperKeyword */: + if (node2.parent.kind === 214 /* CallExpression */) { + const containingClass2 = getContainingClass(node2); + if (containingClass2 === void 0 || containingClass2.pos < span.start || containingClass2.end >= span.start + span.length) { + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractSuper)); + return true; + } + } else { + rangeFacts |= 8 /* UsesThis */; + thisNode = node2; + } + break; + case 220 /* ArrowFunction */: + forEachChild(node2, function check(n) { + if (isThis(n)) { + rangeFacts |= 8 /* UsesThis */; + thisNode = node2; + } else if (isClassLike(n) || isFunctionLike(n) && !isArrowFunction(n)) { + return false; + } else { + forEachChild(n, check); + } + }); + // falls through + case 264 /* ClassDeclaration */: + case 263 /* FunctionDeclaration */: + if (isSourceFile(node2.parent) && node2.parent.externalModuleIndicator === void 0) { + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.functionWillNotBeVisibleInTheNewScope)); + } + // falls through + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return false; + } + const savedPermittedJumps = permittedJumps; + switch (node2.kind) { + case 246 /* IfStatement */: + permittedJumps &= ~4 /* Return */; + break; + case 259 /* TryStatement */: + permittedJumps = 0 /* None */; + break; + case 242 /* Block */: + if (node2.parent && node2.parent.kind === 259 /* TryStatement */ && node2.parent.finallyBlock === node2) { + permittedJumps = 4 /* Return */; + } + break; + case 298 /* DefaultClause */: + case 297 /* CaseClause */: + permittedJumps |= 1 /* Break */; + break; + default: + if (isIterationStatement( + node2, + /*lookInLabeledStatements*/ + false + )) { + permittedJumps |= 1 /* Break */ | 2 /* Continue */; + } + break; + } + switch (node2.kind) { + case 198 /* ThisType */: + case 110 /* ThisKeyword */: + rangeFacts |= 8 /* UsesThis */; + thisNode = node2; + break; + case 257 /* LabeledStatement */: { + const label = node2.label; + (seenLabels || (seenLabels = [])).push(label.escapedText); + forEachChild(node2, visit); + seenLabels.pop(); + break; + } + case 253 /* BreakStatement */: + case 252 /* ContinueStatement */: { + const label = node2.label; + if (label) { + if (!contains(seenLabels, label.escapedText)) { + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractRangeContainingLabeledBreakOrContinueStatementWithTargetOutsideOfTheRange)); + } + } else { + if (!(permittedJumps & (node2.kind === 253 /* BreakStatement */ ? 1 /* Break */ : 2 /* Continue */))) { + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractRangeContainingConditionalBreakOrContinueStatements)); + } + } + break; + } + case 224 /* AwaitExpression */: + rangeFacts |= 4 /* IsAsyncFunction */; + break; + case 230 /* YieldExpression */: + rangeFacts |= 2 /* IsGenerator */; + break; + case 254 /* ReturnStatement */: + if (permittedJumps & 4 /* Return */) { + rangeFacts |= 1 /* HasReturn */; + } else { + (errors2 || (errors2 = [])).push(createDiagnosticForNode(node2, Messages.cannotExtractRangeContainingConditionalReturnStatement)); + } + break; + default: + forEachChild(node2, visit); + break; + } + permittedJumps = savedPermittedJumps; + } + } +} +function getAdjustedSpanFromNodes(startNode2, endNode2, sourceFile) { + const start = startNode2.getStart(sourceFile); + let end = endNode2.getEnd(); + if (sourceFile.text.charCodeAt(end) === 59 /* semicolon */) { + end++; + } + return { start, length: end - start }; +} +function getStatementOrExpressionRange(node) { + if (isStatement(node)) { + return [node]; + } + if (isExpressionNode(node)) { + return isExpressionStatement(node.parent) ? [node.parent] : node; + } + if (isStringLiteralJsxAttribute(node)) { + return node; + } + return void 0; +} +function isScope(node) { + return isArrowFunction(node) ? isFunctionBody(node.body) : isFunctionLikeDeclaration(node) || isSourceFile(node) || isModuleBlock(node) || isClassLike(node); +} +function collectEnclosingScopes(range) { + let current = isReadonlyArray(range.range) ? first(range.range) : range.range; + if (range.facts & 8 /* UsesThis */ && !(range.facts & 16 /* UsesThisInFunction */)) { + const containingClass = getContainingClass(current); + if (containingClass) { + const containingFunction = findAncestor(current, isFunctionLikeDeclaration); + return containingFunction ? [containingFunction, containingClass] : [containingClass]; + } + } + const scopes = []; + while (true) { + current = current.parent; + if (current.kind === 170 /* Parameter */) { + current = findAncestor(current, (parent2) => isFunctionLikeDeclaration(parent2)).parent; + } + if (isScope(current)) { + scopes.push(current); + if (current.kind === 308 /* SourceFile */) { + return scopes; + } + } + } +} +function getFunctionExtractionAtIndex(targetRange, context, requestedChangesIndex) { + const { scopes, readsAndWrites: { target, usagesPerScope, functionErrorsPerScope, exposedVariableDeclarations } } = getPossibleExtractionsWorker(targetRange, context); + Debug.assert(!functionErrorsPerScope[requestedChangesIndex].length, "The extraction went missing? How?"); + context.cancellationToken.throwIfCancellationRequested(); + return extractFunctionInScope(target, scopes[requestedChangesIndex], usagesPerScope[requestedChangesIndex], exposedVariableDeclarations, targetRange, context); +} +function getConstantExtractionAtIndex(targetRange, context, requestedChangesIndex) { + const { scopes, readsAndWrites: { target, usagesPerScope, constantErrorsPerScope, exposedVariableDeclarations } } = getPossibleExtractionsWorker(targetRange, context); + Debug.assert(!constantErrorsPerScope[requestedChangesIndex].length, "The extraction went missing? How?"); + Debug.assert(exposedVariableDeclarations.length === 0, "Extract constant accepted a range containing a variable declaration?"); + context.cancellationToken.throwIfCancellationRequested(); + const expression = isExpression(target) ? target : target.statements[0].expression; + return extractConstantInScope(expression, scopes[requestedChangesIndex], usagesPerScope[requestedChangesIndex], targetRange.facts, context); +} +function getPossibleExtractions(targetRange, context) { + const { scopes, affectedTextRange, readsAndWrites: { functionErrorsPerScope, constantErrorsPerScope } } = getPossibleExtractionsWorker(targetRange, context); + const extractions = scopes.map((scope, i) => { + const functionDescriptionPart = getDescriptionForFunctionInScope(scope); + const constantDescriptionPart = getDescriptionForConstantInScope(scope); + const scopeDescription = isFunctionLikeDeclaration(scope) ? getDescriptionForFunctionLikeDeclaration(scope) : isClassLike(scope) ? getDescriptionForClassLikeDeclaration(scope) : getDescriptionForModuleLikeDeclaration(scope); + let functionDescription; + let constantDescription; + if (scopeDescription === 1 /* Global */) { + functionDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_1_scope), [functionDescriptionPart, "global"]); + constantDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_1_scope), [constantDescriptionPart, "global"]); + } else if (scopeDescription === 0 /* Module */) { + functionDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_1_scope), [functionDescriptionPart, "module"]); + constantDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_1_scope), [constantDescriptionPart, "module"]); + } else { + functionDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_1), [functionDescriptionPart, scopeDescription]); + constantDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_1), [constantDescriptionPart, scopeDescription]); + } + if (i === 0 && !isClassLike(scope)) { + constantDescription = formatStringFromArgs(getLocaleSpecificMessage(Diagnostics.Extract_to_0_in_enclosing_scope), [constantDescriptionPart]); + } + return { + functionExtraction: { + description: functionDescription, + errors: functionErrorsPerScope[i] + }, + constantExtraction: { + description: constantDescription, + errors: constantErrorsPerScope[i] + } + }; + }); + return { affectedTextRange, extractions }; +} +function getPossibleExtractionsWorker(targetRange, context) { + const { file: sourceFile } = context; + const scopes = collectEnclosingScopes(targetRange); + const enclosingTextRange = getEnclosingTextRange(targetRange, sourceFile); + const readsAndWrites = collectReadsAndWrites( + targetRange, + scopes, + enclosingTextRange, + sourceFile, + context.program.getTypeChecker(), + context.cancellationToken + ); + return { scopes, affectedTextRange: enclosingTextRange, readsAndWrites }; +} +function getDescriptionForFunctionInScope(scope) { + return isFunctionLikeDeclaration(scope) ? "inner function" : isClassLike(scope) ? "method" : "function"; +} +function getDescriptionForConstantInScope(scope) { + return isClassLike(scope) ? "readonly field" : "constant"; +} +function getDescriptionForFunctionLikeDeclaration(scope) { + switch (scope.kind) { + case 177 /* Constructor */: + return "constructor"; + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + return scope.name ? `function '${scope.name.text}'` : ANONYMOUS; + case 220 /* ArrowFunction */: + return "arrow function"; + case 175 /* MethodDeclaration */: + return `method '${scope.name.getText()}'`; + case 178 /* GetAccessor */: + return `'get ${scope.name.getText()}'`; + case 179 /* SetAccessor */: + return `'set ${scope.name.getText()}'`; + default: + Debug.assertNever(scope, `Unexpected scope kind ${scope.kind}`); + } +} +function getDescriptionForClassLikeDeclaration(scope) { + return scope.kind === 264 /* ClassDeclaration */ ? scope.name ? `class '${scope.name.text}'` : "anonymous class declaration" : scope.name ? `class expression '${scope.name.text}'` : "anonymous class expression"; +} +function getDescriptionForModuleLikeDeclaration(scope) { + return scope.kind === 269 /* ModuleBlock */ ? `namespace '${scope.parent.name.getText()}'` : scope.externalModuleIndicator ? 0 /* Module */ : 1 /* Global */; +} +function extractFunctionInScope(node, scope, { usages: usagesInScope, typeParameterUsages, substitutions }, exposedVariableDeclarations, range, context) { + const checker = context.program.getTypeChecker(); + const scriptTarget = getEmitScriptTarget(context.program.getCompilerOptions()); + const importAdder = ts_codefix_exports.createImportAdder(context.file, context.program, context.preferences, context.host); + const file = scope.getSourceFile(); + const functionNameText = getUniqueName(isClassLike(scope) ? "newMethod" : "newFunction", file); + const isJS = isInJSFile(scope); + const functionName = factory.createIdentifier(functionNameText); + let returnType; + const parameters = []; + const callArguments = []; + let writes; + usagesInScope.forEach((usage, name) => { + let typeNode; + if (!isJS) { + let type = checker.getTypeOfSymbolAtLocation(usage.symbol, usage.node); + type = checker.getBaseTypeOfLiteralType(type); + typeNode = ts_codefix_exports.typeToAutoImportableTypeNode(checker, importAdder, type, scope, scriptTarget, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + } + const paramDecl = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + /*name*/ + name, + /*questionToken*/ + void 0, + typeNode + ); + parameters.push(paramDecl); + if (usage.usage === 2 /* Write */) { + (writes || (writes = [])).push(usage); + } + callArguments.push(factory.createIdentifier(name)); + }); + const typeParametersAndDeclarations = arrayFrom(typeParameterUsages.values(), (type) => ({ type, declaration: getFirstDeclarationBeforePosition(type, context.startPosition) })); + typeParametersAndDeclarations.sort(compareTypesByDeclarationOrder); + const typeParameters = typeParametersAndDeclarations.length === 0 ? void 0 : mapDefined(typeParametersAndDeclarations, ({ declaration }) => declaration); + const callTypeArguments = typeParameters !== void 0 ? typeParameters.map((decl) => factory.createTypeReferenceNode( + decl.name, + /*typeArguments*/ + void 0 + )) : void 0; + if (isExpression(node) && !isJS) { + const contextualType = checker.getContextualType(node); + returnType = checker.typeToTypeNode(contextualType, scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + } + const { body, returnValueProperty } = transformFunctionBody(node, exposedVariableDeclarations, writes, substitutions, !!(range.facts & 1 /* HasReturn */)); + suppressLeadingAndTrailingTrivia(body); + let newFunction; + const callThis = !!(range.facts & 16 /* UsesThisInFunction */); + if (isClassLike(scope)) { + const modifiers = isJS ? [] : [factory.createModifier(123 /* PrivateKeyword */)]; + if (range.facts & 32 /* InStaticRegion */) { + modifiers.push(factory.createModifier(126 /* StaticKeyword */)); + } + if (range.facts & 4 /* IsAsyncFunction */) { + modifiers.push(factory.createModifier(134 /* AsyncKeyword */)); + } + newFunction = factory.createMethodDeclaration( + modifiers.length ? modifiers : void 0, + range.facts & 2 /* IsGenerator */ ? factory.createToken(42 /* AsteriskToken */) : void 0, + functionName, + /*questionToken*/ + void 0, + typeParameters, + parameters, + returnType, + body + ); + } else { + if (callThis) { + parameters.unshift( + factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + /*name*/ + "this", + /*questionToken*/ + void 0, + checker.typeToTypeNode( + checker.getTypeAtLocation(range.thisNode), + scope, + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */ + ), + /*initializer*/ + void 0 + ) + ); + } + newFunction = factory.createFunctionDeclaration( + range.facts & 4 /* IsAsyncFunction */ ? [factory.createToken(134 /* AsyncKeyword */)] : void 0, + range.facts & 2 /* IsGenerator */ ? factory.createToken(42 /* AsteriskToken */) : void 0, + functionName, + typeParameters, + parameters, + returnType, + body + ); + } + const changeTracker = ts_textChanges_exports.ChangeTracker.fromContext(context); + const minInsertionPos = (isReadonlyArray(range.range) ? last(range.range) : range.range).end; + const nodeToInsertBefore = getNodeToInsertFunctionBefore(minInsertionPos, scope); + if (nodeToInsertBefore) { + changeTracker.insertNodeBefore( + context.file, + nodeToInsertBefore, + newFunction, + /*blankLineBetween*/ + true + ); + } else { + changeTracker.insertNodeAtEndOfScope(context.file, scope, newFunction); + } + importAdder.writeFixes(changeTracker); + const newNodes = []; + const called = getCalledExpression(scope, range, functionNameText); + if (callThis) { + callArguments.unshift(factory.createIdentifier("this")); + } + let call = factory.createCallExpression( + callThis ? factory.createPropertyAccessExpression( + called, + "call" + ) : called, + callTypeArguments, + // Note that no attempt is made to take advantage of type argument inference + callArguments + ); + if (range.facts & 2 /* IsGenerator */) { + call = factory.createYieldExpression(factory.createToken(42 /* AsteriskToken */), call); + } + if (range.facts & 4 /* IsAsyncFunction */) { + call = factory.createAwaitExpression(call); + } + if (isInJSXContent(node)) { + call = factory.createJsxExpression( + /*dotDotDotToken*/ + void 0, + call + ); + } + if (exposedVariableDeclarations.length && !writes) { + Debug.assert(!returnValueProperty, "Expected no returnValueProperty"); + Debug.assert(!(range.facts & 1 /* HasReturn */), "Expected RangeFacts.HasReturn flag to be unset"); + if (exposedVariableDeclarations.length === 1) { + const variableDeclaration = exposedVariableDeclarations[0]; + newNodes.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + getSynthesizedDeepClone(variableDeclaration.name), + /*exclamationToken*/ + void 0, + /*type*/ + getSynthesizedDeepClone(variableDeclaration.type), + /*initializer*/ + call + )], + variableDeclaration.parent.flags + ) + )); + } else { + const bindingElements = []; + const typeElements = []; + let commonNodeFlags = exposedVariableDeclarations[0].parent.flags; + let sawExplicitType = false; + for (const variableDeclaration of exposedVariableDeclarations) { + bindingElements.push(factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + /*propertyName*/ + void 0, + /*name*/ + getSynthesizedDeepClone(variableDeclaration.name) + )); + const variableType = checker.typeToTypeNode( + checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(variableDeclaration)), + scope, + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */ + ); + typeElements.push(factory.createPropertySignature( + /*modifiers*/ + void 0, + /*name*/ + variableDeclaration.symbol.name, + /*questionToken*/ + void 0, + /*type*/ + variableType + )); + sawExplicitType = sawExplicitType || variableDeclaration.type !== void 0; + commonNodeFlags = commonNodeFlags & variableDeclaration.parent.flags; + } + const typeLiteral = sawExplicitType ? factory.createTypeLiteralNode(typeElements) : void 0; + if (typeLiteral) { + setEmitFlags(typeLiteral, 1 /* SingleLine */); + } + newNodes.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + factory.createObjectBindingPattern(bindingElements), + /*exclamationToken*/ + void 0, + /*type*/ + typeLiteral, + /*initializer*/ + call + )], + commonNodeFlags + ) + )); + } + } else if (exposedVariableDeclarations.length || writes) { + if (exposedVariableDeclarations.length) { + for (const variableDeclaration of exposedVariableDeclarations) { + let flags = variableDeclaration.parent.flags; + if (flags & 2 /* Const */) { + flags = flags & ~2 /* Const */ | 1 /* Let */; + } + newNodes.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + variableDeclaration.symbol.name, + /*exclamationToken*/ + void 0, + getTypeDeepCloneUnionUndefined(variableDeclaration.type) + )], + flags + ) + )); + } + } + if (returnValueProperty) { + newNodes.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + returnValueProperty, + /*exclamationToken*/ + void 0, + getTypeDeepCloneUnionUndefined(returnType) + )], + 1 /* Let */ + ) + )); + } + const assignments = getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes); + if (returnValueProperty) { + assignments.unshift(factory.createShorthandPropertyAssignment(returnValueProperty)); + } + if (assignments.length === 1) { + Debug.assert(!returnValueProperty, "Shouldn't have returnValueProperty here"); + newNodes.push(factory.createExpressionStatement(factory.createAssignment(assignments[0].name, call))); + if (range.facts & 1 /* HasReturn */) { + newNodes.push(factory.createReturnStatement()); + } + } else { + newNodes.push(factory.createExpressionStatement(factory.createAssignment(factory.createObjectLiteralExpression(assignments), call))); + if (returnValueProperty) { + newNodes.push(factory.createReturnStatement(factory.createIdentifier(returnValueProperty))); + } + } + } else { + if (range.facts & 1 /* HasReturn */) { + newNodes.push(factory.createReturnStatement(call)); + } else if (isReadonlyArray(range.range)) { + newNodes.push(factory.createExpressionStatement(call)); + } else { + newNodes.push(call); + } + } + if (isReadonlyArray(range.range)) { + changeTracker.replaceNodeRangeWithNodes(context.file, first(range.range), last(range.range), newNodes); + } else { + changeTracker.replaceNodeWithNodes(context.file, range.range, newNodes); + } + const edits = changeTracker.getChanges(); + const renameRange = isReadonlyArray(range.range) ? first(range.range) : range.range; + const renameFilename = renameRange.getSourceFile().fileName; + const renameLocation = getRenameLocation( + edits, + renameFilename, + functionNameText, + /*preferLastLocation*/ + false + ); + return { renameFilename, renameLocation, edits }; + function getTypeDeepCloneUnionUndefined(typeNode) { + if (typeNode === void 0) { + return void 0; + } + const clone2 = getSynthesizedDeepClone(typeNode); + let withoutParens = clone2; + while (isParenthesizedTypeNode(withoutParens)) { + withoutParens = withoutParens.type; + } + return isUnionTypeNode(withoutParens) && find(withoutParens.types, (t) => t.kind === 157 /* UndefinedKeyword */) ? clone2 : factory.createUnionTypeNode([clone2, factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); + } +} +function extractConstantInScope(node, scope, { substitutions }, rangeFacts, context) { + const checker = context.program.getTypeChecker(); + const file = scope.getSourceFile(); + const localNameText = getIdentifierForNode(node, scope, checker, file); + const isJS = isInJSFile(scope); + let variableType = isJS || !checker.isContextSensitive(node) ? void 0 : checker.typeToTypeNode(checker.getContextualType(node), scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + let initializer = transformConstantInitializer(skipParentheses(node), substitutions); + ({ variableType, initializer } = transformFunctionInitializerAndType(variableType, initializer)); + suppressLeadingAndTrailingTrivia(initializer); + const changeTracker = ts_textChanges_exports.ChangeTracker.fromContext(context); + if (isClassLike(scope)) { + Debug.assert(!isJS, "Cannot extract to a JS class"); + const modifiers = []; + modifiers.push(factory.createModifier(123 /* PrivateKeyword */)); + if (rangeFacts & 32 /* InStaticRegion */) { + modifiers.push(factory.createModifier(126 /* StaticKeyword */)); + } + modifiers.push(factory.createModifier(148 /* ReadonlyKeyword */)); + const newVariable = factory.createPropertyDeclaration( + modifiers, + localNameText, + /*questionOrExclamationToken*/ + void 0, + variableType, + initializer + ); + let localReference = factory.createPropertyAccessExpression( + rangeFacts & 32 /* InStaticRegion */ ? factory.createIdentifier(scope.name.getText()) : factory.createThis(), + factory.createIdentifier(localNameText) + ); + if (isInJSXContent(node)) { + localReference = factory.createJsxExpression( + /*dotDotDotToken*/ + void 0, + localReference + ); + } + const maxInsertionPos = node.pos; + const nodeToInsertBefore = getNodeToInsertPropertyBefore(maxInsertionPos, scope); + changeTracker.insertNodeBefore( + context.file, + nodeToInsertBefore, + newVariable, + /*blankLineBetween*/ + true + ); + changeTracker.replaceNode(context.file, node, localReference); + } else { + const newVariableDeclaration = factory.createVariableDeclaration( + localNameText, + /*exclamationToken*/ + void 0, + variableType, + initializer + ); + const oldVariableDeclaration = getContainingVariableDeclarationIfInList(node, scope); + if (oldVariableDeclaration) { + changeTracker.insertNodeBefore(context.file, oldVariableDeclaration, newVariableDeclaration); + const localReference = factory.createIdentifier(localNameText); + changeTracker.replaceNode(context.file, node, localReference); + } else if (node.parent.kind === 245 /* ExpressionStatement */ && scope === findAncestor(node, isScope)) { + const newVariableStatement = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([newVariableDeclaration], 2 /* Const */) + ); + changeTracker.replaceNode(context.file, node.parent, newVariableStatement); + } else { + const newVariableStatement = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([newVariableDeclaration], 2 /* Const */) + ); + const nodeToInsertBefore = getNodeToInsertConstantBefore(node, scope); + if (nodeToInsertBefore.pos === 0) { + changeTracker.insertNodeAtTopOfFile( + context.file, + newVariableStatement, + /*blankLineBetween*/ + false + ); + } else { + changeTracker.insertNodeBefore( + context.file, + nodeToInsertBefore, + newVariableStatement, + /*blankLineBetween*/ + false + ); + } + if (node.parent.kind === 245 /* ExpressionStatement */) { + changeTracker.delete(context.file, node.parent); + } else { + let localReference = factory.createIdentifier(localNameText); + if (isInJSXContent(node)) { + localReference = factory.createJsxExpression( + /*dotDotDotToken*/ + void 0, + localReference + ); + } + changeTracker.replaceNode(context.file, node, localReference); + } + } + } + const edits = changeTracker.getChanges(); + const renameFilename = node.getSourceFile().fileName; + const renameLocation = getRenameLocation( + edits, + renameFilename, + localNameText, + /*preferLastLocation*/ + true + ); + return { renameFilename, renameLocation, edits }; + function transformFunctionInitializerAndType(variableType2, initializer2) { + if (variableType2 === void 0) return { variableType: variableType2, initializer: initializer2 }; + if (!isFunctionExpression(initializer2) && !isArrowFunction(initializer2) || !!initializer2.typeParameters) return { variableType: variableType2, initializer: initializer2 }; + const functionType = checker.getTypeAtLocation(node); + const functionSignature = singleOrUndefined(checker.getSignaturesOfType(functionType, 0 /* Call */)); + if (!functionSignature) return { variableType: variableType2, initializer: initializer2 }; + if (!!functionSignature.getTypeParameters()) return { variableType: variableType2, initializer: initializer2 }; + const parameters = []; + let hasAny = false; + for (const p of initializer2.parameters) { + if (p.type) { + parameters.push(p); + } else { + const paramType = checker.getTypeAtLocation(p); + if (paramType === checker.getAnyType()) hasAny = true; + parameters.push(factory.updateParameterDeclaration(p, p.modifiers, p.dotDotDotToken, p.name, p.questionToken, p.type || checker.typeToTypeNode(paramType, scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */), p.initializer)); + } + } + if (hasAny) return { variableType: variableType2, initializer: initializer2 }; + variableType2 = void 0; + if (isArrowFunction(initializer2)) { + initializer2 = factory.updateArrowFunction(initializer2, canHaveModifiers(node) ? getModifiers(node) : void 0, initializer2.typeParameters, parameters, initializer2.type || checker.typeToTypeNode(functionSignature.getReturnType(), scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */), initializer2.equalsGreaterThanToken, initializer2.body); + } else { + if (functionSignature && !!functionSignature.thisParameter) { + const firstParameter = firstOrUndefined(parameters); + if (!firstParameter || isIdentifier(firstParameter.name) && firstParameter.name.escapedText !== "this") { + const thisType = checker.getTypeOfSymbolAtLocation(functionSignature.thisParameter, node); + parameters.splice( + 0, + 0, + factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "this", + /*questionToken*/ + void 0, + checker.typeToTypeNode(thisType, scope, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */) + ) + ); + } + } + initializer2 = factory.updateFunctionExpression(initializer2, canHaveModifiers(node) ? getModifiers(node) : void 0, initializer2.asteriskToken, initializer2.name, initializer2.typeParameters, parameters, initializer2.type || checker.typeToTypeNode(functionSignature.getReturnType(), scope, 1 /* NoTruncation */), initializer2.body); + } + return { variableType: variableType2, initializer: initializer2 }; + } +} +function getContainingVariableDeclarationIfInList(node, scope) { + let prevNode; + while (node !== void 0 && node !== scope) { + if (isVariableDeclaration(node) && node.initializer === prevNode && isVariableDeclarationList(node.parent) && node.parent.declarations.length > 1) { + return node; + } + prevNode = node; + node = node.parent; + } +} +function getFirstDeclarationBeforePosition(type, position) { + let firstDeclaration; + const symbol = type.symbol; + if (symbol && symbol.declarations) { + for (const declaration of symbol.declarations) { + if ((firstDeclaration === void 0 || declaration.pos < firstDeclaration.pos) && declaration.pos < position) { + firstDeclaration = declaration; + } + } + } + return firstDeclaration; +} +function compareTypesByDeclarationOrder({ type: type1, declaration: declaration1 }, { type: type2, declaration: declaration2 }) { + return compareProperties(declaration1, declaration2, "pos", compareValues) || compareStringsCaseSensitive( + type1.symbol ? type1.symbol.getName() : "", + type2.symbol ? type2.symbol.getName() : "" + ) || compareValues(type1.id, type2.id); +} +function getCalledExpression(scope, range, functionNameText) { + const functionReference = factory.createIdentifier(functionNameText); + if (isClassLike(scope)) { + const lhs = range.facts & 32 /* InStaticRegion */ ? factory.createIdentifier(scope.name.text) : factory.createThis(); + return factory.createPropertyAccessExpression(lhs, functionReference); + } else { + return functionReference; + } +} +function transformFunctionBody(body, exposedVariableDeclarations, writes, substitutions, hasReturn2) { + const hasWritesOrVariableDeclarations = writes !== void 0 || exposedVariableDeclarations.length > 0; + if (isBlock(body) && !hasWritesOrVariableDeclarations && substitutions.size === 0) { + return { body: factory.createBlock( + body.statements, + /*multiLine*/ + true + ), returnValueProperty: void 0 }; + } + let returnValueProperty; + let ignoreReturns = false; + const statements = factory.createNodeArray(isBlock(body) ? body.statements.slice(0) : [isStatement(body) ? body : factory.createReturnStatement(skipParentheses(body))]); + if (hasWritesOrVariableDeclarations || substitutions.size) { + const rewrittenStatements = visitNodes2(statements, visitor, isStatement).slice(); + if (hasWritesOrVariableDeclarations && !hasReturn2 && isStatement(body)) { + const assignments = getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes); + if (assignments.length === 1) { + rewrittenStatements.push(factory.createReturnStatement(assignments[0].name)); + } else { + rewrittenStatements.push(factory.createReturnStatement(factory.createObjectLiteralExpression(assignments))); + } + } + return { body: factory.createBlock( + rewrittenStatements, + /*multiLine*/ + true + ), returnValueProperty }; + } else { + return { body: factory.createBlock( + statements, + /*multiLine*/ + true + ), returnValueProperty: void 0 }; + } + function visitor(node) { + if (!ignoreReturns && isReturnStatement(node) && hasWritesOrVariableDeclarations) { + const assignments = getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes); + if (node.expression) { + if (!returnValueProperty) { + returnValueProperty = "__return"; + } + assignments.unshift(factory.createPropertyAssignment(returnValueProperty, visitNode(node.expression, visitor, isExpression))); + } + if (assignments.length === 1) { + return factory.createReturnStatement(assignments[0].name); + } else { + return factory.createReturnStatement(factory.createObjectLiteralExpression(assignments)); + } + } else { + const oldIgnoreReturns = ignoreReturns; + ignoreReturns = ignoreReturns || isFunctionLikeDeclaration(node) || isClassLike(node); + const substitution = substitutions.get(getNodeId(node).toString()); + const result = substitution ? getSynthesizedDeepClone(substitution) : visitEachChild( + node, + visitor, + /*context*/ + void 0 + ); + ignoreReturns = oldIgnoreReturns; + return result; + } + } +} +function transformConstantInitializer(initializer, substitutions) { + return substitutions.size ? visitor(initializer) : initializer; + function visitor(node) { + const substitution = substitutions.get(getNodeId(node).toString()); + return substitution ? getSynthesizedDeepClone(substitution) : visitEachChild( + node, + visitor, + /*context*/ + void 0 + ); + } +} +function getStatementsOrClassElements(scope) { + if (isFunctionLikeDeclaration(scope)) { + const body = scope.body; + if (isBlock(body)) { + return body.statements; + } + } else if (isModuleBlock(scope) || isSourceFile(scope)) { + return scope.statements; + } else if (isClassLike(scope)) { + return scope.members; + } else { + assertType(scope); + } + return emptyArray; +} +function getNodeToInsertFunctionBefore(minPos, scope) { + return find(getStatementsOrClassElements(scope), (child) => child.pos >= minPos && isFunctionLikeDeclaration(child) && !isConstructorDeclaration(child)); +} +function getNodeToInsertPropertyBefore(maxPos, scope) { + const members = scope.members; + Debug.assert(members.length > 0, "Found no members"); + let prevMember; + let allProperties = true; + for (const member of members) { + if (member.pos > maxPos) { + return prevMember || members[0]; + } + if (allProperties && !isPropertyDeclaration(member)) { + if (prevMember !== void 0) { + return member; + } + allProperties = false; + } + prevMember = member; + } + if (prevMember === void 0) return Debug.fail(); + return prevMember; +} +function getNodeToInsertConstantBefore(node, scope) { + Debug.assert(!isClassLike(scope)); + let prevScope; + for (let curr = node; curr !== scope; curr = curr.parent) { + if (isScope(curr)) { + prevScope = curr; + } + } + for (let curr = (prevScope || node).parent; ; curr = curr.parent) { + if (isBlockLike(curr)) { + let prevStatement; + for (const statement of curr.statements) { + if (statement.pos > node.pos) { + break; + } + prevStatement = statement; + } + if (!prevStatement && isCaseClause(curr)) { + Debug.assert(isSwitchStatement(curr.parent.parent), "Grandparent isn't a switch statement"); + return curr.parent.parent; + } + return Debug.checkDefined(prevStatement, "prevStatement failed to get set"); + } + Debug.assert(curr !== scope, "Didn't encounter a block-like before encountering scope"); + } +} +function getPropertyAssignmentsForWritesAndVariableDeclarations(exposedVariableDeclarations, writes) { + const variableAssignments = map(exposedVariableDeclarations, (v) => factory.createShorthandPropertyAssignment(v.symbol.name)); + const writeAssignments = map(writes, (w) => factory.createShorthandPropertyAssignment(w.symbol.name)); + return variableAssignments === void 0 ? writeAssignments : writeAssignments === void 0 ? variableAssignments : variableAssignments.concat(writeAssignments); +} +function isReadonlyArray(v) { + return isArray(v); +} +function getEnclosingTextRange(targetRange, sourceFile) { + return isReadonlyArray(targetRange.range) ? { pos: first(targetRange.range).getStart(sourceFile), end: last(targetRange.range).getEnd() } : targetRange.range; +} +function collectReadsAndWrites(targetRange, scopes, enclosingTextRange, sourceFile, checker, cancellationToken) { + const allTypeParameterUsages = /* @__PURE__ */ new Map(); + const usagesPerScope = []; + const substitutionsPerScope = []; + const functionErrorsPerScope = []; + const constantErrorsPerScope = []; + const visibleDeclarationsInExtractedRange = []; + const exposedVariableSymbolSet = /* @__PURE__ */ new Map(); + const exposedVariableDeclarations = []; + let firstExposedNonVariableDeclaration; + const expression = !isReadonlyArray(targetRange.range) ? targetRange.range : targetRange.range.length === 1 && isExpressionStatement(targetRange.range[0]) ? targetRange.range[0].expression : void 0; + let expressionDiagnostic; + if (expression === void 0) { + const statements = targetRange.range; + const start = first(statements).getStart(); + const end = last(statements).end; + expressionDiagnostic = createFileDiagnostic(sourceFile, start, end - start, Messages.expressionExpected); + } else if (checker.getTypeAtLocation(expression).flags & (16384 /* Void */ | 131072 /* Never */)) { + expressionDiagnostic = createDiagnosticForNode(expression, Messages.uselessConstantType); + } + for (const scope of scopes) { + usagesPerScope.push({ usages: /* @__PURE__ */ new Map(), typeParameterUsages: /* @__PURE__ */ new Map(), substitutions: /* @__PURE__ */ new Map() }); + substitutionsPerScope.push(/* @__PURE__ */ new Map()); + functionErrorsPerScope.push([]); + const constantErrors = []; + if (expressionDiagnostic) { + constantErrors.push(expressionDiagnostic); + } + if (isClassLike(scope) && isInJSFile(scope)) { + constantErrors.push(createDiagnosticForNode(scope, Messages.cannotExtractToJSClass)); + } + if (isArrowFunction(scope) && !isBlock(scope.body)) { + constantErrors.push(createDiagnosticForNode(scope, Messages.cannotExtractToExpressionArrowFunction)); + } + constantErrorsPerScope.push(constantErrors); + } + const seenUsages = /* @__PURE__ */ new Map(); + const target = isReadonlyArray(targetRange.range) ? factory.createBlock(targetRange.range) : targetRange.range; + const unmodifiedNode = isReadonlyArray(targetRange.range) ? first(targetRange.range) : targetRange.range; + const inGenericContext = isInGenericContext(unmodifiedNode); + collectUsages(target); + if (inGenericContext && !isReadonlyArray(targetRange.range) && !isJsxAttribute(targetRange.range)) { + const contextualType = checker.getContextualType(targetRange.range); + recordTypeParameterUsages(contextualType); + } + if (allTypeParameterUsages.size > 0) { + const seenTypeParameterUsages = /* @__PURE__ */ new Map(); + let i = 0; + for (let curr = unmodifiedNode; curr !== void 0 && i < scopes.length; curr = curr.parent) { + if (curr === scopes[i]) { + seenTypeParameterUsages.forEach((typeParameter, id) => { + usagesPerScope[i].typeParameterUsages.set(id, typeParameter); + }); + i++; + } + if (isDeclarationWithTypeParameters(curr)) { + for (const typeParameterDecl of getEffectiveTypeParameterDeclarations(curr)) { + const typeParameter = checker.getTypeAtLocation(typeParameterDecl); + if (allTypeParameterUsages.has(typeParameter.id.toString())) { + seenTypeParameterUsages.set(typeParameter.id.toString(), typeParameter); + } + } + } + } + Debug.assert(i === scopes.length, "Should have iterated all scopes"); + } + if (visibleDeclarationsInExtractedRange.length) { + const containingLexicalScopeOfExtraction = isBlockScope(scopes[0], scopes[0].parent) ? scopes[0] : getEnclosingBlockScopeContainer(scopes[0]); + forEachChild(containingLexicalScopeOfExtraction, checkForUsedDeclarations); + } + for (let i = 0; i < scopes.length; i++) { + const scopeUsages = usagesPerScope[i]; + if (i > 0 && (scopeUsages.usages.size > 0 || scopeUsages.typeParameterUsages.size > 0)) { + const errorNode = isReadonlyArray(targetRange.range) ? targetRange.range[0] : targetRange.range; + constantErrorsPerScope[i].push(createDiagnosticForNode(errorNode, Messages.cannotAccessVariablesFromNestedScopes)); + } + if (targetRange.facts & 16 /* UsesThisInFunction */ && isClassLike(scopes[i])) { + functionErrorsPerScope[i].push(createDiagnosticForNode(targetRange.thisNode, Messages.cannotExtractFunctionsContainingThisToMethod)); + } + let hasWrite = false; + let readonlyClassPropertyWrite; + usagesPerScope[i].usages.forEach((value) => { + if (value.usage === 2 /* Write */) { + hasWrite = true; + if (value.symbol.flags & 106500 /* ClassMember */ && value.symbol.valueDeclaration && hasEffectiveModifier(value.symbol.valueDeclaration, 8 /* Readonly */)) { + readonlyClassPropertyWrite = value.symbol.valueDeclaration; + } + } + }); + Debug.assert(isReadonlyArray(targetRange.range) || exposedVariableDeclarations.length === 0, "No variable declarations expected if something was extracted"); + if (hasWrite && !isReadonlyArray(targetRange.range)) { + const diag2 = createDiagnosticForNode(targetRange.range, Messages.cannotWriteInExpression); + functionErrorsPerScope[i].push(diag2); + constantErrorsPerScope[i].push(diag2); + } else if (readonlyClassPropertyWrite && i > 0) { + const diag2 = createDiagnosticForNode(readonlyClassPropertyWrite, Messages.cannotExtractReadonlyPropertyInitializerOutsideConstructor); + functionErrorsPerScope[i].push(diag2); + constantErrorsPerScope[i].push(diag2); + } else if (firstExposedNonVariableDeclaration) { + const diag2 = createDiagnosticForNode(firstExposedNonVariableDeclaration, Messages.cannotExtractExportedEntity); + functionErrorsPerScope[i].push(diag2); + constantErrorsPerScope[i].push(diag2); + } + } + return { target, usagesPerScope, functionErrorsPerScope, constantErrorsPerScope, exposedVariableDeclarations }; + function isInGenericContext(node) { + return !!findAncestor(node, (n) => isDeclarationWithTypeParameters(n) && getEffectiveTypeParameterDeclarations(n).length !== 0); + } + function recordTypeParameterUsages(type) { + const symbolWalker = checker.getSymbolWalker(() => (cancellationToken.throwIfCancellationRequested(), true)); + const { visitedTypes } = symbolWalker.walkType(type); + for (const visitedType of visitedTypes) { + if (visitedType.isTypeParameter()) { + allTypeParameterUsages.set(visitedType.id.toString(), visitedType); + } + } + } + function collectUsages(node, valueUsage = 1 /* Read */) { + if (inGenericContext) { + const type = checker.getTypeAtLocation(node); + recordTypeParameterUsages(type); + } + if (isDeclaration(node) && node.symbol) { + visibleDeclarationsInExtractedRange.push(node); + } + if (isAssignmentExpression(node)) { + collectUsages(node.left, 2 /* Write */); + collectUsages(node.right); + } else if (isUnaryExpressionWithWrite(node)) { + collectUsages(node.operand, 2 /* Write */); + } else if (isPropertyAccessExpression(node) || isElementAccessExpression(node)) { + forEachChild(node, collectUsages); + } else if (isIdentifier(node)) { + if (!node.parent) { + return; + } + if (isQualifiedName(node.parent) && node !== node.parent.left) { + return; + } + if (isPropertyAccessExpression(node.parent) && node !== node.parent.expression) { + return; + } + recordUsage( + node, + valueUsage, + /*isTypeNode*/ + isPartOfTypeNode(node) + ); + } else { + forEachChild(node, collectUsages); + } + } + function recordUsage(n, usage, isTypeNode2) { + const symbolId = recordUsagebySymbol(n, usage, isTypeNode2); + if (symbolId) { + for (let i = 0; i < scopes.length; i++) { + const substitution = substitutionsPerScope[i].get(symbolId); + if (substitution) { + usagesPerScope[i].substitutions.set(getNodeId(n).toString(), substitution); + } + } + } + } + function recordUsagebySymbol(identifier, usage, isTypeName) { + const symbol = getSymbolReferencedByIdentifier(identifier); + if (!symbol) { + return void 0; + } + const symbolId = getSymbolId(symbol).toString(); + const lastUsage = seenUsages.get(symbolId); + if (lastUsage && lastUsage >= usage) { + return symbolId; + } + seenUsages.set(symbolId, usage); + if (lastUsage) { + for (const perScope of usagesPerScope) { + const prevEntry = perScope.usages.get(identifier.text); + if (prevEntry) { + perScope.usages.set(identifier.text, { usage, symbol, node: identifier }); + } + } + return symbolId; + } + const decls = symbol.getDeclarations(); + const declInFile = decls && find(decls, (d) => d.getSourceFile() === sourceFile); + if (!declInFile) { + return void 0; + } + if (rangeContainsStartEnd(enclosingTextRange, declInFile.getStart(), declInFile.end)) { + return void 0; + } + if (targetRange.facts & 2 /* IsGenerator */ && usage === 2 /* Write */) { + const diag2 = createDiagnosticForNode(identifier, Messages.cannotExtractRangeThatContainsWritesToReferencesLocatedOutsideOfTheTargetRangeInGenerators); + for (const errors of functionErrorsPerScope) { + errors.push(diag2); + } + for (const errors of constantErrorsPerScope) { + errors.push(diag2); + } + } + for (let i = 0; i < scopes.length; i++) { + const scope = scopes[i]; + const resolvedSymbol = checker.resolveName( + symbol.name, + scope, + symbol.flags, + /*excludeGlobals*/ + false + ); + if (resolvedSymbol === symbol) { + continue; + } + if (!substitutionsPerScope[i].has(symbolId)) { + const substitution = tryReplaceWithQualifiedNameOrPropertyAccess(symbol.exportSymbol || symbol, scope, isTypeName); + if (substitution) { + substitutionsPerScope[i].set(symbolId, substitution); + } else if (isTypeName) { + if (!(symbol.flags & 262144 /* TypeParameter */)) { + const diag2 = createDiagnosticForNode(identifier, Messages.typeWillNotBeVisibleInTheNewScope); + functionErrorsPerScope[i].push(diag2); + constantErrorsPerScope[i].push(diag2); + } + } else { + usagesPerScope[i].usages.set(identifier.text, { usage, symbol, node: identifier }); + } + } + } + return symbolId; + } + function checkForUsedDeclarations(node) { + if (node === targetRange.range || isReadonlyArray(targetRange.range) && targetRange.range.includes(node)) { + return; + } + const sym = isIdentifier(node) ? getSymbolReferencedByIdentifier(node) : checker.getSymbolAtLocation(node); + if (sym) { + const decl = find(visibleDeclarationsInExtractedRange, (d) => d.symbol === sym); + if (decl) { + if (isVariableDeclaration(decl)) { + const idString = decl.symbol.id.toString(); + if (!exposedVariableSymbolSet.has(idString)) { + exposedVariableDeclarations.push(decl); + exposedVariableSymbolSet.set(idString, true); + } + } else { + firstExposedNonVariableDeclaration = firstExposedNonVariableDeclaration || decl; + } + } + } + forEachChild(node, checkForUsedDeclarations); + } + function getSymbolReferencedByIdentifier(identifier) { + return identifier.parent && isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier ? checker.getShorthandAssignmentValueSymbol(identifier.parent) : checker.getSymbolAtLocation(identifier); + } + function tryReplaceWithQualifiedNameOrPropertyAccess(symbol, scopeDecl, isTypeNode2) { + if (!symbol) { + return void 0; + } + const decls = symbol.getDeclarations(); + if (decls && decls.some((d) => d.parent === scopeDecl)) { + return factory.createIdentifier(symbol.name); + } + const prefix = tryReplaceWithQualifiedNameOrPropertyAccess(symbol.parent, scopeDecl, isTypeNode2); + if (prefix === void 0) { + return void 0; + } + return isTypeNode2 ? factory.createQualifiedName(prefix, factory.createIdentifier(symbol.name)) : factory.createPropertyAccessExpression(prefix, symbol.name); + } +} +function getExtractableParent(node) { + return findAncestor(node, (node2) => node2.parent && isExtractableExpression(node2) && !isBinaryExpression(node2.parent)); +} +function isExtractableExpression(node) { + const { parent: parent2 } = node; + switch (parent2.kind) { + case 307 /* EnumMember */: + return false; + } + switch (node.kind) { + case 11 /* StringLiteral */: + return parent2.kind !== 273 /* ImportDeclaration */ && parent2.kind !== 277 /* ImportSpecifier */; + case 231 /* SpreadElement */: + case 207 /* ObjectBindingPattern */: + case 209 /* BindingElement */: + return false; + case 80 /* Identifier */: + return parent2.kind !== 209 /* BindingElement */ && parent2.kind !== 277 /* ImportSpecifier */ && parent2.kind !== 282 /* ExportSpecifier */; + } + return true; +} +function isInJSXContent(node) { + return isStringLiteralJsxAttribute(node) || (isJsxElement(node) || isJsxSelfClosingElement(node) || isJsxFragment(node)) && (isJsxElement(node.parent) || isJsxFragment(node.parent)); +} +function isStringLiteralJsxAttribute(node) { + return isStringLiteral(node) && node.parent && isJsxAttribute(node.parent); +} + +// src/services/_namespaces/ts.refactor.generateGetAccessorAndSetAccessor.ts +var ts_refactor_generateGetAccessorAndSetAccessor_exports = {}; + +// src/services/refactors/generateGetAccessorAndSetAccessor.ts +var actionName = "Generate 'get' and 'set' accessors"; +var actionDescription = getLocaleSpecificMessage(Diagnostics.Generate_get_and_set_accessors); +var generateGetSetAction = { + name: actionName, + description: actionDescription, + kind: "refactor.rewrite.property.generateAccessors" +}; +registerRefactor(actionName, { + kinds: [generateGetSetAction.kind], + getEditsForAction: function getRefactorActionsToGenerateGetAndSetAccessors(context, actionName2) { + if (!context.endPosition) return void 0; + const info = ts_codefix_exports.getAccessorConvertiblePropertyAtPosition(context.file, context.program, context.startPosition, context.endPosition); + Debug.assert(info && !isRefactorErrorInfo(info), "Expected applicable refactor info"); + const edits = ts_codefix_exports.generateAccessorFromProperty(context.file, context.program, context.startPosition, context.endPosition, context, actionName2); + if (!edits) return void 0; + const renameFilename = context.file.fileName; + const nameNeedRename = info.renameAccessor ? info.accessorName : info.fieldName; + const renameLocationOffset = isIdentifier(nameNeedRename) ? 0 : -1; + const renameLocation = renameLocationOffset + getRenameLocation( + edits, + renameFilename, + nameNeedRename.text, + /*preferLastLocation*/ + isParameter(info.declaration) + ); + return { renameFilename, renameLocation, edits }; + }, + getAvailableActions(context) { + if (!context.endPosition) return emptyArray; + const info = ts_codefix_exports.getAccessorConvertiblePropertyAtPosition(context.file, context.program, context.startPosition, context.endPosition, context.triggerReason === "invoked"); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + return [{ + name: actionName, + description: actionDescription, + actions: [generateGetSetAction] + }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ + name: actionName, + description: actionDescription, + actions: [{ ...generateGetSetAction, notApplicableReason: info.error }] + }]; + } + return emptyArray; + } +}); + +// src/services/_namespaces/ts.refactor.inferFunctionReturnType.ts +var ts_refactor_inferFunctionReturnType_exports = {}; + +// src/services/refactors/inferFunctionReturnType.ts +var refactorName13 = "Infer function return type"; +var refactorDescription7 = getLocaleSpecificMessage(Diagnostics.Infer_function_return_type); +var inferReturnTypeAction = { + name: refactorName13, + description: refactorDescription7, + kind: "refactor.rewrite.function.returnType" +}; +registerRefactor(refactorName13, { + kinds: [inferReturnTypeAction.kind], + getEditsForAction: getRefactorEditsToInferReturnType, + getAvailableActions: getRefactorActionsToInferReturnType +}); +function getRefactorEditsToInferReturnType(context) { + const info = getInfo4(context); + if (info && !isRefactorErrorInfo(info)) { + const edits = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange7(context.file, t, info.declaration, info.returnTypeNode)); + return { renameFilename: void 0, renameLocation: void 0, edits }; + } + return void 0; +} +function getRefactorActionsToInferReturnType(context) { + const info = getInfo4(context); + if (!info) return emptyArray; + if (!isRefactorErrorInfo(info)) { + return [{ + name: refactorName13, + description: refactorDescription7, + actions: [inferReturnTypeAction] + }]; + } + if (context.preferences.provideRefactorNotApplicableReason) { + return [{ + name: refactorName13, + description: refactorDescription7, + actions: [{ ...inferReturnTypeAction, notApplicableReason: info.error }] + }]; + } + return emptyArray; +} +function doChange7(sourceFile, changes, declaration, typeNode) { + const closeParen = findChildOfKind(declaration, 22 /* CloseParenToken */, sourceFile); + const needParens = isArrowFunction(declaration) && closeParen === void 0; + const endNode2 = needParens ? first(declaration.parameters) : closeParen; + if (endNode2) { + if (needParens) { + changes.insertNodeBefore(sourceFile, endNode2, factory.createToken(21 /* OpenParenToken */)); + changes.insertNodeAfter(sourceFile, endNode2, factory.createToken(22 /* CloseParenToken */)); + } + changes.insertNodeAt(sourceFile, endNode2.end, typeNode, { prefix: ": " }); + } +} +function getInfo4(context) { + if (isInJSFile(context.file) || !refactorKindBeginsWith(inferReturnTypeAction.kind, context.kind)) return; + const token = getTouchingPropertyName(context.file, context.startPosition); + const declaration = findAncestor(token, (n) => isBlock(n) || n.parent && isArrowFunction(n.parent) && (n.kind === 39 /* EqualsGreaterThanToken */ || n.parent.body === n) ? "quit" : isConvertibleDeclaration(n)); + if (!declaration || !declaration.body || declaration.type) { + return { error: getLocaleSpecificMessage(Diagnostics.Return_type_must_be_inferred_from_a_function) }; + } + const typeChecker = context.program.getTypeChecker(); + let returnType; + if (typeChecker.isImplementationOfOverload(declaration)) { + const signatures = typeChecker.getTypeAtLocation(declaration).getCallSignatures(); + if (signatures.length > 1) { + returnType = typeChecker.getUnionType(mapDefined(signatures, (s) => s.getReturnType())); + } + } + if (!returnType) { + const signature = typeChecker.getSignatureFromDeclaration(declaration); + if (signature) { + const typePredicate = typeChecker.getTypePredicateOfSignature(signature); + if (typePredicate && typePredicate.type) { + const typePredicateTypeNode = typeChecker.typePredicateToTypePredicateNode(typePredicate, declaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + if (typePredicateTypeNode) { + return { declaration, returnTypeNode: typePredicateTypeNode }; + } + } else { + returnType = typeChecker.getReturnTypeOfSignature(signature); + } + } + } + if (!returnType) { + return { error: getLocaleSpecificMessage(Diagnostics.Could_not_determine_function_return_type) }; + } + const returnTypeNode = typeChecker.typeToTypeNode(returnType, declaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + if (returnTypeNode) { + return { declaration, returnTypeNode }; + } +} +function isConvertibleDeclaration(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + return true; + default: + return false; + } +} + +// src/services/classifier2020.ts +var TokenEncodingConsts = /* @__PURE__ */ ((TokenEncodingConsts2) => { + TokenEncodingConsts2[TokenEncodingConsts2["typeOffset"] = 8] = "typeOffset"; + TokenEncodingConsts2[TokenEncodingConsts2["modifierMask"] = 255] = "modifierMask"; + return TokenEncodingConsts2; +})(TokenEncodingConsts || {}); +var TokenType = /* @__PURE__ */ ((TokenType2) => { + TokenType2[TokenType2["class"] = 0] = "class"; + TokenType2[TokenType2["enum"] = 1] = "enum"; + TokenType2[TokenType2["interface"] = 2] = "interface"; + TokenType2[TokenType2["namespace"] = 3] = "namespace"; + TokenType2[TokenType2["typeParameter"] = 4] = "typeParameter"; + TokenType2[TokenType2["type"] = 5] = "type"; + TokenType2[TokenType2["parameter"] = 6] = "parameter"; + TokenType2[TokenType2["variable"] = 7] = "variable"; + TokenType2[TokenType2["enumMember"] = 8] = "enumMember"; + TokenType2[TokenType2["property"] = 9] = "property"; + TokenType2[TokenType2["function"] = 10] = "function"; + TokenType2[TokenType2["member"] = 11] = "member"; + return TokenType2; +})(TokenType || {}); +var TokenModifier = /* @__PURE__ */ ((TokenModifier2) => { + TokenModifier2[TokenModifier2["declaration"] = 0] = "declaration"; + TokenModifier2[TokenModifier2["static"] = 1] = "static"; + TokenModifier2[TokenModifier2["async"] = 2] = "async"; + TokenModifier2[TokenModifier2["readonly"] = 3] = "readonly"; + TokenModifier2[TokenModifier2["defaultLibrary"] = 4] = "defaultLibrary"; + TokenModifier2[TokenModifier2["local"] = 5] = "local"; + return TokenModifier2; +})(TokenModifier || {}); +function getSemanticClassifications2(program, cancellationToken, sourceFile, span) { + const classifications = getEncodedSemanticClassifications2(program, cancellationToken, sourceFile, span); + Debug.assert(classifications.spans.length % 3 === 0); + const dense = classifications.spans; + const result = []; + for (let i = 0; i < dense.length; i += 3) { + result.push({ + textSpan: createTextSpan(dense[i], dense[i + 1]), + classificationType: dense[i + 2] + }); + } + return result; +} +function getEncodedSemanticClassifications2(program, cancellationToken, sourceFile, span) { + return { + spans: getSemanticTokens(program, sourceFile, span, cancellationToken), + endOfLineState: 0 /* None */ + }; +} +function getSemanticTokens(program, sourceFile, span, cancellationToken) { + const resultTokens = []; + const collector = (node, typeIdx, modifierSet) => { + resultTokens.push(node.getStart(sourceFile), node.getWidth(sourceFile), (typeIdx + 1 << 8 /* typeOffset */) + modifierSet); + }; + if (program && sourceFile) { + collectTokens(program, sourceFile, span, collector, cancellationToken); + } + return resultTokens; +} +function collectTokens(program, sourceFile, span, collector, cancellationToken) { + const typeChecker = program.getTypeChecker(); + let inJSXElement = false; + function visit(node) { + switch (node.kind) { + case 268 /* ModuleDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 263 /* FunctionDeclaration */: + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + cancellationToken.throwIfCancellationRequested(); + } + if (!node || !textSpanIntersectsWith(span, node.pos, node.getFullWidth()) || node.getFullWidth() === 0) { + return; + } + const prevInJSXElement = inJSXElement; + if (isJsxElement(node) || isJsxSelfClosingElement(node)) { + inJSXElement = true; + } + if (isJsxExpression(node)) { + inJSXElement = false; + } + if (isIdentifier(node) && !inJSXElement && !inImportClause(node) && !isInfinityOrNaNString(node.escapedText)) { + let symbol = typeChecker.getSymbolAtLocation(node); + if (symbol) { + if (symbol.flags & 2097152 /* Alias */) { + symbol = typeChecker.getAliasedSymbol(symbol); + } + let typeIdx = classifySymbol2(symbol, getMeaningFromLocation(node)); + if (typeIdx !== void 0) { + let modifierSet = 0; + if (node.parent) { + const parentIsDeclaration = isBindingElement(node.parent) || tokenFromDeclarationMapping.get(node.parent.kind) === typeIdx; + if (parentIsDeclaration && node.parent.name === node) { + modifierSet = 1 << 0 /* declaration */; + } + } + if (typeIdx === 6 /* parameter */ && isRightSideOfQualifiedNameOrPropertyAccess2(node)) { + typeIdx = 9 /* property */; + } + typeIdx = reclassifyByType(typeChecker, node, typeIdx); + const decl = symbol.valueDeclaration; + if (decl) { + const modifiers = getCombinedModifierFlags(decl); + const nodeFlags = getCombinedNodeFlags(decl); + if (modifiers & 256 /* Static */) { + modifierSet |= 1 << 1 /* static */; + } + if (modifiers & 1024 /* Async */) { + modifierSet |= 1 << 2 /* async */; + } + if (typeIdx !== 0 /* class */ && typeIdx !== 2 /* interface */) { + if (modifiers & 8 /* Readonly */ || nodeFlags & 2 /* Const */ || symbol.getFlags() & 8 /* EnumMember */) { + modifierSet |= 1 << 3 /* readonly */; + } + } + if ((typeIdx === 7 /* variable */ || typeIdx === 10 /* function */) && isLocalDeclaration(decl, sourceFile)) { + modifierSet |= 1 << 5 /* local */; + } + if (program.isSourceFileDefaultLibrary(decl.getSourceFile())) { + modifierSet |= 1 << 4 /* defaultLibrary */; + } + } else if (symbol.declarations && symbol.declarations.some((d) => program.isSourceFileDefaultLibrary(d.getSourceFile()))) { + modifierSet |= 1 << 4 /* defaultLibrary */; + } + collector(node, typeIdx, modifierSet); + } + } + } + forEachChild(node, visit); + inJSXElement = prevInJSXElement; + } + visit(sourceFile); +} +function classifySymbol2(symbol, meaning) { + const flags = symbol.getFlags(); + if (flags & 32 /* Class */) { + return 0 /* class */; + } else if (flags & 384 /* Enum */) { + return 1 /* enum */; + } else if (flags & 524288 /* TypeAlias */) { + return 5 /* type */; + } else if (flags & 64 /* Interface */) { + if (meaning & 2 /* Type */) { + return 2 /* interface */; + } + } else if (flags & 262144 /* TypeParameter */) { + return 4 /* typeParameter */; + } + let decl = symbol.valueDeclaration || symbol.declarations && symbol.declarations[0]; + if (decl && isBindingElement(decl)) { + decl = getDeclarationForBindingElement(decl); + } + return decl && tokenFromDeclarationMapping.get(decl.kind); +} +function reclassifyByType(typeChecker, node, typeIdx) { + if (typeIdx === 7 /* variable */ || typeIdx === 9 /* property */ || typeIdx === 6 /* parameter */) { + const type = typeChecker.getTypeAtLocation(node); + if (type) { + const test = (condition) => { + return condition(type) || type.isUnion() && type.types.some(condition); + }; + if (typeIdx !== 6 /* parameter */ && test((t) => t.getConstructSignatures().length > 0)) { + return 0 /* class */; + } + if (test((t) => t.getCallSignatures().length > 0) && !test((t) => t.getProperties().length > 0) || isExpressionInCallExpression(node)) { + return typeIdx === 9 /* property */ ? 11 /* member */ : 10 /* function */; + } + } + } + return typeIdx; +} +function isLocalDeclaration(decl, sourceFile) { + if (isBindingElement(decl)) { + decl = getDeclarationForBindingElement(decl); + } + if (isVariableDeclaration(decl)) { + return (!isSourceFile(decl.parent.parent.parent) || isCatchClause(decl.parent)) && decl.getSourceFile() === sourceFile; + } else if (isFunctionDeclaration(decl)) { + return !isSourceFile(decl.parent) && decl.getSourceFile() === sourceFile; + } + return false; +} +function getDeclarationForBindingElement(element) { + while (true) { + if (isBindingElement(element.parent.parent)) { + element = element.parent.parent; + } else { + return element.parent.parent; + } + } +} +function inImportClause(node) { + const parent2 = node.parent; + return parent2 && (isImportClause(parent2) || isImportSpecifier(parent2) || isNamespaceImport(parent2)); +} +function isExpressionInCallExpression(node) { + while (isRightSideOfQualifiedNameOrPropertyAccess2(node)) { + node = node.parent; + } + return isCallExpression(node.parent) && node.parent.expression === node; +} +function isRightSideOfQualifiedNameOrPropertyAccess2(node) { + return isQualifiedName(node.parent) && node.parent.right === node || isPropertyAccessExpression(node.parent) && node.parent.name === node; +} +var tokenFromDeclarationMapping = /* @__PURE__ */ new Map([ + [261 /* VariableDeclaration */, 7 /* variable */], + [170 /* Parameter */, 6 /* parameter */], + [173 /* PropertyDeclaration */, 9 /* property */], + [268 /* ModuleDeclaration */, 3 /* namespace */], + [267 /* EnumDeclaration */, 1 /* enum */], + [307 /* EnumMember */, 8 /* enumMember */], + [264 /* ClassDeclaration */, 0 /* class */], + [175 /* MethodDeclaration */, 11 /* member */], + [263 /* FunctionDeclaration */, 10 /* function */], + [219 /* FunctionExpression */, 10 /* function */], + [174 /* MethodSignature */, 11 /* member */], + [178 /* GetAccessor */, 9 /* property */], + [179 /* SetAccessor */, 9 /* property */], + [172 /* PropertySignature */, 9 /* property */], + [265 /* InterfaceDeclaration */, 2 /* interface */], + [266 /* TypeAliasDeclaration */, 5 /* type */], + [169 /* TypeParameter */, 4 /* typeParameter */], + [304 /* PropertyAssignment */, 9 /* property */], + [305 /* ShorthandPropertyAssignment */, 9 /* property */] +]); + +// src/services/services.ts +var servicesVersion = "0.8"; +function createNode(kind, pos, end, parent2) { + const node = isNodeKind(kind) ? new NodeObject(kind, pos, end) : kind === 80 /* Identifier */ ? new IdentifierObject(80 /* Identifier */, pos, end) : kind === 81 /* PrivateIdentifier */ ? new PrivateIdentifierObject(81 /* PrivateIdentifier */, pos, end) : new TokenObject(kind, pos, end); + node.parent = parent2; + node.flags = parent2.flags & 101441536 /* ContextFlags */; + return node; +} +var NodeObject = class { + constructor(kind, pos, end) { + this.pos = pos; + this.end = end; + this.kind = kind; + this.id = 0; + this.flags = 0 /* None */; + this.modifierFlagsCache = 0 /* None */; + this.transformFlags = 0 /* None */; + this.parent = void 0; + this.original = void 0; + this.emitNode = void 0; + } + assertHasRealPosition(message) { + Debug.assert(!positionIsSynthesized(this.pos) && !positionIsSynthesized(this.end), message || "Node must have a real position for this operation"); + } + getSourceFile() { + return getSourceFileOfNode(this); + } + getStart(sourceFile, includeJsDocComment) { + this.assertHasRealPosition(); + return getTokenPosOfNode(this, sourceFile, includeJsDocComment); + } + getFullStart() { + this.assertHasRealPosition(); + return this.pos; + } + getEnd() { + this.assertHasRealPosition(); + return this.end; + } + getWidth(sourceFile) { + this.assertHasRealPosition(); + return this.getEnd() - this.getStart(sourceFile); + } + getFullWidth() { + this.assertHasRealPosition(); + return this.end - this.pos; + } + getLeadingTriviaWidth(sourceFile) { + this.assertHasRealPosition(); + return this.getStart(sourceFile) - this.pos; + } + getFullText(sourceFile) { + this.assertHasRealPosition(); + return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end); + } + getText(sourceFile) { + this.assertHasRealPosition(); + if (!sourceFile) { + sourceFile = this.getSourceFile(); + } + return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd()); + } + getChildCount(sourceFile) { + return this.getChildren(sourceFile).length; + } + getChildAt(index, sourceFile) { + return this.getChildren(sourceFile)[index]; + } + getChildren(sourceFile = getSourceFileOfNode(this)) { + this.assertHasRealPosition("Node without a real position cannot be scanned and thus has no token nodes - use forEachChild and collect the result if that's fine"); + return getNodeChildren(this, sourceFile) ?? setNodeChildren(this, sourceFile, createChildren(this, sourceFile)); + } + getFirstToken(sourceFile) { + this.assertHasRealPosition(); + const children = this.getChildren(sourceFile); + if (!children.length) { + return void 0; + } + const child = find(children, (kid) => kid.kind < 310 /* FirstJSDocNode */ || kid.kind > 352 /* LastJSDocNode */); + return child.kind < 167 /* FirstNode */ ? child : child.getFirstToken(sourceFile); + } + getLastToken(sourceFile) { + this.assertHasRealPosition(); + const children = this.getChildren(sourceFile); + const child = lastOrUndefined(children); + if (!child) { + return void 0; + } + return child.kind < 167 /* FirstNode */ ? child : child.getLastToken(sourceFile); + } + forEachChild(cbNode, cbNodeArray) { + return forEachChild(this, cbNode, cbNodeArray); + } +}; +function createChildren(node, sourceFile) { + const children = []; + if (isJSDocCommentContainingNode(node)) { + node.forEachChild((child) => { + children.push(child); + }); + return children; + } + scanner.setText((sourceFile || node.getSourceFile()).text); + let pos = node.pos; + const processNode = (child) => { + addSyntheticNodes(children, pos, child.pos, node); + children.push(child); + pos = child.end; + }; + const processNodes = (nodes) => { + addSyntheticNodes(children, pos, nodes.pos, node); + children.push(createSyntaxList(nodes, node)); + pos = nodes.end; + }; + forEach(node.jsDoc, processNode); + pos = node.pos; + node.forEachChild(processNode, processNodes); + addSyntheticNodes(children, pos, node.end, node); + scanner.setText(void 0); + return children; +} +function addSyntheticNodes(nodes, pos, end, parent2) { + scanner.resetTokenState(pos); + while (pos < end) { + const token = scanner.scan(); + const textPos = scanner.getTokenEnd(); + if (textPos <= end) { + if (token === 80 /* Identifier */) { + if (hasTabstop(parent2)) { + continue; + } + Debug.fail(`Did not expect ${Debug.formatSyntaxKind(parent2.kind)} to have an Identifier in its trivia`); + } + nodes.push(createNode(token, pos, textPos, parent2)); + } + pos = textPos; + if (token === 1 /* EndOfFileToken */) { + break; + } + } +} +function createSyntaxList(nodes, parent2) { + const list = createNode(353 /* SyntaxList */, nodes.pos, nodes.end, parent2); + const children = []; + let pos = nodes.pos; + for (const node of nodes) { + addSyntheticNodes(children, pos, node.pos, parent2); + children.push(node); + pos = node.end; + } + addSyntheticNodes(children, pos, nodes.end, parent2); + list._children = children; + return list; +} +var TokenOrIdentifierObject = class { + constructor(kind, pos, end) { + this.pos = pos; + this.end = end; + this.kind = kind; + this.id = 0; + this.flags = 0 /* None */; + this.transformFlags = 0 /* None */; + this.parent = void 0; + this.emitNode = void 0; + } + getSourceFile() { + return getSourceFileOfNode(this); + } + getStart(sourceFile, includeJsDocComment) { + return getTokenPosOfNode(this, sourceFile, includeJsDocComment); + } + getFullStart() { + return this.pos; + } + getEnd() { + return this.end; + } + getWidth(sourceFile) { + return this.getEnd() - this.getStart(sourceFile); + } + getFullWidth() { + return this.end - this.pos; + } + getLeadingTriviaWidth(sourceFile) { + return this.getStart(sourceFile) - this.pos; + } + getFullText(sourceFile) { + return (sourceFile || this.getSourceFile()).text.substring(this.pos, this.end); + } + getText(sourceFile) { + if (!sourceFile) { + sourceFile = this.getSourceFile(); + } + return sourceFile.text.substring(this.getStart(sourceFile), this.getEnd()); + } + getChildCount() { + return this.getChildren().length; + } + getChildAt(index) { + return this.getChildren()[index]; + } + getChildren() { + return this.kind === 1 /* EndOfFileToken */ ? this.jsDoc || emptyArray : emptyArray; + } + getFirstToken() { + return void 0; + } + getLastToken() { + return void 0; + } + forEachChild() { + return void 0; + } +}; +var SymbolObject = class { + constructor(flags, name) { + this.flags = flags; + this.escapedName = name; + this.declarations = void 0; + this.valueDeclaration = void 0; + this.id = 0; + this.mergeId = 0; + this.parent = void 0; + this.members = void 0; + this.exports = void 0; + this.exportSymbol = void 0; + this.constEnumOnlyModule = void 0; + this.isReferenced = void 0; + this.lastAssignmentPos = void 0; + this.links = void 0; + } + getFlags() { + return this.flags; + } + get name() { + return symbolName(this); + } + getEscapedName() { + return this.escapedName; + } + getName() { + return this.name; + } + getDeclarations() { + return this.declarations; + } + getDocumentationComment(checker) { + if (!this.documentationComment) { + this.documentationComment = emptyArray; + if (!this.declarations && isTransientSymbol(this) && this.links.target && isTransientSymbol(this.links.target) && this.links.target.links.tupleLabelDeclaration) { + const labelDecl = this.links.target.links.tupleLabelDeclaration; + this.documentationComment = getDocumentationComment([labelDecl], checker); + } else { + this.documentationComment = getDocumentationComment(this.declarations, checker); + } + } + return this.documentationComment; + } + getContextualDocumentationComment(context, checker) { + if (context) { + if (isGetAccessor(context)) { + if (!this.contextualGetAccessorDocumentationComment) { + this.contextualGetAccessorDocumentationComment = emptyArray; + this.contextualGetAccessorDocumentationComment = getDocumentationComment(filter(this.declarations, isGetAccessor), checker); + } + if (length(this.contextualGetAccessorDocumentationComment)) { + return this.contextualGetAccessorDocumentationComment; + } + } + if (isSetAccessor(context)) { + if (!this.contextualSetAccessorDocumentationComment) { + this.contextualSetAccessorDocumentationComment = emptyArray; + this.contextualSetAccessorDocumentationComment = getDocumentationComment(filter(this.declarations, isSetAccessor), checker); + } + if (length(this.contextualSetAccessorDocumentationComment)) { + return this.contextualSetAccessorDocumentationComment; + } + } + } + return this.getDocumentationComment(checker); + } + getJsDocTags(checker) { + if (this.tags === void 0) { + this.tags = emptyArray; + this.tags = getJsDocTagsOfDeclarations(this.declarations, checker); + } + return this.tags; + } + getContextualJsDocTags(context, checker) { + if (context) { + if (isGetAccessor(context)) { + if (!this.contextualGetAccessorTags) { + this.contextualGetAccessorTags = emptyArray; + this.contextualGetAccessorTags = getJsDocTagsOfDeclarations(filter(this.declarations, isGetAccessor), checker); + } + if (length(this.contextualGetAccessorTags)) { + return this.contextualGetAccessorTags; + } + } + if (isSetAccessor(context)) { + if (!this.contextualSetAccessorTags) { + this.contextualSetAccessorTags = emptyArray; + this.contextualSetAccessorTags = getJsDocTagsOfDeclarations(filter(this.declarations, isSetAccessor), checker); + } + if (length(this.contextualSetAccessorTags)) { + return this.contextualSetAccessorTags; + } + } + } + return this.getJsDocTags(checker); + } +}; +var TokenObject = class extends TokenOrIdentifierObject { + constructor(kind, pos, end) { + super(kind, pos, end); + } +}; +var IdentifierObject = class extends TokenOrIdentifierObject { + constructor(kind, pos, end) { + super(kind, pos, end); + } + get text() { + return idText(this); + } +}; +var PrivateIdentifierObject = class extends TokenOrIdentifierObject { + constructor(kind, pos, end) { + super(kind, pos, end); + } + get text() { + return idText(this); + } +}; +var TypeObject = class { + constructor(checker, flags) { + this.flags = flags; + this.checker = checker; + } + getFlags() { + return this.flags; + } + getSymbol() { + return this.symbol; + } + getProperties() { + return this.checker.getPropertiesOfType(this); + } + getProperty(propertyName) { + return this.checker.getPropertyOfType(this, propertyName); + } + getApparentProperties() { + return this.checker.getAugmentedPropertiesOfType(this); + } + getCallSignatures() { + return this.checker.getSignaturesOfType(this, 0 /* Call */); + } + getConstructSignatures() { + return this.checker.getSignaturesOfType(this, 1 /* Construct */); + } + getStringIndexType() { + return this.checker.getIndexTypeOfType(this, 0 /* String */); + } + getNumberIndexType() { + return this.checker.getIndexTypeOfType(this, 1 /* Number */); + } + getBaseTypes() { + return this.isClassOrInterface() ? this.checker.getBaseTypes(this) : void 0; + } + isNullableType() { + return this.checker.isNullableType(this); + } + getNonNullableType() { + return this.checker.getNonNullableType(this); + } + getNonOptionalType() { + return this.checker.getNonOptionalType(this); + } + getConstraint() { + return this.checker.getBaseConstraintOfType(this); + } + getDefault() { + return this.checker.getDefaultFromTypeParameter(this); + } + isUnion() { + return !!(this.flags & 1048576 /* Union */); + } + isIntersection() { + return !!(this.flags & 2097152 /* Intersection */); + } + isUnionOrIntersection() { + return !!(this.flags & 3145728 /* UnionOrIntersection */); + } + isLiteral() { + return !!(this.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */ | 2048 /* BigIntLiteral */)); + } + isStringLiteral() { + return !!(this.flags & 128 /* StringLiteral */); + } + isNumberLiteral() { + return !!(this.flags & 256 /* NumberLiteral */); + } + isTypeParameter() { + return !!(this.flags & 262144 /* TypeParameter */); + } + isClassOrInterface() { + return !!(getObjectFlags(this) & 3 /* ClassOrInterface */); + } + isClass() { + return !!(getObjectFlags(this) & 1 /* Class */); + } + isIndexType() { + return !!(this.flags & 4194304 /* Index */); + } + /** + * This polyfills `referenceType.typeArguments` for API consumers + */ + get typeArguments() { + if (getObjectFlags(this) & 4 /* Reference */) { + return this.checker.getTypeArguments(this); + } + return void 0; + } +}; +var SignatureObject = class { + // same + constructor(checker, flags) { + this.flags = flags; + this.checker = checker; + } + getDeclaration() { + return this.declaration; + } + getTypeParameters() { + return this.typeParameters; + } + getParameters() { + return this.parameters; + } + getReturnType() { + return this.checker.getReturnTypeOfSignature(this); + } + getTypeParameterAtPosition(pos) { + const type = this.checker.getParameterType(this, pos); + if (type.isIndexType() && isThisTypeParameter(type.type)) { + const constraint = type.type.getConstraint(); + if (constraint) { + return this.checker.getIndexType(constraint); + } + } + return type; + } + getDocumentationComment() { + return this.documentationComment || (this.documentationComment = getDocumentationComment(singleElementArray(this.declaration), this.checker)); + } + getJsDocTags() { + return this.jsDocTags || (this.jsDocTags = getJsDocTagsOfDeclarations(singleElementArray(this.declaration), this.checker)); + } +}; +function hasJSDocInheritDocTag(node) { + return getJSDocTags(node).some((tag) => tag.tagName.text === "inheritDoc" || tag.tagName.text === "inheritdoc"); +} +function getJsDocTagsOfDeclarations(declarations, checker) { + if (!declarations) return emptyArray; + let tags = ts_JsDoc_exports.getJsDocTagsFromDeclarations(declarations, checker); + if (checker && (tags.length === 0 || declarations.some(hasJSDocInheritDocTag))) { + const seenSymbols = /* @__PURE__ */ new Set(); + for (const declaration of declarations) { + const inheritedTags = findBaseOfDeclaration(checker, declaration, (symbol) => { + var _a; + if (!seenSymbols.has(symbol)) { + seenSymbols.add(symbol); + if (declaration.kind === 178 /* GetAccessor */ || declaration.kind === 179 /* SetAccessor */) { + return symbol.getContextualJsDocTags(declaration, checker); + } + return ((_a = symbol.declarations) == null ? void 0 : _a.length) === 1 ? symbol.getJsDocTags(checker) : void 0; + } + }); + if (inheritedTags) { + tags = [...inheritedTags, ...tags]; + } + } + } + return tags; +} +function getDocumentationComment(declarations, checker) { + if (!declarations) return emptyArray; + let doc = ts_JsDoc_exports.getJsDocCommentsFromDeclarations(declarations, checker); + if (checker && (doc.length === 0 || declarations.some(hasJSDocInheritDocTag))) { + const seenSymbols = /* @__PURE__ */ new Set(); + for (const declaration of declarations) { + const inheritedDocs = findBaseOfDeclaration(checker, declaration, (symbol) => { + if (!seenSymbols.has(symbol)) { + seenSymbols.add(symbol); + if (declaration.kind === 178 /* GetAccessor */ || declaration.kind === 179 /* SetAccessor */) { + return symbol.getContextualDocumentationComment(declaration, checker); + } + return symbol.getDocumentationComment(checker); + } + }); + if (inheritedDocs) doc = doc.length === 0 ? inheritedDocs.slice() : inheritedDocs.concat(lineBreakPart(), doc); + } + } + return doc; +} +function findBaseOfDeclaration(checker, declaration, cb) { + var _a; + const classOrInterfaceDeclaration = ((_a = declaration.parent) == null ? void 0 : _a.kind) === 177 /* Constructor */ ? declaration.parent.parent : declaration.parent; + if (!classOrInterfaceDeclaration) return; + const isStaticMember = hasStaticModifier(declaration); + return firstDefined(getAllSuperTypeNodes(classOrInterfaceDeclaration), (superTypeNode) => { + const baseType = checker.getTypeAtLocation(superTypeNode); + const type = isStaticMember && baseType.symbol ? checker.getTypeOfSymbol(baseType.symbol) : baseType; + const symbol = checker.getPropertyOfType(type, declaration.symbol.name); + return symbol ? cb(symbol) : void 0; + }); +} +var SourceFileObject = class extends NodeObject { + constructor(kind, pos, end) { + super(kind, pos, end); + } + update(newText, textChangeRange) { + return updateSourceFile(this, newText, textChangeRange); + } + getLineAndCharacterOfPosition(position) { + return getLineAndCharacterOfPosition(this, position); + } + getLineStarts() { + return getLineStarts(this); + } + getPositionOfLineAndCharacter(line, character, allowEdits) { + return computePositionOfLineAndCharacter(getLineStarts(this), line, character, this.text, allowEdits); + } + getLineEndOfPosition(pos) { + const { line } = this.getLineAndCharacterOfPosition(pos); + const lineStarts = this.getLineStarts(); + let lastCharPos; + if (line + 1 >= lineStarts.length) { + lastCharPos = this.getEnd(); + } + if (!lastCharPos) { + lastCharPos = lineStarts[line + 1] - 1; + } + const fullText = this.getFullText(); + return fullText[lastCharPos] === "\n" && fullText[lastCharPos - 1] === "\r" ? lastCharPos - 1 : lastCharPos; + } + getNamedDeclarations() { + if (!this.namedDeclarations) { + this.namedDeclarations = this.computeNamedDeclarations(); + } + return this.namedDeclarations; + } + computeNamedDeclarations() { + const result = createMultiMap(); + this.forEachChild(visit); + return result; + function addDeclaration(declaration) { + const name = getDeclarationName(declaration); + if (name) { + result.add(name, declaration); + } + } + function getDeclarations(name) { + let declarations = result.get(name); + if (!declarations) { + result.set(name, declarations = []); + } + return declarations; + } + function getDeclarationName(declaration) { + const name = getNonAssignedNameOfDeclaration(declaration); + return name && (isComputedPropertyName(name) && isPropertyAccessExpression(name.expression) ? name.expression.name.text : isPropertyName(name) ? getNameFromPropertyName(name) : void 0); + } + function visit(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + const functionDeclaration = node; + const declarationName = getDeclarationName(functionDeclaration); + if (declarationName) { + const declarations = getDeclarations(declarationName); + const lastDeclaration = lastOrUndefined(declarations); + if (lastDeclaration && functionDeclaration.parent === lastDeclaration.parent && functionDeclaration.symbol === lastDeclaration.symbol) { + if (functionDeclaration.body && !lastDeclaration.body) { + declarations[declarations.length - 1] = functionDeclaration; + } + } else { + declarations.push(functionDeclaration); + } + } + forEachChild(node, visit); + break; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 267 /* EnumDeclaration */: + case 268 /* ModuleDeclaration */: + case 272 /* ImportEqualsDeclaration */: + case 282 /* ExportSpecifier */: + case 277 /* ImportSpecifier */: + case 274 /* ImportClause */: + case 275 /* NamespaceImport */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 188 /* TypeLiteral */: + addDeclaration(node); + forEachChild(node, visit); + break; + case 170 /* Parameter */: + if (!hasSyntacticModifier(node, 31 /* ParameterPropertyModifier */)) { + break; + } + // falls through + case 261 /* VariableDeclaration */: + case 209 /* BindingElement */: { + const decl = node; + if (isBindingPattern(decl.name)) { + forEachChild(decl.name, visit); + break; + } + if (decl.initializer) { + visit(decl.initializer); + } + } + // falls through + case 307 /* EnumMember */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + addDeclaration(node); + break; + case 279 /* ExportDeclaration */: + const exportDeclaration = node; + if (exportDeclaration.exportClause) { + if (isNamedExports(exportDeclaration.exportClause)) { + forEach(exportDeclaration.exportClause.elements, visit); + } else { + visit(exportDeclaration.exportClause.name); + } + } + break; + case 273 /* ImportDeclaration */: + const importClause = node.importClause; + if (importClause) { + if (importClause.name) { + addDeclaration(importClause.name); + } + if (importClause.namedBindings) { + if (importClause.namedBindings.kind === 275 /* NamespaceImport */) { + addDeclaration(importClause.namedBindings); + } else { + forEach(importClause.namedBindings.elements, visit); + } + } + } + break; + case 227 /* BinaryExpression */: + if (getAssignmentDeclarationKind(node) !== 0 /* None */) { + addDeclaration(node); + } + // falls through + default: + forEachChild(node, visit); + } + } + } +}; +var SourceMapSourceObject = class { + constructor(fileName, text, skipTrivia2) { + this.fileName = fileName; + this.text = text; + this.skipTrivia = skipTrivia2 || ((pos) => pos); + } + getLineAndCharacterOfPosition(pos) { + return getLineAndCharacterOfPosition(this, pos); + } +}; +function getServicesObjectAllocator() { + return { + getNodeConstructor: () => NodeObject, + getTokenConstructor: () => TokenObject, + getIdentifierConstructor: () => IdentifierObject, + getPrivateIdentifierConstructor: () => PrivateIdentifierObject, + getSourceFileConstructor: () => SourceFileObject, + getSymbolConstructor: () => SymbolObject, + getTypeConstructor: () => TypeObject, + getSignatureConstructor: () => SignatureObject, + getSourceMapSourceConstructor: () => SourceMapSourceObject + }; +} +function toEditorSettings(optionsAsMap) { + let allPropertiesAreCamelCased = true; + for (const key in optionsAsMap) { + if (hasProperty(optionsAsMap, key) && !isCamelCase(key)) { + allPropertiesAreCamelCased = false; + break; + } + } + if (allPropertiesAreCamelCased) { + return optionsAsMap; + } + const settings = {}; + for (const key in optionsAsMap) { + if (hasProperty(optionsAsMap, key)) { + const newKey = isCamelCase(key) ? key : key.charAt(0).toLowerCase() + key.substr(1); + settings[newKey] = optionsAsMap[key]; + } + } + return settings; +} +function isCamelCase(s) { + return !s.length || s.charAt(0) === s.charAt(0).toLowerCase(); +} +function displayPartsToString(displayParts) { + if (displayParts) { + return map(displayParts, (displayPart2) => displayPart2.text).join(""); + } + return ""; +} +function getDefaultCompilerOptions2() { + return { + target: 1 /* ES5 */, + jsx: 1 /* Preserve */ + }; +} +function getSupportedCodeFixes() { + return ts_codefix_exports.getSupportedErrorCodes(); +} +var SyntaxTreeCache = class { + constructor(host) { + this.host = host; + } + getCurrentSourceFile(fileName) { + var _a, _b, _c, _d, _e, _f, _g, _h; + const scriptSnapshot = this.host.getScriptSnapshot(fileName); + if (!scriptSnapshot) { + throw new Error("Could not find file: '" + fileName + "'."); + } + const scriptKind = getScriptKind(fileName, this.host); + const version2 = this.host.getScriptVersion(fileName); + let sourceFile; + if (this.currentFileName !== fileName) { + const options = { + languageVersion: 99 /* Latest */, + impliedNodeFormat: getImpliedNodeFormatForFile( + toPath(fileName, this.host.getCurrentDirectory(), ((_c = (_b = (_a = this.host).getCompilerHost) == null ? void 0 : _b.call(_a)) == null ? void 0 : _c.getCanonicalFileName) || hostGetCanonicalFileName(this.host)), + (_h = (_g = (_f = (_e = (_d = this.host).getCompilerHost) == null ? void 0 : _e.call(_d)) == null ? void 0 : _f.getModuleResolutionCache) == null ? void 0 : _g.call(_f)) == null ? void 0 : _h.getPackageJsonInfoCache(), + this.host, + this.host.getCompilationSettings() + ), + setExternalModuleIndicator: getSetExternalModuleIndicator(this.host.getCompilationSettings()), + // These files are used to produce syntax-based highlighting, which reads JSDoc, so we must use ParseAll. + jsDocParsingMode: 0 /* ParseAll */ + }; + sourceFile = createLanguageServiceSourceFile( + fileName, + scriptSnapshot, + options, + version2, + /*setNodeParents*/ + true, + scriptKind + ); + } else if (this.currentFileVersion !== version2) { + const editRange = scriptSnapshot.getChangeRange(this.currentFileScriptSnapshot); + sourceFile = updateLanguageServiceSourceFile(this.currentSourceFile, scriptSnapshot, version2, editRange); + } + if (sourceFile) { + this.currentFileVersion = version2; + this.currentFileName = fileName; + this.currentFileScriptSnapshot = scriptSnapshot; + this.currentSourceFile = sourceFile; + } + return this.currentSourceFile; + } +}; +function setSourceFileFields(sourceFile, scriptSnapshot, version2) { + sourceFile.version = version2; + sourceFile.scriptSnapshot = scriptSnapshot; +} +function createLanguageServiceSourceFile(fileName, scriptSnapshot, scriptTargetOrOptions, version2, setNodeParents, scriptKind) { + const sourceFile = createSourceFile(fileName, getSnapshotText(scriptSnapshot), scriptTargetOrOptions, setNodeParents, scriptKind); + setSourceFileFields(sourceFile, scriptSnapshot, version2); + return sourceFile; +} +function updateLanguageServiceSourceFile(sourceFile, scriptSnapshot, version2, textChangeRange, aggressiveChecks) { + if (textChangeRange) { + if (version2 !== sourceFile.version) { + let newText; + const prefix = textChangeRange.span.start !== 0 ? sourceFile.text.substr(0, textChangeRange.span.start) : ""; + const suffix = textSpanEnd(textChangeRange.span) !== sourceFile.text.length ? sourceFile.text.substr(textSpanEnd(textChangeRange.span)) : ""; + if (textChangeRange.newLength === 0) { + newText = prefix && suffix ? prefix + suffix : prefix || suffix; + } else { + const changedText = scriptSnapshot.getText(textChangeRange.span.start, textChangeRange.span.start + textChangeRange.newLength); + newText = prefix && suffix ? prefix + changedText + suffix : prefix ? prefix + changedText : changedText + suffix; + } + const newSourceFile = updateSourceFile(sourceFile, newText, textChangeRange, aggressiveChecks); + setSourceFileFields(newSourceFile, scriptSnapshot, version2); + newSourceFile.nameTable = void 0; + if (sourceFile !== newSourceFile && sourceFile.scriptSnapshot) { + if (sourceFile.scriptSnapshot.dispose) { + sourceFile.scriptSnapshot.dispose(); + } + sourceFile.scriptSnapshot = void 0; + } + return newSourceFile; + } + } + const options = { + languageVersion: sourceFile.languageVersion, + impliedNodeFormat: sourceFile.impliedNodeFormat, + setExternalModuleIndicator: sourceFile.setExternalModuleIndicator, + jsDocParsingMode: sourceFile.jsDocParsingMode + }; + return createLanguageServiceSourceFile( + sourceFile.fileName, + scriptSnapshot, + options, + version2, + /*setNodeParents*/ + true, + sourceFile.scriptKind + ); +} +var NoopCancellationToken = { + isCancellationRequested: returnFalse, + throwIfCancellationRequested: noop +}; +var CancellationTokenObject = class { + constructor(cancellationToken) { + this.cancellationToken = cancellationToken; + } + isCancellationRequested() { + return this.cancellationToken.isCancellationRequested(); + } + throwIfCancellationRequested() { + var _a; + if (this.isCancellationRequested()) { + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.Session, "cancellationThrown", { kind: "CancellationTokenObject" }); + throw new OperationCanceledException(); + } + } +}; +var ThrottledCancellationToken = class { + constructor(hostCancellationToken, throttleWaitMilliseconds = 20) { + this.hostCancellationToken = hostCancellationToken; + this.throttleWaitMilliseconds = throttleWaitMilliseconds; + // Store when we last tried to cancel. Checking cancellation can be expensive (as we have + // to marshall over to the host layer). So we only bother actually checking once enough + // time has passed. + this.lastCancellationCheckTime = 0; + } + isCancellationRequested() { + const time = timestamp(); + const duration = Math.abs(time - this.lastCancellationCheckTime); + if (duration >= this.throttleWaitMilliseconds) { + this.lastCancellationCheckTime = time; + return this.hostCancellationToken.isCancellationRequested(); + } + return false; + } + throwIfCancellationRequested() { + var _a; + if (this.isCancellationRequested()) { + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.Session, "cancellationThrown", { kind: "ThrottledCancellationToken" }); + throw new OperationCanceledException(); + } + } +}; +var invalidOperationsInPartialSemanticMode = [ + "getSemanticDiagnostics", + "getSuggestionDiagnostics", + "getCompilerOptionsDiagnostics", + "getSemanticClassifications", + "getEncodedSemanticClassifications", + "getCodeFixesAtPosition", + "getCombinedCodeFix", + "applyCodeActionCommand", + "organizeImports", + "getEditsForFileRename", + "getEmitOutput", + "getApplicableRefactors", + "getEditsForRefactor", + "prepareCallHierarchy", + "provideCallHierarchyIncomingCalls", + "provideCallHierarchyOutgoingCalls", + "provideInlayHints", + "getSupportedCodeFixes", + "getPasteEdits" +]; +var invalidOperationsInSyntacticMode = [ + ...invalidOperationsInPartialSemanticMode, + "getCompletionsAtPosition", + "getCompletionEntryDetails", + "getCompletionEntrySymbol", + "getSignatureHelpItems", + "getQuickInfoAtPosition", + "getDefinitionAtPosition", + "getDefinitionAndBoundSpan", + "getImplementationAtPosition", + "getTypeDefinitionAtPosition", + "getReferencesAtPosition", + "findReferences", + "getDocumentHighlights", + "getNavigateToItems", + "getRenameInfo", + "findRenameLocations", + "getApplicableRefactors", + "preparePasteEditsForFile" +]; +function createLanguageService(host, documentRegistry = createDocumentRegistry(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames(), host.getCurrentDirectory(), host.jsDocParsingMode), syntaxOnlyOrLanguageServiceMode) { + var _a; + let languageServiceMode; + if (syntaxOnlyOrLanguageServiceMode === void 0) { + languageServiceMode = 0 /* Semantic */; + } else if (typeof syntaxOnlyOrLanguageServiceMode === "boolean") { + languageServiceMode = syntaxOnlyOrLanguageServiceMode ? 2 /* Syntactic */ : 0 /* Semantic */; + } else { + languageServiceMode = syntaxOnlyOrLanguageServiceMode; + } + const syntaxTreeCache = new SyntaxTreeCache(host); + let program; + let lastProjectVersion; + let lastTypesRootVersion = 0; + const cancellationToken = host.getCancellationToken ? new CancellationTokenObject(host.getCancellationToken()) : NoopCancellationToken; + const currentDirectory = host.getCurrentDirectory(); + maybeSetLocalizedDiagnosticMessages((_a = host.getLocalizedDiagnosticMessages) == null ? void 0 : _a.bind(host)); + function log(message) { + if (host.log) { + host.log(message); + } + } + const useCaseSensitiveFileNames2 = hostUsesCaseSensitiveFileNames(host); + const getCanonicalFileName = createGetCanonicalFileName(useCaseSensitiveFileNames2); + const sourceMapper = getSourceMapper({ + useCaseSensitiveFileNames: () => useCaseSensitiveFileNames2, + getCurrentDirectory: () => currentDirectory, + getProgram, + fileExists: maybeBind(host, host.fileExists), + readFile: maybeBind(host, host.readFile), + getDocumentPositionMapper: maybeBind(host, host.getDocumentPositionMapper), + getSourceFileLike: maybeBind(host, host.getSourceFileLike), + log + }); + function getValidSourceFile(fileName) { + const sourceFile = program.getSourceFile(fileName); + if (!sourceFile) { + const error2 = new Error(`Could not find source file: '${fileName}'.`); + error2.ProgramFiles = program.getSourceFiles().map((f) => f.fileName); + throw error2; + } + return sourceFile; + } + function synchronizeHostData() { + if (host.updateFromProject && !host.updateFromProjectInProgress) { + host.updateFromProject(); + } else { + synchronizeHostDataWorker(); + } + } + function synchronizeHostDataWorker() { + var _a2, _b, _c; + Debug.assert(languageServiceMode !== 2 /* Syntactic */); + if (host.getProjectVersion) { + const hostProjectVersion = host.getProjectVersion(); + if (hostProjectVersion) { + if (lastProjectVersion === hostProjectVersion && !((_a2 = host.hasChangedAutomaticTypeDirectiveNames) == null ? void 0 : _a2.call(host))) { + return; + } + lastProjectVersion = hostProjectVersion; + } + } + const typeRootsVersion = host.getTypeRootsVersion ? host.getTypeRootsVersion() : 0; + if (lastTypesRootVersion !== typeRootsVersion) { + log("TypeRoots version has changed; provide new program"); + program = void 0; + lastTypesRootVersion = typeRootsVersion; + } + const rootFileNames = host.getScriptFileNames().slice(); + const newSettings = host.getCompilationSettings() || getDefaultCompilerOptions2(); + const hasInvalidatedResolutions = host.hasInvalidatedResolutions || returnFalse; + const hasInvalidatedLibResolutions = maybeBind(host, host.hasInvalidatedLibResolutions) || returnFalse; + const hasChangedAutomaticTypeDirectiveNames = maybeBind(host, host.hasChangedAutomaticTypeDirectiveNames); + const projectReferences = (_b = host.getProjectReferences) == null ? void 0 : _b.call(host); + let parsedCommandLines; + let compilerHost = { + getSourceFile: getOrCreateSourceFile, + getSourceFileByPath: getOrCreateSourceFileByPath, + getCancellationToken: () => cancellationToken, + getCanonicalFileName, + useCaseSensitiveFileNames: () => useCaseSensitiveFileNames2, + getNewLine: () => getNewLineCharacter(newSettings), + getDefaultLibFileName: (options2) => host.getDefaultLibFileName(options2), + writeFile: noop, + getCurrentDirectory: () => currentDirectory, + fileExists: (fileName) => host.fileExists(fileName), + readFile: (fileName) => host.readFile && host.readFile(fileName), + getSymlinkCache: maybeBind(host, host.getSymlinkCache), + realpath: maybeBind(host, host.realpath), + directoryExists: (directoryName) => { + return directoryProbablyExists(directoryName, host); + }, + getDirectories: (path) => { + return host.getDirectories ? host.getDirectories(path) : []; + }, + readDirectory: (path, extensions, exclude, include, depth) => { + Debug.checkDefined(host.readDirectory, "'LanguageServiceHost.readDirectory' must be implemented to correctly process 'projectReferences'"); + return host.readDirectory(path, extensions, exclude, include, depth); + }, + onReleaseOldSourceFile, + onReleaseParsedCommandLine, + hasInvalidatedResolutions, + hasInvalidatedLibResolutions, + hasChangedAutomaticTypeDirectiveNames, + trace: maybeBind(host, host.trace), + resolveModuleNames: maybeBind(host, host.resolveModuleNames), + getModuleResolutionCache: maybeBind(host, host.getModuleResolutionCache), + createHash: maybeBind(host, host.createHash), + resolveTypeReferenceDirectives: maybeBind(host, host.resolveTypeReferenceDirectives), + resolveModuleNameLiterals: maybeBind(host, host.resolveModuleNameLiterals), + resolveTypeReferenceDirectiveReferences: maybeBind(host, host.resolveTypeReferenceDirectiveReferences), + resolveLibrary: maybeBind(host, host.resolveLibrary), + useSourceOfProjectReferenceRedirect: maybeBind(host, host.useSourceOfProjectReferenceRedirect), + getParsedCommandLine, + jsDocParsingMode: host.jsDocParsingMode, + getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation) + }; + const originalGetSourceFile = compilerHost.getSourceFile; + const { getSourceFileWithCache } = changeCompilerHostLikeToUseCache( + compilerHost, + (fileName) => toPath(fileName, currentDirectory, getCanonicalFileName), + (...args) => originalGetSourceFile.call(compilerHost, ...args) + ); + compilerHost.getSourceFile = getSourceFileWithCache; + (_c = host.setCompilerHost) == null ? void 0 : _c.call(host, compilerHost); + const parseConfigHost = { + useCaseSensitiveFileNames: useCaseSensitiveFileNames2, + fileExists: (fileName) => compilerHost.fileExists(fileName), + readFile: (fileName) => compilerHost.readFile(fileName), + directoryExists: (f) => compilerHost.directoryExists(f), + getDirectories: (f) => compilerHost.getDirectories(f), + realpath: compilerHost.realpath, + readDirectory: (...args) => compilerHost.readDirectory(...args), + trace: compilerHost.trace, + getCurrentDirectory: compilerHost.getCurrentDirectory, + onUnRecoverableConfigFileDiagnostic: noop + }; + const documentRegistryBucketKey = documentRegistry.getKeyForCompilationSettings(newSettings); + let releasedScriptKinds = /* @__PURE__ */ new Set(); + if (isProgramUptoDate(program, rootFileNames, newSettings, (_path, fileName) => host.getScriptVersion(fileName), (fileName) => compilerHost.fileExists(fileName), hasInvalidatedResolutions, hasInvalidatedLibResolutions, hasChangedAutomaticTypeDirectiveNames, getParsedCommandLine, projectReferences)) { + compilerHost = void 0; + parsedCommandLines = void 0; + releasedScriptKinds = void 0; + return; + } + const options = { + rootNames: rootFileNames, + options: newSettings, + host: compilerHost, + oldProgram: program, + projectReferences + }; + program = createProgram(options); + compilerHost = void 0; + parsedCommandLines = void 0; + releasedScriptKinds = void 0; + sourceMapper.clearCache(); + program.getTypeChecker(); + return; + function getParsedCommandLine(fileName) { + const path = toPath(fileName, currentDirectory, getCanonicalFileName); + const existing = parsedCommandLines == null ? void 0 : parsedCommandLines.get(path); + if (existing !== void 0) return existing || void 0; + const result = host.getParsedCommandLine ? host.getParsedCommandLine(fileName) : getParsedCommandLineOfConfigFileUsingSourceFile(fileName); + (parsedCommandLines || (parsedCommandLines = /* @__PURE__ */ new Map())).set(path, result || false); + return result; + } + function getParsedCommandLineOfConfigFileUsingSourceFile(configFileName) { + const result = getOrCreateSourceFile(configFileName, 100 /* JSON */); + if (!result) return void 0; + result.path = toPath(configFileName, currentDirectory, getCanonicalFileName); + result.resolvedPath = result.path; + result.originalFileName = result.fileName; + return parseJsonSourceFileConfigFileContent( + result, + parseConfigHost, + getNormalizedAbsolutePath(getDirectoryPath(configFileName), currentDirectory), + /*existingOptions*/ + void 0, + getNormalizedAbsolutePath(configFileName, currentDirectory) + ); + } + function onReleaseParsedCommandLine(configFileName, oldResolvedRef, oldOptions) { + var _a3; + if (host.getParsedCommandLine) { + (_a3 = host.onReleaseParsedCommandLine) == null ? void 0 : _a3.call(host, configFileName, oldResolvedRef, oldOptions); + } else if (oldResolvedRef) { + releaseOldSourceFile(oldResolvedRef.sourceFile, oldOptions); + } + } + function releaseOldSourceFile(oldSourceFile, oldOptions) { + const oldSettingsKey = documentRegistry.getKeyForCompilationSettings(oldOptions); + documentRegistry.releaseDocumentWithKey(oldSourceFile.resolvedPath, oldSettingsKey, oldSourceFile.scriptKind, oldSourceFile.impliedNodeFormat); + } + function onReleaseOldSourceFile(oldSourceFile, oldOptions, hasSourceFileByPath, newSourceFileByResolvedPath) { + var _a3; + releaseOldSourceFile(oldSourceFile, oldOptions); + (_a3 = host.onReleaseOldSourceFile) == null ? void 0 : _a3.call(host, oldSourceFile, oldOptions, hasSourceFileByPath, newSourceFileByResolvedPath); + } + function getOrCreateSourceFile(fileName, languageVersionOrOptions, onError, shouldCreateNewSourceFile) { + return getOrCreateSourceFileByPath(fileName, toPath(fileName, currentDirectory, getCanonicalFileName), languageVersionOrOptions, onError, shouldCreateNewSourceFile); + } + function getOrCreateSourceFileByPath(fileName, path, languageVersionOrOptions, _onError, shouldCreateNewSourceFile) { + Debug.assert(compilerHost, "getOrCreateSourceFileByPath called after typical CompilerHost lifetime, check the callstack something with a reference to an old host."); + const scriptSnapshot = host.getScriptSnapshot(fileName); + if (!scriptSnapshot) { + return void 0; + } + const scriptKind = getScriptKind(fileName, host); + const scriptVersion = host.getScriptVersion(fileName); + if (!shouldCreateNewSourceFile) { + const oldSourceFile = program && program.getSourceFileByPath(path); + if (oldSourceFile) { + if (scriptKind === oldSourceFile.scriptKind || releasedScriptKinds.has(oldSourceFile.resolvedPath)) { + return documentRegistry.updateDocumentWithKey(fileName, path, host, documentRegistryBucketKey, scriptSnapshot, scriptVersion, scriptKind, languageVersionOrOptions); + } else { + documentRegistry.releaseDocumentWithKey(oldSourceFile.resolvedPath, documentRegistry.getKeyForCompilationSettings(program.getCompilerOptions()), oldSourceFile.scriptKind, oldSourceFile.impliedNodeFormat); + releasedScriptKinds.add(oldSourceFile.resolvedPath); + } + } + } + return documentRegistry.acquireDocumentWithKey(fileName, path, host, documentRegistryBucketKey, scriptSnapshot, scriptVersion, scriptKind, languageVersionOrOptions); + } + } + function getProgram() { + if (languageServiceMode === 2 /* Syntactic */) { + Debug.assert(program === void 0); + return void 0; + } + synchronizeHostData(); + return program; + } + function getAutoImportProvider() { + var _a2; + return (_a2 = host.getPackageJsonAutoImportProvider) == null ? void 0 : _a2.call(host); + } + function updateIsDefinitionOfReferencedSymbols(referencedSymbols, knownSymbolSpans) { + const checker = program.getTypeChecker(); + const symbol = getSymbolForProgram(); + if (!symbol) return false; + for (const referencedSymbol of referencedSymbols) { + for (const ref of referencedSymbol.references) { + const refNode = getNodeForSpan(ref); + Debug.assertIsDefined(refNode); + if (knownSymbolSpans.has(ref) || ts_FindAllReferences_exports.isDeclarationOfSymbol(refNode, symbol)) { + knownSymbolSpans.add(ref); + ref.isDefinition = true; + const mappedSpan = getMappedDocumentSpan(ref, sourceMapper, maybeBind(host, host.fileExists)); + if (mappedSpan) { + knownSymbolSpans.add(mappedSpan); + } + } else { + ref.isDefinition = false; + } + } + } + return true; + function getSymbolForProgram() { + for (const referencedSymbol of referencedSymbols) { + for (const ref of referencedSymbol.references) { + if (knownSymbolSpans.has(ref)) { + const refNode = getNodeForSpan(ref); + Debug.assertIsDefined(refNode); + return checker.getSymbolAtLocation(refNode); + } + const mappedSpan = getMappedDocumentSpan(ref, sourceMapper, maybeBind(host, host.fileExists)); + if (mappedSpan && knownSymbolSpans.has(mappedSpan)) { + const refNode = getNodeForSpan(mappedSpan); + if (refNode) { + return checker.getSymbolAtLocation(refNode); + } + } + } + } + return void 0; + } + function getNodeForSpan(docSpan) { + const sourceFile = program.getSourceFile(docSpan.fileName); + if (!sourceFile) return void 0; + const rawNode = getTouchingPropertyName(sourceFile, docSpan.textSpan.start); + const adjustedNode = ts_FindAllReferences_exports.Core.getAdjustedNode(rawNode, { use: ts_FindAllReferences_exports.FindReferencesUse.References }); + return adjustedNode; + } + } + function cleanupSemanticCache() { + if (program) { + const key = documentRegistry.getKeyForCompilationSettings(program.getCompilerOptions()); + forEach(program.getSourceFiles(), (f) => documentRegistry.releaseDocumentWithKey(f.resolvedPath, key, f.scriptKind, f.impliedNodeFormat)); + program = void 0; + } + } + function dispose() { + cleanupSemanticCache(); + host = void 0; + } + function getSyntacticDiagnostics(fileName) { + synchronizeHostData(); + return program.getSyntacticDiagnostics(getValidSourceFile(fileName), cancellationToken).slice(); + } + function getSemanticDiagnostics(fileName) { + synchronizeHostData(); + const targetSourceFile = getValidSourceFile(fileName); + const semanticDiagnostics = program.getSemanticDiagnostics(targetSourceFile, cancellationToken); + if (!getEmitDeclarations(program.getCompilerOptions())) { + return semanticDiagnostics.slice(); + } + const declarationDiagnostics = program.getDeclarationDiagnostics(targetSourceFile, cancellationToken); + return [...semanticDiagnostics, ...declarationDiagnostics]; + } + function getRegionSemanticDiagnostics(fileName, ranges) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const options = program.getCompilerOptions(); + if (skipTypeChecking(sourceFile, options, program) || !canIncludeBindAndCheckDiagnostics(sourceFile, options) || program.getCachedSemanticDiagnostics(sourceFile)) { + return void 0; + } + const nodes = getNodesForRanges(sourceFile, ranges); + if (!nodes) { + return void 0; + } + const checkedSpans = normalizeSpans(nodes.map((node) => createTextSpanFromBounds(node.getFullStart(), node.getEnd()))); + const semanticDiagnostics = program.getSemanticDiagnostics(sourceFile, cancellationToken, nodes); + return { + diagnostics: semanticDiagnostics.slice(), + spans: checkedSpans + }; + } + function getNodesForRanges(file, ranges) { + const nodes = []; + const spans = normalizeSpans(ranges.map((range) => createTextSpanFromRange(range))); + for (const span of spans) { + const nodesForSpan = getNodesForSpan(file, span); + if (!nodesForSpan) { + return void 0; + } + nodes.push(...nodesForSpan); + } + if (!nodes.length) { + return void 0; + } + return nodes; + } + function getNodesForSpan(file, span) { + if (textSpanContainsTextRange(span, file)) { + return void 0; + } + const endToken = findTokenOnLeftOfPosition(file, textSpanEnd(span)) || file; + const enclosingNode = findAncestor(endToken, (node) => textRangeContainsTextSpan(node, span)); + const nodes = []; + chooseOverlappingNodes(span, enclosingNode, nodes); + if (file.end === span.start + span.length) { + nodes.push(file.endOfFileToken); + } + if (some(nodes, isSourceFile)) { + return void 0; + } + return nodes; + } + function chooseOverlappingNodes(span, node, result) { + if (!nodeOverlapsWithSpan(node, span)) { + return false; + } + if (textSpanContainsTextRange(span, node)) { + addSourceElement(node, result); + return true; + } + if (isBlockLike(node)) { + return chooseOverlappingBlockLike(span, node, result); + } + if (isClassLike(node)) { + return chooseOverlappingClassLike(span, node, result); + } + addSourceElement(node, result); + return true; + } + function nodeOverlapsWithSpan(node, span) { + const spanEnd = span.start + span.length; + return node.pos < spanEnd && node.end > span.start; + } + function addSourceElement(node, result) { + while (node.parent && !isSourceElement(node)) { + node = node.parent; + } + result.push(node); + } + function chooseOverlappingBlockLike(span, node, result) { + const childResult = []; + const stmts = node.statements.filter((stmt) => chooseOverlappingNodes(span, stmt, childResult)); + if (stmts.length === node.statements.length) { + addSourceElement(node, result); + return true; + } + result.push(...childResult); + return false; + } + function chooseOverlappingClassLike(span, node, result) { + var _a2, _b, _c; + const overlaps = (n) => textRangeIntersectsWithTextSpan(n, span); + if (((_a2 = node.modifiers) == null ? void 0 : _a2.some(overlaps)) || node.name && overlaps(node.name) || ((_b = node.typeParameters) == null ? void 0 : _b.some(overlaps)) || ((_c = node.heritageClauses) == null ? void 0 : _c.some(overlaps))) { + addSourceElement(node, result); + return true; + } + const childResult = []; + const members = node.members.filter((member) => chooseOverlappingNodes(span, member, childResult)); + if (members.length === node.members.length) { + addSourceElement(node, result); + return true; + } + result.push(...childResult); + return false; + } + function getSuggestionDiagnostics(fileName) { + synchronizeHostData(); + return computeSuggestionDiagnostics(getValidSourceFile(fileName), program, cancellationToken); + } + function getCompilerOptionsDiagnostics() { + synchronizeHostData(); + return [...program.getOptionsDiagnostics(cancellationToken), ...program.getGlobalDiagnostics(cancellationToken)]; + } + function getCompletionsAtPosition2(fileName, position, options = emptyOptions, formattingSettings) { + const fullPreferences = { + ...identity(options), + // avoid excess property check + includeCompletionsForModuleExports: options.includeCompletionsForModuleExports || options.includeExternalModuleExports, + includeCompletionsWithInsertText: options.includeCompletionsWithInsertText || options.includeInsertTextCompletions + }; + synchronizeHostData(); + return ts_Completions_exports.getCompletionsAtPosition( + host, + program, + log, + getValidSourceFile(fileName), + position, + fullPreferences, + options.triggerCharacter, + options.triggerKind, + cancellationToken, + formattingSettings && ts_formatting_exports.getFormatContext(formattingSettings, host), + options.includeSymbol + ); + } + function getCompletionEntryDetails2(fileName, position, name, formattingOptions, source, preferences = emptyOptions, data) { + synchronizeHostData(); + return ts_Completions_exports.getCompletionEntryDetails( + program, + log, + getValidSourceFile(fileName), + position, + { name, source, data }, + host, + formattingOptions && ts_formatting_exports.getFormatContext(formattingOptions, host), + // TODO: GH#18217 + preferences, + cancellationToken + ); + } + function getCompletionEntrySymbol2(fileName, position, name, source, preferences = emptyOptions) { + synchronizeHostData(); + return ts_Completions_exports.getCompletionEntrySymbol(program, log, getValidSourceFile(fileName), position, { name, source }, host, preferences); + } + function getQuickInfoAtPosition(fileName, position, maximumLength, verbosityLevel) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const node = getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return void 0; + } + const typeChecker = program.getTypeChecker(); + const nodeForQuickInfo = getNodeForQuickInfo(node); + const symbol = getSymbolAtLocationForQuickInfo(nodeForQuickInfo, typeChecker); + if (!symbol || typeChecker.isUnknownSymbol(symbol)) { + const type = shouldGetType(sourceFile, nodeForQuickInfo, position) ? typeChecker.getTypeAtLocation(nodeForQuickInfo) : void 0; + return type && { + kind: "" /* unknown */, + kindModifiers: "" /* none */, + textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile), + displayParts: typeChecker.runWithCancellationToken(cancellationToken, (typeChecker2) => typeToDisplayParts( + typeChecker2, + type, + getContainerNode(nodeForQuickInfo), + /*flags*/ + void 0, + verbosityLevel + )), + documentation: type.symbol ? type.symbol.getDocumentationComment(typeChecker) : void 0, + tags: type.symbol ? type.symbol.getJsDocTags(typeChecker) : void 0 + }; + } + const { symbolKind, displayParts, documentation, tags, canIncreaseVerbosityLevel } = typeChecker.runWithCancellationToken( + cancellationToken, + (typeChecker2) => ts_SymbolDisplay_exports.getSymbolDisplayPartsDocumentationAndSymbolKind( + typeChecker2, + symbol, + sourceFile, + getContainerNode(nodeForQuickInfo), + nodeForQuickInfo, + /*semanticMeaning*/ + void 0, + /*alias*/ + void 0, + maximumLength ?? defaultHoverMaximumTruncationLength, + verbosityLevel + ) + ); + return { + kind: symbolKind, + kindModifiers: ts_SymbolDisplay_exports.getSymbolModifiers(typeChecker, symbol), + textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile), + displayParts, + documentation, + tags, + canIncreaseVerbosityLevel + }; + } + function preparePasteEditsForFile(fileName, copiedTextRange) { + synchronizeHostData(); + return ts_preparePasteEdits_exports.preparePasteEdits( + getValidSourceFile(fileName), + copiedTextRange, + program.getTypeChecker() + ); + } + function getPasteEdits(args, formatOptions) { + synchronizeHostData(); + return ts_PasteEdits_exports.pasteEditsProvider( + getValidSourceFile(args.targetFile), + args.pastedText, + args.pasteLocations, + args.copiedFrom ? { file: getValidSourceFile(args.copiedFrom.file), range: args.copiedFrom.range } : void 0, + host, + args.preferences, + ts_formatting_exports.getFormatContext(formatOptions, host), + cancellationToken + ); + } + function getNodeForQuickInfo(node) { + if (isNewExpression(node.parent) && node.pos === node.parent.pos) { + return node.parent.expression; + } + if (isNamedTupleMember(node.parent) && node.pos === node.parent.pos) { + return node.parent; + } + if (isImportMeta(node.parent) && node.parent.name === node) { + return node.parent; + } + if (isJsxNamespacedName(node.parent)) { + return node.parent; + } + return node; + } + function shouldGetType(sourceFile, node, position) { + switch (node.kind) { + case 80 /* Identifier */: + if (node.flags & 16777216 /* JSDoc */ && !isInJSFile(node) && (node.parent.kind === 172 /* PropertySignature */ && node.parent.name === node || findAncestor(node, (n) => n.kind === 170 /* Parameter */))) { + return false; + } + return !isLabelName(node) && !isTagName(node) && !isConstTypeReference(node.parent); + case 212 /* PropertyAccessExpression */: + case 167 /* QualifiedName */: + return !isInComment(sourceFile, position); + case 110 /* ThisKeyword */: + case 198 /* ThisType */: + case 108 /* SuperKeyword */: + case 203 /* NamedTupleMember */: + return true; + case 237 /* MetaProperty */: + return isImportMeta(node); + default: + return false; + } + } + function getDefinitionAtPosition2(fileName, position, searchOtherFilesOnly, stopAtAlias) { + synchronizeHostData(); + return ts_GoToDefinition_exports.getDefinitionAtPosition(program, getValidSourceFile(fileName), position, searchOtherFilesOnly, stopAtAlias); + } + function getDefinitionAndBoundSpan2(fileName, position) { + synchronizeHostData(); + return ts_GoToDefinition_exports.getDefinitionAndBoundSpan(program, getValidSourceFile(fileName), position); + } + function getTypeDefinitionAtPosition2(fileName, position) { + synchronizeHostData(); + return ts_GoToDefinition_exports.getTypeDefinitionAtPosition(program.getTypeChecker(), getValidSourceFile(fileName), position); + } + function getImplementationAtPosition(fileName, position) { + synchronizeHostData(); + return ts_FindAllReferences_exports.getImplementationsAtPosition(program, cancellationToken, program.getSourceFiles(), getValidSourceFile(fileName), position); + } + function getDocumentHighlights(fileName, position, filesToSearch) { + const normalizedFileName = normalizePath(fileName); + Debug.assert(filesToSearch.some((f) => normalizePath(f) === normalizedFileName)); + synchronizeHostData(); + const sourceFilesToSearch = mapDefined(filesToSearch, (fileName2) => program.getSourceFile(fileName2)); + const sourceFile = getValidSourceFile(fileName); + return DocumentHighlights.getDocumentHighlights(program, cancellationToken, sourceFile, position, sourceFilesToSearch); + } + function findRenameLocations(fileName, position, findInStrings, findInComments, preferences) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const node = getAdjustedRenameLocation(getTouchingPropertyName(sourceFile, position)); + if (!ts_Rename_exports.nodeIsEligibleForRename(node)) return void 0; + if (isIdentifier(node) && (isJsxOpeningElement(node.parent) || isJsxClosingElement(node.parent)) && isIntrinsicJsxName(node.escapedText)) { + const { openingElement, closingElement } = node.parent.parent; + return [openingElement, closingElement].map((node2) => { + const textSpan = createTextSpanFromNode(node2.tagName, sourceFile); + return { + fileName: sourceFile.fileName, + textSpan, + ...ts_FindAllReferences_exports.toContextSpan(textSpan, sourceFile, node2.parent) + }; + }); + } else { + const quotePreference = getQuotePreference(sourceFile, preferences ?? emptyOptions); + const providePrefixAndSuffixTextForRename = typeof preferences === "boolean" ? preferences : preferences == null ? void 0 : preferences.providePrefixAndSuffixTextForRename; + return getReferencesWorker2(node, position, { findInStrings, findInComments, providePrefixAndSuffixTextForRename, use: ts_FindAllReferences_exports.FindReferencesUse.Rename }, (entry, originalNode, checker) => ts_FindAllReferences_exports.toRenameLocation(entry, originalNode, checker, providePrefixAndSuffixTextForRename || false, quotePreference)); + } + } + function getReferencesAtPosition(fileName, position) { + synchronizeHostData(); + return getReferencesWorker2(getTouchingPropertyName(getValidSourceFile(fileName), position), position, { use: ts_FindAllReferences_exports.FindReferencesUse.References }, ts_FindAllReferences_exports.toReferenceEntry); + } + function getReferencesWorker2(node, position, options, cb) { + synchronizeHostData(); + const sourceFiles = options && options.use === ts_FindAllReferences_exports.FindReferencesUse.Rename ? program.getSourceFiles().filter((sourceFile) => !program.isSourceFileDefaultLibrary(sourceFile)) : program.getSourceFiles(); + return ts_FindAllReferences_exports.findReferenceOrRenameEntries(program, cancellationToken, sourceFiles, node, position, options, cb); + } + function findReferences(fileName, position) { + synchronizeHostData(); + return ts_FindAllReferences_exports.findReferencedSymbols(program, cancellationToken, program.getSourceFiles(), getValidSourceFile(fileName), position); + } + function getFileReferences(fileName) { + synchronizeHostData(); + return ts_FindAllReferences_exports.Core.getReferencesForFileName(fileName, program, program.getSourceFiles()).map(ts_FindAllReferences_exports.toReferenceEntry); + } + function getNavigateToItems2(searchValue, maxResultCount, fileName, excludeDtsFiles = false, excludeLibFiles = false) { + synchronizeHostData(); + const sourceFiles = fileName ? [getValidSourceFile(fileName)] : program.getSourceFiles(); + return getNavigateToItems(sourceFiles, program.getTypeChecker(), cancellationToken, searchValue, maxResultCount, excludeDtsFiles, excludeLibFiles); + } + function getEmitOutput(fileName, emitOnlyDtsFiles, forceDtsEmit) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const customTransformers = host.getCustomTransformers && host.getCustomTransformers(); + return getFileEmitOutput(program, sourceFile, !!emitOnlyDtsFiles, cancellationToken, customTransformers, forceDtsEmit); + } + function getSignatureHelpItems2(fileName, position, { triggerReason } = emptyOptions) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + return ts_SignatureHelp_exports.getSignatureHelpItems(program, sourceFile, position, triggerReason, cancellationToken); + } + function getNonBoundSourceFile(fileName) { + return syntaxTreeCache.getCurrentSourceFile(fileName); + } + function getNameOrDottedNameSpan(fileName, startPos, _endPos) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const node = getTouchingPropertyName(sourceFile, startPos); + if (node === sourceFile) { + return void 0; + } + switch (node.kind) { + case 212 /* PropertyAccessExpression */: + case 167 /* QualifiedName */: + case 11 /* StringLiteral */: + case 97 /* FalseKeyword */: + case 112 /* TrueKeyword */: + case 106 /* NullKeyword */: + case 108 /* SuperKeyword */: + case 110 /* ThisKeyword */: + case 198 /* ThisType */: + case 80 /* Identifier */: + break; + // Cant create the text span + default: + return void 0; + } + let nodeForStartPos = node; + while (true) { + if (isRightSideOfPropertyAccess(nodeForStartPos) || isRightSideOfQualifiedName(nodeForStartPos)) { + nodeForStartPos = nodeForStartPos.parent; + } else if (isNameOfModuleDeclaration(nodeForStartPos)) { + if (nodeForStartPos.parent.parent.kind === 268 /* ModuleDeclaration */ && nodeForStartPos.parent.parent.body === nodeForStartPos.parent) { + nodeForStartPos = nodeForStartPos.parent.parent.name; + } else { + break; + } + } else { + break; + } + } + return createTextSpanFromBounds(nodeForStartPos.getStart(), node.getEnd()); + } + function getBreakpointStatementAtPosition(fileName, position) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts_BreakpointResolver_exports.spanInSourceFileAtLocation(sourceFile, position); + } + function getNavigationBarItems2(fileName) { + return getNavigationBarItems(syntaxTreeCache.getCurrentSourceFile(fileName), cancellationToken); + } + function getNavigationTree2(fileName) { + return getNavigationTree(syntaxTreeCache.getCurrentSourceFile(fileName), cancellationToken); + } + function getSemanticClassifications3(fileName, span, format) { + synchronizeHostData(); + const responseFormat = format || "original" /* Original */; + if (responseFormat === "2020" /* TwentyTwenty */) { + return getSemanticClassifications2(program, cancellationToken, getValidSourceFile(fileName), span); + } else { + return getSemanticClassifications(program.getTypeChecker(), cancellationToken, getValidSourceFile(fileName), program.getClassifiableNames(), span); + } + } + function getEncodedSemanticClassifications3(fileName, span, format) { + synchronizeHostData(); + const responseFormat = format || "original" /* Original */; + if (responseFormat === "original" /* Original */) { + return getEncodedSemanticClassifications(program.getTypeChecker(), cancellationToken, getValidSourceFile(fileName), program.getClassifiableNames(), span); + } else { + return getEncodedSemanticClassifications2(program, cancellationToken, getValidSourceFile(fileName), span); + } + } + function getSyntacticClassifications2(fileName, span) { + return getSyntacticClassifications(cancellationToken, syntaxTreeCache.getCurrentSourceFile(fileName), span); + } + function getEncodedSyntacticClassifications2(fileName, span) { + return getEncodedSyntacticClassifications(cancellationToken, syntaxTreeCache.getCurrentSourceFile(fileName), span); + } + function getOutliningSpans(fileName) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts_OutliningElementsCollector_exports.collectElements(sourceFile, cancellationToken); + } + const braceMatching = new Map(Object.entries({ + [19 /* OpenBraceToken */]: 20 /* CloseBraceToken */, + [21 /* OpenParenToken */]: 22 /* CloseParenToken */, + [23 /* OpenBracketToken */]: 24 /* CloseBracketToken */, + [32 /* GreaterThanToken */]: 30 /* LessThanToken */ + })); + braceMatching.forEach((value, key) => braceMatching.set(value.toString(), Number(key))); + function getBraceMatchingAtPosition(fileName, position) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const token = getTouchingToken(sourceFile, position); + const matchKind = token.getStart(sourceFile) === position ? braceMatching.get(token.kind.toString()) : void 0; + const match = matchKind && findChildOfKind(token.parent, matchKind, sourceFile); + return match ? [createTextSpanFromNode(token, sourceFile), createTextSpanFromNode(match, sourceFile)].sort((a, b) => a.start - b.start) : emptyArray; + } + function getIndentationAtPosition(fileName, position, editorOptions) { + let start = timestamp(); + const settings = toEditorSettings(editorOptions); + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + log("getIndentationAtPosition: getCurrentSourceFile: " + (timestamp() - start)); + start = timestamp(); + const result = ts_formatting_exports.SmartIndenter.getIndentation(position, sourceFile, settings); + log("getIndentationAtPosition: computeIndentation : " + (timestamp() - start)); + return result; + } + function getFormattingEditsForRange(fileName, start, end, options) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + return ts_formatting_exports.formatSelection(start, end, sourceFile, ts_formatting_exports.getFormatContext(toEditorSettings(options), host)); + } + function getFormattingEditsForDocument(fileName, options) { + return ts_formatting_exports.formatDocument(syntaxTreeCache.getCurrentSourceFile(fileName), ts_formatting_exports.getFormatContext(toEditorSettings(options), host)); + } + function getFormattingEditsAfterKeystroke(fileName, position, key, options) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const formatContext = ts_formatting_exports.getFormatContext(toEditorSettings(options), host); + if (!isInComment(sourceFile, position)) { + switch (key) { + case "{": + return ts_formatting_exports.formatOnOpeningCurly(position, sourceFile, formatContext); + case "}": + return ts_formatting_exports.formatOnClosingCurly(position, sourceFile, formatContext); + case ";": + return ts_formatting_exports.formatOnSemicolon(position, sourceFile, formatContext); + case "\n": + return ts_formatting_exports.formatOnEnter(position, sourceFile, formatContext); + } + } + return []; + } + function getCodeFixesAtPosition(fileName, start, end, errorCodes68, formatOptions, preferences = emptyOptions) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const span = createTextSpanFromBounds(start, end); + const formatContext = ts_formatting_exports.getFormatContext(formatOptions, host); + return flatMap(deduplicate(errorCodes68, equateValues, compareValues), (errorCode) => { + cancellationToken.throwIfCancellationRequested(); + return ts_codefix_exports.getFixes({ errorCode, sourceFile, span, program, host, cancellationToken, formatContext, preferences }); + }); + } + function getCombinedCodeFix(scope, fixId56, formatOptions, preferences = emptyOptions) { + synchronizeHostData(); + Debug.assert(scope.type === "file"); + const sourceFile = getValidSourceFile(scope.fileName); + const formatContext = ts_formatting_exports.getFormatContext(formatOptions, host); + return ts_codefix_exports.getAllFixes({ fixId: fixId56, sourceFile, program, host, cancellationToken, formatContext, preferences }); + } + function organizeImports2(args, formatOptions, preferences = emptyOptions) { + synchronizeHostData(); + Debug.assert(args.type === "file"); + const sourceFile = getValidSourceFile(args.fileName); + if (containsParseError(sourceFile)) return emptyArray; + const formatContext = ts_formatting_exports.getFormatContext(formatOptions, host); + const mode = args.mode ?? (args.skipDestructiveCodeActions ? "SortAndCombine" /* SortAndCombine */ : "All" /* All */); + return ts_OrganizeImports_exports.organizeImports(sourceFile, formatContext, host, program, preferences, mode); + } + function getEditsForFileRename2(oldFilePath, newFilePath, formatOptions, preferences = emptyOptions) { + return getEditsForFileRename(getProgram(), oldFilePath, newFilePath, host, ts_formatting_exports.getFormatContext(formatOptions, host), preferences, sourceMapper); + } + function applyCodeActionCommand(fileName, actionOrFormatSettingsOrUndefined) { + const action = typeof fileName === "string" ? actionOrFormatSettingsOrUndefined : fileName; + return isArray(action) ? Promise.all(action.map((a) => applySingleCodeActionCommand(a))) : applySingleCodeActionCommand(action); + } + function applySingleCodeActionCommand(action) { + const getPath = (path) => toPath(path, currentDirectory, getCanonicalFileName); + Debug.assertEqual(action.type, "install package"); + return host.installPackage ? host.installPackage({ fileName: getPath(action.file), packageName: action.packageName }) : Promise.reject("Host does not implement `installPackage`"); + } + function getDocCommentTemplateAtPosition2(fileName, position, options, formatOptions) { + const formatSettings = formatOptions ? ts_formatting_exports.getFormatContext(formatOptions, host).options : void 0; + return ts_JsDoc_exports.getDocCommentTemplateAtPosition(getNewLineOrDefaultFromHost(host, formatSettings), syntaxTreeCache.getCurrentSourceFile(fileName), position, options); + } + function isValidBraceCompletionAtPosition(fileName, position, openingBrace) { + if (openingBrace === 60 /* lessThan */) { + return false; + } + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + if (isInString(sourceFile, position)) { + return false; + } + if (isInsideJsxElementOrAttribute(sourceFile, position)) { + return openingBrace === 123 /* openBrace */; + } + if (isInTemplateString(sourceFile, position)) { + return false; + } + switch (openingBrace) { + case 39 /* singleQuote */: + case 34 /* doubleQuote */: + case 96 /* backtick */: + return !isInComment(sourceFile, position); + } + return true; + } + function getJsxClosingTagAtPosition(fileName, position) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const token = findPrecedingToken(position, sourceFile); + if (!token) return void 0; + const element = token.kind === 32 /* GreaterThanToken */ && isJsxOpeningElement(token.parent) ? token.parent.parent : isJsxText(token) && isJsxElement(token.parent) ? token.parent : void 0; + if (element && isUnclosedTag(element)) { + return { newText: `` }; + } + const fragment = token.kind === 32 /* GreaterThanToken */ && isJsxOpeningFragment(token.parent) ? token.parent.parent : isJsxText(token) && isJsxFragment(token.parent) ? token.parent : void 0; + if (fragment && isUnclosedFragment(fragment)) { + return { newText: "" }; + } + } + function getLinkedEditingRangeAtPosition(fileName, position) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const token = findPrecedingToken(position, sourceFile); + if (!token || token.parent.kind === 308 /* SourceFile */) return void 0; + const jsxTagWordPattern = "[a-zA-Z0-9:\\-\\._$]*"; + if (isJsxFragment(token.parent.parent)) { + const openFragment = token.parent.parent.openingFragment; + const closeFragment = token.parent.parent.closingFragment; + if (containsParseError(openFragment) || containsParseError(closeFragment)) return void 0; + const openPos = openFragment.getStart(sourceFile) + 1; + const closePos = closeFragment.getStart(sourceFile) + 2; + if (position !== openPos && position !== closePos) return void 0; + return { + ranges: [{ start: openPos, length: 0 }, { start: closePos, length: 0 }], + wordPattern: jsxTagWordPattern + }; + } else { + const tag = findAncestor(token.parent, (n) => { + if (isJsxOpeningElement(n) || isJsxClosingElement(n)) { + return true; + } + return false; + }); + if (!tag) return void 0; + Debug.assert(isJsxOpeningElement(tag) || isJsxClosingElement(tag), "tag should be opening or closing element"); + const openTag = tag.parent.openingElement; + const closeTag = tag.parent.closingElement; + const openTagNameStart = openTag.tagName.getStart(sourceFile); + const openTagNameEnd = openTag.tagName.end; + const closeTagNameStart = closeTag.tagName.getStart(sourceFile); + const closeTagNameEnd = closeTag.tagName.end; + if (openTagNameStart === openTag.getStart(sourceFile) || closeTagNameStart === closeTag.getStart(sourceFile) || openTagNameEnd === openTag.getEnd() || closeTagNameEnd === closeTag.getEnd()) return void 0; + if (!(openTagNameStart <= position && position <= openTagNameEnd || closeTagNameStart <= position && position <= closeTagNameEnd)) return void 0; + const openingTagText = openTag.tagName.getText(sourceFile); + if (openingTagText !== closeTag.tagName.getText(sourceFile)) return void 0; + return { + ranges: [{ start: openTagNameStart, length: openTagNameEnd - openTagNameStart }, { start: closeTagNameStart, length: closeTagNameEnd - closeTagNameStart }], + wordPattern: jsxTagWordPattern + }; + } + } + function getLinesForRange(sourceFile, textRange) { + return { + lineStarts: sourceFile.getLineStarts(), + firstLine: sourceFile.getLineAndCharacterOfPosition(textRange.pos).line, + lastLine: sourceFile.getLineAndCharacterOfPosition(textRange.end).line + }; + } + function toggleLineComment(fileName, textRange, insertComment) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const textChanges2 = []; + const { lineStarts, firstLine, lastLine } = getLinesForRange(sourceFile, textRange); + let isCommenting = insertComment || false; + let leftMostPosition = Number.MAX_VALUE; + const lineTextStarts = /* @__PURE__ */ new Map(); + const firstNonWhitespaceCharacterRegex = new RegExp(/\S/); + const isJsx = isInsideJsxElement(sourceFile, lineStarts[firstLine]); + const openComment = isJsx ? "{/*" : "//"; + for (let i = firstLine; i <= lastLine; i++) { + const lineText = sourceFile.text.substring(lineStarts[i], sourceFile.getLineEndOfPosition(lineStarts[i])); + const regExec = firstNonWhitespaceCharacterRegex.exec(lineText); + if (regExec) { + leftMostPosition = Math.min(leftMostPosition, regExec.index); + lineTextStarts.set(i.toString(), regExec.index); + if (lineText.substr(regExec.index, openComment.length) !== openComment) { + isCommenting = insertComment === void 0 || insertComment; + } + } + } + for (let i = firstLine; i <= lastLine; i++) { + if (firstLine !== lastLine && lineStarts[i] === textRange.end) { + continue; + } + const lineTextStart = lineTextStarts.get(i.toString()); + if (lineTextStart !== void 0) { + if (isJsx) { + textChanges2.push(...toggleMultilineComment(fileName, { pos: lineStarts[i] + leftMostPosition, end: sourceFile.getLineEndOfPosition(lineStarts[i]) }, isCommenting, isJsx)); + } else if (isCommenting) { + textChanges2.push({ + newText: openComment, + span: { + length: 0, + start: lineStarts[i] + leftMostPosition + } + }); + } else if (sourceFile.text.substr(lineStarts[i] + lineTextStart, openComment.length) === openComment) { + textChanges2.push({ + newText: "", + span: { + length: openComment.length, + start: lineStarts[i] + lineTextStart + } + }); + } + } + } + return textChanges2; + } + function toggleMultilineComment(fileName, textRange, insertComment, isInsideJsx) { + var _a2; + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const textChanges2 = []; + const { text } = sourceFile; + let hasComment = false; + let isCommenting = insertComment || false; + const positions = []; + let { pos } = textRange; + const isJsx = isInsideJsx !== void 0 ? isInsideJsx : isInsideJsxElement(sourceFile, pos); + const openMultiline = isJsx ? "{/*" : "/*"; + const closeMultiline = isJsx ? "*/}" : "*/"; + const openMultilineRegex = isJsx ? "\\{\\/\\*" : "\\/\\*"; + const closeMultilineRegex = isJsx ? "\\*\\/\\}" : "\\*\\/"; + while (pos <= textRange.end) { + const offset = text.substr(pos, openMultiline.length) === openMultiline ? openMultiline.length : 0; + const commentRange = isInComment(sourceFile, pos + offset); + if (commentRange) { + if (isJsx) { + commentRange.pos--; + commentRange.end++; + } + positions.push(commentRange.pos); + if (commentRange.kind === 3 /* MultiLineCommentTrivia */) { + positions.push(commentRange.end); + } + hasComment = true; + pos = commentRange.end + 1; + } else { + const newPos = text.substring(pos, textRange.end).search(`(${openMultilineRegex})|(${closeMultilineRegex})`); + isCommenting = insertComment !== void 0 ? insertComment : isCommenting || !isTextWhiteSpaceLike(text, pos, newPos === -1 ? textRange.end : pos + newPos); + pos = newPos === -1 ? textRange.end + 1 : pos + newPos + closeMultiline.length; + } + } + if (isCommenting || !hasComment) { + if (((_a2 = isInComment(sourceFile, textRange.pos)) == null ? void 0 : _a2.kind) !== 2 /* SingleLineCommentTrivia */) { + insertSorted(positions, textRange.pos, compareValues); + } + insertSorted(positions, textRange.end, compareValues); + const firstPos = positions[0]; + if (text.substr(firstPos, openMultiline.length) !== openMultiline) { + textChanges2.push({ + newText: openMultiline, + span: { + length: 0, + start: firstPos + } + }); + } + for (let i = 1; i < positions.length - 1; i++) { + if (text.substr(positions[i] - closeMultiline.length, closeMultiline.length) !== closeMultiline) { + textChanges2.push({ + newText: closeMultiline, + span: { + length: 0, + start: positions[i] + } + }); + } + if (text.substr(positions[i], openMultiline.length) !== openMultiline) { + textChanges2.push({ + newText: openMultiline, + span: { + length: 0, + start: positions[i] + } + }); + } + } + if (textChanges2.length % 2 !== 0) { + textChanges2.push({ + newText: closeMultiline, + span: { + length: 0, + start: positions[positions.length - 1] + } + }); + } + } else { + for (const pos2 of positions) { + const from = pos2 - closeMultiline.length > 0 ? pos2 - closeMultiline.length : 0; + const offset = text.substr(from, closeMultiline.length) === closeMultiline ? closeMultiline.length : 0; + textChanges2.push({ + newText: "", + span: { + length: openMultiline.length, + start: pos2 - offset + } + }); + } + } + return textChanges2; + } + function commentSelection(fileName, textRange) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const { firstLine, lastLine } = getLinesForRange(sourceFile, textRange); + return firstLine === lastLine && textRange.pos !== textRange.end ? toggleMultilineComment( + fileName, + textRange, + /*insertComment*/ + true + ) : toggleLineComment( + fileName, + textRange, + /*insertComment*/ + true + ); + } + function uncommentSelection(fileName, textRange) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const textChanges2 = []; + const { pos } = textRange; + let { end } = textRange; + if (pos === end) { + end += isInsideJsxElement(sourceFile, pos) ? 2 : 1; + } + for (let i = pos; i <= end; i++) { + const commentRange = isInComment(sourceFile, i); + if (commentRange) { + switch (commentRange.kind) { + case 2 /* SingleLineCommentTrivia */: + textChanges2.push(...toggleLineComment( + fileName, + { end: commentRange.end, pos: commentRange.pos + 1 }, + /*insertComment*/ + false + )); + break; + case 3 /* MultiLineCommentTrivia */: + textChanges2.push(...toggleMultilineComment( + fileName, + { end: commentRange.end, pos: commentRange.pos + 1 }, + /*insertComment*/ + false + )); + } + i = commentRange.end + 1; + } + } + return textChanges2; + } + function isUnclosedTag({ openingElement, closingElement, parent: parent2 }) { + return !tagNamesAreEquivalent(openingElement.tagName, closingElement.tagName) || isJsxElement(parent2) && tagNamesAreEquivalent(openingElement.tagName, parent2.openingElement.tagName) && isUnclosedTag(parent2); + } + function isUnclosedFragment({ closingFragment, parent: parent2 }) { + return !!(closingFragment.flags & 262144 /* ThisNodeHasError */) || isJsxFragment(parent2) && isUnclosedFragment(parent2); + } + function getSpanOfEnclosingComment(fileName, position, onlyMultiLine) { + const sourceFile = syntaxTreeCache.getCurrentSourceFile(fileName); + const range = ts_formatting_exports.getRangeOfEnclosingComment(sourceFile, position); + return range && (!onlyMultiLine || range.kind === 3 /* MultiLineCommentTrivia */) ? createTextSpanFromRange(range) : void 0; + } + function getTodoComments(fileName, descriptors) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + cancellationToken.throwIfCancellationRequested(); + const fileContents = sourceFile.text; + const result = []; + if (descriptors.length > 0 && !isNodeModulesFile(sourceFile.fileName)) { + const regExp = getTodoCommentsRegExp(); + let matchArray; + while (matchArray = regExp.exec(fileContents)) { + cancellationToken.throwIfCancellationRequested(); + const firstDescriptorCaptureIndex = 3; + Debug.assert(matchArray.length === descriptors.length + firstDescriptorCaptureIndex); + const preamble = matchArray[1]; + const matchPosition = matchArray.index + preamble.length; + if (!isInComment(sourceFile, matchPosition)) { + continue; + } + let descriptor; + for (let i = 0; i < descriptors.length; i++) { + if (matchArray[i + firstDescriptorCaptureIndex]) { + descriptor = descriptors[i]; + } + } + if (descriptor === void 0) return Debug.fail(); + if (isLetterOrDigit(fileContents.charCodeAt(matchPosition + descriptor.text.length))) { + continue; + } + const message = matchArray[2]; + result.push({ descriptor, message, position: matchPosition }); + } + } + return result; + function escapeRegExp(str) { + return str.replace(/[-[\]/{}()*+?.\\^$|]/g, "\\$&"); + } + function getTodoCommentsRegExp() { + const singleLineCommentStart = /(?:\/{2,}\s*)/.source; + const multiLineCommentStart = /(?:\/\*+\s*)/.source; + const anyNumberOfSpacesAndAsterisksAtStartOfLine = /(?:^(?:\s|\*)*)/.source; + const preamble = "(" + anyNumberOfSpacesAndAsterisksAtStartOfLine + "|" + singleLineCommentStart + "|" + multiLineCommentStart + ")"; + const literals = "(?:" + map(descriptors, (d) => "(" + escapeRegExp(d.text) + ")").join("|") + ")"; + const endOfLineOrEndOfComment = /(?:$|\*\/)/.source; + const messageRemainder = /(?:.*?)/.source; + const messagePortion = "(" + literals + messageRemainder + ")"; + const regExpString = preamble + messagePortion + endOfLineOrEndOfComment; + return new RegExp(regExpString, "gim"); + } + function isLetterOrDigit(char) { + return char >= 97 /* a */ && char <= 122 /* z */ || char >= 65 /* A */ && char <= 90 /* Z */ || char >= 48 /* _0 */ && char <= 57 /* _9 */; + } + function isNodeModulesFile(path) { + return path.includes("/node_modules/"); + } + } + function getRenameInfo2(fileName, position, preferences) { + synchronizeHostData(); + return ts_Rename_exports.getRenameInfo(program, getValidSourceFile(fileName), position, preferences || {}); + } + function getRefactorContext(file, positionOrRange, preferences, formatOptions, triggerReason, kind) { + const [startPosition, endPosition] = typeof positionOrRange === "number" ? [positionOrRange, void 0] : [positionOrRange.pos, positionOrRange.end]; + return { + file, + startPosition, + endPosition, + program: getProgram(), + host, + formatContext: ts_formatting_exports.getFormatContext(formatOptions, host), + // TODO: GH#18217 + cancellationToken, + preferences, + triggerReason, + kind + }; + } + function getInlayHintsContext(file, span, preferences) { + return { + file, + program: getProgram(), + host, + span, + preferences, + cancellationToken + }; + } + function getSmartSelectionRange2(fileName, position) { + return ts_SmartSelectionRange_exports.getSmartSelectionRange(position, syntaxTreeCache.getCurrentSourceFile(fileName)); + } + function getApplicableRefactors2(fileName, positionOrRange, preferences = emptyOptions, triggerReason, kind, includeInteractiveActions) { + synchronizeHostData(); + const file = getValidSourceFile(fileName); + return ts_refactor_exports.getApplicableRefactors(getRefactorContext(file, positionOrRange, preferences, emptyOptions, triggerReason, kind), includeInteractiveActions); + } + function getMoveToRefactoringFileSuggestions(fileName, positionOrRange, preferences = emptyOptions) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const allFiles = Debug.checkDefined(program.getSourceFiles()); + const extension = extensionFromPath(fileName); + const toMove = getStatementsToMove(getRefactorContext(sourceFile, positionOrRange, preferences, emptyOptions)); + const toMoveContainsJsx = containsJsx(toMove == null ? void 0 : toMove.all); + const files = mapDefined(allFiles, (file) => { + const fileNameExtension = extensionFromPath(file.fileName); + const isValidSourceFile = !(program == null ? void 0 : program.isSourceFileFromExternalLibrary(sourceFile)) && !(sourceFile === getValidSourceFile(file.fileName) || extension === ".ts" /* Ts */ && fileNameExtension === ".d.ts" /* Dts */ || extension === ".d.ts" /* Dts */ && startsWith(getBaseFileName(file.fileName), "lib.") && fileNameExtension === ".d.ts" /* Dts */); + return isValidSourceFile && (extension === fileNameExtension || (extension === ".tsx" /* Tsx */ && fileNameExtension === ".ts" /* Ts */ || extension === ".jsx" /* Jsx */ && fileNameExtension === ".js" /* Js */) && !toMoveContainsJsx) ? file.fileName : void 0; + }); + return { newFileName: createNewFileName(sourceFile, program, host, toMove), files }; + } + function getEditsForRefactor2(fileName, formatOptions, positionOrRange, refactorName14, actionName2, preferences = emptyOptions, interactiveRefactorArguments) { + synchronizeHostData(); + const file = getValidSourceFile(fileName); + return ts_refactor_exports.getEditsForRefactor(getRefactorContext(file, positionOrRange, preferences, formatOptions), refactorName14, actionName2, interactiveRefactorArguments); + } + function toLineColumnOffset(fileName, position) { + if (position === 0) { + return { line: 0, character: 0 }; + } + return sourceMapper.toLineColumnOffset(fileName, position); + } + function prepareCallHierarchy(fileName, position) { + synchronizeHostData(); + const declarations = ts_CallHierarchy_exports.resolveCallHierarchyDeclaration(program, getTouchingPropertyName(getValidSourceFile(fileName), position)); + return declarations && mapOneOrMany(declarations, (declaration) => ts_CallHierarchy_exports.createCallHierarchyItem(program, declaration)); + } + function provideCallHierarchyIncomingCalls(fileName, position) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const declaration = firstOrOnly(ts_CallHierarchy_exports.resolveCallHierarchyDeclaration(program, position === 0 ? sourceFile : getTouchingPropertyName(sourceFile, position))); + return declaration ? ts_CallHierarchy_exports.getIncomingCalls(program, declaration, cancellationToken) : []; + } + function provideCallHierarchyOutgoingCalls(fileName, position) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + const declaration = firstOrOnly(ts_CallHierarchy_exports.resolveCallHierarchyDeclaration(program, position === 0 ? sourceFile : getTouchingPropertyName(sourceFile, position))); + return declaration ? ts_CallHierarchy_exports.getOutgoingCalls(program, declaration) : []; + } + function provideInlayHints2(fileName, span, preferences = emptyOptions) { + synchronizeHostData(); + const sourceFile = getValidSourceFile(fileName); + return ts_InlayHints_exports.provideInlayHints(getInlayHintsContext(sourceFile, span, preferences)); + } + function mapCode2(sourceFile, contents, focusLocations, formatOptions, preferences) { + return ts_MapCode_exports.mapCode( + syntaxTreeCache.getCurrentSourceFile(sourceFile), + contents, + focusLocations, + host, + ts_formatting_exports.getFormatContext(formatOptions, host), + preferences + ); + } + const ls = { + dispose, + cleanupSemanticCache, + getSyntacticDiagnostics, + getSemanticDiagnostics, + getRegionSemanticDiagnostics, + getSuggestionDiagnostics, + getCompilerOptionsDiagnostics, + getSyntacticClassifications: getSyntacticClassifications2, + getSemanticClassifications: getSemanticClassifications3, + getEncodedSyntacticClassifications: getEncodedSyntacticClassifications2, + getEncodedSemanticClassifications: getEncodedSemanticClassifications3, + getCompletionsAtPosition: getCompletionsAtPosition2, + getCompletionEntryDetails: getCompletionEntryDetails2, + getCompletionEntrySymbol: getCompletionEntrySymbol2, + getSignatureHelpItems: getSignatureHelpItems2, + getQuickInfoAtPosition, + getDefinitionAtPosition: getDefinitionAtPosition2, + getDefinitionAndBoundSpan: getDefinitionAndBoundSpan2, + getImplementationAtPosition, + getTypeDefinitionAtPosition: getTypeDefinitionAtPosition2, + getReferencesAtPosition, + findReferences, + getFileReferences, + getDocumentHighlights, + getNameOrDottedNameSpan, + getBreakpointStatementAtPosition, + getNavigateToItems: getNavigateToItems2, + getRenameInfo: getRenameInfo2, + getSmartSelectionRange: getSmartSelectionRange2, + findRenameLocations, + getNavigationBarItems: getNavigationBarItems2, + getNavigationTree: getNavigationTree2, + getOutliningSpans, + getTodoComments, + getBraceMatchingAtPosition, + getIndentationAtPosition, + getFormattingEditsForRange, + getFormattingEditsForDocument, + getFormattingEditsAfterKeystroke, + getDocCommentTemplateAtPosition: getDocCommentTemplateAtPosition2, + isValidBraceCompletionAtPosition, + getJsxClosingTagAtPosition, + getLinkedEditingRangeAtPosition, + getSpanOfEnclosingComment, + getCodeFixesAtPosition, + getCombinedCodeFix, + applyCodeActionCommand, + organizeImports: organizeImports2, + getEditsForFileRename: getEditsForFileRename2, + getEmitOutput, + getNonBoundSourceFile, + getProgram, + getCurrentProgram: () => program, + getAutoImportProvider, + updateIsDefinitionOfReferencedSymbols, + getApplicableRefactors: getApplicableRefactors2, + getEditsForRefactor: getEditsForRefactor2, + getMoveToRefactoringFileSuggestions, + toLineColumnOffset, + getSourceMapper: () => sourceMapper, + clearSourceMapperCache: () => sourceMapper.clearCache(), + prepareCallHierarchy, + provideCallHierarchyIncomingCalls, + provideCallHierarchyOutgoingCalls, + toggleLineComment, + toggleMultilineComment, + commentSelection, + uncommentSelection, + provideInlayHints: provideInlayHints2, + getSupportedCodeFixes, + preparePasteEditsForFile, + getPasteEdits, + mapCode: mapCode2 + }; + switch (languageServiceMode) { + case 0 /* Semantic */: + break; + case 1 /* PartialSemantic */: + invalidOperationsInPartialSemanticMode.forEach( + (key) => ls[key] = () => { + throw new Error(`LanguageService Operation: ${key} not allowed in LanguageServiceMode.PartialSemantic`); + } + ); + break; + case 2 /* Syntactic */: + invalidOperationsInSyntacticMode.forEach( + (key) => ls[key] = () => { + throw new Error(`LanguageService Operation: ${key} not allowed in LanguageServiceMode.Syntactic`); + } + ); + break; + default: + Debug.assertNever(languageServiceMode); + } + return ls; +} +function getNameTable(sourceFile) { + if (!sourceFile.nameTable) { + initializeNameTable(sourceFile); + } + return sourceFile.nameTable; +} +function initializeNameTable(sourceFile) { + const nameTable = sourceFile.nameTable = /* @__PURE__ */ new Map(); + sourceFile.forEachChild(function walk(node) { + if (isIdentifier(node) && !isTagName(node) && node.escapedText || isStringOrNumericLiteralLike(node) && literalIsName(node)) { + const text = getEscapedTextOfIdentifierOrLiteral(node); + nameTable.set(text, nameTable.get(text) === void 0 ? node.pos : -1); + } else if (isPrivateIdentifier(node)) { + const text = node.escapedText; + nameTable.set(text, nameTable.get(text) === void 0 ? node.pos : -1); + } + forEachChild(node, walk); + if (hasJSDocNodes(node)) { + for (const jsDoc of node.jsDoc) { + forEachChild(jsDoc, walk); + } + } + }); +} +function literalIsName(node) { + return isDeclarationName(node) || node.parent.kind === 284 /* ExternalModuleReference */ || isArgumentOfElementAccessExpression(node) || isLiteralComputedPropertyDeclarationName(node); +} +function getContainingObjectLiteralElement(node) { + const element = getContainingObjectLiteralElementWorker(node); + return element && (isObjectLiteralExpression(element.parent) || isJsxAttributes(element.parent)) ? element : void 0; +} +function getContainingObjectLiteralElementWorker(node) { + switch (node.kind) { + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 9 /* NumericLiteral */: + if (node.parent.kind === 168 /* ComputedPropertyName */) { + return isObjectLiteralElement(node.parent.parent) ? node.parent.parent : void 0; + } + // falls through + case 80 /* Identifier */: + case 296 /* JsxNamespacedName */: + return isObjectLiteralElement(node.parent) && (node.parent.parent.kind === 211 /* ObjectLiteralExpression */ || node.parent.parent.kind === 293 /* JsxAttributes */) && node.parent.name === node ? node.parent : void 0; + } + return void 0; +} +function getSymbolAtLocationForQuickInfo(node, checker) { + const object = getContainingObjectLiteralElement(node); + if (object) { + const contextualType = checker.getContextualType(object.parent); + const properties = contextualType && getPropertySymbolsFromContextualType( + object, + checker, + contextualType, + /*unionSymbolOk*/ + false + ); + if (properties && properties.length === 1) { + return first(properties); + } + } + return checker.getSymbolAtLocation(node); +} +function getPropertySymbolsFromContextualType(node, checker, contextualType, unionSymbolOk) { + const name = getNameFromPropertyName(node.name); + if (!name) return emptyArray; + if (!contextualType.isUnion()) { + const symbol = contextualType.getProperty(name); + return symbol ? [symbol] : emptyArray; + } + const filteredTypes = isObjectLiteralExpression(node.parent) || isJsxAttributes(node.parent) ? filter(contextualType.types, (t) => !checker.isTypeInvalidDueToUnionDiscriminant(t, node.parent)) : contextualType.types; + const discriminatedPropertySymbols = mapDefined(filteredTypes, (t) => t.getProperty(name)); + if (unionSymbolOk && (discriminatedPropertySymbols.length === 0 || discriminatedPropertySymbols.length === contextualType.types.length)) { + const symbol = contextualType.getProperty(name); + if (symbol) return [symbol]; + } + if (!filteredTypes.length && !discriminatedPropertySymbols.length) { + return mapDefined(contextualType.types, (t) => t.getProperty(name)); + } + return deduplicate(discriminatedPropertySymbols, equateValues); +} +function isArgumentOfElementAccessExpression(node) { + return node && node.parent && node.parent.kind === 213 /* ElementAccessExpression */ && node.parent.argumentExpression === node; +} +function getDefaultLibFilePath(options) { + if (sys) { + return combinePaths(getDirectoryPath(normalizePath(sys.getExecutingFilePath())), getDefaultLibFileName(options)); + } + throw new Error("getDefaultLibFilePath is only supported when consumed as a node module. "); +} +setObjectAllocator(getServicesObjectAllocator()); + +// src/services/transform.ts +function transform(source, transformers, compilerOptions) { + const diagnostics = []; + compilerOptions = fixupCompilerOptions(compilerOptions, diagnostics); + const nodes = isArray(source) ? source : [source]; + const result = transformNodes( + /*resolver*/ + void 0, + /*host*/ + void 0, + factory, + compilerOptions, + nodes, + transformers, + /*allowDtsFiles*/ + true + ); + result.diagnostics = concatenate(result.diagnostics, diagnostics); + return result; +} + +// src/services/_namespaces/ts.BreakpointResolver.ts +var ts_BreakpointResolver_exports = {}; +__export(ts_BreakpointResolver_exports, { + spanInSourceFileAtLocation: () => spanInSourceFileAtLocation +}); + +// src/services/breakpoints.ts +function spanInSourceFileAtLocation(sourceFile, position) { + if (sourceFile.isDeclarationFile) { + return void 0; + } + let tokenAtLocation = getTokenAtPosition(sourceFile, position); + const lineOfPosition = sourceFile.getLineAndCharacterOfPosition(position).line; + if (sourceFile.getLineAndCharacterOfPosition(tokenAtLocation.getStart(sourceFile)).line > lineOfPosition) { + const preceding = findPrecedingToken(tokenAtLocation.pos, sourceFile); + if (!preceding || sourceFile.getLineAndCharacterOfPosition(preceding.getEnd()).line !== lineOfPosition) { + return void 0; + } + tokenAtLocation = preceding; + } + if (tokenAtLocation.flags & 33554432 /* Ambient */) { + return void 0; + } + return spanInNode(tokenAtLocation); + function textSpan(startNode2, endNode2) { + const lastDecorator = canHaveDecorators(startNode2) ? findLast(startNode2.modifiers, isDecorator) : void 0; + const start = lastDecorator ? skipTrivia(sourceFile.text, lastDecorator.end) : startNode2.getStart(sourceFile); + return createTextSpanFromBounds(start, (endNode2 || startNode2).getEnd()); + } + function textSpanEndingAtNextToken(startNode2, previousTokenToFindNextEndToken) { + return textSpan(startNode2, findNextToken(previousTokenToFindNextEndToken, previousTokenToFindNextEndToken.parent, sourceFile)); + } + function spanInNodeIfStartsOnSameLine(node, otherwiseOnNode) { + if (node && lineOfPosition === sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile)).line) { + return spanInNode(node); + } + return spanInNode(otherwiseOnNode); + } + function spanInNodeArray(nodeArray, node, match) { + if (nodeArray) { + const index = nodeArray.indexOf(node); + if (index >= 0) { + let start = index; + let end = index + 1; + while (start > 0 && match(nodeArray[start - 1])) start--; + while (end < nodeArray.length && match(nodeArray[end])) end++; + return createTextSpanFromBounds(skipTrivia(sourceFile.text, nodeArray[start].pos), nodeArray[end - 1].end); + } + } + return textSpan(node); + } + function spanInPreviousNode(node) { + return spanInNode(findPrecedingToken(node.pos, sourceFile)); + } + function spanInNextNode(node) { + return spanInNode(findNextToken(node, node.parent, sourceFile)); + } + function spanInNode(node) { + if (node) { + const { parent: parent2 } = node; + switch (node.kind) { + case 244 /* VariableStatement */: + return spanInVariableDeclaration(node.declarationList.declarations[0]); + case 261 /* VariableDeclaration */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return spanInVariableDeclaration(node); + case 170 /* Parameter */: + return spanInParameterDeclaration(node); + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 177 /* Constructor */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return spanInFunctionDeclaration(node); + case 242 /* Block */: + if (isFunctionBlock(node)) { + return spanInFunctionBlock(node); + } + // falls through + case 269 /* ModuleBlock */: + return spanInBlock(node); + case 300 /* CatchClause */: + return spanInBlock(node.block); + case 245 /* ExpressionStatement */: + return textSpan(node.expression); + case 254 /* ReturnStatement */: + return textSpan(node.getChildAt(0), node.expression); + case 248 /* WhileStatement */: + return textSpanEndingAtNextToken(node, node.expression); + case 247 /* DoStatement */: + return spanInNode(node.statement); + case 260 /* DebuggerStatement */: + return textSpan(node.getChildAt(0)); + case 246 /* IfStatement */: + return textSpanEndingAtNextToken(node, node.expression); + case 257 /* LabeledStatement */: + return spanInNode(node.statement); + case 253 /* BreakStatement */: + case 252 /* ContinueStatement */: + return textSpan(node.getChildAt(0), node.label); + case 249 /* ForStatement */: + return spanInForStatement(node); + case 250 /* ForInStatement */: + return textSpanEndingAtNextToken(node, node.expression); + case 251 /* ForOfStatement */: + return spanInInitializerOfForLike(node); + case 256 /* SwitchStatement */: + return textSpanEndingAtNextToken(node, node.expression); + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + return spanInNode(node.statements[0]); + case 259 /* TryStatement */: + return spanInBlock(node.tryBlock); + case 258 /* ThrowStatement */: + return textSpan(node, node.expression); + case 278 /* ExportAssignment */: + return textSpan(node, node.expression); + case 272 /* ImportEqualsDeclaration */: + return textSpan(node, node.moduleReference); + case 273 /* ImportDeclaration */: + return textSpan(node, node.moduleSpecifier); + case 279 /* ExportDeclaration */: + return textSpan(node, node.moduleSpecifier); + case 268 /* ModuleDeclaration */: + if (getModuleInstanceState(node) !== 1 /* Instantiated */) { + return void 0; + } + // falls through + case 264 /* ClassDeclaration */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + case 209 /* BindingElement */: + return textSpan(node); + case 255 /* WithStatement */: + return spanInNode(node.statement); + case 171 /* Decorator */: + return spanInNodeArray(parent2.modifiers, node, isDecorator); + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + return spanInBindingPattern(node); + // No breakpoint in interface, type alias + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + return void 0; + // Tokens: + case 27 /* SemicolonToken */: + case 1 /* EndOfFileToken */: + return spanInNodeIfStartsOnSameLine(findPrecedingToken(node.pos, sourceFile)); + case 28 /* CommaToken */: + return spanInPreviousNode(node); + case 19 /* OpenBraceToken */: + return spanInOpenBraceToken(node); + case 20 /* CloseBraceToken */: + return spanInCloseBraceToken(node); + case 24 /* CloseBracketToken */: + return spanInCloseBracketToken(node); + case 21 /* OpenParenToken */: + return spanInOpenParenToken(node); + case 22 /* CloseParenToken */: + return spanInCloseParenToken(node); + case 59 /* ColonToken */: + return spanInColonToken(node); + case 32 /* GreaterThanToken */: + case 30 /* LessThanToken */: + return spanInGreaterThanOrLessThanToken(node); + // Keywords: + case 117 /* WhileKeyword */: + return spanInWhileKeyword(node); + case 93 /* ElseKeyword */: + case 85 /* CatchKeyword */: + case 98 /* FinallyKeyword */: + return spanInNextNode(node); + case 165 /* OfKeyword */: + return spanInOfKeyword(node); + default: + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node)) { + return spanInArrayLiteralOrObjectLiteralDestructuringPattern(node); + } + if ((node.kind === 80 /* Identifier */ || node.kind === 231 /* SpreadElement */ || node.kind === 304 /* PropertyAssignment */ || node.kind === 305 /* ShorthandPropertyAssignment */) && isArrayLiteralOrObjectLiteralDestructuringPattern(parent2)) { + return textSpan(node); + } + if (node.kind === 227 /* BinaryExpression */) { + const { left, operatorToken } = node; + if (isArrayLiteralOrObjectLiteralDestructuringPattern(left)) { + return spanInArrayLiteralOrObjectLiteralDestructuringPattern( + left + ); + } + if (operatorToken.kind === 64 /* EqualsToken */ && isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent)) { + return textSpan(node); + } + if (operatorToken.kind === 28 /* CommaToken */) { + return spanInNode(left); + } + } + if (isExpressionNode(node)) { + switch (parent2.kind) { + case 247 /* DoStatement */: + return spanInPreviousNode(node); + case 171 /* Decorator */: + return spanInNode(node.parent); + case 249 /* ForStatement */: + case 251 /* ForOfStatement */: + return textSpan(node); + case 227 /* BinaryExpression */: + if (node.parent.operatorToken.kind === 28 /* CommaToken */) { + return textSpan(node); + } + break; + case 220 /* ArrowFunction */: + if (node.parent.body === node) { + return textSpan(node); + } + break; + } + } + switch (node.parent.kind) { + case 304 /* PropertyAssignment */: + if (node.parent.name === node && !isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent.parent)) { + return spanInNode(node.parent.initializer); + } + break; + case 217 /* TypeAssertionExpression */: + if (node.parent.type === node) { + return spanInNextNode(node.parent.type); + } + break; + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: { + const { initializer, type } = node.parent; + if (initializer === node || type === node || isAssignmentOperator(node.kind)) { + return spanInPreviousNode(node); + } + break; + } + case 227 /* BinaryExpression */: { + const { left } = node.parent; + if (isArrayLiteralOrObjectLiteralDestructuringPattern(left) && node !== left) { + return spanInPreviousNode(node); + } + break; + } + default: + if (isFunctionLike(node.parent) && node.parent.type === node) { + return spanInPreviousNode(node); + } + } + return spanInNode(node.parent); + } + } + function textSpanFromVariableDeclaration(variableDeclaration) { + if (isVariableDeclarationList(variableDeclaration.parent) && variableDeclaration.parent.declarations[0] === variableDeclaration) { + return textSpan(findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent), variableDeclaration); + } else { + return textSpan(variableDeclaration); + } + } + function spanInVariableDeclaration(variableDeclaration) { + if (variableDeclaration.parent.parent.kind === 250 /* ForInStatement */) { + return spanInNode(variableDeclaration.parent.parent); + } + const parent2 = variableDeclaration.parent; + if (isBindingPattern(variableDeclaration.name)) { + return spanInBindingPattern(variableDeclaration.name); + } + if (hasOnlyExpressionInitializer(variableDeclaration) && variableDeclaration.initializer || hasSyntacticModifier(variableDeclaration, 32 /* Export */) || parent2.parent.kind === 251 /* ForOfStatement */) { + return textSpanFromVariableDeclaration(variableDeclaration); + } + if (isVariableDeclarationList(variableDeclaration.parent) && variableDeclaration.parent.declarations[0] !== variableDeclaration) { + return spanInNode(findPrecedingToken(variableDeclaration.pos, sourceFile, variableDeclaration.parent)); + } + } + function canHaveSpanInParameterDeclaration(parameter) { + return !!parameter.initializer || parameter.dotDotDotToken !== void 0 || hasSyntacticModifier(parameter, 1 /* Public */ | 2 /* Private */); + } + function spanInParameterDeclaration(parameter) { + if (isBindingPattern(parameter.name)) { + return spanInBindingPattern(parameter.name); + } else if (canHaveSpanInParameterDeclaration(parameter)) { + return textSpan(parameter); + } else { + const functionDeclaration = parameter.parent; + const indexOfParameter = functionDeclaration.parameters.indexOf(parameter); + Debug.assert(indexOfParameter !== -1); + if (indexOfParameter !== 0) { + return spanInParameterDeclaration(functionDeclaration.parameters[indexOfParameter - 1]); + } else { + return spanInNode(functionDeclaration.body); + } + } + } + function canFunctionHaveSpanInWholeDeclaration(functionDeclaration) { + return hasSyntacticModifier(functionDeclaration, 32 /* Export */) || functionDeclaration.parent.kind === 264 /* ClassDeclaration */ && functionDeclaration.kind !== 177 /* Constructor */; + } + function spanInFunctionDeclaration(functionDeclaration) { + if (!functionDeclaration.body) { + return void 0; + } + if (canFunctionHaveSpanInWholeDeclaration(functionDeclaration)) { + return textSpan(functionDeclaration); + } + return spanInNode(functionDeclaration.body); + } + function spanInFunctionBlock(block) { + const nodeForSpanInBlock = block.statements.length ? block.statements[0] : block.getLastToken(); + if (canFunctionHaveSpanInWholeDeclaration(block.parent)) { + return spanInNodeIfStartsOnSameLine(block.parent, nodeForSpanInBlock); + } + return spanInNode(nodeForSpanInBlock); + } + function spanInBlock(block) { + switch (block.parent.kind) { + case 268 /* ModuleDeclaration */: + if (getModuleInstanceState(block.parent) !== 1 /* Instantiated */) { + return void 0; + } + // Set on parent if on same line otherwise on first statement + // falls through + case 248 /* WhileStatement */: + case 246 /* IfStatement */: + case 250 /* ForInStatement */: + return spanInNodeIfStartsOnSameLine(block.parent, block.statements[0]); + // Set span on previous token if it starts on same line otherwise on the first statement of the block + case 249 /* ForStatement */: + case 251 /* ForOfStatement */: + return spanInNodeIfStartsOnSameLine(findPrecedingToken(block.pos, sourceFile, block.parent), block.statements[0]); + } + return spanInNode(block.statements[0]); + } + function spanInInitializerOfForLike(forLikeStatement) { + if (forLikeStatement.initializer.kind === 262 /* VariableDeclarationList */) { + const variableDeclarationList = forLikeStatement.initializer; + if (variableDeclarationList.declarations.length > 0) { + return spanInNode(variableDeclarationList.declarations[0]); + } + } else { + return spanInNode(forLikeStatement.initializer); + } + } + function spanInForStatement(forStatement) { + if (forStatement.initializer) { + return spanInInitializerOfForLike(forStatement); + } + if (forStatement.condition) { + return textSpan(forStatement.condition); + } + if (forStatement.incrementor) { + return textSpan(forStatement.incrementor); + } + } + function spanInBindingPattern(bindingPattern) { + const firstBindingElement = forEach(bindingPattern.elements, (element) => element.kind !== 233 /* OmittedExpression */ ? element : void 0); + if (firstBindingElement) { + return spanInNode(firstBindingElement); + } + if (bindingPattern.parent.kind === 209 /* BindingElement */) { + return textSpan(bindingPattern.parent); + } + return textSpanFromVariableDeclaration(bindingPattern.parent); + } + function spanInArrayLiteralOrObjectLiteralDestructuringPattern(node2) { + Debug.assert(node2.kind !== 208 /* ArrayBindingPattern */ && node2.kind !== 207 /* ObjectBindingPattern */); + const elements = node2.kind === 210 /* ArrayLiteralExpression */ ? node2.elements : node2.properties; + const firstBindingElement = forEach(elements, (element) => element.kind !== 233 /* OmittedExpression */ ? element : void 0); + if (firstBindingElement) { + return spanInNode(firstBindingElement); + } + return textSpan(node2.parent.kind === 227 /* BinaryExpression */ ? node2.parent : node2); + } + function spanInOpenBraceToken(node2) { + switch (node2.parent.kind) { + case 267 /* EnumDeclaration */: + const enumDeclaration = node2.parent; + return spanInNodeIfStartsOnSameLine(findPrecedingToken(node2.pos, sourceFile, node2.parent), enumDeclaration.members.length ? enumDeclaration.members[0] : enumDeclaration.getLastToken(sourceFile)); + case 264 /* ClassDeclaration */: + const classDeclaration = node2.parent; + return spanInNodeIfStartsOnSameLine(findPrecedingToken(node2.pos, sourceFile, node2.parent), classDeclaration.members.length ? classDeclaration.members[0] : classDeclaration.getLastToken(sourceFile)); + case 270 /* CaseBlock */: + return spanInNodeIfStartsOnSameLine(node2.parent.parent, node2.parent.clauses[0]); + } + return spanInNode(node2.parent); + } + function spanInCloseBraceToken(node2) { + switch (node2.parent.kind) { + case 269 /* ModuleBlock */: + if (getModuleInstanceState(node2.parent.parent) !== 1 /* Instantiated */) { + return void 0; + } + // falls through + case 267 /* EnumDeclaration */: + case 264 /* ClassDeclaration */: + return textSpan(node2); + case 242 /* Block */: + if (isFunctionBlock(node2.parent)) { + return textSpan(node2); + } + // falls through + case 300 /* CatchClause */: + return spanInNode(lastOrUndefined(node2.parent.statements)); + case 270 /* CaseBlock */: + const caseBlock = node2.parent; + const lastClause = lastOrUndefined(caseBlock.clauses); + if (lastClause) { + return spanInNode(lastOrUndefined(lastClause.statements)); + } + return void 0; + case 207 /* ObjectBindingPattern */: + const bindingPattern = node2.parent; + return spanInNode(lastOrUndefined(bindingPattern.elements) || bindingPattern); + // Default to parent node + default: + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node2.parent)) { + const objectLiteral = node2.parent; + return textSpan(lastOrUndefined(objectLiteral.properties) || objectLiteral); + } + return spanInNode(node2.parent); + } + } + function spanInCloseBracketToken(node2) { + switch (node2.parent.kind) { + case 208 /* ArrayBindingPattern */: + const bindingPattern = node2.parent; + return textSpan(lastOrUndefined(bindingPattern.elements) || bindingPattern); + default: + if (isArrayLiteralOrObjectLiteralDestructuringPattern(node2.parent)) { + const arrayLiteral = node2.parent; + return textSpan(lastOrUndefined(arrayLiteral.elements) || arrayLiteral); + } + return spanInNode(node2.parent); + } + } + function spanInOpenParenToken(node2) { + if (node2.parent.kind === 247 /* DoStatement */ || // Go to while keyword and do action instead + node2.parent.kind === 214 /* CallExpression */ || node2.parent.kind === 215 /* NewExpression */) { + return spanInPreviousNode(node2); + } + if (node2.parent.kind === 218 /* ParenthesizedExpression */) { + return spanInNextNode(node2); + } + return spanInNode(node2.parent); + } + function spanInCloseParenToken(node2) { + switch (node2.parent.kind) { + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 177 /* Constructor */: + case 248 /* WhileStatement */: + case 247 /* DoStatement */: + case 249 /* ForStatement */: + case 251 /* ForOfStatement */: + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 218 /* ParenthesizedExpression */: + return spanInPreviousNode(node2); + // Default to parent node + default: + return spanInNode(node2.parent); + } + } + function spanInColonToken(node2) { + if (isFunctionLike(node2.parent) || node2.parent.kind === 304 /* PropertyAssignment */ || node2.parent.kind === 170 /* Parameter */) { + return spanInPreviousNode(node2); + } + return spanInNode(node2.parent); + } + function spanInGreaterThanOrLessThanToken(node2) { + if (node2.parent.kind === 217 /* TypeAssertionExpression */) { + return spanInNextNode(node2); + } + return spanInNode(node2.parent); + } + function spanInWhileKeyword(node2) { + if (node2.parent.kind === 247 /* DoStatement */) { + return textSpanEndingAtNextToken(node2, node2.parent.expression); + } + return spanInNode(node2.parent); + } + function spanInOfKeyword(node2) { + if (node2.parent.kind === 251 /* ForOfStatement */) { + return spanInNextNode(node2); + } + return spanInNode(node2.parent); + } + } +} + +// src/services/_namespaces/ts.CallHierarchy.ts +var ts_CallHierarchy_exports = {}; +__export(ts_CallHierarchy_exports, { + createCallHierarchyItem: () => createCallHierarchyItem, + getIncomingCalls: () => getIncomingCalls, + getOutgoingCalls: () => getOutgoingCalls, + resolveCallHierarchyDeclaration: () => resolveCallHierarchyDeclaration +}); + +// src/services/callHierarchy.ts +function isNamedExpression(node) { + return (isFunctionExpression(node) || isClassExpression(node)) && isNamedDeclaration(node); +} +function isVariableLike2(node) { + return isPropertyDeclaration(node) || isVariableDeclaration(node); +} +function isAssignedExpression(node) { + return (isFunctionExpression(node) || isArrowFunction(node) || isClassExpression(node)) && isVariableLike2(node.parent) && node === node.parent.initializer && isIdentifier(node.parent.name) && (!!(getCombinedNodeFlags(node.parent) & 2 /* Const */) || isPropertyDeclaration(node.parent)); +} +function isPossibleCallHierarchyDeclaration(node) { + return isSourceFile(node) || isModuleDeclaration(node) || isFunctionDeclaration(node) || isFunctionExpression(node) || isClassDeclaration(node) || isClassExpression(node) || isClassStaticBlockDeclaration(node) || isMethodDeclaration(node) || isMethodSignature(node) || isGetAccessorDeclaration(node) || isSetAccessorDeclaration(node); +} +function isValidCallHierarchyDeclaration(node) { + return isSourceFile(node) || isModuleDeclaration(node) && isIdentifier(node.name) || isFunctionDeclaration(node) || isClassDeclaration(node) || isClassStaticBlockDeclaration(node) || isMethodDeclaration(node) || isMethodSignature(node) || isGetAccessorDeclaration(node) || isSetAccessorDeclaration(node) || isNamedExpression(node) || isAssignedExpression(node); +} +function getCallHierarchyDeclarationReferenceNode(node) { + if (isSourceFile(node)) return node; + if (isNamedDeclaration(node)) return node.name; + if (isAssignedExpression(node)) return node.parent.name; + return Debug.checkDefined(node.modifiers && find(node.modifiers, isDefaultModifier3)); +} +function isDefaultModifier3(node) { + return node.kind === 90 /* DefaultKeyword */; +} +function getSymbolOfCallHierarchyDeclaration(typeChecker, node) { + const location = getCallHierarchyDeclarationReferenceNode(node); + return location && typeChecker.getSymbolAtLocation(location); +} +function getCallHierarchyItemName(program, node) { + if (isSourceFile(node)) { + return { text: node.fileName, pos: 0, end: 0 }; + } + if ((isFunctionDeclaration(node) || isClassDeclaration(node)) && !isNamedDeclaration(node)) { + const defaultModifier = node.modifiers && find(node.modifiers, isDefaultModifier3); + if (defaultModifier) { + return { text: "default", pos: defaultModifier.getStart(), end: defaultModifier.getEnd() }; + } + } + if (isClassStaticBlockDeclaration(node)) { + const sourceFile = node.getSourceFile(); + const pos = skipTrivia(sourceFile.text, moveRangePastModifiers(node).pos); + const end = pos + 6; + const typeChecker = program.getTypeChecker(); + const symbol = typeChecker.getSymbolAtLocation(node.parent); + const prefix = symbol ? `${typeChecker.symbolToString(symbol, node.parent)} ` : ""; + return { text: `${prefix}static {}`, pos, end }; + } + const declName = isAssignedExpression(node) ? node.parent.name : Debug.checkDefined(getNameOfDeclaration(node), "Expected call hierarchy item to have a name"); + let text = isIdentifier(declName) ? idText(declName) : isStringOrNumericLiteralLike(declName) ? declName.text : isComputedPropertyName(declName) ? isStringOrNumericLiteralLike(declName.expression) ? declName.expression.text : void 0 : void 0; + if (text === void 0) { + const typeChecker = program.getTypeChecker(); + const symbol = typeChecker.getSymbolAtLocation(declName); + if (symbol) { + text = typeChecker.symbolToString(symbol, node); + } + } + if (text === void 0) { + const printer = createPrinterWithRemoveCommentsOmitTrailingSemicolon(); + text = usingSingleLineStringWriter((writer) => printer.writeNode(4 /* Unspecified */, node, node.getSourceFile(), writer)); + } + return { text, pos: declName.getStart(), end: declName.getEnd() }; +} +function getCallHierarchItemContainerName(node) { + var _a, _b, _c, _d; + if (isAssignedExpression(node)) { + if (isPropertyDeclaration(node.parent) && isClassLike(node.parent.parent)) { + return isClassExpression(node.parent.parent) ? (_a = getAssignedName(node.parent.parent)) == null ? void 0 : _a.getText() : (_b = node.parent.parent.name) == null ? void 0 : _b.getText(); + } + if (isModuleBlock(node.parent.parent.parent.parent) && isIdentifier(node.parent.parent.parent.parent.parent.name)) { + return node.parent.parent.parent.parent.parent.name.getText(); + } + return; + } + switch (node.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + if (node.parent.kind === 211 /* ObjectLiteralExpression */) { + return (_c = getAssignedName(node.parent)) == null ? void 0 : _c.getText(); + } + return (_d = getNameOfDeclaration(node.parent)) == null ? void 0 : _d.getText(); + case 263 /* FunctionDeclaration */: + case 264 /* ClassDeclaration */: + case 268 /* ModuleDeclaration */: + if (isModuleBlock(node.parent) && isIdentifier(node.parent.parent.name)) { + return node.parent.parent.name.getText(); + } + } +} +function findImplementation(typeChecker, node) { + if (node.body) { + return node; + } + if (isConstructorDeclaration(node)) { + return getFirstConstructorWithBody(node.parent); + } + if (isFunctionDeclaration(node) || isMethodDeclaration(node)) { + const symbol = getSymbolOfCallHierarchyDeclaration(typeChecker, node); + if (symbol && symbol.valueDeclaration && isFunctionLikeDeclaration(symbol.valueDeclaration) && symbol.valueDeclaration.body) { + return symbol.valueDeclaration; + } + return void 0; + } + return node; +} +function findAllInitialDeclarations(typeChecker, node) { + const symbol = getSymbolOfCallHierarchyDeclaration(typeChecker, node); + let declarations; + if (symbol && symbol.declarations) { + const indices = indicesOf(symbol.declarations); + const keys = map(symbol.declarations, (decl) => ({ file: decl.getSourceFile().fileName, pos: decl.pos })); + indices.sort((a, b) => compareStringsCaseSensitive(keys[a].file, keys[b].file) || keys[a].pos - keys[b].pos); + const sortedDeclarations = map(indices, (i) => symbol.declarations[i]); + let lastDecl; + for (const decl of sortedDeclarations) { + if (isValidCallHierarchyDeclaration(decl)) { + if (!lastDecl || lastDecl.parent !== decl.parent || lastDecl.end !== decl.pos) { + declarations = append(declarations, decl); + } + lastDecl = decl; + } + } + } + return declarations; +} +function findImplementationOrAllInitialDeclarations(typeChecker, node) { + if (isClassStaticBlockDeclaration(node)) { + return node; + } + if (isFunctionLikeDeclaration(node)) { + return findImplementation(typeChecker, node) ?? findAllInitialDeclarations(typeChecker, node) ?? node; + } + return findAllInitialDeclarations(typeChecker, node) ?? node; +} +function resolveCallHierarchyDeclaration(program, location) { + const typeChecker = program.getTypeChecker(); + let followingSymbol = false; + while (true) { + if (isValidCallHierarchyDeclaration(location)) { + return findImplementationOrAllInitialDeclarations(typeChecker, location); + } + if (isPossibleCallHierarchyDeclaration(location)) { + const ancestor = findAncestor(location, isValidCallHierarchyDeclaration); + return ancestor && findImplementationOrAllInitialDeclarations(typeChecker, ancestor); + } + if (isDeclarationName(location)) { + if (isValidCallHierarchyDeclaration(location.parent)) { + return findImplementationOrAllInitialDeclarations(typeChecker, location.parent); + } + if (isPossibleCallHierarchyDeclaration(location.parent)) { + const ancestor = findAncestor(location.parent, isValidCallHierarchyDeclaration); + return ancestor && findImplementationOrAllInitialDeclarations(typeChecker, ancestor); + } + if (isVariableLike2(location.parent) && location.parent.initializer && isAssignedExpression(location.parent.initializer)) { + return location.parent.initializer; + } + return void 0; + } + if (isConstructorDeclaration(location)) { + if (isValidCallHierarchyDeclaration(location.parent)) { + return location.parent; + } + return void 0; + } + if (location.kind === 126 /* StaticKeyword */ && isClassStaticBlockDeclaration(location.parent)) { + location = location.parent; + continue; + } + if (isVariableDeclaration(location) && location.initializer && isAssignedExpression(location.initializer)) { + return location.initializer; + } + if (!followingSymbol) { + let symbol = typeChecker.getSymbolAtLocation(location); + if (symbol) { + if (symbol.flags & 2097152 /* Alias */) { + symbol = typeChecker.getAliasedSymbol(symbol); + } + if (symbol.valueDeclaration) { + followingSymbol = true; + location = symbol.valueDeclaration; + continue; + } + } + } + return void 0; + } +} +function createCallHierarchyItem(program, node) { + const sourceFile = node.getSourceFile(); + const name = getCallHierarchyItemName(program, node); + const containerName = getCallHierarchItemContainerName(node); + const kind = getNodeKind(node); + const kindModifiers = getNodeModifiers(node); + const span = createTextSpanFromBounds(skipTrivia( + sourceFile.text, + node.getFullStart(), + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + ), node.getEnd()); + const selectionSpan = createTextSpanFromBounds(name.pos, name.end); + return { file: sourceFile.fileName, kind, kindModifiers, name: name.text, containerName, span, selectionSpan }; +} +function isDefined(x) { + return x !== void 0; +} +function convertEntryToCallSite(entry) { + if (entry.kind === ts_FindAllReferences_exports.EntryKind.Node) { + const { node } = entry; + if (isCallOrNewExpressionTarget( + node, + /*includeElementAccess*/ + true, + /*skipPastOuterExpressions*/ + true + ) || isTaggedTemplateTag( + node, + /*includeElementAccess*/ + true, + /*skipPastOuterExpressions*/ + true + ) || isDecoratorTarget( + node, + /*includeElementAccess*/ + true, + /*skipPastOuterExpressions*/ + true + ) || isJsxOpeningLikeElementTagName( + node, + /*includeElementAccess*/ + true, + /*skipPastOuterExpressions*/ + true + ) || isRightSideOfPropertyAccess(node) || isArgumentExpressionOfElementAccess(node)) { + const sourceFile = node.getSourceFile(); + const ancestor = findAncestor(node, isValidCallHierarchyDeclaration) || sourceFile; + return { declaration: ancestor, range: createTextRangeFromNode(node, sourceFile) }; + } + } +} +function getCallSiteGroupKey(entry) { + return getNodeId(entry.declaration); +} +function createCallHierarchyIncomingCall(from, fromSpans) { + return { from, fromSpans }; +} +function convertCallSiteGroupToIncomingCall(program, entries) { + return createCallHierarchyIncomingCall(createCallHierarchyItem(program, entries[0].declaration), map(entries, (entry) => createTextSpanFromRange(entry.range))); +} +function getIncomingCalls(program, declaration, cancellationToken) { + if (isSourceFile(declaration) || isModuleDeclaration(declaration) || isClassStaticBlockDeclaration(declaration)) { + return []; + } + const location = getCallHierarchyDeclarationReferenceNode(declaration); + const calls = filter(ts_FindAllReferences_exports.findReferenceOrRenameEntries( + program, + cancellationToken, + program.getSourceFiles(), + location, + /*position*/ + 0, + { use: ts_FindAllReferences_exports.FindReferencesUse.References }, + convertEntryToCallSite + ), isDefined); + return calls ? group(calls, getCallSiteGroupKey, (entries) => convertCallSiteGroupToIncomingCall(program, entries)) : []; +} +function createCallSiteCollector(program, callSites) { + function recordCallSite(node) { + const target = isTaggedTemplateExpression(node) ? node.tag : isJsxOpeningLikeElement(node) ? node.tagName : isAccessExpression(node) ? node : isClassStaticBlockDeclaration(node) ? node : node.expression; + const declaration = resolveCallHierarchyDeclaration(program, target); + if (declaration) { + const range = createTextRangeFromNode(target, node.getSourceFile()); + if (isArray(declaration)) { + for (const decl of declaration) { + callSites.push({ declaration: decl, range }); + } + } else { + callSites.push({ declaration, range }); + } + } + } + function collect(node) { + if (!node) return; + if (node.flags & 33554432 /* Ambient */) { + return; + } + if (isValidCallHierarchyDeclaration(node)) { + if (isClassLike(node)) { + for (const member of node.members) { + if (member.name && isComputedPropertyName(member.name)) { + collect(member.name.expression); + } + } + } + return; + } + switch (node.kind) { + case 80 /* Identifier */: + case 272 /* ImportEqualsDeclaration */: + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + return; + case 176 /* ClassStaticBlockDeclaration */: + recordCallSite(node); + return; + case 217 /* TypeAssertionExpression */: + case 235 /* AsExpression */: + collect(node.expression); + return; + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + collect(node.name); + collect(node.initializer); + return; + case 214 /* CallExpression */: + recordCallSite(node); + collect(node.expression); + forEach(node.arguments, collect); + return; + case 215 /* NewExpression */: + recordCallSite(node); + collect(node.expression); + forEach(node.arguments, collect); + return; + case 216 /* TaggedTemplateExpression */: + recordCallSite(node); + collect(node.tag); + collect(node.template); + return; + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + recordCallSite(node); + collect(node.tagName); + collect(node.attributes); + return; + case 171 /* Decorator */: + recordCallSite(node); + collect(node.expression); + return; + case 212 /* PropertyAccessExpression */: + case 213 /* ElementAccessExpression */: + recordCallSite(node); + forEachChild(node, collect); + break; + case 239 /* SatisfiesExpression */: + collect(node.expression); + return; + } + if (isPartOfTypeNode(node)) { + return; + } + forEachChild(node, collect); + } + return collect; +} +function collectCallSitesOfSourceFile(node, collect) { + forEach(node.statements, collect); +} +function collectCallSitesOfModuleDeclaration(node, collect) { + if (!hasSyntacticModifier(node, 128 /* Ambient */) && node.body && isModuleBlock(node.body)) { + forEach(node.body.statements, collect); + } +} +function collectCallSitesOfFunctionLikeDeclaration(typeChecker, node, collect) { + const implementation = findImplementation(typeChecker, node); + if (implementation) { + forEach(implementation.parameters, collect); + collect(implementation.body); + } +} +function collectCallSitesOfClassStaticBlockDeclaration(node, collect) { + collect(node.body); +} +function collectCallSitesOfClassLikeDeclaration(node, collect) { + forEach(node.modifiers, collect); + const heritage = getClassExtendsHeritageElement(node); + if (heritage) { + collect(heritage.expression); + } + for (const member of node.members) { + if (canHaveModifiers(member)) { + forEach(member.modifiers, collect); + } + if (isPropertyDeclaration(member)) { + collect(member.initializer); + } else if (isConstructorDeclaration(member) && member.body) { + forEach(member.parameters, collect); + collect(member.body); + } else if (isClassStaticBlockDeclaration(member)) { + collect(member); + } + } +} +function collectCallSites(program, node) { + const callSites = []; + const collect = createCallSiteCollector(program, callSites); + switch (node.kind) { + case 308 /* SourceFile */: + collectCallSitesOfSourceFile(node, collect); + break; + case 268 /* ModuleDeclaration */: + collectCallSitesOfModuleDeclaration(node, collect); + break; + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + collectCallSitesOfFunctionLikeDeclaration(program.getTypeChecker(), node, collect); + break; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + collectCallSitesOfClassLikeDeclaration(node, collect); + break; + case 176 /* ClassStaticBlockDeclaration */: + collectCallSitesOfClassStaticBlockDeclaration(node, collect); + break; + default: + Debug.assertNever(node); + } + return callSites; +} +function createCallHierarchyOutgoingCall(to, fromSpans) { + return { to, fromSpans }; +} +function convertCallSiteGroupToOutgoingCall(program, entries) { + return createCallHierarchyOutgoingCall(createCallHierarchyItem(program, entries[0].declaration), map(entries, (entry) => createTextSpanFromRange(entry.range))); +} +function getOutgoingCalls(program, declaration) { + if (declaration.flags & 33554432 /* Ambient */ || isMethodSignature(declaration)) { + return []; + } + return group(collectCallSites(program, declaration), getCallSiteGroupKey, (entries) => convertCallSiteGroupToOutgoingCall(program, entries)); +} + +// src/services/_namespaces/ts.classifier.ts +var ts_classifier_exports = {}; +__export(ts_classifier_exports, { + v2020: () => ts_classifier_v2020_exports +}); + +// src/services/_namespaces/ts.classifier.v2020.ts +var ts_classifier_v2020_exports = {}; +__export(ts_classifier_v2020_exports, { + TokenEncodingConsts: () => TokenEncodingConsts, + TokenModifier: () => TokenModifier, + TokenType: () => TokenType, + getEncodedSemanticClassifications: () => getEncodedSemanticClassifications2, + getSemanticClassifications: () => getSemanticClassifications2 +}); + +// src/services/_namespaces/ts.codefix.ts +var ts_codefix_exports = {}; +__export(ts_codefix_exports, { + PreserveOptionalFlags: () => PreserveOptionalFlags, + addNewNodeForMemberSymbol: () => addNewNodeForMemberSymbol, + codeFixAll: () => codeFixAll, + createCodeFixAction: () => createCodeFixAction, + createCodeFixActionMaybeFixAll: () => createCodeFixActionMaybeFixAll, + createCodeFixActionWithoutFixAll: () => createCodeFixActionWithoutFixAll, + createCombinedCodeActions: () => createCombinedCodeActions, + createFileTextChanges: () => createFileTextChanges, + createImportAdder: () => createImportAdder, + createImportSpecifierResolver: () => createImportSpecifierResolver, + createMissingMemberNodes: () => createMissingMemberNodes, + createSignatureDeclarationFromCallExpression: () => createSignatureDeclarationFromCallExpression, + createSignatureDeclarationFromSignature: () => createSignatureDeclarationFromSignature, + createStubbedBody: () => createStubbedBody, + eachDiagnostic: () => eachDiagnostic, + findAncestorMatchingSpan: () => findAncestorMatchingSpan, + generateAccessorFromProperty: () => generateAccessorFromProperty, + getAccessorConvertiblePropertyAtPosition: () => getAccessorConvertiblePropertyAtPosition, + getAllFixes: () => getAllFixes, + getFixes: () => getFixes, + getImportCompletionAction: () => getImportCompletionAction, + getImportKind: () => getImportKind, + getJSDocTypedefNodes: () => getJSDocTypedefNodes, + getNoopSymbolTrackerWithResolver: () => getNoopSymbolTrackerWithResolver, + getPromoteTypeOnlyCompletionAction: () => getPromoteTypeOnlyCompletionAction, + getSupportedErrorCodes: () => getSupportedErrorCodes, + importFixName: () => importFixName, + importSymbols: () => importSymbols, + parameterShouldGetTypeFromJSDoc: () => parameterShouldGetTypeFromJSDoc, + registerCodeFix: () => registerCodeFix, + setJsonCompilerOptionValue: () => setJsonCompilerOptionValue, + setJsonCompilerOptionValues: () => setJsonCompilerOptionValues, + tryGetAutoImportableReferenceFromTypeNode: () => tryGetAutoImportableReferenceFromTypeNode, + typeNodeToAutoImportableTypeNode: () => typeNodeToAutoImportableTypeNode, + typePredicateToAutoImportableTypeNode: () => typePredicateToAutoImportableTypeNode, + typeToAutoImportableTypeNode: () => typeToAutoImportableTypeNode, + typeToMinimizedReferenceType: () => typeToMinimizedReferenceType +}); + +// src/services/codeFixProvider.ts +var errorCodeToFixes = createMultiMap(); +var fixIdToRegistration = /* @__PURE__ */ new Map(); +function createCodeFixActionWithoutFixAll(fixName8, changes, description3) { + return createCodeFixActionWorker( + fixName8, + diagnosticToString(description3), + changes, + /*fixId*/ + void 0, + /*fixAllDescription*/ + void 0 + ); +} +function createCodeFixAction(fixName8, changes, description3, fixId56, fixAllDescription, command) { + return createCodeFixActionWorker(fixName8, diagnosticToString(description3), changes, fixId56, diagnosticToString(fixAllDescription), command); +} +function createCodeFixActionMaybeFixAll(fixName8, changes, description3, fixId56, fixAllDescription, command) { + return createCodeFixActionWorker(fixName8, diagnosticToString(description3), changes, fixId56, fixAllDescription && diagnosticToString(fixAllDescription), command); +} +function createCodeFixActionWorker(fixName8, description3, changes, fixId56, fixAllDescription, command) { + return { fixName: fixName8, description: description3, changes, fixId: fixId56, fixAllDescription, commands: command ? [command] : void 0 }; +} +function registerCodeFix(reg) { + for (const error2 of reg.errorCodes) { + errorCodeToFixesArray = void 0; + errorCodeToFixes.add(String(error2), reg); + } + if (reg.fixIds) { + for (const fixId56 of reg.fixIds) { + Debug.assert(!fixIdToRegistration.has(fixId56)); + fixIdToRegistration.set(fixId56, reg); + } + } +} +var errorCodeToFixesArray; +function getSupportedErrorCodes() { + return errorCodeToFixesArray ?? (errorCodeToFixesArray = arrayFrom(errorCodeToFixes.keys())); +} +function removeFixIdIfFixAllUnavailable(registration, diagnostics) { + const { errorCodes: errorCodes68 } = registration; + let maybeFixableDiagnostics = 0; + for (const diag2 of diagnostics) { + if (contains(errorCodes68, diag2.code)) maybeFixableDiagnostics++; + if (maybeFixableDiagnostics > 1) break; + } + const fixAllUnavailable = maybeFixableDiagnostics < 2; + return ({ fixId: fixId56, fixAllDescription, ...action }) => { + return fixAllUnavailable ? action : { ...action, fixId: fixId56, fixAllDescription }; + }; +} +function getFixes(context) { + const diagnostics = getDiagnostics(context); + const registrations = errorCodeToFixes.get(String(context.errorCode)); + return flatMap(registrations, (f) => map(f.getCodeActions(context), removeFixIdIfFixAllUnavailable(f, diagnostics))); +} +function getAllFixes(context) { + return fixIdToRegistration.get(cast(context.fixId, isString)).getAllCodeActions(context); +} +function createCombinedCodeActions(changes, commands) { + return { changes, commands }; +} +function createFileTextChanges(fileName, textChanges2) { + return { fileName, textChanges: textChanges2 }; +} +function codeFixAll(context, errorCodes68, use) { + const commands = []; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => eachDiagnostic(context, errorCodes68, (diag2) => use(t, diag2, commands))); + return createCombinedCodeActions(changes, commands.length === 0 ? void 0 : commands); +} +function eachDiagnostic(context, errorCodes68, cb) { + for (const diag2 of getDiagnostics(context)) { + if (contains(errorCodes68, diag2.code)) { + cb(diag2); + } + } +} +function getDiagnostics({ program, sourceFile, cancellationToken }) { + const diagnostics = [ + ...program.getSemanticDiagnostics(sourceFile, cancellationToken), + ...program.getSyntacticDiagnostics(sourceFile, cancellationToken), + ...computeSuggestionDiagnostics(sourceFile, program, cancellationToken) + ]; + if (getEmitDeclarations(program.getCompilerOptions())) { + diagnostics.push( + ...program.getDeclarationDiagnostics(sourceFile, cancellationToken) + ); + } + return diagnostics; +} + +// src/services/codefixes/addConvertToUnknownForNonOverlappingTypes.ts +var fixId = "addConvertToUnknownForNonOverlappingTypes"; +var errorCodes = [Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first.code]; +registerCodeFix({ + errorCodes, + getCodeActions: function getCodeActionsToAddConvertToUnknownForNonOverlappingTypes(context) { + const assertion = getAssertion(context.sourceFile, context.span.start); + if (assertion === void 0) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange(t, context.sourceFile, assertion)); + return [createCodeFixAction(fixId, changes, Diagnostics.Add_unknown_conversion_for_non_overlapping_types, fixId, Diagnostics.Add_unknown_to_all_conversions_of_non_overlapping_types)]; + }, + fixIds: [fixId], + getAllCodeActions: (context) => codeFixAll(context, errorCodes, (changes, diag2) => { + const assertion = getAssertion(diag2.file, diag2.start); + if (assertion) { + makeChange(changes, diag2.file, assertion); + } + }) +}); +function makeChange(changeTracker, sourceFile, assertion) { + const replacement = isAsExpression(assertion) ? factory.createAsExpression(assertion.expression, factory.createKeywordTypeNode(159 /* UnknownKeyword */)) : factory.createTypeAssertion(factory.createKeywordTypeNode(159 /* UnknownKeyword */), assertion.expression); + changeTracker.replaceNode(sourceFile, assertion.expression, replacement); +} +function getAssertion(sourceFile, pos) { + if (isInJSFile(sourceFile)) return void 0; + return findAncestor(getTokenAtPosition(sourceFile, pos), (n) => isAsExpression(n) || isTypeAssertionExpression(n)); +} + +// src/services/codefixes/addEmptyExportDeclaration.ts +registerCodeFix({ + errorCodes: [ + Diagnostics.await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code, + Diagnostics.await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code, + Diagnostics.for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module.code + ], + getCodeActions: function getCodeActionsToAddEmptyExportDeclaration(context) { + const { sourceFile } = context; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changes2) => { + const exportDeclaration = factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports([]), + /*moduleSpecifier*/ + void 0 + ); + changes2.insertNodeAtEndOfScope(sourceFile, sourceFile, exportDeclaration); + }); + return [createCodeFixActionWithoutFixAll("addEmptyExportDeclaration", changes, Diagnostics.Add_export_to_make_this_file_into_a_module)]; + } +}); + +// src/services/codefixes/addMissingAsync.ts +var fixId2 = "addMissingAsync"; +var errorCodes2 = [ + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code, + Diagnostics.Type_0_is_not_assignable_to_type_1.code, + Diagnostics.Type_0_is_not_comparable_to_type_1.code +]; +registerCodeFix({ + fixIds: [fixId2], + errorCodes: errorCodes2, + getCodeActions: function getCodeActionsToAddMissingAsync(context) { + const { sourceFile, errorCode, cancellationToken, program, span } = context; + const diagnostic = find(program.getTypeChecker().getDiagnostics(sourceFile, cancellationToken), getIsMatchingAsyncError(span, errorCode)); + const directSpan = diagnostic && diagnostic.relatedInformation && find(diagnostic.relatedInformation, (r) => r.code === Diagnostics.Did_you_mean_to_mark_this_function_as_async.code); + const decl = getFixableErrorSpanDeclaration(sourceFile, directSpan); + if (!decl) { + return; + } + const trackChanges = (cb) => ts_textChanges_exports.ChangeTracker.with(context, cb); + return [getFix(context, decl, trackChanges)]; + }, + getAllCodeActions: (context) => { + const { sourceFile } = context; + const fixedDeclarations = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes2, (t, diagnostic) => { + const span = diagnostic.relatedInformation && find(diagnostic.relatedInformation, (r) => r.code === Diagnostics.Did_you_mean_to_mark_this_function_as_async.code); + const decl = getFixableErrorSpanDeclaration(sourceFile, span); + if (!decl) { + return; + } + const trackChanges = (cb) => (cb(t), []); + return getFix(context, decl, trackChanges, fixedDeclarations); + }); + } +}); +function getFix(context, decl, trackChanges, fixedDeclarations) { + const changes = trackChanges((t) => makeChange2(t, context.sourceFile, decl, fixedDeclarations)); + return createCodeFixAction(fixId2, changes, Diagnostics.Add_async_modifier_to_containing_function, fixId2, Diagnostics.Add_all_missing_async_modifiers); +} +function makeChange2(changeTracker, sourceFile, insertionSite, fixedDeclarations) { + if (fixedDeclarations) { + if (fixedDeclarations.has(getNodeId(insertionSite))) { + return; + } + } + fixedDeclarations == null ? void 0 : fixedDeclarations.add(getNodeId(insertionSite)); + const cloneWithModifier = factory.replaceModifiers( + getSynthesizedDeepClone( + insertionSite, + /*includeTrivia*/ + true + ), + factory.createNodeArray(factory.createModifiersFromModifierFlags(getSyntacticModifierFlags(insertionSite) | 1024 /* Async */)) + ); + changeTracker.replaceNode( + sourceFile, + insertionSite, + cloneWithModifier + ); +} +function getFixableErrorSpanDeclaration(sourceFile, span) { + if (!span) return void 0; + const token = getTokenAtPosition(sourceFile, span.start); + const decl = findAncestor(token, (node) => { + if (node.getStart(sourceFile) < span.start || node.getEnd() > textSpanEnd(span)) { + return "quit"; + } + return (isArrowFunction(node) || isMethodDeclaration(node) || isFunctionExpression(node) || isFunctionDeclaration(node)) && textSpansEqual(span, createTextSpanFromNode(node, sourceFile)); + }); + return decl; +} +function getIsMatchingAsyncError(span, errorCode) { + return ({ start, length: length2, relatedInformation, code }) => isNumber(start) && isNumber(length2) && textSpansEqual({ start, length: length2 }, span) && code === errorCode && !!relatedInformation && some(relatedInformation, (related) => related.code === Diagnostics.Did_you_mean_to_mark_this_function_as_async.code); +} + +// src/services/codefixes/addMissingAwait.ts +var fixId3 = "addMissingAwait"; +var propertyAccessCode = Diagnostics.Property_0_does_not_exist_on_type_1.code; +var callableConstructableErrorCodes = [ + Diagnostics.This_expression_is_not_callable.code, + Diagnostics.This_expression_is_not_constructable.code +]; +var errorCodes3 = [ + Diagnostics.An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type.code, + Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type.code, + Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type.code, + Diagnostics.Operator_0_cannot_be_applied_to_type_1.code, + Diagnostics.Operator_0_cannot_be_applied_to_types_1_and_2.code, + Diagnostics.This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap.code, + Diagnostics.This_condition_will_always_return_true_since_this_0_is_always_defined.code, + Diagnostics.Type_0_is_not_an_array_type.code, + Diagnostics.Type_0_is_not_an_array_type_or_a_string_type.code, + Diagnostics.Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es2015_or_higher.code, + Diagnostics.Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator.code, + Diagnostics.Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator.code, + Diagnostics.Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator.code, + Diagnostics.Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator.code, + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code, + propertyAccessCode, + ...callableConstructableErrorCodes +]; +registerCodeFix({ + fixIds: [fixId3], + errorCodes: errorCodes3, + getCodeActions: function getCodeActionsToAddMissingAwait(context) { + const { sourceFile, errorCode, span, cancellationToken, program } = context; + const expression = getAwaitErrorSpanExpression(sourceFile, errorCode, span, cancellationToken, program); + if (!expression) { + return; + } + const checker = context.program.getTypeChecker(); + const trackChanges = (cb) => ts_textChanges_exports.ChangeTracker.with(context, cb); + return compact([ + getDeclarationSiteFix(context, expression, errorCode, checker, trackChanges), + getUseSiteFix(context, expression, errorCode, checker, trackChanges) + ]); + }, + getAllCodeActions: (context) => { + const { sourceFile, program, cancellationToken } = context; + const checker = context.program.getTypeChecker(); + const fixedDeclarations = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes3, (t, diagnostic) => { + const expression = getAwaitErrorSpanExpression(sourceFile, diagnostic.code, diagnostic, cancellationToken, program); + if (!expression) { + return; + } + const trackChanges = (cb) => (cb(t), []); + return getDeclarationSiteFix(context, expression, diagnostic.code, checker, trackChanges, fixedDeclarations) || getUseSiteFix(context, expression, diagnostic.code, checker, trackChanges, fixedDeclarations); + }); + } +}); +function getAwaitErrorSpanExpression(sourceFile, errorCode, span, cancellationToken, program) { + const expression = getFixableErrorSpanExpression(sourceFile, span); + return expression && isMissingAwaitError(sourceFile, errorCode, span, cancellationToken, program) && isInsideAwaitableBody(expression) ? expression : void 0; +} +function getDeclarationSiteFix(context, expression, errorCode, checker, trackChanges, fixedDeclarations) { + const { sourceFile, program, cancellationToken } = context; + const awaitableInitializers = findAwaitableInitializers(expression, sourceFile, cancellationToken, program, checker); + if (awaitableInitializers) { + const initializerChanges = trackChanges((t) => { + forEach(awaitableInitializers.initializers, ({ expression: expression2 }) => makeChange3(t, errorCode, sourceFile, checker, expression2, fixedDeclarations)); + if (fixedDeclarations && awaitableInitializers.needsSecondPassForFixAll) { + makeChange3(t, errorCode, sourceFile, checker, expression, fixedDeclarations); + } + }); + return createCodeFixActionWithoutFixAll( + "addMissingAwaitToInitializer", + initializerChanges, + awaitableInitializers.initializers.length === 1 ? [Diagnostics.Add_await_to_initializer_for_0, awaitableInitializers.initializers[0].declarationSymbol.name] : Diagnostics.Add_await_to_initializers + ); + } +} +function getUseSiteFix(context, expression, errorCode, checker, trackChanges, fixedDeclarations) { + const changes = trackChanges((t) => makeChange3(t, errorCode, context.sourceFile, checker, expression, fixedDeclarations)); + return createCodeFixAction(fixId3, changes, Diagnostics.Add_await, fixId3, Diagnostics.Fix_all_expressions_possibly_missing_await); +} +function isMissingAwaitError(sourceFile, errorCode, span, cancellationToken, program) { + const checker = program.getTypeChecker(); + const diagnostics = checker.getDiagnostics(sourceFile, cancellationToken); + return some(diagnostics, ({ start, length: length2, relatedInformation, code }) => isNumber(start) && isNumber(length2) && textSpansEqual({ start, length: length2 }, span) && code === errorCode && !!relatedInformation && some(relatedInformation, (related) => related.code === Diagnostics.Did_you_forget_to_use_await.code)); +} +function findAwaitableInitializers(expression, sourceFile, cancellationToken, program, checker) { + const identifiers = getIdentifiersFromErrorSpanExpression(expression, checker); + if (!identifiers) { + return; + } + let isCompleteFix = identifiers.isCompleteFix; + let initializers; + for (const identifier of identifiers.identifiers) { + const symbol = checker.getSymbolAtLocation(identifier); + if (!symbol) { + continue; + } + const declaration = tryCast(symbol.valueDeclaration, isVariableDeclaration); + const variableName = declaration && tryCast(declaration.name, isIdentifier); + const variableStatement = getAncestor(declaration, 244 /* VariableStatement */); + if (!declaration || !variableStatement || declaration.type || !declaration.initializer || variableStatement.getSourceFile() !== sourceFile || hasSyntacticModifier(variableStatement, 32 /* Export */) || !variableName || !isInsideAwaitableBody(declaration.initializer)) { + isCompleteFix = false; + continue; + } + const diagnostics = program.getSemanticDiagnostics(sourceFile, cancellationToken); + const isUsedElsewhere = ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(variableName, checker, sourceFile, (reference) => { + return identifier !== reference && !symbolReferenceIsAlsoMissingAwait(reference, diagnostics, sourceFile, checker); + }); + if (isUsedElsewhere) { + isCompleteFix = false; + continue; + } + (initializers || (initializers = [])).push({ + expression: declaration.initializer, + declarationSymbol: symbol + }); + } + return initializers && { + initializers, + needsSecondPassForFixAll: !isCompleteFix + }; +} +function getIdentifiersFromErrorSpanExpression(expression, checker) { + if (isPropertyAccessExpression(expression.parent) && isIdentifier(expression.parent.expression)) { + return { identifiers: [expression.parent.expression], isCompleteFix: true }; + } + if (isIdentifier(expression)) { + return { identifiers: [expression], isCompleteFix: true }; + } + if (isBinaryExpression(expression)) { + let sides; + let isCompleteFix = true; + for (const side of [expression.left, expression.right]) { + const type = checker.getTypeAtLocation(side); + if (checker.getPromisedTypeOfPromise(type)) { + if (!isIdentifier(side)) { + isCompleteFix = false; + continue; + } + (sides || (sides = [])).push(side); + } + } + return sides && { identifiers: sides, isCompleteFix }; + } +} +function symbolReferenceIsAlsoMissingAwait(reference, diagnostics, sourceFile, checker) { + const errorNode = isPropertyAccessExpression(reference.parent) ? reference.parent.name : isBinaryExpression(reference.parent) ? reference.parent : reference; + const diagnostic = find(diagnostics, (diagnostic2) => diagnostic2.start === errorNode.getStart(sourceFile) && diagnostic2.start + diagnostic2.length === errorNode.getEnd()); + return diagnostic && contains(errorCodes3, diagnostic.code) || // A Promise is usually not correct in a binary expression (it's not valid + // in an arithmetic expression and an equality comparison seems unusual), + // but if the other side of the binary expression has an error, the side + // is typed `any` which will squash the error that would identify this + // Promise as an invalid operand. So if the whole binary expression is + // typed `any` as a result, there is a strong likelihood that this Promise + // is accidentally missing `await`. + checker.getTypeAtLocation(errorNode).flags & 1 /* Any */; +} +function isInsideAwaitableBody(node) { + return node.flags & 65536 /* AwaitContext */ || !!findAncestor(node, (ancestor) => ancestor.parent && isArrowFunction(ancestor.parent) && ancestor.parent.body === ancestor || isBlock(ancestor) && (ancestor.parent.kind === 263 /* FunctionDeclaration */ || ancestor.parent.kind === 219 /* FunctionExpression */ || ancestor.parent.kind === 220 /* ArrowFunction */ || ancestor.parent.kind === 175 /* MethodDeclaration */)); +} +function makeChange3(changeTracker, errorCode, sourceFile, checker, insertionSite, fixedDeclarations) { + if (isForOfStatement(insertionSite.parent) && !insertionSite.parent.awaitModifier) { + const exprType = checker.getTypeAtLocation(insertionSite); + const asyncIter = checker.getAnyAsyncIterableType(); + if (asyncIter && checker.isTypeAssignableTo(exprType, asyncIter)) { + const forOf = insertionSite.parent; + changeTracker.replaceNode(sourceFile, forOf, factory.updateForOfStatement(forOf, factory.createToken(135 /* AwaitKeyword */), forOf.initializer, forOf.expression, forOf.statement)); + return; + } + } + if (isBinaryExpression(insertionSite)) { + for (const side of [insertionSite.left, insertionSite.right]) { + if (fixedDeclarations && isIdentifier(side)) { + const symbol = checker.getSymbolAtLocation(side); + if (symbol && fixedDeclarations.has(getSymbolId(symbol))) { + continue; + } + } + const type = checker.getTypeAtLocation(side); + const newNode = checker.getPromisedTypeOfPromise(type) ? factory.createAwaitExpression(side) : side; + changeTracker.replaceNode(sourceFile, side, newNode); + } + } else if (errorCode === propertyAccessCode && isPropertyAccessExpression(insertionSite.parent)) { + if (fixedDeclarations && isIdentifier(insertionSite.parent.expression)) { + const symbol = checker.getSymbolAtLocation(insertionSite.parent.expression); + if (symbol && fixedDeclarations.has(getSymbolId(symbol))) { + return; + } + } + changeTracker.replaceNode( + sourceFile, + insertionSite.parent.expression, + factory.createParenthesizedExpression(factory.createAwaitExpression(insertionSite.parent.expression)) + ); + insertLeadingSemicolonIfNeeded(changeTracker, insertionSite.parent.expression, sourceFile); + } else if (contains(callableConstructableErrorCodes, errorCode) && isCallOrNewExpression(insertionSite.parent)) { + if (fixedDeclarations && isIdentifier(insertionSite)) { + const symbol = checker.getSymbolAtLocation(insertionSite); + if (symbol && fixedDeclarations.has(getSymbolId(symbol))) { + return; + } + } + changeTracker.replaceNode(sourceFile, insertionSite, factory.createParenthesizedExpression(factory.createAwaitExpression(insertionSite))); + insertLeadingSemicolonIfNeeded(changeTracker, insertionSite, sourceFile); + } else { + if (fixedDeclarations && isVariableDeclaration(insertionSite.parent) && isIdentifier(insertionSite.parent.name)) { + const symbol = checker.getSymbolAtLocation(insertionSite.parent.name); + if (symbol && !tryAddToSet(fixedDeclarations, getSymbolId(symbol))) { + return; + } + } + changeTracker.replaceNode(sourceFile, insertionSite, factory.createAwaitExpression(insertionSite)); + } +} +function insertLeadingSemicolonIfNeeded(changeTracker, beforeNode, sourceFile) { + const precedingToken = findPrecedingToken(beforeNode.pos, sourceFile); + if (precedingToken && positionIsASICandidate(precedingToken.end, precedingToken.parent, sourceFile)) { + changeTracker.insertText(sourceFile, beforeNode.getStart(sourceFile), ";"); + } +} + +// src/services/codefixes/addMissingConst.ts +var fixId4 = "addMissingConst"; +var errorCodes4 = [ + Diagnostics.Cannot_find_name_0.code, + Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code +]; +registerCodeFix({ + errorCodes: errorCodes4, + getCodeActions: function getCodeActionsToAddMissingConst(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange4(t, context.sourceFile, context.span.start, context.program)); + if (changes.length > 0) { + return [createCodeFixAction(fixId4, changes, Diagnostics.Add_const_to_unresolved_variable, fixId4, Diagnostics.Add_const_to_all_unresolved_variables)]; + } + }, + fixIds: [fixId4], + getAllCodeActions: (context) => { + const fixedNodes = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes4, (changes, diag2) => makeChange4(changes, diag2.file, diag2.start, context.program, fixedNodes)); + } +}); +function makeChange4(changeTracker, sourceFile, pos, program, fixedNodes) { + const token = getTokenAtPosition(sourceFile, pos); + const forInitializer = findAncestor(token, (node) => isForInOrOfStatement(node.parent) ? node.parent.initializer === node : isPossiblyPartOfDestructuring(node) ? false : "quit"); + if (forInitializer) return applyChange(changeTracker, forInitializer, sourceFile, fixedNodes); + const parent2 = token.parent; + if (isBinaryExpression(parent2) && parent2.operatorToken.kind === 64 /* EqualsToken */ && isExpressionStatement(parent2.parent)) { + return applyChange(changeTracker, token, sourceFile, fixedNodes); + } + if (isArrayLiteralExpression(parent2)) { + const checker = program.getTypeChecker(); + if (!every(parent2.elements, (element) => arrayElementCouldBeVariableDeclaration(element, checker))) { + return; + } + return applyChange(changeTracker, parent2, sourceFile, fixedNodes); + } + const commaExpression = findAncestor(token, (node) => isExpressionStatement(node.parent) ? true : isPossiblyPartOfCommaSeperatedInitializer(node) ? false : "quit"); + if (commaExpression) { + const checker = program.getTypeChecker(); + if (!expressionCouldBeVariableDeclaration(commaExpression, checker)) { + return; + } + return applyChange(changeTracker, commaExpression, sourceFile, fixedNodes); + } +} +function applyChange(changeTracker, initializer, sourceFile, fixedNodes) { + if (!fixedNodes || tryAddToSet(fixedNodes, initializer)) { + changeTracker.insertModifierBefore(sourceFile, 87 /* ConstKeyword */, initializer); + } +} +function isPossiblyPartOfDestructuring(node) { + switch (node.kind) { + case 80 /* Identifier */: + case 210 /* ArrayLiteralExpression */: + case 211 /* ObjectLiteralExpression */: + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + return true; + default: + return false; + } +} +function arrayElementCouldBeVariableDeclaration(expression, checker) { + const identifier = isIdentifier(expression) ? expression : isAssignmentExpression( + expression, + /*excludeCompoundAssignment*/ + true + ) && isIdentifier(expression.left) ? expression.left : void 0; + return !!identifier && !checker.getSymbolAtLocation(identifier); +} +function isPossiblyPartOfCommaSeperatedInitializer(node) { + switch (node.kind) { + case 80 /* Identifier */: + case 227 /* BinaryExpression */: + case 28 /* CommaToken */: + return true; + default: + return false; + } +} +function expressionCouldBeVariableDeclaration(expression, checker) { + if (!isBinaryExpression(expression)) { + return false; + } + if (expression.operatorToken.kind === 28 /* CommaToken */) { + return every([expression.left, expression.right], (expression2) => expressionCouldBeVariableDeclaration(expression2, checker)); + } + return expression.operatorToken.kind === 64 /* EqualsToken */ && isIdentifier(expression.left) && !checker.getSymbolAtLocation(expression.left); +} + +// src/services/codefixes/addMissingDeclareProperty.ts +var fixId5 = "addMissingDeclareProperty"; +var errorCodes5 = [ + Diagnostics.Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_add_a_declare_modifier_or_remove_the_redundant_declaration.code +]; +registerCodeFix({ + errorCodes: errorCodes5, + getCodeActions: function getCodeActionsToAddMissingDeclareOnProperty(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange5(t, context.sourceFile, context.span.start)); + if (changes.length > 0) { + return [createCodeFixAction(fixId5, changes, Diagnostics.Prefix_with_declare, fixId5, Diagnostics.Prefix_all_incorrect_property_declarations_with_declare)]; + } + }, + fixIds: [fixId5], + getAllCodeActions: (context) => { + const fixedNodes = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes5, (changes, diag2) => makeChange5(changes, diag2.file, diag2.start, fixedNodes)); + } +}); +function makeChange5(changeTracker, sourceFile, pos, fixedNodes) { + const token = getTokenAtPosition(sourceFile, pos); + if (!isIdentifier(token)) { + return; + } + const declaration = token.parent; + if (declaration.kind === 173 /* PropertyDeclaration */ && (!fixedNodes || tryAddToSet(fixedNodes, declaration))) { + changeTracker.insertModifierBefore(sourceFile, 138 /* DeclareKeyword */, declaration); + } +} + +// src/services/codefixes/addMissingInvocationForDecorator.ts +var fixId6 = "addMissingInvocationForDecorator"; +var errorCodes6 = [Diagnostics._0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write_0.code]; +registerCodeFix({ + errorCodes: errorCodes6, + getCodeActions: function getCodeActionsToAddMissingInvocationForDecorator(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange6(t, context.sourceFile, context.span.start)); + return [createCodeFixAction(fixId6, changes, Diagnostics.Call_decorator_expression, fixId6, Diagnostics.Add_to_all_uncalled_decorators)]; + }, + fixIds: [fixId6], + getAllCodeActions: (context) => codeFixAll(context, errorCodes6, (changes, diag2) => makeChange6(changes, diag2.file, diag2.start)) +}); +function makeChange6(changeTracker, sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + const decorator = findAncestor(token, isDecorator); + Debug.assert(!!decorator, "Expected position to be owned by a decorator."); + const replacement = factory.createCallExpression( + decorator.expression, + /*typeArguments*/ + void 0, + /*argumentsArray*/ + void 0 + ); + changeTracker.replaceNode(sourceFile, decorator.expression, replacement); +} + +// src/services/codefixes/addMissingResolutionModeImportAttribute.ts +var fixId7 = "addMissingResolutionModeImportAttribute"; +var errorCodes7 = [ + Diagnostics.Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute.code, + Diagnostics.Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute.code +]; +registerCodeFix({ + errorCodes: errorCodes7, + getCodeActions: function getCodeActionsToAddMissingResolutionModeImportAttribute(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange7(t, context.sourceFile, context.span.start, context.program, context.host, context.preferences)); + return [createCodeFixAction(fixId7, changes, Diagnostics.Add_resolution_mode_import_attribute, fixId7, Diagnostics.Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it)]; + }, + fixIds: [fixId7], + getAllCodeActions: (context) => codeFixAll(context, errorCodes7, (changes, diag2) => makeChange7(changes, diag2.file, diag2.start, context.program, context.host, context.preferences)) +}); +function makeChange7(changeTracker, sourceFile, pos, program, host, preferences) { + var _a, _b, _c; + const token = getTokenAtPosition(sourceFile, pos); + const importNode = findAncestor(token, or(isImportDeclaration, isImportTypeNode)); + Debug.assert(!!importNode, "Expected position to be owned by an ImportDeclaration or ImportType."); + const useSingleQuotes = getQuotePreference(sourceFile, preferences) === 0 /* Single */; + const moduleSpecifier = tryGetModuleSpecifierFromDeclaration(importNode); + const canUseImportMode = !moduleSpecifier || ((_a = resolveModuleName( + moduleSpecifier.text, + sourceFile.fileName, + program.getCompilerOptions(), + host, + program.getModuleResolutionCache(), + /*redirectedReference*/ + void 0, + 99 /* ESNext */ + ).resolvedModule) == null ? void 0 : _a.resolvedFileName) === ((_c = (_b = program.getResolvedModuleFromModuleSpecifier( + moduleSpecifier, + sourceFile + )) == null ? void 0 : _b.resolvedModule) == null ? void 0 : _c.resolvedFileName); + const attributes = importNode.attributes ? factory.updateImportAttributes( + importNode.attributes, + factory.createNodeArray([ + ...importNode.attributes.elements, + factory.createImportAttribute( + factory.createStringLiteral("resolution-mode", useSingleQuotes), + factory.createStringLiteral(canUseImportMode ? "import" : "require", useSingleQuotes) + ) + ], importNode.attributes.elements.hasTrailingComma), + importNode.attributes.multiLine + ) : factory.createImportAttributes( + factory.createNodeArray([ + factory.createImportAttribute( + factory.createStringLiteral("resolution-mode", useSingleQuotes), + factory.createStringLiteral(canUseImportMode ? "import" : "require", useSingleQuotes) + ) + ]) + ); + if (importNode.kind === 273 /* ImportDeclaration */) { + changeTracker.replaceNode( + sourceFile, + importNode, + factory.updateImportDeclaration( + importNode, + importNode.modifiers, + importNode.importClause, + importNode.moduleSpecifier, + attributes + ) + ); + } else { + changeTracker.replaceNode( + sourceFile, + importNode, + factory.updateImportTypeNode( + importNode, + importNode.argument, + attributes, + importNode.qualifier, + importNode.typeArguments + ) + ); + } +} + +// src/services/codefixes/addNameToNamelessParameter.ts +var fixId8 = "addNameToNamelessParameter"; +var errorCodes8 = [Diagnostics.Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1.code]; +registerCodeFix({ + errorCodes: errorCodes8, + getCodeActions: function getCodeActionsToAddNameToNamelessParameter(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange8(t, context.sourceFile, context.span.start)); + return [createCodeFixAction(fixId8, changes, Diagnostics.Add_parameter_name, fixId8, Diagnostics.Add_names_to_all_parameters_without_names)]; + }, + fixIds: [fixId8], + getAllCodeActions: (context) => codeFixAll(context, errorCodes8, (changes, diag2) => makeChange8(changes, diag2.file, diag2.start)) +}); +function makeChange8(changeTracker, sourceFile, start) { + const token = getTokenAtPosition(sourceFile, start); + const param = token.parent; + if (!isParameter(param)) { + return Debug.fail("Tried to add a parameter name to a non-parameter: " + Debug.formatSyntaxKind(token.kind)); + } + const i = param.parent.parameters.indexOf(param); + Debug.assert(!param.type, "Tried to add a parameter name to a parameter that already had one."); + Debug.assert(i > -1, "Parameter not found in parent parameter list."); + let end = param.name.getEnd(); + let typeNode = factory.createTypeReferenceNode( + param.name, + /*typeArguments*/ + void 0 + ); + let nextParam = tryGetNextParam(sourceFile, param); + while (nextParam) { + typeNode = factory.createArrayTypeNode(typeNode); + end = nextParam.getEnd(); + nextParam = tryGetNextParam(sourceFile, nextParam); + } + const replacement = factory.createParameterDeclaration( + param.modifiers, + param.dotDotDotToken, + "arg" + i, + param.questionToken, + param.dotDotDotToken && !isArrayTypeNode(typeNode) ? factory.createArrayTypeNode(typeNode) : typeNode, + param.initializer + ); + changeTracker.replaceRange(sourceFile, createRange(param.getStart(sourceFile), end), replacement); +} +function tryGetNextParam(sourceFile, param) { + const nextToken = findNextToken(param.name, param.parent, sourceFile); + if (nextToken && nextToken.kind === 23 /* OpenBracketToken */ && isArrayBindingPattern(nextToken.parent) && isParameter(nextToken.parent.parent)) { + return nextToken.parent.parent; + } + return void 0; +} + +// src/services/codefixes/addOptionalPropertyUndefined.ts +var addOptionalPropertyUndefined = "addOptionalPropertyUndefined"; +var errorCodes9 = [ + Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target.code, + Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code, + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code +]; +registerCodeFix({ + errorCodes: errorCodes9, + getCodeActions(context) { + const typeChecker = context.program.getTypeChecker(); + const toAdd = getPropertiesToAdd(context.sourceFile, context.span, typeChecker); + if (!toAdd.length) { + return void 0; + } + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addUndefinedToOptionalProperty(t, toAdd)); + return [createCodeFixActionWithoutFixAll(addOptionalPropertyUndefined, changes, Diagnostics.Add_undefined_to_optional_property_type)]; + }, + fixIds: [addOptionalPropertyUndefined] +}); +function getPropertiesToAdd(file, span, checker) { + var _a, _b; + const sourceTarget = getSourceTarget(getFixableErrorSpanExpression(file, span), checker); + if (!sourceTarget) { + return emptyArray; + } + const { source: sourceNode, target: targetNode } = sourceTarget; + const target = shouldUseParentTypeOfProperty(sourceNode, targetNode, checker) ? checker.getTypeAtLocation(targetNode.expression) : checker.getTypeAtLocation(targetNode); + if ((_b = (_a = target.symbol) == null ? void 0 : _a.declarations) == null ? void 0 : _b.some((d) => getSourceFileOfNode(d).fileName.match(/\.d\.ts$/))) { + return emptyArray; + } + return checker.getExactOptionalProperties(target); +} +function shouldUseParentTypeOfProperty(sourceNode, targetNode, checker) { + return isPropertyAccessExpression(targetNode) && !!checker.getExactOptionalProperties(checker.getTypeAtLocation(targetNode.expression)).length && checker.getTypeAtLocation(sourceNode) === checker.getUndefinedType(); +} +function getSourceTarget(errorNode, checker) { + var _a; + if (!errorNode) { + return void 0; + } else if (isBinaryExpression(errorNode.parent) && errorNode.parent.operatorToken.kind === 64 /* EqualsToken */) { + return { source: errorNode.parent.right, target: errorNode.parent.left }; + } else if (isVariableDeclaration(errorNode.parent) && errorNode.parent.initializer) { + return { source: errorNode.parent.initializer, target: errorNode.parent.name }; + } else if (isCallExpression(errorNode.parent)) { + const n = checker.getSymbolAtLocation(errorNode.parent.expression); + if (!(n == null ? void 0 : n.valueDeclaration) || !isFunctionLikeKind(n.valueDeclaration.kind)) return void 0; + if (!isExpression(errorNode)) return void 0; + const i = errorNode.parent.arguments.indexOf(errorNode); + if (i === -1) return void 0; + const name = n.valueDeclaration.parameters[i].name; + if (isIdentifier(name)) return { source: errorNode, target: name }; + } else if (isPropertyAssignment(errorNode.parent) && isIdentifier(errorNode.parent.name) || isShorthandPropertyAssignment(errorNode.parent)) { + const parentTarget = getSourceTarget(errorNode.parent.parent, checker); + if (!parentTarget) return void 0; + const prop = checker.getPropertyOfType(checker.getTypeAtLocation(parentTarget.target), errorNode.parent.name.text); + const declaration = (_a = prop == null ? void 0 : prop.declarations) == null ? void 0 : _a[0]; + if (!declaration) return void 0; + return { + source: isPropertyAssignment(errorNode.parent) ? errorNode.parent.initializer : errorNode.parent.name, + target: declaration + }; + } + return void 0; +} +function addUndefinedToOptionalProperty(changes, toAdd) { + for (const add of toAdd) { + const d = add.valueDeclaration; + if (d && (isPropertySignature(d) || isPropertyDeclaration(d)) && d.type) { + const t = factory.createUnionTypeNode([ + ...d.type.kind === 193 /* UnionType */ ? d.type.types : [d.type], + factory.createTypeReferenceNode("undefined") + ]); + changes.replaceNode(d.getSourceFile(), d.type, t); + } + } +} + +// src/services/codefixes/annotateWithTypeFromJSDoc.ts +var fixId9 = "annotateWithTypeFromJSDoc"; +var errorCodes10 = [Diagnostics.JSDoc_types_may_be_moved_to_TypeScript_types.code]; +registerCodeFix({ + errorCodes: errorCodes10, + getCodeActions(context) { + const decl = getDeclaration(context.sourceFile, context.span.start); + if (!decl) return; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange8(t, context.sourceFile, decl)); + return [createCodeFixAction(fixId9, changes, Diagnostics.Annotate_with_type_from_JSDoc, fixId9, Diagnostics.Annotate_everything_with_types_from_JSDoc)]; + }, + fixIds: [fixId9], + getAllCodeActions: (context) => codeFixAll(context, errorCodes10, (changes, diag2) => { + const decl = getDeclaration(diag2.file, diag2.start); + if (decl) doChange8(changes, diag2.file, decl); + }) +}); +function getDeclaration(file, pos) { + const name = getTokenAtPosition(file, pos); + return tryCast(isParameter(name.parent) ? name.parent.parent : name.parent, parameterShouldGetTypeFromJSDoc); +} +function parameterShouldGetTypeFromJSDoc(node) { + return isDeclarationWithType(node) && hasUsableJSDoc(node); +} +function hasUsableJSDoc(decl) { + return isFunctionLikeDeclaration(decl) ? decl.parameters.some(hasUsableJSDoc) || !decl.type && !!getJSDocReturnType(decl) : !decl.type && !!getJSDocType(decl); +} +function doChange8(changes, sourceFile, decl) { + if (isFunctionLikeDeclaration(decl) && (getJSDocReturnType(decl) || decl.parameters.some((p) => !!getJSDocType(p)))) { + if (!decl.typeParameters) { + const typeParameters = getJSDocTypeParameterDeclarations(decl); + if (typeParameters.length) changes.insertTypeParameters(sourceFile, decl, typeParameters); + } + const needParens = isArrowFunction(decl) && !findChildOfKind(decl, 21 /* OpenParenToken */, sourceFile); + if (needParens) changes.insertNodeBefore(sourceFile, first(decl.parameters), factory.createToken(21 /* OpenParenToken */)); + for (const param of decl.parameters) { + if (!param.type) { + const paramType = getJSDocType(param); + if (paramType) changes.tryInsertTypeAnnotation(sourceFile, param, visitNode(paramType, transformJSDocType, isTypeNode)); + } + } + if (needParens) changes.insertNodeAfter(sourceFile, last(decl.parameters), factory.createToken(22 /* CloseParenToken */)); + if (!decl.type) { + const returnType = getJSDocReturnType(decl); + if (returnType) changes.tryInsertTypeAnnotation(sourceFile, decl, visitNode(returnType, transformJSDocType, isTypeNode)); + } + } else { + const jsdocType = Debug.checkDefined(getJSDocType(decl), "A JSDocType for this declaration should exist"); + Debug.assert(!decl.type, "The JSDocType decl should have a type"); + changes.tryInsertTypeAnnotation(sourceFile, decl, visitNode(jsdocType, transformJSDocType, isTypeNode)); + } +} +function isDeclarationWithType(node) { + return isFunctionLikeDeclaration(node) || node.kind === 261 /* VariableDeclaration */ || node.kind === 172 /* PropertySignature */ || node.kind === 173 /* PropertyDeclaration */; +} +function transformJSDocType(node) { + switch (node.kind) { + case 313 /* JSDocAllType */: + case 314 /* JSDocUnknownType */: + return factory.createTypeReferenceNode("any", emptyArray); + case 317 /* JSDocOptionalType */: + return transformJSDocOptionalType(node); + case 316 /* JSDocNonNullableType */: + return transformJSDocType(node.type); + case 315 /* JSDocNullableType */: + return transformJSDocNullableType(node); + case 319 /* JSDocVariadicType */: + return transformJSDocVariadicType(node); + case 318 /* JSDocFunctionType */: + return transformJSDocFunctionType(node); + case 184 /* TypeReference */: + return transformJSDocTypeReference(node); + case 323 /* JSDocTypeLiteral */: + return transformJSDocTypeLiteral(node); + default: + const visited = visitEachChild( + node, + transformJSDocType, + /*context*/ + void 0 + ); + setEmitFlags(visited, 1 /* SingleLine */); + return visited; + } +} +function transformJSDocTypeLiteral(node) { + const typeNode = factory.createTypeLiteralNode(map(node.jsDocPropertyTags, (tag) => factory.createPropertySignature( + /*modifiers*/ + void 0, + isIdentifier(tag.name) ? tag.name : tag.name.right, + isOptionalJSDocPropertyLikeTag(tag) ? factory.createToken(58 /* QuestionToken */) : void 0, + tag.typeExpression && visitNode(tag.typeExpression.type, transformJSDocType, isTypeNode) || factory.createKeywordTypeNode(133 /* AnyKeyword */) + ))); + setEmitFlags(typeNode, 1 /* SingleLine */); + return typeNode; +} +function transformJSDocOptionalType(node) { + return factory.createUnionTypeNode([visitNode(node.type, transformJSDocType, isTypeNode), factory.createTypeReferenceNode("undefined", emptyArray)]); +} +function transformJSDocNullableType(node) { + return factory.createUnionTypeNode([visitNode(node.type, transformJSDocType, isTypeNode), factory.createTypeReferenceNode("null", emptyArray)]); +} +function transformJSDocVariadicType(node) { + return factory.createArrayTypeNode(visitNode(node.type, transformJSDocType, isTypeNode)); +} +function transformJSDocFunctionType(node) { + return factory.createFunctionTypeNode(emptyArray, node.parameters.map(transformJSDocParameter), node.type ?? factory.createKeywordTypeNode(133 /* AnyKeyword */)); +} +function transformJSDocParameter(node) { + const index = node.parent.parameters.indexOf(node); + const isRest = node.type.kind === 319 /* JSDocVariadicType */ && index === node.parent.parameters.length - 1; + const name = node.name || (isRest ? "rest" : "arg" + index); + const dotdotdot = isRest ? factory.createToken(26 /* DotDotDotToken */) : node.dotDotDotToken; + return factory.createParameterDeclaration(node.modifiers, dotdotdot, name, node.questionToken, visitNode(node.type, transformJSDocType, isTypeNode), node.initializer); +} +function transformJSDocTypeReference(node) { + let name = node.typeName; + let args = node.typeArguments; + if (isIdentifier(node.typeName)) { + if (isJSDocIndexSignature(node)) { + return transformJSDocIndexSignature(node); + } + let text = node.typeName.text; + switch (node.typeName.text) { + case "String": + case "Boolean": + case "Object": + case "Number": + text = text.toLowerCase(); + break; + case "array": + case "date": + case "promise": + text = text[0].toUpperCase() + text.slice(1); + break; + } + name = factory.createIdentifier(text); + if ((text === "Array" || text === "Promise") && !node.typeArguments) { + args = factory.createNodeArray([factory.createTypeReferenceNode("any", emptyArray)]); + } else { + args = visitNodes2(node.typeArguments, transformJSDocType, isTypeNode); + } + } + return factory.createTypeReferenceNode(name, args); +} +function transformJSDocIndexSignature(node) { + const index = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + node.typeArguments[0].kind === 150 /* NumberKeyword */ ? "n" : "s", + /*questionToken*/ + void 0, + factory.createTypeReferenceNode(node.typeArguments[0].kind === 150 /* NumberKeyword */ ? "number" : "string", []), + /*initializer*/ + void 0 + ); + const indexSignature = factory.createTypeLiteralNode([factory.createIndexSignature( + /*modifiers*/ + void 0, + [index], + node.typeArguments[1] + )]); + setEmitFlags(indexSignature, 1 /* SingleLine */); + return indexSignature; +} + +// src/services/codefixes/convertFunctionToEs6Class.ts +var fixId10 = "convertFunctionToEs6Class"; +var errorCodes11 = [Diagnostics.This_constructor_function_may_be_converted_to_a_class_declaration.code]; +registerCodeFix({ + errorCodes: errorCodes11, + getCodeActions(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange9(t, context.sourceFile, context.span.start, context.program.getTypeChecker(), context.preferences, context.program.getCompilerOptions())); + return [createCodeFixAction(fixId10, changes, Diagnostics.Convert_function_to_an_ES2015_class, fixId10, Diagnostics.Convert_all_constructor_functions_to_classes)]; + }, + fixIds: [fixId10], + getAllCodeActions: (context) => codeFixAll(context, errorCodes11, (changes, err) => doChange9(changes, err.file, err.start, context.program.getTypeChecker(), context.preferences, context.program.getCompilerOptions())) +}); +function doChange9(changes, sourceFile, position, checker, preferences, compilerOptions) { + const ctorSymbol = checker.getSymbolAtLocation(getTokenAtPosition(sourceFile, position)); + if (!ctorSymbol || !ctorSymbol.valueDeclaration || !(ctorSymbol.flags & (16 /* Function */ | 3 /* Variable */))) { + return void 0; + } + const ctorDeclaration = ctorSymbol.valueDeclaration; + if (isFunctionDeclaration(ctorDeclaration) || isFunctionExpression(ctorDeclaration)) { + changes.replaceNode(sourceFile, ctorDeclaration, createClassFromFunction(ctorDeclaration)); + } else if (isVariableDeclaration(ctorDeclaration)) { + const classDeclaration = createClassFromVariableDeclaration(ctorDeclaration); + if (!classDeclaration) { + return void 0; + } + const ancestor = ctorDeclaration.parent.parent; + if (isVariableDeclarationList(ctorDeclaration.parent) && ctorDeclaration.parent.declarations.length > 1) { + changes.delete(sourceFile, ctorDeclaration); + changes.insertNodeAfter(sourceFile, ancestor, classDeclaration); + } else { + changes.replaceNode(sourceFile, ancestor, classDeclaration); + } + } + function createClassElementsFromSymbol(symbol) { + const memberElements = []; + if (symbol.exports) { + symbol.exports.forEach((member) => { + if (member.name === "prototype" && member.declarations) { + const firstDeclaration = member.declarations[0]; + if (member.declarations.length === 1 && isPropertyAccessExpression(firstDeclaration) && isBinaryExpression(firstDeclaration.parent) && firstDeclaration.parent.operatorToken.kind === 64 /* EqualsToken */ && isObjectLiteralExpression(firstDeclaration.parent.right)) { + const prototypes = firstDeclaration.parent.right; + createClassElement( + prototypes.symbol, + /*modifiers*/ + void 0, + memberElements + ); + } + } else { + createClassElement(member, [factory.createToken(126 /* StaticKeyword */)], memberElements); + } + }); + } + if (symbol.members) { + symbol.members.forEach((member, key) => { + var _a, _b, _c, _d; + if (key === "constructor" && member.valueDeclaration) { + const prototypeAssignment = (_d = (_c = (_b = (_a = symbol.exports) == null ? void 0 : _a.get("prototype")) == null ? void 0 : _b.declarations) == null ? void 0 : _c[0]) == null ? void 0 : _d.parent; + if (prototypeAssignment && isBinaryExpression(prototypeAssignment) && isObjectLiteralExpression(prototypeAssignment.right) && some(prototypeAssignment.right.properties, isConstructorAssignment)) { + } else { + changes.delete(sourceFile, member.valueDeclaration.parent); + } + return; + } + createClassElement( + member, + /*modifiers*/ + void 0, + memberElements + ); + }); + } + return memberElements; + function shouldConvertDeclaration(_target, source) { + if (isAccessExpression(_target)) { + if (isPropertyAccessExpression(_target) && isConstructorAssignment(_target)) return true; + return isFunctionLike(source); + } else { + return every(_target.properties, (property) => { + if (isMethodDeclaration(property) || isGetOrSetAccessorDeclaration(property)) return true; + if (isPropertyAssignment(property) && isFunctionExpression(property.initializer) && !!property.name) return true; + if (isConstructorAssignment(property)) return true; + return false; + }); + } + } + function createClassElement(symbol2, modifiers, members) { + if (!(symbol2.flags & 8192 /* Method */) && !(symbol2.flags & 4096 /* ObjectLiteral */)) { + return; + } + const memberDeclaration = symbol2.valueDeclaration; + const assignmentBinaryExpression = memberDeclaration.parent; + const assignmentExpr = assignmentBinaryExpression.right; + if (!shouldConvertDeclaration(memberDeclaration, assignmentExpr)) { + return; + } + if (some(members, (m) => { + const name = getNameOfDeclaration(m); + if (name && isIdentifier(name) && idText(name) === symbolName(symbol2)) { + return true; + } + return false; + })) { + return; + } + const nodeToDelete = assignmentBinaryExpression.parent && assignmentBinaryExpression.parent.kind === 245 /* ExpressionStatement */ ? assignmentBinaryExpression.parent : assignmentBinaryExpression; + changes.delete(sourceFile, nodeToDelete); + if (!assignmentExpr) { + members.push(factory.createPropertyDeclaration( + modifiers, + symbol2.name, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + )); + return; + } + if (isAccessExpression(memberDeclaration) && (isFunctionExpression(assignmentExpr) || isArrowFunction(assignmentExpr))) { + const quotePreference = getQuotePreference(sourceFile, preferences); + const name = tryGetPropertyName(memberDeclaration, compilerOptions, quotePreference); + if (name) { + createFunctionLikeExpressionMember(members, assignmentExpr, name); + } + return; + } else if (isObjectLiteralExpression(assignmentExpr)) { + forEach( + assignmentExpr.properties, + (property) => { + if (isMethodDeclaration(property) || isGetOrSetAccessorDeclaration(property)) { + members.push(property); + } + if (isPropertyAssignment(property) && isFunctionExpression(property.initializer)) { + createFunctionLikeExpressionMember(members, property.initializer, property.name); + } + if (isConstructorAssignment(property)) return; + return; + } + ); + return; + } else { + if (isSourceFileJS(sourceFile)) return; + if (!isPropertyAccessExpression(memberDeclaration)) return; + const prop = factory.createPropertyDeclaration( + modifiers, + memberDeclaration.name, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + assignmentExpr + ); + copyLeadingComments(assignmentBinaryExpression.parent, prop, sourceFile); + members.push(prop); + return; + } + function createFunctionLikeExpressionMember(members2, expression, name) { + if (isFunctionExpression(expression)) return createFunctionExpressionMember(members2, expression, name); + else return createArrowFunctionExpressionMember(members2, expression, name); + } + function createFunctionExpressionMember(members2, functionExpression, name) { + const fullModifiers = concatenate(modifiers, getModifierKindFromSource(functionExpression, 134 /* AsyncKeyword */)); + const method = factory.createMethodDeclaration( + fullModifiers, + /*asteriskToken*/ + void 0, + name, + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + functionExpression.parameters, + /*type*/ + void 0, + functionExpression.body + ); + copyLeadingComments(assignmentBinaryExpression, method, sourceFile); + members2.push(method); + return; + } + function createArrowFunctionExpressionMember(members2, arrowFunction, name) { + const arrowFunctionBody = arrowFunction.body; + let bodyBlock; + if (arrowFunctionBody.kind === 242 /* Block */) { + bodyBlock = arrowFunctionBody; + } else { + bodyBlock = factory.createBlock([factory.createReturnStatement(arrowFunctionBody)]); + } + const fullModifiers = concatenate(modifiers, getModifierKindFromSource(arrowFunction, 134 /* AsyncKeyword */)); + const method = factory.createMethodDeclaration( + fullModifiers, + /*asteriskToken*/ + void 0, + name, + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + arrowFunction.parameters, + /*type*/ + void 0, + bodyBlock + ); + copyLeadingComments(assignmentBinaryExpression, method, sourceFile); + members2.push(method); + } + } + } + function createClassFromVariableDeclaration(node) { + const initializer = node.initializer; + if (!initializer || !isFunctionExpression(initializer) || !isIdentifier(node.name)) { + return void 0; + } + const memberElements = createClassElementsFromSymbol(node.symbol); + if (initializer.body) { + memberElements.unshift(factory.createConstructorDeclaration( + /*modifiers*/ + void 0, + initializer.parameters, + initializer.body + )); + } + const modifiers = getModifierKindFromSource(node.parent.parent, 95 /* ExportKeyword */); + const cls = factory.createClassDeclaration( + modifiers, + node.name, + /*typeParameters*/ + void 0, + /*heritageClauses*/ + void 0, + memberElements + ); + return cls; + } + function createClassFromFunction(node) { + const memberElements = createClassElementsFromSymbol(ctorSymbol); + if (node.body) { + memberElements.unshift(factory.createConstructorDeclaration( + /*modifiers*/ + void 0, + node.parameters, + node.body + )); + } + const modifiers = getModifierKindFromSource(node, 95 /* ExportKeyword */); + const cls = factory.createClassDeclaration( + modifiers, + node.name, + /*typeParameters*/ + void 0, + /*heritageClauses*/ + void 0, + memberElements + ); + return cls; + } +} +function getModifierKindFromSource(source, kind) { + return canHaveModifiers(source) ? filter(source.modifiers, (modifier) => modifier.kind === kind) : void 0; +} +function isConstructorAssignment(x) { + if (!x.name) return false; + if (isIdentifier(x.name) && x.name.text === "constructor") return true; + return false; +} +function tryGetPropertyName(node, compilerOptions, quotePreference) { + if (isPropertyAccessExpression(node)) { + return node.name; + } + const propName = node.argumentExpression; + if (isNumericLiteral(propName)) { + return propName; + } + if (isStringLiteralLike(propName)) { + return isIdentifierText(propName.text, getEmitScriptTarget(compilerOptions)) ? factory.createIdentifier(propName.text) : isNoSubstitutionTemplateLiteral(propName) ? factory.createStringLiteral(propName.text, quotePreference === 0 /* Single */) : propName; + } + return void 0; +} + +// src/services/codefixes/convertToAsyncFunction.ts +var fixId11 = "convertToAsyncFunction"; +var errorCodes12 = [Diagnostics.This_may_be_converted_to_an_async_function.code]; +var codeActionSucceeded = true; +registerCodeFix({ + errorCodes: errorCodes12, + getCodeActions(context) { + codeActionSucceeded = true; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => convertToAsyncFunction(t, context.sourceFile, context.span.start, context.program.getTypeChecker())); + return codeActionSucceeded ? [createCodeFixAction(fixId11, changes, Diagnostics.Convert_to_async_function, fixId11, Diagnostics.Convert_all_to_async_functions)] : []; + }, + fixIds: [fixId11], + getAllCodeActions: (context) => codeFixAll(context, errorCodes12, (changes, err) => convertToAsyncFunction(changes, err.file, err.start, context.program.getTypeChecker())) +}); +function convertToAsyncFunction(changes, sourceFile, position, checker) { + const tokenAtPosition = getTokenAtPosition(sourceFile, position); + let functionToConvert; + if (isIdentifier(tokenAtPosition) && isVariableDeclaration(tokenAtPosition.parent) && tokenAtPosition.parent.initializer && isFunctionLikeDeclaration(tokenAtPosition.parent.initializer)) { + functionToConvert = tokenAtPosition.parent.initializer; + } else { + functionToConvert = tryCast(getContainingFunction(getTokenAtPosition(sourceFile, position)), canBeConvertedToAsync); + } + if (!functionToConvert) { + return; + } + const synthNamesMap = /* @__PURE__ */ new Map(); + const isInJavascript = isInJSFile(functionToConvert); + const setOfExpressionsToReturn = getAllPromiseExpressionsToReturn(functionToConvert, checker); + const functionToConvertRenamed = renameCollidingVarNames(functionToConvert, checker, synthNamesMap); + if (!returnsPromise(functionToConvertRenamed, checker)) { + return; + } + const returnStatements = functionToConvertRenamed.body && isBlock(functionToConvertRenamed.body) ? getReturnStatementsWithPromiseHandlers(functionToConvertRenamed.body, checker) : emptyArray; + const transformer = { checker, synthNamesMap, setOfExpressionsToReturn, isInJSFile: isInJavascript }; + if (!returnStatements.length) { + return; + } + const pos = skipTrivia(sourceFile.text, moveRangePastModifiers(functionToConvert).pos); + changes.insertModifierAt(sourceFile, pos, 134 /* AsyncKeyword */, { suffix: " " }); + for (const returnStatement of returnStatements) { + forEachChild(returnStatement, function visit(node) { + if (isCallExpression(node)) { + const newNodes = transformExpression( + node, + node, + transformer, + /*hasContinuation*/ + false + ); + if (hasFailed()) { + return true; + } + changes.replaceNodeWithNodes(sourceFile, returnStatement, newNodes); + } else if (!isFunctionLike(node)) { + forEachChild(node, visit); + if (hasFailed()) { + return true; + } + } + }); + if (hasFailed()) { + return; + } + } +} +function getReturnStatementsWithPromiseHandlers(body, checker) { + const res = []; + forEachReturnStatement(body, (ret) => { + if (isReturnStatementWithFixablePromiseHandler(ret, checker)) res.push(ret); + }); + return res; +} +function getAllPromiseExpressionsToReturn(func, checker) { + if (!func.body) { + return /* @__PURE__ */ new Set(); + } + const setOfExpressionsToReturn = /* @__PURE__ */ new Set(); + forEachChild(func.body, function visit(node) { + if (isPromiseReturningCallExpression(node, checker, "then")) { + setOfExpressionsToReturn.add(getNodeId(node)); + forEach(node.arguments, visit); + } else if (isPromiseReturningCallExpression(node, checker, "catch") || isPromiseReturningCallExpression(node, checker, "finally")) { + setOfExpressionsToReturn.add(getNodeId(node)); + forEachChild(node, visit); + } else if (isPromiseTypedExpression(node, checker)) { + setOfExpressionsToReturn.add(getNodeId(node)); + } else { + forEachChild(node, visit); + } + }); + return setOfExpressionsToReturn; +} +function isPromiseReturningCallExpression(node, checker, name) { + if (!isCallExpression(node)) return false; + const isExpressionOfName = hasPropertyAccessExpressionWithName(node, name); + const nodeType = isExpressionOfName && checker.getTypeAtLocation(node); + return !!(nodeType && checker.getPromisedTypeOfPromise(nodeType)); +} +function isReferenceToType(type, target) { + return (getObjectFlags(type) & 4 /* Reference */) !== 0 && type.target === target; +} +function getExplicitPromisedTypeOfPromiseReturningCallExpression(node, callback, checker) { + if (node.expression.name.escapedText === "finally") { + return void 0; + } + const promiseType = checker.getTypeAtLocation(node.expression.expression); + if (isReferenceToType(promiseType, checker.getPromiseType()) || isReferenceToType(promiseType, checker.getPromiseLikeType())) { + if (node.expression.name.escapedText === "then") { + if (callback === elementAt(node.arguments, 0)) { + return elementAt(node.typeArguments, 0); + } else if (callback === elementAt(node.arguments, 1)) { + return elementAt(node.typeArguments, 1); + } + } else { + return elementAt(node.typeArguments, 0); + } + } +} +function isPromiseTypedExpression(node, checker) { + if (!isExpression(node)) return false; + return !!checker.getPromisedTypeOfPromise(checker.getTypeAtLocation(node)); +} +function renameCollidingVarNames(nodeToRename, checker, synthNamesMap) { + const identsToRenameMap = /* @__PURE__ */ new Map(); + const collidingSymbolMap = createMultiMap(); + forEachChild(nodeToRename, function visit(node) { + if (!isIdentifier(node)) { + forEachChild(node, visit); + return; + } + const symbol = checker.getSymbolAtLocation(node); + if (symbol) { + const type = checker.getTypeAtLocation(node); + const lastCallSignature = getLastCallSignature(type, checker); + const symbolIdString = getSymbolId(symbol).toString(); + if (lastCallSignature && !isParameter(node.parent) && !isFunctionLikeDeclaration(node.parent) && !synthNamesMap.has(symbolIdString)) { + const firstParameter = firstOrUndefined(lastCallSignature.parameters); + const ident = (firstParameter == null ? void 0 : firstParameter.valueDeclaration) && isParameter(firstParameter.valueDeclaration) && tryCast(firstParameter.valueDeclaration.name, isIdentifier) || factory.createUniqueName("result", 16 /* Optimistic */); + const synthName = getNewNameIfConflict(ident, collidingSymbolMap); + synthNamesMap.set(symbolIdString, synthName); + collidingSymbolMap.add(ident.text, symbol); + } else if (node.parent && (isParameter(node.parent) || isVariableDeclaration(node.parent) || isBindingElement(node.parent))) { + const originalName = node.text; + const collidingSymbols = collidingSymbolMap.get(originalName); + if (collidingSymbols && collidingSymbols.some((prevSymbol) => prevSymbol !== symbol)) { + const newName = getNewNameIfConflict(node, collidingSymbolMap); + identsToRenameMap.set(symbolIdString, newName.identifier); + synthNamesMap.set(symbolIdString, newName); + collidingSymbolMap.add(originalName, symbol); + } else { + const identifier = getSynthesizedDeepClone(node); + synthNamesMap.set(symbolIdString, createSynthIdentifier(identifier)); + collidingSymbolMap.add(originalName, symbol); + } + } + } + }); + return getSynthesizedDeepCloneWithReplacements( + nodeToRename, + /*includeTrivia*/ + true, + (original) => { + if (isBindingElement(original) && isIdentifier(original.name) && isObjectBindingPattern(original.parent)) { + const symbol = checker.getSymbolAtLocation(original.name); + const renameInfo = symbol && identsToRenameMap.get(String(getSymbolId(symbol))); + if (renameInfo && renameInfo.text !== (original.name || original.propertyName).getText()) { + return factory.createBindingElement( + original.dotDotDotToken, + original.propertyName || original.name, + renameInfo, + original.initializer + ); + } + } else if (isIdentifier(original)) { + const symbol = checker.getSymbolAtLocation(original); + const renameInfo = symbol && identsToRenameMap.get(String(getSymbolId(symbol))); + if (renameInfo) { + return factory.createIdentifier(renameInfo.text); + } + } + } + ); +} +function getNewNameIfConflict(name, originalNames) { + const numVarsSameName = (originalNames.get(name.text) || emptyArray).length; + const identifier = numVarsSameName === 0 ? name : factory.createIdentifier(name.text + "_" + numVarsSameName); + return createSynthIdentifier(identifier); +} +function hasFailed() { + return !codeActionSucceeded; +} +function silentFail() { + codeActionSucceeded = false; + return emptyArray; +} +function transformExpression(returnContextNode, node, transformer, hasContinuation, continuationArgName) { + if (isPromiseReturningCallExpression(node, transformer.checker, "then")) { + return transformThen(node, elementAt(node.arguments, 0), elementAt(node.arguments, 1), transformer, hasContinuation, continuationArgName); + } + if (isPromiseReturningCallExpression(node, transformer.checker, "catch")) { + return transformCatch(node, elementAt(node.arguments, 0), transformer, hasContinuation, continuationArgName); + } + if (isPromiseReturningCallExpression(node, transformer.checker, "finally")) { + return transformFinally(node, elementAt(node.arguments, 0), transformer, hasContinuation, continuationArgName); + } + if (isPropertyAccessExpression(node)) { + return transformExpression(returnContextNode, node.expression, transformer, hasContinuation, continuationArgName); + } + const nodeType = transformer.checker.getTypeAtLocation(node); + if (nodeType && transformer.checker.getPromisedTypeOfPromise(nodeType)) { + Debug.assertNode(getOriginalNode(node).parent, isPropertyAccessExpression); + return transformPromiseExpressionOfPropertyAccess(returnContextNode, node, transformer, hasContinuation, continuationArgName); + } + return silentFail(); +} +function isNullOrUndefined2({ checker }, node) { + if (node.kind === 106 /* NullKeyword */) return true; + if (isIdentifier(node) && !isGeneratedIdentifier(node) && idText(node) === "undefined") { + const symbol = checker.getSymbolAtLocation(node); + return !symbol || checker.isUndefinedSymbol(symbol); + } + return false; +} +function createUniqueSynthName(prevArgName) { + const renamedPrevArg = factory.createUniqueName(prevArgName.identifier.text, 16 /* Optimistic */); + return createSynthIdentifier(renamedPrevArg); +} +function getPossibleNameForVarDecl(node, transformer, continuationArgName) { + let possibleNameForVarDecl; + if (continuationArgName && !shouldReturn(node, transformer)) { + if (isSynthIdentifier(continuationArgName)) { + possibleNameForVarDecl = continuationArgName; + transformer.synthNamesMap.forEach((val, key) => { + if (val.identifier.text === continuationArgName.identifier.text) { + const newSynthName = createUniqueSynthName(continuationArgName); + transformer.synthNamesMap.set(key, newSynthName); + } + }); + } else { + possibleNameForVarDecl = createSynthIdentifier(factory.createUniqueName("result", 16 /* Optimistic */), continuationArgName.types); + } + declareSynthIdentifier(possibleNameForVarDecl); + } + return possibleNameForVarDecl; +} +function finishCatchOrFinallyTransform(node, transformer, tryStatement, possibleNameForVarDecl, continuationArgName) { + const statements = []; + let varDeclIdentifier; + if (possibleNameForVarDecl && !shouldReturn(node, transformer)) { + varDeclIdentifier = getSynthesizedDeepClone(declareSynthIdentifier(possibleNameForVarDecl)); + const typeArray = possibleNameForVarDecl.types; + const unionType = transformer.checker.getUnionType(typeArray, 2 /* Subtype */); + const unionTypeNode = transformer.isInJSFile ? void 0 : transformer.checker.typeToTypeNode( + unionType, + /*enclosingDeclaration*/ + void 0, + /*flags*/ + void 0 + ); + const varDecl = [factory.createVariableDeclaration( + varDeclIdentifier, + /*exclamationToken*/ + void 0, + unionTypeNode + )]; + const varDeclList = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList(varDecl, 1 /* Let */) + ); + statements.push(varDeclList); + } + statements.push(tryStatement); + if (continuationArgName && varDeclIdentifier && isSynthBindingPattern(continuationArgName)) { + statements.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + getSynthesizedDeepClone(declareSynthBindingPattern(continuationArgName)), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + varDeclIdentifier + ) + ], 2 /* Const */) + )); + } + return statements; +} +function transformFinally(node, onFinally, transformer, hasContinuation, continuationArgName) { + if (!onFinally || isNullOrUndefined2(transformer, onFinally)) { + return transformExpression( + /* returnContextNode */ + node, + node.expression.expression, + transformer, + hasContinuation, + continuationArgName + ); + } + const possibleNameForVarDecl = getPossibleNameForVarDecl(node, transformer, continuationArgName); + const inlinedLeftHandSide = transformExpression( + /*returnContextNode*/ + node, + node.expression.expression, + transformer, + /*hasContinuation*/ + true, + possibleNameForVarDecl + ); + if (hasFailed()) return silentFail(); + const inlinedCallback = transformCallbackArgument( + onFinally, + hasContinuation, + /*continuationArgName*/ + void 0, + /*inputArgName*/ + void 0, + node, + transformer + ); + if (hasFailed()) return silentFail(); + const tryBlock = factory.createBlock(inlinedLeftHandSide); + const finallyBlock = factory.createBlock(inlinedCallback); + const tryStatement = factory.createTryStatement( + tryBlock, + /*catchClause*/ + void 0, + finallyBlock + ); + return finishCatchOrFinallyTransform(node, transformer, tryStatement, possibleNameForVarDecl, continuationArgName); +} +function transformCatch(node, onRejected, transformer, hasContinuation, continuationArgName) { + if (!onRejected || isNullOrUndefined2(transformer, onRejected)) { + return transformExpression( + /* returnContextNode */ + node, + node.expression.expression, + transformer, + hasContinuation, + continuationArgName + ); + } + const inputArgName = getArgBindingName(onRejected, transformer); + const possibleNameForVarDecl = getPossibleNameForVarDecl(node, transformer, continuationArgName); + const inlinedLeftHandSide = transformExpression( + /*returnContextNode*/ + node, + node.expression.expression, + transformer, + /*hasContinuation*/ + true, + possibleNameForVarDecl + ); + if (hasFailed()) return silentFail(); + const inlinedCallback = transformCallbackArgument(onRejected, hasContinuation, possibleNameForVarDecl, inputArgName, node, transformer); + if (hasFailed()) return silentFail(); + const tryBlock = factory.createBlock(inlinedLeftHandSide); + const catchClause = factory.createCatchClause(inputArgName && getSynthesizedDeepClone(declareSynthBindingName(inputArgName)), factory.createBlock(inlinedCallback)); + const tryStatement = factory.createTryStatement( + tryBlock, + catchClause, + /*finallyBlock*/ + void 0 + ); + return finishCatchOrFinallyTransform(node, transformer, tryStatement, possibleNameForVarDecl, continuationArgName); +} +function transformThen(node, onFulfilled, onRejected, transformer, hasContinuation, continuationArgName) { + if (!onFulfilled || isNullOrUndefined2(transformer, onFulfilled)) { + return transformCatch(node, onRejected, transformer, hasContinuation, continuationArgName); + } + if (onRejected && !isNullOrUndefined2(transformer, onRejected)) { + return silentFail(); + } + const inputArgName = getArgBindingName(onFulfilled, transformer); + const inlinedLeftHandSide = transformExpression( + node.expression.expression, + node.expression.expression, + transformer, + /*hasContinuation*/ + true, + inputArgName + ); + if (hasFailed()) return silentFail(); + const inlinedCallback = transformCallbackArgument(onFulfilled, hasContinuation, continuationArgName, inputArgName, node, transformer); + if (hasFailed()) return silentFail(); + return concatenate(inlinedLeftHandSide, inlinedCallback); +} +function transformPromiseExpressionOfPropertyAccess(returnContextNode, node, transformer, hasContinuation, continuationArgName) { + if (shouldReturn(returnContextNode, transformer)) { + let returnValue = getSynthesizedDeepClone(node); + if (hasContinuation) { + returnValue = factory.createAwaitExpression(returnValue); + } + return [factory.createReturnStatement(returnValue)]; + } + return createVariableOrAssignmentOrExpressionStatement( + continuationArgName, + factory.createAwaitExpression(node), + /*typeAnnotation*/ + void 0 + ); +} +function createVariableOrAssignmentOrExpressionStatement(variableName, rightHandSide, typeAnnotation) { + if (!variableName || isEmptyBindingName(variableName)) { + return [factory.createExpressionStatement(rightHandSide)]; + } + if (isSynthIdentifier(variableName) && variableName.hasBeenDeclared) { + return [factory.createExpressionStatement(factory.createAssignment(getSynthesizedDeepClone(referenceSynthIdentifier(variableName)), rightHandSide))]; + } + return [ + factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + getSynthesizedDeepClone(declareSynthBindingName(variableName)), + /*exclamationToken*/ + void 0, + typeAnnotation, + rightHandSide + ) + ], 2 /* Const */) + ) + ]; +} +function maybeAnnotateAndReturn(expressionToReturn, typeAnnotation) { + if (typeAnnotation && expressionToReturn) { + const name = factory.createUniqueName("result", 16 /* Optimistic */); + return [ + ...createVariableOrAssignmentOrExpressionStatement(createSynthIdentifier(name), expressionToReturn, typeAnnotation), + factory.createReturnStatement(name) + ]; + } + return [factory.createReturnStatement(expressionToReturn)]; +} +function transformCallbackArgument(func, hasContinuation, continuationArgName, inputArgName, parent2, transformer) { + var _a; + switch (func.kind) { + case 106 /* NullKeyword */: + break; + case 212 /* PropertyAccessExpression */: + case 80 /* Identifier */: + if (!inputArgName) { + break; + } + const synthCall = factory.createCallExpression( + getSynthesizedDeepClone(func), + /*typeArguments*/ + void 0, + isSynthIdentifier(inputArgName) ? [referenceSynthIdentifier(inputArgName)] : [] + ); + if (shouldReturn(parent2, transformer)) { + return maybeAnnotateAndReturn(synthCall, getExplicitPromisedTypeOfPromiseReturningCallExpression(parent2, func, transformer.checker)); + } + const type = transformer.checker.getTypeAtLocation(func); + const callSignatures = transformer.checker.getSignaturesOfType(type, 0 /* Call */); + if (!callSignatures.length) { + return silentFail(); + } + const returnType = callSignatures[0].getReturnType(); + const varDeclOrAssignment = createVariableOrAssignmentOrExpressionStatement(continuationArgName, factory.createAwaitExpression(synthCall), getExplicitPromisedTypeOfPromiseReturningCallExpression(parent2, func, transformer.checker)); + if (continuationArgName) { + continuationArgName.types.push(transformer.checker.getAwaitedType(returnType) || returnType); + } + return varDeclOrAssignment; + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: { + const funcBody = func.body; + const returnType2 = (_a = getLastCallSignature(transformer.checker.getTypeAtLocation(func), transformer.checker)) == null ? void 0 : _a.getReturnType(); + if (isBlock(funcBody)) { + let refactoredStmts = []; + let seenReturnStatement = false; + for (const statement of funcBody.statements) { + if (isReturnStatement(statement)) { + seenReturnStatement = true; + if (isReturnStatementWithFixablePromiseHandler(statement, transformer.checker)) { + refactoredStmts = refactoredStmts.concat(transformReturnStatementWithFixablePromiseHandler(transformer, statement, hasContinuation, continuationArgName)); + } else { + const possiblyAwaitedRightHandSide = returnType2 && statement.expression ? getPossiblyAwaitedRightHandSide(transformer.checker, returnType2, statement.expression) : statement.expression; + refactoredStmts.push(...maybeAnnotateAndReturn(possiblyAwaitedRightHandSide, getExplicitPromisedTypeOfPromiseReturningCallExpression(parent2, func, transformer.checker))); + } + } else if (hasContinuation && forEachReturnStatement(statement, returnTrue)) { + return silentFail(); + } else { + refactoredStmts.push(statement); + } + } + return shouldReturn(parent2, transformer) ? refactoredStmts.map((s) => getSynthesizedDeepClone(s)) : removeReturns( + refactoredStmts, + continuationArgName, + transformer, + seenReturnStatement + ); + } else { + const inlinedStatements = isFixablePromiseHandler(funcBody, transformer.checker) ? transformReturnStatementWithFixablePromiseHandler(transformer, factory.createReturnStatement(funcBody), hasContinuation, continuationArgName) : emptyArray; + if (inlinedStatements.length > 0) { + return inlinedStatements; + } + if (returnType2) { + const possiblyAwaitedRightHandSide = getPossiblyAwaitedRightHandSide(transformer.checker, returnType2, funcBody); + if (!shouldReturn(parent2, transformer)) { + const transformedStatement = createVariableOrAssignmentOrExpressionStatement( + continuationArgName, + possiblyAwaitedRightHandSide, + /*typeAnnotation*/ + void 0 + ); + if (continuationArgName) { + continuationArgName.types.push(transformer.checker.getAwaitedType(returnType2) || returnType2); + } + return transformedStatement; + } else { + return maybeAnnotateAndReturn(possiblyAwaitedRightHandSide, getExplicitPromisedTypeOfPromiseReturningCallExpression(parent2, func, transformer.checker)); + } + } else { + return silentFail(); + } + } + } + default: + return silentFail(); + } + return emptyArray; +} +function getPossiblyAwaitedRightHandSide(checker, type, expr) { + const rightHandSide = getSynthesizedDeepClone(expr); + return !!checker.getPromisedTypeOfPromise(type) ? factory.createAwaitExpression(rightHandSide) : rightHandSide; +} +function getLastCallSignature(type, checker) { + const callSignatures = checker.getSignaturesOfType(type, 0 /* Call */); + return lastOrUndefined(callSignatures); +} +function removeReturns(stmts, prevArgName, transformer, seenReturnStatement) { + const ret = []; + for (const stmt of stmts) { + if (isReturnStatement(stmt)) { + if (stmt.expression) { + const possiblyAwaitedExpression = isPromiseTypedExpression(stmt.expression, transformer.checker) ? factory.createAwaitExpression(stmt.expression) : stmt.expression; + if (prevArgName === void 0) { + ret.push(factory.createExpressionStatement(possiblyAwaitedExpression)); + } else if (isSynthIdentifier(prevArgName) && prevArgName.hasBeenDeclared) { + ret.push(factory.createExpressionStatement(factory.createAssignment(referenceSynthIdentifier(prevArgName), possiblyAwaitedExpression))); + } else { + ret.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([factory.createVariableDeclaration( + declareSynthBindingName(prevArgName), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + possiblyAwaitedExpression + )], 2 /* Const */) + )); + } + } + } else { + ret.push(getSynthesizedDeepClone(stmt)); + } + } + if (!seenReturnStatement && prevArgName !== void 0) { + ret.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([factory.createVariableDeclaration( + declareSynthBindingName(prevArgName), + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory.createIdentifier("undefined") + )], 2 /* Const */) + )); + } + return ret; +} +function transformReturnStatementWithFixablePromiseHandler(transformer, innerRetStmt, hasContinuation, continuationArgName) { + let innerCbBody = []; + forEachChild(innerRetStmt, function visit(node) { + if (isCallExpression(node)) { + const temp = transformExpression(node, node, transformer, hasContinuation, continuationArgName); + innerCbBody = innerCbBody.concat(temp); + if (innerCbBody.length > 0) { + return; + } + } else if (!isFunctionLike(node)) { + forEachChild(node, visit); + } + }); + return innerCbBody; +} +function getArgBindingName(funcNode, transformer) { + const types = []; + let name; + if (isFunctionLikeDeclaration(funcNode)) { + if (funcNode.parameters.length > 0) { + const param = funcNode.parameters[0].name; + name = getMappedBindingNameOrDefault(param); + } + } else if (isIdentifier(funcNode)) { + name = getMapEntryOrDefault(funcNode); + } else if (isPropertyAccessExpression(funcNode) && isIdentifier(funcNode.name)) { + name = getMapEntryOrDefault(funcNode.name); + } + if (!name || "identifier" in name && name.identifier.text === "undefined") { + return void 0; + } + return name; + function getMappedBindingNameOrDefault(bindingName) { + if (isIdentifier(bindingName)) return getMapEntryOrDefault(bindingName); + const elements = flatMap(bindingName.elements, (element) => { + if (isOmittedExpression(element)) return []; + return [getMappedBindingNameOrDefault(element.name)]; + }); + return createSynthBindingPattern(bindingName, elements); + } + function getMapEntryOrDefault(identifier) { + const originalNode = getOriginalNode2(identifier); + const symbol = getSymbol2(originalNode); + if (!symbol) { + return createSynthIdentifier(identifier, types); + } + const mapEntry = transformer.synthNamesMap.get(getSymbolId(symbol).toString()); + return mapEntry || createSynthIdentifier(identifier, types); + } + function getSymbol2(node) { + var _a; + return ((_a = tryCast(node, canHaveSymbol)) == null ? void 0 : _a.symbol) ?? transformer.checker.getSymbolAtLocation(node); + } + function getOriginalNode2(node) { + return node.original ? node.original : node; + } +} +function isEmptyBindingName(bindingName) { + if (!bindingName) { + return true; + } + if (isSynthIdentifier(bindingName)) { + return !bindingName.identifier.text; + } + return every(bindingName.elements, isEmptyBindingName); +} +function createSynthIdentifier(identifier, types = []) { + return { kind: 0 /* Identifier */, identifier, types, hasBeenDeclared: false, hasBeenReferenced: false }; +} +function createSynthBindingPattern(bindingPattern, elements = emptyArray, types = []) { + return { kind: 1 /* BindingPattern */, bindingPattern, elements, types }; +} +function referenceSynthIdentifier(synthId) { + synthId.hasBeenReferenced = true; + return synthId.identifier; +} +function declareSynthBindingName(synthName) { + return isSynthIdentifier(synthName) ? declareSynthIdentifier(synthName) : declareSynthBindingPattern(synthName); +} +function declareSynthBindingPattern(synthPattern) { + for (const element of synthPattern.elements) { + declareSynthBindingName(element); + } + return synthPattern.bindingPattern; +} +function declareSynthIdentifier(synthId) { + synthId.hasBeenDeclared = true; + return synthId.identifier; +} +function isSynthIdentifier(bindingName) { + return bindingName.kind === 0 /* Identifier */; +} +function isSynthBindingPattern(bindingName) { + return bindingName.kind === 1 /* BindingPattern */; +} +function shouldReturn(expression, transformer) { + return !!expression.original && transformer.setOfExpressionsToReturn.has(getNodeId(expression.original)); +} + +// src/services/codefixes/convertToEsModule.ts +registerCodeFix({ + errorCodes: [Diagnostics.File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module.code], + getCodeActions(context) { + const { sourceFile, program, preferences } = context; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changes2) => { + const moduleExportsChangedToDefault = convertFileToEsModule(sourceFile, program.getTypeChecker(), changes2, getEmitScriptTarget(program.getCompilerOptions()), getQuotePreference(sourceFile, preferences)); + if (moduleExportsChangedToDefault) { + for (const importingFile of program.getSourceFiles()) { + fixImportOfModuleExports(importingFile, sourceFile, program, changes2, getQuotePreference(importingFile, preferences)); + } + } + }); + return [createCodeFixActionWithoutFixAll("convertToEsModule", changes, Diagnostics.Convert_to_ES_module)]; + } +}); +function fixImportOfModuleExports(importingFile, exportingFile, program, changes, quotePreference) { + var _a; + for (const moduleSpecifier of importingFile.imports) { + const imported = (_a = program.getResolvedModuleFromModuleSpecifier(moduleSpecifier, importingFile)) == null ? void 0 : _a.resolvedModule; + if (!imported || imported.resolvedFileName !== exportingFile.fileName) { + continue; + } + const importNode = importFromModuleSpecifier(moduleSpecifier); + switch (importNode.kind) { + case 272 /* ImportEqualsDeclaration */: + changes.replaceNode(importingFile, importNode, makeImport( + importNode.name, + /*namedImports*/ + void 0, + moduleSpecifier, + quotePreference + )); + break; + case 214 /* CallExpression */: + if (isRequireCall( + importNode, + /*requireStringLiteralLikeArgument*/ + false + )) { + changes.replaceNode(importingFile, importNode, factory.createPropertyAccessExpression(getSynthesizedDeepClone(importNode), "default")); + } + break; + } + } +} +function convertFileToEsModule(sourceFile, checker, changes, target, quotePreference) { + const identifiers = { original: collectFreeIdentifiers(sourceFile), additional: /* @__PURE__ */ new Set() }; + const exports2 = collectExportRenames(sourceFile, checker, identifiers); + convertExportsAccesses(sourceFile, exports2, changes); + let moduleExportsChangedToDefault = false; + let useSitesToUnqualify; + for (const statement of filter(sourceFile.statements, isVariableStatement)) { + const newUseSites = convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference); + if (newUseSites) { + copyEntries(newUseSites, useSitesToUnqualify ?? (useSitesToUnqualify = /* @__PURE__ */ new Map())); + } + } + for (const statement of filter(sourceFile.statements, (s) => !isVariableStatement(s))) { + const moduleExportsChanged = convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports2, useSitesToUnqualify, quotePreference); + moduleExportsChangedToDefault = moduleExportsChangedToDefault || moduleExportsChanged; + } + useSitesToUnqualify == null ? void 0 : useSitesToUnqualify.forEach((replacement, original) => { + changes.replaceNode(sourceFile, original, replacement); + }); + return moduleExportsChangedToDefault; +} +function collectExportRenames(sourceFile, checker, identifiers) { + const res = /* @__PURE__ */ new Map(); + forEachExportReference(sourceFile, (node) => { + const { text } = node.name; + if (!res.has(text) && (isIdentifierANonContextualKeyword(node.name) || checker.resolveName( + text, + node, + 111551 /* Value */, + /*excludeGlobals*/ + true + ))) { + res.set(text, makeUniqueName(`_${text}`, identifiers)); + } + }); + return res; +} +function convertExportsAccesses(sourceFile, exports2, changes) { + forEachExportReference(sourceFile, (node, isAssignmentLhs) => { + if (isAssignmentLhs) { + return; + } + const { text } = node.name; + changes.replaceNode(sourceFile, node, factory.createIdentifier(exports2.get(text) || text)); + }); +} +function forEachExportReference(sourceFile, cb) { + sourceFile.forEachChild(function recur(node) { + if (isPropertyAccessExpression(node) && isExportsOrModuleExportsOrAlias(sourceFile, node.expression) && isIdentifier(node.name)) { + const { parent: parent2 } = node; + cb(node, isBinaryExpression(parent2) && parent2.left === node && parent2.operatorToken.kind === 64 /* EqualsToken */); + } + node.forEachChild(recur); + }); +} +function convertStatement(sourceFile, statement, checker, changes, identifiers, target, exports2, useSitesToUnqualify, quotePreference) { + switch (statement.kind) { + case 244 /* VariableStatement */: + convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference); + return false; + case 245 /* ExpressionStatement */: { + const { expression } = statement; + switch (expression.kind) { + case 214 /* CallExpression */: { + if (isRequireCall( + expression, + /*requireStringLiteralLikeArgument*/ + true + )) { + changes.replaceNode(sourceFile, statement, makeImport( + /*defaultImport*/ + void 0, + /*namedImports*/ + void 0, + expression.arguments[0], + quotePreference + )); + } + return false; + } + case 227 /* BinaryExpression */: { + const { operatorToken } = expression; + return operatorToken.kind === 64 /* EqualsToken */ && convertAssignment(sourceFile, checker, expression, changes, exports2, useSitesToUnqualify); + } + } + } + // falls through + default: + return false; + } +} +function convertVariableStatement(sourceFile, statement, changes, checker, identifiers, target, quotePreference) { + const { declarationList } = statement; + let foundImport = false; + const converted = map(declarationList.declarations, (decl) => { + const { name, initializer } = decl; + if (initializer) { + if (isExportsOrModuleExportsOrAlias(sourceFile, initializer)) { + foundImport = true; + return convertedImports([]); + } else if (isRequireCall( + initializer, + /*requireStringLiteralLikeArgument*/ + true + )) { + foundImport = true; + return convertSingleImport(name, initializer.arguments[0], checker, identifiers, target, quotePreference); + } else if (isPropertyAccessExpression(initializer) && isRequireCall( + initializer.expression, + /*requireStringLiteralLikeArgument*/ + true + )) { + foundImport = true; + return convertPropertyAccessImport(name, initializer.name.text, initializer.expression.arguments[0], identifiers, quotePreference); + } + } + return convertedImports([factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([decl], declarationList.flags) + )]); + }); + if (foundImport) { + changes.replaceNodeWithNodes(sourceFile, statement, flatMap(converted, (c) => c.newImports)); + let combinedUseSites; + forEach(converted, (c) => { + if (c.useSitesToUnqualify) { + copyEntries(c.useSitesToUnqualify, combinedUseSites ?? (combinedUseSites = /* @__PURE__ */ new Map())); + } + }); + return combinedUseSites; + } +} +function convertPropertyAccessImport(name, propertyName, moduleSpecifier, identifiers, quotePreference) { + switch (name.kind) { + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: { + const tmp = makeUniqueName(propertyName, identifiers); + return convertedImports([ + makeSingleImport(tmp, propertyName, moduleSpecifier, quotePreference), + makeConst( + /*modifiers*/ + void 0, + name, + factory.createIdentifier(tmp) + ) + ]); + } + case 80 /* Identifier */: + return convertedImports([makeSingleImport(name.text, propertyName, moduleSpecifier, quotePreference)]); + default: + return Debug.assertNever(name, `Convert to ES module got invalid syntax form ${name.kind}`); + } +} +function convertAssignment(sourceFile, checker, assignment, changes, exports2, useSitesToUnqualify) { + const { left, right } = assignment; + if (!isPropertyAccessExpression(left)) { + return false; + } + if (isExportsOrModuleExportsOrAlias(sourceFile, left)) { + if (isExportsOrModuleExportsOrAlias(sourceFile, right)) { + changes.delete(sourceFile, assignment.parent); + } else { + const replacement = isObjectLiteralExpression(right) ? tryChangeModuleExportsObject(right, useSitesToUnqualify) : isRequireCall( + right, + /*requireStringLiteralLikeArgument*/ + true + ) ? convertReExportAll(right.arguments[0], checker) : void 0; + if (replacement) { + changes.replaceNodeWithNodes(sourceFile, assignment.parent, replacement[0]); + return replacement[1]; + } else { + changes.replaceRangeWithText(sourceFile, createRange(left.getStart(sourceFile), right.pos), "export default"); + return true; + } + } + } else if (isExportsOrModuleExportsOrAlias(sourceFile, left.expression)) { + convertNamedExport(sourceFile, assignment, changes, exports2); + } + return false; +} +function tryChangeModuleExportsObject(object, useSitesToUnqualify) { + const statements = mapAllOrFail(object.properties, (prop) => { + switch (prop.kind) { + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + // TODO: Maybe we should handle this? See fourslash test `refactorConvertToEs6Module_export_object_shorthand.ts`. + // falls through + case 305 /* ShorthandPropertyAssignment */: + case 306 /* SpreadAssignment */: + return void 0; + case 304 /* PropertyAssignment */: + return !isIdentifier(prop.name) ? void 0 : convertExportsDotXEquals_replaceNode(prop.name.text, prop.initializer, useSitesToUnqualify); + case 175 /* MethodDeclaration */: + return !isIdentifier(prop.name) ? void 0 : functionExpressionToDeclaration(prop.name.text, [factory.createToken(95 /* ExportKeyword */)], prop, useSitesToUnqualify); + default: + Debug.assertNever(prop, `Convert to ES6 got invalid prop kind ${prop.kind}`); + } + }); + return statements && [statements, false]; +} +function convertNamedExport(sourceFile, assignment, changes, exports2) { + const { text } = assignment.left.name; + const rename = exports2.get(text); + if (rename !== void 0) { + const newNodes = [ + makeConst( + /*modifiers*/ + void 0, + rename, + assignment.right + ), + makeExportDeclaration([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + rename, + text + )]) + ]; + changes.replaceNodeWithNodes(sourceFile, assignment.parent, newNodes); + } else { + convertExportsPropertyAssignment(assignment, sourceFile, changes); + } +} +function convertReExportAll(reExported, checker) { + const moduleSpecifier = reExported.text; + const moduleSymbol = checker.getSymbolAtLocation(reExported); + const exports2 = moduleSymbol ? moduleSymbol.exports : emptyMap; + return exports2.has("export=" /* ExportEquals */) ? [[reExportDefault(moduleSpecifier)], true] : !exports2.has("default" /* Default */) ? [[reExportStar(moduleSpecifier)], false] : ( + // If there's some non-default export, must include both `export *` and `export default`. + exports2.size > 1 ? [[reExportStar(moduleSpecifier), reExportDefault(moduleSpecifier)], true] : [[reExportDefault(moduleSpecifier)], true] + ); +} +function reExportStar(moduleSpecifier) { + return makeExportDeclaration( + /*exportSpecifiers*/ + void 0, + moduleSpecifier + ); +} +function reExportDefault(moduleSpecifier) { + return makeExportDeclaration([factory.createExportSpecifier( + /*isTypeOnly*/ + false, + /*propertyName*/ + void 0, + "default" + )], moduleSpecifier); +} +function convertExportsPropertyAssignment({ left, right, parent: parent2 }, sourceFile, changes) { + const name = left.name.text; + if ((isFunctionExpression(right) || isArrowFunction(right) || isClassExpression(right)) && (!right.name || right.name.text === name)) { + changes.replaceRange(sourceFile, { pos: left.getStart(sourceFile), end: right.getStart(sourceFile) }, factory.createToken(95 /* ExportKeyword */), { suffix: " " }); + if (!right.name) changes.insertName(sourceFile, right, name); + const semi = findChildOfKind(parent2, 27 /* SemicolonToken */, sourceFile); + if (semi) changes.delete(sourceFile, semi); + } else { + changes.replaceNodeRangeWithNodes(sourceFile, left.expression, findChildOfKind(left, 25 /* DotToken */, sourceFile), [factory.createToken(95 /* ExportKeyword */), factory.createToken(87 /* ConstKeyword */)], { joiner: " ", suffix: " " }); + } +} +function convertExportsDotXEquals_replaceNode(name, exported, useSitesToUnqualify) { + const modifiers = [factory.createToken(95 /* ExportKeyword */)]; + switch (exported.kind) { + case 219 /* FunctionExpression */: { + const { name: expressionName } = exported; + if (expressionName && expressionName.text !== name) { + return exportConst(); + } + } + // falls through + case 220 /* ArrowFunction */: + return functionExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify); + case 232 /* ClassExpression */: + return classExpressionToDeclaration(name, modifiers, exported, useSitesToUnqualify); + default: + return exportConst(); + } + function exportConst() { + return makeConst(modifiers, factory.createIdentifier(name), replaceImportUseSites(exported, useSitesToUnqualify)); + } +} +function replaceImportUseSites(nodeOrNodes, useSitesToUnqualify) { + if (!useSitesToUnqualify || !some(arrayFrom(useSitesToUnqualify.keys()), (original) => rangeContainsRange(nodeOrNodes, original))) { + return nodeOrNodes; + } + return isArray(nodeOrNodes) ? getSynthesizedDeepClonesWithReplacements( + nodeOrNodes, + /*includeTrivia*/ + true, + replaceNode + ) : getSynthesizedDeepCloneWithReplacements( + nodeOrNodes, + /*includeTrivia*/ + true, + replaceNode + ); + function replaceNode(original) { + if (original.kind === 212 /* PropertyAccessExpression */) { + const replacement = useSitesToUnqualify.get(original); + useSitesToUnqualify.delete(original); + return replacement; + } + } +} +function convertSingleImport(name, moduleSpecifier, checker, identifiers, target, quotePreference) { + switch (name.kind) { + case 207 /* ObjectBindingPattern */: { + const importSpecifiers = mapAllOrFail(name.elements, (e) => e.dotDotDotToken || e.initializer || e.propertyName && !isIdentifier(e.propertyName) || !isIdentifier(e.name) ? void 0 : makeImportSpecifier2(e.propertyName && e.propertyName.text, e.name.text)); + if (importSpecifiers) { + return convertedImports([makeImport( + /*defaultImport*/ + void 0, + importSpecifiers, + moduleSpecifier, + quotePreference + )]); + } + } + // falls through -- object destructuring has an interesting pattern and must be a variable declaration + case 208 /* ArrayBindingPattern */: { + const tmp = makeUniqueName(moduleSpecifierToValidIdentifier(moduleSpecifier.text, target), identifiers); + return convertedImports([ + makeImport( + factory.createIdentifier(tmp), + /*namedImports*/ + void 0, + moduleSpecifier, + quotePreference + ), + makeConst( + /*modifiers*/ + void 0, + getSynthesizedDeepClone(name), + factory.createIdentifier(tmp) + ) + ]); + } + case 80 /* Identifier */: + return convertSingleIdentifierImport(name, moduleSpecifier, checker, identifiers, quotePreference); + default: + return Debug.assertNever(name, `Convert to ES module got invalid name kind ${name.kind}`); + } +} +function convertSingleIdentifierImport(name, moduleSpecifier, checker, identifiers, quotePreference) { + const nameSymbol = checker.getSymbolAtLocation(name); + const namedBindingsNames = /* @__PURE__ */ new Map(); + let needDefaultImport = false; + let useSitesToUnqualify; + for (const use of identifiers.original.get(name.text)) { + if (checker.getSymbolAtLocation(use) !== nameSymbol || use === name) { + continue; + } + const { parent: parent2 } = use; + if (isPropertyAccessExpression(parent2)) { + const { name: { text: propertyName } } = parent2; + if (propertyName === "default") { + needDefaultImport = true; + const importDefaultName = use.getText(); + (useSitesToUnqualify ?? (useSitesToUnqualify = /* @__PURE__ */ new Map())).set(parent2, factory.createIdentifier(importDefaultName)); + } else { + Debug.assert(parent2.expression === use, "Didn't expect expression === use"); + let idName = namedBindingsNames.get(propertyName); + if (idName === void 0) { + idName = makeUniqueName(propertyName, identifiers); + namedBindingsNames.set(propertyName, idName); + } + (useSitesToUnqualify ?? (useSitesToUnqualify = /* @__PURE__ */ new Map())).set(parent2, factory.createIdentifier(idName)); + } + } else { + needDefaultImport = true; + } + } + const namedBindings = namedBindingsNames.size === 0 ? void 0 : arrayFrom(mapIterator(namedBindingsNames.entries(), ([propertyName, idName]) => factory.createImportSpecifier( + /*isTypeOnly*/ + false, + propertyName === idName ? void 0 : factory.createIdentifier(propertyName), + factory.createIdentifier(idName) + ))); + if (!namedBindings) { + needDefaultImport = true; + } + return convertedImports( + [makeImport(needDefaultImport ? getSynthesizedDeepClone(name) : void 0, namedBindings, moduleSpecifier, quotePreference)], + useSitesToUnqualify + ); +} +function makeUniqueName(name, identifiers) { + while (identifiers.original.has(name) || identifiers.additional.has(name)) { + name = `_${name}`; + } + identifiers.additional.add(name); + return name; +} +function collectFreeIdentifiers(file) { + const map2 = createMultiMap(); + forEachFreeIdentifier(file, (id) => map2.add(id.text, id)); + return map2; +} +function forEachFreeIdentifier(node, cb) { + if (isIdentifier(node) && isFreeIdentifier(node)) cb(node); + node.forEachChild((child) => forEachFreeIdentifier(child, cb)); +} +function isFreeIdentifier(node) { + const { parent: parent2 } = node; + switch (parent2.kind) { + case 212 /* PropertyAccessExpression */: + return parent2.name !== node; + case 209 /* BindingElement */: + return parent2.propertyName !== node; + case 277 /* ImportSpecifier */: + return parent2.propertyName !== node; + default: + return true; + } +} +function functionExpressionToDeclaration(name, additionalModifiers, fn, useSitesToUnqualify) { + return factory.createFunctionDeclaration( + concatenate(additionalModifiers, getSynthesizedDeepClones(fn.modifiers)), + getSynthesizedDeepClone(fn.asteriskToken), + name, + getSynthesizedDeepClones(fn.typeParameters), + getSynthesizedDeepClones(fn.parameters), + getSynthesizedDeepClone(fn.type), + factory.converters.convertToFunctionBlock(replaceImportUseSites(fn.body, useSitesToUnqualify)) + ); +} +function classExpressionToDeclaration(name, additionalModifiers, cls, useSitesToUnqualify) { + return factory.createClassDeclaration( + concatenate(additionalModifiers, getSynthesizedDeepClones(cls.modifiers)), + name, + getSynthesizedDeepClones(cls.typeParameters), + getSynthesizedDeepClones(cls.heritageClauses), + replaceImportUseSites(cls.members, useSitesToUnqualify) + ); +} +function makeSingleImport(localName, propertyName, moduleSpecifier, quotePreference) { + return propertyName === "default" ? makeImport( + factory.createIdentifier(localName), + /*namedImports*/ + void 0, + moduleSpecifier, + quotePreference + ) : makeImport( + /*defaultImport*/ + void 0, + [makeImportSpecifier2(propertyName, localName)], + moduleSpecifier, + quotePreference + ); +} +function makeImportSpecifier2(propertyName, name) { + return factory.createImportSpecifier( + /*isTypeOnly*/ + false, + propertyName !== void 0 && propertyName !== name ? factory.createIdentifier(propertyName) : void 0, + factory.createIdentifier(name) + ); +} +function makeConst(modifiers, name, init) { + return factory.createVariableStatement( + modifiers, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + init + )], + 2 /* Const */ + ) + ); +} +function makeExportDeclaration(exportSpecifiers, moduleSpecifier) { + return factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + exportSpecifiers && factory.createNamedExports(exportSpecifiers), + moduleSpecifier === void 0 ? void 0 : factory.createStringLiteral(moduleSpecifier) + ); +} +function convertedImports(newImports, useSitesToUnqualify) { + return { + newImports, + useSitesToUnqualify + }; +} + +// src/services/codefixes/correctQualifiedNameToIndexedAccessType.ts +var fixId12 = "correctQualifiedNameToIndexedAccessType"; +var errorCodes13 = [Diagnostics.Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_property_1_in_0_with_0_1.code]; +registerCodeFix({ + errorCodes: errorCodes13, + getCodeActions(context) { + const qualifiedName = getQualifiedName(context.sourceFile, context.span.start); + if (!qualifiedName) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange10(t, context.sourceFile, qualifiedName)); + const newText = `${qualifiedName.left.text}["${qualifiedName.right.text}"]`; + return [createCodeFixAction(fixId12, changes, [Diagnostics.Rewrite_as_the_indexed_access_type_0, newText], fixId12, Diagnostics.Rewrite_all_as_indexed_access_types)]; + }, + fixIds: [fixId12], + getAllCodeActions: (context) => codeFixAll(context, errorCodes13, (changes, diag2) => { + const q = getQualifiedName(diag2.file, diag2.start); + if (q) { + doChange10(changes, diag2.file, q); + } + }) +}); +function getQualifiedName(sourceFile, pos) { + const qualifiedName = findAncestor(getTokenAtPosition(sourceFile, pos), isQualifiedName); + Debug.assert(!!qualifiedName, "Expected position to be owned by a qualified name."); + return isIdentifier(qualifiedName.left) ? qualifiedName : void 0; +} +function doChange10(changeTracker, sourceFile, qualifiedName) { + const rightText = qualifiedName.right.text; + const replacement = factory.createIndexedAccessTypeNode( + factory.createTypeReferenceNode( + qualifiedName.left, + /*typeArguments*/ + void 0 + ), + factory.createLiteralTypeNode(factory.createStringLiteral(rightText)) + ); + changeTracker.replaceNode(sourceFile, qualifiedName, replacement); +} + +// src/services/codefixes/convertToTypeOnlyExport.ts +var errorCodes14 = [Diagnostics.Re_exporting_a_type_when_0_is_enabled_requires_using_export_type.code]; +var fixId13 = "convertToTypeOnlyExport"; +registerCodeFix({ + errorCodes: errorCodes14, + getCodeActions: function getCodeActionsToConvertToTypeOnlyExport(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => fixSingleExportDeclaration(t, getExportSpecifierForDiagnosticSpan(context.span, context.sourceFile), context)); + if (changes.length) { + return [createCodeFixAction(fixId13, changes, Diagnostics.Convert_to_type_only_export, fixId13, Diagnostics.Convert_all_re_exported_types_to_type_only_exports)]; + } + }, + fixIds: [fixId13], + getAllCodeActions: function getAllCodeActionsToConvertToTypeOnlyExport(context) { + const fixedExportDeclarations = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes14, (changes, diag2) => { + const exportSpecifier = getExportSpecifierForDiagnosticSpan(diag2, context.sourceFile); + if (exportSpecifier && addToSeen(fixedExportDeclarations, getNodeId(exportSpecifier.parent.parent))) { + fixSingleExportDeclaration(changes, exportSpecifier, context); + } + }); + } +}); +function getExportSpecifierForDiagnosticSpan(span, sourceFile) { + return tryCast(getTokenAtPosition(sourceFile, span.start).parent, isExportSpecifier); +} +function fixSingleExportDeclaration(changes, exportSpecifier, context) { + if (!exportSpecifier) { + return; + } + const exportClause = exportSpecifier.parent; + const exportDeclaration = exportClause.parent; + const typeExportSpecifiers = getTypeExportSpecifiers(exportSpecifier, context); + if (typeExportSpecifiers.length === exportClause.elements.length) { + changes.insertModifierBefore(context.sourceFile, 156 /* TypeKeyword */, exportClause); + } else { + const valueExportDeclaration = factory.updateExportDeclaration( + exportDeclaration, + exportDeclaration.modifiers, + /*isTypeOnly*/ + false, + factory.updateNamedExports(exportClause, filter(exportClause.elements, (e) => !contains(typeExportSpecifiers, e))), + exportDeclaration.moduleSpecifier, + /*attributes*/ + void 0 + ); + const typeExportDeclaration = factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + true, + factory.createNamedExports(typeExportSpecifiers), + exportDeclaration.moduleSpecifier, + /*attributes*/ + void 0 + ); + changes.replaceNode(context.sourceFile, exportDeclaration, valueExportDeclaration, { + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.IncludeAll, + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Exclude + }); + changes.insertNodeAfter(context.sourceFile, exportDeclaration, typeExportDeclaration); + } +} +function getTypeExportSpecifiers(originExportSpecifier, context) { + const exportClause = originExportSpecifier.parent; + if (exportClause.elements.length === 1) { + return exportClause.elements; + } + const diagnostics = getDiagnosticsWithinSpan( + createTextSpanFromNode(exportClause), + context.program.getSemanticDiagnostics(context.sourceFile, context.cancellationToken) + ); + return filter(exportClause.elements, (element) => { + var _a; + return element === originExportSpecifier || ((_a = findDiagnosticForNode(element, diagnostics)) == null ? void 0 : _a.code) === errorCodes14[0]; + }); +} + +// src/services/codefixes/convertToTypeOnlyImport.ts +var errorCodes15 = [ + Diagnostics._0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled.code, + Diagnostics._0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled.code +]; +var fixId14 = "convertToTypeOnlyImport"; +registerCodeFix({ + errorCodes: errorCodes15, + getCodeActions: function getCodeActionsToConvertToTypeOnlyImport(context) { + var _a; + const declaration = getDeclaration2(context.sourceFile, context.span.start); + if (declaration) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange11(t, context.sourceFile, declaration)); + const importDeclarationChanges = declaration.kind === 277 /* ImportSpecifier */ && isImportDeclaration(declaration.parent.parent.parent) && canConvertImportDeclarationForSpecifier(declaration, context.sourceFile, context.program) ? ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange11(t, context.sourceFile, declaration.parent.parent.parent)) : void 0; + const mainAction = createCodeFixAction( + fixId14, + changes, + declaration.kind === 277 /* ImportSpecifier */ ? [Diagnostics.Use_type_0, ((_a = declaration.propertyName) == null ? void 0 : _a.text) ?? declaration.name.text] : Diagnostics.Use_import_type, + fixId14, + Diagnostics.Fix_all_with_type_only_imports + ); + if (some(importDeclarationChanges)) { + return [ + createCodeFixActionWithoutFixAll(fixId14, importDeclarationChanges, Diagnostics.Use_import_type), + mainAction + ]; + } + return [mainAction]; + } + return void 0; + }, + fixIds: [fixId14], + getAllCodeActions: function getAllCodeActionsToConvertToTypeOnlyImport(context) { + const fixedImportDeclarations = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes15, (changes, diag2) => { + const errorDeclaration = getDeclaration2(diag2.file, diag2.start); + if ((errorDeclaration == null ? void 0 : errorDeclaration.kind) === 273 /* ImportDeclaration */ && !fixedImportDeclarations.has(errorDeclaration)) { + doChange11(changes, diag2.file, errorDeclaration); + fixedImportDeclarations.add(errorDeclaration); + } else if ((errorDeclaration == null ? void 0 : errorDeclaration.kind) === 277 /* ImportSpecifier */ && isImportDeclaration(errorDeclaration.parent.parent.parent) && !fixedImportDeclarations.has(errorDeclaration.parent.parent.parent) && canConvertImportDeclarationForSpecifier(errorDeclaration, diag2.file, context.program)) { + doChange11(changes, diag2.file, errorDeclaration.parent.parent.parent); + fixedImportDeclarations.add(errorDeclaration.parent.parent.parent); + } else if ((errorDeclaration == null ? void 0 : errorDeclaration.kind) === 277 /* ImportSpecifier */) { + doChange11(changes, diag2.file, errorDeclaration); + } + }); + } +}); +function getDeclaration2(sourceFile, pos) { + const { parent: parent2 } = getTokenAtPosition(sourceFile, pos); + return isImportSpecifier(parent2) || isImportDeclaration(parent2) && parent2.importClause ? parent2 : void 0; +} +function canConvertImportDeclarationForSpecifier(specifier, sourceFile, program) { + if (specifier.parent.parent.name) { + return false; + } + const nonTypeOnlySpecifiers = specifier.parent.elements.filter((e) => !e.isTypeOnly); + if (nonTypeOnlySpecifiers.length === 1) { + return true; + } + const checker = program.getTypeChecker(); + for (const specifier2 of nonTypeOnlySpecifiers) { + const isUsedAsValue = ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(specifier2.name, checker, sourceFile, (usage) => { + const symbol = checker.getSymbolAtLocation(usage); + return !!symbol && checker.symbolIsValue(symbol) || !isValidTypeOnlyAliasUseSite(usage); + }); + if (isUsedAsValue) { + return false; + } + } + return true; +} +function doChange11(changes, sourceFile, declaration) { + var _a; + if (isImportSpecifier(declaration)) { + changes.replaceNode(sourceFile, declaration, factory.updateImportSpecifier( + declaration, + /*isTypeOnly*/ + true, + declaration.propertyName, + declaration.name + )); + } else { + const importClause = declaration.importClause; + if (importClause.name && importClause.namedBindings) { + changes.replaceNodeWithNodes(sourceFile, declaration, [ + factory.createImportDeclaration( + getSynthesizedDeepClones( + declaration.modifiers, + /*includeTrivia*/ + true + ), + factory.createImportClause( + 156 /* TypeKeyword */, + getSynthesizedDeepClone( + importClause.name, + /*includeTrivia*/ + true + ), + /*namedBindings*/ + void 0 + ), + getSynthesizedDeepClone( + declaration.moduleSpecifier, + /*includeTrivia*/ + true + ), + getSynthesizedDeepClone( + declaration.attributes, + /*includeTrivia*/ + true + ) + ), + factory.createImportDeclaration( + getSynthesizedDeepClones( + declaration.modifiers, + /*includeTrivia*/ + true + ), + factory.createImportClause( + 156 /* TypeKeyword */, + /*name*/ + void 0, + getSynthesizedDeepClone( + importClause.namedBindings, + /*includeTrivia*/ + true + ) + ), + getSynthesizedDeepClone( + declaration.moduleSpecifier, + /*includeTrivia*/ + true + ), + getSynthesizedDeepClone( + declaration.attributes, + /*includeTrivia*/ + true + ) + ) + ]); + } else { + const newNamedBindings = ((_a = importClause.namedBindings) == null ? void 0 : _a.kind) === 276 /* NamedImports */ ? factory.updateNamedImports( + importClause.namedBindings, + sameMap(importClause.namedBindings.elements, (e) => factory.updateImportSpecifier( + e, + /*isTypeOnly*/ + false, + e.propertyName, + e.name + )) + ) : importClause.namedBindings; + const importDeclaration = factory.updateImportDeclaration(declaration, declaration.modifiers, factory.updateImportClause(importClause, 156 /* TypeKeyword */, importClause.name, newNamedBindings), declaration.moduleSpecifier, declaration.attributes); + changes.replaceNode(sourceFile, declaration, importDeclaration); + } + } +} + +// src/services/codefixes/convertTypedefToType.ts +var fixId15 = "convertTypedefToType"; +var errorCodes16 = [Diagnostics.JSDoc_typedef_may_be_converted_to_TypeScript_type.code]; +registerCodeFix({ + fixIds: [fixId15], + errorCodes: errorCodes16, + getCodeActions(context) { + const newLineCharacter = getNewLineOrDefaultFromHost(context.host, context.formatContext.options); + const node = getTokenAtPosition( + context.sourceFile, + context.span.start + ); + if (!node) return; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange12(t, node, context.sourceFile, newLineCharacter)); + if (changes.length > 0) { + return [ + createCodeFixAction( + fixId15, + changes, + Diagnostics.Convert_typedef_to_TypeScript_type, + fixId15, + Diagnostics.Convert_all_typedef_to_TypeScript_types + ) + ]; + } + }, + getAllCodeActions: (context) => codeFixAll( + context, + errorCodes16, + (changes, diag2) => { + const newLineCharacter = getNewLineOrDefaultFromHost(context.host, context.formatContext.options); + const node = getTokenAtPosition(diag2.file, diag2.start); + const fixAll = true; + if (node) doChange12(changes, node, diag2.file, newLineCharacter, fixAll); + } + ) +}); +function doChange12(changes, node, sourceFile, newLine, fixAll = false) { + if (!isJSDocTypedefTag(node)) return; + const declaration = createDeclaration(node); + if (!declaration) return; + const commentNode = node.parent; + const { leftSibling, rightSibling } = getLeftAndRightSiblings(node); + let pos = commentNode.getStart(); + let prefix = ""; + if (!leftSibling && commentNode.comment) { + pos = findEndOfTextBetween(commentNode, commentNode.getStart(), node.getStart()); + prefix = `${newLine} */${newLine}`; + } + if (leftSibling) { + if (fixAll && isJSDocTypedefTag(leftSibling)) { + pos = node.getStart(); + prefix = ""; + } else { + pos = findEndOfTextBetween(commentNode, leftSibling.getStart(), node.getStart()); + prefix = `${newLine} */${newLine}`; + } + } + let end = commentNode.getEnd(); + let suffix = ""; + if (rightSibling) { + if (fixAll && isJSDocTypedefTag(rightSibling)) { + end = rightSibling.getStart(); + suffix = `${newLine}${newLine}`; + } else { + end = rightSibling.getStart(); + suffix = `${newLine}/**${newLine} * `; + } + } + changes.replaceRange(sourceFile, { pos, end }, declaration, { prefix, suffix }); +} +function getLeftAndRightSiblings(typedefNode) { + const commentNode = typedefNode.parent; + const maxChildIndex = commentNode.getChildCount() - 1; + const currentNodeIndex = commentNode.getChildren().findIndex( + (n) => n.getStart() === typedefNode.getStart() && n.getEnd() === typedefNode.getEnd() + ); + const leftSibling = currentNodeIndex > 0 ? commentNode.getChildAt(currentNodeIndex - 1) : void 0; + const rightSibling = currentNodeIndex < maxChildIndex ? commentNode.getChildAt(currentNodeIndex + 1) : void 0; + return { leftSibling, rightSibling }; +} +function findEndOfTextBetween(jsDocComment, from, to) { + const comment = jsDocComment.getText().substring(from - jsDocComment.getStart(), to - jsDocComment.getStart()); + for (let i = comment.length; i > 0; i--) { + if (!/[*/\s]/.test(comment.substring(i - 1, i))) { + return from + i; + } + } + return to; +} +function createDeclaration(tag) { + var _a; + const { typeExpression } = tag; + if (!typeExpression) return; + const typeName = (_a = tag.name) == null ? void 0 : _a.getText(); + if (!typeName) return; + if (typeExpression.kind === 323 /* JSDocTypeLiteral */) { + return createInterfaceForTypeLiteral(typeName, typeExpression); + } + if (typeExpression.kind === 310 /* JSDocTypeExpression */) { + return createTypeAliasForTypeExpression(typeName, typeExpression); + } +} +function createInterfaceForTypeLiteral(typeName, typeLiteral) { + const propertySignatures = createSignatureFromTypeLiteral(typeLiteral); + if (!some(propertySignatures)) return; + return factory.createInterfaceDeclaration( + /*modifiers*/ + void 0, + typeName, + /*typeParameters*/ + void 0, + /*heritageClauses*/ + void 0, + propertySignatures + ); +} +function createTypeAliasForTypeExpression(typeName, typeExpression) { + const typeReference = getSynthesizedDeepClone(typeExpression.type); + if (!typeReference) return; + return factory.createTypeAliasDeclaration( + /*modifiers*/ + void 0, + factory.createIdentifier(typeName), + /*typeParameters*/ + void 0, + typeReference + ); +} +function createSignatureFromTypeLiteral(typeLiteral) { + const propertyTags = typeLiteral.jsDocPropertyTags; + if (!some(propertyTags)) return; + const getSignature = (tag) => { + var _a; + const name = getPropertyName(tag); + const type = (_a = tag.typeExpression) == null ? void 0 : _a.type; + const isOptional = tag.isBracketed; + let typeReference; + if (type && isJSDocTypeLiteral(type)) { + const signatures = createSignatureFromTypeLiteral(type); + typeReference = factory.createTypeLiteralNode(signatures); + } else if (type) { + typeReference = getSynthesizedDeepClone(type); + } + if (typeReference && name) { + const questionToken = isOptional ? factory.createToken(58 /* QuestionToken */) : void 0; + return factory.createPropertySignature( + /*modifiers*/ + void 0, + name, + questionToken, + typeReference + ); + } + }; + return mapDefined(propertyTags, getSignature); +} +function getPropertyName(tag) { + return tag.name.kind === 80 /* Identifier */ ? tag.name.text : tag.name.right.text; +} +function getJSDocTypedefNodes(node) { + if (hasJSDocNodes(node)) { + return flatMap(node.jsDoc, (doc) => { + var _a; + return (_a = doc.tags) == null ? void 0 : _a.filter((tag) => isJSDocTypedefTag(tag)); + }); + } + return []; +} + +// src/services/codefixes/convertLiteralTypeToMappedType.ts +var fixId16 = "convertLiteralTypeToMappedType"; +var errorCodes17 = [Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0.code]; +registerCodeFix({ + errorCodes: errorCodes17, + getCodeActions: function getCodeActionsToConvertLiteralTypeToMappedType(context) { + const { sourceFile, span } = context; + const info = getInfo5(sourceFile, span.start); + if (!info) { + return void 0; + } + const { name, constraint } = info; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange13(t, sourceFile, info)); + return [createCodeFixAction(fixId16, changes, [Diagnostics.Convert_0_to_1_in_0, constraint, name], fixId16, Diagnostics.Convert_all_type_literals_to_mapped_type)]; + }, + fixIds: [fixId16], + getAllCodeActions: (context) => codeFixAll(context, errorCodes17, (changes, diag2) => { + const info = getInfo5(diag2.file, diag2.start); + if (info) { + doChange13(changes, diag2.file, info); + } + }) +}); +function getInfo5(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + if (isIdentifier(token)) { + const propertySignature = cast(token.parent.parent, isPropertySignature); + const propertyName = token.getText(sourceFile); + return { + container: cast(propertySignature.parent, isTypeLiteralNode), + typeNode: propertySignature.type, + constraint: propertyName, + name: propertyName === "K" ? "P" : "K" + }; + } + return void 0; +} +function doChange13(changes, sourceFile, { container, typeNode, constraint, name }) { + changes.replaceNode( + sourceFile, + container, + factory.createMappedTypeNode( + /*readonlyToken*/ + void 0, + factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + name, + factory.createTypeReferenceNode(constraint) + ), + /*nameType*/ + void 0, + /*questionToken*/ + void 0, + typeNode, + /*members*/ + void 0 + ) + ); +} + +// src/services/codefixes/fixClassIncorrectlyImplementsInterface.ts +var errorCodes18 = [ + Diagnostics.Class_0_incorrectly_implements_interface_1.code, + Diagnostics.Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclass.code +]; +var fixId17 = "fixClassIncorrectlyImplementsInterface"; +registerCodeFix({ + errorCodes: errorCodes18, + getCodeActions(context) { + const { sourceFile, span } = context; + const classDeclaration = getClass(sourceFile, span.start); + return mapDefined(getEffectiveImplementsTypeNodes(classDeclaration), (implementedTypeNode) => { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addMissingDeclarations(context, implementedTypeNode, sourceFile, classDeclaration, t, context.preferences)); + return changes.length === 0 ? void 0 : createCodeFixAction(fixId17, changes, [Diagnostics.Implement_interface_0, implementedTypeNode.getText(sourceFile)], fixId17, Diagnostics.Implement_all_unimplemented_interfaces); + }); + }, + fixIds: [fixId17], + getAllCodeActions(context) { + const seenClassDeclarations = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes18, (changes, diag2) => { + const classDeclaration = getClass(diag2.file, diag2.start); + if (addToSeen(seenClassDeclarations, getNodeId(classDeclaration))) { + for (const implementedTypeNode of getEffectiveImplementsTypeNodes(classDeclaration)) { + addMissingDeclarations(context, implementedTypeNode, diag2.file, classDeclaration, changes, context.preferences); + } + } + }); + } +}); +function getClass(sourceFile, pos) { + return Debug.checkDefined(getContainingClass(getTokenAtPosition(sourceFile, pos)), "There should be a containing class"); +} +function symbolPointsToNonPrivateMember(symbol) { + return !symbol.valueDeclaration || !(getEffectiveModifierFlags(symbol.valueDeclaration) & 2 /* Private */); +} +function addMissingDeclarations(context, implementedTypeNode, sourceFile, classDeclaration, changeTracker, preferences) { + const checker = context.program.getTypeChecker(); + const maybeHeritageClauseSymbol = getHeritageClauseSymbolTable(classDeclaration, checker); + const implementedType = checker.getTypeAtLocation(implementedTypeNode); + const implementedTypeSymbols = checker.getPropertiesOfType(implementedType); + const nonPrivateAndNotExistedInHeritageClauseMembers = implementedTypeSymbols.filter(and(symbolPointsToNonPrivateMember, (symbol) => !maybeHeritageClauseSymbol.has(symbol.escapedName))); + const classType = checker.getTypeAtLocation(classDeclaration); + const constructor = find(classDeclaration.members, (m) => isConstructorDeclaration(m)); + if (!classType.getNumberIndexType()) { + createMissingIndexSignatureDeclaration(implementedType, 1 /* Number */); + } + if (!classType.getStringIndexType()) { + createMissingIndexSignatureDeclaration(implementedType, 0 /* String */); + } + const importAdder = createImportAdder(sourceFile, context.program, preferences, context.host); + createMissingMemberNodes(classDeclaration, nonPrivateAndNotExistedInHeritageClauseMembers, sourceFile, context, preferences, importAdder, (member) => insertInterfaceMemberNode(sourceFile, classDeclaration, member)); + importAdder.writeFixes(changeTracker); + function createMissingIndexSignatureDeclaration(type, kind) { + const indexInfoOfKind = checker.getIndexInfoOfType(type, kind); + if (indexInfoOfKind) { + insertInterfaceMemberNode(sourceFile, classDeclaration, checker.indexInfoToIndexSignatureDeclaration( + indexInfoOfKind, + classDeclaration, + /*flags*/ + void 0, + /*internalFlags*/ + void 0, + getNoopSymbolTrackerWithResolver(context) + )); + } + } + function insertInterfaceMemberNode(sourceFile2, cls, newElement) { + if (constructor) { + changeTracker.insertNodeAfter(sourceFile2, constructor, newElement); + } else { + changeTracker.insertMemberAtStart(sourceFile2, cls, newElement); + } + } +} +function getHeritageClauseSymbolTable(classDeclaration, checker) { + const heritageClauseNode = getEffectiveBaseTypeNode(classDeclaration); + if (!heritageClauseNode) return createSymbolTable(); + const heritageClauseType = checker.getTypeAtLocation(heritageClauseNode); + const heritageClauseTypeSymbols = checker.getPropertiesOfType(heritageClauseType); + return createSymbolTable(heritageClauseTypeSymbols.filter(symbolPointsToNonPrivateMember)); +} + +// src/services/codefixes/importFixes.ts +var importFixName = "import"; +var importFixId = "fixMissingImport"; +var errorCodes19 = [ + Diagnostics.Cannot_find_name_0.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_1.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code, + Diagnostics.Cannot_find_namespace_0.code, + Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code, + Diagnostics._0_only_refers_to_a_type_but_is_being_used_as_a_value_here.code, + Diagnostics.No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer.code, + Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_1_or_later.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig.code, + Diagnostics.Cannot_find_namespace_0_Did_you_mean_1.code, + Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements.code, + Diagnostics.This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found.code +]; +registerCodeFix({ + errorCodes: errorCodes19, + getCodeActions(context) { + const { errorCode, preferences, sourceFile, span, program } = context; + const info = getFixInfos( + context, + errorCode, + span.start, + /*useAutoImportProvider*/ + true + ); + if (!info) return void 0; + return info.map( + ({ fix, symbolName: symbolName2, errorIdentifierText }) => codeActionForFix( + context, + sourceFile, + symbolName2, + fix, + /*includeSymbolNameInDescription*/ + symbolName2 !== errorIdentifierText, + program, + preferences + ) + ); + }, + fixIds: [importFixId], + getAllCodeActions: (context) => { + const { sourceFile, program, preferences, host, cancellationToken } = context; + const importAdder = createImportAdderWorker( + sourceFile, + program, + /*useAutoImportProvider*/ + true, + preferences, + host, + cancellationToken + ); + eachDiagnostic(context, errorCodes19, (diag2) => importAdder.addImportFromDiagnostic(diag2, context)); + return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, importAdder.writeFixes)); + } +}); +function createImportAdder(sourceFile, program, preferences, host, cancellationToken) { + return createImportAdderWorker( + sourceFile, + program, + /*useAutoImportProvider*/ + false, + preferences, + host, + cancellationToken + ); +} +function createImportAdderWorker(sourceFile, program, useAutoImportProvider, preferences, host, cancellationToken) { + const compilerOptions = program.getCompilerOptions(); + const addToNamespace = []; + const importType = []; + const addToExisting = /* @__PURE__ */ new Map(); + const removeExisting = /* @__PURE__ */ new Set(); + const verbatimImports = /* @__PURE__ */ new Set(); + const newImports = /* @__PURE__ */ new Map(); + return { addImportFromDiagnostic, addImportFromExportedSymbol, addImportForModuleSymbol, writeFixes, hasFixes, addImportForUnresolvedIdentifier, addImportForNonExistentExport, removeExistingImport, addVerbatimImport }; + function addVerbatimImport(declaration) { + verbatimImports.add(declaration); + } + function addImportForUnresolvedIdentifier(context, symbolToken, useAutoImportProvider2) { + const info = getFixInfosWithoutDiagnostic(context, symbolToken, useAutoImportProvider2); + if (!info || !info.length) return; + addImport(first(info)); + } + function addImportFromDiagnostic(diagnostic, context) { + const info = getFixInfos(context, diagnostic.code, diagnostic.start, useAutoImportProvider); + if (!info || !info.length) return; + addImport(first(info)); + } + function addImportFromExportedSymbol(exportedSymbol, isValidTypeOnlyUseSite, referenceImport) { + var _a, _b; + const moduleSymbol = Debug.checkDefined(exportedSymbol.parent, "Expected exported symbol to have module symbol as parent"); + const symbolName2 = getNameForExportedSymbol(exportedSymbol, getEmitScriptTarget(compilerOptions)); + const checker = program.getTypeChecker(); + const symbol = checker.getMergedSymbol(skipAlias(exportedSymbol, checker)); + const exportInfo = getAllExportInfoForSymbol( + sourceFile, + symbol, + symbolName2, + moduleSymbol, + /*preferCapitalized*/ + false, + program, + host, + preferences, + cancellationToken + ); + if (!exportInfo) { + Debug.assert((_a = preferences.autoImportFileExcludePatterns) == null ? void 0 : _a.length); + return; + } + const useRequire = shouldUseRequire(sourceFile, program); + let fix = getImportFixForSymbol( + sourceFile, + exportInfo, + program, + /*position*/ + void 0, + !!isValidTypeOnlyUseSite, + useRequire, + host, + preferences + ); + if (fix) { + const localName = ((_b = tryCast(referenceImport == null ? void 0 : referenceImport.name, isIdentifier)) == null ? void 0 : _b.text) ?? symbolName2; + let addAsTypeOnly; + let propertyName; + if (referenceImport && isTypeOnlyImportDeclaration(referenceImport) && (fix.kind === 3 /* AddNew */ || fix.kind === 2 /* AddToExisting */) && fix.addAsTypeOnly === 1 /* Allowed */) { + addAsTypeOnly = 2 /* Required */; + } + if (exportedSymbol.name !== localName) { + propertyName = exportedSymbol.name; + } + fix = { + ...fix, + ...addAsTypeOnly === void 0 ? {} : { addAsTypeOnly }, + ...propertyName === void 0 ? {} : { propertyName } + }; + addImport({ fix, symbolName: localName ?? symbolName2, errorIdentifierText: void 0 }); + } + } + function addImportForModuleSymbol(symbolAlias, isValidTypeOnlyUseSite, referenceImport) { + var _a, _b, _c; + const checker = program.getTypeChecker(); + const moduleSymbol = checker.getAliasedSymbol(symbolAlias); + Debug.assert(moduleSymbol.flags & 1536 /* Module */, "Expected symbol to be a module"); + const moduleSpecifierResolutionHost = createModuleSpecifierResolutionHost(program, host); + const moduleSpecifierResult = ts_moduleSpecifiers_exports.getModuleSpecifiersWithCacheInfo( + moduleSymbol, + checker, + compilerOptions, + sourceFile, + moduleSpecifierResolutionHost, + preferences, + /*options*/ + void 0, + /*forAutoImport*/ + true + ); + const useRequire = shouldUseRequire(sourceFile, program); + let addAsTypeOnly = getAddAsTypeOnly( + isValidTypeOnlyUseSite, + /*isForNewImportDeclaration*/ + true, + /*symbol*/ + void 0, + symbolAlias.flags, + program.getTypeChecker(), + compilerOptions + ); + addAsTypeOnly = addAsTypeOnly === 1 /* Allowed */ && isTypeOnlyImportDeclaration(referenceImport) ? 2 /* Required */ : 1 /* Allowed */; + const importKind = isImportDeclaration(referenceImport) ? isDefaultImport(referenceImport) ? 1 /* Default */ : 2 /* Namespace */ : isImportSpecifier(referenceImport) ? 0 /* Named */ : isImportClause(referenceImport) && !!referenceImport.name ? 1 /* Default */ : 2 /* Namespace */; + const exportInfo = [{ + symbol: symbolAlias, + moduleSymbol, + moduleFileName: (_c = (_b = (_a = moduleSymbol.declarations) == null ? void 0 : _a[0]) == null ? void 0 : _b.getSourceFile()) == null ? void 0 : _c.fileName, + exportKind: 4 /* Module */, + targetFlags: symbolAlias.flags, + isFromPackageJson: false + }]; + const existingFix = getImportFixForSymbol( + sourceFile, + exportInfo, + program, + /*position*/ + void 0, + !!isValidTypeOnlyUseSite, + useRequire, + host, + preferences + ); + let fix; + if (existingFix && importKind !== 2 /* Namespace */ && existingFix.kind !== 0 /* UseNamespace */ && existingFix.kind !== 1 /* JsdocTypeImport */) { + fix = { + ...existingFix, + addAsTypeOnly, + importKind + }; + } else { + fix = { + kind: 3 /* AddNew */, + moduleSpecifierKind: existingFix !== void 0 ? existingFix.moduleSpecifierKind : moduleSpecifierResult.kind, + moduleSpecifier: existingFix !== void 0 ? existingFix.moduleSpecifier : first(moduleSpecifierResult.moduleSpecifiers), + importKind, + addAsTypeOnly, + useRequire + }; + } + addImport({ fix, symbolName: symbolAlias.name, errorIdentifierText: void 0 }); + } + function addImportForNonExistentExport(exportName, exportingFileName, exportKind, exportedMeanings, isImportUsageValidAsTypeOnly) { + const exportingSourceFile = program.getSourceFile(exportingFileName); + const useRequire = shouldUseRequire(sourceFile, program); + if (exportingSourceFile && exportingSourceFile.symbol) { + const { fixes } = getImportFixes( + [{ + exportKind, + isFromPackageJson: false, + moduleFileName: exportingFileName, + moduleSymbol: exportingSourceFile.symbol, + targetFlags: exportedMeanings + }], + /*usagePosition*/ + void 0, + isImportUsageValidAsTypeOnly, + useRequire, + program, + sourceFile, + host, + preferences + ); + if (fixes.length) { + addImport({ fix: fixes[0], symbolName: exportName, errorIdentifierText: exportName }); + } + } else { + const futureExportingSourceFile = createFutureSourceFile(exportingFileName, 99 /* ESNext */, program, host); + const moduleSpecifier = ts_moduleSpecifiers_exports.getLocalModuleSpecifierBetweenFileNames( + sourceFile, + exportingFileName, + compilerOptions, + createModuleSpecifierResolutionHost(program, host), + preferences + ); + const importKind = getImportKind(futureExportingSourceFile, exportKind, program); + const addAsTypeOnly = getAddAsTypeOnly( + isImportUsageValidAsTypeOnly, + /*isForNewImportDeclaration*/ + true, + /*symbol*/ + void 0, + exportedMeanings, + program.getTypeChecker(), + compilerOptions + ); + const fix = { + kind: 3 /* AddNew */, + moduleSpecifierKind: "relative", + moduleSpecifier, + importKind, + addAsTypeOnly, + useRequire + }; + addImport({ fix, symbolName: exportName, errorIdentifierText: exportName }); + } + } + function removeExistingImport(declaration) { + if (declaration.kind === 274 /* ImportClause */) { + Debug.assertIsDefined(declaration.name, "ImportClause should have a name if it's being removed"); + } + removeExisting.add(declaration); + } + function addImport(info) { + var _a, _b, _c; + const { fix, symbolName: symbolName2 } = info; + switch (fix.kind) { + case 0 /* UseNamespace */: + addToNamespace.push(fix); + break; + case 1 /* JsdocTypeImport */: + importType.push(fix); + break; + case 2 /* AddToExisting */: { + const { importClauseOrBindingPattern, importKind, addAsTypeOnly, propertyName } = fix; + let entry = addToExisting.get(importClauseOrBindingPattern); + if (!entry) { + addToExisting.set(importClauseOrBindingPattern, entry = { importClauseOrBindingPattern, defaultImport: void 0, namedImports: /* @__PURE__ */ new Map() }); + } + if (importKind === 0 /* Named */) { + const prevTypeOnly = (_a = entry == null ? void 0 : entry.namedImports.get(symbolName2)) == null ? void 0 : _a.addAsTypeOnly; + entry.namedImports.set(symbolName2, { addAsTypeOnly: reduceAddAsTypeOnlyValues(prevTypeOnly, addAsTypeOnly), propertyName }); + } else { + Debug.assert(entry.defaultImport === void 0 || entry.defaultImport.name === symbolName2, "(Add to Existing) Default import should be missing or match symbolName"); + entry.defaultImport = { + name: symbolName2, + addAsTypeOnly: reduceAddAsTypeOnlyValues((_b = entry.defaultImport) == null ? void 0 : _b.addAsTypeOnly, addAsTypeOnly) + }; + } + break; + } + case 3 /* AddNew */: { + const { moduleSpecifier, importKind, useRequire, addAsTypeOnly, propertyName } = fix; + const entry = getNewImportEntry(moduleSpecifier, importKind, useRequire, addAsTypeOnly); + Debug.assert(entry.useRequire === useRequire, "(Add new) Tried to add an `import` and a `require` for the same module"); + switch (importKind) { + case 1 /* Default */: + Debug.assert(entry.defaultImport === void 0 || entry.defaultImport.name === symbolName2, "(Add new) Default import should be missing or match symbolName"); + entry.defaultImport = { name: symbolName2, addAsTypeOnly: reduceAddAsTypeOnlyValues((_c = entry.defaultImport) == null ? void 0 : _c.addAsTypeOnly, addAsTypeOnly) }; + break; + case 0 /* Named */: + const prevValue = (entry.namedImports || (entry.namedImports = /* @__PURE__ */ new Map())).get(symbolName2); + entry.namedImports.set(symbolName2, [reduceAddAsTypeOnlyValues(prevValue, addAsTypeOnly), propertyName]); + break; + case 3 /* CommonJS */: + if (compilerOptions.verbatimModuleSyntax) { + const prevValue2 = (entry.namedImports || (entry.namedImports = /* @__PURE__ */ new Map())).get(symbolName2); + entry.namedImports.set(symbolName2, [reduceAddAsTypeOnlyValues(prevValue2, addAsTypeOnly), propertyName]); + } else { + Debug.assert(entry.namespaceLikeImport === void 0 || entry.namespaceLikeImport.name === symbolName2, "Namespacelike import shoudl be missing or match symbolName"); + entry.namespaceLikeImport = { importKind, name: symbolName2, addAsTypeOnly }; + } + break; + case 2 /* Namespace */: + Debug.assert(entry.namespaceLikeImport === void 0 || entry.namespaceLikeImport.name === symbolName2, "Namespacelike import shoudl be missing or match symbolName"); + entry.namespaceLikeImport = { importKind, name: symbolName2, addAsTypeOnly }; + break; + } + break; + } + case 4 /* PromoteTypeOnly */: + break; + default: + Debug.assertNever(fix, `fix wasn't never - got kind ${fix.kind}`); + } + function reduceAddAsTypeOnlyValues(prevValue, newValue) { + return Math.max(prevValue ?? 0, newValue); + } + function getNewImportEntry(moduleSpecifier, importKind, useRequire, addAsTypeOnly) { + const typeOnlyKey = newImportsKey( + moduleSpecifier, + /*topLevelTypeOnly*/ + true + ); + const nonTypeOnlyKey = newImportsKey( + moduleSpecifier, + /*topLevelTypeOnly*/ + false + ); + const typeOnlyEntry = newImports.get(typeOnlyKey); + const nonTypeOnlyEntry = newImports.get(nonTypeOnlyKey); + const newEntry = { + defaultImport: void 0, + namedImports: void 0, + namespaceLikeImport: void 0, + useRequire + }; + if (importKind === 1 /* Default */ && addAsTypeOnly === 2 /* Required */) { + if (typeOnlyEntry) return typeOnlyEntry; + newImports.set(typeOnlyKey, newEntry); + return newEntry; + } + if (addAsTypeOnly === 1 /* Allowed */ && (typeOnlyEntry || nonTypeOnlyEntry)) { + return typeOnlyEntry || nonTypeOnlyEntry; + } + if (nonTypeOnlyEntry) { + return nonTypeOnlyEntry; + } + newImports.set(nonTypeOnlyKey, newEntry); + return newEntry; + } + function newImportsKey(moduleSpecifier, topLevelTypeOnly) { + return `${topLevelTypeOnly ? 1 : 0}|${moduleSpecifier}`; + } + } + function writeFixes(changeTracker, oldFileQuotePreference) { + var _a, _b; + let quotePreference; + if (sourceFile.imports !== void 0 && sourceFile.imports.length === 0 && oldFileQuotePreference !== void 0) { + quotePreference = oldFileQuotePreference; + } else { + quotePreference = getQuotePreference(sourceFile, preferences); + } + for (const fix of addToNamespace) { + addNamespaceQualifier(changeTracker, sourceFile, fix); + } + for (const fix of importType) { + addImportType(changeTracker, sourceFile, fix, quotePreference); + } + let importSpecifiersToRemoveWhileAdding; + if (removeExisting.size) { + Debug.assert(isFullSourceFile(sourceFile), "Cannot remove imports from a future source file"); + const importDeclarationsWithRemovals = new Set(mapDefined([...removeExisting], (d) => findAncestor(d, isImportDeclaration))); + const variableDeclarationsWithRemovals = new Set(mapDefined([...removeExisting], (d) => findAncestor(d, isVariableDeclarationInitializedToRequire))); + const emptyImportDeclarations = [...importDeclarationsWithRemovals].filter( + (d) => { + var _a2, _b2, _c; + return ( + // nothing added to the import declaration + !addToExisting.has(d.importClause) && // no default, or default is being removed + (!((_a2 = d.importClause) == null ? void 0 : _a2.name) || removeExisting.has(d.importClause)) && // no namespace import, or namespace import is being removed + (!tryCast((_b2 = d.importClause) == null ? void 0 : _b2.namedBindings, isNamespaceImport) || removeExisting.has(d.importClause.namedBindings)) && // no named imports, or all named imports are being removed + (!tryCast((_c = d.importClause) == null ? void 0 : _c.namedBindings, isNamedImports) || every(d.importClause.namedBindings.elements, (e) => removeExisting.has(e))) + ); + } + ); + const emptyVariableDeclarations = [...variableDeclarationsWithRemovals].filter( + (d) => ( + // no binding elements being added to the variable declaration + (d.name.kind !== 207 /* ObjectBindingPattern */ || !addToExisting.has(d.name)) && // no binding elements, or all binding elements are being removed + (d.name.kind !== 207 /* ObjectBindingPattern */ || every(d.name.elements, (e) => removeExisting.has(e))) + ) + ); + const namedBindingsToDelete = [...importDeclarationsWithRemovals].filter( + (d) => { + var _a2, _b2; + return ( + // has named bindings + ((_a2 = d.importClause) == null ? void 0 : _a2.namedBindings) && // is not being fully removed + emptyImportDeclarations.indexOf(d) === -1 && // is not gaining named imports + !((_b2 = addToExisting.get(d.importClause)) == null ? void 0 : _b2.namedImports) && // all named imports are being removed + (d.importClause.namedBindings.kind === 275 /* NamespaceImport */ || every(d.importClause.namedBindings.elements, (e) => removeExisting.has(e))) + ); + } + ); + for (const declaration of [...emptyImportDeclarations, ...emptyVariableDeclarations]) { + changeTracker.delete(sourceFile, declaration); + } + for (const declaration of namedBindingsToDelete) { + changeTracker.replaceNode( + sourceFile, + declaration.importClause, + factory.updateImportClause( + declaration.importClause, + declaration.importClause.phaseModifier, + declaration.importClause.name, + /*namedBindings*/ + void 0 + ) + ); + } + for (const declaration of removeExisting) { + const importDeclaration = findAncestor(declaration, isImportDeclaration); + if (importDeclaration && emptyImportDeclarations.indexOf(importDeclaration) === -1 && namedBindingsToDelete.indexOf(importDeclaration) === -1) { + if (declaration.kind === 274 /* ImportClause */) { + changeTracker.delete(sourceFile, declaration.name); + } else { + Debug.assert(declaration.kind === 277 /* ImportSpecifier */, "NamespaceImport should have been handled earlier"); + if ((_a = addToExisting.get(importDeclaration.importClause)) == null ? void 0 : _a.namedImports) { + (importSpecifiersToRemoveWhileAdding ?? (importSpecifiersToRemoveWhileAdding = /* @__PURE__ */ new Set())).add(declaration); + } else { + changeTracker.delete(sourceFile, declaration); + } + } + } else if (declaration.kind === 209 /* BindingElement */) { + if ((_b = addToExisting.get(declaration.parent)) == null ? void 0 : _b.namedImports) { + (importSpecifiersToRemoveWhileAdding ?? (importSpecifiersToRemoveWhileAdding = /* @__PURE__ */ new Set())).add(declaration); + } else { + changeTracker.delete(sourceFile, declaration); + } + } else if (declaration.kind === 272 /* ImportEqualsDeclaration */) { + changeTracker.delete(sourceFile, declaration); + } + } + } + addToExisting.forEach(({ importClauseOrBindingPattern, defaultImport, namedImports }) => { + doAddExistingFix( + changeTracker, + sourceFile, + importClauseOrBindingPattern, + defaultImport, + arrayFrom(namedImports.entries(), ([name, { addAsTypeOnly, propertyName }]) => ({ addAsTypeOnly, propertyName, name })), + importSpecifiersToRemoveWhileAdding, + preferences + ); + }); + let newDeclarations; + newImports.forEach(({ useRequire, defaultImport, namedImports, namespaceLikeImport }, key) => { + const moduleSpecifier = key.slice(2); + const getDeclarations = useRequire ? getNewRequires : getNewImports; + const declarations = getDeclarations( + moduleSpecifier, + quotePreference, + defaultImport, + namedImports && arrayFrom(namedImports.entries(), ([name, [addAsTypeOnly, propertyName]]) => ({ addAsTypeOnly, propertyName, name })), + namespaceLikeImport, + compilerOptions, + preferences + ); + newDeclarations = combine(newDeclarations, declarations); + }); + newDeclarations = combine(newDeclarations, getCombinedVerbatimImports()); + if (newDeclarations) { + insertImports( + changeTracker, + sourceFile, + newDeclarations, + /*blankLineBetween*/ + true, + preferences + ); + } + } + function getCombinedVerbatimImports() { + if (!verbatimImports.size) return void 0; + const importDeclarations = new Set(mapDefined([...verbatimImports], (d) => findAncestor(d, isImportDeclaration))); + const requireStatements = new Set(mapDefined([...verbatimImports], (d) => findAncestor(d, isRequireVariableStatement))); + return [ + ...mapDefined([...verbatimImports], (d) => d.kind === 272 /* ImportEqualsDeclaration */ ? getSynthesizedDeepClone( + d, + /*includeTrivia*/ + true + ) : void 0), + ...[...importDeclarations].map((d) => { + var _a; + if (verbatimImports.has(d)) { + return getSynthesizedDeepClone( + d, + /*includeTrivia*/ + true + ); + } + return getSynthesizedDeepClone( + factory.updateImportDeclaration( + d, + d.modifiers, + d.importClause && factory.updateImportClause( + d.importClause, + d.importClause.phaseModifier, + verbatimImports.has(d.importClause) ? d.importClause.name : void 0, + verbatimImports.has(d.importClause.namedBindings) ? d.importClause.namedBindings : ((_a = tryCast(d.importClause.namedBindings, isNamedImports)) == null ? void 0 : _a.elements.some((e) => verbatimImports.has(e))) ? factory.updateNamedImports( + d.importClause.namedBindings, + d.importClause.namedBindings.elements.filter((e) => verbatimImports.has(e)) + ) : void 0 + ), + d.moduleSpecifier, + d.attributes + ), + /*includeTrivia*/ + true + ); + }), + ...[...requireStatements].map((s) => { + if (verbatimImports.has(s)) { + return getSynthesizedDeepClone( + s, + /*includeTrivia*/ + true + ); + } + return getSynthesizedDeepClone( + factory.updateVariableStatement( + s, + s.modifiers, + factory.updateVariableDeclarationList( + s.declarationList, + mapDefined(s.declarationList.declarations, (d) => { + if (verbatimImports.has(d)) { + return d; + } + return factory.updateVariableDeclaration( + d, + d.name.kind === 207 /* ObjectBindingPattern */ ? factory.updateObjectBindingPattern( + d.name, + d.name.elements.filter((e) => verbatimImports.has(e)) + ) : d.name, + d.exclamationToken, + d.type, + d.initializer + ); + }) + ) + ), + /*includeTrivia*/ + true + ); + }) + ]; + } + function hasFixes() { + return addToNamespace.length > 0 || importType.length > 0 || addToExisting.size > 0 || newImports.size > 0 || verbatimImports.size > 0 || removeExisting.size > 0; + } +} +function createImportSpecifierResolver(importingFile, program, host, preferences) { + const packageJsonImportFilter = createPackageJsonImportFilter(importingFile, preferences, host); + const importMap = createExistingImportMap(importingFile, program); + return { getModuleSpecifierForBestExportInfo }; + function getModuleSpecifierForBestExportInfo(exportInfo, position, isValidTypeOnlyUseSite, fromCacheOnly) { + const { fixes, computedWithoutCacheCount } = getImportFixes( + exportInfo, + position, + isValidTypeOnlyUseSite, + /*useRequire*/ + false, + program, + importingFile, + host, + preferences, + importMap, + fromCacheOnly + ); + const result = getBestFix(fixes, importingFile, program, packageJsonImportFilter, host, preferences); + return result && { ...result, computedWithoutCacheCount }; + } +} +function getImportCompletionAction(targetSymbol, moduleSymbol, exportMapKey, sourceFile, symbolName2, isJsxTagName, host, program, formatContext, position, preferences, cancellationToken) { + let exportInfos; + if (exportMapKey) { + exportInfos = getExportInfoMap(sourceFile, host, program, preferences, cancellationToken).get(sourceFile.path, exportMapKey); + Debug.assertIsDefined(exportInfos, "Some exportInfo should match the specified exportMapKey"); + } else { + exportInfos = pathIsBareSpecifier(stripQuotes(moduleSymbol.name)) ? [getSingleExportInfoForSymbol(targetSymbol, symbolName2, moduleSymbol, program, host)] : getAllExportInfoForSymbol(sourceFile, targetSymbol, symbolName2, moduleSymbol, isJsxTagName, program, host, preferences, cancellationToken); + Debug.assertIsDefined(exportInfos, "Some exportInfo should match the specified symbol / moduleSymbol"); + } + const useRequire = shouldUseRequire(sourceFile, program); + const isValidTypeOnlyUseSite = isValidTypeOnlyAliasUseSite(getTokenAtPosition(sourceFile, position)); + const fix = Debug.checkDefined(getImportFixForSymbol(sourceFile, exportInfos, program, position, isValidTypeOnlyUseSite, useRequire, host, preferences)); + return { + moduleSpecifier: fix.moduleSpecifier, + codeAction: codeFixActionToCodeAction(codeActionForFix( + { host, formatContext, preferences }, + sourceFile, + symbolName2, + fix, + /*includeSymbolNameInDescription*/ + false, + program, + preferences + )) + }; +} +function getPromoteTypeOnlyCompletionAction(sourceFile, symbolToken, program, host, formatContext, preferences) { + const compilerOptions = program.getCompilerOptions(); + const symbolName2 = single(getSymbolNamesToImport(sourceFile, program.getTypeChecker(), symbolToken, compilerOptions)); + const fix = getTypeOnlyPromotionFix(sourceFile, symbolToken, symbolName2, program); + const includeSymbolNameInDescription = symbolName2 !== symbolToken.text; + return fix && codeFixActionToCodeAction(codeActionForFix( + { host, formatContext, preferences }, + sourceFile, + symbolName2, + fix, + includeSymbolNameInDescription, + program, + preferences + )); +} +function getImportFixForSymbol(sourceFile, exportInfos, program, position, isValidTypeOnlyUseSite, useRequire, host, preferences) { + const packageJsonImportFilter = createPackageJsonImportFilter(sourceFile, preferences, host); + return getBestFix(getImportFixes(exportInfos, position, isValidTypeOnlyUseSite, useRequire, program, sourceFile, host, preferences).fixes, sourceFile, program, packageJsonImportFilter, host, preferences); +} +function codeFixActionToCodeAction({ description: description3, changes, commands }) { + return { description: description3, changes, commands }; +} +function getAllExportInfoForSymbol(importingFile, symbol, symbolName2, moduleSymbol, preferCapitalized, program, host, preferences, cancellationToken) { + const getChecker = createGetChecker(program, host); + const isFileExcluded = preferences.autoImportFileExcludePatterns && getIsFileExcluded(host, preferences); + const mergedModuleSymbol = program.getTypeChecker().getMergedSymbol(moduleSymbol); + const moduleSourceFile = isFileExcluded && mergedModuleSymbol.declarations && getDeclarationOfKind(mergedModuleSymbol, 308 /* SourceFile */); + const moduleSymbolExcluded = moduleSourceFile && isFileExcluded(moduleSourceFile); + return getExportInfoMap(importingFile, host, program, preferences, cancellationToken).search(importingFile.path, preferCapitalized, (name) => name === symbolName2, (info) => { + const checker = getChecker(info[0].isFromPackageJson); + if (checker.getMergedSymbol(skipAlias(info[0].symbol, checker)) === symbol && (moduleSymbolExcluded || info.some((i) => checker.getMergedSymbol(i.moduleSymbol) === moduleSymbol || i.symbol.parent === moduleSymbol))) { + return info; + } + }); +} +function getSingleExportInfoForSymbol(symbol, symbolName2, moduleSymbol, program, host) { + var _a, _b; + const mainProgramInfo = getInfoWithChecker( + program.getTypeChecker(), + /*isFromPackageJson*/ + false + ); + if (mainProgramInfo) { + return mainProgramInfo; + } + const autoImportProvider = (_b = (_a = host.getPackageJsonAutoImportProvider) == null ? void 0 : _a.call(host)) == null ? void 0 : _b.getTypeChecker(); + return Debug.checkDefined(autoImportProvider && getInfoWithChecker( + autoImportProvider, + /*isFromPackageJson*/ + true + ), `Could not find symbol in specified module for code actions`); + function getInfoWithChecker(checker, isFromPackageJson) { + const defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker); + if (defaultInfo && skipAlias(defaultInfo.symbol, checker) === symbol) { + return { symbol: defaultInfo.symbol, moduleSymbol, moduleFileName: void 0, exportKind: defaultInfo.exportKind, targetFlags: skipAlias(symbol, checker).flags, isFromPackageJson }; + } + const named = checker.tryGetMemberInModuleExportsAndProperties(symbolName2, moduleSymbol); + if (named && skipAlias(named, checker) === symbol) { + return { symbol: named, moduleSymbol, moduleFileName: void 0, exportKind: 0 /* Named */, targetFlags: skipAlias(symbol, checker).flags, isFromPackageJson }; + } + } +} +function getImportFixes(exportInfos, usagePosition, isValidTypeOnlyUseSite, useRequire, program, sourceFile, host, preferences, importMap = isFullSourceFile(sourceFile) ? createExistingImportMap(sourceFile, program) : void 0, fromCacheOnly) { + const checker = program.getTypeChecker(); + const existingImports = importMap ? flatMap(exportInfos, importMap.getImportsForExportInfo) : emptyArray; + const useNamespace = usagePosition !== void 0 && tryUseExistingNamespaceImport(existingImports, usagePosition); + const addToExisting = tryAddToExistingImport(existingImports, isValidTypeOnlyUseSite, checker, program.getCompilerOptions()); + if (addToExisting) { + return { + computedWithoutCacheCount: 0, + fixes: [...useNamespace ? [useNamespace] : emptyArray, addToExisting] + }; + } + const { fixes, computedWithoutCacheCount = 0 } = getFixesForAddImport( + exportInfos, + existingImports, + program, + sourceFile, + usagePosition, + isValidTypeOnlyUseSite, + useRequire, + host, + preferences, + fromCacheOnly + ); + return { + computedWithoutCacheCount, + fixes: [...useNamespace ? [useNamespace] : emptyArray, ...fixes] + }; +} +function tryUseExistingNamespaceImport(existingImports, position) { + return firstDefined(existingImports, ({ declaration, importKind }) => { + var _a; + if (importKind !== 0 /* Named */) return void 0; + const namespacePrefix = getNamespaceLikeImportText(declaration); + const moduleSpecifier = namespacePrefix && ((_a = tryGetModuleSpecifierFromDeclaration(declaration)) == null ? void 0 : _a.text); + if (moduleSpecifier) { + return { kind: 0 /* UseNamespace */, namespacePrefix, usagePosition: position, moduleSpecifierKind: void 0, moduleSpecifier }; + } + }); +} +function getNamespaceLikeImportText(declaration) { + var _a, _b, _c; + switch (declaration.kind) { + case 261 /* VariableDeclaration */: + return (_a = tryCast(declaration.name, isIdentifier)) == null ? void 0 : _a.text; + case 272 /* ImportEqualsDeclaration */: + return declaration.name.text; + case 352 /* JSDocImportTag */: + case 273 /* ImportDeclaration */: + return (_c = tryCast((_b = declaration.importClause) == null ? void 0 : _b.namedBindings, isNamespaceImport)) == null ? void 0 : _c.name.text; + default: + return Debug.assertNever(declaration); + } +} +function getAddAsTypeOnly(isValidTypeOnlyUseSite, isForNewImportDeclaration, symbol, targetFlags, checker, compilerOptions) { + if (!isValidTypeOnlyUseSite) { + return 4 /* NotAllowed */; + } + if (symbol && compilerOptions.verbatimModuleSyntax && (!(targetFlags & 111551 /* Value */) || !!checker.getTypeOnlyAliasDeclaration(symbol))) { + return 2 /* Required */; + } + return 1 /* Allowed */; +} +function tryAddToExistingImport(existingImports, isValidTypeOnlyUseSite, checker, compilerOptions) { + let best; + for (const existingImport of existingImports) { + const fix = getAddToExistingImportFix(existingImport); + if (!fix) continue; + const isTypeOnly = isTypeOnlyImportDeclaration(fix.importClauseOrBindingPattern); + if (fix.addAsTypeOnly !== 4 /* NotAllowed */ && isTypeOnly || fix.addAsTypeOnly === 4 /* NotAllowed */ && !isTypeOnly) { + return fix; + } + best ?? (best = fix); + } + return best; + function getAddToExistingImportFix({ declaration, importKind, symbol, targetFlags }) { + if (importKind === 3 /* CommonJS */ || importKind === 2 /* Namespace */ || declaration.kind === 272 /* ImportEqualsDeclaration */) { + return void 0; + } + if (declaration.kind === 261 /* VariableDeclaration */) { + return (importKind === 0 /* Named */ || importKind === 1 /* Default */) && declaration.name.kind === 207 /* ObjectBindingPattern */ ? { kind: 2 /* AddToExisting */, importClauseOrBindingPattern: declaration.name, importKind, moduleSpecifierKind: void 0, moduleSpecifier: declaration.initializer.arguments[0].text, addAsTypeOnly: 4 /* NotAllowed */ } : void 0; + } + const { importClause } = declaration; + if (!importClause || !isStringLiteralLike(declaration.moduleSpecifier)) { + return void 0; + } + const { name, namedBindings } = importClause; + if (importClause.isTypeOnly && !(importKind === 0 /* Named */ && namedBindings)) { + return void 0; + } + const addAsTypeOnly = getAddAsTypeOnly( + isValidTypeOnlyUseSite, + /*isForNewImportDeclaration*/ + false, + symbol, + targetFlags, + checker, + compilerOptions + ); + if (importKind === 1 /* Default */ && (name || // Cannot add a default import to a declaration that already has one + addAsTypeOnly === 2 /* Required */ && namedBindings)) { + return void 0; + } + if (importKind === 0 /* Named */ && (namedBindings == null ? void 0 : namedBindings.kind) === 275 /* NamespaceImport */) { + return void 0; + } + return { + kind: 2 /* AddToExisting */, + importClauseOrBindingPattern: importClause, + importKind, + moduleSpecifierKind: void 0, + moduleSpecifier: declaration.moduleSpecifier.text, + addAsTypeOnly + }; + } +} +function createExistingImportMap(importingFile, program) { + const checker = program.getTypeChecker(); + let importMap; + for (const moduleSpecifier of importingFile.imports) { + const i = importFromModuleSpecifier(moduleSpecifier); + if (isVariableDeclarationInitializedToRequire(i.parent)) { + const moduleSymbol = checker.resolveExternalModuleName(moduleSpecifier); + if (moduleSymbol) { + (importMap || (importMap = createMultiMap())).add(getSymbolId(moduleSymbol), i.parent); + } + } else if (i.kind === 273 /* ImportDeclaration */ || i.kind === 272 /* ImportEqualsDeclaration */ || i.kind === 352 /* JSDocImportTag */) { + const moduleSymbol = checker.getSymbolAtLocation(moduleSpecifier); + if (moduleSymbol) { + (importMap || (importMap = createMultiMap())).add(getSymbolId(moduleSymbol), i); + } + } + } + return { + getImportsForExportInfo: ({ moduleSymbol, exportKind, targetFlags, symbol }) => { + const matchingDeclarations = importMap == null ? void 0 : importMap.get(getSymbolId(moduleSymbol)); + if (!matchingDeclarations) return emptyArray; + if (isSourceFileJS(importingFile) && !(targetFlags & 111551 /* Value */) && !every(matchingDeclarations, isJSDocImportTag)) return emptyArray; + const importKind = getImportKind(importingFile, exportKind, program); + return matchingDeclarations.map((declaration) => ({ declaration, importKind, symbol, targetFlags })); + } + }; +} +function shouldUseRequire(sourceFile, program) { + if (!hasJSFileExtension(sourceFile.fileName)) { + return false; + } + if (sourceFile.commonJsModuleIndicator && !sourceFile.externalModuleIndicator) return true; + if (sourceFile.externalModuleIndicator && !sourceFile.commonJsModuleIndicator) return false; + const compilerOptions = program.getCompilerOptions(); + if (compilerOptions.configFile) { + return getEmitModuleKind(compilerOptions) < 5 /* ES2015 */; + } + if (getImpliedNodeFormatForEmit(sourceFile, program) === 1 /* CommonJS */) return true; + if (getImpliedNodeFormatForEmit(sourceFile, program) === 99 /* ESNext */) return false; + for (const otherFile of program.getSourceFiles()) { + if (otherFile === sourceFile || !isSourceFileJS(otherFile) || program.isSourceFileFromExternalLibrary(otherFile)) continue; + if (otherFile.commonJsModuleIndicator && !otherFile.externalModuleIndicator) return true; + if (otherFile.externalModuleIndicator && !otherFile.commonJsModuleIndicator) return false; + } + return true; +} +function createGetChecker(program, host) { + return memoizeOne((isFromPackageJson) => isFromPackageJson ? host.getPackageJsonAutoImportProvider().getTypeChecker() : program.getTypeChecker()); +} +function getNewImportFixes(program, sourceFile, usagePosition, isValidTypeOnlyUseSite, useRequire, exportInfo, host, preferences, fromCacheOnly) { + const isJs = hasJSFileExtension(sourceFile.fileName); + const compilerOptions = program.getCompilerOptions(); + const moduleSpecifierResolutionHost = createModuleSpecifierResolutionHost(program, host); + const getChecker = createGetChecker(program, host); + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + const rejectNodeModulesRelativePaths = moduleResolutionUsesNodeModules(moduleResolution); + const getModuleSpecifiers2 = fromCacheOnly ? (exportInfo2) => ts_moduleSpecifiers_exports.tryGetModuleSpecifiersFromCache(exportInfo2.moduleSymbol, sourceFile, moduleSpecifierResolutionHost, preferences) : (exportInfo2, checker) => ts_moduleSpecifiers_exports.getModuleSpecifiersWithCacheInfo( + exportInfo2.moduleSymbol, + checker, + compilerOptions, + sourceFile, + moduleSpecifierResolutionHost, + preferences, + /*options*/ + void 0, + /*forAutoImport*/ + true + ); + let computedWithoutCacheCount = 0; + const fixes = flatMap(exportInfo, (exportInfo2, i) => { + const checker = getChecker(exportInfo2.isFromPackageJson); + const { computedWithoutCache, moduleSpecifiers, kind: moduleSpecifierKind } = getModuleSpecifiers2(exportInfo2, checker) ?? {}; + const importedSymbolHasValueMeaning = !!(exportInfo2.targetFlags & 111551 /* Value */); + const addAsTypeOnly = getAddAsTypeOnly( + isValidTypeOnlyUseSite, + /*isForNewImportDeclaration*/ + true, + exportInfo2.symbol, + exportInfo2.targetFlags, + checker, + compilerOptions + ); + computedWithoutCacheCount += computedWithoutCache ? 1 : 0; + return mapDefined(moduleSpecifiers, (moduleSpecifier) => { + if (rejectNodeModulesRelativePaths && pathContainsNodeModules(moduleSpecifier)) { + return void 0; + } + if (!importedSymbolHasValueMeaning && isJs && usagePosition !== void 0) { + return { kind: 1 /* JsdocTypeImport */, moduleSpecifierKind, moduleSpecifier, usagePosition, exportInfo: exportInfo2, isReExport: i > 0 }; + } + const importKind = getImportKind(sourceFile, exportInfo2.exportKind, program); + let qualification; + if (usagePosition !== void 0 && importKind === 3 /* CommonJS */ && exportInfo2.exportKind === 0 /* Named */) { + const exportEquals = checker.resolveExternalModuleSymbol(exportInfo2.moduleSymbol); + let namespacePrefix; + if (exportEquals !== exportInfo2.moduleSymbol) { + namespacePrefix = forEachNameOfDefaultExport(exportEquals, checker, getEmitScriptTarget(compilerOptions), identity); + } + namespacePrefix || (namespacePrefix = moduleSymbolToValidIdentifier( + exportInfo2.moduleSymbol, + getEmitScriptTarget(compilerOptions), + /*forceCapitalize*/ + false + )); + qualification = { namespacePrefix, usagePosition }; + } + return { + kind: 3 /* AddNew */, + moduleSpecifierKind, + moduleSpecifier, + importKind, + useRequire, + addAsTypeOnly, + exportInfo: exportInfo2, + isReExport: i > 0, + qualification + }; + }); + }); + return { computedWithoutCacheCount, fixes }; +} +function getFixesForAddImport(exportInfos, existingImports, program, sourceFile, usagePosition, isValidTypeOnlyUseSite, useRequire, host, preferences, fromCacheOnly) { + const existingDeclaration = firstDefined(existingImports, (info) => newImportInfoFromExistingSpecifier(info, isValidTypeOnlyUseSite, useRequire, program.getTypeChecker(), program.getCompilerOptions())); + return existingDeclaration ? { fixes: [existingDeclaration] } : getNewImportFixes(program, sourceFile, usagePosition, isValidTypeOnlyUseSite, useRequire, exportInfos, host, preferences, fromCacheOnly); +} +function newImportInfoFromExistingSpecifier({ declaration, importKind, symbol, targetFlags }, isValidTypeOnlyUseSite, useRequire, checker, compilerOptions) { + var _a; + const moduleSpecifier = (_a = tryGetModuleSpecifierFromDeclaration(declaration)) == null ? void 0 : _a.text; + if (moduleSpecifier) { + const addAsTypeOnly = useRequire ? 4 /* NotAllowed */ : getAddAsTypeOnly( + isValidTypeOnlyUseSite, + /*isForNewImportDeclaration*/ + true, + symbol, + targetFlags, + checker, + compilerOptions + ); + return { kind: 3 /* AddNew */, moduleSpecifierKind: void 0, moduleSpecifier, importKind, addAsTypeOnly, useRequire }; + } +} +function getFixInfos(context, errorCode, pos, useAutoImportProvider) { + const symbolToken = getTokenAtPosition(context.sourceFile, pos); + let info; + if (errorCode === Diagnostics._0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead.code) { + info = getFixesInfoForUMDImport(context, symbolToken); + } else if (!isIdentifier(symbolToken)) { + return void 0; + } else if (errorCode === Diagnostics._0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type.code) { + const symbolName2 = single(getSymbolNamesToImport(context.sourceFile, context.program.getTypeChecker(), symbolToken, context.program.getCompilerOptions())); + const fix = getTypeOnlyPromotionFix(context.sourceFile, symbolToken, symbolName2, context.program); + return fix && [{ fix, symbolName: symbolName2, errorIdentifierText: symbolToken.text }]; + } else { + info = getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider); + } + const packageJsonImportFilter = createPackageJsonImportFilter(context.sourceFile, context.preferences, context.host); + return info && sortFixInfo(info, context.sourceFile, context.program, packageJsonImportFilter, context.host, context.preferences); +} +function sortFixInfo(fixes, sourceFile, program, packageJsonImportFilter, host, preferences) { + const _toPath = (fileName) => toPath(fileName, host.getCurrentDirectory(), hostGetCanonicalFileName(host)); + return toSorted(fixes, (a, b) => compareBooleans(!!a.isJsxNamespaceFix, !!b.isJsxNamespaceFix) || compareValues(a.fix.kind, b.fix.kind) || compareModuleSpecifiers(a.fix, b.fix, sourceFile, program, preferences, packageJsonImportFilter.allowsImportingSpecifier, _toPath)); +} +function getFixInfosWithoutDiagnostic(context, symbolToken, useAutoImportProvider) { + const info = getFixesInfoForNonUMDImport(context, symbolToken, useAutoImportProvider); + const packageJsonImportFilter = createPackageJsonImportFilter(context.sourceFile, context.preferences, context.host); + return info && sortFixInfo(info, context.sourceFile, context.program, packageJsonImportFilter, context.host, context.preferences); +} +function getBestFix(fixes, sourceFile, program, packageJsonImportFilter, host, preferences) { + if (!some(fixes)) return; + if (fixes[0].kind === 0 /* UseNamespace */ || fixes[0].kind === 2 /* AddToExisting */) { + return fixes[0]; + } + return fixes.reduce( + (best, fix) => ( + // Takes true branch of conditional if `fix` is better than `best` + compareModuleSpecifiers( + fix, + best, + sourceFile, + program, + preferences, + packageJsonImportFilter.allowsImportingSpecifier, + (fileName) => toPath(fileName, host.getCurrentDirectory(), hostGetCanonicalFileName(host)) + ) === -1 /* LessThan */ ? fix : best + ) + ); +} +function compareModuleSpecifiers(a, b, importingFile, program, preferences, allowsImportingSpecifier, toPath3) { + if (a.kind !== 0 /* UseNamespace */ && b.kind !== 0 /* UseNamespace */) { + return compareBooleans( + b.moduleSpecifierKind !== "node_modules" || allowsImportingSpecifier(b.moduleSpecifier), + a.moduleSpecifierKind !== "node_modules" || allowsImportingSpecifier(a.moduleSpecifier) + ) || compareModuleSpecifierRelativity(a, b, preferences) || compareNodeCoreModuleSpecifiers(a.moduleSpecifier, b.moduleSpecifier, importingFile, program) || compareBooleans( + isFixPossiblyReExportingImportingFile(a, importingFile.path, toPath3), + isFixPossiblyReExportingImportingFile(b, importingFile.path, toPath3) + ) || compareNumberOfDirectorySeparators(a.moduleSpecifier, b.moduleSpecifier); + } + return 0 /* EqualTo */; +} +function compareModuleSpecifierRelativity(a, b, preferences) { + if (preferences.importModuleSpecifierPreference === "non-relative" || preferences.importModuleSpecifierPreference === "project-relative") { + return compareBooleans(a.moduleSpecifierKind === "relative", b.moduleSpecifierKind === "relative"); + } + return 0 /* EqualTo */; +} +function isFixPossiblyReExportingImportingFile(fix, importingFilePath, toPath3) { + var _a; + if (fix.isReExport && ((_a = fix.exportInfo) == null ? void 0 : _a.moduleFileName) && isIndexFileName(fix.exportInfo.moduleFileName)) { + const reExportDir = toPath3(getDirectoryPath(fix.exportInfo.moduleFileName)); + return startsWith(importingFilePath, reExportDir); + } + return false; +} +function isIndexFileName(fileName) { + return getBaseFileName( + fileName, + [".js", ".jsx", ".d.ts", ".ts", ".tsx"], + /*ignoreCase*/ + true + ) === "index"; +} +function compareNodeCoreModuleSpecifiers(a, b, importingFile, program) { + if (startsWith(a, "node:") && !startsWith(b, "node:")) return shouldUseUriStyleNodeCoreModules(importingFile, program) ? -1 /* LessThan */ : 1 /* GreaterThan */; + if (startsWith(b, "node:") && !startsWith(a, "node:")) return shouldUseUriStyleNodeCoreModules(importingFile, program) ? 1 /* GreaterThan */ : -1 /* LessThan */; + return 0 /* EqualTo */; +} +function getFixesInfoForUMDImport({ sourceFile, program, host, preferences }, token) { + const checker = program.getTypeChecker(); + const umdSymbol = getUmdSymbol(token, checker); + if (!umdSymbol) return void 0; + const symbol = checker.getAliasedSymbol(umdSymbol); + const symbolName2 = umdSymbol.name; + const exportInfo = [{ symbol: umdSymbol, moduleSymbol: symbol, moduleFileName: void 0, exportKind: 3 /* UMD */, targetFlags: symbol.flags, isFromPackageJson: false }]; + const useRequire = shouldUseRequire(sourceFile, program); + const fixes = getImportFixes( + exportInfo, + /*usagePosition*/ + void 0, + /*isValidTypeOnlyUseSite*/ + false, + useRequire, + program, + sourceFile, + host, + preferences + ).fixes; + return fixes.map((fix) => { + var _a; + return { fix, symbolName: symbolName2, errorIdentifierText: (_a = tryCast(token, isIdentifier)) == null ? void 0 : _a.text }; + }); +} +function getUmdSymbol(token, checker) { + const umdSymbol = isIdentifier(token) ? checker.getSymbolAtLocation(token) : void 0; + if (isUMDExportSymbol(umdSymbol)) return umdSymbol; + const { parent: parent2 } = token; + if (isJsxOpeningLikeElement(parent2) && parent2.tagName === token || isJsxOpeningFragment(parent2)) { + const parentSymbol = checker.resolveName( + checker.getJsxNamespace(parent2), + isJsxOpeningLikeElement(parent2) ? token : parent2, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + if (isUMDExportSymbol(parentSymbol)) { + return parentSymbol; + } + } + return void 0; +} +function getImportKind(importingFile, exportKind, program, forceImportKeyword) { + if (program.getCompilerOptions().verbatimModuleSyntax && getEmitModuleFormatOfFile(importingFile, program) === 1 /* CommonJS */) { + return 3 /* CommonJS */; + } + switch (exportKind) { + case 0 /* Named */: + return 0 /* Named */; + case 1 /* Default */: + return 1 /* Default */; + case 2 /* ExportEquals */: + return getExportEqualsImportKind(importingFile, program.getCompilerOptions(), !!forceImportKeyword); + case 3 /* UMD */: + return getUmdImportKind(importingFile, program, !!forceImportKeyword); + case 4 /* Module */: + return 2 /* Namespace */; + default: + return Debug.assertNever(exportKind); + } +} +function getUmdImportKind(importingFile, program, forceImportKeyword) { + if (getAllowSyntheticDefaultImports(program.getCompilerOptions())) { + return 1 /* Default */; + } + const moduleKind = getEmitModuleKind(program.getCompilerOptions()); + switch (moduleKind) { + case 2 /* AMD */: + case 1 /* CommonJS */: + case 3 /* UMD */: + if (hasJSFileExtension(importingFile.fileName)) { + return importingFile.externalModuleIndicator || forceImportKeyword ? 2 /* Namespace */ : 3 /* CommonJS */; + } + return 3 /* CommonJS */; + case 4 /* System */: + case 5 /* ES2015 */: + case 6 /* ES2020 */: + case 7 /* ES2022 */: + case 99 /* ESNext */: + case 0 /* None */: + case 200 /* Preserve */: + return 2 /* Namespace */; + case 100 /* Node16 */: + case 101 /* Node18 */: + case 102 /* Node20 */: + case 199 /* NodeNext */: + return getImpliedNodeFormatForEmit(importingFile, program) === 99 /* ESNext */ ? 2 /* Namespace */ : 3 /* CommonJS */; + default: + return Debug.assertNever(moduleKind, `Unexpected moduleKind ${moduleKind}`); + } +} +function getFixesInfoForNonUMDImport({ sourceFile, program, cancellationToken, host, preferences }, symbolToken, useAutoImportProvider) { + const checker = program.getTypeChecker(); + const compilerOptions = program.getCompilerOptions(); + return flatMap(getSymbolNamesToImport(sourceFile, checker, symbolToken, compilerOptions), (symbolName2) => { + if (symbolName2 === "default" /* Default */) { + return void 0; + } + const isValidTypeOnlyUseSite = isValidTypeOnlyAliasUseSite(symbolToken); + const useRequire = shouldUseRequire(sourceFile, program); + const exportInfo = getExportInfos(symbolName2, isJSXTagName(symbolToken), getMeaningFromLocation(symbolToken), cancellationToken, sourceFile, program, useAutoImportProvider, host, preferences); + return arrayFrom( + flatMapIterator(exportInfo.values(), (exportInfos) => getImportFixes(exportInfos, symbolToken.getStart(sourceFile), isValidTypeOnlyUseSite, useRequire, program, sourceFile, host, preferences).fixes), + (fix) => ({ fix, symbolName: symbolName2, errorIdentifierText: symbolToken.text, isJsxNamespaceFix: symbolName2 !== symbolToken.text }) + ); + }); +} +function getTypeOnlyPromotionFix(sourceFile, symbolToken, symbolName2, program) { + const checker = program.getTypeChecker(); + const symbol = checker.resolveName( + symbolName2, + symbolToken, + 111551 /* Value */, + /*excludeGlobals*/ + true + ); + if (!symbol) return void 0; + const typeOnlyAliasDeclaration = checker.getTypeOnlyAliasDeclaration(symbol); + if (!typeOnlyAliasDeclaration || getSourceFileOfNode(typeOnlyAliasDeclaration) !== sourceFile) return void 0; + return { kind: 4 /* PromoteTypeOnly */, typeOnlyAliasDeclaration }; +} +function getSymbolNamesToImport(sourceFile, checker, symbolToken, compilerOptions) { + const parent2 = symbolToken.parent; + if ((isJsxOpeningLikeElement(parent2) || isJsxClosingElement(parent2)) && parent2.tagName === symbolToken && jsxModeNeedsExplicitImport(compilerOptions.jsx)) { + const jsxNamespace = checker.getJsxNamespace(sourceFile); + if (needsJsxNamespaceFix(jsxNamespace, symbolToken, checker)) { + const needsComponentNameFix = !isIntrinsicJsxName(symbolToken.text) && !checker.resolveName( + symbolToken.text, + symbolToken, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + return needsComponentNameFix ? [symbolToken.text, jsxNamespace] : [jsxNamespace]; + } + } + return [symbolToken.text]; +} +function needsJsxNamespaceFix(jsxNamespace, symbolToken, checker) { + if (isIntrinsicJsxName(symbolToken.text)) return true; + const namespaceSymbol = checker.resolveName( + jsxNamespace, + symbolToken, + 111551 /* Value */, + /*excludeGlobals*/ + true + ); + return !namespaceSymbol || some(namespaceSymbol.declarations, isTypeOnlyImportOrExportDeclaration) && !(namespaceSymbol.flags & 111551 /* Value */); +} +function getExportInfos(symbolName2, isJsxTagName, currentTokenMeaning, cancellationToken, fromFile, program, useAutoImportProvider, host, preferences) { + var _a; + const originalSymbolToExportInfos = createMultiMap(); + const packageJsonFilter = createPackageJsonImportFilter(fromFile, preferences, host); + const moduleSpecifierCache = (_a = host.getModuleSpecifierCache) == null ? void 0 : _a.call(host); + const getModuleSpecifierResolutionHost = memoizeOne((isFromPackageJson) => { + return createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host); + }); + function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program2, isFromPackageJson) { + const moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson); + if (isImportable(program2, fromFile, toFile, moduleSymbol, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache)) { + const checker = program2.getTypeChecker(); + originalSymbolToExportInfos.add(getUniqueSymbolId(exportedSymbol, checker).toString(), { symbol: exportedSymbol, moduleSymbol, moduleFileName: toFile == null ? void 0 : toFile.fileName, exportKind, targetFlags: skipAlias(exportedSymbol, checker).flags, isFromPackageJson }); + } + } + forEachExternalModuleToImportFrom(program, host, preferences, useAutoImportProvider, (moduleSymbol, sourceFile, program2, isFromPackageJson) => { + const checker = program2.getTypeChecker(); + cancellationToken.throwIfCancellationRequested(); + const compilerOptions = program2.getCompilerOptions(); + const defaultInfo = getDefaultLikeExportInfo(moduleSymbol, checker); + if (defaultInfo && symbolFlagsHaveMeaning(checker.getSymbolFlags(defaultInfo.symbol), currentTokenMeaning) && forEachNameOfDefaultExport(defaultInfo.symbol, checker, getEmitScriptTarget(compilerOptions), (name, capitalizedName) => (isJsxTagName ? capitalizedName ?? name : name) === symbolName2)) { + addSymbol(moduleSymbol, sourceFile, defaultInfo.symbol, defaultInfo.exportKind, program2, isFromPackageJson); + } + const exportSymbolWithIdenticalName = checker.tryGetMemberInModuleExportsAndProperties(symbolName2, moduleSymbol); + if (exportSymbolWithIdenticalName && symbolFlagsHaveMeaning(checker.getSymbolFlags(exportSymbolWithIdenticalName), currentTokenMeaning)) { + addSymbol(moduleSymbol, sourceFile, exportSymbolWithIdenticalName, 0 /* Named */, program2, isFromPackageJson); + } + }); + return originalSymbolToExportInfos; +} +function getExportEqualsImportKind(importingFile, compilerOptions, forceImportKeyword) { + const allowSyntheticDefaults = getAllowSyntheticDefaultImports(compilerOptions); + const isJS = hasJSFileExtension(importingFile.fileName); + if (!isJS && getEmitModuleKind(compilerOptions) >= 5 /* ES2015 */) { + return allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */; + } + if (isJS) { + return importingFile.externalModuleIndicator || forceImportKeyword ? allowSyntheticDefaults ? 1 /* Default */ : 2 /* Namespace */ : 3 /* CommonJS */; + } + for (const statement of importingFile.statements ?? emptyArray) { + if (isImportEqualsDeclaration(statement) && !nodeIsMissing(statement.moduleReference)) { + return 3 /* CommonJS */; + } + } + return allowSyntheticDefaults ? 1 /* Default */ : 3 /* CommonJS */; +} +function codeActionForFix(context, sourceFile, symbolName2, fix, includeSymbolNameInDescription, program, preferences) { + let diag2; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (tracker) => { + diag2 = codeActionForFixWorker(tracker, sourceFile, symbolName2, fix, includeSymbolNameInDescription, program, preferences); + }); + return createCodeFixAction(importFixName, changes, diag2, importFixId, Diagnostics.Add_all_missing_imports); +} +function codeActionForFixWorker(changes, sourceFile, symbolName2, fix, includeSymbolNameInDescription, program, preferences) { + const quotePreference = getQuotePreference(sourceFile, preferences); + switch (fix.kind) { + case 0 /* UseNamespace */: + addNamespaceQualifier(changes, sourceFile, fix); + return [Diagnostics.Change_0_to_1, symbolName2, `${fix.namespacePrefix}.${symbolName2}`]; + case 1 /* JsdocTypeImport */: + addImportType(changes, sourceFile, fix, quotePreference); + return [Diagnostics.Change_0_to_1, symbolName2, getImportTypePrefix(fix.moduleSpecifier, quotePreference) + symbolName2]; + case 2 /* AddToExisting */: { + const { importClauseOrBindingPattern, importKind, addAsTypeOnly, moduleSpecifier } = fix; + doAddExistingFix( + changes, + sourceFile, + importClauseOrBindingPattern, + importKind === 1 /* Default */ ? { name: symbolName2, addAsTypeOnly } : void 0, + importKind === 0 /* Named */ ? [{ name: symbolName2, addAsTypeOnly }] : emptyArray, + /*removeExistingImportSpecifiers*/ + void 0, + preferences + ); + const moduleSpecifierWithoutQuotes = stripQuotes(moduleSpecifier); + return includeSymbolNameInDescription ? [Diagnostics.Import_0_from_1, symbolName2, moduleSpecifierWithoutQuotes] : [Diagnostics.Update_import_from_0, moduleSpecifierWithoutQuotes]; + } + case 3 /* AddNew */: { + const { importKind, moduleSpecifier, addAsTypeOnly, useRequire, qualification } = fix; + const getDeclarations = useRequire ? getNewRequires : getNewImports; + const defaultImport = importKind === 1 /* Default */ ? { name: symbolName2, addAsTypeOnly } : void 0; + const namedImports = importKind === 0 /* Named */ ? [{ name: symbolName2, addAsTypeOnly }] : void 0; + const namespaceLikeImport = importKind === 2 /* Namespace */ || importKind === 3 /* CommonJS */ ? { importKind, name: (qualification == null ? void 0 : qualification.namespacePrefix) || symbolName2, addAsTypeOnly } : void 0; + insertImports( + changes, + sourceFile, + getDeclarations( + moduleSpecifier, + quotePreference, + defaultImport, + namedImports, + namespaceLikeImport, + program.getCompilerOptions(), + preferences + ), + /*blankLineBetween*/ + true, + preferences + ); + if (qualification) { + addNamespaceQualifier(changes, sourceFile, qualification); + } + return includeSymbolNameInDescription ? [Diagnostics.Import_0_from_1, symbolName2, moduleSpecifier] : [Diagnostics.Add_import_from_0, moduleSpecifier]; + } + case 4 /* PromoteTypeOnly */: { + const { typeOnlyAliasDeclaration } = fix; + const promotedDeclaration = promoteFromTypeOnly(changes, typeOnlyAliasDeclaration, program, sourceFile, preferences); + return promotedDeclaration.kind === 277 /* ImportSpecifier */ ? [Diagnostics.Remove_type_from_import_of_0_from_1, symbolName2, getModuleSpecifierText(promotedDeclaration.parent.parent)] : [Diagnostics.Remove_type_from_import_declaration_from_0, getModuleSpecifierText(promotedDeclaration)]; + } + default: + return Debug.assertNever(fix, `Unexpected fix kind ${fix.kind}`); + } +} +function getModuleSpecifierText(promotedDeclaration) { + var _a, _b; + return promotedDeclaration.kind === 272 /* ImportEqualsDeclaration */ ? ((_b = tryCast((_a = tryCast(promotedDeclaration.moduleReference, isExternalModuleReference)) == null ? void 0 : _a.expression, isStringLiteralLike)) == null ? void 0 : _b.text) || promotedDeclaration.moduleReference.getText() : cast(promotedDeclaration.parent.moduleSpecifier, isStringLiteral).text; +} +function promoteFromTypeOnly(changes, aliasDeclaration, program, sourceFile, preferences) { + const compilerOptions = program.getCompilerOptions(); + const convertExistingToTypeOnly = compilerOptions.verbatimModuleSyntax; + switch (aliasDeclaration.kind) { + case 277 /* ImportSpecifier */: + if (aliasDeclaration.isTypeOnly) { + if (aliasDeclaration.parent.elements.length > 1) { + const newSpecifier = factory.updateImportSpecifier( + aliasDeclaration, + /*isTypeOnly*/ + false, + aliasDeclaration.propertyName, + aliasDeclaration.name + ); + const { specifierComparer } = ts_OrganizeImports_exports.getNamedImportSpecifierComparerWithDetection(aliasDeclaration.parent.parent.parent, preferences, sourceFile); + const insertionIndex = ts_OrganizeImports_exports.getImportSpecifierInsertionIndex(aliasDeclaration.parent.elements, newSpecifier, specifierComparer); + if (insertionIndex !== aliasDeclaration.parent.elements.indexOf(aliasDeclaration)) { + changes.delete(sourceFile, aliasDeclaration); + changes.insertImportSpecifierAtIndex(sourceFile, newSpecifier, aliasDeclaration.parent, insertionIndex); + return aliasDeclaration; + } + } + changes.deleteRange(sourceFile, { pos: getTokenPosOfNode(aliasDeclaration.getFirstToken()), end: getTokenPosOfNode(aliasDeclaration.propertyName ?? aliasDeclaration.name) }); + return aliasDeclaration; + } else { + Debug.assert(aliasDeclaration.parent.parent.isTypeOnly); + promoteImportClause(aliasDeclaration.parent.parent); + return aliasDeclaration.parent.parent; + } + case 274 /* ImportClause */: + promoteImportClause(aliasDeclaration); + return aliasDeclaration; + case 275 /* NamespaceImport */: + promoteImportClause(aliasDeclaration.parent); + return aliasDeclaration.parent; + case 272 /* ImportEqualsDeclaration */: + changes.deleteRange(sourceFile, aliasDeclaration.getChildAt(1)); + return aliasDeclaration; + default: + Debug.failBadSyntaxKind(aliasDeclaration); + } + function promoteImportClause(importClause) { + var _a; + changes.delete(sourceFile, getTypeKeywordOfTypeOnlyImport(importClause, sourceFile)); + if (!compilerOptions.allowImportingTsExtensions) { + const moduleSpecifier = tryGetModuleSpecifierFromDeclaration(importClause.parent); + const resolvedModule = moduleSpecifier && ((_a = program.getResolvedModuleFromModuleSpecifier(moduleSpecifier, sourceFile)) == null ? void 0 : _a.resolvedModule); + if (resolvedModule == null ? void 0 : resolvedModule.resolvedUsingTsExtension) { + const changedExtension = changeAnyExtension(moduleSpecifier.text, getOutputExtension(moduleSpecifier.text, compilerOptions)); + changes.replaceNode(sourceFile, moduleSpecifier, factory.createStringLiteral(changedExtension)); + } + } + if (convertExistingToTypeOnly) { + const namedImports = tryCast(importClause.namedBindings, isNamedImports); + if (namedImports && namedImports.elements.length > 1) { + const sortState = ts_OrganizeImports_exports.getNamedImportSpecifierComparerWithDetection(importClause.parent, preferences, sourceFile); + if (sortState.isSorted !== false && aliasDeclaration.kind === 277 /* ImportSpecifier */ && namedImports.elements.indexOf(aliasDeclaration) !== 0) { + changes.delete(sourceFile, aliasDeclaration); + changes.insertImportSpecifierAtIndex(sourceFile, aliasDeclaration, namedImports, 0); + } + for (const element of namedImports.elements) { + if (element !== aliasDeclaration && !element.isTypeOnly) { + changes.insertModifierBefore(sourceFile, 156 /* TypeKeyword */, element); + } + } + } + } + } +} +function doAddExistingFix(changes, sourceFile, clause, defaultImport, namedImports, removeExistingImportSpecifiers, preferences) { + var _a; + if (clause.kind === 207 /* ObjectBindingPattern */) { + if (removeExistingImportSpecifiers && clause.elements.some((e) => removeExistingImportSpecifiers.has(e))) { + changes.replaceNode( + sourceFile, + clause, + factory.createObjectBindingPattern([ + ...clause.elements.filter((e) => !removeExistingImportSpecifiers.has(e)), + ...defaultImport ? [factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + /*propertyName*/ + "default", + defaultImport.name + )] : emptyArray, + ...namedImports.map((i) => factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + i.propertyName, + i.name + )) + ]) + ); + return; + } + if (defaultImport) { + addElementToBindingPattern(clause, defaultImport.name, "default"); + } + for (const specifier of namedImports) { + addElementToBindingPattern(clause, specifier.name, specifier.propertyName); + } + return; + } + const promoteFromTypeOnly2 = clause.isTypeOnly && some([defaultImport, ...namedImports], (i) => (i == null ? void 0 : i.addAsTypeOnly) === 4 /* NotAllowed */); + const existingSpecifiers = clause.namedBindings && ((_a = tryCast(clause.namedBindings, isNamedImports)) == null ? void 0 : _a.elements); + if (defaultImport) { + Debug.assert(!clause.name, "Cannot add a default import to an import clause that already has one"); + changes.insertNodeAt(sourceFile, clause.getStart(sourceFile), factory.createIdentifier(defaultImport.name), { suffix: ", " }); + } + if (namedImports.length) { + const { specifierComparer, isSorted } = ts_OrganizeImports_exports.getNamedImportSpecifierComparerWithDetection(clause.parent, preferences, sourceFile); + const newSpecifiers = toSorted( + namedImports.map( + (namedImport) => factory.createImportSpecifier( + (!clause.isTypeOnly || promoteFromTypeOnly2) && shouldUseTypeOnly(namedImport, preferences), + namedImport.propertyName === void 0 ? void 0 : factory.createIdentifier(namedImport.propertyName), + factory.createIdentifier(namedImport.name) + ) + ), + specifierComparer + ); + if (removeExistingImportSpecifiers) { + changes.replaceNode( + sourceFile, + clause.namedBindings, + factory.updateNamedImports( + clause.namedBindings, + toSorted([...existingSpecifiers.filter((s) => !removeExistingImportSpecifiers.has(s)), ...newSpecifiers], specifierComparer) + ) + ); + } else if ((existingSpecifiers == null ? void 0 : existingSpecifiers.length) && isSorted !== false) { + const transformedExistingSpecifiers = promoteFromTypeOnly2 && existingSpecifiers ? factory.updateNamedImports( + clause.namedBindings, + sameMap(existingSpecifiers, (e) => factory.updateImportSpecifier( + e, + /*isTypeOnly*/ + true, + e.propertyName, + e.name + )) + ).elements : existingSpecifiers; + for (const spec of newSpecifiers) { + const insertionIndex = ts_OrganizeImports_exports.getImportSpecifierInsertionIndex(transformedExistingSpecifiers, spec, specifierComparer); + changes.insertImportSpecifierAtIndex(sourceFile, spec, clause.namedBindings, insertionIndex); + } + } else if (existingSpecifiers == null ? void 0 : existingSpecifiers.length) { + for (const spec of newSpecifiers) { + changes.insertNodeInListAfter(sourceFile, last(existingSpecifiers), spec, existingSpecifiers); + } + } else { + if (newSpecifiers.length) { + const namedImports2 = factory.createNamedImports(newSpecifiers); + if (clause.namedBindings) { + changes.replaceNode(sourceFile, clause.namedBindings, namedImports2); + } else { + changes.insertNodeAfter(sourceFile, Debug.checkDefined(clause.name, "Import clause must have either named imports or a default import"), namedImports2); + } + } + } + } + if (promoteFromTypeOnly2) { + changes.delete(sourceFile, getTypeKeywordOfTypeOnlyImport(clause, sourceFile)); + if (existingSpecifiers) { + for (const specifier of existingSpecifiers) { + changes.insertModifierBefore(sourceFile, 156 /* TypeKeyword */, specifier); + } + } + } + function addElementToBindingPattern(bindingPattern, name, propertyName) { + const element = factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + propertyName, + name + ); + if (bindingPattern.elements.length) { + changes.insertNodeInListAfter(sourceFile, last(bindingPattern.elements), element); + } else { + changes.replaceNode(sourceFile, bindingPattern, factory.createObjectBindingPattern([element])); + } + } +} +function addNamespaceQualifier(changes, sourceFile, { namespacePrefix, usagePosition }) { + changes.insertText(sourceFile, usagePosition, namespacePrefix + "."); +} +function addImportType(changes, sourceFile, { moduleSpecifier, usagePosition: position }, quotePreference) { + changes.insertText(sourceFile, position, getImportTypePrefix(moduleSpecifier, quotePreference)); +} +function getImportTypePrefix(moduleSpecifier, quotePreference) { + const quote2 = getQuoteFromPreference(quotePreference); + return `import(${quote2}${moduleSpecifier}${quote2}).`; +} +function needsTypeOnly({ addAsTypeOnly }) { + return addAsTypeOnly === 2 /* Required */; +} +function shouldUseTypeOnly(info, preferences) { + return needsTypeOnly(info) || !!preferences.preferTypeOnlyAutoImports && info.addAsTypeOnly !== 4 /* NotAllowed */; +} +function getNewImports(moduleSpecifier, quotePreference, defaultImport, namedImports, namespaceLikeImport, compilerOptions, preferences) { + const quotedModuleSpecifier = makeStringLiteral(moduleSpecifier, quotePreference); + let statements; + if (defaultImport !== void 0 || (namedImports == null ? void 0 : namedImports.length)) { + const topLevelTypeOnly = (!defaultImport || needsTypeOnly(defaultImport)) && every(namedImports, needsTypeOnly) || (compilerOptions.verbatimModuleSyntax || preferences.preferTypeOnlyAutoImports) && (defaultImport == null ? void 0 : defaultImport.addAsTypeOnly) !== 4 /* NotAllowed */ && !some(namedImports, (i) => i.addAsTypeOnly === 4 /* NotAllowed */); + statements = combine( + statements, + makeImport( + defaultImport && factory.createIdentifier(defaultImport.name), + namedImports == null ? void 0 : namedImports.map( + (namedImport) => factory.createImportSpecifier( + !topLevelTypeOnly && shouldUseTypeOnly(namedImport, preferences), + namedImport.propertyName === void 0 ? void 0 : factory.createIdentifier(namedImport.propertyName), + factory.createIdentifier(namedImport.name) + ) + ), + moduleSpecifier, + quotePreference, + topLevelTypeOnly + ) + ); + } + if (namespaceLikeImport) { + const declaration = namespaceLikeImport.importKind === 3 /* CommonJS */ ? factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + shouldUseTypeOnly(namespaceLikeImport, preferences), + factory.createIdentifier(namespaceLikeImport.name), + factory.createExternalModuleReference(quotedModuleSpecifier) + ) : factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + shouldUseTypeOnly(namespaceLikeImport, preferences) ? 156 /* TypeKeyword */ : void 0, + /*name*/ + void 0, + factory.createNamespaceImport(factory.createIdentifier(namespaceLikeImport.name)) + ), + quotedModuleSpecifier, + /*attributes*/ + void 0 + ); + statements = combine(statements, declaration); + } + return Debug.checkDefined(statements); +} +function getNewRequires(moduleSpecifier, quotePreference, defaultImport, namedImports, namespaceLikeImport) { + const quotedModuleSpecifier = makeStringLiteral(moduleSpecifier, quotePreference); + let statements; + if (defaultImport || (namedImports == null ? void 0 : namedImports.length)) { + const bindingElements = (namedImports == null ? void 0 : namedImports.map(({ name, propertyName }) => factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + propertyName, + name + ))) || []; + if (defaultImport) { + bindingElements.unshift(factory.createBindingElement( + /*dotDotDotToken*/ + void 0, + "default", + defaultImport.name + )); + } + const declaration = createConstEqualsRequireDeclaration(factory.createObjectBindingPattern(bindingElements), quotedModuleSpecifier); + statements = combine(statements, declaration); + } + if (namespaceLikeImport) { + const declaration = createConstEqualsRequireDeclaration(namespaceLikeImport.name, quotedModuleSpecifier); + statements = combine(statements, declaration); + } + return Debug.checkDefined(statements); +} +function createConstEqualsRequireDeclaration(name, quotedModuleSpecifier) { + return factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + typeof name === "string" ? factory.createIdentifier(name) : name, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + factory.createCallExpression( + factory.createIdentifier("require"), + /*typeArguments*/ + void 0, + [quotedModuleSpecifier] + ) + ) + ], 2 /* Const */) + ); +} +function symbolFlagsHaveMeaning(flags, meaning) { + return meaning === 7 /* All */ ? true : meaning & 1 /* Value */ ? !!(flags & 111551 /* Value */) : meaning & 2 /* Type */ ? !!(flags & 788968 /* Type */) : meaning & 4 /* Namespace */ ? !!(flags & 1920 /* Namespace */) : false; +} +function getImpliedNodeFormatForEmit(file, program) { + return isFullSourceFile(file) ? program.getImpliedNodeFormatForEmit(file) : getImpliedNodeFormatForEmitWorker(file, program.getCompilerOptions()); +} +function getEmitModuleFormatOfFile(file, program) { + return isFullSourceFile(file) ? program.getEmitModuleFormatOfFile(file) : getEmitModuleFormatOfFileWorker(file, program.getCompilerOptions()); +} + +// src/services/codefixes/fixAddMissingConstraint.ts +var fixId18 = "addMissingConstraint"; +var errorCodes20 = [ + // We want errors this could be attached to: + // Diagnostics.This_type_parameter_probably_needs_an_extends_0_constraint + Diagnostics.Type_0_is_not_comparable_to_type_1.code, + Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code, + Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code, + Diagnostics.Type_0_is_not_assignable_to_type_1.code, + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties.code, + Diagnostics.Property_0_is_incompatible_with_index_signature.code, + Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code, + Diagnostics.Type_0_does_not_satisfy_the_constraint_1.code +]; +registerCodeFix({ + errorCodes: errorCodes20, + getCodeActions(context) { + const { sourceFile, span, program, preferences, host } = context; + const info = getInfo6(program, sourceFile, span); + if (info === void 0) return; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addMissingConstraint(t, program, preferences, host, sourceFile, info)); + return [createCodeFixAction(fixId18, changes, Diagnostics.Add_extends_constraint, fixId18, Diagnostics.Add_extends_constraint_to_all_type_parameters)]; + }, + fixIds: [fixId18], + getAllCodeActions: (context) => { + const { program, preferences, host } = context; + const seen = /* @__PURE__ */ new Set(); + return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, (changes) => { + eachDiagnostic(context, errorCodes20, (diag2) => { + const info = getInfo6(program, diag2.file, createTextSpan(diag2.start, diag2.length)); + if (info) { + if (addToSeen(seen, getNodeId(info.declaration))) { + return addMissingConstraint(changes, program, preferences, host, diag2.file, info); + } + } + return void 0; + }); + })); + } +}); +function getInfo6(program, sourceFile, span) { + const diag2 = find(program.getSemanticDiagnostics(sourceFile), (diag3) => diag3.start === span.start && diag3.length === span.length); + if (diag2 === void 0 || diag2.relatedInformation === void 0) return; + const related = find(diag2.relatedInformation, (related2) => related2.code === Diagnostics.This_type_parameter_might_need_an_extends_0_constraint.code); + if (related === void 0 || related.file === void 0 || related.start === void 0 || related.length === void 0) return; + let declaration = findAncestorMatchingSpan(related.file, createTextSpan(related.start, related.length)); + if (declaration === void 0) return; + if (isIdentifier(declaration) && isTypeParameterDeclaration(declaration.parent)) { + declaration = declaration.parent; + } + if (isTypeParameterDeclaration(declaration)) { + if (isMappedTypeNode(declaration.parent)) return; + const token = getTokenAtPosition(sourceFile, span.start); + const checker = program.getTypeChecker(); + const constraint = tryGetConstraintType(checker, token) || tryGetConstraintFromDiagnosticMessage(related.messageText); + return { constraint, declaration, token }; + } + return void 0; +} +function addMissingConstraint(changes, program, preferences, host, sourceFile, info) { + const { declaration, constraint } = info; + const checker = program.getTypeChecker(); + if (isString(constraint)) { + changes.insertText(sourceFile, declaration.name.end, ` extends ${constraint}`); + } else { + const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); + const tracker = getNoopSymbolTrackerWithResolver({ program, host }); + const importAdder = createImportAdder(sourceFile, program, preferences, host); + const typeNode = typeToAutoImportableTypeNode( + checker, + importAdder, + constraint, + /*contextNode*/ + void 0, + scriptTarget, + /*flags*/ + void 0, + /*internalFlags*/ + void 0, + tracker + ); + if (typeNode) { + changes.replaceNode(sourceFile, declaration, factory.updateTypeParameterDeclaration( + declaration, + /*modifiers*/ + void 0, + declaration.name, + typeNode, + declaration.default + )); + importAdder.writeFixes(changes); + } + } +} +function tryGetConstraintFromDiagnosticMessage(messageText) { + const [, constraint] = flattenDiagnosticMessageText(messageText, "\n", 0).match(/`extends (.*)`/) || []; + return constraint; +} +function tryGetConstraintType(checker, node) { + if (isTypeNode(node.parent)) { + return checker.getTypeArgumentConstraint(node.parent); + } + const contextualType = isExpression(node) ? checker.getContextualType(node) : void 0; + return contextualType || checker.getTypeAtLocation(node); +} + +// src/services/codefixes/fixOverrideModifier.ts +var fixName = "fixOverrideModifier"; +var fixAddOverrideId = "fixAddOverrideModifier"; +var fixRemoveOverrideId = "fixRemoveOverrideModifier"; +var errorCodes21 = [ + Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code, + Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code, + Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code, + Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code, + Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code, + Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code, + Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code, + Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code, + Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code +]; +var errorCodeFixIdMap = { + // case #1: + [Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers + }, + [Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers + }, + // case #2: + [Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers + }, + [Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_override_modifier + }, + // case #3: + [Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers + }, + [Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Add_all_missing_override_modifiers + }, + // case #4: + [Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code]: { + descriptions: Diagnostics.Add_override_modifier, + fixId: fixAddOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers + }, + // case #5: + [Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers + }, + [Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code]: { + descriptions: Diagnostics.Remove_override_modifier, + fixId: fixRemoveOverrideId, + fixAllDescriptions: Diagnostics.Remove_all_unnecessary_override_modifiers + } +}; +registerCodeFix({ + errorCodes: errorCodes21, + getCodeActions: function getCodeActionsToFixOverrideModifierIssues(context) { + const { errorCode, span } = context; + const info = errorCodeFixIdMap[errorCode]; + if (!info) return emptyArray; + const { descriptions, fixId: fixId56, fixAllDescriptions } = info; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changes2) => dispatchChanges(changes2, context, errorCode, span.start)); + return [ + createCodeFixActionMaybeFixAll(fixName, changes, descriptions, fixId56, fixAllDescriptions) + ]; + }, + fixIds: [fixName, fixAddOverrideId, fixRemoveOverrideId], + getAllCodeActions: (context) => codeFixAll(context, errorCodes21, (changes, diag2) => { + const { code, start } = diag2; + const info = errorCodeFixIdMap[code]; + if (!info || info.fixId !== context.fixId) { + return; + } + dispatchChanges(changes, context, code, start); + }) +}); +function dispatchChanges(changeTracker, context, errorCode, pos) { + switch (errorCode) { + case Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0.code: + case Diagnostics.This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code: + case Diagnostics.This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared_in_the_base_class_0.code: + case Diagnostics.This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0.code: + case Diagnostics.This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_class_0.code: + return doAddOverrideModifierChange(changeTracker, context.sourceFile, pos); + case Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0.code: + case Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0.code: + case Diagnostics.This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another_class.code: + case Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_extend_another_class.code: + return doRemoveOverrideModifierChange(changeTracker, context.sourceFile, pos); + default: + Debug.fail("Unexpected error code: " + errorCode); + } +} +function doAddOverrideModifierChange(changeTracker, sourceFile, pos) { + const classElement = findContainerClassElementLike(sourceFile, pos); + if (isSourceFileJS(sourceFile)) { + changeTracker.addJSDocTags(sourceFile, classElement, [factory.createJSDocOverrideTag(factory.createIdentifier("override"))]); + return; + } + const modifiers = classElement.modifiers || emptyArray; + const staticModifier = find(modifiers, isStaticModifier); + const abstractModifier = find(modifiers, isAbstractModifier); + const accessibilityModifier = find(modifiers, (m) => isAccessibilityModifier(m.kind)); + const lastDecorator = findLast(modifiers, isDecorator); + const modifierPos = abstractModifier ? abstractModifier.end : staticModifier ? staticModifier.end : accessibilityModifier ? accessibilityModifier.end : lastDecorator ? skipTrivia(sourceFile.text, lastDecorator.end) : classElement.getStart(sourceFile); + const options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " }; + changeTracker.insertModifierAt(sourceFile, modifierPos, 164 /* OverrideKeyword */, options); +} +function doRemoveOverrideModifierChange(changeTracker, sourceFile, pos) { + const classElement = findContainerClassElementLike(sourceFile, pos); + if (isSourceFileJS(sourceFile)) { + changeTracker.filterJSDocTags(sourceFile, classElement, not(isJSDocOverrideTag)); + return; + } + const overrideModifier = find(classElement.modifiers, isOverrideModifier); + Debug.assertIsDefined(overrideModifier); + changeTracker.deleteModifier(sourceFile, overrideModifier); +} +function isClassElementLikeHasJSDoc(node) { + switch (node.kind) { + case 177 /* Constructor */: + case 173 /* PropertyDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return true; + case 170 /* Parameter */: + return isParameterPropertyDeclaration(node, node.parent); + default: + return false; + } +} +function findContainerClassElementLike(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + const classElement = findAncestor(token, (node) => { + if (isClassLike(node)) return "quit"; + return isClassElementLikeHasJSDoc(node); + }); + Debug.assert(classElement && isClassElementLikeHasJSDoc(classElement)); + return classElement; +} + +// src/services/codefixes/fixNoPropertyAccessFromIndexSignature.ts +var fixId19 = "fixNoPropertyAccessFromIndexSignature"; +var errorCodes22 = [ + Diagnostics.Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0.code +]; +registerCodeFix({ + errorCodes: errorCodes22, + fixIds: [fixId19], + getCodeActions(context) { + const { sourceFile, span, preferences } = context; + const property = getPropertyAccessExpression(sourceFile, span.start); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange14(t, context.sourceFile, property, preferences)); + return [createCodeFixAction(fixId19, changes, [Diagnostics.Use_element_access_for_0, property.name.text], fixId19, Diagnostics.Use_element_access_for_all_undeclared_properties)]; + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes22, (changes, diag2) => doChange14(changes, diag2.file, getPropertyAccessExpression(diag2.file, diag2.start), context.preferences)) +}); +function doChange14(changes, sourceFile, node, preferences) { + const quotePreference = getQuotePreference(sourceFile, preferences); + const argumentsExpression = factory.createStringLiteral(node.name.text, quotePreference === 0 /* Single */); + changes.replaceNode( + sourceFile, + node, + isPropertyAccessChain(node) ? factory.createElementAccessChain(node.expression, node.questionDotToken, argumentsExpression) : factory.createElementAccessExpression(node.expression, argumentsExpression) + ); +} +function getPropertyAccessExpression(sourceFile, pos) { + return cast(getTokenAtPosition(sourceFile, pos).parent, isPropertyAccessExpression); +} + +// src/services/codefixes/fixImplicitThis.ts +var fixId20 = "fixImplicitThis"; +var errorCodes23 = [Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code]; +registerCodeFix({ + errorCodes: errorCodes23, + getCodeActions: function getCodeActionsToFixImplicitThis(context) { + const { sourceFile, program, span } = context; + let diagnostic; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => { + diagnostic = doChange15(t, sourceFile, span.start, program.getTypeChecker()); + }); + return diagnostic ? [createCodeFixAction(fixId20, changes, diagnostic, fixId20, Diagnostics.Fix_all_implicit_this_errors)] : emptyArray; + }, + fixIds: [fixId20], + getAllCodeActions: (context) => codeFixAll(context, errorCodes23, (changes, diag2) => { + doChange15(changes, diag2.file, diag2.start, context.program.getTypeChecker()); + }) +}); +function doChange15(changes, sourceFile, pos, checker) { + const token = getTokenAtPosition(sourceFile, pos); + if (!isThis(token)) return void 0; + const fn = getThisContainer( + token, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (!isFunctionDeclaration(fn) && !isFunctionExpression(fn)) return void 0; + if (!isSourceFile(getThisContainer( + fn, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ))) { + const fnKeyword = Debug.checkDefined(findChildOfKind(fn, 100 /* FunctionKeyword */, sourceFile)); + const { name } = fn; + const body = Debug.checkDefined(fn.body); + if (isFunctionExpression(fn)) { + if (name && ts_FindAllReferences_exports.Core.isSymbolReferencedInFile(name, checker, sourceFile, body)) { + return void 0; + } + changes.delete(sourceFile, fnKeyword); + if (name) { + changes.delete(sourceFile, name); + } + changes.insertText(sourceFile, body.pos, " =>"); + return [Diagnostics.Convert_function_expression_0_to_arrow_function, name ? name.text : ANONYMOUS]; + } else { + changes.replaceNode(sourceFile, fnKeyword, factory.createToken(87 /* ConstKeyword */)); + changes.insertText(sourceFile, name.end, " = "); + changes.insertText(sourceFile, body.pos, " =>"); + return [Diagnostics.Convert_function_declaration_0_to_arrow_function, name.text]; + } + } +} + +// src/services/codefixes/fixImportNonExportedMember.ts +var fixId21 = "fixImportNonExportedMember"; +var errorCodes24 = [ + Diagnostics.Module_0_declares_1_locally_but_it_is_not_exported.code +]; +registerCodeFix({ + errorCodes: errorCodes24, + fixIds: [fixId21], + getCodeActions(context) { + const { sourceFile, span, program } = context; + const info = getInfo7(sourceFile, span.start, program); + if (info === void 0) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange16(t, program, info)); + return [createCodeFixAction(fixId21, changes, [Diagnostics.Export_0_from_module_1, info.exportName.node.text, info.moduleSpecifier], fixId21, Diagnostics.Export_all_referenced_locals)]; + }, + getAllCodeActions(context) { + const { program } = context; + return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, (changes) => { + const exports2 = /* @__PURE__ */ new Map(); + eachDiagnostic(context, errorCodes24, (diag2) => { + const info = getInfo7(diag2.file, diag2.start, program); + if (info === void 0) return void 0; + const { exportName, node, moduleSourceFile } = info; + if (tryGetExportDeclaration(moduleSourceFile, exportName.isTypeOnly) === void 0 && canHaveExportModifier(node)) { + changes.insertExportModifier(moduleSourceFile, node); + } else { + const moduleExports = exports2.get(moduleSourceFile) || { typeOnlyExports: [], exports: [] }; + if (exportName.isTypeOnly) { + moduleExports.typeOnlyExports.push(exportName); + } else { + moduleExports.exports.push(exportName); + } + exports2.set(moduleSourceFile, moduleExports); + } + }); + exports2.forEach((moduleExports, moduleSourceFile) => { + const exportDeclaration = tryGetExportDeclaration( + moduleSourceFile, + /*isTypeOnly*/ + true + ); + if (exportDeclaration && exportDeclaration.isTypeOnly) { + doChanges(changes, program, moduleSourceFile, moduleExports.typeOnlyExports, exportDeclaration); + doChanges(changes, program, moduleSourceFile, moduleExports.exports, tryGetExportDeclaration( + moduleSourceFile, + /*isTypeOnly*/ + false + )); + } else { + doChanges(changes, program, moduleSourceFile, [...moduleExports.exports, ...moduleExports.typeOnlyExports], exportDeclaration); + } + }); + })); + } +}); +function getInfo7(sourceFile, pos, program) { + var _a, _b; + const token = getTokenAtPosition(sourceFile, pos); + if (isIdentifier(token)) { + const importDeclaration = findAncestor(token, isImportDeclaration); + if (importDeclaration === void 0) return void 0; + const moduleSpecifier = isStringLiteral(importDeclaration.moduleSpecifier) ? importDeclaration.moduleSpecifier : void 0; + if (moduleSpecifier === void 0) return void 0; + const resolvedModule = (_a = program.getResolvedModuleFromModuleSpecifier(moduleSpecifier, sourceFile)) == null ? void 0 : _a.resolvedModule; + if (resolvedModule === void 0) return void 0; + const moduleSourceFile = program.getSourceFile(resolvedModule.resolvedFileName); + if (moduleSourceFile === void 0 || isSourceFileFromLibrary(program, moduleSourceFile)) return void 0; + const moduleSymbol = moduleSourceFile.symbol; + const locals = (_b = tryCast(moduleSymbol.valueDeclaration, canHaveLocals)) == null ? void 0 : _b.locals; + if (locals === void 0) return void 0; + const localSymbol = locals.get(token.escapedText); + if (localSymbol === void 0) return void 0; + const node = getNodeOfSymbol(localSymbol); + if (node === void 0) return void 0; + const exportName = { node: token, isTypeOnly: isTypeDeclaration(node) }; + return { exportName, node, moduleSourceFile, moduleSpecifier: moduleSpecifier.text }; + } + return void 0; +} +function doChange16(changes, program, { exportName, node, moduleSourceFile }) { + const exportDeclaration = tryGetExportDeclaration(moduleSourceFile, exportName.isTypeOnly); + if (exportDeclaration) { + updateExport(changes, program, moduleSourceFile, exportDeclaration, [exportName]); + } else if (canHaveExportModifier(node)) { + changes.insertExportModifier(moduleSourceFile, node); + } else { + createExport(changes, program, moduleSourceFile, [exportName]); + } +} +function doChanges(changes, program, sourceFile, moduleExports, node) { + if (length(moduleExports)) { + if (node) { + updateExport(changes, program, sourceFile, node, moduleExports); + } else { + createExport(changes, program, sourceFile, moduleExports); + } + } +} +function tryGetExportDeclaration(sourceFile, isTypeOnly) { + const predicate = (node) => isExportDeclaration(node) && (isTypeOnly && node.isTypeOnly || !node.isTypeOnly); + return findLast(sourceFile.statements, predicate); +} +function updateExport(changes, program, sourceFile, node, names) { + const namedExports = node.exportClause && isNamedExports(node.exportClause) ? node.exportClause.elements : factory.createNodeArray([]); + const allowTypeModifier = !node.isTypeOnly && !!(getIsolatedModules(program.getCompilerOptions()) || find(namedExports, (e) => e.isTypeOnly)); + changes.replaceNode( + sourceFile, + node, + factory.updateExportDeclaration( + node, + node.modifiers, + node.isTypeOnly, + factory.createNamedExports( + factory.createNodeArray( + [...namedExports, ...createExportSpecifiers(names, allowTypeModifier)], + /*hasTrailingComma*/ + namedExports.hasTrailingComma + ) + ), + node.moduleSpecifier, + node.attributes + ) + ); +} +function createExport(changes, program, sourceFile, names) { + changes.insertNodeAtEndOfScope(sourceFile, sourceFile, factory.createExportDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + factory.createNamedExports(createExportSpecifiers( + names, + /*allowTypeModifier*/ + getIsolatedModules(program.getCompilerOptions()) + )), + /*moduleSpecifier*/ + void 0, + /*attributes*/ + void 0 + )); +} +function createExportSpecifiers(names, allowTypeModifier) { + return factory.createNodeArray(map(names, (n) => factory.createExportSpecifier( + allowTypeModifier && n.isTypeOnly, + /*propertyName*/ + void 0, + n.node + ))); +} +function getNodeOfSymbol(symbol) { + if (symbol.valueDeclaration === void 0) { + return firstOrUndefined(symbol.declarations); + } + const declaration = symbol.valueDeclaration; + const variableStatement = isVariableDeclaration(declaration) ? tryCast(declaration.parent.parent, isVariableStatement) : void 0; + return variableStatement && length(variableStatement.declarationList.declarations) === 1 ? variableStatement : declaration; +} + +// src/services/codefixes/fixIncorrectNamedTupleSyntax.ts +var fixId22 = "fixIncorrectNamedTupleSyntax"; +var errorCodes25 = [ + Diagnostics.A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_colon_rather_than_after_the_type.code, + Diagnostics.A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type.code +]; +registerCodeFix({ + errorCodes: errorCodes25, + getCodeActions: function getCodeActionsToFixIncorrectNamedTupleSyntax(context) { + const { sourceFile, span } = context; + const namedTupleMember = getNamedTupleMember(sourceFile, span.start); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange17(t, sourceFile, namedTupleMember)); + return [createCodeFixAction(fixId22, changes, Diagnostics.Move_labeled_tuple_element_modifiers_to_labels, fixId22, Diagnostics.Move_labeled_tuple_element_modifiers_to_labels)]; + }, + fixIds: [fixId22] +}); +function getNamedTupleMember(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + return findAncestor(token, (t) => t.kind === 203 /* NamedTupleMember */); +} +function doChange17(changes, sourceFile, namedTupleMember) { + if (!namedTupleMember) { + return; + } + let unwrappedType = namedTupleMember.type; + let sawOptional = false; + let sawRest = false; + while (unwrappedType.kind === 191 /* OptionalType */ || unwrappedType.kind === 192 /* RestType */ || unwrappedType.kind === 197 /* ParenthesizedType */) { + if (unwrappedType.kind === 191 /* OptionalType */) { + sawOptional = true; + } else if (unwrappedType.kind === 192 /* RestType */) { + sawRest = true; + } + unwrappedType = unwrappedType.type; + } + const updated = factory.updateNamedTupleMember( + namedTupleMember, + namedTupleMember.dotDotDotToken || (sawRest ? factory.createToken(26 /* DotDotDotToken */) : void 0), + namedTupleMember.name, + namedTupleMember.questionToken || (sawOptional ? factory.createToken(58 /* QuestionToken */) : void 0), + unwrappedType + ); + if (updated === namedTupleMember) { + return; + } + changes.replaceNode(sourceFile, namedTupleMember, updated); +} + +// src/services/codefixes/fixSpelling.ts +var fixId23 = "fixSpelling"; +var errorCodes26 = [ + Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code, + Diagnostics.Property_0_may_not_exist_on_type_1_Did_you_mean_2.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_1.code, + Diagnostics.Could_not_find_name_0_Did_you_mean_1.code, + Diagnostics.Cannot_find_namespace_0_Did_you_mean_1.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code, + Diagnostics._0_has_no_exported_member_named_1_Did_you_mean_2.code, + Diagnostics.This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code, + Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base_class_0_Did_you_mean_1.code, + // for JSX class components + Diagnostics.No_overload_matches_this_call.code, + // for JSX FC + Diagnostics.Type_0_is_not_assignable_to_type_1.code +]; +registerCodeFix({ + errorCodes: errorCodes26, + getCodeActions(context) { + const { sourceFile, errorCode } = context; + const info = getInfo8(sourceFile, context.span.start, context, errorCode); + if (!info) return void 0; + const { node, suggestedSymbol } = info; + const target = getEmitScriptTarget(context.host.getCompilationSettings()); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange18(t, sourceFile, node, suggestedSymbol, target)); + return [createCodeFixAction("spelling", changes, [Diagnostics.Change_spelling_to_0, symbolName(suggestedSymbol)], fixId23, Diagnostics.Fix_all_detected_spelling_errors)]; + }, + fixIds: [fixId23], + getAllCodeActions: (context) => codeFixAll(context, errorCodes26, (changes, diag2) => { + const info = getInfo8(diag2.file, diag2.start, context, diag2.code); + const target = getEmitScriptTarget(context.host.getCompilationSettings()); + if (info) doChange18(changes, context.sourceFile, info.node, info.suggestedSymbol, target); + }) +}); +function getInfo8(sourceFile, pos, context, errorCode) { + const node = getTokenAtPosition(sourceFile, pos); + const parent2 = node.parent; + if ((errorCode === Diagnostics.No_overload_matches_this_call.code || errorCode === Diagnostics.Type_0_is_not_assignable_to_type_1.code) && !isJsxAttribute(parent2)) return void 0; + const checker = context.program.getTypeChecker(); + let suggestedSymbol; + if (isPropertyAccessExpression(parent2) && parent2.name === node) { + Debug.assert(isMemberName(node), "Expected an identifier for spelling (property access)"); + let containingType = checker.getTypeAtLocation(parent2.expression); + if (parent2.flags & 64 /* OptionalChain */) { + containingType = checker.getNonNullableType(containingType); + } + suggestedSymbol = checker.getSuggestedSymbolForNonexistentProperty(node, containingType); + } else if (isBinaryExpression(parent2) && parent2.operatorToken.kind === 103 /* InKeyword */ && parent2.left === node && isPrivateIdentifier(node)) { + const receiverType = checker.getTypeAtLocation(parent2.right); + suggestedSymbol = checker.getSuggestedSymbolForNonexistentProperty(node, receiverType); + } else if (isQualifiedName(parent2) && parent2.right === node) { + const symbol = checker.getSymbolAtLocation(parent2.left); + if (symbol && symbol.flags & 1536 /* Module */) { + suggestedSymbol = checker.getSuggestedSymbolForNonexistentModule(parent2.right, symbol); + } + } else if (isImportSpecifier(parent2) && parent2.name === node) { + Debug.assertNode(node, isIdentifier, "Expected an identifier for spelling (import)"); + const importDeclaration = findAncestor(node, isImportDeclaration); + const resolvedSourceFile = getResolvedSourceFileFromImportDeclaration(context, importDeclaration, sourceFile); + if (resolvedSourceFile && resolvedSourceFile.symbol) { + suggestedSymbol = checker.getSuggestedSymbolForNonexistentModule(node, resolvedSourceFile.symbol); + } + } else if (isJsxAttribute(parent2) && parent2.name === node) { + Debug.assertNode(node, isIdentifier, "Expected an identifier for JSX attribute"); + const tag = findAncestor(node, isJsxOpeningLikeElement); + const props = checker.getContextualTypeForArgumentAtIndex(tag, 0); + suggestedSymbol = checker.getSuggestedSymbolForNonexistentJSXAttribute(node, props); + } else if (hasOverrideModifier(parent2) && isClassElement(parent2) && parent2.name === node) { + const baseDeclaration = findAncestor(node, isClassLike); + const baseTypeNode = baseDeclaration ? getEffectiveBaseTypeNode(baseDeclaration) : void 0; + const baseType = baseTypeNode ? checker.getTypeAtLocation(baseTypeNode) : void 0; + if (baseType) { + suggestedSymbol = checker.getSuggestedSymbolForNonexistentClassMember(getTextOfNode(node), baseType); + } + } else { + const meaning = getMeaningFromLocation(node); + const name = getTextOfNode(node); + Debug.assert(name !== void 0, "name should be defined"); + suggestedSymbol = checker.getSuggestedSymbolForNonexistentSymbol(node, name, convertSemanticMeaningToSymbolFlags(meaning)); + } + return suggestedSymbol === void 0 ? void 0 : { node, suggestedSymbol }; +} +function doChange18(changes, sourceFile, node, suggestedSymbol, target) { + const suggestion = symbolName(suggestedSymbol); + if (!isIdentifierText(suggestion, target) && isPropertyAccessExpression(node.parent)) { + const valDecl = suggestedSymbol.valueDeclaration; + if (valDecl && isNamedDeclaration(valDecl) && isPrivateIdentifier(valDecl.name)) { + changes.replaceNode(sourceFile, node, factory.createIdentifier(suggestion)); + } else { + changes.replaceNode(sourceFile, node.parent, factory.createElementAccessExpression(node.parent.expression, factory.createStringLiteral(suggestion))); + } + } else { + changes.replaceNode(sourceFile, node, factory.createIdentifier(suggestion)); + } +} +function convertSemanticMeaningToSymbolFlags(meaning) { + let flags = 0; + if (meaning & 4 /* Namespace */) { + flags |= 1920 /* Namespace */; + } + if (meaning & 2 /* Type */) { + flags |= 788968 /* Type */; + } + if (meaning & 1 /* Value */) { + flags |= 111551 /* Value */; + } + return flags; +} +function getResolvedSourceFileFromImportDeclaration(context, importDeclaration, importingFile) { + var _a; + if (!importDeclaration || !isStringLiteralLike(importDeclaration.moduleSpecifier)) return void 0; + const resolvedModule = (_a = context.program.getResolvedModuleFromModuleSpecifier(importDeclaration.moduleSpecifier, importingFile)) == null ? void 0 : _a.resolvedModule; + if (!resolvedModule) return void 0; + return context.program.getSourceFile(resolvedModule.resolvedFileName); +} + +// src/services/codefixes/returnValueCorrect.ts +var fixId24 = "returnValueCorrect"; +var fixIdAddReturnStatement = "fixAddReturnStatement"; +var fixRemoveBracesFromArrowFunctionBody = "fixRemoveBracesFromArrowFunctionBody"; +var fixIdWrapTheBlockWithParen = "fixWrapTheBlockWithParen"; +var errorCodes27 = [ + Diagnostics.A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value.code, + Diagnostics.Type_0_is_not_assignable_to_type_1.code, + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code +]; +registerCodeFix({ + errorCodes: errorCodes27, + fixIds: [fixIdAddReturnStatement, fixRemoveBracesFromArrowFunctionBody, fixIdWrapTheBlockWithParen], + getCodeActions: function getCodeActionsToCorrectReturnValue(context) { + const { program, sourceFile, span: { start }, errorCode } = context; + const info = getInfo9(program.getTypeChecker(), sourceFile, start, errorCode); + if (!info) return void 0; + if (info.kind === 0 /* MissingReturnStatement */) { + return append( + [getActionForfixAddReturnStatement(context, info.expression, info.statement)], + isArrowFunction(info.declaration) ? getActionForFixRemoveBracesFromArrowFunctionBody(context, info.declaration, info.expression, info.commentSource) : void 0 + ); + } else { + return [getActionForfixWrapTheBlockWithParen(context, info.declaration, info.expression)]; + } + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes27, (changes, diag2) => { + const info = getInfo9(context.program.getTypeChecker(), diag2.file, diag2.start, diag2.code); + if (!info) return void 0; + switch (context.fixId) { + case fixIdAddReturnStatement: + addReturnStatement(changes, diag2.file, info.expression, info.statement); + break; + case fixRemoveBracesFromArrowFunctionBody: + if (!isArrowFunction(info.declaration)) return void 0; + removeBlockBodyBrace( + changes, + diag2.file, + info.declaration, + info.expression, + info.commentSource, + /*withParen*/ + false + ); + break; + case fixIdWrapTheBlockWithParen: + if (!isArrowFunction(info.declaration)) return void 0; + wrapBlockWithParen(changes, diag2.file, info.declaration, info.expression); + break; + default: + Debug.fail(JSON.stringify(context.fixId)); + } + }) +}); +function createObjectTypeFromLabeledExpression(checker, label, expression) { + const member = checker.createSymbol(4 /* Property */, label.escapedText); + member.links.type = checker.getTypeAtLocation(expression); + const members = createSymbolTable([member]); + return checker.createAnonymousType( + /*symbol*/ + void 0, + members, + [], + [], + [] + ); +} +function getFixInfo(checker, declaration, expectType, isFunctionType) { + if (!declaration.body || !isBlock(declaration.body) || length(declaration.body.statements) !== 1) return void 0; + const firstStatement = first(declaration.body.statements); + if (isExpressionStatement(firstStatement) && checkFixedAssignableTo(checker, declaration, checker.getTypeAtLocation(firstStatement.expression), expectType, isFunctionType)) { + return { + declaration, + kind: 0 /* MissingReturnStatement */, + expression: firstStatement.expression, + statement: firstStatement, + commentSource: firstStatement.expression + }; + } else if (isLabeledStatement(firstStatement) && isExpressionStatement(firstStatement.statement)) { + const node = factory.createObjectLiteralExpression([factory.createPropertyAssignment(firstStatement.label, firstStatement.statement.expression)]); + const nodeType = createObjectTypeFromLabeledExpression(checker, firstStatement.label, firstStatement.statement.expression); + if (checkFixedAssignableTo(checker, declaration, nodeType, expectType, isFunctionType)) { + return isArrowFunction(declaration) ? { + declaration, + kind: 1 /* MissingParentheses */, + expression: node, + statement: firstStatement, + commentSource: firstStatement.statement.expression + } : { + declaration, + kind: 0 /* MissingReturnStatement */, + expression: node, + statement: firstStatement, + commentSource: firstStatement.statement.expression + }; + } + } else if (isBlock(firstStatement) && length(firstStatement.statements) === 1) { + const firstBlockStatement = first(firstStatement.statements); + if (isLabeledStatement(firstBlockStatement) && isExpressionStatement(firstBlockStatement.statement)) { + const node = factory.createObjectLiteralExpression([factory.createPropertyAssignment(firstBlockStatement.label, firstBlockStatement.statement.expression)]); + const nodeType = createObjectTypeFromLabeledExpression(checker, firstBlockStatement.label, firstBlockStatement.statement.expression); + if (checkFixedAssignableTo(checker, declaration, nodeType, expectType, isFunctionType)) { + return { + declaration, + kind: 0 /* MissingReturnStatement */, + expression: node, + statement: firstStatement, + commentSource: firstBlockStatement + }; + } + } + } + return void 0; +} +function checkFixedAssignableTo(checker, declaration, exprType, type, isFunctionType) { + if (isFunctionType) { + const sig = checker.getSignatureFromDeclaration(declaration); + if (sig) { + if (hasSyntacticModifier(declaration, 1024 /* Async */)) { + exprType = checker.createPromiseType(exprType); + } + const newSig = checker.createSignature( + declaration, + sig.typeParameters, + sig.thisParameter, + sig.parameters, + exprType, + /*typePredicate*/ + void 0, + sig.minArgumentCount, + sig.flags + ); + exprType = checker.createAnonymousType( + /*symbol*/ + void 0, + createSymbolTable(), + [newSig], + [], + [] + ); + } else { + exprType = checker.getAnyType(); + } + } + return checker.isTypeAssignableTo(exprType, type); +} +function getInfo9(checker, sourceFile, position, errorCode) { + const node = getTokenAtPosition(sourceFile, position); + if (!node.parent) return void 0; + const declaration = findAncestor(node.parent, isFunctionLikeDeclaration); + switch (errorCode) { + case Diagnostics.A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value.code: + if (!declaration || !declaration.body || !declaration.type || !rangeContainsRange(declaration.type, node)) return void 0; + return getFixInfo( + checker, + declaration, + checker.getTypeFromTypeNode(declaration.type), + /*isFunctionType*/ + false + ); + case Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code: + if (!declaration || !isCallExpression(declaration.parent) || !declaration.body) return void 0; + const pos = declaration.parent.arguments.indexOf(declaration); + if (pos === -1) return void 0; + const type = checker.getContextualTypeForArgumentAtIndex(declaration.parent, pos); + if (!type) return void 0; + return getFixInfo( + checker, + declaration, + type, + /*isFunctionType*/ + true + ); + case Diagnostics.Type_0_is_not_assignable_to_type_1.code: + if (!isDeclarationName(node) || !isVariableLike(node.parent) && !isJsxAttribute(node.parent)) return void 0; + const initializer = getVariableLikeInitializer(node.parent); + if (!initializer || !isFunctionLikeDeclaration(initializer) || !initializer.body) return void 0; + return getFixInfo( + checker, + initializer, + checker.getTypeAtLocation(node.parent), + /*isFunctionType*/ + true + ); + } + return void 0; +} +function getVariableLikeInitializer(declaration) { + switch (declaration.kind) { + case 261 /* VariableDeclaration */: + case 170 /* Parameter */: + case 209 /* BindingElement */: + case 173 /* PropertyDeclaration */: + case 304 /* PropertyAssignment */: + return declaration.initializer; + case 292 /* JsxAttribute */: + return declaration.initializer && (isJsxExpression(declaration.initializer) ? declaration.initializer.expression : void 0); + case 305 /* ShorthandPropertyAssignment */: + case 172 /* PropertySignature */: + case 307 /* EnumMember */: + case 349 /* JSDocPropertyTag */: + case 342 /* JSDocParameterTag */: + return void 0; + } +} +function addReturnStatement(changes, sourceFile, expression, statement) { + suppressLeadingAndTrailingTrivia(expression); + const probablyNeedSemi = probablyUsesSemicolons(sourceFile); + changes.replaceNode(sourceFile, statement, factory.createReturnStatement(expression), { + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude, + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Exclude, + suffix: probablyNeedSemi ? ";" : void 0 + }); +} +function removeBlockBodyBrace(changes, sourceFile, declaration, expression, commentSource, withParen) { + const newBody = withParen || needsParentheses(expression) ? factory.createParenthesizedExpression(expression) : expression; + suppressLeadingAndTrailingTrivia(commentSource); + copyComments(commentSource, newBody); + changes.replaceNode(sourceFile, declaration.body, newBody); +} +function wrapBlockWithParen(changes, sourceFile, declaration, expression) { + changes.replaceNode(sourceFile, declaration.body, factory.createParenthesizedExpression(expression)); +} +function getActionForfixAddReturnStatement(context, expression, statement) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addReturnStatement(t, context.sourceFile, expression, statement)); + return createCodeFixAction(fixId24, changes, Diagnostics.Add_a_return_statement, fixIdAddReturnStatement, Diagnostics.Add_all_missing_return_statement); +} +function getActionForFixRemoveBracesFromArrowFunctionBody(context, declaration, expression, commentSource) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => removeBlockBodyBrace( + t, + context.sourceFile, + declaration, + expression, + commentSource, + /*withParen*/ + false + )); + return createCodeFixAction(fixId24, changes, Diagnostics.Remove_braces_from_arrow_function_body, fixRemoveBracesFromArrowFunctionBody, Diagnostics.Remove_braces_from_all_arrow_function_bodies_with_relevant_issues); +} +function getActionForfixWrapTheBlockWithParen(context, declaration, expression) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => wrapBlockWithParen(t, context.sourceFile, declaration, expression)); + return createCodeFixAction(fixId24, changes, Diagnostics.Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal, fixIdWrapTheBlockWithParen, Diagnostics.Wrap_all_object_literal_with_parentheses); +} + +// src/services/codefixes/fixAddMissingMember.ts +var fixMissingMember = "fixMissingMember"; +var fixMissingProperties = "fixMissingProperties"; +var fixMissingAttributes = "fixMissingAttributes"; +var fixMissingFunctionDeclaration = "fixMissingFunctionDeclaration"; +var errorCodes28 = [ + Diagnostics.Property_0_does_not_exist_on_type_1.code, + Diagnostics.Property_0_does_not_exist_on_type_1_Did_you_mean_2.code, + Diagnostics.Property_0_is_missing_in_type_1_but_required_in_type_2.code, + Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2.code, + Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more.code, + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code, + Diagnostics.Cannot_find_name_0.code, + Diagnostics.Type_0_does_not_satisfy_the_expected_type_1.code +]; +registerCodeFix({ + errorCodes: errorCodes28, + getCodeActions(context) { + const typeChecker = context.program.getTypeChecker(); + const info = getInfo10(context.sourceFile, context.span.start, context.errorCode, typeChecker, context.program); + if (!info) { + return void 0; + } + if (info.kind === 3 /* ObjectLiteral */) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addObjectLiteralProperties(t, context, info)); + return [createCodeFixAction(fixMissingProperties, changes, Diagnostics.Add_missing_properties, fixMissingProperties, Diagnostics.Add_all_missing_properties)]; + } + if (info.kind === 4 /* JsxAttributes */) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addJsxAttributes(t, context, info)); + return [createCodeFixAction(fixMissingAttributes, changes, Diagnostics.Add_missing_attributes, fixMissingAttributes, Diagnostics.Add_all_missing_attributes)]; + } + if (info.kind === 2 /* Function */ || info.kind === 5 /* Signature */) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addFunctionDeclaration(t, context, info)); + return [createCodeFixAction(fixMissingFunctionDeclaration, changes, [Diagnostics.Add_missing_function_declaration_0, info.token.text], fixMissingFunctionDeclaration, Diagnostics.Add_all_missing_function_declarations)]; + } + if (info.kind === 1 /* Enum */) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addEnumMemberDeclaration(t, context.program.getTypeChecker(), info)); + return [createCodeFixAction(fixMissingMember, changes, [Diagnostics.Add_missing_enum_member_0, info.token.text], fixMissingMember, Diagnostics.Add_all_missing_members)]; + } + return concatenate(getActionsForMissingMethodDeclaration(context, info), getActionsForMissingMemberDeclaration(context, info)); + }, + fixIds: [fixMissingMember, fixMissingFunctionDeclaration, fixMissingProperties, fixMissingAttributes], + getAllCodeActions: (context) => { + const { program, fixId: fixId56 } = context; + const checker = program.getTypeChecker(); + const seen = /* @__PURE__ */ new Set(); + const typeDeclToMembers = /* @__PURE__ */ new Map(); + return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, (changes) => { + eachDiagnostic(context, errorCodes28, (diag2) => { + const info = getInfo10(diag2.file, diag2.start, diag2.code, checker, context.program); + if (info === void 0) return; + const nodeId = getNodeId(info.parentDeclaration) + "#" + (info.kind === 3 /* ObjectLiteral */ ? info.identifier || getNodeId(info.token) : info.token.text); + if (!addToSeen(seen, nodeId)) return; + if (fixId56 === fixMissingFunctionDeclaration && (info.kind === 2 /* Function */ || info.kind === 5 /* Signature */)) { + addFunctionDeclaration(changes, context, info); + } else if (fixId56 === fixMissingProperties && info.kind === 3 /* ObjectLiteral */) { + addObjectLiteralProperties(changes, context, info); + } else if (fixId56 === fixMissingAttributes && info.kind === 4 /* JsxAttributes */) { + addJsxAttributes(changes, context, info); + } else { + if (info.kind === 1 /* Enum */) { + addEnumMemberDeclaration(changes, checker, info); + } + if (info.kind === 0 /* TypeLikeDeclaration */) { + const { parentDeclaration, token } = info; + const infos = getOrUpdate(typeDeclToMembers, parentDeclaration, () => []); + if (!infos.some((i) => i.token.text === token.text)) { + infos.push(info); + } + } + } + }); + typeDeclToMembers.forEach((infos, declaration) => { + const supers = isTypeLiteralNode(declaration) ? void 0 : getAllSupers(declaration, checker); + for (const info of infos) { + if (supers == null ? void 0 : supers.some((superClassOrInterface) => { + const superInfos = typeDeclToMembers.get(superClassOrInterface); + return !!superInfos && superInfos.some(({ token: token2 }) => token2.text === info.token.text); + })) continue; + const { parentDeclaration, declSourceFile, modifierFlags, token, call, isJSFile } = info; + if (call && !isPrivateIdentifier(token)) { + addMethodDeclaration(context, changes, call, token, modifierFlags & 256 /* Static */, parentDeclaration, declSourceFile); + } else { + if (isJSFile && !isInterfaceDeclaration(parentDeclaration) && !isTypeLiteralNode(parentDeclaration)) { + addMissingMemberInJs(changes, declSourceFile, parentDeclaration, token, !!(modifierFlags & 256 /* Static */)); + } else { + const typeNode = getTypeNode2(checker, parentDeclaration, token); + addPropertyDeclaration(changes, declSourceFile, parentDeclaration, token.text, typeNode, modifierFlags & 256 /* Static */); + } + } + } + }); + })); + } +}); +function getInfo10(sourceFile, tokenPos, errorCode, checker, program) { + var _a, _b; + const token = getTokenAtPosition(sourceFile, tokenPos); + const parent2 = token.parent; + if (errorCode === Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code) { + if (!(token.kind === 19 /* OpenBraceToken */ && isObjectLiteralExpression(parent2) && isCallExpression(parent2.parent))) return void 0; + const argIndex = findIndex(parent2.parent.arguments, (arg) => arg === parent2); + if (argIndex < 0) return void 0; + const signature = checker.getResolvedSignature(parent2.parent); + if (!(signature && signature.declaration && signature.parameters[argIndex])) return void 0; + const param = signature.parameters[argIndex].valueDeclaration; + if (!(param && isParameter(param) && isIdentifier(param.name))) return void 0; + const properties = arrayFrom(checker.getUnmatchedProperties( + checker.getTypeAtLocation(parent2), + checker.getParameterType(signature, argIndex).getNonNullableType(), + /*requireOptionalProperties*/ + false, + /*matchDiscriminantProperties*/ + false + )); + if (!length(properties)) return void 0; + return { kind: 3 /* ObjectLiteral */, token: param.name, identifier: param.name.text, properties, parentDeclaration: parent2 }; + } + if (token.kind === 19 /* OpenBraceToken */ || isSatisfiesExpression(parent2) || isReturnStatement(parent2)) { + const expression = (isSatisfiesExpression(parent2) || isReturnStatement(parent2)) && parent2.expression ? parent2.expression : parent2; + if (isObjectLiteralExpression(expression)) { + const targetType = isSatisfiesExpression(parent2) ? checker.getTypeFromTypeNode(parent2.type) : checker.getContextualType(expression) || checker.getTypeAtLocation(expression); + const properties = arrayFrom(checker.getUnmatchedProperties( + checker.getTypeAtLocation(parent2), + targetType.getNonNullableType(), + /*requireOptionalProperties*/ + false, + /*matchDiscriminantProperties*/ + false + )); + if (!length(properties)) return void 0; + return { kind: 3 /* ObjectLiteral */, token: parent2, identifier: void 0, properties, parentDeclaration: expression, indentation: isReturnStatement(expression.parent) || isYieldExpression(expression.parent) ? 0 : void 0 }; + } + } + if (!isMemberName(token)) return void 0; + if (isIdentifier(token) && hasInitializer(parent2) && parent2.initializer && isObjectLiteralExpression(parent2.initializer)) { + const targetType = (_a = checker.getContextualType(token) || checker.getTypeAtLocation(token)) == null ? void 0 : _a.getNonNullableType(); + const properties = arrayFrom(checker.getUnmatchedProperties( + checker.getTypeAtLocation(parent2.initializer), + targetType, + /*requireOptionalProperties*/ + false, + /*matchDiscriminantProperties*/ + false + )); + if (!length(properties)) return void 0; + return { kind: 3 /* ObjectLiteral */, token, identifier: token.text, properties, parentDeclaration: parent2.initializer }; + } + if (isIdentifier(token) && isJsxOpeningLikeElement(token.parent)) { + const target = getEmitScriptTarget(program.getCompilerOptions()); + const attributes = getUnmatchedAttributes(checker, target, token.parent); + if (!length(attributes)) return void 0; + return { kind: 4 /* JsxAttributes */, token, attributes, parentDeclaration: token.parent }; + } + if (isIdentifier(token)) { + const type = (_b = checker.getContextualType(token)) == null ? void 0 : _b.getNonNullableType(); + if (type && getObjectFlags(type) & 16 /* Anonymous */) { + const signature = firstOrUndefined(checker.getSignaturesOfType(type, 0 /* Call */)); + if (signature === void 0) return void 0; + return { kind: 5 /* Signature */, token, signature, sourceFile, parentDeclaration: findScope(token) }; + } + if (isCallExpression(parent2) && parent2.expression === token) { + return { kind: 2 /* Function */, token, call: parent2, sourceFile, modifierFlags: 0 /* None */, parentDeclaration: findScope(token) }; + } + } + if (!isPropertyAccessExpression(parent2)) return void 0; + const leftExpressionType = skipConstraint(checker.getTypeAtLocation(parent2.expression)); + const symbol = leftExpressionType.symbol; + if (!symbol || !symbol.declarations) return void 0; + if (isIdentifier(token) && isCallExpression(parent2.parent)) { + const moduleDeclaration = find(symbol.declarations, isModuleDeclaration); + const moduleDeclarationSourceFile = moduleDeclaration == null ? void 0 : moduleDeclaration.getSourceFile(); + if (moduleDeclaration && moduleDeclarationSourceFile && !isSourceFileFromLibrary(program, moduleDeclarationSourceFile)) { + return { kind: 2 /* Function */, token, call: parent2.parent, sourceFile: moduleDeclarationSourceFile, modifierFlags: 32 /* Export */, parentDeclaration: moduleDeclaration }; + } + const moduleSourceFile = find(symbol.declarations, isSourceFile); + if (sourceFile.commonJsModuleIndicator) return void 0; + if (moduleSourceFile && !isSourceFileFromLibrary(program, moduleSourceFile)) { + return { kind: 2 /* Function */, token, call: parent2.parent, sourceFile: moduleSourceFile, modifierFlags: 32 /* Export */, parentDeclaration: moduleSourceFile }; + } + } + const classDeclaration = find(symbol.declarations, isClassLike); + if (!classDeclaration && isPrivateIdentifier(token)) return void 0; + const declaration = classDeclaration || find(symbol.declarations, (d) => isInterfaceDeclaration(d) || isTypeLiteralNode(d)); + if (declaration && !isSourceFileFromLibrary(program, declaration.getSourceFile())) { + const makeStatic = !isTypeLiteralNode(declaration) && (leftExpressionType.target || leftExpressionType) !== checker.getDeclaredTypeOfSymbol(symbol); + if (makeStatic && (isPrivateIdentifier(token) || isInterfaceDeclaration(declaration))) return void 0; + const declSourceFile = declaration.getSourceFile(); + const modifierFlags = isTypeLiteralNode(declaration) ? 0 /* None */ : (makeStatic ? 256 /* Static */ : 0 /* None */) | (startsWithUnderscore(token.text) ? 2 /* Private */ : 0 /* None */); + const isJSFile = isSourceFileJS(declSourceFile); + const call = tryCast(parent2.parent, isCallExpression); + return { kind: 0 /* TypeLikeDeclaration */, token, call, modifierFlags, parentDeclaration: declaration, declSourceFile, isJSFile }; + } + const enumDeclaration = find(symbol.declarations, isEnumDeclaration); + if (enumDeclaration && !(leftExpressionType.flags & 1056 /* EnumLike */) && !isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) { + return { kind: 1 /* Enum */, token, parentDeclaration: enumDeclaration }; + } + return void 0; +} +function getActionsForMissingMemberDeclaration(context, info) { + return info.isJSFile ? singleElementArray(createActionForAddMissingMemberInJavascriptFile(context, info)) : createActionsForAddMissingMemberInTypeScriptFile(context, info); +} +function createActionForAddMissingMemberInJavascriptFile(context, { parentDeclaration, declSourceFile, modifierFlags, token }) { + if (isInterfaceDeclaration(parentDeclaration) || isTypeLiteralNode(parentDeclaration)) { + return void 0; + } + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addMissingMemberInJs(t, declSourceFile, parentDeclaration, token, !!(modifierFlags & 256 /* Static */))); + if (changes.length === 0) { + return void 0; + } + const diagnostic = modifierFlags & 256 /* Static */ ? Diagnostics.Initialize_static_property_0 : isPrivateIdentifier(token) ? Diagnostics.Declare_a_private_field_named_0 : Diagnostics.Initialize_property_0_in_the_constructor; + return createCodeFixAction(fixMissingMember, changes, [diagnostic, token.text], fixMissingMember, Diagnostics.Add_all_missing_members); +} +function addMissingMemberInJs(changeTracker, sourceFile, classDeclaration, token, makeStatic) { + const tokenName = token.text; + if (makeStatic) { + if (classDeclaration.kind === 232 /* ClassExpression */) { + return; + } + const className = classDeclaration.name.getText(); + const staticInitialization = initializePropertyToUndefined(factory.createIdentifier(className), tokenName); + changeTracker.insertNodeAfter(sourceFile, classDeclaration, staticInitialization); + } else if (isPrivateIdentifier(token)) { + const property = factory.createPropertyDeclaration( + /*modifiers*/ + void 0, + tokenName, + /*questionOrExclamationToken*/ + void 0, + /*type*/ + void 0, + /*initializer*/ + void 0 + ); + const lastProp = getNodeToInsertPropertyAfter(classDeclaration); + if (lastProp) { + changeTracker.insertNodeAfter(sourceFile, lastProp, property); + } else { + changeTracker.insertMemberAtStart(sourceFile, classDeclaration, property); + } + } else { + const classConstructor = getFirstConstructorWithBody(classDeclaration); + if (!classConstructor) { + return; + } + const propertyInitialization = initializePropertyToUndefined(factory.createThis(), tokenName); + changeTracker.insertNodeAtConstructorEnd(sourceFile, classConstructor, propertyInitialization); + } +} +function initializePropertyToUndefined(obj, propertyName) { + return factory.createExpressionStatement(factory.createAssignment(factory.createPropertyAccessExpression(obj, propertyName), createUndefined())); +} +function createActionsForAddMissingMemberInTypeScriptFile(context, { parentDeclaration, declSourceFile, modifierFlags, token }) { + const memberName = token.text; + const isStatic2 = modifierFlags & 256 /* Static */; + const typeNode = getTypeNode2(context.program.getTypeChecker(), parentDeclaration, token); + const addPropertyDeclarationChanges = (modifierFlags2) => ts_textChanges_exports.ChangeTracker.with(context, (t) => addPropertyDeclaration(t, declSourceFile, parentDeclaration, memberName, typeNode, modifierFlags2)); + const actions2 = [createCodeFixAction(fixMissingMember, addPropertyDeclarationChanges(modifierFlags & 256 /* Static */), [isStatic2 ? Diagnostics.Declare_static_property_0 : Diagnostics.Declare_property_0, memberName], fixMissingMember, Diagnostics.Add_all_missing_members)]; + if (isStatic2 || isPrivateIdentifier(token)) { + return actions2; + } + if (modifierFlags & 2 /* Private */) { + actions2.unshift(createCodeFixActionWithoutFixAll(fixMissingMember, addPropertyDeclarationChanges(2 /* Private */), [Diagnostics.Declare_private_property_0, memberName])); + } + actions2.push(createAddIndexSignatureAction(context, declSourceFile, parentDeclaration, token.text, typeNode)); + return actions2; +} +function getTypeNode2(checker, node, token) { + let typeNode; + if (token.parent.parent.kind === 227 /* BinaryExpression */) { + const binaryExpression = token.parent.parent; + const otherExpression = token.parent === binaryExpression.left ? binaryExpression.right : binaryExpression.left; + const widenedType = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(otherExpression))); + typeNode = checker.typeToTypeNode(widenedType, node, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */); + } else { + const contextualType = checker.getContextualType(token.parent); + typeNode = contextualType ? checker.typeToTypeNode( + contextualType, + /*enclosingDeclaration*/ + void 0, + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */ + ) : void 0; + } + return typeNode || factory.createKeywordTypeNode(133 /* AnyKeyword */); +} +function addPropertyDeclaration(changeTracker, sourceFile, node, tokenName, typeNode, modifierFlags) { + const modifiers = modifierFlags ? factory.createNodeArray(factory.createModifiersFromModifierFlags(modifierFlags)) : void 0; + const property = isClassLike(node) ? factory.createPropertyDeclaration( + modifiers, + tokenName, + /*questionOrExclamationToken*/ + void 0, + typeNode, + /*initializer*/ + void 0 + ) : factory.createPropertySignature( + /*modifiers*/ + void 0, + tokenName, + /*questionToken*/ + void 0, + typeNode + ); + const lastProp = getNodeToInsertPropertyAfter(node); + if (lastProp) { + changeTracker.insertNodeAfter(sourceFile, lastProp, property); + } else { + changeTracker.insertMemberAtStart(sourceFile, node, property); + } +} +function getNodeToInsertPropertyAfter(node) { + let res; + for (const member of node.members) { + if (!isPropertyDeclaration(member)) break; + res = member; + } + return res; +} +function createAddIndexSignatureAction(context, sourceFile, node, tokenName, typeNode) { + const stringTypeNode = factory.createKeywordTypeNode(154 /* StringKeyword */); + const indexingParameter = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + "x", + /*questionToken*/ + void 0, + stringTypeNode, + /*initializer*/ + void 0 + ); + const indexSignature = factory.createIndexSignature( + /*modifiers*/ + void 0, + [indexingParameter], + typeNode + ); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => t.insertMemberAtStart(sourceFile, node, indexSignature)); + return createCodeFixActionWithoutFixAll(fixMissingMember, changes, [Diagnostics.Add_index_signature_for_property_0, tokenName]); +} +function getActionsForMissingMethodDeclaration(context, info) { + const { parentDeclaration, declSourceFile, modifierFlags, token, call } = info; + if (call === void 0) { + return void 0; + } + const methodName = token.text; + const addMethodDeclarationChanges = (modifierFlags2) => ts_textChanges_exports.ChangeTracker.with(context, (t) => addMethodDeclaration(context, t, call, token, modifierFlags2, parentDeclaration, declSourceFile)); + const actions2 = [createCodeFixAction(fixMissingMember, addMethodDeclarationChanges(modifierFlags & 256 /* Static */), [modifierFlags & 256 /* Static */ ? Diagnostics.Declare_static_method_0 : Diagnostics.Declare_method_0, methodName], fixMissingMember, Diagnostics.Add_all_missing_members)]; + if (modifierFlags & 2 /* Private */) { + actions2.unshift(createCodeFixActionWithoutFixAll(fixMissingMember, addMethodDeclarationChanges(2 /* Private */), [Diagnostics.Declare_private_method_0, methodName])); + } + return actions2; +} +function addMethodDeclaration(context, changes, callExpression, name, modifierFlags, parentDeclaration, sourceFile) { + const importAdder = createImportAdder(sourceFile, context.program, context.preferences, context.host); + const kind = isClassLike(parentDeclaration) ? 175 /* MethodDeclaration */ : 174 /* MethodSignature */; + const signatureDeclaration = createSignatureDeclarationFromCallExpression(kind, context, importAdder, callExpression, name, modifierFlags, parentDeclaration); + const containingMethodDeclaration = tryGetContainingMethodDeclaration(parentDeclaration, callExpression); + if (containingMethodDeclaration) { + changes.insertNodeAfter(sourceFile, containingMethodDeclaration, signatureDeclaration); + } else { + changes.insertMemberAtStart(sourceFile, parentDeclaration, signatureDeclaration); + } + importAdder.writeFixes(changes); +} +function addEnumMemberDeclaration(changes, checker, { token, parentDeclaration }) { + const hasStringInitializer = some(parentDeclaration.members, (member) => { + const type = checker.getTypeAtLocation(member); + return !!(type && type.flags & 402653316 /* StringLike */); + }); + const sourceFile = parentDeclaration.getSourceFile(); + const enumMember = factory.createEnumMember(token, hasStringInitializer ? factory.createStringLiteral(token.text) : void 0); + const last2 = lastOrUndefined(parentDeclaration.members); + if (last2) { + changes.insertNodeInListAfter(sourceFile, last2, enumMember, parentDeclaration.members); + } else { + changes.insertMemberAtStart(sourceFile, parentDeclaration, enumMember); + } +} +function addFunctionDeclaration(changes, context, info) { + const quotePreference = getQuotePreference(context.sourceFile, context.preferences); + const importAdder = createImportAdder(context.sourceFile, context.program, context.preferences, context.host); + const functionDeclaration = info.kind === 2 /* Function */ ? createSignatureDeclarationFromCallExpression(263 /* FunctionDeclaration */, context, importAdder, info.call, idText(info.token), info.modifierFlags, info.parentDeclaration) : createSignatureDeclarationFromSignature( + 263 /* FunctionDeclaration */, + context, + quotePreference, + info.signature, + createStubbedBody(Diagnostics.Function_not_implemented.message, quotePreference), + info.token, + /*modifiers*/ + void 0, + /*optional*/ + void 0, + /*enclosingDeclaration*/ + void 0, + importAdder + ); + if (functionDeclaration === void 0) { + Debug.fail("fixMissingFunctionDeclaration codefix got unexpected error."); + } + isReturnStatement(info.parentDeclaration) ? changes.insertNodeBefore( + info.sourceFile, + info.parentDeclaration, + functionDeclaration, + /*blankLineBetween*/ + true + ) : changes.insertNodeAtEndOfScope(info.sourceFile, info.parentDeclaration, functionDeclaration); + importAdder.writeFixes(changes); +} +function addJsxAttributes(changes, context, info) { + const importAdder = createImportAdder(context.sourceFile, context.program, context.preferences, context.host); + const quotePreference = getQuotePreference(context.sourceFile, context.preferences); + const checker = context.program.getTypeChecker(); + const jsxAttributesNode = info.parentDeclaration.attributes; + const hasSpreadAttribute = some(jsxAttributesNode.properties, isJsxSpreadAttribute); + const attrs = map(info.attributes, (attr) => { + const value = tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeOfSymbol(attr), info.parentDeclaration); + const name = factory.createIdentifier(attr.name); + const jsxAttribute = factory.createJsxAttribute(name, factory.createJsxExpression( + /*dotDotDotToken*/ + void 0, + value + )); + setParent(name, jsxAttribute); + return jsxAttribute; + }); + const jsxAttributes = factory.createJsxAttributes(hasSpreadAttribute ? [...attrs, ...jsxAttributesNode.properties] : [...jsxAttributesNode.properties, ...attrs]); + const options = { prefix: jsxAttributesNode.pos === jsxAttributesNode.end ? " " : void 0 }; + changes.replaceNode(context.sourceFile, jsxAttributesNode, jsxAttributes, options); + importAdder.writeFixes(changes); +} +function addObjectLiteralProperties(changes, context, info) { + const importAdder = createImportAdder(context.sourceFile, context.program, context.preferences, context.host); + const quotePreference = getQuotePreference(context.sourceFile, context.preferences); + const target = getEmitScriptTarget(context.program.getCompilerOptions()); + const checker = context.program.getTypeChecker(); + const props = map(info.properties, (prop) => { + const initializer = tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeOfSymbol(prop), info.parentDeclaration); + return factory.createPropertyAssignment(createPropertyNameFromSymbol(prop, target, quotePreference, checker), initializer); + }); + const options = { + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude, + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Exclude, + indentation: info.indentation + }; + changes.replaceNode(context.sourceFile, info.parentDeclaration, factory.createObjectLiteralExpression( + [...info.parentDeclaration.properties, ...props], + /*multiLine*/ + true + ), options); + importAdder.writeFixes(changes); +} +function tryGetValueFromType(context, checker, importAdder, quotePreference, type, enclosingDeclaration) { + if (type.flags & 3 /* AnyOrUnknown */) { + return createUndefined(); + } + if (type.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) { + return factory.createStringLiteral( + "", + /* isSingleQuote */ + quotePreference === 0 /* Single */ + ); + } + if (type.flags & 8 /* Number */) { + return factory.createNumericLiteral(0); + } + if (type.flags & 64 /* BigInt */) { + return factory.createBigIntLiteral("0n"); + } + if (type.flags & 16 /* Boolean */) { + return factory.createFalse(); + } + if (type.flags & 1056 /* EnumLike */) { + const enumMember = type.symbol.exports ? firstOrUndefinedIterator(type.symbol.exports.values()) : type.symbol; + const symbol = type.symbol.parent && type.symbol.parent.flags & 256 /* RegularEnum */ ? type.symbol.parent : type.symbol; + const name = checker.symbolToExpression( + symbol, + 111551 /* Value */, + /*enclosingDeclaration*/ + void 0, + /*flags*/ + 64 /* UseFullyQualifiedType */ + ); + return enumMember === void 0 || name === void 0 ? factory.createNumericLiteral(0) : factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember)); + } + if (type.flags & 256 /* NumberLiteral */) { + return factory.createNumericLiteral(type.value); + } + if (type.flags & 2048 /* BigIntLiteral */) { + return factory.createBigIntLiteral(type.value); + } + if (type.flags & 128 /* StringLiteral */) { + return factory.createStringLiteral( + type.value, + /* isSingleQuote */ + quotePreference === 0 /* Single */ + ); + } + if (type.flags & 512 /* BooleanLiteral */) { + return type === checker.getFalseType() || type === checker.getFalseType( + /*fresh*/ + true + ) ? factory.createFalse() : factory.createTrue(); + } + if (type.flags & 65536 /* Null */) { + return factory.createNull(); + } + if (type.flags & 1048576 /* Union */) { + const expression = firstDefined(type.types, (t) => tryGetValueFromType(context, checker, importAdder, quotePreference, t, enclosingDeclaration)); + return expression ?? createUndefined(); + } + if (checker.isArrayLikeType(type)) { + return factory.createArrayLiteralExpression(); + } + if (isObjectLiteralType(type)) { + const props = map(checker.getPropertiesOfType(type), (prop) => { + const initializer = tryGetValueFromType(context, checker, importAdder, quotePreference, checker.getTypeOfSymbol(prop), enclosingDeclaration); + return factory.createPropertyAssignment(prop.name, initializer); + }); + return factory.createObjectLiteralExpression( + props, + /*multiLine*/ + true + ); + } + if (getObjectFlags(type) & 16 /* Anonymous */) { + const decl = find(type.symbol.declarations || emptyArray, or(isFunctionTypeNode, isMethodSignature, isMethodDeclaration)); + if (decl === void 0) return createUndefined(); + const signature = checker.getSignaturesOfType(type, 0 /* Call */); + if (signature === void 0) return createUndefined(); + const func = createSignatureDeclarationFromSignature( + 219 /* FunctionExpression */, + context, + quotePreference, + signature[0], + createStubbedBody(Diagnostics.Function_not_implemented.message, quotePreference), + /*name*/ + void 0, + /*modifiers*/ + void 0, + /*optional*/ + void 0, + /*enclosingDeclaration*/ + enclosingDeclaration, + importAdder + ); + return func ?? createUndefined(); + } + if (getObjectFlags(type) & 1 /* Class */) { + const classDeclaration = getClassLikeDeclarationOfSymbol(type.symbol); + if (classDeclaration === void 0 || hasAbstractModifier(classDeclaration)) return createUndefined(); + const constructorDeclaration = getFirstConstructorWithBody(classDeclaration); + if (constructorDeclaration && length(constructorDeclaration.parameters)) return createUndefined(); + return factory.createNewExpression( + factory.createIdentifier(type.symbol.name), + /*typeArguments*/ + void 0, + /*argumentsArray*/ + void 0 + ); + } + return createUndefined(); +} +function createUndefined() { + return factory.createIdentifier("undefined"); +} +function isObjectLiteralType(type) { + return type.flags & 524288 /* Object */ && (getObjectFlags(type) & 128 /* ObjectLiteral */ || type.symbol && tryCast(singleOrUndefined(type.symbol.declarations), isTypeLiteralNode)); +} +function getUnmatchedAttributes(checker, target, source) { + const attrsType = checker.getContextualType(source.attributes); + if (attrsType === void 0) return emptyArray; + const targetProps = attrsType.getProperties(); + if (!length(targetProps)) return emptyArray; + const seenNames = /* @__PURE__ */ new Set(); + for (const sourceProp of source.attributes.properties) { + if (isJsxAttribute(sourceProp)) { + seenNames.add(getEscapedTextOfJsxAttributeName(sourceProp.name)); + } + if (isJsxSpreadAttribute(sourceProp)) { + const type = checker.getTypeAtLocation(sourceProp.expression); + for (const prop of type.getProperties()) { + seenNames.add(prop.escapedName); + } + } + } + return filter(targetProps, (targetProp) => isIdentifierText(targetProp.name, target, 1 /* JSX */) && !(targetProp.flags & 16777216 /* Optional */ || getCheckFlags(targetProp) & 48 /* Partial */ || seenNames.has(targetProp.escapedName))); +} +function tryGetContainingMethodDeclaration(node, callExpression) { + if (isTypeLiteralNode(node)) { + return void 0; + } + const declaration = findAncestor(callExpression, (n) => isMethodDeclaration(n) || isConstructorDeclaration(n)); + return declaration && declaration.parent === node ? declaration : void 0; +} +function createPropertyNameFromSymbol(symbol, target, quotePreference, checker) { + if (isTransientSymbol(symbol)) { + const prop = checker.symbolToNode( + symbol, + 111551 /* Value */, + /*enclosingDeclaration*/ + void 0, + /*flags*/ + void 0, + 1 /* WriteComputedProps */ + ); + if (prop && isComputedPropertyName(prop)) return prop; + } + return createPropertyNameNodeForIdentifierOrLiteral( + symbol.name, + target, + quotePreference === 0 /* Single */, + /*stringNamed*/ + false, + /*isMethod*/ + false + ); +} +function findScope(node) { + if (findAncestor(node, isJsxExpression)) { + const returnStatement = findAncestor(node.parent, isReturnStatement); + if (returnStatement) return returnStatement; + } + return getSourceFileOfNode(node); +} +function getAllSupers(decl, checker) { + const res = []; + while (decl) { + const superElement = getClassExtendsHeritageElement(decl); + const superSymbol = superElement && checker.getSymbolAtLocation(superElement.expression); + if (!superSymbol) break; + const symbol = superSymbol.flags & 2097152 /* Alias */ ? checker.getAliasedSymbol(superSymbol) : superSymbol; + const superDecl = symbol.declarations && find(symbol.declarations, isClassLike); + if (!superDecl) break; + res.push(superDecl); + decl = superDecl; + } + return res; +} + +// src/services/codefixes/fixAddMissingNewOperator.ts +var fixId25 = "addMissingNewOperator"; +var errorCodes29 = [Diagnostics.Value_of_type_0_is_not_callable_Did_you_mean_to_include_new.code]; +registerCodeFix({ + errorCodes: errorCodes29, + getCodeActions(context) { + const { sourceFile, span } = context; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addMissingNewOperator(t, sourceFile, span)); + return [createCodeFixAction(fixId25, changes, Diagnostics.Add_missing_new_operator_to_call, fixId25, Diagnostics.Add_missing_new_operator_to_all_calls)]; + }, + fixIds: [fixId25], + getAllCodeActions: (context) => codeFixAll(context, errorCodes29, (changes, diag2) => addMissingNewOperator(changes, context.sourceFile, diag2)) +}); +function addMissingNewOperator(changes, sourceFile, span) { + const call = cast(findAncestorMatchingSpan2(sourceFile, span), isCallExpression); + const newExpression = factory.createNewExpression(call.expression, call.typeArguments, call.arguments); + changes.replaceNode(sourceFile, call, newExpression); +} +function findAncestorMatchingSpan2(sourceFile, span) { + let token = getTokenAtPosition(sourceFile, span.start); + const end = textSpanEnd(span); + while (token.end < end) { + token = token.parent; + } + return token; +} + +// src/services/codefixes/fixAddMissingParam.ts +var addMissingParamFixId = "addMissingParam"; +var addOptionalParamFixId = "addOptionalParam"; +var errorCodes30 = [Diagnostics.Expected_0_arguments_but_got_1.code]; +registerCodeFix({ + errorCodes: errorCodes30, + fixIds: [addMissingParamFixId, addOptionalParamFixId], + getCodeActions(context) { + const info = getInfo11(context.sourceFile, context.program, context.span.start); + if (info === void 0) return void 0; + const { name, declarations, newParameters, newOptionalParameters } = info; + const actions2 = []; + if (length(newParameters)) { + append( + actions2, + createCodeFixAction( + addMissingParamFixId, + ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange19(t, context.program, context.preferences, context.host, declarations, newParameters)), + [length(newParameters) > 1 ? Diagnostics.Add_missing_parameters_to_0 : Diagnostics.Add_missing_parameter_to_0, name], + addMissingParamFixId, + Diagnostics.Add_all_missing_parameters + ) + ); + } + if (length(newOptionalParameters)) { + append( + actions2, + createCodeFixAction( + addOptionalParamFixId, + ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange19(t, context.program, context.preferences, context.host, declarations, newOptionalParameters)), + [length(newOptionalParameters) > 1 ? Diagnostics.Add_optional_parameters_to_0 : Diagnostics.Add_optional_parameter_to_0, name], + addOptionalParamFixId, + Diagnostics.Add_all_optional_parameters + ) + ); + } + return actions2; + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes30, (changes, diag2) => { + const info = getInfo11(context.sourceFile, context.program, diag2.start); + if (info) { + const { declarations, newParameters, newOptionalParameters } = info; + if (context.fixId === addMissingParamFixId) { + doChange19(changes, context.program, context.preferences, context.host, declarations, newParameters); + } + if (context.fixId === addOptionalParamFixId) { + doChange19(changes, context.program, context.preferences, context.host, declarations, newOptionalParameters); + } + } + }) +}); +function getInfo11(sourceFile, program, pos) { + const token = getTokenAtPosition(sourceFile, pos); + const callExpression = findAncestor(token, isCallExpression); + if (callExpression === void 0 || length(callExpression.arguments) === 0) { + return void 0; + } + const checker = program.getTypeChecker(); + const type = checker.getTypeAtLocation(callExpression.expression); + const convertibleSignatureDeclarations = filter(type.symbol.declarations, isConvertibleSignatureDeclaration); + if (convertibleSignatureDeclarations === void 0) { + return void 0; + } + const nonOverloadDeclaration = lastOrUndefined(convertibleSignatureDeclarations); + if (nonOverloadDeclaration === void 0 || nonOverloadDeclaration.body === void 0 || isSourceFileFromLibrary(program, nonOverloadDeclaration.getSourceFile())) { + return void 0; + } + const name = tryGetName2(nonOverloadDeclaration); + if (name === void 0) { + return void 0; + } + const newParameters = []; + const newOptionalParameters = []; + const parametersLength = length(nonOverloadDeclaration.parameters); + const argumentsLength = length(callExpression.arguments); + if (parametersLength > argumentsLength) { + return void 0; + } + const declarations = [nonOverloadDeclaration, ...getOverloads(nonOverloadDeclaration, convertibleSignatureDeclarations)]; + for (let i = 0, pos2 = 0, paramIndex = 0; i < argumentsLength; i++) { + const arg = callExpression.arguments[i]; + const expr = isAccessExpression(arg) ? getNameOfAccessExpression(arg) : arg; + const type2 = checker.getWidenedType(checker.getBaseTypeOfLiteralType(checker.getTypeAtLocation(arg))); + const parameter = pos2 < parametersLength ? nonOverloadDeclaration.parameters[pos2] : void 0; + if (parameter && checker.isTypeAssignableTo(type2, checker.getTypeAtLocation(parameter))) { + pos2++; + continue; + } + const name2 = expr && isIdentifier(expr) ? expr.text : `p${paramIndex++}`; + const typeNode = typeToTypeNode(checker, type2, nonOverloadDeclaration); + append(newParameters, { + pos: i, + declaration: createParameter( + name2, + typeNode, + /*questionToken*/ + void 0 + ) + }); + if (isOptionalPos(declarations, pos2)) { + continue; + } + append(newOptionalParameters, { + pos: i, + declaration: createParameter(name2, typeNode, factory.createToken(58 /* QuestionToken */)) + }); + } + return { + newParameters, + newOptionalParameters, + name: declarationNameToString(name), + declarations + }; +} +function tryGetName2(node) { + const name = getNameOfDeclaration(node); + if (name) { + return name; + } + if (isVariableDeclaration(node.parent) && isIdentifier(node.parent.name) || isPropertyDeclaration(node.parent) || isParameter(node.parent)) { + return node.parent.name; + } +} +function typeToTypeNode(checker, type, enclosingDeclaration) { + return checker.typeToTypeNode(checker.getWidenedType(type), enclosingDeclaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */) ?? factory.createKeywordTypeNode(159 /* UnknownKeyword */); +} +function doChange19(changes, program, preferences, host, declarations, newParameters) { + const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); + forEach(declarations, (declaration) => { + const sourceFile = getSourceFileOfNode(declaration); + const importAdder = createImportAdder(sourceFile, program, preferences, host); + if (length(declaration.parameters)) { + changes.replaceNodeRangeWithNodes( + sourceFile, + first(declaration.parameters), + last(declaration.parameters), + updateParameters(importAdder, scriptTarget, declaration, newParameters), + { + joiner: ", ", + indentation: 0, + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.IncludeAll, + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include + } + ); + } else { + forEach(updateParameters(importAdder, scriptTarget, declaration, newParameters), (parameter, index) => { + if (length(declaration.parameters) === 0 && index === 0) { + changes.insertNodeAt(sourceFile, declaration.parameters.end, parameter); + } else { + changes.insertNodeAtEndOfList(sourceFile, declaration.parameters, parameter); + } + }); + } + importAdder.writeFixes(changes); + }); +} +function isConvertibleSignatureDeclaration(node) { + switch (node.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 220 /* ArrowFunction */: + return true; + default: + return false; + } +} +function updateParameters(importAdder, scriptTarget, node, newParameters) { + const parameters = map(node.parameters, (p) => factory.createParameterDeclaration( + p.modifiers, + p.dotDotDotToken, + p.name, + p.questionToken, + p.type, + p.initializer + )); + for (const { pos, declaration } of newParameters) { + const prev = pos > 0 ? parameters[pos - 1] : void 0; + parameters.splice( + pos, + 0, + factory.updateParameterDeclaration( + declaration, + declaration.modifiers, + declaration.dotDotDotToken, + declaration.name, + prev && prev.questionToken ? factory.createToken(58 /* QuestionToken */) : declaration.questionToken, + getParameterType(importAdder, declaration.type, scriptTarget), + declaration.initializer + ) + ); + } + return parameters; +} +function getOverloads(implementation, declarations) { + const overloads = []; + for (const declaration of declarations) { + if (isOverload(declaration)) { + if (length(declaration.parameters) === length(implementation.parameters)) { + overloads.push(declaration); + continue; + } + if (length(declaration.parameters) > length(implementation.parameters)) { + return []; + } + } + } + return overloads; +} +function isOverload(declaration) { + return isConvertibleSignatureDeclaration(declaration) && declaration.body === void 0; +} +function createParameter(name, type, questionToken) { + return factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + name, + questionToken, + type, + /*initializer*/ + void 0 + ); +} +function isOptionalPos(declarations, pos) { + return length(declarations) && some(declarations, (d) => pos < length(d.parameters) && !!d.parameters[pos] && d.parameters[pos].questionToken === void 0); +} +function getParameterType(importAdder, typeNode, scriptTarget) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); + if (importableReference) { + importSymbols(importAdder, importableReference.symbols); + return importableReference.typeNode; + } + return typeNode; +} + +// src/services/codefixes/fixCannotFindModule.ts +var fixName2 = "fixCannotFindModule"; +var fixIdInstallTypesPackage = "installTypesPackage"; +var errorCodeCannotFindModule = Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations.code; +var errorCannotFindImplicitJsxImport = Diagnostics.This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_for_the_appropriate_package_installed.code; +var errorCodes31 = [ + errorCodeCannotFindModule, + Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type.code, + errorCannotFindImplicitJsxImport +]; +registerCodeFix({ + errorCodes: errorCodes31, + getCodeActions: function getCodeActionsToFixNotFoundModule(context) { + const { host, sourceFile, span: { start }, errorCode } = context; + const packageName = errorCode === errorCannotFindImplicitJsxImport ? getJSXImplicitImportBase(context.program.getCompilerOptions(), sourceFile) : tryGetImportedPackageName(sourceFile, start); + if (packageName === void 0) return void 0; + const typesPackageName = getTypesPackageNameToInstall(packageName, host, errorCode); + return typesPackageName === void 0 ? [] : [createCodeFixAction( + fixName2, + /*changes*/ + [], + [Diagnostics.Install_0, typesPackageName], + fixIdInstallTypesPackage, + Diagnostics.Install_all_missing_types_packages, + getInstallCommand(sourceFile.fileName, typesPackageName) + )]; + }, + fixIds: [fixIdInstallTypesPackage], + getAllCodeActions: (context) => { + return codeFixAll(context, errorCodes31, (_changes, diag2, commands) => { + const packageName = tryGetImportedPackageName(diag2.file, diag2.start); + if (packageName === void 0) return void 0; + switch (context.fixId) { + case fixIdInstallTypesPackage: { + const pkg = getTypesPackageNameToInstall(packageName, context.host, diag2.code); + if (pkg) { + commands.push(getInstallCommand(diag2.file.fileName, pkg)); + } + break; + } + default: + Debug.fail(`Bad fixId: ${context.fixId}`); + } + }); + } +}); +function getInstallCommand(fileName, packageName) { + return { type: "install package", file: fileName, packageName }; +} +function tryGetImportedPackageName(sourceFile, pos) { + const moduleSpecifierText = tryCast(getTokenAtPosition(sourceFile, pos), isStringLiteral); + if (!moduleSpecifierText) return void 0; + const moduleName = moduleSpecifierText.text; + const { packageName } = parsePackageName(moduleName); + return isExternalModuleNameRelative(packageName) ? void 0 : packageName; +} +function getTypesPackageNameToInstall(packageName, host, diagCode) { + var _a; + return diagCode === errorCodeCannotFindModule ? nodeCoreModules.has(packageName) ? "@types/node" : void 0 : ((_a = host.isKnownTypesPackageName) == null ? void 0 : _a.call(host, packageName)) ? getTypesPackageName(packageName) : void 0; +} + +// src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts +var errorCodes32 = [ + Diagnostics.Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2.code, + Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2.code, + Diagnostics.Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more.code, + Diagnostics.Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1.code, + Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1.code, + Diagnostics.Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and_2_more.code +]; +var fixId26 = "fixClassDoesntImplementInheritedAbstractMember"; +registerCodeFix({ + errorCodes: errorCodes32, + getCodeActions: function getCodeActionsToFixClassNotImplementingInheritedMembers(context) { + const { sourceFile, span } = context; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addMissingMembers(getClass2(sourceFile, span.start), sourceFile, context, t, context.preferences)); + return changes.length === 0 ? void 0 : [createCodeFixAction(fixId26, changes, Diagnostics.Implement_inherited_abstract_class, fixId26, Diagnostics.Implement_all_inherited_abstract_classes)]; + }, + fixIds: [fixId26], + getAllCodeActions: function getAllCodeActionsToFixClassDoesntImplementInheritedAbstractMember(context) { + const seenClassDeclarations = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes32, (changes, diag2) => { + const classDeclaration = getClass2(diag2.file, diag2.start); + if (addToSeen(seenClassDeclarations, getNodeId(classDeclaration))) { + addMissingMembers(classDeclaration, context.sourceFile, context, changes, context.preferences); + } + }); + } +}); +function getClass2(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + return cast(token.parent, isClassLike); +} +function addMissingMembers(classDeclaration, sourceFile, context, changeTracker, preferences) { + const extendsNode = getEffectiveBaseTypeNode(classDeclaration); + const checker = context.program.getTypeChecker(); + const instantiatedExtendsType = checker.getTypeAtLocation(extendsNode); + const abstractAndNonPrivateExtendsSymbols = checker.getPropertiesOfType(instantiatedExtendsType).filter(symbolPointsToNonPrivateAndAbstractMember); + const importAdder = createImportAdder(sourceFile, context.program, preferences, context.host); + createMissingMemberNodes(classDeclaration, abstractAndNonPrivateExtendsSymbols, sourceFile, context, preferences, importAdder, (member) => changeTracker.insertMemberAtStart(sourceFile, classDeclaration, member)); + importAdder.writeFixes(changeTracker); +} +function symbolPointsToNonPrivateAndAbstractMember(symbol) { + const flags = getSyntacticModifierFlags(first(symbol.getDeclarations())); + return !(flags & 2 /* Private */) && !!(flags & 64 /* Abstract */); +} + +// src/services/codefixes/fixClassSuperMustPrecedeThisAccess.ts +var fixId27 = "classSuperMustPrecedeThisAccess"; +var errorCodes33 = [Diagnostics.super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class.code]; +registerCodeFix({ + errorCodes: errorCodes33, + getCodeActions(context) { + const { sourceFile, span } = context; + const nodes = getNodes(sourceFile, span.start); + if (!nodes) return void 0; + const { constructor, superCall } = nodes; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange20(t, sourceFile, constructor, superCall)); + return [createCodeFixAction(fixId27, changes, Diagnostics.Make_super_call_the_first_statement_in_the_constructor, fixId27, Diagnostics.Make_all_super_calls_the_first_statement_in_their_constructor)]; + }, + fixIds: [fixId27], + getAllCodeActions(context) { + const { sourceFile } = context; + const seenClasses = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes33, (changes, diag2) => { + const nodes = getNodes(diag2.file, diag2.start); + if (!nodes) return; + const { constructor, superCall } = nodes; + if (addToSeen(seenClasses, getNodeId(constructor.parent))) { + doChange20(changes, sourceFile, constructor, superCall); + } + }); + } +}); +function doChange20(changes, sourceFile, constructor, superCall) { + changes.insertNodeAtConstructorStart(sourceFile, constructor, superCall); + changes.delete(sourceFile, superCall); +} +function getNodes(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + if (token.kind !== 110 /* ThisKeyword */) return void 0; + const constructor = getContainingFunction(token); + const superCall = findSuperCall(constructor.body); + return superCall && !superCall.expression.arguments.some((arg) => isPropertyAccessExpression(arg) && arg.expression === token) ? { constructor, superCall } : void 0; +} +function findSuperCall(n) { + return isExpressionStatement(n) && isSuperCall(n.expression) ? n : isFunctionLike(n) ? void 0 : forEachChild(n, findSuperCall); +} + +// src/services/codefixes/fixConstructorForDerivedNeedSuperCall.ts +var fixId28 = "constructorForDerivedNeedSuperCall"; +var errorCodes34 = [Diagnostics.Constructors_for_derived_classes_must_contain_a_super_call.code]; +registerCodeFix({ + errorCodes: errorCodes34, + getCodeActions(context) { + const { sourceFile, span } = context; + const ctr = getNode(sourceFile, span.start); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange21(t, sourceFile, ctr)); + return [createCodeFixAction(fixId28, changes, Diagnostics.Add_missing_super_call, fixId28, Diagnostics.Add_all_missing_super_calls)]; + }, + fixIds: [fixId28], + getAllCodeActions: (context) => codeFixAll(context, errorCodes34, (changes, diag2) => doChange21(changes, context.sourceFile, getNode(diag2.file, diag2.start))) +}); +function getNode(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + Debug.assert(isConstructorDeclaration(token.parent), "token should be at the constructor declaration"); + return token.parent; +} +function doChange21(changes, sourceFile, ctr) { + const superCall = factory.createExpressionStatement(factory.createCallExpression( + factory.createSuper(), + /*typeArguments*/ + void 0, + /*argumentsArray*/ + emptyArray + )); + changes.insertNodeAtConstructorStart(sourceFile, ctr, superCall); +} + +// src/services/codefixes/fixEnableJsxFlag.ts +var fixID = "fixEnableJsxFlag"; +var errorCodes35 = [Diagnostics.Cannot_use_JSX_unless_the_jsx_flag_is_provided.code]; +registerCodeFix({ + errorCodes: errorCodes35, + getCodeActions: function getCodeActionsToFixEnableJsxFlag(context) { + const { configFile } = context.program.getCompilerOptions(); + if (configFile === void 0) { + return void 0; + } + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changeTracker) => doChange22(changeTracker, configFile)); + return [ + createCodeFixActionWithoutFixAll(fixID, changes, Diagnostics.Enable_the_jsx_flag_in_your_configuration_file) + ]; + }, + fixIds: [fixID], + getAllCodeActions: (context) => codeFixAll(context, errorCodes35, (changes) => { + const { configFile } = context.program.getCompilerOptions(); + if (configFile === void 0) { + return void 0; + } + doChange22(changes, configFile); + }) +}); +function doChange22(changeTracker, configFile) { + setJsonCompilerOptionValue(changeTracker, configFile, "jsx", factory.createStringLiteral("react")); +} + +// src/services/codefixes/fixNaNEquality.ts +var fixId29 = "fixNaNEquality"; +var errorCodes36 = [ + Diagnostics.This_condition_will_always_return_0.code +]; +registerCodeFix({ + errorCodes: errorCodes36, + getCodeActions(context) { + const { sourceFile, span, program } = context; + const info = getInfo12(program, sourceFile, span); + if (info === void 0) return; + const { suggestion, expression, arg } = info; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange23(t, sourceFile, arg, expression)); + return [createCodeFixAction(fixId29, changes, [Diagnostics.Use_0, suggestion], fixId29, Diagnostics.Use_Number_isNaN_in_all_conditions)]; + }, + fixIds: [fixId29], + getAllCodeActions: (context) => { + return codeFixAll(context, errorCodes36, (changes, diag2) => { + const info = getInfo12(context.program, diag2.file, createTextSpan(diag2.start, diag2.length)); + if (info) { + doChange23(changes, diag2.file, info.arg, info.expression); + } + }); + } +}); +function getInfo12(program, sourceFile, span) { + const diag2 = find(program.getSemanticDiagnostics(sourceFile), (diag3) => diag3.start === span.start && diag3.length === span.length); + if (diag2 === void 0 || diag2.relatedInformation === void 0) return; + const related = find(diag2.relatedInformation, (related2) => related2.code === Diagnostics.Did_you_mean_0.code); + if (related === void 0 || related.file === void 0 || related.start === void 0 || related.length === void 0) return; + const token = findAncestorMatchingSpan(related.file, createTextSpan(related.start, related.length)); + if (token === void 0) return; + if (isExpression(token) && isBinaryExpression(token.parent)) { + return { suggestion: getSuggestion(related.messageText), expression: token.parent, arg: token }; + } + return void 0; +} +function doChange23(changes, sourceFile, arg, expression) { + const callExpression = factory.createCallExpression( + factory.createPropertyAccessExpression(factory.createIdentifier("Number"), factory.createIdentifier("isNaN")), + /*typeArguments*/ + void 0, + [arg] + ); + const operator = expression.operatorToken.kind; + changes.replaceNode( + sourceFile, + expression, + operator === 38 /* ExclamationEqualsEqualsToken */ || operator === 36 /* ExclamationEqualsToken */ ? factory.createPrefixUnaryExpression(54 /* ExclamationToken */, callExpression) : callExpression + ); +} +function getSuggestion(messageText) { + const [, suggestion] = flattenDiagnosticMessageText(messageText, "\n", 0).match(/'(.*)'/) || []; + return suggestion; +} + +// src/services/codefixes/fixModuleAndTargetOptions.ts +registerCodeFix({ + errorCodes: [ + Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code, + Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code, + Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_node20_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code + ], + getCodeActions: function getCodeActionsToFixModuleAndTarget(context) { + const compilerOptions = context.program.getCompilerOptions(); + const { configFile } = compilerOptions; + if (configFile === void 0) { + return void 0; + } + const codeFixes = []; + const moduleKind = getEmitModuleKind(compilerOptions); + const moduleOutOfRange = moduleKind >= 5 /* ES2015 */ && moduleKind < 99 /* ESNext */; + if (moduleOutOfRange) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changes2) => { + setJsonCompilerOptionValue(changes2, configFile, "module", factory.createStringLiteral("esnext")); + }); + codeFixes.push(createCodeFixActionWithoutFixAll("fixModuleOption", changes, [Diagnostics.Set_the_module_option_in_your_configuration_file_to_0, "esnext"])); + } + const target = getEmitScriptTarget(compilerOptions); + const targetOutOfRange = target < 4 /* ES2017 */ || target > 99 /* ESNext */; + if (targetOutOfRange) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (tracker) => { + const configObject = getTsConfigObjectLiteralExpression(configFile); + if (!configObject) return; + const options = [["target", factory.createStringLiteral("es2017")]]; + if (moduleKind === 1 /* CommonJS */) { + options.push(["module", factory.createStringLiteral("commonjs")]); + } + setJsonCompilerOptionValues(tracker, configFile, options); + }); + codeFixes.push(createCodeFixActionWithoutFixAll("fixTargetOption", changes, [Diagnostics.Set_the_target_option_in_your_configuration_file_to_0, "es2017"])); + } + return codeFixes.length ? codeFixes : void 0; + } +}); + +// src/services/codefixes/fixPropertyAssignment.ts +var fixId30 = "fixPropertyAssignment"; +var errorCodes37 = [ + Diagnostics.Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_part_of_a_destructuring_pattern.code +]; +registerCodeFix({ + errorCodes: errorCodes37, + fixIds: [fixId30], + getCodeActions(context) { + const { sourceFile, span } = context; + const property = getProperty2(sourceFile, span.start); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange24(t, context.sourceFile, property)); + return [createCodeFixAction(fixId30, changes, [Diagnostics.Change_0_to_1, "=", ":"], fixId30, [Diagnostics.Switch_each_misused_0_to_1, "=", ":"])]; + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes37, (changes, diag2) => doChange24(changes, diag2.file, getProperty2(diag2.file, diag2.start))) +}); +function doChange24(changes, sourceFile, node) { + changes.replaceNode(sourceFile, node, factory.createPropertyAssignment(node.name, node.objectAssignmentInitializer)); +} +function getProperty2(sourceFile, pos) { + return cast(getTokenAtPosition(sourceFile, pos).parent, isShorthandPropertyAssignment); +} + +// src/services/codefixes/fixExtendsInterfaceBecomesImplements.ts +var fixId31 = "extendsInterfaceBecomesImplements"; +var errorCodes38 = [Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements.code]; +registerCodeFix({ + errorCodes: errorCodes38, + getCodeActions(context) { + const { sourceFile } = context; + const nodes = getNodes2(sourceFile, context.span.start); + if (!nodes) return void 0; + const { extendsToken, heritageClauses } = nodes; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChanges2(t, sourceFile, extendsToken, heritageClauses)); + return [createCodeFixAction(fixId31, changes, Diagnostics.Change_extends_to_implements, fixId31, Diagnostics.Change_all_extended_interfaces_to_implements)]; + }, + fixIds: [fixId31], + getAllCodeActions: (context) => codeFixAll(context, errorCodes38, (changes, diag2) => { + const nodes = getNodes2(diag2.file, diag2.start); + if (nodes) doChanges2(changes, diag2.file, nodes.extendsToken, nodes.heritageClauses); + }) +}); +function getNodes2(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + const heritageClauses = getContainingClass(token).heritageClauses; + const extendsToken = heritageClauses[0].getFirstToken(); + return extendsToken.kind === 96 /* ExtendsKeyword */ ? { extendsToken, heritageClauses } : void 0; +} +function doChanges2(changes, sourceFile, extendsToken, heritageClauses) { + changes.replaceNode(sourceFile, extendsToken, factory.createToken(119 /* ImplementsKeyword */)); + if (heritageClauses.length === 2 && heritageClauses[0].token === 96 /* ExtendsKeyword */ && heritageClauses[1].token === 119 /* ImplementsKeyword */) { + const implementsToken = heritageClauses[1].getFirstToken(); + const implementsFullStart = implementsToken.getFullStart(); + changes.replaceRange(sourceFile, { pos: implementsFullStart, end: implementsFullStart }, factory.createToken(28 /* CommaToken */)); + const text = sourceFile.text; + let end = implementsToken.end; + while (end < text.length && isWhiteSpaceSingleLine(text.charCodeAt(end))) { + end++; + } + changes.deleteRange(sourceFile, { pos: implementsToken.getStart(), end }); + } +} + +// src/services/codefixes/fixForgottenThisPropertyAccess.ts +var fixId32 = "forgottenThisPropertyAccess"; +var didYouMeanStaticMemberCode = Diagnostics.Cannot_find_name_0_Did_you_mean_the_static_member_1_0.code; +var errorCodes39 = [ + Diagnostics.Cannot_find_name_0_Did_you_mean_the_instance_member_this_0.code, + Diagnostics.Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member_declaration_property_access_or_on_the_left_hand_side_of_an_in_expression.code, + didYouMeanStaticMemberCode +]; +registerCodeFix({ + errorCodes: errorCodes39, + getCodeActions(context) { + const { sourceFile } = context; + const info = getInfo13(sourceFile, context.span.start, context.errorCode); + if (!info) { + return void 0; + } + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange25(t, sourceFile, info)); + return [createCodeFixAction(fixId32, changes, [Diagnostics.Add_0_to_unresolved_variable, info.className || "this"], fixId32, Diagnostics.Add_qualifier_to_all_unresolved_variables_matching_a_member_name)]; + }, + fixIds: [fixId32], + getAllCodeActions: (context) => codeFixAll(context, errorCodes39, (changes, diag2) => { + const info = getInfo13(diag2.file, diag2.start, diag2.code); + if (info) doChange25(changes, context.sourceFile, info); + }) +}); +function getInfo13(sourceFile, pos, diagCode) { + const node = getTokenAtPosition(sourceFile, pos); + if (isIdentifier(node) || isPrivateIdentifier(node)) { + return { node, className: diagCode === didYouMeanStaticMemberCode ? getContainingClass(node).name.text : void 0 }; + } +} +function doChange25(changes, sourceFile, { node, className }) { + suppressLeadingAndTrailingTrivia(node); + changes.replaceNode(sourceFile, node, factory.createPropertyAccessExpression(className ? factory.createIdentifier(className) : factory.createThis(), node)); +} + +// src/services/codefixes/fixInvalidJsxCharacters.ts +var fixIdExpression = "fixInvalidJsxCharacters_expression"; +var fixIdHtmlEntity = "fixInvalidJsxCharacters_htmlEntity"; +var errorCodes40 = [ + Diagnostics.Unexpected_token_Did_you_mean_or_gt.code, + Diagnostics.Unexpected_token_Did_you_mean_or_rbrace.code +]; +registerCodeFix({ + errorCodes: errorCodes40, + fixIds: [fixIdExpression, fixIdHtmlEntity], + getCodeActions(context) { + const { sourceFile, preferences, span } = context; + const changeToExpression = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange26( + t, + preferences, + sourceFile, + span.start, + /*useHtmlEntity*/ + false + )); + const changeToHtmlEntity = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange26( + t, + preferences, + sourceFile, + span.start, + /*useHtmlEntity*/ + true + )); + return [ + createCodeFixAction(fixIdExpression, changeToExpression, Diagnostics.Wrap_invalid_character_in_an_expression_container, fixIdExpression, Diagnostics.Wrap_all_invalid_characters_in_an_expression_container), + createCodeFixAction(fixIdHtmlEntity, changeToHtmlEntity, Diagnostics.Convert_invalid_character_to_its_html_entity_code, fixIdHtmlEntity, Diagnostics.Convert_all_invalid_characters_to_HTML_entity_code) + ]; + }, + getAllCodeActions(context) { + return codeFixAll(context, errorCodes40, (changes, diagnostic) => doChange26(changes, context.preferences, diagnostic.file, diagnostic.start, context.fixId === fixIdHtmlEntity)); + } +}); +var htmlEntity = { + ">": ">", + "}": "}" +}; +function isValidCharacter(character) { + return hasProperty(htmlEntity, character); +} +function doChange26(changes, preferences, sourceFile, start, useHtmlEntity) { + const character = sourceFile.getText()[start]; + if (!isValidCharacter(character)) { + return; + } + const replacement = useHtmlEntity ? htmlEntity[character] : `{${quote(sourceFile, preferences, character)}}`; + changes.replaceRangeWithText(sourceFile, { pos: start, end: start + 1 }, replacement); +} + +// src/services/codefixes/fixUnmatchedParameter.ts +var deleteUnmatchedParameter = "deleteUnmatchedParameter"; +var renameUnmatchedParameter = "renameUnmatchedParameter"; +var errorCodes41 = [ + Diagnostics.JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name.code +]; +registerCodeFix({ + fixIds: [deleteUnmatchedParameter, renameUnmatchedParameter], + errorCodes: errorCodes41, + getCodeActions: function getCodeActionsToFixUnmatchedParameter(context) { + const { sourceFile, span } = context; + const actions2 = []; + const info = getInfo14(sourceFile, span.start); + if (info) { + append(actions2, getDeleteAction(context, info)); + append(actions2, getRenameAction(context, info)); + return actions2; + } + return void 0; + }, + getAllCodeActions: function getAllCodeActionsToFixUnmatchedParameter(context) { + const tagsToSignature = /* @__PURE__ */ new Map(); + return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, (changes) => { + eachDiagnostic(context, errorCodes41, ({ file, start }) => { + const info = getInfo14(file, start); + if (info) { + tagsToSignature.set(info.signature, append(tagsToSignature.get(info.signature), info.jsDocParameterTag)); + } + }); + tagsToSignature.forEach((tags, signature) => { + if (context.fixId === deleteUnmatchedParameter) { + const tagsSet = new Set(tags); + changes.filterJSDocTags(signature.getSourceFile(), signature, (t) => !tagsSet.has(t)); + } + }); + })); + } +}); +function getDeleteAction(context, { name, jsDocHost, jsDocParameterTag }) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changeTracker) => changeTracker.filterJSDocTags(context.sourceFile, jsDocHost, (t) => t !== jsDocParameterTag)); + return createCodeFixAction( + deleteUnmatchedParameter, + changes, + [Diagnostics.Delete_unused_param_tag_0, name.getText(context.sourceFile)], + deleteUnmatchedParameter, + Diagnostics.Delete_all_unused_param_tags + ); +} +function getRenameAction(context, { name, jsDocHost, signature, jsDocParameterTag }) { + if (!length(signature.parameters)) return void 0; + const sourceFile = context.sourceFile; + const tags = getJSDocTags(signature); + const names = /* @__PURE__ */ new Set(); + for (const tag of tags) { + if (isJSDocParameterTag(tag) && isIdentifier(tag.name)) { + names.add(tag.name.escapedText); + } + } + const parameterName = firstDefined(signature.parameters, (p) => isIdentifier(p.name) && !names.has(p.name.escapedText) ? p.name.getText(sourceFile) : void 0); + if (parameterName === void 0) return void 0; + const newJSDocParameterTag = factory.updateJSDocParameterTag( + jsDocParameterTag, + jsDocParameterTag.tagName, + factory.createIdentifier(parameterName), + jsDocParameterTag.isBracketed, + jsDocParameterTag.typeExpression, + jsDocParameterTag.isNameFirst, + jsDocParameterTag.comment + ); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changeTracker) => changeTracker.replaceJSDocComment(sourceFile, jsDocHost, map(tags, (t) => t === jsDocParameterTag ? newJSDocParameterTag : t))); + return createCodeFixActionWithoutFixAll(renameUnmatchedParameter, changes, [Diagnostics.Rename_param_tag_name_0_to_1, name.getText(sourceFile), parameterName]); +} +function getInfo14(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + if (token.parent && isJSDocParameterTag(token.parent) && isIdentifier(token.parent.name)) { + const jsDocParameterTag = token.parent; + const jsDocHost = getJSDocHost(jsDocParameterTag); + const signature = getHostSignatureFromJSDoc(jsDocParameterTag); + if (jsDocHost && signature) { + return { jsDocHost, signature, name: token.parent.name, jsDocParameterTag }; + } + } + return void 0; +} + +// src/services/codefixes/fixUnreferenceableDecoratorMetadata.ts +var fixId33 = "fixUnreferenceableDecoratorMetadata"; +var errorCodes42 = [Diagnostics.A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_when_isolatedModules_and_emitDecoratorMetadata_are_enabled.code]; +registerCodeFix({ + errorCodes: errorCodes42, + getCodeActions: (context) => { + const importDeclaration = getImportDeclaration(context.sourceFile, context.program, context.span.start); + if (!importDeclaration) return; + const namespaceChanges = ts_textChanges_exports.ChangeTracker.with(context, (t) => importDeclaration.kind === 277 /* ImportSpecifier */ && doNamespaceImportChange(t, context.sourceFile, importDeclaration, context.program)); + const typeOnlyChanges = ts_textChanges_exports.ChangeTracker.with(context, (t) => doTypeOnlyImportChange(t, context.sourceFile, importDeclaration, context.program)); + let actions2; + if (namespaceChanges.length) { + actions2 = append(actions2, createCodeFixActionWithoutFixAll(fixId33, namespaceChanges, Diagnostics.Convert_named_imports_to_namespace_import)); + } + if (typeOnlyChanges.length) { + actions2 = append(actions2, createCodeFixActionWithoutFixAll(fixId33, typeOnlyChanges, Diagnostics.Use_import_type)); + } + return actions2; + }, + fixIds: [fixId33] +}); +function getImportDeclaration(sourceFile, program, start) { + const identifier = tryCast(getTokenAtPosition(sourceFile, start), isIdentifier); + if (!identifier || identifier.parent.kind !== 184 /* TypeReference */) return; + const checker = program.getTypeChecker(); + const symbol = checker.getSymbolAtLocation(identifier); + return find((symbol == null ? void 0 : symbol.declarations) || emptyArray, or(isImportClause, isImportSpecifier, isImportEqualsDeclaration)); +} +function doTypeOnlyImportChange(changes, sourceFile, importDeclaration, program) { + if (importDeclaration.kind === 272 /* ImportEqualsDeclaration */) { + changes.insertModifierBefore(sourceFile, 156 /* TypeKeyword */, importDeclaration.name); + return; + } + const importClause = importDeclaration.kind === 274 /* ImportClause */ ? importDeclaration : importDeclaration.parent.parent; + if (importClause.name && importClause.namedBindings) { + return; + } + const checker = program.getTypeChecker(); + const importsValue = !!forEachImportClauseDeclaration(importClause, (decl) => { + if (skipAlias(decl.symbol, checker).flags & 111551 /* Value */) return true; + }); + if (importsValue) { + return; + } + changes.insertModifierBefore(sourceFile, 156 /* TypeKeyword */, importClause); +} +function doNamespaceImportChange(changes, sourceFile, importDeclaration, program) { + ts_refactor_exports.doChangeNamedToNamespaceOrDefault(sourceFile, program, changes, importDeclaration.parent); +} + +// src/services/codefixes/fixUnusedIdentifier.ts +var fixName3 = "unusedIdentifier"; +var fixIdPrefix = "unusedIdentifier_prefix"; +var fixIdDelete = "unusedIdentifier_delete"; +var fixIdDeleteImports = "unusedIdentifier_deleteImports"; +var fixIdInfer = "unusedIdentifier_infer"; +var errorCodes43 = [ + Diagnostics._0_is_declared_but_its_value_is_never_read.code, + Diagnostics._0_is_declared_but_never_used.code, + Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code, + Diagnostics.All_imports_in_import_declaration_are_unused.code, + Diagnostics.All_destructured_elements_are_unused.code, + Diagnostics.All_variables_are_unused.code, + Diagnostics.All_type_parameters_are_unused.code +]; +registerCodeFix({ + errorCodes: errorCodes43, + getCodeActions(context) { + const { errorCode, sourceFile, program, cancellationToken } = context; + const checker = program.getTypeChecker(); + const sourceFiles = program.getSourceFiles(); + const token = getTokenAtPosition(sourceFile, context.span.start); + if (isJSDocTemplateTag(token)) { + return [createDeleteFix(ts_textChanges_exports.ChangeTracker.with(context, (t) => t.delete(sourceFile, token)), Diagnostics.Remove_template_tag)]; + } + if (token.kind === 30 /* LessThanToken */) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => deleteTypeParameters(t, sourceFile, token)); + return [createDeleteFix(changes, Diagnostics.Remove_type_parameters)]; + } + const importDecl = tryGetFullImport(token); + if (importDecl) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => t.delete(sourceFile, importDecl)); + return [createCodeFixAction(fixName3, changes, [Diagnostics.Remove_import_from_0, showModuleSpecifier(importDecl)], fixIdDeleteImports, Diagnostics.Delete_all_unused_imports)]; + } else if (isImport(token)) { + const deletion = ts_textChanges_exports.ChangeTracker.with(context, (t) => tryDeleteDeclaration( + sourceFile, + token, + t, + checker, + sourceFiles, + program, + cancellationToken, + /*isFixAll*/ + false + )); + if (deletion.length) { + return [createCodeFixAction(fixName3, deletion, [Diagnostics.Remove_unused_declaration_for_Colon_0, token.getText(sourceFile)], fixIdDeleteImports, Diagnostics.Delete_all_unused_imports)]; + } + } + if (isObjectBindingPattern(token.parent) || isArrayBindingPattern(token.parent)) { + if (isParameter(token.parent.parent)) { + const elements = token.parent.elements; + const diagnostic = [ + elements.length > 1 ? Diagnostics.Remove_unused_declarations_for_Colon_0 : Diagnostics.Remove_unused_declaration_for_Colon_0, + map(elements, (e) => e.getText(sourceFile)).join(", ") + ]; + return [ + createDeleteFix(ts_textChanges_exports.ChangeTracker.with(context, (t) => deleteDestructuringElements(t, sourceFile, token.parent)), diagnostic) + ]; + } + return [ + createDeleteFix(ts_textChanges_exports.ChangeTracker.with(context, (t) => deleteDestructuring(context, t, sourceFile, token.parent)), Diagnostics.Remove_unused_destructuring_declaration) + ]; + } + if (canDeleteEntireVariableStatement(sourceFile, token)) { + return [ + createDeleteFix(ts_textChanges_exports.ChangeTracker.with(context, (t) => deleteEntireVariableStatement(t, sourceFile, token.parent)), Diagnostics.Remove_variable_statement) + ]; + } + if (isIdentifier(token) && isFunctionDeclaration(token.parent)) { + return [createDeleteFix(ts_textChanges_exports.ChangeTracker.with(context, (t) => deleteFunctionLikeDeclaration(t, sourceFile, token.parent)), [Diagnostics.Remove_unused_declaration_for_Colon_0, token.getText(sourceFile)])]; + } + const result = []; + if (token.kind === 140 /* InferKeyword */) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => changeInferToUnknown(t, sourceFile, token)); + const name = cast(token.parent, isInferTypeNode).typeParameter.name.text; + result.push(createCodeFixAction(fixName3, changes, [Diagnostics.Replace_infer_0_with_unknown, name], fixIdInfer, Diagnostics.Replace_all_unused_infer_with_unknown)); + } else { + const deletion = ts_textChanges_exports.ChangeTracker.with(context, (t) => tryDeleteDeclaration( + sourceFile, + token, + t, + checker, + sourceFiles, + program, + cancellationToken, + /*isFixAll*/ + false + )); + if (deletion.length) { + const name = isComputedPropertyName(token.parent) ? token.parent : token; + result.push(createDeleteFix(deletion, [Diagnostics.Remove_unused_declaration_for_Colon_0, name.getText(sourceFile)])); + } + } + const prefix = ts_textChanges_exports.ChangeTracker.with(context, (t) => tryPrefixDeclaration(t, errorCode, sourceFile, token)); + if (prefix.length) { + result.push(createCodeFixAction(fixName3, prefix, [Diagnostics.Prefix_0_with_an_underscore, token.getText(sourceFile)], fixIdPrefix, Diagnostics.Prefix_all_unused_declarations_with_where_possible)); + } + return result; + }, + fixIds: [fixIdPrefix, fixIdDelete, fixIdDeleteImports, fixIdInfer], + getAllCodeActions: (context) => { + const { sourceFile, program, cancellationToken } = context; + const checker = program.getTypeChecker(); + const sourceFiles = program.getSourceFiles(); + return codeFixAll(context, errorCodes43, (changes, diag2) => { + const token = getTokenAtPosition(sourceFile, diag2.start); + switch (context.fixId) { + case fixIdPrefix: + tryPrefixDeclaration(changes, diag2.code, sourceFile, token); + break; + case fixIdDeleteImports: { + const importDecl = tryGetFullImport(token); + if (importDecl) { + changes.delete(sourceFile, importDecl); + } else if (isImport(token)) { + tryDeleteDeclaration( + sourceFile, + token, + changes, + checker, + sourceFiles, + program, + cancellationToken, + /*isFixAll*/ + true + ); + } + break; + } + case fixIdDelete: { + if (token.kind === 140 /* InferKeyword */ || isImport(token)) { + break; + } else if (isJSDocTemplateTag(token)) { + changes.delete(sourceFile, token); + } else if (token.kind === 30 /* LessThanToken */) { + deleteTypeParameters(changes, sourceFile, token); + } else if (isObjectBindingPattern(token.parent)) { + if (token.parent.parent.initializer) { + break; + } else if (!isParameter(token.parent.parent) || isNotProvidedArguments(token.parent.parent, checker, sourceFiles)) { + changes.delete(sourceFile, token.parent.parent); + } + } else if (isArrayBindingPattern(token.parent.parent) && token.parent.parent.parent.initializer) { + break; + } else if (canDeleteEntireVariableStatement(sourceFile, token)) { + deleteEntireVariableStatement(changes, sourceFile, token.parent); + } else if (isIdentifier(token) && isFunctionDeclaration(token.parent)) { + deleteFunctionLikeDeclaration(changes, sourceFile, token.parent); + } else { + tryDeleteDeclaration( + sourceFile, + token, + changes, + checker, + sourceFiles, + program, + cancellationToken, + /*isFixAll*/ + true + ); + } + break; + } + case fixIdInfer: + if (token.kind === 140 /* InferKeyword */) { + changeInferToUnknown(changes, sourceFile, token); + } + break; + default: + Debug.fail(JSON.stringify(context.fixId)); + } + }); + } +}); +function changeInferToUnknown(changes, sourceFile, token) { + changes.replaceNode(sourceFile, token.parent, factory.createKeywordTypeNode(159 /* UnknownKeyword */)); +} +function createDeleteFix(changes, diag2) { + return createCodeFixAction(fixName3, changes, diag2, fixIdDelete, Diagnostics.Delete_all_unused_declarations); +} +function deleteTypeParameters(changes, sourceFile, token) { + changes.delete(sourceFile, Debug.checkDefined(cast(token.parent, isDeclarationWithTypeParameterChildren).typeParameters, "The type parameter to delete should exist")); +} +function isImport(token) { + return token.kind === 102 /* ImportKeyword */ || token.kind === 80 /* Identifier */ && (token.parent.kind === 277 /* ImportSpecifier */ || token.parent.kind === 274 /* ImportClause */); +} +function tryGetFullImport(token) { + return token.kind === 102 /* ImportKeyword */ ? tryCast(token.parent, isImportDeclaration) : void 0; +} +function canDeleteEntireVariableStatement(sourceFile, token) { + return isVariableDeclarationList(token.parent) && first(token.parent.getChildren(sourceFile)) === token; +} +function deleteEntireVariableStatement(changes, sourceFile, node) { + changes.delete(sourceFile, node.parent.kind === 244 /* VariableStatement */ ? node.parent : node); +} +function deleteDestructuringElements(changes, sourceFile, node) { + forEach(node.elements, (n) => changes.delete(sourceFile, n)); +} +function deleteDestructuring(context, changes, sourceFile, { parent: parent2 }) { + if (isVariableDeclaration(parent2) && parent2.initializer && isCallLikeExpression(parent2.initializer)) { + if (isVariableDeclarationList(parent2.parent) && length(parent2.parent.declarations) > 1) { + const varStatement = parent2.parent.parent; + const pos = varStatement.getStart(sourceFile); + const end = varStatement.end; + changes.delete(sourceFile, parent2); + changes.insertNodeAt(sourceFile, end, parent2.initializer, { + prefix: getNewLineOrDefaultFromHost(context.host, context.formatContext.options) + sourceFile.text.slice(getPrecedingNonSpaceCharacterPosition(sourceFile.text, pos - 1), pos), + suffix: probablyUsesSemicolons(sourceFile) ? ";" : "" + }); + } else { + changes.replaceNode(sourceFile, parent2.parent, parent2.initializer); + } + } else { + changes.delete(sourceFile, parent2); + } +} +function tryPrefixDeclaration(changes, errorCode, sourceFile, token) { + if (errorCode === Diagnostics.Property_0_is_declared_but_its_value_is_never_read.code) return; + if (token.kind === 140 /* InferKeyword */) { + token = cast(token.parent, isInferTypeNode).typeParameter.name; + } + if (isIdentifier(token) && canPrefix(token)) { + changes.replaceNode(sourceFile, token, factory.createIdentifier(`_${token.text}`)); + if (isParameter(token.parent)) { + getJSDocParameterTags(token.parent).forEach((tag) => { + if (isIdentifier(tag.name)) { + changes.replaceNode(sourceFile, tag.name, factory.createIdentifier(`_${tag.name.text}`)); + } + }); + } + } +} +function canPrefix(token) { + switch (token.parent.kind) { + case 170 /* Parameter */: + case 169 /* TypeParameter */: + return true; + case 261 /* VariableDeclaration */: { + const varDecl = token.parent; + switch (varDecl.parent.parent.kind) { + case 251 /* ForOfStatement */: + case 250 /* ForInStatement */: + return true; + } + } + } + return false; +} +function tryDeleteDeclaration(sourceFile, token, changes, checker, sourceFiles, program, cancellationToken, isFixAll) { + tryDeleteDeclarationWorker(token, changes, sourceFile, checker, sourceFiles, program, cancellationToken, isFixAll); + if (isIdentifier(token)) { + ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(token, checker, sourceFile, (ref) => { + if (isPropertyAccessExpression(ref.parent) && ref.parent.name === ref) ref = ref.parent; + if (!isFixAll && mayDeleteExpression(ref)) { + changes.delete(sourceFile, ref.parent.parent); + } + }); + } +} +function tryDeleteDeclarationWorker(token, changes, sourceFile, checker, sourceFiles, program, cancellationToken, isFixAll) { + const { parent: parent2 } = token; + if (isParameter(parent2)) { + tryDeleteParameter(changes, sourceFile, parent2, checker, sourceFiles, program, cancellationToken, isFixAll); + } else if (!(isFixAll && isIdentifier(token) && ts_FindAllReferences_exports.Core.isSymbolReferencedInFile(token, checker, sourceFile))) { + const node = isImportClause(parent2) ? token : isComputedPropertyName(parent2) ? parent2.parent : parent2; + Debug.assert(node !== sourceFile, "should not delete whole source file"); + changes.delete(sourceFile, node); + } +} +function tryDeleteParameter(changes, sourceFile, parameter, checker, sourceFiles, program, cancellationToken, isFixAll = false) { + if (mayDeleteParameter(checker, sourceFile, parameter, sourceFiles, program, cancellationToken, isFixAll)) { + if (parameter.modifiers && parameter.modifiers.length > 0 && (!isIdentifier(parameter.name) || ts_FindAllReferences_exports.Core.isSymbolReferencedInFile(parameter.name, checker, sourceFile))) { + for (const modifier of parameter.modifiers) { + if (isModifier(modifier)) { + changes.deleteModifier(sourceFile, modifier); + } + } + } else if (!parameter.initializer && isNotProvidedArguments(parameter, checker, sourceFiles)) { + changes.delete(sourceFile, parameter); + } + } +} +function isNotProvidedArguments(parameter, checker, sourceFiles) { + const index = parameter.parent.parameters.indexOf(parameter); + return !ts_FindAllReferences_exports.Core.someSignatureUsage(parameter.parent, sourceFiles, checker, (_, call) => !call || call.arguments.length > index); +} +function mayDeleteParameter(checker, sourceFile, parameter, sourceFiles, program, cancellationToken, isFixAll) { + const { parent: parent2 } = parameter; + switch (parent2.kind) { + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + const index = parent2.parameters.indexOf(parameter); + const referent = isMethodDeclaration(parent2) ? parent2.name : parent2; + const entries = ts_FindAllReferences_exports.Core.getReferencedSymbolsForNode(parent2.pos, referent, program, sourceFiles, cancellationToken); + if (entries) { + for (const entry of entries) { + for (const reference of entry.references) { + if (reference.kind === ts_FindAllReferences_exports.EntryKind.Node) { + const isSuperCall2 = isSuperKeyword(reference.node) && isCallExpression(reference.node.parent) && reference.node.parent.arguments.length > index; + const isSuperMethodCall = isPropertyAccessExpression(reference.node.parent) && isSuperKeyword(reference.node.parent.expression) && isCallExpression(reference.node.parent.parent) && reference.node.parent.parent.arguments.length > index; + const isOverriddenMethod = (isMethodDeclaration(reference.node.parent) || isMethodSignature(reference.node.parent)) && reference.node.parent !== parameter.parent && reference.node.parent.parameters.length > index; + if (isSuperCall2 || isSuperMethodCall || isOverriddenMethod) return false; + } + } + } + } + return true; + case 263 /* FunctionDeclaration */: { + if (parent2.name && isCallbackLike(checker, sourceFile, parent2.name)) { + return isLastParameter(parent2, parameter, isFixAll); + } + return true; + } + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return isLastParameter(parent2, parameter, isFixAll); + case 179 /* SetAccessor */: + return false; + case 178 /* GetAccessor */: + return true; + default: + return Debug.failBadSyntaxKind(parent2); + } +} +function isCallbackLike(checker, sourceFile, name) { + return !!ts_FindAllReferences_exports.Core.eachSymbolReferenceInFile(name, checker, sourceFile, (reference) => isIdentifier(reference) && isCallExpression(reference.parent) && reference.parent.arguments.includes(reference)); +} +function isLastParameter(func, parameter, isFixAll) { + const parameters = func.parameters; + const index = parameters.indexOf(parameter); + Debug.assert(index !== -1, "The parameter should already be in the list"); + return isFixAll ? parameters.slice(index + 1).every((p) => isIdentifier(p.name) && !p.symbol.isReferenced) : index === parameters.length - 1; +} +function mayDeleteExpression(node) { + return (isBinaryExpression(node.parent) && node.parent.left === node || (isPostfixUnaryExpression(node.parent) || isPrefixUnaryExpression(node.parent)) && node.parent.operand === node) && isExpressionStatement(node.parent.parent); +} +function deleteFunctionLikeDeclaration(changes, sourceFile, node) { + const declarations = node.symbol.declarations; + if (declarations) { + for (const declaration of declarations) { + changes.delete(sourceFile, declaration); + } + } +} + +// src/services/codefixes/fixUnreachableCode.ts +var fixId34 = "fixUnreachableCode"; +var errorCodes44 = [Diagnostics.Unreachable_code_detected.code]; +registerCodeFix({ + errorCodes: errorCodes44, + getCodeActions(context) { + const syntacticDiagnostics = context.program.getSyntacticDiagnostics(context.sourceFile, context.cancellationToken); + if (syntacticDiagnostics.length) return; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange27(t, context.sourceFile, context.span.start, context.span.length, context.errorCode)); + return [createCodeFixAction(fixId34, changes, Diagnostics.Remove_unreachable_code, fixId34, Diagnostics.Remove_all_unreachable_code)]; + }, + fixIds: [fixId34], + getAllCodeActions: (context) => codeFixAll(context, errorCodes44, (changes, diag2) => doChange27(changes, diag2.file, diag2.start, diag2.length, diag2.code)) +}); +function doChange27(changes, sourceFile, start, length2, errorCode) { + const token = getTokenAtPosition(sourceFile, start); + const statement = findAncestor(token, isStatement); + if (statement.getStart(sourceFile) !== token.getStart(sourceFile)) { + const logData = JSON.stringify({ + statementKind: Debug.formatSyntaxKind(statement.kind), + tokenKind: Debug.formatSyntaxKind(token.kind), + errorCode, + start, + length: length2 + }); + Debug.fail("Token and statement should start at the same point. " + logData); + } + const container = (isBlock(statement.parent) ? statement.parent : statement).parent; + if (!isBlock(statement.parent) || statement === first(statement.parent.statements)) { + switch (container.kind) { + case 246 /* IfStatement */: + if (container.elseStatement) { + if (isBlock(statement.parent)) { + break; + } else { + changes.replaceNode(sourceFile, statement, factory.createBlock(emptyArray)); + } + return; + } + // falls through + case 248 /* WhileStatement */: + case 249 /* ForStatement */: + changes.delete(sourceFile, container); + return; + } + } + if (isBlock(statement.parent)) { + const end = start + length2; + const lastStatement = Debug.checkDefined(lastWhere(sliceAfter(statement.parent.statements, statement), (s) => s.pos < end), "Some statement should be last"); + changes.deleteNodeRange(sourceFile, statement, lastStatement); + } else { + changes.delete(sourceFile, statement); + } +} +function lastWhere(a, pred) { + let last2; + for (const value of a) { + if (!pred(value)) break; + last2 = value; + } + return last2; +} + +// src/services/codefixes/fixUnusedLabel.ts +var fixId35 = "fixUnusedLabel"; +var errorCodes45 = [Diagnostics.Unused_label.code]; +registerCodeFix({ + errorCodes: errorCodes45, + getCodeActions(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange28(t, context.sourceFile, context.span.start)); + return [createCodeFixAction(fixId35, changes, Diagnostics.Remove_unused_label, fixId35, Diagnostics.Remove_all_unused_labels)]; + }, + fixIds: [fixId35], + getAllCodeActions: (context) => codeFixAll(context, errorCodes45, (changes, diag2) => doChange28(changes, diag2.file, diag2.start)) +}); +function doChange28(changes, sourceFile, start) { + const token = getTokenAtPosition(sourceFile, start); + const labeledStatement = cast(token.parent, isLabeledStatement); + const pos = token.getStart(sourceFile); + const statementPos = labeledStatement.statement.getStart(sourceFile); + const end = positionsAreOnSameLine(pos, statementPos, sourceFile) ? statementPos : skipTrivia( + sourceFile.text, + findChildOfKind(labeledStatement, 59 /* ColonToken */, sourceFile).end, + /*stopAfterLineBreak*/ + true + ); + changes.deleteRange(sourceFile, { pos, end }); +} + +// src/services/codefixes/fixJSDocTypes.ts +var fixIdPlain = "fixJSDocTypes_plain"; +var fixIdNullable = "fixJSDocTypes_nullable"; +var errorCodes46 = [ + Diagnostics.JSDoc_types_can_only_be_used_inside_documentation_comments.code, + Diagnostics._0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1.code, + Diagnostics._0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1.code +]; +registerCodeFix({ + errorCodes: errorCodes46, + getCodeActions(context) { + const { sourceFile } = context; + const checker = context.program.getTypeChecker(); + const info = getInfo15(sourceFile, context.span.start, checker); + if (!info) return void 0; + const { typeNode, type } = info; + const original = typeNode.getText(sourceFile); + const actions2 = [fix(type, fixIdPlain, Diagnostics.Change_all_jsdoc_style_types_to_TypeScript)]; + if (typeNode.kind === 315 /* JSDocNullableType */) { + actions2.push(fix(type, fixIdNullable, Diagnostics.Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types)); + } + return actions2; + function fix(type2, fixId56, fixAllDescription) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange29(t, sourceFile, typeNode, type2, checker)); + return createCodeFixAction("jdocTypes", changes, [Diagnostics.Change_0_to_1, original, checker.typeToString(type2)], fixId56, fixAllDescription); + } + }, + fixIds: [fixIdPlain, fixIdNullable], + getAllCodeActions(context) { + const { fixId: fixId56, program, sourceFile } = context; + const checker = program.getTypeChecker(); + return codeFixAll(context, errorCodes46, (changes, err) => { + const info = getInfo15(err.file, err.start, checker); + if (!info) return; + const { typeNode, type } = info; + const fixedType = typeNode.kind === 315 /* JSDocNullableType */ && fixId56 === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type; + doChange29(changes, sourceFile, typeNode, fixedType, checker); + }); + } +}); +function doChange29(changes, sourceFile, oldTypeNode, newType, checker) { + changes.replaceNode(sourceFile, oldTypeNode, checker.typeToTypeNode( + newType, + /*enclosingDeclaration*/ + oldTypeNode, + /*flags*/ + void 0 + )); +} +function getInfo15(sourceFile, pos, checker) { + const decl = findAncestor(getTokenAtPosition(sourceFile, pos), isTypeContainer); + const typeNode = decl && decl.type; + return typeNode && { typeNode, type: getType(checker, typeNode) }; +} +function isTypeContainer(node) { + switch (node.kind) { + case 235 /* AsExpression */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 263 /* FunctionDeclaration */: + case 178 /* GetAccessor */: + case 182 /* IndexSignature */: + case 201 /* MappedType */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 170 /* Parameter */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 179 /* SetAccessor */: + case 266 /* TypeAliasDeclaration */: + case 217 /* TypeAssertionExpression */: + case 261 /* VariableDeclaration */: + return true; + default: + return false; + } +} +function getType(checker, node) { + if (isJSDocNullableType(node)) { + const type = checker.getTypeFromTypeNode(node.type); + if (type === checker.getNeverType() || type === checker.getVoidType()) { + return type; + } + return checker.getUnionType( + append([type, checker.getUndefinedType()], node.postfix ? void 0 : checker.getNullType()) + ); + } + return checker.getTypeFromTypeNode(node); +} + +// src/services/codefixes/fixMissingCallParentheses.ts +var fixId36 = "fixMissingCallParentheses"; +var errorCodes47 = [ + Diagnostics.This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_instead.code +]; +registerCodeFix({ + errorCodes: errorCodes47, + fixIds: [fixId36], + getCodeActions(context) { + const { sourceFile, span } = context; + const callName = getCallName(sourceFile, span.start); + if (!callName) return; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange30(t, context.sourceFile, callName)); + return [createCodeFixAction(fixId36, changes, Diagnostics.Add_missing_call_parentheses, fixId36, Diagnostics.Add_all_missing_call_parentheses)]; + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes47, (changes, diag2) => { + const callName = getCallName(diag2.file, diag2.start); + if (callName) doChange30(changes, diag2.file, callName); + }) +}); +function doChange30(changes, sourceFile, name) { + changes.replaceNodeWithText(sourceFile, name, `${name.text}()`); +} +function getCallName(sourceFile, start) { + const token = getTokenAtPosition(sourceFile, start); + if (isPropertyAccessExpression(token.parent)) { + let current = token.parent; + while (isPropertyAccessExpression(current.parent)) { + current = current.parent; + } + return current.name; + } + if (isIdentifier(token)) { + return token; + } + return void 0; +} + +// src/services/codefixes/fixMissingTypeAnnotationOnExports.ts +var fixId37 = "fixMissingTypeAnnotationOnExports"; +var addAnnotationFix = "add-annotation"; +var addInlineTypeAssertion = "add-type-assertion"; +var extractExpression = "extract-expression"; +var errorCodes48 = [ + Diagnostics.Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations.code, + Diagnostics.Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations.code, + Diagnostics.At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations.code, + Diagnostics.Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations.code, + Diagnostics.Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations.code, + Diagnostics.Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations.code, + Diagnostics.Expression_type_can_t_be_inferred_with_isolatedDeclarations.code, + Diagnostics.Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations.code, + Diagnostics.Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations.code, + Diagnostics.Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedDeclarations.code, + Diagnostics.Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDeclarations.code, + Diagnostics.Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations.code, + Diagnostics.Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations.code, + Diagnostics.Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations.code, + Diagnostics.Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations.code, + Diagnostics.Default_exports_can_t_be_inferred_with_isolatedDeclarations.code, + Diagnostics.Only_const_arrays_can_be_inferred_with_isolatedDeclarations.code, + Diagnostics.Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations_Add_an_explicit_declaration_for_the_properties_assigned_to_this_function.code, + Diagnostics.Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_supported_with_isolatedDeclarations.code, + Diagnostics.Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations.code, + Diagnostics.Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit.code +]; +var canHaveTypeAnnotation = /* @__PURE__ */ new Set([ + 178 /* GetAccessor */, + 175 /* MethodDeclaration */, + 173 /* PropertyDeclaration */, + 263 /* FunctionDeclaration */, + 219 /* FunctionExpression */, + 220 /* ArrowFunction */, + 261 /* VariableDeclaration */, + 170 /* Parameter */, + 278 /* ExportAssignment */, + 264 /* ClassDeclaration */, + 207 /* ObjectBindingPattern */, + 208 /* ArrayBindingPattern */ +]); +var declarationEmitNodeBuilderFlags2 = 1024 /* MultilineObjectLiterals */ | 2048 /* WriteClassExpressionAsTypeLiteral */ | 4096 /* UseTypeOfFunction */ | 8 /* UseStructuralFallback */ | 524288 /* AllowEmptyTuple */ | 4 /* GenerateNamesForShadowedTypeParams */ | 1 /* NoTruncation */; +var declarationEmitInternalNodeBuilderFlags2 = 1 /* WriteComputedProps */; +registerCodeFix({ + errorCodes: errorCodes48, + fixIds: [fixId37], + getCodeActions(context) { + const fixes = []; + addCodeAction(addAnnotationFix, fixes, context, 0 /* Full */, (f) => f.addTypeAnnotation(context.span)); + addCodeAction(addAnnotationFix, fixes, context, 1 /* Relative */, (f) => f.addTypeAnnotation(context.span)); + addCodeAction(addAnnotationFix, fixes, context, 2 /* Widened */, (f) => f.addTypeAnnotation(context.span)); + addCodeAction(addInlineTypeAssertion, fixes, context, 0 /* Full */, (f) => f.addInlineAssertion(context.span)); + addCodeAction(addInlineTypeAssertion, fixes, context, 1 /* Relative */, (f) => f.addInlineAssertion(context.span)); + addCodeAction(addInlineTypeAssertion, fixes, context, 2 /* Widened */, (f) => f.addInlineAssertion(context.span)); + addCodeAction(extractExpression, fixes, context, 0 /* Full */, (f) => f.extractAsVariable(context.span)); + return fixes; + }, + getAllCodeActions: (context) => { + const changes = withContext(context, 0 /* Full */, (f) => { + eachDiagnostic(context, errorCodes48, (diag2) => { + f.addTypeAnnotation(diag2); + }); + }); + return createCombinedCodeActions(changes.textChanges); + } +}); +function addCodeAction(fixName8, fixes, context, typePrintMode, cb) { + const changes = withContext(context, typePrintMode, cb); + if (changes.result && changes.textChanges.length) { + fixes.push(createCodeFixAction( + fixName8, + changes.textChanges, + changes.result, + fixId37, + Diagnostics.Add_all_missing_type_annotations + )); + } +} +function withContext(context, typePrintMode, cb) { + const emptyInferenceResult = { typeNode: void 0, mutatedTarget: false }; + const changeTracker = ts_textChanges_exports.ChangeTracker.fromContext(context); + const sourceFile = context.sourceFile; + const program = context.program; + const typeChecker = program.getTypeChecker(); + const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); + const importAdder = createImportAdder(context.sourceFile, context.program, context.preferences, context.host); + const fixedNodes = /* @__PURE__ */ new Set(); + const expandoPropertiesAdded = /* @__PURE__ */ new Set(); + const typePrinter = createPrinter({ + preserveSourceNewlines: false + }); + const result = cb({ addTypeAnnotation, addInlineAssertion, extractAsVariable }); + importAdder.writeFixes(changeTracker); + return { + result, + textChanges: changeTracker.getChanges() + }; + function addTypeAnnotation(span) { + context.cancellationToken.throwIfCancellationRequested(); + const nodeWithDiag = getTokenAtPosition(sourceFile, span.start); + const expandoFunction = findExpandoFunction(nodeWithDiag); + if (expandoFunction) { + if (isFunctionDeclaration(expandoFunction)) { + return createNamespaceForExpandoProperties(expandoFunction); + } + return fixIsolatedDeclarationError(expandoFunction); + } + const nodeMissingType = findAncestorWithMissingType(nodeWithDiag); + if (nodeMissingType) { + return fixIsolatedDeclarationError(nodeMissingType); + } + return void 0; + } + function createNamespaceForExpandoProperties(expandoFunc) { + var _a; + if (expandoPropertiesAdded == null ? void 0 : expandoPropertiesAdded.has(expandoFunc)) return void 0; + expandoPropertiesAdded == null ? void 0 : expandoPropertiesAdded.add(expandoFunc); + const type = typeChecker.getTypeAtLocation(expandoFunc); + const elements = typeChecker.getPropertiesOfType(type); + if (!expandoFunc.name || elements.length === 0) return void 0; + const newProperties = []; + for (const symbol of elements) { + if (!isIdentifierText(symbol.name, getEmitScriptTarget(program.getCompilerOptions()))) continue; + if (symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration)) continue; + newProperties.push(factory.createVariableStatement( + [factory.createModifier(95 /* ExportKeyword */)], + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + symbol.name, + /*exclamationToken*/ + void 0, + typeToTypeNode2(typeChecker.getTypeOfSymbol(symbol), expandoFunc), + /*initializer*/ + void 0 + )] + ) + )); + } + if (newProperties.length === 0) return void 0; + const modifiers = []; + if ((_a = expandoFunc.modifiers) == null ? void 0 : _a.some((modifier) => modifier.kind === 95 /* ExportKeyword */)) { + modifiers.push(factory.createModifier(95 /* ExportKeyword */)); + } + modifiers.push(factory.createModifier(138 /* DeclareKeyword */)); + const namespace = factory.createModuleDeclaration( + modifiers, + expandoFunc.name, + factory.createModuleBlock(newProperties), + /*flags*/ + 32 /* Namespace */ | 128 /* ExportContext */ | 33554432 /* Ambient */ | 101441536 /* ContextFlags */ + ); + changeTracker.insertNodeAfter(sourceFile, expandoFunc, namespace); + return [Diagnostics.Annotate_types_of_properties_expando_function_in_a_namespace]; + } + function needsParenthesizedExpressionForAssertion(node) { + return !isEntityNameExpression(node) && !isCallExpression(node) && !isObjectLiteralExpression(node) && !isArrayLiteralExpression(node); + } + function createAsExpression(node, type) { + if (needsParenthesizedExpressionForAssertion(node)) { + node = factory.createParenthesizedExpression(node); + } + return factory.createAsExpression(node, type); + } + function createSatisfiesAsExpression(node, type) { + if (needsParenthesizedExpressionForAssertion(node)) { + node = factory.createParenthesizedExpression(node); + } + return factory.createAsExpression(factory.createSatisfiesExpression(node, getSynthesizedDeepClone(type)), type); + } + function addInlineAssertion(span) { + context.cancellationToken.throwIfCancellationRequested(); + const nodeWithDiag = getTokenAtPosition(sourceFile, span.start); + const expandoFunction = findExpandoFunction(nodeWithDiag); + if (expandoFunction) return; + const targetNode = findBestFittingNode(nodeWithDiag, span); + if (!targetNode || isValueSignatureDeclaration(targetNode) || isValueSignatureDeclaration(targetNode.parent)) return; + const isExpressionTarget = isExpression(targetNode); + const isShorthandPropertyAssignmentTarget = isShorthandPropertyAssignment(targetNode); + if (!isShorthandPropertyAssignmentTarget && isDeclaration(targetNode)) { + return void 0; + } + if (findAncestor(targetNode, isBindingPattern)) { + return void 0; + } + if (findAncestor(targetNode, isEnumMember)) { + return void 0; + } + if (isExpressionTarget && (findAncestor(targetNode, isHeritageClause) || findAncestor(targetNode, isTypeNode))) { + return void 0; + } + if (isSpreadElement(targetNode)) { + return void 0; + } + const variableDeclaration = findAncestor(targetNode, isVariableDeclaration); + const type = variableDeclaration && typeChecker.getTypeAtLocation(variableDeclaration); + if (type && type.flags & 8192 /* UniqueESSymbol */) { + return void 0; + } + if (!(isExpressionTarget || isShorthandPropertyAssignmentTarget)) return void 0; + const { typeNode, mutatedTarget } = inferType(targetNode, type); + if (!typeNode || mutatedTarget) return void 0; + if (isShorthandPropertyAssignmentTarget) { + changeTracker.insertNodeAt( + sourceFile, + targetNode.end, + createAsExpression( + getSynthesizedDeepClone(targetNode.name), + typeNode + ), + { + prefix: ": " + } + ); + } else if (isExpressionTarget) { + changeTracker.replaceNode( + sourceFile, + targetNode, + createSatisfiesAsExpression( + getSynthesizedDeepClone(targetNode), + typeNode + ) + ); + } else { + Debug.assertNever(targetNode); + } + return [Diagnostics.Add_satisfies_and_an_inline_type_assertion_with_0, typeToStringForDiag(typeNode)]; + } + function extractAsVariable(span) { + context.cancellationToken.throwIfCancellationRequested(); + const nodeWithDiag = getTokenAtPosition(sourceFile, span.start); + const targetNode = findBestFittingNode(nodeWithDiag, span); + if (!targetNode || isValueSignatureDeclaration(targetNode) || isValueSignatureDeclaration(targetNode.parent)) return; + const isExpressionTarget = isExpression(targetNode); + if (!isExpressionTarget) return; + if (isArrayLiteralExpression(targetNode)) { + changeTracker.replaceNode( + sourceFile, + targetNode, + createAsExpression(targetNode, factory.createTypeReferenceNode("const")) + ); + return [Diagnostics.Mark_array_literal_as_const]; + } + const parentPropertyAssignment = findAncestor(targetNode, isPropertyAssignment); + if (parentPropertyAssignment) { + if (parentPropertyAssignment === targetNode.parent && isEntityNameExpression(targetNode)) return; + const tempName = factory.createUniqueName( + getIdentifierForNode(targetNode, sourceFile, typeChecker, sourceFile), + 16 /* Optimistic */ + ); + let replacementTarget = targetNode; + let initializationNode = targetNode; + if (isSpreadElement(replacementTarget)) { + replacementTarget = walkUpParenthesizedExpressions(replacementTarget.parent); + if (isConstAssertion2(replacementTarget.parent)) { + initializationNode = replacementTarget = replacementTarget.parent; + } else { + initializationNode = createAsExpression( + replacementTarget, + factory.createTypeReferenceNode("const") + ); + } + } + if (isEntityNameExpression(replacementTarget)) return void 0; + const variableDefinition = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + tempName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializationNode + ) + ], 2 /* Const */) + ); + const statement = findAncestor(targetNode, isStatement); + changeTracker.insertNodeBefore(sourceFile, statement, variableDefinition); + changeTracker.replaceNode( + sourceFile, + replacementTarget, + factory.createAsExpression( + factory.cloneNode(tempName), + factory.createTypeQueryNode( + factory.cloneNode(tempName) + ) + ) + ); + return [Diagnostics.Extract_to_variable_and_replace_with_0_as_typeof_0, typeToStringForDiag(tempName)]; + } + } + function findExpandoFunction(node) { + const expandoDeclaration = findAncestor(node, (n) => isStatement(n) ? "quit" : isExpandoPropertyDeclaration(n)); + if (expandoDeclaration && isExpandoPropertyDeclaration(expandoDeclaration)) { + let assignmentTarget = expandoDeclaration; + if (isBinaryExpression(assignmentTarget)) { + assignmentTarget = assignmentTarget.left; + if (!isExpandoPropertyDeclaration(assignmentTarget)) return void 0; + } + const targetType = typeChecker.getTypeAtLocation(assignmentTarget.expression); + if (!targetType) return; + const properties = typeChecker.getPropertiesOfType(targetType); + if (some(properties, (p) => p.valueDeclaration === expandoDeclaration || p.valueDeclaration === expandoDeclaration.parent)) { + const fn = targetType.symbol.valueDeclaration; + if (fn) { + if (isFunctionExpressionOrArrowFunction(fn) && isVariableDeclaration(fn.parent)) { + return fn.parent; + } + if (isFunctionDeclaration(fn)) { + return fn; + } + } + } + } + return void 0; + } + function fixIsolatedDeclarationError(node) { + if (fixedNodes == null ? void 0 : fixedNodes.has(node)) return void 0; + fixedNodes == null ? void 0 : fixedNodes.add(node); + switch (node.kind) { + case 170 /* Parameter */: + case 173 /* PropertyDeclaration */: + case 261 /* VariableDeclaration */: + return addTypeToVariableLike(node); + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + return addTypeToSignatureDeclaration(node, sourceFile); + case 278 /* ExportAssignment */: + return transformExportAssignment(node); + case 264 /* ClassDeclaration */: + return transformExtendsClauseWithExpression(node); + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + return transformDestructuringPatterns(node); + default: + throw new Error(`Cannot find a fix for the given node ${node.kind}`); + } + } + function addTypeToSignatureDeclaration(func, sourceFile2) { + if (func.type) { + return; + } + const { typeNode } = inferType(func); + if (typeNode) { + changeTracker.tryInsertTypeAnnotation( + sourceFile2, + func, + typeNode + ); + return [Diagnostics.Add_return_type_0, typeToStringForDiag(typeNode)]; + } + } + function transformExportAssignment(defaultExport) { + if (defaultExport.isExportEquals) { + return; + } + const { typeNode } = inferType(defaultExport.expression); + if (!typeNode) return void 0; + const defaultIdentifier = factory.createUniqueName("_default"); + changeTracker.replaceNodeWithNodes(sourceFile, defaultExport, [ + factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + defaultIdentifier, + /*exclamationToken*/ + void 0, + typeNode, + defaultExport.expression + )], + 2 /* Const */ + ) + ), + factory.updateExportAssignment(defaultExport, defaultExport == null ? void 0 : defaultExport.modifiers, defaultIdentifier) + ]); + return [ + Diagnostics.Extract_default_export_to_variable + ]; + } + function transformExtendsClauseWithExpression(classDecl) { + var _a, _b; + const extendsClause = (_a = classDecl.heritageClauses) == null ? void 0 : _a.find((p) => p.token === 96 /* ExtendsKeyword */); + const heritageExpression = extendsClause == null ? void 0 : extendsClause.types[0]; + if (!heritageExpression) { + return void 0; + } + const { typeNode: heritageTypeNode } = inferType(heritageExpression.expression); + if (!heritageTypeNode) { + return void 0; + } + const baseClassName = factory.createUniqueName( + classDecl.name ? classDecl.name.text + "Base" : "Anonymous", + 16 /* Optimistic */ + ); + const heritageVariable = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + baseClassName, + /*exclamationToken*/ + void 0, + heritageTypeNode, + heritageExpression.expression + )], + 2 /* Const */ + ) + ); + changeTracker.insertNodeBefore(sourceFile, classDecl, heritageVariable); + const trailingComments = getTrailingCommentRanges(sourceFile.text, heritageExpression.end); + const realEnd = ((_b = trailingComments == null ? void 0 : trailingComments[trailingComments.length - 1]) == null ? void 0 : _b.end) ?? heritageExpression.end; + changeTracker.replaceRange( + sourceFile, + { + pos: heritageExpression.getFullStart(), + end: realEnd + }, + baseClassName, + { + prefix: " " + } + ); + return [Diagnostics.Extract_base_class_to_variable]; + } + let ExpressionType; + ((ExpressionType2) => { + ExpressionType2[ExpressionType2["Text"] = 0] = "Text"; + ExpressionType2[ExpressionType2["Computed"] = 1] = "Computed"; + ExpressionType2[ExpressionType2["ArrayAccess"] = 2] = "ArrayAccess"; + ExpressionType2[ExpressionType2["Identifier"] = 3] = "Identifier"; + })(ExpressionType || (ExpressionType = {})); + function transformDestructuringPatterns(bindingPattern) { + var _a; + const enclosingVariableDeclaration = bindingPattern.parent; + const enclosingVarStmt = bindingPattern.parent.parent.parent; + if (!enclosingVariableDeclaration.initializer) return void 0; + let baseExpr; + const newNodes = []; + if (!isIdentifier(enclosingVariableDeclaration.initializer)) { + const tempHolderForReturn = factory.createUniqueName("dest", 16 /* Optimistic */); + baseExpr = { expression: { kind: 3 /* Identifier */, identifier: tempHolderForReturn } }; + newNodes.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + tempHolderForReturn, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + enclosingVariableDeclaration.initializer + )], + 2 /* Const */ + ) + )); + } else { + baseExpr = { expression: { kind: 3 /* Identifier */, identifier: enclosingVariableDeclaration.initializer } }; + } + const bindingElements = []; + if (isArrayBindingPattern(bindingPattern)) { + addArrayBindingPatterns(bindingPattern, bindingElements, baseExpr); + } else { + addObjectBindingPatterns(bindingPattern, bindingElements, baseExpr); + } + const expressionToVar = /* @__PURE__ */ new Map(); + for (const bindingElement of bindingElements) { + if (bindingElement.element.propertyName && isComputedPropertyName(bindingElement.element.propertyName)) { + const computedExpression = bindingElement.element.propertyName.expression; + const identifierForComputedProperty = factory.getGeneratedNameForNode(computedExpression); + const variableDecl = factory.createVariableDeclaration( + identifierForComputedProperty, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + computedExpression + ); + const variableList = factory.createVariableDeclarationList([variableDecl], 2 /* Const */); + const variableStatement = factory.createVariableStatement( + /*modifiers*/ + void 0, + variableList + ); + newNodes.push(variableStatement); + expressionToVar.set(computedExpression, identifierForComputedProperty); + } + const name = bindingElement.element.name; + if (isArrayBindingPattern(name)) { + addArrayBindingPatterns(name, bindingElements, bindingElement); + } else if (isObjectBindingPattern(name)) { + addObjectBindingPatterns(name, bindingElements, bindingElement); + } else { + const { typeNode } = inferType(name); + let variableInitializer = createChainedExpression(bindingElement, expressionToVar); + if (bindingElement.element.initializer) { + const propertyName = (_a = bindingElement.element) == null ? void 0 : _a.propertyName; + const tempName = factory.createUniqueName( + propertyName && isIdentifier(propertyName) ? propertyName.text : "temp", + 16 /* Optimistic */ + ); + newNodes.push(factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + tempName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + variableInitializer + )], + 2 /* Const */ + ) + )); + variableInitializer = factory.createConditionalExpression( + factory.createBinaryExpression( + tempName, + factory.createToken(37 /* EqualsEqualsEqualsToken */), + factory.createIdentifier("undefined") + ), + factory.createToken(58 /* QuestionToken */), + bindingElement.element.initializer, + factory.createToken(59 /* ColonToken */), + variableInitializer + ); + } + const exportModifier = hasSyntacticModifier(enclosingVarStmt, 32 /* Export */) ? [factory.createToken(95 /* ExportKeyword */)] : void 0; + newNodes.push(factory.createVariableStatement( + exportModifier, + factory.createVariableDeclarationList( + [factory.createVariableDeclaration( + name, + /*exclamationToken*/ + void 0, + typeNode, + variableInitializer + )], + 2 /* Const */ + ) + )); + } + } + if (enclosingVarStmt.declarationList.declarations.length > 1) { + newNodes.push(factory.updateVariableStatement( + enclosingVarStmt, + enclosingVarStmt.modifiers, + factory.updateVariableDeclarationList( + enclosingVarStmt.declarationList, + enclosingVarStmt.declarationList.declarations.filter((node) => node !== bindingPattern.parent) + ) + )); + } + changeTracker.replaceNodeWithNodes(sourceFile, enclosingVarStmt, newNodes); + return [ + Diagnostics.Extract_binding_expressions_to_variable + ]; + } + function addArrayBindingPatterns(bindingPattern, bindingElements, parent2) { + for (let i = 0; i < bindingPattern.elements.length; ++i) { + const element = bindingPattern.elements[i]; + if (isOmittedExpression(element)) { + continue; + } + bindingElements.push({ + element, + parent: parent2, + expression: { kind: 2 /* ArrayAccess */, arrayIndex: i } + }); + } + } + function addObjectBindingPatterns(bindingPattern, bindingElements, parent2) { + for (const bindingElement of bindingPattern.elements) { + let name; + if (bindingElement.propertyName) { + if (isComputedPropertyName(bindingElement.propertyName)) { + bindingElements.push({ + element: bindingElement, + parent: parent2, + expression: { kind: 1 /* Computed */, computed: bindingElement.propertyName.expression } + }); + continue; + } else { + name = bindingElement.propertyName.text; + } + } else { + name = bindingElement.name.text; + } + bindingElements.push({ + element: bindingElement, + parent: parent2, + expression: { kind: 0 /* Text */, text: name } + }); + } + } + function createChainedExpression(expression, expressionToVar) { + const reverseTraverse = [expression]; + while (expression.parent) { + expression = expression.parent; + reverseTraverse.push(expression); + } + let chainedExpression = reverseTraverse[reverseTraverse.length - 1].expression.identifier; + for (let i = reverseTraverse.length - 2; i >= 0; --i) { + const nextSubExpr = reverseTraverse[i].expression; + if (nextSubExpr.kind === 0 /* Text */) { + chainedExpression = factory.createPropertyAccessChain( + chainedExpression, + /*questionDotToken*/ + void 0, + factory.createIdentifier(nextSubExpr.text) + ); + } else if (nextSubExpr.kind === 1 /* Computed */) { + chainedExpression = factory.createElementAccessExpression( + chainedExpression, + expressionToVar.get(nextSubExpr.computed) + ); + } else if (nextSubExpr.kind === 2 /* ArrayAccess */) { + chainedExpression = factory.createElementAccessExpression( + chainedExpression, + nextSubExpr.arrayIndex + ); + } + } + return chainedExpression; + } + function inferType(node, variableType) { + if (typePrintMode === 1 /* Relative */) { + return relativeType(node); + } + let type; + if (isValueSignatureDeclaration(node)) { + const signature = typeChecker.getSignatureFromDeclaration(node); + if (signature) { + const typePredicate = typeChecker.getTypePredicateOfSignature(signature); + if (typePredicate) { + if (!typePredicate.type) { + return emptyInferenceResult; + } + return { + typeNode: typePredicateToTypeNode(typePredicate, findAncestor(node, isDeclaration) ?? sourceFile, getFlags(typePredicate.type)), + mutatedTarget: false + }; + } + type = typeChecker.getReturnTypeOfSignature(signature); + } + } else { + type = typeChecker.getTypeAtLocation(node); + } + if (!type) { + return emptyInferenceResult; + } + if (typePrintMode === 2 /* Widened */) { + if (variableType) { + type = variableType; + } + const widenedType = typeChecker.getWidenedLiteralType(type); + if (typeChecker.isTypeAssignableTo(widenedType, type)) { + return emptyInferenceResult; + } + type = widenedType; + } + const enclosingDeclaration = findAncestor(node, isDeclaration) ?? sourceFile; + if (isParameter(node) && typeChecker.requiresAddingImplicitUndefined(node, enclosingDeclaration)) { + type = typeChecker.getUnionType([typeChecker.getUndefinedType(), type], 0 /* None */); + } + return { + typeNode: typeToTypeNode2(type, enclosingDeclaration, getFlags(type)), + mutatedTarget: false + }; + function getFlags(type2) { + return (isVariableDeclaration(node) || isPropertyDeclaration(node) && hasSyntacticModifier(node, 256 /* Static */ | 8 /* Readonly */)) && type2.flags & 8192 /* UniqueESSymbol */ ? 1048576 /* AllowUniqueESSymbolType */ : 0 /* None */; + } + } + function createTypeOfFromEntityNameExpression(node) { + return factory.createTypeQueryNode(getSynthesizedDeepClone(node)); + } + function typeFromArraySpreadElements(node, name = "temp") { + const isConstContext = !!findAncestor(node, isConstAssertion2); + if (!isConstContext) return emptyInferenceResult; + return typeFromSpreads( + node, + name, + isConstContext, + (n) => n.elements, + isSpreadElement, + factory.createSpreadElement, + (props) => factory.createArrayLiteralExpression( + props, + /*multiLine*/ + true + ), + (types) => factory.createTupleTypeNode(types.map(factory.createRestTypeNode)) + ); + } + function typeFromObjectSpreadAssignment(node, name = "temp") { + const isConstContext = !!findAncestor(node, isConstAssertion2); + return typeFromSpreads( + node, + name, + isConstContext, + (n) => n.properties, + isSpreadAssignment, + factory.createSpreadAssignment, + (props) => factory.createObjectLiteralExpression( + props, + /*multiLine*/ + true + ), + factory.createIntersectionTypeNode + ); + } + function typeFromSpreads(node, name, isConstContext, getChildren, isSpread, createSpread, makeNodeOfKind, finalType) { + const intersectionTypes = []; + const newSpreads = []; + let currentVariableProperties; + const statement = findAncestor(node, isStatement); + for (const prop of getChildren(node)) { + if (isSpread(prop)) { + finalizesVariablePart(); + if (isEntityNameExpression(prop.expression)) { + intersectionTypes.push(createTypeOfFromEntityNameExpression(prop.expression)); + newSpreads.push(prop); + } else { + makeVariable(prop.expression); + } + } else { + (currentVariableProperties ?? (currentVariableProperties = [])).push(prop); + } + } + if (newSpreads.length === 0) { + return emptyInferenceResult; + } + finalizesVariablePart(); + changeTracker.replaceNode(sourceFile, node, makeNodeOfKind(newSpreads)); + return { + typeNode: finalType(intersectionTypes), + mutatedTarget: true + }; + function makeVariable(expression) { + const tempName = factory.createUniqueName( + name + "_Part" + (newSpreads.length + 1), + 16 /* Optimistic */ + ); + const initializer = !isConstContext ? expression : factory.createAsExpression( + expression, + factory.createTypeReferenceNode("const") + ); + const variableDefinition = factory.createVariableStatement( + /*modifiers*/ + void 0, + factory.createVariableDeclarationList([ + factory.createVariableDeclaration( + tempName, + /*exclamationToken*/ + void 0, + /*type*/ + void 0, + initializer + ) + ], 2 /* Const */) + ); + changeTracker.insertNodeBefore(sourceFile, statement, variableDefinition); + intersectionTypes.push(createTypeOfFromEntityNameExpression(tempName)); + newSpreads.push(createSpread(tempName)); + } + function finalizesVariablePart() { + if (currentVariableProperties) { + makeVariable(makeNodeOfKind( + currentVariableProperties + )); + currentVariableProperties = void 0; + } + } + } + function isConstAssertion2(location) { + return isAssertionExpression(location) && isConstTypeReference(location.type); + } + function relativeType(node) { + if (isParameter(node)) { + return emptyInferenceResult; + } + if (isShorthandPropertyAssignment(node)) { + return { + typeNode: createTypeOfFromEntityNameExpression(node.name), + mutatedTarget: false + }; + } + if (isEntityNameExpression(node)) { + return { + typeNode: createTypeOfFromEntityNameExpression(node), + mutatedTarget: false + }; + } + if (isConstAssertion2(node)) { + return relativeType(node.expression); + } + if (isArrayLiteralExpression(node)) { + const variableDecl = findAncestor(node, isVariableDeclaration); + const partName = variableDecl && isIdentifier(variableDecl.name) ? variableDecl.name.text : void 0; + return typeFromArraySpreadElements(node, partName); + } + if (isObjectLiteralExpression(node)) { + const variableDecl = findAncestor(node, isVariableDeclaration); + const partName = variableDecl && isIdentifier(variableDecl.name) ? variableDecl.name.text : void 0; + return typeFromObjectSpreadAssignment(node, partName); + } + if (isVariableDeclaration(node) && node.initializer) { + return relativeType(node.initializer); + } + if (isConditionalExpression(node)) { + const { typeNode: trueType, mutatedTarget: mTrue } = relativeType(node.whenTrue); + if (!trueType) return emptyInferenceResult; + const { typeNode: falseType, mutatedTarget: mFalse } = relativeType(node.whenFalse); + if (!falseType) return emptyInferenceResult; + return { + typeNode: factory.createUnionTypeNode([trueType, falseType]), + mutatedTarget: mTrue || mFalse + }; + } + return emptyInferenceResult; + } + function typeToTypeNode2(type, enclosingDeclaration, flags = 0 /* None */) { + let isTruncated = false; + const minimizedTypeNode = typeToMinimizedReferenceType(typeChecker, type, enclosingDeclaration, declarationEmitNodeBuilderFlags2 | flags, declarationEmitInternalNodeBuilderFlags2, { + moduleResolverHost: program, + trackSymbol() { + return true; + }, + reportTruncationError() { + isTruncated = true; + } + }); + if (!minimizedTypeNode) { + return void 0; + } + const result2 = typeNodeToAutoImportableTypeNode(minimizedTypeNode, importAdder, scriptTarget); + return isTruncated ? factory.createKeywordTypeNode(133 /* AnyKeyword */) : result2; + } + function typePredicateToTypeNode(typePredicate, enclosingDeclaration, flags = 0 /* None */) { + let isTruncated = false; + const result2 = typePredicateToAutoImportableTypeNode(typeChecker, importAdder, typePredicate, enclosingDeclaration, scriptTarget, declarationEmitNodeBuilderFlags2 | flags, declarationEmitInternalNodeBuilderFlags2, { + moduleResolverHost: program, + trackSymbol() { + return true; + }, + reportTruncationError() { + isTruncated = true; + } + }); + return isTruncated ? factory.createKeywordTypeNode(133 /* AnyKeyword */) : result2; + } + function addTypeToVariableLike(decl) { + const { typeNode } = inferType(decl); + if (typeNode) { + if (decl.type) { + changeTracker.replaceNode(getSourceFileOfNode(decl), decl.type, typeNode); + } else { + changeTracker.tryInsertTypeAnnotation(getSourceFileOfNode(decl), decl, typeNode); + } + return [Diagnostics.Add_annotation_of_type_0, typeToStringForDiag(typeNode)]; + } + } + function typeToStringForDiag(node) { + setEmitFlags(node, 1 /* SingleLine */); + const result2 = typePrinter.printNode(4 /* Unspecified */, node, sourceFile); + if (result2.length > defaultMaximumTruncationLength) { + return result2.substring(0, defaultMaximumTruncationLength - "...".length) + "..."; + } + setEmitFlags(node, 0 /* None */); + return result2; + } + function findAncestorWithMissingType(node) { + return findAncestor(node, (n) => { + return canHaveTypeAnnotation.has(n.kind) && (!isObjectBindingPattern(n) && !isArrayBindingPattern(n) || isVariableDeclaration(n.parent)); + }); + } + function findBestFittingNode(node, span) { + while (node && node.end < span.start + span.length) { + node = node.parent; + } + while (node.parent.pos === node.pos && node.parent.end === node.end) { + node = node.parent; + } + if (isIdentifier(node) && hasInitializer(node.parent) && node.parent.initializer) { + return node.parent.initializer; + } + return node; + } +} + +// src/services/codefixes/fixAwaitInSyncFunction.ts +var fixId38 = "fixAwaitInSyncFunction"; +var errorCodes49 = [ + Diagnostics.await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code, + Diagnostics.await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code, + Diagnostics.for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules.code, + Diagnostics.Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function.code +]; +registerCodeFix({ + errorCodes: errorCodes49, + getCodeActions(context) { + const { sourceFile, span } = context; + const nodes = getNodes3(sourceFile, span.start); + if (!nodes) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange31(t, sourceFile, nodes)); + return [createCodeFixAction(fixId38, changes, Diagnostics.Add_async_modifier_to_containing_function, fixId38, Diagnostics.Add_all_missing_async_modifiers)]; + }, + fixIds: [fixId38], + getAllCodeActions: function getAllCodeActionsToFixAwaitInSyncFunction(context) { + const seen = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes49, (changes, diag2) => { + const nodes = getNodes3(diag2.file, diag2.start); + if (!nodes || !addToSeen(seen, getNodeId(nodes.insertBefore))) return; + doChange31(changes, context.sourceFile, nodes); + }); + } +}); +function getReturnType(expr) { + if (expr.type) { + return expr.type; + } + if (isVariableDeclaration(expr.parent) && expr.parent.type && isFunctionTypeNode(expr.parent.type)) { + return expr.parent.type.type; + } +} +function getNodes3(sourceFile, start) { + const token = getTokenAtPosition(sourceFile, start); + const containingFunction = getContainingFunction(token); + if (!containingFunction) { + return; + } + let insertBefore; + switch (containingFunction.kind) { + case 175 /* MethodDeclaration */: + insertBefore = containingFunction.name; + break; + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + insertBefore = findChildOfKind(containingFunction, 100 /* FunctionKeyword */, sourceFile); + break; + case 220 /* ArrowFunction */: + const kind = containingFunction.typeParameters ? 30 /* LessThanToken */ : 21 /* OpenParenToken */; + insertBefore = findChildOfKind(containingFunction, kind, sourceFile) || first(containingFunction.parameters); + break; + default: + return; + } + return insertBefore && { + insertBefore, + returnType: getReturnType(containingFunction) + }; +} +function doChange31(changes, sourceFile, { insertBefore, returnType }) { + if (returnType) { + const entityName = getEntityNameFromTypeNode(returnType); + if (!entityName || entityName.kind !== 80 /* Identifier */ || entityName.text !== "Promise") { + changes.replaceNode(sourceFile, returnType, factory.createTypeReferenceNode("Promise", factory.createNodeArray([returnType]))); + } + } + changes.insertModifierBefore(sourceFile, 134 /* AsyncKeyword */, insertBefore); +} + +// src/services/codefixes/fixPropertyOverrideAccessor.ts +var errorCodes50 = [ + Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property.code, + Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor.code +]; +var fixId39 = "fixPropertyOverrideAccessor"; +registerCodeFix({ + errorCodes: errorCodes50, + getCodeActions(context) { + const edits = doChange32(context.sourceFile, context.span.start, context.span.length, context.errorCode, context); + if (edits) { + return [createCodeFixAction(fixId39, edits, Diagnostics.Generate_get_and_set_accessors, fixId39, Diagnostics.Generate_get_and_set_accessors_for_all_overriding_properties)]; + } + }, + fixIds: [fixId39], + getAllCodeActions: (context) => codeFixAll(context, errorCodes50, (changes, diag2) => { + const edits = doChange32(diag2.file, diag2.start, diag2.length, diag2.code, context); + if (edits) { + for (const edit of edits) { + changes.pushRaw(context.sourceFile, edit); + } + } + }) +}); +function doChange32(file, start, length2, code, context) { + let startPosition; + let endPosition; + if (code === Diagnostics._0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property.code) { + startPosition = start; + endPosition = start + length2; + } else if (code === Diagnostics._0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor.code) { + const checker = context.program.getTypeChecker(); + const node = getTokenAtPosition(file, start).parent; + if (isComputedPropertyName(node)) { + return; + } + Debug.assert(isAccessor(node), "error span of fixPropertyOverrideAccessor should only be on an accessor"); + const containingClass = node.parent; + Debug.assert(isClassLike(containingClass), "erroneous accessors should only be inside classes"); + const baseTypeNode = getEffectiveBaseTypeNode(containingClass); + if (!baseTypeNode) return; + const expression = skipParentheses(baseTypeNode.expression); + const base = isClassExpression(expression) ? expression.symbol : checker.getSymbolAtLocation(expression); + if (!base) return; + const baseType = checker.getDeclaredTypeOfSymbol(base); + const baseProp = checker.getPropertyOfType(baseType, unescapeLeadingUnderscores(getTextOfPropertyName(node.name))); + if (!baseProp || !baseProp.valueDeclaration) return; + startPosition = baseProp.valueDeclaration.pos; + endPosition = baseProp.valueDeclaration.end; + file = getSourceFileOfNode(baseProp.valueDeclaration); + } else { + Debug.fail("fixPropertyOverrideAccessor codefix got unexpected error code " + code); + } + return generateAccessorFromProperty(file, context.program, startPosition, endPosition, context, Diagnostics.Generate_get_and_set_accessors.message); +} + +// src/services/codefixes/inferFromUsage.ts +var fixId40 = "inferFromUsage"; +var errorCodes51 = [ + // Variable declarations + Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code, + // Variable uses + Diagnostics.Variable_0_implicitly_has_an_1_type.code, + // Parameter declarations + Diagnostics.Parameter_0_implicitly_has_an_1_type.code, + Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code, + // Get Accessor declarations + Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code, + Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code, + // Set Accessor declarations + Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code, + // Property declarations + Diagnostics.Member_0_implicitly_has_an_1_type.code, + //// Suggestions + // Variable declarations + Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage.code, + // Variable uses + Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code, + // Parameter declarations + Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code, + Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code, + // Get Accessor declarations + Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage.code, + Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage.code, + // Set Accessor declarations + Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage.code, + // Property declarations + Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code, + // Function expressions and declarations + Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code +]; +registerCodeFix({ + errorCodes: errorCodes51, + getCodeActions(context) { + const { sourceFile, program, span: { start }, errorCode, cancellationToken, host, preferences } = context; + const token = getTokenAtPosition(sourceFile, start); + let declaration; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (changes2) => { + declaration = doChange33( + changes2, + sourceFile, + token, + errorCode, + program, + cancellationToken, + /*markSeen*/ + returnTrue, + host, + preferences + ); + }); + const name = declaration && getNameOfDeclaration(declaration); + return !name || changes.length === 0 ? void 0 : [createCodeFixAction(fixId40, changes, [getDiagnostic(errorCode, token), getTextOfNode(name)], fixId40, Diagnostics.Infer_all_types_from_usage)]; + }, + fixIds: [fixId40], + getAllCodeActions(context) { + const { sourceFile, program, cancellationToken, host, preferences } = context; + const markSeen = nodeSeenTracker(); + return codeFixAll(context, errorCodes51, (changes, err) => { + doChange33(changes, sourceFile, getTokenAtPosition(err.file, err.start), err.code, program, cancellationToken, markSeen, host, preferences); + }); + } +}); +function getDiagnostic(errorCode, token) { + switch (errorCode) { + case Diagnostics.Parameter_0_implicitly_has_an_1_type.code: + case Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code: + return isSetAccessorDeclaration(getContainingFunction(token)) ? Diagnostics.Infer_type_of_0_from_usage : Diagnostics.Infer_parameter_types_from_usage; + // TODO: GH#18217 + case Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code: + case Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics.Infer_parameter_types_from_usage; + case Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code: + return Diagnostics.Infer_this_type_of_0_from_usage; + default: + return Diagnostics.Infer_type_of_0_from_usage; + } +} +function mapSuggestionDiagnostic(errorCode) { + switch (errorCode) { + case Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code; + case Diagnostics.Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics.Variable_0_implicitly_has_an_1_type.code; + case Diagnostics.Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics.Parameter_0_implicitly_has_an_1_type.code; + case Diagnostics.Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code; + case Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage.code: + return Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code; + case Diagnostics._0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code; + case Diagnostics.Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage.code: + return Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code; + case Diagnostics.Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage.code: + return Diagnostics.Member_0_implicitly_has_an_1_type.code; + } + return errorCode; +} +function doChange33(changes, sourceFile, token, errorCode, program, cancellationToken, markSeen, host, preferences) { + if (!isParameterPropertyModifier(token.kind) && token.kind !== 80 /* Identifier */ && token.kind !== 26 /* DotDotDotToken */ && token.kind !== 110 /* ThisKeyword */) { + return void 0; + } + const { parent: parent2 } = token; + const importAdder = createImportAdder(sourceFile, program, preferences, host); + errorCode = mapSuggestionDiagnostic(errorCode); + switch (errorCode) { + // Variable and Property declarations + case Diagnostics.Member_0_implicitly_has_an_1_type.code: + case Diagnostics.Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined.code: + if (isVariableDeclaration(parent2) && markSeen(parent2) || isPropertyDeclaration(parent2) || isPropertySignature(parent2)) { + annotateVariableDeclaration(changes, importAdder, sourceFile, parent2, program, host, cancellationToken); + importAdder.writeFixes(changes); + return parent2; + } + if (isPropertyAccessExpression(parent2)) { + const type = inferTypeForVariableFromUsage(parent2.name, program, cancellationToken); + const typeNode = getTypeNodeIfAccessible(type, parent2, program, host); + if (typeNode) { + const typeTag = factory.createJSDocTypeTag( + /*tagName*/ + void 0, + factory.createJSDocTypeExpression(typeNode), + /*comment*/ + void 0 + ); + changes.addJSDocTags(sourceFile, cast(parent2.parent.parent, isExpressionStatement), [typeTag]); + } + importAdder.writeFixes(changes); + return parent2; + } + return void 0; + case Diagnostics.Variable_0_implicitly_has_an_1_type.code: { + const symbol = program.getTypeChecker().getSymbolAtLocation(token); + if (symbol && symbol.valueDeclaration && isVariableDeclaration(symbol.valueDeclaration) && markSeen(symbol.valueDeclaration)) { + annotateVariableDeclaration(changes, importAdder, getSourceFileOfNode(symbol.valueDeclaration), symbol.valueDeclaration, program, host, cancellationToken); + importAdder.writeFixes(changes); + return symbol.valueDeclaration; + } + return void 0; + } + } + const containingFunction = getContainingFunction(token); + if (containingFunction === void 0) { + return void 0; + } + let declaration; + switch (errorCode) { + // Parameter declarations + case Diagnostics.Parameter_0_implicitly_has_an_1_type.code: + if (isSetAccessorDeclaration(containingFunction)) { + annotateSetAccessor(changes, importAdder, sourceFile, containingFunction, program, host, cancellationToken); + declaration = containingFunction; + break; + } + // falls through + case Diagnostics.Rest_parameter_0_implicitly_has_an_any_type.code: + if (markSeen(containingFunction)) { + const param = cast(parent2, isParameter); + annotateParameters(changes, importAdder, sourceFile, param, containingFunction, program, host, cancellationToken); + declaration = param; + } + break; + // Get Accessor declarations + case Diagnostics.Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation.code: + case Diagnostics._0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type.code: + if (isGetAccessorDeclaration(containingFunction) && isIdentifier(containingFunction.name)) { + annotate(changes, importAdder, sourceFile, containingFunction, inferTypeForVariableFromUsage(containingFunction.name, program, cancellationToken), program, host); + declaration = containingFunction; + } + break; + // Set Accessor declarations + case Diagnostics.Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation.code: + if (isSetAccessorDeclaration(containingFunction)) { + annotateSetAccessor(changes, importAdder, sourceFile, containingFunction, program, host, cancellationToken); + declaration = containingFunction; + } + break; + // Function 'this' + case Diagnostics.this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation.code: + if (ts_textChanges_exports.isThisTypeAnnotatable(containingFunction) && markSeen(containingFunction)) { + annotateThis(changes, sourceFile, containingFunction, program, host, cancellationToken); + declaration = containingFunction; + } + break; + default: + return Debug.fail(String(errorCode)); + } + importAdder.writeFixes(changes); + return declaration; +} +function annotateVariableDeclaration(changes, importAdder, sourceFile, declaration, program, host, cancellationToken) { + if (isIdentifier(declaration.name)) { + annotate(changes, importAdder, sourceFile, declaration, inferTypeForVariableFromUsage(declaration.name, program, cancellationToken), program, host); + } +} +function annotateParameters(changes, importAdder, sourceFile, parameterDeclaration, containingFunction, program, host, cancellationToken) { + if (!isIdentifier(parameterDeclaration.name)) { + return; + } + const parameterInferences = inferTypeForParametersFromUsage(containingFunction, sourceFile, program, cancellationToken); + Debug.assert(containingFunction.parameters.length === parameterInferences.length, "Parameter count and inference count should match"); + if (isInJSFile(containingFunction)) { + annotateJSDocParameters(changes, sourceFile, parameterInferences, program, host); + } else { + const needParens = isArrowFunction(containingFunction) && !findChildOfKind(containingFunction, 21 /* OpenParenToken */, sourceFile); + if (needParens) changes.insertNodeBefore(sourceFile, first(containingFunction.parameters), factory.createToken(21 /* OpenParenToken */)); + for (const { declaration, type } of parameterInferences) { + if (declaration && !declaration.type && !declaration.initializer) { + annotate(changes, importAdder, sourceFile, declaration, type, program, host); + } + } + if (needParens) changes.insertNodeAfter(sourceFile, last(containingFunction.parameters), factory.createToken(22 /* CloseParenToken */)); + } +} +function annotateThis(changes, sourceFile, containingFunction, program, host, cancellationToken) { + const references = getFunctionReferences(containingFunction, sourceFile, program, cancellationToken); + if (!references || !references.length) { + return; + } + const thisInference = inferTypeFromReferences(program, references, cancellationToken).thisParameter(); + const typeNode = getTypeNodeIfAccessible(thisInference, containingFunction, program, host); + if (!typeNode) { + return; + } + if (isInJSFile(containingFunction)) { + annotateJSDocThis(changes, sourceFile, containingFunction, typeNode); + } else { + changes.tryInsertThisTypeAnnotation(sourceFile, containingFunction, typeNode); + } +} +function annotateJSDocThis(changes, sourceFile, containingFunction, typeNode) { + changes.addJSDocTags(sourceFile, containingFunction, [ + factory.createJSDocThisTag( + /*tagName*/ + void 0, + factory.createJSDocTypeExpression(typeNode) + ) + ]); +} +function annotateSetAccessor(changes, importAdder, sourceFile, setAccessorDeclaration, program, host, cancellationToken) { + const param = firstOrUndefined(setAccessorDeclaration.parameters); + if (param && isIdentifier(setAccessorDeclaration.name) && isIdentifier(param.name)) { + let type = inferTypeForVariableFromUsage(setAccessorDeclaration.name, program, cancellationToken); + if (type === program.getTypeChecker().getAnyType()) { + type = inferTypeForVariableFromUsage(param.name, program, cancellationToken); + } + if (isInJSFile(setAccessorDeclaration)) { + annotateJSDocParameters(changes, sourceFile, [{ declaration: param, type }], program, host); + } else { + annotate(changes, importAdder, sourceFile, param, type, program, host); + } + } +} +function annotate(changes, importAdder, sourceFile, declaration, type, program, host) { + const typeNode = getTypeNodeIfAccessible(type, declaration, program, host); + if (typeNode) { + if (isInJSFile(sourceFile) && declaration.kind !== 172 /* PropertySignature */) { + const parent2 = isVariableDeclaration(declaration) ? tryCast(declaration.parent.parent, isVariableStatement) : declaration; + if (!parent2) { + return; + } + const typeExpression = factory.createJSDocTypeExpression(typeNode); + const typeTag = isGetAccessorDeclaration(declaration) ? factory.createJSDocReturnTag( + /*tagName*/ + void 0, + typeExpression, + /*comment*/ + void 0 + ) : factory.createJSDocTypeTag( + /*tagName*/ + void 0, + typeExpression, + /*comment*/ + void 0 + ); + changes.addJSDocTags(sourceFile, parent2, [typeTag]); + } else if (!tryReplaceImportTypeNodeWithAutoImport(typeNode, declaration, sourceFile, changes, importAdder, getEmitScriptTarget(program.getCompilerOptions()))) { + changes.tryInsertTypeAnnotation(sourceFile, declaration, typeNode); + } + } +} +function tryReplaceImportTypeNodeWithAutoImport(typeNode, declaration, sourceFile, changes, importAdder, scriptTarget) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); + if (importableReference && changes.tryInsertTypeAnnotation(sourceFile, declaration, importableReference.typeNode)) { + forEach(importableReference.symbols, (s) => importAdder.addImportFromExportedSymbol( + s, + /*isValidTypeOnlyUseSite*/ + true + )); + return true; + } + return false; +} +function annotateJSDocParameters(changes, sourceFile, parameterInferences, program, host) { + const signature = parameterInferences.length && parameterInferences[0].declaration.parent; + if (!signature) { + return; + } + const inferences = mapDefined(parameterInferences, (inference) => { + const param = inference.declaration; + if (param.initializer || getJSDocType(param) || !isIdentifier(param.name)) { + return; + } + const typeNode = inference.type && getTypeNodeIfAccessible(inference.type, param, program, host); + if (typeNode) { + const name = factory.cloneNode(param.name); + setEmitFlags(name, 3072 /* NoComments */ | 4096 /* NoNestedComments */); + return { name: factory.cloneNode(param.name), param, isOptional: !!inference.isOptional, typeNode }; + } + }); + if (!inferences.length) { + return; + } + if (isArrowFunction(signature) || isFunctionExpression(signature)) { + const needParens = isArrowFunction(signature) && !findChildOfKind(signature, 21 /* OpenParenToken */, sourceFile); + if (needParens) { + changes.insertNodeBefore(sourceFile, first(signature.parameters), factory.createToken(21 /* OpenParenToken */)); + } + forEach(inferences, ({ typeNode, param }) => { + const typeTag = factory.createJSDocTypeTag( + /*tagName*/ + void 0, + factory.createJSDocTypeExpression(typeNode) + ); + const jsDoc = factory.createJSDocComment( + /*comment*/ + void 0, + [typeTag] + ); + changes.insertNodeAt(sourceFile, param.getStart(sourceFile), jsDoc, { suffix: " " }); + }); + if (needParens) { + changes.insertNodeAfter(sourceFile, last(signature.parameters), factory.createToken(22 /* CloseParenToken */)); + } + } else { + const paramTags = map(inferences, ({ name, typeNode, isOptional }) => factory.createJSDocParameterTag( + /*tagName*/ + void 0, + name, + /*isBracketed*/ + !!isOptional, + factory.createJSDocTypeExpression(typeNode), + /*isNameFirst*/ + false, + /*comment*/ + void 0 + )); + changes.addJSDocTags(sourceFile, signature, paramTags); + } +} +function getReferences(token, program, cancellationToken) { + return mapDefined(ts_FindAllReferences_exports.getReferenceEntriesForNode(-1, token, program, program.getSourceFiles(), cancellationToken), (entry) => entry.kind !== ts_FindAllReferences_exports.EntryKind.Span ? tryCast(entry.node, isIdentifier) : void 0); +} +function inferTypeForVariableFromUsage(token, program, cancellationToken) { + const references = getReferences(token, program, cancellationToken); + return inferTypeFromReferences(program, references, cancellationToken).single(); +} +function inferTypeForParametersFromUsage(func, sourceFile, program, cancellationToken) { + const references = getFunctionReferences(func, sourceFile, program, cancellationToken); + return references && inferTypeFromReferences(program, references, cancellationToken).parameters(func) || func.parameters.map((p) => ({ + declaration: p, + type: isIdentifier(p.name) ? inferTypeForVariableFromUsage(p.name, program, cancellationToken) : program.getTypeChecker().getAnyType() + })); +} +function getFunctionReferences(containingFunction, sourceFile, program, cancellationToken) { + let searchToken; + switch (containingFunction.kind) { + case 177 /* Constructor */: + searchToken = findChildOfKind(containingFunction, 137 /* ConstructorKeyword */, sourceFile); + break; + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + const parent2 = containingFunction.parent; + searchToken = (isVariableDeclaration(parent2) || isPropertyDeclaration(parent2)) && isIdentifier(parent2.name) ? parent2.name : containingFunction.name; + break; + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + searchToken = containingFunction.name; + break; + } + if (!searchToken) { + return void 0; + } + return getReferences(searchToken, program, cancellationToken); +} +function inferTypeFromReferences(program, references, cancellationToken) { + const checker = program.getTypeChecker(); + const builtinConstructors = { + string: () => checker.getStringType(), + number: () => checker.getNumberType(), + Array: (t) => checker.createArrayType(t), + Promise: (t) => checker.createPromiseType(t) + }; + const builtins = [ + checker.getStringType(), + checker.getNumberType(), + checker.createArrayType(checker.getAnyType()), + checker.createPromiseType(checker.getAnyType()) + ]; + return { + single: single2, + parameters, + thisParameter + }; + function createEmptyUsage() { + return { + isNumber: void 0, + isString: void 0, + isNumberOrString: void 0, + candidateTypes: void 0, + properties: void 0, + calls: void 0, + constructs: void 0, + numberIndex: void 0, + stringIndex: void 0, + candidateThisTypes: void 0, + inferredTypes: void 0 + }; + } + function combineUsages(usages) { + const combinedProperties = /* @__PURE__ */ new Map(); + for (const u of usages) { + if (u.properties) { + u.properties.forEach((p, name) => { + if (!combinedProperties.has(name)) { + combinedProperties.set(name, []); + } + combinedProperties.get(name).push(p); + }); + } + } + const properties = /* @__PURE__ */ new Map(); + combinedProperties.forEach((ps, name) => { + properties.set(name, combineUsages(ps)); + }); + return { + isNumber: usages.some((u) => u.isNumber), + isString: usages.some((u) => u.isString), + isNumberOrString: usages.some((u) => u.isNumberOrString), + candidateTypes: flatMap(usages, (u) => u.candidateTypes), + properties, + calls: flatMap(usages, (u) => u.calls), + constructs: flatMap(usages, (u) => u.constructs), + numberIndex: forEach(usages, (u) => u.numberIndex), + stringIndex: forEach(usages, (u) => u.stringIndex), + candidateThisTypes: flatMap(usages, (u) => u.candidateThisTypes), + inferredTypes: void 0 + // clear type cache + }; + } + function single2() { + return combineTypes(inferTypesFromReferencesSingle(references)); + } + function parameters(declaration) { + if (references.length === 0 || !declaration.parameters) { + return void 0; + } + const usage = createEmptyUsage(); + for (const reference of references) { + cancellationToken.throwIfCancellationRequested(); + calculateUsageOfNode(reference, usage); + } + const calls = [...usage.constructs || [], ...usage.calls || []]; + return declaration.parameters.map((parameter, parameterIndex) => { + const types = []; + const isRest = isRestParameter(parameter); + let isOptional = false; + for (const call of calls) { + if (call.argumentTypes.length <= parameterIndex) { + isOptional = isInJSFile(declaration); + types.push(checker.getUndefinedType()); + } else if (isRest) { + for (let i = parameterIndex; i < call.argumentTypes.length; i++) { + types.push(checker.getBaseTypeOfLiteralType(call.argumentTypes[i])); + } + } else { + types.push(checker.getBaseTypeOfLiteralType(call.argumentTypes[parameterIndex])); + } + } + if (isIdentifier(parameter.name)) { + const inferred = inferTypesFromReferencesSingle(getReferences(parameter.name, program, cancellationToken)); + types.push(...isRest ? mapDefined(inferred, checker.getElementTypeOfArrayType) : inferred); + } + const type = combineTypes(types); + return { + type: isRest ? checker.createArrayType(type) : type, + isOptional: isOptional && !isRest, + declaration: parameter + }; + }); + } + function thisParameter() { + const usage = createEmptyUsage(); + for (const reference of references) { + cancellationToken.throwIfCancellationRequested(); + calculateUsageOfNode(reference, usage); + } + return combineTypes(usage.candidateThisTypes || emptyArray); + } + function inferTypesFromReferencesSingle(references2) { + const usage = createEmptyUsage(); + for (const reference of references2) { + cancellationToken.throwIfCancellationRequested(); + calculateUsageOfNode(reference, usage); + } + return inferTypes(usage); + } + function calculateUsageOfNode(node, usage) { + while (isRightSideOfQualifiedNameOrPropertyAccess(node)) { + node = node.parent; + } + switch (node.parent.kind) { + case 245 /* ExpressionStatement */: + inferTypeFromExpressionStatement(node, usage); + break; + case 226 /* PostfixUnaryExpression */: + usage.isNumber = true; + break; + case 225 /* PrefixUnaryExpression */: + inferTypeFromPrefixUnaryExpression(node.parent, usage); + break; + case 227 /* BinaryExpression */: + inferTypeFromBinaryExpression(node, node.parent, usage); + break; + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + inferTypeFromSwitchStatementLabel(node.parent, usage); + break; + case 214 /* CallExpression */: + case 215 /* NewExpression */: + if (node.parent.expression === node) { + inferTypeFromCallExpression(node.parent, usage); + } else { + inferTypeFromContextualType(node, usage); + } + break; + case 212 /* PropertyAccessExpression */: + inferTypeFromPropertyAccessExpression(node.parent, usage); + break; + case 213 /* ElementAccessExpression */: + inferTypeFromPropertyElementExpression(node.parent, node, usage); + break; + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + inferTypeFromPropertyAssignment(node.parent, usage); + break; + case 173 /* PropertyDeclaration */: + inferTypeFromPropertyDeclaration(node.parent, usage); + break; + case 261 /* VariableDeclaration */: { + const { name, initializer } = node.parent; + if (node === name) { + if (initializer) { + addCandidateType(usage, checker.getTypeAtLocation(initializer)); + } + break; + } + } + // falls through + default: + return inferTypeFromContextualType(node, usage); + } + } + function inferTypeFromContextualType(node, usage) { + if (isExpressionNode(node)) { + addCandidateType(usage, checker.getContextualType(node)); + } + } + function inferTypeFromExpressionStatement(node, usage) { + addCandidateType(usage, isCallExpression(node) ? checker.getVoidType() : checker.getAnyType()); + } + function inferTypeFromPrefixUnaryExpression(node, usage) { + switch (node.operator) { + case 46 /* PlusPlusToken */: + case 47 /* MinusMinusToken */: + case 41 /* MinusToken */: + case 55 /* TildeToken */: + usage.isNumber = true; + break; + case 40 /* PlusToken */: + usage.isNumberOrString = true; + break; + } + } + function inferTypeFromBinaryExpression(node, parent2, usage) { + switch (parent2.operatorToken.kind) { + // ExponentiationOperator + case 43 /* AsteriskAsteriskToken */: + // MultiplicativeOperator + // falls through + case 42 /* AsteriskToken */: + case 44 /* SlashToken */: + case 45 /* PercentToken */: + // ShiftOperator + // falls through + case 48 /* LessThanLessThanToken */: + case 49 /* GreaterThanGreaterThanToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + // BitwiseOperator + // falls through + case 51 /* AmpersandToken */: + case 52 /* BarToken */: + case 53 /* CaretToken */: + // CompoundAssignmentOperator + // falls through + case 66 /* MinusEqualsToken */: + case 68 /* AsteriskAsteriskEqualsToken */: + case 67 /* AsteriskEqualsToken */: + case 69 /* SlashEqualsToken */: + case 70 /* PercentEqualsToken */: + case 74 /* AmpersandEqualsToken */: + case 75 /* BarEqualsToken */: + case 79 /* CaretEqualsToken */: + case 71 /* LessThanLessThanEqualsToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + // AdditiveOperator + // falls through + case 41 /* MinusToken */: + // RelationalOperator + // falls through + case 30 /* LessThanToken */: + case 33 /* LessThanEqualsToken */: + case 32 /* GreaterThanToken */: + case 34 /* GreaterThanEqualsToken */: + const operandType = checker.getTypeAtLocation(parent2.left === node ? parent2.right : parent2.left); + if (operandType.flags & 1056 /* EnumLike */) { + addCandidateType(usage, operandType); + } else { + usage.isNumber = true; + } + break; + case 65 /* PlusEqualsToken */: + case 40 /* PlusToken */: + const otherOperandType = checker.getTypeAtLocation(parent2.left === node ? parent2.right : parent2.left); + if (otherOperandType.flags & 1056 /* EnumLike */) { + addCandidateType(usage, otherOperandType); + } else if (otherOperandType.flags & 296 /* NumberLike */) { + usage.isNumber = true; + } else if (otherOperandType.flags & 402653316 /* StringLike */) { + usage.isString = true; + } else if (otherOperandType.flags & 1 /* Any */) { + } else { + usage.isNumberOrString = true; + } + break; + // AssignmentOperators + case 64 /* EqualsToken */: + case 35 /* EqualsEqualsToken */: + case 37 /* EqualsEqualsEqualsToken */: + case 38 /* ExclamationEqualsEqualsToken */: + case 36 /* ExclamationEqualsToken */: + case 77 /* AmpersandAmpersandEqualsToken */: + case 78 /* QuestionQuestionEqualsToken */: + case 76 /* BarBarEqualsToken */: + addCandidateType(usage, checker.getTypeAtLocation(parent2.left === node ? parent2.right : parent2.left)); + break; + case 103 /* InKeyword */: + if (node === parent2.left) { + usage.isString = true; + } + break; + // LogicalOperator Or NullishCoalescing + case 57 /* BarBarToken */: + case 61 /* QuestionQuestionToken */: + if (node === parent2.left && (node.parent.parent.kind === 261 /* VariableDeclaration */ || isAssignmentExpression( + node.parent.parent, + /*excludeCompoundAssignment*/ + true + ))) { + addCandidateType(usage, checker.getTypeAtLocation(parent2.right)); + } + break; + case 56 /* AmpersandAmpersandToken */: + case 28 /* CommaToken */: + case 104 /* InstanceOfKeyword */: + break; + } + } + function inferTypeFromSwitchStatementLabel(parent2, usage) { + addCandidateType(usage, checker.getTypeAtLocation(parent2.parent.parent.expression)); + } + function inferTypeFromCallExpression(parent2, usage) { + const call = { + argumentTypes: [], + return_: createEmptyUsage() + }; + if (parent2.arguments) { + for (const argument of parent2.arguments) { + call.argumentTypes.push(checker.getTypeAtLocation(argument)); + } + } + calculateUsageOfNode(parent2, call.return_); + if (parent2.kind === 214 /* CallExpression */) { + (usage.calls || (usage.calls = [])).push(call); + } else { + (usage.constructs || (usage.constructs = [])).push(call); + } + } + function inferTypeFromPropertyAccessExpression(parent2, usage) { + const name = escapeLeadingUnderscores(parent2.name.text); + if (!usage.properties) { + usage.properties = /* @__PURE__ */ new Map(); + } + const propertyUsage = usage.properties.get(name) || createEmptyUsage(); + calculateUsageOfNode(parent2, propertyUsage); + usage.properties.set(name, propertyUsage); + } + function inferTypeFromPropertyElementExpression(parent2, node, usage) { + if (node === parent2.argumentExpression) { + usage.isNumberOrString = true; + return; + } else { + const indexType = checker.getTypeAtLocation(parent2.argumentExpression); + const indexUsage = createEmptyUsage(); + calculateUsageOfNode(parent2, indexUsage); + if (indexType.flags & 296 /* NumberLike */) { + usage.numberIndex = indexUsage; + } else { + usage.stringIndex = indexUsage; + } + } + } + function inferTypeFromPropertyAssignment(assignment, usage) { + const nodeWithRealType = isVariableDeclaration(assignment.parent.parent) ? assignment.parent.parent : assignment.parent; + addCandidateThisType(usage, checker.getTypeAtLocation(nodeWithRealType)); + } + function inferTypeFromPropertyDeclaration(declaration, usage) { + addCandidateThisType(usage, checker.getTypeAtLocation(declaration.parent)); + } + function removeLowPriorityInferences(inferences, priorities) { + const toRemove = []; + for (const i of inferences) { + for (const { high, low } of priorities) { + if (high(i)) { + Debug.assert(!low(i), "Priority can't have both low and high"); + toRemove.push(low); + } + } + } + return inferences.filter((i) => toRemove.every((f) => !f(i))); + } + function combineFromUsage(usage) { + return combineTypes(inferTypes(usage)); + } + function combineTypes(inferences) { + if (!inferences.length) return checker.getAnyType(); + const stringNumber = checker.getUnionType([checker.getStringType(), checker.getNumberType()]); + const priorities = [ + { + high: (t) => t === checker.getStringType() || t === checker.getNumberType(), + low: (t) => t === stringNumber + }, + { + high: (t) => !(t.flags & (1 /* Any */ | 16384 /* Void */)), + low: (t) => !!(t.flags & (1 /* Any */ | 16384 /* Void */)) + }, + { + high: (t) => !(t.flags & (98304 /* Nullable */ | 1 /* Any */ | 16384 /* Void */)) && !(getObjectFlags(t) & 16 /* Anonymous */), + low: (t) => !!(getObjectFlags(t) & 16 /* Anonymous */) + } + ]; + let good = removeLowPriorityInferences(inferences, priorities); + const anons = good.filter((i) => getObjectFlags(i) & 16 /* Anonymous */); + if (anons.length) { + good = good.filter((i) => !(getObjectFlags(i) & 16 /* Anonymous */)); + good.push(combineAnonymousTypes(anons)); + } + return checker.getWidenedType(checker.getUnionType(good.map(checker.getBaseTypeOfLiteralType), 2 /* Subtype */)); + } + function combineAnonymousTypes(anons) { + if (anons.length === 1) { + return anons[0]; + } + const calls = []; + const constructs = []; + const stringIndices = []; + const numberIndices = []; + let stringIndexReadonly = false; + let numberIndexReadonly = false; + const props = createMultiMap(); + for (const anon2 of anons) { + for (const p of checker.getPropertiesOfType(anon2)) { + props.add(p.escapedName, p.valueDeclaration ? checker.getTypeOfSymbolAtLocation(p, p.valueDeclaration) : checker.getAnyType()); + } + calls.push(...checker.getSignaturesOfType(anon2, 0 /* Call */)); + constructs.push(...checker.getSignaturesOfType(anon2, 1 /* Construct */)); + const stringIndexInfo = checker.getIndexInfoOfType(anon2, 0 /* String */); + if (stringIndexInfo) { + stringIndices.push(stringIndexInfo.type); + stringIndexReadonly = stringIndexReadonly || stringIndexInfo.isReadonly; + } + const numberIndexInfo = checker.getIndexInfoOfType(anon2, 1 /* Number */); + if (numberIndexInfo) { + numberIndices.push(numberIndexInfo.type); + numberIndexReadonly = numberIndexReadonly || numberIndexInfo.isReadonly; + } + } + const members = mapEntries(props, (name, types) => { + const isOptional = types.length < anons.length ? 16777216 /* Optional */ : 0; + const s = checker.createSymbol(4 /* Property */ | isOptional, name); + s.links.type = checker.getUnionType(types); + return [name, s]; + }); + const indexInfos = []; + if (stringIndices.length) indexInfos.push(checker.createIndexInfo(checker.getStringType(), checker.getUnionType(stringIndices), stringIndexReadonly)); + if (numberIndices.length) indexInfos.push(checker.createIndexInfo(checker.getNumberType(), checker.getUnionType(numberIndices), numberIndexReadonly)); + return checker.createAnonymousType( + anons[0].symbol, + members, + calls, + constructs, + indexInfos + ); + } + function inferTypes(usage) { + var _a, _b, _c; + const types = []; + if (usage.isNumber) { + types.push(checker.getNumberType()); + } + if (usage.isString) { + types.push(checker.getStringType()); + } + if (usage.isNumberOrString) { + types.push(checker.getUnionType([checker.getStringType(), checker.getNumberType()])); + } + if (usage.numberIndex) { + types.push(checker.createArrayType(combineFromUsage(usage.numberIndex))); + } + if (((_a = usage.properties) == null ? void 0 : _a.size) || ((_b = usage.constructs) == null ? void 0 : _b.length) || usage.stringIndex) { + types.push(inferStructuralType(usage)); + } + const candidateTypes = (usage.candidateTypes || []).map((t) => checker.getBaseTypeOfLiteralType(t)); + const callsType = ((_c = usage.calls) == null ? void 0 : _c.length) ? inferStructuralType(usage) : void 0; + if (callsType && candidateTypes) { + types.push(checker.getUnionType([callsType, ...candidateTypes], 2 /* Subtype */)); + } else { + if (callsType) { + types.push(callsType); + } + if (length(candidateTypes)) { + types.push(...candidateTypes); + } + } + types.push(...inferNamedTypesFromProperties(usage)); + return types; + } + function inferStructuralType(usage) { + const members = /* @__PURE__ */ new Map(); + if (usage.properties) { + usage.properties.forEach((u, name) => { + const symbol = checker.createSymbol(4 /* Property */, name); + symbol.links.type = combineFromUsage(u); + members.set(name, symbol); + }); + } + const callSignatures = usage.calls ? [getSignatureFromCalls(usage.calls)] : []; + const constructSignatures = usage.constructs ? [getSignatureFromCalls(usage.constructs)] : []; + const indexInfos = usage.stringIndex ? [checker.createIndexInfo( + checker.getStringType(), + combineFromUsage(usage.stringIndex), + /*isReadonly*/ + false + )] : []; + return checker.createAnonymousType( + /*symbol*/ + void 0, + members, + callSignatures, + constructSignatures, + indexInfos + ); + } + function inferNamedTypesFromProperties(usage) { + if (!usage.properties || !usage.properties.size) return []; + const types = builtins.filter((t) => allPropertiesAreAssignableToUsage(t, usage)); + if (0 < types.length && types.length < 3) { + return types.map((t) => inferInstantiationFromUsage(t, usage)); + } + return []; + } + function allPropertiesAreAssignableToUsage(type, usage) { + if (!usage.properties) return false; + return !forEachEntry(usage.properties, (propUsage, name) => { + const source = checker.getTypeOfPropertyOfType(type, name); + if (!source) { + return true; + } + if (propUsage.calls) { + const sigs = checker.getSignaturesOfType(source, 0 /* Call */); + return !sigs.length || !checker.isTypeAssignableTo(source, getFunctionFromCalls(propUsage.calls)); + } else { + return !checker.isTypeAssignableTo(source, combineFromUsage(propUsage)); + } + }); + } + function inferInstantiationFromUsage(type, usage) { + if (!(getObjectFlags(type) & 4 /* Reference */) || !usage.properties) { + return type; + } + const generic = type.target; + const singleTypeParameter = singleOrUndefined(generic.typeParameters); + if (!singleTypeParameter) return type; + const types = []; + usage.properties.forEach((propUsage, name) => { + const genericPropertyType = checker.getTypeOfPropertyOfType(generic, name); + Debug.assert(!!genericPropertyType, "generic should have all the properties of its reference."); + types.push(...inferTypeParameters(genericPropertyType, combineFromUsage(propUsage), singleTypeParameter)); + }); + return builtinConstructors[type.symbol.escapedName](combineTypes(types)); + } + function inferTypeParameters(genericType, usageType, typeParameter) { + if (genericType === typeParameter) { + return [usageType]; + } else if (genericType.flags & 3145728 /* UnionOrIntersection */) { + return flatMap(genericType.types, (t) => inferTypeParameters(t, usageType, typeParameter)); + } else if (getObjectFlags(genericType) & 4 /* Reference */ && getObjectFlags(usageType) & 4 /* Reference */) { + const genericArgs = checker.getTypeArguments(genericType); + const usageArgs = checker.getTypeArguments(usageType); + const types = []; + if (genericArgs && usageArgs) { + for (let i = 0; i < genericArgs.length; i++) { + if (usageArgs[i]) { + types.push(...inferTypeParameters(genericArgs[i], usageArgs[i], typeParameter)); + } + } + } + return types; + } + const genericSigs = checker.getSignaturesOfType(genericType, 0 /* Call */); + const usageSigs = checker.getSignaturesOfType(usageType, 0 /* Call */); + if (genericSigs.length === 1 && usageSigs.length === 1) { + return inferFromSignatures(genericSigs[0], usageSigs[0], typeParameter); + } + return []; + } + function inferFromSignatures(genericSig, usageSig, typeParameter) { + var _a; + const types = []; + for (let i = 0; i < genericSig.parameters.length; i++) { + const genericParam = genericSig.parameters[i]; + const usageParam = usageSig.parameters[i]; + const isRest = genericSig.declaration && isRestParameter(genericSig.declaration.parameters[i]); + if (!usageParam) { + break; + } + let genericParamType = genericParam.valueDeclaration ? checker.getTypeOfSymbolAtLocation(genericParam, genericParam.valueDeclaration) : checker.getAnyType(); + const elementType = isRest && checker.getElementTypeOfArrayType(genericParamType); + if (elementType) { + genericParamType = elementType; + } + const targetType = ((_a = tryCast(usageParam, isTransientSymbol)) == null ? void 0 : _a.links.type) || (usageParam.valueDeclaration ? checker.getTypeOfSymbolAtLocation(usageParam, usageParam.valueDeclaration) : checker.getAnyType()); + types.push(...inferTypeParameters(genericParamType, targetType, typeParameter)); + } + const genericReturn = checker.getReturnTypeOfSignature(genericSig); + const usageReturn = checker.getReturnTypeOfSignature(usageSig); + types.push(...inferTypeParameters(genericReturn, usageReturn, typeParameter)); + return types; + } + function getFunctionFromCalls(calls) { + return checker.createAnonymousType( + /*symbol*/ + void 0, + createSymbolTable(), + [getSignatureFromCalls(calls)], + emptyArray, + emptyArray + ); + } + function getSignatureFromCalls(calls) { + const parameters2 = []; + const length2 = Math.max(...calls.map((c) => c.argumentTypes.length)); + for (let i = 0; i < length2; i++) { + const symbol = checker.createSymbol(1 /* FunctionScopedVariable */, escapeLeadingUnderscores(`arg${i}`)); + symbol.links.type = combineTypes(calls.map((call) => call.argumentTypes[i] || checker.getUndefinedType())); + if (calls.some((call) => call.argumentTypes[i] === void 0)) { + symbol.flags |= 16777216 /* Optional */; + } + parameters2.push(symbol); + } + const returnType = combineFromUsage(combineUsages(calls.map((call) => call.return_))); + return checker.createSignature( + /*declaration*/ + void 0, + /*typeParameters*/ + void 0, + /*thisParameter*/ + void 0, + parameters2, + returnType, + /*typePredicate*/ + void 0, + length2, + 0 /* None */ + ); + } + function addCandidateType(usage, type) { + if (type && !(type.flags & 1 /* Any */) && !(type.flags & 131072 /* Never */)) { + (usage.candidateTypes || (usage.candidateTypes = [])).push(type); + } + } + function addCandidateThisType(usage, type) { + if (type && !(type.flags & 1 /* Any */) && !(type.flags & 131072 /* Never */)) { + (usage.candidateThisTypes || (usage.candidateThisTypes = [])).push(type); + } + } +} + +// src/services/codefixes/fixReturnTypeInAsyncFunction.ts +var fixId41 = "fixReturnTypeInAsyncFunction"; +var errorCodes52 = [ + Diagnostics.The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_write_Promise_0.code +]; +registerCodeFix({ + errorCodes: errorCodes52, + fixIds: [fixId41], + getCodeActions: function getCodeActionsToFixReturnTypeInAsyncFunction(context) { + const { sourceFile, program, span } = context; + const checker = program.getTypeChecker(); + const info = getInfo16(sourceFile, program.getTypeChecker(), span.start); + if (!info) { + return void 0; + } + const { returnTypeNode, returnType, promisedTypeNode, promisedType } = info; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange34(t, sourceFile, returnTypeNode, promisedTypeNode)); + return [createCodeFixAction( + fixId41, + changes, + [Diagnostics.Replace_0_with_Promise_1, checker.typeToString(returnType), checker.typeToString(promisedType)], + fixId41, + Diagnostics.Fix_all_incorrect_return_type_of_an_async_functions + )]; + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes52, (changes, diag2) => { + const info = getInfo16(diag2.file, context.program.getTypeChecker(), diag2.start); + if (info) { + doChange34(changes, diag2.file, info.returnTypeNode, info.promisedTypeNode); + } + }) +}); +function getInfo16(sourceFile, checker, pos) { + if (isInJSFile(sourceFile)) { + return void 0; + } + const token = getTokenAtPosition(sourceFile, pos); + const func = findAncestor(token, isFunctionLikeDeclaration); + const returnTypeNode = func == null ? void 0 : func.type; + if (!returnTypeNode) { + return void 0; + } + const returnType = checker.getTypeFromTypeNode(returnTypeNode); + const promisedType = checker.getAwaitedType(returnType) || checker.getVoidType(); + const promisedTypeNode = checker.typeToTypeNode( + promisedType, + /*enclosingDeclaration*/ + returnTypeNode, + /*flags*/ + void 0 + ); + if (promisedTypeNode) { + return { returnTypeNode, returnType, promisedTypeNode, promisedType }; + } +} +function doChange34(changes, sourceFile, returnTypeNode, promisedTypeNode) { + changes.replaceNode(sourceFile, returnTypeNode, factory.createTypeReferenceNode("Promise", [promisedTypeNode])); +} + +// src/services/codefixes/disableJsDiagnostics.ts +var fixName4 = "disableJsDiagnostics"; +var fixId42 = "disableJsDiagnostics"; +var errorCodes53 = mapDefined(Object.keys(Diagnostics), (key) => { + const diag2 = Diagnostics[key]; + return diag2.category === 1 /* Error */ ? diag2.code : void 0; +}); +registerCodeFix({ + errorCodes: errorCodes53, + getCodeActions: function getCodeActionsToDisableJsDiagnostics(context) { + const { sourceFile, program, span, host, formatContext } = context; + if (!isInJSFile(sourceFile) || !isCheckJsEnabledForFile(sourceFile, program.getCompilerOptions())) { + return void 0; + } + const newLineCharacter = sourceFile.checkJsDirective ? "" : getNewLineOrDefaultFromHost(host, formatContext.options); + const fixes = [ + // fixId unnecessary because adding `// @ts-nocheck` even once will ignore every error in the file. + createCodeFixActionWithoutFixAll( + fixName4, + [createFileTextChanges(sourceFile.fileName, [ + createTextChange( + sourceFile.checkJsDirective ? createTextSpanFromBounds(sourceFile.checkJsDirective.pos, sourceFile.checkJsDirective.end) : createTextSpan(0, 0), + `// @ts-nocheck${newLineCharacter}` + ) + ])], + Diagnostics.Disable_checking_for_this_file + ) + ]; + if (ts_textChanges_exports.isValidLocationToAddComment(sourceFile, span.start)) { + fixes.unshift(createCodeFixAction(fixName4, ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange9(t, sourceFile, span.start)), Diagnostics.Ignore_this_error_message, fixId42, Diagnostics.Add_ts_ignore_to_all_error_messages)); + } + return fixes; + }, + fixIds: [fixId42], + getAllCodeActions: (context) => { + const seenLines = /* @__PURE__ */ new Set(); + return codeFixAll(context, errorCodes53, (changes, diag2) => { + if (ts_textChanges_exports.isValidLocationToAddComment(diag2.file, diag2.start)) { + makeChange9(changes, diag2.file, diag2.start, seenLines); + } + }); + } +}); +function makeChange9(changes, sourceFile, position, seenLines) { + const { line: lineNumber } = getLineAndCharacterOfPosition(sourceFile, position); + if (!seenLines || tryAddToSet(seenLines, lineNumber)) { + changes.insertCommentBeforeLine(sourceFile, lineNumber, position, " @ts-ignore"); + } +} + +// src/services/codefixes/helpers.ts +function createMissingMemberNodes(classDeclaration, possiblyMissingSymbols, sourceFile, context, preferences, importAdder, addClassElement) { + const classMembers = classDeclaration.symbol.members; + for (const symbol of possiblyMissingSymbols) { + if (!classMembers.has(symbol.escapedName)) { + addNewNodeForMemberSymbol( + symbol, + classDeclaration, + sourceFile, + context, + preferences, + importAdder, + addClassElement, + /*body*/ + void 0 + ); + } + } +} +function getNoopSymbolTrackerWithResolver(context) { + return { + trackSymbol: () => false, + moduleResolverHost: getModuleSpecifierResolverHost(context.program, context.host) + }; +} +var PreserveOptionalFlags = /* @__PURE__ */ ((PreserveOptionalFlags2) => { + PreserveOptionalFlags2[PreserveOptionalFlags2["Method"] = 1] = "Method"; + PreserveOptionalFlags2[PreserveOptionalFlags2["Property"] = 2] = "Property"; + PreserveOptionalFlags2[PreserveOptionalFlags2["All"] = 3] = "All"; + return PreserveOptionalFlags2; +})(PreserveOptionalFlags || {}); +function addNewNodeForMemberSymbol(symbol, enclosingDeclaration, sourceFile, context, preferences, importAdder, addClassElement, body, preserveOptional = 3 /* All */, isAmbient = false) { + const declarations = symbol.getDeclarations(); + const declaration = firstOrUndefined(declarations); + const checker = context.program.getTypeChecker(); + const scriptTarget = getEmitScriptTarget(context.program.getCompilerOptions()); + const kind = (declaration == null ? void 0 : declaration.kind) ?? 172 /* PropertySignature */; + const declarationName = createDeclarationName(symbol, declaration); + const effectiveModifierFlags = declaration ? getEffectiveModifierFlags(declaration) : 0 /* None */; + let modifierFlags = effectiveModifierFlags & 256 /* Static */; + modifierFlags |= effectiveModifierFlags & 1 /* Public */ ? 1 /* Public */ : effectiveModifierFlags & 4 /* Protected */ ? 4 /* Protected */ : 0 /* None */; + if (declaration && isAutoAccessorPropertyDeclaration(declaration)) { + modifierFlags |= 512 /* Accessor */; + } + const modifiers = createModifiers(); + const type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration)); + const optional = !!(symbol.flags & 16777216 /* Optional */); + const ambient = !!(enclosingDeclaration.flags & 33554432 /* Ambient */) || isAmbient; + const quotePreference = getQuotePreference(sourceFile, preferences); + const flags = 1 /* NoTruncation */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0 /* None */); + switch (kind) { + case 172 /* PropertySignature */: + case 173 /* PropertyDeclaration */: + let typeNode = checker.typeToTypeNode(type, enclosingDeclaration, flags, 8 /* AllowUnresolvedNames */, getNoopSymbolTrackerWithResolver(context)); + if (importAdder) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); + if (importableReference) { + typeNode = importableReference.typeNode; + importSymbols(importAdder, importableReference.symbols); + } + } + addClassElement(factory.createPropertyDeclaration( + modifiers, + declaration ? createName(declarationName) : symbol.getName(), + optional && preserveOptional & 2 /* Property */ ? factory.createToken(58 /* QuestionToken */) : void 0, + typeNode, + /*initializer*/ + void 0 + )); + break; + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: { + Debug.assertIsDefined(declarations); + let typeNode2 = checker.typeToTypeNode( + type, + enclosingDeclaration, + flags, + /*internalFlags*/ + void 0, + getNoopSymbolTrackerWithResolver(context) + ); + const allAccessors = getAllAccessorDeclarations(declarations, declaration); + const orderedAccessors = allAccessors.secondAccessor ? [allAccessors.firstAccessor, allAccessors.secondAccessor] : [allAccessors.firstAccessor]; + if (importAdder) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode2, scriptTarget); + if (importableReference) { + typeNode2 = importableReference.typeNode; + importSymbols(importAdder, importableReference.symbols); + } + } + for (const accessor of orderedAccessors) { + if (isGetAccessorDeclaration(accessor)) { + addClassElement(factory.createGetAccessorDeclaration( + modifiers, + createName(declarationName), + emptyArray, + createTypeNode(typeNode2), + createBody(body, quotePreference, ambient) + )); + } else { + Debug.assertNode(accessor, isSetAccessorDeclaration, "The counterpart to a getter should be a setter"); + const parameter = getSetAccessorValueParameter(accessor); + const parameterName = parameter && isIdentifier(parameter.name) ? idText(parameter.name) : void 0; + addClassElement(factory.createSetAccessorDeclaration( + modifiers, + createName(declarationName), + createDummyParameters( + 1, + [parameterName], + [createTypeNode(typeNode2)], + 1, + /*inJs*/ + false + ), + createBody(body, quotePreference, ambient) + )); + } + } + break; + } + case 174 /* MethodSignature */: + case 175 /* MethodDeclaration */: + Debug.assertIsDefined(declarations); + const signatures = type.isUnion() ? flatMap(type.types, (t) => t.getCallSignatures()) : type.getCallSignatures(); + if (!some(signatures)) { + break; + } + if (declarations.length === 1) { + Debug.assert(signatures.length === 1, "One declaration implies one signature"); + const signature = signatures[0]; + outputMethod(quotePreference, signature, modifiers, createName(declarationName), createBody(body, quotePreference, ambient)); + break; + } + for (const signature of signatures) { + if (signature.declaration && signature.declaration.flags & 33554432 /* Ambient */) { + continue; + } + outputMethod(quotePreference, signature, modifiers, createName(declarationName)); + } + if (!ambient) { + if (declarations.length > signatures.length) { + const signature = checker.getSignatureFromDeclaration(declarations[declarations.length - 1]); + outputMethod(quotePreference, signature, modifiers, createName(declarationName), createBody(body, quotePreference)); + } else { + Debug.assert(declarations.length === signatures.length, "Declarations and signatures should match count"); + addClassElement(createMethodImplementingSignatures(checker, context, enclosingDeclaration, signatures, createName(declarationName), optional && !!(preserveOptional & 1 /* Method */), modifiers, quotePreference, body)); + } + } + break; + } + function outputMethod(quotePreference2, signature, modifiers2, name, body2) { + const method = createSignatureDeclarationFromSignature(175 /* MethodDeclaration */, context, quotePreference2, signature, body2, name, modifiers2, optional && !!(preserveOptional & 1 /* Method */), enclosingDeclaration, importAdder); + if (method) addClassElement(method); + } + function createModifiers() { + let modifiers2; + if (modifierFlags) { + modifiers2 = combine(modifiers2, factory.createModifiersFromModifierFlags(modifierFlags)); + } + if (shouldAddOverrideKeyword()) { + modifiers2 = append(modifiers2, factory.createToken(164 /* OverrideKeyword */)); + } + return modifiers2 && factory.createNodeArray(modifiers2); + } + function shouldAddOverrideKeyword() { + return !!(context.program.getCompilerOptions().noImplicitOverride && declaration && hasAbstractModifier(declaration)); + } + function createName(node) { + if (isIdentifier(node) && node.escapedText === "constructor") { + return factory.createComputedPropertyName(factory.createStringLiteral(idText(node), quotePreference === 0 /* Single */)); + } + return getSynthesizedDeepClone( + node, + /*includeTrivia*/ + false + ); + } + function createBody(block, quotePreference2, ambient2) { + return ambient2 ? void 0 : getSynthesizedDeepClone( + block, + /*includeTrivia*/ + false + ) || createStubbedMethodBody(quotePreference2); + } + function createTypeNode(typeNode) { + return getSynthesizedDeepClone( + typeNode, + /*includeTrivia*/ + false + ); + } + function createDeclarationName(symbol2, declaration2) { + if (getCheckFlags(symbol2) & 262144 /* Mapped */) { + const nameType = symbol2.links.nameType; + if (nameType && isTypeUsableAsPropertyName(nameType)) { + return factory.createIdentifier(unescapeLeadingUnderscores(getPropertyNameFromType(nameType))); + } + } + return getSynthesizedDeepClone( + getNameOfDeclaration(declaration2), + /*includeTrivia*/ + false + ); + } +} +function createSignatureDeclarationFromSignature(kind, context, quotePreference, signature, body, name, modifiers, optional, enclosingDeclaration, importAdder) { + const program = context.program; + const checker = program.getTypeChecker(); + const scriptTarget = getEmitScriptTarget(program.getCompilerOptions()); + const isJs = isInJSFile(enclosingDeclaration); + const flags = 1 /* NoTruncation */ | 256 /* SuppressAnyReturnType */ | 524288 /* AllowEmptyTuple */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0 /* None */); + const signatureDeclaration = checker.signatureToSignatureDeclaration(signature, kind, enclosingDeclaration, flags, 8 /* AllowUnresolvedNames */, getNoopSymbolTrackerWithResolver(context)); + if (!signatureDeclaration) { + return void 0; + } + let typeParameters = isJs ? void 0 : signatureDeclaration.typeParameters; + let parameters = signatureDeclaration.parameters; + let type = isJs ? void 0 : getSynthesizedDeepClone(signatureDeclaration.type); + if (importAdder) { + if (typeParameters) { + const newTypeParameters = sameMap(typeParameters, (typeParameterDecl) => { + let constraint = typeParameterDecl.constraint; + let defaultType = typeParameterDecl.default; + if (constraint) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(constraint, scriptTarget); + if (importableReference) { + constraint = importableReference.typeNode; + importSymbols(importAdder, importableReference.symbols); + } + } + if (defaultType) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(defaultType, scriptTarget); + if (importableReference) { + defaultType = importableReference.typeNode; + importSymbols(importAdder, importableReference.symbols); + } + } + return factory.updateTypeParameterDeclaration( + typeParameterDecl, + typeParameterDecl.modifiers, + typeParameterDecl.name, + constraint, + defaultType + ); + }); + if (typeParameters !== newTypeParameters) { + typeParameters = setTextRange(factory.createNodeArray(newTypeParameters, typeParameters.hasTrailingComma), typeParameters); + } + } + const newParameters = sameMap(parameters, (parameterDecl) => { + let type2 = isJs ? void 0 : parameterDecl.type; + if (type2) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(type2, scriptTarget); + if (importableReference) { + type2 = importableReference.typeNode; + importSymbols(importAdder, importableReference.symbols); + } + } + return factory.updateParameterDeclaration( + parameterDecl, + parameterDecl.modifiers, + parameterDecl.dotDotDotToken, + parameterDecl.name, + isJs ? void 0 : parameterDecl.questionToken, + type2, + parameterDecl.initializer + ); + }); + if (parameters !== newParameters) { + parameters = setTextRange(factory.createNodeArray(newParameters, parameters.hasTrailingComma), parameters); + } + if (type) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(type, scriptTarget); + if (importableReference) { + type = importableReference.typeNode; + importSymbols(importAdder, importableReference.symbols); + } + } + } + const questionToken = optional ? factory.createToken(58 /* QuestionToken */) : void 0; + const asteriskToken = signatureDeclaration.asteriskToken; + if (isFunctionExpression(signatureDeclaration)) { + return factory.updateFunctionExpression(signatureDeclaration, modifiers, signatureDeclaration.asteriskToken, tryCast(name, isIdentifier), typeParameters, parameters, type, body ?? signatureDeclaration.body); + } + if (isArrowFunction(signatureDeclaration)) { + return factory.updateArrowFunction(signatureDeclaration, modifiers, typeParameters, parameters, type, signatureDeclaration.equalsGreaterThanToken, body ?? signatureDeclaration.body); + } + if (isMethodDeclaration(signatureDeclaration)) { + return factory.updateMethodDeclaration(signatureDeclaration, modifiers, asteriskToken, name ?? factory.createIdentifier(""), questionToken, typeParameters, parameters, type, body); + } + if (isFunctionDeclaration(signatureDeclaration)) { + return factory.updateFunctionDeclaration(signatureDeclaration, modifiers, signatureDeclaration.asteriskToken, tryCast(name, isIdentifier), typeParameters, parameters, type, body ?? signatureDeclaration.body); + } + return void 0; +} +function createSignatureDeclarationFromCallExpression(kind, context, importAdder, call, name, modifierFlags, contextNode) { + const quotePreference = getQuotePreference(context.sourceFile, context.preferences); + const scriptTarget = getEmitScriptTarget(context.program.getCompilerOptions()); + const tracker = getNoopSymbolTrackerWithResolver(context); + const checker = context.program.getTypeChecker(); + const isJs = isInJSFile(contextNode); + const { typeArguments, arguments: args, parent: parent2 } = call; + const contextualType = isJs ? void 0 : checker.getContextualType(call); + const names = map(args, (arg) => isIdentifier(arg) ? arg.text : isPropertyAccessExpression(arg) && isIdentifier(arg.name) ? arg.name.text : void 0); + const instanceTypes = isJs ? [] : map(args, (arg) => checker.getTypeAtLocation(arg)); + const { argumentTypeNodes, argumentTypeParameters } = getArgumentTypesAndTypeParameters( + checker, + importAdder, + instanceTypes, + contextNode, + scriptTarget, + 1 /* NoTruncation */, + 8 /* AllowUnresolvedNames */, + tracker + ); + const modifiers = modifierFlags ? factory.createNodeArray(factory.createModifiersFromModifierFlags(modifierFlags)) : void 0; + const asteriskToken = isYieldExpression(parent2) ? factory.createToken(42 /* AsteriskToken */) : void 0; + const typeParameters = isJs ? void 0 : createTypeParametersForArguments(checker, argumentTypeParameters, typeArguments); + const parameters = createDummyParameters( + args.length, + names, + argumentTypeNodes, + /*minArgumentCount*/ + void 0, + isJs + ); + const type = isJs || contextualType === void 0 ? void 0 : checker.typeToTypeNode( + contextualType, + contextNode, + /*flags*/ + void 0, + /*internalFlags*/ + void 0, + tracker + ); + switch (kind) { + case 175 /* MethodDeclaration */: + return factory.createMethodDeclaration( + modifiers, + asteriskToken, + name, + /*questionToken*/ + void 0, + typeParameters, + parameters, + type, + createStubbedMethodBody(quotePreference) + ); + case 174 /* MethodSignature */: + return factory.createMethodSignature( + modifiers, + name, + /*questionToken*/ + void 0, + typeParameters, + parameters, + type === void 0 ? factory.createKeywordTypeNode(159 /* UnknownKeyword */) : type + ); + case 263 /* FunctionDeclaration */: + Debug.assert(typeof name === "string" || isIdentifier(name), "Unexpected name"); + return factory.createFunctionDeclaration( + modifiers, + asteriskToken, + name, + typeParameters, + parameters, + type, + createStubbedBody(Diagnostics.Function_not_implemented.message, quotePreference) + ); + default: + Debug.fail("Unexpected kind"); + } +} +function createTypeParametersForArguments(checker, argumentTypeParameters, typeArguments) { + const usedNames = new Set(argumentTypeParameters.map((pair) => pair[0])); + const constraintsByName = new Map(argumentTypeParameters); + if (typeArguments) { + const typeArgumentsWithNewTypes = typeArguments.filter((typeArgument) => !argumentTypeParameters.some((pair) => { + var _a; + return checker.getTypeAtLocation(typeArgument) === ((_a = pair[1]) == null ? void 0 : _a.argumentType); + })); + const targetSize = usedNames.size + typeArgumentsWithNewTypes.length; + for (let i = 0; usedNames.size < targetSize; i += 1) { + usedNames.add(createTypeParameterName(i)); + } + } + return arrayFrom( + usedNames.values(), + (usedName) => { + var _a; + return factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + usedName, + (_a = constraintsByName.get(usedName)) == null ? void 0 : _a.constraint + ); + } + ); +} +function createTypeParameterName(index) { + return 84 /* T */ + index <= 90 /* Z */ ? String.fromCharCode(84 /* T */ + index) : `T${index}`; +} +function typeToAutoImportableTypeNode(checker, importAdder, type, contextNode, scriptTarget, flags, internalFlags, tracker) { + const typeNode = checker.typeToTypeNode(type, contextNode, flags, internalFlags, tracker); + if (!typeNode) { + return void 0; + } + return typeNodeToAutoImportableTypeNode(typeNode, importAdder, scriptTarget); +} +function typeNodeToAutoImportableTypeNode(typeNode, importAdder, scriptTarget) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); + if (importableReference) { + importSymbols(importAdder, importableReference.symbols); + typeNode = importableReference.typeNode; + } + return getSynthesizedDeepClone(typeNode); +} +function endOfRequiredTypeParameters(checker, type) { + var _a; + Debug.assert(type.typeArguments); + const fullTypeArguments = type.typeArguments; + const target = type.target; + for (let cutoff = 0; cutoff < fullTypeArguments.length; cutoff++) { + if (((_a = target.localTypeParameters) == null ? void 0 : _a[cutoff].constraint) === void 0) { + continue; + } + const typeArguments = fullTypeArguments.slice(0, cutoff); + const filledIn = checker.fillMissingTypeArguments( + typeArguments, + target.typeParameters, + cutoff, + /*isJavaScriptImplicitAny*/ + false + ); + if (filledIn.every((fill, i) => fill === fullTypeArguments[i])) { + return cutoff; + } + } + return fullTypeArguments.length; +} +function typeToMinimizedReferenceType(checker, type, contextNode, flags, internalFlags, tracker) { + let typeNode = checker.typeToTypeNode(type, contextNode, flags, internalFlags, tracker); + if (!typeNode) { + return void 0; + } + if (isTypeReferenceNode(typeNode)) { + const genericType = type; + if (genericType.typeArguments && typeNode.typeArguments) { + const cutoff = endOfRequiredTypeParameters(checker, genericType); + if (cutoff < typeNode.typeArguments.length) { + const newTypeArguments = factory.createNodeArray(typeNode.typeArguments.slice(0, cutoff)); + typeNode = factory.updateTypeReferenceNode(typeNode, typeNode.typeName, newTypeArguments); + } + } + } + return typeNode; +} +function typePredicateToAutoImportableTypeNode(checker, importAdder, typePredicate, contextNode, scriptTarget, flags, internalFlags, tracker) { + let typePredicateNode = checker.typePredicateToTypePredicateNode(typePredicate, contextNode, flags, internalFlags, tracker); + if ((typePredicateNode == null ? void 0 : typePredicateNode.type) && isImportTypeNode(typePredicateNode.type)) { + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typePredicateNode.type, scriptTarget); + if (importableReference) { + importSymbols(importAdder, importableReference.symbols); + typePredicateNode = factory.updateTypePredicateNode(typePredicateNode, typePredicateNode.assertsModifier, typePredicateNode.parameterName, importableReference.typeNode); + } + } + return getSynthesizedDeepClone(typePredicateNode); +} +function typeContainsTypeParameter(type) { + if (type.isUnionOrIntersection()) { + return type.types.some(typeContainsTypeParameter); + } + return type.flags & 262144 /* TypeParameter */; +} +function getArgumentTypesAndTypeParameters(checker, importAdder, instanceTypes, contextNode, scriptTarget, flags, internalFlags, tracker) { + const argumentTypeNodes = []; + const argumentTypeParameters = /* @__PURE__ */ new Map(); + for (let i = 0; i < instanceTypes.length; i += 1) { + const instanceType = instanceTypes[i]; + if (instanceType.isUnionOrIntersection() && instanceType.types.some(typeContainsTypeParameter)) { + const synthesizedTypeParameterName = createTypeParameterName(i); + argumentTypeNodes.push(factory.createTypeReferenceNode(synthesizedTypeParameterName)); + argumentTypeParameters.set(synthesizedTypeParameterName, void 0); + continue; + } + const widenedInstanceType = checker.getBaseTypeOfLiteralType(instanceType); + const argumentTypeNode = typeToAutoImportableTypeNode(checker, importAdder, widenedInstanceType, contextNode, scriptTarget, flags, internalFlags, tracker); + if (!argumentTypeNode) { + continue; + } + argumentTypeNodes.push(argumentTypeNode); + const argumentTypeParameter = getFirstTypeParameterName(instanceType); + const instanceTypeConstraint = instanceType.isTypeParameter() && instanceType.constraint && !isAnonymousObjectConstraintType(instanceType.constraint) ? typeToAutoImportableTypeNode(checker, importAdder, instanceType.constraint, contextNode, scriptTarget, flags, internalFlags, tracker) : void 0; + if (argumentTypeParameter) { + argumentTypeParameters.set(argumentTypeParameter, { argumentType: instanceType, constraint: instanceTypeConstraint }); + } + } + return { argumentTypeNodes, argumentTypeParameters: arrayFrom(argumentTypeParameters.entries()) }; +} +function isAnonymousObjectConstraintType(type) { + return type.flags & 524288 /* Object */ && type.objectFlags === 16 /* Anonymous */; +} +function getFirstTypeParameterName(type) { + var _a; + if (type.flags & (1048576 /* Union */ | 2097152 /* Intersection */)) { + for (const subType of type.types) { + const subTypeName = getFirstTypeParameterName(subType); + if (subTypeName) { + return subTypeName; + } + } + } + return type.flags & 262144 /* TypeParameter */ ? (_a = type.getSymbol()) == null ? void 0 : _a.getName() : void 0; +} +function createDummyParameters(argCount, names, types, minArgumentCount, inJs) { + const parameters = []; + const parameterNameCounts = /* @__PURE__ */ new Map(); + for (let i = 0; i < argCount; i++) { + const parameterName = (names == null ? void 0 : names[i]) || `arg${i}`; + const parameterNameCount = parameterNameCounts.get(parameterName); + parameterNameCounts.set(parameterName, (parameterNameCount || 0) + 1); + const newParameter = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + /*name*/ + parameterName + (parameterNameCount || ""), + /*questionToken*/ + minArgumentCount !== void 0 && i >= minArgumentCount ? factory.createToken(58 /* QuestionToken */) : void 0, + /*type*/ + inJs ? void 0 : (types == null ? void 0 : types[i]) || factory.createKeywordTypeNode(159 /* UnknownKeyword */), + /*initializer*/ + void 0 + ); + parameters.push(newParameter); + } + return parameters; +} +function createMethodImplementingSignatures(checker, context, enclosingDeclaration, signatures, name, optional, modifiers, quotePreference, body) { + let maxArgsSignature = signatures[0]; + let minArgumentCount = signatures[0].minArgumentCount; + let someSigHasRestParameter = false; + for (const sig of signatures) { + minArgumentCount = Math.min(sig.minArgumentCount, minArgumentCount); + if (signatureHasRestParameter(sig)) { + someSigHasRestParameter = true; + } + if (sig.parameters.length >= maxArgsSignature.parameters.length && (!signatureHasRestParameter(sig) || signatureHasRestParameter(maxArgsSignature))) { + maxArgsSignature = sig; + } + } + const maxNonRestArgs = maxArgsSignature.parameters.length - (signatureHasRestParameter(maxArgsSignature) ? 1 : 0); + const maxArgsParameterSymbolNames = maxArgsSignature.parameters.map((symbol) => symbol.name); + const parameters = createDummyParameters( + maxNonRestArgs, + maxArgsParameterSymbolNames, + /*types*/ + void 0, + minArgumentCount, + /*inJs*/ + false + ); + if (someSigHasRestParameter) { + const restParameter = factory.createParameterDeclaration( + /*modifiers*/ + void 0, + factory.createToken(26 /* DotDotDotToken */), + maxArgsParameterSymbolNames[maxNonRestArgs] || "rest", + /*questionToken*/ + maxNonRestArgs >= minArgumentCount ? factory.createToken(58 /* QuestionToken */) : void 0, + factory.createArrayTypeNode(factory.createKeywordTypeNode(159 /* UnknownKeyword */)), + /*initializer*/ + void 0 + ); + parameters.push(restParameter); + } + return createStubbedMethod( + modifiers, + name, + optional, + /*typeParameters*/ + void 0, + parameters, + getReturnTypeFromSignatures(signatures, checker, context, enclosingDeclaration), + quotePreference, + body + ); +} +function getReturnTypeFromSignatures(signatures, checker, context, enclosingDeclaration) { + if (length(signatures)) { + const type = checker.getUnionType(map(signatures, checker.getReturnTypeOfSignature)); + return checker.typeToTypeNode(type, enclosingDeclaration, 1 /* NoTruncation */, 8 /* AllowUnresolvedNames */, getNoopSymbolTrackerWithResolver(context)); + } +} +function createStubbedMethod(modifiers, name, optional, typeParameters, parameters, returnType, quotePreference, body) { + return factory.createMethodDeclaration( + modifiers, + /*asteriskToken*/ + void 0, + name, + optional ? factory.createToken(58 /* QuestionToken */) : void 0, + typeParameters, + parameters, + returnType, + body || createStubbedMethodBody(quotePreference) + ); +} +function createStubbedMethodBody(quotePreference) { + return createStubbedBody(Diagnostics.Method_not_implemented.message, quotePreference); +} +function createStubbedBody(text, quotePreference) { + return factory.createBlock( + [factory.createThrowStatement( + factory.createNewExpression( + factory.createIdentifier("Error"), + /*typeArguments*/ + void 0, + // TODO Handle auto quote preference. + [factory.createStringLiteral( + text, + /*isSingleQuote*/ + quotePreference === 0 /* Single */ + )] + ) + )], + /*multiLine*/ + true + ); +} +function setJsonCompilerOptionValues(changeTracker, configFile, options) { + const tsconfigObjectLiteral = getTsConfigObjectLiteralExpression(configFile); + if (!tsconfigObjectLiteral) return void 0; + const compilerOptionsProperty = findJsonProperty(tsconfigObjectLiteral, "compilerOptions"); + if (compilerOptionsProperty === void 0) { + changeTracker.insertNodeAtObjectStart( + configFile, + tsconfigObjectLiteral, + createJsonPropertyAssignment( + "compilerOptions", + factory.createObjectLiteralExpression( + options.map(([optionName, optionValue]) => createJsonPropertyAssignment(optionName, optionValue)), + /*multiLine*/ + true + ) + ) + ); + return; + } + const compilerOptions = compilerOptionsProperty.initializer; + if (!isObjectLiteralExpression(compilerOptions)) { + return; + } + for (const [optionName, optionValue] of options) { + const optionProperty = findJsonProperty(compilerOptions, optionName); + if (optionProperty === void 0) { + changeTracker.insertNodeAtObjectStart(configFile, compilerOptions, createJsonPropertyAssignment(optionName, optionValue)); + } else { + changeTracker.replaceNode(configFile, optionProperty.initializer, optionValue); + } + } +} +function setJsonCompilerOptionValue(changeTracker, configFile, optionName, optionValue) { + setJsonCompilerOptionValues(changeTracker, configFile, [[optionName, optionValue]]); +} +function createJsonPropertyAssignment(name, initializer) { + return factory.createPropertyAssignment(factory.createStringLiteral(name), initializer); +} +function findJsonProperty(obj, name) { + return find(obj.properties, (p) => isPropertyAssignment(p) && !!p.name && isStringLiteral(p.name) && p.name.text === name); +} +function tryGetAutoImportableReferenceFromTypeNode(importTypeNode, scriptTarget) { + let symbols; + const typeNode = visitNode(importTypeNode, visit, isTypeNode); + if (symbols && typeNode) { + return { typeNode, symbols }; + } + function visit(node) { + if (isLiteralImportTypeNode(node) && node.qualifier) { + const firstIdentifier = getFirstIdentifier(node.qualifier); + if (!firstIdentifier.symbol) { + return visitEachChild( + node, + visit, + /*context*/ + void 0 + ); + } + const name = getNameForExportedSymbol(firstIdentifier.symbol, scriptTarget); + const qualifier = name !== firstIdentifier.text ? replaceFirstIdentifierOfEntityName(node.qualifier, factory.createIdentifier(name)) : node.qualifier; + symbols = append(symbols, firstIdentifier.symbol); + const typeArguments = visitNodes2(node.typeArguments, visit, isTypeNode); + return factory.createTypeReferenceNode(qualifier, typeArguments); + } + return visitEachChild( + node, + visit, + /*context*/ + void 0 + ); + } +} +function replaceFirstIdentifierOfEntityName(name, newIdentifier) { + if (name.kind === 80 /* Identifier */) { + return newIdentifier; + } + return factory.createQualifiedName(replaceFirstIdentifierOfEntityName(name.left, newIdentifier), name.right); +} +function importSymbols(importAdder, symbols) { + symbols.forEach((s) => importAdder.addImportFromExportedSymbol( + s, + /*isValidTypeOnlyUseSite*/ + true + )); +} +function findAncestorMatchingSpan(sourceFile, span) { + const end = textSpanEnd(span); + let token = getTokenAtPosition(sourceFile, span.start); + while (token.end < end) { + token = token.parent; + } + return token; +} + +// src/services/codefixes/generateAccessors.ts +function generateAccessorFromProperty(file, program, start, end, context, _actionName) { + const fieldInfo = getAccessorConvertiblePropertyAtPosition(file, program, start, end); + if (!fieldInfo || ts_refactor_exports.isRefactorErrorInfo(fieldInfo)) return void 0; + const changeTracker = ts_textChanges_exports.ChangeTracker.fromContext(context); + const { isStatic: isStatic2, isReadonly, fieldName, accessorName, originalName, type, container, declaration } = fieldInfo; + suppressLeadingAndTrailingTrivia(fieldName); + suppressLeadingAndTrailingTrivia(accessorName); + suppressLeadingAndTrailingTrivia(declaration); + suppressLeadingAndTrailingTrivia(container); + let accessorModifiers; + let fieldModifiers; + if (isClassLike(container)) { + const modifierFlags = getEffectiveModifierFlags(declaration); + if (isSourceFileJS(file)) { + const modifiers = factory.createModifiersFromModifierFlags(modifierFlags); + accessorModifiers = modifiers; + fieldModifiers = modifiers; + } else { + accessorModifiers = factory.createModifiersFromModifierFlags(prepareModifierFlagsForAccessor(modifierFlags)); + fieldModifiers = factory.createModifiersFromModifierFlags(prepareModifierFlagsForField(modifierFlags)); + } + if (canHaveDecorators(declaration)) { + fieldModifiers = concatenate(getDecorators(declaration), fieldModifiers); + } + } + updateFieldDeclaration(changeTracker, file, declaration, type, fieldName, fieldModifiers); + const getAccessor = generateGetAccessor(fieldName, accessorName, type, accessorModifiers, isStatic2, container); + suppressLeadingAndTrailingTrivia(getAccessor); + insertAccessor(changeTracker, file, getAccessor, declaration, container); + if (isReadonly) { + const constructor = getFirstConstructorWithBody(container); + if (constructor) { + updateReadonlyPropertyInitializerStatementConstructor(changeTracker, file, constructor, fieldName.text, originalName); + } + } else { + const setAccessor = generateSetAccessor(fieldName, accessorName, type, accessorModifiers, isStatic2, container); + suppressLeadingAndTrailingTrivia(setAccessor); + insertAccessor(changeTracker, file, setAccessor, declaration, container); + } + return changeTracker.getChanges(); +} +function isConvertibleName(name) { + return isIdentifier(name) || isStringLiteral(name); +} +function isAcceptedDeclaration(node) { + return isParameterPropertyDeclaration(node, node.parent) || isPropertyDeclaration(node) || isPropertyAssignment(node); +} +function createPropertyName(name, originalName) { + return isIdentifier(originalName) ? factory.createIdentifier(name) : factory.createStringLiteral(name); +} +function createAccessorAccessExpression(fieldName, isStatic2, container) { + const leftHead = isStatic2 ? container.name : factory.createThis(); + return isIdentifier(fieldName) ? factory.createPropertyAccessExpression(leftHead, fieldName) : factory.createElementAccessExpression(leftHead, factory.createStringLiteralFromNode(fieldName)); +} +function prepareModifierFlagsForAccessor(modifierFlags) { + modifierFlags &= ~8 /* Readonly */; + modifierFlags &= ~2 /* Private */; + if (!(modifierFlags & 4 /* Protected */)) { + modifierFlags |= 1 /* Public */; + } + return modifierFlags; +} +function prepareModifierFlagsForField(modifierFlags) { + modifierFlags &= ~1 /* Public */; + modifierFlags &= ~4 /* Protected */; + modifierFlags |= 2 /* Private */; + return modifierFlags; +} +function getAccessorConvertiblePropertyAtPosition(file, program, start, end, considerEmptySpans = true) { + const node = getTokenAtPosition(file, start); + const cursorRequest = start === end && considerEmptySpans; + const declaration = findAncestor(node.parent, isAcceptedDeclaration); + const meaning = 7 /* AccessibilityModifier */ | 256 /* Static */ | 8 /* Readonly */; + if (!declaration || !(nodeOverlapsWithStartEnd(declaration.name, file, start, end) || cursorRequest)) { + return { + error: getLocaleSpecificMessage(Diagnostics.Could_not_find_property_for_which_to_generate_accessor) + }; + } + if (!isConvertibleName(declaration.name)) { + return { + error: getLocaleSpecificMessage(Diagnostics.Name_is_not_valid) + }; + } + if ((getEffectiveModifierFlags(declaration) & 98303 /* Modifier */ | meaning) !== meaning) { + return { + error: getLocaleSpecificMessage(Diagnostics.Can_only_convert_property_with_modifier) + }; + } + const name = declaration.name.text; + const startWithUnderscore = startsWithUnderscore(name); + const fieldName = createPropertyName(startWithUnderscore ? name : getUniqueName(`_${name}`, file), declaration.name); + const accessorName = createPropertyName(startWithUnderscore ? getUniqueName(name.substring(1), file) : name, declaration.name); + return { + isStatic: hasStaticModifier(declaration), + isReadonly: hasEffectiveReadonlyModifier(declaration), + type: getDeclarationType(declaration, program), + container: declaration.kind === 170 /* Parameter */ ? declaration.parent.parent : declaration.parent, + originalName: declaration.name.text, + declaration, + fieldName, + accessorName, + renameAccessor: startWithUnderscore + }; +} +function generateGetAccessor(fieldName, accessorName, type, modifiers, isStatic2, container) { + return factory.createGetAccessorDeclaration( + modifiers, + accessorName, + [], + type, + factory.createBlock( + [ + factory.createReturnStatement( + createAccessorAccessExpression(fieldName, isStatic2, container) + ) + ], + /*multiLine*/ + true + ) + ); +} +function generateSetAccessor(fieldName, accessorName, type, modifiers, isStatic2, container) { + return factory.createSetAccessorDeclaration( + modifiers, + accessorName, + [factory.createParameterDeclaration( + /*modifiers*/ + void 0, + /*dotDotDotToken*/ + void 0, + factory.createIdentifier("value"), + /*questionToken*/ + void 0, + type + )], + factory.createBlock( + [ + factory.createExpressionStatement( + factory.createAssignment( + createAccessorAccessExpression(fieldName, isStatic2, container), + factory.createIdentifier("value") + ) + ) + ], + /*multiLine*/ + true + ) + ); +} +function updatePropertyDeclaration(changeTracker, file, declaration, type, fieldName, modifiers) { + const property = factory.updatePropertyDeclaration( + declaration, + modifiers, + fieldName, + declaration.questionToken || declaration.exclamationToken, + type, + declaration.initializer + ); + changeTracker.replaceNode(file, declaration, property); +} +function updatePropertyAssignmentDeclaration(changeTracker, file, declaration, fieldName) { + let assignment = factory.updatePropertyAssignment(declaration, fieldName, declaration.initializer); + if (assignment.modifiers || assignment.questionToken || assignment.exclamationToken) { + if (assignment === declaration) assignment = factory.cloneNode(assignment); + assignment.modifiers = void 0; + assignment.questionToken = void 0; + assignment.exclamationToken = void 0; + } + changeTracker.replacePropertyAssignment(file, declaration, assignment); +} +function updateFieldDeclaration(changeTracker, file, declaration, type, fieldName, modifiers) { + if (isPropertyDeclaration(declaration)) { + updatePropertyDeclaration(changeTracker, file, declaration, type, fieldName, modifiers); + } else if (isPropertyAssignment(declaration)) { + updatePropertyAssignmentDeclaration(changeTracker, file, declaration, fieldName); + } else { + changeTracker.replaceNode(file, declaration, factory.updateParameterDeclaration(declaration, modifiers, declaration.dotDotDotToken, cast(fieldName, isIdentifier), declaration.questionToken, declaration.type, declaration.initializer)); + } +} +function insertAccessor(changeTracker, file, accessor, declaration, container) { + isParameterPropertyDeclaration(declaration, declaration.parent) ? changeTracker.insertMemberAtStart(file, container, accessor) : isPropertyAssignment(declaration) ? changeTracker.insertNodeAfterComma(file, declaration, accessor) : changeTracker.insertNodeAfter(file, declaration, accessor); +} +function updateReadonlyPropertyInitializerStatementConstructor(changeTracker, file, constructor, fieldName, originalName) { + if (!constructor.body) return; + constructor.body.forEachChild(function recur(node) { + if (isElementAccessExpression(node) && node.expression.kind === 110 /* ThisKeyword */ && isStringLiteral(node.argumentExpression) && node.argumentExpression.text === originalName && isWriteAccess(node)) { + changeTracker.replaceNode(file, node.argumentExpression, factory.createStringLiteral(fieldName)); + } + if (isPropertyAccessExpression(node) && node.expression.kind === 110 /* ThisKeyword */ && node.name.text === originalName && isWriteAccess(node)) { + changeTracker.replaceNode(file, node.name, factory.createIdentifier(fieldName)); + } + if (!isFunctionLike(node) && !isClassLike(node)) { + node.forEachChild(recur); + } + }); +} +function getDeclarationType(declaration, program) { + const typeNode = getTypeAnnotationNode(declaration); + if (isPropertyDeclaration(declaration) && typeNode && declaration.questionToken) { + const typeChecker = program.getTypeChecker(); + const type = typeChecker.getTypeFromTypeNode(typeNode); + if (!typeChecker.isTypeAssignableTo(typeChecker.getUndefinedType(), type)) { + const types = isUnionTypeNode(typeNode) ? typeNode.types : [typeNode]; + return factory.createUnionTypeNode([...types, factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); + } + } + return typeNode; +} + +// src/services/codefixes/fixInvalidImportSyntax.ts +var fixName5 = "invalidImportSyntax"; +function getCodeFixesForImportDeclaration(context, node) { + const sourceFile = getSourceFileOfNode(node); + const namespace = getNamespaceDeclarationNode(node); + const opts = context.program.getCompilerOptions(); + const variations = []; + variations.push(createAction(context, sourceFile, node, makeImport( + namespace.name, + /*namedImports*/ + void 0, + node.moduleSpecifier, + getQuotePreference(sourceFile, context.preferences) + ))); + if (getEmitModuleKind(opts) === 1 /* CommonJS */) { + variations.push(createAction( + context, + sourceFile, + node, + factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + namespace.name, + factory.createExternalModuleReference(node.moduleSpecifier) + ) + )); + } + return variations; +} +function createAction(context, sourceFile, node, replacement) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => t.replaceNode(sourceFile, node, replacement)); + return createCodeFixActionWithoutFixAll(fixName5, changes, [Diagnostics.Replace_import_with_0, changes[0].textChanges[0].newText]); +} +registerCodeFix({ + errorCodes: [ + Diagnostics.This_expression_is_not_callable.code, + Diagnostics.This_expression_is_not_constructable.code + ], + getCodeActions: getActionsForUsageOfInvalidImport +}); +function getActionsForUsageOfInvalidImport(context) { + const sourceFile = context.sourceFile; + const targetKind = Diagnostics.This_expression_is_not_callable.code === context.errorCode ? 214 /* CallExpression */ : 215 /* NewExpression */; + const node = findAncestor(getTokenAtPosition(sourceFile, context.span.start), (a) => a.kind === targetKind); + if (!node) { + return []; + } + const expr = node.expression; + return getImportCodeFixesForExpression(context, expr); +} +registerCodeFix({ + errorCodes: [ + // The following error codes cover pretty much all assignability errors that could involve an expression + Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code, + Diagnostics.Type_0_does_not_satisfy_the_constraint_1.code, + Diagnostics.Type_0_is_not_assignable_to_type_1.code, + Diagnostics.Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated.code, + Diagnostics.Type_predicate_0_is_not_assignable_to_1.code, + Diagnostics.Property_0_of_type_1_is_not_assignable_to_2_index_type_3.code, + Diagnostics._0_index_type_1_is_not_assignable_to_2_index_type_3.code, + Diagnostics.Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2.code, + Diagnostics.Property_0_in_type_1_is_not_assignable_to_type_2.code, + Diagnostics.Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property.code, + Diagnostics.The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1.code + ], + getCodeActions: getActionsForInvalidImportLocation +}); +function getActionsForInvalidImportLocation(context) { + const sourceFile = context.sourceFile; + const node = findAncestor(getTokenAtPosition(sourceFile, context.span.start), (a) => a.getStart() === context.span.start && a.getEnd() === context.span.start + context.span.length); + if (!node) { + return []; + } + return getImportCodeFixesForExpression(context, node); +} +function getImportCodeFixesForExpression(context, expr) { + const type = context.program.getTypeChecker().getTypeAtLocation(expr); + if (!(type.symbol && isTransientSymbol(type.symbol) && type.symbol.links.originatingImport)) { + return []; + } + const fixes = []; + const relatedImport = type.symbol.links.originatingImport; + if (!isImportCall(relatedImport)) { + addRange(fixes, getCodeFixesForImportDeclaration(context, relatedImport)); + } + if (isExpression(expr) && !(isNamedDeclaration(expr.parent) && expr.parent.name === expr)) { + const sourceFile = context.sourceFile; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => t.replaceNode(sourceFile, expr, factory.createPropertyAccessExpression(expr, "default"), {})); + fixes.push(createCodeFixActionWithoutFixAll(fixName5, changes, Diagnostics.Use_synthetic_default_member)); + } + return fixes; +} + +// src/services/codefixes/fixStrictClassInitialization.ts +var fixName6 = "strictClassInitialization"; +var fixIdAddDefiniteAssignmentAssertions = "addMissingPropertyDefiniteAssignmentAssertions"; +var fixIdAddUndefinedType = "addMissingPropertyUndefinedType"; +var fixIdAddInitializer = "addMissingPropertyInitializer"; +var errorCodes54 = [Diagnostics.Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor.code]; +registerCodeFix({ + errorCodes: errorCodes54, + getCodeActions: function getCodeActionsForStrictClassInitializationErrors(context) { + const info = getInfo17(context.sourceFile, context.span.start); + if (!info) return; + const result = []; + append(result, getActionForAddMissingUndefinedType(context, info)); + append(result, getActionForAddMissingDefiniteAssignmentAssertion(context, info)); + append(result, getActionForAddMissingInitializer(context, info)); + return result; + }, + fixIds: [fixIdAddDefiniteAssignmentAssertions, fixIdAddUndefinedType, fixIdAddInitializer], + getAllCodeActions: (context) => { + return codeFixAll(context, errorCodes54, (changes, diag2) => { + const info = getInfo17(diag2.file, diag2.start); + if (!info) return; + switch (context.fixId) { + case fixIdAddDefiniteAssignmentAssertions: + addDefiniteAssignmentAssertion(changes, diag2.file, info.prop); + break; + case fixIdAddUndefinedType: + addUndefinedType(changes, diag2.file, info); + break; + case fixIdAddInitializer: + const checker = context.program.getTypeChecker(); + const initializer = getInitializer(checker, info.prop); + if (!initializer) return; + addInitializer(changes, diag2.file, info.prop, initializer); + break; + default: + Debug.fail(JSON.stringify(context.fixId)); + } + }); + } +}); +function getInfo17(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + if (isIdentifier(token) && isPropertyDeclaration(token.parent)) { + const type = getEffectiveTypeAnnotationNode(token.parent); + if (type) { + return { type, prop: token.parent, isJs: isInJSFile(token.parent) }; + } + } + return void 0; +} +function getActionForAddMissingDefiniteAssignmentAssertion(context, info) { + if (info.isJs) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addDefiniteAssignmentAssertion(t, context.sourceFile, info.prop)); + return createCodeFixAction(fixName6, changes, [Diagnostics.Add_definite_assignment_assertion_to_property_0, info.prop.getText()], fixIdAddDefiniteAssignmentAssertions, Diagnostics.Add_definite_assignment_assertions_to_all_uninitialized_properties); +} +function addDefiniteAssignmentAssertion(changeTracker, propertyDeclarationSourceFile, propertyDeclaration) { + suppressLeadingAndTrailingTrivia(propertyDeclaration); + const property = factory.updatePropertyDeclaration( + propertyDeclaration, + propertyDeclaration.modifiers, + propertyDeclaration.name, + factory.createToken(54 /* ExclamationToken */), + propertyDeclaration.type, + propertyDeclaration.initializer + ); + changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property); +} +function getActionForAddMissingUndefinedType(context, info) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addUndefinedType(t, context.sourceFile, info)); + return createCodeFixAction(fixName6, changes, [Diagnostics.Add_undefined_type_to_property_0, info.prop.name.getText()], fixIdAddUndefinedType, Diagnostics.Add_undefined_type_to_all_uninitialized_properties); +} +function addUndefinedType(changeTracker, sourceFile, info) { + const undefinedTypeNode = factory.createKeywordTypeNode(157 /* UndefinedKeyword */); + const types = isUnionTypeNode(info.type) ? info.type.types.concat(undefinedTypeNode) : [info.type, undefinedTypeNode]; + const unionTypeNode = factory.createUnionTypeNode(types); + if (info.isJs) { + changeTracker.addJSDocTags(sourceFile, info.prop, [factory.createJSDocTypeTag( + /*tagName*/ + void 0, + factory.createJSDocTypeExpression(unionTypeNode) + )]); + } else { + changeTracker.replaceNode(sourceFile, info.type, unionTypeNode); + } +} +function getActionForAddMissingInitializer(context, info) { + if (info.isJs) return void 0; + const checker = context.program.getTypeChecker(); + const initializer = getInitializer(checker, info.prop); + if (!initializer) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => addInitializer(t, context.sourceFile, info.prop, initializer)); + return createCodeFixAction(fixName6, changes, [Diagnostics.Add_initializer_to_property_0, info.prop.name.getText()], fixIdAddInitializer, Diagnostics.Add_initializers_to_all_uninitialized_properties); +} +function addInitializer(changeTracker, propertyDeclarationSourceFile, propertyDeclaration, initializer) { + suppressLeadingAndTrailingTrivia(propertyDeclaration); + const property = factory.updatePropertyDeclaration( + propertyDeclaration, + propertyDeclaration.modifiers, + propertyDeclaration.name, + propertyDeclaration.questionToken, + propertyDeclaration.type, + initializer + ); + changeTracker.replaceNode(propertyDeclarationSourceFile, propertyDeclaration, property); +} +function getInitializer(checker, propertyDeclaration) { + return getDefaultValueFromType(checker, checker.getTypeFromTypeNode(propertyDeclaration.type)); +} +function getDefaultValueFromType(checker, type) { + if (type.flags & 512 /* BooleanLiteral */) { + return type === checker.getFalseType() || type === checker.getFalseType( + /*fresh*/ + true + ) ? factory.createFalse() : factory.createTrue(); + } else if (type.isStringLiteral()) { + return factory.createStringLiteral(type.value); + } else if (type.isNumberLiteral()) { + return factory.createNumericLiteral(type.value); + } else if (type.flags & 2048 /* BigIntLiteral */) { + return factory.createBigIntLiteral(type.value); + } else if (type.isUnion()) { + return firstDefined(type.types, (t) => getDefaultValueFromType(checker, t)); + } else if (type.isClass()) { + const classDeclaration = getClassLikeDeclarationOfSymbol(type.symbol); + if (!classDeclaration || hasSyntacticModifier(classDeclaration, 64 /* Abstract */)) return void 0; + const constructorDeclaration = getFirstConstructorWithBody(classDeclaration); + if (constructorDeclaration && constructorDeclaration.parameters.length) return void 0; + return factory.createNewExpression( + factory.createIdentifier(type.symbol.name), + /*typeArguments*/ + void 0, + /*argumentsArray*/ + void 0 + ); + } else if (checker.isArrayLikeType(type)) { + return factory.createArrayLiteralExpression(); + } + return void 0; +} + +// src/services/codefixes/requireInTs.ts +var fixId43 = "requireInTs"; +var errorCodes55 = [Diagnostics.require_call_may_be_converted_to_an_import.code]; +registerCodeFix({ + errorCodes: errorCodes55, + getCodeActions(context) { + const info = getInfo18(context.sourceFile, context.program, context.span.start, context.preferences); + if (!info) { + return void 0; + } + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange35(t, context.sourceFile, info)); + return [createCodeFixAction(fixId43, changes, Diagnostics.Convert_require_to_import, fixId43, Diagnostics.Convert_all_require_to_import)]; + }, + fixIds: [fixId43], + getAllCodeActions: (context) => codeFixAll(context, errorCodes55, (changes, diag2) => { + const info = getInfo18(diag2.file, context.program, diag2.start, context.preferences); + if (info) { + doChange35(changes, context.sourceFile, info); + } + }) +}); +function doChange35(changes, sourceFile, info) { + const { allowSyntheticDefaults, defaultImportName, namedImports, statement, moduleSpecifier } = info; + changes.replaceNode( + sourceFile, + statement, + defaultImportName && !allowSyntheticDefaults ? factory.createImportEqualsDeclaration( + /*modifiers*/ + void 0, + /*isTypeOnly*/ + false, + defaultImportName, + factory.createExternalModuleReference(moduleSpecifier) + ) : factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.createImportClause( + /*phaseModifier*/ + void 0, + defaultImportName, + namedImports + ), + moduleSpecifier, + /*attributes*/ + void 0 + ) + ); +} +function getInfo18(sourceFile, program, pos, preferences) { + const { parent: parent2 } = getTokenAtPosition(sourceFile, pos); + if (!isRequireCall( + parent2, + /*requireStringLiteralLikeArgument*/ + true + )) { + Debug.failBadSyntaxKind(parent2); + } + const decl = cast(parent2.parent, isVariableDeclaration); + const quotePreference = getQuotePreference(sourceFile, preferences); + const defaultImportName = tryCast(decl.name, isIdentifier); + const namedImports = isObjectBindingPattern(decl.name) ? tryCreateNamedImportsFromObjectBindingPattern(decl.name) : void 0; + if (defaultImportName || namedImports) { + const moduleSpecifier = first(parent2.arguments); + return { + allowSyntheticDefaults: getAllowSyntheticDefaultImports(program.getCompilerOptions()), + defaultImportName, + namedImports, + statement: cast(decl.parent.parent, isVariableStatement), + moduleSpecifier: isNoSubstitutionTemplateLiteral(moduleSpecifier) ? factory.createStringLiteral(moduleSpecifier.text, quotePreference === 0 /* Single */) : moduleSpecifier + }; + } +} +function tryCreateNamedImportsFromObjectBindingPattern(node) { + const importSpecifiers = []; + for (const element of node.elements) { + if (!isIdentifier(element.name) || element.initializer) { + return void 0; + } + importSpecifiers.push(factory.createImportSpecifier( + /*isTypeOnly*/ + false, + tryCast(element.propertyName, isIdentifier), + element.name + )); + } + if (importSpecifiers.length) { + return factory.createNamedImports(importSpecifiers); + } +} + +// src/services/codefixes/useDefaultImport.ts +var fixId44 = "useDefaultImport"; +var errorCodes56 = [Diagnostics.Import_may_be_converted_to_a_default_import.code]; +registerCodeFix({ + errorCodes: errorCodes56, + getCodeActions(context) { + const { sourceFile, span: { start } } = context; + const info = getInfo19(sourceFile, start); + if (!info) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange36(t, sourceFile, info, context.preferences)); + return [createCodeFixAction(fixId44, changes, Diagnostics.Convert_to_default_import, fixId44, Diagnostics.Convert_all_to_default_imports)]; + }, + fixIds: [fixId44], + getAllCodeActions: (context) => codeFixAll(context, errorCodes56, (changes, diag2) => { + const info = getInfo19(diag2.file, diag2.start); + if (info) doChange36(changes, diag2.file, info, context.preferences); + }) +}); +function getInfo19(sourceFile, pos) { + const name = getTokenAtPosition(sourceFile, pos); + if (!isIdentifier(name)) return void 0; + const { parent: parent2 } = name; + if (isImportEqualsDeclaration(parent2) && isExternalModuleReference(parent2.moduleReference)) { + return { importNode: parent2, name, moduleSpecifier: parent2.moduleReference.expression }; + } else if (isNamespaceImport(parent2) && isImportDeclaration(parent2.parent.parent)) { + const importNode = parent2.parent.parent; + return { importNode, name, moduleSpecifier: importNode.moduleSpecifier }; + } +} +function doChange36(changes, sourceFile, info, preferences) { + changes.replaceNode(sourceFile, info.importNode, makeImport( + info.name, + /*namedImports*/ + void 0, + info.moduleSpecifier, + getQuotePreference(sourceFile, preferences) + )); +} + +// src/services/codefixes/useBigintLiteral.ts +var fixId45 = "useBigintLiteral"; +var errorCodes57 = [ + Diagnostics.Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accurately_as_integers.code +]; +registerCodeFix({ + errorCodes: errorCodes57, + getCodeActions: function getCodeActionsToUseBigintLiteral(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange10(t, context.sourceFile, context.span)); + if (changes.length > 0) { + return [createCodeFixAction(fixId45, changes, Diagnostics.Convert_to_a_bigint_numeric_literal, fixId45, Diagnostics.Convert_all_to_bigint_numeric_literals)]; + } + }, + fixIds: [fixId45], + getAllCodeActions: (context) => { + return codeFixAll(context, errorCodes57, (changes, diag2) => makeChange10(changes, diag2.file, diag2)); + } +}); +function makeChange10(changeTracker, sourceFile, span) { + const numericLiteral = tryCast(getTokenAtPosition(sourceFile, span.start), isNumericLiteral); + if (!numericLiteral) { + return; + } + const newText = numericLiteral.getText(sourceFile) + "n"; + changeTracker.replaceNode(sourceFile, numericLiteral, factory.createBigIntLiteral(newText)); +} + +// src/services/codefixes/fixAddModuleReferTypeMissingTypeof.ts +var fixIdAddMissingTypeof = "fixAddModuleReferTypeMissingTypeof"; +var fixId46 = fixIdAddMissingTypeof; +var errorCodes58 = [Diagnostics.Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0.code]; +registerCodeFix({ + errorCodes: errorCodes58, + getCodeActions: function getCodeActionsToAddMissingTypeof(context) { + const { sourceFile, span } = context; + const importType = getImportTypeNode(sourceFile, span.start); + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange37(t, sourceFile, importType)); + return [createCodeFixAction(fixId46, changes, Diagnostics.Add_missing_typeof, fixId46, Diagnostics.Add_missing_typeof)]; + }, + fixIds: [fixId46], + getAllCodeActions: (context) => codeFixAll(context, errorCodes58, (changes, diag2) => doChange37(changes, context.sourceFile, getImportTypeNode(diag2.file, diag2.start))) +}); +function getImportTypeNode(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + Debug.assert(token.kind === 102 /* ImportKeyword */, "This token should be an ImportKeyword"); + Debug.assert(token.parent.kind === 206 /* ImportType */, "Token parent should be an ImportType"); + return token.parent; +} +function doChange37(changes, sourceFile, importType) { + const newTypeNode = factory.updateImportTypeNode( + importType, + importType.argument, + importType.attributes, + importType.qualifier, + importType.typeArguments, + /*isTypeOf*/ + true + ); + changes.replaceNode(sourceFile, importType, newTypeNode); +} + +// src/services/codefixes/wrapJsxInFragment.ts +var fixID2 = "wrapJsxInFragment"; +var errorCodes59 = [Diagnostics.JSX_expressions_must_have_one_parent_element.code]; +registerCodeFix({ + errorCodes: errorCodes59, + getCodeActions: function getCodeActionsToWrapJsxInFragment(context) { + const { sourceFile, span } = context; + const node = findNodeToFix(sourceFile, span.start); + if (!node) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange38(t, sourceFile, node)); + return [createCodeFixAction(fixID2, changes, Diagnostics.Wrap_in_JSX_fragment, fixID2, Diagnostics.Wrap_all_unparented_JSX_in_JSX_fragment)]; + }, + fixIds: [fixID2], + getAllCodeActions: (context) => codeFixAll(context, errorCodes59, (changes, diag2) => { + const node = findNodeToFix(context.sourceFile, diag2.start); + if (!node) return void 0; + doChange38(changes, context.sourceFile, node); + }) +}); +function findNodeToFix(sourceFile, pos) { + const lessThanToken = getTokenAtPosition(sourceFile, pos); + const firstJsxElementOrOpenElement = lessThanToken.parent; + let binaryExpr = firstJsxElementOrOpenElement.parent; + if (!isBinaryExpression(binaryExpr)) { + binaryExpr = binaryExpr.parent; + if (!isBinaryExpression(binaryExpr)) return void 0; + } + if (!nodeIsMissing(binaryExpr.operatorToken)) return void 0; + return binaryExpr; +} +function doChange38(changeTracker, sf, node) { + const jsx = flattenInvalidBinaryExpr(node); + if (jsx) changeTracker.replaceNode(sf, node, factory.createJsxFragment(factory.createJsxOpeningFragment(), jsx, factory.createJsxJsxClosingFragment())); +} +function flattenInvalidBinaryExpr(node) { + const children = []; + let current = node; + while (true) { + if (isBinaryExpression(current) && nodeIsMissing(current.operatorToken) && current.operatorToken.kind === 28 /* CommaToken */) { + children.push(current.left); + if (isJsxChild(current.right)) { + children.push(current.right); + return children; + } else if (isBinaryExpression(current.right)) { + current = current.right; + continue; + } else return void 0; + } else return void 0; + } +} + +// src/services/codefixes/wrapDecoratorInParentheses.ts +var fixId47 = "wrapDecoratorInParentheses"; +var errorCodes60 = [Diagnostics.Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator.code]; +registerCodeFix({ + errorCodes: errorCodes60, + getCodeActions: function getCodeActionsToWrapDecoratorExpressionInParentheses(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange11(t, context.sourceFile, context.span.start)); + return [createCodeFixAction(fixId47, changes, Diagnostics.Wrap_in_parentheses, fixId47, Diagnostics.Wrap_all_invalid_decorator_expressions_in_parentheses)]; + }, + fixIds: [fixId47], + getAllCodeActions: (context) => codeFixAll(context, errorCodes60, (changes, diag2) => makeChange11(changes, diag2.file, diag2.start)) +}); +function makeChange11(changeTracker, sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + const decorator = findAncestor(token, isDecorator); + Debug.assert(!!decorator, "Expected position to be owned by a decorator."); + const replacement = factory.createParenthesizedExpression(decorator.expression); + changeTracker.replaceNode(sourceFile, decorator.expression, replacement); +} + +// src/services/codefixes/convertToMappedObjectType.ts +var fixId48 = "fixConvertToMappedObjectType"; +var errorCodes61 = [Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead.code]; +registerCodeFix({ + errorCodes: errorCodes61, + getCodeActions: function getCodeActionsToConvertToMappedTypeObject(context) { + const { sourceFile, span } = context; + const info = getInfo20(sourceFile, span.start); + if (!info) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange39(t, sourceFile, info)); + const name = idText(info.container.name); + return [createCodeFixAction(fixId48, changes, [Diagnostics.Convert_0_to_mapped_object_type, name], fixId48, [Diagnostics.Convert_0_to_mapped_object_type, name])]; + }, + fixIds: [fixId48], + getAllCodeActions: (context) => codeFixAll(context, errorCodes61, (changes, diag2) => { + const info = getInfo20(diag2.file, diag2.start); + if (info) doChange39(changes, diag2.file, info); + }) +}); +function getInfo20(sourceFile, pos) { + const token = getTokenAtPosition(sourceFile, pos); + const indexSignature = tryCast(token.parent.parent, isIndexSignatureDeclaration); + if (!indexSignature) return void 0; + const container = isInterfaceDeclaration(indexSignature.parent) ? indexSignature.parent : tryCast(indexSignature.parent.parent, isTypeAliasDeclaration); + if (!container) return void 0; + return { indexSignature, container }; +} +function createTypeAliasFromInterface(declaration, type) { + return factory.createTypeAliasDeclaration(declaration.modifiers, declaration.name, declaration.typeParameters, type); +} +function doChange39(changes, sourceFile, { indexSignature, container }) { + const members = isInterfaceDeclaration(container) ? container.members : container.type.members; + const otherMembers = members.filter((member) => !isIndexSignatureDeclaration(member)); + const parameter = first(indexSignature.parameters); + const mappedTypeParameter = factory.createTypeParameterDeclaration( + /*modifiers*/ + void 0, + cast(parameter.name, isIdentifier), + parameter.type + ); + const mappedIntersectionType = factory.createMappedTypeNode( + hasEffectiveReadonlyModifier(indexSignature) ? factory.createModifier(148 /* ReadonlyKeyword */) : void 0, + mappedTypeParameter, + /*nameType*/ + void 0, + indexSignature.questionToken, + indexSignature.type, + /*members*/ + void 0 + ); + const intersectionType = factory.createIntersectionTypeNode([ + ...getAllSuperTypeNodes(container), + mappedIntersectionType, + ...otherMembers.length ? [factory.createTypeLiteralNode(otherMembers)] : emptyArray + ]); + changes.replaceNode(sourceFile, container, createTypeAliasFromInterface(container, intersectionType)); +} + +// src/services/codefixes/removeAccidentalCallParentheses.ts +var fixId49 = "removeAccidentalCallParentheses"; +var errorCodes62 = [ + Diagnostics.This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without.code +]; +registerCodeFix({ + errorCodes: errorCodes62, + getCodeActions(context) { + const callExpression = findAncestor(getTokenAtPosition(context.sourceFile, context.span.start), isCallExpression); + if (!callExpression) { + return void 0; + } + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => { + t.deleteRange(context.sourceFile, { pos: callExpression.expression.end, end: callExpression.end }); + }); + return [createCodeFixActionWithoutFixAll(fixId49, changes, Diagnostics.Remove_parentheses)]; + }, + fixIds: [fixId49] +}); + +// src/services/codefixes/removeUnnecessaryAwait.ts +var fixId50 = "removeUnnecessaryAwait"; +var errorCodes63 = [ + Diagnostics.await_has_no_effect_on_the_type_of_this_expression.code +]; +registerCodeFix({ + errorCodes: errorCodes63, + getCodeActions: function getCodeActionsToRemoveUnnecessaryAwait(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange12(t, context.sourceFile, context.span)); + if (changes.length > 0) { + return [createCodeFixAction(fixId50, changes, Diagnostics.Remove_unnecessary_await, fixId50, Diagnostics.Remove_all_unnecessary_uses_of_await)]; + } + }, + fixIds: [fixId50], + getAllCodeActions: (context) => { + return codeFixAll(context, errorCodes63, (changes, diag2) => makeChange12(changes, diag2.file, diag2)); + } +}); +function makeChange12(changeTracker, sourceFile, span) { + const awaitKeyword = tryCast(getTokenAtPosition(sourceFile, span.start), (node) => node.kind === 135 /* AwaitKeyword */); + const awaitExpression = awaitKeyword && tryCast(awaitKeyword.parent, isAwaitExpression); + if (!awaitExpression) { + return; + } + let expressionToReplace = awaitExpression; + const hasSurroundingParens = isParenthesizedExpression(awaitExpression.parent); + if (hasSurroundingParens) { + const leftMostExpression = getLeftmostExpression( + awaitExpression.expression, + /*stopAtCallExpressions*/ + false + ); + if (isIdentifier(leftMostExpression)) { + const precedingToken = findPrecedingToken(awaitExpression.parent.pos, sourceFile); + if (precedingToken && precedingToken.kind !== 105 /* NewKeyword */) { + expressionToReplace = awaitExpression.parent; + } + } + } + changeTracker.replaceNode(sourceFile, expressionToReplace, awaitExpression.expression); +} + +// src/services/codefixes/splitTypeOnlyImport.ts +var errorCodes64 = [Diagnostics.A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both.code]; +var fixId51 = "splitTypeOnlyImport"; +registerCodeFix({ + errorCodes: errorCodes64, + fixIds: [fixId51], + getCodeActions: function getCodeActionsToSplitTypeOnlyImport(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => { + return splitTypeOnlyImport(t, getImportDeclaration2(context.sourceFile, context.span), context); + }); + if (changes.length) { + return [createCodeFixAction(fixId51, changes, Diagnostics.Split_into_two_separate_import_declarations, fixId51, Diagnostics.Split_all_invalid_type_only_imports)]; + } + }, + getAllCodeActions: (context) => codeFixAll(context, errorCodes64, (changes, error2) => { + splitTypeOnlyImport(changes, getImportDeclaration2(context.sourceFile, error2), context); + }) +}); +function getImportDeclaration2(sourceFile, span) { + return findAncestor(getTokenAtPosition(sourceFile, span.start), isImportDeclaration); +} +function splitTypeOnlyImport(changes, importDeclaration, context) { + if (!importDeclaration) { + return; + } + const importClause = Debug.checkDefined(importDeclaration.importClause); + changes.replaceNode( + context.sourceFile, + importDeclaration, + factory.updateImportDeclaration( + importDeclaration, + importDeclaration.modifiers, + factory.updateImportClause( + importClause, + importClause.phaseModifier, + importClause.name, + /*namedBindings*/ + void 0 + ), + importDeclaration.moduleSpecifier, + importDeclaration.attributes + ) + ); + changes.insertNodeAfter( + context.sourceFile, + importDeclaration, + factory.createImportDeclaration( + /*modifiers*/ + void 0, + factory.updateImportClause( + importClause, + importClause.phaseModifier, + /*name*/ + void 0, + importClause.namedBindings + ), + importDeclaration.moduleSpecifier, + importDeclaration.attributes + ) + ); +} + +// src/services/codefixes/convertConstToLet.ts +var fixId52 = "fixConvertConstToLet"; +var errorCodes65 = [Diagnostics.Cannot_assign_to_0_because_it_is_a_constant.code]; +registerCodeFix({ + errorCodes: errorCodes65, + getCodeActions: function getCodeActionsToConvertConstToLet(context) { + const { sourceFile, span, program } = context; + const info = getInfo21(sourceFile, span.start, program); + if (info === void 0) return; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange40(t, sourceFile, info.token)); + return [createCodeFixActionMaybeFixAll(fixId52, changes, Diagnostics.Convert_const_to_let, fixId52, Diagnostics.Convert_all_const_to_let)]; + }, + getAllCodeActions: (context) => { + const { program } = context; + const seen = /* @__PURE__ */ new Set(); + return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, (changes) => { + eachDiagnostic(context, errorCodes65, (diag2) => { + const info = getInfo21(diag2.file, diag2.start, program); + if (info) { + if (addToSeen(seen, getSymbolId(info.symbol))) { + return doChange40(changes, diag2.file, info.token); + } + } + return void 0; + }); + })); + }, + fixIds: [fixId52] +}); +function getInfo21(sourceFile, pos, program) { + var _a; + const checker = program.getTypeChecker(); + const symbol = checker.getSymbolAtLocation(getTokenAtPosition(sourceFile, pos)); + if (symbol === void 0) return; + const declaration = tryCast((_a = symbol == null ? void 0 : symbol.valueDeclaration) == null ? void 0 : _a.parent, isVariableDeclarationList); + if (declaration === void 0) return; + const constToken = findChildOfKind(declaration, 87 /* ConstKeyword */, sourceFile); + if (constToken === void 0) return; + return { symbol, token: constToken }; +} +function doChange40(changes, sourceFile, token) { + changes.replaceNode(sourceFile, token, factory.createToken(121 /* LetKeyword */)); +} + +// src/services/codefixes/fixExpectedComma.ts +var fixId53 = "fixExpectedComma"; +var expectedErrorCode = Diagnostics._0_expected.code; +var errorCodes66 = [expectedErrorCode]; +registerCodeFix({ + errorCodes: errorCodes66, + getCodeActions(context) { + const { sourceFile } = context; + const info = getInfo22(sourceFile, context.span.start, context.errorCode); + if (!info) return void 0; + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => doChange41(t, sourceFile, info)); + return [createCodeFixAction( + fixId53, + changes, + [Diagnostics.Change_0_to_1, ";", ","], + fixId53, + [Diagnostics.Change_0_to_1, ";", ","] + )]; + }, + fixIds: [fixId53], + getAllCodeActions: (context) => codeFixAll(context, errorCodes66, (changes, diag2) => { + const info = getInfo22(diag2.file, diag2.start, diag2.code); + if (info) doChange41(changes, context.sourceFile, info); + }) +}); +function getInfo22(sourceFile, pos, _) { + const node = getTokenAtPosition(sourceFile, pos); + return node.kind === 27 /* SemicolonToken */ && node.parent && (isObjectLiteralExpression(node.parent) || isArrayLiteralExpression(node.parent)) ? { node } : void 0; +} +function doChange41(changes, sourceFile, { node }) { + const newNode = factory.createToken(28 /* CommaToken */); + changes.replaceNode(sourceFile, node, newNode); +} + +// src/services/codefixes/fixAddVoidToPromise.ts +var fixName7 = "addVoidToPromise"; +var fixId54 = "addVoidToPromise"; +var errorCodes67 = [ + Diagnostics.Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_without_arguments.code, + Diagnostics.Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise.code +]; +registerCodeFix({ + errorCodes: errorCodes67, + fixIds: [fixId54], + getCodeActions(context) { + const changes = ts_textChanges_exports.ChangeTracker.with(context, (t) => makeChange13(t, context.sourceFile, context.span, context.program)); + if (changes.length > 0) { + return [createCodeFixAction(fixName7, changes, Diagnostics.Add_void_to_Promise_resolved_without_a_value, fixId54, Diagnostics.Add_void_to_all_Promises_resolved_without_a_value)]; + } + }, + getAllCodeActions(context) { + return codeFixAll(context, errorCodes67, (changes, diag2) => makeChange13(changes, diag2.file, diag2, context.program, /* @__PURE__ */ new Set())); + } +}); +function makeChange13(changes, sourceFile, span, program, seen) { + const node = getTokenAtPosition(sourceFile, span.start); + if (!isIdentifier(node) || !isCallExpression(node.parent) || node.parent.expression !== node || node.parent.arguments.length !== 0) return; + const checker = program.getTypeChecker(); + const symbol = checker.getSymbolAtLocation(node); + const decl = symbol == null ? void 0 : symbol.valueDeclaration; + if (!decl || !isParameter(decl) || !isNewExpression(decl.parent.parent)) return; + if (seen == null ? void 0 : seen.has(decl)) return; + seen == null ? void 0 : seen.add(decl); + const typeArguments = getEffectiveTypeArguments(decl.parent.parent); + if (some(typeArguments)) { + const typeArgument = typeArguments[0]; + const needsParens = !isUnionTypeNode(typeArgument) && !isParenthesizedTypeNode(typeArgument) && isParenthesizedTypeNode(factory.createUnionTypeNode([typeArgument, factory.createKeywordTypeNode(116 /* VoidKeyword */)]).types[0]); + if (needsParens) { + changes.insertText(sourceFile, typeArgument.pos, "("); + } + changes.insertText(sourceFile, typeArgument.end, needsParens ? ") | void" : " | void"); + } else { + const signature = checker.getResolvedSignature(node.parent); + const parameter = signature == null ? void 0 : signature.parameters[0]; + const parameterType = parameter && checker.getTypeOfSymbolAtLocation(parameter, decl.parent.parent); + if (isInJSFile(decl)) { + if (!parameterType || parameterType.flags & 3 /* AnyOrUnknown */) { + changes.insertText(sourceFile, decl.parent.parent.end, `)`); + changes.insertText(sourceFile, skipTrivia(sourceFile.text, decl.parent.parent.pos), `/** @type {Promise} */(`); + } + } else { + if (!parameterType || parameterType.flags & 2 /* Unknown */) { + changes.insertText(sourceFile, decl.parent.parent.expression.end, ""); + } + } + } +} +function getEffectiveTypeArguments(node) { + var _a; + if (isInJSFile(node)) { + if (isParenthesizedExpression(node.parent)) { + const jsDocType = (_a = getJSDocTypeTag(node.parent)) == null ? void 0 : _a.typeExpression.type; + if (jsDocType && isTypeReferenceNode(jsDocType) && isIdentifier(jsDocType.typeName) && idText(jsDocType.typeName) === "Promise") { + return jsDocType.typeArguments; + } + } + } else { + return node.typeArguments; + } +} + +// src/services/_namespaces/ts.Completions.ts +var ts_Completions_exports = {}; +__export(ts_Completions_exports, { + CompletionKind: () => CompletionKind, + CompletionSource: () => CompletionSource, + SortText: () => SortText, + StringCompletions: () => ts_Completions_StringCompletions_exports, + SymbolOriginInfoKind: () => SymbolOriginInfoKind, + createCompletionDetails: () => createCompletionDetails, + createCompletionDetailsForSymbol: () => createCompletionDetailsForSymbol, + getCompletionEntriesFromSymbols: () => getCompletionEntriesFromSymbols, + getCompletionEntryDetails: () => getCompletionEntryDetails, + getCompletionEntrySymbol: () => getCompletionEntrySymbol, + getCompletionsAtPosition: () => getCompletionsAtPosition, + getDefaultCommitCharacters: () => getDefaultCommitCharacters, + getPropertiesForObjectExpression: () => getPropertiesForObjectExpression, + moduleSpecifierResolutionCacheAttemptLimit: () => moduleSpecifierResolutionCacheAttemptLimit, + moduleSpecifierResolutionLimit: () => moduleSpecifierResolutionLimit +}); + +// src/services/completions.ts +var moduleSpecifierResolutionLimit = 100; +var moduleSpecifierResolutionCacheAttemptLimit = 1e3; +var SortText = { + // Presets + LocalDeclarationPriority: "10", + LocationPriority: "11", + OptionalMember: "12", + MemberDeclaredBySpreadAssignment: "13", + SuggestedClassMembers: "14", + GlobalsOrKeywords: "15", + AutoImportSuggestions: "16", + ClassMemberSnippets: "17", + JavascriptIdentifiers: "18", + // Transformations + Deprecated(sortText) { + return "z" + sortText; + }, + ObjectLiteralProperty(presetSortText, symbolDisplayName) { + return `${presetSortText}\0${symbolDisplayName}\0`; + }, + SortBelow(sortText) { + return sortText + "1"; + } +}; +var allCommitCharacters = [".", ",", ";"]; +var noCommaCommitCharacters = [".", ";"]; +var CompletionSource = /* @__PURE__ */ ((CompletionSource2) => { + CompletionSource2["ThisProperty"] = "ThisProperty/"; + CompletionSource2["ClassMemberSnippet"] = "ClassMemberSnippet/"; + CompletionSource2["TypeOnlyAlias"] = "TypeOnlyAlias/"; + CompletionSource2["ObjectLiteralMethodSnippet"] = "ObjectLiteralMethodSnippet/"; + CompletionSource2["SwitchCases"] = "SwitchCases/"; + CompletionSource2["ObjectLiteralMemberWithComma"] = "ObjectLiteralMemberWithComma/"; + return CompletionSource2; +})(CompletionSource || {}); +var SymbolOriginInfoKind = /* @__PURE__ */ ((SymbolOriginInfoKind2) => { + SymbolOriginInfoKind2[SymbolOriginInfoKind2["ThisType"] = 1] = "ThisType"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["SymbolMember"] = 2] = "SymbolMember"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["Export"] = 4] = "Export"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["Promise"] = 8] = "Promise"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["Nullable"] = 16] = "Nullable"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["ResolvedExport"] = 32] = "ResolvedExport"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["TypeOnlyAlias"] = 64] = "TypeOnlyAlias"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["ObjectLiteralMethod"] = 128] = "ObjectLiteralMethod"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["Ignore"] = 256] = "Ignore"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["ComputedPropertyName"] = 512] = "ComputedPropertyName"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["SymbolMemberNoExport"] = 2 /* SymbolMember */] = "SymbolMemberNoExport"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["SymbolMemberExport"] = 6] = "SymbolMemberExport"; + return SymbolOriginInfoKind2; +})(SymbolOriginInfoKind || {}); +function originIsThisType(origin) { + return !!(origin.kind & 1 /* ThisType */); +} +function originIsSymbolMember(origin) { + return !!(origin.kind & 2 /* SymbolMember */); +} +function originIsExport(origin) { + return !!(origin && origin.kind & 4 /* Export */); +} +function originIsResolvedExport(origin) { + return !!(origin && origin.kind === 32 /* ResolvedExport */); +} +function originIncludesSymbolName(origin) { + return originIsExport(origin) || originIsResolvedExport(origin) || originIsComputedPropertyName(origin); +} +function originIsPackageJsonImport(origin) { + return (originIsExport(origin) || originIsResolvedExport(origin)) && !!origin.isFromPackageJson; +} +function originIsPromise(origin) { + return !!(origin.kind & 8 /* Promise */); +} +function originIsNullableMember(origin) { + return !!(origin.kind & 16 /* Nullable */); +} +function originIsTypeOnlyAlias(origin) { + return !!(origin && origin.kind & 64 /* TypeOnlyAlias */); +} +function originIsObjectLiteralMethod(origin) { + return !!(origin && origin.kind & 128 /* ObjectLiteralMethod */); +} +function originIsIgnore(origin) { + return !!(origin && origin.kind & 256 /* Ignore */); +} +function originIsComputedPropertyName(origin) { + return !!(origin && origin.kind & 512 /* ComputedPropertyName */); +} +function resolvingModuleSpecifiers(logPrefix, host, resolver, program, position, preferences, isForImportStatementCompletion, isValidTypeOnlyUseSite, cb) { + var _a, _b, _c, _d; + const start = timestamp(); + const needsFullResolution = isForImportStatementCompletion || getResolvePackageJsonExports(program.getCompilerOptions()) || ((_a = preferences.autoImportSpecifierExcludeRegexes) == null ? void 0 : _a.length); + let skippedAny = false; + let ambientCount = 0; + let resolvedCount = 0; + let resolvedFromCacheCount = 0; + let cacheAttemptCount = 0; + const result = cb({ + tryResolve, + skippedAny: () => skippedAny, + resolvedAny: () => resolvedCount > 0, + resolvedBeyondLimit: () => resolvedCount > moduleSpecifierResolutionLimit + }); + const hitRateMessage = cacheAttemptCount ? ` (${(resolvedFromCacheCount / cacheAttemptCount * 100).toFixed(1)}% hit rate)` : ""; + (_b = host.log) == null ? void 0 : _b.call(host, `${logPrefix}: resolved ${resolvedCount} module specifiers, plus ${ambientCount} ambient and ${resolvedFromCacheCount} from cache${hitRateMessage}`); + (_c = host.log) == null ? void 0 : _c.call(host, `${logPrefix}: response is ${skippedAny ? "incomplete" : "complete"}`); + (_d = host.log) == null ? void 0 : _d.call(host, `${logPrefix}: ${timestamp() - start}`); + return result; + function tryResolve(exportInfo, isFromAmbientModule) { + if (isFromAmbientModule) { + const result3 = resolver.getModuleSpecifierForBestExportInfo(exportInfo, position, isValidTypeOnlyUseSite); + if (result3) { + ambientCount++; + } + return result3 || "failed"; + } + const shouldResolveModuleSpecifier = needsFullResolution || preferences.allowIncompleteCompletions && resolvedCount < moduleSpecifierResolutionLimit; + const shouldGetModuleSpecifierFromCache = !shouldResolveModuleSpecifier && preferences.allowIncompleteCompletions && cacheAttemptCount < moduleSpecifierResolutionCacheAttemptLimit; + const result2 = shouldResolveModuleSpecifier || shouldGetModuleSpecifierFromCache ? resolver.getModuleSpecifierForBestExportInfo(exportInfo, position, isValidTypeOnlyUseSite, shouldGetModuleSpecifierFromCache) : void 0; + if (!shouldResolveModuleSpecifier && !shouldGetModuleSpecifierFromCache || shouldGetModuleSpecifierFromCache && !result2) { + skippedAny = true; + } + resolvedCount += (result2 == null ? void 0 : result2.computedWithoutCacheCount) || 0; + resolvedFromCacheCount += exportInfo.length - ((result2 == null ? void 0 : result2.computedWithoutCacheCount) || 0); + if (shouldGetModuleSpecifierFromCache) { + cacheAttemptCount++; + } + return result2 || (needsFullResolution ? "failed" : "skipped"); + } +} +function getDefaultCommitCharacters(isNewIdentifierLocation) { + if (isNewIdentifierLocation) { + return []; + } + return allCommitCharacters; +} +function getCompletionsAtPosition(host, program, log, sourceFile, position, preferences, triggerCharacter, completionKind, cancellationToken, formatContext, includeSymbol = false) { + var _a; + const { previousToken } = getRelevantTokens(position, sourceFile); + if (triggerCharacter && !isInString(sourceFile, position, previousToken) && !isValidTrigger(sourceFile, triggerCharacter, previousToken, position)) { + return void 0; + } + if (triggerCharacter === " ") { + if (preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) { + return { + isGlobalCompletion: true, + isMemberCompletion: false, + isNewIdentifierLocation: true, + isIncomplete: true, + entries: [], + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + true + ) + }; + } + return void 0; + } + const compilerOptions = program.getCompilerOptions(); + const checker = program.getTypeChecker(); + const incompleteCompletionsCache = preferences.allowIncompleteCompletions ? (_a = host.getIncompleteCompletionsCache) == null ? void 0 : _a.call(host) : void 0; + if (incompleteCompletionsCache && completionKind === 3 /* TriggerForIncompleteCompletions */ && previousToken && isIdentifier(previousToken)) { + const incompleteContinuation = continuePreviousIncompleteResponse(incompleteCompletionsCache, sourceFile, previousToken, program, host, preferences, cancellationToken, position); + if (incompleteContinuation) { + return incompleteContinuation; + } + } else { + incompleteCompletionsCache == null ? void 0 : incompleteCompletionsCache.clear(); + } + const stringCompletions = ts_Completions_StringCompletions_exports.getStringLiteralCompletions(sourceFile, position, previousToken, compilerOptions, host, program, log, preferences, includeSymbol); + if (stringCompletions) { + return stringCompletions; + } + if (previousToken && isBreakOrContinueStatement(previousToken.parent) && (previousToken.kind === 83 /* BreakKeyword */ || previousToken.kind === 88 /* ContinueKeyword */ || previousToken.kind === 80 /* Identifier */)) { + return getLabelCompletionAtPosition(previousToken.parent); + } + const completionData = getCompletionData( + program, + log, + sourceFile, + compilerOptions, + position, + preferences, + /*detailsEntryId*/ + void 0, + host, + formatContext, + cancellationToken + ); + if (!completionData) { + return void 0; + } + switch (completionData.kind) { + case 0 /* Data */: + const response = completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext, position, includeSymbol); + if (response == null ? void 0 : response.isIncomplete) { + incompleteCompletionsCache == null ? void 0 : incompleteCompletionsCache.set(response); + } + return response; + case 1 /* JsDocTagName */: + return jsdocCompletionInfo([ + ...ts_JsDoc_exports.getJSDocTagNameCompletions(), + ...getJSDocParameterCompletions( + sourceFile, + position, + checker, + compilerOptions, + preferences, + /*tagNameOnly*/ + true + ) + ]); + case 2 /* JsDocTag */: + return jsdocCompletionInfo([ + ...ts_JsDoc_exports.getJSDocTagCompletions(), + ...getJSDocParameterCompletions( + sourceFile, + position, + checker, + compilerOptions, + preferences, + /*tagNameOnly*/ + false + ) + ]); + case 3 /* JsDocParameterName */: + return jsdocCompletionInfo(ts_JsDoc_exports.getJSDocParameterNameCompletions(completionData.tag)); + case 4 /* Keywords */: + return specificKeywordCompletionInfo(completionData.keywordCompletions, completionData.isNewIdentifierLocation); + default: + return Debug.assertNever(completionData); + } +} +function compareCompletionEntries(entryInArray, entryToInsert) { + var _a, _b; + let result = compareStringsCaseSensitiveUI(entryInArray.sortText, entryToInsert.sortText); + if (result === 0 /* EqualTo */) { + result = compareStringsCaseSensitiveUI(entryInArray.name, entryToInsert.name); + } + if (result === 0 /* EqualTo */ && ((_a = entryInArray.data) == null ? void 0 : _a.moduleSpecifier) && ((_b = entryToInsert.data) == null ? void 0 : _b.moduleSpecifier)) { + result = compareNumberOfDirectorySeparators( + entryInArray.data.moduleSpecifier, + entryToInsert.data.moduleSpecifier + ); + } + if (result === 0 /* EqualTo */) { + return -1 /* LessThan */; + } + return result; +} +function completionEntryDataIsResolved(data) { + return !!(data == null ? void 0 : data.moduleSpecifier); +} +function continuePreviousIncompleteResponse(cache, file, location, program, host, preferences, cancellationToken, position) { + const previousResponse = cache.get(); + if (!previousResponse) return void 0; + const touchNode = getTouchingPropertyName(file, position); + const lowerCaseTokenText = location.text.toLowerCase(); + const exportMap = getExportInfoMap(file, host, program, preferences, cancellationToken); + const newEntries = resolvingModuleSpecifiers( + "continuePreviousIncompleteResponse", + host, + ts_codefix_exports.createImportSpecifierResolver(file, program, host, preferences), + program, + location.getStart(), + preferences, + /*isForImportStatementCompletion*/ + false, + isValidTypeOnlyAliasUseSite(location), + (context) => { + const entries = mapDefined(previousResponse.entries, (entry) => { + var _a; + if (!entry.hasAction || !entry.source || !entry.data || completionEntryDataIsResolved(entry.data)) { + return entry; + } + if (!charactersFuzzyMatchInString(entry.name, lowerCaseTokenText)) { + return void 0; + } + const { origin } = Debug.checkDefined(getAutoImportSymbolFromCompletionEntryData(entry.name, entry.data, program, host)); + const info = exportMap.get(file.path, entry.data.exportMapKey); + const result = info && context.tryResolve(info, !isExternalModuleNameRelative(stripQuotes(origin.moduleSymbol.name))); + if (result === "skipped") return entry; + if (!result || result === "failed") { + (_a = host.log) == null ? void 0 : _a.call(host, `Unexpected failure resolving auto import for '${entry.name}' from '${entry.source}'`); + return void 0; + } + const newOrigin = { + ...origin, + kind: 32 /* ResolvedExport */, + moduleSpecifier: result.moduleSpecifier + }; + entry.data = originToCompletionEntryData(newOrigin); + entry.source = getSourceFromOrigin(newOrigin); + entry.sourceDisplay = [textPart(newOrigin.moduleSpecifier)]; + return entry; + }); + if (!context.skippedAny()) { + previousResponse.isIncomplete = void 0; + } + return entries; + } + ); + previousResponse.entries = newEntries; + previousResponse.flags = (previousResponse.flags || 0) | 4 /* IsContinuation */; + previousResponse.optionalReplacementSpan = getOptionalReplacementSpan(touchNode); + return previousResponse; +} +function jsdocCompletionInfo(entries) { + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: false, + entries, + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + false + ) + }; +} +function getJSDocParameterCompletions(sourceFile, position, checker, options, preferences, tagNameOnly) { + const currentToken = getTokenAtPosition(sourceFile, position); + if (!isJSDocTag(currentToken) && !isJSDoc(currentToken)) { + return []; + } + const jsDoc = isJSDoc(currentToken) ? currentToken : currentToken.parent; + if (!isJSDoc(jsDoc)) { + return []; + } + const func = jsDoc.parent; + if (!isFunctionLike(func)) { + return []; + } + const isJs = isSourceFileJS(sourceFile); + const isSnippet = preferences.includeCompletionsWithSnippetText || void 0; + const paramTagCount = countWhere(jsDoc.tags, (tag) => isJSDocParameterTag(tag) && tag.getEnd() <= position); + return mapDefined(func.parameters, (param) => { + if (getJSDocParameterTags(param).length) { + return void 0; + } + if (isIdentifier(param.name)) { + const tabstopCounter = { tabstop: 1 }; + const paramName = param.name.text; + let displayText = getJSDocParamAnnotation( + paramName, + param.initializer, + param.dotDotDotToken, + isJs, + /*isObject*/ + false, + /*isSnippet*/ + false, + checker, + options, + preferences + ); + let snippetText = isSnippet ? getJSDocParamAnnotation( + paramName, + param.initializer, + param.dotDotDotToken, + isJs, + /*isObject*/ + false, + /*isSnippet*/ + true, + checker, + options, + preferences, + tabstopCounter + ) : void 0; + if (tagNameOnly) { + displayText = displayText.slice(1); + if (snippetText) snippetText = snippetText.slice(1); + } + return { + name: displayText, + kind: "parameter" /* parameterElement */, + sortText: SortText.LocationPriority, + insertText: isSnippet ? snippetText : void 0, + isSnippet + }; + } else if (param.parent.parameters.indexOf(param) === paramTagCount) { + const paramPath = `param${paramTagCount}`; + const displayTextResult = generateJSDocParamTagsForDestructuring( + paramPath, + param.name, + param.initializer, + param.dotDotDotToken, + isJs, + /*isSnippet*/ + false, + checker, + options, + preferences + ); + const snippetTextResult = isSnippet ? generateJSDocParamTagsForDestructuring( + paramPath, + param.name, + param.initializer, + param.dotDotDotToken, + isJs, + /*isSnippet*/ + true, + checker, + options, + preferences + ) : void 0; + let displayText = displayTextResult.join(getNewLineCharacter(options) + "* "); + let snippetText = snippetTextResult == null ? void 0 : snippetTextResult.join(getNewLineCharacter(options) + "* "); + if (tagNameOnly) { + displayText = displayText.slice(1); + if (snippetText) snippetText = snippetText.slice(1); + } + return { + name: displayText, + kind: "parameter" /* parameterElement */, + sortText: SortText.LocationPriority, + insertText: isSnippet ? snippetText : void 0, + isSnippet + }; + } + }); +} +function generateJSDocParamTagsForDestructuring(path, pattern, initializer, dotDotDotToken, isJs, isSnippet, checker, options, preferences) { + if (!isJs) { + return [ + getJSDocParamAnnotation( + path, + initializer, + dotDotDotToken, + isJs, + /*isObject*/ + false, + isSnippet, + checker, + options, + preferences, + { tabstop: 1 } + ) + ]; + } + return patternWorker(path, pattern, initializer, dotDotDotToken, { tabstop: 1 }); + function patternWorker(path2, pattern2, initializer2, dotDotDotToken2, counter) { + if (isObjectBindingPattern(pattern2) && !dotDotDotToken2) { + const oldTabstop = counter.tabstop; + const childCounter = { tabstop: oldTabstop }; + const rootParam = getJSDocParamAnnotation( + path2, + initializer2, + dotDotDotToken2, + isJs, + /*isObject*/ + true, + isSnippet, + checker, + options, + preferences, + childCounter + ); + let childTags = []; + for (const element of pattern2.elements) { + const elementTags = elementWorker(path2, element, childCounter); + if (!elementTags) { + childTags = void 0; + break; + } else { + childTags.push(...elementTags); + } + } + if (childTags) { + counter.tabstop = childCounter.tabstop; + return [rootParam, ...childTags]; + } + } + return [ + getJSDocParamAnnotation( + path2, + initializer2, + dotDotDotToken2, + isJs, + /*isObject*/ + false, + isSnippet, + checker, + options, + preferences, + counter + ) + ]; + } + function elementWorker(path2, element, counter) { + if (!element.propertyName && isIdentifier(element.name) || isIdentifier(element.name)) { + const propertyName = element.propertyName ? tryGetTextOfPropertyName(element.propertyName) : element.name.text; + if (!propertyName) { + return void 0; + } + const paramName = `${path2}.${propertyName}`; + return [ + getJSDocParamAnnotation( + paramName, + element.initializer, + element.dotDotDotToken, + isJs, + /*isObject*/ + false, + isSnippet, + checker, + options, + preferences, + counter + ) + ]; + } else if (element.propertyName) { + const propertyName = tryGetTextOfPropertyName(element.propertyName); + return propertyName && patternWorker(`${path2}.${propertyName}`, element.name, element.initializer, element.dotDotDotToken, counter); + } + return void 0; + } +} +function getJSDocParamAnnotation(paramName, initializer, dotDotDotToken, isJs, isObject, isSnippet, checker, options, preferences, tabstopCounter) { + if (isSnippet) { + Debug.assertIsDefined(tabstopCounter); + } + if (initializer) { + paramName = getJSDocParamNameWithInitializer(paramName, initializer); + } + if (isSnippet) { + paramName = escapeSnippetText(paramName); + } + if (isJs) { + let type = "*"; + if (isObject) { + Debug.assert(!dotDotDotToken, `Cannot annotate a rest parameter with type 'Object'.`); + type = "Object"; + } else { + if (initializer) { + const inferredType = checker.getTypeAtLocation(initializer.parent); + if (!(inferredType.flags & (1 /* Any */ | 16384 /* Void */))) { + const sourceFile = initializer.getSourceFile(); + const quotePreference = getQuotePreference(sourceFile, preferences); + const builderFlags = quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0 /* None */; + const typeNode = checker.typeToTypeNode(inferredType, findAncestor(initializer, isFunctionLike), builderFlags); + if (typeNode) { + const printer = isSnippet ? createSnippetPrinter({ + removeComments: true, + module: options.module, + moduleResolution: options.moduleResolution, + target: options.target + }) : createPrinter({ + removeComments: true, + module: options.module, + moduleResolution: options.moduleResolution, + target: options.target + }); + setEmitFlags(typeNode, 1 /* SingleLine */); + type = printer.printNode(4 /* Unspecified */, typeNode, sourceFile); + } + } + } + if (isSnippet && type === "*") { + type = `\${${tabstopCounter.tabstop++}:${type}}`; + } + } + const dotDotDot = !isObject && dotDotDotToken ? "..." : ""; + const description3 = isSnippet ? `\${${tabstopCounter.tabstop++}}` : ""; + return `@param {${dotDotDot}${type}} ${paramName} ${description3}`; + } else { + const description3 = isSnippet ? `\${${tabstopCounter.tabstop++}}` : ""; + return `@param ${paramName} ${description3}`; + } +} +function getJSDocParamNameWithInitializer(paramName, initializer) { + const initializerText = initializer.getText().trim(); + if (initializerText.includes("\n") || initializerText.length > 80) { + return `[${paramName}]`; + } + return `[${paramName}=${initializerText}]`; +} +function keywordToCompletionEntry(keyword) { + return { + name: tokenToString(keyword), + kind: "keyword" /* keyword */, + kindModifiers: "" /* none */, + sortText: SortText.GlobalsOrKeywords + }; +} +function specificKeywordCompletionInfo(entries, isNewIdentifierLocation) { + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation, + entries: entries.slice(), + defaultCommitCharacters: getDefaultCommitCharacters(isNewIdentifierLocation) + }; +} +function keywordCompletionData(keywordFilters, filterOutTsOnlyKeywords, isNewIdentifierLocation) { + return { + kind: 4 /* Keywords */, + keywordCompletions: getKeywordCompletions(keywordFilters, filterOutTsOnlyKeywords), + isNewIdentifierLocation + }; +} +function keywordFiltersFromSyntaxKind(keywordCompletion) { + switch (keywordCompletion) { + case 156 /* TypeKeyword */: + return 8 /* TypeKeyword */; + default: + Debug.fail("Unknown mapping from SyntaxKind to KeywordCompletionFilters"); + } +} +function getOptionalReplacementSpan(location) { + return (location == null ? void 0 : location.kind) === 80 /* Identifier */ ? createTextSpanFromNode(location) : void 0; +} +function completionInfoFromData(sourceFile, host, program, compilerOptions, log, completionData, preferences, formatContext, position, includeSymbol) { + const { + symbols, + contextToken, + completionKind, + isInSnippetScope, + isNewIdentifierLocation, + location, + propertyAccessToConvert, + keywordFilters, + symbolToOriginInfoMap, + recommendedCompletion, + isJsxInitializer, + isTypeOnlyLocation, + isJsxIdentifierExpected, + isRightOfOpenTag, + isRightOfDotOrQuestionDot, + importStatementCompletion, + insideJsDocTagTypeExpression, + symbolToSortTextMap, + hasUnresolvedAutoImports, + defaultCommitCharacters + } = completionData; + let literals = completionData.literals; + const checker = program.getTypeChecker(); + if (getLanguageVariant(sourceFile.scriptKind) === 1 /* JSX */) { + const completionInfo = getJsxClosingTagCompletion(location, sourceFile); + if (completionInfo) { + return completionInfo; + } + } + const caseClause = findAncestor(contextToken, isCaseClause); + if (caseClause && (isCaseKeyword(contextToken) || isNodeDescendantOf(contextToken, caseClause.expression))) { + const tracker = newCaseClauseTracker(checker, caseClause.parent.clauses); + literals = literals.filter((literal) => !tracker.hasValue(literal)); + symbols.forEach((symbol, i) => { + if (symbol.valueDeclaration && isEnumMember(symbol.valueDeclaration)) { + const value = checker.getConstantValue(symbol.valueDeclaration); + if (value !== void 0 && tracker.hasValue(value)) { + symbolToOriginInfoMap[i] = { kind: 256 /* Ignore */ }; + } + } + }); + } + const entries = createSortedArray(); + const isChecked = isCheckedFile(sourceFile, compilerOptions); + if (isChecked && !isNewIdentifierLocation && (!symbols || symbols.length === 0) && keywordFilters === 0 /* None */) { + return void 0; + } + const uniqueNames = getCompletionEntriesFromSymbols( + symbols, + entries, + /*replacementToken*/ + void 0, + contextToken, + location, + position, + sourceFile, + host, + program, + getEmitScriptTarget(compilerOptions), + log, + completionKind, + preferences, + compilerOptions, + formatContext, + isTypeOnlyLocation, + propertyAccessToConvert, + isJsxIdentifierExpected, + isJsxInitializer, + importStatementCompletion, + recommendedCompletion, + symbolToOriginInfoMap, + symbolToSortTextMap, + isJsxIdentifierExpected, + isRightOfOpenTag, + includeSymbol + ); + if (keywordFilters !== 0 /* None */) { + for (const keywordEntry of getKeywordCompletions(keywordFilters, !insideJsDocTagTypeExpression && isSourceFileJS(sourceFile))) { + if (isTypeOnlyLocation && isTypeKeyword(stringToToken(keywordEntry.name)) || !isTypeOnlyLocation && isContextualKeywordInAutoImportableExpressionSpace(keywordEntry.name) || !uniqueNames.has(keywordEntry.name)) { + uniqueNames.add(keywordEntry.name); + insertSorted( + entries, + keywordEntry, + compareCompletionEntries, + /*equalityComparer*/ + void 0, + /*allowDuplicates*/ + true + ); + } + } + } + for (const keywordEntry of getContextualKeywords(contextToken, position)) { + if (!uniqueNames.has(keywordEntry.name)) { + uniqueNames.add(keywordEntry.name); + insertSorted( + entries, + keywordEntry, + compareCompletionEntries, + /*equalityComparer*/ + void 0, + /*allowDuplicates*/ + true + ); + } + } + for (const literal of literals) { + const literalEntry = createCompletionEntryForLiteral(sourceFile, preferences, literal); + uniqueNames.add(literalEntry.name); + insertSorted( + entries, + literalEntry, + compareCompletionEntries, + /*equalityComparer*/ + void 0, + /*allowDuplicates*/ + true + ); + } + if (!isChecked) { + getJSCompletionEntries(sourceFile, location.pos, uniqueNames, getEmitScriptTarget(compilerOptions), entries); + } + let caseBlock; + if (preferences.includeCompletionsWithInsertText && contextToken && !isRightOfOpenTag && !isRightOfDotOrQuestionDot && (caseBlock = findAncestor(contextToken, isCaseBlock))) { + const cases = getExhaustiveCaseSnippets(caseBlock, sourceFile, preferences, compilerOptions, host, program, formatContext); + if (cases) { + entries.push(cases.entry); + } + } + return { + flags: completionData.flags, + isGlobalCompletion: isInSnippetScope, + isIncomplete: preferences.allowIncompleteCompletions && hasUnresolvedAutoImports ? true : void 0, + isMemberCompletion: isMemberCompletionKind(completionKind), + isNewIdentifierLocation, + optionalReplacementSpan: getOptionalReplacementSpan(location), + entries, + defaultCommitCharacters: defaultCommitCharacters ?? getDefaultCommitCharacters(isNewIdentifierLocation) + }; +} +function isCheckedFile(sourceFile, compilerOptions) { + return !isSourceFileJS(sourceFile) || !!isCheckJsEnabledForFile(sourceFile, compilerOptions); +} +function getExhaustiveCaseSnippets(caseBlock, sourceFile, preferences, options, host, program, formatContext) { + const clauses = caseBlock.clauses; + const checker = program.getTypeChecker(); + const switchType = checker.getTypeAtLocation(caseBlock.parent.expression); + if (switchType && switchType.isUnion() && every(switchType.types, (type) => type.isLiteral())) { + const tracker = newCaseClauseTracker(checker, clauses); + const target = getEmitScriptTarget(options); + const quotePreference = getQuotePreference(sourceFile, preferences); + const importAdder = ts_codefix_exports.createImportAdder(sourceFile, program, preferences, host); + const elements = []; + for (const type of switchType.types) { + if (type.flags & 1024 /* EnumLiteral */) { + Debug.assert(type.symbol, "An enum member type should have a symbol"); + Debug.assert(type.symbol.parent, "An enum member type should have a parent symbol (the enum symbol)"); + const enumValue = type.symbol.valueDeclaration && checker.getConstantValue(type.symbol.valueDeclaration); + if (enumValue !== void 0) { + if (tracker.hasValue(enumValue)) { + continue; + } + tracker.addValue(enumValue); + } + const typeNode = ts_codefix_exports.typeToAutoImportableTypeNode(checker, importAdder, type, caseBlock, target); + if (!typeNode) { + return void 0; + } + const expr = typeNodeToExpression(typeNode, target, quotePreference); + if (!expr) { + return void 0; + } + elements.push(expr); + } else if (!tracker.hasValue(type.value)) { + switch (typeof type.value) { + case "object": + elements.push(type.value.negative ? factory.createPrefixUnaryExpression(41 /* MinusToken */, factory.createBigIntLiteral({ negative: false, base10Value: type.value.base10Value })) : factory.createBigIntLiteral(type.value)); + break; + case "number": + elements.push(type.value < 0 ? factory.createPrefixUnaryExpression(41 /* MinusToken */, factory.createNumericLiteral(-type.value)) : factory.createNumericLiteral(type.value)); + break; + case "string": + elements.push(factory.createStringLiteral(type.value, quotePreference === 0 /* Single */)); + break; + } + } + } + if (elements.length === 0) { + return void 0; + } + const newClauses = map(elements, (element) => factory.createCaseClause(element, [])); + const newLineChar = getNewLineOrDefaultFromHost(host, formatContext == null ? void 0 : formatContext.options); + const printer = createSnippetPrinter({ + removeComments: true, + module: options.module, + moduleResolution: options.moduleResolution, + target: options.target, + newLine: getNewLineKind(newLineChar) + }); + const printNode = formatContext ? (node) => printer.printAndFormatNode(4 /* Unspecified */, node, sourceFile, formatContext) : (node) => printer.printNode(4 /* Unspecified */, node, sourceFile); + const insertText = map(newClauses, (clause, i) => { + if (preferences.includeCompletionsWithSnippetText) { + return `${printNode(clause)}$${i + 1}`; + } + return `${printNode(clause)}`; + }).join(newLineChar); + const firstClause = printer.printNode(4 /* Unspecified */, newClauses[0], sourceFile); + return { + entry: { + name: `${firstClause} ...`, + kind: "" /* unknown */, + sortText: SortText.GlobalsOrKeywords, + insertText, + hasAction: importAdder.hasFixes() || void 0, + source: "SwitchCases/" /* SwitchCases */, + isSnippet: preferences.includeCompletionsWithSnippetText ? true : void 0 + }, + importAdder + }; + } + return void 0; +} +function typeNodeToExpression(typeNode, languageVersion, quotePreference) { + switch (typeNode.kind) { + case 184 /* TypeReference */: + const typeName = typeNode.typeName; + return entityNameToExpression(typeName, languageVersion, quotePreference); + case 200 /* IndexedAccessType */: + const objectExpression = typeNodeToExpression(typeNode.objectType, languageVersion, quotePreference); + const indexExpression = typeNodeToExpression(typeNode.indexType, languageVersion, quotePreference); + return objectExpression && indexExpression && factory.createElementAccessExpression(objectExpression, indexExpression); + case 202 /* LiteralType */: + const literal = typeNode.literal; + switch (literal.kind) { + case 11 /* StringLiteral */: + return factory.createStringLiteral(literal.text, quotePreference === 0 /* Single */); + case 9 /* NumericLiteral */: + return factory.createNumericLiteral(literal.text, literal.numericLiteralFlags); + } + return void 0; + case 197 /* ParenthesizedType */: + const exp = typeNodeToExpression(typeNode.type, languageVersion, quotePreference); + return exp && (isIdentifier(exp) ? exp : factory.createParenthesizedExpression(exp)); + case 187 /* TypeQuery */: + return entityNameToExpression(typeNode.exprName, languageVersion, quotePreference); + case 206 /* ImportType */: + Debug.fail(`We should not get an import type after calling 'codefix.typeToAutoImportableTypeNode'.`); + } + return void 0; +} +function entityNameToExpression(entityName, languageVersion, quotePreference) { + if (isIdentifier(entityName)) { + return entityName; + } + const unescapedName = unescapeLeadingUnderscores(entityName.right.escapedText); + if (canUsePropertyAccess(unescapedName, languageVersion)) { + return factory.createPropertyAccessExpression( + entityNameToExpression(entityName.left, languageVersion, quotePreference), + unescapedName + ); + } else { + return factory.createElementAccessExpression( + entityNameToExpression(entityName.left, languageVersion, quotePreference), + factory.createStringLiteral(unescapedName, quotePreference === 0 /* Single */) + ); + } +} +function isMemberCompletionKind(kind) { + switch (kind) { + case 0 /* ObjectPropertyDeclaration */: + case 3 /* MemberLike */: + case 2 /* PropertyAccess */: + return true; + default: + return false; + } +} +function getJsxClosingTagCompletion(location, sourceFile) { + const jsxClosingElement = findAncestor(location, (node) => { + switch (node.kind) { + case 288 /* JsxClosingElement */: + return true; + case 44 /* SlashToken */: + case 32 /* GreaterThanToken */: + case 80 /* Identifier */: + case 212 /* PropertyAccessExpression */: + return false; + default: + return "quit"; + } + }); + if (jsxClosingElement) { + const hasClosingAngleBracket = !!findChildOfKind(jsxClosingElement, 32 /* GreaterThanToken */, sourceFile); + const tagName = jsxClosingElement.parent.openingElement.tagName; + const closingTag = tagName.getText(sourceFile); + const fullClosingTag = closingTag + (hasClosingAngleBracket ? "" : ">"); + const replacementSpan = createTextSpanFromNode(jsxClosingElement.tagName); + const entry = { + name: fullClosingTag, + kind: "class" /* classElement */, + kindModifiers: void 0, + sortText: SortText.LocationPriority + }; + return { + isGlobalCompletion: false, + isMemberCompletion: true, + isNewIdentifierLocation: false, + optionalReplacementSpan: replacementSpan, + entries: [entry], + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + false + ) + }; + } + return; +} +function getJSCompletionEntries(sourceFile, position, uniqueNames, target, entries) { + getNameTable(sourceFile).forEach((pos, name) => { + if (pos === position) { + return; + } + const realName = unescapeLeadingUnderscores(name); + if (!uniqueNames.has(realName) && isIdentifierText(realName, target)) { + uniqueNames.add(realName); + insertSorted(entries, { + name: realName, + kind: "warning" /* warning */, + kindModifiers: "", + sortText: SortText.JavascriptIdentifiers, + isFromUncheckedFile: true, + commitCharacters: [] + }, compareCompletionEntries); + } + }); +} +function completionNameForLiteral(sourceFile, preferences, literal) { + return typeof literal === "object" ? pseudoBigIntToString(literal) + "n" : isString(literal) ? quote(sourceFile, preferences, literal) : JSON.stringify(literal); +} +function createCompletionEntryForLiteral(sourceFile, preferences, literal) { + return { + name: completionNameForLiteral(sourceFile, preferences, literal), + kind: "string" /* string */, + kindModifiers: "" /* none */, + sortText: SortText.LocationPriority, + commitCharacters: [] + }; +} +function createCompletionEntry(symbol, sortText, replacementToken, contextToken, location, position, sourceFile, host, program, name, needsConvertPropertyAccess, origin, recommendedCompletion, propertyAccessToConvert, isJsxInitializer, importStatementCompletion, useSemicolons, options, preferences, completionKind, formatContext, isJsxIdentifierExpected, isRightOfOpenTag, includeSymbol) { + var _a, _b; + let insertText; + let filterText; + let replacementSpan = getReplacementSpanForContextToken(replacementToken, position); + let data; + let isSnippet; + let source = getSourceFromOrigin(origin); + let sourceDisplay; + let hasAction; + let labelDetails; + const typeChecker = program.getTypeChecker(); + const insertQuestionDot = origin && originIsNullableMember(origin); + const useBraces = origin && originIsSymbolMember(origin) || needsConvertPropertyAccess; + if (origin && originIsThisType(origin)) { + insertText = needsConvertPropertyAccess ? `this${insertQuestionDot ? "?." : ""}[${quotePropertyName(sourceFile, preferences, name)}]` : `this${insertQuestionDot ? "?." : "."}${name}`; + } else if ((useBraces || insertQuestionDot) && propertyAccessToConvert) { + insertText = useBraces ? needsConvertPropertyAccess ? `[${quotePropertyName(sourceFile, preferences, name)}]` : `[${name}]` : name; + if (insertQuestionDot || propertyAccessToConvert.questionDotToken) { + insertText = `?.${insertText}`; + } + const dot = findChildOfKind(propertyAccessToConvert, 25 /* DotToken */, sourceFile) || findChildOfKind(propertyAccessToConvert, 29 /* QuestionDotToken */, sourceFile); + if (!dot) { + return void 0; + } + const end = startsWith(name, propertyAccessToConvert.name.text) ? propertyAccessToConvert.name.end : dot.end; + replacementSpan = createTextSpanFromBounds(dot.getStart(sourceFile), end); + } + if (isJsxInitializer) { + if (insertText === void 0) insertText = name; + insertText = `{${insertText}}`; + if (typeof isJsxInitializer !== "boolean") { + replacementSpan = createTextSpanFromNode(isJsxInitializer, sourceFile); + } + } + if (origin && originIsPromise(origin) && propertyAccessToConvert) { + if (insertText === void 0) insertText = name; + const precedingToken = findPrecedingToken(propertyAccessToConvert.pos, sourceFile); + let awaitText = ""; + if (precedingToken && positionIsASICandidate(precedingToken.end, precedingToken.parent, sourceFile)) { + awaitText = ";"; + } + awaitText += `(await ${propertyAccessToConvert.expression.getText()})`; + insertText = needsConvertPropertyAccess ? `${awaitText}${insertText}` : `${awaitText}${insertQuestionDot ? "?." : "."}${insertText}`; + const isInAwaitExpression = tryCast(propertyAccessToConvert.parent, isAwaitExpression); + const wrapNode = isInAwaitExpression ? propertyAccessToConvert.parent : propertyAccessToConvert.expression; + replacementSpan = createTextSpanFromBounds(wrapNode.getStart(sourceFile), propertyAccessToConvert.end); + } + if (originIsResolvedExport(origin)) { + sourceDisplay = [textPart(origin.moduleSpecifier)]; + if (importStatementCompletion) { + ({ insertText, replacementSpan } = getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, program, preferences)); + isSnippet = preferences.includeCompletionsWithSnippetText ? true : void 0; + } + } + if ((origin == null ? void 0 : origin.kind) === 64 /* TypeOnlyAlias */) { + hasAction = true; + } + if (completionKind === 0 /* ObjectPropertyDeclaration */ && contextToken && ((_a = findPrecedingToken(contextToken.pos, sourceFile, contextToken)) == null ? void 0 : _a.kind) !== 28 /* CommaToken */) { + if (isMethodDeclaration(contextToken.parent.parent) || isGetAccessorDeclaration(contextToken.parent.parent) || isSetAccessorDeclaration(contextToken.parent.parent) || isSpreadAssignment(contextToken.parent) || ((_b = findAncestor(contextToken.parent, isPropertyAssignment)) == null ? void 0 : _b.getLastToken(sourceFile)) === contextToken || isShorthandPropertyAssignment(contextToken.parent) && getLineAndCharacterOfPosition(sourceFile, contextToken.getEnd()).line !== getLineAndCharacterOfPosition(sourceFile, position).line) { + source = "ObjectLiteralMemberWithComma/" /* ObjectLiteralMemberWithComma */; + hasAction = true; + } + } + if (preferences.includeCompletionsWithClassMemberSnippets && preferences.includeCompletionsWithInsertText && completionKind === 3 /* MemberLike */ && isClassLikeMemberCompletion(symbol, location, sourceFile)) { + let importAdder; + const memberCompletionEntry = getEntryForMemberCompletion( + host, + program, + options, + preferences, + name, + symbol, + location, + position, + contextToken, + formatContext + ); + if (memberCompletionEntry) { + ({ insertText, filterText, isSnippet, importAdder } = memberCompletionEntry); + if ((importAdder == null ? void 0 : importAdder.hasFixes()) || memberCompletionEntry.eraseRange) { + hasAction = true; + source = "ClassMemberSnippet/" /* ClassMemberSnippet */; + } + } else { + return void 0; + } + } + if (origin && originIsObjectLiteralMethod(origin)) { + ({ insertText, isSnippet, labelDetails } = origin); + if (!preferences.useLabelDetailsInCompletionEntries) { + name = name + labelDetails.detail; + labelDetails = void 0; + } + source = "ObjectLiteralMethodSnippet/" /* ObjectLiteralMethodSnippet */; + sortText = SortText.SortBelow(sortText); + } + if (isJsxIdentifierExpected && !isRightOfOpenTag && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none" && !(isJsxAttribute(location.parent) && location.parent.initializer)) { + let useBraces2 = preferences.jsxAttributeCompletionStyle === "braces"; + const type = typeChecker.getTypeOfSymbolAtLocation(symbol, location); + if (preferences.jsxAttributeCompletionStyle === "auto" && !(type.flags & 528 /* BooleanLike */) && !(type.flags & 1048576 /* Union */ && find(type.types, (type2) => !!(type2.flags & 528 /* BooleanLike */)))) { + if (type.flags & 402653316 /* StringLike */ || type.flags & 1048576 /* Union */ && every(type.types, (type2) => !!(type2.flags & (402653316 /* StringLike */ | 32768 /* Undefined */) || isStringAndEmptyAnonymousObjectIntersection(type2)))) { + insertText = `${escapeSnippetText(name)}=${quote(sourceFile, preferences, "$1")}`; + isSnippet = true; + } else { + useBraces2 = true; + } + } + if (useBraces2) { + insertText = `${escapeSnippetText(name)}={$1}`; + isSnippet = true; + } + } + if (insertText !== void 0 && !preferences.includeCompletionsWithInsertText) { + return void 0; + } + if (originIsExport(origin) || originIsResolvedExport(origin)) { + data = originToCompletionEntryData(origin); + hasAction = !importStatementCompletion; + } + const parentNamedImportOrExport = findAncestor(location, isNamedImportsOrExports); + if (parentNamedImportOrExport) { + const languageVersion = getEmitScriptTarget(host.getCompilationSettings()); + if (!isIdentifierText(name, languageVersion)) { + insertText = quotePropertyName(sourceFile, preferences, name); + if (parentNamedImportOrExport.kind === 276 /* NamedImports */) { + scanner.setText(sourceFile.text); + scanner.resetTokenState(position); + if (!(scanner.scan() === 130 /* AsKeyword */ && scanner.scan() === 80 /* Identifier */)) { + insertText += " as " + generateIdentifierForArbitraryString(name, languageVersion); + } + } + } else if (parentNamedImportOrExport.kind === 276 /* NamedImports */) { + const possibleToken = stringToToken(name); + if (possibleToken && (possibleToken === 135 /* AwaitKeyword */ || isNonContextualKeyword(possibleToken))) { + insertText = `${name} as ${name}_`; + } + } + } + const kind = ts_SymbolDisplay_exports.getSymbolKind(typeChecker, symbol, location); + const commitCharacters = kind === "warning" /* warning */ || kind === "string" /* string */ ? [] : void 0; + return { + name, + kind, + kindModifiers: ts_SymbolDisplay_exports.getSymbolModifiers(typeChecker, symbol), + sortText, + source, + hasAction: hasAction ? true : void 0, + isRecommended: isRecommendedCompletionMatch(symbol, recommendedCompletion, typeChecker) || void 0, + insertText, + filterText, + replacementSpan, + sourceDisplay, + labelDetails, + isSnippet, + isPackageJsonImport: originIsPackageJsonImport(origin) || void 0, + isImportStatementCompletion: !!importStatementCompletion || void 0, + data, + commitCharacters, + ...includeSymbol ? { symbol } : void 0 + }; +} +function generateIdentifierForArbitraryString(text, languageVersion) { + let needsUnderscore = false; + let identifier = ""; + let ch; + for (let i = 0; i < text.length; i += ch !== void 0 && ch >= 65536 ? 2 : 1) { + ch = text.codePointAt(i); + if (ch !== void 0 && (i === 0 ? isIdentifierStart(ch, languageVersion) : isIdentifierPart(ch, languageVersion))) { + if (needsUnderscore) identifier += "_"; + identifier += String.fromCodePoint(ch); + needsUnderscore = false; + } else { + needsUnderscore = true; + } + } + if (needsUnderscore) identifier += "_"; + return identifier || "_"; +} +function isClassLikeMemberCompletion(symbol, location, sourceFile) { + if (isInJSFile(location)) { + return false; + } + const memberFlags = 106500 /* ClassMember */ & 900095 /* EnumMemberExcludes */; + return !!(symbol.flags & memberFlags) && (isClassLike(location) || location.parent && location.parent.parent && isClassElement(location.parent) && location === location.parent.name && location.parent.getLastToken(sourceFile) === location.parent.name && isClassLike(location.parent.parent) || location.parent && isSyntaxList(location) && isClassLike(location.parent)); +} +function getEntryForMemberCompletion(host, program, options, preferences, name, symbol, location, position, contextToken, formatContext) { + const classLikeDeclaration = findAncestor(location, isClassLike); + if (!classLikeDeclaration) { + return void 0; + } + let isSnippet; + let insertText = name; + const filterText = name; + const checker = program.getTypeChecker(); + const sourceFile = location.getSourceFile(); + const printer = createSnippetPrinter({ + removeComments: true, + module: options.module, + moduleResolution: options.moduleResolution, + target: options.target, + omitTrailingSemicolon: false, + newLine: getNewLineKind(getNewLineOrDefaultFromHost(host, formatContext == null ? void 0 : formatContext.options)) + }); + const importAdder = ts_codefix_exports.createImportAdder(sourceFile, program, preferences, host); + let body; + if (preferences.includeCompletionsWithSnippetText) { + isSnippet = true; + const emptyStmt = factory.createEmptyStatement(); + body = factory.createBlock( + [emptyStmt], + /*multiLine*/ + true + ); + setSnippetElement(emptyStmt, { kind: 0 /* TabStop */, order: 0 }); + } else { + body = factory.createBlock( + [], + /*multiLine*/ + true + ); + } + let modifiers = 0 /* None */; + const { modifiers: presentModifiers, range: eraseRange, decorators: presentDecorators } = getPresentModifiers(contextToken, sourceFile, position); + const isAbstract = presentModifiers & 64 /* Abstract */ && classLikeDeclaration.modifierFlagsCache & 64 /* Abstract */; + let completionNodes = []; + ts_codefix_exports.addNewNodeForMemberSymbol( + symbol, + classLikeDeclaration, + sourceFile, + { program, host }, + preferences, + importAdder, + // `addNewNodeForMemberSymbol` calls this callback function for each new member node + // it adds for the given member symbol. + // We store these member nodes in the `completionNodes` array. + // Note: there might be: + // - No nodes if `addNewNodeForMemberSymbol` cannot figure out a node for the member; + // - One node; + // - More than one node if the member is overloaded (e.g. a method with overload signatures). + (node) => { + let requiredModifiers = 0 /* None */; + if (isAbstract) { + requiredModifiers |= 64 /* Abstract */; + } + if (isClassElement(node) && checker.getMemberOverrideModifierStatus(classLikeDeclaration, node, symbol) === 1 /* NeedsOverride */) { + requiredModifiers |= 16 /* Override */; + } + if (!completionNodes.length) { + modifiers = node.modifierFlagsCache | requiredModifiers; + } + node = factory.replaceModifiers(node, modifiers); + completionNodes.push(node); + }, + body, + ts_codefix_exports.PreserveOptionalFlags.Property, + !!isAbstract + ); + if (completionNodes.length) { + const isMethod = symbol.flags & 8192 /* Method */; + let allowedModifiers = modifiers | 16 /* Override */ | 1 /* Public */; + if (!isMethod) { + allowedModifiers |= 128 /* Ambient */ | 8 /* Readonly */; + } else { + allowedModifiers |= 1024 /* Async */; + } + const allowedAndPresent = presentModifiers & allowedModifiers; + if (presentModifiers & ~allowedModifiers) { + return void 0; + } + if (modifiers & 4 /* Protected */ && allowedAndPresent & 1 /* Public */) { + modifiers &= ~4 /* Protected */; + } + if (allowedAndPresent !== 0 /* None */ && !(allowedAndPresent & 1 /* Public */)) { + modifiers &= ~1 /* Public */; + } + modifiers |= allowedAndPresent; + completionNodes = completionNodes.map((node) => factory.replaceModifiers(node, modifiers)); + if (presentDecorators == null ? void 0 : presentDecorators.length) { + const lastNode = completionNodes[completionNodes.length - 1]; + if (canHaveDecorators(lastNode)) { + completionNodes[completionNodes.length - 1] = factory.replaceDecoratorsAndModifiers(lastNode, presentDecorators.concat(getModifiers(lastNode) || [])); + } + } + const format = 1 /* MultiLine */ | 131072 /* NoTrailingNewLine */; + if (formatContext) { + insertText = printer.printAndFormatSnippetList( + format, + factory.createNodeArray(completionNodes), + sourceFile, + formatContext + ); + } else { + insertText = printer.printSnippetList( + format, + factory.createNodeArray(completionNodes), + sourceFile + ); + } + } + return { insertText, filterText, isSnippet, importAdder, eraseRange }; +} +function getPresentModifiers(contextToken, sourceFile, position) { + if (!contextToken || getLineAndCharacterOfPosition(sourceFile, position).line > getLineAndCharacterOfPosition(sourceFile, contextToken.getEnd()).line) { + return { modifiers: 0 /* None */ }; + } + let modifiers = 0 /* None */; + let decorators; + let contextMod; + const range = { pos: position, end: position }; + if (isPropertyDeclaration(contextToken.parent) && (contextMod = isModifierLike2(contextToken))) { + if (contextToken.parent.modifiers) { + modifiers |= modifiersToFlags(contextToken.parent.modifiers) & 98303 /* Modifier */; + decorators = contextToken.parent.modifiers.filter(isDecorator) || []; + range.pos = Math.min(...contextToken.parent.modifiers.map((n) => n.getStart(sourceFile))); + } + const contextModifierFlag = modifierToFlag(contextMod); + if (!(modifiers & contextModifierFlag)) { + modifiers |= contextModifierFlag; + range.pos = Math.min(range.pos, contextToken.getStart(sourceFile)); + } + if (contextToken.parent.name !== contextToken) { + range.end = contextToken.parent.name.getStart(sourceFile); + } + } + return { modifiers, decorators, range: range.pos < range.end ? range : void 0 }; +} +function isModifierLike2(node) { + if (isModifier(node)) { + return node.kind; + } + if (isIdentifier(node)) { + const originalKeywordKind = identifierToKeywordKind(node); + if (originalKeywordKind && isModifierKind(originalKeywordKind)) { + return originalKeywordKind; + } + } + return void 0; +} +function getEntryForObjectLiteralMethodCompletion(symbol, name, enclosingDeclaration, program, host, options, preferences, formatContext) { + const isSnippet = preferences.includeCompletionsWithSnippetText || void 0; + let insertText = name; + const sourceFile = enclosingDeclaration.getSourceFile(); + const method = createObjectLiteralMethod(symbol, enclosingDeclaration, sourceFile, program, host, preferences); + if (!method) { + return void 0; + } + const printer = createSnippetPrinter({ + removeComments: true, + module: options.module, + moduleResolution: options.moduleResolution, + target: options.target, + omitTrailingSemicolon: false, + newLine: getNewLineKind(getNewLineOrDefaultFromHost(host, formatContext == null ? void 0 : formatContext.options)) + }); + if (formatContext) { + insertText = printer.printAndFormatSnippetList(16 /* CommaDelimited */ | 64 /* AllowTrailingComma */, factory.createNodeArray( + [method], + /*hasTrailingComma*/ + true + ), sourceFile, formatContext); + } else { + insertText = printer.printSnippetList(16 /* CommaDelimited */ | 64 /* AllowTrailingComma */, factory.createNodeArray( + [method], + /*hasTrailingComma*/ + true + ), sourceFile); + } + const signaturePrinter = createPrinter({ + removeComments: true, + module: options.module, + moduleResolution: options.moduleResolution, + target: options.target, + omitTrailingSemicolon: true + }); + const methodSignature = factory.createMethodSignature( + /*modifiers*/ + void 0, + /*name*/ + "", + method.questionToken, + method.typeParameters, + method.parameters, + method.type + ); + const labelDetails = { detail: signaturePrinter.printNode(4 /* Unspecified */, methodSignature, sourceFile) }; + return { isSnippet, insertText, labelDetails }; +} +function createObjectLiteralMethod(symbol, enclosingDeclaration, sourceFile, program, host, preferences) { + const declarations = symbol.getDeclarations(); + if (!(declarations && declarations.length)) { + return void 0; + } + const checker = program.getTypeChecker(); + const declaration = declarations[0]; + const name = getSynthesizedDeepClone( + getNameOfDeclaration(declaration), + /*includeTrivia*/ + false + ); + const type = checker.getWidenedType(checker.getTypeOfSymbolAtLocation(symbol, enclosingDeclaration)); + const quotePreference = getQuotePreference(sourceFile, preferences); + const builderFlags = 33554432 /* OmitThisParameter */ | (quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0 /* None */); + switch (declaration.kind) { + case 172 /* PropertySignature */: + case 173 /* PropertyDeclaration */: + case 174 /* MethodSignature */: + case 175 /* MethodDeclaration */: { + let effectiveType = type.flags & 1048576 /* Union */ && type.types.length < 10 ? checker.getUnionType(type.types, 2 /* Subtype */) : type; + if (effectiveType.flags & 1048576 /* Union */) { + const functionTypes = filter(effectiveType.types, (type2) => checker.getSignaturesOfType(type2, 0 /* Call */).length > 0); + if (functionTypes.length === 1) { + effectiveType = functionTypes[0]; + } else { + return void 0; + } + } + const signatures = checker.getSignaturesOfType(effectiveType, 0 /* Call */); + if (signatures.length !== 1) { + return void 0; + } + const typeNode = checker.typeToTypeNode( + effectiveType, + enclosingDeclaration, + builderFlags, + /*internalFlags*/ + void 0, + ts_codefix_exports.getNoopSymbolTrackerWithResolver({ program, host }) + ); + if (!typeNode || !isFunctionTypeNode(typeNode)) { + return void 0; + } + let body; + if (preferences.includeCompletionsWithSnippetText) { + const emptyStmt = factory.createEmptyStatement(); + body = factory.createBlock( + [emptyStmt], + /*multiLine*/ + true + ); + setSnippetElement(emptyStmt, { kind: 0 /* TabStop */, order: 0 }); + } else { + body = factory.createBlock( + [], + /*multiLine*/ + true + ); + } + const parameters = typeNode.parameters.map( + (typedParam) => factory.createParameterDeclaration( + /*modifiers*/ + void 0, + typedParam.dotDotDotToken, + typedParam.name, + /*questionToken*/ + void 0, + /*type*/ + void 0, + typedParam.initializer + ) + ); + return factory.createMethodDeclaration( + /*modifiers*/ + void 0, + /*asteriskToken*/ + void 0, + name, + /*questionToken*/ + void 0, + /*typeParameters*/ + void 0, + parameters, + /*type*/ + void 0, + body + ); + } + default: + return void 0; + } +} +function createSnippetPrinter(printerOptions) { + let escapes; + const baseWriter = ts_textChanges_exports.createWriter(getNewLineCharacter(printerOptions)); + const printer = createPrinter(printerOptions, baseWriter); + const writer = { + ...baseWriter, + write: (s) => escapingWrite(s, () => baseWriter.write(s)), + nonEscapingWrite: baseWriter.write, + writeLiteral: (s) => escapingWrite(s, () => baseWriter.writeLiteral(s)), + writeStringLiteral: (s) => escapingWrite(s, () => baseWriter.writeStringLiteral(s)), + writeSymbol: (s, symbol) => escapingWrite(s, () => baseWriter.writeSymbol(s, symbol)), + writeParameter: (s) => escapingWrite(s, () => baseWriter.writeParameter(s)), + writeComment: (s) => escapingWrite(s, () => baseWriter.writeComment(s)), + writeProperty: (s) => escapingWrite(s, () => baseWriter.writeProperty(s)) + }; + return { + printSnippetList, + printAndFormatSnippetList, + printNode, + printAndFormatNode + }; + function escapingWrite(s, write) { + const escaped = escapeSnippetText(s); + if (escaped !== s) { + const start = baseWriter.getTextPos(); + write(); + const end = baseWriter.getTextPos(); + escapes = append(escapes || (escapes = []), { newText: escaped, span: { start, length: end - start } }); + } else { + write(); + } + } + function printSnippetList(format, list, sourceFile) { + const unescaped = printUnescapedSnippetList(format, list, sourceFile); + return escapes ? ts_textChanges_exports.applyChanges(unescaped, escapes) : unescaped; + } + function printUnescapedSnippetList(format, list, sourceFile) { + escapes = void 0; + writer.clear(); + printer.writeList(format, list, sourceFile, writer); + return writer.getText(); + } + function printAndFormatSnippetList(format, list, sourceFile, formatContext) { + const syntheticFile = { + text: printUnescapedSnippetList( + format, + list, + sourceFile + ), + getLineAndCharacterOfPosition(pos) { + return getLineAndCharacterOfPosition(this, pos); + } + }; + const formatOptions = getFormatCodeSettingsForWriting(formatContext, sourceFile); + const changes = flatMap(list, (node) => { + const nodeWithPos = ts_textChanges_exports.assignPositionsToNode(node); + return ts_formatting_exports.formatNodeGivenIndentation( + nodeWithPos, + syntheticFile, + sourceFile.languageVariant, + /* indentation */ + 0, + /* delta */ + 0, + { ...formatContext, options: formatOptions } + ); + }); + const allChanges = escapes ? toSorted(concatenate(changes, escapes), (a, b) => compareTextSpans(a.span, b.span)) : changes; + return ts_textChanges_exports.applyChanges(syntheticFile.text, allChanges); + } + function printNode(hint, node, sourceFile) { + const unescaped = printUnescapedNode(hint, node, sourceFile); + return escapes ? ts_textChanges_exports.applyChanges(unescaped, escapes) : unescaped; + } + function printUnescapedNode(hint, node, sourceFile) { + escapes = void 0; + writer.clear(); + printer.writeNode(hint, node, sourceFile, writer); + return writer.getText(); + } + function printAndFormatNode(hint, node, sourceFile, formatContext) { + const syntheticFile = { + text: printUnescapedNode( + hint, + node, + sourceFile + ), + getLineAndCharacterOfPosition(pos) { + return getLineAndCharacterOfPosition(this, pos); + } + }; + const formatOptions = getFormatCodeSettingsForWriting(formatContext, sourceFile); + const nodeWithPos = ts_textChanges_exports.assignPositionsToNode(node); + const changes = ts_formatting_exports.formatNodeGivenIndentation( + nodeWithPos, + syntheticFile, + sourceFile.languageVariant, + /* indentation */ + 0, + /* delta */ + 0, + { ...formatContext, options: formatOptions } + ); + const allChanges = escapes ? toSorted(concatenate(changes, escapes), (a, b) => compareTextSpans(a.span, b.span)) : changes; + return ts_textChanges_exports.applyChanges(syntheticFile.text, allChanges); + } +} +function originToCompletionEntryData(origin) { + const ambientModuleName = origin.fileName ? void 0 : stripQuotes(origin.moduleSymbol.name); + const isPackageJsonImport = origin.isFromPackageJson ? true : void 0; + if (originIsResolvedExport(origin)) { + const resolvedData = { + exportName: origin.exportName, + exportMapKey: origin.exportMapKey, + moduleSpecifier: origin.moduleSpecifier, + ambientModuleName, + fileName: origin.fileName, + isPackageJsonImport + }; + return resolvedData; + } + const unresolvedData = { + exportName: origin.exportName, + exportMapKey: origin.exportMapKey, + fileName: origin.fileName, + ambientModuleName: origin.fileName ? void 0 : stripQuotes(origin.moduleSymbol.name), + isPackageJsonImport: origin.isFromPackageJson ? true : void 0 + }; + return unresolvedData; +} +function completionEntryDataToSymbolOriginInfo(data, completionName, moduleSymbol) { + const isDefaultExport = data.exportName === "default" /* Default */; + const isFromPackageJson = !!data.isPackageJsonImport; + if (completionEntryDataIsResolved(data)) { + const resolvedOrigin = { + kind: 32 /* ResolvedExport */, + exportName: data.exportName, + exportMapKey: data.exportMapKey, + moduleSpecifier: data.moduleSpecifier, + symbolName: completionName, + fileName: data.fileName, + moduleSymbol, + isDefaultExport, + isFromPackageJson + }; + return resolvedOrigin; + } + const unresolvedOrigin = { + kind: 4 /* Export */, + exportName: data.exportName, + exportMapKey: data.exportMapKey, + symbolName: completionName, + fileName: data.fileName, + moduleSymbol, + isDefaultExport, + isFromPackageJson + }; + return unresolvedOrigin; +} +function getInsertTextAndReplacementSpanForImportCompletion(name, importStatementCompletion, origin, useSemicolons, sourceFile, program, preferences) { + const replacementSpan = importStatementCompletion.replacementSpan; + const quotedModuleSpecifier = escapeSnippetText(quote(sourceFile, preferences, origin.moduleSpecifier)); + const exportKind = origin.isDefaultExport ? 1 /* Default */ : origin.exportName === "export=" /* ExportEquals */ ? 2 /* ExportEquals */ : 0 /* Named */; + const tabStop = preferences.includeCompletionsWithSnippetText ? "$1" : ""; + const importKind = ts_codefix_exports.getImportKind( + sourceFile, + exportKind, + program, + /*forceImportKeyword*/ + true + ); + const isImportSpecifierTypeOnly = importStatementCompletion.couldBeTypeOnlyImportSpecifier; + const topLevelTypeOnlyText = importStatementCompletion.isTopLevelTypeOnly ? ` ${tokenToString(156 /* TypeKeyword */)} ` : " "; + const importSpecifierTypeOnlyText = isImportSpecifierTypeOnly ? `${tokenToString(156 /* TypeKeyword */)} ` : ""; + const suffix = useSemicolons ? ";" : ""; + switch (importKind) { + case 3 /* CommonJS */: + return { replacementSpan, insertText: `import${topLevelTypeOnlyText}${escapeSnippetText(name)}${tabStop} = require(${quotedModuleSpecifier})${suffix}` }; + case 1 /* Default */: + return { replacementSpan, insertText: `import${topLevelTypeOnlyText}${escapeSnippetText(name)}${tabStop} from ${quotedModuleSpecifier}${suffix}` }; + case 2 /* Namespace */: + return { replacementSpan, insertText: `import${topLevelTypeOnlyText}* as ${escapeSnippetText(name)} from ${quotedModuleSpecifier}${suffix}` }; + case 0 /* Named */: + return { replacementSpan, insertText: `import${topLevelTypeOnlyText}{ ${importSpecifierTypeOnlyText}${escapeSnippetText(name)}${tabStop} } from ${quotedModuleSpecifier}${suffix}` }; + } +} +function quotePropertyName(sourceFile, preferences, name) { + if (/^\d+$/.test(name)) { + return name; + } + return quote(sourceFile, preferences, name); +} +function isRecommendedCompletionMatch(localSymbol, recommendedCompletion, checker) { + return localSymbol === recommendedCompletion || !!(localSymbol.flags & 1048576 /* ExportValue */) && checker.getExportSymbolOfSymbol(localSymbol) === recommendedCompletion; +} +function getSourceFromOrigin(origin) { + if (originIsExport(origin)) { + return stripQuotes(origin.moduleSymbol.name); + } + if (originIsResolvedExport(origin)) { + return origin.moduleSpecifier; + } + if ((origin == null ? void 0 : origin.kind) === 1 /* ThisType */) { + return "ThisProperty/" /* ThisProperty */; + } + if ((origin == null ? void 0 : origin.kind) === 64 /* TypeOnlyAlias */) { + return "TypeOnlyAlias/" /* TypeOnlyAlias */; + } +} +function getCompletionEntriesFromSymbols(symbols, entries, replacementToken, contextToken, location, position, sourceFile, host, program, target, log, kind, preferences, compilerOptions, formatContext, isTypeOnlyLocation, propertyAccessToConvert, jsxIdentifierExpected, isJsxInitializer, importStatementCompletion, recommendedCompletion, symbolToOriginInfoMap, symbolToSortTextMap, isJsxIdentifierExpected, isRightOfOpenTag, includeSymbol = false) { + const start = timestamp(); + const closestSymbolDeclaration = getClosestSymbolDeclaration(contextToken, location); + const useSemicolons = probablyUsesSemicolons(sourceFile); + const typeChecker = program.getTypeChecker(); + const uniques = /* @__PURE__ */ new Map(); + for (let i = 0; i < symbols.length; i++) { + const symbol = symbols[i]; + const origin = symbolToOriginInfoMap == null ? void 0 : symbolToOriginInfoMap[i]; + const info = getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, !!jsxIdentifierExpected); + if (!info || uniques.get(info.name) && (!origin || !originIsObjectLiteralMethod(origin)) || kind === 1 /* Global */ && symbolToSortTextMap && !shouldIncludeSymbol(symbol, symbolToSortTextMap)) { + continue; + } + if (!isTypeOnlyLocation && isInJSFile(sourceFile) && symbolAppearsToBeTypeOnly(symbol)) { + continue; + } + const { name, needsConvertPropertyAccess } = info; + const originalSortText = (symbolToSortTextMap == null ? void 0 : symbolToSortTextMap[getSymbolId(symbol)]) ?? SortText.LocationPriority; + const sortText = isDeprecated(symbol, typeChecker) ? SortText.Deprecated(originalSortText) : originalSortText; + const entry = createCompletionEntry( + symbol, + sortText, + replacementToken, + contextToken, + location, + position, + sourceFile, + host, + program, + name, + needsConvertPropertyAccess, + origin, + recommendedCompletion, + propertyAccessToConvert, + isJsxInitializer, + importStatementCompletion, + useSemicolons, + compilerOptions, + preferences, + kind, + formatContext, + isJsxIdentifierExpected, + isRightOfOpenTag, + includeSymbol + ); + if (!entry) { + continue; + } + const shouldShadowLaterSymbols = (!origin || originIsTypeOnlyAlias(origin)) && !(symbol.parent === void 0 && !some(symbol.declarations, (d) => d.getSourceFile() === location.getSourceFile())); + uniques.set(name, shouldShadowLaterSymbols); + insertSorted( + entries, + entry, + compareCompletionEntries, + /*equalityComparer*/ + void 0, + /*allowDuplicates*/ + true + ); + } + log("getCompletionsAtPosition: getCompletionEntriesFromSymbols: " + (timestamp() - start)); + return { + has: (name) => uniques.has(name), + add: (name) => uniques.set(name, true) + }; + function shouldIncludeSymbol(symbol, symbolToSortTextMap2) { + var _a; + let allFlags = symbol.flags; + if (location.parent && isExportAssignment(location.parent)) { + return true; + } + if (closestSymbolDeclaration && tryCast(closestSymbolDeclaration, isVariableDeclaration)) { + if (symbol.valueDeclaration === closestSymbolDeclaration) { + return false; + } + if (isBindingPattern(closestSymbolDeclaration.name) && closestSymbolDeclaration.name.elements.some((e) => e === symbol.valueDeclaration)) { + return false; + } + } + const symbolDeclaration = symbol.valueDeclaration ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]); + if (closestSymbolDeclaration && symbolDeclaration) { + if (isParameter(closestSymbolDeclaration) && isParameter(symbolDeclaration)) { + const parameters = closestSymbolDeclaration.parent.parameters; + if (symbolDeclaration.pos >= closestSymbolDeclaration.pos && symbolDeclaration.pos < parameters.end) { + return false; + } + } else if (isTypeParameterDeclaration(closestSymbolDeclaration) && isTypeParameterDeclaration(symbolDeclaration)) { + if (closestSymbolDeclaration === symbolDeclaration && (contextToken == null ? void 0 : contextToken.kind) === 96 /* ExtendsKeyword */) { + return false; + } + if (isInTypeParameterDefault(contextToken) && !isInferTypeNode(closestSymbolDeclaration.parent)) { + const typeParameters = closestSymbolDeclaration.parent.typeParameters; + if (typeParameters && symbolDeclaration.pos >= closestSymbolDeclaration.pos && symbolDeclaration.pos < typeParameters.end) { + return false; + } + } + } + } + const symbolOrigin = skipAlias(symbol, typeChecker); + if (!!sourceFile.externalModuleIndicator && !compilerOptions.allowUmdGlobalAccess && symbolToSortTextMap2[getSymbolId(symbol)] === SortText.GlobalsOrKeywords && (symbolToSortTextMap2[getSymbolId(symbolOrigin)] === SortText.AutoImportSuggestions || symbolToSortTextMap2[getSymbolId(symbolOrigin)] === SortText.LocationPriority)) { + return false; + } + allFlags |= getCombinedLocalAndExportSymbolFlags(symbolOrigin); + if (isInRightSideOfInternalImportEqualsDeclaration(location)) { + return !!(allFlags & 1920 /* Namespace */); + } + if (isTypeOnlyLocation) { + return symbolCanBeReferencedAtTypeLocation(symbol, typeChecker); + } + return !!(allFlags & 111551 /* Value */); + } + function symbolAppearsToBeTypeOnly(symbol) { + var _a; + const flags = getCombinedLocalAndExportSymbolFlags(skipAlias(symbol, typeChecker)); + return !(flags & 111551 /* Value */) && (!isInJSFile((_a = symbol.declarations) == null ? void 0 : _a[0]) || !!(flags & 788968 /* Type */)); + } +} +function getLabelCompletionAtPosition(node) { + const entries = getLabelStatementCompletions(node); + if (entries.length) { + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: false, + entries, + defaultCommitCharacters: getDefaultCommitCharacters( + /*isNewIdentifierLocation*/ + false + ) + }; + } +} +function getLabelStatementCompletions(node) { + const entries = []; + const uniques = /* @__PURE__ */ new Map(); + let current = node; + while (current) { + if (isFunctionLike(current)) { + break; + } + if (isLabeledStatement(current)) { + const name = current.label.text; + if (!uniques.has(name)) { + uniques.set(name, true); + entries.push({ + name, + kindModifiers: "" /* none */, + kind: "label" /* label */, + sortText: SortText.LocationPriority + }); + } + } + current = current.parent; + } + return entries; +} +function getSymbolCompletionFromEntryId(program, log, sourceFile, position, entryId, host, preferences) { + if (entryId.source === "SwitchCases/" /* SwitchCases */) { + return { type: "cases" }; + } + if (entryId.data) { + const autoImport = getAutoImportSymbolFromCompletionEntryData(entryId.name, entryId.data, program, host); + if (autoImport) { + const { contextToken: contextToken2, previousToken: previousToken2 } = getRelevantTokens(position, sourceFile); + return { + type: "symbol", + symbol: autoImport.symbol, + location: getTouchingPropertyName(sourceFile, position), + previousToken: previousToken2, + contextToken: contextToken2, + isJsxInitializer: false, + isTypeOnlyLocation: false, + origin: autoImport.origin + }; + } + } + const compilerOptions = program.getCompilerOptions(); + const completionData = getCompletionData( + program, + log, + sourceFile, + compilerOptions, + position, + { includeCompletionsForModuleExports: true, includeCompletionsWithInsertText: true }, + entryId, + host, + /*formatContext*/ + void 0 + ); + if (!completionData) { + return { type: "none" }; + } + if (completionData.kind !== 0 /* Data */) { + return { type: "request", request: completionData }; + } + const { symbols, literals, location, completionKind, symbolToOriginInfoMap, contextToken, previousToken, isJsxInitializer, isTypeOnlyLocation } = completionData; + const literal = find(literals, (l) => completionNameForLiteral(sourceFile, preferences, l) === entryId.name); + if (literal !== void 0) return { type: "literal", literal }; + return firstDefined(symbols, (symbol, index) => { + const origin = symbolToOriginInfoMap[index]; + const info = getCompletionEntryDisplayNameForSymbol(symbol, getEmitScriptTarget(compilerOptions), origin, completionKind, completionData.isJsxIdentifierExpected); + return info && info.name === entryId.name && (entryId.source === "ClassMemberSnippet/" /* ClassMemberSnippet */ && symbol.flags & 106500 /* ClassMember */ || entryId.source === "ObjectLiteralMethodSnippet/" /* ObjectLiteralMethodSnippet */ && symbol.flags & (4 /* Property */ | 8192 /* Method */) || getSourceFromOrigin(origin) === entryId.source || entryId.source === "ObjectLiteralMemberWithComma/" /* ObjectLiteralMemberWithComma */) ? { type: "symbol", symbol, location, origin, contextToken, previousToken, isJsxInitializer, isTypeOnlyLocation } : void 0; + }) || { type: "none" }; +} +function getCompletionEntryDetails(program, log, sourceFile, position, entryId, host, formatContext, preferences, cancellationToken) { + const typeChecker = program.getTypeChecker(); + const compilerOptions = program.getCompilerOptions(); + const { name, source, data } = entryId; + const { previousToken, contextToken } = getRelevantTokens(position, sourceFile); + if (isInString(sourceFile, position, previousToken)) { + return ts_Completions_StringCompletions_exports.getStringLiteralCompletionDetails(name, sourceFile, position, previousToken, program, host, cancellationToken, preferences); + } + const symbolCompletion = getSymbolCompletionFromEntryId(program, log, sourceFile, position, entryId, host, preferences); + switch (symbolCompletion.type) { + case "request": { + const { request } = symbolCompletion; + switch (request.kind) { + case 1 /* JsDocTagName */: + return ts_JsDoc_exports.getJSDocTagNameCompletionDetails(name); + case 2 /* JsDocTag */: + return ts_JsDoc_exports.getJSDocTagCompletionDetails(name); + case 3 /* JsDocParameterName */: + return ts_JsDoc_exports.getJSDocParameterNameCompletionDetails(name); + case 4 /* Keywords */: + return some(request.keywordCompletions, (c) => c.name === name) ? createSimpleDetails(name, "keyword" /* keyword */, 5 /* keyword */) : void 0; + default: + return Debug.assertNever(request); + } + } + case "symbol": { + const { symbol, location, contextToken: contextToken2, origin, previousToken: previousToken2 } = symbolCompletion; + const { codeActions, sourceDisplay } = getCompletionEntryCodeActionsAndSourceDisplay(name, location, contextToken2, origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken2, formatContext, preferences, data, source, cancellationToken); + const symbolName2 = originIsComputedPropertyName(origin) ? origin.symbolName : symbol.name; + return createCompletionDetailsForSymbol(symbol, symbolName2, typeChecker, sourceFile, location, cancellationToken, codeActions, sourceDisplay); + } + case "literal": { + const { literal } = symbolCompletion; + return createSimpleDetails(completionNameForLiteral(sourceFile, preferences, literal), "string" /* string */, typeof literal === "string" ? 8 /* stringLiteral */ : 7 /* numericLiteral */); + } + case "cases": { + const snippets = getExhaustiveCaseSnippets( + contextToken.parent, + sourceFile, + preferences, + program.getCompilerOptions(), + host, + program, + /*formatContext*/ + void 0 + ); + if (snippets == null ? void 0 : snippets.importAdder.hasFixes()) { + const { entry, importAdder } = snippets; + const changes = ts_textChanges_exports.ChangeTracker.with( + { host, formatContext, preferences }, + importAdder.writeFixes + ); + return { + name: entry.name, + kind: "" /* unknown */, + kindModifiers: "", + displayParts: [], + sourceDisplay: void 0, + codeActions: [{ + changes, + description: diagnosticToString([Diagnostics.Includes_imports_of_types_referenced_by_0, name]) + }] + }; + } + return { + name, + kind: "" /* unknown */, + kindModifiers: "", + displayParts: [], + sourceDisplay: void 0 + }; + } + case "none": + return allKeywordsCompletions().some((c) => c.name === name) ? createSimpleDetails(name, "keyword" /* keyword */, 5 /* keyword */) : void 0; + default: + Debug.assertNever(symbolCompletion); + } +} +function createSimpleDetails(name, kind, kind2) { + return createCompletionDetails(name, "" /* none */, kind, [displayPart(name, kind2)]); +} +function createCompletionDetailsForSymbol(symbol, name, checker, sourceFile, location, cancellationToken, codeActions, sourceDisplay) { + const { displayParts, documentation, symbolKind, tags } = checker.runWithCancellationToken(cancellationToken, (checker2) => ts_SymbolDisplay_exports.getSymbolDisplayPartsDocumentationAndSymbolKind(checker2, symbol, sourceFile, location, location, 7 /* All */)); + return createCompletionDetails(name, ts_SymbolDisplay_exports.getSymbolModifiers(checker, symbol), symbolKind, displayParts, documentation, tags, codeActions, sourceDisplay); +} +function createCompletionDetails(name, kindModifiers, kind, displayParts, documentation, tags, codeActions, source) { + return { name, kindModifiers, kind, displayParts, documentation, tags, codeActions, source, sourceDisplay: source }; +} +function getCompletionEntryCodeActionsAndSourceDisplay(name, location, contextToken, origin, symbol, program, host, compilerOptions, sourceFile, position, previousToken, formatContext, preferences, data, source, cancellationToken) { + if (data == null ? void 0 : data.moduleSpecifier) { + if (previousToken && getImportStatementCompletionInfo(contextToken || previousToken, sourceFile).replacementSpan) { + return { codeActions: void 0, sourceDisplay: [textPart(data.moduleSpecifier)] }; + } + } + if (source === "ClassMemberSnippet/" /* ClassMemberSnippet */) { + const { importAdder, eraseRange } = getEntryForMemberCompletion( + host, + program, + compilerOptions, + preferences, + name, + symbol, + location, + position, + contextToken, + formatContext + ); + if ((importAdder == null ? void 0 : importAdder.hasFixes()) || eraseRange) { + const changes = ts_textChanges_exports.ChangeTracker.with( + { host, formatContext, preferences }, + (tracker) => { + if (importAdder) { + importAdder.writeFixes(tracker); + } + if (eraseRange) { + tracker.deleteRange(sourceFile, eraseRange); + } + } + ); + return { + sourceDisplay: void 0, + codeActions: [{ + changes, + description: (importAdder == null ? void 0 : importAdder.hasFixes()) ? diagnosticToString([Diagnostics.Includes_imports_of_types_referenced_by_0, name]) : diagnosticToString([Diagnostics.Update_modifiers_of_0, name]) + }] + }; + } + } + if (originIsTypeOnlyAlias(origin)) { + const codeAction2 = ts_codefix_exports.getPromoteTypeOnlyCompletionAction( + sourceFile, + origin.declaration.name, + program, + host, + formatContext, + preferences + ); + Debug.assertIsDefined(codeAction2, "Expected to have a code action for promoting type-only alias"); + return { codeActions: [codeAction2], sourceDisplay: void 0 }; + } + if (source === "ObjectLiteralMemberWithComma/" /* ObjectLiteralMemberWithComma */ && contextToken) { + const changes = ts_textChanges_exports.ChangeTracker.with( + { host, formatContext, preferences }, + (tracker) => tracker.insertText(sourceFile, contextToken.end, ",") + ); + if (changes) { + return { + sourceDisplay: void 0, + codeActions: [{ + changes, + description: diagnosticToString([Diagnostics.Add_missing_comma_for_object_member_completion_0, name]) + }] + }; + } + } + if (!origin || !(originIsExport(origin) || originIsResolvedExport(origin))) { + return { codeActions: void 0, sourceDisplay: void 0 }; + } + const checker = origin.isFromPackageJson ? host.getPackageJsonAutoImportProvider().getTypeChecker() : program.getTypeChecker(); + const { moduleSymbol } = origin; + const targetSymbol = checker.getMergedSymbol(skipAlias(symbol.exportSymbol || symbol, checker)); + const isJsxOpeningTagName = (contextToken == null ? void 0 : contextToken.kind) === 30 /* LessThanToken */ && isJsxOpeningLikeElement(contextToken.parent); + const { moduleSpecifier, codeAction } = ts_codefix_exports.getImportCompletionAction( + targetSymbol, + moduleSymbol, + data == null ? void 0 : data.exportMapKey, + sourceFile, + name, + isJsxOpeningTagName, + host, + program, + formatContext, + previousToken && isIdentifier(previousToken) ? previousToken.getStart(sourceFile) : position, + preferences, + cancellationToken + ); + Debug.assert(!(data == null ? void 0 : data.moduleSpecifier) || moduleSpecifier === data.moduleSpecifier); + return { sourceDisplay: [textPart(moduleSpecifier)], codeActions: [codeAction] }; +} +function getCompletionEntrySymbol(program, log, sourceFile, position, entryId, host, preferences) { + const completion = getSymbolCompletionFromEntryId(program, log, sourceFile, position, entryId, host, preferences); + return completion.type === "symbol" ? completion.symbol : void 0; +} +var CompletionKind = /* @__PURE__ */ ((CompletionKind2) => { + CompletionKind2[CompletionKind2["ObjectPropertyDeclaration"] = 0] = "ObjectPropertyDeclaration"; + CompletionKind2[CompletionKind2["Global"] = 1] = "Global"; + CompletionKind2[CompletionKind2["PropertyAccess"] = 2] = "PropertyAccess"; + CompletionKind2[CompletionKind2["MemberLike"] = 3] = "MemberLike"; + CompletionKind2[CompletionKind2["String"] = 4] = "String"; + CompletionKind2[CompletionKind2["None"] = 5] = "None"; + return CompletionKind2; +})(CompletionKind || {}); +function getRecommendedCompletion(previousToken, contextualType, checker) { + return firstDefined(contextualType && (contextualType.isUnion() ? contextualType.types : [contextualType]), (type) => { + const symbol = type && type.symbol; + return symbol && (symbol.flags & (8 /* EnumMember */ | 384 /* Enum */ | 32 /* Class */) && !isAbstractConstructorSymbol(symbol)) ? getFirstSymbolInChain(symbol, previousToken, checker) : void 0; + }); +} +function getContextualType(previousToken, position, sourceFile, checker) { + const { parent: parent2 } = previousToken; + switch (previousToken.kind) { + case 80 /* Identifier */: + return getContextualTypeFromParent(previousToken, checker); + case 64 /* EqualsToken */: + switch (parent2.kind) { + case 261 /* VariableDeclaration */: + return checker.getContextualType(parent2.initializer); + // TODO: GH#18217 + case 227 /* BinaryExpression */: + return checker.getTypeAtLocation(parent2.left); + case 292 /* JsxAttribute */: + return checker.getContextualTypeForJsxAttribute(parent2); + default: + return void 0; + } + case 105 /* NewKeyword */: + return checker.getContextualType(parent2); + case 84 /* CaseKeyword */: + const caseClause = tryCast(parent2, isCaseClause); + return caseClause ? getSwitchedType(caseClause, checker) : void 0; + case 19 /* OpenBraceToken */: + return isJsxExpression(parent2) && !isJsxElement(parent2.parent) && !isJsxFragment(parent2.parent) ? checker.getContextualTypeForJsxAttribute(parent2.parent) : void 0; + default: + const argInfo = ts_SignatureHelp_exports.getArgumentInfoForCompletions(previousToken, position, sourceFile, checker); + return argInfo ? checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, argInfo.argumentIndex) : isEqualityOperatorKind(previousToken.kind) && isBinaryExpression(parent2) && isEqualityOperatorKind(parent2.operatorToken.kind) ? ( + // completion at `x ===/**/` should be for the right side + checker.getTypeAtLocation(parent2.left) + ) : checker.getContextualType(previousToken, 4 /* Completions */) || checker.getContextualType(previousToken); + } +} +function getFirstSymbolInChain(symbol, enclosingDeclaration, checker) { + const chain = checker.getAccessibleSymbolChain( + symbol, + enclosingDeclaration, + /*meaning*/ + -1 /* All */, + /*useOnlyExternalAliasing*/ + false + ); + if (chain) return first(chain); + return symbol.parent && (isModuleSymbol(symbol.parent) ? symbol : getFirstSymbolInChain(symbol.parent, enclosingDeclaration, checker)); +} +function isModuleSymbol(symbol) { + var _a; + return !!((_a = symbol.declarations) == null ? void 0 : _a.some((d) => d.kind === 308 /* SourceFile */)); +} +function getCompletionData(program, log, sourceFile, compilerOptions, position, preferences, detailsEntryId, host, formatContext, cancellationToken) { + const typeChecker = program.getTypeChecker(); + const inCheckedFile = isCheckedFile(sourceFile, compilerOptions); + let start = timestamp(); + let currentToken = getTokenAtPosition(sourceFile, position); + log("getCompletionData: Get current token: " + (timestamp() - start)); + start = timestamp(); + const insideComment = isInComment(sourceFile, position, currentToken); + log("getCompletionData: Is inside comment: " + (timestamp() - start)); + let insideJsDocTagTypeExpression = false; + let insideJsDocImportTag = false; + let isInSnippetScope = false; + if (insideComment) { + if (hasDocComment(sourceFile, position)) { + if (sourceFile.text.charCodeAt(position - 1) === 64 /* at */) { + return { kind: 1 /* JsDocTagName */ }; + } else { + const lineStart = getLineStartPositionForPosition(position, sourceFile); + if (!/[^*|\s(/)]/.test(sourceFile.text.substring(lineStart, position))) { + return { kind: 2 /* JsDocTag */ }; + } + } + } + const tag = getJsDocTagAtPosition(currentToken, position); + if (tag) { + if (tag.tagName.pos <= position && position <= tag.tagName.end) { + return { kind: 1 /* JsDocTagName */ }; + } + if (isJSDocImportTag(tag)) { + insideJsDocImportTag = true; + } else { + const typeExpression = tryGetTypeExpressionFromTag(tag); + if (typeExpression) { + currentToken = getTokenAtPosition(sourceFile, position); + if (!currentToken || !isDeclarationName(currentToken) && (currentToken.parent.kind !== 349 /* JSDocPropertyTag */ || currentToken.parent.name !== currentToken)) { + insideJsDocTagTypeExpression = isCurrentlyEditingNode(typeExpression); + } + } + if (!insideJsDocTagTypeExpression && isJSDocParameterTag(tag) && (nodeIsMissing(tag.name) || tag.name.pos <= position && position <= tag.name.end)) { + return { kind: 3 /* JsDocParameterName */, tag }; + } + } + } + if (!insideJsDocTagTypeExpression && !insideJsDocImportTag) { + log("Returning an empty list because completion was inside a regular comment or plain text part of a JsDoc comment."); + return void 0; + } + } + start = timestamp(); + const isJsOnlyLocation = !insideJsDocTagTypeExpression && !insideJsDocImportTag && isSourceFileJS(sourceFile); + const tokens = getRelevantTokens(position, sourceFile); + const previousToken = tokens.previousToken; + let contextToken = tokens.contextToken; + log("getCompletionData: Get previous token: " + (timestamp() - start)); + let node = currentToken; + let propertyAccessToConvert; + let isRightOfDot = false; + let isRightOfQuestionDot = false; + let isRightOfOpenTag = false; + let isStartingCloseTag = false; + let isJsxInitializer = false; + let isJsxIdentifierExpected = false; + let importStatementCompletion; + let location = getTouchingPropertyName(sourceFile, position); + let keywordFilters = 0 /* None */; + let isNewIdentifierLocation = false; + let flags = 0 /* None */; + let defaultCommitCharacters; + if (contextToken) { + const importStatementCompletionInfo = getImportStatementCompletionInfo(contextToken, sourceFile); + if (importStatementCompletionInfo.keywordCompletion) { + if (importStatementCompletionInfo.isKeywordOnlyCompletion) { + return { + kind: 4 /* Keywords */, + keywordCompletions: [keywordToCompletionEntry(importStatementCompletionInfo.keywordCompletion)], + isNewIdentifierLocation: importStatementCompletionInfo.isNewIdentifierLocation + }; + } + keywordFilters = keywordFiltersFromSyntaxKind(importStatementCompletionInfo.keywordCompletion); + } + if (importStatementCompletionInfo.replacementSpan && preferences.includeCompletionsForImportStatements && preferences.includeCompletionsWithInsertText) { + flags |= 2 /* IsImportStatementCompletion */; + importStatementCompletion = importStatementCompletionInfo; + isNewIdentifierLocation = importStatementCompletionInfo.isNewIdentifierLocation; + } + if (!importStatementCompletionInfo.replacementSpan && isCompletionListBlocker(contextToken)) { + log("Returning an empty list because completion was requested in an invalid position."); + return keywordFilters ? keywordCompletionData(keywordFilters, isJsOnlyLocation, computeCommitCharactersAndIsNewIdentifier().isNewIdentifierLocation) : void 0; + } + let parent2 = contextToken.parent; + if (contextToken.kind === 25 /* DotToken */ || contextToken.kind === 29 /* QuestionDotToken */) { + isRightOfDot = contextToken.kind === 25 /* DotToken */; + isRightOfQuestionDot = contextToken.kind === 29 /* QuestionDotToken */; + switch (parent2.kind) { + case 212 /* PropertyAccessExpression */: + propertyAccessToConvert = parent2; + node = propertyAccessToConvert.expression; + const leftmostAccessExpression = getLeftmostAccessExpression(propertyAccessToConvert); + if (nodeIsMissing(leftmostAccessExpression) || (isCallExpression(node) || isFunctionLike(node)) && node.end === contextToken.pos && node.getChildCount(sourceFile) && last(node.getChildren(sourceFile)).kind !== 22 /* CloseParenToken */) { + return void 0; + } + break; + case 167 /* QualifiedName */: + node = parent2.left; + break; + case 268 /* ModuleDeclaration */: + node = parent2.name; + break; + case 206 /* ImportType */: + node = parent2; + break; + case 237 /* MetaProperty */: + node = parent2.getFirstToken(sourceFile); + Debug.assert(node.kind === 102 /* ImportKeyword */ || node.kind === 105 /* NewKeyword */); + break; + default: + return void 0; + } + } else if (!importStatementCompletion) { + if (parent2 && parent2.kind === 212 /* PropertyAccessExpression */) { + contextToken = parent2; + parent2 = parent2.parent; + } + if (currentToken.parent === location) { + switch (currentToken.kind) { + case 32 /* GreaterThanToken */: + if (currentToken.parent.kind === 285 /* JsxElement */ || currentToken.parent.kind === 287 /* JsxOpeningElement */) { + location = currentToken; + } + break; + case 44 /* SlashToken */: + if (currentToken.parent.kind === 286 /* JsxSelfClosingElement */) { + location = currentToken; + } + break; + } + } + switch (parent2.kind) { + case 288 /* JsxClosingElement */: + if (contextToken.kind === 44 /* SlashToken */) { + isStartingCloseTag = true; + location = contextToken; + } + break; + case 227 /* BinaryExpression */: + if (!binaryExpressionMayBeOpenTag(parent2)) { + break; + } + // falls through + case 286 /* JsxSelfClosingElement */: + case 285 /* JsxElement */: + case 287 /* JsxOpeningElement */: + isJsxIdentifierExpected = true; + if (contextToken.kind === 30 /* LessThanToken */) { + isRightOfOpenTag = true; + location = contextToken; + } + break; + case 295 /* JsxExpression */: + case 294 /* JsxSpreadAttribute */: + if (previousToken.kind === 20 /* CloseBraceToken */ || previousToken.kind === 80 /* Identifier */ && previousToken.parent.kind === 292 /* JsxAttribute */) { + isJsxIdentifierExpected = true; + } + break; + case 292 /* JsxAttribute */: + if (parent2.initializer === previousToken && previousToken.end < position) { + isJsxIdentifierExpected = true; + break; + } + switch (previousToken.kind) { + case 64 /* EqualsToken */: + isJsxInitializer = true; + break; + case 80 /* Identifier */: + isJsxIdentifierExpected = true; + if (parent2 !== previousToken.parent && !parent2.initializer && findChildOfKind(parent2, 64 /* EqualsToken */, sourceFile)) { + isJsxInitializer = previousToken; + } + } + break; + } + } + } + const semanticStart = timestamp(); + let completionKind = 5 /* None */; + let hasUnresolvedAutoImports = false; + let symbols = []; + let importSpecifierResolver; + const symbolToOriginInfoMap = []; + const symbolToSortTextMap = []; + const seenPropertySymbols = /* @__PURE__ */ new Set(); + const isTypeOnlyLocation = isTypeOnlyCompletion(); + const getModuleSpecifierResolutionHost = memoizeOne((isFromPackageJson) => { + return createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host); + }); + if (isRightOfDot || isRightOfQuestionDot) { + getTypeScriptMemberSymbols(); + } else if (isRightOfOpenTag) { + symbols = typeChecker.getJsxIntrinsicTagNamesAt(location); + Debug.assertEachIsDefined(symbols, "getJsxIntrinsicTagNames() should all be defined"); + tryGetGlobalSymbols(); + completionKind = 1 /* Global */; + keywordFilters = 0 /* None */; + } else if (isStartingCloseTag) { + const tagName = contextToken.parent.parent.openingElement.tagName; + const tagSymbol = typeChecker.getSymbolAtLocation(tagName); + if (tagSymbol) { + symbols = [tagSymbol]; + } + completionKind = 1 /* Global */; + keywordFilters = 0 /* None */; + } else { + if (!tryGetGlobalSymbols()) { + return keywordFilters ? keywordCompletionData(keywordFilters, isJsOnlyLocation, isNewIdentifierLocation) : void 0; + } + } + log("getCompletionData: Semantic work: " + (timestamp() - semanticStart)); + const contextualType = previousToken && getContextualType(previousToken, position, sourceFile, typeChecker); + const isLiteralExpected = !tryCast(previousToken, isStringLiteralLike) && !isJsxIdentifierExpected; + const literals = !isLiteralExpected ? [] : mapDefined( + contextualType && (contextualType.isUnion() ? contextualType.types : [contextualType]), + (t) => t.isLiteral() && !(t.flags & 1024 /* EnumLiteral */) ? t.value : void 0 + ); + const recommendedCompletion = previousToken && contextualType && getRecommendedCompletion(previousToken, contextualType, typeChecker); + return { + kind: 0 /* Data */, + symbols, + completionKind, + isInSnippetScope, + propertyAccessToConvert, + isNewIdentifierLocation, + location, + keywordFilters, + literals, + symbolToOriginInfoMap, + recommendedCompletion, + previousToken, + contextToken, + isJsxInitializer, + insideJsDocTagTypeExpression, + symbolToSortTextMap, + isTypeOnlyLocation, + isJsxIdentifierExpected, + isRightOfOpenTag, + isRightOfDotOrQuestionDot: isRightOfDot || isRightOfQuestionDot, + importStatementCompletion, + hasUnresolvedAutoImports, + flags, + defaultCommitCharacters + }; + function isTagWithTypeExpression(tag) { + switch (tag.kind) { + case 342 /* JSDocParameterTag */: + case 349 /* JSDocPropertyTag */: + case 343 /* JSDocReturnTag */: + case 345 /* JSDocTypeTag */: + case 347 /* JSDocTypedefTag */: + case 350 /* JSDocThrowsTag */: + case 351 /* JSDocSatisfiesTag */: + return true; + case 346 /* JSDocTemplateTag */: + return !!tag.constraint; + default: + return false; + } + } + function tryGetTypeExpressionFromTag(tag) { + if (isTagWithTypeExpression(tag)) { + const typeExpression = isJSDocTemplateTag(tag) ? tag.constraint : tag.typeExpression; + return typeExpression && typeExpression.kind === 310 /* JSDocTypeExpression */ ? typeExpression : void 0; + } + if (isJSDocAugmentsTag(tag) || isJSDocImplementsTag(tag)) { + return tag.class; + } + return void 0; + } + function getTypeScriptMemberSymbols() { + completionKind = 2 /* PropertyAccess */; + const isImportType = isLiteralImportTypeNode(node); + const isTypeLocation = isImportType && !node.isTypeOf || isPartOfTypeNode(node.parent) || isPossiblyTypeArgumentPosition(contextToken, sourceFile, typeChecker); + const isRhsOfImportDeclaration = isInRightSideOfInternalImportEqualsDeclaration(node); + if (isEntityName(node) || isImportType || isPropertyAccessExpression(node)) { + const isNamespaceName = isModuleDeclaration(node.parent); + if (isNamespaceName) { + isNewIdentifierLocation = true; + defaultCommitCharacters = []; + } + let symbol = typeChecker.getSymbolAtLocation(node); + if (symbol) { + symbol = skipAlias(symbol, typeChecker); + if (symbol.flags & (1536 /* Module */ | 384 /* Enum */)) { + const exportedSymbols = typeChecker.getExportsOfModule(symbol); + Debug.assertEachIsDefined(exportedSymbols, "getExportsOfModule() should all be defined"); + const isValidValueAccess = (symbol2) => typeChecker.isValidPropertyAccess(isImportType ? node : node.parent, symbol2.name); + const isValidTypeAccess = (symbol2) => symbolCanBeReferencedAtTypeLocation(symbol2, typeChecker); + const isValidAccess = isNamespaceName ? (symbol2) => { + var _a; + return !!(symbol2.flags & 1920 /* Namespace */) && !((_a = symbol2.declarations) == null ? void 0 : _a.every((d) => d.parent === node.parent)); + } : isRhsOfImportDeclaration ? ( + // Any kind is allowed when dotting off namespace in internal import equals declaration + (symbol2) => isValidTypeAccess(symbol2) || isValidValueAccess(symbol2) + ) : isTypeLocation || insideJsDocTagTypeExpression ? isValidTypeAccess : isValidValueAccess; + for (const exportedSymbol of exportedSymbols) { + if (isValidAccess(exportedSymbol)) { + symbols.push(exportedSymbol); + } + } + if (!isTypeLocation && !insideJsDocTagTypeExpression && symbol.declarations && symbol.declarations.some((d) => d.kind !== 308 /* SourceFile */ && d.kind !== 268 /* ModuleDeclaration */ && d.kind !== 267 /* EnumDeclaration */)) { + let type = typeChecker.getTypeOfSymbolAtLocation(symbol, node).getNonOptionalType(); + let insertQuestionDot = false; + if (type.isNullableType()) { + const canCorrectToQuestionDot = isRightOfDot && !isRightOfQuestionDot && preferences.includeAutomaticOptionalChainCompletions !== false; + if (canCorrectToQuestionDot || isRightOfQuestionDot) { + type = type.getNonNullableType(); + if (canCorrectToQuestionDot) { + insertQuestionDot = true; + } + } + } + addTypeProperties(type, !!(node.flags & 65536 /* AwaitContext */), insertQuestionDot); + } + return; + } + } + } + if (!isTypeLocation || isInTypeQuery(node)) { + typeChecker.tryGetThisTypeAt( + node, + /*includeGlobalThis*/ + false + ); + let type = typeChecker.getTypeAtLocation(node).getNonOptionalType(); + if (!isTypeLocation) { + let insertQuestionDot = false; + if (type.isNullableType()) { + const canCorrectToQuestionDot = isRightOfDot && !isRightOfQuestionDot && preferences.includeAutomaticOptionalChainCompletions !== false; + if (canCorrectToQuestionDot || isRightOfQuestionDot) { + type = type.getNonNullableType(); + if (canCorrectToQuestionDot) { + insertQuestionDot = true; + } + } + } + addTypeProperties(type, !!(node.flags & 65536 /* AwaitContext */), insertQuestionDot); + } else { + addTypeProperties( + type.getNonNullableType(), + /*insertAwait*/ + false, + /*insertQuestionDot*/ + false + ); + } + } + } + function addTypeProperties(type, insertAwait, insertQuestionDot) { + if (type.getStringIndexType()) { + isNewIdentifierLocation = true; + defaultCommitCharacters = []; + } + if (isRightOfQuestionDot && some(type.getCallSignatures())) { + isNewIdentifierLocation = true; + defaultCommitCharacters ?? (defaultCommitCharacters = allCommitCharacters); + } + const propertyAccess = node.kind === 206 /* ImportType */ ? node : node.parent; + if (inCheckedFile) { + for (const symbol of type.getApparentProperties()) { + if (typeChecker.isValidPropertyAccessForCompletions(propertyAccess, type, symbol)) { + addPropertySymbol( + symbol, + /*insertAwait*/ + false, + insertQuestionDot + ); + } + } + } else { + symbols.push(...filter(getPropertiesForCompletion(type, typeChecker), (s) => typeChecker.isValidPropertyAccessForCompletions(propertyAccess, type, s))); + } + if (insertAwait && preferences.includeCompletionsWithInsertText) { + const promiseType = typeChecker.getPromisedTypeOfPromise(type); + if (promiseType) { + for (const symbol of promiseType.getApparentProperties()) { + if (typeChecker.isValidPropertyAccessForCompletions(propertyAccess, promiseType, symbol)) { + addPropertySymbol( + symbol, + /*insertAwait*/ + true, + insertQuestionDot + ); + } + } + } + } + } + function addPropertySymbol(symbol, insertAwait, insertQuestionDot) { + var _a; + const computedPropertyName = firstDefined(symbol.declarations, (decl) => tryCast(getNameOfDeclaration(decl), isComputedPropertyName)); + if (computedPropertyName) { + const leftMostName = getLeftMostName(computedPropertyName.expression); + const nameSymbol = leftMostName && typeChecker.getSymbolAtLocation(leftMostName); + const firstAccessibleSymbol = nameSymbol && getFirstSymbolInChain(nameSymbol, contextToken, typeChecker); + const firstAccessibleSymbolId = firstAccessibleSymbol && getSymbolId(firstAccessibleSymbol); + if (firstAccessibleSymbolId && addToSeen(seenPropertySymbols, firstAccessibleSymbolId)) { + const index = symbols.length; + symbols.push(firstAccessibleSymbol); + symbolToSortTextMap[getSymbolId(firstAccessibleSymbol)] = SortText.GlobalsOrKeywords; + const moduleSymbol = firstAccessibleSymbol.parent; + if (!moduleSymbol || !isExternalModuleSymbol(moduleSymbol) || typeChecker.tryGetMemberInModuleExportsAndProperties(firstAccessibleSymbol.name, moduleSymbol) !== firstAccessibleSymbol) { + symbolToOriginInfoMap[index] = { kind: getNullableSymbolOriginInfoKind(2 /* SymbolMemberNoExport */) }; + } else { + const fileName = isExternalModuleNameRelative(stripQuotes(moduleSymbol.name)) ? (_a = getSourceFileOfModule(moduleSymbol)) == null ? void 0 : _a.fileName : void 0; + const { moduleSpecifier } = (importSpecifierResolver || (importSpecifierResolver = ts_codefix_exports.createImportSpecifierResolver(sourceFile, program, host, preferences))).getModuleSpecifierForBestExportInfo( + [{ + exportKind: 0 /* Named */, + moduleFileName: fileName, + isFromPackageJson: false, + moduleSymbol, + symbol: firstAccessibleSymbol, + targetFlags: skipAlias(firstAccessibleSymbol, typeChecker).flags + }], + position, + isValidTypeOnlyAliasUseSite(location) + ) || {}; + if (moduleSpecifier) { + const origin = { + kind: getNullableSymbolOriginInfoKind(6 /* SymbolMemberExport */), + moduleSymbol, + isDefaultExport: false, + symbolName: firstAccessibleSymbol.name, + exportName: firstAccessibleSymbol.name, + fileName, + moduleSpecifier + }; + symbolToOriginInfoMap[index] = origin; + } + } + } else if (preferences.includeCompletionsWithInsertText) { + if (firstAccessibleSymbolId && seenPropertySymbols.has(firstAccessibleSymbolId)) { + return; + } + addSymbolOriginInfo(symbol); + addSymbolSortInfo(symbol); + symbols.push(symbol); + } + } else { + addSymbolOriginInfo(symbol); + addSymbolSortInfo(symbol); + symbols.push(symbol); + } + function addSymbolSortInfo(symbol2) { + if (isStaticProperty(symbol2)) { + symbolToSortTextMap[getSymbolId(symbol2)] = SortText.LocalDeclarationPriority; + } + } + function addSymbolOriginInfo(symbol2) { + if (preferences.includeCompletionsWithInsertText) { + if (insertAwait && addToSeen(seenPropertySymbols, getSymbolId(symbol2))) { + symbolToOriginInfoMap[symbols.length] = { kind: getNullableSymbolOriginInfoKind(8 /* Promise */) }; + } else if (insertQuestionDot) { + symbolToOriginInfoMap[symbols.length] = { kind: 16 /* Nullable */ }; + } + } + } + function getNullableSymbolOriginInfoKind(kind) { + return insertQuestionDot ? kind | 16 /* Nullable */ : kind; + } + } + function getLeftMostName(e) { + return isIdentifier(e) ? e : isPropertyAccessExpression(e) ? getLeftMostName(e.expression) : void 0; + } + function tryGetGlobalSymbols() { + const result = tryGetObjectTypeLiteralInTypeArgumentCompletionSymbols() || tryGetObjectLikeCompletionSymbols() || tryGetImportCompletionSymbols() || tryGetImportOrExportClauseCompletionSymbols() || tryGetImportAttributesCompletionSymbols() || tryGetLocalNamedExportCompletionSymbols() || tryGetConstructorCompletion() || tryGetClassLikeCompletionSymbols() || tryGetJsxCompletionSymbols() || (getGlobalCompletions(), 1 /* Success */); + return result === 1 /* Success */; + } + function tryGetConstructorCompletion() { + if (!tryGetConstructorLikeCompletionContainer(contextToken)) return 0 /* Continue */; + completionKind = 5 /* None */; + isNewIdentifierLocation = true; + keywordFilters = 4 /* ConstructorParameterKeywords */; + return 1 /* Success */; + } + function tryGetJsxCompletionSymbols() { + const jsxContainer = tryGetContainingJsxElement(contextToken); + const attrsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes); + if (!attrsType) return 0 /* Continue */; + const completionsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes, 4 /* Completions */); + symbols = concatenate(symbols, filterJsxAttributes(getPropertiesForObjectExpression(attrsType, completionsType, jsxContainer.attributes, typeChecker), jsxContainer.attributes.properties)); + setSortTextToOptionalMember(); + completionKind = 3 /* MemberLike */; + isNewIdentifierLocation = false; + return 1 /* Success */; + } + function tryGetImportCompletionSymbols() { + if (!importStatementCompletion) return 0 /* Continue */; + isNewIdentifierLocation = true; + collectAutoImports(); + return 1 /* Success */; + } + function getGlobalCompletions() { + keywordFilters = tryGetFunctionLikeBodyCompletionContainer(contextToken) ? 5 /* FunctionLikeBodyKeywords */ : 1 /* All */; + completionKind = 1 /* Global */; + ({ isNewIdentifierLocation, defaultCommitCharacters } = computeCommitCharactersAndIsNewIdentifier()); + if (previousToken !== contextToken) { + Debug.assert(!!previousToken, "Expected 'contextToken' to be defined when different from 'previousToken'."); + } + const adjustedPosition = previousToken !== contextToken ? previousToken.getStart() : position; + const scopeNode = getScopeNode(contextToken, adjustedPosition, sourceFile) || sourceFile; + isInSnippetScope = isSnippetScope(scopeNode); + const symbolMeanings = (isTypeOnlyLocation ? 0 /* None */ : 111551 /* Value */) | 788968 /* Type */ | 1920 /* Namespace */ | 2097152 /* Alias */; + const typeOnlyAliasNeedsPromotion = previousToken && !isValidTypeOnlyAliasUseSite(previousToken); + symbols = concatenate(symbols, typeChecker.getSymbolsInScope(scopeNode, symbolMeanings)); + Debug.assertEachIsDefined(symbols, "getSymbolsInScope() should all be defined"); + for (let i = 0; i < symbols.length; i++) { + const symbol = symbols[i]; + if (!typeChecker.isArgumentsSymbol(symbol) && !some(symbol.declarations, (d) => d.getSourceFile() === sourceFile)) { + symbolToSortTextMap[getSymbolId(symbol)] = SortText.GlobalsOrKeywords; + } + if (typeOnlyAliasNeedsPromotion && !(symbol.flags & 111551 /* Value */)) { + const typeOnlyAliasDeclaration = symbol.declarations && find(symbol.declarations, isTypeOnlyImportDeclaration); + if (typeOnlyAliasDeclaration) { + const origin = { kind: 64 /* TypeOnlyAlias */, declaration: typeOnlyAliasDeclaration }; + symbolToOriginInfoMap[i] = origin; + } + } + } + if (preferences.includeCompletionsWithInsertText && scopeNode.kind !== 308 /* SourceFile */) { + const thisType = typeChecker.tryGetThisTypeAt( + scopeNode, + /*includeGlobalThis*/ + false, + isClassLike(scopeNode.parent) ? scopeNode : void 0 + ); + if (thisType && !isProbablyGlobalType(thisType, sourceFile, typeChecker)) { + for (const symbol of getPropertiesForCompletion(thisType, typeChecker)) { + symbolToOriginInfoMap[symbols.length] = { kind: 1 /* ThisType */ }; + symbols.push(symbol); + symbolToSortTextMap[getSymbolId(symbol)] = SortText.SuggestedClassMembers; + } + } + } + collectAutoImports(); + if (isTypeOnlyLocation) { + keywordFilters = contextToken && isAssertionExpression(contextToken.parent) ? 6 /* TypeAssertionKeywords */ : 7 /* TypeKeywords */; + } + } + function shouldOfferImportCompletions() { + var _a; + if (importStatementCompletion) return true; + if (!preferences.includeCompletionsForModuleExports) return false; + if (sourceFile.externalModuleIndicator || sourceFile.commonJsModuleIndicator) return true; + if (compilerOptionsIndicateEsModules(program.getCompilerOptions())) return true; + return ((_a = program.getSymlinkCache) == null ? void 0 : _a.call(program).hasAnySymlinks()) || !!program.getCompilerOptions().paths || programContainsModules(program); + } + function isSnippetScope(scopeNode) { + switch (scopeNode.kind) { + case 308 /* SourceFile */: + case 229 /* TemplateExpression */: + case 295 /* JsxExpression */: + case 242 /* Block */: + return true; + default: + return isStatement(scopeNode); + } + } + function isTypeOnlyCompletion() { + return insideJsDocTagTypeExpression || insideJsDocImportTag || !!importStatementCompletion && isTypeOnlyImportOrExportDeclaration(location.parent) || !isContextTokenValueLocation(contextToken) && (isPossiblyTypeArgumentPosition(contextToken, sourceFile, typeChecker) || isPartOfTypeNode(location) || isContextTokenTypeLocation(contextToken)); + } + function isContextTokenValueLocation(contextToken2) { + return contextToken2 && (contextToken2.kind === 114 /* TypeOfKeyword */ && (contextToken2.parent.kind === 187 /* TypeQuery */ || isTypeOfExpression(contextToken2.parent)) || contextToken2.kind === 131 /* AssertsKeyword */ && contextToken2.parent.kind === 183 /* TypePredicate */); + } + function isContextTokenTypeLocation(contextToken2) { + if (contextToken2) { + const parentKind = contextToken2.parent.kind; + switch (contextToken2.kind) { + case 59 /* ColonToken */: + return parentKind === 173 /* PropertyDeclaration */ || parentKind === 172 /* PropertySignature */ || parentKind === 170 /* Parameter */ || parentKind === 261 /* VariableDeclaration */ || isFunctionLikeKind(parentKind); + case 64 /* EqualsToken */: + return parentKind === 266 /* TypeAliasDeclaration */ || parentKind === 169 /* TypeParameter */; + case 130 /* AsKeyword */: + return parentKind === 235 /* AsExpression */; + case 30 /* LessThanToken */: + return parentKind === 184 /* TypeReference */ || parentKind === 217 /* TypeAssertionExpression */; + case 96 /* ExtendsKeyword */: + return parentKind === 169 /* TypeParameter */; + case 152 /* SatisfiesKeyword */: + return parentKind === 239 /* SatisfiesExpression */; + } + } + return false; + } + function collectAutoImports() { + var _a, _b; + if (!shouldOfferImportCompletions()) return; + Debug.assert(!(detailsEntryId == null ? void 0 : detailsEntryId.data), "Should not run 'collectAutoImports' when faster path is available via `data`"); + if (detailsEntryId && !detailsEntryId.source) { + return; + } + flags |= 1 /* MayIncludeAutoImports */; + const isAfterTypeOnlyImportSpecifierModifier = previousToken === contextToken && importStatementCompletion; + const lowerCaseTokenText = isAfterTypeOnlyImportSpecifierModifier ? "" : previousToken && isIdentifier(previousToken) ? previousToken.text.toLowerCase() : ""; + const moduleSpecifierCache = (_a = host.getModuleSpecifierCache) == null ? void 0 : _a.call(host); + const exportInfo = getExportInfoMap(sourceFile, host, program, preferences, cancellationToken); + const packageJsonAutoImportProvider = (_b = host.getPackageJsonAutoImportProvider) == null ? void 0 : _b.call(host); + const packageJsonFilter = detailsEntryId ? void 0 : createPackageJsonImportFilter(sourceFile, preferences, host); + resolvingModuleSpecifiers( + "collectAutoImports", + host, + importSpecifierResolver || (importSpecifierResolver = ts_codefix_exports.createImportSpecifierResolver(sourceFile, program, host, preferences)), + program, + position, + preferences, + !!importStatementCompletion, + isValidTypeOnlyAliasUseSite(location), + (context) => { + exportInfo.search( + sourceFile.path, + /*preferCapitalized*/ + isRightOfOpenTag, + (symbolName2, targetFlags) => { + if (!isIdentifierText(symbolName2, getEmitScriptTarget(host.getCompilationSettings()))) return false; + if (!detailsEntryId && isStringANonContextualKeyword(symbolName2)) return false; + if (!isTypeOnlyLocation && !importStatementCompletion && !(targetFlags & 111551 /* Value */)) return false; + if (isTypeOnlyLocation && !(targetFlags & (1536 /* Module */ | 788968 /* Type */))) return false; + const firstChar = symbolName2.charCodeAt(0); + if (isRightOfOpenTag && (firstChar < 65 /* A */ || firstChar > 90 /* Z */)) return false; + if (detailsEntryId) return true; + return charactersFuzzyMatchInString(symbolName2, lowerCaseTokenText); + }, + (info, symbolName2, isFromAmbientModule, exportMapKey) => { + if (detailsEntryId && !some(info, (i) => detailsEntryId.source === stripQuotes(i.moduleSymbol.name))) { + return; + } + info = filter(info, isImportableExportInfo); + if (!info.length) { + return; + } + const result = context.tryResolve(info, isFromAmbientModule) || {}; + if (result === "failed") return; + let exportInfo2 = info[0], moduleSpecifier; + if (result !== "skipped") { + ({ exportInfo: exportInfo2 = info[0], moduleSpecifier } = result); + } + const isDefaultExport = exportInfo2.exportKind === 1 /* Default */; + const symbol = isDefaultExport && getLocalSymbolForExportDefault(Debug.checkDefined(exportInfo2.symbol)) || Debug.checkDefined(exportInfo2.symbol); + pushAutoImportSymbol(symbol, { + kind: moduleSpecifier ? 32 /* ResolvedExport */ : 4 /* Export */, + moduleSpecifier, + symbolName: symbolName2, + exportMapKey, + exportName: exportInfo2.exportKind === 2 /* ExportEquals */ ? "export=" /* ExportEquals */ : Debug.checkDefined(exportInfo2.symbol).name, + fileName: exportInfo2.moduleFileName, + isDefaultExport, + moduleSymbol: exportInfo2.moduleSymbol, + isFromPackageJson: exportInfo2.isFromPackageJson + }); + } + ); + hasUnresolvedAutoImports = context.skippedAny(); + flags |= context.resolvedAny() ? 8 /* ResolvedModuleSpecifiers */ : 0; + flags |= context.resolvedBeyondLimit() ? 16 /* ResolvedModuleSpecifiersBeyondLimit */ : 0; + } + ); + function isImportableExportInfo(info) { + return isImportable( + info.isFromPackageJson ? packageJsonAutoImportProvider : program, + sourceFile, + tryCast(info.moduleSymbol.valueDeclaration, isSourceFile), + info.moduleSymbol, + preferences, + packageJsonFilter, + getModuleSpecifierResolutionHost(info.isFromPackageJson), + moduleSpecifierCache + ); + } + } + function pushAutoImportSymbol(symbol, origin) { + const symbolId = getSymbolId(symbol); + if (symbolToSortTextMap[symbolId] === SortText.GlobalsOrKeywords) { + return; + } + symbolToOriginInfoMap[symbols.length] = origin; + symbolToSortTextMap[symbolId] = importStatementCompletion ? SortText.LocationPriority : SortText.AutoImportSuggestions; + symbols.push(symbol); + } + function collectObjectLiteralMethodSymbols(members, enclosingDeclaration) { + if (isInJSFile(location)) { + return; + } + members.forEach((member) => { + if (!isObjectLiteralMethodSymbol(member)) { + return; + } + const displayName = getCompletionEntryDisplayNameForSymbol( + member, + getEmitScriptTarget(compilerOptions), + /*origin*/ + void 0, + 0 /* ObjectPropertyDeclaration */, + /*jsxIdentifierExpected*/ + false + ); + if (!displayName) { + return; + } + const { name } = displayName; + const entryProps = getEntryForObjectLiteralMethodCompletion( + member, + name, + enclosingDeclaration, + program, + host, + compilerOptions, + preferences, + formatContext + ); + if (!entryProps) { + return; + } + const origin = { kind: 128 /* ObjectLiteralMethod */, ...entryProps }; + flags |= 32 /* MayIncludeMethodSnippets */; + symbolToOriginInfoMap[symbols.length] = origin; + symbols.push(member); + }); + } + function isObjectLiteralMethodSymbol(symbol) { + if (!(symbol.flags & (4 /* Property */ | 8192 /* Method */))) { + return false; + } + return true; + } + function getScopeNode(initialToken, position2, sourceFile2) { + let scope = initialToken; + while (scope && !positionBelongsToNode(scope, position2, sourceFile2)) { + scope = scope.parent; + } + return scope; + } + function isCompletionListBlocker(contextToken2) { + const start2 = timestamp(); + const result = isInStringOrRegularExpressionOrTemplateLiteral(contextToken2) || isSolelyIdentifierDefinitionLocation(contextToken2) || isDotOfNumericLiteral(contextToken2) || isInJsxText(contextToken2) || isBigIntLiteral(contextToken2); + log("getCompletionsAtPosition: isCompletionListBlocker: " + (timestamp() - start2)); + return result; + } + function isInJsxText(contextToken2) { + if (contextToken2.kind === 12 /* JsxText */) { + return true; + } + if (contextToken2.kind === 32 /* GreaterThanToken */ && contextToken2.parent) { + if (location === contextToken2.parent && (location.kind === 287 /* JsxOpeningElement */ || location.kind === 286 /* JsxSelfClosingElement */)) { + return false; + } + if (contextToken2.parent.kind === 287 /* JsxOpeningElement */) { + return location.parent.kind !== 287 /* JsxOpeningElement */; + } + if (contextToken2.parent.kind === 288 /* JsxClosingElement */ || contextToken2.parent.kind === 286 /* JsxSelfClosingElement */) { + return !!contextToken2.parent.parent && contextToken2.parent.parent.kind === 285 /* JsxElement */; + } + } + return false; + } + function computeCommitCharactersAndIsNewIdentifier() { + if (contextToken) { + const containingNodeKind = contextToken.parent.kind; + const tokenKind = keywordForNode(contextToken); + switch (tokenKind) { + case 28 /* CommaToken */: + switch (containingNodeKind) { + case 214 /* CallExpression */: + // func( a, | + case 215 /* NewExpression */: { + const expression = contextToken.parent.expression; + if (getLineAndCharacterOfPosition(sourceFile, expression.end).line !== getLineAndCharacterOfPosition(sourceFile, position).line) { + return { defaultCommitCharacters: noCommaCommitCharacters, isNewIdentifierLocation: true }; + } + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: true }; + } + case 227 /* BinaryExpression */: + return { defaultCommitCharacters: noCommaCommitCharacters, isNewIdentifierLocation: true }; + case 177 /* Constructor */: + // constructor( a, | /* public, protected, private keywords are allowed here, so show completion */ + case 185 /* FunctionType */: + // var x: (s: string, list| + case 211 /* ObjectLiteralExpression */: + return { defaultCommitCharacters: [], isNewIdentifierLocation: true }; + case 210 /* ArrayLiteralExpression */: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: true }; + default: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + case 21 /* OpenParenToken */: + switch (containingNodeKind) { + case 214 /* CallExpression */: + // func( | + case 215 /* NewExpression */: { + const expression = contextToken.parent.expression; + if (getLineAndCharacterOfPosition(sourceFile, expression.end).line !== getLineAndCharacterOfPosition(sourceFile, position).line) { + return { defaultCommitCharacters: noCommaCommitCharacters, isNewIdentifierLocation: true }; + } + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: true }; + } + case 218 /* ParenthesizedExpression */: + return { defaultCommitCharacters: noCommaCommitCharacters, isNewIdentifierLocation: true }; + case 177 /* Constructor */: + // constructor( | + case 197 /* ParenthesizedType */: + return { defaultCommitCharacters: [], isNewIdentifierLocation: true }; + default: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + case 23 /* OpenBracketToken */: + switch (containingNodeKind) { + case 210 /* ArrayLiteralExpression */: + // [ | + case 182 /* IndexSignature */: + // [ | : string ] + case 190 /* TupleType */: + // [ | : string ] + case 168 /* ComputedPropertyName */: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: true }; + default: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + case 144 /* ModuleKeyword */: + // module | + case 145 /* NamespaceKeyword */: + // namespace | + case 102 /* ImportKeyword */: + return { defaultCommitCharacters: [], isNewIdentifierLocation: true }; + case 25 /* DotToken */: + switch (containingNodeKind) { + case 268 /* ModuleDeclaration */: + return { defaultCommitCharacters: [], isNewIdentifierLocation: true }; + default: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + case 19 /* OpenBraceToken */: + switch (containingNodeKind) { + case 264 /* ClassDeclaration */: + // class A { | + case 211 /* ObjectLiteralExpression */: + return { defaultCommitCharacters: [], isNewIdentifierLocation: true }; + default: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + case 64 /* EqualsToken */: + switch (containingNodeKind) { + case 261 /* VariableDeclaration */: + // const x = a| + case 227 /* BinaryExpression */: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: true }; + default: + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + case 16 /* TemplateHead */: + return { + defaultCommitCharacters: allCommitCharacters, + isNewIdentifierLocation: containingNodeKind === 229 /* TemplateExpression */ + // `aa ${| + }; + case 17 /* TemplateMiddle */: + return { + defaultCommitCharacters: allCommitCharacters, + isNewIdentifierLocation: containingNodeKind === 240 /* TemplateSpan */ + // `aa ${10} dd ${| + }; + case 134 /* AsyncKeyword */: + return containingNodeKind === 175 /* MethodDeclaration */ || containingNodeKind === 305 /* ShorthandPropertyAssignment */ ? { defaultCommitCharacters: [], isNewIdentifierLocation: true } : { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + case 42 /* AsteriskToken */: + return containingNodeKind === 175 /* MethodDeclaration */ ? { defaultCommitCharacters: [], isNewIdentifierLocation: true } : { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + if (isClassMemberCompletionKeyword(tokenKind)) { + return { defaultCommitCharacters: [], isNewIdentifierLocation: true }; + } + } + return { defaultCommitCharacters: allCommitCharacters, isNewIdentifierLocation: false }; + } + function isInStringOrRegularExpressionOrTemplateLiteral(contextToken2) { + return (isRegularExpressionLiteral(contextToken2) || isStringTextContainingNode(contextToken2)) && (rangeContainsPositionExclusive(contextToken2, position) || position === contextToken2.end && (!!contextToken2.isUnterminated || isRegularExpressionLiteral(contextToken2))); + } + function tryGetObjectTypeLiteralInTypeArgumentCompletionSymbols() { + const typeLiteralNode = tryGetTypeLiteralNode(contextToken); + if (!typeLiteralNode) return 0 /* Continue */; + const intersectionTypeNode = isIntersectionTypeNode(typeLiteralNode.parent) ? typeLiteralNode.parent : void 0; + const containerTypeNode = intersectionTypeNode || typeLiteralNode; + const containerExpectedType = getConstraintOfTypeArgumentProperty(containerTypeNode, typeChecker); + if (!containerExpectedType) return 0 /* Continue */; + const containerActualType = typeChecker.getTypeFromTypeNode(containerTypeNode); + const members = getPropertiesForCompletion(containerExpectedType, typeChecker); + const existingMembers = getPropertiesForCompletion(containerActualType, typeChecker); + const existingMemberEscapedNames = /* @__PURE__ */ new Set(); + existingMembers.forEach((s) => existingMemberEscapedNames.add(s.escapedName)); + symbols = concatenate(symbols, filter(members, (s) => !existingMemberEscapedNames.has(s.escapedName))); + completionKind = 0 /* ObjectPropertyDeclaration */; + isNewIdentifierLocation = true; + return 1 /* Success */; + } + function tryGetObjectLikeCompletionSymbols() { + if ((contextToken == null ? void 0 : contextToken.kind) === 26 /* DotDotDotToken */) return 0 /* Continue */; + const symbolsStartIndex = symbols.length; + const objectLikeContainer = tryGetObjectLikeCompletionContainer(contextToken, position, sourceFile); + if (!objectLikeContainer) return 0 /* Continue */; + completionKind = 0 /* ObjectPropertyDeclaration */; + let typeMembers; + let existingMembers; + if (objectLikeContainer.kind === 211 /* ObjectLiteralExpression */) { + const instantiatedType = tryGetObjectLiteralContextualType(objectLikeContainer, typeChecker); + if (instantiatedType === void 0) { + if (objectLikeContainer.flags & 67108864 /* InWithStatement */) { + return 2 /* Fail */; + } + return 0 /* Continue */; + } + const completionsType = typeChecker.getContextualType(objectLikeContainer, 4 /* Completions */); + const hasStringIndexType = (completionsType || instantiatedType).getStringIndexType(); + const hasNumberIndextype = (completionsType || instantiatedType).getNumberIndexType(); + isNewIdentifierLocation = !!hasStringIndexType || !!hasNumberIndextype; + typeMembers = getPropertiesForObjectExpression(instantiatedType, completionsType, objectLikeContainer, typeChecker); + existingMembers = objectLikeContainer.properties; + if (typeMembers.length === 0) { + if (!hasNumberIndextype) { + return 0 /* Continue */; + } + } + } else { + Debug.assert(objectLikeContainer.kind === 207 /* ObjectBindingPattern */); + isNewIdentifierLocation = false; + const rootDeclaration = getRootDeclaration(objectLikeContainer.parent); + if (!isVariableLike(rootDeclaration)) return Debug.fail("Root declaration is not variable-like."); + let canGetType = hasInitializer(rootDeclaration) || !!getEffectiveTypeAnnotationNode(rootDeclaration) || rootDeclaration.parent.parent.kind === 251 /* ForOfStatement */; + if (!canGetType && rootDeclaration.kind === 170 /* Parameter */) { + if (isExpression(rootDeclaration.parent)) { + canGetType = !!typeChecker.getContextualType(rootDeclaration.parent); + } else if (rootDeclaration.parent.kind === 175 /* MethodDeclaration */ || rootDeclaration.parent.kind === 179 /* SetAccessor */) { + canGetType = isExpression(rootDeclaration.parent.parent) && !!typeChecker.getContextualType(rootDeclaration.parent.parent); + } + } + if (canGetType) { + const typeForObject = typeChecker.getTypeAtLocation(objectLikeContainer); + if (!typeForObject) return 2 /* Fail */; + typeMembers = typeChecker.getPropertiesOfType(typeForObject).filter((propertySymbol) => { + return typeChecker.isPropertyAccessible( + objectLikeContainer, + /*isSuper*/ + false, + /*isWrite*/ + false, + typeForObject, + propertySymbol + ); + }); + existingMembers = objectLikeContainer.elements; + } + } + if (typeMembers && typeMembers.length > 0) { + const filteredMembers = filterObjectMembersList(typeMembers, Debug.checkDefined(existingMembers)); + symbols = concatenate(symbols, filteredMembers); + setSortTextToOptionalMember(); + if (objectLikeContainer.kind === 211 /* ObjectLiteralExpression */ && preferences.includeCompletionsWithObjectLiteralMethodSnippets && preferences.includeCompletionsWithInsertText) { + transformObjectLiteralMembersSortText(symbolsStartIndex); + collectObjectLiteralMethodSymbols(filteredMembers, objectLikeContainer); + } + } + return 1 /* Success */; + } + function tryGetImportOrExportClauseCompletionSymbols() { + if (!contextToken) return 0 /* Continue */; + const namedImportsOrExports = contextToken.kind === 19 /* OpenBraceToken */ || contextToken.kind === 28 /* CommaToken */ ? tryCast(contextToken.parent, isNamedImportsOrExports) : isTypeKeywordTokenOrIdentifier(contextToken) ? tryCast(contextToken.parent.parent, isNamedImportsOrExports) : void 0; + if (!namedImportsOrExports) return 0 /* Continue */; + if (!isTypeKeywordTokenOrIdentifier(contextToken)) { + keywordFilters = 8 /* TypeKeyword */; + } + const { moduleSpecifier } = namedImportsOrExports.kind === 276 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent; + if (!moduleSpecifier) { + isNewIdentifierLocation = true; + return namedImportsOrExports.kind === 276 /* NamedImports */ ? 2 /* Fail */ : 0 /* Continue */; + } + const moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); + if (!moduleSpecifierSymbol) { + isNewIdentifierLocation = true; + return 2 /* Fail */; + } + completionKind = 3 /* MemberLike */; + isNewIdentifierLocation = false; + const exports2 = typeChecker.getExportsAndPropertiesOfModule(moduleSpecifierSymbol); + const existing = new Set(namedImportsOrExports.elements.filter((n) => !isCurrentlyEditingNode(n)).map((n) => moduleExportNameTextEscaped(n.propertyName || n.name))); + const uniques = exports2.filter((e) => e.escapedName !== "default" /* Default */ && !existing.has(e.escapedName)); + symbols = concatenate(symbols, uniques); + if (!uniques.length) { + keywordFilters = 0 /* None */; + } + return 1 /* Success */; + } + function tryGetImportAttributesCompletionSymbols() { + if (contextToken === void 0) return 0 /* Continue */; + const importAttributes = contextToken.kind === 19 /* OpenBraceToken */ || contextToken.kind === 28 /* CommaToken */ ? tryCast(contextToken.parent, isImportAttributes) : contextToken.kind === 59 /* ColonToken */ ? tryCast(contextToken.parent.parent, isImportAttributes) : void 0; + if (importAttributes === void 0) return 0 /* Continue */; + const existing = new Set(importAttributes.elements.map(getNameFromImportAttribute)); + symbols = filter(typeChecker.getTypeAtLocation(importAttributes).getApparentProperties(), (attr) => !existing.has(attr.escapedName)); + return 1 /* Success */; + } + function tryGetLocalNamedExportCompletionSymbols() { + var _a; + const namedExports = contextToken && (contextToken.kind === 19 /* OpenBraceToken */ || contextToken.kind === 28 /* CommaToken */) ? tryCast(contextToken.parent, isNamedExports) : void 0; + if (!namedExports) { + return 0 /* Continue */; + } + const localsContainer = findAncestor(namedExports, or(isSourceFile, isModuleDeclaration)); + completionKind = 5 /* None */; + isNewIdentifierLocation = false; + (_a = localsContainer.locals) == null ? void 0 : _a.forEach((symbol, name) => { + var _a2, _b; + symbols.push(symbol); + if ((_b = (_a2 = localsContainer.symbol) == null ? void 0 : _a2.exports) == null ? void 0 : _b.has(name)) { + symbolToSortTextMap[getSymbolId(symbol)] = SortText.OptionalMember; + } + }); + return 1 /* Success */; + } + function tryGetClassLikeCompletionSymbols() { + const decl = tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location, position); + if (!decl) return 0 /* Continue */; + completionKind = 3 /* MemberLike */; + isNewIdentifierLocation = true; + keywordFilters = contextToken.kind === 42 /* AsteriskToken */ ? 0 /* None */ : isClassLike(decl) ? 2 /* ClassElementKeywords */ : 3 /* InterfaceElementKeywords */; + if (!isClassLike(decl)) return 1 /* Success */; + const classElement = contextToken.kind === 27 /* SemicolonToken */ ? contextToken.parent.parent : contextToken.parent; + let classElementModifierFlags = isClassElement(classElement) ? getEffectiveModifierFlags(classElement) : 0 /* None */; + if (contextToken.kind === 80 /* Identifier */ && !isCurrentlyEditingNode(contextToken)) { + switch (contextToken.getText()) { + case "private": + classElementModifierFlags = classElementModifierFlags | 2 /* Private */; + break; + case "static": + classElementModifierFlags = classElementModifierFlags | 256 /* Static */; + break; + case "override": + classElementModifierFlags = classElementModifierFlags | 16 /* Override */; + break; + } + } + if (isClassStaticBlockDeclaration(classElement)) { + classElementModifierFlags |= 256 /* Static */; + } + if (!(classElementModifierFlags & 2 /* Private */)) { + const baseTypeNodes = isClassLike(decl) && classElementModifierFlags & 16 /* Override */ ? singleElementArray(getEffectiveBaseTypeNode(decl)) : getAllSuperTypeNodes(decl); + const baseSymbols = flatMap(baseTypeNodes, (baseTypeNode) => { + const type = typeChecker.getTypeAtLocation(baseTypeNode); + return classElementModifierFlags & 256 /* Static */ ? (type == null ? void 0 : type.symbol) && typeChecker.getPropertiesOfType(typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl)) : type && typeChecker.getPropertiesOfType(type); + }); + symbols = concatenate(symbols, filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags)); + forEach(symbols, (symbol, index) => { + const declaration = symbol == null ? void 0 : symbol.valueDeclaration; + if (declaration && isClassElement(declaration) && declaration.name && isComputedPropertyName(declaration.name)) { + const origin = { + kind: 512 /* ComputedPropertyName */, + symbolName: typeChecker.symbolToString(symbol) + }; + symbolToOriginInfoMap[index] = origin; + } + }); + } + return 1 /* Success */; + } + function isConstructorParameterCompletion(node2) { + return !!node2.parent && isParameter(node2.parent) && isConstructorDeclaration(node2.parent.parent) && (isParameterPropertyModifier(node2.kind) || isDeclarationName(node2)); + } + function tryGetConstructorLikeCompletionContainer(contextToken2) { + if (contextToken2) { + const parent2 = contextToken2.parent; + switch (contextToken2.kind) { + case 21 /* OpenParenToken */: + case 28 /* CommaToken */: + return isConstructorDeclaration(contextToken2.parent) ? contextToken2.parent : void 0; + default: + if (isConstructorParameterCompletion(contextToken2)) { + return parent2.parent; + } + } + } + return void 0; + } + function tryGetFunctionLikeBodyCompletionContainer(contextToken2) { + if (contextToken2) { + let prev; + const container = findAncestor(contextToken2.parent, (node2) => { + if (isClassLike(node2)) { + return "quit"; + } + if (isFunctionLikeDeclaration(node2) && prev === node2.body) { + return true; + } + prev = node2; + return false; + }); + return container && container; + } + } + function tryGetContainingJsxElement(contextToken2) { + if (contextToken2) { + const parent2 = contextToken2.parent; + switch (contextToken2.kind) { + case 32 /* GreaterThanToken */: + // End of a type argument list + case 31 /* LessThanSlashToken */: + case 44 /* SlashToken */: + case 80 /* Identifier */: + case 212 /* PropertyAccessExpression */: + case 293 /* JsxAttributes */: + case 292 /* JsxAttribute */: + case 294 /* JsxSpreadAttribute */: + if (parent2 && (parent2.kind === 286 /* JsxSelfClosingElement */ || parent2.kind === 287 /* JsxOpeningElement */)) { + if (contextToken2.kind === 32 /* GreaterThanToken */) { + const precedingToken = findPrecedingToken( + contextToken2.pos, + sourceFile, + /*startNode*/ + void 0 + ); + if (!parent2.typeArguments || precedingToken && precedingToken.kind === 44 /* SlashToken */) break; + } + return parent2; + } else if (parent2.kind === 292 /* JsxAttribute */) { + return parent2.parent.parent; + } + break; + // The context token is the closing } or " of an attribute, which means + // its parent is a JsxExpression, whose parent is a JsxAttribute, + // whose parent is a JsxOpeningLikeElement + case 11 /* StringLiteral */: + if (parent2 && (parent2.kind === 292 /* JsxAttribute */ || parent2.kind === 294 /* JsxSpreadAttribute */)) { + return parent2.parent.parent; + } + break; + case 20 /* CloseBraceToken */: + if (parent2 && parent2.kind === 295 /* JsxExpression */ && parent2.parent && parent2.parent.kind === 292 /* JsxAttribute */) { + return parent2.parent.parent.parent; + } + if (parent2 && parent2.kind === 294 /* JsxSpreadAttribute */) { + return parent2.parent.parent; + } + break; + } + } + return void 0; + } + function isInDifferentLineThanContextToken(contextToken2, position2) { + return sourceFile.getLineEndOfPosition(contextToken2.getEnd()) < position2; + } + function isSolelyIdentifierDefinitionLocation(contextToken2) { + const parent2 = contextToken2.parent; + const containingNodeKind = parent2.kind; + switch (contextToken2.kind) { + case 28 /* CommaToken */: + return containingNodeKind === 261 /* VariableDeclaration */ || isVariableDeclarationListButNotTypeArgument(contextToken2) || containingNodeKind === 244 /* VariableStatement */ || containingNodeKind === 267 /* EnumDeclaration */ || // enum a { foo, | + isFunctionLikeButNotConstructor(containingNodeKind) || containingNodeKind === 265 /* InterfaceDeclaration */ || // interface A= contextToken2.pos; + case 25 /* DotToken */: + return containingNodeKind === 208 /* ArrayBindingPattern */; + // var [.| + case 59 /* ColonToken */: + return containingNodeKind === 209 /* BindingElement */; + // var {x :html| + case 23 /* OpenBracketToken */: + return containingNodeKind === 208 /* ArrayBindingPattern */; + // var [x| + case 21 /* OpenParenToken */: + return containingNodeKind === 300 /* CatchClause */ || isFunctionLikeButNotConstructor(containingNodeKind); + case 19 /* OpenBraceToken */: + return containingNodeKind === 267 /* EnumDeclaration */; + // enum a { | + case 30 /* LessThanToken */: + return containingNodeKind === 264 /* ClassDeclaration */ || // class A< | + containingNodeKind === 232 /* ClassExpression */ || // var C = class D< | + containingNodeKind === 265 /* InterfaceDeclaration */ || // interface A< | + containingNodeKind === 266 /* TypeAliasDeclaration */ || // type List< | + isFunctionLikeKind(containingNodeKind); + case 126 /* StaticKeyword */: + return containingNodeKind === 173 /* PropertyDeclaration */ && !isClassLike(parent2.parent); + case 26 /* DotDotDotToken */: + return containingNodeKind === 170 /* Parameter */ || !!parent2.parent && parent2.parent.kind === 208 /* ArrayBindingPattern */; + // var [...z| + case 125 /* PublicKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + return containingNodeKind === 170 /* Parameter */ && !isConstructorDeclaration(parent2.parent); + case 130 /* AsKeyword */: + return containingNodeKind === 277 /* ImportSpecifier */ || containingNodeKind === 282 /* ExportSpecifier */ || containingNodeKind === 275 /* NamespaceImport */; + case 139 /* GetKeyword */: + case 153 /* SetKeyword */: + return !isFromObjectTypeDeclaration(contextToken2); + case 80 /* Identifier */: { + if ((containingNodeKind === 277 /* ImportSpecifier */ || containingNodeKind === 282 /* ExportSpecifier */) && contextToken2 === parent2.name && contextToken2.text === "type") { + return false; + } + const ancestorVariableDeclaration = findAncestor( + contextToken2.parent, + isVariableDeclaration + ); + if (ancestorVariableDeclaration && isInDifferentLineThanContextToken(contextToken2, position)) { + return false; + } + break; + } + case 86 /* ClassKeyword */: + case 94 /* EnumKeyword */: + case 120 /* InterfaceKeyword */: + case 100 /* FunctionKeyword */: + case 115 /* VarKeyword */: + case 102 /* ImportKeyword */: + case 121 /* LetKeyword */: + case 87 /* ConstKeyword */: + case 140 /* InferKeyword */: + return true; + case 156 /* TypeKeyword */: + return containingNodeKind !== 277 /* ImportSpecifier */; + case 42 /* AsteriskToken */: + return isFunctionLike(contextToken2.parent) && !isMethodDeclaration(contextToken2.parent); + } + if (isClassMemberCompletionKeyword(keywordForNode(contextToken2)) && isFromObjectTypeDeclaration(contextToken2)) { + return false; + } + if (isConstructorParameterCompletion(contextToken2)) { + if (!isIdentifier(contextToken2) || isParameterPropertyModifier(keywordForNode(contextToken2)) || isCurrentlyEditingNode(contextToken2)) { + return false; + } + } + switch (keywordForNode(contextToken2)) { + case 128 /* AbstractKeyword */: + case 86 /* ClassKeyword */: + case 87 /* ConstKeyword */: + case 138 /* DeclareKeyword */: + case 94 /* EnumKeyword */: + case 100 /* FunctionKeyword */: + case 120 /* InterfaceKeyword */: + case 121 /* LetKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 125 /* PublicKeyword */: + case 126 /* StaticKeyword */: + case 115 /* VarKeyword */: + return true; + case 134 /* AsyncKeyword */: + return isPropertyDeclaration(contextToken2.parent); + } + const ancestorClassLike = findAncestor(contextToken2.parent, isClassLike); + if (ancestorClassLike && contextToken2 === previousToken && isPreviousPropertyDeclarationTerminated(contextToken2, position)) { + return false; + } + const ancestorPropertyDeclaraion = getAncestor(contextToken2.parent, 173 /* PropertyDeclaration */); + if (ancestorPropertyDeclaraion && contextToken2 !== previousToken && isClassLike(previousToken.parent.parent) && position <= previousToken.end) { + if (isPreviousPropertyDeclarationTerminated(contextToken2, previousToken.end)) { + return false; + } else if (contextToken2.kind !== 64 /* EqualsToken */ && (isInitializedProperty(ancestorPropertyDeclaraion) || hasType(ancestorPropertyDeclaraion))) { + return true; + } + } + return isDeclarationName(contextToken2) && !isShorthandPropertyAssignment(contextToken2.parent) && !isJsxAttribute(contextToken2.parent) && !((isClassLike(contextToken2.parent) || isInterfaceDeclaration(contextToken2.parent) || isTypeParameterDeclaration(contextToken2.parent)) && (contextToken2 !== previousToken || position > previousToken.end)); + } + function isPreviousPropertyDeclarationTerminated(contextToken2, position2) { + return contextToken2.kind !== 64 /* EqualsToken */ && (contextToken2.kind === 27 /* SemicolonToken */ || !positionsAreOnSameLine(contextToken2.end, position2, sourceFile)); + } + function isFunctionLikeButNotConstructor(kind) { + return isFunctionLikeKind(kind) && kind !== 177 /* Constructor */; + } + function isDotOfNumericLiteral(contextToken2) { + if (contextToken2.kind === 9 /* NumericLiteral */) { + const text = contextToken2.getFullText(); + return text.charAt(text.length - 1) === "."; + } + return false; + } + function isVariableDeclarationListButNotTypeArgument(node2) { + return node2.parent.kind === 262 /* VariableDeclarationList */ && !isPossiblyTypeArgumentPosition(node2, sourceFile, typeChecker); + } + function filterObjectMembersList(contextualMemberSymbols, existingMembers) { + if (existingMembers.length === 0) { + return contextualMemberSymbols; + } + const membersDeclaredBySpreadAssignment = /* @__PURE__ */ new Set(); + const existingMemberNames = /* @__PURE__ */ new Set(); + for (const m of existingMembers) { + if (m.kind !== 304 /* PropertyAssignment */ && m.kind !== 305 /* ShorthandPropertyAssignment */ && m.kind !== 209 /* BindingElement */ && m.kind !== 175 /* MethodDeclaration */ && m.kind !== 178 /* GetAccessor */ && m.kind !== 179 /* SetAccessor */ && m.kind !== 306 /* SpreadAssignment */) { + continue; + } + if (isCurrentlyEditingNode(m)) { + continue; + } + let existingName; + if (isSpreadAssignment(m)) { + setMembersDeclaredBySpreadAssignment(m, membersDeclaredBySpreadAssignment); + } else if (isBindingElement(m) && m.propertyName) { + if (m.propertyName.kind === 80 /* Identifier */) { + existingName = m.propertyName.escapedText; + } + } else { + const name = getNameOfDeclaration(m); + existingName = name && isPropertyNameLiteral(name) ? getEscapedTextOfIdentifierOrLiteral(name) : void 0; + } + if (existingName !== void 0) { + existingMemberNames.add(existingName); + } + } + const filteredSymbols = contextualMemberSymbols.filter((m) => !existingMemberNames.has(m.escapedName)); + setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, filteredSymbols); + return filteredSymbols; + } + function setMembersDeclaredBySpreadAssignment(declaration, membersDeclaredBySpreadAssignment) { + const expression = declaration.expression; + const symbol = typeChecker.getSymbolAtLocation(expression); + const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, expression); + const properties = type && type.properties; + if (properties) { + properties.forEach((property) => { + membersDeclaredBySpreadAssignment.add(property.name); + }); + } + } + function setSortTextToOptionalMember() { + symbols.forEach((m) => { + if (m.flags & 16777216 /* Optional */) { + const symbolId = getSymbolId(m); + symbolToSortTextMap[symbolId] = symbolToSortTextMap[symbolId] ?? SortText.OptionalMember; + } + }); + } + function setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, contextualMemberSymbols) { + if (membersDeclaredBySpreadAssignment.size === 0) { + return; + } + for (const contextualMemberSymbol of contextualMemberSymbols) { + if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) { + symbolToSortTextMap[getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment; + } + } + } + function transformObjectLiteralMembersSortText(start2) { + for (let i = start2; i < symbols.length; i++) { + const symbol = symbols[i]; + const symbolId = getSymbolId(symbol); + const origin = symbolToOriginInfoMap == null ? void 0 : symbolToOriginInfoMap[i]; + const target = getEmitScriptTarget(compilerOptions); + const displayName = getCompletionEntryDisplayNameForSymbol( + symbol, + target, + origin, + 0 /* ObjectPropertyDeclaration */, + /*jsxIdentifierExpected*/ + false + ); + if (displayName) { + const originalSortText = symbolToSortTextMap[symbolId] ?? SortText.LocationPriority; + const { name } = displayName; + symbolToSortTextMap[symbolId] = SortText.ObjectLiteralProperty(originalSortText, name); + } + } + } + function filterClassMembersList(baseSymbols, existingMembers, currentClassElementModifierFlags) { + const existingMemberNames = /* @__PURE__ */ new Set(); + for (const m of existingMembers) { + if (m.kind !== 173 /* PropertyDeclaration */ && m.kind !== 175 /* MethodDeclaration */ && m.kind !== 178 /* GetAccessor */ && m.kind !== 179 /* SetAccessor */) { + continue; + } + if (isCurrentlyEditingNode(m)) { + continue; + } + if (hasEffectiveModifier(m, 2 /* Private */)) { + continue; + } + if (isStatic(m) !== !!(currentClassElementModifierFlags & 256 /* Static */)) { + continue; + } + const existingName = getPropertyNameForPropertyNameNode(m.name); + if (existingName) { + existingMemberNames.add(existingName); + } + } + return baseSymbols.filter( + (propertySymbol) => !existingMemberNames.has(propertySymbol.escapedName) && !!propertySymbol.declarations && !(getDeclarationModifierFlagsFromSymbol(propertySymbol) & 2 /* Private */) && !(propertySymbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(propertySymbol.valueDeclaration)) + ); + } + function filterJsxAttributes(symbols2, attributes) { + const seenNames = /* @__PURE__ */ new Set(); + const membersDeclaredBySpreadAssignment = /* @__PURE__ */ new Set(); + for (const attr of attributes) { + if (isCurrentlyEditingNode(attr)) { + continue; + } + if (attr.kind === 292 /* JsxAttribute */) { + seenNames.add(getEscapedTextOfJsxAttributeName(attr.name)); + } else if (isJsxSpreadAttribute(attr)) { + setMembersDeclaredBySpreadAssignment(attr, membersDeclaredBySpreadAssignment); + } + } + const filteredSymbols = symbols2.filter((a) => !seenNames.has(a.escapedName)); + setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, filteredSymbols); + return filteredSymbols; + } + function isCurrentlyEditingNode(node2) { + return node2.getStart(sourceFile) <= position && position <= node2.getEnd(); + } +} +function tryGetObjectLikeCompletionContainer(contextToken, position, sourceFile) { + var _a; + if (contextToken) { + const { parent: parent2 } = contextToken; + switch (contextToken.kind) { + case 19 /* OpenBraceToken */: + // const x = { | + case 28 /* CommaToken */: + if (isObjectLiteralExpression(parent2) || isObjectBindingPattern(parent2)) { + return parent2; + } + break; + case 42 /* AsteriskToken */: + return isMethodDeclaration(parent2) ? tryCast(parent2.parent, isObjectLiteralExpression) : void 0; + case 134 /* AsyncKeyword */: + return tryCast(parent2.parent, isObjectLiteralExpression); + case 80 /* Identifier */: + if (contextToken.text === "async" && isShorthandPropertyAssignment(contextToken.parent)) { + return contextToken.parent.parent; + } else { + if (isObjectLiteralExpression(contextToken.parent.parent) && (isSpreadAssignment(contextToken.parent) || isShorthandPropertyAssignment(contextToken.parent) && getLineAndCharacterOfPosition(sourceFile, contextToken.getEnd()).line !== getLineAndCharacterOfPosition(sourceFile, position).line)) { + return contextToken.parent.parent; + } + const ancestorNode2 = findAncestor(parent2, isPropertyAssignment); + if ((ancestorNode2 == null ? void 0 : ancestorNode2.getLastToken(sourceFile)) === contextToken && isObjectLiteralExpression(ancestorNode2.parent)) { + return ancestorNode2.parent; + } + } + break; + default: + if (((_a = parent2.parent) == null ? void 0 : _a.parent) && (isMethodDeclaration(parent2.parent) || isGetAccessorDeclaration(parent2.parent) || isSetAccessorDeclaration(parent2.parent)) && isObjectLiteralExpression(parent2.parent.parent)) { + return parent2.parent.parent; + } + if (isSpreadAssignment(parent2) && isObjectLiteralExpression(parent2.parent)) { + return parent2.parent; + } + const ancestorNode = findAncestor(parent2, isPropertyAssignment); + if (contextToken.kind !== 59 /* ColonToken */ && (ancestorNode == null ? void 0 : ancestorNode.getLastToken(sourceFile)) === contextToken && isObjectLiteralExpression(ancestorNode.parent)) { + return ancestorNode.parent; + } + } + } + return void 0; +} +function getRelevantTokens(position, sourceFile) { + const previousToken = findPrecedingToken(position, sourceFile); + if (previousToken && position <= previousToken.end && (isMemberName(previousToken) || isKeyword(previousToken.kind))) { + const contextToken = findPrecedingToken( + previousToken.getFullStart(), + sourceFile, + /*startNode*/ + void 0 + ); + return { contextToken, previousToken }; + } + return { contextToken: previousToken, previousToken }; +} +function getAutoImportSymbolFromCompletionEntryData(name, data, program, host) { + const containingProgram = data.isPackageJsonImport ? host.getPackageJsonAutoImportProvider() : program; + const checker = containingProgram.getTypeChecker(); + const moduleSymbol = data.ambientModuleName ? checker.tryFindAmbientModule(data.ambientModuleName) : data.fileName ? checker.getMergedSymbol(Debug.checkDefined(containingProgram.getSourceFile(data.fileName)).symbol) : void 0; + if (!moduleSymbol) return void 0; + let symbol = data.exportName === "export=" /* ExportEquals */ ? checker.resolveExternalModuleSymbol(moduleSymbol) : checker.tryGetMemberInModuleExportsAndProperties(data.exportName, moduleSymbol); + if (!symbol) return void 0; + const isDefaultExport = data.exportName === "default" /* Default */; + symbol = isDefaultExport && getLocalSymbolForExportDefault(symbol) || symbol; + return { symbol, origin: completionEntryDataToSymbolOriginInfo(data, name, moduleSymbol) }; +} +function getCompletionEntryDisplayNameForSymbol(symbol, target, origin, kind, jsxIdentifierExpected) { + if (originIsIgnore(origin)) { + return void 0; + } + const name = originIncludesSymbolName(origin) ? origin.symbolName : symbol.name; + if (name === void 0 || symbol.flags & 1536 /* Module */ && isSingleOrDoubleQuote(name.charCodeAt(0)) || isKnownSymbol(symbol)) { + return void 0; + } + const validNameResult = { name, needsConvertPropertyAccess: false }; + if (isIdentifierText(name, target, jsxIdentifierExpected ? 1 /* JSX */ : 0 /* Standard */) || symbol.valueDeclaration && isPrivateIdentifierClassElementDeclaration(symbol.valueDeclaration)) { + return validNameResult; + } + if (symbol.flags & 2097152 /* Alias */) { + return { name, needsConvertPropertyAccess: true }; + } + switch (kind) { + case 3 /* MemberLike */: + return originIsComputedPropertyName(origin) ? { name: origin.symbolName, needsConvertPropertyAccess: false } : void 0; + case 0 /* ObjectPropertyDeclaration */: + return { name: JSON.stringify(name), needsConvertPropertyAccess: false }; + case 2 /* PropertyAccess */: + case 1 /* Global */: + return name.charCodeAt(0) === 32 /* space */ ? void 0 : { name, needsConvertPropertyAccess: true }; + case 5 /* None */: + case 4 /* String */: + return validNameResult; + default: + Debug.assertNever(kind); + } +} +var _keywordCompletions = []; +var allKeywordsCompletions = memoize(() => { + const res = []; + for (let i = 83 /* FirstKeyword */; i <= 166 /* LastKeyword */; i++) { + res.push({ + name: tokenToString(i), + kind: "keyword" /* keyword */, + kindModifiers: "" /* none */, + sortText: SortText.GlobalsOrKeywords + }); + } + return res; +}); +function getKeywordCompletions(keywordFilter, filterOutTsOnlyKeywords) { + if (!filterOutTsOnlyKeywords) return getTypescriptKeywordCompletions(keywordFilter); + const index = keywordFilter + 8 /* Last */ + 1; + return _keywordCompletions[index] || (_keywordCompletions[index] = getTypescriptKeywordCompletions(keywordFilter).filter((entry) => !isTypeScriptOnlyKeyword(stringToToken(entry.name)))); +} +function getTypescriptKeywordCompletions(keywordFilter) { + return _keywordCompletions[keywordFilter] || (_keywordCompletions[keywordFilter] = allKeywordsCompletions().filter((entry) => { + const kind = stringToToken(entry.name); + switch (keywordFilter) { + case 0 /* None */: + return false; + case 1 /* All */: + return isFunctionLikeBodyKeyword(kind) || kind === 138 /* DeclareKeyword */ || kind === 144 /* ModuleKeyword */ || kind === 156 /* TypeKeyword */ || kind === 145 /* NamespaceKeyword */ || kind === 128 /* AbstractKeyword */ || isTypeKeyword(kind) && kind !== 157 /* UndefinedKeyword */; + case 5 /* FunctionLikeBodyKeywords */: + return isFunctionLikeBodyKeyword(kind); + case 2 /* ClassElementKeywords */: + return isClassMemberCompletionKeyword(kind); + case 3 /* InterfaceElementKeywords */: + return isInterfaceOrTypeLiteralCompletionKeyword(kind); + case 4 /* ConstructorParameterKeywords */: + return isParameterPropertyModifier(kind); + case 6 /* TypeAssertionKeywords */: + return isTypeKeyword(kind) || kind === 87 /* ConstKeyword */; + case 7 /* TypeKeywords */: + return isTypeKeyword(kind); + case 8 /* TypeKeyword */: + return kind === 156 /* TypeKeyword */; + default: + return Debug.assertNever(keywordFilter); + } + })); +} +function isTypeScriptOnlyKeyword(kind) { + switch (kind) { + case 128 /* AbstractKeyword */: + case 133 /* AnyKeyword */: + case 163 /* BigIntKeyword */: + case 136 /* BooleanKeyword */: + case 138 /* DeclareKeyword */: + case 94 /* EnumKeyword */: + case 162 /* GlobalKeyword */: + case 119 /* ImplementsKeyword */: + case 140 /* InferKeyword */: + case 120 /* InterfaceKeyword */: + case 142 /* IsKeyword */: + case 143 /* KeyOfKeyword */: + case 144 /* ModuleKeyword */: + case 145 /* NamespaceKeyword */: + case 146 /* NeverKeyword */: + case 150 /* NumberKeyword */: + case 151 /* ObjectKeyword */: + case 164 /* OverrideKeyword */: + case 123 /* PrivateKeyword */: + case 124 /* ProtectedKeyword */: + case 125 /* PublicKeyword */: + case 148 /* ReadonlyKeyword */: + case 154 /* StringKeyword */: + case 155 /* SymbolKeyword */: + case 156 /* TypeKeyword */: + case 158 /* UniqueKeyword */: + case 159 /* UnknownKeyword */: + return true; + default: + return false; + } +} +function isInterfaceOrTypeLiteralCompletionKeyword(kind) { + return kind === 148 /* ReadonlyKeyword */; +} +function isClassMemberCompletionKeyword(kind) { + switch (kind) { + case 128 /* AbstractKeyword */: + case 129 /* AccessorKeyword */: + case 137 /* ConstructorKeyword */: + case 139 /* GetKeyword */: + case 153 /* SetKeyword */: + case 134 /* AsyncKeyword */: + case 138 /* DeclareKeyword */: + case 164 /* OverrideKeyword */: + return true; + default: + return isClassMemberModifier(kind); + } +} +function isFunctionLikeBodyKeyword(kind) { + return kind === 134 /* AsyncKeyword */ || kind === 135 /* AwaitKeyword */ || kind === 160 /* UsingKeyword */ || kind === 130 /* AsKeyword */ || kind === 152 /* SatisfiesKeyword */ || kind === 156 /* TypeKeyword */ || !isContextualKeyword(kind) && !isClassMemberCompletionKeyword(kind); +} +function keywordForNode(node) { + return isIdentifier(node) ? identifierToKeywordKind(node) ?? 0 /* Unknown */ : node.kind; +} +function getContextualKeywords(contextToken, position) { + const entries = []; + if (contextToken) { + const file = contextToken.getSourceFile(); + const parent2 = contextToken.parent; + const tokenLine = file.getLineAndCharacterOfPosition(contextToken.end).line; + const currentLine = file.getLineAndCharacterOfPosition(position).line; + if ((isImportDeclaration(parent2) || isExportDeclaration(parent2) && parent2.moduleSpecifier) && contextToken === parent2.moduleSpecifier && tokenLine === currentLine) { + entries.push({ + name: tokenToString(132 /* AssertKeyword */), + kind: "keyword" /* keyword */, + kindModifiers: "" /* none */, + sortText: SortText.GlobalsOrKeywords + }); + } + } + return entries; +} +function getJsDocTagAtPosition(node, position) { + return findAncestor(node, (n) => isJSDocTag(n) && rangeContainsPosition(n, position) ? true : isJSDoc(n) ? "quit" : false); +} +function getPropertiesForObjectExpression(contextualType, completionsType, obj, checker) { + const hasCompletionsType = completionsType && completionsType !== contextualType; + const promiseFilteredContextualType = checker.getUnionType( + filter( + contextualType.flags & 1048576 /* Union */ ? contextualType.types : [contextualType], + (t) => !checker.getPromisedTypeOfPromise(t) + ) + ); + const type = hasCompletionsType && !(completionsType.flags & 3 /* AnyOrUnknown */) ? checker.getUnionType([promiseFilteredContextualType, completionsType]) : promiseFilteredContextualType; + const properties = getApparentProperties(type, obj, checker); + return type.isClass() && containsNonPublicProperties(properties) ? [] : hasCompletionsType ? filter(properties, hasDeclarationOtherThanSelf) : properties; + function hasDeclarationOtherThanSelf(member) { + if (!length(member.declarations)) return true; + return some(member.declarations, (decl) => decl.parent !== obj); + } +} +function getApparentProperties(type, node, checker) { + if (!type.isUnion()) return type.getApparentProperties(); + return checker.getAllPossiblePropertiesOfTypes(filter(type.types, (memberType) => !(memberType.flags & 402784252 /* Primitive */ || checker.isArrayLikeType(memberType) || checker.isTypeInvalidDueToUnionDiscriminant(memberType, node) || checker.typeHasCallOrConstructSignatures(memberType) || memberType.isClass() && containsNonPublicProperties(memberType.getApparentProperties())))); +} +function containsNonPublicProperties(props) { + return some(props, (p) => !!(getDeclarationModifierFlagsFromSymbol(p) & 6 /* NonPublicAccessibilityModifier */)); +} +function getPropertiesForCompletion(type, checker) { + return type.isUnion() ? Debug.checkEachDefined(checker.getAllPossiblePropertiesOfTypes(type.types), "getAllPossiblePropertiesOfTypes() should all be defined") : Debug.checkEachDefined(type.getApparentProperties(), "getApparentProperties() should all be defined"); +} +function tryGetObjectTypeDeclarationCompletionContainer(sourceFile, contextToken, location, position) { + switch (location.kind) { + case 353 /* SyntaxList */: + return tryCast(location.parent, isObjectTypeDeclaration); + case 1 /* EndOfFileToken */: + const cls = tryCast(lastOrUndefined(cast(location.parent, isSourceFile).statements), isObjectTypeDeclaration); + if (cls && !findChildOfKind(cls, 20 /* CloseBraceToken */, sourceFile)) { + return cls; + } + break; + case 81 /* PrivateIdentifier */: + if (tryCast(location.parent, isPropertyDeclaration)) { + return findAncestor(location, isClassLike); + } + break; + case 80 /* Identifier */: { + const originalKeywordKind = identifierToKeywordKind(location); + if (originalKeywordKind) { + return void 0; + } + if (isPropertyDeclaration(location.parent) && location.parent.initializer === location) { + return void 0; + } + if (isFromObjectTypeDeclaration(location)) { + return findAncestor(location, isObjectTypeDeclaration); + } + } + } + if (!contextToken) return void 0; + if (location.kind === 137 /* ConstructorKeyword */ || isIdentifier(contextToken) && isPropertyDeclaration(contextToken.parent) && isClassLike(location)) { + return findAncestor(contextToken, isClassLike); + } + switch (contextToken.kind) { + case 64 /* EqualsToken */: + return void 0; + case 27 /* SemicolonToken */: + // class c {getValue(): number; | } + case 20 /* CloseBraceToken */: + return isFromObjectTypeDeclaration(location) && location.parent.name === location ? location.parent.parent : tryCast(location, isObjectTypeDeclaration); + case 19 /* OpenBraceToken */: + // class c { | + case 28 /* CommaToken */: + return tryCast(contextToken.parent, isObjectTypeDeclaration); + default: + if (isObjectTypeDeclaration(location)) { + if (getLineAndCharacterOfPosition(sourceFile, contextToken.getEnd()).line !== getLineAndCharacterOfPosition(sourceFile, position).line) { + return location; + } + const isValidKeyword = isClassLike(contextToken.parent.parent) ? isClassMemberCompletionKeyword : isInterfaceOrTypeLiteralCompletionKeyword; + return isValidKeyword(contextToken.kind) || contextToken.kind === 42 /* AsteriskToken */ || isIdentifier(contextToken) && isValidKeyword(identifierToKeywordKind(contextToken) ?? 0 /* Unknown */) ? contextToken.parent.parent : void 0; + } + return void 0; + } +} +function tryGetTypeLiteralNode(node) { + if (!node) return void 0; + const parent2 = node.parent; + switch (node.kind) { + case 19 /* OpenBraceToken */: + if (isTypeLiteralNode(parent2)) { + return parent2; + } + break; + case 27 /* SemicolonToken */: + case 28 /* CommaToken */: + case 80 /* Identifier */: + if (parent2.kind === 172 /* PropertySignature */ && isTypeLiteralNode(parent2.parent)) { + return parent2.parent; + } + break; + } + return void 0; +} +function getConstraintOfTypeArgumentProperty(node, checker) { + if (!node) return void 0; + if (isTypeNode(node) && isTypeReferenceType(node.parent)) { + return checker.getTypeArgumentConstraint(node); + } + const t = getConstraintOfTypeArgumentProperty(node.parent, checker); + if (!t) return void 0; + switch (node.kind) { + case 172 /* PropertySignature */: + return checker.getTypeOfPropertyOfContextualType(t, node.symbol.escapedName); + case 194 /* IntersectionType */: + case 188 /* TypeLiteral */: + case 193 /* UnionType */: + return t; + } +} +function isFromObjectTypeDeclaration(node) { + return node.parent && isClassOrTypeElement(node.parent) && isObjectTypeDeclaration(node.parent.parent); +} +function isValidTrigger(sourceFile, triggerCharacter, contextToken, position) { + switch (triggerCharacter) { + case ".": + case "@": + return true; + case '"': + case "'": + case "`": + return !!contextToken && isStringLiteralOrTemplate(contextToken) && position === contextToken.getStart(sourceFile) + 1; + case "#": + return !!contextToken && isPrivateIdentifier(contextToken) && !!getContainingClass(contextToken); + case "<": + return !!contextToken && contextToken.kind === 30 /* LessThanToken */ && (!isBinaryExpression(contextToken.parent) || binaryExpressionMayBeOpenTag(contextToken.parent)); + case "/": + return !!contextToken && (isStringLiteralLike(contextToken) ? !!tryGetImportFromModuleSpecifier(contextToken) : contextToken.kind === 44 /* SlashToken */ && isJsxClosingElement(contextToken.parent)); + case " ": + return !!contextToken && isImportKeyword(contextToken) && contextToken.parent.kind === 308 /* SourceFile */; + default: + return Debug.assertNever(triggerCharacter); + } +} +function binaryExpressionMayBeOpenTag({ left }) { + return nodeIsMissing(left); +} +function isProbablyGlobalType(type, sourceFile, checker) { + const selfSymbol = checker.resolveName( + "self", + /*location*/ + void 0, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + if (selfSymbol && checker.getTypeOfSymbolAtLocation(selfSymbol, sourceFile) === type) { + return true; + } + const globalSymbol = checker.resolveName( + "global", + /*location*/ + void 0, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + if (globalSymbol && checker.getTypeOfSymbolAtLocation(globalSymbol, sourceFile) === type) { + return true; + } + const globalThisSymbol = checker.resolveName( + "globalThis", + /*location*/ + void 0, + 111551 /* Value */, + /*excludeGlobals*/ + false + ); + if (globalThisSymbol && checker.getTypeOfSymbolAtLocation(globalThisSymbol, sourceFile) === type) { + return true; + } + return false; +} +function isStaticProperty(symbol) { + return !!(symbol.valueDeclaration && getEffectiveModifierFlags(symbol.valueDeclaration) & 256 /* Static */ && isClassLike(symbol.valueDeclaration.parent)); +} +function tryGetObjectLiteralContextualType(node, typeChecker) { + const type = typeChecker.getContextualType(node); + if (type) { + return type; + } + const parent2 = walkUpParenthesizedExpressions(node.parent); + if (isBinaryExpression(parent2) && parent2.operatorToken.kind === 64 /* EqualsToken */ && node === parent2.left) { + return typeChecker.getTypeAtLocation(parent2); + } + if (isExpression(parent2)) { + return typeChecker.getContextualType(parent2); + } + return void 0; +} +function getImportStatementCompletionInfo(contextToken, sourceFile) { + var _a, _b, _c; + let keywordCompletion; + let isKeywordOnlyCompletion = false; + const candidate = getCandidate(); + return { + isKeywordOnlyCompletion, + keywordCompletion, + isNewIdentifierLocation: !!(candidate || keywordCompletion === 156 /* TypeKeyword */), + isTopLevelTypeOnly: !!((_b = (_a = tryCast(candidate, isImportDeclaration)) == null ? void 0 : _a.importClause) == null ? void 0 : _b.isTypeOnly) || !!((_c = tryCast(candidate, isImportEqualsDeclaration)) == null ? void 0 : _c.isTypeOnly), + couldBeTypeOnlyImportSpecifier: !!candidate && couldBeTypeOnlyImportSpecifier(candidate, contextToken), + replacementSpan: getSingleLineReplacementSpanForImportCompletionNode(candidate) + }; + function getCandidate() { + const parent2 = contextToken.parent; + if (isImportEqualsDeclaration(parent2)) { + const lastToken = parent2.getLastToken(sourceFile); + if (isIdentifier(contextToken) && lastToken !== contextToken) { + keywordCompletion = 161 /* FromKeyword */; + isKeywordOnlyCompletion = true; + return void 0; + } + keywordCompletion = contextToken.kind === 156 /* TypeKeyword */ ? void 0 : 156 /* TypeKeyword */; + return isModuleSpecifierMissingOrEmpty(parent2.moduleReference) ? parent2 : void 0; + } + if (couldBeTypeOnlyImportSpecifier(parent2, contextToken) && canCompleteFromNamedBindings(parent2.parent)) { + return parent2; + } + if (isNamedImports(parent2) || isNamespaceImport(parent2)) { + if (!parent2.parent.isTypeOnly && (contextToken.kind === 19 /* OpenBraceToken */ || contextToken.kind === 102 /* ImportKeyword */ || contextToken.kind === 28 /* CommaToken */)) { + keywordCompletion = 156 /* TypeKeyword */; + } + if (canCompleteFromNamedBindings(parent2)) { + if (contextToken.kind === 20 /* CloseBraceToken */ || contextToken.kind === 80 /* Identifier */) { + isKeywordOnlyCompletion = true; + keywordCompletion = 161 /* FromKeyword */; + } else { + return parent2.parent.parent; + } + } + return void 0; + } + if (isExportDeclaration(parent2) && contextToken.kind === 42 /* AsteriskToken */ || isNamedExports(parent2) && contextToken.kind === 20 /* CloseBraceToken */) { + isKeywordOnlyCompletion = true; + keywordCompletion = 161 /* FromKeyword */; + return void 0; + } + if (isImportKeyword(contextToken) && isSourceFile(parent2)) { + keywordCompletion = 156 /* TypeKeyword */; + return contextToken; + } + if (isImportKeyword(contextToken) && isImportDeclaration(parent2)) { + keywordCompletion = 156 /* TypeKeyword */; + return isModuleSpecifierMissingOrEmpty(parent2.moduleSpecifier) ? parent2 : void 0; + } + return void 0; + } +} +function getSingleLineReplacementSpanForImportCompletionNode(node) { + var _a; + if (!node) return void 0; + const top = findAncestor(node, or(isImportDeclaration, isImportEqualsDeclaration, isJSDocImportTag)) ?? node; + const sourceFile = top.getSourceFile(); + if (rangeIsOnSingleLine(top, sourceFile)) { + return createTextSpanFromNode(top, sourceFile); + } + Debug.assert(top.kind !== 102 /* ImportKeyword */ && top.kind !== 277 /* ImportSpecifier */); + const potentialSplitPoint = top.kind === 273 /* ImportDeclaration */ || top.kind === 352 /* JSDocImportTag */ ? getPotentiallyInvalidImportSpecifier((_a = top.importClause) == null ? void 0 : _a.namedBindings) ?? top.moduleSpecifier : top.moduleReference; + const withoutModuleSpecifier = { + pos: top.getFirstToken().getStart(), + end: potentialSplitPoint.pos + }; + if (rangeIsOnSingleLine(withoutModuleSpecifier, sourceFile)) { + return createTextSpanFromRange(withoutModuleSpecifier); + } +} +function getPotentiallyInvalidImportSpecifier(namedBindings) { + var _a; + return find( + (_a = tryCast(namedBindings, isNamedImports)) == null ? void 0 : _a.elements, + (e) => { + var _a2; + return !e.propertyName && isStringANonContextualKeyword(e.name.text) && ((_a2 = findPrecedingToken(e.name.pos, namedBindings.getSourceFile(), namedBindings)) == null ? void 0 : _a2.kind) !== 28 /* CommaToken */; + } + ); +} +function couldBeTypeOnlyImportSpecifier(importSpecifier, contextToken) { + return isImportSpecifier(importSpecifier) && (importSpecifier.isTypeOnly || contextToken === importSpecifier.name && isTypeKeywordTokenOrIdentifier(contextToken)); +} +function canCompleteFromNamedBindings(namedBindings) { + if (!isModuleSpecifierMissingOrEmpty(namedBindings.parent.parent.moduleSpecifier) || namedBindings.parent.name) { + return false; + } + if (isNamedImports(namedBindings)) { + const invalidNamedImport = getPotentiallyInvalidImportSpecifier(namedBindings); + const validImports = invalidNamedImport ? namedBindings.elements.indexOf(invalidNamedImport) : namedBindings.elements.length; + return validImports < 2; + } + return true; +} +function isModuleSpecifierMissingOrEmpty(specifier) { + var _a; + if (nodeIsMissing(specifier)) return true; + return !((_a = tryCast(isExternalModuleReference(specifier) ? specifier.expression : specifier, isStringLiteralLike)) == null ? void 0 : _a.text); +} +function getClosestSymbolDeclaration(contextToken, location) { + if (!contextToken) return; + let closestDeclaration = findAncestor(contextToken, (node) => isFunctionBlock(node) || isArrowFunctionBody(node) || isBindingPattern(node) ? "quit" : (isParameter(node) || isTypeParameterDeclaration(node)) && !isIndexSignatureDeclaration(node.parent)); + if (!closestDeclaration) { + closestDeclaration = findAncestor(location, (node) => isFunctionBlock(node) || isArrowFunctionBody(node) || isBindingPattern(node) ? "quit" : isVariableDeclaration(node)); + } + return closestDeclaration; +} +function isInTypeParameterDefault(contextToken) { + if (!contextToken) { + return false; + } + let node = contextToken; + let parent2 = contextToken.parent; + while (parent2) { + if (isTypeParameterDeclaration(parent2)) { + return parent2.default === node || node.kind === 64 /* EqualsToken */; + } + node = parent2; + parent2 = parent2.parent; + } + return false; +} +function isArrowFunctionBody(node) { + return node.parent && isArrowFunction(node.parent) && (node.parent.body === node || // const a = () => /**/; + node.kind === 39 /* EqualsGreaterThanToken */); +} +function symbolCanBeReferencedAtTypeLocation(symbol, checker, seenModules = /* @__PURE__ */ new Set()) { + return nonAliasCanBeReferencedAtTypeLocation(symbol) || nonAliasCanBeReferencedAtTypeLocation(skipAlias(symbol.exportSymbol || symbol, checker)); + function nonAliasCanBeReferencedAtTypeLocation(symbol2) { + return !!(symbol2.flags & 788968 /* Type */) || checker.isUnknownSymbol(symbol2) || !!(symbol2.flags & 1536 /* Module */) && addToSeen(seenModules, symbol2) && checker.getExportsOfModule(symbol2).some((e) => symbolCanBeReferencedAtTypeLocation(e, checker, seenModules)); + } +} +function isDeprecated(symbol, checker) { + const declarations = skipAlias(symbol, checker).declarations; + return !!length(declarations) && every(declarations, isDeprecatedDeclaration); +} +function charactersFuzzyMatchInString(identifierString, lowercaseCharacters) { + if (lowercaseCharacters.length === 0) { + return true; + } + let matchedFirstCharacter = false; + let prevChar; + let characterIndex = 0; + const len = identifierString.length; + for (let strIndex = 0; strIndex < len; strIndex++) { + const strChar = identifierString.charCodeAt(strIndex); + const testChar = lowercaseCharacters.charCodeAt(characterIndex); + if (strChar === testChar || strChar === toUpperCharCode(testChar)) { + matchedFirstCharacter || (matchedFirstCharacter = prevChar === void 0 || // Beginning of word + 97 /* a */ <= prevChar && prevChar <= 122 /* z */ && 65 /* A */ <= strChar && strChar <= 90 /* Z */ || // camelCase transition + prevChar === 95 /* _ */ && strChar !== 95 /* _ */); + if (matchedFirstCharacter) { + characterIndex++; + } + if (characterIndex === lowercaseCharacters.length) { + return true; + } + } + prevChar = strChar; + } + return false; +} +function toUpperCharCode(charCode) { + if (97 /* a */ <= charCode && charCode <= 122 /* z */) { + return charCode - 32; + } + return charCode; +} +function isContextualKeywordInAutoImportableExpressionSpace(keyword) { + return keyword === "abstract" || keyword === "async" || keyword === "await" || keyword === "declare" || keyword === "module" || keyword === "namespace" || keyword === "type" || keyword === "satisfies" || keyword === "as"; +} + +// src/services/_namespaces/ts.Completions.StringCompletions.ts +var ts_Completions_StringCompletions_exports = {}; +__export(ts_Completions_StringCompletions_exports, { + getStringLiteralCompletionDetails: () => getStringLiteralCompletionDetails, + getStringLiteralCompletions: () => getStringLiteralCompletions +}); + +// src/services/stringCompletions.ts +var kindPrecedence = { + ["directory" /* directory */]: 0, + ["script" /* scriptElement */]: 1, + ["external module name" /* externalModuleName */]: 2 +}; +function createNameAndKindSet() { + const map2 = /* @__PURE__ */ new Map(); + function add(value) { + const existing = map2.get(value.name); + if (!existing || kindPrecedence[existing.kind] < kindPrecedence[value.kind]) { + map2.set(value.name, value); + } + } + return { + add, + has: map2.has.bind(map2), + values: map2.values.bind(map2) + }; +} +function getStringLiteralCompletions(sourceFile, position, contextToken, options, host, program, log, preferences, includeSymbol) { + if (isInReferenceComment(sourceFile, position)) { + const entries = getTripleSlashReferenceCompletion(sourceFile, position, program, host, createModuleSpecifierResolutionHost(program, host)); + return entries && convertPathCompletions(entries); + } + if (isInString(sourceFile, position, contextToken)) { + if (!contextToken || !isStringLiteralLike(contextToken)) return void 0; + const entries = getStringLiteralCompletionEntries(sourceFile, contextToken, position, program, host, preferences); + return convertStringLiteralCompletions(entries, contextToken, sourceFile, host, program, log, options, preferences, position, includeSymbol); + } +} +function convertStringLiteralCompletions(completion, contextToken, sourceFile, host, program, log, options, preferences, position, includeSymbol) { + if (completion === void 0) { + return void 0; + } + const optionalReplacementSpan = createTextSpanFromStringLiteralLikeContent(contextToken, position); + switch (completion.kind) { + case 0 /* Paths */: + return convertPathCompletions(completion.paths); + case 1 /* Properties */: { + const entries = createSortedArray(); + getCompletionEntriesFromSymbols( + completion.symbols, + entries, + contextToken, + contextToken, + sourceFile, + position, + sourceFile, + host, + program, + 99 /* ESNext */, + log, + 4 /* String */, + preferences, + options, + /*formatContext*/ + void 0, + /*isTypeOnlyLocation*/ + void 0, + /*propertyAccessToConvert*/ + void 0, + /*jsxIdentifierExpected*/ + void 0, + /*isJsxInitializer*/ + void 0, + /*importStatementCompletion*/ + void 0, + /*recommendedCompletion*/ + void 0, + /*symbolToOriginInfoMap*/ + void 0, + /*symbolToSortTextMap*/ + void 0, + /*isJsxIdentifierExpected*/ + void 0, + /*isRightOfOpenTag*/ + void 0, + includeSymbol + ); + return { + isGlobalCompletion: false, + isMemberCompletion: true, + isNewIdentifierLocation: completion.hasIndexSignature, + optionalReplacementSpan, + entries, + defaultCommitCharacters: getDefaultCommitCharacters(completion.hasIndexSignature) + }; + } + case 2 /* Types */: { + const quoteChar = contextToken.kind === 15 /* NoSubstitutionTemplateLiteral */ ? 96 /* backtick */ : startsWith(getTextOfNode(contextToken), "'") ? 39 /* singleQuote */ : 34 /* doubleQuote */; + const entries = completion.types.map((type) => ({ + name: escapeString(type.value, quoteChar), + kindModifiers: "" /* none */, + kind: "string" /* string */, + sortText: SortText.LocationPriority, + replacementSpan: getReplacementSpanForContextToken(contextToken, position), + commitCharacters: [] + })); + return { + isGlobalCompletion: false, + isMemberCompletion: false, + isNewIdentifierLocation: completion.isNewIdentifier, + optionalReplacementSpan, + entries, + defaultCommitCharacters: getDefaultCommitCharacters(completion.isNewIdentifier) + }; + } + default: + return Debug.assertNever(completion); + } +} +function getStringLiteralCompletionDetails(name, sourceFile, position, contextToken, program, host, cancellationToken, preferences) { + if (!contextToken || !isStringLiteralLike(contextToken)) return void 0; + const completions = getStringLiteralCompletionEntries(sourceFile, contextToken, position, program, host, preferences); + return completions && stringLiteralCompletionDetails(name, contextToken, completions, sourceFile, program.getTypeChecker(), cancellationToken); +} +function stringLiteralCompletionDetails(name, location, completion, sourceFile, checker, cancellationToken) { + switch (completion.kind) { + case 0 /* Paths */: { + const match = find(completion.paths, (p) => p.name === name); + return match && createCompletionDetails(name, kindModifiersFromExtension(match.extension), match.kind, [textPart(name)]); + } + case 1 /* Properties */: { + const match = find(completion.symbols, (s) => s.name === name); + return match && createCompletionDetailsForSymbol(match, match.name, checker, sourceFile, location, cancellationToken); + } + case 2 /* Types */: + return find(completion.types, (t) => t.value === name) ? createCompletionDetails(name, "" /* none */, "string" /* string */, [textPart(name)]) : void 0; + default: + return Debug.assertNever(completion); + } +} +function convertPathCompletions(pathCompletions) { + const isGlobalCompletion = false; + const isNewIdentifierLocation = true; + const entries = pathCompletions.map(({ name, kind, span, extension }) => ({ name, kind, kindModifiers: kindModifiersFromExtension(extension), sortText: SortText.LocationPriority, replacementSpan: span })); + return { + isGlobalCompletion, + isMemberCompletion: false, + isNewIdentifierLocation, + entries, + defaultCommitCharacters: getDefaultCommitCharacters(isNewIdentifierLocation) + }; +} +function kindModifiersFromExtension(extension) { + switch (extension) { + case ".d.ts" /* Dts */: + return ".d.ts" /* dtsModifier */; + case ".js" /* Js */: + return ".js" /* jsModifier */; + case ".json" /* Json */: + return ".json" /* jsonModifier */; + case ".jsx" /* Jsx */: + return ".jsx" /* jsxModifier */; + case ".ts" /* Ts */: + return ".ts" /* tsModifier */; + case ".tsx" /* Tsx */: + return ".tsx" /* tsxModifier */; + case ".d.mts" /* Dmts */: + return ".d.mts" /* dmtsModifier */; + case ".mjs" /* Mjs */: + return ".mjs" /* mjsModifier */; + case ".mts" /* Mts */: + return ".mts" /* mtsModifier */; + case ".d.cts" /* Dcts */: + return ".d.cts" /* dctsModifier */; + case ".cjs" /* Cjs */: + return ".cjs" /* cjsModifier */; + case ".cts" /* Cts */: + return ".cts" /* ctsModifier */; + case ".tsbuildinfo" /* TsBuildInfo */: + return Debug.fail(`Extension ${".tsbuildinfo" /* TsBuildInfo */} is unsupported.`); + case void 0: + return "" /* none */; + default: + return Debug.assertNever(extension); + } +} +function getStringLiteralCompletionEntries(sourceFile, node, position, program, host, preferences) { + const typeChecker = program.getTypeChecker(); + const parent2 = walkUpParentheses(node.parent); + switch (parent2.kind) { + case 202 /* LiteralType */: { + const grandParent = walkUpParentheses(parent2.parent); + if (grandParent.kind === 206 /* ImportType */) { + return { kind: 0 /* Paths */, paths: getStringLiteralCompletionsFromModuleNames(sourceFile, node, program, host, preferences) }; + } + return fromUnionableLiteralType(grandParent); + } + case 304 /* PropertyAssignment */: + if (isObjectLiteralExpression(parent2.parent) && parent2.name === node) { + return stringLiteralCompletionsForObjectLiteral(typeChecker, parent2.parent); + } + return fromContextualType() || fromContextualType(0 /* None */); + case 213 /* ElementAccessExpression */: { + const { expression, argumentExpression } = parent2; + if (node === skipParentheses(argumentExpression)) { + return stringLiteralCompletionsFromProperties(typeChecker.getTypeAtLocation(expression)); + } + return void 0; + } + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 292 /* JsxAttribute */: + if (!isRequireCallArgument(node) && !isImportCall(parent2)) { + const argumentInfo = ts_SignatureHelp_exports.getArgumentInfoForCompletions(parent2.kind === 292 /* JsxAttribute */ ? parent2.parent : node, position, sourceFile, typeChecker); + return argumentInfo && getStringLiteralCompletionsFromSignature(argumentInfo.invocation, node, argumentInfo, typeChecker) || fromContextualType(0 /* None */); + } + // falls through (is `require("")` or `require(""` or `import("")`) + case 273 /* ImportDeclaration */: + case 279 /* ExportDeclaration */: + case 284 /* ExternalModuleReference */: + case 352 /* JSDocImportTag */: + return { kind: 0 /* Paths */, paths: getStringLiteralCompletionsFromModuleNames(sourceFile, node, program, host, preferences) }; + case 297 /* CaseClause */: + const tracker = newCaseClauseTracker(typeChecker, parent2.parent.clauses); + const contextualTypes = fromContextualType(); + if (!contextualTypes) { + return; + } + const literals = contextualTypes.types.filter((literal) => !tracker.hasValue(literal.value)); + return { kind: 2 /* Types */, types: literals, isNewIdentifier: false }; + case 277 /* ImportSpecifier */: + case 282 /* ExportSpecifier */: + const specifier = parent2; + if (specifier.propertyName && node !== specifier.propertyName) { + return; + } + const namedImportsOrExports = specifier.parent; + const { moduleSpecifier } = namedImportsOrExports.kind === 276 /* NamedImports */ ? namedImportsOrExports.parent.parent : namedImportsOrExports.parent; + if (!moduleSpecifier) return; + const moduleSpecifierSymbol = typeChecker.getSymbolAtLocation(moduleSpecifier); + if (!moduleSpecifierSymbol) return; + const exports2 = typeChecker.getExportsAndPropertiesOfModule(moduleSpecifierSymbol); + const existing = new Set(namedImportsOrExports.elements.map((n) => moduleExportNameTextEscaped(n.propertyName || n.name))); + const uniques = exports2.filter((e) => e.escapedName !== "default" /* Default */ && !existing.has(e.escapedName)); + return { kind: 1 /* Properties */, symbols: uniques, hasIndexSignature: false }; + case 227 /* BinaryExpression */: + if (parent2.operatorToken.kind === 103 /* InKeyword */) { + const type = typeChecker.getTypeAtLocation(parent2.right); + const properties = type.isUnion() ? typeChecker.getAllPossiblePropertiesOfTypes(type.types) : type.getApparentProperties(); + return { + kind: 1 /* Properties */, + symbols: properties.filter((prop) => !prop.valueDeclaration || !isPrivateIdentifierClassElementDeclaration(prop.valueDeclaration)), + hasIndexSignature: false + }; + } + return fromContextualType(0 /* None */); + default: + return fromContextualType() || fromContextualType(0 /* None */); + } + function fromUnionableLiteralType(grandParent) { + switch (grandParent.kind) { + case 234 /* ExpressionWithTypeArguments */: + case 184 /* TypeReference */: { + const typeArgument = findAncestor(parent2, (n) => n.parent === grandParent); + if (typeArgument) { + return { kind: 2 /* Types */, types: getStringLiteralTypes(typeChecker.getTypeArgumentConstraint(typeArgument)), isNewIdentifier: false }; + } + return void 0; + } + case 200 /* IndexedAccessType */: + const { indexType, objectType } = grandParent; + if (!rangeContainsPosition(indexType, position)) { + return void 0; + } + return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode(objectType)); + case 193 /* UnionType */: { + const result = fromUnionableLiteralType(walkUpParentheses(grandParent.parent)); + if (!result) { + return void 0; + } + const alreadyUsedTypes = getAlreadyUsedTypesInStringLiteralUnion(grandParent, parent2); + if (result.kind === 1 /* Properties */) { + return { kind: 1 /* Properties */, symbols: result.symbols.filter((sym) => !contains(alreadyUsedTypes, sym.name)), hasIndexSignature: result.hasIndexSignature }; + } + return { kind: 2 /* Types */, types: result.types.filter((t) => !contains(alreadyUsedTypes, t.value)), isNewIdentifier: false }; + } + default: + return void 0; + } + } + function fromContextualType(contextFlags = 4 /* Completions */) { + const types = getStringLiteralTypes(getContextualTypeFromParent(node, typeChecker, contextFlags)); + if (!types.length) { + return; + } + return { kind: 2 /* Types */, types, isNewIdentifier: false }; + } +} +function walkUpParentheses(node) { + switch (node.kind) { + case 197 /* ParenthesizedType */: + return walkUpParenthesizedTypes(node); + case 218 /* ParenthesizedExpression */: + return walkUpParenthesizedExpressions(node); + default: + return node; + } +} +function getAlreadyUsedTypesInStringLiteralUnion(union, current) { + return mapDefined(union.types, (type) => type !== current && isLiteralTypeNode(type) && isStringLiteral(type.literal) ? type.literal.text : void 0); +} +function getStringLiteralCompletionsFromSignature(call, arg, argumentInfo, checker) { + let isNewIdentifier = false; + const uniques = /* @__PURE__ */ new Set(); + const editingArgument = isJsxOpeningLikeElement(call) ? Debug.checkDefined(findAncestor(arg.parent, isJsxAttribute)) : arg; + const candidates = checker.getCandidateSignaturesForStringLiteralCompletions(call, editingArgument); + const types = flatMap(candidates, (candidate) => { + if (!signatureHasRestParameter(candidate) && argumentInfo.argumentCount > candidate.parameters.length) return; + let type = candidate.getTypeParameterAtPosition(argumentInfo.argumentIndex); + if (isJsxOpeningLikeElement(call)) { + const propType = checker.getTypeOfPropertyOfType(type, getTextOfJsxAttributeName(editingArgument.name)); + if (propType) { + type = propType; + } + } + isNewIdentifier = isNewIdentifier || !!(type.flags & 4 /* String */); + return getStringLiteralTypes(type, uniques); + }); + return length(types) ? { kind: 2 /* Types */, types, isNewIdentifier } : void 0; +} +function stringLiteralCompletionsFromProperties(type) { + return type && { + kind: 1 /* Properties */, + symbols: filter(type.getApparentProperties(), (prop) => !(prop.valueDeclaration && isPrivateIdentifierClassElementDeclaration(prop.valueDeclaration))), + hasIndexSignature: hasIndexSignature(type) + }; +} +function stringLiteralCompletionsForObjectLiteral(checker, objectLiteralExpression) { + const contextualType = checker.getContextualType(objectLiteralExpression); + if (!contextualType) return void 0; + const completionsType = checker.getContextualType(objectLiteralExpression, 4 /* Completions */); + const symbols = getPropertiesForObjectExpression( + contextualType, + completionsType, + objectLiteralExpression, + checker + ); + return { + kind: 1 /* Properties */, + symbols, + hasIndexSignature: hasIndexSignature(contextualType) + }; +} +function getStringLiteralTypes(type, uniques = /* @__PURE__ */ new Set()) { + if (!type) return emptyArray; + type = skipConstraint(type); + return type.isUnion() ? flatMap(type.types, (t) => getStringLiteralTypes(t, uniques)) : type.isStringLiteral() && !(type.flags & 1024 /* EnumLiteral */) && addToSeen(uniques, type.value) ? [type] : emptyArray; +} +function nameAndKind(name, kind, extension) { + return { name, kind, extension }; +} +function directoryResult(name) { + return nameAndKind( + name, + "directory" /* directory */, + /*extension*/ + void 0 + ); +} +function addReplacementSpans(text, textStart, names) { + const span = getDirectoryFragmentTextSpan(text, textStart); + const wholeSpan = text.length === 0 ? void 0 : createTextSpan(textStart, text.length); + return names.map(({ name, kind, extension }) => name.includes(directorySeparator) || name.includes(altDirectorySeparator) ? { name, kind, extension, span: wholeSpan } : { name, kind, extension, span }); +} +function getStringLiteralCompletionsFromModuleNames(sourceFile, node, program, host, preferences) { + return addReplacementSpans(node.text, node.getStart(sourceFile) + 1, getStringLiteralCompletionsFromModuleNamesWorker(sourceFile, node, program, host, preferences)); +} +function getStringLiteralCompletionsFromModuleNamesWorker(sourceFile, node, program, host, preferences) { + const literalValue = normalizeSlashes(node.text); + const mode = isStringLiteralLike(node) ? program.getModeForUsageLocation(sourceFile, node) : void 0; + const scriptPath = sourceFile.path; + const scriptDirectory = getDirectoryPath(scriptPath); + const compilerOptions = program.getCompilerOptions(); + const typeChecker = program.getTypeChecker(); + const moduleSpecifierResolutionHost = createModuleSpecifierResolutionHost(program, host); + const extensionOptions = getExtensionOptions(compilerOptions, 1 /* ModuleSpecifier */, sourceFile, typeChecker, preferences, mode); + return isPathRelativeToScript(literalValue) || !compilerOptions.baseUrl && !compilerOptions.paths && (isRootedDiskPath(literalValue) || isUrl(literalValue)) ? getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, program, host, moduleSpecifierResolutionHost, scriptPath, extensionOptions) : getCompletionEntriesForNonRelativeModules(literalValue, scriptDirectory, mode, program, host, moduleSpecifierResolutionHost, extensionOptions); +} +function getExtensionOptions(compilerOptions, referenceKind, importingSourceFile, typeChecker, preferences, resolutionMode) { + return { + extensionsToSearch: flatten(getSupportedExtensionsForModuleResolution(compilerOptions, typeChecker)), + referenceKind, + importingSourceFile, + endingPreference: preferences == null ? void 0 : preferences.importModuleSpecifierEnding, + resolutionMode + }; +} +function getCompletionEntriesForRelativeModules(literalValue, scriptDirectory, program, host, moduleSpecifierResolutionHost, scriptPath, extensionOptions) { + const compilerOptions = program.getCompilerOptions(); + if (compilerOptions.rootDirs) { + return getCompletionEntriesForDirectoryFragmentWithRootDirs( + compilerOptions.rootDirs, + literalValue, + scriptDirectory, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + scriptPath + ); + } else { + return arrayFrom(getCompletionEntriesForDirectoryFragment( + literalValue, + scriptDirectory, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + /*moduleSpecifierIsRelative*/ + true, + scriptPath + ).values()); + } +} +function getSupportedExtensionsForModuleResolution(compilerOptions, typeChecker) { + const ambientModulesExtensions = !typeChecker ? [] : mapDefined(typeChecker.getAmbientModules(), (module2) => { + const name = module2.name.slice(1, -1); + if (!name.startsWith("*.") || name.includes("/")) return; + return name.slice(1); + }); + const extensions = [...getSupportedExtensions(compilerOptions), ambientModulesExtensions]; + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + return moduleResolutionUsesNodeModules(moduleResolution) ? getSupportedExtensionsWithJsonIfResolveJsonModule(compilerOptions, extensions) : extensions; +} +function getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase) { + rootDirs = rootDirs.map((rootDirectory) => ensureTrailingDirectorySeparator(normalizePath(isRootedDiskPath(rootDirectory) ? rootDirectory : combinePaths(basePath, rootDirectory)))); + const relativeDirectory = firstDefined(rootDirs, (rootDirectory) => containsPath(rootDirectory, scriptDirectory, basePath, ignoreCase) ? scriptDirectory.substr(rootDirectory.length) : void 0); + return deduplicate( + [...rootDirs.map((rootDirectory) => combinePaths(rootDirectory, relativeDirectory)), scriptDirectory].map((baseDir) => removeTrailingDirectorySeparator(baseDir)), + equateStringsCaseSensitive, + compareStringsCaseSensitive + ); +} +function getCompletionEntriesForDirectoryFragmentWithRootDirs(rootDirs, fragment, scriptDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, exclude) { + const compilerOptions = program.getCompilerOptions(); + const basePath = compilerOptions.project || host.getCurrentDirectory(); + const ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames()); + const baseDirectories = getBaseDirectoriesFromRootDirs(rootDirs, basePath, scriptDirectory, ignoreCase); + return deduplicate( + flatMap(baseDirectories, (baseDirectory) => arrayFrom(getCompletionEntriesForDirectoryFragment( + fragment, + baseDirectory, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + /*moduleSpecifierIsRelative*/ + true, + exclude + ).values())), + (itemA, itemB) => itemA.name === itemB.name && itemA.kind === itemB.kind && itemA.extension === itemB.extension + ); +} +function getCompletionEntriesForDirectoryFragment(fragment, scriptDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, moduleSpecifierIsRelative, exclude, result = createNameAndKindSet()) { + var _a; + if (fragment === void 0) { + fragment = ""; + } + fragment = normalizeSlashes(fragment); + if (!hasTrailingDirectorySeparator(fragment)) { + fragment = getDirectoryPath(fragment); + } + if (fragment === "") { + fragment = "." + directorySeparator; + } + fragment = ensureTrailingDirectorySeparator(fragment); + const absolutePath = resolvePath(scriptDirectory, fragment); + const baseDirectory = hasTrailingDirectorySeparator(absolutePath) ? absolutePath : getDirectoryPath(absolutePath); + if (!moduleSpecifierIsRelative) { + const packageJsonPath = findPackageJson(baseDirectory, host); + if (packageJsonPath) { + const packageJson = readJson(packageJsonPath, host); + const typesVersions = packageJson.typesVersions; + if (typeof typesVersions === "object") { + const versionPaths = (_a = getPackageJsonTypesVersionsPaths(typesVersions)) == null ? void 0 : _a.paths; + if (versionPaths) { + const packageDirectory = getDirectoryPath(packageJsonPath); + const pathInPackage = absolutePath.slice(ensureTrailingDirectorySeparator(packageDirectory).length); + if (addCompletionEntriesFromPaths(result, pathInPackage, packageDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, versionPaths)) { + return result; + } + } + } + } + } + const ignoreCase = !(host.useCaseSensitiveFileNames && host.useCaseSensitiveFileNames()); + if (!tryDirectoryExists(host, baseDirectory)) return result; + const files = tryReadDirectory( + host, + baseDirectory, + extensionOptions.extensionsToSearch, + /*exclude*/ + void 0, + /*include*/ + ["./*"] + ); + if (files) { + for (let filePath of files) { + filePath = normalizePath(filePath); + if (exclude && comparePaths(filePath, exclude, scriptDirectory, ignoreCase) === 0 /* EqualTo */) { + continue; + } + const { name, extension } = getFilenameWithExtensionOption( + getBaseFileName(filePath), + program, + extensionOptions, + /*isExportsOrImportsWildcard*/ + false + ); + result.add(nameAndKind(name, "script" /* scriptElement */, extension)); + } + } + const directories = tryGetDirectories(host, baseDirectory); + if (directories) { + for (const directory of directories) { + const directoryName = getBaseFileName(normalizePath(directory)); + if (directoryName !== "@types") { + result.add(directoryResult(directoryName)); + } + } + } + return result; +} +function getFilenameWithExtensionOption(name, program, extensionOptions, isExportsOrImportsWildcard) { + const nonJsResult = ts_moduleSpecifiers_exports.tryGetRealFileNameForNonJsDeclarationFileName(name); + if (nonJsResult) { + return { name: nonJsResult, extension: tryGetExtensionFromPath2(nonJsResult) }; + } + if (extensionOptions.referenceKind === 0 /* Filename */) { + return { name, extension: tryGetExtensionFromPath2(name) }; + } + let allowedEndings = ts_moduleSpecifiers_exports.getModuleSpecifierPreferences( + { importModuleSpecifierEnding: extensionOptions.endingPreference }, + program, + program.getCompilerOptions(), + extensionOptions.importingSourceFile + ).getAllowedEndingsInPreferredOrder(extensionOptions.resolutionMode); + if (isExportsOrImportsWildcard) { + allowedEndings = allowedEndings.filter((e) => e !== 0 /* Minimal */ && e !== 1 /* Index */); + } + if (allowedEndings[0] === 3 /* TsExtension */) { + if (fileExtensionIsOneOf(name, supportedTSImplementationExtensions)) { + return { name, extension: tryGetExtensionFromPath2(name) }; + } + const outputExtension2 = ts_moduleSpecifiers_exports.tryGetJSExtensionForFile(name, program.getCompilerOptions()); + return outputExtension2 ? { name: changeExtension(name, outputExtension2), extension: outputExtension2 } : { name, extension: tryGetExtensionFromPath2(name) }; + } + if (!isExportsOrImportsWildcard && (allowedEndings[0] === 0 /* Minimal */ || allowedEndings[0] === 1 /* Index */) && fileExtensionIsOneOf(name, [".js" /* Js */, ".jsx" /* Jsx */, ".ts" /* Ts */, ".tsx" /* Tsx */, ".d.ts" /* Dts */])) { + return { name: removeFileExtension(name), extension: tryGetExtensionFromPath2(name) }; + } + const outputExtension = ts_moduleSpecifiers_exports.tryGetJSExtensionForFile(name, program.getCompilerOptions()); + return outputExtension ? { name: changeExtension(name, outputExtension), extension: outputExtension } : { name, extension: tryGetExtensionFromPath2(name) }; +} +function addCompletionEntriesFromPaths(result, fragment, baseDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, paths) { + const getPatternsForKey = (key) => paths[key]; + const comparePaths2 = (a, b) => { + const patternA = tryParsePattern(a); + const patternB = tryParsePattern(b); + const lengthA = typeof patternA === "object" ? patternA.prefix.length : a.length; + const lengthB = typeof patternB === "object" ? patternB.prefix.length : b.length; + return compareValues(lengthB, lengthA); + }; + return addCompletionEntriesFromPathsOrExportsOrImports( + result, + /*isExports*/ + false, + /*isImports*/ + false, + fragment, + baseDirectory, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + getOwnKeys(paths), + getPatternsForKey, + comparePaths2 + ); +} +function addCompletionEntriesFromPathsOrExportsOrImports(result, isExports, isImports, fragment, baseDirectory, extensionOptions, program, host, moduleSpecifierResolutionHost, keys, getPatternsForKey, comparePaths2) { + let pathResults = []; + let matchedPath; + for (const key of keys) { + if (key === ".") continue; + const keyWithoutLeadingDotSlash = key.replace(/^\.\//, "") + ((isExports || isImports) && endsWith(key, "/") ? "*" : ""); + const patterns = getPatternsForKey(key); + if (patterns) { + const pathPattern = tryParsePattern(keyWithoutLeadingDotSlash); + if (!pathPattern) continue; + const isMatch = typeof pathPattern === "object" && isPatternMatch(pathPattern, fragment); + const isLongestMatch = isMatch && (matchedPath === void 0 || comparePaths2(keyWithoutLeadingDotSlash, matchedPath) === -1 /* LessThan */); + if (isLongestMatch) { + matchedPath = keyWithoutLeadingDotSlash; + pathResults = pathResults.filter((r) => !r.matchedPattern); + } + if (typeof pathPattern === "string" || matchedPath === void 0 || comparePaths2(keyWithoutLeadingDotSlash, matchedPath) !== 1 /* GreaterThan */) { + pathResults.push({ + matchedPattern: isMatch, + results: getCompletionsForPathMapping(keyWithoutLeadingDotSlash, patterns, fragment, baseDirectory, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost).map(({ name, kind, extension }) => nameAndKind(name, kind, extension)) + }); + } + } + } + pathResults.forEach((pathResult) => pathResult.results.forEach((r) => result.add(r))); + return matchedPath !== void 0; +} +function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, program, host, moduleSpecifierResolutionHost, extensionOptions) { + const typeChecker = program.getTypeChecker(); + const compilerOptions = program.getCompilerOptions(); + const { baseUrl, paths } = compilerOptions; + const result = createNameAndKindSet(); + const moduleResolution = getEmitModuleResolutionKind(compilerOptions); + if (baseUrl) { + const absolute = normalizePath(combinePaths(host.getCurrentDirectory(), baseUrl)); + getCompletionEntriesForDirectoryFragment( + fragment, + absolute, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + /*moduleSpecifierIsRelative*/ + false, + /*exclude*/ + void 0, + result + ); + } + if (paths) { + const absolute = getPathsBasePath(compilerOptions, host); + addCompletionEntriesFromPaths(result, fragment, absolute, extensionOptions, program, host, moduleSpecifierResolutionHost, paths); + } + const fragmentDirectory = getFragmentDirectory(fragment); + for (const ambientName of getAmbientModuleCompletions(fragment, fragmentDirectory, typeChecker)) { + result.add(nameAndKind( + ambientName, + "external module name" /* externalModuleName */, + /*extension*/ + void 0 + )); + } + getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutionHost, scriptPath, fragmentDirectory, extensionOptions, result); + if (moduleResolutionUsesNodeModules(moduleResolution)) { + let foundGlobal = false; + if (fragmentDirectory === void 0) { + for (const moduleName of enumerateNodeModulesVisibleToScript(host, scriptPath)) { + const moduleResult = nameAndKind( + moduleName, + "external module name" /* externalModuleName */, + /*extension*/ + void 0 + ); + if (!result.has(moduleResult.name)) { + foundGlobal = true; + result.add(moduleResult); + } + } + } + if (!foundGlobal) { + const resolvePackageJsonExports = getResolvePackageJsonExports(compilerOptions); + const resolvePackageJsonImports = getResolvePackageJsonImports(compilerOptions); + let seenPackageScope = false; + const importsLookup = (directory) => { + if (resolvePackageJsonImports && !seenPackageScope) { + const packageFile = combinePaths(directory, "package.json"); + if (seenPackageScope = tryFileExists(host, packageFile)) { + const packageJson = readJson(packageFile, host); + exportsOrImportsLookup( + packageJson.imports, + fragment, + directory, + /*isExports*/ + false, + /*isImports*/ + true + ); + } + } + }; + let ancestorLookup = (ancestor) => { + const nodeModules = combinePaths(ancestor, "node_modules"); + if (tryDirectoryExists(host, nodeModules)) { + getCompletionEntriesForDirectoryFragment( + fragment, + nodeModules, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + /*moduleSpecifierIsRelative*/ + false, + /*exclude*/ + void 0, + result + ); + } + importsLookup(ancestor); + }; + if (fragmentDirectory && resolvePackageJsonExports) { + const nodeModulesDirectoryOrImportsLookup = ancestorLookup; + ancestorLookup = (ancestor) => { + const components = getPathComponents(fragment); + components.shift(); + let packagePath = components.shift(); + if (!packagePath) { + return nodeModulesDirectoryOrImportsLookup(ancestor); + } + if (startsWith(packagePath, "@")) { + const subName = components.shift(); + if (!subName) { + return nodeModulesDirectoryOrImportsLookup(ancestor); + } + packagePath = combinePaths(packagePath, subName); + } + if (resolvePackageJsonImports && startsWith(packagePath, "#")) { + return importsLookup(ancestor); + } + const packageDirectory = combinePaths(ancestor, "node_modules", packagePath); + const packageFile = combinePaths(packageDirectory, "package.json"); + if (tryFileExists(host, packageFile)) { + const packageJson = readJson(packageFile, host); + const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : ""); + exportsOrImportsLookup( + packageJson.exports, + fragmentSubpath, + packageDirectory, + /*isExports*/ + true, + /*isImports*/ + false + ); + return; + } + return nodeModulesDirectoryOrImportsLookup(ancestor); + }; + } + forEachAncestorDirectoryStoppingAtGlobalCache(host, scriptPath, ancestorLookup); + } + } + return arrayFrom(result.values()); + function exportsOrImportsLookup(lookupTable, fragment2, baseDirectory, isExports, isImports) { + if (typeof lookupTable !== "object" || lookupTable === null) { + return; + } + const keys = getOwnKeys(lookupTable); + const conditions = getConditions(compilerOptions, mode); + addCompletionEntriesFromPathsOrExportsOrImports( + result, + isExports, + isImports, + fragment2, + baseDirectory, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + keys, + (key) => { + const pattern = getPatternFromFirstMatchingCondition(lookupTable[key], conditions); + if (pattern === void 0) { + return void 0; + } + return singleElementArray(endsWith(key, "/") && endsWith(pattern, "/") ? pattern + "*" : pattern); + }, + comparePatternKeys + ); + } +} +function getPatternFromFirstMatchingCondition(target, conditions) { + if (typeof target === "string") { + return target; + } + if (target && typeof target === "object" && !isArray(target)) { + for (const condition in target) { + if (condition === "default" || conditions.includes(condition) || isApplicableVersionedTypesKey(conditions, condition)) { + const pattern = target[condition]; + return getPatternFromFirstMatchingCondition(pattern, conditions); + } + } + } +} +function getFragmentDirectory(fragment) { + return containsSlash(fragment) ? hasTrailingDirectorySeparator(fragment) ? fragment : getDirectoryPath(fragment) : void 0; +} +function getCompletionsForPathMapping(path, patterns, fragment, packageDirectory, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost) { + const parsedPath = tryParsePattern(path); + if (!parsedPath) { + return emptyArray; + } + if (typeof parsedPath === "string") { + return justPathMappingName(path, "script" /* scriptElement */); + } + const remainingFragment = tryRemovePrefix(fragment, parsedPath.prefix); + if (remainingFragment === void 0) { + const starIsFullPathComponent = endsWith(path, "/*"); + return starIsFullPathComponent ? justPathMappingName(parsedPath.prefix, "directory" /* directory */) : flatMap(patterns, (pattern) => { + var _a; + return (_a = getModulesForPathsPattern("", packageDirectory, pattern, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost)) == null ? void 0 : _a.map(({ name, ...rest }) => ({ name: parsedPath.prefix + name + parsedPath.suffix, ...rest })); + }); + } + return flatMap(patterns, (pattern) => getModulesForPathsPattern(remainingFragment, packageDirectory, pattern, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost)); + function justPathMappingName(name, kind) { + return startsWith(name, fragment) ? [{ name: removeTrailingDirectorySeparator(name), kind, extension: void 0 }] : emptyArray; + } +} +function getModulesForPathsPattern(fragment, packageDirectory, pattern, extensionOptions, isExports, isImports, program, host, moduleSpecifierResolutionHost) { + if (!host.readDirectory) { + return void 0; + } + const parsed = tryParsePattern(pattern); + if (parsed === void 0 || isString(parsed)) { + return void 0; + } + const normalizedPrefix = resolvePath(parsed.prefix); + const normalizedPrefixDirectory = hasTrailingDirectorySeparator(parsed.prefix) ? normalizedPrefix : getDirectoryPath(normalizedPrefix); + const normalizedPrefixBase = hasTrailingDirectorySeparator(parsed.prefix) ? "" : getBaseFileName(normalizedPrefix); + const fragmentHasPath = containsSlash(fragment); + const fragmentDirectory = fragmentHasPath ? hasTrailingDirectorySeparator(fragment) ? fragment : getDirectoryPath(fragment) : void 0; + const getCommonSourceDirectory2 = () => moduleSpecifierResolutionHost.getCommonSourceDirectory(); + const ignoreCase = !hostUsesCaseSensitiveFileNames(moduleSpecifierResolutionHost); + const outDir = program.getCompilerOptions().outDir; + const declarationDir = program.getCompilerOptions().declarationDir; + const expandedPrefixDirectory = fragmentHasPath ? combinePaths(normalizedPrefixDirectory, normalizedPrefixBase + fragmentDirectory) : normalizedPrefixDirectory; + const baseDirectory = normalizePath(combinePaths(packageDirectory, expandedPrefixDirectory)); + const possibleInputBaseDirectoryForOutDir = isImports && outDir && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, ignoreCase, outDir, getCommonSourceDirectory2); + const possibleInputBaseDirectoryForDeclarationDir = isImports && declarationDir && getPossibleOriginalInputPathWithoutChangingExt(baseDirectory, ignoreCase, declarationDir, getCommonSourceDirectory2); + const normalizedSuffix = normalizePath(parsed.suffix); + const declarationExtension = normalizedSuffix && getDeclarationEmitExtensionForPath("_" + normalizedSuffix); + const inputExtension = normalizedSuffix ? getPossibleOriginalInputExtensionForExtension("_" + normalizedSuffix) : void 0; + const matchingSuffixes = [ + declarationExtension && changeExtension(normalizedSuffix, declarationExtension), + ...inputExtension ? inputExtension.map((ext) => changeExtension(normalizedSuffix, ext)) : [], + normalizedSuffix + ].filter(isString); + const includeGlobs = normalizedSuffix ? matchingSuffixes.map((suffix) => "**/*" + suffix) : ["./*"]; + const isExportsOrImportsWildcard = (isExports || isImports) && endsWith(pattern, "/*"); + let matches = getMatchesWithPrefix(baseDirectory); + if (possibleInputBaseDirectoryForOutDir) { + matches = concatenate(matches, getMatchesWithPrefix(possibleInputBaseDirectoryForOutDir)); + } + if (possibleInputBaseDirectoryForDeclarationDir) { + matches = concatenate(matches, getMatchesWithPrefix(possibleInputBaseDirectoryForDeclarationDir)); + } + if (!normalizedSuffix) { + matches = concatenate(matches, getDirectoryMatches(baseDirectory)); + if (possibleInputBaseDirectoryForOutDir) { + matches = concatenate(matches, getDirectoryMatches(possibleInputBaseDirectoryForOutDir)); + } + if (possibleInputBaseDirectoryForDeclarationDir) { + matches = concatenate(matches, getDirectoryMatches(possibleInputBaseDirectoryForDeclarationDir)); + } + } + return matches; + function getMatchesWithPrefix(directory) { + const completePrefix = fragmentHasPath ? directory : ensureTrailingDirectorySeparator(directory) + normalizedPrefixBase; + return mapDefined(tryReadDirectory( + host, + directory, + extensionOptions.extensionsToSearch, + /*exclude*/ + void 0, + includeGlobs + ), (match) => { + const trimmedWithPattern = trimPrefixAndSuffix(match, completePrefix); + if (trimmedWithPattern) { + if (containsSlash(trimmedWithPattern)) { + return directoryResult(getPathComponents(removeLeadingDirectorySeparator(trimmedWithPattern))[1]); + } + const { name, extension } = getFilenameWithExtensionOption(trimmedWithPattern, program, extensionOptions, isExportsOrImportsWildcard); + return nameAndKind(name, "script" /* scriptElement */, extension); + } + }); + } + function getDirectoryMatches(directoryName) { + return mapDefined(tryGetDirectories(host, directoryName), (dir) => dir === "node_modules" ? void 0 : directoryResult(dir)); + } + function trimPrefixAndSuffix(path, prefix) { + return firstDefined(matchingSuffixes, (suffix) => { + const inner = withoutStartAndEnd(normalizePath(path), prefix, suffix); + return inner === void 0 ? void 0 : removeLeadingDirectorySeparator(inner); + }); + } +} +function withoutStartAndEnd(s, start, end) { + return startsWith(s, start) && endsWith(s, end) ? s.slice(start.length, s.length - end.length) : void 0; +} +function removeLeadingDirectorySeparator(path) { + return path[0] === directorySeparator ? path.slice(1) : path; +} +function getAmbientModuleCompletions(fragment, fragmentDirectory, checker) { + const ambientModules = checker.getAmbientModules().map((sym) => stripQuotes(sym.name)); + const nonRelativeModuleNames = ambientModules.filter((moduleName) => startsWith(moduleName, fragment) && !moduleName.includes("*")); + if (fragmentDirectory !== void 0) { + const moduleNameWithSeparator = ensureTrailingDirectorySeparator(fragmentDirectory); + return nonRelativeModuleNames.map((nonRelativeModuleName) => removePrefix(nonRelativeModuleName, moduleNameWithSeparator)); + } + return nonRelativeModuleNames; +} +function getTripleSlashReferenceCompletion(sourceFile, position, program, host, moduleSpecifierResolutionHost) { + const compilerOptions = program.getCompilerOptions(); + const token = getTokenAtPosition(sourceFile, position); + const commentRanges = getLeadingCommentRanges(sourceFile.text, token.pos); + const range = commentRanges && find(commentRanges, (commentRange) => position >= commentRange.pos && position <= commentRange.end); + if (!range) { + return void 0; + } + const text = sourceFile.text.slice(range.pos, position); + const match = tripleSlashDirectiveFragmentRegex.exec(text); + if (!match) { + return void 0; + } + const [, prefix, kind, toComplete] = match; + const scriptPath = getDirectoryPath(sourceFile.path); + const names = kind === "path" ? getCompletionEntriesForDirectoryFragment( + toComplete, + scriptPath, + getExtensionOptions(compilerOptions, 0 /* Filename */, sourceFile), + program, + host, + moduleSpecifierResolutionHost, + /*moduleSpecifierIsRelative*/ + true, + sourceFile.path + ) : kind === "types" ? getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutionHost, scriptPath, getFragmentDirectory(toComplete), getExtensionOptions(compilerOptions, 1 /* ModuleSpecifier */, sourceFile)) : Debug.fail(); + return addReplacementSpans(toComplete, range.pos + prefix.length, arrayFrom(names.values())); +} +function getCompletionEntriesFromTypings(program, host, moduleSpecifierResolutionHost, scriptPath, fragmentDirectory, extensionOptions, result = createNameAndKindSet()) { + const options = program.getCompilerOptions(); + const seen = /* @__PURE__ */ new Map(); + const typeRoots = tryAndIgnoreErrors(() => getEffectiveTypeRoots(options, host)) || emptyArray; + for (const root of typeRoots) { + getCompletionEntriesFromDirectories(root); + } + for (const packageJson of findPackageJsons(scriptPath, host)) { + const typesDir = combinePaths(getDirectoryPath(packageJson), "node_modules/@types"); + getCompletionEntriesFromDirectories(typesDir); + } + return result; + function getCompletionEntriesFromDirectories(directory) { + if (!tryDirectoryExists(host, directory)) return; + for (const typeDirectoryName of tryGetDirectories(host, directory)) { + const packageName = unmangleScopedPackageName(typeDirectoryName); + if (options.types && !contains(options.types, packageName)) continue; + if (fragmentDirectory === void 0) { + if (!seen.has(packageName)) { + result.add(nameAndKind( + packageName, + "external module name" /* externalModuleName */, + /*extension*/ + void 0 + )); + seen.set(packageName, true); + } + } else { + const baseDirectory = combinePaths(directory, typeDirectoryName); + const remainingFragment = tryRemoveDirectoryPrefix(fragmentDirectory, packageName, hostGetCanonicalFileName(host)); + if (remainingFragment !== void 0) { + getCompletionEntriesForDirectoryFragment( + remainingFragment, + baseDirectory, + extensionOptions, + program, + host, + moduleSpecifierResolutionHost, + /*moduleSpecifierIsRelative*/ + false, + /*exclude*/ + void 0, + result + ); + } + } + } + } +} +function enumerateNodeModulesVisibleToScript(host, scriptPath) { + if (!host.readFile || !host.fileExists) return emptyArray; + const result = []; + for (const packageJson of findPackageJsons(scriptPath, host)) { + const contents = readJson(packageJson, host); + for (const key of nodeModulesDependencyKeys) { + const dependencies = contents[key]; + if (!dependencies) continue; + for (const dep in dependencies) { + if (hasProperty(dependencies, dep) && !startsWith(dep, "@types/")) { + result.push(dep); + } + } + } + } + return result; +} +function getDirectoryFragmentTextSpan(text, textStart) { + const index = Math.max(text.lastIndexOf(directorySeparator), text.lastIndexOf(altDirectorySeparator)); + const offset = index !== -1 ? index + 1 : 0; + const length2 = text.length - offset; + return length2 === 0 || isIdentifierText(text.substr(offset, length2), 99 /* ESNext */) ? void 0 : createTextSpan(textStart + offset, length2); +} +function isPathRelativeToScript(path) { + if (path && path.length >= 2 && path.charCodeAt(0) === 46 /* dot */) { + const slashIndex = path.length >= 3 && path.charCodeAt(1) === 46 /* dot */ ? 2 : 1; + const slashCharCode = path.charCodeAt(slashIndex); + return slashCharCode === 47 /* slash */ || slashCharCode === 92 /* backslash */; + } + return false; +} +var tripleSlashDirectiveFragmentRegex = /^(\/\/\/\s* Core, + DefinitionKind: () => DefinitionKind, + EntryKind: () => EntryKind, + ExportKind: () => ExportKind2, + FindReferencesUse: () => FindReferencesUse, + ImportExport: () => ImportExport, + createImportTracker: () => createImportTracker, + findModuleReferences: () => findModuleReferences, + findReferenceOrRenameEntries: () => findReferenceOrRenameEntries, + findReferencedSymbols: () => findReferencedSymbols, + getContextNode: () => getContextNode, + getExportInfo: () => getExportInfo, + getImplementationsAtPosition: () => getImplementationsAtPosition, + getImportOrExportSymbol: () => getImportOrExportSymbol, + getReferenceEntriesForNode: () => getReferenceEntriesForNode, + isContextWithStartAndEndNode: () => isContextWithStartAndEndNode, + isDeclarationOfSymbol: () => isDeclarationOfSymbol, + isWriteAccessForReference: () => isWriteAccessForReference, + toContextSpan: () => toContextSpan, + toHighlightSpan: () => toHighlightSpan, + toReferenceEntry: () => toReferenceEntry, + toRenameLocation: () => toRenameLocation +}); + +// src/services/importTracker.ts +function createImportTracker(sourceFiles, sourceFilesSet, checker, cancellationToken) { + const allDirectImports = getDirectImportsMap(sourceFiles, checker, cancellationToken); + return (exportSymbol, exportInfo, isForRename) => { + const { directImports, indirectUsers } = getImportersForExport(sourceFiles, sourceFilesSet, allDirectImports, exportInfo, checker, cancellationToken); + return { indirectUsers, ...getSearchesFromDirectImports(directImports, exportSymbol, exportInfo.exportKind, checker, isForRename) }; + }; +} +var ExportKind2 = /* @__PURE__ */ ((ExportKind3) => { + ExportKind3[ExportKind3["Named"] = 0] = "Named"; + ExportKind3[ExportKind3["Default"] = 1] = "Default"; + ExportKind3[ExportKind3["ExportEquals"] = 2] = "ExportEquals"; + return ExportKind3; +})(ExportKind2 || {}); +var ImportExport = /* @__PURE__ */ ((ImportExport2) => { + ImportExport2[ImportExport2["Import"] = 0] = "Import"; + ImportExport2[ImportExport2["Export"] = 1] = "Export"; + return ImportExport2; +})(ImportExport || {}); +function getImportersForExport(sourceFiles, sourceFilesSet, allDirectImports, { exportingModuleSymbol, exportKind }, checker, cancellationToken) { + const markSeenDirectImport = nodeSeenTracker(); + const markSeenIndirectUser = nodeSeenTracker(); + const directImports = []; + const isAvailableThroughGlobal = !!exportingModuleSymbol.globalExports; + const indirectUserDeclarations = isAvailableThroughGlobal ? void 0 : []; + handleDirectImports(exportingModuleSymbol); + return { directImports, indirectUsers: getIndirectUsers() }; + function getIndirectUsers() { + if (isAvailableThroughGlobal) { + return sourceFiles; + } + if (exportingModuleSymbol.declarations) { + for (const decl of exportingModuleSymbol.declarations) { + if (isExternalModuleAugmentation(decl) && sourceFilesSet.has(decl.getSourceFile().fileName)) { + addIndirectUser(decl); + } + } + } + return indirectUserDeclarations.map(getSourceFileOfNode); + } + function handleDirectImports(exportingModuleSymbol2) { + const theseDirectImports = getDirectImports(exportingModuleSymbol2); + if (theseDirectImports) { + for (const direct of theseDirectImports) { + if (!markSeenDirectImport(direct)) { + continue; + } + if (cancellationToken) cancellationToken.throwIfCancellationRequested(); + switch (direct.kind) { + case 214 /* CallExpression */: + if (isImportCall(direct)) { + handleImportCall(direct); + break; + } + if (!isAvailableThroughGlobal) { + const parent2 = direct.parent; + if (exportKind === 2 /* ExportEquals */ && parent2.kind === 261 /* VariableDeclaration */) { + const { name } = parent2; + if (name.kind === 80 /* Identifier */) { + directImports.push(name); + break; + } + } + } + break; + case 80 /* Identifier */: + break; + // TODO: GH#23879 + case 272 /* ImportEqualsDeclaration */: + handleNamespaceImport( + direct, + direct.name, + hasSyntacticModifier(direct, 32 /* Export */), + /*alreadyAddedDirect*/ + false + ); + break; + case 273 /* ImportDeclaration */: + case 352 /* JSDocImportTag */: + directImports.push(direct); + const namedBindings = direct.importClause && direct.importClause.namedBindings; + if (namedBindings && namedBindings.kind === 275 /* NamespaceImport */) { + handleNamespaceImport( + direct, + namedBindings.name, + /*isReExport*/ + false, + /*alreadyAddedDirect*/ + true + ); + } else if (!isAvailableThroughGlobal && isDefaultImport(direct)) { + addIndirectUser(getSourceFileLikeForImportDeclaration(direct)); + } + break; + case 279 /* ExportDeclaration */: + if (!direct.exportClause) { + handleDirectImports(getContainingModuleSymbol(direct, checker)); + } else if (direct.exportClause.kind === 281 /* NamespaceExport */) { + addIndirectUser( + getSourceFileLikeForImportDeclaration(direct), + /*addTransitiveDependencies*/ + true + ); + } else { + directImports.push(direct); + } + break; + case 206 /* ImportType */: + if (!isAvailableThroughGlobal && direct.isTypeOf && !direct.qualifier && isExported2(direct)) { + addIndirectUser( + direct.getSourceFile(), + /*addTransitiveDependencies*/ + true + ); + } + directImports.push(direct); + break; + default: + Debug.failBadSyntaxKind(direct, "Unexpected import kind."); + } + } + } + } + function handleImportCall(importCall) { + const top = findAncestor(importCall, isAmbientModuleDeclaration) || importCall.getSourceFile(); + addIndirectUser( + top, + /** addTransitiveDependencies */ + !!isExported2( + importCall, + /*stopAtAmbientModule*/ + true + ) + ); + } + function isExported2(node, stopAtAmbientModule = false) { + return findAncestor(node, (node2) => { + if (stopAtAmbientModule && isAmbientModuleDeclaration(node2)) return "quit"; + return canHaveModifiers(node2) && some(node2.modifiers, isExportModifier); + }); + } + function handleNamespaceImport(importDeclaration, name, isReExport, alreadyAddedDirect) { + if (exportKind === 2 /* ExportEquals */) { + if (!alreadyAddedDirect) directImports.push(importDeclaration); + } else if (!isAvailableThroughGlobal) { + const sourceFileLike = getSourceFileLikeForImportDeclaration(importDeclaration); + Debug.assert(sourceFileLike.kind === 308 /* SourceFile */ || sourceFileLike.kind === 268 /* ModuleDeclaration */); + if (isReExport || findNamespaceReExports(sourceFileLike, name, checker)) { + addIndirectUser( + sourceFileLike, + /*addTransitiveDependencies*/ + true + ); + } else { + addIndirectUser(sourceFileLike); + } + } + } + function addIndirectUser(sourceFileLike, addTransitiveDependencies = false) { + Debug.assert(!isAvailableThroughGlobal); + const isNew = markSeenIndirectUser(sourceFileLike); + if (!isNew) return; + indirectUserDeclarations.push(sourceFileLike); + if (!addTransitiveDependencies) return; + const moduleSymbol = checker.getMergedSymbol(sourceFileLike.symbol); + if (!moduleSymbol) return; + Debug.assert(!!(moduleSymbol.flags & 1536 /* Module */)); + const directImports2 = getDirectImports(moduleSymbol); + if (directImports2) { + for (const directImport of directImports2) { + if (!isImportTypeNode(directImport)) { + addIndirectUser( + getSourceFileLikeForImportDeclaration(directImport), + /*addTransitiveDependencies*/ + true + ); + } + } + } + } + function getDirectImports(moduleSymbol) { + return allDirectImports.get(getSymbolId(moduleSymbol).toString()); + } +} +function getSearchesFromDirectImports(directImports, exportSymbol, exportKind, checker, isForRename) { + const importSearches = []; + const singleReferences = []; + function addSearch(location, symbol) { + importSearches.push([location, symbol]); + } + if (directImports) { + for (const decl of directImports) { + handleImport(decl); + } + } + return { importSearches, singleReferences }; + function handleImport(decl) { + if (decl.kind === 272 /* ImportEqualsDeclaration */) { + if (isExternalModuleImportEquals(decl)) { + handleNamespaceImportLike(decl.name); + } + return; + } + if (decl.kind === 80 /* Identifier */) { + handleNamespaceImportLike(decl); + return; + } + if (decl.kind === 206 /* ImportType */) { + if (decl.qualifier) { + const firstIdentifier = getFirstIdentifier(decl.qualifier); + if (firstIdentifier.escapedText === symbolName(exportSymbol)) { + singleReferences.push(firstIdentifier); + } + } else if (exportKind === 2 /* ExportEquals */) { + singleReferences.push(decl.argument.literal); + } + return; + } + if (decl.moduleSpecifier.kind !== 11 /* StringLiteral */) { + return; + } + if (decl.kind === 279 /* ExportDeclaration */) { + if (decl.exportClause && isNamedExports(decl.exportClause)) { + searchForNamedImport(decl.exportClause); + } + return; + } + const { name, namedBindings } = decl.importClause || { name: void 0, namedBindings: void 0 }; + if (namedBindings) { + switch (namedBindings.kind) { + case 275 /* NamespaceImport */: + handleNamespaceImportLike(namedBindings.name); + break; + case 276 /* NamedImports */: + if (exportKind === 0 /* Named */ || exportKind === 1 /* Default */) { + searchForNamedImport(namedBindings); + } + break; + default: + Debug.assertNever(namedBindings); + } + } + if (name && (exportKind === 1 /* Default */ || exportKind === 2 /* ExportEquals */) && (!isForRename || name.escapedText === symbolEscapedNameNoDefault(exportSymbol))) { + const defaultImportAlias = checker.getSymbolAtLocation(name); + addSearch(name, defaultImportAlias); + } + } + function handleNamespaceImportLike(importName) { + if (exportKind === 2 /* ExportEquals */ && (!isForRename || isNameMatch(importName.escapedText))) { + addSearch(importName, checker.getSymbolAtLocation(importName)); + } + } + function searchForNamedImport(namedBindings) { + if (!namedBindings) { + return; + } + for (const element of namedBindings.elements) { + const { name, propertyName } = element; + if (!isNameMatch(moduleExportNameTextEscaped(propertyName || name))) { + continue; + } + if (propertyName) { + singleReferences.push(propertyName); + if (!isForRename || moduleExportNameTextEscaped(name) === exportSymbol.escapedName) { + addSearch(name, checker.getSymbolAtLocation(name)); + } + } else { + const localSymbol = element.kind === 282 /* ExportSpecifier */ && element.propertyName ? checker.getExportSpecifierLocalTargetSymbol(element) : checker.getSymbolAtLocation(name); + addSearch(name, localSymbol); + } + } + } + function isNameMatch(name) { + return name === exportSymbol.escapedName || exportKind !== 0 /* Named */ && name === "default" /* Default */; + } +} +function findNamespaceReExports(sourceFileLike, name, checker) { + const namespaceImportSymbol = checker.getSymbolAtLocation(name); + return !!forEachPossibleImportOrExportStatement(sourceFileLike, (statement) => { + if (!isExportDeclaration(statement)) return; + const { exportClause, moduleSpecifier } = statement; + return !moduleSpecifier && exportClause && isNamedExports(exportClause) && exportClause.elements.some((element) => checker.getExportSpecifierLocalTargetSymbol(element) === namespaceImportSymbol); + }); +} +function findModuleReferences(program, sourceFiles, searchModuleSymbol) { + var _a; + const refs = []; + const checker = program.getTypeChecker(); + for (const referencingFile of sourceFiles) { + const searchSourceFile = searchModuleSymbol.valueDeclaration; + if ((searchSourceFile == null ? void 0 : searchSourceFile.kind) === 308 /* SourceFile */) { + for (const ref of referencingFile.referencedFiles) { + if (program.getSourceFileFromReference(referencingFile, ref) === searchSourceFile) { + refs.push({ kind: "reference", referencingFile, ref }); + } + } + for (const ref of referencingFile.typeReferenceDirectives) { + const referenced = (_a = program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(ref, referencingFile)) == null ? void 0 : _a.resolvedTypeReferenceDirective; + if (referenced !== void 0 && referenced.resolvedFileName === searchSourceFile.fileName) { + refs.push({ kind: "reference", referencingFile, ref }); + } + } + } + forEachImport(referencingFile, (importDecl, moduleSpecifier) => { + const moduleSymbol = checker.getSymbolAtLocation(moduleSpecifier); + if (moduleSymbol === searchModuleSymbol) { + refs.push(nodeIsSynthesized(importDecl) ? { kind: "implicit", literal: moduleSpecifier, referencingFile } : { kind: "import", literal: moduleSpecifier }); + } + }); + } + return refs; +} +function getDirectImportsMap(sourceFiles, checker, cancellationToken) { + const map2 = /* @__PURE__ */ new Map(); + for (const sourceFile of sourceFiles) { + if (cancellationToken) cancellationToken.throwIfCancellationRequested(); + forEachImport(sourceFile, (importDecl, moduleSpecifier) => { + const moduleSymbol = checker.getSymbolAtLocation(moduleSpecifier); + if (moduleSymbol) { + const id = getSymbolId(moduleSymbol).toString(); + let imports = map2.get(id); + if (!imports) { + map2.set(id, imports = []); + } + imports.push(importDecl); + } + }); + } + return map2; +} +function forEachPossibleImportOrExportStatement(sourceFileLike, action) { + return forEach(sourceFileLike.kind === 308 /* SourceFile */ ? sourceFileLike.statements : sourceFileLike.body.statements, (statement) => ( + // TODO: GH#18217 + action(statement) || isAmbientModuleDeclaration(statement) && forEach(statement.body && statement.body.statements, action) + )); +} +function forEachImport(sourceFile, action) { + if (sourceFile.externalModuleIndicator || sourceFile.imports !== void 0) { + for (const i of sourceFile.imports) { + action(importFromModuleSpecifier(i), i); + } + } else { + forEachPossibleImportOrExportStatement(sourceFile, (statement) => { + switch (statement.kind) { + case 279 /* ExportDeclaration */: + case 273 /* ImportDeclaration */: { + const decl = statement; + if (decl.moduleSpecifier && isStringLiteral(decl.moduleSpecifier)) { + action(decl, decl.moduleSpecifier); + } + break; + } + case 272 /* ImportEqualsDeclaration */: { + const decl = statement; + if (isExternalModuleImportEquals(decl)) { + action(decl, decl.moduleReference.expression); + } + break; + } + } + }); + } +} +function getImportOrExportSymbol(node, symbol, checker, comingFromExport) { + return comingFromExport ? getExport() : getExport() || getImport(); + function getExport() { + var _a; + const { parent: parent2 } = node; + const grandparent = parent2.parent; + if (symbol.exportSymbol) { + if (parent2.kind === 212 /* PropertyAccessExpression */) { + return ((_a = symbol.declarations) == null ? void 0 : _a.some((d) => d === parent2)) && isBinaryExpression(grandparent) ? getSpecialPropertyExport( + grandparent, + /*useLhsSymbol*/ + false + ) : void 0; + } else { + return exportInfo(symbol.exportSymbol, getExportKindForDeclaration(parent2)); + } + } else { + const exportNode = getExportNode(parent2, node); + if (exportNode && hasSyntacticModifier(exportNode, 32 /* Export */)) { + if (isImportEqualsDeclaration(exportNode) && exportNode.moduleReference === node) { + if (comingFromExport) { + return void 0; + } + const lhsSymbol = checker.getSymbolAtLocation(exportNode.name); + return { kind: 0 /* Import */, symbol: lhsSymbol }; + } else { + return exportInfo(symbol, getExportKindForDeclaration(exportNode)); + } + } else if (isNamespaceExport(parent2)) { + return exportInfo(symbol, 0 /* Named */); + } else if (isExportAssignment(parent2)) { + return getExportAssignmentExport(parent2); + } else if (isExportAssignment(grandparent)) { + return getExportAssignmentExport(grandparent); + } else if (isBinaryExpression(parent2)) { + return getSpecialPropertyExport( + parent2, + /*useLhsSymbol*/ + true + ); + } else if (isBinaryExpression(grandparent)) { + return getSpecialPropertyExport( + grandparent, + /*useLhsSymbol*/ + true + ); + } else if (isJSDocTypedefTag(parent2) || isJSDocCallbackTag(parent2)) { + return exportInfo(symbol, 0 /* Named */); + } + } + function getExportAssignmentExport(ex) { + if (!ex.symbol.parent) return void 0; + const exportKind = ex.isExportEquals ? 2 /* ExportEquals */ : 1 /* Default */; + return { kind: 1 /* Export */, symbol, exportInfo: { exportingModuleSymbol: ex.symbol.parent, exportKind } }; + } + function getSpecialPropertyExport(node2, useLhsSymbol) { + let kind; + switch (getAssignmentDeclarationKind(node2)) { + case 1 /* ExportsProperty */: + kind = 0 /* Named */; + break; + case 2 /* ModuleExports */: + kind = 2 /* ExportEquals */; + break; + default: + return void 0; + } + const sym = useLhsSymbol ? checker.getSymbolAtLocation(getNameOfAccessExpression(cast(node2.left, isAccessExpression))) : symbol; + return sym && exportInfo(sym, kind); + } + } + function getImport() { + const isImport3 = isNodeImport(node); + if (!isImport3) return void 0; + let importedSymbol = checker.getImmediateAliasedSymbol(symbol); + if (!importedSymbol) return void 0; + importedSymbol = skipExportSpecifierSymbol(importedSymbol, checker); + if (importedSymbol.escapedName === "export=") { + importedSymbol = getExportEqualsLocalSymbol(importedSymbol, checker); + if (importedSymbol === void 0) return void 0; + } + const importedName = symbolEscapedNameNoDefault(importedSymbol); + if (importedName === void 0 || importedName === "default" /* Default */ || importedName === symbol.escapedName) { + return { kind: 0 /* Import */, symbol: importedSymbol }; + } + } + function exportInfo(symbol2, kind) { + const exportInfo2 = getExportInfo(symbol2, kind, checker); + return exportInfo2 && { kind: 1 /* Export */, symbol: symbol2, exportInfo: exportInfo2 }; + } + function getExportKindForDeclaration(node2) { + return hasSyntacticModifier(node2, 2048 /* Default */) ? 1 /* Default */ : 0 /* Named */; + } +} +function getExportEqualsLocalSymbol(importedSymbol, checker) { + var _a, _b; + if (importedSymbol.flags & 2097152 /* Alias */) { + return checker.getImmediateAliasedSymbol(importedSymbol); + } + const decl = Debug.checkDefined(importedSymbol.valueDeclaration); + if (isExportAssignment(decl)) { + return (_a = tryCast(decl.expression, canHaveSymbol)) == null ? void 0 : _a.symbol; + } else if (isBinaryExpression(decl)) { + return (_b = tryCast(decl.right, canHaveSymbol)) == null ? void 0 : _b.symbol; + } else if (isSourceFile(decl)) { + return decl.symbol; + } + return void 0; +} +function getExportNode(parent2, node) { + const declaration = isVariableDeclaration(parent2) ? parent2 : isBindingElement(parent2) ? walkUpBindingElementsAndPatterns(parent2) : void 0; + if (declaration) { + return parent2.name !== node ? void 0 : isCatchClause(declaration.parent) ? void 0 : isVariableStatement(declaration.parent.parent) ? declaration.parent.parent : void 0; + } else { + return parent2; + } +} +function isNodeImport(node) { + const { parent: parent2 } = node; + switch (parent2.kind) { + case 272 /* ImportEqualsDeclaration */: + return parent2.name === node && isExternalModuleImportEquals(parent2); + case 277 /* ImportSpecifier */: + return !parent2.propertyName; + case 274 /* ImportClause */: + case 275 /* NamespaceImport */: + Debug.assert(parent2.name === node); + return true; + case 209 /* BindingElement */: + return isInJSFile(node) && isVariableDeclarationInitializedToBareOrAccessedRequire(parent2.parent.parent); + default: + return false; + } +} +function getExportInfo(exportSymbol, exportKind, checker) { + const moduleSymbol = exportSymbol.parent; + if (!moduleSymbol) return void 0; + const exportingModuleSymbol = checker.getMergedSymbol(moduleSymbol); + return isExternalModuleSymbol(exportingModuleSymbol) ? { exportingModuleSymbol, exportKind } : void 0; +} +function skipExportSpecifierSymbol(symbol, checker) { + if (symbol.declarations) { + for (const declaration of symbol.declarations) { + if (isExportSpecifier(declaration) && !declaration.propertyName && !declaration.parent.parent.moduleSpecifier) { + return checker.getExportSpecifierLocalTargetSymbol(declaration) || symbol; + } else if (isPropertyAccessExpression(declaration) && isModuleExportsAccessExpression(declaration.expression) && !isPrivateIdentifier(declaration.name)) { + return checker.getSymbolAtLocation(declaration); + } else if (isShorthandPropertyAssignment(declaration) && isBinaryExpression(declaration.parent.parent) && getAssignmentDeclarationKind(declaration.parent.parent) === 2 /* ModuleExports */) { + return checker.getExportSpecifierLocalTargetSymbol(declaration.name); + } + } + } + return symbol; +} +function getContainingModuleSymbol(importer, checker) { + return checker.getMergedSymbol(getSourceFileLikeForImportDeclaration(importer).symbol); +} +function getSourceFileLikeForImportDeclaration(node) { + if (node.kind === 214 /* CallExpression */ || node.kind === 352 /* JSDocImportTag */) { + return node.getSourceFile(); + } + const { parent: parent2 } = node; + if (parent2.kind === 308 /* SourceFile */) { + return parent2; + } + Debug.assert(parent2.kind === 269 /* ModuleBlock */); + return cast(parent2.parent, isAmbientModuleDeclaration); +} +function isAmbientModuleDeclaration(node) { + return node.kind === 268 /* ModuleDeclaration */ && node.name.kind === 11 /* StringLiteral */; +} +function isExternalModuleImportEquals(eq) { + return eq.moduleReference.kind === 284 /* ExternalModuleReference */ && eq.moduleReference.expression.kind === 11 /* StringLiteral */; +} + +// src/services/findAllReferences.ts +var DefinitionKind = /* @__PURE__ */ ((DefinitionKind2) => { + DefinitionKind2[DefinitionKind2["Symbol"] = 0] = "Symbol"; + DefinitionKind2[DefinitionKind2["Label"] = 1] = "Label"; + DefinitionKind2[DefinitionKind2["Keyword"] = 2] = "Keyword"; + DefinitionKind2[DefinitionKind2["This"] = 3] = "This"; + DefinitionKind2[DefinitionKind2["String"] = 4] = "String"; + DefinitionKind2[DefinitionKind2["TripleSlashReference"] = 5] = "TripleSlashReference"; + return DefinitionKind2; +})(DefinitionKind || {}); +var EntryKind = /* @__PURE__ */ ((EntryKind2) => { + EntryKind2[EntryKind2["Span"] = 0] = "Span"; + EntryKind2[EntryKind2["Node"] = 1] = "Node"; + EntryKind2[EntryKind2["StringLiteral"] = 2] = "StringLiteral"; + EntryKind2[EntryKind2["SearchedLocalFoundProperty"] = 3] = "SearchedLocalFoundProperty"; + EntryKind2[EntryKind2["SearchedPropertyFoundLocal"] = 4] = "SearchedPropertyFoundLocal"; + return EntryKind2; +})(EntryKind || {}); +function nodeEntry(node, kind = 1 /* Node */) { + return { + kind, + node: node.name || node, + context: getContextNodeForNodeEntry(node) + }; +} +function isContextWithStartAndEndNode(node) { + return node && node.kind === void 0; +} +function getContextNodeForNodeEntry(node) { + if (isDeclaration(node)) { + return getContextNode(node); + } + if (!node.parent) return void 0; + if (!isDeclaration(node.parent) && !isExportAssignment(node.parent)) { + if (isInJSFile(node)) { + const binaryExpression = isBinaryExpression(node.parent) ? node.parent : isAccessExpression(node.parent) && isBinaryExpression(node.parent.parent) && node.parent.parent.left === node.parent ? node.parent.parent : void 0; + if (binaryExpression && getAssignmentDeclarationKind(binaryExpression) !== 0 /* None */) { + return getContextNode(binaryExpression); + } + } + if (isJsxOpeningElement(node.parent) || isJsxClosingElement(node.parent)) { + return node.parent.parent; + } else if (isJsxSelfClosingElement(node.parent) || isLabeledStatement(node.parent) || isBreakOrContinueStatement(node.parent)) { + return node.parent; + } else if (isStringLiteralLike(node)) { + const validImport = tryGetImportFromModuleSpecifier(node); + if (validImport) { + const declOrStatement = findAncestor(validImport, (node2) => isDeclaration(node2) || isStatement(node2) || isJSDocTag(node2)); + return isDeclaration(declOrStatement) ? getContextNode(declOrStatement) : declOrStatement; + } + } + const propertyName = findAncestor(node, isComputedPropertyName); + return propertyName ? getContextNode(propertyName.parent) : void 0; + } + if (node.parent.name === node || // node is name of declaration, use parent + isConstructorDeclaration(node.parent) || isExportAssignment(node.parent) || // Property name of the import export specifier or binding pattern, use parent + (isImportOrExportSpecifier(node.parent) || isBindingElement(node.parent)) && node.parent.propertyName === node || // Is default export + node.kind === 90 /* DefaultKeyword */ && hasSyntacticModifier(node.parent, 2080 /* ExportDefault */)) { + return getContextNode(node.parent); + } + return void 0; +} +function getContextNode(node) { + if (!node) return void 0; + switch (node.kind) { + case 261 /* VariableDeclaration */: + return !isVariableDeclarationList(node.parent) || node.parent.declarations.length !== 1 ? node : isVariableStatement(node.parent.parent) ? node.parent.parent : isForInOrOfStatement(node.parent.parent) ? getContextNode(node.parent.parent) : node.parent; + case 209 /* BindingElement */: + return getContextNode(node.parent.parent); + case 277 /* ImportSpecifier */: + return node.parent.parent.parent; + case 282 /* ExportSpecifier */: + case 275 /* NamespaceImport */: + return node.parent.parent; + case 274 /* ImportClause */: + case 281 /* NamespaceExport */: + return node.parent; + case 227 /* BinaryExpression */: + return isExpressionStatement(node.parent) ? node.parent : node; + case 251 /* ForOfStatement */: + case 250 /* ForInStatement */: + return { + start: node.initializer, + end: node.expression + }; + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + return isArrayLiteralOrObjectLiteralDestructuringPattern(node.parent) ? getContextNode( + findAncestor(node.parent, (node2) => isBinaryExpression(node2) || isForInOrOfStatement(node2)) + ) : node; + case 256 /* SwitchStatement */: + return { + start: find(node.getChildren(node.getSourceFile()), (node2) => node2.kind === 109 /* SwitchKeyword */), + end: node.caseBlock + }; + default: + return node; + } +} +function toContextSpan(textSpan, sourceFile, context) { + if (!context) return void 0; + const contextSpan = isContextWithStartAndEndNode(context) ? getTextSpan(context.start, sourceFile, context.end) : getTextSpan(context, sourceFile); + return contextSpan.start !== textSpan.start || contextSpan.length !== textSpan.length ? { contextSpan } : void 0; +} +var FindReferencesUse = /* @__PURE__ */ ((FindReferencesUse2) => { + FindReferencesUse2[FindReferencesUse2["Other"] = 0] = "Other"; + FindReferencesUse2[FindReferencesUse2["References"] = 1] = "References"; + FindReferencesUse2[FindReferencesUse2["Rename"] = 2] = "Rename"; + return FindReferencesUse2; +})(FindReferencesUse || {}); +function findReferencedSymbols(program, cancellationToken, sourceFiles, sourceFile, position) { + const node = getTouchingPropertyName(sourceFile, position); + const options = { use: 1 /* References */ }; + const referencedSymbols = Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options); + const checker = program.getTypeChecker(); + const adjustedNode = Core.getAdjustedNode(node, options); + const symbol = isDefinitionForReference(adjustedNode) ? checker.getSymbolAtLocation(adjustedNode) : void 0; + return !referencedSymbols || !referencedSymbols.length ? void 0 : mapDefined(referencedSymbols, ({ definition, references }) => ( + // Only include referenced symbols that have a valid definition. + definition && { + definition: checker.runWithCancellationToken(cancellationToken, (checker2) => definitionToReferencedSymbolDefinitionInfo(definition, checker2, node)), + references: references.map((r) => toReferencedSymbolEntry(r, symbol)) + } + )); +} +function isDefinitionForReference(node) { + return node.kind === 90 /* DefaultKeyword */ || !!getDeclarationFromName(node) || isLiteralComputedPropertyDeclarationName(node) || node.kind === 137 /* ConstructorKeyword */ && isConstructorDeclaration(node.parent); +} +function getImplementationsAtPosition(program, cancellationToken, sourceFiles, sourceFile, position) { + const node = getTouchingPropertyName(sourceFile, position); + let referenceEntries; + const entries = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position); + if (node.parent.kind === 212 /* PropertyAccessExpression */ || node.parent.kind === 209 /* BindingElement */ || node.parent.kind === 213 /* ElementAccessExpression */ || node.kind === 108 /* SuperKeyword */) { + referenceEntries = entries && [...entries]; + } else if (entries) { + const queue = createQueue(entries); + const seenNodes = /* @__PURE__ */ new Set(); + while (!queue.isEmpty()) { + const entry = queue.dequeue(); + if (!addToSeen(seenNodes, getNodeId(entry.node))) { + continue; + } + referenceEntries = append(referenceEntries, entry); + const entries2 = getImplementationReferenceEntries(program, cancellationToken, sourceFiles, entry.node, entry.node.pos); + if (entries2) { + queue.enqueue(...entries2); + } + } + } + const checker = program.getTypeChecker(); + return map(referenceEntries, (entry) => toImplementationLocation(entry, checker)); +} +function getImplementationReferenceEntries(program, cancellationToken, sourceFiles, node, position) { + if (node.kind === 308 /* SourceFile */) { + return void 0; + } + const checker = program.getTypeChecker(); + if (node.parent.kind === 305 /* ShorthandPropertyAssignment */) { + const result = []; + Core.getReferenceEntriesForShorthandPropertyAssignment(node, checker, (node2) => result.push(nodeEntry(node2))); + return result; + } else if (node.kind === 108 /* SuperKeyword */ || isSuperProperty(node.parent)) { + const symbol = checker.getSymbolAtLocation(node); + return symbol.valueDeclaration && [nodeEntry(symbol.valueDeclaration)]; + } else { + return getReferenceEntriesForNode(position, node, program, sourceFiles, cancellationToken, { implementations: true, use: 1 /* References */ }); + } +} +function findReferenceOrRenameEntries(program, cancellationToken, sourceFiles, node, position, options, convertEntry) { + return map(flattenEntries(Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options)), (entry) => convertEntry(entry, node, program.getTypeChecker())); +} +function getReferenceEntriesForNode(position, node, program, sourceFiles, cancellationToken, options = {}, sourceFilesSet = new Set(sourceFiles.map((f) => f.fileName))) { + return flattenEntries(Core.getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options, sourceFilesSet)); +} +function flattenEntries(referenceSymbols) { + return referenceSymbols && flatMap(referenceSymbols, (r) => r.references); +} +function definitionToReferencedSymbolDefinitionInfo(def, checker, originalNode) { + const info = (() => { + switch (def.type) { + case 0 /* Symbol */: { + const { symbol } = def; + const { displayParts: displayParts2, kind: kind2 } = getDefinitionKindAndDisplayParts(symbol, checker, originalNode); + const name2 = displayParts2.map((p) => p.text).join(""); + const declaration = symbol.declarations && firstOrUndefined(symbol.declarations); + const node = declaration ? getNameOfDeclaration(declaration) || declaration : originalNode; + return { + ...getFileAndTextSpanFromNode(node), + name: name2, + kind: kind2, + displayParts: displayParts2, + context: getContextNode(declaration) + }; + } + case 1 /* Label */: { + const { node } = def; + return { ...getFileAndTextSpanFromNode(node), name: node.text, kind: "label" /* label */, displayParts: [displayPart(node.text, 17 /* text */)] }; + } + case 2 /* Keyword */: { + const { node } = def; + const name2 = tokenToString(node.kind); + return { ...getFileAndTextSpanFromNode(node), name: name2, kind: "keyword" /* keyword */, displayParts: [{ text: name2, kind: "keyword" /* keyword */ }] }; + } + case 3 /* This */: { + const { node } = def; + const symbol = checker.getSymbolAtLocation(node); + const displayParts2 = symbol && ts_SymbolDisplay_exports.getSymbolDisplayPartsDocumentationAndSymbolKind( + checker, + symbol, + node.getSourceFile(), + getContainerNode(node), + node + ).displayParts || [textPart("this")]; + return { ...getFileAndTextSpanFromNode(node), name: "this", kind: "var" /* variableElement */, displayParts: displayParts2 }; + } + case 4 /* String */: { + const { node } = def; + return { + ...getFileAndTextSpanFromNode(node), + name: node.text, + kind: "var" /* variableElement */, + displayParts: [displayPart(getTextOfNode(node), 8 /* stringLiteral */)] + }; + } + case 5 /* TripleSlashReference */: { + return { + textSpan: createTextSpanFromRange(def.reference), + sourceFile: def.file, + name: def.reference.fileName, + kind: "string" /* string */, + displayParts: [displayPart(`"${def.reference.fileName}"`, 8 /* stringLiteral */)] + }; + } + default: + return Debug.assertNever(def); + } + })(); + const { sourceFile, textSpan, name, kind, displayParts, context } = info; + return { + containerKind: "" /* unknown */, + containerName: "", + fileName: sourceFile.fileName, + kind, + name, + textSpan, + displayParts, + ...toContextSpan(textSpan, sourceFile, context) + }; +} +function getFileAndTextSpanFromNode(node) { + const sourceFile = node.getSourceFile(); + return { + sourceFile, + textSpan: getTextSpan(isComputedPropertyName(node) ? node.expression : node, sourceFile) + }; +} +function getDefinitionKindAndDisplayParts(symbol, checker, node) { + const meaning = Core.getIntersectingMeaningFromDeclarations(node, symbol); + const enclosingDeclaration = symbol.declarations && firstOrUndefined(symbol.declarations) || node; + const { displayParts, symbolKind } = ts_SymbolDisplay_exports.getSymbolDisplayPartsDocumentationAndSymbolKind(checker, symbol, enclosingDeclaration.getSourceFile(), enclosingDeclaration, enclosingDeclaration, meaning); + return { displayParts, kind: symbolKind }; +} +function toRenameLocation(entry, originalNode, checker, providePrefixAndSuffixText, quotePreference) { + return { ...entryToDocumentSpan(entry), ...providePrefixAndSuffixText && getPrefixAndSuffixText(entry, originalNode, checker, quotePreference) }; +} +function toReferencedSymbolEntry(entry, symbol) { + const referenceEntry = toReferenceEntry(entry); + if (!symbol) return referenceEntry; + return { + ...referenceEntry, + isDefinition: entry.kind !== 0 /* Span */ && isDeclarationOfSymbol(entry.node, symbol) + }; +} +function toReferenceEntry(entry) { + const documentSpan = entryToDocumentSpan(entry); + if (entry.kind === 0 /* Span */) { + return { ...documentSpan, isWriteAccess: false }; + } + const { kind, node } = entry; + return { + ...documentSpan, + isWriteAccess: isWriteAccessForReference(node), + isInString: kind === 2 /* StringLiteral */ ? true : void 0 + }; +} +function entryToDocumentSpan(entry) { + if (entry.kind === 0 /* Span */) { + return { textSpan: entry.textSpan, fileName: entry.fileName }; + } else { + const sourceFile = entry.node.getSourceFile(); + const textSpan = getTextSpan(entry.node, sourceFile); + return { + textSpan, + fileName: sourceFile.fileName, + ...toContextSpan(textSpan, sourceFile, entry.context) + }; + } +} +function getPrefixAndSuffixText(entry, originalNode, checker, quotePreference) { + if (entry.kind !== 0 /* Span */ && (isIdentifier(originalNode) || isStringLiteralLike(originalNode))) { + const { node, kind } = entry; + const parent2 = node.parent; + const name = originalNode.text; + const isShorthandAssignment = isShorthandPropertyAssignment(parent2); + if (isShorthandAssignment || isObjectBindingElementWithoutPropertyName(parent2) && parent2.name === node && parent2.dotDotDotToken === void 0) { + const prefixColon = { prefixText: name + ": " }; + const suffixColon = { suffixText: ": " + name }; + if (kind === 3 /* SearchedLocalFoundProperty */) { + return prefixColon; + } + if (kind === 4 /* SearchedPropertyFoundLocal */) { + return suffixColon; + } + if (isShorthandAssignment) { + const grandParent = parent2.parent; + if (isObjectLiteralExpression(grandParent) && isBinaryExpression(grandParent.parent) && isModuleExportsAccessExpression(grandParent.parent.left)) { + return prefixColon; + } + return suffixColon; + } else { + return prefixColon; + } + } else if (isImportSpecifier(parent2) && !parent2.propertyName) { + const originalSymbol = isExportSpecifier(originalNode.parent) ? checker.getExportSpecifierLocalTargetSymbol(originalNode.parent) : checker.getSymbolAtLocation(originalNode); + return contains(originalSymbol.declarations, parent2) ? { prefixText: name + " as " } : emptyOptions; + } else if (isExportSpecifier(parent2) && !parent2.propertyName) { + return originalNode === entry.node || checker.getSymbolAtLocation(originalNode) === checker.getSymbolAtLocation(entry.node) ? { prefixText: name + " as " } : { suffixText: " as " + name }; + } + } + if (entry.kind !== 0 /* Span */ && isNumericLiteral(entry.node) && isAccessExpression(entry.node.parent)) { + const quote2 = getQuoteFromPreference(quotePreference); + return { prefixText: quote2, suffixText: quote2 }; + } + return emptyOptions; +} +function toImplementationLocation(entry, checker) { + const documentSpan = entryToDocumentSpan(entry); + if (entry.kind !== 0 /* Span */) { + const { node } = entry; + return { + ...documentSpan, + ...implementationKindDisplayParts(node, checker) + }; + } else { + return { ...documentSpan, kind: "" /* unknown */, displayParts: [] }; + } +} +function implementationKindDisplayParts(node, checker) { + const symbol = checker.getSymbolAtLocation(isDeclaration(node) && node.name ? node.name : node); + if (symbol) { + return getDefinitionKindAndDisplayParts(symbol, checker, node); + } else if (node.kind === 211 /* ObjectLiteralExpression */) { + return { + kind: "interface" /* interfaceElement */, + displayParts: [punctuationPart(21 /* OpenParenToken */), textPart("object literal"), punctuationPart(22 /* CloseParenToken */)] + }; + } else if (node.kind === 232 /* ClassExpression */) { + return { + kind: "local class" /* localClassElement */, + displayParts: [punctuationPart(21 /* OpenParenToken */), textPart("anonymous local class"), punctuationPart(22 /* CloseParenToken */)] + }; + } else { + return { kind: getNodeKind(node), displayParts: [] }; + } +} +function toHighlightSpan(entry) { + const documentSpan = entryToDocumentSpan(entry); + if (entry.kind === 0 /* Span */) { + return { + fileName: documentSpan.fileName, + span: { + textSpan: documentSpan.textSpan, + kind: "reference" /* reference */ + } + }; + } + const writeAccess = isWriteAccessForReference(entry.node); + const span = { + textSpan: documentSpan.textSpan, + kind: writeAccess ? "writtenReference" /* writtenReference */ : "reference" /* reference */, + isInString: entry.kind === 2 /* StringLiteral */ ? true : void 0, + ...documentSpan.contextSpan && { contextSpan: documentSpan.contextSpan } + }; + return { fileName: documentSpan.fileName, span }; +} +function getTextSpan(node, sourceFile, endNode2) { + let start = node.getStart(sourceFile); + let end = (endNode2 || node).getEnd(); + if (isStringLiteralLike(node) && end - start > 2) { + Debug.assert(endNode2 === void 0); + start += 1; + end -= 1; + } + if ((endNode2 == null ? void 0 : endNode2.kind) === 270 /* CaseBlock */) { + end = endNode2.getFullStart(); + } + return createTextSpanFromBounds(start, end); +} +function getTextSpanOfEntry(entry) { + return entry.kind === 0 /* Span */ ? entry.textSpan : getTextSpan(entry.node, entry.node.getSourceFile()); +} +function isWriteAccessForReference(node) { + const decl = getDeclarationFromName(node); + return !!decl && declarationIsWriteAccess(decl) || node.kind === 90 /* DefaultKeyword */ || isWriteAccess(node); +} +function isDeclarationOfSymbol(node, target) { + var _a; + if (!target) return false; + const source = getDeclarationFromName(node) || (node.kind === 90 /* DefaultKeyword */ ? node.parent : isLiteralComputedPropertyDeclarationName(node) ? node.parent.parent : node.kind === 137 /* ConstructorKeyword */ && isConstructorDeclaration(node.parent) ? node.parent.parent : void 0); + const commonjsSource = source && isBinaryExpression(source) ? source.left : void 0; + return !!(source && ((_a = target.declarations) == null ? void 0 : _a.some((d) => d === source || d === commonjsSource))); +} +function declarationIsWriteAccess(decl) { + if (!!(decl.flags & 33554432 /* Ambient */)) return true; + switch (decl.kind) { + case 227 /* BinaryExpression */: + case 209 /* BindingElement */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 90 /* DefaultKeyword */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + case 282 /* ExportSpecifier */: + case 274 /* ImportClause */: + // default import + case 272 /* ImportEqualsDeclaration */: + case 277 /* ImportSpecifier */: + case 265 /* InterfaceDeclaration */: + case 339 /* JSDocCallbackTag */: + case 347 /* JSDocTypedefTag */: + case 292 /* JsxAttribute */: + case 268 /* ModuleDeclaration */: + case 271 /* NamespaceExportDeclaration */: + case 275 /* NamespaceImport */: + case 281 /* NamespaceExport */: + case 170 /* Parameter */: + case 305 /* ShorthandPropertyAssignment */: + case 266 /* TypeAliasDeclaration */: + case 169 /* TypeParameter */: + return true; + case 304 /* PropertyAssignment */: + return !isArrayLiteralOrObjectLiteralDestructuringPattern(decl.parent); + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 177 /* Constructor */: + case 175 /* MethodDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return !!decl.body; + case 261 /* VariableDeclaration */: + case 173 /* PropertyDeclaration */: + return !!decl.initializer || isCatchClause(decl.parent); + case 174 /* MethodSignature */: + case 172 /* PropertySignature */: + case 349 /* JSDocPropertyTag */: + case 342 /* JSDocParameterTag */: + return false; + default: + return Debug.failBadSyntaxKind(decl); + } +} +var Core; +((Core2) => { + function getReferencedSymbolsForNode(position, node, program, sourceFiles, cancellationToken, options = {}, sourceFilesSet = new Set(sourceFiles.map((f) => f.fileName))) { + var _a, _b; + node = getAdjustedNode2(node, options); + if (isSourceFile(node)) { + const resolvedRef = ts_GoToDefinition_exports.getReferenceAtPosition(node, position, program); + if (!(resolvedRef == null ? void 0 : resolvedRef.file)) { + return void 0; + } + const moduleSymbol = program.getTypeChecker().getMergedSymbol(resolvedRef.file.symbol); + if (moduleSymbol) { + return getReferencedSymbolsForModule( + program, + moduleSymbol, + /*excludeImportTypeOfExportEquals*/ + false, + sourceFiles, + sourceFilesSet + ); + } + const fileIncludeReasons = program.getFileIncludeReasons(); + if (!fileIncludeReasons) { + return void 0; + } + return [{ + definition: { type: 5 /* TripleSlashReference */, reference: resolvedRef.reference, file: node }, + references: getReferencesForNonModule(resolvedRef.file, fileIncludeReasons, program) || emptyArray + }]; + } + if (!options.implementations) { + const special = getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken); + if (special) { + return special; + } + } + const checker = program.getTypeChecker(); + const symbol = checker.getSymbolAtLocation(isConstructorDeclaration(node) && node.parent.name || node); + if (!symbol) { + if (!options.implementations && isStringLiteralLike(node)) { + if (isModuleSpecifierLike(node)) { + const fileIncludeReasons = program.getFileIncludeReasons(); + const referencedFileName = (_b = (_a = program.getResolvedModuleFromModuleSpecifier(node)) == null ? void 0 : _a.resolvedModule) == null ? void 0 : _b.resolvedFileName; + const referencedFile = referencedFileName ? program.getSourceFile(referencedFileName) : void 0; + if (referencedFile) { + return [{ definition: { type: 4 /* String */, node }, references: getReferencesForNonModule(referencedFile, fileIncludeReasons, program) || emptyArray }]; + } + } + return getReferencesForStringLiteral(node, sourceFiles, checker, cancellationToken); + } + return void 0; + } + if (symbol.escapedName === "export=" /* ExportEquals */) { + return getReferencedSymbolsForModule( + program, + symbol.parent, + /*excludeImportTypeOfExportEquals*/ + false, + sourceFiles, + sourceFilesSet + ); + } + const moduleReferences = getReferencedSymbolsForModuleIfDeclaredBySourceFile(symbol, program, sourceFiles, cancellationToken, options, sourceFilesSet); + if (moduleReferences && !(symbol.flags & 33554432 /* Transient */)) { + return moduleReferences; + } + const aliasedSymbol = getMergedAliasedSymbolOfNamespaceExportDeclaration(node, symbol, checker); + const moduleReferencesOfExportTarget = aliasedSymbol && getReferencedSymbolsForModuleIfDeclaredBySourceFile(aliasedSymbol, program, sourceFiles, cancellationToken, options, sourceFilesSet); + const references = getReferencedSymbolsForSymbol(symbol, node, sourceFiles, sourceFilesSet, checker, cancellationToken, options); + return mergeReferences(program, moduleReferences, references, moduleReferencesOfExportTarget); + } + Core2.getReferencedSymbolsForNode = getReferencedSymbolsForNode; + function getAdjustedNode2(node, options) { + if (options.use === 1 /* References */) { + node = getAdjustedReferenceLocation(node); + } else if (options.use === 2 /* Rename */) { + node = getAdjustedRenameLocation(node); + } + return node; + } + Core2.getAdjustedNode = getAdjustedNode2; + function getReferencesForFileName(fileName, program, sourceFiles, sourceFilesSet = new Set(sourceFiles.map((f) => f.fileName))) { + var _a, _b; + const moduleSymbol = (_a = program.getSourceFile(fileName)) == null ? void 0 : _a.symbol; + if (moduleSymbol) { + return ((_b = getReferencedSymbolsForModule( + program, + moduleSymbol, + /*excludeImportTypeOfExportEquals*/ + false, + sourceFiles, + sourceFilesSet + )[0]) == null ? void 0 : _b.references) || emptyArray; + } + const fileIncludeReasons = program.getFileIncludeReasons(); + const referencedFile = program.getSourceFile(fileName); + return referencedFile && fileIncludeReasons && getReferencesForNonModule(referencedFile, fileIncludeReasons, program) || emptyArray; + } + Core2.getReferencesForFileName = getReferencesForFileName; + function getReferencesForNonModule(referencedFile, refFileMap, program) { + let entries; + const references = refFileMap.get(referencedFile.path) || emptyArray; + for (const ref of references) { + if (isReferencedFile(ref)) { + const referencingFile = program.getSourceFileByPath(ref.file); + const location = getReferencedFileLocation(program, ref); + if (isReferenceFileLocation(location)) { + entries = append(entries, { + kind: 0 /* Span */, + fileName: referencingFile.fileName, + textSpan: createTextSpanFromRange(location) + }); + } + } + } + return entries; + } + function getMergedAliasedSymbolOfNamespaceExportDeclaration(node, symbol, checker) { + if (node.parent && isNamespaceExportDeclaration(node.parent)) { + const aliasedSymbol = checker.getAliasedSymbol(symbol); + const targetSymbol = checker.getMergedSymbol(aliasedSymbol); + if (aliasedSymbol !== targetSymbol) { + return targetSymbol; + } + } + return void 0; + } + function getReferencedSymbolsForModuleIfDeclaredBySourceFile(symbol, program, sourceFiles, cancellationToken, options, sourceFilesSet) { + const moduleSourceFile = symbol.flags & 1536 /* Module */ && symbol.declarations && find(symbol.declarations, isSourceFile); + if (!moduleSourceFile) return void 0; + const exportEquals = symbol.exports.get("export=" /* ExportEquals */); + const moduleReferences = getReferencedSymbolsForModule(program, symbol, !!exportEquals, sourceFiles, sourceFilesSet); + if (!exportEquals || !sourceFilesSet.has(moduleSourceFile.fileName)) return moduleReferences; + const checker = program.getTypeChecker(); + symbol = skipAlias(exportEquals, checker); + return mergeReferences(program, moduleReferences, getReferencedSymbolsForSymbol( + symbol, + /*node*/ + void 0, + sourceFiles, + sourceFilesSet, + checker, + cancellationToken, + options + )); + } + function mergeReferences(program, ...referencesToMerge) { + let result; + for (const references of referencesToMerge) { + if (!references || !references.length) continue; + if (!result) { + result = references; + continue; + } + for (const entry of references) { + if (!entry.definition || entry.definition.type !== 0 /* Symbol */) { + result.push(entry); + continue; + } + const symbol = entry.definition.symbol; + const refIndex = findIndex(result, (ref) => !!ref.definition && ref.definition.type === 0 /* Symbol */ && ref.definition.symbol === symbol); + if (refIndex === -1) { + result.push(entry); + continue; + } + const reference = result[refIndex]; + result[refIndex] = { + definition: reference.definition, + references: reference.references.concat(entry.references).sort((entry1, entry2) => { + const entry1File = getSourceFileIndexOfEntry(program, entry1); + const entry2File = getSourceFileIndexOfEntry(program, entry2); + if (entry1File !== entry2File) { + return compareValues(entry1File, entry2File); + } + const entry1Span = getTextSpanOfEntry(entry1); + const entry2Span = getTextSpanOfEntry(entry2); + return entry1Span.start !== entry2Span.start ? compareValues(entry1Span.start, entry2Span.start) : compareValues(entry1Span.length, entry2Span.length); + }) + }; + } + } + return result; + } + function getSourceFileIndexOfEntry(program, entry) { + const sourceFile = entry.kind === 0 /* Span */ ? program.getSourceFile(entry.fileName) : entry.node.getSourceFile(); + return program.getSourceFiles().indexOf(sourceFile); + } + function getReferencedSymbolsForModule(program, symbol, excludeImportTypeOfExportEquals, sourceFiles, sourceFilesSet) { + Debug.assert(!!symbol.valueDeclaration); + const references = mapDefined(findModuleReferences(program, sourceFiles, symbol), (reference) => { + if (reference.kind === "import") { + const parent2 = reference.literal.parent; + if (isLiteralTypeNode(parent2)) { + const importType = cast(parent2.parent, isImportTypeNode); + if (excludeImportTypeOfExportEquals && !importType.qualifier) { + return void 0; + } + } + return nodeEntry(reference.literal); + } else if (reference.kind === "implicit") { + const range = reference.literal.text !== externalHelpersModuleNameText && forEachChildRecursively( + reference.referencingFile, + (n) => !(n.transformFlags & 2 /* ContainsJsx */) ? "skip" : isJsxElement(n) || isJsxSelfClosingElement(n) || isJsxFragment(n) ? n : void 0 + ) || reference.referencingFile.statements[0] || reference.referencingFile; + return nodeEntry(range); + } else { + return { + kind: 0 /* Span */, + fileName: reference.referencingFile.fileName, + textSpan: createTextSpanFromRange(reference.ref) + }; + } + }); + if (symbol.declarations) { + for (const decl of symbol.declarations) { + switch (decl.kind) { + case 308 /* SourceFile */: + break; + case 268 /* ModuleDeclaration */: + if (sourceFilesSet.has(decl.getSourceFile().fileName)) { + references.push(nodeEntry(decl.name)); + } + break; + default: + Debug.assert(!!(symbol.flags & 33554432 /* Transient */), "Expected a module symbol to be declared by a SourceFile or ModuleDeclaration."); + } + } + } + const exported = symbol.exports.get("export=" /* ExportEquals */); + if (exported == null ? void 0 : exported.declarations) { + for (const decl of exported.declarations) { + const sourceFile = decl.getSourceFile(); + if (sourceFilesSet.has(sourceFile.fileName)) { + const node = isBinaryExpression(decl) && isPropertyAccessExpression(decl.left) ? decl.left.expression : isExportAssignment(decl) ? Debug.checkDefined(findChildOfKind(decl, 95 /* ExportKeyword */, sourceFile)) : getNameOfDeclaration(decl) || decl; + references.push(nodeEntry(node)); + } + } + } + return references.length ? [{ definition: { type: 0 /* Symbol */, symbol }, references }] : emptyArray; + } + function isReadonlyTypeOperator(node) { + return node.kind === 148 /* ReadonlyKeyword */ && isTypeOperatorNode(node.parent) && node.parent.operator === 148 /* ReadonlyKeyword */; + } + function getReferencedSymbolsSpecial(node, sourceFiles, cancellationToken) { + if (isTypeKeyword(node.kind)) { + if (node.kind === 116 /* VoidKeyword */ && isVoidExpression(node.parent)) { + return void 0; + } + if (node.kind === 148 /* ReadonlyKeyword */ && !isReadonlyTypeOperator(node)) { + return void 0; + } + return getAllReferencesForKeyword( + sourceFiles, + node.kind, + cancellationToken, + node.kind === 148 /* ReadonlyKeyword */ ? isReadonlyTypeOperator : void 0 + ); + } + if (isImportMeta(node.parent) && node.parent.name === node) { + return getAllReferencesForImportMeta(sourceFiles, cancellationToken); + } + if (isStaticModifier(node) && isClassStaticBlockDeclaration(node.parent)) { + return [{ definition: { type: 2 /* Keyword */, node }, references: [nodeEntry(node)] }]; + } + if (isJumpStatementTarget(node)) { + const labelDefinition = getTargetLabel(node.parent, node.text); + return labelDefinition && getLabelReferencesInNode(labelDefinition.parent, labelDefinition); + } else if (isLabelOfLabeledStatement(node)) { + return getLabelReferencesInNode(node.parent, node); + } + if (isThis(node)) { + return getReferencesForThisKeyword(node, sourceFiles, cancellationToken); + } + if (node.kind === 108 /* SuperKeyword */) { + return getReferencesForSuperKeyword(node); + } + return void 0; + } + function getReferencedSymbolsForSymbol(originalSymbol, node, sourceFiles, sourceFilesSet, checker, cancellationToken, options) { + const symbol = node && skipPastExportOrImportSpecifierOrUnion( + originalSymbol, + node, + checker, + /*useLocalSymbolForExportSpecifier*/ + !isForRenameWithPrefixAndSuffixText(options) + ) || originalSymbol; + const searchMeaning = node && options.use !== 2 /* Rename */ ? getIntersectingMeaningFromDeclarations(node, symbol) : 7 /* All */; + const result = []; + const state = new State(sourceFiles, sourceFilesSet, node ? getSpecialSearchKind(node) : 0 /* None */, checker, cancellationToken, searchMeaning, options, result); + const exportSpecifier = !isForRenameWithPrefixAndSuffixText(options) || !symbol.declarations ? void 0 : find(symbol.declarations, isExportSpecifier); + if (exportSpecifier) { + getReferencesAtExportSpecifier( + exportSpecifier.name, + symbol, + exportSpecifier, + state.createSearch( + node, + originalSymbol, + /*comingFrom*/ + void 0 + ), + state, + /*addReferencesHere*/ + true, + /*alwaysGetReferences*/ + true + ); + } else if (node && node.kind === 90 /* DefaultKeyword */ && symbol.escapedName === "default" /* Default */ && symbol.parent) { + addReference(node, symbol, state); + searchForImportsOfExport(node, symbol, { exportingModuleSymbol: symbol.parent, exportKind: 1 /* Default */ }, state); + } else { + const search = state.createSearch( + node, + symbol, + /*comingFrom*/ + void 0, + { allSearchSymbols: node ? populateSearchSymbolSet(symbol, node, checker, options.use === 2 /* Rename */, !!options.providePrefixAndSuffixTextForRename, !!options.implementations) : [symbol] } + ); + getReferencesInContainerOrFiles(symbol, state, search); + } + return result; + } + function getReferencesInContainerOrFiles(symbol, state, search) { + const scope = getSymbolScope(symbol); + if (scope) { + getReferencesInContainer( + scope, + scope.getSourceFile(), + search, + state, + /*addReferencesHere*/ + !(isSourceFile(scope) && !contains(state.sourceFiles, scope)) + ); + } else { + for (const sourceFile of state.sourceFiles) { + state.cancellationToken.throwIfCancellationRequested(); + searchForName(sourceFile, search, state); + } + } + } + function getSpecialSearchKind(node) { + switch (node.kind) { + case 177 /* Constructor */: + case 137 /* ConstructorKeyword */: + return 1 /* Constructor */; + case 80 /* Identifier */: + if (isClassLike(node.parent)) { + Debug.assert(node.parent.name === node); + return 2 /* Class */; + } + // falls through + default: + return 0 /* None */; + } + } + function skipPastExportOrImportSpecifierOrUnion(symbol, node, checker, useLocalSymbolForExportSpecifier) { + const { parent: parent2 } = node; + if (isExportSpecifier(parent2) && useLocalSymbolForExportSpecifier) { + return getLocalSymbolForExportSpecifier(node, symbol, parent2, checker); + } + return firstDefined(symbol.declarations, (decl) => { + if (!decl.parent) { + if (symbol.flags & 33554432 /* Transient */) return void 0; + Debug.fail(`Unexpected symbol at ${Debug.formatSyntaxKind(node.kind)}: ${Debug.formatSymbol(symbol)}`); + } + return isTypeLiteralNode(decl.parent) && isUnionTypeNode(decl.parent.parent) ? checker.getPropertyOfType(checker.getTypeFromTypeNode(decl.parent.parent), symbol.name) : void 0; + }); + } + let SpecialSearchKind; + ((SpecialSearchKind2) => { + SpecialSearchKind2[SpecialSearchKind2["None"] = 0] = "None"; + SpecialSearchKind2[SpecialSearchKind2["Constructor"] = 1] = "Constructor"; + SpecialSearchKind2[SpecialSearchKind2["Class"] = 2] = "Class"; + })(SpecialSearchKind || (SpecialSearchKind = {})); + function getNonModuleSymbolOfMergedModuleSymbol(symbol) { + if (!(symbol.flags & (1536 /* Module */ | 33554432 /* Transient */))) return void 0; + const decl = symbol.declarations && find(symbol.declarations, (d) => !isSourceFile(d) && !isModuleDeclaration(d)); + return decl && decl.symbol; + } + class State { + constructor(sourceFiles, sourceFilesSet, specialSearchKind, checker, cancellationToken, searchMeaning, options, result) { + this.sourceFiles = sourceFiles; + this.sourceFilesSet = sourceFilesSet; + this.specialSearchKind = specialSearchKind; + this.checker = checker; + this.cancellationToken = cancellationToken; + this.searchMeaning = searchMeaning; + this.options = options; + this.result = result; + /** Cache for `explicitlyinheritsFrom`. */ + this.inheritsFromCache = /* @__PURE__ */ new Map(); + /** + * Type nodes can contain multiple references to the same type. For example: + * let x: Foo & (Foo & Bar) = ... + * Because we are returning the implementation locations and not the identifier locations, + * duplicate entries would be returned here as each of the type references is part of + * the same implementation. For that reason, check before we add a new entry. + */ + this.markSeenContainingTypeReference = nodeSeenTracker(); + /** + * It's possible that we will encounter the right side of `export { foo as bar } from "x";` more than once. + * For example: + * // b.ts + * export { foo as bar } from "./a"; + * import { bar } from "./b"; + * + * Normally at `foo as bar` we directly add `foo` and do not locally search for it (since it doesn't declare a local). + * But another reference to it may appear in the same source file. + * See `tests/cases/fourslash/transitiveExportImports3.ts`. + */ + this.markSeenReExportRHS = nodeSeenTracker(); + this.symbolIdToReferences = []; + // Source file ID -> symbol ID -> Whether the symbol has been searched for in the source file. + this.sourceFileToSeenSymbols = []; + } + includesSourceFile(sourceFile) { + return this.sourceFilesSet.has(sourceFile.fileName); + } + /** Gets every place to look for references of an exported symbols. See `ImportsResult` in `importTracker.ts` for more documentation. */ + getImportSearches(exportSymbol, exportInfo) { + if (!this.importTracker) this.importTracker = createImportTracker(this.sourceFiles, this.sourceFilesSet, this.checker, this.cancellationToken); + return this.importTracker(exportSymbol, exportInfo, this.options.use === 2 /* Rename */); + } + /** @param allSearchSymbols set of additional symbols for use by `includes`. */ + createSearch(location, symbol, comingFrom, searchOptions = {}) { + const { + text = stripQuotes(symbolName(getLocalSymbolForExportDefault(symbol) || getNonModuleSymbolOfMergedModuleSymbol(symbol) || symbol)), + allSearchSymbols = [symbol] + } = searchOptions; + const escapedText = escapeLeadingUnderscores(text); + const parents = this.options.implementations && location ? getParentSymbolsOfPropertyAccess(location, symbol, this.checker) : void 0; + return { symbol, comingFrom, text, escapedText, parents, allSearchSymbols, includes: (sym) => contains(allSearchSymbols, sym) }; + } + /** + * Callback to add references for a particular searched symbol. + * This initializes a reference group, so only call this if you will add at least one reference. + */ + referenceAdder(searchSymbol) { + const symbolId = getSymbolId(searchSymbol); + let references = this.symbolIdToReferences[symbolId]; + if (!references) { + references = this.symbolIdToReferences[symbolId] = []; + this.result.push({ definition: { type: 0 /* Symbol */, symbol: searchSymbol }, references }); + } + return (node, kind) => references.push(nodeEntry(node, kind)); + } + /** Add a reference with no associated definition. */ + addStringOrCommentReference(fileName, textSpan) { + this.result.push({ + definition: void 0, + references: [{ kind: 0 /* Span */, fileName, textSpan }] + }); + } + /** Returns `true` the first time we search for a symbol in a file and `false` afterwards. */ + markSearchedSymbols(sourceFile, symbols) { + const sourceId = getNodeId(sourceFile); + const seenSymbols = this.sourceFileToSeenSymbols[sourceId] || (this.sourceFileToSeenSymbols[sourceId] = /* @__PURE__ */ new Set()); + let anyNewSymbols = false; + for (const sym of symbols) { + anyNewSymbols = tryAddToSet(seenSymbols, getSymbolId(sym)) || anyNewSymbols; + } + return anyNewSymbols; + } + } + function searchForImportsOfExport(exportLocation, exportSymbol, exportInfo, state) { + const { importSearches, singleReferences, indirectUsers } = state.getImportSearches(exportSymbol, exportInfo); + if (singleReferences.length) { + const addRef = state.referenceAdder(exportSymbol); + for (const singleRef of singleReferences) { + if (shouldAddSingleReference(singleRef, state)) addRef(singleRef); + } + } + for (const [importLocation, importSymbol] of importSearches) { + getReferencesInSourceFile(importLocation.getSourceFile(), state.createSearch(importLocation, importSymbol, 1 /* Export */), state); + } + if (indirectUsers.length) { + let indirectSearch; + switch (exportInfo.exportKind) { + case 0 /* Named */: + indirectSearch = state.createSearch(exportLocation, exportSymbol, 1 /* Export */); + break; + case 1 /* Default */: + indirectSearch = state.options.use === 2 /* Rename */ ? void 0 : state.createSearch(exportLocation, exportSymbol, 1 /* Export */, { text: "default" }); + break; + case 2 /* ExportEquals */: + break; + } + if (indirectSearch) { + for (const indirectUser of indirectUsers) { + searchForName(indirectUser, indirectSearch, state); + } + } + } + } + function eachExportReference(sourceFiles, checker, cancellationToken, exportSymbol, exportingModuleSymbol, exportName, isDefaultExport, cb) { + const importTracker = createImportTracker(sourceFiles, new Set(sourceFiles.map((f) => f.fileName)), checker, cancellationToken); + const { importSearches, indirectUsers, singleReferences } = importTracker( + exportSymbol, + { exportKind: isDefaultExport ? 1 /* Default */ : 0 /* Named */, exportingModuleSymbol }, + /*isForRename*/ + false + ); + for (const [importLocation] of importSearches) { + cb(importLocation); + } + for (const singleReference of singleReferences) { + if (isIdentifier(singleReference) && isImportTypeNode(singleReference.parent)) { + cb(singleReference); + } + } + for (const indirectUser of indirectUsers) { + for (const node of getPossibleSymbolReferenceNodes(indirectUser, isDefaultExport ? "default" : exportName)) { + const symbol = checker.getSymbolAtLocation(node); + const hasExportAssignmentDeclaration = some(symbol == null ? void 0 : symbol.declarations, (d) => tryCast(d, isExportAssignment) ? true : false); + if (isIdentifier(node) && !isImportOrExportSpecifier(node.parent) && (symbol === exportSymbol || hasExportAssignmentDeclaration)) { + cb(node); + } + } + } + } + Core2.eachExportReference = eachExportReference; + function shouldAddSingleReference(singleRef, state) { + if (!hasMatchingMeaning(singleRef, state)) return false; + if (state.options.use !== 2 /* Rename */) return true; + if (!isIdentifier(singleRef) && !isImportOrExportSpecifier(singleRef.parent)) return false; + return !(isImportOrExportSpecifier(singleRef.parent) && moduleExportNameIsDefault(singleRef)); + } + function searchForImportedSymbol(symbol, state) { + if (!symbol.declarations) return; + for (const declaration of symbol.declarations) { + const exportingFile = declaration.getSourceFile(); + getReferencesInSourceFile(exportingFile, state.createSearch(declaration, symbol, 0 /* Import */), state, state.includesSourceFile(exportingFile)); + } + } + function searchForName(sourceFile, search, state) { + if (getNameTable(sourceFile).get(search.escapedText) !== void 0) { + getReferencesInSourceFile(sourceFile, search, state); + } + } + function getPropertySymbolOfDestructuringAssignment(location, checker) { + return isArrayLiteralOrObjectLiteralDestructuringPattern(location.parent.parent) ? checker.getPropertySymbolOfDestructuringAssignment(location) : void 0; + } + function getSymbolScope(symbol) { + const { declarations, flags, parent: parent2, valueDeclaration } = symbol; + if (valueDeclaration && (valueDeclaration.kind === 219 /* FunctionExpression */ || valueDeclaration.kind === 232 /* ClassExpression */)) { + return valueDeclaration; + } + if (!declarations) { + return void 0; + } + if (flags & (4 /* Property */ | 8192 /* Method */)) { + const privateDeclaration = find(declarations, (d) => hasEffectiveModifier(d, 2 /* Private */) || isPrivateIdentifierClassElementDeclaration(d)); + if (privateDeclaration) { + return getAncestor(privateDeclaration, 264 /* ClassDeclaration */); + } + return void 0; + } + if (declarations.some(isObjectBindingElementWithoutPropertyName)) { + return void 0; + } + const exposedByParent = parent2 && !(symbol.flags & 262144 /* TypeParameter */); + if (exposedByParent && !(isExternalModuleSymbol(parent2) && !parent2.globalExports)) { + return void 0; + } + let scope; + for (const declaration of declarations) { + const container = getContainerNode(declaration); + if (scope && scope !== container) { + return void 0; + } + if (!container || container.kind === 308 /* SourceFile */ && !isExternalOrCommonJsModule(container)) { + return void 0; + } + scope = container; + if (isFunctionExpression(scope)) { + let next; + while (next = getNextJSDocCommentLocation(scope)) { + scope = next; + } + } + } + return exposedByParent ? scope.getSourceFile() : scope; + } + function isSymbolReferencedInFile(definition, checker, sourceFile, searchContainer = sourceFile) { + return eachSymbolReferenceInFile(definition, checker, sourceFile, () => true, searchContainer) || false; + } + Core2.isSymbolReferencedInFile = isSymbolReferencedInFile; + function eachSymbolReferenceInFile(definition, checker, sourceFile, cb, searchContainer = sourceFile) { + const symbol = isParameterPropertyDeclaration(definition.parent, definition.parent.parent) ? first(checker.getSymbolsOfParameterPropertyDeclaration(definition.parent, definition.text)) : checker.getSymbolAtLocation(definition); + if (!symbol) return void 0; + for (const token of getPossibleSymbolReferenceNodes(sourceFile, symbol.name, searchContainer)) { + if (!isIdentifier(token) || token === definition || token.escapedText !== definition.escapedText) continue; + const referenceSymbol = checker.getSymbolAtLocation(token); + if (referenceSymbol === symbol || checker.getShorthandAssignmentValueSymbol(token.parent) === symbol || isExportSpecifier(token.parent) && getLocalSymbolForExportSpecifier(token, referenceSymbol, token.parent, checker) === symbol) { + const res = cb(token); + if (res) return res; + } + } + } + Core2.eachSymbolReferenceInFile = eachSymbolReferenceInFile; + function getTopMostDeclarationNamesInFile(declarationName, sourceFile) { + const candidates = filter(getPossibleSymbolReferenceNodes(sourceFile, declarationName), (name) => !!getDeclarationFromName(name)); + return candidates.reduce((topMost, decl) => { + const depth = getDepth(decl); + if (!some(topMost.declarationNames) || depth === topMost.depth) { + topMost.declarationNames.push(decl); + topMost.depth = depth; + } else if (depth < topMost.depth) { + topMost.declarationNames = [decl]; + topMost.depth = depth; + } + return topMost; + }, { depth: Infinity, declarationNames: [] }).declarationNames; + function getDepth(declaration) { + let depth = 0; + while (declaration) { + declaration = getContainerNode(declaration); + depth++; + } + return depth; + } + } + Core2.getTopMostDeclarationNamesInFile = getTopMostDeclarationNamesInFile; + function someSignatureUsage(signature, sourceFiles, checker, cb) { + if (!signature.name || !isIdentifier(signature.name)) return false; + const symbol = Debug.checkDefined(checker.getSymbolAtLocation(signature.name)); + for (const sourceFile of sourceFiles) { + for (const name of getPossibleSymbolReferenceNodes(sourceFile, symbol.name)) { + if (!isIdentifier(name) || name === signature.name || name.escapedText !== signature.name.escapedText) continue; + const called = climbPastPropertyAccess(name); + const call = isCallExpression(called.parent) && called.parent.expression === called ? called.parent : void 0; + const referenceSymbol = checker.getSymbolAtLocation(name); + if (referenceSymbol && checker.getRootSymbols(referenceSymbol).some((s) => s === symbol)) { + if (cb(name, call)) { + return true; + } + } + } + } + return false; + } + Core2.someSignatureUsage = someSignatureUsage; + function getPossibleSymbolReferenceNodes(sourceFile, symbolName2, container = sourceFile) { + return mapDefined(getPossibleSymbolReferencePositions(sourceFile, symbolName2, container), (pos) => { + const referenceLocation = getTouchingPropertyName(sourceFile, pos); + return referenceLocation === sourceFile ? void 0 : referenceLocation; + }); + } + function getPossibleSymbolReferencePositions(sourceFile, symbolName2, container = sourceFile) { + const positions = []; + if (!symbolName2 || !symbolName2.length) { + return positions; + } + const text = sourceFile.text; + const sourceLength = text.length; + const symbolNameLength = symbolName2.length; + let position = text.indexOf(symbolName2, container.pos); + while (position >= 0) { + if (position > container.end) break; + const endPosition = position + symbolNameLength; + if ((position === 0 || !isIdentifierPart(text.charCodeAt(position - 1), 99 /* Latest */)) && (endPosition === sourceLength || !isIdentifierPart(text.charCodeAt(endPosition), 99 /* Latest */))) { + positions.push(position); + } + position = text.indexOf(symbolName2, position + symbolNameLength + 1); + } + return positions; + } + function getLabelReferencesInNode(container, targetLabel) { + const sourceFile = container.getSourceFile(); + const labelName = targetLabel.text; + const references = mapDefined(getPossibleSymbolReferenceNodes(sourceFile, labelName, container), (node) => ( + // Only pick labels that are either the target label, or have a target that is the target label + node === targetLabel || isJumpStatementTarget(node) && getTargetLabel(node, labelName) === targetLabel ? nodeEntry(node) : void 0 + )); + return [{ definition: { type: 1 /* Label */, node: targetLabel }, references }]; + } + function isValidReferencePosition(node, searchSymbolName) { + switch (node.kind) { + case 81 /* PrivateIdentifier */: + if (isJSDocMemberName(node.parent)) { + return true; + } + // falls through I guess + case 80 /* Identifier */: + return node.text.length === searchSymbolName.length; + case 15 /* NoSubstitutionTemplateLiteral */: + case 11 /* StringLiteral */: { + const str = node; + return str.text.length === searchSymbolName.length && (isLiteralNameOfPropertyDeclarationOrIndexAccess(str) || isNameOfModuleDeclaration(node) || isExpressionOfExternalModuleImportEqualsDeclaration(node) || isCallExpression(node.parent) && isBindableObjectDefinePropertyCall(node.parent) && node.parent.arguments[1] === node || isImportOrExportSpecifier(node.parent)); + } + case 9 /* NumericLiteral */: + return isLiteralNameOfPropertyDeclarationOrIndexAccess(node) && node.text.length === searchSymbolName.length; + case 90 /* DefaultKeyword */: + return "default".length === searchSymbolName.length; + default: + return false; + } + } + function getAllReferencesForImportMeta(sourceFiles, cancellationToken) { + const references = flatMap(sourceFiles, (sourceFile) => { + cancellationToken.throwIfCancellationRequested(); + return mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "meta", sourceFile), (node) => { + const parent2 = node.parent; + if (isImportMeta(parent2)) { + return nodeEntry(parent2); + } + }); + }); + return references.length ? [{ definition: { type: 2 /* Keyword */, node: references[0].node }, references }] : void 0; + } + function getAllReferencesForKeyword(sourceFiles, keywordKind, cancellationToken, filter2) { + const references = flatMap(sourceFiles, (sourceFile) => { + cancellationToken.throwIfCancellationRequested(); + return mapDefined(getPossibleSymbolReferenceNodes(sourceFile, tokenToString(keywordKind), sourceFile), (referenceLocation) => { + if (referenceLocation.kind === keywordKind && (!filter2 || filter2(referenceLocation))) { + return nodeEntry(referenceLocation); + } + }); + }); + return references.length ? [{ definition: { type: 2 /* Keyword */, node: references[0].node }, references }] : void 0; + } + function getReferencesInSourceFile(sourceFile, search, state, addReferencesHere = true) { + state.cancellationToken.throwIfCancellationRequested(); + return getReferencesInContainer(sourceFile, sourceFile, search, state, addReferencesHere); + } + function getReferencesInContainer(container, sourceFile, search, state, addReferencesHere) { + if (!state.markSearchedSymbols(sourceFile, search.allSearchSymbols)) { + return; + } + for (const position of getPossibleSymbolReferencePositions(sourceFile, search.text, container)) { + getReferencesAtLocation(sourceFile, position, search, state, addReferencesHere); + } + } + function hasMatchingMeaning(referenceLocation, state) { + return !!(getMeaningFromLocation(referenceLocation) & state.searchMeaning); + } + function getReferencesAtLocation(sourceFile, position, search, state, addReferencesHere) { + const referenceLocation = getTouchingPropertyName(sourceFile, position); + if (!isValidReferencePosition(referenceLocation, search.text)) { + if (!state.options.implementations && (state.options.findInStrings && isInString(sourceFile, position) || state.options.findInComments && isInNonReferenceComment(sourceFile, position))) { + state.addStringOrCommentReference(sourceFile.fileName, createTextSpan(position, search.text.length)); + } + return; + } + if (!hasMatchingMeaning(referenceLocation, state)) return; + let referenceSymbol = state.checker.getSymbolAtLocation(referenceLocation); + if (!referenceSymbol) { + return; + } + const parent2 = referenceLocation.parent; + if (isImportSpecifier(parent2) && parent2.propertyName === referenceLocation) { + return; + } + if (isExportSpecifier(parent2)) { + Debug.assert(referenceLocation.kind === 80 /* Identifier */ || referenceLocation.kind === 11 /* StringLiteral */); + getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, parent2, search, state, addReferencesHere); + return; + } + if (isJSDocPropertyLikeTag(parent2) && parent2.isNameFirst && parent2.typeExpression && isJSDocTypeLiteral(parent2.typeExpression.type) && parent2.typeExpression.type.jsDocPropertyTags && length(parent2.typeExpression.type.jsDocPropertyTags)) { + getReferencesAtJSDocTypeLiteral(parent2.typeExpression.type.jsDocPropertyTags, referenceLocation, search, state); + return; + } + const relatedSymbol = getRelatedSymbol(search, referenceSymbol, referenceLocation, state); + if (!relatedSymbol) { + getReferenceForShorthandProperty(referenceSymbol, search, state); + return; + } + switch (state.specialSearchKind) { + case 0 /* None */: + if (addReferencesHere) addReference(referenceLocation, relatedSymbol, state); + break; + case 1 /* Constructor */: + addConstructorReferences(referenceLocation, sourceFile, search, state); + break; + case 2 /* Class */: + addClassStaticThisReferences(referenceLocation, search, state); + break; + default: + Debug.assertNever(state.specialSearchKind); + } + if (isInJSFile(referenceLocation) && isBindingElement(referenceLocation.parent) && isVariableDeclarationInitializedToBareOrAccessedRequire(referenceLocation.parent.parent.parent)) { + referenceSymbol = referenceLocation.parent.symbol; + if (!referenceSymbol) return; + } + getImportOrExportReferences(referenceLocation, referenceSymbol, search, state); + } + function getReferencesAtJSDocTypeLiteral(jsDocPropertyTags, referenceLocation, search, state) { + const addRef = state.referenceAdder(search.symbol); + addReference(referenceLocation, search.symbol, state); + forEach(jsDocPropertyTags, (propTag) => { + if (isQualifiedName(propTag.name)) { + addRef(propTag.name.left); + } + }); + } + function getReferencesAtExportSpecifier(referenceLocation, referenceSymbol, exportSpecifier, search, state, addReferencesHere, alwaysGetReferences) { + Debug.assert(!alwaysGetReferences || !!state.options.providePrefixAndSuffixTextForRename, "If alwaysGetReferences is true, then prefix/suffix text must be enabled"); + const { parent: parent2, propertyName, name } = exportSpecifier; + const exportDeclaration = parent2.parent; + const localSymbol = getLocalSymbolForExportSpecifier(referenceLocation, referenceSymbol, exportSpecifier, state.checker); + if (!alwaysGetReferences && !search.includes(localSymbol)) { + return; + } + if (!propertyName) { + if (!(state.options.use === 2 /* Rename */ && moduleExportNameIsDefault(name))) { + addRef(); + } + } else if (referenceLocation === propertyName) { + if (!exportDeclaration.moduleSpecifier) { + addRef(); + } + if (addReferencesHere && state.options.use !== 2 /* Rename */ && state.markSeenReExportRHS(name)) { + addReference(name, Debug.checkDefined(exportSpecifier.symbol), state); + } + } else { + if (state.markSeenReExportRHS(referenceLocation)) { + addRef(); + } + } + if (!isForRenameWithPrefixAndSuffixText(state.options) || alwaysGetReferences) { + const isDefaultExport = moduleExportNameIsDefault(referenceLocation) || moduleExportNameIsDefault(exportSpecifier.name); + const exportKind = isDefaultExport ? 1 /* Default */ : 0 /* Named */; + const exportSymbol = Debug.checkDefined(exportSpecifier.symbol); + const exportInfo = getExportInfo(exportSymbol, exportKind, state.checker); + if (exportInfo) { + searchForImportsOfExport(referenceLocation, exportSymbol, exportInfo, state); + } + } + if (search.comingFrom !== 1 /* Export */ && exportDeclaration.moduleSpecifier && !propertyName && !isForRenameWithPrefixAndSuffixText(state.options)) { + const imported = state.checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); + if (imported) searchForImportedSymbol(imported, state); + } + function addRef() { + if (addReferencesHere) addReference(referenceLocation, localSymbol, state); + } + } + function getLocalSymbolForExportSpecifier(referenceLocation, referenceSymbol, exportSpecifier, checker) { + return isExportSpecifierAlias(referenceLocation, exportSpecifier) && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier) || referenceSymbol; + } + function isExportSpecifierAlias(referenceLocation, exportSpecifier) { + const { parent: parent2, propertyName, name } = exportSpecifier; + Debug.assert(propertyName === referenceLocation || name === referenceLocation); + if (propertyName) { + return propertyName === referenceLocation; + } else { + return !parent2.parent.moduleSpecifier; + } + } + function getImportOrExportReferences(referenceLocation, referenceSymbol, search, state) { + const importOrExport = getImportOrExportSymbol(referenceLocation, referenceSymbol, state.checker, search.comingFrom === 1 /* Export */); + if (!importOrExport) return; + const { symbol } = importOrExport; + if (importOrExport.kind === 0 /* Import */) { + if (!isForRenameWithPrefixAndSuffixText(state.options)) { + searchForImportedSymbol(symbol, state); + } + } else { + searchForImportsOfExport(referenceLocation, symbol, importOrExport.exportInfo, state); + } + } + function getReferenceForShorthandProperty({ flags, valueDeclaration }, search, state) { + const shorthandValueSymbol = state.checker.getShorthandAssignmentValueSymbol(valueDeclaration); + const name = valueDeclaration && getNameOfDeclaration(valueDeclaration); + if (!(flags & 33554432 /* Transient */) && name && search.includes(shorthandValueSymbol)) { + addReference(name, shorthandValueSymbol, state); + } + } + function addReference(referenceLocation, relatedSymbol, state) { + const { kind, symbol } = "kind" in relatedSymbol ? relatedSymbol : { kind: void 0, symbol: relatedSymbol }; + if (state.options.use === 2 /* Rename */ && referenceLocation.kind === 90 /* DefaultKeyword */) { + return; + } + const addRef = state.referenceAdder(symbol); + if (state.options.implementations) { + addImplementationReferences(referenceLocation, addRef, state); + } else { + addRef(referenceLocation, kind); + } + } + function addConstructorReferences(referenceLocation, sourceFile, search, state) { + if (isNewExpressionTarget(referenceLocation)) { + addReference(referenceLocation, search.symbol, state); + } + const pusher = () => state.referenceAdder(search.symbol); + if (isClassLike(referenceLocation.parent)) { + Debug.assert(referenceLocation.kind === 90 /* DefaultKeyword */ || referenceLocation.parent.name === referenceLocation); + findOwnConstructorReferences(search.symbol, sourceFile, pusher()); + } else { + const classExtending = tryGetClassByExtendingIdentifier(referenceLocation); + if (classExtending) { + findSuperConstructorAccesses(classExtending, pusher()); + findInheritedConstructorReferences(classExtending, state); + } + } + } + function addClassStaticThisReferences(referenceLocation, search, state) { + addReference(referenceLocation, search.symbol, state); + const classLike = referenceLocation.parent; + if (state.options.use === 2 /* Rename */ || !isClassLike(classLike)) return; + Debug.assert(classLike.name === referenceLocation); + const addRef = state.referenceAdder(search.symbol); + for (const member of classLike.members) { + if (!(isMethodOrAccessor(member) && isStatic(member))) { + continue; + } + if (member.body) { + member.body.forEachChild(function cb(node) { + if (node.kind === 110 /* ThisKeyword */) { + addRef(node); + } else if (!isFunctionLike(node) && !isClassLike(node)) { + node.forEachChild(cb); + } + }); + } + } + } + function findOwnConstructorReferences(classSymbol, sourceFile, addNode) { + const constructorSymbol = getClassConstructorSymbol(classSymbol); + if (constructorSymbol && constructorSymbol.declarations) { + for (const decl of constructorSymbol.declarations) { + const ctrKeyword = findChildOfKind(decl, 137 /* ConstructorKeyword */, sourceFile); + Debug.assert(decl.kind === 177 /* Constructor */ && !!ctrKeyword); + addNode(ctrKeyword); + } + } + if (classSymbol.exports) { + classSymbol.exports.forEach((member) => { + const decl = member.valueDeclaration; + if (decl && decl.kind === 175 /* MethodDeclaration */) { + const body = decl.body; + if (body) { + forEachDescendantOfKind(body, 110 /* ThisKeyword */, (thisKeyword) => { + if (isNewExpressionTarget(thisKeyword)) { + addNode(thisKeyword); + } + }); + } + } + }); + } + } + function getClassConstructorSymbol(classSymbol) { + return classSymbol.members && classSymbol.members.get("__constructor" /* Constructor */); + } + function findSuperConstructorAccesses(classDeclaration, addNode) { + const constructor = getClassConstructorSymbol(classDeclaration.symbol); + if (!(constructor && constructor.declarations)) { + return; + } + for (const decl of constructor.declarations) { + Debug.assert(decl.kind === 177 /* Constructor */); + const body = decl.body; + if (body) { + forEachDescendantOfKind(body, 108 /* SuperKeyword */, (node) => { + if (isCallExpressionTarget(node)) { + addNode(node); + } + }); + } + } + } + function hasOwnConstructor(classDeclaration) { + return !!getClassConstructorSymbol(classDeclaration.symbol); + } + function findInheritedConstructorReferences(classDeclaration, state) { + if (hasOwnConstructor(classDeclaration)) return; + const classSymbol = classDeclaration.symbol; + const search = state.createSearch( + /*location*/ + void 0, + classSymbol, + /*comingFrom*/ + void 0 + ); + getReferencesInContainerOrFiles(classSymbol, state, search); + } + function addImplementationReferences(refNode, addReference2, state) { + if (isDeclarationName(refNode) && isImplementation(refNode.parent)) { + addReference2(refNode); + return; + } + if (refNode.kind !== 80 /* Identifier */) { + return; + } + if (refNode.parent.kind === 305 /* ShorthandPropertyAssignment */) { + getReferenceEntriesForShorthandPropertyAssignment(refNode, state.checker, addReference2); + } + const containingNode = getContainingNodeIfInHeritageClause(refNode); + if (containingNode) { + addReference2(containingNode); + return; + } + const typeNode = findAncestor(refNode, (a) => !isQualifiedName(a.parent) && !isTypeNode(a.parent) && !isTypeElement(a.parent)); + const typeHavingNode = typeNode.parent; + if (hasType(typeHavingNode) && typeHavingNode.type === typeNode && state.markSeenContainingTypeReference(typeHavingNode)) { + if (hasInitializer(typeHavingNode)) { + addIfImplementation(typeHavingNode.initializer); + } else if (isFunctionLike(typeHavingNode) && typeHavingNode.body) { + const body = typeHavingNode.body; + if (body.kind === 242 /* Block */) { + forEachReturnStatement(body, (returnStatement) => { + if (returnStatement.expression) addIfImplementation(returnStatement.expression); + }); + } else { + addIfImplementation(body); + } + } else if (isAssertionExpression(typeHavingNode) || isSatisfiesExpression(typeHavingNode)) { + addIfImplementation(typeHavingNode.expression); + } + } + function addIfImplementation(e) { + if (isImplementationExpression(e)) addReference2(e); + } + } + function getContainingNodeIfInHeritageClause(node) { + return isIdentifier(node) || isPropertyAccessExpression(node) ? getContainingNodeIfInHeritageClause(node.parent) : isExpressionWithTypeArguments(node) ? tryCast(node.parent.parent, or(isClassLike, isInterfaceDeclaration)) : void 0; + } + function isImplementationExpression(node) { + switch (node.kind) { + case 218 /* ParenthesizedExpression */: + return isImplementationExpression(node.expression); + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + case 211 /* ObjectLiteralExpression */: + case 232 /* ClassExpression */: + case 210 /* ArrayLiteralExpression */: + return true; + default: + return false; + } + } + function explicitlyInheritsFrom(symbol, parent2, cachedResults, checker) { + if (symbol === parent2) { + return true; + } + const key = getSymbolId(symbol) + "," + getSymbolId(parent2); + const cached = cachedResults.get(key); + if (cached !== void 0) { + return cached; + } + cachedResults.set(key, false); + const inherits = !!symbol.declarations && symbol.declarations.some( + (declaration) => getAllSuperTypeNodes(declaration).some((typeReference) => { + const type = checker.getTypeAtLocation(typeReference); + return !!type && !!type.symbol && explicitlyInheritsFrom(type.symbol, parent2, cachedResults, checker); + }) + ); + cachedResults.set(key, inherits); + return inherits; + } + function getReferencesForSuperKeyword(superKeyword) { + let searchSpaceNode = getSuperContainer( + superKeyword, + /*stopOnFunctions*/ + false + ); + if (!searchSpaceNode) { + return void 0; + } + let staticFlag = 256 /* Static */; + switch (searchSpaceNode.kind) { + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + staticFlag &= getSyntacticModifierFlags(searchSpaceNode); + searchSpaceNode = searchSpaceNode.parent; + break; + default: + return void 0; + } + const sourceFile = searchSpaceNode.getSourceFile(); + const references = mapDefined(getPossibleSymbolReferenceNodes(sourceFile, "super", searchSpaceNode), (node) => { + if (node.kind !== 108 /* SuperKeyword */) { + return; + } + const container = getSuperContainer( + node, + /*stopOnFunctions*/ + false + ); + return container && isStatic(container) === !!staticFlag && container.parent.symbol === searchSpaceNode.symbol ? nodeEntry(node) : void 0; + }); + return [{ definition: { type: 0 /* Symbol */, symbol: searchSpaceNode.symbol }, references }]; + } + function isParameterName(node) { + return node.kind === 80 /* Identifier */ && node.parent.kind === 170 /* Parameter */ && node.parent.name === node; + } + function getReferencesForThisKeyword(thisOrSuperKeyword, sourceFiles, cancellationToken) { + let searchSpaceNode = getThisContainer( + thisOrSuperKeyword, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + let staticFlag = 256 /* Static */; + switch (searchSpaceNode.kind) { + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + if (isObjectLiteralMethod(searchSpaceNode)) { + staticFlag &= getSyntacticModifierFlags(searchSpaceNode); + searchSpaceNode = searchSpaceNode.parent; + break; + } + // falls through + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + staticFlag &= getSyntacticModifierFlags(searchSpaceNode); + searchSpaceNode = searchSpaceNode.parent; + break; + case 308 /* SourceFile */: + if (isExternalModule(searchSpaceNode) || isParameterName(thisOrSuperKeyword)) { + return void 0; + } + // falls through + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + break; + // Computed properties in classes are not handled here because references to this are illegal, + // so there is no point finding references to them. + default: + return void 0; + } + const references = flatMap(searchSpaceNode.kind === 308 /* SourceFile */ ? sourceFiles : [searchSpaceNode.getSourceFile()], (sourceFile) => { + cancellationToken.throwIfCancellationRequested(); + return getPossibleSymbolReferenceNodes(sourceFile, "this", isSourceFile(searchSpaceNode) ? sourceFile : searchSpaceNode).filter((node) => { + if (!isThis(node)) { + return false; + } + const container = getThisContainer( + node, + /*includeArrowFunctions*/ + false, + /*includeClassComputedPropertyName*/ + false + ); + if (!canHaveSymbol(container)) return false; + switch (searchSpaceNode.kind) { + case 219 /* FunctionExpression */: + case 263 /* FunctionDeclaration */: + return searchSpaceNode.symbol === container.symbol; + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + return isObjectLiteralMethod(searchSpaceNode) && searchSpaceNode.symbol === container.symbol; + case 232 /* ClassExpression */: + case 264 /* ClassDeclaration */: + case 211 /* ObjectLiteralExpression */: + return container.parent && canHaveSymbol(container.parent) && searchSpaceNode.symbol === container.parent.symbol && isStatic(container) === !!staticFlag; + case 308 /* SourceFile */: + return container.kind === 308 /* SourceFile */ && !isExternalModule(container) && !isParameterName(node); + } + }); + }).map((n) => nodeEntry(n)); + const thisParameter = firstDefined(references, (r) => isParameter(r.node.parent) ? r.node : void 0); + return [{ + definition: { type: 3 /* This */, node: thisParameter || thisOrSuperKeyword }, + references + }]; + } + function getReferencesForStringLiteral(node, sourceFiles, checker, cancellationToken) { + const type = getContextualTypeFromParentOrAncestorTypeNode(node, checker); + const references = flatMap(sourceFiles, (sourceFile) => { + cancellationToken.throwIfCancellationRequested(); + return mapDefined(getPossibleSymbolReferenceNodes(sourceFile, node.text), (ref) => { + if (isStringLiteralLike(ref) && ref.text === node.text) { + if (type) { + const refType = getContextualTypeFromParentOrAncestorTypeNode(ref, checker); + if (type !== checker.getStringType() && (type === refType || isStringLiteralPropertyReference(ref, checker))) { + return nodeEntry(ref, 2 /* StringLiteral */); + } + } else { + return isNoSubstitutionTemplateLiteral(ref) && !rangeIsOnSingleLine(ref, sourceFile) ? void 0 : nodeEntry(ref, 2 /* StringLiteral */); + } + } + }); + }); + return [{ + definition: { type: 4 /* String */, node }, + references + }]; + } + function isStringLiteralPropertyReference(node, checker) { + if (isPropertySignature(node.parent)) { + return checker.getPropertyOfType(checker.getTypeAtLocation(node.parent.parent), node.text); + } + } + function populateSearchSymbolSet(symbol, location, checker, isForRename, providePrefixAndSuffixText, implementations) { + const result = []; + forEachRelatedSymbol( + symbol, + location, + checker, + isForRename, + !(isForRename && providePrefixAndSuffixText), + (sym, root, base) => { + if (base) { + if (isStaticSymbol(symbol) !== isStaticSymbol(base)) { + base = void 0; + } + } + result.push(base || root || sym); + }, + // when try to find implementation, implementations is true, and not allowed to find base class + /*allowBaseTypes*/ + () => !implementations + ); + return result; + } + function forEachRelatedSymbol(symbol, location, checker, isForRenamePopulateSearchSymbolSet, onlyIncludeBindingElementAtReferenceLocation, cbSymbol, allowBaseTypes) { + const containingObjectLiteralElement = getContainingObjectLiteralElement(location); + if (containingObjectLiteralElement) { + const shorthandValueSymbol = checker.getShorthandAssignmentValueSymbol(location.parent); + if (shorthandValueSymbol && isForRenamePopulateSearchSymbolSet) { + return cbSymbol( + shorthandValueSymbol, + /*rootSymbol*/ + void 0, + /*baseSymbol*/ + void 0, + 3 /* SearchedLocalFoundProperty */ + ); + } + const contextualType = checker.getContextualType(containingObjectLiteralElement.parent); + const res2 = contextualType && firstDefined( + getPropertySymbolsFromContextualType( + containingObjectLiteralElement, + checker, + contextualType, + /*unionSymbolOk*/ + true + ), + (sym) => fromRoot(sym, 4 /* SearchedPropertyFoundLocal */) + ); + if (res2) return res2; + const propertySymbol = getPropertySymbolOfDestructuringAssignment(location, checker); + const res1 = propertySymbol && cbSymbol( + propertySymbol, + /*rootSymbol*/ + void 0, + /*baseSymbol*/ + void 0, + 4 /* SearchedPropertyFoundLocal */ + ); + if (res1) return res1; + const res22 = shorthandValueSymbol && cbSymbol( + shorthandValueSymbol, + /*rootSymbol*/ + void 0, + /*baseSymbol*/ + void 0, + 3 /* SearchedLocalFoundProperty */ + ); + if (res22) return res22; + } + const aliasedSymbol = getMergedAliasedSymbolOfNamespaceExportDeclaration(location, symbol, checker); + if (aliasedSymbol) { + const res2 = cbSymbol( + aliasedSymbol, + /*rootSymbol*/ + void 0, + /*baseSymbol*/ + void 0, + 1 /* Node */ + ); + if (res2) return res2; + } + const res = fromRoot(symbol); + if (res) return res; + if (symbol.valueDeclaration && isParameterPropertyDeclaration(symbol.valueDeclaration, symbol.valueDeclaration.parent)) { + const paramProps = checker.getSymbolsOfParameterPropertyDeclaration(cast(symbol.valueDeclaration, isParameter), symbol.name); + Debug.assert(paramProps.length === 2 && !!(paramProps[0].flags & 1 /* FunctionScopedVariable */) && !!(paramProps[1].flags & 4 /* Property */)); + return fromRoot(symbol.flags & 1 /* FunctionScopedVariable */ ? paramProps[1] : paramProps[0]); + } + const exportSpecifier = getDeclarationOfKind(symbol, 282 /* ExportSpecifier */); + if (!isForRenamePopulateSearchSymbolSet || exportSpecifier && !exportSpecifier.propertyName) { + const localSymbol = exportSpecifier && checker.getExportSpecifierLocalTargetSymbol(exportSpecifier); + if (localSymbol) { + const res2 = cbSymbol( + localSymbol, + /*rootSymbol*/ + void 0, + /*baseSymbol*/ + void 0, + 1 /* Node */ + ); + if (res2) return res2; + } + } + if (!isForRenamePopulateSearchSymbolSet) { + let bindingElementPropertySymbol; + if (onlyIncludeBindingElementAtReferenceLocation) { + bindingElementPropertySymbol = isObjectBindingElementWithoutPropertyName(location.parent) ? getPropertySymbolFromBindingElement(checker, location.parent) : void 0; + } else { + bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker); + } + return bindingElementPropertySymbol && fromRoot(bindingElementPropertySymbol, 4 /* SearchedPropertyFoundLocal */); + } + Debug.assert(isForRenamePopulateSearchSymbolSet); + const includeOriginalSymbolOfBindingElement = onlyIncludeBindingElementAtReferenceLocation; + if (includeOriginalSymbolOfBindingElement) { + const bindingElementPropertySymbol = getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol, checker); + return bindingElementPropertySymbol && fromRoot(bindingElementPropertySymbol, 4 /* SearchedPropertyFoundLocal */); + } + function fromRoot(sym, kind) { + return firstDefined(checker.getRootSymbols(sym), (rootSymbol) => cbSymbol( + sym, + rootSymbol, + /*baseSymbol*/ + void 0, + kind + ) || (rootSymbol.parent && rootSymbol.parent.flags & (32 /* Class */ | 64 /* Interface */) && allowBaseTypes(rootSymbol) ? getPropertySymbolsFromBaseTypes(rootSymbol.parent, rootSymbol.name, checker, (base) => cbSymbol(sym, rootSymbol, base, kind)) : void 0)); + } + function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol2, checker2) { + const bindingElement = getDeclarationOfKind(symbol2, 209 /* BindingElement */); + if (bindingElement && isObjectBindingElementWithoutPropertyName(bindingElement)) { + return getPropertySymbolFromBindingElement(checker2, bindingElement); + } + } + } + function getPropertySymbolsFromBaseTypes(symbol, propertyName, checker, cb) { + const seen = /* @__PURE__ */ new Set(); + return recur(symbol); + function recur(symbol2) { + if (!(symbol2.flags & (32 /* Class */ | 64 /* Interface */)) || !addToSeen(seen, symbol2)) return; + return firstDefined(symbol2.declarations, (declaration) => firstDefined(getAllSuperTypeNodes(declaration), (typeReference) => { + const type = checker.getTypeAtLocation(typeReference); + const propertySymbol = type.symbol && checker.getPropertyOfType(type, propertyName); + return propertySymbol && firstDefined(checker.getRootSymbols(propertySymbol), cb) || type.symbol && recur(type.symbol); + })); + } + } + function isStaticSymbol(symbol) { + if (!symbol.valueDeclaration) return false; + const modifierFlags = getEffectiveModifierFlags(symbol.valueDeclaration); + return !!(modifierFlags & 256 /* Static */); + } + function getRelatedSymbol(search, referenceSymbol, referenceLocation, state) { + const { checker } = state; + return forEachRelatedSymbol( + referenceSymbol, + referenceLocation, + checker, + /*isForRenamePopulateSearchSymbolSet*/ + false, + /*onlyIncludeBindingElementAtReferenceLocation*/ + state.options.use !== 2 /* Rename */ || !!state.options.providePrefixAndSuffixTextForRename, + (sym, rootSymbol, baseSymbol, kind) => { + if (baseSymbol) { + if (isStaticSymbol(referenceSymbol) !== isStaticSymbol(baseSymbol)) { + baseSymbol = void 0; + } + } + return search.includes(baseSymbol || rootSymbol || sym) ? { symbol: rootSymbol && !(getCheckFlags(sym) & 6 /* Synthetic */) ? rootSymbol : sym, kind } : void 0; + }, + /*allowBaseTypes*/ + (rootSymbol) => !(search.parents && !search.parents.some((parent2) => explicitlyInheritsFrom(rootSymbol.parent, parent2, state.inheritsFromCache, checker))) + ); + } + function getIntersectingMeaningFromDeclarations(node, symbol) { + let meaning = getMeaningFromLocation(node); + const { declarations } = symbol; + if (declarations) { + let lastIterationMeaning; + do { + lastIterationMeaning = meaning; + for (const declaration of declarations) { + const declarationMeaning = getMeaningFromDeclaration(declaration); + if (declarationMeaning & meaning) { + meaning |= declarationMeaning; + } + } + } while (meaning !== lastIterationMeaning); + } + return meaning; + } + Core2.getIntersectingMeaningFromDeclarations = getIntersectingMeaningFromDeclarations; + function isImplementation(node) { + return !!(node.flags & 33554432 /* Ambient */) ? !(isInterfaceDeclaration(node) || isTypeAliasDeclaration(node)) : isVariableLike(node) ? hasInitializer(node) : isFunctionLikeDeclaration(node) ? !!node.body : isClassLike(node) || isModuleOrEnumDeclaration(node); + } + function getReferenceEntriesForShorthandPropertyAssignment(node, checker, addReference2) { + const refSymbol = checker.getSymbolAtLocation(node); + const shorthandSymbol = checker.getShorthandAssignmentValueSymbol(refSymbol.valueDeclaration); + if (shorthandSymbol) { + for (const declaration of shorthandSymbol.getDeclarations()) { + if (getMeaningFromDeclaration(declaration) & 1 /* Value */) { + addReference2(declaration); + } + } + } + } + Core2.getReferenceEntriesForShorthandPropertyAssignment = getReferenceEntriesForShorthandPropertyAssignment; + function forEachDescendantOfKind(node, kind, action) { + forEachChild(node, (child) => { + if (child.kind === kind) { + action(child); + } + forEachDescendantOfKind(child, kind, action); + }); + } + function tryGetClassByExtendingIdentifier(node) { + return tryGetClassExtendingExpressionWithTypeArguments(climbPastPropertyAccess(node).parent); + } + function getParentSymbolsOfPropertyAccess(location, symbol, checker) { + const propertyAccessExpression = isRightSideOfPropertyAccess(location) ? location.parent : void 0; + const lhsType = propertyAccessExpression && checker.getTypeAtLocation(propertyAccessExpression.expression); + const res = mapDefined(lhsType && (lhsType.isUnionOrIntersection() ? lhsType.types : lhsType.symbol === symbol.parent ? void 0 : [lhsType]), (t) => t.symbol && t.symbol.flags & (32 /* Class */ | 64 /* Interface */) ? t.symbol : void 0); + return res.length === 0 ? void 0 : res; + } + function isForRenameWithPrefixAndSuffixText(options) { + return options.use === 2 /* Rename */ && options.providePrefixAndSuffixTextForRename; + } +})(Core || (Core = {})); + +// src/services/_namespaces/ts.GoToDefinition.ts +var ts_GoToDefinition_exports = {}; +__export(ts_GoToDefinition_exports, { + createDefinitionInfo: () => createDefinitionInfo, + getDefinitionAndBoundSpan: () => getDefinitionAndBoundSpan, + getDefinitionAtPosition: () => getDefinitionAtPosition, + getReferenceAtPosition: () => getReferenceAtPosition, + getTypeDefinitionAtPosition: () => getTypeDefinitionAtPosition +}); + +// src/services/goToDefinition.ts +function getDefinitionAtPosition(program, sourceFile, position, searchOtherFilesOnly, stopAtAlias) { + var _a; + const resolvedRef = getReferenceAtPosition(sourceFile, position, program); + const fileReferenceDefinition = resolvedRef && [getDefinitionInfoForFileReference(resolvedRef.reference.fileName, resolvedRef.fileName, resolvedRef.unverified)] || emptyArray; + if (resolvedRef == null ? void 0 : resolvedRef.file) { + return fileReferenceDefinition; + } + const node = getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return void 0; + } + const { parent: parent2 } = node; + const typeChecker = program.getTypeChecker(); + if (node.kind === 164 /* OverrideKeyword */ || isIdentifier(node) && isJSDocOverrideTag(parent2) && parent2.tagName === node) { + const def = getDefinitionFromOverriddenMember(typeChecker, node); + if (def !== void 0 || node.kind !== 164 /* OverrideKeyword */) { + return def || emptyArray; + } + } + if (isJumpStatementTarget(node)) { + const label = getTargetLabel(node.parent, node.text); + return label ? [createDefinitionInfoFromName( + typeChecker, + label, + "label" /* label */, + node.text, + /*containerName*/ + void 0 + )] : void 0; + } + switch (node.kind) { + case 90 /* DefaultKeyword */: + if (!isDefaultClause(node.parent)) { + break; + } + // falls through + case 84 /* CaseKeyword */: + const switchStatement = findAncestor(node.parent, isSwitchStatement); + if (switchStatement) { + return [createDefinitionInfoFromSwitch(switchStatement, sourceFile)]; + } + break; + } + let findFunctionDecl; + switch (node.kind) { + case 107 /* ReturnKeyword */: + case 135 /* AwaitKeyword */: + case 127 /* YieldKeyword */: + findFunctionDecl = isFunctionLikeDeclaration; + const functionDeclaration = findAncestor(node, findFunctionDecl); + return functionDeclaration ? [createDefinitionFromSignatureDeclaration(typeChecker, functionDeclaration)] : void 0; + } + if (isStaticModifier(node) && isClassStaticBlockDeclaration(node.parent)) { + const classDecl = node.parent.parent; + const { symbol: symbol2, failedAliasResolution: failedAliasResolution2 } = getSymbol(classDecl, typeChecker, stopAtAlias); + const staticBlocks = filter(classDecl.members, isClassStaticBlockDeclaration); + const containerName = symbol2 ? typeChecker.symbolToString(symbol2, classDecl) : ""; + const sourceFile2 = node.getSourceFile(); + return map(staticBlocks, (staticBlock) => { + let { pos } = moveRangePastModifiers(staticBlock); + pos = skipTrivia(sourceFile2.text, pos); + return createDefinitionInfoFromName( + typeChecker, + staticBlock, + "constructor" /* constructorImplementationElement */, + "static {}", + containerName, + /*unverified*/ + false, + failedAliasResolution2, + { start: pos, length: "static".length } + ); + }); + } + let { symbol, failedAliasResolution } = getSymbol(node, typeChecker, stopAtAlias); + let fallbackNode = node; + if (searchOtherFilesOnly && failedAliasResolution) { + const importDeclaration = forEach([node, ...(symbol == null ? void 0 : symbol.declarations) || emptyArray], (n) => findAncestor(n, isAnyImportOrBareOrAccessedRequire)); + const moduleSpecifier = importDeclaration && tryGetModuleSpecifierFromDeclaration(importDeclaration); + if (moduleSpecifier) { + ({ symbol, failedAliasResolution } = getSymbol(moduleSpecifier, typeChecker, stopAtAlias)); + fallbackNode = moduleSpecifier; + } + } + if (!symbol && isModuleSpecifierLike(fallbackNode)) { + const ref = (_a = program.getResolvedModuleFromModuleSpecifier(fallbackNode, sourceFile)) == null ? void 0 : _a.resolvedModule; + if (ref) { + return [{ + name: fallbackNode.text, + fileName: ref.resolvedFileName, + containerName: void 0, + containerKind: void 0, + kind: "script" /* scriptElement */, + textSpan: createTextSpan(0, 0), + failedAliasResolution, + isAmbient: isDeclarationFileName(ref.resolvedFileName), + unverified: fallbackNode !== node + }]; + } + } + if (isModifier(node) && (isClassElement(parent2) || isNamedDeclaration(parent2))) { + symbol = parent2.symbol; + } + if (!symbol) { + return concatenate(fileReferenceDefinition, getDefinitionInfoForIndexSignatures(node, typeChecker)); + } + if (searchOtherFilesOnly && every(symbol.declarations, (d) => d.getSourceFile().fileName === sourceFile.fileName)) return void 0; + const calledDeclaration = tryGetSignatureDeclaration(typeChecker, node); + if (calledDeclaration && !(isJsxOpeningLikeElement(node.parent) && isJsxConstructorLike(calledDeclaration))) { + const sigInfo = createDefinitionFromSignatureDeclaration(typeChecker, calledDeclaration, failedAliasResolution); + let declarationFilter = (d) => d !== calledDeclaration; + if (typeChecker.getRootSymbols(symbol).some((s) => symbolMatchesSignature(s, calledDeclaration))) { + if (!isConstructorDeclaration(calledDeclaration)) return [sigInfo]; + declarationFilter = (d) => d !== calledDeclaration && (isClassDeclaration(d) || isClassExpression(d)); + } + const defs = getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution, declarationFilter) || emptyArray; + return node.kind === 108 /* SuperKeyword */ ? [sigInfo, ...defs] : [...defs, sigInfo]; + } + if (node.parent.kind === 305 /* ShorthandPropertyAssignment */) { + const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration); + const definitions = (shorthandSymbol == null ? void 0 : shorthandSymbol.declarations) ? shorthandSymbol.declarations.map((decl) => createDefinitionInfo( + decl, + typeChecker, + shorthandSymbol, + node, + /*unverified*/ + false, + failedAliasResolution + )) : emptyArray; + return concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node)); + } + if (isPropertyName(node) && isBindingElement(parent2) && isObjectBindingPattern(parent2.parent) && node === (parent2.propertyName || parent2.name)) { + const name = getNameFromPropertyName(node); + const type = typeChecker.getTypeAtLocation(parent2.parent); + return name === void 0 ? emptyArray : flatMap(type.isUnion() ? type.types : [type], (t) => { + const prop = t.getProperty(name); + return prop && getDefinitionFromSymbol(typeChecker, prop, node); + }); + } + const objectLiteralElementDefinition = getDefinitionFromObjectLiteralElement(typeChecker, node); + return concatenate(fileReferenceDefinition, objectLiteralElementDefinition.length ? objectLiteralElementDefinition : getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution)); +} +function symbolMatchesSignature(s, calledDeclaration) { + var _a; + return s === calledDeclaration.symbol || s === calledDeclaration.symbol.parent || isAssignmentExpression(calledDeclaration.parent) || !isCallLikeExpression(calledDeclaration.parent) && s === ((_a = tryCast(calledDeclaration.parent, canHaveSymbol)) == null ? void 0 : _a.symbol); +} +function getDefinitionFromObjectLiteralElement(typeChecker, node) { + const element = getContainingObjectLiteralElement(node); + if (element) { + const contextualType = element && typeChecker.getContextualType(element.parent); + if (contextualType) { + return flatMap(getPropertySymbolsFromContextualType( + element, + typeChecker, + contextualType, + /*unionSymbolOk*/ + false + ), (propertySymbol) => getDefinitionFromSymbol(typeChecker, propertySymbol, node)); + } + } + return emptyArray; +} +function getDefinitionFromOverriddenMember(typeChecker, node) { + const classElement = findAncestor(node, isClassElement); + if (!(classElement && classElement.name)) return; + const baseDeclaration = findAncestor(classElement, isClassLike); + if (!baseDeclaration) return; + const baseTypeNode = getEffectiveBaseTypeNode(baseDeclaration); + if (!baseTypeNode) return; + const expression = skipParentheses(baseTypeNode.expression); + const base = isClassExpression(expression) ? expression.symbol : typeChecker.getSymbolAtLocation(expression); + if (!base) return; + const baseType = hasStaticModifier(classElement) ? typeChecker.getTypeOfSymbol(base) : typeChecker.getDeclaredTypeOfSymbol(base); + let baseProp; + if (isComputedPropertyName(classElement.name)) { + const prop = typeChecker.getSymbolAtLocation(classElement.name); + if (!prop) { + return; + } + if (isKnownSymbol(prop)) { + baseProp = find(typeChecker.getPropertiesOfType(baseType), (s) => s.escapedName === prop.escapedName); + } else { + baseProp = typeChecker.getPropertyOfType(baseType, unescapeLeadingUnderscores(prop.escapedName)); + } + } else { + baseProp = typeChecker.getPropertyOfType(baseType, unescapeLeadingUnderscores(getTextOfPropertyName(classElement.name))); + } + if (!baseProp) return; + return getDefinitionFromSymbol(typeChecker, baseProp, node); +} +function getReferenceAtPosition(sourceFile, position, program) { + var _a, _b; + const referencePath = findReferenceInPosition(sourceFile.referencedFiles, position); + if (referencePath) { + const file = program.getSourceFileFromReference(sourceFile, referencePath); + return file && { reference: referencePath, fileName: file.fileName, file, unverified: false }; + } + const typeReferenceDirective = findReferenceInPosition(sourceFile.typeReferenceDirectives, position); + if (typeReferenceDirective) { + const reference = (_a = program.getResolvedTypeReferenceDirectiveFromTypeReferenceDirective(typeReferenceDirective, sourceFile)) == null ? void 0 : _a.resolvedTypeReferenceDirective; + const file = reference && program.getSourceFile(reference.resolvedFileName); + return file && { reference: typeReferenceDirective, fileName: file.fileName, file, unverified: false }; + } + const libReferenceDirective = findReferenceInPosition(sourceFile.libReferenceDirectives, position); + if (libReferenceDirective) { + const file = program.getLibFileFromReference(libReferenceDirective); + return file && { reference: libReferenceDirective, fileName: file.fileName, file, unverified: false }; + } + if (sourceFile.imports.length || sourceFile.moduleAugmentations.length) { + const node = getTouchingToken(sourceFile, position); + let resolution; + if (isModuleSpecifierLike(node) && isExternalModuleNameRelative(node.text) && (resolution = program.getResolvedModuleFromModuleSpecifier(node, sourceFile))) { + const verifiedFileName = (_b = resolution.resolvedModule) == null ? void 0 : _b.resolvedFileName; + const fileName = verifiedFileName || resolvePath(getDirectoryPath(sourceFile.fileName), node.text); + return { + file: program.getSourceFile(fileName), + fileName, + reference: { + pos: node.getStart(), + end: node.getEnd(), + fileName: node.text + }, + unverified: !verifiedFileName + }; + } + } + return void 0; +} +var typesWithUnwrappedTypeArguments = /* @__PURE__ */ new Set([ + "Array", + "ArrayLike", + "ReadonlyArray", + "Promise", + "PromiseLike", + "Iterable", + "IterableIterator", + "AsyncIterable", + "Set", + "WeakSet", + "ReadonlySet", + "Map", + "WeakMap", + "ReadonlyMap", + "Partial", + "Required", + "Readonly", + "Pick", + "Omit" +]); +function shouldUnwrapFirstTypeArgumentTypeDefinitionFromTypeReference(typeChecker, type) { + const referenceName = type.symbol.name; + if (!typesWithUnwrappedTypeArguments.has(referenceName)) { + return false; + } + const globalType = typeChecker.resolveName( + referenceName, + /*location*/ + void 0, + 788968 /* Type */, + /*excludeGlobals*/ + false + ); + return !!globalType && globalType === type.target.symbol; +} +function shouldUnwrapFirstTypeArgumentTypeDefinitionFromAlias(typeChecker, type) { + if (!type.aliasSymbol) { + return false; + } + const referenceName = type.aliasSymbol.name; + if (!typesWithUnwrappedTypeArguments.has(referenceName)) { + return false; + } + const globalType = typeChecker.resolveName( + referenceName, + /*location*/ + void 0, + 788968 /* Type */, + /*excludeGlobals*/ + false + ); + return !!globalType && globalType === type.aliasSymbol; +} +function getFirstTypeArgumentDefinitions(typeChecker, type, node, failedAliasResolution) { + var _a, _b; + if (!!(getObjectFlags(type) & 4 /* Reference */) && shouldUnwrapFirstTypeArgumentTypeDefinitionFromTypeReference(typeChecker, type)) { + return definitionFromType(typeChecker.getTypeArguments(type)[0], typeChecker, node, failedAliasResolution); + } + if (shouldUnwrapFirstTypeArgumentTypeDefinitionFromAlias(typeChecker, type) && type.aliasTypeArguments) { + return definitionFromType(type.aliasTypeArguments[0], typeChecker, node, failedAliasResolution); + } + if (getObjectFlags(type) & 32 /* Mapped */ && type.target && shouldUnwrapFirstTypeArgumentTypeDefinitionFromAlias(typeChecker, type.target)) { + const declaration = (_b = (_a = type.aliasSymbol) == null ? void 0 : _a.declarations) == null ? void 0 : _b[0]; + if (declaration && isTypeAliasDeclaration(declaration) && isTypeReferenceNode(declaration.type) && declaration.type.typeArguments) { + return definitionFromType(typeChecker.getTypeAtLocation(declaration.type.typeArguments[0]), typeChecker, node, failedAliasResolution); + } + } + return []; +} +function getTypeDefinitionAtPosition(typeChecker, sourceFile, position) { + const node = getTouchingPropertyName(sourceFile, position); + if (node === sourceFile) { + return void 0; + } + if (isImportMeta(node.parent) && node.parent.name === node) { + return definitionFromType( + typeChecker.getTypeAtLocation(node.parent), + typeChecker, + node.parent, + /*failedAliasResolution*/ + false + ); + } + let { symbol, failedAliasResolution } = getSymbol( + node, + typeChecker, + /*stopAtAlias*/ + false + ); + if (isModifier(node) && (isClassElement(node.parent) || isNamedDeclaration(node.parent))) { + symbol = node.parent.symbol; + failedAliasResolution = false; + } + if (!symbol) return void 0; + const typeAtLocation = typeChecker.getTypeOfSymbolAtLocation(symbol, node); + const returnType = tryGetReturnTypeOfFunction(symbol, typeAtLocation, typeChecker); + const fromReturnType = returnType && definitionFromType(returnType, typeChecker, node, failedAliasResolution); + const [resolvedType, typeDefinitions] = fromReturnType && fromReturnType.length !== 0 ? [returnType, fromReturnType] : [typeAtLocation, definitionFromType(typeAtLocation, typeChecker, node, failedAliasResolution)]; + return typeDefinitions.length ? [...getFirstTypeArgumentDefinitions(typeChecker, resolvedType, node, failedAliasResolution), ...typeDefinitions] : !(symbol.flags & 111551 /* Value */) && symbol.flags & 788968 /* Type */ ? getDefinitionFromSymbol(typeChecker, skipAlias(symbol, typeChecker), node, failedAliasResolution) : void 0; +} +function definitionFromType(type, checker, node, failedAliasResolution) { + return flatMap(type.isUnion() && !(type.flags & 32 /* Enum */) ? type.types : [type], (t) => t.symbol && getDefinitionFromSymbol(checker, t.symbol, node, failedAliasResolution)); +} +function tryGetReturnTypeOfFunction(symbol, type, checker) { + if (type.symbol === symbol || // At `const f = () => {}`, the symbol is `f` and the type symbol is at `() => {}` + symbol.valueDeclaration && type.symbol && isVariableDeclaration(symbol.valueDeclaration) && symbol.valueDeclaration.initializer === type.symbol.valueDeclaration) { + const sigs = type.getCallSignatures(); + if (sigs.length === 1) return checker.getReturnTypeOfSignature(first(sigs)); + } + return void 0; +} +function getDefinitionAndBoundSpan(program, sourceFile, position) { + const definitions = getDefinitionAtPosition(program, sourceFile, position); + if (!definitions || definitions.length === 0) { + return void 0; + } + const comment = findReferenceInPosition(sourceFile.referencedFiles, position) || findReferenceInPosition(sourceFile.typeReferenceDirectives, position) || findReferenceInPosition(sourceFile.libReferenceDirectives, position); + if (comment) { + return { definitions, textSpan: createTextSpanFromRange(comment) }; + } + const node = getTouchingPropertyName(sourceFile, position); + const textSpan = createTextSpan(node.getStart(), node.getWidth()); + return { definitions, textSpan }; +} +function getDefinitionInfoForIndexSignatures(node, checker) { + return mapDefined(checker.getIndexInfosAtLocation(node), (info) => info.declaration && createDefinitionFromSignatureDeclaration(checker, info.declaration)); +} +function getSymbol(node, checker, stopAtAlias) { + const symbol = checker.getSymbolAtLocation(node); + let failedAliasResolution = false; + if ((symbol == null ? void 0 : symbol.declarations) && symbol.flags & 2097152 /* Alias */ && !stopAtAlias && shouldSkipAlias(node, symbol.declarations[0])) { + const aliased = checker.getAliasedSymbol(symbol); + if (aliased.declarations) { + return { symbol: aliased }; + } else { + failedAliasResolution = true; + } + } + return { symbol, failedAliasResolution }; +} +function shouldSkipAlias(node, declaration) { + if (node.kind !== 80 /* Identifier */ && (node.kind !== 11 /* StringLiteral */ || !isImportOrExportSpecifier(node.parent))) { + return false; + } + if (node.parent === declaration) { + return true; + } + if (declaration.kind === 275 /* NamespaceImport */) { + return false; + } + return true; +} +function isExpandoDeclaration(node) { + if (!isAssignmentDeclaration(node)) return false; + const containingAssignment = findAncestor(node, (p) => { + if (isAssignmentExpression(p)) return true; + if (!isAssignmentDeclaration(p)) return "quit"; + return false; + }); + return !!containingAssignment && getAssignmentDeclarationKind(containingAssignment) === 5 /* Property */; +} +function getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution, declarationFilter) { + const filteredDeclarations = declarationFilter !== void 0 ? filter(symbol.declarations, declarationFilter) : symbol.declarations; + const signatureDefinition = !declarationFilter && (getConstructSignatureDefinition() || getCallSignatureDefinition()); + if (signatureDefinition) { + return signatureDefinition; + } + const withoutExpandos = filter(filteredDeclarations, (d) => !isExpandoDeclaration(d)); + const results = some(withoutExpandos) ? withoutExpandos : filteredDeclarations; + return map(results, (declaration) => createDefinitionInfo( + declaration, + typeChecker, + symbol, + node, + /*unverified*/ + false, + failedAliasResolution + )); + function getConstructSignatureDefinition() { + if (symbol.flags & 32 /* Class */ && !(symbol.flags & (16 /* Function */ | 3 /* Variable */)) && (isNewExpressionTarget(node) || node.kind === 137 /* ConstructorKeyword */)) { + const cls = find(filteredDeclarations, isClassLike); + return cls && getSignatureDefinition( + cls.members, + /*selectConstructors*/ + true + ); + } + } + function getCallSignatureDefinition() { + return isCallOrNewExpressionTarget(node) || isNameOfFunctionDeclaration(node) ? getSignatureDefinition( + filteredDeclarations, + /*selectConstructors*/ + false + ) : void 0; + } + function getSignatureDefinition(signatureDeclarations, selectConstructors) { + if (!signatureDeclarations) { + return void 0; + } + const declarations = signatureDeclarations.filter(selectConstructors ? isConstructorDeclaration : isFunctionLike); + const declarationsWithBody = declarations.filter((d) => !!d.body); + return declarations.length ? declarationsWithBody.length !== 0 ? declarationsWithBody.map((x) => createDefinitionInfo(x, typeChecker, symbol, node)) : [createDefinitionInfo( + last(declarations), + typeChecker, + symbol, + node, + /*unverified*/ + false, + failedAliasResolution + )] : void 0; + } +} +function createDefinitionInfo(declaration, checker, symbol, node, unverified, failedAliasResolution) { + const symbolName2 = checker.symbolToString(symbol); + const symbolKind = ts_SymbolDisplay_exports.getSymbolKind(checker, symbol, node); + const containerName = symbol.parent ? checker.symbolToString(symbol.parent, node) : ""; + return createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName2, containerName, unverified, failedAliasResolution); +} +function createDefinitionInfoFromName(checker, declaration, symbolKind, symbolName2, containerName, unverified, failedAliasResolution, textSpan) { + const sourceFile = declaration.getSourceFile(); + if (!textSpan) { + const name = getNameOfDeclaration(declaration) || declaration; + textSpan = createTextSpanFromNode(name, sourceFile); + } + return { + fileName: sourceFile.fileName, + textSpan, + kind: symbolKind, + name: symbolName2, + containerKind: void 0, + // TODO: GH#18217 + containerName, + ...ts_FindAllReferences_exports.toContextSpan( + textSpan, + sourceFile, + ts_FindAllReferences_exports.getContextNode(declaration) + ), + isLocal: !isDefinitionVisible(checker, declaration), + isAmbient: !!(declaration.flags & 33554432 /* Ambient */), + unverified, + failedAliasResolution + }; +} +function createDefinitionInfoFromSwitch(statement, sourceFile) { + const keyword = ts_FindAllReferences_exports.getContextNode(statement); + const textSpan = createTextSpanFromNode(isContextWithStartAndEndNode(keyword) ? keyword.start : keyword, sourceFile); + return { + fileName: sourceFile.fileName, + textSpan, + kind: "keyword" /* keyword */, + name: "switch", + containerKind: void 0, + containerName: "", + ...ts_FindAllReferences_exports.toContextSpan(textSpan, sourceFile, keyword), + isLocal: true, + isAmbient: false, + unverified: false, + failedAliasResolution: void 0 + }; +} +function isDefinitionVisible(checker, declaration) { + if (checker.isDeclarationVisible(declaration)) return true; + if (!declaration.parent) return false; + if (hasInitializer(declaration.parent) && declaration.parent.initializer === declaration) return isDefinitionVisible(checker, declaration.parent); + switch (declaration.kind) { + case 173 /* PropertyDeclaration */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + case 175 /* MethodDeclaration */: + if (hasEffectiveModifier(declaration, 2 /* Private */)) return false; + // Public properties/methods are visible if its parents are visible, so: + // falls through + case 177 /* Constructor */: + case 304 /* PropertyAssignment */: + case 305 /* ShorthandPropertyAssignment */: + case 211 /* ObjectLiteralExpression */: + case 232 /* ClassExpression */: + case 220 /* ArrowFunction */: + case 219 /* FunctionExpression */: + return isDefinitionVisible(checker, declaration.parent); + default: + return false; + } +} +function createDefinitionFromSignatureDeclaration(typeChecker, decl, failedAliasResolution) { + return createDefinitionInfo( + decl, + typeChecker, + decl.symbol, + decl, + /*unverified*/ + false, + failedAliasResolution + ); +} +function findReferenceInPosition(refs, pos) { + return find(refs, (ref) => textRangeContainsPositionInclusive(ref, pos)); +} +function getDefinitionInfoForFileReference(name, targetFileName, unverified) { + return { + fileName: targetFileName, + textSpan: createTextSpanFromBounds(0, 0), + kind: "script" /* scriptElement */, + name, + containerName: void 0, + containerKind: void 0, + // TODO: GH#18217 + unverified + }; +} +function getAncestorCallLikeExpression(node) { + const target = findAncestor(node, (n) => !isRightSideOfPropertyAccess(n)); + const callLike = target == null ? void 0 : target.parent; + return callLike && isCallLikeExpression(callLike) && getInvokedExpression(callLike) === target ? callLike : void 0; +} +function tryGetSignatureDeclaration(typeChecker, node) { + const callLike = getAncestorCallLikeExpression(node); + const signature = callLike && typeChecker.getResolvedSignature(callLike); + return tryCast(signature && signature.declaration, (d) => isFunctionLike(d) && !isFunctionTypeNode(d)); +} +function isJsxConstructorLike(node) { + switch (node.kind) { + case 177 /* Constructor */: + case 186 /* ConstructorType */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + return true; + default: + return false; + } +} + +// src/services/_namespaces/ts.InlayHints.ts +var ts_InlayHints_exports = {}; +__export(ts_InlayHints_exports, { + provideInlayHints: () => provideInlayHints +}); + +// src/services/inlayHints.ts +var leadingParameterNameCommentRegexFactory = (name) => { + return new RegExp(`^\\s?/\\*\\*?\\s?${name}\\s?\\*\\/\\s?$`); +}; +function shouldShowParameterNameHints(preferences) { + return preferences.includeInlayParameterNameHints === "literals" || preferences.includeInlayParameterNameHints === "all"; +} +function shouldShowLiteralParameterNameHintsOnly(preferences) { + return preferences.includeInlayParameterNameHints === "literals"; +} +function shouldUseInteractiveInlayHints(preferences) { + return preferences.interactiveInlayHints === true; +} +function provideInlayHints(context) { + const { file, program, span, cancellationToken, preferences } = context; + const sourceFileText = file.text; + const compilerOptions = program.getCompilerOptions(); + const quotePreference = getQuotePreference(file, preferences); + const checker = program.getTypeChecker(); + const result = []; + visitor(file); + return result; + function visitor(node) { + if (!node || node.getFullWidth() === 0) { + return; + } + switch (node.kind) { + case 268 /* ModuleDeclaration */: + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 263 /* FunctionDeclaration */: + case 232 /* ClassExpression */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 220 /* ArrowFunction */: + cancellationToken.throwIfCancellationRequested(); + } + if (!textSpanIntersectsWith(span, node.pos, node.getFullWidth())) { + return; + } + if (isTypeNode(node) && !isExpressionWithTypeArguments(node)) { + return; + } + if (preferences.includeInlayVariableTypeHints && isVariableDeclaration(node)) { + visitVariableLikeDeclaration(node); + } else if (preferences.includeInlayPropertyDeclarationTypeHints && isPropertyDeclaration(node)) { + visitVariableLikeDeclaration(node); + } else if (preferences.includeInlayEnumMemberValueHints && isEnumMember(node)) { + visitEnumMember(node); + } else if (shouldShowParameterNameHints(preferences) && (isCallExpression(node) || isNewExpression(node))) { + visitCallOrNewExpression(node); + } else { + if (preferences.includeInlayFunctionParameterTypeHints && isFunctionLikeDeclaration(node) && hasContextSensitiveParameters(node)) { + visitFunctionLikeForParameterType(node); + } + if (preferences.includeInlayFunctionLikeReturnTypeHints && isSignatureSupportingReturnAnnotation(node)) { + visitFunctionDeclarationLikeForReturnType(node); + } + } + return forEachChild(node, visitor); + } + function isSignatureSupportingReturnAnnotation(node) { + return isArrowFunction(node) || isFunctionExpression(node) || isFunctionDeclaration(node) || isMethodDeclaration(node) || isGetAccessorDeclaration(node); + } + function addParameterHints(text, parameter, position, isFirstVariadicArgument) { + let hintText = `${isFirstVariadicArgument ? "..." : ""}${text}`; + let displayParts; + if (shouldUseInteractiveInlayHints(preferences)) { + displayParts = [getNodeDisplayPart(hintText, parameter), { text: ":" }]; + hintText = ""; + } else { + hintText += ":"; + } + result.push({ + text: hintText, + position, + kind: "Parameter" /* Parameter */, + whitespaceAfter: true, + displayParts + }); + } + function addTypeHints(hintText, position) { + result.push({ + text: typeof hintText === "string" ? `: ${hintText}` : "", + displayParts: typeof hintText === "string" ? void 0 : [{ text: ": " }, ...hintText], + position, + kind: "Type" /* Type */, + whitespaceBefore: true + }); + } + function addEnumMemberValueHints(text, position) { + result.push({ + text: `= ${text}`, + position, + kind: "Enum" /* Enum */, + whitespaceBefore: true + }); + } + function visitEnumMember(member) { + if (member.initializer) { + return; + } + const enumValue = checker.getConstantValue(member); + if (enumValue !== void 0) { + addEnumMemberValueHints(enumValue.toString(), member.end); + } + } + function isModuleReferenceType(type) { + return type.symbol && type.symbol.flags & 1536 /* Module */; + } + function visitVariableLikeDeclaration(decl) { + if (decl.initializer === void 0 && !(isPropertyDeclaration(decl) && !(checker.getTypeAtLocation(decl).flags & 1 /* Any */)) || isBindingPattern(decl.name) || isVariableDeclaration(decl) && !isHintableDeclaration(decl)) { + return; + } + const effectiveTypeAnnotation = getEffectiveTypeAnnotationNode(decl); + if (effectiveTypeAnnotation) { + return; + } + const declarationType = checker.getTypeAtLocation(decl); + if (isModuleReferenceType(declarationType)) { + return; + } + const hintParts = typeToInlayHintParts(declarationType); + if (hintParts) { + const hintText = typeof hintParts === "string" ? hintParts : hintParts.map((part) => part.text).join(""); + const isVariableNameMatchesType = preferences.includeInlayVariableTypeHintsWhenTypeMatchesName === false && equateStringsCaseInsensitive(decl.name.getText(), hintText); + if (isVariableNameMatchesType) { + return; + } + addTypeHints(hintParts, decl.name.end); + } + } + function visitCallOrNewExpression(expr) { + const args = expr.arguments; + if (!args || !args.length) { + return; + } + const signature = checker.getResolvedSignature(expr); + if (signature === void 0) return; + let signatureParamPos = 0; + for (const originalArg of args) { + const arg = skipParentheses(originalArg); + if (shouldShowLiteralParameterNameHintsOnly(preferences) && !isHintableLiteral(arg)) { + signatureParamPos++; + continue; + } + let spreadArgs = 0; + if (isSpreadElement(arg)) { + const spreadType = checker.getTypeAtLocation(arg.expression); + if (checker.isTupleType(spreadType)) { + const { elementFlags, fixedLength } = spreadType.target; + if (fixedLength === 0) { + continue; + } + const firstOptionalIndex = findIndex(elementFlags, (f) => !(f & 1 /* Required */)); + const requiredArgs = firstOptionalIndex < 0 ? fixedLength : firstOptionalIndex; + if (requiredArgs > 0) { + spreadArgs = firstOptionalIndex < 0 ? fixedLength : firstOptionalIndex; + } + } + } + const identifierInfo = checker.getParameterIdentifierInfoAtPosition(signature, signatureParamPos); + signatureParamPos = signatureParamPos + (spreadArgs || 1); + if (identifierInfo) { + const { parameter, parameterName, isRestParameter: isFirstVariadicArgument } = identifierInfo; + const isParameterNameNotSameAsArgument = preferences.includeInlayParameterNameHintsWhenArgumentMatchesName || !identifierOrAccessExpressionPostfixMatchesParameterName(arg, parameterName); + if (!isParameterNameNotSameAsArgument && !isFirstVariadicArgument) { + continue; + } + const name = unescapeLeadingUnderscores(parameterName); + if (leadingCommentsContainsParameterName(arg, name)) { + continue; + } + addParameterHints(name, parameter, originalArg.getStart(), isFirstVariadicArgument); + } + } + } + function identifierOrAccessExpressionPostfixMatchesParameterName(expr, parameterName) { + if (isIdentifier(expr)) { + return expr.text === parameterName; + } + if (isPropertyAccessExpression(expr)) { + return expr.name.text === parameterName; + } + return false; + } + function leadingCommentsContainsParameterName(node, name) { + if (!isIdentifierText(name, getEmitScriptTarget(compilerOptions), getLanguageVariant(file.scriptKind))) { + return false; + } + const ranges = getLeadingCommentRanges(sourceFileText, node.pos); + if (!(ranges == null ? void 0 : ranges.length)) { + return false; + } + const regex = leadingParameterNameCommentRegexFactory(name); + return some(ranges, (range) => regex.test(sourceFileText.substring(range.pos, range.end))); + } + function isHintableLiteral(node) { + switch (node.kind) { + case 225 /* PrefixUnaryExpression */: { + const operand = node.operand; + return isLiteralExpression(operand) || isIdentifier(operand) && isInfinityOrNaNString(operand.escapedText); + } + case 112 /* TrueKeyword */: + case 97 /* FalseKeyword */: + case 106 /* NullKeyword */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 229 /* TemplateExpression */: + return true; + case 80 /* Identifier */: { + const name = node.escapedText; + return isUndefined(name) || isInfinityOrNaNString(name); + } + } + return isLiteralExpression(node); + } + function visitFunctionDeclarationLikeForReturnType(decl) { + if (isArrowFunction(decl)) { + if (!findChildOfKind(decl, 21 /* OpenParenToken */, file)) { + return; + } + } + const effectiveTypeAnnotation = getEffectiveReturnTypeNode(decl); + if (effectiveTypeAnnotation || !decl.body) { + return; + } + const signature = checker.getSignatureFromDeclaration(decl); + if (!signature) { + return; + } + const typePredicate = checker.getTypePredicateOfSignature(signature); + if (typePredicate == null ? void 0 : typePredicate.type) { + const hintParts2 = typePredicateToInlayHintParts(typePredicate); + if (hintParts2) { + addTypeHints(hintParts2, getTypeAnnotationPosition(decl)); + return; + } + } + const returnType = checker.getReturnTypeOfSignature(signature); + if (isModuleReferenceType(returnType)) { + return; + } + const hintParts = typeToInlayHintParts(returnType); + if (hintParts) { + addTypeHints(hintParts, getTypeAnnotationPosition(decl)); + } + } + function getTypeAnnotationPosition(decl) { + const closeParenToken = findChildOfKind(decl, 22 /* CloseParenToken */, file); + if (closeParenToken) { + return closeParenToken.end; + } + return decl.parameters.end; + } + function visitFunctionLikeForParameterType(node) { + const signature = checker.getSignatureFromDeclaration(node); + if (!signature) { + return; + } + let pos = 0; + for (const param of node.parameters) { + if (isHintableDeclaration(param)) { + addParameterTypeHint(param, parameterIsThisKeyword(param) ? signature.thisParameter : signature.parameters[pos]); + } + if (parameterIsThisKeyword(param)) { + continue; + } + pos++; + } + } + function addParameterTypeHint(node, symbol) { + const effectiveTypeAnnotation = getEffectiveTypeAnnotationNode(node); + if (effectiveTypeAnnotation || symbol === void 0) return; + const typeHints = getParameterDeclarationTypeHints(symbol); + if (typeHints === void 0) return; + addTypeHints(typeHints, node.questionToken ? node.questionToken.end : node.name.end); + } + function getParameterDeclarationTypeHints(symbol) { + const valueDeclaration = symbol.valueDeclaration; + if (!valueDeclaration || !isParameter(valueDeclaration)) { + return void 0; + } + const signatureParamType = checker.getTypeOfSymbolAtLocation(symbol, valueDeclaration); + if (isModuleReferenceType(signatureParamType)) { + return void 0; + } + return typeToInlayHintParts(signatureParamType); + } + function printTypeInSingleLine(type) { + const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; + const printer = createPrinterWithRemoveComments(); + return usingSingleLineStringWriter((writer) => { + const typeNode = checker.typeToTypeNode( + type, + /*enclosingDeclaration*/ + void 0, + flags + ); + Debug.assertIsDefined(typeNode, "should always get typenode"); + printer.writeNode( + 4 /* Unspecified */, + typeNode, + /*sourceFile*/ + file, + writer + ); + }); + } + function printTypePredicateInSingleLine(typePredicate) { + const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; + const printer = createPrinterWithRemoveComments(); + return usingSingleLineStringWriter((writer) => { + const typePredicateNode = checker.typePredicateToTypePredicateNode( + typePredicate, + /*enclosingDeclaration*/ + void 0, + flags + ); + Debug.assertIsDefined(typePredicateNode, "should always get typePredicateNode"); + printer.writeNode( + 4 /* Unspecified */, + typePredicateNode, + /*sourceFile*/ + file, + writer + ); + }); + } + function typeToInlayHintParts(type) { + if (!shouldUseInteractiveInlayHints(preferences)) { + return printTypeInSingleLine(type); + } + const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; + const typeNode = checker.typeToTypeNode( + type, + /*enclosingDeclaration*/ + void 0, + flags + ); + Debug.assertIsDefined(typeNode, "should always get typeNode"); + return getInlayHintDisplayParts(typeNode); + } + function typePredicateToInlayHintParts(typePredicate) { + if (!shouldUseInteractiveInlayHints(preferences)) { + return printTypePredicateInSingleLine(typePredicate); + } + const flags = 70221824 /* IgnoreErrors */ | 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; + const typeNode = checker.typePredicateToTypePredicateNode( + typePredicate, + /*enclosingDeclaration*/ + void 0, + flags + ); + Debug.assertIsDefined(typeNode, "should always get typenode"); + return getInlayHintDisplayParts(typeNode); + } + function getInlayHintDisplayParts(node) { + const parts = []; + visitForDisplayParts(node); + return parts; + function visitForDisplayParts(node2) { + var _a, _b; + if (!node2) { + return; + } + const tokenString = tokenToString(node2.kind); + if (tokenString) { + parts.push({ text: tokenString }); + return; + } + if (isLiteralExpression(node2)) { + parts.push({ text: getLiteralText2(node2) }); + return; + } + switch (node2.kind) { + case 80 /* Identifier */: + Debug.assertNode(node2, isIdentifier); + const identifierText = idText(node2); + const name = node2.symbol && node2.symbol.declarations && node2.symbol.declarations.length && getNameOfDeclaration(node2.symbol.declarations[0]); + if (name) { + parts.push(getNodeDisplayPart(identifierText, name)); + } else { + parts.push({ text: identifierText }); + } + break; + case 167 /* QualifiedName */: + Debug.assertNode(node2, isQualifiedName); + visitForDisplayParts(node2.left); + parts.push({ text: "." }); + visitForDisplayParts(node2.right); + break; + case 183 /* TypePredicate */: + Debug.assertNode(node2, isTypePredicateNode); + if (node2.assertsModifier) { + parts.push({ text: "asserts " }); + } + visitForDisplayParts(node2.parameterName); + if (node2.type) { + parts.push({ text: " is " }); + visitForDisplayParts(node2.type); + } + break; + case 184 /* TypeReference */: + Debug.assertNode(node2, isTypeReferenceNode); + visitForDisplayParts(node2.typeName); + if (node2.typeArguments) { + parts.push({ text: "<" }); + visitDisplayPartList(node2.typeArguments, ", "); + parts.push({ text: ">" }); + } + break; + case 169 /* TypeParameter */: + Debug.assertNode(node2, isTypeParameterDeclaration); + if (node2.modifiers) { + visitDisplayPartList(node2.modifiers, " "); + } + visitForDisplayParts(node2.name); + if (node2.constraint) { + parts.push({ text: " extends " }); + visitForDisplayParts(node2.constraint); + } + if (node2.default) { + parts.push({ text: " = " }); + visitForDisplayParts(node2.default); + } + break; + case 170 /* Parameter */: + Debug.assertNode(node2, isParameter); + if (node2.modifiers) { + visitDisplayPartList(node2.modifiers, " "); + } + if (node2.dotDotDotToken) { + parts.push({ text: "..." }); + } + visitForDisplayParts(node2.name); + if (node2.questionToken) { + parts.push({ text: "?" }); + } + if (node2.type) { + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + } + break; + case 186 /* ConstructorType */: + Debug.assertNode(node2, isConstructorTypeNode); + parts.push({ text: "new " }); + visitParametersAndTypeParameters(node2); + parts.push({ text: " => " }); + visitForDisplayParts(node2.type); + break; + case 187 /* TypeQuery */: + Debug.assertNode(node2, isTypeQueryNode); + parts.push({ text: "typeof " }); + visitForDisplayParts(node2.exprName); + if (node2.typeArguments) { + parts.push({ text: "<" }); + visitDisplayPartList(node2.typeArguments, ", "); + parts.push({ text: ">" }); + } + break; + case 188 /* TypeLiteral */: + Debug.assertNode(node2, isTypeLiteralNode); + parts.push({ text: "{" }); + if (node2.members.length) { + parts.push({ text: " " }); + visitDisplayPartList(node2.members, "; "); + parts.push({ text: " " }); + } + parts.push({ text: "}" }); + break; + case 189 /* ArrayType */: + Debug.assertNode(node2, isArrayTypeNode); + visitForDisplayParts(node2.elementType); + parts.push({ text: "[]" }); + break; + case 190 /* TupleType */: + Debug.assertNode(node2, isTupleTypeNode); + parts.push({ text: "[" }); + visitDisplayPartList(node2.elements, ", "); + parts.push({ text: "]" }); + break; + case 203 /* NamedTupleMember */: + Debug.assertNode(node2, isNamedTupleMember); + if (node2.dotDotDotToken) { + parts.push({ text: "..." }); + } + visitForDisplayParts(node2.name); + if (node2.questionToken) { + parts.push({ text: "?" }); + } + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + break; + case 191 /* OptionalType */: + Debug.assertNode(node2, isOptionalTypeNode); + visitForDisplayParts(node2.type); + parts.push({ text: "?" }); + break; + case 192 /* RestType */: + Debug.assertNode(node2, isRestTypeNode); + parts.push({ text: "..." }); + visitForDisplayParts(node2.type); + break; + case 193 /* UnionType */: + Debug.assertNode(node2, isUnionTypeNode); + visitDisplayPartList(node2.types, " | "); + break; + case 194 /* IntersectionType */: + Debug.assertNode(node2, isIntersectionTypeNode); + visitDisplayPartList(node2.types, " & "); + break; + case 195 /* ConditionalType */: + Debug.assertNode(node2, isConditionalTypeNode); + visitForDisplayParts(node2.checkType); + parts.push({ text: " extends " }); + visitForDisplayParts(node2.extendsType); + parts.push({ text: " ? " }); + visitForDisplayParts(node2.trueType); + parts.push({ text: " : " }); + visitForDisplayParts(node2.falseType); + break; + case 196 /* InferType */: + Debug.assertNode(node2, isInferTypeNode); + parts.push({ text: "infer " }); + visitForDisplayParts(node2.typeParameter); + break; + case 197 /* ParenthesizedType */: + Debug.assertNode(node2, isParenthesizedTypeNode); + parts.push({ text: "(" }); + visitForDisplayParts(node2.type); + parts.push({ text: ")" }); + break; + case 199 /* TypeOperator */: + Debug.assertNode(node2, isTypeOperatorNode); + parts.push({ text: `${tokenToString(node2.operator)} ` }); + visitForDisplayParts(node2.type); + break; + case 200 /* IndexedAccessType */: + Debug.assertNode(node2, isIndexedAccessTypeNode); + visitForDisplayParts(node2.objectType); + parts.push({ text: "[" }); + visitForDisplayParts(node2.indexType); + parts.push({ text: "]" }); + break; + case 201 /* MappedType */: + Debug.assertNode(node2, isMappedTypeNode); + parts.push({ text: "{ " }); + if (node2.readonlyToken) { + if (node2.readonlyToken.kind === 40 /* PlusToken */) { + parts.push({ text: "+" }); + } else if (node2.readonlyToken.kind === 41 /* MinusToken */) { + parts.push({ text: "-" }); + } + parts.push({ text: "readonly " }); + } + parts.push({ text: "[" }); + visitForDisplayParts(node2.typeParameter); + if (node2.nameType) { + parts.push({ text: " as " }); + visitForDisplayParts(node2.nameType); + } + parts.push({ text: "]" }); + if (node2.questionToken) { + if (node2.questionToken.kind === 40 /* PlusToken */) { + parts.push({ text: "+" }); + } else if (node2.questionToken.kind === 41 /* MinusToken */) { + parts.push({ text: "-" }); + } + parts.push({ text: "?" }); + } + parts.push({ text: ": " }); + if (node2.type) { + visitForDisplayParts(node2.type); + } + parts.push({ text: "; }" }); + break; + case 202 /* LiteralType */: + Debug.assertNode(node2, isLiteralTypeNode); + visitForDisplayParts(node2.literal); + break; + case 185 /* FunctionType */: + Debug.assertNode(node2, isFunctionTypeNode); + visitParametersAndTypeParameters(node2); + parts.push({ text: " => " }); + visitForDisplayParts(node2.type); + break; + case 206 /* ImportType */: + Debug.assertNode(node2, isImportTypeNode); + if (node2.isTypeOf) { + parts.push({ text: "typeof " }); + } + parts.push({ text: "import(" }); + visitForDisplayParts(node2.argument); + if (node2.assertions) { + parts.push({ text: ", { assert: " }); + visitDisplayPartList(node2.assertions.assertClause.elements, ", "); + parts.push({ text: " }" }); + } + parts.push({ text: ")" }); + if (node2.qualifier) { + parts.push({ text: "." }); + visitForDisplayParts(node2.qualifier); + } + if (node2.typeArguments) { + parts.push({ text: "<" }); + visitDisplayPartList(node2.typeArguments, ", "); + parts.push({ text: ">" }); + } + break; + case 172 /* PropertySignature */: + Debug.assertNode(node2, isPropertySignature); + if ((_a = node2.modifiers) == null ? void 0 : _a.length) { + visitDisplayPartList(node2.modifiers, " "); + parts.push({ text: " " }); + } + visitForDisplayParts(node2.name); + if (node2.questionToken) { + parts.push({ text: "?" }); + } + if (node2.type) { + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + } + break; + case 182 /* IndexSignature */: + Debug.assertNode(node2, isIndexSignatureDeclaration); + parts.push({ text: "[" }); + visitDisplayPartList(node2.parameters, ", "); + parts.push({ text: "]" }); + if (node2.type) { + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + } + break; + case 174 /* MethodSignature */: + Debug.assertNode(node2, isMethodSignature); + if ((_b = node2.modifiers) == null ? void 0 : _b.length) { + visitDisplayPartList(node2.modifiers, " "); + parts.push({ text: " " }); + } + visitForDisplayParts(node2.name); + if (node2.questionToken) { + parts.push({ text: "?" }); + } + visitParametersAndTypeParameters(node2); + if (node2.type) { + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + } + break; + case 180 /* CallSignature */: + Debug.assertNode(node2, isCallSignatureDeclaration); + visitParametersAndTypeParameters(node2); + if (node2.type) { + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + } + break; + case 181 /* ConstructSignature */: + Debug.assertNode(node2, isConstructSignatureDeclaration); + parts.push({ text: "new " }); + visitParametersAndTypeParameters(node2); + if (node2.type) { + parts.push({ text: ": " }); + visitForDisplayParts(node2.type); + } + break; + case 208 /* ArrayBindingPattern */: + Debug.assertNode(node2, isArrayBindingPattern); + parts.push({ text: "[" }); + visitDisplayPartList(node2.elements, ", "); + parts.push({ text: "]" }); + break; + case 207 /* ObjectBindingPattern */: + Debug.assertNode(node2, isObjectBindingPattern); + parts.push({ text: "{" }); + if (node2.elements.length) { + parts.push({ text: " " }); + visitDisplayPartList(node2.elements, ", "); + parts.push({ text: " " }); + } + parts.push({ text: "}" }); + break; + case 209 /* BindingElement */: + Debug.assertNode(node2, isBindingElement); + visitForDisplayParts(node2.name); + break; + case 225 /* PrefixUnaryExpression */: + Debug.assertNode(node2, isPrefixUnaryExpression); + parts.push({ text: tokenToString(node2.operator) }); + visitForDisplayParts(node2.operand); + break; + case 204 /* TemplateLiteralType */: + Debug.assertNode(node2, isTemplateLiteralTypeNode); + visitForDisplayParts(node2.head); + node2.templateSpans.forEach(visitForDisplayParts); + break; + case 16 /* TemplateHead */: + Debug.assertNode(node2, isTemplateHead); + parts.push({ text: getLiteralText2(node2) }); + break; + case 205 /* TemplateLiteralTypeSpan */: + Debug.assertNode(node2, isTemplateLiteralTypeSpan); + visitForDisplayParts(node2.type); + visitForDisplayParts(node2.literal); + break; + case 17 /* TemplateMiddle */: + Debug.assertNode(node2, isTemplateMiddle); + parts.push({ text: getLiteralText2(node2) }); + break; + case 18 /* TemplateTail */: + Debug.assertNode(node2, isTemplateTail); + parts.push({ text: getLiteralText2(node2) }); + break; + case 198 /* ThisType */: + Debug.assertNode(node2, isThisTypeNode); + parts.push({ text: "this" }); + break; + case 168 /* ComputedPropertyName */: + Debug.assertNode(node2, isComputedPropertyName); + parts.push({ text: "[" }); + visitForDisplayParts(node2.expression); + parts.push({ text: "]" }); + break; + default: + Debug.failBadSyntaxKind(node2); + } + } + function visitParametersAndTypeParameters(signatureDeclaration) { + if (signatureDeclaration.typeParameters) { + parts.push({ text: "<" }); + visitDisplayPartList(signatureDeclaration.typeParameters, ", "); + parts.push({ text: ">" }); + } + parts.push({ text: "(" }); + visitDisplayPartList(signatureDeclaration.parameters, ", "); + parts.push({ text: ")" }); + } + function visitDisplayPartList(nodes, separator) { + nodes.forEach((node2, index) => { + if (index > 0) { + parts.push({ text: separator }); + } + visitForDisplayParts(node2); + }); + } + function getLiteralText2(node2) { + switch (node2.kind) { + case 11 /* StringLiteral */: + return quotePreference === 0 /* Single */ ? `'${escapeString(node2.text, 39 /* singleQuote */)}'` : `"${escapeString(node2.text, 34 /* doubleQuote */)}"`; + case 16 /* TemplateHead */: + case 17 /* TemplateMiddle */: + case 18 /* TemplateTail */: { + const rawText = node2.rawText ?? escapeTemplateSubstitution(escapeString(node2.text, 96 /* backtick */)); + switch (node2.kind) { + case 16 /* TemplateHead */: + return "`" + rawText + "${"; + case 17 /* TemplateMiddle */: + return "}" + rawText + "${"; + case 18 /* TemplateTail */: + return "}" + rawText + "`"; + } + } + } + return node2.text; + } + } + function isUndefined(name) { + return name === "undefined"; + } + function isHintableDeclaration(node) { + if ((isPartOfParameterDeclaration(node) || isVariableDeclaration(node) && isVarConst(node)) && node.initializer) { + const initializer = skipParentheses(node.initializer); + return !(isHintableLiteral(initializer) || isNewExpression(initializer) || isObjectLiteralExpression(initializer) || isAssertionExpression(initializer)); + } + return true; + } + function getNodeDisplayPart(text, node) { + const sourceFile = node.getSourceFile(); + return { + text, + span: createTextSpanFromNode(node, sourceFile), + file: sourceFile.fileName + }; + } +} + +// src/services/_namespaces/ts.JsDoc.ts +var ts_JsDoc_exports = {}; +__export(ts_JsDoc_exports, { + getDocCommentTemplateAtPosition: () => getDocCommentTemplateAtPosition, + getJSDocParameterNameCompletionDetails: () => getJSDocParameterNameCompletionDetails, + getJSDocParameterNameCompletions: () => getJSDocParameterNameCompletions, + getJSDocTagCompletionDetails: () => getJSDocTagCompletionDetails, + getJSDocTagCompletions: () => getJSDocTagCompletions, + getJSDocTagNameCompletionDetails: () => getJSDocTagNameCompletionDetails, + getJSDocTagNameCompletions: () => getJSDocTagNameCompletions, + getJsDocCommentsFromDeclarations: () => getJsDocCommentsFromDeclarations, + getJsDocTagsFromDeclarations: () => getJsDocTagsFromDeclarations +}); + +// src/services/jsDoc.ts +var jsDocTagNames = [ + "abstract", + "access", + "alias", + "argument", + "async", + "augments", + "author", + "borrows", + "callback", + "class", + "classdesc", + "constant", + "constructor", + "constructs", + "copyright", + "default", + "deprecated", + "description", + "emits", + "enum", + "event", + "example", + "exports", + "extends", + "external", + "field", + "file", + "fileoverview", + "fires", + "function", + "generator", + "global", + "hideconstructor", + "host", + "ignore", + "implements", + "import", + "inheritdoc", + "inner", + "instance", + "interface", + "kind", + "lends", + "license", + "link", + "linkcode", + "linkplain", + "listens", + "member", + "memberof", + "method", + "mixes", + "module", + "name", + "namespace", + "overload", + "override", + "package", + "param", + "private", + "prop", + "property", + "protected", + "public", + "readonly", + "requires", + "returns", + "satisfies", + "see", + "since", + "static", + "summary", + "template", + "this", + "throws", + "todo", + "tutorial", + "type", + "typedef", + "var", + "variation", + "version", + "virtual", + "yields" +]; +var jsDocTagNameCompletionEntries; +var jsDocTagCompletionEntries; +function getJsDocCommentsFromDeclarations(declarations, checker) { + const parts = []; + forEachUnique(declarations, (declaration) => { + for (const jsdoc of getCommentHavingNodes(declaration)) { + const inheritDoc = isJSDoc(jsdoc) && jsdoc.tags && find(jsdoc.tags, (t) => t.kind === 328 /* JSDocTag */ && (t.tagName.escapedText === "inheritDoc" || t.tagName.escapedText === "inheritdoc")); + if (jsdoc.comment === void 0 && !inheritDoc || isJSDoc(jsdoc) && declaration.kind !== 347 /* JSDocTypedefTag */ && declaration.kind !== 339 /* JSDocCallbackTag */ && jsdoc.tags && jsdoc.tags.some((t) => t.kind === 347 /* JSDocTypedefTag */ || t.kind === 339 /* JSDocCallbackTag */) && !jsdoc.tags.some((t) => t.kind === 342 /* JSDocParameterTag */ || t.kind === 343 /* JSDocReturnTag */)) { + continue; + } + let newparts = jsdoc.comment ? getDisplayPartsFromComment(jsdoc.comment, checker) : []; + if (inheritDoc && inheritDoc.comment) { + newparts = newparts.concat(getDisplayPartsFromComment(inheritDoc.comment, checker)); + } + if (!contains(parts, newparts, isIdenticalListOfDisplayParts)) { + parts.push(newparts); + } + } + }); + return flatten(intersperse(parts, [lineBreakPart()])); +} +function isIdenticalListOfDisplayParts(parts1, parts2) { + return arrayIsEqualTo(parts1, parts2, (p1, p2) => p1.kind === p2.kind && p1.text === p2.text); +} +function getCommentHavingNodes(declaration) { + switch (declaration.kind) { + case 342 /* JSDocParameterTag */: + case 349 /* JSDocPropertyTag */: + return [declaration]; + case 339 /* JSDocCallbackTag */: + case 347 /* JSDocTypedefTag */: + return [declaration, declaration.parent]; + case 324 /* JSDocSignature */: + if (isJSDocOverloadTag(declaration.parent)) { + return [declaration.parent.parent]; + } + // falls through + default: + return getJSDocCommentsAndTags(declaration); + } +} +function getJsDocTagsFromDeclarations(declarations, checker) { + const infos = []; + forEachUnique(declarations, (declaration) => { + const tags = getJSDocTags(declaration); + if (tags.some((t) => t.kind === 347 /* JSDocTypedefTag */ || t.kind === 339 /* JSDocCallbackTag */) && !tags.some((t) => t.kind === 342 /* JSDocParameterTag */ || t.kind === 343 /* JSDocReturnTag */)) { + return; + } + for (const tag of tags) { + infos.push({ name: tag.tagName.text, text: getCommentDisplayParts(tag, checker) }); + infos.push(...getJSDocPropertyTagsInfo(tryGetJSDocPropertyTags(tag), checker)); + } + }); + return infos; +} +function getJSDocPropertyTagsInfo(nodes, checker) { + return flatMap(nodes, (propTag) => concatenate([{ name: propTag.tagName.text, text: getCommentDisplayParts(propTag, checker) }], getJSDocPropertyTagsInfo(tryGetJSDocPropertyTags(propTag), checker))); +} +function tryGetJSDocPropertyTags(node) { + return isJSDocPropertyLikeTag(node) && node.isNameFirst && node.typeExpression && isJSDocTypeLiteral(node.typeExpression.type) ? node.typeExpression.type.jsDocPropertyTags : void 0; +} +function getDisplayPartsFromComment(comment, checker) { + if (typeof comment === "string") { + return [textPart(comment)]; + } + return flatMap( + comment, + (node) => node.kind === 322 /* JSDocText */ ? [textPart(node.text)] : buildLinkParts(node, checker) + ); +} +function getCommentDisplayParts(tag, checker) { + const { comment, kind } = tag; + const namePart = getTagNameDisplayPart(kind); + switch (kind) { + case 350 /* JSDocThrowsTag */: + const typeExpression = tag.typeExpression; + return typeExpression ? withNode(typeExpression) : comment === void 0 ? void 0 : getDisplayPartsFromComment(comment, checker); + case 330 /* JSDocImplementsTag */: + return withNode(tag.class); + case 329 /* JSDocAugmentsTag */: + return withNode(tag.class); + case 346 /* JSDocTemplateTag */: + const templateTag = tag; + const displayParts = []; + if (templateTag.constraint) { + displayParts.push(textPart(templateTag.constraint.getText())); + } + if (length(templateTag.typeParameters)) { + if (length(displayParts)) { + displayParts.push(spacePart()); + } + const lastTypeParameter = templateTag.typeParameters[templateTag.typeParameters.length - 1]; + forEach(templateTag.typeParameters, (tp) => { + displayParts.push(namePart(tp.getText())); + if (lastTypeParameter !== tp) { + displayParts.push(...[punctuationPart(28 /* CommaToken */), spacePart()]); + } + }); + } + if (comment) { + displayParts.push(...[spacePart(), ...getDisplayPartsFromComment(comment, checker)]); + } + return displayParts; + case 345 /* JSDocTypeTag */: + case 351 /* JSDocSatisfiesTag */: + return withNode(tag.typeExpression); + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + case 349 /* JSDocPropertyTag */: + case 342 /* JSDocParameterTag */: + case 348 /* JSDocSeeTag */: + const { name } = tag; + return name ? withNode(name) : comment === void 0 ? void 0 : getDisplayPartsFromComment(comment, checker); + default: + return comment === void 0 ? void 0 : getDisplayPartsFromComment(comment, checker); + } + function withNode(node) { + return addComment(node.getText()); + } + function addComment(s) { + if (comment) { + if (s.match(/^https?$/)) { + return [textPart(s), ...getDisplayPartsFromComment(comment, checker)]; + } else { + return [namePart(s), spacePart(), ...getDisplayPartsFromComment(comment, checker)]; + } + } else { + return [textPart(s)]; + } + } +} +function getTagNameDisplayPart(kind) { + switch (kind) { + case 342 /* JSDocParameterTag */: + return parameterNamePart; + case 349 /* JSDocPropertyTag */: + return propertyNamePart; + case 346 /* JSDocTemplateTag */: + return typeParameterNamePart; + case 347 /* JSDocTypedefTag */: + case 339 /* JSDocCallbackTag */: + return typeAliasNamePart; + default: + return textPart; + } +} +function getJSDocTagNameCompletions() { + return jsDocTagNameCompletionEntries || (jsDocTagNameCompletionEntries = map(jsDocTagNames, (tagName) => { + return { + name: tagName, + kind: "keyword" /* keyword */, + kindModifiers: "", + sortText: ts_Completions_exports.SortText.LocationPriority + }; + })); +} +var getJSDocTagNameCompletionDetails = getJSDocTagCompletionDetails; +function getJSDocTagCompletions() { + return jsDocTagCompletionEntries || (jsDocTagCompletionEntries = map(jsDocTagNames, (tagName) => { + return { + name: `@${tagName}`, + kind: "keyword" /* keyword */, + kindModifiers: "", + sortText: ts_Completions_exports.SortText.LocationPriority + }; + })); +} +function getJSDocTagCompletionDetails(name) { + return { + name, + kind: "" /* unknown */, + // TODO: should have its own kind? + kindModifiers: "", + displayParts: [textPart(name)], + documentation: emptyArray, + tags: void 0, + codeActions: void 0 + }; +} +function getJSDocParameterNameCompletions(tag) { + if (!isIdentifier(tag.name)) { + return emptyArray; + } + const nameThusFar = tag.name.text; + const jsdoc = tag.parent; + const fn = jsdoc.parent; + if (!isFunctionLike(fn)) return []; + return mapDefined(fn.parameters, (param) => { + if (!isIdentifier(param.name)) return void 0; + const name = param.name.text; + if (jsdoc.tags.some((t) => t !== tag && isJSDocParameterTag(t) && isIdentifier(t.name) && t.name.escapedText === name) || nameThusFar !== void 0 && !startsWith(name, nameThusFar)) { + return void 0; + } + return { name, kind: "parameter" /* parameterElement */, kindModifiers: "", sortText: ts_Completions_exports.SortText.LocationPriority }; + }); +} +function getJSDocParameterNameCompletionDetails(name) { + return { + name, + kind: "parameter" /* parameterElement */, + kindModifiers: "", + displayParts: [textPart(name)], + documentation: emptyArray, + tags: void 0, + codeActions: void 0 + }; +} +function getDocCommentTemplateAtPosition(newLine, sourceFile, position, options) { + const tokenAtPos = getTokenAtPosition(sourceFile, position); + const existingDocComment = findAncestor(tokenAtPos, isJSDoc); + if (existingDocComment && (existingDocComment.comment !== void 0 || length(existingDocComment.tags))) { + return void 0; + } + const tokenStart = tokenAtPos.getStart(sourceFile); + if (!existingDocComment && tokenStart < position) { + return void 0; + } + const commentOwnerInfo = getCommentOwnerInfo(tokenAtPos, options); + if (!commentOwnerInfo) { + return void 0; + } + const { commentOwner, parameters, hasReturn: hasReturn2 } = commentOwnerInfo; + const commentOwnerJsDoc = hasJSDocNodes(commentOwner) && commentOwner.jsDoc ? commentOwner.jsDoc : void 0; + const lastJsDoc = lastOrUndefined(commentOwnerJsDoc); + if (commentOwner.getStart(sourceFile) < position || lastJsDoc && existingDocComment && lastJsDoc !== existingDocComment) { + return void 0; + } + const indentationStr = getIndentationStringAtPosition(sourceFile, position); + const isJavaScriptFile = hasJSFileExtension(sourceFile.fileName); + const tags = (parameters ? parameterDocComments(parameters || [], isJavaScriptFile, indentationStr, newLine) : "") + (hasReturn2 ? returnsDocComment(indentationStr, newLine) : ""); + const openComment = "/**"; + const closeComment = " */"; + const hasTag = length(getJSDocTags(commentOwner)) > 0; + if (tags && !hasTag) { + const preamble = openComment + newLine + indentationStr + " * "; + const endLine = tokenStart === position ? newLine + indentationStr : ""; + const result = preamble + newLine + tags + indentationStr + closeComment + endLine; + return { newText: result, caretOffset: preamble.length }; + } + return { newText: openComment + closeComment, caretOffset: 3 }; +} +function getIndentationStringAtPosition(sourceFile, position) { + const { text } = sourceFile; + const lineStart = getLineStartPositionForPosition(position, sourceFile); + let pos = lineStart; + for (; pos <= position && isWhiteSpaceSingleLine(text.charCodeAt(pos)); pos++) ; + return text.slice(lineStart, pos); +} +function parameterDocComments(parameters, isJavaScriptFile, indentationStr, newLine) { + return parameters.map(({ name, dotDotDotToken }, i) => { + const paramName = name.kind === 80 /* Identifier */ ? name.text : "param" + i; + const type = isJavaScriptFile ? dotDotDotToken ? "{...any} " : "{any} " : ""; + return `${indentationStr} * @param ${type}${paramName}${newLine}`; + }).join(""); +} +function returnsDocComment(indentationStr, newLine) { + return `${indentationStr} * @returns${newLine}`; +} +function getCommentOwnerInfo(tokenAtPos, options) { + return forEachAncestor(tokenAtPos, (n) => getCommentOwnerInfoWorker(n, options)); +} +function getCommentOwnerInfoWorker(commentOwner, options) { + switch (commentOwner.kind) { + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 174 /* MethodSignature */: + case 220 /* ArrowFunction */: + const host = commentOwner; + return { commentOwner, parameters: host.parameters, hasReturn: hasReturn(host, options) }; + case 304 /* PropertyAssignment */: + return getCommentOwnerInfoWorker(commentOwner.initializer, options); + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 307 /* EnumMember */: + case 266 /* TypeAliasDeclaration */: + return { commentOwner }; + case 172 /* PropertySignature */: { + const host2 = commentOwner; + return host2.type && isFunctionTypeNode(host2.type) ? { commentOwner, parameters: host2.type.parameters, hasReturn: hasReturn(host2.type, options) } : { commentOwner }; + } + case 244 /* VariableStatement */: { + const varStatement = commentOwner; + const varDeclarations = varStatement.declarationList.declarations; + const host2 = varDeclarations.length === 1 && varDeclarations[0].initializer ? getRightHandSideOfAssignment(varDeclarations[0].initializer) : void 0; + return host2 ? { commentOwner, parameters: host2.parameters, hasReturn: hasReturn(host2, options) } : { commentOwner }; + } + case 308 /* SourceFile */: + return "quit"; + case 268 /* ModuleDeclaration */: + return commentOwner.parent.kind === 268 /* ModuleDeclaration */ ? void 0 : { commentOwner }; + case 245 /* ExpressionStatement */: + return getCommentOwnerInfoWorker(commentOwner.expression, options); + case 227 /* BinaryExpression */: { + const be = commentOwner; + if (getAssignmentDeclarationKind(be) === 0 /* None */) { + return "quit"; + } + return isFunctionLike(be.right) ? { commentOwner, parameters: be.right.parameters, hasReturn: hasReturn(be.right, options) } : { commentOwner }; + } + case 173 /* PropertyDeclaration */: + const init = commentOwner.initializer; + if (init && (isFunctionExpression(init) || isArrowFunction(init))) { + return { commentOwner, parameters: init.parameters, hasReturn: hasReturn(init, options) }; + } + } +} +function hasReturn(node, options) { + return !!(options == null ? void 0 : options.generateReturnInDocTemplate) && (isFunctionTypeNode(node) || isArrowFunction(node) && isExpression(node.body) || isFunctionLikeDeclaration(node) && node.body && isBlock(node.body) && !!forEachReturnStatement(node.body, (n) => n)); +} +function getRightHandSideOfAssignment(rightHandSide) { + while (rightHandSide.kind === 218 /* ParenthesizedExpression */) { + rightHandSide = rightHandSide.expression; + } + switch (rightHandSide.kind) { + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + return rightHandSide; + case 232 /* ClassExpression */: + return find(rightHandSide.members, isConstructorDeclaration); + } +} + +// src/services/_namespaces/ts.MapCode.ts +var ts_MapCode_exports = {}; +__export(ts_MapCode_exports, { + mapCode: () => mapCode +}); + +// src/services/mapCode.ts +function mapCode(sourceFile, contents, focusLocations, host, formatContext, preferences) { + return ts_textChanges_exports.ChangeTracker.with( + { host, formatContext, preferences }, + (changeTracker) => { + const parsed = contents.map((c) => parse(sourceFile, c)); + const flattenedLocations = focusLocations && flatten(focusLocations); + for (const nodes of parsed) { + placeNodeGroup( + sourceFile, + changeTracker, + nodes, + flattenedLocations + ); + } + } + ); +} +function parse(sourceFile, content) { + const nodeKinds = [ + { + parse: () => createSourceFile( + "__mapcode_content_nodes.ts", + content, + sourceFile.languageVersion, + /*setParentNodes*/ + true, + sourceFile.scriptKind + ), + body: (sf) => sf.statements + }, + { + parse: () => createSourceFile( + "__mapcode_class_content_nodes.ts", + `class __class { +${content} +}`, + sourceFile.languageVersion, + /*setParentNodes*/ + true, + sourceFile.scriptKind + ), + body: (cw) => cw.statements[0].members + } + ]; + const parsedNodes = []; + for (const { parse: parse2, body: body2 } of nodeKinds) { + const sourceFile2 = parse2(); + const bod = body2(sourceFile2); + if (bod.length && sourceFile2.parseDiagnostics.length === 0) { + return bod; + } else if (bod.length) { + parsedNodes.push({ sourceFile: sourceFile2, body: bod }); + } + } + parsedNodes.sort( + (a, b) => a.sourceFile.parseDiagnostics.length - b.sourceFile.parseDiagnostics.length + ); + const { body } = parsedNodes[0]; + return body; +} +function placeNodeGroup(originalFile, changeTracker, changes, focusLocations) { + if (isClassElement(changes[0]) || isTypeElement(changes[0])) { + placeClassNodeGroup( + originalFile, + changeTracker, + changes, + focusLocations + ); + } else { + placeStatements( + originalFile, + changeTracker, + changes, + focusLocations + ); + } +} +function placeClassNodeGroup(originalFile, changeTracker, changes, focusLocations) { + let classOrInterface; + if (!focusLocations || !focusLocations.length) { + classOrInterface = find(originalFile.statements, or(isClassLike, isInterfaceDeclaration)); + } else { + classOrInterface = forEach(focusLocations, (location) => findAncestor( + getTokenAtPosition(originalFile, location.start), + or(isClassLike, isInterfaceDeclaration) + )); + } + if (!classOrInterface) { + return; + } + const firstMatch = classOrInterface.members.find((member) => changes.some((change) => matchNode(change, member))); + if (firstMatch) { + const lastMatch = findLast( + classOrInterface.members, + (member) => changes.some((change) => matchNode(change, member)) + ); + forEach(changes, wipeNode); + changeTracker.replaceNodeRangeWithNodes( + originalFile, + firstMatch, + lastMatch, + changes + ); + return; + } + forEach(changes, wipeNode); + changeTracker.insertNodesAfter( + originalFile, + classOrInterface.members[classOrInterface.members.length - 1], + changes + ); +} +function placeStatements(originalFile, changeTracker, changes, focusLocations) { + if (!(focusLocations == null ? void 0 : focusLocations.length)) { + changeTracker.insertNodesAtEndOfFile( + originalFile, + changes, + /*blankLineBetween*/ + false + ); + return; + } + for (const location of focusLocations) { + const scope = findAncestor( + getTokenAtPosition(originalFile, location.start), + (block) => or(isBlock, isSourceFile)(block) && some(block.statements, (origStmt) => changes.some((newStmt) => matchNode(newStmt, origStmt))) + ); + if (scope) { + const start = scope.statements.find((stmt) => changes.some((node) => matchNode(node, stmt))); + if (start) { + const end = findLast(scope.statements, (stmt) => changes.some((node) => matchNode(node, stmt))); + forEach(changes, wipeNode); + changeTracker.replaceNodeRangeWithNodes( + originalFile, + start, + end, + changes + ); + return; + } + } + } + let scopeStatements = originalFile.statements; + for (const location of focusLocations) { + const block = findAncestor( + getTokenAtPosition(originalFile, location.start), + isBlock + ); + if (block) { + scopeStatements = block.statements; + break; + } + } + forEach(changes, wipeNode); + changeTracker.insertNodesAfter( + originalFile, + scopeStatements[scopeStatements.length - 1], + changes + ); +} +function matchNode(a, b) { + var _a, _b, _c, _d, _e, _f; + if (a.kind !== b.kind) { + return false; + } + if (a.kind === 177 /* Constructor */) { + return a.kind === b.kind; + } + if (isNamedDeclaration(a) && isNamedDeclaration(b)) { + return a.name.getText() === b.name.getText(); + } + if (isIfStatement(a) && isIfStatement(b)) { + return a.expression.getText() === b.expression.getText(); + } + if (isWhileStatement(a) && isWhileStatement(b)) { + return a.expression.getText() === b.expression.getText(); + } + if (isForStatement(a) && isForStatement(b)) { + return ((_a = a.initializer) == null ? void 0 : _a.getText()) === ((_b = b.initializer) == null ? void 0 : _b.getText()) && ((_c = a.incrementor) == null ? void 0 : _c.getText()) === ((_d = b.incrementor) == null ? void 0 : _d.getText()) && ((_e = a.condition) == null ? void 0 : _e.getText()) === ((_f = b.condition) == null ? void 0 : _f.getText()); + } + if (isForInOrOfStatement(a) && isForInOrOfStatement(b)) { + return a.expression.getText() === b.expression.getText() && a.initializer.getText() === b.initializer.getText(); + } + if (isLabeledStatement(a) && isLabeledStatement(b)) { + return a.label.getText() === b.label.getText(); + } + if (a.getText() === b.getText()) { + return true; + } + return false; +} +function wipeNode(node) { + resetNodePositions(node); + node.parent = void 0; +} +function resetNodePositions(node) { + node.pos = -1; + node.end = -1; + node.forEachChild(resetNodePositions); +} + +// src/services/_namespaces/ts.OrganizeImports.ts +var ts_OrganizeImports_exports = {}; +__export(ts_OrganizeImports_exports, { + compareImportsOrRequireStatements: () => compareImportsOrRequireStatements, + compareModuleSpecifiers: () => compareModuleSpecifiers2, + getImportDeclarationInsertionIndex: () => getImportDeclarationInsertionIndex, + getImportSpecifierInsertionIndex: () => getImportSpecifierInsertionIndex, + getNamedImportSpecifierComparerWithDetection: () => getNamedImportSpecifierComparerWithDetection, + getOrganizeImportsStringComparerWithDetection: () => getOrganizeImportsStringComparerWithDetection, + organizeImports: () => organizeImports, + testCoalesceExports: () => testCoalesceExports, + testCoalesceImports: () => testCoalesceImports +}); + +// src/services/organizeImports.ts +function organizeImports(sourceFile, formatContext, host, program, preferences, mode) { + const changeTracker = ts_textChanges_exports.ChangeTracker.fromContext({ host, formatContext, preferences }); + const shouldSort = mode === "SortAndCombine" /* SortAndCombine */ || mode === "All" /* All */; + const shouldCombine = shouldSort; + const shouldRemove = mode === "RemoveUnused" /* RemoveUnused */ || mode === "All" /* All */; + const topLevelImportDecls = sourceFile.statements.filter(isImportDeclaration); + const topLevelImportGroupDecls = groupByNewlineContiguous(sourceFile, topLevelImportDecls); + const { comparersToTest, typeOrdersToTest } = getDetectionLists(preferences); + const defaultComparer = comparersToTest[0]; + const comparer = { + moduleSpecifierComparer: typeof preferences.organizeImportsIgnoreCase === "boolean" ? defaultComparer : void 0, + namedImportComparer: typeof preferences.organizeImportsIgnoreCase === "boolean" ? defaultComparer : void 0, + typeOrder: preferences.organizeImportsTypeOrder + }; + if (typeof preferences.organizeImportsIgnoreCase !== "boolean") { + ({ comparer: comparer.moduleSpecifierComparer } = detectModuleSpecifierCaseBySort(topLevelImportGroupDecls, comparersToTest)); + } + if (!comparer.typeOrder || typeof preferences.organizeImportsIgnoreCase !== "boolean") { + const namedImportSort = detectNamedImportOrganizationBySort(topLevelImportDecls, comparersToTest, typeOrdersToTest); + if (namedImportSort) { + const { namedImportComparer, typeOrder } = namedImportSort; + comparer.namedImportComparer = comparer.namedImportComparer ?? namedImportComparer; + comparer.typeOrder = comparer.typeOrder ?? typeOrder; + } + } + topLevelImportGroupDecls.forEach((importGroupDecl) => organizeImportsWorker(importGroupDecl, comparer)); + if (mode !== "RemoveUnused" /* RemoveUnused */) { + getTopLevelExportGroups(sourceFile).forEach((exportGroupDecl) => organizeExportsWorker(exportGroupDecl, comparer.namedImportComparer)); + } + for (const ambientModule of sourceFile.statements.filter(isAmbientModule)) { + if (!ambientModule.body) continue; + const ambientModuleImportGroupDecls = groupByNewlineContiguous(sourceFile, ambientModule.body.statements.filter(isImportDeclaration)); + ambientModuleImportGroupDecls.forEach((importGroupDecl) => organizeImportsWorker(importGroupDecl, comparer)); + if (mode !== "RemoveUnused" /* RemoveUnused */) { + const ambientModuleExportDecls = ambientModule.body.statements.filter(isExportDeclaration); + organizeExportsWorker(ambientModuleExportDecls, comparer.namedImportComparer); + } + } + return changeTracker.getChanges(); + function organizeDeclsWorker(oldImportDecls, coalesce) { + if (length(oldImportDecls) === 0) { + return; + } + setEmitFlags(oldImportDecls[0], 1024 /* NoLeadingComments */); + const oldImportGroups = shouldCombine ? group(oldImportDecls, (importDecl) => getExternalModuleName2(importDecl.moduleSpecifier)) : [oldImportDecls]; + const sortedImportGroups = shouldSort ? toSorted(oldImportGroups, (group1, group2) => compareModuleSpecifiersWorker(group1[0].moduleSpecifier, group2[0].moduleSpecifier, comparer.moduleSpecifierComparer ?? defaultComparer)) : oldImportGroups; + const newImportDecls = flatMap(sortedImportGroups, (importGroup) => getExternalModuleName2(importGroup[0].moduleSpecifier) || importGroup[0].moduleSpecifier === void 0 ? coalesce(importGroup) : importGroup); + if (newImportDecls.length === 0) { + changeTracker.deleteNodes( + sourceFile, + oldImportDecls, + { + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude, + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include + }, + /*hasTrailingComment*/ + true + ); + } else { + const replaceOptions = { + leadingTriviaOption: ts_textChanges_exports.LeadingTriviaOption.Exclude, + // Leave header comment in place + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include, + suffix: getNewLineOrDefaultFromHost(host, formatContext.options) + }; + changeTracker.replaceNodeWithNodes(sourceFile, oldImportDecls[0], newImportDecls, replaceOptions); + const hasTrailingComment = changeTracker.nodeHasTrailingComment(sourceFile, oldImportDecls[0], replaceOptions); + changeTracker.deleteNodes(sourceFile, oldImportDecls.slice(1), { + trailingTriviaOption: ts_textChanges_exports.TrailingTriviaOption.Include + }, hasTrailingComment); + } + } + function organizeImportsWorker(oldImportDecls, comparer2) { + const detectedModuleCaseComparer = comparer2.moduleSpecifierComparer ?? defaultComparer; + const detectedNamedImportCaseComparer = comparer2.namedImportComparer ?? defaultComparer; + const detectedTypeOrder = comparer2.typeOrder ?? "last"; + const specifierComparer = getNamedImportSpecifierComparer({ organizeImportsTypeOrder: detectedTypeOrder }, detectedNamedImportCaseComparer); + const processImportsOfSameModuleSpecifier = (importGroup) => { + if (shouldRemove) importGroup = removeUnusedImports(importGroup, sourceFile, program); + if (shouldCombine) importGroup = coalesceImportsWorker(importGroup, detectedModuleCaseComparer, specifierComparer, sourceFile); + if (shouldSort) importGroup = toSorted(importGroup, (s1, s2) => compareImportsOrRequireStatements(s1, s2, detectedModuleCaseComparer)); + return importGroup; + }; + organizeDeclsWorker(oldImportDecls, processImportsOfSameModuleSpecifier); + } + function organizeExportsWorker(oldExportDecls, specifierCaseComparer) { + const useComparer = getNamedImportSpecifierComparer(preferences, specifierCaseComparer); + organizeDeclsWorker(oldExportDecls, (group2) => coalesceExportsWorker(group2, useComparer)); + } +} +function getDetectionLists(preferences) { + return { + comparersToTest: typeof preferences.organizeImportsIgnoreCase === "boolean" ? [getOrganizeImportsStringComparer(preferences, preferences.organizeImportsIgnoreCase)] : [getOrganizeImportsStringComparer( + preferences, + /*ignoreCase*/ + true + ), getOrganizeImportsStringComparer( + preferences, + /*ignoreCase*/ + false + )], + typeOrdersToTest: preferences.organizeImportsTypeOrder ? [preferences.organizeImportsTypeOrder] : ["last", "inline", "first"] + }; +} +function groupByNewlineContiguous(sourceFile, decls) { + const scanner2 = createScanner( + sourceFile.languageVersion, + /*skipTrivia*/ + false, + sourceFile.languageVariant + ); + const group2 = []; + let groupIndex = 0; + for (const decl of decls) { + if (group2[groupIndex] && isNewGroup(sourceFile, decl, scanner2)) { + groupIndex++; + } + if (!group2[groupIndex]) { + group2[groupIndex] = []; + } + group2[groupIndex].push(decl); + } + return group2; +} +function isNewGroup(sourceFile, decl, scanner2) { + const startPos = decl.getFullStart(); + const endPos = decl.getStart(); + scanner2.setText(sourceFile.text, startPos, endPos - startPos); + let numberOfNewLines = 0; + while (scanner2.getTokenStart() < endPos) { + const tokenKind = scanner2.scan(); + if (tokenKind === 4 /* NewLineTrivia */) { + numberOfNewLines++; + if (numberOfNewLines >= 2) { + return true; + } + } + } + return false; +} +function getTopLevelExportGroups(sourceFile) { + const topLevelExportGroups = []; + const statements = sourceFile.statements; + const len = length(statements); + let i = 0; + let groupIndex = 0; + while (i < len) { + if (isExportDeclaration(statements[i])) { + if (topLevelExportGroups[groupIndex] === void 0) { + topLevelExportGroups[groupIndex] = []; + } + const exportDecl = statements[i]; + if (exportDecl.moduleSpecifier) { + topLevelExportGroups[groupIndex].push(exportDecl); + i++; + } else { + while (i < len && isExportDeclaration(statements[i])) { + topLevelExportGroups[groupIndex].push(statements[i++]); + } + groupIndex++; + } + } else { + i++; + } + } + return flatMap(topLevelExportGroups, (exportGroupDecls) => groupByNewlineContiguous(sourceFile, exportGroupDecls)); +} +function removeUnusedImports(oldImports, sourceFile, program) { + const typeChecker = program.getTypeChecker(); + const compilerOptions = program.getCompilerOptions(); + const jsxNamespace = typeChecker.getJsxNamespace(sourceFile); + const jsxFragmentFactory = typeChecker.getJsxFragmentFactory(sourceFile); + const jsxElementsPresent = !!(sourceFile.transformFlags & 2 /* ContainsJsx */); + const usedImports = []; + for (const importDecl of oldImports) { + const { importClause, moduleSpecifier } = importDecl; + if (!importClause) { + usedImports.push(importDecl); + continue; + } + let { name, namedBindings } = importClause; + if (name && !isDeclarationUsed(name)) { + name = void 0; + } + if (namedBindings) { + if (isNamespaceImport(namedBindings)) { + if (!isDeclarationUsed(namedBindings.name)) { + namedBindings = void 0; + } + } else { + const newElements = namedBindings.elements.filter((e) => isDeclarationUsed(e.name)); + if (newElements.length < namedBindings.elements.length) { + namedBindings = newElements.length ? factory.updateNamedImports(namedBindings, newElements) : void 0; + } + } + } + if (name || namedBindings) { + usedImports.push(updateImportDeclarationAndClause(importDecl, name, namedBindings)); + } else if (hasModuleDeclarationMatchingSpecifier(sourceFile, moduleSpecifier)) { + if (sourceFile.isDeclarationFile) { + usedImports.push(factory.createImportDeclaration( + importDecl.modifiers, + /*importClause*/ + void 0, + moduleSpecifier, + /*attributes*/ + void 0 + )); + } else { + usedImports.push(importDecl); + } + } + } + return usedImports; + function isDeclarationUsed(identifier) { + return jsxElementsPresent && (identifier.text === jsxNamespace || jsxFragmentFactory && identifier.text === jsxFragmentFactory) && jsxModeNeedsExplicitImport(compilerOptions.jsx) || ts_FindAllReferences_exports.Core.isSymbolReferencedInFile(identifier, typeChecker, sourceFile); + } +} +function getExternalModuleName2(specifier) { + return specifier !== void 0 && isStringLiteralLike(specifier) ? specifier.text : void 0; +} +function getCategorizedImports(importGroup) { + let importWithoutClause; + const typeOnlyImports = { defaultImports: [], namespaceImports: [], namedImports: [] }; + const regularImports = { defaultImports: [], namespaceImports: [], namedImports: [] }; + for (const importDeclaration of importGroup) { + if (importDeclaration.importClause === void 0) { + importWithoutClause = importWithoutClause || importDeclaration; + continue; + } + const group2 = importDeclaration.importClause.isTypeOnly ? typeOnlyImports : regularImports; + const { name, namedBindings } = importDeclaration.importClause; + if (name) { + group2.defaultImports.push(importDeclaration); + } + if (namedBindings) { + if (isNamespaceImport(namedBindings)) { + group2.namespaceImports.push(importDeclaration); + } else { + group2.namedImports.push(importDeclaration); + } + } + } + return { + importWithoutClause, + typeOnlyImports, + regularImports + }; +} +function coalesceImportsWorker(importGroup, comparer, specifierComparer, sourceFile) { + if (importGroup.length === 0) { + return importGroup; + } + const importGroupsByAttributes = groupBy(importGroup, (decl) => { + if (decl.attributes) { + let attrs = decl.attributes.token + " "; + for (const x of toSorted(decl.attributes.elements, (x2, y) => compareStringsCaseSensitive(x2.name.text, y.name.text))) { + attrs += x.name.text + ":"; + attrs += isStringLiteralLike(x.value) ? `"${x.value.text}"` : x.value.getText() + " "; + } + return attrs; + } + return ""; + }); + const coalescedImports = []; + for (const attribute in importGroupsByAttributes) { + const importGroupSameAttrs = importGroupsByAttributes[attribute]; + const { importWithoutClause, typeOnlyImports, regularImports } = getCategorizedImports(importGroupSameAttrs); + if (importWithoutClause) { + coalescedImports.push(importWithoutClause); + } + for (const group2 of [regularImports, typeOnlyImports]) { + const isTypeOnly = group2 === typeOnlyImports; + const { defaultImports, namespaceImports, namedImports } = group2; + if (!isTypeOnly && defaultImports.length === 1 && namespaceImports.length === 1 && namedImports.length === 0) { + const defaultImport = defaultImports[0]; + coalescedImports.push( + updateImportDeclarationAndClause(defaultImport, defaultImport.importClause.name, namespaceImports[0].importClause.namedBindings) + ); + continue; + } + const sortedNamespaceImports = toSorted(namespaceImports, (i1, i2) => comparer(i1.importClause.namedBindings.name.text, i2.importClause.namedBindings.name.text)); + for (const namespaceImport of sortedNamespaceImports) { + coalescedImports.push( + updateImportDeclarationAndClause( + namespaceImport, + /*name*/ + void 0, + namespaceImport.importClause.namedBindings + ) + ); + } + const firstDefaultImport = firstOrUndefined(defaultImports); + const firstNamedImport = firstOrUndefined(namedImports); + const importDecl = firstDefaultImport ?? firstNamedImport; + if (!importDecl) { + continue; + } + let newDefaultImport; + const newImportSpecifiers = []; + if (defaultImports.length === 1) { + newDefaultImport = defaultImports[0].importClause.name; + } else { + for (const defaultImport of defaultImports) { + newImportSpecifiers.push( + factory.createImportSpecifier( + /*isTypeOnly*/ + false, + factory.createIdentifier("default"), + defaultImport.importClause.name + ) + ); + } + } + newImportSpecifiers.push(...getNewImportSpecifiers(namedImports)); + const sortedImportSpecifiers = factory.createNodeArray( + toSorted(newImportSpecifiers, specifierComparer), + firstNamedImport == null ? void 0 : firstNamedImport.importClause.namedBindings.elements.hasTrailingComma + ); + const newNamedImports = sortedImportSpecifiers.length === 0 ? newDefaultImport ? void 0 : factory.createNamedImports(emptyArray) : firstNamedImport ? factory.updateNamedImports(firstNamedImport.importClause.namedBindings, sortedImportSpecifiers) : factory.createNamedImports(sortedImportSpecifiers); + if (sourceFile && newNamedImports && (firstNamedImport == null ? void 0 : firstNamedImport.importClause.namedBindings) && !rangeIsOnSingleLine(firstNamedImport.importClause.namedBindings, sourceFile)) { + setEmitFlags(newNamedImports, 2 /* MultiLine */); + } + if (isTypeOnly && newDefaultImport && newNamedImports) { + coalescedImports.push( + updateImportDeclarationAndClause( + importDecl, + newDefaultImport, + /*namedBindings*/ + void 0 + ) + ); + coalescedImports.push( + updateImportDeclarationAndClause( + firstNamedImport ?? importDecl, + /*name*/ + void 0, + newNamedImports + ) + ); + } else { + coalescedImports.push( + updateImportDeclarationAndClause(importDecl, newDefaultImport, newNamedImports) + ); + } + } + } + return coalescedImports; +} +function coalesceExportsWorker(exportGroup, specifierComparer) { + if (exportGroup.length === 0) { + return exportGroup; + } + const { exportWithoutClause, namedExports, typeOnlyExports } = getCategorizedExports(exportGroup); + const coalescedExports = []; + if (exportWithoutClause) { + coalescedExports.push(exportWithoutClause); + } + for (const exportGroup2 of [namedExports, typeOnlyExports]) { + if (exportGroup2.length === 0) { + continue; + } + const newExportSpecifiers = []; + newExportSpecifiers.push(...flatMap(exportGroup2, (i) => i.exportClause && isNamedExports(i.exportClause) ? i.exportClause.elements : emptyArray)); + const sortedExportSpecifiers = toSorted(newExportSpecifiers, specifierComparer); + const exportDecl = exportGroup2[0]; + coalescedExports.push( + factory.updateExportDeclaration( + exportDecl, + exportDecl.modifiers, + exportDecl.isTypeOnly, + exportDecl.exportClause && (isNamedExports(exportDecl.exportClause) ? factory.updateNamedExports(exportDecl.exportClause, sortedExportSpecifiers) : factory.updateNamespaceExport(exportDecl.exportClause, exportDecl.exportClause.name)), + exportDecl.moduleSpecifier, + exportDecl.attributes + ) + ); + } + return coalescedExports; + function getCategorizedExports(exportGroup2) { + let exportWithoutClause2; + const namedExports2 = []; + const typeOnlyExports2 = []; + for (const exportDeclaration of exportGroup2) { + if (exportDeclaration.exportClause === void 0) { + exportWithoutClause2 = exportWithoutClause2 || exportDeclaration; + } else if (exportDeclaration.isTypeOnly) { + typeOnlyExports2.push(exportDeclaration); + } else { + namedExports2.push(exportDeclaration); + } + } + return { + exportWithoutClause: exportWithoutClause2, + namedExports: namedExports2, + typeOnlyExports: typeOnlyExports2 + }; + } +} +function updateImportDeclarationAndClause(importDeclaration, name, namedBindings) { + return factory.updateImportDeclaration( + importDeclaration, + importDeclaration.modifiers, + factory.updateImportClause(importDeclaration.importClause, importDeclaration.importClause.phaseModifier, name, namedBindings), + // TODO: GH#18217 + importDeclaration.moduleSpecifier, + importDeclaration.attributes + ); +} +function compareImportOrExportSpecifiers(s1, s2, comparer, preferences) { + switch (preferences == null ? void 0 : preferences.organizeImportsTypeOrder) { + case "first": + return compareBooleans(s2.isTypeOnly, s1.isTypeOnly) || comparer(s1.name.text, s2.name.text); + case "inline": + return comparer(s1.name.text, s2.name.text); + default: + return compareBooleans(s1.isTypeOnly, s2.isTypeOnly) || comparer(s1.name.text, s2.name.text); + } +} +function compareModuleSpecifiersWorker(m1, m2, comparer) { + const name1 = m1 === void 0 ? void 0 : getExternalModuleName2(m1); + const name2 = m2 === void 0 ? void 0 : getExternalModuleName2(m2); + return compareBooleans(name1 === void 0, name2 === void 0) || compareBooleans(isExternalModuleNameRelative(name1), isExternalModuleNameRelative(name2)) || comparer(name1, name2); +} +function getModuleNamesFromDecls(decls) { + return decls.map((s) => getExternalModuleName2(getModuleSpecifierExpression(s)) || ""); +} +function getModuleSpecifierExpression(declaration) { + var _a; + switch (declaration.kind) { + case 272 /* ImportEqualsDeclaration */: + return (_a = tryCast(declaration.moduleReference, isExternalModuleReference)) == null ? void 0 : _a.expression; + case 273 /* ImportDeclaration */: + return declaration.moduleSpecifier; + case 244 /* VariableStatement */: + return declaration.declarationList.declarations[0].initializer.arguments[0]; + } +} +function hasModuleDeclarationMatchingSpecifier(sourceFile, moduleSpecifier) { + const moduleSpecifierText = isStringLiteral(moduleSpecifier) && moduleSpecifier.text; + return isString(moduleSpecifierText) && some(sourceFile.moduleAugmentations, (moduleName) => isStringLiteral(moduleName) && moduleName.text === moduleSpecifierText); +} +function getNewImportSpecifiers(namedImports) { + return flatMap(namedImports, (namedImport) => map(tryGetNamedBindingElements(namedImport), (importSpecifier) => importSpecifier.name && importSpecifier.propertyName && moduleExportNameTextEscaped(importSpecifier.name) === moduleExportNameTextEscaped(importSpecifier.propertyName) ? factory.updateImportSpecifier( + importSpecifier, + importSpecifier.isTypeOnly, + /*propertyName*/ + void 0, + importSpecifier.name + ) : importSpecifier)); +} +function tryGetNamedBindingElements(namedImport) { + var _a; + return ((_a = namedImport.importClause) == null ? void 0 : _a.namedBindings) && isNamedImports(namedImport.importClause.namedBindings) ? namedImport.importClause.namedBindings.elements : void 0; +} +function detectModuleSpecifierCaseBySort(importDeclsByGroup, comparersToTest) { + const moduleSpecifiersByGroup = []; + importDeclsByGroup.forEach((importGroup) => { + moduleSpecifiersByGroup.push(getModuleNamesFromDecls(importGroup)); + }); + return detectCaseSensitivityBySort(moduleSpecifiersByGroup, comparersToTest); +} +function detectNamedImportOrganizationBySort(originalGroups, comparersToTest, typesToTest) { + let bothNamedImports = false; + const importDeclsWithNamed = originalGroups.filter((i) => { + var _a, _b; + const namedImports = (_b = tryCast((_a = i.importClause) == null ? void 0 : _a.namedBindings, isNamedImports)) == null ? void 0 : _b.elements; + if (!(namedImports == null ? void 0 : namedImports.length)) return false; + if (!bothNamedImports && namedImports.some((n) => n.isTypeOnly) && namedImports.some((n) => !n.isTypeOnly)) { + bothNamedImports = true; + } + return true; + }); + if (importDeclsWithNamed.length === 0) return; + const namedImportsByDecl = importDeclsWithNamed.map((importDecl) => { + var _a, _b; + return (_b = tryCast((_a = importDecl.importClause) == null ? void 0 : _a.namedBindings, isNamedImports)) == null ? void 0 : _b.elements; + }).filter((elements) => elements !== void 0); + if (!bothNamedImports || typesToTest.length === 0) { + const sortState = detectCaseSensitivityBySort(namedImportsByDecl.map((i) => i.map((n) => n.name.text)), comparersToTest); + return { + namedImportComparer: sortState.comparer, + typeOrder: typesToTest.length === 1 ? typesToTest[0] : void 0, + isSorted: sortState.isSorted + }; + } + const bestDiff = { first: Infinity, last: Infinity, inline: Infinity }; + const bestComparer = { first: comparersToTest[0], last: comparersToTest[0], inline: comparersToTest[0] }; + for (const curComparer of comparersToTest) { + const currDiff = { first: 0, last: 0, inline: 0 }; + for (const importDecl of namedImportsByDecl) { + for (const typeOrder of typesToTest) { + currDiff[typeOrder] = (currDiff[typeOrder] ?? 0) + measureSortedness(importDecl, (n1, n2) => compareImportOrExportSpecifiers(n1, n2, curComparer, { organizeImportsTypeOrder: typeOrder })); + } + } + for (const key of typesToTest) { + const typeOrder = key; + if (currDiff[typeOrder] < bestDiff[typeOrder]) { + bestDiff[typeOrder] = currDiff[typeOrder]; + bestComparer[typeOrder] = curComparer; + } + } + } + outer: for (const bestKey of typesToTest) { + const bestTypeOrder = bestKey; + for (const testKey of typesToTest) { + const testTypeOrder = testKey; + if (bestDiff[testTypeOrder] < bestDiff[bestTypeOrder]) continue outer; + } + return { namedImportComparer: bestComparer[bestTypeOrder], typeOrder: bestTypeOrder, isSorted: bestDiff[bestTypeOrder] === 0 }; + } + return { namedImportComparer: bestComparer.last, typeOrder: "last", isSorted: bestDiff.last === 0 }; +} +function measureSortedness(arr, comparer) { + let i = 0; + for (let j = 0; j < arr.length - 1; j++) { + if (comparer(arr[j], arr[j + 1]) > 0) { + i++; + } + } + return i; +} +function detectCaseSensitivityBySort(originalGroups, comparersToTest) { + let bestComparer; + let bestDiff = Infinity; + for (const curComparer of comparersToTest) { + let diffOfCurrentComparer = 0; + for (const listToSort of originalGroups) { + if (listToSort.length <= 1) continue; + const diff = measureSortedness(listToSort, curComparer); + diffOfCurrentComparer += diff; + } + if (diffOfCurrentComparer < bestDiff) { + bestDiff = diffOfCurrentComparer; + bestComparer = curComparer; + } + } + return { + comparer: bestComparer ?? comparersToTest[0], + isSorted: bestDiff === 0 + }; +} +function compareImportKind(s1, s2) { + return compareValues(getImportKindOrder(s1), getImportKindOrder(s2)); +} +function getImportKindOrder(s1) { + var _a; + switch (s1.kind) { + case 273 /* ImportDeclaration */: + if (!s1.importClause) return 0; + if (s1.importClause.isTypeOnly) return 1; + if (((_a = s1.importClause.namedBindings) == null ? void 0 : _a.kind) === 275 /* NamespaceImport */) return 2; + if (s1.importClause.name) return 3; + return 4; + case 272 /* ImportEqualsDeclaration */: + return 5; + case 244 /* VariableStatement */: + return 6; + } +} +function getOrganizeImportsOrdinalStringComparer(ignoreCase) { + return ignoreCase ? compareStringsCaseInsensitiveEslintCompatible : compareStringsCaseSensitive; +} +function getOrganizeImportsUnicodeStringComparer(ignoreCase, preferences) { + const resolvedLocale = getOrganizeImportsLocale(preferences); + const caseFirst = preferences.organizeImportsCaseFirst ?? false; + const numeric = preferences.organizeImportsNumericCollation ?? false; + const accents = preferences.organizeImportsAccentCollation ?? true; + const sensitivity = ignoreCase ? accents ? "accent" : "base" : accents ? "variant" : "case"; + const collator = new Intl.Collator(resolvedLocale, { + usage: "sort", + caseFirst: caseFirst || "false", + sensitivity, + numeric + }); + return collator.compare; +} +function getOrganizeImportsLocale(preferences) { + let locale = preferences.organizeImportsLocale; + if (locale === "auto") locale = getUILocale(); + if (locale === void 0) locale = "en"; + const supportedLocales = Intl.Collator.supportedLocalesOf(locale); + const resolvedLocale = supportedLocales.length ? supportedLocales[0] : "en"; + return resolvedLocale; +} +function getOrganizeImportsStringComparer(preferences, ignoreCase) { + const collation = preferences.organizeImportsCollation ?? "ordinal"; + return collation === "unicode" ? getOrganizeImportsUnicodeStringComparer(ignoreCase, preferences) : getOrganizeImportsOrdinalStringComparer(ignoreCase); +} +function getOrganizeImportsStringComparerWithDetection(originalImportDecls, preferences) { + return detectModuleSpecifierCaseBySort([originalImportDecls], getDetectionLists(preferences).comparersToTest); +} +function getNamedImportSpecifierComparer(preferences, comparer) { + const stringComparer = comparer ?? getOrganizeImportsOrdinalStringComparer(!!preferences.organizeImportsIgnoreCase); + return (s1, s2) => compareImportOrExportSpecifiers(s1, s2, stringComparer, preferences); +} +function getNamedImportSpecifierComparerWithDetection(importDecl, preferences, sourceFile) { + const { comparersToTest, typeOrdersToTest } = getDetectionLists(preferences); + const detectFromDecl = detectNamedImportOrganizationBySort([importDecl], comparersToTest, typeOrdersToTest); + let specifierComparer = getNamedImportSpecifierComparer(preferences, comparersToTest[0]); + let isSorted; + if (typeof preferences.organizeImportsIgnoreCase !== "boolean" || !preferences.organizeImportsTypeOrder) { + if (detectFromDecl) { + const { namedImportComparer, typeOrder, isSorted: isDetectedSorted } = detectFromDecl; + isSorted = isDetectedSorted; + specifierComparer = getNamedImportSpecifierComparer({ organizeImportsTypeOrder: typeOrder }, namedImportComparer); + } else if (sourceFile) { + const detectFromFile = detectNamedImportOrganizationBySort(sourceFile.statements.filter(isImportDeclaration), comparersToTest, typeOrdersToTest); + if (detectFromFile) { + const { namedImportComparer, typeOrder, isSorted: isDetectedSorted } = detectFromFile; + isSorted = isDetectedSorted; + specifierComparer = getNamedImportSpecifierComparer({ organizeImportsTypeOrder: typeOrder }, namedImportComparer); + } + } + } + return { specifierComparer, isSorted }; +} +function getImportDeclarationInsertionIndex(sortedImports, newImport, comparer) { + const index = binarySearch(sortedImports, newImport, identity, (a, b) => compareImportsOrRequireStatements(a, b, comparer)); + return index < 0 ? ~index : index; +} +function getImportSpecifierInsertionIndex(sortedImports, newImport, comparer) { + const index = binarySearch(sortedImports, newImport, identity, comparer); + return index < 0 ? ~index : index; +} +function compareImportsOrRequireStatements(s1, s2, comparer) { + return compareModuleSpecifiersWorker(getModuleSpecifierExpression(s1), getModuleSpecifierExpression(s2), comparer) || compareImportKind(s1, s2); +} +function testCoalesceImports(importGroup, ignoreCase, sourceFile, preferences) { + const comparer = getOrganizeImportsOrdinalStringComparer(ignoreCase); + const specifierComparer = getNamedImportSpecifierComparer({ organizeImportsTypeOrder: preferences == null ? void 0 : preferences.organizeImportsTypeOrder }, comparer); + return coalesceImportsWorker(importGroup, comparer, specifierComparer, sourceFile); +} +function testCoalesceExports(exportGroup, ignoreCase, preferences) { + const comparer = (s1, s2) => compareImportOrExportSpecifiers(s1, s2, getOrganizeImportsOrdinalStringComparer(ignoreCase), { organizeImportsTypeOrder: (preferences == null ? void 0 : preferences.organizeImportsTypeOrder) ?? "last" }); + return coalesceExportsWorker(exportGroup, comparer); +} +function compareModuleSpecifiers2(m1, m2, ignoreCase) { + const comparer = getOrganizeImportsOrdinalStringComparer(!!ignoreCase); + return compareModuleSpecifiersWorker(m1, m2, comparer); +} + +// src/services/_namespaces/ts.OutliningElementsCollector.ts +var ts_OutliningElementsCollector_exports = {}; +__export(ts_OutliningElementsCollector_exports, { + collectElements: () => collectElements +}); + +// src/services/outliningElementsCollector.ts +function collectElements(sourceFile, cancellationToken) { + const res = []; + addNodeOutliningSpans(sourceFile, cancellationToken, res); + addRegionOutliningSpans(sourceFile, res); + res.sort((span1, span2) => span1.textSpan.start - span2.textSpan.start); + return res; +} +function addNodeOutliningSpans(sourceFile, cancellationToken, out) { + let depthRemaining = 40; + let current = 0; + const statements = sourceFile.statements; + const n = statements.length; + while (current < n) { + while (current < n && !isAnyImportSyntax(statements[current])) { + visitNode3(statements[current]); + current++; + } + if (current === n) break; + const firstImport = current; + while (current < n && isAnyImportSyntax(statements[current])) { + visitNode3(statements[current]); + current++; + } + const lastImport = current - 1; + if (lastImport !== firstImport) { + out.push(createOutliningSpanFromBounds(findChildOfKind(statements[firstImport], 102 /* ImportKeyword */, sourceFile).getStart(sourceFile), statements[lastImport].getEnd(), "imports" /* Imports */)); + } + } + visitNode3(sourceFile.endOfFileToken); + function visitNode3(n2) { + var _a; + if (depthRemaining === 0) return; + cancellationToken.throwIfCancellationRequested(); + if (isDeclaration(n2) || isVariableStatement(n2) || isReturnStatement(n2) || isCallOrNewExpression(n2) || n2.kind === 1 /* EndOfFileToken */) { + addOutliningForLeadingCommentsForNode(n2, sourceFile, cancellationToken, out); + } + if (isFunctionLike(n2) && isBinaryExpression(n2.parent) && isPropertyAccessExpression(n2.parent.left)) { + addOutliningForLeadingCommentsForNode(n2.parent.left, sourceFile, cancellationToken, out); + } + if (isBlock(n2) || isModuleBlock(n2)) { + addOutliningForLeadingCommentsForPos(n2.statements.end, sourceFile, cancellationToken, out); + } + if (isClassLike(n2) || isInterfaceDeclaration(n2)) { + addOutliningForLeadingCommentsForPos(n2.members.end, sourceFile, cancellationToken, out); + } + const span = getOutliningSpanForNode(n2, sourceFile); + if (span) out.push(span); + depthRemaining--; + if (isCallExpression(n2)) { + depthRemaining++; + visitNode3(n2.expression); + depthRemaining--; + n2.arguments.forEach(visitNode3); + (_a = n2.typeArguments) == null ? void 0 : _a.forEach(visitNode3); + } else if (isIfStatement(n2) && n2.elseStatement && isIfStatement(n2.elseStatement)) { + visitNode3(n2.expression); + visitNode3(n2.thenStatement); + depthRemaining++; + visitNode3(n2.elseStatement); + depthRemaining--; + } else { + n2.forEachChild(visitNode3); + } + depthRemaining++; + } +} +function addRegionOutliningSpans(sourceFile, out) { + const regions = []; + const lineStarts = sourceFile.getLineStarts(); + for (const currentLineStart of lineStarts) { + const lineEnd = sourceFile.getLineEndOfPosition(currentLineStart); + const lineText = sourceFile.text.substring(currentLineStart, lineEnd); + const result = parseRegionDelimiter(lineText); + if (!result || isInComment(sourceFile, currentLineStart)) { + continue; + } + if (result.isStart) { + const span = createTextSpanFromBounds(sourceFile.text.indexOf("//", currentLineStart), lineEnd); + regions.push(createOutliningSpan( + span, + "region" /* Region */, + span, + /*autoCollapse*/ + false, + result.name || "#region" + )); + } else { + const region = regions.pop(); + if (region) { + region.textSpan.length = lineEnd - region.textSpan.start; + region.hintSpan.length = lineEnd - region.textSpan.start; + out.push(region); + } + } + } +} +var regionDelimiterRegExp = /^#(end)?region(.*)\r?$/; +function parseRegionDelimiter(lineText) { + lineText = lineText.trimStart(); + if (!startsWith(lineText, "//")) { + return null; + } + lineText = lineText.slice(2).trim(); + const result = regionDelimiterRegExp.exec(lineText); + if (result) { + return { isStart: !result[1], name: result[2].trim() }; + } + return void 0; +} +function addOutliningForLeadingCommentsForPos(pos, sourceFile, cancellationToken, out) { + const comments = getLeadingCommentRanges(sourceFile.text, pos); + if (!comments) return; + let firstSingleLineCommentStart = -1; + let lastSingleLineCommentEnd = -1; + let singleLineCommentCount = 0; + const sourceText = sourceFile.getFullText(); + for (const { kind, pos: pos2, end } of comments) { + cancellationToken.throwIfCancellationRequested(); + switch (kind) { + case 2 /* SingleLineCommentTrivia */: + const commentText = sourceText.slice(pos2, end); + if (parseRegionDelimiter(commentText)) { + combineAndAddMultipleSingleLineComments(); + singleLineCommentCount = 0; + break; + } + if (singleLineCommentCount === 0) { + firstSingleLineCommentStart = pos2; + } + lastSingleLineCommentEnd = end; + singleLineCommentCount++; + break; + case 3 /* MultiLineCommentTrivia */: + combineAndAddMultipleSingleLineComments(); + out.push(createOutliningSpanFromBounds(pos2, end, "comment" /* Comment */)); + singleLineCommentCount = 0; + break; + default: + Debug.assertNever(kind); + } + } + combineAndAddMultipleSingleLineComments(); + function combineAndAddMultipleSingleLineComments() { + if (singleLineCommentCount > 1) { + out.push(createOutliningSpanFromBounds(firstSingleLineCommentStart, lastSingleLineCommentEnd, "comment" /* Comment */)); + } + } +} +function addOutliningForLeadingCommentsForNode(n, sourceFile, cancellationToken, out) { + if (isJsxText(n)) return; + addOutliningForLeadingCommentsForPos(n.pos, sourceFile, cancellationToken, out); +} +function createOutliningSpanFromBounds(pos, end, kind) { + return createOutliningSpan(createTextSpanFromBounds(pos, end), kind); +} +function getOutliningSpanForNode(n, sourceFile) { + switch (n.kind) { + case 242 /* Block */: + if (isFunctionLike(n.parent)) { + return functionSpan(n.parent, n, sourceFile); + } + switch (n.parent.kind) { + case 247 /* DoStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 249 /* ForStatement */: + case 246 /* IfStatement */: + case 248 /* WhileStatement */: + case 255 /* WithStatement */: + case 300 /* CatchClause */: + return spanForNode(n.parent); + case 259 /* TryStatement */: + const tryStatement = n.parent; + if (tryStatement.tryBlock === n) { + return spanForNode(n.parent); + } else if (tryStatement.finallyBlock === n) { + const node = findChildOfKind(tryStatement, 98 /* FinallyKeyword */, sourceFile); + if (node) return spanForNode(node); + } + // falls through + default: + return createOutliningSpan(createTextSpanFromNode(n, sourceFile), "code" /* Code */); + } + case 269 /* ModuleBlock */: + return spanForNode(n.parent); + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 270 /* CaseBlock */: + case 188 /* TypeLiteral */: + case 207 /* ObjectBindingPattern */: + return spanForNode(n); + case 190 /* TupleType */: + return spanForNode( + n, + /*autoCollapse*/ + false, + /*useFullStart*/ + !isTupleTypeNode(n.parent), + 23 /* OpenBracketToken */ + ); + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + return spanForNodeArray(n.statements); + case 211 /* ObjectLiteralExpression */: + return spanForObjectOrArrayLiteral(n); + case 210 /* ArrayLiteralExpression */: + return spanForObjectOrArrayLiteral(n, 23 /* OpenBracketToken */); + case 285 /* JsxElement */: + return spanForJSXElement(n); + case 289 /* JsxFragment */: + return spanForJSXFragment(n); + case 286 /* JsxSelfClosingElement */: + case 287 /* JsxOpeningElement */: + return spanForJSXAttributes(n.attributes); + case 229 /* TemplateExpression */: + case 15 /* NoSubstitutionTemplateLiteral */: + return spanForTemplateLiteral(n); + case 208 /* ArrayBindingPattern */: + return spanForNode( + n, + /*autoCollapse*/ + false, + /*useFullStart*/ + !isBindingElement(n.parent), + 23 /* OpenBracketToken */ + ); + case 220 /* ArrowFunction */: + return spanForArrowFunction(n); + case 214 /* CallExpression */: + return spanForCallExpression(n); + case 218 /* ParenthesizedExpression */: + return spanForParenthesizedExpression(n); + case 276 /* NamedImports */: + case 280 /* NamedExports */: + case 301 /* ImportAttributes */: + return spanForImportExportElements(n); + } + function spanForImportExportElements(node) { + if (!node.elements.length) { + return void 0; + } + const openToken = findChildOfKind(node, 19 /* OpenBraceToken */, sourceFile); + const closeToken = findChildOfKind(node, 20 /* CloseBraceToken */, sourceFile); + if (!openToken || !closeToken || positionsAreOnSameLine(openToken.pos, closeToken.pos, sourceFile)) { + return void 0; + } + return spanBetweenTokens( + openToken, + closeToken, + node, + sourceFile, + /*autoCollapse*/ + false, + /*useFullStart*/ + false + ); + } + function spanForCallExpression(node) { + if (!node.arguments.length) { + return void 0; + } + const openToken = findChildOfKind(node, 21 /* OpenParenToken */, sourceFile); + const closeToken = findChildOfKind(node, 22 /* CloseParenToken */, sourceFile); + if (!openToken || !closeToken || positionsAreOnSameLine(openToken.pos, closeToken.pos, sourceFile)) { + return void 0; + } + return spanBetweenTokens( + openToken, + closeToken, + node, + sourceFile, + /*autoCollapse*/ + false, + /*useFullStart*/ + true + ); + } + function spanForArrowFunction(node) { + if (isBlock(node.body) || isParenthesizedExpression(node.body) || positionsAreOnSameLine(node.body.getFullStart(), node.body.getEnd(), sourceFile)) { + return void 0; + } + const textSpan = createTextSpanFromBounds(node.body.getFullStart(), node.body.getEnd()); + return createOutliningSpan(textSpan, "code" /* Code */, createTextSpanFromNode(node)); + } + function spanForJSXElement(node) { + const textSpan = createTextSpanFromBounds(node.openingElement.getStart(sourceFile), node.closingElement.getEnd()); + const tagName = node.openingElement.tagName.getText(sourceFile); + const bannerText = "<" + tagName + ">..."; + return createOutliningSpan( + textSpan, + "code" /* Code */, + textSpan, + /*autoCollapse*/ + false, + bannerText + ); + } + function spanForJSXFragment(node) { + const textSpan = createTextSpanFromBounds(node.openingFragment.getStart(sourceFile), node.closingFragment.getEnd()); + const bannerText = "<>..."; + return createOutliningSpan( + textSpan, + "code" /* Code */, + textSpan, + /*autoCollapse*/ + false, + bannerText + ); + } + function spanForJSXAttributes(node) { + if (node.properties.length === 0) { + return void 0; + } + return createOutliningSpanFromBounds(node.getStart(sourceFile), node.getEnd(), "code" /* Code */); + } + function spanForTemplateLiteral(node) { + if (node.kind === 15 /* NoSubstitutionTemplateLiteral */ && node.text.length === 0) { + return void 0; + } + return createOutliningSpanFromBounds(node.getStart(sourceFile), node.getEnd(), "code" /* Code */); + } + function spanForObjectOrArrayLiteral(node, open = 19 /* OpenBraceToken */) { + return spanForNode( + node, + /*autoCollapse*/ + false, + /*useFullStart*/ + !isArrayLiteralExpression(node.parent) && !isCallExpression(node.parent), + open + ); + } + function spanForNode(hintSpanNode, autoCollapse = false, useFullStart = true, open = 19 /* OpenBraceToken */, close = open === 19 /* OpenBraceToken */ ? 20 /* CloseBraceToken */ : 24 /* CloseBracketToken */) { + const openToken = findChildOfKind(n, open, sourceFile); + const closeToken = findChildOfKind(n, close, sourceFile); + return openToken && closeToken && spanBetweenTokens(openToken, closeToken, hintSpanNode, sourceFile, autoCollapse, useFullStart); + } + function spanForNodeArray(nodeArray) { + return nodeArray.length ? createOutliningSpan(createTextSpanFromRange(nodeArray), "code" /* Code */) : void 0; + } + function spanForParenthesizedExpression(node) { + if (positionsAreOnSameLine(node.getStart(), node.getEnd(), sourceFile)) return void 0; + const textSpan = createTextSpanFromBounds(node.getStart(), node.getEnd()); + return createOutliningSpan(textSpan, "code" /* Code */, createTextSpanFromNode(node)); + } +} +function functionSpan(node, body, sourceFile) { + const openToken = tryGetFunctionOpenToken(node, body, sourceFile); + const closeToken = findChildOfKind(body, 20 /* CloseBraceToken */, sourceFile); + return openToken && closeToken && spanBetweenTokens( + openToken, + closeToken, + node, + sourceFile, + /*autoCollapse*/ + node.kind !== 220 /* ArrowFunction */ + ); +} +function spanBetweenTokens(openToken, closeToken, hintSpanNode, sourceFile, autoCollapse = false, useFullStart = true) { + const textSpan = createTextSpanFromBounds(useFullStart ? openToken.getFullStart() : openToken.getStart(sourceFile), closeToken.getEnd()); + return createOutliningSpan(textSpan, "code" /* Code */, createTextSpanFromNode(hintSpanNode, sourceFile), autoCollapse); +} +function createOutliningSpan(textSpan, kind, hintSpan = textSpan, autoCollapse = false, bannerText = "...") { + return { textSpan, kind, hintSpan, bannerText, autoCollapse }; +} +function tryGetFunctionOpenToken(node, body, sourceFile) { + if (isNodeArrayMultiLine(node.parameters, sourceFile)) { + const openParenToken = findChildOfKind(node, 21 /* OpenParenToken */, sourceFile); + if (openParenToken) { + return openParenToken; + } + } + return findChildOfKind(body, 19 /* OpenBraceToken */, sourceFile); +} + +// src/services/_namespaces/ts.Rename.ts +var ts_Rename_exports = {}; +__export(ts_Rename_exports, { + getRenameInfo: () => getRenameInfo, + nodeIsEligibleForRename: () => nodeIsEligibleForRename +}); + +// src/services/rename.ts +function getRenameInfo(program, sourceFile, position, preferences) { + const node = getAdjustedRenameLocation(getTouchingPropertyName(sourceFile, position)); + if (nodeIsEligibleForRename(node)) { + const renameInfo = getRenameInfoForNode(node, program.getTypeChecker(), sourceFile, program, preferences); + if (renameInfo) { + return renameInfo; + } + } + return getRenameInfoError(Diagnostics.You_cannot_rename_this_element); +} +function getRenameInfoForNode(node, typeChecker, sourceFile, program, preferences) { + const symbol = typeChecker.getSymbolAtLocation(node); + if (!symbol) { + if (isStringLiteralLike(node)) { + const type = getContextualTypeFromParentOrAncestorTypeNode(node, typeChecker); + if (type && (type.flags & 128 /* StringLiteral */ || type.flags & 1048576 /* Union */ && every(type.types, (type2) => !!(type2.flags & 128 /* StringLiteral */)))) { + return getRenameInfoSuccess(node.text, node.text, "string" /* string */, "", node, sourceFile); + } + } else if (isLabelName(node)) { + const name = getTextOfNode(node); + return getRenameInfoSuccess(name, name, "label" /* label */, "" /* none */, node, sourceFile); + } + return void 0; + } + const { declarations } = symbol; + if (!declarations || declarations.length === 0) return; + if (declarations.some((declaration) => isDefinedInLibraryFile(program, declaration))) { + return getRenameInfoError(Diagnostics.You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library); + } + if (isIdentifier(node) && node.escapedText === "default" && symbol.parent && symbol.parent.flags & 1536 /* Module */) { + return void 0; + } + if (isStringLiteralLike(node) && tryGetImportFromModuleSpecifier(node)) { + return preferences.allowRenameOfImportPath ? getRenameInfoForModule(node, sourceFile, symbol) : void 0; + } + const wouldRenameNodeModules = wouldRenameInOtherNodeModules(sourceFile, symbol, typeChecker, preferences); + if (wouldRenameNodeModules) { + return getRenameInfoError(wouldRenameNodeModules); + } + const kind = ts_SymbolDisplay_exports.getSymbolKind(typeChecker, symbol, node); + const specifierName = isImportOrExportSpecifierName(node) || isStringOrNumericLiteralLike(node) && node.parent.kind === 168 /* ComputedPropertyName */ ? stripQuotes(getTextOfIdentifierOrLiteral(node)) : void 0; + const displayName = specifierName || typeChecker.symbolToString(symbol); + const fullDisplayName = specifierName || typeChecker.getFullyQualifiedName(symbol); + return getRenameInfoSuccess(displayName, fullDisplayName, kind, ts_SymbolDisplay_exports.getSymbolModifiers(typeChecker, symbol), node, sourceFile); +} +function isDefinedInLibraryFile(program, declaration) { + const sourceFile = declaration.getSourceFile(); + return program.isSourceFileDefaultLibrary(sourceFile) && fileExtensionIs(sourceFile.fileName, ".d.ts" /* Dts */); +} +function wouldRenameInOtherNodeModules(originalFile, symbol, checker, preferences) { + if (!preferences.providePrefixAndSuffixTextForRename && symbol.flags & 2097152 /* Alias */) { + const importSpecifier = symbol.declarations && find(symbol.declarations, (decl) => isImportSpecifier(decl)); + if (importSpecifier && !importSpecifier.propertyName) { + symbol = checker.getAliasedSymbol(symbol); + } + } + const { declarations } = symbol; + if (!declarations) { + return void 0; + } + const originalPackage = getPackagePathComponents(originalFile.path); + if (originalPackage === void 0) { + if (some(declarations, (declaration) => isInsideNodeModules(declaration.getSourceFile().path))) { + return Diagnostics.You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder; + } else { + return void 0; + } + } + for (const declaration of declarations) { + const declPackage = getPackagePathComponents(declaration.getSourceFile().path); + if (declPackage) { + const length2 = Math.min(originalPackage.length, declPackage.length); + for (let i = 0; i <= length2; i++) { + if (compareStringsCaseSensitive(originalPackage[i], declPackage[i]) !== 0 /* EqualTo */) { + return Diagnostics.You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder; + } + } + } + } + return void 0; +} +function getPackagePathComponents(filePath) { + const components = getPathComponents(filePath); + const nodeModulesIdx = components.lastIndexOf("node_modules"); + if (nodeModulesIdx === -1) { + return void 0; + } + return components.slice(0, nodeModulesIdx + 2); +} +function getRenameInfoForModule(node, sourceFile, moduleSymbol) { + if (!isExternalModuleNameRelative(node.text)) { + return getRenameInfoError(Diagnostics.You_cannot_rename_a_module_via_a_global_import); + } + const moduleSourceFile = moduleSymbol.declarations && find(moduleSymbol.declarations, isSourceFile); + if (!moduleSourceFile) return void 0; + const withoutIndex = endsWith(node.text, "/index") || endsWith(node.text, "/index.js") ? void 0 : tryRemoveSuffix(removeFileExtension(moduleSourceFile.fileName), "/index"); + const fileName = withoutIndex === void 0 ? moduleSourceFile.fileName : withoutIndex; + const kind = withoutIndex === void 0 ? "module" /* moduleElement */ : "directory" /* directory */; + const indexAfterLastSlash = node.text.lastIndexOf("/") + 1; + const triggerSpan = createTextSpan(node.getStart(sourceFile) + 1 + indexAfterLastSlash, node.text.length - indexAfterLastSlash); + return { + canRename: true, + fileToRename: fileName, + kind, + displayName: fileName, + fullDisplayName: node.text, + kindModifiers: "" /* none */, + triggerSpan + }; +} +function getRenameInfoSuccess(displayName, fullDisplayName, kind, kindModifiers, node, sourceFile) { + return { + canRename: true, + fileToRename: void 0, + kind, + displayName, + fullDisplayName, + kindModifiers, + triggerSpan: createTriggerSpanForNode(node, sourceFile) + }; +} +function getRenameInfoError(diagnostic) { + return { canRename: false, localizedErrorMessage: getLocaleSpecificMessage(diagnostic) }; +} +function createTriggerSpanForNode(node, sourceFile) { + let start = node.getStart(sourceFile); + let width = node.getWidth(sourceFile); + if (isStringLiteralLike(node)) { + start += 1; + width -= 2; + } + return createTextSpan(start, width); +} +function nodeIsEligibleForRename(node) { + switch (node.kind) { + case 80 /* Identifier */: + case 81 /* PrivateIdentifier */: + case 11 /* StringLiteral */: + case 15 /* NoSubstitutionTemplateLiteral */: + case 110 /* ThisKeyword */: + return true; + case 9 /* NumericLiteral */: + return isLiteralNameOfPropertyDeclarationOrIndexAccess(node); + default: + return false; + } +} + +// src/services/_namespaces/ts.SignatureHelp.ts +var ts_SignatureHelp_exports = {}; +__export(ts_SignatureHelp_exports, { + getArgumentInfoForCompletions: () => getArgumentInfoForCompletions, + getSignatureHelpItems: () => getSignatureHelpItems +}); + +// src/services/signatureHelp.ts +function getSignatureHelpItems(program, sourceFile, position, triggerReason, cancellationToken) { + const typeChecker = program.getTypeChecker(); + const startingToken = findTokenOnLeftOfPosition(sourceFile, position); + if (!startingToken) { + return void 0; + } + const onlyUseSyntacticOwners = !!triggerReason && triggerReason.kind === "characterTyped"; + if (onlyUseSyntacticOwners && (isInString(sourceFile, position, startingToken) || isInComment(sourceFile, position))) { + return void 0; + } + const isManuallyInvoked = !!triggerReason && triggerReason.kind === "invoked"; + const argumentInfo = getContainingArgumentInfo(startingToken, position, sourceFile, typeChecker, isManuallyInvoked); + if (!argumentInfo) return void 0; + cancellationToken.throwIfCancellationRequested(); + const candidateInfo = getCandidateOrTypeInfo(argumentInfo, typeChecker, sourceFile, startingToken, onlyUseSyntacticOwners); + cancellationToken.throwIfCancellationRequested(); + if (!candidateInfo) { + return isSourceFileJS(sourceFile) ? createJSSignatureHelpItems(argumentInfo, program, cancellationToken) : void 0; + } + return typeChecker.runWithCancellationToken(cancellationToken, (typeChecker2) => candidateInfo.kind === 0 /* Candidate */ ? createSignatureHelpItems(candidateInfo.candidates, candidateInfo.resolvedSignature, argumentInfo, sourceFile, typeChecker2) : createTypeHelpItems(candidateInfo.symbol, argumentInfo, sourceFile, typeChecker2)); +} +function getCandidateOrTypeInfo({ invocation, argumentCount }, checker, sourceFile, startingToken, onlyUseSyntacticOwners) { + switch (invocation.kind) { + case 0 /* Call */: { + if (onlyUseSyntacticOwners && !isSyntacticOwner(startingToken, invocation.node, sourceFile)) { + return void 0; + } + const candidates = []; + const resolvedSignature = checker.getResolvedSignatureForSignatureHelp(invocation.node, candidates, argumentCount); + return candidates.length === 0 ? void 0 : { kind: 0 /* Candidate */, candidates, resolvedSignature }; + } + case 1 /* TypeArgs */: { + const { called } = invocation; + if (onlyUseSyntacticOwners && !containsPrecedingToken(startingToken, sourceFile, isIdentifier(called) ? called.parent : called)) { + return void 0; + } + const candidates = getPossibleGenericSignatures(called, argumentCount, checker); + if (candidates.length !== 0) return { kind: 0 /* Candidate */, candidates, resolvedSignature: first(candidates) }; + const symbol = checker.getSymbolAtLocation(called); + return symbol && { kind: 1 /* Type */, symbol }; + } + case 2 /* Contextual */: + return { kind: 0 /* Candidate */, candidates: [invocation.signature], resolvedSignature: invocation.signature }; + default: + return Debug.assertNever(invocation); + } +} +function isSyntacticOwner(startingToken, node, sourceFile) { + if (!isCallOrNewExpression(node)) return false; + const invocationChildren = node.getChildren(sourceFile); + switch (startingToken.kind) { + case 21 /* OpenParenToken */: + return contains(invocationChildren, startingToken); + case 28 /* CommaToken */: { + const containingList = findContainingList(startingToken); + return !!containingList && contains(invocationChildren, containingList); + } + case 30 /* LessThanToken */: + return containsPrecedingToken(startingToken, sourceFile, node.expression); + default: + return false; + } +} +function createJSSignatureHelpItems(argumentInfo, program, cancellationToken) { + if (argumentInfo.invocation.kind === 2 /* Contextual */) return void 0; + const expression = getExpressionFromInvocation(argumentInfo.invocation); + const name = isPropertyAccessExpression(expression) ? expression.name.text : void 0; + const typeChecker = program.getTypeChecker(); + return name === void 0 ? void 0 : firstDefined(program.getSourceFiles(), (sourceFile) => firstDefined(sourceFile.getNamedDeclarations().get(name), (declaration) => { + const type = declaration.symbol && typeChecker.getTypeOfSymbolAtLocation(declaration.symbol, declaration); + const callSignatures = type && type.getCallSignatures(); + if (callSignatures && callSignatures.length) { + return typeChecker.runWithCancellationToken( + cancellationToken, + (typeChecker2) => createSignatureHelpItems( + callSignatures, + callSignatures[0], + argumentInfo, + sourceFile, + typeChecker2, + /*useFullPrefix*/ + true + ) + ); + } + })); +} +function containsPrecedingToken(startingToken, sourceFile, container) { + const pos = startingToken.getFullStart(); + let currentParent = startingToken.parent; + while (currentParent) { + const precedingToken = findPrecedingToken( + pos, + sourceFile, + currentParent, + /*excludeJsdoc*/ + true + ); + if (precedingToken) { + return rangeContainsRange(container, precedingToken); + } + currentParent = currentParent.parent; + } + return Debug.fail("Could not find preceding token"); +} +function getArgumentInfoForCompletions(node, position, sourceFile, checker) { + const info = getImmediatelyContainingArgumentInfo(node, position, sourceFile, checker); + return !info || info.isTypeParameterList || info.invocation.kind !== 0 /* Call */ ? void 0 : { invocation: info.invocation.node, argumentCount: info.argumentCount, argumentIndex: info.argumentIndex }; +} +function getArgumentOrParameterListInfo(node, position, sourceFile, checker) { + const info = getArgumentOrParameterListAndIndex(node, sourceFile, checker); + if (!info) return void 0; + const { list, argumentIndex } = info; + const argumentCount = getArgumentCount(checker, list); + const argumentsSpan = getApplicableSpanForArguments(list, sourceFile); + return { list, argumentIndex, argumentCount, argumentsSpan }; +} +function getArgumentOrParameterListAndIndex(node, sourceFile, checker) { + if (node.kind === 30 /* LessThanToken */ || node.kind === 21 /* OpenParenToken */) { + return { list: getChildListThatStartsWithOpenerToken(node.parent, node, sourceFile), argumentIndex: 0 }; + } else { + const list = findContainingList(node); + return list && { list, argumentIndex: getArgumentIndex(checker, list, node) }; + } +} +function getImmediatelyContainingArgumentInfo(node, position, sourceFile, checker) { + const { parent: parent2 } = node; + if (isCallOrNewExpression(parent2)) { + const invocation = parent2; + const info = getArgumentOrParameterListInfo(node, position, sourceFile, checker); + if (!info) return void 0; + const { list, argumentIndex, argumentCount, argumentsSpan } = info; + const isTypeParameterList = !!parent2.typeArguments && parent2.typeArguments.pos === list.pos; + return { isTypeParameterList, invocation: { kind: 0 /* Call */, node: invocation }, argumentsSpan, argumentIndex, argumentCount }; + } else if (isNoSubstitutionTemplateLiteral(node) && isTaggedTemplateExpression(parent2)) { + if (isInsideTemplateLiteral(node, position, sourceFile)) { + return getArgumentListInfoForTemplate( + parent2, + /*argumentIndex*/ + 0, + sourceFile + ); + } + return void 0; + } else if (isTemplateHead(node) && parent2.parent.kind === 216 /* TaggedTemplateExpression */) { + const templateExpression = parent2; + const tagExpression = templateExpression.parent; + Debug.assert(templateExpression.kind === 229 /* TemplateExpression */); + const argumentIndex = isInsideTemplateLiteral(node, position, sourceFile) ? 0 : 1; + return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile); + } else if (isTemplateSpan(parent2) && isTaggedTemplateExpression(parent2.parent.parent)) { + const templateSpan = parent2; + const tagExpression = parent2.parent.parent; + if (isTemplateTail(node) && !isInsideTemplateLiteral(node, position, sourceFile)) { + return void 0; + } + const spanIndex = templateSpan.parent.templateSpans.indexOf(templateSpan); + const argumentIndex = getArgumentIndexForTemplatePiece(spanIndex, node, position, sourceFile); + return getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile); + } else if (isJsxOpeningLikeElement(parent2)) { + const attributeSpanStart = parent2.attributes.pos; + const attributeSpanEnd = skipTrivia( + sourceFile.text, + parent2.attributes.end, + /*stopAfterLineBreak*/ + false + ); + return { + isTypeParameterList: false, + invocation: { kind: 0 /* Call */, node: parent2 }, + argumentsSpan: createTextSpan(attributeSpanStart, attributeSpanEnd - attributeSpanStart), + argumentIndex: 0, + argumentCount: 1 + }; + } else { + const typeArgInfo = getPossibleTypeArgumentsInfo(node, sourceFile); + if (typeArgInfo) { + const { called, nTypeArguments } = typeArgInfo; + const invocation = { kind: 1 /* TypeArgs */, called }; + const argumentsSpan = createTextSpanFromBounds(called.getStart(sourceFile), node.end); + return { isTypeParameterList: true, invocation, argumentsSpan, argumentIndex: nTypeArguments, argumentCount: nTypeArguments + 1 }; + } + return void 0; + } +} +function getImmediatelyContainingArgumentOrContextualParameterInfo(node, position, sourceFile, checker) { + return tryGetParameterInfo(node, position, sourceFile, checker) || getImmediatelyContainingArgumentInfo(node, position, sourceFile, checker); +} +function getHighestBinary(b) { + return isBinaryExpression(b.parent) ? getHighestBinary(b.parent) : b; +} +function countBinaryExpressionParameters(b) { + return isBinaryExpression(b.left) ? countBinaryExpressionParameters(b.left) + 1 : 2; +} +function tryGetParameterInfo(startingToken, position, sourceFile, checker) { + const node = getAdjustedNode(startingToken); + if (node === void 0) return void 0; + const info = getContextualSignatureLocationInfo(node, sourceFile, position, checker); + if (info === void 0) return void 0; + const { contextualType, argumentIndex, argumentCount, argumentsSpan } = info; + const nonNullableContextualType = contextualType.getNonNullableType(); + const symbol = nonNullableContextualType.symbol; + if (symbol === void 0) return void 0; + const signature = lastOrUndefined(nonNullableContextualType.getCallSignatures()); + if (signature === void 0) return void 0; + const invocation = { kind: 2 /* Contextual */, signature, node: startingToken, symbol: chooseBetterSymbol(symbol) }; + return { isTypeParameterList: false, invocation, argumentsSpan, argumentIndex, argumentCount }; +} +function getAdjustedNode(node) { + switch (node.kind) { + case 21 /* OpenParenToken */: + case 28 /* CommaToken */: + return node; + default: + return findAncestor(node.parent, (n) => isParameter(n) ? true : isBindingElement(n) || isObjectBindingPattern(n) || isArrayBindingPattern(n) ? false : "quit"); + } +} +function getContextualSignatureLocationInfo(node, sourceFile, position, checker) { + const { parent: parent2 } = node; + switch (parent2.kind) { + case 218 /* ParenthesizedExpression */: + case 175 /* MethodDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + const info = getArgumentOrParameterListInfo(node, position, sourceFile, checker); + if (!info) return void 0; + const { argumentIndex, argumentCount, argumentsSpan } = info; + const contextualType = isMethodDeclaration(parent2) ? checker.getContextualTypeForObjectLiteralElement(parent2) : checker.getContextualType(parent2); + return contextualType && { contextualType, argumentIndex, argumentCount, argumentsSpan }; + case 227 /* BinaryExpression */: { + const highestBinary = getHighestBinary(parent2); + const contextualType2 = checker.getContextualType(highestBinary); + const argumentIndex2 = node.kind === 21 /* OpenParenToken */ ? 0 : countBinaryExpressionParameters(parent2) - 1; + const argumentCount2 = countBinaryExpressionParameters(highestBinary); + return contextualType2 && { contextualType: contextualType2, argumentIndex: argumentIndex2, argumentCount: argumentCount2, argumentsSpan: createTextSpanFromNode(parent2) }; + } + default: + return void 0; + } +} +function chooseBetterSymbol(s) { + return s.name === "__type" /* Type */ ? firstDefined(s.declarations, (d) => { + var _a; + return isFunctionTypeNode(d) ? (_a = tryCast(d.parent, canHaveSymbol)) == null ? void 0 : _a.symbol : void 0; + }) || s : s; +} +function getSpreadElementCount(node, checker) { + const spreadType = checker.getTypeAtLocation(node.expression); + if (checker.isTupleType(spreadType)) { + const { elementFlags, fixedLength } = spreadType.target; + if (fixedLength === 0) { + return 0; + } + const firstOptionalIndex = findIndex(elementFlags, (f) => !(f & 1 /* Required */)); + return firstOptionalIndex < 0 ? fixedLength : firstOptionalIndex; + } + return 0; +} +function getArgumentIndex(checker, argumentsList, node) { + return getArgumentIndexOrCount(checker, argumentsList, node); +} +function getArgumentCount(checker, argumentsList) { + return getArgumentIndexOrCount( + checker, + argumentsList, + /*node*/ + void 0 + ); +} +function getArgumentIndexOrCount(checker, argumentsList, node) { + const args = argumentsList.getChildren(); + let argumentIndex = 0; + let skipComma = false; + for (const child of args) { + if (node && child === node) { + if (!skipComma && child.kind === 28 /* CommaToken */) { + argumentIndex++; + } + return argumentIndex; + } + if (isSpreadElement(child)) { + argumentIndex += getSpreadElementCount(child, checker); + skipComma = true; + continue; + } + if (child.kind !== 28 /* CommaToken */) { + argumentIndex++; + skipComma = true; + continue; + } + if (skipComma) { + skipComma = false; + continue; + } + argumentIndex++; + } + if (node) { + return argumentIndex; + } + return args.length && last(args).kind === 28 /* CommaToken */ ? argumentIndex + 1 : argumentIndex; +} +function getArgumentIndexForTemplatePiece(spanIndex, node, position, sourceFile) { + Debug.assert(position >= node.getStart(), "Assumed 'position' could not occur before node."); + if (isTemplateLiteralToken(node)) { + if (isInsideTemplateLiteral(node, position, sourceFile)) { + return 0; + } + return spanIndex + 2; + } + return spanIndex + 1; +} +function getArgumentListInfoForTemplate(tagExpression, argumentIndex, sourceFile) { + const argumentCount = isNoSubstitutionTemplateLiteral(tagExpression.template) ? 1 : tagExpression.template.templateSpans.length + 1; + if (argumentIndex !== 0) { + Debug.assertLessThan(argumentIndex, argumentCount); + } + return { + isTypeParameterList: false, + invocation: { kind: 0 /* Call */, node: tagExpression }, + argumentsSpan: getApplicableSpanForTaggedTemplate(tagExpression, sourceFile), + argumentIndex, + argumentCount + }; +} +function getApplicableSpanForArguments(argumentsList, sourceFile) { + const applicableSpanStart = argumentsList.getFullStart(); + const applicableSpanEnd = skipTrivia( + sourceFile.text, + argumentsList.getEnd(), + /*stopAfterLineBreak*/ + false + ); + return createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); +} +function getApplicableSpanForTaggedTemplate(taggedTemplate, sourceFile) { + const template = taggedTemplate.template; + const applicableSpanStart = template.getStart(); + let applicableSpanEnd = template.getEnd(); + if (template.kind === 229 /* TemplateExpression */) { + const lastSpan = last(template.templateSpans); + if (lastSpan.literal.getFullWidth() === 0) { + applicableSpanEnd = skipTrivia( + sourceFile.text, + applicableSpanEnd, + /*stopAfterLineBreak*/ + false + ); + } + } + return createTextSpan(applicableSpanStart, applicableSpanEnd - applicableSpanStart); +} +function getContainingArgumentInfo(node, position, sourceFile, checker, isManuallyInvoked) { + for (let n = node; !isSourceFile(n) && (isManuallyInvoked || !isBlock(n)); n = n.parent) { + Debug.assert(rangeContainsRange(n.parent, n), "Not a subspan", () => `Child: ${Debug.formatSyntaxKind(n.kind)}, parent: ${Debug.formatSyntaxKind(n.parent.kind)}`); + const argumentInfo = getImmediatelyContainingArgumentOrContextualParameterInfo(n, position, sourceFile, checker); + if (argumentInfo) { + return argumentInfo; + } + } + return void 0; +} +function getChildListThatStartsWithOpenerToken(parent2, openerToken, sourceFile) { + const children = parent2.getChildren(sourceFile); + const indexOfOpenerToken = children.indexOf(openerToken); + Debug.assert(indexOfOpenerToken >= 0 && children.length > indexOfOpenerToken + 1); + return children[indexOfOpenerToken + 1]; +} +function getExpressionFromInvocation(invocation) { + return invocation.kind === 0 /* Call */ ? getInvokedExpression(invocation.node) : invocation.called; +} +function getEnclosingDeclarationFromInvocation(invocation) { + return invocation.kind === 0 /* Call */ ? invocation.node : invocation.kind === 1 /* TypeArgs */ ? invocation.called : invocation.node; +} +var signatureHelpNodeBuilderFlags = 8192 /* OmitParameterModifiers */ | 70221824 /* IgnoreErrors */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; +function createSignatureHelpItems(candidates, resolvedSignature, { isTypeParameterList, argumentCount, argumentsSpan: applicableSpan, invocation, argumentIndex }, sourceFile, typeChecker, useFullPrefix) { + var _a; + const enclosingDeclaration = getEnclosingDeclarationFromInvocation(invocation); + const callTargetSymbol = invocation.kind === 2 /* Contextual */ ? invocation.symbol : typeChecker.getSymbolAtLocation(getExpressionFromInvocation(invocation)) || useFullPrefix && ((_a = resolvedSignature.declaration) == null ? void 0 : _a.symbol); + const callTargetDisplayParts = callTargetSymbol ? symbolToDisplayParts( + typeChecker, + callTargetSymbol, + useFullPrefix ? sourceFile : void 0, + /*meaning*/ + void 0 + ) : emptyArray; + const items = map(candidates, (candidateSignature) => getSignatureHelpItem(candidateSignature, callTargetDisplayParts, isTypeParameterList, typeChecker, enclosingDeclaration, sourceFile)); + let selectedItemIndex = 0; + let itemsSeen = 0; + for (let i = 0; i < items.length; i++) { + const item = items[i]; + if (candidates[i] === resolvedSignature) { + selectedItemIndex = itemsSeen; + if (item.length > 1) { + let count = 0; + for (const i2 of item) { + if (i2.isVariadic || i2.parameters.length >= argumentCount) { + selectedItemIndex = itemsSeen + count; + break; + } + count++; + } + } + } + itemsSeen += item.length; + } + Debug.assert(selectedItemIndex !== -1); + const help = { items: flatMapToMutable(items, identity), applicableSpan, selectedItemIndex, argumentIndex, argumentCount }; + const selected = help.items[selectedItemIndex]; + if (selected.isVariadic) { + const firstRest = findIndex(selected.parameters, (p) => !!p.isRest); + if (-1 < firstRest && firstRest < selected.parameters.length - 1) { + help.argumentIndex = selected.parameters.length; + } else { + help.argumentIndex = Math.min(help.argumentIndex, selected.parameters.length - 1); + } + } + return help; +} +function createTypeHelpItems(symbol, { argumentCount, argumentsSpan: applicableSpan, invocation, argumentIndex }, sourceFile, checker) { + const typeParameters = checker.getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol); + if (!typeParameters) return void 0; + const items = [getTypeHelpItem(symbol, typeParameters, checker, getEnclosingDeclarationFromInvocation(invocation), sourceFile)]; + return { items, applicableSpan, selectedItemIndex: 0, argumentIndex, argumentCount }; +} +function getTypeHelpItem(symbol, typeParameters, checker, enclosingDeclaration, sourceFile) { + const typeSymbolDisplay = symbolToDisplayParts(checker, symbol); + const printer = createPrinterWithRemoveComments(); + const parameters = typeParameters.map((t) => createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer)); + const documentation = symbol.getDocumentationComment(checker); + const tags = symbol.getJsDocTags(checker); + const prefixDisplayParts = [...typeSymbolDisplay, punctuationPart(30 /* LessThanToken */)]; + return { isVariadic: false, prefixDisplayParts, suffixDisplayParts: [punctuationPart(32 /* GreaterThanToken */)], separatorDisplayParts, parameters, documentation, tags }; +} +var separatorDisplayParts = [punctuationPart(28 /* CommaToken */), spacePart()]; +function getSignatureHelpItem(candidateSignature, callTargetDisplayParts, isTypeParameterList, checker, enclosingDeclaration, sourceFile) { + const infos = (isTypeParameterList ? itemInfoForTypeParameters : itemInfoForParameters)(candidateSignature, checker, enclosingDeclaration, sourceFile); + return map(infos, ({ isVariadic, parameters, prefix, suffix }) => { + const prefixDisplayParts = [...callTargetDisplayParts, ...prefix]; + const suffixDisplayParts = [...suffix, ...returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker)]; + const documentation = candidateSignature.getDocumentationComment(checker); + const tags = candidateSignature.getJsDocTags(); + return { isVariadic, prefixDisplayParts, suffixDisplayParts, separatorDisplayParts, parameters, documentation, tags }; + }); +} +function returnTypeToDisplayParts(candidateSignature, enclosingDeclaration, checker) { + return mapToDisplayParts((writer) => { + writer.writePunctuation(":"); + writer.writeSpace(" "); + const predicate = checker.getTypePredicateOfSignature(candidateSignature); + if (predicate) { + checker.writeTypePredicate( + predicate, + enclosingDeclaration, + /*flags*/ + void 0, + writer + ); + } else { + checker.writeType( + checker.getReturnTypeOfSignature(candidateSignature), + enclosingDeclaration, + /*flags*/ + void 0, + writer + ); + } + }); +} +function itemInfoForTypeParameters(candidateSignature, checker, enclosingDeclaration, sourceFile) { + const typeParameters = (candidateSignature.target || candidateSignature).typeParameters; + const printer = createPrinterWithRemoveComments(); + const parameters = (typeParameters || emptyArray).map((t) => createSignatureHelpParameterForTypeParameter(t, checker, enclosingDeclaration, sourceFile, printer)); + const thisParameter = candidateSignature.thisParameter ? [checker.symbolToParameterDeclaration(candidateSignature.thisParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags)] : []; + return checker.getExpandedParameters(candidateSignature).map((paramList) => { + const params = factory.createNodeArray([...thisParameter, ...map(paramList, (param) => checker.symbolToParameterDeclaration(param, enclosingDeclaration, signatureHelpNodeBuilderFlags))]); + const parameterParts = mapToDisplayParts((writer) => { + printer.writeList(2576 /* CallExpressionArguments */, params, sourceFile, writer); + }); + return { isVariadic: false, parameters, prefix: [punctuationPart(30 /* LessThanToken */)], suffix: [punctuationPart(32 /* GreaterThanToken */), ...parameterParts] }; + }); +} +function itemInfoForParameters(candidateSignature, checker, enclosingDeclaration, sourceFile) { + const printer = createPrinterWithRemoveComments(); + const typeParameterParts = mapToDisplayParts((writer) => { + if (candidateSignature.typeParameters && candidateSignature.typeParameters.length) { + const args = factory.createNodeArray(candidateSignature.typeParameters.map((p) => checker.typeParameterToDeclaration(p, enclosingDeclaration, signatureHelpNodeBuilderFlags))); + printer.writeList(53776 /* TypeParameters */, args, sourceFile, writer); + } + }); + const lists = checker.getExpandedParameters(candidateSignature); + const isVariadic = !checker.hasEffectiveRestParameter(candidateSignature) ? (_) => false : lists.length === 1 ? (_) => true : (pList) => { + var _a; + return !!(pList.length && ((_a = tryCast(pList[pList.length - 1], isTransientSymbol)) == null ? void 0 : _a.links.checkFlags) & 32768 /* RestParameter */); + }; + return lists.map((parameterList) => ({ + isVariadic: isVariadic(parameterList), + parameters: parameterList.map((p) => createSignatureHelpParameterForParameter(p, checker, enclosingDeclaration, sourceFile, printer)), + prefix: [...typeParameterParts, punctuationPart(21 /* OpenParenToken */)], + suffix: [punctuationPart(22 /* CloseParenToken */)] + })); +} +function createSignatureHelpParameterForParameter(parameter, checker, enclosingDeclaration, sourceFile, printer) { + const displayParts = mapToDisplayParts((writer) => { + const param = checker.symbolToParameterDeclaration(parameter, enclosingDeclaration, signatureHelpNodeBuilderFlags); + printer.writeNode(4 /* Unspecified */, param, sourceFile, writer); + }); + const isOptional = checker.isOptionalParameter(parameter.valueDeclaration); + const isRest = isTransientSymbol(parameter) && !!(parameter.links.checkFlags & 32768 /* RestParameter */); + return { name: parameter.name, documentation: parameter.getDocumentationComment(checker), displayParts, isOptional, isRest }; +} +function createSignatureHelpParameterForTypeParameter(typeParameter, checker, enclosingDeclaration, sourceFile, printer) { + const displayParts = mapToDisplayParts((writer) => { + const param = checker.typeParameterToDeclaration(typeParameter, enclosingDeclaration, signatureHelpNodeBuilderFlags); + printer.writeNode(4 /* Unspecified */, param, sourceFile, writer); + }); + return { name: typeParameter.symbol.name, documentation: typeParameter.symbol.getDocumentationComment(checker), displayParts, isOptional: false, isRest: false }; +} + +// src/services/_namespaces/ts.SmartSelectionRange.ts +var ts_SmartSelectionRange_exports = {}; +__export(ts_SmartSelectionRange_exports, { + getSmartSelectionRange: () => getSmartSelectionRange +}); + +// src/services/smartSelection.ts +function getSmartSelectionRange(pos, sourceFile) { + var _a, _b; + let selectionRange = { + textSpan: createTextSpanFromBounds(sourceFile.getFullStart(), sourceFile.getEnd()) + }; + let parentNode = sourceFile; + outer: + while (true) { + const children = getSelectionChildren(parentNode); + if (!children.length) break; + for (let i = 0; i < children.length; i++) { + const prevNode = children[i - 1]; + const node = children[i]; + const nextNode = children[i + 1]; + if (getTokenPosOfNode( + node, + sourceFile, + /*includeJsDoc*/ + true + ) > pos) { + break outer; + } + const comment = singleOrUndefined(getTrailingCommentRanges(sourceFile.text, node.end)); + if (comment && comment.kind === 2 /* SingleLineCommentTrivia */) { + pushSelectionCommentRange(comment.pos, comment.end); + } + if (positionShouldSnapToNode(sourceFile, pos, node)) { + if (isFunctionBody(node) && isFunctionLikeDeclaration(parentNode) && !positionsAreOnSameLine(node.getStart(sourceFile), node.getEnd(), sourceFile)) { + pushSelectionRange(node.getStart(sourceFile), node.getEnd()); + } + if (isBlock(node) || isTemplateSpan(node) || isTemplateHead(node) || isTemplateTail(node) || prevNode && isTemplateHead(prevNode) || isVariableDeclarationList(node) && isVariableStatement(parentNode) || isSyntaxList(node) && isVariableDeclarationList(parentNode) || isVariableDeclaration(node) && isSyntaxList(parentNode) && children.length === 1 || isJSDocTypeExpression(node) || isJSDocSignature(node) || isJSDocTypeLiteral(node)) { + parentNode = node; + break; + } + if (isTemplateSpan(parentNode) && nextNode && isTemplateMiddleOrTemplateTail(nextNode)) { + const start2 = node.getFullStart() - "${".length; + const end2 = nextNode.getStart() + "}".length; + pushSelectionRange(start2, end2); + } + const isBetweenMultiLineBookends = isSyntaxList(node) && isListOpener(prevNode) && isListCloser(nextNode) && !positionsAreOnSameLine(prevNode.getStart(), nextNode.getStart(), sourceFile); + let start = isBetweenMultiLineBookends ? prevNode.getEnd() : node.getStart(); + const end = isBetweenMultiLineBookends ? nextNode.getStart() : getEndPos(sourceFile, node); + if (hasJSDocNodes(node) && ((_a = node.jsDoc) == null ? void 0 : _a.length)) { + pushSelectionRange(first(node.jsDoc).getStart(), end); + } + if (isSyntaxList(node)) { + const firstChild = node.getChildren()[0]; + if (firstChild && hasJSDocNodes(firstChild) && ((_b = firstChild.jsDoc) == null ? void 0 : _b.length) && firstChild.getStart() !== node.pos) { + start = Math.min(start, first(firstChild.jsDoc).getStart()); + } + } + pushSelectionRange(start, end); + if (isStringLiteral(node) || isTemplateLiteral(node)) { + pushSelectionRange(start + 1, end - 1); + } + parentNode = node; + break; + } + if (i === children.length - 1) { + break outer; + } + } + } + return selectionRange; + function pushSelectionRange(start, end) { + if (start !== end) { + const textSpan = createTextSpanFromBounds(start, end); + if (!selectionRange || // Skip ranges that are identical to the parent + !textSpansEqual(textSpan, selectionRange.textSpan) && // Skip ranges that don't contain the original position + textSpanIntersectsWithPosition(textSpan, pos)) { + selectionRange = { textSpan, ...selectionRange && { parent: selectionRange } }; + } + } + } + function pushSelectionCommentRange(start, end) { + pushSelectionRange(start, end); + let pos2 = start; + while (sourceFile.text.charCodeAt(pos2) === 47 /* slash */) { + pos2++; + } + pushSelectionRange(pos2, end); + } +} +function positionShouldSnapToNode(sourceFile, pos, node) { + Debug.assert(node.pos <= pos); + if (pos < node.end) { + return true; + } + const nodeEnd = node.getEnd(); + if (nodeEnd === pos) { + return getTouchingPropertyName(sourceFile, pos).pos < node.end; + } + return false; +} +var isImport2 = or(isImportDeclaration, isImportEqualsDeclaration); +function getSelectionChildren(node) { + var _a; + if (isSourceFile(node)) { + return groupChildren(node.getChildAt(0).getChildren(), isImport2); + } + if (isMappedTypeNode(node)) { + const [openBraceToken, ...children] = node.getChildren(); + const closeBraceToken = Debug.checkDefined(children.pop()); + Debug.assertEqual(openBraceToken.kind, 19 /* OpenBraceToken */); + Debug.assertEqual(closeBraceToken.kind, 20 /* CloseBraceToken */); + const groupedWithPlusMinusTokens = groupChildren(children, (child) => child === node.readonlyToken || child.kind === 148 /* ReadonlyKeyword */ || child === node.questionToken || child.kind === 58 /* QuestionToken */); + const groupedWithBrackets = groupChildren(groupedWithPlusMinusTokens, ({ kind }) => kind === 23 /* OpenBracketToken */ || kind === 169 /* TypeParameter */ || kind === 24 /* CloseBracketToken */); + return [ + openBraceToken, + // Pivot on `:` + createSyntaxList2(splitChildren(groupedWithBrackets, ({ kind }) => kind === 59 /* ColonToken */)), + closeBraceToken + ]; + } + if (isPropertySignature(node)) { + const children = groupChildren(node.getChildren(), (child) => child === node.name || contains(node.modifiers, child)); + const firstJSDocChild = ((_a = children[0]) == null ? void 0 : _a.kind) === 321 /* JSDoc */ ? children[0] : void 0; + const withJSDocSeparated = firstJSDocChild ? children.slice(1) : children; + const splittedChildren = splitChildren(withJSDocSeparated, ({ kind }) => kind === 59 /* ColonToken */); + return firstJSDocChild ? [firstJSDocChild, createSyntaxList2(splittedChildren)] : splittedChildren; + } + if (isParameter(node)) { + const groupedDotDotDotAndName = groupChildren(node.getChildren(), (child) => child === node.dotDotDotToken || child === node.name); + const groupedWithQuestionToken = groupChildren(groupedDotDotDotAndName, (child) => child === groupedDotDotDotAndName[0] || child === node.questionToken); + return splitChildren(groupedWithQuestionToken, ({ kind }) => kind === 64 /* EqualsToken */); + } + if (isBindingElement(node)) { + return splitChildren(node.getChildren(), ({ kind }) => kind === 64 /* EqualsToken */); + } + return node.getChildren(); +} +function groupChildren(children, groupOn) { + const result = []; + let group2; + for (const child of children) { + if (groupOn(child)) { + group2 = group2 || []; + group2.push(child); + } else { + if (group2) { + result.push(createSyntaxList2(group2)); + group2 = void 0; + } + result.push(child); + } + } + if (group2) { + result.push(createSyntaxList2(group2)); + } + return result; +} +function splitChildren(children, pivotOn, separateTrailingSemicolon = true) { + if (children.length < 2) { + return children; + } + const splitTokenIndex = findIndex(children, pivotOn); + if (splitTokenIndex === -1) { + return children; + } + const leftChildren = children.slice(0, splitTokenIndex); + const splitToken = children[splitTokenIndex]; + const lastToken = last(children); + const separateLastToken = separateTrailingSemicolon && lastToken.kind === 27 /* SemicolonToken */; + const rightChildren = children.slice(splitTokenIndex + 1, separateLastToken ? children.length - 1 : void 0); + const result = compact([ + leftChildren.length ? createSyntaxList2(leftChildren) : void 0, + splitToken, + rightChildren.length ? createSyntaxList2(rightChildren) : void 0 + ]); + return separateLastToken ? result.concat(lastToken) : result; +} +function createSyntaxList2(children) { + Debug.assertGreaterThanOrEqual(children.length, 1); + return setTextRangePosEnd(parseNodeFactory.createSyntaxList(children), children[0].pos, last(children).end); +} +function isListOpener(token) { + const kind = token && token.kind; + return kind === 19 /* OpenBraceToken */ || kind === 23 /* OpenBracketToken */ || kind === 21 /* OpenParenToken */ || kind === 287 /* JsxOpeningElement */; +} +function isListCloser(token) { + const kind = token && token.kind; + return kind === 20 /* CloseBraceToken */ || kind === 24 /* CloseBracketToken */ || kind === 22 /* CloseParenToken */ || kind === 288 /* JsxClosingElement */; +} +function getEndPos(sourceFile, node) { + switch (node.kind) { + case 342 /* JSDocParameterTag */: + case 339 /* JSDocCallbackTag */: + case 349 /* JSDocPropertyTag */: + case 347 /* JSDocTypedefTag */: + case 344 /* JSDocThisTag */: + return sourceFile.getLineEndOfPosition(node.getStart()); + default: + return node.getEnd(); + } +} + +// src/services/_namespaces/ts.SymbolDisplay.ts +var ts_SymbolDisplay_exports = {}; +__export(ts_SymbolDisplay_exports, { + getSymbolDisplayPartsDocumentationAndSymbolKind: () => getSymbolDisplayPartsDocumentationAndSymbolKind, + getSymbolKind: () => getSymbolKind, + getSymbolModifiers: () => getSymbolModifiers +}); + +// src/services/symbolDisplay.ts +var symbolDisplayNodeBuilderFlags = 8192 /* OmitParameterModifiers */ | 70221824 /* IgnoreErrors */ | 16384 /* UseAliasDefinedOutsideCurrentScope */; +function getSymbolKind(typeChecker, symbol, location) { + const result = getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location); + if (result !== "" /* unknown */) { + return result; + } + const flags = getCombinedLocalAndExportSymbolFlags(symbol); + if (flags & 32 /* Class */) { + return getDeclarationOfKind(symbol, 232 /* ClassExpression */) ? "local class" /* localClassElement */ : "class" /* classElement */; + } + if (flags & 384 /* Enum */) return "enum" /* enumElement */; + if (flags & 524288 /* TypeAlias */) return "type" /* typeElement */; + if (flags & 64 /* Interface */) return "interface" /* interfaceElement */; + if (flags & 262144 /* TypeParameter */) return "type parameter" /* typeParameterElement */; + if (flags & 8 /* EnumMember */) return "enum member" /* enumMemberElement */; + if (flags & 2097152 /* Alias */) return "alias" /* alias */; + if (flags & 1536 /* Module */) return "module" /* moduleElement */; + return result; +} +function getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) { + const roots = typeChecker.getRootSymbols(symbol); + if (roots.length === 1 && first(roots).flags & 8192 /* Method */ && typeChecker.getTypeOfSymbolAtLocation(symbol, location).getNonNullableType().getCallSignatures().length !== 0) { + return "method" /* memberFunctionElement */; + } + if (typeChecker.isUndefinedSymbol(symbol)) { + return "var" /* variableElement */; + } + if (typeChecker.isArgumentsSymbol(symbol)) { + return "local var" /* localVariableElement */; + } + if (location.kind === 110 /* ThisKeyword */ && isExpression(location) || isThisInTypeQuery(location)) { + return "parameter" /* parameterElement */; + } + const flags = getCombinedLocalAndExportSymbolFlags(symbol); + if (flags & 3 /* Variable */) { + if (isFirstDeclarationOfSymbolParameter(symbol)) { + return "parameter" /* parameterElement */; + } else if (symbol.valueDeclaration && isVarConst(symbol.valueDeclaration)) { + return "const" /* constElement */; + } else if (symbol.valueDeclaration && isVarUsing(symbol.valueDeclaration)) { + return "using" /* variableUsingElement */; + } else if (symbol.valueDeclaration && isVarAwaitUsing(symbol.valueDeclaration)) { + return "await using" /* variableAwaitUsingElement */; + } else if (forEach(symbol.declarations, isLet)) { + return "let" /* letElement */; + } + return isLocalVariableOrFunction(symbol) ? "local var" /* localVariableElement */ : "var" /* variableElement */; + } + if (flags & 16 /* Function */) return isLocalVariableOrFunction(symbol) ? "local function" /* localFunctionElement */ : "function" /* functionElement */; + if (flags & 32768 /* GetAccessor */) return "getter" /* memberGetAccessorElement */; + if (flags & 65536 /* SetAccessor */) return "setter" /* memberSetAccessorElement */; + if (flags & 8192 /* Method */) return "method" /* memberFunctionElement */; + if (flags & 16384 /* Constructor */) return "constructor" /* constructorImplementationElement */; + if (flags & 131072 /* Signature */) return "index" /* indexSignatureElement */; + if (flags & 4 /* Property */) { + if (flags & 33554432 /* Transient */ && symbol.links.checkFlags & 6 /* Synthetic */) { + const unionPropertyKind = forEach(typeChecker.getRootSymbols(symbol), (rootSymbol) => { + const rootSymbolFlags = rootSymbol.getFlags(); + if (rootSymbolFlags & (98308 /* PropertyOrAccessor */ | 3 /* Variable */)) { + return "property" /* memberVariableElement */; + } + }); + if (!unionPropertyKind) { + const typeOfUnionProperty = typeChecker.getTypeOfSymbolAtLocation(symbol, location); + if (typeOfUnionProperty.getCallSignatures().length) { + return "method" /* memberFunctionElement */; + } + return "property" /* memberVariableElement */; + } + return unionPropertyKind; + } + return "property" /* memberVariableElement */; + } + return "" /* unknown */; +} +function getNormalizedSymbolModifiers(symbol) { + if (symbol.declarations && symbol.declarations.length) { + const [declaration, ...declarations] = symbol.declarations; + const excludeFlags = length(declarations) && isDeprecatedDeclaration(declaration) && some(declarations, (d) => !isDeprecatedDeclaration(d)) ? 65536 /* Deprecated */ : 0 /* None */; + const modifiers = getNodeModifiers(declaration, excludeFlags); + if (modifiers) { + return modifiers.split(","); + } + } + return []; +} +function getSymbolModifiers(typeChecker, symbol) { + if (!symbol) { + return "" /* none */; + } + const modifiers = new Set(getNormalizedSymbolModifiers(symbol)); + if (symbol.flags & 2097152 /* Alias */) { + const resolvedSymbol = typeChecker.getAliasedSymbol(symbol); + if (resolvedSymbol !== symbol) { + forEach(getNormalizedSymbolModifiers(resolvedSymbol), (modifier) => { + modifiers.add(modifier); + }); + } + } + if (symbol.flags & 16777216 /* Optional */) { + modifiers.add("optional" /* optionalModifier */); + } + return modifiers.size > 0 ? arrayFrom(modifiers.values()).join(",") : "" /* none */; +} +function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symbol, sourceFile, enclosingDeclaration, location, type, semanticMeaning, alias, maximumLength, verbosityLevel) { + var _a; + const displayParts = []; + let documentation = []; + let tags = []; + const symbolFlags = getCombinedLocalAndExportSymbolFlags(symbol); + let symbolKind = semanticMeaning & 1 /* Value */ ? getSymbolKindOfConstructorPropertyMethodAccessorFunctionOrVar(typeChecker, symbol, location) : "" /* unknown */; + let hasAddedSymbolInfo = false; + const isThisExpression = location.kind === 110 /* ThisKeyword */ && isInExpressionContext(location) || isThisInTypeQuery(location); + let documentationFromAlias; + let tagsFromAlias; + let hasMultipleSignatures = false; + const typeWriterOut = { canIncreaseExpansionDepth: false, truncated: false }; + let symbolWasExpanded = false; + if (location.kind === 110 /* ThisKeyword */ && !isThisExpression) { + return { displayParts: [keywordPart(110 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: void 0 }; + } + if (symbolKind !== "" /* unknown */ || symbolFlags & 32 /* Class */ || symbolFlags & 2097152 /* Alias */) { + if (symbolKind === "getter" /* memberGetAccessorElement */ || symbolKind === "setter" /* memberSetAccessorElement */) { + const declaration = find( + symbol.declarations, + (declaration2) => declaration2.name === location && declaration2.kind !== 212 /* PropertyAccessExpression */ + ); + if (declaration) { + switch (declaration.kind) { + case 178 /* GetAccessor */: + symbolKind = "getter" /* memberGetAccessorElement */; + break; + case 179 /* SetAccessor */: + symbolKind = "setter" /* memberSetAccessorElement */; + break; + case 173 /* PropertyDeclaration */: + symbolKind = "accessor" /* memberAccessorVariableElement */; + break; + default: + Debug.assertNever(declaration); + } + } else { + symbolKind = "property" /* memberVariableElement */; + } + } + let signature; + type ?? (type = isThisExpression ? typeChecker.getTypeAtLocation(location) : typeChecker.getTypeOfSymbolAtLocation(symbol, location)); + if (location.parent && location.parent.kind === 212 /* PropertyAccessExpression */) { + const right = location.parent.name; + if (right === location || right && right.getFullWidth() === 0) { + location = location.parent; + } + } + let callExpressionLike; + if (isCallOrNewExpression(location)) { + callExpressionLike = location; + } else if (isCallExpressionTarget(location) || isNewExpressionTarget(location)) { + callExpressionLike = location.parent; + } else if (location.parent && (isJsxOpeningLikeElement(location.parent) || isTaggedTemplateExpression(location.parent)) && isFunctionLike(symbol.valueDeclaration)) { + callExpressionLike = location.parent; + } + if (callExpressionLike) { + signature = typeChecker.getResolvedSignature(callExpressionLike); + const useConstructSignatures = callExpressionLike.kind === 215 /* NewExpression */ || isCallExpression(callExpressionLike) && callExpressionLike.expression.kind === 108 /* SuperKeyword */; + const allSignatures = useConstructSignatures ? type.getConstructSignatures() : type.getCallSignatures(); + if (signature && !contains(allSignatures, signature.target) && !contains(allSignatures, signature)) { + signature = allSignatures.length ? allSignatures[0] : void 0; + } + if (signature) { + if (useConstructSignatures && symbolFlags & 32 /* Class */) { + symbolKind = "constructor" /* constructorImplementationElement */; + addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); + } else if (symbolFlags & 2097152 /* Alias */) { + symbolKind = "alias" /* alias */; + pushSymbolKind(symbolKind); + displayParts.push(spacePart()); + if (useConstructSignatures) { + if (signature.flags & 4 /* Abstract */) { + displayParts.push(keywordPart(128 /* AbstractKeyword */)); + displayParts.push(spacePart()); + } + displayParts.push(keywordPart(105 /* NewKeyword */)); + displayParts.push(spacePart()); + } + addFullSymbolName(symbol); + } else { + addPrefixForAnyFunctionOrVar(symbol, symbolKind); + } + switch (symbolKind) { + case "JSX attribute" /* jsxAttribute */: + case "property" /* memberVariableElement */: + case "var" /* variableElement */: + case "const" /* constElement */: + case "let" /* letElement */: + case "parameter" /* parameterElement */: + case "local var" /* localVariableElement */: + displayParts.push(punctuationPart(59 /* ColonToken */)); + displayParts.push(spacePart()); + if (!(getObjectFlags(type) & 16 /* Anonymous */) && type.symbol) { + addRange(displayParts, symbolToDisplayParts( + typeChecker, + type.symbol, + enclosingDeclaration, + /*meaning*/ + void 0, + 4 /* AllowAnyNodeKind */ | 1 /* WriteTypeParametersOrArguments */ + )); + displayParts.push(lineBreakPart()); + } + if (useConstructSignatures) { + if (signature.flags & 4 /* Abstract */) { + displayParts.push(keywordPart(128 /* AbstractKeyword */)); + displayParts.push(spacePart()); + } + displayParts.push(keywordPart(105 /* NewKeyword */)); + displayParts.push(spacePart()); + } + addSignatureDisplayParts(signature, allSignatures, 262144 /* WriteArrowStyleSignature */); + break; + default: + addSignatureDisplayParts(signature, allSignatures); + } + hasAddedSymbolInfo = true; + hasMultipleSignatures = allSignatures.length > 1; + } + } else if (isNameOfFunctionDeclaration(location) && !(symbolFlags & 98304 /* Accessor */) || // name of function declaration + location.kind === 137 /* ConstructorKeyword */ && location.parent.kind === 177 /* Constructor */) { + const functionDeclaration = location.parent; + const locationIsSymbolDeclaration = symbol.declarations && find(symbol.declarations, (declaration) => declaration === (location.kind === 137 /* ConstructorKeyword */ ? functionDeclaration.parent : functionDeclaration)); + if (locationIsSymbolDeclaration) { + const allSignatures = functionDeclaration.kind === 177 /* Constructor */ ? type.getNonNullableType().getConstructSignatures() : type.getNonNullableType().getCallSignatures(); + if (!typeChecker.isImplementationOfOverload(functionDeclaration)) { + signature = typeChecker.getSignatureFromDeclaration(functionDeclaration); + } else { + signature = allSignatures[0]; + } + if (functionDeclaration.kind === 177 /* Constructor */) { + symbolKind = "constructor" /* constructorImplementationElement */; + addPrefixForAnyFunctionOrVar(type.symbol, symbolKind); + } else { + addPrefixForAnyFunctionOrVar( + functionDeclaration.kind === 180 /* CallSignature */ && !(type.symbol.flags & 2048 /* TypeLiteral */ || type.symbol.flags & 4096 /* ObjectLiteral */) ? type.symbol : symbol, + symbolKind + ); + } + if (signature) { + addSignatureDisplayParts(signature, allSignatures); + } + hasAddedSymbolInfo = true; + hasMultipleSignatures = allSignatures.length > 1; + } + } + } + if (symbolFlags & 32 /* Class */ && !hasAddedSymbolInfo && !isThisExpression) { + addAliasPrefixIfNecessary(); + const classExpression = getDeclarationOfKind(symbol, 232 /* ClassExpression */); + if (classExpression) { + pushSymbolKind("local class" /* localClassElement */); + displayParts.push(spacePart()); + } + if (!tryExpandSymbol(symbol, semanticMeaning)) { + if (!classExpression) { + displayParts.push(keywordPart(86 /* ClassKeyword */)); + displayParts.push(spacePart()); + } + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + } + } + if (symbolFlags & 64 /* Interface */ && semanticMeaning & 2 /* Type */) { + prefixNextMeaning(); + if (!tryExpandSymbol(symbol, semanticMeaning)) { + displayParts.push(keywordPart(120 /* InterfaceKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + } + } + if (symbolFlags & 524288 /* TypeAlias */ && semanticMeaning & 2 /* Type */) { + prefixNextMeaning(); + displayParts.push(keywordPart(156 /* TypeKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + writeTypeParametersOfSymbol(symbol, sourceFile); + displayParts.push(spacePart()); + displayParts.push(operatorPart(64 /* EqualsToken */)); + displayParts.push(spacePart()); + addRange( + displayParts, + typeToDisplayParts( + typeChecker, + location.parent && isConstTypeReference(location.parent) ? typeChecker.getTypeAtLocation(location.parent) : typeChecker.getDeclaredTypeOfSymbol(symbol), + enclosingDeclaration, + 8388608 /* InTypeAlias */, + maximumLength, + verbosityLevel, + typeWriterOut + ) + ); + } + if (symbolFlags & 384 /* Enum */) { + prefixNextMeaning(); + if (!tryExpandSymbol(symbol, semanticMeaning)) { + if (some(symbol.declarations, (d) => isEnumDeclaration(d) && isEnumConst(d))) { + displayParts.push(keywordPart(87 /* ConstKeyword */)); + displayParts.push(spacePart()); + } + displayParts.push(keywordPart(94 /* EnumKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName( + symbol, + /*enclosingDeclaration*/ + void 0 + ); + } + } + if (symbolFlags & 1536 /* Module */ && !isThisExpression) { + prefixNextMeaning(); + if (!tryExpandSymbol(symbol, semanticMeaning)) { + const declaration = getDeclarationOfKind(symbol, 268 /* ModuleDeclaration */); + const isNamespace = declaration && declaration.name && declaration.name.kind === 80 /* Identifier */; + displayParts.push(keywordPart(isNamespace ? 145 /* NamespaceKeyword */ : 144 /* ModuleKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + } + } + if (symbolFlags & 262144 /* TypeParameter */ && semanticMeaning & 2 /* Type */) { + prefixNextMeaning(); + displayParts.push(punctuationPart(21 /* OpenParenToken */)); + displayParts.push(textPart("type parameter")); + displayParts.push(punctuationPart(22 /* CloseParenToken */)); + displayParts.push(spacePart()); + addFullSymbolName(symbol); + if (symbol.parent) { + addInPrefix(); + addFullSymbolName(symbol.parent, enclosingDeclaration); + writeTypeParametersOfSymbol(symbol.parent, enclosingDeclaration); + } else { + const decl = getDeclarationOfKind(symbol, 169 /* TypeParameter */); + if (decl === void 0) return Debug.fail(); + const declaration = decl.parent; + if (declaration) { + if (isFunctionLike(declaration)) { + addInPrefix(); + const signature = typeChecker.getSignatureFromDeclaration(declaration); + if (declaration.kind === 181 /* ConstructSignature */) { + displayParts.push(keywordPart(105 /* NewKeyword */)); + displayParts.push(spacePart()); + } else if (declaration.kind !== 180 /* CallSignature */ && declaration.name) { + addFullSymbolName(declaration.symbol); + } + addRange(displayParts, signatureToDisplayParts(typeChecker, signature, sourceFile, 32 /* WriteTypeArgumentsOfSignature */)); + } else if (isTypeAliasDeclaration(declaration)) { + addInPrefix(); + displayParts.push(keywordPart(156 /* TypeKeyword */)); + displayParts.push(spacePart()); + addFullSymbolName(declaration.symbol); + writeTypeParametersOfSymbol(declaration.symbol, sourceFile); + } + } + } + } + if (symbolFlags & 8 /* EnumMember */) { + symbolKind = "enum member" /* enumMemberElement */; + addPrefixForAnyFunctionOrVar(symbol, "enum member"); + const declaration = (_a = symbol.declarations) == null ? void 0 : _a[0]; + if ((declaration == null ? void 0 : declaration.kind) === 307 /* EnumMember */) { + const constantValue = typeChecker.getConstantValue(declaration); + if (constantValue !== void 0) { + displayParts.push(spacePart()); + displayParts.push(operatorPart(64 /* EqualsToken */)); + displayParts.push(spacePart()); + displayParts.push(displayPart(getTextOfConstantValue(constantValue), typeof constantValue === "number" ? 7 /* numericLiteral */ : 8 /* stringLiteral */)); + } + } + } + if (symbol.flags & 2097152 /* Alias */) { + prefixNextMeaning(); + if (!hasAddedSymbolInfo || documentation.length === 0 && tags.length === 0) { + const resolvedSymbol = typeChecker.getAliasedSymbol(symbol); + if (resolvedSymbol !== symbol && resolvedSymbol.declarations && resolvedSymbol.declarations.length > 0) { + const resolvedNode = resolvedSymbol.declarations[0]; + const declarationName = getNameOfDeclaration(resolvedNode); + if (declarationName && !hasAddedSymbolInfo) { + const isExternalModuleDeclaration = isModuleWithStringLiteralName(resolvedNode) && hasSyntacticModifier(resolvedNode, 128 /* Ambient */); + const shouldUseAliasName = symbol.name !== "default" && !isExternalModuleDeclaration; + const resolvedInfo = getSymbolDisplayPartsDocumentationAndSymbolKindWorker( + typeChecker, + resolvedSymbol, + getSourceFileOfNode(resolvedNode), + enclosingDeclaration, + declarationName, + type, + semanticMeaning, + shouldUseAliasName ? symbol : resolvedSymbol, + maximumLength, + verbosityLevel + ); + displayParts.push(...resolvedInfo.displayParts); + displayParts.push(lineBreakPart()); + documentationFromAlias = resolvedInfo.documentation; + tagsFromAlias = resolvedInfo.tags; + if (typeWriterOut && resolvedInfo.canIncreaseVerbosityLevel) { + typeWriterOut.canIncreaseExpansionDepth = true; + } + } else { + documentationFromAlias = resolvedSymbol.getContextualDocumentationComment(resolvedNode, typeChecker); + tagsFromAlias = resolvedSymbol.getJsDocTags(typeChecker); + } + } + } + if (symbol.declarations) { + switch (symbol.declarations[0].kind) { + case 271 /* NamespaceExportDeclaration */: + displayParts.push(keywordPart(95 /* ExportKeyword */)); + displayParts.push(spacePart()); + displayParts.push(keywordPart(145 /* NamespaceKeyword */)); + break; + case 278 /* ExportAssignment */: + displayParts.push(keywordPart(95 /* ExportKeyword */)); + displayParts.push(spacePart()); + displayParts.push(keywordPart(symbol.declarations[0].isExportEquals ? 64 /* EqualsToken */ : 90 /* DefaultKeyword */)); + break; + case 282 /* ExportSpecifier */: + displayParts.push(keywordPart(95 /* ExportKeyword */)); + break; + default: + displayParts.push(keywordPart(102 /* ImportKeyword */)); + } + } + displayParts.push(spacePart()); + addFullSymbolName(symbol); + forEach(symbol.declarations, (declaration) => { + if (declaration.kind === 272 /* ImportEqualsDeclaration */) { + const importEqualsDeclaration = declaration; + if (isExternalModuleImportEqualsDeclaration(importEqualsDeclaration)) { + displayParts.push(spacePart()); + displayParts.push(operatorPart(64 /* EqualsToken */)); + displayParts.push(spacePart()); + displayParts.push(keywordPart(149 /* RequireKeyword */)); + displayParts.push(punctuationPart(21 /* OpenParenToken */)); + displayParts.push(displayPart(getTextOfNode(getExternalModuleImportEqualsDeclarationExpression(importEqualsDeclaration)), 8 /* stringLiteral */)); + displayParts.push(punctuationPart(22 /* CloseParenToken */)); + } else { + const internalAliasSymbol = typeChecker.getSymbolAtLocation(importEqualsDeclaration.moduleReference); + if (internalAliasSymbol) { + displayParts.push(spacePart()); + displayParts.push(operatorPart(64 /* EqualsToken */)); + displayParts.push(spacePart()); + addFullSymbolName(internalAliasSymbol, enclosingDeclaration); + } + } + return true; + } + }); + } + if (!hasAddedSymbolInfo) { + if (symbolKind !== "" /* unknown */) { + if (type) { + if (isThisExpression) { + prefixNextMeaning(); + displayParts.push(keywordPart(110 /* ThisKeyword */)); + } else { + addPrefixForAnyFunctionOrVar(symbol, symbolKind); + } + if (symbolKind === "property" /* memberVariableElement */ || symbolKind === "accessor" /* memberAccessorVariableElement */ || symbolKind === "getter" /* memberGetAccessorElement */ || symbolKind === "setter" /* memberSetAccessorElement */ || symbolKind === "JSX attribute" /* jsxAttribute */ || symbolFlags & 3 /* Variable */ || symbolKind === "local var" /* localVariableElement */ || symbolKind === "index" /* indexSignatureElement */ || symbolKind === "using" /* variableUsingElement */ || symbolKind === "await using" /* variableAwaitUsingElement */ || isThisExpression) { + displayParts.push(punctuationPart(59 /* ColonToken */)); + displayParts.push(spacePart()); + if (type.symbol && type.symbol.flags & 262144 /* TypeParameter */ && symbolKind !== "index" /* indexSignatureElement */) { + const typeParameterParts = mapToDisplayParts((writer) => { + const param = typeChecker.typeParameterToDeclaration( + type, + enclosingDeclaration, + symbolDisplayNodeBuilderFlags, + /*internalFlags*/ + void 0, + /*tracker*/ + void 0, + maximumLength, + verbosityLevel, + typeWriterOut + ); + getPrinter().writeNode(4 /* Unspecified */, param, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration)), writer); + }, maximumLength); + addRange(displayParts, typeParameterParts); + } else { + addRange( + displayParts, + typeToDisplayParts( + typeChecker, + type, + enclosingDeclaration, + /*flags*/ + void 0, + maximumLength, + verbosityLevel, + typeWriterOut + ) + ); + } + if (isTransientSymbol(symbol) && symbol.links.target && isTransientSymbol(symbol.links.target) && symbol.links.target.links.tupleLabelDeclaration) { + const labelDecl = symbol.links.target.links.tupleLabelDeclaration; + Debug.assertNode(labelDecl.name, isIdentifier); + displayParts.push(spacePart()); + displayParts.push(punctuationPart(21 /* OpenParenToken */)); + displayParts.push(textPart(idText(labelDecl.name))); + displayParts.push(punctuationPart(22 /* CloseParenToken */)); + } + } else if (symbolFlags & 16 /* Function */ || symbolFlags & 8192 /* Method */ || symbolFlags & 16384 /* Constructor */ || symbolFlags & 131072 /* Signature */ || symbolFlags & 98304 /* Accessor */ || symbolKind === "method" /* memberFunctionElement */) { + const allSignatures = type.getNonNullableType().getCallSignatures(); + if (allSignatures.length) { + addSignatureDisplayParts(allSignatures[0], allSignatures); + hasMultipleSignatures = allSignatures.length > 1; + } + } + } + } else { + symbolKind = getSymbolKind(typeChecker, symbol, location); + } + } + if (documentation.length === 0 && !hasMultipleSignatures) { + documentation = symbol.getContextualDocumentationComment(enclosingDeclaration, typeChecker); + } + if (documentation.length === 0 && symbolFlags & 4 /* Property */) { + if (symbol.parent && symbol.declarations && forEach(symbol.parent.declarations, (declaration) => declaration.kind === 308 /* SourceFile */)) { + for (const declaration of symbol.declarations) { + if (!declaration.parent || declaration.parent.kind !== 227 /* BinaryExpression */) { + continue; + } + const rhsSymbol = typeChecker.getSymbolAtLocation(declaration.parent.right); + if (!rhsSymbol) { + continue; + } + documentation = rhsSymbol.getDocumentationComment(typeChecker); + tags = rhsSymbol.getJsDocTags(typeChecker); + if (documentation.length > 0) { + break; + } + } + } + } + if (documentation.length === 0 && isIdentifier(location) && symbol.valueDeclaration && isBindingElement(symbol.valueDeclaration)) { + const declaration = symbol.valueDeclaration; + const parent2 = declaration.parent; + const name = declaration.propertyName || declaration.name; + if (isIdentifier(name) && isObjectBindingPattern(parent2)) { + const propertyName = getTextOfIdentifierOrLiteral(name); + const objectType = typeChecker.getTypeAtLocation(parent2); + documentation = firstDefined(objectType.isUnion() ? objectType.types : [objectType], (t) => { + const prop = t.getProperty(propertyName); + return prop ? prop.getDocumentationComment(typeChecker) : void 0; + }) || emptyArray; + } + } + if (tags.length === 0 && !hasMultipleSignatures && !isInJSDoc(location)) { + tags = symbol.getContextualJsDocTags(enclosingDeclaration, typeChecker); + } + if (documentation.length === 0 && documentationFromAlias) { + documentation = documentationFromAlias; + } + if (tags.length === 0 && tagsFromAlias) { + tags = tagsFromAlias; + } + const canIncreaseVerbosityLevel = !typeWriterOut.truncated && typeWriterOut.canIncreaseExpansionDepth; + return { + displayParts, + documentation, + symbolKind, + tags: tags.length === 0 ? void 0 : tags, + canIncreaseVerbosityLevel: verbosityLevel !== void 0 ? canIncreaseVerbosityLevel : void 0 + }; + function getPrinter() { + return createPrinterWithRemoveComments(); + } + function prefixNextMeaning() { + if (displayParts.length) { + displayParts.push(lineBreakPart()); + } + addAliasPrefixIfNecessary(); + } + function addAliasPrefixIfNecessary() { + if (alias) { + pushSymbolKind("alias" /* alias */); + displayParts.push(spacePart()); + } + } + function addInPrefix() { + displayParts.push(spacePart()); + displayParts.push(keywordPart(103 /* InKeyword */)); + displayParts.push(spacePart()); + } + function canExpandSymbol(symbol2, out) { + if (verbosityLevel === void 0) { + return false; + } + const type2 = symbol2.flags & (32 /* Class */ | 64 /* Interface */) ? typeChecker.getDeclaredTypeOfSymbol(symbol2) : typeChecker.getTypeOfSymbolAtLocation(symbol2, location); + if (!type2 || typeChecker.isLibType(type2)) { + return false; + } + if (0 < verbosityLevel) { + return true; + } + if (out) { + out.canIncreaseExpansionDepth = true; + } + return false; + } + function semanticToSymbolMeaning(meaning) { + let symbolMeaning = 0 /* None */; + if (meaning & 1 /* Value */) { + symbolMeaning |= 111551 /* Value */; + } + if (meaning & 2 /* Type */) { + symbolMeaning |= 788968 /* Type */; + } + if (meaning & 4 /* Namespace */) { + symbolMeaning |= 1920 /* Namespace */; + } + return symbolMeaning; + } + function tryExpandSymbol(symbol2, meaning) { + if (symbolWasExpanded) { + return true; + } + if (canExpandSymbol(symbol2, typeWriterOut)) { + const symbolMeaning = semanticToSymbolMeaning(meaning); + const expandedDisplayParts = mapToDisplayParts((writer) => { + const nodes = typeChecker.getEmitResolver().symbolToDeclarations( + symbol2, + symbolMeaning, + 1024 /* MultilineObjectLiterals */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, + maximumLength, + verbosityLevel !== void 0 ? verbosityLevel - 1 : void 0, + typeWriterOut + ); + const printer = getPrinter(); + const sourceFile2 = symbol2.valueDeclaration && getSourceFileOfNode(symbol2.valueDeclaration); + nodes.forEach((node, i) => { + if (i > 0) writer.writeLine(); + printer.writeNode(4 /* Unspecified */, node, sourceFile2, writer); + }); + }, maximumLength); + addRange(displayParts, expandedDisplayParts); + symbolWasExpanded = true; + return true; + } + return false; + } + function addFullSymbolName(symbolToDisplay, enclosingDeclaration2) { + let indexInfos; + if (alias && symbolToDisplay === symbol) { + symbolToDisplay = alias; + } + if (symbolKind === "index" /* indexSignatureElement */) { + indexInfos = typeChecker.getIndexInfosOfIndexSymbol(symbolToDisplay); + } + let fullSymbolDisplayParts = []; + if (symbolToDisplay.flags & 131072 /* Signature */ && indexInfos) { + if (symbolToDisplay.parent) { + fullSymbolDisplayParts = symbolToDisplayParts(typeChecker, symbolToDisplay.parent); + } + fullSymbolDisplayParts.push(punctuationPart(23 /* OpenBracketToken */)); + indexInfos.forEach((info, i) => { + fullSymbolDisplayParts.push(...typeToDisplayParts(typeChecker, info.keyType)); + if (i !== indexInfos.length - 1) { + fullSymbolDisplayParts.push(spacePart()); + fullSymbolDisplayParts.push(punctuationPart(52 /* BarToken */)); + fullSymbolDisplayParts.push(spacePart()); + } + }); + fullSymbolDisplayParts.push(punctuationPart(24 /* CloseBracketToken */)); + } else { + fullSymbolDisplayParts = symbolToDisplayParts( + typeChecker, + symbolToDisplay, + enclosingDeclaration2 || sourceFile, + /*meaning*/ + void 0, + 1 /* WriteTypeParametersOrArguments */ | 2 /* UseOnlyExternalAliasing */ | 4 /* AllowAnyNodeKind */ + ); + } + addRange(displayParts, fullSymbolDisplayParts); + if (symbol.flags & 16777216 /* Optional */) { + displayParts.push(punctuationPart(58 /* QuestionToken */)); + } + } + function addPrefixForAnyFunctionOrVar(symbol2, symbolKind2) { + prefixNextMeaning(); + if (symbolKind2) { + pushSymbolKind(symbolKind2); + if (symbol2 && !some(symbol2.declarations, (d) => isArrowFunction(d) || (isFunctionExpression(d) || isClassExpression(d)) && !d.name)) { + displayParts.push(spacePart()); + addFullSymbolName(symbol2); + } + } + } + function pushSymbolKind(symbolKind2) { + switch (symbolKind2) { + case "var" /* variableElement */: + case "function" /* functionElement */: + case "let" /* letElement */: + case "const" /* constElement */: + case "constructor" /* constructorImplementationElement */: + case "using" /* variableUsingElement */: + case "await using" /* variableAwaitUsingElement */: + displayParts.push(textOrKeywordPart(symbolKind2)); + return; + default: + displayParts.push(punctuationPart(21 /* OpenParenToken */)); + displayParts.push(textOrKeywordPart(symbolKind2)); + displayParts.push(punctuationPart(22 /* CloseParenToken */)); + return; + } + } + function addSignatureDisplayParts(signature, allSignatures, flags = 0 /* None */) { + addRange(displayParts, signatureToDisplayParts(typeChecker, signature, enclosingDeclaration, flags | 32 /* WriteTypeArgumentsOfSignature */, maximumLength, verbosityLevel, typeWriterOut)); + if (allSignatures.length > 1) { + displayParts.push(spacePart()); + displayParts.push(punctuationPart(21 /* OpenParenToken */)); + displayParts.push(operatorPart(40 /* PlusToken */)); + displayParts.push(displayPart((allSignatures.length - 1).toString(), 7 /* numericLiteral */)); + displayParts.push(spacePart()); + displayParts.push(textPart(allSignatures.length === 2 ? "overload" : "overloads")); + displayParts.push(punctuationPart(22 /* CloseParenToken */)); + } + documentation = signature.getDocumentationComment(typeChecker); + tags = signature.getJsDocTags(); + if (allSignatures.length > 1 && documentation.length === 0 && tags.length === 0) { + documentation = allSignatures[0].getDocumentationComment(typeChecker); + tags = allSignatures[0].getJsDocTags().filter((tag) => tag.name !== "deprecated"); + } + } + function writeTypeParametersOfSymbol(symbol2, enclosingDeclaration2) { + const typeParameterParts = mapToDisplayParts((writer) => { + const params = typeChecker.symbolToTypeParameterDeclarations(symbol2, enclosingDeclaration2, symbolDisplayNodeBuilderFlags); + getPrinter().writeList(53776 /* TypeParameters */, params, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration2)), writer); + }); + addRange(displayParts, typeParameterParts); + } +} +function getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, enclosingDeclaration, location, semanticMeaning = getMeaningFromLocation(location), alias, maximumLength, verbosityLevel) { + return getSymbolDisplayPartsDocumentationAndSymbolKindWorker( + typeChecker, + symbol, + sourceFile, + enclosingDeclaration, + location, + /*type*/ + void 0, + semanticMeaning, + alias, + maximumLength, + verbosityLevel + ); +} +function isLocalVariableOrFunction(symbol) { + if (symbol.parent) { + return false; + } + return forEach(symbol.declarations, (declaration) => { + if (declaration.kind === 219 /* FunctionExpression */) { + return true; + } + if (declaration.kind !== 261 /* VariableDeclaration */ && declaration.kind !== 263 /* FunctionDeclaration */) { + return false; + } + for (let parent2 = declaration.parent; !isFunctionBlock(parent2); parent2 = parent2.parent) { + if (parent2.kind === 308 /* SourceFile */ || parent2.kind === 269 /* ModuleBlock */) { + return false; + } + } + return true; + }); +} + +// src/services/_namespaces/ts.textChanges.ts +var ts_textChanges_exports = {}; +__export(ts_textChanges_exports, { + ChangeTracker: () => ChangeTracker, + LeadingTriviaOption: () => LeadingTriviaOption, + TrailingTriviaOption: () => TrailingTriviaOption, + applyChanges: () => applyChanges, + assignPositionsToNode: () => assignPositionsToNode, + createWriter: () => createWriter, + deleteNode: () => deleteNode, + getAdjustedEndPosition: () => getAdjustedEndPosition, + isThisTypeAnnotatable: () => isThisTypeAnnotatable, + isValidLocationToAddComment: () => isValidLocationToAddComment +}); + +// src/services/textChanges.ts +function getPos2(n) { + const result = n.__pos; + Debug.assert(typeof result === "number"); + return result; +} +function setPos(n, pos) { + Debug.assert(typeof pos === "number"); + n.__pos = pos; +} +function getEnd(n) { + const result = n.__end; + Debug.assert(typeof result === "number"); + return result; +} +function setEnd(n, end) { + Debug.assert(typeof end === "number"); + n.__end = end; +} +var LeadingTriviaOption = /* @__PURE__ */ ((LeadingTriviaOption2) => { + LeadingTriviaOption2[LeadingTriviaOption2["Exclude"] = 0] = "Exclude"; + LeadingTriviaOption2[LeadingTriviaOption2["IncludeAll"] = 1] = "IncludeAll"; + LeadingTriviaOption2[LeadingTriviaOption2["JSDoc"] = 2] = "JSDoc"; + LeadingTriviaOption2[LeadingTriviaOption2["StartLine"] = 3] = "StartLine"; + return LeadingTriviaOption2; +})(LeadingTriviaOption || {}); +var TrailingTriviaOption = /* @__PURE__ */ ((TrailingTriviaOption2) => { + TrailingTriviaOption2[TrailingTriviaOption2["Exclude"] = 0] = "Exclude"; + TrailingTriviaOption2[TrailingTriviaOption2["ExcludeWhitespace"] = 1] = "ExcludeWhitespace"; + TrailingTriviaOption2[TrailingTriviaOption2["Include"] = 2] = "Include"; + return TrailingTriviaOption2; +})(TrailingTriviaOption || {}); +function skipWhitespacesAndLineBreaks(text, start) { + return skipTrivia( + text, + start, + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + ); +} +function hasCommentsBeforeLineBreak(text, start) { + let i = start; + while (i < text.length) { + const ch = text.charCodeAt(i); + if (isWhiteSpaceSingleLine(ch)) { + i++; + continue; + } + return ch === 47 /* slash */; + } + return false; +} +var useNonAdjustedPositions = { + leadingTriviaOption: 0 /* Exclude */, + trailingTriviaOption: 0 /* Exclude */ +}; +function getAdjustedRange(sourceFile, startNode2, endNode2, options) { + return { pos: getAdjustedStartPosition(sourceFile, startNode2, options), end: getAdjustedEndPosition(sourceFile, endNode2, options) }; +} +function getAdjustedStartPosition(sourceFile, node, options, hasTrailingComment = false) { + var _a, _b; + const { leadingTriviaOption } = options; + if (leadingTriviaOption === 0 /* Exclude */) { + return node.getStart(sourceFile); + } + if (leadingTriviaOption === 3 /* StartLine */) { + const startPos = node.getStart(sourceFile); + const pos = getLineStartPositionForPosition(startPos, sourceFile); + return rangeContainsPosition(node, pos) ? pos : startPos; + } + if (leadingTriviaOption === 2 /* JSDoc */) { + const JSDocComments = getJSDocCommentRanges(node, sourceFile.text); + if (JSDocComments == null ? void 0 : JSDocComments.length) { + return getLineStartPositionForPosition(JSDocComments[0].pos, sourceFile); + } + } + const fullStart = node.getFullStart(); + const start = node.getStart(sourceFile); + if (fullStart === start) { + return start; + } + const fullStartLine = getLineStartPositionForPosition(fullStart, sourceFile); + const startLine = getLineStartPositionForPosition(start, sourceFile); + if (startLine === fullStartLine) { + return leadingTriviaOption === 1 /* IncludeAll */ ? fullStart : start; + } + if (hasTrailingComment) { + const comment = ((_a = getLeadingCommentRanges(sourceFile.text, fullStart)) == null ? void 0 : _a[0]) || ((_b = getTrailingCommentRanges(sourceFile.text, fullStart)) == null ? void 0 : _b[0]); + if (comment) { + return skipTrivia( + sourceFile.text, + comment.end, + /*stopAfterLineBreak*/ + true, + /*stopAtComments*/ + true + ); + } + } + const nextLineStart = fullStart > 0 ? 1 : 0; + let adjustedStartPosition = getStartPositionOfLine(getLineOfLocalPosition(sourceFile, fullStartLine) + nextLineStart, sourceFile); + adjustedStartPosition = skipWhitespacesAndLineBreaks(sourceFile.text, adjustedStartPosition); + return getStartPositionOfLine(getLineOfLocalPosition(sourceFile, adjustedStartPosition), sourceFile); +} +function getEndPositionOfMultilineTrailingComment(sourceFile, node, options) { + const { end } = node; + const { trailingTriviaOption } = options; + if (trailingTriviaOption === 2 /* Include */) { + const comments = getTrailingCommentRanges(sourceFile.text, end); + if (comments) { + const nodeEndLine = getLineOfLocalPosition(sourceFile, node.end); + for (const comment of comments) { + if (comment.kind === 2 /* SingleLineCommentTrivia */ || getLineOfLocalPosition(sourceFile, comment.pos) > nodeEndLine) { + break; + } + const commentEndLine = getLineOfLocalPosition(sourceFile, comment.end); + if (commentEndLine > nodeEndLine) { + return skipTrivia( + sourceFile.text, + comment.end, + /*stopAfterLineBreak*/ + true, + /*stopAtComments*/ + true + ); + } + } + } + } + return void 0; +} +function getAdjustedEndPosition(sourceFile, node, options) { + var _a; + const { end } = node; + const { trailingTriviaOption } = options; + if (trailingTriviaOption === 0 /* Exclude */) { + return end; + } + if (trailingTriviaOption === 1 /* ExcludeWhitespace */) { + const comments = concatenate(getTrailingCommentRanges(sourceFile.text, end), getLeadingCommentRanges(sourceFile.text, end)); + const realEnd = (_a = comments == null ? void 0 : comments[comments.length - 1]) == null ? void 0 : _a.end; + if (realEnd) { + return realEnd; + } + return end; + } + const multilineEndPosition = getEndPositionOfMultilineTrailingComment(sourceFile, node, options); + if (multilineEndPosition) { + return multilineEndPosition; + } + const newEnd = skipTrivia( + sourceFile.text, + end, + /*stopAfterLineBreak*/ + true + ); + return newEnd !== end && (trailingTriviaOption === 2 /* Include */ || isLineBreak(sourceFile.text.charCodeAt(newEnd - 1))) ? newEnd : end; +} +function isSeparator(node, candidate) { + return !!candidate && !!node.parent && (candidate.kind === 28 /* CommaToken */ || candidate.kind === 27 /* SemicolonToken */ && node.parent.kind === 211 /* ObjectLiteralExpression */); +} +function isThisTypeAnnotatable(containingFunction) { + return isFunctionExpression(containingFunction) || isFunctionDeclaration(containingFunction); +} +var ChangeTracker = class _ChangeTracker { + /** Public for tests only. Other callers should use `ChangeTracker.with`. */ + constructor(newLineCharacter, formatContext) { + this.newLineCharacter = newLineCharacter; + this.formatContext = formatContext; + this.changes = []; + this.classesWithNodesInsertedAtStart = /* @__PURE__ */ new Map(); + // Set implemented as Map + this.deletedNodes = []; + } + static fromContext(context) { + return new _ChangeTracker(getNewLineOrDefaultFromHost(context.host, context.formatContext.options), context.formatContext); + } + static with(context, cb) { + const tracker = _ChangeTracker.fromContext(context); + cb(tracker); + return tracker.getChanges(); + } + pushRaw(sourceFile, change) { + Debug.assertEqual(sourceFile.fileName, change.fileName); + for (const c of change.textChanges) { + this.changes.push({ + kind: 3 /* Text */, + sourceFile, + text: c.newText, + range: createTextRangeFromSpan(c.span) + }); + } + } + deleteRange(sourceFile, range) { + this.changes.push({ kind: 0 /* Remove */, sourceFile, range }); + } + delete(sourceFile, node) { + this.deletedNodes.push({ sourceFile, node }); + } + /** Stop! Consider using `delete` instead, which has logic for deleting nodes from delimited lists. */ + deleteNode(sourceFile, node, options = { leadingTriviaOption: 1 /* IncludeAll */ }) { + this.deleteRange(sourceFile, getAdjustedRange(sourceFile, node, node, options)); + } + deleteNodes(sourceFile, nodes, options = { leadingTriviaOption: 1 /* IncludeAll */ }, hasTrailingComment) { + for (const node of nodes) { + const pos = getAdjustedStartPosition(sourceFile, node, options, hasTrailingComment); + const end = getAdjustedEndPosition(sourceFile, node, options); + this.deleteRange(sourceFile, { pos, end }); + hasTrailingComment = !!getEndPositionOfMultilineTrailingComment(sourceFile, node, options); + } + } + deleteModifier(sourceFile, modifier) { + this.deleteRange(sourceFile, { pos: modifier.getStart(sourceFile), end: skipTrivia( + sourceFile.text, + modifier.end, + /*stopAfterLineBreak*/ + true + ) }); + } + deleteNodeRange(sourceFile, startNode2, endNode2, options = { leadingTriviaOption: 1 /* IncludeAll */ }) { + const startPosition = getAdjustedStartPosition(sourceFile, startNode2, options); + const endPosition = getAdjustedEndPosition(sourceFile, endNode2, options); + this.deleteRange(sourceFile, { pos: startPosition, end: endPosition }); + } + deleteNodeRangeExcludingEnd(sourceFile, startNode2, afterEndNode, options = { leadingTriviaOption: 1 /* IncludeAll */ }) { + const startPosition = getAdjustedStartPosition(sourceFile, startNode2, options); + const endPosition = afterEndNode === void 0 ? sourceFile.text.length : getAdjustedStartPosition(sourceFile, afterEndNode, options); + this.deleteRange(sourceFile, { pos: startPosition, end: endPosition }); + } + replaceRange(sourceFile, range, newNode, options = {}) { + this.changes.push({ kind: 1 /* ReplaceWithSingleNode */, sourceFile, range, options, node: newNode }); + } + replaceNode(sourceFile, oldNode, newNode, options = useNonAdjustedPositions) { + this.replaceRange(sourceFile, getAdjustedRange(sourceFile, oldNode, oldNode, options), newNode, options); + } + replaceNodeRange(sourceFile, startNode2, endNode2, newNode, options = useNonAdjustedPositions) { + this.replaceRange(sourceFile, getAdjustedRange(sourceFile, startNode2, endNode2, options), newNode, options); + } + replaceRangeWithNodes(sourceFile, range, newNodes, options = {}) { + this.changes.push({ kind: 2 /* ReplaceWithMultipleNodes */, sourceFile, range, options, nodes: newNodes }); + } + replaceNodeWithNodes(sourceFile, oldNode, newNodes, options = useNonAdjustedPositions) { + this.replaceRangeWithNodes(sourceFile, getAdjustedRange(sourceFile, oldNode, oldNode, options), newNodes, options); + } + replaceNodeWithText(sourceFile, oldNode, text) { + this.replaceRangeWithText(sourceFile, getAdjustedRange(sourceFile, oldNode, oldNode, useNonAdjustedPositions), text); + } + replaceNodeRangeWithNodes(sourceFile, startNode2, endNode2, newNodes, options = useNonAdjustedPositions) { + this.replaceRangeWithNodes(sourceFile, getAdjustedRange(sourceFile, startNode2, endNode2, options), newNodes, options); + } + nodeHasTrailingComment(sourceFile, oldNode, configurableEnd = useNonAdjustedPositions) { + return !!getEndPositionOfMultilineTrailingComment(sourceFile, oldNode, configurableEnd); + } + nextCommaToken(sourceFile, node) { + const next = findNextToken(node, node.parent, sourceFile); + return next && next.kind === 28 /* CommaToken */ ? next : void 0; + } + replacePropertyAssignment(sourceFile, oldNode, newNode) { + const suffix = this.nextCommaToken(sourceFile, oldNode) ? "" : "," + this.newLineCharacter; + this.replaceNode(sourceFile, oldNode, newNode, { suffix }); + } + insertNodeAt(sourceFile, pos, newNode, options = {}) { + this.replaceRange(sourceFile, createRange(pos), newNode, options); + } + insertNodesAt(sourceFile, pos, newNodes, options = {}) { + this.replaceRangeWithNodes(sourceFile, createRange(pos), newNodes, options); + } + insertNodeAtTopOfFile(sourceFile, newNode, blankLineBetween) { + this.insertAtTopOfFile(sourceFile, newNode, blankLineBetween); + } + insertNodesAtTopOfFile(sourceFile, newNodes, blankLineBetween) { + this.insertAtTopOfFile(sourceFile, newNodes, blankLineBetween); + } + insertAtTopOfFile(sourceFile, insert, blankLineBetween) { + const pos = getInsertionPositionAtSourceFileTop(sourceFile); + const options = { + prefix: pos === 0 ? void 0 : this.newLineCharacter, + suffix: (isLineBreak(sourceFile.text.charCodeAt(pos)) ? "" : this.newLineCharacter) + (blankLineBetween ? this.newLineCharacter : "") + }; + if (isArray(insert)) { + this.insertNodesAt(sourceFile, pos, insert, options); + } else { + this.insertNodeAt(sourceFile, pos, insert, options); + } + } + insertNodesAtEndOfFile(sourceFile, newNodes, blankLineBetween) { + this.insertAtEndOfFile(sourceFile, newNodes, blankLineBetween); + } + insertAtEndOfFile(sourceFile, insert, blankLineBetween) { + const pos = sourceFile.end + 1; + const options = { + prefix: this.newLineCharacter, + suffix: this.newLineCharacter + (blankLineBetween ? this.newLineCharacter : "") + }; + this.insertNodesAt(sourceFile, pos, insert, options); + } + insertStatementsInNewFile(fileName, statements, oldFile) { + if (!this.newFileChanges) { + this.newFileChanges = createMultiMap(); + } + this.newFileChanges.add(fileName, { oldFile, statements }); + } + insertFirstParameter(sourceFile, parameters, newParam) { + const p0 = firstOrUndefined(parameters); + if (p0) { + this.insertNodeBefore(sourceFile, p0, newParam); + } else { + this.insertNodeAt(sourceFile, parameters.pos, newParam); + } + } + insertNodeBefore(sourceFile, before, newNode, blankLineBetween = false, options = {}) { + this.insertNodeAt(sourceFile, getAdjustedStartPosition(sourceFile, before, options), newNode, this.getOptionsForInsertNodeBefore(before, newNode, blankLineBetween)); + } + insertNodesBefore(sourceFile, before, newNodes, blankLineBetween = false, options = {}) { + this.insertNodesAt(sourceFile, getAdjustedStartPosition(sourceFile, before, options), newNodes, this.getOptionsForInsertNodeBefore(before, first(newNodes), blankLineBetween)); + } + insertModifierAt(sourceFile, pos, modifier, options = {}) { + this.insertNodeAt(sourceFile, pos, factory.createToken(modifier), options); + } + insertModifierBefore(sourceFile, modifier, before) { + return this.insertModifierAt(sourceFile, before.getStart(sourceFile), modifier, { suffix: " " }); + } + insertCommentBeforeLine(sourceFile, lineNumber, position, commentText) { + const lineStartPosition = getStartPositionOfLine(lineNumber, sourceFile); + const startPosition = getFirstNonSpaceCharacterPosition(sourceFile.text, lineStartPosition); + const insertAtLineStart = isValidLocationToAddComment(sourceFile, startPosition); + const token = getTouchingToken(sourceFile, insertAtLineStart ? startPosition : position); + const indent3 = sourceFile.text.slice(lineStartPosition, startPosition); + const text = `${insertAtLineStart ? "" : this.newLineCharacter}//${commentText}${this.newLineCharacter}${indent3}`; + this.insertText(sourceFile, token.getStart(sourceFile), text); + } + insertJsdocCommentBefore(sourceFile, node, tag) { + const fnStart = node.getStart(sourceFile); + if (node.jsDoc) { + for (const jsdoc of node.jsDoc) { + this.deleteRange(sourceFile, { + pos: getLineStartPositionForPosition(jsdoc.getStart(sourceFile), sourceFile), + end: getAdjustedEndPosition( + sourceFile, + jsdoc, + /*options*/ + {} + ) + }); + } + } + const startPosition = getPrecedingNonSpaceCharacterPosition(sourceFile.text, fnStart - 1); + const indent3 = sourceFile.text.slice(startPosition, fnStart); + this.insertNodeAt(sourceFile, fnStart, tag, { suffix: this.newLineCharacter + indent3 }); + } + createJSDocText(sourceFile, node) { + const comments = flatMap(node.jsDoc, (jsDoc2) => isString(jsDoc2.comment) ? factory.createJSDocText(jsDoc2.comment) : jsDoc2.comment); + const jsDoc = singleOrUndefined(node.jsDoc); + return jsDoc && positionsAreOnSameLine(jsDoc.pos, jsDoc.end, sourceFile) && length(comments) === 0 ? void 0 : factory.createNodeArray(intersperse(comments, factory.createJSDocText("\n"))); + } + replaceJSDocComment(sourceFile, node, tags) { + this.insertJsdocCommentBefore(sourceFile, updateJSDocHost(node), factory.createJSDocComment(this.createJSDocText(sourceFile, node), factory.createNodeArray(tags))); + } + addJSDocTags(sourceFile, parent2, newTags) { + const oldTags = flatMapToMutable(parent2.jsDoc, (j) => j.tags); + const unmergedNewTags = newTags.filter( + (newTag) => !oldTags.some((tag, i) => { + const merged = tryMergeJsdocTags(tag, newTag); + if (merged) oldTags[i] = merged; + return !!merged; + }) + ); + this.replaceJSDocComment(sourceFile, parent2, [...oldTags, ...unmergedNewTags]); + } + filterJSDocTags(sourceFile, parent2, predicate) { + this.replaceJSDocComment(sourceFile, parent2, filter(flatMapToMutable(parent2.jsDoc, (j) => j.tags), predicate)); + } + replaceRangeWithText(sourceFile, range, text) { + this.changes.push({ kind: 3 /* Text */, sourceFile, range, text }); + } + insertText(sourceFile, pos, text) { + this.replaceRangeWithText(sourceFile, createRange(pos), text); + } + /** Prefer this over replacing a node with another that has a type annotation, as it avoids reformatting the other parts of the node. */ + tryInsertTypeAnnotation(sourceFile, node, type) { + let endNode2; + if (isFunctionLike(node)) { + endNode2 = findChildOfKind(node, 22 /* CloseParenToken */, sourceFile); + if (!endNode2) { + if (!isArrowFunction(node)) return false; + endNode2 = first(node.parameters); + } + } else { + endNode2 = (node.kind === 261 /* VariableDeclaration */ ? node.exclamationToken : node.questionToken) ?? node.name; + } + this.insertNodeAt(sourceFile, endNode2.end, type, { prefix: ": " }); + return true; + } + tryInsertThisTypeAnnotation(sourceFile, node, type) { + const start = findChildOfKind(node, 21 /* OpenParenToken */, sourceFile).getStart(sourceFile) + 1; + const suffix = node.parameters.length ? ", " : ""; + this.insertNodeAt(sourceFile, start, type, { prefix: "this: ", suffix }); + } + insertTypeParameters(sourceFile, node, typeParameters) { + const start = (findChildOfKind(node, 21 /* OpenParenToken */, sourceFile) || first(node.parameters)).getStart(sourceFile); + this.insertNodesAt(sourceFile, start, typeParameters, { prefix: "<", suffix: ">", joiner: ", " }); + } + getOptionsForInsertNodeBefore(before, inserted, blankLineBetween) { + if (isStatement(before) || isClassElement(before)) { + return { suffix: blankLineBetween ? this.newLineCharacter + this.newLineCharacter : this.newLineCharacter }; + } else if (isVariableDeclaration(before)) { + return { suffix: ", " }; + } else if (isParameter(before)) { + return isParameter(inserted) ? { suffix: ", " } : {}; + } else if (isStringLiteral(before) && isImportDeclaration(before.parent) || isNamedImports(before)) { + return { suffix: ", " }; + } else if (isImportSpecifier(before)) { + return { suffix: "," + (blankLineBetween ? this.newLineCharacter : " ") }; + } + return Debug.failBadSyntaxKind(before); + } + insertNodeAtConstructorStart(sourceFile, ctr, newStatement) { + const firstStatement = firstOrUndefined(ctr.body.statements); + if (!firstStatement || !ctr.body.multiLine) { + this.replaceConstructorBody(sourceFile, ctr, [newStatement, ...ctr.body.statements]); + } else { + this.insertNodeBefore(sourceFile, firstStatement, newStatement); + } + } + insertNodeAtConstructorStartAfterSuperCall(sourceFile, ctr, newStatement) { + const superCallStatement = find(ctr.body.statements, (stmt) => isExpressionStatement(stmt) && isSuperCall(stmt.expression)); + if (!superCallStatement || !ctr.body.multiLine) { + this.replaceConstructorBody(sourceFile, ctr, [...ctr.body.statements, newStatement]); + } else { + this.insertNodeAfter(sourceFile, superCallStatement, newStatement); + } + } + insertNodeAtConstructorEnd(sourceFile, ctr, newStatement) { + const lastStatement = lastOrUndefined(ctr.body.statements); + if (!lastStatement || !ctr.body.multiLine) { + this.replaceConstructorBody(sourceFile, ctr, [...ctr.body.statements, newStatement]); + } else { + this.insertNodeAfter(sourceFile, lastStatement, newStatement); + } + } + replaceConstructorBody(sourceFile, ctr, statements) { + this.replaceNode(sourceFile, ctr.body, factory.createBlock( + statements, + /*multiLine*/ + true + )); + } + insertNodeAtEndOfScope(sourceFile, scope, newNode) { + const pos = getAdjustedStartPosition(sourceFile, scope.getLastToken(), {}); + this.insertNodeAt(sourceFile, pos, newNode, { + prefix: isLineBreak(sourceFile.text.charCodeAt(scope.getLastToken().pos)) ? this.newLineCharacter : this.newLineCharacter + this.newLineCharacter, + suffix: this.newLineCharacter + }); + } + insertMemberAtStart(sourceFile, node, newElement) { + this.insertNodeAtStartWorker(sourceFile, node, newElement); + } + insertNodeAtObjectStart(sourceFile, obj, newElement) { + this.insertNodeAtStartWorker(sourceFile, obj, newElement); + } + insertNodeAtStartWorker(sourceFile, node, newElement) { + const indentation = this.guessIndentationFromExistingMembers(sourceFile, node) ?? this.computeIndentationForNewMember(sourceFile, node); + this.insertNodeAt(sourceFile, getMembersOrProperties(node).pos, newElement, this.getInsertNodeAtStartInsertOptions(sourceFile, node, indentation)); + } + /** + * Tries to guess the indentation from the existing members of a class/interface/object. All members must be on + * new lines and must share the same indentation. + */ + guessIndentationFromExistingMembers(sourceFile, node) { + let indentation; + let lastRange = node; + for (const member of getMembersOrProperties(node)) { + if (rangeStartPositionsAreOnSameLine(lastRange, member, sourceFile)) { + return void 0; + } + const memberStart = member.getStart(sourceFile); + const memberIndentation = ts_formatting_exports.SmartIndenter.findFirstNonWhitespaceColumn(getLineStartPositionForPosition(memberStart, sourceFile), memberStart, sourceFile, this.formatContext.options); + if (indentation === void 0) { + indentation = memberIndentation; + } else if (memberIndentation !== indentation) { + return void 0; + } + lastRange = member; + } + return indentation; + } + computeIndentationForNewMember(sourceFile, node) { + const nodeStart = node.getStart(sourceFile); + return ts_formatting_exports.SmartIndenter.findFirstNonWhitespaceColumn(getLineStartPositionForPosition(nodeStart, sourceFile), nodeStart, sourceFile, this.formatContext.options) + (this.formatContext.options.indentSize ?? 4); + } + getInsertNodeAtStartInsertOptions(sourceFile, node, indentation) { + const members = getMembersOrProperties(node); + const isEmpty = members.length === 0; + const isFirstInsertion = !this.classesWithNodesInsertedAtStart.has(getNodeId(node)); + if (isFirstInsertion) { + this.classesWithNodesInsertedAtStart.set(getNodeId(node), { node, sourceFile }); + } + const insertTrailingComma = isObjectLiteralExpression(node) && (!isJsonSourceFile(sourceFile) || !isEmpty); + const insertLeadingComma = isObjectLiteralExpression(node) && isJsonSourceFile(sourceFile) && isEmpty && !isFirstInsertion; + return { + indentation, + prefix: (insertLeadingComma ? "," : "") + this.newLineCharacter, + suffix: insertTrailingComma ? "," : isInterfaceDeclaration(node) && isEmpty ? ";" : "" + }; + } + insertNodeAfterComma(sourceFile, after, newNode) { + const endPosition = this.insertNodeAfterWorker(sourceFile, this.nextCommaToken(sourceFile, after) || after, newNode); + this.insertNodeAt(sourceFile, endPosition, newNode, this.getInsertNodeAfterOptions(sourceFile, after)); + } + insertNodeAfter(sourceFile, after, newNode) { + const endPosition = this.insertNodeAfterWorker(sourceFile, after, newNode); + this.insertNodeAt(sourceFile, endPosition, newNode, this.getInsertNodeAfterOptions(sourceFile, after)); + } + insertNodeAtEndOfList(sourceFile, list, newNode) { + this.insertNodeAt(sourceFile, list.end, newNode, { prefix: ", " }); + } + insertNodesAfter(sourceFile, after, newNodes) { + const endPosition = this.insertNodeAfterWorker(sourceFile, after, first(newNodes)); + this.insertNodesAt(sourceFile, endPosition, newNodes, this.getInsertNodeAfterOptions(sourceFile, after)); + } + insertNodeAfterWorker(sourceFile, after, newNode) { + if (needSemicolonBetween(after, newNode)) { + if (sourceFile.text.charCodeAt(after.end - 1) !== 59 /* semicolon */) { + this.replaceRange(sourceFile, createRange(after.end), factory.createToken(27 /* SemicolonToken */)); + } + } + const endPosition = getAdjustedEndPosition(sourceFile, after, {}); + return endPosition; + } + getInsertNodeAfterOptions(sourceFile, after) { + const options = this.getInsertNodeAfterOptionsWorker(after); + return { + ...options, + prefix: after.end === sourceFile.end && isStatement(after) ? options.prefix ? ` +${options.prefix}` : "\n" : options.prefix + }; + } + getInsertNodeAfterOptionsWorker(node) { + switch (node.kind) { + case 264 /* ClassDeclaration */: + case 268 /* ModuleDeclaration */: + return { prefix: this.newLineCharacter, suffix: this.newLineCharacter }; + case 261 /* VariableDeclaration */: + case 11 /* StringLiteral */: + case 80 /* Identifier */: + return { prefix: ", " }; + case 304 /* PropertyAssignment */: + return { suffix: "," + this.newLineCharacter }; + case 95 /* ExportKeyword */: + return { prefix: " " }; + case 170 /* Parameter */: + return {}; + default: + Debug.assert(isStatement(node) || isClassOrTypeElement(node)); + return { suffix: this.newLineCharacter }; + } + } + insertName(sourceFile, node, name) { + Debug.assert(!node.name); + if (node.kind === 220 /* ArrowFunction */) { + const arrow = findChildOfKind(node, 39 /* EqualsGreaterThanToken */, sourceFile); + const lparen = findChildOfKind(node, 21 /* OpenParenToken */, sourceFile); + if (lparen) { + this.insertNodesAt(sourceFile, lparen.getStart(sourceFile), [factory.createToken(100 /* FunctionKeyword */), factory.createIdentifier(name)], { joiner: " " }); + deleteNode(this, sourceFile, arrow); + } else { + this.insertText(sourceFile, first(node.parameters).getStart(sourceFile), `function ${name}(`); + this.replaceRange(sourceFile, arrow, factory.createToken(22 /* CloseParenToken */)); + } + if (node.body.kind !== 242 /* Block */) { + this.insertNodesAt(sourceFile, node.body.getStart(sourceFile), [factory.createToken(19 /* OpenBraceToken */), factory.createToken(107 /* ReturnKeyword */)], { joiner: " ", suffix: " " }); + this.insertNodesAt(sourceFile, node.body.end, [factory.createToken(27 /* SemicolonToken */), factory.createToken(20 /* CloseBraceToken */)], { joiner: " " }); + } + } else { + const pos = findChildOfKind(node, node.kind === 219 /* FunctionExpression */ ? 100 /* FunctionKeyword */ : 86 /* ClassKeyword */, sourceFile).end; + this.insertNodeAt(sourceFile, pos, factory.createIdentifier(name), { prefix: " " }); + } + } + insertExportModifier(sourceFile, node) { + this.insertText(sourceFile, node.getStart(sourceFile), "export "); + } + insertImportSpecifierAtIndex(sourceFile, importSpecifier, namedImports, index) { + const prevSpecifier = namedImports.elements[index - 1]; + if (prevSpecifier) { + this.insertNodeInListAfter(sourceFile, prevSpecifier, importSpecifier); + } else { + this.insertNodeBefore( + sourceFile, + namedImports.elements[0], + importSpecifier, + !positionsAreOnSameLine(namedImports.elements[0].getStart(), namedImports.parent.parent.getStart(), sourceFile) + ); + } + } + /** + * This function should be used to insert nodes in lists when nodes don't carry separators as the part of the node range, + * i.e. arguments in arguments lists, parameters in parameter lists etc. + * Note that separators are part of the node in statements and class elements. + */ + insertNodeInListAfter(sourceFile, after, newNode, containingList = ts_formatting_exports.SmartIndenter.getContainingList(after, sourceFile)) { + if (!containingList) { + Debug.fail("node is not a list element"); + return; + } + const index = indexOfNode(containingList, after); + if (index < 0) { + return; + } + const end = after.getEnd(); + if (index !== containingList.length - 1) { + const nextToken = getTokenAtPosition(sourceFile, after.end); + if (nextToken && isSeparator(after, nextToken)) { + const nextNode = containingList[index + 1]; + const startPos = skipWhitespacesAndLineBreaks(sourceFile.text, nextNode.getFullStart()); + const suffix = `${tokenToString(nextToken.kind)}${sourceFile.text.substring(nextToken.end, startPos)}`; + this.insertNodesAt(sourceFile, startPos, [newNode], { suffix }); + } + } else { + const afterStart = after.getStart(sourceFile); + const afterStartLinePosition = getLineStartPositionForPosition(afterStart, sourceFile); + let separator; + let multilineList = false; + if (containingList.length === 1) { + separator = 28 /* CommaToken */; + } else { + const tokenBeforeInsertPosition = findPrecedingToken(after.pos, sourceFile); + separator = isSeparator(after, tokenBeforeInsertPosition) ? tokenBeforeInsertPosition.kind : 28 /* CommaToken */; + const afterMinusOneStartLinePosition = getLineStartPositionForPosition(containingList[index - 1].getStart(sourceFile), sourceFile); + multilineList = afterMinusOneStartLinePosition !== afterStartLinePosition; + } + if (hasCommentsBeforeLineBreak(sourceFile.text, after.end) || !positionsAreOnSameLine(containingList.pos, containingList.end, sourceFile)) { + multilineList = true; + } + if (multilineList) { + this.replaceRange(sourceFile, createRange(end), factory.createToken(separator)); + const indentation = ts_formatting_exports.SmartIndenter.findFirstNonWhitespaceColumn(afterStartLinePosition, afterStart, sourceFile, this.formatContext.options); + let insertPos = skipTrivia( + sourceFile.text, + end, + /*stopAfterLineBreak*/ + true, + /*stopAtComments*/ + false + ); + while (insertPos !== end && isLineBreak(sourceFile.text.charCodeAt(insertPos - 1))) { + insertPos--; + } + this.replaceRange(sourceFile, createRange(insertPos), newNode, { indentation, prefix: this.newLineCharacter }); + } else { + this.replaceRange(sourceFile, createRange(end), newNode, { prefix: `${tokenToString(separator)} ` }); + } + } + } + parenthesizeExpression(sourceFile, expression) { + this.replaceRange(sourceFile, rangeOfNode(expression), factory.createParenthesizedExpression(expression)); + } + finishClassesWithNodesInsertedAtStart() { + this.classesWithNodesInsertedAtStart.forEach(({ node, sourceFile }) => { + const [openBraceEnd, closeBraceEnd] = getClassOrObjectBraceEnds(node, sourceFile); + if (openBraceEnd !== void 0 && closeBraceEnd !== void 0) { + const isEmpty = getMembersOrProperties(node).length === 0; + const isSingleLine = positionsAreOnSameLine(openBraceEnd, closeBraceEnd, sourceFile); + if (isEmpty && isSingleLine && openBraceEnd !== closeBraceEnd - 1) { + this.deleteRange(sourceFile, createRange(openBraceEnd, closeBraceEnd - 1)); + } + if (isSingleLine) { + this.insertText(sourceFile, closeBraceEnd - 1, this.newLineCharacter); + } + } + }); + } + finishDeleteDeclarations() { + const deletedNodesInLists = /* @__PURE__ */ new Set(); + for (const { sourceFile, node } of this.deletedNodes) { + if (!this.deletedNodes.some((d) => d.sourceFile === sourceFile && rangeContainsRangeExclusive(d.node, node))) { + if (isArray(node)) { + this.deleteRange(sourceFile, rangeOfTypeParameters(sourceFile, node)); + } else { + deleteDeclaration.deleteDeclaration(this, deletedNodesInLists, sourceFile, node); + } + } + } + deletedNodesInLists.forEach((node) => { + const sourceFile = node.getSourceFile(); + const list = ts_formatting_exports.SmartIndenter.getContainingList(node, sourceFile); + if (node !== last(list)) return; + const lastNonDeletedIndex = findLastIndex(list, (n) => !deletedNodesInLists.has(n), list.length - 2); + if (lastNonDeletedIndex !== -1) { + this.deleteRange(sourceFile, { pos: list[lastNonDeletedIndex].end, end: startPositionToDeleteNodeInList(sourceFile, list[lastNonDeletedIndex + 1]) }); + } + }); + } + /** + * Note: after calling this, the TextChanges object must be discarded! + * @param validate only for tests + * The reason we must validate as part of this method is that `getNonFormattedText` changes the node's positions, + * so we can only call this once and can't get the non-formatted text separately. + */ + getChanges(validate) { + this.finishDeleteDeclarations(); + this.finishClassesWithNodesInsertedAtStart(); + const changes = changesToText.getTextChangesFromChanges(this.changes, this.newLineCharacter, this.formatContext, validate); + if (this.newFileChanges) { + this.newFileChanges.forEach((insertions, fileName) => { + changes.push(changesToText.newFileChanges(fileName, insertions, this.newLineCharacter, this.formatContext)); + }); + } + return changes; + } + createNewFile(oldFile, fileName, statements) { + this.insertStatementsInNewFile(fileName, statements, oldFile); + } +}; +function updateJSDocHost(parent2) { + if (parent2.kind !== 220 /* ArrowFunction */) { + return parent2; + } + const jsDocNode = parent2.parent.kind === 173 /* PropertyDeclaration */ ? parent2.parent : parent2.parent.parent; + jsDocNode.jsDoc = parent2.jsDoc; + return jsDocNode; +} +function tryMergeJsdocTags(oldTag, newTag) { + if (oldTag.kind !== newTag.kind) { + return void 0; + } + switch (oldTag.kind) { + case 342 /* JSDocParameterTag */: { + const oldParam = oldTag; + const newParam = newTag; + return isIdentifier(oldParam.name) && isIdentifier(newParam.name) && oldParam.name.escapedText === newParam.name.escapedText ? factory.createJSDocParameterTag( + /*tagName*/ + void 0, + newParam.name, + /*isBracketed*/ + false, + newParam.typeExpression, + newParam.isNameFirst, + oldParam.comment + ) : void 0; + } + case 343 /* JSDocReturnTag */: + return factory.createJSDocReturnTag( + /*tagName*/ + void 0, + newTag.typeExpression, + oldTag.comment + ); + case 345 /* JSDocTypeTag */: + return factory.createJSDocTypeTag( + /*tagName*/ + void 0, + newTag.typeExpression, + oldTag.comment + ); + } +} +function startPositionToDeleteNodeInList(sourceFile, node) { + return skipTrivia( + sourceFile.text, + getAdjustedStartPosition(sourceFile, node, { leadingTriviaOption: 1 /* IncludeAll */ }), + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + ); +} +function endPositionToDeleteNodeInList(sourceFile, node, prevNode, nextNode) { + const end = startPositionToDeleteNodeInList(sourceFile, nextNode); + if (prevNode === void 0 || positionsAreOnSameLine(getAdjustedEndPosition(sourceFile, node, {}), end, sourceFile)) { + return end; + } + const token = findPrecedingToken(nextNode.getStart(sourceFile), sourceFile); + if (isSeparator(node, token)) { + const prevToken = findPrecedingToken(node.getStart(sourceFile), sourceFile); + if (isSeparator(prevNode, prevToken)) { + const pos = skipTrivia( + sourceFile.text, + token.getEnd(), + /*stopAfterLineBreak*/ + true, + /*stopAtComments*/ + true + ); + if (positionsAreOnSameLine(prevToken.getStart(sourceFile), token.getStart(sourceFile), sourceFile)) { + return isLineBreak(sourceFile.text.charCodeAt(pos - 1)) ? pos - 1 : pos; + } + if (isLineBreak(sourceFile.text.charCodeAt(pos))) { + return pos; + } + } + } + return end; +} +function getClassOrObjectBraceEnds(cls, sourceFile) { + const open = findChildOfKind(cls, 19 /* OpenBraceToken */, sourceFile); + const close = findChildOfKind(cls, 20 /* CloseBraceToken */, sourceFile); + return [open == null ? void 0 : open.end, close == null ? void 0 : close.end]; +} +function getMembersOrProperties(node) { + return isObjectLiteralExpression(node) ? node.properties : node.members; +} +var changesToText; +((changesToText2) => { + function getTextChangesFromChanges(changes, newLineCharacter, formatContext, validate) { + return mapDefined(group(changes, (c) => c.sourceFile.path), (changesInFile) => { + const sourceFile = changesInFile[0].sourceFile; + const normalized = toSorted(changesInFile, (a, b) => a.range.pos - b.range.pos || a.range.end - b.range.end); + for (let i = 0; i < normalized.length - 1; i++) { + Debug.assert(normalized[i].range.end <= normalized[i + 1].range.pos, "Changes overlap", () => `${JSON.stringify(normalized[i].range)} and ${JSON.stringify(normalized[i + 1].range)}`); + } + const textChanges2 = mapDefined(normalized, (c) => { + const span = createTextSpanFromRange(c.range); + const targetSourceFile = c.kind === 1 /* ReplaceWithSingleNode */ ? getSourceFileOfNode(getOriginalNode(c.node)) ?? c.sourceFile : c.kind === 2 /* ReplaceWithMultipleNodes */ ? getSourceFileOfNode(getOriginalNode(c.nodes[0])) ?? c.sourceFile : c.sourceFile; + const newText = computeNewText(c, targetSourceFile, sourceFile, newLineCharacter, formatContext, validate); + if (span.length === newText.length && stringContainsAt(targetSourceFile.text, newText, span.start)) { + return void 0; + } + return createTextChange(span, newText); + }); + return textChanges2.length > 0 ? { fileName: sourceFile.fileName, textChanges: textChanges2 } : void 0; + }); + } + changesToText2.getTextChangesFromChanges = getTextChangesFromChanges; + function newFileChanges(fileName, insertions, newLineCharacter, formatContext) { + const text = newFileChangesWorker(getScriptKindFromFileName(fileName), insertions, newLineCharacter, formatContext); + return { fileName, textChanges: [createTextChange(createTextSpan(0, 0), text)], isNewFile: true }; + } + changesToText2.newFileChanges = newFileChanges; + function newFileChangesWorker(scriptKind, insertions, newLineCharacter, formatContext) { + const nonFormattedText = flatMap(insertions, (insertion) => insertion.statements.map((s) => s === 4 /* NewLineTrivia */ ? "" : getNonformattedText(s, insertion.oldFile, newLineCharacter).text)).join(newLineCharacter); + const sourceFile = createSourceFile( + "any file name", + nonFormattedText, + { languageVersion: 99 /* ESNext */, jsDocParsingMode: 1 /* ParseNone */ }, + /*setParentNodes*/ + true, + scriptKind + ); + const changes = ts_formatting_exports.formatDocument(sourceFile, formatContext); + return applyChanges(nonFormattedText, changes) + newLineCharacter; + } + changesToText2.newFileChangesWorker = newFileChangesWorker; + function computeNewText(change, targetSourceFile, sourceFile, newLineCharacter, formatContext, validate) { + var _a; + if (change.kind === 0 /* Remove */) { + return ""; + } + if (change.kind === 3 /* Text */) { + return change.text; + } + const { options = {}, range: { pos } } = change; + const format = (n) => getFormattedTextOfNode(n, targetSourceFile, sourceFile, pos, options, newLineCharacter, formatContext, validate); + const text = change.kind === 2 /* ReplaceWithMultipleNodes */ ? change.nodes.map((n) => removeSuffix(format(n), newLineCharacter)).join(((_a = change.options) == null ? void 0 : _a.joiner) || newLineCharacter) : format(change.node); + const noIndent = options.indentation !== void 0 || getLineStartPositionForPosition(pos, targetSourceFile) === pos ? text : text.replace(/^\s+/, ""); + return (options.prefix || "") + noIndent + (!options.suffix || endsWith(noIndent, options.suffix) ? "" : options.suffix); + } + function getFormattedTextOfNode(nodeIn, targetSourceFile, sourceFile, pos, { indentation, prefix, delta }, newLineCharacter, formatContext, validate) { + const { node, text } = getNonformattedText(nodeIn, targetSourceFile, newLineCharacter); + if (validate) validate(node, text); + const formatOptions = getFormatCodeSettingsForWriting(formatContext, targetSourceFile); + const initialIndentation = indentation !== void 0 ? indentation : ts_formatting_exports.SmartIndenter.getIndentation(pos, sourceFile, formatOptions, prefix === newLineCharacter || getLineStartPositionForPosition(pos, targetSourceFile) === pos); + if (delta === void 0) { + delta = ts_formatting_exports.SmartIndenter.shouldIndentChildNode(formatOptions, nodeIn) ? formatOptions.indentSize || 0 : 0; + } + const file = { + text, + getLineAndCharacterOfPosition(pos2) { + return getLineAndCharacterOfPosition(this, pos2); + } + }; + const changes = ts_formatting_exports.formatNodeGivenIndentation(node, file, targetSourceFile.languageVariant, initialIndentation, delta, { ...formatContext, options: formatOptions }); + return applyChanges(text, changes); + } + function getNonformattedText(node, sourceFile, newLineCharacter) { + const writer = createWriter(newLineCharacter); + const newLine = getNewLineKind(newLineCharacter); + createPrinter({ + newLine, + neverAsciiEscape: true, + preserveSourceNewlines: true, + terminateUnterminatedLiterals: true + }, writer).writeNode(4 /* Unspecified */, node, sourceFile, writer); + return { text: writer.getText(), node: assignPositionsToNode(node) }; + } + changesToText2.getNonformattedText = getNonformattedText; +})(changesToText || (changesToText = {})); +function applyChanges(text, changes) { + for (let i = changes.length - 1; i >= 0; i--) { + const { span, newText } = changes[i]; + text = `${text.substring(0, span.start)}${newText}${text.substring(textSpanEnd(span))}`; + } + return text; +} +function isTrivia2(s) { + return skipTrivia(s, 0) === s.length; +} +var textChangesTransformationContext = { + ...nullTransformationContext, + factory: createNodeFactory( + nullTransformationContext.factory.flags | 1 /* NoParenthesizerRules */, + nullTransformationContext.factory.baseFactory + ) +}; +function assignPositionsToNode(node) { + const visited = visitEachChild(node, assignPositionsToNode, textChangesTransformationContext, assignPositionsToNodeArray, assignPositionsToNode); + const newNode = nodeIsSynthesized(visited) ? visited : Object.create(visited); + setTextRangePosEnd(newNode, getPos2(node), getEnd(node)); + return newNode; +} +function assignPositionsToNodeArray(nodes, visitor, test, start, count) { + const visited = visitNodes2(nodes, visitor, test, start, count); + if (!visited) { + return visited; + } + Debug.assert(nodes); + const nodeArray = visited === nodes ? factory.createNodeArray(visited.slice(0)) : visited; + setTextRangePosEnd(nodeArray, getPos2(nodes), getEnd(nodes)); + return nodeArray; +} +function createWriter(newLine) { + let lastNonTriviaPosition = 0; + const writer = createTextWriter(newLine); + const onBeforeEmitNode = (node) => { + if (node) { + setPos(node, lastNonTriviaPosition); + } + }; + const onAfterEmitNode = (node) => { + if (node) { + setEnd(node, lastNonTriviaPosition); + } + }; + const onBeforeEmitNodeArray = (nodes) => { + if (nodes) { + setPos(nodes, lastNonTriviaPosition); + } + }; + const onAfterEmitNodeArray = (nodes) => { + if (nodes) { + setEnd(nodes, lastNonTriviaPosition); + } + }; + const onBeforeEmitToken = (node) => { + if (node) { + setPos(node, lastNonTriviaPosition); + } + }; + const onAfterEmitToken = (node) => { + if (node) { + setEnd(node, lastNonTriviaPosition); + } + }; + function setLastNonTriviaPosition(s, force) { + if (force || !isTrivia2(s)) { + lastNonTriviaPosition = writer.getTextPos(); + let i = 0; + while (isWhiteSpaceLike(s.charCodeAt(s.length - i - 1))) { + i++; + } + lastNonTriviaPosition -= i; + } + } + function write(s) { + writer.write(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeComment(s) { + writer.writeComment(s); + } + function writeKeyword(s) { + writer.writeKeyword(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeOperator(s) { + writer.writeOperator(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writePunctuation(s) { + writer.writePunctuation(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeTrailingSemicolon(s) { + writer.writeTrailingSemicolon(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeParameter(s) { + writer.writeParameter(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeProperty(s) { + writer.writeProperty(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeSpace(s) { + writer.writeSpace(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeStringLiteral(s) { + writer.writeStringLiteral(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeSymbol(s, sym) { + writer.writeSymbol(s, sym); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeLine(force) { + writer.writeLine(force); + } + function increaseIndent() { + writer.increaseIndent(); + } + function decreaseIndent() { + writer.decreaseIndent(); + } + function getText() { + return writer.getText(); + } + function rawWrite(s) { + writer.rawWrite(s); + setLastNonTriviaPosition( + s, + /*force*/ + false + ); + } + function writeLiteral(s) { + writer.writeLiteral(s); + setLastNonTriviaPosition( + s, + /*force*/ + true + ); + } + function getTextPos() { + return writer.getTextPos(); + } + function getLine() { + return writer.getLine(); + } + function getColumn() { + return writer.getColumn(); + } + function getIndent() { + return writer.getIndent(); + } + function isAtStartOfLine() { + return writer.isAtStartOfLine(); + } + function clear2() { + writer.clear(); + lastNonTriviaPosition = 0; + } + return { + onBeforeEmitNode, + onAfterEmitNode, + onBeforeEmitNodeArray, + onAfterEmitNodeArray, + onBeforeEmitToken, + onAfterEmitToken, + write, + writeComment, + writeKeyword, + writeOperator, + writePunctuation, + writeTrailingSemicolon, + writeParameter, + writeProperty, + writeSpace, + writeStringLiteral, + writeSymbol, + writeLine, + increaseIndent, + decreaseIndent, + getText, + rawWrite, + writeLiteral, + getTextPos, + getLine, + getColumn, + getIndent, + isAtStartOfLine, + hasTrailingComment: () => writer.hasTrailingComment(), + hasTrailingWhitespace: () => writer.hasTrailingWhitespace(), + clear: clear2 + }; +} +function getInsertionPositionAtSourceFileTop(sourceFile) { + let lastPrologue; + for (const node of sourceFile.statements) { + if (isPrologueDirective(node)) { + lastPrologue = node; + } else { + break; + } + } + let position = 0; + const text = sourceFile.text; + if (lastPrologue) { + position = lastPrologue.end; + advancePastLineBreak(); + return position; + } + const shebang = getShebang(text); + if (shebang !== void 0) { + position = shebang.length; + advancePastLineBreak(); + } + const ranges = getLeadingCommentRanges(text, position); + if (!ranges) return position; + let lastComment; + let firstNodeLine; + for (const range of ranges) { + if (range.kind === 3 /* MultiLineCommentTrivia */) { + if (isPinnedComment(text, range.pos)) { + lastComment = { range, pinnedOrTripleSlash: true }; + continue; + } + } else if (isRecognizedTripleSlashComment(text, range.pos, range.end)) { + lastComment = { range, pinnedOrTripleSlash: true }; + continue; + } + if (lastComment) { + if (lastComment.pinnedOrTripleSlash) break; + const commentLine = sourceFile.getLineAndCharacterOfPosition(range.pos).line; + const lastCommentEndLine = sourceFile.getLineAndCharacterOfPosition(lastComment.range.end).line; + if (commentLine >= lastCommentEndLine + 2) break; + } + if (sourceFile.statements.length) { + if (firstNodeLine === void 0) firstNodeLine = sourceFile.getLineAndCharacterOfPosition(sourceFile.statements[0].getStart()).line; + const commentEndLine = sourceFile.getLineAndCharacterOfPosition(range.end).line; + if (firstNodeLine < commentEndLine + 2) break; + } + lastComment = { range, pinnedOrTripleSlash: false }; + } + if (lastComment) { + position = lastComment.range.end; + advancePastLineBreak(); + } + return position; + function advancePastLineBreak() { + if (position < text.length) { + const charCode = text.charCodeAt(position); + if (isLineBreak(charCode)) { + position++; + if (position < text.length && charCode === 13 /* carriageReturn */ && text.charCodeAt(position) === 10 /* lineFeed */) { + position++; + } + } + } + } +} +function isValidLocationToAddComment(sourceFile, position) { + return !isInComment(sourceFile, position) && !isInString(sourceFile, position) && !isInTemplateString(sourceFile, position) && !isInJSXText(sourceFile, position); +} +function needSemicolonBetween(a, b) { + return (isPropertySignature(a) || isPropertyDeclaration(a)) && isClassOrTypeElement(b) && b.name.kind === 168 /* ComputedPropertyName */ || isStatementButNotDeclaration(a) && isStatementButNotDeclaration(b); +} +var deleteDeclaration; +((_deleteDeclaration) => { + function deleteDeclaration2(changes, deletedNodesInLists, sourceFile, node) { + switch (node.kind) { + case 170 /* Parameter */: { + const oldFunction = node.parent; + if (isArrowFunction(oldFunction) && oldFunction.parameters.length === 1 && !findChildOfKind(oldFunction, 21 /* OpenParenToken */, sourceFile)) { + changes.replaceNodeWithText(sourceFile, node, "()"); + } else { + deleteNodeInList(changes, deletedNodesInLists, sourceFile, node); + } + break; + } + case 273 /* ImportDeclaration */: + case 272 /* ImportEqualsDeclaration */: + const isFirstImport = sourceFile.imports.length && node === first(sourceFile.imports).parent || node === find(sourceFile.statements, isAnyImportSyntax); + deleteNode(changes, sourceFile, node, { + leadingTriviaOption: isFirstImport ? 0 /* Exclude */ : hasJSDocNodes(node) ? 2 /* JSDoc */ : 3 /* StartLine */ + }); + break; + case 209 /* BindingElement */: + const pattern = node.parent; + const preserveComma = pattern.kind === 208 /* ArrayBindingPattern */ && node !== last(pattern.elements); + if (preserveComma) { + deleteNode(changes, sourceFile, node); + } else { + deleteNodeInList(changes, deletedNodesInLists, sourceFile, node); + } + break; + case 261 /* VariableDeclaration */: + deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node); + break; + case 169 /* TypeParameter */: + deleteNodeInList(changes, deletedNodesInLists, sourceFile, node); + break; + case 277 /* ImportSpecifier */: + const namedImports = node.parent; + if (namedImports.elements.length === 1) { + deleteImportBinding(changes, sourceFile, namedImports); + } else { + deleteNodeInList(changes, deletedNodesInLists, sourceFile, node); + } + break; + case 275 /* NamespaceImport */: + deleteImportBinding(changes, sourceFile, node); + break; + case 27 /* SemicolonToken */: + deleteNode(changes, sourceFile, node, { trailingTriviaOption: 0 /* Exclude */ }); + break; + case 100 /* FunctionKeyword */: + deleteNode(changes, sourceFile, node, { leadingTriviaOption: 0 /* Exclude */ }); + break; + case 264 /* ClassDeclaration */: + case 263 /* FunctionDeclaration */: + deleteNode(changes, sourceFile, node, { leadingTriviaOption: hasJSDocNodes(node) ? 2 /* JSDoc */ : 3 /* StartLine */ }); + break; + default: + if (!node.parent) { + deleteNode(changes, sourceFile, node); + } else if (isImportClause(node.parent) && node.parent.name === node) { + deleteDefaultImport(changes, sourceFile, node.parent); + } else if (isCallExpression(node.parent) && contains(node.parent.arguments, node)) { + deleteNodeInList(changes, deletedNodesInLists, sourceFile, node); + } else { + deleteNode(changes, sourceFile, node); + } + } + } + _deleteDeclaration.deleteDeclaration = deleteDeclaration2; + function deleteDefaultImport(changes, sourceFile, importClause) { + if (!importClause.namedBindings) { + deleteNode(changes, sourceFile, importClause.parent); + } else { + const start = importClause.name.getStart(sourceFile); + const nextToken = getTokenAtPosition(sourceFile, importClause.name.end); + if (nextToken && nextToken.kind === 28 /* CommaToken */) { + const end = skipTrivia( + sourceFile.text, + nextToken.end, + /*stopAfterLineBreak*/ + false, + /*stopAtComments*/ + true + ); + changes.deleteRange(sourceFile, { pos: start, end }); + } else { + deleteNode(changes, sourceFile, importClause.name); + } + } + } + function deleteImportBinding(changes, sourceFile, node) { + if (node.parent.name) { + const previousToken = Debug.checkDefined(getTokenAtPosition(sourceFile, node.pos - 1)); + changes.deleteRange(sourceFile, { pos: previousToken.getStart(sourceFile), end: node.end }); + } else { + const importDecl = getAncestor(node, 273 /* ImportDeclaration */); + deleteNode(changes, sourceFile, importDecl); + } + } + function deleteVariableDeclaration(changes, deletedNodesInLists, sourceFile, node) { + const { parent: parent2 } = node; + if (parent2.kind === 300 /* CatchClause */) { + changes.deleteNodeRange(sourceFile, findChildOfKind(parent2, 21 /* OpenParenToken */, sourceFile), findChildOfKind(parent2, 22 /* CloseParenToken */, sourceFile)); + return; + } + if (parent2.declarations.length !== 1) { + deleteNodeInList(changes, deletedNodesInLists, sourceFile, node); + return; + } + const gp = parent2.parent; + switch (gp.kind) { + case 251 /* ForOfStatement */: + case 250 /* ForInStatement */: + changes.replaceNode(sourceFile, node, factory.createObjectLiteralExpression()); + break; + case 249 /* ForStatement */: + deleteNode(changes, sourceFile, parent2); + break; + case 244 /* VariableStatement */: + deleteNode(changes, sourceFile, gp, { leadingTriviaOption: hasJSDocNodes(gp) ? 2 /* JSDoc */ : 3 /* StartLine */ }); + break; + default: + Debug.assertNever(gp); + } + } +})(deleteDeclaration || (deleteDeclaration = {})); +function deleteNode(changes, sourceFile, node, options = { leadingTriviaOption: 1 /* IncludeAll */ }) { + const startPosition = getAdjustedStartPosition(sourceFile, node, options); + const endPosition = getAdjustedEndPosition(sourceFile, node, options); + changes.deleteRange(sourceFile, { pos: startPosition, end: endPosition }); +} +function deleteNodeInList(changes, deletedNodesInLists, sourceFile, node) { + const containingList = Debug.checkDefined(ts_formatting_exports.SmartIndenter.getContainingList(node, sourceFile)); + const index = indexOfNode(containingList, node); + Debug.assert(index !== -1); + if (containingList.length === 1) { + deleteNode(changes, sourceFile, node); + return; + } + Debug.assert(!deletedNodesInLists.has(node), "Deleting a node twice"); + deletedNodesInLists.add(node); + changes.deleteRange(sourceFile, { + pos: startPositionToDeleteNodeInList(sourceFile, node), + end: index === containingList.length - 1 ? getAdjustedEndPosition(sourceFile, node, {}) : endPositionToDeleteNodeInList(sourceFile, node, containingList[index - 1], containingList[index + 1]) + }); +} + +// src/services/_namespaces/ts.formatting.ts +var ts_formatting_exports = {}; +__export(ts_formatting_exports, { + FormattingContext: () => FormattingContext, + FormattingRequestKind: () => FormattingRequestKind, + RuleAction: () => RuleAction, + RuleFlags: () => RuleFlags, + SmartIndenter: () => SmartIndenter, + anyContext: () => anyContext, + createTextRangeWithKind: () => createTextRangeWithKind, + formatDocument: () => formatDocument, + formatNodeGivenIndentation: () => formatNodeGivenIndentation, + formatOnClosingCurly: () => formatOnClosingCurly, + formatOnEnter: () => formatOnEnter, + formatOnOpeningCurly: () => formatOnOpeningCurly, + formatOnSemicolon: () => formatOnSemicolon, + formatSelection: () => formatSelection, + getAllRules: () => getAllRules, + getFormatContext: () => getFormatContext, + getFormattingScanner: () => getFormattingScanner, + getIndentationString: () => getIndentationString, + getRangeOfEnclosingComment: () => getRangeOfEnclosingComment +}); + +// src/services/formatting/formattingContext.ts +var FormattingRequestKind = /* @__PURE__ */ ((FormattingRequestKind2) => { + FormattingRequestKind2[FormattingRequestKind2["FormatDocument"] = 0] = "FormatDocument"; + FormattingRequestKind2[FormattingRequestKind2["FormatSelection"] = 1] = "FormatSelection"; + FormattingRequestKind2[FormattingRequestKind2["FormatOnEnter"] = 2] = "FormatOnEnter"; + FormattingRequestKind2[FormattingRequestKind2["FormatOnSemicolon"] = 3] = "FormatOnSemicolon"; + FormattingRequestKind2[FormattingRequestKind2["FormatOnOpeningCurlyBrace"] = 4] = "FormatOnOpeningCurlyBrace"; + FormattingRequestKind2[FormattingRequestKind2["FormatOnClosingCurlyBrace"] = 5] = "FormatOnClosingCurlyBrace"; + return FormattingRequestKind2; +})(FormattingRequestKind || {}); +var FormattingContext = class { + constructor(sourceFile, formattingRequestKind, options) { + this.sourceFile = sourceFile; + this.formattingRequestKind = formattingRequestKind; + this.options = options; + } + updateContext(currentRange, currentTokenParent, nextRange, nextTokenParent, commonParent) { + this.currentTokenSpan = Debug.checkDefined(currentRange); + this.currentTokenParent = Debug.checkDefined(currentTokenParent); + this.nextTokenSpan = Debug.checkDefined(nextRange); + this.nextTokenParent = Debug.checkDefined(nextTokenParent); + this.contextNode = Debug.checkDefined(commonParent); + this.contextNodeAllOnSameLine = void 0; + this.nextNodeAllOnSameLine = void 0; + this.tokensAreOnSameLine = void 0; + this.contextNodeBlockIsOnOneLine = void 0; + this.nextNodeBlockIsOnOneLine = void 0; + } + ContextNodeAllOnSameLine() { + if (this.contextNodeAllOnSameLine === void 0) { + this.contextNodeAllOnSameLine = this.NodeIsOnOneLine(this.contextNode); + } + return this.contextNodeAllOnSameLine; + } + NextNodeAllOnSameLine() { + if (this.nextNodeAllOnSameLine === void 0) { + this.nextNodeAllOnSameLine = this.NodeIsOnOneLine(this.nextTokenParent); + } + return this.nextNodeAllOnSameLine; + } + TokensAreOnSameLine() { + if (this.tokensAreOnSameLine === void 0) { + const startLine = this.sourceFile.getLineAndCharacterOfPosition(this.currentTokenSpan.pos).line; + const endLine = this.sourceFile.getLineAndCharacterOfPosition(this.nextTokenSpan.pos).line; + this.tokensAreOnSameLine = startLine === endLine; + } + return this.tokensAreOnSameLine; + } + ContextNodeBlockIsOnOneLine() { + if (this.contextNodeBlockIsOnOneLine === void 0) { + this.contextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.contextNode); + } + return this.contextNodeBlockIsOnOneLine; + } + NextNodeBlockIsOnOneLine() { + if (this.nextNodeBlockIsOnOneLine === void 0) { + this.nextNodeBlockIsOnOneLine = this.BlockIsOnOneLine(this.nextTokenParent); + } + return this.nextNodeBlockIsOnOneLine; + } + NodeIsOnOneLine(node) { + const startLine = this.sourceFile.getLineAndCharacterOfPosition(node.getStart(this.sourceFile)).line; + const endLine = this.sourceFile.getLineAndCharacterOfPosition(node.getEnd()).line; + return startLine === endLine; + } + BlockIsOnOneLine(node) { + const openBrace = findChildOfKind(node, 19 /* OpenBraceToken */, this.sourceFile); + const closeBrace = findChildOfKind(node, 20 /* CloseBraceToken */, this.sourceFile); + if (openBrace && closeBrace) { + const startLine = this.sourceFile.getLineAndCharacterOfPosition(openBrace.getEnd()).line; + const endLine = this.sourceFile.getLineAndCharacterOfPosition(closeBrace.getStart(this.sourceFile)).line; + return startLine === endLine; + } + return false; + } +}; + +// src/services/formatting/formattingScanner.ts +var standardScanner = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + false, + 0 /* Standard */ +); +var jsxScanner = createScanner( + 99 /* Latest */, + /*skipTrivia*/ + false, + 1 /* JSX */ +); +function getFormattingScanner(text, languageVariant, startPos, endPos, cb) { + const scanner2 = languageVariant === 1 /* JSX */ ? jsxScanner : standardScanner; + scanner2.setText(text); + scanner2.resetTokenState(startPos); + let wasNewLine = true; + let leadingTrivia; + let trailingTrivia; + let savedPos; + let lastScanAction; + let lastTokenInfo; + const res = cb({ + advance, + readTokenInfo, + readEOFTokenRange, + isOnToken, + isOnEOF, + getCurrentLeadingTrivia: () => leadingTrivia, + lastTrailingTriviaWasNewLine: () => wasNewLine, + skipToEndOf, + skipToStartOf, + getTokenFullStart: () => (lastTokenInfo == null ? void 0 : lastTokenInfo.token.pos) ?? scanner2.getTokenStart(), + getStartPos: () => (lastTokenInfo == null ? void 0 : lastTokenInfo.token.pos) ?? scanner2.getTokenStart() + }); + lastTokenInfo = void 0; + scanner2.setText(void 0); + return res; + function advance() { + lastTokenInfo = void 0; + const isStarted = scanner2.getTokenFullStart() !== startPos; + if (isStarted) { + wasNewLine = !!trailingTrivia && last(trailingTrivia).kind === 4 /* NewLineTrivia */; + } else { + scanner2.scan(); + } + leadingTrivia = void 0; + trailingTrivia = void 0; + let pos = scanner2.getTokenFullStart(); + while (pos < endPos) { + const t = scanner2.getToken(); + if (!isTrivia(t)) { + break; + } + scanner2.scan(); + const item = { + pos, + end: scanner2.getTokenFullStart(), + kind: t + }; + pos = scanner2.getTokenFullStart(); + leadingTrivia = append(leadingTrivia, item); + } + savedPos = scanner2.getTokenFullStart(); + } + function shouldRescanGreaterThanToken(node) { + switch (node.kind) { + case 34 /* GreaterThanEqualsToken */: + case 72 /* GreaterThanGreaterThanEqualsToken */: + case 73 /* GreaterThanGreaterThanGreaterThanEqualsToken */: + case 50 /* GreaterThanGreaterThanGreaterThanToken */: + case 49 /* GreaterThanGreaterThanToken */: + return true; + } + return false; + } + function shouldRescanJsxIdentifier(node) { + if (node.parent) { + switch (node.parent.kind) { + case 292 /* JsxAttribute */: + case 287 /* JsxOpeningElement */: + case 288 /* JsxClosingElement */: + case 286 /* JsxSelfClosingElement */: + return isKeyword(node.kind) || node.kind === 80 /* Identifier */; + } + } + return false; + } + function shouldRescanJsxText(node) { + return isJsxText(node) || isJsxElement(node) && (lastTokenInfo == null ? void 0 : lastTokenInfo.token.kind) === 12 /* JsxText */; + } + function shouldRescanSlashToken(container) { + return container.kind === 14 /* RegularExpressionLiteral */; + } + function shouldRescanTemplateToken(container) { + return container.kind === 17 /* TemplateMiddle */ || container.kind === 18 /* TemplateTail */; + } + function shouldRescanJsxAttributeValue(node) { + return node.parent && isJsxAttribute(node.parent) && node.parent.initializer === node; + } + function startsWithSlashToken(t) { + return t === 44 /* SlashToken */ || t === 69 /* SlashEqualsToken */; + } + function readTokenInfo(n) { + Debug.assert(isOnToken()); + const expectedScanAction = shouldRescanGreaterThanToken(n) ? 1 /* RescanGreaterThanToken */ : shouldRescanSlashToken(n) ? 2 /* RescanSlashToken */ : shouldRescanTemplateToken(n) ? 3 /* RescanTemplateToken */ : shouldRescanJsxIdentifier(n) ? 4 /* RescanJsxIdentifier */ : shouldRescanJsxText(n) ? 5 /* RescanJsxText */ : shouldRescanJsxAttributeValue(n) ? 6 /* RescanJsxAttributeValue */ : 0 /* Scan */; + if (lastTokenInfo && expectedScanAction === lastScanAction) { + return fixTokenKind(lastTokenInfo, n); + } + if (scanner2.getTokenFullStart() !== savedPos) { + Debug.assert(lastTokenInfo !== void 0); + scanner2.resetTokenState(savedPos); + scanner2.scan(); + } + let currentToken = getNextToken(n, expectedScanAction); + const token = createTextRangeWithKind( + scanner2.getTokenFullStart(), + scanner2.getTokenEnd(), + currentToken + ); + if (trailingTrivia) { + trailingTrivia = void 0; + } + while (scanner2.getTokenFullStart() < endPos) { + currentToken = scanner2.scan(); + if (!isTrivia(currentToken)) { + break; + } + const trivia = createTextRangeWithKind( + scanner2.getTokenFullStart(), + scanner2.getTokenEnd(), + currentToken + ); + if (!trailingTrivia) { + trailingTrivia = []; + } + trailingTrivia.push(trivia); + if (currentToken === 4 /* NewLineTrivia */) { + scanner2.scan(); + break; + } + } + lastTokenInfo = { leadingTrivia, trailingTrivia, token }; + return fixTokenKind(lastTokenInfo, n); + } + function getNextToken(n, expectedScanAction) { + const token = scanner2.getToken(); + lastScanAction = 0 /* Scan */; + switch (expectedScanAction) { + case 1 /* RescanGreaterThanToken */: + if (token === 32 /* GreaterThanToken */) { + lastScanAction = 1 /* RescanGreaterThanToken */; + const newToken = scanner2.reScanGreaterToken(); + Debug.assert(n.kind === newToken); + return newToken; + } + break; + case 2 /* RescanSlashToken */: + if (startsWithSlashToken(token)) { + lastScanAction = 2 /* RescanSlashToken */; + const newToken = scanner2.reScanSlashToken(); + Debug.assert(n.kind === newToken); + return newToken; + } + break; + case 3 /* RescanTemplateToken */: + if (token === 20 /* CloseBraceToken */) { + lastScanAction = 3 /* RescanTemplateToken */; + return scanner2.reScanTemplateToken( + /*isTaggedTemplate*/ + false + ); + } + break; + case 4 /* RescanJsxIdentifier */: + lastScanAction = 4 /* RescanJsxIdentifier */; + return scanner2.scanJsxIdentifier(); + case 5 /* RescanJsxText */: + lastScanAction = 5 /* RescanJsxText */; + return scanner2.reScanJsxToken( + /*allowMultilineJsxText*/ + false + ); + case 6 /* RescanJsxAttributeValue */: + lastScanAction = 6 /* RescanJsxAttributeValue */; + return scanner2.reScanJsxAttributeValue(); + case 0 /* Scan */: + break; + default: + Debug.assertNever(expectedScanAction); + } + return token; + } + function readEOFTokenRange() { + Debug.assert(isOnEOF()); + return createTextRangeWithKind(scanner2.getTokenFullStart(), scanner2.getTokenEnd(), 1 /* EndOfFileToken */); + } + function isOnToken() { + const current = lastTokenInfo ? lastTokenInfo.token.kind : scanner2.getToken(); + return current !== 1 /* EndOfFileToken */ && !isTrivia(current); + } + function isOnEOF() { + const current = lastTokenInfo ? lastTokenInfo.token.kind : scanner2.getToken(); + return current === 1 /* EndOfFileToken */; + } + function fixTokenKind(tokenInfo, container) { + if (isToken(container) && tokenInfo.token.kind !== container.kind) { + tokenInfo.token.kind = container.kind; + } + return tokenInfo; + } + function skipToEndOf(node) { + scanner2.resetTokenState(node.end); + savedPos = scanner2.getTokenFullStart(); + lastScanAction = void 0; + lastTokenInfo = void 0; + wasNewLine = false; + leadingTrivia = void 0; + trailingTrivia = void 0; + } + function skipToStartOf(node) { + scanner2.resetTokenState(node.pos); + savedPos = scanner2.getTokenFullStart(); + lastScanAction = void 0; + lastTokenInfo = void 0; + wasNewLine = false; + leadingTrivia = void 0; + trailingTrivia = void 0; + } +} + +// src/services/formatting/rule.ts +var anyContext = emptyArray; +var RuleAction = /* @__PURE__ */ ((RuleAction2) => { + RuleAction2[RuleAction2["None"] = 0] = "None"; + RuleAction2[RuleAction2["StopProcessingSpaceActions"] = 1] = "StopProcessingSpaceActions"; + RuleAction2[RuleAction2["StopProcessingTokenActions"] = 2] = "StopProcessingTokenActions"; + RuleAction2[RuleAction2["InsertSpace"] = 4] = "InsertSpace"; + RuleAction2[RuleAction2["InsertNewLine"] = 8] = "InsertNewLine"; + RuleAction2[RuleAction2["DeleteSpace"] = 16] = "DeleteSpace"; + RuleAction2[RuleAction2["DeleteToken"] = 32] = "DeleteToken"; + RuleAction2[RuleAction2["InsertTrailingSemicolon"] = 64] = "InsertTrailingSemicolon"; + RuleAction2[RuleAction2["StopAction"] = 3] = "StopAction"; + RuleAction2[RuleAction2["ModifySpaceAction"] = 28] = "ModifySpaceAction"; + RuleAction2[RuleAction2["ModifyTokenAction"] = 96] = "ModifyTokenAction"; + return RuleAction2; +})(RuleAction || {}); +var RuleFlags = /* @__PURE__ */ ((RuleFlags2) => { + RuleFlags2[RuleFlags2["None"] = 0] = "None"; + RuleFlags2[RuleFlags2["CanDeleteNewLines"] = 1] = "CanDeleteNewLines"; + return RuleFlags2; +})(RuleFlags || {}); + +// src/services/formatting/rules.ts +function getAllRules() { + const allTokens = []; + for (let token = 0 /* FirstToken */; token <= 166 /* LastToken */; token++) { + if (token !== 1 /* EndOfFileToken */) { + allTokens.push(token); + } + } + function anyTokenExcept(...tokens) { + return { tokens: allTokens.filter((t) => !tokens.some((t2) => t2 === t)), isSpecific: false }; + } + const anyToken = { tokens: allTokens, isSpecific: false }; + const anyTokenIncludingMultilineComments = tokenRangeFrom([...allTokens, 3 /* MultiLineCommentTrivia */]); + const anyTokenIncludingEOF = tokenRangeFrom([...allTokens, 1 /* EndOfFileToken */]); + const keywords = tokenRangeFromRange(83 /* FirstKeyword */, 166 /* LastKeyword */); + const binaryOperators = tokenRangeFromRange(30 /* FirstBinaryOperator */, 79 /* LastBinaryOperator */); + const binaryKeywordOperators = [ + 103 /* InKeyword */, + 104 /* InstanceOfKeyword */, + 165 /* OfKeyword */, + 130 /* AsKeyword */, + 142 /* IsKeyword */, + 152 /* SatisfiesKeyword */ + ]; + const unaryPrefixOperators = [46 /* PlusPlusToken */, 47 /* MinusMinusToken */, 55 /* TildeToken */, 54 /* ExclamationToken */]; + const unaryPrefixExpressions = [ + 9 /* NumericLiteral */, + 10 /* BigIntLiteral */, + 80 /* Identifier */, + 21 /* OpenParenToken */, + 23 /* OpenBracketToken */, + 19 /* OpenBraceToken */, + 110 /* ThisKeyword */, + 105 /* NewKeyword */ + ]; + const unaryPreincrementExpressions = [80 /* Identifier */, 21 /* OpenParenToken */, 110 /* ThisKeyword */, 105 /* NewKeyword */]; + const unaryPostincrementExpressions = [80 /* Identifier */, 22 /* CloseParenToken */, 24 /* CloseBracketToken */, 105 /* NewKeyword */]; + const unaryPredecrementExpressions = [80 /* Identifier */, 21 /* OpenParenToken */, 110 /* ThisKeyword */, 105 /* NewKeyword */]; + const unaryPostdecrementExpressions = [80 /* Identifier */, 22 /* CloseParenToken */, 24 /* CloseBracketToken */, 105 /* NewKeyword */]; + const comments = [2 /* SingleLineCommentTrivia */, 3 /* MultiLineCommentTrivia */]; + const typeNames = [80 /* Identifier */, ...typeKeywords]; + const functionOpenBraceLeftTokenRange = anyTokenIncludingMultilineComments; + const typeScriptOpenBraceLeftTokenRange = tokenRangeFrom([80 /* Identifier */, 32 /* GreaterThanToken */, 3 /* MultiLineCommentTrivia */, 86 /* ClassKeyword */, 95 /* ExportKeyword */, 102 /* ImportKeyword */]); + const controlOpenBraceLeftTokenRange = tokenRangeFrom([22 /* CloseParenToken */, 3 /* MultiLineCommentTrivia */, 92 /* DoKeyword */, 113 /* TryKeyword */, 98 /* FinallyKeyword */, 93 /* ElseKeyword */, 85 /* CatchKeyword */]); + const highPriorityCommonRules = [ + // Leave comments alone + rule("IgnoreBeforeComment", anyToken, comments, anyContext, 1 /* StopProcessingSpaceActions */), + rule("IgnoreAfterLineComment", 2 /* SingleLineCommentTrivia */, anyToken, anyContext, 1 /* StopProcessingSpaceActions */), + rule("NotSpaceBeforeColon", anyToken, 59 /* ColonToken */, [isNonJsxSameLineTokenContext, isNotBinaryOpContext, isNotTypeAnnotationContext], 16 /* DeleteSpace */), + rule("SpaceAfterColon", 59 /* ColonToken */, anyToken, [isNonJsxSameLineTokenContext, isNotBinaryOpContext, isNextTokenParentNotJsxNamespacedName], 4 /* InsertSpace */), + rule("NoSpaceBeforeQuestionMark", anyToken, 58 /* QuestionToken */, [isNonJsxSameLineTokenContext, isNotBinaryOpContext, isNotTypeAnnotationContext], 16 /* DeleteSpace */), + // insert space after '?' only when it is used in conditional operator + rule("SpaceAfterQuestionMarkInConditionalOperator", 58 /* QuestionToken */, anyToken, [isNonJsxSameLineTokenContext, isConditionalOperatorContext], 4 /* InsertSpace */), + // in other cases there should be no space between '?' and next token + rule("NoSpaceAfterQuestionMark", 58 /* QuestionToken */, anyToken, [isNonJsxSameLineTokenContext, isNonOptionalPropertyContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeDot", anyToken, [25 /* DotToken */, 29 /* QuestionDotToken */], [isNonJsxSameLineTokenContext, isNotPropertyAccessOnIntegerLiteral], 16 /* DeleteSpace */), + rule("NoSpaceAfterDot", [25 /* DotToken */, 29 /* QuestionDotToken */], anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBetweenImportParenInImportType", 102 /* ImportKeyword */, 21 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isImportTypeContext], 16 /* DeleteSpace */), + // Special handling of unary operators. + // Prefix operators generally shouldn't have a space between + // them and their target unary expression. + rule("NoSpaceAfterUnaryPrefixOperator", unaryPrefixOperators, unaryPrefixExpressions, [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterUnaryPreincrementOperator", 46 /* PlusPlusToken */, unaryPreincrementExpressions, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterUnaryPredecrementOperator", 47 /* MinusMinusToken */, unaryPredecrementExpressions, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeUnaryPostincrementOperator", unaryPostincrementExpressions, 46 /* PlusPlusToken */, [isNonJsxSameLineTokenContext, isNotStatementConditionContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeUnaryPostdecrementOperator", unaryPostdecrementExpressions, 47 /* MinusMinusToken */, [isNonJsxSameLineTokenContext, isNotStatementConditionContext], 16 /* DeleteSpace */), + // More unary operator special-casing. + // DevDiv 181814: Be careful when removing leading whitespace + // around unary operators. Examples: + // 1 - -2 --X--> 1--2 + // a + ++b --X--> a+++b + rule("SpaceAfterPostincrementWhenFollowedByAdd", 46 /* PlusPlusToken */, 40 /* PlusToken */, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterAddWhenFollowedByUnaryPlus", 40 /* PlusToken */, 40 /* PlusToken */, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterAddWhenFollowedByPreincrement", 40 /* PlusToken */, 46 /* PlusPlusToken */, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterPostdecrementWhenFollowedBySubtract", 47 /* MinusMinusToken */, 41 /* MinusToken */, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterSubtractWhenFollowedByUnaryMinus", 41 /* MinusToken */, 41 /* MinusToken */, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterSubtractWhenFollowedByPredecrement", 41 /* MinusToken */, 47 /* MinusMinusToken */, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("NoSpaceAfterCloseBrace", 20 /* CloseBraceToken */, [28 /* CommaToken */, 27 /* SemicolonToken */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // For functions and control block place } on a new line [multi-line rule] + rule("NewLineBeforeCloseBraceInBlockContext", anyTokenIncludingMultilineComments, 20 /* CloseBraceToken */, [isMultilineBlockContext], 8 /* InsertNewLine */), + // Space/new line after }. + rule("SpaceAfterCloseBrace", 20 /* CloseBraceToken */, anyTokenExcept(22 /* CloseParenToken */), [isNonJsxSameLineTokenContext, isAfterCodeBlockContext], 4 /* InsertSpace */), + // Special case for (}, else) and (}, while) since else & while tokens are not part of the tree which makes SpaceAfterCloseBrace rule not applied + // Also should not apply to }) + rule("SpaceBetweenCloseBraceAndElse", 20 /* CloseBraceToken */, 93 /* ElseKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceBetweenCloseBraceAndWhile", 20 /* CloseBraceToken */, 117 /* WhileKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceBetweenEmptyBraceBrackets", 19 /* OpenBraceToken */, 20 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectContext], 16 /* DeleteSpace */), + // Add a space after control dec context if the next character is an open bracket ex: 'if (false)[a, b] = [1, 2];' -> 'if (false) [a, b] = [1, 2];' + rule("SpaceAfterConditionalClosingParen", 22 /* CloseParenToken */, 23 /* OpenBracketToken */, [isControlDeclContext], 4 /* InsertSpace */), + rule("NoSpaceBetweenFunctionKeywordAndStar", 100 /* FunctionKeyword */, 42 /* AsteriskToken */, [isFunctionDeclarationOrFunctionExpressionContext], 16 /* DeleteSpace */), + rule("SpaceAfterStarInGeneratorDeclaration", 42 /* AsteriskToken */, 80 /* Identifier */, [isFunctionDeclarationOrFunctionExpressionContext], 4 /* InsertSpace */), + rule("SpaceAfterFunctionInFuncDecl", 100 /* FunctionKeyword */, anyToken, [isFunctionDeclContext], 4 /* InsertSpace */), + // Insert new line after { and before } in multi-line contexts. + rule("NewLineAfterOpenBraceInBlockContext", 19 /* OpenBraceToken */, anyToken, [isMultilineBlockContext], 8 /* InsertNewLine */), + // For get/set members, we check for (identifier,identifier) since get/set don't have tokens and they are represented as just an identifier token. + // Though, we do extra check on the context to make sure we are dealing with get/set node. Example: + // get x() {} + // set x(val) {} + rule("SpaceAfterGetSetInMember", [139 /* GetKeyword */, 153 /* SetKeyword */], 80 /* Identifier */, [isFunctionDeclContext], 4 /* InsertSpace */), + rule("NoSpaceBetweenYieldKeywordAndStar", 127 /* YieldKeyword */, 42 /* AsteriskToken */, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 16 /* DeleteSpace */), + rule("SpaceBetweenYieldOrYieldStarAndOperand", [127 /* YieldKeyword */, 42 /* AsteriskToken */], anyToken, [isNonJsxSameLineTokenContext, isYieldOrYieldStarWithOperand], 4 /* InsertSpace */), + rule("NoSpaceBetweenReturnAndSemicolon", 107 /* ReturnKeyword */, 27 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("SpaceAfterCertainKeywords", [115 /* VarKeyword */, 111 /* ThrowKeyword */, 105 /* NewKeyword */, 91 /* DeleteKeyword */, 107 /* ReturnKeyword */, 114 /* TypeOfKeyword */, 135 /* AwaitKeyword */], anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceAfterLetConstInVariableDeclaration", [121 /* LetKeyword */, 87 /* ConstKeyword */], anyToken, [isNonJsxSameLineTokenContext, isStartOfVariableDeclarationList], 4 /* InsertSpace */), + rule("NoSpaceBeforeOpenParenInFuncCall", anyToken, 21 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isFunctionCallOrNewContext, isPreviousTokenNotComma], 16 /* DeleteSpace */), + // Special case for binary operators (that are keywords). For these we have to add a space and shouldn't follow any user options. + rule("SpaceBeforeBinaryKeywordOperator", anyToken, binaryKeywordOperators, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterBinaryKeywordOperator", binaryKeywordOperators, anyToken, [isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterVoidOperator", 116 /* VoidKeyword */, anyToken, [isNonJsxSameLineTokenContext, isVoidOpContext], 4 /* InsertSpace */), + // Async-await + rule("SpaceBetweenAsyncAndOpenParen", 134 /* AsyncKeyword */, 21 /* OpenParenToken */, [isArrowFunctionContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceBetweenAsyncAndFunctionKeyword", 134 /* AsyncKeyword */, [100 /* FunctionKeyword */, 80 /* Identifier */], [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + // Template string + rule("NoSpaceBetweenTagAndTemplateString", [80 /* Identifier */, 22 /* CloseParenToken */], [15 /* NoSubstitutionTemplateLiteral */, 16 /* TemplateHead */], [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // JSX opening elements + rule("SpaceBeforeJsxAttribute", anyToken, 80 /* Identifier */, [isNextTokenParentJsxAttribute, isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceBeforeSlashInJsxOpeningElement", anyToken, 44 /* SlashToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceBeforeGreaterThanTokenInJsxOpeningElement", 44 /* SlashToken */, 32 /* GreaterThanToken */, [isJsxSelfClosingElementContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeEqualInJsxAttribute", anyToken, 64 /* EqualsToken */, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterEqualInJsxAttribute", 64 /* EqualsToken */, anyToken, [isJsxAttributeContext, isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeJsxNamespaceColon", 80 /* Identifier */, 59 /* ColonToken */, [isNextTokenParentJsxNamespacedName], 16 /* DeleteSpace */), + rule("NoSpaceAfterJsxNamespaceColon", 59 /* ColonToken */, 80 /* Identifier */, [isNextTokenParentJsxNamespacedName], 16 /* DeleteSpace */), + // TypeScript-specific rules + // Use of module as a function call. e.g.: import m2 = module("m2"); + rule("NoSpaceAfterModuleImport", [144 /* ModuleKeyword */, 149 /* RequireKeyword */], 21 /* OpenParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Add a space around certain TypeScript keywords + rule( + "SpaceAfterCertainTypeScriptKeywords", + [ + 128 /* AbstractKeyword */, + 129 /* AccessorKeyword */, + 86 /* ClassKeyword */, + 138 /* DeclareKeyword */, + 90 /* DefaultKeyword */, + 94 /* EnumKeyword */, + 95 /* ExportKeyword */, + 96 /* ExtendsKeyword */, + 139 /* GetKeyword */, + 119 /* ImplementsKeyword */, + 102 /* ImportKeyword */, + 120 /* InterfaceKeyword */, + 144 /* ModuleKeyword */, + 145 /* NamespaceKeyword */, + 123 /* PrivateKeyword */, + 125 /* PublicKeyword */, + 124 /* ProtectedKeyword */, + 148 /* ReadonlyKeyword */, + 153 /* SetKeyword */, + 126 /* StaticKeyword */, + 156 /* TypeKeyword */, + 161 /* FromKeyword */, + 143 /* KeyOfKeyword */, + 140 /* InferKeyword */ + ], + anyToken, + [isNonJsxSameLineTokenContext], + 4 /* InsertSpace */ + ), + rule( + "SpaceBeforeCertainTypeScriptKeywords", + anyToken, + [96 /* ExtendsKeyword */, 119 /* ImplementsKeyword */, 161 /* FromKeyword */], + [isNonJsxSameLineTokenContext], + 4 /* InsertSpace */ + ), + // Treat string literals in module names as identifiers, and add a space between the literal and the opening Brace braces, e.g.: module "m2" { + rule("SpaceAfterModuleName", 11 /* StringLiteral */, 19 /* OpenBraceToken */, [isModuleDeclContext], 4 /* InsertSpace */), + // Lambda expressions + rule("SpaceBeforeArrow", anyToken, 39 /* EqualsGreaterThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceAfterArrow", 39 /* EqualsGreaterThanToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + // Optional parameters and let args + rule("NoSpaceAfterEllipsis", 26 /* DotDotDotToken */, 80 /* Identifier */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterOptionalParameters", 58 /* QuestionToken */, [22 /* CloseParenToken */, 28 /* CommaToken */], [isNonJsxSameLineTokenContext, isNotBinaryOpContext], 16 /* DeleteSpace */), + // Remove spaces in empty interface literals. e.g.: x: {} + rule("NoSpaceBetweenEmptyInterfaceBraceBrackets", 19 /* OpenBraceToken */, 20 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectTypeContext], 16 /* DeleteSpace */), + // generics and type assertions + rule("NoSpaceBeforeOpenAngularBracket", typeNames, 30 /* LessThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */), + rule("NoSpaceBetweenCloseParenAndAngularBracket", 22 /* CloseParenToken */, 30 /* LessThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterOpenAngularBracket", 30 /* LessThanToken */, anyToken, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeCloseAngularBracket", anyToken, 32 /* GreaterThanToken */, [isNonJsxSameLineTokenContext, isTypeArgumentOrParameterOrAssertionContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterCloseAngularBracket", 32 /* GreaterThanToken */, [21 /* OpenParenToken */, 23 /* OpenBracketToken */, 32 /* GreaterThanToken */, 28 /* CommaToken */], [ + isNonJsxSameLineTokenContext, + isTypeArgumentOrParameterOrAssertionContext, + isNotFunctionDeclContext, + /*To prevent an interference with the SpaceBeforeOpenParenInFuncDecl rule*/ + isNonTypeAssertionContext + ], 16 /* DeleteSpace */), + // decorators + rule("SpaceBeforeAt", [22 /* CloseParenToken */, 80 /* Identifier */], 60 /* AtToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceAfterAt", 60 /* AtToken */, anyToken, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Insert space after @ in decorator + rule( + "SpaceAfterDecorator", + anyToken, + [ + 128 /* AbstractKeyword */, + 80 /* Identifier */, + 95 /* ExportKeyword */, + 90 /* DefaultKeyword */, + 86 /* ClassKeyword */, + 126 /* StaticKeyword */, + 125 /* PublicKeyword */, + 123 /* PrivateKeyword */, + 124 /* ProtectedKeyword */, + 139 /* GetKeyword */, + 153 /* SetKeyword */, + 23 /* OpenBracketToken */, + 42 /* AsteriskToken */ + ], + [isEndOfDecoratorContextOnSameLine], + 4 /* InsertSpace */ + ), + rule("NoSpaceBeforeNonNullAssertionOperator", anyToken, 54 /* ExclamationToken */, [isNonJsxSameLineTokenContext, isNonNullAssertionContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterNewKeywordOnConstructorSignature", 105 /* NewKeyword */, 21 /* OpenParenToken */, [isNonJsxSameLineTokenContext, isConstructorSignatureContext], 16 /* DeleteSpace */), + rule("SpaceLessThanAndNonJSXTypeAnnotation", 30 /* LessThanToken */, 30 /* LessThanToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */) + ]; + const userConfigurableRules = [ + // Treat constructor as an identifier in a function declaration, and remove spaces between constructor and following left parentheses + rule("SpaceAfterConstructor", 137 /* ConstructorKeyword */, 21 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceAfterConstructor", 137 /* ConstructorKeyword */, 21 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterConstructor"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("SpaceAfterComma", 28 /* CommaToken */, anyToken, [isOptionEnabled("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNextTokenNotCloseBracket, isNextTokenNotCloseParen], 4 /* InsertSpace */), + rule("NoSpaceAfterComma", 28 /* CommaToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterCommaDelimiter"), isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext], 16 /* DeleteSpace */), + // Insert space after function keyword for anonymous functions + rule("SpaceAfterAnonymousFunctionKeyword", [100 /* FunctionKeyword */, 42 /* AsteriskToken */], 21 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 4 /* InsertSpace */), + rule("NoSpaceAfterAnonymousFunctionKeyword", [100 /* FunctionKeyword */, 42 /* AsteriskToken */], 21 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterFunctionKeywordForAnonymousFunctions"), isFunctionDeclContext], 16 /* DeleteSpace */), + // Insert space after keywords in control flow statements + rule("SpaceAfterKeywordInControl", keywords, 21 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 4 /* InsertSpace */), + rule("NoSpaceAfterKeywordInControl", keywords, 21 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterKeywordsInControlFlowStatements"), isControlDeclContext], 16 /* DeleteSpace */), + // Insert space after opening and before closing nonempty parenthesis + rule("SpaceAfterOpenParen", 21 /* OpenParenToken */, anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceBeforeCloseParen", anyToken, 22 /* CloseParenToken */, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceBetweenOpenParens", 21 /* OpenParenToken */, 21 /* OpenParenToken */, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceBetweenParens", 21 /* OpenParenToken */, 22 /* CloseParenToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterOpenParen", 21 /* OpenParenToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeCloseParen", anyToken, 22 /* CloseParenToken */, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Insert space after opening and before closing nonempty brackets + rule("SpaceAfterOpenBracket", 23 /* OpenBracketToken */, anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("SpaceBeforeCloseBracket", anyToken, 24 /* CloseBracketToken */, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceBetweenBrackets", 23 /* OpenBracketToken */, 24 /* CloseBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterOpenBracket", 23 /* OpenBracketToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeCloseBracket", anyToken, 24 /* CloseBracketToken */, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Insert a space after { and before } in single-line contexts, but remove space from empty object literals {}. + rule("SpaceAfterOpenBrace", 19 /* OpenBraceToken */, anyToken, [isOptionEnabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isBraceWrappedContext], 4 /* InsertSpace */), + rule("SpaceBeforeCloseBrace", anyToken, 20 /* CloseBraceToken */, [isOptionEnabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isBraceWrappedContext], 4 /* InsertSpace */), + rule("NoSpaceBetweenEmptyBraceBrackets", 19 /* OpenBraceToken */, 20 /* CloseBraceToken */, [isNonJsxSameLineTokenContext, isObjectContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterOpenBrace", 19 /* OpenBraceToken */, anyToken, [isOptionDisabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeCloseBrace", anyToken, 20 /* CloseBraceToken */, [isOptionDisabled("insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Insert a space after opening and before closing empty brace brackets + rule("SpaceBetweenEmptyBraceBrackets", 19 /* OpenBraceToken */, 20 /* CloseBraceToken */, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingEmptyBraces")], 4 /* InsertSpace */), + rule("NoSpaceBetweenEmptyBraceBrackets", 19 /* OpenBraceToken */, 20 /* CloseBraceToken */, [isOptionDisabled("insertSpaceAfterOpeningAndBeforeClosingEmptyBraces"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Insert space after opening and before closing template string braces + rule("SpaceAfterTemplateHeadAndMiddle", [16 /* TemplateHead */, 17 /* TemplateMiddle */], anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxTextContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */), + rule("SpaceBeforeTemplateMiddleAndTail", anyToken, [17 /* TemplateMiddle */, 18 /* TemplateTail */], [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + rule("NoSpaceAfterTemplateHeadAndMiddle", [16 /* TemplateHead */, 17 /* TemplateMiddle */], anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxTextContext], 16 /* DeleteSpace */, 1 /* CanDeleteNewLines */), + rule("NoSpaceBeforeTemplateMiddleAndTail", anyToken, [17 /* TemplateMiddle */, 18 /* TemplateTail */], [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingTemplateStringBraces"), isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // No space after { and before } in JSX expression + rule("SpaceAfterOpenBraceInJsxExpression", 19 /* OpenBraceToken */, anyToken, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 4 /* InsertSpace */), + rule("SpaceBeforeCloseBraceInJsxExpression", anyToken, 20 /* CloseBraceToken */, [isOptionEnabled("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 4 /* InsertSpace */), + rule("NoSpaceAfterOpenBraceInJsxExpression", 19 /* OpenBraceToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 16 /* DeleteSpace */), + rule("NoSpaceBeforeCloseBraceInJsxExpression", anyToken, 20 /* CloseBraceToken */, [isOptionDisabledOrUndefined("insertSpaceAfterOpeningAndBeforeClosingJsxExpressionBraces"), isNonJsxSameLineTokenContext, isJsxExpressionContext], 16 /* DeleteSpace */), + // Insert space after semicolon in for statement + rule("SpaceAfterSemicolonInFor", 27 /* SemicolonToken */, anyToken, [isOptionEnabled("insertSpaceAfterSemicolonInForStatements"), isNonJsxSameLineTokenContext, isForContext], 4 /* InsertSpace */), + rule("NoSpaceAfterSemicolonInFor", 27 /* SemicolonToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterSemicolonInForStatements"), isNonJsxSameLineTokenContext, isForContext], 16 /* DeleteSpace */), + // Insert space before and after binary operators + rule("SpaceBeforeBinaryOperator", anyToken, binaryOperators, [isOptionEnabled("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("SpaceAfterBinaryOperator", binaryOperators, anyToken, [isOptionEnabled("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 4 /* InsertSpace */), + rule("NoSpaceBeforeBinaryOperator", anyToken, binaryOperators, [isOptionDisabledOrUndefined("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterBinaryOperator", binaryOperators, anyToken, [isOptionDisabledOrUndefined("insertSpaceBeforeAndAfterBinaryOperators"), isNonJsxSameLineTokenContext, isBinaryOpContext], 16 /* DeleteSpace */), + rule("SpaceBeforeOpenParenInFuncDecl", anyToken, 21 /* OpenParenToken */, [isOptionEnabled("insertSpaceBeforeFunctionParenthesis"), isNonJsxSameLineTokenContext, isFunctionDeclContext], 4 /* InsertSpace */), + rule("NoSpaceBeforeOpenParenInFuncDecl", anyToken, 21 /* OpenParenToken */, [isOptionDisabledOrUndefined("insertSpaceBeforeFunctionParenthesis"), isNonJsxSameLineTokenContext, isFunctionDeclContext], 16 /* DeleteSpace */), + // Open Brace braces after control block + rule("NewLineBeforeOpenBraceInControl", controlOpenBraceLeftTokenRange, 19 /* OpenBraceToken */, [isOptionEnabled("placeOpenBraceOnNewLineForControlBlocks"), isControlDeclContext, isBeforeMultilineBlockContext], 8 /* InsertNewLine */, 1 /* CanDeleteNewLines */), + // Open Brace braces after function + // TypeScript: Function can have return types, which can be made of tons of different token kinds + rule("NewLineBeforeOpenBraceInFunction", functionOpenBraceLeftTokenRange, 19 /* OpenBraceToken */, [isOptionEnabled("placeOpenBraceOnNewLineForFunctions"), isFunctionDeclContext, isBeforeMultilineBlockContext], 8 /* InsertNewLine */, 1 /* CanDeleteNewLines */), + // Open Brace braces after TypeScript module/class/interface + rule("NewLineBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 19 /* OpenBraceToken */, [isOptionEnabled("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isBeforeMultilineBlockContext], 8 /* InsertNewLine */, 1 /* CanDeleteNewLines */), + rule("SpaceAfterTypeAssertion", 32 /* GreaterThanToken */, anyToken, [isOptionEnabled("insertSpaceAfterTypeAssertion"), isNonJsxSameLineTokenContext, isTypeAssertionContext], 4 /* InsertSpace */), + rule("NoSpaceAfterTypeAssertion", 32 /* GreaterThanToken */, anyToken, [isOptionDisabledOrUndefined("insertSpaceAfterTypeAssertion"), isNonJsxSameLineTokenContext, isTypeAssertionContext], 16 /* DeleteSpace */), + rule("SpaceBeforeTypeAnnotation", anyToken, [58 /* QuestionToken */, 59 /* ColonToken */], [isOptionEnabled("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], 4 /* InsertSpace */), + rule("NoSpaceBeforeTypeAnnotation", anyToken, [58 /* QuestionToken */, 59 /* ColonToken */], [isOptionDisabledOrUndefined("insertSpaceBeforeTypeAnnotation"), isNonJsxSameLineTokenContext, isTypeAnnotationContext], 16 /* DeleteSpace */), + rule("NoOptionalSemicolon", 27 /* SemicolonToken */, anyTokenIncludingEOF, [optionEquals("semicolons", "remove" /* Remove */), isSemicolonDeletionContext], 32 /* DeleteToken */), + rule("OptionalSemicolon", anyToken, anyTokenIncludingEOF, [optionEquals("semicolons", "insert" /* Insert */), isSemicolonInsertionContext], 64 /* InsertTrailingSemicolon */) + ]; + const lowPriorityCommonRules = [ + // Space after keyword but not before ; or : or ? + rule("NoSpaceBeforeSemicolon", anyToken, 27 /* SemicolonToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("SpaceBeforeOpenBraceInControl", controlOpenBraceLeftTokenRange, 19 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForControlBlocks"), isControlDeclContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */), + rule("SpaceBeforeOpenBraceInFunction", functionOpenBraceLeftTokenRange, 19 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isFunctionDeclContext, isBeforeBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */), + rule("SpaceBeforeOpenBraceInTypeScriptDeclWithBlock", typeScriptOpenBraceLeftTokenRange, 19 /* OpenBraceToken */, [isOptionDisabledOrUndefinedOrTokensOnSameLine("placeOpenBraceOnNewLineForFunctions"), isTypeScriptDeclWithBlockContext, isNotFormatOnEnter, isSameLineTokenOrBeforeBlockContext], 4 /* InsertSpace */, 1 /* CanDeleteNewLines */), + rule("NoSpaceBeforeComma", anyToken, 28 /* CommaToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // No space before and after indexer `x[]` + rule("NoSpaceBeforeOpenBracket", anyTokenExcept(134 /* AsyncKeyword */, 84 /* CaseKeyword */), 23 /* OpenBracketToken */, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + rule("NoSpaceAfterCloseBracket", 24 /* CloseBracketToken */, anyToken, [isNonJsxSameLineTokenContext, isNotBeforeBlockInFunctionDeclarationContext], 16 /* DeleteSpace */), + rule("SpaceAfterSemicolon", 27 /* SemicolonToken */, anyToken, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + // Remove extra space between for and await + rule("SpaceBetweenForAndAwaitKeyword", 99 /* ForKeyword */, 135 /* AwaitKeyword */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */), + // Remove extra spaces between ... and type name in tuple spread + rule("SpaceBetweenDotDotDotAndTypeName", 26 /* DotDotDotToken */, typeNames, [isNonJsxSameLineTokenContext], 16 /* DeleteSpace */), + // Add a space between statements. All keywords except (do,else,case) has open/close parens after them. + // So, we have a rule to add a space for [),Any], [do,Any], [else,Any], and [case,Any] + rule( + "SpaceBetweenStatements", + [22 /* CloseParenToken */, 92 /* DoKeyword */, 93 /* ElseKeyword */, 84 /* CaseKeyword */], + anyToken, + [isNonJsxSameLineTokenContext, isNonJsxElementOrFragmentContext, isNotForContext], + 4 /* InsertSpace */ + ), + // This low-pri rule takes care of "try {", "catch {" and "finally {" in case the rule SpaceBeforeOpenBraceInControl didn't execute on FormatOnEnter. + rule("SpaceAfterTryCatchFinally", [113 /* TryKeyword */, 85 /* CatchKeyword */, 98 /* FinallyKeyword */], 19 /* OpenBraceToken */, [isNonJsxSameLineTokenContext], 4 /* InsertSpace */) + ]; + return [ + ...highPriorityCommonRules, + ...userConfigurableRules, + ...lowPriorityCommonRules + ]; +} +function rule(debugName, left, right, context, action, flags = 0 /* None */) { + return { leftTokenRange: toTokenRange(left), rightTokenRange: toTokenRange(right), rule: { debugName, context, action, flags } }; +} +function tokenRangeFrom(tokens) { + return { tokens, isSpecific: true }; +} +function toTokenRange(arg) { + return typeof arg === "number" ? tokenRangeFrom([arg]) : isArray(arg) ? tokenRangeFrom(arg) : arg; +} +function tokenRangeFromRange(from, to, except = []) { + const tokens = []; + for (let token = from; token <= to; token++) { + if (!contains(except, token)) { + tokens.push(token); + } + } + return tokenRangeFrom(tokens); +} +function optionEquals(optionName, optionValue) { + return (context) => context.options && context.options[optionName] === optionValue; +} +function isOptionEnabled(optionName) { + return (context) => context.options && hasProperty(context.options, optionName) && !!context.options[optionName]; +} +function isOptionDisabled(optionName) { + return (context) => context.options && hasProperty(context.options, optionName) && !context.options[optionName]; +} +function isOptionDisabledOrUndefined(optionName) { + return (context) => !context.options || !hasProperty(context.options, optionName) || !context.options[optionName]; +} +function isOptionDisabledOrUndefinedOrTokensOnSameLine(optionName) { + return (context) => !context.options || !hasProperty(context.options, optionName) || !context.options[optionName] || context.TokensAreOnSameLine(); +} +function isOptionEnabledOrUndefined(optionName) { + return (context) => !context.options || !hasProperty(context.options, optionName) || !!context.options[optionName]; +} +function isForContext(context) { + return context.contextNode.kind === 249 /* ForStatement */; +} +function isNotForContext(context) { + return !isForContext(context); +} +function isBinaryOpContext(context) { + switch (context.contextNode.kind) { + case 227 /* BinaryExpression */: + return context.contextNode.operatorToken.kind !== 28 /* CommaToken */; + case 228 /* ConditionalExpression */: + case 195 /* ConditionalType */: + case 235 /* AsExpression */: + case 282 /* ExportSpecifier */: + case 277 /* ImportSpecifier */: + case 183 /* TypePredicate */: + case 193 /* UnionType */: + case 194 /* IntersectionType */: + case 239 /* SatisfiesExpression */: + return true; + // equals in binding elements: function foo([[x, y] = [1, 2]]) + case 209 /* BindingElement */: + // equals in type X = ... + // falls through + case 266 /* TypeAliasDeclaration */: + // equal in import a = module('a'); + // falls through + case 272 /* ImportEqualsDeclaration */: + // equal in export = 1 + // falls through + case 278 /* ExportAssignment */: + // equal in let a = 0 + // falls through + case 261 /* VariableDeclaration */: + // equal in p = 0 + // falls through + case 170 /* Parameter */: + case 307 /* EnumMember */: + case 173 /* PropertyDeclaration */: + case 172 /* PropertySignature */: + return context.currentTokenSpan.kind === 64 /* EqualsToken */ || context.nextTokenSpan.kind === 64 /* EqualsToken */; + // "in" keyword in for (let x in []) { } + case 250 /* ForInStatement */: + // "in" keyword in [P in keyof T]: T[P] + // falls through + case 169 /* TypeParameter */: + return context.currentTokenSpan.kind === 103 /* InKeyword */ || context.nextTokenSpan.kind === 103 /* InKeyword */ || context.currentTokenSpan.kind === 64 /* EqualsToken */ || context.nextTokenSpan.kind === 64 /* EqualsToken */; + // Technically, "of" is not a binary operator, but format it the same way as "in" + case 251 /* ForOfStatement */: + return context.currentTokenSpan.kind === 165 /* OfKeyword */ || context.nextTokenSpan.kind === 165 /* OfKeyword */; + } + return false; +} +function isNotBinaryOpContext(context) { + return !isBinaryOpContext(context); +} +function isNotTypeAnnotationContext(context) { + return !isTypeAnnotationContext(context); +} +function isTypeAnnotationContext(context) { + const contextKind = context.contextNode.kind; + return contextKind === 173 /* PropertyDeclaration */ || contextKind === 172 /* PropertySignature */ || contextKind === 170 /* Parameter */ || contextKind === 261 /* VariableDeclaration */ || isFunctionLikeKind(contextKind); +} +function isOptionalPropertyContext(context) { + return isPropertyDeclaration(context.contextNode) && context.contextNode.questionToken; +} +function isNonOptionalPropertyContext(context) { + return !isOptionalPropertyContext(context); +} +function isConditionalOperatorContext(context) { + return context.contextNode.kind === 228 /* ConditionalExpression */ || context.contextNode.kind === 195 /* ConditionalType */; +} +function isSameLineTokenOrBeforeBlockContext(context) { + return context.TokensAreOnSameLine() || isBeforeBlockContext(context); +} +function isBraceWrappedContext(context) { + return context.contextNode.kind === 207 /* ObjectBindingPattern */ || context.contextNode.kind === 201 /* MappedType */ || isSingleLineBlockContext(context); +} +function isBeforeMultilineBlockContext(context) { + return isBeforeBlockContext(context) && !(context.NextNodeAllOnSameLine() || context.NextNodeBlockIsOnOneLine()); +} +function isMultilineBlockContext(context) { + return isBlockContext(context) && !(context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); +} +function isSingleLineBlockContext(context) { + return isBlockContext(context) && (context.ContextNodeAllOnSameLine() || context.ContextNodeBlockIsOnOneLine()); +} +function isBlockContext(context) { + return nodeIsBlockContext(context.contextNode); +} +function isBeforeBlockContext(context) { + return nodeIsBlockContext(context.nextTokenParent); +} +function nodeIsBlockContext(node) { + if (nodeIsTypeScriptDeclWithBlockContext(node)) { + return true; + } + switch (node.kind) { + case 242 /* Block */: + case 270 /* CaseBlock */: + case 211 /* ObjectLiteralExpression */: + case 269 /* ModuleBlock */: + return true; + } + return false; +} +function isFunctionDeclContext(context) { + switch (context.contextNode.kind) { + case 263 /* FunctionDeclaration */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + // case SyntaxKind.MemberFunctionDeclaration: + // falls through + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + // case SyntaxKind.MethodSignature: + // falls through + case 180 /* CallSignature */: + case 219 /* FunctionExpression */: + case 177 /* Constructor */: + case 220 /* ArrowFunction */: + // case SyntaxKind.ConstructorDeclaration: + // case SyntaxKind.SimpleArrowFunctionExpression: + // case SyntaxKind.ParenthesizedArrowFunctionExpression: + // falls through + case 265 /* InterfaceDeclaration */: + return true; + } + return false; +} +function isNotFunctionDeclContext(context) { + return !isFunctionDeclContext(context); +} +function isFunctionDeclarationOrFunctionExpressionContext(context) { + return context.contextNode.kind === 263 /* FunctionDeclaration */ || context.contextNode.kind === 219 /* FunctionExpression */; +} +function isTypeScriptDeclWithBlockContext(context) { + return nodeIsTypeScriptDeclWithBlockContext(context.contextNode); +} +function nodeIsTypeScriptDeclWithBlockContext(node) { + switch (node.kind) { + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 188 /* TypeLiteral */: + case 268 /* ModuleDeclaration */: + case 279 /* ExportDeclaration */: + case 280 /* NamedExports */: + case 273 /* ImportDeclaration */: + case 276 /* NamedImports */: + return true; + } + return false; +} +function isAfterCodeBlockContext(context) { + switch (context.currentTokenParent.kind) { + case 264 /* ClassDeclaration */: + case 268 /* ModuleDeclaration */: + case 267 /* EnumDeclaration */: + case 300 /* CatchClause */: + case 269 /* ModuleBlock */: + case 256 /* SwitchStatement */: + return true; + case 242 /* Block */: { + const blockParent = context.currentTokenParent.parent; + if (!blockParent || blockParent.kind !== 220 /* ArrowFunction */ && blockParent.kind !== 219 /* FunctionExpression */) { + return true; + } + } + } + return false; +} +function isControlDeclContext(context) { + switch (context.contextNode.kind) { + case 246 /* IfStatement */: + case 256 /* SwitchStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 248 /* WhileStatement */: + case 259 /* TryStatement */: + case 247 /* DoStatement */: + case 255 /* WithStatement */: + // TODO + // case SyntaxKind.ElseClause: + // falls through + case 300 /* CatchClause */: + return true; + default: + return false; + } +} +function isObjectContext(context) { + return context.contextNode.kind === 211 /* ObjectLiteralExpression */; +} +function isFunctionCallContext(context) { + return context.contextNode.kind === 214 /* CallExpression */; +} +function isNewContext(context) { + return context.contextNode.kind === 215 /* NewExpression */; +} +function isFunctionCallOrNewContext(context) { + return isFunctionCallContext(context) || isNewContext(context); +} +function isPreviousTokenNotComma(context) { + return context.currentTokenSpan.kind !== 28 /* CommaToken */; +} +function isNextTokenNotCloseBracket(context) { + return context.nextTokenSpan.kind !== 24 /* CloseBracketToken */; +} +function isNextTokenNotCloseParen(context) { + return context.nextTokenSpan.kind !== 22 /* CloseParenToken */; +} +function isArrowFunctionContext(context) { + return context.contextNode.kind === 220 /* ArrowFunction */; +} +function isImportTypeContext(context) { + return context.contextNode.kind === 206 /* ImportType */; +} +function isNonJsxSameLineTokenContext(context) { + return context.TokensAreOnSameLine() && context.contextNode.kind !== 12 /* JsxText */; +} +function isNonJsxTextContext(context) { + return context.contextNode.kind !== 12 /* JsxText */; +} +function isNonJsxElementOrFragmentContext(context) { + return context.contextNode.kind !== 285 /* JsxElement */ && context.contextNode.kind !== 289 /* JsxFragment */; +} +function isJsxExpressionContext(context) { + return context.contextNode.kind === 295 /* JsxExpression */ || context.contextNode.kind === 294 /* JsxSpreadAttribute */; +} +function isNextTokenParentJsxAttribute(context) { + return context.nextTokenParent.kind === 292 /* JsxAttribute */ || context.nextTokenParent.kind === 296 /* JsxNamespacedName */ && context.nextTokenParent.parent.kind === 292 /* JsxAttribute */; +} +function isJsxAttributeContext(context) { + return context.contextNode.kind === 292 /* JsxAttribute */; +} +function isNextTokenParentNotJsxNamespacedName(context) { + return context.nextTokenParent.kind !== 296 /* JsxNamespacedName */; +} +function isNextTokenParentJsxNamespacedName(context) { + return context.nextTokenParent.kind === 296 /* JsxNamespacedName */; +} +function isJsxSelfClosingElementContext(context) { + return context.contextNode.kind === 286 /* JsxSelfClosingElement */; +} +function isNotBeforeBlockInFunctionDeclarationContext(context) { + return !isFunctionDeclContext(context) && !isBeforeBlockContext(context); +} +function isEndOfDecoratorContextOnSameLine(context) { + return context.TokensAreOnSameLine() && hasDecorators(context.contextNode) && nodeIsInDecoratorContext(context.currentTokenParent) && !nodeIsInDecoratorContext(context.nextTokenParent); +} +function nodeIsInDecoratorContext(node) { + while (node && isExpression(node)) { + node = node.parent; + } + return node && node.kind === 171 /* Decorator */; +} +function isStartOfVariableDeclarationList(context) { + return context.currentTokenParent.kind === 262 /* VariableDeclarationList */ && context.currentTokenParent.getStart(context.sourceFile) === context.currentTokenSpan.pos; +} +function isNotFormatOnEnter(context) { + return context.formattingRequestKind !== 2 /* FormatOnEnter */; +} +function isModuleDeclContext(context) { + return context.contextNode.kind === 268 /* ModuleDeclaration */; +} +function isObjectTypeContext(context) { + return context.contextNode.kind === 188 /* TypeLiteral */; +} +function isConstructorSignatureContext(context) { + return context.contextNode.kind === 181 /* ConstructSignature */; +} +function isTypeArgumentOrParameterOrAssertion(token, parent2) { + if (token.kind !== 30 /* LessThanToken */ && token.kind !== 32 /* GreaterThanToken */) { + return false; + } + switch (parent2.kind) { + case 184 /* TypeReference */: + case 217 /* TypeAssertionExpression */: + case 266 /* TypeAliasDeclaration */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 234 /* ExpressionWithTypeArguments */: + return true; + default: + return false; + } +} +function isTypeArgumentOrParameterOrAssertionContext(context) { + return isTypeArgumentOrParameterOrAssertion(context.currentTokenSpan, context.currentTokenParent) || isTypeArgumentOrParameterOrAssertion(context.nextTokenSpan, context.nextTokenParent); +} +function isTypeAssertionContext(context) { + return context.contextNode.kind === 217 /* TypeAssertionExpression */; +} +function isNonTypeAssertionContext(context) { + return !isTypeAssertionContext(context); +} +function isVoidOpContext(context) { + return context.currentTokenSpan.kind === 116 /* VoidKeyword */ && context.currentTokenParent.kind === 223 /* VoidExpression */; +} +function isYieldOrYieldStarWithOperand(context) { + return context.contextNode.kind === 230 /* YieldExpression */ && context.contextNode.expression !== void 0; +} +function isNonNullAssertionContext(context) { + return context.contextNode.kind === 236 /* NonNullExpression */; +} +function isNotStatementConditionContext(context) { + return !isStatementConditionContext(context); +} +function isStatementConditionContext(context) { + switch (context.contextNode.kind) { + case 246 /* IfStatement */: + case 249 /* ForStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + return true; + default: + return false; + } +} +function isSemicolonDeletionContext(context) { + let nextTokenKind = context.nextTokenSpan.kind; + let nextTokenStart = context.nextTokenSpan.pos; + if (isTrivia(nextTokenKind)) { + const nextRealToken = context.nextTokenParent === context.currentTokenParent ? findNextToken( + context.currentTokenParent, + findAncestor(context.currentTokenParent, (a) => !a.parent), + context.sourceFile + ) : context.nextTokenParent.getFirstToken(context.sourceFile); + if (!nextRealToken) { + return true; + } + nextTokenKind = nextRealToken.kind; + nextTokenStart = nextRealToken.getStart(context.sourceFile); + } + const startLine = context.sourceFile.getLineAndCharacterOfPosition(context.currentTokenSpan.pos).line; + const endLine = context.sourceFile.getLineAndCharacterOfPosition(nextTokenStart).line; + if (startLine === endLine) { + return nextTokenKind === 20 /* CloseBraceToken */ || nextTokenKind === 1 /* EndOfFileToken */; + } + if (nextTokenKind === 27 /* SemicolonToken */ && context.currentTokenSpan.kind === 27 /* SemicolonToken */) { + return true; + } + if (nextTokenKind === 241 /* SemicolonClassElement */ || nextTokenKind === 27 /* SemicolonToken */) { + return false; + } + if (context.contextNode.kind === 265 /* InterfaceDeclaration */ || context.contextNode.kind === 266 /* TypeAliasDeclaration */) { + return !isPropertySignature(context.currentTokenParent) || !!context.currentTokenParent.type || nextTokenKind !== 21 /* OpenParenToken */; + } + if (isPropertyDeclaration(context.currentTokenParent)) { + return !context.currentTokenParent.initializer; + } + return context.currentTokenParent.kind !== 249 /* ForStatement */ && context.currentTokenParent.kind !== 243 /* EmptyStatement */ && context.currentTokenParent.kind !== 241 /* SemicolonClassElement */ && nextTokenKind !== 23 /* OpenBracketToken */ && nextTokenKind !== 21 /* OpenParenToken */ && nextTokenKind !== 40 /* PlusToken */ && nextTokenKind !== 41 /* MinusToken */ && nextTokenKind !== 44 /* SlashToken */ && nextTokenKind !== 14 /* RegularExpressionLiteral */ && nextTokenKind !== 28 /* CommaToken */ && nextTokenKind !== 229 /* TemplateExpression */ && nextTokenKind !== 16 /* TemplateHead */ && nextTokenKind !== 15 /* NoSubstitutionTemplateLiteral */ && nextTokenKind !== 25 /* DotToken */; +} +function isSemicolonInsertionContext(context) { + return positionIsASICandidate(context.currentTokenSpan.end, context.currentTokenParent, context.sourceFile); +} +function isNotPropertyAccessOnIntegerLiteral(context) { + return !isPropertyAccessExpression(context.contextNode) || !isNumericLiteral(context.contextNode.expression) || context.contextNode.expression.getText().includes("."); +} + +// src/services/formatting/rulesMap.ts +function getFormatContext(options, host) { + return { options, getRules: getRulesMap(), host }; +} +var rulesMapCache; +function getRulesMap() { + if (rulesMapCache === void 0) { + rulesMapCache = createRulesMap(getAllRules()); + } + return rulesMapCache; +} +function getRuleActionExclusion(ruleAction) { + let mask2 = 0 /* None */; + if (ruleAction & 1 /* StopProcessingSpaceActions */) { + mask2 |= 28 /* ModifySpaceAction */; + } + if (ruleAction & 2 /* StopProcessingTokenActions */) { + mask2 |= 96 /* ModifyTokenAction */; + } + if (ruleAction & 28 /* ModifySpaceAction */) { + mask2 |= 28 /* ModifySpaceAction */; + } + if (ruleAction & 96 /* ModifyTokenAction */) { + mask2 |= 96 /* ModifyTokenAction */; + } + return mask2; +} +function createRulesMap(rules) { + const map2 = buildMap(rules); + return (context) => { + const bucket = map2[getRuleBucketIndex(context.currentTokenSpan.kind, context.nextTokenSpan.kind)]; + if (bucket) { + const rules2 = []; + let ruleActionMask = 0; + for (const rule2 of bucket) { + const acceptRuleActions = ~getRuleActionExclusion(ruleActionMask); + if (rule2.action & acceptRuleActions && every(rule2.context, (c) => c(context))) { + rules2.push(rule2); + ruleActionMask |= rule2.action; + } + } + if (rules2.length) { + return rules2; + } + } + }; +} +function buildMap(rules) { + const map2 = new Array(mapRowLength * mapRowLength); + const rulesBucketConstructionStateList = new Array(map2.length); + for (const rule2 of rules) { + const specificRule = rule2.leftTokenRange.isSpecific && rule2.rightTokenRange.isSpecific; + for (const left of rule2.leftTokenRange.tokens) { + for (const right of rule2.rightTokenRange.tokens) { + const index = getRuleBucketIndex(left, right); + let rulesBucket = map2[index]; + if (rulesBucket === void 0) { + rulesBucket = map2[index] = []; + } + addRule(rulesBucket, rule2.rule, specificRule, rulesBucketConstructionStateList, index); + } + } + } + return map2; +} +function getRuleBucketIndex(row, column) { + Debug.assert(row <= 166 /* LastKeyword */ && column <= 166 /* LastKeyword */, "Must compute formatting context from tokens"); + return row * mapRowLength + column; +} +var maskBitSize = 5; +var mask = 31; +var mapRowLength = 166 /* LastToken */ + 1; +var RulesPosition = ((RulesPosition2) => { + RulesPosition2[RulesPosition2["StopRulesSpecific"] = 0] = "StopRulesSpecific"; + RulesPosition2[RulesPosition2["StopRulesAny"] = maskBitSize * 1] = "StopRulesAny"; + RulesPosition2[RulesPosition2["ContextRulesSpecific"] = maskBitSize * 2] = "ContextRulesSpecific"; + RulesPosition2[RulesPosition2["ContextRulesAny"] = maskBitSize * 3] = "ContextRulesAny"; + RulesPosition2[RulesPosition2["NoContextRulesSpecific"] = maskBitSize * 4] = "NoContextRulesSpecific"; + RulesPosition2[RulesPosition2["NoContextRulesAny"] = maskBitSize * 5] = "NoContextRulesAny"; + return RulesPosition2; +})(RulesPosition || {}); +function addRule(rules, rule2, specificTokens, constructionState, rulesBucketIndex) { + const position = rule2.action & 3 /* StopAction */ ? specificTokens ? 0 /* StopRulesSpecific */ : RulesPosition.StopRulesAny : rule2.context !== anyContext ? specificTokens ? RulesPosition.ContextRulesSpecific : RulesPosition.ContextRulesAny : specificTokens ? RulesPosition.NoContextRulesSpecific : RulesPosition.NoContextRulesAny; + const state = constructionState[rulesBucketIndex] || 0; + rules.splice(getInsertionIndex(state, position), 0, rule2); + constructionState[rulesBucketIndex] = increaseInsertionIndex(state, position); +} +function getInsertionIndex(indexBitmap, maskPosition) { + let index = 0; + for (let pos = 0; pos <= maskPosition; pos += maskBitSize) { + index += indexBitmap & mask; + indexBitmap >>= maskBitSize; + } + return index; +} +function increaseInsertionIndex(indexBitmap, maskPosition) { + const value = (indexBitmap >> maskPosition & mask) + 1; + Debug.assert((value & mask) === value, "Adding more rules into the sub-bucket than allowed. Maximum allowed is 32 rules."); + return indexBitmap & ~(mask << maskPosition) | value << maskPosition; +} + +// src/services/formatting/formatting.ts +function createTextRangeWithKind(pos, end, kind) { + const textRangeWithKind = { pos, end, kind }; + if (Debug.isDebugging) { + Object.defineProperty(textRangeWithKind, "__debugKind", { + get: () => Debug.formatSyntaxKind(kind) + }); + } + return textRangeWithKind; +} +function formatOnEnter(position, sourceFile, formatContext) { + const line = sourceFile.getLineAndCharacterOfPosition(position).line; + if (line === 0) { + return []; + } + let endOfFormatSpan = getEndLinePosition(line, sourceFile); + while (isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(endOfFormatSpan))) { + endOfFormatSpan--; + } + if (isLineBreak(sourceFile.text.charCodeAt(endOfFormatSpan))) { + endOfFormatSpan--; + } + const span = { + // get start position for the previous line + pos: getStartPositionOfLine(line - 1, sourceFile), + // end value is exclusive so add 1 to the result + end: endOfFormatSpan + 1 + }; + return formatSpan(span, sourceFile, formatContext, 2 /* FormatOnEnter */); +} +function formatOnSemicolon(position, sourceFile, formatContext) { + const semicolon = findImmediatelyPrecedingTokenOfKind(position, 27 /* SemicolonToken */, sourceFile); + return formatNodeLines(findOutermostNodeWithinListLevel(semicolon), sourceFile, formatContext, 3 /* FormatOnSemicolon */); +} +function formatOnOpeningCurly(position, sourceFile, formatContext) { + const openingCurly = findImmediatelyPrecedingTokenOfKind(position, 19 /* OpenBraceToken */, sourceFile); + if (!openingCurly) { + return []; + } + const curlyBraceRange = openingCurly.parent; + const outermostNode = findOutermostNodeWithinListLevel(curlyBraceRange); + const textRange = { + pos: getLineStartPositionForPosition(outermostNode.getStart(sourceFile), sourceFile), + // TODO: GH#18217 + end: position + }; + return formatSpan(textRange, sourceFile, formatContext, 4 /* FormatOnOpeningCurlyBrace */); +} +function formatOnClosingCurly(position, sourceFile, formatContext) { + const precedingToken = findImmediatelyPrecedingTokenOfKind(position, 20 /* CloseBraceToken */, sourceFile); + return formatNodeLines(findOutermostNodeWithinListLevel(precedingToken), sourceFile, formatContext, 5 /* FormatOnClosingCurlyBrace */); +} +function formatDocument(sourceFile, formatContext) { + const span = { + pos: 0, + end: sourceFile.text.length + }; + return formatSpan(span, sourceFile, formatContext, 0 /* FormatDocument */); +} +function formatSelection(start, end, sourceFile, formatContext) { + const span = { + pos: getLineStartPositionForPosition(start, sourceFile), + end + }; + return formatSpan(span, sourceFile, formatContext, 1 /* FormatSelection */); +} +function findImmediatelyPrecedingTokenOfKind(end, expectedTokenKind, sourceFile) { + const precedingToken = findPrecedingToken(end, sourceFile); + return precedingToken && precedingToken.kind === expectedTokenKind && end === precedingToken.getEnd() ? precedingToken : void 0; +} +function findOutermostNodeWithinListLevel(node) { + let current = node; + while (current && current.parent && current.parent.end === node.end && !isListElement(current.parent, current)) { + current = current.parent; + } + return current; +} +function isListElement(parent2, node) { + switch (parent2.kind) { + case 264 /* ClassDeclaration */: + case 265 /* InterfaceDeclaration */: + return rangeContainsRange(parent2.members, node); + case 268 /* ModuleDeclaration */: + const body = parent2.body; + return !!body && body.kind === 269 /* ModuleBlock */ && rangeContainsRange(body.statements, node); + case 308 /* SourceFile */: + case 242 /* Block */: + case 269 /* ModuleBlock */: + return rangeContainsRange(parent2.statements, node); + case 300 /* CatchClause */: + return rangeContainsRange(parent2.block.statements, node); + } + return false; +} +function findEnclosingNode(range, sourceFile) { + return find2(sourceFile); + function find2(n) { + const candidate = forEachChild(n, (c) => startEndContainsRange(c.getStart(sourceFile), c.end, range) && c); + if (candidate) { + const result = find2(candidate); + if (result) { + return result; + } + } + return n; + } +} +function prepareRangeContainsErrorFunction(errors, originalRange) { + if (!errors.length) { + return rangeHasNoErrors; + } + const sorted = errors.filter((d) => rangeOverlapsWithStartEnd(originalRange, d.start, d.start + d.length)).sort((e1, e2) => e1.start - e2.start); + if (!sorted.length) { + return rangeHasNoErrors; + } + let index = 0; + return (r) => { + while (true) { + if (index >= sorted.length) { + return false; + } + const error2 = sorted[index]; + if (r.end <= error2.start) { + return false; + } + if (startEndOverlapsWithStartEnd(r.pos, r.end, error2.start, error2.start + error2.length)) { + return true; + } + index++; + } + }; + function rangeHasNoErrors() { + return false; + } +} +function getScanStartPosition(enclosingNode, originalRange, sourceFile) { + const start = enclosingNode.getStart(sourceFile); + if (start === originalRange.pos && enclosingNode.end === originalRange.end) { + return start; + } + const precedingToken = findPrecedingToken(originalRange.pos, sourceFile); + if (!precedingToken) { + return enclosingNode.pos; + } + if (precedingToken.end >= originalRange.pos) { + return enclosingNode.pos; + } + return precedingToken.end; +} +function getOwnOrInheritedDelta(n, options, sourceFile) { + let previousLine = -1 /* Unknown */; + let child; + while (n) { + const line = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)).line; + if (previousLine !== -1 /* Unknown */ && line !== previousLine) { + break; + } + if (SmartIndenter.shouldIndentChildNode(options, n, child, sourceFile)) { + return options.indentSize; + } + previousLine = line; + child = n; + n = n.parent; + } + return 0; +} +function formatNodeGivenIndentation(node, sourceFileLike, languageVariant, initialIndentation, delta, formatContext) { + const range = { pos: node.pos, end: node.end }; + return getFormattingScanner(sourceFileLike.text, languageVariant, range.pos, range.end, (scanner2) => formatSpanWorker( + range, + node, + initialIndentation, + delta, + scanner2, + formatContext, + 1 /* FormatSelection */, + (_) => false, + // assume that node does not have any errors + sourceFileLike + )); +} +function formatNodeLines(node, sourceFile, formatContext, requestKind) { + if (!node) { + return []; + } + const span = { + pos: getLineStartPositionForPosition(node.getStart(sourceFile), sourceFile), + end: node.end + }; + return formatSpan(span, sourceFile, formatContext, requestKind); +} +function formatSpan(originalRange, sourceFile, formatContext, requestKind) { + const enclosingNode = findEnclosingNode(originalRange, sourceFile); + return getFormattingScanner( + sourceFile.text, + sourceFile.languageVariant, + getScanStartPosition(enclosingNode, originalRange, sourceFile), + originalRange.end, + (scanner2) => formatSpanWorker( + originalRange, + enclosingNode, + SmartIndenter.getIndentationForNode(enclosingNode, originalRange, sourceFile, formatContext.options), + getOwnOrInheritedDelta(enclosingNode, formatContext.options, sourceFile), + scanner2, + formatContext, + requestKind, + prepareRangeContainsErrorFunction(sourceFile.parseDiagnostics, originalRange), + sourceFile + ) + ); +} +function formatSpanWorker(originalRange, enclosingNode, initialIndentation, delta, formattingScanner, { options, getRules, host }, requestKind, rangeContainsError, sourceFile) { + var _a; + const formattingContext = new FormattingContext(sourceFile, requestKind, options); + let previousRangeTriviaEnd; + let previousRange; + let previousParent; + let previousRangeStartLine; + let lastIndentedLine; + let indentationOnLastIndentedLine = -1 /* Unknown */; + const edits = []; + formattingScanner.advance(); + if (formattingScanner.isOnToken()) { + const startLine = sourceFile.getLineAndCharacterOfPosition(enclosingNode.getStart(sourceFile)).line; + let undecoratedStartLine = startLine; + if (hasDecorators(enclosingNode)) { + undecoratedStartLine = sourceFile.getLineAndCharacterOfPosition(getNonDecoratorTokenPosOfNode(enclosingNode, sourceFile)).line; + } + processNode(enclosingNode, enclosingNode, startLine, undecoratedStartLine, initialIndentation, delta); + } + const remainingTrivia = formattingScanner.getCurrentLeadingTrivia(); + if (remainingTrivia) { + const indentation = SmartIndenter.nodeWillIndentChild( + options, + enclosingNode, + /*child*/ + void 0, + sourceFile, + /*indentByDefault*/ + false + ) ? initialIndentation + options.indentSize : initialIndentation; + indentTriviaItems( + remainingTrivia, + indentation, + /*indentNextTokenOrTrivia*/ + true, + (item) => { + processRange( + item, + sourceFile.getLineAndCharacterOfPosition(item.pos), + enclosingNode, + enclosingNode, + /*dynamicIndentation*/ + void 0 + ); + insertIndentation( + item.pos, + indentation, + /*lineAdded*/ + false + ); + } + ); + if (options.trimTrailingWhitespace !== false) { + trimTrailingWhitespacesForRemainingRange(remainingTrivia); + } + } + if (previousRange && formattingScanner.getTokenFullStart() >= originalRange.end) { + const tokenInfo = formattingScanner.isOnEOF() ? formattingScanner.readEOFTokenRange() : formattingScanner.isOnToken() ? formattingScanner.readTokenInfo(enclosingNode).token : void 0; + if (tokenInfo && tokenInfo.pos === previousRangeTriviaEnd) { + const parent2 = ((_a = findPrecedingToken(tokenInfo.end, sourceFile, enclosingNode)) == null ? void 0 : _a.parent) || previousParent; + processPair( + tokenInfo, + sourceFile.getLineAndCharacterOfPosition(tokenInfo.pos).line, + parent2, + previousRange, + previousRangeStartLine, + previousParent, + parent2, + /*dynamicIndentation*/ + void 0 + ); + } + } + return edits; + function tryComputeIndentationForListItem(startPos, endPos, parentStartLine, range, inheritedIndentation) { + if (rangeOverlapsWithStartEnd(range, startPos, endPos) || rangeContainsStartEnd(range, startPos, endPos)) { + if (inheritedIndentation !== -1 /* Unknown */) { + return inheritedIndentation; + } + } else { + const startLine = sourceFile.getLineAndCharacterOfPosition(startPos).line; + const startLinePosition = getLineStartPositionForPosition(startPos, sourceFile); + const column = SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, startPos, sourceFile, options); + if (startLine !== parentStartLine || startPos === column) { + const baseIndentSize = SmartIndenter.getBaseIndentation(options); + return baseIndentSize > column ? baseIndentSize : column; + } + } + return -1 /* Unknown */; + } + function computeIndentation(node, startLine, inheritedIndentation, parent2, parentDynamicIndentation, effectiveParentStartLine) { + const delta2 = SmartIndenter.shouldIndentChildNode(options, node) ? options.indentSize : 0; + if (effectiveParentStartLine === startLine) { + return { + indentation: startLine === lastIndentedLine ? indentationOnLastIndentedLine : parentDynamicIndentation.getIndentation(), + delta: Math.min(options.indentSize, parentDynamicIndentation.getDelta(node) + delta2) + }; + } else if (inheritedIndentation === -1 /* Unknown */) { + if (node.kind === 21 /* OpenParenToken */ && startLine === lastIndentedLine) { + return { indentation: indentationOnLastIndentedLine, delta: parentDynamicIndentation.getDelta(node) }; + } else if (SmartIndenter.childStartsOnTheSameLineWithElseInIfStatement(parent2, node, startLine, sourceFile) || SmartIndenter.childIsUnindentedBranchOfConditionalExpression(parent2, node, startLine, sourceFile) || SmartIndenter.argumentStartsOnSameLineAsPreviousArgument(parent2, node, startLine, sourceFile)) { + return { indentation: parentDynamicIndentation.getIndentation(), delta: delta2 }; + } else { + return { indentation: parentDynamicIndentation.getIndentation() + parentDynamicIndentation.getDelta(node), delta: delta2 }; + } + } else { + return { indentation: inheritedIndentation, delta: delta2 }; + } + } + function getFirstNonDecoratorTokenOfNode(node) { + if (canHaveModifiers(node)) { + const modifier = find(node.modifiers, isModifier, findIndex(node.modifiers, isDecorator)); + if (modifier) return modifier.kind; + } + switch (node.kind) { + case 264 /* ClassDeclaration */: + return 86 /* ClassKeyword */; + case 265 /* InterfaceDeclaration */: + return 120 /* InterfaceKeyword */; + case 263 /* FunctionDeclaration */: + return 100 /* FunctionKeyword */; + case 267 /* EnumDeclaration */: + return 267 /* EnumDeclaration */; + case 178 /* GetAccessor */: + return 139 /* GetKeyword */; + case 179 /* SetAccessor */: + return 153 /* SetKeyword */; + case 175 /* MethodDeclaration */: + if (node.asteriskToken) { + return 42 /* AsteriskToken */; + } + // falls through + case 173 /* PropertyDeclaration */: + case 170 /* Parameter */: + const name = getNameOfDeclaration(node); + if (name) { + return name.kind; + } + } + } + function getDynamicIndentation(node, nodeStartLine, indentation, delta2) { + return { + getIndentationForComment: (kind, tokenIndentation, container) => { + switch (kind) { + // preceding comment to the token that closes the indentation scope inherits the indentation from the scope + // .. { + // // comment + // } + case 20 /* CloseBraceToken */: + case 24 /* CloseBracketToken */: + case 22 /* CloseParenToken */: + return indentation + getDelta(container); + } + return tokenIndentation !== -1 /* Unknown */ ? tokenIndentation : indentation; + }, + // if list end token is LessThanToken '>' then its delta should be explicitly suppressed + // so that LessThanToken as a binary operator can still be indented. + // foo.then + // < + // number, + // string, + // >(); + // vs + // var a = xValue + // > yValue; + getIndentationForToken: (line, kind, container, suppressDelta) => !suppressDelta && shouldAddDelta(line, kind, container) ? indentation + getDelta(container) : indentation, + getIndentation: () => indentation, + getDelta, + recomputeIndentation: (lineAdded, parent2) => { + if (SmartIndenter.shouldIndentChildNode(options, parent2, node, sourceFile)) { + indentation += lineAdded ? options.indentSize : -options.indentSize; + delta2 = SmartIndenter.shouldIndentChildNode(options, node) ? options.indentSize : 0; + } + } + }; + function shouldAddDelta(line, kind, container) { + switch (kind) { + // open and close brace, 'else' and 'while' (in do statement) tokens has indentation of the parent + case 19 /* OpenBraceToken */: + case 20 /* CloseBraceToken */: + case 22 /* CloseParenToken */: + case 93 /* ElseKeyword */: + case 117 /* WhileKeyword */: + case 60 /* AtToken */: + return false; + case 44 /* SlashToken */: + case 32 /* GreaterThanToken */: + switch (container.kind) { + case 287 /* JsxOpeningElement */: + case 288 /* JsxClosingElement */: + case 286 /* JsxSelfClosingElement */: + return false; + } + break; + case 23 /* OpenBracketToken */: + case 24 /* CloseBracketToken */: + if (container.kind !== 201 /* MappedType */) { + return false; + } + break; + } + return nodeStartLine !== line && !(hasDecorators(node) && kind === getFirstNonDecoratorTokenOfNode(node)); + } + function getDelta(child) { + return SmartIndenter.nodeWillIndentChild( + options, + node, + child, + sourceFile, + /*indentByDefault*/ + true + ) ? delta2 : 0; + } + } + function processNode(node, contextNode, nodeStartLine, undecoratedNodeStartLine, indentation, delta2) { + if (!rangeOverlapsWithStartEnd(originalRange, node.getStart(sourceFile), node.getEnd())) { + return; + } + const nodeDynamicIndentation = getDynamicIndentation(node, nodeStartLine, indentation, delta2); + let childContextNode = contextNode; + forEachChild( + node, + (child) => { + processChildNode( + child, + /*inheritedIndentation*/ + -1 /* Unknown */, + node, + nodeDynamicIndentation, + nodeStartLine, + undecoratedNodeStartLine, + /*isListItem*/ + false + ); + }, + (nodes) => { + processChildNodes(nodes, node, nodeStartLine, nodeDynamicIndentation); + } + ); + while (formattingScanner.isOnToken() && formattingScanner.getTokenFullStart() < originalRange.end) { + const tokenInfo = formattingScanner.readTokenInfo(node); + if (tokenInfo.token.end > Math.min(node.end, originalRange.end)) { + break; + } + consumeTokenAndAdvanceScanner(tokenInfo, node, nodeDynamicIndentation, node); + } + function processChildNode(child, inheritedIndentation, parent2, parentDynamicIndentation, parentStartLine, undecoratedParentStartLine, isListItem, isFirstListItem) { + Debug.assert(!nodeIsSynthesized(child)); + if (nodeIsMissing(child) || isGrammarError(parent2, child)) { + return inheritedIndentation; + } + const childStartPos = child.getStart(sourceFile); + const childStartLine = sourceFile.getLineAndCharacterOfPosition(childStartPos).line; + let undecoratedChildStartLine = childStartLine; + if (hasDecorators(child)) { + undecoratedChildStartLine = sourceFile.getLineAndCharacterOfPosition(getNonDecoratorTokenPosOfNode(child, sourceFile)).line; + } + let childIndentationAmount = -1 /* Unknown */; + if (isListItem && rangeContainsRange(originalRange, parent2)) { + childIndentationAmount = tryComputeIndentationForListItem(childStartPos, child.end, parentStartLine, originalRange, inheritedIndentation); + if (childIndentationAmount !== -1 /* Unknown */) { + inheritedIndentation = childIndentationAmount; + } + } + if (!rangeOverlapsWithStartEnd(originalRange, child.pos, child.end)) { + if (child.end < originalRange.pos) { + formattingScanner.skipToEndOf(child); + } + return inheritedIndentation; + } + if (child.getFullWidth() === 0) { + return inheritedIndentation; + } + while (formattingScanner.isOnToken() && formattingScanner.getTokenFullStart() < originalRange.end) { + const tokenInfo = formattingScanner.readTokenInfo(node); + if (tokenInfo.token.end > originalRange.end) { + return inheritedIndentation; + } + if (tokenInfo.token.end > childStartPos) { + if (tokenInfo.token.pos > childStartPos) { + formattingScanner.skipToStartOf(child); + } + break; + } + consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, node); + } + if (!formattingScanner.isOnToken() || formattingScanner.getTokenFullStart() >= originalRange.end) { + return inheritedIndentation; + } + if (isToken(child)) { + const tokenInfo = formattingScanner.readTokenInfo(child); + if (child.kind !== 12 /* JsxText */) { + Debug.assert(tokenInfo.token.end === child.end, "Token end is child end"); + consumeTokenAndAdvanceScanner(tokenInfo, node, parentDynamicIndentation, child); + return inheritedIndentation; + } + } + const effectiveParentStartLine = child.kind === 171 /* Decorator */ ? childStartLine : undecoratedParentStartLine; + const childIndentation = computeIndentation(child, childStartLine, childIndentationAmount, node, parentDynamicIndentation, effectiveParentStartLine); + processNode(child, childContextNode, childStartLine, undecoratedChildStartLine, childIndentation.indentation, childIndentation.delta); + childContextNode = node; + if (isFirstListItem && parent2.kind === 210 /* ArrayLiteralExpression */ && inheritedIndentation === -1 /* Unknown */) { + inheritedIndentation = childIndentation.indentation; + } + return inheritedIndentation; + } + function processChildNodes(nodes, parent2, parentStartLine, parentDynamicIndentation) { + Debug.assert(isNodeArray(nodes)); + Debug.assert(!nodeIsSynthesized(nodes)); + const listStartToken = getOpenTokenForList(parent2, nodes); + let listDynamicIndentation = parentDynamicIndentation; + let startLine = parentStartLine; + if (!rangeOverlapsWithStartEnd(originalRange, nodes.pos, nodes.end)) { + if (nodes.end < originalRange.pos) { + formattingScanner.skipToEndOf(nodes); + } + return; + } + if (listStartToken !== 0 /* Unknown */) { + while (formattingScanner.isOnToken() && formattingScanner.getTokenFullStart() < originalRange.end) { + const tokenInfo = formattingScanner.readTokenInfo(parent2); + if (tokenInfo.token.end > nodes.pos) { + break; + } else if (tokenInfo.token.kind === listStartToken) { + startLine = sourceFile.getLineAndCharacterOfPosition(tokenInfo.token.pos).line; + consumeTokenAndAdvanceScanner(tokenInfo, parent2, parentDynamicIndentation, parent2); + let indentationOnListStartToken; + if (indentationOnLastIndentedLine !== -1 /* Unknown */) { + indentationOnListStartToken = indentationOnLastIndentedLine; + } else { + const startLinePosition = getLineStartPositionForPosition(tokenInfo.token.pos, sourceFile); + indentationOnListStartToken = SmartIndenter.findFirstNonWhitespaceColumn(startLinePosition, tokenInfo.token.pos, sourceFile, options); + } + listDynamicIndentation = getDynamicIndentation(parent2, parentStartLine, indentationOnListStartToken, options.indentSize); + } else { + consumeTokenAndAdvanceScanner(tokenInfo, parent2, parentDynamicIndentation, parent2); + } + } + } + let inheritedIndentation = -1 /* Unknown */; + for (let i = 0; i < nodes.length; i++) { + const child = nodes[i]; + inheritedIndentation = processChildNode( + child, + inheritedIndentation, + node, + listDynamicIndentation, + startLine, + startLine, + /*isListItem*/ + true, + /*isFirstListItem*/ + i === 0 + ); + } + const listEndToken = getCloseTokenForOpenToken(listStartToken); + if (listEndToken !== 0 /* Unknown */ && formattingScanner.isOnToken() && formattingScanner.getTokenFullStart() < originalRange.end) { + let tokenInfo = formattingScanner.readTokenInfo(parent2); + if (tokenInfo.token.kind === 28 /* CommaToken */) { + consumeTokenAndAdvanceScanner(tokenInfo, parent2, listDynamicIndentation, parent2); + tokenInfo = formattingScanner.isOnToken() ? formattingScanner.readTokenInfo(parent2) : void 0; + } + if (tokenInfo && tokenInfo.token.kind === listEndToken && rangeContainsRange(parent2, tokenInfo.token)) { + consumeTokenAndAdvanceScanner( + tokenInfo, + parent2, + listDynamicIndentation, + parent2, + /*isListEndToken*/ + true + ); + } + } + } + function consumeTokenAndAdvanceScanner(currentTokenInfo, parent2, dynamicIndentation, container, isListEndToken) { + Debug.assert(rangeContainsRange(parent2, currentTokenInfo.token)); + const lastTriviaWasNewLine = formattingScanner.lastTrailingTriviaWasNewLine(); + let indentToken = false; + if (currentTokenInfo.leadingTrivia) { + processTrivia(currentTokenInfo.leadingTrivia, parent2, childContextNode, dynamicIndentation); + } + let lineAction = 0 /* None */; + const isTokenInRange = rangeContainsRange(originalRange, currentTokenInfo.token); + const tokenStart = sourceFile.getLineAndCharacterOfPosition(currentTokenInfo.token.pos); + if (isTokenInRange) { + const rangeHasError = rangeContainsError(currentTokenInfo.token); + const savePreviousRange = previousRange; + lineAction = processRange(currentTokenInfo.token, tokenStart, parent2, childContextNode, dynamicIndentation); + if (!rangeHasError) { + if (lineAction === 0 /* None */) { + const prevEndLine = savePreviousRange && sourceFile.getLineAndCharacterOfPosition(savePreviousRange.end).line; + indentToken = lastTriviaWasNewLine && tokenStart.line !== prevEndLine; + } else { + indentToken = lineAction === 1 /* LineAdded */; + } + } + } + if (currentTokenInfo.trailingTrivia) { + previousRangeTriviaEnd = last(currentTokenInfo.trailingTrivia).end; + processTrivia(currentTokenInfo.trailingTrivia, parent2, childContextNode, dynamicIndentation); + } + if (indentToken) { + const tokenIndentation = isTokenInRange && !rangeContainsError(currentTokenInfo.token) ? dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container, !!isListEndToken) : -1 /* Unknown */; + let indentNextTokenOrTrivia = true; + if (currentTokenInfo.leadingTrivia) { + const commentIndentation = dynamicIndentation.getIndentationForComment(currentTokenInfo.token.kind, tokenIndentation, container); + indentNextTokenOrTrivia = indentTriviaItems(currentTokenInfo.leadingTrivia, commentIndentation, indentNextTokenOrTrivia, (item) => insertIndentation( + item.pos, + commentIndentation, + /*lineAdded*/ + false + )); + } + if (tokenIndentation !== -1 /* Unknown */ && indentNextTokenOrTrivia) { + insertIndentation(currentTokenInfo.token.pos, tokenIndentation, lineAction === 1 /* LineAdded */); + lastIndentedLine = tokenStart.line; + indentationOnLastIndentedLine = tokenIndentation; + } + } + formattingScanner.advance(); + childContextNode = parent2; + } + } + function indentTriviaItems(trivia, commentIndentation, indentNextTokenOrTrivia, indentSingleLine) { + for (const triviaItem of trivia) { + const triviaInRange = rangeContainsRange(originalRange, triviaItem); + switch (triviaItem.kind) { + case 3 /* MultiLineCommentTrivia */: + if (triviaInRange) { + indentMultilineComment( + triviaItem, + commentIndentation, + /*firstLineIsIndented*/ + !indentNextTokenOrTrivia + ); + } + indentNextTokenOrTrivia = false; + break; + case 2 /* SingleLineCommentTrivia */: + if (indentNextTokenOrTrivia && triviaInRange) { + indentSingleLine(triviaItem); + } + indentNextTokenOrTrivia = false; + break; + case 4 /* NewLineTrivia */: + indentNextTokenOrTrivia = true; + break; + } + } + return indentNextTokenOrTrivia; + } + function processTrivia(trivia, parent2, contextNode, dynamicIndentation) { + for (const triviaItem of trivia) { + if (isComment(triviaItem.kind) && rangeContainsRange(originalRange, triviaItem)) { + const triviaItemStart = sourceFile.getLineAndCharacterOfPosition(triviaItem.pos); + processRange(triviaItem, triviaItemStart, parent2, contextNode, dynamicIndentation); + } + } + } + function processRange(range, rangeStart, parent2, contextNode, dynamicIndentation) { + const rangeHasError = rangeContainsError(range); + let lineAction = 0 /* None */; + if (!rangeHasError) { + if (!previousRange) { + const originalStart = sourceFile.getLineAndCharacterOfPosition(originalRange.pos); + trimTrailingWhitespacesForLines(originalStart.line, rangeStart.line); + } else { + lineAction = processPair(range, rangeStart.line, parent2, previousRange, previousRangeStartLine, previousParent, contextNode, dynamicIndentation); + } + } + previousRange = range; + previousRangeTriviaEnd = range.end; + previousParent = parent2; + previousRangeStartLine = rangeStart.line; + return lineAction; + } + function processPair(currentItem, currentStartLine, currentParent, previousItem, previousStartLine, previousParent2, contextNode, dynamicIndentation) { + formattingContext.updateContext(previousItem, previousParent2, currentItem, currentParent, contextNode); + const rules = getRules(formattingContext); + let trimTrailingWhitespaces = formattingContext.options.trimTrailingWhitespace !== false; + let lineAction = 0 /* None */; + if (rules) { + forEachRight(rules, (rule2) => { + lineAction = applyRuleEdits(rule2, previousItem, previousStartLine, currentItem, currentStartLine); + if (dynamicIndentation) { + switch (lineAction) { + case 2 /* LineRemoved */: + if (currentParent.getStart(sourceFile) === currentItem.pos) { + dynamicIndentation.recomputeIndentation( + /*lineAddedByFormatting*/ + false, + contextNode + ); + } + break; + case 1 /* LineAdded */: + if (currentParent.getStart(sourceFile) === currentItem.pos) { + dynamicIndentation.recomputeIndentation( + /*lineAddedByFormatting*/ + true, + contextNode + ); + } + break; + default: + Debug.assert(lineAction === 0 /* None */); + } + } + trimTrailingWhitespaces = trimTrailingWhitespaces && !(rule2.action & 16 /* DeleteSpace */) && rule2.flags !== 1 /* CanDeleteNewLines */; + }); + } else { + trimTrailingWhitespaces = trimTrailingWhitespaces && currentItem.kind !== 1 /* EndOfFileToken */; + } + if (currentStartLine !== previousStartLine && trimTrailingWhitespaces) { + trimTrailingWhitespacesForLines(previousStartLine, currentStartLine, previousItem); + } + return lineAction; + } + function insertIndentation(pos, indentation, lineAdded) { + const indentationString = getIndentationString(indentation, options); + if (lineAdded) { + recordReplace(pos, 0, indentationString); + } else { + const tokenStart = sourceFile.getLineAndCharacterOfPosition(pos); + const startLinePosition = getStartPositionOfLine(tokenStart.line, sourceFile); + if (indentation !== characterToColumn(startLinePosition, tokenStart.character) || indentationIsDifferent(indentationString, startLinePosition)) { + recordReplace(startLinePosition, tokenStart.character, indentationString); + } + } + } + function characterToColumn(startLinePosition, characterInLine) { + let column = 0; + for (let i = 0; i < characterInLine; i++) { + if (sourceFile.text.charCodeAt(startLinePosition + i) === 9 /* tab */) { + column += options.tabSize - column % options.tabSize; + } else { + column++; + } + } + return column; + } + function indentationIsDifferent(indentationString, startLinePosition) { + return indentationString !== sourceFile.text.substr(startLinePosition, indentationString.length); + } + function indentMultilineComment(commentRange, indentation, firstLineIsIndented, indentFinalLine = true) { + let startLine = sourceFile.getLineAndCharacterOfPosition(commentRange.pos).line; + const endLine = sourceFile.getLineAndCharacterOfPosition(commentRange.end).line; + if (startLine === endLine) { + if (!firstLineIsIndented) { + insertIndentation( + commentRange.pos, + indentation, + /*lineAdded*/ + false + ); + } + return; + } + const parts = []; + let startPos = commentRange.pos; + for (let line = startLine; line < endLine; line++) { + const endOfLine = getEndLinePosition(line, sourceFile); + parts.push({ pos: startPos, end: endOfLine }); + startPos = getStartPositionOfLine(line + 1, sourceFile); + } + if (indentFinalLine) { + parts.push({ pos: startPos, end: commentRange.end }); + } + if (parts.length === 0) return; + const startLinePos = getStartPositionOfLine(startLine, sourceFile); + const nonWhitespaceColumnInFirstPart = SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(startLinePos, parts[0].pos, sourceFile, options); + let startIndex = 0; + if (firstLineIsIndented) { + startIndex = 1; + startLine++; + } + const delta2 = indentation - nonWhitespaceColumnInFirstPart.column; + for (let i = startIndex; i < parts.length; i++, startLine++) { + const startLinePos2 = getStartPositionOfLine(startLine, sourceFile); + const nonWhitespaceCharacterAndColumn = i === 0 ? nonWhitespaceColumnInFirstPart : SmartIndenter.findFirstNonWhitespaceCharacterAndColumn(parts[i].pos, parts[i].end, sourceFile, options); + const newIndentation = nonWhitespaceCharacterAndColumn.column + delta2; + if (newIndentation > 0) { + const indentationString = getIndentationString(newIndentation, options); + recordReplace(startLinePos2, nonWhitespaceCharacterAndColumn.character, indentationString); + } else { + recordDelete(startLinePos2, nonWhitespaceCharacterAndColumn.character); + } + } + } + function trimTrailingWhitespacesForLines(line1, line2, range) { + for (let line = line1; line < line2; line++) { + const lineStartPosition = getStartPositionOfLine(line, sourceFile); + const lineEndPosition = getEndLinePosition(line, sourceFile); + if (range && (isComment(range.kind) || isStringOrRegularExpressionOrTemplateLiteral(range.kind)) && range.pos <= lineEndPosition && range.end > lineEndPosition) { + continue; + } + const whitespaceStart = getTrailingWhitespaceStartPosition(lineStartPosition, lineEndPosition); + if (whitespaceStart !== -1) { + Debug.assert(whitespaceStart === lineStartPosition || !isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(whitespaceStart - 1))); + recordDelete(whitespaceStart, lineEndPosition + 1 - whitespaceStart); + } + } + } + function getTrailingWhitespaceStartPosition(start, end) { + let pos = end; + while (pos >= start && isWhiteSpaceSingleLine(sourceFile.text.charCodeAt(pos))) { + pos--; + } + if (pos !== end) { + return pos + 1; + } + return -1; + } + function trimTrailingWhitespacesForRemainingRange(trivias) { + let startPos = previousRange ? previousRange.end : originalRange.pos; + for (const trivia of trivias) { + if (isComment(trivia.kind)) { + if (startPos < trivia.pos) { + trimTrailingWitespacesForPositions(startPos, trivia.pos - 1, previousRange); + } + startPos = trivia.end + 1; + } + } + if (startPos < originalRange.end) { + trimTrailingWitespacesForPositions(startPos, originalRange.end, previousRange); + } + } + function trimTrailingWitespacesForPositions(startPos, endPos, previousRange2) { + const startLine = sourceFile.getLineAndCharacterOfPosition(startPos).line; + const endLine = sourceFile.getLineAndCharacterOfPosition(endPos).line; + trimTrailingWhitespacesForLines(startLine, endLine + 1, previousRange2); + } + function recordDelete(start, len) { + if (len) { + edits.push(createTextChangeFromStartLength(start, len, "")); + } + } + function recordReplace(start, len, newText) { + if (len || newText) { + edits.push(createTextChangeFromStartLength(start, len, newText)); + } + } + function recordInsert(start, text) { + if (text) { + edits.push(createTextChangeFromStartLength(start, 0, text)); + } + } + function applyRuleEdits(rule2, previousRange2, previousStartLine, currentRange, currentStartLine) { + const onLaterLine = currentStartLine !== previousStartLine; + switch (rule2.action) { + case 1 /* StopProcessingSpaceActions */: + return 0 /* None */; + case 16 /* DeleteSpace */: + if (previousRange2.end !== currentRange.pos) { + recordDelete(previousRange2.end, currentRange.pos - previousRange2.end); + return onLaterLine ? 2 /* LineRemoved */ : 0 /* None */; + } + break; + case 32 /* DeleteToken */: + recordDelete(previousRange2.pos, previousRange2.end - previousRange2.pos); + break; + case 8 /* InsertNewLine */: + if (rule2.flags !== 1 /* CanDeleteNewLines */ && previousStartLine !== currentStartLine) { + return 0 /* None */; + } + const lineDelta = currentStartLine - previousStartLine; + if (lineDelta !== 1) { + recordReplace(previousRange2.end, currentRange.pos - previousRange2.end, getNewLineOrDefaultFromHost(host, options)); + return onLaterLine ? 0 /* None */ : 1 /* LineAdded */; + } + break; + case 4 /* InsertSpace */: + if (rule2.flags !== 1 /* CanDeleteNewLines */ && previousStartLine !== currentStartLine) { + return 0 /* None */; + } + const posDelta = currentRange.pos - previousRange2.end; + if (posDelta !== 1 || sourceFile.text.charCodeAt(previousRange2.end) !== 32 /* space */) { + recordReplace(previousRange2.end, currentRange.pos - previousRange2.end, " "); + return onLaterLine ? 2 /* LineRemoved */ : 0 /* None */; + } + break; + case 64 /* InsertTrailingSemicolon */: + recordInsert(previousRange2.end, ";"); + } + return 0 /* None */; + } +} +function getRangeOfEnclosingComment(sourceFile, position, precedingToken, tokenAtPosition = getTokenAtPosition(sourceFile, position)) { + const jsdoc = findAncestor(tokenAtPosition, isJSDoc); + if (jsdoc) tokenAtPosition = jsdoc.parent; + const tokenStart = tokenAtPosition.getStart(sourceFile); + if (tokenStart <= position && position < tokenAtPosition.getEnd()) { + return void 0; + } + precedingToken = precedingToken === null ? void 0 : precedingToken === void 0 ? findPrecedingToken(position, sourceFile) : precedingToken; + const trailingRangesOfPreviousToken = precedingToken && getTrailingCommentRanges(sourceFile.text, precedingToken.end); + const leadingCommentRangesOfNextToken = getLeadingCommentRangesOfNode(tokenAtPosition, sourceFile); + const commentRanges = concatenate(trailingRangesOfPreviousToken, leadingCommentRangesOfNextToken); + return commentRanges && find(commentRanges, (range) => rangeContainsPositionExclusive(range, position) || // The end marker of a single-line comment does not include the newline character. + // With caret at `^`, in the following case, we are inside a comment (^ denotes the cursor position): + // + // // asdf ^\n + // + // But for closed multi-line comments, we don't want to be inside the comment in the following case: + // + // /* asdf */^ + // + // However, unterminated multi-line comments *do* contain their end. + // + // Internally, we represent the end of the comment at the newline and closing '/', respectively. + // + position === range.end && (range.kind === 2 /* SingleLineCommentTrivia */ || position === sourceFile.getFullWidth())); +} +function getOpenTokenForList(node, list) { + switch (node.kind) { + case 177 /* Constructor */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 220 /* ArrowFunction */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + if (node.typeParameters === list) { + return 30 /* LessThanToken */; + } else if (node.parameters === list) { + return 21 /* OpenParenToken */; + } + break; + case 214 /* CallExpression */: + case 215 /* NewExpression */: + if (node.typeArguments === list) { + return 30 /* LessThanToken */; + } else if (node.arguments === list) { + return 21 /* OpenParenToken */; + } + break; + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + if (node.typeParameters === list) { + return 30 /* LessThanToken */; + } + break; + case 184 /* TypeReference */: + case 216 /* TaggedTemplateExpression */: + case 187 /* TypeQuery */: + case 234 /* ExpressionWithTypeArguments */: + case 206 /* ImportType */: + if (node.typeArguments === list) { + return 30 /* LessThanToken */; + } + break; + case 188 /* TypeLiteral */: + return 19 /* OpenBraceToken */; + } + return 0 /* Unknown */; +} +function getCloseTokenForOpenToken(kind) { + switch (kind) { + case 21 /* OpenParenToken */: + return 22 /* CloseParenToken */; + case 30 /* LessThanToken */: + return 32 /* GreaterThanToken */; + case 19 /* OpenBraceToken */: + return 20 /* CloseBraceToken */; + } + return 0 /* Unknown */; +} +var internedSizes; +var internedTabsIndentation; +var internedSpacesIndentation; +function getIndentationString(indentation, options) { + const resetInternedStrings = !internedSizes || (internedSizes.tabSize !== options.tabSize || internedSizes.indentSize !== options.indentSize); + if (resetInternedStrings) { + internedSizes = { tabSize: options.tabSize, indentSize: options.indentSize }; + internedTabsIndentation = internedSpacesIndentation = void 0; + } + if (!options.convertTabsToSpaces) { + const tabs = Math.floor(indentation / options.tabSize); + const spaces = indentation - tabs * options.tabSize; + let tabString; + if (!internedTabsIndentation) { + internedTabsIndentation = []; + } + if (internedTabsIndentation[tabs] === void 0) { + internedTabsIndentation[tabs] = tabString = repeatString(" ", tabs); + } else { + tabString = internedTabsIndentation[tabs]; + } + return spaces ? tabString + repeatString(" ", spaces) : tabString; + } else { + let spacesString; + const quotient = Math.floor(indentation / options.indentSize); + const remainder = indentation % options.indentSize; + if (!internedSpacesIndentation) { + internedSpacesIndentation = []; + } + if (internedSpacesIndentation[quotient] === void 0) { + spacesString = repeatString(" ", options.indentSize * quotient); + internedSpacesIndentation[quotient] = spacesString; + } else { + spacesString = internedSpacesIndentation[quotient]; + } + return remainder ? spacesString + repeatString(" ", remainder) : spacesString; + } +} + +// src/services/formatting/smartIndenter.ts +var SmartIndenter; +((SmartIndenter2) => { + let Value; + ((Value2) => { + Value2[Value2["Unknown"] = -1] = "Unknown"; + })(Value || (Value = {})); + function getIndentation(position, sourceFile, options, assumeNewLineBeforeCloseBrace = false) { + if (position > sourceFile.text.length) { + return getBaseIndentation(options); + } + if (options.indentStyle === 0 /* None */) { + return 0; + } + const precedingToken = findPrecedingToken( + position, + sourceFile, + /*startNode*/ + void 0, + /*excludeJsdoc*/ + true + ); + const enclosingCommentRange = getRangeOfEnclosingComment(sourceFile, position, precedingToken || null); + if (enclosingCommentRange && enclosingCommentRange.kind === 3 /* MultiLineCommentTrivia */) { + return getCommentIndent(sourceFile, position, options, enclosingCommentRange); + } + if (!precedingToken) { + return getBaseIndentation(options); + } + const precedingTokenIsLiteral = isStringOrRegularExpressionOrTemplateLiteral(precedingToken.kind); + if (precedingTokenIsLiteral && precedingToken.getStart(sourceFile) <= position && position < precedingToken.end) { + return 0; + } + const lineAtPosition = sourceFile.getLineAndCharacterOfPosition(position).line; + const currentToken = getTokenAtPosition(sourceFile, position); + const isObjectLiteral = currentToken.kind === 19 /* OpenBraceToken */ && currentToken.parent.kind === 211 /* ObjectLiteralExpression */; + if (options.indentStyle === 1 /* Block */ || isObjectLiteral) { + return getBlockIndent(sourceFile, position, options); + } + if (precedingToken.kind === 28 /* CommaToken */ && precedingToken.parent.kind !== 227 /* BinaryExpression */) { + const actualIndentation = getActualIndentationForListItemBeforeComma(precedingToken, sourceFile, options); + if (actualIndentation !== -1 /* Unknown */) { + return actualIndentation; + } + } + const containerList = getListByPosition(position, precedingToken.parent, sourceFile); + if (containerList && !rangeContainsRange(containerList, precedingToken)) { + const useTheSameBaseIndentation = [219 /* FunctionExpression */, 220 /* ArrowFunction */].includes(currentToken.parent.kind); + const indentSize = useTheSameBaseIndentation ? 0 : options.indentSize; + return getActualIndentationForListStartLine(containerList, sourceFile, options) + indentSize; + } + return getSmartIndent(sourceFile, position, precedingToken, lineAtPosition, assumeNewLineBeforeCloseBrace, options); + } + SmartIndenter2.getIndentation = getIndentation; + function getCommentIndent(sourceFile, position, options, enclosingCommentRange) { + const previousLine = getLineAndCharacterOfPosition(sourceFile, position).line - 1; + const commentStartLine = getLineAndCharacterOfPosition(sourceFile, enclosingCommentRange.pos).line; + Debug.assert(commentStartLine >= 0); + if (previousLine <= commentStartLine) { + return findFirstNonWhitespaceColumn(getStartPositionOfLine(commentStartLine, sourceFile), position, sourceFile, options); + } + const startPositionOfLine = getStartPositionOfLine(previousLine, sourceFile); + const { column, character } = findFirstNonWhitespaceCharacterAndColumn(startPositionOfLine, position, sourceFile, options); + if (column === 0) { + return column; + } + const firstNonWhitespaceCharacterCode = sourceFile.text.charCodeAt(startPositionOfLine + character); + return firstNonWhitespaceCharacterCode === 42 /* asterisk */ ? column - 1 : column; + } + function getBlockIndent(sourceFile, position, options) { + let current = position; + while (current > 0) { + const char = sourceFile.text.charCodeAt(current); + if (!isWhiteSpaceLike(char)) { + break; + } + current--; + } + const lineStart = getLineStartPositionForPosition(current, sourceFile); + return findFirstNonWhitespaceColumn(lineStart, current, sourceFile, options); + } + function getSmartIndent(sourceFile, position, precedingToken, lineAtPosition, assumeNewLineBeforeCloseBrace, options) { + let previous; + let current = precedingToken; + while (current) { + if (positionBelongsToNode(current, position, sourceFile) && shouldIndentChildNode( + options, + current, + previous, + sourceFile, + /*isNextChild*/ + true + )) { + const currentStart = getStartLineAndCharacterForNode(current, sourceFile); + const nextTokenKind = nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile); + const indentationDelta = nextTokenKind !== 0 /* Unknown */ ? assumeNewLineBeforeCloseBrace && nextTokenKind === 2 /* CloseBrace */ ? options.indentSize : 0 : lineAtPosition !== currentStart.line ? options.indentSize : 0; + return getIndentationForNodeWorker( + current, + currentStart, + /*ignoreActualIndentationRange*/ + void 0, + indentationDelta, + sourceFile, + /*isNextChild*/ + true, + options + ); + } + const actualIndentation = getActualIndentationForListItem( + current, + sourceFile, + options, + /*listIndentsChild*/ + true + ); + if (actualIndentation !== -1 /* Unknown */) { + return actualIndentation; + } + previous = current; + current = current.parent; + } + return getBaseIndentation(options); + } + function getIndentationForNode(n, ignoreActualIndentationRange, sourceFile, options) { + const start = sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); + return getIndentationForNodeWorker( + n, + start, + ignoreActualIndentationRange, + /*indentationDelta*/ + 0, + sourceFile, + /*isNextChild*/ + false, + options + ); + } + SmartIndenter2.getIndentationForNode = getIndentationForNode; + function getBaseIndentation(options) { + return options.baseIndentSize || 0; + } + SmartIndenter2.getBaseIndentation = getBaseIndentation; + function getIndentationForNodeWorker(current, currentStart, ignoreActualIndentationRange, indentationDelta, sourceFile, isNextChild, options) { + var _a; + let parent2 = current.parent; + while (parent2) { + let useActualIndentation = true; + if (ignoreActualIndentationRange) { + const start = current.getStart(sourceFile); + useActualIndentation = start < ignoreActualIndentationRange.pos || start > ignoreActualIndentationRange.end; + } + const containingListOrParentStart = getContainingListOrParentStart(parent2, current, sourceFile); + const parentAndChildShareLine = containingListOrParentStart.line === currentStart.line || childStartsOnTheSameLineWithElseInIfStatement(parent2, current, currentStart.line, sourceFile); + if (useActualIndentation) { + const firstListChild = (_a = getContainingList(current, sourceFile)) == null ? void 0 : _a[0]; + const listIndentsChild = !!firstListChild && getStartLineAndCharacterForNode(firstListChild, sourceFile).line > containingListOrParentStart.line; + let actualIndentation = getActualIndentationForListItem(current, sourceFile, options, listIndentsChild); + if (actualIndentation !== -1 /* Unknown */) { + return actualIndentation + indentationDelta; + } + actualIndentation = getActualIndentationForNode(current, parent2, currentStart, parentAndChildShareLine, sourceFile, options); + if (actualIndentation !== -1 /* Unknown */) { + return actualIndentation + indentationDelta; + } + } + if (shouldIndentChildNode(options, parent2, current, sourceFile, isNextChild) && !parentAndChildShareLine) { + indentationDelta += options.indentSize; + } + const useTrueStart = isArgumentAndStartLineOverlapsExpressionBeingCalled(parent2, current, currentStart.line, sourceFile); + current = parent2; + parent2 = current.parent; + currentStart = useTrueStart ? sourceFile.getLineAndCharacterOfPosition(current.getStart(sourceFile)) : containingListOrParentStart; + } + return indentationDelta + getBaseIndentation(options); + } + function getContainingListOrParentStart(parent2, child, sourceFile) { + const containingList = getContainingList(child, sourceFile); + const startPos = containingList ? containingList.pos : parent2.getStart(sourceFile); + return sourceFile.getLineAndCharacterOfPosition(startPos); + } + function getActualIndentationForListItemBeforeComma(commaToken, sourceFile, options) { + const commaItemInfo = findListItemInfo(commaToken); + if (commaItemInfo && commaItemInfo.listItemIndex > 0) { + return deriveActualIndentationFromList(commaItemInfo.list.getChildren(), commaItemInfo.listItemIndex - 1, sourceFile, options); + } else { + return -1 /* Unknown */; + } + } + function getActualIndentationForNode(current, parent2, currentLineAndChar, parentAndChildShareLine, sourceFile, options) { + const useActualIndentation = (isDeclaration(current) || isStatementButNotDeclaration(current)) && (parent2.kind === 308 /* SourceFile */ || !parentAndChildShareLine); + if (!useActualIndentation) { + return -1 /* Unknown */; + } + return findColumnForFirstNonWhitespaceCharacterInLine(currentLineAndChar, sourceFile, options); + } + let NextTokenKind; + ((NextTokenKind2) => { + NextTokenKind2[NextTokenKind2["Unknown"] = 0] = "Unknown"; + NextTokenKind2[NextTokenKind2["OpenBrace"] = 1] = "OpenBrace"; + NextTokenKind2[NextTokenKind2["CloseBrace"] = 2] = "CloseBrace"; + })(NextTokenKind || (NextTokenKind = {})); + function nextTokenIsCurlyBraceOnSameLineAsCursor(precedingToken, current, lineAtPosition, sourceFile) { + const nextToken = findNextToken(precedingToken, current, sourceFile); + if (!nextToken) { + return 0 /* Unknown */; + } + if (nextToken.kind === 19 /* OpenBraceToken */) { + return 1 /* OpenBrace */; + } else if (nextToken.kind === 20 /* CloseBraceToken */) { + const nextTokenStartLine = getStartLineAndCharacterForNode(nextToken, sourceFile).line; + return lineAtPosition === nextTokenStartLine ? 2 /* CloseBrace */ : 0 /* Unknown */; + } + return 0 /* Unknown */; + } + function getStartLineAndCharacterForNode(n, sourceFile) { + return sourceFile.getLineAndCharacterOfPosition(n.getStart(sourceFile)); + } + function isArgumentAndStartLineOverlapsExpressionBeingCalled(parent2, child, childStartLine, sourceFile) { + if (!(isCallExpression(parent2) && contains(parent2.arguments, child))) { + return false; + } + const expressionOfCallExpressionEnd = parent2.expression.getEnd(); + const expressionOfCallExpressionEndLine = getLineAndCharacterOfPosition(sourceFile, expressionOfCallExpressionEnd).line; + return expressionOfCallExpressionEndLine === childStartLine; + } + SmartIndenter2.isArgumentAndStartLineOverlapsExpressionBeingCalled = isArgumentAndStartLineOverlapsExpressionBeingCalled; + function childStartsOnTheSameLineWithElseInIfStatement(parent2, child, childStartLine, sourceFile) { + if (parent2.kind === 246 /* IfStatement */ && parent2.elseStatement === child) { + const elseKeyword = findChildOfKind(parent2, 93 /* ElseKeyword */, sourceFile); + Debug.assert(elseKeyword !== void 0); + const elseKeywordStartLine = getStartLineAndCharacterForNode(elseKeyword, sourceFile).line; + return elseKeywordStartLine === childStartLine; + } + return false; + } + SmartIndenter2.childStartsOnTheSameLineWithElseInIfStatement = childStartsOnTheSameLineWithElseInIfStatement; + function childIsUnindentedBranchOfConditionalExpression(parent2, child, childStartLine, sourceFile) { + if (isConditionalExpression(parent2) && (child === parent2.whenTrue || child === parent2.whenFalse)) { + const conditionEndLine = getLineAndCharacterOfPosition(sourceFile, parent2.condition.end).line; + if (child === parent2.whenTrue) { + return childStartLine === conditionEndLine; + } else { + const trueStartLine = getStartLineAndCharacterForNode(parent2.whenTrue, sourceFile).line; + const trueEndLine = getLineAndCharacterOfPosition(sourceFile, parent2.whenTrue.end).line; + return conditionEndLine === trueStartLine && trueEndLine === childStartLine; + } + } + return false; + } + SmartIndenter2.childIsUnindentedBranchOfConditionalExpression = childIsUnindentedBranchOfConditionalExpression; + function argumentStartsOnSameLineAsPreviousArgument(parent2, child, childStartLine, sourceFile) { + if (isCallOrNewExpression(parent2)) { + if (!parent2.arguments) return false; + const currentNode = find(parent2.arguments, (arg) => arg.pos === child.pos); + if (!currentNode) return false; + const currentIndex = parent2.arguments.indexOf(currentNode); + if (currentIndex === 0) return false; + const previousNode = parent2.arguments[currentIndex - 1]; + const lineOfPreviousNode = getLineAndCharacterOfPosition(sourceFile, previousNode.getEnd()).line; + if (childStartLine === lineOfPreviousNode) { + return true; + } + } + return false; + } + SmartIndenter2.argumentStartsOnSameLineAsPreviousArgument = argumentStartsOnSameLineAsPreviousArgument; + function getContainingList(node, sourceFile) { + return node.parent && getListByRange(node.getStart(sourceFile), node.getEnd(), node.parent, sourceFile); + } + SmartIndenter2.getContainingList = getContainingList; + function getListByPosition(pos, node, sourceFile) { + return node && getListByRange(pos, pos, node, sourceFile); + } + function getListByRange(start, end, node, sourceFile) { + switch (node.kind) { + case 184 /* TypeReference */: + return getList(node.typeArguments); + case 211 /* ObjectLiteralExpression */: + return getList(node.properties); + case 210 /* ArrayLiteralExpression */: + return getList(node.elements); + case 188 /* TypeLiteral */: + return getList(node.members); + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 220 /* ArrowFunction */: + case 175 /* MethodDeclaration */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 177 /* Constructor */: + case 186 /* ConstructorType */: + case 181 /* ConstructSignature */: + return getList(node.typeParameters) || getList(node.parameters); + case 178 /* GetAccessor */: + return getList(node.parameters); + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 346 /* JSDocTemplateTag */: + return getList(node.typeParameters); + case 215 /* NewExpression */: + case 214 /* CallExpression */: + return getList(node.typeArguments) || getList(node.arguments); + case 262 /* VariableDeclarationList */: + return getList(node.declarations); + case 276 /* NamedImports */: + case 280 /* NamedExports */: + return getList(node.elements); + case 207 /* ObjectBindingPattern */: + case 208 /* ArrayBindingPattern */: + return getList(node.elements); + } + function getList(list) { + return list && rangeContainsStartEnd(getVisualListRange(node, list, sourceFile), start, end) ? list : void 0; + } + } + function getVisualListRange(node, list, sourceFile) { + const children = node.getChildren(sourceFile); + for (let i = 1; i < children.length - 1; i++) { + if (children[i].pos === list.pos && children[i].end === list.end) { + return { pos: children[i - 1].end, end: children[i + 1].getStart(sourceFile) }; + } + } + return list; + } + function getActualIndentationForListStartLine(list, sourceFile, options) { + if (!list) { + return -1 /* Unknown */; + } + return findColumnForFirstNonWhitespaceCharacterInLine(sourceFile.getLineAndCharacterOfPosition(list.pos), sourceFile, options); + } + function getActualIndentationForListItem(node, sourceFile, options, listIndentsChild) { + if (node.parent && node.parent.kind === 262 /* VariableDeclarationList */) { + return -1 /* Unknown */; + } + const containingList = getContainingList(node, sourceFile); + if (containingList) { + const index = containingList.indexOf(node); + if (index !== -1) { + const result = deriveActualIndentationFromList(containingList, index, sourceFile, options); + if (result !== -1 /* Unknown */) { + return result; + } + } + return getActualIndentationForListStartLine(containingList, sourceFile, options) + (listIndentsChild ? options.indentSize : 0); + } + return -1 /* Unknown */; + } + function deriveActualIndentationFromList(list, index, sourceFile, options) { + Debug.assert(index >= 0 && index < list.length); + const node = list[index]; + let lineAndCharacter = getStartLineAndCharacterForNode(node, sourceFile); + for (let i = index - 1; i >= 0; i--) { + if (list[i].kind === 28 /* CommaToken */) { + continue; + } + const prevEndLine = sourceFile.getLineAndCharacterOfPosition(list[i].end).line; + if (prevEndLine !== lineAndCharacter.line) { + return findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options); + } + lineAndCharacter = getStartLineAndCharacterForNode(list[i], sourceFile); + } + return -1 /* Unknown */; + } + function findColumnForFirstNonWhitespaceCharacterInLine(lineAndCharacter, sourceFile, options) { + const lineStart = sourceFile.getPositionOfLineAndCharacter(lineAndCharacter.line, 0); + return findFirstNonWhitespaceColumn(lineStart, lineStart + lineAndCharacter.character, sourceFile, options); + } + function findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options) { + let character = 0; + let column = 0; + for (let pos = startPos; pos < endPos; pos++) { + const ch = sourceFile.text.charCodeAt(pos); + if (!isWhiteSpaceSingleLine(ch)) { + break; + } + if (ch === 9 /* tab */) { + column += options.tabSize + column % options.tabSize; + } else { + column++; + } + character++; + } + return { column, character }; + } + SmartIndenter2.findFirstNonWhitespaceCharacterAndColumn = findFirstNonWhitespaceCharacterAndColumn; + function findFirstNonWhitespaceColumn(startPos, endPos, sourceFile, options) { + return findFirstNonWhitespaceCharacterAndColumn(startPos, endPos, sourceFile, options).column; + } + SmartIndenter2.findFirstNonWhitespaceColumn = findFirstNonWhitespaceColumn; + function nodeWillIndentChild(settings, parent2, child, sourceFile, indentByDefault) { + const childKind = child ? child.kind : 0 /* Unknown */; + switch (parent2.kind) { + case 245 /* ExpressionStatement */: + case 264 /* ClassDeclaration */: + case 232 /* ClassExpression */: + case 265 /* InterfaceDeclaration */: + case 267 /* EnumDeclaration */: + case 266 /* TypeAliasDeclaration */: + case 210 /* ArrayLiteralExpression */: + case 242 /* Block */: + case 269 /* ModuleBlock */: + case 211 /* ObjectLiteralExpression */: + case 188 /* TypeLiteral */: + case 201 /* MappedType */: + case 190 /* TupleType */: + case 218 /* ParenthesizedExpression */: + case 212 /* PropertyAccessExpression */: + case 214 /* CallExpression */: + case 215 /* NewExpression */: + case 244 /* VariableStatement */: + case 278 /* ExportAssignment */: + case 254 /* ReturnStatement */: + case 228 /* ConditionalExpression */: + case 208 /* ArrayBindingPattern */: + case 207 /* ObjectBindingPattern */: + case 287 /* JsxOpeningElement */: + case 290 /* JsxOpeningFragment */: + case 286 /* JsxSelfClosingElement */: + case 295 /* JsxExpression */: + case 174 /* MethodSignature */: + case 180 /* CallSignature */: + case 181 /* ConstructSignature */: + case 170 /* Parameter */: + case 185 /* FunctionType */: + case 186 /* ConstructorType */: + case 197 /* ParenthesizedType */: + case 216 /* TaggedTemplateExpression */: + case 224 /* AwaitExpression */: + case 280 /* NamedExports */: + case 276 /* NamedImports */: + case 282 /* ExportSpecifier */: + case 277 /* ImportSpecifier */: + case 173 /* PropertyDeclaration */: + case 297 /* CaseClause */: + case 298 /* DefaultClause */: + return true; + case 270 /* CaseBlock */: + return settings.indentSwitchCase ?? true; + case 261 /* VariableDeclaration */: + case 304 /* PropertyAssignment */: + case 227 /* BinaryExpression */: + if (!settings.indentMultiLineObjectLiteralBeginningOnBlankLine && sourceFile && childKind === 211 /* ObjectLiteralExpression */) { + return rangeIsOnOneLine(sourceFile, child); + } + if (parent2.kind === 227 /* BinaryExpression */ && sourceFile && child && childKind === 285 /* JsxElement */) { + const parentStartLine = sourceFile.getLineAndCharacterOfPosition(skipTrivia(sourceFile.text, parent2.pos)).line; + const childStartLine = sourceFile.getLineAndCharacterOfPosition(skipTrivia(sourceFile.text, child.pos)).line; + return parentStartLine !== childStartLine; + } + if (parent2.kind !== 227 /* BinaryExpression */) { + return true; + } + break; + case 247 /* DoStatement */: + case 248 /* WhileStatement */: + case 250 /* ForInStatement */: + case 251 /* ForOfStatement */: + case 249 /* ForStatement */: + case 246 /* IfStatement */: + case 263 /* FunctionDeclaration */: + case 219 /* FunctionExpression */: + case 175 /* MethodDeclaration */: + case 177 /* Constructor */: + case 178 /* GetAccessor */: + case 179 /* SetAccessor */: + return childKind !== 242 /* Block */; + case 220 /* ArrowFunction */: + if (sourceFile && childKind === 218 /* ParenthesizedExpression */) { + return rangeIsOnOneLine(sourceFile, child); + } + return childKind !== 242 /* Block */; + case 279 /* ExportDeclaration */: + return childKind !== 280 /* NamedExports */; + case 273 /* ImportDeclaration */: + return childKind !== 274 /* ImportClause */ || !!child.namedBindings && child.namedBindings.kind !== 276 /* NamedImports */; + case 285 /* JsxElement */: + return childKind !== 288 /* JsxClosingElement */; + case 289 /* JsxFragment */: + return childKind !== 291 /* JsxClosingFragment */; + case 194 /* IntersectionType */: + case 193 /* UnionType */: + case 239 /* SatisfiesExpression */: + if (childKind === 188 /* TypeLiteral */ || childKind === 190 /* TupleType */ || childKind === 201 /* MappedType */) { + return false; + } + break; + case 259 /* TryStatement */: + if (childKind === 242 /* Block */) { + return false; + } + break; + } + return indentByDefault; + } + SmartIndenter2.nodeWillIndentChild = nodeWillIndentChild; + function isControlFlowEndingStatement(kind, parent2) { + switch (kind) { + case 254 /* ReturnStatement */: + case 258 /* ThrowStatement */: + case 252 /* ContinueStatement */: + case 253 /* BreakStatement */: + return parent2.kind !== 242 /* Block */; + default: + return false; + } + } + function shouldIndentChildNode(settings, parent2, child, sourceFile, isNextChild = false) { + return nodeWillIndentChild( + settings, + parent2, + child, + sourceFile, + /*indentByDefault*/ + false + ) && !(isNextChild && child && isControlFlowEndingStatement(child.kind, parent2)); + } + SmartIndenter2.shouldIndentChildNode = shouldIndentChildNode; + function rangeIsOnOneLine(sourceFile, range) { + const rangeStart = skipTrivia(sourceFile.text, range.pos); + const startLine = sourceFile.getLineAndCharacterOfPosition(rangeStart).line; + const endLine = sourceFile.getLineAndCharacterOfPosition(range.end).line; + return startLine === endLine; + } +})(SmartIndenter || (SmartIndenter = {})); + +// src/services/_namespaces/ts.preparePasteEdits.ts +var ts_preparePasteEdits_exports = {}; +__export(ts_preparePasteEdits_exports, { + preparePasteEdits: () => preparePasteEdits +}); + +// src/services/preparePasteEdits.ts +function preparePasteEdits(sourceFile, copiedFromRange, checker) { + let shouldProvidePasteEdits = false; + copiedFromRange.forEach((range) => { + const enclosingNode = findAncestor( + getTokenAtPosition(sourceFile, range.pos), + (ancestorNode) => rangeContainsRange(ancestorNode, range) + ); + if (!enclosingNode) return; + forEachChild(enclosingNode, function checkNameResolution(node) { + var _a; + if (shouldProvidePasteEdits) return; + if (isIdentifier(node) && rangeContainsPosition(range, node.getStart(sourceFile))) { + const resolvedSymbol = checker.resolveName( + node.text, + node, + -1 /* All */, + /*excludeGlobals*/ + false + ); + if (resolvedSymbol && resolvedSymbol.declarations) { + for (const decl of resolvedSymbol.declarations) { + if (isInImport(decl) || !!(node.text && sourceFile.symbol && ((_a = sourceFile.symbol.exports) == null ? void 0 : _a.has(node.escapedText)))) { + shouldProvidePasteEdits = true; + return; + } + } + } + } + node.forEachChild(checkNameResolution); + }); + if (shouldProvidePasteEdits) return; + }); + return shouldProvidePasteEdits; +} + +// src/services/_namespaces/ts.PasteEdits.ts +var ts_PasteEdits_exports = {}; +__export(ts_PasteEdits_exports, { + pasteEditsProvider: () => pasteEditsProvider +}); + +// src/services/pasteEdits.ts +var fixId55 = "providePostPasteEdits"; +function pasteEditsProvider(targetFile, pastedText, pasteLocations, copiedFrom, host, preferences, formatContext, cancellationToken) { + const changes = ts_textChanges_exports.ChangeTracker.with({ host, formatContext, preferences }, (changeTracker) => pasteEdits(targetFile, pastedText, pasteLocations, copiedFrom, host, preferences, formatContext, cancellationToken, changeTracker)); + return { edits: changes, fixId: fixId55 }; +} +function pasteEdits(targetFile, pastedText, pasteLocations, copiedFrom, host, preferences, formatContext, cancellationToken, changes) { + let actualPastedText; + if (pastedText.length !== pasteLocations.length) { + actualPastedText = pastedText.length === 1 ? pastedText[0] : pastedText.join(getNewLineOrDefaultFromHost(formatContext.host, formatContext.options)); + } + const statements = []; + let newText = targetFile.text; + for (let i = pasteLocations.length - 1; i >= 0; i--) { + const { pos, end } = pasteLocations[i]; + newText = actualPastedText ? newText.slice(0, pos) + actualPastedText + newText.slice(end) : newText.slice(0, pos) + pastedText[i] + newText.slice(end); + } + let importAdder; + Debug.checkDefined(host.runWithTemporaryFileUpdate).call(host, targetFile.fileName, newText, (updatedProgram, originalProgram, updatedFile) => { + importAdder = ts_codefix_exports.createImportAdder(updatedFile, updatedProgram, preferences, host); + if (copiedFrom == null ? void 0 : copiedFrom.range) { + Debug.assert(copiedFrom.range.length === pastedText.length); + copiedFrom.range.forEach((copy) => { + const statementsInSourceFile = copiedFrom.file.statements; + const startNodeIndex = findIndex(statementsInSourceFile, (s) => s.end > copy.pos); + if (startNodeIndex === -1) return void 0; + let endNodeIndex = findIndex(statementsInSourceFile, (s) => s.end >= copy.end, startNodeIndex); + if (endNodeIndex !== -1 && copy.end <= statementsInSourceFile[endNodeIndex].getStart()) { + endNodeIndex--; + } + statements.push(...statementsInSourceFile.slice(startNodeIndex, endNodeIndex === -1 ? statementsInSourceFile.length : endNodeIndex + 1)); + }); + Debug.assertIsDefined(originalProgram, "no original program found"); + const originalProgramTypeChecker = originalProgram.getTypeChecker(); + const usageInfoRange = getUsageInfoRangeForPasteEdits(copiedFrom); + const usage = getUsageInfo(copiedFrom.file, statements, originalProgramTypeChecker, getExistingLocals(updatedFile, statements, originalProgramTypeChecker), usageInfoRange); + const useEsModuleSyntax = !fileShouldUseJavaScriptRequire(targetFile.fileName, originalProgram, host, !!copiedFrom.file.commonJsModuleIndicator); + addExportsInOldFile(copiedFrom.file, usage.targetFileImportsFromOldFile, changes, useEsModuleSyntax); + addTargetFileImports(copiedFrom.file, usage.oldImportsNeededByTargetFile, usage.targetFileImportsFromOldFile, originalProgramTypeChecker, updatedProgram, importAdder); + } else { + const context = { + sourceFile: updatedFile, + program: originalProgram, + cancellationToken, + host, + preferences, + formatContext + }; + let offset = 0; + pasteLocations.forEach((location, i) => { + const oldTextLength = location.end - location.pos; + const textToBePasted = actualPastedText ?? pastedText[i]; + const startPos = location.pos + offset; + const endPos = startPos + textToBePasted.length; + const range = { pos: startPos, end: endPos }; + offset += textToBePasted.length - oldTextLength; + const enclosingNode = findAncestor( + getTokenAtPosition(context.sourceFile, range.pos), + (ancestorNode) => rangeContainsRange(ancestorNode, range) + ); + if (!enclosingNode) return; + forEachChild(enclosingNode, function importUnresolvedIdentifiers(node) { + const isImportCandidate = isIdentifier(node) && rangeContainsPosition(range, node.getStart(updatedFile)) && !(updatedProgram == null ? void 0 : updatedProgram.getTypeChecker().resolveName( + node.text, + node, + -1 /* All */, + /*excludeGlobals*/ + false + )); + if (isImportCandidate) { + return importAdder.addImportForUnresolvedIdentifier( + context, + node, + /*useAutoImportProvider*/ + true + ); + } + node.forEachChild(importUnresolvedIdentifiers); + }); + }); + } + importAdder.writeFixes(changes, getQuotePreference(copiedFrom ? copiedFrom.file : targetFile, preferences)); + }); + if (!importAdder.hasFixes()) { + return; + } + pasteLocations.forEach((paste, i) => { + changes.replaceRangeWithText( + targetFile, + { pos: paste.pos, end: paste.end }, + actualPastedText ?? pastedText[i] + ); + }); +} +function getUsageInfoRangeForPasteEdits({ file: sourceFile, range }) { + const pos = range[0].pos; + const end = range[range.length - 1].end; + const startToken = getTokenAtPosition(sourceFile, pos); + const endToken = findTokenOnLeftOfPosition(sourceFile, pos) ?? getTokenAtPosition(sourceFile, end); + return { + pos: isIdentifier(startToken) && pos <= startToken.getStart(sourceFile) ? startToken.getFullStart() : pos, + end: isIdentifier(endToken) && end === endToken.getEnd() ? ts_textChanges_exports.getAdjustedEndPosition(sourceFile, endToken, {}) : end + }; +} + +// src/server/_namespaces/ts.ts +var ts_exports2 = {}; +__export(ts_exports2, { + ANONYMOUS: () => ANONYMOUS, + AccessFlags: () => AccessFlags, + AssertionLevel: () => AssertionLevel, + AssignmentDeclarationKind: () => AssignmentDeclarationKind, + AssignmentKind: () => AssignmentKind, + Associativity: () => Associativity, + BreakpointResolver: () => ts_BreakpointResolver_exports, + BuilderFileEmit: () => BuilderFileEmit, + BuilderProgramKind: () => BuilderProgramKind, + BuilderState: () => BuilderState, + CallHierarchy: () => ts_CallHierarchy_exports, + CharacterCodes: () => CharacterCodes, + CheckFlags: () => CheckFlags, + CheckMode: () => CheckMode, + ClassificationType: () => ClassificationType, + ClassificationTypeNames: () => ClassificationTypeNames, + CommentDirectiveType: () => CommentDirectiveType, + Comparison: () => Comparison, + CompletionInfoFlags: () => CompletionInfoFlags, + CompletionTriggerKind: () => CompletionTriggerKind, + Completions: () => ts_Completions_exports, + ContainerFlags: () => ContainerFlags, + ContextFlags: () => ContextFlags, + Debug: () => Debug, + DiagnosticCategory: () => DiagnosticCategory, + Diagnostics: () => Diagnostics, + DocumentHighlights: () => DocumentHighlights, + ElementFlags: () => ElementFlags, + EmitFlags: () => EmitFlags, + EmitHint: () => EmitHint, + EmitOnly: () => EmitOnly, + EndOfLineState: () => EndOfLineState, + ExitStatus: () => ExitStatus, + ExportKind: () => ExportKind, + Extension: () => Extension, + ExternalEmitHelpers: () => ExternalEmitHelpers, + FileIncludeKind: () => FileIncludeKind, + FilePreprocessingDiagnosticsKind: () => FilePreprocessingDiagnosticsKind, + FileSystemEntryKind: () => FileSystemEntryKind, + FileWatcherEventKind: () => FileWatcherEventKind, + FindAllReferences: () => ts_FindAllReferences_exports, + FlattenLevel: () => FlattenLevel, + FlowFlags: () => FlowFlags, + ForegroundColorEscapeSequences: () => ForegroundColorEscapeSequences, + FunctionFlags: () => FunctionFlags, + GeneratedIdentifierFlags: () => GeneratedIdentifierFlags, + GetLiteralTextFlags: () => GetLiteralTextFlags, + GoToDefinition: () => ts_GoToDefinition_exports, + HighlightSpanKind: () => HighlightSpanKind, + IdentifierNameMap: () => IdentifierNameMap, + ImportKind: () => ImportKind, + ImportsNotUsedAsValues: () => ImportsNotUsedAsValues, + IndentStyle: () => IndentStyle, + IndexFlags: () => IndexFlags, + IndexKind: () => IndexKind, + InferenceFlags: () => InferenceFlags, + InferencePriority: () => InferencePriority, + InlayHintKind: () => InlayHintKind2, + InlayHints: () => ts_InlayHints_exports, + InternalEmitFlags: () => InternalEmitFlags, + InternalNodeBuilderFlags: () => InternalNodeBuilderFlags, + InternalSymbolName: () => InternalSymbolName, + IntersectionFlags: () => IntersectionFlags, + InvalidatedProjectKind: () => InvalidatedProjectKind, + JSDocParsingMode: () => JSDocParsingMode, + JsDoc: () => ts_JsDoc_exports, + JsTyping: () => ts_JsTyping_exports, + JsxEmit: () => JsxEmit, + JsxFlags: () => JsxFlags, + JsxReferenceKind: () => JsxReferenceKind, + LanguageFeatureMinimumTarget: () => LanguageFeatureMinimumTarget, + LanguageServiceMode: () => LanguageServiceMode, + LanguageVariant: () => LanguageVariant, + LexicalEnvironmentFlags: () => LexicalEnvironmentFlags, + ListFormat: () => ListFormat, + LogLevel: () => LogLevel, + MapCode: () => ts_MapCode_exports, + MemberOverrideStatus: () => MemberOverrideStatus, + ModifierFlags: () => ModifierFlags, + ModuleDetectionKind: () => ModuleDetectionKind, + ModuleInstanceState: () => ModuleInstanceState, + ModuleKind: () => ModuleKind, + ModuleResolutionKind: () => ModuleResolutionKind, + ModuleSpecifierEnding: () => ModuleSpecifierEnding, + NavigateTo: () => ts_NavigateTo_exports, + NavigationBar: () => ts_NavigationBar_exports, + NewLineKind: () => NewLineKind, + NodeBuilderFlags: () => NodeBuilderFlags, + NodeCheckFlags: () => NodeCheckFlags, + NodeFactoryFlags: () => NodeFactoryFlags, + NodeFlags: () => NodeFlags, + NodeResolutionFeatures: () => NodeResolutionFeatures, + ObjectFlags: () => ObjectFlags, + OperationCanceledException: () => OperationCanceledException, + OperatorPrecedence: () => OperatorPrecedence, + OrganizeImports: () => ts_OrganizeImports_exports, + OrganizeImportsMode: () => OrganizeImportsMode, + OuterExpressionKinds: () => OuterExpressionKinds, + OutliningElementsCollector: () => ts_OutliningElementsCollector_exports, + OutliningSpanKind: () => OutliningSpanKind, + OutputFileType: () => OutputFileType, + PackageJsonAutoImportPreference: () => PackageJsonAutoImportPreference, + PackageJsonDependencyGroup: () => PackageJsonDependencyGroup, + PatternMatchKind: () => PatternMatchKind, + PollingInterval: () => PollingInterval, + PollingWatchKind: () => PollingWatchKind, + PragmaKindFlags: () => PragmaKindFlags, + PredicateSemantics: () => PredicateSemantics, + PreparePasteEdits: () => ts_preparePasteEdits_exports, + PrivateIdentifierKind: () => PrivateIdentifierKind, + ProcessLevel: () => ProcessLevel, + ProgramUpdateLevel: () => ProgramUpdateLevel, + QuotePreference: () => QuotePreference, + RegularExpressionFlags: () => RegularExpressionFlags, + RelationComparisonResult: () => RelationComparisonResult, + Rename: () => ts_Rename_exports, + ScriptElementKind: () => ScriptElementKind, + ScriptElementKindModifier: () => ScriptElementKindModifier, + ScriptKind: () => ScriptKind, + ScriptSnapshot: () => ScriptSnapshot, + ScriptTarget: () => ScriptTarget, + SemanticClassificationFormat: () => SemanticClassificationFormat, + SemanticMeaning: () => SemanticMeaning, + SemicolonPreference: () => SemicolonPreference, + SignatureCheckMode: () => SignatureCheckMode, + SignatureFlags: () => SignatureFlags, + SignatureHelp: () => ts_SignatureHelp_exports, + SignatureInfo: () => SignatureInfo, + SignatureKind: () => SignatureKind, + SmartSelectionRange: () => ts_SmartSelectionRange_exports, + SnippetKind: () => SnippetKind, + StatisticType: () => StatisticType, + StructureIsReused: () => StructureIsReused, + SymbolAccessibility: () => SymbolAccessibility, + SymbolDisplay: () => ts_SymbolDisplay_exports, + SymbolDisplayPartKind: () => SymbolDisplayPartKind, + SymbolFlags: () => SymbolFlags, + SymbolFormatFlags: () => SymbolFormatFlags, + SyntaxKind: () => SyntaxKind, + Ternary: () => Ternary, + ThrottledCancellationToken: () => ThrottledCancellationToken, + TokenClass: () => TokenClass, + TokenFlags: () => TokenFlags, + TransformFlags: () => TransformFlags, + TypeFacts: () => TypeFacts, + TypeFlags: () => TypeFlags, + TypeFormatFlags: () => TypeFormatFlags, + TypeMapKind: () => TypeMapKind, + TypePredicateKind: () => TypePredicateKind, + TypeReferenceSerializationKind: () => TypeReferenceSerializationKind, + UnionReduction: () => UnionReduction, + UpToDateStatusType: () => UpToDateStatusType, + VarianceFlags: () => VarianceFlags, + Version: () => Version, + VersionRange: () => VersionRange, + WatchDirectoryFlags: () => WatchDirectoryFlags, + WatchDirectoryKind: () => WatchDirectoryKind, + WatchFileKind: () => WatchFileKind, + WatchLogLevel: () => WatchLogLevel, + WatchType: () => WatchType, + accessPrivateIdentifier: () => accessPrivateIdentifier, + addEmitFlags: () => addEmitFlags, + addEmitHelper: () => addEmitHelper, + addEmitHelpers: () => addEmitHelpers, + addInternalEmitFlags: () => addInternalEmitFlags, + addNodeFactoryPatcher: () => addNodeFactoryPatcher, + addObjectAllocatorPatcher: () => addObjectAllocatorPatcher, + addRange: () => addRange, + addRelatedInfo: () => addRelatedInfo, + addSyntheticLeadingComment: () => addSyntheticLeadingComment, + addSyntheticTrailingComment: () => addSyntheticTrailingComment, + addToSeen: () => addToSeen, + advancedAsyncSuperHelper: () => advancedAsyncSuperHelper, + affectsDeclarationPathOptionDeclarations: () => affectsDeclarationPathOptionDeclarations, + affectsEmitOptionDeclarations: () => affectsEmitOptionDeclarations, + allKeysStartWithDot: () => allKeysStartWithDot, + altDirectorySeparator: () => altDirectorySeparator, + and: () => and, + append: () => append, + appendIfUnique: () => appendIfUnique, + arrayFrom: () => arrayFrom, + arrayIsEqualTo: () => arrayIsEqualTo, + arrayIsHomogeneous: () => arrayIsHomogeneous, + arrayOf: () => arrayOf, + arrayReverseIterator: () => arrayReverseIterator, + arrayToMap: () => arrayToMap, + arrayToMultiMap: () => arrayToMultiMap, + arrayToNumericMap: () => arrayToNumericMap, + assertType: () => assertType, + assign: () => assign, + asyncSuperHelper: () => asyncSuperHelper, + attachFileToDiagnostics: () => attachFileToDiagnostics, + base64decode: () => base64decode, + base64encode: () => base64encode, + binarySearch: () => binarySearch, + binarySearchKey: () => binarySearchKey, + bindSourceFile: () => bindSourceFile, + breakIntoCharacterSpans: () => breakIntoCharacterSpans, + breakIntoWordSpans: () => breakIntoWordSpans, + buildLinkParts: () => buildLinkParts, + buildOpts: () => buildOpts, + buildOverload: () => buildOverload, + bundlerModuleNameResolver: () => bundlerModuleNameResolver, + canBeConvertedToAsync: () => canBeConvertedToAsync, + canHaveDecorators: () => canHaveDecorators, + canHaveExportModifier: () => canHaveExportModifier, + canHaveFlowNode: () => canHaveFlowNode, + canHaveIllegalDecorators: () => canHaveIllegalDecorators, + canHaveIllegalModifiers: () => canHaveIllegalModifiers, + canHaveIllegalType: () => canHaveIllegalType, + canHaveIllegalTypeParameters: () => canHaveIllegalTypeParameters, + canHaveJSDoc: () => canHaveJSDoc, + canHaveLocals: () => canHaveLocals, + canHaveModifiers: () => canHaveModifiers, + canHaveModuleSpecifier: () => canHaveModuleSpecifier, + canHaveSymbol: () => canHaveSymbol, + canIncludeBindAndCheckDiagnostics: () => canIncludeBindAndCheckDiagnostics, + canJsonReportNoInputFiles: () => canJsonReportNoInputFiles, + canProduceDiagnostics: () => canProduceDiagnostics, + canUsePropertyAccess: () => canUsePropertyAccess, + canWatchAffectingLocation: () => canWatchAffectingLocation, + canWatchAtTypes: () => canWatchAtTypes, + canWatchDirectoryOrFile: () => canWatchDirectoryOrFile, + canWatchDirectoryOrFilePath: () => canWatchDirectoryOrFilePath, + cartesianProduct: () => cartesianProduct, + cast: () => cast, + chainBundle: () => chainBundle, + chainDiagnosticMessages: () => chainDiagnosticMessages, + changeAnyExtension: () => changeAnyExtension, + changeCompilerHostLikeToUseCache: () => changeCompilerHostLikeToUseCache, + changeExtension: () => changeExtension, + changeFullExtension: () => changeFullExtension, + changesAffectModuleResolution: () => changesAffectModuleResolution, + changesAffectingProgramStructure: () => changesAffectingProgramStructure, + characterCodeToRegularExpressionFlag: () => characterCodeToRegularExpressionFlag, + childIsDecorated: () => childIsDecorated, + classElementOrClassElementParameterIsDecorated: () => classElementOrClassElementParameterIsDecorated, + classHasClassThisAssignment: () => classHasClassThisAssignment, + classHasDeclaredOrExplicitlyAssignedName: () => classHasDeclaredOrExplicitlyAssignedName, + classHasExplicitlyAssignedName: () => classHasExplicitlyAssignedName, + classOrConstructorParameterIsDecorated: () => classOrConstructorParameterIsDecorated, + classicNameResolver: () => classicNameResolver, + classifier: () => ts_classifier_exports, + cleanExtendedConfigCache: () => cleanExtendedConfigCache, + clear: () => clear, + clearMap: () => clearMap, + clearSharedExtendedConfigFileWatcher: () => clearSharedExtendedConfigFileWatcher, + climbPastPropertyAccess: () => climbPastPropertyAccess, + clone: () => clone, + cloneCompilerOptions: () => cloneCompilerOptions, + closeFileWatcher: () => closeFileWatcher, + closeFileWatcherOf: () => closeFileWatcherOf, + codefix: () => ts_codefix_exports, + collapseTextChangeRangesAcrossMultipleVersions: () => collapseTextChangeRangesAcrossMultipleVersions, + collectExternalModuleInfo: () => collectExternalModuleInfo, + combine: () => combine, + combinePaths: () => combinePaths, + commandLineOptionOfCustomType: () => commandLineOptionOfCustomType, + commentPragmas: () => commentPragmas, + commonOptionsWithBuild: () => commonOptionsWithBuild, + compact: () => compact, + compareBooleans: () => compareBooleans, + compareDataObjects: () => compareDataObjects, + compareDiagnostics: () => compareDiagnostics, + compareEmitHelpers: () => compareEmitHelpers, + compareNumberOfDirectorySeparators: () => compareNumberOfDirectorySeparators, + comparePaths: () => comparePaths, + comparePathsCaseInsensitive: () => comparePathsCaseInsensitive, + comparePathsCaseSensitive: () => comparePathsCaseSensitive, + comparePatternKeys: () => comparePatternKeys, + compareProperties: () => compareProperties, + compareStringsCaseInsensitive: () => compareStringsCaseInsensitive, + compareStringsCaseInsensitiveEslintCompatible: () => compareStringsCaseInsensitiveEslintCompatible, + compareStringsCaseSensitive: () => compareStringsCaseSensitive, + compareStringsCaseSensitiveUI: () => compareStringsCaseSensitiveUI, + compareTextSpans: () => compareTextSpans, + compareValues: () => compareValues, + compilerOptionsAffectDeclarationPath: () => compilerOptionsAffectDeclarationPath, + compilerOptionsAffectEmit: () => compilerOptionsAffectEmit, + compilerOptionsAffectSemanticDiagnostics: () => compilerOptionsAffectSemanticDiagnostics, + compilerOptionsDidYouMeanDiagnostics: () => compilerOptionsDidYouMeanDiagnostics, + compilerOptionsIndicateEsModules: () => compilerOptionsIndicateEsModules, + computeCommonSourceDirectoryOfFilenames: () => computeCommonSourceDirectoryOfFilenames, + computeLineAndCharacterOfPosition: () => computeLineAndCharacterOfPosition, + computeLineOfPosition: () => computeLineOfPosition, + computeLineStarts: () => computeLineStarts, + computePositionOfLineAndCharacter: () => computePositionOfLineAndCharacter, + computeSignatureWithDiagnostics: () => computeSignatureWithDiagnostics, + computeSuggestionDiagnostics: () => computeSuggestionDiagnostics, + computedOptions: () => computedOptions, + concatenate: () => concatenate, + concatenateDiagnosticMessageChains: () => concatenateDiagnosticMessageChains, + consumesNodeCoreModules: () => consumesNodeCoreModules, + contains: () => contains, + containsIgnoredPath: () => containsIgnoredPath, + containsObjectRestOrSpread: () => containsObjectRestOrSpread, + containsParseError: () => containsParseError, + containsPath: () => containsPath, + convertCompilerOptionsForTelemetry: () => convertCompilerOptionsForTelemetry, + convertCompilerOptionsFromJson: () => convertCompilerOptionsFromJson, + convertJsonOption: () => convertJsonOption, + convertToBase64: () => convertToBase64, + convertToJson: () => convertToJson, + convertToObject: () => convertToObject, + convertToOptionsWithAbsolutePaths: () => convertToOptionsWithAbsolutePaths, + convertToRelativePath: () => convertToRelativePath, + convertToTSConfig: () => convertToTSConfig, + convertTypeAcquisitionFromJson: () => convertTypeAcquisitionFromJson, + copyComments: () => copyComments, + copyEntries: () => copyEntries, + copyLeadingComments: () => copyLeadingComments, + copyProperties: () => copyProperties, + copyTrailingAsLeadingComments: () => copyTrailingAsLeadingComments, + copyTrailingComments: () => copyTrailingComments, + couldStartTrivia: () => couldStartTrivia, + countWhere: () => countWhere, + createAbstractBuilder: () => createAbstractBuilder, + createAccessorPropertyBackingField: () => createAccessorPropertyBackingField, + createAccessorPropertyGetRedirector: () => createAccessorPropertyGetRedirector, + createAccessorPropertySetRedirector: () => createAccessorPropertySetRedirector, + createBaseNodeFactory: () => createBaseNodeFactory, + createBinaryExpressionTrampoline: () => createBinaryExpressionTrampoline, + createBuilderProgram: () => createBuilderProgram, + createBuilderProgramUsingIncrementalBuildInfo: () => createBuilderProgramUsingIncrementalBuildInfo, + createBuilderStatusReporter: () => createBuilderStatusReporter, + createCacheableExportInfoMap: () => createCacheableExportInfoMap, + createCachedDirectoryStructureHost: () => createCachedDirectoryStructureHost, + createClassifier: () => createClassifier, + createCommentDirectivesMap: () => createCommentDirectivesMap, + createCompilerDiagnostic: () => createCompilerDiagnostic, + createCompilerDiagnosticForInvalidCustomType: () => createCompilerDiagnosticForInvalidCustomType, + createCompilerDiagnosticFromMessageChain: () => createCompilerDiagnosticFromMessageChain, + createCompilerHost: () => createCompilerHost, + createCompilerHostFromProgramHost: () => createCompilerHostFromProgramHost, + createCompilerHostWorker: () => createCompilerHostWorker, + createDetachedDiagnostic: () => createDetachedDiagnostic, + createDiagnosticCollection: () => createDiagnosticCollection, + createDiagnosticForFileFromMessageChain: () => createDiagnosticForFileFromMessageChain, + createDiagnosticForNode: () => createDiagnosticForNode, + createDiagnosticForNodeArray: () => createDiagnosticForNodeArray, + createDiagnosticForNodeArrayFromMessageChain: () => createDiagnosticForNodeArrayFromMessageChain, + createDiagnosticForNodeFromMessageChain: () => createDiagnosticForNodeFromMessageChain, + createDiagnosticForNodeInSourceFile: () => createDiagnosticForNodeInSourceFile, + createDiagnosticForRange: () => createDiagnosticForRange, + createDiagnosticMessageChainFromDiagnostic: () => createDiagnosticMessageChainFromDiagnostic, + createDiagnosticReporter: () => createDiagnosticReporter, + createDocumentPositionMapper: () => createDocumentPositionMapper, + createDocumentRegistry: () => createDocumentRegistry, + createDocumentRegistryInternal: () => createDocumentRegistryInternal, + createEmitAndSemanticDiagnosticsBuilderProgram: () => createEmitAndSemanticDiagnosticsBuilderProgram, + createEmitHelperFactory: () => createEmitHelperFactory, + createEmptyExports: () => createEmptyExports, + createEvaluator: () => createEvaluator, + createExpressionForJsxElement: () => createExpressionForJsxElement, + createExpressionForJsxFragment: () => createExpressionForJsxFragment, + createExpressionForObjectLiteralElementLike: () => createExpressionForObjectLiteralElementLike, + createExpressionForPropertyName: () => createExpressionForPropertyName, + createExpressionFromEntityName: () => createExpressionFromEntityName, + createExternalHelpersImportDeclarationIfNeeded: () => createExternalHelpersImportDeclarationIfNeeded, + createFileDiagnostic: () => createFileDiagnostic, + createFileDiagnosticFromMessageChain: () => createFileDiagnosticFromMessageChain, + createFlowNode: () => createFlowNode, + createForOfBindingStatement: () => createForOfBindingStatement, + createFutureSourceFile: () => createFutureSourceFile, + createGetCanonicalFileName: () => createGetCanonicalFileName, + createGetIsolatedDeclarationErrors: () => createGetIsolatedDeclarationErrors, + createGetSourceFile: () => createGetSourceFile, + createGetSymbolAccessibilityDiagnosticForNode: () => createGetSymbolAccessibilityDiagnosticForNode, + createGetSymbolAccessibilityDiagnosticForNodeName: () => createGetSymbolAccessibilityDiagnosticForNodeName, + createGetSymbolWalker: () => createGetSymbolWalker, + createIncrementalCompilerHost: () => createIncrementalCompilerHost, + createIncrementalProgram: () => createIncrementalProgram, + createJsxFactoryExpression: () => createJsxFactoryExpression, + createLanguageService: () => createLanguageService, + createLanguageServiceSourceFile: () => createLanguageServiceSourceFile, + createMemberAccessForPropertyName: () => createMemberAccessForPropertyName, + createModeAwareCache: () => createModeAwareCache, + createModeAwareCacheKey: () => createModeAwareCacheKey, + createModeMismatchDetails: () => createModeMismatchDetails, + createModuleNotFoundChain: () => createModuleNotFoundChain, + createModuleResolutionCache: () => createModuleResolutionCache, + createModuleResolutionLoader: () => createModuleResolutionLoader, + createModuleResolutionLoaderUsingGlobalCache: () => createModuleResolutionLoaderUsingGlobalCache, + createModuleSpecifierResolutionHost: () => createModuleSpecifierResolutionHost, + createMultiMap: () => createMultiMap, + createNameResolver: () => createNameResolver, + createNodeConverters: () => createNodeConverters, + createNodeFactory: () => createNodeFactory, + createOptionNameMap: () => createOptionNameMap, + createOverload: () => createOverload, + createPackageJsonImportFilter: () => createPackageJsonImportFilter, + createPackageJsonInfo: () => createPackageJsonInfo, + createParenthesizerRules: () => createParenthesizerRules, + createPatternMatcher: () => createPatternMatcher, + createPrinter: () => createPrinter, + createPrinterWithDefaults: () => createPrinterWithDefaults, + createPrinterWithRemoveComments: () => createPrinterWithRemoveComments, + createPrinterWithRemoveCommentsNeverAsciiEscape: () => createPrinterWithRemoveCommentsNeverAsciiEscape, + createPrinterWithRemoveCommentsOmitTrailingSemicolon: () => createPrinterWithRemoveCommentsOmitTrailingSemicolon, + createProgram: () => createProgram, + createProgramDiagnostics: () => createProgramDiagnostics, + createProgramHost: () => createProgramHost, + createPropertyNameNodeForIdentifierOrLiteral: () => createPropertyNameNodeForIdentifierOrLiteral, + createQueue: () => createQueue, + createRange: () => createRange, + createRedirectedBuilderProgram: () => createRedirectedBuilderProgram, + createResolutionCache: () => createResolutionCache, + createRuntimeTypeSerializer: () => createRuntimeTypeSerializer, + createScanner: () => createScanner, + createSemanticDiagnosticsBuilderProgram: () => createSemanticDiagnosticsBuilderProgram, + createSet: () => createSet, + createSolutionBuilder: () => createSolutionBuilder, + createSolutionBuilderHost: () => createSolutionBuilderHost, + createSolutionBuilderWithWatch: () => createSolutionBuilderWithWatch, + createSolutionBuilderWithWatchHost: () => createSolutionBuilderWithWatchHost, + createSortedArray: () => createSortedArray, + createSourceFile: () => createSourceFile, + createSourceMapGenerator: () => createSourceMapGenerator, + createSourceMapSource: () => createSourceMapSource, + createSuperAccessVariableStatement: () => createSuperAccessVariableStatement, + createSymbolTable: () => createSymbolTable, + createSymlinkCache: () => createSymlinkCache, + createSyntacticTypeNodeBuilder: () => createSyntacticTypeNodeBuilder, + createSystemWatchFunctions: () => createSystemWatchFunctions, + createTextChange: () => createTextChange, + createTextChangeFromStartLength: () => createTextChangeFromStartLength, + createTextChangeRange: () => createTextChangeRange, + createTextRangeFromNode: () => createTextRangeFromNode, + createTextRangeFromSpan: () => createTextRangeFromSpan, + createTextSpan: () => createTextSpan, + createTextSpanFromBounds: () => createTextSpanFromBounds, + createTextSpanFromNode: () => createTextSpanFromNode, + createTextSpanFromRange: () => createTextSpanFromRange, + createTextSpanFromStringLiteralLikeContent: () => createTextSpanFromStringLiteralLikeContent, + createTextWriter: () => createTextWriter, + createTokenRange: () => createTokenRange, + createTypeChecker: () => createTypeChecker, + createTypeReferenceDirectiveResolutionCache: () => createTypeReferenceDirectiveResolutionCache, + createTypeReferenceResolutionLoader: () => createTypeReferenceResolutionLoader, + createWatchCompilerHost: () => createWatchCompilerHost2, + createWatchCompilerHostOfConfigFile: () => createWatchCompilerHostOfConfigFile, + createWatchCompilerHostOfFilesAndCompilerOptions: () => createWatchCompilerHostOfFilesAndCompilerOptions, + createWatchFactory: () => createWatchFactory, + createWatchHost: () => createWatchHost, + createWatchProgram: () => createWatchProgram, + createWatchStatusReporter: () => createWatchStatusReporter, + createWriteFileMeasuringIO: () => createWriteFileMeasuringIO, + declarationNameToString: () => declarationNameToString, + decodeMappings: () => decodeMappings, + decodedTextSpanIntersectsWith: () => decodedTextSpanIntersectsWith, + deduplicate: () => deduplicate, + defaultHoverMaximumTruncationLength: () => defaultHoverMaximumTruncationLength, + defaultInitCompilerOptions: () => defaultInitCompilerOptions, + defaultMaximumTruncationLength: () => defaultMaximumTruncationLength, + diagnosticCategoryName: () => diagnosticCategoryName, + diagnosticToString: () => diagnosticToString, + diagnosticsEqualityComparer: () => diagnosticsEqualityComparer, + directoryProbablyExists: () => directoryProbablyExists, + directorySeparator: () => directorySeparator, + displayPart: () => displayPart, + displayPartsToString: () => displayPartsToString, + disposeEmitNodes: () => disposeEmitNodes, + documentSpansEqual: () => documentSpansEqual, + dumpTracingLegend: () => dumpTracingLegend, + elementAt: () => elementAt, + elideNodes: () => elideNodes, + emitDetachedComments: () => emitDetachedComments, + emitFiles: () => emitFiles, + emitFilesAndReportErrors: () => emitFilesAndReportErrors, + emitFilesAndReportErrorsAndGetExitStatus: () => emitFilesAndReportErrorsAndGetExitStatus, + emitModuleKindIsNonNodeESM: () => emitModuleKindIsNonNodeESM, + emitNewLineBeforeLeadingCommentOfPosition: () => emitNewLineBeforeLeadingCommentOfPosition, + emitResolverSkipsTypeChecking: () => emitResolverSkipsTypeChecking, + emitSkippedWithNoDiagnostics: () => emitSkippedWithNoDiagnostics, + emptyArray: () => emptyArray, + emptyFileSystemEntries: () => emptyFileSystemEntries, + emptyMap: () => emptyMap, + emptyOptions: () => emptyOptions, + endsWith: () => endsWith, + ensurePathIsNonModuleName: () => ensurePathIsNonModuleName, + ensureScriptKind: () => ensureScriptKind, + ensureTrailingDirectorySeparator: () => ensureTrailingDirectorySeparator, + entityNameToString: () => entityNameToString, + enumerateInsertsAndDeletes: () => enumerateInsertsAndDeletes, + equalOwnProperties: () => equalOwnProperties, + equateStringsCaseInsensitive: () => equateStringsCaseInsensitive, + equateStringsCaseSensitive: () => equateStringsCaseSensitive, + equateValues: () => equateValues, + escapeJsxAttributeString: () => escapeJsxAttributeString, + escapeLeadingUnderscores: () => escapeLeadingUnderscores, + escapeNonAsciiString: () => escapeNonAsciiString, + escapeSnippetText: () => escapeSnippetText, + escapeString: () => escapeString, + escapeTemplateSubstitution: () => escapeTemplateSubstitution, + evaluatorResult: () => evaluatorResult, + every: () => every, + exclusivelyPrefixedNodeCoreModules: () => exclusivelyPrefixedNodeCoreModules, + executeCommandLine: () => executeCommandLine, + expandPreOrPostfixIncrementOrDecrementExpression: () => expandPreOrPostfixIncrementOrDecrementExpression, + explainFiles: () => explainFiles, + explainIfFileIsRedirectAndImpliedFormat: () => explainIfFileIsRedirectAndImpliedFormat, + exportAssignmentIsAlias: () => exportAssignmentIsAlias, + expressionResultIsUnused: () => expressionResultIsUnused, + extend: () => extend, + extensionFromPath: () => extensionFromPath, + extensionIsTS: () => extensionIsTS, + extensionsNotSupportingExtensionlessResolution: () => extensionsNotSupportingExtensionlessResolution, + externalHelpersModuleNameText: () => externalHelpersModuleNameText, + factory: () => factory, + fileExtensionIs: () => fileExtensionIs, + fileExtensionIsOneOf: () => fileExtensionIsOneOf, + fileIncludeReasonToDiagnostics: () => fileIncludeReasonToDiagnostics, + fileShouldUseJavaScriptRequire: () => fileShouldUseJavaScriptRequire, + filter: () => filter, + filterMutate: () => filterMutate, + filterSemanticDiagnostics: () => filterSemanticDiagnostics, + find: () => find, + findAncestor: () => findAncestor, + findBestPatternMatch: () => findBestPatternMatch, + findChildOfKind: () => findChildOfKind, + findComputedPropertyNameCacheAssignment: () => findComputedPropertyNameCacheAssignment, + findConfigFile: () => findConfigFile, + findConstructorDeclaration: () => findConstructorDeclaration, + findContainingList: () => findContainingList, + findDiagnosticForNode: () => findDiagnosticForNode, + findFirstNonJsxWhitespaceToken: () => findFirstNonJsxWhitespaceToken, + findIndex: () => findIndex, + findLast: () => findLast, + findLastIndex: () => findLastIndex, + findListItemInfo: () => findListItemInfo, + findModifier: () => findModifier, + findNextToken: () => findNextToken, + findPackageJson: () => findPackageJson, + findPackageJsons: () => findPackageJsons, + findPrecedingMatchingToken: () => findPrecedingMatchingToken, + findPrecedingToken: () => findPrecedingToken, + findSuperStatementIndexPath: () => findSuperStatementIndexPath, + findTokenOnLeftOfPosition: () => findTokenOnLeftOfPosition, + findUseStrictPrologue: () => findUseStrictPrologue, + first: () => first, + firstDefined: () => firstDefined, + firstDefinedIterator: () => firstDefinedIterator, + firstIterator: () => firstIterator, + firstOrOnly: () => firstOrOnly, + firstOrUndefined: () => firstOrUndefined, + firstOrUndefinedIterator: () => firstOrUndefinedIterator, + fixupCompilerOptions: () => fixupCompilerOptions, + flatMap: () => flatMap, + flatMapIterator: () => flatMapIterator, + flatMapToMutable: () => flatMapToMutable, + flatten: () => flatten, + flattenCommaList: () => flattenCommaList, + flattenDestructuringAssignment: () => flattenDestructuringAssignment, + flattenDestructuringBinding: () => flattenDestructuringBinding, + flattenDiagnosticMessageText: () => flattenDiagnosticMessageText, + forEach: () => forEach, + forEachAncestor: () => forEachAncestor, + forEachAncestorDirectory: () => forEachAncestorDirectory, + forEachAncestorDirectoryStoppingAtGlobalCache: () => forEachAncestorDirectoryStoppingAtGlobalCache, + forEachChild: () => forEachChild, + forEachChildRecursively: () => forEachChildRecursively, + forEachDynamicImportOrRequireCall: () => forEachDynamicImportOrRequireCall, + forEachEmittedFile: () => forEachEmittedFile, + forEachEnclosingBlockScopeContainer: () => forEachEnclosingBlockScopeContainer, + forEachEntry: () => forEachEntry, + forEachExternalModuleToImportFrom: () => forEachExternalModuleToImportFrom, + forEachImportClauseDeclaration: () => forEachImportClauseDeclaration, + forEachKey: () => forEachKey, + forEachLeadingCommentRange: () => forEachLeadingCommentRange, + forEachNameInAccessChainWalkingLeft: () => forEachNameInAccessChainWalkingLeft, + forEachNameOfDefaultExport: () => forEachNameOfDefaultExport, + forEachOptionsSyntaxByName: () => forEachOptionsSyntaxByName, + forEachProjectReference: () => forEachProjectReference, + forEachPropertyAssignment: () => forEachPropertyAssignment, + forEachResolvedProjectReference: () => forEachResolvedProjectReference, + forEachReturnStatement: () => forEachReturnStatement, + forEachRight: () => forEachRight, + forEachTrailingCommentRange: () => forEachTrailingCommentRange, + forEachTsConfigPropArray: () => forEachTsConfigPropArray, + forEachUnique: () => forEachUnique, + forEachYieldExpression: () => forEachYieldExpression, + formatColorAndReset: () => formatColorAndReset, + formatDiagnostic: () => formatDiagnostic, + formatDiagnostics: () => formatDiagnostics, + formatDiagnosticsWithColorAndContext: () => formatDiagnosticsWithColorAndContext, + formatGeneratedName: () => formatGeneratedName, + formatGeneratedNamePart: () => formatGeneratedNamePart, + formatLocation: () => formatLocation, + formatMessage: () => formatMessage, + formatStringFromArgs: () => formatStringFromArgs, + formatting: () => ts_formatting_exports, + generateDjb2Hash: () => generateDjb2Hash, + generateTSConfig: () => generateTSConfig, + getAdjustedReferenceLocation: () => getAdjustedReferenceLocation, + getAdjustedRenameLocation: () => getAdjustedRenameLocation, + getAliasDeclarationFromName: () => getAliasDeclarationFromName, + getAllAccessorDeclarations: () => getAllAccessorDeclarations, + getAllDecoratorsOfClass: () => getAllDecoratorsOfClass, + getAllDecoratorsOfClassElement: () => getAllDecoratorsOfClassElement, + getAllJSDocTags: () => getAllJSDocTags, + getAllJSDocTagsOfKind: () => getAllJSDocTagsOfKind, + getAllKeys: () => getAllKeys, + getAllProjectOutputs: () => getAllProjectOutputs, + getAllSuperTypeNodes: () => getAllSuperTypeNodes, + getAllowImportingTsExtensions: () => getAllowImportingTsExtensions, + getAllowJSCompilerOption: () => getAllowJSCompilerOption, + getAllowSyntheticDefaultImports: () => getAllowSyntheticDefaultImports, + getAncestor: () => getAncestor, + getAnyExtensionFromPath: () => getAnyExtensionFromPath, + getAreDeclarationMapsEnabled: () => getAreDeclarationMapsEnabled, + getAssignedExpandoInitializer: () => getAssignedExpandoInitializer, + getAssignedName: () => getAssignedName, + getAssignmentDeclarationKind: () => getAssignmentDeclarationKind, + getAssignmentDeclarationPropertyAccessKind: () => getAssignmentDeclarationPropertyAccessKind, + getAssignmentTargetKind: () => getAssignmentTargetKind, + getAutomaticTypeDirectiveNames: () => getAutomaticTypeDirectiveNames, + getBaseFileName: () => getBaseFileName, + getBinaryOperatorPrecedence: () => getBinaryOperatorPrecedence, + getBuildInfo: () => getBuildInfo, + getBuildInfoFileVersionMap: () => getBuildInfoFileVersionMap, + getBuildInfoText: () => getBuildInfoText, + getBuildOrderFromAnyBuildOrder: () => getBuildOrderFromAnyBuildOrder, + getBuilderCreationParameters: () => getBuilderCreationParameters, + getBuilderFileEmit: () => getBuilderFileEmit, + getCanonicalDiagnostic: () => getCanonicalDiagnostic, + getCheckFlags: () => getCheckFlags, + getClassExtendsHeritageElement: () => getClassExtendsHeritageElement, + getClassLikeDeclarationOfSymbol: () => getClassLikeDeclarationOfSymbol, + getCombinedLocalAndExportSymbolFlags: () => getCombinedLocalAndExportSymbolFlags, + getCombinedModifierFlags: () => getCombinedModifierFlags, + getCombinedNodeFlags: () => getCombinedNodeFlags, + getCombinedNodeFlagsAlwaysIncludeJSDoc: () => getCombinedNodeFlagsAlwaysIncludeJSDoc, + getCommentRange: () => getCommentRange, + getCommonSourceDirectory: () => getCommonSourceDirectory, + getCommonSourceDirectoryOfConfig: () => getCommonSourceDirectoryOfConfig, + getCompilerOptionValue: () => getCompilerOptionValue, + getConditions: () => getConditions, + getConfigFileParsingDiagnostics: () => getConfigFileParsingDiagnostics, + getConstantValue: () => getConstantValue, + getContainerFlags: () => getContainerFlags, + getContainerNode: () => getContainerNode, + getContainingClass: () => getContainingClass, + getContainingClassExcludingClassDecorators: () => getContainingClassExcludingClassDecorators, + getContainingClassStaticBlock: () => getContainingClassStaticBlock, + getContainingFunction: () => getContainingFunction, + getContainingFunctionDeclaration: () => getContainingFunctionDeclaration, + getContainingFunctionOrClassStaticBlock: () => getContainingFunctionOrClassStaticBlock, + getContainingNodeArray: () => getContainingNodeArray, + getContainingObjectLiteralElement: () => getContainingObjectLiteralElement, + getContextualTypeFromParent: () => getContextualTypeFromParent, + getContextualTypeFromParentOrAncestorTypeNode: () => getContextualTypeFromParentOrAncestorTypeNode, + getDeclarationDiagnostics: () => getDeclarationDiagnostics, + getDeclarationEmitExtensionForPath: () => getDeclarationEmitExtensionForPath, + getDeclarationEmitOutputFilePath: () => getDeclarationEmitOutputFilePath, + getDeclarationEmitOutputFilePathWorker: () => getDeclarationEmitOutputFilePathWorker, + getDeclarationFileExtension: () => getDeclarationFileExtension, + getDeclarationFromName: () => getDeclarationFromName, + getDeclarationModifierFlagsFromSymbol: () => getDeclarationModifierFlagsFromSymbol, + getDeclarationOfKind: () => getDeclarationOfKind, + getDeclarationsOfKind: () => getDeclarationsOfKind, + getDeclaredExpandoInitializer: () => getDeclaredExpandoInitializer, + getDecorators: () => getDecorators, + getDefaultCompilerOptions: () => getDefaultCompilerOptions2, + getDefaultFormatCodeSettings: () => getDefaultFormatCodeSettings, + getDefaultLibFileName: () => getDefaultLibFileName, + getDefaultLibFilePath: () => getDefaultLibFilePath, + getDefaultLikeExportInfo: () => getDefaultLikeExportInfo, + getDefaultLikeExportNameFromDeclaration: () => getDefaultLikeExportNameFromDeclaration, + getDefaultResolutionModeForFileWorker: () => getDefaultResolutionModeForFileWorker, + getDiagnosticText: () => getDiagnosticText, + getDiagnosticsWithinSpan: () => getDiagnosticsWithinSpan, + getDirectoryPath: () => getDirectoryPath, + getDirectoryToWatchFailedLookupLocation: () => getDirectoryToWatchFailedLookupLocation, + getDirectoryToWatchFailedLookupLocationFromTypeRoot: () => getDirectoryToWatchFailedLookupLocationFromTypeRoot, + getDocumentPositionMapper: () => getDocumentPositionMapper, + getDocumentSpansEqualityComparer: () => getDocumentSpansEqualityComparer, + getESModuleInterop: () => getESModuleInterop, + getEditsForFileRename: () => getEditsForFileRename, + getEffectiveBaseTypeNode: () => getEffectiveBaseTypeNode, + getEffectiveConstraintOfTypeParameter: () => getEffectiveConstraintOfTypeParameter, + getEffectiveContainerForJSDocTemplateTag: () => getEffectiveContainerForJSDocTemplateTag, + getEffectiveImplementsTypeNodes: () => getEffectiveImplementsTypeNodes, + getEffectiveInitializer: () => getEffectiveInitializer, + getEffectiveJSDocHost: () => getEffectiveJSDocHost, + getEffectiveModifierFlags: () => getEffectiveModifierFlags, + getEffectiveModifierFlagsAlwaysIncludeJSDoc: () => getEffectiveModifierFlagsAlwaysIncludeJSDoc, + getEffectiveModifierFlagsNoCache: () => getEffectiveModifierFlagsNoCache, + getEffectiveReturnTypeNode: () => getEffectiveReturnTypeNode, + getEffectiveSetAccessorTypeAnnotationNode: () => getEffectiveSetAccessorTypeAnnotationNode, + getEffectiveTypeAnnotationNode: () => getEffectiveTypeAnnotationNode, + getEffectiveTypeParameterDeclarations: () => getEffectiveTypeParameterDeclarations, + getEffectiveTypeRoots: () => getEffectiveTypeRoots, + getElementOrPropertyAccessArgumentExpressionOrName: () => getElementOrPropertyAccessArgumentExpressionOrName, + getElementOrPropertyAccessName: () => getElementOrPropertyAccessName, + getElementsOfBindingOrAssignmentPattern: () => getElementsOfBindingOrAssignmentPattern, + getEmitDeclarations: () => getEmitDeclarations, + getEmitFlags: () => getEmitFlags, + getEmitHelpers: () => getEmitHelpers, + getEmitModuleDetectionKind: () => getEmitModuleDetectionKind, + getEmitModuleFormatOfFileWorker: () => getEmitModuleFormatOfFileWorker, + getEmitModuleKind: () => getEmitModuleKind, + getEmitModuleResolutionKind: () => getEmitModuleResolutionKind, + getEmitScriptTarget: () => getEmitScriptTarget, + getEmitStandardClassFields: () => getEmitStandardClassFields, + getEnclosingBlockScopeContainer: () => getEnclosingBlockScopeContainer, + getEnclosingContainer: () => getEnclosingContainer, + getEncodedSemanticClassifications: () => getEncodedSemanticClassifications, + getEncodedSyntacticClassifications: () => getEncodedSyntacticClassifications, + getEndLinePosition: () => getEndLinePosition, + getEntityNameFromTypeNode: () => getEntityNameFromTypeNode, + getEntrypointsFromPackageJsonInfo: () => getEntrypointsFromPackageJsonInfo, + getErrorCountForSummary: () => getErrorCountForSummary, + getErrorSpanForNode: () => getErrorSpanForNode, + getErrorSummaryText: () => getErrorSummaryText, + getEscapedTextOfIdentifierOrLiteral: () => getEscapedTextOfIdentifierOrLiteral, + getEscapedTextOfJsxAttributeName: () => getEscapedTextOfJsxAttributeName, + getEscapedTextOfJsxNamespacedName: () => getEscapedTextOfJsxNamespacedName, + getExpandoInitializer: () => getExpandoInitializer, + getExportAssignmentExpression: () => getExportAssignmentExpression, + getExportInfoMap: () => getExportInfoMap, + getExportNeedsImportStarHelper: () => getExportNeedsImportStarHelper, + getExpressionAssociativity: () => getExpressionAssociativity, + getExpressionPrecedence: () => getExpressionPrecedence, + getExternalHelpersModuleName: () => getExternalHelpersModuleName, + getExternalModuleImportEqualsDeclarationExpression: () => getExternalModuleImportEqualsDeclarationExpression, + getExternalModuleName: () => getExternalModuleName, + getExternalModuleNameFromDeclaration: () => getExternalModuleNameFromDeclaration, + getExternalModuleNameFromPath: () => getExternalModuleNameFromPath, + getExternalModuleNameLiteral: () => getExternalModuleNameLiteral, + getExternalModuleRequireArgument: () => getExternalModuleRequireArgument, + getFallbackOptions: () => getFallbackOptions, + getFileEmitOutput: () => getFileEmitOutput, + getFileMatcherPatterns: () => getFileMatcherPatterns, + getFileNamesFromConfigSpecs: () => getFileNamesFromConfigSpecs, + getFileWatcherEventKind: () => getFileWatcherEventKind, + getFilesInErrorForSummary: () => getFilesInErrorForSummary, + getFirstConstructorWithBody: () => getFirstConstructorWithBody, + getFirstIdentifier: () => getFirstIdentifier, + getFirstNonSpaceCharacterPosition: () => getFirstNonSpaceCharacterPosition, + getFirstProjectOutput: () => getFirstProjectOutput, + getFixableErrorSpanExpression: () => getFixableErrorSpanExpression, + getFormatCodeSettingsForWriting: () => getFormatCodeSettingsForWriting, + getFullWidth: () => getFullWidth, + getFunctionFlags: () => getFunctionFlags, + getHeritageClause: () => getHeritageClause, + getHostSignatureFromJSDoc: () => getHostSignatureFromJSDoc, + getIdentifierAutoGenerate: () => getIdentifierAutoGenerate, + getIdentifierGeneratedImportReference: () => getIdentifierGeneratedImportReference, + getIdentifierTypeArguments: () => getIdentifierTypeArguments, + getImmediatelyInvokedFunctionExpression: () => getImmediatelyInvokedFunctionExpression, + getImpliedNodeFormatForEmitWorker: () => getImpliedNodeFormatForEmitWorker, + getImpliedNodeFormatForFile: () => getImpliedNodeFormatForFile, + getImpliedNodeFormatForFileWorker: () => getImpliedNodeFormatForFileWorker, + getImportNeedsImportDefaultHelper: () => getImportNeedsImportDefaultHelper, + getImportNeedsImportStarHelper: () => getImportNeedsImportStarHelper, + getIndentString: () => getIndentString, + getInferredLibraryNameResolveFrom: () => getInferredLibraryNameResolveFrom, + getInitializedVariables: () => getInitializedVariables, + getInitializerOfBinaryExpression: () => getInitializerOfBinaryExpression, + getInitializerOfBindingOrAssignmentElement: () => getInitializerOfBindingOrAssignmentElement, + getInterfaceBaseTypeNodes: () => getInterfaceBaseTypeNodes, + getInternalEmitFlags: () => getInternalEmitFlags, + getInvokedExpression: () => getInvokedExpression, + getIsFileExcluded: () => getIsFileExcluded, + getIsolatedModules: () => getIsolatedModules, + getJSDocAugmentsTag: () => getJSDocAugmentsTag, + getJSDocClassTag: () => getJSDocClassTag, + getJSDocCommentRanges: () => getJSDocCommentRanges, + getJSDocCommentsAndTags: () => getJSDocCommentsAndTags, + getJSDocDeprecatedTag: () => getJSDocDeprecatedTag, + getJSDocDeprecatedTagNoCache: () => getJSDocDeprecatedTagNoCache, + getJSDocEnumTag: () => getJSDocEnumTag, + getJSDocHost: () => getJSDocHost, + getJSDocImplementsTags: () => getJSDocImplementsTags, + getJSDocOverloadTags: () => getJSDocOverloadTags, + getJSDocOverrideTagNoCache: () => getJSDocOverrideTagNoCache, + getJSDocParameterTags: () => getJSDocParameterTags, + getJSDocParameterTagsNoCache: () => getJSDocParameterTagsNoCache, + getJSDocPrivateTag: () => getJSDocPrivateTag, + getJSDocPrivateTagNoCache: () => getJSDocPrivateTagNoCache, + getJSDocProtectedTag: () => getJSDocProtectedTag, + getJSDocProtectedTagNoCache: () => getJSDocProtectedTagNoCache, + getJSDocPublicTag: () => getJSDocPublicTag, + getJSDocPublicTagNoCache: () => getJSDocPublicTagNoCache, + getJSDocReadonlyTag: () => getJSDocReadonlyTag, + getJSDocReadonlyTagNoCache: () => getJSDocReadonlyTagNoCache, + getJSDocReturnTag: () => getJSDocReturnTag, + getJSDocReturnType: () => getJSDocReturnType, + getJSDocRoot: () => getJSDocRoot, + getJSDocSatisfiesExpressionType: () => getJSDocSatisfiesExpressionType, + getJSDocSatisfiesTag: () => getJSDocSatisfiesTag, + getJSDocTags: () => getJSDocTags, + getJSDocTemplateTag: () => getJSDocTemplateTag, + getJSDocThisTag: () => getJSDocThisTag, + getJSDocType: () => getJSDocType, + getJSDocTypeAliasName: () => getJSDocTypeAliasName, + getJSDocTypeAssertionType: () => getJSDocTypeAssertionType, + getJSDocTypeParameterDeclarations: () => getJSDocTypeParameterDeclarations, + getJSDocTypeParameterTags: () => getJSDocTypeParameterTags, + getJSDocTypeParameterTagsNoCache: () => getJSDocTypeParameterTagsNoCache, + getJSDocTypeTag: () => getJSDocTypeTag, + getJSXImplicitImportBase: () => getJSXImplicitImportBase, + getJSXRuntimeImport: () => getJSXRuntimeImport, + getJSXTransformEnabled: () => getJSXTransformEnabled, + getKeyForCompilerOptions: () => getKeyForCompilerOptions, + getLanguageVariant: () => getLanguageVariant, + getLastChild: () => getLastChild, + getLeadingCommentRanges: () => getLeadingCommentRanges, + getLeadingCommentRangesOfNode: () => getLeadingCommentRangesOfNode, + getLeftmostAccessExpression: () => getLeftmostAccessExpression, + getLeftmostExpression: () => getLeftmostExpression, + getLibFileNameFromLibReference: () => getLibFileNameFromLibReference, + getLibNameFromLibReference: () => getLibNameFromLibReference, + getLibraryNameFromLibFileName: () => getLibraryNameFromLibFileName, + getLineAndCharacterOfPosition: () => getLineAndCharacterOfPosition, + getLineInfo: () => getLineInfo, + getLineOfLocalPosition: () => getLineOfLocalPosition, + getLineStartPositionForPosition: () => getLineStartPositionForPosition, + getLineStarts: () => getLineStarts, + getLinesBetweenPositionAndNextNonWhitespaceCharacter: () => getLinesBetweenPositionAndNextNonWhitespaceCharacter, + getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter: () => getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter, + getLinesBetweenPositions: () => getLinesBetweenPositions, + getLinesBetweenRangeEndAndRangeStart: () => getLinesBetweenRangeEndAndRangeStart, + getLinesBetweenRangeEndPositions: () => getLinesBetweenRangeEndPositions, + getLiteralText: () => getLiteralText, + getLocalNameForExternalImport: () => getLocalNameForExternalImport, + getLocalSymbolForExportDefault: () => getLocalSymbolForExportDefault, + getLocaleSpecificMessage: () => getLocaleSpecificMessage, + getLocaleTimeString: () => getLocaleTimeString, + getMappedContextSpan: () => getMappedContextSpan, + getMappedDocumentSpan: () => getMappedDocumentSpan, + getMappedLocation: () => getMappedLocation, + getMatchedFileSpec: () => getMatchedFileSpec, + getMatchedIncludeSpec: () => getMatchedIncludeSpec, + getMeaningFromDeclaration: () => getMeaningFromDeclaration, + getMeaningFromLocation: () => getMeaningFromLocation, + getMembersOfDeclaration: () => getMembersOfDeclaration, + getModeForFileReference: () => getModeForFileReference, + getModeForResolutionAtIndex: () => getModeForResolutionAtIndex, + getModeForUsageLocation: () => getModeForUsageLocation, + getModifiedTime: () => getModifiedTime, + getModifiers: () => getModifiers, + getModuleInstanceState: () => getModuleInstanceState, + getModuleNameStringLiteralAt: () => getModuleNameStringLiteralAt, + getModuleSpecifierEndingPreference: () => getModuleSpecifierEndingPreference, + getModuleSpecifierResolverHost: () => getModuleSpecifierResolverHost, + getNameForExportedSymbol: () => getNameForExportedSymbol, + getNameFromImportAttribute: () => getNameFromImportAttribute, + getNameFromIndexInfo: () => getNameFromIndexInfo, + getNameFromPropertyName: () => getNameFromPropertyName, + getNameOfAccessExpression: () => getNameOfAccessExpression, + getNameOfCompilerOptionValue: () => getNameOfCompilerOptionValue, + getNameOfDeclaration: () => getNameOfDeclaration, + getNameOfExpando: () => getNameOfExpando, + getNameOfJSDocTypedef: () => getNameOfJSDocTypedef, + getNameOfScriptTarget: () => getNameOfScriptTarget, + getNameOrArgument: () => getNameOrArgument, + getNameTable: () => getNameTable, + getNamespaceDeclarationNode: () => getNamespaceDeclarationNode, + getNewLineCharacter: () => getNewLineCharacter, + getNewLineKind: () => getNewLineKind, + getNewLineOrDefaultFromHost: () => getNewLineOrDefaultFromHost, + getNewTargetContainer: () => getNewTargetContainer, + getNextJSDocCommentLocation: () => getNextJSDocCommentLocation, + getNodeChildren: () => getNodeChildren, + getNodeForGeneratedName: () => getNodeForGeneratedName, + getNodeId: () => getNodeId, + getNodeKind: () => getNodeKind, + getNodeModifiers: () => getNodeModifiers, + getNodeModulePathParts: () => getNodeModulePathParts, + getNonAssignedNameOfDeclaration: () => getNonAssignedNameOfDeclaration, + getNonAssignmentOperatorForCompoundAssignment: () => getNonAssignmentOperatorForCompoundAssignment, + getNonAugmentationDeclaration: () => getNonAugmentationDeclaration, + getNonDecoratorTokenPosOfNode: () => getNonDecoratorTokenPosOfNode, + getNonIncrementalBuildInfoRoots: () => getNonIncrementalBuildInfoRoots, + getNonModifierTokenPosOfNode: () => getNonModifierTokenPosOfNode, + getNormalizedAbsolutePath: () => getNormalizedAbsolutePath, + getNormalizedAbsolutePathWithoutRoot: () => getNormalizedAbsolutePathWithoutRoot, + getNormalizedPathComponents: () => getNormalizedPathComponents, + getObjectFlags: () => getObjectFlags, + getOperatorAssociativity: () => getOperatorAssociativity, + getOperatorPrecedence: () => getOperatorPrecedence, + getOptionFromName: () => getOptionFromName, + getOptionsForLibraryResolution: () => getOptionsForLibraryResolution, + getOptionsNameMap: () => getOptionsNameMap, + getOptionsSyntaxByArrayElementValue: () => getOptionsSyntaxByArrayElementValue, + getOptionsSyntaxByValue: () => getOptionsSyntaxByValue, + getOrCreateEmitNode: () => getOrCreateEmitNode, + getOrUpdate: () => getOrUpdate, + getOriginalNode: () => getOriginalNode, + getOriginalNodeId: () => getOriginalNodeId, + getOutputDeclarationFileName: () => getOutputDeclarationFileName, + getOutputDeclarationFileNameWorker: () => getOutputDeclarationFileNameWorker, + getOutputExtension: () => getOutputExtension, + getOutputFileNames: () => getOutputFileNames, + getOutputJSFileNameWorker: () => getOutputJSFileNameWorker, + getOutputPathsFor: () => getOutputPathsFor, + getOwnEmitOutputFilePath: () => getOwnEmitOutputFilePath, + getOwnKeys: () => getOwnKeys, + getOwnValues: () => getOwnValues, + getPackageJsonTypesVersionsPaths: () => getPackageJsonTypesVersionsPaths, + getPackageNameFromTypesPackageName: () => getPackageNameFromTypesPackageName, + getPackageScopeForPath: () => getPackageScopeForPath, + getParameterSymbolFromJSDoc: () => getParameterSymbolFromJSDoc, + getParentNodeInSpan: () => getParentNodeInSpan, + getParseTreeNode: () => getParseTreeNode, + getParsedCommandLineOfConfigFile: () => getParsedCommandLineOfConfigFile, + getPathComponents: () => getPathComponents, + getPathFromPathComponents: () => getPathFromPathComponents, + getPathUpdater: () => getPathUpdater, + getPathsBasePath: () => getPathsBasePath, + getPatternFromSpec: () => getPatternFromSpec, + getPendingEmitKindWithSeen: () => getPendingEmitKindWithSeen, + getPositionOfLineAndCharacter: () => getPositionOfLineAndCharacter, + getPossibleGenericSignatures: () => getPossibleGenericSignatures, + getPossibleOriginalInputExtensionForExtension: () => getPossibleOriginalInputExtensionForExtension, + getPossibleOriginalInputPathWithoutChangingExt: () => getPossibleOriginalInputPathWithoutChangingExt, + getPossibleTypeArgumentsInfo: () => getPossibleTypeArgumentsInfo, + getPreEmitDiagnostics: () => getPreEmitDiagnostics, + getPrecedingNonSpaceCharacterPosition: () => getPrecedingNonSpaceCharacterPosition, + getPrivateIdentifier: () => getPrivateIdentifier, + getProperties: () => getProperties, + getProperty: () => getProperty, + getPropertyAssignmentAliasLikeExpression: () => getPropertyAssignmentAliasLikeExpression, + getPropertyNameForPropertyNameNode: () => getPropertyNameForPropertyNameNode, + getPropertyNameFromType: () => getPropertyNameFromType, + getPropertyNameOfBindingOrAssignmentElement: () => getPropertyNameOfBindingOrAssignmentElement, + getPropertySymbolFromBindingElement: () => getPropertySymbolFromBindingElement, + getPropertySymbolsFromContextualType: () => getPropertySymbolsFromContextualType, + getQuoteFromPreference: () => getQuoteFromPreference, + getQuotePreference: () => getQuotePreference, + getRangesWhere: () => getRangesWhere, + getRefactorContextSpan: () => getRefactorContextSpan, + getReferencedFileLocation: () => getReferencedFileLocation, + getRegexFromPattern: () => getRegexFromPattern, + getRegularExpressionForWildcard: () => getRegularExpressionForWildcard, + getRegularExpressionsForWildcards: () => getRegularExpressionsForWildcards, + getRelativePathFromDirectory: () => getRelativePathFromDirectory, + getRelativePathFromFile: () => getRelativePathFromFile, + getRelativePathToDirectoryOrUrl: () => getRelativePathToDirectoryOrUrl, + getRenameLocation: () => getRenameLocation, + getReplacementSpanForContextToken: () => getReplacementSpanForContextToken, + getResolutionDiagnostic: () => getResolutionDiagnostic, + getResolutionModeOverride: () => getResolutionModeOverride, + getResolveJsonModule: () => getResolveJsonModule, + getResolvePackageJsonExports: () => getResolvePackageJsonExports, + getResolvePackageJsonImports: () => getResolvePackageJsonImports, + getResolvedExternalModuleName: () => getResolvedExternalModuleName, + getResolvedModuleFromResolution: () => getResolvedModuleFromResolution, + getResolvedTypeReferenceDirectiveFromResolution: () => getResolvedTypeReferenceDirectiveFromResolution, + getRestIndicatorOfBindingOrAssignmentElement: () => getRestIndicatorOfBindingOrAssignmentElement, + getRestParameterElementType: () => getRestParameterElementType, + getRightMostAssignedExpression: () => getRightMostAssignedExpression, + getRootDeclaration: () => getRootDeclaration, + getRootDirectoryOfResolutionCache: () => getRootDirectoryOfResolutionCache, + getRootLength: () => getRootLength, + getScriptKind: () => getScriptKind, + getScriptKindFromFileName: () => getScriptKindFromFileName, + getScriptTargetFeatures: () => getScriptTargetFeatures, + getSelectedEffectiveModifierFlags: () => getSelectedEffectiveModifierFlags, + getSelectedSyntacticModifierFlags: () => getSelectedSyntacticModifierFlags, + getSemanticClassifications: () => getSemanticClassifications, + getSemanticJsxChildren: () => getSemanticJsxChildren, + getSetAccessorTypeAnnotationNode: () => getSetAccessorTypeAnnotationNode, + getSetAccessorValueParameter: () => getSetAccessorValueParameter, + getSetExternalModuleIndicator: () => getSetExternalModuleIndicator, + getShebang: () => getShebang, + getSingleVariableOfVariableStatement: () => getSingleVariableOfVariableStatement, + getSnapshotText: () => getSnapshotText, + getSnippetElement: () => getSnippetElement, + getSourceFileOfModule: () => getSourceFileOfModule, + getSourceFileOfNode: () => getSourceFileOfNode, + getSourceFilePathInNewDir: () => getSourceFilePathInNewDir, + getSourceFileVersionAsHashFromText: () => getSourceFileVersionAsHashFromText, + getSourceFilesToEmit: () => getSourceFilesToEmit, + getSourceMapRange: () => getSourceMapRange, + getSourceMapper: () => getSourceMapper, + getSourceTextOfNodeFromSourceFile: () => getSourceTextOfNodeFromSourceFile, + getSpanOfTokenAtPosition: () => getSpanOfTokenAtPosition, + getSpellingSuggestion: () => getSpellingSuggestion, + getStartPositionOfLine: () => getStartPositionOfLine, + getStartPositionOfRange: () => getStartPositionOfRange, + getStartsOnNewLine: () => getStartsOnNewLine, + getStaticPropertiesAndClassStaticBlock: () => getStaticPropertiesAndClassStaticBlock, + getStrictOptionValue: () => getStrictOptionValue, + getStringComparer: () => getStringComparer, + getSubPatternFromSpec: () => getSubPatternFromSpec, + getSuperCallFromStatement: () => getSuperCallFromStatement, + getSuperContainer: () => getSuperContainer, + getSupportedCodeFixes: () => getSupportedCodeFixes, + getSupportedExtensions: () => getSupportedExtensions, + getSupportedExtensionsWithJsonIfResolveJsonModule: () => getSupportedExtensionsWithJsonIfResolveJsonModule, + getSwitchedType: () => getSwitchedType, + getSymbolId: () => getSymbolId, + getSymbolNameForPrivateIdentifier: () => getSymbolNameForPrivateIdentifier, + getSymbolTarget: () => getSymbolTarget, + getSyntacticClassifications: () => getSyntacticClassifications, + getSyntacticModifierFlags: () => getSyntacticModifierFlags, + getSyntacticModifierFlagsNoCache: () => getSyntacticModifierFlagsNoCache, + getSynthesizedDeepClone: () => getSynthesizedDeepClone, + getSynthesizedDeepCloneWithReplacements: () => getSynthesizedDeepCloneWithReplacements, + getSynthesizedDeepClones: () => getSynthesizedDeepClones, + getSynthesizedDeepClonesWithReplacements: () => getSynthesizedDeepClonesWithReplacements, + getSyntheticLeadingComments: () => getSyntheticLeadingComments, + getSyntheticTrailingComments: () => getSyntheticTrailingComments, + getTargetLabel: () => getTargetLabel, + getTargetOfBindingOrAssignmentElement: () => getTargetOfBindingOrAssignmentElement, + getTemporaryModuleResolutionState: () => getTemporaryModuleResolutionState, + getTextOfConstantValue: () => getTextOfConstantValue, + getTextOfIdentifierOrLiteral: () => getTextOfIdentifierOrLiteral, + getTextOfJSDocComment: () => getTextOfJSDocComment, + getTextOfJsxAttributeName: () => getTextOfJsxAttributeName, + getTextOfJsxNamespacedName: () => getTextOfJsxNamespacedName, + getTextOfNode: () => getTextOfNode, + getTextOfNodeFromSourceText: () => getTextOfNodeFromSourceText, + getTextOfPropertyName: () => getTextOfPropertyName, + getThisContainer: () => getThisContainer, + getThisParameter: () => getThisParameter, + getTokenAtPosition: () => getTokenAtPosition, + getTokenPosOfNode: () => getTokenPosOfNode, + getTokenSourceMapRange: () => getTokenSourceMapRange, + getTouchingPropertyName: () => getTouchingPropertyName, + getTouchingToken: () => getTouchingToken, + getTrailingCommentRanges: () => getTrailingCommentRanges, + getTrailingSemicolonDeferringWriter: () => getTrailingSemicolonDeferringWriter, + getTransformers: () => getTransformers, + getTsBuildInfoEmitOutputFilePath: () => getTsBuildInfoEmitOutputFilePath, + getTsConfigObjectLiteralExpression: () => getTsConfigObjectLiteralExpression, + getTsConfigPropArrayElementValue: () => getTsConfigPropArrayElementValue, + getTypeAnnotationNode: () => getTypeAnnotationNode, + getTypeArgumentOrTypeParameterList: () => getTypeArgumentOrTypeParameterList, + getTypeKeywordOfTypeOnlyImport: () => getTypeKeywordOfTypeOnlyImport, + getTypeNode: () => getTypeNode, + getTypeNodeIfAccessible: () => getTypeNodeIfAccessible, + getTypeParameterFromJsDoc: () => getTypeParameterFromJsDoc, + getTypeParameterOwner: () => getTypeParameterOwner, + getTypesPackageName: () => getTypesPackageName, + getUILocale: () => getUILocale, + getUniqueName: () => getUniqueName, + getUniqueSymbolId: () => getUniqueSymbolId, + getUseDefineForClassFields: () => getUseDefineForClassFields, + getWatchErrorSummaryDiagnosticMessage: () => getWatchErrorSummaryDiagnosticMessage, + getWatchFactory: () => getWatchFactory, + group: () => group, + groupBy: () => groupBy, + guessIndentation: () => guessIndentation, + handleNoEmitOptions: () => handleNoEmitOptions, + handleWatchOptionsConfigDirTemplateSubstitution: () => handleWatchOptionsConfigDirTemplateSubstitution, + hasAbstractModifier: () => hasAbstractModifier, + hasAccessorModifier: () => hasAccessorModifier, + hasAmbientModifier: () => hasAmbientModifier, + hasChangesInResolutions: () => hasChangesInResolutions, + hasContextSensitiveParameters: () => hasContextSensitiveParameters, + hasDecorators: () => hasDecorators, + hasDocComment: () => hasDocComment, + hasDynamicName: () => hasDynamicName, + hasEffectiveModifier: () => hasEffectiveModifier, + hasEffectiveModifiers: () => hasEffectiveModifiers, + hasEffectiveReadonlyModifier: () => hasEffectiveReadonlyModifier, + hasExtension: () => hasExtension, + hasImplementationTSFileExtension: () => hasImplementationTSFileExtension, + hasIndexSignature: () => hasIndexSignature, + hasInferredType: () => hasInferredType, + hasInitializer: () => hasInitializer, + hasInvalidEscape: () => hasInvalidEscape, + hasJSDocNodes: () => hasJSDocNodes, + hasJSDocParameterTags: () => hasJSDocParameterTags, + hasJSFileExtension: () => hasJSFileExtension, + hasJsonModuleEmitEnabled: () => hasJsonModuleEmitEnabled, + hasOnlyExpressionInitializer: () => hasOnlyExpressionInitializer, + hasOverrideModifier: () => hasOverrideModifier, + hasPossibleExternalModuleReference: () => hasPossibleExternalModuleReference, + hasProperty: () => hasProperty, + hasPropertyAccessExpressionWithName: () => hasPropertyAccessExpressionWithName, + hasQuestionToken: () => hasQuestionToken, + hasRecordedExternalHelpers: () => hasRecordedExternalHelpers, + hasResolutionModeOverride: () => hasResolutionModeOverride, + hasRestParameter: () => hasRestParameter, + hasScopeMarker: () => hasScopeMarker, + hasStaticModifier: () => hasStaticModifier, + hasSyntacticModifier: () => hasSyntacticModifier, + hasSyntacticModifiers: () => hasSyntacticModifiers, + hasTSFileExtension: () => hasTSFileExtension, + hasTabstop: () => hasTabstop, + hasTrailingDirectorySeparator: () => hasTrailingDirectorySeparator, + hasType: () => hasType, + hasTypeArguments: () => hasTypeArguments, + hasZeroOrOneAsteriskCharacter: () => hasZeroOrOneAsteriskCharacter, + hostGetCanonicalFileName: () => hostGetCanonicalFileName, + hostUsesCaseSensitiveFileNames: () => hostUsesCaseSensitiveFileNames, + idText: () => idText, + identifierIsThisKeyword: () => identifierIsThisKeyword, + identifierToKeywordKind: () => identifierToKeywordKind, + identity: () => identity, + identitySourceMapConsumer: () => identitySourceMapConsumer, + ignoreSourceNewlines: () => ignoreSourceNewlines, + ignoredPaths: () => ignoredPaths, + importFromModuleSpecifier: () => importFromModuleSpecifier, + importSyntaxAffectsModuleResolution: () => importSyntaxAffectsModuleResolution, + indexOfAnyCharCode: () => indexOfAnyCharCode, + indexOfNode: () => indexOfNode, + indicesOf: () => indicesOf, + inferredTypesContainingFile: () => inferredTypesContainingFile, + injectClassNamedEvaluationHelperBlockIfMissing: () => injectClassNamedEvaluationHelperBlockIfMissing, + injectClassThisAssignmentIfMissing: () => injectClassThisAssignmentIfMissing, + insertImports: () => insertImports, + insertSorted: () => insertSorted, + insertStatementAfterCustomPrologue: () => insertStatementAfterCustomPrologue, + insertStatementAfterStandardPrologue: () => insertStatementAfterStandardPrologue, + insertStatementsAfterCustomPrologue: () => insertStatementsAfterCustomPrologue, + insertStatementsAfterStandardPrologue: () => insertStatementsAfterStandardPrologue, + intersperse: () => intersperse, + intrinsicTagNameToString: () => intrinsicTagNameToString, + introducesArgumentsExoticObject: () => introducesArgumentsExoticObject, + inverseJsxOptionMap: () => inverseJsxOptionMap, + isAbstractConstructorSymbol: () => isAbstractConstructorSymbol, + isAbstractModifier: () => isAbstractModifier, + isAccessExpression: () => isAccessExpression, + isAccessibilityModifier: () => isAccessibilityModifier, + isAccessor: () => isAccessor, + isAccessorModifier: () => isAccessorModifier, + isAliasableExpression: () => isAliasableExpression, + isAmbientModule: () => isAmbientModule, + isAmbientPropertyDeclaration: () => isAmbientPropertyDeclaration, + isAnyDirectorySeparator: () => isAnyDirectorySeparator, + isAnyImportOrBareOrAccessedRequire: () => isAnyImportOrBareOrAccessedRequire, + isAnyImportOrReExport: () => isAnyImportOrReExport, + isAnyImportOrRequireStatement: () => isAnyImportOrRequireStatement, + isAnyImportSyntax: () => isAnyImportSyntax, + isAnySupportedFileExtension: () => isAnySupportedFileExtension, + isApplicableVersionedTypesKey: () => isApplicableVersionedTypesKey, + isArgumentExpressionOfElementAccess: () => isArgumentExpressionOfElementAccess, + isArray: () => isArray, + isArrayBindingElement: () => isArrayBindingElement, + isArrayBindingOrAssignmentElement: () => isArrayBindingOrAssignmentElement, + isArrayBindingOrAssignmentPattern: () => isArrayBindingOrAssignmentPattern, + isArrayBindingPattern: () => isArrayBindingPattern, + isArrayLiteralExpression: () => isArrayLiteralExpression, + isArrayLiteralOrObjectLiteralDestructuringPattern: () => isArrayLiteralOrObjectLiteralDestructuringPattern, + isArrayTypeNode: () => isArrayTypeNode, + isArrowFunction: () => isArrowFunction, + isAsExpression: () => isAsExpression, + isAssertClause: () => isAssertClause, + isAssertEntry: () => isAssertEntry, + isAssertionExpression: () => isAssertionExpression, + isAssertsKeyword: () => isAssertsKeyword, + isAssignmentDeclaration: () => isAssignmentDeclaration, + isAssignmentExpression: () => isAssignmentExpression, + isAssignmentOperator: () => isAssignmentOperator, + isAssignmentPattern: () => isAssignmentPattern, + isAssignmentTarget: () => isAssignmentTarget, + isAsteriskToken: () => isAsteriskToken, + isAsyncFunction: () => isAsyncFunction, + isAsyncModifier: () => isAsyncModifier, + isAutoAccessorPropertyDeclaration: () => isAutoAccessorPropertyDeclaration, + isAwaitExpression: () => isAwaitExpression, + isAwaitKeyword: () => isAwaitKeyword, + isBigIntLiteral: () => isBigIntLiteral, + isBinaryExpression: () => isBinaryExpression, + isBinaryLogicalOperator: () => isBinaryLogicalOperator, + isBinaryOperatorToken: () => isBinaryOperatorToken, + isBindableObjectDefinePropertyCall: () => isBindableObjectDefinePropertyCall, + isBindableStaticAccessExpression: () => isBindableStaticAccessExpression, + isBindableStaticElementAccessExpression: () => isBindableStaticElementAccessExpression, + isBindableStaticNameExpression: () => isBindableStaticNameExpression, + isBindingElement: () => isBindingElement, + isBindingElementOfBareOrAccessedRequire: () => isBindingElementOfBareOrAccessedRequire, + isBindingName: () => isBindingName, + isBindingOrAssignmentElement: () => isBindingOrAssignmentElement, + isBindingOrAssignmentPattern: () => isBindingOrAssignmentPattern, + isBindingPattern: () => isBindingPattern, + isBlock: () => isBlock, + isBlockLike: () => isBlockLike, + isBlockOrCatchScoped: () => isBlockOrCatchScoped, + isBlockScope: () => isBlockScope, + isBlockScopedContainerTopLevel: () => isBlockScopedContainerTopLevel, + isBooleanLiteral: () => isBooleanLiteral, + isBreakOrContinueStatement: () => isBreakOrContinueStatement, + isBreakStatement: () => isBreakStatement, + isBuildCommand: () => isBuildCommand, + isBuildInfoFile: () => isBuildInfoFile, + isBuilderProgram: () => isBuilderProgram, + isBundle: () => isBundle, + isCallChain: () => isCallChain, + isCallExpression: () => isCallExpression, + isCallExpressionTarget: () => isCallExpressionTarget, + isCallLikeExpression: () => isCallLikeExpression, + isCallLikeOrFunctionLikeExpression: () => isCallLikeOrFunctionLikeExpression, + isCallOrNewExpression: () => isCallOrNewExpression, + isCallOrNewExpressionTarget: () => isCallOrNewExpressionTarget, + isCallSignatureDeclaration: () => isCallSignatureDeclaration, + isCallToHelper: () => isCallToHelper, + isCaseBlock: () => isCaseBlock, + isCaseClause: () => isCaseClause, + isCaseKeyword: () => isCaseKeyword, + isCaseOrDefaultClause: () => isCaseOrDefaultClause, + isCatchClause: () => isCatchClause, + isCatchClauseVariableDeclaration: () => isCatchClauseVariableDeclaration, + isCatchClauseVariableDeclarationOrBindingElement: () => isCatchClauseVariableDeclarationOrBindingElement, + isCheckJsEnabledForFile: () => isCheckJsEnabledForFile, + isCircularBuildOrder: () => isCircularBuildOrder, + isClassDeclaration: () => isClassDeclaration, + isClassElement: () => isClassElement, + isClassExpression: () => isClassExpression, + isClassInstanceProperty: () => isClassInstanceProperty, + isClassLike: () => isClassLike, + isClassMemberModifier: () => isClassMemberModifier, + isClassNamedEvaluationHelperBlock: () => isClassNamedEvaluationHelperBlock, + isClassOrTypeElement: () => isClassOrTypeElement, + isClassStaticBlockDeclaration: () => isClassStaticBlockDeclaration, + isClassThisAssignmentBlock: () => isClassThisAssignmentBlock, + isColonToken: () => isColonToken, + isCommaExpression: () => isCommaExpression, + isCommaListExpression: () => isCommaListExpression, + isCommaSequence: () => isCommaSequence, + isCommaToken: () => isCommaToken, + isComment: () => isComment, + isCommonJsExportPropertyAssignment: () => isCommonJsExportPropertyAssignment, + isCommonJsExportedExpression: () => isCommonJsExportedExpression, + isCompoundAssignment: () => isCompoundAssignment, + isComputedNonLiteralName: () => isComputedNonLiteralName, + isComputedPropertyName: () => isComputedPropertyName, + isConciseBody: () => isConciseBody, + isConditionalExpression: () => isConditionalExpression, + isConditionalTypeNode: () => isConditionalTypeNode, + isConstAssertion: () => isConstAssertion, + isConstTypeReference: () => isConstTypeReference, + isConstructSignatureDeclaration: () => isConstructSignatureDeclaration, + isConstructorDeclaration: () => isConstructorDeclaration, + isConstructorTypeNode: () => isConstructorTypeNode, + isContextualKeyword: () => isContextualKeyword, + isContinueStatement: () => isContinueStatement, + isCustomPrologue: () => isCustomPrologue, + isDebuggerStatement: () => isDebuggerStatement, + isDeclaration: () => isDeclaration, + isDeclarationBindingElement: () => isDeclarationBindingElement, + isDeclarationFileName: () => isDeclarationFileName, + isDeclarationName: () => isDeclarationName, + isDeclarationNameOfEnumOrNamespace: () => isDeclarationNameOfEnumOrNamespace, + isDeclarationReadonly: () => isDeclarationReadonly, + isDeclarationStatement: () => isDeclarationStatement, + isDeclarationWithTypeParameterChildren: () => isDeclarationWithTypeParameterChildren, + isDeclarationWithTypeParameters: () => isDeclarationWithTypeParameters, + isDecorator: () => isDecorator, + isDecoratorTarget: () => isDecoratorTarget, + isDefaultClause: () => isDefaultClause, + isDefaultImport: () => isDefaultImport, + isDefaultModifier: () => isDefaultModifier, + isDefaultedExpandoInitializer: () => isDefaultedExpandoInitializer, + isDeleteExpression: () => isDeleteExpression, + isDeleteTarget: () => isDeleteTarget, + isDeprecatedDeclaration: () => isDeprecatedDeclaration, + isDestructuringAssignment: () => isDestructuringAssignment, + isDiskPathRoot: () => isDiskPathRoot, + isDoStatement: () => isDoStatement, + isDocumentRegistryEntry: () => isDocumentRegistryEntry, + isDotDotDotToken: () => isDotDotDotToken, + isDottedName: () => isDottedName, + isDynamicName: () => isDynamicName, + isEffectiveExternalModule: () => isEffectiveExternalModule, + isEffectiveStrictModeSourceFile: () => isEffectiveStrictModeSourceFile, + isElementAccessChain: () => isElementAccessChain, + isElementAccessExpression: () => isElementAccessExpression, + isEmittedFileOfProgram: () => isEmittedFileOfProgram, + isEmptyArrayLiteral: () => isEmptyArrayLiteral, + isEmptyBindingElement: () => isEmptyBindingElement, + isEmptyBindingPattern: () => isEmptyBindingPattern, + isEmptyObjectLiteral: () => isEmptyObjectLiteral, + isEmptyStatement: () => isEmptyStatement, + isEmptyStringLiteral: () => isEmptyStringLiteral, + isEntityName: () => isEntityName, + isEntityNameExpression: () => isEntityNameExpression, + isEnumConst: () => isEnumConst, + isEnumDeclaration: () => isEnumDeclaration, + isEnumMember: () => isEnumMember, + isEqualityOperatorKind: () => isEqualityOperatorKind, + isEqualsGreaterThanToken: () => isEqualsGreaterThanToken, + isExclamationToken: () => isExclamationToken, + isExcludedFile: () => isExcludedFile, + isExclusivelyTypeOnlyImportOrExport: () => isExclusivelyTypeOnlyImportOrExport, + isExpandoPropertyDeclaration: () => isExpandoPropertyDeclaration, + isExportAssignment: () => isExportAssignment, + isExportDeclaration: () => isExportDeclaration, + isExportModifier: () => isExportModifier, + isExportName: () => isExportName, + isExportNamespaceAsDefaultDeclaration: () => isExportNamespaceAsDefaultDeclaration, + isExportOrDefaultModifier: () => isExportOrDefaultModifier, + isExportSpecifier: () => isExportSpecifier, + isExportsIdentifier: () => isExportsIdentifier, + isExportsOrModuleExportsOrAlias: () => isExportsOrModuleExportsOrAlias, + isExpression: () => isExpression, + isExpressionNode: () => isExpressionNode, + isExpressionOfExternalModuleImportEqualsDeclaration: () => isExpressionOfExternalModuleImportEqualsDeclaration, + isExpressionOfOptionalChainRoot: () => isExpressionOfOptionalChainRoot, + isExpressionStatement: () => isExpressionStatement, + isExpressionWithTypeArguments: () => isExpressionWithTypeArguments, + isExpressionWithTypeArgumentsInClassExtendsClause: () => isExpressionWithTypeArgumentsInClassExtendsClause, + isExternalModule: () => isExternalModule, + isExternalModuleAugmentation: () => isExternalModuleAugmentation, + isExternalModuleImportEqualsDeclaration: () => isExternalModuleImportEqualsDeclaration, + isExternalModuleIndicator: () => isExternalModuleIndicator, + isExternalModuleNameRelative: () => isExternalModuleNameRelative, + isExternalModuleReference: () => isExternalModuleReference, + isExternalModuleSymbol: () => isExternalModuleSymbol, + isExternalOrCommonJsModule: () => isExternalOrCommonJsModule, + isFileLevelReservedGeneratedIdentifier: () => isFileLevelReservedGeneratedIdentifier, + isFileLevelUniqueName: () => isFileLevelUniqueName, + isFileProbablyExternalModule: () => isFileProbablyExternalModule, + isFirstDeclarationOfSymbolParameter: () => isFirstDeclarationOfSymbolParameter, + isFixablePromiseHandler: () => isFixablePromiseHandler, + isForInOrOfStatement: () => isForInOrOfStatement, + isForInStatement: () => isForInStatement, + isForInitializer: () => isForInitializer, + isForOfStatement: () => isForOfStatement, + isForStatement: () => isForStatement, + isFullSourceFile: () => isFullSourceFile, + isFunctionBlock: () => isFunctionBlock, + isFunctionBody: () => isFunctionBody, + isFunctionDeclaration: () => isFunctionDeclaration, + isFunctionExpression: () => isFunctionExpression, + isFunctionExpressionOrArrowFunction: () => isFunctionExpressionOrArrowFunction, + isFunctionLike: () => isFunctionLike, + isFunctionLikeDeclaration: () => isFunctionLikeDeclaration, + isFunctionLikeKind: () => isFunctionLikeKind, + isFunctionLikeOrClassStaticBlockDeclaration: () => isFunctionLikeOrClassStaticBlockDeclaration, + isFunctionOrConstructorTypeNode: () => isFunctionOrConstructorTypeNode, + isFunctionOrModuleBlock: () => isFunctionOrModuleBlock, + isFunctionSymbol: () => isFunctionSymbol, + isFunctionTypeNode: () => isFunctionTypeNode, + isGeneratedIdentifier: () => isGeneratedIdentifier, + isGeneratedPrivateIdentifier: () => isGeneratedPrivateIdentifier, + isGetAccessor: () => isGetAccessor, + isGetAccessorDeclaration: () => isGetAccessorDeclaration, + isGetOrSetAccessorDeclaration: () => isGetOrSetAccessorDeclaration, + isGlobalScopeAugmentation: () => isGlobalScopeAugmentation, + isGlobalSourceFile: () => isGlobalSourceFile, + isGrammarError: () => isGrammarError, + isHeritageClause: () => isHeritageClause, + isHoistedFunction: () => isHoistedFunction, + isHoistedVariableStatement: () => isHoistedVariableStatement, + isIdentifier: () => isIdentifier, + isIdentifierANonContextualKeyword: () => isIdentifierANonContextualKeyword, + isIdentifierName: () => isIdentifierName, + isIdentifierOrThisTypeNode: () => isIdentifierOrThisTypeNode, + isIdentifierPart: () => isIdentifierPart, + isIdentifierStart: () => isIdentifierStart, + isIdentifierText: () => isIdentifierText, + isIdentifierTypePredicate: () => isIdentifierTypePredicate, + isIdentifierTypeReference: () => isIdentifierTypeReference, + isIfStatement: () => isIfStatement, + isIgnoredFileFromWildCardWatching: () => isIgnoredFileFromWildCardWatching, + isImplicitGlob: () => isImplicitGlob, + isImportAttribute: () => isImportAttribute, + isImportAttributeName: () => isImportAttributeName, + isImportAttributes: () => isImportAttributes, + isImportCall: () => isImportCall, + isImportClause: () => isImportClause, + isImportDeclaration: () => isImportDeclaration, + isImportEqualsDeclaration: () => isImportEqualsDeclaration, + isImportKeyword: () => isImportKeyword, + isImportMeta: () => isImportMeta, + isImportOrExportSpecifier: () => isImportOrExportSpecifier, + isImportOrExportSpecifierName: () => isImportOrExportSpecifierName, + isImportSpecifier: () => isImportSpecifier, + isImportTypeAssertionContainer: () => isImportTypeAssertionContainer, + isImportTypeNode: () => isImportTypeNode, + isImportable: () => isImportable, + isInComment: () => isInComment, + isInCompoundLikeAssignment: () => isInCompoundLikeAssignment, + isInExpressionContext: () => isInExpressionContext, + isInJSDoc: () => isInJSDoc, + isInJSFile: () => isInJSFile, + isInJSXText: () => isInJSXText, + isInJsonFile: () => isInJsonFile, + isInNonReferenceComment: () => isInNonReferenceComment, + isInReferenceComment: () => isInReferenceComment, + isInRightSideOfInternalImportEqualsDeclaration: () => isInRightSideOfInternalImportEqualsDeclaration, + isInString: () => isInString, + isInTemplateString: () => isInTemplateString, + isInTopLevelContext: () => isInTopLevelContext, + isInTypeQuery: () => isInTypeQuery, + isIncrementalBuildInfo: () => isIncrementalBuildInfo, + isIncrementalBundleEmitBuildInfo: () => isIncrementalBundleEmitBuildInfo, + isIncrementalCompilation: () => isIncrementalCompilation, + isIndexSignatureDeclaration: () => isIndexSignatureDeclaration, + isIndexedAccessTypeNode: () => isIndexedAccessTypeNode, + isInferTypeNode: () => isInferTypeNode, + isInfinityOrNaNString: () => isInfinityOrNaNString, + isInitializedProperty: () => isInitializedProperty, + isInitializedVariable: () => isInitializedVariable, + isInsideJsxElement: () => isInsideJsxElement, + isInsideJsxElementOrAttribute: () => isInsideJsxElementOrAttribute, + isInsideNodeModules: () => isInsideNodeModules, + isInsideTemplateLiteral: () => isInsideTemplateLiteral, + isInstanceOfExpression: () => isInstanceOfExpression, + isInstantiatedModule: () => isInstantiatedModule, + isInterfaceDeclaration: () => isInterfaceDeclaration, + isInternalDeclaration: () => isInternalDeclaration, + isInternalModuleImportEqualsDeclaration: () => isInternalModuleImportEqualsDeclaration, + isInternalName: () => isInternalName, + isIntersectionTypeNode: () => isIntersectionTypeNode, + isIntrinsicJsxName: () => isIntrinsicJsxName, + isIterationStatement: () => isIterationStatement, + isJSDoc: () => isJSDoc, + isJSDocAllType: () => isJSDocAllType, + isJSDocAugmentsTag: () => isJSDocAugmentsTag, + isJSDocAuthorTag: () => isJSDocAuthorTag, + isJSDocCallbackTag: () => isJSDocCallbackTag, + isJSDocClassTag: () => isJSDocClassTag, + isJSDocCommentContainingNode: () => isJSDocCommentContainingNode, + isJSDocConstructSignature: () => isJSDocConstructSignature, + isJSDocDeprecatedTag: () => isJSDocDeprecatedTag, + isJSDocEnumTag: () => isJSDocEnumTag, + isJSDocFunctionType: () => isJSDocFunctionType, + isJSDocImplementsTag: () => isJSDocImplementsTag, + isJSDocImportTag: () => isJSDocImportTag, + isJSDocIndexSignature: () => isJSDocIndexSignature, + isJSDocLikeText: () => isJSDocLikeText, + isJSDocLink: () => isJSDocLink, + isJSDocLinkCode: () => isJSDocLinkCode, + isJSDocLinkLike: () => isJSDocLinkLike, + isJSDocLinkPlain: () => isJSDocLinkPlain, + isJSDocMemberName: () => isJSDocMemberName, + isJSDocNameReference: () => isJSDocNameReference, + isJSDocNamepathType: () => isJSDocNamepathType, + isJSDocNamespaceBody: () => isJSDocNamespaceBody, + isJSDocNode: () => isJSDocNode, + isJSDocNonNullableType: () => isJSDocNonNullableType, + isJSDocNullableType: () => isJSDocNullableType, + isJSDocOptionalParameter: () => isJSDocOptionalParameter, + isJSDocOptionalType: () => isJSDocOptionalType, + isJSDocOverloadTag: () => isJSDocOverloadTag, + isJSDocOverrideTag: () => isJSDocOverrideTag, + isJSDocParameterTag: () => isJSDocParameterTag, + isJSDocPrivateTag: () => isJSDocPrivateTag, + isJSDocPropertyLikeTag: () => isJSDocPropertyLikeTag, + isJSDocPropertyTag: () => isJSDocPropertyTag, + isJSDocProtectedTag: () => isJSDocProtectedTag, + isJSDocPublicTag: () => isJSDocPublicTag, + isJSDocReadonlyTag: () => isJSDocReadonlyTag, + isJSDocReturnTag: () => isJSDocReturnTag, + isJSDocSatisfiesExpression: () => isJSDocSatisfiesExpression, + isJSDocSatisfiesTag: () => isJSDocSatisfiesTag, + isJSDocSeeTag: () => isJSDocSeeTag, + isJSDocSignature: () => isJSDocSignature, + isJSDocTag: () => isJSDocTag, + isJSDocTemplateTag: () => isJSDocTemplateTag, + isJSDocThisTag: () => isJSDocThisTag, + isJSDocThrowsTag: () => isJSDocThrowsTag, + isJSDocTypeAlias: () => isJSDocTypeAlias, + isJSDocTypeAssertion: () => isJSDocTypeAssertion, + isJSDocTypeExpression: () => isJSDocTypeExpression, + isJSDocTypeLiteral: () => isJSDocTypeLiteral, + isJSDocTypeTag: () => isJSDocTypeTag, + isJSDocTypedefTag: () => isJSDocTypedefTag, + isJSDocUnknownTag: () => isJSDocUnknownTag, + isJSDocUnknownType: () => isJSDocUnknownType, + isJSDocVariadicType: () => isJSDocVariadicType, + isJSXTagName: () => isJSXTagName, + isJsonEqual: () => isJsonEqual, + isJsonSourceFile: () => isJsonSourceFile, + isJsxAttribute: () => isJsxAttribute, + isJsxAttributeLike: () => isJsxAttributeLike, + isJsxAttributeName: () => isJsxAttributeName, + isJsxAttributes: () => isJsxAttributes, + isJsxCallLike: () => isJsxCallLike, + isJsxChild: () => isJsxChild, + isJsxClosingElement: () => isJsxClosingElement, + isJsxClosingFragment: () => isJsxClosingFragment, + isJsxElement: () => isJsxElement, + isJsxExpression: () => isJsxExpression, + isJsxFragment: () => isJsxFragment, + isJsxNamespacedName: () => isJsxNamespacedName, + isJsxOpeningElement: () => isJsxOpeningElement, + isJsxOpeningFragment: () => isJsxOpeningFragment, + isJsxOpeningLikeElement: () => isJsxOpeningLikeElement, + isJsxOpeningLikeElementTagName: () => isJsxOpeningLikeElementTagName, + isJsxSelfClosingElement: () => isJsxSelfClosingElement, + isJsxSpreadAttribute: () => isJsxSpreadAttribute, + isJsxTagNameExpression: () => isJsxTagNameExpression, + isJsxText: () => isJsxText, + isJumpStatementTarget: () => isJumpStatementTarget, + isKeyword: () => isKeyword, + isKeywordOrPunctuation: () => isKeywordOrPunctuation, + isKnownSymbol: () => isKnownSymbol, + isLabelName: () => isLabelName, + isLabelOfLabeledStatement: () => isLabelOfLabeledStatement, + isLabeledStatement: () => isLabeledStatement, + isLateVisibilityPaintedStatement: () => isLateVisibilityPaintedStatement, + isLeftHandSideExpression: () => isLeftHandSideExpression, + isLet: () => isLet, + isLineBreak: () => isLineBreak, + isLiteralComputedPropertyDeclarationName: () => isLiteralComputedPropertyDeclarationName, + isLiteralExpression: () => isLiteralExpression, + isLiteralExpressionOfObject: () => isLiteralExpressionOfObject, + isLiteralImportTypeNode: () => isLiteralImportTypeNode, + isLiteralKind: () => isLiteralKind, + isLiteralNameOfPropertyDeclarationOrIndexAccess: () => isLiteralNameOfPropertyDeclarationOrIndexAccess, + isLiteralTypeLiteral: () => isLiteralTypeLiteral, + isLiteralTypeNode: () => isLiteralTypeNode, + isLocalName: () => isLocalName, + isLogicalOperator: () => isLogicalOperator, + isLogicalOrCoalescingAssignmentExpression: () => isLogicalOrCoalescingAssignmentExpression, + isLogicalOrCoalescingAssignmentOperator: () => isLogicalOrCoalescingAssignmentOperator, + isLogicalOrCoalescingBinaryExpression: () => isLogicalOrCoalescingBinaryExpression, + isLogicalOrCoalescingBinaryOperator: () => isLogicalOrCoalescingBinaryOperator, + isMappedTypeNode: () => isMappedTypeNode, + isMemberName: () => isMemberName, + isMetaProperty: () => isMetaProperty, + isMethodDeclaration: () => isMethodDeclaration, + isMethodOrAccessor: () => isMethodOrAccessor, + isMethodSignature: () => isMethodSignature, + isMinusToken: () => isMinusToken, + isMissingDeclaration: () => isMissingDeclaration, + isMissingPackageJsonInfo: () => isMissingPackageJsonInfo, + isModifier: () => isModifier, + isModifierKind: () => isModifierKind, + isModifierLike: () => isModifierLike, + isModuleAugmentationExternal: () => isModuleAugmentationExternal, + isModuleBlock: () => isModuleBlock, + isModuleBody: () => isModuleBody, + isModuleDeclaration: () => isModuleDeclaration, + isModuleExportName: () => isModuleExportName, + isModuleExportsAccessExpression: () => isModuleExportsAccessExpression, + isModuleIdentifier: () => isModuleIdentifier, + isModuleName: () => isModuleName, + isModuleOrEnumDeclaration: () => isModuleOrEnumDeclaration, + isModuleReference: () => isModuleReference, + isModuleSpecifierLike: () => isModuleSpecifierLike, + isModuleWithStringLiteralName: () => isModuleWithStringLiteralName, + isNameOfFunctionDeclaration: () => isNameOfFunctionDeclaration, + isNameOfModuleDeclaration: () => isNameOfModuleDeclaration, + isNamedDeclaration: () => isNamedDeclaration, + isNamedEvaluation: () => isNamedEvaluation, + isNamedEvaluationSource: () => isNamedEvaluationSource, + isNamedExportBindings: () => isNamedExportBindings, + isNamedExports: () => isNamedExports, + isNamedImportBindings: () => isNamedImportBindings, + isNamedImports: () => isNamedImports, + isNamedImportsOrExports: () => isNamedImportsOrExports, + isNamedTupleMember: () => isNamedTupleMember, + isNamespaceBody: () => isNamespaceBody, + isNamespaceExport: () => isNamespaceExport, + isNamespaceExportDeclaration: () => isNamespaceExportDeclaration, + isNamespaceImport: () => isNamespaceImport, + isNamespaceReexportDeclaration: () => isNamespaceReexportDeclaration, + isNewExpression: () => isNewExpression, + isNewExpressionTarget: () => isNewExpressionTarget, + isNewScopeNode: () => isNewScopeNode, + isNoSubstitutionTemplateLiteral: () => isNoSubstitutionTemplateLiteral, + isNodeArray: () => isNodeArray, + isNodeArrayMultiLine: () => isNodeArrayMultiLine, + isNodeDescendantOf: () => isNodeDescendantOf, + isNodeKind: () => isNodeKind, + isNodeLikeSystem: () => isNodeLikeSystem, + isNodeModulesDirectory: () => isNodeModulesDirectory, + isNodeWithPossibleHoistedDeclaration: () => isNodeWithPossibleHoistedDeclaration, + isNonContextualKeyword: () => isNonContextualKeyword, + isNonGlobalAmbientModule: () => isNonGlobalAmbientModule, + isNonNullAccess: () => isNonNullAccess, + isNonNullChain: () => isNonNullChain, + isNonNullExpression: () => isNonNullExpression, + isNonStaticMethodOrAccessorWithPrivateName: () => isNonStaticMethodOrAccessorWithPrivateName, + isNotEmittedStatement: () => isNotEmittedStatement, + isNullishCoalesce: () => isNullishCoalesce, + isNumber: () => isNumber, + isNumericLiteral: () => isNumericLiteral, + isNumericLiteralName: () => isNumericLiteralName, + isObjectBindingElementWithoutPropertyName: () => isObjectBindingElementWithoutPropertyName, + isObjectBindingOrAssignmentElement: () => isObjectBindingOrAssignmentElement, + isObjectBindingOrAssignmentPattern: () => isObjectBindingOrAssignmentPattern, + isObjectBindingPattern: () => isObjectBindingPattern, + isObjectLiteralElement: () => isObjectLiteralElement, + isObjectLiteralElementLike: () => isObjectLiteralElementLike, + isObjectLiteralExpression: () => isObjectLiteralExpression, + isObjectLiteralMethod: () => isObjectLiteralMethod, + isObjectLiteralOrClassExpressionMethodOrAccessor: () => isObjectLiteralOrClassExpressionMethodOrAccessor, + isObjectTypeDeclaration: () => isObjectTypeDeclaration, + isOmittedExpression: () => isOmittedExpression, + isOptionalChain: () => isOptionalChain, + isOptionalChainRoot: () => isOptionalChainRoot, + isOptionalDeclaration: () => isOptionalDeclaration, + isOptionalJSDocPropertyLikeTag: () => isOptionalJSDocPropertyLikeTag, + isOptionalTypeNode: () => isOptionalTypeNode, + isOuterExpression: () => isOuterExpression, + isOutermostOptionalChain: () => isOutermostOptionalChain, + isOverrideModifier: () => isOverrideModifier, + isPackageJsonInfo: () => isPackageJsonInfo, + isPackedArrayLiteral: () => isPackedArrayLiteral, + isParameter: () => isParameter, + isParameterPropertyDeclaration: () => isParameterPropertyDeclaration, + isParameterPropertyModifier: () => isParameterPropertyModifier, + isParenthesizedExpression: () => isParenthesizedExpression, + isParenthesizedTypeNode: () => isParenthesizedTypeNode, + isParseTreeNode: () => isParseTreeNode, + isPartOfParameterDeclaration: () => isPartOfParameterDeclaration, + isPartOfTypeNode: () => isPartOfTypeNode, + isPartOfTypeOnlyImportOrExportDeclaration: () => isPartOfTypeOnlyImportOrExportDeclaration, + isPartOfTypeQuery: () => isPartOfTypeQuery, + isPartiallyEmittedExpression: () => isPartiallyEmittedExpression, + isPatternMatch: () => isPatternMatch, + isPinnedComment: () => isPinnedComment, + isPlainJsFile: () => isPlainJsFile, + isPlusToken: () => isPlusToken, + isPossiblyTypeArgumentPosition: () => isPossiblyTypeArgumentPosition, + isPostfixUnaryExpression: () => isPostfixUnaryExpression, + isPrefixUnaryExpression: () => isPrefixUnaryExpression, + isPrimitiveLiteralValue: () => isPrimitiveLiteralValue, + isPrivateIdentifier: () => isPrivateIdentifier, + isPrivateIdentifierClassElementDeclaration: () => isPrivateIdentifierClassElementDeclaration, + isPrivateIdentifierPropertyAccessExpression: () => isPrivateIdentifierPropertyAccessExpression, + isPrivateIdentifierSymbol: () => isPrivateIdentifierSymbol, + isProgramUptoDate: () => isProgramUptoDate, + isPrologueDirective: () => isPrologueDirective, + isPropertyAccessChain: () => isPropertyAccessChain, + isPropertyAccessEntityNameExpression: () => isPropertyAccessEntityNameExpression, + isPropertyAccessExpression: () => isPropertyAccessExpression, + isPropertyAccessOrQualifiedName: () => isPropertyAccessOrQualifiedName, + isPropertyAccessOrQualifiedNameOrImportTypeNode: () => isPropertyAccessOrQualifiedNameOrImportTypeNode, + isPropertyAssignment: () => isPropertyAssignment, + isPropertyDeclaration: () => isPropertyDeclaration, + isPropertyName: () => isPropertyName, + isPropertyNameLiteral: () => isPropertyNameLiteral, + isPropertySignature: () => isPropertySignature, + isPrototypeAccess: () => isPrototypeAccess, + isPrototypePropertyAssignment: () => isPrototypePropertyAssignment, + isPunctuation: () => isPunctuation, + isPushOrUnshiftIdentifier: () => isPushOrUnshiftIdentifier, + isQualifiedName: () => isQualifiedName, + isQuestionDotToken: () => isQuestionDotToken, + isQuestionOrExclamationToken: () => isQuestionOrExclamationToken, + isQuestionOrPlusOrMinusToken: () => isQuestionOrPlusOrMinusToken, + isQuestionToken: () => isQuestionToken, + isReadonlyKeyword: () => isReadonlyKeyword, + isReadonlyKeywordOrPlusOrMinusToken: () => isReadonlyKeywordOrPlusOrMinusToken, + isRecognizedTripleSlashComment: () => isRecognizedTripleSlashComment, + isReferenceFileLocation: () => isReferenceFileLocation, + isReferencedFile: () => isReferencedFile, + isRegularExpressionLiteral: () => isRegularExpressionLiteral, + isRequireCall: () => isRequireCall, + isRequireVariableStatement: () => isRequireVariableStatement, + isRestParameter: () => isRestParameter, + isRestTypeNode: () => isRestTypeNode, + isReturnStatement: () => isReturnStatement, + isReturnStatementWithFixablePromiseHandler: () => isReturnStatementWithFixablePromiseHandler, + isRightSideOfAccessExpression: () => isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression: () => isRightSideOfInstanceofExpression, + isRightSideOfPropertyAccess: () => isRightSideOfPropertyAccess, + isRightSideOfQualifiedName: () => isRightSideOfQualifiedName, + isRightSideOfQualifiedNameOrPropertyAccess: () => isRightSideOfQualifiedNameOrPropertyAccess, + isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName: () => isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName, + isRootedDiskPath: () => isRootedDiskPath, + isSameEntityName: () => isSameEntityName, + isSatisfiesExpression: () => isSatisfiesExpression, + isSemicolonClassElement: () => isSemicolonClassElement, + isSetAccessor: () => isSetAccessor, + isSetAccessorDeclaration: () => isSetAccessorDeclaration, + isShiftOperatorOrHigher: () => isShiftOperatorOrHigher, + isShorthandAmbientModuleSymbol: () => isShorthandAmbientModuleSymbol, + isShorthandPropertyAssignment: () => isShorthandPropertyAssignment, + isSideEffectImport: () => isSideEffectImport, + isSignedNumericLiteral: () => isSignedNumericLiteral, + isSimpleCopiableExpression: () => isSimpleCopiableExpression, + isSimpleInlineableExpression: () => isSimpleInlineableExpression, + isSimpleParameterList: () => isSimpleParameterList, + isSingleOrDoubleQuote: () => isSingleOrDoubleQuote, + isSolutionConfig: () => isSolutionConfig, + isSourceElement: () => isSourceElement, + isSourceFile: () => isSourceFile, + isSourceFileFromLibrary: () => isSourceFileFromLibrary, + isSourceFileJS: () => isSourceFileJS, + isSourceFileNotJson: () => isSourceFileNotJson, + isSourceMapping: () => isSourceMapping, + isSpecialPropertyDeclaration: () => isSpecialPropertyDeclaration, + isSpreadAssignment: () => isSpreadAssignment, + isSpreadElement: () => isSpreadElement, + isStatement: () => isStatement, + isStatementButNotDeclaration: () => isStatementButNotDeclaration, + isStatementOrBlock: () => isStatementOrBlock, + isStatementWithLocals: () => isStatementWithLocals, + isStatic: () => isStatic, + isStaticModifier: () => isStaticModifier, + isString: () => isString, + isStringANonContextualKeyword: () => isStringANonContextualKeyword, + isStringAndEmptyAnonymousObjectIntersection: () => isStringAndEmptyAnonymousObjectIntersection, + isStringDoubleQuoted: () => isStringDoubleQuoted, + isStringLiteral: () => isStringLiteral, + isStringLiteralLike: () => isStringLiteralLike, + isStringLiteralOrJsxExpression: () => isStringLiteralOrJsxExpression, + isStringLiteralOrTemplate: () => isStringLiteralOrTemplate, + isStringOrNumericLiteralLike: () => isStringOrNumericLiteralLike, + isStringOrRegularExpressionOrTemplateLiteral: () => isStringOrRegularExpressionOrTemplateLiteral, + isStringTextContainingNode: () => isStringTextContainingNode, + isSuperCall: () => isSuperCall, + isSuperKeyword: () => isSuperKeyword, + isSuperProperty: () => isSuperProperty, + isSupportedSourceFileName: () => isSupportedSourceFileName, + isSwitchStatement: () => isSwitchStatement, + isSyntaxList: () => isSyntaxList, + isSyntheticExpression: () => isSyntheticExpression, + isSyntheticReference: () => isSyntheticReference, + isTagName: () => isTagName, + isTaggedTemplateExpression: () => isTaggedTemplateExpression, + isTaggedTemplateTag: () => isTaggedTemplateTag, + isTemplateExpression: () => isTemplateExpression, + isTemplateHead: () => isTemplateHead, + isTemplateLiteral: () => isTemplateLiteral, + isTemplateLiteralKind: () => isTemplateLiteralKind, + isTemplateLiteralToken: () => isTemplateLiteralToken, + isTemplateLiteralTypeNode: () => isTemplateLiteralTypeNode, + isTemplateLiteralTypeSpan: () => isTemplateLiteralTypeSpan, + isTemplateMiddle: () => isTemplateMiddle, + isTemplateMiddleOrTemplateTail: () => isTemplateMiddleOrTemplateTail, + isTemplateSpan: () => isTemplateSpan, + isTemplateTail: () => isTemplateTail, + isTextWhiteSpaceLike: () => isTextWhiteSpaceLike, + isThis: () => isThis, + isThisContainerOrFunctionBlock: () => isThisContainerOrFunctionBlock, + isThisIdentifier: () => isThisIdentifier, + isThisInTypeQuery: () => isThisInTypeQuery, + isThisInitializedDeclaration: () => isThisInitializedDeclaration, + isThisInitializedObjectBindingExpression: () => isThisInitializedObjectBindingExpression, + isThisProperty: () => isThisProperty, + isThisTypeNode: () => isThisTypeNode, + isThisTypeParameter: () => isThisTypeParameter, + isThisTypePredicate: () => isThisTypePredicate, + isThrowStatement: () => isThrowStatement, + isToken: () => isToken, + isTokenKind: () => isTokenKind, + isTraceEnabled: () => isTraceEnabled, + isTransientSymbol: () => isTransientSymbol, + isTrivia: () => isTrivia, + isTryStatement: () => isTryStatement, + isTupleTypeNode: () => isTupleTypeNode, + isTypeAlias: () => isTypeAlias, + isTypeAliasDeclaration: () => isTypeAliasDeclaration, + isTypeAssertionExpression: () => isTypeAssertionExpression, + isTypeDeclaration: () => isTypeDeclaration, + isTypeElement: () => isTypeElement, + isTypeKeyword: () => isTypeKeyword, + isTypeKeywordTokenOrIdentifier: () => isTypeKeywordTokenOrIdentifier, + isTypeLiteralNode: () => isTypeLiteralNode, + isTypeNode: () => isTypeNode, + isTypeNodeKind: () => isTypeNodeKind, + isTypeOfExpression: () => isTypeOfExpression, + isTypeOnlyExportDeclaration: () => isTypeOnlyExportDeclaration, + isTypeOnlyImportDeclaration: () => isTypeOnlyImportDeclaration, + isTypeOnlyImportOrExportDeclaration: () => isTypeOnlyImportOrExportDeclaration, + isTypeOperatorNode: () => isTypeOperatorNode, + isTypeParameterDeclaration: () => isTypeParameterDeclaration, + isTypePredicateNode: () => isTypePredicateNode, + isTypeQueryNode: () => isTypeQueryNode, + isTypeReferenceNode: () => isTypeReferenceNode, + isTypeReferenceType: () => isTypeReferenceType, + isTypeUsableAsPropertyName: () => isTypeUsableAsPropertyName, + isUMDExportSymbol: () => isUMDExportSymbol, + isUnaryExpression: () => isUnaryExpression, + isUnaryExpressionWithWrite: () => isUnaryExpressionWithWrite, + isUnicodeIdentifierStart: () => isUnicodeIdentifierStart, + isUnionTypeNode: () => isUnionTypeNode, + isUrl: () => isUrl, + isValidBigIntString: () => isValidBigIntString, + isValidESSymbolDeclaration: () => isValidESSymbolDeclaration, + isValidTypeOnlyAliasUseSite: () => isValidTypeOnlyAliasUseSite, + isValueSignatureDeclaration: () => isValueSignatureDeclaration, + isVarAwaitUsing: () => isVarAwaitUsing, + isVarConst: () => isVarConst, + isVarConstLike: () => isVarConstLike, + isVarUsing: () => isVarUsing, + isVariableDeclaration: () => isVariableDeclaration, + isVariableDeclarationInVariableStatement: () => isVariableDeclarationInVariableStatement, + isVariableDeclarationInitializedToBareOrAccessedRequire: () => isVariableDeclarationInitializedToBareOrAccessedRequire, + isVariableDeclarationInitializedToRequire: () => isVariableDeclarationInitializedToRequire, + isVariableDeclarationList: () => isVariableDeclarationList, + isVariableLike: () => isVariableLike, + isVariableStatement: () => isVariableStatement, + isVoidExpression: () => isVoidExpression, + isWatchSet: () => isWatchSet, + isWhileStatement: () => isWhileStatement, + isWhiteSpaceLike: () => isWhiteSpaceLike, + isWhiteSpaceSingleLine: () => isWhiteSpaceSingleLine, + isWithStatement: () => isWithStatement, + isWriteAccess: () => isWriteAccess, + isWriteOnlyAccess: () => isWriteOnlyAccess, + isYieldExpression: () => isYieldExpression, + jsxModeNeedsExplicitImport: () => jsxModeNeedsExplicitImport, + keywordPart: () => keywordPart, + last: () => last, + lastOrUndefined: () => lastOrUndefined, + length: () => length, + libMap: () => libMap, + libs: () => libs, + lineBreakPart: () => lineBreakPart, + loadModuleFromGlobalCache: () => loadModuleFromGlobalCache, + loadWithModeAwareCache: () => loadWithModeAwareCache, + makeIdentifierFromModuleName: () => makeIdentifierFromModuleName, + makeImport: () => makeImport, + makeStringLiteral: () => makeStringLiteral, + mangleScopedPackageName: () => mangleScopedPackageName, + map: () => map, + mapAllOrFail: () => mapAllOrFail, + mapDefined: () => mapDefined, + mapDefinedIterator: () => mapDefinedIterator, + mapEntries: () => mapEntries, + mapIterator: () => mapIterator, + mapOneOrMany: () => mapOneOrMany, + mapToDisplayParts: () => mapToDisplayParts, + matchFiles: () => matchFiles, + matchPatternOrExact: () => matchPatternOrExact, + matchedText: () => matchedText, + matchesExclude: () => matchesExclude, + matchesExcludeWorker: () => matchesExcludeWorker, + maxBy: () => maxBy, + maybeBind: () => maybeBind, + maybeSetLocalizedDiagnosticMessages: () => maybeSetLocalizedDiagnosticMessages, + memoize: () => memoize, + memoizeOne: () => memoizeOne, + min: () => min, + minAndMax: () => minAndMax, + missingFileModifiedTime: () => missingFileModifiedTime, + modifierToFlag: () => modifierToFlag, + modifiersToFlags: () => modifiersToFlags, + moduleExportNameIsDefault: () => moduleExportNameIsDefault, + moduleExportNameTextEscaped: () => moduleExportNameTextEscaped, + moduleExportNameTextUnescaped: () => moduleExportNameTextUnescaped, + moduleOptionDeclaration: () => moduleOptionDeclaration, + moduleResolutionIsEqualTo: () => moduleResolutionIsEqualTo, + moduleResolutionNameAndModeGetter: () => moduleResolutionNameAndModeGetter, + moduleResolutionOptionDeclarations: () => moduleResolutionOptionDeclarations, + moduleResolutionSupportsPackageJsonExportsAndImports: () => moduleResolutionSupportsPackageJsonExportsAndImports, + moduleResolutionUsesNodeModules: () => moduleResolutionUsesNodeModules, + moduleSpecifierToValidIdentifier: () => moduleSpecifierToValidIdentifier, + moduleSpecifiers: () => ts_moduleSpecifiers_exports, + moduleSupportsImportAttributes: () => moduleSupportsImportAttributes, + moduleSymbolToValidIdentifier: () => moduleSymbolToValidIdentifier, + moveEmitHelpers: () => moveEmitHelpers, + moveRangeEnd: () => moveRangeEnd, + moveRangePastDecorators: () => moveRangePastDecorators, + moveRangePastModifiers: () => moveRangePastModifiers, + moveRangePos: () => moveRangePos, + moveSyntheticComments: () => moveSyntheticComments, + mutateMap: () => mutateMap, + mutateMapSkippingNewValues: () => mutateMapSkippingNewValues, + needsParentheses: () => needsParentheses, + needsScopeMarker: () => needsScopeMarker, + newCaseClauseTracker: () => newCaseClauseTracker, + newPrivateEnvironment: () => newPrivateEnvironment, + noEmitNotification: () => noEmitNotification, + noEmitSubstitution: () => noEmitSubstitution, + noTransformers: () => noTransformers, + noTruncationMaximumTruncationLength: () => noTruncationMaximumTruncationLength, + nodeCanBeDecorated: () => nodeCanBeDecorated, + nodeCoreModules: () => nodeCoreModules, + nodeHasName: () => nodeHasName, + nodeIsDecorated: () => nodeIsDecorated, + nodeIsMissing: () => nodeIsMissing, + nodeIsPresent: () => nodeIsPresent, + nodeIsSynthesized: () => nodeIsSynthesized, + nodeModuleNameResolver: () => nodeModuleNameResolver, + nodeModulesPathPart: () => nodeModulesPathPart, + nodeNextJsonConfigResolver: () => nodeNextJsonConfigResolver, + nodeOrChildIsDecorated: () => nodeOrChildIsDecorated, + nodeOverlapsWithStartEnd: () => nodeOverlapsWithStartEnd, + nodePosToString: () => nodePosToString, + nodeSeenTracker: () => nodeSeenTracker, + nodeStartsNewLexicalEnvironment: () => nodeStartsNewLexicalEnvironment, + noop: () => noop, + noopFileWatcher: () => noopFileWatcher, + normalizePath: () => normalizePath, + normalizeSlashes: () => normalizeSlashes, + normalizeSpans: () => normalizeSpans, + not: () => not, + notImplemented: () => notImplemented, + notImplementedResolver: () => notImplementedResolver, + nullNodeConverters: () => nullNodeConverters, + nullParenthesizerRules: () => nullParenthesizerRules, + nullTransformationContext: () => nullTransformationContext, + objectAllocator: () => objectAllocator, + operatorPart: () => operatorPart, + optionDeclarations: () => optionDeclarations, + optionMapToObject: () => optionMapToObject, + optionsAffectingProgramStructure: () => optionsAffectingProgramStructure, + optionsForBuild: () => optionsForBuild, + optionsForWatch: () => optionsForWatch, + optionsHaveChanges: () => optionsHaveChanges, + or: () => or, + orderedRemoveItem: () => orderedRemoveItem, + orderedRemoveItemAt: () => orderedRemoveItemAt, + packageIdToPackageName: () => packageIdToPackageName, + packageIdToString: () => packageIdToString, + parameterIsThisKeyword: () => parameterIsThisKeyword, + parameterNamePart: () => parameterNamePart, + parseBaseNodeFactory: () => parseBaseNodeFactory, + parseBigInt: () => parseBigInt, + parseBuildCommand: () => parseBuildCommand, + parseCommandLine: () => parseCommandLine, + parseCommandLineWorker: () => parseCommandLineWorker, + parseConfigFileTextToJson: () => parseConfigFileTextToJson, + parseConfigFileWithSystem: () => parseConfigFileWithSystem, + parseConfigHostFromCompilerHostLike: () => parseConfigHostFromCompilerHostLike, + parseCustomTypeOption: () => parseCustomTypeOption, + parseIsolatedEntityName: () => parseIsolatedEntityName, + parseIsolatedJSDocComment: () => parseIsolatedJSDocComment, + parseJSDocTypeExpressionForTests: () => parseJSDocTypeExpressionForTests, + parseJsonConfigFileContent: () => parseJsonConfigFileContent, + parseJsonSourceFileConfigFileContent: () => parseJsonSourceFileConfigFileContent, + parseJsonText: () => parseJsonText, + parseListTypeOption: () => parseListTypeOption, + parseNodeFactory: () => parseNodeFactory, + parseNodeModuleFromPath: () => parseNodeModuleFromPath, + parsePackageName: () => parsePackageName, + parsePseudoBigInt: () => parsePseudoBigInt, + parseValidBigInt: () => parseValidBigInt, + pasteEdits: () => ts_PasteEdits_exports, + patchWriteFileEnsuringDirectory: () => patchWriteFileEnsuringDirectory, + pathContainsNodeModules: () => pathContainsNodeModules, + pathIsAbsolute: () => pathIsAbsolute, + pathIsBareSpecifier: () => pathIsBareSpecifier, + pathIsRelative: () => pathIsRelative, + patternText: () => patternText, + performIncrementalCompilation: () => performIncrementalCompilation, + performance: () => ts_performance_exports, + positionBelongsToNode: () => positionBelongsToNode, + positionIsASICandidate: () => positionIsASICandidate, + positionIsSynthesized: () => positionIsSynthesized, + positionsAreOnSameLine: () => positionsAreOnSameLine, + preProcessFile: () => preProcessFile, + probablyUsesSemicolons: () => probablyUsesSemicolons, + processCommentPragmas: () => processCommentPragmas, + processPragmasIntoFields: () => processPragmasIntoFields, + processTaggedTemplateExpression: () => processTaggedTemplateExpression, + programContainsEsModules: () => programContainsEsModules, + programContainsModules: () => programContainsModules, + projectReferenceIsEqualTo: () => projectReferenceIsEqualTo, + propertyNamePart: () => propertyNamePart, + pseudoBigIntToString: () => pseudoBigIntToString, + punctuationPart: () => punctuationPart, + pushIfUnique: () => pushIfUnique, + quote: () => quote, + quotePreferenceFromString: () => quotePreferenceFromString, + rangeContainsPosition: () => rangeContainsPosition, + rangeContainsPositionExclusive: () => rangeContainsPositionExclusive, + rangeContainsRange: () => rangeContainsRange, + rangeContainsRangeExclusive: () => rangeContainsRangeExclusive, + rangeContainsStartEnd: () => rangeContainsStartEnd, + rangeEndIsOnSameLineAsRangeStart: () => rangeEndIsOnSameLineAsRangeStart, + rangeEndPositionsAreOnSameLine: () => rangeEndPositionsAreOnSameLine, + rangeEquals: () => rangeEquals, + rangeIsOnSingleLine: () => rangeIsOnSingleLine, + rangeOfNode: () => rangeOfNode, + rangeOfTypeParameters: () => rangeOfTypeParameters, + rangeOverlapsWithStartEnd: () => rangeOverlapsWithStartEnd, + rangeStartIsOnSameLineAsRangeEnd: () => rangeStartIsOnSameLineAsRangeEnd, + rangeStartPositionsAreOnSameLine: () => rangeStartPositionsAreOnSameLine, + readBuilderProgram: () => readBuilderProgram, + readConfigFile: () => readConfigFile, + readJson: () => readJson, + readJsonConfigFile: () => readJsonConfigFile, + readJsonOrUndefined: () => readJsonOrUndefined, + reduceEachLeadingCommentRange: () => reduceEachLeadingCommentRange, + reduceEachTrailingCommentRange: () => reduceEachTrailingCommentRange, + reduceLeft: () => reduceLeft, + reduceLeftIterator: () => reduceLeftIterator, + reducePathComponents: () => reducePathComponents, + refactor: () => ts_refactor_exports, + regExpEscape: () => regExpEscape, + regularExpressionFlagToCharacterCode: () => regularExpressionFlagToCharacterCode, + relativeComplement: () => relativeComplement, + removeAllComments: () => removeAllComments, + removeEmitHelper: () => removeEmitHelper, + removeExtension: () => removeExtension, + removeFileExtension: () => removeFileExtension, + removeIgnoredPath: () => removeIgnoredPath, + removeMinAndVersionNumbers: () => removeMinAndVersionNumbers, + removePrefix: () => removePrefix, + removeSuffix: () => removeSuffix, + removeTrailingDirectorySeparator: () => removeTrailingDirectorySeparator, + repeatString: () => repeatString, + replaceElement: () => replaceElement, + replaceFirstStar: () => replaceFirstStar, + resolutionExtensionIsTSOrJson: () => resolutionExtensionIsTSOrJson, + resolveConfigFileProjectName: () => resolveConfigFileProjectName, + resolveJSModule: () => resolveJSModule, + resolveLibrary: () => resolveLibrary, + resolveModuleName: () => resolveModuleName, + resolveModuleNameFromCache: () => resolveModuleNameFromCache, + resolvePackageNameToPackageJson: () => resolvePackageNameToPackageJson, + resolvePath: () => resolvePath, + resolveProjectReferencePath: () => resolveProjectReferencePath, + resolveTripleslashReference: () => resolveTripleslashReference, + resolveTypeReferenceDirective: () => resolveTypeReferenceDirective, + resolvingEmptyArray: () => resolvingEmptyArray, + returnFalse: () => returnFalse, + returnNoopFileWatcher: () => returnNoopFileWatcher, + returnTrue: () => returnTrue, + returnUndefined: () => returnUndefined, + returnsPromise: () => returnsPromise, + rewriteModuleSpecifier: () => rewriteModuleSpecifier, + sameFlatMap: () => sameFlatMap, + sameMap: () => sameMap, + sameMapping: () => sameMapping, + scanTokenAtPosition: () => scanTokenAtPosition, + scanner: () => scanner, + semanticDiagnosticsOptionDeclarations: () => semanticDiagnosticsOptionDeclarations, + serializeCompilerOptions: () => serializeCompilerOptions, + server: () => ts_server_exports3, + servicesVersion: () => servicesVersion, + setCommentRange: () => setCommentRange, + setConfigFileInOptions: () => setConfigFileInOptions, + setConstantValue: () => setConstantValue, + setEmitFlags: () => setEmitFlags, + setGetSourceFileAsHashVersioned: () => setGetSourceFileAsHashVersioned, + setIdentifierAutoGenerate: () => setIdentifierAutoGenerate, + setIdentifierGeneratedImportReference: () => setIdentifierGeneratedImportReference, + setIdentifierTypeArguments: () => setIdentifierTypeArguments, + setInternalEmitFlags: () => setInternalEmitFlags, + setLocalizedDiagnosticMessages: () => setLocalizedDiagnosticMessages, + setNodeChildren: () => setNodeChildren, + setNodeFlags: () => setNodeFlags, + setObjectAllocator: () => setObjectAllocator, + setOriginalNode: () => setOriginalNode, + setParent: () => setParent, + setParentRecursive: () => setParentRecursive, + setPrivateIdentifier: () => setPrivateIdentifier, + setSnippetElement: () => setSnippetElement, + setSourceMapRange: () => setSourceMapRange, + setStackTraceLimit: () => setStackTraceLimit, + setStartsOnNewLine: () => setStartsOnNewLine, + setSyntheticLeadingComments: () => setSyntheticLeadingComments, + setSyntheticTrailingComments: () => setSyntheticTrailingComments, + setSys: () => setSys, + setSysLog: () => setSysLog, + setTextRange: () => setTextRange, + setTextRangeEnd: () => setTextRangeEnd, + setTextRangePos: () => setTextRangePos, + setTextRangePosEnd: () => setTextRangePosEnd, + setTextRangePosWidth: () => setTextRangePosWidth, + setTokenSourceMapRange: () => setTokenSourceMapRange, + setTypeNode: () => setTypeNode, + setUILocale: () => setUILocale, + setValueDeclaration: () => setValueDeclaration, + shouldAllowImportingTsExtension: () => shouldAllowImportingTsExtension, + shouldPreserveConstEnums: () => shouldPreserveConstEnums, + shouldRewriteModuleSpecifier: () => shouldRewriteModuleSpecifier, + shouldUseUriStyleNodeCoreModules: () => shouldUseUriStyleNodeCoreModules, + showModuleSpecifier: () => showModuleSpecifier, + signatureHasRestParameter: () => signatureHasRestParameter, + signatureToDisplayParts: () => signatureToDisplayParts, + single: () => single, + singleElementArray: () => singleElementArray, + singleIterator: () => singleIterator, + singleOrMany: () => singleOrMany, + singleOrUndefined: () => singleOrUndefined, + skipAlias: () => skipAlias, + skipConstraint: () => skipConstraint, + skipOuterExpressions: () => skipOuterExpressions, + skipParentheses: () => skipParentheses, + skipPartiallyEmittedExpressions: () => skipPartiallyEmittedExpressions, + skipTrivia: () => skipTrivia, + skipTypeChecking: () => skipTypeChecking, + skipTypeCheckingIgnoringNoCheck: () => skipTypeCheckingIgnoringNoCheck, + skipTypeParentheses: () => skipTypeParentheses, + skipWhile: () => skipWhile, + sliceAfter: () => sliceAfter, + some: () => some, + sortAndDeduplicate: () => sortAndDeduplicate, + sortAndDeduplicateDiagnostics: () => sortAndDeduplicateDiagnostics, + sourceFileAffectingCompilerOptions: () => sourceFileAffectingCompilerOptions, + sourceFileMayBeEmitted: () => sourceFileMayBeEmitted, + sourceMapCommentRegExp: () => sourceMapCommentRegExp, + sourceMapCommentRegExpDontCareLineStart: () => sourceMapCommentRegExpDontCareLineStart, + spacePart: () => spacePart, + spanMap: () => spanMap, + startEndContainsRange: () => startEndContainsRange, + startEndOverlapsWithStartEnd: () => startEndOverlapsWithStartEnd, + startOnNewLine: () => startOnNewLine, + startTracing: () => startTracing, + startsWith: () => startsWith, + startsWithDirectory: () => startsWithDirectory, + startsWithUnderscore: () => startsWithUnderscore, + startsWithUseStrict: () => startsWithUseStrict, + stringContainsAt: () => stringContainsAt, + stringToToken: () => stringToToken, + stripQuotes: () => stripQuotes, + supportedDeclarationExtensions: () => supportedDeclarationExtensions, + supportedJSExtensionsFlat: () => supportedJSExtensionsFlat, + supportedLocaleDirectories: () => supportedLocaleDirectories, + supportedTSExtensionsFlat: () => supportedTSExtensionsFlat, + supportedTSImplementationExtensions: () => supportedTSImplementationExtensions, + suppressLeadingAndTrailingTrivia: () => suppressLeadingAndTrailingTrivia, + suppressLeadingTrivia: () => suppressLeadingTrivia, + suppressTrailingTrivia: () => suppressTrailingTrivia, + symbolEscapedNameNoDefault: () => symbolEscapedNameNoDefault, + symbolName: () => symbolName, + symbolNameNoDefault: () => symbolNameNoDefault, + symbolToDisplayParts: () => symbolToDisplayParts, + sys: () => sys, + sysLog: () => sysLog, + tagNamesAreEquivalent: () => tagNamesAreEquivalent, + takeWhile: () => takeWhile, + targetOptionDeclaration: () => targetOptionDeclaration, + targetToLibMap: () => targetToLibMap, + testFormatSettings: () => testFormatSettings, + textChangeRangeIsUnchanged: () => textChangeRangeIsUnchanged, + textChangeRangeNewSpan: () => textChangeRangeNewSpan, + textChanges: () => ts_textChanges_exports, + textOrKeywordPart: () => textOrKeywordPart, + textPart: () => textPart, + textRangeContainsPositionInclusive: () => textRangeContainsPositionInclusive, + textRangeContainsTextSpan: () => textRangeContainsTextSpan, + textRangeIntersectsWithTextSpan: () => textRangeIntersectsWithTextSpan, + textSpanContainsPosition: () => textSpanContainsPosition, + textSpanContainsTextRange: () => textSpanContainsTextRange, + textSpanContainsTextSpan: () => textSpanContainsTextSpan, + textSpanEnd: () => textSpanEnd, + textSpanIntersection: () => textSpanIntersection, + textSpanIntersectsWith: () => textSpanIntersectsWith, + textSpanIntersectsWithPosition: () => textSpanIntersectsWithPosition, + textSpanIntersectsWithTextSpan: () => textSpanIntersectsWithTextSpan, + textSpanIsEmpty: () => textSpanIsEmpty, + textSpanOverlap: () => textSpanOverlap, + textSpanOverlapsWith: () => textSpanOverlapsWith, + textSpansEqual: () => textSpansEqual, + textToKeywordObj: () => textToKeywordObj, + timestamp: () => timestamp, + toArray: () => toArray, + toBuilderFileEmit: () => toBuilderFileEmit, + toBuilderStateFileInfoForMultiEmit: () => toBuilderStateFileInfoForMultiEmit, + toEditorSettings: () => toEditorSettings, + toFileNameLowerCase: () => toFileNameLowerCase, + toPath: () => toPath, + toProgramEmitPending: () => toProgramEmitPending, + toSorted: () => toSorted, + tokenIsIdentifierOrKeyword: () => tokenIsIdentifierOrKeyword, + tokenIsIdentifierOrKeywordOrGreaterThan: () => tokenIsIdentifierOrKeywordOrGreaterThan, + tokenToString: () => tokenToString, + trace: () => trace, + tracing: () => tracing, + tracingEnabled: () => tracingEnabled, + transferSourceFileChildren: () => transferSourceFileChildren, + transform: () => transform, + transformClassFields: () => transformClassFields, + transformDeclarations: () => transformDeclarations, + transformECMAScriptModule: () => transformECMAScriptModule, + transformES2015: () => transformES2015, + transformES2016: () => transformES2016, + transformES2017: () => transformES2017, + transformES2018: () => transformES2018, + transformES2019: () => transformES2019, + transformES2020: () => transformES2020, + transformES2021: () => transformES2021, + transformESDecorators: () => transformESDecorators, + transformESNext: () => transformESNext, + transformGenerators: () => transformGenerators, + transformImpliedNodeFormatDependentModule: () => transformImpliedNodeFormatDependentModule, + transformJsx: () => transformJsx, + transformLegacyDecorators: () => transformLegacyDecorators, + transformModule: () => transformModule, + transformNamedEvaluation: () => transformNamedEvaluation, + transformNodes: () => transformNodes, + transformSystemModule: () => transformSystemModule, + transformTypeScript: () => transformTypeScript, + transpile: () => transpile, + transpileDeclaration: () => transpileDeclaration, + transpileModule: () => transpileModule, + transpileOptionValueCompilerOptions: () => transpileOptionValueCompilerOptions, + tryAddToSet: () => tryAddToSet, + tryAndIgnoreErrors: () => tryAndIgnoreErrors, + tryCast: () => tryCast, + tryDirectoryExists: () => tryDirectoryExists, + tryExtractTSExtension: () => tryExtractTSExtension, + tryFileExists: () => tryFileExists, + tryGetClassExtendingExpressionWithTypeArguments: () => tryGetClassExtendingExpressionWithTypeArguments, + tryGetClassImplementingOrExtendingExpressionWithTypeArguments: () => tryGetClassImplementingOrExtendingExpressionWithTypeArguments, + tryGetDirectories: () => tryGetDirectories, + tryGetExtensionFromPath: () => tryGetExtensionFromPath2, + tryGetImportFromModuleSpecifier: () => tryGetImportFromModuleSpecifier, + tryGetJSDocSatisfiesTypeNode: () => tryGetJSDocSatisfiesTypeNode, + tryGetModuleNameFromFile: () => tryGetModuleNameFromFile, + tryGetModuleSpecifierFromDeclaration: () => tryGetModuleSpecifierFromDeclaration, + tryGetNativePerformanceHooks: () => tryGetNativePerformanceHooks, + tryGetPropertyAccessOrIdentifierToString: () => tryGetPropertyAccessOrIdentifierToString, + tryGetPropertyNameOfBindingOrAssignmentElement: () => tryGetPropertyNameOfBindingOrAssignmentElement, + tryGetSourceMappingURL: () => tryGetSourceMappingURL, + tryGetTextOfPropertyName: () => tryGetTextOfPropertyName, + tryParseJson: () => tryParseJson, + tryParsePattern: () => tryParsePattern, + tryParsePatterns: () => tryParsePatterns, + tryParseRawSourceMap: () => tryParseRawSourceMap, + tryReadDirectory: () => tryReadDirectory, + tryReadFile: () => tryReadFile, + tryRemoveDirectoryPrefix: () => tryRemoveDirectoryPrefix, + tryRemoveExtension: () => tryRemoveExtension, + tryRemovePrefix: () => tryRemovePrefix, + tryRemoveSuffix: () => tryRemoveSuffix, + tscBuildOption: () => tscBuildOption, + typeAcquisitionDeclarations: () => typeAcquisitionDeclarations, + typeAliasNamePart: () => typeAliasNamePart, + typeDirectiveIsEqualTo: () => typeDirectiveIsEqualTo, + typeKeywords: () => typeKeywords, + typeParameterNamePart: () => typeParameterNamePart, + typeToDisplayParts: () => typeToDisplayParts, + unchangedPollThresholds: () => unchangedPollThresholds, + unchangedTextChangeRange: () => unchangedTextChangeRange, + unescapeLeadingUnderscores: () => unescapeLeadingUnderscores, + unmangleScopedPackageName: () => unmangleScopedPackageName, + unorderedRemoveItem: () => unorderedRemoveItem, + unprefixedNodeCoreModules: () => unprefixedNodeCoreModules, + unreachableCodeIsError: () => unreachableCodeIsError, + unsetNodeChildren: () => unsetNodeChildren, + unusedLabelIsError: () => unusedLabelIsError, + unwrapInnermostStatementOfLabel: () => unwrapInnermostStatementOfLabel, + unwrapParenthesizedExpression: () => unwrapParenthesizedExpression, + updateErrorForNoInputFiles: () => updateErrorForNoInputFiles, + updateLanguageServiceSourceFile: () => updateLanguageServiceSourceFile, + updateMissingFilePathsWatch: () => updateMissingFilePathsWatch, + updateResolutionField: () => updateResolutionField, + updateSharedExtendedConfigFileWatcher: () => updateSharedExtendedConfigFileWatcher, + updateSourceFile: () => updateSourceFile, + updateWatchingWildcardDirectories: () => updateWatchingWildcardDirectories, + usingSingleLineStringWriter: () => usingSingleLineStringWriter, + utf16EncodeAsString: () => utf16EncodeAsString, + validateLocaleAndSetLanguage: () => validateLocaleAndSetLanguage, + version: () => version, + versionMajorMinor: () => versionMajorMinor, + visitArray: () => visitArray, + visitCommaListElements: () => visitCommaListElements, + visitEachChild: () => visitEachChild, + visitFunctionBody: () => visitFunctionBody, + visitIterationBody: () => visitIterationBody, + visitLexicalEnvironment: () => visitLexicalEnvironment, + visitNode: () => visitNode, + visitNodes: () => visitNodes2, + visitParameterList: () => visitParameterList, + walkUpBindingElementsAndPatterns: () => walkUpBindingElementsAndPatterns, + walkUpOuterExpressions: () => walkUpOuterExpressions, + walkUpParenthesizedExpressions: () => walkUpParenthesizedExpressions, + walkUpParenthesizedTypes: () => walkUpParenthesizedTypes, + walkUpParenthesizedTypesAndGetParentAndChild: () => walkUpParenthesizedTypesAndGetParentAndChild, + whitespaceOrMapCommentRegExp: () => whitespaceOrMapCommentRegExp, + writeCommentRange: () => writeCommentRange, + writeFile: () => writeFile, + writeFileEnsuringDirectories: () => writeFileEnsuringDirectories, + zipWith: () => zipWith +}); + +// src/deprecatedCompat/deprecate.ts +var enableDeprecationWarnings = true; +var typeScriptVersion2; +function getTypeScriptVersion() { + return typeScriptVersion2 ?? (typeScriptVersion2 = new Version(version)); +} +function formatDeprecationMessage(name, error2, errorAfter, since, message) { + let deprecationMessage = error2 ? "DeprecationError: " : "DeprecationWarning: "; + deprecationMessage += `'${name}' `; + deprecationMessage += since ? `has been deprecated since v${since}` : "is deprecated"; + deprecationMessage += error2 ? " and can no longer be used." : errorAfter ? ` and will no longer be usable after v${errorAfter}.` : "."; + deprecationMessage += message ? ` ${formatStringFromArgs(message, [name])}` : ""; + return deprecationMessage; +} +function createErrorDeprecation(name, errorAfter, since, message) { + const deprecationMessage = formatDeprecationMessage( + name, + /*error*/ + true, + errorAfter, + since, + message + ); + return () => { + throw new TypeError(deprecationMessage); + }; +} +function createWarningDeprecation(name, errorAfter, since, message) { + let hasWrittenDeprecation = false; + return () => { + if (enableDeprecationWarnings && !hasWrittenDeprecation) { + Debug.log.warn(formatDeprecationMessage( + name, + /*error*/ + false, + errorAfter, + since, + message + )); + hasWrittenDeprecation = true; + } + }; +} +function createDeprecation(name, options = {}) { + const version2 = typeof options.typeScriptVersion === "string" ? new Version(options.typeScriptVersion) : options.typeScriptVersion ?? getTypeScriptVersion(); + const errorAfter = typeof options.errorAfter === "string" ? new Version(options.errorAfter) : options.errorAfter; + const warnAfter = typeof options.warnAfter === "string" ? new Version(options.warnAfter) : options.warnAfter; + const since = typeof options.since === "string" ? new Version(options.since) : options.since ?? warnAfter; + const error2 = options.error || errorAfter && version2.compareTo(errorAfter) >= 0; + const warn = !warnAfter || version2.compareTo(warnAfter) >= 0; + return error2 ? createErrorDeprecation(name, errorAfter, since, options.message) : warn ? createWarningDeprecation(name, errorAfter, since, options.message) : noop; +} +function wrapFunction(deprecation, func) { + return function() { + deprecation(); + return func.apply(this, arguments); + }; +} +function deprecate(func, options) { + const deprecation = createDeprecation((options == null ? void 0 : options.name) ?? Debug.getFunctionName(func), options); + return wrapFunction(deprecation, func); +} + +// src/deprecatedCompat/deprecations.ts +function createOverload(name, overloads, binder2, deprecations) { + Object.defineProperty(call, "name", { ...Object.getOwnPropertyDescriptor(call, "name"), value: name }); + if (deprecations) { + for (const key of Object.keys(deprecations)) { + const index = +key; + if (!isNaN(index) && hasProperty(overloads, `${index}`)) { + overloads[index] = deprecate(overloads[index], { ...deprecations[index], name }); + } + } + } + const bind = createBinder2(overloads, binder2); + return call; + function call(...args) { + const index = bind(args); + const fn = index !== void 0 ? overloads[index] : void 0; + if (typeof fn === "function") { + return fn(...args); + } + throw new TypeError("Invalid arguments"); + } +} +function createBinder2(overloads, binder2) { + return (args) => { + for (let i = 0; hasProperty(overloads, `${i}`) && hasProperty(binder2, `${i}`); i++) { + const fn = binder2[i]; + if (fn(args)) { + return i; + } + } + }; +} +function buildOverload(name) { + return { + overload: (overloads) => ({ + bind: (binder2) => ({ + finish: () => createOverload(name, overloads, binder2), + deprecate: (deprecations) => ({ + finish: () => createOverload(name, overloads, binder2, deprecations) + }) + }) + }) + }; +} + +// src/server/_namespaces/ts.server.ts +var ts_server_exports3 = {}; +__export(ts_server_exports3, { + ActionInvalidate: () => ActionInvalidate, + ActionPackageInstalled: () => ActionPackageInstalled, + ActionSet: () => ActionSet, + ActionWatchTypingLocations: () => ActionWatchTypingLocations, + Arguments: () => Arguments, + AutoImportProviderProject: () => AutoImportProviderProject, + AuxiliaryProject: () => AuxiliaryProject, + CharRangeSection: () => CharRangeSection, + CloseFileWatcherEvent: () => CloseFileWatcherEvent, + CommandNames: () => CommandNames, + ConfigFileDiagEvent: () => ConfigFileDiagEvent, + ConfiguredProject: () => ConfiguredProject2, + ConfiguredProjectLoadKind: () => ConfiguredProjectLoadKind, + CreateDirectoryWatcherEvent: () => CreateDirectoryWatcherEvent, + CreateFileWatcherEvent: () => CreateFileWatcherEvent, + Errors: () => Errors, + EventBeginInstallTypes: () => EventBeginInstallTypes, + EventEndInstallTypes: () => EventEndInstallTypes, + EventInitializationFailed: () => EventInitializationFailed, + EventTypesRegistry: () => EventTypesRegistry, + ExternalProject: () => ExternalProject, + GcTimer: () => GcTimer, + InferredProject: () => InferredProject2, + LargeFileReferencedEvent: () => LargeFileReferencedEvent, + LineIndex: () => LineIndex, + LineLeaf: () => LineLeaf, + LineNode: () => LineNode, + LogLevel: () => LogLevel2, + Msg: () => Msg, + OpenFileInfoTelemetryEvent: () => OpenFileInfoTelemetryEvent, + Project: () => Project2, + ProjectInfoTelemetryEvent: () => ProjectInfoTelemetryEvent, + ProjectKind: () => ProjectKind, + ProjectLanguageServiceStateEvent: () => ProjectLanguageServiceStateEvent, + ProjectLoadingFinishEvent: () => ProjectLoadingFinishEvent, + ProjectLoadingStartEvent: () => ProjectLoadingStartEvent, + ProjectService: () => ProjectService2, + ProjectsUpdatedInBackgroundEvent: () => ProjectsUpdatedInBackgroundEvent, + ScriptInfo: () => ScriptInfo, + ScriptVersionCache: () => ScriptVersionCache, + Session: () => Session3, + TextStorage: () => TextStorage, + ThrottledOperations: () => ThrottledOperations, + TypingsInstallerAdapter: () => TypingsInstallerAdapter, + allFilesAreJsOrDts: () => allFilesAreJsOrDts, + allRootFilesAreJsOrDts: () => allRootFilesAreJsOrDts, + asNormalizedPath: () => asNormalizedPath, + convertCompilerOptions: () => convertCompilerOptions, + convertFormatOptions: () => convertFormatOptions, + convertScriptKindName: () => convertScriptKindName, + convertTypeAcquisition: () => convertTypeAcquisition, + convertUserPreferences: () => convertUserPreferences, + convertWatchOptions: () => convertWatchOptions, + countEachFileTypes: () => countEachFileTypes, + createInstallTypingsRequest: () => createInstallTypingsRequest, + createModuleSpecifierCache: () => createModuleSpecifierCache, + createNormalizedPathMap: () => createNormalizedPathMap, + createPackageJsonCache: () => createPackageJsonCache, + createSortedArray: () => createSortedArray2, + emptyArray: () => emptyArray2, + findArgument: () => findArgument, + formatDiagnosticToProtocol: () => formatDiagnosticToProtocol, + formatMessage: () => formatMessage2, + getBaseConfigFileName: () => getBaseConfigFileName, + getDetailWatchInfo: () => getDetailWatchInfo, + getLocationInNewDocument: () => getLocationInNewDocument, + hasArgument: () => hasArgument, + hasNoTypeScriptSource: () => hasNoTypeScriptSource, + indent: () => indent2, + isBackgroundProject: () => isBackgroundProject, + isConfigFile: () => isConfigFile, + isConfiguredProject: () => isConfiguredProject, + isDynamicFileName: () => isDynamicFileName, + isExternalProject: () => isExternalProject, + isInferredProject: () => isInferredProject, + isInferredProjectName: () => isInferredProjectName, + isProjectDeferredClose: () => isProjectDeferredClose, + makeAutoImportProviderProjectName: () => makeAutoImportProviderProjectName, + makeAuxiliaryProjectName: () => makeAuxiliaryProjectName, + makeInferredProjectName: () => makeInferredProjectName, + maxFileSize: () => maxFileSize, + maxProgramSizeForNonTsFiles: () => maxProgramSizeForNonTsFiles, + normalizedPathToPath: () => normalizedPathToPath, + nowString: () => nowString, + nullCancellationToken: () => nullCancellationToken, + nullTypingsInstaller: () => nullTypingsInstaller, + protocol: () => ts_server_protocol_exports, + scriptInfoIsContainedByBackgroundProject: () => scriptInfoIsContainedByBackgroundProject, + scriptInfoIsContainedByDeferredClosedProject: () => scriptInfoIsContainedByDeferredClosedProject, + stringifyIndented: () => stringifyIndented, + toEvent: () => toEvent, + toNormalizedPath: () => toNormalizedPath, + tryConvertScriptKindName: () => tryConvertScriptKindName, + typingsInstaller: () => ts_server_typingsInstaller_exports, + updateProjectIfDirty: () => updateProjectIfDirty +}); + +// src/typingsInstallerCore/_namespaces/ts.server.typingsInstaller.ts +var ts_server_typingsInstaller_exports = {}; +__export(ts_server_typingsInstaller_exports, { + TypingsInstaller: () => TypingsInstaller, + getNpmCommandForInstallation: () => getNpmCommandForInstallation, + installNpmPackages: () => installNpmPackages, + typingsName: () => typingsName +}); + +// src/typingsInstallerCore/typingsInstaller.ts +var nullLog = { + isEnabled: () => false, + writeLine: noop +}; +function typingToFileName(cachePath, packageName, installTypingHost, log) { + try { + const result = resolveModuleName(packageName, combinePaths(cachePath, "index.d.ts"), { moduleResolution: 2 /* Node10 */ }, installTypingHost); + return result.resolvedModule && result.resolvedModule.resolvedFileName; + } catch (e) { + if (log.isEnabled()) { + log.writeLine(`Failed to resolve ${packageName} in folder '${cachePath}': ${e.message}`); + } + return void 0; + } +} +function installNpmPackages(npmPath, tsVersion, packageNames, install) { + let hasError = false; + for (let remaining = packageNames.length; remaining > 0; ) { + const result = getNpmCommandForInstallation(npmPath, tsVersion, packageNames, remaining); + remaining = result.remaining; + hasError = install(result.command) || hasError; + } + return hasError; +} +function getNpmCommandForInstallation(npmPath, tsVersion, packageNames, remaining) { + const sliceStart = packageNames.length - remaining; + let command, toSlice = remaining; + while (true) { + command = `${npmPath} install --ignore-scripts ${(toSlice === packageNames.length ? packageNames : packageNames.slice(sliceStart, sliceStart + toSlice)).join(" ")} --save-dev --user-agent="typesInstaller/${tsVersion}"`; + if (command.length < 8e3) { + break; + } + toSlice = toSlice - Math.floor(toSlice / 2); + } + return { command, remaining: remaining - toSlice }; +} +var TypingsInstaller = class { + constructor(installTypingHost, globalCachePath, safeListPath, typesMapLocation, throttleLimit, log = nullLog) { + this.installTypingHost = installTypingHost; + this.globalCachePath = globalCachePath; + this.safeListPath = safeListPath; + this.typesMapLocation = typesMapLocation; + this.throttleLimit = throttleLimit; + this.log = log; + this.packageNameToTypingLocation = /* @__PURE__ */ new Map(); + this.missingTypingsSet = /* @__PURE__ */ new Set(); + this.knownCachesSet = /* @__PURE__ */ new Set(); + this.projectWatchers = /* @__PURE__ */ new Map(); + this.pendingRunRequests = []; + this.installRunCount = 1; + this.inFlightRequestCount = 0; + // eslint-disable-line @typescript-eslint/unified-signatures + this.latestDistTag = "latest"; + const isLoggingEnabled = this.log.isEnabled(); + if (isLoggingEnabled) { + this.log.writeLine(`Global cache location '${globalCachePath}', safe file path '${safeListPath}', types map path ${typesMapLocation}`); + } + this.processCacheLocation(this.globalCachePath); + } + /** @internal */ + handleRequest(req) { + switch (req.kind) { + case "discover": + this.install(req); + break; + case "closeProject": + this.closeProject(req); + break; + case "typesRegistry": { + const typesRegistry = {}; + this.typesRegistry.forEach((value, key) => { + typesRegistry[key] = value; + }); + const response = { kind: EventTypesRegistry, typesRegistry }; + this.sendResponse(response); + break; + } + case "installPackage": { + this.installPackage(req); + break; + } + default: + Debug.assertNever(req); + } + } + closeProject(req) { + this.closeWatchers(req.projectName); + } + closeWatchers(projectName) { + if (this.log.isEnabled()) { + this.log.writeLine(`Closing file watchers for project '${projectName}'`); + } + const watchers = this.projectWatchers.get(projectName); + if (!watchers) { + if (this.log.isEnabled()) { + this.log.writeLine(`No watchers are registered for project '${projectName}'`); + } + return; + } + this.projectWatchers.delete(projectName); + this.sendResponse({ kind: ActionWatchTypingLocations, projectName, files: [] }); + if (this.log.isEnabled()) { + this.log.writeLine(`Closing file watchers for project '${projectName}' - done.`); + } + } + install(req) { + if (this.log.isEnabled()) { + this.log.writeLine(`Got install request${stringifyIndented(req)}`); + } + if (req.cachePath) { + if (this.log.isEnabled()) { + this.log.writeLine(`Request specifies cache path '${req.cachePath}', loading cached information...`); + } + this.processCacheLocation(req.cachePath); + } + if (this.safeList === void 0) { + this.initializeSafeList(); + } + const discoverTypingsResult = ts_JsTyping_exports.discoverTypings( + this.installTypingHost, + this.log.isEnabled() ? (s) => this.log.writeLine(s) : void 0, + req.fileNames, + req.projectRootPath, + this.safeList, + this.packageNameToTypingLocation, + req.typeAcquisition, + req.unresolvedImports, + this.typesRegistry, + req.compilerOptions + ); + this.watchFiles(req.projectName, discoverTypingsResult.filesToWatch); + if (discoverTypingsResult.newTypingNames.length) { + this.installTypings(req, req.cachePath || this.globalCachePath, discoverTypingsResult.cachedTypingPaths, discoverTypingsResult.newTypingNames); + } else { + this.sendResponse(this.createSetTypings(req, discoverTypingsResult.cachedTypingPaths)); + if (this.log.isEnabled()) { + this.log.writeLine(`No new typings were requested as a result of typings discovery`); + } + } + } + /** @internal */ + installPackage(req) { + const { fileName, packageName, projectName, projectRootPath, id } = req; + const cwd = forEachAncestorDirectory(getDirectoryPath(fileName), (directory) => { + if (this.installTypingHost.fileExists(combinePaths(directory, "package.json"))) { + return directory; + } + }) || projectRootPath; + if (cwd) { + this.installWorker(-1, [packageName], cwd, (success) => { + const message = success ? `Package ${packageName} installed.` : `There was an error installing ${packageName}.`; + const response = { + kind: ActionPackageInstalled, + projectName, + id, + success, + message + }; + this.sendResponse(response); + }); + } else { + const response = { + kind: ActionPackageInstalled, + projectName, + id, + success: false, + message: "Could not determine a project root path." + }; + this.sendResponse(response); + } + } + initializeSafeList() { + if (this.typesMapLocation) { + const safeListFromMap = ts_JsTyping_exports.loadTypesMap(this.installTypingHost, this.typesMapLocation); + if (safeListFromMap) { + this.log.writeLine(`Loaded safelist from types map file '${this.typesMapLocation}'`); + this.safeList = safeListFromMap; + return; + } + this.log.writeLine(`Failed to load safelist from types map file '${this.typesMapLocation}'`); + } + this.safeList = ts_JsTyping_exports.loadSafeList(this.installTypingHost, this.safeListPath); + } + processCacheLocation(cacheLocation) { + if (this.log.isEnabled()) { + this.log.writeLine(`Processing cache location '${cacheLocation}'`); + } + if (this.knownCachesSet.has(cacheLocation)) { + if (this.log.isEnabled()) { + this.log.writeLine(`Cache location was already processed...`); + } + return; + } + const packageJson = combinePaths(cacheLocation, "package.json"); + const packageLockJson = combinePaths(cacheLocation, "package-lock.json"); + if (this.log.isEnabled()) { + this.log.writeLine(`Trying to find '${packageJson}'...`); + } + if (this.installTypingHost.fileExists(packageJson) && this.installTypingHost.fileExists(packageLockJson)) { + const npmConfig = JSON.parse(this.installTypingHost.readFile(packageJson)); + const npmLock = JSON.parse(this.installTypingHost.readFile(packageLockJson)); + if (this.log.isEnabled()) { + this.log.writeLine(`Loaded content of '${packageJson}':${stringifyIndented(npmConfig)}`); + this.log.writeLine(`Loaded content of '${packageLockJson}':${stringifyIndented(npmLock)}`); + } + if (npmConfig.devDependencies && (npmLock.packages || npmLock.dependencies)) { + for (const key in npmConfig.devDependencies) { + if (npmLock.packages && !hasProperty(npmLock.packages, `node_modules/${key}`) || npmLock.dependencies && !hasProperty(npmLock.dependencies, key)) { + continue; + } + const packageName = getBaseFileName(key); + if (!packageName) { + continue; + } + const typingFile = typingToFileName(cacheLocation, packageName, this.installTypingHost, this.log); + if (!typingFile) { + this.missingTypingsSet.add(packageName); + continue; + } + const existingTypingFile = this.packageNameToTypingLocation.get(packageName); + if (existingTypingFile) { + if (existingTypingFile.typingLocation === typingFile) { + continue; + } + if (this.log.isEnabled()) { + this.log.writeLine(`New typing for package ${packageName} from '${typingFile}' conflicts with existing typing file '${existingTypingFile}'`); + } + } + if (this.log.isEnabled()) { + this.log.writeLine(`Adding entry into typings cache: '${packageName}' => '${typingFile}'`); + } + const info = npmLock.packages && getProperty(npmLock.packages, `node_modules/${key}`) || getProperty(npmLock.dependencies, key); + const version2 = info && info.version; + if (!version2) { + continue; + } + const newTyping = { typingLocation: typingFile, version: new Version(version2) }; + this.packageNameToTypingLocation.set(packageName, newTyping); + } + } + } + if (this.log.isEnabled()) { + this.log.writeLine(`Finished processing cache location '${cacheLocation}'`); + } + this.knownCachesSet.add(cacheLocation); + } + filterTypings(typingsToInstall) { + return mapDefined(typingsToInstall, (typing) => { + const typingKey = mangleScopedPackageName(typing); + if (this.missingTypingsSet.has(typingKey)) { + if (this.log.isEnabled()) this.log.writeLine(`'${typing}':: '${typingKey}' is in missingTypingsSet - skipping...`); + return void 0; + } + const validationResult = ts_JsTyping_exports.validatePackageName(typing); + if (validationResult !== ts_JsTyping_exports.NameValidationResult.Ok) { + this.missingTypingsSet.add(typingKey); + if (this.log.isEnabled()) this.log.writeLine(ts_JsTyping_exports.renderPackageNameValidationFailure(validationResult, typing)); + return void 0; + } + if (!this.typesRegistry.has(typingKey)) { + if (this.log.isEnabled()) this.log.writeLine(`'${typing}':: Entry for package '${typingKey}' does not exist in local types registry - skipping...`); + return void 0; + } + if (this.packageNameToTypingLocation.get(typingKey) && ts_JsTyping_exports.isTypingUpToDate(this.packageNameToTypingLocation.get(typingKey), this.typesRegistry.get(typingKey))) { + if (this.log.isEnabled()) this.log.writeLine(`'${typing}':: '${typingKey}' already has an up-to-date typing - skipping...`); + return void 0; + } + return typingKey; + }); + } + ensurePackageDirectoryExists(directory) { + const npmConfigPath = combinePaths(directory, "package.json"); + if (this.log.isEnabled()) { + this.log.writeLine(`Npm config file: ${npmConfigPath}`); + } + if (!this.installTypingHost.fileExists(npmConfigPath)) { + if (this.log.isEnabled()) { + this.log.writeLine(`Npm config file: '${npmConfigPath}' is missing, creating new one...`); + } + this.ensureDirectoryExists(directory, this.installTypingHost); + this.installTypingHost.writeFile(npmConfigPath, '{ "private": true }'); + } + } + installTypings(req, cachePath, currentlyCachedTypings, typingsToInstall) { + if (this.log.isEnabled()) { + this.log.writeLine(`Installing typings ${JSON.stringify(typingsToInstall)}`); + } + const filteredTypings = this.filterTypings(typingsToInstall); + if (filteredTypings.length === 0) { + if (this.log.isEnabled()) { + this.log.writeLine(`All typings are known to be missing or invalid - no need to install more typings`); + } + this.sendResponse(this.createSetTypings(req, currentlyCachedTypings)); + return; + } + this.ensurePackageDirectoryExists(cachePath); + const requestId = this.installRunCount; + this.installRunCount++; + this.sendResponse({ + kind: EventBeginInstallTypes, + eventId: requestId, + typingsInstallerVersion: version, + projectName: req.projectName + }); + const scopedTypings = filteredTypings.map(typingsName); + this.installTypingsAsync(requestId, scopedTypings, cachePath, (ok) => { + try { + if (!ok) { + if (this.log.isEnabled()) { + this.log.writeLine(`install request failed, marking packages as missing to prevent repeated requests: ${JSON.stringify(filteredTypings)}`); + } + for (const typing of filteredTypings) { + this.missingTypingsSet.add(typing); + } + return; + } + if (this.log.isEnabled()) { + this.log.writeLine(`Installed typings ${JSON.stringify(scopedTypings)}`); + } + const installedTypingFiles = []; + for (const packageName of filteredTypings) { + const typingFile = typingToFileName(cachePath, packageName, this.installTypingHost, this.log); + if (!typingFile) { + this.missingTypingsSet.add(packageName); + continue; + } + const distTags = this.typesRegistry.get(packageName); + const newVersion = new Version(distTags[`ts${versionMajorMinor}`] || distTags[this.latestDistTag]); + const newTyping = { typingLocation: typingFile, version: newVersion }; + this.packageNameToTypingLocation.set(packageName, newTyping); + installedTypingFiles.push(typingFile); + } + if (this.log.isEnabled()) { + this.log.writeLine(`Installed typing files ${JSON.stringify(installedTypingFiles)}`); + } + this.sendResponse(this.createSetTypings(req, currentlyCachedTypings.concat(installedTypingFiles))); + } finally { + const response = { + kind: EventEndInstallTypes, + eventId: requestId, + projectName: req.projectName, + packagesToInstall: scopedTypings, + installSuccess: ok, + typingsInstallerVersion: version + }; + this.sendResponse(response); + } + }); + } + ensureDirectoryExists(directory, host) { + const directoryName = getDirectoryPath(directory); + if (!host.directoryExists(directoryName)) { + this.ensureDirectoryExists(directoryName, host); + } + if (!host.directoryExists(directory)) { + host.createDirectory(directory); + } + } + watchFiles(projectName, files) { + if (!files.length) { + this.closeWatchers(projectName); + return; + } + const existing = this.projectWatchers.get(projectName); + const newSet = new Set(files); + if (!existing || forEachKey(newSet, (s) => !existing.has(s)) || forEachKey(existing, (s) => !newSet.has(s))) { + this.projectWatchers.set(projectName, newSet); + this.sendResponse({ kind: ActionWatchTypingLocations, projectName, files }); + } else { + this.sendResponse({ kind: ActionWatchTypingLocations, projectName, files: void 0 }); + } + } + createSetTypings(request, typings) { + return { + projectName: request.projectName, + typeAcquisition: request.typeAcquisition, + compilerOptions: request.compilerOptions, + typings, + unresolvedImports: request.unresolvedImports, + kind: ActionSet + }; + } + installTypingsAsync(requestId, packageNames, cwd, onRequestCompleted) { + this.pendingRunRequests.unshift({ requestId, packageNames, cwd, onRequestCompleted }); + this.executeWithThrottling(); + } + executeWithThrottling() { + while (this.inFlightRequestCount < this.throttleLimit && this.pendingRunRequests.length) { + this.inFlightRequestCount++; + const request = this.pendingRunRequests.pop(); + this.installWorker(request.requestId, request.packageNames, request.cwd, (ok) => { + this.inFlightRequestCount--; + request.onRequestCompleted(ok); + this.executeWithThrottling(); + }); + } + } +}; +function typingsName(packageName) { + return `@types/${packageName}@ts${versionMajorMinor}`; +} + +// src/server/utilitiesPublic.ts +var LogLevel2 = /* @__PURE__ */ ((LogLevel3) => { + LogLevel3[LogLevel3["terse"] = 0] = "terse"; + LogLevel3[LogLevel3["normal"] = 1] = "normal"; + LogLevel3[LogLevel3["requestTime"] = 2] = "requestTime"; + LogLevel3[LogLevel3["verbose"] = 3] = "verbose"; + return LogLevel3; +})(LogLevel2 || {}); +var emptyArray2 = createSortedArray2(); +var Msg = /* @__PURE__ */ ((Msg2) => { + Msg2["Err"] = "Err"; + Msg2["Info"] = "Info"; + Msg2["Perf"] = "Perf"; + return Msg2; +})(Msg || {}); +function createInstallTypingsRequest(project, typeAcquisition, unresolvedImports, cachePath) { + return { + projectName: project.getProjectName(), + fileNames: project.getFileNames( + /*excludeFilesFromExternalLibraries*/ + true, + /*excludeConfigFiles*/ + true + ).concat(project.getExcludedFiles()), + compilerOptions: project.getCompilationSettings(), + typeAcquisition, + unresolvedImports, + projectRootPath: project.getCurrentDirectory(), + cachePath, + kind: "discover" + }; +} +var Errors; +((Errors2) => { + function ThrowNoProject() { + throw new Error("No Project."); + } + Errors2.ThrowNoProject = ThrowNoProject; + function ThrowProjectLanguageServiceDisabled() { + throw new Error("The project's language service is disabled."); + } + Errors2.ThrowProjectLanguageServiceDisabled = ThrowProjectLanguageServiceDisabled; + function ThrowProjectDoesNotContainDocument(fileName, project) { + throw new Error(`Project '${project.getProjectName()}' does not contain document '${fileName}'`); + } + Errors2.ThrowProjectDoesNotContainDocument = ThrowProjectDoesNotContainDocument; +})(Errors || (Errors = {})); +function toNormalizedPath(fileName) { + return normalizePath(fileName); +} +function normalizedPathToPath(normalizedPath, currentDirectory, getCanonicalFileName) { + const f = isRootedDiskPath(normalizedPath) ? normalizedPath : getNormalizedAbsolutePath(normalizedPath, currentDirectory); + return getCanonicalFileName(f); +} +function asNormalizedPath(fileName) { + return fileName; +} +function createNormalizedPathMap() { + const map2 = /* @__PURE__ */ new Map(); + return { + get(path) { + return map2.get(path); + }, + set(path, value) { + map2.set(path, value); + }, + contains(path) { + return map2.has(path); + }, + remove(path) { + map2.delete(path); + } + }; +} +function isInferredProjectName(name) { + return /dev\/null\/inferredProject\d+\*/.test(name); +} +function makeInferredProjectName(counter) { + return `/dev/null/inferredProject${counter}*`; +} +function makeAutoImportProviderProjectName(counter) { + return `/dev/null/autoImportProviderProject${counter}*`; +} +function makeAuxiliaryProjectName(counter) { + return `/dev/null/auxiliaryProject${counter}*`; +} +function createSortedArray2() { + return []; +} + +// src/server/utilities.ts +var ThrottledOperations = class _ThrottledOperations { + constructor(host, logger) { + this.host = host; + this.pendingTimeouts = /* @__PURE__ */ new Map(); + this.logger = logger.hasLevel(3 /* verbose */) ? logger : void 0; + } + /** + * Wait `number` milliseconds and then invoke `cb`. If, while waiting, schedule + * is called again with the same `operationId`, cancel this operation in favor + * of the new one. (Note that the amount of time the canceled operation had been + * waiting does not affect the amount of time that the new operation waits.) + */ + schedule(operationId, delay, cb) { + const pendingTimeout = this.pendingTimeouts.get(operationId); + if (pendingTimeout) { + this.host.clearTimeout(pendingTimeout); + } + this.pendingTimeouts.set(operationId, this.host.setTimeout(_ThrottledOperations.run, delay, operationId, this, cb)); + if (this.logger) { + this.logger.info(`Scheduled: ${operationId}${pendingTimeout ? ", Cancelled earlier one" : ""}`); + } + } + cancel(operationId) { + const pendingTimeout = this.pendingTimeouts.get(operationId); + if (!pendingTimeout) return false; + this.host.clearTimeout(pendingTimeout); + return this.pendingTimeouts.delete(operationId); + } + static run(operationId, self, cb) { + self.pendingTimeouts.delete(operationId); + if (self.logger) { + self.logger.info(`Running: ${operationId}`); + } + cb(); + } +}; +var GcTimer = class _GcTimer { + constructor(host, delay, logger) { + this.host = host; + this.delay = delay; + this.logger = logger; + } + scheduleCollect() { + if (!this.host.gc || this.timerId !== void 0) { + return; + } + this.timerId = this.host.setTimeout(_GcTimer.run, this.delay, this); + } + static run(self) { + self.timerId = void 0; + const log = self.logger.hasLevel(2 /* requestTime */); + const before = log && self.host.getMemoryUsage(); + self.host.gc(); + if (log) { + const after = self.host.getMemoryUsage(); + self.logger.perftrc(`GC::before ${before}, after ${after}`); + } + } +}; +function getBaseConfigFileName(configFilePath) { + const base = getBaseFileName(configFilePath); + return base === "tsconfig.json" || base === "jsconfig.json" ? base : void 0; +} + +// src/server/_namespaces/ts.server.protocol.ts +var ts_server_protocol_exports = {}; +__export(ts_server_protocol_exports, { + ClassificationType: () => ClassificationType, + CommandTypes: () => CommandTypes, + CompletionTriggerKind: () => CompletionTriggerKind, + IndentStyle: () => IndentStyle2, + JsxEmit: () => JsxEmit2, + ModuleKind: () => ModuleKind2, + ModuleResolutionKind: () => ModuleResolutionKind2, + NewLineKind: () => NewLineKind2, + OrganizeImportsMode: () => OrganizeImportsMode, + PollingWatchKind: () => PollingWatchKind2, + ScriptTarget: () => ScriptTarget11, + SemicolonPreference: () => SemicolonPreference, + WatchDirectoryKind: () => WatchDirectoryKind2, + WatchFileKind: () => WatchFileKind2 +}); + +// src/server/protocol.ts +var CommandTypes = /* @__PURE__ */ ((CommandTypes2) => { + CommandTypes2["JsxClosingTag"] = "jsxClosingTag"; + CommandTypes2["LinkedEditingRange"] = "linkedEditingRange"; + CommandTypes2["Brace"] = "brace"; + CommandTypes2["BraceFull"] = "brace-full"; + CommandTypes2["BraceCompletion"] = "braceCompletion"; + CommandTypes2["GetSpanOfEnclosingComment"] = "getSpanOfEnclosingComment"; + CommandTypes2["Change"] = "change"; + CommandTypes2["Close"] = "close"; + CommandTypes2["Completions"] = "completions"; + CommandTypes2["CompletionInfo"] = "completionInfo"; + CommandTypes2["CompletionsFull"] = "completions-full"; + CommandTypes2["CompletionDetails"] = "completionEntryDetails"; + CommandTypes2["CompletionDetailsFull"] = "completionEntryDetails-full"; + CommandTypes2["CompileOnSaveAffectedFileList"] = "compileOnSaveAffectedFileList"; + CommandTypes2["CompileOnSaveEmitFile"] = "compileOnSaveEmitFile"; + CommandTypes2["Configure"] = "configure"; + CommandTypes2["Definition"] = "definition"; + CommandTypes2["DefinitionFull"] = "definition-full"; + CommandTypes2["DefinitionAndBoundSpan"] = "definitionAndBoundSpan"; + CommandTypes2["DefinitionAndBoundSpanFull"] = "definitionAndBoundSpan-full"; + CommandTypes2["Implementation"] = "implementation"; + CommandTypes2["ImplementationFull"] = "implementation-full"; + CommandTypes2["EmitOutput"] = "emit-output"; + CommandTypes2["Exit"] = "exit"; + CommandTypes2["FileReferences"] = "fileReferences"; + CommandTypes2["FileReferencesFull"] = "fileReferences-full"; + CommandTypes2["Format"] = "format"; + CommandTypes2["Formatonkey"] = "formatonkey"; + CommandTypes2["FormatFull"] = "format-full"; + CommandTypes2["FormatonkeyFull"] = "formatonkey-full"; + CommandTypes2["FormatRangeFull"] = "formatRange-full"; + CommandTypes2["Geterr"] = "geterr"; + CommandTypes2["GeterrForProject"] = "geterrForProject"; + CommandTypes2["SemanticDiagnosticsSync"] = "semanticDiagnosticsSync"; + CommandTypes2["SyntacticDiagnosticsSync"] = "syntacticDiagnosticsSync"; + CommandTypes2["SuggestionDiagnosticsSync"] = "suggestionDiagnosticsSync"; + CommandTypes2["NavBar"] = "navbar"; + CommandTypes2["NavBarFull"] = "navbar-full"; + CommandTypes2["Navto"] = "navto"; + CommandTypes2["NavtoFull"] = "navto-full"; + CommandTypes2["NavTree"] = "navtree"; + CommandTypes2["NavTreeFull"] = "navtree-full"; + CommandTypes2["DocumentHighlights"] = "documentHighlights"; + CommandTypes2["DocumentHighlightsFull"] = "documentHighlights-full"; + CommandTypes2["Open"] = "open"; + CommandTypes2["Quickinfo"] = "quickinfo"; + CommandTypes2["QuickinfoFull"] = "quickinfo-full"; + CommandTypes2["References"] = "references"; + CommandTypes2["ReferencesFull"] = "references-full"; + CommandTypes2["Reload"] = "reload"; + CommandTypes2["Rename"] = "rename"; + CommandTypes2["RenameInfoFull"] = "rename-full"; + CommandTypes2["RenameLocationsFull"] = "renameLocations-full"; + CommandTypes2["Saveto"] = "saveto"; + CommandTypes2["SignatureHelp"] = "signatureHelp"; + CommandTypes2["SignatureHelpFull"] = "signatureHelp-full"; + CommandTypes2["FindSourceDefinition"] = "findSourceDefinition"; + CommandTypes2["Status"] = "status"; + CommandTypes2["TypeDefinition"] = "typeDefinition"; + CommandTypes2["ProjectInfo"] = "projectInfo"; + CommandTypes2["ReloadProjects"] = "reloadProjects"; + CommandTypes2["Unknown"] = "unknown"; + CommandTypes2["OpenExternalProject"] = "openExternalProject"; + CommandTypes2["OpenExternalProjects"] = "openExternalProjects"; + CommandTypes2["CloseExternalProject"] = "closeExternalProject"; + CommandTypes2["SynchronizeProjectList"] = "synchronizeProjectList"; + CommandTypes2["ApplyChangedToOpenFiles"] = "applyChangedToOpenFiles"; + CommandTypes2["UpdateOpen"] = "updateOpen"; + CommandTypes2["EncodedSyntacticClassificationsFull"] = "encodedSyntacticClassifications-full"; + CommandTypes2["EncodedSemanticClassificationsFull"] = "encodedSemanticClassifications-full"; + CommandTypes2["Cleanup"] = "cleanup"; + CommandTypes2["GetOutliningSpans"] = "getOutliningSpans"; + CommandTypes2["GetOutliningSpansFull"] = "outliningSpans"; + CommandTypes2["TodoComments"] = "todoComments"; + CommandTypes2["Indentation"] = "indentation"; + CommandTypes2["DocCommentTemplate"] = "docCommentTemplate"; + CommandTypes2["CompilerOptionsDiagnosticsFull"] = "compilerOptionsDiagnostics-full"; + CommandTypes2["NameOrDottedNameSpan"] = "nameOrDottedNameSpan"; + CommandTypes2["BreakpointStatement"] = "breakpointStatement"; + CommandTypes2["CompilerOptionsForInferredProjects"] = "compilerOptionsForInferredProjects"; + CommandTypes2["GetCodeFixes"] = "getCodeFixes"; + CommandTypes2["GetCodeFixesFull"] = "getCodeFixes-full"; + CommandTypes2["GetCombinedCodeFix"] = "getCombinedCodeFix"; + CommandTypes2["GetCombinedCodeFixFull"] = "getCombinedCodeFix-full"; + CommandTypes2["ApplyCodeActionCommand"] = "applyCodeActionCommand"; + CommandTypes2["GetSupportedCodeFixes"] = "getSupportedCodeFixes"; + CommandTypes2["GetApplicableRefactors"] = "getApplicableRefactors"; + CommandTypes2["GetEditsForRefactor"] = "getEditsForRefactor"; + CommandTypes2["GetMoveToRefactoringFileSuggestions"] = "getMoveToRefactoringFileSuggestions"; + CommandTypes2["PreparePasteEdits"] = "preparePasteEdits"; + CommandTypes2["GetPasteEdits"] = "getPasteEdits"; + CommandTypes2["GetEditsForRefactorFull"] = "getEditsForRefactor-full"; + CommandTypes2["OrganizeImports"] = "organizeImports"; + CommandTypes2["OrganizeImportsFull"] = "organizeImports-full"; + CommandTypes2["GetEditsForFileRename"] = "getEditsForFileRename"; + CommandTypes2["GetEditsForFileRenameFull"] = "getEditsForFileRename-full"; + CommandTypes2["ConfigurePlugin"] = "configurePlugin"; + CommandTypes2["SelectionRange"] = "selectionRange"; + CommandTypes2["SelectionRangeFull"] = "selectionRange-full"; + CommandTypes2["ToggleLineComment"] = "toggleLineComment"; + CommandTypes2["ToggleLineCommentFull"] = "toggleLineComment-full"; + CommandTypes2["ToggleMultilineComment"] = "toggleMultilineComment"; + CommandTypes2["ToggleMultilineCommentFull"] = "toggleMultilineComment-full"; + CommandTypes2["CommentSelection"] = "commentSelection"; + CommandTypes2["CommentSelectionFull"] = "commentSelection-full"; + CommandTypes2["UncommentSelection"] = "uncommentSelection"; + CommandTypes2["UncommentSelectionFull"] = "uncommentSelection-full"; + CommandTypes2["PrepareCallHierarchy"] = "prepareCallHierarchy"; + CommandTypes2["ProvideCallHierarchyIncomingCalls"] = "provideCallHierarchyIncomingCalls"; + CommandTypes2["ProvideCallHierarchyOutgoingCalls"] = "provideCallHierarchyOutgoingCalls"; + CommandTypes2["ProvideInlayHints"] = "provideInlayHints"; + CommandTypes2["WatchChange"] = "watchChange"; + CommandTypes2["MapCode"] = "mapCode"; + CommandTypes2["CopilotRelated"] = "copilotRelated"; + return CommandTypes2; +})(CommandTypes || {}); +var WatchFileKind2 = /* @__PURE__ */ ((WatchFileKind3) => { + WatchFileKind3["FixedPollingInterval"] = "FixedPollingInterval"; + WatchFileKind3["PriorityPollingInterval"] = "PriorityPollingInterval"; + WatchFileKind3["DynamicPriorityPolling"] = "DynamicPriorityPolling"; + WatchFileKind3["FixedChunkSizePolling"] = "FixedChunkSizePolling"; + WatchFileKind3["UseFsEvents"] = "UseFsEvents"; + WatchFileKind3["UseFsEventsOnParentDirectory"] = "UseFsEventsOnParentDirectory"; + return WatchFileKind3; +})(WatchFileKind2 || {}); +var WatchDirectoryKind2 = /* @__PURE__ */ ((WatchDirectoryKind3) => { + WatchDirectoryKind3["UseFsEvents"] = "UseFsEvents"; + WatchDirectoryKind3["FixedPollingInterval"] = "FixedPollingInterval"; + WatchDirectoryKind3["DynamicPriorityPolling"] = "DynamicPriorityPolling"; + WatchDirectoryKind3["FixedChunkSizePolling"] = "FixedChunkSizePolling"; + return WatchDirectoryKind3; +})(WatchDirectoryKind2 || {}); +var PollingWatchKind2 = /* @__PURE__ */ ((PollingWatchKind3) => { + PollingWatchKind3["FixedInterval"] = "FixedInterval"; + PollingWatchKind3["PriorityInterval"] = "PriorityInterval"; + PollingWatchKind3["DynamicPriority"] = "DynamicPriority"; + PollingWatchKind3["FixedChunkSize"] = "FixedChunkSize"; + return PollingWatchKind3; +})(PollingWatchKind2 || {}); +var IndentStyle2 = /* @__PURE__ */ ((IndentStyle3) => { + IndentStyle3["None"] = "None"; + IndentStyle3["Block"] = "Block"; + IndentStyle3["Smart"] = "Smart"; + return IndentStyle3; +})(IndentStyle2 || {}); +var JsxEmit2 = /* @__PURE__ */ ((JsxEmit3) => { + JsxEmit3["None"] = "none"; + JsxEmit3["Preserve"] = "preserve"; + JsxEmit3["ReactNative"] = "react-native"; + JsxEmit3["React"] = "react"; + JsxEmit3["ReactJSX"] = "react-jsx"; + JsxEmit3["ReactJSXDev"] = "react-jsxdev"; + return JsxEmit3; +})(JsxEmit2 || {}); +var ModuleKind2 = /* @__PURE__ */ ((ModuleKind3) => { + ModuleKind3["None"] = "none"; + ModuleKind3["CommonJS"] = "commonjs"; + ModuleKind3["AMD"] = "amd"; + ModuleKind3["UMD"] = "umd"; + ModuleKind3["System"] = "system"; + ModuleKind3["ES6"] = "es6"; + ModuleKind3["ES2015"] = "es2015"; + ModuleKind3["ES2020"] = "es2020"; + ModuleKind3["ES2022"] = "es2022"; + ModuleKind3["ESNext"] = "esnext"; + ModuleKind3["Node16"] = "node16"; + ModuleKind3["Node18"] = "node18"; + ModuleKind3["Node20"] = "node20"; + ModuleKind3["NodeNext"] = "nodenext"; + ModuleKind3["Preserve"] = "preserve"; + return ModuleKind3; +})(ModuleKind2 || {}); +var ModuleResolutionKind2 = /* @__PURE__ */ ((ModuleResolutionKind3) => { + ModuleResolutionKind3["Classic"] = "classic"; + ModuleResolutionKind3["Node"] = "node"; + ModuleResolutionKind3["NodeJs"] = "node"; + ModuleResolutionKind3["Node10"] = "node10"; + ModuleResolutionKind3["Node16"] = "node16"; + ModuleResolutionKind3["NodeNext"] = "nodenext"; + ModuleResolutionKind3["Bundler"] = "bundler"; + return ModuleResolutionKind3; +})(ModuleResolutionKind2 || {}); +var NewLineKind2 = /* @__PURE__ */ ((NewLineKind3) => { + NewLineKind3["Crlf"] = "Crlf"; + NewLineKind3["Lf"] = "Lf"; + return NewLineKind3; +})(NewLineKind2 || {}); +var ScriptTarget11 = /* @__PURE__ */ ((ScriptTarget12) => { + ScriptTarget12["ES3"] = "es3"; + ScriptTarget12["ES5"] = "es5"; + ScriptTarget12["ES6"] = "es6"; + ScriptTarget12["ES2015"] = "es2015"; + ScriptTarget12["ES2016"] = "es2016"; + ScriptTarget12["ES2017"] = "es2017"; + ScriptTarget12["ES2018"] = "es2018"; + ScriptTarget12["ES2019"] = "es2019"; + ScriptTarget12["ES2020"] = "es2020"; + ScriptTarget12["ES2021"] = "es2021"; + ScriptTarget12["ES2022"] = "es2022"; + ScriptTarget12["ES2023"] = "es2023"; + ScriptTarget12["ES2024"] = "es2024"; + ScriptTarget12["ESNext"] = "esnext"; + ScriptTarget12["JSON"] = "json"; + ScriptTarget12["Latest"] = "esnext" /* ESNext */; + return ScriptTarget12; +})(ScriptTarget11 || {}); +{ +} + +// src/server/scriptInfo.ts +var TextStorage = class { + constructor(host, info, initialVersion) { + this.host = host; + this.info = info; + /** + * True if the text is for the file thats open in the editor + */ + this.isOpen = false; + /** + * True if the text present is the text from the file on the disk + */ + this.ownFileText = false; + /** + * True when reloading contents of file from the disk is pending + */ + this.pendingReloadFromDisk = false; + this.version = initialVersion || 0; + } + getVersion() { + return this.svc ? `SVC-${this.version}-${this.svc.getSnapshotVersion()}` : `Text-${this.version}`; + } + hasScriptVersionCache_TestOnly() { + return this.svc !== void 0; + } + resetSourceMapInfo() { + this.info.sourceFileLike = void 0; + this.info.closeSourceMapFileWatcher(); + this.info.sourceMapFilePath = void 0; + this.info.declarationInfoPath = void 0; + this.info.sourceInfos = void 0; + this.info.documentPositionMapper = void 0; + } + /** Public for testing */ + useText(newText) { + this.svc = void 0; + this.text = newText; + this.textSnapshot = void 0; + this.lineMap = void 0; + this.fileSize = void 0; + this.resetSourceMapInfo(); + this.version++; + } + edit(start, end, newText) { + this.switchToScriptVersionCache().edit(start, end - start, newText); + this.ownFileText = false; + this.text = void 0; + this.textSnapshot = void 0; + this.lineMap = void 0; + this.fileSize = void 0; + this.resetSourceMapInfo(); + } + /** + * Set the contents as newText + * returns true if text changed + */ + reload(newText) { + Debug.assert(newText !== void 0); + this.pendingReloadFromDisk = false; + if (!this.text && this.svc) { + this.text = getSnapshotText(this.svc.getSnapshot()); + } + if (this.text !== newText) { + this.useText(newText); + this.ownFileText = false; + return true; + } + return false; + } + /** + * Reads the contents from tempFile(if supplied) or own file and sets it as contents + * returns true if text changed + */ + reloadWithFileText(tempFileName) { + const { text: newText, fileSize } = tempFileName || !this.info.isDynamicOrHasMixedContent() ? this.getFileTextAndSize(tempFileName) : { text: "", fileSize: void 0 }; + const reloaded = this.reload(newText); + this.fileSize = fileSize; + this.ownFileText = !tempFileName || tempFileName === this.info.fileName; + if (this.ownFileText && this.info.mTime === missingFileModifiedTime.getTime()) { + this.info.mTime = (this.host.getModifiedTime(this.info.fileName) || missingFileModifiedTime).getTime(); + } + return reloaded; + } + /** + * Schedule reload from the disk if its not already scheduled and its not own text + * returns true when scheduling reload + */ + scheduleReloadIfNeeded() { + return !this.pendingReloadFromDisk && !this.ownFileText ? this.pendingReloadFromDisk = true : false; + } + delayReloadFromFileIntoText() { + this.pendingReloadFromDisk = true; + } + /** + * For telemetry purposes, we would like to be able to report the size of the file. + * However, we do not want telemetry to require extra file I/O so we report a size + * that may be stale (e.g. may not reflect change made on disk since the last reload). + * NB: Will read from disk if the file contents have never been loaded because + * telemetry falsely indicating size 0 would be counter-productive. + */ + getTelemetryFileSize() { + return !!this.fileSize ? this.fileSize : !!this.text ? this.text.length : !!this.svc ? this.svc.getSnapshot().getLength() : this.getSnapshot().getLength(); + } + getSnapshot() { + var _a; + return ((_a = this.tryUseScriptVersionCache()) == null ? void 0 : _a.getSnapshot()) || (this.textSnapshot ?? (this.textSnapshot = ScriptSnapshot.fromString(Debug.checkDefined(this.text)))); + } + getAbsolutePositionAndLineText(oneBasedLine) { + const svc = this.tryUseScriptVersionCache(); + if (svc) return svc.getAbsolutePositionAndLineText(oneBasedLine); + const lineMap = this.getLineMap(); + return oneBasedLine <= lineMap.length ? { + absolutePosition: lineMap[oneBasedLine - 1], + lineText: this.text.substring(lineMap[oneBasedLine - 1], lineMap[oneBasedLine]) + } : { + absolutePosition: this.text.length, + lineText: void 0 + }; + } + /** + * @param line 0 based index + */ + lineToTextSpan(line) { + const svc = this.tryUseScriptVersionCache(); + if (svc) return svc.lineToTextSpan(line); + const lineMap = this.getLineMap(); + const start = lineMap[line]; + const end = line + 1 < lineMap.length ? lineMap[line + 1] : this.text.length; + return createTextSpanFromBounds(start, end); + } + /** + * @param line 1 based index + * @param offset 1 based index + */ + lineOffsetToPosition(line, offset, allowEdits) { + const svc = this.tryUseScriptVersionCache(); + return svc ? svc.lineOffsetToPosition(line, offset) : computePositionOfLineAndCharacter(this.getLineMap(), line - 1, offset - 1, this.text, allowEdits); + } + positionToLineOffset(position) { + const svc = this.tryUseScriptVersionCache(); + if (svc) return svc.positionToLineOffset(position); + const { line, character } = computeLineAndCharacterOfPosition(this.getLineMap(), position); + return { line: line + 1, offset: character + 1 }; + } + getFileTextAndSize(tempFileName) { + let text; + const fileName = tempFileName || this.info.fileName; + const getText = () => text === void 0 ? text = this.host.readFile(fileName) || "" : text; + if (!hasTSFileExtension(this.info.fileName)) { + const fileSize = this.host.getFileSize ? this.host.getFileSize(fileName) : getText().length; + if (fileSize > maxFileSize) { + Debug.assert(!!this.info.containingProjects.length); + const service = this.info.containingProjects[0].projectService; + service.logger.info(`Skipped loading contents of large file ${fileName} for info ${this.info.fileName}: fileSize: ${fileSize}`); + this.info.containingProjects[0].projectService.sendLargeFileReferencedEvent(fileName, fileSize); + return { text: "", fileSize }; + } + } + return { text: getText() }; + } + /** @internal */ + switchToScriptVersionCache() { + if (!this.svc || this.pendingReloadFromDisk) { + this.svc = ScriptVersionCache.fromString(this.getOrLoadText()); + this.textSnapshot = void 0; + this.version++; + } + return this.svc; + } + tryUseScriptVersionCache() { + if (!this.svc || this.pendingReloadFromDisk) { + this.getOrLoadText(); + } + if (this.isOpen) { + if (!this.svc && !this.textSnapshot) { + this.svc = ScriptVersionCache.fromString(Debug.checkDefined(this.text)); + this.textSnapshot = void 0; + } + return this.svc; + } + return this.svc; + } + getOrLoadText() { + if (this.text === void 0 || this.pendingReloadFromDisk) { + Debug.assert(!this.svc || this.pendingReloadFromDisk, "ScriptVersionCache should not be set when reloading from disk"); + this.reloadWithFileText(); + } + return this.text; + } + getLineMap() { + Debug.assert(!this.svc, "ScriptVersionCache should not be set"); + return this.lineMap || (this.lineMap = computeLineStarts(Debug.checkDefined(this.text))); + } + getLineInfo() { + const svc = this.tryUseScriptVersionCache(); + if (svc) { + return { + getLineCount: () => svc.getLineCount(), + getLineText: (line) => svc.getAbsolutePositionAndLineText(line + 1).lineText + }; + } + const lineMap = this.getLineMap(); + return getLineInfo(this.text, lineMap); + } +}; +function isDynamicFileName(fileName) { + return fileName[0] === "^" || (fileName.includes("walkThroughSnippet:/") || fileName.includes("untitled:/")) && getBaseFileName(fileName)[0] === "^" || fileName.includes(":^") && !fileName.includes(directorySeparator); +} +var ScriptInfo = class { + constructor(host, fileName, scriptKind, hasMixedContent, path, initialVersion) { + this.host = host; + this.fileName = fileName; + this.scriptKind = scriptKind; + this.hasMixedContent = hasMixedContent; + this.path = path; + /** + * All projects that include this file + */ + this.containingProjects = []; + this.isDynamic = isDynamicFileName(fileName); + this.textStorage = new TextStorage(host, this, initialVersion); + if (hasMixedContent || this.isDynamic) { + this.realpath = this.path; + } + this.scriptKind = scriptKind ? scriptKind : getScriptKindFromFileName(fileName); + } + /** @internal */ + isDynamicOrHasMixedContent() { + return this.hasMixedContent || this.isDynamic; + } + isScriptOpen() { + return this.textStorage.isOpen; + } + open(newText) { + this.textStorage.isOpen = true; + if (newText !== void 0 && this.textStorage.reload(newText)) { + this.markContainingProjectsAsDirty(); + } + } + close(fileExists = true) { + this.textStorage.isOpen = false; + if (fileExists && this.textStorage.scheduleReloadIfNeeded()) { + this.markContainingProjectsAsDirty(); + } + } + getSnapshot() { + return this.textStorage.getSnapshot(); + } + ensureRealPath() { + if (this.realpath === void 0) { + this.realpath = this.path; + if (this.host.realpath) { + Debug.assert(!!this.containingProjects.length); + const project = this.containingProjects[0]; + const realpath = this.host.realpath(this.path); + if (realpath) { + this.realpath = project.toPath(realpath); + if (this.realpath !== this.path) { + project.projectService.realpathToScriptInfos.add(this.realpath, this); + } + } + } + } + } + /** @internal */ + getRealpathIfDifferent() { + return this.realpath && this.realpath !== this.path ? this.realpath : void 0; + } + /** + * @internal + * Does not compute realpath; uses precomputed result. Use `ensureRealPath` + * first if a definite result is needed. + */ + isSymlink() { + return this.realpath && this.realpath !== this.path; + } + getFormatCodeSettings() { + return this.formatSettings; + } + getPreferences() { + return this.preferences; + } + attachToProject(project) { + const isNew = !this.isAttached(project); + if (isNew) { + this.containingProjects.push(project); + if (!project.getCompilerOptions().preserveSymlinks) { + this.ensureRealPath(); + } + project.onFileAddedOrRemoved(this.isSymlink()); + } + return isNew; + } + isAttached(project) { + switch (this.containingProjects.length) { + case 0: + return false; + case 1: + return this.containingProjects[0] === project; + case 2: + return this.containingProjects[0] === project || this.containingProjects[1] === project; + default: + return contains(this.containingProjects, project); + } + } + detachFromProject(project) { + switch (this.containingProjects.length) { + case 0: + return; + case 1: + if (this.containingProjects[0] === project) { + project.onFileAddedOrRemoved(this.isSymlink()); + this.containingProjects.pop(); + } + break; + case 2: + if (this.containingProjects[0] === project) { + project.onFileAddedOrRemoved(this.isSymlink()); + this.containingProjects[0] = this.containingProjects.pop(); + } else if (this.containingProjects[1] === project) { + project.onFileAddedOrRemoved(this.isSymlink()); + this.containingProjects.pop(); + } + break; + default: + if (orderedRemoveItem(this.containingProjects, project)) { + project.onFileAddedOrRemoved(this.isSymlink()); + } + break; + } + } + detachAllProjects() { + for (const p of this.containingProjects) { + if (isConfiguredProject(p)) { + p.getCachedDirectoryStructureHost().addOrDeleteFile(this.fileName, this.path, 2 /* Deleted */); + } + const existingRoot = p.getRootFilesMap().get(this.path); + p.removeFile( + this, + /*fileExists*/ + false, + /*detachFromProject*/ + false + ); + p.onFileAddedOrRemoved(this.isSymlink()); + if (existingRoot && !isInferredProject(p)) { + p.addMissingFileRoot(existingRoot.fileName); + } + } + clear(this.containingProjects); + } + getDefaultProject() { + switch (this.containingProjects.length) { + case 0: + return Errors.ThrowNoProject(); + case 1: + return isProjectDeferredClose(this.containingProjects[0]) || isBackgroundProject(this.containingProjects[0]) ? Errors.ThrowNoProject() : this.containingProjects[0]; + default: + let firstConfiguredProject; + let firstInferredProject; + let firstNonSourceOfProjectReferenceRedirect; + let defaultConfiguredProject; + for (let index = 0; index < this.containingProjects.length; index++) { + const project = this.containingProjects[index]; + if (isConfiguredProject(project)) { + if (project.deferredClose) continue; + if (!project.isSourceOfProjectReferenceRedirect(this.fileName)) { + if (defaultConfiguredProject === void 0 && index !== this.containingProjects.length - 1) { + defaultConfiguredProject = project.projectService.findDefaultConfiguredProject(this) || false; + } + if (defaultConfiguredProject === project) return project; + if (!firstNonSourceOfProjectReferenceRedirect) firstNonSourceOfProjectReferenceRedirect = project; + } + if (!firstConfiguredProject) firstConfiguredProject = project; + } else if (isExternalProject(project)) { + return project; + } else if (!firstInferredProject && isInferredProject(project)) { + firstInferredProject = project; + } + } + return (defaultConfiguredProject || firstNonSourceOfProjectReferenceRedirect || firstConfiguredProject || firstInferredProject) ?? Errors.ThrowNoProject(); + } + } + registerFileUpdate() { + for (const p of this.containingProjects) { + p.registerFileUpdate(this.path); + } + } + setOptions(formatSettings, preferences) { + if (formatSettings) { + if (!this.formatSettings) { + this.formatSettings = getDefaultFormatCodeSettings(this.host.newLine); + assign(this.formatSettings, formatSettings); + } else { + this.formatSettings = { ...this.formatSettings, ...formatSettings }; + } + } + if (preferences) { + if (!this.preferences) { + this.preferences = emptyOptions; + } + this.preferences = { ...this.preferences, ...preferences }; + } + } + getLatestVersion() { + this.textStorage.getSnapshot(); + return this.textStorage.getVersion(); + } + saveTo(fileName) { + this.host.writeFile(fileName, getSnapshotText(this.textStorage.getSnapshot())); + } + /** @internal */ + delayReloadNonMixedContentFile() { + Debug.assert(!this.isDynamicOrHasMixedContent()); + this.textStorage.delayReloadFromFileIntoText(); + this.markContainingProjectsAsDirty(); + } + reloadFromFile(tempFileName) { + if (this.textStorage.reloadWithFileText(tempFileName)) { + this.markContainingProjectsAsDirty(); + return true; + } + return false; + } + editContent(start, end, newText) { + this.textStorage.edit(start, end, newText); + this.markContainingProjectsAsDirty(); + } + markContainingProjectsAsDirty() { + for (const p of this.containingProjects) { + p.markFileAsDirty(this.path); + } + } + isOrphan() { + return this.deferredDelete || !forEach(this.containingProjects, (p) => !p.isOrphan()); + } + /** + * @param line 1 based index + */ + lineToTextSpan(line) { + return this.textStorage.lineToTextSpan(line); + } + // eslint-disable-line @typescript-eslint/unified-signatures + lineOffsetToPosition(line, offset, allowEdits) { + return this.textStorage.lineOffsetToPosition(line, offset, allowEdits); + } + positionToLineOffset(position) { + failIfInvalidPosition(position); + const location = this.textStorage.positionToLineOffset(position); + failIfInvalidLocation(location); + return location; + } + isJavaScript() { + return this.scriptKind === 1 /* JS */ || this.scriptKind === 2 /* JSX */; + } + /** @internal */ + closeSourceMapFileWatcher() { + if (this.sourceMapFilePath && !isString(this.sourceMapFilePath)) { + closeFileWatcherOf(this.sourceMapFilePath); + this.sourceMapFilePath = void 0; + } + } +}; +function failIfInvalidPosition(position) { + Debug.assert(typeof position === "number", `Expected position ${position} to be a number.`); + Debug.assert(position >= 0, `Expected position to be non-negative.`); +} +function failIfInvalidLocation(location) { + Debug.assert(typeof location.line === "number", `Expected line ${location.line} to be a number.`); + Debug.assert(typeof location.offset === "number", `Expected offset ${location.offset} to be a number.`); + Debug.assert(location.line > 0, `Expected line to be non-${location.line === 0 ? "zero" : "negative"}`); + Debug.assert(location.offset > 0, `Expected offset to be non-${location.offset === 0 ? "zero" : "negative"}`); +} +function scriptInfoIsContainedByBackgroundProject(info) { + return some( + info.containingProjects, + isBackgroundProject + ); +} +function scriptInfoIsContainedByDeferredClosedProject(info) { + return some( + info.containingProjects, + isProjectDeferredClose + ); +} + +// src/server/project.ts +var ProjectKind = /* @__PURE__ */ ((ProjectKind2) => { + ProjectKind2[ProjectKind2["Inferred"] = 0] = "Inferred"; + ProjectKind2[ProjectKind2["Configured"] = 1] = "Configured"; + ProjectKind2[ProjectKind2["External"] = 2] = "External"; + ProjectKind2[ProjectKind2["AutoImportProvider"] = 3] = "AutoImportProvider"; + ProjectKind2[ProjectKind2["Auxiliary"] = 4] = "Auxiliary"; + return ProjectKind2; +})(ProjectKind || {}); +function countEachFileTypes(infos, includeSizes = false) { + const result = { + js: 0, + jsSize: 0, + jsx: 0, + jsxSize: 0, + ts: 0, + tsSize: 0, + tsx: 0, + tsxSize: 0, + dts: 0, + dtsSize: 0, + deferred: 0, + deferredSize: 0 + }; + for (const info of infos) { + const fileSize = includeSizes ? info.textStorage.getTelemetryFileSize() : 0; + switch (info.scriptKind) { + case 1 /* JS */: + result.js += 1; + result.jsSize += fileSize; + break; + case 2 /* JSX */: + result.jsx += 1; + result.jsxSize += fileSize; + break; + case 3 /* TS */: + if (isDeclarationFileName(info.fileName)) { + result.dts += 1; + result.dtsSize += fileSize; + } else { + result.ts += 1; + result.tsSize += fileSize; + } + break; + case 4 /* TSX */: + result.tsx += 1; + result.tsxSize += fileSize; + break; + case 7 /* Deferred */: + result.deferred += 1; + result.deferredSize += fileSize; + break; + } + } + return result; +} +function hasOneOrMoreJsAndNoTsFiles(project) { + const counts2 = countEachFileTypes(project.getScriptInfos()); + return counts2.js > 0 && counts2.ts === 0 && counts2.tsx === 0; +} +function allRootFilesAreJsOrDts(project) { + const counts2 = countEachFileTypes(project.getRootScriptInfos()); + return counts2.ts === 0 && counts2.tsx === 0; +} +function allFilesAreJsOrDts(project) { + const counts2 = countEachFileTypes(project.getScriptInfos()); + return counts2.ts === 0 && counts2.tsx === 0; +} +function hasNoTypeScriptSource(fileNames) { + return !fileNames.some((fileName) => fileExtensionIs(fileName, ".ts" /* Ts */) && !isDeclarationFileName(fileName) || fileExtensionIs(fileName, ".tsx" /* Tsx */)); +} +function isGeneratedFileWatcher(watch) { + return watch.generatedFilePath !== void 0; +} +function setIsEqualTo(arr1, arr2) { + if (arr1 === arr2) { + return true; + } + if ((arr1 || emptyArray2).length === 0 && (arr2 || emptyArray2).length === 0) { + return true; + } + const set = /* @__PURE__ */ new Map(); + let unique = 0; + for (const v of arr1) { + if (set.get(v) !== true) { + set.set(v, true); + unique++; + } + } + for (const v of arr2) { + const isSet = set.get(v); + if (isSet === void 0) { + return false; + } + if (isSet === true) { + set.set(v, false); + unique--; + } + } + return unique === 0; +} +function typeAcquisitionChanged(opt1, opt2) { + return opt1.enable !== opt2.enable || !setIsEqualTo(opt1.include, opt2.include) || !setIsEqualTo(opt1.exclude, opt2.exclude); +} +function compilerOptionsChanged(opt1, opt2) { + return getAllowJSCompilerOption(opt1) !== getAllowJSCompilerOption(opt2); +} +function unresolvedImportsChanged(imports1, imports2) { + if (imports1 === imports2) { + return false; + } + return !arrayIsEqualTo(imports1, imports2); +} +var Project2 = class _Project { + /** @internal */ + constructor(projectName, projectKind, projectService, hasExplicitListOfFiles, lastFileExceededProgramSize, compilerOptions, compileOnSaveEnabled, watchOptions, directoryStructureHost, currentDirectory) { + this.projectKind = projectKind; + this.projectService = projectService; + this.compilerOptions = compilerOptions; + this.compileOnSaveEnabled = compileOnSaveEnabled; + this.watchOptions = watchOptions; + this.rootFilesMap = /* @__PURE__ */ new Map(); + /** @internal */ + this.plugins = []; + /** + * This is map from files to unresolved imports in it + * Maop does not contain entries for files that do not have unresolved imports + * This helps in containing the set of files to invalidate + * + * @internal + */ + this.cachedUnresolvedImportsPerFile = /* @__PURE__ */ new Map(); + this.hasAddedorRemovedFiles = false; + this.hasAddedOrRemovedSymlinks = false; + /** + * Last version that was reported. + */ + this.lastReportedVersion = 0; + /** + * Current project's program version. (incremented everytime new program is created that is not complete reuse from the old one) + * This property is changed in 'updateGraph' based on the set of files in program + * @internal + */ + this.projectProgramVersion = 0; + /** + * Current version of the project state. It is changed when: + * - new root file was added/removed + * - edit happen in some file that is currently included in the project. + * This property is different from projectStructureVersion since in most cases edits don't affect set of files in the project + * @internal + */ + this.projectStateVersion = 0; + /** @internal */ + this.initialLoadPending = false; + /** @internal */ + this.dirty = false; + /** @internal */ + this.typingFiles = emptyArray2; + this.moduleSpecifierCache = createModuleSpecifierCache(this); + /** @internal */ + this.createHash = maybeBind(this.projectService.host, this.projectService.host.createHash); + /** @internal */ + this.globalCacheResolutionModuleName = ts_JsTyping_exports.nonRelativeModuleNameForTypingCache; + /** @internal */ + this.updateFromProjectInProgress = false; + projectService.logger.info(`Creating ${ProjectKind[projectKind]}Project: ${projectName}, currentDirectory: ${currentDirectory}`); + this.projectName = projectName; + this.directoryStructureHost = directoryStructureHost; + this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory); + this.getCanonicalFileName = this.projectService.toCanonicalFileName; + this.jsDocParsingMode = this.projectService.jsDocParsingMode; + this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); + if (!this.compilerOptions) { + this.compilerOptions = getDefaultCompilerOptions2(); + this.compilerOptions.allowNonTsExtensions = true; + this.compilerOptions.allowJs = true; + } else if (hasExplicitListOfFiles || getAllowJSCompilerOption(this.compilerOptions) || this.projectService.hasDeferredExtension()) { + this.compilerOptions.allowNonTsExtensions = true; + } + switch (projectService.serverMode) { + case 0 /* Semantic */: + this.languageServiceEnabled = true; + break; + case 1 /* PartialSemantic */: + this.languageServiceEnabled = true; + this.compilerOptions.noResolve = true; + this.compilerOptions.types = []; + break; + case 2 /* Syntactic */: + this.languageServiceEnabled = false; + this.compilerOptions.noResolve = true; + this.compilerOptions.types = []; + break; + default: + Debug.assertNever(projectService.serverMode); + } + this.setInternalCompilerOptionsForEmittingJsFiles(); + const host = this.projectService.host; + if (this.projectService.logger.loggingEnabled()) { + this.trace = (s) => this.writeLog(s); + } else if (host.trace) { + this.trace = (s) => host.trace(s); + } + this.realpath = maybeBind(host, host.realpath); + this.preferNonRecursiveWatch = this.projectService.canUseWatchEvents || host.preferNonRecursiveWatch; + this.resolutionCache = createResolutionCache( + this, + this.currentDirectory, + /*logChangesWhenResolvingModule*/ + true + ); + this.languageService = createLanguageService( + this, + this.projectService.documentRegistry, + this.projectService.serverMode + ); + if (lastFileExceededProgramSize) { + this.disableLanguageService(lastFileExceededProgramSize); + } + this.markAsDirty(); + if (!isBackgroundProject(this)) { + this.projectService.pendingEnsureProjectForOpenFiles = true; + } + this.projectService.onProjectCreation(this); + } + /** @internal */ + getRedirectFromSourceFile(_fileName) { + return void 0; + } + isNonTsProject() { + updateProjectIfDirty(this); + return allFilesAreJsOrDts(this); + } + isJsOnlyProject() { + updateProjectIfDirty(this); + return hasOneOrMoreJsAndNoTsFiles(this); + } + static resolveModule(moduleName, initialDir, host, log) { + return _Project.importServicePluginSync({ name: moduleName }, [initialDir], host, log).resolvedModule; + } + /** @internal */ + static importServicePluginSync(pluginConfigEntry, searchPaths, host, log) { + Debug.assertIsDefined(host.require); + let errorLogs; + let resolvedModule; + for (const initialDir of searchPaths) { + const resolvedPath = normalizeSlashes(host.resolvePath(combinePaths(initialDir, "node_modules"))); + log(`Loading ${pluginConfigEntry.name} from ${initialDir} (resolved to ${resolvedPath})`); + const result = host.require(resolvedPath, pluginConfigEntry.name); + if (!result.error) { + resolvedModule = result.module; + break; + } + const err = result.error.stack || result.error.message || JSON.stringify(result.error); + (errorLogs ?? (errorLogs = [])).push(`Failed to load module '${pluginConfigEntry.name}' from ${resolvedPath}: ${err}`); + } + return { pluginConfigEntry, resolvedModule, errorLogs }; + } + /** @internal */ + static async importServicePluginAsync(pluginConfigEntry, searchPaths, host, log) { + Debug.assertIsDefined(host.importPlugin); + let errorLogs; + let resolvedModule; + for (const initialDir of searchPaths) { + const resolvedPath = combinePaths(initialDir, "node_modules"); + log(`Dynamically importing ${pluginConfigEntry.name} from ${initialDir} (resolved to ${resolvedPath})`); + let result; + try { + result = await host.importPlugin(resolvedPath, pluginConfigEntry.name); + } catch (e) { + result = { module: void 0, error: e }; + } + if (!result.error) { + resolvedModule = result.module; + break; + } + const err = result.error.stack || result.error.message || JSON.stringify(result.error); + (errorLogs ?? (errorLogs = [])).push(`Failed to dynamically import module '${pluginConfigEntry.name}' from ${resolvedPath}: ${err}`); + } + return { pluginConfigEntry, resolvedModule, errorLogs }; + } + isKnownTypesPackageName(name) { + return this.projectService.typingsInstaller.isKnownTypesPackageName(name); + } + installPackage(options) { + return this.projectService.typingsInstaller.installPackage({ ...options, projectName: this.projectName, projectRootPath: this.toPath(this.currentDirectory) }); + } + /** @internal */ + getGlobalTypingsCacheLocation() { + return this.getTypeAcquisition().enable ? this.projectService.typingsInstaller.globalTypingsCacheLocation : void 0; + } + /** @internal */ + getSymlinkCache() { + if (!this.symlinks) { + this.symlinks = createSymlinkCache(this.getCurrentDirectory(), this.getCanonicalFileName); + } + if (this.program && !this.symlinks.hasProcessedResolutions()) { + this.symlinks.setSymlinksFromResolutions( + this.program.forEachResolvedModule, + this.program.forEachResolvedTypeReferenceDirective, + this.program.getAutomaticTypeDirectiveResolutions() + ); + } + return this.symlinks; + } + // Method of LanguageServiceHost + getCompilationSettings() { + return this.compilerOptions; + } + // Method to support public API + getCompilerOptions() { + return this.getCompilationSettings(); + } + getNewLine() { + return this.projectService.host.newLine; + } + getProjectVersion() { + return this.projectStateVersion.toString(); + } + getProjectReferences() { + return void 0; + } + getScriptFileNames() { + if (!this.rootFilesMap.size) { + return emptyArray; + } + let result; + this.rootFilesMap.forEach((value) => { + if (this.languageServiceEnabled || value.info && value.info.isScriptOpen()) { + (result || (result = [])).push(value.fileName); + } + }); + return addRange(result, this.typingFiles) || emptyArray; + } + getOrCreateScriptInfoAndAttachToProject(fileName) { + const scriptInfo = this.projectService.getOrCreateScriptInfoNotOpenedByClient( + fileName, + this.currentDirectory, + this.directoryStructureHost, + /*deferredDeleteOk*/ + false + ); + if (scriptInfo) { + const existingValue = this.rootFilesMap.get(scriptInfo.path); + if (existingValue && existingValue.info !== scriptInfo) { + existingValue.info = scriptInfo; + } + scriptInfo.attachToProject(this); + } + return scriptInfo; + } + getScriptKind(fileName) { + const info = this.projectService.getScriptInfoForPath(this.toPath(fileName)); + return info && info.scriptKind; + } + getScriptVersion(filename) { + const info = this.projectService.getOrCreateScriptInfoNotOpenedByClient( + filename, + this.currentDirectory, + this.directoryStructureHost, + /*deferredDeleteOk*/ + false + ); + return info && info.getLatestVersion(); + } + getScriptSnapshot(filename) { + const scriptInfo = this.getOrCreateScriptInfoAndAttachToProject(filename); + if (scriptInfo) { + return scriptInfo.getSnapshot(); + } + } + getCancellationToken() { + return this.cancellationToken; + } + getCurrentDirectory() { + return this.currentDirectory; + } + getDefaultLibFileName() { + const nodeModuleBinDir = getDirectoryPath(normalizePath(this.projectService.getExecutingFilePath())); + return combinePaths(nodeModuleBinDir, getDefaultLibFileName(this.compilerOptions)); + } + useCaseSensitiveFileNames() { + return this.projectService.host.useCaseSensitiveFileNames; + } + readDirectory(path, extensions, exclude, include, depth) { + return this.directoryStructureHost.readDirectory(path, extensions, exclude, include, depth); + } + readFile(fileName) { + return this.projectService.host.readFile(fileName); + } + writeFile(fileName, content) { + return this.projectService.host.writeFile(fileName, content); + } + fileExists(file) { + const path = this.toPath(file); + return !!this.projectService.getScriptInfoForPath(path) || !this.isWatchedMissingFile(path) && this.directoryStructureHost.fileExists(file); + } + /** @internal */ + resolveModuleNameLiterals(moduleLiterals, containingFile, redirectedReference, options, containingSourceFile, reusedNames) { + return this.resolutionCache.resolveModuleNameLiterals(moduleLiterals, containingFile, redirectedReference, options, containingSourceFile, reusedNames); + } + /** @internal */ + getModuleResolutionCache() { + return this.resolutionCache.getModuleResolutionCache(); + } + /** @internal */ + resolveTypeReferenceDirectiveReferences(typeDirectiveReferences, containingFile, redirectedReference, options, containingSourceFile, reusedNames) { + return this.resolutionCache.resolveTypeReferenceDirectiveReferences( + typeDirectiveReferences, + containingFile, + redirectedReference, + options, + containingSourceFile, + reusedNames + ); + } + /** @internal */ + resolveLibrary(libraryName, resolveFrom, options, libFileName) { + return this.resolutionCache.resolveLibrary(libraryName, resolveFrom, options, libFileName); + } + directoryExists(path) { + return this.directoryStructureHost.directoryExists(path); + } + getDirectories(path) { + return this.directoryStructureHost.getDirectories(path); + } + /** @internal */ + getCachedDirectoryStructureHost() { + return void 0; + } + /** @internal */ + toPath(fileName) { + return toPath(fileName, this.currentDirectory, this.projectService.toCanonicalFileName); + } + /** @internal */ + watchDirectoryOfFailedLookupLocation(directory, cb, flags) { + return this.projectService.watchFactory.watchDirectory( + directory, + cb, + flags, + this.projectService.getWatchOptions(this), + WatchType.FailedLookupLocations, + this + ); + } + /** @internal */ + watchAffectingFileLocation(file, cb) { + return this.projectService.watchFactory.watchFile( + file, + cb, + 2e3 /* High */, + this.projectService.getWatchOptions(this), + WatchType.AffectingFileLocation, + this + ); + } + /** @internal */ + clearInvalidateResolutionOfFailedLookupTimer() { + return this.projectService.throttledOperations.cancel(`${this.getProjectName()}FailedLookupInvalidation`); + } + /** @internal */ + scheduleInvalidateResolutionsOfFailedLookupLocations() { + this.projectService.throttledOperations.schedule( + `${this.getProjectName()}FailedLookupInvalidation`, + /*delay*/ + 1e3, + () => { + if (this.resolutionCache.invalidateResolutionsOfFailedLookupLocations()) { + this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); + } + } + ); + } + /** @internal */ + invalidateResolutionsOfFailedLookupLocations() { + if (this.clearInvalidateResolutionOfFailedLookupTimer() && this.resolutionCache.invalidateResolutionsOfFailedLookupLocations()) { + this.markAsDirty(); + this.projectService.delayEnsureProjectForOpenFiles(); + } + } + /** @internal */ + onInvalidatedResolution() { + this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); + } + /** @internal */ + watchTypeRootsDirectory(directory, cb, flags) { + return this.projectService.watchFactory.watchDirectory( + directory, + cb, + flags, + this.projectService.getWatchOptions(this), + WatchType.TypeRoots, + this + ); + } + /** @internal */ + hasChangedAutomaticTypeDirectiveNames() { + return this.resolutionCache.hasChangedAutomaticTypeDirectiveNames(); + } + /** @internal */ + onChangedAutomaticTypeDirectiveNames() { + this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); + } + /** @internal */ + fileIsOpen(filePath) { + return this.projectService.openFiles.has(filePath); + } + /** @internal */ + writeLog(s) { + this.projectService.logger.info(s); + } + log(s) { + this.writeLog(s); + } + error(s) { + this.projectService.logger.msg(s, "Err" /* Err */); + } + setInternalCompilerOptionsForEmittingJsFiles() { + if (this.projectKind === 0 /* Inferred */ || this.projectKind === 2 /* External */) { + this.compilerOptions.noEmitForJsFiles = true; + } + } + /** + * Get the errors that dont have any file name associated + */ + getGlobalProjectErrors() { + return filter(this.projectErrors, (diagnostic) => !diagnostic.file) || emptyArray2; + } + /** + * Get all the project errors + */ + getAllProjectErrors() { + return this.projectErrors || emptyArray2; + } + setProjectErrors(projectErrors) { + this.projectErrors = projectErrors; + } + getLanguageService(ensureSynchronized = true) { + if (ensureSynchronized) { + updateProjectIfDirty(this); + } + return this.languageService; + } + /** @internal */ + getSourceMapper() { + return this.getLanguageService().getSourceMapper(); + } + /** @internal */ + clearSourceMapperCache() { + this.languageService.clearSourceMapperCache(); + } + /** @internal */ + getDocumentPositionMapper(generatedFileName, sourceFileName) { + return this.projectService.getDocumentPositionMapper(this, generatedFileName, sourceFileName); + } + /** @internal */ + getSourceFileLike(fileName) { + return this.projectService.getSourceFileLike(fileName, this); + } + /** @internal */ + shouldEmitFile(scriptInfo) { + return scriptInfo && !scriptInfo.isDynamicOrHasMixedContent() && !this.program.isSourceOfProjectReferenceRedirect(scriptInfo.path); + } + getCompileOnSaveAffectedFileList(scriptInfo) { + if (!this.languageServiceEnabled) { + return []; + } + updateProjectIfDirty(this); + this.builderState = BuilderState.create( + this.program, + this.builderState, + /*disableUseFileVersionAsSignature*/ + true + ); + return mapDefined( + BuilderState.getFilesAffectedBy( + this.builderState, + this.program, + scriptInfo.path, + this.cancellationToken, + this.projectService.host + ), + (sourceFile) => this.shouldEmitFile(this.projectService.getScriptInfoForPath(sourceFile.path)) ? sourceFile.fileName : void 0 + ); + } + /** + * Returns true if emit was conducted + */ + emitFile(scriptInfo, writeFile2) { + if (!this.languageServiceEnabled || !this.shouldEmitFile(scriptInfo)) { + return { emitSkipped: true, diagnostics: emptyArray2 }; + } + const { emitSkipped, diagnostics, outputFiles } = this.getLanguageService().getEmitOutput(scriptInfo.fileName); + if (!emitSkipped) { + for (const outputFile of outputFiles) { + const outputFileAbsoluteFileName = getNormalizedAbsolutePath(outputFile.name, this.currentDirectory); + writeFile2(outputFileAbsoluteFileName, outputFile.text, outputFile.writeByteOrderMark); + } + if (this.builderState && getEmitDeclarations(this.compilerOptions)) { + const dtsFiles = outputFiles.filter((f) => isDeclarationFileName(f.name)); + if (dtsFiles.length === 1) { + const sourceFile = this.program.getSourceFile(scriptInfo.fileName); + const signature = this.projectService.host.createHash ? this.projectService.host.createHash(dtsFiles[0].text) : generateDjb2Hash(dtsFiles[0].text); + BuilderState.updateSignatureOfFile(this.builderState, signature, sourceFile.resolvedPath); + } + } + } + return { emitSkipped, diagnostics }; + } + enableLanguageService() { + if (this.languageServiceEnabled || this.projectService.serverMode === 2 /* Syntactic */) { + return; + } + this.languageServiceEnabled = true; + this.lastFileExceededProgramSize = void 0; + this.projectService.onUpdateLanguageServiceStateForProject( + this, + /*languageServiceEnabled*/ + true + ); + } + /** @internal */ + cleanupProgram() { + if (this.program) { + for (const f of this.program.getSourceFiles()) { + this.detachScriptInfoIfNotRoot(f.fileName); + } + this.program.forEachResolvedProjectReference((ref) => this.detachScriptInfoFromProject(ref.sourceFile.fileName)); + this.program = void 0; + } + } + disableLanguageService(lastFileExceededProgramSize) { + if (!this.languageServiceEnabled) { + return; + } + Debug.assert(this.projectService.serverMode !== 2 /* Syntactic */); + this.languageService.cleanupSemanticCache(); + this.languageServiceEnabled = false; + this.cleanupProgram(); + this.lastFileExceededProgramSize = lastFileExceededProgramSize; + this.builderState = void 0; + if (this.autoImportProviderHost) { + this.autoImportProviderHost.close(); + } + this.autoImportProviderHost = void 0; + this.resolutionCache.closeTypeRootsWatch(); + this.clearGeneratedFileWatch(); + this.projectService.verifyDocumentRegistry(); + this.projectService.onUpdateLanguageServiceStateForProject( + this, + /*languageServiceEnabled*/ + false + ); + } + getProjectName() { + return this.projectName; + } + removeLocalTypingsFromTypeAcquisition(newTypeAcquisition) { + if (!newTypeAcquisition.enable || !newTypeAcquisition.include) { + return newTypeAcquisition; + } + return { ...newTypeAcquisition, include: this.removeExistingTypings(newTypeAcquisition.include) }; + } + getExternalFiles(updateLevel) { + return toSorted(flatMap(this.plugins, (plugin) => { + if (typeof plugin.module.getExternalFiles !== "function") return; + try { + return plugin.module.getExternalFiles(this, updateLevel || 0 /* Update */); + } catch (e) { + this.projectService.logger.info(`A plugin threw an exception in getExternalFiles: ${e}`); + if (e.stack) { + this.projectService.logger.info(e.stack); + } + } + })); + } + getSourceFile(path) { + if (!this.program) { + return void 0; + } + return this.program.getSourceFileByPath(path); + } + /** @internal */ + getSourceFileOrConfigFile(path) { + const options = this.program.getCompilerOptions(); + return path === options.configFilePath ? options.configFile : this.getSourceFile(path); + } + close() { + var _a; + if (this.typingsCache) this.projectService.typingsInstaller.onProjectClosed(this); + this.typingsCache = void 0; + this.closeWatchingTypingLocations(); + this.cleanupProgram(); + forEach(this.externalFiles, (externalFile) => this.detachScriptInfoIfNotRoot(externalFile)); + this.rootFilesMap.forEach((root) => { + var _a2; + return (_a2 = root.info) == null ? void 0 : _a2.detachFromProject(this); + }); + this.projectService.pendingEnsureProjectForOpenFiles = true; + this.rootFilesMap = void 0; + this.externalFiles = void 0; + this.program = void 0; + this.builderState = void 0; + this.resolutionCache.clear(); + this.resolutionCache = void 0; + this.cachedUnresolvedImportsPerFile = void 0; + (_a = this.packageJsonWatches) == null ? void 0 : _a.forEach((watcher) => { + watcher.projects.delete(this); + watcher.close(); + }); + this.packageJsonWatches = void 0; + this.moduleSpecifierCache.clear(); + this.moduleSpecifierCache = void 0; + this.directoryStructureHost = void 0; + this.exportMapCache = void 0; + this.projectErrors = void 0; + this.plugins.length = 0; + if (this.missingFilesMap) { + clearMap(this.missingFilesMap, closeFileWatcher); + this.missingFilesMap = void 0; + } + this.clearGeneratedFileWatch(); + this.clearInvalidateResolutionOfFailedLookupTimer(); + if (this.autoImportProviderHost) { + this.autoImportProviderHost.close(); + } + this.autoImportProviderHost = void 0; + if (this.noDtsResolutionProject) { + this.noDtsResolutionProject.close(); + } + this.noDtsResolutionProject = void 0; + this.languageService.dispose(); + this.languageService = void 0; + } + detachScriptInfoIfNotRoot(uncheckedFilename) { + const info = this.projectService.getScriptInfo(uncheckedFilename); + if (info && !this.isRoot(info)) { + info.detachFromProject(this); + } + } + isClosed() { + return this.rootFilesMap === void 0; + } + hasRoots() { + var _a; + return !!((_a = this.rootFilesMap) == null ? void 0 : _a.size); + } + /** @internal */ + isOrphan() { + return false; + } + getRootFiles() { + return this.rootFilesMap && arrayFrom(mapDefinedIterator(this.rootFilesMap.values(), (value) => { + var _a; + return (_a = value.info) == null ? void 0 : _a.fileName; + })); + } + /** @internal */ + getRootFilesMap() { + return this.rootFilesMap; + } + getRootScriptInfos() { + return arrayFrom(mapDefinedIterator(this.rootFilesMap.values(), (value) => value.info)); + } + getScriptInfos() { + if (!this.languageServiceEnabled) { + return this.getRootScriptInfos(); + } + return map(this.program.getSourceFiles(), (sourceFile) => { + const scriptInfo = this.projectService.getScriptInfoForPath(sourceFile.resolvedPath); + Debug.assert(!!scriptInfo, "getScriptInfo", () => `scriptInfo for a file '${sourceFile.fileName}' Path: '${sourceFile.path}' / '${sourceFile.resolvedPath}' is missing.`); + return scriptInfo; + }); + } + getExcludedFiles() { + return emptyArray2; + } + getFileNames(excludeFilesFromExternalLibraries, excludeConfigFiles) { + if (!this.program) { + return []; + } + if (!this.languageServiceEnabled) { + let rootFiles = this.getRootFiles(); + if (this.compilerOptions) { + const defaultLibrary = getDefaultLibFilePath(this.compilerOptions); + if (defaultLibrary) { + (rootFiles || (rootFiles = [])).push(asNormalizedPath(defaultLibrary)); + } + } + return rootFiles; + } + const result = []; + for (const f of this.program.getSourceFiles()) { + if (excludeFilesFromExternalLibraries && this.program.isSourceFileFromExternalLibrary(f)) { + continue; + } + result.push(asNormalizedPath(f.fileName)); + } + if (!excludeConfigFiles) { + const configFile = this.program.getCompilerOptions().configFile; + if (configFile) { + result.push(asNormalizedPath(configFile.fileName)); + if (configFile.extendedSourceFiles) { + for (const f of configFile.extendedSourceFiles) { + result.push(asNormalizedPath(f)); + } + } + } + } + return result; + } + /** @internal */ + getFileNamesWithRedirectInfo(includeProjectReferenceRedirectInfo) { + return this.getFileNames().map((fileName) => ({ + fileName, + isSourceOfProjectReferenceRedirect: includeProjectReferenceRedirectInfo && this.isSourceOfProjectReferenceRedirect(fileName) + })); + } + hasConfigFile(configFilePath) { + if (this.program && this.languageServiceEnabled) { + const configFile = this.program.getCompilerOptions().configFile; + if (configFile) { + if (configFilePath === asNormalizedPath(configFile.fileName)) { + return true; + } + if (configFile.extendedSourceFiles) { + for (const f of configFile.extendedSourceFiles) { + if (configFilePath === asNormalizedPath(f)) { + return true; + } + } + } + } + } + return false; + } + containsScriptInfo(info) { + if (this.isRoot(info)) return true; + if (!this.program) return false; + const file = this.program.getSourceFileByPath(info.path); + return !!file && file.resolvedPath === info.path; + } + containsFile(filename, requireOpen) { + const info = this.projectService.getScriptInfoForNormalizedPath(filename); + if (info && (info.isScriptOpen() || !requireOpen)) { + return this.containsScriptInfo(info); + } + return false; + } + isRoot(info) { + var _a, _b; + return ((_b = (_a = this.rootFilesMap) == null ? void 0 : _a.get(info.path)) == null ? void 0 : _b.info) === info; + } + // add a root file to project + addRoot(info, fileName) { + Debug.assert(!this.isRoot(info)); + this.rootFilesMap.set(info.path, { fileName: fileName || info.fileName, info }); + info.attachToProject(this); + this.markAsDirty(); + } + // add a root file that doesnt exist on host + addMissingFileRoot(fileName) { + const path = this.projectService.toPath(fileName); + this.rootFilesMap.set(path, { fileName }); + this.markAsDirty(); + } + removeFile(info, fileExists, detachFromProject) { + if (this.isRoot(info)) { + this.removeRoot(info); + } + if (fileExists) { + this.resolutionCache.removeResolutionsOfFile(info.path); + } else { + this.resolutionCache.invalidateResolutionOfFile(info.path); + } + this.cachedUnresolvedImportsPerFile.delete(info.path); + if (detachFromProject) { + info.detachFromProject(this); + } + this.markAsDirty(); + } + registerFileUpdate(fileName) { + (this.updatedFileNames || (this.updatedFileNames = /* @__PURE__ */ new Set())).add(fileName); + } + /** @internal */ + markFileAsDirty(changedFile) { + this.markAsDirty(); + if (this.exportMapCache && !this.exportMapCache.isEmpty()) { + (this.changedFilesForExportMapCache || (this.changedFilesForExportMapCache = /* @__PURE__ */ new Set())).add(changedFile); + } + } + /** @internal */ + markAsDirty() { + if (!this.dirty) { + this.projectStateVersion++; + this.dirty = true; + } + } + /** @internal */ + markAutoImportProviderAsDirty() { + var _a; + if (!this.autoImportProviderHost) this.autoImportProviderHost = void 0; + (_a = this.autoImportProviderHost) == null ? void 0 : _a.markAsDirty(); + } + /** @internal */ + onAutoImportProviderSettingsChanged() { + this.markAutoImportProviderAsDirty(); + } + /** @internal */ + onPackageJsonChange() { + this.moduleSpecifierCache.clear(); + this.markAutoImportProviderAsDirty(); + } + /** @internal */ + onFileAddedOrRemoved(isSymlink) { + this.hasAddedorRemovedFiles = true; + if (isSymlink) { + this.hasAddedOrRemovedSymlinks = true; + } + } + /** @internal */ + onDiscoveredSymlink() { + this.hasAddedOrRemovedSymlinks = true; + } + /** @internal */ + onReleaseOldSourceFile(oldSourceFile, _oldOptions, hasSourceFileByPath, newSourceFileByResolvedPath) { + if (!newSourceFileByResolvedPath || oldSourceFile.resolvedPath === oldSourceFile.path && newSourceFileByResolvedPath.resolvedPath !== oldSourceFile.path) { + this.detachScriptInfoFromProject(oldSourceFile.fileName, hasSourceFileByPath); + } + } + /** @internal */ + updateFromProject() { + updateProjectIfDirty(this); + } + /** + * Updates set of files that contribute to this project + * @returns: true if set of files in the project stays the same and false - otherwise. + */ + updateGraph() { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "updateGraph", { name: this.projectName, kind: ProjectKind[this.projectKind] }); + this.resolutionCache.startRecordingFilesWithChangedResolutions(); + const hasNewProgram = this.updateGraphWorker(); + const hasAddedorRemovedFiles = this.hasAddedorRemovedFiles; + this.hasAddedorRemovedFiles = false; + this.hasAddedOrRemovedSymlinks = false; + const changedFiles = this.resolutionCache.finishRecordingFilesWithChangedResolutions() || emptyArray2; + for (const file of changedFiles) { + this.cachedUnresolvedImportsPerFile.delete(file); + } + if (this.languageServiceEnabled && this.projectService.serverMode === 0 /* Semantic */ && !this.isOrphan()) { + if (hasNewProgram || changedFiles.length) { + this.lastCachedUnresolvedImportsList = getUnresolvedImports(this.program, this.cachedUnresolvedImportsPerFile); + } + this.enqueueInstallTypingsForProject(hasAddedorRemovedFiles); + } else { + this.lastCachedUnresolvedImportsList = void 0; + } + const isFirstProgramLoad = this.projectProgramVersion === 0 && hasNewProgram; + if (hasNewProgram) { + this.projectProgramVersion++; + } + if (hasAddedorRemovedFiles) { + this.markAutoImportProviderAsDirty(); + } + if (isFirstProgramLoad) { + this.getPackageJsonAutoImportProvider(); + } + (_b = tracing) == null ? void 0 : _b.pop(); + return !hasNewProgram; + } + /** @internal */ + enqueueInstallTypingsForProject(forceRefresh) { + const typeAcquisition = this.getTypeAcquisition(); + if (!typeAcquisition || !typeAcquisition.enable || this.projectService.typingsInstaller === nullTypingsInstaller) { + return; + } + const entry = this.typingsCache; + if (forceRefresh || !entry || typeAcquisitionChanged(typeAcquisition, entry.typeAcquisition) || compilerOptionsChanged(this.getCompilationSettings(), entry.compilerOptions) || unresolvedImportsChanged(this.lastCachedUnresolvedImportsList, entry.unresolvedImports)) { + this.typingsCache = { + compilerOptions: this.getCompilationSettings(), + typeAcquisition, + unresolvedImports: this.lastCachedUnresolvedImportsList + }; + this.projectService.typingsInstaller.enqueueInstallTypingsRequest(this, typeAcquisition, this.lastCachedUnresolvedImportsList); + } + } + /** @internal */ + updateTypingFiles(compilerOptions, typeAcquisition, unresolvedImports, newTypings) { + this.typingsCache = { + compilerOptions, + typeAcquisition, + unresolvedImports + }; + const typingFiles = !typeAcquisition || !typeAcquisition.enable ? emptyArray2 : toSorted(newTypings); + if (enumerateInsertsAndDeletes( + typingFiles, + this.typingFiles, + getStringComparer(!this.useCaseSensitiveFileNames()), + /*inserted*/ + noop, + (removed) => this.detachScriptInfoFromProject(removed) + )) { + this.typingFiles = typingFiles; + this.resolutionCache.setFilesWithInvalidatedNonRelativeUnresolvedImports(this.cachedUnresolvedImportsPerFile); + this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); + } + } + closeWatchingTypingLocations() { + if (this.typingWatchers) clearMap(this.typingWatchers, closeFileWatcher); + this.typingWatchers = void 0; + } + onTypingInstallerWatchInvoke() { + this.typingWatchers.isInvoked = true; + this.projectService.updateTypingsForProject({ projectName: this.getProjectName(), kind: ActionInvalidate }); + } + /** @internal */ + watchTypingLocations(files) { + if (!files) { + this.typingWatchers.isInvoked = false; + return; + } + if (!files.length) { + this.closeWatchingTypingLocations(); + return; + } + const toRemove = new Map(this.typingWatchers); + if (!this.typingWatchers) this.typingWatchers = /* @__PURE__ */ new Map(); + this.typingWatchers.isInvoked = false; + const createProjectWatcher = (path, typingsWatcherType) => { + const canonicalPath = this.toPath(path); + toRemove.delete(canonicalPath); + if (!this.typingWatchers.has(canonicalPath)) { + const watchType = typingsWatcherType === "FileWatcher" /* FileWatcher */ ? WatchType.TypingInstallerLocationFile : WatchType.TypingInstallerLocationDirectory; + this.typingWatchers.set( + canonicalPath, + canWatchDirectoryOrFilePath(canonicalPath) ? typingsWatcherType === "FileWatcher" /* FileWatcher */ ? this.projectService.watchFactory.watchFile( + path, + () => !this.typingWatchers.isInvoked ? this.onTypingInstallerWatchInvoke() : this.writeLog(`TypingWatchers already invoked`), + 2e3 /* High */, + this.projectService.getWatchOptions(this), + watchType, + this + ) : this.projectService.watchFactory.watchDirectory( + path, + (f) => { + if (this.typingWatchers.isInvoked) return this.writeLog(`TypingWatchers already invoked`); + if (!fileExtensionIs(f, ".json" /* Json */)) return this.writeLog(`Ignoring files that are not *.json`); + if (comparePaths(f, combinePaths(this.projectService.typingsInstaller.globalTypingsCacheLocation, "package.json"), !this.useCaseSensitiveFileNames())) return this.writeLog(`Ignoring package.json change at global typings location`); + this.onTypingInstallerWatchInvoke(); + }, + 1 /* Recursive */, + this.projectService.getWatchOptions(this), + watchType, + this + ) : (this.writeLog(`Skipping watcher creation at ${path}:: ${getDetailWatchInfo(watchType, this)}`), noopFileWatcher) + ); + } + }; + for (const file of files) { + const basename = getBaseFileName(file); + if (basename === "package.json" || basename === "bower.json") { + createProjectWatcher(file, "FileWatcher" /* FileWatcher */); + continue; + } + if (containsPath(this.currentDirectory, file, this.currentDirectory, !this.useCaseSensitiveFileNames())) { + const subDirectory = file.indexOf(directorySeparator, this.currentDirectory.length + 1); + if (subDirectory !== -1) { + createProjectWatcher(file.substr(0, subDirectory), "DirectoryWatcher" /* DirectoryWatcher */); + } else { + createProjectWatcher(file, "DirectoryWatcher" /* DirectoryWatcher */); + } + continue; + } + if (containsPath(this.projectService.typingsInstaller.globalTypingsCacheLocation, file, this.currentDirectory, !this.useCaseSensitiveFileNames())) { + createProjectWatcher(this.projectService.typingsInstaller.globalTypingsCacheLocation, "DirectoryWatcher" /* DirectoryWatcher */); + continue; + } + createProjectWatcher(file, "DirectoryWatcher" /* DirectoryWatcher */); + } + toRemove.forEach((watch, path) => { + watch.close(); + this.typingWatchers.delete(path); + }); + } + /** @internal */ + getCurrentProgram() { + return this.program; + } + removeExistingTypings(include) { + if (!include.length) return include; + const existing = getAutomaticTypeDirectiveNames(this.getCompilerOptions(), this); + return filter(include, (i) => !existing.includes(i)); + } + updateGraphWorker() { + var _a, _b; + const oldProgram = this.languageService.getCurrentProgram(); + Debug.assert(oldProgram === this.program); + Debug.assert(!this.isClosed(), "Called update graph worker of closed project"); + this.writeLog(`Starting updateGraphWorker: Project: ${this.getProjectName()}`); + const start = timestamp(); + const { hasInvalidatedResolutions, hasInvalidatedLibResolutions } = this.resolutionCache.createHasInvalidatedResolutions(returnFalse, returnFalse); + this.hasInvalidatedResolutions = hasInvalidatedResolutions; + this.hasInvalidatedLibResolutions = hasInvalidatedLibResolutions; + this.resolutionCache.startCachingPerDirectoryResolution(); + this.dirty = false; + this.updateFromProjectInProgress = true; + this.program = this.languageService.getProgram(); + this.updateFromProjectInProgress = false; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "finishCachingPerDirectoryResolution"); + this.resolutionCache.finishCachingPerDirectoryResolution(this.program, oldProgram); + (_b = tracing) == null ? void 0 : _b.pop(); + Debug.assert(oldProgram === void 0 || this.program !== void 0); + let hasNewProgram = false; + if (this.program && (!oldProgram || this.program !== oldProgram && this.program.structureIsReused !== 2 /* Completely */)) { + hasNewProgram = true; + this.rootFilesMap.forEach((value, path) => { + var _a2; + const file = this.program.getSourceFileByPath(path); + const info = value.info; + if (!file || ((_a2 = value.info) == null ? void 0 : _a2.path) === file.resolvedPath) return; + value.info = this.projectService.getScriptInfo(file.fileName); + Debug.assert(value.info.isAttached(this)); + info == null ? void 0 : info.detachFromProject(this); + }); + updateMissingFilePathsWatch( + this.program, + this.missingFilesMap || (this.missingFilesMap = /* @__PURE__ */ new Map()), + // Watch the missing files + (missingFilePath, missingFileName) => this.addMissingFileWatcher(missingFilePath, missingFileName) + ); + if (this.generatedFilesMap) { + const outPath = this.compilerOptions.outFile; + if (isGeneratedFileWatcher(this.generatedFilesMap)) { + if (!outPath || !this.isValidGeneratedFileWatcher( + removeFileExtension(outPath) + ".d.ts" /* Dts */, + this.generatedFilesMap + )) { + this.clearGeneratedFileWatch(); + } + } else { + if (outPath) { + this.clearGeneratedFileWatch(); + } else { + this.generatedFilesMap.forEach((watcher, source) => { + const sourceFile = this.program.getSourceFileByPath(source); + if (!sourceFile || sourceFile.resolvedPath !== source || !this.isValidGeneratedFileWatcher( + getDeclarationEmitOutputFilePathWorker(sourceFile.fileName, this.compilerOptions, this.program), + watcher + )) { + closeFileWatcherOf(watcher); + this.generatedFilesMap.delete(source); + } + }); + } + } + } + if (this.languageServiceEnabled && this.projectService.serverMode === 0 /* Semantic */) { + this.resolutionCache.updateTypeRootsWatch(); + } + } + this.projectService.verifyProgram(this); + if (this.exportMapCache && !this.exportMapCache.isEmpty()) { + this.exportMapCache.releaseSymbols(); + if (this.hasAddedorRemovedFiles || oldProgram && !this.program.structureIsReused) { + this.exportMapCache.clear(); + } else if (this.changedFilesForExportMapCache && oldProgram && this.program) { + forEachKey(this.changedFilesForExportMapCache, (fileName) => { + const oldSourceFile = oldProgram.getSourceFileByPath(fileName); + const sourceFile = this.program.getSourceFileByPath(fileName); + if (!oldSourceFile || !sourceFile) { + this.exportMapCache.clear(); + return true; + } + return this.exportMapCache.onFileChanged(oldSourceFile, sourceFile, !!this.getTypeAcquisition().enable); + }); + } + } + if (this.changedFilesForExportMapCache) { + this.changedFilesForExportMapCache.clear(); + } + if (this.hasAddedOrRemovedSymlinks || this.program && !this.program.structureIsReused && this.getCompilerOptions().preserveSymlinks) { + this.symlinks = void 0; + this.moduleSpecifierCache.clear(); + } + const oldExternalFiles = this.externalFiles || emptyArray2; + this.externalFiles = this.getExternalFiles(); + enumerateInsertsAndDeletes( + this.externalFiles, + oldExternalFiles, + getStringComparer(!this.useCaseSensitiveFileNames()), + // Ensure a ScriptInfo is created for new external files. This is performed indirectly + // by the host for files in the program when the program is retrieved above but + // the program doesn't contain external files so this must be done explicitly. + (inserted) => { + const scriptInfo = this.projectService.getOrCreateScriptInfoNotOpenedByClient( + inserted, + this.currentDirectory, + this.directoryStructureHost, + /*deferredDeleteOk*/ + false + ); + scriptInfo == null ? void 0 : scriptInfo.attachToProject(this); + }, + (removed) => this.detachScriptInfoFromProject(removed) + ); + const elapsed = timestamp() - start; + this.sendPerformanceEvent("UpdateGraph", elapsed); + this.writeLog(`Finishing updateGraphWorker: Project: ${this.getProjectName()} projectStateVersion: ${this.projectStateVersion} projectProgramVersion: ${this.projectProgramVersion} structureChanged: ${hasNewProgram}${this.program ? ` structureIsReused:: ${StructureIsReused[this.program.structureIsReused]}` : ""} Elapsed: ${elapsed}ms`); + if (this.projectService.logger.isTestLogger) { + if (this.program !== oldProgram) { + this.print( + /*writeProjectFileNames*/ + true, + this.hasAddedorRemovedFiles, + /*writeFileVersionAndText*/ + true + ); + } else { + this.writeLog(`Same program as before`); + } + } else if (this.hasAddedorRemovedFiles) { + this.print( + /*writeProjectFileNames*/ + true, + /*writeFileExplaination*/ + true, + /*writeFileVersionAndText*/ + false + ); + } else if (this.program !== oldProgram) { + this.writeLog(`Different program with same set of files`); + } + this.projectService.verifyDocumentRegistry(); + return hasNewProgram; + } + /** @internal */ + sendPerformanceEvent(kind, durationMs) { + this.projectService.sendPerformanceEvent(kind, durationMs); + } + detachScriptInfoFromProject(uncheckedFileName, noRemoveResolution) { + const scriptInfoToDetach = this.projectService.getScriptInfo(uncheckedFileName); + if (scriptInfoToDetach) { + scriptInfoToDetach.detachFromProject(this); + if (!noRemoveResolution) { + this.resolutionCache.removeResolutionsOfFile(scriptInfoToDetach.path); + } + } + } + addMissingFileWatcher(missingFilePath, missingFileName) { + var _a; + if (isConfiguredProject(this)) { + const configFileExistenceInfo = this.projectService.configFileExistenceInfoCache.get(missingFilePath); + if ((_a = configFileExistenceInfo == null ? void 0 : configFileExistenceInfo.config) == null ? void 0 : _a.projects.has(this.canonicalConfigFilePath)) return noopFileWatcher; + } + const fileWatcher = this.projectService.watchFactory.watchFile( + getNormalizedAbsolutePath(missingFileName, this.currentDirectory), + (fileName, eventKind) => { + if (isConfiguredProject(this)) { + this.getCachedDirectoryStructureHost().addOrDeleteFile(fileName, missingFilePath, eventKind); + } + if (eventKind === 0 /* Created */ && this.missingFilesMap.has(missingFilePath)) { + this.missingFilesMap.delete(missingFilePath); + fileWatcher.close(); + this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); + } + }, + 500 /* Medium */, + this.projectService.getWatchOptions(this), + WatchType.MissingFile, + this + ); + return fileWatcher; + } + isWatchedMissingFile(path) { + return !!this.missingFilesMap && this.missingFilesMap.has(path); + } + /** @internal */ + addGeneratedFileWatch(generatedFile, sourceFile) { + if (this.compilerOptions.outFile) { + if (!this.generatedFilesMap) { + this.generatedFilesMap = this.createGeneratedFileWatcher(generatedFile); + } + } else { + const path = this.toPath(sourceFile); + if (this.generatedFilesMap) { + if (isGeneratedFileWatcher(this.generatedFilesMap)) { + Debug.fail(`${this.projectName} Expected to not have --out watcher for generated file with options: ${JSON.stringify(this.compilerOptions)}`); + return; + } + if (this.generatedFilesMap.has(path)) return; + } else { + this.generatedFilesMap = /* @__PURE__ */ new Map(); + } + this.generatedFilesMap.set(path, this.createGeneratedFileWatcher(generatedFile)); + } + } + createGeneratedFileWatcher(generatedFile) { + return { + generatedFilePath: this.toPath(generatedFile), + watcher: this.projectService.watchFactory.watchFile( + generatedFile, + () => { + this.clearSourceMapperCache(); + this.projectService.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(this); + }, + 2e3 /* High */, + this.projectService.getWatchOptions(this), + WatchType.MissingGeneratedFile, + this + ) + }; + } + isValidGeneratedFileWatcher(generateFile, watcher) { + return this.toPath(generateFile) === watcher.generatedFilePath; + } + clearGeneratedFileWatch() { + if (this.generatedFilesMap) { + if (isGeneratedFileWatcher(this.generatedFilesMap)) { + closeFileWatcherOf(this.generatedFilesMap); + } else { + clearMap(this.generatedFilesMap, closeFileWatcherOf); + } + this.generatedFilesMap = void 0; + } + } + getScriptInfoForNormalizedPath(fileName) { + const scriptInfo = this.projectService.getScriptInfoForPath(this.toPath(fileName)); + if (scriptInfo && !scriptInfo.isAttached(this)) { + return Errors.ThrowProjectDoesNotContainDocument(fileName, this); + } + return scriptInfo; + } + getScriptInfo(uncheckedFileName) { + return this.projectService.getScriptInfo(uncheckedFileName); + } + filesToString(writeProjectFileNames) { + return this.filesToStringWorker( + writeProjectFileNames, + /*writeFileExplaination*/ + true, + /*writeFileVersionAndText*/ + false + ); + } + filesToStringWorker(writeProjectFileNames, writeFileExplaination, writeFileVersionAndText) { + if (this.initialLoadPending) return " Files (0) InitialLoadPending\n"; + if (!this.program) return " Files (0) NoProgram\n"; + const sourceFiles = this.program.getSourceFiles(); + let strBuilder = ` Files (${sourceFiles.length}) +`; + if (writeProjectFileNames) { + for (const file of sourceFiles) { + strBuilder += ` ${file.fileName}${writeFileVersionAndText ? ` ${file.version} ${JSON.stringify(file.text)}` : ""} +`; + } + if (writeFileExplaination) { + strBuilder += "\n\n"; + explainFiles(this.program, (s) => strBuilder += ` ${s} +`); + } + } + return strBuilder; + } + /** @internal */ + print(writeProjectFileNames, writeFileExplaination, writeFileVersionAndText) { + var _a; + this.writeLog(`Project '${this.projectName}' (${ProjectKind[this.projectKind]})`); + this.writeLog(this.filesToStringWorker( + writeProjectFileNames && this.projectService.logger.hasLevel(3 /* verbose */), + writeFileExplaination && this.projectService.logger.hasLevel(3 /* verbose */), + writeFileVersionAndText && this.projectService.logger.hasLevel(3 /* verbose */) + )); + this.writeLog("-----------------------------------------------"); + if (this.autoImportProviderHost) { + this.autoImportProviderHost.print( + /*writeProjectFileNames*/ + false, + /*writeFileExplaination*/ + false, + /*writeFileVersionAndText*/ + false + ); + } + (_a = this.noDtsResolutionProject) == null ? void 0 : _a.print( + /*writeProjectFileNames*/ + false, + /*writeFileExplaination*/ + false, + /*writeFileVersionAndText*/ + false + ); + } + setCompilerOptions(compilerOptions) { + var _a; + if (compilerOptions) { + compilerOptions.allowNonTsExtensions = true; + const oldOptions = this.compilerOptions; + this.compilerOptions = compilerOptions; + this.setInternalCompilerOptionsForEmittingJsFiles(); + (_a = this.noDtsResolutionProject) == null ? void 0 : _a.setCompilerOptions(this.getCompilerOptionsForNoDtsResolutionProject()); + if (changesAffectModuleResolution(oldOptions, compilerOptions)) { + this.cachedUnresolvedImportsPerFile.clear(); + this.lastCachedUnresolvedImportsList = void 0; + this.resolutionCache.onChangesAffectModuleResolution(); + this.moduleSpecifierCache.clear(); + } + this.markAsDirty(); + } + } + /** @internal */ + setWatchOptions(watchOptions) { + this.watchOptions = watchOptions; + } + /** @internal */ + getWatchOptions() { + return this.watchOptions; + } + setTypeAcquisition(newTypeAcquisition) { + if (newTypeAcquisition) { + this.typeAcquisition = this.removeLocalTypingsFromTypeAcquisition(newTypeAcquisition); + } + } + getTypeAcquisition() { + return this.typeAcquisition || {}; + } + /** @internal */ + getChangesSinceVersion(lastKnownVersion, includeProjectReferenceRedirectInfo) { + var _a, _b; + const includeProjectReferenceRedirectInfoIfRequested = includeProjectReferenceRedirectInfo ? (files) => arrayFrom(files.entries(), ([fileName, isSourceOfProjectReferenceRedirect]) => ({ + fileName, + isSourceOfProjectReferenceRedirect + })) : (files) => arrayFrom(files.keys()); + if (!this.initialLoadPending) { + updateProjectIfDirty(this); + } + const info = { + projectName: this.getProjectName(), + version: this.projectProgramVersion, + isInferred: isInferredProject(this), + options: this.getCompilationSettings(), + languageServiceDisabled: !this.languageServiceEnabled, + lastFileExceededProgramSize: this.lastFileExceededProgramSize + }; + const updatedFileNames = this.updatedFileNames; + this.updatedFileNames = void 0; + if (this.lastReportedFileNames && lastKnownVersion === this.lastReportedVersion) { + if (this.projectProgramVersion === this.lastReportedVersion && !updatedFileNames) { + return { info, projectErrors: this.getGlobalProjectErrors() }; + } + const lastReportedFileNames = this.lastReportedFileNames; + const externalFiles = ((_a = this.externalFiles) == null ? void 0 : _a.map((f) => ({ + fileName: toNormalizedPath(f), + isSourceOfProjectReferenceRedirect: false + }))) || emptyArray2; + const currentFiles = arrayToMap( + this.getFileNamesWithRedirectInfo(!!includeProjectReferenceRedirectInfo).concat(externalFiles), + (info2) => info2.fileName, + (info2) => info2.isSourceOfProjectReferenceRedirect + ); + const added = /* @__PURE__ */ new Map(); + const removed = /* @__PURE__ */ new Map(); + const updated = updatedFileNames ? arrayFrom(updatedFileNames.keys()) : []; + const updatedRedirects = []; + forEachEntry(currentFiles, (isSourceOfProjectReferenceRedirect, fileName) => { + if (!lastReportedFileNames.has(fileName)) { + added.set(fileName, isSourceOfProjectReferenceRedirect); + } else if (includeProjectReferenceRedirectInfo && isSourceOfProjectReferenceRedirect !== lastReportedFileNames.get(fileName)) { + updatedRedirects.push({ + fileName, + isSourceOfProjectReferenceRedirect + }); + } + }); + forEachEntry(lastReportedFileNames, (isSourceOfProjectReferenceRedirect, fileName) => { + if (!currentFiles.has(fileName)) { + removed.set(fileName, isSourceOfProjectReferenceRedirect); + } + }); + this.lastReportedFileNames = currentFiles; + this.lastReportedVersion = this.projectProgramVersion; + return { + info, + changes: { + added: includeProjectReferenceRedirectInfoIfRequested(added), + removed: includeProjectReferenceRedirectInfoIfRequested(removed), + updated: includeProjectReferenceRedirectInfo ? updated.map((fileName) => ({ + fileName, + isSourceOfProjectReferenceRedirect: this.isSourceOfProjectReferenceRedirect(fileName) + })) : updated, + updatedRedirects: includeProjectReferenceRedirectInfo ? updatedRedirects : void 0 + }, + projectErrors: this.getGlobalProjectErrors() + }; + } else { + const projectFileNames = this.getFileNamesWithRedirectInfo(!!includeProjectReferenceRedirectInfo); + const externalFiles = ((_b = this.externalFiles) == null ? void 0 : _b.map((f) => ({ + fileName: toNormalizedPath(f), + isSourceOfProjectReferenceRedirect: false + }))) || emptyArray2; + const allFiles = projectFileNames.concat(externalFiles); + this.lastReportedFileNames = arrayToMap( + allFiles, + (info2) => info2.fileName, + (info2) => info2.isSourceOfProjectReferenceRedirect + ); + this.lastReportedVersion = this.projectProgramVersion; + return { + info, + files: includeProjectReferenceRedirectInfo ? allFiles : allFiles.map((f) => f.fileName), + projectErrors: this.getGlobalProjectErrors() + }; + } + } + // remove a root file from project + removeRoot(info) { + this.rootFilesMap.delete(info.path); + } + /** @internal */ + isSourceOfProjectReferenceRedirect(fileName) { + return !!this.program && this.program.isSourceOfProjectReferenceRedirect(fileName); + } + /** @internal */ + getGlobalPluginSearchPaths() { + return [ + ...this.projectService.pluginProbeLocations, + // ../../.. to walk from X/node_modules/typescript/lib/tsserver.js to X/node_modules/ + combinePaths(this.projectService.getExecutingFilePath(), "../../..") + ]; + } + enableGlobalPlugins(options) { + if (!this.projectService.globalPlugins.length) return; + const host = this.projectService.host; + if (!host.require && !host.importPlugin) { + this.projectService.logger.info("Plugins were requested but not running in environment that supports 'require'. Nothing will be loaded"); + return; + } + const searchPaths = this.getGlobalPluginSearchPaths(); + for (const globalPluginName of this.projectService.globalPlugins) { + if (!globalPluginName) continue; + if (options.plugins && options.plugins.some((p) => p.name === globalPluginName)) continue; + this.projectService.logger.info(`Loading global plugin ${globalPluginName}`); + this.enablePlugin({ name: globalPluginName, global: true }, searchPaths); + } + } + enablePlugin(pluginConfigEntry, searchPaths) { + this.projectService.requestEnablePlugin(this, pluginConfigEntry, searchPaths); + } + /** @internal */ + enableProxy(pluginModuleFactory, configEntry) { + try { + if (typeof pluginModuleFactory !== "function") { + this.projectService.logger.info(`Skipped loading plugin ${configEntry.name} because it did not expose a proper factory function`); + return; + } + const info = { + config: configEntry, + project: this, + languageService: this.languageService, + languageServiceHost: this, + serverHost: this.projectService.host, + session: this.projectService.session + }; + const pluginModule = pluginModuleFactory({ typescript: ts_exports2 }); + const newLS = pluginModule.create(info); + for (const k of Object.keys(this.languageService)) { + if (!(k in newLS)) { + this.projectService.logger.info(`Plugin activation warning: Missing proxied method ${k} in created LS. Patching.`); + newLS[k] = this.languageService[k]; + } + } + this.projectService.logger.info(`Plugin validation succeeded`); + this.languageService = newLS; + this.plugins.push({ name: configEntry.name, module: pluginModule }); + } catch (e) { + this.projectService.logger.info(`Plugin activation failed: ${e}`); + } + } + /** @internal */ + onPluginConfigurationChanged(pluginName, configuration) { + this.plugins.filter((plugin) => plugin.name === pluginName).forEach((plugin) => { + if (plugin.module.onConfigurationChanged) { + plugin.module.onConfigurationChanged(configuration); + } + }); + } + /** Starts a new check for diagnostics. Call this if some file has updated that would cause diagnostics to be changed. */ + refreshDiagnostics() { + this.projectService.sendProjectsUpdatedInBackgroundEvent(); + } + /** @internal */ + getPackageJsonsVisibleToFile(fileName, rootDir) { + if (this.projectService.serverMode !== 0 /* Semantic */) return emptyArray2; + return this.projectService.getPackageJsonsVisibleToFile(fileName, this, rootDir); + } + /** @internal */ + getNearestAncestorDirectoryWithPackageJson(fileName) { + return this.projectService.getNearestAncestorDirectoryWithPackageJson(fileName, this); + } + /** @internal */ + getPackageJsonsForAutoImport(rootDir) { + return this.getPackageJsonsVisibleToFile(combinePaths(this.currentDirectory, inferredTypesContainingFile), rootDir); + } + /** @internal */ + getPackageJsonCache() { + return this.projectService.packageJsonCache; + } + /** @internal */ + getCachedExportInfoMap() { + return this.exportMapCache || (this.exportMapCache = createCacheableExportInfoMap(this)); + } + /** @internal */ + clearCachedExportInfoMap() { + var _a; + (_a = this.exportMapCache) == null ? void 0 : _a.clear(); + } + /** @internal */ + getModuleSpecifierCache() { + return this.moduleSpecifierCache; + } + /** @internal */ + includePackageJsonAutoImports() { + if (this.projectService.includePackageJsonAutoImports() === 0 /* Off */ || !this.languageServiceEnabled || isInsideNodeModules(this.currentDirectory) || !this.isDefaultProjectForOpenFiles()) { + return 0 /* Off */; + } + return this.projectService.includePackageJsonAutoImports(); + } + /** @internal */ + getHostForAutoImportProvider() { + var _a, _b; + if (this.program) { + return { + fileExists: this.program.fileExists, + directoryExists: this.program.directoryExists, + realpath: this.program.realpath || ((_a = this.projectService.host.realpath) == null ? void 0 : _a.bind(this.projectService.host)), + getCurrentDirectory: this.getCurrentDirectory.bind(this), + readFile: this.projectService.host.readFile.bind(this.projectService.host), + getDirectories: this.projectService.host.getDirectories.bind(this.projectService.host), + trace: (_b = this.projectService.host.trace) == null ? void 0 : _b.bind(this.projectService.host), + useCaseSensitiveFileNames: this.program.useCaseSensitiveFileNames(), + readDirectory: this.projectService.host.readDirectory.bind(this.projectService.host) + }; + } + return this.projectService.host; + } + /** @internal */ + getPackageJsonAutoImportProvider() { + var _a, _b, _c; + if (this.autoImportProviderHost === false) { + return void 0; + } + if (this.projectService.serverMode !== 0 /* Semantic */) { + this.autoImportProviderHost = false; + return void 0; + } + if (this.autoImportProviderHost) { + updateProjectIfDirty(this.autoImportProviderHost); + if (this.autoImportProviderHost.isEmpty()) { + this.autoImportProviderHost.close(); + this.autoImportProviderHost = void 0; + return void 0; + } + return this.autoImportProviderHost.getCurrentProgram(); + } + const dependencySelection = this.includePackageJsonAutoImports(); + if (dependencySelection) { + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "getPackageJsonAutoImportProvider"); + const start = timestamp(); + this.autoImportProviderHost = AutoImportProviderProject.create( + dependencySelection, + this, + this.getHostForAutoImportProvider() + ) ?? false; + if (this.autoImportProviderHost) { + updateProjectIfDirty(this.autoImportProviderHost); + this.sendPerformanceEvent("CreatePackageJsonAutoImportProvider", timestamp() - start); + (_b = tracing) == null ? void 0 : _b.pop(); + return this.autoImportProviderHost.getCurrentProgram(); + } + (_c = tracing) == null ? void 0 : _c.pop(); + } + } + isDefaultProjectForOpenFiles() { + return !!forEachEntry( + this.projectService.openFiles, + (_projectRootPath, path) => this.projectService.tryGetDefaultProjectForFile(this.projectService.getScriptInfoForPath(path)) === this + ); + } + /** @internal */ + watchNodeModulesForPackageJsonChanges(directoryPath) { + return this.projectService.watchPackageJsonsInNodeModules(directoryPath, this); + } + /** @internal */ + getIncompleteCompletionsCache() { + return this.projectService.getIncompleteCompletionsCache(); + } + /** @internal */ + getNoDtsResolutionProject(rootFile) { + Debug.assert(this.projectService.serverMode === 0 /* Semantic */); + this.noDtsResolutionProject ?? (this.noDtsResolutionProject = new AuxiliaryProject(this)); + if (this.noDtsResolutionProject.rootFile !== rootFile) { + this.projectService.setFileNamesOfAutoImportProviderOrAuxillaryProject( + this.noDtsResolutionProject, + [rootFile] + ); + this.noDtsResolutionProject.rootFile = rootFile; + } + return this.noDtsResolutionProject; + } + /** @internal */ + runWithTemporaryFileUpdate(rootFile, updatedText, cb) { + var _a, _b, _c, _d; + const originalProgram = this.program; + const rootSourceFile = Debug.checkDefined((_a = this.program) == null ? void 0 : _a.getSourceFile(rootFile), "Expected file to be part of program"); + const originalText = Debug.checkDefined(rootSourceFile.getFullText()); + (_b = this.getScriptInfo(rootFile)) == null ? void 0 : _b.editContent(0, originalText.length, updatedText); + this.updateGraph(); + try { + cb(this.program, originalProgram, (_c = this.program) == null ? void 0 : _c.getSourceFile(rootFile)); + } finally { + (_d = this.getScriptInfo(rootFile)) == null ? void 0 : _d.editContent(0, updatedText.length, originalText); + } + } + /** @internal */ + getCompilerOptionsForNoDtsResolutionProject() { + return { + ...this.getCompilerOptions(), + noDtsResolution: true, + allowJs: true, + maxNodeModuleJsDepth: 3, + diagnostics: false, + skipLibCheck: true, + sourceMap: false, + types: emptyArray, + lib: emptyArray, + noLib: true + }; + } +}; +function getUnresolvedImports(program, cachedUnresolvedImportsPerFile) { + var _a, _b; + const sourceFiles = program.getSourceFiles(); + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "getUnresolvedImports", { count: sourceFiles.length }); + const ambientModules = program.getTypeChecker().getAmbientModules().map((mod) => stripQuotes(mod.getName())); + const result = sortAndDeduplicate(flatMap(sourceFiles, (sourceFile) => extractUnresolvedImportsFromSourceFile( + program, + sourceFile, + ambientModules, + cachedUnresolvedImportsPerFile + ))); + (_b = tracing) == null ? void 0 : _b.pop(); + return result; +} +function extractUnresolvedImportsFromSourceFile(program, file, ambientModules, cachedUnresolvedImportsPerFile) { + return getOrUpdate(cachedUnresolvedImportsPerFile, file.path, () => { + let unresolvedImports; + program.forEachResolvedModule(({ resolvedModule }, name) => { + if ((!resolvedModule || !resolutionExtensionIsTSOrJson(resolvedModule.extension)) && !isExternalModuleNameRelative(name) && !ambientModules.some((m) => m === name)) { + unresolvedImports = append(unresolvedImports, parsePackageName(name).packageName); + } + }, file); + return unresolvedImports || emptyArray2; + }); +} +var InferredProject2 = class extends Project2 { + /** @internal */ + constructor(projectService, compilerOptions, watchOptions, projectRootPath, currentDirectory, typeAcquisition) { + super( + projectService.newInferredProjectName(), + 0 /* Inferred */, + projectService, + /*hasExplicitListOfFiles*/ + false, + /*lastFileExceededProgramSize*/ + void 0, + compilerOptions, + /*compileOnSaveEnabled*/ + false, + watchOptions, + projectService.host, + currentDirectory + ); + this._isJsInferredProject = false; + this.typeAcquisition = typeAcquisition; + this.projectRootPath = projectRootPath && projectService.toCanonicalFileName(projectRootPath); + if (!projectRootPath && !projectService.useSingleInferredProject) { + this.canonicalCurrentDirectory = projectService.toCanonicalFileName(this.currentDirectory); + } + this.enableGlobalPlugins(this.getCompilerOptions()); + } + toggleJsInferredProject(isJsInferredProject) { + if (isJsInferredProject !== this._isJsInferredProject) { + this._isJsInferredProject = isJsInferredProject; + this.setCompilerOptions(); + } + } + setCompilerOptions(options) { + if (!options && !this.getCompilationSettings()) { + return; + } + const newOptions = cloneCompilerOptions(options || this.getCompilationSettings()); + if (this._isJsInferredProject && typeof newOptions.maxNodeModuleJsDepth !== "number") { + newOptions.maxNodeModuleJsDepth = 2; + } else if (!this._isJsInferredProject) { + newOptions.maxNodeModuleJsDepth = void 0; + } + newOptions.allowJs = true; + super.setCompilerOptions(newOptions); + } + addRoot(info) { + Debug.assert(info.isScriptOpen()); + this.projectService.startWatchingConfigFilesForInferredProjectRoot(info); + if (!this._isJsInferredProject && info.isJavaScript()) { + this.toggleJsInferredProject( + /*isJsInferredProject*/ + true + ); + } else if (this.isOrphan() && this._isJsInferredProject && !info.isJavaScript()) { + this.toggleJsInferredProject( + /*isJsInferredProject*/ + false + ); + } + super.addRoot(info); + } + removeRoot(info) { + this.projectService.stopWatchingConfigFilesForScriptInfo(info); + super.removeRoot(info); + if (!this.isOrphan() && this._isJsInferredProject && info.isJavaScript()) { + if (every(this.getRootScriptInfos(), (rootInfo) => !rootInfo.isJavaScript())) { + this.toggleJsInferredProject( + /*isJsInferredProject*/ + false + ); + } + } + } + /** @internal */ + isOrphan() { + return !this.hasRoots(); + } + isProjectWithSingleRoot() { + return !this.projectRootPath && !this.projectService.useSingleInferredProject || this.getRootScriptInfos().length === 1; + } + close() { + forEach(this.getRootScriptInfos(), (info) => this.projectService.stopWatchingConfigFilesForScriptInfo(info)); + super.close(); + } + getTypeAcquisition() { + return this.typeAcquisition || { + enable: allRootFilesAreJsOrDts(this), + include: emptyArray, + exclude: emptyArray + }; + } +}; +var AuxiliaryProject = class extends Project2 { + constructor(hostProject) { + super( + hostProject.projectService.newAuxiliaryProjectName(), + 4 /* Auxiliary */, + hostProject.projectService, + /*hasExplicitListOfFiles*/ + false, + /*lastFileExceededProgramSize*/ + void 0, + hostProject.getCompilerOptionsForNoDtsResolutionProject(), + /*compileOnSaveEnabled*/ + false, + /*watchOptions*/ + void 0, + hostProject.projectService.host, + hostProject.currentDirectory + ); + } + isOrphan() { + return true; + } + scheduleInvalidateResolutionsOfFailedLookupLocations() { + return; + } +}; +var _AutoImportProviderProject = class _AutoImportProviderProject extends Project2 { + /** @internal */ + constructor(hostProject, initialRootNames, compilerOptions) { + super( + hostProject.projectService.newAutoImportProviderProjectName(), + 3 /* AutoImportProvider */, + hostProject.projectService, + /*hasExplicitListOfFiles*/ + false, + /*lastFileExceededProgramSize*/ + void 0, + compilerOptions, + /*compileOnSaveEnabled*/ + false, + hostProject.getWatchOptions(), + hostProject.projectService.host, + hostProject.currentDirectory + ); + this.hostProject = hostProject; + this.rootFileNames = initialRootNames; + this.useSourceOfProjectReferenceRedirect = maybeBind(this.hostProject, this.hostProject.useSourceOfProjectReferenceRedirect); + this.getParsedCommandLine = maybeBind(this.hostProject, this.hostProject.getParsedCommandLine); + } + /** @internal */ + static getRootFileNames(dependencySelection, hostProject, host, compilerOptions) { + var _a, _b; + if (!dependencySelection) { + return emptyArray; + } + const program = hostProject.getCurrentProgram(); + if (!program) { + return emptyArray; + } + const start = timestamp(); + let dependencyNames; + let rootNames; + const rootFileName = combinePaths(hostProject.currentDirectory, inferredTypesContainingFile); + const packageJsons = hostProject.getPackageJsonsForAutoImport(combinePaths(hostProject.currentDirectory, rootFileName)); + for (const packageJson of packageJsons) { + (_a = packageJson.dependencies) == null ? void 0 : _a.forEach((_, dependenyName) => addDependency(dependenyName)); + (_b = packageJson.peerDependencies) == null ? void 0 : _b.forEach((_, dependencyName) => addDependency(dependencyName)); + } + let dependenciesAdded = 0; + if (dependencyNames) { + const symlinkCache = hostProject.getSymlinkCache(); + for (const name of arrayFrom(dependencyNames.keys())) { + if (dependencySelection === 2 /* Auto */ && dependenciesAdded >= this.maxDependencies) { + hostProject.log(`AutoImportProviderProject: attempted to add more than ${this.maxDependencies} dependencies. Aborting.`); + return emptyArray; + } + const packageJson = resolvePackageNameToPackageJson( + name, + hostProject.currentDirectory, + compilerOptions, + host, + program.getModuleResolutionCache() + ); + if (packageJson) { + const entrypoints = getRootNamesFromPackageJson(packageJson, program, symlinkCache); + if (entrypoints) { + dependenciesAdded += addRootNames(entrypoints); + continue; + } + } + const done = forEach([hostProject.currentDirectory, hostProject.getGlobalTypingsCacheLocation()], (directory) => { + if (directory) { + const typesPackageJson = resolvePackageNameToPackageJson( + `@types/${name}`, + directory, + compilerOptions, + host, + program.getModuleResolutionCache() + ); + if (typesPackageJson) { + const entrypoints = getRootNamesFromPackageJson(typesPackageJson, program, symlinkCache); + dependenciesAdded += addRootNames(entrypoints); + return true; + } + } + }); + if (done) continue; + if (packageJson && compilerOptions.allowJs && compilerOptions.maxNodeModuleJsDepth) { + const entrypoints = getRootNamesFromPackageJson( + packageJson, + program, + symlinkCache, + /*resolveJs*/ + true + ); + dependenciesAdded += addRootNames(entrypoints); + } + } + } + const references = program.getResolvedProjectReferences(); + let referencesAddded = 0; + if ((references == null ? void 0 : references.length) && hostProject.projectService.getHostPreferences().includeCompletionsForModuleExports) { + references.forEach((ref) => { + if (ref == null ? void 0 : ref.commandLine.options.outFile) { + referencesAddded += addRootNames(filterEntrypoints([ + changeExtension(ref.commandLine.options.outFile, ".d.ts") + ])); + } else if (ref) { + const getCommonSourceDirectory2 = memoize( + () => getCommonSourceDirectoryOfConfig( + ref.commandLine, + !hostProject.useCaseSensitiveFileNames() + ) + ); + referencesAddded += addRootNames(filterEntrypoints(mapDefined( + ref.commandLine.fileNames, + (fileName) => !isDeclarationFileName(fileName) && !fileExtensionIs(fileName, ".json" /* Json */) && !program.getSourceFile(fileName) ? getOutputDeclarationFileName( + fileName, + ref.commandLine, + !hostProject.useCaseSensitiveFileNames(), + getCommonSourceDirectory2 + ) : void 0 + ))); + } + }); + } + if (rootNames == null ? void 0 : rootNames.size) { + hostProject.log(`AutoImportProviderProject: found ${rootNames.size} root files in ${dependenciesAdded} dependencies ${referencesAddded} referenced projects in ${timestamp() - start} ms`); + } + return rootNames ? arrayFrom(rootNames.values()) : emptyArray; + function addRootNames(entrypoints) { + if (!(entrypoints == null ? void 0 : entrypoints.length)) return 0; + rootNames ?? (rootNames = /* @__PURE__ */ new Set()); + entrypoints.forEach((entry) => rootNames.add(entry)); + return 1; + } + function addDependency(dependency) { + if (!startsWith(dependency, "@types/")) { + (dependencyNames || (dependencyNames = /* @__PURE__ */ new Set())).add(dependency); + } + } + function getRootNamesFromPackageJson(packageJson, program2, symlinkCache, resolveJs) { + var _a2; + const entrypoints = getEntrypointsFromPackageJsonInfo( + packageJson, + compilerOptions, + host, + program2.getModuleResolutionCache(), + resolveJs + ); + if (entrypoints) { + const real = (_a2 = host.realpath) == null ? void 0 : _a2.call(host, packageJson.packageDirectory); + const realPath2 = real ? hostProject.toPath(real) : void 0; + const isSymlink = realPath2 && realPath2 !== hostProject.toPath(packageJson.packageDirectory); + if (isSymlink) { + symlinkCache.setSymlinkedDirectory(packageJson.packageDirectory, { + real: ensureTrailingDirectorySeparator(real), + realPath: ensureTrailingDirectorySeparator(realPath2) + }); + } + return filterEntrypoints(entrypoints, isSymlink ? (entrypoint) => entrypoint.replace(packageJson.packageDirectory, real) : void 0); + } + } + function filterEntrypoints(entrypoints, symlinkName) { + return mapDefined(entrypoints, (entrypoint) => { + const resolvedFileName = symlinkName ? symlinkName(entrypoint) : entrypoint; + if (!program.getSourceFile(resolvedFileName) && !(symlinkName && program.getSourceFile(entrypoint))) { + return resolvedFileName; + } + }); + } + } + /** @internal */ + static create(dependencySelection, hostProject, host) { + if (dependencySelection === 0 /* Off */) { + return void 0; + } + const compilerOptions = { + ...hostProject.getCompilerOptions(), + ...this.compilerOptionsOverrides + }; + const rootNames = this.getRootFileNames(dependencySelection, hostProject, host, compilerOptions); + if (!rootNames.length) { + return void 0; + } + return new _AutoImportProviderProject(hostProject, rootNames, compilerOptions); + } + /** @internal */ + isEmpty() { + return !some(this.rootFileNames); + } + /** @internal */ + isOrphan() { + return true; + } + updateGraph() { + let rootFileNames = this.rootFileNames; + if (!rootFileNames) { + rootFileNames = _AutoImportProviderProject.getRootFileNames( + this.hostProject.includePackageJsonAutoImports(), + this.hostProject, + this.hostProject.getHostForAutoImportProvider(), + this.getCompilationSettings() + ); + } + this.projectService.setFileNamesOfAutoImportProviderOrAuxillaryProject(this, rootFileNames); + this.rootFileNames = rootFileNames; + const oldProgram = this.getCurrentProgram(); + const hasSameSetOfFiles = super.updateGraph(); + if (oldProgram && oldProgram !== this.getCurrentProgram()) { + this.hostProject.clearCachedExportInfoMap(); + } + return hasSameSetOfFiles; + } + /** @internal */ + scheduleInvalidateResolutionsOfFailedLookupLocations() { + return; + } + hasRoots() { + var _a; + return !!((_a = this.rootFileNames) == null ? void 0 : _a.length); + } + /** @internal */ + markAsDirty() { + this.rootFileNames = void 0; + super.markAsDirty(); + } + getScriptFileNames() { + return this.rootFileNames || emptyArray; + } + getLanguageService() { + throw new Error("AutoImportProviderProject language service should never be used. To get the program, use `project.getCurrentProgram()`."); + } + /** @internal */ + onAutoImportProviderSettingsChanged() { + throw new Error("AutoImportProviderProject is an auto import provider; use `markAsDirty()` instead."); + } + /** @internal */ + onPackageJsonChange() { + throw new Error("package.json changes should be notified on an AutoImportProvider's host project"); + } + getHostForAutoImportProvider() { + throw new Error("AutoImportProviderProject cannot provide its own host; use `hostProject.getModuleResolutionHostForAutomImportProvider()` instead."); + } + getProjectReferences() { + return this.hostProject.getProjectReferences(); + } + /** @internal */ + includePackageJsonAutoImports() { + return 0 /* Off */; + } + /** @internal */ + getSymlinkCache() { + return this.hostProject.getSymlinkCache(); + } + /** @internal */ + getModuleResolutionCache() { + var _a; + return (_a = this.hostProject.getCurrentProgram()) == null ? void 0 : _a.getModuleResolutionCache(); + } +}; +_AutoImportProviderProject.maxDependencies = 10; +/** @internal */ +_AutoImportProviderProject.compilerOptionsOverrides = { + diagnostics: false, + skipLibCheck: true, + sourceMap: false, + types: emptyArray, + lib: emptyArray, + noLib: true +}; +var AutoImportProviderProject = _AutoImportProviderProject; +var ConfiguredProject2 = class extends Project2 { + /** @internal */ + constructor(configFileName, canonicalConfigFilePath, projectService, cachedDirectoryStructureHost, pendingUpdateReason) { + super( + configFileName, + 1 /* Configured */, + projectService, + /*hasExplicitListOfFiles*/ + false, + /*lastFileExceededProgramSize*/ + void 0, + /*compilerOptions*/ + {}, + /*compileOnSaveEnabled*/ + false, + /*watchOptions*/ + void 0, + cachedDirectoryStructureHost, + getDirectoryPath(configFileName) + ); + this.canonicalConfigFilePath = canonicalConfigFilePath; + /** @internal */ + this.openFileWatchTriggered = /* @__PURE__ */ new Map(); + /** @internal */ + this.initialLoadPending = true; + /** @internal */ + this.sendLoadingProjectFinish = false; + this.pendingUpdateLevel = 2 /* Full */; + this.pendingUpdateReason = pendingUpdateReason; + } + /** @internal */ + setCompilerHost(host) { + this.compilerHost = host; + } + /** @internal */ + getCompilerHost() { + return this.compilerHost; + } + /** @internal */ + useSourceOfProjectReferenceRedirect() { + return this.languageServiceEnabled; + } + /** @internal */ + getParsedCommandLine(fileName) { + const configFileName = toNormalizedPath(fileName); + const canonicalConfigFilePath = asNormalizedPath(this.projectService.toCanonicalFileName(configFileName)); + let configFileExistenceInfo = this.projectService.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!configFileExistenceInfo) { + this.projectService.configFileExistenceInfoCache.set(canonicalConfigFilePath, configFileExistenceInfo = { exists: this.projectService.host.fileExists(configFileName) }); + } + this.projectService.ensureParsedConfigUptoDate(configFileName, canonicalConfigFilePath, configFileExistenceInfo, this); + if (this.languageServiceEnabled && this.projectService.serverMode === 0 /* Semantic */) { + this.projectService.watchWildcards(configFileName, configFileExistenceInfo, this); + } + return configFileExistenceInfo.exists ? configFileExistenceInfo.config.parsedCommandLine : void 0; + } + /** @internal */ + onReleaseParsedCommandLine(fileName) { + this.releaseParsedConfig(asNormalizedPath(this.projectService.toCanonicalFileName(toNormalizedPath(fileName)))); + } + releaseParsedConfig(canonicalConfigFilePath) { + this.projectService.stopWatchingWildCards(canonicalConfigFilePath, this); + this.projectService.releaseParsedConfig(canonicalConfigFilePath, this); + } + /** + * If the project has reload from disk pending, it reloads (and then updates graph as part of that) instead of just updating the graph + * @returns: true if set of files in the project stays the same and false - otherwise. + */ + updateGraph() { + if (this.deferredClose) return false; + const isDirty = this.dirty; + this.initialLoadPending = false; + const updateLevel = this.pendingUpdateLevel; + this.pendingUpdateLevel = 0 /* Update */; + let result; + switch (updateLevel) { + case 1 /* RootNamesAndUpdate */: + this.openFileWatchTriggered.clear(); + result = this.projectService.reloadFileNamesOfConfiguredProject(this); + break; + case 2 /* Full */: + this.openFileWatchTriggered.clear(); + const reason = Debug.checkDefined(this.pendingUpdateReason); + this.projectService.reloadConfiguredProject(this, reason); + result = true; + break; + default: + result = super.updateGraph(); + } + this.compilerHost = void 0; + this.projectService.sendProjectLoadingFinishEvent(this); + this.projectService.sendProjectTelemetry(this); + if (updateLevel === 2 /* Full */ || // Already sent event through reload + result && // Not new program + (!isDirty || !this.triggerFileForConfigFileDiag || this.getCurrentProgram().structureIsReused === 2 /* Completely */)) { + this.triggerFileForConfigFileDiag = void 0; + } else if (!this.triggerFileForConfigFileDiag) { + this.projectService.sendConfigFileDiagEvent( + this, + /*triggerFile*/ + void 0, + /*force*/ + false + ); + } + return result; + } + /** @internal */ + getCachedDirectoryStructureHost() { + return this.directoryStructureHost; + } + getConfigFilePath() { + return asNormalizedPath(this.getProjectName()); + } + getProjectReferences() { + return this.projectReferences; + } + updateReferences(refs) { + this.projectReferences = refs; + this.potentialProjectReferences = void 0; + } + /** @internal */ + setPotentialProjectReference(canonicalConfigPath) { + Debug.assert(this.initialLoadPending); + (this.potentialProjectReferences || (this.potentialProjectReferences = /* @__PURE__ */ new Set())).add(canonicalConfigPath); + } + /** @internal */ + getRedirectFromSourceFile(fileName) { + const program = this.getCurrentProgram(); + return program && program.getRedirectFromSourceFile(fileName); + } + /** @internal */ + forEachResolvedProjectReference(cb) { + var _a; + return (_a = this.getCurrentProgram()) == null ? void 0 : _a.forEachResolvedProjectReference(cb); + } + /** @internal */ + enablePluginsWithOptions(options) { + var _a; + this.plugins.length = 0; + if (!((_a = options.plugins) == null ? void 0 : _a.length) && !this.projectService.globalPlugins.length) return; + const host = this.projectService.host; + if (!host.require && !host.importPlugin) { + this.projectService.logger.info("Plugins were requested but not running in environment that supports 'require'. Nothing will be loaded"); + return; + } + const searchPaths = this.getGlobalPluginSearchPaths(); + if (this.projectService.allowLocalPluginLoads) { + const local = getDirectoryPath(this.canonicalConfigFilePath); + this.projectService.logger.info(`Local plugin loading enabled; adding ${local} to search paths`); + searchPaths.unshift(local); + } + if (options.plugins) { + for (const pluginConfigEntry of options.plugins) { + this.enablePlugin(pluginConfigEntry, searchPaths); + } + } + return this.enableGlobalPlugins(options); + } + /** + * Get the errors that dont have any file name associated + */ + getGlobalProjectErrors() { + return filter(this.projectErrors, (diagnostic) => !diagnostic.file) || emptyArray2; + } + /** + * Get all the project errors + */ + getAllProjectErrors() { + return this.projectErrors || emptyArray2; + } + setProjectErrors(projectErrors) { + this.projectErrors = projectErrors; + } + close() { + this.projectService.configFileExistenceInfoCache.forEach((_configFileExistenceInfo, canonicalConfigFilePath) => this.releaseParsedConfig(canonicalConfigFilePath)); + this.projectErrors = void 0; + this.openFileWatchTriggered.clear(); + this.compilerHost = void 0; + super.close(); + } + /** @internal */ + markAsDirty() { + if (this.deferredClose) return; + super.markAsDirty(); + } + /** @internal */ + isOrphan() { + return !!this.deferredClose; + } + getEffectiveTypeRoots() { + return getEffectiveTypeRoots(this.getCompilationSettings(), this) || []; + } + /** @internal */ + updateErrorOnNoInputFiles(parsedCommandLine) { + this.parsedCommandLine = parsedCommandLine; + updateErrorForNoInputFiles( + parsedCommandLine.fileNames, + this.getConfigFilePath(), + this.getCompilerOptions().configFile.configFileSpecs, + this.projectErrors, + canJsonReportNoInputFiles(parsedCommandLine.raw) + ); + } +}; +var ExternalProject = class extends Project2 { + /** @internal */ + constructor(externalProjectName, projectService, compilerOptions, lastFileExceededProgramSize, compileOnSaveEnabled, projectFilePath, watchOptions) { + super( + externalProjectName, + 2 /* External */, + projectService, + /*hasExplicitListOfFiles*/ + true, + lastFileExceededProgramSize, + compilerOptions, + compileOnSaveEnabled, + watchOptions, + projectService.host, + getDirectoryPath(projectFilePath || normalizeSlashes(externalProjectName)) + ); + this.externalProjectName = externalProjectName; + this.compileOnSaveEnabled = compileOnSaveEnabled; + this.excludedFiles = []; + this.enableGlobalPlugins(this.getCompilerOptions()); + } + updateGraph() { + const result = super.updateGraph(); + this.projectService.sendProjectTelemetry(this); + return result; + } + getExcludedFiles() { + return this.excludedFiles; + } +}; +function isInferredProject(project) { + return project.projectKind === 0 /* Inferred */; +} +function isConfiguredProject(project) { + return project.projectKind === 1 /* Configured */; +} +function isExternalProject(project) { + return project.projectKind === 2 /* External */; +} +function isBackgroundProject(project) { + return project.projectKind === 3 /* AutoImportProvider */ || project.projectKind === 4 /* Auxiliary */; +} +function isProjectDeferredClose(project) { + return isConfiguredProject(project) && !!project.deferredClose; +} + +// src/server/editorServices.ts +var maxProgramSizeForNonTsFiles = 20 * 1024 * 1024; +var maxFileSize = 4 * 1024 * 1024; +var ProjectsUpdatedInBackgroundEvent = "projectsUpdatedInBackground"; +var ProjectLoadingStartEvent = "projectLoadingStart"; +var ProjectLoadingFinishEvent = "projectLoadingFinish"; +var LargeFileReferencedEvent = "largeFileReferenced"; +var ConfigFileDiagEvent = "configFileDiag"; +var ProjectLanguageServiceStateEvent = "projectLanguageServiceState"; +var ProjectInfoTelemetryEvent = "projectInfo"; +var OpenFileInfoTelemetryEvent = "openFileInfo"; +var CreateFileWatcherEvent = "createFileWatcher"; +var CreateDirectoryWatcherEvent = "createDirectoryWatcher"; +var CloseFileWatcherEvent = "closeFileWatcher"; +var ensureProjectForOpenFileSchedule = "*ensureProjectForOpenFiles*"; +function prepareConvertersForEnumLikeCompilerOptions(commandLineOptions) { + const map2 = /* @__PURE__ */ new Map(); + for (const option of commandLineOptions) { + if (typeof option.type === "object") { + const optionMap = option.type; + optionMap.forEach((value) => { + Debug.assert(typeof value === "number"); + }); + map2.set(option.name, optionMap); + } + } + return map2; +} +var compilerOptionConverters = prepareConvertersForEnumLikeCompilerOptions(optionDeclarations); +var watchOptionsConverters = prepareConvertersForEnumLikeCompilerOptions(optionsForWatch); +var indentStyle = new Map(Object.entries({ + none: 0 /* None */, + block: 1 /* Block */, + smart: 2 /* Smart */ +})); +var defaultTypeSafeList = { + "jquery": { + // jquery files can have names like "jquery-1.10.2.min.js" (or "jquery.intellisense.js") + match: /jquery(-[\d.]+)?(\.intellisense)?(\.min)?\.js$/i, + types: ["jquery"] + }, + "WinJS": { + // e.g. c:/temp/UWApp1/lib/winjs-4.0.1/js/base.js + match: /^(.*\/winjs-[.\d]+)\/js\/base\.js$/i, + // If the winjs/base.js file is found.. + exclude: [["^", 1, "/.*"]], + // ..then exclude all files under the winjs folder + types: ["winjs"] + // And fetch the @types package for WinJS + }, + "Kendo": { + // e.g. /Kendo3/wwwroot/lib/kendo/kendo.all.min.js + match: /^(.*\/kendo(-ui)?)\/kendo\.all(\.min)?\.js$/i, + exclude: [["^", 1, "/.*"]], + types: ["kendo-ui"] + }, + "Office Nuget": { + // e.g. /scripts/Office/1/excel-15.debug.js + match: /^(.*\/office\/1)\/excel-\d+\.debug\.js$/i, + // Office NuGet package is installed under a "1/office" folder + exclude: [["^", 1, "/.*"]], + // Exclude that whole folder if the file indicated above is found in it + types: ["office"] + // @types package to fetch instead + }, + "References": { + match: /^(.*\/_references\.js)$/i, + exclude: [["^", 1, "$"]] + } +}; +function convertFormatOptions(protocolOptions) { + if (isString(protocolOptions.indentStyle)) { + protocolOptions.indentStyle = indentStyle.get(protocolOptions.indentStyle.toLowerCase()); + Debug.assert(protocolOptions.indentStyle !== void 0); + } + return protocolOptions; +} +function convertCompilerOptions(protocolOptions) { + compilerOptionConverters.forEach((mappedValues, id) => { + const propertyValue = protocolOptions[id]; + if (isString(propertyValue)) { + protocolOptions[id] = mappedValues.get(propertyValue.toLowerCase()); + } + }); + return protocolOptions; +} +function convertWatchOptions(protocolOptions, currentDirectory) { + let watchOptions; + let errors; + optionsForWatch.forEach((option) => { + const propertyValue = protocolOptions[option.name]; + if (propertyValue === void 0) return; + const mappedValues = watchOptionsConverters.get(option.name); + (watchOptions || (watchOptions = {}))[option.name] = mappedValues ? isString(propertyValue) ? mappedValues.get(propertyValue.toLowerCase()) : propertyValue : convertJsonOption(option, propertyValue, currentDirectory || "", errors || (errors = [])); + }); + return watchOptions && { watchOptions, errors }; +} +function convertTypeAcquisition(protocolOptions) { + let result; + typeAcquisitionDeclarations.forEach((option) => { + const propertyValue = protocolOptions[option.name]; + if (propertyValue === void 0) return; + (result || (result = {}))[option.name] = propertyValue; + }); + return result; +} +function tryConvertScriptKindName(scriptKindName) { + return isString(scriptKindName) ? convertScriptKindName(scriptKindName) : scriptKindName; +} +function convertScriptKindName(scriptKindName) { + switch (scriptKindName) { + case "JS": + return 1 /* JS */; + case "JSX": + return 2 /* JSX */; + case "TS": + return 3 /* TS */; + case "TSX": + return 4 /* TSX */; + default: + return 0 /* Unknown */; + } +} +function convertUserPreferences(preferences) { + const { lazyConfiguredProjectsFromExternalProject: _, ...userPreferences } = preferences; + return userPreferences; +} +var fileNamePropertyReader = { + getFileName: (x) => x, + getScriptKind: (fileName, extraFileExtensions) => { + let result; + if (extraFileExtensions) { + const fileExtension = getAnyExtensionFromPath(fileName); + if (fileExtension) { + some(extraFileExtensions, (info) => { + if (info.extension === fileExtension) { + result = info.scriptKind; + return true; + } + return false; + }); + } + } + return result; + }, + hasMixedContent: (fileName, extraFileExtensions) => some(extraFileExtensions, (ext) => ext.isMixedContent && fileExtensionIs(fileName, ext.extension)) +}; +var externalFilePropertyReader = { + getFileName: (x) => x.fileName, + getScriptKind: (x) => tryConvertScriptKindName(x.scriptKind), + // TODO: GH#18217 + hasMixedContent: (x) => !!x.hasMixedContent +}; +function findProjectByName(projectName, projects) { + for (const proj of projects) { + if (proj.getProjectName() === projectName) { + return proj; + } + } +} +var nullTypingsInstaller = { + isKnownTypesPackageName: returnFalse, + // Should never be called because we never provide a types registry. + installPackage: notImplemented, + enqueueInstallTypingsRequest: noop, + attach: noop, + onProjectClosed: noop, + globalTypingsCacheLocation: void 0 + // TODO: GH#18217 +}; +var noopConfigFileWatcher = { close: noop }; +function getConfigFileNameFromCache(info, cache) { + if (!cache) return void 0; + const configFileForOpenFile = cache.get(info.path); + if (configFileForOpenFile === void 0) return void 0; + if (!isAncestorConfigFileInfo(info)) { + return isString(configFileForOpenFile) || !configFileForOpenFile ? configFileForOpenFile : ( + // direct result + configFileForOpenFile.get( + /*key*/ + false + ) + ); + } else { + return configFileForOpenFile && !isString(configFileForOpenFile) ? ( + // Map with fileName as key + configFileForOpenFile.get(info.fileName) + ) : void 0; + } +} +function isOpenScriptInfo(infoOrFileNameOrConfig) { + return !!infoOrFileNameOrConfig.containingProjects; +} +function isAncestorConfigFileInfo(infoOrFileNameOrConfig) { + return !!infoOrFileNameOrConfig.configFileInfo; +} +var ConfiguredProjectLoadKind = /* @__PURE__ */ ((ConfiguredProjectLoadKind2) => { + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["FindOptimized"] = 0] = "FindOptimized"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["Find"] = 1] = "Find"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["CreateReplayOptimized"] = 2] = "CreateReplayOptimized"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["CreateReplay"] = 3] = "CreateReplay"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["CreateOptimized"] = 4] = "CreateOptimized"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["Create"] = 5] = "Create"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["ReloadOptimized"] = 6] = "ReloadOptimized"; + ConfiguredProjectLoadKind2[ConfiguredProjectLoadKind2["Reload"] = 7] = "Reload"; + return ConfiguredProjectLoadKind2; +})(ConfiguredProjectLoadKind || {}); +function toConfiguredProjectLoadOptimized(kind) { + return kind - 1; +} +function forEachAncestorProjectLoad(info, project, cb, kind, reason, allowDeferredClosed, reloadedProjects, searchOnlyPotentialSolution, delayReloadedConfiguredProjects) { + var _a; + while (true) { + if (project.parsedCommandLine && (searchOnlyPotentialSolution && !project.parsedCommandLine.options.composite || // Currently disableSolutionSearching is shared for finding solution/project when + // - loading solution for find all references + // - trying to find default project + project.parsedCommandLine.options.disableSolutionSearching)) return; + const configFileName = project.projectService.getConfigFileNameForFile( + { + fileName: project.getConfigFilePath(), + path: info.path, + configFileInfo: true, + isForDefaultProject: !searchOnlyPotentialSolution + }, + kind <= 3 /* CreateReplay */ + ); + if (!configFileName) return; + const ancestor = project.projectService.findCreateOrReloadConfiguredProject( + configFileName, + kind, + reason, + allowDeferredClosed, + !searchOnlyPotentialSolution ? info.fileName : void 0, + // Config Diag event for project if its for default project + reloadedProjects, + searchOnlyPotentialSolution, + // Delay load if we are searching for solution + delayReloadedConfiguredProjects + ); + if (!ancestor) return; + if (!ancestor.project.parsedCommandLine && ((_a = project.parsedCommandLine) == null ? void 0 : _a.options.composite)) { + ancestor.project.setPotentialProjectReference(project.canonicalConfigFilePath); + } + const result = cb(ancestor); + if (result) return result; + project = ancestor.project; + } +} +function forEachResolvedProjectReferenceProjectLoad(project, parentConfig, cb, kind, reason, allowDeferredClosed, reloadedProjects, seenResolvedRefs) { + const loadKind = parentConfig.options.disableReferencedProjectLoad ? 0 /* FindOptimized */ : kind; + let children; + return forEach( + parentConfig.projectReferences, + (ref) => { + var _a; + const childConfigName = toNormalizedPath(resolveProjectReferencePath(ref)); + const childCanonicalConfigPath = asNormalizedPath(project.projectService.toCanonicalFileName(childConfigName)); + const seenValue = seenResolvedRefs == null ? void 0 : seenResolvedRefs.get(childCanonicalConfigPath); + if (seenValue !== void 0 && seenValue >= loadKind) return void 0; + const configFileExistenceInfo = project.projectService.configFileExistenceInfoCache.get(childCanonicalConfigPath); + let childConfig = loadKind === 0 /* FindOptimized */ ? (configFileExistenceInfo == null ? void 0 : configFileExistenceInfo.exists) || ((_a = project.resolvedChildConfigs) == null ? void 0 : _a.has(childCanonicalConfigPath)) ? configFileExistenceInfo.config.parsedCommandLine : void 0 : project.getParsedCommandLine(childConfigName); + if (childConfig && loadKind !== kind && loadKind > 2 /* CreateReplayOptimized */) { + childConfig = project.getParsedCommandLine(childConfigName); + } + if (!childConfig) return void 0; + const childProject = project.projectService.findConfiguredProjectByProjectName(childConfigName, allowDeferredClosed); + if (loadKind === 2 /* CreateReplayOptimized */ && !configFileExistenceInfo && !childProject) return void 0; + switch (loadKind) { + case 6 /* ReloadOptimized */: + if (childProject) childProject.projectService.reloadConfiguredProjectOptimized(childProject, reason, reloadedProjects); + // falls through + case 4 /* CreateOptimized */: + (project.resolvedChildConfigs ?? (project.resolvedChildConfigs = /* @__PURE__ */ new Set())).add(childCanonicalConfigPath); + // falls through + case 2 /* CreateReplayOptimized */: + case 0 /* FindOptimized */: + if (childProject || loadKind !== 0 /* FindOptimized */) { + const result = cb( + configFileExistenceInfo ?? project.projectService.configFileExistenceInfoCache.get(childCanonicalConfigPath), + childProject, + childConfigName, + reason, + project, + childCanonicalConfigPath + ); + if (result) return result; + } + break; + default: + Debug.assertNever(loadKind); + } + (seenResolvedRefs ?? (seenResolvedRefs = /* @__PURE__ */ new Map())).set(childCanonicalConfigPath, loadKind); + (children ?? (children = [])).push(childConfig); + } + ) || forEach( + children, + (childConfig) => childConfig.projectReferences && forEachResolvedProjectReferenceProjectLoad( + project, + childConfig, + cb, + loadKind, + reason, + allowDeferredClosed, + reloadedProjects, + seenResolvedRefs + ) + ); +} +function updateProjectFoundUsingFind(project, kind, triggerFile, reason, reloadedProjects) { + let sentConfigFileDiag = false; + let configFileExistenceInfo; + switch (kind) { + case 2 /* CreateReplayOptimized */: + case 3 /* CreateReplay */: + if (useConfigFileExistenceInfoForOptimizedLoading(project)) { + configFileExistenceInfo = project.projectService.configFileExistenceInfoCache.get(project.canonicalConfigFilePath); + } + break; + case 4 /* CreateOptimized */: + configFileExistenceInfo = configFileExistenceInfoForOptimizedLoading(project); + if (configFileExistenceInfo) break; + // falls through + case 5 /* Create */: + sentConfigFileDiag = updateConfiguredProject(project, triggerFile); + break; + case 6 /* ReloadOptimized */: + project.projectService.reloadConfiguredProjectOptimized(project, reason, reloadedProjects); + configFileExistenceInfo = configFileExistenceInfoForOptimizedLoading(project); + if (configFileExistenceInfo) break; + // falls through + case 7 /* Reload */: + sentConfigFileDiag = project.projectService.reloadConfiguredProjectClearingSemanticCache( + project, + reason, + reloadedProjects + ); + break; + case 0 /* FindOptimized */: + case 1 /* Find */: + break; + default: + Debug.assertNever(kind); + } + return { project, sentConfigFileDiag, configFileExistenceInfo, reason }; +} +function forEachPotentialProjectReference(project, cb) { + return project.initialLoadPending ? (project.potentialProjectReferences && forEachKey(project.potentialProjectReferences, cb)) ?? (project.resolvedChildConfigs && forEachKey(project.resolvedChildConfigs, cb)) : void 0; +} +function forEachAnyProjectReferenceKind(project, cb, cbProjectRef, cbPotentialProjectRef) { + return project.getCurrentProgram() ? project.forEachResolvedProjectReference(cb) : project.initialLoadPending ? forEachPotentialProjectReference(project, cbPotentialProjectRef) : forEach(project.getProjectReferences(), cbProjectRef); +} +function callbackRefProject(project, cb, refPath) { + const refProject = refPath && project.projectService.configuredProjects.get(refPath); + return refProject && cb(refProject); +} +function forEachReferencedProject(project, cb) { + return forEachAnyProjectReferenceKind( + project, + (resolvedRef) => callbackRefProject(project, cb, resolvedRef.sourceFile.path), + (projectRef) => callbackRefProject(project, cb, project.toPath(resolveProjectReferencePath(projectRef))), + (potentialProjectRef) => callbackRefProject(project, cb, potentialProjectRef) + ); +} +function getDetailWatchInfo(watchType, project) { + return `${isString(project) ? `Config: ${project} ` : project ? `Project: ${project.getProjectName()} ` : ""}WatchType: ${watchType}`; +} +function isScriptInfoWatchedFromNodeModules(info) { + return !info.isScriptOpen() && info.mTime !== void 0; +} +function updateProjectIfDirty(project) { + project.invalidateResolutionsOfFailedLookupLocations(); + return project.dirty && !project.updateGraph(); +} +function updateWithTriggerFile(project, triggerFile, isReload) { + if (!isReload) { + project.invalidateResolutionsOfFailedLookupLocations(); + if (!project.dirty) return false; + } + project.triggerFileForConfigFileDiag = triggerFile; + const updateLevel = project.pendingUpdateLevel; + project.updateGraph(); + if (!project.triggerFileForConfigFileDiag && !isReload) return updateLevel === 2 /* Full */; + const sent = project.projectService.sendConfigFileDiagEvent(project, triggerFile, isReload); + project.triggerFileForConfigFileDiag = void 0; + return sent; +} +function updateConfiguredProject(project, triggerFile) { + if (triggerFile) { + if (updateWithTriggerFile( + project, + triggerFile, + /*isReload*/ + false + )) return true; + } else { + updateProjectIfDirty(project); + } + return false; +} +function configFileExistenceInfoForOptimizedLoading(project) { + const configFileName = toNormalizedPath(project.getConfigFilePath()); + const configFileExistenceInfo = project.projectService.ensureParsedConfigUptoDate( + configFileName, + project.canonicalConfigFilePath, + project.projectService.configFileExistenceInfoCache.get(project.canonicalConfigFilePath), + project + ); + const parsedCommandLine = configFileExistenceInfo.config.parsedCommandLine; + project.parsedCommandLine = parsedCommandLine; + project.resolvedChildConfigs = void 0; + project.updateReferences(parsedCommandLine.projectReferences); + if (useConfigFileExistenceInfoForOptimizedLoading(project)) return configFileExistenceInfo; +} +function useConfigFileExistenceInfoForOptimizedLoading(project) { + return !!project.parsedCommandLine && (!!project.parsedCommandLine.options.composite || // If solution, no need to load it to determine if file belongs to it + !!isSolutionConfig(project.parsedCommandLine)); +} +function configFileExistenceInfoForOptimizedReplay(project) { + return useConfigFileExistenceInfoForOptimizedLoading(project) ? project.projectService.configFileExistenceInfoCache.get(project.canonicalConfigFilePath) : void 0; +} +function fileOpenReason(info) { + return `Creating possible configured project for ${info.fileName} to open`; +} +function reloadReason(reason) { + return `User requested reload projects: ${reason}`; +} +function setProjectOptionsUsed(project) { + if (isConfiguredProject(project)) { + project.projectOptions = true; + } +} +function createProjectNameFactoryWithCounter(nameFactory) { + let nextId = 1; + return () => nameFactory(nextId++); +} +function getHostWatcherMap() { + return { idToCallbacks: /* @__PURE__ */ new Map(), pathToId: /* @__PURE__ */ new Map() }; +} +function getCanUseWatchEvents(service, canUseWatchEvents) { + return !!canUseWatchEvents && !!service.eventHandler && !!service.session; +} +function createWatchFactoryHostUsingWatchEvents(service, canUseWatchEvents) { + if (!getCanUseWatchEvents(service, canUseWatchEvents)) return void 0; + const watchedFiles = getHostWatcherMap(); + const watchedDirectories = getHostWatcherMap(); + const watchedDirectoriesRecursive = getHostWatcherMap(); + let ids = 1; + service.session.addProtocolHandler("watchChange" /* WatchChange */, (req) => { + onWatchChange(req.arguments); + return { responseRequired: false }; + }); + return { + watchFile: watchFile2, + watchDirectory, + getCurrentDirectory: () => service.host.getCurrentDirectory(), + useCaseSensitiveFileNames: service.host.useCaseSensitiveFileNames + }; + function watchFile2(path, callback) { + return getOrCreateFileWatcher( + watchedFiles, + path, + callback, + (id) => ({ eventName: CreateFileWatcherEvent, data: { id, path } }) + ); + } + function watchDirectory(path, callback, recursive) { + return getOrCreateFileWatcher( + recursive ? watchedDirectoriesRecursive : watchedDirectories, + path, + callback, + (id) => ({ + eventName: CreateDirectoryWatcherEvent, + data: { + id, + path, + recursive: !!recursive, + // Special case node_modules as we watch it for changes to closed script infos as well + ignoreUpdate: !path.endsWith("/node_modules") ? true : void 0 + } + }) + ); + } + function getOrCreateFileWatcher({ pathToId, idToCallbacks }, path, callback, event) { + const key = service.toPath(path); + let id = pathToId.get(key); + if (!id) pathToId.set(key, id = ids++); + let callbacks = idToCallbacks.get(id); + if (!callbacks) { + idToCallbacks.set(id, callbacks = /* @__PURE__ */ new Set()); + service.eventHandler(event(id)); + } + callbacks.add(callback); + return { + close() { + const callbacks2 = idToCallbacks.get(id); + if (!(callbacks2 == null ? void 0 : callbacks2.delete(callback))) return; + if (callbacks2.size) return; + idToCallbacks.delete(id); + pathToId.delete(key); + service.eventHandler({ eventName: CloseFileWatcherEvent, data: { id } }); + } + }; + } + function onWatchChange(args) { + if (isArray(args)) args.forEach(onWatchChangeRequestArgs); + else onWatchChangeRequestArgs(args); + } + function onWatchChangeRequestArgs({ id, created, deleted, updated }) { + onWatchEventType(id, created, 0 /* Created */); + onWatchEventType(id, deleted, 2 /* Deleted */); + onWatchEventType(id, updated, 1 /* Changed */); + } + function onWatchEventType(id, paths, eventKind) { + if (!(paths == null ? void 0 : paths.length)) return; + forEachCallback(watchedFiles, id, paths, (callback, eventPath) => callback(eventPath, eventKind)); + forEachCallback(watchedDirectories, id, paths, (callback, eventPath) => callback(eventPath)); + forEachCallback(watchedDirectoriesRecursive, id, paths, (callback, eventPath) => callback(eventPath)); + } + function forEachCallback(hostWatcherMap, id, eventPaths, cb) { + var _a; + (_a = hostWatcherMap.idToCallbacks.get(id)) == null ? void 0 : _a.forEach((callback) => { + eventPaths.forEach((eventPath) => cb(callback, normalizeSlashes(eventPath))); + }); + } +} +var _ProjectService = class _ProjectService { + constructor(opts) { + /** + * Container of all known scripts + * + * @internal + */ + this.filenameToScriptInfo = /* @__PURE__ */ new Map(); + this.nodeModulesWatchers = /* @__PURE__ */ new Map(); + /** + * Contains all the deleted script info's version information so that + * it does not reset when creating script info again + * (and could have potentially collided with version where contents mismatch) + */ + this.filenameToScriptInfoVersion = /* @__PURE__ */ new Map(); + // Set of all '.js' files ever opened. + this.allJsFilesForOpenFileTelemetry = /* @__PURE__ */ new Set(); + /** + * maps external project file name to list of config files that were the part of this project + */ + this.externalProjectToConfiguredProjectMap = /* @__PURE__ */ new Map(); + /** + * external projects (configuration and list of root files is not controlled by tsserver) + */ + this.externalProjects = []; + /** + * projects built from openFileRoots + */ + this.inferredProjects = []; + /** + * projects specified by a tsconfig.json file + */ + this.configuredProjects = /* @__PURE__ */ new Map(); + /** @internal */ + this.newInferredProjectName = createProjectNameFactoryWithCounter(makeInferredProjectName); + /** @internal */ + this.newAutoImportProviderProjectName = createProjectNameFactoryWithCounter(makeAutoImportProviderProjectName); + /** @internal */ + this.newAuxiliaryProjectName = createProjectNameFactoryWithCounter(makeAuxiliaryProjectName); + /** + * Open files: with value being project root path, and key being Path of the file that is open + */ + this.openFiles = /* @__PURE__ */ new Map(); + /** Config files looked up and cached config files for open script info */ + this.configFileForOpenFiles = /* @__PURE__ */ new Map(); + /** Set of open script infos that are root of inferred project */ + this.rootOfInferredProjects = /* @__PURE__ */ new Set(); + /** + * Map of open files that are opened without complete path but have projectRoot as current directory + */ + this.openFilesWithNonRootedDiskPath = /* @__PURE__ */ new Map(); + this.compilerOptionsForInferredProjectsPerProjectRoot = /* @__PURE__ */ new Map(); + this.watchOptionsForInferredProjectsPerProjectRoot = /* @__PURE__ */ new Map(); + this.typeAcquisitionForInferredProjectsPerProjectRoot = /* @__PURE__ */ new Map(); + /** + * Project size for configured or external projects + */ + this.projectToSizeMap = /* @__PURE__ */ new Map(); + /** + * This is a map of config file paths existence that doesnt need query to disk + * - The entry can be present because there is inferred project that needs to watch addition of config file to directory + * In this case the exists could be true/false based on config file is present or not + * - Or it is present if we have configured project open with config file at that location + * In this case the exists property is always true + * + * @internal + */ + this.configFileExistenceInfoCache = /* @__PURE__ */ new Map(); + this.safelist = defaultTypeSafeList; + this.legacySafelist = /* @__PURE__ */ new Map(); + this.pendingProjectUpdates = /* @__PURE__ */ new Map(); + /** @internal */ + this.pendingEnsureProjectForOpenFiles = false; + /** Tracks projects that we have already sent telemetry for. */ + this.seenProjects = /* @__PURE__ */ new Map(); + this.sharedExtendedConfigFileWatchers = /* @__PURE__ */ new Map(); + this.extendedConfigCache = /* @__PURE__ */ new Map(); + /** @internal */ + this.baseline = noop; + /** @internal */ + this.verifyDocumentRegistry = noop; + /** @internal */ + this.verifyProgram = noop; + /** @internal */ + this.onProjectCreation = noop; + var _a; + this.host = opts.host; + this.logger = opts.logger; + this.cancellationToken = opts.cancellationToken; + this.useSingleInferredProject = opts.useSingleInferredProject; + this.useInferredProjectPerProjectRoot = opts.useInferredProjectPerProjectRoot; + this.typingsInstaller = opts.typingsInstaller || nullTypingsInstaller; + this.throttleWaitMilliseconds = opts.throttleWaitMilliseconds; + this.eventHandler = opts.eventHandler; + this.suppressDiagnosticEvents = opts.suppressDiagnosticEvents; + this.globalPlugins = opts.globalPlugins || emptyArray2; + this.pluginProbeLocations = opts.pluginProbeLocations || emptyArray2; + this.allowLocalPluginLoads = !!opts.allowLocalPluginLoads; + this.typesMapLocation = opts.typesMapLocation === void 0 ? combinePaths(getDirectoryPath(this.getExecutingFilePath()), "typesMap.json") : opts.typesMapLocation; + this.session = opts.session; + this.jsDocParsingMode = opts.jsDocParsingMode; + if (opts.serverMode !== void 0) { + this.serverMode = opts.serverMode; + } else { + this.serverMode = 0 /* Semantic */; + } + if (this.host.realpath) { + this.realpathToScriptInfos = createMultiMap(); + } + this.currentDirectory = toNormalizedPath(this.host.getCurrentDirectory()); + this.toCanonicalFileName = createGetCanonicalFileName(this.host.useCaseSensitiveFileNames); + this.globalCacheLocationDirectoryPath = this.typingsInstaller.globalTypingsCacheLocation ? ensureTrailingDirectorySeparator(this.toPath(this.typingsInstaller.globalTypingsCacheLocation)) : void 0; + this.throttledOperations = new ThrottledOperations(this.host, this.logger); + this.logger.info(`currentDirectory:: ${this.host.getCurrentDirectory()} useCaseSensitiveFileNames:: ${this.host.useCaseSensitiveFileNames}`); + this.logger.info(`libs Location:: ${getDirectoryPath(this.host.getExecutingFilePath())}`); + this.logger.info(`globalTypingsCacheLocation:: ${this.typingsInstaller.globalTypingsCacheLocation}`); + if (this.typesMapLocation) { + this.loadTypesMap(); + } else { + this.logger.info("No types map provided; using the default"); + } + this.typingsInstaller.attach(this); + this.hostConfiguration = { + formatCodeOptions: getDefaultFormatCodeSettings(this.host.newLine), + preferences: emptyOptions, + hostInfo: "Unknown host", + extraFileExtensions: [] + }; + this.documentRegistry = createDocumentRegistryInternal( + this.host.useCaseSensitiveFileNames, + this.currentDirectory, + this.jsDocParsingMode, + this + ); + const watchLogLevel = this.logger.hasLevel(3 /* verbose */) ? 2 /* Verbose */ : this.logger.loggingEnabled() ? 1 /* TriggerOnly */ : 0 /* None */; + const log = watchLogLevel !== 0 /* None */ ? (s) => this.logger.info(s) : noop; + this.packageJsonCache = createPackageJsonCache(this); + this.watchFactory = this.serverMode !== 0 /* Semantic */ ? { + watchFile: returnNoopFileWatcher, + watchDirectory: returnNoopFileWatcher + } : getWatchFactory( + createWatchFactoryHostUsingWatchEvents(this, opts.canUseWatchEvents) || this.host, + watchLogLevel, + log, + getDetailWatchInfo + ); + this.canUseWatchEvents = getCanUseWatchEvents(this, opts.canUseWatchEvents); + (_a = opts.incrementalVerifier) == null ? void 0 : _a.call(opts, this); + } + toPath(fileName) { + return toPath(fileName, this.currentDirectory, this.toCanonicalFileName); + } + /** @internal */ + getExecutingFilePath() { + return this.getNormalizedAbsolutePath(this.host.getExecutingFilePath()); + } + /** @internal */ + getNormalizedAbsolutePath(fileName) { + return getNormalizedAbsolutePath(fileName, this.host.getCurrentDirectory()); + } + /** @internal */ + setDocument(key, path, sourceFile) { + const info = Debug.checkDefined(this.getScriptInfoForPath(path)); + info.cacheSourceFile = { key, sourceFile }; + } + /** @internal */ + getDocument(key, path) { + const info = this.getScriptInfoForPath(path); + return info && info.cacheSourceFile && info.cacheSourceFile.key === key ? info.cacheSourceFile.sourceFile : void 0; + } + /** @internal */ + ensureInferredProjectsUpToDate_TestOnly() { + this.ensureProjectStructuresUptoDate(); + } + /** @internal */ + getCompilerOptionsForInferredProjects() { + return this.compilerOptionsForInferredProjects; + } + /** @internal */ + onUpdateLanguageServiceStateForProject(project, languageServiceEnabled) { + if (!this.eventHandler) { + return; + } + const event = { + eventName: ProjectLanguageServiceStateEvent, + data: { project, languageServiceEnabled } + }; + this.eventHandler(event); + } + loadTypesMap() { + try { + const fileContent = this.host.readFile(this.typesMapLocation); + if (fileContent === void 0) { + this.logger.info(`Provided types map file "${this.typesMapLocation}" doesn't exist`); + return; + } + const raw = JSON.parse(fileContent); + for (const k of Object.keys(raw.typesMap)) { + raw.typesMap[k].match = new RegExp(raw.typesMap[k].match, "i"); + } + this.safelist = raw.typesMap; + for (const key in raw.simpleMap) { + if (hasProperty(raw.simpleMap, key)) { + this.legacySafelist.set(key, raw.simpleMap[key].toLowerCase()); + } + } + } catch (e) { + this.logger.info(`Error loading types map: ${e}`); + this.safelist = defaultTypeSafeList; + this.legacySafelist.clear(); + } + } + // eslint-disable-line @typescript-eslint/unified-signatures + updateTypingsForProject(response) { + const project = this.findProject(response.projectName); + if (!project) { + return; + } + switch (response.kind) { + case ActionSet: + project.updateTypingFiles( + response.compilerOptions, + response.typeAcquisition, + response.unresolvedImports, + response.typings + ); + return; + case ActionInvalidate: + project.enqueueInstallTypingsForProject( + /*forceRefresh*/ + true + ); + return; + } + } + /** @internal */ + watchTypingLocations(response) { + var _a; + (_a = this.findProject(response.projectName)) == null ? void 0 : _a.watchTypingLocations(response.files); + } + /** @internal */ + delayEnsureProjectForOpenFiles() { + if (!this.openFiles.size) return; + this.pendingEnsureProjectForOpenFiles = true; + this.throttledOperations.schedule( + ensureProjectForOpenFileSchedule, + /*delay*/ + 2500, + () => { + if (this.pendingProjectUpdates.size !== 0) { + this.delayEnsureProjectForOpenFiles(); + } else { + if (this.pendingEnsureProjectForOpenFiles) { + this.ensureProjectForOpenFiles(); + this.sendProjectsUpdatedInBackgroundEvent(); + } + } + } + ); + } + delayUpdateProjectGraph(project) { + if (isProjectDeferredClose(project)) return; + project.markAsDirty(); + if (isBackgroundProject(project)) return; + const projectName = project.getProjectName(); + this.pendingProjectUpdates.set(projectName, project); + this.throttledOperations.schedule( + projectName, + /*delay*/ + 250, + () => { + if (this.pendingProjectUpdates.delete(projectName)) { + updateProjectIfDirty(project); + } + } + ); + } + /** @internal */ + hasPendingProjectUpdate(project) { + return this.pendingProjectUpdates.has(project.getProjectName()); + } + /** @internal */ + sendProjectsUpdatedInBackgroundEvent() { + if (!this.eventHandler) { + return; + } + const event = { + eventName: ProjectsUpdatedInBackgroundEvent, + data: { + openFiles: arrayFrom(this.openFiles.keys(), (path) => this.getScriptInfoForPath(path).fileName) + } + }; + this.eventHandler(event); + } + /** @internal */ + sendLargeFileReferencedEvent(file, fileSize) { + if (!this.eventHandler) { + return; + } + const event = { + eventName: LargeFileReferencedEvent, + data: { file, fileSize, maxFileSize } + }; + this.eventHandler(event); + } + /** @internal */ + sendProjectLoadingStartEvent(project, reason) { + if (!this.eventHandler) { + return; + } + project.sendLoadingProjectFinish = true; + const event = { + eventName: ProjectLoadingStartEvent, + data: { project, reason } + }; + this.eventHandler(event); + } + /** @internal */ + sendProjectLoadingFinishEvent(project) { + if (!this.eventHandler || !project.sendLoadingProjectFinish) { + return; + } + project.sendLoadingProjectFinish = false; + const event = { + eventName: ProjectLoadingFinishEvent, + data: { project } + }; + this.eventHandler(event); + } + /** @internal */ + sendPerformanceEvent(kind, durationMs) { + if (this.performanceEventHandler) { + this.performanceEventHandler({ kind, durationMs }); + } + } + /** @internal */ + delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project) { + this.delayUpdateProjectGraph(project); + this.delayEnsureProjectForOpenFiles(); + } + delayUpdateProjectGraphs(projects, clearSourceMapperCache) { + if (projects.length) { + for (const project of projects) { + if (clearSourceMapperCache) project.clearSourceMapperCache(); + this.delayUpdateProjectGraph(project); + } + this.delayEnsureProjectForOpenFiles(); + } + } + setCompilerOptionsForInferredProjects(projectCompilerOptions, projectRootPath) { + Debug.assert(projectRootPath === void 0 || this.useInferredProjectPerProjectRoot, "Setting compiler options per project root path is only supported when useInferredProjectPerProjectRoot is enabled"); + const compilerOptions = convertCompilerOptions(projectCompilerOptions); + const watchOptions = convertWatchOptions(projectCompilerOptions, projectRootPath); + const typeAcquisition = convertTypeAcquisition(projectCompilerOptions); + compilerOptions.allowNonTsExtensions = true; + const canonicalProjectRootPath = projectRootPath && this.toCanonicalFileName(projectRootPath); + if (canonicalProjectRootPath) { + this.compilerOptionsForInferredProjectsPerProjectRoot.set(canonicalProjectRootPath, compilerOptions); + this.watchOptionsForInferredProjectsPerProjectRoot.set(canonicalProjectRootPath, watchOptions || false); + this.typeAcquisitionForInferredProjectsPerProjectRoot.set(canonicalProjectRootPath, typeAcquisition); + } else { + this.compilerOptionsForInferredProjects = compilerOptions; + this.watchOptionsForInferredProjects = watchOptions; + this.typeAcquisitionForInferredProjects = typeAcquisition; + } + for (const project of this.inferredProjects) { + if (canonicalProjectRootPath ? project.projectRootPath === canonicalProjectRootPath : !project.projectRootPath || !this.compilerOptionsForInferredProjectsPerProjectRoot.has(project.projectRootPath)) { + project.setCompilerOptions(compilerOptions); + project.setTypeAcquisition(typeAcquisition); + project.setWatchOptions(watchOptions == null ? void 0 : watchOptions.watchOptions); + project.setProjectErrors(watchOptions == null ? void 0 : watchOptions.errors); + project.compileOnSaveEnabled = compilerOptions.compileOnSave; + project.markAsDirty(); + this.delayUpdateProjectGraph(project); + } + } + this.delayEnsureProjectForOpenFiles(); + } + findProject(projectName) { + if (projectName === void 0) { + return void 0; + } + if (isInferredProjectName(projectName)) { + return findProjectByName(projectName, this.inferredProjects); + } + return this.findExternalProjectByProjectName(projectName) || this.findConfiguredProjectByProjectName(toNormalizedPath(projectName)); + } + /** @internal */ + forEachProject(cb) { + this.externalProjects.forEach(cb); + this.configuredProjects.forEach(cb); + this.inferredProjects.forEach(cb); + } + /** @internal */ + forEachEnabledProject(cb) { + this.forEachProject((project) => { + if (!project.isOrphan() && project.languageServiceEnabled) { + cb(project); + } + }); + } + getDefaultProjectForFile(fileName, ensureProject) { + return ensureProject ? this.ensureDefaultProjectForFile(fileName) : this.tryGetDefaultProjectForFile(fileName); + } + /** @internal */ + tryGetDefaultProjectForFile(fileNameOrScriptInfo) { + const scriptInfo = isString(fileNameOrScriptInfo) ? this.getScriptInfoForNormalizedPath(fileNameOrScriptInfo) : fileNameOrScriptInfo; + return scriptInfo && !scriptInfo.isOrphan() ? scriptInfo.getDefaultProject() : void 0; + } + /** + * If there is default project calculation pending for this file, + * then it completes that calculation so that correct default project is used for the project + */ + tryGetDefaultProjectForEnsuringConfiguredProjectForFile(fileNameOrScriptInfo) { + var _a; + const scriptInfo = isString(fileNameOrScriptInfo) ? this.getScriptInfoForNormalizedPath(fileNameOrScriptInfo) : fileNameOrScriptInfo; + if (!scriptInfo) return void 0; + if ((_a = this.pendingOpenFileProjectUpdates) == null ? void 0 : _a.delete(scriptInfo.path)) { + this.tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo( + scriptInfo, + 5 /* Create */ + ); + if (scriptInfo.isOrphan()) { + this.assignOrphanScriptInfoToInferredProject(scriptInfo, this.openFiles.get(scriptInfo.path)); + } + } + return this.tryGetDefaultProjectForFile(scriptInfo); + } + /** @internal */ + ensureDefaultProjectForFile(fileNameOrScriptInfo) { + return this.tryGetDefaultProjectForEnsuringConfiguredProjectForFile(fileNameOrScriptInfo) || this.doEnsureDefaultProjectForFile(fileNameOrScriptInfo); + } + doEnsureDefaultProjectForFile(fileNameOrScriptInfo) { + this.ensureProjectStructuresUptoDate(); + const scriptInfo = isString(fileNameOrScriptInfo) ? this.getScriptInfoForNormalizedPath(fileNameOrScriptInfo) : fileNameOrScriptInfo; + return scriptInfo ? scriptInfo.getDefaultProject() : (this.logErrorForScriptInfoNotFound(isString(fileNameOrScriptInfo) ? fileNameOrScriptInfo : fileNameOrScriptInfo.fileName), Errors.ThrowNoProject()); + } + getScriptInfoEnsuringProjectsUptoDate(uncheckedFileName) { + this.ensureProjectStructuresUptoDate(); + return this.getScriptInfo(uncheckedFileName); + } + /** + * Ensures the project structures are upto date + * This means, + * - we go through all the projects and update them if they are dirty + * - if updates reflect some change in structure or there was pending request to ensure projects for open files + * ensure that each open script info has project + */ + ensureProjectStructuresUptoDate() { + let hasChanges = this.pendingEnsureProjectForOpenFiles; + this.pendingProjectUpdates.clear(); + const updateGraph = (project) => { + hasChanges = updateProjectIfDirty(project) || hasChanges; + }; + this.externalProjects.forEach(updateGraph); + this.configuredProjects.forEach(updateGraph); + this.inferredProjects.forEach(updateGraph); + if (hasChanges) { + this.ensureProjectForOpenFiles(); + } + } + getFormatCodeOptions(file) { + const info = this.getScriptInfoForNormalizedPath(file); + return info && info.getFormatCodeSettings() || this.hostConfiguration.formatCodeOptions; + } + getPreferences(file) { + const info = this.getScriptInfoForNormalizedPath(file); + return { ...this.hostConfiguration.preferences, ...info && info.getPreferences() }; + } + getHostFormatCodeOptions() { + return this.hostConfiguration.formatCodeOptions; + } + getHostPreferences() { + return this.hostConfiguration.preferences; + } + onSourceFileChanged(info, eventKind) { + Debug.assert(!info.isScriptOpen()); + if (eventKind === 2 /* Deleted */) { + this.handleDeletedFile( + info, + /*deferredDelete*/ + true + ); + } else { + if (info.deferredDelete) info.deferredDelete = void 0; + info.delayReloadNonMixedContentFile(); + this.delayUpdateProjectGraphs( + info.containingProjects, + /*clearSourceMapperCache*/ + false + ); + this.handleSourceMapProjects(info); + } + } + handleSourceMapProjects(info) { + if (info.sourceMapFilePath) { + if (isString(info.sourceMapFilePath)) { + const sourceMapFileInfo = this.getScriptInfoForPath(info.sourceMapFilePath); + this.delayUpdateSourceInfoProjects(sourceMapFileInfo == null ? void 0 : sourceMapFileInfo.sourceInfos); + } else { + this.delayUpdateSourceInfoProjects(info.sourceMapFilePath.sourceInfos); + } + } + this.delayUpdateSourceInfoProjects(info.sourceInfos); + if (info.declarationInfoPath) { + this.delayUpdateProjectsOfScriptInfoPath(info.declarationInfoPath); + } + } + delayUpdateSourceInfoProjects(sourceInfos) { + if (sourceInfos) { + sourceInfos.forEach((_value, path) => this.delayUpdateProjectsOfScriptInfoPath(path)); + } + } + delayUpdateProjectsOfScriptInfoPath(path) { + const info = this.getScriptInfoForPath(path); + if (info) { + this.delayUpdateProjectGraphs( + info.containingProjects, + /*clearSourceMapperCache*/ + true + ); + } + } + handleDeletedFile(info, deferredDelete) { + Debug.assert(!info.isScriptOpen()); + this.delayUpdateProjectGraphs( + info.containingProjects, + /*clearSourceMapperCache*/ + false + ); + this.handleSourceMapProjects(info); + info.detachAllProjects(); + if (deferredDelete) { + info.delayReloadNonMixedContentFile(); + info.deferredDelete = true; + } else { + this.deleteScriptInfo(info); + } + } + /** + * This is to watch whenever files are added or removed to the wildcard directories + */ + watchWildcardDirectory(directory, flags, configFileName, config) { + let watcher = this.watchFactory.watchDirectory( + directory, + (fileOrDirectory) => this.onWildCardDirectoryWatcherInvoke( + directory, + configFileName, + config, + result, + fileOrDirectory + ), + flags, + this.getWatchOptionsFromProjectWatchOptions(config.parsedCommandLine.watchOptions, getDirectoryPath(configFileName)), + WatchType.WildcardDirectory, + configFileName + ); + const result = { + packageJsonWatches: void 0, + close() { + var _a; + if (watcher) { + watcher.close(); + watcher = void 0; + (_a = result.packageJsonWatches) == null ? void 0 : _a.forEach((watcher2) => { + watcher2.projects.delete(result); + watcher2.close(); + }); + result.packageJsonWatches = void 0; + } + } + }; + return result; + } + onWildCardDirectoryWatcherInvoke(directory, configFileName, config, wildCardWatcher, fileOrDirectory) { + const fileOrDirectoryPath = this.toPath(fileOrDirectory); + const fsResult = config.cachedDirectoryStructureHost.addOrDeleteFileOrDirectory(fileOrDirectory, fileOrDirectoryPath); + if (getBaseFileName(fileOrDirectoryPath) === "package.json" && !isInsideNodeModules(fileOrDirectoryPath) && (fsResult && fsResult.fileExists || !fsResult && this.host.fileExists(fileOrDirectory))) { + const file = this.getNormalizedAbsolutePath(fileOrDirectory); + this.logger.info(`Config: ${configFileName} Detected new package.json: ${file}`); + this.packageJsonCache.addOrUpdate(file, fileOrDirectoryPath); + this.watchPackageJsonFile(file, fileOrDirectoryPath, wildCardWatcher); + } + if (!(fsResult == null ? void 0 : fsResult.fileExists)) { + this.sendSourceFileChange(fileOrDirectoryPath); + } + const configuredProjectForConfig = this.findConfiguredProjectByProjectName(configFileName); + if (isIgnoredFileFromWildCardWatching({ + watchedDirPath: this.toPath(directory), + fileOrDirectory, + fileOrDirectoryPath, + configFileName, + extraFileExtensions: this.hostConfiguration.extraFileExtensions, + currentDirectory: this.currentDirectory, + options: config.parsedCommandLine.options, + program: (configuredProjectForConfig == null ? void 0 : configuredProjectForConfig.getCurrentProgram()) || config.parsedCommandLine.fileNames, + useCaseSensitiveFileNames: this.host.useCaseSensitiveFileNames, + writeLog: (s) => this.logger.info(s), + toPath: (s) => this.toPath(s), + getScriptKind: configuredProjectForConfig ? (fileName) => configuredProjectForConfig.getScriptKind(fileName) : void 0 + })) return; + if (config.updateLevel !== 2 /* Full */) config.updateLevel = 1 /* RootNamesAndUpdate */; + config.projects.forEach((watchWildcardDirectories, projectCanonicalPath) => { + var _a; + if (!watchWildcardDirectories) return; + const project = this.getConfiguredProjectByCanonicalConfigFilePath(projectCanonicalPath); + if (!project) return; + if (configuredProjectForConfig !== project && this.getHostPreferences().includeCompletionsForModuleExports) { + const path = this.toPath(configFileName); + if (find((_a = project.getCurrentProgram()) == null ? void 0 : _a.getResolvedProjectReferences(), (ref) => (ref == null ? void 0 : ref.sourceFile.path) === path)) { + project.markAutoImportProviderAsDirty(); + } + } + const updateLevel = configuredProjectForConfig === project ? 1 /* RootNamesAndUpdate */ : 0 /* Update */; + if (project.pendingUpdateLevel > updateLevel) return; + if (this.openFiles.has(fileOrDirectoryPath)) { + const info = Debug.checkDefined(this.getScriptInfoForPath(fileOrDirectoryPath)); + if (info.isAttached(project)) { + const loadLevelToSet = Math.max(updateLevel, project.openFileWatchTriggered.get(fileOrDirectoryPath) || 0 /* Update */); + project.openFileWatchTriggered.set(fileOrDirectoryPath, loadLevelToSet); + } else { + project.pendingUpdateLevel = updateLevel; + this.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project); + } + } else { + project.pendingUpdateLevel = updateLevel; + this.delayUpdateProjectGraphAndEnsureProjectStructureForOpenFiles(project); + } + }); + } + delayUpdateProjectsFromParsedConfigOnConfigFileChange(canonicalConfigFilePath, loadReason) { + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!(configFileExistenceInfo == null ? void 0 : configFileExistenceInfo.config)) return false; + let scheduledAnyProjectUpdate = false; + configFileExistenceInfo.config.updateLevel = 2 /* Full */; + configFileExistenceInfo.config.cachedDirectoryStructureHost.clearCache(); + configFileExistenceInfo.config.projects.forEach((_watchWildcardDirectories, projectCanonicalPath) => { + var _a, _b, _c; + const project = this.getConfiguredProjectByCanonicalConfigFilePath(projectCanonicalPath); + if (!project) return; + scheduledAnyProjectUpdate = true; + if (projectCanonicalPath === canonicalConfigFilePath) { + if (project.initialLoadPending) return; + project.pendingUpdateLevel = 2 /* Full */; + project.pendingUpdateReason = loadReason; + this.delayUpdateProjectGraph(project); + project.markAutoImportProviderAsDirty(); + } else { + if (project.initialLoadPending) { + (_b = (_a = this.configFileExistenceInfoCache.get(projectCanonicalPath)) == null ? void 0 : _a.openFilesImpactedByConfigFile) == null ? void 0 : _b.forEach((path2) => { + var _a2; + if (!((_a2 = this.pendingOpenFileProjectUpdates) == null ? void 0 : _a2.has(path2))) { + (this.pendingOpenFileProjectUpdates ?? (this.pendingOpenFileProjectUpdates = /* @__PURE__ */ new Map())).set( + path2, + this.configFileForOpenFiles.get(path2) + ); + } + }); + return; + } + const path = this.toPath(canonicalConfigFilePath); + project.resolutionCache.removeResolutionsFromProjectReferenceRedirects(path); + this.delayUpdateProjectGraph(project); + if (this.getHostPreferences().includeCompletionsForModuleExports && find((_c = project.getCurrentProgram()) == null ? void 0 : _c.getResolvedProjectReferences(), (ref) => (ref == null ? void 0 : ref.sourceFile.path) === path)) { + project.markAutoImportProviderAsDirty(); + } + } + }); + return scheduledAnyProjectUpdate; + } + onConfigFileChanged(configFileName, canonicalConfigFilePath, eventKind) { + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + const project = this.getConfiguredProjectByCanonicalConfigFilePath(canonicalConfigFilePath); + const wasDefferedClose = project == null ? void 0 : project.deferredClose; + if (eventKind === 2 /* Deleted */) { + configFileExistenceInfo.exists = false; + if (project) project.deferredClose = true; + } else { + configFileExistenceInfo.exists = true; + if (wasDefferedClose) { + project.deferredClose = void 0; + project.markAsDirty(); + } + } + this.delayUpdateProjectsFromParsedConfigOnConfigFileChange( + canonicalConfigFilePath, + "Change in config file detected" + ); + this.openFiles.forEach((_projectRootPath, path) => { + var _a, _b; + const configFileForOpenFile = this.configFileForOpenFiles.get(path); + if (!((_a = configFileExistenceInfo.openFilesImpactedByConfigFile) == null ? void 0 : _a.has(path))) return; + this.configFileForOpenFiles.delete(path); + const info = this.getScriptInfoForPath(path); + const newConfigFileNameForInfo = this.getConfigFileNameForFile( + info, + /*findFromCacheOnly*/ + false + ); + if (!newConfigFileNameForInfo) return; + if (!((_b = this.pendingOpenFileProjectUpdates) == null ? void 0 : _b.has(path))) { + (this.pendingOpenFileProjectUpdates ?? (this.pendingOpenFileProjectUpdates = /* @__PURE__ */ new Map())).set(path, configFileForOpenFile); + } + }); + this.delayEnsureProjectForOpenFiles(); + } + removeProject(project) { + this.logger.info("`remove Project::"); + project.print( + /*writeProjectFileNames*/ + true, + /*writeFileExplaination*/ + true, + /*writeFileVersionAndText*/ + false + ); + project.close(); + if (Debug.shouldAssert(1 /* Normal */)) { + this.filenameToScriptInfo.forEach( + (info) => Debug.assert( + !info.isAttached(project), + "Found script Info still attached to project", + () => `${project.projectName}: ScriptInfos still attached: ${JSON.stringify( + arrayFrom( + mapDefinedIterator( + this.filenameToScriptInfo.values(), + (info2) => info2.isAttached(project) ? { + fileName: info2.fileName, + projects: info2.containingProjects.map((p) => p.projectName), + hasMixedContent: info2.hasMixedContent + } : void 0 + ) + ), + /*replacer*/ + void 0, + " " + )}` + ) + ); + } + this.pendingProjectUpdates.delete(project.getProjectName()); + switch (project.projectKind) { + case 2 /* External */: + unorderedRemoveItem(this.externalProjects, project); + this.projectToSizeMap.delete(project.getProjectName()); + break; + case 1 /* Configured */: + this.configuredProjects.delete(project.canonicalConfigFilePath); + this.projectToSizeMap.delete(project.canonicalConfigFilePath); + break; + case 0 /* Inferred */: + unorderedRemoveItem(this.inferredProjects, project); + break; + } + } + /** @internal */ + assignOrphanScriptInfoToInferredProject(info, projectRootPath) { + Debug.assert(info.isOrphan()); + const project = this.getOrCreateInferredProjectForProjectRootPathIfEnabled(info, projectRootPath) || this.getOrCreateSingleInferredProjectIfEnabled() || this.getOrCreateSingleInferredWithoutProjectRoot( + info.isDynamic ? projectRootPath || this.currentDirectory : getDirectoryPath( + isRootedDiskPath(info.fileName) ? info.fileName : getNormalizedAbsolutePath( + info.fileName, + projectRootPath ? this.getNormalizedAbsolutePath(projectRootPath) : this.currentDirectory + ) + ) + ); + project.addRoot(info); + if (info.containingProjects[0] !== project) { + orderedRemoveItem(info.containingProjects, project); + info.containingProjects.unshift(project); + } + project.updateGraph(); + if (!this.useSingleInferredProject && !project.projectRootPath) { + for (const inferredProject of this.inferredProjects) { + if (inferredProject === project || inferredProject.isOrphan()) { + continue; + } + const roots = inferredProject.getRootScriptInfos(); + Debug.assert(roots.length === 1 || !!inferredProject.projectRootPath); + if (roots.length === 1 && forEach(roots[0].containingProjects, (p) => p !== roots[0].containingProjects[0] && !p.isOrphan())) { + inferredProject.removeFile( + roots[0], + /*fileExists*/ + true, + /*detachFromProject*/ + true + ); + } + } + } + return project; + } + assignOrphanScriptInfosToInferredProject() { + this.openFiles.forEach((projectRootPath, path) => { + const info = this.getScriptInfoForPath(path); + if (info.isOrphan()) { + this.assignOrphanScriptInfoToInferredProject(info, projectRootPath); + } + }); + } + /** + * Remove this file from the set of open, non-configured files. + * @param info The file that has been closed or newly configured + */ + closeOpenFile(info, skipAssignOrphanScriptInfosToInferredProject) { + var _a; + const fileExists = info.isDynamic ? false : this.host.fileExists(info.fileName); + info.close(fileExists); + this.stopWatchingConfigFilesForScriptInfo(info); + const canonicalFileName = this.toCanonicalFileName(info.fileName); + if (this.openFilesWithNonRootedDiskPath.get(canonicalFileName) === info) { + this.openFilesWithNonRootedDiskPath.delete(canonicalFileName); + } + let ensureProjectsForOpenFiles = false; + for (const p of info.containingProjects) { + if (isConfiguredProject(p)) { + if (info.hasMixedContent) { + info.registerFileUpdate(); + } + const updateLevel = p.openFileWatchTriggered.get(info.path); + if (updateLevel !== void 0) { + p.openFileWatchTriggered.delete(info.path); + if (p.pendingUpdateLevel < updateLevel) { + p.pendingUpdateLevel = updateLevel; + p.markFileAsDirty(info.path); + } + } + } else if (isInferredProject(p) && p.isRoot(info)) { + if (p.isProjectWithSingleRoot()) { + ensureProjectsForOpenFiles = true; + } + p.removeFile( + info, + fileExists, + /*detachFromProject*/ + true + ); + } + if (!p.languageServiceEnabled) { + p.markAsDirty(); + } + } + this.openFiles.delete(info.path); + this.configFileForOpenFiles.delete(info.path); + (_a = this.pendingOpenFileProjectUpdates) == null ? void 0 : _a.delete(info.path); + Debug.assert(!this.rootOfInferredProjects.has(info)); + if (!skipAssignOrphanScriptInfosToInferredProject && ensureProjectsForOpenFiles) { + this.assignOrphanScriptInfosToInferredProject(); + } + if (fileExists) { + this.watchClosedScriptInfo(info); + } else { + this.handleDeletedFile( + info, + /*deferredDelete*/ + false + ); + } + return ensureProjectsForOpenFiles; + } + deleteScriptInfo(info) { + Debug.assert(!info.isScriptOpen()); + this.filenameToScriptInfo.delete(info.path); + this.filenameToScriptInfoVersion.set(info.path, info.textStorage.version); + this.stopWatchingScriptInfo(info); + const realpath = info.getRealpathIfDifferent(); + if (realpath) { + this.realpathToScriptInfos.remove(realpath, info); + } + info.closeSourceMapFileWatcher(); + } + configFileExists(configFileName, canonicalConfigFilePath, info) { + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + let openFilesImpactedByConfigFile; + if (this.openFiles.has(info.path) && (!isAncestorConfigFileInfo(info) || info.isForDefaultProject)) { + if (configFileExistenceInfo) (configFileExistenceInfo.openFilesImpactedByConfigFile ?? (configFileExistenceInfo.openFilesImpactedByConfigFile = /* @__PURE__ */ new Set())).add(info.path); + else (openFilesImpactedByConfigFile = /* @__PURE__ */ new Set()).add(info.path); + } + if (configFileExistenceInfo) return configFileExistenceInfo.exists; + const exists = this.host.fileExists(configFileName); + this.configFileExistenceInfoCache.set(canonicalConfigFilePath, { exists, openFilesImpactedByConfigFile }); + return exists; + } + createConfigFileWatcherForParsedConfig(configFileName, canonicalConfigFilePath, forProject) { + var _a, _b; + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!configFileExistenceInfo.watcher || configFileExistenceInfo.watcher === noopConfigFileWatcher) { + configFileExistenceInfo.watcher = this.watchFactory.watchFile( + configFileName, + (_fileName, eventKind) => this.onConfigFileChanged(configFileName, canonicalConfigFilePath, eventKind), + 2e3 /* High */, + this.getWatchOptionsFromProjectWatchOptions((_b = (_a = configFileExistenceInfo == null ? void 0 : configFileExistenceInfo.config) == null ? void 0 : _a.parsedCommandLine) == null ? void 0 : _b.watchOptions, getDirectoryPath(configFileName)), + WatchType.ConfigFile, + forProject + ); + } + this.ensureConfigFileWatcherForProject(configFileExistenceInfo, forProject); + } + ensureConfigFileWatcherForProject(configFileExistenceInfo, forProject) { + const projects = configFileExistenceInfo.config.projects; + projects.set(forProject.canonicalConfigFilePath, projects.get(forProject.canonicalConfigFilePath) || false); + } + /** @internal */ + releaseParsedConfig(canonicalConfigFilePath, forProject) { + var _a, _b, _c; + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!((_a = configFileExistenceInfo.config) == null ? void 0 : _a.projects.delete(forProject.canonicalConfigFilePath))) return; + if ((_b = configFileExistenceInfo.config) == null ? void 0 : _b.projects.size) return; + configFileExistenceInfo.config = void 0; + clearSharedExtendedConfigFileWatcher(canonicalConfigFilePath, this.sharedExtendedConfigFileWatchers); + Debug.checkDefined(configFileExistenceInfo.watcher); + if ((_c = configFileExistenceInfo.openFilesImpactedByConfigFile) == null ? void 0 : _c.size) { + if (configFileExistenceInfo.inferredProjectRoots) { + if (!canWatchDirectoryOrFilePath(getDirectoryPath(canonicalConfigFilePath))) { + configFileExistenceInfo.watcher.close(); + configFileExistenceInfo.watcher = noopConfigFileWatcher; + } + } else { + configFileExistenceInfo.watcher.close(); + configFileExistenceInfo.watcher = void 0; + } + } else { + configFileExistenceInfo.watcher.close(); + this.configFileExistenceInfoCache.delete(canonicalConfigFilePath); + } + } + /** + * This is called on file close or when its removed from inferred project as root, + * so that we handle the watches and inferred project root data + * @internal + */ + stopWatchingConfigFilesForScriptInfo(info) { + if (this.serverMode !== 0 /* Semantic */) return; + const isRootOfInferredProject = this.rootOfInferredProjects.delete(info); + const isOpen = info.isScriptOpen(); + if (isOpen && !isRootOfInferredProject) return; + this.forEachConfigFileLocation(info, (canonicalConfigFilePath) => { + var _a, _b, _c; + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!configFileExistenceInfo) return; + if (isOpen) { + if (!((_a = configFileExistenceInfo == null ? void 0 : configFileExistenceInfo.openFilesImpactedByConfigFile) == null ? void 0 : _a.has(info.path))) return; + } else { + if (!((_b = configFileExistenceInfo.openFilesImpactedByConfigFile) == null ? void 0 : _b.delete(info.path))) return; + } + if (isRootOfInferredProject) { + configFileExistenceInfo.inferredProjectRoots--; + if (configFileExistenceInfo.watcher && !configFileExistenceInfo.config && !configFileExistenceInfo.inferredProjectRoots) { + configFileExistenceInfo.watcher.close(); + configFileExistenceInfo.watcher = void 0; + } + } + if (!((_c = configFileExistenceInfo.openFilesImpactedByConfigFile) == null ? void 0 : _c.size) && !configFileExistenceInfo.config) { + Debug.assert(!configFileExistenceInfo.watcher); + this.configFileExistenceInfoCache.delete(canonicalConfigFilePath); + } + }); + } + /** + * This is called by inferred project whenever script info is added as a root + * + * @internal + */ + startWatchingConfigFilesForInferredProjectRoot(info) { + if (this.serverMode !== 0 /* Semantic */) return; + Debug.assert(info.isScriptOpen()); + this.rootOfInferredProjects.add(info); + this.forEachConfigFileLocation(info, (canonicalConfigFilePath, configFileName) => { + let configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!configFileExistenceInfo) { + configFileExistenceInfo = { exists: this.host.fileExists(configFileName), inferredProjectRoots: 1 }; + this.configFileExistenceInfoCache.set(canonicalConfigFilePath, configFileExistenceInfo); + } else { + configFileExistenceInfo.inferredProjectRoots = (configFileExistenceInfo.inferredProjectRoots ?? 0) + 1; + } + (configFileExistenceInfo.openFilesImpactedByConfigFile ?? (configFileExistenceInfo.openFilesImpactedByConfigFile = /* @__PURE__ */ new Set())).add(info.path); + configFileExistenceInfo.watcher || (configFileExistenceInfo.watcher = canWatchDirectoryOrFilePath(getDirectoryPath(canonicalConfigFilePath)) ? this.watchFactory.watchFile( + configFileName, + (_filename, eventKind) => this.onConfigFileChanged(configFileName, canonicalConfigFilePath, eventKind), + 2e3 /* High */, + this.hostConfiguration.watchOptions, + WatchType.ConfigFileForInferredRoot + ) : noopConfigFileWatcher); + }); + } + /** + * This function tries to search for a tsconfig.json for the given file. + * This is different from the method the compiler uses because + * the compiler can assume it will always start searching in the + * current directory (the directory in which tsc was invoked). + * The server must start searching from the directory containing + * the newly opened file. + */ + forEachConfigFileLocation(info, action) { + if (this.serverMode !== 0 /* Semantic */) { + return void 0; + } + Debug.assert(!isOpenScriptInfo(info) || this.openFiles.has(info.path)); + const projectRootPath = this.openFiles.get(info.path); + const scriptInfo = Debug.checkDefined(this.getScriptInfo(info.path)); + if (scriptInfo.isDynamic) return void 0; + let searchPath = asNormalizedPath(getDirectoryPath(info.fileName)); + const isSearchPathInProjectRoot = () => containsPath(projectRootPath, searchPath, this.currentDirectory, !this.host.useCaseSensitiveFileNames); + const anySearchPathOk = !projectRootPath || !isSearchPathInProjectRoot(); + let searchTsconfig = true; + let searchJsconfig = true; + if (isAncestorConfigFileInfo(info)) { + if (endsWith(info.fileName, "tsconfig.json")) searchTsconfig = false; + else searchTsconfig = searchJsconfig = false; + } + do { + const canonicalSearchPath = normalizedPathToPath(searchPath, this.currentDirectory, this.toCanonicalFileName); + if (searchTsconfig) { + const tsconfigFileName = asNormalizedPath(combinePaths(searchPath, "tsconfig.json")); + const result = action(combinePaths(canonicalSearchPath, "tsconfig.json"), tsconfigFileName); + if (result) return tsconfigFileName; + } + if (searchJsconfig) { + const jsconfigFileName = asNormalizedPath(combinePaths(searchPath, "jsconfig.json")); + const result = action(combinePaths(canonicalSearchPath, "jsconfig.json"), jsconfigFileName); + if (result) return jsconfigFileName; + } + if (isNodeModulesDirectory(canonicalSearchPath)) { + break; + } + const parentPath = asNormalizedPath(getDirectoryPath(searchPath)); + if (parentPath === searchPath) break; + searchPath = parentPath; + searchTsconfig = searchJsconfig = true; + } while (anySearchPathOk || isSearchPathInProjectRoot()); + return void 0; + } + /** @internal */ + findDefaultConfiguredProject(info) { + var _a; + return (_a = this.findDefaultConfiguredProjectWorker( + info, + 1 /* Find */ + )) == null ? void 0 : _a.defaultProject; + } + /** @internal */ + findDefaultConfiguredProjectWorker(info, kind) { + return info.isScriptOpen() ? this.tryFindDefaultConfiguredProjectForOpenScriptInfo( + info, + kind + ) : void 0; + } + /** Get cached configFileName for scriptInfo or ancestor of open script info */ + getConfigFileNameForFileFromCache(info, lookInPendingFilesForValue) { + if (lookInPendingFilesForValue) { + const result = getConfigFileNameFromCache(info, this.pendingOpenFileProjectUpdates); + if (result !== void 0) return result; + } + return getConfigFileNameFromCache(info, this.configFileForOpenFiles); + } + /** Caches the configFilename for script info or ancestor of open script info */ + setConfigFileNameForFileInCache(info, configFileName) { + if (!this.openFiles.has(info.path)) return; + const config = configFileName || false; + if (!isAncestorConfigFileInfo(info)) { + this.configFileForOpenFiles.set(info.path, config); + } else { + let configFileForOpenFile = this.configFileForOpenFiles.get(info.path); + if (!configFileForOpenFile || isString(configFileForOpenFile)) { + this.configFileForOpenFiles.set( + info.path, + configFileForOpenFile = (/* @__PURE__ */ new Map()).set(false, configFileForOpenFile) + ); + } + configFileForOpenFile.set(info.fileName, config); + } + } + /** + * This function tries to search for a tsconfig.json for the given file. + * This is different from the method the compiler uses because + * the compiler can assume it will always start searching in the + * current directory (the directory in which tsc was invoked). + * The server must start searching from the directory containing + * the newly opened file. + * If script info is passed in, it is asserted to be open script info + * otherwise just file name + * when findFromCacheOnly is true only looked up in cache instead of hitting disk to figure things out + * @internal + */ + getConfigFileNameForFile(info, findFromCacheOnly) { + const fromCache = this.getConfigFileNameForFileFromCache(info, findFromCacheOnly); + if (fromCache !== void 0) return fromCache || void 0; + if (findFromCacheOnly) return void 0; + const configFileName = this.forEachConfigFileLocation(info, (canonicalConfigFilePath, configFileName2) => this.configFileExists(configFileName2, canonicalConfigFilePath, info)); + this.logger.info(`getConfigFileNameForFile:: File: ${info.fileName} ProjectRootPath: ${this.openFiles.get(info.path)}:: Result: ${configFileName}`); + this.setConfigFileNameForFileInCache(info, configFileName); + return configFileName; + } + printProjects() { + if (!this.logger.hasLevel(1 /* normal */)) { + return; + } + this.logger.startGroup(); + this.externalProjects.forEach(printProjectWithoutFileNames); + this.configuredProjects.forEach(printProjectWithoutFileNames); + this.inferredProjects.forEach(printProjectWithoutFileNames); + this.logger.info("Open files: "); + this.openFiles.forEach((projectRootPath, path) => { + const info = this.getScriptInfoForPath(path); + this.logger.info(` FileName: ${info.fileName} ProjectRootPath: ${projectRootPath}`); + this.logger.info(` Projects: ${info.containingProjects.map((p) => p.getProjectName())}`); + }); + this.logger.endGroup(); + } + /** @internal */ + findConfiguredProjectByProjectName(configFileName, allowDeferredClosed) { + const canonicalConfigFilePath = asNormalizedPath(this.toCanonicalFileName(configFileName)); + const result = this.getConfiguredProjectByCanonicalConfigFilePath(canonicalConfigFilePath); + return allowDeferredClosed ? result : !(result == null ? void 0 : result.deferredClose) ? result : void 0; + } + getConfiguredProjectByCanonicalConfigFilePath(canonicalConfigFilePath) { + return this.configuredProjects.get(canonicalConfigFilePath); + } + findExternalProjectByProjectName(projectFileName) { + return findProjectByName(projectFileName, this.externalProjects); + } + /** Get a filename if the language service exceeds the maximum allowed program size; otherwise returns undefined. */ + getFilenameForExceededTotalSizeLimitForNonTsFiles(name, options, fileNames, propertyReader) { + if (options && options.disableSizeLimit || !this.host.getFileSize) { + return; + } + let availableSpace = maxProgramSizeForNonTsFiles; + this.projectToSizeMap.set(name, 0); + this.projectToSizeMap.forEach((val) => availableSpace -= val || 0); + let totalNonTsFileSize = 0; + for (const f of fileNames) { + const fileName = propertyReader.getFileName(f); + if (hasTSFileExtension(fileName)) { + continue; + } + totalNonTsFileSize += this.host.getFileSize(fileName); + if (totalNonTsFileSize > maxProgramSizeForNonTsFiles || totalNonTsFileSize > availableSpace) { + const top5LargestFiles = fileNames.map((f2) => propertyReader.getFileName(f2)).filter((name2) => !hasTSFileExtension(name2)).map((name2) => ({ name: name2, size: this.host.getFileSize(name2) })).sort((a, b) => b.size - a.size).slice(0, 5); + this.logger.info(`Non TS file size exceeded limit (${totalNonTsFileSize}). Largest files: ${top5LargestFiles.map((file) => `${file.name}:${file.size}`).join(", ")}`); + return fileName; + } + } + this.projectToSizeMap.set(name, totalNonTsFileSize); + } + createExternalProject(projectFileName, files, options, typeAcquisition, excludedFiles) { + const compilerOptions = convertCompilerOptions(options); + const watchOptionsAndErrors = convertWatchOptions(options, getDirectoryPath(normalizeSlashes(projectFileName))); + const project = new ExternalProject( + projectFileName, + this, + compilerOptions, + /*lastFileExceededProgramSize*/ + this.getFilenameForExceededTotalSizeLimitForNonTsFiles(projectFileName, compilerOptions, files, externalFilePropertyReader), + options.compileOnSave === void 0 ? true : options.compileOnSave, + /*projectFilePath*/ + void 0, + watchOptionsAndErrors == null ? void 0 : watchOptionsAndErrors.watchOptions + ); + project.setProjectErrors(watchOptionsAndErrors == null ? void 0 : watchOptionsAndErrors.errors); + project.excludedFiles = excludedFiles; + this.addFilesToNonInferredProject(project, files, externalFilePropertyReader, typeAcquisition); + this.externalProjects.push(project); + return project; + } + /** @internal */ + sendProjectTelemetry(project) { + if (this.seenProjects.has(project.projectName)) { + setProjectOptionsUsed(project); + return; + } + this.seenProjects.set(project.projectName, true); + if (!this.eventHandler || !this.host.createSHA256Hash) { + setProjectOptionsUsed(project); + return; + } + const projectOptions = isConfiguredProject(project) ? project.projectOptions : void 0; + setProjectOptionsUsed(project); + const data = { + projectId: this.host.createSHA256Hash(project.projectName), + fileStats: countEachFileTypes( + project.getScriptInfos(), + /*includeSizes*/ + true + ), + compilerOptions: convertCompilerOptionsForTelemetry(project.getCompilationSettings()), + typeAcquisition: convertTypeAcquisition2(project.getTypeAcquisition()), + extends: projectOptions && projectOptions.configHasExtendsProperty, + files: projectOptions && projectOptions.configHasFilesProperty, + include: projectOptions && projectOptions.configHasIncludeProperty, + exclude: projectOptions && projectOptions.configHasExcludeProperty, + compileOnSave: project.compileOnSaveEnabled, + configFileName: configFileName(), + projectType: project instanceof ExternalProject ? "external" : "configured", + languageServiceEnabled: project.languageServiceEnabled, + version + }; + this.eventHandler({ eventName: ProjectInfoTelemetryEvent, data }); + function configFileName() { + if (!isConfiguredProject(project)) { + return "other"; + } + return getBaseConfigFileName(project.getConfigFilePath()) || "other"; + } + function convertTypeAcquisition2({ enable: enable2, include, exclude }) { + return { + enable: enable2, + include: include !== void 0 && include.length !== 0, + exclude: exclude !== void 0 && exclude.length !== 0 + }; + } + } + addFilesToNonInferredProject(project, files, propertyReader, typeAcquisition) { + this.updateNonInferredProjectFiles(project, files, propertyReader); + project.setTypeAcquisition(typeAcquisition); + project.markAsDirty(); + } + /** @internal */ + createConfiguredProject(configFileName, reason) { + var _a; + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.Session, "createConfiguredProject", { configFilePath: configFileName }); + const canonicalConfigFilePath = asNormalizedPath(this.toCanonicalFileName(configFileName)); + let configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!configFileExistenceInfo) { + this.configFileExistenceInfoCache.set(canonicalConfigFilePath, configFileExistenceInfo = { exists: true }); + } else { + configFileExistenceInfo.exists = true; + } + if (!configFileExistenceInfo.config) { + configFileExistenceInfo.config = { + cachedDirectoryStructureHost: createCachedDirectoryStructureHost(this.host, this.host.getCurrentDirectory(), this.host.useCaseSensitiveFileNames), + projects: /* @__PURE__ */ new Map(), + updateLevel: 2 /* Full */ + }; + } + const project = new ConfiguredProject2( + configFileName, + canonicalConfigFilePath, + this, + configFileExistenceInfo.config.cachedDirectoryStructureHost, + reason + ); + Debug.assert(!this.configuredProjects.has(canonicalConfigFilePath)); + this.configuredProjects.set(canonicalConfigFilePath, project); + this.createConfigFileWatcherForParsedConfig(configFileName, canonicalConfigFilePath, project); + return project; + } + /** + * Read the config file of the project, and update the project root file names. + */ + loadConfiguredProject(project, reason) { + var _a, _b; + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "loadConfiguredProject", { configFilePath: project.canonicalConfigFilePath }); + this.sendProjectLoadingStartEvent(project, reason); + const configFilename = toNormalizedPath(project.getConfigFilePath()); + const configFileExistenceInfo = this.ensureParsedConfigUptoDate( + configFilename, + project.canonicalConfigFilePath, + this.configFileExistenceInfoCache.get(project.canonicalConfigFilePath), + project + ); + const parsedCommandLine = configFileExistenceInfo.config.parsedCommandLine; + Debug.assert(!!parsedCommandLine.fileNames); + const compilerOptions = parsedCommandLine.options; + if (!project.projectOptions) { + project.projectOptions = { + configHasExtendsProperty: parsedCommandLine.raw.extends !== void 0, + configHasFilesProperty: parsedCommandLine.raw.files !== void 0, + configHasIncludeProperty: parsedCommandLine.raw.include !== void 0, + configHasExcludeProperty: parsedCommandLine.raw.exclude !== void 0 + }; + } + project.parsedCommandLine = parsedCommandLine; + project.setProjectErrors(parsedCommandLine.options.configFile.parseDiagnostics); + project.updateReferences(parsedCommandLine.projectReferences); + const lastFileExceededProgramSize = this.getFilenameForExceededTotalSizeLimitForNonTsFiles(project.canonicalConfigFilePath, compilerOptions, parsedCommandLine.fileNames, fileNamePropertyReader); + if (lastFileExceededProgramSize) { + project.disableLanguageService(lastFileExceededProgramSize); + this.configFileExistenceInfoCache.forEach((_configFileExistenceInfo, canonicalConfigFilePath) => this.stopWatchingWildCards(canonicalConfigFilePath, project)); + } else { + project.setCompilerOptions(compilerOptions); + project.setWatchOptions(parsedCommandLine.watchOptions); + project.enableLanguageService(); + this.watchWildcards(configFilename, configFileExistenceInfo, project); + } + project.enablePluginsWithOptions(compilerOptions); + const filesToAdd = parsedCommandLine.fileNames.concat(project.getExternalFiles(2 /* Full */)); + this.updateRootAndOptionsOfNonInferredProject(project, filesToAdd, fileNamePropertyReader, compilerOptions, parsedCommandLine.typeAcquisition, parsedCommandLine.compileOnSave, parsedCommandLine.watchOptions); + (_b = tracing) == null ? void 0 : _b.pop(); + } + /** @internal */ + ensureParsedConfigUptoDate(configFilename, canonicalConfigFilePath, configFileExistenceInfo, forProject) { + var _a, _b, _c; + if (configFileExistenceInfo.config) { + if (configFileExistenceInfo.config.updateLevel === 1 /* RootNamesAndUpdate */) { + this.reloadFileNamesOfParsedConfig(configFilename, configFileExistenceInfo.config); + } + if (!configFileExistenceInfo.config.updateLevel) { + this.ensureConfigFileWatcherForProject(configFileExistenceInfo, forProject); + return configFileExistenceInfo; + } + } + if (!configFileExistenceInfo.exists && configFileExistenceInfo.config) { + configFileExistenceInfo.config.updateLevel = void 0; + this.ensureConfigFileWatcherForProject(configFileExistenceInfo, forProject); + return configFileExistenceInfo; + } + const cachedDirectoryStructureHost = ((_a = configFileExistenceInfo.config) == null ? void 0 : _a.cachedDirectoryStructureHost) || createCachedDirectoryStructureHost(this.host, this.host.getCurrentDirectory(), this.host.useCaseSensitiveFileNames); + const configFileContent = tryReadFile(configFilename, (fileName) => this.host.readFile(fileName)); + const configFile = parseJsonText(configFilename, isString(configFileContent) ? configFileContent : ""); + const configFileErrors = configFile.parseDiagnostics; + if (!isString(configFileContent)) configFileErrors.push(configFileContent); + const configDir = getDirectoryPath(configFilename); + const parsedCommandLine = parseJsonSourceFileConfigFileContent( + configFile, + cachedDirectoryStructureHost, + configDir, + /*existingOptions*/ + void 0, + configFilename, + /*resolutionStack*/ + void 0, + this.hostConfiguration.extraFileExtensions, + this.extendedConfigCache + ); + if (parsedCommandLine.errors.length) { + configFileErrors.push(...parsedCommandLine.errors); + } + this.logger.info(`Config: ${configFilename} : ${JSON.stringify( + { + rootNames: parsedCommandLine.fileNames, + options: parsedCommandLine.options, + watchOptions: parsedCommandLine.watchOptions, + projectReferences: parsedCommandLine.projectReferences + }, + /*replacer*/ + void 0, + " " + )}`); + const oldCommandLine = (_b = configFileExistenceInfo.config) == null ? void 0 : _b.parsedCommandLine; + if (!configFileExistenceInfo.config) { + configFileExistenceInfo.config = { parsedCommandLine, cachedDirectoryStructureHost, projects: /* @__PURE__ */ new Map() }; + } else { + configFileExistenceInfo.config.parsedCommandLine = parsedCommandLine; + configFileExistenceInfo.config.watchedDirectoriesStale = true; + configFileExistenceInfo.config.updateLevel = void 0; + } + if (!oldCommandLine && !isJsonEqual( + // Old options + this.getWatchOptionsFromProjectWatchOptions( + /*projectOptions*/ + void 0, + configDir + ), + // New options + this.getWatchOptionsFromProjectWatchOptions(parsedCommandLine.watchOptions, configDir) + )) { + (_c = configFileExistenceInfo.watcher) == null ? void 0 : _c.close(); + configFileExistenceInfo.watcher = void 0; + } + this.createConfigFileWatcherForParsedConfig(configFilename, canonicalConfigFilePath, forProject); + updateSharedExtendedConfigFileWatcher( + canonicalConfigFilePath, + parsedCommandLine.options, + this.sharedExtendedConfigFileWatchers, + (extendedConfigFileName, extendedConfigFilePath) => this.watchFactory.watchFile( + extendedConfigFileName, + () => { + var _a2; + cleanExtendedConfigCache(this.extendedConfigCache, extendedConfigFilePath, (fileName) => this.toPath(fileName)); + let ensureProjectsForOpenFiles = false; + (_a2 = this.sharedExtendedConfigFileWatchers.get(extendedConfigFilePath)) == null ? void 0 : _a2.projects.forEach((canonicalPath) => { + ensureProjectsForOpenFiles = this.delayUpdateProjectsFromParsedConfigOnConfigFileChange(canonicalPath, `Change in extended config file ${extendedConfigFileName} detected`) || ensureProjectsForOpenFiles; + }); + if (ensureProjectsForOpenFiles) this.delayEnsureProjectForOpenFiles(); + }, + 2e3 /* High */, + this.hostConfiguration.watchOptions, + WatchType.ExtendedConfigFile, + configFilename + ), + (fileName) => this.toPath(fileName) + ); + return configFileExistenceInfo; + } + /** @internal */ + watchWildcards(configFileName, { exists, config }, forProject) { + config.projects.set(forProject.canonicalConfigFilePath, true); + if (exists) { + if (config.watchedDirectories && !config.watchedDirectoriesStale) return; + config.watchedDirectoriesStale = false; + updateWatchingWildcardDirectories( + config.watchedDirectories || (config.watchedDirectories = /* @__PURE__ */ new Map()), + config.parsedCommandLine.wildcardDirectories, + // Create new directory watcher + (directory, flags) => this.watchWildcardDirectory(directory, flags, configFileName, config) + ); + } else { + config.watchedDirectoriesStale = false; + if (!config.watchedDirectories) return; + clearMap(config.watchedDirectories, closeFileWatcherOf); + config.watchedDirectories = void 0; + } + } + /** @internal */ + stopWatchingWildCards(canonicalConfigFilePath, forProject) { + const configFileExistenceInfo = this.configFileExistenceInfoCache.get(canonicalConfigFilePath); + if (!configFileExistenceInfo.config || !configFileExistenceInfo.config.projects.get(forProject.canonicalConfigFilePath)) { + return; + } + configFileExistenceInfo.config.projects.set(forProject.canonicalConfigFilePath, false); + if (forEachEntry(configFileExistenceInfo.config.projects, identity)) return; + if (configFileExistenceInfo.config.watchedDirectories) { + clearMap(configFileExistenceInfo.config.watchedDirectories, closeFileWatcherOf); + configFileExistenceInfo.config.watchedDirectories = void 0; + } + configFileExistenceInfo.config.watchedDirectoriesStale = void 0; + } + updateNonInferredProjectFiles(project, files, propertyReader) { + var _a; + const projectRootFilesMap = project.getRootFilesMap(); + const newRootScriptInfoMap = /* @__PURE__ */ new Map(); + for (const f of files) { + const newRootFile = propertyReader.getFileName(f); + const fileName = toNormalizedPath(newRootFile); + const isDynamic = isDynamicFileName(fileName); + let path; + if (!isDynamic && !project.fileExists(newRootFile)) { + path = normalizedPathToPath(fileName, this.currentDirectory, this.toCanonicalFileName); + const existingValue = projectRootFilesMap.get(path); + if (existingValue) { + if (((_a = existingValue.info) == null ? void 0 : _a.path) === path) { + project.removeFile( + existingValue.info, + /*fileExists*/ + false, + /*detachFromProject*/ + true + ); + existingValue.info = void 0; + } + existingValue.fileName = fileName; + } else { + projectRootFilesMap.set(path, { fileName }); + } + } else { + const scriptKind = propertyReader.getScriptKind(f, this.hostConfiguration.extraFileExtensions); + const hasMixedContent = propertyReader.hasMixedContent(f, this.hostConfiguration.extraFileExtensions); + const scriptInfo = Debug.checkDefined(this.getOrCreateScriptInfoNotOpenedByClientForNormalizedPath( + fileName, + project.currentDirectory, + scriptKind, + hasMixedContent, + project.directoryStructureHost, + /*deferredDeleteOk*/ + false + )); + path = scriptInfo.path; + const existingValue = projectRootFilesMap.get(path); + if (!existingValue || existingValue.info !== scriptInfo) { + project.addRoot(scriptInfo, fileName); + if (scriptInfo.isScriptOpen()) { + this.removeRootOfInferredProjectIfNowPartOfOtherProject(scriptInfo); + } + } else { + existingValue.fileName = fileName; + } + } + newRootScriptInfoMap.set(path, true); + } + if (projectRootFilesMap.size > newRootScriptInfoMap.size) { + projectRootFilesMap.forEach((value, path) => { + if (!newRootScriptInfoMap.has(path)) { + if (value.info) { + project.removeFile( + value.info, + project.fileExists(value.info.fileName), + /*detachFromProject*/ + true + ); + } else { + projectRootFilesMap.delete(path); + } + } + }); + } + } + updateRootAndOptionsOfNonInferredProject(project, newUncheckedFiles, propertyReader, newOptions, newTypeAcquisition, compileOnSave, watchOptions) { + project.setCompilerOptions(newOptions); + project.setWatchOptions(watchOptions); + if (compileOnSave !== void 0) { + project.compileOnSaveEnabled = compileOnSave; + } + this.addFilesToNonInferredProject(project, newUncheckedFiles, propertyReader, newTypeAcquisition); + } + /** + * Reload the file names from config file specs and update the project graph + * + * @internal + */ + reloadFileNamesOfConfiguredProject(project) { + const config = this.reloadFileNamesOfParsedConfig(project.getConfigFilePath(), this.configFileExistenceInfoCache.get(project.canonicalConfigFilePath).config); + project.updateErrorOnNoInputFiles(config); + this.updateNonInferredProjectFiles( + project, + config.fileNames.concat(project.getExternalFiles(1 /* RootNamesAndUpdate */)), + fileNamePropertyReader + ); + project.markAsDirty(); + return project.updateGraph(); + } + reloadFileNamesOfParsedConfig(configFileName, config) { + if (config.updateLevel === void 0) return config.parsedCommandLine; + Debug.assert(config.updateLevel === 1 /* RootNamesAndUpdate */); + const configFileSpecs = config.parsedCommandLine.options.configFile.configFileSpecs; + const fileNames = getFileNamesFromConfigSpecs( + configFileSpecs, + getDirectoryPath(configFileName), + config.parsedCommandLine.options, + config.cachedDirectoryStructureHost, + this.hostConfiguration.extraFileExtensions + ); + config.parsedCommandLine = { ...config.parsedCommandLine, fileNames }; + config.updateLevel = void 0; + return config.parsedCommandLine; + } + /** @internal */ + setFileNamesOfAutoImportProviderOrAuxillaryProject(project, fileNames) { + this.updateNonInferredProjectFiles(project, fileNames, fileNamePropertyReader); + } + /** @internal */ + reloadConfiguredProjectOptimized(project, reason, reloadedProjects) { + if (reloadedProjects.has(project)) return; + reloadedProjects.set(project, 6 /* ReloadOptimized */); + if (!project.initialLoadPending) { + this.setProjectForReload(project, 2 /* Full */, reason); + } + } + /** @internal */ + reloadConfiguredProjectClearingSemanticCache(project, reason, reloadedProjects) { + if (reloadedProjects.get(project) === 7 /* Reload */) return false; + reloadedProjects.set(project, 7 /* Reload */); + this.clearSemanticCache(project); + this.reloadConfiguredProject(project, reloadReason(reason)); + return true; + } + setProjectForReload(project, updateLevel, reason) { + if (updateLevel === 2 /* Full */) this.clearSemanticCache(project); + project.pendingUpdateReason = reason && reloadReason(reason); + project.pendingUpdateLevel = updateLevel; + } + /** + * Read the config file of the project again by clearing the cache and update the project graph + * + * @internal + */ + reloadConfiguredProject(project, reason) { + project.initialLoadPending = false; + this.setProjectForReload(project, 0 /* Update */); + this.loadConfiguredProject(project, reason); + updateWithTriggerFile( + project, + project.triggerFileForConfigFileDiag ?? project.getConfigFilePath(), + /*isReload*/ + true + ); + } + clearSemanticCache(project) { + project.originalConfiguredProjects = void 0; + project.resolutionCache.clear(); + project.getLanguageService( + /*ensureSynchronized*/ + false + ).cleanupSemanticCache(); + project.cleanupProgram(); + project.markAsDirty(); + } + /** @internal */ + sendConfigFileDiagEvent(project, triggerFile, force) { + if (!this.eventHandler || this.suppressDiagnosticEvents) return false; + const diagnostics = project.getLanguageService().getCompilerOptionsDiagnostics(); + diagnostics.push(...project.getAllProjectErrors()); + if (!force && diagnostics.length === (project.configDiagDiagnosticsReported ?? 0)) return false; + project.configDiagDiagnosticsReported = diagnostics.length; + this.eventHandler( + { + eventName: ConfigFileDiagEvent, + data: { configFileName: project.getConfigFilePath(), diagnostics, triggerFile: triggerFile ?? project.getConfigFilePath() } + } + ); + return true; + } + getOrCreateInferredProjectForProjectRootPathIfEnabled(info, projectRootPath) { + if (!this.useInferredProjectPerProjectRoot || // Its a dynamic info opened without project root + info.isDynamic && projectRootPath === void 0) { + return void 0; + } + if (projectRootPath) { + const canonicalProjectRootPath = this.toCanonicalFileName(projectRootPath); + for (const project of this.inferredProjects) { + if (project.projectRootPath === canonicalProjectRootPath) { + return project; + } + } + return this.createInferredProject( + projectRootPath, + /*isSingleInferredProject*/ + false, + projectRootPath + ); + } + let bestMatch; + for (const project of this.inferredProjects) { + if (!project.projectRootPath) continue; + if (!containsPath(project.projectRootPath, info.path, this.host.getCurrentDirectory(), !this.host.useCaseSensitiveFileNames)) continue; + if (bestMatch && bestMatch.projectRootPath.length > project.projectRootPath.length) continue; + bestMatch = project; + } + return bestMatch; + } + getOrCreateSingleInferredProjectIfEnabled() { + if (!this.useSingleInferredProject) { + return void 0; + } + if (this.inferredProjects.length > 0 && this.inferredProjects[0].projectRootPath === void 0) { + return this.inferredProjects[0]; + } + return this.createInferredProject( + this.currentDirectory, + /*isSingleInferredProject*/ + true, + /*projectRootPath*/ + void 0 + ); + } + getOrCreateSingleInferredWithoutProjectRoot(currentDirectory) { + Debug.assert(!this.useSingleInferredProject); + const expectedCurrentDirectory = this.toCanonicalFileName(this.getNormalizedAbsolutePath(currentDirectory)); + for (const inferredProject of this.inferredProjects) { + if (!inferredProject.projectRootPath && inferredProject.isOrphan() && inferredProject.canonicalCurrentDirectory === expectedCurrentDirectory) { + return inferredProject; + } + } + return this.createInferredProject( + currentDirectory, + /*isSingleInferredProject*/ + false, + /*projectRootPath*/ + void 0 + ); + } + createInferredProject(currentDirectory, isSingleInferredProject, projectRootPath) { + const compilerOptions = projectRootPath && this.compilerOptionsForInferredProjectsPerProjectRoot.get(projectRootPath) || this.compilerOptionsForInferredProjects; + let watchOptionsAndErrors; + let typeAcquisition; + if (projectRootPath) { + watchOptionsAndErrors = this.watchOptionsForInferredProjectsPerProjectRoot.get(projectRootPath); + typeAcquisition = this.typeAcquisitionForInferredProjectsPerProjectRoot.get(projectRootPath); + } + if (watchOptionsAndErrors === void 0) { + watchOptionsAndErrors = this.watchOptionsForInferredProjects; + } + if (typeAcquisition === void 0) { + typeAcquisition = this.typeAcquisitionForInferredProjects; + } + watchOptionsAndErrors = watchOptionsAndErrors || void 0; + const project = new InferredProject2( + this, + compilerOptions, + watchOptionsAndErrors == null ? void 0 : watchOptionsAndErrors.watchOptions, + projectRootPath, + currentDirectory, + typeAcquisition + ); + project.setProjectErrors(watchOptionsAndErrors == null ? void 0 : watchOptionsAndErrors.errors); + if (isSingleInferredProject) { + this.inferredProjects.unshift(project); + } else { + this.inferredProjects.push(project); + } + return project; + } + /** @internal */ + getOrCreateScriptInfoNotOpenedByClient(uncheckedFileName, currentDirectory, hostToQueryFileExistsOn, deferredDeleteOk) { + return this.getOrCreateScriptInfoNotOpenedByClientForNormalizedPath( + toNormalizedPath(uncheckedFileName), + currentDirectory, + /*scriptKind*/ + void 0, + /*hasMixedContent*/ + void 0, + hostToQueryFileExistsOn, + deferredDeleteOk + ); + } + getScriptInfo(uncheckedFileName) { + return this.getScriptInfoForNormalizedPath(toNormalizedPath(uncheckedFileName)); + } + /** @internal */ + getScriptInfoOrConfig(uncheckedFileName) { + const path = toNormalizedPath(uncheckedFileName); + const info = this.getScriptInfoForNormalizedPath(path); + if (info) return info; + const configProject = this.configuredProjects.get(this.toPath(uncheckedFileName)); + return configProject && configProject.getCompilerOptions().configFile; + } + /** @internal */ + logErrorForScriptInfoNotFound(fileName) { + const names = arrayFrom( + mapDefinedIterator( + this.filenameToScriptInfo.entries(), + (entry) => entry[1].deferredDelete ? void 0 : entry + ), + ([path, scriptInfo]) => ({ path, fileName: scriptInfo.fileName }) + ); + this.logger.msg(`Could not find file ${JSON.stringify(fileName)}. +All files are: ${JSON.stringify(names)}`, "Err" /* Err */); + } + /** + * Returns the projects that contain script info through SymLink + * Note that this does not return projects in info.containingProjects + * + * @internal + */ + getSymlinkedProjects(info) { + let projects; + if (this.realpathToScriptInfos) { + const realpath = info.getRealpathIfDifferent(); + if (realpath) { + forEach(this.realpathToScriptInfos.get(realpath), combineProjects); + } + forEach(this.realpathToScriptInfos.get(info.path), combineProjects); + } + return projects; + function combineProjects(toAddInfo) { + if (toAddInfo !== info) { + for (const project of toAddInfo.containingProjects) { + if (project.languageServiceEnabled && !project.isOrphan() && !project.getCompilerOptions().preserveSymlinks && !info.isAttached(project)) { + if (!projects) { + projects = createMultiMap(); + projects.add(toAddInfo.path, project); + } else if (!forEachEntry(projects, (projs, path) => path === toAddInfo.path ? false : contains(projs, project))) { + projects.add(toAddInfo.path, project); + } + } + } + } + } + } + watchClosedScriptInfo(info) { + Debug.assert(!info.fileWatcher); + if (!info.isDynamicOrHasMixedContent() && (!this.globalCacheLocationDirectoryPath || !startsWith(info.path, this.globalCacheLocationDirectoryPath))) { + const indexOfNodeModules = info.fileName.indexOf("/node_modules/"); + if (!this.host.getModifiedTime || indexOfNodeModules === -1) { + info.fileWatcher = this.watchFactory.watchFile( + info.fileName, + (_fileName, eventKind) => this.onSourceFileChanged(info, eventKind), + 500 /* Medium */, + this.hostConfiguration.watchOptions, + WatchType.ClosedScriptInfo + ); + } else { + info.mTime = this.getModifiedTime(info); + info.fileWatcher = this.watchClosedScriptInfoInNodeModules(info.fileName.substring(0, indexOfNodeModules)); + } + } + } + createNodeModulesWatcher(dir, dirPath) { + let watcher = this.watchFactory.watchDirectory( + dir, + (fileOrDirectory) => { + var _a; + const fileOrDirectoryPath = removeIgnoredPath(this.toPath(fileOrDirectory)); + if (!fileOrDirectoryPath) return; + const basename = getBaseFileName(fileOrDirectoryPath); + if (((_a = result.affectedModuleSpecifierCacheProjects) == null ? void 0 : _a.size) && (basename === "package.json" || basename === "node_modules")) { + result.affectedModuleSpecifierCacheProjects.forEach((project) => { + var _a2; + (_a2 = project.getModuleSpecifierCache()) == null ? void 0 : _a2.clear(); + }); + } + if (result.refreshScriptInfoRefCount) { + if (dirPath === fileOrDirectoryPath) { + this.refreshScriptInfosInDirectory(dirPath); + } else { + const info = this.filenameToScriptInfo.get(fileOrDirectoryPath); + if (info) { + if (isScriptInfoWatchedFromNodeModules(info)) { + this.refreshScriptInfo(info); + } + } else if (!hasExtension(fileOrDirectoryPath)) { + this.refreshScriptInfosInDirectory(fileOrDirectoryPath); + } + } + } + }, + 1 /* Recursive */, + this.hostConfiguration.watchOptions, + WatchType.NodeModules + ); + const result = { + refreshScriptInfoRefCount: 0, + affectedModuleSpecifierCacheProjects: void 0, + close: () => { + var _a; + if (watcher && !result.refreshScriptInfoRefCount && !((_a = result.affectedModuleSpecifierCacheProjects) == null ? void 0 : _a.size)) { + watcher.close(); + watcher = void 0; + this.nodeModulesWatchers.delete(dirPath); + } + } + }; + this.nodeModulesWatchers.set(dirPath, result); + return result; + } + /** @internal */ + watchPackageJsonsInNodeModules(dir, project) { + var _a; + const dirPath = this.toPath(dir); + const watcher = this.nodeModulesWatchers.get(dirPath) || this.createNodeModulesWatcher(dir, dirPath); + Debug.assert(!((_a = watcher.affectedModuleSpecifierCacheProjects) == null ? void 0 : _a.has(project))); + (watcher.affectedModuleSpecifierCacheProjects || (watcher.affectedModuleSpecifierCacheProjects = /* @__PURE__ */ new Set())).add(project); + return { + close: () => { + var _a2; + (_a2 = watcher.affectedModuleSpecifierCacheProjects) == null ? void 0 : _a2.delete(project); + watcher.close(); + } + }; + } + watchClosedScriptInfoInNodeModules(dir) { + const watchDir = dir + "/node_modules"; + const watchDirPath = this.toPath(watchDir); + const watcher = this.nodeModulesWatchers.get(watchDirPath) || this.createNodeModulesWatcher(watchDir, watchDirPath); + watcher.refreshScriptInfoRefCount++; + return { + close: () => { + watcher.refreshScriptInfoRefCount--; + watcher.close(); + } + }; + } + getModifiedTime(info) { + return (this.host.getModifiedTime(info.fileName) || missingFileModifiedTime).getTime(); + } + refreshScriptInfo(info) { + const mTime = this.getModifiedTime(info); + if (mTime !== info.mTime) { + const eventKind = getFileWatcherEventKind(info.mTime, mTime); + info.mTime = mTime; + this.onSourceFileChanged(info, eventKind); + } + } + refreshScriptInfosInDirectory(dir) { + dir = dir + directorySeparator; + this.filenameToScriptInfo.forEach((info) => { + if (isScriptInfoWatchedFromNodeModules(info) && startsWith(info.path, dir)) { + this.refreshScriptInfo(info); + } + }); + } + stopWatchingScriptInfo(info) { + if (info.fileWatcher) { + info.fileWatcher.close(); + info.fileWatcher = void 0; + } + } + getOrCreateScriptInfoNotOpenedByClientForNormalizedPath(fileName, currentDirectory, scriptKind, hasMixedContent, hostToQueryFileExistsOn, deferredDeleteOk) { + if (isRootedDiskPath(fileName) || isDynamicFileName(fileName)) { + return this.getOrCreateScriptInfoWorker( + fileName, + currentDirectory, + /*openedByClient*/ + false, + /*fileContent*/ + void 0, + scriptKind, + !!hasMixedContent, + hostToQueryFileExistsOn, + deferredDeleteOk + ); + } + const info = this.openFilesWithNonRootedDiskPath.get(this.toCanonicalFileName(fileName)); + if (info) { + return info; + } + return void 0; + } + getOrCreateScriptInfoForNormalizedPath(fileName, openedByClient, fileContent, scriptKind, hasMixedContent, hostToQueryFileExistsOn) { + return this.getOrCreateScriptInfoWorker( + fileName, + this.currentDirectory, + openedByClient, + fileContent, + scriptKind, + !!hasMixedContent, + hostToQueryFileExistsOn, + /*deferredDeleteOk*/ + false + ); + } + getOrCreateScriptInfoWorker(fileName, currentDirectory, openedByClient, fileContent, scriptKind, hasMixedContent, hostToQueryFileExistsOn, deferredDeleteOk) { + Debug.assert(fileContent === void 0 || openedByClient, "ScriptInfo needs to be opened by client to be able to set its user defined content"); + const path = normalizedPathToPath(fileName, currentDirectory, this.toCanonicalFileName); + let info = this.filenameToScriptInfo.get(path); + if (!info) { + const isDynamic = isDynamicFileName(fileName); + Debug.assert(isRootedDiskPath(fileName) || isDynamic || openedByClient, "", () => `${JSON.stringify({ fileName, currentDirectory, hostCurrentDirectory: this.currentDirectory, openKeys: arrayFrom(this.openFilesWithNonRootedDiskPath.keys()) })} +Script info with non-dynamic relative file name can only be open script info or in context of host currentDirectory`); + Debug.assert(!isRootedDiskPath(fileName) || this.currentDirectory === currentDirectory || !this.openFilesWithNonRootedDiskPath.has(this.toCanonicalFileName(fileName)), "", () => `${JSON.stringify({ fileName, currentDirectory, hostCurrentDirectory: this.currentDirectory, openKeys: arrayFrom(this.openFilesWithNonRootedDiskPath.keys()) })} +Open script files with non rooted disk path opened with current directory context cannot have same canonical names`); + Debug.assert(!isDynamic || this.currentDirectory === currentDirectory || this.useInferredProjectPerProjectRoot, "", () => `${JSON.stringify({ fileName, currentDirectory, hostCurrentDirectory: this.currentDirectory, openKeys: arrayFrom(this.openFilesWithNonRootedDiskPath.keys()) })} +Dynamic files must always be opened with service's current directory or service should support inferred project per projectRootPath.`); + if (!openedByClient && !isDynamic && !(hostToQueryFileExistsOn || this.host).fileExists(fileName)) { + return; + } + info = new ScriptInfo(this.host, fileName, scriptKind, hasMixedContent, path, this.filenameToScriptInfoVersion.get(path)); + this.filenameToScriptInfo.set(info.path, info); + this.filenameToScriptInfoVersion.delete(info.path); + if (!openedByClient) { + this.watchClosedScriptInfo(info); + } else if (!isRootedDiskPath(fileName) && (!isDynamic || this.currentDirectory !== currentDirectory)) { + this.openFilesWithNonRootedDiskPath.set(this.toCanonicalFileName(fileName), info); + } + } else if (info.deferredDelete) { + Debug.assert(!info.isDynamic); + if (!openedByClient && !(hostToQueryFileExistsOn || this.host).fileExists(fileName)) { + return deferredDeleteOk ? info : void 0; + } + info.deferredDelete = void 0; + } + if (openedByClient) { + this.stopWatchingScriptInfo(info); + info.open(fileContent); + if (hasMixedContent) { + info.registerFileUpdate(); + } + } + return info; + } + /** + * This gets the script info for the normalized path. If the path is not rooted disk path then the open script info with project root context is preferred + */ + getScriptInfoForNormalizedPath(fileName) { + return !isRootedDiskPath(fileName) && this.openFilesWithNonRootedDiskPath.get(this.toCanonicalFileName(fileName)) || this.getScriptInfoForPath(normalizedPathToPath(fileName, this.currentDirectory, this.toCanonicalFileName)); + } + getScriptInfoForPath(fileName) { + const info = this.filenameToScriptInfo.get(fileName); + return !info || !info.deferredDelete ? info : void 0; + } + /** @internal */ + getDocumentPositionMapper(project, generatedFileName, sourceFileName) { + const declarationInfo = this.getOrCreateScriptInfoNotOpenedByClient( + generatedFileName, + project.currentDirectory, + this.host, + /*deferredDeleteOk*/ + false + ); + if (!declarationInfo) { + if (sourceFileName) { + project.addGeneratedFileWatch(generatedFileName, sourceFileName); + } + return void 0; + } + declarationInfo.getSnapshot(); + if (isString(declarationInfo.sourceMapFilePath)) { + const sourceMapFileInfo2 = this.getScriptInfoForPath(declarationInfo.sourceMapFilePath); + if (sourceMapFileInfo2) { + sourceMapFileInfo2.getSnapshot(); + if (sourceMapFileInfo2.documentPositionMapper !== void 0) { + sourceMapFileInfo2.sourceInfos = this.addSourceInfoToSourceMap(sourceFileName, project, sourceMapFileInfo2.sourceInfos); + return sourceMapFileInfo2.documentPositionMapper ? sourceMapFileInfo2.documentPositionMapper : void 0; + } + } + declarationInfo.sourceMapFilePath = void 0; + } else if (declarationInfo.sourceMapFilePath) { + declarationInfo.sourceMapFilePath.sourceInfos = this.addSourceInfoToSourceMap(sourceFileName, project, declarationInfo.sourceMapFilePath.sourceInfos); + return void 0; + } else if (declarationInfo.sourceMapFilePath !== void 0) { + return void 0; + } + let sourceMapFileInfo; + let readMapFile = (mapFileName, mapFileNameFromDts) => { + const mapInfo = this.getOrCreateScriptInfoNotOpenedByClient( + mapFileName, + project.currentDirectory, + this.host, + /*deferredDeleteOk*/ + true + ); + sourceMapFileInfo = mapInfo || mapFileNameFromDts; + if (!mapInfo || mapInfo.deferredDelete) return void 0; + const snap = mapInfo.getSnapshot(); + if (mapInfo.documentPositionMapper !== void 0) return mapInfo.documentPositionMapper; + return getSnapshotText(snap); + }; + const projectName = project.projectName; + const documentPositionMapper = getDocumentPositionMapper( + { getCanonicalFileName: this.toCanonicalFileName, log: (s) => this.logger.info(s), getSourceFileLike: (f) => this.getSourceFileLike(f, projectName, declarationInfo) }, + declarationInfo.fileName, + declarationInfo.textStorage.getLineInfo(), + readMapFile + ); + readMapFile = void 0; + if (sourceMapFileInfo) { + if (!isString(sourceMapFileInfo)) { + declarationInfo.sourceMapFilePath = sourceMapFileInfo.path; + sourceMapFileInfo.declarationInfoPath = declarationInfo.path; + if (!sourceMapFileInfo.deferredDelete) sourceMapFileInfo.documentPositionMapper = documentPositionMapper || false; + sourceMapFileInfo.sourceInfos = this.addSourceInfoToSourceMap(sourceFileName, project, sourceMapFileInfo.sourceInfos); + } else { + declarationInfo.sourceMapFilePath = { + watcher: this.addMissingSourceMapFile( + project.currentDirectory === this.currentDirectory ? sourceMapFileInfo : getNormalizedAbsolutePath(sourceMapFileInfo, project.currentDirectory), + declarationInfo.path + ), + sourceInfos: this.addSourceInfoToSourceMap(sourceFileName, project) + }; + } + } else { + declarationInfo.sourceMapFilePath = false; + } + return documentPositionMapper; + } + addSourceInfoToSourceMap(sourceFileName, project, sourceInfos) { + if (sourceFileName) { + const sourceInfo = this.getOrCreateScriptInfoNotOpenedByClient( + sourceFileName, + project.currentDirectory, + project.directoryStructureHost, + /*deferredDeleteOk*/ + false + ); + (sourceInfos || (sourceInfos = /* @__PURE__ */ new Set())).add(sourceInfo.path); + } + return sourceInfos; + } + addMissingSourceMapFile(mapFileName, declarationInfoPath) { + const fileWatcher = this.watchFactory.watchFile( + mapFileName, + () => { + const declarationInfo = this.getScriptInfoForPath(declarationInfoPath); + if (declarationInfo && declarationInfo.sourceMapFilePath && !isString(declarationInfo.sourceMapFilePath)) { + this.delayUpdateProjectGraphs( + declarationInfo.containingProjects, + /*clearSourceMapperCache*/ + true + ); + this.delayUpdateSourceInfoProjects(declarationInfo.sourceMapFilePath.sourceInfos); + declarationInfo.closeSourceMapFileWatcher(); + } + }, + 2e3 /* High */, + this.hostConfiguration.watchOptions, + WatchType.MissingSourceMapFile + ); + return fileWatcher; + } + /** @internal */ + getSourceFileLike(fileName, projectNameOrProject, declarationInfo) { + const project = projectNameOrProject.projectName ? projectNameOrProject : this.findProject(projectNameOrProject); + if (project) { + const path = project.toPath(fileName); + const sourceFile = project.getSourceFile(path); + if (sourceFile && sourceFile.resolvedPath === path) return sourceFile; + } + const info = this.getOrCreateScriptInfoNotOpenedByClient( + fileName, + (project || this).currentDirectory, + project ? project.directoryStructureHost : this.host, + /*deferredDeleteOk*/ + false + ); + if (!info) return void 0; + if (declarationInfo && isString(declarationInfo.sourceMapFilePath) && info !== declarationInfo) { + const sourceMapInfo = this.getScriptInfoForPath(declarationInfo.sourceMapFilePath); + if (sourceMapInfo) { + (sourceMapInfo.sourceInfos ?? (sourceMapInfo.sourceInfos = /* @__PURE__ */ new Set())).add(info.path); + } + } + if (info.cacheSourceFile) return info.cacheSourceFile.sourceFile; + if (!info.sourceFileLike) { + info.sourceFileLike = { + get text() { + Debug.fail("shouldnt need text"); + return ""; + }, + getLineAndCharacterOfPosition: (pos) => { + const lineOffset = info.positionToLineOffset(pos); + return { line: lineOffset.line - 1, character: lineOffset.offset - 1 }; + }, + getPositionOfLineAndCharacter: (line, character, allowEdits) => info.lineOffsetToPosition(line + 1, character + 1, allowEdits) + }; + } + return info.sourceFileLike; + } + /** @internal */ + setPerformanceEventHandler(performanceEventHandler) { + this.performanceEventHandler = performanceEventHandler; + } + setHostConfiguration(args) { + var _a; + if (args.file) { + const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(args.file)); + if (info) { + info.setOptions(convertFormatOptions(args.formatOptions), args.preferences); + this.logger.info(`Host configuration update for file ${args.file}`); + } + } else { + if (args.hostInfo !== void 0) { + this.hostConfiguration.hostInfo = args.hostInfo; + this.logger.info(`Host information ${args.hostInfo}`); + } + if (args.formatOptions) { + this.hostConfiguration.formatCodeOptions = { ...this.hostConfiguration.formatCodeOptions, ...convertFormatOptions(args.formatOptions) }; + this.logger.info("Format host information updated"); + } + if (args.preferences) { + const { + lazyConfiguredProjectsFromExternalProject, + includePackageJsonAutoImports, + includeCompletionsForModuleExports + } = this.hostConfiguration.preferences; + this.hostConfiguration.preferences = { ...this.hostConfiguration.preferences, ...args.preferences }; + if (lazyConfiguredProjectsFromExternalProject && !this.hostConfiguration.preferences.lazyConfiguredProjectsFromExternalProject) { + this.externalProjectToConfiguredProjectMap.forEach( + (projects) => projects.forEach((project) => { + if (!project.deferredClose && !project.isClosed() && project.pendingUpdateLevel === 2 /* Full */ && !this.hasPendingProjectUpdate(project)) { + project.updateGraph(); + } + }) + ); + } + if (includePackageJsonAutoImports !== args.preferences.includePackageJsonAutoImports || !!includeCompletionsForModuleExports !== !!args.preferences.includeCompletionsForModuleExports) { + this.forEachProject((project) => { + project.onAutoImportProviderSettingsChanged(); + }); + } + } + if (args.extraFileExtensions) { + this.hostConfiguration.extraFileExtensions = args.extraFileExtensions; + this.reloadProjects(); + this.logger.info("Host file extension mappings updated"); + } + if (args.watchOptions) { + const watchOptions = (_a = convertWatchOptions(args.watchOptions)) == null ? void 0 : _a.watchOptions; + const substitution = handleWatchOptionsConfigDirTemplateSubstitution(watchOptions, this.currentDirectory); + this.hostConfiguration.watchOptions = substitution; + this.hostConfiguration.beforeSubstitution = substitution === watchOptions ? void 0 : watchOptions; + this.logger.info(`Host watch options changed to ${JSON.stringify(this.hostConfiguration.watchOptions)}, it will be take effect for next watches.`); + } + } + } + /** @internal */ + getWatchOptions(project) { + return this.getWatchOptionsFromProjectWatchOptions(project.getWatchOptions(), project.getCurrentDirectory()); + } + getWatchOptionsFromProjectWatchOptions(projectOptions, basePath) { + const hostWatchOptions = !this.hostConfiguration.beforeSubstitution ? this.hostConfiguration.watchOptions : handleWatchOptionsConfigDirTemplateSubstitution( + this.hostConfiguration.beforeSubstitution, + basePath + ); + return projectOptions && hostWatchOptions ? { ...hostWatchOptions, ...projectOptions } : projectOptions || hostWatchOptions; + } + closeLog() { + this.logger.close(); + } + sendSourceFileChange(inPath) { + this.filenameToScriptInfo.forEach((info) => { + if (this.openFiles.has(info.path)) return; + if (!info.fileWatcher) return; + const eventKind = memoize( + () => this.host.fileExists(info.fileName) ? info.deferredDelete ? 0 /* Created */ : 1 /* Changed */ : 2 /* Deleted */ + ); + if (inPath) { + if (isScriptInfoWatchedFromNodeModules(info) || !info.path.startsWith(inPath)) return; + if (eventKind() === 2 /* Deleted */ && info.deferredDelete) return; + this.logger.info(`Invoking sourceFileChange on ${info.fileName}:: ${eventKind()}`); + } + this.onSourceFileChanged( + info, + eventKind() + ); + }); + } + /** + * This function rebuilds the project for every file opened by the client + * This does not reload contents of open files from disk. But we could do that if needed + */ + reloadProjects() { + this.logger.info("reload projects."); + this.sendSourceFileChange( + /*inPath*/ + void 0 + ); + this.pendingProjectUpdates.forEach((_project, projectName) => { + this.throttledOperations.cancel(projectName); + this.pendingProjectUpdates.delete(projectName); + }); + this.throttledOperations.cancel(ensureProjectForOpenFileSchedule); + this.pendingOpenFileProjectUpdates = void 0; + this.pendingEnsureProjectForOpenFiles = false; + this.configFileExistenceInfoCache.forEach((info) => { + if (info.config) { + info.config.updateLevel = 2 /* Full */; + info.config.cachedDirectoryStructureHost.clearCache(); + } + }); + this.configFileForOpenFiles.clear(); + this.externalProjects.forEach((project) => { + this.clearSemanticCache(project); + project.updateGraph(); + }); + const reloadedConfiguredProjects = /* @__PURE__ */ new Map(); + const delayReloadedConfiguredProjects = /* @__PURE__ */ new Set(); + this.externalProjectToConfiguredProjectMap.forEach((projects, externalProjectName) => { + const reason = `Reloading configured project in external project: ${externalProjectName}`; + projects.forEach((project) => { + if (this.getHostPreferences().lazyConfiguredProjectsFromExternalProject) { + this.reloadConfiguredProjectOptimized(project, reason, reloadedConfiguredProjects); + } else { + this.reloadConfiguredProjectClearingSemanticCache( + project, + reason, + reloadedConfiguredProjects + ); + } + }); + }); + this.openFiles.forEach((_projectRootPath, path) => { + const info = this.getScriptInfoForPath(path); + if (find(info.containingProjects, isExternalProject)) return; + this.tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo( + info, + 7 /* Reload */, + reloadedConfiguredProjects, + delayReloadedConfiguredProjects + ); + }); + delayReloadedConfiguredProjects.forEach((p) => reloadedConfiguredProjects.set(p, 7 /* Reload */)); + this.inferredProjects.forEach((project) => this.clearSemanticCache(project)); + this.ensureProjectForOpenFiles(); + this.cleanupProjectsAndScriptInfos( + reloadedConfiguredProjects, + new Set(this.openFiles.keys()), + new Set(this.externalProjectToConfiguredProjectMap.keys()) + ); + this.logger.info("After reloading projects.."); + this.printProjects(); + } + /** + * Remove the root of inferred project if script info is part of another project + */ + removeRootOfInferredProjectIfNowPartOfOtherProject(info) { + Debug.assert(info.containingProjects.length > 0); + const firstProject = info.containingProjects[0]; + if (!firstProject.isOrphan() && isInferredProject(firstProject) && firstProject.isRoot(info) && forEach(info.containingProjects, (p) => p !== firstProject && !p.isOrphan())) { + firstProject.removeFile( + info, + /*fileExists*/ + true, + /*detachFromProject*/ + true + ); + } + } + /** + * This function is to update the project structure for every inferred project. + * It is called on the premise that all the configured projects are + * up to date. + * This will go through open files and assign them to inferred project if open file is not part of any other project + * After that all the inferred project graphs are updated + */ + ensureProjectForOpenFiles() { + this.logger.info("Before ensureProjectForOpenFiles:"); + this.printProjects(); + const pendingOpenFileProjectUpdates = this.pendingOpenFileProjectUpdates; + this.pendingOpenFileProjectUpdates = void 0; + pendingOpenFileProjectUpdates == null ? void 0 : pendingOpenFileProjectUpdates.forEach( + (_config, path) => this.tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo( + this.getScriptInfoForPath(path), + 5 /* Create */ + ) + ); + this.openFiles.forEach((projectRootPath, path) => { + const info = this.getScriptInfoForPath(path); + if (info.isOrphan()) { + this.assignOrphanScriptInfoToInferredProject(info, projectRootPath); + } else { + this.removeRootOfInferredProjectIfNowPartOfOtherProject(info); + } + }); + this.pendingEnsureProjectForOpenFiles = false; + this.inferredProjects.forEach(updateProjectIfDirty); + this.logger.info("After ensureProjectForOpenFiles:"); + this.printProjects(); + } + /** + * Open file whose contents is managed by the client + * @param filename is absolute pathname + * @param fileContent is a known version of the file content that is more up to date than the one on disk + */ + openClientFile(fileName, fileContent, scriptKind, projectRootPath) { + return this.openClientFileWithNormalizedPath( + toNormalizedPath(fileName), + fileContent, + scriptKind, + /*hasMixedContent*/ + false, + projectRootPath ? toNormalizedPath(projectRootPath) : void 0 + ); + } + /** @internal */ + getOriginalLocationEnsuringConfiguredProject(project, location) { + const isSourceOfProjectReferenceRedirect = project.isSourceOfProjectReferenceRedirect(location.fileName); + const originalLocation = isSourceOfProjectReferenceRedirect ? location : project.getSourceMapper().tryGetSourcePosition(location); + if (!originalLocation) return void 0; + const { fileName } = originalLocation; + const scriptInfo = this.getScriptInfo(fileName); + if (!scriptInfo && !this.host.fileExists(fileName)) return void 0; + const originalFileInfo = { fileName: toNormalizedPath(fileName), path: this.toPath(fileName) }; + const configFileName = this.getConfigFileNameForFile( + originalFileInfo, + /*findFromCacheOnly*/ + false + ); + if (!configFileName) return void 0; + let configuredProject = this.findConfiguredProjectByProjectName(configFileName); + if (!configuredProject) { + if (project.getCompilerOptions().disableReferencedProjectLoad) { + if (isSourceOfProjectReferenceRedirect) { + return location; + } + return (scriptInfo == null ? void 0 : scriptInfo.containingProjects.length) ? originalLocation : location; + } + configuredProject = this.createConfiguredProject(configFileName, `Creating project for original file: ${originalFileInfo.fileName}${location !== originalLocation ? " for location: " + location.fileName : ""}`); + } + const result = this.tryFindDefaultConfiguredProjectForOpenScriptInfoOrClosedFileInfo( + originalFileInfo, + 5 /* Create */, + updateProjectFoundUsingFind( + configuredProject, + 4 /* CreateOptimized */ + ), + (project2) => `Creating project referenced in solution ${project2.projectName} to find possible configured project for original file: ${originalFileInfo.fileName}${location !== originalLocation ? " for location: " + location.fileName : ""}` + ); + if (!result.defaultProject) return void 0; + if (result.defaultProject === project) return originalLocation; + addOriginalConfiguredProject(result.defaultProject); + const originalScriptInfo = this.getScriptInfo(fileName); + if (!originalScriptInfo || !originalScriptInfo.containingProjects.length) return void 0; + originalScriptInfo.containingProjects.forEach((project2) => { + if (isConfiguredProject(project2)) { + addOriginalConfiguredProject(project2); + } + }); + return originalLocation; + function addOriginalConfiguredProject(originalProject) { + (project.originalConfiguredProjects ?? (project.originalConfiguredProjects = /* @__PURE__ */ new Set())).add(originalProject.canonicalConfigFilePath); + } + } + /** @internal */ + fileExists(fileName) { + return !!this.getScriptInfoForNormalizedPath(fileName) || this.host.fileExists(fileName); + } + findExternalProjectContainingOpenScriptInfo(info) { + return find(this.externalProjects, (proj) => { + updateProjectIfDirty(proj); + return proj.containsScriptInfo(info); + }); + } + getOrCreateOpenScriptInfo(fileName, fileContent, scriptKind, hasMixedContent, projectRootPath) { + const info = this.getOrCreateScriptInfoWorker( + fileName, + projectRootPath ? this.getNormalizedAbsolutePath(projectRootPath) : this.currentDirectory, + /*openedByClient*/ + true, + fileContent, + scriptKind, + !!hasMixedContent, + /*hostToQueryFileExistsOn*/ + void 0, + /*deferredDeleteOk*/ + true + ); + this.openFiles.set(info.path, projectRootPath); + return info; + } + assignProjectToOpenedScriptInfo(info) { + let configFileName; + let configFileErrors; + const project = this.findExternalProjectContainingOpenScriptInfo(info); + let retainProjects; + let sentConfigDiag; + if (!project && this.serverMode === 0 /* Semantic */) { + const result = this.tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo( + info, + 5 /* Create */ + ); + if (result) { + retainProjects = result.seenProjects; + sentConfigDiag = result.sentConfigDiag; + if (result.defaultProject) { + configFileName = result.defaultProject.getConfigFilePath(); + configFileErrors = result.defaultProject.getAllProjectErrors(); + } + } + } + info.containingProjects.forEach(updateProjectIfDirty); + if (info.isOrphan()) { + retainProjects == null ? void 0 : retainProjects.forEach((kind, project2) => { + if (kind !== 4 /* CreateOptimized */ && !sentConfigDiag.has(project2)) this.sendConfigFileDiagEvent( + project2, + info.fileName, + /*force*/ + true + ); + }); + Debug.assert(this.openFiles.has(info.path)); + this.assignOrphanScriptInfoToInferredProject(info, this.openFiles.get(info.path)); + } + Debug.assert(!info.isOrphan()); + return { configFileName, configFileErrors, retainProjects }; + } + /** + * Depending on kind + * - Find the configuedProject and return it - if allowDeferredClosed is set it will find the deferredClosed project as well + * - Create - if the project doesnt exist, it creates one as well. If not delayLoad, the project is updated (with triggerFile if passed) + * - Reload - if the project doesnt exist, it creates one. If not delayLoad, the project is reloaded clearing semantic cache + * @internal + */ + findCreateOrReloadConfiguredProject(configFileName, kind, reason, allowDeferredClosed, triggerFile, reloadedProjects, delayLoad, delayReloadedConfiguredProjects, projectForConfigFile) { + let project = projectForConfigFile ?? this.findConfiguredProjectByProjectName(configFileName, allowDeferredClosed); + let sentConfigFileDiag = false; + let configFileExistenceInfo; + switch (kind) { + case 0 /* FindOptimized */: + case 1 /* Find */: + case 3 /* CreateReplay */: + if (!project) return; + break; + case 2 /* CreateReplayOptimized */: + if (!project) return; + configFileExistenceInfo = configFileExistenceInfoForOptimizedReplay(project); + break; + case 4 /* CreateOptimized */: + case 5 /* Create */: + project ?? (project = this.createConfiguredProject(configFileName, reason)); + if (!delayLoad) { + ({ sentConfigFileDiag, configFileExistenceInfo } = updateProjectFoundUsingFind( + project, + kind, + triggerFile + )); + } + break; + case 6 /* ReloadOptimized */: + project ?? (project = this.createConfiguredProject(configFileName, reloadReason(reason))); + project.projectService.reloadConfiguredProjectOptimized(project, reason, reloadedProjects); + configFileExistenceInfo = configFileExistenceInfoForOptimizedLoading(project); + if (configFileExistenceInfo) break; + // falls through + case 7 /* Reload */: + project ?? (project = this.createConfiguredProject(configFileName, reloadReason(reason))); + sentConfigFileDiag = !delayReloadedConfiguredProjects && this.reloadConfiguredProjectClearingSemanticCache(project, reason, reloadedProjects); + if (delayReloadedConfiguredProjects && !delayReloadedConfiguredProjects.has(project) && !reloadedProjects.has(project)) { + this.setProjectForReload(project, 2 /* Full */, reason); + delayReloadedConfiguredProjects.add(project); + } + break; + default: + Debug.assertNever(kind); + } + return { project, sentConfigFileDiag, configFileExistenceInfo, reason }; + } + /** + * Finds the default configured project for given info + * For any tsconfig found, it looks into that project, if not then all its references, + * The search happens for all tsconfigs till projectRootPath + */ + tryFindDefaultConfiguredProjectForOpenScriptInfo(info, kind, allowDeferredClosed, reloadedProjects) { + const configFileName = this.getConfigFileNameForFile(info, kind <= 3 /* CreateReplay */); + if (!configFileName) return; + const optimizedKind = toConfiguredProjectLoadOptimized(kind); + const result = this.findCreateOrReloadConfiguredProject( + configFileName, + optimizedKind, + fileOpenReason(info), + allowDeferredClosed, + info.fileName, + reloadedProjects + ); + return result && this.tryFindDefaultConfiguredProjectForOpenScriptInfoOrClosedFileInfo( + info, + kind, + result, + (project) => `Creating project referenced in solution ${project.projectName} to find possible configured project for ${info.fileName} to open`, + allowDeferredClosed, + reloadedProjects + ); + } + isMatchedByConfig(configFileName, config, info) { + if (config.fileNames.some((rootName) => this.toPath(rootName) === info.path)) return true; + if (isSupportedSourceFileName( + info.fileName, + config.options, + this.hostConfiguration.extraFileExtensions + )) return false; + const { validatedFilesSpec, validatedIncludeSpecs, validatedExcludeSpecs } = config.options.configFile.configFileSpecs; + const basePath = toNormalizedPath(getNormalizedAbsolutePath(getDirectoryPath(configFileName), this.currentDirectory)); + if (validatedFilesSpec == null ? void 0 : validatedFilesSpec.some((fileSpec) => this.toPath(getNormalizedAbsolutePath(fileSpec, basePath)) === info.path)) return true; + if (!(validatedIncludeSpecs == null ? void 0 : validatedIncludeSpecs.length)) return false; + if (matchesExcludeWorker( + info.fileName, + validatedExcludeSpecs, + this.host.useCaseSensitiveFileNames, + this.currentDirectory, + basePath + )) return false; + return validatedIncludeSpecs == null ? void 0 : validatedIncludeSpecs.some((includeSpec) => { + const pattern = getPatternFromSpec(includeSpec, basePath, "files"); + return !!pattern && getRegexFromPattern(`(${pattern})$`, this.host.useCaseSensitiveFileNames).test(info.fileName); + }); + } + tryFindDefaultConfiguredProjectForOpenScriptInfoOrClosedFileInfo(info, kind, initialConfigResult, referencedProjectReason, allowDeferredClosed, reloadedProjects) { + const infoIsOpenScriptInfo = isOpenScriptInfo(info); + const optimizedKind = toConfiguredProjectLoadOptimized(kind); + const seenProjects = /* @__PURE__ */ new Map(); + let seenConfigs; + const sentConfigDiag = /* @__PURE__ */ new Set(); + let defaultProject; + let possiblyDefault; + let tsconfigOfDefault; + let tsconfigOfPossiblyDefault; + tryFindDefaultConfiguredProject(initialConfigResult); + return { + defaultProject: defaultProject ?? possiblyDefault, + tsconfigProject: tsconfigOfDefault ?? tsconfigOfPossiblyDefault, + sentConfigDiag, + seenProjects, + seenConfigs + }; + function tryFindDefaultConfiguredProject(result) { + return isDefaultProjectOptimized(result, result.project) ?? tryFindDefaultConfiguredProjectFromReferences(result.project) ?? tryFindDefaultConfiguredProjectFromAncestor(result.project); + } + function isDefaultConfigFileExistenceInfo(configFileExistenceInfo, project, childConfigName, reason, tsconfigProject, canonicalConfigFilePath) { + if (project) { + if (seenProjects.has(project)) return; + seenProjects.set(project, optimizedKind); + } else { + if (seenConfigs == null ? void 0 : seenConfigs.has(canonicalConfigFilePath)) return; + (seenConfigs ?? (seenConfigs = /* @__PURE__ */ new Set())).add(canonicalConfigFilePath); + } + if (!tsconfigProject.projectService.isMatchedByConfig( + childConfigName, + configFileExistenceInfo.config.parsedCommandLine, + info + )) { + if (tsconfigProject.languageServiceEnabled) { + tsconfigProject.projectService.watchWildcards( + childConfigName, + configFileExistenceInfo, + tsconfigProject + ); + } + return; + } + const result = project ? updateProjectFoundUsingFind( + project, + kind, + info.fileName, + reason, + reloadedProjects + ) : tsconfigProject.projectService.findCreateOrReloadConfiguredProject( + childConfigName, + kind, + reason, + allowDeferredClosed, + info.fileName, + reloadedProjects + ); + if (!result) { + Debug.assert(kind === 3 /* CreateReplay */); + return void 0; + } + seenProjects.set(result.project, optimizedKind); + if (result.sentConfigFileDiag) sentConfigDiag.add(result.project); + return isDefaultProject(result.project, tsconfigProject); + } + function isDefaultProject(project, tsconfigProject) { + if (seenProjects.get(project) === kind) return; + seenProjects.set(project, kind); + const scriptInfo = infoIsOpenScriptInfo ? info : project.projectService.getScriptInfo(info.fileName); + const projectWithInfo = scriptInfo && project.containsScriptInfo(scriptInfo); + if (projectWithInfo && !project.isSourceOfProjectReferenceRedirect(scriptInfo.path)) { + tsconfigOfDefault = tsconfigProject; + return defaultProject = project; + } + if (!possiblyDefault && infoIsOpenScriptInfo && projectWithInfo) { + tsconfigOfPossiblyDefault = tsconfigProject; + possiblyDefault = project; + } + } + function isDefaultProjectOptimized(result, tsconfigProject) { + if (result.sentConfigFileDiag) sentConfigDiag.add(result.project); + return result.configFileExistenceInfo ? isDefaultConfigFileExistenceInfo( + result.configFileExistenceInfo, + result.project, + toNormalizedPath(result.project.getConfigFilePath()), + result.reason, + result.project, + result.project.canonicalConfigFilePath + ) : isDefaultProject(result.project, tsconfigProject); + } + function tryFindDefaultConfiguredProjectFromReferences(project) { + return project.parsedCommandLine && forEachResolvedProjectReferenceProjectLoad( + project, + project.parsedCommandLine, + isDefaultConfigFileExistenceInfo, + optimizedKind, + referencedProjectReason(project), + allowDeferredClosed, + reloadedProjects + ); + } + function tryFindDefaultConfiguredProjectFromAncestor(project) { + return infoIsOpenScriptInfo ? forEachAncestorProjectLoad( + // If not in referenced projects, try ancestors and its references + info, + project, + tryFindDefaultConfiguredProject, + optimizedKind, + `Creating possible configured project for ${info.fileName} to open`, + allowDeferredClosed, + reloadedProjects, + /*searchOnlyPotentialSolution*/ + false + ) : void 0; + } + } + tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo(info, kind, reloadedProjects, delayReloadedConfiguredProjects) { + const allowDeferredClosed = kind === 1 /* Find */; + const result = this.tryFindDefaultConfiguredProjectForOpenScriptInfo( + info, + kind, + allowDeferredClosed, + reloadedProjects + ); + if (!result) return; + const { defaultProject, tsconfigProject, seenProjects } = result; + if (defaultProject) { + forEachAncestorProjectLoad( + info, + tsconfigProject, + (ancestor) => { + seenProjects.set(ancestor.project, kind); + }, + kind, + `Creating project possibly referencing default composite project ${defaultProject.getProjectName()} of open file ${info.fileName}`, + allowDeferredClosed, + reloadedProjects, + /*searchOnlyPotentialSolution*/ + true, + delayReloadedConfiguredProjects + ); + } + return result; + } + /** @internal */ + loadAncestorProjectTree(forProjects) { + forProjects ?? (forProjects = new Set( + mapDefinedIterator(this.configuredProjects.entries(), ([key, project]) => !project.initialLoadPending ? key : void 0) + )); + const seenProjects = /* @__PURE__ */ new Set(); + const currentConfiguredProjects = arrayFrom(this.configuredProjects.values()); + for (const project of currentConfiguredProjects) { + if (forEachPotentialProjectReference(project, (potentialRefPath) => forProjects.has(potentialRefPath))) { + updateProjectIfDirty(project); + } + this.ensureProjectChildren(project, forProjects, seenProjects); + } + } + ensureProjectChildren(project, forProjects, seenProjects) { + var _a; + if (!tryAddToSet(seenProjects, project.canonicalConfigFilePath)) return; + if (project.getCompilerOptions().disableReferencedProjectLoad) return; + const children = (_a = project.getCurrentProgram()) == null ? void 0 : _a.getResolvedProjectReferences(); + if (!children) return; + for (const child of children) { + if (!child) continue; + const referencedProject = forEachResolvedProjectReference(child.references, (ref) => forProjects.has(ref.sourceFile.path) ? ref : void 0); + if (!referencedProject) continue; + const configFileName = toNormalizedPath(child.sourceFile.fileName); + const childProject = this.findConfiguredProjectByProjectName(configFileName) ?? this.createConfiguredProject( + configFileName, + `Creating project referenced by : ${project.projectName} as it references project ${referencedProject.sourceFile.fileName}` + ); + updateProjectIfDirty(childProject); + this.ensureProjectChildren(childProject, forProjects, seenProjects); + } + } + cleanupConfiguredProjects(toRetainConfiguredProjects, externalProjectsRetainingConfiguredProjects, openFilesWithRetainedConfiguredProject) { + this.getOrphanConfiguredProjects( + toRetainConfiguredProjects, + openFilesWithRetainedConfiguredProject, + externalProjectsRetainingConfiguredProjects + ).forEach((project) => this.removeProject(project)); + } + cleanupProjectsAndScriptInfos(toRetainConfiguredProjects, openFilesWithRetainedConfiguredProject, externalProjectsRetainingConfiguredProjects) { + this.cleanupConfiguredProjects( + toRetainConfiguredProjects, + externalProjectsRetainingConfiguredProjects, + openFilesWithRetainedConfiguredProject + ); + for (const inferredProject of this.inferredProjects.slice()) { + if (inferredProject.isOrphan()) { + this.removeProject(inferredProject); + } + } + this.removeOrphanScriptInfos(); + } + tryInvokeWildCardDirectories(info) { + this.configFileExistenceInfoCache.forEach((configFileExistenceInfo, config) => { + var _a, _b; + if (!((_a = configFileExistenceInfo.config) == null ? void 0 : _a.parsedCommandLine) || contains( + configFileExistenceInfo.config.parsedCommandLine.fileNames, + info.fileName, + !this.host.useCaseSensitiveFileNames ? equateStringsCaseInsensitive : equateStringsCaseSensitive + )) { + return; + } + (_b = configFileExistenceInfo.config.watchedDirectories) == null ? void 0 : _b.forEach((watcher, directory) => { + if (containsPath(directory, info.fileName, !this.host.useCaseSensitiveFileNames)) { + this.logger.info(`Invoking ${config}:: wildcard for open scriptInfo:: ${info.fileName}`); + this.onWildCardDirectoryWatcherInvoke( + directory, + config, + configFileExistenceInfo.config, + watcher.watcher, + info.fileName + ); + } + }); + }); + } + openClientFileWithNormalizedPath(fileName, fileContent, scriptKind, hasMixedContent, projectRootPath) { + const existing = this.getScriptInfoForPath(normalizedPathToPath( + fileName, + projectRootPath ? this.getNormalizedAbsolutePath(projectRootPath) : this.currentDirectory, + this.toCanonicalFileName + )); + const info = this.getOrCreateOpenScriptInfo(fileName, fileContent, scriptKind, hasMixedContent, projectRootPath); + if (!existing && info && !info.isDynamic) this.tryInvokeWildCardDirectories(info); + const { retainProjects, ...result } = this.assignProjectToOpenedScriptInfo(info); + this.cleanupProjectsAndScriptInfos( + retainProjects, + /* @__PURE__ */ new Set([info.path]), + /*externalProjectsRetainingConfiguredProjects*/ + void 0 + ); + this.telemetryOnOpenFile(info); + this.printProjects(); + return result; + } + /** @internal */ + getOrphanConfiguredProjects(toRetainConfiguredProjects, openFilesWithRetainedConfiguredProject, externalProjectsRetainingConfiguredProjects) { + const toRemoveConfiguredProjects = new Set(this.configuredProjects.values()); + const markOriginalProjectsAsUsed = (project) => { + if (project.originalConfiguredProjects && (isConfiguredProject(project) || !project.isOrphan())) { + project.originalConfiguredProjects.forEach( + (_value, configuredProjectPath) => { + const project2 = this.getConfiguredProjectByCanonicalConfigFilePath(configuredProjectPath); + return project2 && retainConfiguredProject(project2); + } + ); + } + }; + toRetainConfiguredProjects == null ? void 0 : toRetainConfiguredProjects.forEach((_, project) => retainConfiguredProject(project)); + if (!toRemoveConfiguredProjects.size) return toRemoveConfiguredProjects; + this.inferredProjects.forEach(markOriginalProjectsAsUsed); + this.externalProjects.forEach(markOriginalProjectsAsUsed); + this.externalProjectToConfiguredProjectMap.forEach((projects, externalProjectName) => { + if (!(externalProjectsRetainingConfiguredProjects == null ? void 0 : externalProjectsRetainingConfiguredProjects.has(externalProjectName))) { + projects.forEach(retainConfiguredProject); + } + }); + if (!toRemoveConfiguredProjects.size) return toRemoveConfiguredProjects; + forEachEntry(this.openFiles, (_projectRootPath, path) => { + if (openFilesWithRetainedConfiguredProject == null ? void 0 : openFilesWithRetainedConfiguredProject.has(path)) return; + const info = this.getScriptInfoForPath(path); + if (find(info.containingProjects, isExternalProject)) return; + const result = this.tryFindDefaultConfiguredProjectAndLoadAncestorsForOpenScriptInfo( + info, + 1 /* Find */ + ); + if (result == null ? void 0 : result.defaultProject) { + result == null ? void 0 : result.seenProjects.forEach((_, project) => retainConfiguredProject(project)); + if (!toRemoveConfiguredProjects.size) return toRemoveConfiguredProjects; + } + }); + if (!toRemoveConfiguredProjects.size) return toRemoveConfiguredProjects; + forEachEntry(this.configuredProjects, (project) => { + if (toRemoveConfiguredProjects.has(project)) { + if (isPendingUpdate(project) || forEachReferencedProject(project, isRetained)) { + retainConfiguredProject(project); + if (!toRemoveConfiguredProjects.size) return toRemoveConfiguredProjects; + } + } + }); + return toRemoveConfiguredProjects; + function isRetained(project) { + return !toRemoveConfiguredProjects.has(project) || isPendingUpdate(project); + } + function isPendingUpdate(project) { + var _a, _b; + return (project.deferredClose || project.projectService.hasPendingProjectUpdate(project)) && !!((_b = (_a = project.projectService.configFileExistenceInfoCache.get(project.canonicalConfigFilePath)) == null ? void 0 : _a.openFilesImpactedByConfigFile) == null ? void 0 : _b.size); + } + function retainConfiguredProject(project) { + if (!toRemoveConfiguredProjects.delete(project)) return; + markOriginalProjectsAsUsed(project); + forEachReferencedProject(project, retainConfiguredProject); + } + } + removeOrphanScriptInfos() { + const toRemoveScriptInfos = new Map(this.filenameToScriptInfo); + this.filenameToScriptInfo.forEach((info) => { + if (info.deferredDelete) return; + if (!info.isScriptOpen() && info.isOrphan() && !scriptInfoIsContainedByDeferredClosedProject(info) && !scriptInfoIsContainedByBackgroundProject(info)) { + if (!info.sourceMapFilePath) return; + let sourceInfos; + if (isString(info.sourceMapFilePath)) { + const sourceMapInfo = this.filenameToScriptInfo.get(info.sourceMapFilePath); + sourceInfos = sourceMapInfo == null ? void 0 : sourceMapInfo.sourceInfos; + } else { + sourceInfos = info.sourceMapFilePath.sourceInfos; + } + if (!sourceInfos) return; + if (!forEachKey(sourceInfos, (path) => { + const info2 = this.getScriptInfoForPath(path); + return !!info2 && (info2.isScriptOpen() || !info2.isOrphan()); + })) { + return; + } + } + toRemoveScriptInfos.delete(info.path); + if (info.sourceMapFilePath) { + let sourceInfos; + if (isString(info.sourceMapFilePath)) { + const sourceMapInfo = this.filenameToScriptInfo.get(info.sourceMapFilePath); + if (sourceMapInfo == null ? void 0 : sourceMapInfo.deferredDelete) { + info.sourceMapFilePath = { + watcher: this.addMissingSourceMapFile(sourceMapInfo.fileName, info.path), + sourceInfos: sourceMapInfo.sourceInfos + }; + } else { + toRemoveScriptInfos.delete(info.sourceMapFilePath); + } + sourceInfos = sourceMapInfo == null ? void 0 : sourceMapInfo.sourceInfos; + } else { + sourceInfos = info.sourceMapFilePath.sourceInfos; + } + if (sourceInfos) { + sourceInfos.forEach((_value, path) => toRemoveScriptInfos.delete(path)); + } + } + }); + toRemoveScriptInfos.forEach((info) => this.deleteScriptInfo(info)); + } + telemetryOnOpenFile(scriptInfo) { + if (this.serverMode !== 0 /* Semantic */ || !this.eventHandler || !scriptInfo.isJavaScript() || !addToSeen(this.allJsFilesForOpenFileTelemetry, scriptInfo.path)) { + return; + } + const project = this.ensureDefaultProjectForFile(scriptInfo); + if (!project.languageServiceEnabled) { + return; + } + const sourceFile = project.getSourceFile(scriptInfo.path); + const checkJs = !!sourceFile && !!sourceFile.checkJsDirective; + this.eventHandler({ eventName: OpenFileInfoTelemetryEvent, data: { info: { checkJs } } }); + } + closeClientFile(uncheckedFileName, skipAssignOrphanScriptInfosToInferredProject) { + const info = this.getScriptInfoForNormalizedPath(toNormalizedPath(uncheckedFileName)); + const result = info ? this.closeOpenFile(info, skipAssignOrphanScriptInfosToInferredProject) : false; + if (!skipAssignOrphanScriptInfosToInferredProject) { + this.printProjects(); + } + return result; + } + collectChanges(lastKnownProjectVersions, currentProjects, includeProjectReferenceRedirectInfo, result) { + for (const proj of currentProjects) { + const knownProject = find(lastKnownProjectVersions, (p) => p.projectName === proj.getProjectName()); + result.push(proj.getChangesSinceVersion(knownProject && knownProject.version, includeProjectReferenceRedirectInfo)); + } + } + /** @internal */ + synchronizeProjectList(knownProjects, includeProjectReferenceRedirectInfo) { + const files = []; + this.collectChanges(knownProjects, this.externalProjects, includeProjectReferenceRedirectInfo, files); + this.collectChanges(knownProjects, mapDefinedIterator(this.configuredProjects.values(), (p) => p.deferredClose ? void 0 : p), includeProjectReferenceRedirectInfo, files); + this.collectChanges(knownProjects, this.inferredProjects, includeProjectReferenceRedirectInfo, files); + return files; + } + /** @internal */ + applyChangesInOpenFiles(openFiles, changedFiles, closedFiles) { + let existingOpenScriptInfos; + let openScriptInfos; + let assignOrphanScriptInfosToInferredProject = false; + if (openFiles) { + for (const file of openFiles) { + (existingOpenScriptInfos ?? (existingOpenScriptInfos = [])).push(this.getScriptInfoForPath(normalizedPathToPath( + toNormalizedPath(file.fileName), + file.projectRootPath ? this.getNormalizedAbsolutePath(file.projectRootPath) : this.currentDirectory, + this.toCanonicalFileName + ))); + const info = this.getOrCreateOpenScriptInfo( + toNormalizedPath(file.fileName), + file.content, + tryConvertScriptKindName(file.scriptKind), + file.hasMixedContent, + file.projectRootPath ? toNormalizedPath(file.projectRootPath) : void 0 + ); + (openScriptInfos || (openScriptInfos = [])).push(info); + } + } + if (changedFiles) { + for (const file of changedFiles) { + const scriptInfo = this.getScriptInfo(file.fileName); + Debug.assert(!!scriptInfo); + this.applyChangesToFile(scriptInfo, file.changes); + } + } + if (closedFiles) { + for (const file of closedFiles) { + assignOrphanScriptInfosToInferredProject = this.closeClientFile( + file, + /*skipAssignOrphanScriptInfosToInferredProject*/ + true + ) || assignOrphanScriptInfosToInferredProject; + } + } + let retainProjects; + forEach( + existingOpenScriptInfos, + (existing, index) => !existing && openScriptInfos[index] && !openScriptInfos[index].isDynamic ? this.tryInvokeWildCardDirectories(openScriptInfos[index]) : void 0 + ); + openScriptInfos == null ? void 0 : openScriptInfos.forEach( + (info) => { + var _a; + return (_a = this.assignProjectToOpenedScriptInfo(info).retainProjects) == null ? void 0 : _a.forEach( + (kind, p) => (retainProjects ?? (retainProjects = /* @__PURE__ */ new Map())).set(p, kind) + ); + } + ); + if (assignOrphanScriptInfosToInferredProject) { + this.assignOrphanScriptInfosToInferredProject(); + } + if (openScriptInfos) { + this.cleanupProjectsAndScriptInfos( + retainProjects, + new Set(openScriptInfos.map((info) => info.path)), + /*externalProjectsRetainingConfiguredProjects*/ + void 0 + ); + openScriptInfos.forEach((info) => this.telemetryOnOpenFile(info)); + this.printProjects(); + } else if (length(closedFiles)) { + this.printProjects(); + } + } + /** @internal */ + applyChangesToFile(scriptInfo, changes) { + for (const change of changes) { + scriptInfo.editContent(change.span.start, change.span.start + change.span.length, change.newText); + } + } + // eslint-disable-line @typescript-eslint/unified-signatures + closeExternalProject(uncheckedFileName, cleanupAfter) { + const fileName = toNormalizedPath(uncheckedFileName); + const projects = this.externalProjectToConfiguredProjectMap.get(fileName); + if (projects) { + this.externalProjectToConfiguredProjectMap.delete(fileName); + } else { + const externalProject = this.findExternalProjectByProjectName(uncheckedFileName); + if (externalProject) { + this.removeProject(externalProject); + } + } + if (cleanupAfter) { + this.cleanupConfiguredProjects(); + this.printProjects(); + } + } + openExternalProjects(projects) { + const projectsToClose = new Set(this.externalProjects.map((p) => p.getProjectName())); + this.externalProjectToConfiguredProjectMap.forEach((_, externalProjectName) => projectsToClose.add(externalProjectName)); + for (const externalProject of projects) { + this.openExternalProject( + externalProject, + /*cleanupAfter*/ + false + ); + projectsToClose.delete(externalProject.projectFileName); + } + projectsToClose.forEach((externalProjectName) => this.closeExternalProject( + externalProjectName, + /*cleanupAfter*/ + false + )); + this.cleanupConfiguredProjects(); + this.printProjects(); + } + static escapeFilenameForRegex(filename) { + return filename.replace(this.filenameEscapeRegexp, "\\$&"); + } + resetSafeList() { + this.safelist = defaultTypeSafeList; + } + applySafeList(proj) { + const typeAcquisition = proj.typeAcquisition; + Debug.assert(!!typeAcquisition, "proj.typeAcquisition should be set by now"); + const result = this.applySafeListWorker(proj, proj.rootFiles, typeAcquisition); + return (result == null ? void 0 : result.excludedFiles) ?? []; + } + applySafeListWorker(proj, rootFiles, typeAcquisition) { + if (typeAcquisition.enable === false || typeAcquisition.disableFilenameBasedTypeAcquisition) { + return void 0; + } + const typeAcqInclude = typeAcquisition.include || (typeAcquisition.include = []); + const excludeRules = []; + const normalizedNames = rootFiles.map((f) => normalizeSlashes(f.fileName)); + for (const name of Object.keys(this.safelist)) { + const rule2 = this.safelist[name]; + for (const root of normalizedNames) { + if (rule2.match.test(root)) { + this.logger.info(`Excluding files based on rule ${name} matching file '${root}'`); + if (rule2.types) { + for (const type of rule2.types) { + if (!typeAcqInclude.includes(type)) { + typeAcqInclude.push(type); + } + } + } + if (rule2.exclude) { + for (const exclude of rule2.exclude) { + const processedRule = root.replace(rule2.match, (...groups) => { + return exclude.map((groupNumberOrString) => { + if (typeof groupNumberOrString === "number") { + if (!isString(groups[groupNumberOrString])) { + this.logger.info(`Incorrect RegExp specification in safelist rule ${name} - not enough groups`); + return "\\*"; + } + return _ProjectService.escapeFilenameForRegex(groups[groupNumberOrString]); + } + return groupNumberOrString; + }).join(""); + }); + if (!excludeRules.includes(processedRule)) { + excludeRules.push(processedRule); + } + } + } else { + const escaped = _ProjectService.escapeFilenameForRegex(root); + if (!excludeRules.includes(escaped)) { + excludeRules.push(escaped); + } + } + } + } + } + const excludeRegexes = excludeRules.map((e) => new RegExp(e, "i")); + let filesToKeep; + let excludedFiles; + for (let i = 0; i < rootFiles.length; i++) { + if (excludeRegexes.some((re) => re.test(normalizedNames[i]))) { + addExcludedFile(i); + } else { + if (typeAcquisition.enable) { + const baseName = getBaseFileName(toFileNameLowerCase(normalizedNames[i])); + if (fileExtensionIs(baseName, "js")) { + const inferredTypingName = removeFileExtension(baseName); + const cleanedTypingName = removeMinAndVersionNumbers(inferredTypingName); + const typeName = this.legacySafelist.get(cleanedTypingName); + if (typeName !== void 0) { + this.logger.info(`Excluded '${normalizedNames[i]}' because it matched ${cleanedTypingName} from the legacy safelist`); + addExcludedFile(i); + if (!typeAcqInclude.includes(typeName)) { + typeAcqInclude.push(typeName); + } + continue; + } + } + } + if (/^.+[.-]min\.js$/.test(normalizedNames[i])) { + addExcludedFile(i); + } else { + filesToKeep == null ? void 0 : filesToKeep.push(rootFiles[i]); + } + } + } + return excludedFiles ? { + rootFiles: filesToKeep, + excludedFiles + } : void 0; + function addExcludedFile(index) { + if (!excludedFiles) { + Debug.assert(!filesToKeep); + filesToKeep = rootFiles.slice(0, index); + excludedFiles = []; + } + excludedFiles.push(normalizedNames[index]); + } + } + // eslint-disable-line @typescript-eslint/unified-signatures + openExternalProject(proj, cleanupAfter) { + const existingExternalProject = this.findExternalProjectByProjectName(proj.projectFileName); + let configuredProjects; + let rootFiles = []; + for (const file of proj.rootFiles) { + const normalized = toNormalizedPath(file.fileName); + if (getBaseConfigFileName(normalized)) { + if (this.serverMode === 0 /* Semantic */ && this.host.fileExists(normalized)) { + let project = this.findConfiguredProjectByProjectName(normalized); + if (!project) { + project = this.createConfiguredProject(normalized, `Creating configured project in external project: ${proj.projectFileName}`); + if (!this.getHostPreferences().lazyConfiguredProjectsFromExternalProject) project.updateGraph(); + } + (configuredProjects ?? (configuredProjects = /* @__PURE__ */ new Set())).add(project); + Debug.assert(!project.isClosed()); + } + } else { + rootFiles.push(file); + } + } + if (configuredProjects) { + this.externalProjectToConfiguredProjectMap.set(proj.projectFileName, configuredProjects); + if (existingExternalProject) this.removeProject(existingExternalProject); + } else { + this.externalProjectToConfiguredProjectMap.delete(proj.projectFileName); + const typeAcquisition = proj.typeAcquisition || {}; + typeAcquisition.include = typeAcquisition.include || []; + typeAcquisition.exclude = typeAcquisition.exclude || []; + if (typeAcquisition.enable === void 0) { + typeAcquisition.enable = hasNoTypeScriptSource(rootFiles.map((f) => f.fileName)); + } + const excludeResult = this.applySafeListWorker(proj, rootFiles, typeAcquisition); + const excludedFiles = (excludeResult == null ? void 0 : excludeResult.excludedFiles) ?? []; + rootFiles = (excludeResult == null ? void 0 : excludeResult.rootFiles) ?? rootFiles; + if (existingExternalProject) { + existingExternalProject.excludedFiles = excludedFiles; + const compilerOptions = convertCompilerOptions(proj.options); + const watchOptionsAndErrors = convertWatchOptions(proj.options, existingExternalProject.getCurrentDirectory()); + const lastFileExceededProgramSize = this.getFilenameForExceededTotalSizeLimitForNonTsFiles(proj.projectFileName, compilerOptions, rootFiles, externalFilePropertyReader); + if (lastFileExceededProgramSize) { + existingExternalProject.disableLanguageService(lastFileExceededProgramSize); + } else { + existingExternalProject.enableLanguageService(); + } + existingExternalProject.setProjectErrors(watchOptionsAndErrors == null ? void 0 : watchOptionsAndErrors.errors); + this.updateRootAndOptionsOfNonInferredProject(existingExternalProject, rootFiles, externalFilePropertyReader, compilerOptions, typeAcquisition, proj.options.compileOnSave, watchOptionsAndErrors == null ? void 0 : watchOptionsAndErrors.watchOptions); + existingExternalProject.updateGraph(); + } else { + const project = this.createExternalProject(proj.projectFileName, rootFiles, proj.options, typeAcquisition, excludedFiles); + project.updateGraph(); + } + } + if (cleanupAfter) { + this.cleanupConfiguredProjects( + configuredProjects, + /* @__PURE__ */ new Set([proj.projectFileName]) + ); + this.printProjects(); + } + } + hasDeferredExtension() { + for (const extension of this.hostConfiguration.extraFileExtensions) { + if (extension.scriptKind === 7 /* Deferred */) { + return true; + } + } + return false; + } + /** + * Performs the initial steps of enabling a plugin by finding and instantiating the module for a plugin either asynchronously or synchronously + * @internal + */ + requestEnablePlugin(project, pluginConfigEntry, searchPaths) { + if (!this.host.importPlugin && !this.host.require) { + this.logger.info("Plugins were requested but not running in environment that supports 'require'. Nothing will be loaded"); + return; + } + this.logger.info(`Enabling plugin ${pluginConfigEntry.name} from candidate paths: ${searchPaths.join(",")}`); + if (!pluginConfigEntry.name || isExternalModuleNameRelative(pluginConfigEntry.name) || /[\\/]\.\.?(?:$|[\\/])/.test(pluginConfigEntry.name)) { + this.logger.info(`Skipped loading plugin ${pluginConfigEntry.name || JSON.stringify(pluginConfigEntry)} because only package name is allowed plugin name`); + return; + } + if (this.host.importPlugin) { + const importPromise = Project2.importServicePluginAsync( + pluginConfigEntry, + searchPaths, + this.host, + (s) => this.logger.info(s) + ); + this.pendingPluginEnablements ?? (this.pendingPluginEnablements = /* @__PURE__ */ new Map()); + let promises = this.pendingPluginEnablements.get(project); + if (!promises) this.pendingPluginEnablements.set(project, promises = []); + promises.push(importPromise); + return; + } + this.endEnablePlugin( + project, + Project2.importServicePluginSync( + pluginConfigEntry, + searchPaths, + this.host, + (s) => this.logger.info(s) + ) + ); + } + /** + * Performs the remaining steps of enabling a plugin after its module has been instantiated. + */ + endEnablePlugin(project, { pluginConfigEntry, resolvedModule, errorLogs }) { + var _a; + if (resolvedModule) { + const configurationOverride = (_a = this.currentPluginConfigOverrides) == null ? void 0 : _a.get(pluginConfigEntry.name); + if (configurationOverride) { + const pluginName = pluginConfigEntry.name; + pluginConfigEntry = configurationOverride; + pluginConfigEntry.name = pluginName; + } + project.enableProxy(resolvedModule, pluginConfigEntry); + } else { + forEach(errorLogs, (message) => this.logger.info(message)); + this.logger.info(`Couldn't find ${pluginConfigEntry.name}`); + } + } + /** @internal */ + hasNewPluginEnablementRequests() { + return !!this.pendingPluginEnablements; + } + /** @internal */ + hasPendingPluginEnablements() { + return !!this.currentPluginEnablementPromise; + } + /** + * Waits for any ongoing plugin enablement requests to complete. + * + * @internal + */ + async waitForPendingPlugins() { + while (this.currentPluginEnablementPromise) { + await this.currentPluginEnablementPromise; + } + } + /** + * Starts enabling any requested plugins without waiting for the result. + * + * @internal + */ + enableRequestedPlugins() { + if (this.pendingPluginEnablements) { + void this.enableRequestedPluginsAsync(); + } + } + async enableRequestedPluginsAsync() { + if (this.currentPluginEnablementPromise) { + await this.waitForPendingPlugins(); + } + if (!this.pendingPluginEnablements) { + return; + } + const entries = arrayFrom(this.pendingPluginEnablements.entries()); + this.pendingPluginEnablements = void 0; + this.currentPluginEnablementPromise = this.enableRequestedPluginsWorker(entries); + await this.currentPluginEnablementPromise; + } + async enableRequestedPluginsWorker(pendingPlugins) { + Debug.assert(this.currentPluginEnablementPromise === void 0); + let sendProjectsUpdatedInBackgroundEvent = false; + await Promise.all(map(pendingPlugins, async ([project, promises]) => { + const results = await Promise.all(promises); + if (project.isClosed() || isProjectDeferredClose(project)) { + this.logger.info(`Cancelling plugin enabling for ${project.getProjectName()} as it is ${project.isClosed() ? "closed" : "deferred close"}`); + return; + } + sendProjectsUpdatedInBackgroundEvent = true; + for (const result of results) { + this.endEnablePlugin(project, result); + } + this.delayUpdateProjectGraph(project); + })); + this.currentPluginEnablementPromise = void 0; + if (sendProjectsUpdatedInBackgroundEvent) this.sendProjectsUpdatedInBackgroundEvent(); + } + configurePlugin(args) { + this.forEachEnabledProject((project) => project.onPluginConfigurationChanged(args.pluginName, args.configuration)); + this.currentPluginConfigOverrides = this.currentPluginConfigOverrides || /* @__PURE__ */ new Map(); + this.currentPluginConfigOverrides.set(args.pluginName, args.configuration); + } + /** @internal */ + getPackageJsonsVisibleToFile(fileName, project, rootDir) { + const packageJsonCache = this.packageJsonCache; + const rootPath = rootDir && this.toPath(rootDir); + const result = []; + const processDirectory = (directory) => { + switch (packageJsonCache.directoryHasPackageJson(directory)) { + // Sync and check same directory again + case 3 /* Maybe */: + packageJsonCache.searchDirectoryAndAncestors(directory, project); + return processDirectory(directory); + // Check package.json + case -1 /* True */: + const packageJsonFileName = combinePaths(directory, "package.json"); + this.watchPackageJsonFile(packageJsonFileName, this.toPath(packageJsonFileName), project); + const info = packageJsonCache.getInDirectory(directory); + if (info) result.push(info); + } + if (rootPath && rootPath === directory) { + return true; + } + }; + forEachAncestorDirectoryStoppingAtGlobalCache( + project, + getDirectoryPath(fileName), + processDirectory + ); + return result; + } + /** @internal */ + getNearestAncestorDirectoryWithPackageJson(fileName, project) { + return forEachAncestorDirectoryStoppingAtGlobalCache( + project, + fileName, + (directory) => { + switch (this.packageJsonCache.directoryHasPackageJson(directory)) { + case -1 /* True */: + return directory; + case 0 /* False */: + return void 0; + case 3 /* Maybe */: + return this.host.fileExists(combinePaths(directory, "package.json")) ? directory : void 0; + } + } + ); + } + watchPackageJsonFile(file, path, project) { + Debug.assert(project !== void 0); + let result = (this.packageJsonFilesMap ?? (this.packageJsonFilesMap = /* @__PURE__ */ new Map())).get(path); + if (!result) { + let watcher = this.watchFactory.watchFile( + file, + (fileName, eventKind) => { + switch (eventKind) { + case 0 /* Created */: + case 1 /* Changed */: + this.packageJsonCache.addOrUpdate(fileName, path); + this.onPackageJsonChange(result); + break; + case 2 /* Deleted */: + this.packageJsonCache.delete(path); + this.onPackageJsonChange(result); + result.projects.clear(); + result.close(); + } + }, + 250 /* Low */, + this.hostConfiguration.watchOptions, + WatchType.PackageJson + ); + result = { + projects: /* @__PURE__ */ new Set(), + close: () => { + var _a; + if (result.projects.size || !watcher) return; + watcher.close(); + watcher = void 0; + (_a = this.packageJsonFilesMap) == null ? void 0 : _a.delete(path); + this.packageJsonCache.invalidate(path); + } + }; + this.packageJsonFilesMap.set(path, result); + } + result.projects.add(project); + (project.packageJsonWatches ?? (project.packageJsonWatches = /* @__PURE__ */ new Set())).add(result); + } + onPackageJsonChange(result) { + result.projects.forEach((project) => { + var _a; + return (_a = project.onPackageJsonChange) == null ? void 0 : _a.call(project); + }); + } + /** @internal */ + includePackageJsonAutoImports() { + switch (this.hostConfiguration.preferences.includePackageJsonAutoImports) { + case "on": + return 1 /* On */; + case "off": + return 0 /* Off */; + default: + return 2 /* Auto */; + } + } + /** @internal */ + getIncompleteCompletionsCache() { + return this.incompleteCompletionsCache || (this.incompleteCompletionsCache = createIncompleteCompletionsCache()); + } +}; +/** Makes a filename safe to insert in a RegExp */ +_ProjectService.filenameEscapeRegexp = /[-/\\^$*+?.()|[\]{}]/g; +var ProjectService2 = _ProjectService; +function createIncompleteCompletionsCache() { + let info; + return { + get() { + return info; + }, + set(newInfo) { + info = newInfo; + }, + clear() { + info = void 0; + } + }; +} +function isConfigFile(config) { + return config.kind !== void 0; +} +function printProjectWithoutFileNames(project) { + project.print( + /*writeProjectFileNames*/ + false, + /*writeFileExplaination*/ + false, + /*writeFileVersionAndText*/ + false + ); +} + +// src/server/moduleSpecifierCache.ts +function createModuleSpecifierCache(host) { + let containedNodeModulesWatchers; + let cache; + let currentKey; + const result = { + get(fromFileName, toFileName2, preferences, options) { + if (!cache || currentKey !== key(fromFileName, preferences, options)) return void 0; + return cache.get(toFileName2); + }, + set(fromFileName, toFileName2, preferences, options, kind, modulePaths, moduleSpecifiers) { + ensureCache(fromFileName, preferences, options).set(toFileName2, createInfo( + kind, + modulePaths, + moduleSpecifiers, + /*packageName*/ + void 0, + /*isBlockedByPackageJsonDependencies*/ + false + )); + if (moduleSpecifiers) { + for (const p of modulePaths) { + if (p.isInNodeModules) { + const nodeModulesPath = p.path.substring(0, p.path.indexOf(nodeModulesPathPart) + nodeModulesPathPart.length - 1); + const key2 = host.toPath(nodeModulesPath); + if (!(containedNodeModulesWatchers == null ? void 0 : containedNodeModulesWatchers.has(key2))) { + (containedNodeModulesWatchers || (containedNodeModulesWatchers = /* @__PURE__ */ new Map())).set( + key2, + host.watchNodeModulesForPackageJsonChanges(nodeModulesPath) + ); + } + } + } + } + }, + setModulePaths(fromFileName, toFileName2, preferences, options, modulePaths) { + const cache2 = ensureCache(fromFileName, preferences, options); + const info = cache2.get(toFileName2); + if (info) { + info.modulePaths = modulePaths; + } else { + cache2.set(toFileName2, createInfo( + /*kind*/ + void 0, + modulePaths, + /*moduleSpecifiers*/ + void 0, + /*packageName*/ + void 0, + /*isBlockedByPackageJsonDependencies*/ + void 0 + )); + } + }, + setBlockedByPackageJsonDependencies(fromFileName, toFileName2, preferences, options, packageName, isBlockedByPackageJsonDependencies) { + const cache2 = ensureCache(fromFileName, preferences, options); + const info = cache2.get(toFileName2); + if (info) { + info.isBlockedByPackageJsonDependencies = isBlockedByPackageJsonDependencies; + info.packageName = packageName; + } else { + cache2.set(toFileName2, createInfo( + /*kind*/ + void 0, + /*modulePaths*/ + void 0, + /*moduleSpecifiers*/ + void 0, + packageName, + isBlockedByPackageJsonDependencies + )); + } + }, + clear() { + containedNodeModulesWatchers == null ? void 0 : containedNodeModulesWatchers.forEach(closeFileWatcher); + cache == null ? void 0 : cache.clear(); + containedNodeModulesWatchers == null ? void 0 : containedNodeModulesWatchers.clear(); + currentKey = void 0; + }, + count() { + return cache ? cache.size : 0; + } + }; + if (Debug.isDebugging) { + Object.defineProperty(result, "__cache", { get: () => cache }); + } + return result; + function ensureCache(fromFileName, preferences, options) { + const newKey = key(fromFileName, preferences, options); + if (cache && currentKey !== newKey) { + result.clear(); + } + currentKey = newKey; + return cache || (cache = /* @__PURE__ */ new Map()); + } + function key(fromFileName, preferences, options) { + return `${fromFileName},${preferences.importModuleSpecifierEnding},${preferences.importModuleSpecifierPreference},${options.overrideImportMode}`; + } + function createInfo(kind, modulePaths, moduleSpecifiers, packageName, isBlockedByPackageJsonDependencies) { + return { kind, modulePaths, moduleSpecifiers, packageName, isBlockedByPackageJsonDependencies }; + } +} + +// src/server/packageJsonCache.ts +function createPackageJsonCache(host) { + const packageJsons = /* @__PURE__ */ new Map(); + const directoriesWithoutPackageJson = /* @__PURE__ */ new Map(); + return { + addOrUpdate, + invalidate, + delete: (fileName) => { + packageJsons.delete(fileName); + directoriesWithoutPackageJson.set(getDirectoryPath(fileName), true); + }, + getInDirectory: (directory) => { + return packageJsons.get(host.toPath(combinePaths(directory, "package.json"))) || void 0; + }, + directoryHasPackageJson: (directory) => directoryHasPackageJson(host.toPath(directory)), + searchDirectoryAndAncestors: (directory, project) => { + forEachAncestorDirectoryStoppingAtGlobalCache( + project, + directory, + (ancestor) => { + const ancestorPath = host.toPath(ancestor); + if (directoryHasPackageJson(ancestorPath) !== 3 /* Maybe */) { + return true; + } + const packageJsonFileName = combinePaths(ancestor, "package.json"); + if (tryFileExists(host, packageJsonFileName)) { + addOrUpdate(packageJsonFileName, combinePaths(ancestorPath, "package.json")); + } else { + directoriesWithoutPackageJson.set(ancestorPath, true); + } + } + ); + } + }; + function addOrUpdate(fileName, path) { + const packageJsonInfo = Debug.checkDefined(createPackageJsonInfo(fileName, host.host)); + packageJsons.set(path, packageJsonInfo); + directoriesWithoutPackageJson.delete(getDirectoryPath(path)); + } + function invalidate(path) { + packageJsons.delete(path); + directoriesWithoutPackageJson.delete(getDirectoryPath(path)); + } + function directoryHasPackageJson(directory) { + return packageJsons.has(combinePaths(directory, "package.json")) ? -1 /* True */ : directoriesWithoutPackageJson.has(directory) ? 0 /* False */ : 3 /* Maybe */; + } +} + +// src/server/session.ts +var nullCancellationToken = { + isCancellationRequested: () => false, + setRequest: () => void 0, + resetRequest: () => void 0 +}; +function hrTimeToMilliseconds(time) { + const seconds = time[0]; + const nanoseconds = time[1]; + return (1e9 * seconds + nanoseconds) / 1e6; +} +function isDeclarationFileInJSOnlyNonConfiguredProject(project, file) { + if ((isInferredProject(project) || isExternalProject(project)) && project.isJsOnlyProject()) { + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + return scriptInfo && !scriptInfo.isJavaScript(); + } + return false; +} +function dtsChangeCanAffectEmit(compilationSettings) { + return getEmitDeclarations(compilationSettings) || !!compilationSettings.emitDecoratorMetadata; +} +function formatDiag(fileName, project, diag2) { + const scriptInfo = project.getScriptInfoForNormalizedPath(fileName); + return { + start: scriptInfo.positionToLineOffset(diag2.start), + end: scriptInfo.positionToLineOffset(diag2.start + diag2.length), + // TODO: GH#18217 + text: flattenDiagnosticMessageText(diag2.messageText, "\n"), + code: diag2.code, + category: diagnosticCategoryName(diag2), + reportsUnnecessary: diag2.reportsUnnecessary, + reportsDeprecated: diag2.reportsDeprecated, + source: diag2.source, + relatedInformation: map(diag2.relatedInformation, formatRelatedInformation) + }; +} +function formatRelatedInformation(info) { + if (!info.file) { + return { + message: flattenDiagnosticMessageText(info.messageText, "\n"), + category: diagnosticCategoryName(info), + code: info.code + }; + } + return { + span: { + start: convertToLocation(getLineAndCharacterOfPosition(info.file, info.start)), + end: convertToLocation(getLineAndCharacterOfPosition(info.file, info.start + info.length)), + // TODO: GH#18217 + file: info.file.fileName + }, + message: flattenDiagnosticMessageText(info.messageText, "\n"), + category: diagnosticCategoryName(info), + code: info.code + }; +} +function convertToLocation(lineAndCharacter) { + return { line: lineAndCharacter.line + 1, offset: lineAndCharacter.character + 1 }; +} +function formatDiagnosticToProtocol(diag2, includeFileName) { + const start = diag2.file && convertToLocation(getLineAndCharacterOfPosition(diag2.file, diag2.start)); + const end = diag2.file && convertToLocation(getLineAndCharacterOfPosition(diag2.file, diag2.start + diag2.length)); + const text = flattenDiagnosticMessageText(diag2.messageText, "\n"); + const { code, source } = diag2; + const category = diagnosticCategoryName(diag2); + const common = { + start, + end, + text, + code, + category, + reportsUnnecessary: diag2.reportsUnnecessary, + reportsDeprecated: diag2.reportsDeprecated, + source, + relatedInformation: map(diag2.relatedInformation, formatRelatedInformation) + }; + return includeFileName ? { ...common, fileName: diag2.file && diag2.file.fileName } : common; +} +function allEditsBeforePos(edits, pos) { + return edits.every((edit) => textSpanEnd(edit.span) < pos); +} +var CommandNames = CommandTypes; +function formatMessage2(msg, logger, byteLength, newLine) { + const verboseLogging = logger.hasLevel(3 /* verbose */); + const json = JSON.stringify(msg); + if (verboseLogging) { + logger.info(`${msg.type}:${stringifyIndented(msg)}`); + } + const len = byteLength(json, "utf8"); + return `Content-Length: ${1 + len}\r +\r +${json}${newLine}`; +} +var MultistepOperation = class { + constructor(operationHost) { + this.operationHost = operationHost; + } + startNew(action) { + this.complete(); + this.requestId = this.operationHost.getCurrentRequestId(); + this.executeAction(action); + } + complete() { + if (this.requestId !== void 0) { + this.operationHost.sendRequestCompletedEvent(this.requestId, this.performanceData); + this.requestId = void 0; + } + this.setTimerHandle(void 0); + this.setImmediateId(void 0); + this.performanceData = void 0; + } + immediate(actionType, action) { + const requestId = this.requestId; + Debug.assert(requestId === this.operationHost.getCurrentRequestId(), "immediate: incorrect request id"); + this.setImmediateId( + this.operationHost.getServerHost().setImmediate(() => { + this.immediateId = void 0; + this.operationHost.executeWithRequestId(requestId, () => this.executeAction(action), this.performanceData); + }, actionType) + ); + } + delay(actionType, ms, action) { + const requestId = this.requestId; + Debug.assert(requestId === this.operationHost.getCurrentRequestId(), "delay: incorrect request id"); + this.setTimerHandle( + this.operationHost.getServerHost().setTimeout( + () => { + this.timerHandle = void 0; + this.operationHost.executeWithRequestId(requestId, () => this.executeAction(action), this.performanceData); + }, + ms, + actionType + ) + ); + } + executeAction(action) { + var _a, _b, _c, _d, _e, _f; + let stop = false; + try { + if (this.operationHost.isCancellationRequested()) { + stop = true; + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.Session, "stepCanceled", { seq: this.requestId, early: true }); + } else { + (_b = tracing) == null ? void 0 : _b.push(tracing.Phase.Session, "stepAction", { seq: this.requestId }); + action(this); + (_c = tracing) == null ? void 0 : _c.pop(); + } + } catch (e) { + (_d = tracing) == null ? void 0 : _d.popAll(); + stop = true; + if (e instanceof OperationCanceledException) { + (_e = tracing) == null ? void 0 : _e.instant(tracing.Phase.Session, "stepCanceled", { seq: this.requestId }); + } else { + (_f = tracing) == null ? void 0 : _f.instant(tracing.Phase.Session, "stepError", { seq: this.requestId, message: e.message }); + this.operationHost.logError(e, `delayed processing of request ${this.requestId}`); + } + } + this.performanceData = this.operationHost.getPerformanceData(); + if (stop || !this.hasPendingWork()) { + this.complete(); + } + } + setTimerHandle(timerHandle) { + if (this.timerHandle !== void 0) { + this.operationHost.getServerHost().clearTimeout(this.timerHandle); + } + this.timerHandle = timerHandle; + } + setImmediateId(immediateId) { + if (this.immediateId !== void 0) { + this.operationHost.getServerHost().clearImmediate(this.immediateId); + } + this.immediateId = immediateId; + } + hasPendingWork() { + return !!this.timerHandle || !!this.immediateId; + } +}; +function toEvent(eventName, body) { + return { + seq: 0, + type: "event", + event: eventName, + body + }; +} +function combineProjectOutput(defaultValue, getValue, projects, action) { + const outputs = flatMapToMutable(isArray(projects) ? projects : projects.projects, (project) => action(project, defaultValue)); + if (!isArray(projects) && projects.symLinkedProjects) { + projects.symLinkedProjects.forEach((projects2, path) => { + const value = getValue(path); + outputs.push(...flatMap(projects2, (project) => action(project, value))); + }); + } + return deduplicate(outputs, equateValues); +} +function createDocumentSpanSet(useCaseSensitiveFileNames2) { + return createSet(({ textSpan }) => textSpan.start + 100003 * textSpan.length, getDocumentSpansEqualityComparer(useCaseSensitiveFileNames2)); +} +function getRenameLocationsWorker(projects, defaultProject, initialLocation, findInStrings, findInComments, preferences, useCaseSensitiveFileNames2) { + const perProjectResults = getPerProjectReferences( + projects, + defaultProject, + initialLocation, + getDefinitionLocation( + defaultProject, + initialLocation, + /*isForRename*/ + true + ), + mapDefinitionInProject, + (project, position) => project.getLanguageService().findRenameLocations(position.fileName, position.pos, findInStrings, findInComments, preferences), + (renameLocation, cb) => cb(documentSpanLocation(renameLocation)) + ); + if (isArray(perProjectResults)) { + return perProjectResults; + } + const results = []; + const seen = createDocumentSpanSet(useCaseSensitiveFileNames2); + perProjectResults.forEach((projectResults, project) => { + for (const result of projectResults) { + if (!seen.has(result) && !getMappedLocationForProject(documentSpanLocation(result), project)) { + results.push(result); + seen.add(result); + } + } + }); + return results; +} +function getDefinitionLocation(defaultProject, initialLocation, isForRename) { + const infos = defaultProject.getLanguageService().getDefinitionAtPosition( + initialLocation.fileName, + initialLocation.pos, + /*searchOtherFilesOnly*/ + false, + /*stopAtAlias*/ + isForRename + ); + const info = infos && firstOrUndefined(infos); + return info && !info.isLocal ? { fileName: info.fileName, pos: info.textSpan.start } : void 0; +} +function getReferencesWorker(projects, defaultProject, initialLocation, useCaseSensitiveFileNames2, logger) { + var _a, _b; + const perProjectResults = getPerProjectReferences( + projects, + defaultProject, + initialLocation, + getDefinitionLocation( + defaultProject, + initialLocation, + /*isForRename*/ + false + ), + mapDefinitionInProject, + (project, position) => { + logger.info(`Finding references to ${position.fileName} position ${position.pos} in project ${project.getProjectName()}`); + return project.getLanguageService().findReferences(position.fileName, position.pos); + }, + (referencedSymbol, cb) => { + cb(documentSpanLocation(referencedSymbol.definition)); + for (const ref of referencedSymbol.references) { + cb(documentSpanLocation(ref)); + } + } + ); + if (isArray(perProjectResults)) { + return perProjectResults; + } + const defaultProjectResults = perProjectResults.get(defaultProject); + if (((_b = (_a = defaultProjectResults == null ? void 0 : defaultProjectResults[0]) == null ? void 0 : _a.references[0]) == null ? void 0 : _b.isDefinition) === void 0) { + perProjectResults.forEach((projectResults) => { + for (const referencedSymbol of projectResults) { + for (const ref of referencedSymbol.references) { + delete ref.isDefinition; + } + } + }); + } else { + const knownSymbolSpans = createDocumentSpanSet(useCaseSensitiveFileNames2); + for (const referencedSymbol of defaultProjectResults) { + for (const ref of referencedSymbol.references) { + if (ref.isDefinition) { + knownSymbolSpans.add(ref); + break; + } + } + } + const updatedProjects = /* @__PURE__ */ new Set(); + while (true) { + let progress = false; + perProjectResults.forEach((referencedSymbols, project) => { + if (updatedProjects.has(project)) return; + const updated = project.getLanguageService().updateIsDefinitionOfReferencedSymbols(referencedSymbols, knownSymbolSpans); + if (updated) { + updatedProjects.add(project); + progress = true; + } + }); + if (!progress) break; + } + perProjectResults.forEach((referencedSymbols, project) => { + if (updatedProjects.has(project)) return; + for (const referencedSymbol of referencedSymbols) { + for (const ref of referencedSymbol.references) { + ref.isDefinition = false; + } + } + }); + } + const results = []; + const seenRefs = createDocumentSpanSet(useCaseSensitiveFileNames2); + perProjectResults.forEach((projectResults, project) => { + for (const referencedSymbol of projectResults) { + const mappedDefinitionFile = getMappedLocationForProject(documentSpanLocation(referencedSymbol.definition), project); + const definition = mappedDefinitionFile === void 0 ? referencedSymbol.definition : { + ...referencedSymbol.definition, + textSpan: createTextSpan(mappedDefinitionFile.pos, referencedSymbol.definition.textSpan.length), + // Why would the length be the same in the original? + fileName: mappedDefinitionFile.fileName, + contextSpan: getMappedContextSpanForProject(referencedSymbol.definition, project) + }; + let symbolToAddTo = find(results, (o) => documentSpansEqual(o.definition, definition, useCaseSensitiveFileNames2)); + if (!symbolToAddTo) { + symbolToAddTo = { definition, references: [] }; + results.push(symbolToAddTo); + } + for (const ref of referencedSymbol.references) { + if (!seenRefs.has(ref) && !getMappedLocationForProject(documentSpanLocation(ref), project)) { + seenRefs.add(ref); + symbolToAddTo.references.push(ref); + } + } + } + }); + return results.filter((o) => o.references.length !== 0); +} +function forEachProjectInProjects(projects, path, cb) { + for (const project of isArray(projects) ? projects : projects.projects) { + cb(project, path); + } + if (!isArray(projects) && projects.symLinkedProjects) { + projects.symLinkedProjects.forEach((symlinkedProjects, symlinkedPath) => { + for (const project of symlinkedProjects) { + cb(project, symlinkedPath); + } + }); + } +} +function getPerProjectReferences(projects, defaultProject, initialLocation, defaultDefinition, mapDefinitionInProject2, getResultsForPosition, forPositionInResult) { + const resultsMap = /* @__PURE__ */ new Map(); + const queue = createQueue(); + queue.enqueue({ project: defaultProject, location: initialLocation }); + forEachProjectInProjects(projects, initialLocation.fileName, (project, path) => { + const location = { fileName: path, pos: initialLocation.pos }; + queue.enqueue({ project, location }); + }); + const projectService = defaultProject.projectService; + const cancellationToken = defaultProject.getCancellationToken(); + const getGeneratedDefinition = memoize( + () => defaultProject.isSourceOfProjectReferenceRedirect(defaultDefinition.fileName) ? defaultDefinition : defaultProject.getLanguageService().getSourceMapper().tryGetGeneratedPosition(defaultDefinition) + ); + const getSourceDefinition = memoize( + () => defaultProject.isSourceOfProjectReferenceRedirect(defaultDefinition.fileName) ? defaultDefinition : defaultProject.getLanguageService().getSourceMapper().tryGetSourcePosition(defaultDefinition) + ); + const searchedProjectKeys = /* @__PURE__ */ new Set(); + onCancellation: + while (!queue.isEmpty()) { + while (!queue.isEmpty()) { + if (cancellationToken.isCancellationRequested()) break onCancellation; + const { project, location } = queue.dequeue(); + if (resultsMap.has(project)) continue; + if (isLocationProjectReferenceRedirect(project, location)) continue; + updateProjectIfDirty(project); + if (!project.containsFile(toNormalizedPath(location.fileName))) { + continue; + } + const projectResults = searchPosition(project, location); + resultsMap.set(project, projectResults ?? emptyArray2); + searchedProjectKeys.add(getProjectKey(project)); + } + if (defaultDefinition) { + projectService.loadAncestorProjectTree(searchedProjectKeys); + projectService.forEachEnabledProject((project) => { + if (cancellationToken.isCancellationRequested()) return; + if (resultsMap.has(project)) return; + const location = mapDefinitionInProject2(defaultDefinition, project, getGeneratedDefinition, getSourceDefinition); + if (location) { + queue.enqueue({ project, location }); + } + }); + } + } + if (resultsMap.size === 1) { + return firstIterator(resultsMap.values()); + } + return resultsMap; + function searchPosition(project, location) { + const projectResults = getResultsForPosition(project, location); + if (!projectResults || !forPositionInResult) return projectResults; + for (const result of projectResults) { + forPositionInResult(result, (position) => { + const originalLocation = projectService.getOriginalLocationEnsuringConfiguredProject(project, position); + if (!originalLocation) return; + const originalScriptInfo = projectService.getScriptInfo(originalLocation.fileName); + for (const project2 of originalScriptInfo.containingProjects) { + if (!project2.isOrphan() && !resultsMap.has(project2)) { + queue.enqueue({ project: project2, location: originalLocation }); + } + } + const symlinkedProjectsMap = projectService.getSymlinkedProjects(originalScriptInfo); + if (symlinkedProjectsMap) { + symlinkedProjectsMap.forEach((symlinkedProjects, symlinkedPath) => { + for (const symlinkedProject of symlinkedProjects) { + if (!symlinkedProject.isOrphan() && !resultsMap.has(symlinkedProject)) { + queue.enqueue({ project: symlinkedProject, location: { fileName: symlinkedPath, pos: originalLocation.pos } }); + } + } + }); + } + }); + } + return projectResults; + } +} +function mapDefinitionInProjectIfFileInProject(definition, project) { + if (project.containsFile(toNormalizedPath(definition.fileName)) && !isLocationProjectReferenceRedirect(project, definition)) { + return definition; + } +} +function mapDefinitionInProject(definition, project, getGeneratedDefinition, getSourceDefinition) { + const result = mapDefinitionInProjectIfFileInProject(definition, project); + if (result) return result; + const generatedDefinition = getGeneratedDefinition(); + if (generatedDefinition && project.containsFile(toNormalizedPath(generatedDefinition.fileName))) return generatedDefinition; + const sourceDefinition = getSourceDefinition(); + return sourceDefinition && project.containsFile(toNormalizedPath(sourceDefinition.fileName)) ? sourceDefinition : void 0; +} +function isLocationProjectReferenceRedirect(project, location) { + if (!location) return false; + const program = project.getLanguageService().getProgram(); + if (!program) return false; + const sourceFile = program.getSourceFile(location.fileName); + return !!sourceFile && sourceFile.resolvedPath !== sourceFile.path && sourceFile.resolvedPath !== project.toPath(location.fileName); +} +function getProjectKey(project) { + return isConfiguredProject(project) ? project.canonicalConfigFilePath : project.getProjectName(); +} +function documentSpanLocation({ fileName, textSpan }) { + return { fileName, pos: textSpan.start }; +} +function getMappedLocationForProject(location, project) { + return getMappedLocation(location, project.getSourceMapper(), (p) => project.projectService.fileExists(p)); +} +function getMappedDocumentSpanForProject(documentSpan, project) { + return getMappedDocumentSpan(documentSpan, project.getSourceMapper(), (p) => project.projectService.fileExists(p)); +} +function getMappedContextSpanForProject(documentSpan, project) { + return getMappedContextSpan(documentSpan, project.getSourceMapper(), (p) => project.projectService.fileExists(p)); +} +var invalidPartialSemanticModeCommands = [ + "openExternalProject" /* OpenExternalProject */, + "openExternalProjects" /* OpenExternalProjects */, + "closeExternalProject" /* CloseExternalProject */, + "synchronizeProjectList" /* SynchronizeProjectList */, + "emit-output" /* EmitOutput */, + "compileOnSaveAffectedFileList" /* CompileOnSaveAffectedFileList */, + "compileOnSaveEmitFile" /* CompileOnSaveEmitFile */, + "compilerOptionsDiagnostics-full" /* CompilerOptionsDiagnosticsFull */, + "encodedSemanticClassifications-full" /* EncodedSemanticClassificationsFull */, + "semanticDiagnosticsSync" /* SemanticDiagnosticsSync */, + "suggestionDiagnosticsSync" /* SuggestionDiagnosticsSync */, + "geterrForProject" /* GeterrForProject */, + "reload" /* Reload */, + "reloadProjects" /* ReloadProjects */, + "getCodeFixes" /* GetCodeFixes */, + "getCodeFixes-full" /* GetCodeFixesFull */, + "getCombinedCodeFix" /* GetCombinedCodeFix */, + "getCombinedCodeFix-full" /* GetCombinedCodeFixFull */, + "applyCodeActionCommand" /* ApplyCodeActionCommand */, + "getSupportedCodeFixes" /* GetSupportedCodeFixes */, + "getApplicableRefactors" /* GetApplicableRefactors */, + "getMoveToRefactoringFileSuggestions" /* GetMoveToRefactoringFileSuggestions */, + "getEditsForRefactor" /* GetEditsForRefactor */, + "getEditsForRefactor-full" /* GetEditsForRefactorFull */, + "organizeImports" /* OrganizeImports */, + "organizeImports-full" /* OrganizeImportsFull */, + "getEditsForFileRename" /* GetEditsForFileRename */, + "getEditsForFileRename-full" /* GetEditsForFileRenameFull */, + "prepareCallHierarchy" /* PrepareCallHierarchy */, + "provideCallHierarchyIncomingCalls" /* ProvideCallHierarchyIncomingCalls */, + "provideCallHierarchyOutgoingCalls" /* ProvideCallHierarchyOutgoingCalls */, + "getPasteEdits" /* GetPasteEdits */, + "copilotRelated" /* CopilotRelated */ +]; +var invalidSyntacticModeCommands = [ + ...invalidPartialSemanticModeCommands, + "definition" /* Definition */, + "definition-full" /* DefinitionFull */, + "definitionAndBoundSpan" /* DefinitionAndBoundSpan */, + "definitionAndBoundSpan-full" /* DefinitionAndBoundSpanFull */, + "typeDefinition" /* TypeDefinition */, + "implementation" /* Implementation */, + "implementation-full" /* ImplementationFull */, + "references" /* References */, + "references-full" /* ReferencesFull */, + "rename" /* Rename */, + "renameLocations-full" /* RenameLocationsFull */, + "rename-full" /* RenameInfoFull */, + "quickinfo" /* Quickinfo */, + "quickinfo-full" /* QuickinfoFull */, + "completionInfo" /* CompletionInfo */, + "completions" /* Completions */, + "completions-full" /* CompletionsFull */, + "completionEntryDetails" /* CompletionDetails */, + "completionEntryDetails-full" /* CompletionDetailsFull */, + "signatureHelp" /* SignatureHelp */, + "signatureHelp-full" /* SignatureHelpFull */, + "navto" /* Navto */, + "navto-full" /* NavtoFull */, + "documentHighlights" /* DocumentHighlights */, + "documentHighlights-full" /* DocumentHighlightsFull */, + "preparePasteEdits" /* PreparePasteEdits */ +]; +var Session3 = class _Session { + constructor(opts) { + this.changeSeq = 0; + // Minimum number of lines for attempting to use region diagnostics for a file. + /** @internal */ + this.regionDiagLineCountThreshold = 500; + this.handlers = new Map(Object.entries({ + // TODO(jakebailey): correctly type the handlers + ["status" /* Status */]: () => { + const response = { version }; + return this.requiredResponse(response); + }, + ["openExternalProject" /* OpenExternalProject */]: (request) => { + this.projectService.openExternalProject( + request.arguments, + /*cleanupAfter*/ + true + ); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["openExternalProjects" /* OpenExternalProjects */]: (request) => { + this.projectService.openExternalProjects(request.arguments.projects); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["closeExternalProject" /* CloseExternalProject */]: (request) => { + this.projectService.closeExternalProject( + request.arguments.projectFileName, + /*cleanupAfter*/ + true + ); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["synchronizeProjectList" /* SynchronizeProjectList */]: (request) => { + const result = this.projectService.synchronizeProjectList(request.arguments.knownProjects, request.arguments.includeProjectReferenceRedirectInfo); + if (!result.some((p) => p.projectErrors && p.projectErrors.length !== 0)) { + return this.requiredResponse(result); + } + const converted = map(result, (p) => { + if (!p.projectErrors || p.projectErrors.length === 0) { + return p; + } + return { + info: p.info, + changes: p.changes, + files: p.files, + projectErrors: this.convertToDiagnosticsWithLinePosition( + p.projectErrors, + /*scriptInfo*/ + void 0 + ) + }; + }); + return this.requiredResponse(converted); + }, + ["updateOpen" /* UpdateOpen */]: (request) => { + this.changeSeq++; + this.projectService.applyChangesInOpenFiles( + request.arguments.openFiles && mapIterator(request.arguments.openFiles, (file) => ({ + fileName: file.file, + content: file.fileContent, + scriptKind: file.scriptKindName, + projectRootPath: file.projectRootPath + })), + request.arguments.changedFiles && mapIterator(request.arguments.changedFiles, (file) => ({ + fileName: file.fileName, + changes: mapDefinedIterator(arrayReverseIterator(file.textChanges), (change) => { + const scriptInfo = Debug.checkDefined(this.projectService.getScriptInfo(file.fileName)); + const start = scriptInfo.lineOffsetToPosition(change.start.line, change.start.offset); + const end = scriptInfo.lineOffsetToPosition(change.end.line, change.end.offset); + return start >= 0 ? { span: { start, length: end - start }, newText: change.newText } : void 0; + }) + })), + request.arguments.closedFiles + ); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["applyChangedToOpenFiles" /* ApplyChangedToOpenFiles */]: (request) => { + this.changeSeq++; + this.projectService.applyChangesInOpenFiles( + request.arguments.openFiles, + request.arguments.changedFiles && mapIterator(request.arguments.changedFiles, (file) => ({ + fileName: file.fileName, + // apply changes in reverse order + changes: arrayReverseIterator(file.changes) + })), + request.arguments.closedFiles + ); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["exit" /* Exit */]: () => { + this.exit(); + return this.notRequired( + /*request*/ + void 0 + ); + }, + ["definition" /* Definition */]: (request) => { + return this.requiredResponse(this.getDefinition( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["definition-full" /* DefinitionFull */]: (request) => { + return this.requiredResponse(this.getDefinition( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["definitionAndBoundSpan" /* DefinitionAndBoundSpan */]: (request) => { + return this.requiredResponse(this.getDefinitionAndBoundSpan( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["definitionAndBoundSpan-full" /* DefinitionAndBoundSpanFull */]: (request) => { + return this.requiredResponse(this.getDefinitionAndBoundSpan( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["findSourceDefinition" /* FindSourceDefinition */]: (request) => { + return this.requiredResponse(this.findSourceDefinition(request.arguments)); + }, + ["emit-output" /* EmitOutput */]: (request) => { + return this.requiredResponse(this.getEmitOutput(request.arguments)); + }, + ["typeDefinition" /* TypeDefinition */]: (request) => { + return this.requiredResponse(this.getTypeDefinition(request.arguments)); + }, + ["implementation" /* Implementation */]: (request) => { + return this.requiredResponse(this.getImplementation( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["implementation-full" /* ImplementationFull */]: (request) => { + return this.requiredResponse(this.getImplementation( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["references" /* References */]: (request) => { + return this.requiredResponse(this.getReferences( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["references-full" /* ReferencesFull */]: (request) => { + return this.requiredResponse(this.getReferences( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["rename" /* Rename */]: (request) => { + return this.requiredResponse(this.getRenameLocations( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["renameLocations-full" /* RenameLocationsFull */]: (request) => { + return this.requiredResponse(this.getRenameLocations( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["rename-full" /* RenameInfoFull */]: (request) => { + return this.requiredResponse(this.getRenameInfo(request.arguments)); + }, + ["open" /* Open */]: (request) => { + this.openClientFile( + toNormalizedPath(request.arguments.file), + request.arguments.fileContent, + convertScriptKindName(request.arguments.scriptKindName), + // TODO: GH#18217 + request.arguments.projectRootPath ? toNormalizedPath(request.arguments.projectRootPath) : void 0 + ); + return this.notRequired(request); + }, + ["quickinfo" /* Quickinfo */]: (request) => { + return this.requiredResponse(this.getQuickInfoWorker( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["quickinfo-full" /* QuickinfoFull */]: (request) => { + return this.requiredResponse(this.getQuickInfoWorker( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["getOutliningSpans" /* GetOutliningSpans */]: (request) => { + return this.requiredResponse(this.getOutliningSpans( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["outliningSpans" /* GetOutliningSpansFull */]: (request) => { + return this.requiredResponse(this.getOutliningSpans( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["todoComments" /* TodoComments */]: (request) => { + return this.requiredResponse(this.getTodoComments(request.arguments)); + }, + ["indentation" /* Indentation */]: (request) => { + return this.requiredResponse(this.getIndentation(request.arguments)); + }, + ["nameOrDottedNameSpan" /* NameOrDottedNameSpan */]: (request) => { + return this.requiredResponse(this.getNameOrDottedNameSpan(request.arguments)); + }, + ["breakpointStatement" /* BreakpointStatement */]: (request) => { + return this.requiredResponse(this.getBreakpointStatement(request.arguments)); + }, + ["braceCompletion" /* BraceCompletion */]: (request) => { + return this.requiredResponse(this.isValidBraceCompletion(request.arguments)); + }, + ["docCommentTemplate" /* DocCommentTemplate */]: (request) => { + return this.requiredResponse(this.getDocCommentTemplate(request.arguments)); + }, + ["getSpanOfEnclosingComment" /* GetSpanOfEnclosingComment */]: (request) => { + return this.requiredResponse(this.getSpanOfEnclosingComment(request.arguments)); + }, + ["fileReferences" /* FileReferences */]: (request) => { + return this.requiredResponse(this.getFileReferences( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["fileReferences-full" /* FileReferencesFull */]: (request) => { + return this.requiredResponse(this.getFileReferences( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["format" /* Format */]: (request) => { + return this.requiredResponse(this.getFormattingEditsForRange(request.arguments)); + }, + ["formatonkey" /* Formatonkey */]: (request) => { + return this.requiredResponse(this.getFormattingEditsAfterKeystroke(request.arguments)); + }, + ["format-full" /* FormatFull */]: (request) => { + return this.requiredResponse(this.getFormattingEditsForDocumentFull(request.arguments)); + }, + ["formatonkey-full" /* FormatonkeyFull */]: (request) => { + return this.requiredResponse(this.getFormattingEditsAfterKeystrokeFull(request.arguments)); + }, + ["formatRange-full" /* FormatRangeFull */]: (request) => { + return this.requiredResponse(this.getFormattingEditsForRangeFull(request.arguments)); + }, + ["completionInfo" /* CompletionInfo */]: (request) => { + return this.requiredResponse(this.getCompletions(request.arguments, "completionInfo" /* CompletionInfo */)); + }, + ["completions" /* Completions */]: (request) => { + return this.requiredResponse(this.getCompletions(request.arguments, "completions" /* Completions */)); + }, + ["completions-full" /* CompletionsFull */]: (request) => { + return this.requiredResponse(this.getCompletions(request.arguments, "completions-full" /* CompletionsFull */)); + }, + ["completionEntryDetails" /* CompletionDetails */]: (request) => { + return this.requiredResponse(this.getCompletionEntryDetails( + request.arguments, + /*fullResult*/ + false + )); + }, + ["completionEntryDetails-full" /* CompletionDetailsFull */]: (request) => { + return this.requiredResponse(this.getCompletionEntryDetails( + request.arguments, + /*fullResult*/ + true + )); + }, + ["compileOnSaveAffectedFileList" /* CompileOnSaveAffectedFileList */]: (request) => { + return this.requiredResponse(this.getCompileOnSaveAffectedFileList(request.arguments)); + }, + ["compileOnSaveEmitFile" /* CompileOnSaveEmitFile */]: (request) => { + return this.requiredResponse(this.emitFile(request.arguments)); + }, + ["signatureHelp" /* SignatureHelp */]: (request) => { + return this.requiredResponse(this.getSignatureHelpItems( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["signatureHelp-full" /* SignatureHelpFull */]: (request) => { + return this.requiredResponse(this.getSignatureHelpItems( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["compilerOptionsDiagnostics-full" /* CompilerOptionsDiagnosticsFull */]: (request) => { + return this.requiredResponse(this.getCompilerOptionsDiagnostics(request.arguments)); + }, + ["encodedSyntacticClassifications-full" /* EncodedSyntacticClassificationsFull */]: (request) => { + return this.requiredResponse(this.getEncodedSyntacticClassifications(request.arguments)); + }, + ["encodedSemanticClassifications-full" /* EncodedSemanticClassificationsFull */]: (request) => { + return this.requiredResponse(this.getEncodedSemanticClassifications(request.arguments)); + }, + ["cleanup" /* Cleanup */]: () => { + this.cleanup(); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["semanticDiagnosticsSync" /* SemanticDiagnosticsSync */]: (request) => { + return this.requiredResponse(this.getSemanticDiagnosticsSync(request.arguments)); + }, + ["syntacticDiagnosticsSync" /* SyntacticDiagnosticsSync */]: (request) => { + return this.requiredResponse(this.getSyntacticDiagnosticsSync(request.arguments)); + }, + ["suggestionDiagnosticsSync" /* SuggestionDiagnosticsSync */]: (request) => { + return this.requiredResponse(this.getSuggestionDiagnosticsSync(request.arguments)); + }, + ["geterr" /* Geterr */]: (request) => { + this.errorCheck.startNew((next) => this.getDiagnostics(next, request.arguments.delay, request.arguments.files)); + return this.notRequired( + /*request*/ + void 0 + ); + }, + ["geterrForProject" /* GeterrForProject */]: (request) => { + this.errorCheck.startNew((next) => this.getDiagnosticsForProject(next, request.arguments.delay, request.arguments.file)); + return this.notRequired( + /*request*/ + void 0 + ); + }, + ["change" /* Change */]: (request) => { + this.change(request.arguments); + return this.notRequired(request); + }, + ["configure" /* Configure */]: (request) => { + this.projectService.setHostConfiguration(request.arguments); + return this.notRequired(request); + }, + ["reload" /* Reload */]: (request) => { + this.reload(request.arguments); + return this.requiredResponse({ reloadFinished: true }); + }, + ["saveto" /* Saveto */]: (request) => { + const savetoArgs = request.arguments; + this.saveToTmp(savetoArgs.file, savetoArgs.tmpfile); + return this.notRequired(request); + }, + ["close" /* Close */]: (request) => { + const closeArgs = request.arguments; + this.closeClientFile(closeArgs.file); + return this.notRequired(request); + }, + ["navto" /* Navto */]: (request) => { + return this.requiredResponse(this.getNavigateToItems( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["navto-full" /* NavtoFull */]: (request) => { + return this.requiredResponse(this.getNavigateToItems( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["brace" /* Brace */]: (request) => { + return this.requiredResponse(this.getBraceMatching( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["brace-full" /* BraceFull */]: (request) => { + return this.requiredResponse(this.getBraceMatching( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["navbar" /* NavBar */]: (request) => { + return this.requiredResponse(this.getNavigationBarItems( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["navbar-full" /* NavBarFull */]: (request) => { + return this.requiredResponse(this.getNavigationBarItems( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["navtree" /* NavTree */]: (request) => { + return this.requiredResponse(this.getNavigationTree( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["navtree-full" /* NavTreeFull */]: (request) => { + return this.requiredResponse(this.getNavigationTree( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["documentHighlights" /* DocumentHighlights */]: (request) => { + return this.requiredResponse(this.getDocumentHighlights( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["documentHighlights-full" /* DocumentHighlightsFull */]: (request) => { + return this.requiredResponse(this.getDocumentHighlights( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["compilerOptionsForInferredProjects" /* CompilerOptionsForInferredProjects */]: (request) => { + this.setCompilerOptionsForInferredProjects(request.arguments); + return this.requiredResponse( + /*response*/ + true + ); + }, + ["projectInfo" /* ProjectInfo */]: (request) => { + return this.requiredResponse(this.getProjectInfo(request.arguments)); + }, + ["reloadProjects" /* ReloadProjects */]: (request) => { + this.projectService.reloadProjects(); + return this.notRequired(request); + }, + ["jsxClosingTag" /* JsxClosingTag */]: (request) => { + return this.requiredResponse(this.getJsxClosingTag(request.arguments)); + }, + ["linkedEditingRange" /* LinkedEditingRange */]: (request) => { + return this.requiredResponse(this.getLinkedEditingRange(request.arguments)); + }, + ["getCodeFixes" /* GetCodeFixes */]: (request) => { + return this.requiredResponse(this.getCodeFixes( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["getCodeFixes-full" /* GetCodeFixesFull */]: (request) => { + return this.requiredResponse(this.getCodeFixes( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["getCombinedCodeFix" /* GetCombinedCodeFix */]: (request) => { + return this.requiredResponse(this.getCombinedCodeFix( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["getCombinedCodeFix-full" /* GetCombinedCodeFixFull */]: (request) => { + return this.requiredResponse(this.getCombinedCodeFix( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["applyCodeActionCommand" /* ApplyCodeActionCommand */]: (request) => { + return this.requiredResponse(this.applyCodeActionCommand(request.arguments)); + }, + ["getSupportedCodeFixes" /* GetSupportedCodeFixes */]: (request) => { + return this.requiredResponse(this.getSupportedCodeFixes(request.arguments)); + }, + ["getApplicableRefactors" /* GetApplicableRefactors */]: (request) => { + return this.requiredResponse(this.getApplicableRefactors(request.arguments)); + }, + ["getEditsForRefactor" /* GetEditsForRefactor */]: (request) => { + return this.requiredResponse(this.getEditsForRefactor( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["getMoveToRefactoringFileSuggestions" /* GetMoveToRefactoringFileSuggestions */]: (request) => { + return this.requiredResponse(this.getMoveToRefactoringFileSuggestions(request.arguments)); + }, + ["preparePasteEdits" /* PreparePasteEdits */]: (request) => { + return this.requiredResponse(this.preparePasteEdits(request.arguments)); + }, + ["getPasteEdits" /* GetPasteEdits */]: (request) => { + return this.requiredResponse(this.getPasteEdits(request.arguments)); + }, + ["getEditsForRefactor-full" /* GetEditsForRefactorFull */]: (request) => { + return this.requiredResponse(this.getEditsForRefactor( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["organizeImports" /* OrganizeImports */]: (request) => { + return this.requiredResponse(this.organizeImports( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["organizeImports-full" /* OrganizeImportsFull */]: (request) => { + return this.requiredResponse(this.organizeImports( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["getEditsForFileRename" /* GetEditsForFileRename */]: (request) => { + return this.requiredResponse(this.getEditsForFileRename( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["getEditsForFileRename-full" /* GetEditsForFileRenameFull */]: (request) => { + return this.requiredResponse(this.getEditsForFileRename( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["configurePlugin" /* ConfigurePlugin */]: (request) => { + this.configurePlugin(request.arguments); + return this.notRequired(request); + }, + ["selectionRange" /* SelectionRange */]: (request) => { + return this.requiredResponse(this.getSmartSelectionRange( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["selectionRange-full" /* SelectionRangeFull */]: (request) => { + return this.requiredResponse(this.getSmartSelectionRange( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["prepareCallHierarchy" /* PrepareCallHierarchy */]: (request) => { + return this.requiredResponse(this.prepareCallHierarchy(request.arguments)); + }, + ["provideCallHierarchyIncomingCalls" /* ProvideCallHierarchyIncomingCalls */]: (request) => { + return this.requiredResponse(this.provideCallHierarchyIncomingCalls(request.arguments)); + }, + ["provideCallHierarchyOutgoingCalls" /* ProvideCallHierarchyOutgoingCalls */]: (request) => { + return this.requiredResponse(this.provideCallHierarchyOutgoingCalls(request.arguments)); + }, + ["toggleLineComment" /* ToggleLineComment */]: (request) => { + return this.requiredResponse(this.toggleLineComment( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["toggleLineComment-full" /* ToggleLineCommentFull */]: (request) => { + return this.requiredResponse(this.toggleLineComment( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["toggleMultilineComment" /* ToggleMultilineComment */]: (request) => { + return this.requiredResponse(this.toggleMultilineComment( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["toggleMultilineComment-full" /* ToggleMultilineCommentFull */]: (request) => { + return this.requiredResponse(this.toggleMultilineComment( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["commentSelection" /* CommentSelection */]: (request) => { + return this.requiredResponse(this.commentSelection( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["commentSelection-full" /* CommentSelectionFull */]: (request) => { + return this.requiredResponse(this.commentSelection( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["uncommentSelection" /* UncommentSelection */]: (request) => { + return this.requiredResponse(this.uncommentSelection( + request.arguments, + /*simplifiedResult*/ + true + )); + }, + ["uncommentSelection-full" /* UncommentSelectionFull */]: (request) => { + return this.requiredResponse(this.uncommentSelection( + request.arguments, + /*simplifiedResult*/ + false + )); + }, + ["provideInlayHints" /* ProvideInlayHints */]: (request) => { + return this.requiredResponse(this.provideInlayHints(request.arguments)); + }, + ["mapCode" /* MapCode */]: (request) => { + return this.requiredResponse(this.mapCode(request.arguments)); + }, + ["copilotRelated" /* CopilotRelated */]: () => { + return this.requiredResponse(this.getCopilotRelatedInfo()); + } + })); + this.host = opts.host; + this.cancellationToken = opts.cancellationToken; + this.typingsInstaller = opts.typingsInstaller || nullTypingsInstaller; + this.byteLength = opts.byteLength; + this.hrtime = opts.hrtime; + this.logger = opts.logger; + this.canUseEvents = opts.canUseEvents; + this.suppressDiagnosticEvents = opts.suppressDiagnosticEvents; + this.noGetErrOnBackgroundUpdate = opts.noGetErrOnBackgroundUpdate; + const { throttleWaitMilliseconds } = opts; + this.eventHandler = this.canUseEvents ? opts.eventHandler || ((event) => this.defaultEventHandler(event)) : void 0; + const multistepOperationHost = { + executeWithRequestId: (requestId, action, performanceData) => this.executeWithRequestId(requestId, action, performanceData), + getCurrentRequestId: () => this.currentRequestId, + getPerformanceData: () => this.performanceData, + getServerHost: () => this.host, + logError: (err, cmd) => this.logError(err, cmd), + sendRequestCompletedEvent: (requestId, performanceData) => this.sendRequestCompletedEvent(requestId, performanceData), + isCancellationRequested: () => this.cancellationToken.isCancellationRequested() + }; + this.errorCheck = new MultistepOperation(multistepOperationHost); + const settings = { + host: this.host, + logger: this.logger, + cancellationToken: this.cancellationToken, + useSingleInferredProject: opts.useSingleInferredProject, + useInferredProjectPerProjectRoot: opts.useInferredProjectPerProjectRoot, + typingsInstaller: this.typingsInstaller, + throttleWaitMilliseconds, + eventHandler: this.eventHandler, + suppressDiagnosticEvents: this.suppressDiagnosticEvents, + globalPlugins: opts.globalPlugins, + pluginProbeLocations: opts.pluginProbeLocations, + allowLocalPluginLoads: opts.allowLocalPluginLoads, + typesMapLocation: opts.typesMapLocation, + serverMode: opts.serverMode, + session: this, + canUseWatchEvents: opts.canUseWatchEvents, + incrementalVerifier: opts.incrementalVerifier + }; + this.projectService = new ProjectService2(settings); + this.projectService.setPerformanceEventHandler(this.performanceEventHandler.bind(this)); + this.gcTimer = new GcTimer( + this.host, + /*delay*/ + 7e3, + this.logger + ); + switch (this.projectService.serverMode) { + case 0 /* Semantic */: + break; + case 1 /* PartialSemantic */: + invalidPartialSemanticModeCommands.forEach( + (commandName) => this.handlers.set(commandName, (request) => { + throw new Error(`Request: ${request.command} not allowed in LanguageServiceMode.PartialSemantic`); + }) + ); + break; + case 2 /* Syntactic */: + invalidSyntacticModeCommands.forEach( + (commandName) => this.handlers.set(commandName, (request) => { + throw new Error(`Request: ${request.command} not allowed in LanguageServiceMode.Syntactic`); + }) + ); + break; + default: + Debug.assertNever(this.projectService.serverMode); + } + } + sendRequestCompletedEvent(requestId, performanceData) { + this.event( + { + request_seq: requestId, + performanceData: performanceData && toProtocolPerformanceData(performanceData) + }, + "requestCompleted" + ); + } + addPerformanceData(key, value) { + if (!this.performanceData) { + this.performanceData = {}; + } + this.performanceData[key] = (this.performanceData[key] ?? 0) + value; + } + addDiagnosticsPerformanceData(file, kind, duration) { + var _a, _b; + if (!this.performanceData) { + this.performanceData = {}; + } + let fileDiagnosticDuration = (_a = this.performanceData.diagnosticsDuration) == null ? void 0 : _a.get(file); + if (!fileDiagnosticDuration) ((_b = this.performanceData).diagnosticsDuration ?? (_b.diagnosticsDuration = /* @__PURE__ */ new Map())).set(file, fileDiagnosticDuration = {}); + fileDiagnosticDuration[kind] = duration; + } + performanceEventHandler(event) { + switch (event.kind) { + case "UpdateGraph": + this.addPerformanceData("updateGraphDurationMs", event.durationMs); + break; + case "CreatePackageJsonAutoImportProvider": + this.addPerformanceData("createAutoImportProviderProgramDurationMs", event.durationMs); + break; + } + } + defaultEventHandler(event) { + switch (event.eventName) { + case ProjectsUpdatedInBackgroundEvent: + this.projectsUpdatedInBackgroundEvent(event.data.openFiles); + break; + case ProjectLoadingStartEvent: + this.event({ + projectName: event.data.project.getProjectName(), + reason: event.data.reason + }, event.eventName); + break; + case ProjectLoadingFinishEvent: + this.event({ + projectName: event.data.project.getProjectName() + }, event.eventName); + break; + case LargeFileReferencedEvent: + case CreateFileWatcherEvent: + case CreateDirectoryWatcherEvent: + case CloseFileWatcherEvent: + this.event(event.data, event.eventName); + break; + case ConfigFileDiagEvent: + this.event({ + triggerFile: event.data.triggerFile, + configFile: event.data.configFileName, + diagnostics: map(event.data.diagnostics, (diagnostic) => formatDiagnosticToProtocol( + diagnostic, + /*includeFileName*/ + true + )) + }, event.eventName); + break; + case ProjectLanguageServiceStateEvent: { + this.event({ + projectName: event.data.project.getProjectName(), + languageServiceEnabled: event.data.languageServiceEnabled + }, event.eventName); + break; + } + case ProjectInfoTelemetryEvent: { + const eventName = "telemetry"; + this.event({ + telemetryEventName: event.eventName, + payload: event.data + }, eventName); + break; + } + } + } + projectsUpdatedInBackgroundEvent(openFiles) { + this.projectService.logger.info(`got projects updated in background ${openFiles}`); + if (openFiles.length) { + if (!this.suppressDiagnosticEvents && !this.noGetErrOnBackgroundUpdate) { + this.projectService.logger.info(`Queueing diagnostics update for ${openFiles}`); + this.errorCheck.startNew((next) => this.updateErrorCheck( + next, + openFiles, + 100, + /*requireOpen*/ + true + )); + } + this.event({ + openFiles + }, ProjectsUpdatedInBackgroundEvent); + } + } + logError(err, cmd) { + this.logErrorWorker(err, cmd); + } + logErrorWorker(err, cmd, fileRequest) { + let msg = "Exception on executing command " + cmd; + if (err.message) { + msg += ":\n" + indent2(err.message); + if (err.stack) { + msg += "\n" + indent2(err.stack); + } + } + if (this.logger.hasLevel(3 /* verbose */)) { + if (fileRequest) { + try { + const { file, project } = this.getFileAndProject(fileRequest); + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + if (scriptInfo) { + const text = getSnapshotText(scriptInfo.getSnapshot()); + msg += ` + +File text of ${fileRequest.file}:${indent2(text)} +`; + } + } catch { + } + } + if (err.ProgramFiles) { + msg += ` + +Program files: ${JSON.stringify(err.ProgramFiles)} +`; + msg += ` + +Projects:: +`; + let counter = 0; + const addProjectInfo = (project) => { + msg += ` +Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter} +`; + msg += project.filesToString( + /*writeProjectFileNames*/ + true + ); + msg += "\n-----------------------------------------------\n"; + counter++; + }; + this.projectService.externalProjects.forEach(addProjectInfo); + this.projectService.configuredProjects.forEach(addProjectInfo); + this.projectService.inferredProjects.forEach(addProjectInfo); + } + } + this.logger.msg(msg, "Err" /* Err */); + } + send(msg) { + if (msg.type === "event" && !this.canUseEvents) { + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`Session does not support events: ignored event: ${stringifyIndented(msg)}`); + } + return; + } + this.writeMessage(msg); + } + writeMessage(msg) { + const msgText = formatMessage2(msg, this.logger, this.byteLength, this.host.newLine); + this.host.write(msgText); + } + event(body, eventName) { + this.send(toEvent(eventName, body)); + } + /** @internal */ + doOutput(info, cmdName, reqSeq, success, performanceData, message) { + const res = { + seq: 0, + type: "response", + command: cmdName, + request_seq: reqSeq, + success, + performanceData: performanceData && toProtocolPerformanceData(performanceData) + }; + if (success) { + let metadata; + if (isArray(info)) { + res.body = info; + metadata = info.metadata; + delete info.metadata; + } else if (typeof info === "object") { + if (info.metadata) { + const { metadata: infoMetadata, ...body } = info; + res.body = body; + metadata = infoMetadata; + } else { + res.body = info; + } + } else { + res.body = info; + } + if (metadata) res.metadata = metadata; + } else { + Debug.assert(info === void 0); + } + if (message) { + res.message = message; + } + this.send(res); + } + semanticCheck(file, project) { + var _a, _b; + const diagnosticsStartTime = timestamp(); + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "semanticCheck", { file, configFilePath: project.canonicalConfigFilePath }); + const diags = isDeclarationFileInJSOnlyNonConfiguredProject(project, file) ? emptyArray2 : project.getLanguageService().getSemanticDiagnostics(file).filter((d) => !!d.file); + this.sendDiagnosticsEvent(file, project, diags, "semanticDiag", diagnosticsStartTime); + (_b = tracing) == null ? void 0 : _b.pop(); + } + syntacticCheck(file, project) { + var _a, _b; + const diagnosticsStartTime = timestamp(); + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "syntacticCheck", { file, configFilePath: project.canonicalConfigFilePath }); + this.sendDiagnosticsEvent(file, project, project.getLanguageService().getSyntacticDiagnostics(file), "syntaxDiag", diagnosticsStartTime); + (_b = tracing) == null ? void 0 : _b.pop(); + } + suggestionCheck(file, project) { + var _a, _b; + const diagnosticsStartTime = timestamp(); + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "suggestionCheck", { file, configFilePath: project.canonicalConfigFilePath }); + this.sendDiagnosticsEvent(file, project, project.getLanguageService().getSuggestionDiagnostics(file), "suggestionDiag", diagnosticsStartTime); + (_b = tracing) == null ? void 0 : _b.pop(); + } + regionSemanticCheck(file, project, ranges) { + var _a, _b, _c; + const diagnosticsStartTime = timestamp(); + (_a = tracing) == null ? void 0 : _a.push(tracing.Phase.Session, "regionSemanticCheck", { file, configFilePath: project.canonicalConfigFilePath }); + let diagnosticsResult; + if (!this.shouldDoRegionCheck(file) || !(diagnosticsResult = project.getLanguageService().getRegionSemanticDiagnostics(file, ranges))) { + (_b = tracing) == null ? void 0 : _b.pop(); + return; + } + this.sendDiagnosticsEvent(file, project, diagnosticsResult.diagnostics, "regionSemanticDiag", diagnosticsStartTime, diagnosticsResult.spans); + (_c = tracing) == null ? void 0 : _c.pop(); + return; + } + // We should only do the region-based semantic check if we think it would be + // considerably faster than a whole-file semantic check. + /** @internal */ + shouldDoRegionCheck(file) { + var _a; + const lineCount = (_a = this.projectService.getScriptInfoForNormalizedPath(file)) == null ? void 0 : _a.textStorage.getLineInfo().getLineCount(); + return !!(lineCount && lineCount >= this.regionDiagLineCountThreshold); + } + sendDiagnosticsEvent(file, project, diagnostics, kind, diagnosticsStartTime, spans) { + try { + const scriptInfo = Debug.checkDefined(project.getScriptInfo(file)); + const duration = timestamp() - diagnosticsStartTime; + const body = { + file, + diagnostics: diagnostics.map((diag2) => formatDiag(file, project, diag2)), + spans: spans == null ? void 0 : spans.map((span) => toProtocolTextSpan(span, scriptInfo)) + }; + this.event( + body, + kind + ); + this.addDiagnosticsPerformanceData(file, kind, duration); + } catch (err) { + this.logError(err, kind); + } + } + /** It is the caller's responsibility to verify that `!this.suppressDiagnosticEvents`. */ + updateErrorCheck(next, checkList, ms, requireOpen = true) { + if (checkList.length === 0) { + return; + } + Debug.assert(!this.suppressDiagnosticEvents); + const seq = this.changeSeq; + const followMs = Math.min(ms, 200); + let index = 0; + const goNext = () => { + index++; + if (checkList.length > index) { + return next.delay("checkOne", followMs, checkOne); + } + }; + const doSemanticCheck = (fileName, project) => { + this.semanticCheck(fileName, project); + if (this.changeSeq !== seq) { + return; + } + if (this.getPreferences(fileName).disableSuggestions) { + return goNext(); + } + next.immediate("suggestionCheck", () => { + this.suggestionCheck(fileName, project); + goNext(); + }); + }; + const checkOne = () => { + if (this.changeSeq !== seq) { + return; + } + let ranges; + let item = checkList[index]; + if (isString(item)) { + item = this.toPendingErrorCheck(item); + } else if ("ranges" in item) { + ranges = item.ranges; + item = this.toPendingErrorCheck(item.file); + } + if (!item) { + return goNext(); + } + const { fileName, project } = item; + updateProjectIfDirty(project); + if (!project.containsFile(fileName, requireOpen)) { + return; + } + this.syntacticCheck(fileName, project); + if (this.changeSeq !== seq) { + return; + } + if (project.projectService.serverMode !== 0 /* Semantic */) { + return goNext(); + } + if (ranges) { + return next.immediate("regionSemanticCheck", () => { + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(fileName); + if (scriptInfo) { + this.regionSemanticCheck(fileName, project, ranges.map((range) => this.getRange({ file: fileName, ...range }, scriptInfo))); + } + if (this.changeSeq !== seq) { + return; + } + next.immediate("semanticCheck", () => doSemanticCheck(fileName, project)); + }); + } + next.immediate("semanticCheck", () => doSemanticCheck(fileName, project)); + }; + if (checkList.length > index && this.changeSeq === seq) { + next.delay("checkOne", ms, checkOne); + } + } + cleanProjects(caption, projects) { + if (!projects) { + return; + } + this.logger.info(`cleaning ${caption}`); + for (const p of projects) { + p.getLanguageService( + /*ensureSynchronized*/ + false + ).cleanupSemanticCache(); + p.cleanupProgram(); + } + } + cleanup() { + this.cleanProjects("inferred projects", this.projectService.inferredProjects); + this.cleanProjects("configured projects", arrayFrom(this.projectService.configuredProjects.values())); + this.cleanProjects("external projects", this.projectService.externalProjects); + if (this.host.gc) { + this.logger.info(`host.gc()`); + this.host.gc(); + } + } + getEncodedSyntacticClassifications(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + return languageService.getEncodedSyntacticClassifications(file, args); + } + getEncodedSemanticClassifications(args) { + const { file, project } = this.getFileAndProject(args); + const format = args.format === "2020" ? "2020" /* TwentyTwenty */ : "original" /* Original */; + return project.getLanguageService().getEncodedSemanticClassifications(file, args, format); + } + getProject(projectFileName) { + return projectFileName === void 0 ? void 0 : this.projectService.findProject(projectFileName); + } + getConfigFileAndProject(args) { + const project = this.getProject(args.projectFileName); + const file = toNormalizedPath(args.file); + return { + configFile: project && project.hasConfigFile(file) ? file : void 0, + project + }; + } + getConfigFileDiagnostics(configFile, project, includeLinePosition) { + const projectErrors = project.getAllProjectErrors(); + const optionsErrors = project.getLanguageService().getCompilerOptionsDiagnostics(); + const diagnosticsForConfigFile = filter( + concatenate(projectErrors, optionsErrors), + (diagnostic) => !!diagnostic.file && diagnostic.file.fileName === configFile + ); + return includeLinePosition ? this.convertToDiagnosticsWithLinePositionFromDiagnosticFile(diagnosticsForConfigFile) : map( + diagnosticsForConfigFile, + (diagnostic) => formatDiagnosticToProtocol( + diagnostic, + /*includeFileName*/ + false + ) + ); + } + convertToDiagnosticsWithLinePositionFromDiagnosticFile(diagnostics) { + return diagnostics.map((d) => ({ + message: flattenDiagnosticMessageText(d.messageText, this.host.newLine), + start: d.start, + // TODO: GH#18217 + length: d.length, + // TODO: GH#18217 + category: diagnosticCategoryName(d), + code: d.code, + source: d.source, + startLocation: d.file && convertToLocation(getLineAndCharacterOfPosition(d.file, d.start)), + // TODO: GH#18217 + endLocation: d.file && convertToLocation(getLineAndCharacterOfPosition(d.file, d.start + d.length)), + // TODO: GH#18217 + reportsUnnecessary: d.reportsUnnecessary, + reportsDeprecated: d.reportsDeprecated, + relatedInformation: map(d.relatedInformation, formatRelatedInformation) + })); + } + getCompilerOptionsDiagnostics(args) { + const project = this.getProject(args.projectFileName); + return this.convertToDiagnosticsWithLinePosition( + filter( + project.getLanguageService().getCompilerOptionsDiagnostics(), + (diagnostic) => !diagnostic.file + ), + /*scriptInfo*/ + void 0 + ); + } + convertToDiagnosticsWithLinePosition(diagnostics, scriptInfo) { + return diagnostics.map( + (d) => ({ + message: flattenDiagnosticMessageText(d.messageText, this.host.newLine), + start: d.start, + length: d.length, + category: diagnosticCategoryName(d), + code: d.code, + source: d.source, + startLocation: scriptInfo && scriptInfo.positionToLineOffset(d.start), + // TODO: GH#18217 + endLocation: scriptInfo && scriptInfo.positionToLineOffset(d.start + d.length), + reportsUnnecessary: d.reportsUnnecessary, + reportsDeprecated: d.reportsDeprecated, + relatedInformation: map(d.relatedInformation, formatRelatedInformation) + }) + ); + } + getDiagnosticsWorker(args, isSemantic, selector, includeLinePosition) { + const { project, file } = this.getFileAndProject(args); + if (isSemantic && isDeclarationFileInJSOnlyNonConfiguredProject(project, file)) { + return emptyArray2; + } + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + const diagnostics = selector(project, file); + return includeLinePosition ? this.convertToDiagnosticsWithLinePosition(diagnostics, scriptInfo) : diagnostics.map((d) => formatDiag(file, project, d)); + } + getDefinition(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const definitions = this.mapDefinitionInfoLocations(project.getLanguageService().getDefinitionAtPosition(file, position) || emptyArray2, project); + return simplifiedResult ? this.mapDefinitionInfo(definitions, project) : definitions.map(_Session.mapToOriginalLocation); + } + mapDefinitionInfoLocations(definitions, project) { + return definitions.map((info) => { + const newDocumentSpan = getMappedDocumentSpanForProject(info, project); + return !newDocumentSpan ? info : { + ...newDocumentSpan, + containerKind: info.containerKind, + containerName: info.containerName, + kind: info.kind, + name: info.name, + failedAliasResolution: info.failedAliasResolution, + ...info.unverified && { unverified: info.unverified } + }; + }); + } + getDefinitionAndBoundSpan(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const scriptInfo = Debug.checkDefined(project.getScriptInfo(file)); + const unmappedDefinitionAndBoundSpan = project.getLanguageService().getDefinitionAndBoundSpan(file, position); + if (!unmappedDefinitionAndBoundSpan || !unmappedDefinitionAndBoundSpan.definitions) { + return { + definitions: emptyArray2, + textSpan: void 0 + // TODO: GH#18217 + }; + } + const definitions = this.mapDefinitionInfoLocations(unmappedDefinitionAndBoundSpan.definitions, project); + const { textSpan } = unmappedDefinitionAndBoundSpan; + if (simplifiedResult) { + return { + definitions: this.mapDefinitionInfo(definitions, project), + textSpan: toProtocolTextSpan(textSpan, scriptInfo) + }; + } + return { + definitions: definitions.map(_Session.mapToOriginalLocation), + textSpan + }; + } + findSourceDefinition(args) { + var _a; + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const unmappedDefinitions = project.getLanguageService().getDefinitionAtPosition(file, position); + let definitions = this.mapDefinitionInfoLocations(unmappedDefinitions || emptyArray2, project).slice(); + const needsJsResolution = this.projectService.serverMode === 0 /* Semantic */ && (!some(definitions, (d) => toNormalizedPath(d.fileName) !== file && !d.isAmbient) || some(definitions, (d) => !!d.failedAliasResolution)); + if (needsJsResolution) { + const definitionSet = createSet( + (d) => d.textSpan.start, + getDocumentSpansEqualityComparer(this.host.useCaseSensitiveFileNames) + ); + definitions == null ? void 0 : definitions.forEach((d) => definitionSet.add(d)); + const noDtsProject = project.getNoDtsResolutionProject(file); + const ls = noDtsProject.getLanguageService(); + const jsDefinitions = (_a = ls.getDefinitionAtPosition( + file, + position, + /*searchOtherFilesOnly*/ + true, + /*stopAtAlias*/ + false + )) == null ? void 0 : _a.filter((d) => toNormalizedPath(d.fileName) !== file); + if (some(jsDefinitions)) { + for (const jsDefinition of jsDefinitions) { + if (jsDefinition.unverified) { + const refined = tryRefineDefinition(jsDefinition, project.getLanguageService().getProgram(), ls.getProgram()); + if (some(refined)) { + for (const def of refined) { + definitionSet.add(def); + } + continue; + } + } + definitionSet.add(jsDefinition); + } + } else { + const ambientCandidates = definitions.filter((d) => toNormalizedPath(d.fileName) !== file && d.isAmbient); + for (const candidate of some(ambientCandidates) ? ambientCandidates : getAmbientCandidatesByClimbingAccessChain()) { + const fileNameToSearch = findImplementationFileFromDtsFileName(candidate.fileName, file, noDtsProject); + if (!fileNameToSearch) continue; + const info = this.projectService.getOrCreateScriptInfoNotOpenedByClient( + fileNameToSearch, + noDtsProject.currentDirectory, + noDtsProject.directoryStructureHost, + /*deferredDeleteOk*/ + false + ); + if (!info) continue; + if (!noDtsProject.containsScriptInfo(info)) { + noDtsProject.addRoot(info); + noDtsProject.updateGraph(); + } + const noDtsProgram = ls.getProgram(); + const fileToSearch = Debug.checkDefined(noDtsProgram.getSourceFile(fileNameToSearch)); + for (const match of searchForDeclaration(candidate.name, fileToSearch, noDtsProgram)) { + definitionSet.add(match); + } + } + } + definitions = arrayFrom(definitionSet.values()); + } + definitions = definitions.filter((d) => !d.isAmbient && !d.failedAliasResolution); + return this.mapDefinitionInfo(definitions, project); + function findImplementationFileFromDtsFileName(fileName, resolveFromFile, auxiliaryProject) { + var _a2, _b, _c; + const nodeModulesPathParts = getNodeModulePathParts(fileName); + if (nodeModulesPathParts && fileName.lastIndexOf(nodeModulesPathPart) === nodeModulesPathParts.topLevelNodeModulesIndex) { + const packageDirectory = fileName.substring(0, nodeModulesPathParts.packageRootIndex); + const packageJsonCache = (_a2 = project.getModuleResolutionCache()) == null ? void 0 : _a2.getPackageJsonInfoCache(); + const compilerOptions = project.getCompilationSettings(); + const packageJson = getPackageScopeForPath(getNormalizedAbsolutePath(packageDirectory, project.getCurrentDirectory()), getTemporaryModuleResolutionState(packageJsonCache, project, compilerOptions)); + if (!packageJson) return void 0; + const entrypoints = getEntrypointsFromPackageJsonInfo( + packageJson, + { moduleResolution: 2 /* Node10 */ }, + project, + project.getModuleResolutionCache() + ); + const packageNamePathPart = fileName.substring( + nodeModulesPathParts.topLevelPackageNameIndex + 1, + nodeModulesPathParts.packageRootIndex + ); + const packageName = getPackageNameFromTypesPackageName(unmangleScopedPackageName(packageNamePathPart)); + const path = project.toPath(fileName); + if (entrypoints && some(entrypoints, (e) => project.toPath(e) === path)) { + return (_b = auxiliaryProject.resolutionCache.resolveSingleModuleNameWithoutWatching(packageName, resolveFromFile).resolvedModule) == null ? void 0 : _b.resolvedFileName; + } else { + const pathToFileInPackage = fileName.substring(nodeModulesPathParts.packageRootIndex + 1); + const specifier = `${packageName}/${removeFileExtension(pathToFileInPackage)}`; + return (_c = auxiliaryProject.resolutionCache.resolveSingleModuleNameWithoutWatching(specifier, resolveFromFile).resolvedModule) == null ? void 0 : _c.resolvedFileName; + } + } + return void 0; + } + function getAmbientCandidatesByClimbingAccessChain() { + const ls = project.getLanguageService(); + const program = ls.getProgram(); + const initialNode = getTouchingPropertyName(program.getSourceFile(file), position); + if ((isStringLiteralLike(initialNode) || isIdentifier(initialNode)) && isAccessExpression(initialNode.parent)) { + return forEachNameInAccessChainWalkingLeft(initialNode, (nameInChain) => { + var _a2; + if (nameInChain === initialNode) return void 0; + const candidates = (_a2 = ls.getDefinitionAtPosition( + file, + nameInChain.getStart(), + /*searchOtherFilesOnly*/ + true, + /*stopAtAlias*/ + false + )) == null ? void 0 : _a2.filter((d) => toNormalizedPath(d.fileName) !== file && d.isAmbient).map((d) => ({ + fileName: d.fileName, + name: getTextOfIdentifierOrLiteral(initialNode) + })); + if (some(candidates)) { + return candidates; + } + }) || emptyArray2; + } + return emptyArray2; + } + function tryRefineDefinition(definition, program, noDtsProgram) { + var _a2; + const fileToSearch = noDtsProgram.getSourceFile(definition.fileName); + if (!fileToSearch) { + return void 0; + } + const initialNode = getTouchingPropertyName(program.getSourceFile(file), position); + const symbol = program.getTypeChecker().getSymbolAtLocation(initialNode); + const importSpecifier = symbol && getDeclarationOfKind(symbol, 277 /* ImportSpecifier */); + if (!importSpecifier) return void 0; + const nameToSearch = ((_a2 = importSpecifier.propertyName) == null ? void 0 : _a2.text) || importSpecifier.name.text; + return searchForDeclaration(nameToSearch, fileToSearch, noDtsProgram); + } + function searchForDeclaration(declarationName, fileToSearch, noDtsProgram) { + const matches = ts_FindAllReferences_exports.Core.getTopMostDeclarationNamesInFile(declarationName, fileToSearch); + return mapDefined(matches, (match) => { + const symbol = noDtsProgram.getTypeChecker().getSymbolAtLocation(match); + const decl = getDeclarationFromName(match); + if (symbol && decl) { + return ts_GoToDefinition_exports.createDefinitionInfo( + decl, + noDtsProgram.getTypeChecker(), + symbol, + decl, + /*unverified*/ + true + ); + } + }); + } + } + getEmitOutput(args) { + const { file, project } = this.getFileAndProject(args); + if (!project.shouldEmitFile(project.getScriptInfo(file))) { + return { emitSkipped: true, outputFiles: [], diagnostics: [] }; + } + const result = project.getLanguageService().getEmitOutput(file); + return args.richResponse ? { + ...result, + diagnostics: args.includeLinePosition ? this.convertToDiagnosticsWithLinePositionFromDiagnosticFile(result.diagnostics) : result.diagnostics.map((d) => formatDiagnosticToProtocol( + d, + /*includeFileName*/ + true + )) + } : result; + } + mapJSDocTagInfo(tags, project, richResponse) { + return tags ? tags.map((tag) => { + var _a; + return { + ...tag, + text: richResponse ? this.mapDisplayParts(tag.text, project) : (_a = tag.text) == null ? void 0 : _a.map((part) => part.text).join("") + }; + }) : []; + } + mapDisplayParts(parts, project) { + if (!parts) { + return []; + } + return parts.map( + (part) => part.kind !== "linkName" ? part : { + ...part, + target: this.toFileSpan(part.target.fileName, part.target.textSpan, project) + } + ); + } + mapSignatureHelpItems(items, project, richResponse) { + return items.map((item) => ({ + ...item, + documentation: this.mapDisplayParts(item.documentation, project), + parameters: item.parameters.map((p) => ({ ...p, documentation: this.mapDisplayParts(p.documentation, project) })), + tags: this.mapJSDocTagInfo(item.tags, project, richResponse) + })); + } + mapDefinitionInfo(definitions, project) { + return definitions.map((def) => ({ ...this.toFileSpanWithContext(def.fileName, def.textSpan, def.contextSpan, project), ...def.unverified && { unverified: def.unverified } })); + } + /* + * When we map a .d.ts location to .ts, Visual Studio gets confused because there's no associated Roslyn Document in + * the same project which corresponds to the file. VS Code has no problem with this, and luckily we have two protocols. + * This retains the existing behavior for the "simplified" (VS Code) protocol but stores the .d.ts location in a + * set of additional fields, and does the reverse for VS (store the .d.ts location where + * it used to be and stores the .ts location in the additional fields). + */ + static mapToOriginalLocation(def) { + if (def.originalFileName) { + Debug.assert(def.originalTextSpan !== void 0, "originalTextSpan should be present if originalFileName is"); + return { + ...def, + fileName: def.originalFileName, + textSpan: def.originalTextSpan, + targetFileName: def.fileName, + targetTextSpan: def.textSpan, + contextSpan: def.originalContextSpan, + targetContextSpan: def.contextSpan + }; + } + return def; + } + toFileSpan(fileName, textSpan, project) { + const ls = project.getLanguageService(); + const start = ls.toLineColumnOffset(fileName, textSpan.start); + const end = ls.toLineColumnOffset(fileName, textSpanEnd(textSpan)); + return { + file: fileName, + start: { line: start.line + 1, offset: start.character + 1 }, + end: { line: end.line + 1, offset: end.character + 1 } + }; + } + toFileSpanWithContext(fileName, textSpan, contextSpan, project) { + const fileSpan = this.toFileSpan(fileName, textSpan, project); + const context = contextSpan && this.toFileSpan(fileName, contextSpan, project); + return context ? { ...fileSpan, contextStart: context.start, contextEnd: context.end } : fileSpan; + } + getTypeDefinition(args) { + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const definitions = this.mapDefinitionInfoLocations(project.getLanguageService().getTypeDefinitionAtPosition(file, position) || emptyArray2, project); + return this.mapDefinitionInfo(definitions, project); + } + mapImplementationLocations(implementations, project) { + return implementations.map((info) => { + const newDocumentSpan = getMappedDocumentSpanForProject(info, project); + return !newDocumentSpan ? info : { + ...newDocumentSpan, + kind: info.kind, + displayParts: info.displayParts + }; + }); + } + getImplementation(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const implementations = this.mapImplementationLocations(project.getLanguageService().getImplementationAtPosition(file, position) || emptyArray2, project); + return simplifiedResult ? implementations.map(({ fileName, textSpan, contextSpan }) => this.toFileSpanWithContext(fileName, textSpan, contextSpan, project)) : implementations.map(_Session.mapToOriginalLocation); + } + getSyntacticDiagnosticsSync(args) { + const { configFile } = this.getConfigFileAndProject(args); + if (configFile) { + return emptyArray2; + } + return this.getDiagnosticsWorker( + args, + /*isSemantic*/ + false, + (project, file) => project.getLanguageService().getSyntacticDiagnostics(file), + !!args.includeLinePosition + ); + } + getSemanticDiagnosticsSync(args) { + const { configFile, project } = this.getConfigFileAndProject(args); + if (configFile) { + return this.getConfigFileDiagnostics(configFile, project, !!args.includeLinePosition); + } + return this.getDiagnosticsWorker( + args, + /*isSemantic*/ + true, + (project2, file) => project2.getLanguageService().getSemanticDiagnostics(file).filter((d) => !!d.file), + !!args.includeLinePosition + ); + } + getSuggestionDiagnosticsSync(args) { + const { configFile } = this.getConfigFileAndProject(args); + if (configFile) { + return emptyArray2; + } + return this.getDiagnosticsWorker( + args, + /*isSemantic*/ + true, + (project, file) => project.getLanguageService().getSuggestionDiagnostics(file), + !!args.includeLinePosition + ); + } + getJsxClosingTag(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + const tag = languageService.getJsxClosingTagAtPosition(file, position); + return tag === void 0 ? void 0 : { newText: tag.newText, caretOffset: 0 }; + } + getLinkedEditingRange(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + const linkedEditInfo = languageService.getLinkedEditingRangeAtPosition(file, position); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + if (scriptInfo === void 0 || linkedEditInfo === void 0) return void 0; + return convertLinkedEditInfoToRanges(linkedEditInfo, scriptInfo); + } + getDocumentHighlights(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const documentHighlights = project.getLanguageService().getDocumentHighlights(file, position, args.filesToSearch); + if (!documentHighlights) return emptyArray2; + if (!simplifiedResult) return documentHighlights; + return documentHighlights.map(({ fileName, highlightSpans }) => { + const scriptInfo = project.getScriptInfo(fileName); + return { + file: fileName, + highlightSpans: highlightSpans.map(({ textSpan, kind, contextSpan }) => ({ + ...toProtocolTextSpanWithContext(textSpan, contextSpan, scriptInfo), + kind + })) + }; + }); + } + provideInlayHints(args) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const hints = project.getLanguageService().provideInlayHints(file, args, this.getPreferences(file)); + return hints.map((hint) => { + const { position, displayParts } = hint; + return { + ...hint, + position: scriptInfo.positionToLineOffset(position), + displayParts: displayParts == null ? void 0 : displayParts.map(({ text, span, file: file2 }) => { + if (span) { + Debug.assertIsDefined(file2, "Target file should be defined together with its span."); + const scriptInfo2 = this.projectService.getScriptInfo(file2); + return { + text, + span: { + start: scriptInfo2.positionToLineOffset(span.start), + end: scriptInfo2.positionToLineOffset(span.start + span.length), + file: file2 + } + }; + } else { + return { text }; + } + }) + }; + }); + } + mapCode(args) { + var _a; + const formatOptions = this.getHostFormatOptions(); + const preferences = this.getHostPreferences(); + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const focusLocations = (_a = args.mapping.focusLocations) == null ? void 0 : _a.map((spans) => { + return spans.map((loc) => { + const start = scriptInfo.lineOffsetToPosition(loc.start.line, loc.start.offset); + const end = scriptInfo.lineOffsetToPosition(loc.end.line, loc.end.offset); + return { + start, + length: end - start + }; + }); + }); + const changes = languageService.mapCode(file, args.mapping.contents, focusLocations, formatOptions, preferences); + return this.mapTextChangesToCodeEdits(changes); + } + getCopilotRelatedInfo() { + return { + relatedFiles: [] + }; + } + setCompilerOptionsForInferredProjects(args) { + this.projectService.setCompilerOptionsForInferredProjects(args.options, args.projectRootPath); + } + getProjectInfo(args) { + return this.getProjectInfoWorker( + args.file, + args.projectFileName, + args.needFileNameList, + args.needDefaultConfiguredProjectInfo, + /*excludeConfigFiles*/ + false + ); + } + getProjectInfoWorker(uncheckedFileName, projectFileName, needFileNameList, needDefaultConfiguredProjectInfo, excludeConfigFiles) { + const { project } = this.getFileAndProjectWorker(uncheckedFileName, projectFileName); + updateProjectIfDirty(project); + const projectInfo = { + configFileName: project.getProjectName(), + languageServiceDisabled: !project.languageServiceEnabled, + fileNames: needFileNameList ? project.getFileNames( + /*excludeFilesFromExternalLibraries*/ + false, + excludeConfigFiles + ) : void 0, + configuredProjectInfo: needDefaultConfiguredProjectInfo ? this.getDefaultConfiguredProjectInfo(uncheckedFileName) : void 0 + }; + return projectInfo; + } + getDefaultConfiguredProjectInfo(uncheckedFileName) { + var _a; + const info = this.projectService.getScriptInfo(uncheckedFileName); + if (!info) return; + const result = this.projectService.findDefaultConfiguredProjectWorker( + info, + 3 /* CreateReplay */ + ); + if (!result) return void 0; + let notMatchedByConfig; + let notInProject; + result.seenProjects.forEach((kind, project) => { + if (project !== result.defaultProject) { + if (kind !== 3 /* CreateReplay */) { + (notMatchedByConfig ?? (notMatchedByConfig = [])).push(toNormalizedPath(project.getConfigFilePath())); + } else { + (notInProject ?? (notInProject = [])).push(toNormalizedPath(project.getConfigFilePath())); + } + } + }); + (_a = result.seenConfigs) == null ? void 0 : _a.forEach((config) => (notMatchedByConfig ?? (notMatchedByConfig = [])).push(config)); + return { + notMatchedByConfig, + notInProject, + defaultProject: result.defaultProject && toNormalizedPath(result.defaultProject.getConfigFilePath()) + }; + } + getRenameInfo(args) { + const { file, project } = this.getFileAndProject(args); + const position = this.getPositionInFile(args, file); + const preferences = this.getPreferences(file); + return project.getLanguageService().getRenameInfo(file, position, preferences); + } + getProjects(args, getScriptInfoEnsuringProjectsUptoDate, ignoreNoProjectError) { + let projects; + let symLinkedProjects; + if (args.projectFileName) { + const project = this.getProject(args.projectFileName); + if (project) { + projects = [project]; + } + } else { + const scriptInfo = getScriptInfoEnsuringProjectsUptoDate ? this.projectService.getScriptInfoEnsuringProjectsUptoDate(args.file) : this.projectService.getScriptInfo(args.file); + if (!scriptInfo) { + if (ignoreNoProjectError) return emptyArray2; + this.projectService.logErrorForScriptInfoNotFound(args.file); + return Errors.ThrowNoProject(); + } else if (!getScriptInfoEnsuringProjectsUptoDate) { + this.projectService.ensureDefaultProjectForFile(scriptInfo); + } + projects = scriptInfo.containingProjects; + symLinkedProjects = this.projectService.getSymlinkedProjects(scriptInfo); + } + projects = filter(projects, (p) => p.languageServiceEnabled && !p.isOrphan()); + if (!ignoreNoProjectError && (!projects || !projects.length) && !symLinkedProjects) { + this.projectService.logErrorForScriptInfoNotFound(args.file ?? args.projectFileName); + return Errors.ThrowNoProject(); + } + return symLinkedProjects ? { projects, symLinkedProjects } : projects; + } + getDefaultProject(args) { + if (args.projectFileName) { + const project = this.getProject(args.projectFileName); + if (project) { + return project; + } + if (!args.file) { + return Errors.ThrowNoProject(); + } + } + const info = this.projectService.getScriptInfo(args.file); + return info.getDefaultProject(); + } + getRenameLocations(args, simplifiedResult) { + const file = toNormalizedPath(args.file); + const position = this.getPositionInFile(args, file); + const projects = this.getProjects(args); + const defaultProject = this.getDefaultProject(args); + const preferences = this.getPreferences(file); + const renameInfo = this.mapRenameInfo( + defaultProject.getLanguageService().getRenameInfo(file, position, preferences), + Debug.checkDefined(this.projectService.getScriptInfo(file)) + ); + if (!renameInfo.canRename) return simplifiedResult ? { info: renameInfo, locs: [] } : []; + const locations = getRenameLocationsWorker( + projects, + defaultProject, + { fileName: args.file, pos: position }, + !!args.findInStrings, + !!args.findInComments, + preferences, + this.host.useCaseSensitiveFileNames + ); + if (!simplifiedResult) return locations; + return { info: renameInfo, locs: this.toSpanGroups(locations) }; + } + mapRenameInfo(info, scriptInfo) { + if (info.canRename) { + const { canRename, fileToRename, displayName, fullDisplayName, kind, kindModifiers, triggerSpan } = info; + return identity( + { canRename, fileToRename, displayName, fullDisplayName, kind, kindModifiers, triggerSpan: toProtocolTextSpan(triggerSpan, scriptInfo) } + ); + } else { + return info; + } + } + toSpanGroups(locations) { + const map2 = /* @__PURE__ */ new Map(); + for (const { fileName, textSpan, contextSpan, originalContextSpan: _2, originalTextSpan: _, originalFileName: _1, ...prefixSuffixText } of locations) { + let group2 = map2.get(fileName); + if (!group2) map2.set(fileName, group2 = { file: fileName, locs: [] }); + const scriptInfo = Debug.checkDefined(this.projectService.getScriptInfo(fileName)); + group2.locs.push({ ...toProtocolTextSpanWithContext(textSpan, contextSpan, scriptInfo), ...prefixSuffixText }); + } + return arrayFrom(map2.values()); + } + getReferences(args, simplifiedResult) { + const file = toNormalizedPath(args.file); + const projects = this.getProjects(args); + const position = this.getPositionInFile(args, file); + const references = getReferencesWorker( + projects, + this.getDefaultProject(args), + { fileName: args.file, pos: position }, + this.host.useCaseSensitiveFileNames, + this.logger + ); + if (!simplifiedResult) return references; + const preferences = this.getPreferences(file); + const defaultProject = this.getDefaultProject(args); + const scriptInfo = defaultProject.getScriptInfoForNormalizedPath(file); + const nameInfo = defaultProject.getLanguageService().getQuickInfoAtPosition(file, position); + const symbolDisplayString = nameInfo ? displayPartsToString(nameInfo.displayParts) : ""; + const nameSpan = nameInfo && nameInfo.textSpan; + const symbolStartOffset = nameSpan ? scriptInfo.positionToLineOffset(nameSpan.start).offset : 0; + const symbolName2 = nameSpan ? scriptInfo.getSnapshot().getText(nameSpan.start, textSpanEnd(nameSpan)) : ""; + const refs = flatMap(references, (referencedSymbol) => { + return referencedSymbol.references.map((entry) => referenceEntryToReferencesResponseItem(this.projectService, entry, preferences)); + }); + return { refs, symbolName: symbolName2, symbolStartOffset, symbolDisplayString }; + } + getFileReferences(args, simplifiedResult) { + const projects = this.getProjects(args); + const fileName = toNormalizedPath(args.file); + const preferences = this.getPreferences(fileName); + const initialLocation = { fileName, pos: 0 }; + const perProjectResults = getPerProjectReferences( + projects, + this.getDefaultProject(args), + initialLocation, + initialLocation, + mapDefinitionInProjectIfFileInProject, + (project) => { + this.logger.info(`Finding references to file ${fileName} in project ${project.getProjectName()}`); + return project.getLanguageService().getFileReferences(fileName); + } + ); + let references; + if (isArray(perProjectResults)) { + references = perProjectResults; + } else { + references = []; + const seen = createDocumentSpanSet(this.host.useCaseSensitiveFileNames); + perProjectResults.forEach((projectOutputs) => { + for (const referenceEntry of projectOutputs) { + if (!seen.has(referenceEntry)) { + references.push(referenceEntry); + seen.add(referenceEntry); + } + } + }); + } + if (!simplifiedResult) return references; + const refs = references.map((entry) => referenceEntryToReferencesResponseItem(this.projectService, entry, preferences)); + return { + refs, + symbolName: `"${args.file}"` + }; + } + /** + * @param fileName is the name of the file to be opened + * @param fileContent is a version of the file content that is known to be more up to date than the one on disk + */ + openClientFile(fileName, fileContent, scriptKind, projectRootPath) { + this.projectService.openClientFileWithNormalizedPath( + fileName, + fileContent, + scriptKind, + /*hasMixedContent*/ + false, + projectRootPath + ); + } + getPosition(args, scriptInfo) { + return args.position !== void 0 ? args.position : scriptInfo.lineOffsetToPosition(args.line, args.offset); + } + getPositionInFile(args, file) { + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + return this.getPosition(args, scriptInfo); + } + getFileAndProject(args) { + return this.getFileAndProjectWorker(args.file, args.projectFileName); + } + getFileAndLanguageServiceForSyntacticOperation(args) { + const { file, project } = this.getFileAndProject(args); + return { + file, + languageService: project.getLanguageService( + /*ensureSynchronized*/ + false + ) + }; + } + getFileAndProjectWorker(uncheckedFileName, projectFileName) { + const file = toNormalizedPath(uncheckedFileName); + const project = this.getProject(projectFileName) || this.projectService.ensureDefaultProjectForFile(file); + return { file, project }; + } + getOutliningSpans(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const spans = languageService.getOutliningSpans(file); + if (simplifiedResult) { + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + return spans.map((s) => ({ + textSpan: toProtocolTextSpan(s.textSpan, scriptInfo), + hintSpan: toProtocolTextSpan(s.hintSpan, scriptInfo), + bannerText: s.bannerText, + autoCollapse: s.autoCollapse, + kind: s.kind + })); + } else { + return spans; + } + } + getTodoComments(args) { + const { file, project } = this.getFileAndProject(args); + return project.getLanguageService().getTodoComments(file, args.descriptors); + } + getDocCommentTemplate(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + return languageService.getDocCommentTemplateAtPosition(file, position, this.getPreferences(file), this.getFormatOptions(file)); + } + getSpanOfEnclosingComment(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const onlyMultiLine = args.onlyMultiLine; + const position = this.getPositionInFile(args, file); + return languageService.getSpanOfEnclosingComment(file, position, onlyMultiLine); + } + getIndentation(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + const options = args.options ? convertFormatOptions(args.options) : this.getFormatOptions(file); + const indentation = languageService.getIndentationAtPosition(file, position, options); + return { position, indentation }; + } + getBreakpointStatement(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + return languageService.getBreakpointStatementAtPosition(file, position); + } + getNameOrDottedNameSpan(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + return languageService.getNameOrDottedNameSpan(file, position, position); + } + isValidBraceCompletion(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const position = this.getPositionInFile(args, file); + return languageService.isValidBraceCompletionAtPosition(file, position, args.openingBrace.charCodeAt(0)); + } + getQuickInfoWorker(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const userPreferences = this.getPreferences(file); + const quickInfo = project.getLanguageService().getQuickInfoAtPosition( + file, + this.getPosition(args, scriptInfo), + userPreferences.maximumHoverLength, + args.verbosityLevel + ); + if (!quickInfo) { + return void 0; + } + const useDisplayParts = !!userPreferences.displayPartsForJSDoc; + if (simplifiedResult) { + const displayString = displayPartsToString(quickInfo.displayParts); + return { + kind: quickInfo.kind, + kindModifiers: quickInfo.kindModifiers, + start: scriptInfo.positionToLineOffset(quickInfo.textSpan.start), + end: scriptInfo.positionToLineOffset(textSpanEnd(quickInfo.textSpan)), + displayString, + documentation: useDisplayParts ? this.mapDisplayParts(quickInfo.documentation, project) : displayPartsToString(quickInfo.documentation), + tags: this.mapJSDocTagInfo(quickInfo.tags, project, useDisplayParts), + canIncreaseVerbosityLevel: quickInfo.canIncreaseVerbosityLevel + }; + } else { + return useDisplayParts ? quickInfo : { + ...quickInfo, + tags: this.mapJSDocTagInfo( + quickInfo.tags, + project, + /*richResponse*/ + false + ) + }; + } + } + getFormattingEditsForRange(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const startPosition = scriptInfo.lineOffsetToPosition(args.line, args.offset); + const endPosition = scriptInfo.lineOffsetToPosition(args.endLine, args.endOffset); + const edits = languageService.getFormattingEditsForRange(file, startPosition, endPosition, this.getFormatOptions(file)); + if (!edits) { + return void 0; + } + return edits.map((edit) => this.convertTextChangeToCodeEdit(edit, scriptInfo)); + } + getFormattingEditsForRangeFull(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const options = args.options ? convertFormatOptions(args.options) : this.getFormatOptions(file); + return languageService.getFormattingEditsForRange(file, args.position, args.endPosition, options); + } + getFormattingEditsForDocumentFull(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const options = args.options ? convertFormatOptions(args.options) : this.getFormatOptions(file); + return languageService.getFormattingEditsForDocument(file, options); + } + getFormattingEditsAfterKeystrokeFull(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const options = args.options ? convertFormatOptions(args.options) : this.getFormatOptions(file); + return languageService.getFormattingEditsAfterKeystroke(file, args.position, args.key, options); + } + getFormattingEditsAfterKeystroke(args) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const position = scriptInfo.lineOffsetToPosition(args.line, args.offset); + const formatOptions = this.getFormatOptions(file); + const edits = languageService.getFormattingEditsAfterKeystroke(file, position, args.key, formatOptions); + if (args.key === "\n" && (!edits || edits.length === 0 || allEditsBeforePos(edits, position))) { + const { lineText, absolutePosition } = scriptInfo.textStorage.getAbsolutePositionAndLineText(args.line); + if (lineText && lineText.search("\\S") < 0) { + const preferredIndent = languageService.getIndentationAtPosition(file, position, formatOptions); + let hasIndent = 0; + let i, len; + for (i = 0, len = lineText.length; i < len; i++) { + if (lineText.charAt(i) === " ") { + hasIndent++; + } else if (lineText.charAt(i) === " ") { + hasIndent += formatOptions.tabSize; + } else { + break; + } + } + if (preferredIndent !== hasIndent) { + const firstNoWhiteSpacePosition = absolutePosition + i; + edits.push({ + span: createTextSpanFromBounds(absolutePosition, firstNoWhiteSpacePosition), + newText: ts_formatting_exports.getIndentationString(preferredIndent, formatOptions) + }); + } + } + } + if (!edits) { + return void 0; + } + return edits.map((edit) => { + return { + start: scriptInfo.positionToLineOffset(edit.span.start), + end: scriptInfo.positionToLineOffset(textSpanEnd(edit.span)), + newText: edit.newText ? edit.newText : "" + }; + }); + } + getCompletions(args, kind) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const position = this.getPosition(args, scriptInfo); + const completions = project.getLanguageService().getCompletionsAtPosition( + file, + position, + { + ...convertUserPreferences(this.getPreferences(file)), + triggerCharacter: args.triggerCharacter, + triggerKind: args.triggerKind, + includeExternalModuleExports: args.includeExternalModuleExports, + includeInsertTextCompletions: args.includeInsertTextCompletions + }, + project.projectService.getFormatCodeOptions(file) + ); + if (completions === void 0) return void 0; + if (kind === "completions-full" /* CompletionsFull */) return completions; + const prefix = args.prefix || ""; + const entries = mapDefined(completions.entries, (entry) => { + if (completions.isMemberCompletion || startsWith(entry.name.toLowerCase(), prefix.toLowerCase())) { + const convertedSpan = entry.replacementSpan ? toProtocolTextSpan(entry.replacementSpan, scriptInfo) : void 0; + return { + ...entry, + replacementSpan: convertedSpan, + hasAction: entry.hasAction || void 0, + symbol: void 0 + }; + } + }); + if (kind === "completions" /* Completions */) { + if (completions.metadata) entries.metadata = completions.metadata; + return entries; + } + const res = { + ...completions, + optionalReplacementSpan: completions.optionalReplacementSpan && toProtocolTextSpan(completions.optionalReplacementSpan, scriptInfo), + entries + }; + return res; + } + getCompletionEntryDetails(args, fullResult) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const position = this.getPosition(args, scriptInfo); + const formattingOptions = project.projectService.getFormatCodeOptions(file); + const useDisplayParts = !!this.getPreferences(file).displayPartsForJSDoc; + const result = mapDefined(args.entryNames, (entryName) => { + const { name, source, data } = typeof entryName === "string" ? { name: entryName, source: void 0, data: void 0 } : entryName; + return project.getLanguageService().getCompletionEntryDetails(file, position, name, formattingOptions, source, this.getPreferences(file), data ? cast(data, isCompletionEntryData) : void 0); + }); + return fullResult ? useDisplayParts ? result : result.map((details) => ({ ...details, tags: this.mapJSDocTagInfo( + details.tags, + project, + /*richResponse*/ + false + ) })) : result.map((details) => ({ + ...details, + codeActions: map(details.codeActions, (action) => this.mapCodeAction(action)), + documentation: this.mapDisplayParts(details.documentation, project), + tags: this.mapJSDocTagInfo(details.tags, project, useDisplayParts) + })); + } + getCompileOnSaveAffectedFileList(args) { + const projects = this.getProjects( + args, + /*getScriptInfoEnsuringProjectsUptoDate*/ + true, + /*ignoreNoProjectError*/ + true + ); + const info = this.projectService.getScriptInfo(args.file); + if (!info) { + return emptyArray2; + } + return combineProjectOutput( + info, + (path) => this.projectService.getScriptInfoForPath(path), + projects, + (project, info2) => { + if (!project.compileOnSaveEnabled || !project.languageServiceEnabled || project.isOrphan()) { + return void 0; + } + const compilationSettings = project.getCompilationSettings(); + if (!!compilationSettings.noEmit || isDeclarationFileName(info2.fileName) && !dtsChangeCanAffectEmit(compilationSettings)) { + return void 0; + } + return { + projectFileName: project.getProjectName(), + fileNames: project.getCompileOnSaveAffectedFileList(info2), + projectUsesOutFile: !!compilationSettings.outFile + }; + } + ); + } + emitFile(args) { + const { file, project } = this.getFileAndProject(args); + if (!project) { + Errors.ThrowNoProject(); + } + if (!project.languageServiceEnabled) { + return args.richResponse ? { emitSkipped: true, diagnostics: [] } : false; + } + const scriptInfo = project.getScriptInfo(file); + const { emitSkipped, diagnostics } = project.emitFile(scriptInfo, (path, data, writeByteOrderMark) => this.host.writeFile(path, data, writeByteOrderMark)); + return args.richResponse ? { + emitSkipped, + diagnostics: args.includeLinePosition ? this.convertToDiagnosticsWithLinePositionFromDiagnosticFile(diagnostics) : diagnostics.map((d) => formatDiagnosticToProtocol( + d, + /*includeFileName*/ + true + )) + } : !emitSkipped; + } + getSignatureHelpItems(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const position = this.getPosition(args, scriptInfo); + const helpItems = project.getLanguageService().getSignatureHelpItems(file, position, args); + const useDisplayParts = !!this.getPreferences(file).displayPartsForJSDoc; + if (helpItems && simplifiedResult) { + const span = helpItems.applicableSpan; + return { + ...helpItems, + applicableSpan: { + start: scriptInfo.positionToLineOffset(span.start), + end: scriptInfo.positionToLineOffset(span.start + span.length) + }, + items: this.mapSignatureHelpItems(helpItems.items, project, useDisplayParts) + }; + } else if (useDisplayParts || !helpItems) { + return helpItems; + } else { + return { + ...helpItems, + items: helpItems.items.map((item) => ({ ...item, tags: this.mapJSDocTagInfo( + item.tags, + project, + /*richResponse*/ + false + ) })) + }; + } + } + toPendingErrorCheck(uncheckedFileName) { + const fileName = toNormalizedPath(uncheckedFileName); + const project = this.projectService.tryGetDefaultProjectForFile(fileName); + return project && { fileName, project }; + } + getDiagnostics(next, delay, fileArgs) { + if (this.suppressDiagnosticEvents) { + return; + } + if (fileArgs.length > 0) { + this.updateErrorCheck(next, fileArgs, delay); + } + } + change(args) { + const scriptInfo = this.projectService.getScriptInfo(args.file); + Debug.assert(!!scriptInfo); + scriptInfo.textStorage.switchToScriptVersionCache(); + const start = scriptInfo.lineOffsetToPosition(args.line, args.offset); + const end = scriptInfo.lineOffsetToPosition(args.endLine, args.endOffset); + if (start >= 0) { + this.changeSeq++; + this.projectService.applyChangesToFile( + scriptInfo, + singleIterator({ + span: { start, length: end - start }, + newText: args.insertString + // TODO: GH#18217 + }) + ); + } + } + reload(args) { + const file = toNormalizedPath(args.file); + const tempFileName = args.tmpfile === void 0 ? void 0 : toNormalizedPath(args.tmpfile); + const info = this.projectService.getScriptInfoForNormalizedPath(file); + if (info) { + this.changeSeq++; + info.reloadFromFile(tempFileName); + } + } + saveToTmp(fileName, tempFileName) { + const scriptInfo = this.projectService.getScriptInfo(fileName); + if (scriptInfo) { + scriptInfo.saveTo(tempFileName); + } + } + closeClientFile(fileName) { + if (!fileName) { + return; + } + const file = normalizePath(fileName); + this.projectService.closeClientFile(file); + } + mapLocationNavigationBarItems(items, scriptInfo) { + return map(items, (item) => ({ + text: item.text, + kind: item.kind, + kindModifiers: item.kindModifiers, + spans: item.spans.map((span) => toProtocolTextSpan(span, scriptInfo)), + childItems: this.mapLocationNavigationBarItems(item.childItems, scriptInfo), + indent: item.indent + })); + } + getNavigationBarItems(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const items = languageService.getNavigationBarItems(file); + return !items ? void 0 : simplifiedResult ? this.mapLocationNavigationBarItems(items, this.projectService.getScriptInfoForNormalizedPath(file)) : items; + } + toLocationNavigationTree(tree, scriptInfo) { + return { + text: tree.text, + kind: tree.kind, + kindModifiers: tree.kindModifiers, + spans: tree.spans.map((span) => toProtocolTextSpan(span, scriptInfo)), + nameSpan: tree.nameSpan && toProtocolTextSpan(tree.nameSpan, scriptInfo), + childItems: map(tree.childItems, (item) => this.toLocationNavigationTree(item, scriptInfo)) + }; + } + getNavigationTree(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const tree = languageService.getNavigationTree(file); + return !tree ? void 0 : simplifiedResult ? this.toLocationNavigationTree(tree, this.projectService.getScriptInfoForNormalizedPath(file)) : tree; + } + getNavigateToItems(args, simplifiedResult) { + const full = this.getFullNavigateToItems(args); + return !simplifiedResult ? flatMap(full, ({ navigateToItems }) => navigateToItems) : flatMap( + full, + ({ project, navigateToItems }) => navigateToItems.map((navItem) => { + const scriptInfo = project.getScriptInfo(navItem.fileName); + const bakedItem = { + name: navItem.name, + kind: navItem.kind, + kindModifiers: navItem.kindModifiers, + isCaseSensitive: navItem.isCaseSensitive, + matchKind: navItem.matchKind, + file: navItem.fileName, + start: scriptInfo.positionToLineOffset(navItem.textSpan.start), + end: scriptInfo.positionToLineOffset(textSpanEnd(navItem.textSpan)) + }; + if (navItem.kindModifiers && navItem.kindModifiers !== "") { + bakedItem.kindModifiers = navItem.kindModifiers; + } + if (navItem.containerName && navItem.containerName.length > 0) { + bakedItem.containerName = navItem.containerName; + } + if (navItem.containerKind && navItem.containerKind.length > 0) { + bakedItem.containerKind = navItem.containerKind; + } + return bakedItem; + }) + ); + } + getFullNavigateToItems(args) { + const { currentFileOnly, searchValue, maxResultCount, projectFileName } = args; + if (currentFileOnly) { + Debug.assertIsDefined(args.file); + const { file, project } = this.getFileAndProject(args); + return [{ project, navigateToItems: project.getLanguageService().getNavigateToItems(searchValue, maxResultCount, file) }]; + } + const preferences = this.getHostPreferences(); + const outputs = []; + const seenItems = /* @__PURE__ */ new Map(); + if (!args.file && !projectFileName) { + this.projectService.loadAncestorProjectTree(); + this.projectService.forEachEnabledProject((project) => addItemsForProject(project)); + } else { + const projects = this.getProjects(args); + forEachProjectInProjects( + projects, + /*path*/ + void 0, + (project) => addItemsForProject(project) + ); + } + return outputs; + function addItemsForProject(project) { + const projectItems = project.getLanguageService().getNavigateToItems( + searchValue, + maxResultCount, + /*fileName*/ + void 0, + /*excludeDts*/ + project.isNonTsProject(), + /*excludeLibFiles*/ + preferences.excludeLibrarySymbolsInNavTo + ); + const unseenItems = filter(projectItems, (item) => tryAddSeenItem(item) && !getMappedLocationForProject(documentSpanLocation(item), project)); + if (unseenItems.length) { + outputs.push({ project, navigateToItems: unseenItems }); + } + } + function tryAddSeenItem(item) { + const name = item.name; + if (!seenItems.has(name)) { + seenItems.set(name, [item]); + return true; + } + const seen = seenItems.get(name); + for (const seenItem of seen) { + if (navigateToItemIsEqualTo(seenItem, item)) { + return false; + } + } + seen.push(item); + return true; + } + function navigateToItemIsEqualTo(a, b) { + if (a === b) { + return true; + } + if (!a || !b) { + return false; + } + return a.containerKind === b.containerKind && a.containerName === b.containerName && a.fileName === b.fileName && a.isCaseSensitive === b.isCaseSensitive && a.kind === b.kind && a.kindModifiers === b.kindModifiers && a.matchKind === b.matchKind && a.name === b.name && a.textSpan.start === b.textSpan.start && a.textSpan.length === b.textSpan.length; + } + } + getSupportedCodeFixes(args) { + if (!args) return getSupportedCodeFixes(); + if (args.file) { + const { file, project: project2 } = this.getFileAndProject(args); + return project2.getLanguageService().getSupportedCodeFixes(file); + } + const project = this.getProject(args.projectFileName); + if (!project) Errors.ThrowNoProject(); + return project.getLanguageService().getSupportedCodeFixes(); + } + isLocation(locationOrSpan) { + return locationOrSpan.line !== void 0; + } + extractPositionOrRange(args, scriptInfo) { + let position; + let textRange; + if (this.isLocation(args)) { + position = getPosition(args); + } else { + textRange = this.getRange(args, scriptInfo); + } + return Debug.checkDefined(position === void 0 ? textRange : position); + function getPosition(loc) { + return loc.position !== void 0 ? loc.position : scriptInfo.lineOffsetToPosition(loc.line, loc.offset); + } + } + getRange(args, scriptInfo) { + const { startPosition, endPosition } = this.getStartAndEndPosition(args, scriptInfo); + return { pos: startPosition, end: endPosition }; + } + getApplicableRefactors(args) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + const result = project.getLanguageService().getApplicableRefactors(file, this.extractPositionOrRange(args, scriptInfo), this.getPreferences(file), args.triggerReason, args.kind, args.includeInteractiveActions); + return result.map((result2) => ({ ...result2, actions: result2.actions.map((action) => ({ ...action, range: action.range ? { start: convertToLocation({ line: action.range.start.line, character: action.range.start.offset }), end: convertToLocation({ line: action.range.end.line, character: action.range.end.offset }) } : void 0 })) })); + } + getEditsForRefactor(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + const result = project.getLanguageService().getEditsForRefactor( + file, + this.getFormatOptions(file), + this.extractPositionOrRange(args, scriptInfo), + args.refactor, + args.action, + this.getPreferences(file), + args.interactiveRefactorArguments + ); + if (result === void 0) { + return { + edits: [] + }; + } + if (simplifiedResult) { + const { renameFilename, renameLocation, edits } = result; + let mappedRenameLocation; + if (renameFilename !== void 0 && renameLocation !== void 0) { + const renameScriptInfo = project.getScriptInfoForNormalizedPath(toNormalizedPath(renameFilename)); + mappedRenameLocation = getLocationInNewDocument(getSnapshotText(renameScriptInfo.getSnapshot()), renameFilename, renameLocation, edits); + } + return { + renameLocation: mappedRenameLocation, + renameFilename, + edits: this.mapTextChangesToCodeEdits(edits), + notApplicableReason: result.notApplicableReason + }; + } + return result; + } + getMoveToRefactoringFileSuggestions(args) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + return project.getLanguageService().getMoveToRefactoringFileSuggestions(file, this.extractPositionOrRange(args, scriptInfo), this.getPreferences(file)); + } + preparePasteEdits(args) { + const { file, project } = this.getFileAndProject(args); + return project.getLanguageService().preparePasteEditsForFile(file, args.copiedTextSpan.map((copies) => this.getRange({ file, startLine: copies.start.line, startOffset: copies.start.offset, endLine: copies.end.line, endOffset: copies.end.offset }, this.projectService.getScriptInfoForNormalizedPath(file)))); + } + getPasteEdits(args) { + const { file, project } = this.getFileAndProject(args); + if (isDynamicFileName(file)) return void 0; + const copiedFrom = args.copiedFrom ? { file: args.copiedFrom.file, range: args.copiedFrom.spans.map((copies) => this.getRange({ file: args.copiedFrom.file, startLine: copies.start.line, startOffset: copies.start.offset, endLine: copies.end.line, endOffset: copies.end.offset }, project.getScriptInfoForNormalizedPath(toNormalizedPath(args.copiedFrom.file)))) } : void 0; + const result = project.getLanguageService().getPasteEdits( + { + targetFile: file, + pastedText: args.pastedText, + pasteLocations: args.pasteLocations.map((paste) => this.getRange({ file, startLine: paste.start.line, startOffset: paste.start.offset, endLine: paste.end.line, endOffset: paste.end.offset }, project.getScriptInfoForNormalizedPath(file))), + copiedFrom, + preferences: this.getPreferences(file) + }, + this.getFormatOptions(file) + ); + return result && this.mapPasteEditsAction(result); + } + organizeImports(args, simplifiedResult) { + Debug.assert(args.scope.type === "file"); + const { file, project } = this.getFileAndProject(args.scope.args); + const changes = project.getLanguageService().organizeImports( + { + fileName: file, + mode: args.mode ?? (args.skipDestructiveCodeActions ? "SortAndCombine" /* SortAndCombine */ : void 0), + type: "file" + }, + this.getFormatOptions(file), + this.getPreferences(file) + ); + if (simplifiedResult) { + return this.mapTextChangesToCodeEdits(changes); + } else { + return changes; + } + } + getEditsForFileRename(args, simplifiedResult) { + const oldPath = toNormalizedPath(args.oldFilePath); + const newPath = toNormalizedPath(args.newFilePath); + const formatOptions = this.getHostFormatOptions(); + const preferences = this.getHostPreferences(); + const seenFiles = /* @__PURE__ */ new Set(); + const textChanges2 = []; + this.projectService.loadAncestorProjectTree(); + this.projectService.forEachEnabledProject((project) => { + const projectTextChanges = project.getLanguageService().getEditsForFileRename(oldPath, newPath, formatOptions, preferences); + const projectFiles = []; + for (const textChange of projectTextChanges) { + if (!seenFiles.has(textChange.fileName)) { + textChanges2.push(textChange); + projectFiles.push(textChange.fileName); + } + } + for (const file of projectFiles) { + seenFiles.add(file); + } + }); + return simplifiedResult ? textChanges2.map((c) => this.mapTextChangeToCodeEdit(c)) : textChanges2; + } + getCodeFixes(args, simplifiedResult) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = project.getScriptInfoForNormalizedPath(file); + const { startPosition, endPosition } = this.getStartAndEndPosition(args, scriptInfo); + let codeActions; + try { + codeActions = project.getLanguageService().getCodeFixesAtPosition(file, startPosition, endPosition, args.errorCodes, this.getFormatOptions(file), this.getPreferences(file)); + } catch (e) { + const error2 = e instanceof Error ? e : new Error(e); + const ls = project.getLanguageService(); + const existingDiagCodes = [ + ...ls.getSyntacticDiagnostics(file), + ...ls.getSemanticDiagnostics(file), + ...ls.getSuggestionDiagnostics(file) + ].filter((d) => decodedTextSpanIntersectsWith(startPosition, endPosition - startPosition, d.start, d.length)).map((d) => d.code); + const badCode = args.errorCodes.find((c) => !existingDiagCodes.includes(c)); + if (badCode !== void 0) { + error2.message += ` +Additional information: BADCLIENT: Bad error code, ${badCode} not found in range ${startPosition}..${endPosition} (found: ${existingDiagCodes.join(", ")})`; + } + throw error2; + } + return simplifiedResult ? codeActions.map((codeAction) => this.mapCodeFixAction(codeAction)) : codeActions; + } + getCombinedCodeFix({ scope, fixId: fixId56 }, simplifiedResult) { + Debug.assert(scope.type === "file"); + const { file, project } = this.getFileAndProject(scope.args); + const res = project.getLanguageService().getCombinedCodeFix({ type: "file", fileName: file }, fixId56, this.getFormatOptions(file), this.getPreferences(file)); + if (simplifiedResult) { + return { changes: this.mapTextChangesToCodeEdits(res.changes), commands: res.commands }; + } else { + return res; + } + } + applyCodeActionCommand(args) { + const commands = args.command; + for (const command of toArray(commands)) { + const { file, project } = this.getFileAndProject(command); + project.getLanguageService().applyCodeActionCommand(command, this.getFormatOptions(file)).then( + (_result) => { + }, + (_error) => { + } + ); + } + return {}; + } + getStartAndEndPosition(args, scriptInfo) { + let startPosition, endPosition; + if (args.startPosition !== void 0) { + startPosition = args.startPosition; + } else { + startPosition = scriptInfo.lineOffsetToPosition(args.startLine, args.startOffset); + args.startPosition = startPosition; + } + if (args.endPosition !== void 0) { + endPosition = args.endPosition; + } else { + endPosition = scriptInfo.lineOffsetToPosition(args.endLine, args.endOffset); + args.endPosition = endPosition; + } + return { startPosition, endPosition }; + } + mapCodeAction({ description: description3, changes, commands }) { + return { description: description3, changes: this.mapTextChangesToCodeEdits(changes), commands }; + } + mapCodeFixAction({ fixName: fixName8, description: description3, changes, commands, fixId: fixId56, fixAllDescription }) { + return { fixName: fixName8, description: description3, changes: this.mapTextChangesToCodeEdits(changes), commands, fixId: fixId56, fixAllDescription }; + } + mapPasteEditsAction({ edits, fixId: fixId56 }) { + return { edits: this.mapTextChangesToCodeEdits(edits), fixId: fixId56 }; + } + mapTextChangesToCodeEdits(textChanges2) { + return textChanges2.map((change) => this.mapTextChangeToCodeEdit(change)); + } + mapTextChangeToCodeEdit(textChanges2) { + const scriptInfo = this.projectService.getScriptInfoOrConfig(textChanges2.fileName); + if (!!textChanges2.isNewFile === !!scriptInfo) { + if (!scriptInfo) { + this.projectService.logErrorForScriptInfoNotFound(textChanges2.fileName); + } + Debug.fail("Expected isNewFile for (only) new files. " + JSON.stringify({ isNewFile: !!textChanges2.isNewFile, hasScriptInfo: !!scriptInfo })); + } + return scriptInfo ? { fileName: textChanges2.fileName, textChanges: textChanges2.textChanges.map((textChange) => convertTextChangeToCodeEdit(textChange, scriptInfo)) } : convertNewFileTextChangeToCodeEdit(textChanges2); + } + convertTextChangeToCodeEdit(change, scriptInfo) { + return { + start: scriptInfo.positionToLineOffset(change.span.start), + end: scriptInfo.positionToLineOffset(change.span.start + change.span.length), + newText: change.newText ? change.newText : "" + }; + } + getBraceMatching(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const position = this.getPosition(args, scriptInfo); + const spans = languageService.getBraceMatchingAtPosition(file, position); + return !spans ? void 0 : simplifiedResult ? spans.map((span) => toProtocolTextSpan(span, scriptInfo)) : spans; + } + getDiagnosticsForProject(next, delay, fileName) { + if (this.suppressDiagnosticEvents) { + return; + } + const { fileNames, languageServiceDisabled } = this.getProjectInfoWorker( + fileName, + /*projectFileName*/ + void 0, + /*needFileNameList*/ + true, + /*needDefaultConfiguredProjectInfo*/ + void 0, + /*excludeConfigFiles*/ + true + ); + if (languageServiceDisabled) return; + const fileNamesInProject = fileNames.filter((value) => !value.includes("lib.d.ts")); + if (fileNamesInProject.length === 0) return; + const highPriorityFiles = []; + const mediumPriorityFiles = []; + const lowPriorityFiles = []; + const veryLowPriorityFiles = []; + const normalizedFileName = toNormalizedPath(fileName); + const project = this.projectService.ensureDefaultProjectForFile(normalizedFileName); + for (const fileNameInProject of fileNamesInProject) { + if (this.getCanonicalFileName(fileNameInProject) === this.getCanonicalFileName(fileName)) { + highPriorityFiles.push(fileNameInProject); + } else { + const info = this.projectService.getScriptInfo(fileNameInProject); + if (!info.isScriptOpen()) { + if (isDeclarationFileName(fileNameInProject)) { + veryLowPriorityFiles.push(fileNameInProject); + } else { + lowPriorityFiles.push(fileNameInProject); + } + } else { + mediumPriorityFiles.push(fileNameInProject); + } + } + } + const sortedFiles = [...highPriorityFiles, ...mediumPriorityFiles, ...lowPriorityFiles, ...veryLowPriorityFiles]; + const checkList = sortedFiles.map((fileName2) => ({ fileName: fileName2, project })); + this.updateErrorCheck( + next, + checkList, + delay, + /*requireOpen*/ + false + ); + } + configurePlugin(args) { + this.projectService.configurePlugin(args); + } + getSmartSelectionRange(args, simplifiedResult) { + const { locations } = args; + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = Debug.checkDefined(this.projectService.getScriptInfo(file)); + return map(locations, (location) => { + const pos = this.getPosition(location, scriptInfo); + const selectionRange = languageService.getSmartSelectionRange(file, pos); + return simplifiedResult ? this.mapSelectionRange(selectionRange, scriptInfo) : selectionRange; + }); + } + toggleLineComment(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfo(file); + const textRange = this.getRange(args, scriptInfo); + const textChanges2 = languageService.toggleLineComment(file, textRange); + if (simplifiedResult) { + const scriptInfo2 = this.projectService.getScriptInfoForNormalizedPath(file); + return textChanges2.map((textChange) => this.convertTextChangeToCodeEdit(textChange, scriptInfo2)); + } + return textChanges2; + } + toggleMultilineComment(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const textRange = this.getRange(args, scriptInfo); + const textChanges2 = languageService.toggleMultilineComment(file, textRange); + if (simplifiedResult) { + const scriptInfo2 = this.projectService.getScriptInfoForNormalizedPath(file); + return textChanges2.map((textChange) => this.convertTextChangeToCodeEdit(textChange, scriptInfo2)); + } + return textChanges2; + } + commentSelection(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const textRange = this.getRange(args, scriptInfo); + const textChanges2 = languageService.commentSelection(file, textRange); + if (simplifiedResult) { + const scriptInfo2 = this.projectService.getScriptInfoForNormalizedPath(file); + return textChanges2.map((textChange) => this.convertTextChangeToCodeEdit(textChange, scriptInfo2)); + } + return textChanges2; + } + uncommentSelection(args, simplifiedResult) { + const { file, languageService } = this.getFileAndLanguageServiceForSyntacticOperation(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + const textRange = this.getRange(args, scriptInfo); + const textChanges2 = languageService.uncommentSelection(file, textRange); + if (simplifiedResult) { + const scriptInfo2 = this.projectService.getScriptInfoForNormalizedPath(file); + return textChanges2.map((textChange) => this.convertTextChangeToCodeEdit(textChange, scriptInfo2)); + } + return textChanges2; + } + mapSelectionRange(selectionRange, scriptInfo) { + const result = { + textSpan: toProtocolTextSpan(selectionRange.textSpan, scriptInfo) + }; + if (selectionRange.parent) { + result.parent = this.mapSelectionRange(selectionRange.parent, scriptInfo); + } + return result; + } + getScriptInfoFromProjectService(file) { + const normalizedFile = toNormalizedPath(file); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(normalizedFile); + if (!scriptInfo) { + this.projectService.logErrorForScriptInfoNotFound(normalizedFile); + return Errors.ThrowNoProject(); + } + return scriptInfo; + } + toProtocolCallHierarchyItem(item) { + const scriptInfo = this.getScriptInfoFromProjectService(item.file); + return { + name: item.name, + kind: item.kind, + kindModifiers: item.kindModifiers, + file: item.file, + containerName: item.containerName, + span: toProtocolTextSpan(item.span, scriptInfo), + selectionSpan: toProtocolTextSpan(item.selectionSpan, scriptInfo) + }; + } + toProtocolCallHierarchyIncomingCall(incomingCall) { + const scriptInfo = this.getScriptInfoFromProjectService(incomingCall.from.file); + return { + from: this.toProtocolCallHierarchyItem(incomingCall.from), + fromSpans: incomingCall.fromSpans.map((fromSpan) => toProtocolTextSpan(fromSpan, scriptInfo)) + }; + } + toProtocolCallHierarchyOutgoingCall(outgoingCall, scriptInfo) { + return { + to: this.toProtocolCallHierarchyItem(outgoingCall.to), + fromSpans: outgoingCall.fromSpans.map((fromSpan) => toProtocolTextSpan(fromSpan, scriptInfo)) + }; + } + prepareCallHierarchy(args) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); + if (scriptInfo) { + const position = this.getPosition(args, scriptInfo); + const result = project.getLanguageService().prepareCallHierarchy(file, position); + return result && mapOneOrMany(result, (item) => this.toProtocolCallHierarchyItem(item)); + } + return void 0; + } + provideCallHierarchyIncomingCalls(args) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.getScriptInfoFromProjectService(file); + const incomingCalls = project.getLanguageService().provideCallHierarchyIncomingCalls(file, this.getPosition(args, scriptInfo)); + return incomingCalls.map((call) => this.toProtocolCallHierarchyIncomingCall(call)); + } + provideCallHierarchyOutgoingCalls(args) { + const { file, project } = this.getFileAndProject(args); + const scriptInfo = this.getScriptInfoFromProjectService(file); + const outgoingCalls = project.getLanguageService().provideCallHierarchyOutgoingCalls(file, this.getPosition(args, scriptInfo)); + return outgoingCalls.map((call) => this.toProtocolCallHierarchyOutgoingCall(call, scriptInfo)); + } + getCanonicalFileName(fileName) { + const name = this.host.useCaseSensitiveFileNames ? fileName : toFileNameLowerCase(fileName); + return normalizePath(name); + } + exit() { + } + notRequired(request) { + if (request) this.doOutput( + /*info*/ + void 0, + request.command, + request.seq, + /*success*/ + true, + this.performanceData + ); + return { responseRequired: false, performanceData: this.performanceData }; + } + requiredResponse(response) { + return { response, responseRequired: true, performanceData: this.performanceData }; + } + addProtocolHandler(command, handler) { + if (this.handlers.has(command)) { + throw new Error(`Protocol handler already exists for command "${command}"`); + } + this.handlers.set(command, handler); + } + setCurrentRequest(requestId) { + Debug.assert(this.currentRequestId === void 0); + this.currentRequestId = requestId; + this.cancellationToken.setRequest(requestId); + } + resetCurrentRequest(requestId) { + Debug.assert(this.currentRequestId === requestId); + this.currentRequestId = void 0; + this.cancellationToken.resetRequest(requestId); + } + // eslint-disable-line @typescript-eslint/unified-signatures + executeWithRequestId(requestId, f, perfomanceData) { + const currentPerformanceData = this.performanceData; + try { + this.performanceData = perfomanceData; + this.setCurrentRequest(requestId); + return f(); + } finally { + this.resetCurrentRequest(requestId); + this.performanceData = currentPerformanceData; + } + } + executeCommand(request) { + const handler = this.handlers.get(request.command); + if (handler) { + const response = this.executeWithRequestId( + request.seq, + () => handler(request), + /*perfomanceData*/ + void 0 + ); + this.projectService.enableRequestedPlugins(); + return response; + } else { + this.logger.msg(`Unrecognized JSON command:${stringifyIndented(request)}`, "Err" /* Err */); + this.doOutput( + /*info*/ + void 0, + "unknown" /* Unknown */, + request.seq, + /*success*/ + false, + /*performanceData*/ + void 0, + `Unrecognized JSON command: ${request.command}` + ); + return { responseRequired: false }; + } + } + onMessage(message) { + var _a, _b, _c, _d, _e, _f, _g; + this.gcTimer.scheduleCollect(); + let start; + const currentPerformanceData = this.performanceData; + if (this.logger.hasLevel(2 /* requestTime */)) { + start = this.hrtime(); + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`request:${indent2(this.toStringMessage(message))}`); + } + } + let request; + let relevantFile; + try { + request = this.parseMessage(message); + relevantFile = request.arguments && request.arguments.file ? request.arguments : void 0; + (_a = tracing) == null ? void 0 : _a.instant(tracing.Phase.Session, "request", { seq: request.seq, command: request.command }); + (_b = tracing) == null ? void 0 : _b.push( + tracing.Phase.Session, + "executeCommand", + { seq: request.seq, command: request.command }, + /*separateBeginAndEnd*/ + true + ); + const { response, responseRequired, performanceData } = this.executeCommand(request); + (_c = tracing) == null ? void 0 : _c.pop(); + if (this.logger.hasLevel(2 /* requestTime */)) { + const elapsedTime = hrTimeToMilliseconds(this.hrtime(start)).toFixed(4); + if (responseRequired) { + this.logger.perftrc(`${request.seq}::${request.command}: elapsed time (in milliseconds) ${elapsedTime}`); + } else { + this.logger.perftrc(`${request.seq}::${request.command}: async elapsed time (in milliseconds) ${elapsedTime}`); + } + } + (_d = tracing) == null ? void 0 : _d.instant(tracing.Phase.Session, "response", { seq: request.seq, command: request.command, success: !!response }); + if (response) { + this.doOutput( + response, + request.command, + request.seq, + /*success*/ + true, + performanceData + ); + } else if (responseRequired) { + this.doOutput( + /*info*/ + void 0, + request.command, + request.seq, + /*success*/ + false, + performanceData, + "No content available." + ); + } + } catch (err) { + (_e = tracing) == null ? void 0 : _e.popAll(); + if (err instanceof OperationCanceledException) { + (_f = tracing) == null ? void 0 : _f.instant(tracing.Phase.Session, "commandCanceled", { seq: request == null ? void 0 : request.seq, command: request == null ? void 0 : request.command }); + this.doOutput( + { canceled: true }, + request.command, + request.seq, + /*success*/ + true, + this.performanceData + ); + return; + } + this.logErrorWorker(err, this.toStringMessage(message), relevantFile); + (_g = tracing) == null ? void 0 : _g.instant(tracing.Phase.Session, "commandError", { seq: request == null ? void 0 : request.seq, command: request == null ? void 0 : request.command, message: err.message }); + this.doOutput( + /*info*/ + void 0, + request ? request.command : "unknown" /* Unknown */, + request ? request.seq : 0, + /*success*/ + false, + this.performanceData, + "Error processing request. " + err.message + "\n" + err.stack + ); + } finally { + this.performanceData = currentPerformanceData; + } + } + parseMessage(message) { + return JSON.parse(message); + } + toStringMessage(message) { + return message; + } + getFormatOptions(file) { + return this.projectService.getFormatCodeOptions(file); + } + getPreferences(file) { + return this.projectService.getPreferences(file); + } + getHostFormatOptions() { + return this.projectService.getHostFormatCodeOptions(); + } + getHostPreferences() { + return this.projectService.getHostPreferences(); + } +}; +function toProtocolPerformanceData(performanceData) { + const diagnosticsDuration = performanceData.diagnosticsDuration && arrayFrom(performanceData.diagnosticsDuration, ([file, data]) => ({ ...data, file })); + return { ...performanceData, diagnosticsDuration }; +} +function toProtocolTextSpan(textSpan, scriptInfo) { + return { + start: scriptInfo.positionToLineOffset(textSpan.start), + end: scriptInfo.positionToLineOffset(textSpanEnd(textSpan)) + }; +} +function toProtocolTextSpanWithContext(span, contextSpan, scriptInfo) { + const textSpan = toProtocolTextSpan(span, scriptInfo); + const contextTextSpan = contextSpan && toProtocolTextSpan(contextSpan, scriptInfo); + return contextTextSpan ? { ...textSpan, contextStart: contextTextSpan.start, contextEnd: contextTextSpan.end } : textSpan; +} +function convertTextChangeToCodeEdit(change, scriptInfo) { + return { start: positionToLineOffset(scriptInfo, change.span.start), end: positionToLineOffset(scriptInfo, textSpanEnd(change.span)), newText: change.newText }; +} +function positionToLineOffset(info, position) { + return isConfigFile(info) ? locationFromLineAndCharacter(info.getLineAndCharacterOfPosition(position)) : info.positionToLineOffset(position); +} +function convertLinkedEditInfoToRanges(linkedEdit, scriptInfo) { + const ranges = linkedEdit.ranges.map( + (r) => { + return { + start: scriptInfo.positionToLineOffset(r.start), + end: scriptInfo.positionToLineOffset(r.start + r.length) + }; + } + ); + if (!linkedEdit.wordPattern) return { ranges }; + return { ranges, wordPattern: linkedEdit.wordPattern }; +} +function locationFromLineAndCharacter(lc) { + return { line: lc.line + 1, offset: lc.character + 1 }; +} +function convertNewFileTextChangeToCodeEdit(textChanges2) { + Debug.assert(textChanges2.textChanges.length === 1); + const change = first(textChanges2.textChanges); + Debug.assert(change.span.start === 0 && change.span.length === 0); + return { fileName: textChanges2.fileName, textChanges: [{ start: { line: 0, offset: 0 }, end: { line: 0, offset: 0 }, newText: change.newText }] }; +} +function getLocationInNewDocument(oldText, renameFilename, renameLocation, edits) { + const newText = applyEdits(oldText, renameFilename, edits); + const { line, character } = computeLineAndCharacterOfPosition(computeLineStarts(newText), renameLocation); + return { line: line + 1, offset: character + 1 }; +} +function applyEdits(text, textFilename, edits) { + for (const { fileName, textChanges: textChanges2 } of edits) { + if (fileName !== textFilename) { + continue; + } + for (let i = textChanges2.length - 1; i >= 0; i--) { + const { newText, span: { start, length: length2 } } = textChanges2[i]; + text = text.slice(0, start) + newText + text.slice(start + length2); + } + } + return text; +} +function referenceEntryToReferencesResponseItem(projectService, { fileName, textSpan, contextSpan, isWriteAccess: isWriteAccess2, isDefinition }, { disableLineTextInReferences }) { + const scriptInfo = Debug.checkDefined(projectService.getScriptInfo(fileName)); + const span = toProtocolTextSpanWithContext(textSpan, contextSpan, scriptInfo); + const lineText = disableLineTextInReferences ? void 0 : getLineText(scriptInfo, span); + return { + file: fileName, + ...span, + lineText, + isWriteAccess: isWriteAccess2, + isDefinition + }; +} +function getLineText(scriptInfo, span) { + const lineSpan = scriptInfo.lineToTextSpan(span.start.line - 1); + return scriptInfo.getSnapshot().getText(lineSpan.start, textSpanEnd(lineSpan)).replace(/\r|\n/g, ""); +} +function isCompletionEntryData(data) { + return data === void 0 || data && typeof data === "object" && typeof data.exportName === "string" && (data.fileName === void 0 || typeof data.fileName === "string") && (data.ambientModuleName === void 0 || typeof data.ambientModuleName === "string" && (data.isPackageJsonImport === void 0 || typeof data.isPackageJsonImport === "boolean")); +} + +// src/server/scriptVersionCache.ts +var lineCollectionCapacity = 4; +var CharRangeSection = /* @__PURE__ */ ((CharRangeSection2) => { + CharRangeSection2[CharRangeSection2["PreStart"] = 0] = "PreStart"; + CharRangeSection2[CharRangeSection2["Start"] = 1] = "Start"; + CharRangeSection2[CharRangeSection2["Entire"] = 2] = "Entire"; + CharRangeSection2[CharRangeSection2["Mid"] = 3] = "Mid"; + CharRangeSection2[CharRangeSection2["End"] = 4] = "End"; + CharRangeSection2[CharRangeSection2["PostEnd"] = 5] = "PostEnd"; + return CharRangeSection2; +})(CharRangeSection || {}); +var EditWalker = class { + constructor() { + this.goSubtree = true; + this.lineIndex = new LineIndex(); + this.endBranch = []; + this.state = 2 /* Entire */; + this.initialText = ""; + this.trailingText = ""; + this.lineIndex.root = new LineNode(); + this.startPath = [this.lineIndex.root]; + this.stack = [this.lineIndex.root]; + } + get done() { + return false; + } + insertLines(insertedText, suppressTrailingText) { + if (suppressTrailingText) { + this.trailingText = ""; + } + if (insertedText) { + insertedText = this.initialText + insertedText + this.trailingText; + } else { + insertedText = this.initialText + this.trailingText; + } + const lm = LineIndex.linesFromText(insertedText); + const lines = lm.lines; + if (lines.length > 1 && lines[lines.length - 1] === "") { + lines.pop(); + } + let branchParent; + let lastZeroCount; + for (let k = this.endBranch.length - 1; k >= 0; k--) { + this.endBranch[k].updateCounts(); + if (this.endBranch[k].charCount() === 0) { + lastZeroCount = this.endBranch[k]; + if (k > 0) { + branchParent = this.endBranch[k - 1]; + } else { + branchParent = this.branchNode; + } + } + } + if (lastZeroCount) { + branchParent.remove(lastZeroCount); + } + const leafNode = this.startPath[this.startPath.length - 1]; + if (lines.length > 0) { + leafNode.text = lines[0]; + if (lines.length > 1) { + let insertedNodes = new Array(lines.length - 1); + let startNode2 = leafNode; + for (let i = 1; i < lines.length; i++) { + insertedNodes[i - 1] = new LineLeaf(lines[i]); + } + let pathIndex = this.startPath.length - 2; + while (pathIndex >= 0) { + const insertionNode = this.startPath[pathIndex]; + insertedNodes = insertionNode.insertAt(startNode2, insertedNodes); + pathIndex--; + startNode2 = insertionNode; + } + let insertedNodesLen = insertedNodes.length; + while (insertedNodesLen > 0) { + const newRoot = new LineNode(); + newRoot.add(this.lineIndex.root); + insertedNodes = newRoot.insertAt(this.lineIndex.root, insertedNodes); + insertedNodesLen = insertedNodes.length; + this.lineIndex.root = newRoot; + } + this.lineIndex.root.updateCounts(); + } else { + for (let j = this.startPath.length - 2; j >= 0; j--) { + this.startPath[j].updateCounts(); + } + } + } else { + const insertionNode = this.startPath[this.startPath.length - 2]; + insertionNode.remove(leafNode); + for (let j = this.startPath.length - 2; j >= 0; j--) { + this.startPath[j].updateCounts(); + } + } + return this.lineIndex; + } + post(_relativeStart, _relativeLength, lineCollection) { + if (lineCollection === this.lineCollectionAtBranch) { + this.state = 4 /* End */; + } + this.stack.pop(); + } + pre(_relativeStart, _relativeLength, lineCollection, _parent, nodeType) { + const currentNode = this.stack[this.stack.length - 1]; + if (this.state === 2 /* Entire */ && nodeType === 1 /* Start */) { + this.state = 1 /* Start */; + this.branchNode = currentNode; + this.lineCollectionAtBranch = lineCollection; + } + let child; + function fresh(node) { + if (node.isLeaf()) { + return new LineLeaf(""); + } else return new LineNode(); + } + switch (nodeType) { + case 0 /* PreStart */: + this.goSubtree = false; + if (this.state !== 4 /* End */) { + currentNode.add(lineCollection); + } + break; + case 1 /* Start */: + if (this.state === 4 /* End */) { + this.goSubtree = false; + } else { + child = fresh(lineCollection); + currentNode.add(child); + this.startPath.push(child); + } + break; + case 2 /* Entire */: + if (this.state !== 4 /* End */) { + child = fresh(lineCollection); + currentNode.add(child); + this.startPath.push(child); + } else { + if (!lineCollection.isLeaf()) { + child = fresh(lineCollection); + currentNode.add(child); + this.endBranch.push(child); + } + } + break; + case 3 /* Mid */: + this.goSubtree = false; + break; + case 4 /* End */: + if (this.state !== 4 /* End */) { + this.goSubtree = false; + } else { + if (!lineCollection.isLeaf()) { + child = fresh(lineCollection); + currentNode.add(child); + this.endBranch.push(child); + } + } + break; + case 5 /* PostEnd */: + this.goSubtree = false; + if (this.state !== 1 /* Start */) { + currentNode.add(lineCollection); + } + break; + } + if (this.goSubtree) { + this.stack.push(child); + } + } + // just gather text from the leaves + leaf(relativeStart, relativeLength, ll) { + if (this.state === 1 /* Start */) { + this.initialText = ll.text.substring(0, relativeStart); + } else if (this.state === 2 /* Entire */) { + this.initialText = ll.text.substring(0, relativeStart); + this.trailingText = ll.text.substring(relativeStart + relativeLength); + } else { + this.trailingText = ll.text.substring(relativeStart + relativeLength); + } + } +}; +var TextChange9 = class { + constructor(pos, deleteLen, insertedText) { + this.pos = pos; + this.deleteLen = deleteLen; + this.insertedText = insertedText; + } + getTextChangeRange() { + return createTextChangeRange(createTextSpan(this.pos, this.deleteLen), this.insertedText ? this.insertedText.length : 0); + } +}; +var _ScriptVersionCache = class _ScriptVersionCache { + constructor() { + this.changes = []; + this.versions = new Array(_ScriptVersionCache.maxVersions); + this.minVersion = 0; + // no versions earlier than min version will maintain change history + this.currentVersion = 0; + } + versionToIndex(version2) { + if (version2 < this.minVersion || version2 > this.currentVersion) { + return void 0; + } + return version2 % _ScriptVersionCache.maxVersions; + } + currentVersionToIndex() { + return this.currentVersion % _ScriptVersionCache.maxVersions; + } + // REVIEW: can optimize by coalescing simple edits + edit(pos, deleteLen, insertedText) { + this.changes.push(new TextChange9(pos, deleteLen, insertedText)); + if (this.changes.length > _ScriptVersionCache.changeNumberThreshold || deleteLen > _ScriptVersionCache.changeLengthThreshold || insertedText && insertedText.length > _ScriptVersionCache.changeLengthThreshold) { + this.getSnapshot(); + } + } + getSnapshot() { + return this._getSnapshot(); + } + _getSnapshot() { + let snap = this.versions[this.currentVersionToIndex()]; + if (this.changes.length > 0) { + let snapIndex = snap.index; + for (const change of this.changes) { + snapIndex = snapIndex.edit(change.pos, change.deleteLen, change.insertedText); + } + snap = new LineIndexSnapshot(this.currentVersion + 1, this, snapIndex, this.changes); + this.currentVersion = snap.version; + this.versions[this.currentVersionToIndex()] = snap; + this.changes = []; + if (this.currentVersion - this.minVersion >= _ScriptVersionCache.maxVersions) { + this.minVersion = this.currentVersion - _ScriptVersionCache.maxVersions + 1; + } + } + return snap; + } + getSnapshotVersion() { + return this._getSnapshot().version; + } + getAbsolutePositionAndLineText(oneBasedLine) { + return this._getSnapshot().index.lineNumberToInfo(oneBasedLine); + } + lineOffsetToPosition(line, column) { + return this._getSnapshot().index.absolutePositionOfStartOfLine(line) + (column - 1); + } + positionToLineOffset(position) { + return this._getSnapshot().index.positionToLineOffset(position); + } + lineToTextSpan(line) { + const index = this._getSnapshot().index; + const { lineText, absolutePosition } = index.lineNumberToInfo(line + 1); + const len = lineText !== void 0 ? lineText.length : index.absolutePositionOfStartOfLine(line + 2) - absolutePosition; + return createTextSpan(absolutePosition, len); + } + getTextChangesBetweenVersions(oldVersion, newVersion) { + if (oldVersion < newVersion) { + if (oldVersion >= this.minVersion) { + const textChangeRanges = []; + for (let i = oldVersion + 1; i <= newVersion; i++) { + const snap = this.versions[this.versionToIndex(i)]; + for (const textChange of snap.changesSincePreviousVersion) { + textChangeRanges.push(textChange.getTextChangeRange()); + } + } + return collapseTextChangeRangesAcrossMultipleVersions(textChangeRanges); + } else { + return void 0; + } + } else { + return unchangedTextChangeRange; + } + } + getLineCount() { + return this._getSnapshot().index.getLineCount(); + } + static fromString(script) { + const svc = new _ScriptVersionCache(); + const snap = new LineIndexSnapshot(0, svc, new LineIndex()); + svc.versions[svc.currentVersion] = snap; + const lm = LineIndex.linesFromText(script); + snap.index.load(lm.lines); + return svc; + } +}; +_ScriptVersionCache.changeNumberThreshold = 8; +_ScriptVersionCache.changeLengthThreshold = 256; +_ScriptVersionCache.maxVersions = 8; +var ScriptVersionCache = _ScriptVersionCache; +var LineIndexSnapshot = class _LineIndexSnapshot { + constructor(version2, cache, index, changesSincePreviousVersion = emptyArray2) { + this.version = version2; + this.cache = cache; + this.index = index; + this.changesSincePreviousVersion = changesSincePreviousVersion; + } + getText(rangeStart, rangeEnd) { + return this.index.getText(rangeStart, rangeEnd - rangeStart); + } + getLength() { + return this.index.getLength(); + } + getChangeRange(oldSnapshot) { + if (oldSnapshot instanceof _LineIndexSnapshot && this.cache === oldSnapshot.cache) { + if (this.version <= oldSnapshot.version) { + return unchangedTextChangeRange; + } else { + return this.cache.getTextChangesBetweenVersions(oldSnapshot.version, this.version); + } + } + } +}; +var LineIndex = class _LineIndex { + constructor() { + // set this to true to check each edit for accuracy + this.checkEdits = false; + } + absolutePositionOfStartOfLine(oneBasedLine) { + return this.lineNumberToInfo(oneBasedLine).absolutePosition; + } + positionToLineOffset(position) { + const { oneBasedLine, zeroBasedColumn } = this.root.charOffsetToLineInfo(1, position); + return { line: oneBasedLine, offset: zeroBasedColumn + 1 }; + } + positionToColumnAndLineText(position) { + return this.root.charOffsetToLineInfo(1, position); + } + getLineCount() { + return this.root.lineCount(); + } + lineNumberToInfo(oneBasedLine) { + const lineCount = this.getLineCount(); + if (oneBasedLine <= lineCount) { + const { position, leaf } = this.root.lineNumberToInfo(oneBasedLine, 0); + return { absolutePosition: position, lineText: leaf && leaf.text }; + } else { + return { absolutePosition: this.root.charCount(), lineText: void 0 }; + } + } + load(lines) { + if (lines.length > 0) { + const leaves = []; + for (let i = 0; i < lines.length; i++) { + leaves[i] = new LineLeaf(lines[i]); + } + this.root = _LineIndex.buildTreeFromBottom(leaves); + } else { + this.root = new LineNode(); + } + } + walk(rangeStart, rangeLength, walkFns) { + this.root.walk(rangeStart, rangeLength, walkFns); + } + getText(rangeStart, rangeLength) { + let accum = ""; + if (rangeLength > 0 && rangeStart < this.root.charCount()) { + this.walk(rangeStart, rangeLength, { + goSubtree: true, + done: false, + leaf: (relativeStart, relativeLength, ll) => { + accum = accum.concat(ll.text.substring(relativeStart, relativeStart + relativeLength)); + } + }); + } + return accum; + } + getLength() { + return this.root.charCount(); + } + every(f, rangeStart, rangeEnd) { + if (!rangeEnd) { + rangeEnd = this.root.charCount(); + } + const walkFns = { + goSubtree: true, + done: false, + leaf(relativeStart, relativeLength, ll) { + if (!f(ll, relativeStart, relativeLength)) { + this.done = true; + } + } + }; + this.walk(rangeStart, rangeEnd - rangeStart, walkFns); + return !walkFns.done; + } + edit(pos, deleteLength, newText) { + if (this.root.charCount() === 0) { + Debug.assert(deleteLength === 0); + if (newText !== void 0) { + this.load(_LineIndex.linesFromText(newText).lines); + return this; + } + return void 0; + } else { + let checkText; + if (this.checkEdits) { + const source = this.getText(0, this.root.charCount()); + checkText = source.slice(0, pos) + newText + source.slice(pos + deleteLength); + } + const walker = new EditWalker(); + let suppressTrailingText = false; + if (pos >= this.root.charCount()) { + pos = this.root.charCount() - 1; + const endString = this.getText(pos, 1); + if (newText) { + newText = endString + newText; + } else { + newText = endString; + } + deleteLength = 0; + suppressTrailingText = true; + } else if (deleteLength > 0) { + const e = pos + deleteLength; + const { zeroBasedColumn, lineText } = this.positionToColumnAndLineText(e); + if (zeroBasedColumn === 0) { + deleteLength += lineText.length; + newText = newText ? newText + lineText : lineText; + } + } + this.root.walk(pos, deleteLength, walker); + walker.insertLines(newText, suppressTrailingText); + if (this.checkEdits) { + const updatedText = walker.lineIndex.getText(0, walker.lineIndex.getLength()); + Debug.assert(checkText === updatedText, "buffer edit mismatch"); + } + return walker.lineIndex; + } + } + static buildTreeFromBottom(nodes) { + if (nodes.length < lineCollectionCapacity) { + return new LineNode(nodes); + } + const interiorNodes = new Array(Math.ceil(nodes.length / lineCollectionCapacity)); + let nodeIndex = 0; + for (let i = 0; i < interiorNodes.length; i++) { + const end = Math.min(nodeIndex + lineCollectionCapacity, nodes.length); + interiorNodes[i] = new LineNode(nodes.slice(nodeIndex, end)); + nodeIndex = end; + } + return this.buildTreeFromBottom(interiorNodes); + } + static linesFromText(text) { + const lineMap = computeLineStarts(text); + if (lineMap.length === 0) { + return { lines: [], lineMap }; + } + const lines = new Array(lineMap.length); + const lc = lineMap.length - 1; + for (let lmi = 0; lmi < lc; lmi++) { + lines[lmi] = text.substring(lineMap[lmi], lineMap[lmi + 1]); + } + const endText = text.substring(lineMap[lc]); + if (endText.length > 0) { + lines[lc] = endText; + } else { + lines.pop(); + } + return { lines, lineMap }; + } +}; +var LineNode = class _LineNode { + constructor(children = []) { + this.children = children; + this.totalChars = 0; + this.totalLines = 0; + if (children.length) this.updateCounts(); + } + isLeaf() { + return false; + } + updateCounts() { + this.totalChars = 0; + this.totalLines = 0; + for (const child of this.children) { + this.totalChars += child.charCount(); + this.totalLines += child.lineCount(); + } + } + execWalk(rangeStart, rangeLength, walkFns, childIndex, nodeType) { + if (walkFns.pre) { + walkFns.pre(rangeStart, rangeLength, this.children[childIndex], this, nodeType); + } + if (walkFns.goSubtree) { + this.children[childIndex].walk(rangeStart, rangeLength, walkFns); + if (walkFns.post) { + walkFns.post(rangeStart, rangeLength, this.children[childIndex], this, nodeType); + } + } else { + walkFns.goSubtree = true; + } + return walkFns.done; + } + skipChild(relativeStart, relativeLength, childIndex, walkFns, nodeType) { + if (walkFns.pre && !walkFns.done) { + walkFns.pre(relativeStart, relativeLength, this.children[childIndex], this, nodeType); + walkFns.goSubtree = true; + } + } + walk(rangeStart, rangeLength, walkFns) { + if (this.children.length === 0) return; + let childIndex = 0; + let childCharCount = this.children[childIndex].charCount(); + let adjustedStart = rangeStart; + while (adjustedStart >= childCharCount) { + this.skipChild(adjustedStart, rangeLength, childIndex, walkFns, 0 /* PreStart */); + adjustedStart -= childCharCount; + childIndex++; + childCharCount = this.children[childIndex].charCount(); + } + if (adjustedStart + rangeLength <= childCharCount) { + if (this.execWalk(adjustedStart, rangeLength, walkFns, childIndex, 2 /* Entire */)) { + return; + } + } else { + if (this.execWalk(adjustedStart, childCharCount - adjustedStart, walkFns, childIndex, 1 /* Start */)) { + return; + } + let adjustedLength = rangeLength - (childCharCount - adjustedStart); + childIndex++; + const child = this.children[childIndex]; + childCharCount = child.charCount(); + while (adjustedLength > childCharCount) { + if (this.execWalk(0, childCharCount, walkFns, childIndex, 3 /* Mid */)) { + return; + } + adjustedLength -= childCharCount; + childIndex++; + childCharCount = this.children[childIndex].charCount(); + } + if (adjustedLength > 0) { + if (this.execWalk(0, adjustedLength, walkFns, childIndex, 4 /* End */)) { + return; + } + } + } + if (walkFns.pre) { + const clen = this.children.length; + if (childIndex < clen - 1) { + for (let ej = childIndex + 1; ej < clen; ej++) { + this.skipChild(0, 0, ej, walkFns, 5 /* PostEnd */); + } + } + } + } + // Input position is relative to the start of this node. + // Output line number is absolute. + charOffsetToLineInfo(lineNumberAccumulator, relativePosition) { + if (this.children.length === 0) { + return { oneBasedLine: lineNumberAccumulator, zeroBasedColumn: relativePosition, lineText: void 0 }; + } + for (const child of this.children) { + if (child.charCount() > relativePosition) { + if (child.isLeaf()) { + return { oneBasedLine: lineNumberAccumulator, zeroBasedColumn: relativePosition, lineText: child.text }; + } else { + return child.charOffsetToLineInfo(lineNumberAccumulator, relativePosition); + } + } else { + relativePosition -= child.charCount(); + lineNumberAccumulator += child.lineCount(); + } + } + const lineCount = this.lineCount(); + if (lineCount === 0) { + return { oneBasedLine: 1, zeroBasedColumn: 0, lineText: void 0 }; + } + const leaf = Debug.checkDefined(this.lineNumberToInfo(lineCount, 0).leaf); + return { oneBasedLine: lineCount, zeroBasedColumn: leaf.charCount(), lineText: void 0 }; + } + /** + * Input line number is relative to the start of this node. + * Output line number is relative to the child. + * positionAccumulator will be an absolute position once relativeLineNumber reaches 0. + */ + lineNumberToInfo(relativeOneBasedLine, positionAccumulator) { + for (const child of this.children) { + const childLineCount = child.lineCount(); + if (childLineCount >= relativeOneBasedLine) { + return child.isLeaf() ? { position: positionAccumulator, leaf: child } : child.lineNumberToInfo(relativeOneBasedLine, positionAccumulator); + } else { + relativeOneBasedLine -= childLineCount; + positionAccumulator += child.charCount(); + } + } + return { position: positionAccumulator, leaf: void 0 }; + } + splitAfter(childIndex) { + let splitNode; + const clen = this.children.length; + childIndex++; + const endLength = childIndex; + if (childIndex < clen) { + splitNode = new _LineNode(); + while (childIndex < clen) { + splitNode.add(this.children[childIndex]); + childIndex++; + } + splitNode.updateCounts(); + } + this.children.length = endLength; + return splitNode; + } + remove(child) { + const childIndex = this.findChildIndex(child); + const clen = this.children.length; + if (childIndex < clen - 1) { + for (let i = childIndex; i < clen - 1; i++) { + this.children[i] = this.children[i + 1]; + } + } + this.children.pop(); + } + findChildIndex(child) { + const childIndex = this.children.indexOf(child); + Debug.assert(childIndex !== -1); + return childIndex; + } + insertAt(child, nodes) { + let childIndex = this.findChildIndex(child); + const clen = this.children.length; + const nodeCount = nodes.length; + if (clen < lineCollectionCapacity && childIndex === clen - 1 && nodeCount === 1) { + this.add(nodes[0]); + this.updateCounts(); + return []; + } else { + const shiftNode = this.splitAfter(childIndex); + let nodeIndex = 0; + childIndex++; + while (childIndex < lineCollectionCapacity && nodeIndex < nodeCount) { + this.children[childIndex] = nodes[nodeIndex]; + childIndex++; + nodeIndex++; + } + let splitNodes = []; + let splitNodeCount = 0; + if (nodeIndex < nodeCount) { + splitNodeCount = Math.ceil((nodeCount - nodeIndex) / lineCollectionCapacity); + splitNodes = new Array(splitNodeCount); + let splitNodeIndex = 0; + for (let i = 0; i < splitNodeCount; i++) { + splitNodes[i] = new _LineNode(); + } + let splitNode = splitNodes[0]; + while (nodeIndex < nodeCount) { + splitNode.add(nodes[nodeIndex]); + nodeIndex++; + if (splitNode.children.length === lineCollectionCapacity) { + splitNodeIndex++; + splitNode = splitNodes[splitNodeIndex]; + } + } + for (let i = splitNodes.length - 1; i >= 0; i--) { + if (splitNodes[i].children.length === 0) { + splitNodes.pop(); + } + } + } + if (shiftNode) { + splitNodes.push(shiftNode); + } + this.updateCounts(); + for (let i = 0; i < splitNodeCount; i++) { + splitNodes[i].updateCounts(); + } + return splitNodes; + } + } + // assume there is room for the item; return true if more room + add(collection) { + this.children.push(collection); + Debug.assert(this.children.length <= lineCollectionCapacity); + } + charCount() { + return this.totalChars; + } + lineCount() { + return this.totalLines; + } +}; +var LineLeaf = class { + constructor(text) { + this.text = text; + } + isLeaf() { + return true; + } + walk(rangeStart, rangeLength, walkFns) { + walkFns.leaf(rangeStart, rangeLength, this); + } + charCount() { + return this.text.length; + } + lineCount() { + return 1; + } +}; + +// src/server/typingInstallerAdapter.ts +var _TypingsInstallerAdapter = class _TypingsInstallerAdapter { + constructor(telemetryEnabled, logger, host, globalTypingsCacheLocation, event, maxActiveRequestCount) { + this.telemetryEnabled = telemetryEnabled; + this.logger = logger; + this.host = host; + this.globalTypingsCacheLocation = globalTypingsCacheLocation; + this.event = event; + this.maxActiveRequestCount = maxActiveRequestCount; + this.activeRequestCount = 0; + this.requestQueue = createQueue(); + this.requestMap = /* @__PURE__ */ new Map(); + // Maps project name to newest requestQueue entry for that project + /** We will lazily request the types registry on the first call to `isKnownTypesPackageName` and store it in `typesRegistryCache`. */ + this.requestedRegistry = false; + this.packageInstallId = 0; + } + isKnownTypesPackageName(name) { + var _a; + const validationResult = ts_JsTyping_exports.validatePackageName(name); + if (validationResult !== ts_JsTyping_exports.NameValidationResult.Ok) { + return false; + } + if (!this.requestedRegistry) { + this.requestedRegistry = true; + this.installer.send({ kind: "typesRegistry" }); + } + return !!((_a = this.typesRegistryCache) == null ? void 0 : _a.has(name)); + } + installPackage(options) { + this.packageInstallId++; + const request = { kind: "installPackage", ...options, id: this.packageInstallId }; + const promise = new Promise((resolve, reject) => { + (this.packageInstalledPromise ?? (this.packageInstalledPromise = /* @__PURE__ */ new Map())).set(this.packageInstallId, { resolve, reject }); + }); + this.installer.send(request); + return promise; + } + attach(projectService) { + this.projectService = projectService; + this.installer = this.createInstallerProcess(); + } + onProjectClosed(p) { + this.installer.send({ projectName: p.getProjectName(), kind: "closeProject" }); + } + enqueueInstallTypingsRequest(project, typeAcquisition, unresolvedImports) { + const request = createInstallTypingsRequest(project, typeAcquisition, unresolvedImports); + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`TIAdapter:: Scheduling throttled operation:${stringifyIndented(request)}`); + } + if (this.activeRequestCount < this.maxActiveRequestCount) { + this.scheduleRequest(request); + } else { + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`TIAdapter:: Deferring request for: ${request.projectName}`); + } + this.requestQueue.enqueue(request); + this.requestMap.set(request.projectName, request); + } + } + handleMessage(response) { + var _a, _b; + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`TIAdapter:: Received response:${stringifyIndented(response)}`); + } + switch (response.kind) { + case EventTypesRegistry: + this.typesRegistryCache = new Map(Object.entries(response.typesRegistry)); + break; + case ActionPackageInstalled: { + const promise = (_a = this.packageInstalledPromise) == null ? void 0 : _a.get(response.id); + Debug.assertIsDefined(promise, "Should find the promise for package install"); + (_b = this.packageInstalledPromise) == null ? void 0 : _b.delete(response.id); + if (response.success) { + promise.resolve({ successMessage: response.message }); + } else { + promise.reject(response.message); + } + this.projectService.updateTypingsForProject(response); + this.event(response, "setTypings"); + break; + } + case EventInitializationFailed: { + const body = { + message: response.message + }; + const eventName = "typesInstallerInitializationFailed"; + this.event(body, eventName); + break; + } + case EventBeginInstallTypes: { + const body = { + eventId: response.eventId, + packages: response.packagesToInstall + }; + const eventName = "beginInstallTypes"; + this.event(body, eventName); + break; + } + case EventEndInstallTypes: { + if (this.telemetryEnabled) { + const body2 = { + telemetryEventName: "typingsInstalled", + payload: { + installedPackages: response.packagesToInstall.join(","), + installSuccess: response.installSuccess, + typingsInstallerVersion: response.typingsInstallerVersion + } + }; + const eventName2 = "telemetry"; + this.event(body2, eventName2); + } + const body = { + eventId: response.eventId, + packages: response.packagesToInstall, + success: response.installSuccess + }; + const eventName = "endInstallTypes"; + this.event(body, eventName); + break; + } + case ActionInvalidate: { + this.projectService.updateTypingsForProject(response); + break; + } + case ActionSet: { + if (this.activeRequestCount > 0) { + this.activeRequestCount--; + } else { + Debug.fail("TIAdapter:: Received too many responses"); + } + while (!this.requestQueue.isEmpty()) { + const queuedRequest = this.requestQueue.dequeue(); + if (this.requestMap.get(queuedRequest.projectName) === queuedRequest) { + this.requestMap.delete(queuedRequest.projectName); + this.scheduleRequest(queuedRequest); + break; + } + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`TIAdapter:: Skipping defunct request for: ${queuedRequest.projectName}`); + } + } + this.projectService.updateTypingsForProject(response); + this.event(response, "setTypings"); + break; + } + case ActionWatchTypingLocations: + this.projectService.watchTypingLocations(response); + break; + default: + assertType(response); + } + } + scheduleRequest(request) { + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`TIAdapter:: Scheduling request for: ${request.projectName}`); + } + this.activeRequestCount++; + this.host.setTimeout( + () => { + if (this.logger.hasLevel(3 /* verbose */)) { + this.logger.info(`TIAdapter:: Sending request:${stringifyIndented(request)}`); + } + this.installer.send(request); + }, + _TypingsInstallerAdapter.requestDelayMillis, + `${request.projectName}::${request.kind}` + ); + } +}; +// This number is essentially arbitrary. Processing more than one typings request +// at a time makes sense, but having too many in the pipe results in a hang +// (see https://github.com/nodejs/node/issues/7657). +// It would be preferable to base our limit on the amount of space left in the +// buffer, but we have yet to find a way to retrieve that value. +_TypingsInstallerAdapter.requestDelayMillis = 100; +var TypingsInstallerAdapter = _TypingsInstallerAdapter; + +// src/typescript/_namespaces/ts.server.ts +var ts_server_exports4 = {}; +__export(ts_server_exports4, { + ActionInvalidate: () => ActionInvalidate, + ActionPackageInstalled: () => ActionPackageInstalled, + ActionSet: () => ActionSet, + ActionWatchTypingLocations: () => ActionWatchTypingLocations, + Arguments: () => Arguments, + AutoImportProviderProject: () => AutoImportProviderProject, + AuxiliaryProject: () => AuxiliaryProject, + CharRangeSection: () => CharRangeSection, + CloseFileWatcherEvent: () => CloseFileWatcherEvent, + CommandNames: () => CommandNames, + ConfigFileDiagEvent: () => ConfigFileDiagEvent, + ConfiguredProject: () => ConfiguredProject2, + ConfiguredProjectLoadKind: () => ConfiguredProjectLoadKind, + CreateDirectoryWatcherEvent: () => CreateDirectoryWatcherEvent, + CreateFileWatcherEvent: () => CreateFileWatcherEvent, + Errors: () => Errors, + EventBeginInstallTypes: () => EventBeginInstallTypes, + EventEndInstallTypes: () => EventEndInstallTypes, + EventInitializationFailed: () => EventInitializationFailed, + EventTypesRegistry: () => EventTypesRegistry, + ExternalProject: () => ExternalProject, + GcTimer: () => GcTimer, + InferredProject: () => InferredProject2, + LargeFileReferencedEvent: () => LargeFileReferencedEvent, + LineIndex: () => LineIndex, + LineLeaf: () => LineLeaf, + LineNode: () => LineNode, + LogLevel: () => LogLevel2, + Msg: () => Msg, + OpenFileInfoTelemetryEvent: () => OpenFileInfoTelemetryEvent, + Project: () => Project2, + ProjectInfoTelemetryEvent: () => ProjectInfoTelemetryEvent, + ProjectKind: () => ProjectKind, + ProjectLanguageServiceStateEvent: () => ProjectLanguageServiceStateEvent, + ProjectLoadingFinishEvent: () => ProjectLoadingFinishEvent, + ProjectLoadingStartEvent: () => ProjectLoadingStartEvent, + ProjectService: () => ProjectService2, + ProjectsUpdatedInBackgroundEvent: () => ProjectsUpdatedInBackgroundEvent, + ScriptInfo: () => ScriptInfo, + ScriptVersionCache: () => ScriptVersionCache, + Session: () => Session3, + TextStorage: () => TextStorage, + ThrottledOperations: () => ThrottledOperations, + TypingsInstallerAdapter: () => TypingsInstallerAdapter, + allFilesAreJsOrDts: () => allFilesAreJsOrDts, + allRootFilesAreJsOrDts: () => allRootFilesAreJsOrDts, + asNormalizedPath: () => asNormalizedPath, + convertCompilerOptions: () => convertCompilerOptions, + convertFormatOptions: () => convertFormatOptions, + convertScriptKindName: () => convertScriptKindName, + convertTypeAcquisition: () => convertTypeAcquisition, + convertUserPreferences: () => convertUserPreferences, + convertWatchOptions: () => convertWatchOptions, + countEachFileTypes: () => countEachFileTypes, + createInstallTypingsRequest: () => createInstallTypingsRequest, + createModuleSpecifierCache: () => createModuleSpecifierCache, + createNormalizedPathMap: () => createNormalizedPathMap, + createPackageJsonCache: () => createPackageJsonCache, + createSortedArray: () => createSortedArray2, + emptyArray: () => emptyArray2, + findArgument: () => findArgument, + formatDiagnosticToProtocol: () => formatDiagnosticToProtocol, + formatMessage: () => formatMessage2, + getBaseConfigFileName: () => getBaseConfigFileName, + getDetailWatchInfo: () => getDetailWatchInfo, + getLocationInNewDocument: () => getLocationInNewDocument, + hasArgument: () => hasArgument, + hasNoTypeScriptSource: () => hasNoTypeScriptSource, + indent: () => indent2, + isBackgroundProject: () => isBackgroundProject, + isConfigFile: () => isConfigFile, + isConfiguredProject: () => isConfiguredProject, + isDynamicFileName: () => isDynamicFileName, + isExternalProject: () => isExternalProject, + isInferredProject: () => isInferredProject, + isInferredProjectName: () => isInferredProjectName, + isProjectDeferredClose: () => isProjectDeferredClose, + makeAutoImportProviderProjectName: () => makeAutoImportProviderProjectName, + makeAuxiliaryProjectName: () => makeAuxiliaryProjectName, + makeInferredProjectName: () => makeInferredProjectName, + maxFileSize: () => maxFileSize, + maxProgramSizeForNonTsFiles: () => maxProgramSizeForNonTsFiles, + normalizedPathToPath: () => normalizedPathToPath, + nowString: () => nowString, + nullCancellationToken: () => nullCancellationToken, + nullTypingsInstaller: () => nullTypingsInstaller, + protocol: () => ts_server_protocol_exports, + scriptInfoIsContainedByBackgroundProject: () => scriptInfoIsContainedByBackgroundProject, + scriptInfoIsContainedByDeferredClosedProject: () => scriptInfoIsContainedByDeferredClosedProject, + stringifyIndented: () => stringifyIndented, + toEvent: () => toEvent, + toNormalizedPath: () => toNormalizedPath, + tryConvertScriptKindName: () => tryConvertScriptKindName, + typingsInstaller: () => ts_server_typingsInstaller_exports, + updateProjectIfDirty: () => updateProjectIfDirty +}); + +// src/typescript/typescript.ts +if (typeof console !== "undefined") { + Debug.loggingHost = { + log(level, s) { + switch (level) { + case 1 /* Error */: + return console.error(s); + case 2 /* Warning */: + return console.warn(s); + case 3 /* Info */: + return console.log(s); + case 4 /* Verbose */: + return console.log(s); + } + } + }; +} +// Annotate the CommonJS export names for ESM import in node: +0 && (module.exports = { + ANONYMOUS, + AccessFlags, + AssertionLevel, + AssignmentDeclarationKind, + AssignmentKind, + Associativity, + BreakpointResolver, + BuilderFileEmit, + BuilderProgramKind, + BuilderState, + CallHierarchy, + CharacterCodes, + CheckFlags, + CheckMode, + ClassificationType, + ClassificationTypeNames, + CommentDirectiveType, + Comparison, + CompletionInfoFlags, + CompletionTriggerKind, + Completions, + ContainerFlags, + ContextFlags, + Debug, + DiagnosticCategory, + Diagnostics, + DocumentHighlights, + ElementFlags, + EmitFlags, + EmitHint, + EmitOnly, + EndOfLineState, + ExitStatus, + ExportKind, + Extension, + ExternalEmitHelpers, + FileIncludeKind, + FilePreprocessingDiagnosticsKind, + FileSystemEntryKind, + FileWatcherEventKind, + FindAllReferences, + FlattenLevel, + FlowFlags, + ForegroundColorEscapeSequences, + FunctionFlags, + GeneratedIdentifierFlags, + GetLiteralTextFlags, + GoToDefinition, + HighlightSpanKind, + IdentifierNameMap, + ImportKind, + ImportsNotUsedAsValues, + IndentStyle, + IndexFlags, + IndexKind, + InferenceFlags, + InferencePriority, + InlayHintKind, + InlayHints, + InternalEmitFlags, + InternalNodeBuilderFlags, + InternalSymbolName, + IntersectionFlags, + InvalidatedProjectKind, + JSDocParsingMode, + JsDoc, + JsTyping, + JsxEmit, + JsxFlags, + JsxReferenceKind, + LanguageFeatureMinimumTarget, + LanguageServiceMode, + LanguageVariant, + LexicalEnvironmentFlags, + ListFormat, + LogLevel, + MapCode, + MemberOverrideStatus, + ModifierFlags, + ModuleDetectionKind, + ModuleInstanceState, + ModuleKind, + ModuleResolutionKind, + ModuleSpecifierEnding, + NavigateTo, + NavigationBar, + NewLineKind, + NodeBuilderFlags, + NodeCheckFlags, + NodeFactoryFlags, + NodeFlags, + NodeResolutionFeatures, + ObjectFlags, + OperationCanceledException, + OperatorPrecedence, + OrganizeImports, + OrganizeImportsMode, + OuterExpressionKinds, + OutliningElementsCollector, + OutliningSpanKind, + OutputFileType, + PackageJsonAutoImportPreference, + PackageJsonDependencyGroup, + PatternMatchKind, + PollingInterval, + PollingWatchKind, + PragmaKindFlags, + PredicateSemantics, + PreparePasteEdits, + PrivateIdentifierKind, + ProcessLevel, + ProgramUpdateLevel, + QuotePreference, + RegularExpressionFlags, + RelationComparisonResult, + Rename, + ScriptElementKind, + ScriptElementKindModifier, + ScriptKind, + ScriptSnapshot, + ScriptTarget, + SemanticClassificationFormat, + SemanticMeaning, + SemicolonPreference, + SignatureCheckMode, + SignatureFlags, + SignatureHelp, + SignatureInfo, + SignatureKind, + SmartSelectionRange, + SnippetKind, + StatisticType, + StructureIsReused, + SymbolAccessibility, + SymbolDisplay, + SymbolDisplayPartKind, + SymbolFlags, + SymbolFormatFlags, + SyntaxKind, + Ternary, + ThrottledCancellationToken, + TokenClass, + TokenFlags, + TransformFlags, + TypeFacts, + TypeFlags, + TypeFormatFlags, + TypeMapKind, + TypePredicateKind, + TypeReferenceSerializationKind, + UnionReduction, + UpToDateStatusType, + VarianceFlags, + Version, + VersionRange, + WatchDirectoryFlags, + WatchDirectoryKind, + WatchFileKind, + WatchLogLevel, + WatchType, + accessPrivateIdentifier, + addEmitFlags, + addEmitHelper, + addEmitHelpers, + addInternalEmitFlags, + addNodeFactoryPatcher, + addObjectAllocatorPatcher, + addRange, + addRelatedInfo, + addSyntheticLeadingComment, + addSyntheticTrailingComment, + addToSeen, + advancedAsyncSuperHelper, + affectsDeclarationPathOptionDeclarations, + affectsEmitOptionDeclarations, + allKeysStartWithDot, + altDirectorySeparator, + and, + append, + appendIfUnique, + arrayFrom, + arrayIsEqualTo, + arrayIsHomogeneous, + arrayOf, + arrayReverseIterator, + arrayToMap, + arrayToMultiMap, + arrayToNumericMap, + assertType, + assign, + asyncSuperHelper, + attachFileToDiagnostics, + base64decode, + base64encode, + binarySearch, + binarySearchKey, + bindSourceFile, + breakIntoCharacterSpans, + breakIntoWordSpans, + buildLinkParts, + buildOpts, + buildOverload, + bundlerModuleNameResolver, + canBeConvertedToAsync, + canHaveDecorators, + canHaveExportModifier, + canHaveFlowNode, + canHaveIllegalDecorators, + canHaveIllegalModifiers, + canHaveIllegalType, + canHaveIllegalTypeParameters, + canHaveJSDoc, + canHaveLocals, + canHaveModifiers, + canHaveModuleSpecifier, + canHaveSymbol, + canIncludeBindAndCheckDiagnostics, + canJsonReportNoInputFiles, + canProduceDiagnostics, + canUsePropertyAccess, + canWatchAffectingLocation, + canWatchAtTypes, + canWatchDirectoryOrFile, + canWatchDirectoryOrFilePath, + cartesianProduct, + cast, + chainBundle, + chainDiagnosticMessages, + changeAnyExtension, + changeCompilerHostLikeToUseCache, + changeExtension, + changeFullExtension, + changesAffectModuleResolution, + changesAffectingProgramStructure, + characterCodeToRegularExpressionFlag, + childIsDecorated, + classElementOrClassElementParameterIsDecorated, + classHasClassThisAssignment, + classHasDeclaredOrExplicitlyAssignedName, + classHasExplicitlyAssignedName, + classOrConstructorParameterIsDecorated, + classicNameResolver, + classifier, + cleanExtendedConfigCache, + clear, + clearMap, + clearSharedExtendedConfigFileWatcher, + climbPastPropertyAccess, + clone, + cloneCompilerOptions, + closeFileWatcher, + closeFileWatcherOf, + codefix, + collapseTextChangeRangesAcrossMultipleVersions, + collectExternalModuleInfo, + combine, + combinePaths, + commandLineOptionOfCustomType, + commentPragmas, + commonOptionsWithBuild, + compact, + compareBooleans, + compareDataObjects, + compareDiagnostics, + compareEmitHelpers, + compareNumberOfDirectorySeparators, + comparePaths, + comparePathsCaseInsensitive, + comparePathsCaseSensitive, + comparePatternKeys, + compareProperties, + compareStringsCaseInsensitive, + compareStringsCaseInsensitiveEslintCompatible, + compareStringsCaseSensitive, + compareStringsCaseSensitiveUI, + compareTextSpans, + compareValues, + compilerOptionsAffectDeclarationPath, + compilerOptionsAffectEmit, + compilerOptionsAffectSemanticDiagnostics, + compilerOptionsDidYouMeanDiagnostics, + compilerOptionsIndicateEsModules, + computeCommonSourceDirectoryOfFilenames, + computeLineAndCharacterOfPosition, + computeLineOfPosition, + computeLineStarts, + computePositionOfLineAndCharacter, + computeSignatureWithDiagnostics, + computeSuggestionDiagnostics, + computedOptions, + concatenate, + concatenateDiagnosticMessageChains, + consumesNodeCoreModules, + contains, + containsIgnoredPath, + containsObjectRestOrSpread, + containsParseError, + containsPath, + convertCompilerOptionsForTelemetry, + convertCompilerOptionsFromJson, + convertJsonOption, + convertToBase64, + convertToJson, + convertToObject, + convertToOptionsWithAbsolutePaths, + convertToRelativePath, + convertToTSConfig, + convertTypeAcquisitionFromJson, + copyComments, + copyEntries, + copyLeadingComments, + copyProperties, + copyTrailingAsLeadingComments, + copyTrailingComments, + couldStartTrivia, + countWhere, + createAbstractBuilder, + createAccessorPropertyBackingField, + createAccessorPropertyGetRedirector, + createAccessorPropertySetRedirector, + createBaseNodeFactory, + createBinaryExpressionTrampoline, + createBuilderProgram, + createBuilderProgramUsingIncrementalBuildInfo, + createBuilderStatusReporter, + createCacheableExportInfoMap, + createCachedDirectoryStructureHost, + createClassifier, + createCommentDirectivesMap, + createCompilerDiagnostic, + createCompilerDiagnosticForInvalidCustomType, + createCompilerDiagnosticFromMessageChain, + createCompilerHost, + createCompilerHostFromProgramHost, + createCompilerHostWorker, + createDetachedDiagnostic, + createDiagnosticCollection, + createDiagnosticForFileFromMessageChain, + createDiagnosticForNode, + createDiagnosticForNodeArray, + createDiagnosticForNodeArrayFromMessageChain, + createDiagnosticForNodeFromMessageChain, + createDiagnosticForNodeInSourceFile, + createDiagnosticForRange, + createDiagnosticMessageChainFromDiagnostic, + createDiagnosticReporter, + createDocumentPositionMapper, + createDocumentRegistry, + createDocumentRegistryInternal, + createEmitAndSemanticDiagnosticsBuilderProgram, + createEmitHelperFactory, + createEmptyExports, + createEvaluator, + createExpressionForJsxElement, + createExpressionForJsxFragment, + createExpressionForObjectLiteralElementLike, + createExpressionForPropertyName, + createExpressionFromEntityName, + createExternalHelpersImportDeclarationIfNeeded, + createFileDiagnostic, + createFileDiagnosticFromMessageChain, + createFlowNode, + createForOfBindingStatement, + createFutureSourceFile, + createGetCanonicalFileName, + createGetIsolatedDeclarationErrors, + createGetSourceFile, + createGetSymbolAccessibilityDiagnosticForNode, + createGetSymbolAccessibilityDiagnosticForNodeName, + createGetSymbolWalker, + createIncrementalCompilerHost, + createIncrementalProgram, + createJsxFactoryExpression, + createLanguageService, + createLanguageServiceSourceFile, + createMemberAccessForPropertyName, + createModeAwareCache, + createModeAwareCacheKey, + createModeMismatchDetails, + createModuleNotFoundChain, + createModuleResolutionCache, + createModuleResolutionLoader, + createModuleResolutionLoaderUsingGlobalCache, + createModuleSpecifierResolutionHost, + createMultiMap, + createNameResolver, + createNodeConverters, + createNodeFactory, + createOptionNameMap, + createOverload, + createPackageJsonImportFilter, + createPackageJsonInfo, + createParenthesizerRules, + createPatternMatcher, + createPrinter, + createPrinterWithDefaults, + createPrinterWithRemoveComments, + createPrinterWithRemoveCommentsNeverAsciiEscape, + createPrinterWithRemoveCommentsOmitTrailingSemicolon, + createProgram, + createProgramDiagnostics, + createProgramHost, + createPropertyNameNodeForIdentifierOrLiteral, + createQueue, + createRange, + createRedirectedBuilderProgram, + createResolutionCache, + createRuntimeTypeSerializer, + createScanner, + createSemanticDiagnosticsBuilderProgram, + createSet, + createSolutionBuilder, + createSolutionBuilderHost, + createSolutionBuilderWithWatch, + createSolutionBuilderWithWatchHost, + createSortedArray, + createSourceFile, + createSourceMapGenerator, + createSourceMapSource, + createSuperAccessVariableStatement, + createSymbolTable, + createSymlinkCache, + createSyntacticTypeNodeBuilder, + createSystemWatchFunctions, + createTextChange, + createTextChangeFromStartLength, + createTextChangeRange, + createTextRangeFromNode, + createTextRangeFromSpan, + createTextSpan, + createTextSpanFromBounds, + createTextSpanFromNode, + createTextSpanFromRange, + createTextSpanFromStringLiteralLikeContent, + createTextWriter, + createTokenRange, + createTypeChecker, + createTypeReferenceDirectiveResolutionCache, + createTypeReferenceResolutionLoader, + createWatchCompilerHost, + createWatchCompilerHostOfConfigFile, + createWatchCompilerHostOfFilesAndCompilerOptions, + createWatchFactory, + createWatchHost, + createWatchProgram, + createWatchStatusReporter, + createWriteFileMeasuringIO, + declarationNameToString, + decodeMappings, + decodedTextSpanIntersectsWith, + deduplicate, + defaultHoverMaximumTruncationLength, + defaultInitCompilerOptions, + defaultMaximumTruncationLength, + diagnosticCategoryName, + diagnosticToString, + diagnosticsEqualityComparer, + directoryProbablyExists, + directorySeparator, + displayPart, + displayPartsToString, + disposeEmitNodes, + documentSpansEqual, + dumpTracingLegend, + elementAt, + elideNodes, + emitDetachedComments, + emitFiles, + emitFilesAndReportErrors, + emitFilesAndReportErrorsAndGetExitStatus, + emitModuleKindIsNonNodeESM, + emitNewLineBeforeLeadingCommentOfPosition, + emitResolverSkipsTypeChecking, + emitSkippedWithNoDiagnostics, + emptyArray, + emptyFileSystemEntries, + emptyMap, + emptyOptions, + endsWith, + ensurePathIsNonModuleName, + ensureScriptKind, + ensureTrailingDirectorySeparator, + entityNameToString, + enumerateInsertsAndDeletes, + equalOwnProperties, + equateStringsCaseInsensitive, + equateStringsCaseSensitive, + equateValues, + escapeJsxAttributeString, + escapeLeadingUnderscores, + escapeNonAsciiString, + escapeSnippetText, + escapeString, + escapeTemplateSubstitution, + evaluatorResult, + every, + exclusivelyPrefixedNodeCoreModules, + executeCommandLine, + expandPreOrPostfixIncrementOrDecrementExpression, + explainFiles, + explainIfFileIsRedirectAndImpliedFormat, + exportAssignmentIsAlias, + expressionResultIsUnused, + extend, + extensionFromPath, + extensionIsTS, + extensionsNotSupportingExtensionlessResolution, + externalHelpersModuleNameText, + factory, + fileExtensionIs, + fileExtensionIsOneOf, + fileIncludeReasonToDiagnostics, + fileShouldUseJavaScriptRequire, + filter, + filterMutate, + filterSemanticDiagnostics, + find, + findAncestor, + findBestPatternMatch, + findChildOfKind, + findComputedPropertyNameCacheAssignment, + findConfigFile, + findConstructorDeclaration, + findContainingList, + findDiagnosticForNode, + findFirstNonJsxWhitespaceToken, + findIndex, + findLast, + findLastIndex, + findListItemInfo, + findModifier, + findNextToken, + findPackageJson, + findPackageJsons, + findPrecedingMatchingToken, + findPrecedingToken, + findSuperStatementIndexPath, + findTokenOnLeftOfPosition, + findUseStrictPrologue, + first, + firstDefined, + firstDefinedIterator, + firstIterator, + firstOrOnly, + firstOrUndefined, + firstOrUndefinedIterator, + fixupCompilerOptions, + flatMap, + flatMapIterator, + flatMapToMutable, + flatten, + flattenCommaList, + flattenDestructuringAssignment, + flattenDestructuringBinding, + flattenDiagnosticMessageText, + forEach, + forEachAncestor, + forEachAncestorDirectory, + forEachAncestorDirectoryStoppingAtGlobalCache, + forEachChild, + forEachChildRecursively, + forEachDynamicImportOrRequireCall, + forEachEmittedFile, + forEachEnclosingBlockScopeContainer, + forEachEntry, + forEachExternalModuleToImportFrom, + forEachImportClauseDeclaration, + forEachKey, + forEachLeadingCommentRange, + forEachNameInAccessChainWalkingLeft, + forEachNameOfDefaultExport, + forEachOptionsSyntaxByName, + forEachProjectReference, + forEachPropertyAssignment, + forEachResolvedProjectReference, + forEachReturnStatement, + forEachRight, + forEachTrailingCommentRange, + forEachTsConfigPropArray, + forEachUnique, + forEachYieldExpression, + formatColorAndReset, + formatDiagnostic, + formatDiagnostics, + formatDiagnosticsWithColorAndContext, + formatGeneratedName, + formatGeneratedNamePart, + formatLocation, + formatMessage, + formatStringFromArgs, + formatting, + generateDjb2Hash, + generateTSConfig, + getAdjustedReferenceLocation, + getAdjustedRenameLocation, + getAliasDeclarationFromName, + getAllAccessorDeclarations, + getAllDecoratorsOfClass, + getAllDecoratorsOfClassElement, + getAllJSDocTags, + getAllJSDocTagsOfKind, + getAllKeys, + getAllProjectOutputs, + getAllSuperTypeNodes, + getAllowImportingTsExtensions, + getAllowJSCompilerOption, + getAllowSyntheticDefaultImports, + getAncestor, + getAnyExtensionFromPath, + getAreDeclarationMapsEnabled, + getAssignedExpandoInitializer, + getAssignedName, + getAssignmentDeclarationKind, + getAssignmentDeclarationPropertyAccessKind, + getAssignmentTargetKind, + getAutomaticTypeDirectiveNames, + getBaseFileName, + getBinaryOperatorPrecedence, + getBuildInfo, + getBuildInfoFileVersionMap, + getBuildInfoText, + getBuildOrderFromAnyBuildOrder, + getBuilderCreationParameters, + getBuilderFileEmit, + getCanonicalDiagnostic, + getCheckFlags, + getClassExtendsHeritageElement, + getClassLikeDeclarationOfSymbol, + getCombinedLocalAndExportSymbolFlags, + getCombinedModifierFlags, + getCombinedNodeFlags, + getCombinedNodeFlagsAlwaysIncludeJSDoc, + getCommentRange, + getCommonSourceDirectory, + getCommonSourceDirectoryOfConfig, + getCompilerOptionValue, + getConditions, + getConfigFileParsingDiagnostics, + getConstantValue, + getContainerFlags, + getContainerNode, + getContainingClass, + getContainingClassExcludingClassDecorators, + getContainingClassStaticBlock, + getContainingFunction, + getContainingFunctionDeclaration, + getContainingFunctionOrClassStaticBlock, + getContainingNodeArray, + getContainingObjectLiteralElement, + getContextualTypeFromParent, + getContextualTypeFromParentOrAncestorTypeNode, + getDeclarationDiagnostics, + getDeclarationEmitExtensionForPath, + getDeclarationEmitOutputFilePath, + getDeclarationEmitOutputFilePathWorker, + getDeclarationFileExtension, + getDeclarationFromName, + getDeclarationModifierFlagsFromSymbol, + getDeclarationOfKind, + getDeclarationsOfKind, + getDeclaredExpandoInitializer, + getDecorators, + getDefaultCompilerOptions, + getDefaultFormatCodeSettings, + getDefaultLibFileName, + getDefaultLibFilePath, + getDefaultLikeExportInfo, + getDefaultLikeExportNameFromDeclaration, + getDefaultResolutionModeForFileWorker, + getDiagnosticText, + getDiagnosticsWithinSpan, + getDirectoryPath, + getDirectoryToWatchFailedLookupLocation, + getDirectoryToWatchFailedLookupLocationFromTypeRoot, + getDocumentPositionMapper, + getDocumentSpansEqualityComparer, + getESModuleInterop, + getEditsForFileRename, + getEffectiveBaseTypeNode, + getEffectiveConstraintOfTypeParameter, + getEffectiveContainerForJSDocTemplateTag, + getEffectiveImplementsTypeNodes, + getEffectiveInitializer, + getEffectiveJSDocHost, + getEffectiveModifierFlags, + getEffectiveModifierFlagsAlwaysIncludeJSDoc, + getEffectiveModifierFlagsNoCache, + getEffectiveReturnTypeNode, + getEffectiveSetAccessorTypeAnnotationNode, + getEffectiveTypeAnnotationNode, + getEffectiveTypeParameterDeclarations, + getEffectiveTypeRoots, + getElementOrPropertyAccessArgumentExpressionOrName, + getElementOrPropertyAccessName, + getElementsOfBindingOrAssignmentPattern, + getEmitDeclarations, + getEmitFlags, + getEmitHelpers, + getEmitModuleDetectionKind, + getEmitModuleFormatOfFileWorker, + getEmitModuleKind, + getEmitModuleResolutionKind, + getEmitScriptTarget, + getEmitStandardClassFields, + getEnclosingBlockScopeContainer, + getEnclosingContainer, + getEncodedSemanticClassifications, + getEncodedSyntacticClassifications, + getEndLinePosition, + getEntityNameFromTypeNode, + getEntrypointsFromPackageJsonInfo, + getErrorCountForSummary, + getErrorSpanForNode, + getErrorSummaryText, + getEscapedTextOfIdentifierOrLiteral, + getEscapedTextOfJsxAttributeName, + getEscapedTextOfJsxNamespacedName, + getExpandoInitializer, + getExportAssignmentExpression, + getExportInfoMap, + getExportNeedsImportStarHelper, + getExpressionAssociativity, + getExpressionPrecedence, + getExternalHelpersModuleName, + getExternalModuleImportEqualsDeclarationExpression, + getExternalModuleName, + getExternalModuleNameFromDeclaration, + getExternalModuleNameFromPath, + getExternalModuleNameLiteral, + getExternalModuleRequireArgument, + getFallbackOptions, + getFileEmitOutput, + getFileMatcherPatterns, + getFileNamesFromConfigSpecs, + getFileWatcherEventKind, + getFilesInErrorForSummary, + getFirstConstructorWithBody, + getFirstIdentifier, + getFirstNonSpaceCharacterPosition, + getFirstProjectOutput, + getFixableErrorSpanExpression, + getFormatCodeSettingsForWriting, + getFullWidth, + getFunctionFlags, + getHeritageClause, + getHostSignatureFromJSDoc, + getIdentifierAutoGenerate, + getIdentifierGeneratedImportReference, + getIdentifierTypeArguments, + getImmediatelyInvokedFunctionExpression, + getImpliedNodeFormatForEmitWorker, + getImpliedNodeFormatForFile, + getImpliedNodeFormatForFileWorker, + getImportNeedsImportDefaultHelper, + getImportNeedsImportStarHelper, + getIndentString, + getInferredLibraryNameResolveFrom, + getInitializedVariables, + getInitializerOfBinaryExpression, + getInitializerOfBindingOrAssignmentElement, + getInterfaceBaseTypeNodes, + getInternalEmitFlags, + getInvokedExpression, + getIsFileExcluded, + getIsolatedModules, + getJSDocAugmentsTag, + getJSDocClassTag, + getJSDocCommentRanges, + getJSDocCommentsAndTags, + getJSDocDeprecatedTag, + getJSDocDeprecatedTagNoCache, + getJSDocEnumTag, + getJSDocHost, + getJSDocImplementsTags, + getJSDocOverloadTags, + getJSDocOverrideTagNoCache, + getJSDocParameterTags, + getJSDocParameterTagsNoCache, + getJSDocPrivateTag, + getJSDocPrivateTagNoCache, + getJSDocProtectedTag, + getJSDocProtectedTagNoCache, + getJSDocPublicTag, + getJSDocPublicTagNoCache, + getJSDocReadonlyTag, + getJSDocReadonlyTagNoCache, + getJSDocReturnTag, + getJSDocReturnType, + getJSDocRoot, + getJSDocSatisfiesExpressionType, + getJSDocSatisfiesTag, + getJSDocTags, + getJSDocTemplateTag, + getJSDocThisTag, + getJSDocType, + getJSDocTypeAliasName, + getJSDocTypeAssertionType, + getJSDocTypeParameterDeclarations, + getJSDocTypeParameterTags, + getJSDocTypeParameterTagsNoCache, + getJSDocTypeTag, + getJSXImplicitImportBase, + getJSXRuntimeImport, + getJSXTransformEnabled, + getKeyForCompilerOptions, + getLanguageVariant, + getLastChild, + getLeadingCommentRanges, + getLeadingCommentRangesOfNode, + getLeftmostAccessExpression, + getLeftmostExpression, + getLibFileNameFromLibReference, + getLibNameFromLibReference, + getLibraryNameFromLibFileName, + getLineAndCharacterOfPosition, + getLineInfo, + getLineOfLocalPosition, + getLineStartPositionForPosition, + getLineStarts, + getLinesBetweenPositionAndNextNonWhitespaceCharacter, + getLinesBetweenPositionAndPrecedingNonWhitespaceCharacter, + getLinesBetweenPositions, + getLinesBetweenRangeEndAndRangeStart, + getLinesBetweenRangeEndPositions, + getLiteralText, + getLocalNameForExternalImport, + getLocalSymbolForExportDefault, + getLocaleSpecificMessage, + getLocaleTimeString, + getMappedContextSpan, + getMappedDocumentSpan, + getMappedLocation, + getMatchedFileSpec, + getMatchedIncludeSpec, + getMeaningFromDeclaration, + getMeaningFromLocation, + getMembersOfDeclaration, + getModeForFileReference, + getModeForResolutionAtIndex, + getModeForUsageLocation, + getModifiedTime, + getModifiers, + getModuleInstanceState, + getModuleNameStringLiteralAt, + getModuleSpecifierEndingPreference, + getModuleSpecifierResolverHost, + getNameForExportedSymbol, + getNameFromImportAttribute, + getNameFromIndexInfo, + getNameFromPropertyName, + getNameOfAccessExpression, + getNameOfCompilerOptionValue, + getNameOfDeclaration, + getNameOfExpando, + getNameOfJSDocTypedef, + getNameOfScriptTarget, + getNameOrArgument, + getNameTable, + getNamespaceDeclarationNode, + getNewLineCharacter, + getNewLineKind, + getNewLineOrDefaultFromHost, + getNewTargetContainer, + getNextJSDocCommentLocation, + getNodeChildren, + getNodeForGeneratedName, + getNodeId, + getNodeKind, + getNodeModifiers, + getNodeModulePathParts, + getNonAssignedNameOfDeclaration, + getNonAssignmentOperatorForCompoundAssignment, + getNonAugmentationDeclaration, + getNonDecoratorTokenPosOfNode, + getNonIncrementalBuildInfoRoots, + getNonModifierTokenPosOfNode, + getNormalizedAbsolutePath, + getNormalizedAbsolutePathWithoutRoot, + getNormalizedPathComponents, + getObjectFlags, + getOperatorAssociativity, + getOperatorPrecedence, + getOptionFromName, + getOptionsForLibraryResolution, + getOptionsNameMap, + getOptionsSyntaxByArrayElementValue, + getOptionsSyntaxByValue, + getOrCreateEmitNode, + getOrUpdate, + getOriginalNode, + getOriginalNodeId, + getOutputDeclarationFileName, + getOutputDeclarationFileNameWorker, + getOutputExtension, + getOutputFileNames, + getOutputJSFileNameWorker, + getOutputPathsFor, + getOwnEmitOutputFilePath, + getOwnKeys, + getOwnValues, + getPackageJsonTypesVersionsPaths, + getPackageNameFromTypesPackageName, + getPackageScopeForPath, + getParameterSymbolFromJSDoc, + getParentNodeInSpan, + getParseTreeNode, + getParsedCommandLineOfConfigFile, + getPathComponents, + getPathFromPathComponents, + getPathUpdater, + getPathsBasePath, + getPatternFromSpec, + getPendingEmitKindWithSeen, + getPositionOfLineAndCharacter, + getPossibleGenericSignatures, + getPossibleOriginalInputExtensionForExtension, + getPossibleOriginalInputPathWithoutChangingExt, + getPossibleTypeArgumentsInfo, + getPreEmitDiagnostics, + getPrecedingNonSpaceCharacterPosition, + getPrivateIdentifier, + getProperties, + getProperty, + getPropertyAssignmentAliasLikeExpression, + getPropertyNameForPropertyNameNode, + getPropertyNameFromType, + getPropertyNameOfBindingOrAssignmentElement, + getPropertySymbolFromBindingElement, + getPropertySymbolsFromContextualType, + getQuoteFromPreference, + getQuotePreference, + getRangesWhere, + getRefactorContextSpan, + getReferencedFileLocation, + getRegexFromPattern, + getRegularExpressionForWildcard, + getRegularExpressionsForWildcards, + getRelativePathFromDirectory, + getRelativePathFromFile, + getRelativePathToDirectoryOrUrl, + getRenameLocation, + getReplacementSpanForContextToken, + getResolutionDiagnostic, + getResolutionModeOverride, + getResolveJsonModule, + getResolvePackageJsonExports, + getResolvePackageJsonImports, + getResolvedExternalModuleName, + getResolvedModuleFromResolution, + getResolvedTypeReferenceDirectiveFromResolution, + getRestIndicatorOfBindingOrAssignmentElement, + getRestParameterElementType, + getRightMostAssignedExpression, + getRootDeclaration, + getRootDirectoryOfResolutionCache, + getRootLength, + getScriptKind, + getScriptKindFromFileName, + getScriptTargetFeatures, + getSelectedEffectiveModifierFlags, + getSelectedSyntacticModifierFlags, + getSemanticClassifications, + getSemanticJsxChildren, + getSetAccessorTypeAnnotationNode, + getSetAccessorValueParameter, + getSetExternalModuleIndicator, + getShebang, + getSingleVariableOfVariableStatement, + getSnapshotText, + getSnippetElement, + getSourceFileOfModule, + getSourceFileOfNode, + getSourceFilePathInNewDir, + getSourceFileVersionAsHashFromText, + getSourceFilesToEmit, + getSourceMapRange, + getSourceMapper, + getSourceTextOfNodeFromSourceFile, + getSpanOfTokenAtPosition, + getSpellingSuggestion, + getStartPositionOfLine, + getStartPositionOfRange, + getStartsOnNewLine, + getStaticPropertiesAndClassStaticBlock, + getStrictOptionValue, + getStringComparer, + getSubPatternFromSpec, + getSuperCallFromStatement, + getSuperContainer, + getSupportedCodeFixes, + getSupportedExtensions, + getSupportedExtensionsWithJsonIfResolveJsonModule, + getSwitchedType, + getSymbolId, + getSymbolNameForPrivateIdentifier, + getSymbolTarget, + getSyntacticClassifications, + getSyntacticModifierFlags, + getSyntacticModifierFlagsNoCache, + getSynthesizedDeepClone, + getSynthesizedDeepCloneWithReplacements, + getSynthesizedDeepClones, + getSynthesizedDeepClonesWithReplacements, + getSyntheticLeadingComments, + getSyntheticTrailingComments, + getTargetLabel, + getTargetOfBindingOrAssignmentElement, + getTemporaryModuleResolutionState, + getTextOfConstantValue, + getTextOfIdentifierOrLiteral, + getTextOfJSDocComment, + getTextOfJsxAttributeName, + getTextOfJsxNamespacedName, + getTextOfNode, + getTextOfNodeFromSourceText, + getTextOfPropertyName, + getThisContainer, + getThisParameter, + getTokenAtPosition, + getTokenPosOfNode, + getTokenSourceMapRange, + getTouchingPropertyName, + getTouchingToken, + getTrailingCommentRanges, + getTrailingSemicolonDeferringWriter, + getTransformers, + getTsBuildInfoEmitOutputFilePath, + getTsConfigObjectLiteralExpression, + getTsConfigPropArrayElementValue, + getTypeAnnotationNode, + getTypeArgumentOrTypeParameterList, + getTypeKeywordOfTypeOnlyImport, + getTypeNode, + getTypeNodeIfAccessible, + getTypeParameterFromJsDoc, + getTypeParameterOwner, + getTypesPackageName, + getUILocale, + getUniqueName, + getUniqueSymbolId, + getUseDefineForClassFields, + getWatchErrorSummaryDiagnosticMessage, + getWatchFactory, + group, + groupBy, + guessIndentation, + handleNoEmitOptions, + handleWatchOptionsConfigDirTemplateSubstitution, + hasAbstractModifier, + hasAccessorModifier, + hasAmbientModifier, + hasChangesInResolutions, + hasContextSensitiveParameters, + hasDecorators, + hasDocComment, + hasDynamicName, + hasEffectiveModifier, + hasEffectiveModifiers, + hasEffectiveReadonlyModifier, + hasExtension, + hasImplementationTSFileExtension, + hasIndexSignature, + hasInferredType, + hasInitializer, + hasInvalidEscape, + hasJSDocNodes, + hasJSDocParameterTags, + hasJSFileExtension, + hasJsonModuleEmitEnabled, + hasOnlyExpressionInitializer, + hasOverrideModifier, + hasPossibleExternalModuleReference, + hasProperty, + hasPropertyAccessExpressionWithName, + hasQuestionToken, + hasRecordedExternalHelpers, + hasResolutionModeOverride, + hasRestParameter, + hasScopeMarker, + hasStaticModifier, + hasSyntacticModifier, + hasSyntacticModifiers, + hasTSFileExtension, + hasTabstop, + hasTrailingDirectorySeparator, + hasType, + hasTypeArguments, + hasZeroOrOneAsteriskCharacter, + hostGetCanonicalFileName, + hostUsesCaseSensitiveFileNames, + idText, + identifierIsThisKeyword, + identifierToKeywordKind, + identity, + identitySourceMapConsumer, + ignoreSourceNewlines, + ignoredPaths, + importFromModuleSpecifier, + importSyntaxAffectsModuleResolution, + indexOfAnyCharCode, + indexOfNode, + indicesOf, + inferredTypesContainingFile, + injectClassNamedEvaluationHelperBlockIfMissing, + injectClassThisAssignmentIfMissing, + insertImports, + insertSorted, + insertStatementAfterCustomPrologue, + insertStatementAfterStandardPrologue, + insertStatementsAfterCustomPrologue, + insertStatementsAfterStandardPrologue, + intersperse, + intrinsicTagNameToString, + introducesArgumentsExoticObject, + inverseJsxOptionMap, + isAbstractConstructorSymbol, + isAbstractModifier, + isAccessExpression, + isAccessibilityModifier, + isAccessor, + isAccessorModifier, + isAliasableExpression, + isAmbientModule, + isAmbientPropertyDeclaration, + isAnyDirectorySeparator, + isAnyImportOrBareOrAccessedRequire, + isAnyImportOrReExport, + isAnyImportOrRequireStatement, + isAnyImportSyntax, + isAnySupportedFileExtension, + isApplicableVersionedTypesKey, + isArgumentExpressionOfElementAccess, + isArray, + isArrayBindingElement, + isArrayBindingOrAssignmentElement, + isArrayBindingOrAssignmentPattern, + isArrayBindingPattern, + isArrayLiteralExpression, + isArrayLiteralOrObjectLiteralDestructuringPattern, + isArrayTypeNode, + isArrowFunction, + isAsExpression, + isAssertClause, + isAssertEntry, + isAssertionExpression, + isAssertsKeyword, + isAssignmentDeclaration, + isAssignmentExpression, + isAssignmentOperator, + isAssignmentPattern, + isAssignmentTarget, + isAsteriskToken, + isAsyncFunction, + isAsyncModifier, + isAutoAccessorPropertyDeclaration, + isAwaitExpression, + isAwaitKeyword, + isBigIntLiteral, + isBinaryExpression, + isBinaryLogicalOperator, + isBinaryOperatorToken, + isBindableObjectDefinePropertyCall, + isBindableStaticAccessExpression, + isBindableStaticElementAccessExpression, + isBindableStaticNameExpression, + isBindingElement, + isBindingElementOfBareOrAccessedRequire, + isBindingName, + isBindingOrAssignmentElement, + isBindingOrAssignmentPattern, + isBindingPattern, + isBlock, + isBlockLike, + isBlockOrCatchScoped, + isBlockScope, + isBlockScopedContainerTopLevel, + isBooleanLiteral, + isBreakOrContinueStatement, + isBreakStatement, + isBuildCommand, + isBuildInfoFile, + isBuilderProgram, + isBundle, + isCallChain, + isCallExpression, + isCallExpressionTarget, + isCallLikeExpression, + isCallLikeOrFunctionLikeExpression, + isCallOrNewExpression, + isCallOrNewExpressionTarget, + isCallSignatureDeclaration, + isCallToHelper, + isCaseBlock, + isCaseClause, + isCaseKeyword, + isCaseOrDefaultClause, + isCatchClause, + isCatchClauseVariableDeclaration, + isCatchClauseVariableDeclarationOrBindingElement, + isCheckJsEnabledForFile, + isCircularBuildOrder, + isClassDeclaration, + isClassElement, + isClassExpression, + isClassInstanceProperty, + isClassLike, + isClassMemberModifier, + isClassNamedEvaluationHelperBlock, + isClassOrTypeElement, + isClassStaticBlockDeclaration, + isClassThisAssignmentBlock, + isColonToken, + isCommaExpression, + isCommaListExpression, + isCommaSequence, + isCommaToken, + isComment, + isCommonJsExportPropertyAssignment, + isCommonJsExportedExpression, + isCompoundAssignment, + isComputedNonLiteralName, + isComputedPropertyName, + isConciseBody, + isConditionalExpression, + isConditionalTypeNode, + isConstAssertion, + isConstTypeReference, + isConstructSignatureDeclaration, + isConstructorDeclaration, + isConstructorTypeNode, + isContextualKeyword, + isContinueStatement, + isCustomPrologue, + isDebuggerStatement, + isDeclaration, + isDeclarationBindingElement, + isDeclarationFileName, + isDeclarationName, + isDeclarationNameOfEnumOrNamespace, + isDeclarationReadonly, + isDeclarationStatement, + isDeclarationWithTypeParameterChildren, + isDeclarationWithTypeParameters, + isDecorator, + isDecoratorTarget, + isDefaultClause, + isDefaultImport, + isDefaultModifier, + isDefaultedExpandoInitializer, + isDeleteExpression, + isDeleteTarget, + isDeprecatedDeclaration, + isDestructuringAssignment, + isDiskPathRoot, + isDoStatement, + isDocumentRegistryEntry, + isDotDotDotToken, + isDottedName, + isDynamicName, + isEffectiveExternalModule, + isEffectiveStrictModeSourceFile, + isElementAccessChain, + isElementAccessExpression, + isEmittedFileOfProgram, + isEmptyArrayLiteral, + isEmptyBindingElement, + isEmptyBindingPattern, + isEmptyObjectLiteral, + isEmptyStatement, + isEmptyStringLiteral, + isEntityName, + isEntityNameExpression, + isEnumConst, + isEnumDeclaration, + isEnumMember, + isEqualityOperatorKind, + isEqualsGreaterThanToken, + isExclamationToken, + isExcludedFile, + isExclusivelyTypeOnlyImportOrExport, + isExpandoPropertyDeclaration, + isExportAssignment, + isExportDeclaration, + isExportModifier, + isExportName, + isExportNamespaceAsDefaultDeclaration, + isExportOrDefaultModifier, + isExportSpecifier, + isExportsIdentifier, + isExportsOrModuleExportsOrAlias, + isExpression, + isExpressionNode, + isExpressionOfExternalModuleImportEqualsDeclaration, + isExpressionOfOptionalChainRoot, + isExpressionStatement, + isExpressionWithTypeArguments, + isExpressionWithTypeArgumentsInClassExtendsClause, + isExternalModule, + isExternalModuleAugmentation, + isExternalModuleImportEqualsDeclaration, + isExternalModuleIndicator, + isExternalModuleNameRelative, + isExternalModuleReference, + isExternalModuleSymbol, + isExternalOrCommonJsModule, + isFileLevelReservedGeneratedIdentifier, + isFileLevelUniqueName, + isFileProbablyExternalModule, + isFirstDeclarationOfSymbolParameter, + isFixablePromiseHandler, + isForInOrOfStatement, + isForInStatement, + isForInitializer, + isForOfStatement, + isForStatement, + isFullSourceFile, + isFunctionBlock, + isFunctionBody, + isFunctionDeclaration, + isFunctionExpression, + isFunctionExpressionOrArrowFunction, + isFunctionLike, + isFunctionLikeDeclaration, + isFunctionLikeKind, + isFunctionLikeOrClassStaticBlockDeclaration, + isFunctionOrConstructorTypeNode, + isFunctionOrModuleBlock, + isFunctionSymbol, + isFunctionTypeNode, + isGeneratedIdentifier, + isGeneratedPrivateIdentifier, + isGetAccessor, + isGetAccessorDeclaration, + isGetOrSetAccessorDeclaration, + isGlobalScopeAugmentation, + isGlobalSourceFile, + isGrammarError, + isHeritageClause, + isHoistedFunction, + isHoistedVariableStatement, + isIdentifier, + isIdentifierANonContextualKeyword, + isIdentifierName, + isIdentifierOrThisTypeNode, + isIdentifierPart, + isIdentifierStart, + isIdentifierText, + isIdentifierTypePredicate, + isIdentifierTypeReference, + isIfStatement, + isIgnoredFileFromWildCardWatching, + isImplicitGlob, + isImportAttribute, + isImportAttributeName, + isImportAttributes, + isImportCall, + isImportClause, + isImportDeclaration, + isImportEqualsDeclaration, + isImportKeyword, + isImportMeta, + isImportOrExportSpecifier, + isImportOrExportSpecifierName, + isImportSpecifier, + isImportTypeAssertionContainer, + isImportTypeNode, + isImportable, + isInComment, + isInCompoundLikeAssignment, + isInExpressionContext, + isInJSDoc, + isInJSFile, + isInJSXText, + isInJsonFile, + isInNonReferenceComment, + isInReferenceComment, + isInRightSideOfInternalImportEqualsDeclaration, + isInString, + isInTemplateString, + isInTopLevelContext, + isInTypeQuery, + isIncrementalBuildInfo, + isIncrementalBundleEmitBuildInfo, + isIncrementalCompilation, + isIndexSignatureDeclaration, + isIndexedAccessTypeNode, + isInferTypeNode, + isInfinityOrNaNString, + isInitializedProperty, + isInitializedVariable, + isInsideJsxElement, + isInsideJsxElementOrAttribute, + isInsideNodeModules, + isInsideTemplateLiteral, + isInstanceOfExpression, + isInstantiatedModule, + isInterfaceDeclaration, + isInternalDeclaration, + isInternalModuleImportEqualsDeclaration, + isInternalName, + isIntersectionTypeNode, + isIntrinsicJsxName, + isIterationStatement, + isJSDoc, + isJSDocAllType, + isJSDocAugmentsTag, + isJSDocAuthorTag, + isJSDocCallbackTag, + isJSDocClassTag, + isJSDocCommentContainingNode, + isJSDocConstructSignature, + isJSDocDeprecatedTag, + isJSDocEnumTag, + isJSDocFunctionType, + isJSDocImplementsTag, + isJSDocImportTag, + isJSDocIndexSignature, + isJSDocLikeText, + isJSDocLink, + isJSDocLinkCode, + isJSDocLinkLike, + isJSDocLinkPlain, + isJSDocMemberName, + isJSDocNameReference, + isJSDocNamepathType, + isJSDocNamespaceBody, + isJSDocNode, + isJSDocNonNullableType, + isJSDocNullableType, + isJSDocOptionalParameter, + isJSDocOptionalType, + isJSDocOverloadTag, + isJSDocOverrideTag, + isJSDocParameterTag, + isJSDocPrivateTag, + isJSDocPropertyLikeTag, + isJSDocPropertyTag, + isJSDocProtectedTag, + isJSDocPublicTag, + isJSDocReadonlyTag, + isJSDocReturnTag, + isJSDocSatisfiesExpression, + isJSDocSatisfiesTag, + isJSDocSeeTag, + isJSDocSignature, + isJSDocTag, + isJSDocTemplateTag, + isJSDocThisTag, + isJSDocThrowsTag, + isJSDocTypeAlias, + isJSDocTypeAssertion, + isJSDocTypeExpression, + isJSDocTypeLiteral, + isJSDocTypeTag, + isJSDocTypedefTag, + isJSDocUnknownTag, + isJSDocUnknownType, + isJSDocVariadicType, + isJSXTagName, + isJsonEqual, + isJsonSourceFile, + isJsxAttribute, + isJsxAttributeLike, + isJsxAttributeName, + isJsxAttributes, + isJsxCallLike, + isJsxChild, + isJsxClosingElement, + isJsxClosingFragment, + isJsxElement, + isJsxExpression, + isJsxFragment, + isJsxNamespacedName, + isJsxOpeningElement, + isJsxOpeningFragment, + isJsxOpeningLikeElement, + isJsxOpeningLikeElementTagName, + isJsxSelfClosingElement, + isJsxSpreadAttribute, + isJsxTagNameExpression, + isJsxText, + isJumpStatementTarget, + isKeyword, + isKeywordOrPunctuation, + isKnownSymbol, + isLabelName, + isLabelOfLabeledStatement, + isLabeledStatement, + isLateVisibilityPaintedStatement, + isLeftHandSideExpression, + isLet, + isLineBreak, + isLiteralComputedPropertyDeclarationName, + isLiteralExpression, + isLiteralExpressionOfObject, + isLiteralImportTypeNode, + isLiteralKind, + isLiteralNameOfPropertyDeclarationOrIndexAccess, + isLiteralTypeLiteral, + isLiteralTypeNode, + isLocalName, + isLogicalOperator, + isLogicalOrCoalescingAssignmentExpression, + isLogicalOrCoalescingAssignmentOperator, + isLogicalOrCoalescingBinaryExpression, + isLogicalOrCoalescingBinaryOperator, + isMappedTypeNode, + isMemberName, + isMetaProperty, + isMethodDeclaration, + isMethodOrAccessor, + isMethodSignature, + isMinusToken, + isMissingDeclaration, + isMissingPackageJsonInfo, + isModifier, + isModifierKind, + isModifierLike, + isModuleAugmentationExternal, + isModuleBlock, + isModuleBody, + isModuleDeclaration, + isModuleExportName, + isModuleExportsAccessExpression, + isModuleIdentifier, + isModuleName, + isModuleOrEnumDeclaration, + isModuleReference, + isModuleSpecifierLike, + isModuleWithStringLiteralName, + isNameOfFunctionDeclaration, + isNameOfModuleDeclaration, + isNamedDeclaration, + isNamedEvaluation, + isNamedEvaluationSource, + isNamedExportBindings, + isNamedExports, + isNamedImportBindings, + isNamedImports, + isNamedImportsOrExports, + isNamedTupleMember, + isNamespaceBody, + isNamespaceExport, + isNamespaceExportDeclaration, + isNamespaceImport, + isNamespaceReexportDeclaration, + isNewExpression, + isNewExpressionTarget, + isNewScopeNode, + isNoSubstitutionTemplateLiteral, + isNodeArray, + isNodeArrayMultiLine, + isNodeDescendantOf, + isNodeKind, + isNodeLikeSystem, + isNodeModulesDirectory, + isNodeWithPossibleHoistedDeclaration, + isNonContextualKeyword, + isNonGlobalAmbientModule, + isNonNullAccess, + isNonNullChain, + isNonNullExpression, + isNonStaticMethodOrAccessorWithPrivateName, + isNotEmittedStatement, + isNullishCoalesce, + isNumber, + isNumericLiteral, + isNumericLiteralName, + isObjectBindingElementWithoutPropertyName, + isObjectBindingOrAssignmentElement, + isObjectBindingOrAssignmentPattern, + isObjectBindingPattern, + isObjectLiteralElement, + isObjectLiteralElementLike, + isObjectLiteralExpression, + isObjectLiteralMethod, + isObjectLiteralOrClassExpressionMethodOrAccessor, + isObjectTypeDeclaration, + isOmittedExpression, + isOptionalChain, + isOptionalChainRoot, + isOptionalDeclaration, + isOptionalJSDocPropertyLikeTag, + isOptionalTypeNode, + isOuterExpression, + isOutermostOptionalChain, + isOverrideModifier, + isPackageJsonInfo, + isPackedArrayLiteral, + isParameter, + isParameterPropertyDeclaration, + isParameterPropertyModifier, + isParenthesizedExpression, + isParenthesizedTypeNode, + isParseTreeNode, + isPartOfParameterDeclaration, + isPartOfTypeNode, + isPartOfTypeOnlyImportOrExportDeclaration, + isPartOfTypeQuery, + isPartiallyEmittedExpression, + isPatternMatch, + isPinnedComment, + isPlainJsFile, + isPlusToken, + isPossiblyTypeArgumentPosition, + isPostfixUnaryExpression, + isPrefixUnaryExpression, + isPrimitiveLiteralValue, + isPrivateIdentifier, + isPrivateIdentifierClassElementDeclaration, + isPrivateIdentifierPropertyAccessExpression, + isPrivateIdentifierSymbol, + isProgramUptoDate, + isPrologueDirective, + isPropertyAccessChain, + isPropertyAccessEntityNameExpression, + isPropertyAccessExpression, + isPropertyAccessOrQualifiedName, + isPropertyAccessOrQualifiedNameOrImportTypeNode, + isPropertyAssignment, + isPropertyDeclaration, + isPropertyName, + isPropertyNameLiteral, + isPropertySignature, + isPrototypeAccess, + isPrototypePropertyAssignment, + isPunctuation, + isPushOrUnshiftIdentifier, + isQualifiedName, + isQuestionDotToken, + isQuestionOrExclamationToken, + isQuestionOrPlusOrMinusToken, + isQuestionToken, + isReadonlyKeyword, + isReadonlyKeywordOrPlusOrMinusToken, + isRecognizedTripleSlashComment, + isReferenceFileLocation, + isReferencedFile, + isRegularExpressionLiteral, + isRequireCall, + isRequireVariableStatement, + isRestParameter, + isRestTypeNode, + isReturnStatement, + isReturnStatementWithFixablePromiseHandler, + isRightSideOfAccessExpression, + isRightSideOfInstanceofExpression, + isRightSideOfPropertyAccess, + isRightSideOfQualifiedName, + isRightSideOfQualifiedNameOrPropertyAccess, + isRightSideOfQualifiedNameOrPropertyAccessOrJSDocMemberName, + isRootedDiskPath, + isSameEntityName, + isSatisfiesExpression, + isSemicolonClassElement, + isSetAccessor, + isSetAccessorDeclaration, + isShiftOperatorOrHigher, + isShorthandAmbientModuleSymbol, + isShorthandPropertyAssignment, + isSideEffectImport, + isSignedNumericLiteral, + isSimpleCopiableExpression, + isSimpleInlineableExpression, + isSimpleParameterList, + isSingleOrDoubleQuote, + isSolutionConfig, + isSourceElement, + isSourceFile, + isSourceFileFromLibrary, + isSourceFileJS, + isSourceFileNotJson, + isSourceMapping, + isSpecialPropertyDeclaration, + isSpreadAssignment, + isSpreadElement, + isStatement, + isStatementButNotDeclaration, + isStatementOrBlock, + isStatementWithLocals, + isStatic, + isStaticModifier, + isString, + isStringANonContextualKeyword, + isStringAndEmptyAnonymousObjectIntersection, + isStringDoubleQuoted, + isStringLiteral, + isStringLiteralLike, + isStringLiteralOrJsxExpression, + isStringLiteralOrTemplate, + isStringOrNumericLiteralLike, + isStringOrRegularExpressionOrTemplateLiteral, + isStringTextContainingNode, + isSuperCall, + isSuperKeyword, + isSuperProperty, + isSupportedSourceFileName, + isSwitchStatement, + isSyntaxList, + isSyntheticExpression, + isSyntheticReference, + isTagName, + isTaggedTemplateExpression, + isTaggedTemplateTag, + isTemplateExpression, + isTemplateHead, + isTemplateLiteral, + isTemplateLiteralKind, + isTemplateLiteralToken, + isTemplateLiteralTypeNode, + isTemplateLiteralTypeSpan, + isTemplateMiddle, + isTemplateMiddleOrTemplateTail, + isTemplateSpan, + isTemplateTail, + isTextWhiteSpaceLike, + isThis, + isThisContainerOrFunctionBlock, + isThisIdentifier, + isThisInTypeQuery, + isThisInitializedDeclaration, + isThisInitializedObjectBindingExpression, + isThisProperty, + isThisTypeNode, + isThisTypeParameter, + isThisTypePredicate, + isThrowStatement, + isToken, + isTokenKind, + isTraceEnabled, + isTransientSymbol, + isTrivia, + isTryStatement, + isTupleTypeNode, + isTypeAlias, + isTypeAliasDeclaration, + isTypeAssertionExpression, + isTypeDeclaration, + isTypeElement, + isTypeKeyword, + isTypeKeywordTokenOrIdentifier, + isTypeLiteralNode, + isTypeNode, + isTypeNodeKind, + isTypeOfExpression, + isTypeOnlyExportDeclaration, + isTypeOnlyImportDeclaration, + isTypeOnlyImportOrExportDeclaration, + isTypeOperatorNode, + isTypeParameterDeclaration, + isTypePredicateNode, + isTypeQueryNode, + isTypeReferenceNode, + isTypeReferenceType, + isTypeUsableAsPropertyName, + isUMDExportSymbol, + isUnaryExpression, + isUnaryExpressionWithWrite, + isUnicodeIdentifierStart, + isUnionTypeNode, + isUrl, + isValidBigIntString, + isValidESSymbolDeclaration, + isValidTypeOnlyAliasUseSite, + isValueSignatureDeclaration, + isVarAwaitUsing, + isVarConst, + isVarConstLike, + isVarUsing, + isVariableDeclaration, + isVariableDeclarationInVariableStatement, + isVariableDeclarationInitializedToBareOrAccessedRequire, + isVariableDeclarationInitializedToRequire, + isVariableDeclarationList, + isVariableLike, + isVariableStatement, + isVoidExpression, + isWatchSet, + isWhileStatement, + isWhiteSpaceLike, + isWhiteSpaceSingleLine, + isWithStatement, + isWriteAccess, + isWriteOnlyAccess, + isYieldExpression, + jsxModeNeedsExplicitImport, + keywordPart, + last, + lastOrUndefined, + length, + libMap, + libs, + lineBreakPart, + loadModuleFromGlobalCache, + loadWithModeAwareCache, + makeIdentifierFromModuleName, + makeImport, + makeStringLiteral, + mangleScopedPackageName, + map, + mapAllOrFail, + mapDefined, + mapDefinedIterator, + mapEntries, + mapIterator, + mapOneOrMany, + mapToDisplayParts, + matchFiles, + matchPatternOrExact, + matchedText, + matchesExclude, + matchesExcludeWorker, + maxBy, + maybeBind, + maybeSetLocalizedDiagnosticMessages, + memoize, + memoizeOne, + min, + minAndMax, + missingFileModifiedTime, + modifierToFlag, + modifiersToFlags, + moduleExportNameIsDefault, + moduleExportNameTextEscaped, + moduleExportNameTextUnescaped, + moduleOptionDeclaration, + moduleResolutionIsEqualTo, + moduleResolutionNameAndModeGetter, + moduleResolutionOptionDeclarations, + moduleResolutionSupportsPackageJsonExportsAndImports, + moduleResolutionUsesNodeModules, + moduleSpecifierToValidIdentifier, + moduleSpecifiers, + moduleSupportsImportAttributes, + moduleSymbolToValidIdentifier, + moveEmitHelpers, + moveRangeEnd, + moveRangePastDecorators, + moveRangePastModifiers, + moveRangePos, + moveSyntheticComments, + mutateMap, + mutateMapSkippingNewValues, + needsParentheses, + needsScopeMarker, + newCaseClauseTracker, + newPrivateEnvironment, + noEmitNotification, + noEmitSubstitution, + noTransformers, + noTruncationMaximumTruncationLength, + nodeCanBeDecorated, + nodeCoreModules, + nodeHasName, + nodeIsDecorated, + nodeIsMissing, + nodeIsPresent, + nodeIsSynthesized, + nodeModuleNameResolver, + nodeModulesPathPart, + nodeNextJsonConfigResolver, + nodeOrChildIsDecorated, + nodeOverlapsWithStartEnd, + nodePosToString, + nodeSeenTracker, + nodeStartsNewLexicalEnvironment, + noop, + noopFileWatcher, + normalizePath, + normalizeSlashes, + normalizeSpans, + not, + notImplemented, + notImplementedResolver, + nullNodeConverters, + nullParenthesizerRules, + nullTransformationContext, + objectAllocator, + operatorPart, + optionDeclarations, + optionMapToObject, + optionsAffectingProgramStructure, + optionsForBuild, + optionsForWatch, + optionsHaveChanges, + or, + orderedRemoveItem, + orderedRemoveItemAt, + packageIdToPackageName, + packageIdToString, + parameterIsThisKeyword, + parameterNamePart, + parseBaseNodeFactory, + parseBigInt, + parseBuildCommand, + parseCommandLine, + parseCommandLineWorker, + parseConfigFileTextToJson, + parseConfigFileWithSystem, + parseConfigHostFromCompilerHostLike, + parseCustomTypeOption, + parseIsolatedEntityName, + parseIsolatedJSDocComment, + parseJSDocTypeExpressionForTests, + parseJsonConfigFileContent, + parseJsonSourceFileConfigFileContent, + parseJsonText, + parseListTypeOption, + parseNodeFactory, + parseNodeModuleFromPath, + parsePackageName, + parsePseudoBigInt, + parseValidBigInt, + pasteEdits, + patchWriteFileEnsuringDirectory, + pathContainsNodeModules, + pathIsAbsolute, + pathIsBareSpecifier, + pathIsRelative, + patternText, + performIncrementalCompilation, + performance, + positionBelongsToNode, + positionIsASICandidate, + positionIsSynthesized, + positionsAreOnSameLine, + preProcessFile, + probablyUsesSemicolons, + processCommentPragmas, + processPragmasIntoFields, + processTaggedTemplateExpression, + programContainsEsModules, + programContainsModules, + projectReferenceIsEqualTo, + propertyNamePart, + pseudoBigIntToString, + punctuationPart, + pushIfUnique, + quote, + quotePreferenceFromString, + rangeContainsPosition, + rangeContainsPositionExclusive, + rangeContainsRange, + rangeContainsRangeExclusive, + rangeContainsStartEnd, + rangeEndIsOnSameLineAsRangeStart, + rangeEndPositionsAreOnSameLine, + rangeEquals, + rangeIsOnSingleLine, + rangeOfNode, + rangeOfTypeParameters, + rangeOverlapsWithStartEnd, + rangeStartIsOnSameLineAsRangeEnd, + rangeStartPositionsAreOnSameLine, + readBuilderProgram, + readConfigFile, + readJson, + readJsonConfigFile, + readJsonOrUndefined, + reduceEachLeadingCommentRange, + reduceEachTrailingCommentRange, + reduceLeft, + reduceLeftIterator, + reducePathComponents, + refactor, + regExpEscape, + regularExpressionFlagToCharacterCode, + relativeComplement, + removeAllComments, + removeEmitHelper, + removeExtension, + removeFileExtension, + removeIgnoredPath, + removeMinAndVersionNumbers, + removePrefix, + removeSuffix, + removeTrailingDirectorySeparator, + repeatString, + replaceElement, + replaceFirstStar, + resolutionExtensionIsTSOrJson, + resolveConfigFileProjectName, + resolveJSModule, + resolveLibrary, + resolveModuleName, + resolveModuleNameFromCache, + resolvePackageNameToPackageJson, + resolvePath, + resolveProjectReferencePath, + resolveTripleslashReference, + resolveTypeReferenceDirective, + resolvingEmptyArray, + returnFalse, + returnNoopFileWatcher, + returnTrue, + returnUndefined, + returnsPromise, + rewriteModuleSpecifier, + sameFlatMap, + sameMap, + sameMapping, + scanTokenAtPosition, + scanner, + semanticDiagnosticsOptionDeclarations, + serializeCompilerOptions, + server, + servicesVersion, + setCommentRange, + setConfigFileInOptions, + setConstantValue, + setEmitFlags, + setGetSourceFileAsHashVersioned, + setIdentifierAutoGenerate, + setIdentifierGeneratedImportReference, + setIdentifierTypeArguments, + setInternalEmitFlags, + setLocalizedDiagnosticMessages, + setNodeChildren, + setNodeFlags, + setObjectAllocator, + setOriginalNode, + setParent, + setParentRecursive, + setPrivateIdentifier, + setSnippetElement, + setSourceMapRange, + setStackTraceLimit, + setStartsOnNewLine, + setSyntheticLeadingComments, + setSyntheticTrailingComments, + setSys, + setSysLog, + setTextRange, + setTextRangeEnd, + setTextRangePos, + setTextRangePosEnd, + setTextRangePosWidth, + setTokenSourceMapRange, + setTypeNode, + setUILocale, + setValueDeclaration, + shouldAllowImportingTsExtension, + shouldPreserveConstEnums, + shouldRewriteModuleSpecifier, + shouldUseUriStyleNodeCoreModules, + showModuleSpecifier, + signatureHasRestParameter, + signatureToDisplayParts, + single, + singleElementArray, + singleIterator, + singleOrMany, + singleOrUndefined, + skipAlias, + skipConstraint, + skipOuterExpressions, + skipParentheses, + skipPartiallyEmittedExpressions, + skipTrivia, + skipTypeChecking, + skipTypeCheckingIgnoringNoCheck, + skipTypeParentheses, + skipWhile, + sliceAfter, + some, + sortAndDeduplicate, + sortAndDeduplicateDiagnostics, + sourceFileAffectingCompilerOptions, + sourceFileMayBeEmitted, + sourceMapCommentRegExp, + sourceMapCommentRegExpDontCareLineStart, + spacePart, + spanMap, + startEndContainsRange, + startEndOverlapsWithStartEnd, + startOnNewLine, + startTracing, + startsWith, + startsWithDirectory, + startsWithUnderscore, + startsWithUseStrict, + stringContainsAt, + stringToToken, + stripQuotes, + supportedDeclarationExtensions, + supportedJSExtensionsFlat, + supportedLocaleDirectories, + supportedTSExtensionsFlat, + supportedTSImplementationExtensions, + suppressLeadingAndTrailingTrivia, + suppressLeadingTrivia, + suppressTrailingTrivia, + symbolEscapedNameNoDefault, + symbolName, + symbolNameNoDefault, + symbolToDisplayParts, + sys, + sysLog, + tagNamesAreEquivalent, + takeWhile, + targetOptionDeclaration, + targetToLibMap, + testFormatSettings, + textChangeRangeIsUnchanged, + textChangeRangeNewSpan, + textChanges, + textOrKeywordPart, + textPart, + textRangeContainsPositionInclusive, + textRangeContainsTextSpan, + textRangeIntersectsWithTextSpan, + textSpanContainsPosition, + textSpanContainsTextRange, + textSpanContainsTextSpan, + textSpanEnd, + textSpanIntersection, + textSpanIntersectsWith, + textSpanIntersectsWithPosition, + textSpanIntersectsWithTextSpan, + textSpanIsEmpty, + textSpanOverlap, + textSpanOverlapsWith, + textSpansEqual, + textToKeywordObj, + timestamp, + toArray, + toBuilderFileEmit, + toBuilderStateFileInfoForMultiEmit, + toEditorSettings, + toFileNameLowerCase, + toPath, + toProgramEmitPending, + toSorted, + tokenIsIdentifierOrKeyword, + tokenIsIdentifierOrKeywordOrGreaterThan, + tokenToString, + trace, + tracing, + tracingEnabled, + transferSourceFileChildren, + transform, + transformClassFields, + transformDeclarations, + transformECMAScriptModule, + transformES2015, + transformES2016, + transformES2017, + transformES2018, + transformES2019, + transformES2020, + transformES2021, + transformESDecorators, + transformESNext, + transformGenerators, + transformImpliedNodeFormatDependentModule, + transformJsx, + transformLegacyDecorators, + transformModule, + transformNamedEvaluation, + transformNodes, + transformSystemModule, + transformTypeScript, + transpile, + transpileDeclaration, + transpileModule, + transpileOptionValueCompilerOptions, + tryAddToSet, + tryAndIgnoreErrors, + tryCast, + tryDirectoryExists, + tryExtractTSExtension, + tryFileExists, + tryGetClassExtendingExpressionWithTypeArguments, + tryGetClassImplementingOrExtendingExpressionWithTypeArguments, + tryGetDirectories, + tryGetExtensionFromPath, + tryGetImportFromModuleSpecifier, + tryGetJSDocSatisfiesTypeNode, + tryGetModuleNameFromFile, + tryGetModuleSpecifierFromDeclaration, + tryGetNativePerformanceHooks, + tryGetPropertyAccessOrIdentifierToString, + tryGetPropertyNameOfBindingOrAssignmentElement, + tryGetSourceMappingURL, + tryGetTextOfPropertyName, + tryParseJson, + tryParsePattern, + tryParsePatterns, + tryParseRawSourceMap, + tryReadDirectory, + tryReadFile, + tryRemoveDirectoryPrefix, + tryRemoveExtension, + tryRemovePrefix, + tryRemoveSuffix, + tscBuildOption, + typeAcquisitionDeclarations, + typeAliasNamePart, + typeDirectiveIsEqualTo, + typeKeywords, + typeParameterNamePart, + typeToDisplayParts, + unchangedPollThresholds, + unchangedTextChangeRange, + unescapeLeadingUnderscores, + unmangleScopedPackageName, + unorderedRemoveItem, + unprefixedNodeCoreModules, + unreachableCodeIsError, + unsetNodeChildren, + unusedLabelIsError, + unwrapInnermostStatementOfLabel, + unwrapParenthesizedExpression, + updateErrorForNoInputFiles, + updateLanguageServiceSourceFile, + updateMissingFilePathsWatch, + updateResolutionField, + updateSharedExtendedConfigFileWatcher, + updateSourceFile, + updateWatchingWildcardDirectories, + usingSingleLineStringWriter, + utf16EncodeAsString, + validateLocaleAndSetLanguage, + version, + versionMajorMinor, + visitArray, + visitCommaListElements, + visitEachChild, + visitFunctionBody, + visitIterationBody, + visitLexicalEnvironment, + visitNode, + visitNodes, + visitParameterList, + walkUpBindingElementsAndPatterns, + walkUpOuterExpressions, + walkUpParenthesizedExpressions, + walkUpParenthesizedTypes, + walkUpParenthesizedTypesAndGetParentAndChild, + whitespaceOrMapCommentRegExp, + writeCommentRange, + writeFile, + writeFileEnsuringDirectories, + zipWith +}); +})({ get exports() { return ts; }, set exports(v) { ts = v; if (typeof module !== "undefined" && module.exports) { module.exports = v; } } }) +//# sourceMappingURL=typescript.js.map diff --git a/.pnpm-store/v11/files/02/105dcdab962e841f6f2cbe51140081d2693af92a0af0b60500a2368b58c6bef9df4050c462ed43313a3e92a58549dbf7f790b9f2c3b905bb574ea4678f8ccf b/.pnpm-store/v11/files/02/105dcdab962e841f6f2cbe51140081d2693af92a0af0b60500a2368b58c6bef9df4050c462ed43313a3e92a58549dbf7f790b9f2c3b905bb574ea4678f8ccf new file mode 100644 index 00000000..414ab66b --- /dev/null +++ b/.pnpm-store/v11/files/02/105dcdab962e841f6f2cbe51140081d2693af92a0af0b60500a2368b58c6bef9df4050c462ed43313a3e92a58549dbf7f790b9f2c3b905bb574ea4678f8ccf @@ -0,0 +1,37 @@ +var arraySome = require('./_arraySome'), + createOver = require('./_createOver'); + +/** + * Creates a function that checks if **any** of the `predicates` return + * truthy when invoked with the arguments it receives. + * + * Following shorthands are possible for providing predicates. + * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. + * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {...(Function|Function[])} [predicates=[_.identity]] + * The predicates to check. + * @returns {Function} Returns the new function. + * @example + * + * var func = _.overSome([Boolean, isFinite]); + * + * func('1'); + * // => true + * + * func(null); + * // => true + * + * func(NaN); + * // => false + * + * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }]) + * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]]) + */ +var overSome = createOver(arraySome); + +module.exports = overSome; diff --git a/.pnpm-store/v11/files/02/182b468e697c1a1795a32c5310e92116a9bba72c38c6b085c45281e2bc7f8f6f2d23af68ff125b845f59ccc86bf57624295e195330c83aa51f03e1139f08bc b/.pnpm-store/v11/files/02/182b468e697c1a1795a32c5310e92116a9bba72c38c6b085c45281e2bc7f8f6f2d23af68ff125b845f59ccc86bf57624295e195330c83aa51f03e1139f08bc new file mode 100644 index 00000000..3597294a --- /dev/null +++ b/.pnpm-store/v11/files/02/182b468e697c1a1795a32c5310e92116a9bba72c38c6b085c45281e2bc7f8f6f2d23af68ff125b845f59ccc86bf57624295e195330c83aa51f03e1139f08bc @@ -0,0 +1,77 @@ +var baseKeys = require('./_baseKeys'), + getTag = require('./_getTag'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isArrayLike = require('./isArrayLike'), + isBuffer = require('./isBuffer'), + isPrototype = require('./_isPrototype'), + isTypedArray = require('./isTypedArray'); + +/** `Object#toString` result references. */ +var mapTag = '[object Map]', + setTag = '[object Set]'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ +function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; +} + +module.exports = isEmpty; diff --git a/.pnpm-store/v11/files/02/31305736799504af35342fd3aa0326cb46dfa2fd5ebde4794a01edc4ddcc0afd190d4dee8c52415eb065fc900fb862bcc93e2a0e878a785ce6cc8bf61a2d00 b/.pnpm-store/v11/files/02/31305736799504af35342fd3aa0326cb46dfa2fd5ebde4794a01edc4ddcc0afd190d4dee8c52415eb065fc900fb862bcc93e2a0e878a785ce6cc8bf61a2d00 new file mode 100644 index 00000000..0bf5cead --- /dev/null +++ b/.pnpm-store/v11/files/02/31305736799504af35342fd3aa0326cb46dfa2fd5ebde4794a01edc4ddcc0afd190d4dee8c52415eb065fc900fb862bcc93e2a0e878a785ce6cc8bf61a2d00 @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'), + isArrayLike = require('./isArrayLike'); + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +module.exports = baseMap; diff --git a/.pnpm-store/v11/files/02/392dbfa977196ca524c120421ddc8f65b4ede248f18480d37a125c0aea9ff3b09c000c85cb70d4253045170f8d587f47fe40933a4a50710b71833a6e0e3d5d b/.pnpm-store/v11/files/02/392dbfa977196ca524c120421ddc8f65b4ede248f18480d37a125c0aea9ff3b09c000c85cb70d4253045170f8d587f47fe40933a4a50710b71833a6e0e3d5d new file mode 100644 index 00000000..cadb59c9 --- /dev/null +++ b/.pnpm-store/v11/files/02/392dbfa977196ca524c120421ddc8f65b4ede248f18480d37a125c0aea9ff3b09c000c85cb70d4253045170f8d587f47fe40933a4a50710b71833a6e0e3d5d @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('clone', require('../clone'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/02/3ca25ec90e68184c2fde552d8a7bd52d474560b35b13f5b59ef14f851e32220408fec3fc007b705337343b21074f82c9af8f8b902fa84834aa5f2467bd35a0 b/.pnpm-store/v11/files/02/3ca25ec90e68184c2fde552d8a7bd52d474560b35b13f5b59ef14f851e32220408fec3fc007b705337343b21074f82c9af8f8b902fa84834aa5f2467bd35a0 new file mode 100644 index 00000000..1cf55f1d --- /dev/null +++ b/.pnpm-store/v11/files/02/3ca25ec90e68184c2fde552d8a7bd52d474560b35b13f5b59ef14f851e32220408fec3fc007b705337343b21074f82c9af8f8b902fa84834aa5f2467bd35a0 @@ -0,0 +1,6026 @@ +/**! + + @license + handlebars v4.7.9 + +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["Handlebars"] = factory(); + else + root["Handlebars"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _handlebarsRuntime = __webpack_require__(2); + + var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime); + + // Compiler imports + + var _handlebarsCompilerAst = __webpack_require__(83); + + var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst); + + var _handlebarsCompilerBase = __webpack_require__(84); + + var _handlebarsCompilerCompiler = __webpack_require__(89); + + var _handlebarsCompilerJavascriptCompiler = __webpack_require__(90); + + var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler); + + var _handlebarsCompilerVisitor = __webpack_require__(87); + + var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor); + + var _handlebarsNoConflict = __webpack_require__(82); + + var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); + + var _create = _handlebarsRuntime2['default'].create; + function create() { + var hb = _create(); + + hb.compile = function (input, options) { + return _handlebarsCompilerCompiler.compile(input, options, hb); + }; + hb.precompile = function (input, options) { + return _handlebarsCompilerCompiler.precompile(input, options, hb); + }; + + hb.AST = _handlebarsCompilerAst2['default']; + hb.Compiler = _handlebarsCompilerCompiler.Compiler; + hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default']; + hb.Parser = _handlebarsCompilerBase.parser; + hb.parse = _handlebarsCompilerBase.parse; + hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing; + + return hb; + } + + var inst = create(); + inst.create = create; + + _handlebarsNoConflict2['default'](inst); + + inst.Visitor = _handlebarsCompilerVisitor2['default']; + + inst['default'] = inst; + + exports['default'] = inst; + module.exports = exports['default']; + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + + "use strict"; + + exports["default"] = function (obj) { + return obj && obj.__esModule ? obj : { + "default": obj + }; + }; + + exports.__esModule = true; + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireWildcard = __webpack_require__(3)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _handlebarsBase = __webpack_require__(4); + + var base = _interopRequireWildcard(_handlebarsBase); + + // Each of these augment the Handlebars object. No need to setup here. + // (This is done to easily share code between commonjs and browse envs) + + var _handlebarsSafeString = __webpack_require__(76); + + var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString); + + var _handlebarsException = __webpack_require__(6); + + var _handlebarsException2 = _interopRequireDefault(_handlebarsException); + + var _handlebarsUtils = __webpack_require__(5); + + var Utils = _interopRequireWildcard(_handlebarsUtils); + + var _handlebarsRuntime = __webpack_require__(77); + + var runtime = _interopRequireWildcard(_handlebarsRuntime); + + var _handlebarsNoConflict = __webpack_require__(82); + + var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); + + // For compatibility and usage outside of module systems, make the Handlebars object a namespace + function create() { + var hb = new base.HandlebarsEnvironment(); + + Utils.extend(hb, base); + hb.SafeString = _handlebarsSafeString2['default']; + hb.Exception = _handlebarsException2['default']; + hb.Utils = Utils; + hb.escapeExpression = Utils.escapeExpression; + + hb.VM = runtime; + hb.template = function (spec) { + return runtime.template(spec, hb); + }; + + return hb; + } + + var inst = create(); + inst.create = create; + + _handlebarsNoConflict2['default'](inst); + + inst['default'] = inst; + + exports['default'] = inst; + module.exports = exports['default']; + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + "use strict"; + + exports["default"] = function (obj) { + if (obj && obj.__esModule) { + return obj; + } else { + var newObj = {}; + + if (obj != null) { + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + } + } + + newObj["default"] = obj; + return newObj; + } + }; + + exports.__esModule = true; + +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.HandlebarsEnvironment = HandlebarsEnvironment; + + var _utils = __webpack_require__(5); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + var _helpers = __webpack_require__(10); + + var _decorators = __webpack_require__(70); + + var _logger = __webpack_require__(72); + + var _logger2 = _interopRequireDefault(_logger); + + var _internalProtoAccess = __webpack_require__(73); + + var VERSION = '4.7.9'; + exports.VERSION = VERSION; + var COMPILER_REVISION = 8; + exports.COMPILER_REVISION = COMPILER_REVISION; + var LAST_COMPATIBLE_COMPILER_REVISION = 7; + + exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION; + var REVISION_CHANGES = { + 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it + 2: '== 1.0.0-rc.3', + 3: '== 1.0.0-rc.4', + 4: '== 1.x.x', + 5: '== 2.0.0-alpha.x', + 6: '>= 2.0.0-beta.1', + 7: '>= 4.0.0 <4.3.0', + 8: '>= 4.3.0' + }; + + exports.REVISION_CHANGES = REVISION_CHANGES; + var objectType = '[object Object]'; + + function HandlebarsEnvironment(helpers, partials, decorators) { + this.helpers = helpers || {}; + this.partials = partials || {}; + this.decorators = decorators || {}; + + _helpers.registerDefaultHelpers(this); + _decorators.registerDefaultDecorators(this); + } + + HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: _logger2['default'], + log: _logger2['default'].log, + + registerHelper: function registerHelper(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple helpers'); + } + _utils.extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function unregisterHelper(name) { + delete this.helpers[name]; + }, + + registerPartial: function registerPartial(name, partial) { + if (_utils.toString.call(name) === objectType) { + _utils.extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function unregisterPartial(name) { + delete this.partials[name]; + }, + + registerDecorator: function registerDecorator(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple decorators'); + } + _utils.extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function unregisterDecorator(name) { + delete this.decorators[name]; + }, + /** + * Reset the memory of illegal property accesses that have already been logged. + * @deprecated should only be used in handlebars test-cases + */ + resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() { + _internalProtoAccess.resetLoggedProperties(); + } + }; + + var log = _logger2['default'].log; + + exports.log = log; + exports.createFrame = _utils.createFrame; + exports.logger = _logger2['default']; + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.createFrame = createFrame; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' + }; + + var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /* eslint-disable func-style */ + var isFunction = function isFunction(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + exports.isFunction = isFunction; + + /* eslint-enable func-style */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$defineProperty = __webpack_require__(7)['default']; + + exports.__esModule = true; + var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + endLineNumber = undefined, + column = undefined, + endColumn = undefined; + + if (loc) { + line = loc.start.line; + endLineNumber = loc.end.line; + column = loc.start.column; + endColumn = loc.end.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + this.endLineNumber = endLineNumber; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (_Object$defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + Object.defineProperty(this, 'endColumn', { + value: endColumn, + enumerable: true + }); + } else { + this.column = column; + this.endColumn = endColumn; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } + } + + Exception.prototype = new Error(); + + exports['default'] = Exception; + module.exports = exports['default']; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(8), __esModule: true }; + +/***/ }), +/* 8 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(9); + module.exports = function defineProperty(it, key, desc){ + return $.setDesc(it, key, desc); + }; + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + var $Object = Object; + module.exports = { + create: $Object.create, + getProto: $Object.getPrototypeOf, + isEnum: {}.propertyIsEnumerable, + getDesc: $Object.getOwnPropertyDescriptor, + setDesc: $Object.defineProperty, + setDescs: $Object.defineProperties, + getKeys: $Object.keys, + getNames: $Object.getOwnPropertyNames, + getSymbols: $Object.getOwnPropertySymbols, + each: [].forEach + }; + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.registerDefaultHelpers = registerDefaultHelpers; + exports.moveHelperToHooks = moveHelperToHooks; + + var _helpersBlockHelperMissing = __webpack_require__(11); + + var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); + + var _helpersEach = __webpack_require__(12); + + var _helpersEach2 = _interopRequireDefault(_helpersEach); + + var _helpersHelperMissing = __webpack_require__(65); + + var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); + + var _helpersIf = __webpack_require__(66); + + var _helpersIf2 = _interopRequireDefault(_helpersIf); + + var _helpersLog = __webpack_require__(67); + + var _helpersLog2 = _interopRequireDefault(_helpersLog); + + var _helpersLookup = __webpack_require__(68); + + var _helpersLookup2 = _interopRequireDefault(_helpersLookup); + + var _helpersWith = __webpack_require__(69); + + var _helpersWith2 = _interopRequireDefault(_helpersWith); + + function registerDefaultHelpers(instance) { + _helpersBlockHelperMissing2['default'](instance); + _helpersEach2['default'](instance); + _helpersHelperMissing2['default'](instance); + _helpersIf2['default'](instance); + _helpersLog2['default'](instance); + _helpersLookup2['default'](instance); + _helpersWith2['default'](instance); + } + + function moveHelperToHooks(instance, helperName, keepHelper) { + if (instance.helpers[helperName]) { + instance.hooks[helperName] = instance.helpers[helperName]; + if (!keepHelper) { + // Using delete is slow + instance.helpers[helperName] = undefined; + } + } + } + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + exports['default'] = function (instance) { + instance.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse, + fn = options.fn; + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (_utils.isArray(context)) { + if (context.length > 0) { + if (options.ids) { + options.ids = [options.name]; + } + + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + if (options.data && options.ids) { + var data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); + options = { data: data }; + } + + return fn(context, options); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Symbol = __webpack_require__(13)['default']; + + var _Symbol$iterator = __webpack_require__(43)['default']; + + var _getIterator = __webpack_require__(55)['default']; + + var _Object$keys = __webpack_require__(60)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('each', function (context, options) { + if (!options) { + throw new _exception2['default']('Must pass iterator to #each'); + } + + var fn = options.fn, + inverse = options.inverse, + i = 0, + ret = '', + data = undefined, + contextPath = undefined; + + if (options.data && options.ids) { + contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; + } + + if (_utils.isFunction(context)) { + context = context.call(this); + } + + if (options.data) { + data = _utils.createFrame(options.data); + } + + function execIteration(field, index, last) { + if (data) { + data.key = field; + data.index = index; + data.first = index === 0; + data.last = !!last; + + if (contextPath) { + data.contextPath = contextPath + field; + } + } + + ret = ret + fn(context[field], { + data: data, + blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) + }); + } + + if (context && typeof context === 'object') { + if (_utils.isArray(context)) { + for (var j = context.length; i < j; i++) { + if (i in context) { + execIteration(i, i, i === context.length - 1); + } + } + } else if (typeof _Symbol === 'function' && context[_Symbol$iterator]) { + var newContext = []; + var iterator = _getIterator(context); + for (var it = iterator.next(); !it.done; it = iterator.next()) { + newContext.push(it.value); + } + context = newContext; + for (var j = context.length; i < j; i++) { + execIteration(i, i, i === context.length - 1); + } + } else { + (function () { + var priorKey = undefined; + + _Object$keys(context).forEach(function (key) { + // We're running the iterations one step out of sync so we can detect + // the last iteration without have to scan the object twice and create + // an itermediate keys array. + if (priorKey !== undefined) { + execIteration(priorKey, i - 1); + } + priorKey = key; + i++; + }); + if (priorKey !== undefined) { + execIteration(priorKey, i - 1, true); + } + })(); + } + } + + if (i === 0) { + ret = inverse(this); + } + + return ret; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(14), __esModule: true }; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(15); + __webpack_require__(42); + module.exports = __webpack_require__(21).Symbol; + +/***/ }), +/* 15 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + // ECMAScript 6 symbols shim + var $ = __webpack_require__(9) + , global = __webpack_require__(16) + , has = __webpack_require__(17) + , DESCRIPTORS = __webpack_require__(18) + , $export = __webpack_require__(20) + , redefine = __webpack_require__(24) + , $fails = __webpack_require__(19) + , shared = __webpack_require__(27) + , setToStringTag = __webpack_require__(28) + , uid = __webpack_require__(30) + , wks = __webpack_require__(29) + , keyOf = __webpack_require__(31) + , $names = __webpack_require__(36) + , enumKeys = __webpack_require__(37) + , isArray = __webpack_require__(38) + , anObject = __webpack_require__(39) + , toIObject = __webpack_require__(32) + , createDesc = __webpack_require__(26) + , getDesc = $.getDesc + , setDesc = $.setDesc + , _create = $.create + , getNames = $names.get + , $Symbol = global.Symbol + , $JSON = global.JSON + , _stringify = $JSON && $JSON.stringify + , setter = false + , HIDDEN = wks('_hidden') + , isEnum = $.isEnum + , SymbolRegistry = shared('symbol-registry') + , AllSymbols = shared('symbols') + , useNative = typeof $Symbol == 'function' + , ObjectProto = Object.prototype; + + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + var setSymbolDesc = DESCRIPTORS && $fails(function(){ + return _create(setDesc({}, 'a', { + get: function(){ return setDesc(this, 'a', {value: 7}).a; } + })).a != 7; + }) ? function(it, key, D){ + var protoDesc = getDesc(ObjectProto, key); + if(protoDesc)delete ObjectProto[key]; + setDesc(it, key, D); + if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc); + } : setDesc; + + var wrap = function(tag){ + var sym = AllSymbols[tag] = _create($Symbol.prototype); + sym._k = tag; + DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, { + configurable: true, + set: function(value){ + if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false; + setSymbolDesc(this, tag, createDesc(1, value)); + } + }); + return sym; + }; + + var isSymbol = function(it){ + return typeof it == 'symbol'; + }; + + var $defineProperty = function defineProperty(it, key, D){ + if(D && has(AllSymbols, key)){ + if(!D.enumerable){ + if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {})); + it[HIDDEN][key] = true; + } else { + if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false; + D = _create(D, {enumerable: createDesc(0, false)}); + } return setSymbolDesc(it, key, D); + } return setDesc(it, key, D); + }; + var $defineProperties = function defineProperties(it, P){ + anObject(it); + var keys = enumKeys(P = toIObject(P)) + , i = 0 + , l = keys.length + , key; + while(l > i)$defineProperty(it, key = keys[i++], P[key]); + return it; + }; + var $create = function create(it, P){ + return P === undefined ? _create(it) : $defineProperties(_create(it), P); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(key){ + var E = isEnum.call(this, key); + return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] + ? E : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){ + var D = getDesc(it = toIObject(it), key); + if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true; + return D; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(it){ + var names = getNames(toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key); + return result; + }; + var $getOwnPropertySymbols = function getOwnPropertySymbols(it){ + var names = getNames(toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]); + return result; + }; + var $stringify = function stringify(it){ + if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined + var args = [it] + , i = 1 + , $$ = arguments + , replacer, $replacer; + while($$.length > i)args.push($$[i++]); + replacer = args[1]; + if(typeof replacer == 'function')$replacer = replacer; + if($replacer || !isArray(replacer))replacer = function(key, value){ + if($replacer)value = $replacer.call(this, key, value); + if(!isSymbol(value))return value; + }; + args[1] = replacer; + return _stringify.apply($JSON, args); + }; + var buggyJSON = $fails(function(){ + var S = $Symbol(); + // MS Edge converts symbol values to JSON as {} + // WebKit converts symbol values to JSON as null + // V8 throws on boxed symbols + return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}'; + }); + + // 19.4.1.1 Symbol([description]) + if(!useNative){ + $Symbol = function Symbol(){ + if(isSymbol(this))throw TypeError('Symbol is not a constructor'); + return wrap(uid(arguments.length > 0 ? arguments[0] : undefined)); + }; + redefine($Symbol.prototype, 'toString', function toString(){ + return this._k; + }); + + isSymbol = function(it){ + return it instanceof $Symbol; + }; + + $.create = $create; + $.isEnum = $propertyIsEnumerable; + $.getDesc = $getOwnPropertyDescriptor; + $.setDesc = $defineProperty; + $.setDescs = $defineProperties; + $.getNames = $names.get = $getOwnPropertyNames; + $.getSymbols = $getOwnPropertySymbols; + + if(DESCRIPTORS && !__webpack_require__(41)){ + redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); + } + } + + var symbolStatics = { + // 19.4.2.1 Symbol.for(key) + 'for': function(key){ + return has(SymbolRegistry, key += '') + ? SymbolRegistry[key] + : SymbolRegistry[key] = $Symbol(key); + }, + // 19.4.2.5 Symbol.keyFor(sym) + keyFor: function keyFor(key){ + return keyOf(SymbolRegistry, key); + }, + useSetter: function(){ setter = true; }, + useSimple: function(){ setter = false; } + }; + // 19.4.2.2 Symbol.hasInstance + // 19.4.2.3 Symbol.isConcatSpreadable + // 19.4.2.4 Symbol.iterator + // 19.4.2.6 Symbol.match + // 19.4.2.8 Symbol.replace + // 19.4.2.9 Symbol.search + // 19.4.2.10 Symbol.species + // 19.4.2.11 Symbol.split + // 19.4.2.12 Symbol.toPrimitive + // 19.4.2.13 Symbol.toStringTag + // 19.4.2.14 Symbol.unscopables + $.each.call(( + 'hasInstance,isConcatSpreadable,iterator,match,replace,search,' + + 'species,split,toPrimitive,toStringTag,unscopables' + ).split(','), function(it){ + var sym = wks(it); + symbolStatics[it] = useNative ? sym : wrap(sym); + }); + + setter = true; + + $export($export.G + $export.W, {Symbol: $Symbol}); + + $export($export.S, 'Symbol', symbolStatics); + + $export($export.S + $export.F * !useNative, 'Object', { + // 19.1.2.2 Object.create(O [, Properties]) + create: $create, + // 19.1.2.4 Object.defineProperty(O, P, Attributes) + defineProperty: $defineProperty, + // 19.1.2.3 Object.defineProperties(O, Properties) + defineProperties: $defineProperties, + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + getOwnPropertyDescriptor: $getOwnPropertyDescriptor, + // 19.1.2.7 Object.getOwnPropertyNames(O) + getOwnPropertyNames: $getOwnPropertyNames, + // 19.1.2.8 Object.getOwnPropertySymbols(O) + getOwnPropertySymbols: $getOwnPropertySymbols + }); + + // 24.3.2 JSON.stringify(value [, replacer [, space]]) + $JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify}); + + // 19.4.3.5 Symbol.prototype[@@toStringTag] + setToStringTag($Symbol, 'Symbol'); + // 20.2.1.9 Math[@@toStringTag] + setToStringTag(Math, 'Math', true); + // 24.3.3 JSON[@@toStringTag] + setToStringTag(global.JSON, 'JSON', true); + +/***/ }), +/* 16 */ +/***/ (function(module, exports) { + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); + if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }), +/* 17 */ +/***/ (function(module, exports) { + + var hasOwnProperty = {}.hasOwnProperty; + module.exports = function(it, key){ + return hasOwnProperty.call(it, key); + }; + +/***/ }), +/* 18 */ +/***/ (function(module, exports, __webpack_require__) { + + // Thank's IE8 for his funny defineProperty + module.exports = !__webpack_require__(19)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; + }); + +/***/ }), +/* 19 */ +/***/ (function(module, exports) { + + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__(16) + , core = __webpack_require__(21) + , ctx = __webpack_require__(22) + , PROTOTYPE = 'prototype'; + + var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && key in target; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(param){ + return this instanceof C ? new C(param) : C(param); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; + } + }; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + module.exports = $export; + +/***/ }), +/* 21 */ +/***/ (function(module, exports) { + + var core = module.exports = {version: '1.2.6'}; + if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }), +/* 22 */ +/***/ (function(module, exports, __webpack_require__) { + + // optional / simple context binding + var aFunction = __webpack_require__(23); + module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; + }; + +/***/ }), +/* 23 */ +/***/ (function(module, exports) { + + module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; + }; + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(25); + +/***/ }), +/* 25 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(9) + , createDesc = __webpack_require__(26); + module.exports = __webpack_require__(18) ? function(object, key, value){ + return $.setDesc(object, key, createDesc(1, value)); + } : function(object, key, value){ + object[key] = value; + return object; + }; + +/***/ }), +/* 26 */ +/***/ (function(module, exports) { + + module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; + }; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__(16) + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); + module.exports = function(key){ + return store[key] || (store[key] = {}); + }; + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + var def = __webpack_require__(9).setDesc + , has = __webpack_require__(17) + , TAG = __webpack_require__(29)('toStringTag'); + + module.exports = function(it, tag, stat){ + if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); + }; + +/***/ }), +/* 29 */ +/***/ (function(module, exports, __webpack_require__) { + + var store = __webpack_require__(27)('wks') + , uid = __webpack_require__(30) + , Symbol = __webpack_require__(16).Symbol; + module.exports = function(name){ + return store[name] || (store[name] = + Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name)); + }; + +/***/ }), +/* 30 */ +/***/ (function(module, exports) { + + var id = 0 + , px = Math.random(); + module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(9) + , toIObject = __webpack_require__(32); + module.exports = function(object, el){ + var O = toIObject(object) + , keys = $.getKeys(O) + , length = keys.length + , index = 0 + , key; + while(length > index)if(O[key = keys[index++]] === el)return key; + }; + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + // to indexed object, toObject with fallback for non-array-like ES3 strings + var IObject = __webpack_require__(33) + , defined = __webpack_require__(35); + module.exports = function(it){ + return IObject(defined(it)); + }; + +/***/ }), +/* 33 */ +/***/ (function(module, exports, __webpack_require__) { + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var cof = __webpack_require__(34); + module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); + }; + +/***/ }), +/* 34 */ +/***/ (function(module, exports) { + + var toString = {}.toString; + + module.exports = function(it){ + return toString.call(it).slice(8, -1); + }; + +/***/ }), +/* 35 */ +/***/ (function(module, exports) { + + // 7.2.1 RequireObjectCoercible(argument) + module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; + }; + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + var toIObject = __webpack_require__(32) + , getNames = __webpack_require__(9).getNames + , toString = {}.toString; + + var windowNames = typeof window == 'object' && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function(it){ + try { + return getNames(it); + } catch(e){ + return windowNames.slice(); + } + }; + + module.exports.get = function getOwnPropertyNames(it){ + if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it); + return getNames(toIObject(it)); + }; + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + + // all enumerable object keys, includes symbols + var $ = __webpack_require__(9); + module.exports = function(it){ + var keys = $.getKeys(it) + , getSymbols = $.getSymbols; + if(getSymbols){ + var symbols = getSymbols(it) + , isEnum = $.isEnum + , i = 0 + , key; + while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key); + } + return keys; + }; + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.2.2 IsArray(argument) + var cof = __webpack_require__(34); + module.exports = Array.isArray || function(arg){ + return cof(arg) == 'Array'; + }; + +/***/ }), +/* 39 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(40); + module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; + }; + +/***/ }), +/* 40 */ +/***/ (function(module, exports) { + + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + +/***/ }), +/* 41 */ +/***/ (function(module, exports) { + + module.exports = true; + +/***/ }), +/* 42 */ +/***/ (function(module, exports) { + + + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(44), __esModule: true }; + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(45); + __webpack_require__(51); + module.exports = __webpack_require__(29)('iterator'); + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var $at = __webpack_require__(46)(true); + + // 21.1.3.27 String.prototype[@@iterator]() + __webpack_require__(48)(String, 'String', function(iterated){ + this._t = String(iterated); // target + this._i = 0; // next index + // 21.1.5.2.1 %StringIteratorPrototype%.next() + }, function(){ + var O = this._t + , index = this._i + , point; + if(index >= O.length)return {value: undefined, done: true}; + point = $at(O, index); + this._i += point.length; + return {value: point, done: false}; + }); + +/***/ }), +/* 46 */ +/***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(47) + , defined = __webpack_require__(35); + // true -> String#at + // false -> String#codePointAt + module.exports = function(TO_STRING){ + return function(that, pos){ + var s = String(defined(that)) + , i = toInteger(pos) + , l = s.length + , a, b; + if(i < 0 || i >= l)return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + +/***/ }), +/* 47 */ +/***/ (function(module, exports) { + + // 7.1.4 ToInteger + var ceil = Math.ceil + , floor = Math.floor; + module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + +/***/ }), +/* 48 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var LIBRARY = __webpack_require__(41) + , $export = __webpack_require__(20) + , redefine = __webpack_require__(24) + , hide = __webpack_require__(25) + , has = __webpack_require__(17) + , Iterators = __webpack_require__(49) + , $iterCreate = __webpack_require__(50) + , setToStringTag = __webpack_require__(28) + , getProto = __webpack_require__(9).getProto + , ITERATOR = __webpack_require__(29)('iterator') + , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` + , FF_ITERATOR = '@@iterator' + , KEYS = 'keys' + , VALUES = 'values'; + + var returnThis = function(){ return this; }; + + module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ + $iterCreate(Constructor, NAME, next); + var getMethod = function(kind){ + if(!BUGGY && kind in proto)return proto[kind]; + switch(kind){ + case KEYS: return function keys(){ return new Constructor(this, kind); }; + case VALUES: return function values(){ return new Constructor(this, kind); }; + } return function entries(){ return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator' + , DEF_VALUES = DEFAULT == VALUES + , VALUES_BUG = false + , proto = Base.prototype + , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] + , $default = $native || getMethod(DEFAULT) + , methods, key; + // Fix native + if($native){ + var IteratorPrototype = getProto($default.call(new Base)); + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // FF fix + if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); + // fix Array#{values, @@iterator}.name in V8 / FF + if(DEF_VALUES && $native.name !== VALUES){ + VALUES_BUG = true; + $default = function values(){ return $native.call(this); }; + } + } + // Define iterator + if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if(DEFAULT){ + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: !DEF_VALUES ? $default : getMethod('entries') + }; + if(FORCED)for(key in methods){ + if(!(key in proto))redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; + }; + +/***/ }), +/* 49 */ +/***/ (function(module, exports) { + + module.exports = {}; + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var $ = __webpack_require__(9) + , descriptor = __webpack_require__(26) + , setToStringTag = __webpack_require__(28) + , IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + __webpack_require__(25)(IteratorPrototype, __webpack_require__(29)('iterator'), function(){ return this; }); + + module.exports = function(Constructor, NAME, next){ + Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)}); + setToStringTag(Constructor, NAME + ' Iterator'); + }; + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(52); + var Iterators = __webpack_require__(49); + Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array; + +/***/ }), +/* 52 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var addToUnscopables = __webpack_require__(53) + , step = __webpack_require__(54) + , Iterators = __webpack_require__(49) + , toIObject = __webpack_require__(32); + + // 22.1.3.4 Array.prototype.entries() + // 22.1.3.13 Array.prototype.keys() + // 22.1.3.29 Array.prototype.values() + // 22.1.3.30 Array.prototype[@@iterator]() + module.exports = __webpack_require__(48)(Array, 'Array', function(iterated, kind){ + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind + // 22.1.5.2.1 %ArrayIteratorPrototype%.next() + }, function(){ + var O = this._t + , kind = this._k + , index = this._i++; + if(!O || index >= O.length){ + this._t = undefined; + return step(1); + } + if(kind == 'keys' )return step(0, index); + if(kind == 'values')return step(0, O[index]); + return step(0, [index, O[index]]); + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) + Iterators.Arguments = Iterators.Array; + + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + +/***/ }), +/* 53 */ +/***/ (function(module, exports) { + + module.exports = function(){ /* empty */ }; + +/***/ }), +/* 54 */ +/***/ (function(module, exports) { + + module.exports = function(done, value){ + return {value: value, done: !!done}; + }; + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(56), __esModule: true }; + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(51); + __webpack_require__(45); + module.exports = __webpack_require__(57); + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__(39) + , get = __webpack_require__(58); + module.exports = __webpack_require__(21).getIterator = function(it){ + var iterFn = get(it); + if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!'); + return anObject(iterFn.call(it)); + }; + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + var classof = __webpack_require__(59) + , ITERATOR = __webpack_require__(29)('iterator') + , Iterators = __webpack_require__(49); + module.exports = __webpack_require__(21).getIteratorMethod = function(it){ + if(it != undefined)return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; + }; + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + + // getting tag from 19.1.3.6 Object.prototype.toString() + var cof = __webpack_require__(34) + , TAG = __webpack_require__(29)('toStringTag') + // ES3 wrong here + , ARG = cof(function(){ return arguments; }()) == 'Arguments'; + + module.exports = function(it){ + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = (O = Object(it))[TAG]) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; + }; + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(61), __esModule: true }; + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(62); + module.exports = __webpack_require__(21).Object.keys; + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + // 19.1.2.14 Object.keys(O) + var toObject = __webpack_require__(63); + + __webpack_require__(64)('keys', function($keys){ + return function keys(it){ + return $keys(toObject(it)); + }; + }); + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.1.13 ToObject(argument) + var defined = __webpack_require__(35); + module.exports = function(it){ + return Object(defined(it)); + }; + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + // most Object methods by ES6 should accept primitives + var $export = __webpack_require__(20) + , core = __webpack_require__(21) + , fails = __webpack_require__(19); + module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); + }; + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 66 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#if requires exactly one argument'); + } + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 67 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 68 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('lookup', function (obj, field, options) { + if (!obj) { + // Note for 5.0: Change to "obj == null" in 5.0 + return obj; + } + return options.lookupProperty(obj, field); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('with', function (context, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#with requires exactly one argument'); + } + if (_utils.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!_utils.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: _utils.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.registerDefaultDecorators = registerDefaultDecorators; + + var _decoratorsInline = __webpack_require__(71); + + var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); + + function registerDefaultDecorators(instance) { + _decoratorsInline2['default'](instance); + } + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + exports['default'] = function (instance) { + instance.registerDecorator('inline', function (fn, props, container, options) { + var ret = fn; + if (!props.partials) { + props.partials = {}; + ret = function (context, options) { + // Create a new partials stack frame prior to exec. + var original = container.partials; + container.partials = _utils.extend({}, original, props.partials); + var ret = fn(context, options); + container.partials = original; + return ret; + }; + } + + props.partials[options.args[0]] = options.fn; + + return ret; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + // eslint-disable-next-line no-console + if (!console[method]) { + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } + }; + + exports['default'] = logger; + module.exports = exports['default']; + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$create = __webpack_require__(74)['default']; + + var _Object$keys = __webpack_require__(60)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.createProtoAccessControl = createProtoAccessControl; + exports.resultIsAllowed = resultIsAllowed; + exports.resetLoggedProperties = resetLoggedProperties; + + var _utils = __webpack_require__(5); + + var _logger = __webpack_require__(72); + + var _logger2 = _interopRequireDefault(_logger); + + var loggedProperties = _Object$create(null); + + function createProtoAccessControl(runtimeOptions) { + // Create an object with "null"-prototype to avoid truthy results on + // prototype properties. + var propertyWhiteList = _Object$create(null); + // eslint-disable-next-line no-proto + propertyWhiteList['__proto__'] = false; + _utils.extend(propertyWhiteList, runtimeOptions.allowedProtoProperties); + + var methodWhiteList = _Object$create(null); + methodWhiteList['constructor'] = false; + methodWhiteList['__defineGetter__'] = false; + methodWhiteList['__defineSetter__'] = false; + methodWhiteList['__lookupGetter__'] = false; + methodWhiteList['__lookupSetter__'] = false; + _utils.extend(methodWhiteList, runtimeOptions.allowedProtoMethods); + + return { + properties: { + whitelist: propertyWhiteList, + defaultValue: runtimeOptions.allowProtoPropertiesByDefault + }, + methods: { + whitelist: methodWhiteList, + defaultValue: runtimeOptions.allowProtoMethodsByDefault + } + }; + } + + function resultIsAllowed(result, protoAccessControl, propertyName) { + if (typeof result === 'function') { + return checkWhiteList(protoAccessControl.methods, propertyName); + } else { + return checkWhiteList(protoAccessControl.properties, propertyName); + } + } + + function checkWhiteList(protoAccessControlForType, propertyName) { + if (protoAccessControlForType.whitelist[propertyName] !== undefined) { + return protoAccessControlForType.whitelist[propertyName] === true; + } + if (protoAccessControlForType.defaultValue !== undefined) { + return protoAccessControlForType.defaultValue; + } + logUnexpecedPropertyAccessOnce(propertyName); + return false; + } + + function logUnexpecedPropertyAccessOnce(propertyName) { + if (loggedProperties[propertyName] !== true) { + loggedProperties[propertyName] = true; + _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'); + } + } + + function resetLoggedProperties() { + _Object$keys(loggedProperties).forEach(function (propertyName) { + delete loggedProperties[propertyName]; + }); + } + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(75), __esModule: true }; + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(9); + module.exports = function create(P, D){ + return $.create(P, D); + }; + +/***/ }), +/* 76 */ +/***/ (function(module, exports) { + + // Build out our basic SafeString type + 'use strict'; + + exports.__esModule = true; + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + exports['default'] = SafeString; + module.exports = exports['default']; + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$seal = __webpack_require__(78)['default']; + + var _Object$keys = __webpack_require__(60)['default']; + + var _interopRequireWildcard = __webpack_require__(3)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.checkRevision = checkRevision; + exports.template = template; + exports.wrapProgram = wrapProgram; + exports.resolvePartial = resolvePartial; + exports.invokePartial = invokePartial; + exports.noop = noop; + + var _utils = __webpack_require__(5); + + var Utils = _interopRequireWildcard(_utils); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + var _base = __webpack_require__(4); + + var _helpers = __webpack_require__(10); + + var _internalWrapHelper = __webpack_require__(81); + + var _internalProtoAccess = __webpack_require__(73); + + function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = _base.COMPILER_REVISION; + + if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) { + return; + } + + if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) { + var runtimeVersions = _base.REVISION_CHANGES[currentRevision], + compilerVersions = _base.REVISION_CHANGES[compilerRevision]; + throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } + } + + function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _exception2['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as pseudo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) + var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = Utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + partial = env.VM.resolvePartial.call(this, partial, context, options); + + options.hooks = this.hooks; + options.protoAccessControl = this.protoAccessControl; + + var result = env.VM.invokePartial.call(this, partial, context, options); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, options); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name, loc) { + if (!obj || !(name in obj)) { + throw new _exception2['default']('"' + name + '" not defined in ' + obj, { + loc: loc + }); + } + return container.lookupProperty(obj, name); + }, + lookupProperty: function lookupProperty(parent, propertyName) { + var result = parent[propertyName]; + if (result == null) { + return result; + } + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return result; + } + + if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { + return result; + } + return undefined; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + var result = depths[i] && container.lookupProperty(depths[i], name); + if (result != null) { + return result; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: Utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + mergeIfNeeded: function mergeIfNeeded(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = Utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: _Object$seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + var mergedHelpers = {}; + addHelpers(mergedHelpers, env.helpers, container); + addHelpers(mergedHelpers, options.helpers, container); + container.helpers = mergedHelpers; + + if (templateSpec.usePartial) { + // Use mergeIfNeeded here to prevent compiling global partials multiple times + container.partials = container.mergeIfNeeded(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = Utils.extend({}, env.decorators, options.decorators); + } + + container.hooks = {}; + container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options); + + var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; + _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); + _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); + } else { + container.protoAccessControl = options.protoAccessControl; // internal option + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + container.hooks = options.hooks; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _exception2['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _exception2['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; + } + + function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; + } + + /** + * This is currently part of the official API, therefore implementation details should not be changed. + */ + + function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = lookupOwnProperty(options.data, 'partial-block'); + } else { + partial = lookupOwnProperty(options.partials, options.name); + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = lookupOwnProperty(options.partials, partial); + } + return partial; + } + + function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = lookupOwnProperty(options.data, 'partial-block'); + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = _base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = _base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = Utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _exception2['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } + } + + function noop() { + return ''; + } + + function lookupOwnProperty(obj, name) { + if (obj && Object.prototype.hasOwnProperty.call(obj, name)) { + return obj[name]; + } + } + + function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? _base.createFrame(data) : {}; + data.root = context; + } + return data; + } + + function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + Utils.extend(prog, props); + } + return prog; + } + + function addHelpers(mergedHelpers, helpers, container) { + if (!helpers) return; + _Object$keys(helpers).forEach(function (helperName) { + var helper = helpers[helperName]; + mergedHelpers[helperName] = passLookupPropertyOption(helper, container); + }); + } + + function passLookupPropertyOption(helper, container) { + var lookupProperty = container.lookupProperty; + return _internalWrapHelper.wrapHelper(helper, function (options) { + options.lookupProperty = lookupProperty; + return options; + }); + } + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(79), __esModule: true }; + +/***/ }), +/* 79 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(80); + module.exports = __webpack_require__(21).Object.seal; + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + // 19.1.2.17 Object.seal(O) + var isObject = __webpack_require__(40); + + __webpack_require__(64)('seal', function($seal){ + return function seal(it){ + return $seal && isObject(it) ? $seal(it) : it; + }; + }); + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.wrapHelper = wrapHelper; + + function wrapHelper(helper, transformOptionsFn) { + if (typeof helper !== 'function') { + // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 + // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. + return helper; + } + var wrapper = function wrapper() /* dynamic arguments */{ + var options = arguments[arguments.length - 1]; + arguments[arguments.length - 1] = transformOptionsFn(options); + return helper.apply(this, arguments); + }; + return wrapper; + } + +/***/ }), +/* 82 */ +/***/ (function(module, exports) { + + /* global globalThis */ + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (Handlebars) { + /* istanbul ignore next */ + // https://mathiasbynens.be/notes/globalthis + (function () { + if (typeof globalThis === 'object') return; + Object.prototype.__defineGetter__('__magic__', function () { + return this; + }); + __magic__.globalThis = __magic__; // eslint-disable-line no-undef + delete Object.prototype.__magic__; + })(); + + var $Handlebars = globalThis.Handlebars; + + /* istanbul ignore next */ + Handlebars.noConflict = function () { + if (globalThis.Handlebars === Handlebars) { + globalThis.Handlebars = $Handlebars; + } + return Handlebars; + }; + }; + + module.exports = exports['default']; + +/***/ }), +/* 83 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + var AST = { + // Public API used to evaluate derived attributes regarding AST nodes + helpers: { + // a mustache is definitely a helper if: + // * it is an eligible helper, and + // * it has at least one parameter or hash segment + helperExpression: function helperExpression(node) { + return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); + }, + + scopedId: function scopedId(path) { + return (/^\.|this\b/.test(path.original) + ); + }, + + // an ID is simple if it only has one part, and that part is not + // `..` or `this`. + simpleId: function simpleId(path) { + return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; + } + } + }; + + // Must be exported as an object rather than the root of the module as the jison lexer + // must modify the object to operate properly. + exports['default'] = AST; + module.exports = exports['default']; + +/***/ }), +/* 84 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$keys = __webpack_require__(60)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + var _interopRequireWildcard = __webpack_require__(3)['default']; + + exports.__esModule = true; + exports.parseWithoutProcessing = parseWithoutProcessing; + exports.parse = parse; + + var _parser = __webpack_require__(85); + + var _parser2 = _interopRequireDefault(_parser); + + var _whitespaceControl = __webpack_require__(86); + + var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl); + + var _helpers = __webpack_require__(88); + + var Helpers = _interopRequireWildcard(_helpers); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + var _utils = __webpack_require__(5); + + exports.parser = _parser2['default']; + + var yy = {}; + _utils.extend(yy, Helpers); + + function parseWithoutProcessing(input, options) { + // Just return if an already-compiled AST was passed in. + if (input.type === 'Program') { + // When a pre-parsed AST is passed in, validate all node values to prevent + // code injection via type-confused literals. + validateInputAst(input); + return input; + } + + _parser2['default'].yy = yy; + + // Altering the shared object here, but this is ok as parser is a sync operation + yy.locInfo = function (locInfo) { + return new yy.SourceLocation(options && options.srcName, locInfo); + }; + + var ast = _parser2['default'].parse(input); + + return ast; + } + + function parse(input, options) { + var ast = parseWithoutProcessing(input, options); + var strip = new _whitespaceControl2['default'](options); + + return strip.accept(ast); + } + + function validateInputAst(ast) { + validateAstNode(ast); + } + + function validateAstNode(node) { + if (node == null) { + return; + } + + if (Array.isArray(node)) { + node.forEach(validateAstNode); + return; + } + + if (typeof node !== 'object') { + return; + } + + if (node.type === 'PathExpression') { + if (!isValidDepth(node.depth)) { + throw new _exception2['default']('Invalid AST: PathExpression.depth must be an integer'); + } + if (!Array.isArray(node.parts)) { + throw new _exception2['default']('Invalid AST: PathExpression.parts must be an array'); + } + for (var i = 0; i < node.parts.length; i++) { + if (typeof node.parts[i] !== 'string') { + throw new _exception2['default']('Invalid AST: PathExpression.parts must only contain strings'); + } + } + } else if (node.type === 'NumberLiteral') { + if (typeof node.value !== 'number' || !isFinite(node.value)) { + throw new _exception2['default']('Invalid AST: NumberLiteral.value must be a number'); + } + } else if (node.type === 'BooleanLiteral') { + if (typeof node.value !== 'boolean') { + throw new _exception2['default']('Invalid AST: BooleanLiteral.value must be a boolean'); + } + } + + _Object$keys(node).forEach(function (propertyName) { + if (propertyName === 'loc') { + return; + } + validateAstNode(node[propertyName]); + }); + } + + function isValidDepth(depth) { + return typeof depth === 'number' && isFinite(depth) && Math.floor(depth) === depth && depth >= 0; + } + +/***/ }), +/* 85 */ +/***/ (function(module, exports) { + + // File ignored in coverage tests via setting in .istanbul.yml + /* Jison generated parser */ + "use strict"; + + exports.__esModule = true; + var handlebars = (function () { + var parser = { trace: function trace() {}, + yy: {}, + symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, + productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + break; + case 2: + this.$ = yy.prepareProgram($$[$0]); + break; + case 3: + this.$ = $$[$0]; + break; + case 4: + this.$ = $$[$0]; + break; + case 5: + this.$ = $$[$0]; + break; + case 6: + this.$ = $$[$0]; + break; + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = { + type: 'CommentStatement', + value: yy.stripComment($$[$0]), + strip: yy.stripFlags($$[$0], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 10: + this.$ = { + type: 'ContentStatement', + original: $$[$0], + value: $$[$0], + loc: yy.locInfo(this._$) + }; + + break; + case 11: + this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 12: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; + break; + case 13: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); + break; + case 14: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); + break; + case 15: + this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 16: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 17: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 18: + this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; + break; + case 19: + var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), + program = yy.prepareProgram([inverse], $$[$0 - 1].loc); + program.chained = true; + + this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; + + break; + case 20: + this.$ = $$[$0]; + break; + case 21: + this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; + break; + case 22: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 23: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 24: + this.$ = { + type: 'PartialStatement', + name: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + indent: '', + strip: yy.stripFlags($$[$0 - 4], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 25: + this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 26: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; + break; + case 27: + this.$ = $$[$0]; + break; + case 28: + this.$ = $$[$0]; + break; + case 29: + this.$ = { + type: 'SubExpression', + path: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + loc: yy.locInfo(this._$) + }; + + break; + case 30: + this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 31: + this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 32: + this.$ = yy.id($$[$0 - 1]); + break; + case 33: + this.$ = $$[$0]; + break; + case 34: + this.$ = $$[$0]; + break; + case 35: + this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 36: + this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; + break; + case 37: + this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; + break; + case 38: + this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; + break; + case 39: + this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; + break; + case 40: + this.$ = $$[$0]; + break; + case 41: + this.$ = $$[$0]; + break; + case 42: + this.$ = yy.preparePath(true, $$[$0], this._$); + break; + case 43: + this.$ = yy.preparePath(false, $$[$0], this._$); + break; + case 44: + $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; + break; + case 45: + this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; + break; + case 46: + this.$ = []; + break; + case 47: + $$[$0 - 1].push($$[$0]); + break; + case 48: + this.$ = []; + break; + case 49: + $$[$0 - 1].push($$[$0]); + break; + case 50: + this.$ = []; + break; + case 51: + $$[$0 - 1].push($$[$0]); + break; + case 58: + this.$ = []; + break; + case 59: + $$[$0 - 1].push($$[$0]); + break; + case 64: + this.$ = []; + break; + case 65: + $$[$0 - 1].push($$[$0]); + break; + case 70: + this.$ = []; + break; + case 71: + $$[$0 - 1].push($$[$0]); + break; + case 78: + this.$ = []; + break; + case 79: + $$[$0 - 1].push($$[$0]); + break; + case 82: + this.$ = []; + break; + case 83: + $$[$0 - 1].push($$[$0]); + break; + case 86: + this.$ = []; + break; + case 87: + $$[$0 - 1].push($$[$0]); + break; + case 90: + this.$ = []; + break; + case 91: + $$[$0 - 1].push($$[$0]); + break; + case 94: + this.$ = []; + break; + case 95: + $$[$0 - 1].push($$[$0]); + break; + case 98: + this.$ = [$$[$0]]; + break; + case 99: + $$[$0 - 1].push($$[$0]); + break; + case 100: + this.$ = [$$[$0]]; + break; + case 101: + $$[$0 - 1].push($$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], + defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] }, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], + lstack = [], + table = this.table, + yytext = "", + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + var ranges = this.lexer.options && this.lexer.options.ranges; + if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== "number") { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, + preErrorSymbol, + state, + action, + a, + r, + yyval = {}, + p, + len, + newState, + expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + if (!recovering) { + expected = []; + for (p in table[state]) if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + if (this.lexer.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + /* Jison generated lexer */ + var lexer = (function () { + var lexer = { EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function setInput(input) { + this._input = input; + this._more = this._less = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; + if (this.options.ranges) this.yylloc.range = [0, 0]; + this.offset = 0; + return this; + }, + input: function input() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) this.yylloc.range[1]++; + + this._input = this._input.slice(1); + return ch; + }, + unput: function unput(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) this.yylineno -= lines.length - 1; + var r = this.yylloc.range; + + this.yylloc = { first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + return this; + }, + more: function more() { + this._more = true; + return this; + }, + less: function less(n) { + this.unput(this.match.slice(n)); + }, + pastInput: function pastInput() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function upcomingInput() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + showPosition: function showPosition() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + next: function next() { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, match, tempMatch, index, col, lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (!this.options.flex) break; + } + } + if (match) { + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = { first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) this.done = false; + if (token) return token;else return; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); + } + }, + lex: function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + return this.conditionStack.pop(); + }, + _currentRules: function _currentRules() { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + }, + topState: function topState() { + return this.conditionStack[this.conditionStack.length - 2]; + }, + pushState: function begin(condition) { + this.begin(condition); + } }; + lexer.options = {}; + lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + + function strip(start, end) { + return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start); + } + + var YYSTATE = YY_START; + switch ($avoiding_name_collisions) { + case 0: + if (yy_.yytext.slice(-2) === "\\\\") { + strip(0, 1); + this.begin("mu"); + } else if (yy_.yytext.slice(-1) === "\\") { + strip(0, 1); + this.begin("emu"); + } else { + this.begin("mu"); + } + if (yy_.yytext) return 15; + + break; + case 1: + return 15; + break; + case 2: + this.popState(); + return 15; + + break; + case 3: + this.begin('raw');return 15; + break; + case 4: + this.popState(); + // Should be using `this.topState()` below, but it currently + // returns the second top instead of the first top. Opened an + // issue about it at https://github.com/zaach/jison/issues/291 + if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { + return 15; + } else { + strip(5, 9); + return 'END_RAW_BLOCK'; + } + + break; + case 5: + return 15; + break; + case 6: + this.popState(); + return 14; + + break; + case 7: + return 65; + break; + case 8: + return 68; + break; + case 9: + return 19; + break; + case 10: + this.popState(); + this.begin('raw'); + return 23; + + break; + case 11: + return 55; + break; + case 12: + return 60; + break; + case 13: + return 29; + break; + case 14: + return 47; + break; + case 15: + this.popState();return 44; + break; + case 16: + this.popState();return 44; + break; + case 17: + return 34; + break; + case 18: + return 39; + break; + case 19: + return 51; + break; + case 20: + return 48; + break; + case 21: + this.unput(yy_.yytext); + this.popState(); + this.begin('com'); + + break; + case 22: + this.popState(); + return 14; + + break; + case 23: + return 48; + break; + case 24: + return 73; + break; + case 25: + return 72; + break; + case 26: + return 72; + break; + case 27: + return 87; + break; + case 28: + // ignore whitespace + break; + case 29: + this.popState();return 54; + break; + case 30: + this.popState();return 33; + break; + case 31: + yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; + break; + case 32: + yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; + break; + case 33: + return 85; + break; + case 34: + return 82; + break; + case 35: + return 82; + break; + case 36: + return 83; + break; + case 37: + return 84; + break; + case 38: + return 81; + break; + case 39: + return 75; + break; + case 40: + return 77; + break; + case 41: + return 72; + break; + case 42: + yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; + break; + case 43: + return 'INVALID'; + break; + case 44: + return 5; + break; + } + }; + lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; + lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + }Parser.prototype = parser;parser.Parser = Parser; + return new Parser(); + })();exports["default"] = handlebars; + module.exports = exports["default"]; + +/***/ }), +/* 86 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _visitor = __webpack_require__(87); + + var _visitor2 = _interopRequireDefault(_visitor); + + function WhitespaceControl() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + this.options = options; + } + WhitespaceControl.prototype = new _visitor2['default'](); + + WhitespaceControl.prototype.Program = function (program) { + var doStandalone = !this.options.ignoreStandalone; + + var isRoot = !this.isRootSeen; + this.isRootSeen = true; + + var body = program.body; + for (var i = 0, l = body.length; i < l; i++) { + var current = body[i], + strip = this.accept(current); + + if (!strip) { + continue; + } + + var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), + _isNextWhitespace = isNextWhitespace(body, i, isRoot), + openStandalone = strip.openStandalone && _isPrevWhitespace, + closeStandalone = strip.closeStandalone && _isNextWhitespace, + inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; + + if (strip.close) { + omitRight(body, i, true); + } + if (strip.open) { + omitLeft(body, i, true); + } + + if (doStandalone && inlineStandalone) { + omitRight(body, i); + + if (omitLeft(body, i)) { + // If we are on a standalone node, save the indent info for partials + if (current.type === 'PartialStatement') { + // Pull out the whitespace from the final line + current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; + } + } + } + if (doStandalone && openStandalone) { + omitRight((current.program || current.inverse).body); + + // Strip out the previous content node if it's whitespace only + omitLeft(body, i); + } + if (doStandalone && closeStandalone) { + // Always strip the next node + omitRight(body, i); + + omitLeft((current.inverse || current.program).body); + } + } + + return program; + }; + + WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { + this.accept(block.program); + this.accept(block.inverse); + + // Find the inverse program that is involed with whitespace stripping. + var program = block.program || block.inverse, + inverse = block.program && block.inverse, + firstInverse = inverse, + lastInverse = inverse; + + if (inverse && inverse.chained) { + firstInverse = inverse.body[0].program; + + // Walk the inverse chain to find the last inverse that is actually in the chain. + while (lastInverse.chained) { + lastInverse = lastInverse.body[lastInverse.body.length - 1].program; + } + } + + var strip = { + open: block.openStrip.open, + close: block.closeStrip.close, + + // Determine the standalone candiacy. Basically flag our content as being possibly standalone + // so our parent can determine if we actually are standalone + openStandalone: isNextWhitespace(program.body), + closeStandalone: isPrevWhitespace((firstInverse || program).body) + }; + + if (block.openStrip.close) { + omitRight(program.body, null, true); + } + + if (inverse) { + var inverseStrip = block.inverseStrip; + + if (inverseStrip.open) { + omitLeft(program.body, null, true); + } + + if (inverseStrip.close) { + omitRight(firstInverse.body, null, true); + } + if (block.closeStrip.open) { + omitLeft(lastInverse.body, null, true); + } + + // Find standalone else statments + if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { + omitLeft(program.body); + omitRight(firstInverse.body); + } + } else if (block.closeStrip.open) { + omitLeft(program.body, null, true); + } + + return strip; + }; + + WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { + return mustache.strip; + }; + + WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { + /* istanbul ignore next */ + var strip = node.strip || {}; + return { + inlineStandalone: true, + open: strip.open, + close: strip.close + }; + }; + + function isPrevWhitespace(body, i, isRoot) { + if (i === undefined) { + i = body.length; + } + + // Nodes that end with newlines are considered whitespace (but are special + // cased for strip operations) + var prev = body[i - 1], + sibling = body[i - 2]; + if (!prev) { + return isRoot; + } + + if (prev.type === 'ContentStatement') { + return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); + } + } + function isNextWhitespace(body, i, isRoot) { + if (i === undefined) { + i = -1; + } + + var next = body[i + 1], + sibling = body[i + 2]; + if (!next) { + return isRoot; + } + + if (next.type === 'ContentStatement') { + return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); + } + } + + // Marks the node to the right of the position as omitted. + // I.e. {{foo}}' ' will mark the ' ' node as omitted. + // + // If i is undefined, then the first child will be marked as such. + // + // If mulitple is truthy then all whitespace will be stripped out until non-whitespace + // content is met. + function omitRight(body, i, multiple) { + var current = body[i == null ? 0 : i + 1]; + if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { + return; + } + + var original = current.value; + current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); + current.rightStripped = current.value !== original; + } + + // Marks the node to the left of the position as omitted. + // I.e. ' '{{foo}} will mark the ' ' node as omitted. + // + // If i is undefined then the last child will be marked as such. + // + // If mulitple is truthy then all whitespace will be stripped out until non-whitespace + // content is met. + function omitLeft(body, i, multiple) { + var current = body[i == null ? body.length - 1 : i - 1]; + if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { + return; + } + + // We omit the last node if it's whitespace only and not preceded by a non-content node. + var original = current.value; + current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); + current.leftStripped = current.value !== original; + return current.leftStripped; + } + + exports['default'] = WhitespaceControl; + module.exports = exports['default']; + +/***/ }), +/* 87 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + function Visitor() { + this.parents = []; + } + + Visitor.prototype = { + constructor: Visitor, + mutating: false, + + // Visits a given value. If mutating, will replace the value if necessary. + acceptKey: function acceptKey(node, name) { + var value = this.accept(node[name]); + if (this.mutating) { + // Hacky sanity check: This may have a few false positives for type for the helper + // methods but will generally do the right thing without a lot of overhead. + if (value && !Visitor.prototype[value.type]) { + throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); + } + node[name] = value; + } + }, + + // Performs an accept operation with added sanity check to ensure + // required keys are not removed. + acceptRequired: function acceptRequired(node, name) { + this.acceptKey(node, name); + + if (!node[name]) { + throw new _exception2['default'](node.type + ' requires ' + name); + } + }, + + // Traverses a given array. If mutating, empty respnses will be removed + // for child elements. + acceptArray: function acceptArray(array) { + for (var i = 0, l = array.length; i < l; i++) { + this.acceptKey(array, i); + + if (!array[i]) { + array.splice(i, 1); + i--; + l--; + } + } + }, + + accept: function accept(object) { + if (!object) { + return; + } + + /* istanbul ignore next: Sanity code */ + if (!this[object.type]) { + throw new _exception2['default']('Unknown type: ' + object.type, object); + } + + if (this.current) { + this.parents.unshift(this.current); + } + this.current = object; + + var ret = this[object.type](object); + + this.current = this.parents.shift(); + + if (!this.mutating || ret) { + return ret; + } else if (ret !== false) { + return object; + } + }, + + Program: function Program(program) { + this.acceptArray(program.body); + }, + + MustacheStatement: visitSubExpression, + Decorator: visitSubExpression, + + BlockStatement: visitBlock, + DecoratorBlock: visitBlock, + + PartialStatement: visitPartial, + PartialBlockStatement: function PartialBlockStatement(partial) { + visitPartial.call(this, partial); + + this.acceptKey(partial, 'program'); + }, + + ContentStatement: function ContentStatement() /* content */{}, + CommentStatement: function CommentStatement() /* comment */{}, + + SubExpression: visitSubExpression, + + PathExpression: function PathExpression() /* path */{}, + + StringLiteral: function StringLiteral() /* string */{}, + NumberLiteral: function NumberLiteral() /* number */{}, + BooleanLiteral: function BooleanLiteral() /* bool */{}, + UndefinedLiteral: function UndefinedLiteral() /* literal */{}, + NullLiteral: function NullLiteral() /* literal */{}, + + Hash: function Hash(hash) { + this.acceptArray(hash.pairs); + }, + HashPair: function HashPair(pair) { + this.acceptRequired(pair, 'value'); + } + }; + + function visitSubExpression(mustache) { + this.acceptRequired(mustache, 'path'); + this.acceptArray(mustache.params); + this.acceptKey(mustache, 'hash'); + } + function visitBlock(block) { + visitSubExpression.call(this, block); + + this.acceptKey(block, 'program'); + this.acceptKey(block, 'inverse'); + } + function visitPartial(partial) { + this.acceptRequired(partial, 'name'); + this.acceptArray(partial.params); + this.acceptKey(partial, 'hash'); + } + + exports['default'] = Visitor; + module.exports = exports['default']; + +/***/ }), +/* 88 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.SourceLocation = SourceLocation; + exports.id = id; + exports.stripFlags = stripFlags; + exports.stripComment = stripComment; + exports.preparePath = preparePath; + exports.prepareMustache = prepareMustache; + exports.prepareRawBlock = prepareRawBlock; + exports.prepareBlock = prepareBlock; + exports.prepareProgram = prepareProgram; + exports.preparePartialBlock = preparePartialBlock; + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + function validateClose(open, close) { + close = close.path ? close.path.original : close; + + if (open.path.original !== close) { + var errorNode = { loc: open.path.loc }; + + throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode); + } + } + + function SourceLocation(source, locInfo) { + this.source = source; + this.start = { + line: locInfo.first_line, + column: locInfo.first_column + }; + this.end = { + line: locInfo.last_line, + column: locInfo.last_column + }; + } + + function id(token) { + if (/^\[.*\]$/.test(token)) { + return token.substring(1, token.length - 1); + } else { + return token; + } + } + + function stripFlags(open, close) { + return { + open: open.charAt(2) === '~', + close: close.charAt(close.length - 3) === '~' + }; + } + + function stripComment(comment) { + return comment.replace(/^\{\{~?!-?-?/, '').replace(/-?-?~?\}\}$/, ''); + } + + function preparePath(data, parts, loc) { + loc = this.locInfo(loc); + + var original = data ? '@' : '', + dig = [], + depth = 0; + + for (var i = 0, l = parts.length; i < l; i++) { + var part = parts[i].part, + + // If we have [] syntax then we do not treat path references as operators, + // i.e. foo.[this] resolves to approximately context.foo['this'] + isLiteral = parts[i].original !== part; + original += (parts[i].separator || '') + part; + + if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { + if (dig.length > 0) { + throw new _exception2['default']('Invalid path: ' + original, { loc: loc }); + } else if (part === '..') { + depth++; + } + } else { + dig.push(part); + } + } + + return { + type: 'PathExpression', + data: data, + depth: depth, + parts: dig, + original: original, + loc: loc + }; + } + + function prepareMustache(path, params, hash, open, strip, locInfo) { + // Must use charAt to support IE pre-10 + var escapeFlag = open.charAt(3) || open.charAt(2), + escaped = escapeFlag !== '{' && escapeFlag !== '&'; + + var decorator = /\*/.test(open); + return { + type: decorator ? 'Decorator' : 'MustacheStatement', + path: path, + params: params, + hash: hash, + escaped: escaped, + strip: strip, + loc: this.locInfo(locInfo) + }; + } + + function prepareRawBlock(openRawBlock, contents, close, locInfo) { + validateClose(openRawBlock, close); + + locInfo = this.locInfo(locInfo); + var program = { + type: 'Program', + body: contents, + strip: {}, + loc: locInfo + }; + + return { + type: 'BlockStatement', + path: openRawBlock.path, + params: openRawBlock.params, + hash: openRawBlock.hash, + program: program, + openStrip: {}, + inverseStrip: {}, + closeStrip: {}, + loc: locInfo + }; + } + + function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { + if (close && close.path) { + validateClose(openBlock, close); + } + + var decorator = /\*/.test(openBlock.open); + + program.blockParams = openBlock.blockParams; + + var inverse = undefined, + inverseStrip = undefined; + + if (inverseAndProgram) { + if (decorator) { + throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram); + } + + if (inverseAndProgram.chain) { + inverseAndProgram.program.body[0].closeStrip = close.strip; + } + + inverseStrip = inverseAndProgram.strip; + inverse = inverseAndProgram.program; + } + + if (inverted) { + inverted = inverse; + inverse = program; + program = inverted; + } + + return { + type: decorator ? 'DecoratorBlock' : 'BlockStatement', + path: openBlock.path, + params: openBlock.params, + hash: openBlock.hash, + program: program, + inverse: inverse, + openStrip: openBlock.strip, + inverseStrip: inverseStrip, + closeStrip: close && close.strip, + loc: this.locInfo(locInfo) + }; + } + + function prepareProgram(statements, loc) { + if (!loc && statements.length) { + var firstLoc = statements[0].loc, + lastLoc = statements[statements.length - 1].loc; + + /* istanbul ignore else */ + if (firstLoc && lastLoc) { + loc = { + source: firstLoc.source, + start: { + line: firstLoc.start.line, + column: firstLoc.start.column + }, + end: { + line: lastLoc.end.line, + column: lastLoc.end.column + } + }; + } + } + + return { + type: 'Program', + body: statements, + strip: {}, + loc: loc + }; + } + + function preparePartialBlock(open, program, close, locInfo) { + validateClose(open, close); + + return { + type: 'PartialBlockStatement', + name: open.path, + params: open.params, + hash: open.hash, + program: program, + openStrip: open.strip, + closeStrip: close && close.strip, + loc: this.locInfo(locInfo) + }; + } + +/***/ }), +/* 89 */ +/***/ (function(module, exports, __webpack_require__) { + + /* eslint-disable new-cap */ + + 'use strict'; + + var _Object$create = __webpack_require__(74)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + exports.Compiler = Compiler; + exports.precompile = precompile; + exports.compile = compile; + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + var _utils = __webpack_require__(5); + + var _ast = __webpack_require__(83); + + var _ast2 = _interopRequireDefault(_ast); + + var slice = [].slice; + + function Compiler() {} + + // the foundHelper register will disambiguate helper lookup from finding a + // function in a context. This is necessary for mustache compatibility, which + // requires that context functions in blocks are evaluated by blockHelperMissing, + // and then proceed as if the resulting value was provided to blockHelperMissing. + + Compiler.prototype = { + compiler: Compiler, + + equals: function equals(other) { + var len = this.opcodes.length; + if (other.opcodes.length !== len) { + return false; + } + + for (var i = 0; i < len; i++) { + var opcode = this.opcodes[i], + otherOpcode = other.opcodes[i]; + if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { + return false; + } + } + + // We know that length is the same between the two arrays because they are directly tied + // to the opcode behavior above. + len = this.children.length; + for (var i = 0; i < len; i++) { + if (!this.children[i].equals(other.children[i])) { + return false; + } + } + + return true; + }, + + guid: 0, + + compile: function compile(program, options) { + this.sourceNode = []; + this.opcodes = []; + this.children = []; + this.options = options; + this.stringParams = options.stringParams; + this.trackIds = options.trackIds; + + options.blockParams = options.blockParams || []; + + options.knownHelpers = _utils.extend(_Object$create(null), { + helperMissing: true, + blockHelperMissing: true, + each: true, + 'if': true, + unless: true, + 'with': true, + log: true, + lookup: true + }, options.knownHelpers); + + return this.accept(program); + }, + + compileProgram: function compileProgram(program) { + var childCompiler = new this.compiler(), + // eslint-disable-line new-cap + result = childCompiler.compile(program, this.options), + guid = this.guid++; + + this.usePartial = this.usePartial || result.usePartial; + + this.children[guid] = result; + this.useDepths = this.useDepths || result.useDepths; + + return guid; + }, + + accept: function accept(node) { + /* istanbul ignore next: Sanity code */ + if (!this[node.type]) { + throw new _exception2['default']('Unknown type: ' + node.type, node); + } + + this.sourceNode.unshift(node); + var ret = this[node.type](node); + this.sourceNode.shift(); + return ret; + }, + + Program: function Program(program) { + this.options.blockParams.unshift(program.blockParams); + + var body = program.body, + bodyLength = body.length; + for (var i = 0; i < bodyLength; i++) { + this.accept(body[i]); + } + + this.options.blockParams.shift(); + + this.isSimple = bodyLength === 1; + this.blockParams = program.blockParams ? program.blockParams.length : 0; + + return this; + }, + + BlockStatement: function BlockStatement(block) { + transformLiteralToPath(block); + + var program = block.program, + inverse = block.inverse; + + program = program && this.compileProgram(program); + inverse = inverse && this.compileProgram(inverse); + + var type = this.classifySexpr(block); + + if (type === 'helper') { + this.helperSexpr(block, program, inverse); + } else if (type === 'simple') { + this.simpleSexpr(block); + + // now that the simple mustache is resolved, we need to + // evaluate it by executing `blockHelperMissing` + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + this.opcode('emptyHash'); + this.opcode('blockValue', block.path.original); + } else { + this.ambiguousSexpr(block, program, inverse); + + // now that the simple mustache is resolved, we need to + // evaluate it by executing `blockHelperMissing` + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + this.opcode('emptyHash'); + this.opcode('ambiguousBlockValue'); + } + + this.opcode('append'); + }, + + DecoratorBlock: function DecoratorBlock(decorator) { + var program = decorator.program && this.compileProgram(decorator.program); + var params = this.setupFullMustacheParams(decorator, program, undefined), + path = decorator.path; + + this.useDecorators = true; + this.opcode('registerDecorator', params.length, path.original); + }, + + PartialStatement: function PartialStatement(partial) { + this.usePartial = true; + + var program = partial.program; + if (program) { + program = this.compileProgram(partial.program); + } + + var params = partial.params; + if (params.length > 1) { + throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial); + } else if (!params.length) { + if (this.options.explicitPartialContext) { + this.opcode('pushLiteral', 'undefined'); + } else { + params.push({ type: 'PathExpression', parts: [], depth: 0 }); + } + } + + var partialName = partial.name.original, + isDynamic = partial.name.type === 'SubExpression'; + if (isDynamic) { + this.accept(partial.name); + } + + this.setupFullMustacheParams(partial, program, undefined, true); + + var indent = partial.indent || ''; + if (this.options.preventIndent && indent) { + this.opcode('appendContent', indent); + indent = ''; + } + + this.opcode('invokePartial', isDynamic, partialName, indent); + this.opcode('append'); + }, + PartialBlockStatement: function PartialBlockStatement(partialBlock) { + this.PartialStatement(partialBlock); + }, + + MustacheStatement: function MustacheStatement(mustache) { + this.SubExpression(mustache); + + if (mustache.escaped && !this.options.noEscape) { + this.opcode('appendEscaped'); + } else { + this.opcode('append'); + } + }, + Decorator: function Decorator(decorator) { + this.DecoratorBlock(decorator); + }, + + ContentStatement: function ContentStatement(content) { + if (content.value) { + this.opcode('appendContent', content.value); + } + }, + + CommentStatement: function CommentStatement() {}, + + SubExpression: function SubExpression(sexpr) { + transformLiteralToPath(sexpr); + var type = this.classifySexpr(sexpr); + + if (type === 'simple') { + this.simpleSexpr(sexpr); + } else if (type === 'helper') { + this.helperSexpr(sexpr); + } else { + this.ambiguousSexpr(sexpr); + } + }, + ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { + var path = sexpr.path, + name = path.parts[0], + isBlock = program != null || inverse != null; + + this.opcode('getContext', path.depth); + + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + + path.strict = true; + this.accept(path); + + this.opcode('invokeAmbiguous', name, isBlock); + }, + + simpleSexpr: function simpleSexpr(sexpr) { + var path = sexpr.path; + path.strict = true; + this.accept(path); + this.opcode('resolvePossibleLambda'); + }, + + helperSexpr: function helperSexpr(sexpr, program, inverse) { + var params = this.setupFullMustacheParams(sexpr, program, inverse), + path = sexpr.path, + name = path.parts[0]; + + if (this.options.knownHelpers[name]) { + this.opcode('invokeKnownHelper', params.length, name); + } else if (this.options.knownHelpersOnly) { + throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); + } else { + path.strict = true; + path.falsy = true; + + this.accept(path); + this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path)); + } + }, + + PathExpression: function PathExpression(path) { + this.addDepth(path.depth); + this.opcode('getContext', path.depth); + + var name = path.parts[0], + scoped = _ast2['default'].helpers.scopedId(path), + blockParamId = !path.depth && !scoped && this.blockParamIndex(name); + + if (blockParamId) { + this.opcode('lookupBlockParam', blockParamId, path.parts); + } else if (!name) { + // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` + this.opcode('pushContext'); + } else if (path.data) { + this.options.data = true; + this.opcode('lookupData', path.depth, path.parts, path.strict); + } else { + this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); + } + }, + + StringLiteral: function StringLiteral(string) { + this.opcode('pushString', string.value); + }, + + NumberLiteral: function NumberLiteral(number) { + this.opcode('pushLiteral', number.value); + }, + + BooleanLiteral: function BooleanLiteral(bool) { + this.opcode('pushLiteral', bool.value); + }, + + UndefinedLiteral: function UndefinedLiteral() { + this.opcode('pushLiteral', 'undefined'); + }, + + NullLiteral: function NullLiteral() { + this.opcode('pushLiteral', 'null'); + }, + + Hash: function Hash(hash) { + var pairs = hash.pairs, + i = 0, + l = pairs.length; + + this.opcode('pushHash'); + + for (; i < l; i++) { + this.pushParam(pairs[i].value); + } + while (i--) { + this.opcode('assignToHash', pairs[i].key); + } + this.opcode('popHash'); + }, + + // HELPERS + opcode: function opcode(name) { + this.opcodes.push({ + opcode: name, + args: slice.call(arguments, 1), + loc: this.sourceNode[0].loc + }); + }, + + addDepth: function addDepth(depth) { + if (!depth) { + return; + } + + this.useDepths = true; + }, + + classifySexpr: function classifySexpr(sexpr) { + var isSimple = _ast2['default'].helpers.simpleId(sexpr.path); + + var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); + + // a mustache is an eligible helper if: + // * its id is simple (a single part, not `this` or `..`) + var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr); + + // if a mustache is an eligible helper but not a definite + // helper, it is ambiguous, and will be resolved in a later + // pass or at runtime. + var isEligible = !isBlockParam && (isHelper || isSimple); + + // if ambiguous, we can possibly resolve the ambiguity now + // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. + if (isEligible && !isHelper) { + var _name = sexpr.path.parts[0], + options = this.options; + if (options.knownHelpers[_name]) { + isHelper = true; + } else if (options.knownHelpersOnly) { + isEligible = false; + } + } + + if (isHelper) { + return 'helper'; + } else if (isEligible) { + return 'ambiguous'; + } else { + return 'simple'; + } + }, + + pushParams: function pushParams(params) { + for (var i = 0, l = params.length; i < l; i++) { + this.pushParam(params[i]); + } + }, + + pushParam: function pushParam(val) { + var value = val.value != null ? val.value : val.original || ''; + + if (this.stringParams) { + if (value.replace) { + value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); + } + + if (val.depth) { + this.addDepth(val.depth); + } + this.opcode('getContext', val.depth || 0); + this.opcode('pushStringParam', value, val.type); + + if (val.type === 'SubExpression') { + // SubExpressions get evaluated and passed in + // in string params mode. + this.accept(val); + } + } else { + if (this.trackIds) { + var blockParamIndex = undefined; + if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) { + blockParamIndex = this.blockParamIndex(val.parts[0]); + } + if (blockParamIndex) { + var blockParamChild = val.parts.slice(1).join('.'); + this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); + } else { + value = val.original || value; + if (value.replace) { + value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); + } + + this.opcode('pushId', val.type, value); + } + } + this.accept(val); + } + }, + + setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { + var params = sexpr.params; + this.pushParams(params); + + this.opcode('pushProgram', program); + this.opcode('pushProgram', inverse); + + if (sexpr.hash) { + this.accept(sexpr.hash); + } else { + this.opcode('emptyHash', omitEmpty); + } + + return params; + }, + + blockParamIndex: function blockParamIndex(name) { + for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { + var blockParams = this.options.blockParams[depth], + param = blockParams && _utils.indexOf(blockParams, name); + if (blockParams && param >= 0) { + return [depth, param]; + } + } + } + }; + + function precompile(input, options, env) { + if (input == null || typeof input !== 'string' && input.type !== 'Program') { + throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); + } + + options = options || {}; + if (!('data' in options)) { + options.data = true; + } + if (options.compat) { + options.useDepths = true; + } + + var ast = env.parse(input, options), + environment = new env.Compiler().compile(ast, options); + return new env.JavaScriptCompiler().compile(environment, options); + } + + function compile(input, options, env) { + if (options === undefined) options = {}; + + if (input == null || typeof input !== 'string' && input.type !== 'Program') { + throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); + } + + options = _utils.extend({}, options); + if (!('data' in options)) { + options.data = true; + } + if (options.compat) { + options.useDepths = true; + } + + var compiled = undefined; + + function compileInput() { + var ast = env.parse(input, options), + environment = new env.Compiler().compile(ast, options), + templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); + return env.template(templateSpec); + } + + // Template is only compiled on first use and cached after that point. + function ret(context, execOptions) { + if (!compiled) { + compiled = compileInput(); + } + return compiled.call(this, context, execOptions); + } + ret._setup = function (setupOptions) { + if (!compiled) { + compiled = compileInput(); + } + return compiled._setup(setupOptions); + }; + ret._child = function (i, data, blockParams, depths) { + if (!compiled) { + compiled = compileInput(); + } + return compiled._child(i, data, blockParams, depths); + }; + return ret; + } + + function argEquals(a, b) { + if (a === b) { + return true; + } + + if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) { + for (var i = 0; i < a.length; i++) { + if (!argEquals(a[i], b[i])) { + return false; + } + } + return true; + } + } + + function transformLiteralToPath(sexpr) { + if (!sexpr.path.parts) { + var literal = sexpr.path; + // Casting to string here to make false and 0 literal values play nicely with the rest + // of the system. + sexpr.path = { + type: 'PathExpression', + data: false, + depth: 0, + parts: [literal.original + ''], + original: literal.original + '', + loc: literal.loc + }; + } + } + +/***/ }), +/* 90 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$keys = __webpack_require__(60)['default']; + + var _interopRequireDefault = __webpack_require__(1)['default']; + + exports.__esModule = true; + + var _base = __webpack_require__(4); + + var _exception = __webpack_require__(6); + + var _exception2 = _interopRequireDefault(_exception); + + var _utils = __webpack_require__(5); + + var _codeGen = __webpack_require__(91); + + var _codeGen2 = _interopRequireDefault(_codeGen); + + function Literal(value) { + this.value = value; + } + + function JavaScriptCompiler() {} + + JavaScriptCompiler.prototype = { + // PUBLIC API: You can override these methods in a subclass to provide + // alternative compiled forms for name lookup and buffering semantics + nameLookup: function nameLookup(parent, name /*, type */) { + return this.internalNameLookup(parent, name); + }, + depthedLookup: function depthedLookup(name) { + return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')']; + }, + + compilerInfo: function compilerInfo() { + var revision = _base.COMPILER_REVISION, + versions = _base.REVISION_CHANGES[revision]; + return [revision, versions]; + }, + + appendToBuffer: function appendToBuffer(source, location, explicit) { + // Force a source as this simplifies the merge logic. + if (!_utils.isArray(source)) { + source = [source]; + } + source = this.source.wrap(source, location); + + if (this.environment.isSimple) { + return ['return ', source, ';']; + } else if (explicit) { + // This is a case where the buffer operation occurs as a child of another + // construct, generally braces. We have to explicitly output these buffer + // operations to ensure that the emitted code goes in the correct location. + return ['buffer += ', source, ';']; + } else { + source.appendToBuffer = true; + return source; + } + }, + + initializeBuffer: function initializeBuffer() { + return this.quotedString(''); + }, + // END PUBLIC API + internalNameLookup: function internalNameLookup(parent, name) { + this.lookupPropertyFunctionIsUsed = true; + return ['lookupProperty(', parent, ',', JSON.stringify(name), ')']; + }, + + lookupPropertyFunctionIsUsed: false, + + compile: function compile(environment, options, context, asObject) { + this.environment = environment; + this.options = options; + this.stringParams = this.options.stringParams; + this.trackIds = this.options.trackIds; + this.precompile = !asObject; + + this.name = this.environment.name; + this.isChild = !!context; + this.context = context || { + decorators: [], + programs: [], + environments: [] + }; + + this.preamble(); + + this.stackSlot = 0; + this.stackVars = []; + this.aliases = {}; + this.registers = { list: [] }; + this.hashes = []; + this.compileStack = []; + this.inlineStack = []; + this.blockParams = []; + + this.compileChildren(environment, options); + + this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; + this.useBlockParams = this.useBlockParams || environment.useBlockParams; + + var opcodes = environment.opcodes, + opcode = undefined, + firstLoc = undefined, + i = undefined, + l = undefined; + + for (i = 0, l = opcodes.length; i < l; i++) { + opcode = opcodes[i]; + + this.source.currentLocation = opcode.loc; + firstLoc = firstLoc || opcode.loc; + this[opcode.opcode].apply(this, opcode.args); + } + + // Flush any trailing content that might be pending. + this.source.currentLocation = firstLoc; + this.pushSource(''); + + /* istanbul ignore next */ + if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { + throw new _exception2['default']('Compile completed with content left on stack'); + } + + if (!this.decorators.isEmpty()) { + this.useDecorators = true; + + this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']); + this.decorators.push('return fn;'); + + if (asObject) { + this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); + } else { + this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); + this.decorators.push('}\n'); + this.decorators = this.decorators.merge(); + } + } else { + this.decorators = undefined; + } + + var fn = this.createFunctionContext(asObject); + if (!this.isChild) { + var ret = { + compiler: this.compilerInfo(), + main: fn + }; + + if (this.decorators) { + ret.main_d = this.decorators; // eslint-disable-line camelcase + ret.useDecorators = true; + } + + var _context = this.context; + var programs = _context.programs; + var decorators = _context.decorators; + + for (i = 0, l = programs.length; i < l; i++) { + ret[i] = programs[i]; + if (decorators[i]) { + ret[i + '_d'] = decorators[i]; + ret.useDecorators = true; + } + } + + if (this.environment.usePartial) { + ret.usePartial = true; + } + if (this.options.data) { + ret.useData = true; + } + if (this.useDepths) { + ret.useDepths = true; + } + if (this.useBlockParams) { + ret.useBlockParams = true; + } + if (this.options.compat) { + ret.compat = true; + } + + if (!asObject) { + ret.compiler = JSON.stringify(ret.compiler); + + this.source.currentLocation = { start: { line: 1, column: 0 } }; + ret = this.objectLiteral(ret); + + if (options.srcName) { + ret = ret.toStringWithSourceMap({ file: options.destName }); + ret.map = ret.map && ret.map.toString(); + } else { + ret = ret.toString(); + } + } else { + ret.compilerOptions = this.options; + } + + return ret; + } else { + return fn; + } + }, + + preamble: function preamble() { + // track the last context pushed into place to allow skipping the + // getContext opcode when it would be a noop + this.lastContext = 0; + this.source = new _codeGen2['default'](this.options.srcName); + this.decorators = new _codeGen2['default'](this.options.srcName); + }, + + createFunctionContext: function createFunctionContext(asObject) { + // istanbul ignore next + + var _this = this; + + var varDeclarations = ''; + + var locals = this.stackVars.concat(this.registers.list); + if (locals.length > 0) { + varDeclarations += ', ' + locals.join(', '); + } + + // Generate minimizer alias mappings + // + // When using true SourceNodes, this will update all references to the given alias + // as the source nodes are reused in situ. For the non-source node compilation mode, + // aliases will not be used, but this case is already being run on the client and + // we aren't concern about minimizing the template size. + var aliasCount = 0; + _Object$keys(this.aliases).forEach(function (alias) { + var node = _this.aliases[alias]; + if (node.children && node.referenceCount > 1) { + varDeclarations += ', alias' + ++aliasCount + '=' + alias; + node.children[0] = 'alias' + aliasCount; + } + }); + + if (this.lookupPropertyFunctionIsUsed) { + varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration(); + } + + var params = ['container', 'depth0', 'helpers', 'partials', 'data']; + + if (this.useBlockParams || this.useDepths) { + params.push('blockParams'); + } + if (this.useDepths) { + params.push('depths'); + } + + // Perform a second pass over the output to merge content when possible + var source = this.mergeSource(varDeclarations); + + if (asObject) { + params.push(source); + + return Function.apply(this, params); + } else { + return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); + } + }, + mergeSource: function mergeSource(varDeclarations) { + var isSimple = this.environment.isSimple, + appendOnly = !this.forceBuffer, + appendFirst = undefined, + sourceSeen = undefined, + bufferStart = undefined, + bufferEnd = undefined; + this.source.each(function (line) { + if (line.appendToBuffer) { + if (bufferStart) { + line.prepend(' + '); + } else { + bufferStart = line; + } + bufferEnd = line; + } else { + if (bufferStart) { + if (!sourceSeen) { + appendFirst = true; + } else { + bufferStart.prepend('buffer += '); + } + bufferEnd.add(';'); + bufferStart = bufferEnd = undefined; + } + + sourceSeen = true; + if (!isSimple) { + appendOnly = false; + } + } + }); + + if (appendOnly) { + if (bufferStart) { + bufferStart.prepend('return '); + bufferEnd.add(';'); + } else if (!sourceSeen) { + this.source.push('return "";'); + } + } else { + varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); + + if (bufferStart) { + bufferStart.prepend('return buffer + '); + bufferEnd.add(';'); + } else { + this.source.push('return buffer;'); + } + } + + if (varDeclarations) { + this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); + } + + return this.source.merge(); + }, + + lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() { + return '\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n '.trim(); + }, + + // [blockValue] + // + // On stack, before: hash, inverse, program, value + // On stack, after: return value of blockHelperMissing + // + // The purpose of this opcode is to take a block of the form + // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and + // replace it on the stack with the result of properly + // invoking blockHelperMissing. + blockValue: function blockValue(name) { + var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'), + params = [this.contextName(0)]; + this.setupHelperArgs(name, 0, params); + + var blockName = this.popStack(); + params.splice(1, 0, blockName); + + this.push(this.source.functionCall(blockHelperMissing, 'call', params)); + }, + + // [ambiguousBlockValue] + // + // On stack, before: hash, inverse, program, value + // Compiler value, before: lastHelper=value of last found helper, if any + // On stack, after, if no lastHelper: same as [blockValue] + // On stack, after, if lastHelper: value + ambiguousBlockValue: function ambiguousBlockValue() { + // We're being a bit cheeky and reusing the options value from the prior exec + var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'), + params = [this.contextName(0)]; + this.setupHelperArgs('', 0, params, true); + + this.flushInline(); + + var current = this.topStack(); + params.splice(1, 0, current); + + this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); + }, + + // [appendContent] + // + // On stack, before: ... + // On stack, after: ... + // + // Appends the string value of `content` to the current buffer + appendContent: function appendContent(content) { + if (this.pendingContent) { + content = this.pendingContent + content; + } else { + this.pendingLocation = this.source.currentLocation; + } + + this.pendingContent = content; + }, + + // [append] + // + // On stack, before: value, ... + // On stack, after: ... + // + // Coerces `value` to a String and appends it to the current buffer. + // + // If `value` is truthy, or 0, it is coerced into a string and appended + // Otherwise, the empty string is appended + append: function append() { + if (this.isInline()) { + this.replaceStack(function (current) { + return [' != null ? ', current, ' : ""']; + }); + + this.pushSource(this.appendToBuffer(this.popStack())); + } else { + var local = this.popStack(); + this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); + if (this.environment.isSimple) { + this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); + } + } + }, + + // [appendEscaped] + // + // On stack, before: value, ... + // On stack, after: ... + // + // Escape `value` and append it to the buffer + appendEscaped: function appendEscaped() { + this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); + }, + + // [getContext] + // + // On stack, before: ... + // On stack, after: ... + // Compiler value, after: lastContext=depth + // + // Set the value of the `lastContext` compiler value to the depth + getContext: function getContext(depth) { + this.lastContext = depth; + }, + + // [pushContext] + // + // On stack, before: ... + // On stack, after: currentContext, ... + // + // Pushes the value of the current context onto the stack. + pushContext: function pushContext() { + this.pushStackLiteral(this.contextName(this.lastContext)); + }, + + // [lookupOnContext] + // + // On stack, before: ... + // On stack, after: currentContext[name], ... + // + // Looks up the value of `name` on the current context and pushes + // it onto the stack. + lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { + var i = 0; + + if (!scoped && this.options.compat && !this.lastContext) { + // The depthed query is expected to handle the undefined logic for the root level that + // is implemented below, so we evaluate that directly in compat mode + this.push(this.depthedLookup(parts[i++])); + } else { + this.pushContext(); + } + + this.resolvePath('context', parts, i, falsy, strict); + }, + + // [lookupBlockParam] + // + // On stack, before: ... + // On stack, after: blockParam[name], ... + // + // Looks up the value of `parts` on the given block param and pushes + // it onto the stack. + lookupBlockParam: function lookupBlockParam(blockParamId, parts) { + this.useBlockParams = true; + + this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); + this.resolvePath('context', parts, 1); + }, + + // [lookupData] + // + // On stack, before: ... + // On stack, after: data, ... + // + // Push the data lookup operator + lookupData: function lookupData(depth, parts, strict) { + if (!depth) { + this.pushStackLiteral('data'); + } else { + this.pushStackLiteral('container.data(data, ' + depth + ')'); + } + + this.resolvePath('data', parts, 0, true, strict); + }, + + resolvePath: function resolvePath(type, parts, startPartIndex, falsy, strict) { + // istanbul ignore next + + var _this2 = this; + + if (this.options.strict || this.options.assumeObjects) { + this.push(strictLookup(this.options.strict && strict, this, parts, startPartIndex, type)); + return; + } + + var len = parts.length; + + var _loop = function (i) { + /* eslint-disable no-loop-func */ + _this2.replaceStack(function (current) { + var lookup = _this2.nameLookup(current, parts[i], type); + // We want to ensure that zero and false are handled properly if the context (falsy flag) + // needs to have the special handling for these values. + if (!falsy) { + return [' != null ? ', lookup, ' : ', current]; + } else { + // Otherwise we can use generic falsy handling + return [' && ', lookup]; + } + }); + /* eslint-enable no-loop-func */ + }; + + for (var i = startPartIndex; i < len; i++) { + _loop(i); + } + }, + + // [resolvePossibleLambda] + // + // On stack, before: value, ... + // On stack, after: resolved value, ... + // + // If the `value` is a lambda, replace it on the stack by + // the return value of the lambda + resolvePossibleLambda: function resolvePossibleLambda() { + this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); + }, + + // [pushStringParam] + // + // On stack, before: ... + // On stack, after: string, currentContext, ... + // + // This opcode is designed for use in string mode, which + // provides the string value of a parameter along with its + // depth rather than resolving it immediately. + pushStringParam: function pushStringParam(string, type) { + this.pushContext(); + this.pushString(type); + + // If it's a subexpression, the string result + // will be pushed after this opcode. + if (type !== 'SubExpression') { + if (typeof string === 'string') { + this.pushString(string); + } else { + this.pushStackLiteral(string); + } + } + }, + + emptyHash: function emptyHash(omitEmpty) { + if (this.trackIds) { + this.push('{}'); // hashIds + } + if (this.stringParams) { + this.push('{}'); // hashContexts + this.push('{}'); // hashTypes + } + this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); + }, + pushHash: function pushHash() { + if (this.hash) { + this.hashes.push(this.hash); + } + this.hash = { values: {}, types: [], contexts: [], ids: [] }; + }, + popHash: function popHash() { + var hash = this.hash; + this.hash = this.hashes.pop(); + + if (this.trackIds) { + this.push(this.objectLiteral(hash.ids)); + } + if (this.stringParams) { + this.push(this.objectLiteral(hash.contexts)); + this.push(this.objectLiteral(hash.types)); + } + + this.push(this.objectLiteral(hash.values)); + }, + + // [pushString] + // + // On stack, before: ... + // On stack, after: quotedString(string), ... + // + // Push a quoted version of `string` onto the stack + pushString: function pushString(string) { + this.pushStackLiteral(this.quotedString(string)); + }, + + // [pushLiteral] + // + // On stack, before: ... + // On stack, after: value, ... + // + // Pushes a value onto the stack. This operation prevents + // the compiler from creating a temporary variable to hold + // it. + pushLiteral: function pushLiteral(value) { + this.pushStackLiteral(value); + }, + + // [pushProgram] + // + // On stack, before: ... + // On stack, after: program(guid), ... + // + // Push a program expression onto the stack. This takes + // a compile-time guid and converts it into a runtime-accessible + // expression. + pushProgram: function pushProgram(guid) { + if (guid != null) { + this.pushStackLiteral(this.programExpression(guid)); + } else { + this.pushStackLiteral(null); + } + }, + + // [registerDecorator] + // + // On stack, before: hash, program, params..., ... + // On stack, after: ... + // + // Pops off the decorator's parameters, invokes the decorator, + // and inserts the decorator into the decorators list. + registerDecorator: function registerDecorator(paramSize, name) { + var foundDecorator = this.nameLookup('decorators', name, 'decorator'), + options = this.setupHelperArgs(name, paramSize); + + // Store the resolved decorator in a variable and verify it is a function before + // calling it. Without this, unregistered decorators can cause an unhandled TypeError + // (calling undefined), which crashes the process — enabling Denial of Service. + this.decorators.push(['var decorator = ', foundDecorator, ';']); + this.decorators.push(['if (typeof decorator !== "function") { throw new Error(', this.quotedString('Missing decorator: "' + name + '"'), '); }']); + this.decorators.push(['fn = ', this.decorators.functionCall('decorator', '', ['fn', 'props', 'container', options]), ' || fn;']); + }, + + // [invokeHelper] + // + // On stack, before: hash, inverse, program, params..., ... + // On stack, after: result of helper invocation + // + // Pops off the helper's parameters, invokes the helper, + // and pushes the helper's return value onto the stack. + // + // If the helper is not found, `helperMissing` is called. + invokeHelper: function invokeHelper(paramSize, name, isSimple) { + var nonHelper = this.popStack(), + helper = this.setupHelper(paramSize, name); + + var possibleFunctionCalls = []; + + if (isSimple) { + // direct call to helper + possibleFunctionCalls.push(helper.name); + } + // call a function from the input object + possibleFunctionCalls.push(nonHelper); + if (!this.options.strict) { + possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing')); + } + + var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')']; + var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams); + this.push(functionCall); + }, + + itemsSeparatedBy: function itemsSeparatedBy(items, separator) { + var result = []; + result.push(items[0]); + for (var i = 1; i < items.length; i++) { + result.push(separator, items[i]); + } + return result; + }, + // [invokeKnownHelper] + // + // On stack, before: hash, inverse, program, params..., ... + // On stack, after: result of helper invocation + // + // This operation is used when the helper is known to exist, + // so a `helperMissing` fallback is not required. + invokeKnownHelper: function invokeKnownHelper(paramSize, name) { + var helper = this.setupHelper(paramSize, name); + this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); + }, + + // [invokeAmbiguous] + // + // On stack, before: hash, inverse, program, params..., ... + // On stack, after: result of disambiguation + // + // This operation is used when an expression like `{{foo}}` + // is provided, but we don't know at compile-time whether it + // is a helper or a path. + // + // This operation emits more code than the other options, + // and can be avoided by passing the `knownHelpers` and + // `knownHelpersOnly` flags at compile-time. + invokeAmbiguous: function invokeAmbiguous(name, helperCall) { + this.useRegister('helper'); + + var nonHelper = this.popStack(); + + this.emptyHash(); + var helper = this.setupHelper(0, name, helperCall); + + var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); + + var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; + if (!this.options.strict) { + lookup[0] = '(helper = '; + lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing')); + } + + this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); + }, + + // [invokePartial] + // + // On stack, before: context, ... + // On stack after: result of partial invocation + // + // This operation pops off a context, invokes a partial with that context, + // and pushes the result of the invocation back. + invokePartial: function invokePartial(isDynamic, name, indent) { + var params = [], + options = this.setupParams(name, 1, params); + + if (isDynamic) { + name = this.popStack(); + delete options.name; + } + + if (indent) { + options.indent = JSON.stringify(indent); + } + options.helpers = 'helpers'; + options.partials = 'partials'; + options.decorators = 'container.decorators'; + + if (!isDynamic) { + params.unshift(this.nameLookup('partials', name, 'partial')); + } else { + params.unshift(name); + } + + if (this.options.compat) { + options.depths = 'depths'; + } + options = this.objectLiteral(options); + params.push(options); + + this.push(this.source.functionCall('container.invokePartial', '', params)); + }, + + // [assignToHash] + // + // On stack, before: value, ..., hash, ... + // On stack, after: ..., hash, ... + // + // Pops a value off the stack and assigns it to the current hash + assignToHash: function assignToHash(key) { + var value = this.popStack(), + context = undefined, + type = undefined, + id = undefined; + + if (this.trackIds) { + id = this.popStack(); + } + if (this.stringParams) { + type = this.popStack(); + context = this.popStack(); + } + + var hash = this.hash; + if (context) { + hash.contexts[key] = context; + } + if (type) { + hash.types[key] = type; + } + if (id) { + hash.ids[key] = id; + } + hash.values[key] = value; + }, + + pushId: function pushId(type, name, child) { + if (type === 'BlockParam') { + this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); + } else if (type === 'PathExpression') { + this.pushString(name); + } else if (type === 'SubExpression') { + this.pushStackLiteral('true'); + } else { + this.pushStackLiteral('null'); + } + }, + + // HELPERS + + compiler: JavaScriptCompiler, + + compileChildren: function compileChildren(environment, options) { + var children = environment.children, + child = undefined, + compiler = undefined; + + for (var i = 0, l = children.length; i < l; i++) { + child = children[i]; + compiler = new this.compiler(); // eslint-disable-line new-cap + + var existing = this.matchExistingProgram(child); + + if (existing == null) { + // Placeholder to prevent name conflicts for nested children + var index = this.context.programs.push('') - 1; + child.index = index; + child.name = 'program' + index; + this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); + this.context.decorators[index] = compiler.decorators; + this.context.environments[index] = child; + + this.useDepths = this.useDepths || compiler.useDepths; + this.useBlockParams = this.useBlockParams || compiler.useBlockParams; + child.useDepths = this.useDepths; + child.useBlockParams = this.useBlockParams; + } else { + child.index = existing.index; + child.name = 'program' + existing.index; + + this.useDepths = this.useDepths || existing.useDepths; + this.useBlockParams = this.useBlockParams || existing.useBlockParams; + } + } + }, + matchExistingProgram: function matchExistingProgram(child) { + for (var i = 0, len = this.context.environments.length; i < len; i++) { + var environment = this.context.environments[i]; + if (environment && environment.equals(child)) { + return environment; + } + } + }, + + programExpression: function programExpression(guid) { + var child = this.environment.children[guid], + programParams = [child.index, 'data', child.blockParams]; + + if (this.useBlockParams || this.useDepths) { + programParams.push('blockParams'); + } + if (this.useDepths) { + programParams.push('depths'); + } + + return 'container.program(' + programParams.join(', ') + ')'; + }, + + useRegister: function useRegister(name) { + if (!this.registers[name]) { + this.registers[name] = true; + this.registers.list.push(name); + } + }, + + push: function push(expr) { + if (!(expr instanceof Literal)) { + expr = this.source.wrap(expr); + } + + this.inlineStack.push(expr); + return expr; + }, + + pushStackLiteral: function pushStackLiteral(item) { + this.push(new Literal(item)); + }, + + pushSource: function pushSource(source) { + if (this.pendingContent) { + this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); + this.pendingContent = undefined; + } + + if (source) { + this.source.push(source); + } + }, + + replaceStack: function replaceStack(callback) { + var prefix = ['('], + stack = undefined, + createdStack = undefined, + usedLiteral = undefined; + + /* istanbul ignore next */ + if (!this.isInline()) { + throw new _exception2['default']('replaceStack on non-inline'); + } + + // We want to merge the inline statement into the replacement statement via ',' + var top = this.popStack(true); + + if (top instanceof Literal) { + // Literals do not need to be inlined + stack = [top.value]; + prefix = ['(', stack]; + usedLiteral = true; + } else { + // Get or create the current stack name for use by the inline + createdStack = true; + var _name = this.incrStack(); + + prefix = ['((', this.push(_name), ' = ', top, ')']; + stack = this.topStack(); + } + + var item = callback.call(this, stack); + + if (!usedLiteral) { + this.popStack(); + } + if (createdStack) { + this.stackSlot--; + } + this.push(prefix.concat(item, ')')); + }, + + incrStack: function incrStack() { + this.stackSlot++; + if (this.stackSlot > this.stackVars.length) { + this.stackVars.push('stack' + this.stackSlot); + } + return this.topStackName(); + }, + topStackName: function topStackName() { + return 'stack' + this.stackSlot; + }, + flushInline: function flushInline() { + var inlineStack = this.inlineStack; + this.inlineStack = []; + for (var i = 0, len = inlineStack.length; i < len; i++) { + var entry = inlineStack[i]; + /* istanbul ignore if */ + if (entry instanceof Literal) { + this.compileStack.push(entry); + } else { + var stack = this.incrStack(); + this.pushSource([stack, ' = ', entry, ';']); + this.compileStack.push(stack); + } + } + }, + isInline: function isInline() { + return this.inlineStack.length; + }, + + popStack: function popStack(wrapped) { + var inline = this.isInline(), + item = (inline ? this.inlineStack : this.compileStack).pop(); + + if (!wrapped && item instanceof Literal) { + return item.value; + } else { + if (!inline) { + /* istanbul ignore next */ + if (!this.stackSlot) { + throw new _exception2['default']('Invalid stack pop'); + } + this.stackSlot--; + } + return item; + } + }, + + topStack: function topStack() { + var stack = this.isInline() ? this.inlineStack : this.compileStack, + item = stack[stack.length - 1]; + + /* istanbul ignore if */ + if (item instanceof Literal) { + return item.value; + } else { + return item; + } + }, + + contextName: function contextName(context) { + if (this.useDepths && context) { + return 'depths[' + context + ']'; + } else { + return 'depth' + context; + } + }, + + quotedString: function quotedString(str) { + return this.source.quotedString(str); + }, + + objectLiteral: function objectLiteral(obj) { + return this.source.objectLiteral(obj); + }, + + aliasable: function aliasable(name) { + var ret = this.aliases[name]; + if (ret) { + ret.referenceCount++; + return ret; + } + + ret = this.aliases[name] = this.source.wrap(name); + ret.aliasable = true; + ret.referenceCount = 1; + + return ret; + }, + + setupHelper: function setupHelper(paramSize, name, blockHelper) { + var params = [], + paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); + var foundHelper = this.nameLookup('helpers', name, 'helper'), + callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})'); + + return { + params: params, + paramsInit: paramsInit, + name: foundHelper, + callParams: [callContext].concat(params) + }; + }, + + setupParams: function setupParams(helper, paramSize, params) { + var options = {}, + contexts = [], + types = [], + ids = [], + objectArgs = !params, + param = undefined; + + if (objectArgs) { + params = []; + } + + options.name = this.quotedString(helper); + options.hash = this.popStack(); + + if (this.trackIds) { + options.hashIds = this.popStack(); + } + if (this.stringParams) { + options.hashTypes = this.popStack(); + options.hashContexts = this.popStack(); + } + + var inverse = this.popStack(), + program = this.popStack(); + + // Avoid setting fn and inverse if neither are set. This allows + // helpers to do a check for `if (options.fn)` + if (program || inverse) { + options.fn = program || 'container.noop'; + options.inverse = inverse || 'container.noop'; + } + + // The parameters go on to the stack in order (making sure that they are evaluated in order) + // so we need to pop them off the stack in reverse order + var i = paramSize; + while (i--) { + param = this.popStack(); + params[i] = param; + + if (this.trackIds) { + ids[i] = this.popStack(); + } + if (this.stringParams) { + types[i] = this.popStack(); + contexts[i] = this.popStack(); + } + } + + if (objectArgs) { + options.args = this.source.generateArray(params); + } + + if (this.trackIds) { + options.ids = this.source.generateArray(ids); + } + if (this.stringParams) { + options.types = this.source.generateArray(types); + options.contexts = this.source.generateArray(contexts); + } + + if (this.options.data) { + options.data = 'data'; + } + if (this.useBlockParams) { + options.blockParams = 'blockParams'; + } + return options; + }, + + setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { + var options = this.setupParams(helper, paramSize, params); + options.loc = JSON.stringify(this.source.currentLocation); + options = this.objectLiteral(options); + if (useRegister) { + this.useRegister('options'); + params.push('options'); + return ['options=', options]; + } else if (params) { + params.push(options); + return ''; + } else { + return options; + } + } + }; + + (function () { + var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); + + var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; + + for (var i = 0, l = reservedWords.length; i < l; i++) { + compilerWords[reservedWords[i]] = true; + } + })(); + + /** + * @deprecated May be removed in the next major version + */ + JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { + return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); + }; + + function strictLookup(requireTerminal, compiler, parts, startPartIndex, type) { + var stack = compiler.popStack(), + len = parts.length; + if (requireTerminal) { + len--; + } + + for (var i = startPartIndex; i < len; i++) { + stack = compiler.nameLookup(stack, parts[i], type); + } + + if (requireTerminal) { + return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[len]), ', ', JSON.stringify(compiler.source.currentLocation), ' )']; + } else { + return stack; + } + } + + exports['default'] = JavaScriptCompiler; + module.exports = exports['default']; + +/***/ }), +/* 91 */ +/***/ (function(module, exports, __webpack_require__) { + + /* global define, require */ + 'use strict'; + + var _Object$keys = __webpack_require__(60)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(5); + + var SourceNode = undefined; + + try { + /* istanbul ignore next */ + if (false) { + // We don't support this in AMD environments. For these environments, we assume that + // they are running on the browser and thus have no need for the source-map library. + var SourceMap = require('source-map'); + SourceNode = SourceMap.SourceNode; + } + } catch (err) {} + /* NOP */ + + /* istanbul ignore if: tested but not covered in istanbul due to dist build */ + if (!SourceNode) { + SourceNode = function (line, column, srcFile, chunks) { + this.src = ''; + if (chunks) { + this.add(chunks); + } + }; + /* istanbul ignore next */ + SourceNode.prototype = { + add: function add(chunks) { + if (_utils.isArray(chunks)) { + chunks = chunks.join(''); + } + this.src += chunks; + }, + prepend: function prepend(chunks) { + if (_utils.isArray(chunks)) { + chunks = chunks.join(''); + } + this.src = chunks + this.src; + }, + toStringWithSourceMap: function toStringWithSourceMap() { + return { code: this.toString() }; + }, + toString: function toString() { + return this.src; + } + }; + } + + function castChunk(chunk, codeGen, loc) { + if (_utils.isArray(chunk)) { + var ret = []; + + for (var i = 0, len = chunk.length; i < len; i++) { + ret.push(codeGen.wrap(chunk[i], loc)); + } + return ret; + } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { + // Handle primitives that the SourceNode will throw up on + return chunk + ''; + } + return chunk; + } + + function CodeGen(srcFile) { + this.srcFile = srcFile; + this.source = []; + } + + CodeGen.prototype = { + isEmpty: function isEmpty() { + return !this.source.length; + }, + prepend: function prepend(source, loc) { + this.source.unshift(this.wrap(source, loc)); + }, + push: function push(source, loc) { + this.source.push(this.wrap(source, loc)); + }, + + merge: function merge() { + var source = this.empty(); + this.each(function (line) { + source.add([' ', line, '\n']); + }); + return source; + }, + + each: function each(iter) { + for (var i = 0, len = this.source.length; i < len; i++) { + iter(this.source[i]); + } + }, + + empty: function empty() { + var loc = this.currentLocation || { start: {} }; + return new SourceNode(loc.start.line, loc.start.column, this.srcFile); + }, + wrap: function wrap(chunk) { + var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; + + if (chunk instanceof SourceNode) { + return chunk; + } + + chunk = castChunk(chunk, this, loc); + + return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); + }, + + functionCall: function functionCall(fn, type, params) { + params = this.generateList(params); + return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); + }, + + quotedString: function quotedString(str) { + return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 + .replace(/\u2029/g, '\\u2029') + '"'; + }, + + objectLiteral: function objectLiteral(obj) { + // istanbul ignore next + + var _this = this; + + var pairs = []; + + _Object$keys(obj).forEach(function (key) { + var value = castChunk(obj[key], _this); + if (value !== 'undefined') { + pairs.push([_this.quotedString(key), ':', value]); + } + }); + + var ret = this.generateList(pairs); + ret.prepend('{'); + ret.add('}'); + return ret; + }, + + generateList: function generateList(entries) { + var ret = this.empty(); + + for (var i = 0, len = entries.length; i < len; i++) { + if (i) { + ret.add(','); + } + + ret.add(castChunk(entries[i], this)); + } + + return ret; + }, + + generateArray: function generateArray(entries) { + var ret = this.generateList(entries); + ret.prepend('['); + ret.add(']'); + + return ret; + } + }; + + exports['default'] = CodeGen; + module.exports = exports['default']; + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/.pnpm-store/v11/files/02/76671a24205eebdb9ad1d74052d11b109dc8f2abd1d5e07073b7618d6bc1f25bee316ebef2331a7d389fae05bc2a950c8a177c11c99715fd6970a5a6cbcb64-exec b/.pnpm-store/v11/files/02/76671a24205eebdb9ad1d74052d11b109dc8f2abd1d5e07073b7618d6bc1f25bee316ebef2331a7d389fae05bc2a950c8a177c11c99715fd6970a5a6cbcb64-exec new file mode 100755 index 00000000..52b5055b --- /dev/null +++ b/.pnpm-store/v11/files/02/76671a24205eebdb9ad1d74052d11b109dc8f2abd1d5e07073b7618d6bc1f25bee316ebef2331a7d389fae05bc2a950c8a177c11c99715fd6970a5a6cbcb64-exec @@ -0,0 +1,22 @@ + + +//****************************************************************************************************************************** +// this file allows you to configure network dependencies so that the Suman test runner can check to see if all require +// network components are live and ready to be incorporated in the test. Of course, you could just run the tests and see if +// they are live, but this feature allows you to have a fail-fast up-front check that will only run once, thus avoiding +// any potential overload of any of your network components that may already be under load. +// ****************************************************************************************************************************** + + +module.exports = data => { + + return { + + dependencies:{ + + + } + + } + +}; diff --git a/.pnpm-store/v11/files/02/7da3b875a94afc69e80fcc9743463573264d24fa3199be2b336ef703793bbc27aff3f604e0d48d71cb06aecaaa92ea6df90af834a1803ec87436b146acf9db b/.pnpm-store/v11/files/02/7da3b875a94afc69e80fcc9743463573264d24fa3199be2b336ef703793bbc27aff3f604e0d48d71cb06aecaaa92ea6df90af834a1803ec87436b146acf9db new file mode 100644 index 00000000..960a1e20 --- /dev/null +++ b/.pnpm-store/v11/files/02/7da3b875a94afc69e80fcc9743463573264d24fa3199be2b336ef703793bbc27aff3f604e0d48d71cb06aecaaa92ea6df90af834a1803ec87436b146acf9db @@ -0,0 +1,198 @@ +export declare type TSumanToString = () => string; +export interface ISumanEvent { + explanation: string; + toString: TSumanToString; +} +export interface ISumanEvents { + [key: string]: ISumanEvent; +} +export declare const events: Readonly<{ + TEST_FILE_CHILD_PROCESS_EXITED: { + explanation: string; + toString: () => string; + }; + SUMAN_CONTEXT_BLOCK: { + explanation: string; + toString: () => string; + }; + SUMAN_CONTEXT_BLOCK_TAP_JSON: { + explanation: string; + toString: () => string; + }; + RUNNER_EXIT_CODE: { + explanation: string; + toString: () => string; + }; + RUNNER_EXIT_SIGNAL: { + explanation: string; + toString: () => string; + }; + RUNNER_HIT_DIRECTORY_BUT_NOT_RECURSIVE: { + explanation: string; + toString: () => string; + }; + RUNNER_EXIT_CODE_IS_ZERO: { + explanation: string; + toString: () => string; + }; + RUNNER_TEST_PATHS_CONFIRMATION: { + explanation: string; + toString: () => string; + }; + STANDARD_TABLE: { + explanation: string; + toString: () => string; + }; + RUNNER_RESULTS_TABLE: { + explanation: string; + toString: () => string; + }; + RUNNER_RESULTS_TABLE_SORTED_BY_MILLIS: { + explanation: string; + toString: () => string; + }; + RUNNER_OVERALL_RESULTS_TABLE: { + explanation: string; + toString: () => string; + }; + RUNNER_SAYS_FILE_HAS_JUST_STARTED_RUNNING: { + explanation: string; + toString: () => string; + }; + RUNNER_STARTED: { + explanation: string; + toString: () => string; + }; + RUNNER_ENDED: { + explanation: string; + toString: () => string; + }; + RUNNER_EXIT_CODE_GREATER_THAN_ZERO: { + explanation: string; + toString: () => string; + }; + RUNNER_INITIAL_SET: { + explanation: string; + toString: () => string; + }; + RUNNER_OVERALL_SET: { + explanation: string; + toString: () => string; + }; + RUNNER_ASCII_LOGO: { + explanation: string; + toString: () => string; + }; + USING_SERVER_MARKED_BY_HOSTNAME: { + explanation: string; + toString: () => string; + }; + USING_FALLBACK_SERVER: { + explanation: string; + toString: () => string; + }; + USING_DEFAULT_SERVER: { + explanation: string; + toString: () => string; + }; + TEST_CASE_STUBBED: { + explanation: string; + toString: () => string; + }; + TEST_CASE_SKIPPED: { + explanation: string; + toString: () => string; + }; + TEST_CASE_PASS: { + explanation: string; + toString: () => string; + }; + TEST_CASE_FAIL: { + explanation: string; + toString: () => string; + }; + TEST_CASE_END: { + explanation: string; + toString: () => string; + }; + TEST_CASE_STUBBED_TAP_JSON: { + explanation: string; + toString: () => string; + }; + TEST_CASE_SKIPPED_TAP_JSON: { + explanation: string; + toString: () => string; + }; + TEST_CASE_PASS_TAP_JSON: { + explanation: string; + toString: () => string; + }; + TEST_CASE_FAIL_TAP_JSON: { + explanation: string; + toString: () => string; + }; + TEST_CASE_END_TAP_JSON: { + explanation: string; + toString: () => string; + }; + FILENAME_DOES_NOT_MATCH_NONE: { + explanation: string; + toString: () => string; + }; + FILENAME_DOES_NOT_MATCH_ALL: { + explanation: string; + toString: () => string; + }; + FILENAME_DOES_NOT_MATCH_ANY: { + explanation: string; + toString: () => string; + }; + SUITE_SKIPPED: { + explanation: string; + toString: () => string; + }; + SUITE_END: { + explanation: string; + toString: () => string; + }; + TEST_END: { + explanation: string; + toString: () => string; + }; + TAP_COMPLETE: { + explanation: string; + toString: () => string; + }; + FILE_IS_NOT_DOT_JS: { + explanation: string; + toString: () => string; + }; + FATAL_TEST_ERROR: { + explanation: string; + toString: () => string; + }; + USING_STANDARD_REPORTER: { + explanation: string; + toString: () => string; + }; + USING_SQLITE_REPORTER: { + explanation: string; + toString: () => string; + }; + ERRORS_ONLY_OPTION: { + explanation: string; + toString: () => string; + }; + SUMAN_VERSION: { + explanation: string; + toString: () => string; + }; + NODE_VERSION: { + explanation: string; + toString: () => string; + }; + META_TEST_ENDED: { + explanation: string; + toString: () => string; + }; +}>; diff --git a/.pnpm-store/v11/files/02/7ee4b681c14e0f93f6e7f2bf8832509075ac5944c92336abe343dea67cbdf0628a19fc7804cb9632592a957b3be1ae0be43de6091cb64b548437764b29c10f b/.pnpm-store/v11/files/02/7ee4b681c14e0f93f6e7f2bf8832509075ac5944c92336abe343dea67cbdf0628a19fc7804cb9632592a957b3be1ae0be43de6091cb64b548437764b29c10f new file mode 100644 index 00000000..09f88929 --- /dev/null +++ b/.pnpm-store/v11/files/02/7ee4b681c14e0f93f6e7f2bf8832509075ac5944c92336abe343dea67cbdf0628a19fc7804cb9632592a957b3be1ae0be43de6091cb64b548437764b29c10f @@ -0,0 +1,77 @@ +{ + "name": "repeat-string", + "description": "Repeat the given string n times. Fastest implementation for repeating a string.", + "version": "1.6.1", + "homepage": "https://github.com/jonschlinkert/repeat-string", + "author": "Jon Schlinkert (http://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://github.com/doowb)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Linus Unnebäck (http://linus.unnebäck.se)", + "Thijs Busser (http://tbusser.net)", + "Titus (wooorm.com)" + ], + "repository": "jonschlinkert/repeat-string", + "bugs": { + "url": "https://github.com/jonschlinkert/repeat-string/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "ansi-cyan": "^0.1.1", + "benchmarked": "^0.2.5", + "gulp-format-md": "^0.1.11", + "isobject": "^2.1.0", + "mocha": "^3.1.2", + "repeating": "^3.0.0", + "text-table": "^0.2.0", + "yargs-parser": "^4.0.2" + }, + "keywords": [ + "fast", + "fastest", + "fill", + "left", + "left-pad", + "multiple", + "pad", + "padding", + "repeat", + "repeating", + "repetition", + "right", + "right-pad", + "string", + "times" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "repeat-element" + ] + }, + "helpers": [ + "./benchmark/helper.js" + ], + "reflinks": [ + "verb" + ] + } +} diff --git a/.pnpm-store/v11/files/02/98a3843d9f7d5eb0e8343a3ee501ecd99e634beb67fb740ae39fb90f1d2e0a2a3eee460a761d99f00a5ccbade52a4cdef6b38236fa9689c7905d04117adb29 b/.pnpm-store/v11/files/02/98a3843d9f7d5eb0e8343a3ee501ecd99e634beb67fb740ae39fb90f1d2e0a2a3eee460a761d99f00a5ccbade52a4cdef6b38236fa9689c7905d04117adb29 new file mode 100644 index 00000000..b4d5e50f --- /dev/null +++ b/.pnpm-store/v11/files/02/98a3843d9f7d5eb0e8343a3ee501ecd99e634beb67fb740ae39fb90f1d2e0a2a3eee460a761d99f00a5ccbade52a4cdef6b38236fa9689c7905d04117adb29 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPath', require('../toPath'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/02/a7f79930d3ad640fec8a400edc1d9ece881d24680e581d8c98a05ff23dbfb8c14af94aab2cfc48d884821c16c042c47fe725e9617cc8d1bee5bdd1b44fedc5 b/.pnpm-store/v11/files/02/a7f79930d3ad640fec8a400edc1d9ece881d24680e581d8c98a05ff23dbfb8c14af94aab2cfc48d884821c16c042c47fe725e9617cc8d1bee5bdd1b44fedc5 new file mode 100644 index 00000000..7e481e07 --- /dev/null +++ b/.pnpm-store/v11/files/02/a7f79930d3ad640fec8a400edc1d9ece881d24680e581d8c98a05ff23dbfb8c14af94aab2cfc48d884821c16c042c47fe725e9617cc8d1bee5bdd1b44fedc5 @@ -0,0 +1,43 @@ +/*! + * array-unique + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +module.exports = function unique(arr) { + if (!Array.isArray(arr)) { + throw new TypeError('array-unique expects an array.'); + } + + var len = arr.length; + var i = -1; + + while (i++ < len) { + var j = i + 1; + + for (; j < arr.length; ++j) { + if (arr[i] === arr[j]) { + arr.splice(j--, 1); + } + } + } + return arr; +}; + +module.exports.immutable = function uniqueImmutable(arr) { + if (!Array.isArray(arr)) { + throw new TypeError('array-unique expects an array.'); + } + + var arrLen = arr.length; + var newArr = new Array(arrLen); + + for (var i = 0; i < arrLen; i++) { + newArr[i] = arr[i]; + } + + return module.exports(newArr); +}; diff --git a/.pnpm-store/v11/files/02/bcee5b464b3061f6e38acbc38a60a2b7e15b70e2bfadf0304d728bdadad4352616074c052a40b98376abe97ab9f20423bb486611e4ec8b01e4b6aeb1ae7069 b/.pnpm-store/v11/files/02/bcee5b464b3061f6e38acbc38a60a2b7e15b70e2bfadf0304d728bdadad4352616074c052a40b98376abe97ab9f20423bb486611e4ec8b01e4b6aeb1ae7069 new file mode 100644 index 00000000..367a26fd --- /dev/null +++ b/.pnpm-store/v11/files/02/bcee5b464b3061f6e38acbc38a60a2b7e15b70e2bfadf0304d728bdadad4352616074c052a40b98376abe97ab9f20423bb486611e4ec8b01e4b6aeb1ae7069 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/02/cffa099cb5316e803dce8b8033079ab6c2bb0beab50537ac396a6a524cc54ffe078bb7d994e23c761db595a5d168003da84cbeb2a150d0b4e0a84cece35304 b/.pnpm-store/v11/files/02/cffa099cb5316e803dce8b8033079ab6c2bb0beab50537ac396a6a524cc54ffe078bb7d994e23c761db595a5d168003da84cbeb2a150d0b4e0a84cece35304 new file mode 100644 index 00000000..1f904c51 --- /dev/null +++ b/.pnpm-store/v11/files/02/cffa099cb5316e803dce8b8033079ab6c2bb0beab50537ac396a6a524cc54ffe078bb7d994e23c761db595a5d168003da84cbeb2a150d0b4e0a84cece35304 @@ -0,0 +1,37 @@ +var baseRest = require('./_baseRest'), + isIterateeCall = require('./_isIterateeCall'); + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; diff --git a/.pnpm-store/v11/files/02/d3acfc1a1d3eede83f086feeab231c2e0cfe189e4cdb6ed6cb1ae9874b0ed939b235f7e602fe585e04e2a6f57585957b3613715b6ea20535a7300ac822595a b/.pnpm-store/v11/files/02/d3acfc1a1d3eede83f086feeab231c2e0cfe189e4cdb6ed6cb1ae9874b0ed939b235f7e602fe585e04e2a6f57585957b3613715b6ea20535a7300ac822595a new file mode 100644 index 00000000..dc41d089 --- /dev/null +++ b/.pnpm-store/v11/files/02/d3acfc1a1d3eede83f086feeab231c2e0cfe189e4cdb6ed6cb1ae9874b0ed939b235f7e602fe585e04e2a6f57585957b3613715b6ea20535a7300ac822595a @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isDate', require('../isDate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/02/e7ca2ed87fb50829ff3229ec8dc3f8dcc687f94140e34a8b248831ce788677da20899e3ba513c2d53a7469ca2b87721ada2f5163236c4d0fe41c30f1975023 b/.pnpm-store/v11/files/02/e7ca2ed87fb50829ff3229ec8dc3f8dcc687f94140e34a8b248831ce788677da20899e3ba513c2d53a7469ca2b87721ada2f5163236c4d0fe41c30f1975023 new file mode 100644 index 00000000..e00166c2 --- /dev/null +++ b/.pnpm-store/v11/files/02/e7ca2ed87fb50829ff3229ec8dc3f8dcc687f94140e34a8b248831ce788677da20899e3ba513c2d53a7469ca2b87721ada2f5163236c4d0fe41c30f1975023 @@ -0,0 +1 @@ +module.exports = require('./assignIn'); diff --git a/.pnpm-store/v11/files/02/fca05d0113c2d518a10c8facf3043f10607fce94fa227feec7df7acba651ca7cbef1cf9802b6ddfe6c45a7d7fd727cc36469b4174bdf62b85606c3ac0ddff5 b/.pnpm-store/v11/files/02/fca05d0113c2d518a10c8facf3043f10607fce94fa227feec7df7acba651ca7cbef1cf9802b6ddfe6c45a7d7fd727cc36469b4174bdf62b85606c3ac0ddff5 new file mode 100644 index 00000000..8634cab1 --- /dev/null +++ b/.pnpm-store/v11/files/02/fca05d0113c2d518a10c8facf3043f10607fce94fa227feec7df7acba651ca7cbef1cf9802b6ddfe6c45a7d7fd727cc36469b4174bdf62b85606c3ac0ddff5 @@ -0,0 +1,17259 @@ +/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ +;(function() { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.18.1'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', + FUNC_ERROR_TEXT = 'Expected a function', + INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`', + INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used as default options for `_.truncate`. */ + var DEFAULT_TRUNC_LENGTH = 30, + DEFAULT_TRUNC_OMISSION = '...'; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295, + MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, + HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + domExcTag = '[object DOMException]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]', + weakSetTag = '[object WeakSet]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match empty string literals in compiled template source. */ + var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match template delimiters. */ + var reEscape = /<%-([\s\S]+?)%>/g, + reEvaluate = /<%([\s\S]+?)%>/g, + reInterpolate = /<%=([\s\S]+?)%>/g; + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, + reHasRegExpChar = RegExp(reRegExpChar.source); + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match words composed of alphanumeric characters. */ + var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; + + /** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ + var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ + var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to match Latin Unicode letters (excluding mathematical operators). */ + var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; + + /** Used to ensure capturing order of template delimiters. */ + var reNoMatch = /($^)/; + + /** Used to match unescaped characters in compiled string literals. */ + var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsDingbatRange = '\\u2700-\\u27bf', + rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', + rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', + rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', + rsPunctuationRange = '\\u2000-\\u206f', + rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', + rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', + rsVarRange = '\\ufe0e\\ufe0f', + rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; + + /** Used to compose unicode capture groups. */ + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', + rsBreak = '[' + rsBreakRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsDigits = '\\d+', + rsDingbat = '[' + rsDingbatRange + ']', + rsLower = '[' + rsLowerRange + ']', + rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsUpper = '[' + rsUpperRange + ']', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', + rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', + reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', + rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + + /** + * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and + * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). + */ + var reComboMark = RegExp(rsCombo, 'g'); + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** Used to match complex or compound words. */ + var reUnicodeWord = RegExp([ + rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', + rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, + rsUpper + '+' + rsOptContrUpper, + rsOrdUpper, + rsOrdLower, + rsDigits, + rsEmoji + ].join('|'), 'g'); + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to detect strings that need a more robust regexp to match words. */ + var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; + + /** Used to assign default `context` object properties. */ + var contextProps = [ + 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', + 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', + 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', + 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', + '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' + ]; + + /** Used to make template sourceURLs easier to identify. */ + var templateCounter = -1; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map Latin Unicode letters to basic Latin letters. */ + var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' + }; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Used to escape characters for inclusion in compiled string literals. */ + var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, + nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.forEachRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEachRight(array, iteratee) { + var length = array == null ? 0 : array.length; + + while (length--) { + if (iteratee(array[length], length, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } + return true; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.reduceRight` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the last element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduceRight(array, iteratee, accumulator, initAccum) { + var length = array == null ? 0 : array.length; + if (initAccum && length) { + accumulator = array[--length]; + } + while (length--) { + accumulator = iteratee(accumulator, array[length], length, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * Splits an ASCII `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function asciiWords(string) { + return string.match(reAsciiWord) || []; + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function(value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * This function is like `baseIndexOf` except that it accepts a comparator. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @param {Function} comparator The comparator invoked per element. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOfWith(array, value, fromIndex, comparator) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (comparator(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ + function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function(key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function(value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.sum` and `_.sumBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the sum. + */ + function baseSum(array, iteratee) { + var result, + index = -1, + length = array.length; + + while (++index < length) { + var current = iteratee(array[index]); + if (current !== undefined) { + result = result === undefined ? current : (result + current); + } + } + return result; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array + * of key-value pairs for `object` corresponding to the property names of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the key-value pairs. + */ + function baseToPairs(object, props) { + return arrayMap(props, function(key) { + return [key, object[key]]; + }); + } + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ + var deburrLetter = basePropertyOf(deburredLetters); + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Checks if `string` contains a word composed of Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a word is found, else `false`. + */ + function hasUnicodeWord(string) { + return reHasUnicodeWord.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; + } + + /** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ + function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * A specialized version of `_.lastIndexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictLastIndexOf(array, value, fromIndex) { + var index = fromIndex + 1; + while (index--) { + if (array[index] === value) { + return index; + } + } + return index; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Splits a Unicode `string` into an array of its words. + * + * @private + * @param {string} The string to inspect. + * @returns {Array} Returns the words of `string`. + */ + function unicodeWords(string) { + return string.match(reUnicodeWord) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** + * Create a new pristine `lodash` function using the `context` object. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Util + * @param {Object} [context=root] The context object. + * @returns {Function} Returns a new `lodash` function. + * @example + * + * _.mixin({ 'foo': _.constant('foo') }); + * + * var lodash = _.runInContext(); + * lodash.mixin({ 'bar': lodash.constant('bar') }); + * + * _.isFunction(_.foo); + * // => true + * _.isFunction(_.bar); + * // => false + * + * lodash.isFunction(lodash.foo); + * // => false + * lodash.isFunction(lodash.bar); + * // => true + * + * // Create a suped-up `defer` in Node.js. + * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; + */ + var runInContext = (function runInContext(context) { + context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); + + /** Built-in constructor references. */ + var Array = context.Array, + Date = context.Date, + Error = context.Error, + Function = context.Function, + Math = context.Math, + Object = context.Object, + RegExp = context.RegExp, + String = context.String, + TypeError = context.TypeError; + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = context['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? context.Buffer : undefined, + Symbol = context.Symbol, + Uint8Array = context.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** Mocked built-ins. */ + var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, + ctxNow = Date && Date.now !== root.Date.now && Date.now, + ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = context.isFinite, + nativeJoin = arrayProto.join, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeParseInt = context.parseInt, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(context, 'DataView'), + Map = getNative(context, 'Map'), + Promise = getNative(context, 'Promise'), + Set = getNative(context, 'Set'), + WeakMap = getNative(context, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function() { + function object() {} + return function(proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + /** + * By default, the template delimiters used by lodash are like those in + * embedded Ruby (ERB) as well as ES2015 template strings. Change the + * following template settings to use alternative delimiters. + * + * **Security:** See + * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md) + * — `_.template` is insecure and will be removed in v5. + * + * @static + * @memberOf _ + * @type {Object} + */ + lodash.templateSettings = { + + /** + * Used to detect `data` property values to be HTML-escaped. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'escape': reEscape, + + /** + * Used to detect code to be evaluated. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'evaluate': reEvaluate, + + /** + * Used to detect `data` property values to inject. + * + * @memberOf _.templateSettings + * @type {RegExp} + */ + 'interpolate': reInterpolate, + + /** + * Used to reference the data object in the template text. + * + * @memberOf _.templateSettings + * @type {string} + */ + 'variable': '', + + /** + * Used to import variables into the compiled template. + * + * @memberOf _.templateSettings + * @type {Object} + */ + 'imports': { + + /** + * A reference to the `lodash` function. + * + * @memberOf _.templateSettings.imports + * @type {Function} + */ + '_': lodash + } + }; + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function(subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + } else if (isMap(value)) { + value.forEach(function(subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function(subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.conforms` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property predicates to conform to. + * @returns {Function} Returns the new spec function. + */ + function baseConforms(source) { + var props = keys(source); + return function(object) { + return baseConformsTo(object, source, props); + }; + } + + /** + * The base implementation of `_.conformsTo` which accepts `props` to check. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + */ + function baseConformsTo(object, source, props) { + var length = props.length; + if (object == null) { + return !length; + } + object = Object(object); + while (length--) { + var key = props[length], + predicate = source[key], + value = object[key]; + + if ((value === undefined && !(key in object)) || !predicate(value)) { + return false; + } + } + return true; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function() { func.apply(undefined, args); }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } + else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } + else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEachRight = createBaseEach(baseForOwnRight, true); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.fill` without an iteratee call guard. + * + * @private + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + */ + function baseFill(array, value, start, end) { + var length = array.length; + + start = toInteger(start); + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = (end === undefined || end > length) ? length : toInteger(end); + if (end < 0) { + end += length; + } + end = start > end ? 0 : toLength(end); + while (start < end) { + array[start++] = value; + } + return array; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function(key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ + function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function(value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ + function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function(srcValue, key) { + stack || (stack = new Stack); + if (isObject(srcValue)) { + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } + else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } + else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } + else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } + else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } + else { + newValue = []; + } + } + else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } + else if (!isObject(objValue) || isFunction(objValue)) { + newValue = initCloneObject(srcValue); + } + } + else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.nth` which doesn't coerce arguments. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + if (iteratees.length) { + iteratees = arrayMap(iteratees, function(iteratee) { + if (isArray(iteratee)) { + return function(value) { + return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); + }; + } + return iteratee; + }); + } else { + iteratees = [identity]; + } + + var index = -1; + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.pullAllBy` without support for iteratee + * shorthands. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + */ + function basePullAll(array, values, iteratee, comparator) { + var indexOf = comparator ? baseIndexOfWith : baseIndexOf, + index = -1, + length = values.length, + seen = array; + + if (array === values) { + values = copyArray(values); + } + if (iteratee) { + seen = arrayMap(array, baseUnary(iteratee)); + } + while (++index < length) { + var fromIndex = 0, + value = values[index], + computed = iteratee ? iteratee(value) : value; + + while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { + if (seen !== array) { + splice.call(seen, fromIndex, 1); + } + splice.call(array, fromIndex, 1); + } + } + return array; + } + + /** + * The base implementation of `_.pullAt` without support for individual + * indexes or capturing the removed elements. + * + * @private + * @param {Array} array The array to modify. + * @param {number[]} indexes The indexes of elements to remove. + * @returns {Array} Returns `array`. + */ + function basePullAt(array, indexes) { + var length = array ? indexes.length : 0, + lastIndex = length - 1; + + while (length--) { + var index = indexes[length]; + if (length == lastIndex || index !== previous) { + var previous = index; + if (isIndex(index)) { + splice.call(array, index, 1); + } else { + baseUnset(array, index); + } + } + } + return array; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ + function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values(collection)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (key === '__proto__' || key === 'constructor' || key === 'prototype') { + return object; + } + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function(func, data) { + metaMap.set(func, data); + return func; + }; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values(collection)); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which + * performs a binary search of `array` to determine the index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndex(array, value, retHighest) { + var low = 0, + high = array == null ? low : array.length; + + if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { + while (low < high) { + var mid = (low + high) >>> 1, + computed = array[mid]; + + if (computed !== null && !isSymbol(computed) && + (retHighest ? (computed <= value) : (computed < value))) { + low = mid + 1; + } else { + high = mid; + } + } + return high; + } + return baseSortedIndexBy(array, value, identity, retHighest); + } + + /** + * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` + * which invokes `iteratee` for `value` and each element of `array` to compute + * their sort ranking. The iteratee is invoked with one argument; (value). + * + * @private + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} iteratee The iteratee invoked per element. + * @param {boolean} [retHighest] Specify returning the highest qualified index. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + */ + function baseSortedIndexBy(array, value, iteratee, retHighest) { + var low = 0, + high = array == null ? 0 : array.length; + if (high === 0) { + return 0; + } + + value = iteratee(value); + var valIsNaN = value !== value, + valIsNull = value === null, + valIsSymbol = isSymbol(value), + valIsUndefined = value === undefined; + + while (low < high) { + var mid = nativeFloor((low + high) / 2), + computed = iteratee(array[mid]), + othIsDefined = computed !== undefined, + othIsNull = computed === null, + othIsReflexive = computed === computed, + othIsSymbol = isSymbol(computed); + + if (valIsNaN) { + var setLow = retHighest || othIsReflexive; + } else if (valIsUndefined) { + setLow = othIsReflexive && (retHighest || othIsDefined); + } else if (valIsNull) { + setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); + } else if (valIsSymbol) { + setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); + } else if (othIsNull || othIsSymbol) { + setLow = false; + } else { + setLow = retHighest ? (computed <= value) : (computed < value); + } + if (setLow) { + low = mid + 1; + } else { + high = mid; + } + } + return nativeMin(high, MAX_ARRAY_INDEX); + } + + /** + * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseSortedUniq(array, iteratee) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + if (!index || !eq(computed, seen)) { + var seen = computed; + result[resIndex++] = value === 0 ? 0 : value; + } + } + return result; + } + + /** + * The base implementation of `_.toNumber` which doesn't ensure correct + * conversions of binary, hexadecimal, or octal string values. + * + * @private + * @param {*} value The value to process. + * @returns {number} Returns the number. + */ + function baseToNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + return +value; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } + else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } + else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } + else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + + // Prevent prototype pollution: + // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg + // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh + var index = -1, + length = path.length; + + if (!length) { + return true; + } + + while (++index < length) { + var key = toKey(path[index]); + + // Always block "__proto__" anywhere in the path if it's not expected + if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) { + return false; + } + + // Block constructor/prototype as non-terminal traversal keys to prevent + // escaping the object graph into built-in constructors and prototypes. + if ((key === 'constructor' || key === 'prototype') && index < length - 1) { + return false; + } + } + + var obj = parent(object, path); + return obj == null || delete obj[toKey(last(path))]; + } + + /** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); + } + + /** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ + function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * The base implementation of methods like `_.xor`, without support for + * iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of values. + */ + function baseXor(arrays, iteratee, comparator) { + var length = arrays.length; + if (length < 2) { + return length ? baseUniq(arrays[0]) : []; + } + var index = -1, + result = Array(length); + + while (++index < length) { + var array = arrays[index], + othIndex = -1; + + while (++othIndex < length) { + if (othIndex != index) { + result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); + } + } + } + return baseUniq(baseFlatten(result, 1), iteratee, comparator); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + var castRest = baseRest; + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). + * + * @private + * @param {number|Object} id The timer id or timeout object of the timer to clear. + */ + var clearTimeout = ctxClearTimeout || function(id) { + return root.clearTimeout(id); + }; + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function(collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, getIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + return wrapper; + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Creates a function like `_.camelCase`. + * + * @private + * @param {Function} callback The function to combine each word. + * @returns {Function} Returns the new compounder function. + */ + function createCompounder(callback) { + return function(string) { + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); + }; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function(collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = getIteratee(predicate, 3); + collection = keys(collection); + predicate = function(key) { return iteratee(iterable[key], key, iterable); }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a `_.flow` or `_.flowRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new flow function. + */ + function createFlow(fromRight) { + return flatRest(function(funcs) { + var length = funcs.length, + index = length, + prereq = LodashWrapper.prototype.thru; + + if (fromRight) { + funcs.reverse(); + } + while (index--) { + var func = funcs[index]; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (prereq && !wrapper && getFuncName(func) == 'wrapper') { + var wrapper = new LodashWrapper([], true); + } + } + index = wrapper ? index : length; + while (++index < length) { + func = funcs[index]; + + var funcName = getFuncName(func), + data = funcName == 'wrapper' ? getData(func) : undefined; + + if (data && isLaziable(data[0]) && + data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && + !data[4].length && data[9] == 1 + ) { + wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); + } else { + wrapper = (func.length == 1 && isLaziable(func)) + ? wrapper[funcName]() + : wrapper.thru(func); + } + } + return function() { + var args = arguments, + value = args[0]; + + if (wrapper && args.length == 1 && isArray(value)) { + return wrapper.plant(value).value(); + } + var index = 0, + result = length ? funcs[index].apply(this, args) : value; + + while (++index < length) { + result = funcs[index].call(this, result); + } + return result; + }; + }); + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function(object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that performs a mathematical operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @param {number} [defaultValue] The value used for `undefined` arguments. + * @returns {Function} Returns the new mathematical operation function. + */ + function createMathOperation(operator, defaultValue) { + return function(value, other) { + var result; + if (value === undefined && other === undefined) { + return defaultValue; + } + if (value !== undefined) { + result = value; + } + if (other !== undefined) { + if (result === undefined) { + return other; + } + if (typeof value == 'string' || typeof other == 'string') { + value = baseToString(value); + other = baseToString(other); + } else { + value = baseToNumber(value); + other = baseToNumber(other); + } + result = operator(value, other); + } + return result; + }; + } + + /** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ + function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(getIteratee())); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); + } + + /** + * Creates the padding for `string` based on `length`. The `chars` string + * is truncated if the number of characters exceeds `length`. + * + * @private + * @param {number} length The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padding for `string`. + */ + function createPadding(length, chars) { + chars = chars === undefined ? ' ' : baseToString(chars); + + var charsLength = chars.length; + if (charsLength < 2) { + return charsLength ? baseRepeat(chars, length) : chars; + } + var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); + return hasUnicode(chars) + ? castSlice(stringToArray(result), 0, length).join('') + : result.slice(0, length); + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that performs a relational operation on two values. + * + * @private + * @param {Function} operator The function to perform the operation. + * @returns {Function} Returns the new relational operation function. + */ + function createRelationalOperation(operator) { + return function(value, other) { + if (!(typeof value == 'string' && typeof other == 'string')) { + value = toNumber(value); + other = toNumber(other); + } + return operator(value, other); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a function like `_.round`. + * + * @private + * @param {string} methodName The name of the `Math` method to use when rounding. + * @returns {Function} Returns the new round function. + */ + function createRound(methodName) { + var func = Math[methodName]; + return function(number, precision) { + number = toNumber(number); + precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); + if (precision && nativeIsFinite(number)) { + // Shift with exponential notation to avoid floating-point issues. + // See [MDN](https://mdn.io/round#Examples) for more details. + var pair = (toString(number) + 'e').split('e'), + value = func(pair[0] + 'e' + (+pair[1] + precision)); + + pair = (toString(value) + 'e').split('e'); + return +(pair[0] + 'e' + (+pair[1] - precision)); + } + return func(number); + }; + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); + }; + + /** + * Creates a `_.toPairs` or `_.toPairsIn` function. + * + * @private + * @param {Function} keysFunc The function to get the keys of a given object. + * @returns {Function} Returns the new pairs function. + */ + function createToPairs(keysFunc) { + return function(object) { + var tag = getTag(object); + if (tag == mapTag) { + return mapToArray(object); + } + if (tag == setTag) { + return setToPairs(object); + } + return baseToPairs(object, keysFunc(object)); + }; + } + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaults` to customize its `_.assignIn` use to assign properties + * of source objects to the destination object for all destination properties + * that resolve to `undefined`. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to assign. + * @param {Object} object The parent object of `objValue`. + * @returns {*} Returns the value to assign. + */ + function customDefaultsAssignIn(objValue, srcValue, key, object) { + if (objValue === undefined || + (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { + return srcValue; + } + return objValue; + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Check that cyclic values are equal. + var objStacked = stack.get(object); + var othStacked = stack.get(other); + if (objStacked && othStacked) { + return objStacked == other && othStacked == object; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function(func) { + return metaMap.get(func); + }; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, + * this function returns the custom method, otherwise it returns `baseIteratee`. + * If arguments are provided, the chosen function is invoked with them and + * its result is returned. + * + * @private + * @param {*} [value] The value to convert to an iteratee. + * @param {number} [arity] The arity of the created iteratee. + * @returns {Function} Returns the chosen function or its result. + */ + function getIteratee() { + var result = lodash.iteratee || iteratee; + result = result === iteratee ? baseIteratee : result; + return arguments.length ? result(arguments[0], arguments[1]) : result; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function(object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function(symbol) { + return propertyIsEnumerable.call(object, symbol); + }); + }; + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; + }; + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': start += size; break; + case 'dropRight': end -= size; break; + case 'take': end = nativeMin(end, start + size); break; + case 'takeRight': start = nativeMax(start, end - size); break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: case float64Tag: + case int8Tag: case int16Tag: case int32Tag: + case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `func` is capable of being masked. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `func` is maskable, else `false`. + */ + var isMaskable = coreJsData ? isFunction : stubFalse; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function(key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__" or "constructor". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + if (key === 'constructor' && typeof object[key] === 'function') { + return; + } + + if (key == '__proto__') { + return; + } + + return object[key]; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @returns {number|Object} Returns the timer id or timeout object. + */ + var setTimeout = ctxSetTimeout || function(func, wait) { + return root.setTimeout(func, wait); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; + }); + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `-0`, `0n`, `""`, `undefined`, and `NaN` are falsy. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `iteratee` which + * is invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * **Note:** Unlike `_.pullAllBy`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2] + * + * // The `_.property` iteratee shorthand. + * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var differenceBy = baseRest(function(array, values) { + var iteratee = last(values); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ + var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; + }); + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with `n` elements dropped from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.dropRight([1, 2, 3]); + * // => [1, 2] + * + * _.dropRight([1, 2, 3], 2); + * // => [1] + * + * _.dropRight([1, 2, 3], 5); + * // => [] + * + * _.dropRight([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function dropRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` excluding elements dropped from the end. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.dropRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney'] + * + * // The `_.matches` iteratee shorthand. + * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropRightWhile(users, ['active', false]); + * // => objects for ['barney'] + * + * // The `_.property` iteratee shorthand. + * _.dropRightWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true, true) + : []; + } + + /** + * Creates a slice of `array` excluding elements dropped from the beginning. + * Elements are dropped until `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.dropWhile(users, function(o) { return !o.active; }); + * // => objects for ['pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.dropWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.dropWhile(users, ['active', false]); + * // => objects for ['pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.dropWhile(users, 'active'); + * // => objects for ['barney', 'fred', 'pebbles'] + */ + function dropWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), true) + : []; + } + + /** + * Fills elements of `array` with `value` from `start` up to, but not + * including, `end`. + * + * **Note:** This method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Array + * @param {Array} array The array to fill. + * @param {*} value The value to fill `array` with. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.fill(array, 'a'); + * console.log(array); + * // => ['a', 'a', 'a'] + * + * _.fill(Array(3), 2); + * // => [2, 2, 2] + * + * _.fill([4, 6, 8, 10], '*', 1, 3); + * // => [4, '*', '*', 10] + */ + function fill(array, value, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { + start = 0; + end = length; + } + return baseFill(array, value, start, end); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, getIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, getIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Recursively flatten `array` up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Array + * @param {Array} array The array to flatten. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * var array = [1, [2, [3, [4]], 5]]; + * + * _.flattenDepth(array, 1); + * // => [1, 2, [3, [4]], 5] + * + * _.flattenDepth(array, 2); + * // => [1, 2, 3, [4], 5] + */ + function flattenDepth(array, depth) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(array, depth); + } + + /** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ + function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + baseAssignValue(result, pair[0], pair[1]); + } + return result; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ + var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, getIteratee(iteratee, 2)) + : []; + }); + + /** + * This method is like `_.intersection` except that it accepts `comparator` + * which is invoked to compare elements of `arrays`. The order and references + * of result values are determined by the first array. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.intersectionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }] + */ + var intersectionWith = baseRest(function(arrays) { + var comparator = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + comparator = typeof comparator == 'function' ? comparator : undefined; + if (comparator) { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, undefined, comparator) + : []; + }); + + /** + * Converts all elements in `array` into a string separated by `separator`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to convert. + * @param {string} [separator=','] The element separator. + * @returns {string} Returns the joined string. + * @example + * + * _.join(['a', 'b', 'c'], '~'); + * // => 'a~b~c' + */ + function join(array, separator) { + return array == null ? '' : nativeJoin.call(array, separator); + } + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ + function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); + } + + /** + * Gets the element at index `n` of `array`. If `n` is negative, the nth + * element from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ + var pull = baseRest(pullAll); + + /** + * This method is like `_.pull` except that it accepts an array of values to remove. + * + * **Note:** Unlike `_.difference`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pullAll(array, ['a', 'c']); + * console.log(array); + * // => ['b', 'b'] + */ + function pullAll(array, values) { + return (array && array.length && values && values.length) + ? basePullAll(array, values) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `iteratee` which is + * invoked for each element of `array` and `values` to generate the criterion + * by which they're compared. The iteratee is invoked with one argument: (value). + * + * **Note:** Unlike `_.differenceBy`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; + * + * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); + * console.log(array); + * // => [{ 'x': 2 }] + */ + function pullAllBy(array, values, iteratee) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, getIteratee(iteratee, 2)) + : array; + } + + /** + * This method is like `_.pullAll` except that it accepts `comparator` which + * is invoked to compare elements of `array` to `values`. The comparator is + * invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.differenceWith`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Array} values The values to remove. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns `array`. + * @example + * + * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; + * + * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); + * console.log(array); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] + */ + function pullAllWith(array, values, comparator) { + return (array && array.length && values && values.length) + ? basePullAll(array, values, undefined, comparator) + : array; + } + + /** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ + var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; + }); + + /** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ + function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = getIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Uses a binary search to determine the lowest index at which `value` + * should be inserted into `array` in order to maintain its sort order. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedIndex([30, 50], 40); + * // => 1 + */ + function sortedIndex(array, value) { + return baseSortedIndex(array, value); + } + + /** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ + function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); + } + + /** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ + function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ + function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); + } + + /** + * This method is like `_.sortedLastIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 1 + * + * // The `_.property` iteratee shorthand. + * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); + * // => 1 + */ + function sortedLastIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); + } + + /** + * This method is like `_.lastIndexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); + * // => 3 + */ + function sortedLastIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value, true) - 1; + if (eq(array[index], value)) { + return index; + } + } + return -1; + } + + /** + * This method is like `_.uniq` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniq([1, 1, 2]); + * // => [1, 2] + */ + function sortedUniq(array) { + return (array && array.length) + ? baseSortedUniq(array) + : []; + } + + /** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ + function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, getIteratee(iteratee, 2)) + : []; + } + + /** + * Gets all but the first element of `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.tail([1, 2, 3]); + * // => [2, 3] + */ + function tail(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 1, length) : []; + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates a slice of `array` with elements taken from the end. Elements are + * taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.takeRightWhile(users, function(o) { return !o.active; }); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.matches` iteratee shorthand. + * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); + * // => objects for ['pebbles'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeRightWhile(users, ['active', false]); + * // => objects for ['fred', 'pebbles'] + * + * // The `_.property` iteratee shorthand. + * _.takeRightWhile(users, 'active'); + * // => [] + */ + function takeRightWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3), false, true) + : []; + } + + /** + * Creates a slice of `array` with elements taken from the beginning. Elements + * are taken until `predicate` returns falsey. The predicate is invoked with + * three arguments: (value, index, array). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the slice of `array`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.takeWhile(users, function(o) { return !o.active; }); + * // => objects for ['barney', 'fred'] + * + * // The `_.matches` iteratee shorthand. + * _.takeWhile(users, { 'user': 'barney', 'active': false }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.takeWhile(users, ['active', false]); + * // => objects for ['barney', 'fred'] + * + * // The `_.property` iteratee shorthand. + * _.takeWhile(users, 'active'); + * // => [] + */ + function takeWhile(array, predicate) { + return (array && array.length) + ? baseWhile(array, getIteratee(predicate, 3)) + : []; + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function(arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); + }); + + /** + * This method is like `_.union` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which uniqueness is computed. Result values are chosen from the first + * array in which the value occurs. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.unionBy([2.1], [1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + var unionBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.union` except that it accepts `comparator` which + * is invoked to compare elements of `arrays`. Result values are chosen from + * the first array in which the value occurs. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of combined values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.unionWith(objects, others, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var unionWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); + }); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `comparator` which + * is invoked to compare elements of `array`. The order of result values is + * determined by the order they occur in the array.The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.uniqWith(objects, _.isEqual); + * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] + */ + function uniqWith(array, comparator) { + comparator = typeof comparator == 'function' ? comparator : undefined; + return (array && array.length) ? baseUniq(array, undefined, comparator) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function(group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function(index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ + function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function(array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; + }); + + /** + * Creates an array of unique values that is the + * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) + * of the given arrays. The order of result values is determined by the order + * they occur in the arrays. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.without + * @example + * + * _.xor([2, 1], [2, 3]); + * // => [1, 3] + */ + var xor = baseRest(function(arrays) { + return baseXor(arrayFilter(arrays, isArrayLikeObject)); + }); + + /** + * This method is like `_.xor` except that it accepts `iteratee` which is + * invoked for each element of each `arrays` to generate the criterion by + * which by which they're compared. The order of result values is determined + * by the order they occur in the arrays. The iteratee is invoked with one + * argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [1.2, 3.4] + * + * // The `_.property` iteratee shorthand. + * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 2 }] + */ + var xorBy = baseRest(function(arrays) { + var iteratee = last(arrays); + if (isArrayLikeObject(iteratee)) { + iteratee = undefined; + } + return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); + }); + + /** + * This method is like `_.xor` except that it accepts `comparator` which is + * invoked to compare elements of `arrays`. The order of result values is + * determined by the order they occur in the arrays. The comparator is invoked + * with two arguments: (arrVal, othVal). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; + * + * _.xorWith(objects, others, _.isEqual); + * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] + */ + var xorWith = baseRest(function(arrays) { + var comparator = last(arrays); + comparator = typeof comparator == 'function' ? comparator : undefined; + return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); + }); + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /** + * This method is like `_.zipObject` except that it supports property paths. + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); + * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } + */ + function zipObjectDeep(props, values) { + return baseZipObject(props || [], values || [], baseSet); + } + + /** + * This method is like `_.zip` except that it accepts `iteratee` to specify + * how grouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @param {Function} [iteratee=_.identity] The function to combine + * grouped values. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { + * return a + b + c; + * }); + * // => [111, 222] + */ + var zipWith = baseRest(function(arrays) { + var length = arrays.length, + iteratee = length > 1 ? arrays[length - 1] : undefined; + + iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; + return unzipWith(arrays, iteratee); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; + } + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; + } + + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function(paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function(object) { return baseAt(object, paths); }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function(array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); + + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; + } + + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); + } + }); + + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + * + * // Combining several predicates using `_.overEvery` or `_.overSome`. + * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); + * // => objects for ['fred', 'barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * This method is like `_.find` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=collection.length-1] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * _.findLast([1, 2, 3, 4], function(n) { + * return n % 2 == 1; + * }); + * // => 3 + */ + var findLast = createFind(findLastIndex); + + /** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDeep([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ + function flatMapDeep(collection, iteratee) { + return baseFlatten(map(collection, iteratee), INFINITY); + } + + /** + * This method is like `_.flatMap` except that it recursively flattens the + * mapped results up to `depth` times. + * + * @static + * @memberOf _ + * @since 4.7.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {number} [depth=1] The maximum recursion depth. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [[[n, n]]]; + * } + * + * _.flatMapDepth([1, 2], duplicate, 2); + * // => [[1, 1], [2, 2]] + */ + function flatMapDepth(collection, iteratee, depth) { + depth = depth === undefined ? 1 : toInteger(depth); + return baseFlatten(map(collection, iteratee), depth); + } + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ + function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function(result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); + } + }); + + /** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ + function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); + } + + /** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ + var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; + }); + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the last element responsible for generating the key. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * var array = [ + * { 'dir': 'left', 'code': 97 }, + * { 'dir': 'right', 'code': 100 } + * ]; + * + * _.keyBy(array, function(o) { + * return String.fromCharCode(o.code); + * }); + * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } + * + * _.keyBy(array, 'dir'); + * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } + */ + var keyBy = createAggregator(function(result, value, key) { + baseAssignValue(result, key, value); + }); + + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.sortBy` except that it allows specifying the sort + * orders of the iteratees to sort by. If `orders` is unspecified, all values + * are sorted in ascending order. Otherwise, specify an order of "desc" for + * descending or "asc" for ascending sort order of corresponding values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] + * The iteratees to sort by. + * @param {string[]} [orders] The sort orders of `iteratees`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 34 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 36 } + * ]; + * + * // Sort by `user` in ascending order and by `age` in descending order. + * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ + function orderBy(collection, iteratees, orders, guard) { + if (collection == null) { + return []; + } + if (!isArray(iteratees)) { + iteratees = iteratees == null ? [] : [iteratees]; + } + orders = guard ? undefined : orders; + if (!isArray(orders)) { + orders = orders == null ? [] : [orders]; + } + return baseOrderBy(collection, iteratees, orders); + } + + /** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ + var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); + }, function() { return [[], []]; }); + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * This method is like `_.reduce` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduce + * @example + * + * var array = [[0, 1], [2, 3], [4, 5]]; + * + * _.reduceRight(array, function(flattened, other) { + * return flattened.concat(other); + * }, []); + * // => [4, 5, 2, 3, 0, 1] + */ + function reduceRight(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduceRight : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(getIteratee(predicate, 3))); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, getIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 30 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] + */ + var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + }); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = ctxNow || function() { + return root.Date.now(); + }; + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ + function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function(func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); + }); + + /** + * Creates a function that invokes the method at `object[key]` with `partials` + * prepended to the arguments it receives. + * + * This method differs from `_.bind` by allowing bound functions to reference + * methods that may be redefined or don't yet exist. See + * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) + * for more details. + * + * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Function + * @param {Object} object The object to invoke the method on. + * @param {string} key The key of the method. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * var object = { + * 'user': 'fred', + * 'greet': function(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * }; + * + * var bound = _.bindKey(object, 'greet', 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * object.greet = function(greeting, punctuation) { + * return greeting + 'ya ' + this.user + punctuation; + * }; + * + * bound('!'); + * // => 'hiya fred!' + * + * // Bound with placeholders. + * var bound = _.bindKey(object, 'greet', _, '!'); + * bound('hi'); + * // => 'hiya fred!' + */ + var bindKey = baseRest(function(object, key, partials) { + var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bindKey)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(key, bitmask, object, partials, holders); + }); + + /** + * Creates a function that accepts arguments of `func` and either invokes + * `func` returning its result, if at least `arity` number of arguments have + * been provided, or returns a function that accepts the remaining `func` + * arguments, and so on. The arity of `func` may be specified if `func.length` + * is not sufficient. + * + * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curry(abc); + * + * curried(1)(2)(3); + * // => [1, 2, 3] + * + * curried(1, 2)(3); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(1)(_, 3)(2); + * // => [1, 2, 3] + */ + function curry(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curry.placeholder; + return result; + } + + /** + * This method is like `_.curry` except that arguments are applied to `func` + * in the manner of `_.partialRight` instead of `_.partial`. + * + * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for provided arguments. + * + * **Note:** This method doesn't set the "length" property of curried functions. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to curry. + * @param {number} [arity=func.length] The arity of `func`. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new curried function. + * @example + * + * var abc = function(a, b, c) { + * return [a, b, c]; + * }; + * + * var curried = _.curryRight(abc); + * + * curried(3)(2)(1); + * // => [1, 2, 3] + * + * curried(2, 3)(1); + * // => [1, 2, 3] + * + * curried(1, 2, 3); + * // => [1, 2, 3] + * + * // Curried with placeholders. + * curried(3)(1, _)(2); + * // => [1, 2, 3] + */ + function curryRight(func, arity, guard) { + arity = guard ? undefined : arity; + var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); + result.placeholder = curryRight.placeholder; + return result; + } + + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function(func, args) { + return baseDelay(func, 1, args); + }); + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); + }); + + /** + * Creates a function that invokes `func` with arguments reversed. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to flip arguments for. + * @returns {Function} Returns the new flipped function. + * @example + * + * var flipped = _.flip(function() { + * return _.toArray(arguments); + * }); + * + * flipped('a', 'b', 'c', 'd'); + * // => ['d', 'c', 'b', 'a'] + */ + function flip(func) { + return createWrap(func, WRAP_FLIP_FLAG); + } + + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with its arguments transformed. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Function + * @param {Function} func The function to wrap. + * @param {...(Function|Function[])} [transforms=[_.identity]] + * The argument transforms. + * @returns {Function} Returns the new function. + * @example + * + * function doubled(n) { + * return n * 2; + * } + * + * function square(n) { + * return n * n; + * } + * + * var func = _.overArgs(function(x, y) { + * return [x, y]; + * }, [square, doubled]); + * + * func(9, 3); + * // => [81, 6] + * + * func(10, 5); + * // => [100, 10] + */ + var overArgs = castRest(function(func, transforms) { + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); + + var funcsLength = transforms.length; + return baseRest(function(args) { + var index = -1, + length = nativeMin(args.length, funcsLength); + + while (++index < length) { + args[index] = transforms[index].call(this, args[index]); + } + return apply(func, this, args); + }); + }); + + /** + * Creates a function that invokes `func` with `partials` prepended to the + * arguments it receives. This method is like `_.bind` except it does **not** + * alter the `this` binding. + * + * The `_.partial.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 0.2.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var sayHelloTo = _.partial(greet, 'hello'); + * sayHelloTo('fred'); + * // => 'hello fred' + * + * // Partially applied with placeholders. + * var greetFred = _.partial(greet, _, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + */ + var partial = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partial)); + return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); + }); + + /** + * This method is like `_.partial` except that partially applied arguments + * are appended to the arguments it receives. + * + * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic + * builds, may be used as a placeholder for partially applied arguments. + * + * **Note:** This method doesn't set the "length" property of partially + * applied functions. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Function + * @param {Function} func The function to partially apply arguments to. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new partially applied function. + * @example + * + * function greet(greeting, name) { + * return greeting + ' ' + name; + * } + * + * var greetFred = _.partialRight(greet, 'fred'); + * greetFred('hi'); + * // => 'hi fred' + * + * // Partially applied with placeholders. + * var sayHelloTo = _.partialRight(greet, 'hello', _); + * sayHelloTo('fred'); + * // => 'hello fred' + */ + var partialRight = baseRest(function(func, partials) { + var holders = replaceHolders(partials, getHolder(partialRight)); + return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); + }); + + /** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ + var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); + }); + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * create function and an array of arguments much like + * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). + * + * **Note:** This method is based on the + * [spread operator](https://mdn.io/spread_operator). + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Function + * @param {Function} func The function to spread arguments over. + * @param {number} [start=0] The start position of the spread. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.spread(function(who, what) { + * return who + ' says ' + what; + * }); + * + * say(['fred', 'hello']); + * // => 'fred says hello' + * + * var numbers = Promise.all([ + * Promise.resolve(40), + * Promise.resolve(36) + * ]); + * + * numbers.then(_.spread(function(x, y) { + * return x + y; + * })); + * // => a Promise of 76 + */ + function spread(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start == null ? 0 : nativeMax(toInteger(start), 0); + return baseRest(function(args) { + var array = args[start], + otherArgs = castSlice(args, 0, start); + + if (array) { + arrayPush(otherArgs, array); + } + return apply(func, this, otherArgs); + }); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /** + * Creates a function that accepts up to one argument, ignoring any + * additional arguments. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.unary(parseInt)); + * // => [6, 8, 10] + */ + function unary(func) { + return ary(func, 1); + } + + /** + * Creates a function that provides `value` to `wrapper` as its first + * argument. Any additional arguments provided to the function are appended + * to those provided to the `wrapper`. The wrapper is invoked with the `this` + * binding of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {*} value The value to wrap. + * @param {Function} [wrapper=identity] The wrapper function. + * @returns {Function} Returns the new function. + * @example + * + * var p = _.wrap(_.escape, function(func, text) { + * return '

' + func(text) + '

'; + * }); + * + * p('fred, barney, & pebbles'); + * // => '

fred, barney, & pebbles

' + */ + function wrap(value, wrapper) { + return partial(castFunction(wrapper), value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Casts `value` as an array if it's not one. + * + * @static + * @memberOf _ + * @since 4.4.0 + * @category Lang + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast array. + * @example + * + * _.castArray(1); + * // => [1] + * + * _.castArray({ 'a': 1 }); + * // => [{ 'a': 1 }] + * + * _.castArray('abc'); + * // => ['abc'] + * + * _.castArray(null); + * // => [null] + * + * _.castArray(undefined); + * // => [undefined] + * + * _.castArray(); + * // => [] + * + * var array = [1, 2, 3]; + * console.log(_.castArray(array) === array); + * // => true + */ + function castArray() { + if (!arguments.length) { + return []; + } + var value = arguments[0]; + return isArray(value) ? value : [value]; + } + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it accepts `customizer` which + * is invoked to produce the cloned value. If `customizer` returns `undefined`, + * cloning is handled by the method instead. The `customizer` is invoked with + * up to four arguments; (value [, index|key, object, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the cloned value. + * @see _.cloneDeepWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(false); + * } + * } + * + * var el = _.cloneWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 0 + */ + function cloneWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.cloneWith` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @param {Function} [customizer] The function to customize cloning. + * @returns {*} Returns the deep cloned value. + * @see _.cloneWith + * @example + * + * function customizer(value) { + * if (_.isElement(value)) { + * return value.cloneNode(true); + * } + * } + * + * var el = _.cloneDeepWith(document.body, customizer); + * + * console.log(el === document.body); + * // => false + * console.log(el.nodeName); + * // => 'BODY' + * console.log(el.childNodes.length); + * // => 20 + */ + function cloneDeepWith(value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); + } + + /** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ + function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is greater than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + * @see _.lt + * @example + * + * _.gt(3, 1); + * // => true + * + * _.gt(3, 3); + * // => false + * + * _.gt(1, 3); + * // => false + */ + var gt = createRelationalOperation(baseGt); + + /** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ + var gte = createRelationalOperation(function(value, other) { + return value >= other; + }); + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is classified as an `ArrayBuffer` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + * @example + * + * _.isArrayBuffer(new ArrayBuffer(2)); + * // => true + * + * _.isArrayBuffer(new Array(2)); + * // => false + */ + var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is likely a DOM element. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. + * @example + * + * _.isElement(document.body); + * // => true + * + * _.isElement(''); + * // => false + */ + function isElement(value) { + return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); + } + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } + return true; + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * This method is like `_.isEqual` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with up to + * six arguments: (objValue, othValue [, index|key, object, other, stack]). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, othValue) { + * if (isGreeting(objValue) && isGreeting(othValue)) { + * return true; + * } + * } + * + * var array = ['hello', 'goodbye']; + * var other = ['hi', 'goodbye']; + * + * _.isEqualWith(array, other, customizer); + * // => true + */ + function isEqualWith(value, other, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + var result = customizer ? customizer(value, other) : undefined; + return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; + } + + /** + * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, + * `SyntaxError`, `TypeError`, or `URIError` object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an error object, else `false`. + * @example + * + * _.isError(new Error); + * // => true + * + * _.isError(Error); + * // => false + */ + function isError(value) { + if (!isObjectLike(value)) { + return false; + } + var tag = baseGetTag(value); + return tag == errorTag || tag == domExcTag || + (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is an integer. + * + * **Note:** This method is based on + * [`Number.isInteger`](https://mdn.io/Number/isInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an integer, else `false`. + * @example + * + * _.isInteger(3); + * // => true + * + * _.isInteger(Number.MIN_VALUE); + * // => false + * + * _.isInteger(Infinity); + * // => false + * + * _.isInteger('3'); + * // => false + */ + function isInteger(value) { + return typeof value == 'number' && value == toInteger(value); + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ + function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); + } + + /** + * This method is like `_.isMatch` except that it accepts `customizer` which + * is invoked to compare values. If `customizer` returns `undefined`, comparisons + * are handled by the method instead. The `customizer` is invoked with five + * arguments: (objValue, srcValue, index|key, object, source). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * function isGreeting(value) { + * return /^h(?:i|ello)$/.test(value); + * } + * + * function customizer(objValue, srcValue) { + * if (isGreeting(objValue) && isGreeting(srcValue)) { + * return true; + * } + * } + * + * var object = { 'greeting': 'hello' }; + * var source = { 'greeting': 'hi' }; + * + * _.isMatchWith(object, source, customizer); + * // => true + */ + function isMatchWith(object, source, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return baseIsMatch(object, source, getMatchData(source), customizer); + } + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is a pristine native function. + * + * **Note:** This method can't reliably detect native functions in the presence + * of the core-js package because core-js circumvents this kind of detection. + * Despite multiple requests, the core-js maintainer has made it clear: any + * attempt to fix the detection will be obstructed. As a result, we're left + * with little choice but to throw an error. Unfortunately, this also affects + * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), + * which rely on core-js. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + * @example + * + * _.isNative(Array.prototype.push); + * // => true + * + * _.isNative(_); + * // => false + */ + function isNative(value) { + if (isMaskable(value)) { + throw new Error(CORE_ERROR_TEXT); + } + return baseIsNative(value); + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is `null` or `undefined`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is nullish, else `false`. + * @example + * + * _.isNil(null); + * // => true + * + * _.isNil(void 0); + * // => true + * + * _.isNil(NaN); + * // => false + */ + function isNil(value) { + return value == null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 + * double precision number which isn't the result of a rounded unsafe integer. + * + * **Note:** This method is based on + * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. + * @example + * + * _.isSafeInteger(3); + * // => true + * + * _.isSafeInteger(Number.MIN_VALUE); + * // => false + * + * _.isSafeInteger(Infinity); + * // => false + * + * _.isSafeInteger('3'); + * // => false + */ + function isSafeInteger(value) { + return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Checks if `value` is classified as a `WeakMap` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. + * @example + * + * _.isWeakMap(new WeakMap); + * // => true + * + * _.isWeakMap(new Map); + * // => false + */ + function isWeakMap(value) { + return isObjectLike(value) && getTag(value) == weakMapTag; + } + + /** + * Checks if `value` is classified as a `WeakSet` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. + * @example + * + * _.isWeakSet(new WeakSet); + * // => true + * + * _.isWeakSet(new Set); + * // => false + */ + function isWeakSet(value) { + return isObjectLike(value) && baseGetTag(value) == weakSetTag; + } + + /** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ + var lt = createRelationalOperation(baseLt); + + /** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ + var lte = createRelationalOperation(function(value, other) { + return value <= other; + }); + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to an integer suitable for use as the length of an + * array-like object. + * + * **Note:** This method is based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toLength(3.2); + * // => 3 + * + * _.toLength(Number.MIN_VALUE); + * // => 0 + * + * _.toLength(Infinity); + * // => 4294967295 + * + * _.toLength('3.2'); + * // => 3 + */ + function toLength(value) { + return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a safe integer. A safe integer can be compared and + * represented correctly. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toSafeInteger(3.2); + * // => 3 + * + * _.toSafeInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toSafeInteger(Infinity); + * // => 9007199254740991 + * + * _.toSafeInteger('3.2'); + * // => 3 + */ + function toSafeInteger(value) { + return value + ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) + : (value === 0 ? value : 0); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * Assigns own enumerable string keyed properties of source objects to the + * destination object. Source objects are applied from left to right. + * Subsequent sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object` and is loosely based on + * [`Object.assign`](https://mdn.io/Object/assign). + * + * @static + * @memberOf _ + * @since 0.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assignIn + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assign({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'c': 3 } + */ + var assign = createAssigner(function(object, source) { + if (isPrototype(source) || isArrayLike(source)) { + copyObject(source, keys(source), object); + return; + } + for (var key in source) { + if (hasOwnProperty.call(source, key)) { + assignValue(object, key, source[key]); + } + } + }); + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * This method is like `_.assignIn` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extendWith + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignInWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keysIn(source), object, customizer); + }); + + /** + * This method is like `_.assign` except that it accepts `customizer` + * which is invoked to produce the assigned values. If `customizer` returns + * `undefined`, assignment is handled by the method instead. The `customizer` + * is invoked with five arguments: (objValue, srcValue, key, object, source). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @see _.assignInWith + * @example + * + * function customizer(objValue, srcValue) { + * return _.isUndefined(objValue) ? srcValue : objValue; + * } + * + * var defaults = _.partialRight(_.assignWith, customizer); + * + * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var assignWith = createAssigner(function(object, source, srcIndex, customizer) { + copyObject(source, keys(source), object, customizer); + }); + + /** + * Creates an array of values corresponding to `paths` of `object`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Array} Returns the picked values. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _.at(object, ['a[0].b.c', 'a[1]']); + * // => [3, 4] + */ + var at = flatRest(baseAt); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; + }); + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function(args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); + }); + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Iterates over own and inherited enumerable string keyed properties of an + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forInRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forIn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). + */ + function forIn(object, iteratee) { + return object == null + ? object + : baseFor(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * This method is like `_.forIn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forIn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forInRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. + */ + function forInRight(object, iteratee) { + return object == null + ? object + : baseForRight(object, getIteratee(iteratee, 3), keysIn); + } + + /** + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 0.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwnRight + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwn(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forOwn(object, iteratee) { + return object && baseForOwn(object, getIteratee(iteratee, 3)); + } + + /** + * This method is like `_.forOwn` except that it iterates over properties of + * `object` in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns `object`. + * @see _.forOwn + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.forOwnRight(new Foo, function(value, key) { + * console.log(key); + * }); + * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. + */ + function forOwnRight(object, iteratee) { + return object && baseForOwnRight(object, getIteratee(iteratee, 3)); + } + + /** + * Creates an array of function property names from own enumerable properties + * of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functionsIn + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functions(new Foo); + * // => ['a', 'b'] + */ + function functions(object) { + return object == null ? [] : baseFunctions(object, keys(object)); + } + + /** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ + function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, getIteratee); + + /** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ + var invoke = baseRest(baseInvoke); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ + function mapKeys(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; + } + + /** + * Creates an object with the same keys as `object` and values generated + * by running each own enumerable string keyed property of `object` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, key, object). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapKeys + * @example + * + * var users = { + * 'fred': { 'user': 'fred', 'age': 40 }, + * 'pebbles': { 'user': 'pebbles', 'age': 1 } + * }; + * + * _.mapValues(users, function(o) { return o.age; }); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + * + * // The `_.property` iteratee shorthand. + * _.mapValues(users, 'age'); + * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) + */ + function mapValues(object, iteratee) { + var result = {}; + iteratee = getIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, key, iteratee(value, key, object)); + }); + return result; + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function(object, source, srcIndex) { + baseMerge(object, source, srcIndex); + }); + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); + }); + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; + }); + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(getIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function(object, paths) { + return object == null ? {} : basePick(object, paths); + }); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = getIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * This method is like `_.set` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.setWith(object, '[0][1]', 'a', Object); + * // => { '0': { '1': 'a' } } + */ + function setWith(object, path, value, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseSet(object, path, value, customizer); + } + + /** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ + var toPairs = createToPairs(keys); + + /** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ + var toPairsIn = createToPairs(keysIn); + + /** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ + function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = getIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; + } + + /** + * Removes the property at `path` of `object`. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 7 } }] }; + * _.unset(object, 'a[0].b.c'); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + * + * _.unset(object, ['a', '0', 'b', 'c']); + * // => true + * + * console.log(object); + * // => { 'a': [{ 'b': {} }] }; + */ + function unset(object, path) { + return object == null ? true : baseUnset(object, path); + } + + /** + * This method is like `_.set` except that accepts `updater` to produce the + * value to set. Use `_.updateWith` to customize `path` creation. The `updater` + * is invoked with one argument: (value). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.update(object, 'a[0].b.c', function(n) { return n * n; }); + * console.log(object.a[0].b.c); + * // => 9 + * + * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); + * console.log(object.x[0].y.z); + * // => 0 + */ + function update(object, path, updater) { + return object == null ? object : baseUpdate(object, path, castFunction(updater)); + } + + /** + * This method is like `_.update` except that it accepts `customizer` which is + * invoked to produce the objects of `path`. If `customizer` returns `undefined` + * path creation is handled by the method instead. The `customizer` is invoked + * with three arguments: (nsValue, key, nsObject). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.6.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * var object = {}; + * + * _.updateWith(object, '[0][1]', _.constant('a'), Object); + * // => { '0': { '1': 'a' } } + */ + function updateWith(object, path, updater, customizer) { + customizer = typeof customizer == 'function' ? customizer : undefined; + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /** + * Creates an array of the own and inherited enumerable string keyed property + * values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.valuesIn(new Foo); + * // => [1, 2, 3] (iteration order is not guaranteed) + */ + function valuesIn(object) { + return object == null ? [] : baseValues(object, keysIn(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Checks if `n` is between `start` and up to, but not including, `end`. If + * `end` is not specified, it's set to `start` with `start` then set to `0`. + * If `start` is greater than `end` the params are swapped to support + * negative ranges. + * + * @static + * @memberOf _ + * @since 3.3.0 + * @category Number + * @param {number} number The number to check. + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + * @see _.range, _.rangeRight + * @example + * + * _.inRange(3, 2, 4); + * // => true + * + * _.inRange(4, 8); + * // => true + * + * _.inRange(4, 2); + * // => false + * + * _.inRange(2, 2); + * // => false + * + * _.inRange(1.2, 2); + * // => true + * + * _.inRange(5.2, 4); + * // => false + * + * _.inRange(-3, -2, -6); + * // => true + */ + function inRange(number, start, end) { + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + number = toNumber(number); + return baseInRange(number, start, end); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * **Note:** If `lower` is greater than `upper`, the values are swapped. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * // when lower is greater than upper the values are swapped + * _.random(5, 0); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(-5); + * // => an integer between -5 and 0 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ + var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); + }); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * Deburrs `string` by converting + * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) + * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) + * letters to basic Latin letters and removing + * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to deburr. + * @returns {string} Returns the deburred string. + * @example + * + * _.deburr('déjà vu'); + * // => 'deja vu' + */ + function deburr(string) { + string = toString(string); + return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); + } + + /** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ + function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; + } + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", + * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escapeRegExp('[lodash](https://lodash.com/)'); + * // => '\[lodash\]\(https://lodash\.com/\)' + */ + function escapeRegExp(string) { + string = toString(string); + return (string && reHasRegExpChar.test(string)) + ? string.replace(reRegExpChar, '\\$&') + : string; + } + + /** + * Converts `string` to + * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the kebab cased string. + * @example + * + * _.kebabCase('Foo Bar'); + * // => 'foo-bar' + * + * _.kebabCase('fooBar'); + * // => 'foo-bar' + * + * _.kebabCase('__FOO_BAR__'); + * // => 'foo-bar' + */ + var kebabCase = createCompounder(function(result, word, index) { + return result + (index ? '-' : '') + word.toLowerCase(); + }); + + /** + * Converts `string`, as space separated words, to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the lower cased string. + * @example + * + * _.lowerCase('--Foo-Bar--'); + * // => 'foo bar' + * + * _.lowerCase('fooBar'); + * // => 'foo bar' + * + * _.lowerCase('__FOO_BAR__'); + * // => 'foo bar' + */ + var lowerCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + word.toLowerCase(); + }); + + /** + * Converts the first character of `string` to lower case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.lowerFirst('Fred'); + * // => 'fred' + * + * _.lowerFirst('FRED'); + * // => 'fRED' + */ + var lowerFirst = createCaseFirst('toLowerCase'); + + /** + * Pads `string` on the left and right sides if it's shorter than `length`. + * Padding characters are truncated if they can't be evenly divided by `length`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.pad('abc', 8); + * // => ' abc ' + * + * _.pad('abc', 8, '_-'); + * // => '_-abc_-_' + * + * _.pad('abc', 3); + * // => 'abc' + */ + function pad(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + if (!length || strLength >= length) { + return string; + } + var mid = (length - strLength) / 2; + return ( + createPadding(nativeFloor(mid), chars) + + string + + createPadding(nativeCeil(mid), chars) + ); + } + + /** + * Pads `string` on the right side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padEnd('abc', 6); + * // => 'abc ' + * + * _.padEnd('abc', 6, '_-'); + * // => 'abc_-_' + * + * _.padEnd('abc', 3); + * // => 'abc' + */ + function padEnd(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (string + createPadding(length - strLength, chars)) + : string; + } + + /** + * Pads `string` on the left side if it's shorter than `length`. Padding + * characters are truncated if they exceed `length`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to pad. + * @param {number} [length=0] The padding length. + * @param {string} [chars=' '] The string used as padding. + * @returns {string} Returns the padded string. + * @example + * + * _.padStart('abc', 6); + * // => ' abc' + * + * _.padStart('abc', 6, '_-'); + * // => '_-_abc' + * + * _.padStart('abc', 3); + * // => 'abc' + */ + function padStart(string, length, chars) { + string = toString(string); + length = toInteger(length); + + var strLength = length ? stringSize(string) : 0; + return (length && strLength < length) + ? (createPadding(length - strLength, chars) + string) + : string; + } + + /** + * Converts `string` to an integer of the specified radix. If `radix` is + * `undefined` or `0`, a `radix` of `10` is used unless `value` is a + * hexadecimal, in which case a `radix` of `16` is used. + * + * **Note:** This method aligns with the + * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category String + * @param {string} string The string to convert. + * @param {number} [radix=10] The radix to interpret `value` by. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {number} Returns the converted integer. + * @example + * + * _.parseInt('08'); + * // => 8 + * + * _.map(['6', '08', '10'], _.parseInt); + * // => [6, 8, 10] + */ + function parseInt(string, radix, guard) { + if (guard || radix == null) { + radix = 0; + } else if (radix) { + radix = +radix; + } + return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); + } + + /** + * Repeats the given string `n` times. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to repeat. + * @param {number} [n=1] The number of times to repeat the string. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the repeated string. + * @example + * + * _.repeat('*', 3); + * // => '***' + * + * _.repeat('abc', 2); + * // => 'abcabc' + * + * _.repeat('abc', 0); + * // => '' + */ + function repeat(string, n, guard) { + if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + return baseRepeat(toString(string), n); + } + + /** + * Replaces matches for `pattern` in `string` with `replacement`. + * + * **Note:** This method is based on + * [`String#replace`](https://mdn.io/String/replace). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to modify. + * @param {RegExp|string} pattern The pattern to replace. + * @param {Function|string} replacement The match replacement. + * @returns {string} Returns the modified string. + * @example + * + * _.replace('Hi Fred', 'Fred', 'Barney'); + * // => 'Hi Barney' + */ + function replace() { + var args = arguments, + string = toString(args[0]); + + return args.length < 3 ? string : string.replace(args[1], args[2]); + } + + /** + * Converts `string` to + * [snake case](https://en.wikipedia.org/wiki/Snake_case). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the snake cased string. + * @example + * + * _.snakeCase('Foo Bar'); + * // => 'foo_bar' + * + * _.snakeCase('fooBar'); + * // => 'foo_bar' + * + * _.snakeCase('--FOO-BAR--'); + * // => 'foo_bar' + */ + var snakeCase = createCompounder(function(result, word, index) { + return result + (index ? '_' : '') + word.toLowerCase(); + }); + + /** + * Splits `string` by `separator`. + * + * **Note:** This method is based on + * [`String#split`](https://mdn.io/String/split). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to split. + * @param {RegExp|string} separator The separator pattern to split by. + * @param {number} [limit] The length to truncate results to. + * @returns {Array} Returns the string segments. + * @example + * + * _.split('a-b-c', '-', 2); + * // => ['a', 'b'] + */ + function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } + string = toString(string); + if (string && ( + typeof separator == 'string' || + (separator != null && !isRegExp(separator)) + )) { + separator = baseToString(separator); + if (!separator && hasUnicode(string)) { + return castSlice(stringToArray(string), 0, limit); + } + } + return string.split(separator, limit); + } + + /** + * Converts `string` to + * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). + * + * @static + * @memberOf _ + * @since 3.1.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the start cased string. + * @example + * + * _.startCase('--foo-bar--'); + * // => 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ + var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); + }); + + /** + * Checks if `string` starts with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=0] The position to search from. + * @returns {boolean} Returns `true` if `string` starts with `target`, + * else `false`. + * @example + * + * _.startsWith('abc', 'a'); + * // => true + * + * _.startsWith('abc', 'b'); + * // => false + * + * _.startsWith('abc', 'b', 1); + * // => true + */ + function startsWith(string, target, position) { + string = toString(string); + position = position == null + ? 0 + : baseClamp(toInteger(position), 0, string.length); + + target = baseToString(target); + return string.slice(position, position + target.length) == target; + } + + /** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Security:** `_.template` is insecure and should not be used. It will be + * removed in Lodash v5. Avoid untrusted input. See + * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md). + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='lodash.templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': ' + + + + + + + + diff --git a/.pnpm-store/v11/files/0a/38abea61d41f1dac70e2332bdf07c3d7c78f7fb517b1b2403f9058f4057ba97e16b36aa380dbca9102fdb5bdbab9cb51168b8bc487e8a3a5779b480c2a8015 b/.pnpm-store/v11/files/0a/38abea61d41f1dac70e2332bdf07c3d7c78f7fb517b1b2403f9058f4057ba97e16b36aa380dbca9102fdb5bdbab9cb51168b8bc487e8a3a5779b480c2a8015 new file mode 100644 index 00000000..954f4113 --- /dev/null +++ b/.pnpm-store/v11/files/0a/38abea61d41f1dac70e2332bdf07c3d7c78f7fb517b1b2403f9058f4057ba97e16b36aa380dbca9102fdb5bdbab9cb51168b8bc487e8a3a5779b480c2a8015 @@ -0,0 +1,67 @@ +{ + "name": "isobject", + "description": "Returns true if the value is an object and not an array or null.", + "version": "2.1.0", + "homepage": "https://github.com/jonschlinkert/isobject", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/isobject", + "bugs": { + "url": "https://github.com/jonschlinkert/isobject/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "isarray": "1.0.0" + }, + "devDependencies": { + "gulp-format-md": "^0.1.9", + "mocha": "^2.4.5" + }, + "keywords": [ + "check", + "is", + "is-object", + "isobject", + "kind", + "kind-of", + "kindof", + "native", + "object", + "type", + "typeof", + "value" + ], + "verb": { + "related": { + "list": [ + "merge-deep", + "extend-shallow", + "is-plain-object", + "kind-of" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + } +} diff --git a/.pnpm-store/v11/files/0a/3d104f565ed8c0035796f6e851d3ffbf04cabe3015d1b236a28d026a7c419f2a206736097fb27cb6520c2e5876d460304d5f4ba93153e43ea636907f291102 b/.pnpm-store/v11/files/0a/3d104f565ed8c0035796f6e851d3ffbf04cabe3015d1b236a28d026a7c419f2a206736097fb27cb6520c2e5876d460304d5f4ba93153e43ea636907f291102 new file mode 100644 index 00000000..9047aa5f --- /dev/null +++ b/.pnpm-store/v11/files/0a/3d104f565ed8c0035796f6e851d3ffbf04cabe3015d1b236a28d026a7c419f2a206736097fb27cb6520c2e5876d460304d5f4ba93153e43ea636907f291102 @@ -0,0 +1,37 @@ +var baseCreate = require('./_baseCreate'), + isObject = require('./isObject'); + +/** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ +function createCtor(Ctor) { + return function() { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: return new Ctor; + case 1: return new Ctor(args[0]); + case 2: return new Ctor(args[0], args[1]); + case 3: return new Ctor(args[0], args[1], args[2]); + case 4: return new Ctor(args[0], args[1], args[2], args[3]); + case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; +} + +module.exports = createCtor; diff --git a/.pnpm-store/v11/files/0a/46bd9ae1d0c838f7ffd63b7b54fa92f923f25a40be60db9f374b2bdf09403efc53a16f5c32834e9b861bfd7a71b4b2879d31f4a6919da6102fc6c1d0ba5b70-exec b/.pnpm-store/v11/files/0a/46bd9ae1d0c838f7ffd63b7b54fa92f923f25a40be60db9f374b2bdf09403efc53a16f5c32834e9b861bfd7a71b4b2879d31f4a6919da6102fc6c1d0ba5b70-exec new file mode 100755 index 00000000..96180310 --- /dev/null +++ b/.pnpm-store/v11/files/0a/46bd9ae1d0c838f7ffd63b7b54fa92f923f25a40be60db9f374b2bdf09403efc53a16f5c32834e9b861bfd7a71b4b2879d31f4a6919da6102fc6c1d0ba5b70-exec @@ -0,0 +1,3 @@ +#!/usr/bin/env node + +require('../dist/cli.js'); diff --git a/.pnpm-store/v11/files/0a/61375ad84451cb8b5f8feb071b38a6e212f94e329b3b536b6570e3a9e11aa9acf49a3068c6ee138b7f4abcd073bb0fcc0718b5058190679f62147536f75ab3 b/.pnpm-store/v11/files/0a/61375ad84451cb8b5f8feb071b38a6e212f94e329b3b536b6570e3a9e11aa9acf49a3068c6ee138b7f4abcd073bb0fcc0718b5058190679f62147536f75ab3 new file mode 100644 index 00000000..a17d6a24 --- /dev/null +++ b/.pnpm-store/v11/files/0a/61375ad84451cb8b5f8feb071b38a6e212f94e329b3b536b6570e3a9e11aa9acf49a3068c6ee138b7f4abcd073bb0fcc0718b5058190679f62147536f75ab3 @@ -0,0 +1,34 @@ +# is-binary-path [![Build Status](https://travis-ci.org/sindresorhus/is-binary-path.svg?branch=master)](https://travis-ci.org/sindresorhus/is-binary-path) + +> Check if a filepath is a binary file + + +## Install + +``` +$ npm install --save is-binary-path +``` + + +## Usage + +```js +var isBinaryPath = require('is-binary-path'); + +isBinaryPath('src/unicorn.png'); +//=> true + +isBinaryPath('src/unicorn.txt'); +//=> false +``` + + +## Related + +- [`binary-extensions`](https://github.com/sindresorhus/binary-extensions) - List of binary file extensions +- [`is-text-path`](https://github.com/sindresorhus/is-text-path) - Check if a filepath is a text file + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/.pnpm-store/v11/files/0a/6a7e3a88c973679ac8ab7c33eb445cf048f7cd9d0b3b6ad94467905acb80b76602759645b079c498233c81744f19c8fda074a7e318104ebce1e59fe52e118a b/.pnpm-store/v11/files/0a/6a7e3a88c973679ac8ab7c33eb445cf048f7cd9d0b3b6ad94467905acb80b76602759645b079c498233c81744f19c8fda074a7e318104ebce1e59fe52e118a new file mode 100644 index 00000000..b09fb0fa --- /dev/null +++ b/.pnpm-store/v11/files/0a/6a7e3a88c973679ac8ab7c33eb445cf048f7cd9d0b3b6ad94467905acb80b76602759645b079c498233c81744f19c8fda074a7e318104ebce1e59fe52e118a @@ -0,0 +1,55 @@ +{ + "name": "parse-passwd", + "description": "Parse a passwd file into a list of users.", + "version": "1.0.0", + "homepage": "https://github.com/doowb/parse-passwd", + "author": "Brian Woodward (https://github.com/doowb)", + "repository": "doowb/parse-passwd", + "bugs": { + "url": "https://github.com/doowb/parse-passwd/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "LICENSE" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "gulp-format-md": "^0.1.11", + "mocha": "^3.1.2" + }, + "keywords": [ + "etc", + "etc-passwd", + "etc/passwd", + "parse", + "parse-passwd", + "passwd" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [] + }, + "reflinks": [ + "verb", + "verb-generate-readme" + ] + } +} diff --git a/.pnpm-store/v11/files/0a/6e54d91484357f7d66967e0fbfe8bf5c3d363ae109bc918103c8e6d64e6da7fd6feeee0958368184a837201a552b8c65d9b9254e7a965404b8936ea313f258 b/.pnpm-store/v11/files/0a/6e54d91484357f7d66967e0fbfe8bf5c3d363ae109bc918103c8e6d64e6da7fd6feeee0958368184a837201a552b8c65d9b9254e7a965404b8936ea313f258 new file mode 100644 index 00000000..fe9ffb26 --- /dev/null +++ b/.pnpm-store/v11/files/0a/6e54d91484357f7d66967e0fbfe8bf5c3d363ae109bc918103c8e6d64e6da7fd6feeee0958368184a837201a552b8c65d9b9254e7a965404b8936ea313f258 @@ -0,0 +1,2 @@ +declare const _default: any; +export = _default; diff --git a/.pnpm-store/v11/files/0a/714477eceee5c21d709c1c28f43cd8b61b64de33a431810b80f1c975d2a31c80e8daba2bd77a08261741da2c53d16af7ac442e3db537f66d99e10672a9433f b/.pnpm-store/v11/files/0a/714477eceee5c21d709c1c28f43cd8b61b64de33a431810b80f1c975d2a31c80e8daba2bd77a08261741da2c53d16af7ac442e3db537f66d99e10672a9433f new file mode 100644 index 00000000..39245ac1 --- /dev/null +++ b/.pnpm-store/v11/files/0a/714477eceee5c21d709c1c28f43cd8b61b64de33a431810b80f1c975d2a31c80e8daba2bd77a08261741da2c53d16af7ac442e3db537f66d99e10672a9433f @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/0a/7465eb87ad79ddbcaa3282abe4d4024762cb5966e69c3551f0f0e38b45dcf814f72fbbcd920e94bb3eedd8e1e3a72fc6b379a5782c335857f335489c275b78 b/.pnpm-store/v11/files/0a/7465eb87ad79ddbcaa3282abe4d4024762cb5966e69c3551f0f0e38b45dcf814f72fbbcd920e94bb3eedd8e1e3a72fc6b379a5782c335857f335489c275b78 new file mode 100644 index 00000000..a2689f32 --- /dev/null +++ b/.pnpm-store/v11/files/0a/7465eb87ad79ddbcaa3282abe4d4024762cb5966e69c3551f0f0e38b45dcf814f72fbbcd920e94bb3eedd8e1e3a72fc6b379a5782c335857f335489c275b78 @@ -0,0 +1,10983 @@ +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.chai = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o + * MIT Licensed + */ + +var used = []; + +/*! + * Chai version + */ + +exports.version = '4.0.2'; + +/*! + * Assertion Error + */ + +exports.AssertionError = require('assertion-error'); + +/*! + * Utils for plugins (not exported) + */ + +var util = require('./chai/utils'); + +/** + * # .use(function) + * + * Provides a way to extend the internals of Chai. + * + * @param {Function} + * @returns {this} for chaining + * @api public + */ + +exports.use = function (fn) { + if (!~used.indexOf(fn)) { + fn(exports, util); + used.push(fn); + } + + return exports; +}; + +/*! + * Utility Functions + */ + +exports.util = util; + +/*! + * Configuration + */ + +var config = require('./chai/config'); +exports.config = config; + +/*! + * Primary `Assertion` prototype + */ + +var assertion = require('./chai/assertion'); +exports.use(assertion); + +/*! + * Core Assertions + */ + +var core = require('./chai/core/assertions'); +exports.use(core); + +/*! + * Expect interface + */ + +var expect = require('./chai/interface/expect'); +exports.use(expect); + +/*! + * Should interface + */ + +var should = require('./chai/interface/should'); +exports.use(should); + +/*! + * Assert interface + */ + +var assert = require('./chai/interface/assert'); +exports.use(assert); + +},{"./chai/assertion":3,"./chai/config":4,"./chai/core/assertions":5,"./chai/interface/assert":6,"./chai/interface/expect":7,"./chai/interface/should":8,"./chai/utils":22,"assertion-error":33}],3:[function(require,module,exports){ +/*! + * chai + * http://chaijs.com + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +var config = require('./config'); + +module.exports = function (_chai, util) { + /*! + * Module dependencies. + */ + + var AssertionError = _chai.AssertionError + , flag = util.flag; + + /*! + * Module export. + */ + + _chai.Assertion = Assertion; + + /*! + * Assertion Constructor + * + * Creates object for chaining. + * + * `Assertion` objects contain metadata in the form of flags. Three flags can + * be assigned during instantiation by passing arguments to this constructor: + * + * - `object`: This flag contains the target of the assertion. For example, in + * the assertion `expect(numKittens).to.equal(7);`, the `object` flag will + * contain `numKittens` so that the `equal` assertion can reference it when + * needed. + * + * - `message`: This flag contains an optional custom error message to be + * prepended to the error message that's generated by the assertion when it + * fails. + * + * - `ssfi`: This flag stands for "start stack function indicator". It + * contains a function reference that serves as the starting point for + * removing frames from the stack trace of the error that's created by the + * assertion when it fails. The goal is to provide a cleaner stack trace to + * end users by removing Chai's internal functions. Note that it only works + * in environments that support `Error.captureStackTrace`, and only when + * `Chai.config.includeStack` hasn't been set to `false`. + * + * - `lockSsfi`: This flag controls whether or not the given `ssfi` flag + * should retain its current value, even as assertions are chained off of + * this object. This is usually set to `true` when creating a new assertion + * from within another assertion. It's also temporarily set to `true` before + * an overwritten assertion gets called by the overwriting assertion. + * + * @param {Mixed} obj target of the assertion + * @param {String} msg (optional) custom error message + * @param {Function} ssfi (optional) starting point for removing stack frames + * @param {Boolean} lockSsfi (optional) whether or not the ssfi flag is locked + * @api private + */ + + function Assertion (obj, msg, ssfi, lockSsfi) { + flag(this, 'ssfi', ssfi || Assertion); + flag(this, 'lockSsfi', lockSsfi); + flag(this, 'object', obj); + flag(this, 'message', msg); + + return util.proxify(this); + } + + Object.defineProperty(Assertion, 'includeStack', { + get: function() { + console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.'); + return config.includeStack; + }, + set: function(value) { + console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.'); + config.includeStack = value; + } + }); + + Object.defineProperty(Assertion, 'showDiff', { + get: function() { + console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.'); + return config.showDiff; + }, + set: function(value) { + console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.'); + config.showDiff = value; + } + }); + + Assertion.addProperty = function (name, fn) { + util.addProperty(this.prototype, name, fn); + }; + + Assertion.addMethod = function (name, fn) { + util.addMethod(this.prototype, name, fn); + }; + + Assertion.addChainableMethod = function (name, fn, chainingBehavior) { + util.addChainableMethod(this.prototype, name, fn, chainingBehavior); + }; + + Assertion.overwriteProperty = function (name, fn) { + util.overwriteProperty(this.prototype, name, fn); + }; + + Assertion.overwriteMethod = function (name, fn) { + util.overwriteMethod(this.prototype, name, fn); + }; + + Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) { + util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior); + }; + + /** + * ### .assert(expression, message, negateMessage, expected, actual, showDiff) + * + * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass. + * + * @name assert + * @param {Philosophical} expression to be tested + * @param {String|Function} message or function that returns message to display if expression fails + * @param {String|Function} negatedMessage or function that returns negatedMessage to display if negated expression fails + * @param {Mixed} expected value (remember to check for negation) + * @param {Mixed} actual (optional) will default to `this.obj` + * @param {Boolean} showDiff (optional) when set to `true`, assert will display a diff in addition to the message if expression fails + * @api private + */ + + Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) { + var ok = util.test(this, arguments); + if (false !== showDiff) showDiff = true; + if (undefined === expected && undefined === _actual) showDiff = false; + if (true !== config.showDiff) showDiff = false; + + if (!ok) { + msg = util.getMessage(this, arguments); + var actual = util.getActual(this, arguments); + throw new AssertionError(msg, { + actual: actual + , expected: expected + , showDiff: showDiff + }, (config.includeStack) ? this.assert : flag(this, 'ssfi')); + } + }; + + /*! + * ### ._obj + * + * Quick reference to stored `actual` value for plugin developers. + * + * @api private + */ + + Object.defineProperty(Assertion.prototype, '_obj', + { get: function () { + return flag(this, 'object'); + } + , set: function (val) { + flag(this, 'object', val); + } + }); +}; + +},{"./config":4}],4:[function(require,module,exports){ +module.exports = { + + /** + * ### config.includeStack + * + * User configurable property, influences whether stack trace + * is included in Assertion error message. Default of false + * suppresses stack trace in the error message. + * + * chai.config.includeStack = true; // enable stack on error + * + * @param {Boolean} + * @api public + */ + + includeStack: false, + + /** + * ### config.showDiff + * + * User configurable property, influences whether or not + * the `showDiff` flag should be included in the thrown + * AssertionErrors. `false` will always be `false`; `true` + * will be true when the assertion has requested a diff + * be shown. + * + * @param {Boolean} + * @api public + */ + + showDiff: true, + + /** + * ### config.truncateThreshold + * + * User configurable property, sets length threshold for actual and + * expected values in assertion errors. If this threshold is exceeded, for + * example for large data structures, the value is replaced with something + * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`. + * + * Set it to zero if you want to disable truncating altogether. + * + * This is especially userful when doing assertions on arrays: having this + * set to a reasonable large value makes the failure messages readily + * inspectable. + * + * chai.config.truncateThreshold = 0; // disable truncating + * + * @param {Number} + * @api public + */ + + truncateThreshold: 40, + + /** + * ### config.useProxy + * + * User configurable property, defines if chai will use a Proxy to throw + * an error when a non-existent property is read, which protects users + * from typos when using property-based assertions. + * + * Set it to false if you want to disable this feature. + * + * chai.config.useProxy = false; // disable use of Proxy + * + * This feature is automatically disabled regardless of this config value + * in environments that don't support proxies. + * + * @param {Boolean} + * @api public + */ + + useProxy: true, + + /** + * ### config.proxyExcludedKeys + * + * User configurable property, defines which properties should be ignored + * instead of throwing an error if they do not exist on the assertion. + * This is only applied if the environment Chai is running in supports proxies and + * if the `useProxy` configuration setting is enabled. + * By default, `then` and `inspect` will not throw an error if they do not exist on the + * assertion object because the `.inspect` property is read by `util.inspect` (for example, when + * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking. + * + * // By default these keys will not throw an error if they do not exist on the assertion object + * chai.config.proxyExcludedKeys = ['then', 'inspect']; + * + * @param {Array} + * @api public + */ + + proxyExcludedKeys: ['then', 'inspect', 'toJSON'] +}; + +},{}],5:[function(require,module,exports){ +/*! + * chai + * http://chaijs.com + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +module.exports = function (chai, _) { + var Assertion = chai.Assertion + , AssertionError = chai.AssertionError + , flag = _.flag; + + /** + * ### Language Chains + * + * The following are provided as chainable getters to improve the readability + * of your assertions. + * + * **Chains** + * + * - to + * - be + * - been + * - is + * - that + * - which + * - and + * - has + * - have + * - with + * - at + * - of + * - same + * - but + * - does + * + * @name language chains + * @namespace BDD + * @api public + */ + + [ 'to', 'be', 'been' + , 'is', 'and', 'has', 'have' + , 'with', 'that', 'which', 'at' + , 'of', 'same', 'but', 'does' ].forEach(function (chain) { + Assertion.addProperty(chain); + }); + + /** + * ### .not + * + * Negates all assertions that follow in the chain. + * + * expect(function () {}).to.not.throw(); + * expect({a: 1}).to.not.have.property('b'); + * expect([1, 2]).to.be.an('array').that.does.not.include(3); + * + * Just because you can negate any assertion with `.not` doesn't mean you + * should. With great power comes great responsibility. It's often best to + * assert that the one expected output was produced, rather than asserting + * that one of countless unexpected outputs wasn't produced. See individual + * assertions for specific guidance. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.not.equal(1); // Not recommended + * + * @name not + * @namespace BDD + * @api public + */ + + Assertion.addProperty('not', function () { + flag(this, 'negate', true); + }); + + /** + * ### .deep + * + * Causes all `.equal`, `.include`, `.members`, `.keys`, and `.property` + * assertions that follow in the chain to use deep equality instead of strict + * (`===`) equality. See the `deep-eql` project page for info on the deep + * equality algorithm: https://github.com/chaijs/deep-eql. + * + * // Target object deeply (but not strictly) equals `{a: 1}` + * expect({a: 1}).to.deep.equal({a: 1}); + * expect({a: 1}).to.not.equal({a: 1}); + * + * // Target array deeply (but not strictly) includes `{a: 1}` + * expect([{a: 1}]).to.deep.include({a: 1}); + * expect([{a: 1}]).to.not.include({a: 1}); + * + * // Target object deeply (but not strictly) includes `x: {a: 1}` + * expect({x: {a: 1}}).to.deep.include({x: {a: 1}}); + * expect({x: {a: 1}}).to.not.include({x: {a: 1}}); + * + * // Target array deeply (but not strictly) has member `{a: 1}` + * expect([{a: 1}]).to.have.deep.members([{a: 1}]); + * expect([{a: 1}]).to.not.have.members([{a: 1}]); + * + * // Target set deeply (but not strictly) has key `{a: 1}` + * expect(new Set([{a: 1}])).to.have.deep.keys([{a: 1}]); + * expect(new Set([{a: 1}])).to.not.have.keys([{a: 1}]); + * + * // Target object deeply (but not strictly) has property `x: {a: 1}` + * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1}); + * expect({x: {a: 1}}).to.not.have.property('x', {a: 1}); + * + * @name deep + * @namespace BDD + * @api public + */ + + Assertion.addProperty('deep', function () { + flag(this, 'deep', true); + }); + + /** + * ### .nested + * + * Enables dot- and bracket-notation in all `.property` and `.include` + * assertions that follow in the chain. + * + * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]'); + * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'}); + * + * If `.` or `[]` are part of an actual property name, they can be escaped by + * adding two backslashes before them. + * + * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\.a.\\[b\\]'); + * expect({'.a': {'[b]': 'x'}}).to.nested.include({'\\.a.\\[b\\]': 'x'}); + * + * `.nested` cannot be combined with `.own`. + * + * @name nested + * @namespace BDD + * @api public + */ + + Assertion.addProperty('nested', function () { + flag(this, 'nested', true); + }); + + /** + * ### .own + * + * Causes all `.property` and `.include` assertions that follow in the chain + * to ignore inherited properties. + * + * Object.prototype.b = 2; + * + * expect({a: 1}).to.have.own.property('a'); + * expect({a: 1}).to.have.property('b').but.not.own.property('b'); + * + * expect({a: 1}).to.own.include({a: 1}); + * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2}); + * + * `.own` cannot be combined with `.nested`. + * + * @name own + * @namespace BDD + * @api public + */ + + Assertion.addProperty('own', function () { + flag(this, 'own', true); + }); + + /** + * ### .ordered + * + * Causes all `.members` assertions that follow in the chain to require that + * members be in the same order. + * + * expect([1, 2]).to.have.ordered.members([1, 2]) + * .but.not.have.ordered.members([2, 1]); + * + * When `.include` and `.ordered` are combined, the ordering begins at the + * start of both arrays. + * + * expect([1, 2, 3]).to.include.ordered.members([1, 2]) + * .but.not.include.ordered.members([2, 3]); + * + * @name ordered + * @namespace BDD + * @api public + */ + + Assertion.addProperty('ordered', function () { + flag(this, 'ordered', true); + }); + + /** + * ### .any + * + * Causes all `.keys` assertions that follow in the chain to only require that + * the target have at least one of the given keys. This is the opposite of + * `.all`, which requires that the target have all of the given keys. + * + * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd'); + * + * See the `.keys` doc for guidance on when to use `.any` or `.all`. + * + * @name any + * @namespace BDD + * @api public + */ + + Assertion.addProperty('any', function () { + flag(this, 'any', true); + flag(this, 'all', false); + }); + + + /** + * ### .all + * + * Causes all `.keys` assertions that follow in the chain to require that the + * target have all of the given keys. This is the opposite of `.any`, which + * only requires that the target have at least one of the given keys. + * + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); + * + * Note that `.all` is used by default when neither `.all` nor `.any` are + * added earlier in the chain. However, it's often best to add `.all` anyway + * because it improves readability. + * + * See the `.keys` doc for guidance on when to use `.any` or `.all`. + * + * @name all + * @namespace BDD + * @api public + */ + + Assertion.addProperty('all', function () { + flag(this, 'all', true); + flag(this, 'any', false); + }); + + /** + * ### .a(type[, msg]) + * + * Asserts that the target's type is equal to the given string `type`. Types + * are case insensitive. See the `type-detect` project page for info on the + * type detection algorithm: https://github.com/chaijs/type-detect. + * + * expect('foo').to.be.a('string'); + * expect({a: 1}).to.be.an('object'); + * expect(null).to.be.a('null'); + * expect(undefined).to.be.an('undefined'); + * expect(new Error).to.be.an('error'); + * expect(Promise.resolve()).to.be.a('promise'); + * expect(new Float32Array).to.be.a('float32array'); + * expect(Symbol()).to.be.a('symbol'); + * + * `.a` supports objects that have a custom type set via `Symbol.toStringTag`. + * + * var myObj = { + * [Symbol.toStringTag]: 'myCustomType' + * }; + * + * expect(myObj).to.be.a('myCustomType').but.not.an('object'); + * + * It's often best to use `.a` to check a target's type before making more + * assertions on the same target. That way, you avoid unexpected behavior from + * any assertion that does different things based on the target's type. + * + * expect([1, 2, 3]).to.be.an('array').that.includes(2); + * expect([]).to.be.an('array').that.is.empty; + * + * Add `.not` earlier in the chain to negate `.a`. However, it's often best to + * assert that the target is the expected type, rather than asserting that it + * isn't one of many unexpected types. + * + * expect('foo').to.be.a('string'); // Recommended + * expect('foo').to.not.be.an('array'); // Not recommended + * + * `.a` accepts an optional `msg` argument which is a custom error message to + * show when the assertion fails. The message can also be given as the second + * argument to `expect`. + * + * expect(1).to.be.a('string', 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.a('string'); + * + * `.a` can also be used as a language chain to improve the readability of + * your assertions. + * + * expect({b: 2}).to.have.a.property('b'); + * + * The alias `.an` can be used interchangeably with `.a`. + * + * @name a + * @alias an + * @param {String} type + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function an (type, msg) { + if (msg) flag(this, 'message', msg); + type = type.toLowerCase(); + var obj = flag(this, 'object') + , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a '; + + this.assert( + type === _.type(obj).toLowerCase() + , 'expected #{this} to be ' + article + type + , 'expected #{this} not to be ' + article + type + ); + } + + Assertion.addChainableMethod('an', an); + Assertion.addChainableMethod('a', an); + + /** + * ### .include(val[, msg]) + * + * When the target is a string, `.include` asserts that the given string `val` + * is a substring of the target. + * + * expect('foobar').to.include('foo'); + * + * When the target is an array, `.include` asserts that the given `val` is a + * member of the target. + * + * expect([1, 2, 3]).to.include(2); + * + * When the target is an object, `.include` asserts that the given object + * `val`'s properties are a subset of the target's properties. + * + * expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2}); + * + * Because `.include` does different things based on the target's type, it's + * important to check the target's type before using `.include`. See the `.a` + * doc for info on testing a target's type. + * + * expect([1, 2, 3]).to.be.an('array').that.includes(2); + * + * By default, strict (`===`) equality is used to compare array members and + * object properties. Add `.deep` earlier in the chain to use deep equality + * instead. See the `deep-eql` project page for info on the deep equality + * algorithm: https://github.com/chaijs/deep-eql. + * + * // Target array deeply (but not strictly) includes `{a: 1}` + * expect([{a: 1}]).to.deep.include({a: 1}); + * expect([{a: 1}]).to.not.include({a: 1}); + * + * // Target object deeply (but not strictly) includes `x: {a: 1}` + * expect({x: {a: 1}}).to.deep.include({x: {a: 1}}); + * expect({x: {a: 1}}).to.not.include({x: {a: 1}}); + * + * By default, all of the target's properties are searched when working with + * objects. This includes properties that are inherited and/or non-enumerable. + * Add `.own` earlier in the chain to exclude the target's inherited + * properties from the search. + * + * Object.prototype.b = 2; + * + * expect({a: 1}).to.own.include({a: 1}); + * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2}); + * + * Note that a target object is always only searched for `val`'s own + * enumerable properties. + * + * `.deep` and `.own` can be combined. + * + * expect({a: {b: 2}}).to.deep.own.include({a: {b: 2}}); + * + * Add `.nested` earlier in the chain to enable dot- and bracket-notation when + * referencing nested properties. + * + * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'}); + * + * If `.` or `[]` are part of an actual property name, they can be escaped by + * adding two backslashes before them. + * + * expect({'.a': {'[b]': 2}}).to.nested.include({'\\.a.\\[b\\]': 2}); + * + * `.deep` and `.nested` can be combined. + * + * expect({a: {b: [{c: 3}]}}).to.deep.nested.include({'a.b[0]': {c: 3}}); + * + * `.own` and `.nested` cannot be combined. + * + * Add `.not` earlier in the chain to negate `.include`. + * + * expect('foobar').to.not.include('taco'); + * expect([1, 2, 3]).to.not.include(4); + * + * However, it's dangerous to negate `.include` when the target is an object. + * The problem is that it creates uncertain expectations by asserting that the + * target object doesn't have all of `val`'s key/value pairs but may or may + * not have some of them. It's often best to identify the exact output that's + * expected, and then write an assertion that only accepts that exact output. + * + * When the target object isn't even expected to have `val`'s keys, it's + * often best to assert exactly that. + * + * expect({c: 3}).to.not.have.any.keys('a', 'b'); // Recommended + * expect({c: 3}).to.not.include({a: 1, b: 2}); // Not recommended + * + * When the target object is expected to have `val`'s keys, it's often best to + * assert that each of the properties has its expected value, rather than + * asserting that each property doesn't have one of many unexpected values. + * + * expect({a: 3, b: 4}).to.include({a: 3, b: 4}); // Recommended + * expect({a: 3, b: 4}).to.not.include({a: 1, b: 2}); // Not recommended + * + * `.include` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect([1, 2, 3]).to.include(4, 'nooo why fail??'); + * expect([1, 2, 3], 'nooo why fail??').to.include(4); + * + * `.include` can also be used as a language chain, causing all `.members` and + * `.keys` assertions that follow in the chain to require the target to be a + * superset of the expected set, rather than an identical set. Note that + * `.members` ignores duplicates in the subset when `.include` is added. + * + * // Target object's keys are a superset of ['a', 'b'] but not identical + * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b'); + * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b'); + * + * // Target array is a superset of [1, 2] but not identical + * expect([1, 2, 3]).to.include.members([1, 2]); + * expect([1, 2, 3]).to.not.have.members([1, 2]); + * + * // Duplicates in the subset are ignored + * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]); + * + * Note that adding `.any` earlier in the chain causes the `.keys` assertion + * to ignore `.include`. + * + * // Both assertions are identical + * expect({a: 1}).to.include.any.keys('a', 'b'); + * expect({a: 1}).to.have.any.keys('a', 'b'); + * + * The aliases `.includes`, `.contain`, and `.contains` can be used + * interchangeably with `.include`. + * + * @name include + * @alias contain + * @alias includes + * @alias contains + * @param {Mixed} val + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function includeChainingBehavior () { + flag(this, 'contains', true); + } + + function isDeepIncluded (arr, val) { + return arr.some(function (arrVal) { + return _.eql(arrVal, val); + }); + } + + function include (val, msg) { + if (msg) flag(this, 'message', msg); + + _.expectTypes(this, ['array', 'object', 'string'], flag(this, 'ssfi')); + + var obj = flag(this, 'object') + , objType = _.type(obj).toLowerCase() + , isDeep = flag(this, 'deep') + , descriptor = isDeep ? 'deep ' : ''; + + // This block is for asserting a subset of properties in an object. + if (objType === 'object') { + var props = Object.keys(val) + , negate = flag(this, 'negate') + , firstErr = null + , numErrs = 0; + + props.forEach(function (prop) { + var propAssertion = new Assertion(obj); + _.transferFlags(this, propAssertion, true); + flag(propAssertion, 'lockSsfi', true); + + if (!negate || props.length === 1) { + propAssertion.property(prop, val[prop]); + return; + } + + try { + propAssertion.property(prop, val[prop]); + } catch (err) { + if (!_.checkError.compatibleConstructor(err, AssertionError)) throw err; + if (firstErr === null) firstErr = err; + numErrs++; + } + }, this); + + // When validating .not.include with multiple properties, we only want + // to throw an assertion error if all of the properties are included, + // in which case we throw the first property assertion error that we + // encountered. + if (negate && props.length > 1 && numErrs === props.length) throw firstErr; + + return; + } + + // Assert inclusion in an array or substring in a string. + this.assert( + objType === 'string' || !isDeep ? ~obj.indexOf(val) + : isDeepIncluded(obj, val) + , 'expected #{this} to ' + descriptor + 'include ' + _.inspect(val) + , 'expected #{this} to not ' + descriptor + 'include ' + _.inspect(val)); + } + + Assertion.addChainableMethod('include', include, includeChainingBehavior); + Assertion.addChainableMethod('contain', include, includeChainingBehavior); + Assertion.addChainableMethod('contains', include, includeChainingBehavior); + Assertion.addChainableMethod('includes', include, includeChainingBehavior); + + /** + * ### .ok + * + * Asserts that the target is loosely (`==`) equal to `true`. However, it's + * often best to assert that the target is strictly (`===`) or deeply equal to + * its expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.ok; // Not recommended + * + * expect(true).to.be.true; // Recommended + * expect(true).to.be.ok; // Not recommended + * + * Add `.not` earlier in the chain to negate `.ok`. + * + * expect(0).to.equal(0); // Recommended + * expect(0).to.not.be.ok; // Not recommended + * + * expect(false).to.be.false; // Recommended + * expect(false).to.not.be.ok; // Not recommended + * + * expect(null).to.be.null; // Recommended + * expect(null).to.not.be.ok; // Not recommended + * + * expect(undefined).to.be.undefined; // Recommended + * expect(undefined).to.not.be.ok; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(false, 'nooo why fail??').to.be.ok; + * + * @name ok + * @namespace BDD + * @api public + */ + + Assertion.addProperty('ok', function () { + this.assert( + flag(this, 'object') + , 'expected #{this} to be truthy' + , 'expected #{this} to be falsy'); + }); + + /** + * ### .true + * + * Asserts that the target is strictly (`===`) equal to `true`. + * + * expect(true).to.be.true; + * + * Add `.not` earlier in the chain to negate `.true`. However, it's often best + * to assert that the target is equal to its expected value, rather than not + * equal to `true`. + * + * expect(false).to.be.false; // Recommended + * expect(false).to.not.be.true; // Not recommended + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.true; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(false, 'nooo why fail??').to.be.true; + * + * @name true + * @namespace BDD + * @api public + */ + + Assertion.addProperty('true', function () { + this.assert( + true === flag(this, 'object') + , 'expected #{this} to be true' + , 'expected #{this} to be false' + , flag(this, 'negate') ? false : true + ); + }); + + /** + * ### .false + * + * Asserts that the target is strictly (`===`) equal to `false`. + * + * expect(false).to.be.false; + * + * Add `.not` earlier in the chain to negate `.false`. However, it's often + * best to assert that the target is equal to its expected value, rather than + * not equal to `false`. + * + * expect(true).to.be.true; // Recommended + * expect(true).to.not.be.false; // Not recommended + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.false; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(true, 'nooo why fail??').to.be.false; + * + * @name false + * @namespace BDD + * @api public + */ + + Assertion.addProperty('false', function () { + this.assert( + false === flag(this, 'object') + , 'expected #{this} to be false' + , 'expected #{this} to be true' + , flag(this, 'negate') ? true : false + ); + }); + + /** + * ### .null + * + * Asserts that the target is strictly (`===`) equal to `null`. + * + * expect(null).to.be.null; + * + * Add `.not` earlier in the chain to negate `.null`. However, it's often best + * to assert that the target is equal to its expected value, rather than not + * equal to `null`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.null; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(42, 'nooo why fail??').to.be.null; + * + * @name null + * @namespace BDD + * @api public + */ + + Assertion.addProperty('null', function () { + this.assert( + null === flag(this, 'object') + , 'expected #{this} to be null' + , 'expected #{this} not to be null' + ); + }); + + /** + * ### .undefined + * + * Asserts that the target is strictly (`===`) equal to `undefined`. + * + * expect(undefined).to.be.undefined; + * + * Add `.not` earlier in the chain to negate `.undefined`. However, it's often + * best to assert that the target is equal to its expected value, rather than + * not equal to `undefined`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.undefined; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(42, 'nooo why fail??').to.be.undefined; + * + * @name undefined + * @namespace BDD + * @api public + */ + + Assertion.addProperty('undefined', function () { + this.assert( + undefined === flag(this, 'object') + , 'expected #{this} to be undefined' + , 'expected #{this} not to be undefined' + ); + }); + + /** + * ### .NaN + * + * Asserts that the target is exactly `NaN`. + * + * expect(NaN).to.be.NaN; + * + * Add `.not` earlier in the chain to negate `.NaN`. However, it's often best + * to assert that the target is equal to its expected value, rather than not + * equal to `NaN`. + * + * expect('foo').to.equal('foo'); // Recommended + * expect('foo').to.not.be.NaN; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(42, 'nooo why fail??').to.be.NaN; + * + * @name NaN + * @namespace BDD + * @api public + */ + + Assertion.addProperty('NaN', function () { + this.assert( + _.isNaN(flag(this, 'object')) + , 'expected #{this} to be NaN' + , 'expected #{this} not to be NaN' + ); + }); + + /** + * ### .exist + * + * Asserts that the target is not strictly (`===`) equal to either `null` or + * `undefined`. However, it's often best to assert that the target is equal to + * its expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.exist; // Not recommended + * + * expect(0).to.equal(0); // Recommended + * expect(0).to.exist; // Not recommended + * + * Add `.not` earlier in the chain to negate `.exist`. + * + * expect(null).to.be.null; // Recommended + * expect(null).to.not.exist; // Not recommended + * + * expect(undefined).to.be.undefined; // Recommended + * expect(undefined).to.not.exist; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(null, 'nooo why fail??').to.exist; + * + * @name exist + * @namespace BDD + * @api public + */ + + Assertion.addProperty('exist', function () { + var val = flag(this, 'object'); + this.assert( + val !== null && val !== undefined + , 'expected #{this} to exist' + , 'expected #{this} to not exist' + ); + }); + + /** + * ### .empty + * + * When the target is a string or array, `.empty` asserts that the target's + * `length` property is strictly (`===`) equal to `0`. + * + * expect([]).to.be.empty; + * expect('').to.be.empty; + * + * When the target is a map or set, `.empty` asserts that the target's `size` + * property is strictly equal to `0`. + * + * expect(new Set()).to.be.empty; + * expect(new Map()).to.be.empty; + * + * When the target is a non-function object, `.empty` asserts that the target + * doesn't have any own enumerable properties. Properties with Symbol-based + * keys are excluded from the count. + * + * expect({}).to.be.empty; + * + * Because `.empty` does different things based on the target's type, it's + * important to check the target's type before using `.empty`. See the `.a` + * doc for info on testing a target's type. + * + * expect([]).to.be.an('array').that.is.empty; + * + * Add `.not` earlier in the chain to negate `.empty`. However, it's often + * best to assert that the target contains its expected number of values, + * rather than asserting that it's not empty. + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.not.be.empty; // Not recommended + * + * expect(new Set([1, 2, 3])).to.have.property('size', 3); // Recommended + * expect(new Set([1, 2, 3])).to.not.be.empty; // Not recommended + * + * expect(Object.keys({a: 1})).to.have.lengthOf(1); // Recommended + * expect({a: 1}).to.not.be.empty; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect([1, 2, 3], 'nooo why fail??').to.be.empty; + * + * @name empty + * @namespace BDD + * @api public + */ + + Assertion.addProperty('empty', function () { + var val = flag(this, 'object') + , ssfi = flag(this, 'ssfi') + , flagMsg = flag(this, 'message') + , itemsCount; + + flagMsg = flagMsg ? flagMsg + ': ' : ''; + + switch (_.type(val).toLowerCase()) { + case 'array': + case 'string': + itemsCount = val.length; + break; + case 'map': + case 'set': + itemsCount = val.size; + break; + case 'weakmap': + case 'weakset': + throw new AssertionError( + flagMsg + '.empty was passed a weak collection', + undefined, + ssfi + ); + case 'function': + var msg = flagMsg + '.empty was passed a function ' + _.getName(val); + throw new AssertionError(msg.trim(), undefined, ssfi); + default: + if (val !== Object(val)) { + throw new AssertionError( + flagMsg + '.empty was passed non-string primitive ' + _.inspect(val), + undefined, + ssfi + ); + } + itemsCount = Object.keys(val).length; + } + + this.assert( + 0 === itemsCount + , 'expected #{this} to be empty' + , 'expected #{this} not to be empty' + ); + }); + + /** + * ### .arguments + * + * Asserts that the target is an `arguments` object. + * + * function test () { + * expect(arguments).to.be.arguments; + * } + * + * test(); + * + * Add `.not` earlier in the chain to negate `.arguments`. However, it's often + * best to assert which type the target is expected to be, rather than + * asserting that its not an `arguments` object. + * + * expect('foo').to.be.a('string'); // Recommended + * expect('foo').to.not.be.arguments; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({}, 'nooo why fail??').to.be.arguments; + * + * The alias `.Arguments` can be used interchangeably with `.arguments`. + * + * @name arguments + * @alias Arguments + * @namespace BDD + * @api public + */ + + function checkArguments () { + var obj = flag(this, 'object') + , type = _.type(obj); + this.assert( + 'Arguments' === type + , 'expected #{this} to be arguments but got ' + type + , 'expected #{this} to not be arguments' + ); + } + + Assertion.addProperty('arguments', checkArguments); + Assertion.addProperty('Arguments', checkArguments); + + /** + * ### .equal(val[, msg]) + * + * Asserts that the target is strictly (`===`) equal to the given `val`. + * + * expect(1).to.equal(1); + * expect('foo').to.equal('foo'); + * + * Add `.deep` earlier in the chain to use deep equality instead. See the + * `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target object deeply (but not strictly) equals `{a: 1}` + * expect({a: 1}).to.deep.equal({a: 1}); + * expect({a: 1}).to.not.equal({a: 1}); + * + * // Target array deeply (but not strictly) equals `[1, 2]` + * expect([1, 2]).to.deep.equal([1, 2]); + * expect([1, 2]).to.not.equal([1, 2]); + * + * Add `.not` earlier in the chain to negate `.equal`. However, it's often + * best to assert that the target is equal to its expected value, rather than + * not equal to one of countless unexpected values. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.equal(2); // Not recommended + * + * `.equal` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.equal(2, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.equal(2); + * + * The aliases `.equals` and `eq` can be used interchangeably with `.equal`. + * + * @name equal + * @alias equals + * @alias eq + * @param {Mixed} val + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertEqual (val, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + if (flag(this, 'deep')) { + return this.eql(val); + } else { + this.assert( + val === obj + , 'expected #{this} to equal #{exp}' + , 'expected #{this} to not equal #{exp}' + , val + , this._obj + , true + ); + } + } + + Assertion.addMethod('equal', assertEqual); + Assertion.addMethod('equals', assertEqual); + Assertion.addMethod('eq', assertEqual); + + /** + * ### .eql(obj[, msg]) + * + * Asserts that the target is deeply equal to the given `obj`. See the + * `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target object is deeply (but not strictly) equal to {a: 1} + * expect({a: 1}).to.eql({a: 1}).but.not.equal({a: 1}); + * + * // Target array is deeply (but not strictly) equal to [1, 2] + * expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]); + * + * Add `.not` earlier in the chain to negate `.eql`. However, it's often best + * to assert that the target is deeply equal to its expected value, rather + * than not deeply equal to one of countless unexpected values. + * + * expect({a: 1}).to.eql({a: 1}); // Recommended + * expect({a: 1}).to.not.eql({b: 2}); // Not recommended + * + * `.eql` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect({a: 1}).to.eql({b: 2}, 'nooo why fail??'); + * expect({a: 1}, 'nooo why fail??').to.eql({b: 2}); + * + * The alias `.eqls` can be used interchangeably with `.eql`. + * + * The `.deep.equal` assertion is almost identical to `.eql` but with one + * difference: `.deep.equal` causes deep equality comparisons to also be used + * for any other assertions that follow in the chain. + * + * @name eql + * @alias eqls + * @param {Mixed} obj + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertEql(obj, msg) { + if (msg) flag(this, 'message', msg); + this.assert( + _.eql(obj, flag(this, 'object')) + , 'expected #{this} to deeply equal #{exp}' + , 'expected #{this} to not deeply equal #{exp}' + , obj + , this._obj + , true + ); + } + + Assertion.addMethod('eql', assertEql); + Assertion.addMethod('eqls', assertEql); + + /** + * ### .above(n[, msg]) + * + * Asserts that the target is a number greater than the given number `n`. + * However, it's often best to assert that the target is equal to its expected + * value. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.be.above(1); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is greater than the given number `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.above(2); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.above(2); // Not recommended + * + * Add `.not` earlier in the chain to negate `.above`. + * + * expect(2).to.equal(2); // Recommended + * expect(1).to.not.be.above(2); // Not recommended + * + * `.above` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.be.above(2, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.above(2); + * + * The aliases `.gt` and `.greaterThan` can be used interchangeably with + * `.above`. + * + * @name above + * @alias gt + * @alias greaterThan + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertAbove (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to above must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len > n + , 'expected #{this} to have a length above #{exp} but got #{act}' + , 'expected #{this} to not have a length above #{exp}' + , n + , len + ); + } else { + this.assert( + obj > n + , 'expected #{this} to be above ' + n + , 'expected #{this} to be at most ' + n + ); + } + } + + Assertion.addMethod('above', assertAbove); + Assertion.addMethod('gt', assertAbove); + Assertion.addMethod('greaterThan', assertAbove); + + /** + * ### .least(n[, msg]) + * + * Asserts that the target is a number greater than or equal to the given + * number `n`. However, it's often best to assert that the target is equal to + * its expected value. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.be.at.least(1); // Not recommended + * expect(2).to.be.at.least(2); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is greater than or equal to the given number + * `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.at.least(2); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.at.least(2); // Not recommended + * + * Add `.not` earlier in the chain to negate `.least`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.at.least(2); // Not recommended + * + * `.least` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.be.at.least(2, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.at.least(2); + * + * The alias `.gte` can be used interchangeably with `.least`. + * + * @name least + * @alias gte + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertLeast (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to least must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len >= n + , 'expected #{this} to have a length at least #{exp} but got #{act}' + , 'expected #{this} to have a length below #{exp}' + , n + , len + ); + } else { + this.assert( + obj >= n + , 'expected #{this} to be at least ' + n + , 'expected #{this} to be below ' + n + ); + } + } + + Assertion.addMethod('least', assertLeast); + Assertion.addMethod('gte', assertLeast); + + /** + * ### .below(n[, msg]) + * + * Asserts that the target is a number less than the given number `n`. + * However, it's often best to assert that the target is equal to its expected + * value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.below(2); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is less than the given number `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.below(4); // Not recommended + * + * expect([1, 2, 3]).to.have.length(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.below(4); // Not recommended + * + * Add `.not` earlier in the chain to negate `.below`. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.not.be.below(1); // Not recommended + * + * `.below` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(2).to.be.below(1, 'nooo why fail??'); + * expect(2, 'nooo why fail??').to.be.below(1); + * + * The aliases `.lt` and `.lessThan` can be used interchangeably with + * `.below`. + * + * @name below + * @alias lt + * @alias lessThan + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertBelow (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to below must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len < n + , 'expected #{this} to have a length below #{exp} but got #{act}' + , 'expected #{this} to not have a length below #{exp}' + , n + , len + ); + } else { + this.assert( + obj < n + , 'expected #{this} to be below ' + n + , 'expected #{this} to be at least ' + n + ); + } + } + + Assertion.addMethod('below', assertBelow); + Assertion.addMethod('lt', assertBelow); + Assertion.addMethod('lessThan', assertBelow); + + /** + * ### .most(n[, msg]) + * + * Asserts that the target is a number less than or equal to the given number + * `n`. However, it's often best to assert that the target is equal to its + * expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.at.most(2); // Not recommended + * expect(1).to.be.at.most(1); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is less than or equal to the given number `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.at.most(4); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.at.most(4); // Not recommended + * + * Add `.not` earlier in the chain to negate `.most`. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.not.be.at.most(1); // Not recommended + * + * `.most` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(2).to.be.at.most(1, 'nooo why fail??'); + * expect(2, 'nooo why fail??').to.be.at.most(1); + * + * The alias `.lte` can be used interchangeably with `.most`. + * + * @name most + * @alias lte + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertMost (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to most must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len <= n + , 'expected #{this} to have a length at most #{exp} but got #{act}' + , 'expected #{this} to have a length above #{exp}' + , n + , len + ); + } else { + this.assert( + obj <= n + , 'expected #{this} to be at most ' + n + , 'expected #{this} to be above ' + n + ); + } + } + + Assertion.addMethod('most', assertMost); + Assertion.addMethod('lte', assertMost); + + /** + * ### .within(start, finish[, msg]) + * + * Asserts that the target is a number greater than or equal to the given + * number `start`, and less than or equal to the given number `finish`. + * However, it's often best to assert that the target is equal to its expected + * value. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.be.within(1, 3); // Not recommended + * expect(2).to.be.within(2, 3); // Not recommended + * expect(2).to.be.within(1, 2); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is greater than or equal to the given number + * `start`, and less than or equal to the given number `finish`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.within(2, 4); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.within(2, 4); // Not recommended + * + * Add `.not` earlier in the chain to negate `.within`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.within(2, 4); // Not recommended + * + * `.within` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(4).to.be.within(1, 3, 'nooo why fail??'); + * expect(4, 'nooo why fail??').to.be.within(1, 3); + * + * @name within + * @param {Number} start lower bound inclusive + * @param {Number} finish upper bound inclusive + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + Assertion.addMethod('within', function (start, finish, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , range = start + '..' + finish + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof start !== 'number' || typeof finish !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the arguments to within must be numbers', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len >= start && len <= finish + , 'expected #{this} to have a length within ' + range + , 'expected #{this} to not have a length within ' + range + ); + } else { + this.assert( + obj >= start && obj <= finish + , 'expected #{this} to be within ' + range + , 'expected #{this} to not be within ' + range + ); + } + }); + + /** + * ### .instanceof(constructor[, msg]) + * + * Asserts that the target is an instance of the given `constructor`. + * + * function Cat () { } + * + * expect(new Cat()).to.be.an.instanceof(Cat); + * expect([1, 2]).to.be.an.instanceof(Array); + * + * Add `.not` earlier in the chain to negate `.instanceof`. + * + * expect({a: 1}).to.not.be.an.instanceof(Array); + * + * `.instanceof` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(1).to.be.an.instanceof(Array, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.an.instanceof(Array); + * + * Due to limitations in ES5, `.instanceof` may not always work as expected + * when using a transpiler such as Babel or TypeScript. In particular, it may + * produce unexpected results when subclassing built-in object such as + * `Array`, `Error`, and `Map`. See your transpiler's docs for details: + * + * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes)) + * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work)) + * + * The alias `.instanceOf` can be used interchangeably with `.instanceof`. + * + * @name instanceof + * @param {Constructor} constructor + * @param {String} msg _optional_ + * @alias instanceOf + * @namespace BDD + * @api public + */ + + function assertInstanceOf (constructor, msg) { + if (msg) flag(this, 'message', msg); + + var target = flag(this, 'object') + var ssfi = flag(this, 'ssfi'); + var flagMsg = flag(this, 'message'); + var validInstanceOfTarget = constructor === Object(constructor) && ( + typeof constructor === 'function' || + (typeof Symbol !== 'undefined' && + typeof Symbol.hasInstance !== 'undefined' && + Symbol.hasInstance in constructor) + ); + + if (!validInstanceOfTarget) { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + var constructorType = constructor === null ? 'null' : typeof constructor; + throw new AssertionError( + flagMsg + 'The instanceof assertion needs a constructor but ' + constructorType + ' was given.', + undefined, + ssfi + ); + } + + var isInstanceOf = target instanceof constructor + + var name = _.getName(constructor); + if (name === null) { + name = 'an unnamed constructor'; + } + + this.assert( + isInstanceOf + , 'expected #{this} to be an instance of ' + name + , 'expected #{this} to not be an instance of ' + name + ); + }; + + Assertion.addMethod('instanceof', assertInstanceOf); + Assertion.addMethod('instanceOf', assertInstanceOf); + + /** + * ### .property(name[, val[, msg]]) + * + * Asserts that the target has a property with the given key `name`. + * + * expect({a: 1}).to.have.property('a'); + * + * When `val` is provided, `.property` also asserts that the property's value + * is equal to the given `val`. + * + * expect({a: 1}).to.have.property('a', 1); + * + * By default, strict (`===`) equality is used. Add `.deep` earlier in the + * chain to use deep equality instead. See the `deep-eql` project page for + * info on the deep equality algorithm: https://github.com/chaijs/deep-eql. + * + * // Target object deeply (but not strictly) has property `x: {a: 1}` + * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1}); + * expect({x: {a: 1}}).to.not.have.property('x', {a: 1}); + * + * The target's enumerable and non-enumerable properties are always included + * in the search. By default, both own and inherited properties are included. + * Add `.own` earlier in the chain to exclude inherited properties from the + * search. + * + * Object.prototype.b = 2; + * + * expect({a: 1}).to.have.own.property('a'); + * expect({a: 1}).to.have.own.property('a', 1); + * expect({a: 1}).to.have.property('b').but.not.own.property('b'); + * + * `.deep` and `.own` can be combined. + * + * expect({x: {a: 1}}).to.have.deep.own.property('x', {a: 1}); + * + * Add `.nested` earlier in the chain to enable dot- and bracket-notation when + * referencing nested properties. + * + * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]'); + * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]', 'y'); + * + * If `.` or `[]` are part of an actual property name, they can be escaped by + * adding two backslashes before them. + * + * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\.a.\\[b\\]'); + * + * `.deep` and `.nested` can be combined. + * + * expect({a: {b: [{c: 3}]}}) + * .to.have.deep.nested.property('a.b[0]', {c: 3}); + * + * `.own` and `.nested` cannot be combined. + * + * Add `.not` earlier in the chain to negate `.property`. + * + * expect({a: 1}).to.not.have.property('b'); + * + * However, it's dangerous to negate `.property` when providing `val`. The + * problem is that it creates uncertain expectations by asserting that the + * target either doesn't have a property with the given key `name`, or that it + * does have a property with the given key `name` but its value isn't equal to + * the given `val`. It's often best to identify the exact output that's + * expected, and then write an assertion that only accepts that exact output. + * + * When the target isn't expected to have a property with the given key + * `name`, it's often best to assert exactly that. + * + * expect({b: 2}).to.not.have.property('a'); // Recommended + * expect({b: 2}).to.not.have.property('a', 1); // Not recommended + * + * When the target is expected to have a property with the given key `name`, + * it's often best to assert that the property has its expected value, rather + * than asserting that it doesn't have one of many unexpected values. + * + * expect({a: 3}).to.have.property('a', 3); // Recommended + * expect({a: 3}).to.not.have.property('a', 1); // Not recommended + * + * `.property` changes the target of any assertions that follow in the chain + * to be the value of the property from the original target object. + * + * expect({a: 1}).to.have.property('a').that.is.a('number'); + * + * `.property` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing `val`, only use the + * second form. + * + * // Recommended + * expect({a: 1}).to.have.property('a', 2, 'nooo why fail??'); + * expect({a: 1}, 'nooo why fail??').to.have.property('a', 2); + * expect({a: 1}, 'nooo why fail??').to.have.property('b'); + * + * // Not recommended + * expect({a: 1}).to.have.property('b', undefined, 'nooo why fail??'); + * + * The above assertion isn't the same thing as not providing `val`. Instead, + * it's asserting that the target object has a `b` property that's equal to + * `undefined`. + * + * The assertions `.ownProperty` and `.haveOwnProperty` can be used + * interchangeably with `.own.property`. + * + * @name property + * @param {String} name + * @param {Mixed} val (optional) + * @param {String} msg _optional_ + * @returns value of property for chaining + * @namespace BDD + * @api public + */ + + function assertProperty (name, val, msg) { + if (msg) flag(this, 'message', msg); + + var isNested = flag(this, 'nested') + , isOwn = flag(this, 'own') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (isNested && isOwn) { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'The "nested" and "own" flags cannot be combined.', + undefined, + ssfi + ); + } + + var isDeep = flag(this, 'deep') + , negate = flag(this, 'negate') + , obj = flag(this, 'object') + , pathInfo = isNested ? _.getPathInfo(obj, name) : null + , value = isNested ? pathInfo.value : obj[name]; + + var descriptor = ''; + if (isDeep) descriptor += 'deep '; + if (isOwn) descriptor += 'own '; + if (isNested) descriptor += 'nested '; + descriptor += 'property '; + + var hasProperty; + if (isOwn) hasProperty = Object.prototype.hasOwnProperty.call(obj, name); + else if (isNested) hasProperty = pathInfo.exists; + else hasProperty = _.hasProperty(obj, name); + + // When performing a negated assertion for both name and val, merely having + // a property with the given name isn't enough to cause the assertion to + // fail. It must both have a property with the given name, and the value of + // that property must equal the given val. Therefore, skip this assertion in + // favor of the next. + if (!negate || arguments.length === 1) { + this.assert( + hasProperty + , 'expected #{this} to have ' + descriptor + _.inspect(name) + , 'expected #{this} to not have ' + descriptor + _.inspect(name)); + } + + if (arguments.length > 1) { + this.assert( + hasProperty && (isDeep ? _.eql(val, value) : val === value) + , 'expected #{this} to have ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}' + , 'expected #{this} to not have ' + descriptor + _.inspect(name) + ' of #{act}' + , val + , value + ); + } + + flag(this, 'object', value); + } + + Assertion.addMethod('property', assertProperty); + + function assertOwnProperty (name, value, msg) { + flag(this, 'own', true); + assertProperty.apply(this, arguments); + } + + Assertion.addMethod('ownProperty', assertOwnProperty); + Assertion.addMethod('haveOwnProperty', assertOwnProperty); + + /** + * ### .ownPropertyDescriptor(name[, descriptor[, msg]]) + * + * Asserts that the target has its own property descriptor with the given key + * `name`. Enumerable and non-enumerable properties are included in the + * search. + * + * expect({a: 1}).to.have.ownPropertyDescriptor('a'); + * + * When `descriptor` is provided, `.ownPropertyDescriptor` also asserts that + * the property's descriptor is deeply equal to the given `descriptor`. See + * the `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * expect({a: 1}).to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 1, + * }); + * + * Add `.not` earlier in the chain to negate `.ownPropertyDescriptor`. + * + * expect({a: 1}).to.not.have.ownPropertyDescriptor('b'); + * + * However, it's dangerous to negate `.ownPropertyDescriptor` when providing + * a `descriptor`. The problem is that it creates uncertain expectations by + * asserting that the target either doesn't have a property descriptor with + * the given key `name`, or that it does have a property descriptor with the + * given key `name` but its not deeply equal to the given `descriptor`. It's + * often best to identify the exact output that's expected, and then write an + * assertion that only accepts that exact output. + * + * When the target isn't expected to have a property descriptor with the given + * key `name`, it's often best to assert exactly that. + * + * // Recommended + * expect({b: 2}).to.not.have.ownPropertyDescriptor('a'); + * + * // Not recommended + * expect({b: 2}).to.not.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 1, + * }); + * + * When the target is expected to have a property descriptor with the given + * key `name`, it's often best to assert that the property has its expected + * descriptor, rather than asserting that it doesn't have one of many + * unexpected descriptors. + * + * // Recommended + * expect({a: 3}).to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 3, + * }); + * + * // Not recommended + * expect({a: 3}).to.not.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 1, + * }); + * + * `.ownPropertyDescriptor` changes the target of any assertions that follow + * in the chain to be the value of the property descriptor from the original + * target object. + * + * expect({a: 1}).to.have.ownPropertyDescriptor('a') + * .that.has.property('enumerable', true); + * + * `.ownPropertyDescriptor` accepts an optional `msg` argument which is a + * custom error message to show when the assertion fails. The message can also + * be given as the second argument to `expect`. When not providing + * `descriptor`, only use the second form. + * + * // Recommended + * expect({a: 1}).to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 2, + * }, 'nooo why fail??'); + * + * // Recommended + * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 2, + * }); + * + * // Recommended + * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('b'); + * + * // Not recommended + * expect({a: 1}) + * .to.have.ownPropertyDescriptor('b', undefined, 'nooo why fail??'); + * + * The above assertion isn't the same thing as not providing `descriptor`. + * Instead, it's asserting that the target object has a `b` property + * descriptor that's deeply equal to `undefined`. + * + * The alias `.haveOwnPropertyDescriptor` can be used interchangeably with + * `.ownPropertyDescriptor`. + * + * @name ownPropertyDescriptor + * @alias haveOwnPropertyDescriptor + * @param {String} name + * @param {Object} descriptor _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertOwnPropertyDescriptor (name, descriptor, msg) { + if (typeof descriptor === 'string') { + msg = descriptor; + descriptor = null; + } + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name); + if (actualDescriptor && descriptor) { + this.assert( + _.eql(descriptor, actualDescriptor) + , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor) + , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor) + , descriptor + , actualDescriptor + , true + ); + } else { + this.assert( + actualDescriptor + , 'expected #{this} to have an own property descriptor for ' + _.inspect(name) + , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name) + ); + } + flag(this, 'object', actualDescriptor); + } + + Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor); + Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor); + + /** + * ### .lengthOf(n[, msg]) + * + * Asserts that the target's `length` property is equal to the given number + * `n`. + * + * expect([1, 2, 3]).to.have.lengthOf(3); + * expect('foo').to.have.lengthOf(3); + * + * Add `.not` earlier in the chain to negate `.lengthOf`. However, it's often + * best to assert that the target's `length` property is equal to its expected + * value, rather than not equal to one of many unexpected values. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.not.have.lengthOf(4); // Not recommended + * + * `.lengthOf` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect([1, 2, 3]).to.have.lengthOf(2, 'nooo why fail??'); + * expect([1, 2, 3], 'nooo why fail??').to.have.lengthOf(2); + * + * `.lengthOf` can also be used as a language chain, causing all `.above`, + * `.below`, `.least`, `.most`, and `.within` assertions that follow in the + * chain to use the target's `length` property as the target. However, it's + * often best to assert that the target's `length` property is equal to its + * expected length, rather than asserting that its `length` property falls + * within some range of values. + * + * // Recommended + * expect([1, 2, 3]).to.have.lengthOf(3); + * + * // Not recommended + * expect([1, 2, 3]).to.have.lengthOf.above(2); + * expect([1, 2, 3]).to.have.lengthOf.below(4); + * expect([1, 2, 3]).to.have.lengthOf.at.least(3); + * expect([1, 2, 3]).to.have.lengthOf.at.most(3); + * expect([1, 2, 3]).to.have.lengthOf.within(2,4); + * + * Due to a compatibility issue, the alias `.length` can't be chained directly + * off of an uninvoked method such as `.a`. Therefore, `.length` can't be used + * interchangeably with `.lengthOf` in every situation. It's recommended to + * always use `.lengthOf` instead of `.length`. + * + * expect([1, 2, 3]).to.have.a.length(3); // incompatible; throws error + * expect([1, 2, 3]).to.have.a.lengthOf(3); // passes as expected + * + * @name lengthOf + * @alias length + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertLengthChain () { + flag(this, 'doLength', true); + } + + function assertLength (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + var len = obj.length; + + this.assert( + len == n + , 'expected #{this} to have a length of #{exp} but got #{act}' + , 'expected #{this} to not have a length of #{act}' + , n + , len + ); + } + + Assertion.addChainableMethod('length', assertLength, assertLengthChain); + Assertion.addChainableMethod('lengthOf', assertLength, assertLengthChain); + + /** + * ### .match(re[, msg]) + * + * Asserts that the target matches the given regular expression `re`. + * + * expect('foobar').to.match(/^foo/); + * + * Add `.not` earlier in the chain to negate `.match`. + * + * expect('foobar').to.not.match(/taco/); + * + * `.match` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect('foobar').to.match(/taco/, 'nooo why fail??'); + * expect('foobar', 'nooo why fail??').to.match(/taco/); + * + * The alias `.matches` can be used interchangeably with `.match`. + * + * @name match + * @alias matches + * @param {RegExp} re + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + function assertMatch(re, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + this.assert( + re.exec(obj) + , 'expected #{this} to match ' + re + , 'expected #{this} not to match ' + re + ); + } + + Assertion.addMethod('match', assertMatch); + Assertion.addMethod('matches', assertMatch); + + /** + * ### .string(str[, msg]) + * + * Asserts that the target string contains the given substring `str`. + * + * expect('foobar').to.have.string('bar'); + * + * Add `.not` earlier in the chain to negate `.string`. + * + * expect('foobar').to.not.have.string('taco'); + * + * `.string` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect('foobar').to.have.string(/taco/, 'nooo why fail??'); + * expect('foobar', 'nooo why fail??').to.have.string(/taco/); + * + * @name string + * @param {String} str + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + Assertion.addMethod('string', function (str, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(obj, flagMsg, ssfi, true).is.a('string'); + + this.assert( + ~obj.indexOf(str) + , 'expected #{this} to contain ' + _.inspect(str) + , 'expected #{this} to not contain ' + _.inspect(str) + ); + }); + + /** + * ### .keys(key1[, key2[, ...]]) + * + * Asserts that the target object, array, map, or set has the given keys. Only + * the target's own inherited properties are included in the search. + * + * When the target is an object or array, keys can be provided as one or more + * string arguments, a single array argument, or a single object argument. In + * the latter case, only the keys in the given object matter; the values are + * ignored. + * + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); + * expect(['x', 'y']).to.have.all.keys(0, 1); + * + * expect({a: 1, b: 2}).to.have.all.keys(['a', 'b']); + * expect(['x', 'y']).to.have.all.keys([0, 1]); + * + * expect({a: 1, b: 2}).to.have.all.keys({a: 4, b: 5}); // ignore 4 and 5 + * expect(['x', 'y']).to.have.all.keys({0: 4, 1: 5}); // ignore 4 and 5 + * + * When the target is a map or set, each key must be provided as a separate + * argument. + * + * expect(new Map([['a', 1], ['b', 2]])).to.have.all.keys('a', 'b'); + * expect(new Set(['a', 'b'])).to.have.all.keys('a', 'b'); + * + * Because `.keys` does different things based on the target's type, it's + * important to check the target's type before using `.keys`. See the `.a` doc + * for info on testing a target's type. + * + * expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b'); + * + * By default, strict (`===`) equality is used to compare keys of maps and + * sets. Add `.deep` earlier in the chain to use deep equality instead. See + * the `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target set deeply (but not strictly) has key `{a: 1}` + * expect(new Set([{a: 1}])).to.have.all.deep.keys([{a: 1}]); + * expect(new Set([{a: 1}])).to.not.have.all.keys([{a: 1}]); + * + * By default, the target must have all of the given keys and no more. Add + * `.any` earlier in the chain to only require that the target have at least + * one of the given keys. Also, add `.not` earlier in the chain to negate + * `.keys`. It's often best to add `.any` when negating `.keys`, and to use + * `.all` when asserting `.keys` without negation. + * + * When negating `.keys`, `.any` is preferred because `.not.any.keys` asserts + * exactly what's expected of the output, whereas `.not.all.keys` creates + * uncertain expectations. + * + * // Recommended; asserts that target doesn't have any of the given keys + * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd'); + * + * // Not recommended; asserts that target doesn't have all of the given + * // keys but may or may not have some of them + * expect({a: 1, b: 2}).to.not.have.all.keys('c', 'd'); + * + * When asserting `.keys` without negation, `.all` is preferred because + * `.all.keys` asserts exactly what's expected of the output, whereas + * `.any.keys` creates uncertain expectations. + * + * // Recommended; asserts that target has all the given keys + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); + * + * // Not recommended; asserts that target has at least one of the given + * // keys but may or may not have more of them + * expect({a: 1, b: 2}).to.have.any.keys('a', 'b'); + * + * Note that `.all` is used by default when neither `.all` nor `.any` appear + * earlier in the chain. However, it's often best to add `.all` anyway because + * it improves readability. + * + * // Both assertions are identical + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); // Recommended + * expect({a: 1, b: 2}).to.have.keys('a', 'b'); // Not recommended + * + * Add `.include` earlier in the chain to require that the target's keys be a + * superset of the expected keys, rather than identical sets. + * + * // Target object's keys are a superset of ['a', 'b'] but not identical + * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b'); + * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b'); + * + * However, if `.any` and `.include` are combined, only the `.any` takes + * effect. The `.include` is ignored in this case. + * + * // Both assertions are identical + * expect({a: 1}).to.have.any.keys('a', 'b'); + * expect({a: 1}).to.include.any.keys('a', 'b'); + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({a: 1}, 'nooo why fail??').to.have.key('b'); + * + * The alias `.key` can be used interchangeably with `.keys`. + * + * @name keys + * @alias key + * @param {...String|Array|Object} keys + * @namespace BDD + * @api public + */ + + function assertKeys (keys) { + var obj = flag(this, 'object') + , objType = _.type(obj) + , keysType = _.type(keys) + , ssfi = flag(this, 'ssfi') + , isDeep = flag(this, 'deep') + , str + , deepStr = '' + , ok = true + , flagMsg = flag(this, 'message'); + + flagMsg = flagMsg ? flagMsg + ': ' : ''; + var mixedArgsMsg = flagMsg + 'when testing keys against an object or an array you must give a single Array|Object|String argument or multiple String arguments'; + + if (objType === 'Map' || objType === 'Set') { + deepStr = isDeep ? 'deeply ' : ''; + actual = []; + + // Map and Set '.keys' aren't supported in IE 11. Therefore, use .forEach. + obj.forEach(function (val, key) { actual.push(key) }); + + if (keysType !== 'Array') { + keys = Array.prototype.slice.call(arguments); + } + + } else { + actual = _.getOwnEnumerableProperties(obj); + + switch (keysType) { + case 'Array': + if (arguments.length > 1) { + throw new AssertionError(mixedArgsMsg, undefined, ssfi); + } + break; + case 'Object': + if (arguments.length > 1) { + throw new AssertionError(mixedArgsMsg, undefined, ssfi); + } + keys = Object.keys(keys); + break; + default: + keys = Array.prototype.slice.call(arguments); + } + + // Only stringify non-Symbols because Symbols would become "Symbol()" + keys = keys.map(function (val) { + return typeof val === 'symbol' ? val : String(val); + }); + } + + if (!keys.length) { + throw new AssertionError(flagMsg + 'keys required', undefined, ssfi); + } + + var len = keys.length + , any = flag(this, 'any') + , all = flag(this, 'all') + , expected = keys + , actual; + + if (!any && !all) { + all = true; + } + + // Has any + if (any) { + ok = expected.some(function(expectedKey) { + return actual.some(function(actualKey) { + if (isDeep) { + return _.eql(expectedKey, actualKey); + } else { + return expectedKey === actualKey; + } + }); + }); + } + + // Has all + if (all) { + ok = expected.every(function(expectedKey) { + return actual.some(function(actualKey) { + if (isDeep) { + return _.eql(expectedKey, actualKey); + } else { + return expectedKey === actualKey; + } + }); + }); + + if (!flag(this, 'contains')) { + ok = ok && keys.length == actual.length; + } + } + + // Key string + if (len > 1) { + keys = keys.map(function(key) { + return _.inspect(key); + }); + var last = keys.pop(); + if (all) { + str = keys.join(', ') + ', and ' + last; + } + if (any) { + str = keys.join(', ') + ', or ' + last; + } + } else { + str = _.inspect(keys[0]); + } + + // Form + str = (len > 1 ? 'keys ' : 'key ') + str; + + // Have / include + str = (flag(this, 'contains') ? 'contain ' : 'have ') + str; + + // Assertion + this.assert( + ok + , 'expected #{this} to ' + deepStr + str + , 'expected #{this} to not ' + deepStr + str + , expected.slice(0).sort(_.compareByInspect) + , actual.sort(_.compareByInspect) + , true + ); + } + + Assertion.addMethod('keys', assertKeys); + Assertion.addMethod('key', assertKeys); + + /** + * ### .throw([errorLike], [errMsgMatcher], [msg]) + * + * When no arguments are provided, `.throw` invokes the target function and + * asserts that an error is thrown. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(); + * + * When one argument is provided, and it's an error constructor, `.throw` + * invokes the target function and asserts that an error is thrown that's an + * instance of that error constructor. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(TypeError); + * + * When one argument is provided, and it's an error instance, `.throw` invokes + * the target function and asserts that an error is thrown that's strictly + * (`===`) equal to that error instance. + * + * var err = new TypeError('Illegal salmon!'); + * var badFn = function () { throw err; }; + * + * expect(badFn).to.throw(err); + * + * When one argument is provided, and it's a string, `.throw` invokes the + * target function and asserts that an error is thrown with a message that + * contains that string. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw('salmon'); + * + * When one argument is provided, and it's a regular expression, `.throw` + * invokes the target function and asserts that an error is thrown with a + * message that matches that regular expression. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(/salmon/); + * + * When two arguments are provided, and the first is an error instance or + * constructor, and the second is a string or regular expression, `.throw` + * invokes the function and asserts that an error is thrown that fulfills both + * conditions as described above. + * + * var err = new TypeError('Illegal salmon!'); + * var badFn = function () { throw err; }; + * + * expect(badFn).to.throw(TypeError, 'salmon'); + * expect(badFn).to.throw(TypeError, /salmon/); + * expect(badFn).to.throw(err, 'salmon'); + * expect(badFn).to.throw(err, /salmon/); + * + * Add `.not` earlier in the chain to negate `.throw`. + * + * var goodFn = function () {}; + * + * expect(goodFn).to.not.throw(); + * + * However, it's dangerous to negate `.throw` when providing any arguments. + * The problem is that it creates uncertain expectations by asserting that the + * target either doesn't throw an error, or that it throws an error but of a + * different type than the given type, or that it throws an error of the given + * type but with a message that doesn't include the given string. It's often + * best to identify the exact output that's expected, and then write an + * assertion that only accepts that exact output. + * + * When the target isn't expected to throw an error, it's often best to assert + * exactly that. + * + * var goodFn = function () {}; + * + * expect(goodFn).to.not.throw(); // Recommended + * expect(goodFn).to.not.throw(ReferenceError, 'x'); // Not recommended + * + * When the target is expected to throw an error, it's often best to assert + * that the error is of its expected type, and has a message that includes an + * expected string, rather than asserting that it doesn't have one of many + * unexpected types, and doesn't have a message that includes some string. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(TypeError, 'salmon'); // Recommended + * expect(badFn).to.not.throw(ReferenceError, 'x'); // Not recommended + * + * `.throw` changes the target of any assertions that follow in the chain to + * be the error object that's thrown. + * + * var err = new TypeError('Illegal salmon!'); + * err.code = 42; + * var badFn = function () { throw err; }; + * + * expect(badFn).to.throw(TypeError).with.property('code', 42); + * + * `.throw` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. When not providing two arguments, always use + * the second form. + * + * var goodFn = function () {}; + * + * expect(goodFn).to.throw(TypeError, 'x', 'nooo why fail??'); + * expect(goodFn, 'nooo why fail??').to.throw(); + * + * Due to limitations in ES5, `.throw` may not always work as expected when + * using a transpiler such as Babel or TypeScript. In particular, it may + * produce unexpected results when subclassing the built-in `Error` object and + * then passing the subclassed constructor to `.throw`. See your transpiler's + * docs for details: + * + * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes)) + * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work)) + * + * Beware of some common mistakes when using the `throw` assertion. One common + * mistake is to accidentally invoke the function yourself instead of letting + * the `throw` assertion invoke the function for you. For example, when + * testing if a function named `fn` throws, provide `fn` instead of `fn()` as + * the target for the assertion. + * + * expect(fn).to.throw(); // Good! Tests `fn` as desired + * expect(fn()).to.throw(); // Bad! Tests result of `fn()`, not `fn` + * + * If you need to assert that your function `fn` throws when passed certain + * arguments, then wrap a call to `fn` inside of another function. + * + * expect(function () { fn(42); }).to.throw(); // Function expression + * expect(() => fn(42)).to.throw(); // ES6 arrow function + * + * Another common mistake is to provide an object method (or any stand-alone + * function that relies on `this`) as the target of the assertion. Doing so is + * problematic because the `this` context will be lost when the function is + * invoked by `.throw`; there's no way for it to know what `this` is supposed + * to be. There are two ways around this problem. One solution is to wrap the + * method or function call inside of another function. Another solution is to + * use `bind`. + * + * expect(function () { cat.meow(); }).to.throw(); // Function expression + * expect(() => cat.meow()).to.throw(); // ES6 arrow function + * expect(cat.meow.bind(cat)).to.throw(); // Bind + * + * Finally, it's worth mentioning that it's a best practice in JavaScript to + * only throw `Error` and derivatives of `Error` such as `ReferenceError`, + * `TypeError`, and user-defined objects that extend `Error`. No other type of + * value will generate a stack trace when initialized. With that said, the + * `throw` assertion does technically support any type of value being thrown, + * not just `Error` and its derivatives. + * + * The aliases `.throws` and `.Throw` can be used interchangeably with + * `.throw`. + * + * @name throw + * @alias throws + * @alias Throw + * @param {Error|ErrorConstructor} errorLike + * @param {String|RegExp} errMsgMatcher error message + * @param {String} msg _optional_ + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @returns error for chaining (null if no error) + * @namespace BDD + * @api public + */ + + function assertThrows (errorLike, errMsgMatcher, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , ssfi = flag(this, 'ssfi') + , flagMsg = flag(this, 'message') + , negate = flag(this, 'negate') || false; + new Assertion(obj, flagMsg, ssfi, true).is.a('function'); + + if (errorLike instanceof RegExp || typeof errorLike === 'string') { + errMsgMatcher = errorLike; + errorLike = null; + } + + var caughtErr; + try { + obj(); + } catch (err) { + caughtErr = err; + } + + // If we have the negate flag enabled and at least one valid argument it means we do expect an error + // but we want it to match a given set of criteria + var everyArgIsUndefined = errorLike === undefined && errMsgMatcher === undefined; + + // If we've got the negate flag enabled and both args, we should only fail if both aren't compatible + // See Issue #551 and PR #683@GitHub + var everyArgIsDefined = Boolean(errorLike && errMsgMatcher); + var errorLikeFail = false; + var errMsgMatcherFail = false; + + // Checking if error was thrown + if (everyArgIsUndefined || !everyArgIsUndefined && !negate) { + // We need this to display results correctly according to their types + var errorLikeString = 'an error'; + if (errorLike instanceof Error) { + errorLikeString = '#{exp}'; + } else if (errorLike) { + errorLikeString = _.checkError.getConstructorName(errorLike); + } + + this.assert( + caughtErr + , 'expected #{this} to throw ' + errorLikeString + , 'expected #{this} to not throw an error but #{act} was thrown' + , errorLike && errorLike.toString() + , (caughtErr instanceof Error ? + caughtErr.toString() : (typeof caughtErr === 'string' ? caughtErr : caughtErr && + _.checkError.getConstructorName(caughtErr))) + ); + } + + if (errorLike && caughtErr) { + // We should compare instances only if `errorLike` is an instance of `Error` + if (errorLike instanceof Error) { + var isCompatibleInstance = _.checkError.compatibleInstance(caughtErr, errorLike); + + if (isCompatibleInstance === negate) { + // These checks were created to ensure we won't fail too soon when we've got both args and a negate + // See Issue #551 and PR #683@GitHub + if (everyArgIsDefined && negate) { + errorLikeFail = true; + } else { + this.assert( + negate + , 'expected #{this} to throw #{exp} but #{act} was thrown' + , 'expected #{this} to not throw #{exp}' + (caughtErr && !negate ? ' but #{act} was thrown' : '') + , errorLike.toString() + , caughtErr.toString() + ); + } + } + } + + var isCompatibleConstructor = _.checkError.compatibleConstructor(caughtErr, errorLike); + if (isCompatibleConstructor === negate) { + if (everyArgIsDefined && negate) { + errorLikeFail = true; + } else { + this.assert( + negate + , 'expected #{this} to throw #{exp} but #{act} was thrown' + , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '') + , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike)) + , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr)) + ); + } + } + } + + if (caughtErr && errMsgMatcher !== undefined && errMsgMatcher !== null) { + // Here we check compatible messages + var placeholder = 'including'; + if (errMsgMatcher instanceof RegExp) { + placeholder = 'matching' + } + + var isCompatibleMessage = _.checkError.compatibleMessage(caughtErr, errMsgMatcher); + if (isCompatibleMessage === negate) { + if (everyArgIsDefined && negate) { + errMsgMatcherFail = true; + } else { + this.assert( + negate + , 'expected #{this} to throw error ' + placeholder + ' #{exp} but got #{act}' + , 'expected #{this} to throw error not ' + placeholder + ' #{exp}' + , errMsgMatcher + , _.checkError.getMessage(caughtErr) + ); + } + } + } + + // If both assertions failed and both should've matched we throw an error + if (errorLikeFail && errMsgMatcherFail) { + this.assert( + negate + , 'expected #{this} to throw #{exp} but #{act} was thrown' + , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '') + , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike)) + , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr)) + ); + } + + flag(this, 'object', caughtErr); + }; + + Assertion.addMethod('throw', assertThrows); + Assertion.addMethod('throws', assertThrows); + Assertion.addMethod('Throw', assertThrows); + + /** + * ### .respondTo(method[, msg]) + * + * When the target is a non-function object, `.respondTo` asserts that the + * target has a method with the given name `method`. The method can be own or + * inherited, and it can be enumerable or non-enumerable. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * + * expect(new Cat()).to.respondTo('meow'); + * + * When the target is a function, `.respondTo` asserts that the target's + * `prototype` property has a method with the given name `method`. Again, the + * method can be own or inherited, and it can be enumerable or non-enumerable. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * + * expect(Cat).to.respondTo('meow'); + * + * Add `.itself` earlier in the chain to force `.respondTo` to treat the + * target as a non-function object, even if it's a function. Thus, it asserts + * that the target has a method with the given name `method`, rather than + * asserting that the target's `prototype` property has a method with the + * given name `method`. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * Cat.hiss = function () {}; + * + * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow'); + * + * When not adding `.itself`, it's important to check the target's type before + * using `.respondTo`. See the `.a` doc for info on checking a target's type. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * + * expect(new Cat()).to.be.an('object').that.respondsTo('meow'); + * + * Add `.not` earlier in the chain to negate `.respondTo`. + * + * function Dog () {} + * Dog.prototype.bark = function () {}; + * + * expect(new Dog()).to.not.respondTo('meow'); + * + * `.respondTo` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect({}).to.respondTo('meow', 'nooo why fail??'); + * expect({}, 'nooo why fail??').to.respondTo('meow'); + * + * The alias `.respondsTo` can be used interchangeably with `.respondTo`. + * + * @name respondTo + * @alias respondsTo + * @param {String} method + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function respondTo (method, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , itself = flag(this, 'itself') + , context = ('function' === typeof obj && !itself) + ? obj.prototype[method] + : obj[method]; + + this.assert( + 'function' === typeof context + , 'expected #{this} to respond to ' + _.inspect(method) + , 'expected #{this} to not respond to ' + _.inspect(method) + ); + } + + Assertion.addMethod('respondTo', respondTo); + Assertion.addMethod('respondsTo', respondTo); + + /** + * ### .itself + * + * Forces all `.respondTo` assertions that follow in the chain to behave as if + * the target is a non-function object, even if it's a function. Thus, it + * causes `.respondTo` to assert that the target has a method with the given + * name, rather than asserting that the target's `prototype` property has a + * method with the given name. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * Cat.hiss = function () {}; + * + * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow'); + * + * @name itself + * @namespace BDD + * @api public + */ + + Assertion.addProperty('itself', function () { + flag(this, 'itself', true); + }); + + /** + * ### .satisfy(matcher[, msg]) + * + * Invokes the given `matcher` function with the target being passed as the + * first argument, and asserts that the value returned is truthy. + * + * expect(1).to.satisfy(function(num) { + * return num > 0; + * }); + * + * Add `.not` earlier in the chain to negate `.satisfy`. + * + * expect(1).to.not.satisfy(function(num) { + * return num > 2; + * }); + * + * `.satisfy` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(1).to.satisfy(function(num) { + * return num > 2; + * }, 'nooo why fail??'); + * + * expect(1, 'nooo why fail??').to.satisfy(function(num) { + * return num > 2; + * }); + * + * The alias `.satisfies` can be used interchangeably with `.satisfy`. + * + * @name satisfy + * @alias satisfies + * @param {Function} matcher + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function satisfy (matcher, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + var result = matcher(obj); + this.assert( + result + , 'expected #{this} to satisfy ' + _.objDisplay(matcher) + , 'expected #{this} to not satisfy' + _.objDisplay(matcher) + , flag(this, 'negate') ? false : true + , result + ); + } + + Assertion.addMethod('satisfy', satisfy); + Assertion.addMethod('satisfies', satisfy); + + /** + * ### .closeTo(expected, delta[, msg]) + * + * Asserts that the target is a number that's within a given +/- `delta` range + * of the given number `expected`. However, it's often best to assert that the + * target is equal to its expected value. + * + * // Recommended + * expect(1.5).to.equal(1.5); + * + * // Not recommended + * expect(1.5).to.be.closeTo(1, 0.5); + * expect(1.5).to.be.closeTo(2, 0.5); + * expect(1.5).to.be.closeTo(1, 1); + * + * Add `.not` earlier in the chain to negate `.closeTo`. + * + * expect(1.5).to.equal(1.5); // Recommended + * expect(1.5).to.not.be.closeTo(3, 1); // Not recommended + * + * `.closeTo` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(1.5).to.be.closeTo(3, 1, 'nooo why fail??'); + * expect(1.5, 'nooo why fail??').to.be.closeTo(3, 1); + * + * The alias `.approximately` can be used interchangeably with `.closeTo`. + * + * @name closeTo + * @alias approximately + * @param {Number} expected + * @param {Number} delta + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function closeTo(expected, delta, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + if (typeof expected !== 'number' || typeof delta !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the arguments to closeTo or approximately must be numbers', + undefined, + ssfi + ); + } + + this.assert( + Math.abs(obj - expected) <= delta + , 'expected #{this} to be close to ' + expected + ' +/- ' + delta + , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta + ); + } + + Assertion.addMethod('closeTo', closeTo); + Assertion.addMethod('approximately', closeTo); + + // Note: Duplicates are ignored if testing for inclusion instead of sameness. + function isSubsetOf(subset, superset, cmp, contains, ordered) { + if (!contains) { + if (subset.length !== superset.length) return false; + superset = superset.slice(); + } + + return subset.every(function(elem, idx) { + if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx]; + + if (!cmp) { + var matchIdx = superset.indexOf(elem); + if (matchIdx === -1) return false; + + // Remove match from superset so not counted twice if duplicate in subset. + if (!contains) superset.splice(matchIdx, 1); + return true; + } + + return superset.some(function(elem2, matchIdx) { + if (!cmp(elem, elem2)) return false; + + // Remove match from superset so not counted twice if duplicate in subset. + if (!contains) superset.splice(matchIdx, 1); + return true; + }); + }); + } + + /** + * ### .members(set[, msg]) + * + * Asserts that the target array has the same members as the given array + * `set`. + * + * expect([1, 2, 3]).to.have.members([2, 1, 3]); + * expect([1, 2, 2]).to.have.members([2, 1, 2]); + * + * By default, members are compared using strict (`===`) equality. Add `.deep` + * earlier in the chain to use deep equality instead. See the `deep-eql` + * project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target array deeply (but not strictly) has member `{a: 1}` + * expect([{a: 1}]).to.have.deep.members([{a: 1}]); + * expect([{a: 1}]).to.not.have.members([{a: 1}]); + * + * By default, order doesn't matter. Add `.ordered` earlier in the chain to + * require that members appear in the same order. + * + * expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]); + * expect([1, 2, 3]).to.have.members([2, 1, 3]) + * .but.not.ordered.members([2, 1, 3]); + * + * By default, both arrays must be the same size. Add `.include` earlier in + * the chain to require that the target's members be a superset of the + * expected members. Note that duplicates are ignored in the subset when + * `.include` is added. + * + * // Target array is a superset of [1, 2] but not identical + * expect([1, 2, 3]).to.include.members([1, 2]); + * expect([1, 2, 3]).to.not.have.members([1, 2]); + * + * // Duplicates in the subset are ignored + * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]); + * + * `.deep`, `.ordered`, and `.include` can all be combined. However, if + * `.include` and `.ordered` are combined, the ordering begins at the start of + * both arrays. + * + * expect([{a: 1}, {b: 2}, {c: 3}]) + * .to.include.deep.ordered.members([{a: 1}, {b: 2}]) + * .but.not.include.deep.ordered.members([{b: 2}, {c: 3}]); + * + * Add `.not` earlier in the chain to negate `.members`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the target array doesn't have all of the same members as + * the given array `set` but may or may not have some of them. It's often best + * to identify the exact output that's expected, and then write an assertion + * that only accepts that exact output. + * + * expect([1, 2]).to.not.include(3).and.not.include(4); // Recommended + * expect([1, 2]).to.not.have.members([3, 4]); // Not recommended + * + * `.members` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect([1, 2]).to.have.members([1, 2, 3], 'nooo why fail??'); + * expect([1, 2], 'nooo why fail??').to.have.members([1, 2, 3]); + * + * @name members + * @param {Array} set + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + Assertion.addMethod('members', function (subset, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + new Assertion(obj, flagMsg, ssfi, true).to.be.an('array'); + new Assertion(subset, flagMsg, ssfi, true).to.be.an('array'); + + var contains = flag(this, 'contains'); + var ordered = flag(this, 'ordered'); + + var subject, failMsg, failNegateMsg, lengthCheck; + + if (contains) { + subject = ordered ? 'an ordered superset' : 'a superset'; + failMsg = 'expected #{this} to be ' + subject + ' of #{exp}'; + failNegateMsg = 'expected #{this} to not be ' + subject + ' of #{exp}'; + } else { + subject = ordered ? 'ordered members' : 'members'; + failMsg = 'expected #{this} to have the same ' + subject + ' as #{exp}'; + failNegateMsg = 'expected #{this} to not have the same ' + subject + ' as #{exp}'; + } + + var cmp = flag(this, 'deep') ? _.eql : undefined; + + this.assert( + isSubsetOf(subset, obj, cmp, contains, ordered) + , failMsg + , failNegateMsg + , subset + , obj + , true + ); + }); + + /** + * ### .oneOf(list[, msg]) + * + * Asserts that the target is a member of the given array `list`. However, + * it's often best to assert that the target is equal to its expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.oneOf([1, 2, 3]); // Not recommended + * + * Comparisons are performed using strict (`===`) equality. + * + * Add `.not` earlier in the chain to negate `.oneOf`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.oneOf([2, 3, 4]); // Not recommended + * + * `.oneOf` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.be.oneOf([2, 3, 4], 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.oneOf([2, 3, 4]); + * + * @name oneOf + * @param {Array<*>} list + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function oneOf (list, msg) { + if (msg) flag(this, 'message', msg); + var expected = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(list, flagMsg, ssfi, true).to.be.an('array'); + + this.assert( + list.indexOf(expected) > -1 + , 'expected #{this} to be one of #{exp}' + , 'expected #{this} to not be one of #{exp}' + , list + , expected + ); + } + + Assertion.addMethod('oneOf', oneOf); + + + /** + * ### .change(subject[, prop[, msg]]) + * + * When one argument is provided, `.change` asserts that the given function + * `subject` returns a different value when it's invoked before the target + * function compared to when it's invoked afterward. However, it's often best + * to assert that `subject` is equal to its expected value. + * + * var dots = '' + * , addDot = function () { dots += '.'; } + * , getDots = function () { return dots; }; + * + * // Recommended + * expect(getDots()).to.equal(''); + * addDot(); + * expect(getDots()).to.equal('.'); + * + * // Not recommended + * expect(addDot).to.change(getDots); + * + * When two arguments are provided, `.change` asserts that the value of the + * given object `subject`'s `prop` property is different before invoking the + * target function compared to afterward. + * + * var myObj = {dots: ''} + * , addDot = function () { myObj.dots += '.'; }; + * + * // Recommended + * expect(myObj).to.have.property('dots', ''); + * addDot(); + * expect(myObj).to.have.property('dots', '.'); + * + * // Not recommended + * expect(addDot).to.change(myObj, 'dots'); + * + * Strict (`===`) equality is used to compare before and after values. + * + * Add `.not` earlier in the chain to negate `.change`. + * + * var dots = '' + * , noop = function () {} + * , getDots = function () { return dots; }; + * + * expect(noop).to.not.change(getDots); + * + * var myObj = {dots: ''} + * , noop = function () {}; + * + * expect(noop).to.not.change(myObj, 'dots'); + * + * `.change` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing two arguments, always + * use the second form. + * + * var myObj = {dots: ''} + * , addDot = function () { myObj.dots += '.'; }; + * + * expect(addDot).to.not.change(myObj, 'dots', 'nooo why fail??'); + * + * var dots = '' + * , addDot = function () { dots += '.'; } + * , getDots = function () { return dots; }; + * + * expect(addDot, 'nooo why fail??').to.not.change(getDots); + * + * `.change` also causes all `.by` assertions that follow in the chain to + * assert how much a numeric subject was increased or decreased by. However, + * it's dangerous to use `.change.by`. The problem is that it creates + * uncertain expectations by asserting that the subject either increases by + * the given delta, or that it decreases by the given delta. It's often best + * to identify the exact output that's expected, and then write an assertion + * that only accepts that exact output. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; } + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * The alias `.changes` can be used interchangeably with `.change`. + * + * @name change + * @alias changes + * @param {String} subject + * @param {String} prop name _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertChanges (subject, prop, msg) { + if (msg) flag(this, 'message', msg); + var fn = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(fn, flagMsg, ssfi, true).is.a('function'); + + var initial; + if (!prop) { + new Assertion(subject, flagMsg, ssfi, true).is.a('function'); + initial = subject(); + } else { + new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); + initial = subject[prop]; + } + + fn(); + + var final = prop === undefined || prop === null ? subject() : subject[prop]; + var msgObj = prop === undefined || prop === null ? initial : '.' + prop; + + // This gets flagged because of the .by(delta) assertion + flag(this, 'deltaMsgObj', msgObj); + flag(this, 'initialDeltaValue', initial); + flag(this, 'finalDeltaValue', final); + flag(this, 'deltaBehavior', 'change'); + flag(this, 'realDelta', final !== initial); + + this.assert( + initial !== final + , 'expected ' + msgObj + ' to change' + , 'expected ' + msgObj + ' to not change' + ); + } + + Assertion.addMethod('change', assertChanges); + Assertion.addMethod('changes', assertChanges); + + /** + * ### .increase(subject[, prop[, msg]]) + * + * When one argument is provided, `.increase` asserts that the given function + * `subject` returns a greater number when it's invoked after invoking the + * target function compared to when it's invoked beforehand. `.increase` also + * causes all `.by` assertions that follow in the chain to assert how much + * greater of a number is returned. It's often best to assert that the return + * value increased by the expected amount, rather than asserting it increased + * by any amount. + * + * var val = 1 + * , addTwo = function () { val += 2; } + * , getVal = function () { return val; }; + * + * expect(addTwo).to.increase(getVal).by(2); // Recommended + * expect(addTwo).to.increase(getVal); // Not recommended + * + * When two arguments are provided, `.increase` asserts that the value of the + * given object `subject`'s `prop` property is greater after invoking the + * target function compared to beforehand. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.increase(myObj, 'val'); // Not recommended + * + * Add `.not` earlier in the chain to negate `.increase`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the subject either decreases, or that it stays the same. + * It's often best to identify the exact output that's expected, and then + * write an assertion that only accepts that exact output. + * + * When the subject is expected to decrease, it's often best to assert that it + * decreased by the expected amount. + * + * var myObj = {val: 1} + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.not.increase(myObj, 'val'); // Not recommended + * + * When the subject is expected to stay the same, it's often best to assert + * exactly that. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.not.change(myObj, 'val'); // Recommended + * expect(noop).to.not.increase(myObj, 'val'); // Not recommended + * + * `.increase` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing two arguments, always + * use the second form. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.increase(myObj, 'val', 'nooo why fail??'); + * + * var val = 1 + * , noop = function () {} + * , getVal = function () { return val; }; + * + * expect(noop, 'nooo why fail??').to.increase(getVal); + * + * The alias `.increases` can be used interchangeably with `.increase`. + * + * @name increase + * @alias increases + * @param {String|Function} subject + * @param {String} prop name _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertIncreases (subject, prop, msg) { + if (msg) flag(this, 'message', msg); + var fn = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(fn, flagMsg, ssfi, true).is.a('function'); + + var initial; + if (!prop) { + new Assertion(subject, flagMsg, ssfi, true).is.a('function'); + initial = subject(); + } else { + new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); + initial = subject[prop]; + } + + // Make sure that the target is a number + new Assertion(initial, flagMsg, ssfi, true).is.a('number'); + + fn(); + + var final = prop === undefined || prop === null ? subject() : subject[prop]; + var msgObj = prop === undefined || prop === null ? initial : '.' + prop; + + flag(this, 'deltaMsgObj', msgObj); + flag(this, 'initialDeltaValue', initial); + flag(this, 'finalDeltaValue', final); + flag(this, 'deltaBehavior', 'increase'); + flag(this, 'realDelta', final - initial); + + this.assert( + final - initial > 0 + , 'expected ' + msgObj + ' to increase' + , 'expected ' + msgObj + ' to not increase' + ); + } + + Assertion.addMethod('increase', assertIncreases); + Assertion.addMethod('increases', assertIncreases); + + /** + * ### .decrease(subject[, prop[, msg]]) + * + * When one argument is provided, `.decrease` asserts that the given function + * `subject` returns a lesser number when it's invoked after invoking the + * target function compared to when it's invoked beforehand. `.decrease` also + * causes all `.by` assertions that follow in the chain to assert how much + * lesser of a number is returned. It's often best to assert that the return + * value decreased by the expected amount, rather than asserting it decreased + * by any amount. + * + * var val = 1 + * , subtractTwo = function () { val -= 2; } + * , getVal = function () { return val; }; + * + * expect(subtractTwo).to.decrease(getVal).by(2); // Recommended + * expect(subtractTwo).to.decrease(getVal); // Not recommended + * + * When two arguments are provided, `.decrease` asserts that the value of the + * given object `subject`'s `prop` property is lesser after invoking the + * target function compared to beforehand. + * + * var myObj = {val: 1} + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.decrease(myObj, 'val'); // Not recommended + * + * Add `.not` earlier in the chain to negate `.decrease`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the subject either increases, or that it stays the same. + * It's often best to identify the exact output that's expected, and then + * write an assertion that only accepts that exact output. + * + * When the subject is expected to increase, it's often best to assert that it + * increased by the expected amount. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.not.decrease(myObj, 'val'); // Not recommended + * + * When the subject is expected to stay the same, it's often best to assert + * exactly that. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.not.change(myObj, 'val'); // Recommended + * expect(noop).to.not.decrease(myObj, 'val'); // Not recommended + * + * `.decrease` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing two arguments, always + * use the second form. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.decrease(myObj, 'val', 'nooo why fail??'); + * + * var val = 1 + * , noop = function () {} + * , getVal = function () { return val; }; + * + * expect(noop, 'nooo why fail??').to.decrease(getVal); + * + * The alias `.decreases` can be used interchangeably with `.decrease`. + * + * @name decrease + * @alias decreases + * @param {String|Function} subject + * @param {String} prop name _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertDecreases (subject, prop, msg) { + if (msg) flag(this, 'message', msg); + var fn = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(fn, flagMsg, ssfi, true).is.a('function'); + + var initial; + if (!prop) { + new Assertion(subject, flagMsg, ssfi, true).is.a('function'); + initial = subject(); + } else { + new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); + initial = subject[prop]; + } + + // Make sure that the target is a number + new Assertion(initial, flagMsg, ssfi, true).is.a('number'); + + fn(); + + var final = prop === undefined || prop === null ? subject() : subject[prop]; + var msgObj = prop === undefined || prop === null ? initial : '.' + prop; + + flag(this, 'deltaMsgObj', msgObj); + flag(this, 'initialDeltaValue', initial); + flag(this, 'finalDeltaValue', final); + flag(this, 'deltaBehavior', 'decrease'); + flag(this, 'realDelta', initial - final); + + this.assert( + final - initial < 0 + , 'expected ' + msgObj + ' to decrease' + , 'expected ' + msgObj + ' to not decrease' + ); + } + + Assertion.addMethod('decrease', assertDecreases); + Assertion.addMethod('decreases', assertDecreases); + + /** + * ### .by(delta[, msg]) + * + * When following an `.increase` assertion in the chain, `.by` asserts that + * the subject of the `.increase` assertion increased by the given `delta`. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); + * + * When following a `.decrease` assertion in the chain, `.by` asserts that the + * subject of the `.decrease` assertion decreased by the given `delta`. + * + * var myObj = {val: 1} + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); + * + * When following a `.change` assertion in the chain, `.by` asserts that the + * subject of the `.change` assertion either increased or decreased by the + * given `delta`. However, it's dangerous to use `.change.by`. The problem is + * that it creates uncertain expectations. It's often best to identify the + * exact output that's expected, and then write an assertion that only accepts + * that exact output. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; } + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * Add `.not` earlier in the chain to negate `.by`. However, it's often best + * to assert that the subject changed by its expected delta, rather than + * asserting that it didn't change by one of countless unexpected deltas. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * // Recommended + * expect(addTwo).to.increase(myObj, 'val').by(2); + * + * // Not recommended + * expect(addTwo).to.increase(myObj, 'val').but.not.by(3); + * + * `.by` accepts an optional `msg` argument which is a custom error message to + * show when the assertion fails. The message can also be given as the second + * argument to `expect`. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(3, 'nooo why fail??'); + * expect(addTwo, 'nooo why fail??').to.increase(myObj, 'val').by(3); + * + * @name by + * @param {Number} delta + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertDelta(delta, msg) { + if (msg) flag(this, 'message', msg); + + var msgObj = flag(this, 'deltaMsgObj'); + var initial = flag(this, 'initialDeltaValue'); + var final = flag(this, 'finalDeltaValue'); + var behavior = flag(this, 'deltaBehavior'); + var realDelta = flag(this, 'realDelta'); + + var expression; + if (behavior === 'change') { + expression = Math.abs(final - initial) === Math.abs(delta); + } else { + expression = realDelta === Math.abs(delta); + } + + this.assert( + expression + , 'expected ' + msgObj + ' to ' + behavior + ' by ' + delta + , 'expected ' + msgObj + ' to not ' + behavior + ' by ' + delta + ); + } + + Assertion.addMethod('by', assertDelta); + + /** + * ### .extensible + * + * Asserts that the target is extensible, which means that new properties can + * be added to it. Primitives are never extensible. + * + * expect({a: 1}).to.be.extensible; + * + * Add `.not` earlier in the chain to negate `.extensible`. + * + * var nonExtensibleObject = Object.preventExtensions({}) + * , sealedObject = Object.seal({}) + * , frozenObject = Object.freeze({}); + * + * expect(nonExtensibleObject).to.not.be.extensible; + * expect(sealedObject).to.not.be.extensible; + * expect(frozenObject).to.not.be.extensible; + * expect(1).to.not.be.extensible; + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(1, 'nooo why fail??').to.be.extensible; + * + * @name extensible + * @namespace BDD + * @api public + */ + + Assertion.addProperty('extensible', function() { + var obj = flag(this, 'object'); + + // In ES5, if the argument to this method is a primitive, then it will cause a TypeError. + // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible + // The following provides ES6 behavior for ES5 environments. + + var isExtensible = obj === Object(obj) && Object.isExtensible(obj); + + this.assert( + isExtensible + , 'expected #{this} to be extensible' + , 'expected #{this} to not be extensible' + ); + }); + + /** + * ### .sealed + * + * Asserts that the target is sealed, which means that new properties can't be + * added to it, and its existing properties can't be reconfigured or deleted. + * However, it's possible that its existing properties can still be reassigned + * to different values. Primitives are always sealed. + * + * var sealedObject = Object.seal({}); + * var frozenObject = Object.freeze({}); + * + * expect(sealedObject).to.be.sealed; + * expect(frozenObject).to.be.sealed; + * expect(1).to.be.sealed; + * + * Add `.not` earlier in the chain to negate `.sealed`. + * + * expect({a: 1}).to.not.be.sealed; + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({a: 1}, 'nooo why fail??').to.be.sealed; + * + * @name sealed + * @namespace BDD + * @api public + */ + + Assertion.addProperty('sealed', function() { + var obj = flag(this, 'object'); + + // In ES5, if the argument to this method is a primitive, then it will cause a TypeError. + // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true. + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed + // The following provides ES6 behavior for ES5 environments. + + var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true; + + this.assert( + isSealed + , 'expected #{this} to be sealed' + , 'expected #{this} to not be sealed' + ); + }); + + /** + * ### .frozen + * + * Asserts that the target is frozen, which means that new properties can't be + * added to it, and its existing properties can't be reassigned to different + * values, reconfigured, or deleted. Primitives are always frozen. + * + * var frozenObject = Object.freeze({}); + * + * expect(frozenObject).to.be.frozen; + * expect(1).to.be.frozen; + * + * Add `.not` earlier in the chain to negate `.frozen`. + * + * expect({a: 1}).to.not.be.frozen; + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({a: 1}, 'nooo why fail??').to.be.frozen; + * + * @name frozen + * @namespace BDD + * @api public + */ + + Assertion.addProperty('frozen', function() { + var obj = flag(this, 'object'); + + // In ES5, if the argument to this method is a primitive, then it will cause a TypeError. + // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true. + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen + // The following provides ES6 behavior for ES5 environments. + + var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true; + + this.assert( + isFrozen + , 'expected #{this} to be frozen' + , 'expected #{this} to not be frozen' + ); + }); + + /** + * ### .finite + * + * Asserts that the target is a number, and isn't `NaN` or positive/negative + * `Infinity`. + * + * expect(1).to.be.finite; + * + * Add `.not` earlier in the chain to negate `.finite`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the subject either isn't a number, or that it's `NaN`, or + * that it's positive `Infinity`, or that it's negative `Infinity`. It's often + * best to identify the exact output that's expected, and then write an + * assertion that only accepts that exact output. + * + * When the target isn't expected to be a number, it's often best to assert + * that it's the expected type, rather than asserting that it isn't one of + * many unexpected types. + * + * expect('foo').to.be.a('string'); // Recommended + * expect('foo').to.not.be.finite; // Not recommended + * + * When the target is expected to be `NaN`, it's often best to assert exactly + * that. + * + * expect(NaN).to.be.NaN; // Recommended + * expect(NaN).to.not.be.finite; // Not recommended + * + * When the target is expected to be positive infinity, it's often best to + * assert exactly that. + * + * expect(Infinity).to.equal(Infinity); // Recommended + * expect(Infinity).to.not.be.finite; // Not recommended + * + * When the target is expected to be negative infinity, it's often best to + * assert exactly that. + * + * expect(-Infinity).to.equal(-Infinity); // Recommended + * expect(-Infinity).to.not.be.finite; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect('foo', 'nooo why fail??').to.be.finite; + * + * @name finite + * @namespace BDD + * @api public + */ + + Assertion.addProperty('finite', function(msg) { + var obj = flag(this, 'object'); + + this.assert( + typeof obj === "number" && isFinite(obj) + , 'expected #{this} to be a finite number' + , 'expected #{this} to not be a finite number' + ); + }); +}; + +},{}],6:[function(require,module,exports){ +/*! + * chai + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + + +module.exports = function (chai, util) { + + /*! + * Chai dependencies. + */ + + var Assertion = chai.Assertion + , flag = util.flag; + + /*! + * Module export. + */ + + /** + * ### assert(expression, message) + * + * Write your own test expressions. + * + * assert('foo' !== 'bar', 'foo is not bar'); + * assert(Array.isArray([]), 'empty arrays are arrays'); + * + * @param {Mixed} expression to test for truthiness + * @param {String} message to display on error + * @name assert + * @namespace Assert + * @api public + */ + + var assert = chai.assert = function (express, errmsg) { + var test = new Assertion(null, null, chai.assert, true); + test.assert( + express + , errmsg + , '[ negation message unavailable ]' + ); + }; + + /** + * ### .fail(actual, expected, [message], [operator]) + * + * Throw a failure. Node.js `assert` module-compatible. + * + * @name fail + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @param {String} operator + * @namespace Assert + * @api public + */ + + assert.fail = function (actual, expected, message, operator) { + message = message || 'assert.fail()'; + throw new chai.AssertionError(message, { + actual: actual + , expected: expected + , operator: operator + }, assert.fail); + }; + + /** + * ### .isOk(object, [message]) + * + * Asserts that `object` is truthy. + * + * assert.isOk('everything', 'everything is ok'); + * assert.isOk(false, 'this will fail'); + * + * @name isOk + * @alias ok + * @param {Mixed} object to test + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isOk = function (val, msg) { + new Assertion(val, msg, assert.isOk, true).is.ok; + }; + + /** + * ### .isNotOk(object, [message]) + * + * Asserts that `object` is falsy. + * + * assert.isNotOk('everything', 'this will fail'); + * assert.isNotOk(false, 'this will pass'); + * + * @name isNotOk + * @alias notOk + * @param {Mixed} object to test + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotOk = function (val, msg) { + new Assertion(val, msg, assert.isNotOk, true).is.not.ok; + }; + + /** + * ### .equal(actual, expected, [message]) + * + * Asserts non-strict equality (`==`) of `actual` and `expected`. + * + * assert.equal(3, '3', '== coerces values to strings'); + * + * @name equal + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.equal = function (act, exp, msg) { + var test = new Assertion(act, msg, assert.equal, true); + + test.assert( + exp == flag(test, 'object') + , 'expected #{this} to equal #{exp}' + , 'expected #{this} to not equal #{act}' + , exp + , act + , true + ); + }; + + /** + * ### .notEqual(actual, expected, [message]) + * + * Asserts non-strict inequality (`!=`) of `actual` and `expected`. + * + * assert.notEqual(3, 4, 'these numbers are not equal'); + * + * @name notEqual + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notEqual = function (act, exp, msg) { + var test = new Assertion(act, msg, assert.notEqual, true); + + test.assert( + exp != flag(test, 'object') + , 'expected #{this} to not equal #{exp}' + , 'expected #{this} to equal #{act}' + , exp + , act + , true + ); + }; + + /** + * ### .strictEqual(actual, expected, [message]) + * + * Asserts strict equality (`===`) of `actual` and `expected`. + * + * assert.strictEqual(true, true, 'these booleans are strictly equal'); + * + * @name strictEqual + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.strictEqual = function (act, exp, msg) { + new Assertion(act, msg, assert.strictEqual, true).to.equal(exp); + }; + + /** + * ### .notStrictEqual(actual, expected, [message]) + * + * Asserts strict inequality (`!==`) of `actual` and `expected`. + * + * assert.notStrictEqual(3, '3', 'no coercion for strict equality'); + * + * @name notStrictEqual + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notStrictEqual = function (act, exp, msg) { + new Assertion(act, msg, assert.notStrictEqual, true).to.not.equal(exp); + }; + + /** + * ### .deepEqual(actual, expected, [message]) + * + * Asserts that `actual` is deeply equal to `expected`. + * + * assert.deepEqual({ tea: 'green' }, { tea: 'green' }); + * + * @name deepEqual + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @alias deepStrictEqual + * @namespace Assert + * @api public + */ + + assert.deepEqual = assert.deepStrictEqual = function (act, exp, msg) { + new Assertion(act, msg, assert.deepEqual, true).to.eql(exp); + }; + + /** + * ### .notDeepEqual(actual, expected, [message]) + * + * Assert that `actual` is not deeply equal to `expected`. + * + * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' }); + * + * @name notDeepEqual + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notDeepEqual = function (act, exp, msg) { + new Assertion(act, msg, assert.notDeepEqual, true).to.not.eql(exp); + }; + + /** + * ### .isAbove(valueToCheck, valueToBeAbove, [message]) + * + * Asserts `valueToCheck` is strictly greater than (>) `valueToBeAbove`. + * + * assert.isAbove(5, 2, '5 is strictly greater than 2'); + * + * @name isAbove + * @param {Mixed} valueToCheck + * @param {Mixed} valueToBeAbove + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isAbove = function (val, abv, msg) { + new Assertion(val, msg, assert.isAbove, true).to.be.above(abv); + }; + + /** + * ### .isAtLeast(valueToCheck, valueToBeAtLeast, [message]) + * + * Asserts `valueToCheck` is greater than or equal to (>=) `valueToBeAtLeast`. + * + * assert.isAtLeast(5, 2, '5 is greater or equal to 2'); + * assert.isAtLeast(3, 3, '3 is greater or equal to 3'); + * + * @name isAtLeast + * @param {Mixed} valueToCheck + * @param {Mixed} valueToBeAtLeast + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isAtLeast = function (val, atlst, msg) { + new Assertion(val, msg, assert.isAtLeast, true).to.be.least(atlst); + }; + + /** + * ### .isBelow(valueToCheck, valueToBeBelow, [message]) + * + * Asserts `valueToCheck` is strictly less than (<) `valueToBeBelow`. + * + * assert.isBelow(3, 6, '3 is strictly less than 6'); + * + * @name isBelow + * @param {Mixed} valueToCheck + * @param {Mixed} valueToBeBelow + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isBelow = function (val, blw, msg) { + new Assertion(val, msg, assert.isBelow, true).to.be.below(blw); + }; + + /** + * ### .isAtMost(valueToCheck, valueToBeAtMost, [message]) + * + * Asserts `valueToCheck` is less than or equal to (<=) `valueToBeAtMost`. + * + * assert.isAtMost(3, 6, '3 is less than or equal to 6'); + * assert.isAtMost(4, 4, '4 is less than or equal to 4'); + * + * @name isAtMost + * @param {Mixed} valueToCheck + * @param {Mixed} valueToBeAtMost + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isAtMost = function (val, atmst, msg) { + new Assertion(val, msg, assert.isAtMost, true).to.be.most(atmst); + }; + + /** + * ### .isTrue(value, [message]) + * + * Asserts that `value` is true. + * + * var teaServed = true; + * assert.isTrue(teaServed, 'the tea has been served'); + * + * @name isTrue + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isTrue = function (val, msg) { + new Assertion(val, msg, assert.isTrue, true).is['true']; + }; + + /** + * ### .isNotTrue(value, [message]) + * + * Asserts that `value` is not true. + * + * var tea = 'tasty chai'; + * assert.isNotTrue(tea, 'great, time for tea!'); + * + * @name isNotTrue + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotTrue = function (val, msg) { + new Assertion(val, msg, assert.isNotTrue, true).to.not.equal(true); + }; + + /** + * ### .isFalse(value, [message]) + * + * Asserts that `value` is false. + * + * var teaServed = false; + * assert.isFalse(teaServed, 'no tea yet? hmm...'); + * + * @name isFalse + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isFalse = function (val, msg) { + new Assertion(val, msg, assert.isFalse, true).is['false']; + }; + + /** + * ### .isNotFalse(value, [message]) + * + * Asserts that `value` is not false. + * + * var tea = 'tasty chai'; + * assert.isNotFalse(tea, 'great, time for tea!'); + * + * @name isNotFalse + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotFalse = function (val, msg) { + new Assertion(val, msg, assert.isNotFalse, true).to.not.equal(false); + }; + + /** + * ### .isNull(value, [message]) + * + * Asserts that `value` is null. + * + * assert.isNull(err, 'there was no error'); + * + * @name isNull + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNull = function (val, msg) { + new Assertion(val, msg, assert.isNull, true).to.equal(null); + }; + + /** + * ### .isNotNull(value, [message]) + * + * Asserts that `value` is not null. + * + * var tea = 'tasty chai'; + * assert.isNotNull(tea, 'great, time for tea!'); + * + * @name isNotNull + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotNull = function (val, msg) { + new Assertion(val, msg, assert.isNotNull, true).to.not.equal(null); + }; + + /** + * ### .isNaN + * + * Asserts that value is NaN. + * + * assert.isNaN(NaN, 'NaN is NaN'); + * + * @name isNaN + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNaN = function (val, msg) { + new Assertion(val, msg, assert.isNaN, true).to.be.NaN; + }; + + /** + * ### .isNotNaN + * + * Asserts that value is not NaN. + * + * assert.isNotNaN(4, '4 is not NaN'); + * + * @name isNotNaN + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + assert.isNotNaN = function (val, msg) { + new Assertion(val, msg, assert.isNotNaN, true).not.to.be.NaN; + }; + + /** + * ### .exists + * + * Asserts that the target is neither `null` nor `undefined`. + * + * var foo = 'hi'; + * + * assert.exists(foo, 'foo is neither `null` nor `undefined`'); + * + * @name exists + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.exists = function (val, msg) { + new Assertion(val, msg, assert.exists, true).to.exist; + }; + + /** + * ### .notExists + * + * Asserts that the target is either `null` or `undefined`. + * + * var bar = null + * , baz; + * + * assert.notExists(bar); + * assert.notExists(baz, 'baz is either null or undefined'); + * + * @name notExists + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notExists = function (val, msg) { + new Assertion(val, msg, assert.notExists, true).to.not.exist; + }; + + /** + * ### .isUndefined(value, [message]) + * + * Asserts that `value` is `undefined`. + * + * var tea; + * assert.isUndefined(tea, 'no tea defined'); + * + * @name isUndefined + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isUndefined = function (val, msg) { + new Assertion(val, msg, assert.isUndefined, true).to.equal(undefined); + }; + + /** + * ### .isDefined(value, [message]) + * + * Asserts that `value` is not `undefined`. + * + * var tea = 'cup of chai'; + * assert.isDefined(tea, 'tea has been defined'); + * + * @name isDefined + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isDefined = function (val, msg) { + new Assertion(val, msg, assert.isDefined, true).to.not.equal(undefined); + }; + + /** + * ### .isFunction(value, [message]) + * + * Asserts that `value` is a function. + * + * function serveTea() { return 'cup of tea'; }; + * assert.isFunction(serveTea, 'great, we can have tea now'); + * + * @name isFunction + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isFunction = function (val, msg) { + new Assertion(val, msg, assert.isFunction, true).to.be.a('function'); + }; + + /** + * ### .isNotFunction(value, [message]) + * + * Asserts that `value` is _not_ a function. + * + * var serveTea = [ 'heat', 'pour', 'sip' ]; + * assert.isNotFunction(serveTea, 'great, we have listed the steps'); + * + * @name isNotFunction + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotFunction = function (val, msg) { + new Assertion(val, msg, assert.isNotFunction, true).to.not.be.a('function'); + }; + + /** + * ### .isObject(value, [message]) + * + * Asserts that `value` is an object of type 'Object' (as revealed by `Object.prototype.toString`). + * _The assertion does not match subclassed objects._ + * + * var selection = { name: 'Chai', serve: 'with spices' }; + * assert.isObject(selection, 'tea selection is an object'); + * + * @name isObject + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isObject = function (val, msg) { + new Assertion(val, msg, assert.isObject, true).to.be.a('object'); + }; + + /** + * ### .isNotObject(value, [message]) + * + * Asserts that `value` is _not_ an object of type 'Object' (as revealed by `Object.prototype.toString`). + * + * var selection = 'chai' + * assert.isNotObject(selection, 'tea selection is not an object'); + * assert.isNotObject(null, 'null is not an object'); + * + * @name isNotObject + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotObject = function (val, msg) { + new Assertion(val, msg, assert.isNotObject, true).to.not.be.a('object'); + }; + + /** + * ### .isArray(value, [message]) + * + * Asserts that `value` is an array. + * + * var menu = [ 'green', 'chai', 'oolong' ]; + * assert.isArray(menu, 'what kind of tea do we want?'); + * + * @name isArray + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isArray = function (val, msg) { + new Assertion(val, msg, assert.isArray, true).to.be.an('array'); + }; + + /** + * ### .isNotArray(value, [message]) + * + * Asserts that `value` is _not_ an array. + * + * var menu = 'green|chai|oolong'; + * assert.isNotArray(menu, 'what kind of tea do we want?'); + * + * @name isNotArray + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotArray = function (val, msg) { + new Assertion(val, msg, assert.isNotArray, true).to.not.be.an('array'); + }; + + /** + * ### .isString(value, [message]) + * + * Asserts that `value` is a string. + * + * var teaOrder = 'chai'; + * assert.isString(teaOrder, 'order placed'); + * + * @name isString + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isString = function (val, msg) { + new Assertion(val, msg, assert.isString, true).to.be.a('string'); + }; + + /** + * ### .isNotString(value, [message]) + * + * Asserts that `value` is _not_ a string. + * + * var teaOrder = 4; + * assert.isNotString(teaOrder, 'order placed'); + * + * @name isNotString + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotString = function (val, msg) { + new Assertion(val, msg, assert.isNotString, true).to.not.be.a('string'); + }; + + /** + * ### .isNumber(value, [message]) + * + * Asserts that `value` is a number. + * + * var cups = 2; + * assert.isNumber(cups, 'how many cups'); + * + * @name isNumber + * @param {Number} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNumber = function (val, msg) { + new Assertion(val, msg, assert.isNumber, true).to.be.a('number'); + }; + + /** + * ### .isNotNumber(value, [message]) + * + * Asserts that `value` is _not_ a number. + * + * var cups = '2 cups please'; + * assert.isNotNumber(cups, 'how many cups'); + * + * @name isNotNumber + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotNumber = function (val, msg) { + new Assertion(val, msg, assert.isNotNumber, true).to.not.be.a('number'); + }; + + /** + * ### .isFinite(value, [message]) + * + * Asserts that `value` is a finite number. Unlike `.isNumber`, this will fail for `NaN` and `Infinity`. + * + * var cups = 2; + * assert.isFinite(cups, 'how many cups'); + * + * assert.isFinite(NaN); // throws + * + * @name isFinite + * @param {Number} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isFinite = function (val, msg) { + new Assertion(val, msg, assert.isFinite, true).to.be.finite; + }; + + /** + * ### .isBoolean(value, [message]) + * + * Asserts that `value` is a boolean. + * + * var teaReady = true + * , teaServed = false; + * + * assert.isBoolean(teaReady, 'is the tea ready'); + * assert.isBoolean(teaServed, 'has tea been served'); + * + * @name isBoolean + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isBoolean = function (val, msg) { + new Assertion(val, msg, assert.isBoolean, true).to.be.a('boolean'); + }; + + /** + * ### .isNotBoolean(value, [message]) + * + * Asserts that `value` is _not_ a boolean. + * + * var teaReady = 'yep' + * , teaServed = 'nope'; + * + * assert.isNotBoolean(teaReady, 'is the tea ready'); + * assert.isNotBoolean(teaServed, 'has tea been served'); + * + * @name isNotBoolean + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.isNotBoolean = function (val, msg) { + new Assertion(val, msg, assert.isNotBoolean, true).to.not.be.a('boolean'); + }; + + /** + * ### .typeOf(value, name, [message]) + * + * Asserts that `value`'s type is `name`, as determined by + * `Object.prototype.toString`. + * + * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object'); + * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array'); + * assert.typeOf('tea', 'string', 'we have a string'); + * assert.typeOf(/tea/, 'regexp', 'we have a regular expression'); + * assert.typeOf(null, 'null', 'we have a null'); + * assert.typeOf(undefined, 'undefined', 'we have an undefined'); + * + * @name typeOf + * @param {Mixed} value + * @param {String} name + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.typeOf = function (val, type, msg) { + new Assertion(val, msg, assert.typeOf, true).to.be.a(type); + }; + + /** + * ### .notTypeOf(value, name, [message]) + * + * Asserts that `value`'s type is _not_ `name`, as determined by + * `Object.prototype.toString`. + * + * assert.notTypeOf('tea', 'number', 'strings are not numbers'); + * + * @name notTypeOf + * @param {Mixed} value + * @param {String} typeof name + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notTypeOf = function (val, type, msg) { + new Assertion(val, msg, assert.notTypeOf, true).to.not.be.a(type); + }; + + /** + * ### .instanceOf(object, constructor, [message]) + * + * Asserts that `value` is an instance of `constructor`. + * + * var Tea = function (name) { this.name = name; } + * , chai = new Tea('chai'); + * + * assert.instanceOf(chai, Tea, 'chai is an instance of tea'); + * + * @name instanceOf + * @param {Object} object + * @param {Constructor} constructor + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.instanceOf = function (val, type, msg) { + new Assertion(val, msg, assert.instanceOf, true).to.be.instanceOf(type); + }; + + /** + * ### .notInstanceOf(object, constructor, [message]) + * + * Asserts `value` is not an instance of `constructor`. + * + * var Tea = function (name) { this.name = name; } + * , chai = new String('chai'); + * + * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea'); + * + * @name notInstanceOf + * @param {Object} object + * @param {Constructor} constructor + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notInstanceOf = function (val, type, msg) { + new Assertion(val, msg, assert.notInstanceOf, true) + .to.not.be.instanceOf(type); + }; + + /** + * ### .include(haystack, needle, [message]) + * + * Asserts that `haystack` includes `needle`. Can be used to assert the + * inclusion of a value in an array, a substring in a string, or a subset of + * properties in an object. + * + * assert.include([1,2,3], 2, 'array contains value'); + * assert.include('foobar', 'foo', 'string contains substring'); + * assert.include({ foo: 'bar', hello: 'universe' }, { foo: 'bar' }, 'object contains property'); + * + * Strict equality (===) is used. When asserting the inclusion of a value in + * an array, the array is searched for an element that's strictly equal to the + * given value. When asserting a subset of properties in an object, the object + * is searched for the given property keys, checking that each one is present + * and stricty equal to the given property value. For instance: + * + * var obj1 = {a: 1} + * , obj2 = {b: 2}; + * assert.include([obj1, obj2], obj1); + * assert.include({foo: obj1, bar: obj2}, {foo: obj1}); + * assert.include({foo: obj1, bar: obj2}, {foo: obj1, bar: obj2}); + * + * @name include + * @param {Array|String} haystack + * @param {Mixed} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.include = function (exp, inc, msg) { + new Assertion(exp, msg, assert.include, true).include(inc); + }; + + /** + * ### .notInclude(haystack, needle, [message]) + * + * Asserts that `haystack` does not include `needle`. Can be used to assert + * the absence of a value in an array, a substring in a string, or a subset of + * properties in an object. + * + * assert.notInclude([1,2,3], 4, 'array doesn't contain value'); + * assert.notInclude('foobar', 'baz', 'string doesn't contain substring'); + * assert.notInclude({ foo: 'bar', hello: 'universe' }, { foo: 'baz' }, 'object doesn't contain property'); + * + * Strict equality (===) is used. When asserting the absence of a value in an + * array, the array is searched to confirm the absence of an element that's + * strictly equal to the given value. When asserting a subset of properties in + * an object, the object is searched to confirm that at least one of the given + * property keys is either not present or not strictly equal to the given + * property value. For instance: + * + * var obj1 = {a: 1} + * , obj2 = {b: 2}; + * assert.notInclude([obj1, obj2], {a: 1}); + * assert.notInclude({foo: obj1, bar: obj2}, {foo: {a: 1}}); + * assert.notInclude({foo: obj1, bar: obj2}, {foo: obj1, bar: {b: 2}}); + * + * @name notInclude + * @param {Array|String} haystack + * @param {Mixed} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notInclude = function (exp, inc, msg) { + new Assertion(exp, msg, assert.notInclude, true).not.include(inc); + }; + + /** + * ### .deepInclude(haystack, needle, [message]) + * + * Asserts that `haystack` includes `needle`. Can be used to assert the + * inclusion of a value in an array or a subset of properties in an object. + * Deep equality is used. + * + * var obj1 = {a: 1} + * , obj2 = {b: 2}; + * assert.deepInclude([obj1, obj2], {a: 1}); + * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}}); + * assert.deepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 2}}); + * + * @name deepInclude + * @param {Array|String} haystack + * @param {Mixed} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.deepInclude = function (exp, inc, msg) { + new Assertion(exp, msg, assert.deepInclude, true).deep.include(inc); + }; + + /** + * ### .notDeepInclude(haystack, needle, [message]) + * + * Asserts that `haystack` does not include `needle`. Can be used to assert + * the absence of a value in an array or a subset of properties in an object. + * Deep equality is used. + * + * var obj1 = {a: 1} + * , obj2 = {b: 2}; + * assert.notDeepInclude([obj1, obj2], {a: 9}); + * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 9}}); + * assert.notDeepInclude({foo: obj1, bar: obj2}, {foo: {a: 1}, bar: {b: 9}}); + * + * @name notDeepInclude + * @param {Array|String} haystack + * @param {Mixed} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notDeepInclude = function (exp, inc, msg) { + new Assertion(exp, msg, assert.notDeepInclude, true).not.deep.include(inc); + }; + + /** + * ### .nestedInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' includes 'needle'. + * Can be used to assert the inclusion of a subset of properties in an + * object. + * Enables the use of dot- and bracket-notation for referencing nested + * properties. + * '[]' and '.' in property names can be escaped using double backslashes. + * + * assert.nestedInclude({'.a': {'b': 'x'}}, {'\\.a.[b]': 'x'}); + * assert.nestedInclude({'a': {'[b]': 'x'}}, {'a.\\[b\\]': 'x'}); + * + * @name nestedInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.nestedInclude = function (exp, inc, msg) { + new Assertion(exp, msg, assert.nestedInclude, true).nested.include(inc); + }; + + /** + * ### .notNestedInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' does not include 'needle'. + * Can be used to assert the absence of a subset of properties in an + * object. + * Enables the use of dot- and bracket-notation for referencing nested + * properties. + * '[]' and '.' in property names can be escaped using double backslashes. + * + * assert.notNestedInclude({'.a': {'b': 'x'}}, {'\\.a.b': 'y'}); + * assert.notNestedInclude({'a': {'[b]': 'x'}}, {'a.\\[b\\]': 'y'}); + * + * @name notNestedInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notNestedInclude = function (exp, inc, msg) { + new Assertion(exp, msg, assert.notNestedInclude, true) + .not.nested.include(inc); + }; + + /** + * ### .deepNestedInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' includes 'needle'. + * Can be used to assert the inclusion of a subset of properties in an + * object while checking for deep equality. + * Enables the use of dot- and bracket-notation for referencing nested + * properties. + * '[]' and '.' in property names can be escaped using double backslashes. + * + * assert.deepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {x: 1}}); + * assert.deepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\.a.\\[b\\]': {x: 1}}); + * + * @name deepNestedInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.deepNestedInclude = function(exp, inc, msg) { + new Assertion(exp, msg, assert.deepNestedInclude, true) + .deep.nested.include(inc); + }; + + /** + * ### .notDeepNestedInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' does not include 'needle'. + * Can be used to assert the absence of a subset of properties in an + * object while checking for deep equality. + * Enables the use of dot- and bracket-notation for referencing nested + * properties. + * '[]' and '.' in property names can be escaped using double backslashes. + * + * assert.notDeepNestedInclude({a: {b: [{x: 1}]}}, {'a.b[0]': {y: 1}}) + * assert.notDeepNestedInclude({'.a': {'[b]': {x: 1}}}, {'\\.a.\\[b\\]': {y: 2}}); + * + * @name notDeepNestedInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notDeepNestedInclude = function(exp, inc, msg) { + new Assertion(exp, msg, assert.notDeepNestedInclude, true) + .not.deep.nested.include(inc); + }; + + /** + * ### .ownInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' includes 'needle'. + * Can be used to assert the inclusion of a subset of properties in an + * object while ignoring inherited properties. + * + * assert.ownInclude({ a: 1 }, { a: 1 }); + * + * @name ownInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.ownInclude = function(exp, inc, msg) { + new Assertion(exp, msg, assert.ownInclude, true).own.include(inc); + }; + + /** + * ### .notOwnInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' includes 'needle'. + * Can be used to assert the absence of a subset of properties in an + * object while ignoring inherited properties. + * + * Object.prototype.b = 2; + * + * assert.notOwnInclude({ a: 1 }, { b: 2 }); + * + * @name notOwnInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notOwnInclude = function(exp, inc, msg) { + new Assertion(exp, msg, assert.notOwnInclude, true).not.own.include(inc); + }; + + /** + * ### .deepOwnInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' includes 'needle'. + * Can be used to assert the inclusion of a subset of properties in an + * object while ignoring inherited properties and checking for deep equality. + * + * assert.deepOwnInclude({a: {b: 2}}, {a: {b: 2}}); + * + * @name deepOwnInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.deepOwnInclude = function(exp, inc, msg) { + new Assertion(exp, msg, assert.deepOwnInclude, true) + .deep.own.include(inc); + }; + + /** + * ### .notDeepOwnInclude(haystack, needle, [message]) + * + * Asserts that 'haystack' includes 'needle'. + * Can be used to assert the absence of a subset of properties in an + * object while ignoring inherited properties and checking for deep equality. + * + * assert.notDeepOwnInclude({a: {b: 2}}, {a: {c: 3}}); + * + * @name notDeepOwnInclude + * @param {Object} haystack + * @param {Object} needle + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notDeepOwnInclude = function(exp, inc, msg) { + new Assertion(exp, msg, assert.notDeepOwnInclude, true) + .not.deep.own.include(inc); + }; + + /** + * ### .match(value, regexp, [message]) + * + * Asserts that `value` matches the regular expression `regexp`. + * + * assert.match('foobar', /^foo/, 'regexp matches'); + * + * @name match + * @param {Mixed} value + * @param {RegExp} regexp + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.match = function (exp, re, msg) { + new Assertion(exp, msg, assert.match, true).to.match(re); + }; + + /** + * ### .notMatch(value, regexp, [message]) + * + * Asserts that `value` does not match the regular expression `regexp`. + * + * assert.notMatch('foobar', /^foo/, 'regexp does not match'); + * + * @name notMatch + * @param {Mixed} value + * @param {RegExp} regexp + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notMatch = function (exp, re, msg) { + new Assertion(exp, msg, assert.notMatch, true).to.not.match(re); + }; + + /** + * ### .property(object, property, [message]) + * + * Asserts that `object` has a direct or inherited property named by + * `property`. + * + * assert.property({ tea: { green: 'matcha' }}, 'tea'); + * assert.property({ tea: { green: 'matcha' }}, 'toString'); + * + * @name property + * @param {Object} object + * @param {String} property + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.property = function (obj, prop, msg) { + new Assertion(obj, msg, assert.property, true).to.have.property(prop); + }; + + /** + * ### .notProperty(object, property, [message]) + * + * Asserts that `object` does _not_ have a direct or inherited property named + * by `property`. + * + * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee'); + * + * @name notProperty + * @param {Object} object + * @param {String} property + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notProperty = function (obj, prop, msg) { + new Assertion(obj, msg, assert.notProperty, true) + .to.not.have.property(prop); + }; + + /** + * ### .propertyVal(object, property, value, [message]) + * + * Asserts that `object` has a direct or inherited property named by + * `property` with a value given by `value`. Uses a strict equality check + * (===). + * + * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good'); + * + * @name propertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.propertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.propertyVal, true) + .to.have.property(prop, val); + }; + + /** + * ### .notPropertyVal(object, property, value, [message]) + * + * Asserts that `object` does _not_ have a direct or inherited property named + * by `property` with value given by `value`. Uses a strict equality check + * (===). + * + * assert.notPropertyVal({ tea: 'is good' }, 'tea', 'is bad'); + * assert.notPropertyVal({ tea: 'is good' }, 'coffee', 'is good'); + * + * @name notPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.notPropertyVal, true) + .to.not.have.property(prop, val); + }; + + /** + * ### .deepPropertyVal(object, property, value, [message]) + * + * Asserts that `object` has a direct or inherited property named by + * `property` with a value given by `value`. Uses a deep equality check. + * + * assert.deepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' }); + * + * @name deepPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.deepPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.deepPropertyVal, true) + .to.have.deep.property(prop, val); + }; + + /** + * ### .notDeepPropertyVal(object, property, value, [message]) + * + * Asserts that `object` does _not_ have a direct or inherited property named + * by `property` with value given by `value`. Uses a deep equality check. + * + * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' }); + * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' }); + * assert.notDeepPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' }); + * + * @name notDeepPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notDeepPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.notDeepPropertyVal, true) + .to.not.have.deep.property(prop, val); + }; + + /** + * ### .ownProperty(object, property, [message]) + * + * Asserts that `object` has a direct property named by `property`. Inherited + * properties aren't checked. + * + * assert.ownProperty({ tea: { green: 'matcha' }}, 'tea'); + * + * @name ownProperty + * @param {Object} object + * @param {String} property + * @param {String} message + * @api public + */ + + assert.ownProperty = function (obj, prop, msg) { + new Assertion(obj, msg, assert.ownProperty, true) + .to.have.own.property(prop); + }; + + /** + * ### .notOwnProperty(object, property, [message]) + * + * Asserts that `object` does _not_ have a direct property named by + * `property`. Inherited properties aren't checked. + * + * assert.notOwnProperty({ tea: { green: 'matcha' }}, 'coffee'); + * assert.notOwnProperty({}, 'toString'); + * + * @name notOwnProperty + * @param {Object} object + * @param {String} property + * @param {String} message + * @api public + */ + + assert.notOwnProperty = function (obj, prop, msg) { + new Assertion(obj, msg, assert.notOwnProperty, true) + .to.not.have.own.property(prop); + }; + + /** + * ### .ownPropertyVal(object, property, value, [message]) + * + * Asserts that `object` has a direct property named by `property` and a value + * equal to the provided `value`. Uses a strict equality check (===). + * Inherited properties aren't checked. + * + * assert.ownPropertyVal({ coffee: 'is good'}, 'coffee', 'is good'); + * + * @name ownPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @api public + */ + + assert.ownPropertyVal = function (obj, prop, value, msg) { + new Assertion(obj, msg, assert.ownPropertyVal, true) + .to.have.own.property(prop, value); + }; + + /** + * ### .notOwnPropertyVal(object, property, value, [message]) + * + * Asserts that `object` does _not_ have a direct property named by `property` + * with a value equal to the provided `value`. Uses a strict equality check + * (===). Inherited properties aren't checked. + * + * assert.notOwnPropertyVal({ tea: 'is better'}, 'tea', 'is worse'); + * assert.notOwnPropertyVal({}, 'toString', Object.prototype.toString); + * + * @name notOwnPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @api public + */ + + assert.notOwnPropertyVal = function (obj, prop, value, msg) { + new Assertion(obj, msg, assert.notOwnPropertyVal, true) + .to.not.have.own.property(prop, value); + }; + + /** + * ### .deepOwnPropertyVal(object, property, value, [message]) + * + * Asserts that `object` has a direct property named by `property` and a value + * equal to the provided `value`. Uses a deep equality check. Inherited + * properties aren't checked. + * + * assert.deepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'matcha' }); + * + * @name deepOwnPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @api public + */ + + assert.deepOwnPropertyVal = function (obj, prop, value, msg) { + new Assertion(obj, msg, assert.deepOwnPropertyVal, true) + .to.have.deep.own.property(prop, value); + }; + + /** + * ### .notDeepOwnPropertyVal(object, property, value, [message]) + * + * Asserts that `object` does _not_ have a direct property named by `property` + * with a value equal to the provided `value`. Uses a deep equality check. + * Inherited properties aren't checked. + * + * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { black: 'matcha' }); + * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'tea', { green: 'oolong' }); + * assert.notDeepOwnPropertyVal({ tea: { green: 'matcha' } }, 'coffee', { green: 'matcha' }); + * assert.notDeepOwnPropertyVal({}, 'toString', Object.prototype.toString); + * + * @name notDeepOwnPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @api public + */ + + assert.notDeepOwnPropertyVal = function (obj, prop, value, msg) { + new Assertion(obj, msg, assert.notDeepOwnPropertyVal, true) + .to.not.have.deep.own.property(prop, value); + }; + + /** + * ### .nestedProperty(object, property, [message]) + * + * Asserts that `object` has a direct or inherited property named by + * `property`, which can be a string using dot- and bracket-notation for + * nested reference. + * + * assert.nestedProperty({ tea: { green: 'matcha' }}, 'tea.green'); + * + * @name nestedProperty + * @param {Object} object + * @param {String} property + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.nestedProperty = function (obj, prop, msg) { + new Assertion(obj, msg, assert.nestedProperty, true) + .to.have.nested.property(prop); + }; + + /** + * ### .notNestedProperty(object, property, [message]) + * + * Asserts that `object` does _not_ have a property named by `property`, which + * can be a string using dot- and bracket-notation for nested reference. The + * property cannot exist on the object nor anywhere in its prototype chain. + * + * assert.notNestedProperty({ tea: { green: 'matcha' }}, 'tea.oolong'); + * + * @name notNestedProperty + * @param {Object} object + * @param {String} property + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notNestedProperty = function (obj, prop, msg) { + new Assertion(obj, msg, assert.notNestedProperty, true) + .to.not.have.nested.property(prop); + }; + + /** + * ### .nestedPropertyVal(object, property, value, [message]) + * + * Asserts that `object` has a property named by `property` with value given + * by `value`. `property` can use dot- and bracket-notation for nested + * reference. Uses a strict equality check (===). + * + * assert.nestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha'); + * + * @name nestedPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.nestedPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.nestedPropertyVal, true) + .to.have.nested.property(prop, val); + }; + + /** + * ### .notNestedPropertyVal(object, property, value, [message]) + * + * Asserts that `object` does _not_ have a property named by `property` with + * value given by `value`. `property` can use dot- and bracket-notation for + * nested reference. Uses a strict equality check (===). + * + * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha'); + * assert.notNestedPropertyVal({ tea: { green: 'matcha' }}, 'coffee.green', 'matcha'); + * + * @name notNestedPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notNestedPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.notNestedPropertyVal, true) + .to.not.have.nested.property(prop, val); + }; + + /** + * ### .deepNestedPropertyVal(object, property, value, [message]) + * + * Asserts that `object` has a property named by `property` with a value given + * by `value`. `property` can use dot- and bracket-notation for nested + * reference. Uses a deep equality check. + * + * assert.deepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yum' }); + * + * @name deepNestedPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.deepNestedPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.deepNestedPropertyVal, true) + .to.have.deep.nested.property(prop, val); + }; + + /** + * ### .notDeepNestedPropertyVal(object, property, value, [message]) + * + * Asserts that `object` does _not_ have a property named by `property` with + * value given by `value`. `property` can use dot- and bracket-notation for + * nested reference. Uses a deep equality check. + * + * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { oolong: 'yum' }); + * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.green', { matcha: 'yuck' }); + * assert.notDeepNestedPropertyVal({ tea: { green: { matcha: 'yum' } } }, 'tea.black', { matcha: 'yum' }); + * + * @name notDeepNestedPropertyVal + * @param {Object} object + * @param {String} property + * @param {Mixed} value + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notDeepNestedPropertyVal = function (obj, prop, val, msg) { + new Assertion(obj, msg, assert.notDeepNestedPropertyVal, true) + .to.not.have.deep.nested.property(prop, val); + } + + /** + * ### .lengthOf(object, length, [message]) + * + * Asserts that `object` has a `length` property with the expected value. + * + * assert.lengthOf([1,2,3], 3, 'array has length of 3'); + * assert.lengthOf('foobar', 6, 'string has length of 6'); + * + * @name lengthOf + * @param {Mixed} object + * @param {Number} length + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.lengthOf = function (exp, len, msg) { + new Assertion(exp, msg, assert.lengthOf, true).to.have.lengthOf(len); + }; + + /** + * ### .hasAnyKeys(object, [keys], [message]) + * + * Asserts that `object` has at least one of the `keys` provided. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.hasAnyKey({foo: 1, bar: 2, baz: 3}, ['foo', 'iDontExist', 'baz']); + * assert.hasAnyKey({foo: 1, bar: 2, baz: 3}, {foo: 30, iDontExist: 99, baz: 1337]); + * assert.hasAnyKey(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'thisKeyDoesNotExist']); + * assert.hasAnyKey(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'thisKeyDoesNotExist']); + * + * @name hasAnyKeys + * @param {Mixed} object + * @param {Array|Object} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.hasAnyKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.hasAnyKeys, true).to.have.any.keys(keys); + } + + /** + * ### .hasAllKeys(object, [keys], [message]) + * + * Asserts that `object` has all and only all of the `keys` provided. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']); + * assert.hasAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337]); + * assert.hasAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']); + * assert.hasAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']); + * + * @name hasAllKeys + * @param {Mixed} object + * @param {String[]} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.hasAllKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.hasAllKeys, true).to.have.all.keys(keys); + } + + /** + * ### .containsAllKeys(object, [keys], [message]) + * + * Asserts that `object` has all of the `keys` provided but may have more keys not listed. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'baz']); + * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, ['foo', 'bar', 'baz']); + * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, baz: 1337}); + * assert.containsAllKeys({foo: 1, bar: 2, baz: 3}, {foo: 30, bar: 99, baz: 1337}); + * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}]); + * assert.containsAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{foo: 1}, 'key']); + * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}]); + * assert.containsAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{foo: 'bar'}, 'anotherKey']); + * + * @name containsAllKeys + * @param {Mixed} object + * @param {String[]} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.containsAllKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.containsAllKeys, true) + .to.contain.all.keys(keys); + } + + /** + * ### .doesNotHaveAnyKeys(object, [keys], [message]) + * + * Asserts that `object` has none of the `keys` provided. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']); + * assert.doesNotHaveAnyKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'}); + * assert.doesNotHaveAnyKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']); + * assert.doesNotHaveAnyKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']); + * + * @name doesNotHaveAnyKeys + * @param {Mixed} object + * @param {String[]} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.doesNotHaveAnyKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.doesNotHaveAnyKeys, true) + .to.not.have.any.keys(keys); + } + + /** + * ### .doesNotHaveAllKeys(object, [keys], [message]) + * + * Asserts that `object` does not have at least one of the `keys` provided. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, ['one', 'two', 'example']); + * assert.doesNotHaveAllKeys({foo: 1, bar: 2, baz: 3}, {one: 1, two: 2, example: 'foo'}); + * assert.doesNotHaveAllKeys(new Map([[{foo: 1}, 'bar'], ['key', 'value']]), [{one: 'two'}, 'example']); + * assert.doesNotHaveAllKeys(new Set([{foo: 'bar'}, 'anotherKey'], [{one: 'two'}, 'example']); + * + * @name doesNotHaveAllKeys + * @param {Mixed} object + * @param {String[]} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.doesNotHaveAllKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.doesNotHaveAllKeys, true) + .to.not.have.all.keys(keys); + } + + /** + * ### .hasAnyDeepKeys(object, [keys], [message]) + * + * Asserts that `object` has at least one of the `keys` provided. + * Since Sets and Maps can have objects as keys you can use this assertion to perform + * a deep comparison. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'}); + * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), [{one: 'one'}, {two: 'two'}]); + * assert.hasAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]); + * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'}); + * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {three: 'three'}]); + * assert.hasAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]); + * + * @name doesNotHaveAllKeys + * @param {Mixed} object + * @param {Array|Object} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.hasAnyDeepKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.hasAnyDeepKeys, true) + .to.have.any.deep.keys(keys); + } + + /** + * ### .hasAllDeepKeys(object, [keys], [message]) + * + * Asserts that `object` has all and only all of the `keys` provided. + * Since Sets and Maps can have objects as keys you can use this assertion to perform + * a deep comparison. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne']]), {one: 'one'}); + * assert.hasAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]); + * assert.hasAllDeepKeys(new Set([{one: 'one'}]), {one: 'one'}); + * assert.hasAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]); + * + * @name hasAllDeepKeys + * @param {Mixed} object + * @param {Array|Object} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.hasAllDeepKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.hasAllDeepKeys, true) + .to.have.all.deep.keys(keys); + } + + /** + * ### .containsAllDeepKeys(object, [keys], [message]) + * + * Asserts that `object` contains all of the `keys` provided. + * Since Sets and Maps can have objects as keys you can use this assertion to perform + * a deep comparison. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {one: 'one'}); + * assert.containsAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{one: 'one'}, {two: 'two'}]); + * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {one: 'one'}); + * assert.containsAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {two: 'two'}]); + * + * @name containsAllDeepKeys + * @param {Mixed} object + * @param {Array|Object} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.containsAllDeepKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.containsAllDeepKeys, true) + .to.contain.all.deep.keys(keys); + } + + /** + * ### .doesNotHaveAnyDeepKeys(object, [keys], [message]) + * + * Asserts that `object` has none of the `keys` provided. + * Since Sets and Maps can have objects as keys you can use this assertion to perform + * a deep comparison. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'}); + * assert.doesNotHaveAnyDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {fifty: 'fifty'}]); + * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'}); + * assert.doesNotHaveAnyDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{twenty: 'twenty'}, {fifty: 'fifty'}]); + * + * @name doesNotHaveAnyDeepKeys + * @param {Mixed} object + * @param {Array|Object} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.doesNotHaveAnyDeepKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.doesNotHaveAnyDeepKeys, true) + .to.not.have.any.deep.keys(keys); + } + + /** + * ### .doesNotHaveAllDeepKeys(object, [keys], [message]) + * + * Asserts that `object` does not have at least one of the `keys` provided. + * Since Sets and Maps can have objects as keys you can use this assertion to perform + * a deep comparison. + * You can also provide a single object instead of a `keys` array and its keys + * will be used as the expected set of keys. + * + * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [1, 2]]), {thisDoesNot: 'exist'}); + * assert.doesNotHaveAllDeepKeys(new Map([[{one: 'one'}, 'valueOne'], [{two: 'two'}, 'valueTwo']]), [{twenty: 'twenty'}, {one: 'one'}]); + * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), {twenty: 'twenty'}); + * assert.doesNotHaveAllDeepKeys(new Set([{one: 'one'}, {two: 'two'}]), [{one: 'one'}, {fifty: 'fifty'}]); + * + * @name doesNotHaveAllDeepKeys + * @param {Mixed} object + * @param {Array|Object} keys + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.doesNotHaveAllDeepKeys = function (obj, keys, msg) { + new Assertion(obj, msg, assert.doesNotHaveAllDeepKeys, true) + .to.not.have.all.deep.keys(keys); + } + + /** + * ### .throws(fn, [errorLike/string/regexp], [string/regexp], [message]) + * + * If `errorLike` is an `Error` constructor, asserts that `fn` will throw an error that is an + * instance of `errorLike`. + * If `errorLike` is an `Error` instance, asserts that the error thrown is the same + * instance as `errorLike`. + * If `errMsgMatcher` is provided, it also asserts that the error thrown will have a + * message matching `errMsgMatcher`. + * + * assert.throws(fn, 'function throws a reference error'); + * assert.throws(fn, /function throws a reference error/); + * assert.throws(fn, ReferenceError); + * assert.throws(fn, errorInstance); + * assert.throws(fn, ReferenceError, 'Error thrown must be a ReferenceError and have this msg'); + * assert.throws(fn, errorInstance, 'Error thrown must be the same errorInstance and have this msg'); + * assert.throws(fn, ReferenceError, /Error thrown must be a ReferenceError and match this/); + * assert.throws(fn, errorInstance, /Error thrown must be the same errorInstance and match this/); + * + * @name throws + * @alias throw + * @alias Throw + * @param {Function} fn + * @param {ErrorConstructor|Error} errorLike + * @param {RegExp|String} errMsgMatcher + * @param {String} message + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @namespace Assert + * @api public + */ + + assert.throws = function (fn, errorLike, errMsgMatcher, msg) { + if ('string' === typeof errorLike || errorLike instanceof RegExp) { + errMsgMatcher = errorLike; + errorLike = null; + } + + var assertErr = new Assertion(fn, msg, assert.throws, true) + .to.throw(errorLike, errMsgMatcher); + return flag(assertErr, 'object'); + }; + + /** + * ### .doesNotThrow(fn, [errorLike/string/regexp], [string/regexp], [message]) + * + * If `errorLike` is an `Error` constructor, asserts that `fn` will _not_ throw an error that is an + * instance of `errorLike`. + * If `errorLike` is an `Error` instance, asserts that the error thrown is _not_ the same + * instance as `errorLike`. + * If `errMsgMatcher` is provided, it also asserts that the error thrown will _not_ have a + * message matching `errMsgMatcher`. + * + * assert.doesNotThrow(fn, 'Any Error thrown must not have this message'); + * assert.doesNotThrow(fn, /Any Error thrown must not match this/); + * assert.doesNotThrow(fn, Error); + * assert.doesNotThrow(fn, errorInstance); + * assert.doesNotThrow(fn, Error, 'Error must not have this message'); + * assert.doesNotThrow(fn, errorInstance, 'Error must not have this message'); + * assert.doesNotThrow(fn, Error, /Error must not match this/); + * assert.doesNotThrow(fn, errorInstance, /Error must not match this/); + * + * @name doesNotThrow + * @param {Function} fn + * @param {ErrorConstructor} errorLike + * @param {RegExp|String} errMsgMatcher + * @param {String} message + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @namespace Assert + * @api public + */ + + assert.doesNotThrow = function (fn, errorLike, errMsgMatcher, msg) { + if ('string' === typeof errorLike || errorLike instanceof RegExp) { + errMsgMatcher = errorLike; + errorLike = null; + } + + new Assertion(fn, msg, assert.doesNotThrow, true) + .to.not.throw(errorLike, errMsgMatcher); + }; + + /** + * ### .operator(val1, operator, val2, [message]) + * + * Compares two values using `operator`. + * + * assert.operator(1, '<', 2, 'everything is ok'); + * assert.operator(1, '>', 2, 'this will fail'); + * + * @name operator + * @param {Mixed} val1 + * @param {String} operator + * @param {Mixed} val2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.operator = function (val, operator, val2, msg) { + var ok; + switch(operator) { + case '==': + ok = val == val2; + break; + case '===': + ok = val === val2; + break; + case '>': + ok = val > val2; + break; + case '>=': + ok = val >= val2; + break; + case '<': + ok = val < val2; + break; + case '<=': + ok = val <= val2; + break; + case '!=': + ok = val != val2; + break; + case '!==': + ok = val !== val2; + break; + default: + msg = msg ? msg + ': ' : msg; + throw new chai.AssertionError( + msg + 'Invalid operator "' + operator + '"', + undefined, + assert.operator + ); + } + var test = new Assertion(ok, msg, assert.operator, true); + test.assert( + true === flag(test, 'object') + , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2) + , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) ); + }; + + /** + * ### .closeTo(actual, expected, delta, [message]) + * + * Asserts that the target is equal `expected`, to within a +/- `delta` range. + * + * assert.closeTo(1.5, 1, 0.5, 'numbers are close'); + * + * @name closeTo + * @param {Number} actual + * @param {Number} expected + * @param {Number} delta + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.closeTo = function (act, exp, delta, msg) { + new Assertion(act, msg, assert.closeTo, true).to.be.closeTo(exp, delta); + }; + + /** + * ### .approximately(actual, expected, delta, [message]) + * + * Asserts that the target is equal `expected`, to within a +/- `delta` range. + * + * assert.approximately(1.5, 1, 0.5, 'numbers are close'); + * + * @name approximately + * @param {Number} actual + * @param {Number} expected + * @param {Number} delta + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.approximately = function (act, exp, delta, msg) { + new Assertion(act, msg, assert.approximately, true) + .to.be.approximately(exp, delta); + }; + + /** + * ### .sameMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` have the same members in any order. Uses a + * strict equality check (===). + * + * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members'); + * + * @name sameMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.sameMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.sameMembers, true) + .to.have.same.members(set2); + } + + /** + * ### .notSameMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` don't have the same members in any order. + * Uses a strict equality check (===). + * + * assert.notSameMembers([ 1, 2, 3 ], [ 5, 1, 3 ], 'not same members'); + * + * @name notSameMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notSameMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.notSameMembers, true) + .to.not.have.same.members(set2); + } + + /** + * ### .sameDeepMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` have the same members in any order. Uses a + * deep equality check. + * + * assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members'); + * + * @name sameDeepMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.sameDeepMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.sameDeepMembers, true) + .to.have.same.deep.members(set2); + } + + /** + * ### .notSameDeepMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` don't have the same members in any order. + * Uses a deep equality check. + * + * assert.notSameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { f: 5 }], 'not same deep members'); + * + * @name notSameDeepMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notSameDeepMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.notSameDeepMembers, true) + .to.not.have.same.deep.members(set2); + } + + /** + * ### .sameOrderedMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` have the same members in the same order. + * Uses a strict equality check (===). + * + * assert.sameOrderedMembers([ 1, 2, 3 ], [ 1, 2, 3 ], 'same ordered members'); + * + * @name sameOrderedMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.sameOrderedMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.sameOrderedMembers, true) + .to.have.same.ordered.members(set2); + } + + /** + * ### .notSameOrderedMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` don't have the same members in the same + * order. Uses a strict equality check (===). + * + * assert.notSameOrderedMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'not same ordered members'); + * + * @name notSameOrderedMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notSameOrderedMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.notSameOrderedMembers, true) + .to.not.have.same.ordered.members(set2); + } + + /** + * ### .sameDeepOrderedMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` have the same members in the same order. + * Uses a deep equality check. + * + * assert.sameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { c: 3 } ], 'same deep ordered members'); + * + * @name sameDeepOrderedMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.sameDeepOrderedMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.sameDeepOrderedMembers, true) + .to.have.same.deep.ordered.members(set2); + } + + /** + * ### .notSameDeepOrderedMembers(set1, set2, [message]) + * + * Asserts that `set1` and `set2` don't have the same members in the same + * order. Uses a deep equality check. + * + * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 }, { z: 5 } ], 'not same deep ordered members'); + * assert.notSameDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { c: 3 } ], 'not same deep ordered members'); + * + * @name notSameDeepOrderedMembers + * @param {Array} set1 + * @param {Array} set2 + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notSameDeepOrderedMembers = function (set1, set2, msg) { + new Assertion(set1, msg, assert.notSameDeepOrderedMembers, true) + .to.not.have.same.deep.ordered.members(set2); + } + + /** + * ### .includeMembers(superset, subset, [message]) + * + * Asserts that `subset` is included in `superset` in any order. Uses a + * strict equality check (===). Duplicates are ignored. + * + * assert.includeMembers([ 1, 2, 3 ], [ 2, 1, 2 ], 'include members'); + * + * @name includeMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.includeMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.includeMembers, true) + .to.include.members(subset); + } + + /** + * ### .notIncludeMembers(superset, subset, [message]) + * + * Asserts that `subset` isn't included in `superset` in any order. Uses a + * strict equality check (===). Duplicates are ignored. + * + * assert.notIncludeMembers([ 1, 2, 3 ], [ 5, 1 ], 'not include members'); + * + * @name notIncludeMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notIncludeMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.notIncludeMembers, true) + .to.not.include.members(subset); + } + + /** + * ### .includeDeepMembers(superset, subset, [message]) + * + * Asserts that `subset` is included in `superset` in any order. Uses a deep + * equality check. Duplicates are ignored. + * + * assert.includeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 }, { b: 2 } ], 'include deep members'); + * + * @name includeDeepMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.includeDeepMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.includeDeepMembers, true) + .to.include.deep.members(subset); + } + + /** + * ### .notIncludeDeepMembers(superset, subset, [message]) + * + * Asserts that `subset` isn't included in `superset` in any order. Uses a + * deep equality check. Duplicates are ignored. + * + * assert.notIncludeDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { f: 5 } ], 'not include deep members'); + * + * @name notIncludeDeepMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notIncludeDeepMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.notIncludeDeepMembers, true) + .to.not.include.deep.members(subset); + } + + /** + * ### .includeOrderedMembers(superset, subset, [message]) + * + * Asserts that `subset` is included in `superset` in the same order + * beginning with the first element in `superset`. Uses a strict equality + * check (===). + * + * assert.includeOrderedMembers([ 1, 2, 3 ], [ 1, 2 ], 'include ordered members'); + * + * @name includeOrderedMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.includeOrderedMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.includeOrderedMembers, true) + .to.include.ordered.members(subset); + } + + /** + * ### .notIncludeOrderedMembers(superset, subset, [message]) + * + * Asserts that `subset` isn't included in `superset` in the same order + * beginning with the first element in `superset`. Uses a strict equality + * check (===). + * + * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 1 ], 'not include ordered members'); + * assert.notIncludeOrderedMembers([ 1, 2, 3 ], [ 2, 3 ], 'not include ordered members'); + * + * @name notIncludeOrderedMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notIncludeOrderedMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.notIncludeOrderedMembers, true) + .to.not.include.ordered.members(subset); + } + + /** + * ### .includeDeepOrderedMembers(superset, subset, [message]) + * + * Asserts that `subset` is included in `superset` in the same order + * beginning with the first element in `superset`. Uses a deep equality + * check. + * + * assert.includeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { b: 2 } ], 'include deep ordered members'); + * + * @name includeDeepOrderedMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.includeDeepOrderedMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.includeDeepOrderedMembers, true) + .to.include.deep.ordered.members(subset); + } + + /** + * ### .notIncludeDeepOrderedMembers(superset, subset, [message]) + * + * Asserts that `subset` isn't included in `superset` in the same order + * beginning with the first element in `superset`. Uses a deep equality + * check. + * + * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { a: 1 }, { f: 5 } ], 'not include deep ordered members'); + * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { a: 1 } ], 'not include deep ordered members'); + * assert.notIncludeDeepOrderedMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [ { b: 2 }, { c: 3 } ], 'not include deep ordered members'); + * + * @name notIncludeDeepOrderedMembers + * @param {Array} superset + * @param {Array} subset + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.notIncludeDeepOrderedMembers = function (superset, subset, msg) { + new Assertion(superset, msg, assert.notIncludeDeepOrderedMembers, true) + .to.not.include.deep.ordered.members(subset); + } + + /** + * ### .oneOf(inList, list, [message]) + * + * Asserts that non-object, non-array value `inList` appears in the flat array `list`. + * + * assert.oneOf(1, [ 2, 1 ], 'Not found in list'); + * + * @name oneOf + * @param {*} inList + * @param {Array<*>} list + * @param {String} message + * @namespace Assert + * @api public + */ + + assert.oneOf = function (inList, list, msg) { + new Assertion(inList, msg, assert.oneOf, true).to.be.oneOf(list); + } + + /** + * ### .changes(function, object, property, [message]) + * + * Asserts that a function changes the value of a property. + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 22 }; + * assert.changes(fn, obj, 'val'); + * + * @name changes + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.changes = function (fn, obj, prop, msg) { + if (arguments.length === 3 && typeof obj === 'function') { + msg = prop; + prop = null; + } + + new Assertion(fn, msg, assert.changes, true).to.change(obj, prop); + } + + /** + * ### .changesBy(function, object, property, delta, [message]) + * + * Asserts that a function changes the value of a property by an amount (delta). + * + * var obj = { val: 10 }; + * var fn = function() { obj.val += 2 }; + * assert.changesBy(fn, obj, 'val', 2); + * + * @name changesBy + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.changesBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + new Assertion(fn, msg, assert.changesBy, true) + .to.change(obj, prop).by(delta); + } + + /** + * ### .doesNotChange(function, object, property, [message]) + * + * Asserts that a function does not change the value of a property. + * + * var obj = { val: 10 }; + * var fn = function() { console.log('foo'); }; + * assert.doesNotChange(fn, obj, 'val'); + * + * @name doesNotChange + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.doesNotChange = function (fn, obj, prop, msg) { + if (arguments.length === 3 && typeof obj === 'function') { + msg = prop; + prop = null; + } + + return new Assertion(fn, msg, assert.doesNotChange, true) + .to.not.change(obj, prop); + } + + /** + * ### .changesButNotBy(function, object, property, delta, [message]) + * + * Asserts that a function does not change the value of a property or of a function's return value by an amount (delta) + * + * var obj = { val: 10 }; + * var fn = function() { obj.val += 10 }; + * assert.changesButNotBy(fn, obj, 'val', 5); + * + * @name changesButNotBy + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.changesButNotBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + new Assertion(fn, msg, assert.changesButNotBy, true) + .to.change(obj, prop).but.not.by(delta); + } + + /** + * ### .increases(function, object, property, [message]) + * + * Asserts that a function increases a numeric object property. + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 13 }; + * assert.increases(fn, obj, 'val'); + * + * @name increases + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.increases = function (fn, obj, prop, msg) { + if (arguments.length === 3 && typeof obj === 'function') { + msg = prop; + prop = null; + } + + return new Assertion(fn, msg, assert.increases, true) + .to.increase(obj, prop); + } + + /** + * ### .increasesBy(function, object, property, delta, [message]) + * + * Asserts that a function increases a numeric object property or a function's return value by an amount (delta). + * + * var obj = { val: 10 }; + * var fn = function() { obj.val += 10 }; + * assert.increasesBy(fn, obj, 'val', 10); + * + * @name increasesBy + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.increasesBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + new Assertion(fn, msg, assert.increasesBy, true) + .to.increase(obj, prop).by(delta); + } + + /** + * ### .doesNotIncrease(function, object, property, [message]) + * + * Asserts that a function does not increase a numeric object property. + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 8 }; + * assert.doesNotIncrease(fn, obj, 'val'); + * + * @name doesNotIncrease + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.doesNotIncrease = function (fn, obj, prop, msg) { + if (arguments.length === 3 && typeof obj === 'function') { + msg = prop; + prop = null; + } + + return new Assertion(fn, msg, assert.doesNotIncrease, true) + .to.not.increase(obj, prop); + } + + /** + * ### .increasesButNotBy(function, object, property, [message]) + * + * Asserts that a function does not increase a numeric object property or function's return value by an amount (delta). + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 15 }; + * assert.increasesButNotBy(fn, obj, 'val', 10); + * + * @name increasesButNotBy + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.increasesButNotBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + new Assertion(fn, msg, assert.increasesButNotBy, true) + .to.increase(obj, prop).but.not.by(delta); + } + + /** + * ### .decreases(function, object, property, [message]) + * + * Asserts that a function decreases a numeric object property. + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 5 }; + * assert.decreases(fn, obj, 'val'); + * + * @name decreases + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.decreases = function (fn, obj, prop, msg) { + if (arguments.length === 3 && typeof obj === 'function') { + msg = prop; + prop = null; + } + + return new Assertion(fn, msg, assert.decreases, true) + .to.decrease(obj, prop); + } + + /** + * ### .decreasesBy(function, object, property, delta, [message]) + * + * Asserts that a function decreases a numeric object property or a function's return value by an amount (delta) + * + * var obj = { val: 10 }; + * var fn = function() { obj.val -= 5 }; + * assert.decreasesBy(fn, obj, 'val', 5); + * + * @name decreasesBy + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.decreasesBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + new Assertion(fn, msg, assert.decreasesBy, true) + .to.decrease(obj, prop).by(delta); + } + + /** + * ### .doesNotDecrease(function, object, property, [message]) + * + * Asserts that a function does not decreases a numeric object property. + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 15 }; + * assert.doesNotDecrease(fn, obj, 'val'); + * + * @name doesNotDecrease + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.doesNotDecrease = function (fn, obj, prop, msg) { + if (arguments.length === 3 && typeof obj === 'function') { + msg = prop; + prop = null; + } + + return new Assertion(fn, msg, assert.doesNotDecrease, true) + .to.not.decrease(obj, prop); + } + + /** + * ### .doesNotDecreaseBy(function, object, property, delta, [message]) + * + * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta) + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 5 }; + * assert.doesNotDecreaseBy(fn, obj, 'val', 1); + * + * @name doesNotDecrease + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.doesNotDecreaseBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + return new Assertion(fn, msg, assert.doesNotDecreaseBy, true) + .to.not.decrease(obj, prop).by(delta); + } + + /** + * ### .decreasesButNotBy(function, object, property, delta, [message]) + * + * Asserts that a function does not decreases a numeric object property or a function's return value by an amount (delta) + * + * var obj = { val: 10 }; + * var fn = function() { obj.val = 5 }; + * assert.decreasesButNotBy(fn, obj, 'val', 1); + * + * @name decreasesButNotBy + * @param {Function} modifier function + * @param {Object} object or getter function + * @param {String} property name _optional_ + * @param {Number} change amount (delta) + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.decreasesButNotBy = function (fn, obj, prop, delta, msg) { + if (arguments.length === 4 && typeof obj === 'function') { + var tmpMsg = delta; + delta = prop; + msg = tmpMsg; + } else if (arguments.length === 3) { + delta = prop; + prop = null; + } + + new Assertion(fn, msg, assert.decreasesButNotBy, true) + .to.decrease(obj, prop).but.not.by(delta); + } + + /*! + * ### .ifError(object) + * + * Asserts if value is not a false value, and throws if it is a true value. + * This is added to allow for chai to be a drop-in replacement for Node's + * assert class. + * + * var err = new Error('I am a custom error'); + * assert.ifError(err); // Rethrows err! + * + * @name ifError + * @param {Object} object + * @namespace Assert + * @api public + */ + + assert.ifError = function (val) { + if (val) { + throw(val); + } + }; + + /** + * ### .isExtensible(object) + * + * Asserts that `object` is extensible (can have new properties added to it). + * + * assert.isExtensible({}); + * + * @name isExtensible + * @alias extensible + * @param {Object} object + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isExtensible = function (obj, msg) { + new Assertion(obj, msg, assert.isExtensible, true).to.be.extensible; + }; + + /** + * ### .isNotExtensible(object) + * + * Asserts that `object` is _not_ extensible. + * + * var nonExtensibleObject = Object.preventExtensions({}); + * var sealedObject = Object.seal({}); + * var frozenObject = Object.freeze({}); + * + * assert.isNotExtensible(nonExtensibleObject); + * assert.isNotExtensible(sealedObject); + * assert.isNotExtensible(frozenObject); + * + * @name isNotExtensible + * @alias notExtensible + * @param {Object} object + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isNotExtensible = function (obj, msg) { + new Assertion(obj, msg, assert.isNotExtensible, true).to.not.be.extensible; + }; + + /** + * ### .isSealed(object) + * + * Asserts that `object` is sealed (cannot have new properties added to it + * and its existing properties cannot be removed). + * + * var sealedObject = Object.seal({}); + * var frozenObject = Object.seal({}); + * + * assert.isSealed(sealedObject); + * assert.isSealed(frozenObject); + * + * @name isSealed + * @alias sealed + * @param {Object} object + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isSealed = function (obj, msg) { + new Assertion(obj, msg, assert.isSealed, true).to.be.sealed; + }; + + /** + * ### .isNotSealed(object) + * + * Asserts that `object` is _not_ sealed. + * + * assert.isNotSealed({}); + * + * @name isNotSealed + * @alias notSealed + * @param {Object} object + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isNotSealed = function (obj, msg) { + new Assertion(obj, msg, assert.isNotSealed, true).to.not.be.sealed; + }; + + /** + * ### .isFrozen(object) + * + * Asserts that `object` is frozen (cannot have new properties added to it + * and its existing properties cannot be modified). + * + * var frozenObject = Object.freeze({}); + * assert.frozen(frozenObject); + * + * @name isFrozen + * @alias frozen + * @param {Object} object + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isFrozen = function (obj, msg) { + new Assertion(obj, msg, assert.isFrozen, true).to.be.frozen; + }; + + /** + * ### .isNotFrozen(object) + * + * Asserts that `object` is _not_ frozen. + * + * assert.isNotFrozen({}); + * + * @name isNotFrozen + * @alias notFrozen + * @param {Object} object + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isNotFrozen = function (obj, msg) { + new Assertion(obj, msg, assert.isNotFrozen, true).to.not.be.frozen; + }; + + /** + * ### .isEmpty(target) + * + * Asserts that the target does not contain any values. + * For arrays and strings, it checks the `length` property. + * For `Map` and `Set` instances, it checks the `size` property. + * For non-function objects, it gets the count of own + * enumerable string keys. + * + * assert.isEmpty([]); + * assert.isEmpty(''); + * assert.isEmpty(new Map); + * assert.isEmpty({}); + * + * @name isEmpty + * @alias empty + * @param {Object|Array|String|Map|Set} target + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isEmpty = function(val, msg) { + new Assertion(val, msg, assert.isEmpty, true).to.be.empty; + }; + + /** + * ### .isNotEmpty(target) + * + * Asserts that the target contains values. + * For arrays and strings, it checks the `length` property. + * For `Map` and `Set` instances, it checks the `size` property. + * For non-function objects, it gets the count of own + * enumerable string keys. + * + * assert.isNotEmpty([1, 2]); + * assert.isNotEmpty('34'); + * assert.isNotEmpty(new Set([5, 6])); + * assert.isNotEmpty({ key: 7 }); + * + * @name isNotEmpty + * @alias notEmpty + * @param {Object|Array|String|Map|Set} target + * @param {String} message _optional_ + * @namespace Assert + * @api public + */ + + assert.isNotEmpty = function(val, msg) { + new Assertion(val, msg, assert.isNotEmpty, true).to.not.be.empty; + }; + + /*! + * Aliases. + */ + + (function alias(name, as){ + assert[as] = assert[name]; + return alias; + }) + ('isOk', 'ok') + ('isNotOk', 'notOk') + ('throws', 'throw') + ('throws', 'Throw') + ('isExtensible', 'extensible') + ('isNotExtensible', 'notExtensible') + ('isSealed', 'sealed') + ('isNotSealed', 'notSealed') + ('isFrozen', 'frozen') + ('isNotFrozen', 'notFrozen') + ('isEmpty', 'empty') + ('isNotEmpty', 'notEmpty'); +}; + +},{}],7:[function(require,module,exports){ +/*! + * chai + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +module.exports = function (chai, util) { + chai.expect = function (val, message) { + return new chai.Assertion(val, message); + }; + + /** + * ### .fail(actual, expected, [message], [operator]) + * + * Throw a failure. + * + * @name fail + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @param {String} operator + * @namespace BDD + * @api public + */ + + chai.expect.fail = function (actual, expected, message, operator) { + message = message || 'expect.fail()'; + throw new chai.AssertionError(message, { + actual: actual + , expected: expected + , operator: operator + }, chai.expect.fail); + }; +}; + +},{}],8:[function(require,module,exports){ +/*! + * chai + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +module.exports = function (chai, util) { + var Assertion = chai.Assertion; + + function loadShould () { + // explicitly define this method as function as to have it's name to include as `ssfi` + function shouldGetter() { + if (this instanceof String + || this instanceof Number + || this instanceof Boolean + || typeof Symbol === 'function' && this instanceof Symbol) { + return new Assertion(this.valueOf(), null, shouldGetter); + } + return new Assertion(this, null, shouldGetter); + } + function shouldSetter(value) { + // See https://github.com/chaijs/chai/issues/86: this makes + // `whatever.should = someValue` actually set `someValue`, which is + // especially useful for `global.should = require('chai').should()`. + // + // Note that we have to use [[DefineProperty]] instead of [[Put]] + // since otherwise we would trigger this very setter! + Object.defineProperty(this, 'should', { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } + // modify Object.prototype to have `should` + Object.defineProperty(Object.prototype, 'should', { + set: shouldSetter + , get: shouldGetter + , configurable: true + }); + + var should = {}; + + /** + * ### .fail(actual, expected, [message], [operator]) + * + * Throw a failure. + * + * @name fail + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @param {String} operator + * @namespace BDD + * @api public + */ + + should.fail = function (actual, expected, message, operator) { + message = message || 'should.fail()'; + throw new chai.AssertionError(message, { + actual: actual + , expected: expected + , operator: operator + }, should.fail); + }; + + /** + * ### .equal(actual, expected, [message]) + * + * Asserts non-strict equality (`==`) of `actual` and `expected`. + * + * should.equal(3, '3', '== coerces values to strings'); + * + * @name equal + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Should + * @api public + */ + + should.equal = function (val1, val2, msg) { + new Assertion(val1, msg).to.equal(val2); + }; + + /** + * ### .throw(function, [constructor/string/regexp], [string/regexp], [message]) + * + * Asserts that `function` will throw an error that is an instance of + * `constructor`, or alternately that it will throw an error with message + * matching `regexp`. + * + * should.throw(fn, 'function throws a reference error'); + * should.throw(fn, /function throws a reference error/); + * should.throw(fn, ReferenceError); + * should.throw(fn, ReferenceError, 'function throws a reference error'); + * should.throw(fn, ReferenceError, /function throws a reference error/); + * + * @name throw + * @alias Throw + * @param {Function} function + * @param {ErrorConstructor} constructor + * @param {RegExp} regexp + * @param {String} message + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @namespace Should + * @api public + */ + + should.Throw = function (fn, errt, errs, msg) { + new Assertion(fn, msg).to.Throw(errt, errs); + }; + + /** + * ### .exist + * + * Asserts that the target is neither `null` nor `undefined`. + * + * var foo = 'hi'; + * + * should.exist(foo, 'foo exists'); + * + * @name exist + * @namespace Should + * @api public + */ + + should.exist = function (val, msg) { + new Assertion(val, msg).to.exist; + } + + // negation + should.not = {} + + /** + * ### .not.equal(actual, expected, [message]) + * + * Asserts non-strict inequality (`!=`) of `actual` and `expected`. + * + * should.not.equal(3, 4, 'these numbers are not equal'); + * + * @name not.equal + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Should + * @api public + */ + + should.not.equal = function (val1, val2, msg) { + new Assertion(val1, msg).to.not.equal(val2); + }; + + /** + * ### .throw(function, [constructor/regexp], [message]) + * + * Asserts that `function` will _not_ throw an error that is an instance of + * `constructor`, or alternately that it will not throw an error with message + * matching `regexp`. + * + * should.not.throw(fn, Error, 'function does not throw'); + * + * @name not.throw + * @alias not.Throw + * @param {Function} function + * @param {ErrorConstructor} constructor + * @param {RegExp} regexp + * @param {String} message + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @namespace Should + * @api public + */ + + should.not.Throw = function (fn, errt, errs, msg) { + new Assertion(fn, msg).to.not.Throw(errt, errs); + }; + + /** + * ### .not.exist + * + * Asserts that the target is neither `null` nor `undefined`. + * + * var bar = null; + * + * should.not.exist(bar, 'bar does not exist'); + * + * @name not.exist + * @namespace Should + * @api public + */ + + should.not.exist = function (val, msg) { + new Assertion(val, msg).to.not.exist; + } + + should['throw'] = should['Throw']; + should.not['throw'] = should.not['Throw']; + + return should; + }; + + chai.should = loadShould; + chai.Should = loadShould; +}; + +},{}],9:[function(require,module,exports){ +/*! + * Chai - addChainingMethod utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependencies + */ + +var addLengthGuard = require('./addLengthGuard'); +var chai = require('../../chai'); +var flag = require('./flag'); +var proxify = require('./proxify'); +var transferFlags = require('./transferFlags'); + +/*! + * Module variables + */ + +// Check whether `Object.setPrototypeOf` is supported +var canSetPrototype = typeof Object.setPrototypeOf === 'function'; + +// Without `Object.setPrototypeOf` support, this module will need to add properties to a function. +// However, some of functions' own props are not configurable and should be skipped. +var testFn = function() {}; +var excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) { + var propDesc = Object.getOwnPropertyDescriptor(testFn, name); + + // Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties, + // but then returns `undefined` as the property descriptor for `callee`. As a + // workaround, we perform an otherwise unnecessary type-check for `propDesc`, + // and then filter it out if it's not an object as it should be. + if (typeof propDesc !== 'object') + return true; + + return !propDesc.configurable; +}); + +// Cache `Function` properties +var call = Function.prototype.call, + apply = Function.prototype.apply; + +/** + * ### .addChainableMethod(ctx, name, method, chainingBehavior) + * + * Adds a method to an object, such that the method can also be chained. + * + * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) { + * var obj = utils.flag(this, 'object'); + * new chai.Assertion(obj).to.be.equal(str); + * }); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior); + * + * The result can then be used as both a method assertion, executing both `method` and + * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`. + * + * expect(fooStr).to.be.foo('bar'); + * expect(fooStr).to.be.foo.equal('foo'); + * + * @param {Object} ctx object to which the method is added + * @param {String} name of method to add + * @param {Function} method function to be used for `name`, when called + * @param {Function} chainingBehavior function to be called every time the property is accessed + * @namespace Utils + * @name addChainableMethod + * @api public + */ + +module.exports = function addChainableMethod(ctx, name, method, chainingBehavior) { + if (typeof chainingBehavior !== 'function') { + chainingBehavior = function () { }; + } + + var chainableBehavior = { + method: method + , chainingBehavior: chainingBehavior + }; + + // save the methods so we can overwrite them later, if we need to. + if (!ctx.__methods) { + ctx.__methods = {}; + } + ctx.__methods[name] = chainableBehavior; + + Object.defineProperty(ctx, name, + { get: function chainableMethodGetter() { + chainableBehavior.chainingBehavior.call(this); + + var chainableMethodWrapper = function () { + // Setting the `ssfi` flag to `chainableMethodWrapper` causes this + // function to be the starting point for removing implementation + // frames from the stack trace of a failed assertion. + // + // However, we only want to use this function as the starting point if + // the `lockSsfi` flag isn't set. + // + // If the `lockSsfi` flag is set, then this assertion is being + // invoked from inside of another assertion. In this case, the `ssfi` + // flag has already been set by the outer assertion. + // + // Note that overwriting a chainable method merely replaces the saved + // methods in `ctx.__methods` instead of completely replacing the + // overwritten assertion. Therefore, an overwriting assertion won't + // set the `ssfi` or `lockSsfi` flags. + if (!flag(this, 'lockSsfi')) { + flag(this, 'ssfi', chainableMethodWrapper); + } + + var result = chainableBehavior.method.apply(this, arguments); + if (result !== undefined) { + return result; + } + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + }; + + addLengthGuard(chainableMethodWrapper, name, true); + + // Use `Object.setPrototypeOf` if available + if (canSetPrototype) { + // Inherit all properties from the object by replacing the `Function` prototype + var prototype = Object.create(this); + // Restore the `call` and `apply` methods from `Function` + prototype.call = call; + prototype.apply = apply; + Object.setPrototypeOf(chainableMethodWrapper, prototype); + } + // Otherwise, redefine all properties (slow!) + else { + var asserterNames = Object.getOwnPropertyNames(ctx); + asserterNames.forEach(function (asserterName) { + if (excludeNames.indexOf(asserterName) !== -1) { + return; + } + + var pd = Object.getOwnPropertyDescriptor(ctx, asserterName); + Object.defineProperty(chainableMethodWrapper, asserterName, pd); + }); + } + + transferFlags(this, chainableMethodWrapper); + return proxify(chainableMethodWrapper); + } + , configurable: true + }); +}; + +},{"../../chai":2,"./addLengthGuard":10,"./flag":15,"./proxify":30,"./transferFlags":32}],10:[function(require,module,exports){ +var config = require('../config'); + +var fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length'); + +/*! + * Chai - addLengthGuard utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .addLengthGuard(fn, assertionName, isChainable) + * + * Define `length` as a getter on the given uninvoked method assertion. The + * getter acts as a guard against chaining `length` directly off of an uninvoked + * method assertion, which is a problem because it references `function`'s + * built-in `length` property instead of Chai's `length` assertion. When the + * getter catches the user making this mistake, it throws an error with a + * helpful message. + * + * There are two ways in which this mistake can be made. The first way is by + * chaining the `length` assertion directly off of an uninvoked chainable + * method. In this case, Chai suggests that the user use `lengthOf` instead. The + * second way is by chaining the `length` assertion directly off of an uninvoked + * non-chainable method. Non-chainable methods must be invoked prior to + * chaining. In this case, Chai suggests that the user consult the docs for the + * given assertion. + * + * If the `length` property of functions is unconfigurable, then return `fn` + * without modification. + * + * Note that in ES6, the function's `length` property is configurable, so once + * support for legacy environments is dropped, Chai's `length` property can + * replace the built-in function's `length` property, and this length guard will + * no longer be necessary. In the mean time, maintaining consistency across all + * environments is the priority. + * + * @param {Function} fn + * @param {String} assertionName + * @param {Boolean} isChainable + * @namespace Utils + * @name addLengthGuard + */ + +module.exports = function addLengthGuard (fn, assertionName, isChainable) { + if (!fnLengthDesc.configurable) return fn; + + Object.defineProperty(fn, 'length', { + get: function () { + if (isChainable) { + throw Error('Invalid Chai property: ' + assertionName + '.length. Due' + + ' to a compatibility issue, "length" cannot directly follow "' + + assertionName + '". Use "' + assertionName + '.lengthOf" instead.'); + } + + throw Error('Invalid Chai property: ' + assertionName + '.length. See' + + ' docs for proper usage of "' + assertionName + '".'); + } + }); + + return fn; +}; + +},{"../config":4}],11:[function(require,module,exports){ +/*! + * Chai - addMethod utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +var addLengthGuard = require('./addLengthGuard'); +var chai = require('../../chai'); +var flag = require('./flag'); +var proxify = require('./proxify'); +var transferFlags = require('./transferFlags'); + +/** + * ### .addMethod(ctx, name, method) + * + * Adds a method to the prototype of an object. + * + * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) { + * var obj = utils.flag(this, 'object'); + * new chai.Assertion(obj).to.be.equal(str); + * }); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.addMethod('foo', fn); + * + * Then can be used as any other assertion. + * + * expect(fooStr).to.be.foo('bar'); + * + * @param {Object} ctx object to which the method is added + * @param {String} name of method to add + * @param {Function} method function to be used for name + * @namespace Utils + * @name addMethod + * @api public + */ + +module.exports = function addMethod(ctx, name, method) { + var methodWrapper = function () { + // Setting the `ssfi` flag to `methodWrapper` causes this function to be the + // starting point for removing implementation frames from the stack trace of + // a failed assertion. + // + // However, we only want to use this function as the starting point if the + // `lockSsfi` flag isn't set. + // + // If the `lockSsfi` flag is set, then either this assertion has been + // overwritten by another assertion, or this assertion is being invoked from + // inside of another assertion. In the first case, the `ssfi` flag has + // already been set by the overwriting assertion. In the second case, the + // `ssfi` flag has already been set by the outer assertion. + if (!flag(this, 'lockSsfi')) { + flag(this, 'ssfi', methodWrapper); + } + + var result = method.apply(this, arguments); + if (result !== undefined) + return result; + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + }; + + addLengthGuard(methodWrapper, name, false); + ctx[name] = proxify(methodWrapper, name); +}; + +},{"../../chai":2,"./addLengthGuard":10,"./flag":15,"./proxify":30,"./transferFlags":32}],12:[function(require,module,exports){ +/*! + * Chai - addProperty utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +var chai = require('../../chai'); +var flag = require('./flag'); +var isProxyEnabled = require('./isProxyEnabled'); +var transferFlags = require('./transferFlags'); + +/** + * ### .addProperty(ctx, name, getter) + * + * Adds a property to the prototype of an object. + * + * utils.addProperty(chai.Assertion.prototype, 'foo', function () { + * var obj = utils.flag(this, 'object'); + * new chai.Assertion(obj).to.be.instanceof(Foo); + * }); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.addProperty('foo', fn); + * + * Then can be used as any other assertion. + * + * expect(myFoo).to.be.foo; + * + * @param {Object} ctx object to which the property is added + * @param {String} name of property to add + * @param {Function} getter function to be used for name + * @namespace Utils + * @name addProperty + * @api public + */ + +module.exports = function addProperty(ctx, name, getter) { + getter = getter === undefined ? new Function() : getter; + + Object.defineProperty(ctx, name, + { get: function propertyGetter() { + // Setting the `ssfi` flag to `propertyGetter` causes this function to + // be the starting point for removing implementation frames from the + // stack trace of a failed assertion. + // + // However, we only want to use this function as the starting point if + // the `lockSsfi` flag isn't set and proxy protection is disabled. + // + // If the `lockSsfi` flag is set, then either this assertion has been + // overwritten by another assertion, or this assertion is being invoked + // from inside of another assertion. In the first case, the `ssfi` flag + // has already been set by the overwriting assertion. In the second + // case, the `ssfi` flag has already been set by the outer assertion. + // + // If proxy protection is enabled, then the `ssfi` flag has already been + // set by the proxy getter. + if (!isProxyEnabled() && !flag(this, 'lockSsfi')) { + flag(this, 'ssfi', propertyGetter); + } + + var result = getter.call(this); + if (result !== undefined) + return result; + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + } + , configurable: true + }); +}; + +},{"../../chai":2,"./flag":15,"./isProxyEnabled":25,"./transferFlags":32}],13:[function(require,module,exports){ +/*! + * Chai - compareByInspect utility + * Copyright(c) 2011-2016 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var inspect = require('./inspect'); + +/** + * ### .compareByInspect(mixed, mixed) + * + * To be used as a compareFunction with Array.prototype.sort. Compares elements + * using inspect instead of default behavior of using toString so that Symbols + * and objects with irregular/missing toString can still be sorted without a + * TypeError. + * + * @param {Mixed} first element to compare + * @param {Mixed} second element to compare + * @returns {Number} -1 if 'a' should come before 'b'; otherwise 1 + * @name compareByInspect + * @namespace Utils + * @api public + */ + +module.exports = function compareByInspect(a, b) { + return inspect(a) < inspect(b) ? -1 : 1; +}; + +},{"./inspect":23}],14:[function(require,module,exports){ +/*! + * Chai - expectTypes utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .expectTypes(obj, types) + * + * Ensures that the object being tested against is of a valid type. + * + * utils.expectTypes(this, ['array', 'object', 'string']); + * + * @param {Mixed} obj constructed Assertion + * @param {Array} type A list of allowed types for this assertion + * @param {Function} ssfi starting point for removing implementation frames from + * stack trace of AssertionError + * @namespace Utils + * @name expectTypes + * @api public + */ + +var AssertionError = require('assertion-error'); +var flag = require('./flag'); +var type = require('type-detect'); + +module.exports = function expectTypes(obj, types, ssfi) { + var flagMsg = flag(obj, 'message'); + + flagMsg = flagMsg ? flagMsg + ': ' : ''; + + obj = flag(obj, 'object'); + types = types.map(function (t) { return t.toLowerCase(); }); + types.sort(); + + // Transforms ['lorem', 'ipsum'] into 'a lirum, or an ipsum' + var str = types.map(function (t, index) { + var art = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(t.charAt(0)) ? 'an' : 'a'; + var or = types.length > 1 && index === types.length - 1 ? 'or ' : ''; + return or + art + ' ' + t; + }).join(', '); + + var objType = type(obj).toLowerCase(); + + if (!types.some(function (expected) { return objType === expected; })) { + throw new AssertionError( + flagMsg + 'object tested must be ' + str + ', but ' + objType + ' given', + undefined, + ssfi + ); + } +}; + +},{"./flag":15,"assertion-error":33,"type-detect":39}],15:[function(require,module,exports){ +/*! + * Chai - flag utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .flag(object, key, [value]) + * + * Get or set a flag value on an object. If a + * value is provided it will be set, else it will + * return the currently set value or `undefined` if + * the value is not set. + * + * utils.flag(this, 'foo', 'bar'); // setter + * utils.flag(this, 'foo'); // getter, returns `bar` + * + * @param {Object} object constructed Assertion + * @param {String} key + * @param {Mixed} value (optional) + * @namespace Utils + * @name flag + * @api private + */ + +module.exports = function flag(obj, key, value) { + var flags = obj.__flags || (obj.__flags = Object.create(null)); + if (arguments.length === 3) { + flags[key] = value; + } else { + return flags[key]; + } +}; + +},{}],16:[function(require,module,exports){ +/*! + * Chai - getActual utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .getActual(object, [actual]) + * + * Returns the `actual` value for an Assertion. + * + * @param {Object} object (constructed Assertion) + * @param {Arguments} chai.Assertion.prototype.assert arguments + * @namespace Utils + * @name getActual + */ + +module.exports = function getActual(obj, args) { + return args.length > 4 ? args[4] : obj._obj; +}; + +},{}],17:[function(require,module,exports){ +/*! + * Chai - getEnumerableProperties utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .getEnumerableProperties(object) + * + * This allows the retrieval of enumerable property names of an object, + * inherited or not. + * + * @param {Object} object + * @returns {Array} + * @namespace Utils + * @name getEnumerableProperties + * @api public + */ + +module.exports = function getEnumerableProperties(object) { + var result = []; + for (var name in object) { + result.push(name); + } + return result; +}; + +},{}],18:[function(require,module,exports){ +/*! + * Chai - message composition utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var flag = require('./flag') + , getActual = require('./getActual') + , inspect = require('./inspect') + , objDisplay = require('./objDisplay'); + +/** + * ### .getMessage(object, message, negateMessage) + * + * Construct the error message based on flags + * and template tags. Template tags will return + * a stringified inspection of the object referenced. + * + * Message template tags: + * - `#{this}` current asserted object + * - `#{act}` actual value + * - `#{exp}` expected value + * + * @param {Object} object (constructed Assertion) + * @param {Arguments} chai.Assertion.prototype.assert arguments + * @namespace Utils + * @name getMessage + * @api public + */ + +module.exports = function getMessage(obj, args) { + var negate = flag(obj, 'negate') + , val = flag(obj, 'object') + , expected = args[3] + , actual = getActual(obj, args) + , msg = negate ? args[2] : args[1] + , flagMsg = flag(obj, 'message'); + + if(typeof msg === "function") msg = msg(); + msg = msg || ''; + msg = msg + .replace(/#\{this\}/g, function () { return objDisplay(val); }) + .replace(/#\{act\}/g, function () { return objDisplay(actual); }) + .replace(/#\{exp\}/g, function () { return objDisplay(expected); }); + + return flagMsg ? flagMsg + ': ' + msg : msg; +}; + +},{"./flag":15,"./getActual":16,"./inspect":23,"./objDisplay":26}],19:[function(require,module,exports){ +/*! + * Chai - getOwnEnumerableProperties utility + * Copyright(c) 2011-2016 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols'); + +/** + * ### .getOwnEnumerableProperties(object) + * + * This allows the retrieval of directly-owned enumerable property names and + * symbols of an object. This function is necessary because Object.keys only + * returns enumerable property names, not enumerable property symbols. + * + * @param {Object} object + * @returns {Array} + * @namespace Utils + * @name getOwnEnumerableProperties + * @api public + */ + +module.exports = function getOwnEnumerableProperties(obj) { + return Object.keys(obj).concat(getOwnEnumerablePropertySymbols(obj)); +}; + +},{"./getOwnEnumerablePropertySymbols":20}],20:[function(require,module,exports){ +/*! + * Chai - getOwnEnumerablePropertySymbols utility + * Copyright(c) 2011-2016 Jake Luer + * MIT Licensed + */ + +/** + * ### .getOwnEnumerablePropertySymbols(object) + * + * This allows the retrieval of directly-owned enumerable property symbols of an + * object. This function is necessary because Object.getOwnPropertySymbols + * returns both enumerable and non-enumerable property symbols. + * + * @param {Object} object + * @returns {Array} + * @namespace Utils + * @name getOwnEnumerablePropertySymbols + * @api public + */ + +module.exports = function getOwnEnumerablePropertySymbols(obj) { + if (typeof Object.getOwnPropertySymbols !== 'function') return []; + + return Object.getOwnPropertySymbols(obj).filter(function (sym) { + return Object.getOwnPropertyDescriptor(obj, sym).enumerable; + }); +}; + +},{}],21:[function(require,module,exports){ +/*! + * Chai - getProperties utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .getProperties(object) + * + * This allows the retrieval of property names of an object, enumerable or not, + * inherited or not. + * + * @param {Object} object + * @returns {Array} + * @namespace Utils + * @name getProperties + * @api public + */ + +module.exports = function getProperties(object) { + var result = Object.getOwnPropertyNames(object); + + function addProperty(property) { + if (result.indexOf(property) === -1) { + result.push(property); + } + } + + var proto = Object.getPrototypeOf(object); + while (proto !== null) { + Object.getOwnPropertyNames(proto).forEach(addProperty); + proto = Object.getPrototypeOf(proto); + } + + return result; +}; + +},{}],22:[function(require,module,exports){ +/*! + * chai + * Copyright(c) 2011 Jake Luer + * MIT Licensed + */ + +/*! + * Dependencies that are used for multiple exports are required here only once + */ + +var pathval = require('pathval'); + +/*! + * test utility + */ + +exports.test = require('./test'); + +/*! + * type utility + */ + +exports.type = require('type-detect'); + +/*! + * expectTypes utility + */ +exports.expectTypes = require('./expectTypes'); + +/*! + * message utility + */ + +exports.getMessage = require('./getMessage'); + +/*! + * actual utility + */ + +exports.getActual = require('./getActual'); + +/*! + * Inspect util + */ + +exports.inspect = require('./inspect'); + +/*! + * Object Display util + */ + +exports.objDisplay = require('./objDisplay'); + +/*! + * Flag utility + */ + +exports.flag = require('./flag'); + +/*! + * Flag transferring utility + */ + +exports.transferFlags = require('./transferFlags'); + +/*! + * Deep equal utility + */ + +exports.eql = require('deep-eql'); + +/*! + * Deep path info + */ + +exports.getPathInfo = pathval.getPathInfo; + +/*! + * Check if a property exists + */ + +exports.hasProperty = pathval.hasProperty; + +/*! + * Function name + */ + +exports.getName = require('get-func-name'); + +/*! + * add Property + */ + +exports.addProperty = require('./addProperty'); + +/*! + * add Method + */ + +exports.addMethod = require('./addMethod'); + +/*! + * overwrite Property + */ + +exports.overwriteProperty = require('./overwriteProperty'); + +/*! + * overwrite Method + */ + +exports.overwriteMethod = require('./overwriteMethod'); + +/*! + * Add a chainable method + */ + +exports.addChainableMethod = require('./addChainableMethod'); + +/*! + * Overwrite chainable method + */ + +exports.overwriteChainableMethod = require('./overwriteChainableMethod'); + +/*! + * Compare by inspect method + */ + +exports.compareByInspect = require('./compareByInspect'); + +/*! + * Get own enumerable property symbols method + */ + +exports.getOwnEnumerablePropertySymbols = require('./getOwnEnumerablePropertySymbols'); + +/*! + * Get own enumerable properties method + */ + +exports.getOwnEnumerableProperties = require('./getOwnEnumerableProperties'); + +/*! + * Checks error against a given set of criteria + */ + +exports.checkError = require('check-error'); + +/*! + * Proxify util + */ + +exports.proxify = require('./proxify'); + +/*! + * addLengthGuard util + */ + +exports.addLengthGuard = require('./addLengthGuard'); + +/*! + * isProxyEnabled helper + */ + +exports.isProxyEnabled = require('./isProxyEnabled'); + +/*! + * isNaN method + */ + +exports.isNaN = require('./isNaN'); + +},{"./addChainableMethod":9,"./addLengthGuard":10,"./addMethod":11,"./addProperty":12,"./compareByInspect":13,"./expectTypes":14,"./flag":15,"./getActual":16,"./getMessage":18,"./getOwnEnumerableProperties":19,"./getOwnEnumerablePropertySymbols":20,"./inspect":23,"./isNaN":24,"./isProxyEnabled":25,"./objDisplay":26,"./overwriteChainableMethod":27,"./overwriteMethod":28,"./overwriteProperty":29,"./proxify":30,"./test":31,"./transferFlags":32,"check-error":34,"deep-eql":35,"get-func-name":37,"pathval":38,"type-detect":39}],23:[function(require,module,exports){ +// This is (almost) directly from Node.js utils +// https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js + +var getName = require('get-func-name'); +var getProperties = require('./getProperties'); +var getEnumerableProperties = require('./getEnumerableProperties'); +var config = require('../config'); + +module.exports = inspect; + +/** + * ### .inspect(obj, [showHidden], [depth], [colors]) + * + * Echoes the value of a value. Tries to print the value out + * in the best way possible given the different types. + * + * @param {Object} obj The object to print out. + * @param {Boolean} showHidden Flag that shows hidden (not enumerable) + * properties of objects. Default is false. + * @param {Number} depth Depth in which to descend in object. Default is 2. + * @param {Boolean} colors Flag to turn on ANSI escape codes to color the + * output. Default is false (no coloring). + * @namespace Utils + * @name inspect + */ +function inspect(obj, showHidden, depth, colors) { + var ctx = { + showHidden: showHidden, + seen: [], + stylize: function (str) { return str; } + }; + return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth)); +} + +// Returns true if object is a DOM element. +var isDOMElement = function (object) { + if (typeof HTMLElement === 'object') { + return object instanceof HTMLElement; + } else { + return object && + typeof object === 'object' && + 'nodeType' in object && + object.nodeType === 1 && + typeof object.nodeName === 'string'; + } +}; + +function formatValue(ctx, value, recurseTimes) { + // Provide a hook for user-specified inspect functions. + // Check that value is an object with an inspect function on it + if (value && typeof value.inspect === 'function' && + // Filter out the util module, it's inspect function is special + value.inspect !== exports.inspect && + // Also filter out any prototype objects using the circular check. + !(value.constructor && value.constructor.prototype === value)) { + var ret = value.inspect(recurseTimes, ctx); + if (typeof ret !== 'string') { + ret = formatValue(ctx, ret, recurseTimes); + } + return ret; + } + + // Primitive types cannot have properties + var primitive = formatPrimitive(ctx, value); + if (primitive) { + return primitive; + } + + // If this is a DOM element, try to get the outer HTML. + if (isDOMElement(value)) { + if ('outerHTML' in value) { + return value.outerHTML; + // This value does not have an outerHTML attribute, + // it could still be an XML element + } else { + // Attempt to serialize it + try { + if (document.xmlVersion) { + var xmlSerializer = new XMLSerializer(); + return xmlSerializer.serializeToString(value); + } else { + // Firefox 11- do not support outerHTML + // It does, however, support innerHTML + // Use the following to render the element + var ns = "http://www.w3.org/1999/xhtml"; + var container = document.createElementNS(ns, '_'); + + container.appendChild(value.cloneNode(false)); + html = container.innerHTML + .replace('><', '>' + value.innerHTML + '<'); + container.innerHTML = ''; + return html; + } + } catch (err) { + // This could be a non-native DOM implementation, + // continue with the normal flow: + // printing the element as if it is an object. + } + } + } + + // Look up the keys of the object. + var visibleKeys = getEnumerableProperties(value); + var keys = ctx.showHidden ? getProperties(value) : visibleKeys; + + var name, nameSuffix; + + // Some type of object without properties can be shortcutted. + // In IE, errors have a single `stack` property, or if they are vanilla `Error`, + // a `stack` plus `description` property; ignore those for consistency. + if (keys.length === 0 || (isError(value) && ( + (keys.length === 1 && keys[0] === 'stack') || + (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack') + ))) { + if (typeof value === 'function') { + name = getName(value); + nameSuffix = name ? ': ' + name : ''; + return ctx.stylize('[Function' + nameSuffix + ']', 'special'); + } + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } + if (isDate(value)) { + return ctx.stylize(Date.prototype.toUTCString.call(value), 'date'); + } + if (isError(value)) { + return formatError(value); + } + } + + var base = '' + , array = false + , typedArray = false + , braces = ['{', '}']; + + if (isTypedArray(value)) { + typedArray = true; + braces = ['[', ']']; + } + + // Make Array say that they are Array + if (isArray(value)) { + array = true; + braces = ['[', ']']; + } + + // Make functions say that they are functions + if (typeof value === 'function') { + name = getName(value); + nameSuffix = name ? ': ' + name : ''; + base = ' [Function' + nameSuffix + ']'; + } + + // Make RegExps say that they are RegExps + if (isRegExp(value)) { + base = ' ' + RegExp.prototype.toString.call(value); + } + + // Make dates with properties first say the date + if (isDate(value)) { + base = ' ' + Date.prototype.toUTCString.call(value); + } + + // Make error with message first say the error + if (isError(value)) { + return formatError(value); + } + + if (keys.length === 0 && (!array || value.length == 0)) { + return braces[0] + base + braces[1]; + } + + if (recurseTimes < 0) { + if (isRegExp(value)) { + return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); + } else { + return ctx.stylize('[Object]', 'special'); + } + } + + ctx.seen.push(value); + + var output; + if (array) { + output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); + } else if (typedArray) { + return formatTypedArray(value); + } else { + output = keys.map(function(key) { + return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); + }); + } + + ctx.seen.pop(); + + return reduceToSingleString(output, base, braces); +} + + +function formatPrimitive(ctx, value) { + switch (typeof value) { + case 'undefined': + return ctx.stylize('undefined', 'undefined'); + + case 'string': + var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') + .replace(/'/g, "\\'") + .replace(/\\"/g, '"') + '\''; + return ctx.stylize(simple, 'string'); + + case 'number': + if (value === 0 && (1/value) === -Infinity) { + return ctx.stylize('-0', 'number'); + } + return ctx.stylize('' + value, 'number'); + + case 'boolean': + return ctx.stylize('' + value, 'boolean'); + + case 'symbol': + return ctx.stylize(value.toString(), 'symbol'); + } + // For some reason typeof null is "object", so special case here. + if (value === null) { + return ctx.stylize('null', 'null'); + } +} + + +function formatError(value) { + return '[' + Error.prototype.toString.call(value) + ']'; +} + + +function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { + var output = []; + for (var i = 0, l = value.length; i < l; ++i) { + if (Object.prototype.hasOwnProperty.call(value, String(i))) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + String(i), true)); + } else { + output.push(''); + } + } + + keys.forEach(function(key) { + if (!key.match(/^\d+$/)) { + output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, + key, true)); + } + }); + return output; +} + +function formatTypedArray(value) { + var str = '[ '; + + for (var i = 0; i < value.length; ++i) { + if (str.length >= config.truncateThreshold - 7) { + str += '...'; + break; + } + str += value[i] + ', '; + } + str += ' ]'; + + // Removing trailing `, ` if the array was not truncated + if (str.indexOf(', ]') !== -1) { + str = str.replace(', ]', ' ]'); + } + + return str; +} + +function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { + var name; + var propDescriptor = Object.getOwnPropertyDescriptor(value, key); + var str; + + if (propDescriptor) { + if (propDescriptor.get) { + if (propDescriptor.set) { + str = ctx.stylize('[Getter/Setter]', 'special'); + } else { + str = ctx.stylize('[Getter]', 'special'); + } + } else { + if (propDescriptor.set) { + str = ctx.stylize('[Setter]', 'special'); + } + } + } + if (visibleKeys.indexOf(key) < 0) { + name = '[' + key + ']'; + } + if (!str) { + if (ctx.seen.indexOf(value[key]) < 0) { + if (recurseTimes === null) { + str = formatValue(ctx, value[key], null); + } else { + str = formatValue(ctx, value[key], recurseTimes - 1); + } + if (str.indexOf('\n') > -1) { + if (array) { + str = str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n').substr(2); + } else { + str = '\n' + str.split('\n').map(function(line) { + return ' ' + line; + }).join('\n'); + } + } + } else { + str = ctx.stylize('[Circular]', 'special'); + } + } + if (typeof name === 'undefined') { + if (array && key.match(/^\d+$/)) { + return str; + } + name = JSON.stringify('' + key); + if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { + name = name.substr(1, name.length - 2); + name = ctx.stylize(name, 'name'); + } else { + name = name.replace(/'/g, "\\'") + .replace(/\\"/g, '"') + .replace(/(^"|"$)/g, "'"); + name = ctx.stylize(name, 'string'); + } + } + + return name + ': ' + str; +} + + +function reduceToSingleString(output, base, braces) { + var numLinesEst = 0; + var length = output.reduce(function(prev, cur) { + numLinesEst++; + if (cur.indexOf('\n') >= 0) numLinesEst++; + return prev + cur.length + 1; + }, 0); + + if (length > 60) { + return braces[0] + + (base === '' ? '' : base + '\n ') + + ' ' + + output.join(',\n ') + + ' ' + + braces[1]; + } + + return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; +} + +function isTypedArray(ar) { + // Unfortunately there's no way to check if an object is a TypedArray + // We have to check if it's one of these types + return (typeof ar === 'object' && /\w+Array]$/.test(objectToString(ar))); +} + +function isArray(ar) { + return Array.isArray(ar) || + (typeof ar === 'object' && objectToString(ar) === '[object Array]'); +} + +function isRegExp(re) { + return typeof re === 'object' && objectToString(re) === '[object RegExp]'; +} + +function isDate(d) { + return typeof d === 'object' && objectToString(d) === '[object Date]'; +} + +function isError(e) { + return typeof e === 'object' && objectToString(e) === '[object Error]'; +} + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +},{"../config":4,"./getEnumerableProperties":17,"./getProperties":21,"get-func-name":37}],24:[function(require,module,exports){ +/*! + * Chai - isNaN utility + * Copyright(c) 2012-2015 Sakthipriyan Vairamani + * MIT Licensed + */ + +/** + * ### .isNaN(value) + * + * Checks if the given value is NaN or not. + * + * utils.isNaN(NaN); // true + * + * @param {Value} The value which has to be checked if it is NaN + * @name isNaN + * @api private + */ + +function isNaN(value) { + // Refer http://www.ecma-international.org/ecma-262/6.0/#sec-isnan-number + // section's NOTE. + return value !== value; +} + +// If ECMAScript 6's Number.isNaN is present, prefer that. +module.exports = Number.isNaN || isNaN; + +},{}],25:[function(require,module,exports){ +var config = require('../config'); + +/*! + * Chai - isProxyEnabled helper + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .isProxyEnabled() + * + * Helper function to check if Chai's proxy protection feature is enabled. If + * proxies are unsupported or disabled via the user's Chai config, then return + * false. Otherwise, return true. + * + * @namespace Utils + * @name isProxyEnabled + */ + +module.exports = function isProxyEnabled() { + return config.useProxy && + typeof Proxy !== 'undefined' && + typeof Reflect !== 'undefined'; +}; + +},{"../config":4}],26:[function(require,module,exports){ +/*! + * Chai - flag utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var inspect = require('./inspect'); +var config = require('../config'); + +/** + * ### .objDisplay(object) + * + * Determines if an object or an array matches + * criteria to be inspected in-line for error + * messages or should be truncated. + * + * @param {Mixed} javascript object to inspect + * @name objDisplay + * @namespace Utils + * @api public + */ + +module.exports = function objDisplay(obj) { + var str = inspect(obj) + , type = Object.prototype.toString.call(obj); + + if (config.truncateThreshold && str.length >= config.truncateThreshold) { + if (type === '[object Function]') { + return !obj.name || obj.name === '' + ? '[Function]' + : '[Function: ' + obj.name + ']'; + } else if (type === '[object Array]') { + return '[ Array(' + obj.length + ') ]'; + } else if (type === '[object Object]') { + var keys = Object.keys(obj) + , kstr = keys.length > 2 + ? keys.splice(0, 2).join(', ') + ', ...' + : keys.join(', '); + return '{ Object (' + kstr + ') }'; + } else { + return str; + } + } else { + return str; + } +}; + +},{"../config":4,"./inspect":23}],27:[function(require,module,exports){ +/*! + * Chai - overwriteChainableMethod utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +var chai = require('../../chai'); +var transferFlags = require('./transferFlags'); + +/** + * ### .overwriteChainableMethod(ctx, name, method, chainingBehavior) + * + * Overwites an already existing chainable method + * and provides access to the previous function or + * property. Must return functions to be used for + * name. + * + * utils.overwriteChainableMethod(chai.Assertion.prototype, 'lengthOf', + * function (_super) { + * } + * , function (_super) { + * } + * ); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.overwriteChainableMethod('foo', fn, fn); + * + * Then can be used as any other assertion. + * + * expect(myFoo).to.have.lengthOf(3); + * expect(myFoo).to.have.lengthOf.above(3); + * + * @param {Object} ctx object whose method / property is to be overwritten + * @param {String} name of method / property to overwrite + * @param {Function} method function that returns a function to be used for name + * @param {Function} chainingBehavior function that returns a function to be used for property + * @namespace Utils + * @name overwriteChainableMethod + * @api public + */ + +module.exports = function overwriteChainableMethod(ctx, name, method, chainingBehavior) { + var chainableBehavior = ctx.__methods[name]; + + var _chainingBehavior = chainableBehavior.chainingBehavior; + chainableBehavior.chainingBehavior = function overwritingChainableMethodGetter() { + var result = chainingBehavior(_chainingBehavior).call(this); + if (result !== undefined) { + return result; + } + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + }; + + var _method = chainableBehavior.method; + chainableBehavior.method = function overwritingChainableMethodWrapper() { + var result = method(_method).apply(this, arguments); + if (result !== undefined) { + return result; + } + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + }; +}; + +},{"../../chai":2,"./transferFlags":32}],28:[function(require,module,exports){ +/*! + * Chai - overwriteMethod utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +var addLengthGuard = require('./addLengthGuard'); +var chai = require('../../chai'); +var flag = require('./flag'); +var proxify = require('./proxify'); +var transferFlags = require('./transferFlags'); + +/** + * ### .overwriteMethod(ctx, name, fn) + * + * Overwites an already existing method and provides + * access to previous function. Must return function + * to be used for name. + * + * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) { + * return function (str) { + * var obj = utils.flag(this, 'object'); + * if (obj instanceof Foo) { + * new chai.Assertion(obj.value).to.equal(str); + * } else { + * _super.apply(this, arguments); + * } + * } + * }); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.overwriteMethod('foo', fn); + * + * Then can be used as any other assertion. + * + * expect(myFoo).to.equal('bar'); + * + * @param {Object} ctx object whose method is to be overwritten + * @param {String} name of method to overwrite + * @param {Function} method function that returns a function to be used for name + * @namespace Utils + * @name overwriteMethod + * @api public + */ + +module.exports = function overwriteMethod(ctx, name, method) { + var _method = ctx[name] + , _super = function () { + throw new Error(name + ' is not a function'); + }; + + if (_method && 'function' === typeof _method) + _super = _method; + + var overwritingMethodWrapper = function () { + // Setting the `ssfi` flag to `overwritingMethodWrapper` causes this + // function to be the starting point for removing implementation frames from + // the stack trace of a failed assertion. + // + // However, we only want to use this function as the starting point if the + // `lockSsfi` flag isn't set. + // + // If the `lockSsfi` flag is set, then either this assertion has been + // overwritten by another assertion, or this assertion is being invoked from + // inside of another assertion. In the first case, the `ssfi` flag has + // already been set by the overwriting assertion. In the second case, the + // `ssfi` flag has already been set by the outer assertion. + if (!flag(this, 'lockSsfi')) { + flag(this, 'ssfi', overwritingMethodWrapper); + } + + // Setting the `lockSsfi` flag to `true` prevents the overwritten assertion + // from changing the `ssfi` flag. By this point, the `ssfi` flag is already + // set to the correct starting point for this assertion. + var origLockSsfi = flag(this, 'lockSsfi'); + flag(this, 'lockSsfi', true); + var result = method(_super).apply(this, arguments); + flag(this, 'lockSsfi', origLockSsfi); + + if (result !== undefined) { + return result; + } + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + } + + addLengthGuard(overwritingMethodWrapper, name, false); + ctx[name] = proxify(overwritingMethodWrapper, name); +}; + +},{"../../chai":2,"./addLengthGuard":10,"./flag":15,"./proxify":30,"./transferFlags":32}],29:[function(require,module,exports){ +/*! + * Chai - overwriteProperty utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +var chai = require('../../chai'); +var flag = require('./flag'); +var isProxyEnabled = require('./isProxyEnabled'); +var transferFlags = require('./transferFlags'); + +/** + * ### .overwriteProperty(ctx, name, fn) + * + * Overwites an already existing property getter and provides + * access to previous value. Must return function to use as getter. + * + * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) { + * return function () { + * var obj = utils.flag(this, 'object'); + * if (obj instanceof Foo) { + * new chai.Assertion(obj.name).to.equal('bar'); + * } else { + * _super.call(this); + * } + * } + * }); + * + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.overwriteProperty('foo', fn); + * + * Then can be used as any other assertion. + * + * expect(myFoo).to.be.ok; + * + * @param {Object} ctx object whose property is to be overwritten + * @param {String} name of property to overwrite + * @param {Function} getter function that returns a getter function to be used for name + * @namespace Utils + * @name overwriteProperty + * @api public + */ + +module.exports = function overwriteProperty(ctx, name, getter) { + var _get = Object.getOwnPropertyDescriptor(ctx, name) + , _super = function () {}; + + if (_get && 'function' === typeof _get.get) + _super = _get.get + + Object.defineProperty(ctx, name, + { get: function overwritingPropertyGetter() { + // Setting the `ssfi` flag to `overwritingPropertyGetter` causes this + // function to be the starting point for removing implementation frames + // from the stack trace of a failed assertion. + // + // However, we only want to use this function as the starting point if + // the `lockSsfi` flag isn't set and proxy protection is disabled. + // + // If the `lockSsfi` flag is set, then either this assertion has been + // overwritten by another assertion, or this assertion is being invoked + // from inside of another assertion. In the first case, the `ssfi` flag + // has already been set by the overwriting assertion. In the second + // case, the `ssfi` flag has already been set by the outer assertion. + // + // If proxy protection is enabled, then the `ssfi` flag has already been + // set by the proxy getter. + if (!isProxyEnabled() && !flag(this, 'lockSsfi')) { + flag(this, 'ssfi', overwritingPropertyGetter); + } + + // Setting the `lockSsfi` flag to `true` prevents the overwritten + // assertion from changing the `ssfi` flag. By this point, the `ssfi` + // flag is already set to the correct starting point for this assertion. + var origLockSsfi = flag(this, 'lockSsfi'); + flag(this, 'lockSsfi', true); + var result = getter(_super).call(this); + flag(this, 'lockSsfi', origLockSsfi); + + if (result !== undefined) { + return result; + } + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + } + , configurable: true + }); +}; + +},{"../../chai":2,"./flag":15,"./isProxyEnabled":25,"./transferFlags":32}],30:[function(require,module,exports){ +var config = require('../config'); +var flag = require('./flag'); +var getProperties = require('./getProperties'); +var isProxyEnabled = require('./isProxyEnabled'); + +/*! + * Chai - proxify utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .proxify(object) + * + * Return a proxy of given object that throws an error when a non-existent + * property is read. By default, the root cause is assumed to be a misspelled + * property, and thus an attempt is made to offer a reasonable suggestion from + * the list of existing properties. However, if a nonChainableMethodName is + * provided, then the root cause is instead a failure to invoke a non-chainable + * method prior to reading the non-existent property. + * + * If proxies are unsupported or disabled via the user's Chai config, then + * return object without modification. + * + * @param {Object} obj + * @param {String} nonChainableMethodName + * @namespace Utils + * @name proxify + */ + +var builtins = ['__flags', '__methods', '_obj', 'assert']; + +module.exports = function proxify(obj, nonChainableMethodName) { + if (!isProxyEnabled()) return obj; + + return new Proxy(obj, { + get: function proxyGetter(target, property) { + // This check is here because we should not throw errors on Symbol properties + // such as `Symbol.toStringTag`. + // The values for which an error should be thrown can be configured using + // the `config.proxyExcludedKeys` setting. + if (typeof property === 'string' && + config.proxyExcludedKeys.indexOf(property) === -1 && + !Reflect.has(target, property)) { + // Special message for invalid property access of non-chainable methods. + if (nonChainableMethodName) { + throw Error('Invalid Chai property: ' + nonChainableMethodName + '.' + + property + '. See docs for proper usage of "' + + nonChainableMethodName + '".'); + } + + var orderedProperties = getProperties(target).filter(function(property) { + return !Object.prototype.hasOwnProperty(property) && + builtins.indexOf(property) === -1; + }).sort(function(a, b) { + return stringDistance(property, a) - stringDistance(property, b); + }); + + if (orderedProperties.length && + stringDistance(orderedProperties[0], property) < 4) { + // If the property is reasonably close to an existing Chai property, + // suggest that property to the user. + throw Error('Invalid Chai property: ' + property + + '. Did you mean "' + orderedProperties[0] + '"?'); + } else { + throw Error('Invalid Chai property: ' + property); + } + } + + // Use this proxy getter as the starting point for removing implementation + // frames from the stack trace of a failed assertion. For property + // assertions, this prevents the proxy getter from showing up in the stack + // trace since it's invoked before the property getter. For method and + // chainable method assertions, this flag will end up getting changed to + // the method wrapper, which is good since this frame will no longer be in + // the stack once the method is invoked. Note that Chai builtin assertion + // properties such as `__flags` are skipped since this is only meant to + // capture the starting point of an assertion. This step is also skipped + // if the `lockSsfi` flag is set, thus indicating that this assertion is + // being called from within another assertion. In that case, the `ssfi` + // flag is already set to the outer assertion's starting point. + if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) { + flag(target, 'ssfi', proxyGetter); + } + + return Reflect.get(target, property); + } + }); +}; + +/** + * # stringDistance(strA, strB) + * Return the Levenshtein distance between two strings. + * @param {string} strA + * @param {string} strB + * @return {number} the string distance between strA and strB + * @api private + */ + +function stringDistance(strA, strB, memo) { + if (!memo) { + // `memo` is a two-dimensional array containing a cache of distances + // memo[i][j] is the distance between strA.slice(0, i) and + // strB.slice(0, j). + memo = []; + for (var i = 0; i <= strA.length; i++) { + memo[i] = []; + } + } + + if (!memo[strA.length] || !memo[strA.length][strB.length]) { + if (strA.length === 0 || strB.length === 0) { + memo[strA.length][strB.length] = Math.max(strA.length, strB.length); + } else { + memo[strA.length][strB.length] = Math.min( + stringDistance(strA.slice(0, -1), strB, memo) + 1, + stringDistance(strA, strB.slice(0, -1), memo) + 1, + stringDistance(strA.slice(0, -1), strB.slice(0, -1), memo) + + (strA.slice(-1) === strB.slice(-1) ? 0 : 1) + ); + } + } + + return memo[strA.length][strB.length]; +} + +},{"../config":4,"./flag":15,"./getProperties":21,"./isProxyEnabled":25}],31:[function(require,module,exports){ +/*! + * Chai - test utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var flag = require('./flag'); + +/** + * ### .test(object, expression) + * + * Test and object for expression. + * + * @param {Object} object (constructed Assertion) + * @param {Arguments} chai.Assertion.prototype.assert arguments + * @namespace Utils + * @name test + */ + +module.exports = function test(obj, args) { + var negate = flag(obj, 'negate') + , expr = args[0]; + return negate ? !expr : expr; +}; + +},{"./flag":15}],32:[function(require,module,exports){ +/*! + * Chai - transferFlags utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .transferFlags(assertion, object, includeAll = true) + * + * Transfer all the flags for `assertion` to `object`. If + * `includeAll` is set to `false`, then the base Chai + * assertion flags (namely `object`, `ssfi`, `lockSsfi`, + * and `message`) will not be transferred. + * + * + * var newAssertion = new Assertion(); + * utils.transferFlags(assertion, newAssertion); + * + * var anotherAsseriton = new Assertion(myObj); + * utils.transferFlags(assertion, anotherAssertion, false); + * + * @param {Assertion} assertion the assertion to transfer the flags from + * @param {Object} object the object to transfer the flags to; usually a new assertion + * @param {Boolean} includeAll + * @namespace Utils + * @name transferFlags + * @api private + */ + +module.exports = function transferFlags(assertion, object, includeAll) { + var flags = assertion.__flags || (assertion.__flags = Object.create(null)); + + if (!object.__flags) { + object.__flags = Object.create(null); + } + + includeAll = arguments.length === 3 ? includeAll : true; + + for (var flag in flags) { + if (includeAll || + (flag !== 'object' && flag !== 'ssfi' && flag !== 'lockSsfi' && flag != 'message')) { + object.__flags[flag] = flags[flag]; + } + } +}; + +},{}],33:[function(require,module,exports){ +/*! + * assertion-error + * Copyright(c) 2013 Jake Luer + * MIT Licensed + */ + +/*! + * Return a function that will copy properties from + * one object to another excluding any originally + * listed. Returned function will create a new `{}`. + * + * @param {String} excluded properties ... + * @return {Function} + */ + +function exclude () { + var excludes = [].slice.call(arguments); + + function excludeProps (res, obj) { + Object.keys(obj).forEach(function (key) { + if (!~excludes.indexOf(key)) res[key] = obj[key]; + }); + } + + return function extendExclude () { + var args = [].slice.call(arguments) + , i = 0 + , res = {}; + + for (; i < args.length; i++) { + excludeProps(res, args[i]); + } + + return res; + }; +}; + +/*! + * Primary Exports + */ + +module.exports = AssertionError; + +/** + * ### AssertionError + * + * An extension of the JavaScript `Error` constructor for + * assertion and validation scenarios. + * + * @param {String} message + * @param {Object} properties to include (optional) + * @param {callee} start stack function (optional) + */ + +function AssertionError (message, _props, ssf) { + var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON') + , props = extend(_props || {}); + + // default values + this.message = message || 'Unspecified AssertionError'; + this.showDiff = false; + + // copy from properties + for (var key in props) { + this[key] = props[key]; + } + + // capture stack trace + ssf = ssf || arguments.callee; + if (ssf && Error.captureStackTrace) { + Error.captureStackTrace(this, ssf); + } else { + try { + throw new Error(); + } catch(e) { + this.stack = e.stack; + } + } +} + +/*! + * Inherit from Error.prototype + */ + +AssertionError.prototype = Object.create(Error.prototype); + +/*! + * Statically set name + */ + +AssertionError.prototype.name = 'AssertionError'; + +/*! + * Ensure correct constructor + */ + +AssertionError.prototype.constructor = AssertionError; + +/** + * Allow errors to be converted to JSON for static transfer. + * + * @param {Boolean} include stack (default: `true`) + * @return {Object} object that can be `JSON.stringify` + */ + +AssertionError.prototype.toJSON = function (stack) { + var extend = exclude('constructor', 'toJSON', 'stack') + , props = extend({ name: this.name }, this); + + // include stack if exists and not turned off + if (false !== stack && this.stack) { + props.stack = this.stack; + } + + return props; +}; + +},{}],34:[function(require,module,exports){ +'use strict'; + +/* ! + * Chai - checkError utility + * Copyright(c) 2012-2016 Jake Luer + * MIT Licensed + */ + +/** + * ### .checkError + * + * Checks that an error conforms to a given set of criteria and/or retrieves information about it. + * + * @api public + */ + +/** + * ### .compatibleInstance(thrown, errorLike) + * + * Checks if two instances are compatible (strict equal). + * Returns false if errorLike is not an instance of Error, because instances + * can only be compatible if they're both error instances. + * + * @name compatibleInstance + * @param {Error} thrown error + * @param {Error|ErrorConstructor} errorLike object to compare against + * @namespace Utils + * @api public + */ + +function compatibleInstance(thrown, errorLike) { + return errorLike instanceof Error && thrown === errorLike; +} + +/** + * ### .compatibleConstructor(thrown, errorLike) + * + * Checks if two constructors are compatible. + * This function can receive either an error constructor or + * an error instance as the `errorLike` argument. + * Constructors are compatible if they're the same or if one is + * an instance of another. + * + * @name compatibleConstructor + * @param {Error} thrown error + * @param {Error|ErrorConstructor} errorLike object to compare against + * @namespace Utils + * @api public + */ + +function compatibleConstructor(thrown, errorLike) { + if (errorLike instanceof Error) { + // If `errorLike` is an instance of any error we compare their constructors + return thrown.constructor === errorLike.constructor || thrown instanceof errorLike.constructor; + } else if (errorLike.prototype instanceof Error || errorLike === Error) { + // If `errorLike` is a constructor that inherits from Error, we compare `thrown` to `errorLike` directly + return thrown.constructor === errorLike || thrown instanceof errorLike; + } + + return false; +} + +/** + * ### .compatibleMessage(thrown, errMatcher) + * + * Checks if an error's message is compatible with a matcher (String or RegExp). + * If the message contains the String or passes the RegExp test, + * it is considered compatible. + * + * @name compatibleMessage + * @param {Error} thrown error + * @param {String|RegExp} errMatcher to look for into the message + * @namespace Utils + * @api public + */ + +function compatibleMessage(thrown, errMatcher) { + var comparisonString = typeof thrown === 'string' ? thrown : thrown.message; + if (errMatcher instanceof RegExp) { + return errMatcher.test(comparisonString); + } else if (typeof errMatcher === 'string') { + return comparisonString.indexOf(errMatcher) !== -1; // eslint-disable-line no-magic-numbers + } + + return false; +} + +/** + * ### .getFunctionName(constructorFn) + * + * Returns the name of a function. + * This also includes a polyfill function if `constructorFn.name` is not defined. + * + * @name getFunctionName + * @param {Function} constructorFn + * @namespace Utils + * @api private + */ + +var functionNameMatch = /\s*function(?:\s|\s*\/\*[^(?:*\/)]+\*\/\s*)*([^\(\/]+)/; +function getFunctionName(constructorFn) { + var name = ''; + if (typeof constructorFn.name === 'undefined') { + // Here we run a polyfill if constructorFn.name is not defined + var match = String(constructorFn).match(functionNameMatch); + if (match) { + name = match[1]; + } + } else { + name = constructorFn.name; + } + + return name; +} + +/** + * ### .getConstructorName(errorLike) + * + * Gets the constructor name for an Error instance or constructor itself. + * + * @name getConstructorName + * @param {Error|ErrorConstructor} errorLike + * @namespace Utils + * @api public + */ + +function getConstructorName(errorLike) { + var constructorName = errorLike; + if (errorLike instanceof Error) { + constructorName = getFunctionName(errorLike.constructor); + } else if (typeof errorLike === 'function') { + // If `err` is not an instance of Error it is an error constructor itself or another function. + // If we've got a common function we get its name, otherwise we may need to create a new instance + // of the error just in case it's a poorly-constructed error. Please see chaijs/chai/issues/45 to know more. + constructorName = getFunctionName(errorLike).trim() || + getFunctionName(new errorLike()); // eslint-disable-line new-cap + } + + return constructorName; +} + +/** + * ### .getMessage(errorLike) + * + * Gets the error message from an error. + * If `err` is a String itself, we return it. + * If the error has no message, we return an empty string. + * + * @name getMessage + * @param {Error|String} errorLike + * @namespace Utils + * @api public + */ + +function getMessage(errorLike) { + var msg = ''; + if (errorLike && errorLike.message) { + msg = errorLike.message; + } else if (typeof errorLike === 'string') { + msg = errorLike; + } + + return msg; +} + +module.exports = { + compatibleInstance: compatibleInstance, + compatibleConstructor: compatibleConstructor, + compatibleMessage: compatibleMessage, + getMessage: getMessage, + getConstructorName: getConstructorName, +}; + +},{}],35:[function(require,module,exports){ +'use strict'; +/* globals Symbol: true, Uint8Array: true, WeakMap: true */ +/*! + * deep-eql + * Copyright(c) 2013 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependencies + */ + +var type = require('type-detect'); +function FakeMap() { + this.clear(); +} +FakeMap.prototype = { + clear: function clearMap() { + this.keys = []; + this.values = []; + return this; + }, + set: function setMap(key, value) { + var index = this.keys.indexOf(key); + if (index >= 0) { + this.values[index] = value; + } else { + this.keys.push(key); + this.values.push(value); + } + return this; + }, + get: function getMap(key) { + return this.values[this.keys.indexOf(key)]; + }, + delete: function deleteMap(key) { + var index = this.keys.indexOf(key); + if (index >= 0) { + this.values = this.values.slice(0, index).concat(this.values.slice(index + 1)); + this.keys = this.keys.slice(0, index).concat(this.keys.slice(index + 1)); + } + return this; + }, +}; + +var MemoizeMap = null; +if (typeof WeakMap === 'function') { + MemoizeMap = WeakMap; +} else { + MemoizeMap = FakeMap; +} + +/*! + * Check to see if the MemoizeMap has recorded a result of the two operands + * + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @param {MemoizeMap} memoizeMap + * @returns {Boolean|null} result +*/ +function memoizeCompare(leftHandOperand, rightHandOperand, memoizeMap) { + // Technically, WeakMap keys can *only* be objects, not primitives. + if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) { + return null; + } + var leftHandMap = memoizeMap.get(leftHandOperand); + if (leftHandMap) { + var result = leftHandMap.get(rightHandOperand); + if (typeof result === 'boolean') { + return result; + } + } + return null; +} + +/*! + * Set the result of the equality into the MemoizeMap + * + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @param {MemoizeMap} memoizeMap + * @param {Boolean} result +*/ +function memoizeSet(leftHandOperand, rightHandOperand, memoizeMap, result) { + // Technically, WeakMap keys can *only* be objects, not primitives. + if (!memoizeMap || isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) { + return; + } + var leftHandMap = memoizeMap.get(leftHandOperand); + if (leftHandMap) { + leftHandMap.set(rightHandOperand, result); + } else { + leftHandMap = new MemoizeMap(); + leftHandMap.set(rightHandOperand, result); + memoizeMap.set(leftHandOperand, leftHandMap); + } +} + +/*! + * Primary Export + */ + +module.exports = deepEqual; +module.exports.MemoizeMap = MemoizeMap; + +/** + * Assert deeply nested sameValue equality between two objects of any type. + * + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @param {Object} [options] (optional) Additional options + * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality. + * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of + complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular + references to blow the stack. + * @return {Boolean} equal match + */ +function deepEqual(leftHandOperand, rightHandOperand, options) { + // If we have a comparator, we can't assume anything; so bail to its check first. + if (options && options.comparator) { + return extensiveDeepEqual(leftHandOperand, rightHandOperand, options); + } + + var simpleResult = simpleEqual(leftHandOperand, rightHandOperand); + if (simpleResult !== null) { + return simpleResult; + } + + // Deeper comparisons are pushed through to a larger function + return extensiveDeepEqual(leftHandOperand, rightHandOperand, options); +} + +/** + * Many comparisons can be canceled out early via simple equality or primitive checks. + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @return {Boolean|null} equal match + */ +function simpleEqual(leftHandOperand, rightHandOperand) { + // Equal references (except for Numbers) can be returned early + if (leftHandOperand === rightHandOperand) { + // Handle +-0 cases + return leftHandOperand !== 0 || 1 / leftHandOperand === 1 / rightHandOperand; + } + + // handle NaN cases + if ( + leftHandOperand !== leftHandOperand && // eslint-disable-line no-self-compare + rightHandOperand !== rightHandOperand // eslint-disable-line no-self-compare + ) { + return true; + } + + // Anything that is not an 'object', i.e. symbols, functions, booleans, numbers, + // strings, and undefined, can be compared by reference. + if (isPrimitive(leftHandOperand) || isPrimitive(rightHandOperand)) { + // Easy out b/c it would have passed the first equality check + return false; + } + return null; +} + +/*! + * The main logic of the `deepEqual` function. + * + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @param {Object} [options] (optional) Additional options + * @param {Array} [options.comparator] (optional) Override default algorithm, determining custom equality. + * @param {Array} [options.memoize] (optional) Provide a custom memoization object which will cache the results of + complex objects for a speed boost. By passing `false` you can disable memoization, but this will cause circular + references to blow the stack. + * @return {Boolean} equal match +*/ +function extensiveDeepEqual(leftHandOperand, rightHandOperand, options) { + options = options || {}; + options.memoize = options.memoize === false ? false : options.memoize || new MemoizeMap(); + var comparator = options && options.comparator; + + // Check if a memoized result exists. + var memoizeResultLeft = memoizeCompare(leftHandOperand, rightHandOperand, options.memoize); + if (memoizeResultLeft !== null) { + return memoizeResultLeft; + } + var memoizeResultRight = memoizeCompare(rightHandOperand, leftHandOperand, options.memoize); + if (memoizeResultRight !== null) { + return memoizeResultRight; + } + + // If a comparator is present, use it. + if (comparator) { + var comparatorResult = comparator(leftHandOperand, rightHandOperand); + // Comparators may return null, in which case we want to go back to default behavior. + if (comparatorResult === false || comparatorResult === true) { + memoizeSet(leftHandOperand, rightHandOperand, options.memoize, comparatorResult); + return comparatorResult; + } + // To allow comparators to override *any* behavior, we ran them first. Since it didn't decide + // what to do, we need to make sure to return the basic tests first before we move on. + var simpleResult = simpleEqual(leftHandOperand, rightHandOperand); + if (simpleResult !== null) { + // Don't memoize this, it takes longer to set/retrieve than to just compare. + return simpleResult; + } + } + + var leftHandType = type(leftHandOperand); + if (leftHandType !== type(rightHandOperand)) { + memoizeSet(leftHandOperand, rightHandOperand, options.memoize, false); + return false; + } + + // Temporarily set the operands in the memoize object to prevent blowing the stack + memoizeSet(leftHandOperand, rightHandOperand, options.memoize, true); + + var result = extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options); + memoizeSet(leftHandOperand, rightHandOperand, options.memoize, result); + return result; +} + +function extensiveDeepEqualByType(leftHandOperand, rightHandOperand, leftHandType, options) { + switch (leftHandType) { + case 'String': + case 'Number': + case 'Boolean': + case 'Date': + // If these types are their instance types (e.g. `new Number`) then re-deepEqual against their values + return deepEqual(leftHandOperand.valueOf(), rightHandOperand.valueOf()); + case 'Promise': + case 'Symbol': + case 'function': + case 'WeakMap': + case 'WeakSet': + case 'Error': + return leftHandOperand === rightHandOperand; + case 'Arguments': + case 'Int8Array': + case 'Uint8Array': + case 'Uint8ClampedArray': + case 'Int16Array': + case 'Uint16Array': + case 'Int32Array': + case 'Uint32Array': + case 'Float32Array': + case 'Float64Array': + case 'Array': + return iterableEqual(leftHandOperand, rightHandOperand, options); + case 'RegExp': + return regexpEqual(leftHandOperand, rightHandOperand); + case 'Generator': + return generatorEqual(leftHandOperand, rightHandOperand, options); + case 'DataView': + return iterableEqual(new Uint8Array(leftHandOperand.buffer), new Uint8Array(rightHandOperand.buffer), options); + case 'ArrayBuffer': + return iterableEqual(new Uint8Array(leftHandOperand), new Uint8Array(rightHandOperand), options); + case 'Set': + return entriesEqual(leftHandOperand, rightHandOperand, options); + case 'Map': + return entriesEqual(leftHandOperand, rightHandOperand, options); + default: + return objectEqual(leftHandOperand, rightHandOperand, options); + } +} + +/*! + * Compare two Regular Expressions for equality. + * + * @param {RegExp} leftHandOperand + * @param {RegExp} rightHandOperand + * @return {Boolean} result + */ + +function regexpEqual(leftHandOperand, rightHandOperand) { + return leftHandOperand.toString() === rightHandOperand.toString(); +} + +/*! + * Compare two Sets/Maps for equality. Faster than other equality functions. + * + * @param {Set} leftHandOperand + * @param {Set} rightHandOperand + * @param {Object} [options] (Optional) + * @return {Boolean} result + */ + +function entriesEqual(leftHandOperand, rightHandOperand, options) { + // IE11 doesn't support Set#entries or Set#@@iterator, so we need manually populate using Set#forEach + if (leftHandOperand.size !== rightHandOperand.size) { + return false; + } + if (leftHandOperand.size === 0) { + return true; + } + var leftHandItems = []; + var rightHandItems = []; + leftHandOperand.forEach(function gatherEntries(key, value) { + leftHandItems.push([ key, value ]); + }); + rightHandOperand.forEach(function gatherEntries(key, value) { + rightHandItems.push([ key, value ]); + }); + return iterableEqual(leftHandItems.sort(), rightHandItems.sort(), options); +} + +/*! + * Simple equality for flat iterable objects such as Arrays, TypedArrays or Node.js buffers. + * + * @param {Iterable} leftHandOperand + * @param {Iterable} rightHandOperand + * @param {Object} [options] (Optional) + * @return {Boolean} result + */ + +function iterableEqual(leftHandOperand, rightHandOperand, options) { + var length = leftHandOperand.length; + if (length !== rightHandOperand.length) { + return false; + } + if (length === 0) { + return true; + } + var index = -1; + while (++index < length) { + if (deepEqual(leftHandOperand[index], rightHandOperand[index], options) === false) { + return false; + } + } + return true; +} + +/*! + * Simple equality for generator objects such as those returned by generator functions. + * + * @param {Iterable} leftHandOperand + * @param {Iterable} rightHandOperand + * @param {Object} [options] (Optional) + * @return {Boolean} result + */ + +function generatorEqual(leftHandOperand, rightHandOperand, options) { + return iterableEqual(getGeneratorEntries(leftHandOperand), getGeneratorEntries(rightHandOperand), options); +} + +/*! + * Determine if the given object has an @@iterator function. + * + * @param {Object} target + * @return {Boolean} `true` if the object has an @@iterator function. + */ +function hasIteratorFunction(target) { + return typeof Symbol !== 'undefined' && + typeof target === 'object' && + typeof Symbol.iterator !== 'undefined' && + typeof target[Symbol.iterator] === 'function'; +} + +/*! + * Gets all iterator entries from the given Object. If the Object has no @@iterator function, returns an empty array. + * This will consume the iterator - which could have side effects depending on the @@iterator implementation. + * + * @param {Object} target + * @returns {Array} an array of entries from the @@iterator function + */ +function getIteratorEntries(target) { + if (hasIteratorFunction(target)) { + try { + return getGeneratorEntries(target[Symbol.iterator]()); + } catch (iteratorError) { + return []; + } + } + return []; +} + +/*! + * Gets all entries from a Generator. This will consume the generator - which could have side effects. + * + * @param {Generator} target + * @returns {Array} an array of entries from the Generator. + */ +function getGeneratorEntries(generator) { + var generatorResult = generator.next(); + var accumulator = [ generatorResult.value ]; + while (generatorResult.done === false) { + generatorResult = generator.next(); + accumulator.push(generatorResult.value); + } + return accumulator; +} + +/*! + * Gets all own and inherited enumerable keys from a target. + * + * @param {Object} target + * @returns {Array} an array of own and inherited enumerable keys from the target. + */ +function getEnumerableKeys(target) { + var keys = []; + for (var key in target) { + keys.push(key); + } + return keys; +} + +/*! + * Determines if two objects have matching values, given a set of keys. Defers to deepEqual for the equality check of + * each key. If any value of the given key is not equal, the function will return false (early). + * + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @param {Array} keys An array of keys to compare the values of leftHandOperand and rightHandOperand against + * @param {Object} [options] (Optional) + * @return {Boolean} result + */ +function keysEqual(leftHandOperand, rightHandOperand, keys, options) { + var length = keys.length; + if (length === 0) { + return true; + } + for (var i = 0; i < length; i += 1) { + if (deepEqual(leftHandOperand[keys[i]], rightHandOperand[keys[i]], options) === false) { + return false; + } + } + return true; +} + +/*! + * Recursively check the equality of two Objects. Once basic sameness has been established it will defer to `deepEqual` + * for each enumerable key in the object. + * + * @param {Mixed} leftHandOperand + * @param {Mixed} rightHandOperand + * @param {Object} [options] (Optional) + * @return {Boolean} result + */ + +function objectEqual(leftHandOperand, rightHandOperand, options) { + var leftHandKeys = getEnumerableKeys(leftHandOperand); + var rightHandKeys = getEnumerableKeys(rightHandOperand); + if (leftHandKeys.length && leftHandKeys.length === rightHandKeys.length) { + leftHandKeys.sort(); + rightHandKeys.sort(); + if (iterableEqual(leftHandKeys, rightHandKeys) === false) { + return false; + } + return keysEqual(leftHandOperand, rightHandOperand, leftHandKeys, options); + } + + var leftHandEntries = getIteratorEntries(leftHandOperand); + var rightHandEntries = getIteratorEntries(rightHandOperand); + if (leftHandEntries.length && leftHandEntries.length === rightHandEntries.length) { + leftHandEntries.sort(); + rightHandEntries.sort(); + return iterableEqual(leftHandEntries, rightHandEntries, options); + } + + if (leftHandKeys.length === 0 && + leftHandEntries.length === 0 && + rightHandKeys.length === 0 && + rightHandEntries.length === 0) { + return true; + } + + return false; +} + +/*! + * Returns true if the argument is a primitive. + * + * This intentionally returns true for all objects that can be compared by reference, + * including functions and symbols. + * + * @param {Mixed} value + * @return {Boolean} result + */ +function isPrimitive(value) { + return value === null || typeof value !== 'object'; +} + +},{"type-detect":36}],36:[function(require,module,exports){ +'use strict'; +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var getPrototypeOfExists = typeof Object.getPrototypeOf === 'function'; +var promiseExists = typeof Promise === 'function'; +var globalObject = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : self; // eslint-disable-line +var isDom = 'location' in globalObject && 'document' in globalObject; +var htmlElementExists = typeof HTMLElement !== 'undefined'; +var isArrayExists = typeof Array.isArray === 'function'; +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = getPrototypeOfExists && setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = getPrototypeOfExists && mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +module.exports = function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if (isArrayExists && Array.isArray(obj)) { + return 'Array'; + } + + if (isDom) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (obj === globalObject.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (obj === globalObject.document) { + return 'Document'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (obj === (globalObject.navigator || {}).mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (obj === (globalObject.navigator || {}).plugins) { + return 'PluginArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + if (getPrototypeOfExists) { + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +}; + +module.exports.typeDetect = module.exports; + +},{}],37:[function(require,module,exports){ +'use strict'; + +/* ! + * Chai - getFuncName utility + * Copyright(c) 2012-2016 Jake Luer + * MIT Licensed + */ + +/** + * ### .getFuncName(constructorFn) + * + * Returns the name of a function. + * When a non-function instance is passed, returns `null`. + * This also includes a polyfill function if `aFunc.name` is not defined. + * + * @name getFuncName + * @param {Function} funct + * @namespace Utils + * @api public + */ + +var toString = Function.prototype.toString; +var functionNameMatch = /\s*function(?:\s|\s*\/\*[^(?:*\/)]+\*\/\s*)*([^\s\(\/]+)/; +function getFuncName(aFunc) { + if (typeof aFunc !== 'function') { + return null; + } + + var name = ''; + if (typeof Function.prototype.name === 'undefined' && typeof aFunc.name === 'undefined') { + // Here we run a polyfill if Function does not support the `name` property and if aFunc.name is not defined + var match = toString.call(aFunc).match(functionNameMatch); + if (match) { + name = match[1]; + } + } else { + // If we've got a `name` property we just use it + name = aFunc.name; + } + + return name; +} + +module.exports = getFuncName; + +},{}],38:[function(require,module,exports){ +'use strict'; + +/* ! + * Chai - pathval utility + * Copyright(c) 2012-2014 Jake Luer + * @see https://github.com/logicalparadox/filtr + * MIT Licensed + */ + +/** + * ### .hasProperty(object, name) + * + * This allows checking whether an object has own + * or inherited from prototype chain named property. + * + * Basically does the same thing as the `in` + * operator but works properly with null/undefined values + * and other primitives. + * + * var obj = { + * arr: ['a', 'b', 'c'] + * , str: 'Hello' + * } + * + * The following would be the results. + * + * hasProperty(obj, 'str'); // true + * hasProperty(obj, 'constructor'); // true + * hasProperty(obj, 'bar'); // false + * + * hasProperty(obj.str, 'length'); // true + * hasProperty(obj.str, 1); // true + * hasProperty(obj.str, 5); // false + * + * hasProperty(obj.arr, 'length'); // true + * hasProperty(obj.arr, 2); // true + * hasProperty(obj.arr, 3); // false + * + * @param {Object} object + * @param {String|Symbol} name + * @returns {Boolean} whether it exists + * @namespace Utils + * @name hasProperty + * @api public + */ + +function hasProperty(obj, name) { + if (typeof obj === 'undefined' || obj === null) { + return false; + } + + // The `in` operator does not work with primitives. + return name in Object(obj); +} + +/* ! + * ## parsePath(path) + * + * Helper function used to parse string object + * paths. Use in conjunction with `internalGetPathValue`. + * + * var parsed = parsePath('myobject.property.subprop'); + * + * ### Paths: + * + * * Can be infinitely deep and nested. + * * Arrays are also valid using the formal `myobject.document[3].property`. + * * Literal dots and brackets (not delimiter) must be backslash-escaped. + * + * @param {String} path + * @returns {Object} parsed + * @api private + */ + +function parsePath(path) { + var str = path.replace(/([^\\])\[/g, '$1.['); + var parts = str.match(/(\\\.|[^.]+?)+/g); + return parts.map(function mapMatches(value) { + var regexp = /^\[(\d+)\]$/; + var mArr = regexp.exec(value); + var parsed = null; + if (mArr) { + parsed = { i: parseFloat(mArr[1]) }; + } else { + parsed = { p: value.replace(/\\([.\[\]])/g, '$1') }; + } + + return parsed; + }); +} + +/* ! + * ## internalGetPathValue(obj, parsed[, pathDepth]) + * + * Helper companion function for `.parsePath` that returns + * the value located at the parsed address. + * + * var value = getPathValue(obj, parsed); + * + * @param {Object} object to search against + * @param {Object} parsed definition from `parsePath`. + * @param {Number} depth (nesting level) of the property we want to retrieve + * @returns {Object|Undefined} value + * @api private + */ + +function internalGetPathValue(obj, parsed, pathDepth) { + var temporaryValue = obj; + var res = null; + pathDepth = (typeof pathDepth === 'undefined' ? parsed.length : pathDepth); + + for (var i = 0; i < pathDepth; i++) { + var part = parsed[i]; + if (temporaryValue) { + if (typeof part.p === 'undefined') { + temporaryValue = temporaryValue[part.i]; + } else { + temporaryValue = temporaryValue[part.p]; + } + + if (i === (pathDepth - 1)) { + res = temporaryValue; + } + } + } + + return res; +} + +/* ! + * ## internalSetPathValue(obj, value, parsed) + * + * Companion function for `parsePath` that sets + * the value located at a parsed address. + * + * internalSetPathValue(obj, 'value', parsed); + * + * @param {Object} object to search and define on + * @param {*} value to use upon set + * @param {Object} parsed definition from `parsePath` + * @api private + */ + +function internalSetPathValue(obj, val, parsed) { + var tempObj = obj; + var pathDepth = parsed.length; + var part = null; + // Here we iterate through every part of the path + for (var i = 0; i < pathDepth; i++) { + var propName = null; + var propVal = null; + part = parsed[i]; + + // If it's the last part of the path, we set the 'propName' value with the property name + if (i === (pathDepth - 1)) { + propName = typeof part.p === 'undefined' ? part.i : part.p; + // Now we set the property with the name held by 'propName' on object with the desired val + tempObj[propName] = val; + } else if (typeof part.p !== 'undefined' && tempObj[part.p]) { + tempObj = tempObj[part.p]; + } else if (typeof part.i !== 'undefined' && tempObj[part.i]) { + tempObj = tempObj[part.i]; + } else { + // If the obj doesn't have the property we create one with that name to define it + var next = parsed[i + 1]; + // Here we set the name of the property which will be defined + propName = typeof part.p === 'undefined' ? part.i : part.p; + // Here we decide if this property will be an array or a new object + propVal = typeof next.p === 'undefined' ? [] : {}; + tempObj[propName] = propVal; + tempObj = tempObj[propName]; + } + } +} + +/** + * ### .getPathInfo(object, path) + * + * This allows the retrieval of property info in an + * object given a string path. + * + * The path info consists of an object with the + * following properties: + * + * * parent - The parent object of the property referenced by `path` + * * name - The name of the final property, a number if it was an array indexer + * * value - The value of the property, if it exists, otherwise `undefined` + * * exists - Whether the property exists or not + * + * @param {Object} object + * @param {String} path + * @returns {Object} info + * @namespace Utils + * @name getPathInfo + * @api public + */ + +function getPathInfo(obj, path) { + var parsed = parsePath(path); + var last = parsed[parsed.length - 1]; + var info = { + parent: parsed.length > 1 ? internalGetPathValue(obj, parsed, parsed.length - 1) : obj, + name: last.p || last.i, + value: internalGetPathValue(obj, parsed), + }; + info.exists = hasProperty(info.parent, info.name); + + return info; +} + +/** + * ### .getPathValue(object, path) + * + * This allows the retrieval of values in an + * object given a string path. + * + * var obj = { + * prop1: { + * arr: ['a', 'b', 'c'] + * , str: 'Hello' + * } + * , prop2: { + * arr: [ { nested: 'Universe' } ] + * , str: 'Hello again!' + * } + * } + * + * The following would be the results. + * + * getPathValue(obj, 'prop1.str'); // Hello + * getPathValue(obj, 'prop1.att[2]'); // b + * getPathValue(obj, 'prop2.arr[0].nested'); // Universe + * + * @param {Object} object + * @param {String} path + * @returns {Object} value or `undefined` + * @namespace Utils + * @name getPathValue + * @api public + */ + +function getPathValue(obj, path) { + var info = getPathInfo(obj, path); + return info.value; +} + +/** + * ### .setPathValue(object, path, value) + * + * Define the value in an object at a given string path. + * + * ```js + * var obj = { + * prop1: { + * arr: ['a', 'b', 'c'] + * , str: 'Hello' + * } + * , prop2: { + * arr: [ { nested: 'Universe' } ] + * , str: 'Hello again!' + * } + * }; + * ``` + * + * The following would be acceptable. + * + * ```js + * var properties = require('tea-properties'); + * properties.set(obj, 'prop1.str', 'Hello Universe!'); + * properties.set(obj, 'prop1.arr[2]', 'B'); + * properties.set(obj, 'prop2.arr[0].nested.value', { hello: 'universe' }); + * ``` + * + * @param {Object} object + * @param {String} path + * @param {Mixed} value + * @api private + */ + +function setPathValue(obj, path, val) { + var parsed = parsePath(path); + internalSetPathValue(obj, val, parsed); + return obj; +} + +module.exports = { + hasProperty: hasProperty, + getPathInfo: getPathInfo, + getPathValue: getPathValue, + setPathValue: setPathValue, +}; + +},{}],39:[function(require,module,exports){ +'use strict'; + +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var promiseExists = typeof Promise === 'function'; +var globalObject = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : self; // eslint-disable-line +var isDom = 'location' in globalObject && 'document' in globalObject; +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof String.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +module.exports = function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if ( + Array.isArray(obj) && + (symbolToStringTagExists === false || !(Symbol.toStringTag in obj)) + ) { + return 'Array'; + } + + if (isDom) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (obj === globalObject.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (obj === globalObject.document) { + return 'Document'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (obj === (globalObject.navigator || {}).mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (obj === (globalObject.navigator || {}).plugins) { + return 'PluginArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (obj instanceof HTMLElement && obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj instanceof HTMLElement && obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (obj instanceof HTMLElement && obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +}; + +module.exports.typeDetect = module.exports; + +},{}]},{},[1])(1) +}); \ No newline at end of file diff --git a/.pnpm-store/v11/files/0a/77caa0bb3971985d84041e99f3ebd76e746061538254e84998a9e149a7fc35c0b27972b0558275af219e220ba93ad04e31b8f27918d4c18fb8dd84b8e00030 b/.pnpm-store/v11/files/0a/77caa0bb3971985d84041e99f3ebd76e746061538254e84998a9e149a7fc35c0b27972b0558275af219e220ba93ad04e31b8f27918d4c18fb8dd84b8e00030 new file mode 100644 index 00000000..01eba7b9 --- /dev/null +++ b/.pnpm-store/v11/files/0a/77caa0bb3971985d84041e99f3ebd76e746061538254e84998a9e149a7fc35c0b27972b0558275af219e220ba93ad04e31b8f27918d4c18fb8dd84b8e00030 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('over', require('../over')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0a/7a6a68edd8a22404347de5ad986b271ffc17f13ee767123b53e46486a543ef7fb5a8d1cf9b8c34f25b84cfaf321956054c4be99a393e6fe97b20fc41907e54 b/.pnpm-store/v11/files/0a/7a6a68edd8a22404347de5ad986b271ffc17f13ee767123b53e46486a543ef7fb5a8d1cf9b8c34f25b84cfaf321956054c4be99a393e6fe97b20fc41907e54 new file mode 100644 index 00000000..d9988138 --- /dev/null +++ b/.pnpm-store/v11/files/0a/7a6a68edd8a22404347de5ad986b271ffc17f13ee767123b53e46486a543ef7fb5a8d1cf9b8c34f25b84cfaf321956054c4be99a393e6fe97b20fc41907e54 @@ -0,0 +1,103 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const pragmatik = require('pragmatik'); +const _suman = global.__suman = (global.__suman || {}); +const rules = require("../helpers/handle-varargs"); +const suman_constants_1 = require("../config/suman-constants"); +const general_1 = require("../helpers/general"); +const general_2 = require("../helpers/general"); +const general_3 = require("../helpers/general"); +const acceptableOptions = { + '@DefineObjectOpts': true, + plan: true, + throws: true, + fatal: true, + __toBeSourcedForIOC: true, + retries: true, + cb: true, + timeout: true, + skip: true, + desc: true, + title: true, + events: true, + first: true, + last: true, + successEvent: true, + errorEvent: true, + successEvents: true, + errorEvents: true, + __preParsed: true +}; +const handleBadOptions = function (opts, typeName) { + Object.keys(opts).forEach(function (k) { + if (!acceptableOptions[k]) { + const url = `${suman_constants_1.constants.SUMAN_TYPES_ROOT_URL}/${typeName}.d.ts`; + throw new Error(`'${k}' is not a valid option property for a ${typeName} hook. See: ${url}`); + } + }); + if (opts.plan !== undefined && !Number.isInteger(opts.plan)) { + _suman.log.error(new Error('Suman usage error => "plan" option is not an integer.').stack); + process.exit(suman_constants_1.constants.EXIT_CODES.OPTS_PLAN_NOT_AN_INTEGER); + } +}; +exports.makeBefore = function (suman) { + return function before($$desc, $opts) { + const zuite = suman.ctx; + general_1.handleSetupComplete(zuite, before.name); + const isPreParsed = $opts && $opts.__preParsed; + const args = pragmatik.parse(arguments, rules.hookSignature, isPreParsed); + try { + delete $opts.__preParsed; + } + catch (err) { + } + const vetted = general_3.parseArgs(args); + const [desc, opts, fn] = vetted.args; + const arrayDeps = vetted.arrayDeps; + handleBadOptions(opts, before.name); + if (arrayDeps.length > 0) { + general_2.evalOptions(arrayDeps, opts); + } + if (opts.last && opts.first) { + throw new Error('Cannot use both "first" and "last" option for "after" hook.'); + } + if (opts.skip) { + suman.numHooksSkipped++; + } + else if (!fn) { + suman.numHooksStubbed++; + } + else { + let obj = { + last: Boolean(opts.last), + first: Boolean(opts.first), + ctx: zuite, + desc: desc || fn.name || '(unknown before-all-hook name)', + timeout: opts.timeoutVal || opts.timeout || 11000, + cb: opts.cb === true, + successEvents: opts.successEvents, + errorEvents: opts.errorEvents, + events: opts.events, + retries: opts.retries, + throws: opts.throws, + planCountExpected: opts.plan, + fatal: opts.fatal !== false, + fn: fn, + type: 'before/setup', + warningErr: new Error('SUMAN_TEMP_WARNING_ERROR') + }; + if (opts.first) { + zuite.getBeforesFirst().push(obj); + } + else if (opts.last) { + zuite.getBeforesLast().push(obj); + } + else { + zuite.getBefores().push(obj); + } + } + return zuite; + }; +}; diff --git a/.pnpm-store/v11/files/0a/b5d225ebd40b8690ad3a35d52cd8f14258cfb2b8018f324d0b6ae64d47453458cdd0c2dd46b5258f84ffef2561982753848ebacb769520609b57b9782185e5 b/.pnpm-store/v11/files/0a/b5d225ebd40b8690ad3a35d52cd8f14258cfb2b8018f324d0b6ae64d47453458cdd0c2dd46b5258f84ffef2561982753848ebacb769520609b57b9782185e5 new file mode 100644 index 00000000..a90ad029 --- /dev/null +++ b/.pnpm-store/v11/files/0a/b5d225ebd40b8690ad3a35d52cd8f14258cfb2b8018f324d0b6ae64d47453458cdd0c2dd46b5258f84ffef2561982753848ebacb769520609b57b9782185e5 @@ -0,0 +1,372 @@ +module.exports = rimraf +rimraf.sync = rimrafSync + +var assert = require("assert") +var path = require("path") +var fs = require("fs") +var glob = undefined +try { + glob = require("glob") +} catch (_err) { + // treat glob as optional. +} +var _0666 = parseInt('666', 8) + +var defaultGlobOpts = { + nosort: true, + silent: true +} + +// for EMFILE handling +var timeout = 0 + +var isWindows = (process.platform === "win32") + +function defaults (options) { + var methods = [ + 'unlink', + 'chmod', + 'stat', + 'lstat', + 'rmdir', + 'readdir' + ] + methods.forEach(function(m) { + options[m] = options[m] || fs[m] + m = m + 'Sync' + options[m] = options[m] || fs[m] + }) + + options.maxBusyTries = options.maxBusyTries || 3 + options.emfileWait = options.emfileWait || 1000 + if (options.glob === false) { + options.disableGlob = true + } + if (options.disableGlob !== true && glob === undefined) { + throw Error('glob dependency not found, set `options.disableGlob = true` if intentional') + } + options.disableGlob = options.disableGlob || false + options.glob = options.glob || defaultGlobOpts +} + +function rimraf (p, options, cb) { + if (typeof options === 'function') { + cb = options + options = {} + } + + assert(p, 'rimraf: missing path') + assert.equal(typeof p, 'string', 'rimraf: path should be a string') + assert.equal(typeof cb, 'function', 'rimraf: callback function required') + assert(options, 'rimraf: invalid options argument provided') + assert.equal(typeof options, 'object', 'rimraf: options should be object') + + defaults(options) + + var busyTries = 0 + var errState = null + var n = 0 + + if (options.disableGlob || !glob.hasMagic(p)) + return afterGlob(null, [p]) + + options.lstat(p, function (er, stat) { + if (!er) + return afterGlob(null, [p]) + + glob(p, options.glob, afterGlob) + }) + + function next (er) { + errState = errState || er + if (--n === 0) + cb(errState) + } + + function afterGlob (er, results) { + if (er) + return cb(er) + + n = results.length + if (n === 0) + return cb() + + results.forEach(function (p) { + rimraf_(p, options, function CB (er) { + if (er) { + if ((er.code === "EBUSY" || er.code === "ENOTEMPTY" || er.code === "EPERM") && + busyTries < options.maxBusyTries) { + busyTries ++ + var time = busyTries * 100 + // try again, with the same exact callback as this one. + return setTimeout(function () { + rimraf_(p, options, CB) + }, time) + } + + // this one won't happen if graceful-fs is used. + if (er.code === "EMFILE" && timeout < options.emfileWait) { + return setTimeout(function () { + rimraf_(p, options, CB) + }, timeout ++) + } + + // already gone + if (er.code === "ENOENT") er = null + } + + timeout = 0 + next(er) + }) + }) + } +} + +// Two possible strategies. +// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR +// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR +// +// Both result in an extra syscall when you guess wrong. However, there +// are likely far more normal files in the world than directories. This +// is based on the assumption that a the average number of files per +// directory is >= 1. +// +// If anyone ever complains about this, then I guess the strategy could +// be made configurable somehow. But until then, YAGNI. +function rimraf_ (p, options, cb) { + assert(p) + assert(options) + assert(typeof cb === 'function') + + // sunos lets the root user unlink directories, which is... weird. + // so we have to lstat here and make sure it's not a dir. + options.lstat(p, function (er, st) { + if (er && er.code === "ENOENT") + return cb(null) + + // Windows can EPERM on stat. Life is suffering. + if (er && er.code === "EPERM" && isWindows) + fixWinEPERM(p, options, er, cb) + + if (st && st.isDirectory()) + return rmdir(p, options, er, cb) + + options.unlink(p, function (er) { + if (er) { + if (er.code === "ENOENT") + return cb(null) + if (er.code === "EPERM") + return (isWindows) + ? fixWinEPERM(p, options, er, cb) + : rmdir(p, options, er, cb) + if (er.code === "EISDIR") + return rmdir(p, options, er, cb) + } + return cb(er) + }) + }) +} + +function fixWinEPERM (p, options, er, cb) { + assert(p) + assert(options) + assert(typeof cb === 'function') + if (er) + assert(er instanceof Error) + + options.chmod(p, _0666, function (er2) { + if (er2) + cb(er2.code === "ENOENT" ? null : er) + else + options.stat(p, function(er3, stats) { + if (er3) + cb(er3.code === "ENOENT" ? null : er) + else if (stats.isDirectory()) + rmdir(p, options, er, cb) + else + options.unlink(p, cb) + }) + }) +} + +function fixWinEPERMSync (p, options, er) { + assert(p) + assert(options) + if (er) + assert(er instanceof Error) + + try { + options.chmodSync(p, _0666) + } catch (er2) { + if (er2.code === "ENOENT") + return + else + throw er + } + + try { + var stats = options.statSync(p) + } catch (er3) { + if (er3.code === "ENOENT") + return + else + throw er + } + + if (stats.isDirectory()) + rmdirSync(p, options, er) + else + options.unlinkSync(p) +} + +function rmdir (p, options, originalEr, cb) { + assert(p) + assert(options) + if (originalEr) + assert(originalEr instanceof Error) + assert(typeof cb === 'function') + + // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) + // if we guessed wrong, and it's not a directory, then + // raise the original error. + options.rmdir(p, function (er) { + if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) + rmkids(p, options, cb) + else if (er && er.code === "ENOTDIR") + cb(originalEr) + else + cb(er) + }) +} + +function rmkids(p, options, cb) { + assert(p) + assert(options) + assert(typeof cb === 'function') + + options.readdir(p, function (er, files) { + if (er) + return cb(er) + var n = files.length + if (n === 0) + return options.rmdir(p, cb) + var errState + files.forEach(function (f) { + rimraf(path.join(p, f), options, function (er) { + if (errState) + return + if (er) + return cb(errState = er) + if (--n === 0) + options.rmdir(p, cb) + }) + }) + }) +} + +// this looks simpler, and is strictly *faster*, but will +// tie up the JavaScript thread and fail on excessively +// deep directory trees. +function rimrafSync (p, options) { + options = options || {} + defaults(options) + + assert(p, 'rimraf: missing path') + assert.equal(typeof p, 'string', 'rimraf: path should be a string') + assert(options, 'rimraf: missing options') + assert.equal(typeof options, 'object', 'rimraf: options should be object') + + var results + + if (options.disableGlob || !glob.hasMagic(p)) { + results = [p] + } else { + try { + options.lstatSync(p) + results = [p] + } catch (er) { + results = glob.sync(p, options.glob) + } + } + + if (!results.length) + return + + for (var i = 0; i < results.length; i++) { + var p = results[i] + + try { + var st = options.lstatSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + + // Windows can EPERM on stat. Life is suffering. + if (er.code === "EPERM" && isWindows) + fixWinEPERMSync(p, options, er) + } + + try { + // sunos lets the root user unlink directories, which is... weird. + if (st && st.isDirectory()) + rmdirSync(p, options, null) + else + options.unlinkSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + if (er.code === "EPERM") + return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er) + if (er.code !== "EISDIR") + throw er + + rmdirSync(p, options, er) + } + } +} + +function rmdirSync (p, options, originalEr) { + assert(p) + assert(options) + if (originalEr) + assert(originalEr instanceof Error) + + try { + options.rmdirSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + if (er.code === "ENOTDIR") + throw originalEr + if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") + rmkidsSync(p, options) + } +} + +function rmkidsSync (p, options) { + assert(p) + assert(options) + options.readdirSync(p).forEach(function (f) { + rimrafSync(path.join(p, f), options) + }) + + // We only end up here once we got ENOTEMPTY at least once, and + // at this point, we are guaranteed to have removed all the kids. + // So, we know that it won't be ENOENT or ENOTDIR or anything else. + // try really hard to delete stuff on windows, because it has a + // PROFOUNDLY annoying habit of not closing handles promptly when + // files are deleted, resulting in spurious ENOTEMPTY errors. + var retries = isWindows ? 100 : 1 + var i = 0 + do { + var threw = true + try { + var ret = options.rmdirSync(p, options) + threw = false + return ret + } finally { + if (++i < retries && threw) + continue + } + } while (true) +} diff --git a/.pnpm-store/v11/files/0a/bbdadea71cf5747264afd427f45efb48d3e4858882161a839c0b3356db91c69436e1e75aef5a74cedfb2bd6d6539cd20892cf2e302b9681fb55c79d313da86 b/.pnpm-store/v11/files/0a/bbdadea71cf5747264afd427f45efb48d3e4858882161a839c0b3356db91c69436e1e75aef5a74cedfb2bd6d6539cd20892cf2e302b9681fb55c79d313da86 new file mode 100644 index 00000000..55ea56f3 --- /dev/null +++ b/.pnpm-store/v11/files/0a/bbdadea71cf5747264afd427f45efb48d3e4858882161a839c0b3356db91c69436e1e75aef5a74cedfb2bd6d6539cd20892cf2e302b9681fb55c79d313da86 @@ -0,0 +1,2122 @@ +{ + "ALL_COMPILER_OPTIONS_6917": "WSZYSTKIE OPCJE KOMPILATORA", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Modyfikatora „{0}” nie można używać z deklaracją importu.", + "A_0_parameter_must_be_the_first_parameter_2680": "Parametr „{0}” musi być pierwszym parametrem.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Tag „@template” obiektu JSDoc nie może następować po tagu „@typedef”, „@callback” ani „@overload”", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Komentarz JSDoc „@typedef” nie może zawierać wielu tagów „@type”.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Literał „bigint” nie może być używany jako nazwa właściwości.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Literał typu bigint nie może używać notacji wykładniczej.", + "A_bigint_literal_must_be_an_integer_1353": "Literał typu bigint musi być liczbą całkowitą.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Parametr wzorca wiązania nie może być opcjonalny w sygnaturze implementacji.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Instrukcji „break” można użyć tylko w ramach otaczającej instrukcji iteracji lub switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Instrukcja „break” może wykonać skok tylko do etykiety otaczającej instrukcji.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Klasa znaków nie może zawierać zastrzeżonej podwójnej interpunkcji. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Zakres klasy znaków nie może być ograniczony przez inną klasę znaków.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Klasa może zawierać implementację tylko identyfikatora/nazwy kwalifikowanej z opcjonalnymi argumentami typu.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Klasa może implementować tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Klasa nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Klasy mogą rozszerzać tylko wartości konstruowalne.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Klasa nie może zaimplementować typu pierwotnego, takiego jak „{0}”. Może implementować tylko inne nazwane typy obiektów.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Deklaracja klasy bez modyfikatora „default” musi mieć nazwę.", + "A_class_member_cannot_have_the_0_keyword_1248": "Składowa klasy nie może zawierać słowa kluczowego „{0}”.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Wyrażenie przecinkowe nie jest dozwolone w obliczonej nazwie właściwości.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Obliczona nazwa właściwości nie może odwoływać się do parametru typu z zawierającego go typu.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Nazwa właściwości obliczanej w deklaracji właściwości klasy musi mieć typ prostego literału lub typ „unikatowy symbol”.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Nazwa właściwości obliczanej w przeciążeniu metody musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Nazwa właściwości obliczanej w typie literału musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Nazwa właściwości obliczanej w otaczającym kontekście musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Nazwa właściwości obliczanej w interfejsie musi odwoływać się do wyrażenia, którego typem jest literał lub „unique symbol”.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Obliczona nazwa właściwości musi być typu „string”, „number”, „symbol” lub „any”.", + "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355": "Asercje „const” mogą być stosowane tylko do odwołań do elementów członkowskich wyliczenia lub literałów typu string, number, boolean, array lub object.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Dostęp do składowej wyliczenia ze specyfikatorem const można uzyskać tylko za pomocą literału ciągu.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Inicjator „const” w otaczającym kontekście musi być ciągiem, literałem liczbowym albo odwołaniem do literału wyliczenia.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Konstruktor nie może zawierać wywołania „super”, gdy jego klasa rozszerza wartość „null”.", + "A_constructor_cannot_have_a_this_parameter_2681": "Konstruktor nie może zawierać parametru „this”.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Instrukcji „continue” można użyć tylko w otaczającej instrukcji iteracji.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Instrukcja „continue” może wykonać skok tylko do etykiety otaczającej instrukcji iteracji.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Nie można zaimportować pliku deklaracji bez elementu „import type”. Czy zamiast tego chcesz zaimportować plik implementacji „{0}”?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Nie można użyć modyfikatora „declare” w otaczającym kontekście.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekorator może dekorować jedynie implementację metody, a nie przeciążenie.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Klauzula „default” nie może występować więcej niż raz w instrukcji „switch”.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Eksport domyślny może być używany tylko w module w stylu języka ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Eksport domyślny musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Asercja określonego przypisania „!” nie jest dozwolona w tym kontekście.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Deklaracja usuwająca strukturę musi mieć inicjator.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Wywołanie dynamicznego importowania w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Wywołanie dynamicznego importowania zwraca element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", + "A_file_cannot_have_a_reference_to_itself_1006": "Plik nie może przywoływać samego siebie.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Funkcja zwracająca wartość „never” nie może mieć osiągalnego punktu końcowego.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Funkcja wywoływana ze słowem kluczowym „new” nie może mieć typu „this” o wartości „void”.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Funkcja, której zadeklarowany typ nie ma wartości „undefined”, „void” ani „any”, musi zwracać wartości.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Generator nie może mieć adnotacji typu „void”.", + "A_get_accessor_cannot_have_parameters_1054": "Metoda dostępu „get” nie może mieć parametrów.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Metoda dostępu get musi być co najmniej tak samo dostępna, jak metoda ustawiająca", + "A_get_accessor_must_return_a_value_2378": "Metoda dostępu „get” musi zwracać wartość.", + "A_label_is_not_allowed_here_1344": "Etykieta nie jest dozwolona w tym miejscu.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Element krotki z etykietą jest deklarowany jako opcjonalny za pomocą znaku zapytania po nazwie i przed dwukropkiem, a nie po typie.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Oznaczony etykietą element krotki jest deklarowany jako reszta z \"...\" przed nazwą, a nie przed typem.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Zmapowany typ nie może deklarować właściwości ani metod.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Inicjator składowej w deklaracji wyliczenia nie może przywoływać składowych zadeklarowanych po nim, w tym składowych zdefiniowanych w innych wyliczeniach.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Klasa mixin musi mieć konstruktor z pojedynczym parametrem rest o typie „any[]”.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Klasa domieszki, która rozciąga się od zmiennej typu zawierającej sygnaturę konstrukcji abstrakcyjnej, musi być również zadeklarowana jako „abstract”.", + "A_module_cannot_have_multiple_default_exports_2528": "Moduł nie może mieć wielu eksportów domyślnych.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Deklaracja przestrzeni nazw nie może znajdować się w innym pliku niż klasa lub funkcja, z którą ją scalono.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Deklaracja przestrzeni nazw nie może występować przed klasą lub funkcją, z którą ją scalono.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Deklaracja przestrzeni nazw jest dozwolona tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Deklaracja „namespace” nie powinna być deklarowana przy użyciu słowa kluczowego „module”. Zamiast tego należy użyć słowa kluczowego „namespace”.", + "A_non_dry_build_would_build_project_0_6357": "Kompilacja inna niż -dry spowodowałaby skompilowanie projektu „{0}”", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Kompilacja inna niż -dry spowodowałaby usunięcie następujących plików: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Kompilacja bez opcji dry spowoduje zaktualizowanie sygnatur czasowych dla danych wyjściowych projektu „{0}”", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Inicjator parametru jest dozwolony tylko w implementacji funkcji lub konstruktora.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Właściwości parametru nie można zadeklarować za pomocą parametru rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Właściwość parametru jest dozwolona tylko w implementacji konstruktora.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Właściwości parametru nie można zadeklarować za pomocą wzorca wiązania.", + "A_promise_must_have_a_then_method_1059": "Obietnica musi mieć metodę „then”.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Właściwość klasy, której typem jest „unique symbol”, musi być określona zarówno jako „static”, jak i „readonly”.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Właściwość klasy, której typem jest literał lub „unique symbol”, musi być określona zarówno jako „static”, jak i „readonly”.", + "A_required_element_cannot_follow_an_optional_element_1257": "Wymagany element nie może występować po elemencie opcjonalnym.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Wymagany parametr nie może występować po opcjonalnym parametrze.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Element rest nie może zawierać wzorca wiązania.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Element rest nie może następować po innym elemencie rest.", + "A_rest_element_cannot_have_a_property_name_2566": "Element rest nie może mieć nazwy właściwości.", + "A_rest_element_cannot_have_an_initializer_1186": "Element rest nie może mieć inicjatora.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Element rest musi być ostatni we wzorcu usuwającym strukturę.", + "A_rest_element_type_must_be_an_array_type_2574": "Typ elementu rest musi być typem tablicowym.", + "A_rest_parameter_cannot_be_optional_1047": "Parametr rest nie może być opcjonalny.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Parametr rest nie może mieć inicjatora.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Parametr rest musi występować na końcu listy parametrów.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Parametr rest musi być typu tablicowego.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Parametr rest ani wzorzec wiązania nie może mieć końcowego przecinka.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Instrukcji „return” można użyć tylko w treści funkcji.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Instrukcji „return” nie można użyć wewnątrz bloku statycznego klasy.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Seria wpisów, które ponownie mapują importowane dane na lokalizacje wyszukiwania względne wobec adresu „baseUrl”.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Metoda dostępu „set” nie może mieć adnotacji zwracanego typu.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Metoda dostępu „set” nie może mieć parametru opcjonalnego.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Metoda dostępu „set” nie może mieć parametru rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Metoda dostępu „set” musi mieć dokładnie jeden parametr.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Parametr metody dostępu „set” nie może mieć inicjatora.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Argument nadlewki musi mieć typ krotki lub być przekazywany do parametru Rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Wywołanie „super” musi być instrukcją na poziomie głównym w konstruktorze klasy pochodnej, która zawiera zainicjowane właściwości, właściwości parametrów lub identyfikatory prywatne.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Wywołanie „super” musi być pierwszą instrukcją w konstruktorze, aby odwoływać się do „super” lub „this”, gdy klasa pochodna zawiera zainicjalizowane właściwości, właściwości parametrów lub prywatne identyfikatory.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Ochrona typu oparta na elemencie „this” nie jest zgodna z ochroną typu opartą na parametrze.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Typ „this” jest dostępny tylko w niestatycznej składowej klasy lub interfejsu.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Modyfikatora „export” najwyższego poziomu nie można używać w deklaracjach wartości w module CommonJS, gdy jest włączona opcja „verbatimModuleSyntax”.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Plik „tsconfig.json” jest już zdefiniowany w: „{0}”.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Składowa krotki nie może być jednocześnie opcjonalna i typu rest.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Nie można indeksować typu krotki z wartością ujemną.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Wyrażenie asercji typu jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Właściwość literału typu nie może mieć inicjatora.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Import dotyczący tylko typu może określać import domyślny lub powiązania nazwane, ale nie jedno i drugie jednocześnie.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Predykat typów nie może zawierać odwołania do parametru rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Predykat typów nie może zawierać odwołania do elementu „{0}” we wzorcu wiązania.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Predykat typów jest dozwolony tylko w położeniu zwracanego typu dla funkcji i metod.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Musi być możliwe przypisanie typu predykatu typów do typu jego parametru.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Typ przywoływany w sygnaturze dekorowanej musi zostać zaimportowany za pomocą elementu „import type” lub importu przestrzeni nazw, gdy są włączone elementy „isolatedModules” i „emitDecoratorMetadata”.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Zmienna, której typem „unique symbol”, musi być określona jako „const”.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Wyrażenie „yield” jest dozwolone tylko w treści generatora.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "Nie można uzyskać dostępu do metody abstrakcyjnej „{0}” w klasie „{1}” za pomocą wyrażenia super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Metody abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Właściwości abstrakcyjne mogą występować tylko w klasie abstrakcyjnej.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "Właściwość abstrakcyjna „{0}” w klasie „{1}” jest niedostępna w konstruktorze.", + "Accessibility_modifier_already_seen_1028": "Napotkano już modyfikator dostępności.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Metody dostępu są dostępne tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Obie metody dostępu muszą być abstrakcyjne lub nieabstrakcyjne.", + "Add_0_to_unresolved_variable_90008": "Dodaj „{0}.” do nierozpoznanej zmiennej", + "Add_a_return_statement_95111": "Dodaj instrukcję return", + "Add_a_return_type_to_the_function_declaration_9031": "Dodaj zwracany typ do deklaracji funkcji.", + "Add_a_return_type_to_the_function_expression_9030": "Dodaj zwracany typ do wyrażenia funkcji.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Dodaj zwracany typ do deklaracji metody dostępu get.", + "Add_a_return_type_to_the_method_9034": "Dodawanie typu zwracanego do metody", + "Add_a_type_annotation_to_the_parameter_0_9028": "Dodaj adnotację typu do parametru {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Dodaj adnotację typu do właściwości {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Dodaj adnotację typu do zmiennej {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Dodaj typ do parametru deklaracji metody dostępu zestawu.", + "Add_all_missing_async_modifiers_95041": "Dodaj wszystkie brakujące modyfikatory „async”", + "Add_all_missing_attributes_95168": "Dodawanie wszystkich brakujących atrybutów", + "Add_all_missing_call_parentheses_95068": "Dodaj wszystkie brakujące nawiasy wywołań", + "Add_all_missing_function_declarations_95157": "Dodaj wszystkie brakujące deklaracje funkcji", + "Add_all_missing_imports_95064": "Dodaj wszystkie brakujące importy", + "Add_all_missing_members_95022": "Dodaj wszystkie brakujące elementy członkowskie", + "Add_all_missing_override_modifiers_95162": "Dodaj wszystkie brakujące modyfikatory „override”", + "Add_all_missing_parameters_95190": "Dodaj wszystkie brakujące parametry", + "Add_all_missing_properties_95166": "Dodaj wszystkie brakujące właściwości", + "Add_all_missing_return_statement_95114": "Dodaj wszystkie brakujące instrukcje return", + "Add_all_missing_super_calls_95039": "Dodaj wszystkie brakujące wywołania typu super", + "Add_all_missing_type_annotations_90067": "Dodaj wszystkie brakujące adnotacje typu", + "Add_all_optional_parameters_95193": "Dodaj wszystkie parametry opcjonalne", + "Add_annotation_of_type_0_90062": "Dodaj adnotację typu „{0}”", + "Add_async_modifier_to_containing_function_90029": "Dodaj modyfikator asynchroniczny do funkcji zawierającej", + "Add_await_95083": "Dodaj operator „await”", + "Add_await_to_initializer_for_0_95084": "Dodaj operator „await” do inicjatora dla elementu „{0}”", + "Add_await_to_initializers_95089": "Dodaj operator „await” do inicjatorów", + "Add_braces_to_arrow_function_95059": "Dodaj nawiasy klamrowe do funkcji strzałki", + "Add_const_to_all_unresolved_variables_95082": "Dodaj element „const” do wszystkich nierozpoznanych zmiennych", + "Add_const_to_unresolved_variable_95081": "Dodaj element „const” do nierozpoznanej zmiennej", + "Add_definite_assignment_assertion_to_property_0_95020": "Dodaj asercję określonego przypisania do właściwości „{0}”", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Dodaj asercję określonego przypisania do wszystkich niezainicjowanych właściwości", + "Add_export_to_make_this_file_into_a_module_95097": "Dodaj element „export {}”, aby przekształcić ten plik w moduł", + "Add_extends_constraint_2211": "Dodaj ograniczenie „rozszerzeń”.", + "Add_extends_constraint_to_all_type_parameters_2212": "Dodaj ograniczenie „rozszerzeń” do wszystkich parametrów typu", + "Add_import_from_0_90057": "Dodaj import z „{0}”", + "Add_index_signature_for_property_0_90017": "Dodaj sygnaturę indeksu dla właściwości „{0}”", + "Add_initializer_to_property_0_95019": "Dodaj inicjator do właściwości „{0}”", + "Add_initializers_to_all_uninitialized_properties_95027": "Dodaj inicjatory do wszystkich niezainicjowanych właściwości", + "Add_missing_attributes_95167": "Dodawanie brakujących atrybutów", + "Add_missing_call_parentheses_95067": "Dodaj brakujące nawiasy wywołań", + "Add_missing_comma_for_object_member_completion_0_95187": "Dodaj brakujący przecinek dla ukończenia składowych obiektu „{0}”.", + "Add_missing_enum_member_0_95063": "Dodaj brakujący element członkowski wyliczenia „{0}”", + "Add_missing_function_declaration_0_95156": "Dodaj brakującą deklarację funkcji „{0}”", + "Add_missing_new_operator_to_all_calls_95072": "Dodaj brakujący operator „new” do wszystkich wywołań", + "Add_missing_new_operator_to_call_95071": "Dodaj brakujący operator „new” do wywołania", + "Add_missing_parameter_to_0_95188": "Dodaj brakujący parametr do elementu „{0}”", + "Add_missing_parameters_to_0_95189": "Dodaj brakujące parametry do elementu „{0}”", + "Add_missing_properties_95165": "Dodaj brakujące właściwości", + "Add_missing_super_call_90001": "Dodaj brakujące wywołanie „super()”", + "Add_missing_typeof_95052": "Dodaj brakujący element „typeof”", + "Add_names_to_all_parameters_without_names_95073": "Dodaj nazwy do wszystkich parametrów bez nazw", + "Add_optional_parameter_to_0_95191": "Dodaj opcjonalny parametr do elementu „{0}\"", + "Add_optional_parameters_to_0_95192": "Dodaj opcjonalne parametry do elementu „{0}”", + "Add_or_remove_braces_in_an_arrow_function_95058": "Dodaj lub usuń nawiasy klamrowe w funkcji strzałki", + "Add_override_modifier_95160": "Dodaj modyfikator „override”", + "Add_parameter_name_90034": "Dodaj nazwę parametru", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Dodaj kwalifikator do wszystkich nierozpoznanych zmiennych pasujących do nazwy składowej", + "Add_resolution_mode_import_attribute_95196": "Dodaj atrybut importu „resolution-mode”", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Dodaj atrybut importu „resolution-mode” do wszystkich importów tylko typu, które go potrzebują", + "Add_return_type_0_90063": "Dodaj zwracany typ „{0}”", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Dodaj elementy satisfies i asercję typu do tego wyrażenia (satisfies T jako T), aby jawnie utworzyć typ.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Dodaj elementy satisfies i asercję typu wbudowanego za pomocą elementu „{0}”", + "Add_to_all_uncalled_decorators_95044": "Dodaj element „()” do wszystkich niewywoływanych dekoratorów", + "Add_ts_ignore_to_all_error_messages_95042": "Dodaj element „@ts-ignore” do wszystkich komunikatów o błędach", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Dodaj element „niezdefiniowany” do typu podczas uzyskiwania dostępu przy użyciu indeksu.", + "Add_undefined_to_optional_property_type_95169": "Dodaj element \"undefined\" do opcjonalnego typu właściwości", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Dodaj typ nieokreślony do wszystkich niezainicjowanych właściwości", + "Add_undefined_type_to_property_0_95018": "Dodaj typ „undefined” do właściwości „{0}”", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Dodaj konwersję „unknown” dla nienakładających się typów", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Dodaj element „unknown” do wszystkich konwersji nienakładających się typów", + "Add_void_to_Promise_resolved_without_a_value_95143": "Dodaj argument „void” do obiektu Promise rozwiązanego bez wartości", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Dodaj argument „void” do wszystkich obiektów Promise rozwiązanych bez wartości", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Dodanie pliku tsconfig.json pomoże w organizowaniu projektów, które zawierają pliki TypeScript i JavaScript. Dowiedz się więcej: https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne ograniczenia.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Wszystkie deklaracje elementu „{0}” muszą mieć identyczne modyfikatory.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Wszystkie deklaracje „{0}” muszą mieć identyczne parametry typu.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Wszystkie deklaracje metody abstrakcyjnej muszą występować obok siebie.", + "All_destructured_elements_are_unused_6198": "Wszystkie elementy, których strukturę usunięto, są nieużywane.", + "All_imports_in_import_declaration_are_unused_6192": "Wszystkie importy w deklaracji importu są nieużywane.", + "All_type_parameters_are_unused_6205": "Wszystkie parametry typu są nieużywane.", + "All_variables_are_unused_6199": "Wszystkie zmienne są nieużywane.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Zezwalaj plikom JavaScript na udział w programie. Użyj opcji „checkJS”, aby uzyskać błędy z tych plików.", + "Allow_accessing_UMD_globals_from_modules_6602": "Zezwalaj na dostęp do zmiennych globalnych UMD z modułów.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Zezwalaj na domyślne importy z modułów bez domyślnego eksportu. To nie wpływa na emitowanie kodu, a tylko na sprawdzanie typów.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Zezwalaj na elementy „import x from y”, gdy moduł nie ma domyślnej operacji eksportu.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Zezwalaj na jednorazowe importowanie funkcji pomocniczych z biblioteki tslib w projekcie zamiast dołączania ich dla poszczególnych plików.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Zezwalaj na importowanie w celu uwzględnienia rozszerzeń plików TypeScript. Wymaga ustawienia elementu „--moduleResolution bundler” i „--noEmit” lub „--emitDeclarationOnly”.", + "Allow_javascript_files_to_be_compiled_6102": "Zezwalaj na kompilowanie plików JavaScript.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Zezwalaj na traktowanie wielu folderów jako jednego podczas rozpoznawania modułów.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Już dołączona nazwa pliku „{0}” różni się od nazwy pliku „{1}” tylko wielkością liter", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Deklaracja otaczającego modułu nie może określać względnej nazwy modułu.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Moduły otoczenia nie mogą być zagnieżdżone w innych modułach ani przestrzeniach nazw.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Moduł AMD nie może mieć wielu przypisań nazw.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Abstrakcyjna metoda dostępu nie może mieć implementacji.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Modyfikator dostępności nie może być używany z identyfikatorem prywatnym.", + "An_accessor_cannot_have_type_parameters_1094": "Metoda dostępu nie może mieć parametrów typu.", + "An_accessor_property_cannot_be_declared_optional_1276": "Właściwość „accessor” nie może być zadeklarowana jako opcjonalna.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Deklaracja otaczającego modułu jest dozwolona tylko na najwyższym poziomie pliku.", + "An_argument_for_0_was_not_provided_6210": "Nie podano argumentu dla elementu „{0}”.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Argument pasujący do tego wzorca powiązania nie został podany.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Arytmetyczny operand musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Funkcja strzałki nie może mieć parametru „this”.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Asynchroniczna funkcja lub metoda w języku ES5 wymaga konstruktora „Promise”. Upewnij się, że masz deklarację dla konstruktora „Promise”, lub uwzględnij wartość „ES2015” w opcji „--lib”.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Asynchroniczna funkcja lub metoda musi zwrócić element \"Promise\". Upewnij się, że masz deklarację dla elementu \"Promise\" lub uwzględnij wartość \"ES2015\" w opcji \"--lib\".", + "An_async_iterator_must_have_a_next_method_2519": "Iterator asynchroniczny musi mieć metodę „next()”.", + "An_element_access_expression_should_take_an_argument_1011": "Wyrażenie dostępu do elementu powinno przyjmować argument.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Elementu członkowskiego wyliczenia nie można nazwać za pomocą identyfikatora prywatnego.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Składowa wyliczenia nie może mieć nazwy liczbowej.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Po nazwie elementu członkowskiego wyliczenia musi następować znak „,”, „=” lub „}”.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Rozszerzona wersja tych informacji, przedstawiająca wszystkie możliwe opcje kompilatora", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Nie można użyć przypisania eksportu w module z innymi eksportowanymi elementami.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Nie można użyć przypisania eksportu w przestrzeni nazw.", + "An_export_assignment_cannot_have_modifiers_1120": "Przypisanie eksportu nie może mieć modyfikatorów.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Przypisanie eksportu musi znajdować się na najwyższym poziomie deklaracji pliku lub modułu.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Deklaracji eksportu można używać tylko na najwyższym poziomie modułu.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Deklaracji eksportu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "An_export_declaration_cannot_have_modifiers_1193": "Deklaracja eksportu nie może mieć modyfikatorów.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Deklaracja „export =” musi odwoływać się do rzeczywistej wartości, gdy właściwość „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Deklaracja „export =” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Element „export default” musi odwoływać się do rzeczywistej wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” jest rozpoznawany jako deklaracja tylko typu.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Element „export default” musi odwoływać się do wartości, gdy opcja „verbatimModuleSyntax” jest włączona, ale element „{0}” odwołuje się tylko do typu.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Wyrażenie typu „void” nie może być testowane pod kątem prawdziwości.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Rozszerzona wartość znaku ucieczki Unicode musi należeć do zakresu od 0x0 do 0x10FFFF (włącznie).", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Identyfikatora lub słowa kluczowego nie można użyć bezpośrednio po literale liczbowym.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Implementacja nie może być zadeklarowana w otaczających kontekstach.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Alias importu nie może odwoływać się do deklaracji, która została wyeksportowana przy użyciu elementu „export type”.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Alias importu nie może odwoływać się do deklaracji, która została zaimportowana przy użyciu elementu „import type”.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Alias importu nie może zostać rozpoznany jako deklaracja typu lub deklaracja tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "An_import_alias_cannot_use_import_type_1392": "Alias importu nie może używać właściwości „import type”", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Deklaracji importu można używać tylko na najwyższym poziomie modułu.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Deklaracji importu można używać tylko na najwyższym poziomie przestrzeni nazw lub modułu.", + "An_import_declaration_cannot_have_modifiers_1191": "Deklaracja importu nie może mieć modyfikatorów.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Ścieżka importu może tylko kończyć się rozszerzeniem „{0}”, gdy jest włączona opcja „allowImportingTsExtensions”.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Sygnatura indeksu nie może mieć parametru rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Sygnatura indeksu nie może być zakończona przecinkiem.", + "An_index_signature_must_have_a_type_annotation_1021": "Sygnatura indeksu musi mieć adnotację typu.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Sygnatura indeksu musi mieć dokładnie jeden parametr.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Parametr sygnatury indeksu nie może zawierać znaku zapytania.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Parametr sygnatury indeksu nie może mieć modyfikatora dostępności.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Parametr sygnatury indeksu nie może mieć inicjatora.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Parametr sygnatury indeksu musi mieć adnotację typu.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Typ parametru sygnatury indeksu nie może być typem literału ani typem ogólnym. Rozważ użycie zamiast tego mapowanego typu obiektu.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Parametr sygnatury indeksu musi mieć typ „string”, „number” lub „symbol” albo typ literału szablonu.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Po wyrażeniu tworzenia wystąpienia nie może następować dostęp do właściwości.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Interfejs może rozszerzać tylko identyfikator/nazwę kwalifikowaną z opcjonalnymi argumentami typu.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Interfejs może rozszerzać tylko typ obiektu lub część wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Interfejs nie może rozszerzyć typu pierwotnego, takiego jak „{0}”. Może rozszerzać tylko inne nazwane typy obiektów.", + "An_interface_property_cannot_have_an_initializer_1246": "Właściwość interfejsu nie może mieć inicjatora.", + "An_iterator_must_have_a_next_method_2489": "Iterator musi zawierać metodę „next()”.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "W przypadku używania dyrektywy pragma @jsx z fragmentami JSX jest wymagana dyrektywa pragma @jsxFrag.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Literał obiektu nie może mieć wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Literał obiektu nie może mieć wielu właściwości o tej samej nazwie.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Literał obiektu nie może mieć właściwości i metody dostępu o takiej samej nazwie.", + "An_object_member_cannot_be_declared_optional_1162": "Składowa obiektu nie może być zadeklarowana jako opcjonalna.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Metoda „[Symbol.hasInstance]” obiektu musi zwracać wartość logiczną, aby mogła być używana po prawej stronie wyrażenia „instanceof”.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Opcjonalny łańcuch nie może zawierać identyfikatorów prywatnych.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Element opcjonalny nie może następować po elemencie rest.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Zewnętrzna wartość parametru „this” jest zasłaniana przez ten kontener.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Sygnatura przeciążenia nie może być zadeklarowana jako generator.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Wyrażenie jednoargumentowe z operatorem „{0}” jest niedozwolone po lewej stronie wyrażenia potęgowania. Zastanów się nad zamknięciem wyrażenia w nawiasach.", + "Annotate_everything_with_types_from_JSDoc_95043": "Adnotuj wszystko przy użyciu typów JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Adnotuj typy funkcji expando właściwości w przestrzeni nazw", + "Annotate_with_type_from_JSDoc_95009": "Dodaj adnotację z typem z danych JSDoc", + "Another_export_default_is_here_2753": "W tym miejscu jest kolejny element export default.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Każda właściwość standardu Unicode, która może być zgodna z więcej niż jednym znakiem, jest dostępna tylko wtedy, gdy ustawiono flagę Unicode Sets (v).", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Wszystko, co może być zgodne z więcej niż pojedynczym znakiem, jest nieprawidłowe wewnątrz klasy znaków negowanych.", + "Are_you_missing_a_semicolon_2734": "Czy brakuje średnika?", + "Argument_expression_expected_1135": "Oczekiwano wyrażenia argumentu.", + "Argument_for_0_option_must_be_Colon_1_6046": "Argumentem opcji „{0}” musi być: {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Argument importu dynamicznego nie może być elementem spread.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "Nie można przypisać argumentu typu „{0}” do parametru typu „{1}”.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "Argumentu typu \"{0}\" nie można przypisać do parametru typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Nie podano argumentów dla parametru REST „{0}”.", + "Array_element_destructuring_pattern_expected_1181": "Oczekiwano wzorca usuwającego strukturę elementu tablicy.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Tablic z elementami rozproszonymi nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Asercje wymagają, aby każda nazwa w celu wywołania była zadeklarowana z jawną adnotacją typu.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Asercje wymagają, aby cel wywołania był identyfikatorem lub nazwą kwalifikowaną.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Przypisywanie właściwości do funkcji bez deklarowania ich nie jest obsługiwane w przypadku opcji --isolatedDeclarations. Dodaj jawną deklarację właściwości przypisanych do tej funkcji.", + "Asterisk_Slash_expected_1010": "Oczekiwano znaków „*/”.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Co najmniej jeden akcesor musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Rozszerzenia zakresu globalnego mogą być zagnieżdżane bezpośrednio jedynie w modułach zewnętrznych lub deklaracjach modułów otoczenia.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Rozszerzenia zakresu globalnego muszą mieć modyfikator „declare”, chyba że znajdują się w już otaczającym kontekście.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "Automatyczne odnajdowanie operacji wpisywania zostało włączone w projekcie „{0}”. Trwa uruchamianie dodatkowego przejścia rozwiązania dla modułu „{1}” przy użyciu lokalizacji pamięci podręcznej „{2}”.", + "BUILD_OPTIONS_6919": "OPCJE KOMPILACJI", + "Backwards_Compatibility_6253": "Zgodność z poprzednimi wersjami", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Wyrażenia klasy bazowej nie mogą odwoływać się do parametrów typu klasy.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "Zwracany typ konstruktora bazowego „{0}” nie jest typem obiektu ani częścią wspólną typów obiektów ze statycznie znanymi elementami członkowskimi.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Wszystkie konstruktory podstawowe muszą mieć ten sam zwracany typ.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Katalog podstawowy do rozpoznawania innych niż bezwzględne nazw modułów.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Literały typu BigInt są niedostępne, gdy wersja docelowa jest wcześniejsza niż ES2020.", + "Binary_digit_expected_1177": "Oczekiwano bitu.", + "Binding_element_0_implicitly_has_an_1_type_7031": "Dla elementu powiązania „{0}” niejawnie określono typ „{1}”.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Elementów powiązania nie można eksportować bezpośrednio za pomocą wyrażenia --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Zmienna „{0}” o zakresie bloku została użyta przed jej deklaracją.", + "Build_a_composite_project_in_the_working_directory_6925": "Skompiluj projekt złożony w katalogu roboczym.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Kompiluj wszystkie projekty, łącznie z tymi, które wydają się być aktualne.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Kompiluj co najmniej jeden projekt i jego zależności, jeśli są nieaktualne", + "Build_option_0_requires_a_value_of_type_1_5073": "Opcja kompilacji „{0}” wymaga wartości typu {1}.", + "Building_project_0_6358": "Trwa kompilowanie projektu „{0}”...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Wbudowane iteratory są tworzone przy użyciu typu „TReturn” o wartości „undefined” zamiast „any”.", + "COMMAND_LINE_FLAGS_6921": "FLAGI WIERSZA POLECENIA", + "COMMON_COMMANDS_6916": "TYPOWE POLECENIA", + "COMMON_COMPILER_OPTIONS_6920": "TYPOWE OPCJE KOMPILATORA", + "Call_decorator_expression_90028": "Wywołaj wyrażenie dekoratora", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Zwracane typy sygnatur wywołania „{0}” i „{1}” są niezgodne.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dla sygnatury wywołania bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Sygnatury wywołania bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", + "Call_target_does_not_contain_any_signatures_2346": "Cel wywołania nie zawiera żadnych podpisów.", + "Can_only_convert_logical_AND_access_chains_95142": "Można konwertować tylko łańcuchy logiczne ORAZ łańcuchy dostępu", + "Can_only_convert_named_export_95164": "Można przekonwertować tylko nazwany eksport", + "Can_only_convert_property_with_modifier_95137": "Właściwość można skonwertować tylko za pomocą modyfikatora", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Można konwertować tylko połączenia ciągów i literały ciągów", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Nie można uzyskać dostępu do elementu „{0}.{1}”, ponieważ element „{0}” jest typem, ale nie przestrzenią nazw. Czy chcesz pobrać typ właściwości „{1}” w lokalizacji „{0}” za pomocą elementu „{0}[„{1}”]”?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Nie można uzyskać dostępu do „{0}” z innego pliku bez kwalifikacji, gdy opcja „{1}” jest włączona. Zamiast tego użyj „{2}”.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Nie można uzyskać dostępu do wyliczenia stałej otoczenia, gdy element „{0}” jest włączony.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Nie można przypisać typu konstruktora „{0}” do typu konstruktora „{1}”.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Nie można przypisać abstrakcyjnego typu konstruktora do nieabstrakcyjnego typu konstruktora.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Nie można przypisać do elementu „{0}”, ponieważ jest to klasa.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Nie można przypisać do elementu „{0}”, ponieważ jest to stała.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Nie można przypisać do elementu „{0}”, ponieważ jest to funkcja.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Nie można przypisać do elementu „{0}”, ponieważ jest to przestrzeń nazw.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Nie można przypisać do elementu „{0}”, ponieważ jest to właściwość tylko do odczytu.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Nie można przypisać do elementu „{0}”, ponieważ jest to wyliczenie.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Nie można przypisać do elementu „{0}”, ponieważ jest to import.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Nie można przydzielić do elementu „{0}”, ponieważ nie jest to zmienna.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Nie można przypisać do metody prywatnej „{0}”. Metody prywatne nie są zapisywalne.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Nie można rozszerzyć modułu „{0}”, ponieważ rozpoznawany jest obiekt inny niż moduł.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Nie można rozszerzyć modułu „{0}” za pośrednictwem operacji eksportu wartości, ponieważ jest on rozpoznawany jako jednostka inna niż moduł.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Nie można skompilować modułów za pomocą opcji „{0}”, chyba że flaga „--module” ma wartość „amd” lub „system”.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Nie można utworzyć wystąpienia klasy abstrakcyjnej.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Nie można delegować iteracji do wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale zawierający generator będzie zawsze wysyłał „{0}”.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Nie można wyeksportować elementu „{0}”. Z modułu można eksportować jedynie lokalne deklaracje.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Nie można rozszerzyć klasy „{0}”. Konstruktor klasy jest oznaczony jako prywatny.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Nie można rozszerzyć interfejsu „{0}”. Czy chodziło Ci o „implements”?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Nie można odnaleźć pliku tsconfig.json w bieżącym katalogu: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Nie można znaleźć pliku tsconfig.json w określonym katalogu: „{0}”.", + "Cannot_find_global_type_0_2318": "Nie można odnaleźć typu globalnego „{0}”.", + "Cannot_find_global_value_0_2468": "Nie można odnaleźć wartości globalnej „{0}”.", + "Cannot_find_lib_definition_for_0_2726": "Nie można znaleźć definicji biblioteki dla elementu „{0}”.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Nie można znaleźć definicji biblioteki dla elementu „{0}”. Czy chodziło Ci o element „{1}”?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Nie można znaleźć modułu „{0}”. Rozważ użycie opcji „--resolveJsonModule” do importowania modułu z rozszerzeniem „.json”.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Nie można odnaleźć modułu „{0}”. Czy chcesz ustawić opcję „moduleResolution” na wartość „nodenext”, czy dodać aliasy do opcji „paths”?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Nie można odnaleźć modułu „{0}” lub odpowiadających mu deklaracji typów.", + "Cannot_find_name_0_2304": "Nie można odnaleźć nazwy „{0}”.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Nie można znaleźć nazwy „{0}”. Czy chodziło Ci o „{1}”?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Nie można znaleźć nazwy „{0}”. Czy chodziło o składową wystąpienia „this.{0}”?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Nie można znaleźć nazwy „{0}”. Czy chodziło o statyczną składową „{1}.{0}”?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Nie można odnaleźć nazwy \"{0}\". Czy chodziło Ci o napisanie tego w funkcji asynchronicznej?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na wersję \"{1}\" lub nowszą.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić element \"dom\".", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla usługi Bun? Spróbuj użyć polecenia „npm i --save-dev @types/bun”, a następnie dodaj ciąg „bun” do pola typów w pliku tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia „npm i --save-dev @types/jest” lub „npm i --save-dev @types/mocha”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla modułu uruchamiającego testy? Spróbuj użyć polecenia \"npm i --save-dev @types/jest\" lub \"npm i --save-dev @types/mocha\", a następnie dodaj element \"jest\" lub \"mocha\" do pola types w pliku tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia „npm i --save-dev @types/jquery”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla biblioteki jQuery? Spróbuj użyć polecenia \"npm i --save-dev @types/jquery\", a następnie dodaj element \"jquery\" do pola types w pliku tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Nie można odnaleźć nazwy „{0}”. Czy chcesz zainstalować definicje typów dla środowiska Node? Spróbuj użyć polecenia „npm i --save-dev @types/node”.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Nie można odnaleźć nazwy \"{0}\". Czy chcesz zainstalować definicje typów dla węzła? Spróbuj użyć polecenia \"npm i --save-dev @types/node\", a następnie dodaj element \"node\" do pola types w pliku tsconfig.", + "Cannot_find_namespace_0_2503": "Nie można odnaleźć przestrzeni nazw „{0}”.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Nie można odnaleźć przestrzeni nazw „{0}”. Czy chodziło Ci o „{1}”?", + "Cannot_find_parameter_0_1225": "Nie można odnaleźć parametru „{0}”.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Nie można odnaleźć wspólnej ścieżki podkatalogu dla plików wejściowych.", + "Cannot_find_type_definition_file_for_0_2688": "Nie można znaleźć pliku definicji typu dla elementu „{0}”.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Nie można zaimportować plików deklaracji typu. Rozważ zaimportowanie „{0}” zamiast „{1}”.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Nie można zainicjować zmiennej „{0}” z zakresu zewnętrznego w tym samym zakresie co deklaracja „{1}” należąca do zakresu bloku.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „null”.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „null” lub „undefined”.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Nie można wywołać obiektu, który ma prawdopodobnie wartość „undefined”.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale destrukturyzacja tablicy będzie zawsze wysyłała „{0}”.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale rozkładanie tablicy będzie zawsze wysyłało „{0}”.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Nie można iterować wartości, ponieważ metoda „next” jej iteratora oczekuje typu „{1}”, ale pętla for-of będzie zawsze wysyłała „{0}”.", + "Cannot_move_statements_to_the_selected_file_95183": "Nie można przenieść instrukcji do wybranego pliku", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Nie można przenieść do pliku, wybrany plik jest nieprawidłowy", + "Cannot_read_file_0_5083": "Nie można odczytać pliku „{0}”.", + "Cannot_read_file_0_Colon_1_5012": "Nie można odczytać pliku „{0}”: {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Nie można ponownie zadeklarować zmiennej „{0}” o zakresie bloku.", + "Cannot_redeclare_exported_variable_0_2323": "Nie można zadeklarować ponownie wyeksportowanej zmiennej „{0}”.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Nie można ponownie zadeklarować identyfikatora „{0}” w klauzuli catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Nie można uruchomić wywołania funkcji w adnotacji typu.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Nie można użyć kodu JSX, jeśli nie podano flagi „--jsx”.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Nie można użyć polecenia „export import” w przestrzeni nazw typu lub tylko typu, gdy opcja „{0}” jest włączona.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Nie można używać importów, eksportów lub rozszerzeń modułów, jeśli flaga „--module” ma wartość „none”.", + "Cannot_use_namespace_0_as_a_type_2709": "Nie można używać przestrzeni nazw „{0}” jako typu.", + "Cannot_use_namespace_0_as_a_value_2708": "Nie można używać przestrzeni nazw „{0}” jako wartości.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Nie można użyć elementu \"this\" w statycznym inicjatorze właściwości dekorowanej klasy.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Nie można zapisać pliku „{0}”, ponieważ spowoduje to zastąpienie pliku „.tsbuildinfo” generowanego przez przywoływany projekt „{1}”", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Nie można zapisać pliku „{0}”, ponieważ zostałby nadpisany przez wiele plików wejściowych.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Nie można zapisać pliku „{0}”, ponieważ nadpisałby plik wejściowy.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Zmienna klauzuli catch nie może mieć inicjatora.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Adnotacja typu zmiennej w klauzuli catch musi mieć wartość „any” lub „unknown”, jeśli jest określona.", + "Change_0_to_1_90014": "Zmień element „{0}” na „{1}”", + "Change_all_extended_interfaces_to_implements_95038": "Zmień wszystkie rozszerzone interfejsy na elementy „implements”", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Zmień wszystkie typy w stylu JSDoc na TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Zmień wszystkie typy w stylu JSDoc na TypeScript (i dodaj element „| undefined” do typów dopuszczających wartość null)", + "Change_extends_to_implements_90003": "Zmień atrybut „extends” na „implements”", + "Change_spelling_to_0_90022": "Zmień pisownię na „{0}”", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Sprawdź, czy istnieją zadeklarowane właściwości klas, które nie zostały ustawione w konstruktorze.", + "Check_side_effect_imports_6806": "Sprawdź importy efektów ubocznych.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Sprawdź, czy argumenty dla metod „bind”, „call” i „apply” są zgodne z oryginalną funkcją.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Sprawdzanie, czy „{0}” to najdłuższy zgodny prefiks dla „{1}” — „{2}”.", + "Circular_definition_of_import_alias_0_2303": "Definicja cykliczna aliasu importu „{0}”.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Wykryto cykliczność podczas rozpoznawania konfiguracji: {0}", + "Circularity_originates_in_type_at_this_location_2751": "Cykliczność pochodzi z typu w tym miejscu.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "Klasa „{0}” definiuje metodę dostępu do składowej wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako funkcję składową wystąpienia.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "Klasa „{0}” definiuje funkcję składową wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako metodę dostępu do składowej wystąpienia.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "Klasa „{0}” definiuje właściwość składowej wystąpienia „{1}”, ale rozszerzona klasa „{2}” definiuje ją jako funkcję składową wystąpienia.", + "Class_0_incorrectly_extends_base_class_1_2415": "Klasa „{0}” niepoprawnie rozszerza klasę bazową „{1}”.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "Klasa „{0}” niepoprawnie implementuje klasę „{1}”. Czy chodziło o rozszerzenie „{1}” i odziedziczenie jego elementów członkowskich jako podklasy?", + "Class_0_incorrectly_implements_interface_1_2420": "Klasa „{0}” zawiera niepoprawną implementację interfejsu „{1}”.", + "Class_0_used_before_its_declaration_2449": "Klasa „{0}” została użyta przed zadeklarowaniem.", + "Class_constructor_may_not_be_a_generator_1368": "Konstruktor klas nie może być generatorem.", + "Class_constructor_may_not_be_an_accessor_1341": "Konstruktor klas nie może być metodą dostępu.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Deklaracja klasy nie może implementować listy przeciążeń dla elementu \"{0}\".", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Deklaracje klas nie mogą mieć więcej niż jeden tag \"@augments\" lub \"@extends\".", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Dekoratorów klas nie można używać ze statycznym identyfikatorem prywatnym. Rozważ usunięcie eksperymentalnego dekoratora.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Pole klasy „{0}” zdefiniowane przez klasę nadrzędną nie jest dostępne w klasie podrzędnej za pośrednictwem super.", + "Class_name_cannot_be_0_2414": "Klasa nie może mieć nazwy „{0}”.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "Nazwa klasy nie może być identyczna z „Object” w przypadku modułu ES5 i nowszych {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "Strona statyczna klasy „{0}” niepoprawnie rozszerza stronę statyczną klasy bazowej „{1}”.", + "Classes_can_only_extend_a_single_class_1174": "Klasy mogą rozszerzać tylko pojedynczą klasę.", + "Classes_may_not_have_a_field_named_constructor_18006": "Klasy nie mogą mieć pola o nazwie „constructor”.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Kod zawarty w klasie jest obliczany w trybie z ograniczeniami języka JavaScript, który nie zezwala na użycie elementu \"{0}\". Aby uzyskać więcej informacji, zobacz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Opcje wiersza polecenia", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Skompiluj projekt z uwzględnieniem ścieżki jego pliku konfiguracji lub folderu z plikiem „tsconfig.json”.", + "Compiler_Diagnostics_6251": "Diagnostyka kompilatora", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "Opcja kompilatora „{0}” nie może mieć pustego ciągu.", + "Compiler_option_0_expects_an_argument_6044": "Opcja kompilatora „{0}” oczekuje argumentu.", + "Compiler_option_0_may_not_be_used_with_build_5094": "Opcja kompilatora \"--{0}\" nie może być używana z parametrem \"--build\".", + "Compiler_option_0_may_only_be_used_with_build_5093": "Opcję kompilatora \"--{0}\" można używać tylko z parametrem \"--build\".", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Opcja kompilatora \"{0}\" wartości '{1}' jest niestabilna. Użyj nocnego TypeScript, aby wyciszyć ten błąd. Spróbuj zaktualizować za pomocą polecenia „npm install -D typescript@next”.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "Opcja kompilatora „{0}” wymaga wartości typu {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Kompilator rezerwuje nazwę „{0}” podczas emitowania identyfikatora prywatnego na niższy poziom.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Kompiluje projekt języka TypeScript znajdujący się w określonej ścieżce.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Kompiluje bieżący projekt (plik tsconfig.json w katalogu roboczym).", + "Compiles_the_current_project_with_additional_settings_6929": "Kompiluje bieżący projekt z dodatkowymi ustawieniami.", + "Completeness_6257": "Kompletność", + "Composite_projects_may_not_disable_declaration_emit_6304": "Projekty kompozytowe nie mogą wyłączyć emitowania deklaracji.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Projekty złożone nie mogą wyłączać kompilacji przyrostowej.", + "Computed_from_the_list_of_input_files_6911": "Obliczono na podstawie listy plików wejściowych", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Obliczone właściwości muszą być literałami liczb lub ciągów, zmiennymi lub wyrażeniami kropkowanymi z wyrażeniem --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Obliczone nazwy właściwości nie są dozwolone w wyliczeniach.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nie można wywnioskować obliczonych nazw właściwości w literałach klas lub obiektów za pomocą wyrażenia --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Obliczone wartości nie są dozwolone w wyliczeniu ze składowymi o wartości ciągu.", + "Concatenate_and_emit_output_to_single_file_6001": "Połącz i wyemituj dane wyjściowe do pojedynczego pliku.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Warunki, które należy ustawić oprócz ustawień domyślnych specyficznych dla programu rozpoznawania nazw podczas rozpoznawania importów.", + "Conflicts_are_in_this_file_6201": "Konflikty znajdują się w tym pliku.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Rozważ dodanie modyfikatora \"declare\" do tej klasy.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Zwracane typy „{0}” i „{1}” sygnatur konstrukcji są niezgodne.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dla sygnatury konstrukcji bez adnotacji zwracanego typu niejawnie określono zwracany typ „any”.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Sygnatury konstrukcji bez argumentów mają niezgodne zwracane typy „{0}” i „{1}”.", + "Constructor_implementation_is_missing_2390": "Brak implementacji konstruktora.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "Konstruktor klasy „{0}” jest prywatny i dostępny tylko w ramach deklaracji klasy.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "Konstruktor klasy „{0}” jest chroniony i dostępny tylko w ramach deklaracji klasy.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Notacja typu konstruktora musi być ujęta w nawiasy, jeśli jest używana w typie unii.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Notacja typu konstruktora musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Konstruktory klas pochodnych muszą zawierać wywołanie „super”.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Nie podano pliku zawierającego i nie można określić katalogu głównego. Pomijanie wyszukiwania w folderze „node_modules”.", + "Containing_function_is_not_an_arrow_function_95128": "Funkcja zawierająca nie jest funkcją strzałki", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Określ, jaka metoda jest używana do wykrywania plików JS w formacie modułu.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Konwersja typu „{0}” na typ „{1}” może być błędem, ponieważ żaden z tych typów nie pokrywa się w wystarczającym stopniu z drugim. Jeśli było to zamierzone, najpierw przekonwertuj wyrażenie na typ „unknown”.", + "Convert_0_to_1_in_0_95003": "Konwertuj element „{0}” na element „{1} w {0}”.", + "Convert_0_to_mapped_object_type_95055": "Konwertuj element „{0}” na zamapowany typ obiektu", + "Convert_all_const_to_let_95102": "Konwertuj wszystkie elementy „const” na „let”", + "Convert_all_constructor_functions_to_classes_95045": "Przekonwertuj wszystkie funkcje konstruktora na klasy", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Konwertuj wszystkie nieprawidłowe znaki na kod jednostki HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Konwertuj wszystkie ponownie wyeksportowane typy na eksporty dotyczące tylko typu", + "Convert_all_require_to_import_95048": "Konwertuj wszystkie wywołania „require” na wywołania „import”", + "Convert_all_to_async_functions_95066": "Konwertuj wszystko na funkcje asynchroniczne", + "Convert_all_to_bigint_numeric_literals_95092": "Konwertuj wszystko na literały liczbowe typu bigint", + "Convert_all_to_default_imports_95035": "Przekonwertuj wszystko na domyślne importowanie", + "Convert_all_type_literals_to_mapped_type_95021": "Konwertuj wszystkie literały typu na typ zamapowany", + "Convert_all_typedef_to_TypeScript_types_95177": "Konwertuj wszystkie elementy typedef na typy TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Konwertuj funkcję strzałki lub wyrażenie funkcji", + "Convert_const_to_let_95093": "Konwertuj zmienne „const” na „let”", + "Convert_default_export_to_named_export_95061": "Konwertuj eksport domyślny na nazwany eksport", + "Convert_function_declaration_0_to_arrow_function_95106": "Konwertuj deklarację funkcji „{0}” na funkcję strzałki", + "Convert_function_expression_0_to_arrow_function_95105": "Konwertuj wyrażenie funkcji „{0}” na funkcję strzałki", + "Convert_function_to_an_ES2015_class_95001": "Konwertuj funkcję na klasę ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Konwertuj nieprawidłowy znak na jego kod jednostki html", + "Convert_named_export_to_default_export_95062": "Konwertuj nazwany eksport na eksport domyślny", + "Convert_named_imports_to_default_import_95170": "Konwertuj nazwane importy na import domyślny", + "Convert_named_imports_to_namespace_import_95057": "Konwertuj importy nazwane na import przestrzeni nazw", + "Convert_namespace_import_to_named_imports_95056": "Konwertuj import przestrzeni nazw na importy nazwane", + "Convert_overload_list_to_single_signature_95118": "Konwertuj listę przeciążeń na pojedynczą sygnaturę", + "Convert_parameters_to_destructured_object_95075": "Konwertuj parametry na obiekt destrukturyzowany", + "Convert_require_to_import_95047": "Konwertuj wywołanie „require” na wywołanie „import”", + "Convert_to_ES_module_95017": "Konwertuj na moduł ES", + "Convert_to_a_bigint_numeric_literal_95091": "Konwertuj na literał liczbowy typu bigint", + "Convert_to_anonymous_function_95123": "Konwertuj na funkcję anonimową", + "Convert_to_arrow_function_95125": "Konwertuj na funkcję strzałki", + "Convert_to_async_function_95065": "Konwertuj na funkcję asynchroniczną", + "Convert_to_default_import_95013": "Konwertuj na import domyślny", + "Convert_to_named_function_95124": "Konwertuj na funkcję nazwaną", + "Convert_to_optional_chain_expression_95139": "Konwertuj na opcjonalne wyrażenie łańcucha", + "Convert_to_template_string_95096": "Konwertuj na ciąg szablonu", + "Convert_to_type_only_export_1364": "Konwertuj na eksport dotyczący tylko typu", + "Convert_typedef_to_TypeScript_type_95176": "Konwertuj element typedef na typ TypeScript.", + "Corrupted_locale_file_0_6051": "Uszkodzony plik ustawień regionalnych {0}.", + "Could_not_convert_to_anonymous_function_95153": "Nie można przekonwertować na funkcję anonimową", + "Could_not_convert_to_arrow_function_95151": "Nie można przekonwertować na funkcję strzałki", + "Could_not_convert_to_named_function_95152": "Nie można przekonwertować na nazwaną funkcję", + "Could_not_determine_function_return_type_95150": "Nie można określić zwracanego typu funkcji", + "Could_not_find_a_containing_arrow_function_95127": "Nie można było znaleźć zawierającej funkcji strzałki", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Nie można znaleźć pliku deklaracji dla modułu „{0}”. Element „{1}” ma niejawnie typ „any”.", + "Could_not_find_convertible_access_expression_95140": "Nie można odnaleźć konwertowalnego wyrażenia dostępu", + "Could_not_find_export_statement_95129": "Nie można było znaleźć instrukcji export", + "Could_not_find_import_clause_95131": "Nie można było znaleźć klauzuli import", + "Could_not_find_matching_access_expressions_95141": "Nie można odnaleźć zgodnych wyrażeń dostępu", + "Could_not_find_name_0_Did_you_mean_1_2570": "Nie można znaleźć nazwy „{0}”. Czy chodziło o „{1}”?", + "Could_not_find_namespace_import_or_named_imports_95132": "Nie można było znaleźć importu przestrzeni nazw lub nazwanych importów", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Nie można było znaleźć właściwości, dla której ma zostać wygenerowana metoda dostępu", + "Could_not_find_variable_to_inline_95185": "Nie można odnaleźć zmiennej w tekście.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Nie można rozpoznać ścieżki „{0}” z rozszerzeniami: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Nie można zapisać pliku „{0}”: {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Twórz pliki mapy źródła dla emitowanych plików JavaScript.", + "Create_sourcemaps_for_d_ts_files_6614": "Twórz mapy źródła dla plików d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Tworzy plik tsconfig.json z zalecanymi ustawieniami w katalogu roboczym.", + "DIRECTORY_6038": "KATALOG", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sekwencje ucieczki i odwołania wsteczne dziesiętne nie są dozwolone w klasie znaków.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Wartości dziesiętne z zerami wiodącymi są niedozwolone.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Deklaracja rozszerza deklarację w innym pliku. Nie można przeprowadzić serializacji.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Emisja deklaracji dla tego pliku wymaga zachowania tego importu dla rozszerzeń. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Emitowanie deklaracji dla tego pliku wymaga użycia nazwy prywatnej „{0}” z modułu „{1}”. Jawna adnotacja typu może odblokować emitowanie deklaracji.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Emisja deklaracji dla tego parametru wymaga niejawnego dodania parametru undefined do jego typu. Nie jest to obsługiwane w przypadku parametru --isolatedDeclarations.", + "Declaration_expected_1146": "Oczekiwano deklaracji.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Nazwa deklaracji powoduje konflikt z wbudowanym identyfikatorem globalnym „{0}”.", + "Declaration_or_statement_expected_1128": "Oczekiwano deklaracji lub instrukcji.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Oczekiwano deklaracji lub instrukcji. Ten znak „=” jest za blokiem instrukcji, dlatego jeśli chodziło Ci o napisanie przypisania usuwającego, może być konieczne zamknięcie całego przypisania w nawiasach.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Deklaracje z asercjami określonego przypisania muszą również mieć adnotacje typu.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Deklaracje z inicjatorami nie mogą mieć również asercji określonego przypisania.", + "Declare_a_private_field_named_0_90053": "Zadeklaruj pole prywatne o nazwie „{0}”.", + "Declare_method_0_90023": "Zadeklaruj metodę „{0}”", + "Declare_private_method_0_90038": "Zadeklaruj metodę prywatną „{0}”", + "Declare_private_property_0_90035": "Zadeklaruj właściwość prywatną „{0}”", + "Declare_property_0_90016": "Zadeklaruj właściwość „{0}”", + "Declare_static_method_0_90024": "Zadeklaruj metodę statyczną „{0}”", + "Declare_static_property_0_90027": "Zadeklaruj właściwość statyczną „{0}”", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "Zwracany typ funkcji dekoratora „{0}” nie jest możliwy do przypisania do typu „{1}”.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Zwracany typ funkcji dekoratora to „{0}”, natomiast powinien być to typ „void” lub „any”.", + "Decorator_used_before_export_here_1486": "Dekorator używany przed elementem „export” w tym miejscu.", + "Decorators_are_not_valid_here_1206": "Elementy Decorator nie są tutaj prawidłowe.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Nie można stosować elementów Decorator do wielu metod dostępu pobierania/ustawiania o takiej samej nazwie.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratory nie mogą występować po instrukcji „export” lub „export default”, jeśli występują również przed instrukcją „export”.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratory muszą poprzedzać nazwę i wszystkie słowa kluczowe deklaracji właściwości.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Wpisz zmienne klauzuli catch jako „unknown” zamiast „any”.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Domyślny eksport modułu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Eksportów domyślnych nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Importy domyślne są niedozwolone w odroczonym imporcie.", + "Default_library_1424": "Domyślna biblioteka", + "Default_library_for_target_0_1425": "Domyślna biblioteka dla elementu docelowego „{0}”", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Odroczone importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „esnext” lub „preserve”.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Definicje następujących identyfikatorów powodują konflikt z tymi w innym pliku: {0}", + "Delete_all_unused_declarations_95024": "Usuń wszystkie nieużywane deklaracje", + "Delete_all_unused_imports_95147": "Usuń wszystkie nieużywane importy", + "Delete_all_unused_param_tags_95172": "Usuń wszystkie nieużywane tagi „@param”", + "Delete_the_outputs_of_all_projects_6365": "Usuń dane wyjściowe wszystkich projektów.", + "Delete_unused_param_tag_0_95171": "Usuń nieużywany tag „@param” „{0}”", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Przestarzałe] Użyj w zastępstwie opcji „--jsxFactory”. Określ obiekt wywoływany dla elementu createElement przy określaniu jako celu emisji JSX „react”", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Przestarzałe] Użyj w zastępstwie opcji „--outFile”. Połącz dane wyjściowe i wyemituj jako jeden plik", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Przestarzałe] Użyj w zastępstwie opcji „--skipLibCheck”. Pomiń sprawdzanie typów domyślnych plików deklaracji biblioteki.", + "Deprecated_setting_Use_outFile_instead_6677": "Przestarzałe ustawienie. Zamiast tego użyj elementu „outFile”.", + "Did_you_forget_to_use_await_2773": "Czy zapomniano użyć operatora „await”?", + "Did_you_mean_0_1369": "Czy chodziło Ci o „{0}”?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Czy chodziło Ci o ograniczenie elementu „{0}” do typu „new (...args: any[]) => {1}”?", + "Did_you_mean_to_call_this_expression_6212": "Czy chodziło Ci o wywołanie tego wyrażenia?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Czy chodziło Ci o oznaczenie tej funkcji jako „async”?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Czy chodziło o użycie znaku „:”? Znak „=” może występować po nazwie właściwości tylko wtedy, gdy zawierający literał obiektu jest częścią wzorca usuwającego strukturę.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Czy chodziło Ci o użycie operatora „new” z tym wyrażeniem?", + "Digit_expected_1124": "Oczekiwano cyfry.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "Katalog „{0}” nie istnieje. Operacje wyszukiwania w nim zostaną pominięte.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "Katalog „{0}” nie zawiera zakresu package.json. Importy nie zostaną rozpoznane.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Wyłącz dodawanie dyrektyw „use strict” w emitowanych plikach JavaScript.", + "Disable_checking_for_this_file_90018": "Wyłącz sprawdzanie dla tego pliku", + "Disable_emitting_comments_6688": "Wyłącz emitowanie komentarzy.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Wyłącz emitowanie deklaracji mających element „@internal” w komentarzach JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Wyłącz emitowanie plików z kompilacji.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Wyłącz emitowanie plików, jeśli zostaną zgłoszone jakiekolwiek błędy sprawdzania typów.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Wyłącz wymazywanie deklaracji „const enum” w wygenerowanym kodzie.", + "Disable_error_reporting_for_unreachable_code_6603": "Wyłącz raportowanie błędów dla nieosiągalnego kodu.", + "Disable_error_reporting_for_unused_labels_6604": "Wyłącz raportowanie błędów dla nieużywanych etykiet.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Wyłącz sprawdzanie pełnego typu (będą zgłaszane tylko krytyczne analizy i błędy emisji).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Wyłącz generowanie niestandardowych funkcji pomocniczych, takich jak „__extends” w skompilowanych danych wyjściowych.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Wyłącz dołączanie plików bibliotek, w tym domyślnego pliku lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Wyłącz ładowanie przywoływanych projektów.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Wyłącz preferowanie plików źródłowych zamiast plików deklaracji podczas odwoływania się do projektów złożonych.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Wyłącz raportowanie błędów dotyczących nadmiarowych właściwości podczas tworzenia literałów obiektów.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Wyłącz rozpoznawanie linków symbolicznych jako ścieżek rzeczywistych. Odpowiada to takiej samej fladze na platformie Node.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Wyłącz ograniczenia rozmiarów dla projektów JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Wyłącz wyszukiwanie rozwiązania dla tego projektu.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Wyłącz dokładne sprawdzanie sygnatur ogólnych w typach funkcji.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Wyłącz pozyskiwanie typów dla projektów JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Wyłącz obcinanie typów w komunikatach o błędach.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Wyłącz używanie plików źródłowych zamiast plików deklaracji z przywoływanych projektów.", + "Disable_wiping_the_console_in_watch_mode_6684": "Wyłącz czyszczenie konsoli w trybie obserwacji.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Wyłącz wnioskowanie dla pozyskiwania typów przez sprawdzanie nazw plików w projekcie.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Nie zezwalaj elementom „import”, „require” i „” na zwiększanie liczby plików, które powinny zostać dodane do projektu przez język TypeScript.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Nie zezwalaj na przywoływanie tego samego pliku za pomocą nazw różniących się wielkością liter.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Nie dodawaj odwołań z trzema ukośnikami ani zaimportowanych modułów do listy skompilowanych plików.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Nie zezwalaj na konstrukcje środowiska uruchomieniowego, które nie są częścią języka ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Nie emituj komentarzy do danych wyjściowych.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Nie emituj deklaracji dla kodu z adnotacją „@internal”.", + "Do_not_emit_outputs_6010": "Nie emituj danych wyjściowych.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Nie emituj danych wyjściowych w przypadku zgłoszenia błędów.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Nie emituj dyrektyw „use strict” w danych wyjściowych modułu.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Nie wymazuj deklaracji wyliczeń ze specyfikacją const w wygenerowanym kodzie.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Nie generuj w skompilowanych danych wyjściowych niestandardowych funkcji pomocy, takich jak „__extends”.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Nie uwzględniaj domyślnego pliku biblioteki (lib.d.ts).", + "Do_not_report_errors_on_unreachable_code_6077": "Nie zgłaszaj błędów dla nieosiągalnego kodu.", + "Do_not_report_errors_on_unused_labels_6074": "Nie zgłaszaj błędów dla nieużywanych etykiet.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Nie rozpoznawaj rzeczywistej ścieżki linków symbolicznych.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Nie przekształcaj ani nie usuwaj żadnych importów ani eksportów, które nie są oznaczone jako tylko typy, dzięki czemu są zapisywane w formacie pliku wyjściowego na podstawie ustawienia „module”.", + "Do_not_truncate_error_messages_6165": "Nie obcinaj komunikatów o błędach.", + "Duplicate_function_implementation_2393": "Zduplikowana implementacja funkcji.", + "Duplicate_identifier_0_2300": "Zduplikowany identyfikator „{0}”.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Zduplikowany identyfikator „{0}”. Kompilator rezerwuje nazwę „{1}” w zakresie najwyższego poziomu modułu zawierającego funkcje asynchroniczne.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Zduplikowany identyfikator \"{0}\". Kompilator rezerwuje nazwę \"{1}\" podczas emisji odwołań \"super\" w inicjatorach statycznych.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Zduplikowany identyfikator „{0}”. Kompilator używa deklaracji „{1}” do obsługi funkcji asynchronicznych.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Zduplikowany identyfikator „{0}”. Elementy statyczne i elementy wystąpienia nie mogą mieć tej samej nazwy prywatnej.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Zduplikowany identyfikator „arguments”. Kompilator używa ciągu „arguments” do zainicjowania parametrów rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Powielony identyfikator „_newTarget”. Kompilator używa deklaracji zmiennej „_newTarget” do przechwytywania odwołania do metawłaściwości „new.target”.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Zduplikowany identyfikator „_this”. Kompilator używa deklaracji zmiennej „_this” do przechwycenia odwołania do elementu „this”.", + "Duplicate_index_signature_for_type_0_2374": "Zduplikowana sygnatura indeksu dla typu „{0}”.", + "Duplicate_label_0_1114": "Zduplikowana etykieta „{0}”.", + "Duplicate_property_0_2718": "Zduplikowana właściwość „{0}”.", + "Duplicate_regular_expression_flag_1500": "Zduplikowana flaga wyrażenia regularnego.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Specyfikator dynamicznego importowania musi być typu „string”, ale określono typ „{0}”.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dynamiczne importy są obsługiwane tylko wtedy, gdy flaga „--module” jest ustawiona na wartość „es2020”, „es2022”, „esnext”, „commonjs”, „amd”, „system”, „umd”, „node16”, „node18”, „node20” lub „nodenext”.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Importy dynamiczne mogą akceptować tylko specyfikator modułu i opcjonalny zestaw atrybutów jako argumenty", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Importy dynamiczne obsługują drugi argument tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "Składnia ESM jest niedozwolona w module CommonJS, gdy element „module” jest ustawiony na wartość „preserve”.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "Składnia ESM jest niedozwolona w module CommonJS, gdy jest włączona opcja „verbatimModuleSyntax”.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Każda deklaracja znaku „{0}.{1}” różni się wartością, gdzie oczekiwano elementu „{2}”, ale podano „{3}”.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Każdy element członkowski typu unii „{0}” ma sygnatury konstrukcji, ale żadne z tych sygnatur nie są ze sobą zgodne.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Każdy element członkowski typu unii „{0}” ma sygnatury, ale żadne z tych sygnatur nie są ze sobą zgodne.", + "Editor_Support_6249": "Pomoc techniczna edytora", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "Element ma niejawnie typ „any”, ponieważ wyrażenie typu „{0}” nie może być używane do indeksowania typu „{1}”.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Element niejawnie przyjmuje typ „any”, ponieważ wyrażenie indeksu ma typ inny niż „number”.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "Element ma niejawnie typ „any”, ponieważ typ „{0}” nie ma sygnatury indeksu. Czy chodziło o wywołanie „{1}”?", + "Emit_6246": "Emituj", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emituj pola klasy zgodne ze standardem ECMAScript.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emituj znacznik kolejności bajtów UTF-8 na początku plików wyjściowych.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emituj pojedynczy plik z mapami źródeł zamiast oddzielnego pliku.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emituj profil procesora CPU v8 dla uruchomienia kompilatora na potrzeby debugowania.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emituj dodatkowy kod JavaScript, aby ułatwić obsługę importowania modułów CommonJS. Włącza to opcję „allowSyntheticDefaultImports” na potrzeby zgodności typów.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Emituj pola klasy przy użyciu metody Define zamiast Set.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emituj metadane typu „design” dla dekorowanych deklaracji w plikach źródłowych.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emituj bardziej zgodny, ale dosłowny i mniej wydajny JavaScript dla iteracji.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emituj źródło razem z mapami źródeł w pojedynczym pliku; wymaga ustawienia opcji „--inlineSourceMap” lub „--sourceMap”.", + "Enable_all_strict_type_checking_options_6180": "Włącz wszystkie opcje ścisłego sprawdzania typów.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Włącz kolor i formatowanie w danych wyjściowych języka TypeScript, aby ułatwić odczytywanie błędów kompilatora.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Włącz ograniczenia zezwalające na używanie projektu języka TypeScript z odwołaniami do projektów.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Włącz raportowanie błędów dla ścieżek kodu, które nie zwracają jawnie funkcji.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Włącz raportowanie błędów dla wyrażeń i deklaracji z dorozumianym typem „any”.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Włącz raportowanie błędów dla przypadków rezerwowych w instrukcjach switch.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Włącz raportowanie błędów w plikach JavaScript z zaznaczonym typem.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Włącz raportowanie błędów, gdy zmienne lokalne nie są odczytywane.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Włącz raportowanie błędów, gdy element „this” ma typ „any”.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Włącz eksperymentalną obsługę starszych dekoratorów eksperymentalnych.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Włącz importowanie plików z dowolnym rozszerzeniem, pod warunkiem, że istnieje plik deklaracji.", + "Enable_importing_json_files_6689": "Włącz importowanie plików json.", + "Enable_lib_replacement_6808": "Włącz zastępowanie biblioteki.", + "Enable_project_compilation_6302": "Włącz kompilację projektu", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Włącz ścisłe metody „bind”, „call” i „apply” dla funkcji.", + "Enable_strict_checking_of_function_types_6186": "Włącz dokładne sprawdzanie typów funkcji.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Włącz dokładne sprawdzanie inicjowania właściwości w klasach.", + "Enable_strict_null_checks_6113": "Włącz dokładne sprawdzanie wartości null.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Włącz opcję „experimentalDecorators” w pliku konfiguracji", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Włącz flagę „--jsx” w pliku konfiguracji", + "Enable_tracing_of_the_name_resolution_process_6085": "Włącz śledzenie procesu rozpoznawania nazw.", + "Enable_verbose_logging_6713": "Włącz pełne rejestrowanie.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Umożliwia współdziałanie emitowania między modułami CommonJS i ES przez tworzenie obiektów przestrzeni nazw dla wszystkich importów. Implikuje użycie ustawienia „allowSyntheticDefaultImports”.", + "Enables_experimental_support_for_ES7_decorators_6065": "Umożliwia obsługę eksperymentalną elementów Decorator języka ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Umożliwia obsługę eksperymentalną emitowania metadanych typów elementów Decorator.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Wymuszaj używanie indeksowanych metod dostępu dla kluczy deklarowanych przy użyciu typu indeksowanego.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Upewnij się, że przesłaniające elementy członkowskie w klasach pochodnych są oznaczone modyfikatorem „override”.", + "Ensure_that_casing_is_correct_in_imports_6637": "Upewnij się, że wielkość liter jest poprawna w importach.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Upewnij się, że każdy plik może być bezpiecznie transponowany bez polegania na innych importach.", + "Ensure_use_strict_is_always_emitted_6605": "Upewnij się, że element „use strict” jest zawsze emitowany.", + "Entering_conditional_exports_6413": "Wprowadzanie eksportów warunkowych.", + "Entry_point_for_implicit_type_library_0_1420": "Punkt wejścia dla biblioteki niejawnych typów „{0}”", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Punkt wejścia dla biblioteki niejawnych typów „{0}” o identyfikatorze packageId „{1}”", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Punkt wejścia biblioteki typów „{0}” określony w opcjach compilerOptions o identyfikatorze packageId „{1}”", + "Enum_0_used_before_its_declaration_2450": "Wyliczenie „{0}” zostało użyte przed zadeklarowaniem.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Deklaracje wyliczeń można scalać tylko z przestrzeniami nazw lub innymi deklaracjami wyliczeń.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Wszystkie deklaracje wyliczeń muszą być elementami const lub żadna nie może być elementem const.", + "Enum_member_expected_1132": "Oczekiwano składowych wyliczenia.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Składowa wyliczenia następująca po składowej liczbowej niebędącej literałem musi mieć inicjator, gdy jest włączona opcja „isolatedModules”.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Inicjatory składowych wyliczenia muszą być możliwe do obliczenia bez odwołań do symboli zewnętrznych z wyrażeniem --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "Składowa wyliczenia musi mieć inicjator.", + "Enum_name_cannot_be_0_2431": "Wyliczenie nie może mieć nazwy „{0}”.", + "Environment_Settings_6285": "Ustawienia środowiska", + "Errors_Files_6041": "Pliki z błędami", + "Escape_sequence_0_is_not_allowed_1488": "Sekwencja ucieczki „{0}” jest niedozwolona.", + "Examples_Colon_0_6026": "Przykłady: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Nadmierna złożoność podczas porównywania typów „{0}” i „{1}”.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Nadmierna głębokość stosu podczas porównywania typów „{0}” i „{1}”.", + "Exiting_conditional_exports_6416": "Wyjście z eksportu warunkowego.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Oczekiwano argumentów typu {0}-{1}; podaj je z tagiem „@extends”.", + "Expected_0_arguments_but_got_1_2554": "Oczekiwane argumenty: {0}, uzyskano: {1}.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "Oczekiwano {0} argumentów, ale otrzymano {1}. Czy zapomniano dołączyć wartość „void” w argumencie typu obiektu „Promise”?", + "Expected_0_type_arguments_but_got_1_2558": "Oczekiwane argumenty typu: {0}, uzyskano: {1}.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Oczekiwano argumentów typu {0}; podaj je z tagiem „@extends”.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Oczekiwano 1 argumentu, ale otrzymano 0. Element „new Promise()” wymaga wskazówki JSDoc, aby utworzyć element „resolve”, który można wywołać bez argumentów.", + "Expected_a_Unicode_property_name_1523": "Oczekiwano nazwy właściwości standardu Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Oczekiwano nazwy lub wartości właściwości standardu Unicode.", + "Expected_a_Unicode_property_value_1525": "Oczekiwano wartości właściwości standardu Unicode.", + "Expected_a_capturing_group_name_1514": "Oczekiwano nazwy grupy przechwytywania.", + "Expected_a_class_set_operand_1520": "Oczekiwano operandu zestawu klas.", + "Expected_at_least_0_arguments_but_got_1_2555": "Oczekiwane argumenty: co najmniej {0}, uzyskano: {1}.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Oczekiwano odpowiadającego tagu zamykającego kodu JSX dla elementu „{0}”.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Oczekiwano odpowiedniego tagu zamykającego dla fragmentu kodu JSX.", + "Expected_for_property_initializer_1442": "Oczekiwano znaku „=” dla inicjatora właściwości.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "Oczekiwany typ pola „{0}” w pliku „package.json” to „{1}”, a uzyskano typ „{2}”.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Jawnie określony rodzaj rozpoznawania modułów: „{0}”.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "Nie można wykonać potęgowania wartości typu „bigint”, chyba że opcja „target” ma wartość „es2016” lub nowszą.", + "Export_0_from_module_1_90059": "Eksportuj „{0}” z modułu „{1}”", + "Export_all_referenced_locals_90060": "Eksportuj wszystkie przywoływane zmienne lokalne", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Nie można użyć przypisania eksportu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „export default” lub innego formatu modułu.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "Przypisanie eksportu nie jest obsługiwane, gdy flaga „--module” ma postać „system”.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Deklaracja eksportu powoduje konflikt z wyeksportowaną deklaracją „{0}”.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Deklaracje eksportu są niedozwolone w przestrzeni nazw.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "Specyfikator eksportu „{0}” nie istnieje w zakresie package.json w ścieżce „{1}”.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Alias „{0}” wyeksportowanego typu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Wyeksportowany alias typu „{0}” ma nazwę prywatną „{1}” z modułu „{2}” lub używa tej nazwy.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Wyeksportowana zmienna „{0}” ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Wyeksportowana zmienna „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Eksporty i przypisania eksportów nie są dozwolone w rozszerzeniach modułów.", + "Expression_expected_1109": "Oczekiwano wyrażenia.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "Wyrażenie musi być ujęte w nawiasy, aby było używane jako dekorator.", + "Expression_or_comma_expected_1137": "Oczekiwano wyrażenia lub przecinka.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "Wyrażenie tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "Wyrażenie tworzy typ unii, który jest zbyt złożony, aby go reprezentować.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "Wynikiem rozpoznania wyrażenia jest element „_super” używany przez kompilator do przechwycenia odwołania do klasy bazowej.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_newTarget” używana przez kompilator do przechwytywania odwołania do metawłaściwości „new.target”.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "Wynikiem rozpoznania wyrażenia jest deklaracja zmiennej „_this” używana przez kompilator do przechwycenia odwołania do elementu „this”.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "Nie można wywnioskować typu wyrażenia za pomocą wyrażenia --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Klauzula Extends nie może zawierać wyrażenia z parametrem --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Klauzula Extends dla wnioskowanego typu „{0}” ma nazwę prywatną „{1}” lub używa jej.", + "Extract_base_class_to_variable_90064": "Wyodrębnij klasę bazową do zmiennej", + "Extract_binding_expressions_to_variable_90066": "Wyodrębnianie wyrażeń powiązania do zmiennej", + "Extract_constant_95006": "Wyodrębnij stałą", + "Extract_default_export_to_variable_90065": "Wyodrębnij domyślny eksport do zmiennej", + "Extract_function_95005": "Wyodrębnij funkcję", + "Extract_to_0_in_1_95004": "Wyodrębnij do {0} w {1}", + "Extract_to_0_in_1_scope_95008": "Wyodrębnij do {0} w zakresie {1}", + "Extract_to_0_in_enclosing_scope_95007": "Wyodrębnij do {0} w zakresie otaczającym", + "Extract_to_interface_95090": "Wyodrębnianie do interfejsu", + "Extract_to_type_alias_95078": "Wyodrębnianie do aliasu typu", + "Extract_to_typedef_95079": "Wyodrębnianie do elementu typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Wyodrębnij do zmiennej i zamień na „{0} as typeof {0}”", + "Extract_type_95077": "Typ wyodrębniania", + "FILE_6035": "PLIK", + "FILE_OR_DIRECTORY_6040": "PLIK LUB KATALOG", + "Failed_to_find_peerDependency_0_6283": "Nie można odnaleźć elementu peerDependency „{0}”.", + "Failed_to_resolve_under_condition_0_6415": "Nie można rozpoznać pod warunkiem „{0}”.", + "Fallthrough_case_in_switch_7029": "Przepuszczająca klauzula case w instrukcji switch.", + "File_0_does_not_exist_6096": "Plik „{0}” nie istnieje.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” nie istnieje.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "Biorąc pod uwagę wcześniejsze wyszukiwania w pamięci podręcznej, plik „{0}” istnieje.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "Plik „{0}” istnieje — użyj go jako wyniku rozpoznawania nazw.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "Plik „{0}” ma nieobsługiwane rozszerzenie. Obsługiwane są tylko rozszerzenia {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "Plik „{0}” jest plikiem JavaScript. Czy chodziło Ci o włączenie opcji „allowJs”?", + "File_0_is_not_a_module_2306": "Plik „{0}” nie jest modułem.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "Plik „{0}” nie znajduje się na liście plików projektu „{1}”. Projekty muszą zawierać listę wszystkich plików lub używać wzorca „include”.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "Plik „{0}” nie znajduje się w katalogu „rootDir” „{1}”. Katalog „rootDir” powinien zawierać wszystkie pliki źródłowe.", + "File_0_not_found_6053": "Nie można odnaleźć pliku '{0}'.", + "File_Layout_6284": "Układ pliku", + "File_Management_6245": "Zarządzanie plikami", + "File_appears_to_be_binary_1490": "Plik jest prawdopodobnie binarny.", + "File_change_detected_Starting_incremental_compilation_6032": "Wykryto zmianę pliku. Trwa rozpoczynanie kompilacji przyrostowej...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "Plik jest modułem CommonJS, ponieważ element „{0}” nie ma pola „type”", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "Plik jest modułem CommonJS, ponieważ element „{0}” ma pole „type”, którego wartość nie jest „module”", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "Plik jest modułem CommonJS, ponieważ nie znaleziono pliku „package.json”", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "Plik jest modułem ECMAScript, ponieważ element „{0}” ma pole „type” z wartością „module”", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Plik jest modułem CommonJS; może zostać przekonwertowany na moduł ES.", + "File_is_default_library_for_target_specified_here_1426": "Plik to domyślna biblioteka dla elementu docelowego określonego w tym miejscu.", + "File_is_entry_point_of_type_library_specified_here_1419": "Plik to punkt wejścia biblioteki typów określonej w tym miejscu.", + "File_is_included_via_import_here_1399": "Plik jest dołączony w tym miejscu za pomocą importu.", + "File_is_included_via_library_reference_here_1406": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki.", + "File_is_included_via_reference_here_1401": "Plik jest dołączony w tym miejscu za pomocą odwołania.", + "File_is_included_via_type_library_reference_here_1404": "Plik jest dołączony w tym miejscu za pomocą odwołania do biblioteki typów.", + "File_is_library_specified_here_1423": "Plik to biblioteka określona w tym miejscu.", + "File_is_matched_by_files_list_specified_here_1410": "Plik jest zgodny z listą „files” określoną w tym miejscu.", + "File_is_matched_by_include_pattern_specified_here_1408": "Plik jest zgodny z wzorcem dołączania określonym w tym miejscu.", + "File_is_output_from_referenced_project_specified_here_1413": "Plik to dane wyjściowe z przywoływanego projektu określonego w tym miejscu.", + "File_is_output_of_project_reference_source_0_1428": "Plik to dane wyjściowe ze źródła odwołania do projektu „{0}”", + "File_is_source_from_referenced_project_specified_here_1416": "Plik to źródło z przywoływanego projektu określonego w tym miejscu.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "Nazwa pliku „{0}” różni się od już dołączonej nazwy pliku „{1}” tylko wielkością liter.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zamiast tego wyszukaj „{2}”.", + "File_name_0_has_a_1_extension_stripping_it_6132": "Nazwa pliku „{0}” ma rozszerzenie „{1}” — zostanie ono usunięte.", + "File_redirects_to_file_0_1429": "Plik przekierowuje do pliku „{0}”", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Specyfikacja pliku nie może zawierać katalogu nadrzędnego („..”) wyświetlanego po symbolu wieloznacznym katalogu rekursywnego („**”): „{0}”.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Specyfikacja pliku nie może kończyć się cyklicznym symbolem wieloznacznym katalogu („**”): „{0}”.", + "Filters_results_from_the_include_option_6627": "Filtruj wyniki z opcji „include”.", + "Fix_all_detected_spelling_errors_95026": "Napraw wszystkie wykryte błędy pisowni", + "Fix_all_expressions_possibly_missing_await_95085": "Napraw wszystkie wyrażenia, w których prawdopodobnie brakuje operatora „await”", + "Fix_all_implicit_this_errors_95107": "Usuń wszystkie niejawne błędy „this”", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Napraw wszystkie niepoprawne zwracane typy funkcji asynchronicznych", + "Fix_all_with_type_only_imports_95182": "Napraw wszystko za pomocą importów tylko typów", + "For_nodejs_Colon_6287": "W przypadku środowiska nodejs:", + "Found_0_errors_6217": "Znaleziono błędy: {0}.", + "Found_0_errors_Watching_for_file_changes_6194": "Znalezione błędy: {0}. Obserwowanie zmian plików.", + "Found_0_errors_in_1_files_6261": "Znaleziono błędy {0} w plikach {1}.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Znaleziono błędy {0} w tym samym pliku, zaczynając od: {1}", + "Found_1_error_6216": "Znaleziono 1 błąd.", + "Found_1_error_Watching_for_file_changes_6193": "Znaleziono 1 błąd. Obserwowanie zmian plików.", + "Found_1_error_in_0_6259": "Znaleziono 1 błąd w {0}", + "Found_package_json_at_0_6099": "Znaleziono plik „package.json” w lokalizacji „{0}”.", + "Found_peerDependency_0_with_1_version_6282": "Znaleziono element peerDependency „{0}” z wersją „{1}”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Definicje klas automatycznie używają trybu z ograniczeniami.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Deklaracje funkcji nie są dozwolone wewnątrz bloków w trybie z ograniczeniami, jeśli elementem docelowym jest „ES5”. Moduły automatycznie używają trybu z ograniczeniami.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dla wyrażenia funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "Brak implementacji funkcji lub nie występuje ona bezpośrednio po deklaracji.", + "Function_implementation_name_must_be_0_2389": "Implementacja funkcji musi mieć nazwę „{0}”.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dla funkcji niejawnie określono zwracany typ „any”, ponieważ nie zawiera ona adnotacji zwracanego typu i jest przywoływana bezpośrednio lub pośrednio w jednym z jej zwracanych wyrażeń.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "Funkcja nie zawiera końcowej instrukcji return, a zwracany typ nie obejmuje wartości „undefined”.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "Funkcja musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", + "Function_not_implemented_95159": "Funkcja nie jest zaimplementowana.", + "Function_overload_must_be_static_2387": "Przeciążenie funkcji musi być statyczne.", + "Function_overload_must_not_be_static_2388": "Przeciążenie funkcji nie może być statyczne.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie unii.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "Notacja typu funkcji musi być ujęta w nawiasy, jeśli jest używana w typie przecięcia.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dla typu funkcji bez adnotacji zwracanego typu jest niejawnie określony zwracany typ „{0}”.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Funkcja z treścią może tylko scalać z klasami, które są otaczające.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Generuj pliki d.ts z plików TypeScript i JavaScript w projekcie.", + "Generate_get_and_set_accessors_95046": "Generuj metody dostępu „get” i „set”.", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Generuj metody dostępu „get” i „set” dla wszystkich właściwości przesłaniających", + "Generates_a_CPU_profile_6223": "Generuje profil procesora CPU.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Generuje mapę źródła dla poszczególnych plików „.d.ts”.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Generuje śledzenie zdarzeń i listę typów.", + "Generates_corresponding_d_ts_file_6002": "Generuje odpowiadający plik „d.ts”.", + "Generates_corresponding_map_file_6043": "Generuje odpowiadający plik „map”.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Generator niejawnie ma typ wstrzymania „{0}”. Rozważ podanie adnotacji zwracanego typu.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Generatory nie są dozwolone w otaczającym kontekście.", + "Generic_type_0_requires_1_type_argument_s_2314": "Typ ogólny „{0}” wymaga następującej liczby argumentów typu: {1}.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "Typ ogólny „{0}” wymaga od {1} do {2} argumentów typu.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Globalne eksporty modułu mogą występować tylko na najwyższym poziomie.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Globalne eksporty modułu mogą występować tylko w plikach deklaracji.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Globalne eksporty modułu mogą występować tylko w plikach modułów.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "Typ globalny „{0}” musi być typem klasy lub interfejsu.", + "Global_type_0_must_have_1_type_parameter_s_2317": "Typ globalny „{0}” musi mieć następującą liczbę parametrów typu: {1}.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "W przypadku ponownego kompilowania w parametrach „--incremental” i „--watch” przyjmuje się, że zmiany w pliku będą miały wpływ tylko na pliki bezpośrednio od niego zależne.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Określ, że zmiany w pliku będą wpływać tylko na pliki bezpośrednio od niego zależne podczas ponownego kompilowania w projektach używających trybów „przyrostowo” i „obserwacja”.", + "Hexadecimal_digit_expected_1125": "Oczekiwano cyfry szesnastkowej.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym na najwyższym poziomie modułu.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Oczekiwano identyfikatora. „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami. Definicje klas są określane automatycznie w trybie z ograniczeniami.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Oczekiwano identyfikatora. Element „{0}” jest wyrazem zastrzeżonym w trybie z ograniczeniami. Moduły są określane automatycznie w trybie z ograniczeniami.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Oczekiwano identyfikatora. „{0}” jest słowem zastrzeżonym, którego nie można użyć w tym miejscu.", + "Identifier_expected_1003": "Oczekiwano identyfikatora.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Oczekiwano identyfikatora. Ciąg „__esModule” jest zastrzeżony jako eksportowany znacznik podczas transformowania modułów ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Oczekiwano identyfikatora lub literału ciągu.", + "Identifier_string_literal_or_number_literal_expected_1496": "Oczekiwano identyfikatora, literału ciągu lub literału liczbowego.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Jeśli pakiet \"{0}\" faktycznie udostępnia ten moduł, rozważ wysłanie żądania ściągnięcia w celu zmiany elementu \"https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}\"", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Jeśli pakiet „{0}” rzeczywiście uwidacznia ten moduł, spróbuj dodać nowy plik deklaracji (.d.ts) zawierający „declare module”{1}';`", + "Ignore_this_error_message_90019": "Ignoruj ten komunikat o błędzie", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorując plik tsconfig.json, kompiluje określone pliki z domyślnymi opcjami kompilatora.", + "Implement_all_inherited_abstract_classes_95040": "Zaimplementuj wszystkie dziedziczone klasy abstrakcyjne", + "Implement_all_unimplemented_interfaces_95032": "Zaimplementuj wszystkie niezaimplementowane interfejsy", + "Implement_inherited_abstract_class_90007": "Wdróż odziedziczoną klasę abstrakcyjną", + "Implement_interface_0_90006": "Implementuj interfejs „{0}”", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "Klauzula implements wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "Niejawna konwersja typu „symbol” na „string” zakończy się niepowodzeniem w czasie wykonywania. Rozważ opakowywanie tego wyrażenia w elemencie „String(...)”.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "Import „{0}\" powoduje konflikt z wartością globalną używaną w tym pliku, dlatego musi być zadeklarowany z importem tylko typu, gdy jest włączona opcja „isolatedModules”.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "Import „{0}” powoduje konflikt z wartością lokalną, dlatego musi być zadeklarowany za pomocą importu tylko typu, gdy jest włączona opcja „isolatedModules”.", + "Import_0_from_1_90013": "Importuj element „{0}” z lokalizacji „{1}”", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Wartości atrybutu importu muszą być wyrażeniami literału ciągu.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "Asercje importu są niedozwolone w instrukcjach, które kompilują do wywołań „require” CommonJS.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "Asercje importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node18”, „node20”, „nodenext” lub „preserve”.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "Asercji importu nie można używać z importami ani eksportami ograniczonymi do tylko danego typu.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "Asercje importu zostały zastąpione atrybutami importu. Użyj instrukcji \"with\" zamiast \"assert\".", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Nie można użyć przypisania importu, gdy są używane moduły języka ECMAScript. Zamiast tego rozważ użycie elementu „import * as ns from \"mod\"”, „import {a} from \"mod\"” lub „import d from \"mod\"” albo innego formatu modułu.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Wartości atrybutów importu muszą być wyrażeniami literału ciągu.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atrybuty importu są niedozwolone w instrukcjach kompilowanych do wywołań „require” CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Atrybuty importu są obsługiwane tylko wtedy, gdy opcja „--module” jest ustawiona na wartość „esnext”, „node18”, „node20”, „nodenext” lub „preserve”.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Atrybutów importu nie można używać z importami ani eksportami tylko typów.", + "Import_declaration_0_is_using_private_name_1_4000": "Deklaracja importu „{0}” używa nazwy prywatnej „{1}”.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "Deklaracja importu powoduje konflikt z deklaracją lokalną „{0}”.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Deklaracje importu w przestrzeni nazw nie mogą odwoływać się do modułu.", + "Import_emit_helpers_from_tslib_6139": "Importuj pomocników emitowania z elementu „tslib”.", + "Import_may_be_converted_to_a_default_import_80003": "Import może zostać przekonwertowany na import domyślny.", + "Import_name_cannot_be_0_2438": "Import nie może mieć nazwy „{0}”.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Deklaracja importu lub eksportu w deklaracji otaczającego modułu nie może przywoływać modułu za pomocą jego nazwy względnej.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "Specyfikator importu „{0}” nie istnieje w zakresie package.json w ścieżce „{1}”.", + "Imported_via_0_from_file_1_1393": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}”", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}”", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania elementów „importHelpers” zgodnie z opcjami compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Zaimportowano za pośrednictwem elementu {0} z pliku „{1}” o identyfikatorze packageId „{2}” w celu zaimportowania funkcji fabryki „jsx” i „jsxs”", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Importowanie pliku JSON do modułu ECMAScript wymaga atrybutu importu „type: „json””, gdy parametr „module” ma wartość „{0}”.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importy nie są dozwolone w rozszerzeniach modułów. Rozważ przeniesienie ich do obejmującego modułu zewnętrznego.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "W deklaracjach wyliczenia otoczenia inicjator składowej musi być wyrażeniem stałym.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "W przypadku wyliczenia z wieloma deklaracjami tylko jedna deklaracja może pominąć inicjator dla pierwszego elementu wyliczenia.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dołącz listę plików. Nie obsługuje to wzorców globalnych, w przeciwieństwie do elementu „include”.", + "Include_modules_imported_with_json_extension_6197": "Uwzględnij moduły zaimportowane z rozszerzeniem „json”", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Uwzględnij kod źródłowy w mapach źródła wewnątrz emitowanego kodu JavaScript.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Uwzględnij pliki mapy źródła w emitowanym kodzie JavaScript.", + "Includes_imports_of_types_referenced_by_0_90054": "Obejmuje importy typów przywoływanych przez element \"{0}\"", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Zawarcie elementu --watch spowoduje, że -w rozpocznie obserwowanie bieżącego projektu w kierunku zmian w plikach. Po skonfigurowaniu ustawienia możesz określić tryb obserwacji za pomocą:", + "Incomplete_quantifier_Digit_expected_1505": "Niekompletny kwantyfikator. Oczekiwano cyfry.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "Brak sygnatury indeksu dla typu „{0}” w typie „{1}”.", + "Index_signature_in_type_0_only_permits_reading_2542": "Sygnatura indeksu w typie „{0}” zezwala tylko na odczytywanie.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Wszystkie poszczególne deklaracje w scalonej deklaracji „{0}” muszą być wyeksportowane lub lokalne.", + "Infer_all_types_from_usage_95023": "Wywnioskuj wszystkie typy na podstawie użycia", + "Infer_function_return_type_95148": "Wnioskuj zwracany typ funkcji", + "Infer_parameter_types_from_usage_95012": "Wnioskuj typy parametrów na podstawie użycia", + "Infer_this_type_of_0_from_usage_95080": "Wnioskuj typ „this” elementu „{0}” na podstawie użycia", + "Infer_type_of_0_from_usage_95011": "Wnioskuj typ elementu „{0}” na podstawie użycia", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Wnioskowanie z wyrażeń klasy nie jest obsługiwane w przypadku wyrażenia --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Zainicjuj właściwość „{0}” w konstruktorze", + "Initialize_static_property_0_90021": "Zainicjuj właściwość statyczną „{0}”", + "Initializer_for_property_0_2811": "Inicjator właściwości \"{0}\"", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "Inicjator zmiennej składowej wystąpienia „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego w konstruktorze.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicjatory są niedozwolone w otaczających kontekstach.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicjuje projekt TypeScript i tworzy plik tsconfig.json.", + "Inline_variable_95184": "Zmienna wbudowana", + "Insert_command_line_options_and_files_from_a_file_6030": "Wstaw opcje wiersza polecenia i pliki z pliku.", + "Install_0_95014": "Zainstaluj składnik „{0}”", + "Install_all_missing_types_packages_95033": "Zainstaluj wszystkie brakujące pakiety typów", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "Interfejs „{0}” nie może jednocześnie rozszerzać typów „{1}” i „{2}”.", + "Interface_0_incorrectly_extends_interface_1_2430": "Interfejs „{0}” niepoprawnie rozszerza interfejs „{1}”.", + "Interface_declaration_cannot_have_implements_clause_1176": "Deklaracja interfejsu nie może mieć klauzuli „implements”.", + "Interface_must_be_given_a_name_1438": "Interfejs musi mieć nazwę.", + "Interface_name_cannot_be_0_2427": "Interfejs nie może mieć nazwy „{0}”.", + "Interop_Constraints_6252": "Ograniczenia międzyoperacyjności", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interpretuj opcjonalne typy właściwości jako zapisane, zamiast dodawać element \"undefined\".", + "Invalid_character_1127": "Nieprawidłowy znak.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Nieprawidłowy specyfikator importu „{0}” nie ma możliwych rozwiązań.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nieprawidłowa nazwa modułu w rozszerzeniu. Moduł „{0}” jest rozpoznawany jako moduł bez typu na poziomie „{1}”, którego nie można rozszerzyć.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nieprawidłowa nazwa modułu w rozszerzeniu. Nie można znaleźć modułu „{0}”.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Nieprawidłowy opcjonalny łańcuch z nowego wyrażenia. Czy chodziło Ci o wywołanie „{0}()”?", + "Invalid_reference_directive_syntax_1084": "Nieprawidłowa składnia dyrektywy „reference”.", + "Invalid_syntax_in_decorator_1498": "Nieprawidłowa składnia w dekoratorze.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Nieprawidłowe użycie elementu \"{0}\". Nie można go użyć wewnątrz bloku statycznego klasy.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Nieprawidłowe użycie elementu „{0}”. Moduły są określane automatycznie w trybie z ograniczeniami.", + "Invalid_use_of_0_in_strict_mode_1100": "Nieprawidłowe użycie elementu „{0}” w trybie z ograniczeniami.", + "Invalid_value_for_ignoreDeprecations_5103": "Nieprawidłowa wartość parametru „--ignoreDeprecations”.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Nieprawidłowa wartość elementu „jsxFactory”. „{0}” to nie jest prawidłowy identyfikator ani kwalifikowana nazwa.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Nieprawidłowa wartość elementu „jsxFragmentFactory”. „{0}” nie jest prawidłowym identyfikatorem ani kwalifikowaną nazwą.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Nieprawidłowa wartość opcji „--reactNamespace”. Element „{0}” nie jest prawidłowym identyfikatorem.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Prawdopodobnie brakuje przecinka, aby oddzielić te dwa wyrażenia szablonu. Tworzą one wyrażenie szablonu z tagami, którego nie można wywołać.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Jego typ elementu „{0}” nie jest prawidłowym elementem JSX.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Jego typ wystąpienia „{0}” nie jest prawidłowym elementem JSX.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Jego zwracany typ „{0}” nie jest prawidłowym elementem JSX.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Jego typ „{0}” nie jest prawidłowym typem rozszerzenia JSX.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "Element JSDoc „@{0} {1}” nie pasuje do klauzuli „extends {2}”.", + "JSDoc_0_is_not_attached_to_a_class_8022": "Element JSDoc „@{0}” nie został dołączony do klasy.", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "Element „...” JSDoc może występować tylko w ostatnim parametrze sygnatury.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "Tag JSDoc „@param” tag ma nazwę „{0}”, ale nie ma parametru o tej nazwie.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "Tag JSDoc „@param” ma nazwę „{0}”, ale nie istnieje parametr o tej nazwie. Byłby on zgodny z elementem „arguments”, gdyby miał typ tablicy.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Element JSDoc typedef można przekonwertować na typ TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "Tag „@typedef” JSDoc powinien mieć adnotację typu lub powinien po nim następować tag „@property” lub „@member”.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Element JSDoc typedefs można przekonwertować na typy TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Typy JSDoc mogą być używane wyłącznie w komentarzach dokumentacji.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Typy JSDoc mogą być przenoszone do typów TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Atrybuty JSX muszą mieć przypisane wyrażenie, które nie jest puste.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "Element JSX „{0}” nie ma odpowiedniego tagu zamykającego.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "Klasa elementów JSX nie obsługuje atrybutów, ponieważ nie ma właściwości „{0}”.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Dla elementu JSX niejawnie określono typ „any”, ponieważ interfejs „JSX.{0}” nie istnieje.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Dla elementu JSX niejawnie określono typ „any”, ponieważ typ globalny „JSX.Element” nie istnieje.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "Typ elementu JSX „{0}” nie ma sygnatury konstrukcji ani wywołania.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementy JSX nie mogą mieć wielu atrybutów o tej samej nazwie.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Wyrażenia JSX nie mogą używać operatora przecinka. Czy chodziło Ci o zapisanie tablicy?", + "JSX_expressions_must_have_one_parent_element_2657": "Wyrażenia JSX muszą mieć jeden element nadrzędny.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "Fragment kodu JSX nie ma odpowiedniego tagu zamykającego.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "Wyrażenia dostępu do właściwości JSX nie mogą zawierać nazw przestrzeni nazw JSX", + "JSX_spread_child_must_be_an_array_type_2609": "Element podrzędny rozkładu JSX musi być typem tablicy.", + "JavaScript_Support_6247": "Pomoc techniczna języka JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "Cel skoku nie może przekraczać granicy funkcji.", + "KIND_6034": "RODZAJ", + "Keywords_cannot_contain_escape_characters_1260": "Słowa kluczowe nie mogą zawierać znaków ucieczki.", + "LOCATION_6037": "LOKALIZACJA", + "Language_and_Environment_6254": "Język i środowisko", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Lewa strona operatora „przecinek” jest nieużywana i nie ma żadnych efektów ubocznych.", + "Library_0_specified_in_compilerOptions_1422": "Biblioteka „{0}” została określona w opcjach compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Biblioteka jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", + "Line_break_not_permitted_here_1142": "Podział wiersza nie jest tutaj dozwolony.", + "Line_terminator_not_permitted_before_arrow_1200": "Terminator wiersza nie jest dozwolony przed strzałką.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista sufiksów nazw plików do przeszukania podczas rozpoznawania modułu.", + "List_of_folders_to_include_type_definitions_from_6161": "Lista folderów, z których mają być uwzględnione definicje typów.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Lista folderów głównych, których połączona zawartość reprezentuje strukturę projektu w czasie wykonywania.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Ładowanie elementu „{0}” z katalogu głównego „{1}”, lokalizacja kandydata: „{2}”.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Ładowanie modułu „{0}” z folderu „node_modules”, docelowy typ pliku: „{1}”.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Ładowanie modułu jako pliku/folderu, lokalizacja modułu kandydata: „{0}”, docelowy typ pliku: „{1}”.", + "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Ustawienia regionalne muszą mieć postać lub -. Na przykład „{0}” lub „{1}”.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Rejestruj ścieżki używane podczas procesu „moduleResolution”.", + "Longest_matching_prefix_for_0_is_1_6108": "Najdłuższy zgodny prefiks dla „{0}” to „{1}”.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Wyszukiwanie w folderze „node_modules”, początkowa lokalizacja: „{0}”.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Wszystkie wywołania „super()” powinny być pierwszą instrukcją w konstruktorze", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Określ, że element keyof ma zwracać tylko ciągi zamiast ciągów, liczb i symboli. Starsza opcja.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Ustaw wywołanie „super()” jako pierwszą instrukcję w konstruktorze", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Zmapowany typ obiektu niejawnie ma typ szablonu „any”.", + "Mark_array_literal_as_const_90070": "Oznaczanie literału tablicy jako stałego", + "Matched_0_condition_1_6403": "Dopasowano „{0}” warunku „{1}”.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Dopasowywane domyślnie do wzorca dołączania „**/*”", + "Matched_by_include_pattern_0_in_1_1407": "Zgodne z wzorcem dołączania „{0}” w elemencie „{1}”", + "Member_0_implicitly_has_an_1_type_7008": "Dla składowej „{0}” niejawnie określono typ „{1}”.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "Element członkowski „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Merge_conflict_marker_encountered_1185": "Napotkano znacznik konfliktu scalania.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "Scalona deklaracja „{0}” nie może zawierać domyślnej deklaracji eksportu. Rozważ dodanie oddzielnej deklaracji „export default {0}” zamiast niej.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "Metawłaściwość „{0}” jest dozwolona tylko w treści deklaracji funkcji, wyrażeniu funkcji lub konstruktorze.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "Metoda „{0}” nie może mieć implementacji, ponieważ jest oznaczona jako abstrakcyjna.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Metoda „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metoda musi mieć jawną adnotację zwracanego typu z wyrażeniem --isolatedDeclarations.", + "Method_not_implemented_95158": "Metoda nie jest zaimplementowana.", + "Modifiers_cannot_appear_here_1184": "Modyfikatory nie mogą występować w tym miejscu.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "Moduł „{0}” może być importowany domyślnie tylko przy użyciu flagi „{1}”", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "Nie można zaimportować modułu „{0}” przy użyciu tej konstrukcji. Specyfikator jest rozpoznawany tylko jako moduł ES, którego nie można zaimportować za pomocą wywołania „require”. Zamiast tego użyj importu ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale jest on eksportowany jako „{2}”.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "Moduł „{0}” deklaruje element „{1}” lokalnie, ale nie jest on eksportowany.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "Moduł „{0}” nie odwołuje się do typu, ale jest tutaj używany jako typ. Czy chodziło Ci o „typeof import(„{0}”)”?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "Moduł „{0}” nie odwołuje się do wartości, ale jest tutaj używany jako wartość.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "Moduł {0} już wyeksportował składową o nazwie „{1}”. Zastanów się nad jawnym ponownym eksportem, aby rozstrzygnąć niejednoznaczność.", + "Module_0_has_no_default_export_1192": "Moduł „{0}” nie ma eksportu domyślnego.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "Moduł „{0}” nie ma eksportu domyślnego. Czy zamiast tego miał zostać użyty element „import { {1} } from {0}”?", + "Module_0_has_no_exported_member_1_2305": "Moduł „{0}” nie ma wyeksportowanej składowej „{1}”.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "Moduł „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy zamiast tego miał zostać użyty element „import {1} from {0}”?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "Moduł „{0}” został ukryty przez deklarację lokalną o takiej samej nazwie.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "Moduł „{0}” używa elementu „export =” i nie może być używany z elementem „export *”.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "Moduł „{0}” został rozpoznany jako otaczający moduł zadeklarowany lokalnie w pliku „{1}”.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie ustawiono parametru „--allowArbitraryExtensions”.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "Moduł „{0}” został rozpoznany jako „{1}”, ale nie jest ustawiona opcja „--jsx”.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "Moduł „{0}” został rozpoznany jako „{1}”, ale opcja „--resolveJsonModule” nie jest używana.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "W nazwach deklaracji modułu można używać tylko ciągi ujęte w cudzysłów \" lub „”.", + "Module_name_0_matched_pattern_1_6092": "Nazwa modułu: „{0}”, dopasowany wzorzec: „{1}”.", + "Module_name_0_was_not_resolved_6090": "======== Nazwa modułu „{0}” nie została rozpoznana. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}”. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== Nazwa modułu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Rodzaj rozpoznawania modułów nie został podany. Zostanie użyty rodzaj „{0}”.", + "Module_resolution_using_rootDirs_has_failed_6111": "Nie można rozpoznać modułów przy użyciu opcji „rootDirs”.", + "Modules_6244": "Moduły", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Przenieś modyfikatory elementów krotki z etykietami do etykiet", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Przenieś wyrażenie w eksporcie domyślnym do zmiennej i dodaj do niej adnotację typu.", + "Move_to_a_new_file_95049": "Przenieś do nowego pliku", + "Move_to_file_95178": "Przenieś do pliku", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Kolejne następujące po sobie separatory liczbowe nie są dozwolone.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Konstruktor nie może mieć wielu implementacji.", + "NEWLINE_6061": "NOWY WIERSZ", + "Name_is_not_valid_95136": "Nazwa nie jest prawidłowa", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Nazwane grupy przechwytywania są dostępne tylko w przypadku wartości docelowej „ES2018” lub nowszej.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Nazwane grupy przechwytywania o tej samej nazwie muszą się wzajemnie wykluczać.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Nazwane importy są niedozwolone w odroczonym imporcie.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "Nazwane importy z pliku JSON do modułu ECMAScript są niedozwolone, gdy parametr „module” ma wartość „{0}”.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "Nazwane właściwości „{0}” typów „{1}” i „{2}” nie są identyczne.", + "Namespace_0_has_no_exported_member_1_2694": "Przestrzeń nazw „{0}” nie ma wyeksportowanej składowej „{1}”.", + "Namespace_must_be_given_a_name_1437": "Przestrzeń nazw musi mieć nazwę.", + "Namespace_name_cannot_be_0_2819": "Przestrzeń nazw nie może mieć nazwy „{0}”.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Przestrzenie nazw są niedozwolone w globalnych plikach skryptów, gdy włączona jest opcja „{0}”. Jeśli ten plik nie jest przeznaczony do bycia skryptem globalnym, ustaw parametr „moduleDetection” na wartość „force” lub dodaj pustą instrukcję „export {}”.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Do parametrów „this” nie można stosować dekoratorów ani modyfikatorów.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Żaden z konstruktorów podstawowych nie ma określonej liczby argumentów typu.", + "No_constituent_of_type_0_is_callable_2755": "Żadna składowa typu „{0}” nie jest wywoływalna.", + "No_constituent_of_type_0_is_constructable_2759": "Żadnej składowej typu „{0}” nie można skonstruować.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nie znaleziono żadnej sygnatury indeksu z parametrem typu „{0}” w typie „{1}”.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nie można znaleźć danych wejściowych w pliku konfiguracji „{0}”. Określone ścieżki „include” to „{1}”, a „exclude” to „{2}”.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Nie jest już obsługiwane. W starszych wersjach umożliwia ręczne konfigurowanie kodowania tekstu dla odczytywania plików.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Żadne przeciążenie nie oczekuje {0} argumentów, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Żadne przeciążenie nie oczekuje {0} argumentów typu, ale istnieją przeciążenia, które oczekują {1} lub {2} argumentów typu.", + "No_overload_matches_this_call_2769": "Żadne przeciążenie nie jest zgodne z tym wywołaniem.", + "No_type_could_be_extracted_from_this_type_node_95134": "Nie można było wyodrębnić żadnego typu z tego węzła typu", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Nie istnieje żadna wartość w zakresie dla właściwości skrótowej „{0}”. Zadeklaruj ją lub udostępnij inicjatora.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Klasa nieabstrakcyjna „{0}” nie implementuje odziedziczonej abstrakcyjnej składowej „{1}” z klasy „{2}”.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "W klasie nieabstrakcyjnej „{0}” brakuje implementacji dla następujących składowych elementu „{1}”: {2} i {3} więcej.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Wyrażenie klasy nieabstrakcyjnej nie implementuje odziedziczonej abstrakcyjnej składowej „{0}” z klasy „{1}”.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Brak implementacji nieabstrakcyjnych wyrażeń klasy dla następujących składowych elementu „{0}”: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "W nieabstrakcyjnym wyrażeniu klasy brakuje implementacji dla następujących składowych elementu „{0}”: {1} i {2} więcej.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Asercji o wartości innej niż null można używać tylko w plikach TypeScript.", + "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Ścieżki inne niż względne nie są dozwolone, gdy nie jest ustawiona wartość „baseUrl”. Czy nie zostały pominięte początkowe znaki „./”?", + "Non_simple_parameter_declared_here_1348": "W tym miejscu zadeklarowano parametr inny niż prosty.", + "Not_all_code_paths_return_a_value_7030": "Nie wszystkie ścieżki w kodzie zwracają wartość.", + "Not_all_constituents_of_type_0_are_callable_2756": "Nie wszystkie składowe typu „{0}” są wywoływalne.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Nie wszystkie składowe typu „{0}” można skonstruować.", + "Numbers_out_of_order_in_quantifier_1506": "Liczby poza kolejnością w kwantyfikatorze.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Literały liczbowe z wartościami bezwzględnymi równymi 2^53 lub większymi są zbyt duże, aby mogły być dokładnie reprezentowane jako liczby całkowite.", + "Numeric_separators_are_not_allowed_here_6188": "Separatory liczbowe nie są dozwolone w tym miejscu.", + "Object_is_of_type_unknown_2571": "Obiekt jest typu „nieznany”.", + "Object_is_possibly_null_2531": "Obiekt ma prawdopodobnie wartość „null”.", + "Object_is_possibly_null_or_undefined_2533": "Obiekt ma prawdopodobnie wartość „null” lub „undefined”.", + "Object_is_possibly_undefined_2532": "Obiekt ma prawdopodobnie wartość „undefined”.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Dla literału obiektu można określić tylko znane właściwości, a właściwość „{0}” nie istnieje w typie „{1}”.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Literał obiektu może określać wyłącznie znane właściwości, ale element „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "Dla właściwości „{0}” literału obiektu niejawnie określono typ „{1}”.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Obiektów zawierających właściwości skrótowe nie można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Obiektów zawierających przypisania rozproszone nie można wywnioskować za pomocą parametru --isolatedDeclarations.", + "Octal_digit_expected_1178": "Oczekiwano cyfry ósemkowej.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Ósemkowe sekwencje ucieczki i odwołania wsteczne nie są dozwolone w klasie znaków. Jeśli było to zamierzone jako sekwencja ucieczki, użyj składni „{0}”.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Ósemkowe sekwencje ucieczki są niedozwolone. Użyj składni „{0}”.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literały ósemkowe są niedozwolone. Użyj składni „{0}”.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Jedną z wartości „{0}.{1}” jest ciąg „{2}”, a druga przyjmuje się, że jest nieznaną wartością liczbową.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "W instrukcji „for...in” jest dozwolona tylko pojedyncza deklaracja zmiennej.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "W instrukcji „for...of” jest dozwolona tylko pojedyncza deklaracja zmiennej.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Tylko funkcja typu void może być wywoływana za pomocą słowa kluczowego „new”.", + "Only_ambient_modules_can_use_quoted_names_1035": "Tylko otaczające moduły mogą używać nazw w cudzysłowie.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Tylko moduły „amd” i „system” są obsługiwane razem z parametrem --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Tylko tablice const można wywnioskować za pomocą wyrażenia --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Emituj tylko pliki deklaracji „d.ts”.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Generuj tylko pliki d.ts, a nie pliki JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Tylko publiczne i chronione metody klasy bazowej są dostępne przy użyciu słowa kluczowego „super”.", + "Operator_0_cannot_be_applied_to_type_1_2736": "Nie można zastosować operatora „{0}” do typu „{1}”.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "Nie można zastosować operatora „{0}” do typów „{1}” i „{2}”.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Operatory nie mogą być mieszane w klasie znaków. Zamiast tego zawijaj go w zagnieżdżonej klasie.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Rezygnacja ze sprawdzania odwołań do wielu projektów podczas edytowania projektu.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "Opcja „{0}={1}” została usunięta. Usuń go z konfiguracji.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "Opcja „{0}={1}” jest przestarzała i przestanie działać w języku TypeScript {2}. Określ parametr compilerOption „ignoreDeprecations”: „{3}”, aby wyciszyć ten błąd.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „false” lub „null” w wierszu polecenia.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "Opcję „{0}” można określić tylko w pliku „tsconfig.json” albo ustawić na wartość „null” w wierszu polecenia.", + "Option_0_can_only_be_specified_on_command_line_6266": "Opcję „{0}” można określić tylko w wierszu polecenia.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "Opcja „{0}” może być używana tylko w przypadku podania opcji „--inlineSourceMap” lub „--sourceMap”.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Opcji „{0}” można używać tylko wtedy, gdy parametr „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "Opcji „{0}” można używać tylko wtedy, gdy element „module” ma wartość „preserve” lub „es2015” lub nowszą.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "Nie można określić opcji „{0}”, jeśli opcja „jsx” ma wartość „{1}”.", + "Option_0_cannot_be_specified_with_option_1_5053": "Opcji „{0}” nie można określić razem z opcją „{1}”.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "Opcji „{0}” nie można określić bez opcji „{1}”.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "Opcji „{0}” nie można określić bez opcji „{1}” lub opcji „{2}”.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "Opcja „{0}” została usunięta. Usuń go z konfiguracji.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "Opcja „{0}” jest przestarzała i przestanie działać w języku TypeScript {1}. Określ parametr compilerOption „ignoreDeprecations”: „{2}”, aby wyciszyć ten błąd.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "Opcja „{0}\" jest nadmiarowa i nie można jej określić za pomocą opcji „{1}”.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "Opcji „allowImportingTsExtensions” można używać tylko wtedy, gdy jest ustawiona opcja „noEmit” lub „emitDeclarationOnly”.", + "Option_build_must_be_the_first_command_line_argument_6369": "Opcja „--build” musi być pierwszym argumentem wiersza polecenia.", + "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "Opcję \"--incremental\" można określić tylko za pomocą pliku tsconfig, emitując do pojedynczego pliku lub gdy określono opcję \"--tsBuildInfoFile\".", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "Opcji „isolatedModules” można użyć tylko wtedy, gdy podano opcję „--module” lub opcja „target” określa cel „ES2015” lub wyższy.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "Opcja „moduleResolution” musi być ustawiona na wartość „{0}” (lub pozostać nieokreślona), gdy opcja „module” jest ustawiona na „{1}”.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "Opcja „module” musi mieć wartość „{0}”, gdy opcja „moduleResolution” ma wartość „{1}”.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "Opcja „preserveConstEnums” nie może być wyłączona, gdy opcja „{0}” jest włączona.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "Nie można mieszać opcji „project” z plikami źródłowymi w wierszu polecenia.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „moduleResolution” ma wartość „classic”.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "Nie można określić opcji „--resolveJsonModule”, gdy parametr „module” ma wartość „none”, „system” lub „umd”.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "Nie można użyć opcji „verbatimModuleSyntax”, gdy parametr „module” ma wartość „UMD”, „AMD” lub „System”.", + "Options_0_and_1_cannot_be_combined_6370": "Nie można połączyć opcji „{0}” i „{1}”.", + "Options_Colon_6027": "Opcje:", + "Other_Outputs_6291": "Inne dane wyjściowe", + "Output_Formatting_6256": "Formatowanie danych wyjściowych", + "Output_compiler_performance_information_after_building_6615": "Informacje o wydajności kompilatora danych wyjściowych po skompilowaniu.", + "Output_directory_for_generated_declaration_files_6166": "Katalog wyjściowy dla wygenerowanych plików deklaracji.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Plik wyjściowy „{0}” nie został utworzony na podstawie pliku źródłowego „{1}”.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono element „{1}”", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Dane wyjściowe z przywoływanego projektu „{0}” zostały dołączone, ponieważ określono wartość „none” dla opcji „--module”", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Podaj bardziej szczegółowe informacje o wydajności kompilatora po zakończeniu kompilacji.", + "Overload_0_of_1_2_gave_the_following_error_2772": "Przeciążenie {0} z {1}, „{2}”, zwróciło następujący błąd.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Wszystkie sygnatury przeciążeń muszą być abstrakcyjne lub nieabstrakcyjne.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Wszystkie sygnatury przeciążeń muszą być otaczającymi sygnaturami lub żadna nie może być otaczającą sygnaturą.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Wszystkie sygnatury przeciążeń muszą być wyeksportowane lub żadna nie może być wyeksportowana.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Wszystkie sygnatury przeciążeń muszą być opcjonalne lub wymagane.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Wszystkie sygnatury przeciążeń muszą być publiczne, prywatne lub chronione.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "Parametr „{0}” nie może przywoływać identyfikatora „{1}” zadeklarowanego po nim.", + "Parameter_0_cannot_reference_itself_2372": "Parametr „{0}” nie może odwoływać się do siebie samego.", + "Parameter_0_implicitly_has_an_1_type_7006": "Dla parametru „{0}” niejawnie określono typ „{1}”.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "Parametr „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "Parametr „{0}” nie znajduje się w tym samym położeniu co parametr „{1}”.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Parametr „{0}” metody dostępu ma nazwę „{1}” z modułu zewnętrznego „{2}” lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Parametr „{0}” metody dostępu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Parametr „{0}” metody dostępu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Parametr „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Parametr „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Parametr „{0}” konstruktora z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Parametr „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Parametr „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Parametr „{0}” wyeksportowanej funkcji ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Parametr „{0}” wyeksportowanej funkcji ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Parametr „{0}” wyeksportowanej funkcji ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Parametr „{0}” sygnatury indeksu z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Parametr „{0}” sygnatury indeksu z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Parametr „{0}” metody z wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Parametr „{0}” metody z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Parametr „{0}” metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Parametr „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametr nie może mieć znaku zapytania i inicjatora.", + "Parameter_declaration_expected_1138": "Oczekiwano deklaracji parametru.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametr ma nazwę, ale nie ma typu. Czy chodziło Ci o „{0}: {1}”?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modyfikatorów parametrów można używać tylko w plikach TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametr musi mieć jawną adnotację typu z wyrażeniem --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Typ parametru publicznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Typ parametru publicznej statycznej metody ustawiającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analizuj w trybie z ograniczeniami i emituj ciąg „use strict” dla każdego pliku źródłowego.", + "Part_of_files_list_in_tsconfig_json_1409": "Część listy „files” w pliku tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "Wzorzec „{0}” może zawierać maksymalnie jeden znak „*”.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Chronometraż wydajności dla opcji „--diagnostics” lub „--extendedDiagnostics” nie jest dostępny w tej sesji. Nie można było znaleźć natywnej implementacji interfejsu Web Performance API.", + "Platform_specific_6912": "Przeznaczone dla platformy", + "Prefix_0_with_an_underscore_90025": "Poprzedzaj elementy „{0}” znakiem podkreślenia", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Dodaj prefiks „declare” do wszystkich niepoprawnych deklaracji właściwości", + "Prefix_all_unused_declarations_with_where_possible_95025": "Jeśli to możliwe, poprzedź wszystkie nieużywane deklaracje znakiem „_”", + "Prefix_with_declare_95094": "Dodaj prefiks „declare”", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Zachowaj nieużywane zaimportowane wartości w wyjściu JavaScript, które w przeciwnym razie mogłyby zostać usunięte.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Wyświetlaj wszystkie pliki odczytywane podczas kompilacji.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Wyświetlaj pliki odczytywane podczas kompilacji, włącznie z przyczyną dołączenia.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Wyświetl nazwy plików i przyczyny, dla których są częścią kompilacji.", + "Print_names_of_files_part_of_the_compilation_6155": "Drukuj nazwy plików będących częścią kompilacji.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Drukuj nazwy plików będących częścią kompilacji, a następnie zatrzymaj przetwarzanie.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Drukuj nazwy wygenerowanych plików będących częścią kompilacji.", + "Print_the_compiler_s_version_6019": "Wypisz wersję kompilatora.", + "Print_the_final_configuration_instead_of_building_1350": "Wydrukuj końcową konfigurację zamiast kompilowania.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Wyświetlaj nazwy wyemitowanych plików po kompilacji.", + "Print_this_message_6017": "Wypisz ten komunikat.", + "Private_accessor_was_defined_without_a_getter_2806": "Prywatna metoda dostępu została zdefiniowana bez metody pobierającej.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Pole prywatne „{0}” musi być zadeklarowane w otaczającej klasie.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identyfikatory prywatne są niedozwolone w deklaracjach zmiennych.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identyfikatory prywatne są niedozwolone poza treściami klasy.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identyfikatory prywatne są dozwolone tylko w treściach klasy i mogą być używane tylko jako część deklaracji członka klasy, dostępu do właściwości lub po lewej stronie wyrażenia „in”", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identyfikatory prywatne są dostępne tylko wtedy, gdy jest używany język ECMAScript 2015 lub nowszy.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Identyfikatory prywatne nie mogą być używane jako parametry.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Nie można uzyskać dostępu do prywatnego lub chronionego elementu składowego „{0}” w parametrze typu.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "Nie można skompilować projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowania", + "Project_0_is_being_forcibly_rebuilt_6388": "Trwa wymuszone odbudowanie projektu „{0}”", + "Project_0_is_out_of_date_because_1_6420": "Projekt „{0}” jest nieaktualny, ponieważ {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że plik „{2}” był plikiem głównym kompilacji, ale już nie jest.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że program musi zgłaszać błędy.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że niektóre zmiany nie zostały wyemitowane", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Projekt „{0}” jest nieaktualny, ponieważ plik buildinfo „{1}” wskazuje, że nastąpiła zmiana w parametrze compilerOptions", + "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "Projekt „{0}” jest nieaktualny, ponieważ jego zależność „{1}” jest nieaktualna", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "Projekt „{0}” jest nieaktualny, ponieważ dane wyjściowe „{1}” są starsze niż dane wejściowe „{2}”", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Projekt „{0}” jest nieaktualny, ponieważ plik wyjściowy „{1}” nie istnieje", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "Projekt „{0}” jest nieaktualny, ponieważ jego dane wyjściowe zostały wygenerowane w wersji „{1}”, która różni się od bieżącej wersji „{2}”", + "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "Projekt „{0}” jest nieaktualny, ponieważ wystąpił błąd podczas odczytywania pliku „{1}”", + "Project_0_is_up_to_date_6361": "Projekt „{0}” jest aktualny", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "Projekt „{0}” jest aktualny, ponieważ najnowsze dane wejściowe „{1}” są starsze niż dane wyjściowe „{2}”", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "Projekt „{0}” jest aktualny, ale musi zaktualizować sygnatury czasowe plików wyjściowych, które są starsze niż pliki wejściowe", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "Projekt „{0}” jest aktualny z plikami .d.ts z jego zależności", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Odwołania do projektu nie mogą tworzyć grafu kołowego. Wykryto cykl: {0}", + "Projects_6255": "Projekty", + "Projects_in_this_build_Colon_0_6355": "Projekty w tej kompilacji: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Właściwości z modyfikatorem „accessor” są dostępne tylko w przypadku określania wartości docelowej ECMAScript 2015 lub nowszej.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "Właściwości \"{0}\" nie może mieć inicjatora, ponieważ jest oznaczona jako abstrakcyjna.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "Właściwość „{0}” pochodzi z sygnatury indeksu, dlatego należy uzyskiwać do niej dostęp za pomocą elementu [„{0}”].", + "Property_0_does_not_exist_on_type_1_2339": "Właściwość „{0}” nie istnieje w typie „{1}”.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło o uzyskanie dostępu do statycznego elementu członkowskiego „{2}”?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na \"{2}\" lub nowszą.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "Właściwość \"{0}\" nie istnieje w typie \"{1}\". Spróbuj zmienić opcję kompilatora \"lib\", aby uwzględnić parametr \"dom\".", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "Właściwość \"{0}\" nie ma inicjatora i nie jest zdecydowanie przypisana w bloku statycznym klasy.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "Właściwość „{0}” nie ma inicjatora i nie jest na pewno przypisana w konstruktorze.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „get” nie ma adnotacji zwracanego typu.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "Dla właściwości „{0}” niejawnie określono typ „any”, ponieważ jego metoda dostępu „set” nie ma adnotacji typu parametru.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "Właściwość „{0}” niejawnie ma typ „any”, ale lepszy typ dla jej metody dostępu get można wywnioskować na podstawie użycia.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "Właściwość „{0}” niejawnie ma typ „any”, ale lepszy typ dla jej metody dostępu set można wywnioskować na podstawie użycia.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "Właściwości „{0}” w typie „{1}” nie można przypisać do tej samej właściwości w typie podstawowym „{2}”.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "Właściwości „{0}” w typie „{1}” nie można przypisać do typu „{2}”.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "Właściwość „{0}” w typie „{1}” odwołuje się do innego elementu członkowskiego, do którego nie można uzyskać dostępu z typu „{2}”.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "Właściwość „{0}” jest zadeklarowana, ale jej wartość nie jest nigdy odczytywana.", + "Property_0_is_incompatible_with_index_signature_2530": "Właściwość „{0}” jest niezgodna z sygnaturą indeksu.", + "Property_0_is_missing_in_type_1_2324": "W typie „{1}” brakuje właściwości „{0}”.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "Właściwości „{0}” brakuje w typie „{1}”, ale jest wymagana w typie „{2}”.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "Właściwość „{0}” nie jest dostępna poza klasą „{1}”, ponieważ ma identyfikator prywatny.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "Właściwość „{0}” jest opcjonalna w typie „{1}”, ale jest wymagana w typie „{2}”.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "Właściwość „{0}” jest prywatna i dostępna tylko w klasie „{1}”.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "Właściwość „{0}” jest prywatna w typie „{1}”, ale nie w typie „{2}”.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "Właściwość „{0}” jest chroniona i dostępna tylko za pośrednictwem wystąpienia klasy „{1}”. To jest wystąpienie klasy „{2}”.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "Właściwość „{0}” jest chroniona i dostępna tylko w klasie „{1}” oraz w jej podklasach.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "Właściwość „{0}” jest chroniona, ale typ „{1}” nie jest klasą pochodną elementu „{2}”.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "Właściwość „{0}” jest chroniona w typie „{1}”, ale jest publiczna w typie „{2}”.", + "Property_0_is_used_before_being_assigned_2565": "Właściwość „{0}” jest używana przed przypisaniem.", + "Property_0_is_used_before_its_initialization_2729": "Właściwość „{0}” jest używana przez jej zainicjowaniem.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "Właściwość „{0}” nie istnieje w typie „{1}”. Czy chodziło Ci o „{2}”?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "Właściwości „{0}” atrybutu rozkładu JSX nie można przypisać do właściwości docelowej.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Właściwość „{0}” wyeksportowanego typu klasy anonimowej nie może być prywatna ani chroniona.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Właściwość „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "Właściwości „{0}” typu „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", + "Property_0_was_also_declared_here_2733": "Właściwość „{0}” została również zadeklarowana w tym miejscu.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "Właściwość „{0}” zastąpi właściwość bazową w elemencie „{1}”. Jeśli jest to zamierzone, dodaj inicjator. W przeciwnym razie dodaj modyfikator „declare” lub usuń nadmiarową deklarację.", + "Property_assignment_expected_1136": "Oczekiwano przypisania właściwości.", + "Property_destructuring_pattern_expected_1180": "Oczekiwano wzorca usuwającego strukturę właściwości.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Właściwość musi mieć jawną adnotację typu z parametrem --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Oczekiwano właściwości lub sygnatury.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Wartością właściwości może być jedynie literał ciągu, literał numeryczny, wartości „true”, „false” i „null”, literał obiektu i literał tablicy.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Udostępnij pełne wsparcie dla elementów iterowanych w elementach „for-of”, rozpiętości i usuwania, gdy elementem docelowym jest „ES5”.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Metoda publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Właściwość publiczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Publiczna metoda statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można jej nazwać.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Publiczna właściwość statyczna „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "Nazwa kwalifikowana „{0}” nie jest dozwolona bez wiodącego elementu „@param {object} {1}”.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Zgłoś błąd, gdy parametr funkcji nie zostanie odczytany.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Zgłaszaj błąd w przypadku wyrażeń i deklaracji z implikowanym typem „any”.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Zgłaszaj błąd w przypadku wyrażeń „this” z niejawnym typem „any”.", + "Range_out_of_order_in_character_class_1517": "Zakres poza kolejnością w klasie znaków.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Ponowne eksportowanie typu, gdy element „{0}” jest włączony, wymaga użycia elementu „export type”.", + "React_components_cannot_include_JSX_namespace_names_2639": "Składniki platformy React nie mogą zawierać nazw przestrzeni rozszerzenia JSX", + "Recommended_Options_6294": "Proponowane opcje", + "Redirect_output_structure_to_the_directory_6006": "Przekieruj strukturę wyjściową do katalogu.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Zmniejsz liczbę projektów ładowanych automatycznie przez język TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "Przywoływany projekt „{0}” nie może wyłączać emisji.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Przywoływany projekt „{0}” musi mieć ustawienie „composite” o wartości true.", + "Referenced_via_0_from_file_1_1400": "Przywoływane za pośrednictwem elementu „{0}” z pliku „{1}”", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Zastanów się nad dodaniem rozszerzenia do ścieżki importu.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Względne ścieżki importu wymagają jawnych rozszerzeń plików w importach ECMAScript, gdy element „--moduleResolution” ma wartość „node16” lub „nodenext”. Czy chodziło Ci o „{0}”?", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Usuń listę katalogów z procesu obserwacji.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Usuń listę plików z przetwarzania w trybie obserwacji.", + "Remove_all_unnecessary_override_modifiers_95163": "Usuń wszystkie niepotrzebne modyfikatory „overrides”", + "Remove_all_unnecessary_uses_of_await_95087": "Usuń wszystkie niepotrzebne użycia operatora „await”", + "Remove_all_unreachable_code_95051": "Usuń cały nieosiągalny kod", + "Remove_all_unused_labels_95054": "Usuń wszystkie nieużywane etykiety", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Usuń nawiasy klamrowe ze wszystkich treści funkcji strzałkowej z odpowiednimi problemami", + "Remove_braces_from_arrow_function_95060": "Usuń nawiasy klamrowe z funkcji strzałki", + "Remove_braces_from_arrow_function_body_95112": "Usuń nawiasy klamrowe z treści funkcji strzałkowej", + "Remove_import_from_0_90005": "Usuń import z „{0}”", + "Remove_override_modifier_95161": "Usuń modyfikator „override”", + "Remove_parentheses_95126": "Usuń nawiasy", + "Remove_template_tag_90011": "Usuń znacznik szablonu", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Usuń ograniczenie 20 MB dotyczące łącznego rozmiaru kodu źródłowego dla plików JavaScript na serwerze języka TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Usuń element „type” z deklaracji importu z elementu „ {0}”", + "Remove_type_from_import_of_0_from_1_90056": "Usuń element „type” z importu elementu „{0}” z „{1}”", + "Remove_type_parameters_90012": "Usuń parametry typu", + "Remove_unnecessary_await_95086": "Usuń niepotrzebny operator „await”", + "Remove_unreachable_code_95050": "Usuń nieosiągalny kod", + "Remove_unused_declaration_for_Colon_0_90004": "Usuń nieużywaną deklarację dla: „{0}”", + "Remove_unused_declarations_for_Colon_0_90041": "Usuń nieużywane deklaracje dla: „{0}”", + "Remove_unused_destructuring_declaration_90039": "Usuń nieużywaną deklarację usuwania struktury", + "Remove_unused_label_95053": "Usuń nieużywaną etykietę", + "Remove_variable_statement_90010": "Usuń instrukcję zmiennej", + "Rename_param_tag_name_0_to_1_95173": "Zmień nazwę „{0}” tagu „@param” na „{1}”", + "Replace_0_with_Promise_1_90036": "Zamień element „{0}” na element „Promise<{1}>”", + "Replace_all_unused_infer_with_unknown_90031": "Zamień wszystkie nieużywane elementy „infer” na „unknown”", + "Replace_import_with_0_95015": "Zamień import na element „{0}”.", + "Replace_infer_0_with_unknown_90030": "Zamień element „infer {0}” na „unknown”", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Zgłoś błąd, gdy nie wszystkie ścieżki w kodzie zwracają wartość.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Zgłoś błędy dla przepuszczających klauzul case w instrukcji switch.", + "Report_errors_in_js_files_8019": "Zgłaszaj błędy w plikach js.", + "Report_errors_on_unused_locals_6134": "Raportuj błędy dla nieużywanych elementów lokalnych.", + "Report_errors_on_unused_parameters_6135": "Raportuj błędy dla nieużywanych parametrów.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Wymagaj wystarczającej adnotacji w eksportach, aby inne narzędzia mogły w prosty sposób generować pliki deklaracji.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Wymagaj, aby niezadeklarowane właściwości z sygnatur indeksów korzystały z dostępów do elementów.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Wymagane parametry typu mogą nie być zgodne z opcjonalnymi parametrami typu.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "Znaleziono rozwiązanie dla modułu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "Znaleziono rozwiązanie dla dyrektywy odwołania do typu „{0}” w pamięci podręcznej z lokalizacji „{1}”.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba wyłączenia nowoczesnych funkcji rozpoznawania węzłów w celu sprawdzenia, czy biblioteka npm wymaga aktualizacji konfiguracji.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Rozpoznawanie nazwy innej niż względna nie powiodło się; próba użycia wyrażenia „--moduleResolution”, aby sprawdzić, czy projekt może wymagać aktualizacji konfiguracji.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Rozwiązuj elementy „keyof” tylko do nazw właściwości mających jako wartość ciągi (nie liczby czy symbole).", + "Resolved_under_condition_0_6414": "Rozwiązano pod warunkiem „{0}”.", + "Resolving_in_0_mode_with_conditions_1_6402": "Rozpoznawanie w trybie {0} z warunkami {1}.", + "Resolving_module_0_from_1_6086": "======== Rozpoznawanie modułu „{0}” na podstawie „{1}”. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Rozpoznawanie nazwy modułu „{0}” względem podstawowego adresu URL „{1}” — „{2}”.", + "Resolving_real_path_for_0_result_1_6130": "Rozpoznawanie rzeczywistej ścieżki elementu ƒ„{0}”, wynik: „{1}”.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Rozwiązywanie dyrektywy odwołania do typu „{0}”, zawierającego plik: „{1}”. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny: „{2}”. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający: „{1}”, katalog główny nie został ustawiony. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny: „{1}”. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Rozpoznawanie dyrektywy odwołania do typu „{0}”, plik zawierający nie został ustawiony, katalog główny nie został ustawiony. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Rozpoznawanie dyrektywy odwołania do typu dla programu, który określa niestandardowe typeRoots, pomijanie wyszukiwania w folderze „node_modules”.", + "Resolving_with_primary_search_path_0_6121": "Rozpoznawanie przy użyciu ścieżki wyszukiwania podstawowego „{0}”.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "Dla parametru rest „{0}” niejawnie określono typ „any[]”.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "Parametr rest „{0}” niejawnie ma typ „any[]”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Rest_types_may_only_be_created_from_object_types_2700": "Typy rest można tworzyć tylko na podstawie typów obiektu.", + "Return_type_annotation_circularly_references_itself_2577": "Adnotacja zwracanego typu cyklicznie odwołuje się do samej siebie.", + "Return_type_must_be_inferred_from_a_function_95149": "Zwracany typ musi zostać wywnioskowany na podstawie funkcji", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Zwracany typ sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Zwracany typ sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Musi istnieć możliwość przypisania zwracanego typu sygnatury konstruktora do typu wystąpienia klasy.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Zwracany typ wyeksportowanej funkcji ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Zwracany typ wyeksportowanej funkcji ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Zwracany typ wyeksportowanej funkcji ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Zwracany typ sygnatury indeksu z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Zwracany typ sygnatury indeksu z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Zwracany typ metody z wyeksportowanego interfejsu ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Zwracany typ metody z wyeksportowanego interfejsu ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Zwracany typ publicznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Zwracany typ metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu zewnętrznego {2} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę „{1}” z modułu prywatnego „{2}” lub używa tej nazwy.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Zwracany typ publicznej statycznej metody pobierającej „{0}” z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu zewnętrznego {1} lub używa tej nazwy, ale nie można go nazwać.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę „{0}” z modułu prywatnego „{1}” lub używa tej nazwy.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Zwracany typ publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu nie zostało rozpoznane.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}”.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Ponowne użycie rozwiązania modułu „{0}” z „{1}” starego programu, pomyślnie rozpoznano jako „{2}” z identyfikatorem pakietu „{3}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” nie zostało rozpoznane.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” w pamięci podręcznej z lokalizacji „{2}” pomyślnie rozpoznano jako „{3}” z identyfikatorem pakietu „{4}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Ponowne użycie rozwiązania dyrektywy odwołania typu „{0}” z „{1}” starego programu nie zostało rozpoznane.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}”.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Ponowne użycie rozpoznawania dyrektywy odwołania typu „{0}” z „{1}” starego programu pomyślnie rozpoznano jako „{2}” o identyfikatorze pakietu „{3}”.", + "Rewrite_all_as_indexed_access_types_95034": "Zmień wszystko na indeksowane typy dostępu", + "Rewrite_as_the_indexed_access_type_0_90026": "Napisz ponownie jako indeksowany typ dostępu „{0}”", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Ponownie zapisz rozszerzenia plików „.ts”, „.tsx”, „.mts” i „.cts” we względnych ścieżkach importu do ich odpowiedników języka JavaScript w plikach wyjściowych.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Prawy operand elementu ?? jest nieosiągalny, ponieważ lewy operand nigdy nie dopuszcza wartości null.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Nie można określić katalogu głównego. Pomijanie ścieżek wyszukiwania podstawowego.", + "Root_file_specified_for_compilation_1427": "Plik główny określony na potrzeby kompilacji", + "STRATEGY_6039": "STRATEGIA", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Zapisuj pliki tsbuildinfo, aby umożliwić przyrostową kompilację projektów.", + "Saw_non_matching_condition_0_6405": "Wyświetlono niezgodny warunek „{0}”.", + "Scoped_package_detected_looking_in_0_6182": "Wykryto pakiet w zakresie, wyszukiwanie w „{0}”", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Przeszukiwanie wszystkich katalogów nadrzędnych node_modules w poszukiwaniu rozszerzeń rezerwowych: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Wyszukiwanie preferowanych rozszerzeń we wszystkich katalogach nadrzędnych node_modules: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Zobacz też https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Wybór nie jest prawidłową instrukcją ani instrukcjami", + "Selection_is_not_a_valid_type_node_95133": "Wybór nie jest prawidłowym węzłem typu", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Określ wersję języka JavaScript dla emitowanego kodu JavaScript i dołącz zgodne deklaracje bibliotek.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Określ język komunikatów z języka TypeScript. Nie wpływa to na emisję.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Ustaw opcję „module” w pliku konfiguracji na wartość „{0}”", + "Set_the_newline_character_for_emitting_files_6659": "Określ znak nowego wiersza dla emisji plików.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Ustaw opcję „target” w pliku konfiguracji na wartość „{0}”", + "Setters_cannot_return_a_value_2408": "Metody ustawiające nie mogą zwracać wartości.", + "Show_all_compiler_options_6169": "Pokaż wszystkie opcje kompilatora.", + "Show_diagnostic_information_6149": "Pokaż informacje diagnostyczne.", + "Show_verbose_diagnostic_information_6150": "Pokaż pełne informacje diagnostyczne.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Pokaż, co zostanie skompilowane (lub usunięte, jeśli określono opcję „--clean”)", + "Signature_0_must_be_a_type_predicate_1224": "Sygnatura „{0}” musi być predykatem typów.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "Deklaracji podpisu można używać tylko w plikach TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Pomiń kompilowanie projektów podrzędnych w przypadku błędu w projekcie nadrzędnym.", + "Skip_type_checking_all_d_ts_files_6693": "Pomiń sprawdzanie typów dla wszystkich plików d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Pomiń sprawdzanie typów w plikach d.ts dołączanych w kodzie TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Pomiń sprawdzanie typu plików deklaracji.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” zawiera błędy", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Pomijanie kompilacji projektu „{0}”, ponieważ jego zależność „{1}” nie została skompilowana", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Pomijanie modułu „{0}”, który wygląda jak bezwzględny identyfikator URI, docelowe typy plików: {1}.", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono element „{1}”", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Źródło z przywoływanego projektu „{0}” zostało dołączone, ponieważ określono wartość „none” dla opcji „--module”", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Liczba elementów w źródle to {0}, ale element docelowy zezwala tylko na {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "Liczba elementów w źródle to {0}, ale element docelowy wymaga {1}.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Źródło nie udostępnia dopasowania dla wymaganego elementu na pozycji {0} w lokalizacji docelowej.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Źródło nie udostępnia dopasowania dla elementu ze zmienną argumentów na pozycji {0} w lokalizacji docelowej.", + "Specify_ECMAScript_target_version_6015": "Określ wersję docelową ECMAScript.", + "Specify_JSX_code_generation_6080": "Określ generowanie kodu JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Określ plik łączący wszystkie dane wyjściowe w jeden plik JavaScript. Jeśli element „declaration” ma wartość true, wyznaczany jest też plik łączący wszystkie dane wyjściowe d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Określ listę wzorców globalnych pasujących do plików, które należy uwzględnić w kompilacji.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Określ listę wtyczek usług języka do uwzględnienia.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Określ zestaw połączonych plików deklaracji bibliotek, które opisują docelowe środowisko uruchomieniowe.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Określ zestaw wpisów, które ponownie mapują operacje importu na dodatkowe lokalizacje wyszukiwania.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Określ tablicę obiektów określających ścieżki dla projektów. Używane w odwołaniach do projektów.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Określ folder wyjściowy dla wszystkich emitowanych plików.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Określ zachowanie emisji/sprawdzania dla importów, które są używane tylko dla typów.", + "Specify_file_to_store_incremental_compilation_information_6380": "Określ plik do przechowywania informacji o kompilacji przyrostowej", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Określ, jak język TypeScript ma wyszukiwać plik z podanego specyfikatora modułu.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Określ sposób obserwacji katalogów w systemach, które nie mają funkcji rekursywnej obserwacji plików.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Określ sposób działania trybu zegarka TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Określ pliki biblioteki do uwzględnienia w kompilacji.", + "Specify_module_code_generation_6016": "Określ generowanie kodu modułu.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Określ specyfikator modułów używany do importowania funkcji fabryki JSX w przypadku używania elementów „jsx: react-jsx*”.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Określ wiele folderów działających jak element „./node_modules/@types”.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Określ co najmniej jedną ścieżkę lub odwołanie do modułu platformy Node dotyczące podstawowych plików konfiguracji, z których są dziedziczone ustawienia.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Określ opcje automatycznego pozyskiwania plików deklaracji.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Określ strategię obserwowania z sondowaniem, gdy nie powiedzie się utworzenie przy użyciu zdarzeń systemu plików: „FixedInterval” (domyślna), „PriorityInterval”, „DynamicPriority”, „FixedChunkSize”.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Określ strategię obserwowania katalogu na platformach, które nie obsługują natywnego obserwowania rekursywnego: „UseFsEvents” (domyślna), „FixedPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Określ strategię obserwowania pliku: „FixedPollingInterval” (domyślna), „PriorityPollingInterval”, „DynamicPriorityPolling”, „FixedChunkSizePolling”, „UseFsEvents”, „UseFsEventsOnParentDirectory”.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Określ odwołanie do fragmentów JSX używane dla fragmentów w przypadku docelowej emisji kodu React JSX, np. „React.Fragment” lub „Fragment”.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Określ funkcję fabryki JSX do użycia, gdy elementem docelowym jest emisja elementu JSX „react”, np. „React.createElement” lub „h”.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Określ funkcję fabryki JSX używaną w przypadku docelowej emisji kodu React JSX, na przykład „React.createElement” lub „h”", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Określ funkcję fabryki fragmentów JSX, która ma być używana po ukierunkowaniu na emisję JSX „react” za pomocą opcji kompilatora „jsxFactory”, na przykład „Fragment”.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Określ katalog podstawowy, aby rozpoznać nie względne nazwy modułów.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Określ sekwencję końca wiersza, która ma być używana podczas emitowania plików: „CRLF” (dos) lub „LF” (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Określ lokalizację, w której debuger ma szukać plików TypeScript zamiast szukania w lokalizacjach źródłowych.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Określ lokalizację, w której debuger ma szukać plików map zamiast szukania w wygenerowanych lokalizacjach.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Określ maksymalną głębokość folderów używaną do sprawdzania plików JavaScript z poziomu elementu „node_modules”. Ma to zastosowanie tylko w przypadku użycia opcji „allowJs”.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Określ specyfikator modułu, który ma być używany do importowania z funkcji fabryki \"jsx\" i \"jsxs\", na przykład z platformy React", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Określ obiekt wywoływany dla elementu „createElement”. Ma to zastosowanie tylko w przypadku docelowej emisji kodu JSX „react”.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Określ katalog wyjściowy dla generowanych plików deklaracji.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Określ ścieżkę do pliku kompilacji przyrostowej .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Określ katalog główny plików wejściowych. Strukturą katalogów wyjściowych można sterować przy użyciu opcji --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Określ folder główny w plikach źródłowych.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Określ ścieżkę katalogu głównego, w którym debugery będą mogły znaleźć referencyjny kod źródłowy.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Określ nazwy pakietów typów do uwzględnienia bez odwoływania się do nich w pliku źródłowym.", + "Specify_what_JSX_code_is_generated_6646": "Określ, jaki kod JSX jest generowany.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Określ, jakie podejście ma stosować obserwator, jeśli w systemie zabraknie natywnych obserwatorów plików.", + "Specify_what_module_code_is_generated_6657": "Określ, jaki kod modułów jest generowany.", + "Split_all_invalid_type_only_imports_1367": "Podziel wszystkie nieprawidłowe importy dotyczące tylko typu", + "Split_into_two_separate_import_declarations_1366": "Podziel na dwie osobne deklaracje importu", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "Operator rozpiętości w wyrażeniach „new” jest dostępny tylko wtedy, gdy jest używany język ECMAScript 5 lub nowszy.", + "Spread_types_may_only_be_created_from_object_types_2698": "Typy spread można tworzyć tylko z typów obiektu.", + "Starting_compilation_in_watch_mode_6031": "Trwa uruchamianie kompilacji w trybie śledzenia...", + "Statement_expected_1129": "Oczekiwano instrukcji.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Instrukcje są niedozwolone w otaczających kontekstach.", + "Static_members_cannot_reference_class_type_parameters_2302": "Statyczne składowe nie mogą przywoływać parametrów typu klasy.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Właściwość statyczna „{0}” jest w konflikcie z właściwością wbudowaną „Function.{0}” funkcji konstruktora „{1}”.", + "Stricter_Typechecking_Options_6292": "Bardziej rygorystyczne opcje sprawdzania typów", + "String_literal_expected_1141": "Oczekiwano literału ciągu.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Nazwy importu i eksportu literału ciągu nie są obsługiwane, gdy flaga „--module” ma wartość „es2015” lub „es2020”.", + "String_literal_with_double_quotes_expected_1327": "Oczekiwano literału ciągu z podwójnymi cudzysłowami.", + "Style_Options_6293": "Opcje stylów", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Stosuj styl dla błędów i komunikatów za pomocą koloru i kontekstu. (eksperymentalne).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Flagi wzorca podrzędnego muszą być obecne, gdy istnieje półpauza.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Kolejne deklaracje właściwości muszą być tego samego typu. Właściwość „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Kolejne deklaracje zmiennej muszą być tego samego typu. Zmienna „{0}” musi być typu „{1}”, ale w tym miejscu jest typu „{2}”.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "Podstawienie „{0}” dla wzorca „{1}” ma nieprawidłowy typ. Oczekiwano typu „string”, a uzyskano typ „{2}”.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "Podstawienie „{0}” we wzorcu „{1}” może zawierać maksymalnie jeden znak „*”", + "Substitutions_for_pattern_0_should_be_an_array_5063": "Podstawieniami wzorca „{0}” powinna być tablica.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Podstawienia dla wzorca „{0}” nie powinny być pustą tablicą.", + "Successfully_created_a_tsconfig_json_file_6071": "Pomyślnie utworzono plik tsconfig.json.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Wywołania super są niedozwolone poza konstruktorami i zagnieżdżonymi funkcjami wewnątrz konstruktorów.", + "Suppress_excess_property_checks_for_object_literals_6072": "Pomiń nadmiarowe sprawdzenia właściwości dla literałów obiektu.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Pomiń błędy noImplicitAny dotyczące obiektów indeksowania bez sygnatur indeksów.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Pomijaj błędy „noImplicitAny” podczas indeksowania obiektów, które nie mają sygnatur indeksu.", + "Switch_each_misused_0_to_1_95138": "Zmień każdy niepoprawnie użyty element „{0}” na „{1}”", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Synchronicznie wywołuj wywołania zwrotne i aktualizuj stan obserwatorów katalogów na platformach, które nie obsługują natywnie obserwacji rekursywnej.", + "Syntax_Colon_0_6023": "Składnia: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "Tag „{0}” oczekuje co najmniej „{1}” argumentów, ale fabryka JSX „{2}” dostarcza maksymalnie „{3}”.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Oznakowane wyrażenia szablonu nie są dozwolone w opcjonalnym łańcuchu.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Liczba elementów dozwolonych przez element docelowy to {0}, ale źródło może mieć ich więcej.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Liczba elementów wymaganych przez element docelowy to {0}, ale źródło może mieć ich mniej.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Podpis docelowy zawiera zbyt mało argumentów. Oczekiwano {0} lub więcej, ale otrzymano {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "Modyfikatora „{0}” można używać tylko w plikach TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "Nie można zastosować operatora „{0}” do typu „symbol”.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "Operator „{0}” nie jest dozwolony w przypadku typów logicznych. Zamiast tego rozważ użycie operatora „{1}”.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Właściwość „{0}” iteratora asynchronicznego musi być metodą.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Właściwość „{0}” iteratora musi być metodą.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "Typ „Object” można przypisać do niewielu innych typów. Czy zamiast tego typu miał zostać użyty typ „any”?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Nie można jednocześnie ustawić flagi Unicode (u) i flagi Unicode Sets (v).", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "Obiekt „arguments” nie może być przywoływany w funkcji strzałkowej w języku ES5. Rozważ użycie standardowego wyrażenia funkcji.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "Obiekt „arguments” nie może być przywoływany w asynchronicznej funkcji lub metodzie w języku ES5. Rozważ użycie standardowej funkcji lub metody.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "Treść instrukcji „if” nie może być pustą instrukcją.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Wywołanie powiodłoby się dla tej implementacji, ale sygnatury implementacji przeciążeń nie są widoczne na zewnątrz.", + "The_character_set_of_the_input_files_6163": "Zestaw znaków plików wejściowych.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Zawierająca funkcja strzałki przechwytuje wartość globalną parametru „this”.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "Treść zawierającej funkcji lub modułu jest za duża do analizy przepływu sterowania.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Bieżący plik jest modułem CommonJS i nie może używać elementu „await” na najwyższym poziomie.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Bieżący plik jest modułem CommonJS, którego importy będą generować wywołania „require”; jednak przywoływany plik jest modułem ECMAScript i nie można go zaimportować za pomocą wywołania „require”. Zamiast tego rozważ zapisanie dynamicznego wywołania „import(\"{0}\")”.", + "The_current_host_does_not_support_the_0_option_5001": "Bieżący host nie obsługuje opcji „{0}”.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "W tym miejscu zdefiniowano deklarację elementu „{0}”, której prawdopodobnie zamierzano użyć", + "The_declaration_was_marked_as_deprecated_here_2798": "Deklaracja została oznaczona jako przestarzała w tym miejscu.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Oczekiwany typ pochodzi z właściwości „{0}”, która jest zadeklarowana tutaj w typie „{1}”", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Oczekiwany typ pochodzi ze zwracanego typu tej sygnatury.", + "The_expected_type_comes_from_this_index_signature_6501": "Oczekiwany typ pochodzi z tej sygnatury indeksu.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Wyrażenie przypisania eksportu musi być identyfikatorem lub kwalifikowaną nazwą w otaczającym kontekście.", + "The_file_is_in_the_program_because_Colon_1430": "Plik jest w programie, ponieważ:", + "The_files_list_in_config_file_0_is_empty_18002": "Lista „files” w pliku konfiguracji „{0}” jest pusta.", + "The_first_export_default_is_here_2752": "Pierwszy element export default jest tutaj.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Pierwszym parametrem metody „then” obietnicy musi być wywołanie zwrotne.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "Dla typu globalnego „JSX.{0}” nie można określić więcej niż jednej właściwości.", + "The_implementation_signature_is_declared_here_2750": "Sygnatura implementacji jest zadeklarowana tutaj.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "Metawłaściwość „import.meta” jest niedozwolona w plikach, które będą kompilowane w danych wyjściowych CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "Meta-właściwość „import.meta” jest dozwolona tylko wtedy, gdy opcja „--module” ma wartość „es2020”, „es2022”, „esnext”, „system”, „node16”, „node18”, „node20” lub „nodenext”.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "Wywnioskowany typ „{0}” nie może być nazwany bez odwołania do elementu „{1}”. Prawdopodobnie nie jest to przenośne. Konieczna jest adnotacja typu.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Wywnioskowany typ elementu „{0}” odwołuje się do typu ze strukturą cykliczną, którego nie można serializować w prosty sposób. Wymagana jest adnotacja typu.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Wnioskowany typ „{0}” przywołuje niedostępny typ „{1}”. Adnotacja typu jest konieczna.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Wywnioskowany typ tego węzła przekracza maksymalną długość, którą kompilator może serializować. Wymagana jest jawna adnotacja typu.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "Inicjator deklaracji „using” musi być obiektem z metodą „[Symbol.dispose]()” albo mieć wartość „null” lub „undefined”.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "Inicjator deklaracji „await using” musi być obiektem z metodą „[Symbol.asyncDispose]()” lub „[Symbol.dispose]5D;()” albo mieć wartość „null” lub „undefined”.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” istnieje w wielu elementach składowych i w części z nich jest prywatna.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "Przecięcie „{0}” zostało zredukowane do wartości „never”, ponieważ właściwość „{1}” zawiera typy powodujące konflikt w niektórych elementach składowych.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "Słowa kluczowego „intrinsic” można używać tylko do deklarowania typów wewnętrznych udostępnianych przez kompilator.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "Należy podać opcję kompilatora „jsxFragmentFactory”, aby używać fragmentów JSX z opcją kompilatora „jsxFactory”.", + "The_last_overload_gave_the_following_error_2770": "Ostatnie przeciążenie dało następujący błąd.", + "The_last_overload_is_declared_here_2771": "Ostatnie przeciążenie jest zadeklarowane tutaj.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "Lewa strona instrukcji „for...in” nie może być wzorcem usuwającym strukturę.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "Lewa strona instrukcji „for...in” nie może być deklaracją „using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "Lewa strona instrukcji „for...in” nie może być deklaracją „await using”.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "Lewa strona instrukcji „for...in” nie może używać adnotacji typu.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "Lewa strona instrukcji „for...in” nie może być opcjonalnym dostępem do właściwości.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "Lewa strona instrukcji „for...in” musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "Lewa strona instrukcji „for...in” musi być typu „string” lub „any”.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "Lewa strona instrukcji „for...of” nie może używać adnotacji typu.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "Lewa strona instrukcji „for...of” nie może być opcjonalnym dostępem do właściwości.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "Lewa strona instrukcji „for...of” nie może być „asynchroniczna”.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "Lewa strona instrukcji „for...of” musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Lewa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Lewa strona wyrażenia przypisania nie może być opcjonalnym dostępem do właściwości.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Lewa strona wyrażenia przypisania musi być zmienną lub dostępem do właściwości.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Lewa strona wyrażenia „instanceof” musi być przypisana do pierwszego argumentu po prawej stronie metody „[Symbol.hasInstance]”.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "Lewa strona wyrażenia „instanceof” musi być typu „any”, typu obiektu lub parametrem typu.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Ustawienia regionalne używane przy wyświetlaniu komunikatów użytkownikowi (np. „pl-pl”)", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "Maksymalna głębokość zależności na potrzeby wyszukiwania w elemencie node_modules i ładownia plików JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "Operand operatora „delete” nie może być identyfikatorem prywatnym.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "Operand operatora „delete” nie może być właściwością tylko do odczytu.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "Operand operatora „delete” musi być odwołaniem do właściwości.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "Operand operatora „delete” musi być opcjonalny.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Operand operatora inkrementacji lub dekrementacji nie może być opcjonalnym dostępem do właściwości.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Operand operatora inkrementacji lub dekrementacji musi być zmienną lub dostępem do właściwości.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Analizator oczekiwał znalezienia elementu „{1}” w celu dopasowania do tokenu „{0}” w tym miejscu.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy eksportu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Katalog główny projektu jest niejednoznaczny, a jest wymagany do rozpoznania wpisu mapy importu „{0}” w pliku „{1}”. Podaj opcję kompilatora „rootDir”, aby usunąć niejednoznaczności.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "Nie można uzyskać dostępu do właściwości „{0}” w typie „{1}” w tej klasie, ponieważ jest ona zasłaniana przez inny identyfikator prywatny o takiej samej pisowni.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Zwracany typ funkcji dekoratora parametrów musi mieć postać „void” lub „any”.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Zwracany typ funkcji dekoratora właściwości musi mieć postać „void” lub „any”.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zwracany typ funkcji asynchronicznej musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zwracany typ metody lub funkcji asynchronicznej musi być globalnym typem Promise.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Zwracany typ funkcji lub metody asynchronicznej musi być globalnym typem Promise. Czy chodziło Ci o typ „Promise<{0}>”?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "Prawa strona instrukcji „for...in” musi zawierać typ „any”, typ obiektu lub parametr typu, a tutaj ma typ „{0}”.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Prawa strona operacji arytmetycznej musi być typu „any”, „number”, „bigint” lub typu wyliczeniowego.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "Prawa strona wyrażenia „instanceof” musi być typem „any”, klasą, funkcją lub innym typem, który można przypisać do typu interfejsu „Function”, albo typem obiektu z metodą „Symbol.hasInstance”.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "Prawa strona wyrażenia „instanceof” nie może być wyrażeniem tworzenia wystąpienia.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "Wartość katalogu głównego pliku „{0}” musi być obiektem.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Środowisko uruchomieniowe wywoła dekoratora z argumentami {1}, ale dekorator oczekuje co najmniej {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "Deklaracja przesłaniania „{0}” jest zdefiniowana tutaj", + "The_signature_0_of_1_is_deprecated_6387": "Sygnatura „{0}” elementu „{1}” jest przestarzała.", + "The_specified_path_does_not_exist_Colon_0_5058": "Wybrana ścieżka nie istnieje: „{0}”.", + "The_tag_was_first_specified_here_8034": "Tag został najpierw określony w tym miejscu.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Obiekt docelowy przypisania rest obiektu nie może być opcjonalnym dostępem do właściwości.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Cel przypisania rest obiektu musi stanowić dostęp do zmiennej lub właściwości.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "Kontekstu „this” typu „{0}” nie można przypisać do elementu „this” metody typu „{1}”.", + "The_this_types_of_each_signature_are_incompatible_2685": "Typy „this” sygnatur nie są zgodne.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "Typ „{0}” jest „readonly” i nie można go przypisać do typu modyfikowalnego „{1}”.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Modyfikatora „type” nie można użyć w nazwanym eksporcie, gdy w instrukcji eksportowania jest używany element „export type”.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "Modyfikatora „type” nie można użyć w nazwanym imporcie, gdy w instrukcji importowania jest używany element „import type”.", + "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "Typ deklaracji funkcji musi być zgodny z sygnaturą funkcji.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "Typ tego węzła nie może być serializowany, ponieważ jego właściwość „{0}” nie może być serializowana.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Typ zwracany przez metodę „{0}()” iteratora asynchronicznego musi być obietnicą dla typu z właściwością „value”.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Typ zwracany przez metodę „{0}()” iteratora musi mieć właściwość „value”.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Typy elementu „{0}” są niezgodne między tymi typami.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Typy zwrócone przez element „{0}” są niezgodne między tymi typami.", + "The_value_0_cannot_be_used_here_18050": "W tym miejscu nie można użyć wartości „{0}”.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "Deklaracja zmiennej instrukcji „for...in” nie może mieć inicjatora.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "Deklaracja zmiennej instrukcji „for...of” nie może mieć inicjatora.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "Instrukcja „with” nie jest obsługiwana. Wszystkie symbole w bloku „with” będą mieć typ „any”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku w bieżącym ustawieniu „moduleResolution”. Rozważ zaktualizowanie do wartości „node16”, „nodenext” lub „bundler”.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Istnieją typy w „{0}”, ale nie można rozpoznać tego wyniku podczas uwzględniania pliku package.json „exports”. Biblioteka „{1}” może wymagać zaktualizowania pliku package.json lub wpisywania tekstu.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "W tym wyrażeniu regularnym nie ma żadnej grupy przechwytywania o nazwie „{0}”.", + "There_is_nothing_available_for_repetition_1507": "Brak dostępnych elementów do powtórzenia.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Ten tag rozszerzenia JSX wymaga, aby element „{0}” był w zakresie, ale nie można go znaleźć.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Ten tag rozszerzenia JSX wymaga, aby ścieżka modułu „{0}” istniała, ale nie można jej znaleźć. Upewnij się, że masz zainstalowane typy dla odpowiedniego pakietu.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Element prop „{0}” tego tagu JSX oczekuje pojedynczego elementu podrzędnego typu „{1}”, ale podano wiele elementów podrzędnych.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Element prop „{0}” tego tagu JSX oczekuje typu „{1}”, który wymaga wielu elementów podrzędnych, ale podano tylko jeden element podrzędny.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym nie ma żadnych grup przechwytywania.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "To odwołanie wsteczne odwołuje się do grupy, która nie istnieje. W tym wyrażeniu regularnym jest tylko następująca liczba grup przechwytywania: {0}.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "To wyrażenie binarne nigdy nie dopuszcza wartości null. Czy brakuje nawiasów?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Tego znaku nie można poprzedzić znakiem ucieczki w wyrażeniu regularnym.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "To porównanie wydaje się niezamierzone, ponieważ typy „{0}” i „{1}” nie nakładają się na siebie.", + "This_condition_will_always_return_0_2845": "Ten warunek będzie zawsze zwracać wartość „{0}”.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Ten warunek zawsze będzie zwracać wartość „{0}”, ponieważ język JavaScript porównuje obiekty według odwołania, a nie wartości.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Ten warunek będzie zawsze zwracać wartość true, ponieważ wartość '{0}' jest zawsze prawdziwa.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Ten warunek będzie zawsze zwracał wartość true, ponieważ funkcja jest zawsze zdefiniowana. Czy chcesz wywołać ją zamiast tego?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Ta funkcja konstruktora może zostać przekonwertowana na deklarację klasy.", + "This_expression_is_always_nullish_2871": "To wyrażenie ma zawsze wartość null.", + "This_expression_is_never_nullish_2881": "To wyrażenie nigdy nie ma wartości null.", + "This_expression_is_not_callable_2349": "To wyrażenie nie jest wywoływalne.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Tego wyrażenia nie można wywoływać, ponieważ jest to metoda dostępu „get”. Czy chodziło Ci o użycie go bez znaków „()”?", + "This_expression_is_not_constructable_2351": "Tego wyrażenia nie można skonstruować.", + "This_file_already_has_a_default_export_95130": "Ten plik ma już domyślny eksport", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Ponowne zapisanie tej ścieżki importu jest niebezpieczne, ponieważ jest rozpoznawana jako inny projekt, a ścieżka względna między plikami wyjściowymi projektów nie jest taka sama jak ścieżka względna między plikami wejściowymi.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Ten import używa rozszerzenia „{0}” do rozpoznania jako wejściowego pliku TypeScript, ale nie zostanie ponownie zapisany podczas emitowania, ponieważ nie jest ścieżką względną.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "To jest rozszerzana deklaracja. Rozważ przeniesienie deklaracji rozszerzenia do tego samego pliku.", + "This_kind_of_expression_is_always_falsy_2873": "Tego rodzaju wyrażenie jest zawsze błędne.", + "This_kind_of_expression_is_always_truthy_2872": "Tego rodzaju wyrażenie jest zawsze prawdziwe.", + "This_may_be_converted_to_an_async_function_80006": "To można przekonwertować na funkcję asynchroniczną.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Ta składowa nie może mieć komentarza JSDoc z tagiem „override”, ponieważ nie jest zadeklarowany w klasie bazowej „{0}”. Czy chodziło Ci o „{1}”?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Ta składowa nie może mieć komentarza JSDoc z tagiem „@override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ten element członkowski nie może mieć komentarza JSDoc z tagiem „@zastąp”, ponieważ jego nazwa jest dynamiczna.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ nie jest zadeklarowany w klasie podstawowej „{0}”.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ nie jest on zadeklarowany w klasie bazowej \"{0}\". Czy chodzi Ci o \"{1}\"?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Ten element członkowski nie może mieć modyfikatora „override”, ponieważ jego klasa zawierająca „{0}” nie rozszerza innej klasy.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Ten element członkowski nie może mieć modyfikatora \"override\", ponieważ jego nazwa jest dynamiczna.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Ta składowa musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Ten element członkowski musi mieć modyfikator „override”, ponieważ przesłania on element członkowski w klasie podstawowej „{0}”.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Ten element członkowski musi mieć modyfikator „override”, ponieważ zastępuje metodę abstrakcyjną zadeklarowaną w klasie podstawowej „{0}”.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Do tego modułu można odwoływać się tylko za pomocą importów/eksportów języka ECMAScript, włączając flagę „{0}” i odwołując się do jego eksportu domyślnego.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Ten moduł jest zadeklarowany przy użyciu składni „export =” i może być używany tylko z importem domyślnym, gdy jest używana flaga „{0}”.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Tę operację można uprościć. Ta zmiana jest identyczna z „{0} {1} {2}”.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "To przeciążenie niejawnie zwraca typ „{0}”, ponieważ nie ma adnotacji zwracanego typu.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Ta sygnatura przeciążenia nie jest zgodna z jej sygnaturą implementacji.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Ten parametr nie jest dozwolony w dyrektywie „use strict”.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Ta właściwość parametru musi mieć komentarz JSDoc z tagiem „@override”, ponieważ zastępuje składową w klasie bazowej „{0}”.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Ta właściwość parametru musi mieć modyfikator \"override\", ponieważ zastępuje on członka w klasie bazowej \"{0}\".", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Tej flagi wyrażenia regularnego nie można przełączać w obrębie wzorca podrzędnego.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Ta flaga wyrażenia regularnego jest dostępna tylko w przypadku określania wartości docelowej „{0}” lub nowszej.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Ta względna ścieżka importu jest niebezpieczna do ponownego zapisania, ponieważ wygląda jak nazwa pliku, ale w rzeczywistości jest rozpoznawana jako „{0}”.", + "This_spread_always_overwrites_this_property_2785": "To rozmieszczenie zawsze powoduje zastąpienie tej właściwości.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Ta składnia jest niedozwolona, gdy jest włączona opcja \"erasableSyntaxOnly\".", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem .MTS lub CTS. Dodaj końcowy przecinek lub jawne ograniczenie.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Ta składnia jest zarezerwowana w plikach z rozszerzeniem. MTS lub. CTS. Użyj zamiast tego wyrażenia „as”.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Ta składnia wymaga zaimportowanego pomocnika, ale nie można znaleźć modułu „{0}”.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}”, który nie istnieje w elemencie „{0}”. Rozważ uaktualnienie wersji „{0}”.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Ta składnia wymaga zaimportowanego pomocnika o nazwie „{1}” z parametrami {2}, który nie jest zgodny z tym w elemencie „{0}”. Rozważ uaktualnienie wersji elementu „{0}”.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Ten parametr typu może wymagać ograniczenia „rozszerzeń{0}”.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "To użycie elementu „import” jest nieprawidłowe. Wywołania „import()” mogą być zapisywane, ale muszą mieć nawiasy i nie mogą mieć argumentów typu.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Aby przekonwertować ten plik na moduł ECMAScript, dodaj pole „\"type\": \"module\"” do „{0}”.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub dodaj pole „\"type\": \"module\"” do „{1}”.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Aby przekonwertować ten plik na moduł ECMAScript, zmień rozszerzenie jego pliku na „{0}” lub utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Aby przekonwertować ten plik na moduł ECMAScript, utwórz lokalny plik package.json z polem „{ \"type\": \"module\" }\".", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Wyrażenia „await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Instrukcje „await using” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "Deklaracje najwyższego poziomu w plikach .d.ts muszą rozpoczynać się od modyfikatora „declare” lub „export”.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Pętle „for await” najwyższego poziomu są dozwolone tylko wtedy, gdy opcja „module” jest ustawiona na wartość „es2022”, „esnext”, „system”, „node16”, „node18”, „node20”, „nodenext” lub „preserve”, a opcja „target” jest ustawiona na wartość „es2017” lub wyższą.", + "Trailing_comma_not_allowed_1009": "Końcowy przecinek jest niedozwolony.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transpiluj każdy plik jako oddzielny moduł (podobne do „ts.transpileModule”).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Spróbuj użyć polecenia „npm i --save-dev @types/{1}”, jeśli istnieje, lub dodać nowy plik deklaracji (.d.ts) zawierający ciąg „declare module '{0}';”", + "Trying_other_entries_in_rootDirs_6110": "Wykonywanie prób przy użyciu innych pozycji opcji „rootDirs”.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Wykonywanie próby przeprowadzenia podstawienia „{0}”, lokalizacja modułu kandydata: „{1}”.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "Typ krotki „{0}” o długości „{1}” nie ma żadnego elementu w indeksie „{2}”.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Argumenty typu krotki cyklicznie odwołują się do samych siebie.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "Po typie „{0}” można iterować tylko wtedy, gdy jest używana flaga „--downlevelIteration” lub parametr „--target” ma wartość „es2015” lub wyższą.", + "Type_0_cannot_be_used_as_an_index_type_2538": "Typu „{0}” nie można używać jako typu indeksu.", + "Type_0_cannot_be_used_to_index_type_1_2536": "Typu „{0}” nie można użyć do indeksowania typu „{1}”.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "Typ „{0}” nie spełnia warunków ograniczenia „{1}”.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "Typ „{0}” nie spełnia oczekiwanego typu „{1}”.", + "Type_0_has_no_call_signatures_2757": "Typ „{0}” nie ma sygnatur wywołania.", + "Type_0_has_no_construct_signatures_2761": "Typ „{0}” nie ma sygnatur konstrukcji.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "Typ „{0}” nie ma pasującej sygnatury indeksu dla typu „{1}”.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "Typy „{0}” i „{1}” nie mają żadnych wspólnych właściwości.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "Typ „{0}” nie ma podpisów, dla których ma zastosowanie lista argumentów typu ogólnego.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Typ „{0}” jest typem ogólnym i może być indeksowany tylko do odczytu.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "W typie „{0}” brakuje następujących właściwości z typu „{1}”: {2} i jeszcze {3}.", + "Type_0_is_not_a_constructor_function_type_2507": "Typ „{0}” nie jest typem funkcji konstruktora.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "Typ „{0}” nie jest prawidłowym zwracanym typem funkcji asynchronicznej w języku ES5, ponieważ nie odwołuje się do wartości konstruktora zgodnej z elementem Promise.", + "Type_0_is_not_an_array_type_2461": "Typ „{0}” nie jest typem tablicowym.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "Typ „{0}” nie jest typem tablicowym ani typem ciągu.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "Typ „{0}” nie jest typem tablicy ani ciągu lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "Typ „{0}” nie jest typem tablicy lub nie ma metody „[Symbol.iterator]()” zwracającej iterator.", + "Type_0_is_not_assignable_to_type_1_2322": "Typu „{0}” nie można przypisać do typu „{1}”.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "Nie można przypisać typu „{0}” do typu „{1}”. Czy chodziło Ci o „{2}”?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "Typu „{0}” nie można przypisać do typu „{1}”. Istnieją dwa różne typy o tej nazwie, lecz są ze sobą niezwiązane.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Nie można przypisać typu „{0}” do typu „{1}”, jak sugeruje adnotacja wariancji.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Nie można przypisać typu „{0}” do typu „{1}” zgodnie z wymaganiami dla obliczonych wartości składowych wyliczenia.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typów właściwości obiektu docelowego.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "Nie można przypisać typu \"{0}\" do typu \"{1}\" o wartości \"exactOptionalPropertyTypes: true\". Rozważ dodanie elementu \"undefined\" do typu elementu docelowego.", + "Type_0_is_not_comparable_to_type_1_2678": "Typu „{0}” nie można porównać z typem „{1}”.", + "Type_0_is_not_generic_2315": "Typ „{0}” nie jest ogólny.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "Typ „{0}” może reprezentować wartość pierwotną, co nie jest dozwolone jako prawy operand operatora „in”.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "Typ „{0}” musi zawierać metodę „[Symbol.asyncIterator]()” zwracającą iterator asynchroniczny.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "Typ „{0}” musi zawierać metodę „[Symbol.iterator]()” zwracającą iterator.", + "Type_0_provides_no_match_for_the_signature_1_2658": "Typ „{0}” nie udostępnia dopasowania dla sygnatury „{1}”.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "Typ „{0}” rekursywnie przywołuje sam siebie jako typ podstawowy.", + "Type_Checking_6248": "Sprawdzanie typu", + "Type_alias_0_circularly_references_itself_2456": "Alias typu „{0}” cyklicznie przywołuje sam siebie.", + "Type_alias_must_be_given_a_name_1439": "Alias typu musi mieć nazwę.", + "Type_alias_name_cannot_be_0_2457": "Alias typu nie może mieć nazwy „{0}”.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Aliasów typów można używać tylko w plikach TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Adnotacja typu nie może występować w deklaracji konstruktora.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Adnotacji typu można używać tylko w plikach TypeScript.", + "Type_argument_expected_1140": "Oczekiwano argumentu typu.", + "Type_argument_list_cannot_be_empty_1099": "Lista argumentów typu nie może być pusta.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Argumenty typu mogą być używane tylko w plikach TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Argumenty typu dla elementu „{0}” cyklicznie odwołują się do samych siebie.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Typ na pozycji {0} w źródle nie jest zgodny z typem na pozycji {1} w lokalizacji docelowej.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Typ na pozycjach od {0} do {1} w źródle nie jest zgodny z typem w pozycji {2} w lokalizacji docelowej.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "Typ zawierający nazwę prywatną „{0}” nie może być używany z elementem --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Pliki deklaracji typu do uwzględnienia w kompilacji.", + "Type_expected_1110": "Oczekiwano typu.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Twierdzenie importu typu powinno mieć dokładnie jeden klucz – „resolution-mode“ – z wartością „importuj“ lub „wymagaj“.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Atrybuty importu typów powinny mieć dokładnie jeden klucz — „resolution-mode” — z wartością „import” lub „require”.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Import typu modułu ECMAScript z modułu CommonJS musi mieć atrybut „resolution-mode”.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tworzenie wystąpienia typu jest nadmiernie szczegółowe i prawdopodobnie nieskończone.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Typ jest przywoływany bezpośrednio lub pośrednio w wywołaniu zwrotnym realizacji jego własnej metody „then”.", + "Type_library_referenced_via_0_from_file_1_1402": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}”", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteka typów jest przywoływana za pośrednictwem elementu „{0}” z pliku „{1}” o identyfikatorze packageId „{2}”", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "Typ operandu „await” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Typ wartości właściwości obliczanej to „{0}”, którego nie można przypisać do typu „{1}”.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "Typ zmiennej składowej wystąpienia „{0}” nie może odwoływać się do identyfikatora „{1}” zadeklarowanego w konstruktorze.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Typ iterowanych elementów operandu „yield*” musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "Typ właściwości „{0}” cyklicznie odwołuje się do siebie w zamapowanym typie „{1}”.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Typ operandu „yield” w generatorze asynchronicznym musi być prawidłową obietnicą lub nie może zawierać wywoływalnej składowej „then”.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Import tylko typu modułu ECMAScript z modułu CommonJS musi mieć atrybut „resolution-mode”.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Typ pochodzi z tego importu. Nie można wywołać ani skonstruować importu w stylu przestrzeni nazw, co spowoduje wystąpienie błędu w czasie wykonywania. Zamiast tego rozważ użycie importu domyślnego lub funkcji require importu.", + "Type_parameter_0_has_a_circular_constraint_2313": "Parametr typu „{0}” zawiera ograniczenie cykliczne.", + "Type_parameter_0_has_a_circular_default_2716": "Parametr typu „{0}” ma cykliczną wartość domyślną.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Parametr typu „{0}” sygnatury wywołania z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Parametr typu „{0}” sygnatury konstruktora z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Parametr typu „{0}” wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Parametr typu „{0}” wyeksportowanej funkcji ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Parametr typu „{0}” wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Parametr typu „{0}” wyeksportowanego mapowanego typu obiektu używa nazwy prywatnej „{1}”.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Parametr typu „{0}” wyeksportowanego aliasu typu ma nazwę prywatną „{1}” lub jej używa.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Parametr typu „{0}” metody z wyeksportowanego interfejsu ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Parametr typu „{0}” metody publicznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Parametr typu „{0}” publicznej metody statycznej z wyeksportowanej klasy ma nazwę prywatną „{1}” lub używa tej nazwy.", + "Type_parameter_declaration_expected_1139": "Oczekiwano deklaracji parametru typu.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Deklaracje parametrów typu mogą być używane tylko w plikach TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Wartości domyślne parametrów typu mogą się odwoływać tylko do wcześniej zadeklarowanych parametrów typu.", + "Type_parameter_list_cannot_be_empty_1098": "Lista parametrów typu nie może być pusta.", + "Type_parameter_name_cannot_be_0_2368": "Parametr typu nie może mieć nazwy „{0}”.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Parametry typu nie mogą występować w deklaracji konstruktora.", + "Type_predicate_0_is_not_assignable_to_1_1226": "Predykatu typów „{0}” nie można przypisać do elementu „{1}”.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Typ tworzy typ krotki, który jest zbyt duży, aby go reprezentować.", + "Type_reference_directive_0_was_not_resolved_6120": "======== Dyrektywa odwołania do typu „{0}” nie została rozpoznana. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}”, podstawowe: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== Dyrektywa odwołania do typu „{0}” została pomyślnie rozpoznana jako „{1}” z identyfikatorem pakietu „{2}”, podstawowe: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Wyrażeń asercji typu można używać tylko w plikach TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Typy nie mogą występować w deklaracjach eksportu w plikach JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Typy mają osobne deklaracje właściwości prywatnej „{0}”.", + "Types_of_construct_signatures_are_incompatible_2419": "Typy sygnatur konstrukcji są niezgodne.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Typy parametrów „{0}” i „{1}” są niezgodne.", + "Types_of_property_0_are_incompatible_2326": "Typy właściwości „{0}” są niezgodne.", + "Unable_to_open_file_0_6050": "Nie można otworzyć pliku „{0}”.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Nie można rozpoznać sygnatury dekoratora klasy wywołanego jako wyrażenie.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Nie można rozpoznać sygnatury dekoratora metody wywołanego jako wyrażenie.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Nie można rozpoznać sygnatury dekoratora parametru wywołanego jako wyrażenie.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Nie można rozpoznać sygnatury dekoratora właściwości wywołanego jako wyrażenie.", + "Undetermined_character_escape_1513": "Nieokreślony znak ucieczki.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Nieoczekiwane „{0}”. Czy chodziło Ci o ucieczkę za pomocą ukośnika odwrotnego?", + "Unexpected_end_of_text_1126": "Nieoczekiwany koniec tekstu.", + "Unexpected_keyword_or_identifier_1434": "Nieoczekiwane słowo kluczowe lub identyfikator.", + "Unexpected_token_1012": "Nieoczekiwany token.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Nieoczekiwany token. Oczekiwano konstruktora, metody, metody dostępu lub właściwości.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Nieoczekiwany token. Oczekiwano nazwy parametru typu bez nawiasów klamrowych.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Nieoczekiwany token. Czy chodziło o „{'>'}” lub „>”?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Nieoczekiwany token. Czy chodziło o „{'}'}” lub „}”?", + "Unexpected_token_expected_1179": "Nieoczekiwany token. Oczekiwano znaku „{”.", + "Unicode_escape_sequence_cannot_appear_here_17021": "W tym miejscu nie można wyświetlić sekwencji ucieczki standardu Unicode.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Sekwencje ucieczki standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Wyrażenia wartości właściwości standardu Unicode są dostępne tylko wtedy, gdy ustawiono flagę Unicode (u) lub flagę Unicode Sets (v).", + "Unknown_Unicode_property_name_1524": "Nieznana nazwa właściwości standardu Unicode.", + "Unknown_Unicode_property_name_or_value_1529": "Nieznana nazwa lub wartość właściwości standardu Unicode.", + "Unknown_Unicode_property_value_1526": "Nieznana wartość właściwości standardu Unicode.", + "Unknown_build_option_0_5072": "Nieznana opcja kompilacji „{0}”.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Nieznana opcja kompilacji „{0}”. Czy chodziło o „{1}”?", + "Unknown_compiler_option_0_5023": "Nieznana opcja kompilatora „{0}”.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Nieznana opcja kompilatora „{0}”. Czy chodziło o „{1}”?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Nieznane słowo kluczowe lub identyfikator. Czy chodziło Ci o „{0}”?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Nieznana opcja „excludes”. Czy chodziło o „exclude”?", + "Unknown_regular_expression_flag_1499": "Nieznana flaga wyrażenia regularnego.", + "Unknown_type_acquisition_option_0_17010": "Opcja pozyskania nieznanego typu „{0}”.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Nieznana opcja pozyskania typu „{0}”. Czy chodziło o „{1}”?", + "Unknown_watch_option_0_5078": "Nieznana opcja obserwowania „{0}”.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Nieznana opcja obserwowania: „{0}”. Czy chodziło Ci o „{1}”?", + "Unreachable_code_detected_7027": "Wykryto nieosiągalny kod.", + "Unterminated_Unicode_escape_sequence_1199": "Niezakończona sekwencja ucieczki kodu Unicode.", + "Unterminated_quoted_string_in_response_file_0_6045": "Niezakończony ciąg ujęty w cudzysłów w pliku odpowiedzi „{0}”.", + "Unterminated_regular_expression_literal_1161": "Niezakończony literał wyrażenia regularnego.", + "Unterminated_string_literal_1002": "Niezakończony literał ciągu znaków.", + "Unterminated_template_literal_1160": "Niezakończony literał szablonu.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Wywołania funkcji bez typu nie mogą przyjmować argumentów typu.", + "Unused_label_7028": "Nieużywana etykieta.", + "Unused_ts_expect_error_directive_2578": "Nieużywana dyrektywa „@ts-expect-error”.", + "Update_import_from_0_90058": "Aktualizuj import z „{0}”", + "Update_modifiers_of_0_90061": "Modyfikatory aktualizacji elementu „{0}”", + "Updating_output_timestamps_of_project_0_6359": "Trwa aktualizowanie sygnatury czasowej danych wyjściowych projektu „{0}”...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Trwa aktualizowanie niezmienionych sygnatur czasowych danych wyjściowych projektu „{0}”...", + "Use_0_95174": "Użyj „{0}”.", + "Use_0_instead_5106": "Zamiast tego użyj „{0}”.", + "Use_Number_isNaN_in_all_conditions_95175": "Użyj wartości „Number.isNaN” we wszystkich warunkach.", + "Use_element_access_for_0_95145": "Użyj dostępu do elementu w przypadku elementu „{0}”", + "Use_element_access_for_all_undeclared_properties_95146": "Użyj dostępu do elementu w przypadku wszystkich niezadeklarowanych właściwości.", + "Use_import_type_95180": "Użyj opcji „import type”", + "Use_synthetic_default_member_95016": "Użyj syntetycznej składowej „default”.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Podczas rozpoznawania importów pakietów użyj pola „exports” pliku package.json.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Podczas rozpoznawania importów użyj pola „imports” pliku package.json.", + "Use_type_0_95181": "Użyj „typu {0}”", + "Using_0_subpath_1_with_target_2_6404": "Używanie „{0}” ścieżki podrzędnej „{1}” z elementem docelowym „{2}”.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "Użycie fragmentów rozszerzenia JSX wymaga, aby fabryka fragmentów „{0}” była w zakresie, ale nie można jej znaleźć.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Używanie ciągu w instrukcji „for...of” jest obsługiwane tylko w języku ECMAScript 5 lub nowszym.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Użycie elementu --build, -b sprawi, że narzędzie tsc będzie zachowywało się bardziej jak orkiestrator kompilacji niż kompilator. Ta opcja jest wykorzystywana do wyzwalania kompilacji projektów złożonych, o których dowiesz się więcej na stronie {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Using compiler options of project reference redirect '{0}'.", + "VERSION_6036": "WERSJA", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "Wartość typu „{0}” nie ma żadnych wspólnych właściwości z typem „{1}”. Czy jej wywołanie było zamierzone?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "Nie można wywołać wartości typu „{0}”. Czy miał zostać użyty operator „new”?", + "Variable_0_implicitly_has_an_1_type_7005": "Dla zmiennej „{0}” niejawnie określono typ „{1}”.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "Zmienna „{0}” niejawnie ma typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "Zmienna „{0}” niejawnie ma typ „{1}” w niektórych lokalizacjach, ale lepszy typ można wywnioskować na podstawie użycia.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "Zmienna „{0}” ma niejawnie typ „{1}” w niektórych lokalizacjach, w których nie można określić jej typu.", + "Variable_0_is_used_before_being_assigned_2454": "Zmienna „{0}” jest używana przed przypisaniem.", + "Variable_declaration_expected_1134": "Oczekiwano deklaracji zmiennej.", + "Variable_declaration_list_cannot_be_empty_1123": "Lista deklaracji zmiennych nie może być pusta.", + "Variable_declaration_not_allowed_at_this_location_1440": "Deklaracja zmiennej jest niedozwolona w tej lokalizacji.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Zmienna musi mieć jawną adnotację typu z właściwością --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Zmienne z wieloma deklaracjami nie mogą być śródwierszowe.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Element ze zmienną liczbą argumentów na pozycji {0} w źródle nie jest zgodny z elementem na pozycji {1} w lokalizacji docelowej.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Adnotacje wariancji są obsługiwane tylko w aliasach typów obiektów, funkcji, konstruktorów i mapowanych typów.", + "Version_0_6029": "Wersja {0}", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Odwiedź https://aka.ms/tsconfig, aby dowiedzieć się więcej o tym pliku", + "WATCH_OPTIONS_6918": "OPCJE OBSERWACJI", + "Watch_and_Build_Modes_6250": "Tryb wyrażeń kontrolnych i kompilowania", + "Watch_input_files_6005": "Obserwuj pliki wejściowe.", + "Watch_option_0_requires_a_value_of_type_1_5080": "Opcja obserwowania „{0}” wymaga wartości typu {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Możemy napisać typ tylko dla elementu „{0}”, dodając typ dla całego parametru w tym miejscu.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Podczas przypisywania funkcji upewnij się, że parametry i zwracane wartości są zgodne pod względem podtypów.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Podczas sprawdzania typów uwzględniaj wartości „null” i „undefined”.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Określa, czy zachować nieaktualne dane wyjściowe konsoli w trybie śledzenia zamiast wyczyścić ekran.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Opakuj wszystkie nieprawidłowe znaki w kontenerze wyrażenia", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Zawijaj wszystkie nieprawidłowe wyrażenia dekoratora w nawiasy", + "Wrap_all_object_literal_with_parentheses_95116": "Zawijaj wszystkie literały obiektu z nawiasami", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Opakuj wszystkie elementy JSX bez elementu nadrzędnego we fragment JSX", + "Wrap_in_JSX_fragment_95120": "Opakuj we fragment JSX", + "Wrap_in_parentheses_95194": "Zawijaj w nawiasy", + "Wrap_invalid_character_in_an_expression_container_95108": "Opakuj nieprawidłowy znak w kontenerze wyrażenia", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Zawijaj następującą treść z nawiasami, która powinna być literałem obiektu", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "O wszystkich opcjach kompilatora przeczytasz na stronie {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Nie można zmienić nazwy modułu za pomocą importu globalnego.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Nie można zmieniać nazw elementów zdefiniowanych w folderze „node_modules”.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Nie można zmieniać nazw elementów zdefiniowanych w innym folderze „node_modules”.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Nie można zmienić nazw elementów zdefiniowanych w standardowej bibliotece TypeScript.", + "You_cannot_rename_this_element_8000": "Nie można zmienić nazwy tego elementu.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "Element „{0}” akceptuje za mało argumentów, aby można go było użyć w tym miejscu jako dekorator. Czy chcesz najpierw go wywołać i zapisać tag „@{0}()”?", + "_0_and_1_index_signatures_are_incompatible_2330": "Sygnatury indeksów „{0}” i „{1}” są niezgodne.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "Operacji „{0}” i „{1}” nie można mieszać bez nawiasów.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "Element „{0}” został określony dwa razy. Atrybut o nazwie „{0}” zostanie przesłonięty.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "Element „{0}” na końcu typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "Element „{0}” na początku typu nie jest prawidłową składnią języka TypeScript. Czy chodziło Ci o napisanie „{1}”?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "Element „{0}” można zaimportować tylko przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "Element „{0}” można zaimportować tylko przy użyciu importu domyślnego.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "Element „{0}” można zaimportować za pomocą wywołania „require” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "Element „{0}” można zaimportować tylko za pomocą wywołania „require” lub przy użyciu importu domyślnego.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub importu domyślnego.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "Element „{0}” można zaimportować tylko przy użyciu wyrażenia „import {1} = require({2})” lub przez włączenie flagi „esModuleInterop” i użycie importu domyślnego.", + "_0_cannot_be_used_as_a_JSX_component_2786": "Elementu „{0}” nie można użyć jako składnika JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "Element „{0}” nie może być używany jako wartość, ponieważ został wyeksportowany przy użyciu aliasu „export type”.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "Element „{0}” nie może być używany jako wartość, ponieważ został zaimportowany przy użyciu aliasu „import type”.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Składniki „{0}” nie akceptują tekstu jako elementów podrzędnych. Tekst w JSX ma typ „string”, ale oczekiwany typ elementu „{1}” to „{2}”.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Nie można utworzyć wystąpienia elementu „{0}” z dowolnym typem, który może być niezwiązany z elementem „{1}”.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Deklaracje „{0}” mogą być deklarowane tylko w bloku.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "Deklaracje „{0}” mogą być używane tylko w plikach TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Deklaracje „{0}” mogą nie mieć wzorców powiązań.", + "_0_declarations_must_be_initialized_1155": "Deklaracje „{0}” muszą być zainicjowane.", + "_0_expected_1005": "Oczekiwano elementu „{0}”.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "Element „{0}” ma typ ciągu, ale po włączeniu opcji „isolatedModules” musi mieć składnię ciągu rozpoznawalną składniowo.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "Element „{0}” nie ma wyeksportowanego elementu członkowskiego „{1}”. Czy chodziło o „{2}”?", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "Element „{0}” niejawnie ma zwracany typ „{1}”, ale lepszy typ można wywnioskować na podstawie użycia.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dla elementu „{0}” niejawnie określono zwracany typ „any”, ponieważ nie zawiera on adnotacji zwracanego typu i jest przywoływany bezpośrednio lub pośrednio w jednym z jego zwracanych wyrażeń.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Dla elementu „{0}” niejawnie określono typ „any”, ponieważ nie zawiera on adnotacji typu i jest przywoływany bezpośrednio lub pośrednio w jego własnym inicjatorze.", + "_0_index_signatures_are_incompatible_2634": "Sygnatury indeksów „{0}” są niezgodne.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "Typu indeksu „{0}” „{1}” nie można przypisać do typu indeksu „{2}” „{3}”.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "Element „{0}” jest elementem podstawowym, ale element „{1}” jest obiektem otoki. Preferuje się użycie elementu „{0}”, jeśli jest to możliwe.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "„{0}” jest typem i nie można go zaimportować w plikach JavaScript. Użyj elementu „{1}” w adnotacji typu JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "Element „{0}” jest typem i należy go zaimportować przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "„{0}” to nieużywana zmiana nazwy elementu „{1}”. Czy zamierzano używać go jako adnotacji typu?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "Element „{0}” można przypisać do ograniczenia typu „{1}”, ale wystąpienie typu „{1}” można utworzyć z innym podtypem ograniczenia „{2}”.", + "_0_is_automatically_exported_here_18044": "W tym miejscu jest automatycznie eksportowany element „{0}”.", + "_0_is_declared_but_its_value_is_never_read_6133": "Element „{0}” jest zadeklarowany, ale jego wartość nie jest nigdy odczytywana.", + "_0_is_declared_but_never_used_6196": "Element „{0}” jest zadeklarowany, ale nie jest nigdy używany.", + "_0_is_declared_here_2728": "Element „{0}” jest zadeklarowany tutaj.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "Element „{0}” jest zdefiniowany jako właściwość w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako metoda dostępu.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "Element „{0}” jest zdefiniowany jako metoda dostępu w klasie „{1}”, ale jest przesłaniany tutaj w elemencie „{2}” jako właściwość wystąpienia.", + "_0_is_deprecated_6385": "Element „{0}” jest przestarzały.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "„{0}” nie jest prawidłową metawłaściwością słowa kluczowego „{1}”. Czy miał to być element „{2}”?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer_18061": "„{0}” nie jest prawidłową meta-właściwością słowa kluczowego „import”. Czy chodziło Ci o „meta”, czy „defer”?", + "_0_is_not_allowed_as_a_parameter_name_1390": "„{0}” jest niedozwolone jako nazwa parametru.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "Element „{0}” nie jest dozwolony jako nazwa deklaracji zmiennej.", + "_0_is_of_type_unknown_18046": "Element „{0}” jest typu „nieznany”.", + "_0_is_possibly_null_18047": "Element „{0}” prawdopodobnie ma wartość „null”.", + "_0_is_possibly_null_or_undefined_18049": "Element „{0}” prawdopodobnie ma wartość „null” lub jest „niezdefiniowany”.", + "_0_is_possibly_undefined_18048": "Element „{0}” jest prawdopodobnie „niezdefiniowany”.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnym wyrażeniu podstawowym.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "Element „{0}” jest przywoływany bezpośrednio lub pośrednio w jego własnej adnotacji typu.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "Element „{0}” został określony więcej niż raz, dlatego to użycie zostanie przesłonięte.", + "_0_list_cannot_be_empty_1097": "Lista „{0}” nie może być pusta.", + "_0_modifier_already_seen_1030": "Napotkano już modyfikator „{0}”.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "Modyfikator „{0}” może występować tylko w parametrze typu klasy, interfejsu lub aliasu typu", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "Modyfikator „{0}” może występować tylko w parametrze typu funkcji, metody lub klasy", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "Modyfikator „{0}” nie może występować w deklaracji konstruktora.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "Modyfikator „{0}” nie może być stosowany w przypadku elementu przestrzeni nazw lub modułu.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "Modyfikator „{0}” nie może występować w parametrze.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "Modyfikator „{0}” nie może być stosowany w przypadku składowej typu.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "Modyfikator „{0}” nie może występować w parametrze typu", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "Modyfikator „{0}” nie może występować w deklaracji „using”.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "Modyfikator „{0}” nie może występować w deklaracji „await using”.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "Modyfikator „{0}” nie może być stosowany w przypadku sygnatury indeksu.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "Modyfikator „{0}” nie może występować w elementach klasy tego rodzaju.", + "_0_modifier_cannot_be_used_here_1042": "Modyfikatora „{0}” nie można użyć w tym miejscu.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "Modyfikatora „{0}” nie można użyć w otaczającym kontekście.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "Modyfikatora „{0}” nie można używać z modyfikatorem „{1}”.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "Modyfikatora „{0}” nie można używać z identyfikatorem prywatnym.", + "_0_modifier_must_precede_1_modifier_1029": "Modyfikator „{0}” musi występować przed modyfikatorem „{1}”.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "Po wyrażeniu „\\{0}” musi następować wyrażenie wartości właściwości standardu Unicode ujęte w nawiasy klamrowe.", + "_0_needs_an_explicit_type_annotation_2782": "Element „{0}” wymaga jawnej adnotacji typu.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "Element „{0}” odwołuje się tylko do typu, ale jest używany tutaj jako przestrzeń nazw.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "Element „{0}” odwołuje się jedynie do typu, ale jest używany w tym miejscu jako wartość.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "Element „{0}” odwołuje się do typu, ale jest używany tutaj jako wartość. Czy chodziło o użycie wyrażenia „{1} in {0}”?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "Element \"{0}\" odwołuje się tylko do typu, ale jest używany tutaj jako wartość. Czy chcesz zmienić bibliotekę docelową? Spróbuj zmienić opcję kompilatora \"lib\" na es2015 lub nowszą.", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "„{0}” odnosi się do globalnego formatu UMD, ale bieżący plik jest modułem. Rozważ zamiast tego dodanie importu.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "Element „{0}” odwołuje się do wartości, ale jest używany tutaj jako typ. Czy chodziło o „typeof {0}”?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "Element „{0}” jest rozpoznawany jako typ i musi być oznaczony jako tylko typ w tym pliku przed ponownym wyeksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać zaimportowany przy użyciu importu tylko typu, gdy jest włączona opcja „verbatimModuleSyntax”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „typ importu”, gdzie element „{0}” jest importowany.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi być oznaczony jako tylko typ w tym pliku przed ponownym eksportowaniem po włączeniu opcji „{1}”. Rozważ użycie parametru „export type { domyślnie {0} }”.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "Element „{0}” jest rozpoznawany jako deklaracja tylko typu i musi zostać ponownie wyeksportowany przy użyciu ponownego eksportowania tylko typu, gdy włączono opcję „{1}”.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "Element \"{0}\" powinien być ustawiony wewnątrz obiektu \"compilerOptions\" pliku json konfiguracji", + "_0_tag_already_specified_1223": "Tag „{0}” jest już określony.", + "_0_was_also_declared_here_6203": "Element „{0}” został również zadeklarowany w tym miejscu.", + "_0_was_exported_here_1377": "Element „{0}” został wyeksportowany tutaj.", + "_0_was_imported_here_1376": "Element „{0}” został zaimportowany tutaj.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dla elementu „{0}” bez adnotacji zwracanego typu niejawnie określono zwracany typ „{1}”.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "Modyfikator „abstract” może być stosowany jedynie w przypadku deklaracji klasy, metody lub właściwości.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "Modyfikator „accessor” może występować tylko w deklaracji właściwości.", + "and_here_6204": "i tutaj.", + "and_npm_install_D_types_Slashnode_6290": "i npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "Argumentów nie można odwoływać w inicjalizatorach właściwości ani w blokach inicjalizacji statycznej klasy.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "„auto”: Traktuj pliki za pomocą importów, eksportów, import.meta, jsx (z jsx: react-jsx) lub formatu esm (z modułem: node16+) jako moduły.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "Nie można użyć wyrażenia „await” wewnątrz bloku statycznego klasy.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "Wyrażenia „await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "Wyrażenia „await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "Wyrażeń „await” nie można używać w inicjatorze parametru.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "Operator „await” nie ma wpływu na typ tego wyrażenia.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Deklaracje „await using” są niedozwolone w kontekstach otoczenia.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "Instrukcje „await using” są dozwolone tylko na najwyższym poziomie pliku, gdy ten plik jest modułem, ale ten plik nie ma importów ani eksportów. Rozważ dodanie pustego wyrażenia „export {}”, aby uczynić ten plik modułem.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instrukcje „await using” są dozwolone tylko w ramach funkcji asynchronicznych i na najwyższych poziomach modułów.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instrukcji „await using” nie można używać wewnątrz bloku statycznego klasy.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "Opcja „baseUrl” ma ustawioną wartość „{0}”. Ta wartość zostanie użyta do rozpoznania innej niż względna nazwy modułu „{1}”.", + "c_must_be_followed_by_an_ASCII_letter_1512": "Po wyrażeniu „\\c” musi następować litera ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "Elementu „#!” można użyć tylko na początku pliku.", + "case_or_default_expected_1130": "Oczekiwano elementu „case” lub „default”.", + "catch_or_finally_expected_1472": "Oczekiwano instrukcji „catch” lub „finally”.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest wartość nieskończona.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "Wynikiem obliczenia inicjatora składowej wyliczenia ze specyfikatorem „const” jest niedozwolona wartość „NaN”.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "inicjatory składowych wyliczenia const muszą być wyrażeniami stałymi.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Wyliczenia ze specyfikatorem „const” mogą być używane tylko w wyrażeniach dostępu do indeksu lub właściwości albo po prawej stronie deklaracji importu, przypisania eksportu lub typu zapytania.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Nie można użyć ciągu „constructor” jako nazwy właściwości parametru.", + "constructor_is_a_reserved_word_18012": "„#constructor” jest słowem zastrzeżonym.", + "default_Colon_6903": "wartość domyślna:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "Nie można wywołać elementu „delete” dla identyfikatora w trybie z ograniczeniami.", + "export_Asterisk_does_not_re_export_a_default_1195": "Wyrażenie „export *” nie eksportuje ponownie eksportów domyślnych.", + "export_can_only_be_used_in_TypeScript_files_8003": "Składnia „export =” może być używana tylko w plikach TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "Modyfikator „export” nie może być stosowany do modułów otoczenia ani rozszerzeń modułów, ponieważ są one zawsze widoczne.", + "extends_clause_already_seen_1172": "Napotkano już klauzulę „extends”.", + "extends_clause_must_precede_implements_clause_1173": "Klauzula „extends” musi poprzedzać klauzulę „implements”.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Klauzula „extends” wyeksportowanej klasy „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Klauzula „extends” wyeksportowanej klasy ma nazwę prywatną „{0}” lub używa tej nazwy.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Klauzula „extends” wyeksportowanego interfejsu „{0}” ma nazwę prywatną „{1}” lub używa tej nazwy.", + "false_unless_composite_is_set_6906": "\"false\", chyba że ustawiono element \"composite\"", + "false_unless_strict_is_set_6905": "\"false\", chyba że ustawiono \"strict\"", + "file_6025": "plik", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Pętle „for await” na najwyższym poziomie pliku są dozwolone tylko wtedy, gdy plik jest modułem, ale ten plik nie ma żadnych importów ani eksportów. Rozważ dodanie pustego elementu „export {}”, aby ten plik był modułem.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Pętle „for await” są dozwolone tylko w funkcjach asynchronicznych i na najwyższym poziomie modułów.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Pętli „for await” nie można używać wewnątrz bloku statycznego klasy.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "Metody dostępu „get” i „set” nie mogą deklarować parametrów „this”.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "\"[]\" jeśli określono \"files\", w przeciwnym razie \"[\"**/*\"]5D;\"", + "implements_clause_already_seen_1175": "Napotkano już klauzulę „implements”.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Klauzule „implements” mogą być używane tylko w plikach TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "Ciąg „import ... =” może być używany tylko w plikach TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "Deklaracje „infer” są dozwolone tylko w klauzuli „extends” typu warunkowego.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "Po wyrażeniu „\\k” musi następować nazwa grupy przechwytywania ujęta w nawiasy ostre.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "Element „let” nie może być używany jako nazwa w deklaracjach „let” ani „const”.", + "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === \"AMD\" lub \"UMD\" lub \"System\" lub \"ES6\", a następnie \"Classic\", w przeciwnym razie \"Node\"", + "module_system_or_esModuleInterop_6904": "module === \"system\" lub esModuleInterop", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Wyrażenie „new”, którego element docelowy nie ma sygnatury konstrukcji, jest niejawnie typu „any”.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "\"[\"node_modules\", \"bower_components\", \"jspm_packages\"]\", plus wartość elementu \"outDir\", jeśli jest określona.", + "one_of_Colon_6900": "jeden z:", + "one_or_more_Colon_6901": "co najmniej jeden:", + "options_6024": "opcje", + "or_JSX_element_expected_1145": "Oczekiwano elementu „{” lub JSX.", + "or_expected_1144": "Oczekiwano znaku „{” lub „;”.", + "package_json_does_not_have_a_0_field_6100": "Plik „package.json” nie zawiera pola „{0}”.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "Plik „package.json” nie zawiera wpisu „typesVersions” odpowiadającego wersji „{0}”.", + "package_json_had_a_falsy_0_field_6220": "Plik „package.json” miał błędne pole „{0}”.", + "package_json_has_0_field_1_that_references_2_6101": "Plik „package.json” zawiera pole „{0}” „{1}” odwołujące się do elementu „{2}”.", + "package_json_has_a_peerDependencies_field_6281": "Plik „package.json” ma pole „peerDependencies”.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który nie jest prawidłowym zakresem semver.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "Plik „package.json” ma wpis „{0}” pola „typesVersions”, który dopasowuje wersję kompilatora „{1}”, szukając wzorca odpowiadającego nazwie modułu „{2}”.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "Plik „package.json” zawiera pole „typesVersions” z mapowaniami ścieżek specyficznymi dla wersji.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "Zakres package.json „{0}” jawnie mapuje specyfikator „{1}” na wartość null.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "Zakres package.json „{0}” ma nieprawidłowy typ elementu docelowego specyfikatora „{1}”", + "package_json_scope_0_has_no_imports_defined_6273": "Zakres package.json „{0}” nie ma zdefiniowanych importów.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "Opcja „paths” została określona. Wyszukiwanie wzorca zgodnego z nazwą modułu „{0}”.", + "q_is_only_available_inside_character_class_1511": "Wyrażenie „\\q” jest dostępne tylko wewnątrz klasy znaków.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "Po wyrażeniu „\\q” muszą następować alternatywy ciągów ujęte w nawiasy klamrowe.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "Modyfikator „readonly” może występować jedynie w deklaracji właściwości lub sygnaturze indeksu.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "Modyfikator typu „readonly” jest dozwolony tylko w typach literału tablicy i krotki.", + "require_call_may_be_converted_to_an_import_80005": "Wywołanie „require” może zostać przekonwertowane na wywołanie import.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "Element „resolution-mode“ można ustawić wyłącznie dla importów tylko typów.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "Element „resolution-mode“ jest jedynym prawidłowym kluczem dla twierdzenia importu typu.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "Element „resolution-mode” jest jedynym prawidłowym kluczem dla atrybutów importu typu.", + "resolution_mode_should_be_either_require_or_import_1453": "Element „resolution-mode” powinien mieć wartość „require” lub „import”.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "Opcja „rootDirs” została ustawiona. Zostanie ona użyta do rozpoznania względnej nazwy modułu „{0}”.", + "super_can_only_be_referenced_in_a_derived_class_2335": "Element „super” może być przywoływany tylko w klasie pochodnej.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "Element „super” może być przywoływany jedynie w składowych klas pochodnych lub wyrażeń literałów obiektów.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "Nie można przywołać elementu „super” w obliczonej nazwie właściwości.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "Nie można przywoływać elementu „super” w argumentach konstruktora.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Element „super” jest dozwolony w składowych wyrażeń literałów obiektów tylko wtedy, gdy opcja „target” ma wartość „ES2015” lub wyższą.", + "super_may_not_use_type_arguments_2754": "Element „super” nie może używać argumentów typu.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Element „super” należy wywołać przed uzyskaniem dostępu do właściwości elementu „super” w konstruktorze klasy pochodnej.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Element „super” musi być wywoływany przed uzyskaniem dostępu do elementu „this” w konstruktorze klasy pochodnej.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "Po elemencie „super” musi występować lista argumentów lub metoda dostępu do składowej.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "Dostęp do właściwości „super” jest dozwolony tylko w konstruktorze, funkcji składowej lub metodzie dostępu składowej klasy pochodnej.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "Nie można przywołać elementu „this” w obliczonej nazwie właściwości.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "Nie można przywołać elementu „this” w treści modułu ani przestrzeni nazw.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "Nie można przywołać elementu „this” w inicjatorze właściwości statycznej.", + "this_cannot_be_referenced_in_current_location_2332": "Nie można przywołać elementu „this” w bieżącej lokalizacji.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "Element „this” niejawnie przyjmuje typ „any”, ponieważ nie ma adnotacji typu.", + "true_for_ES2022_and_above_including_ESNext_6930": "wartość \"true\" dla ES2022 i powyżej, uwzględniając ESNext.", + "true_if_composite_false_otherwise_6909": "\"true\", jeśli \"composite\", w przeciwnym razie \"false\"", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "„true”, gdy element „moduleResolution” ma wartość „node16”, „nodenext” lub „bundler”; w przeciwnym razie „false”.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: kompilator TypeScript", + "type_Colon_6902": "typ:", + "unique_symbol_types_are_not_allowed_here_1335": "Typy „unique symbol” nie są dozwolone w tym miejscu.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Typy „unique symbol” są dozwolone tylko w zmiennych w instrukcji zmiennej.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Typów „unique symbol” nie można używać w deklaracji zmiennej z nazwą powiązania.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "Dyrektywy „use strict” nie można używać z listą parametrów, które nie są parametrami prostymi.", + "use_strict_directive_used_here_1349": "Dyrektywa „use strict” użyta w tym miejscu.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Deklaracje „using” nie są dozwolone w kontekstach otoczenia.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "Instrukcje „with” są niedozwolone w bloku funkcji asynchronicznej.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Instrukcje „with” są niedozwolone w trybie z ograniczeniami.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Wyrażenie „yield” niejawnie zwraca wynik w postaci typu „any”, ponieważ w zawierającym generatorze brakuje adnotacji zwracanego typu.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "Wyrażeń „yield” nie można używać w inicjatorze parametru." +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/0a/d630c6fad95dbd34e84bff101082e33beebc914a0c2ef6beee0afca927313d0d2d2f6396aa651d8510955d42492c582ba0ca0914d90ef08d4ee39119b87d83-exec b/.pnpm-store/v11/files/0a/d630c6fad95dbd34e84bff101082e33beebc914a0c2ef6beee0afca927313d0d2d2f6396aa651d8510955d42492c582ba0ca0914d90ef08d4ee39119b87d83-exec new file mode 100755 index 00000000..44261053 --- /dev/null +++ b/.pnpm-store/v11/files/0a/d630c6fad95dbd34e84bff101082e33beebc914a0c2ef6beee0afca927313d0d2d2f6396aa651d8510955d42492c582ba0ca0914d90ef08d4ee39119b87d83-exec @@ -0,0 +1,369 @@ +declare module "child_process" { + import * as events from "events"; + import * as stream from "stream"; + import * as net from "net"; + + interface ChildProcess extends events.EventEmitter { + stdin: stream.Writable; + stdout: stream.Readable; + stderr: stream.Readable; + readonly channel?: stream.Pipe | null; + stdio: [stream.Writable, stream.Readable, stream.Readable]; + killed: boolean; + pid: number; + readonly exitCode: number | null; + readonly signalCode: number | null; + kill(signal?: string): void; + send(message: any, callback?: (error: Error) => void): boolean; + send(message: any, sendHandle?: net.Socket | net.Server, callback?: (error: Error) => void): boolean; + send(message: any, sendHandle?: net.Socket | net.Server, options?: MessageOptions, callback?: (error: Error) => void): boolean; + connected: boolean; + disconnect(): void; + unref(): void; + ref(): void; + + /** + * events.EventEmitter + * 1. close + * 2. disconnect + * 3. error + * 4. exit + * 5. message + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (code: number, signal: string) => void): this; + addListener(event: "disconnect", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (code: number | null, signal: string | null) => void): this; + addListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", code: number, signal: string): boolean; + emit(event: "disconnect"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "exit", code: number | null, signal: string | null): boolean; + emit(event: "message", message: any, sendHandle: net.Socket | net.Server): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (code: number, signal: string) => void): this; + on(event: "disconnect", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (code: number | null, signal: string | null) => void): this; + on(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (code: number, signal: string) => void): this; + once(event: "disconnect", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (code: number | null, signal: string | null) => void): this; + once(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (code: number, signal: string) => void): this; + prependListener(event: "disconnect", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (code: number | null, signal: string | null) => void): this; + prependListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "disconnect", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "exit", listener: (code: number | null, signal: string | null) => void): this; + prependOnceListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + } + + interface MessageOptions { + keepOpen?: boolean; + } + + type StdioOptions = "pipe" | "ignore" | "inherit" | Array<("pipe" | "ipc" | "ignore" | "inherit" | stream.Stream | number | null | undefined)>; + + interface SpawnOptions { + cwd?: string; + env?: NodeJS.ProcessEnv; + argv0?: string; + stdio?: StdioOptions; + detached?: boolean; + uid?: number; + gid?: number; + shell?: boolean | string; + windowsVerbatimArguments?: boolean; + windowsHide?: boolean; + } + + function spawn(command: string, options?: SpawnOptions): ChildProcess; + function spawn(command: string, args?: ReadonlyArray, options?: SpawnOptions): ChildProcess; + + interface ExecOptions { + cwd?: string; + env?: NodeJS.ProcessEnv; + shell?: string; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + uid?: number; + gid?: number; + windowsHide?: boolean; + } + + interface ExecOptionsWithStringEncoding extends ExecOptions { + encoding: BufferEncoding; + } + + interface ExecOptionsWithBufferEncoding extends ExecOptions { + encoding: string | null; // specify `null`. + } + + interface ExecException extends Error { + cmd?: string; + killed?: boolean; + code?: number; + signal?: string; + } + + // no `options` definitely means stdout/stderr are `string`. + function exec(command: string, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function exec(command: string, options: { encoding: "buffer" | null } & ExecOptions, callback?: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess; + + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function exec(command: string, options: { encoding: BufferEncoding } & ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function exec(command: string, options: { encoding: string } & ExecOptions, callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void): ChildProcess; + + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function exec(command: string, options: ExecOptions, callback?: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function exec( + command: string, + options: ({ encoding?: string | null } & ExecOptions) | undefined | null, + callback?: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace exec { + function __promisify__(command: string): Promise<{ stdout: string, stderr: string }>; + function __promisify__(command: string, options: { encoding: "buffer" | null } & ExecOptions): Promise<{ stdout: Buffer, stderr: Buffer }>; + function __promisify__(command: string, options: { encoding: BufferEncoding } & ExecOptions): Promise<{ stdout: string, stderr: string }>; + function __promisify__(command: string, options: ExecOptions): Promise<{ stdout: string, stderr: string }>; + function __promisify__(command: string, options?: ({ encoding?: string | null } & ExecOptions) | null): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; + } + + interface ExecFileOptions { + cwd?: string; + env?: NodeJS.ProcessEnv; + timeout?: number; + maxBuffer?: number; + killSignal?: string; + uid?: number; + gid?: number; + windowsHide?: boolean; + windowsVerbatimArguments?: boolean; + shell?: boolean | string; + } + interface ExecFileOptionsWithStringEncoding extends ExecFileOptions { + encoding: BufferEncoding; + } + interface ExecFileOptionsWithBufferEncoding extends ExecFileOptions { + encoding: 'buffer' | null; + } + interface ExecFileOptionsWithOtherEncoding extends ExecFileOptions { + encoding: string; + } + + function execFile(file: string): ChildProcess; + function execFile(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess; + function execFile(file: string, args?: ReadonlyArray | null): ChildProcess; + function execFile(file: string, args: ReadonlyArray | undefined | null, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): ChildProcess; + + // no `options` definitely means stdout/stderr are `string`. + function execFile(file: string, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + function execFile(file: string, args: ReadonlyArray | undefined | null, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + + // `options` with `"buffer"` or `null` for `encoding` means stdout/stderr are definitely `Buffer`. + function execFile(file: string, options: ExecFileOptionsWithBufferEncoding, callback: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithBufferEncoding, + callback: (error: ExecException | null, stdout: Buffer, stderr: Buffer) => void, + ): ChildProcess; + + // `options` with well known `encoding` means stdout/stderr are definitely `string`. + function execFile(file: string, options: ExecFileOptionsWithStringEncoding, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithStringEncoding, + callback: (error: ExecException | null, stdout: string, stderr: string) => void, + ): ChildProcess; + + // `options` with an `encoding` whose type is `string` means stdout/stderr could either be `Buffer` or `string`. + // There is no guarantee the `encoding` is unknown as `string` is a superset of `BufferEncoding`. + function execFile( + file: string, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptionsWithOtherEncoding, + callback: (error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void, + ): ChildProcess; + + // `options` without an `encoding` means stdout/stderr are definitely `string`. + function execFile(file: string, options: ExecFileOptions, callback: (error: ExecException | null, stdout: string, stderr: string) => void): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ExecFileOptions, + callback: (error: ExecException | null, stdout: string, stderr: string) => void + ): ChildProcess; + + // fallback if nothing else matches. Worst case is always `string | Buffer`. + function execFile( + file: string, + options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null, + callback: ((error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null, + ): ChildProcess; + function execFile( + file: string, + args: ReadonlyArray | undefined | null, + options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null, + callback: ((error: ExecException | null, stdout: string | Buffer, stderr: string | Buffer) => void) | undefined | null, + ): ChildProcess; + + // NOTE: This namespace provides design-time support for util.promisify. Exported members do not exist at runtime. + namespace execFile { + function __promisify__(file: string): Promise<{ stdout: string, stderr: string }>; + function __promisify__(file: string, args: ReadonlyArray | undefined | null): Promise<{ stdout: string, stderr: string }>; + function __promisify__(file: string, options: ExecFileOptionsWithBufferEncoding): Promise<{ stdout: Buffer, stderr: Buffer }>; + function __promisify__(file: string, args: ReadonlyArray | undefined | null, options: ExecFileOptionsWithBufferEncoding): Promise<{ stdout: Buffer, stderr: Buffer }>; + function __promisify__(file: string, options: ExecFileOptionsWithStringEncoding): Promise<{ stdout: string, stderr: string }>; + function __promisify__(file: string, args: ReadonlyArray | undefined | null, options: ExecFileOptionsWithStringEncoding): Promise<{ stdout: string, stderr: string }>; + function __promisify__(file: string, options: ExecFileOptionsWithOtherEncoding): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; + function __promisify__(file: string, args: ReadonlyArray | undefined | null, options: ExecFileOptionsWithOtherEncoding): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; + function __promisify__(file: string, options: ExecFileOptions): Promise<{ stdout: string, stderr: string }>; + function __promisify__(file: string, args: ReadonlyArray | undefined | null, options: ExecFileOptions): Promise<{ stdout: string, stderr: string }>; + function __promisify__(file: string, options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; + function __promisify__( + file: string, + args: ReadonlyArray | undefined | null, + options: ({ encoding?: string | null } & ExecFileOptions) | undefined | null, + ): Promise<{ stdout: string | Buffer, stderr: string | Buffer }>; + } + + interface ForkOptions { + cwd?: string; + env?: NodeJS.ProcessEnv; + execPath?: string; + execArgv?: string[]; + silent?: boolean; + stdio?: StdioOptions; + detached?: boolean; + windowsVerbatimArguments?: boolean; + uid?: number; + gid?: number; + } + function fork(modulePath: string, options?: ForkOptions): ChildProcess; + function fork(modulePath: string, args?: ReadonlyArray, options?: ForkOptions): ChildProcess; + + interface SpawnSyncOptions { + argv0?: string; // Not specified in the docs + cwd?: string; + input?: string | Buffer | NodeJS.TypedArray | DataView; + stdio?: StdioOptions; + env?: NodeJS.ProcessEnv; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string | number; + maxBuffer?: number; + encoding?: string; + shell?: boolean | string; + windowsVerbatimArguments?: boolean; + windowsHide?: boolean; + } + interface SpawnSyncOptionsWithStringEncoding extends SpawnSyncOptions { + encoding: BufferEncoding; + } + interface SpawnSyncOptionsWithBufferEncoding extends SpawnSyncOptions { + encoding: string; // specify `null`. + } + interface SpawnSyncReturns { + pid: number; + output: string[]; + stdout: T; + stderr: T; + status: number | null; + signal: string | null; + error?: Error; + } + function spawnSync(command: string): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, options?: SpawnSyncOptions): SpawnSyncReturns; + function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptionsWithStringEncoding): SpawnSyncReturns; + function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptionsWithBufferEncoding): SpawnSyncReturns; + function spawnSync(command: string, args?: ReadonlyArray, options?: SpawnSyncOptions): SpawnSyncReturns; + + interface ExecSyncOptions { + cwd?: string; + input?: string | Buffer | Uint8Array; + stdio?: StdioOptions; + env?: NodeJS.ProcessEnv; + shell?: string; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string | number; + maxBuffer?: number; + encoding?: string; + windowsHide?: boolean; + } + interface ExecSyncOptionsWithStringEncoding extends ExecSyncOptions { + encoding: BufferEncoding; + } + interface ExecSyncOptionsWithBufferEncoding extends ExecSyncOptions { + encoding: string; // specify `null`. + } + function execSync(command: string): Buffer; + function execSync(command: string, options?: ExecSyncOptionsWithStringEncoding): string; + function execSync(command: string, options?: ExecSyncOptionsWithBufferEncoding): Buffer; + function execSync(command: string, options?: ExecSyncOptions): Buffer; + + interface ExecFileSyncOptions { + cwd?: string; + input?: string | Buffer | NodeJS.TypedArray | DataView; + stdio?: StdioOptions; + env?: NodeJS.ProcessEnv; + uid?: number; + gid?: number; + timeout?: number; + killSignal?: string | number; + maxBuffer?: number; + encoding?: string; + windowsHide?: boolean; + shell?: boolean | string; + } + interface ExecFileSyncOptionsWithStringEncoding extends ExecFileSyncOptions { + encoding: BufferEncoding; + } + interface ExecFileSyncOptionsWithBufferEncoding extends ExecFileSyncOptions { + encoding: string; // specify `null`. + } + function execFileSync(command: string): Buffer; + function execFileSync(command: string, options?: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(command: string, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(command: string, options?: ExecFileSyncOptions): Buffer; + function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptionsWithStringEncoding): string; + function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptionsWithBufferEncoding): Buffer; + function execFileSync(command: string, args?: ReadonlyArray, options?: ExecFileSyncOptions): Buffer; +} diff --git a/.pnpm-store/v11/files/0a/e2458ae0d82672b3515c02310d4ee05eb1f8c647ef2299df2e99abc96d1b4799e4996594d2ec302939c28365fda3a85f570a7fd117bb074202b50bb6bf8150 b/.pnpm-store/v11/files/0a/e2458ae0d82672b3515c02310d4ee05eb1f8c647ef2299df2e99abc96d1b4799e4996594d2ec302939c28365fda3a85f570a7fd117bb074202b50bb6bf8150 new file mode 100644 index 00000000..7ca68ee6 --- /dev/null +++ b/.pnpm-store/v11/files/0a/e2458ae0d82672b3515c02310d4ee05eb1f8c647ef2299df2e99abc96d1b4799e4996594d2ec302939c28365fda3a85f570a7fd117bb074202b50bb6bf8150 @@ -0,0 +1,21 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map characters to HTML entities. */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; + +/** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +var escapeHtmlChar = basePropertyOf(htmlEscapes); + +module.exports = escapeHtmlChar; diff --git a/.pnpm-store/v11/files/0a/e481abbf69593a1a77df03ddc9fae7143255027832cfcf1ccbe0a730e3b204e3726a8c6282b9b03ac9f859613aedf972f63d837a46eb43993e8a969e042ab7 b/.pnpm-store/v11/files/0a/e481abbf69593a1a77df03ddc9fae7143255027832cfcf1ccbe0a730e3b204e3726a8c6282b9b03ac9f859613aedf972f63d837a46eb43993e8a969e042ab7 new file mode 100644 index 00000000..8392bc6f --- /dev/null +++ b/.pnpm-store/v11/files/0a/e481abbf69593a1a77df03ddc9fae7143255027832cfcf1ccbe0a730e3b204e3726a8c6282b9b03ac9f859613aedf972f63d837a46eb43993e8a969e042ab7 @@ -0,0 +1 @@ +export declare const makeRunChangedTestPath: (watchOpts: Object, projectRoot: string) => (f: string) => void; diff --git a/.pnpm-store/v11/files/0a/ee989e914625227c06ee196bda6ae054457d4ac81f9c6d7d8c56e9a498402354f825afbad37ab098357899b13d122cc34b929b19cd7b6e0246a67447f913cd b/.pnpm-store/v11/files/0a/ee989e914625227c06ee196bda6ae054457d4ac81f9c6d7d8c56e9a498402354f825afbad37ab098357899b13d122cc34b929b19cd7b6e0246a67447f913cd new file mode 100644 index 00000000..1ce40f4f --- /dev/null +++ b/.pnpm-store/v11/files/0a/ee989e914625227c06ee196bda6ae054457d4ac81f9c6d7d8c56e9a498402354f825afbad37ab098357899b13d122cc34b929b19cd7b6e0246a67447f913cd @@ -0,0 +1,39 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ +function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; +} + +module.exports = composeArgs; diff --git a/.pnpm-store/v11/files/0a/f99811097e4161be613b97f4b2382245d98ec07f56eb27ade0944d0593e435bd884dae13d25287b068c770b88f54c2219c32e9d84bd4a06100ea2e2d7b3816 b/.pnpm-store/v11/files/0a/f99811097e4161be613b97f4b2382245d98ec07f56eb27ade0944d0593e435bd884dae13d25287b068c770b88f54c2219c32e9d84bd4a06100ea2e2d7b3816 new file mode 100644 index 00000000..72494bed --- /dev/null +++ b/.pnpm-store/v11/files/0a/f99811097e4161be613b97f4b2382245d98ec07f56eb27ade0944d0593e435bd884dae13d25287b068c770b88f54c2219c32e9d84bd4a06100ea2e2d7b3816 @@ -0,0 +1,62 @@ +var Stack = require('./_Stack'), + baseIsEqual = require('./_baseIsEqual'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; +} + +module.exports = baseIsMatch; diff --git a/.pnpm-store/v11/files/0b/0068b8beb6864dbb6971d9fe165d2d5fd420bcd6d7bbbd8f42589eb981bf95d854df2d16c21d378ea6d48f562345d2f66de0fd17134dffa8495eb496e6dff0 b/.pnpm-store/v11/files/0b/0068b8beb6864dbb6971d9fe165d2d5fd420bcd6d7bbbd8f42589eb981bf95d854df2d16c21d378ea6d48f562345d2f66de0fd17134dffa8495eb496e6dff0 new file mode 100644 index 00000000..de322667 --- /dev/null +++ b/.pnpm-store/v11/files/0b/0068b8beb6864dbb6971d9fe165d2d5fd420bcd6d7bbbd8f42589eb981bf95d854df2d16c21d378ea6d48f562345d2f66de0fd17134dffa8495eb496e6dff0 @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2013 Julian Gruber + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/0b/0eb3eeca4d51db5de5ec70d9bfb8319956218cbdbf8959f1289ba7b3350e36f669cf23b06019ce3eb6684cb0b01450b046334a82d2814c6b77dd913bed9dc4-exec b/.pnpm-store/v11/files/0b/0eb3eeca4d51db5de5ec70d9bfb8319956218cbdbf8959f1289ba7b3350e36f669cf23b06019ce3eb6684cb0b01450b046334a82d2814c6b77dd913bed9dc4-exec new file mode 100755 index 00000000..fb6a4c71 --- /dev/null +++ b/.pnpm-store/v11/files/0b/0eb3eeca4d51db5de5ec70d9bfb8319956218cbdbf8959f1289ba7b3350e36f669cf23b06019ce3eb6684cb0b01450b046334a82d2814c6b77dd913bed9dc4-exec @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +set -e; + +if ! [[ -z "${LOCAL_SUMAN_ALREADY_FOUND+x}" ]]; then + echo " => \$LOCAL_SUMAN_ALREADY_FOUND ? => $LOCAL_SUMAN_ALREADY_FOUND" +fi + +echo " [suman] => Original path of Suman executable => \"$0\"" +DIRN="$(dirname "$0")" +RL="$(readlink "$0")"; +EXECDIR="$(dirname $(dirname "${RL}"))"; +MYPATH="$DIRN/$EXECDIR"; +X="$(cd $(dirname ${MYPATH}) && pwd)/$(basename ${MYPATH})" +NEW_NODE_PATH="${NODE_PATH}":"$HOME/.suman/global/node_modules" +NEW_PATH="${PATH}":"$HOME/.suman/global/node_modules/.bin" + +if [[ "${LOCAL_SUMAN_ALREADY_FOUND}" == "yes" ]]; then + NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" SUMAN_EXTRANEOUS_EXECUTABLE=yes babel-node --presets stage-3 "${X}/dist/cli.js" $@ +else + + LOCAL_SUMAN="$(node ${X}/scripts/find-local-suman-executable.js)" + + if [[ -z "${LOCAL_SUMAN}" ]]; then + # no local version found, so we fallback on the version in this directory, global or not + echo " => No local Suman executable could be found, given the current directory => $PWD" + echo " => Attempting to run installed version of Suman here => `dirname $0`" + +# GLOBAL_MODULES="${suman_global_npm_modules_path:-"$(npm root -g)"}" + + NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" SUMAN_EXTRANEOUS_EXECUTABLE="yes" babel-node --presets stage-3 "${X}/dist/cli.js" "$@" + else + # local version found, so we run it + NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" SUMAN_EXTRANEOUS_EXECUTABLE="yes" babel-node --presets stage-3 "${LOCAL_SUMAN}" "$@" + fi + +fi + + diff --git a/.pnpm-store/v11/files/0b/1e6c76d13bf27230cc9cb8f0ee1610ed92fc96a91d101480fe10af11c3b5bec9bf51e1e94a8fe803e10f196759f6915c1b671a24adb6bc847297fb240dcdfa b/.pnpm-store/v11/files/0b/1e6c76d13bf27230cc9cb8f0ee1610ed92fc96a91d101480fe10af11c3b5bec9bf51e1e94a8fe803e10f196759f6915c1b671a24adb6bc847297fb240dcdfa new file mode 100644 index 00000000..db035e97 --- /dev/null +++ b/.pnpm-store/v11/files/0b/1e6c76d13bf27230cc9cb8f0ee1610ed92fc96a91d101480fe10af11c3b5bec9bf51e1e94a8fe803e10f196759f6915c1b671a24adb6bc847297fb240dcdfa @@ -0,0 +1,38 @@ +{ + "name": "semver", + "version": "5.7.2", + "description": "The semantic version parser used by npm.", + "main": "semver.js", + "scripts": { + "test": "tap test/ --100 --timeout=30", + "lint": "echo linting disabled", + "postlint": "template-oss-check", + "template-oss-apply": "template-oss-apply --force", + "lintfix": "npm run lint -- --fix", + "snap": "tap test/ --100 --timeout=30", + "posttest": "npm run lint" + }, + "devDependencies": { + "@npmcli/template-oss": "4.17.0", + "tap": "^12.7.0" + }, + "license": "ISC", + "repository": { + "type": "git", + "url": "https://github.com/npm/node-semver.git" + }, + "bin": { + "semver": "./bin/semver" + }, + "files": [ + "bin", + "range.bnf", + "semver.js" + ], + "author": "GitHub Inc.", + "templateOSS": { + "//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.", + "content": "./scripts/template-oss", + "version": "4.17.0" + } +} diff --git a/.pnpm-store/v11/files/0b/301ee92502afc330b0f2bfc9442f5f2a59eb965847ef0a749be4f864ad723c5230fd6d689af828cdc8de9327fe620f03ee1ebd2faff82ced63bef461aa9fe2 b/.pnpm-store/v11/files/0b/301ee92502afc330b0f2bfc9442f5f2a59eb965847ef0a749be4f864ad723c5230fd6d689af828cdc8de9327fe620f03ee1ebd2faff82ced63bef461aa9fe2 new file mode 100644 index 00000000..5ee87fd7 --- /dev/null +++ b/.pnpm-store/v11/files/0b/301ee92502afc330b0f2bfc9442f5f2a59eb965847ef0a749be4f864ad723c5230fd6d689af828cdc8de9327fe620f03ee1ebd2faff82ced63bef461aa9fe2 @@ -0,0 +1,76 @@ +{ + "name": "arr-union", + "description": "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.", + "version": "3.1.0", + "homepage": "https://github.com/jonschlinkert/arr-union", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/arr-union", + "bugs": { + "url": "https://github.com/jonschlinkert/arr-union/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "ansi-bold": "^0.1.1", + "array-union": "^1.0.1", + "array-unique": "^0.2.1", + "benchmarked": "^0.1.4", + "gulp-format-md": "^0.1.7", + "minimist": "^1.1.1", + "mocha": "*", + "should": "*" + }, + "keywords": [ + "add", + "append", + "array", + "arrays", + "combine", + "concat", + "extend", + "union", + "uniq", + "unique", + "util", + "utility", + "utils" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "arr-diff", + "arr-flatten", + "arr-filter", + "arr-map", + "arr-pluck", + "arr-reduce", + "array-unique" + ] + }, + "reflinks": [ + "verb", + "array-union" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/0b/31a4cb9920a750a2ec7a56e8ed1a0fe873e08199250b44a77ed18c430264130cb19cfdf5f0de0ed48358a75a54fd3307f774ad8a7beef0f290290bb8267326 b/.pnpm-store/v11/files/0b/31a4cb9920a750a2ec7a56e8ed1a0fe873e08199250b44a77ed18c430264130cb19cfdf5f0de0ed48358a75a54fd3307f774ad8a7beef0f290290bb8267326 new file mode 100644 index 00000000..6a46c6b1 --- /dev/null +++ b/.pnpm-store/v11/files/0b/31a4cb9920a750a2ec7a56e8ed1a0fe873e08199250b44a77ed18c430264130cb19cfdf5f0de0ed48358a75a54fd3307f774ad8a7beef0f290290bb8267326 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindKey', require('../bindKey')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0b/53bc984178336ac516601e72d477d2beeef6936800da17d3a79c153e0036f7428517ebd75d296729f65856c7e07749029f5aa192b2ac071efc4d3e39750a32 b/.pnpm-store/v11/files/0b/53bc984178336ac516601e72d477d2beeef6936800da17d3a79c153e0036f7428517ebd75d296729f65856c7e07749029f5aa192b2ac071efc4d3e39750a32 new file mode 100644 index 00000000..e12cf4d5 --- /dev/null +++ b/.pnpm-store/v11/files/0b/53bc984178336ac516601e72d477d2beeef6936800da17d3a79c153e0036f7428517ebd75d296729f65856c7e07749029f5aa192b2ac071efc4d3e39750a32 @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process !== 'undefined' && process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/.pnpm-store/v11/files/0b/5e881d455320fe4f6f9da0d0f41f0e26e87a5f121966addfb66923d9f2de4392258af129d0888e8d70b2cc2f242ede7e9cfb6d14565e85fb87b239bd867c04-exec b/.pnpm-store/v11/files/0b/5e881d455320fe4f6f9da0d0f41f0e26e87a5f121966addfb66923d9f2de4392258af129d0888e8d70b2cc2f242ede7e9cfb6d14565e85fb87b239bd867c04-exec new file mode 100755 index 00000000..ceed497f --- /dev/null +++ b/.pnpm-store/v11/files/0b/5e881d455320fe4f6f9da0d0f41f0e26e87a5f121966addfb66923d9f2de4392258af129d0888e8d70b2cc2f242ede7e9cfb6d14565e85fb87b239bd867c04-exec @@ -0,0 +1,5 @@ +'use strict'; + +///////////////////////////// + +console.error(new Error('This file does nothing, no reason to load it.')); \ No newline at end of file diff --git a/.pnpm-store/v11/files/0b/61392e1fb3d4942127cb7ceb1a19e59cd759233ace8de31614fbaafbbdf30d85b099c81ac8da850dc88679f6287c025ad586f22d9a7c216d3288e899ff9380 b/.pnpm-store/v11/files/0b/61392e1fb3d4942127cb7ceb1a19e59cd759233ace8de31614fbaafbbdf30d85b099c81ac8da850dc88679f6287c025ad586f22d9a7c216d3288e899ff9380 new file mode 100644 index 00000000..886f58ef --- /dev/null +++ b/.pnpm-store/v11/files/0b/61392e1fb3d4942127cb7ceb1a19e59cd759233ace8de31614fbaafbbdf30d85b099c81ac8da850dc88679f6287c025ad586f22d9a7c216d3288e899ff9380 @@ -0,0 +1,51 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _setImmediate = require('./internal/setImmediate'); + +/** + * Calls `callback` on a later loop around the event loop. In Node.js this just + * calls `process.nextTick`. In the browser it will use `setImmediate` if + * available, otherwise `setTimeout(callback, 0)`, which means other higher + * priority events may precede the execution of `callback`. + * + * This is used internally for browser-compatibility purposes. + * + * @name nextTick + * @static + * @memberOf module:Utils + * @method + * @see [async.setImmediate]{@link module:Utils.setImmediate} + * @category Util + * @param {Function} callback - The function to call on a later loop around + * the event loop. Invoked with (args...). + * @param {...*} args... - any number of additional arguments to pass to the + * callback on the next tick. + * @example + * + * var call_order = []; + * async.nextTick(function() { + * call_order.push('two'); + * // call_order now equals ['one','two'] + * }); + * call_order.push('one'); + * + * async.setImmediate(function (a, b, c) { + * // a, b, and c equal 1, 2, and 3 + * }, 1, 2, 3); + */ +var _defer; + +if (_setImmediate.hasNextTick) { + _defer = process.nextTick; +} else if (_setImmediate.hasSetImmediate) { + _defer = setImmediate; +} else { + _defer = _setImmediate.fallback; +} + +exports.default = (0, _setImmediate.wrap)(_defer); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/0b/6f853387d1ad11bc77997f278f2503ce921a5f7049978bf60b63a1e9a772238ebef67808c2132f35d6a198cb6432eb43b15769ff420b8db64959cd0a9e50cf b/.pnpm-store/v11/files/0b/6f853387d1ad11bc77997f278f2503ce921a5f7049978bf60b63a1e9a772238ebef67808c2132f35d6a198cb6432eb43b15769ff420b8db64959cd0a9e50cf new file mode 100644 index 00000000..86bbb3dc --- /dev/null +++ b/.pnpm-store/v11/files/0b/6f853387d1ad11bc77997f278f2503ce921a5f7049978bf60b63a1e9a772238ebef67808c2132f35d6a198cb6432eb43b15769ff420b8db64959cd0a9e50cf @@ -0,0 +1,27 @@ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }) + } + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + if (superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } + } +} diff --git a/.pnpm-store/v11/files/0b/9c592eb57995ffb44873c3d16f31142ca21ff3eb39c84740179ea2dbfa33ed752935644e38e8ef7aecd8a72641f4b053551a159e26ae3f3e8a109a8a28c235 b/.pnpm-store/v11/files/0b/9c592eb57995ffb44873c3d16f31142ca21ff3eb39c84740179ea2dbfa33ed752935644e38e8ef7aecd8a72641f4b053551a159e26ae3f3e8a109a8a28c235 new file mode 100644 index 00000000..1436ec98 --- /dev/null +++ b/.pnpm-store/v11/files/0b/9c592eb57995ffb44873c3d16f31142ca21ff3eb39c84740179ea2dbfa33ed752935644e38e8ef7aecd8a72641f4b053551a159e26ae3f3e8a109a8a28c235 @@ -0,0 +1,68 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const cp = require("child_process"); +const path = require("path"); +const EE = require("events"); +const shuffle = require('lodash.shuffle'); +const suman_events_1 = require("suman-events"); +const su = require("suman-utils"); +const chalk = require("chalk"); +const _suman = global.__suman = (global.__suman || {}); +const resultBroadcaster = _suman.resultBroadcaster = (_suman.resultBroadcaster || new EE()); +const socket_cp_hash_1 = require("./socket-cp-hash"); +const add_to_transpile_queue_1 = require("./browser/add-to-transpile-queue"); +const multiple_process_each_on_exit_1 = require("./multiple-process-each-on-exit"); +const add_to_run_queue_1 = require("./browser/add-to-run-queue"); +const queues_1 = require("./shared/queues"); +exports.makeHandleBrowserProcesses = function (runnerObj, tableRows, messages, forkedCPs, beforeExitRunOncePost, makeExit) { + return function (runObj) { + const { sumanOpts, sumanConfig, projectRoot } = _suman; + _suman.startDateMillis = Date.now(); + process.stderr.setMaxListeners(runObj.files.length + 11); + process.stdout.setMaxListeners(runObj.files.length + 11); + try { + require('chrome-launcher'); + } + catch (err) { + cp.execSync('npm install chrome-launcher'); + } + const logsDir = _suman.sumanConfig.logsDir || _suman.sumanHelperDirRoot + '/logs'; + const sumanCPLogs = path.resolve(logsDir + '/runs/'); + const f = path.resolve(sumanCPLogs + '/' + _suman.timestamp + '-' + _suman.runId); + const args = ['--user-args', sumanOpts.user_args]; + const runQueue = queues_1.makeRunQueue(); + const onExitFn = multiple_process_each_on_exit_1.makeOnExitFn(runnerObj, tableRows, messages, forkedCPs, beforeExitRunOncePost, makeExit, runQueue); + const runFile = add_to_run_queue_1.makeAddToRunQueue(runnerObj, args, runQueue, projectRoot, socket_cp_hash_1.cpHash, forkedCPs, onExitFn); + const waitForAllTranformsToFinish = sumanOpts.wait_for_all_transforms; + if (waitForAllTranformsToFinish) { + _suman.log.info('waitForAllTranformsToFinish => ', chalk.magenta(waitForAllTranformsToFinish)); + } + let queuedTestFns = []; + let failedTransformObjects = []; + const transpileQueue = queues_1.makeTranspileQueue(failedTransformObjects, runFile, queuedTestFns); + if (waitForAllTranformsToFinish) { + transpileQueue.drain = function () { + _suman.log.info('all transforms complete, beginning to run first set of tests.'); + queuedTestFns.forEach(function (fn) { + fn(); + }); + }; + } + if (sumanOpts.$useTAPOutput) { + if (sumanOpts.verbosity > 4) { + _suman.log.info(chalk.gray.bold('Suman runner is expecting TAP output from Node.js child processes ' + + 'and will not be listening for websocket messages.')); + } + } + let files = runObj.files; + resultBroadcaster.emit(String(suman_events_1.events.RUNNER_STARTED), files.length); + if (_suman.sumanOpts.rand) { + files = shuffle(files); + } + runnerObj.startTime = Date.now(); + const fileObjArray = su.removeSharedRootPath(files); + fileObjArray.forEach(add_to_transpile_queue_1.makeAddToTranspileQueue(f, transpileQueue, tableRows, socket_cp_hash_1.ganttHash, projectRoot)); + }; +}; diff --git a/.pnpm-store/v11/files/0b/b601bbd4e347bf6008d5eca5b686f0ca99d9939e5eeddc6870de558aa41ede828d5eb2669e43a6ad00671ab596508957a732294b126e8e256f8c6d57771c82-exec b/.pnpm-store/v11/files/0b/b601bbd4e347bf6008d5eca5b686f0ca99d9939e5eeddc6870de558aa41ede828d5eb2669e43a6ad00671ab596508957a732294b126e8e256f8c6d57771c82-exec new file mode 100755 index 00000000..e5d80125 --- /dev/null +++ b/.pnpm-store/v11/files/0b/b601bbd4e347bf6008d5eca5b686f0ca99d9939e5eeddc6870de558aa41ede828d5eb2669e43a6ad00671ab596508957a732294b126e8e256f8c6d57771c82-exec @@ -0,0 +1,36 @@ + +# log-prepend + +Create a console.log or console.error like function, but prepend a string to each line. + +## API + +```js +const {lp} = require('log-prepend'); +const log = lp(' [suman] ', process.stdout); +const logerr = lp(' [suman error] ', process.stderr); + +log('a','b','c'); +log('log1', 'log2\n3',4,5 + '\n55'); + +``` + +To use colors in the prepending string, simply do: + +```js +const chalk = require('chalk'); +const log = lp(chalk.blue(' [suman] '), process.stdout); +const logerr = lp(chalk.red(' [suman error] '), process.stderr); +``` + + +# Extra + +This works as a rudimentary solution: + +```js +const log = console.log.bind(console, ' [suman] '); +``` + +But the problem with the above log function is that it won't handle new lines chars that are passed to it. + diff --git a/.pnpm-store/v11/files/0b/ba1c44572a14717efb494e8f00d67ea9ff40cc49d9cddb26da62094588edd0f57e25ad53b2b8b798fff06d81689bb50a87bde8771b07778a856ef515cb76af b/.pnpm-store/v11/files/0b/ba1c44572a14717efb494e8f00d67ea9ff40cc49d9cddb26da62094588edd0f57e25ad53b2b8b798fff06d81689bb50a87bde8771b07778a856ef515cb76af new file mode 100644 index 00000000..a57f6349 --- /dev/null +++ b/.pnpm-store/v11/files/0b/ba1c44572a14717efb494e8f00d67ea9ff40cc49d9cddb26da62094588edd0f57e25ad53b2b8b798fff06d81689bb50a87bde8771b07778a856ef515cb76af @@ -0,0 +1,5 @@ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; diff --git a/.pnpm-store/v11/files/0b/dd1db216006922e24ca4f601da5dec7e44ff6f8d28d88fa6edeef272844d6d17a25523e197e00096cf9d2a8558bd3036e6824fce80f328dc0ee8b315be7212 b/.pnpm-store/v11/files/0b/dd1db216006922e24ca4f601da5dec7e44ff6f8d28d88fa6edeef272844d6d17a25523e197e00096cf9d2a8558bd3036e6824fce80f328dc0ee8b315be7212 new file mode 100644 index 00000000..994845ac --- /dev/null +++ b/.pnpm-store/v11/files/0b/dd1db216006922e24ca4f601da5dec7e44ff6f8d28d88fa6edeef272844d6d17a25523e197e00096cf9d2a8558bd3036e6824fce80f328dc0ee8b315be7212 @@ -0,0 +1,11 @@ +{ + "name": "backo", + "repo": "segmentio/backo", + "dependencies": {}, + "version": "1.0.1", + "description": "simple backoff without the weird abstractions", + "keywords": ["backoff"], + "license": "MIT", + "scripts": ["index.js"], + "main": "index.js" +} diff --git a/.pnpm-store/v11/files/0b/e5508b70ec5af8f4b839661b0531b155f74811dc4326fdf9c8fb01702c041fa4eca05012b2f6764aa266e0b9fd2de98c21d9c6c3de9954f00ab95f8b19af8a b/.pnpm-store/v11/files/0b/e5508b70ec5af8f4b839661b0531b155f74811dc4326fdf9c8fb01702c041fa4eca05012b2f6764aa266e0b9fd2de98c21d9c6c3de9954f00ab95f8b19af8a new file mode 100644 index 00000000..d42b3b1d --- /dev/null +++ b/.pnpm-store/v11/files/0b/e5508b70ec5af8f4b839661b0531b155f74811dc4326fdf9c8fb01702c041fa4eca05012b2f6764aa266e0b9fd2de98c21d9c6c3de9954f00ab95f8b19af8a @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('thru', require('../thru')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0b/ea14ba77149fb58887c248e0abdcdb892b953dee9d94707fb4194fbaec3e6afa13ba9c5846e52976c3444fdd12a26a7a98cd8c7fabdc166ff8c98e294c3a4d b/.pnpm-store/v11/files/0b/ea14ba77149fb58887c248e0abdcdb892b953dee9d94707fb4194fbaec3e6afa13ba9c5846e52976c3444fdd12a26a7a98cd8c7fabdc166ff8c98e294c3a4d new file mode 100644 index 00000000..bc88fe82 --- /dev/null +++ b/.pnpm-store/v11/files/0b/ea14ba77149fb58887c248e0abdcdb892b953dee9d94707fb4194fbaec3e6afa13ba9c5846e52976c3444fdd12a26a7a98cd8c7fabdc166ff8c98e294c3a4d @@ -0,0 +1,8 @@ +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer; +exports.SourceNode = require('./lib/source-node').SourceNode; diff --git a/.pnpm-store/v11/files/0c/17fd617342b2915cf8aedd11cc0cb573cbac5c6c98941f7dcb2579dd265622044c87177a9a038bd3383c9035a3b156fef39e7cf7ce40367105beae70c5a31a b/.pnpm-store/v11/files/0c/17fd617342b2915cf8aedd11cc0cb573cbac5c6c98941f7dcb2579dd265622044c87177a9a038bd3383c9035a3b156fef39e7cf7ce40367105beae70c5a31a new file mode 100644 index 00000000..ba3567d1 --- /dev/null +++ b/.pnpm-store/v11/files/0c/17fd617342b2915cf8aedd11cc0cb573cbac5c6c98941f7dcb2579dd265622044c87177a9a038bd3383c9035a3b156fef39e7cf7ce40367105beae70c5a31a @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').findLimit; diff --git a/.pnpm-store/v11/files/0c/23315324a8c6523f78552ac111c81331704cf265e14366fda72af6103c46e476e933d0b2d9c58d4be6148456c7c7dfb47a14f1069b36b9623cbfaeaeb88871 b/.pnpm-store/v11/files/0c/23315324a8c6523f78552ac111c81331704cf265e14366fda72af6103c46e476e933d0b2d9c58d4be6148456c7c7dfb47a14f1069b36b9623cbfaeaeb88871 new file mode 100644 index 00000000..42cad20c --- /dev/null +++ b/.pnpm-store/v11/files/0c/23315324a8c6523f78552ac111c81331704cf265e14366fda72af6103c46e476e933d0b2d9c58d4be6148456c7c7dfb47a14f1069b36b9623cbfaeaeb88871 @@ -0,0 +1,29 @@ +// Uses ArrayLike to admit Unit8 and co. +export type OutputBuffer = ArrayLike; +export type InputBuffer = ArrayLike; + +export interface V1Options { + node?: InputBuffer | undefined; + clockseq?: number | undefined; + msecs?: number | Date | undefined; + nsecs?: number | undefined; +} + +export type V4Options = { random: InputBuffer } | { rng(): InputBuffer }; + +export type v1String = (options?: V1Options) => string; +export type v1Buffer = (options: V1Options | null | undefined, buffer: T, offset?: number) => T; +export type v1 = v1Buffer & v1String; + +export type v4String = (options?: V4Options) => string; +export type v4Buffer = (options: V4Options | null | undefined, buffer: T, offset?: number) => T; +export type v4 = v4Buffer & v4String; + +export type v5String = (name: string | InputBuffer, namespace: string | InputBuffer) => string; +export type v5Buffer = ( + name: string | InputBuffer, + namespace: string | InputBuffer, + buffer: T, + offset?: number, +) => T; +export type v5 = v5Buffer & v5String; diff --git a/.pnpm-store/v11/files/0c/2e8e8c7005cbde8d27d2f7f6184b8edddd4b0e5318046bdf1aeeaafd8838dc1a5aad38897e088dcbc57e88cb8eb61660c766d3b5f874c81078211b3c81330c b/.pnpm-store/v11/files/0c/2e8e8c7005cbde8d27d2f7f6184b8edddd4b0e5318046bdf1aeeaafd8838dc1a5aad38897e088dcbc57e88cb8eb61660c766d3b5f874c81078211b3c81330c new file mode 100644 index 00000000..556f25ed --- /dev/null +++ b/.pnpm-store/v11/files/0c/2e8e8c7005cbde8d27d2f7f6184b8edddd4b0e5318046bdf1aeeaafd8838dc1a5aad38897e088dcbc57e88cb8eb61660c766d3b5f874c81078211b3c81330c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('meanBy', require('../meanBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0c/394fccdde20f18b5252549e7eb9d50abeae162c7b55e2102665401e585bd6933c7064be6a73a63d71c03ec48416a48bb692417843196fa30b4a085b11593e3-exec b/.pnpm-store/v11/files/0c/394fccdde20f18b5252549e7eb9d50abeae162c7b55e2102665401e585bd6933c7064be6a73a63d71c03ec48416a48bb692417843196fa30b4a085b11593e3-exec new file mode 100755 index 00000000..4061f7a0 --- /dev/null +++ b/.pnpm-store/v11/files/0c/394fccdde20f18b5252549e7eb9d50abeae162c7b55e2102665401e585bd6933c7064be6a73a63d71c03ec48416a48bb692417843196fa30b4a085b11593e3-exec @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +'use strict'; +var args = require('minimist')(process.argv.slice(2)) +var makeBeep = require('./'); + +var number = args.count; + + +makeBeep(number); diff --git a/.pnpm-store/v11/files/0c/411004213e7f99cbe075752c77815c82c796af4293e6f989049464b567447e596f11f5235edc67e9459cf31f83132d47bad6478ef922ef2efc269d76bacdc2 b/.pnpm-store/v11/files/0c/411004213e7f99cbe075752c77815c82c796af4293e6f989049464b567447e596f11f5235edc67e9459cf31f83132d47bad6478ef922ef2efc269d76bacdc2 new file mode 100644 index 00000000..953feb89 --- /dev/null +++ b/.pnpm-store/v11/files/0c/411004213e7f99cbe075752c77815c82c796af4293e6f989049464b567447e596f11f5235edc67e9459cf31f83132d47bad6478ef922ef2efc269d76bacdc2 @@ -0,0 +1,12 @@ +declare class IterableWMapFilter { + vals: T[]; + operations: Iterator[]; + constructor(intialVals: T[]); + add(v: any): void; + map(fn: (val: number) => any): IterableWMapFilter; + filter(fn: (val: number) => any): IterableWMapFilter; + private next; + [Symbol.iterator](): this; +} +declare const v: IterableWMapFilter; +declare const z: IterableWMapFilter; diff --git a/.pnpm-store/v11/files/0c/4f029f7f0645deeb5327b8dd48fe77d80f42a5f75143a45ae8251bd8736d61e599042b8d5fb18a817fb3115901a14d56dcea3303b9d6f59d3c02f78b11b8e9 b/.pnpm-store/v11/files/0c/4f029f7f0645deeb5327b8dd48fe77d80f42a5f75143a45ae8251bd8736d61e599042b8d5fb18a817fb3115901a14d56dcea3303b9d6f59d3c02f78b11b8e9 new file mode 100644 index 00000000..048e1c23 --- /dev/null +++ b/.pnpm-store/v11/files/0c/4f029f7f0645deeb5327b8dd48fe77d80f42a5f75143a45ae8251bd8736d61e599042b8d5fb18a817fb3115901a14d56dcea3303b9d6f59d3c02f78b11b8e9 @@ -0,0 +1,318 @@ +'use strict'; + +/** + * Module dependencies + */ + +var toRegex = require('to-regex'); +var unique = require('array-unique'); +var extend = require('extend-shallow'); + +/** + * Local dependencies + */ + +var compilers = require('./lib/compilers'); +var parsers = require('./lib/parsers'); +var Braces = require('./lib/braces'); +var utils = require('./lib/utils'); +var MAX_LENGTH = 1024 * 64; +var cache = {}; + +/** + * Convert the given `braces` pattern into a regex-compatible string. By default, only one string is generated for every input string. Set `options.expand` to true to return an array of patterns (similar to Bash or minimatch. Before using `options.expand`, it's recommended that you read the [performance notes](#performance)). + * + * ```js + * var braces = require('braces'); + * console.log(braces('{a,b,c}')); + * //=> ['(a|b|c)'] + * + * console.log(braces('{a,b,c}', {expand: true})); + * //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ + +function braces(pattern, options) { + var key = utils.createKey(String(pattern), options); + var arr = []; + + var disabled = options && options.cache === false; + if (!disabled && cache.hasOwnProperty(key)) { + return cache[key]; + } + + if (Array.isArray(pattern)) { + for (var i = 0; i < pattern.length; i++) { + arr.push.apply(arr, braces.create(pattern[i], options)); + } + } else { + arr = braces.create(pattern, options); + } + + if (options && options.nodupes === true) { + arr = unique(arr); + } + + if (!disabled) { + cache[key] = arr; + } + return arr; +} + +/** + * Expands a brace pattern into an array. This method is called by the main [braces](#braces) function when `options.expand` is true. Before using this method it's recommended that you read the [performance notes](#performance)) and advantages of using [.optimize](#optimize) instead. + * + * ```js + * var braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.expand = function(pattern, options) { + return braces.create(pattern, extend({}, options, {expand: true})); +}; + +/** + * Expands a brace pattern into a regex-compatible, optimized string. This method is called by the main [braces](#braces) function by default. + * + * ```js + * var braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.optimize = function(pattern, options) { + return braces.create(pattern, options); +}; + +/** + * Processes a brace pattern and returns either an expanded array (if `options.expand` is true), a highly optimized regex-compatible string. This method is called by the main [braces](#braces) function. + * + * ```js + * var braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ + +braces.create = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + var maxLength = (options && options.maxLength) || MAX_LENGTH; + if (pattern.length >= maxLength) { + throw new Error('expected pattern to be less than ' + maxLength + ' characters'); + } + + function create() { + if (pattern === '' || pattern.length < 3) { + return [pattern]; + } + + if (utils.isEmptySets(pattern)) { + return []; + } + + if (utils.isQuotedString(pattern)) { + return [pattern.slice(1, -1)]; + } + + var proto = new Braces(options); + var result = !options || options.expand !== true + ? proto.optimize(pattern, options) + : proto.expand(pattern, options); + + // get the generated pattern(s) + var arr = result.output; + + // filter out empty strings if specified + if (options && options.noempty === true) { + arr = arr.filter(Boolean); + } + + // filter out duplicates if specified + if (options && options.nodupes === true) { + arr = unique(arr); + } + + Object.defineProperty(arr, 'result', { + enumerable: false, + value: result + }); + + return arr; + } + + return memoize('create', pattern, options, create); +}; + +/** + * Create a regular expression from the given string `pattern`. + * + * ```js + * var braces = require('braces'); + * + * console.log(braces.makeRe('id-{200..300}')); + * //=> /^(?:id-(20[0-9]|2[1-9][0-9]|300))$/ + * ``` + * @param {String} `pattern` The pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} + * @api public + */ + +braces.makeRe = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + var maxLength = (options && options.maxLength) || MAX_LENGTH; + if (pattern.length >= maxLength) { + throw new Error('expected pattern to be less than ' + maxLength + ' characters'); + } + + function makeRe() { + var arr = braces(pattern, options); + var opts = extend({strictErrors: false}, options); + return toRegex(arr, opts); + } + + return memoize('makeRe', pattern, options, makeRe); +}; + +/** + * Parse the given `str` with the given `options`. + * + * ```js + * var braces = require('braces'); + * var ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * // { type: 'root', + * // errors: [], + * // input: 'a/{b,c}/d', + * // nodes: + * // [ { type: 'bos', val: '' }, + * // { type: 'text', val: 'a/' }, + * // { type: 'brace', + * // nodes: + * // [ { type: 'brace.open', val: '{' }, + * // { type: 'text', val: 'b,c' }, + * // { type: 'brace.close', val: '}' } ] }, + * // { type: 'text', val: '/d' }, + * // { type: 'eos', val: '' } ] } + * ``` + * @param {String} `pattern` Brace pattern to parse + * @param {Object} `options` + * @return {Object} Returns an AST + * @api public + */ + +braces.parse = function(pattern, options) { + var proto = new Braces(options); + return proto.parse(pattern, options); +}; + +/** + * Compile the given `ast` or string with the given `options`. + * + * ```js + * var braces = require('braces'); + * var ast = braces.parse('a/{b,c}/d'); + * console.log(braces.compile(ast)); + * // { options: { source: 'string' }, + * // state: {}, + * // compilers: + * // { eos: [Function], + * // noop: [Function], + * // bos: [Function], + * // brace: [Function], + * // 'brace.open': [Function], + * // text: [Function], + * // 'brace.close': [Function] }, + * // output: [ 'a/(b|c)/d' ], + * // ast: + * // { ... }, + * // parsingErrors: [] } + * ``` + * @param {Object|String} `ast` AST from [.parse](#parse). If a string is passed it will be parsed first. + * @param {Object} `options` + * @return {Object} Returns an object that has an `output` property with the compiled string. + * @api public + */ + +braces.compile = function(ast, options) { + var proto = new Braces(options); + return proto.compile(ast, options); +}; + +/** + * Clear the regex cache. + * + * ```js + * braces.clearCache(); + * ``` + * @api public + */ + +braces.clearCache = function() { + cache = braces.cache = {}; +}; + +/** + * Memoize a generated regex or function. A unique key is generated + * from the method name, pattern, and user-defined options. Set + * options.memoize to false to disable. + */ + +function memoize(type, pattern, options, fn) { + var key = utils.createKey(type + ':' + pattern, options); + var disabled = options && options.cache === false; + if (disabled) { + braces.clearCache(); + return fn(pattern, options); + } + + if (cache.hasOwnProperty(key)) { + return cache[key]; + } + + var res = fn(pattern, options); + cache[key] = res; + return res; +} + +/** + * Expose `Braces` constructor and methods + * @type {Function} + */ + +braces.Braces = Braces; +braces.compilers = compilers; +braces.parsers = parsers; +braces.cache = cache; + +/** + * Expose `braces` + * @type {Function} + */ + +module.exports = braces; diff --git a/.pnpm-store/v11/files/0c/d73883938d30b3be071a509af5cdd8788ad2f655f1db93d8fc813d872c165dc5b7fd25d81ed5b360b3981eaa7ce43ea1b32ba645f28fe2dd68797e9baa26f6 b/.pnpm-store/v11/files/0c/d73883938d30b3be071a509af5cdd8788ad2f655f1db93d8fc813d872c165dc5b7fd25d81ed5b360b3981eaa7ce43ea1b32ba645f28fe2dd68797e9baa26f6 new file mode 100644 index 00000000..6eb68fde --- /dev/null +++ b/.pnpm-store/v11/files/0c/d73883938d30b3be071a509af5cdd8788ad2f655f1db93d8fc813d872c165dc5b7fd25d81ed5b360b3981eaa7ce43ea1b32ba645f28fe2dd68797e9baa26f6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMapDepth', require('../flatMapDepth')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0c/e4576cc2336da9e3c617038e3ce9c89052755d91d997c091e9c7c608540865617628401e028dd97abef32c80224900c4e95a30db4dba2b5bb593a4190ad0d9 b/.pnpm-store/v11/files/0c/e4576cc2336da9e3c617038e3ce9c89052755d91d997c091e9c7c608540865617628401e028dd97abef32c80224900c4e95a30db4dba2b5bb593a4190ad0d9 new file mode 100644 index 00000000..b8c6e748 --- /dev/null +++ b/.pnpm-store/v11/files/0c/e4576cc2336da9e3c617038e3ce9c89052755d91d997c091e9c7c608540865617628401e028dd97abef32c80224900c4e95a30db4dba2b5bb593a4190ad0d9 @@ -0,0 +1,24 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/0c/fef7e9352fc517cee64d1d2866f76a66536555483ecf7eaf3d158e800de787fddb35d18955e6e8d5a39ca2a91347664f61237f5957f359959ddb895bb72283 b/.pnpm-store/v11/files/0c/fef7e9352fc517cee64d1d2866f76a66536555483ecf7eaf3d158e800de787fddb35d18955e6e8d5a39ca2a91347664f61237f5957f359959ddb895bb72283 new file mode 100644 index 00000000..62d6d237 --- /dev/null +++ b/.pnpm-store/v11/files/0c/fef7e9352fc517cee64d1d2866f76a66536555483ecf7eaf3d158e800de787fddb35d18955e6e8d5a39ca2a91347664f61237f5957f359959ddb895bb72283 @@ -0,0 +1,20 @@ +Copyright (c) 2013 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/.pnpm-store/v11/files/0d/05595361ee91fa3ca826165122c4eeb5cadc487602a25907f63561a9be9dc6282b7b797c597727ceb0f19408c9338169a6340442677681a89940587a5ac57e-exec b/.pnpm-store/v11/files/0d/05595361ee91fa3ca826165122c4eeb5cadc487602a25907f63561a9be9dc6282b7b797c597727ceb0f19408c9338169a6340442677681a89940587a5ac57e-exec new file mode 100755 index 00000000..ae62e9e9 --- /dev/null +++ b/.pnpm-store/v11/files/0d/05595361ee91fa3ca826165122c4eeb5cadc487602a25907f63561a9be9dc6282b7b797c597727ceb0f19408c9338169a6340442677681a89940587a5ac57e-exec @@ -0,0 +1,35 @@ +{ + "name": "proxy-mcproxy", + "version": "0.0.109", + "description": "Recursive proxy-object creation.", + "main": "dist/main.js", + "typings": "dist/main.d.ts", + "types": "dist/main.d.ts", + "scripts": { + "test": "suman test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/proxy-mcproxy.git" + }, + "keywords": [ + "proxy", + "recursive", + "immutable", + "immutability", + "test", + "testing" + ], + "author": "Olegzandr VD", + "license": "MIT", + "bugs": { + "url": "https://github.com/ORESoftware/proxy-mcproxy/issues" + }, + "homepage": "https://github.com/ORESoftware/proxy-mcproxy#readme", + "dependencies": { + "freeze-existing-props": "0.0.1005" + }, + "devDependencies": { + "@types/node": "^12.7.5" + } +} diff --git a/.pnpm-store/v11/files/0d/06a01e41a7578689629799290cce3ab910a732d7003675b246c3889995188d40e9b946ca65bd9fda738f2a8ad5d93327f7208f255bd6f41108eb903eb420d7 b/.pnpm-store/v11/files/0d/06a01e41a7578689629799290cce3ab910a732d7003675b246c3889995188d40e9b946ca65bd9fda738f2a8ad5d93327f7208f255bd6f41108eb903eb420d7 new file mode 100644 index 00000000..fdbd7022 --- /dev/null +++ b/.pnpm-store/v11/files/0d/06a01e41a7578689629799290cce3ab910a732d7003675b246c3889995188d40e9b946ca65bd9fda738f2a8ad5d93327f7208f255bd6f41108eb903eb420d7 @@ -0,0 +1,39 @@ +var concatMap = require('../'); +var test = require('tape'); + +test('empty or not', function (t) { + var xs = [ 1, 2, 3, 4, 5, 6 ]; + var ixes = []; + var ys = concatMap(xs, function (x, ix) { + ixes.push(ix); + return x % 2 ? [ x - 0.1, x, x + 0.1 ] : []; + }); + t.same(ys, [ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]); + t.same(ixes, [ 0, 1, 2, 3, 4, 5 ]); + t.end(); +}); + +test('always something', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : [ x ]; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('scalars', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function (x) { + return x === 'b' ? [ 'B', 'B', 'B' ] : x; + }); + t.same(ys, [ 'a', 'B', 'B', 'B', 'c', 'd' ]); + t.end(); +}); + +test('undefs', function (t) { + var xs = [ 'a', 'b', 'c', 'd' ]; + var ys = concatMap(xs, function () {}); + t.same(ys, [ undefined, undefined, undefined, undefined ]); + t.end(); +}); diff --git a/.pnpm-store/v11/files/0d/186cde4db0a6bc1571520f9c53cf4510f9c46d95d870357f1b843b72a2340a2e1313f6a99e71c691487fee071627c22ed1fb834ee6e5bb2cddc379a1ce5d41 b/.pnpm-store/v11/files/0d/186cde4db0a6bc1571520f9c53cf4510f9c46d95d870357f1b843b72a2340a2e1313f6a99e71c691487fee071627c22ed1fb834ee6e5bb2cddc379a1ce5d41 new file mode 100644 index 00000000..6dc89291 --- /dev/null +++ b/.pnpm-store/v11/files/0d/186cde4db0a6bc1571520f9c53cf4510f9c46d95d870357f1b843b72a2340a2e1313f6a99e71c691487fee071627c22ed1fb834ee6e5bb2cddc379a1ce5d41 @@ -0,0 +1,37 @@ +# inflight + +Add callbacks to requests in flight to avoid async duplication + +## USAGE + +```javascript +var inflight = require('inflight') + +// some request that does some stuff +function req(key, callback) { + // key is any random string. like a url or filename or whatever. + // + // will return either a falsey value, indicating that the + // request for this key is already in flight, or a new callback + // which when called will call all callbacks passed to inflightk + // with the same key + callback = inflight(key, callback) + + // If we got a falsey value back, then there's already a req going + if (!callback) return + + // this is where you'd fetch the url or whatever + // callback is also once()-ified, so it can safely be assigned + // to multiple events etc. First call wins. + setTimeout(function() { + callback(null, key) + }, 100) +} + +// only assigns a single setTimeout +// when it dings, all cbs get called +req('foo', cb1) +req('foo', cb2) +req('foo', cb3) +req('foo', cb4) +``` diff --git a/.pnpm-store/v11/files/0d/2de1b2f6d178dd6e8ddac3f75fe037b12249022e619939bf3b78e54862307a69762f455b2f66b6ff9c7ebc978e05eb0746241b99e6207235c6f1c0e00d2a37 b/.pnpm-store/v11/files/0d/2de1b2f6d178dd6e8ddac3f75fe037b12249022e619939bf3b78e54862307a69762f455b2f66b6ff9c7ebc978e05eb0746241b99e6207235c6f1c0e00d2a37 new file mode 100644 index 00000000..46045703 --- /dev/null +++ b/.pnpm-store/v11/files/0d/2de1b2f6d178dd6e8ddac3f75fe037b12249022e619939bf3b78e54862307a69762f455b2f66b6ff9c7ebc978e05eb0746241b99e6207235c6f1c0e00d2a37 @@ -0,0 +1,24 @@ +{ + "name": "component-emitter", + "description": "Event emitter", + "version": "1.2.1", + "license": "MIT", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "component": { + "scripts": { + "emitter/index.js": "index.js" + } + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/component/emitter.git" + }, + "scripts": { + "test": "make test" + }, + "files": ["index.js", "LICENSE"] +} diff --git a/.pnpm-store/v11/files/0d/3793861dd6ef8111bbfc79f4ef085b37dca880c3db196614c9961ed0f389852f173bd6ef2dfd8f79c355886c85d448c6fb4aedbd1abc64092c687c7985eaac b/.pnpm-store/v11/files/0d/3793861dd6ef8111bbfc79f4ef085b37dca880c3db196614c9961ed0f389852f173bd6ef2dfd8f79c355886c85d448c6fb4aedbd1abc64092c687c7985eaac new file mode 100644 index 00000000..b3f817b2 --- /dev/null +++ b/.pnpm-store/v11/files/0d/3793861dd6ef8111bbfc79f4ef085b37dca880c3db196614c9961ed0f389852f173bd6ef2dfd8f79c355886c85d448c6fb4aedbd1abc64092c687c7985eaac @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').every; diff --git a/.pnpm-store/v11/files/0d/592416c07463236a1f5e39a97cdb1f5a979ea1fc09c3a13879bf83e09fcc146926441c0c6966f9cdd4a2609c60fc0301052921f2f904537dac2fced85b3da9 b/.pnpm-store/v11/files/0d/592416c07463236a1f5e39a97cdb1f5a979ea1fc09c3a13879bf83e09fcc146926441c0c6966f9cdd4a2609c60fc0301052921f2f904537dac2fced85b3da9 new file mode 100644 index 00000000..dc969033 --- /dev/null +++ b/.pnpm-store/v11/files/0d/592416c07463236a1f5e39a97cdb1f5a979ea1fc09c3a13879bf83e09fcc146926441c0c6966f9cdd4a2609c60fc0301052921f2f904537dac2fced85b3da9 @@ -0,0 +1,10 @@ +module['exports'] = function(colors) { + return function(letter, i, exploded) { + if (letter === ' ') return letter; + switch (i%3) { + case 0: return colors.red(letter); + case 1: return colors.white(letter); + case 2: return colors.blue(letter); + } + }; +}; diff --git a/.pnpm-store/v11/files/0d/67ae80f5f90c466552ae01e2d1b97631af9b9bd0cb227b94d3cbb8e581586a2fd5829304d7ca1f01c197acf6bc73622b4454e1b4109d9714d55192abd8b60c b/.pnpm-store/v11/files/0d/67ae80f5f90c466552ae01e2d1b97631af9b9bd0cb227b94d3cbb8e581586a2fd5829304d7ca1f01c197acf6bc73622b4454e1b4109d9714d55192abd8b60c new file mode 100644 index 00000000..2d037654 --- /dev/null +++ b/.pnpm-store/v11/files/0d/67ae80f5f90c466552ae01e2d1b97631af9b9bd0cb227b94d3cbb8e581586a2fd5829304d7ca1f01c197acf6bc73622b4454e1b4109d9714d55192abd8b60c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('difference', require('../difference')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0d/741835b44c1599f05dcf09353a072c85ddfc519f6fad09bc0d00fd4d6aede795b90c82324ad6a93c73a320166b81afc00c284a028a1bc9ab74a1745b170d69 b/.pnpm-store/v11/files/0d/741835b44c1599f05dcf09353a072c85ddfc519f6fad09bc0d00fd4d6aede795b90c82324ad6a93c73a320166b81afc00c284a028a1bc9ab74a1745b170d69 new file mode 100644 index 00000000..6c4812a8 --- /dev/null +++ b/.pnpm-store/v11/files/0d/741835b44c1599f05dcf09353a072c85ddfc519f6fad09bc0d00fd4d6aede795b90c82324ad6a93c73a320166b81afc00c284a028a1bc9ab74a1745b170d69 @@ -0,0 +1,33 @@ +var isArrayLike = require('./isArrayLike'), + isObjectLike = require('./isObjectLike'); + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +module.exports = isArrayLikeObject; diff --git a/.pnpm-store/v11/files/0d/78637133f61f6cdb735126c12bd13b8b11ed92eecc2bfbce4a2e596edcc90983229f9ac2069806ba8eeb10a305695d1d9522d42e840a4f97fc4c7bf9ce0409 b/.pnpm-store/v11/files/0d/78637133f61f6cdb735126c12bd13b8b11ed92eecc2bfbce4a2e596edcc90983229f9ac2069806ba8eeb10a305695d1d9522d42e840a4f97fc4c7bf9ce0409 new file mode 100644 index 00000000..fdf20a73 --- /dev/null +++ b/.pnpm-store/v11/files/0d/78637133f61f6cdb735126c12bd13b8b11ed92eecc2bfbce4a2e596edcc90983229f9ac2069806ba8eeb10a305695d1d9522d42e840a4f97fc4c7bf9ce0409 @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbolsIn = require('./_getSymbolsIn'); + +/** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); +} + +module.exports = copySymbolsIn; diff --git a/.pnpm-store/v11/files/0d/7f785c4f36013634e3887756af20e4edc7ecc90295487794bea1795035be46d6f18b724e1ea1005d1533105199883c11eaf8a1313bfb212358e1d924e7ef3e b/.pnpm-store/v11/files/0d/7f785c4f36013634e3887756af20e4edc7ecc90295487794bea1795035be46d6f18b724e1ea1005d1533105199883c11eaf8a1313bfb212358e1d924e7ef3e new file mode 100644 index 00000000..cabcbcda --- /dev/null +++ b/.pnpm-store/v11/files/0d/7f785c4f36013634e3887756af20e4edc7ecc90295487794bea1795035be46d6f18b724e1ea1005d1533105199883c11eaf8a1313bfb212358e1d924e7ef3e @@ -0,0 +1,10 @@ +/** + * Detect Electron renderer process, which is node, but we should + * treat as a browser. + */ + +if (typeof process === 'undefined' || process.type === 'renderer') { + module.exports = require('./browser.js'); +} else { + module.exports = require('./node.js'); +} diff --git a/.pnpm-store/v11/files/0d/8db9d36a2507a11afe0e15bcfdbd6bef928595c93ac32ad0f739823dbc0c3d64c521cb7f9cd12b332130e4dd0303136bc1fd147db37024290052a797f15318 b/.pnpm-store/v11/files/0d/8db9d36a2507a11afe0e15bcfdbd6bef928595c93ac32ad0f739823dbc0c3d64c521cb7f9cd12b332130e4dd0303136bc1fd147db37024290052a797f15318 new file mode 100644 index 00000000..736fff31 --- /dev/null +++ b/.pnpm-store/v11/files/0d/8db9d36a2507a11afe0e15bcfdbd6bef928595c93ac32ad0f739823dbc0c3d64c521cb7f9cd12b332130e4dd0303136bc1fd147db37024290052a797f15318 @@ -0,0 +1,8 @@ +// This file is a shim which defers loading the real module until the compile cache is enabled. +try { + const { enableCompileCache } = require("node:module"); + if (enableCompileCache) { + enableCompileCache(); + } +} catch {} +module.exports = require("./_tsserver.js"); diff --git a/.pnpm-store/v11/files/0d/9ce8cb3915fec768e4677d0871a5e50c0fed18952df86a88b299a8d7c18ec87389690b2c4925a3b51e9a5fb8f21146091ef600e8822739b9a2a7c5b3aa14bd b/.pnpm-store/v11/files/0d/9ce8cb3915fec768e4677d0871a5e50c0fed18952df86a88b299a8d7c18ec87389690b2c4925a3b51e9a5fb8f21146091ef600e8822739b9a2a7c5b3aa14bd new file mode 100644 index 00000000..234a01f9 --- /dev/null +++ b/.pnpm-store/v11/files/0d/9ce8cb3915fec768e4677d0871a5e50c0fed18952df86a88b299a8d7c18ec87389690b2c4925a3b51e9a5fb8f21146091ef600e8822739b9a2a7c5b3aa14bd @@ -0,0 +1,26 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/0d/a3f68392d6c526348277ebfd3575f530fbea52fec8754c21d9274d72fb237ad84e3207b1cc62121023a385ed906c5a64bc311d63223fcebdb45f88f9fcff74 b/.pnpm-store/v11/files/0d/a3f68392d6c526348277ebfd3575f530fbea52fec8754c21d9274d72fb237ad84e3207b1cc62121023a385ed906c5a64bc311d63223fcebdb45f88f9fcff74 new file mode 100644 index 00000000..634c6a8b --- /dev/null +++ b/.pnpm-store/v11/files/0d/a3f68392d6c526348277ebfd3575f530fbea52fec8754c21d9274d72fb237ad84e3207b1cc62121023a385ed906c5a64bc311d63223fcebdb45f88f9fcff74 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqBy', require('../uniqBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0d/c2ae09dd57b9aeb0f0dbc44168c46f187d141375dc32a29ca2c6d2da60203c3a7cfa67feae3e024011b9147dbe2106f4f659d5e92546d5af8c8b205ca4bad9 b/.pnpm-store/v11/files/0d/c2ae09dd57b9aeb0f0dbc44168c46f187d141375dc32a29ca2c6d2da60203c3a7cfa67feae3e024011b9147dbe2106f4f659d5e92546d5af8c8b205ca4bad9 new file mode 100644 index 00000000..c0fc7c08 --- /dev/null +++ b/.pnpm-store/v11/files/0d/c2ae09dd57b9aeb0f0dbc44168c46f187d141375dc32a29ca2c6d2da60203c3a7cfa67feae3e024011b9147dbe2106f4f659d5e92546d5af8c8b205ca4bad9 @@ -0,0 +1,208 @@ +(function(window) { + var re = { + not_string: /[^s]/, + number: /[diefg]/, + json: /[j]/, + not_json: /[^j]/, + text: /^[^\x25]+/, + modulo: /^\x25{2}/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + key: /^([a-z_][a-z_\d]*)/i, + key_access: /^\.([a-z_][a-z_\d]*)/i, + index_access: /^\[(\d+)\]/, + sign: /^[\+\-]/ + } + + function sprintf() { + var key = arguments[0], cache = sprintf.cache + if (!(cache[key] && cache.hasOwnProperty(key))) { + cache[key] = sprintf.parse(key) + } + return sprintf.format.call(null, cache[key], arguments) + } + + sprintf.format = function(parse_tree, argv) { + var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + for (i = 0; i < tree_length; i++) { + node_type = get_type(parse_tree[i]) + if (node_type === "string") { + output[output.length] = parse_tree[i] + } + else if (node_type === "array") { + match = parse_tree[i] // convenience purposes only + if (match[2]) { // keyword argument + arg = argv[cursor] + for (k = 0; k < match[2].length; k++) { + if (!arg.hasOwnProperty(match[2][k])) { + throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + } + arg = arg[match[2][k]] + } + } + else if (match[1]) { // positional argument (explicit) + arg = argv[match[1]] + } + else { // positional argument (implicit) + arg = argv[cursor++] + } + + if (get_type(arg) == "function") { + arg = arg() + } + + if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) + } + + if (re.number.test(match[8])) { + is_positive = arg >= 0 + } + + switch (match[8]) { + case "b": + arg = arg.toString(2) + break + case "c": + arg = String.fromCharCode(arg) + break + case "d": + case "i": + arg = parseInt(arg, 10) + break + case "j": + arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) + break + case "e": + arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + break + case "f": + arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) + break + case "g": + arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) + break + case "o": + arg = arg.toString(8) + break + case "s": + arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + break + case "u": + arg = arg >>> 0 + break + case "x": + arg = arg.toString(16) + break + case "X": + arg = arg.toString(16).toUpperCase() + break + } + if (re.json.test(match[8])) { + output[output.length] = arg + } + else { + if (re.number.test(match[8]) && (!is_positive || match[3])) { + sign = is_positive ? "+" : "-" + arg = arg.toString().replace(re.sign, "") + } + else { + sign = "" + } + pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_length = match[6] - (sign + arg).length + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" + output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + } + } + } + return output.join("") + } + + sprintf.cache = {} + + sprintf.parse = function(fmt) { + var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 + while (_fmt) { + if ((match = re.text.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = match[0] + } + else if ((match = re.modulo.exec(_fmt)) !== null) { + parse_tree[parse_tree.length] = "%" + } + else if ((match = re.placeholder.exec(_fmt)) !== null) { + if (match[2]) { + arg_names |= 1 + var field_list = [], replacement_field = match[2], field_match = [] + if ((field_match = re.key.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + if ((field_match = re.key_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else if ((field_match = re.index_access.exec(replacement_field)) !== null) { + field_list[field_list.length] = field_match[1] + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + } + } + else { + throw new SyntaxError("[sprintf] failed to parse named argument key") + } + match[2] = field_list + } + else { + arg_names |= 2 + } + if (arg_names === 3) { + throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported") + } + parse_tree[parse_tree.length] = match + } + else { + throw new SyntaxError("[sprintf] unexpected placeholder") + } + _fmt = _fmt.substring(match[0].length) + } + return parse_tree + } + + var vsprintf = function(fmt, argv, _argv) { + _argv = (argv || []).slice(0) + _argv.splice(0, 0, fmt) + return sprintf.apply(null, _argv) + } + + /** + * helpers + */ + function get_type(variable) { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } + + function str_repeat(input, multiplier) { + return Array(multiplier + 1).join(input) + } + + /** + * export to either browser or node.js + */ + if (typeof exports !== "undefined") { + exports.sprintf = sprintf + exports.vsprintf = vsprintf + } + else { + window.sprintf = sprintf + window.vsprintf = vsprintf + + if (typeof define === "function" && define.amd) { + define(function() { + return { + sprintf: sprintf, + vsprintf: vsprintf + } + }) + } + } +})(typeof window === "undefined" ? this : window); diff --git a/.pnpm-store/v11/files/0d/c3ca42c0e3bb21255981d961d96b4341f630b443909eadaf445eafa0ed6c9b0358b77ba51319659534b5677b31e39142125ad31a5d3d93ae194593fc81f421 b/.pnpm-store/v11/files/0d/c3ca42c0e3bb21255981d961d96b4341f630b443909eadaf445eafa0ed6c9b0358b77ba51319659534b5677b31e39142125ad31a5d3d93ae194593fc81f421 new file mode 100644 index 00000000..6dd56504 --- /dev/null +++ b/.pnpm-store/v11/files/0d/c3ca42c0e3bb21255981d961d96b4341f630b443909eadaf445eafa0ed6c9b0358b77ba51319659534b5677b31e39142125ad31a5d3d93ae194593fc81f421 @@ -0,0 +1,25 @@ +{ + "name": "tcp-ping", + "version": "0.1.1", + "description": "A ping utility using TCP connection", + "main": "ping.js", + "scripts": { + "test": "echo 0" + }, + "repository": { + "type": "git", + "url": "https://github.com/wesolyromek/tcp-ping.git" + }, + "keywords": [ + "ping", + "util", + "tcp", + "availability" + ], + "author": "Adam Paszke", + "license": "MIT", + "bugs": { + "url": "https://github.com/wesolyromek/tcp-ping/issues" + }, + "homepage": "https://github.com/wesolyromek/tcp-ping" +} diff --git a/.pnpm-store/v11/files/0d/cbfe824e0e77794f9745f35021ac5d584856406f7004784e279d4b6cca4be5536ac77e14083926c1f54abef9637bc69b7dcf363e7ecd2292612b725736659b-exec b/.pnpm-store/v11/files/0d/cbfe824e0e77794f9745f35021ac5d584856406f7004784e279d4b6cca4be5536ac77e14083926c1f54abef9637bc69b7dcf363e7ecd2292612b725736659b-exec new file mode 100755 index 00000000..16814cf2 --- /dev/null +++ b/.pnpm-store/v11/files/0d/cbfe824e0e77794f9745f35021ac5d584856406f7004784e279d4b6cca4be5536ac77e14083926c1f54abef9637bc69b7dcf363e7ecd2292612b725736659b-exec @@ -0,0 +1,56 @@ +#!/usr/bin/env sh + +set -e; + +if [ "$skip_postinstall" = "yes" ]; then + echo "skipping postinstall routine."; + exit 0; +fi + +export FORCE_COLOR=1; +export skip_postinstall="yes"; + +mkdir -p "$HOME/.oresoftware/bin" || { + echo "Could not create .oresoftware dir in user home."; + exit 1; +} + + +if [ "$(uname -s)" != "Darwin" ]; then + exit 0; +fi + + +install_realpath(){ + curl_url='https://raw.githubusercontent.com/oresoftware/realpath/master/assets/install.sh'; + curl -H 'Cache-Control: no-cache' --silent -o- "$curl_url" | sh || { + echo "Could not install realpath on your system."; + exit 1; + } +} + +realpath_path="$HOME/.oresoftware/bin/realpath"; + +if [ ! -f "$realpath_path" ]; then + install_realpath + exit 0; +fi + +if command -v gdate > /dev/null; then + modified_secs="$(gdate -r "$realpath_path" +%s)" +else + modified_secs="$(date -r "$realpath_path" +%s || echo '100')" # if date -r is not defined, then just use a low integer +fi + +current_secs="$(date +%s)" +diff="$(expr "$current_secs" - "$modified_secs")" + +if [ "$diff" -gt '500000' ]; then + install_realpath + exit 0; +fi + + + + + diff --git a/.pnpm-store/v11/files/0d/e53aaf9ddbdd8586c14231bcbcbebb078e8ede8deff9ced48ce6b0db2654f3ccbecc3afd075526f091df3481b14449d72ed37d45734ff8d1cd961196d55d08-exec b/.pnpm-store/v11/files/0d/e53aaf9ddbdd8586c14231bcbcbebb078e8ede8deff9ced48ce6b0db2654f3ccbecc3afd075526f091df3481b14449d72ed37d45734ff8d1cd961196d55d08-exec new file mode 100755 index 00000000..93644fd7 --- /dev/null +++ b/.pnpm-store/v11/files/0d/e53aaf9ddbdd8586c14231bcbcbebb078e8ede8deff9ced48ce6b0db2654f3ccbecc3afd075526f091df3481b14449d72ed37d45734ff8d1cd961196d55d08-exec @@ -0,0 +1,14 @@ +const fs = require('fs'); +const path = require('path'); + +exports.getRunStream = function () { + return fs.createReadStream(exports.getRunPath()); +}; + +exports.getRunPath = function(){ + return path.resolve(__dirname + '/index.sh'); +}; + +exports.getPluginName = function(){ + return path.dirname(__filename); +}; \ No newline at end of file diff --git a/.pnpm-store/v11/files/0e/2c0fce1152900eac45e0763fcf9898db2f933e09be88a1d4d1c42fa8a66b7e9293e8ed987037e07e9ccbfa472490b72858b54a07f4224fd8dabf9aecab17e7 b/.pnpm-store/v11/files/0e/2c0fce1152900eac45e0763fcf9898db2f933e09be88a1d4d1c42fa8a66b7e9293e8ed987037e07e9ccbfa472490b72858b54a07f4224fd8dabf9aecab17e7 new file mode 100644 index 00000000..e2328233 --- /dev/null +++ b/.pnpm-store/v11/files/0e/2c0fce1152900eac45e0763fcf9898db2f933e09be88a1d4d1c42fa8a66b7e9293e8ed987037e07e9ccbfa472490b72858b54a07f4224fd8dabf9aecab17e7 @@ -0,0 +1,37 @@ +{ + "name": "decode-uri-component", + "version": "0.2.2", + "description": "A better decodeURIComponent", + "license": "MIT", + "repository": "SamVerschueren/decode-uri-component", + "author": { + "name": "Sam Verschueren", + "email": "sam.verschueren@gmail.com", + "url": "github.com/SamVerschueren" + }, + "engines": { + "node": ">=0.10" + }, + "scripts": { + "test": "xo && nyc ava", + "coveralls": "nyc report --reporter=text-lcov | coveralls" + }, + "files": [ + "index.js" + ], + "keywords": [ + "decode", + "uri", + "component", + "decodeuricomponent", + "components", + "decoder", + "url" + ], + "devDependencies": { + "ava": "^0.17.0", + "coveralls": "^2.13.1", + "nyc": "^10.3.2", + "xo": "^0.16.0" + } +} diff --git a/.pnpm-store/v11/files/0e/43c223d75f542d1b7114a65c2e14fb2a169561cf544558581ec1afcfc38703fbf5a0295201bb2dc5127386d3a8c7ca046227888e27ef404e38f7e7ef3042bf b/.pnpm-store/v11/files/0e/43c223d75f542d1b7114a65c2e14fb2a169561cf544558581ec1afcfc38703fbf5a0295201bb2dc5127386d3a8c7ca046227888e27ef404e38f7e7ef3042bf new file mode 100644 index 00000000..6fd84c31 --- /dev/null +++ b/.pnpm-store/v11/files/0e/43c223d75f542d1b7114a65c2e14fb2a169561cf544558581ec1afcfc38703fbf5a0295201bb2dc5127386d3a8c7ca046227888e27ef404e38f7e7ef3042bf @@ -0,0 +1,129 @@ +'use strict'; + +const { EMPTY_BUFFER } = require('./constants'); + +/** + * Merges an array of buffers into a new buffer. + * + * @param {Buffer[]} list The array of buffers to concat + * @param {Number} totalLength The total length of buffers in the list + * @return {Buffer} The resulting buffer + * @public + */ +function concat(list, totalLength) { + if (list.length === 0) return EMPTY_BUFFER; + if (list.length === 1) return list[0]; + + const target = Buffer.allocUnsafe(totalLength); + let offset = 0; + + for (let i = 0; i < list.length; i++) { + const buf = list[i]; + target.set(buf, offset); + offset += buf.length; + } + + if (offset < totalLength) return target.slice(0, offset); + + return target; +} + +/** + * Masks a buffer using the given mask. + * + * @param {Buffer} source The buffer to mask + * @param {Buffer} mask The mask to use + * @param {Buffer} output The buffer where to store the result + * @param {Number} offset The offset at which to start writing + * @param {Number} length The number of bytes to mask. + * @public + */ +function _mask(source, mask, output, offset, length) { + for (let i = 0; i < length; i++) { + output[offset + i] = source[i] ^ mask[i & 3]; + } +} + +/** + * Unmasks a buffer using the given mask. + * + * @param {Buffer} buffer The buffer to unmask + * @param {Buffer} mask The mask to use + * @public + */ +function _unmask(buffer, mask) { + // Required until https://github.com/nodejs/node/issues/9006 is resolved. + const length = buffer.length; + for (let i = 0; i < length; i++) { + buffer[i] ^= mask[i & 3]; + } +} + +/** + * Converts a buffer to an `ArrayBuffer`. + * + * @param {Buffer} buf The buffer to convert + * @return {ArrayBuffer} Converted buffer + * @public + */ +function toArrayBuffer(buf) { + if (buf.byteLength === buf.buffer.byteLength) { + return buf.buffer; + } + + return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength); +} + +/** + * Converts `data` to a `Buffer`. + * + * @param {*} data The data to convert + * @return {Buffer} The buffer + * @throws {TypeError} + * @public + */ +function toBuffer(data) { + toBuffer.readOnly = true; + + if (Buffer.isBuffer(data)) return data; + + let buf; + + if (data instanceof ArrayBuffer) { + buf = Buffer.from(data); + } else if (ArrayBuffer.isView(data)) { + buf = Buffer.from(data.buffer, data.byteOffset, data.byteLength); + } else { + buf = Buffer.from(data); + toBuffer.readOnly = false; + } + + return buf; +} + +try { + const bufferUtil = require('bufferutil'); + const bu = bufferUtil.BufferUtil || bufferUtil; + + module.exports = { + concat, + mask(source, mask, output, offset, length) { + if (length < 48) _mask(source, mask, output, offset, length); + else bu.mask(source, mask, output, offset, length); + }, + toArrayBuffer, + toBuffer, + unmask(buffer, mask) { + if (buffer.length < 32) _unmask(buffer, mask); + else bu.unmask(buffer, mask); + } + }; +} catch (e) /* istanbul ignore next */ { + module.exports = { + concat, + mask: _mask, + toArrayBuffer, + toBuffer, + unmask: _unmask + }; +} diff --git a/.pnpm-store/v11/files/0e/4a96a0bc3154e001c11e297e464e2695887e8a8bc854d40eaab97cb3f7e15d38c9ca7d9ed3a21bffa0065ad5be644132e8ce8b2b5ed8f7c805ae6bd9e38ebe-exec b/.pnpm-store/v11/files/0e/4a96a0bc3154e001c11e297e464e2695887e8a8bc854d40eaab97cb3f7e15d38c9ca7d9ed3a21bffa0065ad5be644132e8ce8b2b5ed8f7c805ae6bd9e38ebe-exec new file mode 100755 index 00000000..741b149e --- /dev/null +++ b/.pnpm-store/v11/files/0e/4a96a0bc3154e001c11e297e464e2695887e8a8bc854d40eaab97cb3f7e15d38c9ca7d9ed3a21bffa0065ad5be644132e8ce8b2b5ed8f7c805ae6bd9e38ebe-exec @@ -0,0 +1,53 @@ +/** + * Module dependencies + */ + +var XMLHttpRequest = require('./xmlhttprequest'); +var XHR = require('./polling-xhr'); +var JSONP = require('./polling-jsonp'); +var websocket = require('./websocket'); + +/** + * Export transports. + */ + +exports.polling = polling; +exports.websocket = websocket; + +/** + * Polling transport polymorphic constructor. + * Decides on xhr vs jsonp based on feature detection. + * + * @api private + */ + +function polling (opts) { + var xhr; + var xd = false; + var xs = false; + var jsonp = false !== opts.jsonp; + + if (typeof location !== 'undefined') { + var isSSL = 'https:' === location.protocol; + var port = location.port; + + // some user agents have empty `location.port` + if (!port) { + port = isSSL ? 443 : 80; + } + + xd = opts.hostname !== location.hostname || port !== opts.port; + xs = opts.secure !== isSSL; + } + + opts.xdomain = xd; + opts.xscheme = xs; + xhr = new XMLHttpRequest(opts); + + if ('open' in xhr && !opts.forceJSONP) { + return new XHR(opts); + } else { + if (!jsonp) throw new Error('JSONP disabled'); + return new JSONP(opts); + } +} diff --git a/.pnpm-store/v11/files/0e/85f245f669f9ca94597b6fbdd18d1659a2ff25dc3c788c81863f9deda172e7a8a33f673a54e1e0f200b7590c6167a81f3bc7b8853cfd61c6a0dab248b4b8f6-exec b/.pnpm-store/v11/files/0e/85f245f669f9ca94597b6fbdd18d1659a2ff25dc3c788c81863f9deda172e7a8a33f673a54e1e0f200b7590c6167a81f3bc7b8853cfd61c6a0dab248b4b8f6-exec new file mode 100755 index 00000000..f512be7e --- /dev/null +++ b/.pnpm-store/v11/files/0e/85f245f669f9ca94597b6fbdd18d1659a2ff25dc3c788c81863f9deda172e7a8a33f673a54e1e0f200b7590c6167a81f3bc7b8853cfd61c6a0dab248b4b8f6-exec @@ -0,0 +1,3 @@ +declare module "module" { + export = NodeJS.Module; +} diff --git a/.pnpm-store/v11/files/0e/860967ae3572f004a8c97aeb79a631f447944fbb0af21b433f09f1ac98e566d08cebf54306aea74c56bc327dcb65147f495768ad2be7b20378c68348641ebc b/.pnpm-store/v11/files/0e/860967ae3572f004a8c97aeb79a631f447944fbb0af21b433f09f1ac98e566d08cebf54306aea74c56bc327dcb65147f495768ad2be7b20378c68348641ebc new file mode 100644 index 00000000..cecf8bbf --- /dev/null +++ b/.pnpm-store/v11/files/0e/860967ae3572f004a8c97aeb79a631f447944fbb0af21b433f09f1ac98e566d08cebf54306aea74c56bc327dcb65147f495768ad2be7b20378c68348641ebc @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forInRight', require('../forInRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0e/95d8bbbd5c0deb6b571e9e2c97c2f45aaa1601dca29ffa287665c31434c8c98ecbe7c0021c3a20a750f1840ed395429842218e9f029bd12c069e94e333d8fc b/.pnpm-store/v11/files/0e/95d8bbbd5c0deb6b571e9e2c97c2f45aaa1601dca29ffa287665c31434c8c98ecbe7c0021c3a20a750f1840ed395429842218e9f029bd12c069e94e333d8fc new file mode 100644 index 00000000..fac4429b --- /dev/null +++ b/.pnpm-store/v11/files/0e/95d8bbbd5c0deb6b571e9e2c97c2f45aaa1601dca29ffa287665c31434c8c98ecbe7c0021c3a20a750f1840ed395429842218e9f029bd12c069e94e333d8fc @@ -0,0 +1,85 @@ + +/** + * Expose `Backoff`. + */ + +module.exports = Backoff; + +/** + * Initialize backoff timer with `opts`. + * + * - `min` initial timeout in milliseconds [100] + * - `max` max timeout [10000] + * - `jitter` [0] + * - `factor` [2] + * + * @param {Object} opts + * @api public + */ + +function Backoff(opts) { + opts = opts || {}; + this.ms = opts.min || 100; + this.max = opts.max || 10000; + this.factor = opts.factor || 2; + this.jitter = opts.jitter > 0 && opts.jitter <= 1 ? opts.jitter : 0; + this.attempts = 0; +} + +/** + * Return the backoff duration. + * + * @return {Number} + * @api public + */ + +Backoff.prototype.duration = function(){ + var ms = this.ms * Math.pow(this.factor, this.attempts++); + if (this.jitter) { + var rand = Math.random(); + var deviation = Math.floor(rand * this.jitter * ms); + ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation; + } + return Math.min(ms, this.max) | 0; +}; + +/** + * Reset the number of attempts. + * + * @api public + */ + +Backoff.prototype.reset = function(){ + this.attempts = 0; +}; + +/** + * Set the minimum duration + * + * @api public + */ + +Backoff.prototype.setMin = function(min){ + this.ms = min; +}; + +/** + * Set the maximum duration + * + * @api public + */ + +Backoff.prototype.setMax = function(max){ + this.max = max; +}; + +/** + * Set the jitter + * + * @api public + */ + +Backoff.prototype.setJitter = function(jitter){ + this.jitter = jitter; +}; + diff --git a/.pnpm-store/v11/files/0e/9cf1114c6e4730d8373f13591544a7590fc7f81f8b91aff3135e0c834d923f3ba086d4a7278c29dc732d3b52ab9a0fe42708437e0dfc1da68ca978a85cff49 b/.pnpm-store/v11/files/0e/9cf1114c6e4730d8373f13591544a7590fc7f81f8b91aff3135e0c834d923f3ba086d4a7278c29dc732d3b52ab9a0fe42708437e0dfc1da68ca978a85cff49 new file mode 100644 index 00000000..c8bf11d8 --- /dev/null +++ b/.pnpm-store/v11/files/0e/9cf1114c6e4730d8373f13591544a7590fc7f81f8b91aff3135e0c834d923f3ba086d4a7278c29dc732d3b52ab9a0fe42708437e0dfc1da68ca978a85cff49 @@ -0,0 +1,4 @@ +import { ITestDataObj } from "suman-types/dts/it"; +import { IHookObj } from "suman-types/dts/test-suite"; +export declare const handleReturnVal: (done: Function, fnStr: string, testOrHook: ITestDataObj | IHookObj) => (val: any, warn?: boolean) => void; +export declare const handleGenerator: (fn: Function, arg: any) => any; diff --git a/.pnpm-store/v11/files/0e/cb0cb71405cce63f8edf1a70bfdfeae776d3047f6186f9e6616e8afb748ccdcbf6ce739669960771327ef09f0406538fda042e025fb190dc15ed5f8b262ffc b/.pnpm-store/v11/files/0e/cb0cb71405cce63f8edf1a70bfdfeae776d3047f6186f9e6616e8afb748ccdcbf6ce739669960771327ef09f0406538fda042e025fb190dc15ed5f8b262ffc new file mode 100644 index 00000000..a7162d08 --- /dev/null +++ b/.pnpm-store/v11/files/0e/cb0cb71405cce63f8edf1a70bfdfeae776d3047f6186f9e6616e8afb748ccdcbf6ce739669960771327ef09f0406538fda042e025fb190dc15ed5f8b262ffc @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0e/f858a95ffe7bc0e31404143f611d3a87bb9c9fd681ff624c5f5d9e399c473bdd300d97a11db07fe00e45474ba976c454e533d9f90aafb28f3bafc0d05821d0 b/.pnpm-store/v11/files/0e/f858a95ffe7bc0e31404143f611d3a87bb9c9fd681ff624c5f5d9e399c473bdd300d97a11db07fe00e45474ba976c454e533d9f90aafb28f3bafc0d05821d0 new file mode 100644 index 00000000..32eacfa7 --- /dev/null +++ b/.pnpm-store/v11/files/0e/f858a95ffe7bc0e31404143f611d3a87bb9c9fd681ff624c5f5d9e399c473bdd300d97a11db07fe00e45474ba976c454e533d9f90aafb28f3bafc0d05821d0 @@ -0,0 +1,50 @@ +/*! + * Chai - flag utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var inspect = require('./inspect'); +var config = require('../config'); + +/** + * ### .objDisplay(object) + * + * Determines if an object or an array matches + * criteria to be inspected in-line for error + * messages or should be truncated. + * + * @param {Mixed} javascript object to inspect + * @name objDisplay + * @namespace Utils + * @api public + */ + +module.exports = function objDisplay(obj) { + var str = inspect(obj) + , type = Object.prototype.toString.call(obj); + + if (config.truncateThreshold && str.length >= config.truncateThreshold) { + if (type === '[object Function]') { + return !obj.name || obj.name === '' + ? '[Function]' + : '[Function: ' + obj.name + ']'; + } else if (type === '[object Array]') { + return '[ Array(' + obj.length + ') ]'; + } else if (type === '[object Object]') { + var keys = Object.keys(obj) + , kstr = keys.length > 2 + ? keys.splice(0, 2).join(', ') + ', ...' + : keys.join(', '); + return '{ Object (' + kstr + ') }'; + } else { + return str; + } + } else { + return str; + } +}; diff --git a/.pnpm-store/v11/files/0f/0f44f30fe06d376888adf0a52624ffccf5ed3424cb13e03d1dbfe31b3ebd3ad49a5ed1e5ac80ac5e1ad157dcc1d9e2080b43bb200ce7f4b068e9ff1611705d b/.pnpm-store/v11/files/0f/0f44f30fe06d376888adf0a52624ffccf5ed3424cb13e03d1dbfe31b3ebd3ad49a5ed1e5ac80ac5e1ad157dcc1d9e2080b43bb200ce7f4b068e9ff1611705d new file mode 100644 index 00000000..d3c913e7 --- /dev/null +++ b/.pnpm-store/v11/files/0f/0f44f30fe06d376888adf0a52624ffccf5ed3424cb13e03d1dbfe31b3ebd3ad49a5ed1e5ac80ac5e1ad157dcc1d9e2080b43bb200ce7f4b068e9ff1611705d @@ -0,0 +1,107 @@ +# expand-brackets [![NPM version](https://img.shields.io/npm/v/expand-brackets.svg?style=flat)](https://www.npmjs.com/package/expand-brackets) [![NPM downloads](https://img.shields.io/npm/dm/expand-brackets.svg?style=flat)](https://npmjs.org/package/expand-brackets) [![Build Status](https://img.shields.io/travis/jonschlinkert/expand-brackets.svg?style=flat)](https://travis-ci.org/jonschlinkert/expand-brackets) + +> Expand POSIX bracket expressions (character classes) in glob patterns. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install expand-brackets --save +``` + +## Usage + +```js +var brackets = require('expand-brackets'); + +brackets('[![:lower:]]'); +//=> '[^a-z]' +``` + +## .isMatch + +Return true if the given string matches the bracket expression: + +```js +brackets.isMatch('A', '[![:lower:]]'); +//=> true + +brackets.isMatch('a', '[![:lower:]]'); +//=> false +``` + +## .makeRe + +Make a regular expression from a bracket expression: + +```js +brackets.makeRe('[![:lower:]]'); +//=> /[^a-z]/ +``` + +The following named POSIX bracket expressions are supported: + +* `[:alnum:]`: Alphanumeric characters (`a-zA-Z0-9]`) +* `[:alpha:]`: Alphabetic characters (`a-zA-Z]`) +* `[:blank:]`: Space and tab (`[ t]`) +* `[:digit:]`: Digits (`[0-9]`) +* `[:lower:]`: Lowercase letters (`[a-z]`) +* `[:punct:]`: Punctuation and symbols. (`[!"#$%&'()*+, -./:;<=>?@ [\]^_``{|}~]`) +* `[:upper:]`: Uppercase letters (`[A-Z]`) +* `[:word:]`: Word characters (letters, numbers and underscores) (`[A-Za-z0-9_]`) +* `[:xdigit:]`: Hexadecimal digits (`[A-Fa-f0-9]`) + +Collating sequences are not supported. + +## Related projects + +You might also be interested in these projects: + +* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://www.npmjs.com/package/extglob) | [homepage](https://github.com/jonschlinkert/extglob) +* [is-extglob](https://www.npmjs.com/package/is-extglob): Returns true if a string has an extglob. | [homepage](https://github.com/jonschlinkert/is-extglob) +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern.… [more](https://www.npmjs.com/package/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob) +* [is-posix-bracket](https://www.npmjs.com/package/is-posix-bracket): Returns true if the given string is a POSIX bracket expression (POSIX character class). | [homepage](https://github.com/jonschlinkert/is-posix-bracket) +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://www.npmjs.com/package/micromatch) | [homepage](https://github.com/jonschlinkert/micromatch) + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/expand-brackets/issues/new). + +## Building docs + +Generate readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install verb && npm run docs +``` + +Or, if [verb](https://github.com/verbose/verb) is installed globally: + +```sh +$ verb +``` + +## Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +## Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +verb © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/expand-brackets/blob/master/LICENSE). + +*** + +_This file was generated by [verb](https://github.com/verbose/verb), v, on April 01, 2016._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/0f/12af00a8e60f203dace804d63d37540ad5d573be516b18c7036024a53c7307026a0bcf35c88172c6f84acb73d26a623af84c010a2e131ccb64d8b52ad205d3 b/.pnpm-store/v11/files/0f/12af00a8e60f203dace804d63d37540ad5d573be516b18c7036024a53c7307026a0bcf35c88172c6f84acb73d26a623af84c010a2e131ccb64d8b52ad205d3 new file mode 100644 index 00000000..e6f1a882 --- /dev/null +++ b/.pnpm-store/v11/files/0f/12af00a8e60f203dace804d63d37540ad5d573be516b18c7036024a53c7307026a0bcf35c88172c6f84acb73d26a623af84c010a2e131ccb64d8b52ad205d3 @@ -0,0 +1,44 @@ +var baseClone = require('./_baseClone'), + baseMatchesProperty = require('./_baseMatchesProperty'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that performs a partial deep comparison between the + * value at `path` of a given object to `srcValue`, returning `true` if the + * object value is equivalent, else `false`. + * + * **Note:** Partial comparisons will match empty array and empty object + * `srcValue` values against any array or object value, respectively. See + * `_.isEqual` for a list of supported value comparisons. + * + * **Note:** Multiple values can be checked by combining several matchers + * using `_.overSome` + * + * @static + * @memberOf _ + * @since 3.2.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.find(objects, _.matchesProperty('a', 4)); + * // => { 'a': 4, 'b': 5, 'c': 6 } + * + * // Checking for several possible values + * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); + * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] + */ +function matchesProperty(path, srcValue) { + return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); +} + +module.exports = matchesProperty; diff --git a/.pnpm-store/v11/files/0f/1ada3d9947b3f32e42acfd46085fe0c21b3b02bd69ce9a4f68df647b5ab9dfe610b3cb28d7cd94c9b33928048e9b184ac2467ae63deb5bfef196a78bb13f21 b/.pnpm-store/v11/files/0f/1ada3d9947b3f32e42acfd46085fe0c21b3b02bd69ce9a4f68df647b5ab9dfe610b3cb28d7cd94c9b33928048e9b184ac2467ae63deb5bfef196a78bb13f21 new file mode 100644 index 00000000..91235fec --- /dev/null +++ b/.pnpm-store/v11/files/0f/1ada3d9947b3f32e42acfd46085fe0c21b3b02bd69ce9a4f68df647b5ab9dfe610b3cb28d7cd94c9b33928048e9b184ac2467ae63deb5bfef196a78bb13f21 @@ -0,0 +1,211 @@ +

+ + ChaiJS type-detect + +

+ +

+ Improved typeof detection for node and the browser. +

+ +

+ + license:mit + + + tag:? + + + build:? + + + coverage:? + + + npm:? + + + dependencies:? + + + devDependencies:? + +
+ + Selenium Test Status + +
+ + Join the Slack chat + + + Join the Gitter chat + +

+ +## What is Type-Detect? + +Type Detect is a module which you can use to detect the type of a given object. It returns a string representation of the object's type, either using [`typeof`](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-typeof-operator) or [`@@toStringTag`](http://www.ecma-international.org/ecma-262/6.0/index.html#sec-symbol.tostringtag). It also normalizes some object names for consistency among browsers. + +## Installation + +### Node.js + +`type-detect` is available on [npm](http://npmjs.org). To install it, type: + + $ npm install type-detect + +### Browsers + +You can also use it within the browser; install via npm and use the `type-detect.js` file found within the download. For example: + +```html + +``` + +## Usage + +The primary export of `type-detect` is function that can serve as a replacement for `typeof`. The results of this function will be more specific than that of native `typeof`. + +```js +var type = require('type-detect'); +``` + +#### array + +```js +assert(type([]) === 'Array'); +assert(type(new Array()) === 'Array'); +``` + +#### regexp + +```js +assert(type(/a-z/gi) === 'RegExp'); +assert(type(new RegExp('a-z')) === 'RegExp'); +``` + +#### function + +```js +assert(type(function () {}) === 'function'); +``` + +#### arguments + +```js +(function () { + assert(type(arguments) === 'arguments'); +})(); +``` + +#### date + +```js +assert(type(new Date) === 'Date'); +``` + +#### number + +```js +assert(type(1) === 'number'); +assert(type(1.234) === 'number'); +assert(type(-1) === 'number'); +assert(type(-1.234) === 'number'); +assert(type(Infinity) === 'number'); +assert(type(NaN) === 'number'); +assert(type(new Number(1)) === 'Number'); // note - the object version has a capital N +``` + +#### string + +```js +assert(type('hello world') === 'string'); +assert(type(new String('hello')) === 'String'); // note - the object version has a capital S +``` + +#### null + +```js +assert(type(null) === 'null'); +assert(type(undefined) !== 'null'); +``` + +#### undefined + +```js +assert(type(undefined) === 'undefined'); +assert(type(null) !== 'undefined'); +``` + +#### object + +```js +var Noop = function () {}; +assert(type({}) === 'Object'); +assert(type(Noop) !== 'Object'); +assert(type(new Noop) === 'Object'); +assert(type(new Object) === 'Object'); +``` + +#### ECMA6 Types + +All new ECMAScript 2015 objects are also supported, such as Promises and Symbols: + +```js +assert(type(new Map() === 'Map'); +assert(type(new WeakMap()) === 'WeakMap'); +assert(type(new Set()) === 'Set'); +assert(type(new WeakSet()) === 'WeakSet'); +assert(type(Symbol()) === 'Symbol'); +assert(type(new Promise(callback) === 'Promise'); +assert(type(new Int8Array()) === 'Int8Array'); +assert(type(new Uint8Array()) === 'Uint8Array'); +assert(type(new UInt8ClampedArray()) === 'Uint8ClampedArray'); +assert(type(new Int16Array()) === 'Int16Array'); +assert(type(new Uint16Array()) === 'Uint16Array'); +assert(type(new Int32Array()) === 'Int32Array'); +assert(type(new UInt32Array()) === 'Uint32Array'); +assert(type(new Float32Array()) === 'Float32Array'); +assert(type(new Float64Array()) === 'Float64Array'); +assert(type(new ArrayBuffer()) === 'ArrayBuffer'); +assert(type(new DataView(arrayBuffer)) === 'DataView'); +``` + +Also, if you use `Symbol.toStringTag` to change an Objects return value of the `toString()` Method, `type()` will return this value, e.g: + +```js +var myObject = {}; +myObject[Symbol.toStringTag] = 'myCustomType'; +assert(type(myObject) === 'myCustomType'); +``` diff --git a/.pnpm-store/v11/files/0f/333ab7a84a216c050830aee0098b0eca3c70eb3bb13e5d69120977a1faa68418d6b7b6014fbe1f376e0b46c6b510c7f994e0f7320b5cf23ba744a89f749cef b/.pnpm-store/v11/files/0f/333ab7a84a216c050830aee0098b0eca3c70eb3bb13e5d69120977a1faa68418d6b7b6014fbe1f376e0b46c6b510c7f994e0f7320b5cf23ba744a89f749cef new file mode 100644 index 00000000..76b3db73 --- /dev/null +++ b/.pnpm-store/v11/files/0f/333ab7a84a216c050830aee0098b0eca3c70eb3bb13e5d69120977a1faa68418d6b7b6014fbe1f376e0b46c6b510c7f994e0f7320b5cf23ba744a89f749cef @@ -0,0 +1,80 @@ +{ + "name": "async", + "description": "Higher-order functions and common patterns for asynchronous code", + "version": "2.6.4", + "main": "dist/async.js", + "author": "Caolan McMahon", + "homepage": "https://caolan.github.io/async/", + "repository": { + "type": "git", + "url": "https://github.com/caolan/async.git" + }, + "bugs": { + "url": "https://github.com/caolan/async/issues" + }, + "keywords": [ + "async", + "callback", + "module", + "utility" + ], + "dependencies": { + "lodash": "^4.17.14" + }, + "devDependencies": { + "babel-cli": "^6.24.0", + "babel-core": "^6.26.3", + "babel-plugin-add-module-exports": "^0.2.1", + "babel-plugin-istanbul": "^2.0.1", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-preset-es2015": "^6.3.13", + "babel-preset-es2017": "^6.22.0", + "babelify": "^8.0.0", + "benchmark": "^2.1.1", + "bluebird": "^3.4.6", + "browserify": "^16.2.2", + "chai": "^4.1.2", + "cheerio": "^0.22.0", + "coveralls": "^3.0.1", + "es6-promise": "^2.3.0", + "eslint": "^2.13.1", + "fs-extra": "^0.26.7", + "gh-pages-deploy": "^0.5.0", + "jsdoc": "^3.4.0", + "karma": "^2.0.2", + "karma-browserify": "^5.2.0", + "karma-firefox-launcher": "^1.1.0", + "karma-mocha": "^1.2.0", + "karma-mocha-reporter": "^2.2.0", + "mocha": "^5.2.0", + "native-promise-only": "^0.8.0-a", + "nyc": "^11.8.0", + "rimraf": "^2.5.0", + "rollup": "^0.36.3", + "rollup-plugin-node-resolve": "^2.0.0", + "rollup-plugin-npm": "^2.0.0", + "rsvp": "^3.0.18", + "semver": "^5.5.0", + "uglify-js": "~2.7.3", + "yargs": "^11.0.0" + }, + "scripts": { + "coverage": "nyc npm run mocha-node-test -- --grep @nycinvalid --invert", + "coveralls": "npm run coverage && nyc report --reporter=text-lcov | coveralls", + "jsdoc": "jsdoc -c ./support/jsdoc/jsdoc.json && node support/jsdoc/jsdoc-fix-html.js", + "lint": "eslint lib/ mocha_test/ perf/memory.js perf/suites.js perf/benchmark.js support/build/ support/*.js karma.conf.js", + "mocha-browser-test": "karma start", + "mocha-node-test": "mocha mocha_test/ --compilers js:babel-core/register", + "mocha-test": "npm run mocha-node-test && npm run mocha-browser-test", + "test": "npm run lint && npm run mocha-node-test" + }, + "license": "MIT", + "gh-pages-deploy": { + "staticpath": "docs" + }, + "nyc": { + "exclude": [ + "mocha_test" + ] + } +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/0f/35d2faa9c6c4078f50abc62c3ce01447d58f8d0b615509fb88f22afaca551c229e1a6bcf3e3f3b3167840475d5cf68af205e712e312d10434c36b9e9f60987 b/.pnpm-store/v11/files/0f/35d2faa9c6c4078f50abc62c3ce01447d58f8d0b615509fb88f22afaca551c229e1a6bcf3e3f3b3167840475d5cf68af205e712e312d10434c36b9e9f60987 new file mode 100644 index 00000000..6c8e6b1c --- /dev/null +++ b/.pnpm-store/v11/files/0f/35d2faa9c6c4078f50abc62c3ce01447d58f8d0b615509fb88f22afaca551c229e1a6bcf3e3f3b3167840475d5cf68af205e712e312d10434c36b9e9f60987 @@ -0,0 +1,86 @@ +{ + "name": "to-regex-range", + "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.", + "version": "2.1.1", + "homepage": "https://github.com/micromatch/to-regex-range", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "micromatch/to-regex-range", + "bugs": { + "url": "https://github.com/micromatch/to-regex-range/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "devDependencies": { + "fill-range": "^3.1.1", + "gulp-format-md": "^0.1.12", + "mocha": "^3.2.0", + "text-table": "^0.2.0", + "time-diff": "^0.3.1" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "date", + "expand", + "expansion", + "glob", + "match", + "matches", + "matching", + "number", + "numerical", + "range", + "ranges", + "regex", + "sequence", + "sh", + "to", + "year" + ], + "verb": { + "related": { + "list": [ + "expand-range", + "fill-range", + "micromatch", + "repeat-element", + "repeat-string" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "helpers": [ + "./examples.js" + ], + "reflinks": [ + "0-5", + "0-9", + "1-5", + "1-9" + ] + } +} diff --git a/.pnpm-store/v11/files/0f/42f1fbab011faa176600a72e39ec1123f30a782f802b3ed45802029601124570040c613638120d6bbb2422012830892d52bde803759733ce2979fc7a6fcbdc b/.pnpm-store/v11/files/0f/42f1fbab011faa176600a72e39ec1123f30a782f802b3ed45802029601124570040c613638120d6bbb2422012830892d52bde803759733ce2979fc7a6fcbdc new file mode 100644 index 00000000..54706c66 --- /dev/null +++ b/.pnpm-store/v11/files/0f/42f1fbab011faa176600a72e39ec1123f30a782f802b3ed45802029601124570040c613638120d6bbb2422012830892d52bde803759733ce2979fc7a6fcbdc @@ -0,0 +1,24 @@ +# This is the MIT license + +Copyright (c) 2013 Trent Mick. All rights reserved. +Copyright (c) 2013 Joyent Inc. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/.pnpm-store/v11/files/0f/4c64a0d79fabbbe0ec8878d7d05340a13b7d280182478c4a7584139852b041d9dc1790710d8f6f0676fb10523a2f1f12f88960382c04b65aee111d5171d799 b/.pnpm-store/v11/files/0f/4c64a0d79fabbbe0ec8878d7d05340a13b7d280182478c4a7584139852b041d9dc1790710d8f6f0676fb10523a2f1f12f88960382c04b65aee111d5171d799 new file mode 100644 index 00000000..ca221912 --- /dev/null +++ b/.pnpm-store/v11/files/0f/4c64a0d79fabbbe0ec8878d7d05340a13b7d280182478c4a7584139852b041d9dc1790710d8f6f0676fb10523a2f1f12f88960382c04b65aee111d5171d799 @@ -0,0 +1,7 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const suman_shell_1 = require("suman-shell"); +exports.run = function (projectRoot, sumanLibRoot, opts) { + const fn = suman_shell_1.startSumanShell(projectRoot, sumanLibRoot, opts || {}); + process.once('exit', fn); +}; diff --git a/.pnpm-store/v11/files/0f/58e2cb5acea9d0912bb6f383b7b060a76ea0150de44be95d98aba4c7dde8a69c7d8f149fb7905fd508d66e355eb0bab4fa07cae27820080ded59afdc50f670 b/.pnpm-store/v11/files/0f/58e2cb5acea9d0912bb6f383b7b060a76ea0150de44be95d98aba4c7dde8a69c7d8f149fb7905fd508d66e355eb0bab4fa07cae27820080ded59afdc50f670 new file mode 100644 index 00000000..ffcffdd4 --- /dev/null +++ b/.pnpm-store/v11/files/0f/58e2cb5acea9d0912bb6f383b7b060a76ea0150de44be95d98aba4c7dde8a69c7d8f149fb7905fd508d66e355eb0bab4fa07cae27820080ded59afdc50f670 @@ -0,0 +1,296 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const assert = require("assert"); +const pragmatik = require('pragmatik'); +const _suman = global.__suman = (global.__suman || {}); +exports.createSignature = pragmatik.signature({ + mode: 'strict', + allowExtraneousTrailingVars: false, + signatureDescription: '(s: string, opts?: Object, f: Array | Function)', + args: [ + { + type: 'string', + default: function () { + return '[suman-placeholder]'; + }, + required: false, + errorMessage: function (r) { + return 'First argument to describe/suite blocks must be a string description/title with a length greater than zero.\n' + + 'The signature is ' + r.signatureDescription; + }, + checks: [ + function (val, rule) { + assert(val.length > 0, rule.errorMessage); + } + ] + }, + { + type: 'object', + required: false, + errorMessage: function (r) { + return 'Options object should be an object and not an array.' + + 'The signature is ' + r.signatureDescription; + }, + default: function () { + return {}; + }, + checks: [ + function (val, rule) { + assert(typeof val === 'object' && !Array.isArray(val), rule.errorMessage + + ', instead we got => ' + util.inspect(val)); + } + ] + }, + { + type: 'array', + required: false, + errorMessage: function (r) { + return 'Callback function is required for describe/suite blocks.' + + 'The signature is ' + r.signatureDescription; + }, + postChecks: [ + function (index, values) { + if (values[index] && values[index + 1]) { + throw new Error(' => Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + }, + { + type: 'function', + required: false, + errorMessage: function (r) { + return 'Callback function is required for describe/suite blocks.' + + 'The signature is ' + r.signatureDescription; + }, + postChecks: [ + function (index, values) { + if (values[index] && values[index - 1]) { + throw new Error(' => Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + } + ] +}); +exports.blockSignature = pragmatik.signature({ + mode: 'strict', + allowExtraneousTrailingVars: false, + signatureDescription: '(s: string, opts?: Object, f: Array | Function)', + args: [ + { + type: 'string', + required: true, + errorMessage: function (r) { + return 'First argument to describe/suite blocks must be a string description/title with a length greater than zero.\n' + + 'The signature is ' + r.signatureDescription; + }, + checks: [ + function (val, rule) { + assert(val.length > 0, rule.errorMessage); + } + ] + }, + { + type: 'object', + required: false, + errorMessage: function (r) { + return 'Options object should be an object and not an array.' + + 'The signature is ' + r.signatureDescription; + }, + default: function () { + return {}; + }, + checks: [ + function (val, rule) { + assert(typeof val === 'object' && !Array.isArray(val), rule.errorMessage + + ', instead we got => ' + util.inspect(val)); + } + ] + }, + { + type: 'array', + required: false, + errorMessage: function (r) { + return 'Callback function is required for describe/suite blocks.' + + 'The signature is ' + r.signatureDescription; + }, + postChecks: [ + function (index, values) { + if (values[index] && values[index + 1]) { + throw new Error('Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + }, + { + type: 'function', + required: false, + errorMessage: function (r) { + return 'Callback function is required for describe/suite blocks.' + + 'The signature is ' + r.signatureDescription; + }, + postChecks: [ + function (index, values) { + if (values[index] && values[index - 1]) { + throw new Error('Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + } + ] +}); +exports.hookSignature = pragmatik.signature({ + mode: 'strict', + allowExtraneousTrailingVars: false, + signatureDescription: '(s: string, opts?: Object, f?: Function)', + args: [ + { + type: 'string', + required: false, + errorMessage: function (r) { + return 'First argument must be a string description/title for the hook with a length greater than zero.\n' + + 'Signature is => ' + r.signatureDescription; + }, + checks: [ + function (val, rule) { + assert(val.length > 0, rule.errorMessage); + } + ] + }, + { + type: 'object', + required: false, + errorMessage: function (r) { + return 'Options object should be an object and not an array ' + + '=> Signature for all hooks is => ' + r.signatureDescription; + }, + default: function () { + return {}; + }, + checks: [ + function (val) { + assert(typeof val === 'object' && !Array.isArray(val), 'Options object should be a plain {} object,' + + 'instead we got => ' + util.inspect(val)); + } + ] + }, + { + type: 'array', + required: false, + errorMessage: function (r) { + return 'Callback function is required for describe/suite blocks.' + + 'The signature is ' + r.signatureDescription; + }, + postChecks: [ + function (index, values) { + if (values[index] && values[index + 1]) { + throw new Error(' => Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + }, + { + type: 'function', + required: false, + errorMessage: function (r) { + return 'Callback function must be a function. ' + + 'Signature for all hooks is => ' + r.signatureDescription; + }, + checks: [ + function (val, rules, retArgs) { + if (typeof val !== 'function') { + assert(typeof retArgs[0] === 'string', 'For Suman hooks (before/after/beforeEach/afterEach), if you do not\n' + + 'provide a callback (hook is stubbed) then you must provide a string description as the first argument.'); + } + } + ], + postChecks: [ + function (index, values) { + if (values[index] && values[index - 1]) { + throw new Error(' => Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + } + ] +}); +exports.testCaseSignature = pragmatik.signature({ + mode: 'strict', + allowExtraneousTrailingVars: false, + signatureDescription: '(String s, [Object opts, Function f])', + args: [ + { + type: 'string', + required: true, + errorMessage: function (r) { + return 'First argument for test cases must be a string description/title, ' + + 'with a length greater than zero.\n' + + 'Signature for test cases is => ' + r.signatureDescription; + }, + checks: [ + function (val, rule) { + assert(val.length > 0, rule.errorMessage); + } + ] + }, + { + type: 'object', + required: false, + errorMessage: function (r) { + return 'Options object should be an object and not an array. ' + + 'Signature for test cases is => ' + r.signatureDescription; + }, + default: function () { + return {}; + }, + checks: [ + function (val) { + assert(typeof val === 'object' && !Array.isArray(val), 'Options object should be a plain {} object,' + + 'instead we got => ' + util.inspect(val)); + } + ] + }, + { + type: 'array', + required: false, + errorMessage: function (r) { + return 'Callback function is required for describe/suite blocks.' + + 'The signature is ' + r.signatureDescription; + }, + postChecks: [ + function (index, values) { + if (values[index] && values[index + 1]) { + throw new Error(' => Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + }, + { + type: 'function', + required: false, + errorMessage: function (r) { + return 'Callback function must be a function. ' + + 'Signature for test cases is => ' + r.signatureDescription; + }, + checks: [ + function (val, rules, retArgs) { + if (typeof val !== 'function') { + assert(typeof retArgs[0] === 'string', 'For Suman hooks (before/after/beforeEach/afterEach), if you do not\n' + + 'provide a callback (hook is stubbed) then you must provide a string description as the first argument.'); + } + } + ], + postChecks: [ + function (index, values) { + if (values[index] && values[index - 1]) { + throw new Error(' => Suman usage error => function and array were both passed; please choose only one.'); + } + } + ] + } + ] +}); diff --git a/.pnpm-store/v11/files/0f/5db761dd4115b5cb4ecea3d5478f6e23e39e27dc555ee5f23923a06faa7439bb150612b286648eb0a011f598f75ccf9a9c21272b78d31caa3062cda5813ea0 b/.pnpm-store/v11/files/0f/5db761dd4115b5cb4ecea3d5478f6e23e39e27dc555ee5f23923a06faa7439bb150612b286648eb0a011f598f75ccf9a9c21272b78d31caa3062cda5813ea0 new file mode 100644 index 00000000..27314ccb --- /dev/null +++ b/.pnpm-store/v11/files/0f/5db761dd4115b5cb4ecea3d5478f6e23e39e27dc555ee5f23923a06faa7439bb150612b286648eb0a011f598f75ccf9a9c21272b78d31caa3062cda5813ea0 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('parseInt', require('../parseInt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/0f/8a02377ec157545816f398484c606a402344dd460471250b70327f4573d859d31c8695a0c9fd05ad070893f3b2275be180a4117a78262fa58389e7d56c7fae b/.pnpm-store/v11/files/0f/8a02377ec157545816f398484c606a402344dd460471250b70327f4573d859d31c8695a0c9fd05ad070893f3b2275be180a4117a78262fa58389e7d56c7fae new file mode 100644 index 00000000..c9582f8f --- /dev/null +++ b/.pnpm-store/v11/files/0f/8a02377ec157545816f398484c606a402344dd460471250b70327f4573d859d31c8695a0c9fd05ad070893f3b2275be180a4117a78262fa58389e7d56c7fae @@ -0,0 +1,60 @@ +'use strict'; + +var isExtendable = require('is-extendable'); +var assignSymbols = require('assign-symbols'); + +module.exports = Object.assign || function(obj/*, objects*/) { + if (obj === null || typeof obj === 'undefined') { + throw new TypeError('Cannot convert undefined or null to object'); + } + if (!isObject(obj)) { + obj = {}; + } + for (var i = 1; i < arguments.length; i++) { + var val = arguments[i]; + if (isString(val)) { + val = toObject(val); + } + if (isObject(val)) { + assign(obj, val); + assignSymbols(obj, val); + } + } + return obj; +}; + +function assign(a, b) { + for (var key in b) { + if (hasOwn(b, key)) { + a[key] = b[key]; + } + } +} + +function isString(val) { + return (val && typeof val === 'string'); +} + +function toObject(str) { + var obj = {}; + for (var i in str) { + obj[i] = str[i]; + } + return obj; +} + +function isObject(val) { + return (val && typeof val === 'object') || isExtendable(val); +} + +/** + * Returns true if the given `key` is an own property of `obj`. + */ + +function hasOwn(obj, key) { + return Object.prototype.hasOwnProperty.call(obj, key); +} + +function isEnum(obj, key) { + return Object.prototype.propertyIsEnumerable.call(obj, key); +} diff --git a/.pnpm-store/v11/files/0f/916560b4752eec25b955a0eaeb1a3383551b4ef0a6a12c34b03257e3b0ee6cf873cc99cd57947d4816440ae69d9dcf6696949beddc632aa80d5b72463ba737 b/.pnpm-store/v11/files/0f/916560b4752eec25b955a0eaeb1a3383551b4ef0a6a12c34b03257e3b0ee6cf873cc99cd57947d4816440ae69d9dcf6696949beddc632aa80d5b72463ba737 new file mode 100644 index 00000000..ad9a01cb --- /dev/null +++ b/.pnpm-store/v11/files/0f/916560b4752eec25b955a0eaeb1a3383551b4ef0a6a12c34b03257e3b0ee6cf873cc99cd57947d4816440ae69d9dcf6696949beddc632aa80d5b72463ba737 @@ -0,0 +1,234 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var process = require('suman-browser-polyfills/modules/process'); +var global = require('suman-browser-polyfills/modules/global'); +var util = require("util"); +var assert = require("assert"); +var path = require("path"); +var cp = require("child_process"); +var logging_1 = require("./logging"); +var su = require("suman-utils"); +var chokidar = require("chokidar"); +var chalk = require("chalk"); +var prepend_transform_1 = require("prepend-transform"); +var utils_1 = require("./utils"); +var alwaysIgnore = utils_1.default.getAlwaysIgnore(); +var totallyKillProcess = function (proc, timeout) { + proc.kill('SIGINT'); + proc.unref(); + proc.removeAllListeners(); + proc.stdout && proc.stdout.removeAllListeners(); + proc.stderr && proc.stderr.removeAllListeners(); + proc.stdin && proc.stdin.removeAllListeners(); + setTimeout(function () { + proc.kill('SIGKILL'); + }, timeout || 3000); +}; +exports.makeRun = function (projectRoot, paths, sumanOpts) { + return function run($sumanConfig, isRunNow, cb) { + var _a = utils_1.default.getWatchObj(projectRoot, sumanOpts, $sumanConfig), watchObj = _a.watchObj, sumanConfig = _a.sumanConfig; + var plugin; + assert(su.isObject(watchObj.plugin), 'watch object plugin value is not an object.'); + if (watchObj.plugin.isSumanWatchPluginModule) { + plugin = watchObj.plugin.value; + } + else if (watchObj.plugin.isSumanWatchPluginValue) { + plugin = watchObj.plugin; + } + else { + throw new Error('watch object "plugin" value does not adhere to the expected interface => ' + util.inspect(watchObj)); + } + var pluginName = plugin.pluginName || 'unknown-watch-plugin'; + var stdoutStartTranspileRegex = plugin.stdoutStartTranspileRegex; + var stdoutEndTranspileRegex = plugin.stdoutEndTranspileRegex; + var pluginEnv = plugin.pluginEnv || {}; + assert(su.isObject(pluginEnv), '"env" property on plugin must be a plain object.'); + var testEnv = watchObj.env || {}; + assert(su.isObject(testEnv), '"env" property on watch object must be a plain object.'); + var execTests = watchObj.exec || plugin.execTests; + var pluginExec = plugin.pluginExec; + assert(su.isStringWithPositiveLn(execTests), '"execTests" property on plugin value must be a string with length greater than zero;\n' + + 'if no "execTests" property is used on the pluging, an "exec" property must be defined on the watch per object.'); + assert(su.isStringWithPositiveLn(pluginExec), '"execTransform" property on plugin object value must be a string with length greater than zero.'); + assert(stdoutStartTranspileRegex, '"stdoutStartTranspileRegex" property needs to be defined as a String or RegExp.'); + assert(stdoutEndTranspileRegex, '"stdoutEndTranspileRegex" property needs to be defined as a String or RegExp.'); + var details = { + exitOk: false + }; + var createWatcherPluginProcess = function () { + var k = cp.spawn('bash', [], { + cwd: plugin.pluginCwd || process.cwd(), + env: Object.assign({}, process.env, pluginEnv, { + SUMAN_WATCH_PLUGIN_RUN: 'yes' + }) + }); + cb && k.once('error', cb); + k.stdout.pipe(prepend_transform_1.default(chalk.grey(" [" + pluginName + "-worker] "))).pipe(process.stdout); + k.stderr.pipe(prepend_transform_1.default(chalk.yellow.bold(" [" + pluginName + "-worker] "), { omitWhitespace: true })).pipe(process.stderr); + setImmediate(function () { + k.stdin.end('\n' + pluginExec + '\n'); + }); + k.once('exit', function () { + if (!details.exitOk) { + logging_1.log.warning('watcher process exitted (perhaps unexpectedly), to restart watch process, send "rs" to stdin.'); + } + }); + return k; + }; + var watcherPluginProcess = { + k: createWatcherPluginProcess() + }; + var testProcessWorker = { + k: null + }; + var killTestProcess = function () { + if (testProcessWorker.k) { + logging_1.log.warning('killing currently running test(s).'); + totallyKillProcess(testProcessWorker.k); + } + }; + var firstListener = true; + var startTestProcess = function () { + var testProcess = testProcessWorker.k = cp.spawn('bash', [], { + env: Object.assign({}, process.env, testEnv, { + SUMAN_WATCH_TEST_RUN: 'yes' + }) + }); + setImmediate(function () { + testProcess.stdin.end('\n' + execTests + '\n'); + }); + testProcess.stdout.pipe(prepend_transform_1.default(chalk.grey(" [suman-watch-test-process] "))).pipe(process.stdout); + testProcess.stderr.pipe(prepend_transform_1.default(chalk.yellow.bold(" [suman-watch-test-process] "), { omitWhitespace: true })).pipe(process.stderr); + testProcess.once('exit', function (code, signal) { + if (Number.isInteger(code)) { + if (code > 0) { + logging_1.log.error('test process exited with code ', code); + } + else { + logging_1.log.veryGood('test process exited with code', code); + } + } + else if ((signal = String(signal).trim())) { + logging_1.log.warning('test process was killed by signal', signal); + } + else { + logging_1.log.warning('test process was killed with unknown exit code and signal.'); + } + if (firstListener) { + firstListener = false; + logging_1.log.info(chalk.bold('now listening for "rs" or "rr" commands via stdin.')); + process.stdin.on('data', onStdinData); + } + }); + }; + var firstBadStdin = true; + var onStdinData = function (d) { + if (String(d).trim() === 'rr') { + logging_1.log.info('"rr" command received: re-running test execution.'); + runNewTestProcess(); + } + else if (String(d).trim() === 'rs') { + logging_1.log.info('"rs" (restart) command received: will restart watching process.'); + restartWatcher('user restarted the process with "rs" stdin command.'); + } + else if (String(d).trim() === '') { + if (firstBadStdin) { + firstBadStdin = false; + logging_1.log.warning('stdin command not recognized => ' + + 'try "rs" to restart the watcher process, or "rr" to re-run the most recently executed test.'); + } + } + else { + logging_1.log.warning('stdin command not recognized => ' + + 'try "rs" to restart the watcher process, or "rr" to re-run the most recently executed test.'); + } + }; + var restartPluginWatcherThrottleTimeout; + var restartPluginWatcherThrottle = function (reason) { + clearTimeout(restartPluginWatcherThrottleTimeout); + restartPluginWatcherThrottleTimeout = setTimeout(function () { + restartWatcher(reason); + }, 1000); + }; + var restartWatcher = function (reason) { + try { + process.stdin.removeListener('data', onStdinData); + } + catch (err) { + logging_1.log.warning(err.message); + } + if (chokidarWatcher) { + chokidarWatcher.close(); + chokidarWatcher.removeAllListeners(); + } + clearTimeout(restartPluginWatcherThrottleTimeout); + logging_1.log.warning('restarting watch-per process' + (reason || '.')); + if (watcherPluginProcess.k) { + logging_1.log.warning('killing current watch plugin process.'); + totallyKillProcess(watcherPluginProcess.k, 1000); + } + setImmediate(run, null, false, null); + }; + var runNewTestProcess = function () { + logging_1.log.veryGood(chalk.green.bold("Now running test process using: ") + (chalk.bgBlack("'" + chalk.white.bold(execTests) + "'") + ".")); + killTestProcess(); + startTestProcess(); + }; + if (isRunNow) { + runNewTestProcess(); + } + var watcherStdio = { + stdout: '', + stderr: '' + }; + watcherPluginProcess.k.stderr.once('data', function (p) { + cb && cb(String(p)); + }); + watcherPluginProcess.k.stdout.on('data', function (p) { + cb && cb(null); + watcherStdio.stdout += String(p); + if (stdoutEndTranspileRegex.test(watcherStdio.stdout)) { + watcherStdio.stdout = ''; + logging_1.log.veryGood(chalk.bold('running a new test process: stdout from watch worker has indicated compilation has finished.')); + runNewTestProcess(); + return; + } + if (stdoutStartTranspileRegex.test(watcherStdio.stdout)) { + watcherStdio.stdout = ''; + logging_1.log.warning(chalk.yellow('killing any currently running test process, since we have received stdout matching a new compilation phase.')); + killTestProcess(); + } + }); + var chokidarWatcher = chokidar.watch('**/*.js', { + cwd: projectRoot, + persistent: true, + ignoreInitial: true, + ignored: /(\.log$|\/.idea\/|\/node_modules\/suman\/)/ + }); + chokidarWatcher.on('error', function (e) { + logging_1.log.error('suman-watch watcher experienced an error', e.stack || e); + }); + chokidarWatcher.once('ready', function () { + logging_1.log.veryGood('watcher is ready.'); + var watchCount = 0; + var watched = chokidarWatcher.getWatched(); + Object.keys(watched).forEach(function (k) { + var ln = watched[k].length; + watchCount += ln; + }); + logging_1.log.veryGood('total number of files being watched by suman-watch process ', watchCount); + }); + chokidarWatcher.on('change', function (p) { + logging_1.log.good('change event, file path => ', chalk.gray(p)); + if (path.basename(p) === 'suman.conf.js') { + restartPluginWatcherThrottle('suman.conf.js file changed.'); + } + }); + chokidarWatcher.on('add', function (file) { + logging_1.log.info('file was added: ' + chalk.gray(file)); + }); + chokidarWatcher.on('unlink', function (file) { + logging_1.log.info('file was unlinked: ' + chalk.gray(file)); + }); + }; +}; diff --git a/.pnpm-store/v11/files/0f/d526b80c0994ef6a2a24577433f422e6d82bc2637e8c4a2727f4473f23912a7ce6d21ea422d01b8826bf3f4f0786487885be72e2e28483595fabaccddffadd b/.pnpm-store/v11/files/0f/d526b80c0994ef6a2a24577433f422e6d82bc2637e8c4a2727f4473f23912a7ce6d21ea422d01b8826bf3f4f0786487885be72e2e28483595fabaccddffadd new file mode 100644 index 00000000..24643cc3 --- /dev/null +++ b/.pnpm-store/v11/files/0f/d526b80c0994ef6a2a24577433f422e6d82bc2637e8c4a2727f4473f23912a7ce6d21ea422d01b8826bf3f4f0786487885be72e2e28483595fabaccddffadd @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.pnpm-store/v11/files/0f/d580cbb91820971d4e271b91fc656fee7b0a471685332e674d3bd2c97796165409785ea23b69ba15935cef86c4d80f3e59f8c9c6d0a20754f94f2452832b8e b/.pnpm-store/v11/files/0f/d580cbb91820971d4e271b91fc656fee7b0a471685332e674d3bd2c97796165409785ea23b69ba15935cef86c4d80f3e59f8c9c6d0a20754f94f2452832b8e new file mode 100644 index 00000000..4084f78c --- /dev/null +++ b/.pnpm-store/v11/files/0f/d580cbb91820971d4e271b91fc656fee7b0a471685332e674d3bd2c97796165409785ea23b69ba15935cef86c4d80f3e59f8c9c6d0a20754f94f2452832b8e @@ -0,0 +1,87 @@ +{ + "name": "check-error", + "description": "Error comparison and information related utility for node and the browser", + "keywords": [ + "check-error", + "error", + "chai util" + ], + "license": "MIT", + "author": "Jake Luer (http://alogicalparadox.com)", + "contributors": [ + "David Losert (https://github.com/davelosert)", + "Keith Cirkel (https://github.com/keithamus)", + "Miroslav Bajtoš (https://github.com/bajtos)", + "Lucas Fernandes da Costa (https://github.com/lucasfcosta)" + ], + "files": [ + "index.js", + "check-error.js" + ], + "main": "./index.js", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/chaijs/check-error.git" + }, + "scripts": { + "build": "browserify --bare $npm_package_main --standalone checkError -o check-error.js", + "lint": "eslint --ignore-path .gitignore .", + "prepublish": "npm run build", + "semantic-release": "semantic-release pre && npm publish && semantic-release post", + "pretest": "npm run lint", + "test": "npm run test:node && npm run test:browser && npm run upload-coverage", + "test:browser": "karma start --singleRun=true", + "test:node": "istanbul cover _mocha", + "upload-coverage": "lcov-result-merger 'coverage/**/lcov.info' | coveralls; exit 0" + }, + "config": { + "ghooks": { + "commit-msg": "validate-commit-msg" + } + }, + "eslintConfig": { + "extends": [ + "strict/es5" + ], + "env": { + "es6": true + }, + "globals": { + "HTMLElement": false + }, + "rules": { + "complexity": 0, + "max-statements": 0 + } + }, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "devDependencies": { + "browserify": "^13.0.0", + "browserify-istanbul": "^1.0.0", + "coveralls": "2.11.9", + "eslint": "^2.4.0", + "eslint-config-strict": "^8.5.0", + "eslint-plugin-filenames": "^0.2.0", + "ghooks": "^1.0.1", + "istanbul": "^0.4.2", + "karma": "^0.13.22", + "karma-browserify": "^5.0.2", + "karma-coverage": "^0.5.5", + "karma-mocha": "^0.2.2", + "karma-phantomjs-launcher": "^1.0.0", + "karma-sauce-launcher": "^0.3.1", + "lcov-result-merger": "^1.0.2", + "mocha": "^2.4.5", + "phantomjs-prebuilt": "^2.1.5", + "semantic-release": "^4.3.5", + "simple-assert": "^1.0.0", + "travis-after-all": "^1.4.4", + "validate-commit-msg": "^2.3.1" + }, + "engines": { + "node": "*" + }, + "version": "1.0.3" +} diff --git a/.pnpm-store/v11/files/0f/e512c87b06fd755b101e6965fa3463831b27b359961e5191abb86fe7cc0a8643e1d0923c768a81138f5616cf63d20433f6f8f33a4d9f4fa6a8fd77dcf0cd79 b/.pnpm-store/v11/files/0f/e512c87b06fd755b101e6965fa3463831b27b359961e5191abb86fe7cc0a8643e1d0923c768a81138f5616cf63d20433f6f8f33a4d9f4fa6a8fd77dcf0cd79 new file mode 100644 index 00000000..b40e05a6 --- /dev/null +++ b/.pnpm-store/v11/files/0f/e512c87b06fd755b101e6965fa3463831b27b359961e5191abb86fe7cc0a8643e1d0923c768a81138f5616cf63d20433f6f8f33a4d9f4fa6a8fd77dcf0cd79 @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionHelp + * + * Support action for printing help + * This class inherided from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../action'); + +// Constants +var c = require('../const'); + +/*:nodoc:* + * new ActionHelp(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionHelp = module.exports = function ActionHelp(options) { + options = options || {}; + if (options.defaultValue !== null) { + options.defaultValue = options.defaultValue; + } else { + options.defaultValue = c.SUPPRESS; + } + options.dest = (options.dest !== null ? options.dest : c.SUPPRESS); + options.nargs = 0; + Action.call(this, options); + +}; +util.inherits(ActionHelp, Action); + +/*:nodoc:* + * ActionHelp#call(parser, namespace, values, optionString) + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Print help and exit + **/ +ActionHelp.prototype.call = function (parser) { + parser.printHelp(); + parser.exit(); +}; diff --git a/.pnpm-store/v11/files/0f/ec5562ab941907c4e0a0350c48002592a19ddddf579ac78029cfebda2e7cc222f4ba4b45113ea660ef7f449055de9813e7fa5317810f54218a9d5886d04e0c b/.pnpm-store/v11/files/0f/ec5562ab941907c4e0a0350c48002592a19ddddf579ac78029cfebda2e7cc222f4ba4b45113ea660ef7f449055de9813e7fa5317810f54218a9d5886d04e0c new file mode 100644 index 00000000..7524520b --- /dev/null +++ b/.pnpm-store/v11/files/0f/ec5562ab941907c4e0a0350c48002592a19ddddf579ac78029cfebda2e7cc222f4ba4b45113ea660ef7f449055de9813e7fa5317810f54218a9d5886d04e0c @@ -0,0 +1,56 @@ +'use strict'; + +/** + * Parse the content of a passwd file into a list of user objects. + * This function ignores blank lines and comments. + * + * ```js + * // assuming '/etc/passwd' contains: + * // doowb:*:123:123:Brian Woodward:/Users/doowb:/bin/bash + * console.log(parse(fs.readFileSync('/etc/passwd', 'utf8'))); + * + * //=> [ + * //=> { + * //=> username: 'doowb', + * //=> password: '*', + * //=> uid: '123', + * //=> gid: '123', + * //=> gecos: 'Brian Woodward', + * //=> homedir: '/Users/doowb', + * //=> shell: '/bin/bash' + * //=> } + * //=> ] + * ``` + * @param {String} `content` Content of a passwd file to parse. + * @return {Array} Array of user objects parsed from the content. + * @api public + */ + +module.exports = function(content) { + if (typeof content !== 'string') { + throw new Error('expected a string'); + } + return content + .split('\n') + .map(user) + .filter(Boolean); +}; + +function user(line, i) { + if (!line || !line.length || line.charAt(0) === '#') { + return null; + } + + // see https://en.wikipedia.org/wiki/Passwd for field descriptions + var fields = line.split(':'); + return { + username: fields[0], + password: fields[1], + uid: fields[2], + gid: fields[3], + // see https://en.wikipedia.org/wiki/Gecos_field for GECOS field descriptions + gecos: fields[4], + homedir: fields[5], + shell: fields[6] + }; +} diff --git a/.pnpm-store/v11/files/10/07393af9a86436ef67049bd1cddfc85799a7ccff6583b5e8810672f7c6a1f90e5c36b9765ec9663ab62ffba1a617e9a33284a0727463ed0f94b0520519e247 b/.pnpm-store/v11/files/10/07393af9a86436ef67049bd1cddfc85799a7ccff6583b5e8810672f7c6a1f90e5c36b9765ec9663ab62ffba1a617e9a33284a0727463ed0f94b0520519e247 new file mode 100644 index 00000000..fcd2bf35 --- /dev/null +++ b/.pnpm-store/v11/files/10/07393af9a86436ef67049bd1cddfc85799a7ccff6583b5e8810672f7c6a1f90e5c36b9765ec9663ab62ffba1a617e9a33284a0727463ed0f94b0520519e247 @@ -0,0 +1 @@ +export declare const determineIfReadlinkAvail: (pkgDotJSON: Object, projectRoot: string) => (cb: Function) => void; diff --git a/.pnpm-store/v11/files/10/0b2e1c2188d92f386d940c2c64229d09bd7ffbe02068882ecf183ebd22f0e5e29ecc44e5d9fcbffd03730d841e96cc9de18bc22a53c70631aba2d94925d5fe b/.pnpm-store/v11/files/10/0b2e1c2188d92f386d940c2c64229d09bd7ffbe02068882ecf183ebd22f0e5e29ecc44e5d9fcbffd03730d841e96cc9de18bc22a53c70631aba2d94925d5fe new file mode 100644 index 00000000..0f644eea --- /dev/null +++ b/.pnpm-store/v11/files/10/0b2e1c2188d92f386d940c2c64229d09bd7ffbe02068882ecf183ebd22f0e5e29ecc44e5d9fcbffd03730d841e96cc9de18bc22a53c70631aba2d94925d5fe @@ -0,0 +1,19 @@ +var Set = require('./_Set'), + noop = require('./noop'), + setToArray = require('./_setToArray'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ +var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { + return new Set(values); +}; + +module.exports = createSet; diff --git a/.pnpm-store/v11/files/10/1eaf2530adf99631c1489c2fb57bb5c7cc96abba51b04c713157c4b63df8f2441e55070e5e273c9146b157aa12282165078521e3cba2432b1e345c64206394 b/.pnpm-store/v11/files/10/1eaf2530adf99631c1489c2fb57bb5c7cc96abba51b04c713157c4b63df8f2441e55070e5e273c9146b157aa12282165078521e3cba2432b1e345c64206394 new file mode 100644 index 00000000..48f74534 --- /dev/null +++ b/.pnpm-store/v11/files/10/1eaf2530adf99631c1489c2fb57bb5c7cc96abba51b04c713157c4b63df8f2441e55070e5e273c9146b157aa12282165078521e3cba2432b1e345c64206394 @@ -0,0 +1,76 @@ +# object.pick [![NPM version](https://img.shields.io/npm/v/object.pick.svg?style=flat)](https://www.npmjs.com/package/object.pick) [![NPM monthly downloads](https://img.shields.io/npm/dm/object.pick.svg?style=flat)](https://npmjs.org/package/object.pick) [![NPM total downloads](https://img.shields.io/npm/dt/object.pick.svg?style=flat)](https://npmjs.org/package/object.pick) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object.pick.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object.pick) + +> Returns a filtered copy of an object with only the specified keys, similar to `_.pick` from lodash / underscore. + +You might also be interested in [object.omit](https://github.com/jonschlinkert/object.omit). + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save object.pick +``` + +## benchmarks + +This is the [fastest implementation](http://jsperf.com/pick-props) I tested. Pull requests welcome! + +## Usage + +```js +var pick = require('object.pick'); + +pick({a: 'a', b: 'b'}, 'a') +//=> {a: 'a'} + +pick({a: 'a', b: 'b', c: 'c'}, ['a', 'b']) +//=> {a: 'a', b: 'b'} +``` + +## About + +### Related projects + +* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") +* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.") +* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.") +* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/object.pick/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 27, 2016._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/10/1fb903bf6a6527ab23f320d6b475d4b1ec8b5a4e66b8eb67bbda535d1492df62f448fc954424ac2c5ab1a1c96b017b6a77b714b9dab8c8104f45e23190bb87 b/.pnpm-store/v11/files/10/1fb903bf6a6527ab23f320d6b475d4b1ec8b5a4e66b8eb67bbda535d1492df62f448fc954424ac2c5ab1a1c96b017b6a77b714b9dab8c8104f45e23190bb87 new file mode 100644 index 00000000..2b72da7c --- /dev/null +++ b/.pnpm-store/v11/files/10/1fb903bf6a6527ab23f320d6b475d4b1ec8b5a4e66b8eb67bbda535d1492df62f448fc954424ac2c5ab1a1c96b017b6a77b714b9dab8c8104f45e23190bb87 @@ -0,0 +1,25 @@ +var arrayShuffle = require('./_arrayShuffle'), + baseShuffle = require('./_baseShuffle'), + isArray = require('./isArray'); + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); +} + +module.exports = shuffle; diff --git a/.pnpm-store/v11/files/10/353884dac057e04fb2ad446d7187cb20992fc793f2292704371fa9048eb0be18e3dee0678af84cb1fbb7e8de95a1ecce510d9c6e8be339083cb5f7d70ab7f1 b/.pnpm-store/v11/files/10/353884dac057e04fb2ad446d7187cb20992fc793f2292704371fa9048eb0be18e3dee0678af84cb1fbb7e8de95a1ecce510d9c6e8be339083cb5f7d70ab7f1 new file mode 100644 index 00000000..58f3f447 --- /dev/null +++ b/.pnpm-store/v11/files/10/353884dac057e04fb2ad446d7187cb20992fc793f2292704371fa9048eb0be18e3dee0678af84cb1fbb7e8de95a1ecce510d9c6e8be339083cb5f7d70ab7f1 @@ -0,0 +1,22 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function baseSome(collection, predicate) { + var result; + + baseEach(collection, function(value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; +} + +module.exports = baseSome; diff --git a/.pnpm-store/v11/files/10/39c87a521b145dee41cca0262dc8cba7b86d63bcb1d8b2a6dc55b98ae270d13fbfb388b06b7b7545b5598897cd9017f3f12e16b7b03a6f44440edaff08a66b b/.pnpm-store/v11/files/10/39c87a521b145dee41cca0262dc8cba7b86d63bcb1d8b2a6dc55b98ae270d13fbfb388b06b7b7545b5598897cd9017f3f12e16b7b03a6f44440edaff08a66b new file mode 100644 index 00000000..c919b3f2 --- /dev/null +++ b/.pnpm-store/v11/files/10/39c87a521b145dee41cca0262dc8cba7b86d63bcb1d8b2a6dc55b98ae270d13fbfb388b06b7b7545b5598897cd9017f3f12e16b7b03a6f44440edaff08a66b @@ -0,0 +1,28 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// + +interface SymbolConstructor { + readonly metadata: unique symbol; +} + +interface Function { + [Symbol.metadata]: DecoratorMetadata | null; +} diff --git a/.pnpm-store/v11/files/10/3ca19b6a14bbec9ba06a6eb05e824ba43850b2e2bc5854a4f4de68e4cc6c38c7a38d65037b897a80ccabd346429ef54e4c839302d430b6fe4f9f4d08ecfb6d b/.pnpm-store/v11/files/10/3ca19b6a14bbec9ba06a6eb05e824ba43850b2e2bc5854a4f4de68e4cc6c38c7a38d65037b897a80ccabd346429ef54e4c839302d430b6fe4f9f4d08ecfb6d new file mode 100644 index 00000000..29d1e1e4 --- /dev/null +++ b/.pnpm-store/v11/files/10/3ca19b6a14bbec9ba06a6eb05e824ba43850b2e2bc5854a4f4de68e4cc6c38c7a38d65037b897a80ccabd346429ef54e4c839302d430b6fe4f9f4d08ecfb6d @@ -0,0 +1 @@ +module.exports = require('./isMatch'); diff --git a/.pnpm-store/v11/files/10/418495468127fe292f1d03e09520d3fd4be644e5cda8937453907d1f03c4e99e9b875b8850258a0472f914218dbf0090f1d64d47d56d1823eea5d7bd26d89f b/.pnpm-store/v11/files/10/418495468127fe292f1d03e09520d3fd4be644e5cda8937453907d1f03c4e99e9b875b8850258a0472f914218dbf0090f1d64d47d56d1823eea5d7bd26d89f new file mode 100644 index 00000000..ae7c271e --- /dev/null +++ b/.pnpm-store/v11/files/10/418495468127fe292f1d03e09520d3fd4be644e5cda8937453907d1f03c4e99e9b875b8850258a0472f914218dbf0090f1d64d47d56d1823eea5d7bd26d89f @@ -0,0 +1,37 @@ +var arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + basePickBy = require('./_basePickBy'), + getAllKeysIn = require('./_getAllKeysIn'); + +/** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ +function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function(prop) { + return [prop]; + }); + predicate = baseIteratee(predicate); + return basePickBy(object, props, function(value, path) { + return predicate(value, path[0]); + }); +} + +module.exports = pickBy; diff --git a/.pnpm-store/v11/files/10/52bdbcc06df0265f2b33ae91692acf48a7d98dea81f222df8eebda928c9cc504083b45caae3d3f50a6a4f2032bbf52116843fdf7a8ee15aaa583565ee706e9 b/.pnpm-store/v11/files/10/52bdbcc06df0265f2b33ae91692acf48a7d98dea81f222df8eebda928c9cc504083b45caae3d3f50a6a4f2032bbf52116843fdf7a8ee15aaa583565ee706e9 new file mode 100644 index 00000000..24197b7b --- /dev/null +++ b/.pnpm-store/v11/files/10/52bdbcc06df0265f2b33ae91692acf48a7d98dea81f222df8eebda928c9cc504083b45caae3d3f50a6a4f2032bbf52116843fdf7a8ee15aaa583565ee706e9 @@ -0,0 +1,49 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const assert = require("assert"); +const cp = require("child_process"); +const util = require("util"); +const su = require("suman-utils"); +const chalk = require("chalk"); +const prepend_transform_1 = require("prepend-transform"); +const _suman = global.__suman = (global.__suman || {}); +exports.run = function (sumanConfig, opts) { + const k = cp.spawn('bash'); + const scriptKey = opts.script; + assert(su.isStringWithPositiveLn(scriptKey), 'script key must be a string.'); + let scriptValue; + try { + scriptValue = sumanConfig['scripts'][scriptKey]; + assert(su.isStringWithPositiveLn(scriptValue), `script value must be a string with positive length, instead we got <${util.inspect(scriptValue)}>.`); + } + catch (err) { + if (sumanConfig['scripts']) { + _suman.log.info('Here are the available scripts in your suman.conf.js file:'); + _suman.log.info(util.inspect(sumanConfig['scripts'])); + } + throw err; + } + k.stdin.setDefaultEncoding('utf8'); + k.stdout.setEncoding('utf8'); + k.stderr.setEncoding('utf8'); + console.log('\n'); + _suman.log.info(`Your script with key '${chalk.magenta(scriptKey)}' is now running, and its output follows:\n`); + k.stdout.pipe(prepend_transform_1.pt(chalk.blue(' [suman script stdout]: '))).pipe(process.stdout); + k.stderr.pipe(prepend_transform_1.pt(chalk.red(' [suman script stderr]: '))).pipe(process.stderr); + k.stdin.write('\n'); + k.stdin.write(scriptValue); + k.stdin.end('\n'); + k.once('exit', function (code) { + console.log('\n'); + console.error('\n'); + if (code > 0) { + _suman.log.error(`script with key '${scriptKey}' exited with code ${code}`); + } + else { + _suman.log.info(`script with key '${scriptKey}' exited with code ${code}`); + } + process.exit(code); + }); +}; diff --git a/.pnpm-store/v11/files/10/642650707951873aa1447ce78a7cbbfdb71e886ac28a4e2af32b0b6a35b9f0f66b6c2f61a839d1459b86dc12613b0c4569ecc21c269349a7947a631ee2c5f9 b/.pnpm-store/v11/files/10/642650707951873aa1447ce78a7cbbfdb71e886ac28a4e2af32b0b6a35b9f0f66b6c2f61a839d1459b86dc12613b0c4569ecc21c269349a7947a631ee2c5f9 new file mode 100644 index 00000000..479a5f6e --- /dev/null +++ b/.pnpm-store/v11/files/10/642650707951873aa1447ce78a7cbbfdb71e886ac28a4e2af32b0b6a35b9f0f66b6c2f61a839d1459b86dc12613b0c4569ecc21c269349a7947a631ee2c5f9 @@ -0,0 +1,17 @@ +module.exports = (function (global) { + var uint32 = 'Uint32Array' in global + var crypto = global.crypto || global.msCrypto + var rando = crypto && typeof crypto.getRandomValues === 'function' + var good = uint32 && rando + if (!good) return Math.random + + var arr = new Uint32Array(1) + var max = Math.pow(2, 32) + function random () { + crypto.getRandomValues(arr) + return arr[0] / max + } + + random.cryptographic = true + return random +})(typeof self !== 'undefined' ? self : window) diff --git a/.pnpm-store/v11/files/10/7785acc6283094d0b8e7961466f548317d4f70e8b5bc968e02ab25d13e1f06bad5f50f5774c2fb74e6b3cb8c3a38d48d5c501da31607f64d05bfd4af9e04ac b/.pnpm-store/v11/files/10/7785acc6283094d0b8e7961466f548317d4f70e8b5bc968e02ab25d13e1f06bad5f50f5774c2fb74e6b3cb8c3a38d48d5c501da31607f64d05bfd4af9e04ac new file mode 100644 index 00000000..1e003040 --- /dev/null +++ b/.pnpm-store/v11/files/10/7785acc6283094d0b8e7961466f548317d4f70e8b5bc968e02ab25d13e1f06bad5f50f5774c2fb74e6b3cb8c3a38d48d5c501da31607f64d05bfd4af9e04ac @@ -0,0 +1,94 @@ +import { createFrame, extend, toString } from './utils'; +import Exception from './exception'; +import { registerDefaultHelpers } from './helpers'; +import { registerDefaultDecorators } from './decorators'; +import logger from './logger'; +import { resetLoggedProperties } from './internal/proto-access'; + +export const VERSION = '4.7.9'; +export const COMPILER_REVISION = 8; +export const LAST_COMPATIBLE_COMPILER_REVISION = 7; + +export const REVISION_CHANGES = { + 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it + 2: '== 1.0.0-rc.3', + 3: '== 1.0.0-rc.4', + 4: '== 1.x.x', + 5: '== 2.0.0-alpha.x', + 6: '>= 2.0.0-beta.1', + 7: '>= 4.0.0 <4.3.0', + 8: '>= 4.3.0' +}; + +const objectType = '[object Object]'; + +export function HandlebarsEnvironment(helpers, partials, decorators) { + this.helpers = helpers || {}; + this.partials = partials || {}; + this.decorators = decorators || {}; + + registerDefaultHelpers(this); + registerDefaultDecorators(this); +} + +HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: logger, + log: logger.log, + + registerHelper: function(name, fn) { + if (toString.call(name) === objectType) { + if (fn) { + throw new Exception('Arg not supported with multiple helpers'); + } + extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function(name) { + delete this.helpers[name]; + }, + + registerPartial: function(name, partial) { + if (toString.call(name) === objectType) { + extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new Exception( + `Attempting to register a partial called "${name}" as undefined` + ); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function(name) { + delete this.partials[name]; + }, + + registerDecorator: function(name, fn) { + if (toString.call(name) === objectType) { + if (fn) { + throw new Exception('Arg not supported with multiple decorators'); + } + extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function(name) { + delete this.decorators[name]; + }, + /** + * Reset the memory of illegal property accesses that have already been logged. + * @deprecated should only be used in handlebars test-cases + */ + resetLoggedPropertyAccesses() { + resetLoggedProperties(); + } +}; + +export let log = logger.log; + +export { createFrame, logger }; diff --git a/.pnpm-store/v11/files/10/7ac75f6f02ae2c2592d4806681262e9a22104279ad0c08dbadf6cdf642d1b7c96c7667e83fe2344463318db10156cb4e2692eb1433f603161056dac1e64ada b/.pnpm-store/v11/files/10/7ac75f6f02ae2c2592d4806681262e9a22104279ad0c08dbadf6cdf642d1b7c96c7667e83fe2344463318db10156cb4e2692eb1433f603161056dac1e64ada new file mode 100644 index 00000000..f1f9c8ff --- /dev/null +++ b/.pnpm-store/v11/files/10/7ac75f6f02ae2c2592d4806681262e9a22104279ad0c08dbadf6cdf642d1b7c96c7667e83fe2344463318db10156cb4e2692eb1433f603161056dac1e64ada @@ -0,0 +1,151 @@ +/* +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ + +'use strict'; + +var os = require('os'); +var hasFlag = require('./has-flag.js'); + +var env = process.env; + +var forceColor = void 0; +if (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true') + || hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 + || parseInt(env.FORCE_COLOR, 10) !== 0; +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level: level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3, + }; +} + +function supportsColor(stream) { + if (forceColor === false) { + return 0; + } + + if (hasFlag('color=16m') || hasFlag('color=full') + || hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (stream && !stream.isTTY && forceColor !== true) { + return 0; + } + + var min = forceColor ? 1 : 0; + + if (process.platform === 'win32') { + // Node.js 7.5.0 is the first version of Node.js to include a patch to + // libuv that enables 256 color output on Windows. Anything earlier and it + // won't work. However, here we target Node.js 8 at minimum as it is an LTS + // release, and Node.js 7 is not. Windows 10 build 10586 is the first + // Windows release that supports 256 colors. Windows 10 build 14931 is the + // first release that supports 16m/TrueColor. + var osRelease = os.release().split('.'); + if (Number(process.versions.node.split('.')[0]) >= 8 + && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) { + return sign in env; + }) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return (/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0 + ); + } + + if ('TERM_PROGRAM' in env) { + var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Hyper': + return 3; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + if (env.TERM === 'dumb') { + return min; + } + + return min; +} + +function getSupportLevel(stream) { + var level = supportsColor(stream); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr), +}; diff --git a/.pnpm-store/v11/files/10/a0d537088d51546e77f7ea2cd13f34738ae029414519025608d5d69c1fca6f206ae4d2ee28b2ab68f4cd5c7b378f43cfb4783cb6ae9f7092a06e9163042e1c b/.pnpm-store/v11/files/10/a0d537088d51546e77f7ea2cd13f34738ae029414519025608d5d69c1fca6f206ae4d2ee28b2ab68f4cd5c7b378f43cfb4783cb6ae9f7092a06e9163042e1c new file mode 100644 index 00000000..0a074e52 --- /dev/null +++ b/.pnpm-store/v11/files/10/a0d537088d51546e77f7ea2cd13f34738ae029414519025608d5d69c1fca6f206ae4d2ee28b2ab68f4cd5c7b378f43cfb4783cb6ae9f7092a06e9163042e1c @@ -0,0 +1,75 @@ +import * as util from 'util'; +export declare const r2gSmokeTest: () => boolean; +export interface LinkedQueueValue { + after?: LinkedQueueValue; + before?: LinkedQueueValue; + value: V; + key: any; +} +export type IteratorFunction = (val: [T, V], index: number) => V; +declare const IsVoidVal: unique symbol; +export declare const IsVoid: { + check: (v: any) => boolean; +}; +export declare class LinkedQueue { + private lookup; + private head; + private tail; + static IsVoid(v: any): boolean; + checkIfVoid(v: any): boolean; + getComputedProperties(): { + size: number; + }; + toJSON(): { + size: number; + }; + [util.inspect.custom](): { + size: number; + }; + get size(): number; + get length(): number; + getLength(): number; + getSize(): number; + iterator(): this; + getIterator(): this; + [Symbol.iterator](): Iterator<[K, V]>; + reverseIterator(): { + [Symbol.iterator]: () => Iterator<[K, V]>; + }; + private processItem; + asyncIterator(): AsyncGenerator<[K, V], void, unknown>; + asyncReverseIterator(): AsyncGenerator<[K, V], void, unknown>; + dequeueIterator(): { + [Symbol.iterator](): Iterator<[K, V]>; + }; + getRandomKey(): K; + getRandomItem(): [K, V] | [typeof IsVoidVal]; + remove(k: K): [K, V] | [typeof IsVoidVal]; + contains(k: K): boolean; + get(k: K): ([K, V] | [typeof IsVoidVal]); + peek(): [K, V] | [typeof IsVoidVal]; + getOrderedList(): Array<[K, V]>; + map(fn: IteratorFunction, ctx?: any): Array; + filter(fn: IteratorFunction, ctx?: any): [K, V][]; + insertInFrontOf(): void; + insertBehind(): void; + insertAtIndex(k: K, v: V): void; + first(): ([K, V] | [typeof IsVoidVal]); + last(): ([K, V] | [typeof IsVoidVal]); + getReverseOrderedList(): [K, V][]; + removeAll(): void; + clear(): void; + push(k?: any, val?: any): void; + addToFront(k: K, obj?: V): void; + enq(k?: any, val?: any): void; + enqueue(k: any, val?: any): void; + forEach(fn: IteratorFunction, ctx?: any): this; + dequeueEach(fn: IteratorFunction, ctx?: any): this; + deq(n?: number): [K, V] | [typeof IsVoidVal] | LinkedQueueValue[]; + dequeue(): [K, V] | [typeof IsVoidVal]; + shift(): [K, V] | [typeof IsVoidVal]; + unshift(k: K, obj?: V): void; + pop(): ([K, V] | [typeof IsVoidVal]); + removeLast(): ([K, V] | [typeof IsVoidVal]); +} +export {}; diff --git a/.pnpm-store/v11/files/10/a7f87c3a675b656e1c79ac3495f0329e085e9331dd0d503ffcdb5eea71c5cec1ec4b7eab4ccdffaf8aec2b669c0e47fb2afbcde067ef837af01be5e67441b6-exec b/.pnpm-store/v11/files/10/a7f87c3a675b656e1c79ac3495f0329e085e9331dd0d503ffcdb5eea71c5cec1ec4b7eab4ccdffaf8aec2b669c0e47fb2afbcde067ef837af01be5e67441b6-exec new file mode 100755 index 00000000..7dc7a974 --- /dev/null +++ b/.pnpm-store/v11/files/10/a7f87c3a675b656e1c79ac3495f0329e085e9331dd0d503ffcdb5eea71c5cec1ec4b7eab4ccdffaf8aec2b669c0e47fb2afbcde067ef837af01be5e67441b6-exec @@ -0,0 +1,86 @@ +# arr-flatten [![NPM version](https://img.shields.io/npm/v/arr-flatten.svg?style=flat)](https://www.npmjs.com/package/arr-flatten) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![NPM total downloads](https://img.shields.io/npm/dt/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-flatten.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-flatten) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/arr-flatten.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/arr-flatten) + +> Recursively flatten an array or arrays. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save arr-flatten +``` + +## Install + +Install with [bower](https://bower.io/) + +```sh +$ bower install arr-flatten --save +``` + +## Usage + +```js +var flatten = require('arr-flatten'); + +flatten(['a', ['b', ['c']], 'd', ['e']]); +//=> ['a', 'b', 'c', 'd', 'e'] +``` + +## Why another flatten utility? + +I wanted the fastest implementation I could find, with implementation choices that should work for 95% of use cases, but no cruft to cover the other 5%. + +## About + +### Related projects + +* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.") +* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.") +* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each "Loop over each item in an array and call the given function on every element.") +* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique "Remove duplicate values from an array. Fastest ES5 implementation.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 20 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [lukeed](https://github.com/lukeed) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 05, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/10/a9d817f86ecb25f97c86d395e51850e8452d29ba062349f1e9e368f4d5ae5e7c2c15ff21fb2cb20a01311de535836d137bb4c4e75286b5e54e4cfd7f9dff2c b/.pnpm-store/v11/files/10/a9d817f86ecb25f97c86d395e51850e8452d29ba062349f1e9e368f4d5ae5e7c2c15ff21fb2cb20a01311de535836d137bb4c4e75286b5e54e4cfd7f9dff2c new file mode 100644 index 00000000..97326bb1 --- /dev/null +++ b/.pnpm-store/v11/files/10/a9d817f86ecb25f97c86d395e51850e8452d29ba062349f1e9e368f4d5ae5e7c2c15ff21fb2cb20a01311de535836d137bb4c4e75286b5e54e4cfd7f9dff2c @@ -0,0 +1,202 @@ + +# engine.io-parser + +[![Build Status](https://secure.travis-ci.org/socketio/engine.io-parser.svg?branch=master)](https://travis-ci.org/socketio/engine.io-parser) +[![NPM version](https://badge.fury.io/js/engine.io-parser.svg)](https://npmjs.com/package/engine.io-parser) + +This is the JavaScript parser for the engine.io protocol encoding, +shared by both +[engine.io-client](https://github.com/socketio/engine.io-client) and +[engine.io](https://github.com/socketio/engine.io). + +## How to use + +### Standalone + +The parser can encode/decode packets, payloads, and payloads as binary +with the following methods: `encodePacket`, `decodePacket`, `encodePayload`, +`decodePayload`, `encodePayloadAsBinary`, `decodePayloadAsBinary`. + +The browser-side parser also includes `encodePayloadAsArrayBuffer` and `encodePayloadAsBlob`. + +Example: + +```js +var parser = require('engine.io-parser'); + +var data = new Buffer(5); +for (var i = 0; i < data.length; i++) { data[i] = i; } + +parser.encodePacket({ type: 'message', data: data }, function(encoded) { + var decodedData = parser.decodePacket(encoded); // { type: 'message', data: data } +}); +``` + +### With browserify + +Engine.IO Parser is a commonjs module, which means you can include it by using +`require` on the browser and package using [browserify](http://browserify.org/): + +1. install the parser package + + ```shell + npm install engine.io-parser + ``` + +1. write your app code + + ```js + var parser = require('engine.io-parser'); + + var testBuffer = new Int8Array(10); + for (var i = 0; i < testBuffer.length; i++) testBuffer[i] = i; + + var packets = [{ type: 'message', data: testBuffer.buffer }, { type: 'message', data: 'hello' }]; + + parser.encodePayload(packets, function(encoded) { + parser.decodePayload(encoded, + function(packet, index, total) { + var isLast = index + 1 == total; + if (!isLast) { + var buffer = new Int8Array(packet.data); // testBuffer + } else { + var message = packet.data; // 'hello' + } + }); + }); + ``` + +1. build your app bundle + + ```bash + $ browserify app.js > bundle.js + ``` + +1. include on your page + + ```html + + ``` + +## Features + +- Runs on browser and node.js seamlessly +- Runs inside HTML5 WebWorker +- Can encode and decode packets + - Encodes from/to ArrayBuffer or Blob when in browser, and Buffer or ArrayBuffer in Node + +## API + +Note: `cb(type)` means the type is a callback function that contains a parameter of type `type` when called. + +### Node + +- `encodePacket` + - Encodes a packet. + - **Parameters** + - `Object`: the packet to encode, has `type` and `data`. + - `data`: can be a `String`, `Number`, `Buffer`, `ArrayBuffer` + - `Boolean`: optional, binary support + - `Function`: callback, returns the encoded packet (`cb(String)`) +- `decodePacket` + - Decodes a packet. Data also available as an ArrayBuffer if requested. + - Returns data as `String` or (`Blob` on browser, `ArrayBuffer` on Node) + - **Parameters** + - `String` | `ArrayBuffer`: the packet to decode, has `type` and `data` + - `String`: optional, the binary type + +- `encodeBase64Packet` + - Encodes a packet with binary data in a base64 string (`String`) + - **Parameters** + - `Object`: the packet to encode, has `type` and `data` + - `Function`: callback, returns the base64 encoded message (`cb(String)`) +- `decodeBase64Packet` + - Decodes a packet encoded in a base64 string. + - **Parameters** + - `String`: the base64 encoded message + - `String`: optional, the binary type + +- `encodePayload` + - Encodes multiple messages (payload). + - If any contents are binary, they will be encoded as base64 strings. Base64 + encoded strings are marked with a b before the length specifier + - **Parameters** + - `Array`: an array of packets + - `Boolean`: optional, binary support + - `Function`: callback, returns the encoded payload (`cb(String)`) +- `decodePayload` + - Decodes data when a payload is maybe expected. Possible binary contents are + decoded from their base64 representation. + - **Parameters** + - `String`: the payload + - `String`: optional, the binary type + - `Function`: callback, returns (cb(`Object`: packet, `Number`:packet index, `Number`:packet total)) + +- `encodePayloadAsBinary` + - Encodes multiple messages (payload) as binary. + - **Parameters** + - `Array`: an array of packets + - `Function`: callback, returns the encoded payload (`cb(Buffer)`) +- `decodePayloadAsBinary` + - Decodes data when a payload is maybe expected. Strings are decoded by + interpreting each byte as a key code for entries marked to start with 0. See + description of encodePayloadAsBinary. + - **Parameters** + - `Buffer`: the buffer + - `String`: optional, the binary type + - `Function`: callback, returns the decoded packet (`cb(Object)`) + +### Browser + +- `encodePayloadAsArrayBuffer` + - Encodes multiple messages (payload) as binary. + - **Parameters** + - `Array`: an array of packets + - `Function`: callback, returns the encoded payload (`cb(ArrayBuffer)`) +- `encodePayloadAsBlob` + - Encodes multiple messages (payload) as blob. + - **Parameters** + - `Array`: an array of packets + - `Function`: callback, returns the encoded payload (`cb(Blob)`) + +## Tests + +Standalone tests can be run with `make test` which will run both node.js and browser tests. + +Browser tests are run using [zuul](https://github.com/defunctzombie/zuul). +(You must have zuul setup with a saucelabs account.) + +You can run the tests locally using the following command: + +``` +./node_modules/.bin/zuul --local 8080 -- test/index.js +``` + +## Support + +The support channels for `engine.io-parser` are the same as `socket.io`: + - irc.freenode.net **#socket.io** + - [Google Groups](http://groups.google.com/group/socket_io) + - [Website](http://socket.io) + +## Development + +To contribute patches, run tests or benchmarks, make sure to clone the +repository: + +```bash +git clone git://github.com/LearnBoost/engine.io-parser.git +``` + +Then: + +```bash +cd engine.io-parser +npm install +``` + +See the `Tests` section above for how to run tests before submitting any patches. + +## License + +MIT diff --git a/.pnpm-store/v11/files/11/007a264fe3a8fa5034a86f2d3701df18e6ea71c0b28a624a0e616836c25226d0249654e7d94a07c83713d3442641519f47006b0fe35b88c738679dd128e62f b/.pnpm-store/v11/files/11/007a264fe3a8fa5034a86f2d3701df18e6ea71c0b28a624a0e616836c25226d0249654e7d94a07c83713d3442641519f47006b0fe35b88c738679dd128e62f new file mode 100644 index 00000000..e67d95df --- /dev/null +++ b/.pnpm-store/v11/files/11/007a264fe3a8fa5034a86f2d3701df18e6ea71c0b28a624a0e616836c25226d0249654e7d94a07c83713d3442641519f47006b0fe35b88c738679dd128e62f @@ -0,0 +1,136 @@ +/** + * @license + * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE + */ +;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u-1}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e-1;);return r}function L(n,t){for(var r=n.length;r--&&y(t,n[r],0)>-1;);return r}function C(n,t){for(var r=n.length,e=0;r--;)n[r]===t&&++e; +return e}function U(n){return"\\"+Yr[n]}function B(n,t){return null==n?X:n[t]}function T(n){return Pr.test(n)}function $(n){return qr.test(n)}function D(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function M(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function F(n,t){return function(r){return n(t(r))}}function N(n,t){for(var r=-1,e=n.length,u=0,i=[];++r>>1,Dn=[["ary",xn],["bind",vn],["bindKey",gn],["curry",dn],["curryRight",bn],["flip",An],["partial",wn],["partialRight",mn],["rearg",jn]],Mn="[object Arguments]",Fn="[object Array]",Nn="[object AsyncFunction]",Pn="[object Boolean]",qn="[object Date]",Zn="[object DOMException]",Kn="[object Error]",Vn="[object Function]",Gn="[object GeneratorFunction]",Hn="[object Map]",Jn="[object Number]",Yn="[object Null]",Qn="[object Object]",Xn="[object Promise]",nt="[object Proxy]",tt="[object RegExp]",rt="[object Set]",et="[object String]",ut="[object Symbol]",it="[object Undefined]",ot="[object WeakMap]",ft="[object WeakSet]",ct="[object ArrayBuffer]",at="[object DataView]",lt="[object Float32Array]",st="[object Float64Array]",ht="[object Int8Array]",pt="[object Int16Array]",_t="[object Int32Array]",vt="[object Uint8Array]",gt="[object Uint8ClampedArray]",yt="[object Uint16Array]",dt="[object Uint32Array]",bt=/\b__p\+='';/g,wt=/\b(__p\+=)''\+/g,mt=/(__e\(.*?\)|\b__t\))\+'';/g,xt=/&(?:amp|lt|gt|quot|#39);/g,jt=/[&<>"']/g,At=RegExp(xt.source),kt=RegExp(jt.source),It=/<%-([\s\S]+?)%>/g,Ot=/<%([\s\S]+?)%>/g,Rt=/<%=([\s\S]+?)%>/g,zt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Et=/^\w*$/,St=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Wt=/[\\^$.*+?()[\]{}|]/g,Lt=RegExp(Wt.source),Ct=/^\s+/,Ut=/\s/,Bt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Tt=/\{\n\/\* \[wrapped with (.+)\] \*/,$t=/,? & /,Dt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Mt=/[()=,{}\[\]\/\s]/,Ft=/\\(\\)?/g,Nt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Pt=/\w*$/,qt=/^[-+]0x[0-9a-f]+$/i,Zt=/^0b[01]+$/i,Kt=/^\[object .+?Constructor\]$/,Vt=/^0o[0-7]+$/i,Gt=/^(?:0|[1-9]\d*)$/,Ht=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Jt=/($^)/,Yt=/['\n\r\u2028\u2029\\]/g,Qt="\\ud800-\\udfff",Xt="\\u0300-\\u036f",nr="\\ufe20-\\ufe2f",tr="\\u20d0-\\u20ff",rr=Xt+nr+tr,er="\\u2700-\\u27bf",ur="a-z\\xdf-\\xf6\\xf8-\\xff",ir="\\xac\\xb1\\xd7\\xf7",or="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",fr="\\u2000-\\u206f",cr=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",ar="A-Z\\xc0-\\xd6\\xd8-\\xde",lr="\\ufe0e\\ufe0f",sr=ir+or+fr+cr,hr="['\u2019]",pr="["+Qt+"]",_r="["+sr+"]",vr="["+rr+"]",gr="\\d+",yr="["+er+"]",dr="["+ur+"]",br="[^"+Qt+sr+gr+er+ur+ar+"]",wr="\\ud83c[\\udffb-\\udfff]",mr="(?:"+vr+"|"+wr+")",xr="[^"+Qt+"]",jr="(?:\\ud83c[\\udde6-\\uddff]){2}",Ar="[\\ud800-\\udbff][\\udc00-\\udfff]",kr="["+ar+"]",Ir="\\u200d",Or="(?:"+dr+"|"+br+")",Rr="(?:"+kr+"|"+br+")",zr="(?:"+hr+"(?:d|ll|m|re|s|t|ve))?",Er="(?:"+hr+"(?:D|LL|M|RE|S|T|VE))?",Sr=mr+"?",Wr="["+lr+"]?",Lr="(?:"+Ir+"(?:"+[xr,jr,Ar].join("|")+")"+Wr+Sr+")*",Cr="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",Ur="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Br=Wr+Sr+Lr,Tr="(?:"+[yr,jr,Ar].join("|")+")"+Br,$r="(?:"+[xr+vr+"?",vr,jr,Ar,pr].join("|")+")",Dr=RegExp(hr,"g"),Mr=RegExp(vr,"g"),Fr=RegExp(wr+"(?="+wr+")|"+$r+Br,"g"),Nr=RegExp([kr+"?"+dr+"+"+zr+"(?="+[_r,kr,"$"].join("|")+")",Rr+"+"+Er+"(?="+[_r,kr+Or,"$"].join("|")+")",kr+"?"+Or+"+"+zr,kr+"+"+Er,Ur,Cr,gr,Tr].join("|"),"g"),Pr=RegExp("["+Ir+Qt+rr+lr+"]"),qr=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Zr=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Kr={}; +Kr[lt]=Kr[st]=Kr[ht]=Kr[pt]=Kr[_t]=Kr[vt]=Kr[gt]=Kr[yt]=Kr[dt]=true,Kr[Mn]=Kr[Fn]=Kr[ct]=Kr[Pn]=Kr[at]=Kr[qn]=Kr[Kn]=Kr[Vn]=Kr[Hn]=Kr[Jn]=Kr[Qn]=Kr[tt]=Kr[rt]=Kr[et]=Kr[ot]=false;var Vr={};Vr[Mn]=Vr[Fn]=Vr[ct]=Vr[at]=Vr[Pn]=Vr[qn]=Vr[lt]=Vr[st]=Vr[ht]=Vr[pt]=Vr[_t]=Vr[Hn]=Vr[Jn]=Vr[Qn]=Vr[tt]=Vr[rt]=Vr[et]=Vr[ut]=Vr[vt]=Vr[gt]=Vr[yt]=Vr[dt]=true,Vr[Kn]=Vr[Vn]=Vr[ot]=false;var Gr={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a", +"\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae", +"\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C","\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g", +"\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i","\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O", +"\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r","\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w", +"\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij","\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"},Hr={"&":"&","<":"<",">":">",'"':""","'":"'"},Jr={"&":"&","<":"<",">":">",""":'"',"'":"'"},Yr={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Qr=parseFloat,Xr=parseInt,ne=typeof global=="object"&&global&&global.Object===Object&&global,te=typeof self=="object"&&self&&self.Object===Object&&self,re=ne||te||Function("return this")(),ee=typeof exports=="object"&&exports&&!exports.nodeType&&exports,ue=ee&&typeof module=="object"&&module&&!module.nodeType&&module,ie=ue&&ue.exports===ee,oe=ie&&ne.process,fe=function(){ +try{var n=ue&&ue.require&&ue.require("util").types;return n?n:oe&&oe.binding&&oe.binding("util")}catch(n){}}(),ce=fe&&fe.isArrayBuffer,ae=fe&&fe.isDate,le=fe&&fe.isMap,se=fe&&fe.isRegExp,he=fe&&fe.isSet,pe=fe&&fe.isTypedArray,_e=m("length"),ve=x(Gr),ge=x(Hr),ye=x(Jr),de=function p(x){function Z(n){if(cc(n)&&!bh(n)&&!(n instanceof Ut)){if(n instanceof Y)return n;if(bl.call(n,"__wrapped__"))return eo(n)}return new Y(n)}function J(){}function Y(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t, +this.__index__=0,this.__values__=X}function Ut(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Bn,this.__views__=[]}function Dt(){var n=new Ut(this.__wrapped__);return n.__actions__=Tu(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Tu(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Tu(this.__views__),n}function Qt(){if(this.__filtered__){var n=new Ut(this);n.__dir__=-1, +n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n}function Xt(){var n=this.__wrapped__.value(),t=this.__dir__,r=bh(n),e=t<0,u=r?n.length:0,i=Ii(0,u,this.__views__),o=i.start,f=i.end,c=f-o,a=e?f:o-1,l=this.__iteratees__,s=l.length,h=0,p=Hl(c,this.__takeCount__);if(!r||!e&&u==c&&p==c)return wu(n,this.__actions__);var _=[];n:for(;c--&&h-1}function sr(n,t){var r=this.__data__,e=Lr(r,n);return e<0?(++this.size,r.push([n,t])):r[e][1]=t,this}function hr(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t=t?n:t)),n}function Nr(n,t,e,u,i,o){var f,c=t&ln,a=t&sn,l=t&hn;if(e&&(f=i?e(n,u,i,o):e(n)),f!==X)return f;if(!fc(n))return n;var s=bh(n);if(s){if(f=zi(n),!c)return Tu(n,f)}else{var h=zs(n),p=h==Vn||h==Gn;if(mh(n))return Ou(n,c);if(h==Qn||h==Mn||p&&!i){if(f=a||p?{}:Ei(n),!c)return a?Mu(n,Br(f,n)):Du(n,Ur(f,n))}else{if(!Vr[h])return i?n:{};f=Si(n,h,c)}}o||(o=new mr);var _=o.get(n);if(_)return _;o.set(n,f),kh(n)?n.forEach(function(r){f.add(Nr(r,t,e,r,n,o))}):jh(n)&&n.forEach(function(r,u){ +f.set(u,Nr(r,t,e,u,n,o))});var v=l?a?di:yi:a?qc:Pc,g=s?X:v(n);return r(g||n,function(r,u){g&&(u=r,r=n[u]),Wr(f,u,Nr(r,t,e,u,n,o))}),f}function Pr(n){var t=Pc(n);return function(r){return qr(r,n,t)}}function qr(n,t,r){var e=r.length;if(null==n)return!e;for(n=ll(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===X&&!(u in n)||!i(o))return false}return true}function Gr(n,t,r){if(typeof n!="function")throw new pl(en);return Ws(function(){n.apply(X,r)},t)}function Hr(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length; +if(!l)return s;r&&(t=c(t,z(r))),e?(i=f,a=false):t.length>=tn&&(i=S,a=false,t=new dr(t));n:for(;++uu?0:u+r), +e=e===X||e>u?u:kc(e),e<0&&(e+=u),e=r>e?0:Ic(e);r0&&r(f)?t>1?ee(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function ue(n,t){return n&&bs(n,t,Pc)}function oe(n,t){return n&&ws(n,t,Pc)}function fe(n,t){return i(t,function(t){return uc(n[t])})}function _e(n,t){t=ku(t,n);for(var r=0,e=t.length;null!=n&&rt}function xe(n,t){return null!=n&&bl.call(n,t)}function je(n,t){return null!=n&&t in ll(n)}function Ae(n,t,r){return n>=Hl(t,r)&&n=120&&p.length>=120)?new dr(a&&p):X}p=n[0]; +var _=-1,v=l[0];n:for(;++_-1;)f!==n&&Ll.call(f,a,1),Ll.call(n,a,1);return n}function nu(n,t){for(var r=n?t.length:0,e=r-1;r--;){ +var u=t[r];if(r==e||u!==i){var i=u;Ci(u)?Ll.call(n,u,1):yu(n,u)}}return n}function tu(n,t){return n+Nl(Ql()*(t-n+1))}function ru(n,t,r,e){for(var u=-1,i=Gl(Fl((t-n)/(r||1)),0),o=il(i);i--;)o[e?i:++u]=n,n+=r;return o}function eu(n,t){var r="";if(!n||t<1||t>Ln)return r;do t%2&&(r+=n),t=Nl(t/2),t&&(n+=n);while(t);return r}function uu(n,t){return Ls(Vi(n,t,La),n+"")}function iu(n){return Rr(ra(n))}function ou(n,t){var r=ra(n);return Xi(r,Fr(t,0,r.length))}function fu(n,t,r,e){if(!fc(n))return n;t=ku(t,n); +for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++uu?0:u+t),r=r>u?u:r,r<0&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0;for(var i=il(u);++e>>1,o=n[i];null!==o&&!bc(o)&&(r?o<=t:o=tn){var s=t?null:ks(n);if(s)return P(s);c=false,u=S,l=new dr}else l=t?[]:a;n:for(;++e=e?n:au(n,t,r)}function Ou(n,t){if(t)return n.slice();var r=n.length,e=zl?zl(r):new n.constructor(r);return n.copy(e),e}function Ru(n){var t=new n.constructor(n.byteLength);return new Rl(t).set(new Rl(n)),t}function zu(n,t){return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.byteLength)}function Eu(n){var t=new n.constructor(n.source,Pt.exec(n));return t.lastIndex=n.lastIndex,t}function Su(n){return _s?ll(_s.call(n)):{}}function Wu(n,t){ +return new n.constructor(t?Ru(n.buffer):n.buffer,n.byteOffset,n.length)}function Lu(n,t){if(n!==t){var r=n!==X,e=null===n,u=n===n,i=bc(n),o=t!==X,f=null===t,c=t===t,a=bc(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n=f)return c;return c*("desc"==r[e]?-1:1)}}return n.b-t.b}function Uu(n,t,r,e){for(var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Gl(i-o,0),l=il(c+a),s=!e;++f1?r[u-1]:X,o=u>2?r[2]:X;for(i=n.length>3&&typeof i=="function"?(u--,i):X,o&&Ui(r[0],r[1],o)&&(i=u<3?X:i,u=1),t=ll(t);++e-1?u[i?t[o]:o]:X}}function Yu(n){return gi(function(t){var r=t.length,e=r,u=Y.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!="function")throw new pl(en);if(u&&!o&&"wrapper"==bi(i))var o=new Y([],true)}for(e=o?e:r;++e1&&d.reverse(),s&&cf))return false;var a=i.get(n),l=i.get(t);if(a&&l)return a==t&&l==n;var s=-1,p=true,_=r&_n?new dr:X;for(i.set(n,t),i.set(t,n);++s1?"& ":"")+t[e],t=t.join(r>2?", ":" "),n.replace(Bt,"{\n/* [wrapped with "+t+"] */\n")}function Li(n){return bh(n)||dh(n)||!!(Cl&&n&&n[Cl])}function Ci(n,t){var r=typeof n; +return t=null==t?Ln:t,!!t&&("number"==r||"symbol"!=r&&Gt.test(n))&&n>-1&&n%1==0&&n0){if(++t>=On)return arguments[0]}else t=0; +return n.apply(X,arguments)}}function Xi(n,t){var r=-1,e=n.length,u=e-1;for(t=t===X?e:t;++r=this.__values__.length;return{done:n,value:n?X:this.__values__[this.__index__++]}}function uf(){return this}function of(n){for(var t,r=this;r instanceof J;){var e=eo(r);e.__index__=0,e.__values__=X,t?u.__wrapped__=e:t=e;var u=e;r=r.__wrapped__}return u.__wrapped__=n,t}function ff(){var n=this.__wrapped__;if(n instanceof Ut){var t=n;return this.__actions__.length&&(t=new Ut(this)),t=t.reverse(),t.__actions__.push({func:nf,args:[Eo],thisArg:X}),new Y(t,this.__chain__)}return this.thru(Eo); +}function cf(){return wu(this.__wrapped__,this.__actions__)}function af(n,t,r){var e=bh(n)?u:Jr;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function lf(n,t){return(bh(n)?i:te)(n,mi(t,3))}function sf(n,t){return ee(yf(n,t),1)}function hf(n,t){return ee(yf(n,t),Wn)}function pf(n,t,r){return r=r===X?1:kc(r),ee(yf(n,t),r)}function _f(n,t){return(bh(n)?r:ys)(n,mi(t,3))}function vf(n,t){return(bh(n)?e:ds)(n,mi(t,3))}function gf(n,t,r,e){n=Hf(n)?n:ra(n),r=r&&!e?kc(r):0;var u=n.length;return r<0&&(r=Gl(u+r,0)), +dc(n)?r<=u&&n.indexOf(t,r)>-1:!!u&&y(n,t,r)>-1}function yf(n,t){return(bh(n)?c:Pe)(n,mi(t,3))}function df(n,t,r,e){return null==n?[]:(bh(t)||(t=null==t?[]:[t]),r=e?X:r,bh(r)||(r=null==r?[]:[r]),He(n,t,r))}function bf(n,t,r){var e=bh(n)?l:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ys)}function wf(n,t,r){var e=bh(n)?s:j,u=arguments.length<3;return e(n,mi(t,4),r,u,ds)}function mf(n,t){return(bh(n)?i:te)(n,Uf(mi(t,3)))}function xf(n){return(bh(n)?Rr:iu)(n)}function jf(n,t,r){return t=(r?Ui(n,t,r):t===X)?1:kc(t), +(bh(n)?zr:ou)(n,t)}function Af(n){return(bh(n)?Er:cu)(n)}function kf(n){if(null==n)return 0;if(Hf(n))return dc(n)?V(n):n.length;var t=zs(n);return t==Hn||t==rt?n.size:Me(n).length}function If(n,t,r){var e=bh(n)?h:lu;return r&&Ui(n,t,r)&&(t=X),e(n,mi(t,3))}function Of(n,t){if(typeof t!="function")throw new pl(en);return n=kc(n),function(){if(--n<1)return t.apply(this,arguments)}}function Rf(n,t,r){return t=r?X:t,t=n&&null==t?n.length:t,ai(n,xn,X,X,X,X,t)}function zf(n,t){var r;if(typeof t!="function")throw new pl(en); +return n=kc(n),function(){return--n>0&&(r=t.apply(this,arguments)),n<=1&&(t=X),r}}function Ef(n,t,r){t=r?X:t;var e=ai(n,dn,X,X,X,X,X,t);return e.placeholder=Ef.placeholder,e}function Sf(n,t,r){t=r?X:t;var e=ai(n,bn,X,X,X,X,X,t);return e.placeholder=Sf.placeholder,e}function Wf(n,t,r){function e(t){var r=h,e=p;return h=p=X,d=t,v=n.apply(e,r)}function u(n){return d=n,g=Ws(f,t),b?e(n):v}function i(n){var r=n-y,e=n-d,u=t-r;return w?Hl(u,_-e):u}function o(n){var r=n-y,e=n-d;return y===X||r>=t||r<0||w&&e>=_; +}function f(){var n=fh();return o(n)?c(n):(g=Ws(f,i(n)),X)}function c(n){return g=X,m&&h?e(n):(h=p=X,v)}function a(){g!==X&&As(g),d=0,h=y=p=g=X}function l(){return g===X?v:c(fh())}function s(){var n=fh(),r=o(n);if(h=arguments,p=this,y=n,r){if(g===X)return u(y);if(w)return As(g),g=Ws(f,t),e(y)}return g===X&&(g=Ws(f,t)),v}var h,p,_,v,g,y,d=0,b=false,w=false,m=true;if(typeof n!="function")throw new pl(en);return t=Oc(t)||0,fc(r)&&(b=!!r.leading,w="maxWait"in r,_=w?Gl(Oc(r.maxWait)||0,t):_,m="trailing"in r?!!r.trailing:m), +s.cancel=a,s.flush=l,s}function Lf(n){return ai(n,An)}function Cf(n,t){if(typeof n!="function"||null!=t&&typeof t!="function")throw new pl(en);var r=function(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;if(i.has(u))return i.get(u);var o=n.apply(this,e);return r.cache=i.set(u,o)||i,o};return r.cache=new(Cf.Cache||hr),r}function Uf(n){if(typeof n!="function")throw new pl(en);return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2: +return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function Bf(n){return zf(2,n)}function Tf(n,t){if(typeof n!="function")throw new pl(en);return t=t===X?t:kc(t),uu(n,t)}function $f(t,r){if(typeof t!="function")throw new pl(en);return r=null==r?0:Gl(kc(r),0),uu(function(e){var u=e[r],i=Iu(e,0,r);return u&&a(i,u),n(t,this,i)})}function Df(n,t,r){var e=true,u=true;if(typeof n!="function")throw new pl(en);return fc(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u), +Wf(n,t,{leading:e,maxWait:t,trailing:u})}function Mf(n){return Rf(n,1)}function Ff(n,t){return ph(Au(t),n)}function Nf(){if(!arguments.length)return[];var n=arguments[0];return bh(n)?n:[n]}function Pf(n){return Nr(n,hn)}function qf(n,t){return t=typeof t=="function"?t:X,Nr(n,hn,t)}function Zf(n){return Nr(n,ln|hn)}function Kf(n,t){return t=typeof t=="function"?t:X,Nr(n,ln|hn,t)}function Vf(n,t){return null==t||qr(n,t,Pc(t))}function Gf(n,t){return n===t||n!==n&&t!==t}function Hf(n){return null!=n&&oc(n.length)&&!uc(n); +}function Jf(n){return cc(n)&&Hf(n)}function Yf(n){return n===true||n===false||cc(n)&&we(n)==Pn}function Qf(n){return cc(n)&&1===n.nodeType&&!gc(n)}function Xf(n){if(null==n)return true;if(Hf(n)&&(bh(n)||typeof n=="string"||typeof n.splice=="function"||mh(n)||Ih(n)||dh(n)))return!n.length;var t=zs(n);if(t==Hn||t==rt)return!n.size;if(Mi(n))return!Me(n).length;for(var r in n)if(bl.call(n,r))return false;return true}function nc(n,t){return Se(n,t)}function tc(n,t,r){r=typeof r=="function"?r:X;var e=r?r(n,t):X;return e===X?Se(n,t,X,r):!!e; +}function rc(n){if(!cc(n))return false;var t=we(n);return t==Kn||t==Zn||typeof n.message=="string"&&typeof n.name=="string"&&!gc(n)}function ec(n){return typeof n=="number"&&Zl(n)}function uc(n){if(!fc(n))return false;var t=we(n);return t==Vn||t==Gn||t==Nn||t==nt}function ic(n){return typeof n=="number"&&n==kc(n)}function oc(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=Ln}function fc(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function cc(n){return null!=n&&typeof n=="object"}function ac(n,t){ +return n===t||Ce(n,t,ji(t))}function lc(n,t,r){return r=typeof r=="function"?r:X,Ce(n,t,ji(t),r)}function sc(n){return vc(n)&&n!=+n}function hc(n){if(Es(n))throw new fl(rn);return Ue(n)}function pc(n){return null===n}function _c(n){return null==n}function vc(n){return typeof n=="number"||cc(n)&&we(n)==Jn}function gc(n){if(!cc(n)||we(n)!=Qn)return false;var t=El(n);if(null===t)return true;var r=bl.call(t,"constructor")&&t.constructor;return typeof r=="function"&&r instanceof r&&dl.call(r)==jl}function yc(n){ +return ic(n)&&n>=-Ln&&n<=Ln}function dc(n){return typeof n=="string"||!bh(n)&&cc(n)&&we(n)==et}function bc(n){return typeof n=="symbol"||cc(n)&&we(n)==ut}function wc(n){return n===X}function mc(n){return cc(n)&&zs(n)==ot}function xc(n){return cc(n)&&we(n)==ft}function jc(n){if(!n)return[];if(Hf(n))return dc(n)?G(n):Tu(n);if(Ul&&n[Ul])return D(n[Ul]());var t=zs(n);return(t==Hn?M:t==rt?P:ra)(n)}function Ac(n){if(!n)return 0===n?n:0;if(n=Oc(n),n===Wn||n===-Wn){return(n<0?-1:1)*Cn}return n===n?n:0}function kc(n){ +var t=Ac(n),r=t%1;return t===t?r?t-r:t:0}function Ic(n){return n?Fr(kc(n),0,Bn):0}function Oc(n){if(typeof n=="number")return n;if(bc(n))return Un;if(fc(n)){var t=typeof n.valueOf=="function"?n.valueOf():n;n=fc(t)?t+"":t}if(typeof n!="string")return 0===n?n:+n;n=R(n);var r=Zt.test(n);return r||Vt.test(n)?Xr(n.slice(2),r?2:8):qt.test(n)?Un:+n}function Rc(n){return $u(n,qc(n))}function zc(n){return n?Fr(kc(n),-Ln,Ln):0===n?n:0}function Ec(n){return null==n?"":vu(n)}function Sc(n,t){var r=gs(n);return null==t?r:Ur(r,t); +}function Wc(n,t){return v(n,mi(t,3),ue)}function Lc(n,t){return v(n,mi(t,3),oe)}function Cc(n,t){return null==n?n:bs(n,mi(t,3),qc)}function Uc(n,t){return null==n?n:ws(n,mi(t,3),qc)}function Bc(n,t){return n&&ue(n,mi(t,3))}function Tc(n,t){return n&&oe(n,mi(t,3))}function $c(n){return null==n?[]:fe(n,Pc(n))}function Dc(n){return null==n?[]:fe(n,qc(n))}function Mc(n,t,r){var e=null==n?X:_e(n,t);return e===X?r:e}function Fc(n,t){return null!=n&&Ri(n,t,xe)}function Nc(n,t){return null!=n&&Ri(n,t,je); +}function Pc(n){return Hf(n)?Or(n):Me(n)}function qc(n){return Hf(n)?Or(n,true):Fe(n)}function Zc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Tr(r,t(n,e,u),n)}),r}function Kc(n,t){var r={};return t=mi(t,3),ue(n,function(n,e,u){Tr(r,e,t(n,e,u))}),r}function Vc(n,t){return Gc(n,Uf(mi(t)))}function Gc(n,t){if(null==n)return{};var r=c(di(n),function(n){return[n]});return t=mi(t),Ye(n,r,function(n,r){return t(n,r[0])})}function Hc(n,t,r){t=ku(t,n);var e=-1,u=t.length;for(u||(u=1,n=X);++et){ +var e=n;n=t,t=e}if(r||n%1||t%1){var u=Ql();return Hl(n+u*(t-n+Qr("1e-"+((u+"").length-1))),t)}return tu(n,t)}function fa(n){return Qh(Ec(n).toLowerCase())}function ca(n){return n=Ec(n),n&&n.replace(Ht,ve).replace(Mr,"")}function aa(n,t,r){n=Ec(n),t=vu(t);var e=n.length;r=r===X?e:Fr(kc(r),0,e);var u=r;return r-=t.length,r>=0&&n.slice(r,u)==t}function la(n){return n=Ec(n),n&&kt.test(n)?n.replace(jt,ge):n}function sa(n){return n=Ec(n),n&&Lt.test(n)?n.replace(Wt,"\\$&"):n}function ha(n,t,r){n=Ec(n),t=kc(t); +var e=t?V(n):0;if(!t||e>=t)return n;var u=(t-e)/2;return ri(Nl(u),r)+n+ri(Fl(u),r)}function pa(n,t,r){n=Ec(n),t=kc(t);var e=t?V(n):0;return t&&e>>0)?(n=Ec(n),n&&(typeof t=="string"||null!=t&&!Ah(t))&&(t=vu(t),!t&&T(n))?Iu(G(n),0,r):n.split(t,r)):[]}function ba(n,t,r){return n=Ec(n),r=null==r?0:Fr(kc(r),0,n.length),t=vu(t),n.slice(r,r+t.length)==t}function wa(n,t,e){var u=Z.templateSettings;e&&Ui(n,t,e)&&(t=X),n=Ec(n),t=Wh({},t,u,li);var i=Wh({},t.imports,u.imports,li),o=Pc(i),f=E(i,o);r(o,function(n){if(Mt.test(n))throw new fl(on)});var c,a,l=0,s=t.interpolate||Jt,h="__p+='",p=sl((t.escape||Jt).source+"|"+s.source+"|"+(s===Rt?Nt:Jt).source+"|"+(t.evaluate||Jt).source+"|$","g"),_=bl.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/\s/g," ")+"\n":""; +n.replace(p,function(t,r,e,u,i,o){return e||(e=u),h+=n.slice(l,o).replace(Yt,U),r&&(c=true,h+="'+__e("+r+")+'"),i&&(a=true,h+="';"+i+";\n__p+='"),e&&(h+="'+((__t=("+e+"))==null?'':__t)+'"),l=o+t.length,t}),h+="';";var v=bl.call(t,"variable")&&t.variable;if(v){if(Mt.test(v))throw new fl(un)}else h="with(obj){"+h+"}";h=(a?h.replace(bt,""):h).replace(wt,"$1").replace(mt,"$1;"),h="function("+(v||"obj")+"){"+(v?"":"obj||(obj={});")+"var __t,__p=''"+(c?",__e=_.escape":"")+(a?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+h+"return __p}"; +var g=Xh(function(){return cl(o,_+"return "+h).apply(X,f)});if(g.source=h,rc(g))throw g;return g}function ma(n){return Ec(n).toLowerCase()}function xa(n){return Ec(n).toUpperCase()}function ja(n,t,r){if(n=Ec(n),n&&(r||t===X))return R(n);if(!n||!(t=vu(t)))return n;var e=G(n),u=G(t);return Iu(e,W(e,u),L(e,u)+1).join("")}function Aa(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.slice(0,H(n)+1);if(!n||!(t=vu(t)))return n;var e=G(n);return Iu(e,0,L(e,G(t))+1).join("")}function ka(n,t,r){if(n=Ec(n),n&&(r||t===X))return n.replace(Ct,""); +if(!n||!(t=vu(t)))return n;var e=G(n);return Iu(e,W(e,G(t))).join("")}function Ia(n,t){var r=kn,e=In;if(fc(t)){var u="separator"in t?t.separator:u;r="length"in t?kc(t.length):r,e="omission"in t?vu(t.omission):e}n=Ec(n);var i=n.length;if(T(n)){var o=G(n);i=o.length}if(r>=i)return n;var f=r-V(e);if(f<1)return e;var c=o?Iu(o,0,f).join(""):n.slice(0,f);if(u===X)return c+e;if(o&&(f+=c.length-f),Ah(u)){if(n.slice(f).search(u)){var a,l=c;for(u.global||(u=sl(u.source,Ec(Pt.exec(u))+"g")),u.lastIndex=0;a=u.exec(l);)var s=a.index; +c=c.slice(0,s===X?f:s)}}else if(n.indexOf(vu(u),f)!=f){var h=c.lastIndexOf(u);h>-1&&(c=c.slice(0,h))}return c+e}function Oa(n){return n=Ec(n),n&&At.test(n)?n.replace(xt,ye):n}function Ra(n,t,r){return n=Ec(n),t=r?X:t,t===X?$(n)?Q(n):_(n):n.match(t)||[]}function za(t){var r=null==t?0:t.length,e=mi();return t=r?c(t,function(n){if("function"!=typeof n[1])throw new pl(en);return[e(n[0]),n[1]]}):[],uu(function(e){for(var u=-1;++uLn)return[];var r=Bn,e=Hl(n,Bn);t=mi(t),n-=Bn;for(var u=I(e,t);++r1?n[t-1]:X;return r=typeof r=="function"?(n.pop(), +r):X,Ho(n,r)}),Qs=gi(function(n){var t=n.length,r=t?n[0]:0,e=this.__wrapped__,u=function(t){return $r(t,n)};return!(t>1||this.__actions__.length)&&e instanceof Ut&&Ci(r)?(e=e.slice(r,+r+(t?1:0)),e.__actions__.push({func:nf,args:[u],thisArg:X}),new Y(e,this.__chain__).thru(function(n){return t&&!n.length&&n.push(X),n})):this.thru(u)}),Xs=Fu(function(n,t,r){bl.call(n,r)?++n[r]:Tr(n,r,1)}),nh=Ju(ho),th=Ju(po),rh=Fu(function(n,t,r){bl.call(n,r)?n[r].push(t):Tr(n,r,[t])}),eh=uu(function(t,r,e){var u=-1,i=typeof r=="function",o=Hf(t)?il(t.length):[]; +return ys(t,function(t){o[++u]=i?n(r,t,e):Oe(t,r,e)}),o}),uh=Fu(function(n,t,r){Tr(n,r,t)}),ih=Fu(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),oh=uu(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Ui(n,t[0],t[1])?t=[]:r>2&&Ui(t[0],t[1],t[2])&&(t=[t[0]]),He(n,ee(t,1),[])}),fh=Dl||function(){return re.Date.now()},ch=uu(function(n,t,r){var e=vn;if(r.length){var u=N(r,wi(ch));e|=wn}return ai(n,e,t,r,u)}),ah=uu(function(n,t,r){var e=vn|gn;if(r.length){var u=N(r,wi(ah));e|=wn; +}return ai(t,e,n,r,u)}),lh=uu(function(n,t){return Gr(n,1,t)}),sh=uu(function(n,t,r){return Gr(n,Oc(t)||0,r)});Cf.Cache=hr;var hh=js(function(t,r){r=1==r.length&&bh(r[0])?c(r[0],z(mi())):c(ee(r,1),z(mi()));var e=r.length;return uu(function(u){for(var i=-1,o=Hl(u.length,e);++i=t}),dh=Re(function(){return arguments}())?Re:function(n){return cc(n)&&bl.call(n,"callee")&&!Wl.call(n,"callee")},bh=il.isArray,wh=ce?z(ce):ze,mh=ql||qa,xh=ae?z(ae):Ee,jh=le?z(le):Le,Ah=se?z(se):Be,kh=he?z(he):Te,Ih=pe?z(pe):$e,Oh=ii(Ne),Rh=ii(function(n,t){return n<=t}),zh=Nu(function(n,t){if(Mi(t)||Hf(t))return $u(t,Pc(t),n),X;for(var r in t)bl.call(t,r)&&Wr(n,r,t[r])}),Eh=Nu(function(n,t){$u(t,qc(t),n)}),Sh=Nu(function(n,t,r,e){$u(t,qc(t),n,e)}),Wh=Nu(function(n,t,r,e){$u(t,Pc(t),n,e); +}),Lh=gi($r),Ch=uu(function(n,t){n=ll(n);var r=-1,e=t.length,u=e>2?t[2]:X;for(u&&Ui(t[0],t[1],u)&&(e=1);++r1),t}),$u(n,di(n),r),e&&(r=Nr(r,ln|sn|hn,hi));for(var u=t.length;u--;)yu(r,t[u]);return r}),Nh=gi(function(n,t){return null==n?{}:Je(n,t)}),Ph=ci(Pc),qh=ci(qc),Zh=Vu(function(n,t,r){return t=t.toLowerCase(),n+(r?fa(t):t)}),Kh=Vu(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vh=Vu(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Gh=Ku("toLowerCase"),Hh=Vu(function(n,t,r){ +return n+(r?"_":"")+t.toLowerCase()}),Jh=Vu(function(n,t,r){return n+(r?" ":"")+Qh(t)}),Yh=Vu(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),Qh=Ku("toUpperCase"),Xh=uu(function(t,r){try{return n(t,X,r)}catch(n){return rc(n)?n:new fl(n)}}),np=gi(function(n,t){return r(t,function(t){t=no(t),Tr(n,t,ch(n[t],n))}),n}),tp=Yu(),rp=Yu(true),ep=uu(function(n,t){return function(r){return Oe(r,n,t)}}),up=uu(function(n,t){return function(r){return Oe(n,r,t)}}),ip=ti(c),op=ti(u),fp=ti(h),cp=ui(),ap=ui(true),lp=ni(function(n,t){ +return n+t},0),sp=fi("ceil"),hp=ni(function(n,t){return n/t},1),pp=fi("floor"),_p=ni(function(n,t){return n*t},1),vp=fi("round"),gp=ni(function(n,t){return n-t},0);return Z.after=Of,Z.ary=Rf,Z.assign=zh,Z.assignIn=Eh,Z.assignInWith=Sh,Z.assignWith=Wh,Z.at=Lh,Z.before=zf,Z.bind=ch,Z.bindAll=np,Z.bindKey=ah,Z.castArray=Nf,Z.chain=Qo,Z.chunk=uo,Z.compact=io,Z.concat=oo,Z.cond=za,Z.conforms=Ea,Z.constant=Sa,Z.countBy=Xs,Z.create=Sc,Z.curry=Ef,Z.curryRight=Sf,Z.debounce=Wf,Z.defaults=Ch,Z.defaultsDeep=Uh, +Z.defer=lh,Z.delay=sh,Z.difference=Us,Z.differenceBy=Bs,Z.differenceWith=Ts,Z.drop=fo,Z.dropRight=co,Z.dropRightWhile=ao,Z.dropWhile=lo,Z.fill=so,Z.filter=lf,Z.flatMap=sf,Z.flatMapDeep=hf,Z.flatMapDepth=pf,Z.flatten=_o,Z.flattenDeep=vo,Z.flattenDepth=go,Z.flip=Lf,Z.flow=tp,Z.flowRight=rp,Z.fromPairs=yo,Z.functions=$c,Z.functionsIn=Dc,Z.groupBy=rh,Z.initial=mo,Z.intersection=$s,Z.intersectionBy=Ds,Z.intersectionWith=Ms,Z.invert=Bh,Z.invertBy=Th,Z.invokeMap=eh,Z.iteratee=Ca,Z.keyBy=uh,Z.keys=Pc,Z.keysIn=qc, +Z.map=yf,Z.mapKeys=Zc,Z.mapValues=Kc,Z.matches=Ua,Z.matchesProperty=Ba,Z.memoize=Cf,Z.merge=Dh,Z.mergeWith=Mh,Z.method=ep,Z.methodOf=up,Z.mixin=Ta,Z.negate=Uf,Z.nthArg=Ma,Z.omit=Fh,Z.omitBy=Vc,Z.once=Bf,Z.orderBy=df,Z.over=ip,Z.overArgs=hh,Z.overEvery=op,Z.overSome=fp,Z.partial=ph,Z.partialRight=_h,Z.partition=ih,Z.pick=Nh,Z.pickBy=Gc,Z.property=Fa,Z.propertyOf=Na,Z.pull=Fs,Z.pullAll=Io,Z.pullAllBy=Oo,Z.pullAllWith=Ro,Z.pullAt=Ns,Z.range=cp,Z.rangeRight=ap,Z.rearg=vh,Z.reject=mf,Z.remove=zo,Z.rest=Tf, +Z.reverse=Eo,Z.sampleSize=jf,Z.set=Jc,Z.setWith=Yc,Z.shuffle=Af,Z.slice=So,Z.sortBy=oh,Z.sortedUniq=$o,Z.sortedUniqBy=Do,Z.split=da,Z.spread=$f,Z.tail=Mo,Z.take=Fo,Z.takeRight=No,Z.takeRightWhile=Po,Z.takeWhile=qo,Z.tap=Xo,Z.throttle=Df,Z.thru=nf,Z.toArray=jc,Z.toPairs=Ph,Z.toPairsIn=qh,Z.toPath=Ha,Z.toPlainObject=Rc,Z.transform=Qc,Z.unary=Mf,Z.union=Ps,Z.unionBy=qs,Z.unionWith=Zs,Z.uniq=Zo,Z.uniqBy=Ko,Z.uniqWith=Vo,Z.unset=Xc,Z.unzip=Go,Z.unzipWith=Ho,Z.update=na,Z.updateWith=ta,Z.values=ra,Z.valuesIn=ea, +Z.without=Ks,Z.words=Ra,Z.wrap=Ff,Z.xor=Vs,Z.xorBy=Gs,Z.xorWith=Hs,Z.zip=Js,Z.zipObject=Jo,Z.zipObjectDeep=Yo,Z.zipWith=Ys,Z.entries=Ph,Z.entriesIn=qh,Z.extend=Eh,Z.extendWith=Sh,Ta(Z,Z),Z.add=lp,Z.attempt=Xh,Z.camelCase=Zh,Z.capitalize=fa,Z.ceil=sp,Z.clamp=ua,Z.clone=Pf,Z.cloneDeep=Zf,Z.cloneDeepWith=Kf,Z.cloneWith=qf,Z.conformsTo=Vf,Z.deburr=ca,Z.defaultTo=Wa,Z.divide=hp,Z.endsWith=aa,Z.eq=Gf,Z.escape=la,Z.escapeRegExp=sa,Z.every=af,Z.find=nh,Z.findIndex=ho,Z.findKey=Wc,Z.findLast=th,Z.findLastIndex=po, +Z.findLastKey=Lc,Z.floor=pp,Z.forEach=_f,Z.forEachRight=vf,Z.forIn=Cc,Z.forInRight=Uc,Z.forOwn=Bc,Z.forOwnRight=Tc,Z.get=Mc,Z.gt=gh,Z.gte=yh,Z.has=Fc,Z.hasIn=Nc,Z.head=bo,Z.identity=La,Z.includes=gf,Z.indexOf=wo,Z.inRange=ia,Z.invoke=$h,Z.isArguments=dh,Z.isArray=bh,Z.isArrayBuffer=wh,Z.isArrayLike=Hf,Z.isArrayLikeObject=Jf,Z.isBoolean=Yf,Z.isBuffer=mh,Z.isDate=xh,Z.isElement=Qf,Z.isEmpty=Xf,Z.isEqual=nc,Z.isEqualWith=tc,Z.isError=rc,Z.isFinite=ec,Z.isFunction=uc,Z.isInteger=ic,Z.isLength=oc,Z.isMap=jh, +Z.isMatch=ac,Z.isMatchWith=lc,Z.isNaN=sc,Z.isNative=hc,Z.isNil=_c,Z.isNull=pc,Z.isNumber=vc,Z.isObject=fc,Z.isObjectLike=cc,Z.isPlainObject=gc,Z.isRegExp=Ah,Z.isSafeInteger=yc,Z.isSet=kh,Z.isString=dc,Z.isSymbol=bc,Z.isTypedArray=Ih,Z.isUndefined=wc,Z.isWeakMap=mc,Z.isWeakSet=xc,Z.join=xo,Z.kebabCase=Kh,Z.last=jo,Z.lastIndexOf=Ao,Z.lowerCase=Vh,Z.lowerFirst=Gh,Z.lt=Oh,Z.lte=Rh,Z.max=Ya,Z.maxBy=Qa,Z.mean=Xa,Z.meanBy=nl,Z.min=tl,Z.minBy=rl,Z.stubArray=Pa,Z.stubFalse=qa,Z.stubObject=Za,Z.stubString=Ka, +Z.stubTrue=Va,Z.multiply=_p,Z.nth=ko,Z.noConflict=$a,Z.noop=Da,Z.now=fh,Z.pad=ha,Z.padEnd=pa,Z.padStart=_a,Z.parseInt=va,Z.random=oa,Z.reduce=bf,Z.reduceRight=wf,Z.repeat=ga,Z.replace=ya,Z.result=Hc,Z.round=vp,Z.runInContext=p,Z.sample=xf,Z.size=kf,Z.snakeCase=Hh,Z.some=If,Z.sortedIndex=Wo,Z.sortedIndexBy=Lo,Z.sortedIndexOf=Co,Z.sortedLastIndex=Uo,Z.sortedLastIndexBy=Bo,Z.sortedLastIndexOf=To,Z.startCase=Jh,Z.startsWith=ba,Z.subtract=gp,Z.sum=el,Z.sumBy=ul,Z.template=wa,Z.times=Ga,Z.toFinite=Ac,Z.toInteger=kc, +Z.toLength=Ic,Z.toLower=ma,Z.toNumber=Oc,Z.toSafeInteger=zc,Z.toString=Ec,Z.toUpper=xa,Z.trim=ja,Z.trimEnd=Aa,Z.trimStart=ka,Z.truncate=Ia,Z.unescape=Oa,Z.uniqueId=Ja,Z.upperCase=Yh,Z.upperFirst=Qh,Z.each=_f,Z.eachRight=vf,Z.first=bo,Ta(Z,function(){var n={};return ue(Z,function(t,r){bl.call(Z.prototype,r)||(n[r]=t)}),n}(),{chain:false}),Z.VERSION=nn,r(["bind","bindKey","curry","curryRight","partial","partialRight"],function(n){Z[n].placeholder=Z}),r(["drop","take"],function(n,t){Ut.prototype[n]=function(r){ +r=r===X?1:Gl(kc(r),0);var e=this.__filtered__&&!t?new Ut(this):this.clone();return e.__filtered__?e.__takeCount__=Hl(r,e.__takeCount__):e.__views__.push({size:Hl(r,Bn),type:n+(e.__dir__<0?"Right":"")}),e},Ut.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){var r=t+1,e=r==zn||r==Sn;Ut.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:mi(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){ +var r="take"+(t?"Right":"");Ut.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Ut.prototype[n]=function(){return this.__filtered__?new Ut(this):this[r](1)}}),Ut.prototype.compact=function(){return this.filter(La)},Ut.prototype.find=function(n){return this.filter(n).head()},Ut.prototype.findLast=function(n){return this.reverse().find(n)},Ut.prototype.invokeMap=uu(function(n,t){return typeof n=="function"?new Ut(this):this.map(function(r){ +return Oe(r,n,t)})}),Ut.prototype.reject=function(n){return this.filter(Uf(mi(n)))},Ut.prototype.slice=function(n,t){n=kc(n);var r=this;return r.__filtered__&&(n>0||t<0)?new Ut(r):(n<0?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==X&&(t=kc(t),r=t<0?r.dropRight(-t):r.take(t-n)),r)},Ut.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},Ut.prototype.toArray=function(){return this.take(Bn)},ue(Ut.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=Z[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t); +u&&(Z.prototype[t]=function(){var t=this.__wrapped__,o=e?[1]:arguments,f=t instanceof Ut,c=o[0],l=f||bh(t),s=function(n){var t=u.apply(Z,a([n],o));return e&&h?t[0]:t};l&&r&&typeof c=="function"&&1!=c.length&&(f=l=false);var h=this.__chain__,p=!!this.__actions__.length,_=i&&!h,v=f&&!p;if(!i&&l){t=v?t:new Ut(this);var g=n.apply(t,o);return g.__actions__.push({func:nf,args:[s],thisArg:X}),new Y(g,h)}return _&&v?n.apply(this,o):(g=this.thru(s),_?e?g.value()[0]:g.value():g)})}),r(["pop","push","shift","sort","splice","unshift"],function(n){ +var t=_l[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);Z.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(bh(u)?u:[],n)}return this[r](function(r){return t.apply(bh(r)?r:[],n)})}}),ue(Ut.prototype,function(n,t){var r=Z[t];if(r){var e=r.name+"";bl.call(fs,e)||(fs[e]=[]),fs[e].push({name:t,func:r})}}),fs[Qu(X,gn).name]=[{name:"wrapper",func:X}],Ut.prototype.clone=Dt,Ut.prototype.reverse=Qt,Ut.prototype.value=Xt,Z.prototype.at=Qs, +Z.prototype.chain=tf,Z.prototype.commit=rf,Z.prototype.next=ef,Z.prototype.plant=of,Z.prototype.reverse=ff,Z.prototype.toJSON=Z.prototype.valueOf=Z.prototype.value=cf,Z.prototype.first=Z.prototype.head,Ul&&(Z.prototype[Ul]=uf),Z},be=de();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(re._=be, define(function(){return be})):ue?((ue.exports=be)._=be,ee._=be):re._=be}).call(this); \ No newline at end of file diff --git a/.pnpm-store/v11/files/11/0f6f9d8c4db09b5cfc2f146380b9718d8fd0c844fba66fd711c665a7d5cfee542008f75dd424847a5b5f421368be0c387492b3cbc93c6799e08e7dc5072452 b/.pnpm-store/v11/files/11/0f6f9d8c4db09b5cfc2f146380b9718d8fd0c844fba66fd711c665a7d5cfee542008f75dd424847a5b5f421368be0c387492b3cbc93c6799e08e7dc5072452 new file mode 100644 index 00000000..c68ff720 --- /dev/null +++ b/.pnpm-store/v11/files/11/0f6f9d8c4db09b5cfc2f146380b9718d8fd0c844fba66fd711c665a7d5cfee542008f75dd424847a5b5f421368be0c387492b3cbc93c6799e08e7dc5072452 @@ -0,0 +1,18 @@ +# lodash.shuffle v4.2.0 + +The [lodash](https://lodash.com/) method `_.shuffle` exported as a [Node.js](https://nodejs.org/) module. + +## Installation + +Using npm: +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash.shuffle +``` + +In Node.js: +```js +var shuffle = require('lodash.shuffle'); +``` + +See the [documentation](https://lodash.com/docs#shuffle) or [package source](https://github.com/lodash/lodash/blob/4.2.0-npm-packages/lodash.shuffle) for more details. diff --git a/.pnpm-store/v11/files/11/30546ae01b4742345165c60ded70684f3e19d8026489521912316d09f2a7406405b4596cf556e3d66a1c0be46da523235a6c4013b5ddfb4aaa51094c6675a5 b/.pnpm-store/v11/files/11/30546ae01b4742345165c60ded70684f3e19d8026489521912316d09f2a7406405b4596cf556e3d66a1c0be46da523235a6c4013b5ddfb4aaa51094c6675a5 new file mode 100644 index 00000000..18532edd --- /dev/null +++ b/.pnpm-store/v11/files/11/30546ae01b4742345165c60ded70684f3e19d8026489521912316d09f2a7406405b4596cf556e3d66a1c0be46da523235a6c4013b5ddfb4aaa51094c6675a5 @@ -0,0 +1,70 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var test = require("tape") + +var resolveUrl = require("../") + +"use strict" + +test("resolveUrl", function(t) { + + t.plan(7) + + t.equal(typeof resolveUrl, "function", "is a function") + + t.equal( + resolveUrl("https://example.com/"), + "https://example.com/" + ) + + var loc = "https://example.com/articles/resolving-urls/edit" + + t.equal( + resolveUrl(loc, "remove"), + "https://example.com/articles/resolving-urls/remove" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js"), + "https://example.com/static/scripts/app.js" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map"), + "https://example.com/static/source-maps/app.js.map" + ) + + t.equal( + resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee"), + "https://example.com/static/coffee/app.coffee" + ) + + t.equal( + resolveUrl(loc, "//cdn.example.com/jquery.js"), + "https://cdn.example.com/jquery.js" + ) + +}) + +test("edge cases", function(t) { + + t.plan(4) + + t["throws"](resolveUrl, /at least one argument/, "throws with no arguments") + + var accidentallyUndefined + var result + t.doesNotThrow( + function() { result = resolveUrl(accidentallyUndefined) }, + "undefined is still an argument" + ) + t.ok(result.match(/\/undefined$/), "undefined is stringified") + + t.equal( + resolveUrl("http://foo.org/test", undefined, {}, ["a/b"], null), + "http://foo.org/a/null", + "arguments are stringified" + ) + +}) diff --git a/.pnpm-store/v11/files/11/4ae684f54fe90422be3891f21644a592838c13f3451b9b571dad4983429270a246def45d5547e55a3c1fc3d329c787cbd392b159fb294f6f988a372b7d270c b/.pnpm-store/v11/files/11/4ae684f54fe90422be3891f21644a592838c13f3451b9b571dad4983429270a246def45d5547e55a3c1fc3d329c787cbd392b159fb294f6f988a372b7d270c new file mode 100644 index 00000000..39115c7f --- /dev/null +++ b/.pnpm-store/v11/files/11/4ae684f54fe90422be3891f21644a592838c13f3451b9b571dad4983429270a246def45d5547e55a3c1fc3d329c787cbd392b159fb294f6f988a372b7d270c @@ -0,0 +1,659 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// src/tsserver/server.ts +var import_os2 = __toESM(require("os")); + +// src/typescript/typescript.ts +var typescript_exports = {}; +__reExport(typescript_exports, require("./typescript.js")); + +// src/tsserver/nodeServer.ts +var import_child_process = __toESM(require("child_process")); +var import_fs = __toESM(require("fs")); +var import_net = __toESM(require("net")); +var import_os = __toESM(require("os")); +var import_readline = __toESM(require("readline")); + +// src/tsserver/common.ts +function getLogLevel(level) { + if (level) { + const l = level.toLowerCase(); + for (const name in typescript_exports.server.LogLevel) { + if (isNaN(+name) && l === name.toLowerCase()) { + return typescript_exports.server.LogLevel[name]; + } + } + } + return void 0; +} + +// src/tsserver/nodeServer.ts +function parseLoggingEnvironmentString(logEnvStr) { + if (!logEnvStr) { + return {}; + } + const logEnv = { logToFile: true }; + const args = logEnvStr.split(" "); + const len = args.length - 1; + for (let i = 0; i < len; i += 2) { + const option = args[i]; + const { value, extraPartCounter } = getEntireValue(i + 1); + i += extraPartCounter; + if (option && value) { + switch (option) { + case "-file": + logEnv.file = value; + break; + case "-level": + const level = getLogLevel(value); + logEnv.detailLevel = level !== void 0 ? level : typescript_exports.server.LogLevel.normal; + break; + case "-traceToConsole": + logEnv.traceToConsole = value.toLowerCase() === "true"; + break; + case "-logToFile": + logEnv.logToFile = value.toLowerCase() === "true"; + break; + } + } + } + return logEnv; + function getEntireValue(initialIndex) { + let pathStart = args[initialIndex]; + let extraPartCounter = 0; + if (pathStart.charCodeAt(0) === typescript_exports.CharacterCodes.doubleQuote && pathStart.charCodeAt(pathStart.length - 1) !== typescript_exports.CharacterCodes.doubleQuote) { + for (let i = initialIndex + 1; i < args.length; i++) { + pathStart += " "; + pathStart += args[i]; + extraPartCounter++; + if (pathStart.charCodeAt(pathStart.length - 1) === typescript_exports.CharacterCodes.doubleQuote) break; + } + } + return { value: (0, typescript_exports.stripQuotes)(pathStart), extraPartCounter }; + } +} +function parseServerMode() { + const mode = typescript_exports.server.findArgument("--serverMode"); + if (!mode) return void 0; + switch (mode.toLowerCase()) { + case "semantic": + return typescript_exports.LanguageServiceMode.Semantic; + case "partialsemantic": + return typescript_exports.LanguageServiceMode.PartialSemantic; + case "syntactic": + return typescript_exports.LanguageServiceMode.Syntactic; + default: + return mode; + } +} +function initializeNodeSystem() { + const sys4 = typescript_exports.Debug.checkDefined(typescript_exports.sys); + class Logger { + constructor(logFilename, traceToConsole, level) { + this.logFilename = logFilename; + this.traceToConsole = traceToConsole; + this.level = level; + this.seq = 0; + this.inGroup = false; + this.firstInGroup = true; + this.fd = -1; + if (this.logFilename) { + try { + this.fd = import_fs.default.openSync(this.logFilename, "w"); + } catch { + } + } + } + static padStringRight(str, padding) { + return (str + padding).slice(0, padding.length); + } + close() { + if (this.fd >= 0) { + import_fs.default.close(this.fd, typescript_exports.noop); + } + } + getLogFileName() { + return this.logFilename; + } + perftrc(s) { + this.msg(s, typescript_exports.server.Msg.Perf); + } + info(s) { + this.msg(s, typescript_exports.server.Msg.Info); + } + err(s) { + this.msg(s, typescript_exports.server.Msg.Err); + } + startGroup() { + this.inGroup = true; + this.firstInGroup = true; + } + endGroup() { + this.inGroup = false; + } + loggingEnabled() { + return !!this.logFilename || this.traceToConsole; + } + hasLevel(level) { + return this.loggingEnabled() && this.level >= level; + } + msg(s, type = typescript_exports.server.Msg.Err) { + if (!this.canWrite()) return; + s = `[${typescript_exports.server.nowString()}] ${s} +`; + if (!this.inGroup || this.firstInGroup) { + const prefix = Logger.padStringRight(type + " " + this.seq.toString(), " "); + s = prefix + s; + } + this.write(s, type); + if (!this.inGroup) { + this.seq++; + } + } + canWrite() { + return this.fd >= 0 || this.traceToConsole; + } + write(s, _type) { + if (this.fd >= 0) { + const buf = Buffer.from(s); + import_fs.default.writeSync( + this.fd, + buf, + 0, + buf.length, + /*position*/ + null + ); + } + if (this.traceToConsole) { + console.warn(s); + } + } + } + const libDirectory = (0, typescript_exports.getDirectoryPath)((0, typescript_exports.normalizePath)(sys4.getExecutingFilePath())); + const useWatchGuard = process.platform === "win32"; + const originalWatchDirectory = sys4.watchDirectory.bind(sys4); + const logger = createLogger(); + typescript_exports.Debug.loggingHost = { + log(level, s) { + switch (level) { + case typescript_exports.LogLevel.Error: + case typescript_exports.LogLevel.Warning: + return logger.msg(s, typescript_exports.server.Msg.Err); + case typescript_exports.LogLevel.Info: + case typescript_exports.LogLevel.Verbose: + return logger.msg(s, typescript_exports.server.Msg.Info); + } + } + }; + const pending = (0, typescript_exports.createQueue)(); + let canWrite = true; + if (useWatchGuard) { + const currentDrive = extractWatchDirectoryCacheKey( + sys4.resolvePath(sys4.getCurrentDirectory()), + /*currentDriveKey*/ + void 0 + ); + const statusCache = /* @__PURE__ */ new Map(); + sys4.watchDirectory = (path, callback, recursive, options) => { + const cacheKey = extractWatchDirectoryCacheKey(path, currentDrive); + let status = cacheKey && statusCache.get(cacheKey); + if (status === void 0) { + if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { + logger.info(`${cacheKey} for path ${path} not found in cache...`); + } + try { + const args = [(0, typescript_exports.combinePaths)(libDirectory, "watchGuard.js"), path]; + if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { + logger.info(`Starting ${process.execPath} with args:${typescript_exports.server.stringifyIndented(args)}`); + } + import_child_process.default.execFileSync(process.execPath, args, { stdio: "ignore", env: { ELECTRON_RUN_AS_NODE: "1" } }); + status = true; + if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { + logger.info(`WatchGuard for path ${path} returned: OK`); + } + } catch (e) { + status = false; + if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { + logger.info(`WatchGuard for path ${path} returned: ${e.message}`); + } + } + if (cacheKey) { + statusCache.set(cacheKey, status); + } + } else if (logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { + logger.info(`watchDirectory for ${path} uses cached drive information.`); + } + if (status) { + return watchDirectorySwallowingException(path, callback, recursive, options); + } else { + return typescript_exports.noopFileWatcher; + } + }; + } else { + sys4.watchDirectory = watchDirectorySwallowingException; + } + sys4.write = (s) => writeMessage(Buffer.from(s, "utf8")); + sys4.setTimeout = setTimeout; + sys4.clearTimeout = clearTimeout; + sys4.setImmediate = setImmediate; + sys4.clearImmediate = clearImmediate; + if (typeof global !== "undefined" && global.gc) { + sys4.gc = () => { + var _a; + return (_a = global.gc) == null ? void 0 : _a.call(global); + }; + } + const cancellationToken = createCancellationToken(sys4.args); + const localeStr = typescript_exports.server.findArgument("--locale"); + if (localeStr) { + (0, typescript_exports.validateLocaleAndSetLanguage)(localeStr, sys4); + } + const modeOrUnknown = parseServerMode(); + let serverMode; + let unknownServerMode; + if (modeOrUnknown !== void 0) { + if (typeof modeOrUnknown === "number") serverMode = modeOrUnknown; + else unknownServerMode = modeOrUnknown; + } + return { + args: process.argv, + logger, + cancellationToken, + serverMode, + unknownServerMode, + startSession: startNodeSession + }; + function createLogger() { + const cmdLineLogFileName = typescript_exports.server.findArgument("--logFile"); + const cmdLineVerbosity = getLogLevel(typescript_exports.server.findArgument("--logVerbosity")); + const envLogOptions = parseLoggingEnvironmentString(process.env.TSS_LOG); + const unsubstitutedLogFileName = cmdLineLogFileName ? (0, typescript_exports.stripQuotes)(cmdLineLogFileName) : envLogOptions.logToFile ? envLogOptions.file || libDirectory + "/.log" + process.pid.toString() : void 0; + const substitutedLogFileName = unsubstitutedLogFileName ? unsubstitutedLogFileName.replace("PID", process.pid.toString()) : void 0; + const logVerbosity = cmdLineVerbosity || envLogOptions.detailLevel; + return new Logger(substitutedLogFileName, envLogOptions.traceToConsole, logVerbosity); + } + function writeMessage(buf) { + if (!canWrite) { + pending.enqueue(buf); + } else { + canWrite = false; + process.stdout.write(buf, setCanWriteFlagAndWriteMessageIfNecessary); + } + } + function setCanWriteFlagAndWriteMessageIfNecessary() { + canWrite = true; + if (!pending.isEmpty()) { + writeMessage(pending.dequeue()); + } + } + function extractWatchDirectoryCacheKey(path, currentDriveKey) { + path = (0, typescript_exports.normalizeSlashes)(path); + if (isUNCPath(path)) { + const firstSlash = path.indexOf(typescript_exports.directorySeparator, 2); + return firstSlash !== -1 ? (0, typescript_exports.toFileNameLowerCase)(path.substring(0, firstSlash)) : path; + } + const rootLength = (0, typescript_exports.getRootLength)(path); + if (rootLength === 0) { + return currentDriveKey; + } + if (path.charCodeAt(1) === typescript_exports.CharacterCodes.colon && path.charCodeAt(2) === typescript_exports.CharacterCodes.slash) { + return (0, typescript_exports.toFileNameLowerCase)(path.charAt(0)); + } + if (path.charCodeAt(0) === typescript_exports.CharacterCodes.slash && path.charCodeAt(1) !== typescript_exports.CharacterCodes.slash) { + return currentDriveKey; + } + return void 0; + } + function isUNCPath(s) { + return s.length > 2 && s.charCodeAt(0) === typescript_exports.CharacterCodes.slash && s.charCodeAt(1) === typescript_exports.CharacterCodes.slash; + } + function watchDirectorySwallowingException(path, callback, recursive, options) { + try { + return originalWatchDirectory(path, callback, recursive, options); + } catch (e) { + logger.info(`Exception when creating directory watcher: ${e.message}`); + return typescript_exports.noopFileWatcher; + } + } +} +function parseEventPort(eventPortStr) { + const eventPort = eventPortStr === void 0 ? void 0 : parseInt(eventPortStr); + return eventPort !== void 0 && !isNaN(eventPort) ? eventPort : void 0; +} +function startNodeSession(options, logger, cancellationToken) { + const rl = import_readline.default.createInterface({ + input: process.stdin, + output: process.stdout, + terminal: false + }); + const _NodeTypingsInstallerAdapter = class _NodeTypingsInstallerAdapter extends typescript_exports.server.TypingsInstallerAdapter { + constructor(telemetryEnabled2, logger2, host, globalTypingsCacheLocation, typingSafeListLocation2, typesMapLocation2, npmLocation2, validateDefaultNpmLocation2, event) { + super( + telemetryEnabled2, + logger2, + host, + globalTypingsCacheLocation, + event, + _NodeTypingsInstallerAdapter.maxActiveRequestCount + ); + this.typingSafeListLocation = typingSafeListLocation2; + this.typesMapLocation = typesMapLocation2; + this.npmLocation = npmLocation2; + this.validateDefaultNpmLocation = validateDefaultNpmLocation2; + } + createInstallerProcess() { + if (this.logger.hasLevel(typescript_exports.server.LogLevel.requestTime)) { + this.logger.info("Binding..."); + } + const args = [typescript_exports.server.Arguments.GlobalCacheLocation, this.globalTypingsCacheLocation]; + if (this.telemetryEnabled) { + args.push(typescript_exports.server.Arguments.EnableTelemetry); + } + if (this.logger.loggingEnabled() && this.logger.getLogFileName()) { + args.push(typescript_exports.server.Arguments.LogFile, (0, typescript_exports.combinePaths)((0, typescript_exports.getDirectoryPath)((0, typescript_exports.normalizeSlashes)(this.logger.getLogFileName())), `ti-${process.pid}.log`)); + } + if (this.typingSafeListLocation) { + args.push(typescript_exports.server.Arguments.TypingSafeListLocation, this.typingSafeListLocation); + } + if (this.typesMapLocation) { + args.push(typescript_exports.server.Arguments.TypesMapLocation, this.typesMapLocation); + } + if (this.npmLocation) { + args.push(typescript_exports.server.Arguments.NpmLocation, this.npmLocation); + } + if (this.validateDefaultNpmLocation) { + args.push(typescript_exports.server.Arguments.ValidateDefaultNpmLocation); + } + const execArgv = []; + for (const arg of process.execArgv) { + const match = /^--((?:debug|inspect)(?:-brk)?)(?:=(\d+))?$/.exec(arg); + if (match) { + const currentPort = match[2] !== void 0 ? +match[2] : match[1].charAt(0) === "d" ? 5858 : 9229; + execArgv.push(`--${match[1]}=${currentPort + 1}`); + break; + } + } + const typingsInstaller = (0, typescript_exports.combinePaths)((0, typescript_exports.getDirectoryPath)(typescript_exports.sys.getExecutingFilePath()), "typingsInstaller.js"); + this.installer = import_child_process.default.fork(typingsInstaller, args, { execArgv }); + this.installer.on("message", (m) => this.handleMessage(m)); + this.host.setImmediate(() => this.event({ pid: this.installer.pid }, "typingsInstallerPid")); + process.on("exit", () => { + this.installer.kill(); + }); + return this.installer; + } + }; + // This number is essentially arbitrary. Processing more than one typings request + // at a time makes sense, but having too many in the pipe results in a hang + // (see https://github.com/nodejs/node/issues/7657). + // It would be preferable to base our limit on the amount of space left in the + // buffer, but we have yet to find a way to retrieve that value. + _NodeTypingsInstallerAdapter.maxActiveRequestCount = 10; + let NodeTypingsInstallerAdapter = _NodeTypingsInstallerAdapter; + class IOSession extends typescript_exports.server.Session { + constructor() { + const event = (body, eventName) => { + this.event(body, eventName); + }; + const host = typescript_exports.sys; + const typingsInstaller = disableAutomaticTypingAcquisition ? void 0 : new NodeTypingsInstallerAdapter(telemetryEnabled, logger, host, getGlobalTypingsCacheLocation(), typingSafeListLocation, typesMapLocation, npmLocation, validateDefaultNpmLocation, event); + super({ + host, + cancellationToken, + ...options, + typingsInstaller, + byteLength: Buffer.byteLength, + hrtime: process.hrtime, + logger, + canUseEvents: true, + typesMapLocation + }); + this.eventPort = eventPort; + if (this.canUseEvents && this.eventPort) { + const s = import_net.default.connect({ port: this.eventPort }, () => { + this.eventSocket = s; + if (this.socketEventQueue) { + for (const event2 of this.socketEventQueue) { + this.writeToEventSocket(event2.body, event2.eventName); + } + this.socketEventQueue = void 0; + } + }); + } + this.constructed = true; + } + event(body, eventName) { + typescript_exports.Debug.assert(!!this.constructed, "Should only call `IOSession.prototype.event` on an initialized IOSession"); + if (this.canUseEvents && this.eventPort) { + if (!this.eventSocket) { + if (this.logger.hasLevel(typescript_exports.server.LogLevel.verbose)) { + this.logger.info(`eventPort: event "${eventName}" queued, but socket not yet initialized`); + } + (this.socketEventQueue || (this.socketEventQueue = [])).push({ body, eventName }); + return; + } else { + typescript_exports.Debug.assert(this.socketEventQueue === void 0); + this.writeToEventSocket(body, eventName); + } + } else { + super.event(body, eventName); + } + } + writeToEventSocket(body, eventName) { + this.eventSocket.write(typescript_exports.server.formatMessage(typescript_exports.server.toEvent(eventName, body), this.logger, this.byteLength, this.host.newLine), "utf8"); + } + exit() { + var _a; + this.logger.info("Exiting..."); + this.projectService.closeLog(); + (_a = typescript_exports.tracing) == null ? void 0 : _a.stopTracing(); + process.exit(0); + } + listen() { + rl.on("line", (input) => { + const message = input.trim(); + this.onMessage(message); + }); + rl.on("close", () => { + this.exit(); + }); + } + } + class IpcIOSession extends IOSession { + writeMessage(msg) { + const verboseLogging = logger.hasLevel(typescript_exports.server.LogLevel.verbose); + if (verboseLogging) { + const json = JSON.stringify(msg); + logger.info(`${msg.type}:${typescript_exports.server.indent(json)}`); + } + process.send(msg); + } + parseMessage(message) { + return message; + } + toStringMessage(message) { + return JSON.stringify(message, void 0, 2); + } + listen() { + process.on("message", (e) => { + this.onMessage(e); + }); + process.on("disconnect", () => { + this.exit(); + }); + } + } + const eventPort = parseEventPort(typescript_exports.server.findArgument("--eventPort")); + const typingSafeListLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.TypingSafeListLocation); + const typesMapLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.TypesMapLocation) || (0, typescript_exports.combinePaths)((0, typescript_exports.getDirectoryPath)(typescript_exports.sys.getExecutingFilePath()), "typesMap.json"); + const npmLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.NpmLocation); + const validateDefaultNpmLocation = typescript_exports.server.hasArgument(typescript_exports.server.Arguments.ValidateDefaultNpmLocation); + const disableAutomaticTypingAcquisition = typescript_exports.server.hasArgument("--disableAutomaticTypingAcquisition"); + const useNodeIpc = typescript_exports.server.hasArgument("--useNodeIpc"); + const telemetryEnabled = typescript_exports.server.hasArgument(typescript_exports.server.Arguments.EnableTelemetry); + const commandLineTraceDir = typescript_exports.server.findArgument("--traceDirectory"); + const traceDir = commandLineTraceDir ? (0, typescript_exports.stripQuotes)(commandLineTraceDir) : process.env.TSS_TRACE; + if (traceDir) { + (0, typescript_exports.startTracing)("server", traceDir); + } + const ioSession = useNodeIpc ? new IpcIOSession() : new IOSession(); + process.on("uncaughtException", (err) => { + ioSession.logError(err, "unknown"); + }); + process.noAsar = true; + ioSession.listen(); + function getGlobalTypingsCacheLocation() { + switch (process.platform) { + case "win32": { + const basePath = process.env.LOCALAPPDATA || process.env.APPDATA || import_os.default.homedir && import_os.default.homedir() || process.env.USERPROFILE || process.env.HOMEDRIVE && process.env.HOMEPATH && (0, typescript_exports.normalizeSlashes)(process.env.HOMEDRIVE + process.env.HOMEPATH) || import_os.default.tmpdir(); + return (0, typescript_exports.combinePaths)((0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(basePath), "Microsoft/TypeScript"), typescript_exports.versionMajorMinor); + } + case "openbsd": + case "freebsd": + case "netbsd": + case "darwin": + case "linux": + case "android": { + const cacheLocation = getNonWindowsCacheLocation(process.platform === "darwin"); + return (0, typescript_exports.combinePaths)((0, typescript_exports.combinePaths)(cacheLocation, "typescript"), typescript_exports.versionMajorMinor); + } + default: + return typescript_exports.Debug.fail(`unsupported platform '${process.platform}'`); + } + } + function getNonWindowsCacheLocation(platformIsDarwin) { + if (process.env.XDG_CACHE_HOME) { + return process.env.XDG_CACHE_HOME; + } + const usersDir = platformIsDarwin ? "Users" : "home"; + const homePath = import_os.default.homedir && import_os.default.homedir() || process.env.HOME || (process.env.LOGNAME || process.env.USER) && `/${usersDir}/${process.env.LOGNAME || process.env.USER}` || import_os.default.tmpdir(); + const cacheFolder = platformIsDarwin ? "Library/Caches" : ".cache"; + return (0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(homePath), cacheFolder); + } +} +function pipeExists(name) { + return import_fs.default.existsSync(name); +} +function createCancellationToken(args) { + let cancellationPipeName; + for (let i = 0; i < args.length - 1; i++) { + if (args[i] === "--cancellationPipeName") { + cancellationPipeName = args[i + 1]; + break; + } + } + if (!cancellationPipeName) { + return typescript_exports.server.nullCancellationToken; + } + if (cancellationPipeName.charAt(cancellationPipeName.length - 1) === "*") { + const namePrefix = cancellationPipeName.slice(0, -1); + if (namePrefix.length === 0 || namePrefix.includes("*")) { + throw new Error("Invalid name for template cancellation pipe: it should have length greater than 2 characters and contain only one '*'."); + } + let perRequestPipeName; + let currentRequestId; + return { + isCancellationRequested: () => perRequestPipeName !== void 0 && pipeExists(perRequestPipeName), + setRequest(requestId) { + currentRequestId = requestId; + perRequestPipeName = namePrefix + requestId; + }, + resetRequest(requestId) { + if (currentRequestId !== requestId) { + throw new Error(`Mismatched request id, expected ${currentRequestId}, actual ${requestId}`); + } + perRequestPipeName = void 0; + } + }; + } else { + return { + isCancellationRequested: () => pipeExists(cancellationPipeName), + setRequest: (_requestId) => void 0, + resetRequest: (_requestId) => void 0 + }; + } +} + +// src/tsserver/server.ts +function findArgumentStringArray(argName) { + const arg = typescript_exports.server.findArgument(argName); + if (arg === void 0) { + return typescript_exports.emptyArray; + } + return arg.split(",").filter((name) => name !== ""); +} +function start({ args, logger, cancellationToken, serverMode, unknownServerMode, startSession: startServer }, platform) { + logger.info(`Starting TS Server`); + logger.info(`Version: ${typescript_exports.version}`); + logger.info(`Arguments: ${args.join(" ")}`); + logger.info(`Platform: ${platform} NodeVersion: ${process.version} CaseSensitive: ${typescript_exports.sys.useCaseSensitiveFileNames}`); + logger.info(`ServerMode: ${serverMode} hasUnknownServerMode: ${unknownServerMode}`); + typescript_exports.setStackTraceLimit(); + if (typescript_exports.Debug.isDebugging) { + typescript_exports.Debug.enableDebugInfo(); + } + if (typescript_exports.sys.tryEnableSourceMapsForHost && /^development$/i.test(typescript_exports.sys.getEnvironmentVariable("NODE_ENV"))) { + typescript_exports.sys.tryEnableSourceMapsForHost(); + } + console.log = (...args2) => logger.msg(args2.length === 1 ? args2[0] : args2.join(", "), typescript_exports.server.Msg.Info); + console.warn = (...args2) => logger.msg(args2.length === 1 ? args2[0] : args2.join(", "), typescript_exports.server.Msg.Err); + console.error = (...args2) => logger.msg(args2.length === 1 ? args2[0] : args2.join(", "), typescript_exports.server.Msg.Err); + startServer( + { + globalPlugins: findArgumentStringArray("--globalPlugins"), + pluginProbeLocations: findArgumentStringArray("--pluginProbeLocations"), + allowLocalPluginLoads: typescript_exports.server.hasArgument("--allowLocalPluginLoads"), + useSingleInferredProject: typescript_exports.server.hasArgument("--useSingleInferredProject"), + useInferredProjectPerProjectRoot: typescript_exports.server.hasArgument("--useInferredProjectPerProjectRoot"), + suppressDiagnosticEvents: typescript_exports.server.hasArgument("--suppressDiagnosticEvents"), + noGetErrOnBackgroundUpdate: typescript_exports.server.hasArgument("--noGetErrOnBackgroundUpdate"), + canUseWatchEvents: typescript_exports.server.hasArgument("--canUseWatchEvents"), + serverMode + }, + logger, + cancellationToken + ); +} +typescript_exports.setStackTraceLimit(); +start(initializeNodeSystem(), import_os2.default.platform()); +//# sourceMappingURL=_tsserver.js.map diff --git a/.pnpm-store/v11/files/11/bff8613a2c7d073056f1c223b1eebd712fa782ee2699e75a33247a0953707a35f81fdf731cc3aebda652acbf1ef70ab0cbec1c0af152a7970739a6a713682c b/.pnpm-store/v11/files/11/bff8613a2c7d073056f1c223b1eebd712fa782ee2699e75a33247a0953707a35f81fdf731cc3aebda652acbf1ef70ab0cbec1c0af152a7970739a6a713682c new file mode 100644 index 00000000..1543b83f --- /dev/null +++ b/.pnpm-store/v11/files/11/bff8613a2c7d073056f1c223b1eebd712fa782ee2699e75a33247a0953707a35f81fdf731cc3aebda652acbf1ef70ab0cbec1c0af152a7970739a6a713682c @@ -0,0 +1,4 @@ +/// +import { Transform } from "stream"; +export declare const getTapParser: () => any; +export declare const getTapJSONParser: () => Transform; diff --git a/.pnpm-store/v11/files/11/c522d39409385e27b97cf4ca840234c26e4507b424be5c9dee77b519d84175b226819a2e9f0cc85aa4c577d4822c57fa9aabd39c532aa888a2b6b655504481 b/.pnpm-store/v11/files/11/c522d39409385e27b97cf4ca840234c26e4507b424be5c9dee77b519d84175b226819a2e9f0cc85aa4c577d4822c57fa9aabd39c532aa888a2b6b655504481 new file mode 100644 index 00000000..63adfe4a --- /dev/null +++ b/.pnpm-store/v11/files/11/c522d39409385e27b97cf4ca840234c26e4507b424be5c9dee77b519d84175b226819a2e9f0cc85aa4c577d4822c57fa9aabd39c532aa888a2b6b655504481 @@ -0,0 +1,12 @@ +module['exports'] = { + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red', +}; diff --git a/.pnpm-store/v11/files/11/c817a1cbc2feadc6d8666d62e9de2670f83d0e915f2f804a7e30cbfe01be7d03286fa80fc76db119376763d56b37ed16a80f5f4bb70791f76f9076907f4ea6 b/.pnpm-store/v11/files/11/c817a1cbc2feadc6d8666d62e9de2670f83d0e915f2f804a7e30cbfe01be7d03286fa80fc76db119376763d56b37ed16a80f5f4bb70791f76f9076907f4ea6 new file mode 100644 index 00000000..c9a1e15e --- /dev/null +++ b/.pnpm-store/v11/files/11/c817a1cbc2feadc6d8666d62e9de2670f83d0e915f2f804a7e30cbfe01be7d03286fa80fc76db119376763d56b37ed16a80f5f4bb70791f76f9076907f4ea6 @@ -0,0 +1,298 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.8](https://github.com/minimistjs/minimist/compare/v1.2.7...v1.2.8) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] Fix long option followed by single dash [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) +- [Fix] Fix handling of short option with non-trivial equals [`#5`](https://github.com/minimistjs/minimist/issues/5) +- [Tests] Remove duplicate test [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- Merge tag 'v0.2.3' [`a026794`](https://github.com/minimistjs/minimist/commit/a0267947c7870fc5847cf2d437fbe33f392767da) +- [eslint] fix indentation and whitespace [`5368ca4`](https://github.com/minimistjs/minimist/commit/5368ca4147e974138a54cc0dc4cea8f756546b70) +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`62fde7d`](https://github.com/minimistjs/minimist/commit/62fde7d935f83417fb046741531a9e2346a36976) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`3124ed3`](https://github.com/minimistjs/minimist/commit/3124ed3e46306301ebb3c834874ce0241555c2c4) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) +- [actions] Avoid 0.6 tests due to build failures [`ba92fe6`](https://github.com/minimistjs/minimist/commit/ba92fe6ebbdc0431cca9a2ea8f27beb492f5e4ec) +- [Dev Deps] update `tape` [`950eaa7`](https://github.com/minimistjs/minimist/commit/950eaa74f112e04d23e9c606c67472c46739b473) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) +- Merge tag 'v0.2.2' [`980d7ac`](https://github.com/minimistjs/minimist/commit/980d7ac61a0b4bd552711251ac107d506b23e41f) + +## [v1.2.7](https://github.com/minimistjs/minimist/compare/v1.2.6...v1.2.7) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`0ebf4eb`](https://github.com/minimistjs/minimist/commit/0ebf4ebcd5f7787a5524d31a849ef41316b83c3c) +- [actions] add reusable workflows [`e115b63`](https://github.com/minimistjs/minimist/commit/e115b63fa9d3909f33b00a2db647ff79068388de) +- [eslint] add eslint; rules to enable later are warnings [`f58745b`](https://github.com/minimistjs/minimist/commit/f58745b9bb84348e1be72af7dbba5840c7c13013) +- [Dev Deps] switch from `covert` to `nyc` [`ab03356`](https://github.com/minimistjs/minimist/commit/ab033567b9c8b31117cb026dc7f1e592ce455c65) +- [readme] rename and add badges [`236f4a0`](https://github.com/minimistjs/minimist/commit/236f4a07e4ebe5ee44f1496ec6974991ab293ffd) +- [meta] create FUNDING.yml; add `funding` in package.json [`783a49b`](https://github.com/minimistjs/minimist/commit/783a49bfd47e8335d3098a8cac75662cf71eb32a) +- [meta] use `npmignore` to autogenerate an npmignore file [`f81ece6`](https://github.com/minimistjs/minimist/commit/f81ece6aaec2fa14e69ff4f1e0407a8c4e2635a2) +- Only apps should have lockfiles [`56cad44`](https://github.com/minimistjs/minimist/commit/56cad44c7f879b9bb5ec18fcc349308024a89bfc) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`49c5f9f`](https://github.com/minimistjs/minimist/commit/49c5f9fb7e6a92db9eb340cc679de92fb3aacded) +- [Tests] add `aud` in `posttest` [`228ae93`](https://github.com/minimistjs/minimist/commit/228ae938f3cd9db9dfd8bd7458b076a7b2aef280) +- [meta] add `safe-publish-latest` [`01fc23f`](https://github.com/minimistjs/minimist/commit/01fc23f5104f85c75059972e01dd33796ab529ff) +- [meta] update repo URLs [`6b164c7`](https://github.com/minimistjs/minimist/commit/6b164c7d68e0b6bf32f894699effdfb7c63041dd) + +## [v1.2.6](https://github.com/minimistjs/minimist/compare/v1.2.5...v1.2.6) - 2022-03-21 + +### Commits + +- test from prototype pollution PR [`bc8ecee`](https://github.com/minimistjs/minimist/commit/bc8ecee43875261f4f17eb20b1243d3ed15e70eb) +- isConstructorOrProto adapted from PR [`c2b9819`](https://github.com/minimistjs/minimist/commit/c2b981977fa834b223b408cfb860f933c9811e4d) +- security notice for additional prototype pollution issue [`ef88b93`](https://github.com/minimistjs/minimist/commit/ef88b9325f77b5ee643ccfc97e2ebda577e4c4e2) + +## [v1.2.5](https://github.com/minimistjs/minimist/compare/v1.2.4...v1.2.5) - 2020-03-12 + +## [v1.2.4](https://github.com/minimistjs/minimist/compare/v1.2.3...v1.2.4) - 2020-03-11 + +### Commits + +- security notice [`4cf1354`](https://github.com/minimistjs/minimist/commit/4cf1354839cb972e38496d35e12f806eea92c11f) +- additional test for constructor prototype pollution [`1043d21`](https://github.com/minimistjs/minimist/commit/1043d212c3caaf871966e710f52cfdf02f9eea4b) + +## [v1.2.3](https://github.com/minimistjs/minimist/compare/v1.2.2...v1.2.3) - 2020-03-10 + +### Commits + +- more failing proto pollution tests [`13c01a5`](https://github.com/minimistjs/minimist/commit/13c01a5327736903704984b7f65616b8476850cc) +- even more aggressive checks for protocol pollution [`38a4d1c`](https://github.com/minimistjs/minimist/commit/38a4d1caead72ef99e824bb420a2528eec03d9ab) + +## [v1.2.2](https://github.com/minimistjs/minimist/compare/v1.2.1...v1.2.2) - 2020-03-10 + +### Commits + +- failing test for protocol pollution [`0efed03`](https://github.com/minimistjs/minimist/commit/0efed0340ec8433638758f7ca0c77cb20a0bfbab) +- cleanup [`67d3722`](https://github.com/minimistjs/minimist/commit/67d3722413448d00a62963d2d30c34656a92d7e2) +- console.dir -> console.log [`47acf72`](https://github.com/minimistjs/minimist/commit/47acf72c715a630bf9ea013867f47f1dd69dfc54) +- don't assign onto __proto__ [`63e7ed0`](https://github.com/minimistjs/minimist/commit/63e7ed05aa4b1889ec2f3b196426db4500cbda94) + +## [v1.2.1](https://github.com/minimistjs/minimist/compare/v1.2.0...v1.2.1) - 2020-03-10 + +### Merged + +- move the `opts['--']` example back where it belongs [`#63`](https://github.com/minimistjs/minimist/pull/63) + +### Commits + +- add test [`6be5dae`](https://github.com/minimistjs/minimist/commit/6be5dae35a32a987bcf4137fcd6c19c5200ee909) +- fix bad boolean regexp [`ac3fc79`](https://github.com/minimistjs/minimist/commit/ac3fc796e63b95128fdbdf67ea7fad71bd59aa76) + +## [v1.2.0](https://github.com/minimistjs/minimist/compare/v1.1.3...v1.2.0) - 2015-08-24 + +### Commits + +- failing -k=v short test [`63416b8`](https://github.com/minimistjs/minimist/commit/63416b8cd1d0d70e4714564cce465a36e4dd26d7) +- kv short fix [`6bbe145`](https://github.com/minimistjs/minimist/commit/6bbe14529166245e86424f220a2321442fe88dc3) +- failing kv short test [`f72ab7f`](https://github.com/minimistjs/minimist/commit/f72ab7f4572adc52902c9b6873cc969192f01b10) +- fixed kv test [`f5a48c3`](https://github.com/minimistjs/minimist/commit/f5a48c3e50e40ca54f00c8e84de4b4d6e9897fa8) +- enforce space between arg key and value [`86b321a`](https://github.com/minimistjs/minimist/commit/86b321affe648a8e016c095a4f0efa9d9074f502) + +## [v1.1.3](https://github.com/minimistjs/minimist/compare/v1.1.2...v1.1.3) - 2015-08-06 + +### Commits + +- add failing test - boolean alias array [`0fa3c5b`](https://github.com/minimistjs/minimist/commit/0fa3c5b3dd98551ddecf5392831b4c21211743fc) +- fix boolean values with multiple aliases [`9c0a6e7`](https://github.com/minimistjs/minimist/commit/9c0a6e7de25a273b11bbf9a7464f0bd833779795) + +## [v1.1.2](https://github.com/minimistjs/minimist/compare/v1.1.1...v1.1.2) - 2015-07-22 + +### Commits + +- Convert boolean arguments to boolean values [`8f3dc27`](https://github.com/minimistjs/minimist/commit/8f3dc27cf833f1d54671b6d0bcb55c2fe19672a9) +- use non-ancient npm, node 0.12 and iojs [`61ed1d0`](https://github.com/minimistjs/minimist/commit/61ed1d034b9ec7282764ce76f3992b1a0b4906ae) +- an older npm for 0.8 [`25cf778`](https://github.com/minimistjs/minimist/commit/25cf778b1220e7838a526832ad6972f75244054f) + +## [v1.1.1](https://github.com/minimistjs/minimist/compare/v1.1.0...v1.1.1) - 2015-03-10 + +### Commits + +- check that they type of a value is a boolean, not just that it is currently set to a boolean [`6863198`](https://github.com/minimistjs/minimist/commit/6863198e36139830ff1f20ffdceaddd93f2c1db9) +- upgrade tape, fix type issues from old tape version [`806712d`](https://github.com/minimistjs/minimist/commit/806712df91604ed02b8e39aa372b84aea659ee34) +- test for setting a boolean to a null default [`8c444fe`](https://github.com/minimistjs/minimist/commit/8c444fe89384ded7d441c120915ea60620b01dd3) +- if the previous value was a boolean, without an default (or with an alias) don't make an array either [`e5f419a`](https://github.com/minimistjs/minimist/commit/e5f419a3b5b3bc3f9e5ac71b7040621af70ed2dd) + +## [v1.1.0](https://github.com/minimistjs/minimist/compare/v1.0.0...v1.1.0) - 2014-08-10 + +### Commits + +- add support for handling "unknown" options not registered with the parser. [`6f3cc5d`](https://github.com/minimistjs/minimist/commit/6f3cc5d4e84524932a6ef2ce3592acc67cdd4383) +- reformat package.json [`02ed371`](https://github.com/minimistjs/minimist/commit/02ed37115194d3697ff358e8e25e5e66bab1d9f8) +- coverage script [`e5531ba`](https://github.com/minimistjs/minimist/commit/e5531ba0479da3b8138d3d8cac545d84ccb1c8df) +- extra fn to get 100% coverage again [`a6972da`](https://github.com/minimistjs/minimist/commit/a6972da89e56bf77642f8ec05a13b6558db93498) + +## [v1.0.0](https://github.com/minimistjs/minimist/compare/v0.2.3...v1.0.0) - 2014-08-10 + +### Commits + +- added stopEarly option [`471c7e4`](https://github.com/minimistjs/minimist/commit/471c7e4a7e910fc7ad8f9df850a186daf32c64e9) +- fix list [`fef6ae7`](https://github.com/minimistjs/minimist/commit/fef6ae79c38b9dc1c49569abb7cd04eb965eac5e) + +## [v0.2.3](https://github.com/minimistjs/minimist/compare/v0.2.2...v0.2.3) - 2023-02-09 + +### Merged + +- [Fix] Fix long option followed by single dash [`#17`](https://github.com/minimistjs/minimist/pull/17) +- [Tests] Remove duplicate test [`#12`](https://github.com/minimistjs/minimist/pull/12) +- [Fix] opt.string works with multiple aliases [`#10`](https://github.com/minimistjs/minimist/pull/10) + +### Fixed + +- [Fix] Fix long option followed by single dash (#17) [`#15`](https://github.com/minimistjs/minimist/issues/15) +- [Tests] Remove duplicate test (#12) [`#8`](https://github.com/minimistjs/minimist/issues/8) +- [Fix] opt.string works with multiple aliases (#10) [`#9`](https://github.com/minimistjs/minimist/issues/9) + +### Commits + +- [eslint] fix indentation and whitespace [`e5f5067`](https://github.com/minimistjs/minimist/commit/e5f5067259ceeaf0b098d14bec910f87e58708c7) +- [eslint] more cleanup [`36ac5d0`](https://github.com/minimistjs/minimist/commit/36ac5d0d95e4947d074e5737d94814034ca335d1) +- [eslint] fix indentation [`34b0f1c`](https://github.com/minimistjs/minimist/commit/34b0f1ccaa45183c3c4f06a91f9b405180a6f982) +- isConstructorOrProto adapted from PR [`ef9153f`](https://github.com/minimistjs/minimist/commit/ef9153fc52b6cea0744b2239921c5dcae4697f11) +- [Dev Deps] update `@ljharb/eslint-config`, `aud` [`098873c`](https://github.com/minimistjs/minimist/commit/098873c213cdb7c92e55ae1ef5aa1af3a8192a79) +- [Dev Deps] add missing `npmignore` dev dep [`3226afa`](https://github.com/minimistjs/minimist/commit/3226afaf09e9d127ca369742437fe6e88f752d6b) + +## [v0.2.2](https://github.com/minimistjs/minimist/compare/v0.2.1...v0.2.2) - 2022-10-10 + +### Commits + +- [meta] add `auto-changelog` [`73923d2`](https://github.com/minimistjs/minimist/commit/73923d223553fca08b1ba77e3fbc2a492862ae4c) +- [actions] add reusable workflows [`d80727d`](https://github.com/minimistjs/minimist/commit/d80727df77bfa9e631044d7f16368d8f09242c91) +- [eslint] add eslint; rules to enable later are warnings [`48bc06a`](https://github.com/minimistjs/minimist/commit/48bc06a1b41f00e9cdf183db34f7a51ba70e98d4) +- [readme] rename and add badges [`5df0fe4`](https://github.com/minimistjs/minimist/commit/5df0fe49211bd09a3636f8686a7cb3012c3e98f0) +- [Dev Deps] switch from `covert` to `nyc` [`a48b128`](https://github.com/minimistjs/minimist/commit/a48b128fdb8d427dfb20a15273f83e38d97bef07) +- [Dev Deps] update `covert`, `tape`; remove unnecessary `tap` [`f0fb958`](https://github.com/minimistjs/minimist/commit/f0fb958e9a1fe980cdffc436a211b0bda58f621b) +- [meta] create FUNDING.yml; add `funding` in package.json [`3639e0c`](https://github.com/minimistjs/minimist/commit/3639e0c819359a366387e425ab6eabf4c78d3caa) +- [meta] use `npmignore` to autogenerate an npmignore file [`be2e038`](https://github.com/minimistjs/minimist/commit/be2e038c342d8333b32f0fde67a0026b79c8150e) +- Only apps should have lockfiles [`282b570`](https://github.com/minimistjs/minimist/commit/282b570e7489d01b03f2d6d3dabf79cd3e5f84cf) +- [meta] add `safe-publish-latest` [`4b927de`](https://github.com/minimistjs/minimist/commit/4b927de696d561c636b4f43bf49d4597cb36d6d6) +- [Tests] add `aud` in `posttest` [`b32d9bd`](https://github.com/minimistjs/minimist/commit/b32d9bd0ab340f4e9f8c3a97ff2a4424f25fab8c) +- [meta] update repo URLs [`f9fdfc0`](https://github.com/minimistjs/minimist/commit/f9fdfc032c54884d9a9996a390c63cd0719bbe1a) + +## [v0.2.1](https://github.com/minimistjs/minimist/compare/v0.2.0...v0.2.1) - 2020-03-12 + +## [v0.2.0](https://github.com/minimistjs/minimist/compare/v0.1.0...v0.2.0) - 2014-06-19 + +### Commits + +- support all-boolean mode [`450a97f`](https://github.com/minimistjs/minimist/commit/450a97f6e2bc85c7a4a13185c19a818d9a5ebe69) + +## [v0.1.0](https://github.com/minimistjs/minimist/compare/v0.0.10...v0.1.0) - 2014-05-12 + +### Commits + +- Provide a mechanism to segregate -- arguments [`ce4a1e6`](https://github.com/minimistjs/minimist/commit/ce4a1e63a7e8d5ab88d2a3768adefa6af98a445a) +- documented argv['--'] [`14db0e6`](https://github.com/minimistjs/minimist/commit/14db0e6dbc6d2b9e472adaa54dad7004b364634f) +- Adding a test-case for notFlags segregation [`715c1e3`](https://github.com/minimistjs/minimist/commit/715c1e3714be223f998f6c537af6b505f0236c16) + +## [v0.0.10](https://github.com/minimistjs/minimist/compare/v0.0.9...v0.0.10) - 2014-05-11 + +### Commits + +- dedicated boolean test [`46e448f`](https://github.com/minimistjs/minimist/commit/46e448f9f513cfeb2bcc8b688b9b47ba1e515c2b) +- dedicated num test [`9bf2d36`](https://github.com/minimistjs/minimist/commit/9bf2d36f1d3b8795be90b8f7de0a937f098aa394) +- aliased values treated as strings [`1ab743b`](https://github.com/minimistjs/minimist/commit/1ab743bad4484d69f1259bed42f9531de01119de) +- cover the case of already numbers, at 100% coverage [`b2bb044`](https://github.com/minimistjs/minimist/commit/b2bb04436599d77a2ce029e8e555e25b3aa55d13) +- another test for higher coverage [`3662624`](https://github.com/minimistjs/minimist/commit/3662624be976d5489d486a856849c048d13be903) + +## [v0.0.9](https://github.com/minimistjs/minimist/compare/v0.0.8...v0.0.9) - 2014-05-08 + +### Commits + +- Eliminate `longest` fn. [`824f642`](https://github.com/minimistjs/minimist/commit/824f642038d1b02ede68b6261d1d65163390929a) + +## [v0.0.8](https://github.com/minimistjs/minimist/compare/v0.0.7...v0.0.8) - 2014-02-20 + +### Commits + +- return '' if flag is string and empty [`fa63ed4`](https://github.com/minimistjs/minimist/commit/fa63ed4651a4ef4eefddce34188e0d98d745a263) +- handle joined single letters [`66c248f`](https://github.com/minimistjs/minimist/commit/66c248f0241d4d421d193b022e9e365f11178534) + +## [v0.0.7](https://github.com/minimistjs/minimist/compare/v0.0.6...v0.0.7) - 2014-02-08 + +### Commits + +- another swap of .test for .match [`d1da408`](https://github.com/minimistjs/minimist/commit/d1da40819acbe846d89a5c02721211e3c1260dde) + +## [v0.0.6](https://github.com/minimistjs/minimist/compare/v0.0.5...v0.0.6) - 2014-02-08 + +### Commits + +- use .test() instead of .match() to not crash on non-string values in the arguments array [`7e0d1ad`](https://github.com/minimistjs/minimist/commit/7e0d1add8c9e5b9b20a4d3d0f9a94d824c578da1) + +## [v0.0.5](https://github.com/minimistjs/minimist/compare/v0.0.4...v0.0.5) - 2013-09-18 + +### Commits + +- Improve '--' handling. [`b11822c`](https://github.com/minimistjs/minimist/commit/b11822c09cc9d2460f30384d12afc0b953c037a4) + +## [v0.0.4](https://github.com/minimistjs/minimist/compare/v0.0.3...v0.0.4) - 2013-09-17 + +## [v0.0.3](https://github.com/minimistjs/minimist/compare/v0.0.2...v0.0.3) - 2013-09-12 + +### Commits + +- failing test for single dash preceeding a double dash [`b465514`](https://github.com/minimistjs/minimist/commit/b465514b82c9ae28972d714facd951deb2ad762b) +- fix for the dot test [`6a095f1`](https://github.com/minimistjs/minimist/commit/6a095f1d364c8fab2d6753d2291a0649315d297a) + +## [v0.0.2](https://github.com/minimistjs/minimist/compare/v0.0.1...v0.0.2) - 2013-08-28 + +### Commits + +- allow dotted aliases & defaults [`321c33e`](https://github.com/minimistjs/minimist/commit/321c33e755485faaeb44eeb1c05d33b2e0a5a7c4) +- use a better version of ff [`e40f611`](https://github.com/minimistjs/minimist/commit/e40f61114cf7be6f7947f7b3eed345853a67dbbb) + +## [v0.0.1](https://github.com/minimistjs/minimist/compare/v0.0.0...v0.0.1) - 2013-06-25 + +### Commits + +- remove trailing commas [`6ff0fa0`](https://github.com/minimistjs/minimist/commit/6ff0fa055064f15dbe06d50b89d5173a6796e1db) + +## v0.0.0 - 2013-06-25 + +### Commits + +- half of the parse test ported [`3079326`](https://github.com/minimistjs/minimist/commit/307932601325087de6cf94188eb798ffc4f3088a) +- stripped down code and a passing test from optimist [`7cced88`](https://github.com/minimistjs/minimist/commit/7cced88d82e399d1a03ed23eb667f04d3f320d10) +- ported parse tests completely over [`9448754`](https://github.com/minimistjs/minimist/commit/944875452e0820df6830b1408c26a0f7d3e1db04) +- docs, package.json [`a5bf46a`](https://github.com/minimistjs/minimist/commit/a5bf46ac9bb3bd114a9c340276c62c1091e538d5) +- move more short tests into short.js [`503edb5`](https://github.com/minimistjs/minimist/commit/503edb5c41d89c0d40831ee517154fc13b0f18b9) +- default bool test was wrong, not the code [`1b9f5db`](https://github.com/minimistjs/minimist/commit/1b9f5db4741b49962846081b68518de824992097) +- passing long tests ripped out of parse.js [`7972c4a`](https://github.com/minimistjs/minimist/commit/7972c4aff1f4803079e1668006658e2a761a0428) +- badges [`84c0370`](https://github.com/minimistjs/minimist/commit/84c037063664d42878aace715fe6572ce01b6f3b) +- all the tests now ported, some failures [`64239ed`](https://github.com/minimistjs/minimist/commit/64239edfe92c711c4eb0da254fcdfad2a5fdb605) +- failing short test [`f8a5341`](https://github.com/minimistjs/minimist/commit/f8a534112dd1138d2fad722def56a848480c446f) +- fixed the numeric test [`6b034f3`](https://github.com/minimistjs/minimist/commit/6b034f37c79342c60083ed97fd222e16928aac51) diff --git a/.pnpm-store/v11/files/11/cf62962dd832d1d98499b8448efba0b4357eb80f3996473f800e7aa5673900d5d30559e331d45e04cff15b0ffddae129ef3f2478f1079aff20257fb9da61a8 b/.pnpm-store/v11/files/11/cf62962dd832d1d98499b8448efba0b4357eb80f3996473f800e7aa5673900d5d30559e331d45e04cff15b0ffddae129ef3f2478f1079aff20257fb9da61a8 new file mode 100644 index 00000000..a42a7217 --- /dev/null +++ b/.pnpm-store/v11/files/11/cf62962dd832d1d98499b8448efba0b4357eb80f3996473f800e7aa5673900d5d30559e331d45e04cff15b0ffddae129ef3f2478f1079aff20257fb9da61a8 @@ -0,0 +1,13 @@ +# "webpack" watch plugin + +For use with `webpack --watch`. + +When `webpack -w` sees a change and starts compiling, it writes + +> "(Currently indeterminate)." + +to stdout. When it's done compiling, it writes + +> "Asset Size Chunks Chunk Names" + +to stdout. This is how we hook into `webpack -w`. \ No newline at end of file diff --git a/.pnpm-store/v11/files/11/ef75f84892ade8a6d1a097586f2188c5278b08d5602de48cce597fcb9ac1d933bf18e98b03968ea674c15e619efda5c6421d9f8ebe5f6da3bc03dbd560590c b/.pnpm-store/v11/files/11/ef75f84892ade8a6d1a097586f2188c5278b08d5602de48cce597fcb9ac1d933bf18e98b03968ea674c15e619efda5c6421d9f8ebe5f6da3bc03dbd560590c new file mode 100644 index 00000000..d7a786e7 --- /dev/null +++ b/.pnpm-store/v11/files/11/ef75f84892ade8a6d1a097586f2188c5278b08d5602de48cce597fcb9ac1d933bf18e98b03968ea674c15e619efda5c6421d9f8ebe5f6da3bc03dbd560590c @@ -0,0 +1,339 @@ +'use strict'; + +/** +* Nanomatch compilers +*/ + +module.exports = function(nanomatch, options) { + function slash() { + if (options && typeof options.slash === 'string') { + return options.slash; + } + if (options && typeof options.slash === 'function') { + return options.slash.call(nanomatch); + } + return '\\\\/'; + } + + function star() { + if (options && typeof options.star === 'string') { + return options.star; + } + if (options && typeof options.star === 'function') { + return options.star.call(nanomatch); + } + return '[^' + slash() + ']*?'; + } + + var ast = nanomatch.ast = nanomatch.parser.ast; + ast.state = nanomatch.parser.state; + nanomatch.compiler.state = ast.state; + nanomatch.compiler + + /** + * Negation / escaping + */ + + .set('not', function(node) { + var prev = this.prev(); + if (this.options.nonegate === true || prev.type !== 'bos') { + return this.emit('\\' + node.val, node); + } + return this.emit(node.val, node); + }) + .set('escape', function(node) { + if (this.options.unescape && /^[-\w_.]/.test(node.val)) { + return this.emit(node.val, node); + } + return this.emit('\\' + node.val, node); + }) + .set('quoted', function(node) { + return this.emit(node.val, node); + }) + + /** + * Regex + */ + + .set('dollar', function(node) { + if (node.parent.type === 'bracket') { + return this.emit(node.val, node); + } + return this.emit('\\' + node.val, node); + }) + + /** + * Dot: "." + */ + + .set('dot', function(node) { + if (node.dotfiles === true) this.dotfiles = true; + return this.emit('\\' + node.val, node); + }) + + /** + * Slashes: "/" and "\" + */ + + .set('backslash', function(node) { + return this.emit(node.val, node); + }) + .set('slash', function(node, nodes, i) { + var val = '[' + slash() + ']'; + var parent = node.parent; + var prev = this.prev(); + + // set "node.hasSlash" to true on all ancestor parens nodes + while (parent.type === 'paren' && !parent.hasSlash) { + parent.hasSlash = true; + parent = parent.parent; + } + + if (prev.addQmark) { + val += '?'; + } + + // word boundary + if (node.rest.slice(0, 2) === '\\b') { + return this.emit(val, node); + } + + // globstars + if (node.parsed === '**' || node.parsed === './**') { + this.output = '(?:' + this.output; + return this.emit(val + ')?', node); + } + + // negation + if (node.parsed === '!**' && this.options.nonegate !== true) { + return this.emit(val + '?\\b', node); + } + return this.emit(val, node); + }) + + /** + * Square brackets + */ + + .set('bracket', function(node) { + var close = node.close; + var open = !node.escaped ? '[' : '\\['; + var negated = node.negated; + var inner = node.inner; + var val = node.val; + + if (node.escaped === true) { + inner = inner.replace(/\\?(\W)/g, '\\$1'); + negated = ''; + } + + if (inner === ']-') { + inner = '\\]\\-'; + } + + if (negated && inner.indexOf('.') === -1) { + inner += '.'; + } + if (negated && inner.indexOf('/') === -1) { + inner += '/'; + } + + val = open + negated + inner + close; + return this.emit(val, node); + }) + + /** + * Square: "[.]" (only matches a single character in brackets) + */ + + .set('square', function(node) { + var val = (/^\W/.test(node.val) ? '\\' : '') + node.val; + return this.emit(val, node); + }) + + /** + * Question mark: "?" + */ + + .set('qmark', function(node) { + var prev = this.prev(); + // don't use "slash" variable so that we always avoid + // matching backslashes and slashes with a qmark + var val = '[^.\\\\/]'; + if (this.options.dot || (prev.type !== 'bos' && prev.type !== 'slash')) { + val = '[^\\\\/]'; + } + + if (node.parsed.slice(-1) === '(') { + var ch = node.rest.charAt(0); + if (ch === '!' || ch === '=' || ch === ':') { + return this.emit(node.val, node); + } + } + + if (node.val.length > 1) { + val += '{' + node.val.length + '}'; + } + return this.emit(val, node); + }) + + /** + * Plus + */ + + .set('plus', function(node) { + var prev = node.parsed.slice(-1); + if (prev === ']' || prev === ')') { + return this.emit(node.val, node); + } + if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) { + return this.emit('\\+', node); + } + var ch = this.output.slice(-1); + if (/\w/.test(ch) && !node.inside) { + return this.emit('+\\+?', node); + } + return this.emit('+', node); + }) + + /** + * globstar: '**' + */ + + .set('globstar', function(node, nodes, i) { + if (!this.output) { + this.state.leadingGlobstar = true; + } + + var prev = this.prev(); + var before = this.prev(2); + var next = this.next(); + var after = this.next(2); + var type = prev.type; + var val = node.val; + + if (prev.type === 'slash' && next.type === 'slash') { + if (before.type === 'text') { + this.output += '?'; + + if (after.type !== 'text') { + this.output += '\\b'; + } + } + } + + var parsed = node.parsed; + if (parsed.charAt(0) === '!') { + parsed = parsed.slice(1); + } + + var isInside = node.isInside.paren || node.isInside.brace; + if (parsed && type !== 'slash' && type !== 'bos' && !isInside) { + val = star(); + } else { + val = this.options.dot !== true + ? '(?:(?!(?:[' + slash() + ']|^)\\.).)*?' + : '(?:(?!(?:[' + slash() + ']|^)(?:\\.{1,2})($|[' + slash() + ']))(?!\\.{2}).)*?'; + } + + if ((type === 'slash' || type === 'bos') && this.options.dot !== true) { + val = '(?!\\.)' + val; + } + + if (prev.type === 'slash' && next.type === 'slash' && before.type !== 'text') { + if (after.type === 'text' || after.type === 'star') { + node.addQmark = true; + } + } + + if (this.options.capture) { + val = '(' + val + ')'; + } + + return this.emit(val, node); + }) + + /** + * Star: "*" + */ + + .set('star', function(node, nodes, i) { + var prior = nodes[i - 2] || {}; + var prev = this.prev(); + var next = this.next(); + var type = prev.type; + + function isStart(n) { + return n.type === 'bos' || n.type === 'slash'; + } + + if (this.output === '' && this.options.contains !== true) { + this.output = '(?![' + slash() + '])'; + } + + if (type === 'bracket' && this.options.bash === false) { + var str = next && next.type === 'bracket' ? star() : '*?'; + if (!prev.nodes || prev.nodes[1].type !== 'posix') { + return this.emit(str, node); + } + } + + var prefix = !this.dotfiles && type !== 'text' && type !== 'escape' + ? (this.options.dot ? '(?!(?:^|[' + slash() + '])\\.{1,2}(?:$|[' + slash() + ']))' : '(?!\\.)') + : ''; + + if (isStart(prev) || (isStart(prior) && type === 'not')) { + if (prefix !== '(?!\\.)') { + prefix += '(?!(\\.{2}|\\.[' + slash() + ']))(?=.)'; + } else { + prefix += '(?=.)'; + } + } else if (prefix === '(?!\\.)') { + prefix = ''; + } + + if (prev.type === 'not' && prior.type === 'bos' && this.options.dot === true) { + this.output = '(?!\\.)' + this.output; + } + + var output = prefix + star(); + if (this.options.capture) { + output = '(' + output + ')'; + } + + return this.emit(output, node); + }) + + /** + * Text + */ + + .set('text', function(node) { + return this.emit(node.val, node); + }) + + /** + * End-of-string + */ + + .set('eos', function(node) { + var prev = this.prev(); + var val = node.val; + + this.output = '(?:\\.[' + slash() + '](?=.))?' + this.output; + if (this.state.metachar && prev.type !== 'qmark' && prev.type !== 'slash') { + val += (this.options.contains ? '[' + slash() + ']?' : '(?:[' + slash() + ']|$)'); + } + + return this.emit(val, node); + }); + + /** + * Allow custom compilers to be passed on options + */ + + if (options && typeof options.compilers === 'function') { + options.compilers(nanomatch.compiler); + } +}; + diff --git a/.pnpm-store/v11/files/12/0302e2c7b2f1a863222ce5e3cdf325e1c164a5733764ae89d51221137fc8547e031d8e9bdf9b8330c6d006b1f292998074c95e4060c2474b874290ec16fdee b/.pnpm-store/v11/files/12/0302e2c7b2f1a863222ce5e3cdf325e1c164a5733764ae89d51221137fc8547e031d8e9bdf9b8330c6d006b1f292998074c95e4060c2474b874290ec16fdee new file mode 100644 index 00000000..8c7e364f --- /dev/null +++ b/.pnpm-store/v11/files/12/0302e2c7b2f1a863222ce5e3cdf325e1c164a5733764ae89d51221137fc8547e031d8e9bdf9b8330c6d006b1f292998074c95e4060c2474b874290ec16fdee @@ -0,0 +1,17 @@ +var baseClamp = require('./_baseClamp'), + copyArray = require('./_copyArray'), + shuffleSelf = require('./_shuffleSelf'); + +/** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +} + +module.exports = arraySampleSize; diff --git a/.pnpm-store/v11/files/12/05b80e6da5ed17b1211ea7595be265169c53c77fc8d91e5d4df16fea0236f02530751359e6875c557dd666fc280f0ca3a830c1670338a5ccbed8fdce51ef32 b/.pnpm-store/v11/files/12/05b80e6da5ed17b1211ea7595be265169c53c77fc8d91e5d4df16fea0236f02530751359e6875c557dd666fc280f0ca3a830c1670338a5ccbed8fdce51ef32 new file mode 100644 index 00000000..683afdb4 --- /dev/null +++ b/.pnpm-store/v11/files/12/05b80e6da5ed17b1211ea7595be265169c53c77fc8d91e5d4df16fea0236f02530751359e6875c557dd666fc280f0ca3a830c1670338a5ccbed8fdce51ef32 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includesFrom', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/12/44867a195960b5ba8fea98258cecad148caacc77883d461d8d25e6fa25f766caca63a7b55a0c2584a6ab5019bceae8f2a9792976696cd2a80d58c0f23d6724 b/.pnpm-store/v11/files/12/44867a195960b5ba8fea98258cecad148caacc77883d461d8d25e6fa25f766caca63a7b55a0c2584a6ab5019bceae8f2a9792976696cd2a80d58c0f23d6724 new file mode 100644 index 00000000..73eb0401 --- /dev/null +++ b/.pnpm-store/v11/files/12/44867a195960b5ba8fea98258cecad148caacc77883d461d8d25e6fa25f766caca63a7b55a0c2584a6ab5019bceae8f2a9792976696cd2a80d58c0f23d6724 @@ -0,0 +1 @@ +!function(){"use strict";function t(t,e){this.options=e||{},this.reset(t)}var e=Array.prototype.slice,i=Object.prototype.toString;t.VERSION="0.0.8",t.LEFT=0,t.CENTER=1,t.RIGHT=2,t.factory=function(e,i){return new t(e,i)},t.align=function(e,i,r,n){return e===t.LEFT?t.alignLeft(i,r,n):e===t.RIGHT?t.alignRight(i,r,n):e===t.CENTER?t.alignCenter(i,r,n):t.alignAuto(i,r,n)},t.alignLeft=function(t,e,i){if(!e||0>e)return"";(void 0===t||null===t)&&(t=""),"undefined"==typeof i&&(i=" "),"string"!=typeof t&&(t=t.toString());var r=e+1-t.length;return 0>=r?t:t+Array(e+1-t.length).join(i)},t.alignCenter=function(e,i,r){if(!i||0>i)return"";(void 0===e||null===e)&&(e=""),"undefined"==typeof r&&(r=" "),"string"!=typeof e&&(e=e.toString());var n=e.length,o=Math.floor(i/2-n/2),s=Math.abs(n%2-i%2),i=e.length;return t.alignRight("",o,r)+e+t.alignLeft("",o+s,r)},t.alignRight=function(t,e,i){if(!e||0>e)return"";(void 0===t||null===t)&&(t=""),"undefined"==typeof i&&(i=" "),"string"!=typeof t&&(t=t.toString());var r=e+1-t.length;return 0>=r?t:Array(e+1-t.length).join(i)+t},t.alignAuto=function(e,r,n){(void 0===e||null===e)&&(e="");var o=i.call(e);if(n||(n=" "),r=+r,"[object String]"!==o&&(e=e.toString()),e.length1||"[object Array]"!==i.call(t))&&(t=e.call(arguments)),this.__heading=t,this},t.prototype.getHeading=function(){return this.__heading.slice()},t.prototype.setHeadingAlign=function(t){return this.__headingAlign=t,this},t.prototype.addRow=function(t){return(arguments.length>1||"[object Array]"!==i.call(t))&&(t=e.call(arguments)),this.__maxCells=Math.max(this.__maxCells,t.length),this.__rows.push(t),this},t.prototype.getRows=function(){return this.__rows.slice().map(function(t){return t.slice()})},t.prototype.addRowMatrix=function(t){for(var e=0;en;n++){var s=e(t[n]);r?this.addRowMatrix(s):this.addRow(s)}return this},t.prototype.clearRows=function(){return this.__rows=[],this.__maxCells=0,this.__colMaxes=[],this},t.prototype.setJustify=function(t){return 0===arguments.length&&(t=!0),this.__justify=!!t,this},t.prototype.toJSON=function(){return{title:this.getTitle(),heading:this.getHeading(),rows:this.getRows()}},t.prototype.parse=t.prototype.fromJSON=function(t){return this.clear().setTitle(t.title).setHeading(t.heading).addRowMatrix(t.rows)},t.prototype.render=t.prototype.valueOf=t.prototype.toString=function(){for(var e,i=this,r=[],n=this.__maxCells,o=t.arrayFill(n,0),s=3*n,h=this.__rows,a=this.__border,l=this.__heading?[this.__heading].concat(h):h,_=0;_g;g++){var p=u[g];o[g]=Math.max(o[g],p?p.toString().length:0)}this.__colMaxes=o,e=this.__justify?Math.max.apply(null,o):0,o.forEach(function(t){s+=e?e:t+i.__spacing}),e&&(s+=o.length),s-=this.__spacing,a&&r.push(this._seperator(s-n+1,this.__top)),this.__name&&(r.push(this._renderTitle(s-n+1)),a&&r.push(this._seperator(s-n+1))),this.__heading&&(r.push(this._renderRow(this.__heading," ",this.__headingAlign)),r.push(this._rowSeperator(n,this.__fill)));for(var _=0;_ [ [...]]', + 'Prints valid versions sorted by SemVer precedence', + '', + 'Options:', + '-r --range ', + ' Print versions that match the specified range.', + '', + '-i --increment []', + ' Increment a version by the specified level. Level can', + ' be one of: major, minor, patch, premajor, preminor,', + " prepatch, or prerelease. Default level is 'patch'.", + ' Only one version may be specified.', + '', + '--preid ', + ' Identifier to be used to prefix premajor, preminor,', + ' prepatch or prerelease version increments.', + '', + '-l --loose', + ' Interpret versions and ranges loosely', + '', + '-p --include-prerelease', + ' Always include prerelease versions in range matching', + '', + '-c --coerce', + ' Coerce a string into SemVer if possible', + ' (does not imply --loose)', + '', + 'Program exits successfully if any valid version satisfies', + 'all supplied ranges, and prints all satisfying versions.', + '', + 'If no satisfying versions are found, then exits failure.', + '', + 'Versions are printed in ascending order, so supplying', + 'multiple versions to the utility will just sort them.' + ].join('\n')) +} diff --git a/.pnpm-store/v11/files/12/7e7b600304d23234a20f718b0ef59b152b5f4a4246c9944f0e52183927902056c6782a6df5de674572ed0bdf02b33a3b26afb1a47fa9e71efd58b2e671b5df b/.pnpm-store/v11/files/12/7e7b600304d23234a20f718b0ef59b152b5f4a4246c9944f0e52183927902056c6782a6df5de674572ed0bdf02b33a3b26afb1a47fa9e71efd58b2e671b5df new file mode 100644 index 00000000..d104f8e5 --- /dev/null +++ b/.pnpm-store/v11/files/12/7e7b600304d23234a20f718b0ef59b152b5f4a4246c9944f0e52183927902056c6782a6df5de674572ed0bdf02b33a3b26afb1a47fa9e71efd58b2e671b5df @@ -0,0 +1,164 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const EE = require("events"); +const async = require("async"); +const suman_events_1 = require("suman-events"); +const _ = require("lodash"); +const su = require("suman-utils"); +const _suman = global.__suman = (global.__suman || {}); +const make_handle_test_1 = require("./make-handle-test"); +const make_handle_each_1 = require("./make-handle-each"); +const general_1 = require("../helpers/general"); +const rb = _suman.resultBroadcaster = _suman.resultBroadcaster || new EE(); +const testErrors = _suman.testErrors = _suman.testErrors || []; +const errors = _suman.sumanRuntimeErrors = _suman.sumanRuntimeErrors || []; +const getAllBeforesEaches = function (zuite) { + const beforeEaches = []; + beforeEaches.unshift(zuite.getBeforeEaches()); + if (!zuite.alreadyHandledAfterAllParentHooks) { + zuite.alreadyHandledAfterAllParentHooks = true; + beforeEaches.unshift(zuite.getAfterAllParentHooks()); + } + const getParentBefores = function (parent) { + beforeEaches.unshift(parent.getBeforeEaches()); + if (parent.parent) { + getParentBefores(parent.parent); + } + }; + if (zuite.parent) { + getParentBefores(zuite.parent); + } + return _.flatten(beforeEaches); +}; +const getAllAfterEaches = function (zuite) { + const afterEaches = []; + afterEaches.push(zuite.getAfterEaches()); + const getParentAfters = function (parent) { + afterEaches.push(parent.getAfterEaches()); + if (parent.parent) { + getParentAfters(parent.parent); + } + }; + if (zuite.parent) { + getParentAfters(zuite.parent); + } + return _.flatten(afterEaches); +}; +const stckMapFn = function (item, index) { + const fst = _suman.sumanOpts && _suman.sumanOpts.full_stack_traces; + if (!item) { + return ''; + } + if (index === 0) { + return '\t' + item; + } + if (fst) { + return su.padWithXSpaces(4) + item; + } + if ((String(item).match(/\//) || String(item).match('______________')) && !String(item).match(/\/node_modules\//) && + !String(item).match(/internal\/process\/next_tick.js/)) { + return su.padWithXSpaces(4) + item; + } +}; +const handleTestError = function (err, test) { + if (_suman.uncaughtExceptionTriggered) { + _suman.log.error(`runtime error => "UncaughtException:Triggered" => halting program.\n[${__filename}]`); + return; + } + if (err) { + if (err instanceof Error) { + test.error = err; + test.errorDisplay = String(err.stack).split('\n') + .concat(`\t${su.repeatCharXTimes('_', 70)}`) + .map(stckMapFn) + .filter(item => item) + .join('\n') + .concat('\n'); + } + else if (typeof err.stack === 'string') { + test.error = err; + test.errorDisplay = String(err.stack).split('\n') + .concat(`\t${su.repeatCharXTimes('_', 70)}`) + .map(stckMapFn) + .filter(item => item) + .join('\n') + .concat('\n'); + } + else { + throw new Error('Suman internal implementation error => invalid error format, please report this.'); + } + if (su.isSumanDebug()) { + _suman.writeTestError('\n\nTest error: ' + test.desc + '\n\t' + 'stack: ' + test.error.stack + '\n\n'); + } + testErrors.push(test.error); + } + if (test.error) { + test.error.isFromTest = true; + } + return test.error; +}; +exports.makeTheTrap = function (suman, gracefulExit) { + const handleTest = make_handle_test_1.makeHandleTest(suman, gracefulExit); + const handleBeforeOrAfterEach = make_handle_each_1.makeHandleBeforeOrAfterEach(suman, gracefulExit); + return function runTheTrap(self, test, opts, cb) { + if (_suman.uncaughtExceptionTriggered) { + _suman.log.error(`runtime error => "uncaughtException" event => halting program.\n[${__filename}]`); + return; + } + const sumanOpts = suman.opts, sumanConfig = suman.config; + let delaySum = 0; + if (test.stubbed) { + rb.emit(String(suman_events_1.events.TEST_CASE_END), test); + rb.emit(String(suman_events_1.events.TEST_CASE_STUBBED), test); + return process.nextTick(cb, null); + } + if (test.skipped) { + rb.emit(String(suman_events_1.events.TEST_CASE_END), test); + rb.emit(String(suman_events_1.events.TEST_CASE_SKIPPED), test); + return process.nextTick(cb, null); + } + const parallel = sumanOpts.parallel || (opts.parallel && !_suman.sumanOpts.series); + async.eachSeries(getAllBeforesEaches(self), function (aBeforeEach, cb) { + handleBeforeOrAfterEach(self, test, aBeforeEach, cb); + }, function doneWithBeforeEaches(err) { + general_1.implementationError(err); + if (parallel) { + delaySum += (test.delay || 0); + } + else { + delaySum = 0; + } + async.series([ + function (cb) { + const handleTestContainer = function () { + handleTest(self, test, function (err, potentialTestError) { + general_1.implementationError(err); + handleTestError(potentialTestError, test); + suman.logResult(test); + cb(null); + }); + }; + if (delaySum) { + setTimeout(handleTestContainer, delaySum); + } + else { + handleTestContainer(); + } + }, + function (cb) { + async.eachSeries(getAllAfterEaches(self), function (aAfterEach, cb) { + handleBeforeOrAfterEach(self, test, aAfterEach, cb); + }, function done(err) { + general_1.implementationError(err); + process.nextTick(cb); + }); + } + ], function doneWithTests(err, results) { + err && _suman.log.error('Suman implementation error => the following error should not be present => ', err); + cb(null, results); + }); + }); + }; +}; diff --git a/.pnpm-store/v11/files/12/89b553ae957a14a0de27e83b54e3f01c97684128e4d303779428802c679f22e8e281209c9c061707ec4146597f8857f0a8b0b068699349a0569b6afeb82119 b/.pnpm-store/v11/files/12/89b553ae957a14a0de27e83b54e3f01c97684128e4d303779428802c679f22e8e281209c9c061707ec4146597f8857f0a8b0b068699349a0569b6afeb82119 new file mode 100644 index 00000000..98c91ae6 --- /dev/null +++ b/.pnpm-store/v11/files/12/89b553ae957a14a0de27e83b54e3f01c97684128e4d303779428802c679f22e8e281209c9c061707ec4146597f8857f0a8b0b068699349a0569b6afeb82119 @@ -0,0 +1,14 @@ +var identity = require('./identity'); + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : identity; +} + +module.exports = castFunction; diff --git a/.pnpm-store/v11/files/12/8ac153fb18412069ff8cd3157d8180cefe1214f0655fb031893f1e5a2da31e0b719d94d01a6872526bed86e9a89223f2628f1f7da2092d753006355973daf7 b/.pnpm-store/v11/files/12/8ac153fb18412069ff8cd3157d8180cefe1214f0655fb031893f1e5a2da31e0b719d94d01a6872526bed86e9a89223f2628f1f7da2092d753006355973daf7 new file mode 100644 index 00000000..6cd7c1ae --- /dev/null +++ b/.pnpm-store/v11/files/12/8ac153fb18412069ff8cd3157d8180cefe1214f0655fb031893f1e5a2da31e0b719d94d01a6872526bed86e9a89223f2628f1f7da2092d753006355973daf7 @@ -0,0 +1,18 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +module.exports = baseIsRegExp; diff --git a/.pnpm-store/v11/files/12/8c58fc056c08ac35b5d32d1e5607941eb63371eac80b76bd7e90b060d6a113a928b31cdec0156cd510d8ba1d0a0198e7c158ef44c04dbda1dadac3c0363572 b/.pnpm-store/v11/files/12/8c58fc056c08ac35b5d32d1e5607941eb63371eac80b76bd7e90b060d6a113a928b31cdec0156cd510d8ba1d0a0198e7c158ef44c04dbda1dadac3c0363572 new file mode 100644 index 00000000..44a05623 --- /dev/null +++ b/.pnpm-store/v11/files/12/8c58fc056c08ac35b5d32d1e5607941eb63371eac80b76bd7e90b060d6a113a928b31cdec0156cd510d8ba1d0a0198e7c158ef44c04dbda1dadac3c0363572 @@ -0,0 +1,23 @@ +var root = require('./_root'); + +/** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ +var now = function() { + return root.Date.now(); +}; + +module.exports = now; diff --git a/.pnpm-store/v11/files/12/9046d9c981c0aa925192537b5e7d3dca8a36a8ae377da6d2b5c013223b5c908d1bb22e295a2e98d41d0dcbef5709d59d1ea37a4eaa579a04e2d626e4b6c4d9 b/.pnpm-store/v11/files/12/9046d9c981c0aa925192537b5e7d3dca8a36a8ae377da6d2b5c013223b5c908d1bb22e295a2e98d41d0dcbef5709d59d1ea37a4eaa579a04e2d626e4b6c4d9 new file mode 100644 index 00000000..a6bb5911 --- /dev/null +++ b/.pnpm-store/v11/files/12/9046d9c981c0aa925192537b5e7d3dca8a36a8ae377da6d2b5c013223b5c908d1bb22e295a2e98d41d0dcbef5709d59d1ea37a4eaa579a04e2d626e4b6c4d9 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('range', require('../range')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/12/9a393b29113d415440da6655e055915979bc357c5089f27479770b610b5d3674934fa7b927a4c405e7fec5409e0279f3f1de4b0869a7f503d6c93b5583cf6f b/.pnpm-store/v11/files/12/9a393b29113d415440da6655e055915979bc357c5089f27479770b610b5d3674934fa7b927a4c405e7fec5409e0279f3f1de4b0869a7f503d6c93b5583cf6f new file mode 100644 index 00000000..22a841eb --- /dev/null +++ b/.pnpm-store/v11/files/12/9a393b29113d415440da6655e055915979bc357c5089f27479770b610b5d3674934fa7b927a4c405e7fec5409e0279f3f1de4b0869a7f503d6c93b5583cf6f @@ -0,0 +1,147 @@ +

+ + ChaiJS + +
+ pathval +

+ +

+ Tool for Object value retrieval given a string path for node and the browser. +

+ +

+ + license:mit + + + tag:? + + + build:? + + + coverage:? + + + npm:? + + + dependencies:? + + + devDependencies:? + +
+ + Selenium Test Status + +
+ + Join the Slack chat + + + Join the Gitter chat + +

+ +## What is pathval? + +Pathval is a module which you can use to retrieve or set an Object's property for a given `String` path. + +## Installation + +### Node.js + +`pathval` is available on [npm](http://npmjs.org). To install it, type: + + $ npm install pathval + +### Browsers + +You can also use it within the browser; install via npm and use the `pathval.js` file found within the download. For example: + +```html + +``` + +## Usage + +The primary export of `pathval` is an object which has the following methods: + +* `hasProperty(object, name)` - Checks whether an `object` has `name`d property or numeric array index. +* `getPathInfo(object, path)` - Returns an object with info indicating the value of the `parent` of that path, the `name ` of the property we're retrieving and its `value`. +* `getPathValue(object, path)` - Retrieves the value of a property at a given `path` inside an `object`'. +* `setPathValue(object, path, value)` - Sets the `value` of a property at a given `path` inside an `object` and returns the object in which the property has been set. + +```js +var pathval = require('pathval'); +``` + +#### .hasProperty(object, name) + +```js +var pathval = require('pathval'); + +var obj = { prop: 'a value' }; +pathval.hasProperty(obj, 'prop'); // true +``` + +#### .getPathInfo(object, path) + +```js +var pathval = require('pathval'); + +var obj = { earth: { country: 'Brazil' } }; +pathval.getPathInfo(obj, 'earth.country'); // { parent: { country: 'Brazil' }, name: 'country', value: 'Brazil', exists: true } +``` + +#### .getPathValue(object, path) + +```js +var pathval = require('pathval'); + +var obj = { earth: { country: 'Brazil' } }; +pathval.getPathValue(obj, 'earth.country'); // 'Brazil' +``` + +#### .setPathValue(object, path, value) + +```js +var pathval = require('pathval'); + +var obj = { earth: { country: 'Brazil' } }; +pathval.setPathValue(obj, 'earth.country', 'USA'); + +obj.earth.country; // 'USA' +``` diff --git a/.pnpm-store/v11/files/12/a5a74119271c6b9ca08e8eebbc10d836527e4b127cb4c0b2ff8c3055aa1f3000467b52fb27b829b0fa798d85fca24b90eaca5b85e033f0a2f073d248672360 b/.pnpm-store/v11/files/12/a5a74119271c6b9ca08e8eebbc10d836527e4b127cb4c0b2ff8c3055aa1f3000467b52fb27b829b0fa798d85fca24b90eaca5b85e033f0a2f073d248672360 new file mode 100644 index 00000000..18ae810d --- /dev/null +++ b/.pnpm-store/v11/files/12/a5a74119271c6b9ca08e8eebbc10d836527e4b127cb4c0b2ff8c3055aa1f3000467b52fb27b829b0fa798d85fca24b90eaca5b85e033f0a2f073d248672360 @@ -0,0 +1,67 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const chalk = require("chalk"); +const includes = require('lodash.includes'); +const fnArgs = require('function-arguments'); +const _suman = global.__suman = (global.__suman || {}); +const suman_constants_1 = require("../config/suman-constants"); +const iocPromiseContainer = {}; +const thisVal = { 'message': 'A message to you, Suman User! dont use "this" here, instead => http://sumanjs.org/patterns.' }; +exports.acquireIocDeps = function (deps, suite, cb) { + const obj = {}; + const SUMAN_DEBUG = process.env.SUMAN_DEBUG === 'yes'; + deps.forEach(dep => { + if (includes(suman_constants_1.constants.SUMAN_HARD_LIST, dep && String(dep)) && String(dep) in _suman.iocConfiguration) { + throw new Error('Warning: you added a IoC dependency for "' + dep + + '" but this is a reserved internal Suman dependency injection value.'); + } + obj[dep] = undefined; + }); + const promises = Object.keys(obj).map(function (key) { + if (iocPromiseContainer[key]) { + return iocPromiseContainer[key]; + } + return iocPromiseContainer[key] = new Promise(function (resolve, reject) { + const fn = obj[key]; + if (fn === '[suman reserved - no ioc match]') { + resolve(); + } + else if (typeof fn !== 'function') { + reject(new Error('Value in IOC object was not a function for corresponding key => ' + + '"' + key + '", value => "' + util.inspect(fn) + '"')); + } + else if (fn.length > 1) { + reject(new Error(chalk.red(' => Suman usage error => suman.ioc.js functions take 0 or 1 arguments, ' + + 'with the single argument being a callback function.'))); + } + else if (fn.length > 0) { + let args = fnArgs(fn); + let str = fn.toString(); + let matches = str.match(new RegExp(args[1], 'g')) || []; + if (matches.length < 2) { + throw new Error('Callback in your function was not present => ' + str); + } + fn.call(thisVal, function (err, val) { + err ? reject(err) : resolve(val); + }); + } + else { + Promise.resolve(fn.call(thisVal)).then(resolve, reject); + } + }); + }); + Promise.all(promises).then(function (deps) { + Object.keys(obj).forEach(function (key, index) { + obj[key] = deps[index]; + }); + process.domain && process.domain.exit(); + process.nextTick(cb, null, obj); + }, function (err) { + _suman.log.error('Error acquiring pre/integrant dependency:', err.stack || err); + process.domain && process.domain.exit(); + process.nextTick(cb, err, {}); + }); +}; diff --git a/.pnpm-store/v11/files/12/a68d1318886f8786565e44debcf9bf28c4ac4548030542f68f98c1183585090064f99fea9357242e8127ea093131662988ec99adcecc3d823a42a4d459ba9c b/.pnpm-store/v11/files/12/a68d1318886f8786565e44debcf9bf28c4ac4548030542f68f98c1183585090064f99fea9357242e8127ea093131662988ec99adcecc3d823a42a4d459ba9c new file mode 100644 index 00000000..926c8993 --- /dev/null +++ b/.pnpm-store/v11/files/12/a68d1318886f8786565e44debcf9bf28c4ac4548030542f68f98c1183585090064f99fea9357242e8127ea093131662988ec99adcecc3d823a42a4d459ba9c @@ -0,0 +1,39 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + unzip = require('./unzip'); + +/** + * This method is like `_.unzip` except that it accepts `iteratee` to specify + * how regrouped values should be combined. The iteratee is invoked with the + * elements of each group: (...group). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @param {Function} [iteratee=_.identity] The function to combine + * regrouped values. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip([1, 2], [10, 20], [100, 200]); + * // => [[1, 10, 100], [2, 20, 200]] + * + * _.unzipWith(zipped, _.add); + * // => [3, 30, 300] + */ +function unzipWith(array, iteratee) { + if (!(array && array.length)) { + return []; + } + var result = unzip(array); + if (iteratee == null) { + return result; + } + return arrayMap(result, function(group) { + return apply(iteratee, undefined, group); + }); +} + +module.exports = unzipWith; diff --git a/.pnpm-store/v11/files/12/ac24ba91d76cea17be11cd036e76fe4ef5d6d8881b0a64f28ccd7f9a47038c59d361a02dc2601c245357ce69e2f1c74cb6001ac7a53189825da984dba2d772 b/.pnpm-store/v11/files/12/ac24ba91d76cea17be11cd036e76fe4ef5d6d8881b0a64f28ccd7f9a47038c59d361a02dc2601c245357ce69e2f1c74cb6001ac7a53189825da984dba2d772 new file mode 100644 index 00000000..e4fd51cb --- /dev/null +++ b/.pnpm-store/v11/files/12/ac24ba91d76cea17be11cd036e76fe4ef5d6d8881b0a64f28ccd7f9a47038c59d361a02dc2601c245357ce69e2f1c74cb6001ac7a53189825da984dba2d772 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').select; diff --git a/.pnpm-store/v11/files/12/b31ea275892c1c7441cb15a7ac4e118cc551ca69ad5c64d7eb31b2b24e09b1ae1ecaf5e96f4d3cf321ce3fddbb9c2a00ee732770490c276fe268db60bea4a4 b/.pnpm-store/v11/files/12/b31ea275892c1c7441cb15a7ac4e118cc551ca69ad5c64d7eb31b2b24e09b1ae1ecaf5e96f4d3cf321ce3fddbb9c2a00ee732770490c276fe268db60bea4a4 new file mode 100644 index 00000000..538cef2b --- /dev/null +++ b/.pnpm-store/v11/files/12/b31ea275892c1c7441cb15a7ac4e118cc551ca69ad5c64d7eb31b2b24e09b1ae1ecaf5e96f4d3cf321ce3fddbb9c2a00ee732770490c276fe268db60bea4a4 @@ -0,0 +1 @@ +export declare const makePreInjector: ($data: Object, $preData: Object, $ioc: Object) => (names: string[]) => any[]; diff --git a/.pnpm-store/v11/files/12/b877b48a4793eaf00aaa4710d8f929df734d70773336ae726481d0769ef6236653fcf3a40d839d237fde61ac32f94cd72640cd92630f7b4baf50ad5cdc8694-exec b/.pnpm-store/v11/files/12/b877b48a4793eaf00aaa4710d8f929df734d70773336ae726481d0769ef6236653fcf3a40d839d237fde61ac32f94cd72640cd92630f7b4baf50ad5cdc8694-exec new file mode 100755 index 00000000..3c60a531 --- /dev/null +++ b/.pnpm-store/v11/files/12/b877b48a4793eaf00aaa4710d8f929df734d70773336ae726481d0769ef6236653fcf3a40d839d237fde61ac32f94cd72640cd92630f7b4baf50ad5cdc8694-exec @@ -0,0 +1,380 @@ +declare module "repl" { + import { Interface, Completer, AsyncCompleter } from "readline"; + import { Context } from "vm"; + import { InspectOptions } from "util"; + + interface ReplOptions { + /** + * The input prompt to display. + * @default "> " + */ + prompt?: string; + /** + * The `Readable` stream from which REPL input will be read. + * @default process.stdin + */ + input?: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + * @default process.stdout + */ + output?: NodeJS.WritableStream; + /** + * If `true`, specifies that the output should be treated as a TTY terminal, and have + * ANSI/VT100 escape codes written to it. + * Default: checking the value of the `isTTY` property on the output stream upon + * instantiation. + */ + terminal?: boolean; + /** + * The function to be used when evaluating each given line of input. + * Default: an async wrapper for the JavaScript `eval()` function. An `eval` function can + * error with `repl.Recoverable` to indicate the input was incomplete and prompt for + * additional lines. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_default_evaluation + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_custom_evaluation_functions + */ + eval?: REPLEval; + /** + * If `true`, specifies that the default `writer` function should include ANSI color + * styling to REPL output. If a custom `writer` function is provided then this has no + * effect. + * Default: the REPL instance's `terminal` value. + */ + useColors?: boolean; + /** + * If `true`, specifies that the default evaluation function will use the JavaScript + * `global` as the context as opposed to creating a new separate context for the REPL + * instance. The node CLI REPL sets this value to `true`. + * Default: `false`. + */ + useGlobal?: boolean; + /** + * If `true`, specifies that the default writer will not output the return value of a + * command if it evaluates to `undefined`. + * Default: `false`. + */ + ignoreUndefined?: boolean; + /** + * The function to invoke to format the output of each command before writing to `output`. + * Default: a wrapper for `util.inspect`. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_customizing_repl_output + */ + writer?: REPLWriter; + /** + * An optional function used for custom Tab auto completion. + * + * @see https://nodejs.org/dist/latest-v11.x/docs/api/readline.html#readline_use_of_the_completer_function + */ + completer?: Completer | AsyncCompleter; + /** + * A flag that specifies whether the default evaluator executes all JavaScript commands in + * strict mode or default (sloppy) mode. + * Accepted values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + replMode?: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + /** + * Stop evaluating the current piece of code when `SIGINT` is received, i.e. `Ctrl+C` is + * pressed. This cannot be used together with a custom `eval` function. + * Default: `false`. + */ + breakEvalOnSigint?: boolean; + } + + type REPLEval = (this: REPLServer, evalCmd: string, context: Context, file: string, cb: (err: Error | null, result: any) => void) => void; + type REPLWriter = (this: REPLServer, obj: any) => string; + + /** + * This is the default "writer" value, if none is passed in the REPL options, + * and it can be overridden by custom print functions. + */ + const writer: REPLWriter & { options: InspectOptions }; + + type REPLCommandAction = (this: REPLServer, text: string) => void; + + interface REPLCommand { + /** + * Help text to be displayed when `.help` is entered. + */ + help?: string; + /** + * The function to execute, optionally accepting a single string argument. + */ + action: REPLCommandAction; + } + + /** + * Provides a customizable Read-Eval-Print-Loop (REPL). + * + * Instances of `repl.REPLServer` will accept individual lines of user input, evaluate those + * according to a user-defined evaluation function, then output the result. Input and output + * may be from `stdin` and `stdout`, respectively, or may be connected to any Node.js `stream`. + * + * Instances of `repl.REPLServer` support automatic completion of inputs, simplistic Emacs-style + * line editing, multi-line inputs, ANSI-styled output, saving and restoring current REPL session + * state, error recovery, and customizable evaluation functions. + * + * Instances of `repl.REPLServer` are created using the `repl.start()` method and _should not_ + * be created directly using the JavaScript `new` keyword. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_repl + */ + class REPLServer extends Interface { + /** + * The `vm.Context` provided to the `eval` function to be used for JavaScript + * evaluation. + */ + readonly context: Context; + /** + * Outdated alias for `input`. + */ + readonly inputStream: NodeJS.ReadableStream; + /** + * Outdated alias for `output`. + */ + readonly outputStream: NodeJS.WritableStream; + /** + * The `Readable` stream from which REPL input will be read. + */ + readonly input: NodeJS.ReadableStream; + /** + * The `Writable` stream to which REPL output will be written. + */ + readonly output: NodeJS.WritableStream; + /** + * The commands registered via `replServer.defineCommand()`. + */ + readonly commands: { readonly [name: string]: REPLCommand | undefined }; + /** + * A value indicating whether the REPL is currently in "editor mode". + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_commands_and_special_keys + */ + readonly editorMode: boolean; + /** + * A value indicating whether the `_` variable has been assigned. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreAssigned: boolean; + /** + * The last evaluation result from the REPL (assigned to the `_` variable inside of the REPL). + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly last: any; + /** + * A value indicating whether the `_error` variable has been assigned. + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly underscoreErrAssigned: boolean; + /** + * The last error raised inside the REPL (assigned to the `_error` variable inside of the REPL). + * + * @since v9.8.0 + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_assignment_of_the_underscore_variable + */ + readonly lastError: any; + /** + * Specified in the REPL options, this is the function to be used when evaluating each + * given line of input. If not specified in the REPL options, this is an async wrapper + * for the JavaScript `eval()` function. + */ + readonly eval: REPLEval; + /** + * Specified in the REPL options, this is a value indicating whether the default + * `writer` function should include ANSI color styling to REPL output. + */ + readonly useColors: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `eval` + * function will use the JavaScript `global` as the context as opposed to creating a new + * separate context for the REPL instance. + */ + readonly useGlobal: boolean; + /** + * Specified in the REPL options, this is a value indicating whether the default `writer` + * function should output the result of a command if it evaluates to `undefined`. + */ + readonly ignoreUndefined: boolean; + /** + * Specified in the REPL options, this is the function to invoke to format the output of + * each command before writing to `outputStream`. If not specified in the REPL options, + * this will be a wrapper for `util.inspect`. + */ + readonly writer: REPLWriter; + /** + * Specified in the REPL options, this is the function to use for custom Tab auto-completion. + */ + readonly completer: Completer | AsyncCompleter; + /** + * Specified in the REPL options, this is a flag that specifies whether the default `eval` + * function should execute all JavaScript commands in strict mode or default (sloppy) mode. + * Possible values are: + * - `repl.REPL_MODE_SLOPPY` - evaluates expressions in sloppy mode. + * - `repl.REPL_MODE_STRICT` - evaluates expressions in strict mode. This is equivalent to + * prefacing every repl statement with `'use strict'`. + */ + readonly replMode: typeof REPL_MODE_SLOPPY | typeof REPL_MODE_STRICT; + + /** + * NOTE: According to the documentation: + * + * > Instances of `repl.REPLServer` are created using the `repl.start()` method and + * > _should not_ be created directly using the JavaScript `new` keyword. + * + * `REPLServer` cannot be subclassed due to implementation specifics in NodeJS. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_class_replserver + */ + private constructor(); + + /** + * Used to add new `.`-prefixed commands to the REPL instance. Such commands are invoked + * by typing a `.` followed by the `keyword`. + * + * @param keyword The command keyword (_without_ a leading `.` character). + * @param cmd The function to invoke when the command is processed. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_replserver_definecommand_keyword_cmd + */ + defineCommand(keyword: string, cmd: REPLCommandAction | REPLCommand): void; + /** + * Readies the REPL instance for input from the user, printing the configured `prompt` to a + * new line in the `output` and resuming the `input` to accept new input. + * + * When multi-line input is being entered, an ellipsis is printed rather than the 'prompt'. + * + * This method is primarily intended to be called from within the action function for + * commands registered using the `replServer.defineCommand()` method. + * + * @param preserveCursor When `true`, the cursor placement will not be reset to `0`. + */ + displayPrompt(preserveCursor?: boolean): void; + /** + * Clears any command that has been buffered but not yet executed. + * + * This method is primarily intended to be called from within the action function for + * commands registered using the `replServer.defineCommand()` method. + * + * @since v9.0.0 + */ + clearBufferedCommand(): void; + + /** + * events.EventEmitter + * 1. close - inherited from `readline.Interface` + * 2. line - inherited from `readline.Interface` + * 3. pause - inherited from `readline.Interface` + * 4. resume - inherited from `readline.Interface` + * 5. SIGCONT - inherited from `readline.Interface` + * 6. SIGINT - inherited from `readline.Interface` + * 7. SIGTSTP - inherited from `readline.Interface` + * 8. exit + * 9. reset + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: (context: Context) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: Context): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: (context: Context) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: (context: Context) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: (context: Context) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: (context: Context) => void): this; + } + + /** + * A flag passed in the REPL options. Evaluates expressions in sloppy mode. + */ + export const REPL_MODE_SLOPPY: symbol; // TODO: unique symbol + + /** + * A flag passed in the REPL options. Evaluates expressions in strict mode. + * This is equivalent to prefacing every repl statement with `'use strict'`. + */ + export const REPL_MODE_STRICT: symbol; // TODO: unique symbol + + /** + * Creates and starts a `repl.REPLServer` instance. + * + * @param options The options for the `REPLServer`. If `options` is a string, then it specifies + * the input prompt. + */ + function start(options?: string | ReplOptions): REPLServer; + + /** + * Indicates a recoverable error that a `REPLServer` can use to support multi-line input. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/repl.html#repl_recoverable_errors + */ + class Recoverable extends SyntaxError { + err: Error; + + constructor(err: Error); + } +} diff --git a/.pnpm-store/v11/files/12/c513d710b80a9ac6a009da93e0f61928b6f6efc2f018d7ce9a67ce2d16c5f84c6ca7b2ce78ec18acff3863d3580dcfda543158258e5fdf94de967b130dca56 b/.pnpm-store/v11/files/12/c513d710b80a9ac6a009da93e0f61928b6f6efc2f018d7ce9a67ce2d16c5f84c6ca7b2ce78ec18acff3863d3580dcfda543158258e5fdf94de967b130dca56 new file mode 100644 index 00000000..5df4df22 --- /dev/null +++ b/.pnpm-store/v11/files/12/c513d710b80a9ac6a009da93e0f61928b6f6efc2f018d7ce9a67ce2d16c5f84c6ca7b2ce78ec18acff3863d3580dcfda543158258e5fdf94de967b130dca56 @@ -0,0 +1,473 @@ +/** + * Module dependencies. + */ + +var utf8 = require('./utf8'); +var hasBinary = require('has-binary2'); +var after = require('after'); +var keys = require('./keys'); + +/** + * Current protocol version. + */ +exports.protocol = 3; + +/** + * Packet types. + */ + +var packets = exports.packets = { + open: 0 // non-ws + , close: 1 // non-ws + , ping: 2 + , pong: 3 + , message: 4 + , upgrade: 5 + , noop: 6 +}; + +var packetslist = keys(packets); + +/** + * Premade error packet. + */ + +var err = { type: 'error', data: 'parser error' }; + +const EMPTY_BUFFER = Buffer.concat([]); + +/** + * Encodes a packet. + * + * [ ] + * + * Example: + * + * 5hello world + * 3 + * 4 + * + * Binary is encoded in an identical principle + * + * @api private + */ + +exports.encodePacket = function (packet, supportsBinary, utf8encode, callback) { + if (typeof supportsBinary === 'function') { + callback = supportsBinary; + supportsBinary = null; + } + + if (typeof utf8encode === 'function') { + callback = utf8encode; + utf8encode = null; + } + + if (Buffer.isBuffer(packet.data)) { + return encodeBuffer(packet, supportsBinary, callback); + } else if (packet.data && (packet.data.buffer || packet.data) instanceof ArrayBuffer) { + return encodeBuffer({ type: packet.type, data: arrayBufferToBuffer(packet.data) }, supportsBinary, callback); + } + + // Sending data as a utf-8 string + var encoded = packets[packet.type]; + + // data fragment is optional + if (undefined !== packet.data) { + encoded += utf8encode ? utf8.encode(String(packet.data), { strict: false }) : String(packet.data); + } + + return callback('' + encoded); +}; + +/** + * Encode Buffer data + */ + +function encodeBuffer(packet, supportsBinary, callback) { + if (!supportsBinary) { + return exports.encodeBase64Packet(packet, callback); + } + + var data = packet.data; + var typeBuffer = Buffer.allocUnsafe(1); + typeBuffer[0] = packets[packet.type]; + return callback(Buffer.concat([typeBuffer, data])); +} + +/** + * Encodes a packet with binary data in a base64 string + * + * @param {Object} packet, has `type` and `data` + * @return {String} base64 encoded message + */ + +exports.encodeBase64Packet = function(packet, callback){ + var data = Buffer.isBuffer(packet.data) ? packet.data : arrayBufferToBuffer(packet.data); + var message = 'b' + packets[packet.type]; + message += data.toString('base64'); + return callback(message); +}; + +/** + * Decodes a packet. Data also available as an ArrayBuffer if requested. + * + * @return {Object} with `type` and `data` (if any) + * @api private + */ + +exports.decodePacket = function (data, binaryType, utf8decode) { + if (data === undefined) { + return err; + } + + var type; + + // String data + if (typeof data === 'string') { + + type = data.charAt(0); + + if (type === 'b') { + return exports.decodeBase64Packet(data.substr(1), binaryType); + } + + if (utf8decode) { + data = tryDecode(data); + if (data === false) { + return err; + } + } + + if (Number(type) != type || !packetslist[type]) { + return err; + } + + if (data.length > 1) { + return { type: packetslist[type], data: data.substring(1) }; + } else { + return { type: packetslist[type] }; + } + } + + // Binary data + if (binaryType === 'arraybuffer') { + // wrap Buffer/ArrayBuffer data into an Uint8Array + var intArray = new Uint8Array(data); + type = intArray[0]; + return { type: packetslist[type], data: intArray.buffer.slice(1) }; + } + + if (data instanceof ArrayBuffer) { + data = arrayBufferToBuffer(data); + } + type = data[0]; + return { type: packetslist[type], data: data.slice(1) }; +}; + +function tryDecode(data) { + try { + data = utf8.decode(data, { strict: false }); + } catch (e) { + return false; + } + return data; +} + +/** + * Decodes a packet encoded in a base64 string. + * + * @param {String} base64 encoded message + * @return {Object} with `type` and `data` (if any) + */ + +exports.decodeBase64Packet = function(msg, binaryType) { + var type = packetslist[msg.charAt(0)]; + var data = Buffer.from(msg.substr(1), 'base64'); + if (binaryType === 'arraybuffer') { + var abv = new Uint8Array(data.length); + for (var i = 0; i < abv.length; i++){ + abv[i] = data[i]; + } + data = abv.buffer; + } + return { type: type, data: data }; +}; + +/** + * Encodes multiple messages (payload). + * + * :data + * + * Example: + * + * 11:hello world2:hi + * + * If any contents are binary, they will be encoded as base64 strings. Base64 + * encoded strings are marked with a b before the length specifier + * + * @param {Array} packets + * @api private + */ + +exports.encodePayload = function (packets, supportsBinary, callback) { + if (typeof supportsBinary === 'function') { + callback = supportsBinary; + supportsBinary = null; + } + + if (supportsBinary && hasBinary(packets)) { + return exports.encodePayloadAsBinary(packets, callback); + } + + if (!packets.length) { + return callback('0:'); + } + + function encodeOne(packet, doneCallback) { + exports.encodePacket(packet, supportsBinary, false, function(message) { + doneCallback(null, setLengthHeader(message)); + }); + } + + map(packets, encodeOne, function(err, results) { + return callback(results.join('')); + }); +}; + +function setLengthHeader(message) { + return message.length + ':' + message; +} + +/** + * Async array map using after + */ + +function map(ary, each, done) { + var result = new Array(ary.length); + var next = after(ary.length, done); + + for (var i = 0; i < ary.length; i++) { + each(ary[i], function(error, msg) { + result[i] = msg; + next(error, result); + }); + } +} + +/* + * Decodes data when a payload is maybe expected. Possible binary contents are + * decoded from their base64 representation + * + * @param {String} data, callback method + * @api public + */ + +exports.decodePayload = function (data, binaryType, callback) { + if (typeof data !== 'string') { + return exports.decodePayloadAsBinary(data, binaryType, callback); + } + + if (typeof binaryType === 'function') { + callback = binaryType; + binaryType = null; + } + + if (data === '') { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + var length = '', n, msg, packet; + + for (var i = 0, l = data.length; i < l; i++) { + var chr = data.charAt(i); + + if (chr !== ':') { + length += chr; + continue; + } + + if (length === '' || (length != (n = Number(length)))) { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + msg = data.substr(i + 1, n); + + if (length != msg.length) { + // parser error - ignoring payload + return callback(err, 0, 1); + } + + if (msg.length) { + packet = exports.decodePacket(msg, binaryType, false); + + if (err.type === packet.type && err.data === packet.data) { + // parser error in individual packet - ignoring payload + return callback(err, 0, 1); + } + + var more = callback(packet, i + n, l); + if (false === more) return; + } + + // advance cursor + i += n; + length = ''; + } + + if (length !== '') { + // parser error - ignoring payload + return callback(err, 0, 1); + } + +}; + +/** + * + * Converts a buffer to a utf8.js encoded string + * + * @api private + */ + +function bufferToString(buffer) { + var str = ''; + for (var i = 0, l = buffer.length; i < l; i++) { + str += String.fromCharCode(buffer[i]); + } + return str; +} + +/** + * + * Converts a utf8.js encoded string to a buffer + * + * @api private + */ + +function stringToBuffer(string) { + var buf = Buffer.allocUnsafe(string.length); + for (var i = 0, l = string.length; i < l; i++) { + buf.writeUInt8(string.charCodeAt(i), i); + } + return buf; +} + +/** + * + * Converts an ArrayBuffer to a Buffer + * + * @api private + */ + +function arrayBufferToBuffer(data) { + // data is either an ArrayBuffer or ArrayBufferView. + var length = data.byteLength || data.length; + var offset = data.byteOffset || 0; + + return Buffer.from(data.buffer || data, offset, length); +} + +/** + * Encodes multiple messages (payload) as binary. + * + * <1 = binary, 0 = string>[...] + * + * Example: + * 1 3 255 1 2 3, if the binary contents are interpreted as 8 bit integers + * + * @param {Array} packets + * @return {Buffer} encoded payload + * @api private + */ + +exports.encodePayloadAsBinary = function (packets, callback) { + if (!packets.length) { + return callback(EMPTY_BUFFER); + } + + map(packets, encodeOneBinaryPacket, function(err, results) { + return callback(Buffer.concat(results)); + }); +}; + +function encodeOneBinaryPacket(p, doneCallback) { + + function onBinaryPacketEncode(packet) { + + var encodingLength = '' + packet.length; + var sizeBuffer; + + if (typeof packet === 'string') { + sizeBuffer = Buffer.allocUnsafe(encodingLength.length + 2); + sizeBuffer[0] = 0; // is a string (not true binary = 0) + for (var i = 0; i < encodingLength.length; i++) { + sizeBuffer[i + 1] = parseInt(encodingLength[i], 10); + } + sizeBuffer[sizeBuffer.length - 1] = 255; + return doneCallback(null, Buffer.concat([sizeBuffer, stringToBuffer(packet)])); + } + + sizeBuffer = Buffer.allocUnsafe(encodingLength.length + 2); + sizeBuffer[0] = 1; // is binary (true binary = 1) + for (var i = 0; i < encodingLength.length; i++) { + sizeBuffer[i + 1] = parseInt(encodingLength[i], 10); + } + sizeBuffer[sizeBuffer.length - 1] = 255; + + doneCallback(null, Buffer.concat([sizeBuffer, packet])); + } + + exports.encodePacket(p, true, true, onBinaryPacketEncode); + +} + + +/* + * Decodes data when a payload is maybe expected. Strings are decoded by + * interpreting each byte as a key code for entries marked to start with 0. See + * description of encodePayloadAsBinary + + * @param {Buffer} data, callback method + * @api public + */ + +exports.decodePayloadAsBinary = function (data, binaryType, callback) { + if (typeof binaryType === 'function') { + callback = binaryType; + binaryType = null; + } + + var bufferTail = data; + var buffers = []; + var i; + + while (bufferTail.length > 0) { + var strLen = ''; + var isString = bufferTail[0] === 0; + for (i = 1; ; i++) { + if (bufferTail[i] === 255) break; + // 310 = char length of Number.MAX_VALUE + if (strLen.length > 310) { + return callback(err, 0, 1); + } + strLen += '' + bufferTail[i]; + } + bufferTail = bufferTail.slice(strLen.length + 1); + + var msgLength = parseInt(strLen, 10); + + var msg = bufferTail.slice(1, msgLength + 1); + if (isString) msg = bufferToString(msg); + buffers.push(msg); + bufferTail = bufferTail.slice(msgLength + 1); + } + + var total = buffers.length; + for (i = 0; i < total; i++) { + var buffer = buffers[i]; + callback(exports.decodePacket(buffer, binaryType, true), i, total); + } +}; diff --git a/.pnpm-store/v11/files/13/381ef910a116a62bdd9e0566164cafde0eee57186459d7f1ac948d2ece9d35292acee70f1104c0b7638408c701e5cc9d6a47bdd6c33c09cd8b79e6d5877174 b/.pnpm-store/v11/files/13/381ef910a116a62bdd9e0566164cafde0eee57186459d7f1ac948d2ece9d35292acee70f1104c0b7638408c701e5cc9d6a47bdd6c33c09cd8b79e6d5877174 new file mode 100644 index 00000000..1da2e82f --- /dev/null +++ b/.pnpm-store/v11/files/13/381ef910a116a62bdd9e0566164cafde0eee57186459d7f1ac948d2ece9d35292acee70f1104c0b7638408c701e5cc9d6a47bdd6c33c09cd8b79e6d5877174 @@ -0,0 +1,158 @@ +# glob-base [![NPM version](https://badge.fury.io/js/glob-base.svg)](http://badge.fury.io/js/glob-base) [![Build Status](https://travis-ci.org/jonschlinkert/glob-base.svg)](https://travis-ci.org/jonschlinkert/glob-base) + +> Returns an object with the (non-glob) base path and the actual pattern. + +Use [glob-parent](https://github.com/es128/glob-parent) if you just want the base path. + +## Install with [npm](npmjs.org) + +```bash +npm i glob-base --save +``` + +## Related projects +* [glob-parent](https://github.com/es128/glob-parent): Strips glob magic from a string to provide the parent path +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. +* [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. +* [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification. +* [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to use. +* [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. + +## Usage + +```js +var globBase = require('glob-base'); + +globBase('a/b/.git/'); +//=> { base: 'a/b/.git/', isGlob: false, glob: '' }) + +globBase('a/b/**/e'); +//=> { base: 'a/b', isGlob: true, glob: '**/e' } + +globBase('a/b/*.{foo,bar}'); +//=> { base: 'a/b', isGlob: true, glob: '*.{foo,bar}' } + +globBase('a/b/.git/**'); +//=> { base: 'a/b/.git', isGlob: true, glob: '**' } + +globBase('a/b/c/*.md'); +//=> { base: 'a/b/c', isGlob: true, glob: '*.md' } + +globBase('a/b/c/.*.md'); +//=> { base: 'a/b/c', isGlob: true, glob: '.*.md' } + +globBase('a/b/{c,d}'); +//=> { base: 'a/b', isGlob: true, glob: '{c,d}' } + +globBase('!*.min.js'); +//=> { base: '.', isGlob: true, glob: '!*.min.js' } + +globBase('!foo'); +//=> { base: '.', isGlob: true, glob: '!foo' } + +globBase('!foo/(a|b).min.js'); +//=> { base: '.', isGlob: true, glob: '!foo/(a|b).min.js' } + +globBase(''); +//=> { base: '.', isGlob: false, glob: '' } + +globBase('**/*.md'); +//=> { base: '.', isGlob: true, glob: '**/*.md' } + +globBase('**/*.min.js'); +//=> { base: '.', isGlob: true, glob: '**/*.min.js' } + +globBase('**/.*'); +//=> { base: '.', isGlob: true, glob: '**/.*' } + +globBase('**/d'); +//=> { base: '.', isGlob: true, glob: '**/d' } + +globBase('*.*'); +//=> { base: '.', isGlob: true, glob: '*.*' } + +globBase('*.min.js'); +//=> { base: '.', isGlob: true, glob: '*.min.js' } + +globBase('*/*'); +//=> { base: '.', isGlob: true, glob: '*/*' } + +globBase('*b'); +//=> { base: '.', isGlob: true, glob: '*b' } + +globBase('.'); +//=> { base: '.', isGlob: false, glob: '.' } + +globBase('.*'); +//=> { base: '.', isGlob: true, glob: '.*' } + +globBase('./*'); +//=> { base: '.', isGlob: true, glob: '*' } + +globBase('/a'); +//=> { base: '/', isGlob: false, glob: 'a' } + +globBase('@(a|b)/e.f.g/'); +//=> { base: '.', isGlob: true, glob: '@(a|b)/e.f.g/' } + +globBase('[a-c]b*'); +//=> { base: '.', isGlob: true, glob: '[a-c]b*' } + +globBase('a'); +//=> { base: '.', isGlob: false, glob: 'a' } + +globBase('a.min.js'); +//=> { base: '.', isGlob: false, glob: 'a.min.js' } + +globBase('a/'); +//=> { base: 'a/', isGlob: false, glob: '' } + +globBase('a/**/j/**/z/*.md'); +//=> { base: 'a', isGlob: true, glob: '**/j/**/z/*.md' } + +globBase('a/*/c/*.md'); +//=> { base: 'a', isGlob: true, glob: '*/c/*.md' } + +globBase('a/?/c.md'); +//=> { base: 'a', isGlob: true, glob: '?/c.md' } + +globBase('a/??/c.js'); +//=> { base: 'a', isGlob: true, glob: '??/c.js' } + +globBase('a?b'); +//=> { base: '.', isGlob: true, glob: 'a?b' } + +globBase('bb'); +//=> { base: '.', isGlob: false, glob: 'bb' } + +globBase('c.md'); +//=> { base: '.', isGlob: false, glob: 'c.md' } +``` + +## Running tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/glob-base/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 08, 2015._ diff --git a/.pnpm-store/v11/files/13/41dc009ec5fa82ee8b0b3d90a7b36959b8439c67408e833f98572382532d6d9816a73ffc8bca19002ce53861f3f682ddf64de1f4c0f88a5fc7dc3aee6119ce b/.pnpm-store/v11/files/13/41dc009ec5fa82ee8b0b3d90a7b36959b8439c67408e833f98572382532d6d9816a73ffc8bca19002ce53861f3f682ddf64de1f4c0f88a5fc7dc3aee6119ce new file mode 100644 index 00000000..dc9ec98d --- /dev/null +++ b/.pnpm-store/v11/files/13/41dc009ec5fa82ee8b0b3d90a7b36959b8439c67408e833f98572382532d6d9816a73ffc8bca19002ce53861f3f682ddf64de1f4c0f88a5fc7dc3aee6119ce @@ -0,0 +1,44 @@ +import { ITestSuite } from "suman-types/dts/test-suite"; +import { ISumanConfig, ISumanOpts } from "suman-types/dts/global"; +import { ISumanInputs } from "suman-types/dts/suman"; +import { IInitOpts } from "suman-types/dts/index-init"; +import { ITestDataObj } from "suman-types/dts/it"; +export interface ITestBlockMethodCache { + [key: string]: Object; +} +export declare class Suman { + ctx?: ITestSuite; + supply: Object; + private __supply; + testBlockMethodCache: Map; + iocData: Object; + force: boolean; + fileName: string; + opts: ISumanOpts; + config: ISumanConfig; + slicedFileName: string; + timestamp: number; + sumanId: number; + allDescribeBlocks: Array; + describeOnlyIsTriggered: boolean; + deps: Array; + usingLiveSumanServer: boolean; + numHooksSkipped: number; + numHooksStubbed: number; + numBlocksSkipped: number; + rootSuiteDescription: string; + dateSuiteFinished: number; + dateSuiteStarted: number; + filename: string; + itOnlyIsTriggered: boolean; + extraArgs: Array; + sumanCompleted: boolean; + desc: string; + getQueue: Function; + constructor(obj: ISumanInputs); + getTableData(): void; + logFinished($exitCode: number, skippedString: string, cb: Function): void; + logResult(test: ITestDataObj): void; +} +export declare type ISuman = Suman; +export declare const makeSuman: ($module: NodeModule, opts: IInitOpts, sumanOpts: Partial, sumanConfig: Partial) => any; diff --git a/.pnpm-store/v11/files/13/7174eb65bf37a622ca58665c07952c9a411178f8839977f744d7838a2161f785bf2514ca31d432b2646408691576a2e876600c45ed9913e1551c6f4b0086d3 b/.pnpm-store/v11/files/13/7174eb65bf37a622ca58665c07952c9a411178f8839977f744d7838a2161f785bf2514ca31d432b2646408691576a2e876600c45ed9913e1551c6f4b0086d3 new file mode 100644 index 00000000..7b649eba --- /dev/null +++ b/.pnpm-store/v11/files/13/7174eb65bf37a622ca58665c07952c9a411178f8839977f744d7838a2161f785bf2514ca31d432b2646408691576a2e876600c45ed9913e1551c6f4b0086d3 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').asyncify; diff --git a/.pnpm-store/v11/files/13/745d837557c79c2def1c4302bc8a488d770fa058bf783ae6f5a00a6b29e8b10475484b1a203ece9b20e3f97594676dc7ccf0a4ffa3d6450097f8e477900c5f b/.pnpm-store/v11/files/13/745d837557c79c2def1c4302bc8a488d770fa058bf783ae6f5a00a6b29e8b10475484b1a203ece9b20e3f97594676dc7ccf0a4ffa3d6450097f8e477900c5f new file mode 100644 index 00000000..f92fdcf8 --- /dev/null +++ b/.pnpm-store/v11/files/13/745d837557c79c2def1c4302bc8a488d770fa058bf783ae6f5a00a6b29e8b10475484b1a203ece9b20e3f97594676dc7ccf0a4ffa3d6450097f8e477900c5f @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Brian Woodward + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/13/8861147f7a942b8e1ebb0aa0171d3b1afcc61830286417cf7998232d270e7c096b1ab3199ddf52595d4959c9d180fc803d204fe42c09adec4b5e038060721b b/.pnpm-store/v11/files/13/8861147f7a942b8e1ebb0aa0171d3b1afcc61830286417cf7998232d270e7c096b1ab3199ddf52595d4959c9d180fc803d204fe42c09adec4b5e038060721b new file mode 100644 index 00000000..f2a46bd0 --- /dev/null +++ b/.pnpm-store/v11/files/13/8861147f7a942b8e1ebb0aa0171d3b1afcc61830286417cf7998232d270e7c096b1ab3199ddf52595d4959c9d180fc803d204fe42c09adec4b5e038060721b @@ -0,0 +1,2 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&r.setSourceContent(n,t)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function f(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}n.getArg=r;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;p1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),S.push(r),"number"==typeof r.originalLine&&A.push(r)}g(S,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,g(A,a.compareByOriginalPositions),this.__originalMappings=A},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r + ********************************************************************/ + +#ifndef NAN_DEFINE_OWN_PROPERTY_HELPER_H_ +#define NAN_DEFINE_OWN_PROPERTY_HELPER_H_ + +namespace imp { + +inline Maybe DefineOwnPropertyHelper( + v8::PropertyAttribute current + , v8::Handle obj + , v8::Handle key + , v8::Handle value + , v8::PropertyAttribute attribs = v8::None) { + return !(current & v8::DontDelete) || // configurable OR + (!(current & v8::ReadOnly) && // writable AND + !((attribs ^ current) & ~v8::ReadOnly)) // same excluding RO + ? Just(obj->ForceSet(key, value, attribs)) + : Nothing(); +} + +} // end of namespace imp + +#endif // NAN_DEFINE_OWN_PROPERTY_HELPER_H_ diff --git a/.pnpm-store/v11/files/13/975a8e3026d66f9f2b108748020374c39c5a5ff0a58110cc7a671b8782b26882a8b4778a1c2806f122466460dfe8edd819f71b98d3c8ef3c05a609ea226912 b/.pnpm-store/v11/files/13/975a8e3026d66f9f2b108748020374c39c5a5ff0a58110cc7a671b8782b26882a8b4778a1c2806f122466460dfe8edd819f71b98d3c8ef3c05a609ea226912 new file mode 100644 index 00000000..933dad5b --- /dev/null +++ b/.pnpm-store/v11/files/13/975a8e3026d66f9f2b108748020374c39c5a5ff0a58110cc7a671b8782b26882a8b4778a1c2806f122466460dfe8edd819f71b98d3c8ef3c05a609ea226912 @@ -0,0 +1,128 @@ + +/** + * Module dependencies. + */ + +var EventEmitter = require('events').EventEmitter; +var parser = require('engine.io-parser'); +var util = require('util'); +var debug = require('debug')('engine:transport'); + +/** + * Expose the constructor. + */ + +module.exports = Transport; + +/** + * Noop function. + * + * @api private + */ + +function noop () {} + +/** + * Transport constructor. + * + * @param {http.IncomingMessage} request + * @api public + */ + +function Transport (req) { + this.readyState = 'open'; + this.discarded = false; +} + +/** + * Inherits from EventEmitter. + */ + +util.inherits(Transport, EventEmitter); + +/** + * Flags the transport as discarded. + * + * @api private + */ + +Transport.prototype.discard = function () { + this.discarded = true; +}; + +/** + * Called with an incoming HTTP request. + * + * @param {http.IncomingMessage} request + * @api private + */ + +Transport.prototype.onRequest = function (req) { + debug('setting request'); + this.req = req; +}; + +/** + * Closes the transport. + * + * @api private + */ + +Transport.prototype.close = function (fn) { + if ('closed' === this.readyState || 'closing' === this.readyState) return; + + this.readyState = 'closing'; + this.doClose(fn || noop); +}; + +/** + * Called with a transport error. + * + * @param {String} message error + * @param {Object} error description + * @api private + */ + +Transport.prototype.onError = function (msg, desc) { + if (this.listeners('error').length) { + var err = new Error(msg); + err.type = 'TransportError'; + err.description = desc; + this.emit('error', err); + } else { + debug('ignored transport error %s (%s)', msg, desc); + } +}; + +/** + * Called with parsed out a packets from the data stream. + * + * @param {Object} packet + * @api private + */ + +Transport.prototype.onPacket = function (packet) { + this.emit('packet', packet); +}; + +/** + * Called with the encoded packet data. + * + * @param {String} data + * @api private + */ + +Transport.prototype.onData = function (data) { + this.onPacket(parser.decodePacket(data)); +}; + +/** + * Called upon transport close. + * + * @api private + */ + +Transport.prototype.onClose = function () { + this.readyState = 'closed'; + this.emit('close'); +}; diff --git a/.pnpm-store/v11/files/13/9a29fe01fdc5923bf9111f6d9b2a38fd2e74cff8c7d1f8c46a7878258d324865521834b274f890312d7d39a2189a8df9f201543a946f42e66ae657b30b7436 b/.pnpm-store/v11/files/13/9a29fe01fdc5923bf9111f6d9b2a38fd2e74cff8c7d1f8c46a7878258d324865521834b274f890312d7d39a2189a8df9f201543a946f42e66ae657b30b7436 new file mode 100644 index 00000000..c7e59c7c --- /dev/null +++ b/.pnpm-store/v11/files/13/9a29fe01fdc5923bf9111f6d9b2a38fd2e74cff8c7d1f8c46a7878258d324865521834b274f890312d7d39a2189a8df9f201543a946f42e66ae657b30b7436 @@ -0,0 +1,94 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = cargo; + +var _queue = require('./internal/queue'); + +var _queue2 = _interopRequireDefault(_queue); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A cargo of tasks for the worker function to complete. Cargo inherits all of + * the same methods and event callbacks as [`queue`]{@link module:ControlFlow.queue}. + * @typedef {Object} CargoObject + * @memberOf module:ControlFlow + * @property {Function} length - A function returning the number of items + * waiting to be processed. Invoke like `cargo.length()`. + * @property {number} payload - An `integer` for determining how many tasks + * should be process per round. This property can be changed after a `cargo` is + * created to alter the payload on-the-fly. + * @property {Function} push - Adds `task` to the `queue`. The callback is + * called once the `worker` has finished processing the task. Instead of a + * single task, an array of `tasks` can be submitted. The respective callback is + * used for every task in the list. Invoke like `cargo.push(task, [callback])`. + * @property {Function} saturated - A callback that is called when the + * `queue.length()` hits the concurrency and further tasks will be queued. + * @property {Function} empty - A callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - A callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke like `cargo.idle()`. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke like `cargo.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke like `cargo.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. Invoke like `cargo.kill()`. + */ + +/** + * Creates a `cargo` object with the specified payload. Tasks added to the + * cargo will be processed altogether (up to the `payload` limit). If the + * `worker` is in progress, the task is queued until it becomes available. Once + * the `worker` has completed some tasks, each callback of those tasks is + * called. Check out [these](https://camo.githubusercontent.com/6bbd36f4cf5b35a0f11a96dcd2e97711ffc2fb37/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130382f62626330636662302d356632392d313165322d393734662d3333393763363464633835382e676966) [animations](https://camo.githubusercontent.com/f4810e00e1c5f5f8addbe3e9f49064fd5d102699/68747470733a2f2f662e636c6f75642e6769746875622e636f6d2f6173736574732f313637363837312f36383130312f38346339323036362d356632392d313165322d383134662d3964336430323431336266642e676966) + * for how `cargo` and `queue` work. + * + * While [`queue`]{@link module:ControlFlow.queue} passes only one task to one of a group of workers + * at a time, cargo passes an array of tasks to a single worker, repeating + * when the worker is finished. + * + * @name cargo + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.queue]{@link module:ControlFlow.queue} + * @category Control Flow + * @param {AsyncFunction} worker - An asynchronous function for processing an array + * of queued tasks. Invoked with `(tasks, callback)`. + * @param {number} [payload=Infinity] - An optional `integer` for determining + * how many tasks should be processed per round; if omitted, the default is + * unlimited. + * @returns {module:ControlFlow.CargoObject} A cargo object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the cargo and inner queue. + * @example + * + * // create a cargo object with payload 2 + * var cargo = async.cargo(function(tasks, callback) { + * for (var i=0; i + +type FlatArray = { + done: Arr; + recur: Arr extends ReadonlyArray ? FlatArray + : Arr; +}[Depth extends -1 ? "done" : "recur"]; + +interface ReadonlyArray { + /** + * Calls a defined callback function on each element of an array. Then, flattens the result into + * a new array. + * This is identical to a map followed by flat with depth 1. + * + * @param callback A function that accepts up to three arguments. The flatMap method calls the + * callback function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callback function. If + * thisArg is omitted, undefined is used as the this value. + */ + flatMap( + callback: (this: This, value: T, index: number, array: T[]) => U | ReadonlyArray, + thisArg?: This, + ): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat( + this: A, + depth?: D, + ): FlatArray[]; +} + +interface Array { + /** + * Calls a defined callback function on each element of an array. Then, flattens the result into + * a new array. + * This is identical to a map followed by flat with depth 1. + * + * @param callback A function that accepts up to three arguments. The flatMap method calls the + * callback function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callback function. If + * thisArg is omitted, undefined is used as the this value. + */ + flatMap( + callback: (this: This, value: T, index: number, array: T[]) => U | ReadonlyArray, + thisArg?: This, + ): U[]; + + /** + * Returns a new array with all sub-array elements concatenated into it recursively up to the + * specified depth. + * + * @param depth The maximum recursion depth + */ + flat( + this: A, + depth?: D, + ): FlatArray[]; +} diff --git a/.pnpm-store/v11/files/13/c3c9df3044dd8385d7323c451196327e87b0e7bc0ba24f8e73e95064f0633eb81d14a14c7f29c7e7b4035dba1edcc8bf63fae12ff2a210a52d9b007b7cc4c4 b/.pnpm-store/v11/files/13/c3c9df3044dd8385d7323c451196327e87b0e7bc0ba24f8e73e95064f0633eb81d14a14c7f29c7e7b4035dba1edcc8bf63fae12ff2a210a52d9b007b7cc4c4 new file mode 100644 index 00000000..68137ec2 --- /dev/null +++ b/.pnpm-store/v11/files/13/c3c9df3044dd8385d7323c451196327e87b0e7bc0ba24f8e73e95064f0633eb81d14a14c7f29c7e7b4035dba1edcc8bf63fae12ff2a210a52d9b007b7cc4c4 @@ -0,0 +1,44 @@ +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ +function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; +} + +module.exports = unicodeSize; diff --git a/.pnpm-store/v11/files/13/d09a4cb08acefd0f0b96e32d810dba2ee24be738cc327e2309006f2f359d2f1282af9fad133ac9b3e8c86fdc6a51e081d882bdafcbfd35fb5fba83252a08a1 b/.pnpm-store/v11/files/13/d09a4cb08acefd0f0b96e32d810dba2ee24be738cc327e2309006f2f359d2f1282af9fad133ac9b3e8c86fdc6a51e081d882bdafcbfd35fb5fba83252a08a1 new file mode 100644 index 00000000..ec431251 --- /dev/null +++ b/.pnpm-store/v11/files/13/d09a4cb08acefd0f0b96e32d810dba2ee24be738cc327e2309006f2f359d2f1282af9fad133ac9b3e8c86fdc6a51e081d882bdafcbfd35fb5fba83252a08a1 @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "0.11" + - "0.10" + - "0.8" + - "0.6" \ No newline at end of file diff --git a/.pnpm-store/v11/files/13/dc96654bfe9b227989e677134ead6ad0a52fd9f0fb3f51224d4198bb0d1795feccfb53886b3ef827ad1504c4cc1c48233a743149e100170827b8a53d78cc39 b/.pnpm-store/v11/files/13/dc96654bfe9b227989e677134ead6ad0a52fd9f0fb3f51224d4198bb0d1795feccfb53886b3ef827ad1504c4cc1c48233a743149e100170827b8a53d78cc39 new file mode 100644 index 00000000..6f71d9a6 --- /dev/null +++ b/.pnpm-store/v11/files/13/dc96654bfe9b227989e677134ead6ad0a52fd9f0fb3f51224d4198bb0d1795feccfb53886b3ef827ad1504c4cc1c48233a743149e100170827b8a53d78cc39 @@ -0,0 +1,737 @@ +define(["exports", "module"], function (exports, module) { + // File ignored in coverage tests via setting in .istanbul.yml + /* Jison generated parser */ + "use strict"; + + var handlebars = (function () { + var parser = { trace: function trace() {}, + yy: {}, + symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, + productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + break; + case 2: + this.$ = yy.prepareProgram($$[$0]); + break; + case 3: + this.$ = $$[$0]; + break; + case 4: + this.$ = $$[$0]; + break; + case 5: + this.$ = $$[$0]; + break; + case 6: + this.$ = $$[$0]; + break; + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = { + type: 'CommentStatement', + value: yy.stripComment($$[$0]), + strip: yy.stripFlags($$[$0], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 10: + this.$ = { + type: 'ContentStatement', + original: $$[$0], + value: $$[$0], + loc: yy.locInfo(this._$) + }; + + break; + case 11: + this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 12: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; + break; + case 13: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); + break; + case 14: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); + break; + case 15: + this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 16: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 17: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 18: + this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; + break; + case 19: + var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), + program = yy.prepareProgram([inverse], $$[$0 - 1].loc); + program.chained = true; + + this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; + + break; + case 20: + this.$ = $$[$0]; + break; + case 21: + this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; + break; + case 22: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 23: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 24: + this.$ = { + type: 'PartialStatement', + name: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + indent: '', + strip: yy.stripFlags($$[$0 - 4], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 25: + this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 26: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; + break; + case 27: + this.$ = $$[$0]; + break; + case 28: + this.$ = $$[$0]; + break; + case 29: + this.$ = { + type: 'SubExpression', + path: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + loc: yy.locInfo(this._$) + }; + + break; + case 30: + this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 31: + this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 32: + this.$ = yy.id($$[$0 - 1]); + break; + case 33: + this.$ = $$[$0]; + break; + case 34: + this.$ = $$[$0]; + break; + case 35: + this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 36: + this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; + break; + case 37: + this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; + break; + case 38: + this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; + break; + case 39: + this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; + break; + case 40: + this.$ = $$[$0]; + break; + case 41: + this.$ = $$[$0]; + break; + case 42: + this.$ = yy.preparePath(true, $$[$0], this._$); + break; + case 43: + this.$ = yy.preparePath(false, $$[$0], this._$); + break; + case 44: + $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; + break; + case 45: + this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; + break; + case 46: + this.$ = []; + break; + case 47: + $$[$0 - 1].push($$[$0]); + break; + case 48: + this.$ = []; + break; + case 49: + $$[$0 - 1].push($$[$0]); + break; + case 50: + this.$ = []; + break; + case 51: + $$[$0 - 1].push($$[$0]); + break; + case 58: + this.$ = []; + break; + case 59: + $$[$0 - 1].push($$[$0]); + break; + case 64: + this.$ = []; + break; + case 65: + $$[$0 - 1].push($$[$0]); + break; + case 70: + this.$ = []; + break; + case 71: + $$[$0 - 1].push($$[$0]); + break; + case 78: + this.$ = []; + break; + case 79: + $$[$0 - 1].push($$[$0]); + break; + case 82: + this.$ = []; + break; + case 83: + $$[$0 - 1].push($$[$0]); + break; + case 86: + this.$ = []; + break; + case 87: + $$[$0 - 1].push($$[$0]); + break; + case 90: + this.$ = []; + break; + case 91: + $$[$0 - 1].push($$[$0]); + break; + case 94: + this.$ = []; + break; + case 95: + $$[$0 - 1].push($$[$0]); + break; + case 98: + this.$ = [$$[$0]]; + break; + case 99: + $$[$0 - 1].push($$[$0]); + break; + case 100: + this.$ = [$$[$0]]; + break; + case 101: + $$[$0 - 1].push($$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], + defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] }, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], + lstack = [], + table = this.table, + yytext = "", + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + var ranges = this.lexer.options && this.lexer.options.ranges; + if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== "number") { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, + preErrorSymbol, + state, + action, + a, + r, + yyval = {}, + p, + len, + newState, + expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + if (!recovering) { + expected = []; + for (p in table[state]) if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + if (this.lexer.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + /* Jison generated lexer */ + var lexer = (function () { + var lexer = { EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function setInput(input) { + this._input = input; + this._more = this._less = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; + if (this.options.ranges) this.yylloc.range = [0, 0]; + this.offset = 0; + return this; + }, + input: function input() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) this.yylloc.range[1]++; + + this._input = this._input.slice(1); + return ch; + }, + unput: function unput(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) this.yylineno -= lines.length - 1; + var r = this.yylloc.range; + + this.yylloc = { first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + return this; + }, + more: function more() { + this._more = true; + return this; + }, + less: function less(n) { + this.unput(this.match.slice(n)); + }, + pastInput: function pastInput() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function upcomingInput() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + showPosition: function showPosition() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + next: function next() { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, match, tempMatch, index, col, lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (!this.options.flex) break; + } + } + if (match) { + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = { first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) this.done = false; + if (token) return token;else return; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); + } + }, + lex: function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + return this.conditionStack.pop(); + }, + _currentRules: function _currentRules() { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + }, + topState: function topState() { + return this.conditionStack[this.conditionStack.length - 2]; + }, + pushState: function begin(condition) { + this.begin(condition); + } }; + lexer.options = {}; + lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + + function strip(start, end) { + return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start); + } + + var YYSTATE = YY_START; + switch ($avoiding_name_collisions) { + case 0: + if (yy_.yytext.slice(-2) === "\\\\") { + strip(0, 1); + this.begin("mu"); + } else if (yy_.yytext.slice(-1) === "\\") { + strip(0, 1); + this.begin("emu"); + } else { + this.begin("mu"); + } + if (yy_.yytext) return 15; + + break; + case 1: + return 15; + break; + case 2: + this.popState(); + return 15; + + break; + case 3: + this.begin('raw');return 15; + break; + case 4: + this.popState(); + // Should be using `this.topState()` below, but it currently + // returns the second top instead of the first top. Opened an + // issue about it at https://github.com/zaach/jison/issues/291 + if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { + return 15; + } else { + strip(5, 9); + return 'END_RAW_BLOCK'; + } + + break; + case 5: + return 15; + break; + case 6: + this.popState(); + return 14; + + break; + case 7: + return 65; + break; + case 8: + return 68; + break; + case 9: + return 19; + break; + case 10: + this.popState(); + this.begin('raw'); + return 23; + + break; + case 11: + return 55; + break; + case 12: + return 60; + break; + case 13: + return 29; + break; + case 14: + return 47; + break; + case 15: + this.popState();return 44; + break; + case 16: + this.popState();return 44; + break; + case 17: + return 34; + break; + case 18: + return 39; + break; + case 19: + return 51; + break; + case 20: + return 48; + break; + case 21: + this.unput(yy_.yytext); + this.popState(); + this.begin('com'); + + break; + case 22: + this.popState(); + return 14; + + break; + case 23: + return 48; + break; + case 24: + return 73; + break; + case 25: + return 72; + break; + case 26: + return 72; + break; + case 27: + return 87; + break; + case 28: + // ignore whitespace + break; + case 29: + this.popState();return 54; + break; + case 30: + this.popState();return 33; + break; + case 31: + yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; + break; + case 32: + yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; + break; + case 33: + return 85; + break; + case 34: + return 82; + break; + case 35: + return 82; + break; + case 36: + return 83; + break; + case 37: + return 84; + break; + case 38: + return 81; + break; + case 39: + return 75; + break; + case 40: + return 77; + break; + case 41: + return 72; + break; + case 42: + yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; + break; + case 43: + return 'INVALID'; + break; + case 44: + return 5; + break; + } + }; + lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; + lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + }Parser.prototype = parser;parser.Parser = Parser; + return new Parser(); + })();module.exports = handlebars; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLFFBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixZQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLGNBQUUsRUFBRSxFQUFFO0FBQ04sb0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLHlCQUF5QixFQUFDLEVBQUUsRUFBQyxxQkFBcUIsRUFBQyxFQUFFLEVBQUMscUJBQXFCLEVBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsOEJBQThCLEVBQUMsRUFBRSxFQUFDLDBCQUEwQixFQUFDLEVBQUUsRUFBQywwQkFBMEIsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQyxzQkFBc0IsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxxQkFBcUIsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsOEJBQThCLEVBQUMsRUFBRSxFQUFDLDBCQUEwQixFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLDhCQUE4QixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUM7QUFDNW1ELHNCQUFVLEVBQUUsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSx3QkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JzQix5QkFBYSxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFDdkU7O0FBRUYsb0JBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFRLE9BQU87QUFDZix5QkFBSyxDQUFDO0FBQUUsK0JBQU8sRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssQ0FBQztBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFDRiw0QkFBSSxDQUFDLENBQUMsR0FBRztBQUNQLGdDQUFJLEVBQUUsa0JBQWtCO0FBQ3hCLGlDQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsaUNBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsK0JBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7eUJBQ3pCLENBQUM7O0FBRU4sOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFDSCw0QkFBSSxDQUFDLENBQUMsR0FBRztBQUNQLGdDQUFJLEVBQUUsa0JBQWtCO0FBQ3hCLG9DQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoQixpQ0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDYiwrQkFBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt5QkFDekIsQ0FBQzs7QUFFTiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0Riw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQ0gsNEJBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7NEJBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwrQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNILDRCQUFJLENBQUMsQ0FBQyxHQUFHO0FBQ1AsZ0NBQUksRUFBRSxrQkFBa0I7QUFDeEIsZ0NBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLGtDQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7QUFDaEIsZ0NBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLGtDQUFNLEVBQUUsRUFBRTtBQUNWLGlDQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QywrQkFBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzt5QkFDekIsQ0FBQzs7QUFFTiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlHLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQ0gsNEJBQUksQ0FBQyxDQUFDLEdBQUc7QUFDUCxnQ0FBSSxFQUFFLGVBQWU7QUFDckIsZ0NBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLGtDQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7QUFDaEIsZ0NBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLCtCQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3lCQUN6QixDQUFDOztBQUVOLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDekUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDbkcsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBRSwwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Ryw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEdBQUc7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxHQUFHO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDhCQUFNO0FBQUEsaUJBQ0w7YUFDQTtBQUNELGlCQUFLLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDLy9WLDBCQUFjLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDO0FBQ2xNLHNCQUFVLEVBQUUsU0FBUyxVQUFVLENBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUN4QyxzQkFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN4QjtBQUNELGlCQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3pCLG9CQUFJLElBQUksR0FBRyxJQUFJO29CQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQUUsTUFBTSxHQUFHLEVBQUU7b0JBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO29CQUFFLE1BQU0sR0FBRyxFQUFFO29CQUFFLFFBQVEsR0FBRyxDQUFDO29CQUFFLE1BQU0sR0FBRyxDQUFDO29CQUFFLFVBQVUsR0FBRyxDQUFDO29CQUFFLE1BQU0sR0FBRyxDQUFDO29CQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDM0osb0JBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLG9CQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCLG9CQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLG9CQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEIsb0JBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUMzQixvQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDOUIsc0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkIsb0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM3RCxvQkFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUN6Qyx5QkFBUyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2pCLHlCQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQywwQkFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNsQywwQkFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDckM7QUFDRCx5QkFBUyxHQUFHLEdBQUc7QUFDWCx3QkFBSSxLQUFLLENBQUM7QUFDVix5QkFBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlCLHdCQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUMzQiw2QkFBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDO3FCQUN6QztBQUNELDJCQUFPLEtBQUssQ0FBQztpQkFDaEI7QUFDRCxvQkFBSSxNQUFNO29CQUFFLGNBQWM7b0JBQUUsS0FBSztvQkFBRSxNQUFNO29CQUFFLENBQUM7b0JBQUUsQ0FBQztvQkFBRSxLQUFLLEdBQUcsRUFBRTtvQkFBRSxDQUFDO29CQUFFLEdBQUc7b0JBQUUsUUFBUTtvQkFBRSxRQUFRLENBQUM7QUFDeEYsdUJBQU8sSUFBSSxFQUFFO0FBQ1QseUJBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQyx3QkFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLDhCQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDdkMsTUFBTTtBQUNILDRCQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLElBQUksV0FBVyxFQUFFO0FBQ2pELGtDQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7eUJBQ2xCO0FBQ0QsOEJBQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqRDtBQUNELHdCQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDL0QsNEJBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQiw0QkFBSSxDQUFDLFVBQVUsRUFBRTtBQUNiLG9DQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2QsaUNBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDN0Isd0NBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7NkJBQ2pEO0FBQ0wsZ0NBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDekIsc0NBQU0sR0FBRyxzQkFBc0IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFBLEFBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUEsQUFBQyxHQUFHLEdBQUcsQ0FBQzs2QkFDdkwsTUFBTTtBQUNILHNDQUFNLEdBQUcsc0JBQXNCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQSxBQUFDLEdBQUcsZUFBZSxJQUFJLE1BQU0sSUFBSSxDQUFDLEdBQUMsY0FBYyxHQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQSxBQUFDLEdBQUcsR0FBRyxDQUFBLEFBQUMsQ0FBQzs2QkFDcko7QUFDRCxnQ0FBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO3lCQUMxSjtxQkFDSjtBQUNELHdCQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDakQsOEJBQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELEdBQUcsS0FBSyxHQUFHLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQztxQkFDdkc7QUFDRCw0QkFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLDZCQUFLLENBQUM7QUFDRixpQ0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuQixrQ0FBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLGtDQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0IsaUNBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsa0NBQU0sR0FBRyxJQUFJLENBQUM7QUFDZCxnQ0FBSSxDQUFDLGNBQWMsRUFBRTtBQUNqQixzQ0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzNCLHNDQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDM0Isd0NBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztBQUMvQixxQ0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzFCLG9DQUFJLFVBQVUsR0FBRyxDQUFDLEVBQ2QsVUFBVSxFQUFFLENBQUM7NkJBQ3BCLE1BQU07QUFDSCxzQ0FBTSxHQUFHLGNBQWMsQ0FBQztBQUN4Qiw4Q0FBYyxHQUFHLElBQUksQ0FBQzs2QkFDekI7QUFDRCxrQ0FBTTtBQUFBLEFBQ1YsNkJBQUssQ0FBQztBQUNGLCtCQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxpQ0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN0QyxpQ0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFBLEFBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFBLEFBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFDLENBQUM7QUFDMU8sZ0NBQUksTUFBTSxFQUFFO0FBQ1IscUNBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQSxBQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ3RHO0FBQ0QsNkJBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pHLGdDQUFJLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUMxQix1Q0FBTyxDQUFDLENBQUM7NkJBQ1o7QUFDRCxnQ0FBSSxHQUFHLEVBQUU7QUFDTCxxQ0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxzQ0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLHNDQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7NkJBQ3RDO0FBQ0QsaUNBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLGtDQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixrQ0FBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsb0NBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLGlDQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLGtDQUFNO0FBQUEsQUFDViw2QkFBSyxDQUFDO0FBQ0YsbUNBQU8sSUFBSSxDQUFDO0FBQUEscUJBQ2Y7aUJBQ0o7QUFDRCx1QkFBTyxJQUFJLENBQUM7YUFDZjtTQUNBLENBQUM7O0FBRUYsWUFBSSxLQUFLLEdBQUcsQ0FBQyxZQUFVO0FBQ3ZCLGdCQUFJLEtBQUssR0FBSSxFQUFDLEdBQUcsRUFBQyxDQUFDO0FBQ25CLDBCQUFVLEVBQUMsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNsQyx3QkFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRTtBQUNoQiw0QkFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDeEMsTUFBTTtBQUNILDhCQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN4QjtpQkFDSjtBQUNMLHdCQUFRLEVBQUMsa0JBQVUsS0FBSyxFQUFFO0FBQ2xCLHdCQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNwQix3QkFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQzVDLHdCQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLHdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDN0Msd0JBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsQyx3QkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFDLFVBQVUsRUFBQyxDQUFDLEVBQUMsWUFBWSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsQ0FBQztBQUN0RSx3QkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCx3QkFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsMkJBQU8sSUFBSSxDQUFDO2lCQUNmO0FBQ0wscUJBQUssRUFBQyxpQkFBWTtBQUNWLHdCQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLHdCQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNsQix3QkFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2Qsd0JBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNkLHdCQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNqQix3QkFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDbkIsd0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4Qyx3QkFBSSxLQUFLLEVBQUU7QUFDUCw0QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLDRCQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUMzQixNQUFNO0FBQ0gsNEJBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7cUJBQzdCO0FBQ0Qsd0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7QUFFaEQsd0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsMkJBQU8sRUFBRSxDQUFDO2lCQUNiO0FBQ0wscUJBQUssRUFBQyxlQUFVLEVBQUUsRUFBRTtBQUNaLHdCQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQ3BCLHdCQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUV0Qyx3QkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQix3QkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUMsR0FBRyxHQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU5RCx3QkFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUM7QUFDbkIsd0JBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2pELHdCQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCx3QkFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRTdELHdCQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUM7QUFDcEQsd0JBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDOztBQUUxQix3QkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDL0MsaUNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUM7QUFDMUIsb0NBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVk7QUFDdEMsbUNBQVcsRUFBRSxLQUFLLEdBQ2QsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFBLEdBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUNySSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxHQUFHO3FCQUNqQyxDQUFDOztBQUVKLHdCQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3JCLDRCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQztxQkFDeEQ7QUFDRCwyQkFBTyxJQUFJLENBQUM7aUJBQ2Y7QUFDTCxvQkFBSSxFQUFDLGdCQUFZO0FBQ1Qsd0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2xCLDJCQUFPLElBQUksQ0FBQztpQkFDZjtBQUNMLG9CQUFJLEVBQUMsY0FBVSxDQUFDLEVBQUU7QUFDVix3QkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNuQztBQUNMLHlCQUFTLEVBQUMscUJBQVk7QUFDZCx3QkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0UsMkJBQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUMsRUFBRSxDQUFBLEdBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQzlFO0FBQ0wsNkJBQWEsRUFBQyx5QkFBWTtBQUNsQix3QkFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUN0Qix3QkFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRTtBQUNsQiw0QkFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNqRDtBQUNELDJCQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLElBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztpQkFDL0U7QUFDTCw0QkFBWSxFQUFDLHdCQUFZO0FBQ2pCLHdCQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0Isd0JBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLDJCQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBQyxHQUFHLENBQUM7aUJBQ3BEO0FBQ0wsb0JBQUksRUFBQyxnQkFBWTtBQUNULHdCQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDWCwrQkFBTyxJQUFJLENBQUMsR0FBRyxDQUFDO3FCQUNuQjtBQUNELHdCQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQzs7QUFFbkMsd0JBQUksS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLEdBQUcsRUFDSCxLQUFLLENBQUM7QUFDVix3QkFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDYiw0QkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDakIsNEJBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO3FCQUNuQjtBQUNELHdCQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDakMseUJBQUssSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLGlDQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELDRCQUFJLFNBQVMsS0FBSyxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUEsQUFBQyxFQUFFO0FBQ2hFLGlDQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ2xCLGlDQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsZ0NBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNO3lCQUNqQztxQkFDSjtBQUNELHdCQUFJLEtBQUssRUFBRTtBQUNQLDZCQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzFDLDRCQUFJLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDekMsNEJBQUksQ0FBQyxNQUFNLEdBQUcsRUFBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTO0FBQ2pDLHFDQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDO0FBQzFCLHdDQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO0FBQ3JDLHVDQUFXLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUMsQ0FBQztBQUM5Siw0QkFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsNEJBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLDRCQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNyQiw0QkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqQyw0QkFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUNyQixnQ0FBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3lCQUNqRTtBQUNELDRCQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQiw0QkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakQsNEJBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLDZCQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckgsNEJBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ2hELDRCQUFJLEtBQUssRUFBRSxPQUFPLEtBQUssQ0FBQyxLQUNuQixPQUFPO3FCQUNmO0FBQ0Qsd0JBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUU7QUFDcEIsK0JBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztxQkFDbkIsTUFBTTtBQUNILCtCQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLElBQUUsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUEsQUFBQyxHQUFDLHdCQUF3QixHQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFDdEcsRUFBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO3FCQUN6RDtpQkFDSjtBQUNMLG1CQUFHLEVBQUMsU0FBUyxHQUFHLEdBQUk7QUFDWix3QkFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLHdCQUFJLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUMxQiwrQkFBTyxDQUFDLENBQUM7cUJBQ1osTUFBTTtBQUNILCtCQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDckI7aUJBQ0o7QUFDTCxxQkFBSyxFQUFDLFNBQVMsS0FBSyxDQUFFLFNBQVMsRUFBRTtBQUN6Qix3QkFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZDO0FBQ0wsd0JBQVEsRUFBQyxTQUFTLFFBQVEsR0FBSTtBQUN0QiwyQkFBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUNwQztBQUNMLDZCQUFhLEVBQUMsU0FBUyxhQUFhLEdBQUk7QUFDaEMsMkJBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2lCQUNuRjtBQUNMLHdCQUFRLEVBQUMsb0JBQVk7QUFDYiwyQkFBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1RDtBQUNMLHlCQUFTLEVBQUMsU0FBUyxLQUFLLENBQUUsU0FBUyxFQUFFO0FBQzdCLHdCQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QixFQUFDLEFBQUMsQ0FBQztBQUNSLGlCQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNuQixpQkFBSyxDQUFDLGFBQWEsR0FBRyxTQUFTLFNBQVMsQ0FBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLHlCQUF5QixFQUFDLFFBQVEsRUFDaEY7O0FBR0YseUJBQVMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDekIsMkJBQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUM7aUJBQzNFOztBQUdELG9CQUFJLE9BQU8sR0FBQyxRQUFRLENBQUE7QUFDcEIsd0JBQU8seUJBQXlCO0FBQ2hDLHlCQUFLLENBQUM7QUFDNkIsNEJBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7QUFDbEMsaUNBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWCxnQ0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDbEIsTUFBTSxJQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3ZDLGlDQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsZ0NBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQ25CLE1BQU07QUFDTCxnQ0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDbEI7QUFDRCw0QkFBRyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOztBQUU1RCw4QkFBTTtBQUFBLEFBQ04seUJBQUssQ0FBQztBQUFDLCtCQUFPLEVBQUUsQ0FBQztBQUNqQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssQ0FBQztBQUM2Qiw0QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLCtCQUFPLEVBQUUsQ0FBQzs7QUFFN0MsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQyw0QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQzRCLDRCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Ozs7QUFJaEIsNEJBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDL0QsbUNBQU8sRUFBRSxDQUFDO3lCQUNYLE1BQU07QUFDTCxpQ0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNaLG1DQUFPLGVBQWUsQ0FBQzt5QkFDeEI7O0FBRW5DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQUUsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxDQUFDO0FBQ0osNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQiwrQkFBTyxFQUFFLENBQUM7O0FBRVosOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDakIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDakIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLENBQUM7QUFBRSwrQkFBTyxFQUFFLENBQUM7QUFDbEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFDMkIsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQiw0QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwrQkFBTyxFQUFFLENBQUM7O0FBRTVDLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQ0wsNEJBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLDRCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsNEJBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXBCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQ0wsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQiwrQkFBTyxFQUFFLENBQUM7O0FBRVosOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDbEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDbEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDbEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDbEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxFQUFFLENBQUM7QUFDbEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7O0FBQ1AsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywyQkFBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsR0FBRyxDQUFDLENBQUMsQUFBQyxPQUFPLEVBQUUsQ0FBQztBQUMvRCw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDJCQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxHQUFHLENBQUMsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9ELDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMkJBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFDLElBQUksQ0FBQyxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxTQUFTLENBQUM7QUFDekIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywrQkFBTyxDQUFDLENBQUM7QUFDakIsOEJBQU07QUFBQSxpQkFDTDthQUNBLENBQUM7QUFDRixpQkFBSyxDQUFDLEtBQUssR0FBRyxDQUFDLDBCQUEwQixFQUFDLGVBQWUsRUFBQywrQ0FBK0MsRUFBQyx3QkFBd0IsRUFBQyxvRUFBb0UsRUFBQyw4QkFBOEIsRUFBQyx5QkFBeUIsRUFBQyxTQUFTLEVBQUMsU0FBUyxFQUFDLGVBQWUsRUFBQyxlQUFlLEVBQUMsZ0JBQWdCLEVBQUMsaUJBQWlCLEVBQUMsbUJBQW1CLEVBQUMsaUJBQWlCLEVBQUMsNEJBQTRCLEVBQUMsaUNBQWlDLEVBQUMsaUJBQWlCLEVBQUMsd0JBQXdCLEVBQUMsaUJBQWlCLEVBQUMsZ0JBQWdCLEVBQUMsa0JBQWtCLEVBQUMsNEJBQTRCLEVBQUMsa0JBQWtCLEVBQUMsUUFBUSxFQUFDLFdBQVcsRUFBQywyQkFBMkIsRUFBQyxZQUFZLEVBQUMsVUFBVSxFQUFDLGlCQUFpQixFQUFDLGVBQWUsRUFBQyxzQkFBc0IsRUFBQyxzQkFBc0IsRUFBQyxRQUFRLEVBQUMsd0JBQXdCLEVBQUMseUJBQXlCLEVBQUMsNkJBQTZCLEVBQUMsd0JBQXdCLEVBQUMseUNBQXlDLEVBQUMsY0FBYyxFQUFDLFNBQVMsRUFBQyx5REFBeUQsRUFBQyx3QkFBd0IsRUFBQyxRQUFRLEVBQUMsUUFBUSxDQUFDLENBQUM7QUFDbmdDLGlCQUFLLENBQUMsVUFBVSxHQUFHLEVBQUMsSUFBSSxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsbUJBQU8sS0FBSyxDQUFDO1NBQUMsQ0FBQSxFQUFHLENBQUE7QUFDakIsY0FBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDckIsaUJBQVMsTUFBTSxHQUFJO0FBQUUsZ0JBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1NBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsZUFBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0tBQ2pCLENBQUEsRUFBRyxDQUFDLGlCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXlxcL10pKS8sL14oPzpcXHtcXHtcXHtcXHtcXC9bXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89Wz19XFxzXFwvLl0pXFx9XFx9XFx9XFx9KS8sL14oPzpbXlxceDAwXSs/KD89KFxce1xce1xce1xceykpKS8sL14oPzpbXFxzXFxTXSo/LS0ofik/XFx9XFx9KS8sL14oPzpcXCgpLywvXig/OlxcKSkvLC9eKD86XFx7XFx7XFx7XFx7KS8sL14oPzpcXH1cXH1cXH1cXH0pLywvXig/Olxce1xceyh+KT8+KS8sL14oPzpcXHtcXHsofik/Iz4pLywvXig/Olxce1xceyh+KT8jXFwqPykvLC9eKD86XFx7XFx7KH4pP1xcLykvLC9eKD86XFx7XFx7KH4pP1xcXlxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcXikvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxiKS8sL14oPzpcXHtcXHsofik/XFx7KS8sL14oPzpcXHtcXHsofik/JikvLC9eKD86XFx7XFx7KH4pPyEtLSkvLC9eKD86XFx7XFx7KH4pPyFbXFxzXFxTXSo/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFwqPykvLC9eKD86PSkvLC9eKD86XFwuXFwuKS8sL14oPzpcXC4oPz0oWz1+fVxcc1xcLy4pfF0pKSkvLC9eKD86W1xcLy5dKS8sL14oPzpcXHMrKS8sL14oPzpcXH0ofik/XFx9XFx9KS8sL14oPzoofik/XFx9XFx9KS8sL14oPzpcIihcXFxcW1wiXXxbXlwiXSkqXCIpLywvXig/OicoXFxcXFsnXXxbXiddKSonKS8sL14oPzpAKS8sL14oPzp0cnVlKD89KFt+fVxccyldKSkpLywvXig/OmZhbHNlKD89KFt+fVxccyldKSkpLywvXig/OnVuZGVmaW5lZCg/PShbfn1cXHMpXSkpKS8sL14oPzpudWxsKD89KFt+fVxccyldKSkpLywvXig/Oi0/WzAtOV0rKD86XFwuWzAtOV0rKT8oPz0oW359XFxzKV0pKSkvLC9eKD86YXNcXHMrXFx8KS8sL14oPzpcXHwpLywvXig/OihbXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89KFs9fn1cXHNcXC8uKXxdKSkpKS8sL14oPzpcXFsoXFxcXFxcXXxbXlxcXV0pKlxcXSkvLC9eKD86LikvLC9eKD86JCkvXTtcbmxleGVyLmNvbmRpdGlvbnMgPSB7XCJtdVwiOntcInJ1bGVzXCI6WzcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImVtdVwiOntcInJ1bGVzXCI6WzJdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiY29tXCI6e1wicnVsZXNcIjpbNl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJyYXdcIjp7XCJydWxlc1wiOlszLDQsNV0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJJTklUSUFMXCI6e1wicnVsZXNcIjpbMCwxLDQ0XSxcImluY2x1c2l2ZVwiOnRydWV9fTtcbnJldHVybiBsZXhlcjt9KSgpXG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7IHRoaXMueXkgPSB7fTsgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBoYW5kbGViYXJzO1xuIl19 diff --git a/.pnpm-store/v11/files/13/e6f9713f9cc5d3e5fe4069c137a7abcc2d02fc473a77f4fef581ae5a357206b4533ba1756a109ea6e67f434ae578d15ea9855693e2202ecb4fee6e6adae790 b/.pnpm-store/v11/files/13/e6f9713f9cc5d3e5fe4069c137a7abcc2d02fc473a77f4fef581ae5a357206b4533ba1756a109ea6e67f434ae578d15ea9855693e2202ecb4fee6e6adae790 new file mode 100644 index 00000000..11422761 --- /dev/null +++ b/.pnpm-store/v11/files/13/e6f9713f9cc5d3e5fe4069c137a7abcc2d02fc473a77f4fef581ae5a357206b4533ba1756a109ea6e67f434ae578d15ea9855693e2202ecb4fee6e6adae790 @@ -0,0 +1,90 @@ +# is-equal-shallow [![NPM version](https://badge.fury.io/js/is-equal-shallow.svg)](http://badge.fury.io/js/is-equal-shallow) [![Build Status](https://travis-ci.org/jonschlinkert/is-equal-shallow.svg)](https://travis-ci.org/jonschlinkert/is-equal-shallow) + +> Does a shallow comparison of two objects, returning false if the keys or values differ. + +The purpose of this lib is to do the fastest comparison possible of two objects when the values will predictably be primitives. + +* only compares objects. +* only compares the first level of each object +* values must be primitives. If a value is not a primitive, even if the values are the same, `false` is returned. + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i is-equal-shallow --save +``` + +## Usage + +```js +var equals = require('is-equal-shallow'); +equals(object_a, object_b); +``` + +**Examples** + +```js +equals({a: true, b: true}, {a: true, b: true}); +//=> 'true' + +equals({a: true, b: false}, {c: false, b: false}); +//=> 'false' + +equals({a: true, b: false}, {a: false, b: false}); +//=> 'false' +``` + +Strict comparison for equality: + +```js +equals({a: true, b: true}, {a: true, b: 'true'}); +//=> 'false' +``` + +When values are not primitives, `false` is always returned: + +```js +equals({ b: {}}, { b: {}}); +//=> 'false' + +equals({ b: []}, { b: []}); +//=> 'false' +``` + +## Related projects + +Other object utils: + +* [clone-deep](https://github.com/jonschlinkert/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. +* [for-in](https://github.com/jonschlinkert/for-in): Iterate over the own and inherited enumerable properties of an objecte, and return an object… [more](https://github.com/jonschlinkert/for-in) +* [for-own](https://github.com/jonschlinkert/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) +* [is-plain-object](https://github.com/jonschlinkert/is-plain-object): Returns true if an object was created by the `Object` constructor. +* [isobject](https://github.com/jonschlinkert/isobject): Returns true if the value is an object and not an array or null. + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-equal-shallow/issues/new) + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on June 22, 2015._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/13/f5ff3196655661ce746b24f0d351f8cd44c4c72ed07da2737cb66de168c4121e41e18ac06402ca4d004f18d333cd242a5794dee6025445489e9497dc85cc4c b/.pnpm-store/v11/files/13/f5ff3196655661ce746b24f0d351f8cd44c4c72ed07da2737cb66de168c4121e41e18ac06402ca4d004f18d333cd242a5794dee6025445489e9497dc85cc4c new file mode 100644 index 00000000..2ce3dfb0 --- /dev/null +++ b/.pnpm-store/v11/files/13/f5ff3196655661ce746b24f0d351f8cd44c4c72ed07da2737cb66de168c4121e41e18ac06402ca4d004f18d333cd242a5794dee6025445489e9497dc85cc4c @@ -0,0 +1,47 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface PromiseFulfilledResult { + status: "fulfilled"; + value: T; +} + +interface PromiseRejectedResult { + status: "rejected"; + reason: any; +} + +type PromiseSettledResult = PromiseFulfilledResult | PromiseRejectedResult; + +interface PromiseConstructor { + /** + * Creates a Promise that is resolved with an array of results when all + * of the provided Promises resolve or reject. + * @param values An array of Promises. + * @returns A new Promise. + */ + allSettled(values: T): Promise<{ -readonly [P in keyof T]: PromiseSettledResult>; }>; + + /** + * Creates a Promise that is resolved with an array of results when all + * of the provided Promises resolve or reject. + * @param values An array of Promises. + * @returns A new Promise. + */ + allSettled(values: Iterable>): Promise>[]>; +} diff --git a/.pnpm-store/v11/files/13/fb9aa9bb773d486e032bfdc7fc941d1b160d227d1dcf5647bdb74e5cd9964bb6d73529efe2de694567f12d1ff16f1b5a30807a8a80683ea3cff8591a8f1eba b/.pnpm-store/v11/files/13/fb9aa9bb773d486e032bfdc7fc941d1b160d227d1dcf5647bdb74e5cd9964bb6d73529efe2de694567f12d1ff16f1b5a30807a8a80683ea3cff8591a8f1eba new file mode 100644 index 00000000..e6685068 --- /dev/null +++ b/.pnpm-store/v11/files/13/fb9aa9bb773d486e032bfdc7fc941d1b160d227d1dcf5647bdb74e5cd9964bb6d73529efe2de694567f12d1ff16f1b5a30807a8a80683ea3cff8591a8f1eba @@ -0,0 +1,29 @@ +var baseFlatten = require('./_baseFlatten'), + map = require('./map'); + +/** + * Creates a flattened array of values by running each element in `collection` + * thru `iteratee` and flattening the mapped results. The iteratee is invoked + * with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new flattened array. + * @example + * + * function duplicate(n) { + * return [n, n]; + * } + * + * _.flatMap([1, 2], duplicate); + * // => [1, 1, 2, 2] + */ +function flatMap(collection, iteratee) { + return baseFlatten(map(collection, iteratee), 1); +} + +module.exports = flatMap; diff --git a/.pnpm-store/v11/files/14/0f44575dd9173c5f2e21cb905a7ee836f1a6f07a6e31a301acc9d8e0120b814f1ea57b027c86fd0b9e38bd3eebd74a3bcde4df3ec26e4325f0e4a0ad9f3edc b/.pnpm-store/v11/files/14/0f44575dd9173c5f2e21cb905a7ee836f1a6f07a6e31a301acc9d8e0120b814f1ea57b027c86fd0b9e38bd3eebd74a3bcde4df3ec26e4325f0e4a0ad9f3edc new file mode 100644 index 00000000..10b18755 --- /dev/null +++ b/.pnpm-store/v11/files/14/0f44575dd9173c5f2e21cb905a7ee836f1a6f07a6e31a301acc9d8e0120b814f1ea57b027c86fd0b9e38bd3eebd74a3bcde4df3ec26e4325f0e4a0ad9f3edc @@ -0,0 +1,138 @@ +'use strict'; + +/*eslint-disable no-bitwise*/ + +var NodeBuffer; + +try { + // A trick for browserified version, to not include `Buffer` shim + var _require = require; + NodeBuffer = _require('buffer').Buffer; +} catch (__) {} + +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + // Wrap into Buffer for NodeJS and leave Array for browser + if (NodeBuffer) { + // Support node 6.+ Buffer API when available + return NodeBuffer.from ? NodeBuffer.from(result) : new NodeBuffer(result); + } + + return result; +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(object) { + return NodeBuffer && NodeBuffer.isBuffer(object); +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); diff --git a/.pnpm-store/v11/files/14/358f81cf34144b391027d06a93da1a507298434402996261abd66a2c7a2031c64e32616acd577540fcd563ec64a11385e4408792fe1cba1e6707f16f0e6c3f b/.pnpm-store/v11/files/14/358f81cf34144b391027d06a93da1a507298434402996261abd66a2c7a2031c64e32616acd577540fcd563ec64a11385e4408792fe1cba1e6707f16f0e6c3f new file mode 100644 index 00000000..90a871c4 --- /dev/null +++ b/.pnpm-store/v11/files/14/358f81cf34144b391027d06a93da1a507298434402996261abd66a2c7a2031c64e32616acd577540fcd563ec64a11385e4408792fe1cba1e6707f16f0e6c3f @@ -0,0 +1,165 @@ +'use strict'; +const colorConvert = require('color-convert'); + +const wrapAnsi16 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${code + offset}m`; +}; + +const wrapAnsi256 = (fn, offset) => function () { + const code = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};5;${code}m`; +}; + +const wrapAnsi16m = (fn, offset) => function () { + const rgb = fn.apply(colorConvert, arguments); + return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`; +}; + +function assembleStyles() { + const codes = new Map(); + const styles = { + modifier: { + reset: [0, 0], + // 21 isn't widely supported and 22 does the same thing + bold: [1, 22], + dim: [2, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + hidden: [8, 28], + strikethrough: [9, 29] + }, + color: { + black: [30, 39], + red: [31, 39], + green: [32, 39], + yellow: [33, 39], + blue: [34, 39], + magenta: [35, 39], + cyan: [36, 39], + white: [37, 39], + gray: [90, 39], + + // Bright color + redBright: [91, 39], + greenBright: [92, 39], + yellowBright: [93, 39], + blueBright: [94, 39], + magentaBright: [95, 39], + cyanBright: [96, 39], + whiteBright: [97, 39] + }, + bgColor: { + bgBlack: [40, 49], + bgRed: [41, 49], + bgGreen: [42, 49], + bgYellow: [43, 49], + bgBlue: [44, 49], + bgMagenta: [45, 49], + bgCyan: [46, 49], + bgWhite: [47, 49], + + // Bright color + bgBlackBright: [100, 49], + bgRedBright: [101, 49], + bgGreenBright: [102, 49], + bgYellowBright: [103, 49], + bgBlueBright: [104, 49], + bgMagentaBright: [105, 49], + bgCyanBright: [106, 49], + bgWhiteBright: [107, 49] + } + }; + + // Fix humans + styles.color.grey = styles.color.gray; + + for (const groupName of Object.keys(styles)) { + const group = styles[groupName]; + + for (const styleName of Object.keys(group)) { + const style = group[styleName]; + + styles[styleName] = { + open: `\u001B[${style[0]}m`, + close: `\u001B[${style[1]}m` + }; + + group[styleName] = styles[styleName]; + + codes.set(style[0], style[1]); + } + + Object.defineProperty(styles, groupName, { + value: group, + enumerable: false + }); + + Object.defineProperty(styles, 'codes', { + value: codes, + enumerable: false + }); + } + + const ansi2ansi = n => n; + const rgb2rgb = (r, g, b) => [r, g, b]; + + styles.color.close = '\u001B[39m'; + styles.bgColor.close = '\u001B[49m'; + + styles.color.ansi = { + ansi: wrapAnsi16(ansi2ansi, 0) + }; + styles.color.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 0) + }; + styles.color.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 0) + }; + + styles.bgColor.ansi = { + ansi: wrapAnsi16(ansi2ansi, 10) + }; + styles.bgColor.ansi256 = { + ansi256: wrapAnsi256(ansi2ansi, 10) + }; + styles.bgColor.ansi16m = { + rgb: wrapAnsi16m(rgb2rgb, 10) + }; + + for (let key of Object.keys(colorConvert)) { + if (typeof colorConvert[key] !== 'object') { + continue; + } + + const suite = colorConvert[key]; + + if (key === 'ansi16') { + key = 'ansi'; + } + + if ('ansi16' in suite) { + styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0); + styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10); + } + + if ('ansi256' in suite) { + styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0); + styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10); + } + + if ('rgb' in suite) { + styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0); + styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10); + } + } + + return styles; +} + +// Make the export immutable +Object.defineProperty(module, 'exports', { + enumerable: true, + get: assembleStyles +}); diff --git a/.pnpm-store/v11/files/14/380e3cc2a073bd8363fb1090a18936a8f9e9cc447c3e0e2ebadce1a1f3ab69c1c5fbd06952f6e48c8d53defbb9e72524519e01e8c1f4d3b973a4ac140e1983-exec b/.pnpm-store/v11/files/14/380e3cc2a073bd8363fb1090a18936a8f9e9cc447c3e0e2ebadce1a1f3ab69c1c5fbd06952f6e48c8d53defbb9e72524519e01e8c1f4d3b973a4ac140e1983-exec new file mode 100755 index 00000000..a044824a --- /dev/null +++ b/.pnpm-store/v11/files/14/380e3cc2a073bd8363fb1090a18936a8f9e9cc447c3e0e2ebadce1a1f3ab69c1c5fbd06952f6e48c8d53defbb9e72524519e01e8c1f4d3b973a4ac140e1983-exec @@ -0,0 +1,124 @@ +declare module "worker_threads" { + import { EventEmitter } from "events"; + import { Readable, Writable } from "stream"; + + const isMainThread: boolean; + const parentPort: null | MessagePort; + const threadId: number; + const workerData: any; + + class MessageChannel { + readonly port1: MessagePort; + readonly port2: MessagePort; + } + + class MessagePort extends EventEmitter { + close(): void; + postMessage(value: any, transferList?: ReadonlyArray): void; + ref(): void; + unref(): void; + start(): void; + + addListener(event: "close", listener: () => void): this; + addListener(event: "message", listener: (value: any) => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "close"): boolean; + emit(event: "message", value: any): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "close", listener: () => void): this; + on(event: "message", listener: (value: any) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "close", listener: () => void): this; + once(event: "message", listener: (value: any) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "close", listener: () => void): this; + prependListener(event: "message", listener: (value: any) => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "message", listener: (value: any) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "close", listener: () => void): this; + removeListener(event: "message", listener: (value: any) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + off(event: "close", listener: () => void): this; + off(event: "message", listener: (value: any) => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + } + + interface WorkerOptions { + eval?: boolean; + workerData?: any; + stdin?: boolean; + stdout?: boolean; + stderr?: boolean; + } + + class Worker extends EventEmitter { + readonly stdin: Writable | null; + readonly stdout: Readable; + readonly stderr: Readable; + readonly threadId: number; + + constructor(filename: string, options?: WorkerOptions); + + postMessage(value: any, transferList?: ReadonlyArray): void; + ref(): void; + unref(): void; + terminate(callback?: (err: any, exitCode: number) => void): void; + + addListener(event: "error", listener: (err: any) => void): this; + addListener(event: "exit", listener: (exitCode: number) => void): this; + addListener(event: "message", listener: (value: any) => void): this; + addListener(event: "online", listener: () => void): this; + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + + emit(event: "error", err: any): boolean; + emit(event: "exit", exitCode: number): boolean; + emit(event: "message", value: any): boolean; + emit(event: "online"): boolean; + emit(event: string | symbol, ...args: any[]): boolean; + + on(event: "error", listener: (err: any) => void): this; + on(event: "exit", listener: (exitCode: number) => void): this; + on(event: "message", listener: (value: any) => void): this; + on(event: "online", listener: () => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "error", listener: (err: any) => void): this; + once(event: "exit", listener: (exitCode: number) => void): this; + once(event: "message", listener: (value: any) => void): this; + once(event: "online", listener: () => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + + prependListener(event: "error", listener: (err: any) => void): this; + prependListener(event: "exit", listener: (exitCode: number) => void): this; + prependListener(event: "message", listener: (value: any) => void): this; + prependListener(event: "online", listener: () => void): this; + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + + prependOnceListener(event: "error", listener: (err: any) => void): this; + prependOnceListener(event: "exit", listener: (exitCode: number) => void): this; + prependOnceListener(event: "message", listener: (value: any) => void): this; + prependOnceListener(event: "online", listener: () => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + + removeListener(event: "error", listener: (err: any) => void): this; + removeListener(event: "exit", listener: (exitCode: number) => void): this; + removeListener(event: "message", listener: (value: any) => void): this; + removeListener(event: "online", listener: () => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + + off(event: "error", listener: (err: any) => void): this; + off(event: "exit", listener: (exitCode: number) => void): this; + off(event: "message", listener: (value: any) => void): this; + off(event: "online", listener: () => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + } +} diff --git a/.pnpm-store/v11/files/14/51b21a9f51442755d95adea6d7f2d81d15e84cbf6d813163d21b3a089df48a2e9375a3fcc7953c7d75ad7c0a5f9895f0e938f9603fb7569b1c56a59087836b b/.pnpm-store/v11/files/14/51b21a9f51442755d95adea6d7f2d81d15e84cbf6d813163d21b3a089df48a2e9375a3fcc7953c7d75ad7c0a5f9895f0e938f9603fb7569b1c56a59087836b new file mode 100644 index 00000000..cf8fbd5b --- /dev/null +++ b/.pnpm-store/v11/files/14/51b21a9f51442755d95adea6d7f2d81d15e84cbf6d813163d21b3a089df48a2e9375a3fcc7953c7d75ad7c0a5f9895f0e938f9603fb7569b1c56a59087836b @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const chalk = require("chalk"); +exports.ascii = { + suman_slant: chalk.grey.italic('\n\n' + + '\t _ _ _ _ _ .. _/__ __/_\n' + + '\t_\\/_// / //_|/ / .. / /_\'_\\ / ' + '\n\n'), + suman_runner: chalk.grey('\n' + + '\t _____ __ __ ____ ___ ____ _ ____ _ _ _____ __ __ ____ ____ ___ _____\n' + + '\t / ___// / / // __ `__ \\ / __ `// __ \\ (_)(_)/ ___// / / // __ \\ / __ \\ / _ \\ / ___/\n' + + '\t (__ )/ /_/ // / / / / // /_/ // / / /_ _ / / / /_/ // / / // / / // __// / \n' + + '\t /____/ \\__,_//_/ /_/ /_/ \\__,_//_/ /_/(_)(_)/_/ \\__,_//_/ /_//_/ /_/ \\___//_/ \n\n\n') +}; diff --git a/.pnpm-store/v11/files/14/553e84c9f6031c1c6817bfb67d64d73e47b2bfd0cb0fe8e645860cce598349cccef8aed1f26aea06eade61fb0d6de7f2a8bfd284c650d886334fa5a9bd8b09 b/.pnpm-store/v11/files/14/553e84c9f6031c1c6817bfb67d64d73e47b2bfd0cb0fe8e645860cce598349cccef8aed1f26aea06eade61fb0d6de7f2a8bfd284c650d886334fa5a9bd8b09 new file mode 100644 index 00000000..5a13e64a --- /dev/null +++ b/.pnpm-store/v11/files/14/553e84c9f6031c1c6817bfb67d64d73e47b2bfd0cb0fe8e645860cce598349cccef8aed1f26aea06eade61fb0d6de7f2a8bfd284c650d886334fa5a9bd8b09 @@ -0,0 +1,18 @@ +var baseCreate = require('./_baseCreate'), + getPrototype = require('./_getPrototype'), + isPrototype = require('./_isPrototype'); + +/** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ +function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; +} + +module.exports = initCloneObject; diff --git a/.pnpm-store/v11/files/14/587be429fcac4c1057b64a616605489610b25635f3faaf533b034a0b17a6d873cdb0c17d861e2914e4b93c838eef227bc5f2c2f2ed8a4ceb721162e8d0a504-exec b/.pnpm-store/v11/files/14/587be429fcac4c1057b64a616605489610b25635f3faaf533b034a0b17a6d873cdb0c17d861e2914e4b93c838eef227bc5f2c2f2ed8a4ceb721162e8d0a504-exec new file mode 100755 index 00000000..91379601 --- /dev/null +++ b/.pnpm-store/v11/files/14/587be429fcac4c1057b64a616605489610b25635f3faaf533b034a0b17a6d873cdb0c17d861e2914e4b93c838eef227bc5f2c2f2ed8a4ceb721162e8d0a504-exec @@ -0,0 +1,4 @@ +export declare function isTransform(stream: any): boolean; +export declare function isStream(stream: any): boolean; +export declare function isObservable(val: any): boolean; +export declare function isSubscriber(val: any): boolean; diff --git a/.pnpm-store/v11/files/14/6c3ab9a7ffa9bad774571a9178b41ee771fdf5eca20f38b0c972840464f9b2dfc059a50204c5849eed269bfa54bd130a57f7502f0ba9b6a9495f3dd3dde82b b/.pnpm-store/v11/files/14/6c3ab9a7ffa9bad774571a9178b41ee771fdf5eca20f38b0c972840464f9b2dfc059a50204c5849eed269bfa54bd130a57f7502f0ba9b6a9495f3dd3dde82b new file mode 100644 index 00000000..18306d23 --- /dev/null +++ b/.pnpm-store/v11/files/14/6c3ab9a7ffa9bad774571a9178b41ee771fdf5eca20f38b0c972840464f9b2dfc059a50204c5849eed269bfa54bd130a57f7502f0ba9b6a9495f3dd3dde82b @@ -0,0 +1,737 @@ +// File ignored in coverage tests via setting in .istanbul.yml +/* Jison generated parser */ +"use strict"; + +exports.__esModule = true; +var handlebars = (function () { + var parser = { trace: function trace() {}, + yy: {}, + symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, + terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, + productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], + performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) { + + var $0 = $$.length - 1; + switch (yystate) { + case 1: + return $$[$0 - 1]; + break; + case 2: + this.$ = yy.prepareProgram($$[$0]); + break; + case 3: + this.$ = $$[$0]; + break; + case 4: + this.$ = $$[$0]; + break; + case 5: + this.$ = $$[$0]; + break; + case 6: + this.$ = $$[$0]; + break; + case 7: + this.$ = $$[$0]; + break; + case 8: + this.$ = $$[$0]; + break; + case 9: + this.$ = { + type: 'CommentStatement', + value: yy.stripComment($$[$0]), + strip: yy.stripFlags($$[$0], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 10: + this.$ = { + type: 'ContentStatement', + original: $$[$0], + value: $$[$0], + loc: yy.locInfo(this._$) + }; + + break; + case 11: + this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 12: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; + break; + case 13: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); + break; + case 14: + this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); + break; + case 15: + this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 16: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 17: + this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; + break; + case 18: + this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; + break; + case 19: + var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), + program = yy.prepareProgram([inverse], $$[$0 - 1].loc); + program.chained = true; + + this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; + + break; + case 20: + this.$ = $$[$0]; + break; + case 21: + this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; + break; + case 22: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 23: + this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); + break; + case 24: + this.$ = { + type: 'PartialStatement', + name: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + indent: '', + strip: yy.stripFlags($$[$0 - 4], $$[$0]), + loc: yy.locInfo(this._$) + }; + + break; + case 25: + this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); + break; + case 26: + this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; + break; + case 27: + this.$ = $$[$0]; + break; + case 28: + this.$ = $$[$0]; + break; + case 29: + this.$ = { + type: 'SubExpression', + path: $$[$0 - 3], + params: $$[$0 - 2], + hash: $$[$0 - 1], + loc: yy.locInfo(this._$) + }; + + break; + case 30: + this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 31: + this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 32: + this.$ = yy.id($$[$0 - 1]); + break; + case 33: + this.$ = $$[$0]; + break; + case 34: + this.$ = $$[$0]; + break; + case 35: + this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; + break; + case 36: + this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; + break; + case 37: + this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; + break; + case 38: + this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; + break; + case 39: + this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; + break; + case 40: + this.$ = $$[$0]; + break; + case 41: + this.$ = $$[$0]; + break; + case 42: + this.$ = yy.preparePath(true, $$[$0], this._$); + break; + case 43: + this.$ = yy.preparePath(false, $$[$0], this._$); + break; + case 44: + $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; + break; + case 45: + this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; + break; + case 46: + this.$ = []; + break; + case 47: + $$[$0 - 1].push($$[$0]); + break; + case 48: + this.$ = []; + break; + case 49: + $$[$0 - 1].push($$[$0]); + break; + case 50: + this.$ = []; + break; + case 51: + $$[$0 - 1].push($$[$0]); + break; + case 58: + this.$ = []; + break; + case 59: + $$[$0 - 1].push($$[$0]); + break; + case 64: + this.$ = []; + break; + case 65: + $$[$0 - 1].push($$[$0]); + break; + case 70: + this.$ = []; + break; + case 71: + $$[$0 - 1].push($$[$0]); + break; + case 78: + this.$ = []; + break; + case 79: + $$[$0 - 1].push($$[$0]); + break; + case 82: + this.$ = []; + break; + case 83: + $$[$0 - 1].push($$[$0]); + break; + case 86: + this.$ = []; + break; + case 87: + $$[$0 - 1].push($$[$0]); + break; + case 90: + this.$ = []; + break; + case 91: + $$[$0 - 1].push($$[$0]); + break; + case 94: + this.$ = []; + break; + case 95: + $$[$0 - 1].push($$[$0]); + break; + case 98: + this.$ = [$$[$0]]; + break; + case 99: + $$[$0 - 1].push($$[$0]); + break; + case 100: + this.$ = [$$[$0]]; + break; + case 101: + $$[$0 - 1].push($$[$0]); + break; + } + }, + table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], + defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] }, + parseError: function parseError(str, hash) { + throw new Error(str); + }, + parse: function parse(input) { + var self = this, + stack = [0], + vstack = [null], + lstack = [], + table = this.table, + yytext = "", + yylineno = 0, + yyleng = 0, + recovering = 0, + TERROR = 2, + EOF = 1; + this.lexer.setInput(input); + this.lexer.yy = this.yy; + this.yy.lexer = this.lexer; + this.yy.parser = this; + if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; + var yyloc = this.lexer.yylloc; + lstack.push(yyloc); + var ranges = this.lexer.options && this.lexer.options.ranges; + if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; + function popStack(n) { + stack.length = stack.length - 2 * n; + vstack.length = vstack.length - n; + lstack.length = lstack.length - n; + } + function lex() { + var token; + token = self.lexer.lex() || 1; + if (typeof token !== "number") { + token = self.symbols_[token] || token; + } + return token; + } + var symbol, + preErrorSymbol, + state, + action, + a, + r, + yyval = {}, + p, + len, + newState, + expected; + while (true) { + state = stack[stack.length - 1]; + if (this.defaultActions[state]) { + action = this.defaultActions[state]; + } else { + if (symbol === null || typeof symbol == "undefined") { + symbol = lex(); + } + action = table[state] && table[state][symbol]; + } + if (typeof action === "undefined" || !action.length || !action[0]) { + var errStr = ""; + if (!recovering) { + expected = []; + for (p in table[state]) if (this.terminals_[p] && p > 2) { + expected.push("'" + this.terminals_[p] + "'"); + } + if (this.lexer.showPosition) { + errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; + } else { + errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); + } + this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); + } + } + if (action[0] instanceof Array && action.length > 1) { + throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); + } + switch (action[0]) { + case 1: + stack.push(symbol); + vstack.push(this.lexer.yytext); + lstack.push(this.lexer.yylloc); + stack.push(action[1]); + symbol = null; + if (!preErrorSymbol) { + yyleng = this.lexer.yyleng; + yytext = this.lexer.yytext; + yylineno = this.lexer.yylineno; + yyloc = this.lexer.yylloc; + if (recovering > 0) recovering--; + } else { + symbol = preErrorSymbol; + preErrorSymbol = null; + } + break; + case 2: + len = this.productions_[action[1]][1]; + yyval.$ = vstack[vstack.length - len]; + yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; + if (ranges) { + yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; + } + r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); + if (typeof r !== "undefined") { + return r; + } + if (len) { + stack = stack.slice(0, -1 * len * 2); + vstack = vstack.slice(0, -1 * len); + lstack = lstack.slice(0, -1 * len); + } + stack.push(this.productions_[action[1]][0]); + vstack.push(yyval.$); + lstack.push(yyval._$); + newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; + stack.push(newState); + break; + case 3: + return true; + } + } + return true; + } + }; + /* Jison generated lexer */ + var lexer = (function () { + var lexer = { EOF: 1, + parseError: function parseError(str, hash) { + if (this.yy.parser) { + this.yy.parser.parseError(str, hash); + } else { + throw new Error(str); + } + }, + setInput: function setInput(input) { + this._input = input; + this._more = this._less = this.done = false; + this.yylineno = this.yyleng = 0; + this.yytext = this.matched = this.match = ''; + this.conditionStack = ['INITIAL']; + this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; + if (this.options.ranges) this.yylloc.range = [0, 0]; + this.offset = 0; + return this; + }, + input: function input() { + var ch = this._input[0]; + this.yytext += ch; + this.yyleng++; + this.offset++; + this.match += ch; + this.matched += ch; + var lines = ch.match(/(?:\r\n?|\n).*/g); + if (lines) { + this.yylineno++; + this.yylloc.last_line++; + } else { + this.yylloc.last_column++; + } + if (this.options.ranges) this.yylloc.range[1]++; + + this._input = this._input.slice(1); + return ch; + }, + unput: function unput(ch) { + var len = ch.length; + var lines = ch.split(/(?:\r\n?|\n)/g); + + this._input = ch + this._input; + this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); + //this.yyleng -= len; + this.offset -= len; + var oldLines = this.match.split(/(?:\r\n?|\n)/g); + this.match = this.match.substr(0, this.match.length - 1); + this.matched = this.matched.substr(0, this.matched.length - 1); + + if (lines.length - 1) this.yylineno -= lines.length - 1; + var r = this.yylloc.range; + + this.yylloc = { first_line: this.yylloc.first_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.first_column, + last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len + }; + + if (this.options.ranges) { + this.yylloc.range = [r[0], r[0] + this.yyleng - len]; + } + return this; + }, + more: function more() { + this._more = true; + return this; + }, + less: function less(n) { + this.unput(this.match.slice(n)); + }, + pastInput: function pastInput() { + var past = this.matched.substr(0, this.matched.length - this.match.length); + return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); + }, + upcomingInput: function upcomingInput() { + var next = this.match; + if (next.length < 20) { + next += this._input.substr(0, 20 - next.length); + } + return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); + }, + showPosition: function showPosition() { + var pre = this.pastInput(); + var c = new Array(pre.length + 1).join("-"); + return pre + this.upcomingInput() + "\n" + c + "^"; + }, + next: function next() { + if (this.done) { + return this.EOF; + } + if (!this._input) this.done = true; + + var token, match, tempMatch, index, col, lines; + if (!this._more) { + this.yytext = ''; + this.match = ''; + } + var rules = this._currentRules(); + for (var i = 0; i < rules.length; i++) { + tempMatch = this._input.match(this.rules[rules[i]]); + if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { + match = tempMatch; + index = i; + if (!this.options.flex) break; + } + } + if (match) { + lines = match[0].match(/(?:\r\n?|\n).*/g); + if (lines) this.yylineno += lines.length; + this.yylloc = { first_line: this.yylloc.last_line, + last_line: this.yylineno + 1, + first_column: this.yylloc.last_column, + last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; + this.yytext += match[0]; + this.match += match[0]; + this.matches = match; + this.yyleng = this.yytext.length; + if (this.options.ranges) { + this.yylloc.range = [this.offset, this.offset += this.yyleng]; + } + this._more = false; + this._input = this._input.slice(match[0].length); + this.matched += match[0]; + token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); + if (this.done && this._input) this.done = false; + if (token) return token;else return; + } + if (this._input === "") { + return this.EOF; + } else { + return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); + } + }, + lex: function lex() { + var r = this.next(); + if (typeof r !== 'undefined') { + return r; + } else { + return this.lex(); + } + }, + begin: function begin(condition) { + this.conditionStack.push(condition); + }, + popState: function popState() { + return this.conditionStack.pop(); + }, + _currentRules: function _currentRules() { + return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; + }, + topState: function topState() { + return this.conditionStack[this.conditionStack.length - 2]; + }, + pushState: function begin(condition) { + this.begin(condition); + } }; + lexer.options = {}; + lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) { + + function strip(start, end) { + return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start); + } + + var YYSTATE = YY_START; + switch ($avoiding_name_collisions) { + case 0: + if (yy_.yytext.slice(-2) === "\\\\") { + strip(0, 1); + this.begin("mu"); + } else if (yy_.yytext.slice(-1) === "\\") { + strip(0, 1); + this.begin("emu"); + } else { + this.begin("mu"); + } + if (yy_.yytext) return 15; + + break; + case 1: + return 15; + break; + case 2: + this.popState(); + return 15; + + break; + case 3: + this.begin('raw');return 15; + break; + case 4: + this.popState(); + // Should be using `this.topState()` below, but it currently + // returns the second top instead of the first top. Opened an + // issue about it at https://github.com/zaach/jison/issues/291 + if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { + return 15; + } else { + strip(5, 9); + return 'END_RAW_BLOCK'; + } + + break; + case 5: + return 15; + break; + case 6: + this.popState(); + return 14; + + break; + case 7: + return 65; + break; + case 8: + return 68; + break; + case 9: + return 19; + break; + case 10: + this.popState(); + this.begin('raw'); + return 23; + + break; + case 11: + return 55; + break; + case 12: + return 60; + break; + case 13: + return 29; + break; + case 14: + return 47; + break; + case 15: + this.popState();return 44; + break; + case 16: + this.popState();return 44; + break; + case 17: + return 34; + break; + case 18: + return 39; + break; + case 19: + return 51; + break; + case 20: + return 48; + break; + case 21: + this.unput(yy_.yytext); + this.popState(); + this.begin('com'); + + break; + case 22: + this.popState(); + return 14; + + break; + case 23: + return 48; + break; + case 24: + return 73; + break; + case 25: + return 72; + break; + case 26: + return 72; + break; + case 27: + return 87; + break; + case 28: + // ignore whitespace + break; + case 29: + this.popState();return 54; + break; + case 30: + this.popState();return 33; + break; + case 31: + yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; + break; + case 32: + yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; + break; + case 33: + return 85; + break; + case 34: + return 82; + break; + case 35: + return 82; + break; + case 36: + return 83; + break; + case 37: + return 84; + break; + case 38: + return 81; + break; + case 39: + return 75; + break; + case 40: + return 77; + break; + case 41: + return 72; + break; + case 42: + yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; + break; + case 43: + return 'INVALID'; + break; + case 44: + return 5; + break; + } + }; + lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; + lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; + return lexer; + })(); + parser.lexer = lexer; + function Parser() { + this.yy = {}; + }Parser.prototype = parser;parser.Parser = Parser; + return new Parser(); +})();exports["default"] = handlebars; +module.exports = exports["default"]; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLHlCQUF5QixFQUFDLEVBQUUsRUFBQyxxQkFBcUIsRUFBQyxFQUFFLEVBQUMscUJBQXFCLEVBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsOEJBQThCLEVBQUMsRUFBRSxFQUFDLDBCQUEwQixFQUFDLEVBQUUsRUFBQywwQkFBMEIsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQyxzQkFBc0IsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxrQkFBa0IsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxxQkFBcUIsRUFBQyxFQUFFLEVBQUMsaUJBQWlCLEVBQUMsRUFBRSxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsOEJBQThCLEVBQUMsRUFBRSxFQUFDLDBCQUEwQixFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE9BQU8sRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBQyxRQUFRLEVBQUMsRUFBRSxFQUFDLGFBQWEsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLDhCQUE4QixFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxVQUFVLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsS0FBSyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBQyxDQUFDLEVBQUM7QUFDNW1ELGtCQUFVLEVBQUUsRUFBQyxDQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLGdCQUFnQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQyxvQkFBb0IsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsb0JBQW9CLEVBQUMsRUFBRSxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFdBQVcsRUFBQyxFQUFFLEVBQUMsTUFBTSxFQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JzQixxQkFBYSxFQUFFLFNBQVMsU0FBUyxDQUFDLE1BQU0sRUFBQyxNQUFNLEVBQUMsUUFBUSxFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFDdkU7O0FBRUYsZ0JBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFRLE9BQU87QUFDZixxQkFBSyxDQUFDO0FBQUUsMkJBQU8sRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssQ0FBQztBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFDRix3QkFBSSxDQUFDLENBQUMsR0FBRztBQUNQLDRCQUFJLEVBQUUsa0JBQWtCO0FBQ3hCLDZCQUFLLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUIsNkJBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEMsMkJBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7cUJBQ3pCLENBQUM7O0FBRU4sMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDSCx3QkFBSSxDQUFDLENBQUMsR0FBRztBQUNQLDRCQUFJLEVBQUUsa0JBQWtCO0FBQ3hCLGdDQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNoQiw2QkFBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDYiwyQkFBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztxQkFDekIsQ0FBQzs7QUFFTiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUNILHdCQUFJLENBQUMsQ0FBQyxHQUFHO0FBQ1AsNEJBQUksRUFBRSxrQkFBa0I7QUFDeEIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDhCQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7QUFDaEIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDhCQUFNLEVBQUUsRUFBRTtBQUNWLDZCQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QywyQkFBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztxQkFDekIsQ0FBQzs7QUFFTiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzlHLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksQ0FBQyxDQUFDLEdBQUc7QUFDUCw0QkFBSSxFQUFFLGVBQWU7QUFDckIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDhCQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUM7QUFDaEIsNEJBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQztBQUNkLDJCQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3FCQUN6QixDQUFDOztBQUVOLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDbkcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDeEMsa0JBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7QUFDRCxhQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3pCLGdCQUFJLElBQUksR0FBRyxJQUFJO2dCQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFBRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsTUFBTSxHQUFHLEVBQUU7Z0JBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO2dCQUFFLE1BQU0sR0FBRyxFQUFFO2dCQUFFLFFBQVEsR0FBRyxDQUFDO2dCQUFFLE1BQU0sR0FBRyxDQUFDO2dCQUFFLFVBQVUsR0FBRyxDQUFDO2dCQUFFLE1BQU0sR0FBRyxDQUFDO2dCQUFFLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDM0osZ0JBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLGdCQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3hCLGdCQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLGdCQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEIsZ0JBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxXQUFXLEVBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUMzQixnQkFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDOUIsa0JBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkIsZ0JBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM3RCxnQkFBSSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQztBQUN6QyxxQkFBUyxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2pCLHFCQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxzQkFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNsQyxzQkFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNyQztBQUNELHFCQUFTLEdBQUcsR0FBRztBQUNYLG9CQUFJLEtBQUssQ0FBQztBQUNWLHFCQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUIsb0JBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQzNCLHlCQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUM7aUJBQ3pDO0FBQ0QsdUJBQU8sS0FBSyxDQUFDO2FBQ2hCO0FBQ0QsZ0JBQUksTUFBTTtnQkFBRSxjQUFjO2dCQUFFLEtBQUs7Z0JBQUUsTUFBTTtnQkFBRSxDQUFDO2dCQUFFLENBQUM7Z0JBQUUsS0FBSyxHQUFHLEVBQUU7Z0JBQUUsQ0FBQztnQkFBRSxHQUFHO2dCQUFFLFFBQVE7Z0JBQUUsUUFBUSxDQUFDO0FBQ3hGLG1CQUFPLElBQUksRUFBRTtBQUNULHFCQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsb0JBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM1QiwwQkFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ3ZDLE1BQU07QUFDSCx3QkFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxJQUFJLFdBQVcsRUFBRTtBQUNqRCw4QkFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO3FCQUNsQjtBQUNELDBCQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDakQ7QUFDRCxvQkFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQy9ELHdCQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxVQUFVLEVBQUU7QUFDYixnQ0FBUSxHQUFHLEVBQUUsQ0FBQztBQUNkLDZCQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ2xCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzdCLG9DQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO3lCQUNqRDtBQUNMLDRCQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO0FBQ3pCLGtDQUFNLEdBQUcsc0JBQXNCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQSxBQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsY0FBYyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFBLEFBQUMsR0FBRyxHQUFHLENBQUM7eUJBQ3ZMLE1BQU07QUFDSCxrQ0FBTSxHQUFHLHNCQUFzQixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUEsQUFBQyxHQUFHLGVBQWUsSUFBSSxNQUFNLElBQUksQ0FBQyxHQUFDLGNBQWMsR0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUEsQUFBQyxHQUFHLEdBQUcsQ0FBQSxBQUFDLENBQUM7eUJBQ3JKO0FBQ0QsNEJBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQztxQkFDMUo7aUJBQ0o7QUFDRCxvQkFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2pELDBCQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxHQUFHLEtBQUssR0FBRyxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUM7aUJBQ3ZHO0FBQ0Qsd0JBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNqQix5QkFBSyxDQUFDO0FBQ0YsNkJBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkIsOEJBQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQiw4QkFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLDZCQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLDhCQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2QsNEJBQUksQ0FBQyxjQUFjLEVBQUU7QUFDakIsa0NBQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMzQixrQ0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzNCLG9DQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7QUFDL0IsaUNBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUMxQixnQ0FBSSxVQUFVLEdBQUcsQ0FBQyxFQUNkLFVBQVUsRUFBRSxDQUFDO3lCQUNwQixNQUFNO0FBQ0gsa0NBQU0sR0FBRyxjQUFjLENBQUM7QUFDeEIsMENBQWMsR0FBRyxJQUFJLENBQUM7eUJBQ3pCO0FBQ0QsOEJBQU07QUFBQSxBQUNWLHlCQUFLLENBQUM7QUFDRiwyQkFBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNkJBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDdEMsNkJBQUssQ0FBQyxFQUFFLEdBQUcsRUFBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQSxBQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQSxBQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBQyxDQUFDO0FBQzFPLDRCQUFJLE1BQU0sRUFBRTtBQUNSLGlDQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUEsQUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUN0RztBQUNELHlCQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRyw0QkFBSSxPQUFPLENBQUMsS0FBSyxXQUFXLEVBQUU7QUFDMUIsbUNBQU8sQ0FBQyxDQUFDO3lCQUNaO0FBQ0QsNEJBQUksR0FBRyxFQUFFO0FBQ0wsaUNBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsa0NBQU0sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuQyxrQ0FBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO3lCQUN0QztBQUNELDZCQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1Qyw4QkFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsOEJBQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLGdDQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSw2QkFBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNyQiw4QkFBTTtBQUFBLEFBQ1YseUJBQUssQ0FBQztBQUNGLCtCQUFPLElBQUksQ0FBQztBQUFBLGlCQUNmO2FBQ0o7QUFDRCxtQkFBTyxJQUFJLENBQUM7U0FDZjtLQUNBLENBQUM7O0FBRUYsUUFBSSxLQUFLLEdBQUcsQ0FBQyxZQUFVO0FBQ3ZCLFlBQUksS0FBSyxHQUFJLEVBQUMsR0FBRyxFQUFDLENBQUM7QUFDbkIsc0JBQVUsRUFBQyxTQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQ2xDLG9CQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFO0FBQ2hCLHdCQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUN4QyxNQUFNO0FBQ0gsMEJBQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3hCO2FBQ0o7QUFDTCxvQkFBUSxFQUFDLGtCQUFVLEtBQUssRUFBRTtBQUNsQixvQkFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDcEIsb0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUM1QyxvQkFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQyxvQkFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzdDLG9CQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsb0JBQUksQ0FBQyxNQUFNLEdBQUcsRUFBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLFlBQVksRUFBQyxDQUFDLEVBQUMsU0FBUyxFQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsQ0FBQyxFQUFDLENBQUM7QUFDdEUsb0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsb0JBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLHVCQUFPLElBQUksQ0FBQzthQUNmO0FBQ0wsaUJBQUssRUFBQyxpQkFBWTtBQUNWLG9CQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLG9CQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUNsQixvQkFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ2Qsb0JBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNkLG9CQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUNqQixvQkFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDbkIsb0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUN4QyxvQkFBSSxLQUFLLEVBQUU7QUFDUCx3QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLHdCQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO2lCQUMzQixNQUFNO0FBQ0gsd0JBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQzdCO0FBQ0Qsb0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzs7QUFFaEQsb0JBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsdUJBQU8sRUFBRSxDQUFDO2FBQ2I7QUFDTCxpQkFBSyxFQUFDLGVBQVUsRUFBRSxFQUFFO0FBQ1osb0JBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDcEIsb0JBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7O0FBRXRDLG9CQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLG9CQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBQyxHQUFHLEdBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRTlELG9CQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUNuQixvQkFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDakQsb0JBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELG9CQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFN0Qsb0JBQUksS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQztBQUNwRCxvQkFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7O0FBRTFCLG9CQUFJLENBQUMsTUFBTSxHQUFHLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtBQUMvQyw2QkFBUyxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQztBQUMxQixnQ0FBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtBQUN0QywrQkFBVyxFQUFFLEtBQUssR0FDZCxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUEsR0FBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQ3JJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxHQUFHLEdBQUc7aUJBQ2pDLENBQUM7O0FBRUosb0JBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDckIsd0JBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO2lCQUN4RDtBQUNELHVCQUFPLElBQUksQ0FBQzthQUNmO0FBQ0wsZ0JBQUksRUFBQyxnQkFBWTtBQUNULG9CQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsQix1QkFBTyxJQUFJLENBQUM7YUFDZjtBQUNMLGdCQUFJLEVBQUMsY0FBVSxDQUFDLEVBQUU7QUFDVixvQkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25DO0FBQ0wscUJBQVMsRUFBQyxxQkFBWTtBQUNkLG9CQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRSx1QkFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBQyxFQUFFLENBQUEsR0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzthQUM5RTtBQUNMLHlCQUFhLEVBQUMseUJBQVk7QUFDbEIsb0JBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdEIsb0JBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUU7QUFDbEIsd0JBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDakQ7QUFDRCx1QkFBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxJQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBQyxFQUFFLENBQUEsQ0FBQyxDQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDL0U7QUFDTCx3QkFBWSxFQUFDLHdCQUFZO0FBQ2pCLG9CQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0Isb0JBQUksQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLHVCQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBQyxHQUFHLENBQUM7YUFDcEQ7QUFDTCxnQkFBSSxFQUFDLGdCQUFZO0FBQ1Qsb0JBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNYLDJCQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7aUJBQ25CO0FBQ0Qsb0JBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDOztBQUVuQyxvQkFBSSxLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsR0FBRyxFQUNILEtBQUssQ0FBQztBQUNWLG9CQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNiLHdCQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNqQix3QkFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7aUJBQ25CO0FBQ0Qsb0JBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNqQyxxQkFBSyxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEMsNkJBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsd0JBQUksU0FBUyxLQUFLLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQSxBQUFDLEVBQUU7QUFDaEUsNkJBQUssR0FBRyxTQUFTLENBQUM7QUFDbEIsNkJBQUssR0FBRyxDQUFDLENBQUM7QUFDViw0QkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU07cUJBQ2pDO2lCQUNKO0FBQ0Qsb0JBQUksS0FBSyxFQUFFO0FBQ1AseUJBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDMUMsd0JBQUksS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN6Qyx3QkFBSSxDQUFDLE1BQU0sR0FBRyxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7QUFDakMsaUNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUM7QUFDMUIsb0NBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7QUFDckMsbUNBQVcsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBQyxDQUFDO0FBQzlKLHdCQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Qix3QkFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsd0JBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLHdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2pDLHdCQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3JCLDRCQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ2pFO0FBQ0Qsd0JBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLHdCQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRCx3QkFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIseUJBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCx3QkFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDaEQsd0JBQUksS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQ25CLE9BQU87aUJBQ2Y7QUFDRCxvQkFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRTtBQUNwQiwyQkFBTyxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNuQixNQUFNO0FBQ0gsMkJBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsSUFBRSxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQSxBQUFDLEdBQUMsd0JBQXdCLEdBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUN0RyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7aUJBQ3pEO2FBQ0o7QUFDTCxlQUFHLEVBQUMsU0FBUyxHQUFHLEdBQUk7QUFDWixvQkFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BCLG9CQUFJLE9BQU8sQ0FBQyxLQUFLLFdBQVcsRUFBRTtBQUMxQiwyQkFBTyxDQUFDLENBQUM7aUJBQ1osTUFBTTtBQUNILDJCQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDckI7YUFDSjtBQUNMLGlCQUFLLEVBQUMsU0FBUyxLQUFLLENBQUUsU0FBUyxFQUFFO0FBQ3pCLG9CQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN2QztBQUNMLG9CQUFRLEVBQUMsU0FBUyxRQUFRLEdBQUk7QUFDdEIsdUJBQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNwQztBQUNMLHlCQUFhLEVBQUMsU0FBUyxhQUFhLEdBQUk7QUFDaEMsdUJBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2FBQ25GO0FBQ0wsb0JBQVEsRUFBQyxvQkFBWTtBQUNiLHVCQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUQ7QUFDTCxxQkFBUyxFQUFDLFNBQVMsS0FBSyxDQUFFLFNBQVMsRUFBRTtBQUM3QixvQkFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUN6QixFQUFDLEFBQUMsQ0FBQztBQUNSLGFBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ25CLGFBQUssQ0FBQyxhQUFhLEdBQUcsU0FBUyxTQUFTLENBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyx5QkFBeUIsRUFBQyxRQUFRLEVBQ2hGOztBQUdGLHFCQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQ3pCLHVCQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDO2FBQzNFOztBQUdELGdCQUFJLE9BQU8sR0FBQyxRQUFRLENBQUE7QUFDcEIsb0JBQU8seUJBQXlCO0FBQ2hDLHFCQUFLLENBQUM7QUFDNkIsd0JBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLEVBQUU7QUFDbEMsNkJBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWCw0QkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDbEIsTUFBTSxJQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3ZDLDZCQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsNEJBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ25CLE1BQU07QUFDTCw0QkFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDbEI7QUFDRCx3QkFBRyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDOztBQUU1RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssQ0FBQztBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNqQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssQ0FBQztBQUM2Qix3QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLDJCQUFPLEVBQUUsQ0FBQzs7QUFFN0MsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQyx3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxDQUFDO0FBQzRCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Ozs7QUFJaEIsd0JBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDL0QsK0JBQU8sRUFBRSxDQUFDO3FCQUNYLE1BQU07QUFDTCw2QkFBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNaLCtCQUFPLGVBQWUsQ0FBQztxQkFDeEI7O0FBRW5DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxDQUFDO0FBQUUsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxDQUFDO0FBQ0osd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQiwyQkFBTyxFQUFFLENBQUM7O0FBRVosMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDakIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDakIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXBCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQiwyQkFBTyxFQUFFLENBQUM7O0FBRVosMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7O0FBQ1AsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkMsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx1QkFBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsR0FBRyxDQUFDLENBQUMsQUFBQyxPQUFPLEVBQUUsQ0FBQztBQUMvRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHVCQUFHLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxHQUFHLENBQUMsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9ELDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsdUJBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFDLElBQUksQ0FBQyxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxTQUFTLENBQUM7QUFDekIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQywyQkFBTyxDQUFDLENBQUM7QUFDakIsMEJBQU07QUFBQSxhQUNMO1NBQ0EsQ0FBQztBQUNGLGFBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQywwQkFBMEIsRUFBQyxlQUFlLEVBQUMsK0NBQStDLEVBQUMsd0JBQXdCLEVBQUMsb0VBQW9FLEVBQUMsOEJBQThCLEVBQUMseUJBQXlCLEVBQUMsU0FBUyxFQUFDLFNBQVMsRUFBQyxlQUFlLEVBQUMsZUFBZSxFQUFDLGdCQUFnQixFQUFDLGlCQUFpQixFQUFDLG1CQUFtQixFQUFDLGlCQUFpQixFQUFDLDRCQUE0QixFQUFDLGlDQUFpQyxFQUFDLGlCQUFpQixFQUFDLHdCQUF3QixFQUFDLGlCQUFpQixFQUFDLGdCQUFnQixFQUFDLGtCQUFrQixFQUFDLDRCQUE0QixFQUFDLGtCQUFrQixFQUFDLFFBQVEsRUFBQyxXQUFXLEVBQUMsMkJBQTJCLEVBQUMsWUFBWSxFQUFDLFVBQVUsRUFBQyxpQkFBaUIsRUFBQyxlQUFlLEVBQUMsc0JBQXNCLEVBQUMsc0JBQXNCLEVBQUMsUUFBUSxFQUFDLHdCQUF3QixFQUFDLHlCQUF5QixFQUFDLDZCQUE2QixFQUFDLHdCQUF3QixFQUFDLHlDQUF5QyxFQUFDLGNBQWMsRUFBQyxTQUFTLEVBQUMseURBQXlELEVBQUMsd0JBQXdCLEVBQUMsUUFBUSxFQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25nQyxhQUFLLENBQUMsVUFBVSxHQUFHLEVBQUMsSUFBSSxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXlxcL10pKS8sL14oPzpcXHtcXHtcXHtcXHtcXC9bXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89Wz19XFxzXFwvLl0pXFx9XFx9XFx9XFx9KS8sL14oPzpbXlxceDAwXSs/KD89KFxce1xce1xce1xceykpKS8sL14oPzpbXFxzXFxTXSo/LS0ofik/XFx9XFx9KS8sL14oPzpcXCgpLywvXig/OlxcKSkvLC9eKD86XFx7XFx7XFx7XFx7KS8sL14oPzpcXH1cXH1cXH1cXH0pLywvXig/Olxce1xceyh+KT8+KS8sL14oPzpcXHtcXHsofik/Iz4pLywvXig/Olxce1xceyh+KT8jXFwqPykvLC9eKD86XFx7XFx7KH4pP1xcLykvLC9eKD86XFx7XFx7KH4pP1xcXlxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcXikvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxiKS8sL14oPzpcXHtcXHsofik/XFx7KS8sL14oPzpcXHtcXHsofik/JikvLC9eKD86XFx7XFx7KH4pPyEtLSkvLC9eKD86XFx7XFx7KH4pPyFbXFxzXFxTXSo/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFwqPykvLC9eKD86PSkvLC9eKD86XFwuXFwuKS8sL14oPzpcXC4oPz0oWz1+fVxcc1xcLy4pfF0pKSkvLC9eKD86W1xcLy5dKS8sL14oPzpcXHMrKS8sL14oPzpcXH0ofik/XFx9XFx9KS8sL14oPzoofik/XFx9XFx9KS8sL14oPzpcIihcXFxcW1wiXXxbXlwiXSkqXCIpLywvXig/OicoXFxcXFsnXXxbXiddKSonKS8sL14oPzpAKS8sL14oPzp0cnVlKD89KFt+fVxccyldKSkpLywvXig/OmZhbHNlKD89KFt+fVxccyldKSkpLywvXig/OnVuZGVmaW5lZCg/PShbfn1cXHMpXSkpKS8sL14oPzpudWxsKD89KFt+fVxccyldKSkpLywvXig/Oi0/WzAtOV0rKD86XFwuWzAtOV0rKT8oPz0oW359XFxzKV0pKSkvLC9eKD86YXNcXHMrXFx8KS8sL14oPzpcXHwpLywvXig/OihbXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89KFs9fn1cXHNcXC8uKXxdKSkpKS8sL14oPzpcXFsoXFxcXFxcXXxbXlxcXV0pKlxcXSkvLC9eKD86LikvLC9eKD86JCkvXTtcbmxleGVyLmNvbmRpdGlvbnMgPSB7XCJtdVwiOntcInJ1bGVzXCI6WzcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImVtdVwiOntcInJ1bGVzXCI6WzJdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiY29tXCI6e1wicnVsZXNcIjpbNl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJyYXdcIjp7XCJydWxlc1wiOlszLDQsNV0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJJTklUSUFMXCI6e1wicnVsZXNcIjpbMCwxLDQ0XSxcImluY2x1c2l2ZVwiOnRydWV9fTtcbnJldHVybiBsZXhlcjt9KSgpXG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7IHRoaXMueXkgPSB7fTsgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBoYW5kbGViYXJzO1xuIl19 diff --git a/.pnpm-store/v11/files/14/8a973d4ec470b737bd3311ef5e3a0fb1215551bc36ac5cc5abbca99a3e2901b235cbe1ec024257efe4b9c7252b8948a1dfde864af31a4e115f88c332b4ed06 b/.pnpm-store/v11/files/14/8a973d4ec470b737bd3311ef5e3a0fb1215551bc36ac5cc5abbca99a3e2901b235cbe1ec024257efe4b9c7252b8948a1dfde864af31a4e115f88c332b4ed06 new file mode 100644 index 00000000..dde6c003 --- /dev/null +++ b/.pnpm-store/v11/files/14/8a973d4ec470b737bd3311ef5e3a0fb1215551bc36ac5cc5abbca99a3e2901b235cbe1ec024257efe4b9c7252b8948a1dfde864af31a4e115f88c332b4ed06 @@ -0,0 +1,98 @@ +# is-accessor-descriptor [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +> Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. + +## Examples + +```js +var isAccessor = require('is-accessor-descriptor'); +var assert = require('assert'); + +assert.equal(isAccessor({ get: function() {} }), true); +``` + +You may also pass an object and property name to check if the property is an accessor: + +```js +assert.equal(isAccessor({ bar: {} }, 'bar'), true); +``` + +## Examples + +`false` when not an object + +```js +assert.equal(isAccessor('a'), false); +assert.equal(isAccessor(null), false); +``` + +`true` when the object has valid properties + +and the properties all have the correct JavaScript types: + +```js +assert.equal(isAccessor({ get() {}, set() {} }), true); +assert.equal(isAccessor({ get() {} }), true); +assert.equal(isAccessor({ set() {} }), true); +``` + +`false` when the object has invalid properties + +```js +assert.equal(isAccessor({ get() {}, set() {}, enumerable: 'baz' }), false); +assert.equal(isAccessor({ get() {}, writable: true }), false); +assert.equal(isAccessor({ get() {}, value: true }), false); +``` + +`false` when an accessor is not a function + +```js +isAccessor({ get() {}, set: 'baz' }); +isAccessor({ get: 'foo', set() {} }); +isAccessor({ get: 'foo', bar: 'baz' }); +isAccessor({ get: 'foo', set: 'baz' }); +//=> false +``` + +`false` when a value is not the correct type + +```js +isAccessor({ get() {}, set() {}, enumerable: 'foo' }); +isAccessor({ set() {}, configurable: 'foo' }); +isAccessor({ get() {}, configurable: 'foo' }); +//=> false +``` + +### Related projects + +You might also be interested in these projects: + +* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. +* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/inspect-js/is-descriptor) +* [is-object](https://www.npmjs.com/package/is-object): Returns true if the value is an object and not an array or null. + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/is-accessor-descriptor +[npm-version-svg]: https://versionbadg.es/inspect-js/is-accessor-descriptor.svg +[deps-svg]: https://david-dm.org/inspect-js/is-accessor-descriptor.svg +[deps-url]: https://david-dm.org/inspect-js/is-accessor-descriptor +[dev-deps-svg]: https://david-dm.org/inspect-js/is-accessor-descriptor/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/is-accessor-descriptor#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/is-accessor-descriptor.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/is-accessor-descriptor.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/is-accessor-descriptor.svg +[downloads-url]: https://npm-stat.com/charts.html?package=is-accessor-descriptor +[codecov-image]: https://codecov.io/gh/inspect-js/is-accessor-descriptor/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/is-accessor-descriptor/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/is-accessor-descriptor +[actions-url]: https://github.com/inspect-js/is-accessor-descriptor/actions diff --git a/.pnpm-store/v11/files/14/91680c5d612538fefd3731ab535f8ac66dd6823a38b45a07448159685f2c6df0844cdd87e4cec25314b55cc39a0e1571b1a3480754b945de21532333126424 b/.pnpm-store/v11/files/14/91680c5d612538fefd3731ab535f8ac66dd6823a38b45a07448159685f2c6df0844cdd87e4cec25314b55cc39a0e1571b1a3480754b945de21532333126424 new file mode 100644 index 00000000..baf6bf1b --- /dev/null +++ b/.pnpm-store/v11/files/14/91680c5d612538fefd3731ab535f8ac66dd6823a38b45a07448159685f2c6df0844cdd87e4cec25314b55cc39a0e1571b1a3480754b945de21532333126424 @@ -0,0 +1,104 @@ +'use strict'; + +var extend = require('extend-shallow'); +var Snapdragon = require('snapdragon'); +var compilers = require('./compilers'); +var parsers = require('./parsers'); +var utils = require('./utils'); + +/** + * Customize Snapdragon parser and renderer + */ + +function Braces(options) { + this.options = extend({}, options); +} + +/** + * Initialize braces + */ + +Braces.prototype.init = function(options) { + if (this.isInitialized) return; + this.isInitialized = true; + var opts = utils.createOptions({}, this.options, options); + this.snapdragon = this.options.snapdragon || new Snapdragon(opts); + this.compiler = this.snapdragon.compiler; + this.parser = this.snapdragon.parser; + + compilers(this.snapdragon, opts); + parsers(this.snapdragon, opts); + + /** + * Call Snapdragon `.parse` method. When AST is returned, we check to + * see if any unclosed braces are left on the stack and, if so, we iterate + * over the stack and correct the AST so that compilers are called in the correct + * order and unbalance braces are properly escaped. + */ + + utils.define(this.snapdragon, 'parse', function(pattern, options) { + var parsed = Snapdragon.prototype.parse.apply(this, arguments); + this.parser.ast.input = pattern; + + var stack = this.parser.stack; + while (stack.length) { + addParent({type: 'brace.close', val: ''}, stack.pop()); + } + + function addParent(node, parent) { + utils.define(node, 'parent', parent); + parent.nodes.push(node); + } + + // add non-enumerable parser reference + utils.define(parsed, 'parser', this.parser); + return parsed; + }); +}; + +/** + * Decorate `.parse` method + */ + +Braces.prototype.parse = function(ast, options) { + if (ast && typeof ast === 'object' && ast.nodes) return ast; + this.init(options); + return this.snapdragon.parse(ast, options); +}; + +/** + * Decorate `.compile` method + */ + +Braces.prototype.compile = function(ast, options) { + if (typeof ast === 'string') { + ast = this.parse(ast, options); + } else { + this.init(options); + } + return this.snapdragon.compile(ast, options); +}; + +/** + * Expand + */ + +Braces.prototype.expand = function(pattern) { + var ast = this.parse(pattern, {expand: true}); + return this.compile(ast, {expand: true}); +}; + +/** + * Optimize + */ + +Braces.prototype.optimize = function(pattern) { + var ast = this.parse(pattern, {optimize: true}); + return this.compile(ast, {optimize: true}); +}; + +/** + * Expose `Braces` + */ + +module.exports = Braces; diff --git a/.pnpm-store/v11/files/14/99f304dbc17c623eed61900a907cf30287cde3fdf797342f5d61699dd3687a599c7d76a42d8888b06a28531d1de837400f051a8d9bf9f81e9ad388c2d50e6f b/.pnpm-store/v11/files/14/99f304dbc17c623eed61900a907cf30287cde3fdf797342f5d61699dd3687a599c7d76a42d8888b06a28531d1de837400f051a8d9bf9f81e9ad388c2d50e6f new file mode 100644 index 00000000..2e774d4a --- /dev/null +++ b/.pnpm-store/v11/files/14/99f304dbc17c623eed61900a907cf30287cde3fdf797342f5d61699dd3687a599c7d76a42d8888b06a28531d1de837400f051a8d9bf9f81e9ad388c2d50e6f @@ -0,0 +1,178 @@ +/*! + * extglob + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +/** + * Module dependencies + */ + +var isExtglob = require('is-extglob'); +var re, cache = {}; + +/** + * Expose `extglob` + */ + +module.exports = extglob; + +/** + * Convert the given extglob `string` to a regex-compatible + * string. + * + * ```js + * var extglob = require('extglob'); + * extglob('!(a?(b))'); + * //=> '(?!a(?:b)?)[^/]*?' + * ``` + * + * @param {String} `str` The string to convert. + * @param {Object} `options` + * @option {Boolean} [options] `esc` If `false` special characters will not be escaped. Defaults to `true`. + * @option {Boolean} [options] `regex` If `true` a regular expression is returned instead of a string. + * @return {String} + * @api public + */ + + +function extglob(str, opts) { + opts = opts || {}; + var o = {}, i = 0; + + // fix common character reversals + // '*!(.js)' => '*.!(js)' + str = str.replace(/!\(([^\w*()])/g, '$1!('); + + // support file extension negation + str = str.replace(/([*\/])\.!\([*]\)/g, function (m, ch) { + if (ch === '/') { + return escape('\\/[^.]+'); + } + return escape('[^.]+'); + }); + + // create a unique key for caching by + // combining the string and options + var key = str + + String(!!opts.regex) + + String(!!opts.contains) + + String(!!opts.escape); + + if (cache.hasOwnProperty(key)) { + return cache[key]; + } + + if (!(re instanceof RegExp)) { + re = regex(); + } + + opts.negate = false; + var m; + + while (m = re.exec(str)) { + var prefix = m[1]; + var inner = m[3]; + if (prefix === '!') { + opts.negate = true; + } + + var id = '__EXTGLOB_' + (i++) + '__'; + // use the prefix of the _last_ (outtermost) pattern + o[id] = wrap(inner, prefix, opts.escape); + str = str.split(m[0]).join(id); + } + + var keys = Object.keys(o); + var len = keys.length; + + // we have to loop again to allow us to convert + // patterns in reverse order (starting with the + // innermost/last pattern first) + while (len--) { + var prop = keys[len]; + str = str.split(prop).join(o[prop]); + } + + var result = opts.regex + ? toRegex(str, opts.contains, opts.negate) + : str; + + result = result.split('.').join('\\.'); + + // cache the result and return it + return (cache[key] = result); +} + +/** + * Convert `string` to a regex string. + * + * @param {String} `str` + * @param {String} `prefix` Character that determines how to wrap the string. + * @param {Boolean} `esc` If `false` special characters will not be escaped. Defaults to `true`. + * @return {String} + */ + +function wrap(inner, prefix, esc) { + if (esc) inner = escape(inner); + + switch (prefix) { + case '!': + return '(?!' + inner + ')[^/]' + (esc ? '%%%~' : '*?'); + case '@': + return '(?:' + inner + ')'; + case '+': + return '(?:' + inner + ')+'; + case '*': + return '(?:' + inner + ')' + (esc ? '%%' : '*') + case '?': + return '(?:' + inner + '|)'; + default: + return inner; + } +} + +function escape(str) { + str = str.split('*').join('[^/]%%%~'); + str = str.split('.').join('\\.'); + return str; +} + +/** + * extglob regex. + */ + +function regex() { + return /(\\?[@?!+*$]\\?)(\(([^()]*?)\))/; +} + +/** + * Negation regex + */ + +function negate(str) { + return '(?!^' + str + ').*$'; +} + +/** + * Create the regex to do the matching. If + * the leading character in the `pattern` is `!` + * a negation regex is returned. + * + * @param {String} `pattern` + * @param {Boolean} `contains` Allow loose matching. + * @param {Boolean} `isNegated` True if the pattern is a negation pattern. + */ + +function toRegex(pattern, contains, isNegated) { + var prefix = contains ? '^' : ''; + var after = contains ? '$' : ''; + pattern = ('(?:' + pattern + ')' + after); + if (isNegated) { + pattern = prefix + negate(pattern); + } + return new RegExp(prefix + pattern); +} diff --git a/.pnpm-store/v11/files/14/d930a34509b7b58dce0cc021c00dc029a5b0d8423c2fc24d5b3ccd369aaeb91354c8942f33b11e5a12def6322a55f993a04095d03cbc34e2bf2ff1ca805087 b/.pnpm-store/v11/files/14/d930a34509b7b58dce0cc021c00dc029a5b0d8423c2fc24d5b3ccd369aaeb91354c8942f33b11e5a12def6322a55f993a04095d03cbc34e2bf2ff1ca805087 new file mode 100644 index 00000000..3188c35e --- /dev/null +++ b/.pnpm-store/v11/files/14/d930a34509b7b58dce0cc021c00dc029a5b0d8423c2fc24d5b3ccd369aaeb91354c8942f33b11e5a12def6322a55f993a04095d03cbc34e2bf2ff1ca805087 @@ -0,0 +1,59 @@ +const fs = require('fs'); +const path = require('path'); +const p = path.resolve(__dirname + '/../../modules/global.js'); +const strm = fs.createWriteStream(p); + + +function stringify(val){ + var cache = []; + return JSON.stringify(val, function(key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Circular reference found, discard key + return; + } + // Store value in our collection + cache.push(value); + } + return value; + }); +} + +strm.write('const global = {'); + +Object.keys(global).forEach(function (k) { + + strm.write('\n\n'); + + if (typeof global[k] !== 'function') { + strm.write(' ' + k + ':' + (stringify(global[k]) || 'null') + ','); + } + +}); + +Object.keys(global).forEach(function (k) { + + strm.write('\n\n'); + + if (typeof global[k] === 'function') { + strm.write(' ' + k + ' : function(){\n' + + ' const args = Array.from(arguments);\n' + + ' setTimeout(function(){\n' + + ' try { args[args.length-1](\'global will not work as we are in browser error\') } catch(err){}\n' + + ' },5);\n' + + ' return {};\n' + + '},'); + } + +}); + +strm.write('\n};\n\n'); +strm.write('module.exports = global;\n\n'); + +strm.on('finish', function () { + process.exit(0); +}); + +strm.end(); + + diff --git a/.pnpm-store/v11/files/14/ebab984b463215dae8e253e8492872a627e634757c42ff49a3474b1d32848a93deb4a62c2cc9fa1493b3f5154d89f577c86a8d81d7e2208d126c8cafdd3ec2 b/.pnpm-store/v11/files/14/ebab984b463215dae8e253e8492872a627e634757c42ff49a3474b1d32848a93deb4a62c2cc9fa1493b3f5154d89f577c86a8d81d7e2208d126c8cafdd3ec2 new file mode 100644 index 00000000..5a65cd1f --- /dev/null +++ b/.pnpm-store/v11/files/14/ebab984b463215dae8e253e8492872a627e634757c42ff49a3474b1d32848a93deb4a62c2cc9fa1493b3f5154d89f577c86a8d81d7e2208d126c8cafdd3ec2 @@ -0,0 +1,40 @@ +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ +function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function() { + var args = arguments; + switch (args.length) { + case 0: return !predicate.call(this); + case 1: return !predicate.call(this, args[0]); + case 2: return !predicate.call(this, args[0], args[1]); + case 3: return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; +} + +module.exports = negate; diff --git a/.pnpm-store/v11/files/14/f5220d92da69af2a36d160fb45d1bfeb042e973cb33bc7f56fe422cec1f7d12edc9333b650b2b1ee252a87807374a5962d1973fa13cb163400eb1805fa52d7 b/.pnpm-store/v11/files/14/f5220d92da69af2a36d160fb45d1bfeb042e973cb33bc7f56fe422cec1f7d12edc9333b650b2b1ee252a87807374a5962d1973fa13cb163400eb1805fa52d7 new file mode 100644 index 00000000..a9190101 --- /dev/null +++ b/.pnpm-store/v11/files/14/f5220d92da69af2a36d160fb45d1bfeb042e973cb33bc7f56fe422cec1f7d12edc9333b650b2b1ee252a87807374a5962d1973fa13cb163400eb1805fa52d7 @@ -0,0 +1,32 @@ +/*! + * unset-value + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var isObject = require('isobject'); +var has = require('has-value'); + +module.exports = function unset(obj, prop) { + if (!isObject(obj)) { + throw new TypeError('expected an object.'); + } + if (obj.hasOwnProperty(prop)) { + delete obj[prop]; + return true; + } + + if (has(obj, prop)) { + var segs = prop.split('.'); + var last = segs.pop(); + while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { + last = segs.pop().slice(0, -1) + '.' + last; + } + while (segs.length) obj = obj[prop = segs.shift()]; + return (delete obj[last]); + } + return true; +}; diff --git a/.pnpm-store/v11/files/15/07382f2aca07abd54887e410a227211613b733f5a6693809ca0a2a31d39b6f21345ceaa3b1174a36760e3a1e05e93804ed23c8087566551348be62750763d6 b/.pnpm-store/v11/files/15/07382f2aca07abd54887e410a227211613b733f5a6693809ca0a2a31d39b6f21345ceaa3b1174a36760e3a1e05e93804ed23c8087566551348be62750763d6 new file mode 100644 index 00000000..20a61149 --- /dev/null +++ b/.pnpm-store/v11/files/15/07382f2aca07abd54887e410a227211613b733f5a6693809ca0a2a31d39b6f21345ceaa3b1174a36760e3a1e05e93804ed23c8087566551348be62750763d6 @@ -0,0 +1,495 @@ +# ws: a Node.js WebSocket library + +[![Version npm](https://img.shields.io/npm/v/ws.svg?logo=npm)](https://www.npmjs.com/package/ws) +[![CI](https://img.shields.io/github/workflow/status/websockets/ws/CI/master?label=CI&logo=github)](https://github.com/websockets/ws/actions?query=workflow%3ACI+branch%3Amaster) +[![Coverage Status](https://img.shields.io/coveralls/websockets/ws/master.svg?logo=coveralls)](https://coveralls.io/github/websockets/ws) + +ws is a simple to use, blazing fast, and thoroughly tested WebSocket client and +server implementation. + +Passes the quite extensive Autobahn test suite: [server][server-report], +[client][client-report]. + +**Note**: This module does not work in the browser. The client in the docs is a +reference to a back end with the role of a client in the WebSocket +communication. Browser clients must use the native +[`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) +object. To make the same code work seamlessly on Node.js and the browser, you +can use one of the many wrappers available on npm, like +[isomorphic-ws](https://github.com/heineiuo/isomorphic-ws). + +## Table of Contents + +- [Protocol support](#protocol-support) +- [Installing](#installing) + - [Opt-in for performance](#opt-in-for-performance) +- [API docs](#api-docs) +- [WebSocket compression](#websocket-compression) +- [Usage examples](#usage-examples) + - [Sending and receiving text data](#sending-and-receiving-text-data) + - [Sending binary data](#sending-binary-data) + - [Simple server](#simple-server) + - [External HTTP/S server](#external-https-server) + - [Multiple servers sharing a single HTTP/S server](#multiple-servers-sharing-a-single-https-server) + - [Client authentication](#client-authentication) + - [Server broadcast](#server-broadcast) + - [echo.websocket.org demo](#echowebsocketorg-demo) + - [Use the Node.js streams API](#use-the-nodejs-streams-api) + - [Other examples](#other-examples) +- [FAQ](#faq) + - [How to get the IP address of the client?](#how-to-get-the-ip-address-of-the-client) + - [How to detect and close broken connections?](#how-to-detect-and-close-broken-connections) + - [How to connect via a proxy?](#how-to-connect-via-a-proxy) +- [Changelog](#changelog) +- [License](#license) + +## Protocol support + +- **HyBi drafts 07-12** (Use the option `protocolVersion: 8`) +- **HyBi drafts 13-17** (Current default, alternatively option + `protocolVersion: 13`) + +## Installing + +``` +npm install ws +``` + +### Opt-in for performance + +There are 2 optional modules that can be installed along side with the ws +module. These modules are binary addons which improve certain operations. +Prebuilt binaries are available for the most popular platforms so you don't +necessarily need to have a C++ compiler installed on your machine. + +- `npm install --save-optional bufferutil`: Allows to efficiently perform + operations such as masking and unmasking the data payload of the WebSocket + frames. +- `npm install --save-optional utf-8-validate`: Allows to efficiently check if a + message contains valid UTF-8. + +## API docs + +See [`/doc/ws.md`](./doc/ws.md) for Node.js-like documentation of ws classes and +utility functions. + +## WebSocket compression + +ws supports the [permessage-deflate extension][permessage-deflate] which enables +the client and server to negotiate a compression algorithm and its parameters, +and then selectively apply it to the data payloads of each WebSocket message. + +The extension is disabled by default on the server and enabled by default on the +client. It adds a significant overhead in terms of performance and memory +consumption so we suggest to enable it only if it is really needed. + +Note that Node.js has a variety of issues with high-performance compression, +where increased concurrency, especially on Linux, can lead to [catastrophic +memory fragmentation][node-zlib-bug] and slow performance. If you intend to use +permessage-deflate in production, it is worthwhile to set up a test +representative of your workload and ensure Node.js/zlib will handle it with +acceptable performance and memory usage. + +Tuning of permessage-deflate can be done via the options defined below. You can +also use `zlibDeflateOptions` and `zlibInflateOptions`, which is passed directly +into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs]. + +See [the docs][ws-server-options] for more options. + +```js +const WebSocket = require('ws'); + +const wss = new WebSocket.Server({ + port: 8080, + perMessageDeflate: { + zlibDeflateOptions: { + // See zlib defaults. + chunkSize: 1024, + memLevel: 7, + level: 3 + }, + zlibInflateOptions: { + chunkSize: 10 * 1024 + }, + // Other options settable: + clientNoContextTakeover: true, // Defaults to negotiated value. + serverNoContextTakeover: true, // Defaults to negotiated value. + serverMaxWindowBits: 10, // Defaults to negotiated value. + // Below options specified as default values. + concurrencyLimit: 10, // Limits zlib concurrency for perf. + threshold: 1024 // Size (in bytes) below which messages + // should not be compressed. + } +}); +``` + +The client will only use the extension if it is supported and enabled on the +server. To always disable the extension on the client set the +`perMessageDeflate` option to `false`. + +```js +const WebSocket = require('ws'); + +const ws = new WebSocket('ws://www.host.com/path', { + perMessageDeflate: false +}); +``` + +## Usage examples + +### Sending and receiving text data + +```js +const WebSocket = require('ws'); + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + ws.send('something'); +}); + +ws.on('message', function incoming(data) { + console.log(data); +}); +``` + +### Sending binary data + +```js +const WebSocket = require('ws'); + +const ws = new WebSocket('ws://www.host.com/path'); + +ws.on('open', function open() { + const array = new Float32Array(5); + + for (var i = 0; i < array.length; ++i) { + array[i] = i / 2; + } + + ws.send(array); +}); +``` + +### Simple server + +```js +const WebSocket = require('ws'); + +const wss = new WebSocket.Server({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); +``` + +### External HTTP/S server + +```js +const fs = require('fs'); +const https = require('https'); +const WebSocket = require('ws'); + +const server = https.createServer({ + cert: fs.readFileSync('/path/to/cert.pem'), + key: fs.readFileSync('/path/to/key.pem') +}); +const wss = new WebSocket.Server({ server }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(message) { + console.log('received: %s', message); + }); + + ws.send('something'); +}); + +server.listen(8080); +``` + +### Multiple servers sharing a single HTTP/S server + +```js +const http = require('http'); +const WebSocket = require('ws'); +const url = require('url'); + +const server = http.createServer(); +const wss1 = new WebSocket.Server({ noServer: true }); +const wss2 = new WebSocket.Server({ noServer: true }); + +wss1.on('connection', function connection(ws) { + // ... +}); + +wss2.on('connection', function connection(ws) { + // ... +}); + +server.on('upgrade', function upgrade(request, socket, head) { + const pathname = url.parse(request.url).pathname; + + if (pathname === '/foo') { + wss1.handleUpgrade(request, socket, head, function done(ws) { + wss1.emit('connection', ws, request); + }); + } else if (pathname === '/bar') { + wss2.handleUpgrade(request, socket, head, function done(ws) { + wss2.emit('connection', ws, request); + }); + } else { + socket.destroy(); + } +}); + +server.listen(8080); +``` + +### Client authentication + +```js +const http = require('http'); +const WebSocket = require('ws'); + +const server = http.createServer(); +const wss = new WebSocket.Server({ noServer: true }); + +wss.on('connection', function connection(ws, request, client) { + ws.on('message', function message(msg) { + console.log(`Received message ${msg} from user ${client}`); + }); +}); + +server.on('upgrade', function upgrade(request, socket, head) { + // This function is not defined on purpose. Implement it with your own logic. + authenticate(request, (err, client) => { + if (err || !client) { + socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n'); + socket.destroy(); + return; + } + + wss.handleUpgrade(request, socket, head, function done(ws) { + wss.emit('connection', ws, request, client); + }); + }); +}); + +server.listen(8080); +``` + +Also see the provided [example][session-parse-example] using `express-session`. + +### Server broadcast + +A client WebSocket broadcasting to all connected WebSocket clients, including +itself. + +```js +const WebSocket = require('ws'); + +const wss = new WebSocket.Server({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(data) { + wss.clients.forEach(function each(client) { + if (client.readyState === WebSocket.OPEN) { + client.send(data); + } + }); + }); +}); +``` + +A client WebSocket broadcasting to every other connected WebSocket clients, +excluding itself. + +```js +const WebSocket = require('ws'); + +const wss = new WebSocket.Server({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.on('message', function incoming(data) { + wss.clients.forEach(function each(client) { + if (client !== ws && client.readyState === WebSocket.OPEN) { + client.send(data); + } + }); + }); +}); +``` + +### echo.websocket.org demo + +```js +const WebSocket = require('ws'); + +const ws = new WebSocket('wss://echo.websocket.org/', { + origin: 'https://websocket.org' +}); + +ws.on('open', function open() { + console.log('connected'); + ws.send(Date.now()); +}); + +ws.on('close', function close() { + console.log('disconnected'); +}); + +ws.on('message', function incoming(data) { + console.log(`Roundtrip time: ${Date.now() - data} ms`); + + setTimeout(function timeout() { + ws.send(Date.now()); + }, 500); +}); +``` + +### Use the Node.js streams API + +```js +const WebSocket = require('ws'); + +const ws = new WebSocket('wss://echo.websocket.org/', { + origin: 'https://websocket.org' +}); + +const duplex = WebSocket.createWebSocketStream(ws, { encoding: 'utf8' }); + +duplex.pipe(process.stdout); +process.stdin.pipe(duplex); +``` + +### Other examples + +For a full example with a browser client communicating with a ws server, see the +examples folder. + +Otherwise, see the test cases. + +## FAQ + +### How to get the IP address of the client? + +The remote IP address can be obtained from the raw socket. + +```js +const WebSocket = require('ws'); + +const wss = new WebSocket.Server({ port: 8080 }); + +wss.on('connection', function connection(ws, req) { + const ip = req.socket.remoteAddress; +}); +``` + +When the server runs behind a proxy like NGINX, the de-facto standard is to use +the `X-Forwarded-For` header. + +```js +wss.on('connection', function connection(ws, req) { + const ip = req.headers['x-forwarded-for'].split(',')[0].trim(); +}); +``` + +### How to detect and close broken connections? + +Sometimes the link between the server and the client can be interrupted in a way +that keeps both the server and the client unaware of the broken state of the +connection (e.g. when pulling the cord). + +In these cases ping messages can be used as a means to verify that the remote +endpoint is still responsive. + +```js +const WebSocket = require('ws'); + +function noop() {} + +function heartbeat() { + this.isAlive = true; +} + +const wss = new WebSocket.Server({ port: 8080 }); + +wss.on('connection', function connection(ws) { + ws.isAlive = true; + ws.on('pong', heartbeat); +}); + +const interval = setInterval(function ping() { + wss.clients.forEach(function each(ws) { + if (ws.isAlive === false) return ws.terminate(); + + ws.isAlive = false; + ws.ping(noop); + }); +}, 30000); + +wss.on('close', function close() { + clearInterval(interval); +}); +``` + +Pong messages are automatically sent in response to ping messages as required by +the spec. + +Just like the server example above your clients might as well lose connection +without knowing it. You might want to add a ping listener on your clients to +prevent that. A simple implementation would be: + +```js +const WebSocket = require('ws'); + +function heartbeat() { + clearTimeout(this.pingTimeout); + + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + // Delay should be equal to the interval at which your server + // sends out pings plus a conservative assumption of the latency. + this.pingTimeout = setTimeout(() => { + this.terminate(); + }, 30000 + 1000); +} + +const client = new WebSocket('wss://echo.websocket.org/'); + +client.on('open', heartbeat); +client.on('ping', heartbeat); +client.on('close', function clear() { + clearTimeout(this.pingTimeout); +}); +``` + +### How to connect via a proxy? + +Use a custom `http.Agent` implementation like [https-proxy-agent][] or +[socks-proxy-agent][]. + +## Changelog + +We're using the GitHub [releases][changelog] for changelog entries. + +## License + +[MIT](LICENSE) + +[changelog]: https://github.com/websockets/ws/releases +[client-report]: http://websockets.github.io/ws/autobahn/clients/ +[https-proxy-agent]: https://github.com/TooTallNate/node-https-proxy-agent +[node-zlib-bug]: https://github.com/nodejs/node/issues/8871 +[node-zlib-deflaterawdocs]: + https://nodejs.org/api/zlib.html#zlib_zlib_createdeflateraw_options +[permessage-deflate]: https://tools.ietf.org/html/rfc7692 +[server-report]: http://websockets.github.io/ws/autobahn/servers/ +[session-parse-example]: ./examples/express-session-parse +[socks-proxy-agent]: https://github.com/TooTallNate/node-socks-proxy-agent +[ws-server-options]: + https://github.com/websockets/ws/blob/master/doc/ws.md#new-websocketserveroptions-callback diff --git a/.pnpm-store/v11/files/15/0cbb6df67b88f473acc5cb722906f723ec83a2731273780cafdbd540969f9fe143d4e6db33eda3bb48d2076bf2e6c914d1f240290fdbc6dc0457eaa39da7f7 b/.pnpm-store/v11/files/15/0cbb6df67b88f473acc5cb722906f723ec83a2731273780cafdbd540969f9fe143d4e6db33eda3bb48d2076bf2e6c914d1f240290fdbc6dc0457eaa39da7f7 new file mode 100644 index 00000000..3f14a478 --- /dev/null +++ b/.pnpm-store/v11/files/15/0cbb6df67b88f473acc5cb722906f723ec83a2731273780cafdbd540969f9fe143d4e6db33eda3bb48d2076bf2e6c914d1f240290fdbc6dc0457eaa39da7f7 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').reduceRight; diff --git a/.pnpm-store/v11/files/15/1dd438873aad4a93a93322d662fe3ef335cca7ff585d66964360a7d678da26d2e538efc3036af3befb6a4c94882bb09df0076ed4dace6597c4b2da23e833ee b/.pnpm-store/v11/files/15/1dd438873aad4a93a93322d662fe3ef335cca7ff585d66964360a7d678da26d2e538efc3036af3befb6a4c94882bb09df0076ed4dace6597c4b2da23e833ee new file mode 100644 index 00000000..a662a5e3 --- /dev/null +++ b/.pnpm-store/v11/files/15/1dd438873aad4a93a93322d662fe3ef335cca7ff585d66964360a7d678da26d2e538efc3036af3befb6a4c94882bb09df0076ed4dace6597c4b2da23e833ee @@ -0,0 +1,18 @@ +# lodash.uniq v4.5.0 + +The [lodash](https://lodash.com/) method `_.uniq` exported as a [Node.js](https://nodejs.org/) module. + +## Installation + +Using npm: +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash.uniq +``` + +In Node.js: +```js +var uniq = require('lodash.uniq'); +``` + +See the [documentation](https://lodash.com/docs#uniq) or [package source](https://github.com/lodash/lodash/blob/4.5.0-npm-packages/lodash.uniq) for more details. diff --git a/.pnpm-store/v11/files/15/292c69dd0f398c56728e0378f88a32d914df338a0757a33d79c181ad373914874b227f3082553631e40dc847c853e4b6ccd364f79f9bba3a9c708df71de444-exec b/.pnpm-store/v11/files/15/292c69dd0f398c56728e0378f88a32d914df338a0757a33d79c181ad373914874b227f3082553631e40dc847c853e4b6ccd364f79f9bba3a9c708df71de444-exec new file mode 100755 index 00000000..13da8ec0 --- /dev/null +++ b/.pnpm-store/v11/files/15/292c69dd0f398c56728e0378f88a32d914df338a0757a33d79c181ad373914874b227f3082553631e40dc847c853e4b6ccd364f79f9bba3a9c708df71de444-exec @@ -0,0 +1,12 @@ +#!/usr/bin/env node + +process.stdin.on('readable', () => { + let chunk = process.stdin.read(); + if (String(chunk).match('suman')) { + process.stdout.write(chunk); + } +}); + +process.stdin.on('end', () => { + process.stdout.write('end'); +}); diff --git a/.pnpm-store/v11/files/15/432eb46f2c26ecb2a979645be71bfd606964d6476199c50f2a5df8fe7f3188f9586f2a1ccd1bc1f5ed29d80c690bdc730ab2d3eb7f680462bf317f2b972b80 b/.pnpm-store/v11/files/15/432eb46f2c26ecb2a979645be71bfd606964d6476199c50f2a5df8fe7f3188f9586f2a1ccd1bc1f5ed29d80c690bdc730ab2d3eb7f680462bf317f2b972b80 new file mode 100644 index 00000000..9661ac71 --- /dev/null +++ b/.pnpm-store/v11/files/15/432eb46f2c26ecb2a979645be71bfd606964d6476199c50f2a5df8fe7f3188f9586f2a1ccd1bc1f5ed29d80c690bdc730ab2d3eb7f680462bf317f2b972b80 @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.pnpm-store/v11/files/15/7628056a83417099a1a37080dc916c2d1f5012eff7cc9dee6cd6454741598ce702d342e731d91269bfb0607d9242badd5765fe356114ae45f2a2a532370051 b/.pnpm-store/v11/files/15/7628056a83417099a1a37080dc916c2d1f5012eff7cc9dee6cd6454741598ce702d342e731d91269bfb0607d9242badd5765fe356114ae45f2a2a532370051 new file mode 100644 index 00000000..5333f246 --- /dev/null +++ b/.pnpm-store/v11/files/15/7628056a83417099a1a37080dc916c2d1f5012eff7cc9dee6cd6454741598ce702d342e731d91269bfb0607d9242badd5765fe356114ae45f2a2a532370051 @@ -0,0 +1,43 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +var path = require("path") +var assert = require("assert") +var urix = require("../") + +"use stict" + +function test(testPath, expected) { + path.sep = "\\" + assert.equal(urix(testPath), expected) + path.sep = "/" + assert.equal(urix(testPath), testPath) +} + +describe("urix", function() { + + it("is a function", function() { + assert.equal(typeof urix, "function") + }) + + + it("converts backslashes to slashes", function() { + test("a\\b\\c", "a/b/c") + test("\\a\\b\\c", "/a/b/c") + test("a/b\\c", "a/b/c") + test("\\\\a\\\\\\b///c", "//a///b///c") + }) + + + it("changes the drive letter to a slash", function() { + test("c:\\a", "/a") + test("C:\\a", "/a") + test("z:\\a", "/a") + test("c:a", "/a") + test("c:/a", "/a") + test("c:\\\\a", "//a") + test("c://a", "//a") + test("c:\\//a", "///a") + }) + +}) diff --git a/.pnpm-store/v11/files/15/89bdfd0a288b0a75a08efd0f73f69a4293e1f2599ccbcd250c11433dc9fce861ac30d9948502d36daa99a156e09ba59d75933da445feeabf2e7820712ced07 b/.pnpm-store/v11/files/15/89bdfd0a288b0a75a08efd0f73f69a4293e1f2599ccbcd250c11433dc9fce861ac30d9948502d36daa99a156e09ba59d75933da445feeabf2e7820712ced07 new file mode 100644 index 00000000..8f0a310f --- /dev/null +++ b/.pnpm-store/v11/files/15/89bdfd0a288b0a75a08efd0f73f69a4293e1f2599ccbcd250c11433dc9fce861ac30d9948502d36daa99a156e09ba59d75933da445feeabf2e7820712ced07 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/15/8a2166e36251580516f464b3b8aae6145aa7c3586115be7d1b816b05905a18743b2fe795e99fe4adad47692678db5a67c26b9683425e92f346b7356d09c951-exec b/.pnpm-store/v11/files/15/8a2166e36251580516f464b3b8aae6145aa7c3586115be7d1b816b05905a18743b2fe795e99fe4adad47692678db5a67c26b9683425e92f346b7356d09c951-exec new file mode 100755 index 00000000..dbd5a432 --- /dev/null +++ b/.pnpm-store/v11/files/15/8a2166e36251580516f464b3b8aae6145aa7c3586115be7d1b816b05905a18743b2fe795e99fe4adad47692678db5a67c26b9683425e92f346b7356d09c951-exec @@ -0,0 +1,44 @@ +{ + "name": "prepend-transform", + "version": "0.0.1019", + "description": "Prepend a string to beginning of each line of stdout/stderr.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "typings": "dist/index.d.ts", + "bin": { + "prepend_with": "dist/cli.js" + }, + "scripts": { + "test": "suman test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/prepend-transform.git" + }, + "keywords": [ + "suman", + "test", + "prepend", + "stream", + "transform", + "stdout", + "stderr", + "stdio", + "pipe" + ], + "author": "Olegzandr VD", + "license": "MIT", + "bugs": { + "url": "https://github.com/ORESoftware/prepend-transform/issues" + }, + "homepage": "https://github.com/ORESoftware/prepend-transform#readme", + "devDependencies": { + "@types/node": "^8.0.1" + }, + "dependencies": { + "chalk": "^2.4.1" + }, + "r2g": { + "test": "echo 'noop'" + } +} diff --git a/.pnpm-store/v11/files/15/ad34ec21c86e57584a6b44cc348a1f44c01e629f792a9bfa413d84ec52fd6704898554d84fc55f32eafa06b4803c29f945dcd29fca5bea0c30292f3df1a125 b/.pnpm-store/v11/files/15/ad34ec21c86e57584a6b44cc348a1f44c01e629f792a9bfa413d84ec52fd6704898554d84fc55f32eafa06b4803c29f945dcd29fca5bea0c30292f3df1a125 new file mode 100644 index 00000000..5a9956a7 --- /dev/null +++ b/.pnpm-store/v11/files/15/ad34ec21c86e57584a6b44cc348a1f44c01e629f792a9bfa413d84ec52fd6704898554d84fc55f32eafa06b4803c29f945dcd29fca5bea0c30292f3df1a125 @@ -0,0 +1,24 @@ +The MIT License (MIT) + +Copyright (c) 2014-2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/15/ae0381e8ed13daf9cd6a5a2a32cbcd0f3c5365206c2ab32d30aee262968429cb6ab53861e590b13157416cc149e0be5d256ab3cf913565e710331f4ab60d00 b/.pnpm-store/v11/files/15/ae0381e8ed13daf9cd6a5a2a32cbcd0f3c5365206c2ab32d30aee262968429cb6ab53861e590b13157416cc149e0be5d256ab3cf913565e710331f4ab60d00 new file mode 100644 index 00000000..e372dbbd --- /dev/null +++ b/.pnpm-store/v11/files/15/ae0381e8ed13daf9cd6a5a2a32cbcd0f3c5365206c2ab32d30aee262968429cb6ab53861e590b13157416cc149e0be5d256ab3cf913565e710331f4ab60d00 @@ -0,0 +1,2 @@ +var _ = require('./lodash.min').runInContext(); +module.exports = require('./fp/_baseConvert')(_, _); diff --git a/.pnpm-store/v11/files/15/c751ff67b09d409cbd50cf28a77fdbad5e3a1714de95ad4ddcbb66f266199d1db503dd385b53c20cf1ab7ad0e07e71f4f6e130e38cf731aef4dc651cf28133-exec b/.pnpm-store/v11/files/15/c751ff67b09d409cbd50cf28a77fdbad5e3a1714de95ad4ddcbb66f266199d1db503dd385b53c20cf1ab7ad0e07e71f4f6e130e38cf731aef4dc651cf28133-exec new file mode 100755 index 00000000..467783a3 --- /dev/null +++ b/.pnpm-store/v11/files/15/c751ff67b09d409cbd50cf28a77fdbad5e3a1714de95ad4ddcbb66f266199d1db503dd385b53c20cf1ab7ad0e07e71f4f6e130e38cf731aef4dc651cf28133-exec @@ -0,0 +1,327 @@ +declare module "zlib" { + import * as stream from "stream"; + + interface ZlibOptions { + flush?: number; // default: zlib.constants.Z_NO_FLUSH + finishFlush?: number; // default: zlib.constants.Z_FINISH + chunkSize?: number; // default: 16*1024 + windowBits?: number; + level?: number; // compression only + memLevel?: number; // compression only + strategy?: number; // compression only + dictionary?: Buffer | NodeJS.TypedArray | DataView | ArrayBuffer; // deflate/inflate only, empty dictionary by default + info?: boolean; + } + + interface BrotliOptions { + /** + * @default constants.BROTLI_OPERATION_PROCESS + */ + flush?: number; + /** + * @default constants.BROTLI_OPERATION_FINISH + */ + finishFlush?: number; + /** + * @default 16*1024 + */ + chunkSize?: number; + params?: { + /** + * Each key is a `constants.BROTLI_*` constant. + */ + [key: number]: boolean | number; + }; + } + + interface Zlib { + /** @deprecated Use bytesWritten instead. */ + readonly bytesRead: number; + readonly bytesWritten: number; + shell?: boolean | string; + close(callback?: () => void): void; + flush(kind?: number, callback?: () => void): void; + flush(callback?: () => void): void; + } + + interface ZlibParams { + params(level: number, strategy: number, callback: () => void): void; + } + + interface ZlibReset { + reset(): void; + } + + interface BrotliCompress extends stream.Transform, Zlib { } + interface BrotliDecompress extends stream.Transform, Zlib { } + interface Gzip extends stream.Transform, Zlib { } + interface Gunzip extends stream.Transform, Zlib { } + interface Deflate extends stream.Transform, Zlib, ZlibReset, ZlibParams { } + interface Inflate extends stream.Transform, Zlib, ZlibReset { } + interface DeflateRaw extends stream.Transform, Zlib, ZlibReset, ZlibParams { } + interface InflateRaw extends stream.Transform, Zlib, ZlibReset { } + interface Unzip extends stream.Transform, Zlib { } + + function createBrotliCompress(options?: BrotliOptions): BrotliCompress; + function createBrotliDecompress(options?: BrotliOptions): BrotliDecompress; + function createGzip(options?: ZlibOptions): Gzip; + function createGunzip(options?: ZlibOptions): Gunzip; + function createDeflate(options?: ZlibOptions): Deflate; + function createInflate(options?: ZlibOptions): Inflate; + function createDeflateRaw(options?: ZlibOptions): DeflateRaw; + function createInflateRaw(options?: ZlibOptions): InflateRaw; + function createUnzip(options?: ZlibOptions): Unzip; + + type InputType = string | Buffer | DataView | ArrayBuffer | NodeJS.TypedArray; + + type CompressCallback = (error: Error | null, result: Buffer) => void; + + function brotliCompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; + function brotliCompress(buf: InputType, callback: CompressCallback): void; + namespace brotliCompress { + function __promisify__(buffer: InputType, options?: BrotliOptions): Promise; + } + + function brotliCompressSync(buf: InputType, options?: BrotliOptions): Buffer; + + function brotliDecompress(buf: InputType, options: BrotliOptions, callback: CompressCallback): void; + function brotliDecompress(buf: InputType, callback: CompressCallback): void; + namespace brotliDecompress { + function __promisify__(buffer: InputType, options?: BrotliOptions): Promise; + } + + function brotliDecompressSync(buf: InputType, options?: BrotliOptions): Buffer; + + function deflate(buf: InputType, callback: CompressCallback): void; + function deflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace deflate { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function deflateSync(buf: InputType, options?: ZlibOptions): Buffer; + + function deflateRaw(buf: InputType, callback: CompressCallback): void; + function deflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace deflateRaw { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function deflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; + + function gzip(buf: InputType, callback: CompressCallback): void; + function gzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace gzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function gzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + function gunzip(buf: InputType, callback: CompressCallback): void; + function gunzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace gunzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function gunzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + function inflate(buf: InputType, callback: CompressCallback): void; + function inflate(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace inflate { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function inflateSync(buf: InputType, options?: ZlibOptions): Buffer; + + function inflateRaw(buf: InputType, callback: CompressCallback): void; + function inflateRaw(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace inflateRaw { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function inflateRawSync(buf: InputType, options?: ZlibOptions): Buffer; + + function unzip(buf: InputType, callback: CompressCallback): void; + function unzip(buf: InputType, options: ZlibOptions, callback: CompressCallback): void; + namespace unzip { + function __promisify__(buffer: InputType, options?: ZlibOptions): Promise; + } + + function unzipSync(buf: InputType, options?: ZlibOptions): Buffer; + + namespace constants { + // Allowed flush values. + + const Z_NO_FLUSH: number; + const Z_PARTIAL_FLUSH: number; + const Z_SYNC_FLUSH: number; + const Z_FULL_FLUSH: number; + const Z_FINISH: number; + const Z_BLOCK: number; + const Z_TREES: number; + + // Return codes for the compression/decompression functions. Negative values are errors, positive values are used for special but normal events. + + const Z_OK: number; + const Z_STREAM_END: number; + const Z_NEED_DICT: number; + const Z_ERRNO: number; + const Z_STREAM_ERROR: number; + const Z_DATA_ERROR: number; + const Z_MEM_ERROR: number; + const Z_BUF_ERROR: number; + const Z_VERSION_ERROR: number; + + // Compression levels. + + const Z_NO_COMPRESSION: number; + const Z_BEST_SPEED: number; + const Z_BEST_COMPRESSION: number; + const Z_DEFAULT_COMPRESSION: number; + + // Compression strategy. + + const Z_FILTERED: number; + const Z_HUFFMAN_ONLY: number; + const Z_RLE: number; + const Z_FIXED: number; + const Z_DEFAULT_STRATEGY: number; + + const BROTLI_DECODE: number; + const BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES: number; + const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP: number; + const BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES: number; + const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1: number; + const BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2: number; + const BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS: number; + const BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET: number; + const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1: number; + const BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2: number; + const BROTLI_DECODER_ERROR_FORMAT_CL_SPACE: number; + const BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT: number; + const BROTLI_DECODER_ERROR_FORMAT_DICTIONARY: number; + const BROTLI_DECODER_ERROR_FORMAT_DISTANCE: number; + const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE: number; + const BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE: number; + const BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE: number; + const BROTLI_DECODER_ERROR_FORMAT_PADDING_1: number; + const BROTLI_DECODER_ERROR_FORMAT_PADDING_2: number; + const BROTLI_DECODER_ERROR_FORMAT_RESERVED: number; + const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET: number; + const BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME: number; + const BROTLI_DECODER_ERROR_FORMAT_TRANSFORM: number; + const BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS: number; + const BROTLI_DECODER_ERROR_INVALID_ARGUMENTS: number; + const BROTLI_DECODER_ERROR_UNREACHABLE: number; + const BROTLI_DECODER_NEEDS_MORE_INPUT: number; + const BROTLI_DECODER_NEEDS_MORE_OUTPUT: number; + const BROTLI_DECODER_NO_ERROR: number; + const BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION: number; + const BROTLI_DECODER_PARAM_LARGE_WINDOW: number; + const BROTLI_DECODER_RESULT_ERROR: number; + const BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT: number; + const BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT: number; + const BROTLI_DECODER_RESULT_SUCCESS: number; + const BROTLI_DECODER_SUCCESS: number; + + const BROTLI_DEFAULT_MODE: number; + const BROTLI_DEFAULT_QUALITY: number; + const BROTLI_DEFAULT_WINDOW: number; + const BROTLI_ENCODE: number; + const BROTLI_LARGE_MAX_WINDOW_BITS: number; + const BROTLI_MAX_INPUT_BLOCK_BITS: number; + const BROTLI_MAX_QUALITY: number; + const BROTLI_MAX_WINDOW_BITS: number; + const BROTLI_MIN_INPUT_BLOCK_BITS: number; + const BROTLI_MIN_QUALITY: number; + const BROTLI_MIN_WINDOW_BITS: number; + + const BROTLI_MODE_FONT: number; + const BROTLI_MODE_GENERIC: number; + const BROTLI_MODE_TEXT: number; + + const BROTLI_OPERATION_EMIT_METADATA: number; + const BROTLI_OPERATION_FINISH: number; + const BROTLI_OPERATION_FLUSH: number; + const BROTLI_OPERATION_PROCESS: number; + + const BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING: number; + const BROTLI_PARAM_LARGE_WINDOW: number; + const BROTLI_PARAM_LGBLOCK: number; + const BROTLI_PARAM_LGWIN: number; + const BROTLI_PARAM_MODE: number; + const BROTLI_PARAM_NDIRECT: number; + const BROTLI_PARAM_NPOSTFIX: number; + const BROTLI_PARAM_QUALITY: number; + const BROTLI_PARAM_SIZE_HINT: number; + } + + // Allowed flush values. + /** @deprecated Use `constants.Z_NO_FLUSH` */ + const Z_NO_FLUSH: number; + /** @deprecated Use `constants.Z_PARTIAL_FLUSH` */ + const Z_PARTIAL_FLUSH: number; + /** @deprecated Use `constants.Z_SYNC_FLUSH` */ + const Z_SYNC_FLUSH: number; + /** @deprecated Use `constants.Z_FULL_FLUSH` */ + const Z_FULL_FLUSH: number; + /** @deprecated Use `constants.Z_FINISH` */ + const Z_FINISH: number; + /** @deprecated Use `constants.Z_BLOCK` */ + const Z_BLOCK: number; + /** @deprecated Use `constants.Z_TREES` */ + const Z_TREES: number; + + // Return codes for the compression/decompression functions. + // Negative values are errors, positive values are used for special but normal events. + /** @deprecated Use `constants.Z_OK` */ + const Z_OK: number; + /** @deprecated Use `constants.Z_STREAM_END` */ + const Z_STREAM_END: number; + /** @deprecated Use `constants.Z_NEED_DICT` */ + const Z_NEED_DICT: number; + /** @deprecated Use `constants.Z_ERRNO` */ + const Z_ERRNO: number; + /** @deprecated Use `constants.Z_STREAM_ERROR` */ + const Z_STREAM_ERROR: number; + /** @deprecated Use `constants.Z_DATA_ERROR` */ + const Z_DATA_ERROR: number; + /** @deprecated Use `constants.Z_MEM_ERROR` */ + const Z_MEM_ERROR: number; + /** @deprecated Use `constants.Z_BUF_ERROR` */ + const Z_BUF_ERROR: number; + /** @deprecated Use `constants.Z_VERSION_ERROR` */ + const Z_VERSION_ERROR: number; + + // Compression levels. + /** @deprecated Use `constants.Z_NO_COMPRESSION` */ + const Z_NO_COMPRESSION: number; + /** @deprecated Use `constants.Z_BEST_SPEED` */ + const Z_BEST_SPEED: number; + /** @deprecated Use `constants.Z_BEST_COMPRESSION` */ + const Z_BEST_COMPRESSION: number; + /** @deprecated Use `constants.Z_DEFAULT_COMPRESSION` */ + const Z_DEFAULT_COMPRESSION: number; + + // Compression strategy. + /** @deprecated Use `constants.Z_FILTERED` */ + const Z_FILTERED: number; + /** @deprecated Use `constants.Z_HUFFMAN_ONLY` */ + const Z_HUFFMAN_ONLY: number; + /** @deprecated Use `constants.Z_RLE` */ + const Z_RLE: number; + /** @deprecated Use `constants.Z_FIXED` */ + const Z_FIXED: number; + /** @deprecated Use `constants.Z_DEFAULT_STRATEGY` */ + const Z_DEFAULT_STRATEGY: number; + + /** @deprecated */ + const Z_BINARY: number; + /** @deprecated */ + const Z_TEXT: number; + /** @deprecated */ + const Z_ASCII: number; + /** @deprecated */ + const Z_UNKNOWN: number; + /** @deprecated */ + const Z_DEFLATED: number; +} diff --git a/.pnpm-store/v11/files/15/e9313dcfb01af7cd871ed3bcfeaa367950fb0cb2e6bd1237a0578e89b8025b3f8ce1c4c4bf972f3de38b1773a1894e113276ef81e42b519557ff1f7c7e8b4f b/.pnpm-store/v11/files/15/e9313dcfb01af7cd871ed3bcfeaa367950fb0cb2e6bd1237a0578e89b8025b3f8ce1c4c4bf972f3de38b1773a1894e113276ef81e42b519557ff1f7c7e8b4f new file mode 100644 index 00000000..0f14dac3 --- /dev/null +++ b/.pnpm-store/v11/files/15/e9313dcfb01af7cd871ed3bcfeaa367950fb0cb2e6bd1237a0578e89b8025b3f8ce1c4c4bf972f3de38b1773a1894e113276ef81e42b519557ff1f7c7e8b4f @@ -0,0 +1,11 @@ + +build: components index.js + @component build --dev + +components: component.json + @component install --dev + +clean: + rm -fr build components template.js + +.PHONY: clean diff --git a/.pnpm-store/v11/files/15/f5e48798db291adafff9e804ff0951a5670262bf12e2b243505e9dd64ade246d6d8c01669fe9b709e018b1444ebf2aef5190db248e0d585ea825954cb131d0 b/.pnpm-store/v11/files/15/f5e48798db291adafff9e804ff0951a5670262bf12e2b243505e9dd64ade246d6d8c01669fe9b709e018b1444ebf2aef5190db248e0d585ea825954cb131d0 new file mode 100644 index 00000000..d3640e6b --- /dev/null +++ b/.pnpm-store/v11/files/15/f5e48798db291adafff9e804ff0951a5670262bf12e2b243505e9dd64ade246d6d8c01669fe9b709e018b1444ebf2aef5190db248e0d585ea825954cb131d0 @@ -0,0 +1,43 @@ +{ + "name" : "concat-map", + "description" : "concatenative mapdashery", + "version" : "0.0.1", + "repository" : { + "type" : "git", + "url" : "git://github.com/substack/node-concat-map.git" + }, + "main" : "index.js", + "keywords" : [ + "concat", + "concatMap", + "map", + "functional", + "higher-order" + ], + "directories" : { + "example" : "example", + "test" : "test" + }, + "scripts" : { + "test" : "tape test/*.js" + }, + "devDependencies" : { + "tape" : "~2.4.0" + }, + "license" : "MIT", + "author" : { + "name" : "James Halliday", + "email" : "mail@substack.net", + "url" : "http://substack.net" + }, + "testling" : { + "files" : "test/*.js", + "browsers" : { + "ie" : [ 6, 7, 8, 9 ], + "ff" : [ 3.5, 10, 15.0 ], + "chrome" : [ 10, 22 ], + "safari" : [ 5.1 ], + "opera" : [ 12 ] + } + } +} diff --git a/.pnpm-store/v11/files/16/08fdf21160978e2a62619cfc64e7199393e1249464702c7c2653063f8832303ede12cae184a878b6769a8d82ddc9c1981cac2d53a67681ed6e8ab61ad01370 b/.pnpm-store/v11/files/16/08fdf21160978e2a62619cfc64e7199393e1249464702c7c2653063f8832303ede12cae184a878b6769a8d82ddc9c1981cac2d53a67681ed6e8ab61ad01370 new file mode 100644 index 00000000..2fe341b7 --- /dev/null +++ b/.pnpm-store/v11/files/16/08fdf21160978e2a62619cfc64e7199393e1249464702c7c2653063f8832303ede12cae184a878b6769a8d82ddc9c1981cac2d53a67681ed6e8ab61ad01370 @@ -0,0 +1,48 @@ +{ + "name": "to-object-path", + "description": "Create an object path from a list or array of strings.", + "version": "0.3.0", + "homepage": "https://github.com/jonschlinkert/to-object-path", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/to-object-path", + "bugs": { + "url": "https://github.com/jonschlinkert/to-object-path/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "kind-of": "^3.0.2" + }, + "devDependencies": { + "base": "^0.6.7", + "mocha": "*" + }, + "keywords": [ + "dot", + "nested", + "notation", + "object", + "path", + "stringify" + ], + "verb": { + "related": { + "list": [ + "get-value", + "set-value", + "has-value", + "omit-value", + "unset-value" + ] + } + } +} diff --git a/.pnpm-store/v11/files/16/1c8092861598c299c3ac4f5e14f604525e878ec595aa57d55d131996c813f6d36cb04018bbdb2fa53baa635bd84c6702abfd15581c772ba1378d7a2722caa3 b/.pnpm-store/v11/files/16/1c8092861598c299c3ac4f5e14f604525e878ec595aa57d55d131996c813f6d36cb04018bbdb2fa53baa635bd84c6702abfd15581c772ba1378d7a2722caa3 new file mode 100644 index 00000000..4fdaf1d3 --- /dev/null +++ b/.pnpm-store/v11/files/16/1c8092861598c299c3ac4f5e14f604525e878ec595aa57d55d131996c813f6d36cb04018bbdb2fa53baa635bd84c6702abfd15581c772ba1378d7a2722caa3 @@ -0,0 +1,10 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('whitespace should be whitespace', function (t) { + t.plan(1); + var x = parse(['-x', '\t']).x; + t.equal(x, '\t'); +}); diff --git a/.pnpm-store/v11/files/16/20662c9d358f3fd0845bd0abce4a4be501b2394ad91355ed7a71da32eadacd2f11634549484aff1008a1e7fd849e17030eb9d15aeb831c83a32976954acc59 b/.pnpm-store/v11/files/16/20662c9d358f3fd0845bd0abce4a4be501b2394ad91355ed7a71da32eadacd2f11634549484aff1008a1e7fd849e17030eb9d15aeb831c83a32976954acc59 new file mode 100644 index 00000000..d6c0be6d --- /dev/null +++ b/.pnpm-store/v11/files/16/20662c9d358f3fd0845bd0abce4a4be501b2394ad91355ed7a71da32eadacd2f11634549484aff1008a1e7fd849e17030eb9d15aeb831c83a32976954acc59 @@ -0,0 +1,3607 @@ +/*! + * chai + * http://chaijs.com + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +module.exports = function (chai, _) { + var Assertion = chai.Assertion + , AssertionError = chai.AssertionError + , flag = _.flag; + + /** + * ### Language Chains + * + * The following are provided as chainable getters to improve the readability + * of your assertions. + * + * **Chains** + * + * - to + * - be + * - been + * - is + * - that + * - which + * - and + * - has + * - have + * - with + * - at + * - of + * - same + * - but + * - does + * + * @name language chains + * @namespace BDD + * @api public + */ + + [ 'to', 'be', 'been' + , 'is', 'and', 'has', 'have' + , 'with', 'that', 'which', 'at' + , 'of', 'same', 'but', 'does' ].forEach(function (chain) { + Assertion.addProperty(chain); + }); + + /** + * ### .not + * + * Negates all assertions that follow in the chain. + * + * expect(function () {}).to.not.throw(); + * expect({a: 1}).to.not.have.property('b'); + * expect([1, 2]).to.be.an('array').that.does.not.include(3); + * + * Just because you can negate any assertion with `.not` doesn't mean you + * should. With great power comes great responsibility. It's often best to + * assert that the one expected output was produced, rather than asserting + * that one of countless unexpected outputs wasn't produced. See individual + * assertions for specific guidance. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.not.equal(1); // Not recommended + * + * @name not + * @namespace BDD + * @api public + */ + + Assertion.addProperty('not', function () { + flag(this, 'negate', true); + }); + + /** + * ### .deep + * + * Causes all `.equal`, `.include`, `.members`, `.keys`, and `.property` + * assertions that follow in the chain to use deep equality instead of strict + * (`===`) equality. See the `deep-eql` project page for info on the deep + * equality algorithm: https://github.com/chaijs/deep-eql. + * + * // Target object deeply (but not strictly) equals `{a: 1}` + * expect({a: 1}).to.deep.equal({a: 1}); + * expect({a: 1}).to.not.equal({a: 1}); + * + * // Target array deeply (but not strictly) includes `{a: 1}` + * expect([{a: 1}]).to.deep.include({a: 1}); + * expect([{a: 1}]).to.not.include({a: 1}); + * + * // Target object deeply (but not strictly) includes `x: {a: 1}` + * expect({x: {a: 1}}).to.deep.include({x: {a: 1}}); + * expect({x: {a: 1}}).to.not.include({x: {a: 1}}); + * + * // Target array deeply (but not strictly) has member `{a: 1}` + * expect([{a: 1}]).to.have.deep.members([{a: 1}]); + * expect([{a: 1}]).to.not.have.members([{a: 1}]); + * + * // Target set deeply (but not strictly) has key `{a: 1}` + * expect(new Set([{a: 1}])).to.have.deep.keys([{a: 1}]); + * expect(new Set([{a: 1}])).to.not.have.keys([{a: 1}]); + * + * // Target object deeply (but not strictly) has property `x: {a: 1}` + * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1}); + * expect({x: {a: 1}}).to.not.have.property('x', {a: 1}); + * + * @name deep + * @namespace BDD + * @api public + */ + + Assertion.addProperty('deep', function () { + flag(this, 'deep', true); + }); + + /** + * ### .nested + * + * Enables dot- and bracket-notation in all `.property` and `.include` + * assertions that follow in the chain. + * + * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]'); + * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'}); + * + * If `.` or `[]` are part of an actual property name, they can be escaped by + * adding two backslashes before them. + * + * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\.a.\\[b\\]'); + * expect({'.a': {'[b]': 'x'}}).to.nested.include({'\\.a.\\[b\\]': 'x'}); + * + * `.nested` cannot be combined with `.own`. + * + * @name nested + * @namespace BDD + * @api public + */ + + Assertion.addProperty('nested', function () { + flag(this, 'nested', true); + }); + + /** + * ### .own + * + * Causes all `.property` and `.include` assertions that follow in the chain + * to ignore inherited properties. + * + * Object.prototype.b = 2; + * + * expect({a: 1}).to.have.own.property('a'); + * expect({a: 1}).to.have.property('b').but.not.own.property('b'); + * + * expect({a: 1}).to.own.include({a: 1}); + * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2}); + * + * `.own` cannot be combined with `.nested`. + * + * @name own + * @namespace BDD + * @api public + */ + + Assertion.addProperty('own', function () { + flag(this, 'own', true); + }); + + /** + * ### .ordered + * + * Causes all `.members` assertions that follow in the chain to require that + * members be in the same order. + * + * expect([1, 2]).to.have.ordered.members([1, 2]) + * .but.not.have.ordered.members([2, 1]); + * + * When `.include` and `.ordered` are combined, the ordering begins at the + * start of both arrays. + * + * expect([1, 2, 3]).to.include.ordered.members([1, 2]) + * .but.not.include.ordered.members([2, 3]); + * + * @name ordered + * @namespace BDD + * @api public + */ + + Assertion.addProperty('ordered', function () { + flag(this, 'ordered', true); + }); + + /** + * ### .any + * + * Causes all `.keys` assertions that follow in the chain to only require that + * the target have at least one of the given keys. This is the opposite of + * `.all`, which requires that the target have all of the given keys. + * + * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd'); + * + * See the `.keys` doc for guidance on when to use `.any` or `.all`. + * + * @name any + * @namespace BDD + * @api public + */ + + Assertion.addProperty('any', function () { + flag(this, 'any', true); + flag(this, 'all', false); + }); + + + /** + * ### .all + * + * Causes all `.keys` assertions that follow in the chain to require that the + * target have all of the given keys. This is the opposite of `.any`, which + * only requires that the target have at least one of the given keys. + * + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); + * + * Note that `.all` is used by default when neither `.all` nor `.any` are + * added earlier in the chain. However, it's often best to add `.all` anyway + * because it improves readability. + * + * See the `.keys` doc for guidance on when to use `.any` or `.all`. + * + * @name all + * @namespace BDD + * @api public + */ + + Assertion.addProperty('all', function () { + flag(this, 'all', true); + flag(this, 'any', false); + }); + + /** + * ### .a(type[, msg]) + * + * Asserts that the target's type is equal to the given string `type`. Types + * are case insensitive. See the `type-detect` project page for info on the + * type detection algorithm: https://github.com/chaijs/type-detect. + * + * expect('foo').to.be.a('string'); + * expect({a: 1}).to.be.an('object'); + * expect(null).to.be.a('null'); + * expect(undefined).to.be.an('undefined'); + * expect(new Error).to.be.an('error'); + * expect(Promise.resolve()).to.be.a('promise'); + * expect(new Float32Array).to.be.a('float32array'); + * expect(Symbol()).to.be.a('symbol'); + * + * `.a` supports objects that have a custom type set via `Symbol.toStringTag`. + * + * var myObj = { + * [Symbol.toStringTag]: 'myCustomType' + * }; + * + * expect(myObj).to.be.a('myCustomType').but.not.an('object'); + * + * It's often best to use `.a` to check a target's type before making more + * assertions on the same target. That way, you avoid unexpected behavior from + * any assertion that does different things based on the target's type. + * + * expect([1, 2, 3]).to.be.an('array').that.includes(2); + * expect([]).to.be.an('array').that.is.empty; + * + * Add `.not` earlier in the chain to negate `.a`. However, it's often best to + * assert that the target is the expected type, rather than asserting that it + * isn't one of many unexpected types. + * + * expect('foo').to.be.a('string'); // Recommended + * expect('foo').to.not.be.an('array'); // Not recommended + * + * `.a` accepts an optional `msg` argument which is a custom error message to + * show when the assertion fails. The message can also be given as the second + * argument to `expect`. + * + * expect(1).to.be.a('string', 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.a('string'); + * + * `.a` can also be used as a language chain to improve the readability of + * your assertions. + * + * expect({b: 2}).to.have.a.property('b'); + * + * The alias `.an` can be used interchangeably with `.a`. + * + * @name a + * @alias an + * @param {String} type + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function an (type, msg) { + if (msg) flag(this, 'message', msg); + type = type.toLowerCase(); + var obj = flag(this, 'object') + , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a '; + + this.assert( + type === _.type(obj).toLowerCase() + , 'expected #{this} to be ' + article + type + , 'expected #{this} not to be ' + article + type + ); + } + + Assertion.addChainableMethod('an', an); + Assertion.addChainableMethod('a', an); + + /** + * ### .include(val[, msg]) + * + * When the target is a string, `.include` asserts that the given string `val` + * is a substring of the target. + * + * expect('foobar').to.include('foo'); + * + * When the target is an array, `.include` asserts that the given `val` is a + * member of the target. + * + * expect([1, 2, 3]).to.include(2); + * + * When the target is an object, `.include` asserts that the given object + * `val`'s properties are a subset of the target's properties. + * + * expect({a: 1, b: 2, c: 3}).to.include({a: 1, b: 2}); + * + * Because `.include` does different things based on the target's type, it's + * important to check the target's type before using `.include`. See the `.a` + * doc for info on testing a target's type. + * + * expect([1, 2, 3]).to.be.an('array').that.includes(2); + * + * By default, strict (`===`) equality is used to compare array members and + * object properties. Add `.deep` earlier in the chain to use deep equality + * instead. See the `deep-eql` project page for info on the deep equality + * algorithm: https://github.com/chaijs/deep-eql. + * + * // Target array deeply (but not strictly) includes `{a: 1}` + * expect([{a: 1}]).to.deep.include({a: 1}); + * expect([{a: 1}]).to.not.include({a: 1}); + * + * // Target object deeply (but not strictly) includes `x: {a: 1}` + * expect({x: {a: 1}}).to.deep.include({x: {a: 1}}); + * expect({x: {a: 1}}).to.not.include({x: {a: 1}}); + * + * By default, all of the target's properties are searched when working with + * objects. This includes properties that are inherited and/or non-enumerable. + * Add `.own` earlier in the chain to exclude the target's inherited + * properties from the search. + * + * Object.prototype.b = 2; + * + * expect({a: 1}).to.own.include({a: 1}); + * expect({a: 1}).to.include({b: 2}).but.not.own.include({b: 2}); + * + * Note that a target object is always only searched for `val`'s own + * enumerable properties. + * + * `.deep` and `.own` can be combined. + * + * expect({a: {b: 2}}).to.deep.own.include({a: {b: 2}}); + * + * Add `.nested` earlier in the chain to enable dot- and bracket-notation when + * referencing nested properties. + * + * expect({a: {b: ['x', 'y']}}).to.nested.include({'a.b[1]': 'y'}); + * + * If `.` or `[]` are part of an actual property name, they can be escaped by + * adding two backslashes before them. + * + * expect({'.a': {'[b]': 2}}).to.nested.include({'\\.a.\\[b\\]': 2}); + * + * `.deep` and `.nested` can be combined. + * + * expect({a: {b: [{c: 3}]}}).to.deep.nested.include({'a.b[0]': {c: 3}}); + * + * `.own` and `.nested` cannot be combined. + * + * Add `.not` earlier in the chain to negate `.include`. + * + * expect('foobar').to.not.include('taco'); + * expect([1, 2, 3]).to.not.include(4); + * + * However, it's dangerous to negate `.include` when the target is an object. + * The problem is that it creates uncertain expectations by asserting that the + * target object doesn't have all of `val`'s key/value pairs but may or may + * not have some of them. It's often best to identify the exact output that's + * expected, and then write an assertion that only accepts that exact output. + * + * When the target object isn't even expected to have `val`'s keys, it's + * often best to assert exactly that. + * + * expect({c: 3}).to.not.have.any.keys('a', 'b'); // Recommended + * expect({c: 3}).to.not.include({a: 1, b: 2}); // Not recommended + * + * When the target object is expected to have `val`'s keys, it's often best to + * assert that each of the properties has its expected value, rather than + * asserting that each property doesn't have one of many unexpected values. + * + * expect({a: 3, b: 4}).to.include({a: 3, b: 4}); // Recommended + * expect({a: 3, b: 4}).to.not.include({a: 1, b: 2}); // Not recommended + * + * `.include` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect([1, 2, 3]).to.include(4, 'nooo why fail??'); + * expect([1, 2, 3], 'nooo why fail??').to.include(4); + * + * `.include` can also be used as a language chain, causing all `.members` and + * `.keys` assertions that follow in the chain to require the target to be a + * superset of the expected set, rather than an identical set. Note that + * `.members` ignores duplicates in the subset when `.include` is added. + * + * // Target object's keys are a superset of ['a', 'b'] but not identical + * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b'); + * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b'); + * + * // Target array is a superset of [1, 2] but not identical + * expect([1, 2, 3]).to.include.members([1, 2]); + * expect([1, 2, 3]).to.not.have.members([1, 2]); + * + * // Duplicates in the subset are ignored + * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]); + * + * Note that adding `.any` earlier in the chain causes the `.keys` assertion + * to ignore `.include`. + * + * // Both assertions are identical + * expect({a: 1}).to.include.any.keys('a', 'b'); + * expect({a: 1}).to.have.any.keys('a', 'b'); + * + * The aliases `.includes`, `.contain`, and `.contains` can be used + * interchangeably with `.include`. + * + * @name include + * @alias contain + * @alias includes + * @alias contains + * @param {Mixed} val + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function includeChainingBehavior () { + flag(this, 'contains', true); + } + + function isDeepIncluded (arr, val) { + return arr.some(function (arrVal) { + return _.eql(arrVal, val); + }); + } + + function include (val, msg) { + if (msg) flag(this, 'message', msg); + + _.expectTypes(this, ['array', 'object', 'string'], flag(this, 'ssfi')); + + var obj = flag(this, 'object') + , objType = _.type(obj).toLowerCase() + , isDeep = flag(this, 'deep') + , descriptor = isDeep ? 'deep ' : ''; + + // This block is for asserting a subset of properties in an object. + if (objType === 'object') { + var props = Object.keys(val) + , negate = flag(this, 'negate') + , firstErr = null + , numErrs = 0; + + props.forEach(function (prop) { + var propAssertion = new Assertion(obj); + _.transferFlags(this, propAssertion, true); + flag(propAssertion, 'lockSsfi', true); + + if (!negate || props.length === 1) { + propAssertion.property(prop, val[prop]); + return; + } + + try { + propAssertion.property(prop, val[prop]); + } catch (err) { + if (!_.checkError.compatibleConstructor(err, AssertionError)) throw err; + if (firstErr === null) firstErr = err; + numErrs++; + } + }, this); + + // When validating .not.include with multiple properties, we only want + // to throw an assertion error if all of the properties are included, + // in which case we throw the first property assertion error that we + // encountered. + if (negate && props.length > 1 && numErrs === props.length) throw firstErr; + + return; + } + + // Assert inclusion in an array or substring in a string. + this.assert( + objType === 'string' || !isDeep ? ~obj.indexOf(val) + : isDeepIncluded(obj, val) + , 'expected #{this} to ' + descriptor + 'include ' + _.inspect(val) + , 'expected #{this} to not ' + descriptor + 'include ' + _.inspect(val)); + } + + Assertion.addChainableMethod('include', include, includeChainingBehavior); + Assertion.addChainableMethod('contain', include, includeChainingBehavior); + Assertion.addChainableMethod('contains', include, includeChainingBehavior); + Assertion.addChainableMethod('includes', include, includeChainingBehavior); + + /** + * ### .ok + * + * Asserts that the target is loosely (`==`) equal to `true`. However, it's + * often best to assert that the target is strictly (`===`) or deeply equal to + * its expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.ok; // Not recommended + * + * expect(true).to.be.true; // Recommended + * expect(true).to.be.ok; // Not recommended + * + * Add `.not` earlier in the chain to negate `.ok`. + * + * expect(0).to.equal(0); // Recommended + * expect(0).to.not.be.ok; // Not recommended + * + * expect(false).to.be.false; // Recommended + * expect(false).to.not.be.ok; // Not recommended + * + * expect(null).to.be.null; // Recommended + * expect(null).to.not.be.ok; // Not recommended + * + * expect(undefined).to.be.undefined; // Recommended + * expect(undefined).to.not.be.ok; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(false, 'nooo why fail??').to.be.ok; + * + * @name ok + * @namespace BDD + * @api public + */ + + Assertion.addProperty('ok', function () { + this.assert( + flag(this, 'object') + , 'expected #{this} to be truthy' + , 'expected #{this} to be falsy'); + }); + + /** + * ### .true + * + * Asserts that the target is strictly (`===`) equal to `true`. + * + * expect(true).to.be.true; + * + * Add `.not` earlier in the chain to negate `.true`. However, it's often best + * to assert that the target is equal to its expected value, rather than not + * equal to `true`. + * + * expect(false).to.be.false; // Recommended + * expect(false).to.not.be.true; // Not recommended + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.true; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(false, 'nooo why fail??').to.be.true; + * + * @name true + * @namespace BDD + * @api public + */ + + Assertion.addProperty('true', function () { + this.assert( + true === flag(this, 'object') + , 'expected #{this} to be true' + , 'expected #{this} to be false' + , flag(this, 'negate') ? false : true + ); + }); + + /** + * ### .false + * + * Asserts that the target is strictly (`===`) equal to `false`. + * + * expect(false).to.be.false; + * + * Add `.not` earlier in the chain to negate `.false`. However, it's often + * best to assert that the target is equal to its expected value, rather than + * not equal to `false`. + * + * expect(true).to.be.true; // Recommended + * expect(true).to.not.be.false; // Not recommended + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.false; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(true, 'nooo why fail??').to.be.false; + * + * @name false + * @namespace BDD + * @api public + */ + + Assertion.addProperty('false', function () { + this.assert( + false === flag(this, 'object') + , 'expected #{this} to be false' + , 'expected #{this} to be true' + , flag(this, 'negate') ? true : false + ); + }); + + /** + * ### .null + * + * Asserts that the target is strictly (`===`) equal to `null`. + * + * expect(null).to.be.null; + * + * Add `.not` earlier in the chain to negate `.null`. However, it's often best + * to assert that the target is equal to its expected value, rather than not + * equal to `null`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.null; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(42, 'nooo why fail??').to.be.null; + * + * @name null + * @namespace BDD + * @api public + */ + + Assertion.addProperty('null', function () { + this.assert( + null === flag(this, 'object') + , 'expected #{this} to be null' + , 'expected #{this} not to be null' + ); + }); + + /** + * ### .undefined + * + * Asserts that the target is strictly (`===`) equal to `undefined`. + * + * expect(undefined).to.be.undefined; + * + * Add `.not` earlier in the chain to negate `.undefined`. However, it's often + * best to assert that the target is equal to its expected value, rather than + * not equal to `undefined`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.undefined; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(42, 'nooo why fail??').to.be.undefined; + * + * @name undefined + * @namespace BDD + * @api public + */ + + Assertion.addProperty('undefined', function () { + this.assert( + undefined === flag(this, 'object') + , 'expected #{this} to be undefined' + , 'expected #{this} not to be undefined' + ); + }); + + /** + * ### .NaN + * + * Asserts that the target is exactly `NaN`. + * + * expect(NaN).to.be.NaN; + * + * Add `.not` earlier in the chain to negate `.NaN`. However, it's often best + * to assert that the target is equal to its expected value, rather than not + * equal to `NaN`. + * + * expect('foo').to.equal('foo'); // Recommended + * expect('foo').to.not.be.NaN; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(42, 'nooo why fail??').to.be.NaN; + * + * @name NaN + * @namespace BDD + * @api public + */ + + Assertion.addProperty('NaN', function () { + this.assert( + _.isNaN(flag(this, 'object')) + , 'expected #{this} to be NaN' + , 'expected #{this} not to be NaN' + ); + }); + + /** + * ### .exist + * + * Asserts that the target is not strictly (`===`) equal to either `null` or + * `undefined`. However, it's often best to assert that the target is equal to + * its expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.exist; // Not recommended + * + * expect(0).to.equal(0); // Recommended + * expect(0).to.exist; // Not recommended + * + * Add `.not` earlier in the chain to negate `.exist`. + * + * expect(null).to.be.null; // Recommended + * expect(null).to.not.exist; // Not recommended + * + * expect(undefined).to.be.undefined; // Recommended + * expect(undefined).to.not.exist; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(null, 'nooo why fail??').to.exist; + * + * @name exist + * @namespace BDD + * @api public + */ + + Assertion.addProperty('exist', function () { + var val = flag(this, 'object'); + this.assert( + val !== null && val !== undefined + , 'expected #{this} to exist' + , 'expected #{this} to not exist' + ); + }); + + /** + * ### .empty + * + * When the target is a string or array, `.empty` asserts that the target's + * `length` property is strictly (`===`) equal to `0`. + * + * expect([]).to.be.empty; + * expect('').to.be.empty; + * + * When the target is a map or set, `.empty` asserts that the target's `size` + * property is strictly equal to `0`. + * + * expect(new Set()).to.be.empty; + * expect(new Map()).to.be.empty; + * + * When the target is a non-function object, `.empty` asserts that the target + * doesn't have any own enumerable properties. Properties with Symbol-based + * keys are excluded from the count. + * + * expect({}).to.be.empty; + * + * Because `.empty` does different things based on the target's type, it's + * important to check the target's type before using `.empty`. See the `.a` + * doc for info on testing a target's type. + * + * expect([]).to.be.an('array').that.is.empty; + * + * Add `.not` earlier in the chain to negate `.empty`. However, it's often + * best to assert that the target contains its expected number of values, + * rather than asserting that it's not empty. + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.not.be.empty; // Not recommended + * + * expect(new Set([1, 2, 3])).to.have.property('size', 3); // Recommended + * expect(new Set([1, 2, 3])).to.not.be.empty; // Not recommended + * + * expect(Object.keys({a: 1})).to.have.lengthOf(1); // Recommended + * expect({a: 1}).to.not.be.empty; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect([1, 2, 3], 'nooo why fail??').to.be.empty; + * + * @name empty + * @namespace BDD + * @api public + */ + + Assertion.addProperty('empty', function () { + var val = flag(this, 'object') + , ssfi = flag(this, 'ssfi') + , flagMsg = flag(this, 'message') + , itemsCount; + + flagMsg = flagMsg ? flagMsg + ': ' : ''; + + switch (_.type(val).toLowerCase()) { + case 'array': + case 'string': + itemsCount = val.length; + break; + case 'map': + case 'set': + itemsCount = val.size; + break; + case 'weakmap': + case 'weakset': + throw new AssertionError( + flagMsg + '.empty was passed a weak collection', + undefined, + ssfi + ); + case 'function': + var msg = flagMsg + '.empty was passed a function ' + _.getName(val); + throw new AssertionError(msg.trim(), undefined, ssfi); + default: + if (val !== Object(val)) { + throw new AssertionError( + flagMsg + '.empty was passed non-string primitive ' + _.inspect(val), + undefined, + ssfi + ); + } + itemsCount = Object.keys(val).length; + } + + this.assert( + 0 === itemsCount + , 'expected #{this} to be empty' + , 'expected #{this} not to be empty' + ); + }); + + /** + * ### .arguments + * + * Asserts that the target is an `arguments` object. + * + * function test () { + * expect(arguments).to.be.arguments; + * } + * + * test(); + * + * Add `.not` earlier in the chain to negate `.arguments`. However, it's often + * best to assert which type the target is expected to be, rather than + * asserting that its not an `arguments` object. + * + * expect('foo').to.be.a('string'); // Recommended + * expect('foo').to.not.be.arguments; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({}, 'nooo why fail??').to.be.arguments; + * + * The alias `.Arguments` can be used interchangeably with `.arguments`. + * + * @name arguments + * @alias Arguments + * @namespace BDD + * @api public + */ + + function checkArguments () { + var obj = flag(this, 'object') + , type = _.type(obj); + this.assert( + 'Arguments' === type + , 'expected #{this} to be arguments but got ' + type + , 'expected #{this} to not be arguments' + ); + } + + Assertion.addProperty('arguments', checkArguments); + Assertion.addProperty('Arguments', checkArguments); + + /** + * ### .equal(val[, msg]) + * + * Asserts that the target is strictly (`===`) equal to the given `val`. + * + * expect(1).to.equal(1); + * expect('foo').to.equal('foo'); + * + * Add `.deep` earlier in the chain to use deep equality instead. See the + * `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target object deeply (but not strictly) equals `{a: 1}` + * expect({a: 1}).to.deep.equal({a: 1}); + * expect({a: 1}).to.not.equal({a: 1}); + * + * // Target array deeply (but not strictly) equals `[1, 2]` + * expect([1, 2]).to.deep.equal([1, 2]); + * expect([1, 2]).to.not.equal([1, 2]); + * + * Add `.not` earlier in the chain to negate `.equal`. However, it's often + * best to assert that the target is equal to its expected value, rather than + * not equal to one of countless unexpected values. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.equal(2); // Not recommended + * + * `.equal` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.equal(2, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.equal(2); + * + * The aliases `.equals` and `eq` can be used interchangeably with `.equal`. + * + * @name equal + * @alias equals + * @alias eq + * @param {Mixed} val + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertEqual (val, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + if (flag(this, 'deep')) { + return this.eql(val); + } else { + this.assert( + val === obj + , 'expected #{this} to equal #{exp}' + , 'expected #{this} to not equal #{exp}' + , val + , this._obj + , true + ); + } + } + + Assertion.addMethod('equal', assertEqual); + Assertion.addMethod('equals', assertEqual); + Assertion.addMethod('eq', assertEqual); + + /** + * ### .eql(obj[, msg]) + * + * Asserts that the target is deeply equal to the given `obj`. See the + * `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target object is deeply (but not strictly) equal to {a: 1} + * expect({a: 1}).to.eql({a: 1}).but.not.equal({a: 1}); + * + * // Target array is deeply (but not strictly) equal to [1, 2] + * expect([1, 2]).to.eql([1, 2]).but.not.equal([1, 2]); + * + * Add `.not` earlier in the chain to negate `.eql`. However, it's often best + * to assert that the target is deeply equal to its expected value, rather + * than not deeply equal to one of countless unexpected values. + * + * expect({a: 1}).to.eql({a: 1}); // Recommended + * expect({a: 1}).to.not.eql({b: 2}); // Not recommended + * + * `.eql` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect({a: 1}).to.eql({b: 2}, 'nooo why fail??'); + * expect({a: 1}, 'nooo why fail??').to.eql({b: 2}); + * + * The alias `.eqls` can be used interchangeably with `.eql`. + * + * The `.deep.equal` assertion is almost identical to `.eql` but with one + * difference: `.deep.equal` causes deep equality comparisons to also be used + * for any other assertions that follow in the chain. + * + * @name eql + * @alias eqls + * @param {Mixed} obj + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertEql(obj, msg) { + if (msg) flag(this, 'message', msg); + this.assert( + _.eql(obj, flag(this, 'object')) + , 'expected #{this} to deeply equal #{exp}' + , 'expected #{this} to not deeply equal #{exp}' + , obj + , this._obj + , true + ); + } + + Assertion.addMethod('eql', assertEql); + Assertion.addMethod('eqls', assertEql); + + /** + * ### .above(n[, msg]) + * + * Asserts that the target is a number greater than the given number `n`. + * However, it's often best to assert that the target is equal to its expected + * value. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.be.above(1); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is greater than the given number `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.above(2); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.above(2); // Not recommended + * + * Add `.not` earlier in the chain to negate `.above`. + * + * expect(2).to.equal(2); // Recommended + * expect(1).to.not.be.above(2); // Not recommended + * + * `.above` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.be.above(2, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.above(2); + * + * The aliases `.gt` and `.greaterThan` can be used interchangeably with + * `.above`. + * + * @name above + * @alias gt + * @alias greaterThan + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertAbove (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to above must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len > n + , 'expected #{this} to have a length above #{exp} but got #{act}' + , 'expected #{this} to not have a length above #{exp}' + , n + , len + ); + } else { + this.assert( + obj > n + , 'expected #{this} to be above ' + n + , 'expected #{this} to be at most ' + n + ); + } + } + + Assertion.addMethod('above', assertAbove); + Assertion.addMethod('gt', assertAbove); + Assertion.addMethod('greaterThan', assertAbove); + + /** + * ### .least(n[, msg]) + * + * Asserts that the target is a number greater than or equal to the given + * number `n`. However, it's often best to assert that the target is equal to + * its expected value. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.be.at.least(1); // Not recommended + * expect(2).to.be.at.least(2); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is greater than or equal to the given number + * `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.at.least(2); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.at.least(2); // Not recommended + * + * Add `.not` earlier in the chain to negate `.least`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.at.least(2); // Not recommended + * + * `.least` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.be.at.least(2, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.at.least(2); + * + * The alias `.gte` can be used interchangeably with `.least`. + * + * @name least + * @alias gte + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertLeast (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to least must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len >= n + , 'expected #{this} to have a length at least #{exp} but got #{act}' + , 'expected #{this} to have a length below #{exp}' + , n + , len + ); + } else { + this.assert( + obj >= n + , 'expected #{this} to be at least ' + n + , 'expected #{this} to be below ' + n + ); + } + } + + Assertion.addMethod('least', assertLeast); + Assertion.addMethod('gte', assertLeast); + + /** + * ### .below(n[, msg]) + * + * Asserts that the target is a number less than the given number `n`. + * However, it's often best to assert that the target is equal to its expected + * value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.below(2); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is less than the given number `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.below(4); // Not recommended + * + * expect([1, 2, 3]).to.have.length(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.below(4); // Not recommended + * + * Add `.not` earlier in the chain to negate `.below`. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.not.be.below(1); // Not recommended + * + * `.below` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(2).to.be.below(1, 'nooo why fail??'); + * expect(2, 'nooo why fail??').to.be.below(1); + * + * The aliases `.lt` and `.lessThan` can be used interchangeably with + * `.below`. + * + * @name below + * @alias lt + * @alias lessThan + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertBelow (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to below must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len < n + , 'expected #{this} to have a length below #{exp} but got #{act}' + , 'expected #{this} to not have a length below #{exp}' + , n + , len + ); + } else { + this.assert( + obj < n + , 'expected #{this} to be below ' + n + , 'expected #{this} to be at least ' + n + ); + } + } + + Assertion.addMethod('below', assertBelow); + Assertion.addMethod('lt', assertBelow); + Assertion.addMethod('lessThan', assertBelow); + + /** + * ### .most(n[, msg]) + * + * Asserts that the target is a number less than or equal to the given number + * `n`. However, it's often best to assert that the target is equal to its + * expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.at.most(2); // Not recommended + * expect(1).to.be.at.most(1); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is less than or equal to the given number `n`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.at.most(4); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.at.most(4); // Not recommended + * + * Add `.not` earlier in the chain to negate `.most`. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.not.be.at.most(1); // Not recommended + * + * `.most` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(2).to.be.at.most(1, 'nooo why fail??'); + * expect(2, 'nooo why fail??').to.be.at.most(1); + * + * The alias `.lte` can be used interchangeably with `.most`. + * + * @name most + * @alias lte + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertMost (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof n !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the argument to most must be a number', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len <= n + , 'expected #{this} to have a length at most #{exp} but got #{act}' + , 'expected #{this} to have a length above #{exp}' + , n + , len + ); + } else { + this.assert( + obj <= n + , 'expected #{this} to be at most ' + n + , 'expected #{this} to be above ' + n + ); + } + } + + Assertion.addMethod('most', assertMost); + Assertion.addMethod('lte', assertMost); + + /** + * ### .within(start, finish[, msg]) + * + * Asserts that the target is a number greater than or equal to the given + * number `start`, and less than or equal to the given number `finish`. + * However, it's often best to assert that the target is equal to its expected + * value. + * + * expect(2).to.equal(2); // Recommended + * expect(2).to.be.within(1, 3); // Not recommended + * expect(2).to.be.within(2, 3); // Not recommended + * expect(2).to.be.within(1, 2); // Not recommended + * + * Add `.lengthOf` earlier in the chain to assert that the value of the + * target's `length` property is greater than or equal to the given number + * `start`, and less than or equal to the given number `finish`. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.have.lengthOf.within(2, 4); // Not recommended + * + * expect([1, 2, 3]).to.have.lengthOf(3); // Recommended + * expect([1, 2, 3]).to.have.lengthOf.within(2, 4); // Not recommended + * + * Add `.not` earlier in the chain to negate `.within`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.within(2, 4); // Not recommended + * + * `.within` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(4).to.be.within(1, 3, 'nooo why fail??'); + * expect(4, 'nooo why fail??').to.be.within(1, 3); + * + * @name within + * @param {Number} start lower bound inclusive + * @param {Number} finish upper bound inclusive + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + Assertion.addMethod('within', function (start, finish, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , range = start + '..' + finish + , doLength = flag(this, 'doLength') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (doLength) { + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + } else { + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + } + + if (typeof start !== 'number' || typeof finish !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the arguments to within must be numbers', + undefined, + ssfi + ); + } + + if (doLength) { + var len = obj.length; + this.assert( + len >= start && len <= finish + , 'expected #{this} to have a length within ' + range + , 'expected #{this} to not have a length within ' + range + ); + } else { + this.assert( + obj >= start && obj <= finish + , 'expected #{this} to be within ' + range + , 'expected #{this} to not be within ' + range + ); + } + }); + + /** + * ### .instanceof(constructor[, msg]) + * + * Asserts that the target is an instance of the given `constructor`. + * + * function Cat () { } + * + * expect(new Cat()).to.be.an.instanceof(Cat); + * expect([1, 2]).to.be.an.instanceof(Array); + * + * Add `.not` earlier in the chain to negate `.instanceof`. + * + * expect({a: 1}).to.not.be.an.instanceof(Array); + * + * `.instanceof` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(1).to.be.an.instanceof(Array, 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.an.instanceof(Array); + * + * Due to limitations in ES5, `.instanceof` may not always work as expected + * when using a transpiler such as Babel or TypeScript. In particular, it may + * produce unexpected results when subclassing built-in object such as + * `Array`, `Error`, and `Map`. See your transpiler's docs for details: + * + * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes)) + * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work)) + * + * The alias `.instanceOf` can be used interchangeably with `.instanceof`. + * + * @name instanceof + * @param {Constructor} constructor + * @param {String} msg _optional_ + * @alias instanceOf + * @namespace BDD + * @api public + */ + + function assertInstanceOf (constructor, msg) { + if (msg) flag(this, 'message', msg); + + var target = flag(this, 'object') + var ssfi = flag(this, 'ssfi'); + var flagMsg = flag(this, 'message'); + var validInstanceOfTarget = constructor === Object(constructor) && ( + typeof constructor === 'function' || + (typeof Symbol !== 'undefined' && + typeof Symbol.hasInstance !== 'undefined' && + Symbol.hasInstance in constructor) + ); + + if (!validInstanceOfTarget) { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + var constructorType = constructor === null ? 'null' : typeof constructor; + throw new AssertionError( + flagMsg + 'The instanceof assertion needs a constructor but ' + constructorType + ' was given.', + undefined, + ssfi + ); + } + + var isInstanceOf = target instanceof constructor + + var name = _.getName(constructor); + if (name === null) { + name = 'an unnamed constructor'; + } + + this.assert( + isInstanceOf + , 'expected #{this} to be an instance of ' + name + , 'expected #{this} to not be an instance of ' + name + ); + }; + + Assertion.addMethod('instanceof', assertInstanceOf); + Assertion.addMethod('instanceOf', assertInstanceOf); + + /** + * ### .property(name[, val[, msg]]) + * + * Asserts that the target has a property with the given key `name`. + * + * expect({a: 1}).to.have.property('a'); + * + * When `val` is provided, `.property` also asserts that the property's value + * is equal to the given `val`. + * + * expect({a: 1}).to.have.property('a', 1); + * + * By default, strict (`===`) equality is used. Add `.deep` earlier in the + * chain to use deep equality instead. See the `deep-eql` project page for + * info on the deep equality algorithm: https://github.com/chaijs/deep-eql. + * + * // Target object deeply (but not strictly) has property `x: {a: 1}` + * expect({x: {a: 1}}).to.have.deep.property('x', {a: 1}); + * expect({x: {a: 1}}).to.not.have.property('x', {a: 1}); + * + * The target's enumerable and non-enumerable properties are always included + * in the search. By default, both own and inherited properties are included. + * Add `.own` earlier in the chain to exclude inherited properties from the + * search. + * + * Object.prototype.b = 2; + * + * expect({a: 1}).to.have.own.property('a'); + * expect({a: 1}).to.have.own.property('a', 1); + * expect({a: 1}).to.have.property('b').but.not.own.property('b'); + * + * `.deep` and `.own` can be combined. + * + * expect({x: {a: 1}}).to.have.deep.own.property('x', {a: 1}); + * + * Add `.nested` earlier in the chain to enable dot- and bracket-notation when + * referencing nested properties. + * + * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]'); + * expect({a: {b: ['x', 'y']}}).to.have.nested.property('a.b[1]', 'y'); + * + * If `.` or `[]` are part of an actual property name, they can be escaped by + * adding two backslashes before them. + * + * expect({'.a': {'[b]': 'x'}}).to.have.nested.property('\\.a.\\[b\\]'); + * + * `.deep` and `.nested` can be combined. + * + * expect({a: {b: [{c: 3}]}}) + * .to.have.deep.nested.property('a.b[0]', {c: 3}); + * + * `.own` and `.nested` cannot be combined. + * + * Add `.not` earlier in the chain to negate `.property`. + * + * expect({a: 1}).to.not.have.property('b'); + * + * However, it's dangerous to negate `.property` when providing `val`. The + * problem is that it creates uncertain expectations by asserting that the + * target either doesn't have a property with the given key `name`, or that it + * does have a property with the given key `name` but its value isn't equal to + * the given `val`. It's often best to identify the exact output that's + * expected, and then write an assertion that only accepts that exact output. + * + * When the target isn't expected to have a property with the given key + * `name`, it's often best to assert exactly that. + * + * expect({b: 2}).to.not.have.property('a'); // Recommended + * expect({b: 2}).to.not.have.property('a', 1); // Not recommended + * + * When the target is expected to have a property with the given key `name`, + * it's often best to assert that the property has its expected value, rather + * than asserting that it doesn't have one of many unexpected values. + * + * expect({a: 3}).to.have.property('a', 3); // Recommended + * expect({a: 3}).to.not.have.property('a', 1); // Not recommended + * + * `.property` changes the target of any assertions that follow in the chain + * to be the value of the property from the original target object. + * + * expect({a: 1}).to.have.property('a').that.is.a('number'); + * + * `.property` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing `val`, only use the + * second form. + * + * // Recommended + * expect({a: 1}).to.have.property('a', 2, 'nooo why fail??'); + * expect({a: 1}, 'nooo why fail??').to.have.property('a', 2); + * expect({a: 1}, 'nooo why fail??').to.have.property('b'); + * + * // Not recommended + * expect({a: 1}).to.have.property('b', undefined, 'nooo why fail??'); + * + * The above assertion isn't the same thing as not providing `val`. Instead, + * it's asserting that the target object has a `b` property that's equal to + * `undefined`. + * + * The assertions `.ownProperty` and `.haveOwnProperty` can be used + * interchangeably with `.own.property`. + * + * @name property + * @param {String} name + * @param {Mixed} val (optional) + * @param {String} msg _optional_ + * @returns value of property for chaining + * @namespace BDD + * @api public + */ + + function assertProperty (name, val, msg) { + if (msg) flag(this, 'message', msg); + + var isNested = flag(this, 'nested') + , isOwn = flag(this, 'own') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + if (isNested && isOwn) { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'The "nested" and "own" flags cannot be combined.', + undefined, + ssfi + ); + } + + var isDeep = flag(this, 'deep') + , negate = flag(this, 'negate') + , obj = flag(this, 'object') + , pathInfo = isNested ? _.getPathInfo(obj, name) : null + , value = isNested ? pathInfo.value : obj[name]; + + var descriptor = ''; + if (isDeep) descriptor += 'deep '; + if (isOwn) descriptor += 'own '; + if (isNested) descriptor += 'nested '; + descriptor += 'property '; + + var hasProperty; + if (isOwn) hasProperty = Object.prototype.hasOwnProperty.call(obj, name); + else if (isNested) hasProperty = pathInfo.exists; + else hasProperty = _.hasProperty(obj, name); + + // When performing a negated assertion for both name and val, merely having + // a property with the given name isn't enough to cause the assertion to + // fail. It must both have a property with the given name, and the value of + // that property must equal the given val. Therefore, skip this assertion in + // favor of the next. + if (!negate || arguments.length === 1) { + this.assert( + hasProperty + , 'expected #{this} to have ' + descriptor + _.inspect(name) + , 'expected #{this} to not have ' + descriptor + _.inspect(name)); + } + + if (arguments.length > 1) { + this.assert( + hasProperty && (isDeep ? _.eql(val, value) : val === value) + , 'expected #{this} to have ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}' + , 'expected #{this} to not have ' + descriptor + _.inspect(name) + ' of #{act}' + , val + , value + ); + } + + flag(this, 'object', value); + } + + Assertion.addMethod('property', assertProperty); + + function assertOwnProperty (name, value, msg) { + flag(this, 'own', true); + assertProperty.apply(this, arguments); + } + + Assertion.addMethod('ownProperty', assertOwnProperty); + Assertion.addMethod('haveOwnProperty', assertOwnProperty); + + /** + * ### .ownPropertyDescriptor(name[, descriptor[, msg]]) + * + * Asserts that the target has its own property descriptor with the given key + * `name`. Enumerable and non-enumerable properties are included in the + * search. + * + * expect({a: 1}).to.have.ownPropertyDescriptor('a'); + * + * When `descriptor` is provided, `.ownPropertyDescriptor` also asserts that + * the property's descriptor is deeply equal to the given `descriptor`. See + * the `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * expect({a: 1}).to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 1, + * }); + * + * Add `.not` earlier in the chain to negate `.ownPropertyDescriptor`. + * + * expect({a: 1}).to.not.have.ownPropertyDescriptor('b'); + * + * However, it's dangerous to negate `.ownPropertyDescriptor` when providing + * a `descriptor`. The problem is that it creates uncertain expectations by + * asserting that the target either doesn't have a property descriptor with + * the given key `name`, or that it does have a property descriptor with the + * given key `name` but its not deeply equal to the given `descriptor`. It's + * often best to identify the exact output that's expected, and then write an + * assertion that only accepts that exact output. + * + * When the target isn't expected to have a property descriptor with the given + * key `name`, it's often best to assert exactly that. + * + * // Recommended + * expect({b: 2}).to.not.have.ownPropertyDescriptor('a'); + * + * // Not recommended + * expect({b: 2}).to.not.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 1, + * }); + * + * When the target is expected to have a property descriptor with the given + * key `name`, it's often best to assert that the property has its expected + * descriptor, rather than asserting that it doesn't have one of many + * unexpected descriptors. + * + * // Recommended + * expect({a: 3}).to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 3, + * }); + * + * // Not recommended + * expect({a: 3}).to.not.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 1, + * }); + * + * `.ownPropertyDescriptor` changes the target of any assertions that follow + * in the chain to be the value of the property descriptor from the original + * target object. + * + * expect({a: 1}).to.have.ownPropertyDescriptor('a') + * .that.has.property('enumerable', true); + * + * `.ownPropertyDescriptor` accepts an optional `msg` argument which is a + * custom error message to show when the assertion fails. The message can also + * be given as the second argument to `expect`. When not providing + * `descriptor`, only use the second form. + * + * // Recommended + * expect({a: 1}).to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 2, + * }, 'nooo why fail??'); + * + * // Recommended + * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('a', { + * configurable: true, + * enumerable: true, + * writable: true, + * value: 2, + * }); + * + * // Recommended + * expect({a: 1}, 'nooo why fail??').to.have.ownPropertyDescriptor('b'); + * + * // Not recommended + * expect({a: 1}) + * .to.have.ownPropertyDescriptor('b', undefined, 'nooo why fail??'); + * + * The above assertion isn't the same thing as not providing `descriptor`. + * Instead, it's asserting that the target object has a `b` property + * descriptor that's deeply equal to `undefined`. + * + * The alias `.haveOwnPropertyDescriptor` can be used interchangeably with + * `.ownPropertyDescriptor`. + * + * @name ownPropertyDescriptor + * @alias haveOwnPropertyDescriptor + * @param {String} name + * @param {Object} descriptor _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertOwnPropertyDescriptor (name, descriptor, msg) { + if (typeof descriptor === 'string') { + msg = descriptor; + descriptor = null; + } + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + var actualDescriptor = Object.getOwnPropertyDescriptor(Object(obj), name); + if (actualDescriptor && descriptor) { + this.assert( + _.eql(descriptor, actualDescriptor) + , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to match ' + _.inspect(descriptor) + ', got ' + _.inspect(actualDescriptor) + , 'expected the own property descriptor for ' + _.inspect(name) + ' on #{this} to not match ' + _.inspect(descriptor) + , descriptor + , actualDescriptor + , true + ); + } else { + this.assert( + actualDescriptor + , 'expected #{this} to have an own property descriptor for ' + _.inspect(name) + , 'expected #{this} to not have an own property descriptor for ' + _.inspect(name) + ); + } + flag(this, 'object', actualDescriptor); + } + + Assertion.addMethod('ownPropertyDescriptor', assertOwnPropertyDescriptor); + Assertion.addMethod('haveOwnPropertyDescriptor', assertOwnPropertyDescriptor); + + /** + * ### .lengthOf(n[, msg]) + * + * Asserts that the target's `length` property is equal to the given number + * `n`. + * + * expect([1, 2, 3]).to.have.lengthOf(3); + * expect('foo').to.have.lengthOf(3); + * + * Add `.not` earlier in the chain to negate `.lengthOf`. However, it's often + * best to assert that the target's `length` property is equal to its expected + * value, rather than not equal to one of many unexpected values. + * + * expect('foo').to.have.lengthOf(3); // Recommended + * expect('foo').to.not.have.lengthOf(4); // Not recommended + * + * `.lengthOf` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect([1, 2, 3]).to.have.lengthOf(2, 'nooo why fail??'); + * expect([1, 2, 3], 'nooo why fail??').to.have.lengthOf(2); + * + * `.lengthOf` can also be used as a language chain, causing all `.above`, + * `.below`, `.least`, `.most`, and `.within` assertions that follow in the + * chain to use the target's `length` property as the target. However, it's + * often best to assert that the target's `length` property is equal to its + * expected length, rather than asserting that its `length` property falls + * within some range of values. + * + * // Recommended + * expect([1, 2, 3]).to.have.lengthOf(3); + * + * // Not recommended + * expect([1, 2, 3]).to.have.lengthOf.above(2); + * expect([1, 2, 3]).to.have.lengthOf.below(4); + * expect([1, 2, 3]).to.have.lengthOf.at.least(3); + * expect([1, 2, 3]).to.have.lengthOf.at.most(3); + * expect([1, 2, 3]).to.have.lengthOf.within(2,4); + * + * Due to a compatibility issue, the alias `.length` can't be chained directly + * off of an uninvoked method such as `.a`. Therefore, `.length` can't be used + * interchangeably with `.lengthOf` in every situation. It's recommended to + * always use `.lengthOf` instead of `.length`. + * + * expect([1, 2, 3]).to.have.a.length(3); // incompatible; throws error + * expect([1, 2, 3]).to.have.a.lengthOf(3); // passes as expected + * + * @name lengthOf + * @alias length + * @param {Number} n + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertLengthChain () { + flag(this, 'doLength', true); + } + + function assertLength (n, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(obj, flagMsg, ssfi, true).to.have.property('length'); + var len = obj.length; + + this.assert( + len == n + , 'expected #{this} to have a length of #{exp} but got #{act}' + , 'expected #{this} to not have a length of #{act}' + , n + , len + ); + } + + Assertion.addChainableMethod('length', assertLength, assertLengthChain); + Assertion.addChainableMethod('lengthOf', assertLength, assertLengthChain); + + /** + * ### .match(re[, msg]) + * + * Asserts that the target matches the given regular expression `re`. + * + * expect('foobar').to.match(/^foo/); + * + * Add `.not` earlier in the chain to negate `.match`. + * + * expect('foobar').to.not.match(/taco/); + * + * `.match` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect('foobar').to.match(/taco/, 'nooo why fail??'); + * expect('foobar', 'nooo why fail??').to.match(/taco/); + * + * The alias `.matches` can be used interchangeably with `.match`. + * + * @name match + * @alias matches + * @param {RegExp} re + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + function assertMatch(re, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + this.assert( + re.exec(obj) + , 'expected #{this} to match ' + re + , 'expected #{this} not to match ' + re + ); + } + + Assertion.addMethod('match', assertMatch); + Assertion.addMethod('matches', assertMatch); + + /** + * ### .string(str[, msg]) + * + * Asserts that the target string contains the given substring `str`. + * + * expect('foobar').to.have.string('bar'); + * + * Add `.not` earlier in the chain to negate `.string`. + * + * expect('foobar').to.not.have.string('taco'); + * + * `.string` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect('foobar').to.have.string(/taco/, 'nooo why fail??'); + * expect('foobar', 'nooo why fail??').to.have.string(/taco/); + * + * @name string + * @param {String} str + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + Assertion.addMethod('string', function (str, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(obj, flagMsg, ssfi, true).is.a('string'); + + this.assert( + ~obj.indexOf(str) + , 'expected #{this} to contain ' + _.inspect(str) + , 'expected #{this} to not contain ' + _.inspect(str) + ); + }); + + /** + * ### .keys(key1[, key2[, ...]]) + * + * Asserts that the target object, array, map, or set has the given keys. Only + * the target's own inherited properties are included in the search. + * + * When the target is an object or array, keys can be provided as one or more + * string arguments, a single array argument, or a single object argument. In + * the latter case, only the keys in the given object matter; the values are + * ignored. + * + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); + * expect(['x', 'y']).to.have.all.keys(0, 1); + * + * expect({a: 1, b: 2}).to.have.all.keys(['a', 'b']); + * expect(['x', 'y']).to.have.all.keys([0, 1]); + * + * expect({a: 1, b: 2}).to.have.all.keys({a: 4, b: 5}); // ignore 4 and 5 + * expect(['x', 'y']).to.have.all.keys({0: 4, 1: 5}); // ignore 4 and 5 + * + * When the target is a map or set, each key must be provided as a separate + * argument. + * + * expect(new Map([['a', 1], ['b', 2]])).to.have.all.keys('a', 'b'); + * expect(new Set(['a', 'b'])).to.have.all.keys('a', 'b'); + * + * Because `.keys` does different things based on the target's type, it's + * important to check the target's type before using `.keys`. See the `.a` doc + * for info on testing a target's type. + * + * expect({a: 1, b: 2}).to.be.an('object').that.has.all.keys('a', 'b'); + * + * By default, strict (`===`) equality is used to compare keys of maps and + * sets. Add `.deep` earlier in the chain to use deep equality instead. See + * the `deep-eql` project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target set deeply (but not strictly) has key `{a: 1}` + * expect(new Set([{a: 1}])).to.have.all.deep.keys([{a: 1}]); + * expect(new Set([{a: 1}])).to.not.have.all.keys([{a: 1}]); + * + * By default, the target must have all of the given keys and no more. Add + * `.any` earlier in the chain to only require that the target have at least + * one of the given keys. Also, add `.not` earlier in the chain to negate + * `.keys`. It's often best to add `.any` when negating `.keys`, and to use + * `.all` when asserting `.keys` without negation. + * + * When negating `.keys`, `.any` is preferred because `.not.any.keys` asserts + * exactly what's expected of the output, whereas `.not.all.keys` creates + * uncertain expectations. + * + * // Recommended; asserts that target doesn't have any of the given keys + * expect({a: 1, b: 2}).to.not.have.any.keys('c', 'd'); + * + * // Not recommended; asserts that target doesn't have all of the given + * // keys but may or may not have some of them + * expect({a: 1, b: 2}).to.not.have.all.keys('c', 'd'); + * + * When asserting `.keys` without negation, `.all` is preferred because + * `.all.keys` asserts exactly what's expected of the output, whereas + * `.any.keys` creates uncertain expectations. + * + * // Recommended; asserts that target has all the given keys + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); + * + * // Not recommended; asserts that target has at least one of the given + * // keys but may or may not have more of them + * expect({a: 1, b: 2}).to.have.any.keys('a', 'b'); + * + * Note that `.all` is used by default when neither `.all` nor `.any` appear + * earlier in the chain. However, it's often best to add `.all` anyway because + * it improves readability. + * + * // Both assertions are identical + * expect({a: 1, b: 2}).to.have.all.keys('a', 'b'); // Recommended + * expect({a: 1, b: 2}).to.have.keys('a', 'b'); // Not recommended + * + * Add `.include` earlier in the chain to require that the target's keys be a + * superset of the expected keys, rather than identical sets. + * + * // Target object's keys are a superset of ['a', 'b'] but not identical + * expect({a: 1, b: 2, c: 3}).to.include.all.keys('a', 'b'); + * expect({a: 1, b: 2, c: 3}).to.not.have.all.keys('a', 'b'); + * + * However, if `.any` and `.include` are combined, only the `.any` takes + * effect. The `.include` is ignored in this case. + * + * // Both assertions are identical + * expect({a: 1}).to.have.any.keys('a', 'b'); + * expect({a: 1}).to.include.any.keys('a', 'b'); + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({a: 1}, 'nooo why fail??').to.have.key('b'); + * + * The alias `.key` can be used interchangeably with `.keys`. + * + * @name keys + * @alias key + * @param {...String|Array|Object} keys + * @namespace BDD + * @api public + */ + + function assertKeys (keys) { + var obj = flag(this, 'object') + , objType = _.type(obj) + , keysType = _.type(keys) + , ssfi = flag(this, 'ssfi') + , isDeep = flag(this, 'deep') + , str + , deepStr = '' + , ok = true + , flagMsg = flag(this, 'message'); + + flagMsg = flagMsg ? flagMsg + ': ' : ''; + var mixedArgsMsg = flagMsg + 'when testing keys against an object or an array you must give a single Array|Object|String argument or multiple String arguments'; + + if (objType === 'Map' || objType === 'Set') { + deepStr = isDeep ? 'deeply ' : ''; + actual = []; + + // Map and Set '.keys' aren't supported in IE 11. Therefore, use .forEach. + obj.forEach(function (val, key) { actual.push(key) }); + + if (keysType !== 'Array') { + keys = Array.prototype.slice.call(arguments); + } + + } else { + actual = _.getOwnEnumerableProperties(obj); + + switch (keysType) { + case 'Array': + if (arguments.length > 1) { + throw new AssertionError(mixedArgsMsg, undefined, ssfi); + } + break; + case 'Object': + if (arguments.length > 1) { + throw new AssertionError(mixedArgsMsg, undefined, ssfi); + } + keys = Object.keys(keys); + break; + default: + keys = Array.prototype.slice.call(arguments); + } + + // Only stringify non-Symbols because Symbols would become "Symbol()" + keys = keys.map(function (val) { + return typeof val === 'symbol' ? val : String(val); + }); + } + + if (!keys.length) { + throw new AssertionError(flagMsg + 'keys required', undefined, ssfi); + } + + var len = keys.length + , any = flag(this, 'any') + , all = flag(this, 'all') + , expected = keys + , actual; + + if (!any && !all) { + all = true; + } + + // Has any + if (any) { + ok = expected.some(function(expectedKey) { + return actual.some(function(actualKey) { + if (isDeep) { + return _.eql(expectedKey, actualKey); + } else { + return expectedKey === actualKey; + } + }); + }); + } + + // Has all + if (all) { + ok = expected.every(function(expectedKey) { + return actual.some(function(actualKey) { + if (isDeep) { + return _.eql(expectedKey, actualKey); + } else { + return expectedKey === actualKey; + } + }); + }); + + if (!flag(this, 'contains')) { + ok = ok && keys.length == actual.length; + } + } + + // Key string + if (len > 1) { + keys = keys.map(function(key) { + return _.inspect(key); + }); + var last = keys.pop(); + if (all) { + str = keys.join(', ') + ', and ' + last; + } + if (any) { + str = keys.join(', ') + ', or ' + last; + } + } else { + str = _.inspect(keys[0]); + } + + // Form + str = (len > 1 ? 'keys ' : 'key ') + str; + + // Have / include + str = (flag(this, 'contains') ? 'contain ' : 'have ') + str; + + // Assertion + this.assert( + ok + , 'expected #{this} to ' + deepStr + str + , 'expected #{this} to not ' + deepStr + str + , expected.slice(0).sort(_.compareByInspect) + , actual.sort(_.compareByInspect) + , true + ); + } + + Assertion.addMethod('keys', assertKeys); + Assertion.addMethod('key', assertKeys); + + /** + * ### .throw([errorLike], [errMsgMatcher], [msg]) + * + * When no arguments are provided, `.throw` invokes the target function and + * asserts that an error is thrown. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(); + * + * When one argument is provided, and it's an error constructor, `.throw` + * invokes the target function and asserts that an error is thrown that's an + * instance of that error constructor. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(TypeError); + * + * When one argument is provided, and it's an error instance, `.throw` invokes + * the target function and asserts that an error is thrown that's strictly + * (`===`) equal to that error instance. + * + * var err = new TypeError('Illegal salmon!'); + * var badFn = function () { throw err; }; + * + * expect(badFn).to.throw(err); + * + * When one argument is provided, and it's a string, `.throw` invokes the + * target function and asserts that an error is thrown with a message that + * contains that string. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw('salmon'); + * + * When one argument is provided, and it's a regular expression, `.throw` + * invokes the target function and asserts that an error is thrown with a + * message that matches that regular expression. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(/salmon/); + * + * When two arguments are provided, and the first is an error instance or + * constructor, and the second is a string or regular expression, `.throw` + * invokes the function and asserts that an error is thrown that fulfills both + * conditions as described above. + * + * var err = new TypeError('Illegal salmon!'); + * var badFn = function () { throw err; }; + * + * expect(badFn).to.throw(TypeError, 'salmon'); + * expect(badFn).to.throw(TypeError, /salmon/); + * expect(badFn).to.throw(err, 'salmon'); + * expect(badFn).to.throw(err, /salmon/); + * + * Add `.not` earlier in the chain to negate `.throw`. + * + * var goodFn = function () {}; + * + * expect(goodFn).to.not.throw(); + * + * However, it's dangerous to negate `.throw` when providing any arguments. + * The problem is that it creates uncertain expectations by asserting that the + * target either doesn't throw an error, or that it throws an error but of a + * different type than the given type, or that it throws an error of the given + * type but with a message that doesn't include the given string. It's often + * best to identify the exact output that's expected, and then write an + * assertion that only accepts that exact output. + * + * When the target isn't expected to throw an error, it's often best to assert + * exactly that. + * + * var goodFn = function () {}; + * + * expect(goodFn).to.not.throw(); // Recommended + * expect(goodFn).to.not.throw(ReferenceError, 'x'); // Not recommended + * + * When the target is expected to throw an error, it's often best to assert + * that the error is of its expected type, and has a message that includes an + * expected string, rather than asserting that it doesn't have one of many + * unexpected types, and doesn't have a message that includes some string. + * + * var badFn = function () { throw new TypeError('Illegal salmon!'); }; + * + * expect(badFn).to.throw(TypeError, 'salmon'); // Recommended + * expect(badFn).to.not.throw(ReferenceError, 'x'); // Not recommended + * + * `.throw` changes the target of any assertions that follow in the chain to + * be the error object that's thrown. + * + * var err = new TypeError('Illegal salmon!'); + * err.code = 42; + * var badFn = function () { throw err; }; + * + * expect(badFn).to.throw(TypeError).with.property('code', 42); + * + * `.throw` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. When not providing two arguments, always use + * the second form. + * + * var goodFn = function () {}; + * + * expect(goodFn).to.throw(TypeError, 'x', 'nooo why fail??'); + * expect(goodFn, 'nooo why fail??').to.throw(); + * + * Due to limitations in ES5, `.throw` may not always work as expected when + * using a transpiler such as Babel or TypeScript. In particular, it may + * produce unexpected results when subclassing the built-in `Error` object and + * then passing the subclassed constructor to `.throw`. See your transpiler's + * docs for details: + * + * - ([Babel](https://babeljs.io/docs/usage/caveats/#classes)) + * - ([TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work)) + * + * Beware of some common mistakes when using the `throw` assertion. One common + * mistake is to accidentally invoke the function yourself instead of letting + * the `throw` assertion invoke the function for you. For example, when + * testing if a function named `fn` throws, provide `fn` instead of `fn()` as + * the target for the assertion. + * + * expect(fn).to.throw(); // Good! Tests `fn` as desired + * expect(fn()).to.throw(); // Bad! Tests result of `fn()`, not `fn` + * + * If you need to assert that your function `fn` throws when passed certain + * arguments, then wrap a call to `fn` inside of another function. + * + * expect(function () { fn(42); }).to.throw(); // Function expression + * expect(() => fn(42)).to.throw(); // ES6 arrow function + * + * Another common mistake is to provide an object method (or any stand-alone + * function that relies on `this`) as the target of the assertion. Doing so is + * problematic because the `this` context will be lost when the function is + * invoked by `.throw`; there's no way for it to know what `this` is supposed + * to be. There are two ways around this problem. One solution is to wrap the + * method or function call inside of another function. Another solution is to + * use `bind`. + * + * expect(function () { cat.meow(); }).to.throw(); // Function expression + * expect(() => cat.meow()).to.throw(); // ES6 arrow function + * expect(cat.meow.bind(cat)).to.throw(); // Bind + * + * Finally, it's worth mentioning that it's a best practice in JavaScript to + * only throw `Error` and derivatives of `Error` such as `ReferenceError`, + * `TypeError`, and user-defined objects that extend `Error`. No other type of + * value will generate a stack trace when initialized. With that said, the + * `throw` assertion does technically support any type of value being thrown, + * not just `Error` and its derivatives. + * + * The aliases `.throws` and `.Throw` can be used interchangeably with + * `.throw`. + * + * @name throw + * @alias throws + * @alias Throw + * @param {Error|ErrorConstructor} errorLike + * @param {String|RegExp} errMsgMatcher error message + * @param {String} msg _optional_ + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @returns error for chaining (null if no error) + * @namespace BDD + * @api public + */ + + function assertThrows (errorLike, errMsgMatcher, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , ssfi = flag(this, 'ssfi') + , flagMsg = flag(this, 'message') + , negate = flag(this, 'negate') || false; + new Assertion(obj, flagMsg, ssfi, true).is.a('function'); + + if (errorLike instanceof RegExp || typeof errorLike === 'string') { + errMsgMatcher = errorLike; + errorLike = null; + } + + var caughtErr; + try { + obj(); + } catch (err) { + caughtErr = err; + } + + // If we have the negate flag enabled and at least one valid argument it means we do expect an error + // but we want it to match a given set of criteria + var everyArgIsUndefined = errorLike === undefined && errMsgMatcher === undefined; + + // If we've got the negate flag enabled and both args, we should only fail if both aren't compatible + // See Issue #551 and PR #683@GitHub + var everyArgIsDefined = Boolean(errorLike && errMsgMatcher); + var errorLikeFail = false; + var errMsgMatcherFail = false; + + // Checking if error was thrown + if (everyArgIsUndefined || !everyArgIsUndefined && !negate) { + // We need this to display results correctly according to their types + var errorLikeString = 'an error'; + if (errorLike instanceof Error) { + errorLikeString = '#{exp}'; + } else if (errorLike) { + errorLikeString = _.checkError.getConstructorName(errorLike); + } + + this.assert( + caughtErr + , 'expected #{this} to throw ' + errorLikeString + , 'expected #{this} to not throw an error but #{act} was thrown' + , errorLike && errorLike.toString() + , (caughtErr instanceof Error ? + caughtErr.toString() : (typeof caughtErr === 'string' ? caughtErr : caughtErr && + _.checkError.getConstructorName(caughtErr))) + ); + } + + if (errorLike && caughtErr) { + // We should compare instances only if `errorLike` is an instance of `Error` + if (errorLike instanceof Error) { + var isCompatibleInstance = _.checkError.compatibleInstance(caughtErr, errorLike); + + if (isCompatibleInstance === negate) { + // These checks were created to ensure we won't fail too soon when we've got both args and a negate + // See Issue #551 and PR #683@GitHub + if (everyArgIsDefined && negate) { + errorLikeFail = true; + } else { + this.assert( + negate + , 'expected #{this} to throw #{exp} but #{act} was thrown' + , 'expected #{this} to not throw #{exp}' + (caughtErr && !negate ? ' but #{act} was thrown' : '') + , errorLike.toString() + , caughtErr.toString() + ); + } + } + } + + var isCompatibleConstructor = _.checkError.compatibleConstructor(caughtErr, errorLike); + if (isCompatibleConstructor === negate) { + if (everyArgIsDefined && negate) { + errorLikeFail = true; + } else { + this.assert( + negate + , 'expected #{this} to throw #{exp} but #{act} was thrown' + , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '') + , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike)) + , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr)) + ); + } + } + } + + if (caughtErr && errMsgMatcher !== undefined && errMsgMatcher !== null) { + // Here we check compatible messages + var placeholder = 'including'; + if (errMsgMatcher instanceof RegExp) { + placeholder = 'matching' + } + + var isCompatibleMessage = _.checkError.compatibleMessage(caughtErr, errMsgMatcher); + if (isCompatibleMessage === negate) { + if (everyArgIsDefined && negate) { + errMsgMatcherFail = true; + } else { + this.assert( + negate + , 'expected #{this} to throw error ' + placeholder + ' #{exp} but got #{act}' + , 'expected #{this} to throw error not ' + placeholder + ' #{exp}' + , errMsgMatcher + , _.checkError.getMessage(caughtErr) + ); + } + } + } + + // If both assertions failed and both should've matched we throw an error + if (errorLikeFail && errMsgMatcherFail) { + this.assert( + negate + , 'expected #{this} to throw #{exp} but #{act} was thrown' + , 'expected #{this} to not throw #{exp}' + (caughtErr ? ' but #{act} was thrown' : '') + , (errorLike instanceof Error ? errorLike.toString() : errorLike && _.checkError.getConstructorName(errorLike)) + , (caughtErr instanceof Error ? caughtErr.toString() : caughtErr && _.checkError.getConstructorName(caughtErr)) + ); + } + + flag(this, 'object', caughtErr); + }; + + Assertion.addMethod('throw', assertThrows); + Assertion.addMethod('throws', assertThrows); + Assertion.addMethod('Throw', assertThrows); + + /** + * ### .respondTo(method[, msg]) + * + * When the target is a non-function object, `.respondTo` asserts that the + * target has a method with the given name `method`. The method can be own or + * inherited, and it can be enumerable or non-enumerable. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * + * expect(new Cat()).to.respondTo('meow'); + * + * When the target is a function, `.respondTo` asserts that the target's + * `prototype` property has a method with the given name `method`. Again, the + * method can be own or inherited, and it can be enumerable or non-enumerable. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * + * expect(Cat).to.respondTo('meow'); + * + * Add `.itself` earlier in the chain to force `.respondTo` to treat the + * target as a non-function object, even if it's a function. Thus, it asserts + * that the target has a method with the given name `method`, rather than + * asserting that the target's `prototype` property has a method with the + * given name `method`. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * Cat.hiss = function () {}; + * + * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow'); + * + * When not adding `.itself`, it's important to check the target's type before + * using `.respondTo`. See the `.a` doc for info on checking a target's type. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * + * expect(new Cat()).to.be.an('object').that.respondsTo('meow'); + * + * Add `.not` earlier in the chain to negate `.respondTo`. + * + * function Dog () {} + * Dog.prototype.bark = function () {}; + * + * expect(new Dog()).to.not.respondTo('meow'); + * + * `.respondTo` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect({}).to.respondTo('meow', 'nooo why fail??'); + * expect({}, 'nooo why fail??').to.respondTo('meow'); + * + * The alias `.respondsTo` can be used interchangeably with `.respondTo`. + * + * @name respondTo + * @alias respondsTo + * @param {String} method + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function respondTo (method, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , itself = flag(this, 'itself') + , context = ('function' === typeof obj && !itself) + ? obj.prototype[method] + : obj[method]; + + this.assert( + 'function' === typeof context + , 'expected #{this} to respond to ' + _.inspect(method) + , 'expected #{this} to not respond to ' + _.inspect(method) + ); + } + + Assertion.addMethod('respondTo', respondTo); + Assertion.addMethod('respondsTo', respondTo); + + /** + * ### .itself + * + * Forces all `.respondTo` assertions that follow in the chain to behave as if + * the target is a non-function object, even if it's a function. Thus, it + * causes `.respondTo` to assert that the target has a method with the given + * name, rather than asserting that the target's `prototype` property has a + * method with the given name. + * + * function Cat () {} + * Cat.prototype.meow = function () {}; + * Cat.hiss = function () {}; + * + * expect(Cat).itself.to.respondTo('hiss').but.not.respondTo('meow'); + * + * @name itself + * @namespace BDD + * @api public + */ + + Assertion.addProperty('itself', function () { + flag(this, 'itself', true); + }); + + /** + * ### .satisfy(matcher[, msg]) + * + * Invokes the given `matcher` function with the target being passed as the + * first argument, and asserts that the value returned is truthy. + * + * expect(1).to.satisfy(function(num) { + * return num > 0; + * }); + * + * Add `.not` earlier in the chain to negate `.satisfy`. + * + * expect(1).to.not.satisfy(function(num) { + * return num > 2; + * }); + * + * `.satisfy` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(1).to.satisfy(function(num) { + * return num > 2; + * }, 'nooo why fail??'); + * + * expect(1, 'nooo why fail??').to.satisfy(function(num) { + * return num > 2; + * }); + * + * The alias `.satisfies` can be used interchangeably with `.satisfy`. + * + * @name satisfy + * @alias satisfies + * @param {Function} matcher + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function satisfy (matcher, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object'); + var result = matcher(obj); + this.assert( + result + , 'expected #{this} to satisfy ' + _.objDisplay(matcher) + , 'expected #{this} to not satisfy' + _.objDisplay(matcher) + , flag(this, 'negate') ? false : true + , result + ); + } + + Assertion.addMethod('satisfy', satisfy); + Assertion.addMethod('satisfies', satisfy); + + /** + * ### .closeTo(expected, delta[, msg]) + * + * Asserts that the target is a number that's within a given +/- `delta` range + * of the given number `expected`. However, it's often best to assert that the + * target is equal to its expected value. + * + * // Recommended + * expect(1.5).to.equal(1.5); + * + * // Not recommended + * expect(1.5).to.be.closeTo(1, 0.5); + * expect(1.5).to.be.closeTo(2, 0.5); + * expect(1.5).to.be.closeTo(1, 1); + * + * Add `.not` earlier in the chain to negate `.closeTo`. + * + * expect(1.5).to.equal(1.5); // Recommended + * expect(1.5).to.not.be.closeTo(3, 1); // Not recommended + * + * `.closeTo` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect(1.5).to.be.closeTo(3, 1, 'nooo why fail??'); + * expect(1.5, 'nooo why fail??').to.be.closeTo(3, 1); + * + * The alias `.approximately` can be used interchangeably with `.closeTo`. + * + * @name closeTo + * @alias approximately + * @param {Number} expected + * @param {Number} delta + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function closeTo(expected, delta, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + new Assertion(obj, flagMsg, ssfi, true).is.a('number'); + if (typeof expected !== 'number' || typeof delta !== 'number') { + flagMsg = flagMsg ? flagMsg + ': ' : ''; + throw new AssertionError( + flagMsg + 'the arguments to closeTo or approximately must be numbers', + undefined, + ssfi + ); + } + + this.assert( + Math.abs(obj - expected) <= delta + , 'expected #{this} to be close to ' + expected + ' +/- ' + delta + , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta + ); + } + + Assertion.addMethod('closeTo', closeTo); + Assertion.addMethod('approximately', closeTo); + + // Note: Duplicates are ignored if testing for inclusion instead of sameness. + function isSubsetOf(subset, superset, cmp, contains, ordered) { + if (!contains) { + if (subset.length !== superset.length) return false; + superset = superset.slice(); + } + + return subset.every(function(elem, idx) { + if (ordered) return cmp ? cmp(elem, superset[idx]) : elem === superset[idx]; + + if (!cmp) { + var matchIdx = superset.indexOf(elem); + if (matchIdx === -1) return false; + + // Remove match from superset so not counted twice if duplicate in subset. + if (!contains) superset.splice(matchIdx, 1); + return true; + } + + return superset.some(function(elem2, matchIdx) { + if (!cmp(elem, elem2)) return false; + + // Remove match from superset so not counted twice if duplicate in subset. + if (!contains) superset.splice(matchIdx, 1); + return true; + }); + }); + } + + /** + * ### .members(set[, msg]) + * + * Asserts that the target array has the same members as the given array + * `set`. + * + * expect([1, 2, 3]).to.have.members([2, 1, 3]); + * expect([1, 2, 2]).to.have.members([2, 1, 2]); + * + * By default, members are compared using strict (`===`) equality. Add `.deep` + * earlier in the chain to use deep equality instead. See the `deep-eql` + * project page for info on the deep equality algorithm: + * https://github.com/chaijs/deep-eql. + * + * // Target array deeply (but not strictly) has member `{a: 1}` + * expect([{a: 1}]).to.have.deep.members([{a: 1}]); + * expect([{a: 1}]).to.not.have.members([{a: 1}]); + * + * By default, order doesn't matter. Add `.ordered` earlier in the chain to + * require that members appear in the same order. + * + * expect([1, 2, 3]).to.have.ordered.members([1, 2, 3]); + * expect([1, 2, 3]).to.have.members([2, 1, 3]) + * .but.not.ordered.members([2, 1, 3]); + * + * By default, both arrays must be the same size. Add `.include` earlier in + * the chain to require that the target's members be a superset of the + * expected members. Note that duplicates are ignored in the subset when + * `.include` is added. + * + * // Target array is a superset of [1, 2] but not identical + * expect([1, 2, 3]).to.include.members([1, 2]); + * expect([1, 2, 3]).to.not.have.members([1, 2]); + * + * // Duplicates in the subset are ignored + * expect([1, 2, 3]).to.include.members([1, 2, 2, 2]); + * + * `.deep`, `.ordered`, and `.include` can all be combined. However, if + * `.include` and `.ordered` are combined, the ordering begins at the start of + * both arrays. + * + * expect([{a: 1}, {b: 2}, {c: 3}]) + * .to.include.deep.ordered.members([{a: 1}, {b: 2}]) + * .but.not.include.deep.ordered.members([{b: 2}, {c: 3}]); + * + * Add `.not` earlier in the chain to negate `.members`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the target array doesn't have all of the same members as + * the given array `set` but may or may not have some of them. It's often best + * to identify the exact output that's expected, and then write an assertion + * that only accepts that exact output. + * + * expect([1, 2]).to.not.include(3).and.not.include(4); // Recommended + * expect([1, 2]).to.not.have.members([3, 4]); // Not recommended + * + * `.members` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. + * + * expect([1, 2]).to.have.members([1, 2, 3], 'nooo why fail??'); + * expect([1, 2], 'nooo why fail??').to.have.members([1, 2, 3]); + * + * @name members + * @param {Array} set + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + Assertion.addMethod('members', function (subset, msg) { + if (msg) flag(this, 'message', msg); + var obj = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + + new Assertion(obj, flagMsg, ssfi, true).to.be.an('array'); + new Assertion(subset, flagMsg, ssfi, true).to.be.an('array'); + + var contains = flag(this, 'contains'); + var ordered = flag(this, 'ordered'); + + var subject, failMsg, failNegateMsg, lengthCheck; + + if (contains) { + subject = ordered ? 'an ordered superset' : 'a superset'; + failMsg = 'expected #{this} to be ' + subject + ' of #{exp}'; + failNegateMsg = 'expected #{this} to not be ' + subject + ' of #{exp}'; + } else { + subject = ordered ? 'ordered members' : 'members'; + failMsg = 'expected #{this} to have the same ' + subject + ' as #{exp}'; + failNegateMsg = 'expected #{this} to not have the same ' + subject + ' as #{exp}'; + } + + var cmp = flag(this, 'deep') ? _.eql : undefined; + + this.assert( + isSubsetOf(subset, obj, cmp, contains, ordered) + , failMsg + , failNegateMsg + , subset + , obj + , true + ); + }); + + /** + * ### .oneOf(list[, msg]) + * + * Asserts that the target is a member of the given array `list`. However, + * it's often best to assert that the target is equal to its expected value. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.be.oneOf([1, 2, 3]); // Not recommended + * + * Comparisons are performed using strict (`===`) equality. + * + * Add `.not` earlier in the chain to negate `.oneOf`. + * + * expect(1).to.equal(1); // Recommended + * expect(1).to.not.be.oneOf([2, 3, 4]); // Not recommended + * + * `.oneOf` accepts an optional `msg` argument which is a custom error message + * to show when the assertion fails. The message can also be given as the + * second argument to `expect`. + * + * expect(1).to.be.oneOf([2, 3, 4], 'nooo why fail??'); + * expect(1, 'nooo why fail??').to.be.oneOf([2, 3, 4]); + * + * @name oneOf + * @param {Array<*>} list + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function oneOf (list, msg) { + if (msg) flag(this, 'message', msg); + var expected = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(list, flagMsg, ssfi, true).to.be.an('array'); + + this.assert( + list.indexOf(expected) > -1 + , 'expected #{this} to be one of #{exp}' + , 'expected #{this} to not be one of #{exp}' + , list + , expected + ); + } + + Assertion.addMethod('oneOf', oneOf); + + + /** + * ### .change(subject[, prop[, msg]]) + * + * When one argument is provided, `.change` asserts that the given function + * `subject` returns a different value when it's invoked before the target + * function compared to when it's invoked afterward. However, it's often best + * to assert that `subject` is equal to its expected value. + * + * var dots = '' + * , addDot = function () { dots += '.'; } + * , getDots = function () { return dots; }; + * + * // Recommended + * expect(getDots()).to.equal(''); + * addDot(); + * expect(getDots()).to.equal('.'); + * + * // Not recommended + * expect(addDot).to.change(getDots); + * + * When two arguments are provided, `.change` asserts that the value of the + * given object `subject`'s `prop` property is different before invoking the + * target function compared to afterward. + * + * var myObj = {dots: ''} + * , addDot = function () { myObj.dots += '.'; }; + * + * // Recommended + * expect(myObj).to.have.property('dots', ''); + * addDot(); + * expect(myObj).to.have.property('dots', '.'); + * + * // Not recommended + * expect(addDot).to.change(myObj, 'dots'); + * + * Strict (`===`) equality is used to compare before and after values. + * + * Add `.not` earlier in the chain to negate `.change`. + * + * var dots = '' + * , noop = function () {} + * , getDots = function () { return dots; }; + * + * expect(noop).to.not.change(getDots); + * + * var myObj = {dots: ''} + * , noop = function () {}; + * + * expect(noop).to.not.change(myObj, 'dots'); + * + * `.change` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing two arguments, always + * use the second form. + * + * var myObj = {dots: ''} + * , addDot = function () { myObj.dots += '.'; }; + * + * expect(addDot).to.not.change(myObj, 'dots', 'nooo why fail??'); + * + * var dots = '' + * , addDot = function () { dots += '.'; } + * , getDots = function () { return dots; }; + * + * expect(addDot, 'nooo why fail??').to.not.change(getDots); + * + * `.change` also causes all `.by` assertions that follow in the chain to + * assert how much a numeric subject was increased or decreased by. However, + * it's dangerous to use `.change.by`. The problem is that it creates + * uncertain expectations by asserting that the subject either increases by + * the given delta, or that it decreases by the given delta. It's often best + * to identify the exact output that's expected, and then write an assertion + * that only accepts that exact output. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; } + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * The alias `.changes` can be used interchangeably with `.change`. + * + * @name change + * @alias changes + * @param {String} subject + * @param {String} prop name _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertChanges (subject, prop, msg) { + if (msg) flag(this, 'message', msg); + var fn = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(fn, flagMsg, ssfi, true).is.a('function'); + + var initial; + if (!prop) { + new Assertion(subject, flagMsg, ssfi, true).is.a('function'); + initial = subject(); + } else { + new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); + initial = subject[prop]; + } + + fn(); + + var final = prop === undefined || prop === null ? subject() : subject[prop]; + var msgObj = prop === undefined || prop === null ? initial : '.' + prop; + + // This gets flagged because of the .by(delta) assertion + flag(this, 'deltaMsgObj', msgObj); + flag(this, 'initialDeltaValue', initial); + flag(this, 'finalDeltaValue', final); + flag(this, 'deltaBehavior', 'change'); + flag(this, 'realDelta', final !== initial); + + this.assert( + initial !== final + , 'expected ' + msgObj + ' to change' + , 'expected ' + msgObj + ' to not change' + ); + } + + Assertion.addMethod('change', assertChanges); + Assertion.addMethod('changes', assertChanges); + + /** + * ### .increase(subject[, prop[, msg]]) + * + * When one argument is provided, `.increase` asserts that the given function + * `subject` returns a greater number when it's invoked after invoking the + * target function compared to when it's invoked beforehand. `.increase` also + * causes all `.by` assertions that follow in the chain to assert how much + * greater of a number is returned. It's often best to assert that the return + * value increased by the expected amount, rather than asserting it increased + * by any amount. + * + * var val = 1 + * , addTwo = function () { val += 2; } + * , getVal = function () { return val; }; + * + * expect(addTwo).to.increase(getVal).by(2); // Recommended + * expect(addTwo).to.increase(getVal); // Not recommended + * + * When two arguments are provided, `.increase` asserts that the value of the + * given object `subject`'s `prop` property is greater after invoking the + * target function compared to beforehand. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.increase(myObj, 'val'); // Not recommended + * + * Add `.not` earlier in the chain to negate `.increase`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the subject either decreases, or that it stays the same. + * It's often best to identify the exact output that's expected, and then + * write an assertion that only accepts that exact output. + * + * When the subject is expected to decrease, it's often best to assert that it + * decreased by the expected amount. + * + * var myObj = {val: 1} + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.not.increase(myObj, 'val'); // Not recommended + * + * When the subject is expected to stay the same, it's often best to assert + * exactly that. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.not.change(myObj, 'val'); // Recommended + * expect(noop).to.not.increase(myObj, 'val'); // Not recommended + * + * `.increase` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing two arguments, always + * use the second form. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.increase(myObj, 'val', 'nooo why fail??'); + * + * var val = 1 + * , noop = function () {} + * , getVal = function () { return val; }; + * + * expect(noop, 'nooo why fail??').to.increase(getVal); + * + * The alias `.increases` can be used interchangeably with `.increase`. + * + * @name increase + * @alias increases + * @param {String|Function} subject + * @param {String} prop name _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertIncreases (subject, prop, msg) { + if (msg) flag(this, 'message', msg); + var fn = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(fn, flagMsg, ssfi, true).is.a('function'); + + var initial; + if (!prop) { + new Assertion(subject, flagMsg, ssfi, true).is.a('function'); + initial = subject(); + } else { + new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); + initial = subject[prop]; + } + + // Make sure that the target is a number + new Assertion(initial, flagMsg, ssfi, true).is.a('number'); + + fn(); + + var final = prop === undefined || prop === null ? subject() : subject[prop]; + var msgObj = prop === undefined || prop === null ? initial : '.' + prop; + + flag(this, 'deltaMsgObj', msgObj); + flag(this, 'initialDeltaValue', initial); + flag(this, 'finalDeltaValue', final); + flag(this, 'deltaBehavior', 'increase'); + flag(this, 'realDelta', final - initial); + + this.assert( + final - initial > 0 + , 'expected ' + msgObj + ' to increase' + , 'expected ' + msgObj + ' to not increase' + ); + } + + Assertion.addMethod('increase', assertIncreases); + Assertion.addMethod('increases', assertIncreases); + + /** + * ### .decrease(subject[, prop[, msg]]) + * + * When one argument is provided, `.decrease` asserts that the given function + * `subject` returns a lesser number when it's invoked after invoking the + * target function compared to when it's invoked beforehand. `.decrease` also + * causes all `.by` assertions that follow in the chain to assert how much + * lesser of a number is returned. It's often best to assert that the return + * value decreased by the expected amount, rather than asserting it decreased + * by any amount. + * + * var val = 1 + * , subtractTwo = function () { val -= 2; } + * , getVal = function () { return val; }; + * + * expect(subtractTwo).to.decrease(getVal).by(2); // Recommended + * expect(subtractTwo).to.decrease(getVal); // Not recommended + * + * When two arguments are provided, `.decrease` asserts that the value of the + * given object `subject`'s `prop` property is lesser after invoking the + * target function compared to beforehand. + * + * var myObj = {val: 1} + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.decrease(myObj, 'val'); // Not recommended + * + * Add `.not` earlier in the chain to negate `.decrease`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the subject either increases, or that it stays the same. + * It's often best to identify the exact output that's expected, and then + * write an assertion that only accepts that exact output. + * + * When the subject is expected to increase, it's often best to assert that it + * increased by the expected amount. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.not.decrease(myObj, 'val'); // Not recommended + * + * When the subject is expected to stay the same, it's often best to assert + * exactly that. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.not.change(myObj, 'val'); // Recommended + * expect(noop).to.not.decrease(myObj, 'val'); // Not recommended + * + * `.decrease` accepts an optional `msg` argument which is a custom error + * message to show when the assertion fails. The message can also be given as + * the second argument to `expect`. When not providing two arguments, always + * use the second form. + * + * var myObj = {val: 1} + * , noop = function () {}; + * + * expect(noop).to.decrease(myObj, 'val', 'nooo why fail??'); + * + * var val = 1 + * , noop = function () {} + * , getVal = function () { return val; }; + * + * expect(noop, 'nooo why fail??').to.decrease(getVal); + * + * The alias `.decreases` can be used interchangeably with `.decrease`. + * + * @name decrease + * @alias decreases + * @param {String|Function} subject + * @param {String} prop name _optional_ + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertDecreases (subject, prop, msg) { + if (msg) flag(this, 'message', msg); + var fn = flag(this, 'object') + , flagMsg = flag(this, 'message') + , ssfi = flag(this, 'ssfi'); + new Assertion(fn, flagMsg, ssfi, true).is.a('function'); + + var initial; + if (!prop) { + new Assertion(subject, flagMsg, ssfi, true).is.a('function'); + initial = subject(); + } else { + new Assertion(subject, flagMsg, ssfi, true).to.have.property(prop); + initial = subject[prop]; + } + + // Make sure that the target is a number + new Assertion(initial, flagMsg, ssfi, true).is.a('number'); + + fn(); + + var final = prop === undefined || prop === null ? subject() : subject[prop]; + var msgObj = prop === undefined || prop === null ? initial : '.' + prop; + + flag(this, 'deltaMsgObj', msgObj); + flag(this, 'initialDeltaValue', initial); + flag(this, 'finalDeltaValue', final); + flag(this, 'deltaBehavior', 'decrease'); + flag(this, 'realDelta', initial - final); + + this.assert( + final - initial < 0 + , 'expected ' + msgObj + ' to decrease' + , 'expected ' + msgObj + ' to not decrease' + ); + } + + Assertion.addMethod('decrease', assertDecreases); + Assertion.addMethod('decreases', assertDecreases); + + /** + * ### .by(delta[, msg]) + * + * When following an `.increase` assertion in the chain, `.by` asserts that + * the subject of the `.increase` assertion increased by the given `delta`. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); + * + * When following a `.decrease` assertion in the chain, `.by` asserts that the + * subject of the `.decrease` assertion decreased by the given `delta`. + * + * var myObj = {val: 1} + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); + * + * When following a `.change` assertion in the chain, `.by` asserts that the + * subject of the `.change` assertion either increased or decreased by the + * given `delta`. However, it's dangerous to use `.change.by`. The problem is + * that it creates uncertain expectations. It's often best to identify the + * exact output that's expected, and then write an assertion that only accepts + * that exact output. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; } + * , subtractTwo = function () { myObj.val -= 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(2); // Recommended + * expect(addTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * expect(subtractTwo).to.decrease(myObj, 'val').by(2); // Recommended + * expect(subtractTwo).to.change(myObj, 'val').by(2); // Not recommended + * + * Add `.not` earlier in the chain to negate `.by`. However, it's often best + * to assert that the subject changed by its expected delta, rather than + * asserting that it didn't change by one of countless unexpected deltas. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * // Recommended + * expect(addTwo).to.increase(myObj, 'val').by(2); + * + * // Not recommended + * expect(addTwo).to.increase(myObj, 'val').but.not.by(3); + * + * `.by` accepts an optional `msg` argument which is a custom error message to + * show when the assertion fails. The message can also be given as the second + * argument to `expect`. + * + * var myObj = {val: 1} + * , addTwo = function () { myObj.val += 2; }; + * + * expect(addTwo).to.increase(myObj, 'val').by(3, 'nooo why fail??'); + * expect(addTwo, 'nooo why fail??').to.increase(myObj, 'val').by(3); + * + * @name by + * @param {Number} delta + * @param {String} msg _optional_ + * @namespace BDD + * @api public + */ + + function assertDelta(delta, msg) { + if (msg) flag(this, 'message', msg); + + var msgObj = flag(this, 'deltaMsgObj'); + var initial = flag(this, 'initialDeltaValue'); + var final = flag(this, 'finalDeltaValue'); + var behavior = flag(this, 'deltaBehavior'); + var realDelta = flag(this, 'realDelta'); + + var expression; + if (behavior === 'change') { + expression = Math.abs(final - initial) === Math.abs(delta); + } else { + expression = realDelta === Math.abs(delta); + } + + this.assert( + expression + , 'expected ' + msgObj + ' to ' + behavior + ' by ' + delta + , 'expected ' + msgObj + ' to not ' + behavior + ' by ' + delta + ); + } + + Assertion.addMethod('by', assertDelta); + + /** + * ### .extensible + * + * Asserts that the target is extensible, which means that new properties can + * be added to it. Primitives are never extensible. + * + * expect({a: 1}).to.be.extensible; + * + * Add `.not` earlier in the chain to negate `.extensible`. + * + * var nonExtensibleObject = Object.preventExtensions({}) + * , sealedObject = Object.seal({}) + * , frozenObject = Object.freeze({}); + * + * expect(nonExtensibleObject).to.not.be.extensible; + * expect(sealedObject).to.not.be.extensible; + * expect(frozenObject).to.not.be.extensible; + * expect(1).to.not.be.extensible; + * + * A custom error message can be given as the second argument to `expect`. + * + * expect(1, 'nooo why fail??').to.be.extensible; + * + * @name extensible + * @namespace BDD + * @api public + */ + + Assertion.addProperty('extensible', function() { + var obj = flag(this, 'object'); + + // In ES5, if the argument to this method is a primitive, then it will cause a TypeError. + // In ES6, a non-object argument will be treated as if it was a non-extensible ordinary object, simply return false. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible + // The following provides ES6 behavior for ES5 environments. + + var isExtensible = obj === Object(obj) && Object.isExtensible(obj); + + this.assert( + isExtensible + , 'expected #{this} to be extensible' + , 'expected #{this} to not be extensible' + ); + }); + + /** + * ### .sealed + * + * Asserts that the target is sealed, which means that new properties can't be + * added to it, and its existing properties can't be reconfigured or deleted. + * However, it's possible that its existing properties can still be reassigned + * to different values. Primitives are always sealed. + * + * var sealedObject = Object.seal({}); + * var frozenObject = Object.freeze({}); + * + * expect(sealedObject).to.be.sealed; + * expect(frozenObject).to.be.sealed; + * expect(1).to.be.sealed; + * + * Add `.not` earlier in the chain to negate `.sealed`. + * + * expect({a: 1}).to.not.be.sealed; + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({a: 1}, 'nooo why fail??').to.be.sealed; + * + * @name sealed + * @namespace BDD + * @api public + */ + + Assertion.addProperty('sealed', function() { + var obj = flag(this, 'object'); + + // In ES5, if the argument to this method is a primitive, then it will cause a TypeError. + // In ES6, a non-object argument will be treated as if it was a sealed ordinary object, simply return true. + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isSealed + // The following provides ES6 behavior for ES5 environments. + + var isSealed = obj === Object(obj) ? Object.isSealed(obj) : true; + + this.assert( + isSealed + , 'expected #{this} to be sealed' + , 'expected #{this} to not be sealed' + ); + }); + + /** + * ### .frozen + * + * Asserts that the target is frozen, which means that new properties can't be + * added to it, and its existing properties can't be reassigned to different + * values, reconfigured, or deleted. Primitives are always frozen. + * + * var frozenObject = Object.freeze({}); + * + * expect(frozenObject).to.be.frozen; + * expect(1).to.be.frozen; + * + * Add `.not` earlier in the chain to negate `.frozen`. + * + * expect({a: 1}).to.not.be.frozen; + * + * A custom error message can be given as the second argument to `expect`. + * + * expect({a: 1}, 'nooo why fail??').to.be.frozen; + * + * @name frozen + * @namespace BDD + * @api public + */ + + Assertion.addProperty('frozen', function() { + var obj = flag(this, 'object'); + + // In ES5, if the argument to this method is a primitive, then it will cause a TypeError. + // In ES6, a non-object argument will be treated as if it was a frozen ordinary object, simply return true. + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen + // The following provides ES6 behavior for ES5 environments. + + var isFrozen = obj === Object(obj) ? Object.isFrozen(obj) : true; + + this.assert( + isFrozen + , 'expected #{this} to be frozen' + , 'expected #{this} to not be frozen' + ); + }); + + /** + * ### .finite + * + * Asserts that the target is a number, and isn't `NaN` or positive/negative + * `Infinity`. + * + * expect(1).to.be.finite; + * + * Add `.not` earlier in the chain to negate `.finite`. However, it's + * dangerous to do so. The problem is that it creates uncertain expectations + * by asserting that the subject either isn't a number, or that it's `NaN`, or + * that it's positive `Infinity`, or that it's negative `Infinity`. It's often + * best to identify the exact output that's expected, and then write an + * assertion that only accepts that exact output. + * + * When the target isn't expected to be a number, it's often best to assert + * that it's the expected type, rather than asserting that it isn't one of + * many unexpected types. + * + * expect('foo').to.be.a('string'); // Recommended + * expect('foo').to.not.be.finite; // Not recommended + * + * When the target is expected to be `NaN`, it's often best to assert exactly + * that. + * + * expect(NaN).to.be.NaN; // Recommended + * expect(NaN).to.not.be.finite; // Not recommended + * + * When the target is expected to be positive infinity, it's often best to + * assert exactly that. + * + * expect(Infinity).to.equal(Infinity); // Recommended + * expect(Infinity).to.not.be.finite; // Not recommended + * + * When the target is expected to be negative infinity, it's often best to + * assert exactly that. + * + * expect(-Infinity).to.equal(-Infinity); // Recommended + * expect(-Infinity).to.not.be.finite; // Not recommended + * + * A custom error message can be given as the second argument to `expect`. + * + * expect('foo', 'nooo why fail??').to.be.finite; + * + * @name finite + * @namespace BDD + * @api public + */ + + Assertion.addProperty('finite', function(msg) { + var obj = flag(this, 'object'); + + this.assert( + typeof obj === "number" && isFinite(obj) + , 'expected #{this} to be a finite number' + , 'expected #{this} to not be a finite number' + ); + }); +}; diff --git a/.pnpm-store/v11/files/16/29c818e2f04165d6fdd19e7795934b8c598605d1a63f1d8b8f9800e76a94de594a46eb52d3af236e12ee62128681c34a233cb8839d185acd562a839339b5f3 b/.pnpm-store/v11/files/16/29c818e2f04165d6fdd19e7795934b8c598605d1a63f1d8b8f9800e76a94de594a46eb52d3af236e12ee62128681c34a233cb8839d185acd562a839339b5f3 new file mode 100644 index 00000000..a713f6ac --- /dev/null +++ b/.pnpm-store/v11/files/16/29c818e2f04165d6fdd19e7795934b8c598605d1a63f1d8b8f9800e76a94de594a46eb52d3af236e12ee62128681c34a233cb8839d185acd562a839339b5f3 @@ -0,0 +1,152 @@ +/*! + * Chai - addChainingMethod utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependencies + */ + +var addLengthGuard = require('./addLengthGuard'); +var chai = require('../../chai'); +var flag = require('./flag'); +var proxify = require('./proxify'); +var transferFlags = require('./transferFlags'); + +/*! + * Module variables + */ + +// Check whether `Object.setPrototypeOf` is supported +var canSetPrototype = typeof Object.setPrototypeOf === 'function'; + +// Without `Object.setPrototypeOf` support, this module will need to add properties to a function. +// However, some of functions' own props are not configurable and should be skipped. +var testFn = function() {}; +var excludeNames = Object.getOwnPropertyNames(testFn).filter(function(name) { + var propDesc = Object.getOwnPropertyDescriptor(testFn, name); + + // Note: PhantomJS 1.x includes `callee` as one of `testFn`'s own properties, + // but then returns `undefined` as the property descriptor for `callee`. As a + // workaround, we perform an otherwise unnecessary type-check for `propDesc`, + // and then filter it out if it's not an object as it should be. + if (typeof propDesc !== 'object') + return true; + + return !propDesc.configurable; +}); + +// Cache `Function` properties +var call = Function.prototype.call, + apply = Function.prototype.apply; + +/** + * ### .addChainableMethod(ctx, name, method, chainingBehavior) + * + * Adds a method to an object, such that the method can also be chained. + * + * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) { + * var obj = utils.flag(this, 'object'); + * new chai.Assertion(obj).to.be.equal(str); + * }); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior); + * + * The result can then be used as both a method assertion, executing both `method` and + * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`. + * + * expect(fooStr).to.be.foo('bar'); + * expect(fooStr).to.be.foo.equal('foo'); + * + * @param {Object} ctx object to which the method is added + * @param {String} name of method to add + * @param {Function} method function to be used for `name`, when called + * @param {Function} chainingBehavior function to be called every time the property is accessed + * @namespace Utils + * @name addChainableMethod + * @api public + */ + +module.exports = function addChainableMethod(ctx, name, method, chainingBehavior) { + if (typeof chainingBehavior !== 'function') { + chainingBehavior = function () { }; + } + + var chainableBehavior = { + method: method + , chainingBehavior: chainingBehavior + }; + + // save the methods so we can overwrite them later, if we need to. + if (!ctx.__methods) { + ctx.__methods = {}; + } + ctx.__methods[name] = chainableBehavior; + + Object.defineProperty(ctx, name, + { get: function chainableMethodGetter() { + chainableBehavior.chainingBehavior.call(this); + + var chainableMethodWrapper = function () { + // Setting the `ssfi` flag to `chainableMethodWrapper` causes this + // function to be the starting point for removing implementation + // frames from the stack trace of a failed assertion. + // + // However, we only want to use this function as the starting point if + // the `lockSsfi` flag isn't set. + // + // If the `lockSsfi` flag is set, then this assertion is being + // invoked from inside of another assertion. In this case, the `ssfi` + // flag has already been set by the outer assertion. + // + // Note that overwriting a chainable method merely replaces the saved + // methods in `ctx.__methods` instead of completely replacing the + // overwritten assertion. Therefore, an overwriting assertion won't + // set the `ssfi` or `lockSsfi` flags. + if (!flag(this, 'lockSsfi')) { + flag(this, 'ssfi', chainableMethodWrapper); + } + + var result = chainableBehavior.method.apply(this, arguments); + if (result !== undefined) { + return result; + } + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + }; + + addLengthGuard(chainableMethodWrapper, name, true); + + // Use `Object.setPrototypeOf` if available + if (canSetPrototype) { + // Inherit all properties from the object by replacing the `Function` prototype + var prototype = Object.create(this); + // Restore the `call` and `apply` methods from `Function` + prototype.call = call; + prototype.apply = apply; + Object.setPrototypeOf(chainableMethodWrapper, prototype); + } + // Otherwise, redefine all properties (slow!) + else { + var asserterNames = Object.getOwnPropertyNames(ctx); + asserterNames.forEach(function (asserterName) { + if (excludeNames.indexOf(asserterName) !== -1) { + return; + } + + var pd = Object.getOwnPropertyDescriptor(ctx, asserterName); + Object.defineProperty(chainableMethodWrapper, asserterName, pd); + }); + } + + transferFlags(this, chainableMethodWrapper); + return proxify(chainableMethodWrapper); + } + , configurable: true + }); +}; diff --git a/.pnpm-store/v11/files/16/47b2d2ef16987ae33ecbb986768dcfb0dbc9d52305f14151d60bd9f5e121864d027df78b8aca852494c138c02830acf09fb546167ec867aa05e7080b0264f8 b/.pnpm-store/v11/files/16/47b2d2ef16987ae33ecbb986768dcfb0dbc9d52305f14151d60bd9f5e121864d027df78b8aca852494c138c02830acf09fb546167ec867aa05e7080b0264f8 new file mode 100644 index 00000000..35641a64 --- /dev/null +++ b/.pnpm-store/v11/files/16/47b2d2ef16987ae33ecbb986768dcfb0dbc9d52305f14151d60bd9f5e121864d027df78b8aca852494c138c02830acf09fb546167ec867aa05e7080b0264f8 @@ -0,0 +1,99 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// + +interface Atomics { + /** + * Adds a value to the value at the given position in the array, returning the original value. + * Until this atomic operation completes, any other read or write operation against the array + * will block. + */ + add(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; + + /** + * Stores the bitwise AND of a value with the value at the given position in the array, + * returning the original value. Until this atomic operation completes, any other read or + * write operation against the array will block. + */ + and(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; + + /** + * Replaces the value at the given position in the array if the original value equals the given + * expected value, returning the original value. Until this atomic operation completes, any + * other read or write operation against the array will block. + */ + compareExchange(typedArray: BigInt64Array | BigUint64Array, index: number, expectedValue: bigint, replacementValue: bigint): bigint; + + /** + * Replaces the value at the given position in the array, returning the original value. Until + * this atomic operation completes, any other read or write operation against the array will + * block. + */ + exchange(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; + + /** + * Returns the value at the given position in the array. Until this atomic operation completes, + * any other read or write operation against the array will block. + */ + load(typedArray: BigInt64Array | BigUint64Array, index: number): bigint; + + /** + * Stores the bitwise OR of a value with the value at the given position in the array, + * returning the original value. Until this atomic operation completes, any other read or write + * operation against the array will block. + */ + or(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; + + /** + * Stores a value at the given position in the array, returning the new value. Until this + * atomic operation completes, any other read or write operation against the array will block. + */ + store(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; + + /** + * Subtracts a value from the value at the given position in the array, returning the original + * value. Until this atomic operation completes, any other read or write operation against the + * array will block. + */ + sub(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; + + /** + * If the value at the given position in the array is equal to the provided value, the current + * agent is put to sleep causing execution to suspend until the timeout expires (returning + * `"timed-out"`) or until the agent is awoken (returning `"ok"`); otherwise, returns + * `"not-equal"`. + */ + wait(typedArray: BigInt64Array, index: number, value: bigint, timeout?: number): "ok" | "not-equal" | "timed-out"; + + /** + * Wakes up sleeping agents that are waiting on the given index of the array, returning the + * number of agents that were awoken. + * @param typedArray A shared BigInt64Array. + * @param index The position in the typedArray to wake up on. + * @param count The number of sleeping agents to notify. Defaults to +Infinity. + */ + notify(typedArray: BigInt64Array, index: number, count?: number): number; + + /** + * Stores the bitwise XOR of a value with the value at the given position in the array, + * returning the original value. Until this atomic operation completes, any other read or write + * operation against the array will block. + */ + xor(typedArray: BigInt64Array | BigUint64Array, index: number, value: bigint): bigint; +} diff --git a/.pnpm-store/v11/files/16/51eea689489db92f922817485a75b3d1936dfecbbceaf09a67daba641ebe20622aa30fb357d240127df35ea0bc3dff2c6196641b6512b2234fd3213a55ba9f b/.pnpm-store/v11/files/16/51eea689489db92f922817485a75b3d1936dfecbbceaf09a67daba641ebe20622aa30fb357d240127df35ea0bc3dff2c6196641b6512b2234fd3213a55ba9f new file mode 100644 index 00000000..a7ce24e6 --- /dev/null +++ b/.pnpm-store/v11/files/16/51eea689489db92f922817485a75b3d1936dfecbbceaf09a67daba641ebe20622aa30fb357d240127df35ea0bc3dff2c6196641b6512b2234fd3213a55ba9f @@ -0,0 +1,13 @@ +var colors = require('../colors'); + +module['exports'] = (function () { + var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV + return function (letter, i, exploded) { + if (letter === " ") { + return letter; + } else { + return colors[rainbowColors[i++ % rainbowColors.length]](letter); + } + }; +})(); + diff --git a/.pnpm-store/v11/files/16/55a256136346cee0739f99e3f3801221bdd4435e24a76d308ee14311196d8a6aa14807b9112c93188815f17b0ccd92f6c35ea5137001c22db2d7b3fbf43575 b/.pnpm-store/v11/files/16/55a256136346cee0739f99e3f3801221bdd4435e24a76d308ee14311196d8a6aa14807b9112c93188815f17b0ccd92f6c35ea5137001c22db2d7b3fbf43575 new file mode 100644 index 00000000..80e7128d --- /dev/null +++ b/.pnpm-store/v11/files/16/55a256136346cee0739f99e3f3801221bdd4435e24a76d308ee14311196d8a6aa14807b9112c93188815f17b0ccd92f6c35ea5137001c22db2d7b3fbf43575 @@ -0,0 +1,75 @@ +# is-extglob [![NPM version](https://badge.fury.io/js/is-extglob.svg)](http://badge.fury.io/js/is-extglob) [![Build Status](https://travis-ci.org/jonschlinkert/is-extglob.svg)](https://travis-ci.org/jonschlinkert/is-extglob) + +> Returns true if a string has an extglob. + +## Install with [npm](npmjs.org) + +```bash +npm i is-extglob --save +``` + +## Usage + +```js +var isExtglob = require('is-extglob'); +``` + +**True** + +```js +isExtglob('?(abc)'); +isExtglob('@(abc)'); +isExtglob('!(abc)'); +isExtglob('*(abc)'); +isExtglob('+(abc)'); +``` + +**False** + +Everything else... + +```js +isExtglob('foo.js'); +isExtglob('!foo.js'); +isExtglob('*.js'); +isExtglob('**/abc.js'); +isExtglob('abc/*.js'); +isExtglob('abc/(aaa|bbb).js'); +isExtglob('abc/[a-z].js'); +isExtglob('abc/{a,b}.js'); +isExtglob('abc/?.js'); +isExtglob('abc.js'); +isExtglob('abc/def/ghi.js'); +``` + +## Related +* [extglob](https://github.com/jonschlinkert/extglob): Extended globs. extglobs add the expressive power of regular expressions to glob patterns. +* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. +* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. + +## Run tests +Install dev dependencies. + +```bash +npm i -d && npm test +``` + + +## Contributing +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-extglob/issues) + + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License +Copyright (c) 2015 Jon Schlinkert +Released under the MIT license + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 06, 2015._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/16/5833b38ac24058595471531b755b5d2e924d0046b52852f9636900ba6a553ca9fcf7ba23dcf5a6b3a68fc7ffbb90e1846cfc7ae9d2ef9b7bd9ca2a77c92dd6 b/.pnpm-store/v11/files/16/5833b38ac24058595471531b755b5d2e924d0046b52852f9636900ba6a553ca9fcf7ba23dcf5a6b3a68fc7ffbb90e1846cfc7ae9d2ef9b7bd9ca2a77c92dd6 new file mode 100644 index 00000000..c8826565 --- /dev/null +++ b/.pnpm-store/v11/files/16/5833b38ac24058595471531b755b5d2e924d0046b52852f9636900ba6a553ca9fcf7ba23dcf5a6b3a68fc7ffbb90e1846cfc7ae9d2ef9b7bd9ca2a77c92dd6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sumBy', require('../sumBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/16/60e31ef3d99d63e8f5c02ebcc96f5921d08a16727d650f3fb1e6b2518918e9c884806405a146d5eae8da9f2591d96b1bf7e4b64778d19cba3cb4cd88f14980 b/.pnpm-store/v11/files/16/60e31ef3d99d63e8f5c02ebcc96f5921d08a16727d650f3fb1e6b2518918e9c884806405a146d5eae8da9f2591d96b1bf7e4b64778d19cba3cb4cd88f14980 new file mode 100644 index 00000000..3f09f7f7 --- /dev/null +++ b/.pnpm-store/v11/files/16/60e31ef3d99d63e8f5c02ebcc96f5921d08a16727d650f3fb1e6b2518918e9c884806405a146d5eae8da9f2591d96b1bf7e4b64778d19cba3cb4cd88f14980 @@ -0,0 +1,22 @@ +var baseFlatten = require('./_baseFlatten'); + +/** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ +function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; +} + +module.exports = flatten; diff --git a/.pnpm-store/v11/files/16/7aac275fa47c0d05d91fa9a62dae3922314ff6aaeeca3161005ce349c789eea642b79ad1f6f5fbc30ff183eba1440744df9dfdc5aa333f4ad955b3fc5dbe2f b/.pnpm-store/v11/files/16/7aac275fa47c0d05d91fa9a62dae3922314ff6aaeeca3161005ce349c789eea642b79ad1f6f5fbc30ff183eba1440744df9dfdc5aa333f4ad955b3fc5dbe2f new file mode 100644 index 00000000..96cbb2b7 --- /dev/null +++ b/.pnpm-store/v11/files/16/7aac275fa47c0d05d91fa9a62dae3922314ff6aaeeca3161005ce349c789eea642b79ad1f6f5fbc30ff183eba1440744df9dfdc5aa333f4ad955b3fc5dbe2f @@ -0,0 +1,108 @@ +{ + "name": "braces", + "description": "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.", + "version": "2.3.2", + "homepage": "https://github.com/micromatch/braces", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Elan Shanker (https://github.com/es128)", + "Eugene Sharygin (https://github.com/eush77)", + "hemanth.hm (http://h3manth.com)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)" + ], + "repository": "micromatch/braces", + "bugs": { + "url": "https://github.com/micromatch/braces/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "benchmark": "node benchmark" + }, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "devDependencies": { + "ansi-cyan": "^0.1.1", + "benchmarked": "^2.0.0", + "brace-expansion": "^1.1.8", + "cross-spawn": "^5.1.0", + "gulp": "^3.9.1", + "gulp-eslint": "^4.0.0", + "gulp-format-md": "^1.0.0", + "gulp-istanbul": "^1.1.2", + "gulp-mocha": "^3.0.1", + "gulp-unused": "^0.2.1", + "is-windows": "^1.0.1", + "minimatch": "^3.0.4", + "mocha": "^3.2.0", + "noncharacters": "^1.1.0", + "text-table": "^0.2.0", + "time-diff": "^0.3.1", + "yargs-parser": "^8.0.0" + }, + "keywords": [ + "alpha", + "alphabetical", + "bash", + "brace", + "braces", + "expand", + "expansion", + "filepath", + "fill", + "fs", + "glob", + "globbing", + "letter", + "match", + "matches", + "matching", + "number", + "numerical", + "path", + "range", + "ranges", + "sh" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "lint": { + "reflinks": true + }, + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "expand-brackets", + "extglob", + "fill-range", + "micromatch", + "nanomatch" + ] + } + } +} diff --git a/.pnpm-store/v11/files/16/8b09536a9e3b3f6d84aadf49cdd49392f40081bfe70d00433ed1c89cd958a807a27343c76d0faa5eedb68b9aa3ecf5ad03f84ff7d68962fbf9c23e42fd330d b/.pnpm-store/v11/files/16/8b09536a9e3b3f6d84aadf49cdd49392f40081bfe70d00433ed1c89cd958a807a27343c76d0faa5eedb68b9aa3ecf5ad03f84ff7d68962fbf9c23e42fd330d new file mode 100644 index 00000000..813866e4 --- /dev/null +++ b/.pnpm-store/v11/files/16/8b09536a9e3b3f6d84aadf49cdd49392f40081bfe70d00433ed1c89cd958a807a27343c76d0faa5eedb68b9aa3ecf5ad03f84ff7d68962fbf9c23e42fd330d @@ -0,0 +1,29 @@ +var baseLt = require('./_baseLt'), + createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is less than `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + * @see _.gt + * @example + * + * _.lt(1, 3); + * // => true + * + * _.lt(3, 3); + * // => false + * + * _.lt(3, 1); + * // => false + */ +var lt = createRelationalOperation(baseLt); + +module.exports = lt; diff --git a/.pnpm-store/v11/files/16/b4d0d1e66357d2171deac8f03e985e7aea6166f886152fe89885fbfaef0b14f069ef5ced3b40a39e0b3181679c095c1bf77994b1478c8a770509de51c5c564 b/.pnpm-store/v11/files/16/b4d0d1e66357d2171deac8f03e985e7aea6166f886152fe89885fbfaef0b14f069ef5ced3b40a39e0b3181679c095c1bf77994b1478c8a770509de51c5c564 new file mode 100644 index 00000000..d8e638b4 --- /dev/null +++ b/.pnpm-store/v11/files/16/b4d0d1e66357d2171deac8f03e985e7aea6166f886152fe89885fbfaef0b14f069ef5ced3b40a39e0b3181679c095c1bf77994b1478c8a770509de51c5c564 @@ -0,0 +1,145 @@ +'use strict'; + +var fs = require('fs'); +var path = require('path'); +var define = require('define-property'); +var utils = require('./utils'); + +/** + * Expose `mixin()`. + * This code is based on `source-maps-support.js` in reworkcss/css + * https://github.com/reworkcss/css/blob/master/lib/stringify/source-map-support.js + * Copyright (c) 2012 TJ Holowaychuk + */ + +module.exports = mixin; + +/** + * Mixin source map support into `compiler`. + * + * @param {Object} `compiler` + * @api public + */ + +function mixin(compiler) { + define(compiler, '_comment', compiler.comment); + compiler.map = new utils.SourceMap.SourceMapGenerator(); + compiler.position = { line: 1, column: 1 }; + compiler.content = {}; + compiler.files = {}; + + for (var key in exports) { + define(compiler, key, exports[key]); + } +} + +/** + * Update position. + * + * @param {String} str + */ + +exports.updatePosition = function(str) { + var lines = str.match(/\n/g); + if (lines) this.position.line += lines.length; + var i = str.lastIndexOf('\n'); + this.position.column = ~i ? str.length - i : this.position.column + str.length; +}; + +/** + * Emit `str` with `position`. + * + * @param {String} str + * @param {Object} [pos] + * @return {String} + */ + +exports.emit = function(str, node) { + var position = node.position || {}; + var source = position.source; + if (source) { + if (position.filepath) { + source = utils.unixify(position.filepath); + } + + this.map.addMapping({ + source: source, + generated: { + line: this.position.line, + column: Math.max(this.position.column - 1, 0) + }, + original: { + line: position.start.line, + column: position.start.column - 1 + } + }); + + if (position.content) { + this.addContent(source, position); + } + if (position.filepath) { + this.addFile(source, position); + } + + this.updatePosition(str); + this.output += str; + } + return str; +}; + +/** + * Adds a file to the source map output if it has not already been added + * @param {String} `file` + * @param {Object} `pos` + */ + +exports.addFile = function(file, position) { + if (typeof position.content !== 'string') return; + if (Object.prototype.hasOwnProperty.call(this.files, file)) return; + this.files[file] = position.content; +}; + +/** + * Adds a content source to the source map output if it has not already been added + * @param {String} `source` + * @param {Object} `position` + */ + +exports.addContent = function(source, position) { + if (typeof position.content !== 'string') return; + if (Object.prototype.hasOwnProperty.call(this.content, source)) return; + this.map.setSourceContent(source, position.content); +}; + +/** + * Applies any original source maps to the output and embeds the source file + * contents in the source map. + */ + +exports.applySourceMaps = function() { + Object.keys(this.files).forEach(function(file) { + var content = this.files[file]; + this.map.setSourceContent(file, content); + + if (this.options.inputSourcemaps === true) { + var originalMap = utils.sourceMapResolve.resolveSync(content, file, fs.readFileSync); + if (originalMap) { + var map = new utils.SourceMap.SourceMapConsumer(originalMap.map); + var relativeTo = originalMap.sourcesRelativeTo; + this.map.applySourceMap(map, file, utils.unixify(path.dirname(relativeTo))); + } + } + }, this); +}; + +/** + * Process comments, drops sourceMap comments. + * @param {Object} node + */ + +exports.comment = function(node) { + if (/^# sourceMappingURL=/.test(node.comment)) { + return this.emit('', node.position); + } + return this._comment(node); +}; diff --git a/.pnpm-store/v11/files/16/c6cbef78531359b32dcc8f0362f61374d0c94e555a0540224b3839d6461c45e665502101a915f533ca7dbbe27fe68f2b1f79b197db452ad39a70f0a989a81b b/.pnpm-store/v11/files/16/c6cbef78531359b32dcc8f0362f61374d0c94e555a0540224b3839d6461c45e665502101a915f533ca7dbbe27fe68f2b1f79b197db452ad39a70f0a989a81b new file mode 100644 index 00000000..32c562ca --- /dev/null +++ b/.pnpm-store/v11/files/16/c6cbef78531359b32dcc8f0362f61374d0c94e555a0540224b3839d6461c45e665502101a915f533ca7dbbe27fe68f2b1f79b197db452ad39a70f0a989a81b @@ -0,0 +1,30 @@ +var createToPairs = require('./_createToPairs'), + keysIn = require('./keysIn'); + +/** + * Creates an array of own and inherited enumerable string keyed-value pairs + * for `object` which can be consumed by `_.fromPairs`. If `object` is a map + * or set, its entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entriesIn + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairsIn(new Foo); + * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) + */ +var toPairsIn = createToPairs(keysIn); + +module.exports = toPairsIn; diff --git a/.pnpm-store/v11/files/16/dd7c66a4f15fab4ca189f99022ad9ad736ffaeb1165cdcf4182d27185132b14b49db0a0684f5a8a8345e7bee414bdeb693686ebfeb56fcd35284f19c63e591 b/.pnpm-store/v11/files/16/dd7c66a4f15fab4ca189f99022ad9ad736ffaeb1165cdcf4182d27185132b14b49db0a0684f5a8a8345e7bee414bdeb693686ebfeb56fcd35284f19c63e591 new file mode 100644 index 00000000..ff4ec015 --- /dev/null +++ b/.pnpm-store/v11/files/16/dd7c66a4f15fab4ca189f99022ad9ad736ffaeb1165cdcf4182d27185132b14b49db0a0684f5a8a8345e7bee414bdeb693686ebfeb56fcd35284f19c63e591 @@ -0,0 +1,2 @@ +import { ISumanChildProcess } from "suman-types/dts/runner"; +export declare const logTestResult: (data: any, n: ISumanChildProcess) => void; diff --git a/.pnpm-store/v11/files/16/e01786c7d92745eaf940c77464504eff734b264a09536e0e1d93291870a40b0957344267aef9d411708c936baadc13cac893070aed4b30c54fa39baf4ccfd5 b/.pnpm-store/v11/files/16/e01786c7d92745eaf940c77464504eff734b264a09536e0e1d93291870a40b0957344267aef9d411708c936baadc13cac893070aed4b30c54fa39baf4ccfd5 new file mode 100644 index 00000000..5a31e423 --- /dev/null +++ b/.pnpm-store/v11/files/16/e01786c7d92745eaf940c77464504eff734b264a09536e0e1d93291870a40b0957344267aef9d411708c936baadc13cac893070aed4b30c54fa39baf4ccfd5 @@ -0,0 +1 @@ +export declare const acquireIocStaticDeps: () => Promise; diff --git a/.pnpm-store/v11/files/16/e3fafbc8d45f802ad98c7ca2220e7d01f603cc94e8489f8f07997326f3d31c2e7d5fbcb085483e2af651e377101f17b182c66be37e733da7f6644856a5e33a b/.pnpm-store/v11/files/16/e3fafbc8d45f802ad98c7ca2220e7d01f603cc94e8489f8f07997326f3d31c2e7d5fbcb085483e2af651e377101f17b182c66be37e733da7f6644856a5e33a new file mode 100644 index 00000000..4f0e0874 --- /dev/null +++ b/.pnpm-store/v11/files/16/e3fafbc8d45f802ad98c7ca2220e7d01f603cc94e8489f8f07997326f3d31c2e7d5fbcb085483e2af651e377101f17b182c66be37e733da7f6644856a5e33a @@ -0,0 +1,91 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const fs = require("fs"); +const path = require("path"); +const mkdirp = require("mkdirp"); +const async = require("async"); +const _ = require("lodash"); +const su = require("suman-utils"); +exports.run = function (projecRoot, paths, dest, isForce) { + const pths = _.flattenDeep([paths]); + console.log('paths => ', pths); + async.mapLimit(pths, 5, function (p, cb) { + if (!path.isAbsolute(p)) { + p = path.resolve(projecRoot + '/' + p); + } + console.log('p => ', p); + fs.stat(p, function (err, stats) { + if (err) { + return cb(null, { + error: err + }); + } + if (stats.isDirectory()) { + return cb(null, { + error: `cannot convert directory: ${p}` + }); + } + if (stats.isFile()) { + return cb(null, { + file: p + }); + } + return cb(null, { + error: 'unknown problem, note that suman cannot currently convert symlinked files.' + }); + }); + }, function (err, results) { + if (err) { + throw err; + } + const errors = results.filter(function (r) { + return r.error; + }); + if (errors.length > 0) { + console.log(' => the following errors need to be resolved before converting your test files from Mocha to Suman.'); + errors.forEach(function (e) { + console.log(e.error.stack || e.error); + }); + return; + } + const files = results.filter(function (r) { + return r.file; + }) + .map(function (r) { + return r.file; + }); + console.log('The following files will be converted:'); + files.forEach(function (f) { + console.log('f => ', f); + }); + const mapped = su.removeSharedRootPath(files).map(function (fileArr) { + return { + originalPath: fileArr[0], + mappedPath: path.resolve(dest + '/' + fileArr[1]) + }; + }); + console.log('mapped => ', mapped); + async.eachLimit(mapped, 5, function (fileObj, cb) { + mkdirp(path.dirname(fileObj.mappedPath), function (err) { + if (err) { + return cb(err); + } + const writable = fs.createWriteStream(fileObj.mappedPath); + writable.write("\nconst suman = require('suman');"); + writable.write('\nconst Test = suman.init(module);\n'); + writable.write('\nTest.create(function(describe, it, before, after, beforeEach, afterEach){\n\n'); + fs.createReadStream(fileObj.originalPath) + .pipe(writable) + .once('finish', function () { + console.log('ended and stuff'); + fs.appendFile(fileObj.mappedPath, '\n\n});\n', cb); + }); + }); + }, function (err) { + if (err) { + throw err; + } + console.log('all done converting.'); + }); + }); +}; diff --git a/.pnpm-store/v11/files/16/ecc1751067805cd5f7fd47c054e3ab251303aa5d1051d86c78edea8bc6d800f4ec01cf9478d4003774a2e77961a539c2cffe7134f40965d2b85a7bdad1e7f4 b/.pnpm-store/v11/files/16/ecc1751067805cd5f7fd47c054e3ab251303aa5d1051d86c78edea8bc6d800f4ec01cf9478d4003774a2e77961a539c2cffe7134f40965d2b85a7bdad1e7f4 new file mode 100644 index 00000000..824228c7 --- /dev/null +++ b/.pnpm-store/v11/files/16/ecc1751067805cd5f7fd47c054e3ab251303aa5d1051d86c78edea8bc6d800f4ec01cf9478d4003774a2e77961a539c2cffe7134f40965d2b85a7bdad1e7f4 @@ -0,0 +1,84 @@ +var SetCache = require('./_SetCache'), + arraySome = require('./_arraySome'), + cacheHas = require('./_cacheHas'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Check that cyclic values are equal. + var arrStacked = stack.get(array); + var othStacked = stack.get(other); + if (arrStacked && othStacked) { + return arrStacked == other && othStacked == array; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +module.exports = equalArrays; diff --git a/.pnpm-store/v11/files/16/f8e0b75a36a019fd7b653022dcda7c17757dbf5876ff09268578b1c9c6fd3a937fb12984266390ca67451eae8deda8916c6ff1e45bf058907e81c2d393c8ff b/.pnpm-store/v11/files/16/f8e0b75a36a019fd7b653022dcda7c17757dbf5876ff09268578b1c9c6fd3a937fb12984266390ca67451eae8deda8916c6ff1e45bf058907e81c2d393c8ff new file mode 100644 index 00000000..8dd49a54 --- /dev/null +++ b/.pnpm-store/v11/files/16/f8e0b75a36a019fd7b653022dcda7c17757dbf5876ff09268578b1c9c6fd3a937fb12984266390ca67451eae8deda8916c6ff1e45bf058907e81c2d393c8ff @@ -0,0 +1,88 @@ +{ + "name": "is-descriptor", + "version": "0.1.8", + "description": "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@\">= 10.2\" audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/is-descriptor.git" + }, + "keywords": [ + "accessor", + "check", + "data", + "descriptor", + "get", + "getter", + "is", + "keys", + "object", + "properties", + "property", + "set", + "setter", + "type", + "valid", + "value" + ], + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "license": "MIT", + "bugs": { + "url": "https://github.com/inspect-js/is-descriptor/issues" + }, + "homepage": "https://github.com/inspect-js/is-descriptor", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "(https://github.com/wtgtybhertgeghgtwtg)" + ], + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "devDependencies": { + "@ljharb/eslint-config": "^22.2.3", + "auto-changelog": "^2.5.1", + "eslint": "^8.57.1", + "evalmd": "^0.0.19", + "has-proto": "^1.2.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.5", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/.pnpm-store/v11/files/17/0f326568824ad6cfba9549036e47e41f3fa54d6bbadddad04742029617f53e9370f97711a84927b44b7aa7a770d846cec6cb2b76cf3cfcede5c5c712a05cf3 b/.pnpm-store/v11/files/17/0f326568824ad6cfba9549036e47e41f3fa54d6bbadddad04742029617f53e9370f97711a84927b44b7aa7a770d846cec6cb2b76cf3cfcede5c5c712a05cf3 new file mode 100644 index 00000000..fa17dd21 --- /dev/null +++ b/.pnpm-store/v11/files/17/0f326568824ad6cfba9549036e47e41f3fa54d6bbadddad04742029617f53e9370f97711a84927b44b7aa7a770d846cec6cb2b76cf3cfcede5c5c712a05cf3 @@ -0,0 +1,82 @@ +{ + "name": "fill-range", + "description": "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`", + "version": "4.0.0", + "homepage": "https://github.com/jonschlinkert/fill-range", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + " (https://github.com/wtgtybhertgeghgtwtg)", + "Edo Rivai (edo.rivai.nl)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Paul Miller (paulmillr.com)" + ], + "repository": "jonschlinkert/fill-range", + "bugs": { + "url": "https://github.com/jonschlinkert/fill-range/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "devDependencies": { + "ansi-cyan": "^0.1.1", + "benchmarked": "^1.0.0", + "gulp-format-md": "^0.1.12", + "minimist": "^1.2.0", + "mocha": "^3.2.0" + }, + "keywords": [ + "alpha", + "alphabetical", + "array", + "bash", + "brace", + "expand", + "expansion", + "fill", + "glob", + "match", + "matches", + "matching", + "number", + "numerical", + "range", + "ranges", + "regex", + "sh" + ], + "verb": { + "related": { + "list": [ + "braces", + "expand-range", + "micromatch", + "to-regex-range" + ] + }, + "toc": true, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/17/17c5d42c32d3bb82aadb01f9004d69b63b66e7904acc7ae8c37caa6fe07cb5daf0761792344be01a620d63c76e91e8afb0932664518db926a020096511f0a9 b/.pnpm-store/v11/files/17/17c5d42c32d3bb82aadb01f9004d69b63b66e7904acc7ae8c37caa6fe07cb5daf0761792344be01a620d63c76e91e8afb0932664518db926a020096511f0a9 new file mode 100644 index 00000000..8ead7d4a --- /dev/null +++ b/.pnpm-store/v11/files/17/17c5d42c32d3bb82aadb01f9004d69b63b66e7904acc7ae8c37caa6fe07cb5daf0761792344be01a620d63c76e91e8afb0932664518db926a020096511f0a9 @@ -0,0 +1,449 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^net|tls|https$" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const http = require('http'); +const https = require('https'); +const net = require('net'); +const tls = require('tls'); +const { createHash } = require('crypto'); + +const PerMessageDeflate = require('./permessage-deflate'); +const WebSocket = require('./websocket'); +const { format, parse } = require('./extension'); +const { GUID, kWebSocket } = require('./constants'); + +const keyRegex = /^[+/0-9A-Za-z]{22}==$/; + +const RUNNING = 0; +const CLOSING = 1; +const CLOSED = 2; + +/** + * Class representing a WebSocket server. + * + * @extends EventEmitter + */ +class WebSocketServer extends EventEmitter { + /** + * Create a `WebSocketServer` instance. + * + * @param {Object} options Configuration options + * @param {Number} [options.backlog=511] The maximum length of the queue of + * pending connections + * @param {Boolean} [options.clientTracking=true] Specifies whether or not to + * track clients + * @param {Function} [options.handleProtocols] A hook to handle protocols + * @param {String} [options.host] The hostname where to bind the server + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Boolean} [options.noServer=false] Enable no server mode + * @param {String} [options.path] Accept only connections matching this path + * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable + * permessage-deflate + * @param {Number} [options.port] The port where to bind the server + * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S + * server to use + * @param {Function} [options.verifyClient] A hook to reject connections + * @param {Function} [callback] A listener for the `listening` event + */ + constructor(options, callback) { + super(); + + options = { + maxPayload: 100 * 1024 * 1024, + perMessageDeflate: false, + handleProtocols: null, + clientTracking: true, + verifyClient: null, + noServer: false, + backlog: null, // use default (511 as implemented in net.js) + server: null, + host: null, + path: null, + port: null, + ...options + }; + + if ( + (options.port == null && !options.server && !options.noServer) || + (options.port != null && (options.server || options.noServer)) || + (options.server && options.noServer) + ) { + throw new TypeError( + 'One and only one of the "port", "server", or "noServer" options ' + + 'must be specified' + ); + } + + if (options.port != null) { + this._server = http.createServer((req, res) => { + const body = http.STATUS_CODES[426]; + + res.writeHead(426, { + 'Content-Length': body.length, + 'Content-Type': 'text/plain' + }); + res.end(body); + }); + this._server.listen( + options.port, + options.host, + options.backlog, + callback + ); + } else if (options.server) { + this._server = options.server; + } + + if (this._server) { + const emitConnection = this.emit.bind(this, 'connection'); + + this._removeListeners = addListeners(this._server, { + listening: this.emit.bind(this, 'listening'), + error: this.emit.bind(this, 'error'), + upgrade: (req, socket, head) => { + this.handleUpgrade(req, socket, head, emitConnection); + } + }); + } + + if (options.perMessageDeflate === true) options.perMessageDeflate = {}; + if (options.clientTracking) this.clients = new Set(); + this.options = options; + this._state = RUNNING; + } + + /** + * Returns the bound address, the address family name, and port of the server + * as reported by the operating system if listening on an IP socket. + * If the server is listening on a pipe or UNIX domain socket, the name is + * returned as a string. + * + * @return {(Object|String|null)} The address of the server + * @public + */ + address() { + if (this.options.noServer) { + throw new Error('The server is operating in "noServer" mode'); + } + + if (!this._server) return null; + return this._server.address(); + } + + /** + * Close the server. + * + * @param {Function} [cb] Callback + * @public + */ + close(cb) { + if (cb) this.once('close', cb); + + if (this._state === CLOSED) { + process.nextTick(emitClose, this); + return; + } + + if (this._state === CLOSING) return; + this._state = CLOSING; + + // + // Terminate all associated clients. + // + if (this.clients) { + for (const client of this.clients) client.terminate(); + } + + const server = this._server; + + if (server) { + this._removeListeners(); + this._removeListeners = this._server = null; + + // + // Close the http server if it was internally created. + // + if (this.options.port != null) { + server.close(emitClose.bind(undefined, this)); + return; + } + } + + process.nextTick(emitClose, this); + } + + /** + * See if a given request should be handled by this server instance. + * + * @param {http.IncomingMessage} req Request object to inspect + * @return {Boolean} `true` if the request is valid, else `false` + * @public + */ + shouldHandle(req) { + if (this.options.path) { + const index = req.url.indexOf('?'); + const pathname = index !== -1 ? req.url.slice(0, index) : req.url; + + if (pathname !== this.options.path) return false; + } + + return true; + } + + /** + * Handle a HTTP Upgrade request. + * + * @param {http.IncomingMessage} req The request object + * @param {(net.Socket|tls.Socket)} socket The network socket between the + * server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @public + */ + handleUpgrade(req, socket, head, cb) { + socket.on('error', socketOnError); + + const key = + req.headers['sec-websocket-key'] !== undefined + ? req.headers['sec-websocket-key'].trim() + : false; + const upgrade = req.headers.upgrade; + const version = +req.headers['sec-websocket-version']; + const extensions = {}; + + if ( + req.method !== 'GET' || + upgrade === undefined || + upgrade.toLowerCase() !== 'websocket' || + !key || + !keyRegex.test(key) || + (version !== 8 && version !== 13) || + !this.shouldHandle(req) + ) { + return abortHandshake(socket, 400); + } + + if (this.options.perMessageDeflate) { + const perMessageDeflate = new PerMessageDeflate( + this.options.perMessageDeflate, + true, + this.options.maxPayload + ); + + try { + const offers = parse(req.headers['sec-websocket-extensions']); + + if (offers[PerMessageDeflate.extensionName]) { + perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]); + extensions[PerMessageDeflate.extensionName] = perMessageDeflate; + } + } catch (err) { + return abortHandshake(socket, 400); + } + } + + // + // Optionally call external client verification handler. + // + if (this.options.verifyClient) { + const info = { + origin: + req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`], + secure: !!(req.socket.authorized || req.socket.encrypted), + req + }; + + if (this.options.verifyClient.length === 2) { + this.options.verifyClient(info, (verified, code, message, headers) => { + if (!verified) { + return abortHandshake(socket, code || 401, message, headers); + } + + this.completeUpgrade(key, extensions, req, socket, head, cb); + }); + return; + } + + if (!this.options.verifyClient(info)) return abortHandshake(socket, 401); + } + + this.completeUpgrade(key, extensions, req, socket, head, cb); + } + + /** + * Upgrade the connection to WebSocket. + * + * @param {String} key The value of the `Sec-WebSocket-Key` header + * @param {Object} extensions The accepted extensions + * @param {http.IncomingMessage} req The request object + * @param {(net.Socket|tls.Socket)} socket The network socket between the + * server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Function} cb Callback + * @throws {Error} If called more than once with the same socket + * @private + */ + completeUpgrade(key, extensions, req, socket, head, cb) { + // + // Destroy the socket if the client has already sent a FIN packet. + // + if (!socket.readable || !socket.writable) return socket.destroy(); + + if (socket[kWebSocket]) { + throw new Error( + 'server.handleUpgrade() was called more than once with the same ' + + 'socket, possibly due to a misconfiguration' + ); + } + + if (this._state > RUNNING) return abortHandshake(socket, 503); + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + const headers = [ + 'HTTP/1.1 101 Switching Protocols', + 'Upgrade: websocket', + 'Connection: Upgrade', + `Sec-WebSocket-Accept: ${digest}` + ]; + + const ws = new WebSocket(null); + let protocol = req.headers['sec-websocket-protocol']; + + if (protocol) { + protocol = protocol.split(',').map(trim); + + // + // Optionally call external protocol selection handler. + // + if (this.options.handleProtocols) { + protocol = this.options.handleProtocols(protocol, req); + } else { + protocol = protocol[0]; + } + + if (protocol) { + headers.push(`Sec-WebSocket-Protocol: ${protocol}`); + ws._protocol = protocol; + } + } + + if (extensions[PerMessageDeflate.extensionName]) { + const params = extensions[PerMessageDeflate.extensionName].params; + const value = format({ + [PerMessageDeflate.extensionName]: [params] + }); + headers.push(`Sec-WebSocket-Extensions: ${value}`); + ws._extensions = extensions; + } + + // + // Allow external modification/inspection of handshake headers. + // + this.emit('headers', headers, req); + + socket.write(headers.concat('\r\n').join('\r\n')); + socket.removeListener('error', socketOnError); + + ws.setSocket(socket, head, this.options.maxPayload); + + if (this.clients) { + this.clients.add(ws); + ws.on('close', () => this.clients.delete(ws)); + } + + cb(ws, req); + } +} + +module.exports = WebSocketServer; + +/** + * Add event listeners on an `EventEmitter` using a map of + * pairs. + * + * @param {EventEmitter} server The event emitter + * @param {Object.} map The listeners to add + * @return {Function} A function that will remove the added listeners when + * called + * @private + */ +function addListeners(server, map) { + for (const event of Object.keys(map)) server.on(event, map[event]); + + return function removeListeners() { + for (const event of Object.keys(map)) { + server.removeListener(event, map[event]); + } + }; +} + +/** + * Emit a `'close'` event on an `EventEmitter`. + * + * @param {EventEmitter} server The event emitter + * @private + */ +function emitClose(server) { + server._state = CLOSED; + server.emit('close'); +} + +/** + * Handle premature socket errors. + * + * @private + */ +function socketOnError() { + this.destroy(); +} + +/** + * Close the connection when preconditions are not fulfilled. + * + * @param {(net.Socket|tls.Socket)} socket The socket of the upgrade request + * @param {Number} code The HTTP response status code + * @param {String} [message] The HTTP response body + * @param {Object} [headers] Additional HTTP response headers + * @private + */ +function abortHandshake(socket, code, message, headers) { + if (socket.writable) { + message = message || http.STATUS_CODES[code]; + headers = { + Connection: 'close', + 'Content-Type': 'text/html', + 'Content-Length': Buffer.byteLength(message), + ...headers + }; + + socket.write( + `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\r\n` + + Object.keys(headers) + .map((h) => `${h}: ${headers[h]}`) + .join('\r\n') + + '\r\n\r\n' + + message + ); + } + + socket.removeListener('error', socketOnError); + socket.destroy(); +} + +/** + * Remove whitespace characters from both ends of a string. + * + * @param {String} str The string + * @return {String} A new string representing `str` stripped of whitespace + * characters from both its beginning and end + * @private + */ +function trim(str) { + return str.trim(); +} diff --git a/.pnpm-store/v11/files/17/27791c0f3adb45d4c979466235ce7f4d62c058e73f90478755c223c44de949849e5177cd13b94f871dc852cec8f371716a5475c5f9153587da4f6fadec2419 b/.pnpm-store/v11/files/17/27791c0f3adb45d4c979466235ce7f4d62c058e73f90478755c223c44de949849e5177cd13b94f871dc852cec8f371716a5475c5f9153587da4f6fadec2419 new file mode 100644 index 00000000..b59f40b8 --- /dev/null +++ b/.pnpm-store/v11/files/17/27791c0f3adb45d4c979466235ce7f4d62c058e73f90478755c223c44de949849e5177cd13b94f871dc852cec8f371716a5475c5f9153587da4f6fadec2419 @@ -0,0 +1,15 @@ +var isObject = require('./isObject'); + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +module.exports = isStrictComparable; diff --git a/.pnpm-store/v11/files/17/29c36942a48ad39603ef3ff3ded574bd8388aea1d94517a773f08e038fcd7902a5e4ca294c98954e113e63a9ffb77d5a6d7e8980edf58b2e380fea13b15ea5 b/.pnpm-store/v11/files/17/29c36942a48ad39603ef3ff3ded574bd8388aea1d94517a773f08e038fcd7902a5e4ca294c98954e113e63a9ffb77d5a6d7e8980edf58b2e380fea13b15ea5 new file mode 100644 index 00000000..6b834558 --- /dev/null +++ b/.pnpm-store/v11/files/17/29c36942a48ad39603ef3ff3ded574bd8388aea1d94517a773f08e038fcd7902a5e4ca294c98954e113e63a9ffb77d5a6d7e8980edf58b2e380fea13b15ea5 @@ -0,0 +1,139 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const domain = require("domain"); +const chalk = require("chalk"); +const async = require("async"); +const suman_utils_1 = require("suman-utils"); +const helpers = require('../test-suite-helpers/handle-promise-generator'); +const general_1 = require("./general"); +const all_hook_param_1 = require("../test-suite-params/all-hook/all-hook-param"); +const suman_constants_1 = require("../config/suman-constants"); +const _suman = global.__suman = (global.__suman || {}); +exports.runAfterAlways = function (suman, cb) { + const allDescribeBlocks = suman.allDescribeBlocks; + _suman.afterAlwaysEngaged = true; + process.on('uncaughtException', function (e) { + debugger; + _suman.log.error('There was an uncaught exception, however, we are currently processing after.always blocks, ' + + 'so this exception will be ignored. => \n', chalk.magenta(suman_utils_1.default.getCleanErrStr(e))); + }); + process.on('unhandledRejection', function (e) { + debugger; + _suman.log.error('There was an unhandled rejection, however, we are currently processing after.always blocks, ' + + 'so this exception will be ignored. => \n', chalk.magenta(suman_utils_1.default.getCleanErrStr(e))); + }); + if (_suman.afterAlwaysHasBeenRegistered) { + _suman.log.error(chalk.cyan('At least one after.always hook has been registered for test with name:'), '\n\t\t', chalk.magenta.bold('"' + suman.desc + '"')); + _suman.log.error(chalk.yellow('We are currently running after.always hooks. Any uncaught errors ' + + 'will be ignored as best as possible.')); + } + async.eachSeries(allDescribeBlocks, function (block, cb) { + block.mergeAfters(); + const aftersAlways = block.getAfters().filter(function (anAfter) { + return anAfter.always; + }); + async.eachSeries(aftersAlways, function (anAfter, cb) { + const timerObj = { + timer: setTimeout(onTimeout, _suman.weAreDebugging ? 5000000 : anAfter.timeout) + }; + const assertCount = { + num: 0 + }; + const d = domain.create(); + d._sumanBeforeOrAfter = true; + d._sumanBeforeOrAfterDesc = anAfter.desc || '(unknown)'; + const fini = function (err, someBool) { + err && console.error(' Error (this error was ignored by Suman) => ', err.stack || err); + clearTimeout(timerObj.timer); + process.nextTick(cb, null); + }; + let dError = false; + const handleError = function (err) { + const stk = err ? (err.stack || err) : new Error('Suman error placeholder').stack; + const formatedStk = String(stk).split('\n').map(item => '\t' + item).join('\n'); + if (!dError) { + dError = true; + _suman.writeTestError(' => Suman non-fatal error => Normally fatal error in hook, but "fatal" option for the hook ' + + 'is set to false => \n' + formatedStk); + fini(err, false); + } + else { + _suman.writeTestError(' => Suman error => Error in hook => \n' + formatedStk); + } + }; + d.on('error', handleError); + const fnStr = anAfter.fn.toString(); + function onTimeout() { + fini(general_1.cloneError(anAfter.warningErr, suman_constants_1.constants.warnings.HOOK_TIMED_OUT_ERROR), true); + } + process.nextTick(function () { + d.run(function () { + let warn = false; + if (fnStr.indexOf('Promise') > 0 || fnStr.indexOf('async') === 0) { + warn = true; + } + const isGeneratorFn = suman_utils_1.default.isGeneratorFn(anAfter.fn); + function timeout(val) { + clearTimeout(timerObj.timer); + timerObj.timer = setTimeout(onTimeout, _suman.weAreDebugging ? 5000000 : val); + } + function handleNonCallbackMode(err) { + err = err ? ('Also, you have this error => ' + err.stack || err) : ''; + handleError(new Error('Callback mode for this test-case/hook is not enabled, use .cb to enabled it.\n' + err)); + } + const t = new all_hook_param_1.AllHookParam(anAfter, assertCount, handleError, fini, timerObj); + fini.thot = t; + t.timeout = timeout; + t.fatal = function fatal(err) { + err = err || new Error('Suman placeholder error since this function was not explicitly passed an error object as first argument.'); + fini(err, false); + }; + let arg; + if (isGeneratorFn) { + const handleGenerator = helpers.makeHandleGenerator(fini); + arg = t; + handleGenerator(anAfter.fn, arg, anAfter.ctx); + } + else if (anAfter.cb) { + t.callbackMode = true; + const d = function done(err) { + if (!t.callbackMode) { + handleNonCallbackMode(err); + } + else { + fini(err, false); + } + }; + t.done = function done(err) { + if (!t.callbackMode) { + handleNonCallbackMode(err); + } + else { + fini(err, false); + } + }; + t.ctn = function ctn(err) { + if (!t.callbackMode) { + handleNonCallbackMode(err); + } + else { + fini(null, false); + } + }; + arg = Object.setPrototypeOf(d, t); + if (anAfter.fn.call(anAfter.ctx, arg)) { + _suman.writeTestError(general_1.cloneError(anAfter.warningErr, suman_constants_1.constants.warnings.RETURNED_VAL_DESPITE_CALLBACK_MODE, true).stack); + } + } + else { + const handlePotentialPromise = helpers.handleReturnVal(fini, fnStr); + arg = t; + handlePotentialPromise(anAfter.fn.call(anAfter.ctx, arg), warn); + } + }); + }); + }, cb); + }, cb); +}; diff --git a/.pnpm-store/v11/files/17/44218b5085916266538eaca503e01b90da09735f7593a7e3f2f14ef9c61c076d12b868402dd3ed80804aaa7fe8f0d21d7009e894073214414fe74c0665c0f7 b/.pnpm-store/v11/files/17/44218b5085916266538eaca503e01b90da09735f7593a7e3f2f14ef9c61c076d12b868402dd3ed80804aaa7fe8f0d21d7009e894073214414fe74c0665c0f7 new file mode 100644 index 00000000..a663f0a4 --- /dev/null +++ b/.pnpm-store/v11/files/17/44218b5085916266538eaca503e01b90da09735f7593a7e3f2f14ef9c61c076d12b868402dd3ed80804aaa7fe8f0d21d7009e894073214414fe74c0665c0f7 @@ -0,0 +1,40 @@ +FROM node:10 + +RUN apt-get -y update +RUN apt-get -y install sudo +RUN sudo apt-get -y update +RUN apt-get install -y netcat +RUN apt-get install -y rsync + +RUN sudo echo "node ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers + +ENV FORCE_COLOR=1 +ENV docker_r2g_in_container=yes + +USER node +ENV USER="node" +ENV HOME="/home/node" +RUN mkdir -p /home/node/.docker_r2g_cache +RUN mkdir -p /home/node/app/node_modules +WORKDIR /home/node/app + +RUN sudo chmod -R 777 /home/node +RUN sudo chown -R $(whoami) $(npm config get prefix)/lib +RUN sudo chown -R $(whoami) $(npm config get prefix)/lib/node_modules +RUN sudo chown -R $(whoami) $(npm config get prefix)/bin +RUN sudo chown -R $(whoami) $(npm config get prefix)/share +RUN sudo chown -R $(whoami) /usr/local/lib +RUN sudo chown -R $(whoami) /usr/local/etc + + +ARG CACHEBUST=1 + +RUN npm install --loglevel=warn -g "@oresoftware/docker.r2g@latest" +RUN npm install --loglevel=warn -g "@oresoftware/r2g@latest" + +COPY . . + +RUN sudo chmod -R 777 /home/node + +ENTRYPOINT ["docker.r2g", "run"] + diff --git a/.pnpm-store/v11/files/17/4d00f41d249238900b6c74a550529f22f244a96c019126ea4f9fbb63b9c1bf7941dd07390faa43f59f655d0b212c98541d7f02a4d16e9038e0f08df7e57187 b/.pnpm-store/v11/files/17/4d00f41d249238900b6c74a550529f22f244a96c019126ea4f9fbb63b9c1bf7941dd07390faa43f59f655d0b212c98541d7f02a4d16e9038e0f08df7e57187 new file mode 100644 index 00000000..e98881fc --- /dev/null +++ b/.pnpm-store/v11/files/17/4d00f41d249238900b6c74a550529f22f244a96c019126ea4f9fbb63b9c1bf7941dd07390faa43f59f655d0b212c98541d7f02a4d16e9038e0f08df7e57187 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('dropRight', require('../dropRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/17/4fb19f3fca23a0180400dc4fa87eb7230d072fe79f040f0b454fd35566a05bb8dd201bf2c180594a512745984f4d365333f637841b8bdbfca6898ec8412ec8 b/.pnpm-store/v11/files/17/4fb19f3fca23a0180400dc4fa87eb7230d072fe79f040f0b454fd35566a05bb8dd201bf2c180594a512745984f4d365333f637841b8bdbfca6898ec8412ec8 new file mode 100644 index 00000000..23776f32 --- /dev/null +++ b/.pnpm-store/v11/files/17/4fb19f3fca23a0180400dc4fa87eb7230d072fe79f040f0b454fd35566a05bb8dd201bf2c180594a512745984f4d365333f637841b8bdbfca6898ec8412ec8 @@ -0,0 +1,48 @@ +var baseLodash = require('./_baseLodash'), + wrapperClone = require('./_wrapperClone'); + +/** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ +function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; + } + previous.__wrapped__ = value; + return result; +} + +module.exports = wrapperPlant; diff --git a/.pnpm-store/v11/files/17/618e1e2eacad949cc6cb1327bd2f05b24418d3199b471ec72dbdbd848b19a28eb6fcae1ad8d68ea868d083d08b05103f118ac5c279ba8b535af747588dea96 b/.pnpm-store/v11/files/17/618e1e2eacad949cc6cb1327bd2f05b24418d3199b471ec72dbdbd848b19a28eb6fcae1ad8d68ea868d083d08b05103f118ac5c279ba8b535af747588dea96 new file mode 100644 index 00000000..cf46f10d --- /dev/null +++ b/.pnpm-store/v11/files/17/618e1e2eacad949cc6cb1327bd2f05b24418d3199b471ec72dbdbd848b19a28eb6fcae1ad8d68ea868d083d08b05103f118ac5c279ba8b535af747588dea96 @@ -0,0 +1,64 @@ +var baseTrim = require('./_baseTrim'), + isObject = require('./isObject'), + isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +module.exports = toNumber; diff --git a/.pnpm-store/v11/files/17/69f1e7f18f4be7f75a436a1a38517dd515422bc13a34567561f43192b57e3aed6e799707c10d1072b228def831679bb1115c14e3787583e5ec1247abec0cdf b/.pnpm-store/v11/files/17/69f1e7f18f4be7f75a436a1a38517dd515422bc13a34567561f43192b57e3aed6e799707c10d1072b228def831679bb1115c14e3787583e5ec1247abec0cdf new file mode 100644 index 00000000..d8d7f943 --- /dev/null +++ b/.pnpm-store/v11/files/17/69f1e7f18f4be7f75a436a1a38517dd515422bc13a34567561f43192b57e3aed6e799707c10d1072b228def831679bb1115c14e3787583e5ec1247abec0cdf @@ -0,0 +1,19 @@ +Copyright Node.js contributors. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/17/95a25b24dbf0ef73e5487ab592ab8fb6901982dfcc11c1a29c519d48c18964a6840ccd621ffd64ab69bd275886d604c879c8fca1ff1050741ad77612a55e0b b/.pnpm-store/v11/files/17/95a25b24dbf0ef73e5487ab592ab8fb6901982dfcc11c1a29c519d48c18964a6840ccd621ffd64ab69bd275886d604c879c8fca1ff1050741ad77612a55e0b new file mode 100644 index 00000000..47c49f62 --- /dev/null +++ b/.pnpm-store/v11/files/17/95a25b24dbf0ef73e5487ab592ab8fb6901982dfcc11c1a29c519d48c18964a6840ccd621ffd64ab69bd275886d604c879c8fca1ff1050741ad77612a55e0b @@ -0,0 +1,58 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function () /*...args*/{ + return _seq2.default.apply(null, (0, _slice2.default)(arguments).reverse()); +}; + +var _seq = require('./seq'); + +var _seq2 = _interopRequireDefault(_seq); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +; + +/** + * Creates a function which is a composition of the passed asynchronous + * functions. Each function consumes the return value of the function that + * follows. Composing functions `f()`, `g()`, and `h()` would produce the result + * of `f(g(h()))`, only this version uses callbacks to obtain the return values. + * + * Each function is executed with the `this` binding of the composed function. + * + * @name compose + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {...AsyncFunction} functions - the asynchronous functions to compose + * @returns {Function} an asynchronous function that is the composed + * asynchronous `functions` + * @example + * + * function add1(n, callback) { + * setTimeout(function () { + * callback(null, n + 1); + * }, 10); + * } + * + * function mul3(n, callback) { + * setTimeout(function () { + * callback(null, n * 3); + * }, 10); + * } + * + * var add1mul3 = async.compose(mul3, add1); + * add1mul3(4, function (err, result) { + * // result now equals 15 + * }); + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/17/b02c4e6f123cb1970a6acf8bc19e1f202118162b51480a3589a0616ae2cf37c9f2646de0bb309d9f61705db74f54c22e4e64e676e0fdc09b6e5c3e53fa1add b/.pnpm-store/v11/files/17/b02c4e6f123cb1970a6acf8bc19e1f202118162b51480a3589a0616ae2cf37c9f2646de0bb309d9f61705db74f54c22e4e64e676e0fdc09b6e5c3e53fa1add new file mode 100644 index 00000000..2dec8926 --- /dev/null +++ b/.pnpm-store/v11/files/17/b02c4e6f123cb1970a6acf8bc19e1f202118162b51480a3589a0616ae2cf37c9f2646de0bb309d9f61705db74f54c22e4e64e676e0fdc09b6e5c3e53fa1add @@ -0,0 +1,13 @@ +/** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function cacheHas(cache, key) { + return cache.has(key); +} + +module.exports = cacheHas; diff --git a/.pnpm-store/v11/files/17/b173ecb1d2a79fd7333c459527dc967f266b88fbfa7de14dcdc85339d9de0a9ee699f1f0300d97e080b7957947d423f332a3a51f934414c93fa68b8aa1cbcc b/.pnpm-store/v11/files/17/b173ecb1d2a79fd7333c459527dc967f266b88fbfa7de14dcdc85339d9de0a9ee699f1f0300d97e080b7957947d423f332a3a51f934414c93fa68b8aa1cbcc new file mode 100644 index 00000000..f32cd4d3 --- /dev/null +++ b/.pnpm-store/v11/files/17/b173ecb1d2a79fd7333c459527dc967f266b88fbfa7de14dcdc85339d9de0a9ee699f1f0300d97e080b7957947d423f332a3a51f934414c93fa68b8aa1cbcc @@ -0,0 +1,65 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll, limit, iteratee, callback) { + callback = callback || _noop2.default; + var _iteratee = (0, _wrapAsync2.default)(iteratee); + (0, _mapLimit2.default)(coll, limit, function (val, callback) { + _iteratee(val, function (err /*, ...args*/) { + if (err) return callback(err); + return callback(null, (0, _slice2.default)(arguments, 1)); + }); + }, function (err, mapResults) { + var result = []; + for (var i = 0; i < mapResults.length; i++) { + if (mapResults[i]) { + result = _concat.apply(result, mapResults[i]); + } + } + + return callback(err, result); + }); +}; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var _concat = Array.prototype.concat; + +/** + * The same as [`concat`]{@link module:Collections.concat} but runs a maximum of `limit` async operations at a time. + * + * @name concatLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.concat]{@link module:Collections.concat} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A function to apply to each item in `coll`, + * which should use an array as its result. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished, or an error occurs. Results is an array + * containing the concatenated results of the `iteratee` function. Invoked with + * (err, results). + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/17/c4856d04f075be231738e59fc971c8f17f51e93146eaa66b500f3970076c1cc8abab44ee6eb2328cf7a7ca830971ecb84fbb8c32ece4a151b78f01e64cc039 b/.pnpm-store/v11/files/17/c4856d04f075be231738e59fc971c8f17f51e93146eaa66b500f3970076c1cc8abab44ee6eb2328cf7a7ca830971ecb84fbb8c32ece4a151b78f01e64cc039 new file mode 100644 index 00000000..bd554796 --- /dev/null +++ b/.pnpm-store/v11/files/17/c4856d04f075be231738e59fc971c8f17f51e93146eaa66b500f3970076c1cc8abab44ee6eb2328cf7a7ca830971ecb84fbb8c32ece4a151b78f01e64cc039 @@ -0,0 +1,28 @@ +var baseDelay = require('./_baseDelay'), + baseRest = require('./_baseRest'), + toNumber = require('./toNumber'); + +/** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ +var delay = baseRest(function(func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); +}); + +module.exports = delay; diff --git a/.pnpm-store/v11/files/17/eabf40bf381458a30093450d1ec658bf5b23a0080752debe2e052b03b018f94e40537810cdbe7ea1fe135cafd124032957a850e68ebe3d9e9cc3433fb1c0b0 b/.pnpm-store/v11/files/17/eabf40bf381458a30093450d1ec658bf5b23a0080752debe2e052b03b018f94e40537810cdbe7ea1fe135cafd124032957a850e68ebe3d9e9cc3433fb1c0b0 new file mode 100644 index 00000000..ac221174 --- /dev/null +++ b/.pnpm-store/v11/files/17/eabf40bf381458a30093450d1ec658bf5b23a0080752debe2e052b03b018f94e40537810cdbe7ea1fe135cafd124032957a850e68ebe3d9e9cc3433fb1c0b0 @@ -0,0 +1,73 @@ + +# socket.io-parser + +[![Build Status](https://secure.travis-ci.org/socketio/socket.io-parser.svg?branch=master)](http://travis-ci.org/socketio/socket.io-parser) +[![NPM version](https://badge.fury.io/js/socket.io-parser.svg)](http://badge.fury.io/js/socket.io-parser) + +A socket.io encoder and decoder written in JavaScript complying with version `3` +of [socket.io-protocol](https://github.com/socketio/socket.io-protocol). +Used by [socket.io](https://github.com/automattic/socket.io) and +[socket.io-client](https://github.com/automattic/socket.io-client). + +## Parser API + + socket.io-parser is the reference implementation of socket.io-protocol. Read + the full API here: + [socket.io-protocol](https://github.com/learnboost/socket.io-protocol). + +## Example Usage + +### Encoding and decoding a packet + +```js +var parser = require('socket.io-parser'); +var encoder = new parser.Encoder(); +var packet = { + type: parser.EVENT, + data: 'test-packet', + id: 13 +}; +encoder.encode(packet, function(encodedPackets) { + var decoder = new parser.Decoder(); + decoder.on('decoded', function(decodedPacket) { + // decodedPacket.type == parser.EVENT + // decodedPacket.data == 'test-packet' + // decodedPacket.id == 13 + }); + + for (var i = 0; i < encodedPackets.length; i++) { + decoder.add(encodedPackets[i]); + } +}); +``` + +### Encoding and decoding a packet with binary data + +```js +var parser = require('socket.io-parser'); +var encoder = new parser.Encoder(); +var packet = { + type: parser.BINARY_EVENT, + data: {i: new Buffer(1234), j: new Blob([new ArrayBuffer(2)])} + id: 15 +}; +encoder.encode(packet, function(encodedPackets) { + var decoder = new parser.Decoder(); + decoder.on('decoded', function(decodedPacket) { + // decodedPacket.type == parser.BINARY_EVENT + // Buffer.isBuffer(decodedPacket.data.i) == true + // Buffer.isBuffer(decodedPacket.data.j) == true + // decodedPacket.id == 15 + }); + + for (var i = 0; i < encodedPackets.length; i++) { + decoder.add(encodedPackets[i]); + } +}); +``` +See the test suite for more examples of how socket.io-parser is used. + + +## License + +MIT diff --git a/.pnpm-store/v11/files/18/15d31a3d3fca2b3c211a256ecf687286c5d2b8633dd74a74609fc9eb4f0b8f59bc0eee81cbbb130e1434b927df423d2a310455e19f3abe013affb144044f56 b/.pnpm-store/v11/files/18/15d31a3d3fca2b3c211a256ecf687286c5d2b8633dd74a74609fc9eb4f0b8f59bc0eee81cbbb130e1434b927df423d2a310455e19f3abe013affb144044f56 new file mode 100644 index 00000000..a87bb4b5 --- /dev/null +++ b/.pnpm-store/v11/files/18/15d31a3d3fca2b3c211a256ecf687286c5d2b8633dd74a74609fc9eb4f0b8f59bc0eee81cbbb130e1434b927df423d2a310455e19f3abe013affb144044f56 @@ -0,0 +1 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;oboop'), ['beep', { op: '>' }, 'boop']); + t.same(parse('beep 2>boop'), ['beep', '2', { op: '>' }, 'boop']); + t.same(parse('beep>blip'), + ['beep', { op: ';;' }, 'boop', { op: '|&' }, 'byte', { op: '>>' }, 'blip'] + ); + + t.same(parse('beep 2>&1'), ['beep', '2', { op: '>&' }, '1']); + + t.same( + parse('beep<(boop)'), + ['beep', { op: '<(' }, 'boop', { op: ')' }] + ); + t.same( + parse('beep<<(boop)'), + ['beep', { op: '<' }, { op: '<(' }, 'boop', { op: ')' }] + ); + + t.end(); +}); + +test('duplicating input file descriptors', function (t) { + // duplicating stdout to file descriptor 3 + t.same(parse('beep 3<&1'), ['beep', '3', { op: '<&' }, '1']); + + // duplicating stdout to file descriptor 0, i.e. stdin + t.same(parse('beep <&1'), ['beep', { op: '<&' }, '1']); + + // closes stdin + t.same(parse('beep <&-'), ['beep', { op: '<&' }, '-']); + + t.end(); +}); + +test('here strings', function (t) { + t.same(parse('cat <<< "hello world"'), ['cat', { op: '<<<' }, 'hello world']); + t.same(parse('cat <<< hello'), ['cat', { op: '<<<' }, 'hello']); + t.same(parse('cat<< Map `visit` over an array of objects. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save map-visit +``` + +## Usage + +```js +var mapVisit = require('map-visit'); +``` + +## What does this do? + +**Assign/Merge/Extend vs. Visit** + +Let's say you want to add a `set` method to your application that will: + +* set key-value pairs on a `data` object +* extend objects onto the `data` object +* extend arrays of objects onto the data object + +**Example using `extend`** + +Here is one way to accomplish this using Lo-Dash's `extend` (comparable to `Object.assign`): + +```js +var _ = require('lodash'); + +var obj = { + data: {}, + set: function (key, value) { + if (Array.isArray(key)) { + _.extend.apply(_, [obj.data].concat(key)); + } else if (typeof key === 'object') { + _.extend(obj.data, key); + } else { + obj.data[key] = value; + } + } +}; + +obj.set('a', 'a'); +obj.set([{b: 'b'}, {c: 'c'}]); +obj.set({d: {e: 'f'}}); + +console.log(obj.data); +//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }} +``` + +The above approach works fine for most use cases. However, **if you also want to emit an event** each time a property is added to the `data` object, or you want more control over what happens as the object is extended, a better approach would be to use `visit`. + +**Example using `visit`** + +In this approach: + +* when an array is passed to `set`, the `mapVisit` library calls the `set` method on each object in the array. +* when an object is passed, `visit` calls `set` on each property in the object. + +As a result, the `data` event will be emitted every time a property is added to `data` (events are just an example, you can use this approach to perform any necessary logic every time the method is called). + +```js +var mapVisit = require('map-visit'); +var visit = require('object-visit'); + +var obj = { + data: {}, + set: function (key, value) { + if (Array.isArray(key)) { + mapVisit(obj, 'set', key); + } else if (typeof key === 'object') { + visit(obj, 'set', key); + } else { + // simulate an event-emitter + console.log('emit', key, value); + obj.data[key] = value; + } + } +}; + +obj.set('a', 'a'); +obj.set([{b: 'b'}, {c: 'c'}]); +obj.set({d: {e: 'f'}}); +obj.set({g: 'h', i: 'j', k: 'l'}); + +console.log(obj.data); +//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }, g: 'h', i: 'j', k: 'l'} + +// events would look something like: +// emit a a +// emit b b +// emit c c +// emit d { e: 'f' } +// emit g h +// emit i j +// emit k l +``` + +## About + +### Related projects + +* [collection-visit](https://www.npmjs.com/package/collection-visit): Visit a method over the items in an object, or map visit over the objects… [more](https://github.com/jonschlinkert/collection-visit) | [homepage](https://github.com/jonschlinkert/collection-visit "Visit a method over the items in an object, or map visit over the objects in an array.") +* [object-visit](https://www.npmjs.com/package/object-visit): Call a specified method on each value in the given object. | [homepage](https://github.com/jonschlinkert/object-visit "Call a specified method on each value in the given object.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 15 | [jonschlinkert](https://github.com/jonschlinkert) | +| 7 | [doowb](https://github.com/doowb) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 09, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/18/2a888fa1f6f93247b67515652ccbb3281fe328e7b55dca5fcb9f644677c6425a40980494684183d356eb0a9f8c3f1f31f9cb0800e52151a8cd4c80cf260c4d b/.pnpm-store/v11/files/18/2a888fa1f6f93247b67515652ccbb3281fe328e7b55dca5fcb9f644677c6425a40980494684183d356eb0a9f8c3f1f31f9cb0800e52151a8cd4c80cf260c4d new file mode 100644 index 00000000..98b96b81 --- /dev/null +++ b/.pnpm-store/v11/files/18/2a888fa1f6f93247b67515652ccbb3281fe328e7b55dca5fcb9f644677c6425a40980494684183d356eb0a9f8c3f1f31f9cb0800e52151a8cd4c80cf260c4d @@ -0,0 +1,41 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +///////////////////////////// +/// Window Async Iterable APIs +///////////////////////////// + +interface FileSystemDirectoryHandleAsyncIterator extends AsyncIteratorObject { + [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator; +} + +interface FileSystemDirectoryHandle { + [Symbol.asyncIterator](): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>; + entries(): FileSystemDirectoryHandleAsyncIterator<[string, FileSystemHandle]>; + keys(): FileSystemDirectoryHandleAsyncIterator; + values(): FileSystemDirectoryHandleAsyncIterator; +} + +interface ReadableStreamAsyncIterator extends AsyncIteratorObject { + [Symbol.asyncIterator](): ReadableStreamAsyncIterator; +} + +interface ReadableStream { + [Symbol.asyncIterator](options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; + values(options?: ReadableStreamIteratorOptions): ReadableStreamAsyncIterator; +} diff --git a/.pnpm-store/v11/files/18/4bb5edea8ae0cb0200222845070e133c5ea624d8bf96fced15d413ee3574f4bd9c32e11e4f05feeaea33e565ee5a60982fd3e09d0c26a6111224644d0672b8 b/.pnpm-store/v11/files/18/4bb5edea8ae0cb0200222845070e133c5ea624d8bf96fced15d413ee3574f4bd9c32e11e4f05feeaea33e565ee5a60982fd3e09d0c26a6111224644d0672b8 new file mode 100644 index 00000000..9b93ca7b --- /dev/null +++ b/.pnpm-store/v11/files/18/4bb5edea8ae0cb0200222845070e133c5ea624d8bf96fced15d413ee3574f4bd9c32e11e4f05feeaea33e565ee5a60982fd3e09d0c26a6111224644d0672b8 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').setImmediate; diff --git a/.pnpm-store/v11/files/18/54185dd662a7396c3f89017f7061ec057f30170a2fc8ad1823b92085ce89631e33c69217f7cbd9f5a4e156536cce5ffc2f8766f72dc22a33ec2365f6155b34 b/.pnpm-store/v11/files/18/54185dd662a7396c3f89017f7061ec057f30170a2fc8ad1823b92085ce89631e33c69217f7cbd9f5a4e156536cce5ffc2f8766f72dc22a33ec2365f6155b34 new file mode 100644 index 00000000..c23abcc8 --- /dev/null +++ b/.pnpm-store/v11/files/18/54185dd662a7396c3f89017f7061ec057f30170a2fc8ad1823b92085ce89631e33c69217f7cbd9f5a4e156536cce5ffc2f8766f72dc22a33ec2365f6155b34 @@ -0,0 +1,13 @@ +// The version number has been artificially set to 3.4, instead of 3.0, +// because of the existing uuid-js npm types package being at 3.3.28, +// meaning that `npm install @types/uuid` was installing the typings for uuid-js, not this + +import { v1, v4 } from "./interfaces"; + +interface UuidStatic { + v1: v1; + v4: v4; +} + +declare const uuid: UuidStatic & v4; +export = uuid; diff --git a/.pnpm-store/v11/files/18/7aa1bd8157818a565b3a4ad4489147f32fde6a593e99061b6f4a11db4e76a9089d84d030fe1715e50644333dd390b8847789da668ffdc60787e57ece04bae5 b/.pnpm-store/v11/files/18/7aa1bd8157818a565b3a4ad4489147f32fde6a593e99061b6f4a11db4e76a9089d84d030fe1715e50644333dd390b8847789da668ffdc60787e57ece04bae5 new file mode 100644 index 00000000..f16082e6 --- /dev/null +++ b/.pnpm-store/v11/files/18/7aa1bd8157818a565b3a4ad4489147f32fde6a593e99061b6f4a11db4e76a9089d84d030fe1715e50644333dd390b8847789da668ffdc60787e57ece04bae5 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/18/a63205870619443c7c8c4569749761848bb8d5d52a6c8bb1b2901b00d8442556a288a0bc4c4f645b086421d07bcd6b4a7a6413d62822cc5ff8f0d3905c43eb b/.pnpm-store/v11/files/18/a63205870619443c7c8c4569749761848bb8d5d52a6c8bb1b2901b00d8442556a288a0bc4c4f645b086421d07bcd6b4a7a6413d62822cc5ff8f0d3905c43eb new file mode 100644 index 00000000..759c2c5a --- /dev/null +++ b/.pnpm-store/v11/files/18/a63205870619443c7c8c4569749761848bb8d5d52a6c8bb1b2901b00d8442556a288a0bc4c4f645b086421d07bcd6b4a7a6413d62822cc5ff8f0d3905c43eb @@ -0,0 +1,14 @@ +# Enforce Unix newlines +*.* text eol=lf +*.css text eol=lf +*.html text eol=lf +*.js text eol=lf +*.json text eol=lf +*.less text eol=lf +*.md text eol=lf +*.yml text eol=lf + +*.jpg binary +*.gif binary +*.png binary +*.jpeg binary \ No newline at end of file diff --git a/.pnpm-store/v11/files/18/b98aa0d31cf03266ebc4750fc505b608bce786c4a7af0de9863b41d63391be1c37b900002cc9f3d4e7d4095e0bf0a41b9f7b62108e56f87b66140c1c520ca0 b/.pnpm-store/v11/files/18/b98aa0d31cf03266ebc4750fc505b608bce786c4a7af0de9863b41d63391be1c37b900002cc9f3d4e7d4095e0bf0a41b9f7b62108e56f87b66140c1c520ca0 new file mode 100644 index 00000000..82048c5e --- /dev/null +++ b/.pnpm-store/v11/files/18/b98aa0d31cf03266ebc4750fc505b608bce786c4a7af0de9863b41d63391be1c37b900002cc9f3d4e7d4095e0bf0a41b9f7b62108e56f87b66140c1c520ca0 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('divide', require('../divide')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/18/c73db0e76be4207572a187b82e7ed777da6c8b4c35ac019d61411dbec646b651640d5e3962517b44b8355adf39648818d9f3e5e93240061e61dc167044e736 b/.pnpm-store/v11/files/18/c73db0e76be4207572a187b82e7ed777da6c8b4c35ac019d61411dbec646b651640d5e3962517b44b8355adf39648818d9f3e5e93240061e61dc167044e736 new file mode 100644 index 00000000..6afbf231 --- /dev/null +++ b/.pnpm-store/v11/files/18/c73db0e76be4207572a187b82e7ed777da6c8b4c35ac019d61411dbec646b651640d5e3962517b44b8355adf39648818d9f3e5e93240061e61dc167044e736 @@ -0,0 +1,48 @@ +{ + "name": "v8flags", + "version": "3.2.0", + "description": "Get available v8 and Node.js flags.", + "author": "Gulp Team (http://gulpjs.com/)", + "contributors": [ + "Tyler Kellen ", + "Blaine Bublitz ", + "Nicolò Ribaudo ", + "Selwyn ", + "Leo Zhang " + ], + "repository": "gulpjs/v8flags", + "license": "MIT", + "engines": { + "node": ">= 0.10" + }, + "main": "index.js", + "files": [ + "index.js", + "config-path.js", + "LICENSE" + ], + "scripts": { + "lint": "eslint .", + "pretest": "npm run lint", + "test": "mocha --async-only", + "cover": "istanbul cover _mocha --report lcovonly", + "coveralls": "npm run cover && istanbul-coveralls" + }, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "devDependencies": { + "async": "^2.5.0", + "eslint": "^2.13.0", + "eslint-config-gulp": "^3.0.1", + "expect": "^1.20.2", + "istanbul": "^0.4.3", + "istanbul-coveralls": "^1.0.3", + "mocha": "^3.5.3", + "proxyquire": "^1.8.0" + }, + "keywords": [ + "v8 flags", + "harmony flags" + ] +} diff --git a/.pnpm-store/v11/files/18/df00f5d8747c25672b643b9977e0e5b3d1a0019c1ada7d2170446eb029b5fe568b66b90ce47c135da6450ef47c9723ef7391372d17c1c59039a084ebd1792c b/.pnpm-store/v11/files/18/df00f5d8747c25672b643b9977e0e5b3d1a0019c1ada7d2170446eb029b5fe568b66b90ce47c135da6450ef47c9723ef7391372d17c1c59039a084ebd1792c new file mode 100644 index 00000000..a2efcb5e --- /dev/null +++ b/.pnpm-store/v11/files/18/df00f5d8747c25672b643b9977e0e5b3d1a0019c1ada7d2170446eb029b5fe568b66b90ce47c135da6450ef47c9723ef7391372d17c1c59039a084ebd1792c @@ -0,0 +1,29 @@ +var baseRest = require('./_baseRest'), + pullAll = require('./pullAll'); + +/** + * Removes all given values from `array` using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` + * to remove elements from an array by predicate. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...*} [values] The values to remove. + * @returns {Array} Returns `array`. + * @example + * + * var array = ['a', 'b', 'c', 'a', 'b', 'c']; + * + * _.pull(array, 'a', 'c'); + * console.log(array); + * // => ['b', 'b'] + */ +var pull = baseRest(pullAll); + +module.exports = pull; diff --git a/.pnpm-store/v11/files/18/e36c6349da8c6775914ba37ffd409041f50b8cd97743eae037838ac0475c932b84e535d586aa371476103ceee5ccfff13789fdffc726104f921012d10e7d85 b/.pnpm-store/v11/files/18/e36c6349da8c6775914ba37ffd409041f50b8cd97743eae037838ac0475c932b84e535d586aa371476103ceee5ccfff13789fdffc726104f921012d10e7d85 new file mode 100644 index 00000000..d99c822f --- /dev/null +++ b/.pnpm-store/v11/files/18/e36c6349da8c6775914ba37ffd409041f50b8cd97743eae037838ac0475c932b84e535d586aa371476103ceee5ccfff13789fdffc726104f921012d10e7d85 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('indexOfFrom', require('../indexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/18/e628341d627eb1e31b3a91fb08c8f4c17c5cdea39fdbac849f78cec9950afc4cf5747dc24f7083d08f91eefe698b9f45d20c2f52cd8299569f1494105ea8d7 b/.pnpm-store/v11/files/18/e628341d627eb1e31b3a91fb08c8f4c17c5cdea39fdbac849f78cec9950afc4cf5747dc24f7083d08f91eefe698b9f45d20c2f52cd8299569f1494105ea8d7 new file mode 100644 index 00000000..677893c2 --- /dev/null +++ b/.pnpm-store/v11/files/18/e628341d627eb1e31b3a91fb08c8f4c17c5cdea39fdbac849f78cec9950afc4cf5747dc24f7083d08f91eefe698b9f45d20c2f52cd8299569f1494105ea8d7 @@ -0,0 +1,70 @@ +# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag) + +> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag + +Correctly stops looking after an `--` argument terminator. + + +## Install + +``` +$ npm install has-flag +``` + + +## Usage + +```js +// foo.js +const hasFlag = require('has-flag'); + +hasFlag('unicorn'); +//=> true + +hasFlag('--unicorn'); +//=> true + +hasFlag('f'); +//=> true + +hasFlag('-f'); +//=> true + +hasFlag('foo=bar'); +//=> true + +hasFlag('foo'); +//=> false + +hasFlag('rainbow'); +//=> false +``` + +``` +$ node foo.js -f --unicorn --foo=bar -- --rainbow +``` + + +## API + +### hasFlag(flag, [argv]) + +Returns a boolean for whether the flag exists. + +#### flag + +Type: `string` + +CLI flag to look for. The `--` prefix is optional. + +#### argv + +Type: `string[]`
+Default: `process.argv` + +CLI arguments. + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/.pnpm-store/v11/files/18/fdb3526acfa55c22fe948f2fb406168ad3a55a18b38da62c87dc81a3f55634c1ea3dc9ec74db4d37393804ec0aad986a653fae13785be121e34493d35d6521 b/.pnpm-store/v11/files/18/fdb3526acfa55c22fe948f2fb406168ad3a55a18b38da62c87dc81a3f55634c1ea3dc9ec74db4d37393804ec0aad986a653fae13785be121e34493d35d6521 new file mode 100644 index 00000000..e9df1b15 --- /dev/null +++ b/.pnpm-store/v11/files/18/fdb3526acfa55c22fe948f2fb406168ad3a55a18b38da62c87dc81a3f55634c1ea3dc9ec74db4d37393804ec0aad986a653fae13785be121e34493d35d6521 @@ -0,0 +1,157 @@ +'use strict'; + +var test = require('tape'); +var hasProto = require('has-proto')(); + +var isDescriptor = require('../'); + +var noop = function () {}; + +test('isDescriptor', function (t) { + t.test('is false when not an object:', function (st) { + st.notOk(isDescriptor('a')); + st.notOk(isDescriptor(null)); + st.notOk(isDescriptor([])); + + st.end(); + }); + + t.test('returns true if the property exists', function (st) { + var obj = { foo: null }; + + Object.defineProperty(obj, 'bar', { + value: 'xyz' + }); + + Object.defineProperty(obj, 'baz', { + get: function () { + return 'aaa'; + } + }); + + st.ok(isDescriptor(obj, 'foo')); + st.ok(isDescriptor(obj, 'bar')); + st.ok(isDescriptor(obj, 'baz')); + + st.end(); + }); + + t.test('data descriptor:', function (st) { + st.test('is false when the object has invalid properties:', function (s2t) { + s2t.notOk(isDescriptor({ value: 'foo', get: noop })); + s2t.notOk(isDescriptor({ get: noop, value: noop })); + + s2t.end(); + }); + + st.test('is not false when the object has unrecognize properties:', function (s2t) { + s2t.ok(isDescriptor({ value: 'foo', bar: 'baz' })); + s2t.ok(isDescriptor({ value: 'foo', bar: 'baz' })); + + s2t.end(); + }); + + st.test('is true when the object has valid properties:', function (s2t) { + s2t.ok(isDescriptor({ value: 'foo' })); + s2t.ok(isDescriptor({ value: noop })); + + s2t.end(); + }); + + st.test('is false when a value is not the correct type:', function (s2t) { + s2t.notOk(isDescriptor({ value: 'foo', enumerable: 'foo' })); + s2t.notOk(isDescriptor({ value: 'foo', configurable: 'foo' })); + s2t.notOk(isDescriptor({ value: 'foo', writable: 'foo' })); + + s2t.end(); + }); + + st.end(); + }); + + t.test('accessor descriptor:', function (st) { + st.test('should be false when the object has invalid properties:', function (s2t) { + s2t.ok(!isDescriptor({ get: noop, writable: true })); + s2t.ok(!isDescriptor({ get: noop, value: true })); + + s2t.end(); + }); + + st.test('is not false when the object has unrecognize properties:', function (s2t) { + s2t.ok(isDescriptor({ get: noop, set: noop, bar: 'baz' })); + + s2t.end(); + }); + + st.test('is false when an accessor is not a function:', function (s2t) { + s2t.notOk(isDescriptor({ get: noop, set: 'baz' })); + s2t.notOk(isDescriptor({ get: 'foo', set: noop })); + s2t.notOk(isDescriptor({ get: 'foo', bar: 'baz' })); + s2t.notOk(isDescriptor({ get: 'foo', set: 'baz' })); + + s2t.end(); + }); + + st.test('is false when "get" or "set" is not a function', function (s2t) { + s2t.notOk(isDescriptor({ set: 'foo' })); + s2t.notOk(isDescriptor({ get: 'foo' })); + + s2t.end(); + }); + + st.test('is true when the object has valid properties:', function (s2t) { + s2t.ok(isDescriptor({ get: noop, set: noop })); + s2t.ok(isDescriptor({ get: noop })); + + s2t.end(); + }); + + st.test('is false when a value is not the correct type:', function (s2t) { + s2t.notOk(isDescriptor({ get: noop, set: noop, enumerable: 'foo' })); + s2t.notOk(isDescriptor({ set: noop, configurable: 'foo' })); + s2t.notOk(isDescriptor({ get: noop, configurable: 'foo' })); + + s2t.end(); + }); + + st.end(); + }); + + t.test('null-prototype objects', { skip: !hasProto }, function (st) { + var obj = { __proto__: null, foo: 1 }; + st.equal(isDescriptor(obj, 'foo'), true, 'own data property on a null-prototype object is a descriptor'); + st.equal( + isDescriptor(obj, 'missing'), + false, + 'missing key on a null-prototype object returns false (not undefined or throw)' + ); + st.equal(typeof isDescriptor(obj, 'missing'), 'boolean', 'returns a strict boolean'); + + st.end(); + }); + + t.test('hostile descriptor input: throwing accessors do not propagate', function (st) { + var configThrow = Object.defineProperty( + { value: 1, writable: false }, + 'configurable', + { enumerable: true, get: function () { throw new Error('configurable'); } } + ); + st.equal(isDescriptor(configThrow), false, 'throwing enumerable .configurable getter returns false'); + + var enumThrow = Object.defineProperty( + { value: 1, writable: false }, + 'enumerable', + { enumerable: true, get: function () { throw new Error('enumerable'); } } + ); + st.equal(isDescriptor(enumThrow), false, 'throwing enumerable .enumerable getter returns false'); + + st.end(); + }); + + t.test('hostile Proxy `has` trap does not propagate', { skip: typeof Proxy !== 'function' }, function (st) { + var bomb = new Proxy({}, { has: function () { throw new Error('has'); } }); + st.equal(isDescriptor(bomb, 'foo'), false, 'throwing Proxy `has` trap returns false'); + + st.end(); + }); +}); diff --git a/.pnpm-store/v11/files/19/00e4171e38096fedfb27ec5fc765597191646f4382080c35e8b7117721ffcdc90bdcb17212fc4ef7c018989c082fab0768ba93883d870725349b72e6bc9541 b/.pnpm-store/v11/files/19/00e4171e38096fedfb27ec5fc765597191646f4382080c35e8b7117721ffcdc90bdcb17212fc4ef7c018989c082fab0768ba93883d870725349b72e6bc9541 new file mode 100644 index 00000000..3a4fb382 --- /dev/null +++ b/.pnpm-store/v11/files/19/00e4171e38096fedfb27ec5fc765597191646f4382080c35e8b7117721ffcdc90bdcb17212fc4ef7c018989c082fab0768ba93883d870725349b72e6bc9541 @@ -0,0 +1,94 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const _ = require("lodash"); +const fnArgs = require('function-arguments'); +const suman_utils_1 = require("suman-utils"); +const chalk = require("chalk"); +const _suman = global.__suman = (global.__suman || {}); +const general_1 = require("../helpers/general"); +let cachedPromises = {}; +exports.acquirePreDeps = function ($depList, depContainerObj, oncePostHash) { + const depList = _.flattenDeep([$depList]); + const verbosity = _suman.sumanOpts.verbosity || 5; + const getAllPromises = function (key, $deps) { + if (cachedPromises[key]) { + return cachedPromises[key]; + } + if (verbosity > 3) { + _suman.log.info(chalk.cyan(`(suman.once.pre.js) => Beginning to source dep with key => '${key}'`)); + } + const val = depContainerObj[key]; + let { subDeps, fn, timeout, props } = general_1.extractVals(val); + if (!timeout || !Number.isInteger(timeout)) { + timeout = 25000; + } + if (verbosity > 6) { + _suman.log.info(`Maximum time allocated to source dependency with key => '${key}' is => `, timeout); + } + $deps.forEach(function (d) { + if (d === key) { + throw new Error('Circular dependency => existing deps => ' + util.inspect($deps) + ', ' + + 'new dep => "' + key + '"'); + } + }); + $deps.push(key); + subDeps.forEach(function (d) { + if ($deps.includes(d)) { + throw new Error(' => Direct circular dependency => pre-existing deps => ' + util.inspect($deps) + ', ' + + 'newly required dep => "' + d + '"'); + } + }); + const acc = {}; + return cachedPromises[key] = Promise.all(subDeps.map(function (k) { + return getAllPromises(k, $deps.slice(0)).then(function (v) { + Object.assign(acc, v); + }); + })).then(function ($$vals) { + if (verbosity > 5 && subDeps.length > 0) { + _suman.log.info(chalk.blue(`suman.once.pre.js => ` + + `Finished sourcing the dependencies ${util.inspect(subDeps)} of key => '${key}'`)); + } + let to; + return new Promise(function (resolve, reject) { + to = setTimeout(function () { + reject(new Error(`Suman dependency acquisition timed-out for dependency with key => '${key}'`)); + }, _suman.weAreDebugging ? 5000000 : timeout); + if (verbosity > 5 || suman_utils_1.default.isSumanDebug()) { + _suman.log.info('suman.once.pre.js => Executing dep with key = "' + key + '"'); + } + general_1.asyncHelper(key, resolve, reject, [acc], 1, fn); + }) + .then(function (val) { + clearTimeout(to); + if (verbosity > 3 || suman_utils_1.default.isSumanDebug()) { + _suman.log.info(chalk.green.bold('suman.once.pre.js => Finished sourcing dep with key = "' + key + '"')); + } + _suman.integrantHashKeyVals[key] = val; + return { + [key]: val + }; + }, function (err) { + clearTimeout(to); + return Promise.reject(err); + }); + }); + }; + const promises = depList.map(function (key) { + return getAllPromises(key, []); + }); + return Promise.all(promises).then(function (deps) { + const obj = deps.reduce(Object.assign, {}); + if (!_suman.processIsRunner) { + _suman.log.info(chalk.green.underline.bold('Finished with suman.once.pre.js dependencies.'), '\n'); + } + return obj; + }, function (err) { + _suman.log.error(chalk.magenta('There was an error sourcing your dependencies in suman.once.pre.js.')); + err && _suman.log.error(err.stack || util.inspect(err)); + !err && (err = new Error('No error was defined in error handler.')); + return Promise.reject(err); + }); +}; diff --git a/.pnpm-store/v11/files/19/0d66bb8e1e72e817e1742890aff1a10ad8b3f468d03284dda8f9511c3f3cc929ceee02c243d20c4512ebd85a243bde94898f83c26a4814625af34de2218299 b/.pnpm-store/v11/files/19/0d66bb8e1e72e817e1742890aff1a10ad8b3f468d03284dda8f9511c3f3cc929ceee02c243d20c4512ebd85a243bde94898f83c26a4814625af34de2218299 new file mode 100644 index 00000000..52ff6764 --- /dev/null +++ b/.pnpm-store/v11/files/19/0d66bb8e1e72e817e1742890aff1a10ad8b3f468d03284dda8f9511c3f3cc929ceee02c243d20c4512ebd85a243bde94898f83c26a4814625af34de2218299 @@ -0,0 +1,108 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const pragmatik = require('pragmatik'); +const _suman = global.__suman = (global.__suman || {}); +const rules = require("../helpers/handle-varargs"); +const suman_constants_1 = require("../config/suman-constants"); +const general_1 = require("../helpers/general"); +const general_2 = require("../helpers/general"); +const general_3 = require("../helpers/general"); +const acceptableOptions = { + '@DefineObjectOpts': true, + plan: true, + throws: true, + fatal: true, + cb: true, + desc: true, + title: true, + __toBeSourcedForIOC: true, + timeout: true, + retries: true, + skip: true, + always: true, + first: true, + last: true, + events: true, + successEvent: true, + errorEvent: true, + successEvents: true, + errorEvents: true, + __preParsed: true +}; +const handleBadOptions = function (opts, typeName) { + Object.keys(opts).forEach(function (k) { + if (!acceptableOptions[k]) { + const url = `${suman_constants_1.constants.SUMAN_TYPES_ROOT_URL}/${typeName}.d.ts`; + throw new Error(`'${k}' is not a valid option property for an ${typeName} hook. See: ${url}`); + } + }); + if (opts.plan !== undefined && !Number.isInteger(opts.plan)) { + console.error(' => Suman usage error => "plan" option is not an integer.'); + process.exit(suman_constants_1.constants.EXIT_CODES.OPTS_PLAN_NOT_AN_INTEGER); + return; + } +}; +exports.makeAfter = function (suman) { + return function after($desc, $opts) { + const zuite = suman.ctx; + general_1.handleSetupComplete(zuite, after.name); + const isPreParsed = $opts && $opts.__preParsed; + const args = pragmatik.parse(arguments, rules.hookSignature, isPreParsed); + try { + delete $opts.__preParsed; + } + catch (err) { } + const vetted = general_3.parseArgs(args); + const [desc, opts, fn] = vetted.args; + const arrayDeps = vetted.arrayDeps; + handleBadOptions(opts, after.name); + if (arrayDeps.length > 0) { + general_2.evalOptions(arrayDeps, opts); + } + if (opts.always) { + _suman.afterAlwaysHasBeenRegistered = true; + } + if (opts.last && opts.first) { + throw new Error('Cannot use both "first" and "last" option for "after" hook.'); + } + if (opts.skip) { + suman.numHooksSkipped++; + } + else if (!fn) { + suman.numHooksStubbed++; + } + else { + let obj = { + last: Boolean(opts.last), + first: Boolean(opts.first), + ctx: zuite, + timeout: opts.timeout || 11000, + desc: desc || fn.name || '(unknown after-all-hook name)', + cb: opts.cb === true, + throws: opts.throws, + always: opts.always, + retries: opts.retries, + successEvents: opts.successEvents, + errorEvents: opts.errorEvents, + events: opts.events, + planCountExpected: opts.plan, + fatal: opts.fatal === true, + fn: fn, + type: 'after/teardown', + warningErr: new Error('SUMAN_TEMP_WARNING_ERROR') + }; + if (opts.last) { + zuite.getAftersLast().push(obj); + } + else if (opts.first) { + zuite.getAftersFirst().push(obj); + } + else { + zuite.getAfters().push(obj); + } + } + return zuite; + }; +}; diff --git a/.pnpm-store/v11/files/19/1240b8c80b9fbfa4ba3074f48a9fc14a9c38ae13874b1a19216dbbab72b136497cb143e78303c7e3f1facf4686b245ef9765dfe5bc6f4e7f45984a34b6fb80 b/.pnpm-store/v11/files/19/1240b8c80b9fbfa4ba3074f48a9fc14a9c38ae13874b1a19216dbbab72b136497cb143e78303c7e3f1facf4686b245ef9765dfe5bc6f4e7f45984a34b6fb80 new file mode 100644 index 00000000..b744a1ee --- /dev/null +++ b/.pnpm-store/v11/files/19/1240b8c80b9fbfa4ba3074f48a9fc14a9c38ae13874b1a19216dbbab72b136497cb143e78303c7e3f1facf4686b245ef9765dfe5bc6f4e7f45984a34b6fb80 @@ -0,0 +1,43 @@ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + +function YAMLException(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { + var result = this.name + ': '; + + result += this.reason || '(unknown reason)'; + + if (!compact && this.mark) { + result += ' ' + this.mark.toString(); + } + + return result; +}; + + +module.exports = YAMLException; diff --git a/.pnpm-store/v11/files/19/564a1990ab61910c5ee6d156f5574d3a65cdaa1e98b93189a5f49d644ef9366710bf8d1270330a0a1bae69c078dedd536f786c9acebedf1ba7348cd2585bf8 b/.pnpm-store/v11/files/19/564a1990ab61910c5ee6d156f5574d3a65cdaa1e98b93189a5f49d644ef9366710bf8d1270330a0a1bae69c078dedd536f786c9acebedf1ba7348cd2585bf8 new file mode 100644 index 00000000..a2e6437d --- /dev/null +++ b/.pnpm-store/v11/files/19/564a1990ab61910c5ee6d156f5574d3a65cdaa1e98b93189a5f49d644ef9366710bf8d1270330a0a1bae69c078dedd536f786c9acebedf1ba7348cd2585bf8 @@ -0,0 +1,305 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +#ifndef NAN_STRING_BYTES_H_ +#define NAN_STRING_BYTES_H_ + +// Decodes a v8::Local or Buffer to a raw char* + +namespace imp { + +using v8::Local; +using v8::Object; +using v8::String; +using v8::Value; + + +//// Base 64 //// + +#define base64_encoded_size(size) ((size + 2 - ((size + 2) % 3)) / 3 * 4) + + + +//// HEX //// + +static bool contains_non_ascii_slow(const char* buf, size_t len) { + for (size_t i = 0; i < len; ++i) { + if (buf[i] & 0x80) return true; + } + return false; +} + + +static bool contains_non_ascii(const char* src, size_t len) { + if (len < 16) { + return contains_non_ascii_slow(src, len); + } + + const unsigned bytes_per_word = sizeof(void*); + const unsigned align_mask = bytes_per_word - 1; + const unsigned unaligned = reinterpret_cast(src) & align_mask; + + if (unaligned > 0) { + const unsigned n = bytes_per_word - unaligned; + if (contains_non_ascii_slow(src, n)) return true; + src += n; + len -= n; + } + + +#if defined(__x86_64__) || defined(_WIN64) + const uintptr_t mask = 0x8080808080808080ll; +#else + const uintptr_t mask = 0x80808080l; +#endif + + const uintptr_t* srcw = reinterpret_cast(src); + + for (size_t i = 0, n = len / bytes_per_word; i < n; ++i) { + if (srcw[i] & mask) return true; + } + + const unsigned remainder = len & align_mask; + if (remainder > 0) { + const size_t offset = len - remainder; + if (contains_non_ascii_slow(src + offset, remainder)) return true; + } + + return false; +} + + +static void force_ascii_slow(const char* src, char* dst, size_t len) { + for (size_t i = 0; i < len; ++i) { + dst[i] = src[i] & 0x7f; + } +} + + +static void force_ascii(const char* src, char* dst, size_t len) { + if (len < 16) { + force_ascii_slow(src, dst, len); + return; + } + + const unsigned bytes_per_word = sizeof(void*); + const unsigned align_mask = bytes_per_word - 1; + const unsigned src_unalign = reinterpret_cast(src) & align_mask; + const unsigned dst_unalign = reinterpret_cast(dst) & align_mask; + + if (src_unalign > 0) { + if (src_unalign == dst_unalign) { + const unsigned unalign = bytes_per_word - src_unalign; + force_ascii_slow(src, dst, unalign); + src += unalign; + dst += unalign; + len -= src_unalign; + } else { + force_ascii_slow(src, dst, len); + return; + } + } + +#if defined(__x86_64__) || defined(_WIN64) + const uintptr_t mask = ~0x8080808080808080ll; +#else + const uintptr_t mask = ~0x80808080l; +#endif + + const uintptr_t* srcw = reinterpret_cast(src); + uintptr_t* dstw = reinterpret_cast(dst); + + for (size_t i = 0, n = len / bytes_per_word; i < n; ++i) { + dstw[i] = srcw[i] & mask; + } + + const unsigned remainder = len & align_mask; + if (remainder > 0) { + const size_t offset = len - remainder; + force_ascii_slow(src + offset, dst + offset, remainder); + } +} + + +static size_t base64_encode(const char* src, + size_t slen, + char* dst, + size_t dlen) { + // We know how much we'll write, just make sure that there's space. + assert(dlen >= base64_encoded_size(slen) && + "not enough space provided for base64 encode"); + + dlen = base64_encoded_size(slen); + + unsigned a; + unsigned b; + unsigned c; + unsigned i; + unsigned k; + unsigned n; + + static const char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + i = 0; + k = 0; + n = slen / 3 * 3; + + while (i < n) { + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + c = src[i + 2] & 0xff; + + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[((b & 0x0f) << 2) | (c >> 6)]; + dst[k + 3] = table[c & 0x3f]; + + i += 3; + k += 4; + } + + if (n != slen) { + switch (slen - n) { + case 1: + a = src[i + 0] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[(a & 3) << 4]; + dst[k + 2] = '='; + dst[k + 3] = '='; + break; + + case 2: + a = src[i + 0] & 0xff; + b = src[i + 1] & 0xff; + dst[k + 0] = table[a >> 2]; + dst[k + 1] = table[((a & 3) << 4) | (b >> 4)]; + dst[k + 2] = table[(b & 0x0f) << 2]; + dst[k + 3] = '='; + break; + } + } + + return dlen; +} + + +static size_t hex_encode(const char* src, size_t slen, char* dst, size_t dlen) { + // We know how much we'll write, just make sure that there's space. + assert(dlen >= slen * 2 && + "not enough space provided for hex encode"); + + dlen = slen * 2; + for (uint32_t i = 0, k = 0; k < dlen; i += 1, k += 2) { + static const char hex[] = "0123456789abcdef"; + uint8_t val = static_cast(src[i]); + dst[k + 0] = hex[val >> 4]; + dst[k + 1] = hex[val & 15]; + } + + return dlen; +} + + + +static Local Encode(const char* buf, + size_t buflen, + enum Encoding encoding) { + assert(buflen <= node::Buffer::kMaxLength); + if (!buflen && encoding != BUFFER) + return New("").ToLocalChecked(); + + Local val; + switch (encoding) { + case BUFFER: + return CopyBuffer(buf, buflen).ToLocalChecked(); + + case ASCII: + if (contains_non_ascii(buf, buflen)) { + char* out = new char[buflen]; + force_ascii(buf, out, buflen); + val = New(out, buflen).ToLocalChecked(); + delete[] out; + } else { + val = New(buf, buflen).ToLocalChecked(); + } + break; + + case UTF8: + val = New(buf, buflen).ToLocalChecked(); + break; + + case BINARY: { + // TODO(isaacs) use ExternalTwoByteString? + const unsigned char *cbuf = reinterpret_cast(buf); + uint16_t * twobytebuf = new uint16_t[buflen]; + for (size_t i = 0; i < buflen; i++) { + // XXX is the following line platform independent? + twobytebuf[i] = cbuf[i]; + } + val = New(twobytebuf, buflen).ToLocalChecked(); + delete[] twobytebuf; + break; + } + + case BASE64: { + size_t dlen = base64_encoded_size(buflen); + char* dst = new char[dlen]; + + size_t written = base64_encode(buf, buflen, dst, dlen); + assert(written == dlen); + + val = New(dst, dlen).ToLocalChecked(); + delete[] dst; + break; + } + + case UCS2: { + const uint16_t* data = reinterpret_cast(buf); + val = New(data, buflen / 2).ToLocalChecked(); + break; + } + + case HEX: { + size_t dlen = buflen * 2; + char* dst = new char[dlen]; + size_t written = hex_encode(buf, buflen, dst, dlen); + assert(written == dlen); + + val = New(dst, dlen).ToLocalChecked(); + delete[] dst; + break; + } + + default: + assert(0 && "unknown encoding"); + break; + } + + return val; +} + +#undef base64_encoded_size + +} // end of namespace imp + +#endif // NAN_STRING_BYTES_H_ diff --git a/.pnpm-store/v11/files/19/56b2b1875b8820b60494a990d3cafb45cf0700ddcb2d3fced302c1a92495e9d16710e3cb2941e592c29b56d5a569b858d318e52983517278d6cc04e63ba019 b/.pnpm-store/v11/files/19/56b2b1875b8820b60494a990d3cafb45cf0700ddcb2d3fced302c1a92495e9d16710e3cb2941e592c29b56d5a569b858d318e52983517278d6cc04e63ba019 new file mode 100644 index 00000000..ea8a0a17 --- /dev/null +++ b/.pnpm-store/v11/files/19/56b2b1875b8820b60494a990d3cafb45cf0700ddcb2d3fced302c1a92495e9d16710e3cb2941e592c29b56d5a569b858d318e52983517278d6cc04e63ba019 @@ -0,0 +1,33 @@ +var isObject = require('./isObject'), + isPrototype = require('./_isPrototype'), + nativeKeysIn = require('./_nativeKeysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +module.exports = baseKeysIn; diff --git a/.pnpm-store/v11/files/19/7c232803a53b69ccdb33d2bd06ea79dd782e03e6a324c6f9be13bb52d96b03ea15fb80b140a39b4541aba1ea48aba59cbeea2c9d15d510992d07daf19713c2 b/.pnpm-store/v11/files/19/7c232803a53b69ccdb33d2bd06ea79dd782e03e6a324c6f9be13bb52d96b03ea15fb80b140a39b4541aba1ea48aba59cbeea2c9d15d510992d07daf19713c2 new file mode 100644 index 00000000..eb1cf1a9 --- /dev/null +++ b/.pnpm-store/v11/files/19/7c232803a53b69ccdb33d2bd06ea79dd782e03e6a324c6f9be13bb52d96b03ea15fb80b140a39b4541aba1ea48aba59cbeea2c9d15d510992d07daf19713c2 @@ -0,0 +1,39 @@ +import { + appendContextPath, + blockParams, + createFrame, + isEmpty, + isFunction +} from '../utils'; +import Exception from '../exception'; + +export default function(instance) { + instance.registerHelper('with', function(context, options) { + if (arguments.length != 2) { + throw new Exception('#with requires exactly one argument'); + } + if (isFunction(context)) { + context = context.call(this); + } + + let fn = options.fn; + + if (!isEmpty(context)) { + let data = options.data; + if (options.data && options.ids) { + data = createFrame(options.data); + data.contextPath = appendContextPath( + options.data.contextPath, + options.ids[0] + ); + } + + return fn(context, { + data: data, + blockParams: blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); +} diff --git a/.pnpm-store/v11/files/19/85f9d8e429cfb4a959d549f476d94f4c659aac6559d6f2862ec34846385e9945f4e33b0926d748900d3fb2ffe36b8b480d7479bbba3fe468e93b0eaa2103b6 b/.pnpm-store/v11/files/19/85f9d8e429cfb4a959d549f476d94f4c659aac6559d6f2862ec34846385e9945f4e33b0926d748900d3fb2ffe36b8b480d7479bbba3fe468e93b0eaa2103b6 new file mode 100644 index 00000000..8edf1877 --- /dev/null +++ b/.pnpm-store/v11/files/19/85f9d8e429cfb4a959d549f476d94f4c659aac6559d6f2862ec34846385e9945f4e33b0926d748900d3fb2ffe36b8b480d7479bbba3fe468e93b0eaa2103b6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('ary', require('../ary')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/19/8bb80314f4412daadc36609f645f566c1123c79b260f76fcfcac26830ae588ed31397c775651513cb15fe8e2c05e42126023451f9ca07d58bab1c6c88b1696 b/.pnpm-store/v11/files/19/8bb80314f4412daadc36609f645f566c1123c79b260f76fcfcac26830ae588ed31397c775651513cb15fe8e2c05e42126023451f9ca07d58bab1c6c88b1696 new file mode 100644 index 00000000..8b4c30fa --- /dev/null +++ b/.pnpm-store/v11/files/19/8bb80314f4412daadc36609f645f566c1123c79b260f76fcfcac26830ae588ed31397c775651513cb15fe8e2c05e42126023451f9ca07d58bab1c6c88b1696 @@ -0,0 +1,8 @@ +export interface IIntegrantHash { + [key: string]: any; +} +export interface IOncePost { + [key: string]: Function | Array; +} +export declare type TOncePostKeys = Array>; +export declare const run: (runObj: Object, runOnce: Function, $order: Object) => void; diff --git a/.pnpm-store/v11/files/19/ab897aea41f8d30bd62cd635d2b49a31ad6e5b45ae01f3268824ac9b2d91f8495c947e20e35fcb1113b3f1cd29c40c7311423e49fc5ac4e4b9075ca2db23fc b/.pnpm-store/v11/files/19/ab897aea41f8d30bd62cd635d2b49a31ad6e5b45ae01f3268824ac9b2d91f8495c947e20e35fcb1113b3f1cd29c40c7311423e49fc5ac4e4b9075ca2db23fc new file mode 100644 index 00000000..139439ad --- /dev/null +++ b/.pnpm-store/v11/files/19/ab897aea41f8d30bd62cd635d2b49a31ad6e5b45ae01f3268824ac9b2d91f8495c947e20e35fcb1113b3f1cd29c40c7311423e49fc5ac4e4b9075ca2db23fc @@ -0,0 +1,19 @@ +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +module.exports = trimmedEndIndex; diff --git a/.pnpm-store/v11/files/19/b0acba6849d1e78cf39cd7a67294ccda5080936898cefbcc62556931bad6716ca72fd9a6513724af6f21e67ccbd388bc838fec30c0e9705f6513ce46a8984b b/.pnpm-store/v11/files/19/b0acba6849d1e78cf39cd7a67294ccda5080936898cefbcc62556931bad6716ca72fd9a6513724af6f21e67ccbd388bc838fec30c0e9705f6513ce46a8984b new file mode 100644 index 00000000..6ed84e06 --- /dev/null +++ b/.pnpm-store/v11/files/19/b0acba6849d1e78cf39cd7a67294ccda5080936898cefbcc62556931bad6716ca72fd9a6513724af6f21e67ccbd388bc838fec30c0e9705f6513ce46a8984b @@ -0,0 +1,43 @@ +var arrayMap = require('./_arrayMap'), + baseAt = require('./_baseAt'), + basePullAt = require('./_basePullAt'), + compareAscending = require('./_compareAscending'), + flatRest = require('./_flatRest'), + isIndex = require('./_isIndex'); + +/** + * Removes elements from `array` corresponding to `indexes` and returns an + * array of removed elements. + * + * **Note:** Unlike `_.at`, this method mutates `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * var pulled = _.pullAt(array, [1, 3]); + * + * console.log(array); + * // => ['a', 'c'] + * + * console.log(pulled); + * // => ['b', 'd'] + */ +var pullAt = flatRest(function(array, indexes) { + var length = array == null ? 0 : array.length, + result = baseAt(array, indexes); + + basePullAt(array, arrayMap(indexes, function(index) { + return isIndex(index, length) ? +index : index; + }).sort(compareAscending)); + + return result; +}); + +module.exports = pullAt; diff --git a/.pnpm-store/v11/files/19/d9df30ecea1d3de7ebba0358433460b978d7f2cefb836f09ac55b72215a32dea635d36a1fbcd42259c56f5dee0bac479ebcb1af386b6bc6e9c3a967c0c786d b/.pnpm-store/v11/files/19/d9df30ecea1d3de7ebba0358433460b978d7f2cefb836f09ac55b72215a32dea635d36a1fbcd42259c56f5dee0bac479ebcb1af386b6bc6e9c3a967c0c786d new file mode 100644 index 00000000..74786bc8 --- /dev/null +++ b/.pnpm-store/v11/files/19/d9df30ecea1d3de7ebba0358433460b978d7f2cefb836f09ac55b72215a32dea635d36a1fbcd42259c56f5dee0bac479ebcb1af386b6bc6e9c3a967c0c786d @@ -0,0 +1 @@ +export default function (names: Array, $ioc: Object): any[]; diff --git a/.pnpm-store/v11/files/1a/1a54f84c23f83f30339e1ccd952e3a3d24f18162346e89543cda2e0ba758f5a87d91afc1a36baf188a13d79b06752a15c13b93289e25755d10daf852943fb9 b/.pnpm-store/v11/files/1a/1a54f84c23f83f30339e1ccd952e3a3d24f18162346e89543cda2e0ba758f5a87d91afc1a36baf188a13d79b06752a15c13b93289e25755d10daf852943fb9 new file mode 100644 index 00000000..f905c3a2 --- /dev/null +++ b/.pnpm-store/v11/files/1a/1a54f84c23f83f30339e1ccd952e3a3d24f18162346e89543cda2e0ba758f5a87d91afc1a36baf188a13d79b06752a15c13b93289e25755d10daf852943fb9 @@ -0,0 +1 @@ +global.expect = require('./').expect; diff --git a/.pnpm-store/v11/files/1a/243fe47ef180617940f91d56661d83b9bfc64bfb93205440cb10f20f34350047c40bead16b8902a298dbe8994946a3d515dadc4ee8c473688e2432370ddaa8 b/.pnpm-store/v11/files/1a/243fe47ef180617940f91d56661d83b9bfc64bfb93205440cb10f20f34350047c40bead16b8902a298dbe8994946a3d515dadc4ee8c473688e2432370ddaa8 new file mode 100644 index 00000000..b351ee8e --- /dev/null +++ b/.pnpm-store/v11/files/1a/243fe47ef180617940f91d56661d83b9bfc64bfb93205440cb10f20f34350047c40bead16b8902a298dbe8994946a3d515dadc4ee8c473688e2432370ddaa8 @@ -0,0 +1,19 @@ +Copyright (C) 2011 by Roly Fentanes + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/1a/5ce2cfb89ce58dd83ed89078540c758427f66f281b90d7949962d535222284db9b7211950e81bc5c6f3f75604987029745d298ace21db77b3d7bc0636fca20 b/.pnpm-store/v11/files/1a/5ce2cfb89ce58dd83ed89078540c758427f66f281b90d7949962d535222284db9b7211950e81bc5c6f3f75604987029745d298ace21db77b3d7bc0636fca20 new file mode 100644 index 00000000..7ec7be19 --- /dev/null +++ b/.pnpm-store/v11/files/1a/5ce2cfb89ce58dd83ed89078540c758427f66f281b90d7949962d535222284db9b7211950e81bc5c6f3f75604987029745d298ace21db77b3d7bc0636fca20 @@ -0,0 +1 @@ +module.exports = require('./unset'); diff --git a/.pnpm-store/v11/files/1a/6daf57af986809980c8fbd764a3361cfe79520c2e0e1451f2dced00c4f87d6a85dfc636703dc8e6e3e630ffa03232d146b48bcc11a0bf17e6a2310912f7439 b/.pnpm-store/v11/files/1a/6daf57af986809980c8fbd764a3361cfe79520c2e0e1451f2dced00c4f87d6a85dfc636703dc8e6e3e630ffa03232d146b48bcc11a0bf17e6a2310912f7439 new file mode 100644 index 00000000..90b702ac --- /dev/null +++ b/.pnpm-store/v11/files/1a/6daf57af986809980c8fbd764a3361cfe79520c2e0e1451f2dced00c4f87d6a85dfc636703dc8e6e3e630ffa03232d146b48bcc11a0bf17e6a2310912f7439 @@ -0,0 +1,61 @@ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; diff --git a/.pnpm-store/v11/files/1a/8de087722346d9296fa7debac1d583cf9cd5d285f8bd73b0e81b1bbb542a423acb98c36a180f301a515b35506cc261c86c1199b9d1784120f935c7523d5777 b/.pnpm-store/v11/files/1a/8de087722346d9296fa7debac1d583cf9cd5d285f8bd73b0e81b1bbb542a423acb98c36a180f301a515b35506cc261c86c1199b9d1784120f935c7523d5777 new file mode 100644 index 00000000..a11e1f58 --- /dev/null +++ b/.pnpm-store/v11/files/1a/8de087722346d9296fa7debac1d583cf9cd5d285f8bd73b0e81b1bbb542a423acb98c36a180f301a515b35506cc261c86c1199b9d1784120f935c7523d5777 @@ -0,0 +1,26 @@ +{ + "name": "dashdash", + "description": "A light, featureful and explicit option parsing library.", + "version": "1.14.1", + "author": "Trent Mick (http://trentm.com)", + "keywords": ["option", "parser", "parsing", "cli", "command", "args", + "bash", "completion"], + "repository": { + "type": "git", + "url": "git://github.com/trentm/node-dashdash.git" + }, + "main": "./lib/dashdash.js", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "devDependencies": { + "nodeunit": "0.9.x" + }, + "engines": { + "node": ">=0.10" + }, + "scripts": { + "test": "nodeunit test/*.test.js" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/1a/9221b68b280418af36b00f87d29e85173355e18d6d5f821e3ee7109294cc6a5d5d45ca8205601d9d436d86a990954426ef49bb57eee49b0ff3a061ca919dad b/.pnpm-store/v11/files/1a/9221b68b280418af36b00f87d29e85173355e18d6d5f821e3ee7109294cc6a5d5d45ca8205601d9d436d86a990954426ef49bb57eee49b0ff3a061ca919dad new file mode 100644 index 00000000..a4fdf9dd --- /dev/null +++ b/.pnpm-store/v11/files/1a/9221b68b280418af36b00f87d29e85173355e18d6d5f821e3ee7109294cc6a5d5d45ca8205601d9d436d86a990954426ef49bb57eee49b0ff3a061ca919dad @@ -0,0 +1,16 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var process = require('suman-browser-polyfills/modules/process'); +var global = require('suman-browser-polyfills/modules/global'); +var path = require("path"); +var poolio_1 = require("poolio"); +var logging_1 = require("./logging"); +var pool = new poolio_1.Pool({ + size: 3, + filePath: path.resolve(__dirname + '/handle-require.js'), + oneTimeOnly: true +}); +pool.on('error', function (e) { + logging_1.log.error(e.stack || e); +}); +exports.workerPool = pool; diff --git a/.pnpm-store/v11/files/1a/9669df77d7faef32292503da9893addde1ab14106b8dfdb479067e88518f01dee547a2ee30c43b0bad64c5f56b01a6e0d05c5263b92c2234d6438dae15b01f b/.pnpm-store/v11/files/1a/9669df77d7faef32292503da9893addde1ab14106b8dfdb479067e88518f01dee547a2ee30c43b0bad64c5f56b01a6e0d05c5263b92c2234d6438dae15b01f new file mode 100644 index 00000000..5796ba1f --- /dev/null +++ b/.pnpm-store/v11/files/1a/9669df77d7faef32292503da9893addde1ab14106b8dfdb479067e88518f01dee547a2ee30c43b0bad64c5f56b01a6e0d05c5263b92c2234d6438dae15b01f @@ -0,0 +1,231 @@ +Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.svg?branch=master)](https://travis-ci.org/lydell/source-map-resolve) +======== + +Resolve the source map and/or sources for a generated file. + +```js +var sourceMapResolve = require("source-map-resolve") +var sourceMap = require("source-map") + +var code = [ + "!function(){...}();", + "/*# sourceMappingURL=foo.js.map */" +].join("\n") + +sourceMapResolve.resolveSourceMap(code, "/js/foo.js", fs.readFile, function(error, result) { + if (error) { + return notifyFailure(error) + } + result + // { + // map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []}, + // url: "/js/foo.js.map", + // sourcesRelativeTo: "/js/foo.js.map", + // sourceMappingURL: "foo.js.map" + // } + + sourceMapResolve.resolveSources(result.map, result.sourcesRelativeTo, fs.readFile, function(error, result) { + if (error) { + return notifyFailure(error) + } + result + // { + // sourcesResolved: ["/coffee/foo.coffee"], + // sourcesContent: [""] + // } + }) +}) + +sourceMapResolve.resolve(code, "/js/foo.js", fs.readFile, function(error, result) { + if (error) { + return notifyFailure(error) + } + result + // { + // map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []}, + // url: "/js/foo.js.map", + // sourcesRelativeTo: "/js/foo.js.map", + // sourceMappingURL: "foo.js.map", + // sourcesResolved: ["/coffee/foo.coffee"], + // sourcesContent: [""] + // } + result.map.sourcesContent = result.sourcesContent + var map = new sourceMap.sourceMapConsumer(result.map) + map.sourceContentFor("/coffee/foo.coffee") + // "" +}) +``` + + +Installation +============ + +- `npm install source-map-resolve` +- `bower install source-map-resolve` +- `component install lydell/source-map-resolve` + +Works with CommonJS, AMD and browser globals, through UMD. + +Note: This module requires `setImmediate` and `atob`. +Use polyfills if needed, such as: + +- +- + + +Usage +===== + +### `sourceMapResolve.resolveSourceMap(code, codeUrl, read, callback)` ### + +- `code` is a string of code that may or may not contain a sourceMappingURL + comment. Such a comment is used to resolve the source map. +- `codeUrl` is the url to the file containing `code`. If the sourceMappingURL + is relative, it is resolved against `codeUrl`. +- `read(url, callback)` is a function that reads `url` and responds using + `callback(error, content)`. In Node.js you might want to use `fs.readFile`, + while in the browser you might want to use an asynchronus `XMLHttpRequest`. +- `callback(error, result)` is a function that is invoked with either an error + or `null` and the result. + +The result is an object with the following properties: + +- `map`: The source map for `code`, as an object (not a string). +- `url`: The url to the source map. If the source map came from a data uri, + this property is `null`, since then there is no url to it. +- `sourcesRelativeTo`: The url that the sources of the source map are relative + to. Since the sources are relative to the source map, and the url to the + source map is provided as the `url` property, this property might seem + superfluos. However, remember that the `url` property can be `null` if the + source map came from a data uri. If so, the sources are relative to the file + containing the data uri—`codeUrl`. This property will be identical to the + `url` property or `codeUrl`, whichever is appropriate. This way you can + conveniently resolve the sources without having to think about where the + source map came from. +- `sourceMappingURL`: The url of the sourceMappingURL comment in `code`. + +If `code` contains no sourceMappingURL, the result is `null`. + +### `sourceMapResolve.resolveSources(map, mapUrl, read, [options], callback)` ### + +- `map` is a source map, as an object (not a string). +- `mapUrl` is the url to the file containing `map`. Relative sources in the + source map, if any, are resolved against `mapUrl`. +- `read(url, callback)` is a function that reads `url` and responds using + `callback(error, content)`. In Node.js you might want to use `fs.readFile`, + while in the browser you might want to use an asynchronus `XMLHttpRequest`. +- `options` is an optional object with any of the following properties: + - `sourceRoot`: Override the `sourceRoot` property of the source map, which + might only be relevant when resolving sources in the browser. This lets you + bypass it when using the module outside of a browser, if needed. Pass a + string to replace the `sourceRoot` property with, or `false` to ignore it. + Defaults to `undefined`. +- `callback(error, result)` is a function that is invoked with either an error + or `null` and the result. + +The result is an object with the following properties: + +- `sourcesResolved`: The same as `map.sources`, except all the sources are + fully resolved. +- `sourcesContent`: An array with the contents of all sources in `map.sources`, + in the same order as `map.sources`. If getting the contents of a source fails, + an error object is put into the array instead. + +### `sourceMapResolve.resolve(code, codeUrl, read, [options], callback)` ### + +The arguments are identical to `sourceMapResolve.resolveSourceMap`, except that +you may also provide the same `options` as in `sourceMapResolve.resolveSources`. + +This is a convenience method that first resolves the source map and then its +sources. You could also do this by first calling +`sourceMapResolve.resolveSourceMap` and then `sourceMapResolve.resolveSources`. + +The result is identical to `sourceMapResolve.resolveSourceMap`, with the +properties from `sourceMapResolve.resolveSources` merged into it. + +There is one extra feature available, though. If `code` is `null`, `codeUrl` is +treated as a url to the source map instead of to `code`, and will be read. This +is handy if you _sometimes_ get the source map url from the `SourceMap: ` +header (see the [Notes] section). In this case, the `sourceMappingURL` property +of the result is `null`. + + +[Notes]: #notes + +### `sourceMapResolve.*Sync()` ### + +There are also sync versions of the three previous functions. They are identical +to the async versions, except: + +- They expect a sync reading function. In Node.js you might want to use + `fs.readFileSync`, while in the browser you might want to use a synchronus + `XMLHttpRequest`. +- They throw errors and return the result instead of using a callback. + +`sourceMapResolve.resolveSourcesSync` also accepts `null` as the `read` +parameter. The result is the same as when passing a function as the `read +parameter`, except that the `sourcesContent` property of the result will be an +empty array. In other words, the sources aren’t read. You only get the +`sourcesResolved` property. (This only supported in the synchronus version, since +there is no point doing it asynchronusly.) + +### `sourceMapResolve.parseMapToJSON(string, [data])` ### + +The spec says that if a source map (as a string) starts with `)]}'`, it should +be stripped off. This is to prevent XSSI attacks. This function does that and +returns the result of `JSON.parse`ing what’s left. + +If this function throws `error`, `error.sourceMapData === data`. + +### Errors + +All errors passed to callbacks or thrown by this module have a `sourceMapData` +property that contain as much as possible of the intended result of the function +up until the error occurred. + +Note that while the `map` property of result objects always is an object, +`error.sourceMapData.map` will be a string if parsing that string fails. + + +Note +==== + +This module resolves the source map for a given generated file by looking for a +sourceMappingURL comment. The spec defines yet a way to provide the URL to the +source map: By sending the `SourceMap: ` header along with the generated +file. Since this module doesn’t retrive the generated code for you (instead +_you_ give the generated code to the module), it’s up to you to look for such a +header when you retrieve the file (should the need arise). + + +Development +=========== + +Tests +----- + +First off, run `npm install` to install testing modules and browser polyfills. + +`npm test` lints the code and runs the test suite in Node.js. + +x-package.json5 +--------------- + +package.json, component.json and bower.json are all generated from +x-package.json5 by using [`xpkg`]. Only edit x-package.json5, and remember to +run `xpkg` before commiting! + +[`xpkg`]: https://github.com/kof/node-xpkg + +Generating the browser version +------------------------------ + +source-map-resolve.js is generated from source-map-resolve-node.js and +source-map-resolve-template.js. Only edit the two latter files, _not_ +source-map-resolve.js! To generate it, run `npm run build`. + + +License +======= + +[MIT](LICENSE). diff --git a/.pnpm-store/v11/files/1a/d23a15067421be3312a8dd7da1b1863f6f2edeb48bfaa247e1ac56512df4defb389167d7015a5b7c4f1fc804fed8138a0baa24a13b4db2bb274816529dc446 b/.pnpm-store/v11/files/1a/d23a15067421be3312a8dd7da1b1863f6f2edeb48bfaa247e1ac56512df4defb389167d7015a5b7c4f1fc804fed8138a0baa24a13b4db2bb274816529dc446 new file mode 100644 index 00000000..cac84a0b --- /dev/null +++ b/.pnpm-store/v11/files/1a/d23a15067421be3312a8dd7da1b1863f6f2edeb48bfaa247e1ac56512df4defb389167d7015a5b7c4f1fc804fed8138a0baa24a13b4db2bb274816529dc446 @@ -0,0 +1,29 @@ +/**! + + @license + handlebars v4.7.9 + +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ +!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a.parseWithoutProcessing=j.parseWithoutProcessing,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(83),i=e(h),j=c(84),k=c(89),l=c(90),m=e(l),n=c(87),o=e(n),p=c(82),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(76),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(77),p=e(o),q=c(82),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(70),k=c(72),l=e(k),m=c(73),n="4.7.9";b.VERSION=n;var o=8;b.COMPILER_REVISION=o;var p=7;b.LAST_COMPATIBLE_COMPILER_REVISION=p;var q={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};b.REVISION_CHANGES=q;var r="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===r)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===r){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){m.resetLoggedProperties()}};var s=l["default"].log;b.log=s,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0,i=void 0,j=void 0;c&&(g=c.start.line,h=c.end.line,i=c.start.column,j=c.end.column,a+=" - "+g+":"+i);for(var k=Error.prototype.constructor.call(this,a),l=0;l0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(13)["default"],e=c(43)["default"],f=c(55)["default"],g=c(60)["default"],h=c(1)["default"];b.__esModule=!0;var i=c(5),j=c(6),k=h(j);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,d){n&&(n.key=b,n.index=c,n.first=0===c,n.last=!!d,o&&(n.contextPath=o+b)),m+=h(a[b],{data:n,blockParams:i.blockParams([a[b],b],[o+b,null])})}if(!b)throw new k["default"]("Must pass iterator to #each");var h=b.fn,j=b.inverse,l=0,m="",n=void 0,o=void 0;if(b.data&&b.ids&&(o=i.appendContextPath(b.data.contextPath,b.ids[0])+"."),i.isFunction(a)&&(a=a.call(this)),b.data&&(n=i.createFrame(b.data)),a&&"object"==typeof a)if(i.isArray(a))for(var p=a.length;le;)M(a,c=d[e++],b[c]);return a},O=function(a,b){return void 0===b?x(a):N(x(a),b)},P=function(a){var b=E.call(this,a);return!(b||!f(this,a)||!f(G,a)||f(this,D)&&this[D][a])||b},Q=function(a,b){var c=v(a=t(a),b);return!c||!f(G,b)||f(a,D)&&a[D][b]||(c.enumerable=!0),c},R=function(a){for(var b,c=y(t(a)),d=[],e=0;c.length>e;)f(G,b=c[e++])||b==D||d.push(b);return d},S=function(a){for(var b,c=y(t(a)),d=[],e=0;c.length>e;)f(G,b=c[e++])&&d.push(G[b]);return d},T=function(a){if(void 0!==a&&!L(a)){for(var b,c,d=[a],e=1,f=arguments;f.length>e;)d.push(f[e++]);return b=d[1],"function"==typeof b&&(c=b),!c&&r(b)||(b=function(a,b){if(c&&(b=c.call(this,a,b)),!L(b))return b}),d[1]=b,B.apply(A,d)}},U=j(function(){var a=z();return"[null]"!=B([a])||"{}"!=B({a:a})||"{}"!=B(Object(a))});H||(z=function(){if(L(this))throw TypeError("Symbol is not a constructor");return K(m(arguments.length>0?arguments[0]:void 0))},i(z.prototype,"toString",function(){return this._k}),L=function(a){return a instanceof z},d.create=O,d.isEnum=P,d.getDesc=Q,d.setDesc=M,d.setDescs=N,d.getNames=p.get=R,d.getSymbols=S,g&&!c(41)&&i(I,"propertyIsEnumerable",P,!0));var V={"for":function(a){return f(F,a+="")?F[a]:F[a]=z(a)},keyFor:function(a){return o(F,a)},useSetter:function(){C=!0},useSimple:function(){C=!1}};d.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(a){var b=n(a);V[a]=H?b:K(b)}),C=!0,h(h.G+h.W,{Symbol:z}),h(h.S,"Symbol",V),h(h.S+h.F*!H,"Object",{create:O,defineProperty:M,defineProperties:N,getOwnPropertyDescriptor:Q,getOwnPropertyNames:R,getOwnPropertySymbols:S}),A&&h(h.S+h.F*(!H||U),"JSON",{stringify:T}),l(z,"Symbol"),l(Math,"Math",!0),l(e.JSON,"JSON",!0)},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c={}.hasOwnProperty;a.exports=function(a,b){return c.call(a,b)}},function(a,b,c){a.exports=!c(19)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b,c){var d=c(16),e=c(21),f=c(22),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(23);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b,c){a.exports=c(25)},function(a,b,c){var d=c(9),e=c(26);a.exports=c(18)?function(a,b,c){return d.setDesc(a,b,e(1,c))}:function(a,b,c){return a[b]=c,a}},function(a,b){a.exports=function(a,b){return{enumerable:!(1&a),configurable:!(2&a),writable:!(4&a),value:b}}},function(a,b,c){var d=c(16),e="__core-js_shared__",f=d[e]||(d[e]={});a.exports=function(a){return f[a]||(f[a]={})}},function(a,b,c){var d=c(9).setDesc,e=c(17),f=c(29)("toStringTag");a.exports=function(a,b,c){a&&!e(a=c?a:a.prototype,f)&&d(a,f,{configurable:!0,value:b})}},function(a,b,c){var d=c(27)("wks"),e=c(30),f=c(16).Symbol;a.exports=function(a){return d[a]||(d[a]=f&&f[a]||(f||e)("Symbol."+a))}},function(a,b){var c=0,d=Math.random();a.exports=function(a){return"Symbol(".concat(void 0===a?"":a,")_",(++c+d).toString(36))}},function(a,b,c){var d=c(9),e=c(32);a.exports=function(a,b){for(var c,f=e(a),g=d.getKeys(f),h=g.length,i=0;h>i;)if(f[c=g[i++]]===b)return c}},function(a,b,c){var d=c(33),e=c(35);a.exports=function(a){return d(e(a))}},function(a,b,c){var d=c(34);a.exports=Object("z").propertyIsEnumerable(0)?Object:function(a){return"String"==d(a)?a.split(""):Object(a)}},function(a,b){var c={}.toString;a.exports=function(a){return c.call(a).slice(8,-1)}},function(a,b){a.exports=function(a){if(void 0==a)throw TypeError("Can't call method on "+a);return a}},function(a,b,c){var d=c(32),e=c(9).getNames,f={}.toString,g="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],h=function(a){try{return e(a)}catch(b){return g.slice()}};a.exports.get=function(a){return g&&"[object Window]"==f.call(a)?h(a):e(d(a))}},function(a,b,c){var d=c(9);a.exports=function(a){var b=d.getKeys(a),c=d.getSymbols;if(c)for(var e,f=c(a),g=d.isEnum,h=0;f.length>h;)g.call(a,e=f[h++])&&b.push(e);return b}},function(a,b,c){var d=c(34);a.exports=Array.isArray||function(a){return"Array"==d(a)}},function(a,b,c){var d=c(40);a.exports=function(a){if(!d(a))throw TypeError(a+" is not an object!");return a}},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b){a.exports=!0},function(a,b){},function(a,b,c){a.exports={"default":c(44),__esModule:!0}},function(a,b,c){c(45),c(51),a.exports=c(29)("iterator")},function(a,b,c){"use strict";var d=c(46)(!0);c(48)(String,"String",function(a){this._t=String(a),this._i=0},function(){var a,b=this._t,c=this._i;return c>=b.length?{value:void 0,done:!0}:(a=d(b,c),this._i+=a.length,{value:a,done:!1})})},function(a,b,c){var d=c(47),e=c(35);a.exports=function(a){return function(b,c){var f,g,h=String(e(b)),i=d(c),j=h.length;return i<0||i>=j?a?"":void 0:(f=h.charCodeAt(i),f<55296||f>56319||i+1===j||(g=h.charCodeAt(i+1))<56320||g>57343?a?h.charAt(i):f:a?h.slice(i,i+2):(f-55296<<10)+(g-56320)+65536)}}},function(a,b){var c=Math.ceil,d=Math.floor;a.exports=function(a){return isNaN(a=+a)?0:(a>0?d:c)(a)}},function(a,b,c){"use strict";var d=c(41),e=c(20),f=c(24),g=c(25),h=c(17),i=c(49),j=c(50),k=c(28),l=c(9).getProto,m=c(29)("iterator"),n=!([].keys&&"next"in[].keys()),o="@@iterator",p="keys",q="values",r=function(){return this};a.exports=function(a,b,c,s,t,u,v){j(c,b,s);var w,x,y=function(a){if(!n&&a in C)return C[a];switch(a){case p:return function(){return new c(this,a)};case q:return function(){return new c(this,a)}}return function(){return new c(this,a)}},z=b+" Iterator",A=t==q,B=!1,C=a.prototype,D=C[m]||C[o]||t&&C[t],E=D||y(t);if(D){var F=l(E.call(new a));k(F,z,!0),!d&&h(C,o)&&g(F,m,r),A&&D.name!==q&&(B=!0,E=function(){return D.call(this)})}if(d&&!v||!n&&!B&&C[m]||g(C,m,E),i[b]=E,i[z]=r,t)if(w={values:A?E:y(q),keys:u?E:y(p),entries:A?y("entries"):E},v)for(x in w)x in C||f(C,x,w[x]);else e(e.P+e.F*(n||B),b,w);return w}},function(a,b){a.exports={}},function(a,b,c){"use strict";var d=c(9),e=c(26),f=c(28),g={};c(25)(g,c(29)("iterator"),function(){return this}),a.exports=function(a,b,c){a.prototype=d.create(g,{next:e(1,c)}),f(a,b+" Iterator")}},function(a,b,c){c(52);var d=c(49);d.NodeList=d.HTMLCollection=d.Array},function(a,b,c){"use strict";var d=c(53),e=c(54),f=c(49),g=c(32);a.exports=c(48)(Array,"Array",function(a,b){this._t=g(a),this._i=0,this._k=b},function(){var a=this._t,b=this._k,c=this._i++;return!a||c>=a.length?(this._t=void 0,e(1)):"keys"==b?e(0,c):"values"==b?e(0,a[c]):e(0,[c,a[c]])},"values"),f.Arguments=f.Array,d("keys"),d("values"),d("entries")},function(a,b){a.exports=function(){}},function(a,b){a.exports=function(a,b){return{value:b,done:!!a}}},function(a,b,c){a.exports={"default":c(56),__esModule:!0}},function(a,b,c){c(51),c(45),a.exports=c(57)},function(a,b,c){var d=c(39),e=c(58);a.exports=c(21).getIterator=function(a){var b=e(a);if("function"!=typeof b)throw TypeError(a+" is not iterable!");return d(b.call(a))}},function(a,b,c){var d=c(59),e=c(29)("iterator"),f=c(49);a.exports=c(21).getIteratorMethod=function(a){if(void 0!=a)return a[e]||a["@@iterator"]||f[d(a)]}},function(a,b,c){var d=c(34),e=c(29)("toStringTag"),f="Arguments"==d(function(){return arguments}());a.exports=function(a){var b,c,g;return void 0===a?"Undefined":null===a?"Null":"string"==typeof(c=(b=Object(a))[e])?c:f?d(b):"Object"==(g=d(b))&&"function"==typeof b.callee?"Arguments":g}},function(a,b,c){a.exports={"default":c(61),__esModule:!0}},function(a,b,c){c(62),a.exports=c(21).Object.keys},function(a,b,c){var d=c(63);c(64)("keys",function(a){return function(b){return a(d(b))}})},function(a,b,c){var d=c(35);a.exports=function(a){return Object(d(a))}},function(a,b,c){var d=c(20),e=c(21),f=c(19);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("if",function(a,b){if(2!=arguments.length)throw new g["default"]("#if requires exactly one argument");return e.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||e.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){if(2!=arguments.length)throw new g["default"]("#unless requires exactly one argument");return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f=w.LAST_COMPATIBLE_COMPILER_REVISION&&b<=w.COMPILER_REVISION)){if(b=0}var i=c(60)["default"],j=c(1)["default"],k=c(3)["default"];b.__esModule=!0,b.parseWithoutProcessing=d,b.parse=e;var l=c(85),m=j(l),n=c(86),o=j(n),p=c(88),q=k(p),r=c(6),s=j(r),t=c(5);b.parser=m["default"];var u={};t.extend(u,q)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA", +87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,0],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substring(a,b.yyleng-c+a)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(87),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new l["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=m.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()), +f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(m.isArray(a)&&m.isArray(b)&&a.length===b.length){for(var c=0;c1)throw new l["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new l["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,o["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=o["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d,e){var f=b.popStack(),g=c.length;a&&g--;for(var h=d;h0&&(c+=", "+d.join(", "));var e=0;g(this.aliases).forEach(function(a){var d=b.aliases[a];d.children&&d.referenceCount>1&&(c+=", alias"+ ++e+"="+a,d.children[0]="alias"+e)}),this.lookupPropertyFunctionIsUsed&&(c+=", "+this.lookupPropertyFunctionVarDeclaration());var f=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&f.push("blockParams"),this.useDepths&&f.push("depths");var h=this.mergeSource(c);return a?(f.push(h),Function.apply(this,f)):this.source.wrap(["function(",f.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return"\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n ".trim()},blockValue:function(a){var b=this.aliasable("container.hooks.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("container.hooks.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,c,a));for(var h=b.length,i=function(c){g.replaceStack(function(e){var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},j=c;jthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b 'Foo Bar' + * + * _.startCase('fooBar'); + * // => 'Foo Bar' + * + * _.startCase('__FOO_BAR__'); + * // => 'FOO BAR' + */ +var startCase = createCompounder(function(result, word, index) { + return result + (index ? ' ' : '') + upperFirst(word); +}); + +module.exports = startCase; diff --git a/.pnpm-store/v11/files/1b/052cd12d629ce38c1b2be49cdc17d46cf1bea473d8e307c863374fcea60df3fd7700abe46845448ca7da5ff3f28537f71e882c3f50aceb1ad7084cc831b14c b/.pnpm-store/v11/files/1b/052cd12d629ce38c1b2be49cdc17d46cf1bea473d8e307c863374fcea60df3fd7700abe46845448ca7da5ff3f28537f71e882c3f50aceb1ad7084cc831b14c new file mode 100644 index 00000000..3b68797d --- /dev/null +++ b/.pnpm-store/v11/files/1b/052cd12d629ce38c1b2be49cdc17d46cf1bea473d8e307c863374fcea60df3fd7700abe46845448ca7da5ff3f28537f71e882c3f50aceb1ad7084cc831b14c @@ -0,0 +1,36 @@ +var baseAssignValue = require('./_baseAssignValue'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'); + +/** + * The opposite of `_.mapValues`; this method creates an object with the + * same values as `object` and keys generated by running each own enumerable + * string keyed property of `object` thru `iteratee`. The iteratee is invoked + * with three arguments: (value, key, object). + * + * @static + * @memberOf _ + * @since 3.8.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Object} Returns the new mapped object. + * @see _.mapValues + * @example + * + * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { + * return key + value; + * }); + * // => { 'a1': 1, 'b2': 2 } + */ +function mapKeys(object, iteratee) { + var result = {}; + iteratee = baseIteratee(iteratee, 3); + + baseForOwn(object, function(value, key, object) { + baseAssignValue(result, iteratee(value, key, object), value); + }); + return result; +} + +module.exports = mapKeys; diff --git a/.pnpm-store/v11/files/1b/184a1e087f2fcde844d2a9cf88a115f678f0cc1257f79411b3e92ef519eaaf48c29be0df93c3a10fe980235b51e3c867caf282476f44596a798d146a965dac b/.pnpm-store/v11/files/1b/184a1e087f2fcde844d2a9cf88a115f678f0cc1257f79411b3e92ef519eaaf48c29be0df93c3a10fe980235b51e3c867caf282476f44596a798d146a965dac new file mode 100644 index 00000000..1081a744 --- /dev/null +++ b/.pnpm-store/v11/files/1b/184a1e087f2fcde844d2a9cf88a115f678f0cc1257f79411b3e92ef519eaaf48c29be0df93c3a10fe980235b51e3c867caf282476f44596a798d146a965dac @@ -0,0 +1,19 @@ +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +module.exports = setCacheAdd; diff --git a/.pnpm-store/v11/files/1b/5078caf8b28c6900280e24bcf755822b3befc1d8239cb0cd3a9f39ab06312eeb7d36f89cbf9c2986110282f83c32444602971dc239540a406282298259e2a3 b/.pnpm-store/v11/files/1b/5078caf8b28c6900280e24bcf755822b3befc1d8239cb0cd3a9f39ab06312eeb7d36f89cbf9c2986110282f83c32444602971dc239540a406282298259e2a3 new file mode 100644 index 00000000..e72045d2 --- /dev/null +++ b/.pnpm-store/v11/files/1b/5078caf8b28c6900280e24bcf755822b3befc1d8239cb0cd3a9f39ab06312eeb7d36f89cbf9c2986110282f83c32444602971dc239540a406282298259e2a3 @@ -0,0 +1,24 @@ +{ + "asi": false, + "boss": true, + "curly": true, + "eqeqeq": true, + "eqnull": true, + "esnext": true, + "immed": true, + "latedef": true, + "laxcomma": false, + "newcap": true, + "noarg": true, + "node": true, + "sub": true, + "undef": true, + "unused": true, + "globals": { + "define": true, + "before": true, + "after": true, + "describe": true, + "it": true + } +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/1b/5462efdc5775a3f8f33001879e2643f334f93be74e58b5fa0b2c0000de04cbd860d7626f749b29b7e2f2be4f8cc8e33db8d5fb2882c87dc4b87aa88d66a897 b/.pnpm-store/v11/files/1b/5462efdc5775a3f8f33001879e2643f334f93be74e58b5fa0b2c0000de04cbd860d7626f749b29b7e2f2be4f8cc8e33db8d5fb2882c87dc4b87aa88d66a897 new file mode 100644 index 00000000..6a1aa1ec --- /dev/null +++ b/.pnpm-store/v11/files/1b/5462efdc5775a3f8f33001879e2643f334f93be74e58b5fa0b2c0000de04cbd860d7626f749b29b7e2f2be4f8cc8e33db8d5fb2882c87dc4b87aa88d66a897 @@ -0,0 +1,156 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = retry; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _constant = require('lodash/constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Attempts to get a successful response from `task` no more than `times` times + * before returning an error. If the task is successful, the `callback` will be + * passed the result of the successful task. If all attempts fail, the callback + * will be passed the error and result (if any) of the final attempt. + * + * @name retry + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @see [async.retryable]{@link module:ControlFlow.retryable} + * @param {Object|number} [opts = {times: 5, interval: 0}| 5] - Can be either an + * object with `times` and `interval` or a number. + * * `times` - The number of attempts to make before giving up. The default + * is `5`. + * * `interval` - The time to wait between retries, in milliseconds. The + * default is `0`. The interval may also be specified as a function of the + * retry count (see example). + * * `errorFilter` - An optional synchronous function that is invoked on + * erroneous result. If it returns `true` the retry attempts will continue; + * if the function returns `false` the retry flow is aborted with the current + * attempt's error and result being returned to the final callback. + * Invoked with (err). + * * If `opts` is a number, the number specifies the number of times to retry, + * with the default interval of `0`. + * @param {AsyncFunction} task - An async function to retry. + * Invoked with (callback). + * @param {Function} [callback] - An optional callback which is called when the + * task has succeeded, or after the final failed attempt. It receives the `err` + * and `result` arguments of the last attempt at completing the `task`. Invoked + * with (err, results). + * + * @example + * + * // The `retry` function can be used as a stand-alone control flow by passing + * // a callback, as shown below: + * + * // try calling apiMethod 3 times + * async.retry(3, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 3 times, waiting 200 ms between each retry + * async.retry({times: 3, interval: 200}, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod 10 times with exponential backoff + * // (i.e. intervals of 100, 200, 400, 800, 1600, ... milliseconds) + * async.retry({ + * times: 10, + * interval: function(retryCount) { + * return 50 * Math.pow(2, retryCount); + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod the default 5 times no delay between each retry + * async.retry(apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // try calling apiMethod only when error condition satisfies, all other + * // errors will abort the retry control flow and return to final callback + * async.retry({ + * errorFilter: function(err) { + * return err.message === 'Temporary error'; // only retry on a specific error + * } + * }, apiMethod, function(err, result) { + * // do something with the result + * }); + * + * // to retry individual methods that are not as reliable within other + * // control flow functions, use the `retryable` wrapper: + * async.auto({ + * users: api.getUsers.bind(api), + * payments: async.retryable(3, api.getPayments.bind(api)) + * }, function(err, results) { + * // do something with the results + * }); + * + */ +function retry(opts, task, callback) { + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var options = { + times: DEFAULT_TIMES, + intervalFunc: (0, _constant2.default)(DEFAULT_INTERVAL) + }; + + function parseTimes(acc, t) { + if (typeof t === 'object') { + acc.times = +t.times || DEFAULT_TIMES; + + acc.intervalFunc = typeof t.interval === 'function' ? t.interval : (0, _constant2.default)(+t.interval || DEFAULT_INTERVAL); + + acc.errorFilter = t.errorFilter; + } else if (typeof t === 'number' || typeof t === 'string') { + acc.times = +t || DEFAULT_TIMES; + } else { + throw new Error("Invalid arguments for async.retry"); + } + } + + if (arguments.length < 3 && typeof opts === 'function') { + callback = task || _noop2.default; + task = opts; + } else { + parseTimes(options, opts); + callback = callback || _noop2.default; + } + + if (typeof task !== 'function') { + throw new Error("Invalid arguments for async.retry"); + } + + var _task = (0, _wrapAsync2.default)(task); + + var attempt = 1; + function retryAttempt() { + _task(function (err) { + if (err && attempt++ < options.times && (typeof options.errorFilter != 'function' || options.errorFilter(err))) { + setTimeout(retryAttempt, options.intervalFunc(attempt)); + } else { + callback.apply(null, arguments); + } + }); + } + + retryAttempt(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/1b/6b3324d972be99a3fdfc8ac69b7fccd7d055156127cf05f4f3381f40ce4db74fb0826f9fbf8089026808445f55d611d049560f98ff81b41a9e159dc66b0902 b/.pnpm-store/v11/files/1b/6b3324d972be99a3fdfc8ac69b7fccd7d055156127cf05f4f3381f40ce4db74fb0826f9fbf8089026808445f55d611d049560f98ff81b41a9e159dc66b0902 new file mode 100644 index 00000000..313f5d2e --- /dev/null +++ b/.pnpm-store/v11/files/1b/6b3324d972be99a3fdfc8ac69b7fccd7d055156127cf05f4f3381f40ce4db74fb0826f9fbf8089026808445f55d611d049560f98ff81b41a9e159dc66b0902 @@ -0,0 +1,47 @@ +/*:nodoc:* + * class ActionAppendConstant + * + * This stores a list, and appends the value specified by + * the const keyword argument to the list. + * (Note that the const keyword argument defaults to null.) + * The 'appendConst' action is typically useful when multiple + * arguments need to store constants to the same list. + * + * This class inherited from [[Action]] + **/ + +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionAppendConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionAppendConstant = module.exports = function ActionAppendConstant(options) { + options = options || {}; + options.nargs = 0; + if (typeof options.constant === 'undefined') { + throw new Error('constant option is required for appendAction'); + } + Action.call(this, options); +}; +util.inherits(ActionAppendConstant, Action); + +/*:nodoc:* + * ActionAppendConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionAppendConstant.prototype.call = function (parser, namespace) { + var items = [].concat(namespace[this.dest] || []); + items.push(this.constant); + namespace.set(this.dest, items); +}; diff --git a/.pnpm-store/v11/files/1b/832ae6ef12df389dc5028ccd80dc811eab5d4816db87ba8e531ea47a2097a26801c14f15e0e736c94c665964d23e55e58750fcff7693166b2adb1f7d582c89 b/.pnpm-store/v11/files/1b/832ae6ef12df389dc5028ccd80dc811eab5d4816db87ba8e531ea47a2097a26801c14f15e0e736c94c665964d23e55e58750fcff7693166b2adb1f7d582c89 new file mode 100644 index 00000000..48202b3c --- /dev/null +++ b/.pnpm-store/v11/files/1b/832ae6ef12df389dc5028ccd80dc811eab5d4816db87ba8e531ea47a2097a26801c14f15e0e736c94c665964d23e55e58750fcff7693166b2adb1f7d582c89 @@ -0,0 +1,54 @@ +var wrappy = require('wrappy') +var reqs = Object.create(null) +var once = require('once') + +module.exports = wrappy(inflight) + +function inflight (key, cb) { + if (reqs[key]) { + reqs[key].push(cb) + return null + } else { + reqs[key] = [cb] + return makeres(key) + } +} + +function makeres (key) { + return once(function RES () { + var cbs = reqs[key] + var len = cbs.length + var args = slice(arguments) + + // XXX It's somewhat ambiguous whether a new callback added in this + // pass should be queued for later execution if something in the + // list of callbacks throws, or if it should just be discarded. + // However, it's such an edge case that it hardly matters, and either + // choice is likely as surprising as the other. + // As it happens, we do go ahead and schedule it for later execution. + try { + for (var i = 0; i < len; i++) { + cbs[i].apply(null, args) + } + } finally { + if (cbs.length > len) { + // added more in the interim. + // de-zalgo, just in case, but don't call again. + cbs.splice(0, len) + process.nextTick(function () { + RES.apply(null, args) + }) + } else { + delete reqs[key] + } + } + }) +} + +function slice (args) { + var length = args.length + var array = [] + + for (var i = 0; i < length; i++) array[i] = args[i] + return array +} diff --git a/.pnpm-store/v11/files/1b/952614f15f7f31e5b035a6ca78383985e90f41cf3dc5d90e5b16092bb99a84a13f78bbdda421901009aeceef3f967d21a3a905094d2ed811176d831b13bd4d b/.pnpm-store/v11/files/1b/952614f15f7f31e5b035a6ca78383985e90f41cf3dc5d90e5b16092bb99a84a13f78bbdda421901009aeceef3f967d21a3a905094d2ed811176d831b13bd4d new file mode 100644 index 00000000..12072c64 --- /dev/null +++ b/.pnpm-store/v11/files/1b/952614f15f7f31e5b035a6ca78383985e90f41cf3dc5d90e5b16092bb99a84a13f78bbdda421901009aeceef3f967d21a3a905094d2ed811176d831b13bd4d @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').dir; diff --git a/.pnpm-store/v11/files/1b/db54b899c476ce908e7cb075def68a97b8e75bdfd2c9a44cb1a8d79fa47441ab2798ff371406b708ccb33f1ad1e1441e714c05e6b5f65b6bb08333ed9d65b0 b/.pnpm-store/v11/files/1b/db54b899c476ce908e7cb075def68a97b8e75bdfd2c9a44cb1a8d79fa47441ab2798ff371406b708ccb33f1ad1e1441e714c05e6b5f65b6bb08333ed9d65b0 new file mode 100644 index 00000000..432d1aeb --- /dev/null +++ b/.pnpm-store/v11/files/1b/db54b899c476ce908e7cb075def68a97b8e75bdfd2c9a44cb1a8d79fa47441ab2798ff371406b708ccb33f1ad1e1441e714c05e6b5f65b6bb08333ed9d65b0 @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/1b/ee2f37f6cd3d1d1acd21d9a355273d51961a93af940e29ec807f52d4547f50465cb6693c78815f89d01f6e5a9b73f748dd702f1196023a56a6754e3ff9666a b/.pnpm-store/v11/files/1b/ee2f37f6cd3d1d1acd21d9a355273d51961a93af940e29ec807f52d4547f50465cb6693c78815f89d01f6e5a9b73f748dd702f1196023a56a6754e3ff9666a new file mode 100644 index 00000000..cc4dba29 --- /dev/null +++ b/.pnpm-store/v11/files/1b/ee2f37f6cd3d1d1acd21d9a355273d51961a93af940e29ec807f52d4547f50465cb6693c78815f89d01f6e5a9b73f748dd702f1196023a56a6754e3ff9666a @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/.pnpm-store/v11/files/1b/f1ece6699ecb25b0b80c57a098fa66f3fcdca35b839759e03a77f4f23be6afdc1f04a134f2b664a8b5ce3e4a155be3bdb1b5ae1bc4ff03f22e943027044ee7 b/.pnpm-store/v11/files/1b/f1ece6699ecb25b0b80c57a098fa66f3fcdca35b839759e03a77f4f23be6afdc1f04a134f2b664a8b5ce3e4a155be3bdb1b5ae1bc4ff03f22e943027044ee7 new file mode 100644 index 00000000..f460c15e --- /dev/null +++ b/.pnpm-store/v11/files/1b/f1ece6699ecb25b0b80c57a098fa66f3fcdca35b839759e03a77f4f23be6afdc1f04a134f2b664a8b5ce3e4a155be3bdb1b5ae1bc4ff03f22e943027044ee7 @@ -0,0 +1,23 @@ +/** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ +function stubArray() { + return []; +} + +module.exports = stubArray; diff --git a/.pnpm-store/v11/files/1c/0ea3bfaae34af57d81ccffb175d9f427f1b87907cf4f93a403972761f097e4e6f8cc9a1bc4413264bb73d2e7c58013baf523ac2772b2e0e1633bbe1190c7e5 b/.pnpm-store/v11/files/1c/0ea3bfaae34af57d81ccffb175d9f427f1b87907cf4f93a403972761f097e4e6f8cc9a1bc4413264bb73d2e7c58013baf523ac2772b2e0e1633bbe1190c7e5 new file mode 100644 index 00000000..153e47c3 --- /dev/null +++ b/.pnpm-store/v11/files/1c/0ea3bfaae34af57d81ccffb175d9f427f1b87907cf4f93a403972761f097e4e6f8cc9a1bc4413264bb73d2e7c58013baf523ac2772b2e0e1633bbe1190c7e5 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').groupBySeries; diff --git a/.pnpm-store/v11/files/1c/12863ccbeb4164adc57ca5a0f0ce9217c0a5f8f838a51e84829fe4051499da64384570bba7b43622e116d8d0d5448b7ba1734266af7d604be1e069c21e2e26 b/.pnpm-store/v11/files/1c/12863ccbeb4164adc57ca5a0f0ce9217c0a5f8f838a51e84829fe4051499da64384570bba7b43622e116d8d0d5448b7ba1734266af7d604be1e069c21e2e26 new file mode 100644 index 00000000..85cda4f8 --- /dev/null +++ b/.pnpm-store/v11/files/1c/12863ccbeb4164adc57ca5a0f0ce9217c0a5f8f838a51e84829fe4051499da64384570bba7b43622e116d8d0d5448b7ba1734266af7d604be1e069c21e2e26 @@ -0,0 +1,77 @@ +'use strict'; + +var nanomatch = require('nanomatch'); +var extglob = require('extglob'); + +module.exports = function(snapdragon) { + var compilers = snapdragon.compiler.compilers; + var opts = snapdragon.options; + + // register nanomatch compilers + snapdragon.use(nanomatch.compilers); + + // get references to some specific nanomatch compilers before they + // are overridden by the extglob and/or custom compilers + var escape = compilers.escape; + var qmark = compilers.qmark; + var slash = compilers.slash; + var star = compilers.star; + var text = compilers.text; + var plus = compilers.plus; + var dot = compilers.dot; + + // register extglob compilers or escape exglobs if disabled + if (opts.extglob === false || opts.noext === true) { + snapdragon.compiler.use(escapeExtglobs); + } else { + snapdragon.use(extglob.compilers); + } + + snapdragon.use(function() { + this.options.star = this.options.star || function(/*node*/) { + return '[^\\\\/]*?'; + }; + }); + + // custom micromatch compilers + snapdragon.compiler + + // reset referenced compiler + .set('dot', dot) + .set('escape', escape) + .set('plus', plus) + .set('slash', slash) + .set('qmark', qmark) + .set('star', star) + .set('text', text); +}; + +function escapeExtglobs(compiler) { + compiler.set('paren', function(node) { + var val = ''; + visit(node, function(tok) { + if (tok.val) val += (/^\W/.test(tok.val) ? '\\' : '') + tok.val; + }); + return this.emit(val, node); + }); + + /** + * Visit `node` with the given `fn` + */ + + function visit(node, fn) { + return node.nodes ? mapVisit(node.nodes, fn) : fn(node); + } + + /** + * Map visit over array of `nodes`. + */ + + function mapVisit(nodes, fn) { + var len = nodes.length; + var idx = -1; + while (++idx < len) { + visit(nodes[idx], fn); + } + } +} diff --git a/.pnpm-store/v11/files/1c/1731373a93c3d7f27dde4b6e06565d013ec7fdf6714ec3e1f5844752059a0790e4bc571f20301f45dc63a55e9129e304ecf3551791370c40152942caecd574 b/.pnpm-store/v11/files/1c/1731373a93c3d7f27dde4b6e06565d013ec7fdf6714ec3e1f5844752059a0790e4bc571f20301f45dc63a55e9129e304ecf3551791370c40152942caecd574 new file mode 100644 index 00000000..3fd35784 --- /dev/null +++ b/.pnpm-store/v11/files/1c/1731373a93c3d7f27dde4b6e06565d013ec7fdf6714ec3e1f5844752059a0790e4bc571f20301f45dc63a55e9129e304ecf3551791370c40152942caecd574 @@ -0,0 +1,55 @@ +'use strict'; + +const kDone = Symbol('kDone'); +const kRun = Symbol('kRun'); + +/** + * A very simple job queue with adjustable concurrency. Adapted from + * https://github.com/STRML/async-limiter + */ +class Limiter { + /** + * Creates a new `Limiter`. + * + * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed + * to run concurrently + */ + constructor(concurrency) { + this[kDone] = () => { + this.pending--; + this[kRun](); + }; + this.concurrency = concurrency || Infinity; + this.jobs = []; + this.pending = 0; + } + + /** + * Adds a job to the queue. + * + * @param {Function} job The job to run + * @public + */ + add(job) { + this.jobs.push(job); + this[kRun](); + } + + /** + * Removes a job from the queue and runs it if possible. + * + * @private + */ + [kRun]() { + if (this.pending === this.concurrency) return; + + if (this.jobs.length) { + const job = this.jobs.shift(); + + this.pending++; + job(this[kDone]); + } + } +} + +module.exports = Limiter; diff --git a/.pnpm-store/v11/files/1c/2064eae9dcc83b6b8d521bcbb91598fc1c6eb94c0e22c29e20accb4a6b801f672189562181933598204dc81200259992eff0bb9e7431c08b04b6c65cf54d0e b/.pnpm-store/v11/files/1c/2064eae9dcc83b6b8d521bcbb91598fc1c6eb94c0e22c29e20accb4a6b801f672189562181933598204dc81200259992eff0bb9e7431c08b04b6c65cf54d0e new file mode 100644 index 00000000..1006eef1 --- /dev/null +++ b/.pnpm-store/v11/files/1c/2064eae9dcc83b6b8d521bcbb91598fc1c6eb94c0e22c29e20accb4a6b801f672189562181933598204dc81200259992eff0bb9e7431c08b04b6c65cf54d0e @@ -0,0 +1,27 @@ +/*! + * is-equal-shallow + * + * Copyright (c) 2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isPrimitive = require('is-primitive'); + +module.exports = function isEqual(a, b) { + if (!a && !b) { return true; } + if (!a && b || a && !b) { return false; } + + var numKeysA = 0, numKeysB = 0, key; + for (key in b) { + numKeysB++; + if (!isPrimitive(b[key]) || !a.hasOwnProperty(key) || (a[key] !== b[key])) { + return false; + } + } + for (key in a) { + numKeysA++; + } + return numKeysA === numKeysB; +}; diff --git a/.pnpm-store/v11/files/1c/2ebe46f97f419803e11584440eac09bf0f9c3ee01e84670cfec4df563854c4b1b980b247f6086f1d997f36876984bbd658ee8fcb91b226ea19829c1791e1ab b/.pnpm-store/v11/files/1c/2ebe46f97f419803e11584440eac09bf0f9c3ee01e84670cfec4df563854c4b1b980b247f6086f1d997f36876984bbd658ee8fcb91b226ea19829c1791e1ab new file mode 100644 index 00000000..ddbca31c --- /dev/null +++ b/.pnpm-store/v11/files/1c/2ebe46f97f419803e11584440eac09bf0f9c3ee01e84670cfec4df563854c4b1b980b247f6086f1d997f36876984bbd658ee8fcb91b226ea19829c1791e1ab @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/1c/5057d4dc31375fd22b7a6ebadd692ec3afa8883e1251704081d507a13291d60ed9bae25386a643f5a88dbab05425c25b394e23e4cf013312b3156247d6afca b/.pnpm-store/v11/files/1c/5057d4dc31375fd22b7a6ebadd692ec3afa8883e1251704081d507a13291d60ed9bae25386a643f5a88dbab05425c25b394e23e4cf013312b3156247d6afca new file mode 100644 index 00000000..e9d13273 --- /dev/null +++ b/.pnpm-store/v11/files/1c/5057d4dc31375fd22b7a6ebadd692ec3afa8883e1251704081d507a13291d60ed9bae25386a643f5a88dbab05425c25b394e23e4cf013312b3156247d6afca @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('remove', require('../remove')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/1c/ab42d502d395f781e6d31fc9e4e21e52dfeb6d91605dd901b236e439a636fb40563ba31fe74b23767c2da75ce543d2f597021322aab6f04349d02155fab8ef b/.pnpm-store/v11/files/1c/ab42d502d395f781e6d31fc9e4e21e52dfeb6d91605dd901b236e439a636fb40563ba31fe74b23767c2da75ce543d2f597021322aab6f04349d02155fab8ef new file mode 100644 index 00000000..3b945516 --- /dev/null +++ b/.pnpm-store/v11/files/1c/ab42d502d395f781e6d31fc9e4e21e52dfeb6d91605dd901b236e439a636fb40563ba31fe74b23767c2da75ce543d2f597021322aab6f04349d02155fab8ef @@ -0,0 +1,27 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + baseUnary = require('./_baseUnary'), + flatRest = require('./_flatRest'); + +/** + * Creates a function like `_.over`. + * + * @private + * @param {Function} arrayFunc The function to iterate over iteratees. + * @returns {Function} Returns the new over function. + */ +function createOver(arrayFunc) { + return flatRest(function(iteratees) { + iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); + return baseRest(function(args) { + var thisArg = this; + return arrayFunc(iteratees, function(iteratee) { + return apply(iteratee, thisArg, args); + }); + }); + }); +} + +module.exports = createOver; diff --git a/.pnpm-store/v11/files/1c/aebaae7d450d246bb09f5fd49ac488905ae6b3a545170872ba023f0fbe8a79cb79d88e01c6549ee0138c3a76bea689e4848594417d43d27ec035ed8087af56 b/.pnpm-store/v11/files/1c/aebaae7d450d246bb09f5fd49ac488905ae6b3a545170872ba023f0fbe8a79cb79d88e01c6549ee0138c3a76bea689e4848594417d43d27ec035ed8087af56 new file mode 100644 index 00000000..c9e278c2 --- /dev/null +++ b/.pnpm-store/v11/files/1c/aebaae7d450d246bb09f5fd49ac488905ae6b3a545170872ba023f0fbe8a79cb79d88e01c6549ee0138c3a76bea689e4848594417d43d27ec035ed8087af56 @@ -0,0 +1,36 @@ +{ + "name": "suman-watch-plugins", + "version": "0.0.102", + "description": "Plugins to be used with suman-watch utilities.", + "main": "index.js", + "scripts": { + "test": "./scripts/test.sh" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sumanjs/suman-watch-plugins.git" + }, + "keywords": [ + "sumanjs", + "suman", + "watch", + "testing", + "dx", + "developer-experience" + ], + "author": "Olegzandr VD", + "license": "MIT", + "bugs": { + "url": "https://github.com/sumanjs/suman-watch-plugins/issues" + }, + "homepage": "https://github.com/sumanjs/suman-watch-plugins#readme", + "dependencies": { + "chalk": "^2.3.0", + "semver": "^5.4.1", + "suman-utils": "0.0.73121" + }, + "devDependencies": { + "@types/core-js": "^0.9.43", + "@types/node": "^8.0.47" + } +} diff --git a/.pnpm-store/v11/files/1c/c371a1c30b44a578e0ccfbcf1617341ff1315c313c828f633a4abb66de84b570038a3cd5fdba056ccb48306c6fd0fcd06332c3a84da944a181691e55f214af b/.pnpm-store/v11/files/1c/c371a1c30b44a578e0ccfbcf1617341ff1315c313c828f633a4abb66de84b570038a3cd5fdba056ccb48306c6fd0fcd06332c3a84da944a181691e55f214af new file mode 100644 index 00000000..2d33043d --- /dev/null +++ b/.pnpm-store/v11/files/1c/c371a1c30b44a578e0ccfbcf1617341ff1315c313c828f633a4abb66de84b570038a3cd5fdba056ccb48306c6fd0fcd06332c3a84da944a181691e55f214af @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2018 [NAN contributors]() + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/1c/cd2b733bddf2487e882a2db11d0fa789badbb9960a37fbad52412437539b37d6f8dafe6eb6f5eb07c89a73b010201de9e6f3c71911e1bc279c52e0d165a6f7 b/.pnpm-store/v11/files/1c/cd2b733bddf2487e882a2db11d0fa789badbb9960a37fbad52412437539b37d6f8dafe6eb6f5eb07c89a73b010201de9e6f3c71911e1bc279c52e0d165a6f7 new file mode 100644 index 00000000..2763c5ae --- /dev/null +++ b/.pnpm-store/v11/files/1c/cd2b733bddf2487e882a2db11d0fa789badbb9960a37fbad52412437539b37d6f8dafe6eb6f5eb07c89a73b010201de9e6f3c71911e1bc279c52e0d165a6f7 @@ -0,0 +1,281 @@ +# to-regex-range [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range) + +> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save to-regex-range +``` + +Install with [yarn](https://yarnpkg.com): + +```sh +$ yarn add to-regex-range +``` + +
+What does this do? + +
+ +This libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers. + +**Example** + +```js +var toRegexRange = require('to-regex-range'); +var regex = new RegExp(toRegexRange('15', '95')); +``` + +A string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string). + +
+ +
+ +
+Why use this library? + +
+ +### Convenience + +Creating regular expressions for matching numbers gets deceptively complicated pretty fast. + +For example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc: + +* regex for matching `1` => `/1/` (easy enough) +* regex for matching `1` through `5` => `/[1-5]/` (not bad...) +* regex for matching `1` or `5` => `/(1|5)/` (still easy...) +* regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...) +* regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...) +* regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...) +* regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!) + +The numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation. + +**Learn more** + +If you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful. + +### Heavily tested + +As of April 27, 2017, this library runs [2,783,483 test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are indeed correct. + +Tests run in ~870ms on my MacBook Pro, 2.5 GHz Intel Core i7. + +### Highly optimized + +Generated regular expressions are highly optimized: + +* duplicate sequences and character classes are reduced using quantifiers +* smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative +* uses fragment caching to avoid processing the same exact string more than once + +
+ +
+ +## Usage + +Add this library to your javascript application with the following line of code + +```js +var toRegexRange = require('to-regex-range'); +``` + +The main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers). + +```js +var source = toRegexRange('15', '95'); +//=> 1[5-9]|[2-8][0-9]|9[0-5] + +var re = new RegExp('^' + source + '$'); +console.log(re.test('14')); //=> false +console.log(re.test('50')); //=> true +console.log(re.test('94')); //=> true +console.log(re.test('96')); //=> false +``` + +## Options + +### options.capture + +**Type**: `boolean` + +**Deafault**: `undefined` + +Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges. + +```js +console.log(toRegexRange('-10', '10')); +//=> -[1-9]|-?10|[0-9] + +console.log(toRegexRange('-10', '10', {capture: true})); +//=> (-[1-9]|-?10|[0-9]) +``` + +### options.shorthand + +**Type**: `boolean` + +**Deafault**: `undefined` + +Use the regex shorthand for `[0-9]`: + +```js +console.log(toRegexRange('0', '999999')); +//=> [0-9]|[1-9][0-9]{1,5} + +console.log(toRegexRange('0', '999999', {shorthand: true})); +//=> \d|[1-9]\d{1,5} +``` + +### options.relaxZeros + +**Type**: `boolean` + +**Default**: `true` + +This option only applies to **negative zero-padded ranges**. By default, when a negative zero-padded range is defined, the number of leading zeros is relaxed using `-0*`. + +```js +console.log(toRegexRange('-001', '100')); +//=> -0*1|0{2}[0-9]|0[1-9][0-9]|100 + +console.log(toRegexRange('-001', '100', {relaxZeros: false})); +//=> -0{2}1|0{2}[0-9]|0[1-9][0-9]|100 +``` + +
+Why are zeros relaxed for negative zero-padded ranges by default? + +Consider the following. + +```js +var regex = toRegexRange('-001', '100'); +``` + +_Note that `-001` and `100` are both three digits long_. + +In most zero-padding implementations, only a single leading zero is enough to indicate that zero-padding should be applied. Thus, the leading zeros would be "corrected" on the negative range in the example to `-01`, instead of `-001`, to make total length of each string no greater than the length of the largest number in the range (in other words, `-001` is 4 digits, but `100` is only three digits). + +If zeros were not relaxed by default, you might expect the resulting regex of the above pattern to match `-001` - given that it's defined that way in the arguments - _but it wouldn't_. It would, however, match `-01`. This gets even more ambiguous with large ranges, like `-01` to `1000000`. + +Thus, we relax zeros by default to provide a more predictable experience for users. + +
+ +## Examples + +| **Range** | **Result** | **Compile time** | +| --- | --- | --- | +| `toRegexRange('5, 5')` | `5` | _33μs_ | +| `toRegexRange('5, 6')` | `5\|6` | _53μs_ | +| `toRegexRange('29, 51')` | `29\|[34][0-9]\|5[01]` | _699μs_ | +| `toRegexRange('31, 877')` | `3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7]` | _711μs_ | +| `toRegexRange('111, 555')` | `11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _62μs_ | +| `toRegexRange('-10, 10')` | `-[1-9]\|-?10\|[0-9]` | _74μs_ | +| `toRegexRange('-100, -10')` | `-1[0-9]\|-[2-9][0-9]\|-100` | _49μs_ | +| `toRegexRange('-100, 100')` | `-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9]` | _45μs_ | +| `toRegexRange('001, 100')` | `0{2}[1-9]\|0[1-9][0-9]\|100` | _158μs_ | +| `toRegexRange('0010, 1000')` | `0{2}1[0-9]\|0{2}[2-9][0-9]\|0[1-9][0-9]{2}\|1000` | _61μs_ | +| `toRegexRange('1, 2')` | `1\|2` | _10μs_ | +| `toRegexRange('1, 5')` | `[1-5]` | _24μs_ | +| `toRegexRange('1, 10')` | `[1-9]\|10` | _23μs_ | +| `toRegexRange('1, 100')` | `[1-9]\|[1-9][0-9]\|100` | _30μs_ | +| `toRegexRange('1, 1000')` | `[1-9]\|[1-9][0-9]{1,2}\|1000` | _52μs_ | +| `toRegexRange('1, 10000')` | `[1-9]\|[1-9][0-9]{1,3}\|10000` | _47μs_ | +| `toRegexRange('1, 100000')` | `[1-9]\|[1-9][0-9]{1,4}\|100000` | _44μs_ | +| `toRegexRange('1, 1000000')` | `[1-9]\|[1-9][0-9]{1,5}\|1000000` | _49μs_ | +| `toRegexRange('1, 10000000')` | `[1-9]\|[1-9][0-9]{1,6}\|10000000` | _63μs_ | + +## Heads up! + +**Order of arguments** + +When the `min` is larger than the `max`, values will be flipped to create a valid range: + +```js +toRegexRange('51', '29'); +``` + +Is effectively flipped to: + +```js +toRegexRange('29', '51'); +//=> 29|[3-4][0-9]|5[0-1] +``` + +**Steps / increments** + +This library does not support steps (increments). A pr to add support would be welcome. + +## History + +### v2.0.0 - 2017-04-21 + +**New features** + +Adds support for zero-padding! + +### v1.0.0 + +**Optimizations** + +Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching. + +## Attribution + +Inspired by the python library [range-regex](https://github.com/dimka665/range-regex). + +## About + +### Related projects + +* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.") +* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") +* [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") +* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on April 27, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/1c/d2515367ece98a184658acb923dfcd03277d92573cd15584ac624efdc979372e719c66a3fd5a19e42eda9618f078b6bc6a635a9981856338b6eb8e4ca234f8 b/.pnpm-store/v11/files/1c/d2515367ece98a184658acb923dfcd03277d92573cd15584ac624efdc979372e719c66a3fd5a19e42eda9618f078b6bc6a635a9981856338b6eb8e4ca234f8 new file mode 100644 index 00000000..71392c55 --- /dev/null +++ b/.pnpm-store/v11/files/1c/d2515367ece98a184658acb923dfcd03277d92573cd15584ac624efdc979372e719c66a3fd5a19e42eda9618f078b6bc6a635a9981856338b6eb8e4ca234f8 @@ -0,0 +1,46 @@ +'use strict'; + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _utils = require('../utils'); + +var _exception = require('../exception'); + +var _exception2 = _interopRequireDefault(_exception); + +exports['default'] = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#if requires exactly one argument'); + } + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); +}; + +module.exports = exports['default']; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19 diff --git a/.pnpm-store/v11/files/1d/0688424f69c0e7322aeb720e4e28d9af3b5a7a2dc18b8b198156e377a61a6e05bc824528fca0f8e61ac39b137a028029ff82e5229ad400a3cc22e2bdb687ad b/.pnpm-store/v11/files/1d/0688424f69c0e7322aeb720e4e28d9af3b5a7a2dc18b8b198156e377a61a6e05bc824528fca0f8e61ac39b137a028029ff82e5229ad400a3cc22e2bdb687ad new file mode 100644 index 00000000..9e841e7a --- /dev/null +++ b/.pnpm-store/v11/files/1d/0688424f69c0e7322aeb720e4e28d9af3b5a7a2dc18b8b198156e377a61a6e05bc824528fca0f8e61ac39b137a028029ff82e5229ad400a3cc22e2bdb687ad @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/.pnpm-store/v11/files/1d/0688424f69c0e7322aeb720e4e28d9af3b5a7a2dc18b8b198156e377a61a6e05bc824528fca0f8e61ac39b137a028029ff82e5229ad400a3cc22e2bdb687ad-exec b/.pnpm-store/v11/files/1d/0688424f69c0e7322aeb720e4e28d9af3b5a7a2dc18b8b198156e377a61a6e05bc824528fca0f8e61ac39b137a028029ff82e5229ad400a3cc22e2bdb687ad-exec new file mode 100755 index 00000000..9e841e7a --- /dev/null +++ b/.pnpm-store/v11/files/1d/0688424f69c0e7322aeb720e4e28d9af3b5a7a2dc18b8b198156e377a61a6e05bc824528fca0f8e61ac39b137a028029ff82e5229ad400a3cc22e2bdb687ad-exec @@ -0,0 +1,21 @@ + MIT License + + Copyright (c) Microsoft Corporation. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/.pnpm-store/v11/files/1d/1f666a6e7025e797b93ff959ef4df82989efe52e14e1cdac6b6b6041ab7c82a36720f3efc44ffde0a8784262c3e79f3250448dd926a7b82f0ff4fe167a2e59 b/.pnpm-store/v11/files/1d/1f666a6e7025e797b93ff959ef4df82989efe52e14e1cdac6b6b6041ab7c82a36720f3efc44ffde0a8784262c3e79f3250448dd926a7b82f0ff4fe167a2e59 new file mode 100644 index 00000000..b1baba26 --- /dev/null +++ b/.pnpm-store/v11/files/1d/1f666a6e7025e797b93ff959ef4df82989efe52e14e1cdac6b6b6041ab7c82a36720f3efc44ffde0a8784262c3e79f3250448dd926a7b82f0ff4fe167a2e59 @@ -0,0 +1 @@ +module.exports = require('./readable').Transform diff --git a/.pnpm-store/v11/files/1d/454a7f85faa010a868741fcc09822e4974c3e7097cf437a32e94c6cf0f5dd56b68311426ced97f37888cb86f2672bf9e481f051d037fa2c56487edd645bb31 b/.pnpm-store/v11/files/1d/454a7f85faa010a868741fcc09822e4974c3e7097cf437a32e94c6cf0f5dd56b68311426ced97f37888cb86f2672bf9e481f051d037fa2c56487edd645bb31 new file mode 100644 index 00000000..ea32ba8c --- /dev/null +++ b/.pnpm-store/v11/files/1d/454a7f85faa010a868741fcc09822e4974c3e7097cf437a32e94c6cf0f5dd56b68311426ced97f37888cb86f2672bf9e481f051d037fa2c56487edd645bb31 @@ -0,0 +1,15 @@ +{ + "name": "backo2", + "version": "1.0.2", + "repository": "mokesmokes/backo", + "description": "simple backoff based on segmentio/backo", + "keywords": [ + "backoff" + ], + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/1d/4bec52443f38c282ae3492b8c915eeda673246ce5686f7ed81cd5f245f1a33b49d3efc631c7b29977bc71d921c5c5d7cad7f2182af02e15f4945c23fdada34 b/.pnpm-store/v11/files/1d/4bec52443f38c282ae3492b8c915eeda673246ce5686f7ed81cd5f245f1a33b49d3efc631c7b29977bc71d921c5c5d7cad7f2182af02e15f4945c23fdada34 new file mode 100644 index 00000000..ea174f8e --- /dev/null +++ b/.pnpm-store/v11/files/1d/4bec52443f38c282ae3492b8c915eeda673246ce5686f7ed81cd5f245f1a33b49d3efc631c7b29977bc71d921c5c5d7cad7f2182af02e15f4945c23fdada34 @@ -0,0 +1,2 @@ +import { ISumanConfig, ISumanOpts } from "suman-types/dts/global"; +export declare const run: (projectRoot: string, paths: string[], sumanOpts: ISumanOpts, sumanConfig: ISumanConfig) => void; diff --git a/.pnpm-store/v11/files/1d/4f9393b1b6cb3b9e64527edddf25192dcb0711442b61cfa4696c0cc58ff920c9a0caf4dd98b9872e54c7944c8e11e9b6c10a5b5d8841dcde3b5dbc623f7784 b/.pnpm-store/v11/files/1d/4f9393b1b6cb3b9e64527edddf25192dcb0711442b61cfa4696c0cc58ff920c9a0caf4dd98b9872e54c7944c8e11e9b6c10a5b5d8841dcde3b5dbc623f7784 new file mode 100644 index 00000000..21e15b33 --- /dev/null +++ b/.pnpm-store/v11/files/1d/4f9393b1b6cb3b9e64527edddf25192dcb0711442b61cfa4696c0cc58ff920c9a0caf4dd98b9872e54c7944c8e11e9b6c10a5b5d8841dcde3b5dbc623f7784 @@ -0,0 +1,31 @@ +var realNames = require('./_realNames'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ +function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; +} + +module.exports = getFuncName; diff --git a/.pnpm-store/v11/files/1d/612e3927ae48c99274029b9ccc7d51f1e1011b499c6c9c788e1b063d1e385062af8085eb9f40401b08486318a5edff885771200a2626c22eba03411d387485 b/.pnpm-store/v11/files/1d/612e3927ae48c99274029b9ccc7d51f1e1011b499c6c9c788e1b063d1e385062af8085eb9f40401b08486318a5edff885771200a2626c22eba03411d387485 new file mode 100644 index 00000000..fa736235 --- /dev/null +++ b/.pnpm-store/v11/files/1d/612e3927ae48c99274029b9ccc7d51f1e1011b499c6c9c788e1b063d1e385062af8085eb9f40401b08486318a5edff885771200a2626c22eba03411d387485 @@ -0,0 +1,5 @@ +module['exports'] = function(colors) { + return function(letter, i, exploded) { + return i % 2 === 0 ? letter : colors.inverse(letter); + }; +}; diff --git a/.pnpm-store/v11/files/1d/986c45d9c5873cc9efd9e5911ca81c0db3b309013773de440412e53be79ec9a7fd76dbba3fd94cadc6ac1945275e4b69078f65ed1b04f4384df9401c7aa4f1 b/.pnpm-store/v11/files/1d/986c45d9c5873cc9efd9e5911ca81c0db3b309013773de440412e53be79ec9a7fd76dbba3fd94cadc6ac1945275e4b69078f65ed1b04f4384df9401c7aa4f1 new file mode 100644 index 00000000..44eca96c --- /dev/null +++ b/.pnpm-store/v11/files/1d/986c45d9c5873cc9efd9e5911ca81c0db3b309013773de440412e53be79ec9a7fd76dbba3fd94cadc6ac1945275e4b69078f65ed1b04f4384df9401c7aa4f1 @@ -0,0 +1,22 @@ +/** Used to escape characters for inclusion in compiled string literals. */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `_.template` to escape characters for inclusion in compiled string literals. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(chr) { + return '\\' + stringEscapes[chr]; +} + +module.exports = escapeStringChar; diff --git a/.pnpm-store/v11/files/1d/ba8a8aac506a71da9869349d64ad1e83362690e5b11a6b0ee73e6a2019a7dbaed452654029ce641254d1bde3b3d3e4bbb0fd31360846b8cfd01dcd25793597 b/.pnpm-store/v11/files/1d/ba8a8aac506a71da9869349d64ad1e83362690e5b11a6b0ee73e6a2019a7dbaed452654029ce641254d1bde3b3d3e4bbb0fd31360846b8cfd01dcd25793597 new file mode 100644 index 00000000..b1c56658 --- /dev/null +++ b/.pnpm-store/v11/files/1d/ba8a8aac506a71da9869349d64ad1e83362690e5b11a6b0ee73e6a2019a7dbaed452654029ce641254d1bde3b3d3e4bbb0fd31360846b8cfd01dcd25793597 @@ -0,0 +1,42 @@ +Browser-friendly inheritance fully compatible with standard node.js +[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). + +This package exports standard `inherits` from node.js `util` module in +node environment, but also provides alternative browser-friendly +implementation through [browser +field](https://gist.github.com/shtylman/4339901). Alternative +implementation is a literal copy of standard one located in standalone +module to avoid requiring of `util`. It also has a shim for old +browsers with no `Object.create` support. + +While keeping you sure you are using standard `inherits` +implementation in node.js environment, it allows bundlers such as +[browserify](https://github.com/substack/node-browserify) to not +include full `util` package to your client code if all you need is +just `inherits` function. It worth, because browser shim for `util` +package is large and `inherits` is often the single function you need +from it. + +It's recommended to use this package instead of +`require('util').inherits` for any code that has chances to be used +not only in node.js but in browser too. + +## usage + +```js +var inherits = require('inherits'); +// then use exactly as the standard one +``` + +## note on version ~1.0 + +Version ~1.0 had completely different motivation and is not compatible +neither with 2.0 nor with standard node.js `inherits`. + +If you are using version ~1.0 and planning to switch to ~2.0, be +careful: + +* new version uses `super_` instead of `super` for referencing + superclass +* new version overwrites current prototype while old one preserves any + existing fields on it diff --git a/.pnpm-store/v11/files/1d/cc004dbdf19aad9f4b0d78b7dd7c899d4a1fdbe24dcba85c7a7583744449259a8599400989e7128c197c94797ce1983f850deedcd3e64c11c31650cc547edb b/.pnpm-store/v11/files/1d/cc004dbdf19aad9f4b0d78b7dd7c899d4a1fdbe24dcba85c7a7583744449259a8599400989e7128c197c94797ce1983f850deedcd3e64c11c31650cc547edb new file mode 100644 index 00000000..f38abe36 --- /dev/null +++ b/.pnpm-store/v11/files/1d/cc004dbdf19aad9f4b0d78b7dd7c899d4a1fdbe24dcba85c7a7583744449259a8599400989e7128c197c94797ce1983f850deedcd3e64c11c31650cc547edb @@ -0,0 +1,24 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const chalk = require("chalk"); +const suman_watch_1 = require("suman-watch"); +const _suman = global.__suman = (global.__suman || {}); +exports.run = function (projectRoot, paths, sumanOpts, sumanConfig) { + _suman.log.info('"--watch" option selected => Suman will watch files in your project, and run your tests on changes.'); + if (sumanOpts.verbosity > 2) { + _suman.log.info('"--watch" option selected => Using the "watch" property object in your suman.conf.js file,' + + 'you can also configure Suman to do whatever you want based off a file change.'); + } + suman_watch_1.runWatch(projectRoot, paths, sumanConfig, sumanOpts, function (err) { + if (err) { + _suman.log.error(err.stack || err); + process.exit(1); + } + else { + console.log('\n'); + _suman.log.info(chalk.underline('Suman watch successfully initialized.')); + } + }); +}; diff --git a/.pnpm-store/v11/files/1d/dc408bd340a5a4709a915e8fc648c9bedd0a624f3a3d74783a91ff91bfb29630a2232158320590abcc26b13ad4b2198fdabfa9de09785dc5b794b95a4cb4bf b/.pnpm-store/v11/files/1d/dc408bd340a5a4709a915e8fc648c9bedd0a624f3a3d74783a91ff91bfb29630a2232158320590abcc26b13ad4b2198fdabfa9de09785dc5b794b95a4cb4bf new file mode 100644 index 00000000..673d64ae --- /dev/null +++ b/.pnpm-store/v11/files/1d/dc408bd340a5a4709a915e8fc648c9bedd0a624f3a3d74783a91ff91bfb29630a2232158320590abcc26b13ad4b2198fdabfa9de09785dc5b794b95a4cb4bf @@ -0,0 +1,274 @@ +# Chokidar 1.7.0 (May 8, 2017) +* Add `disableGlobbing` option +* Add ability to force interval value by setting CHOKIDAR_INTERVAL env + variable +* Fix issue with `.close()` being called before `ready` + +# Chokidar 1.6.0 (Jun 22, 2016) +* Added ability for force `usePolling` mode by setting `CHOKIDAR_USEPOLLING` + env variable + +# Chokidar 1.5.2 (Jun 7, 2016) +* Fix missing `addDir` events when using `cwd` and `alwaysStat` options +* Fix missing `add` events for files within a renamed directory + +# Chokidar 1.5.1 (May 20, 2016) +* To help prevent exhaustion of FSEvents system limitations, consolidate watch + instances to the common parent upon detection of separate watch instances on + many siblings + +# Chokidar 1.5.0 (May 10, 2016) +* Make debounce delay setting used with `atomic: true` user-customizable +* Fixes and improvements to `awaitWriteFinish` features + +# Chokidar 1.4.3 (Feb 26, 2016) +* Update async-each dependency to ^1.0.0 + +# Chokidar 1.4.2 (Dec 30, 2015) +* Now correctly emitting `stats` with `awaitWriteFinish` option. + +# Chokidar 1.4.1 (Dec 9, 2015) +* The watcher could now be correctly subclassed with ES6 class syntax. + +# Chokidar 1.4.0 (Dec 3, 2015) +* Add `.getWatched()` method, exposing all file system entries being watched +* Apply `awaitWriteFinish` methodology to `change` events (in addition to `add`) +* Fix handling of symlinks within glob paths (#293) +* Fix `addDir` and `unlinkDir` events under globs (#337, #401) +* Fix issues with `.unwatch()` (#374, #403) + +# Chokidar 1.3.0 (Nov 18, 2015) +* Improve `awaitWriteFinish` option behavior +* Fix some `cwd` option behavior on Windows +* `awaitWriteFinish` and `cwd` are now compatible +* Fix some race conditions. +* #379: Recreating deleted directory doesn't trigger event +* When adding a previously-deleted file, emit 'add', not 'change' + +# Chokidar 1.2.0 (Oct 1, 2015) +* Allow nested arrays of paths to be provided to `.watch()` and `.add()` +* Add `awaitWriteFinish` option + +# Chokidar 1.1.0 (Sep 23, 2015) +* Dependency updates including fsevents@1.0.0, improving installation + +# Chokidar 1.0.6 (Sep 18, 2015) +* Fix issue with `.unwatch()` method and relative paths + +# Chokidar 1.0.5 (Jul 20, 2015) +* Fix regression with regexes/fns using in `ignored` + +# Chokidar 1.0.4 (Jul 15, 2015) +* Fix bug with `ignored` files/globs while `cwd` option is set + +# Chokidar 1.0.3 (Jun 4, 2015) +* Fix race issue with `alwaysStat` option and removed files + +# Chokidar 1.0.2 (May 30, 2015) +* Fix bug with absolute paths and ENAMETOOLONG error + +# Chokidar 1.0.1 (Apr 8, 2015) +* Fix bug with `.close()` method in `fs.watch` mode with `persistent: false` + option + +# Chokidar 1.0.0 (Apr 7, 2015) +* Glob support! Use globs in `watch`, `add`, and `unwatch` methods +* Comprehensive symlink support +* New `unwatch` method to turn off watching of previously watched paths +* More flexible `ignored` option allowing regex, function, glob, or array + courtesy of [anymatch](https://github.com/es128/anymatch) +* New `cwd` option to set base dir from which relative paths are derived +* New `depth` option for limiting recursion +* New `alwaysStat` option to ensure + [`fs.Stats`](https://nodejs.org/api/fs.html#fs_class_fs_stats) gets passed + with every add/change event +* New `ready` event emitted when initial fs tree scan is done and watcher is + ready for changes +* New `raw` event exposing data and events from the lower-level watch modules +* New `followSymlinks` option to impact whether symlinks' targets or the symlink + files themselves are watched +* New `atomic` option for normalizing artifacts from text editors that use + atomic write methods +* Ensured watcher's stability with lots of bugfixes. + +# Chokidar 0.12.6 (Jan 6, 2015) +* Fix bug which breaks `persistent: false` mode when change events occur + +# Chokidar 0.12.5 (Dec 17, 2014) +* Fix bug with matching parent path detection for fsevents instance sharing +* Fix bug with ignored watch path in nodefs modes + +# Chokidar 0.12.4 (Dec 14, 2014) +* Fix bug in `fs.watch` mode that caused watcher to leak into `cwd` +* Fix bug preventing ready event when there are symlinks to ignored paths + +# Chokidar 0.12.3 (Dec 13, 2014) +* Fix handling of special files such as named pipes and sockets + +# Chokidar 0.12.2 (Dec 12, 2014) +* Fix recursive symlink handling and some other path resolution problems + +# Chokidar 0.12.1 (Dec 10, 2014) +* Fix a case where file symlinks were not followed properly + +# Chokidar 0.12.0 (Dec 8, 2014) +* Symlink support + * Add `followSymlinks` option, which defaults to `true` +* Change default watch mode on Linux to non-polling `fs.watch` +* Add `atomic` option to normalize events from editors using atomic writes + * Particularly Vim and Sublime +* Add `raw` event which exposes data from the underlying watch method + +# Chokidar 0.11.1 (Nov 19, 2014) +* Fix a bug where an error is thrown when `fs.watch` instantiation fails + +# Chokidar 0.11.0 (Nov 16, 2014) +* Add a `ready` event, which is emitted after initial file scan completes +* Fix issue with options keys passed in defined as `undefined` +* Rename some internal `FSWatcher` properties to indicate they're private + +# Chokidar 0.10.9 (Nov 15, 2014) +* Fix some leftover issues from adding watcher reuse + +# Chokidar 0.10.8 (Nov 14, 2014) +* Remove accidentally committed/published `console.log` statement. +* Sry 'bout that :crying_cat_face: + +# Chokidar 0.10.7 (Nov 14, 2014) +* Apply watcher reuse methodology to `fs.watch` and `fs.watchFile` as well + +# Chokidar 0.10.6 (Nov 12, 2014) +* More efficient creation/reuse of FSEvents instances to avoid system limits +* Reduce simultaneous FSEvents instances allowed in a process +* Handle errors thrown by `fs.watch` upon invocation + +# Chokidar 0.10.5 (Nov 6, 2014) +* Limit number of simultaneous FSEvents instances (fall back to other methods) +* Prevent some cases of EMFILE errors during initialization +* Fix ignored files emitting events in some fsevents-mode circumstances + +# Chokidar 0.10.4 (Nov 5, 2014) +* Bump fsevents dependency to ~0.3.1 + * Should resolve build warnings and `npm rebuild` on non-Macs + +# Chokidar 0.10.3 (Oct 28, 2014) +* Fix removed dir emitting as `unlink` instead of `unlinkDir` +* Fix issues with file changing to dir or vice versa (gh-165) +* Fix handling of `ignored` option in fsevents mode + +# Chokidar 0.10.2 (Oct 23, 2014) +* Improve individual file watching +* Fix fsevents keeping process alive when `persistent: false` + +# Chokidar 0.10.1 (19 October 2014) +* Improve handling of text editor atomic writes + +# Chokidar 0.10.0 (Oct 18, 2014) +* Many stability and consistency improvements +* Resolve many cases of duplicate or wrong events +* Correct for fsevents inconsistencies +* Standardize handling of errors and relative paths +* Fix issues with watching `./` + +# Chokidar 0.9.0 (Sep 25, 2014) +* Updated fsevents to 0.3 +* Update per-system defaults +* Fix issues with closing chokidar instance +* Fix duplicate change events on win32 + +# Chokidar 0.8.2 (Mar 26, 2014) +* Fixed npm issues related to fsevents dep. +* Updated fsevents to 0.2. + +# Chokidar 0.8.1 (Dec 16, 2013) +* Optional deps are now truly optional on windows and + linux. +* Rewritten in JS, again. +* Fixed some FSEvents-related bugs. + +# Chokidar 0.8.0 (Nov 29, 2013) +* Added ultra-fast low-CPU OS X file watching with FSEvents. + It is enabled by default. +* Added `addDir` and `unlinkDir` events. +* Polling is now disabled by default on all platforms. + +# Chokidar 0.7.1 (Nov 18, 2013) +* `Watcher#close` now also removes all event listeners. + +# Chokidar 0.7.0 (Oct 22, 2013) +* When `options.ignored` is two-argument function, it will + also be called after stating the FS, with `stats` argument. +* `unlink` is no longer emitted on directories. + +# Chokidar 0.6.3 (Aug 12, 2013) +* Added `usePolling` option (default: `true`). + When `false`, chokidar will use `fs.watch` as backend. + `fs.watch` is much faster, but not like super reliable. + +# Chokidar 0.6.2 (Mar 19, 2013) +* Fixed watching initially empty directories with `ignoreInitial` option. + +# Chokidar 0.6.1 (Mar 19, 2013) +* Added node.js 0.10 support. + +# Chokidar 0.6.0 (Mar 10, 2013) +* File attributes (stat()) are now passed to `add` and `change` events as second + arguments. +* Changed default polling interval for binary files to 300ms. + +# Chokidar 0.5.3 (Jan 13, 2013) +* Removed emitting of `change` events before `unlink`. + +# Chokidar 0.5.2 (Jan 13, 2013) +* Removed postinstall script to prevent various npm bugs. + +# Chokidar 0.5.1 (Jan 6, 2013) +* When starting to watch non-existing paths, chokidar will no longer throw + ENOENT error. +* Fixed bug with absolute path. + +# Chokidar 0.5.0 (Dec 9, 2012) +* Added a bunch of new options: + * `ignoreInitial` that allows to ignore initial `add` events. + * `ignorePermissionErrors` that allows to ignore ENOENT etc perm errors. + * `interval` and `binaryInterval` that allow to change default + fs polling intervals. + +# Chokidar 0.4.0 (Jul 26, 2012) +* Added `all` event that receives two args (event name and path) that combines + `add`, `change` and `unlink` events. +* Switched to `fs.watchFile` on node.js 0.8 on windows. +* Files are now correctly unwatched after unlink. + +# Chokidar 0.3.0 (Jun 24, 2012) +* `unlink` event are no longer emitted for directories, for consistency with + `add`. + +# Chokidar 0.2.6 (Jun 8, 2012) +* Prevented creating of duplicate 'add' events. + +# Chokidar 0.2.5 (Jun 8, 2012) +* Fixed a bug when new files in new directories hadn't been added. + +# Chokidar 0.2.4 (Jun 7, 2012) +* Fixed a bug when unlinked files emitted events after unlink. + +# Chokidar 0.2.3 (May 12, 2012) +* Fixed watching of files on windows. + +# Chokidar 0.2.2 (May 4, 2012) +* Fixed watcher signature. + +# Chokidar 0.2.1 (May 4, 2012) +* Fixed invalid API bug when using `watch()`. + +# Chokidar 0.2.0 (May 4, 2012) +* Rewritten in js. + +# Chokidar 0.1.1 (Apr 26, 2012) +* Changed api to `chokidar.watch()`. +* Fixed compilation on windows. + +# Chokidar 0.1.0 (Apr 20, 2012) +* Initial release, extracted from + [Brunch](https://github.com/brunch/brunch/blob/9847a065aea300da99bd0753f90354cde9de1261/src/helpers.coffee#L66) diff --git a/.pnpm-store/v11/files/1e/027effbad87893041cab4a28e762da86c79a81d0632ab339720ca725bae79973a03bb12a5e53c4b94c5ea925885b3c435afcc8959196c07f673543532b5d5f b/.pnpm-store/v11/files/1e/027effbad87893041cab4a28e762da86c79a81d0632ab339720ca725bae79973a03bb12a5e53c4b94c5ea925885b3c435afcc8959196c07f673543532b5d5f new file mode 100644 index 00000000..e15ef86b --- /dev/null +++ b/.pnpm-store/v11/files/1e/027effbad87893041cab4a28e762da86c79a81d0632ab339720ca725bae79973a03bb12a5e53c4b94c5ea925885b3c435afcc8959196c07f673543532b5d5f @@ -0,0 +1,49 @@ +atob +=== + +| **atob** +| [btoa](https://git.coolaj86.com/coolaj86/btoa.js) +| [unibabel.js](https://git.coolaj86.com/coolaj86/unibabel.js) +| Sponsored by [ppl](https://ppl.family) + +Uses `Buffer` to emulate the exact functionality of the browser's atob. + +Note: Unicode may be handled incorrectly (like the browser). + +It turns base64-encoded ascii data back **to** binary. + +```javascript +(function () { + "use strict"; + + var atob = require('atob'); + var b64 = "SGVsbG8sIFdvcmxkIQ=="; + var bin = atob(b64); + + console.log(bin); // "Hello, World!" +}()); +``` + +### Need Unicode and Binary Support in the Browser? + +Check out [unibabel.js](https://git.coolaj86.com/coolaj86/unibabel.js) + +Changelog +======= + + * v2.1.0 address a few issues and PRs, update URLs + * v2.0.0 provide browser version for ios web workers + * v1.2.0 provide (empty) browser version + * v1.1.3 add MIT license + * v1.1.2 node only + +LICENSE +======= + +Code copyright 2012-2018 AJ ONeal + +Dual-licensed MIT and Apache-2.0 + +Docs copyright 2012-2018 AJ ONeal + +Docs released under [Creative Commons](https://git.coolaj86.com/coolaj86/atob.js/blob/master/LICENSE.DOCS). diff --git a/.pnpm-store/v11/files/1e/0a9a99653ea2d9e3c46621ef4c39183f6ebfad84af2ae856a09712dcf04a3863a0d6828f0e0cb8473a0309b8b78d567543e48996d627a9c1da3f35821c9df7 b/.pnpm-store/v11/files/1e/0a9a99653ea2d9e3c46621ef4c39183f6ebfad84af2ae856a09712dcf04a3863a0d6828f0e0cb8473a0309b8b78d567543e48996d627a9c1da3f35821c9df7 new file mode 100644 index 00000000..bb91127b --- /dev/null +++ b/.pnpm-store/v11/files/1e/0a9a99653ea2d9e3c46621ef4c39183f6ebfad84af2ae856a09712dcf04a3863a0d6828f0e0cb8473a0309b8b78d567543e48996d627a9c1da3f35821c9df7 @@ -0,0 +1,621 @@ +'use strict'; + +const fs = { + + Stats: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + access: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + accessSync: function () { + return {}; + }, + + exists: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + existsSync: function () { + return {}; + }, + + readFile: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + readFileSync: function () { + return {}; + }, + + close: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + closeSync: function () { + return {}; + }, + + open: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + openSync: function () { + return {}; + }, + + read: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + readSync: function () { + return {}; + }, + + write: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + + }, + + writeSync: function () { + return {}; + }, + + rename: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + renameSync: function () { + return {}; + }, + + truncate: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + truncateSync: function () { + return {}; + }, + + ftruncate: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + ftruncateSync: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + rmdir: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + rmdirSync: function () { + return {}; + }, + + fdatasync: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + fdatasyncSync: function () { + return {}; + }, + + fsync: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + fsyncSync: function () { + return {}; + }, + + mkdir: function () { + return {}; + }, + + mkdirSync: function () { + return {}; + }, + + readdir: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + readdirSync: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + fstat: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + lstat: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + stat: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + fstatSync: function () { + return {}; + }, + + lstatSync: function () { + return {}; + }, + + statSync: function () { + return {}; + }, + + readlink: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + readlinkSync: function () { + return {}; + }, + + symlink: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + symlinkSync: function () { + return {}; + }, + + link: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + linkSync: function () { + return {}; + }, + + unlink: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + unlinkSync: function () { + return undefined; + }, + + fchmod: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + fchmodSync: function () { + return {}; + }, + + lchmod: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + lchmodSync: function () { + return {}; + }, + + chmod: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + chmodSync: function () { + return {}; + }, + + lchown: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + lchownSync: function () { + return {}; + }, + + fchown: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + fchownSync: function () { + return {}; + }, + + chown: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + chownSync: function () { + return {}; + }, + + _toUnixTimestamp: function () { + return {}; + }, + + utimes: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + utimesSync: function () { + return {}; + }, + + futimes: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + futimesSync: function () { + return {}; + }, + + writeFile: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + writeFileSync: function () { + return {}; + }, + + appendFile: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + }, + + appendFileSync: function () { + return {}; + }, + + watch: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + watchFile: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + unwatchFile: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + realpathSync: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + realpath: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + mkdtemp: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + mkdtempSync: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + createReadStream: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + ReadStream: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + FileReadStream: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + createWriteStream: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + WriteStream: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, + + FileWriteStream: function () { + const args = Array.from(arguments); + setTimeout(function () { + try { + args[args.length - 1]('fs will not work as we are in browser error') + } catch (err) { + } + }, 5); + return {}; + }, +}; +module.exports = fs; diff --git a/.pnpm-store/v11/files/1e/0f8839da0d797c243988a6ceaeca168c9bfff4b0e119be10925de268cd5e232226d16f2e763c3a6aa03ef842c7b4e039e58e0c8c83e4ce1b16e5f1c472a676 b/.pnpm-store/v11/files/1e/0f8839da0d797c243988a6ceaeca168c9bfff4b0e119be10925de268cd5e232226d16f2e763c3a6aa03ef842c7b4e039e58e0c8c83e4ce1b16e5f1c472a676 new file mode 100644 index 00000000..c214d63f --- /dev/null +++ b/.pnpm-store/v11/files/1e/0f8839da0d797c243988a6ceaeca168c9bfff4b0e119be10925de268cd5e232226d16f2e763c3a6aa03ef842c7b4e039e58e0c8c83e4ce1b16e5f1c472a676 @@ -0,0 +1,5 @@ +import { AsyncQueue } from 'async'; +export declare const getRunQueue: () => AsyncQueue; +export declare const makeRunQueue: () => AsyncQueue; +export declare const getTranspileQueue: () => AsyncQueue; +export declare const makeTranspileQueue: (failedTransformObjects: any, runFile: Function, queuedTestFns: any) => AsyncQueue; diff --git a/.pnpm-store/v11/files/1e/13ac8fd6fa12a64045e87fd059d67ec81706ebf57232906b7c87f9ce50011223a8803724826434dc745c89d2ae0b08e3406a264e46e983f38720b389df0fcb b/.pnpm-store/v11/files/1e/13ac8fd6fa12a64045e87fd059d67ec81706ebf57232906b7c87f9ce50011223a8803724826434dc745c89d2ae0b08e3406a264e46e983f38720b389df0fcb new file mode 100644 index 00000000..e1e897ff --- /dev/null +++ b/.pnpm-store/v11/files/1e/13ac8fd6fa12a64045e87fd059d67ec81706ebf57232906b7c87f9ce50011223a8803724826434dc745c89d2ae0b08e3406a264e46e983f38720b389df0fcb @@ -0,0 +1,685 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +module.exports = Writable; + +/* */ +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function () { + onCorkedFinish(_this, state); + }; +} +/* */ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream = require('./internal/streams/stream'); +/**/ + +/**/ + +var Buffer = require('safe-buffer').Buffer; +var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; +function _uint8ArrayToBuffer(chunk) { + return Buffer.from(chunk); +} +function _isUint8Array(obj) { + return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; +} + +/**/ + +var destroyImpl = require('./internal/streams/destroy'); + +util.inherits(Writable, Stream); + +function nop() {} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // Duplex streams are both readable and writable, but share + // the same options object. + // However, some cases require setting options to different + // values for the readable and the writable sides of the duplex stream. + // These options can be provided separately as readableXXX and writableXXX. + var isDuplex = stream instanceof Duplex; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var writableHwm = options.writableHighWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + + if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; + + // cast to ints. + this.highWaterMark = Math.floor(this.highWaterMark); + + // if _final has been called + this.finalCalled = false; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // has it been destroyed + this.destroyed = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + if (this !== Writable) return false; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + + if (typeof options.destroy === 'function') this._destroy = options.destroy; + + if (typeof options.final === 'function') this._final = options.final; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + pna.nextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + pna.nextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = !state.objectMode && _isUint8Array(chunk); + + if (isBuf && !Buffer.isBuffer(chunk)) { + chunk = _uint8ArrayToBuffer(chunk); + } + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = Buffer.from(chunk, encoding); + } + return chunk; +} + +Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { + // making it explicit this property is not enumerable + // because otherwise some prototype manipulation in + // userland will fail + enumerable: false, + get: function () { + return this._writableState.highWaterMark; + } +}); + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + var newChunk = decodeChunk(state, chunk, encoding); + if (chunk !== newChunk) { + isBuf = true; + encoding = 'buffer'; + chunk = newChunk; + } + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = { + chunk: chunk, + encoding: encoding, + isBuf: isBuf, + callback: cb, + next: null + }; + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + + if (sync) { + // defer the callback if we are being called synchronously + // to avoid piling up things on the stack + pna.nextTick(cb, er); + // this can emit finish, and it will always happen + // after error + pna.nextTick(finishMaybe, stream, state); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + } else { + // the caller expect this to happen before if + // it is async + cb(er); + stream._writableState.errorEmitted = true; + stream.emit('error', er); + // this can emit finish, but finish must + // always follow error + finishMaybe(stream, state); + } +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + var allBuffers = true; + while (entry) { + buffer[count] = entry; + if (!entry.isBuf) allBuffers = false; + entry = entry.next; + count += 1; + } + buffer.allBuffers = allBuffers; + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + state.bufferedRequestCount = 0; + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + state.bufferedRequestCount--; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} +function callFinal(stream, state) { + stream._final(function (err) { + state.pendingcb--; + if (err) { + stream.emit('error', err); + } + state.prefinished = true; + stream.emit('prefinish'); + finishMaybe(stream, state); + }); +} +function prefinish(stream, state) { + if (!state.prefinished && !state.finalCalled) { + if (typeof stream._final === 'function') { + state.pendingcb++; + state.finalCalled = true; + pna.nextTick(callFinal, stream, state); + } else { + state.prefinished = true; + stream.emit('prefinish'); + } + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + prefinish(stream, state); + if (state.pendingcb === 0) { + state.finished = true; + stream.emit('finish'); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +function onCorkedFinish(corkReq, state, err) { + var entry = corkReq.entry; + corkReq.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + + // reuse the free corkReq. + state.corkedRequestsFree.next = corkReq; +} + +Object.defineProperty(Writable.prototype, 'destroyed', { + get: function () { + if (this._writableState === undefined) { + return false; + } + return this._writableState.destroyed; + }, + set: function (value) { + // we ignore the value if the stream + // has not been initialized yet + if (!this._writableState) { + return; + } + + // backward compatibility, the user is explicitly + // managing destroyed + this._writableState.destroyed = value; + } +}); + +Writable.prototype.destroy = destroyImpl.destroy; +Writable.prototype._undestroy = destroyImpl.undestroy; +Writable.prototype._destroy = function (err, cb) { + this.end(); + cb(err); +}; \ No newline at end of file diff --git a/.pnpm-store/v11/files/1e/3318af13a6a26f1612e375d023e534a250c00a69f620e4d57ac72b51e24e816954d455d1a4bc394b720e8ee12ca957a5a2015094d3d8543f92fcc5a8fc9a35 b/.pnpm-store/v11/files/1e/3318af13a6a26f1612e375d023e534a250c00a69f620e4d57ac72b51e24e816954d455d1a4bc394b720e8ee12ca957a5a2015094d3d8543f92fcc5a8fc9a35 new file mode 100644 index 00000000..cd94d5d0 --- /dev/null +++ b/.pnpm-store/v11/files/1e/3318af13a6a26f1612e375d023e534a250c00a69f620e4d57ac72b51e24e816954d455d1a4bc394b720e8ee12ca957a5a2015094d3d8543f92fcc5a8fc9a35 @@ -0,0 +1,20 @@ +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +module.exports = copyArray; diff --git a/.pnpm-store/v11/files/1e/42e337f175932053d2e52b319eb3fe632b7dd632243b4af2cb9b0369a16ab9920d39478ee311e46c8299f2756e2bdc84d859601da7cc87ba08fc048f590810 b/.pnpm-store/v11/files/1e/42e337f175932053d2e52b319eb3fe632b7dd632243b4af2cb9b0369a16ab9920d39478ee311e46c8299f2756e2bdc84d859601da7cc87ba08fc048f590810 new file mode 100644 index 00000000..e88d5338 --- /dev/null +++ b/.pnpm-store/v11/files/1e/42e337f175932053d2e52b319eb3fe632b7dd632243b4af2cb9b0369a16ab9920d39478ee311e46c8299f2756e2bdc84d859601da7cc87ba08fc048f590810 @@ -0,0 +1,745 @@ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +/** Used to match leading and trailing whitespace. */ +var reTrim = /^\s+|\s+$/g; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseIndexOf(array, value, fromIndex) { + if (value !== value) { + return baseFindIndex(array, baseIsNaN, fromIndex); + } + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; +} + +/** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ +function baseIsNaN(value) { + return value !== value; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + // Safari 9 makes `arguments.length` enumerable in strict mode. + var result = (isArray(value) || isArguments(value)) + ? baseTimes(value.length, String) + : []; + + var length = result.length, + skipIndexes = !!length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && (key == 'length' || isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values(object) { + return object ? baseValues(object, keys(object)) : []; +} + +module.exports = includes; diff --git a/.pnpm-store/v11/files/1e/5d0f9b9e9bfdfa0ccd4580ea041ec96409c525cdd6bb0e990698b5ad50ea3af3493a6cabd27d0393717c09882057932d1f2c6b90c0a00f5faa5df90fd161dc b/.pnpm-store/v11/files/1e/5d0f9b9e9bfdfa0ccd4580ea041ec96409c525cdd6bb0e990698b5ad50ea3af3493a6cabd27d0393717c09882057932d1f2c6b90c0a00f5faa5df90fd161dc new file mode 100644 index 00000000..3900c979 --- /dev/null +++ b/.pnpm-store/v11/files/1e/5d0f9b9e9bfdfa0ccd4580ea041ec96409c525cdd6bb0e990698b5ad50ea3af3493a6cabd27d0393717c09882057932d1f2c6b90c0a00f5faa5df90fd161dc @@ -0,0 +1,42 @@ +var toInteger = require('./toInteger'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ +function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function() { + if (--n < 1) { + return func.apply(this, arguments); + } + }; +} + +module.exports = after; diff --git a/.pnpm-store/v11/files/1e/610273dd6042e838c6026e8fed013531f3fd5ffcb90b6c9d21e8e4807c10ebe56370174581b7b33c8e8091a948ddbabf0434fdab9b6e6d558a0e3df9574e43 b/.pnpm-store/v11/files/1e/610273dd6042e838c6026e8fed013531f3fd5ffcb90b6c9d21e8e4807c10ebe56370174581b7b33c8e8091a948ddbabf0434fdab9b6e6d558a0e3df9574e43 new file mode 100644 index 00000000..f905588f --- /dev/null +++ b/.pnpm-store/v11/files/1e/610273dd6042e838c6026e8fed013531f3fd5ffcb90b6c9d21e8e4807c10ebe56370174581b7b33c8e8091a948ddbabf0434fdab9b6e6d558a0e3df9574e43 @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs only a single async operation at a time. + * + * @name rejectSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doLimit2.default)(_rejectLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/1e/638c89849bcd6cec7cdf851af630a6ad7a51798aa1bc79c7c017f471d43b3c9374f9a80cfc6ca552297b063a95b282ee1824e69a04fad3a3dd3169336371a9 b/.pnpm-store/v11/files/1e/638c89849bcd6cec7cdf851af630a6ad7a51798aa1bc79c7c017f471d43b3c9374f9a80cfc6ca552297b063a95b282ee1824e69a04fad3a3dd3169336371a9 new file mode 100644 index 00000000..c6d645c4 --- /dev/null +++ b/.pnpm-store/v11/files/1e/638c89849bcd6cec7cdf851af630a6ad7a51798aa1bc79c7c017f471d43b3c9374f9a80cfc6ca552297b063a95b282ee1824e69a04fad3a3dd3169336371a9 @@ -0,0 +1,21 @@ +var isSymbol = require('./isSymbol'); + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +module.exports = toKey; diff --git a/.pnpm-store/v11/files/1e/7ee7528f3d4e8fef1b262d7afcb73f63d34807a7018697a4be11b10e3071fdb5f906a68d3eee6412d555a696b2b317f35898cf235a4c79dc41a56329e5806c-exec b/.pnpm-store/v11/files/1e/7ee7528f3d4e8fef1b262d7afcb73f63d34807a7018697a4be11b10e3071fdb5f906a68d3eee6412d555a696b2b317f35898cf235a4c79dc41a56329e5806c-exec new file mode 100755 index 00000000..5fad4e08 --- /dev/null +++ b/.pnpm-store/v11/files/1e/7ee7528f3d4e8fef1b262d7afcb73f63d34807a7018697a4be11b10e3071fdb5f906a68d3eee6412d555a696b2b317f35898cf235a4c79dc41a56329e5806c-exec @@ -0,0 +1,52 @@ +#!/usr/bin/env sh + +set -e; + +if [ "$skip_postinstall" = "yes" ]; then + echo "skipping postinstall routine."; + exit 0; +fi + +export FORCE_COLOR=1; +export skip_postinstall="yes"; + +mkdir -p "$HOME/.oresoftware/bin" || { + echo "Could not create .oresoftware dir in user home."; + exit 1; +} + + +if [ "$(uname -s)" != "Darwin" ]; then + exit 0; +fi + + +install_realpath(){ + curl_url='https://raw.githubusercontent.com/oresoftware/realpath/master/assets/install.sh'; + curl -H 'Cache-Control: no-cache' --silent -o- "$curl_url" | sh || { + echo "Could not install realpath on your system."; + exit 1; + } +} + +realpath_path="$HOME/.oresoftware/bin/realpath"; + + +if [ ! -f "$realpath_path" ]; then + install_realpath + exit 0; +fi + +modified_secs="$(date -r "$realpath_path" +%s)" +current_secs="$(date +%s)" +diff="$(expr "$current_secs" - "$modified_secs")" + +if [ "$diff" -gt '500000' ]; then + install_realpath + exit 0; +fi + + + + + diff --git a/.pnpm-store/v11/files/1e/8da5055b3212e1d3cb0d2723332e5989ff2d5613c94b464e030aea8c92d8a5b9a8a6136c174aab600c60f70fd7a50cb84ff1f9b0f06b22d25f28355ef64a5d b/.pnpm-store/v11/files/1e/8da5055b3212e1d3cb0d2723332e5989ff2d5613c94b464e030aea8c92d8a5b9a8a6136c174aab600c60f70fd7a50cb84ff1f9b0f06b22d25f28355ef64a5d new file mode 100644 index 00000000..0cb4ea4e --- /dev/null +++ b/.pnpm-store/v11/files/1e/8da5055b3212e1d3cb0d2723332e5989ff2d5613c94b464e030aea8c92d8a5b9a8a6136c174aab600c60f70fd7a50cb84ff1f9b0f06b22d25f28355ef64a5d @@ -0,0 +1,22 @@ +/*! + * arr-flatten + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +module.exports = function (arr) { + return flat(arr, []); +}; + +function flat(arr, res) { + var i = 0, cur; + var len = arr.length; + for (; i < len; i++) { + cur = arr[i]; + Array.isArray(cur) ? flat(cur, res) : res.push(cur); + } + return res; +} diff --git a/.pnpm-store/v11/files/1e/904368e5aa432d14018cb772b1949076b6cc0bba250c0bb79ab83372bccba3f650369047af0c6ca5ea2ce0cf21de414cc8a9c25db8c81504ef5f498e70fd3b b/.pnpm-store/v11/files/1e/904368e5aa432d14018cb772b1949076b6cc0bba250c0bb79ab83372bccba3f650369047af0c6ca5ea2ce0cf21de414cc8a9c25db8c81504ef5f498e70fd3b new file mode 100644 index 00000000..29955ab1 --- /dev/null +++ b/.pnpm-store/v11/files/1e/904368e5aa432d14018cb772b1949076b6cc0bba250c0bb79ab83372bccba3f650369047af0c6ca5ea2ce0cf21de414cc8a9c25db8c81504ef5f498e70fd3b @@ -0,0 +1,41 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = until; + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Repeatedly call `iteratee` until `test` returns `true`. Calls `callback` when + * stopped, or an error occurs. `callback` will be passed an error and any + * arguments passed to the final `iteratee`'s callback. + * + * The inverse of [whilst]{@link module:ControlFlow.whilst}. + * + * @name until + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.whilst]{@link module:ControlFlow.whilst} + * @category Control Flow + * @param {Function} test - synchronous truth test to perform before each + * execution of `iteratee`. Invoked with (). + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function until(test, iteratee, callback) { + (0, _whilst2.default)(function () { + return !test.apply(this, arguments); + }, iteratee, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/1e/9d66827106393d7722847a85b155e570abdfb08d18b391d22ecc6c17c4207cb7ded0b9f6872d95b7bf7d37e2feab5dfde385b3d42f3a17ee2c83cb49c72312 b/.pnpm-store/v11/files/1e/9d66827106393d7722847a85b155e570abdfb08d18b391d22ecc6c17c4207cb7ded0b9f6872d95b7bf7d37e2feab5dfde385b3d42f3a17ee2c83cb49c72312 new file mode 100644 index 00000000..d755a154 --- /dev/null +++ b/.pnpm-store/v11/files/1e/9d66827106393d7722847a85b155e570abdfb08d18b391d22ecc6c17c4207cb7ded0b9f6872d95b7bf7d37e2feab5dfde385b3d42f3a17ee2c83cb49c72312 @@ -0,0 +1,65 @@ +var arrayEach = require('./_arrayEach'), + baseCreate = require('./_baseCreate'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'), + getPrototype = require('./_getPrototype'), + isArray = require('./isArray'), + isBuffer = require('./isBuffer'), + isFunction = require('./isFunction'), + isObject = require('./isObject'), + isTypedArray = require('./isTypedArray'); + +/** + * An alternative to `_.reduce`; this method transforms `object` to a new + * `accumulator` object which is the result of running each of its own + * enumerable string keyed properties thru `iteratee`, with each invocation + * potentially mutating the `accumulator` object. If `accumulator` is not + * provided, a new object with the same `[[Prototype]]` will be used. The + * iteratee is invoked with four arguments: (accumulator, value, key, object). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Object + * @param {Object} object The object to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The custom accumulator value. + * @returns {*} Returns the accumulated value. + * @example + * + * _.transform([2, 3, 4], function(result, n) { + * result.push(n *= n); + * return n % 2 == 0; + * }, []); + * // => [4, 9] + * + * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } + */ +function transform(object, iteratee, accumulator) { + var isArr = isArray(object), + isArrLike = isArr || isBuffer(object) || isTypedArray(object); + + iteratee = baseIteratee(iteratee, 4); + if (accumulator == null) { + var Ctor = object && object.constructor; + if (isArrLike) { + accumulator = isArr ? new Ctor : []; + } + else if (isObject(object)) { + accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; + } + else { + accumulator = {}; + } + } + (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { + return iteratee(accumulator, value, index, object); + }); + return accumulator; +} + +module.exports = transform; diff --git a/.pnpm-store/v11/files/1e/a41b989dfb41c1d26801f3f0ca62785963760459c96db7aaab4bed57f439cc49e2388fb3d6639c3373bf5cf5266f12ea4fd650bf3d93bef5a2d2dc0468aff4 b/.pnpm-store/v11/files/1e/a41b989dfb41c1d26801f3f0ca62785963760459c96db7aaab4bed57f439cc49e2388fb3d6639c3373bf5cf5266f12ea4fd650bf3d93bef5a2d2dc0468aff4 new file mode 100644 index 00000000..30ece7b8 --- /dev/null +++ b/.pnpm-store/v11/files/1e/a41b989dfb41c1d26801f3f0ca62785963760459c96db7aaab4bed57f439cc49e2388fb3d6639c3373bf5cf5266f12ea4fd650bf3d93bef5a2d2dc0468aff4 @@ -0,0 +1,13 @@ +# "tsc" watch plugin + +For use with `tsc --watch`. + +When `tsc -w` sees a change and starts compiling, it writes + +> "File change detected. Starting incremental compilation..." + +to stdout. When it's done compiling, it writes + +> "Compilation complete. Watching for file changes." + +to stdout. This is how we hook into `tsc -w`. \ No newline at end of file diff --git a/.pnpm-store/v11/files/1e/c7f5ae11985a5828e6a6fb1d6d881ccfa3a33e7cf75d0144d93257e5a98ed2b0103674503ff80f623361c3ba1eae73593b5012b3fc32deda19dab8c9410f03 b/.pnpm-store/v11/files/1e/c7f5ae11985a5828e6a6fb1d6d881ccfa3a33e7cf75d0144d93257e5a98ed2b0103674503ff80f623361c3ba1eae73593b5012b3fc32deda19dab8c9410f03 new file mode 100644 index 00000000..28136644 --- /dev/null +++ b/.pnpm-store/v11/files/1e/c7f5ae11985a5828e6a6fb1d6d881ccfa3a33e7cf75d0144d93257e5a98ed2b0103674503ff80f623361c3ba1eae73593b5012b3fc32deda19dab8c9410f03 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeWhile', require('../takeWhile')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/1e/c858f76c5193b863ae32afab7a6f3e188434298841d7ea3ac293c715269d221e058b665b19502aba879c1b4a9a1ba8fba13e9887dc4b35d9834b8df03091c4 b/.pnpm-store/v11/files/1e/c858f76c5193b863ae32afab7a6f3e188434298841d7ea3ac293c715269d221e058b665b19502aba879c1b4a9a1ba8fba13e9887dc4b35d9834b8df03091c4 new file mode 100644 index 00000000..c03dc169 --- /dev/null +++ b/.pnpm-store/v11/files/1e/c858f76c5193b863ae32afab7a6f3e188434298841d7ea3ac293c715269d221e058b665b19502aba879c1b4a9a1ba8fba13e9887dc4b35d9834b8df03091c4 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').doWhilst; diff --git a/.pnpm-store/v11/files/1e/cd4f52281f747905b0aa35562f6c9a904dc7d92caf9fab9d983ffc953df6d81eed4970fa5383accb13a9afec2ce0d3e6fae1ff813989eede1fea6b7f1dbc4b b/.pnpm-store/v11/files/1e/cd4f52281f747905b0aa35562f6c9a904dc7d92caf9fab9d983ffc953df6d81eed4970fa5383accb13a9afec2ce0d3e6fae1ff813989eede1fea6b7f1dbc4b new file mode 100644 index 00000000..8f751d53 --- /dev/null +++ b/.pnpm-store/v11/files/1e/cd4f52281f747905b0aa35562f6c9a904dc7d92caf9fab9d983ffc953df6d81eed4970fa5383accb13a9afec2ce0d3e6fae1ff813989eede1fea6b7f1dbc4b @@ -0,0 +1,191 @@ +var isObject = require('./isObject'), + now = require('./now'), + toNumber = require('./toNumber'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ +function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; + } + + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } + + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; + + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } + + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; + + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } + + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); + } + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; + } + + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } + + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; +} + +module.exports = debounce; diff --git a/.pnpm-store/v11/files/1e/e546c7e3ad0330d7993642b00e5dd1f74c65dfa7c9de1639e81a5a0030b2df0e05fc4a30a17d29a708cb9a1ff364cdf327f38de742b1f97347d61ad67b4e32 b/.pnpm-store/v11/files/1e/e546c7e3ad0330d7993642b00e5dd1f74c65dfa7c9de1639e81a5a0030b2df0e05fc4a30a17d29a708cb9a1ff364cdf327f38de742b1f97347d61ad67b4e32 new file mode 100644 index 00000000..8759fbdf --- /dev/null +++ b/.pnpm-store/v11/files/1e/e546c7e3ad0330d7993642b00e5dd1f74c65dfa7c9de1639e81a5a0030b2df0e05fc4a30a17d29a708cb9a1ff364cdf327f38de742b1f97347d61ad67b4e32 @@ -0,0 +1,46 @@ +var arrayEach = require('./_arrayEach'), + arrayIncludes = require('./_arrayIncludes'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + +/** Used to associate wrap methods with their bit flags. */ +var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] +]; + +/** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ +function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function(pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); +} + +module.exports = updateWrapDetails; diff --git a/.pnpm-store/v11/files/1f/29aa18cd61d276e58e51cb0069387e329910c613c348b036cf67535d325611433b125b541db161d3fcfd089c58dc80365a0d81d7012a1612b86ffb2664749e b/.pnpm-store/v11/files/1f/29aa18cd61d276e58e51cb0069387e329910c613c348b036cf67535d325611433b125b541db161d3fcfd089c58dc80365a0d81d7012a1612b86ffb2664749e new file mode 100644 index 00000000..0c68ec41 --- /dev/null +++ b/.pnpm-store/v11/files/1f/29aa18cd61d276e58e51cb0069387e329910c613c348b036cf67535d325611433b125b541db161d3fcfd089c58dc80365a0d81d7012a1612b86ffb2664749e @@ -0,0 +1,13 @@ +# "babel --watch" watch plugin + +For use with `babel --watch`. + +When `babel -w` sees a change and starts compiling, it writes + +> "(Currently indeterminate)." + +to stdout. When it's done compiling, it writes something akin to + +> "@src/zoom/rindex.js -> @target/zoom/rindex.js" + +to stdout. This is how we hook into `babel -w`. \ No newline at end of file diff --git a/.pnpm-store/v11/files/1f/4fcdcea2ee59f8c98c0364da43b41bfdc0b89f1a85c48a8ea7576d2ff655e20a38b6fd5d1449b85bb2aa7e60e2e5d2a6dff1a93ff83ec816957edf4ad68f5f b/.pnpm-store/v11/files/1f/4fcdcea2ee59f8c98c0364da43b41bfdc0b89f1a85c48a8ea7576d2ff655e20a38b6fd5d1449b85bb2aa7e60e2e5d2a6dff1a93ff83ec816957edf4ad68f5f new file mode 100644 index 00000000..8eb28b8e --- /dev/null +++ b/.pnpm-store/v11/files/1f/4fcdcea2ee59f8c98c0364da43b41bfdc0b89f1a85c48a8ea7576d2ff655e20a38b6fd5d1449b85bb2aa7e60e2e5d2a6dff1a93ff83ec816957edf4ad68f5f @@ -0,0 +1,12 @@ + +1.0.1 / 2014-02-17 +================== + + * go away decimal point + * history + +1.0.0 / 2014-02-17 +================== + + * add jitter option + * Initial commit diff --git a/.pnpm-store/v11/files/1f/654153f3af54ab4149cb90029496168007bc95fb952cefae4a8d103e832dfdcf43b125e0042939e075417160a816dc847f76b093fa9b2366fb526736aa30c2 b/.pnpm-store/v11/files/1f/654153f3af54ab4149cb90029496168007bc95fb952cefae4a8d103e832dfdcf43b125e0042939e075417160a816dc847f76b093fa9b2366fb526736aa30c2 new file mode 100644 index 00000000..6c66d4b9 --- /dev/null +++ b/.pnpm-store/v11/files/1f/654153f3af54ab4149cb90029496168007bc95fb952cefae4a8d103e832dfdcf43b125e0042939e075417160a816dc847f76b093fa9b2366fb526736aa30c2 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Adam Paszke + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/.pnpm-store/v11/files/1f/85494cb054e62177380eaa34392784c9429f7671b73c425bd3ff6493691d03cd3b118a38c497dfd4561c06d0495bd446e18161aa2909c7565c38efd3cf1117 b/.pnpm-store/v11/files/1f/85494cb054e62177380eaa34392784c9429f7671b73c425bd3ff6493691d03cd3b118a38c497dfd4561c06d0495bd446e18161aa2909c7565c38efd3cf1117 new file mode 100644 index 00000000..0cf1501d --- /dev/null +++ b/.pnpm-store/v11/files/1f/85494cb054e62177380eaa34392784c9429f7671b73c425bd3ff6493691d03cd3b118a38c497dfd4561c06d0495bd446e18161aa2909c7565c38efd3cf1117 @@ -0,0 +1,379 @@ +'use strict'; + +var utils = module.exports; +var path = require('path'); + +/** + * Module dependencies + */ + +var isWindows = require('is-windows')(); +var Snapdragon = require('snapdragon'); +utils.define = require('define-property'); +utils.diff = require('arr-diff'); +utils.extend = require('extend-shallow'); +utils.pick = require('object.pick'); +utils.typeOf = require('kind-of'); +utils.unique = require('array-unique'); + +/** + * Returns true if the given value is effectively an empty string + */ + +utils.isEmptyString = function(val) { + return String(val) === '' || String(val) === './'; +}; + +/** + * Returns true if the platform is windows, or `path.sep` is `\\`. + * This is defined as a function to allow `path.sep` to be set in unit tests, + * or by the user, if there is a reason to do so. + * @return {Boolean} + */ + +utils.isWindows = function() { + return path.sep === '\\' || isWindows === true; +}; + +/** + * Return the last element from an array + */ + +utils.last = function(arr, n) { + return arr[arr.length - (n || 1)]; +}; + +/** + * Get the `Snapdragon` instance to use + */ + +utils.instantiate = function(ast, options) { + var snapdragon; + // if an instance was created by `.parse`, use that instance + if (utils.typeOf(ast) === 'object' && ast.snapdragon) { + snapdragon = ast.snapdragon; + // if the user supplies an instance on options, use that instance + } else if (utils.typeOf(options) === 'object' && options.snapdragon) { + snapdragon = options.snapdragon; + // create a new instance + } else { + snapdragon = new Snapdragon(options); + } + + utils.define(snapdragon, 'parse', function(str, options) { + var parsed = Snapdragon.prototype.parse.call(this, str, options); + parsed.input = str; + + // escape unmatched brace/bracket/parens + var last = this.parser.stack.pop(); + if (last && this.options.strictErrors !== true) { + var open = last.nodes[0]; + var inner = last.nodes[1]; + if (last.type === 'bracket') { + if (inner.val.charAt(0) === '[') { + inner.val = '\\' + inner.val; + } + + } else { + open.val = '\\' + open.val; + var sibling = open.parent.nodes[1]; + if (sibling.type === 'star') { + sibling.loose = true; + } + } + } + + // add non-enumerable parser reference + utils.define(parsed, 'parser', this.parser); + return parsed; + }); + + return snapdragon; +}; + +/** + * Create the key to use for memoization. The key is generated + * by iterating over the options and concatenating key-value pairs + * to the pattern string. + */ + +utils.createKey = function(pattern, options) { + if (typeof options === 'undefined') { + return pattern; + } + var key = pattern; + for (var prop in options) { + if (options.hasOwnProperty(prop)) { + key += ';' + prop + '=' + String(options[prop]); + } + } + return key; +}; + +/** + * Cast `val` to an array + * @return {Array} + */ + +utils.arrayify = function(val) { + if (typeof val === 'string') return [val]; + return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isString = function(val) { + return typeof val === 'string'; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isRegex = function(val) { + return utils.typeOf(val) === 'regexp'; +}; + +/** + * Return true if `val` is a non-empty string + */ + +utils.isObject = function(val) { + return utils.typeOf(val) === 'object'; +}; + +/** + * Escape regex characters in the given string + */ + +utils.escapeRegex = function(str) { + return str.replace(/[-[\]{}()^$|*+?.\\/\s]/g, '\\$&'); +}; + +/** + * Combines duplicate characters in the provided `input` string. + * @param {String} `input` + * @returns {String} + */ + +utils.combineDupes = function(input, patterns) { + patterns = utils.arrayify(patterns).join('|').split('|'); + patterns = patterns.map(function(s) { + return s.replace(/\\?([+*\\/])/g, '\\$1'); + }); + var substr = patterns.join('|'); + var regex = new RegExp('(' + substr + ')(?=\\1)', 'g'); + return input.replace(regex, ''); +}; + +/** + * Returns true if the given `str` has special characters + */ + +utils.hasSpecialChars = function(str) { + return /(?:(?:(^|\/)[!.])|[*?+()|[\]{}]|[+@]\()/.test(str); +}; + +/** + * Normalize slashes in the given filepath. + * + * @param {String} `filepath` + * @return {String} + */ + +utils.toPosixPath = function(str) { + return str.replace(/\\+/g, '/'); +}; + +/** + * Strip backslashes before special characters in a string. + * + * @param {String} `str` + * @return {String} + */ + +utils.unescape = function(str) { + return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, '')); +}; + +/** + * Strip the drive letter from a windows filepath + * @param {String} `fp` + * @return {String} + */ + +utils.stripDrive = function(fp) { + return utils.isWindows() ? fp.replace(/^[a-z]:[\\/]+?/i, '/') : fp; +}; + +/** + * Strip the prefix from a filepath + * @param {String} `fp` + * @return {String} + */ + +utils.stripPrefix = function(str) { + if (str.charAt(0) === '.' && (str.charAt(1) === '/' || str.charAt(1) === '\\')) { + return str.slice(2); + } + return str; +}; + +/** + * Returns true if `str` is a common character that doesn't need + * to be processed to be used for matching. + * @param {String} `str` + * @return {Boolean} + */ + +utils.isSimpleChar = function(str) { + return str.trim() === '' || str === '.'; +}; + +/** + * Returns true if the given str is an escaped or + * unescaped path character + */ + +utils.isSlash = function(str) { + return str === '/' || str === '\\/' || str === '\\' || str === '\\\\'; +}; + +/** + * Returns a function that returns true if the given + * pattern matches or contains a `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.matchPath = function(pattern, options) { + return (options && options.contains) + ? utils.containsPattern(pattern, options) + : utils.equalsPattern(pattern, options); +}; + +/** + * Returns true if the given (original) filepath or unixified path are equal + * to the given pattern. + */ + +utils._equals = function(filepath, unixPath, pattern) { + return pattern === filepath || pattern === unixPath; +}; + +/** + * Returns true if the given (original) filepath or unixified path contain + * the given pattern. + */ + +utils._contains = function(filepath, unixPath, pattern) { + return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1; +}; + +/** + * Returns a function that returns true if the given + * pattern is the same as a given `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.equalsPattern = function(pattern, options) { + var unixify = utils.unixify(options); + options = options || {}; + + return function fn(filepath) { + var equal = utils._equals(filepath, unixify(filepath), pattern); + if (equal === true || options.nocase !== true) { + return equal; + } + var lower = filepath.toLowerCase(); + return utils._equals(lower, unixify(lower), pattern); + }; +}; + +/** + * Returns a function that returns true if the given + * pattern contains a `filepath` + * + * @param {String} `pattern` + * @return {Function} + */ + +utils.containsPattern = function(pattern, options) { + var unixify = utils.unixify(options); + options = options || {}; + + return function(filepath) { + var contains = utils._contains(filepath, unixify(filepath), pattern); + if (contains === true || options.nocase !== true) { + return contains; + } + var lower = filepath.toLowerCase(); + return utils._contains(lower, unixify(lower), pattern); + }; +}; + +/** + * Returns a function that returns true if the given + * regex matches the `filename` of a file path. + * + * @param {RegExp} `re` Matching regex + * @return {Function} + */ + +utils.matchBasename = function(re) { + return function(filepath) { + return re.test(filepath) || re.test(path.basename(filepath)); + }; +}; + +/** + * Returns the given value unchanced. + * @return {any} + */ + +utils.identity = function(val) { + return val; +}; + +/** + * Determines the filepath to return based on the provided options. + * @return {any} + */ + +utils.value = function(str, unixify, options) { + if (options && options.unixify === false) { + return str; + } + if (options && typeof options.unixify === 'function') { + return options.unixify(str); + } + return unixify(str); +}; + +/** + * Returns a function that normalizes slashes in a string to forward + * slashes, strips `./` from beginning of paths, and optionally unescapes + * special characters. + * @return {Function} + */ + +utils.unixify = function(options) { + var opts = options || {}; + return function(filepath) { + if (opts.stripPrefix !== false) { + filepath = utils.stripPrefix(filepath); + } + if (opts.unescape === true) { + filepath = utils.unescape(filepath); + } + if (opts.unixify === true || utils.isWindows()) { + filepath = utils.toPosixPath(filepath); + } + return filepath; + }; +}; diff --git a/.pnpm-store/v11/files/1f/a2f8ea77fae6e303845f81fb17d8901e1de7e4007c7be701718ee89c61a3a82456be28891007721207fc9085e04de3145c19dd8e3fd4562a53194a4ecea7a7 b/.pnpm-store/v11/files/1f/a2f8ea77fae6e303845f81fb17d8901e1de7e4007c7be701718ee89c61a3a82456be28891007721207fc9085e04de3145c19dd8e3fd4562a53194a4ecea7a7 new file mode 100644 index 00000000..59b1dbd8 --- /dev/null +++ b/.pnpm-store/v11/files/1f/a2f8ea77fae6e303845f81fb17d8901e1de7e4007c7be701718ee89c61a3a82456be28891007721207fc9085e04de3145c19dd8e3fd4562a53194a4ecea7a7 @@ -0,0 +1,90 @@ +# use [![NPM version](https://img.shields.io/npm/v/use.svg?style=flat)](https://www.npmjs.com/package/use) [![NPM monthly downloads](https://img.shields.io/npm/dm/use.svg?style=flat)](https://npmjs.org/package/use) [![NPM total downloads](https://img.shields.io/npm/dt/use.svg?style=flat)](https://npmjs.org/package/use) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/use.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/use) + +> Easily add plugin support to your node.js application. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save use +``` + +A different take on plugin handling! This is not a middleware system, if you need something that handles async middleware, [ware](https://github.com/segmentio/ware) is great for that. + +## Usage + +```js +const use = require('use'); +``` + +See the [examples folder](./examples) for usage examples. + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [base-plugins](https://www.npmjs.com/package/base-plugins): Adds 'smart plugin' support to your base application. | [homepage](https://github.com/node-base/base-plugins "Adds 'smart plugin' support to your base application.") +* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base "Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks") +* [ware](https://www.npmjs.com/package/ware): Easily create your own middleware layer. | [homepage](https://github.com/segmentio/ware "Easily create your own middleware layer.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 37 | [jonschlinkert](https://github.com/jonschlinkert) | +| 7 | [charlike-old](https://github.com/charlike-old) | +| 2 | [doowb](https://github.com/doowb) | +| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | + +### Author + +**Jon Schlinkert** + +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 12, 2018._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/1f/abb0ec03cf488ec0c247bdeeefcb3cb4afdeb4f81cf85a398c4b982c4d7ffde7ba504a75635e86866ff4fbb1e17467f6ceac0f61761aae1a727458c487a362 b/.pnpm-store/v11/files/1f/abb0ec03cf488ec0c247bdeeefcb3cb4afdeb4f81cf85a398c4b982c4d7ffde7ba504a75635e86866ff4fbb1e17467f6ceac0f61761aae1a727458c487a362 new file mode 100644 index 00000000..b13f18cf --- /dev/null +++ b/.pnpm-store/v11/files/1f/abb0ec03cf488ec0c247bdeeefcb3cb4afdeb4f81cf85a398c4b982c4d7ffde7ba504a75635e86866ff4fbb1e17467f6ceac0f61761aae1a727458c487a362 @@ -0,0 +1 @@ +export declare const onExit: (code: number) => void; diff --git a/.pnpm-store/v11/files/1f/b965cb4b9a7b8a5040029f817fe36c6780c26db1513bd2be0270236957b5841a27823262ed1996cea75347cc6bb92aedb139dabddd7dfc542b3869e6419e1d-exec b/.pnpm-store/v11/files/1f/b965cb4b9a7b8a5040029f817fe36c6780c26db1513bd2be0270236957b5841a27823262ed1996cea75347cc6bb92aedb139dabddd7dfc542b3869e6419e1d-exec new file mode 100755 index 00000000..0cc66fbe --- /dev/null +++ b/.pnpm-store/v11/files/1f/b965cb4b9a7b8a5040029f817fe36c6780c26db1513bd2be0270236957b5841a27823262ed1996cea75347cc6bb92aedb139dabddd7dfc542b3869e6419e1d-exec @@ -0,0 +1,7 @@ +/// +/// +import { ISumanOpts } from 'suman-types/dts/global'; +import { IRet, IExpectedCounts } from 'suman-types/dts/reporters'; +import EventEmitter = NodeJS.EventEmitter; +export declare const loadReporter: (s: EventEmitter, sumanOpts: ISumanOpts, expectations?: IExpectedCounts, client?: SocketIOClient.Socket) => IRet; +export default loadReporter; diff --git a/.pnpm-store/v11/files/1f/c1016e7298672a22cb193ebf8d549c0ad87cafd89739dd65aa196aede550d2b662c6eddb33395204f102dabaa02bf04e9d3ad2ec2ad0fcdc722db2e9e12bcd b/.pnpm-store/v11/files/1f/c1016e7298672a22cb193ebf8d549c0ad87cafd89739dd65aa196aede550d2b662c6eddb33395204f102dabaa02bf04e9d3ad2ec2ad0fcdc722db2e9e12bcd new file mode 100644 index 00000000..603687a1 --- /dev/null +++ b/.pnpm-store/v11/files/1f/c1016e7298672a22cb193ebf8d549c0ad87cafd89739dd65aa196aede550d2b662c6eddb33395204f102dabaa02bf04e9d3ad2ec2ad0fcdc722db2e9e12bcd @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionBy', require('../unionBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/1f/c541d2e11b39978dab41ea4471409d9a98aa3fd5f72d6198d739e62743650b18ce011849f8db33a1f345a2347f650f11479397daff87c028d94ec1aa585c95 b/.pnpm-store/v11/files/1f/c541d2e11b39978dab41ea4471409d9a98aa3fd5f72d6198d739e62743650b18ce011849f8db33a1f345a2347f650f11479397daff87c028d94ec1aa585c95 new file mode 100644 index 00000000..c97293b6 --- /dev/null +++ b/.pnpm-store/v11/files/1f/c541d2e11b39978dab41ea4471409d9a98aa3fd5f72d6198d739e62743650b18ce011849f8db33a1f345a2347f650f11479397daff87c028d94ec1aa585c95 @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _parallel; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _isArrayLike = require('lodash/isArrayLike'); + +var _isArrayLike2 = _interopRequireDefault(_isArrayLike); + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _parallel(eachfn, tasks, callback) { + callback = callback || _noop2.default; + var results = (0, _isArrayLike2.default)(tasks) ? [] : {}; + + eachfn(tasks, function (task, key, callback) { + (0, _wrapAsync2.default)(task)(function (err, result) { + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } + results[key] = result; + callback(err); + }); + }, function (err) { + callback(err, results); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/1f/cc64973a58bfbaa2f3f0655a6b76295b17fceedc7a56fee1e4754cb057c1236276bfdced65c6ab94ca5bd1238ad0211b0dd342e7a548199073a1e65cea927d b/.pnpm-store/v11/files/1f/cc64973a58bfbaa2f3f0655a6b76295b17fceedc7a56fee1e4754cb057c1236276bfdced65c6ab94ca5bd1238ad0211b0dd342e7a548199073a1e65cea927d new file mode 100644 index 00000000..00ee5059 --- /dev/null +++ b/.pnpm-store/v11/files/1f/cc64973a58bfbaa2f3f0655a6b76295b17fceedc7a56fee1e4754cb057c1236276bfdced65c6ab94ca5bd1238ad0211b0dd342e7a548199073a1e65cea927d @@ -0,0 +1,20 @@ +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +module.exports = nativeKeysIn; diff --git a/.pnpm-store/v11/files/20/1e5ec27216f26e544bb05cafc2d14d4e6f62d085ffd8d65dd1b189c07a8f658b02f1aa0afa7f2c9a13c3185925e5c43d97f2eda41c4de1d435627c6740779e b/.pnpm-store/v11/files/20/1e5ec27216f26e544bb05cafc2d14d4e6f62d085ffd8d65dd1b189c07a8f658b02f1aa0afa7f2c9a13c3185925e5c43d97f2eda41c4de1d435627c6740779e new file mode 100644 index 00000000..74bba7fb --- /dev/null +++ b/.pnpm-store/v11/files/20/1e5ec27216f26e544bb05cafc2d14d4e6f62d085ffd8d65dd1b189c07a8f658b02f1aa0afa7f2c9a13c3185925e5c43d97f2eda41c4de1d435627c6740779e @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _reject = require('./internal/reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`reject`]{@link module:Collections.reject} but runs a maximum of `limit` async operations at a + * time. + * + * @name rejectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.reject]{@link module:Collections.reject} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {Function} iteratee - An async truth test to apply to each item in + * `coll`. + * The should complete with a boolean value as its `result`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + */ +exports.default = (0, _doParallelLimit2.default)(_reject2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/20/2d35f3f44ff7aef073b8b9cb8284c3da6f34cfde84970aad7895f4db523e7f2597749bae3c99763d90e5f032926a300e52c9201c4c6dd66ca1ec28b83b9cf9 b/.pnpm-store/v11/files/20/2d35f3f44ff7aef073b8b9cb8284c3da6f34cfde84970aad7895f4db523e7f2597749bae3c99763d90e5f032926a300e52c9201c4c6dd66ca1ec28b83b9cf9 new file mode 100644 index 00000000..6a928edf --- /dev/null +++ b/.pnpm-store/v11/files/20/2d35f3f44ff7aef073b8b9cb8284c3da6f34cfde84970aad7895f4db523e7f2597749bae3c99763d90e5f032926a300e52c9201c4c6dd66ca1ec28b83b9cf9 @@ -0,0 +1,39 @@ +# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex) + +> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) + + +## Install + +``` +$ npm install --save ansi-regex +``` + + +## Usage + +```js +const ansiRegex = require('ansi-regex'); + +ansiRegex().test('\u001b[4mcake\u001b[0m'); +//=> true + +ansiRegex().test('cake'); +//=> false + +'\u001b[4mcake\u001b[0m'.match(ansiRegex()); +//=> ['\u001b[4m', '\u001b[0m'] +``` + +## FAQ + +### Why do you test for codes not in the ECMA 48 standard? + +Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them. + +On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/.pnpm-store/v11/files/20/4499d1bae112f7ec137cdbdfe02272ee29333da1350fbe337a64b788ff58423585fabb32d6c431c96d29b0b663b1e798a302559ecd6e7bd30b88f54fb85ad7 b/.pnpm-store/v11/files/20/4499d1bae112f7ec137cdbdfe02272ee29333da1350fbe337a64b788ff58423585fabb32d6c431c96d29b0b663b1e798a302559ecd6e7bd30b88f54fb85ad7 new file mode 100644 index 00000000..ae87c383 --- /dev/null +++ b/.pnpm-store/v11/files/20/4499d1bae112f7ec137cdbdfe02272ee29333da1350fbe337a64b788ff58423585fabb32d6c431c96d29b0b663b1e798a302559ecd6e7bd30b88f54fb85ad7 @@ -0,0 +1,268 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const assert = require("assert"); +const EE = require("events"); +const util = require("util"); +const su = require("suman-utils"); +const chai = require("chai"); +const _suman = global.__suman = (global.__suman || {}); +let badProps = { + inspect: true, + constructor: true +}; +const slice = Array.prototype.slice; +const notCallbackOrientedError = 'You have fired a callback for a test case or hook that was not callback oriented.'; +class ParamBase extends EE { + constructor() { + super(); + } + timeout(val) { + this.__timerObj.timer && clearTimeout(this.__timerObj.timer); + try { + assert(val && Number.isInteger(val), 'value passed to timeout() must be an integer.'); + } + catch (e) { + return this.__handle(e); + } + const amount = _suman.weAreDebugging ? 5000000 : val; + this.__timerObj.timer = setTimeout(this.onTimeout.bind(this), amount); + } + done(err) { + if (this && this.__handle) { + this.__handle(new Error(notCallbackOrientedError)); + } + else { + throw new Error(notCallbackOrientedError); + } + } + fatal(err) { + if (!err) { + err = new Error('t.fatal() was called by the developer, with a falsy first argument.'); + } + else if (!su.isObject(err)) { + let msg = 't.fatal() was called by the developer: '; + err = new Error(msg + util.inspect(err)); + } + err.sumanFatal = true; + this.__handle(err); + } + set(k, v) { + if (arguments.length < 2) { + throw new Error('Must pass both a key and value to "set" method.'); + } + return this.__shared.set(k, v); + } + get(k) { + if (arguments.length < 1) { + return this.__shared.getAll(); + } + return this.__shared.get(k); + } + getValues(...args) { + const self = this; + return args.map(function (k) { + return self.__shared.get(k); + }); + } + getMap(...args) { + const self = this; + const ret = {}; + args.forEach(function (a) { + ret[a] = self.__shared.get(a); + }); + return ret; + } + wrap(fn) { + const self = this; + return function () { + try { + return fn.apply(this, arguments); + } + catch (e) { + return self.__handle(e, false); + } + }; + } + ; + wrapFinal(fn) { + const self = this; + return function () { + try { + fn.apply(this, arguments); + } + catch (e) { + return self.__handle(e, false); + } + self.__fini(null); + }; + } + final(fn, ctx) { + try { + fn.call(ctx || null); + } + catch (e) { + return this.__handle(e, false); + } + this.__fini(null); + } + finally(fn, ctx) { + return this.final.apply(this, arguments); + } + log(...args) { + console.log(` [ '${this.desc || 'unknown'}' ] `, ...args); + } + slow() { + this.timeout(30000); + } + wrapFinalErrorFirst(fn) { + const self = this; + return function (err) { + if (err) { + return self.__handle(err, false); + } + try { + fn.apply(this, slice.call(arguments, 1)); + } + catch (e) { + return self.__handle(e, false); + } + self.__fini(null); + }; + } + wrapErrorFirst(fn) { + const self = this; + return function (err) { + if (err) { + return self.__handle(err, false); + } + try { + return fn.apply(this, slice.call(arguments, 1)); + } + catch (e) { + return self.__handle(e, false); + } + }; + } + handleAssertions(fn, ctx) { + try { + return fn.call(ctx || null); + } + catch (e) { + return this.__handle(e); + } + } + handlePossibleError(err) { + err ? this.__handle(err) : this.__fini(null); + } + handleNonCallbackMode(err) { + err = err ? ('Also, you have this error => ' + err.stack || err) : ''; + this.__handle(new Error('Callback mode for this test-case/hook is not enabled, use .cb to enabled it.\n' + err)); + } + throw(str) { + this.__handle(str instanceof Error ? str : new Error(str)); + } +} +exports.ParamBase = ParamBase; +Object.setPrototypeOf(ParamBase.prototype, Function.prototype); +const proto = Object.assign(ParamBase.prototype, EE.prototype); +proto.pass = proto.ctn = proto.fail = proto.done; +proto.wrapFinalErrFirst = proto.wrapFinalErr = proto.wrapFinalError = proto.wrapFinalErrorFirst; +proto.wrapErrFirst = proto.wrapErrorFirst; +const assertCtx = { + val: null +}; +const expectCtx = { + val: null +}; +const expct = function () { + const ctx = expectCtx.val; + if (!ctx) { + throw new Error('Suman implementation error => expect context is not defined.'); + } + try { + return chai.expect.apply(chai.expect, arguments); + } + catch (e) { + return ctx.__handle(e); + } +}; +const expectProxy = new Proxy(expct, { + get: function (target, prop) { + if (typeof prop === 'symbol') { + return Reflect.get.apply(Reflect, arguments); + } + const ctx = expectCtx.val; + if (!ctx) { + throw new Error('Suman implementation error => assert context is not defined.'); + } + if (!(prop in chai.expect)) { + try { + return Reflect.get.apply(Reflect, arguments); + } + catch (err) { + return ctx.__handle(new Error(`The assertion library used does not have a '${prop}' property or method.`)); + } + } + return function () { + try { + return chai.expect[prop].apply(chai.expect, arguments); + } + catch (e) { + return ctx.__handle(e); + } + }; + } +}); +Object.defineProperty(proto, 'expect', { + get: function () { + expectCtx.val = this; + return expectProxy; + } +}); +const assrt = function () { + const ctx = assertCtx.val; + if (!ctx) { + throw new Error('Suman implementation error => assert context is not defined.'); + } + try { + return chai.assert.apply(chai.assert, arguments); + } + catch (e) { + return ctx.__handle(e); + } +}; +const assertProxy = new Proxy(assrt, { + get: function (target, prop) { + if (typeof prop === 'symbol') { + return Reflect.get.apply(Reflect, arguments); + } + const ctx = assertCtx.val; + if (!ctx) { + throw new Error('Suman implementation error => assert context is not defined.'); + } + if (!(prop in chai.assert)) { + try { + return Reflect.get.apply(Reflect, arguments); + } + catch (err) { + return ctx.__handle(new Error(`The assertion library used does not have a '${prop}' property or method.`)); + } + } + return function () { + try { + return chai.assert[prop].apply(chai.assert, arguments); + } + catch (e) { + return ctx.__handle(e); + } + }; + } +}); +Object.defineProperty(proto, 'assert', { + get: function () { + assertCtx.val = this; + return assertProxy; + } +}); diff --git a/.pnpm-store/v11/files/20/547d7c1b34ce63e94ec913d2bb5e175495b17d890d02292cabc15e28d507760598ba0fc69e02ddcf826d6a3ab29c2c1ba30683e2729bd4f8a59ca12516de62 b/.pnpm-store/v11/files/20/547d7c1b34ce63e94ec913d2bb5e175495b17d890d02292cabc15e28d507760598ba0fc69e02ddcf826d6a3ab29c2c1ba30683e2729bd4f8a59ca12516de62 new file mode 100644 index 00000000..f8e5b4e3 --- /dev/null +++ b/.pnpm-store/v11/files/20/547d7c1b34ce63e94ec913d2bb5e175495b17d890d02292cabc15e28d507760598ba0fc69e02ddcf826d6a3ab29c2c1ba30683e2729bd4f8a59ca12516de62 @@ -0,0 +1,6 @@ +var root = require('./_root'); + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +module.exports = coreJsData; diff --git a/.pnpm-store/v11/files/20/589c94c986dcffe9f89192b36aa3157586dc6805acd0ab194fca2cf7b0a569c78f2c51b902f76ed6b12e2b7d318bb08b45a34082863b230cfed0aef7a5b45b b/.pnpm-store/v11/files/20/589c94c986dcffe9f89192b36aa3157586dc6805acd0ab194fca2cf7b0a569c78f2c51b902f76ed6b12e2b7d318bb08b45a34082863b230cfed0aef7a5b45b new file mode 100644 index 00000000..9df5ab7d --- /dev/null +++ b/.pnpm-store/v11/files/20/589c94c986dcffe9f89192b36aa3157586dc6805acd0ab194fca2cf7b0a569c78f2c51b902f76ed6b12e2b7d318bb08b45a34082863b230cfed0aef7a5b45b @@ -0,0 +1,13 @@ +var colors = require('./colors'); +module['exports'] = colors; + +// Remark: By default, colors will add style properties to String.prototype. +// +// If you don't wish to extend String.prototype, you can do this instead and +// native String will not be touched: +// +// var colors = require('colors/safe); +// colors.red("foo") +// +// +require('./extendStringPrototype')(); diff --git a/.pnpm-store/v11/files/20/5f9f9c6c901590c5c5da5f09085af0321d512ed55fec694c8b7f0bfdf83e7a42807fbd7858591e0d57f10206fe32d37f07773027d1bc6a24bcd93c9b111403 b/.pnpm-store/v11/files/20/5f9f9c6c901590c5c5da5f09085af0321d512ed55fec694c8b7f0bfdf83e7a42807fbd7858591e0d57f10206fe32d37f07773027d1bc6a24bcd93c9b111403 new file mode 100644 index 00000000..255293ac --- /dev/null +++ b/.pnpm-store/v11/files/20/5f9f9c6c901590c5c5da5f09085af0321d512ed55fec694c8b7f0bfdf83e7a42807fbd7858591e0d57f10206fe32d37f07773027d1bc6a24bcd93c9b111403 @@ -0,0 +1,430 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_IMPLEMENTATION_12_INL_H_ +#define NAN_IMPLEMENTATION_12_INL_H_ +//============================================================================== +// node v0.11 implementation +//============================================================================== + +namespace imp { + +//=== Array ==================================================================== + +Factory::return_t +Factory::New() { + return v8::Array::New(v8::Isolate::GetCurrent()); +} + +Factory::return_t +Factory::New(int length) { + return v8::Array::New(v8::Isolate::GetCurrent(), length); +} + +//=== Boolean ================================================================== + +Factory::return_t +Factory::New(bool value) { + return v8::Boolean::New(v8::Isolate::GetCurrent(), value); +} + +//=== Boolean Object =========================================================== + +Factory::return_t +Factory::New(bool value) { +#if (NODE_MODULE_VERSION >= NODE_6_0_MODULE_VERSION) + return v8::BooleanObject::New( + v8::Isolate::GetCurrent(), value).As(); +#else + return v8::BooleanObject::New(value).As(); +#endif +} + +//=== Context ================================================================== + +Factory::return_t +Factory::New( v8::ExtensionConfiguration* extensions + , v8::Local tmpl + , v8::Local obj) { + return v8::Context::New(v8::Isolate::GetCurrent(), extensions, tmpl, obj); +} + +//=== Date ===================================================================== + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +Factory::return_t +Factory::New(double value) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + v8::EscapableHandleScope scope(isolate); + return scope.Escape(v8::Date::New(isolate->GetCurrentContext(), value) + .FromMaybe(v8::Local()).As()); +} +#else +Factory::return_t +Factory::New(double value) { + return v8::Date::New(v8::Isolate::GetCurrent(), value).As(); +} +#endif + +//=== External ================================================================= + +Factory::return_t +Factory::New(void * value) { + return v8::External::New(v8::Isolate::GetCurrent(), value); +} + +//=== Function ================================================================= + +Factory::return_t +Factory::New( FunctionCallback callback + , v8::Local data) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + v8::EscapableHandleScope scope(isolate); + v8::Local tpl = v8::ObjectTemplate::New(isolate); + tpl->SetInternalFieldCount(imp::kFunctionFieldCount); + v8::Local obj = NewInstance(tpl).ToLocalChecked(); + + obj->SetInternalField( + imp::kFunctionIndex + , v8::External::New(isolate, reinterpret_cast(callback))); + + v8::Local val = v8::Local::New(isolate, data); + + if (!val.IsEmpty()) { + obj->SetInternalField(imp::kDataIndex, val); + } + +#if NODE_MAJOR_VERSION >= 10 + v8::Local context = isolate->GetCurrentContext(); + v8::Local function = + v8::Function::New(context, imp::FunctionCallbackWrapper, obj) + .ToLocalChecked(); +#else + v8::Local function = + v8::Function::New(isolate, imp::FunctionCallbackWrapper, obj); +#endif + + return scope.Escape(function); +} + +//=== Function Template ======================================================== + +Factory::return_t +Factory::New( FunctionCallback callback + , v8::Local data + , v8::Local signature) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + if (callback) { + v8::EscapableHandleScope scope(isolate); + v8::Local tpl = v8::ObjectTemplate::New(isolate); + tpl->SetInternalFieldCount(imp::kFunctionFieldCount); + v8::Local obj = NewInstance(tpl).ToLocalChecked(); + + obj->SetInternalField( + imp::kFunctionIndex + , v8::External::New(isolate, reinterpret_cast(callback))); + v8::Local val = v8::Local::New(isolate, data); + + if (!val.IsEmpty()) { + obj->SetInternalField(imp::kDataIndex, val); + } + + return scope.Escape(v8::FunctionTemplate::New( isolate + , imp::FunctionCallbackWrapper + , obj + , signature)); + } else { + return v8::FunctionTemplate::New(isolate, 0, data, signature); + } +} + +//=== Number =================================================================== + +Factory::return_t +Factory::New(double value) { + return v8::Number::New(v8::Isolate::GetCurrent(), value); +} + +//=== Number Object ============================================================ + +Factory::return_t +Factory::New(double value) { + return v8::NumberObject::New( v8::Isolate::GetCurrent() + , value).As(); +} + +//=== Integer, Int32 and Uint32 ================================================ + +template +typename IntegerFactory::return_t +IntegerFactory::New(int32_t value) { + return To(T::New(v8::Isolate::GetCurrent(), value)); +} + +template +typename IntegerFactory::return_t +IntegerFactory::New(uint32_t value) { + return To(T::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); +} + +Factory::return_t +Factory::New(int32_t value) { + return To( + v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); +} + +Factory::return_t +Factory::New(uint32_t value) { + return To( + v8::Uint32::NewFromUnsigned(v8::Isolate::GetCurrent(), value)); +} + +//=== Object =================================================================== + +Factory::return_t +Factory::New() { + return v8::Object::New(v8::Isolate::GetCurrent()); +} + +//=== Object Template ========================================================== + +Factory::return_t +Factory::New() { + return v8::ObjectTemplate::New(v8::Isolate::GetCurrent()); +} + +//=== RegExp =================================================================== + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +Factory::return_t +Factory::New( + v8::Local pattern + , v8::RegExp::Flags flags) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + v8::EscapableHandleScope scope(isolate); + return scope.Escape( + v8::RegExp::New(isolate->GetCurrentContext(), pattern, flags) + .FromMaybe(v8::Local())); +} +#else +Factory::return_t +Factory::New( + v8::Local pattern + , v8::RegExp::Flags flags) { + return v8::RegExp::New(pattern, flags); +} +#endif + +//=== Script =================================================================== + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +Factory::return_t +Factory::New( v8::Local source) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + v8::EscapableHandleScope scope(isolate); + v8::ScriptCompiler::Source src(source); + return scope.Escape( + v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src) + .FromMaybe(v8::Local())); +} + +Factory::return_t +Factory::New( v8::Local source + , v8::ScriptOrigin const& origin) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + v8::EscapableHandleScope scope(isolate); + v8::ScriptCompiler::Source src(source, origin); + return scope.Escape( + v8::ScriptCompiler::Compile(isolate->GetCurrentContext(), &src) + .FromMaybe(v8::Local())); +} +#else +Factory::return_t +Factory::New( v8::Local source) { + v8::ScriptCompiler::Source src(source); + return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src); +} + +Factory::return_t +Factory::New( v8::Local source + , v8::ScriptOrigin const& origin) { + v8::ScriptCompiler::Source src(source, origin); + return v8::ScriptCompiler::Compile(v8::Isolate::GetCurrent(), &src); +} +#endif + +//=== Signature ================================================================ + +Factory::return_t +Factory::New(Factory::FTH receiver) { + return v8::Signature::New(v8::Isolate::GetCurrent(), receiver); +} + +//=== String =================================================================== + +Factory::return_t +Factory::New() { + return v8::String::Empty(v8::Isolate::GetCurrent()); +} + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +Factory::return_t +Factory::New(const char * value, int length) { + return v8::String::NewFromUtf8( + v8::Isolate::GetCurrent(), value, v8::NewStringType::kNormal, length); +} + +Factory::return_t +Factory::New(std::string const& value) { + assert(value.size() <= INT_MAX && "string too long"); + return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), + value.data(), v8::NewStringType::kNormal, static_cast(value.size())); +} + +Factory::return_t +Factory::New(const uint16_t * value, int length) { + return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value, + v8::NewStringType::kNormal, length); +} + +Factory::return_t +Factory::New(v8::String::ExternalStringResource * value) { + return v8::String::NewExternalTwoByte(v8::Isolate::GetCurrent(), value); +} + +Factory::return_t +Factory::New(ExternalOneByteStringResource * value) { + return v8::String::NewExternalOneByte(v8::Isolate::GetCurrent(), value); +} +#else +Factory::return_t +Factory::New(const char * value, int length) { + return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value, + v8::String::kNormalString, length); +} + +Factory::return_t +Factory::New( + std::string const& value) /* NOLINT(build/include_what_you_use) */ { + assert(value.size() <= INT_MAX && "string too long"); + return v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), value.data(), + v8::String::kNormalString, + static_cast(value.size())); +} + +Factory::return_t +Factory::New(const uint16_t * value, int length) { + return v8::String::NewFromTwoByte(v8::Isolate::GetCurrent(), value, + v8::String::kNormalString, length); +} + +Factory::return_t +Factory::New(v8::String::ExternalStringResource * value) { + return v8::String::NewExternal(v8::Isolate::GetCurrent(), value); +} + +Factory::return_t +Factory::New(ExternalOneByteStringResource * value) { + return v8::String::NewExternal(v8::Isolate::GetCurrent(), value); +} +#endif + +//=== String Object ============================================================ + +// See https://github.com/nodejs/nan/pull/811#discussion_r224594980. +// Disable the warning as there is no way around it. +// TODO(bnoordhuis) Use isolate-based version in Node.js v12. +Factory::return_t +Factory::New(v8::Local value) { +// V8 > 7.0 +#if V8_MAJOR_VERSION > 7 || (V8_MAJOR_VERSION == 7 && V8_MINOR_VERSION > 0) + return v8::StringObject::New(v8::Isolate::GetCurrent(), value) + .As(); +#else +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4996) +#endif +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + return v8::StringObject::New(value).As(); +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif +#ifdef _MSC_VER +#pragma warning(pop) +#endif +#endif +} + +//=== Unbound Script =========================================================== + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +Factory::return_t +Factory::New(v8::Local source) { + v8::ScriptCompiler::Source src(source); + return v8::ScriptCompiler::CompileUnboundScript( + v8::Isolate::GetCurrent(), &src); +} + +Factory::return_t +Factory::New( v8::Local source + , v8::ScriptOrigin const& origin) { + v8::ScriptCompiler::Source src(source, origin); + return v8::ScriptCompiler::CompileUnboundScript( + v8::Isolate::GetCurrent(), &src); +} +#else +Factory::return_t +Factory::New(v8::Local source) { + v8::ScriptCompiler::Source src(source); + return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src); +} + +Factory::return_t +Factory::New( v8::Local source + , v8::ScriptOrigin const& origin) { + v8::ScriptCompiler::Source src(source, origin); + return v8::ScriptCompiler::CompileUnbound(v8::Isolate::GetCurrent(), &src); +} +#endif + +} // end of namespace imp + +//=== Presistents and Handles ================================================== + +#if NODE_MODULE_VERSION < IOJS_3_0_MODULE_VERSION +template +inline v8::Local New(v8::Handle h) { + return v8::Local::New(v8::Isolate::GetCurrent(), h); +} +#endif + +template +inline v8::Local New(v8::Persistent const& p) { + return v8::Local::New(v8::Isolate::GetCurrent(), p); +} + +template +inline v8::Local New(Persistent const& p) { + return v8::Local::New(v8::Isolate::GetCurrent(), p); +} + +template +inline v8::Local New(Global const& p) { + return v8::Local::New(v8::Isolate::GetCurrent(), p); +} + +#endif // NAN_IMPLEMENTATION_12_INL_H_ diff --git a/.pnpm-store/v11/files/20/632da7048bf50ba4982decdee68d1e0ecd1da52a979f9b5dd0891cfbad52bb34b4bc92df466c6db7fa58c9c011b9e77abd20e6803e2ee1b84cfb8fd099c77b b/.pnpm-store/v11/files/20/632da7048bf50ba4982decdee68d1e0ecd1da52a979f9b5dd0891cfbad52bb34b4bc92df466c6db7fa58c9c011b9e77abd20e6803e2ee1b84cfb8fd099c77b new file mode 100644 index 00000000..06d1274a --- /dev/null +++ b/.pnpm-store/v11/files/20/632da7048bf50ba4982decdee68d1e0ecd1da52a979f9b5dd0891cfbad52bb34b4bc92df466c6db7fa58c9c011b9e77abd20e6803e2ee1b84cfb8fd099c77b @@ -0,0 +1,79 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); + +/** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ +function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; +} + +/** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ +function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; +} + +/** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ +MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + +/** + * Add the given source mapping. + * + * @param Object aMapping + */ +MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } +}; + +/** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ +MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; +}; + +exports.MappingList = MappingList; diff --git a/.pnpm-store/v11/files/20/95c1bfa96d22db3c0fcbfb79bf45c437b7e72f099255b217ccd531f8283e783b7b30380529df464a98967651c47530d69e67284691068ac8aefb2258d5d50c b/.pnpm-store/v11/files/20/95c1bfa96d22db3c0fcbfb79bf45c437b7e72f099255b217ccd531f8283e783b7b30380529df464a98967651c47530d69e67284691068ac8aefb2258d5d50c new file mode 100644 index 00000000..4d88c831 --- /dev/null +++ b/.pnpm-store/v11/files/20/95c1bfa96d22db3c0fcbfb79bf45c437b7e72f099255b217ccd531f8283e783b7b30380529df464a98967651c47530d69e67284691068ac8aefb2258d5d50c @@ -0,0 +1,23 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +///////////////////////////// +/// WorkerGlobalScope APIs +///////////////////////////// +// These are only available in a Web Worker +declare function importScripts(...urls: string[]): void; diff --git a/.pnpm-store/v11/files/20/9e889b721ccb621ba7ba33b0cc34d2ba19b4639917153f174511b1601d8ab34b2599f92f83310d5685ad6ae3e9451b059ffda7752b1030810fad791aa77d54 b/.pnpm-store/v11/files/20/9e889b721ccb621ba7ba33b0cc34d2ba19b4639917153f174511b1601d8ab34b2599f92f83310d5685ad6ae3e9451b059ffda7752b1030810fad791aa77d54 new file mode 100644 index 00000000..efc07b8f --- /dev/null +++ b/.pnpm-store/v11/files/20/9e889b721ccb621ba7ba33b0cc34d2ba19b4639917153f174511b1601d8ab34b2599f92f83310d5685ad6ae3e9451b059ffda7752b1030810fad791aa77d54 @@ -0,0 +1,49 @@ +{ + "name": "uuid", + "version": "3.4.0", + "description": "RFC4122 (v1, v4, and v5) UUIDs", + "commitlint": { + "extends": [ + "@commitlint/config-conventional" + ] + }, + "keywords": [ + "uuid", + "guid", + "rfc4122" + ], + "license": "MIT", + "bin": { + "uuid": "./bin/uuid" + }, + "devDependencies": { + "@commitlint/cli": "~8.2.0", + "@commitlint/config-conventional": "~8.2.0", + "eslint": "~6.4.0", + "husky": "~3.0.5", + "mocha": "6.2.0", + "runmd": "1.2.1", + "standard-version": "7.0.0" + }, + "scripts": { + "lint": "eslint .", + "test": "npm run lint && mocha test/test.js", + "md": "runmd --watch --output=README.md README_js.md", + "release": "standard-version", + "prepare": "runmd --output=README.md README_js.md" + }, + "browser": { + "./lib/rng.js": "./lib/rng-browser.js", + "./lib/sha1.js": "./lib/sha1-browser.js", + "./lib/md5.js": "./lib/md5-browser.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/uuidjs/uuid.git" + }, + "husky": { + "hooks": { + "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" + } + } +} diff --git a/.pnpm-store/v11/files/20/c5622373c0dbd032f966061559c7edbccf11c2fee59c5340aee03fdb84783c5b2aa6cd3a014fece300b86bafaacb342907c33114460af3597c72856ee463de b/.pnpm-store/v11/files/20/c5622373c0dbd032f966061559c7edbccf11c2fee59c5340aee03fdb84783c5b2aa6cd3a014fece300b86bafaacb342907c33114460af3597c72856ee463de new file mode 100644 index 00000000..19f1c986 --- /dev/null +++ b/.pnpm-store/v11/files/20/c5622373c0dbd032f966061559c7edbccf11c2fee59c5340aee03fdb84783c5b2aa6cd3a014fece300b86bafaacb342907c33114460af3597c72856ee463de @@ -0,0 +1,22 @@ +'use strict'; + +/** + * POSIX character classes + */ + +module.exports = { + alnum: 'a-zA-Z0-9', + alpha: 'a-zA-Z', + ascii: '\\x00-\\x7F', + blank: ' \\t', + cntrl: '\\x00-\\x1F\\x7F', + digit: '0-9', + graph: '\\x21-\\x7E', + lower: 'a-z', + print: '\\x20-\\x7E ', + punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', + space: ' \\t\\r\\n\\v\\f', + upper: 'A-Z', + word: 'A-Za-z0-9_', + xdigit: 'A-Fa-f0-9' +}; diff --git a/.pnpm-store/v11/files/20/c67e41926bbd3902b49d445d94125d0c9c1ef0dfef30cd03c0dd23a07e3fd0e46fa68b6b01052f212c2a64a592e88c440bc91cac57792e1b8b29caaff7110e b/.pnpm-store/v11/files/20/c67e41926bbd3902b49d445d94125d0c9c1ef0dfef30cd03c0dd23a07e3fd0e46fa68b6b01052f212c2a64a592e88c440bc91cac57792e1b8b29caaff7110e new file mode 100644 index 00000000..0f29498d --- /dev/null +++ b/.pnpm-store/v11/files/20/c67e41926bbd3902b49d445d94125d0c9c1ef0dfef30cd03c0dd23a07e3fd0e46fa68b6b01052f212c2a64a592e88c440bc91cac57792e1b8b29caaff7110e @@ -0,0 +1,18 @@ +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +module.exports = isPrototype; diff --git a/.pnpm-store/v11/files/20/eda849a70706f54a36642ce1a71c83463bde0c6868b1bd2c727651dba6922ba51721d3fe71dce1128c5a480ff9b479fd963b8ad85f2f7955d3a99f819cffa6 b/.pnpm-store/v11/files/20/eda849a70706f54a36642ce1a71c83463bde0c6868b1bd2c727651dba6922ba51721d3fe71dce1128c5a480ff9b479fd963b8ad85f2f7955d3a99f819cffa6 new file mode 100644 index 00000000..773b0370 --- /dev/null +++ b/.pnpm-store/v11/files/20/eda849a70706f54a36642ce1a71c83463bde0c6868b1bd2c727651dba6922ba51721d3fe71dce1128c5a480ff9b479fd963b8ad85f2f7955d3a99f819cffa6 @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../string')); diff --git a/.pnpm-store/v11/files/20/f035f0936680d62fcafc2578dfebd50579932b6c9c5eb794880b1460c8fbbc35a7aa192c1a607405505f4e6c2d031df7cfc7b3100da9b7ac92594151374ab7 b/.pnpm-store/v11/files/20/f035f0936680d62fcafc2578dfebd50579932b6c9c5eb794880b1460c8fbbc35a7aa192c1a607405505f4e6c2d031df7cfc7b3100da9b7ac92594151374ab7 new file mode 100644 index 00000000..6fd96d30 --- /dev/null +++ b/.pnpm-store/v11/files/20/f035f0936680d62fcafc2578dfebd50579932b6c9c5eb794880b1460c8fbbc35a7aa192c1a607405505f4e6c2d031df7cfc7b3100da9b7ac92594151374ab7 @@ -0,0 +1,39 @@ +{ + "name": "source-map-url", + "version": "0.4.1", + "author": "Simon Lydell", + "license": "MIT", + "description": "Tools for working with sourceMappingURL comments.", + "keywords": [ + "source map", + "sourceMappingURL", + "comment", + "annotation" + ], + "main": "source-map-url.js", + "repository": "lydell/source-map-url", + "scripts": { + "lint": "jshint source-map-url.js test/ ", + "unit": "mocha", + "test": "npm run lint && npm run unit" + }, + "devDependencies": { + "mocha": "~1.17.1", + "expect.js": "~0.3.1", + "jshint": "~2.4.3" + }, + "testling": { + "harness": "mocha", + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "chrome/latest", + "firefox/latest", + "opera/12", + "opera/latest", + "safari/5", + "iphone/6", + "android-browser/4" + ] + } +} diff --git a/.pnpm-store/v11/files/21/0e78263b68fa647b6aa9d0e9fbf3b2fae3cdb3b21e0fd496c63ea167bd6173daa967ced9e1fbb38ed7b7be6812184ac40d865672cdd51f6e13db617502648a b/.pnpm-store/v11/files/21/0e78263b68fa647b6aa9d0e9fbf3b2fae3cdb3b21e0fd496c63ea167bd6173daa967ced9e1fbb38ed7b7be6812184ac40d865672cdd51f6e13db617502648a new file mode 100644 index 00000000..0f3f9b9f --- /dev/null +++ b/.pnpm-store/v11/files/21/0e78263b68fa647b6aa9d0e9fbf3b2fae3cdb3b21e0fd496c63ea167bd6173daa967ced9e1fbb38ed7b7be6812184ac40d865672cdd51f6e13db617502648a @@ -0,0 +1,74 @@ +# Emitter [![Build Status](https://travis-ci.org/component/emitter.png)](https://travis-ci.org/component/emitter) + + Event emitter component. + +## Installation + +``` +$ component install component/emitter +``` + +## API + +### Emitter(obj) + + The `Emitter` may also be used as a mixin. For example + a "plain" object may become an emitter, or you may + extend an existing prototype. + + As an `Emitter` instance: + +```js +var Emitter = require('emitter'); +var emitter = new Emitter; +emitter.emit('something'); +``` + + As a mixin: + +```js +var Emitter = require('emitter'); +var user = { name: 'tobi' }; +Emitter(user); + +user.emit('im a user'); +``` + + As a prototype mixin: + +```js +var Emitter = require('emitter'); +Emitter(User.prototype); +``` + +### Emitter#on(event, fn) + + Register an `event` handler `fn`. + +### Emitter#once(event, fn) + + Register a single-shot `event` handler `fn`, + removed immediately after it is invoked the + first time. + +### Emitter#off(event, fn) + + * Pass `event` and `fn` to remove a listener. + * Pass `event` to remove all listeners on that event. + * Pass nothing to remove all listeners on all events. + +### Emitter#emit(event, ...) + + Emit an `event` with variable option args. + +### Emitter#listeners(event) + + Return an array of callbacks, or an empty array. + +### Emitter#hasListeners(event) + + Check if this emitter has `event` handlers. + +## License + +MIT diff --git a/.pnpm-store/v11/files/21/2c35954fb057bd857cae487d22a58e1a950baf854eba77bfa7cb5bbd4c8a172eaae99d9735f533b9eeeba0aa0de5b820111b96b8d22c9215d986020ddbaba5 b/.pnpm-store/v11/files/21/2c35954fb057bd857cae487d22a58e1a950baf854eba77bfa7cb5bbd4c8a172eaae99d9735f533b9eeeba0aa0de5b820111b96b8d22c9215d986020ddbaba5 new file mode 100644 index 00000000..82cb952b --- /dev/null +++ b/.pnpm-store/v11/files/21/2c35954fb057bd857cae487d22a58e1a950baf854eba77bfa7cb5bbd4c8a172eaae99d9735f533b9eeeba0aa0de5b820111b96b8d22c9215d986020ddbaba5 @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../date')); diff --git a/.pnpm-store/v11/files/21/55a791e177f2ffa02299390e4cd8dfe5dedd473cd62bbc3d79a01380ef6e2c17cf0427e00f1a4bc23950318366dce2cd46af254eb1235ec4b42603d042f456 b/.pnpm-store/v11/files/21/55a791e177f2ffa02299390e4cd8dfe5dedd473cd62bbc3d79a01380ef6e2c17cf0427e00f1a4bc23950318366dce2cd46af254eb1235ec4b42603d042f456 new file mode 100644 index 00000000..ae0deedc --- /dev/null +++ b/.pnpm-store/v11/files/21/55a791e177f2ffa02299390e4cd8dfe5dedd473cd62bbc3d79a01380ef6e2c17cf0427e00f1a4bc23950318366dce2cd46af254eb1235ec4b42603d042f456 @@ -0,0 +1,53 @@ +var baseIndexOf = require('./_baseIndexOf'), + isArrayLike = require('./isArrayLike'), + isString = require('./isString'), + toInteger = require('./toInteger'), + values = require('./values'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * Checks if `value` is in `collection`. If `collection` is a string, it's + * checked for a substring of `value`, otherwise + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * is used for equality comparisons. If `fromIndex` is negative, it's used as + * the offset from the end of `collection`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. + * @returns {boolean} Returns `true` if `value` is found, else `false`. + * @example + * + * _.includes([1, 2, 3], 1); + * // => true + * + * _.includes([1, 2, 3], 1, 2); + * // => false + * + * _.includes({ 'a': 1, 'b': 2 }, 1); + * // => true + * + * _.includes('abcd', 'bc'); + * // => true + */ +function includes(collection, value, fromIndex, guard) { + collection = isArrayLike(collection) ? collection : values(collection); + fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; + + var length = collection.length; + if (fromIndex < 0) { + fromIndex = nativeMax(length + fromIndex, 0); + } + return isString(collection) + ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) + : (!!length && baseIndexOf(collection, value, fromIndex) > -1); +} + +module.exports = includes; diff --git a/.pnpm-store/v11/files/21/55e4446788b61e138a8579f708f873074ee6271739898bca2a73e82d484a230b601a70dde2be9bc8e059b87ca00f13316e51ce87229b46aa62f54906ce551e b/.pnpm-store/v11/files/21/55e4446788b61e138a8579f708f873074ee6271739898bca2a73e82d484a230b601a70dde2be9bc8e059b87ca00f13316e51ce87229b46aa62f54906ce551e new file mode 100644 index 00000000..4bc9e91f --- /dev/null +++ b/.pnpm-store/v11/files/21/55e4446788b61e138a8579f708f873074ee6271739898bca2a73e82d484a230b601a70dde2be9bc8e059b87ca00f13316e51ce87229b46aa62f54906ce551e @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ +function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function(value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; +} + +module.exports = baseAggregator; diff --git a/.pnpm-store/v11/files/21/599c14f01a2a95bb122f616053b4ed6b2478bdcdbc095debc43c1842889053d6682d8afaac3aa2e531c6eeede044d66f08de03e68ff91ae762399157b89bf5 b/.pnpm-store/v11/files/21/599c14f01a2a95bb122f616053b4ed6b2478bdcdbc095debc43c1842889053d6682d8afaac3aa2e531c6eeede044d66f08de03e68ff91ae762399157b89bf5 new file mode 100644 index 00000000..fad92644 --- /dev/null +++ b/.pnpm-store/v11/files/21/599c14f01a2a95bb122f616053b4ed6b2478bdcdbc095debc43c1842889053d6682d8afaac3aa2e531c6eeede044d66f08de03e68ff91ae762399157b89bf5 @@ -0,0 +1,24 @@ + +/** + * Module exports. + */ + +module.exports = on; + +/** + * Helper for subscriptions. + * + * @param {Object|EventEmitter} obj with `Emitter` mixin or `EventEmitter` + * @param {String} event name + * @param {Function} callback + * @api public + */ + +function on (obj, ev, fn) { + obj.on(ev, fn); + return { + destroy: function () { + obj.removeListener(ev, fn); + } + }; +} diff --git a/.pnpm-store/v11/files/21/6a1ac36acdc929ba3cb3788bf5c32acd3b9e86885276c40ab031c0f05d08f635e4724426ee3cc34e45f6eb155ce7fbe10e72180ac4db48b2dd174955e2e2bd b/.pnpm-store/v11/files/21/6a1ac36acdc929ba3cb3788bf5c32acd3b9e86885276c40ab031c0f05d08f635e4724426ee3cc34e45f6eb155ce7fbe10e72180ac4db48b2dd174955e2e2bd new file mode 100644 index 00000000..e33d14b7 --- /dev/null +++ b/.pnpm-store/v11/files/21/6a1ac36acdc929ba3cb3788bf5c32acd3b9e86885276c40ab031c0f05d08f635e4724426ee3cc34e45f6eb155ce7fbe10e72180ac4db48b2dd174955e2e2bd @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/21/8188388e9770b4525c25e43d71cbe35f8d0f255c27473a5d4c0b0722a2e765135b54818db3652b1a9447f490624e1d9c57dd13cf467349beca4a17c90c3c76 b/.pnpm-store/v11/files/21/8188388e9770b4525c25e43d71cbe35f8d0f255c27473a5d4c0b0722a2e765135b54818db3652b1a9447f490624e1d9c57dd13cf467349beca4a17c90c3c76 new file mode 100644 index 00000000..4082981f --- /dev/null +++ b/.pnpm-store/v11/files/21/8188388e9770b4525c25e43d71cbe35f8d0f255c27473a5d4c0b0722a2e765135b54818db3652b1a9447f490624e1d9c57dd13cf467349beca4a17c90c3c76 @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = { + BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'], + GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', + kStatusCode: Symbol('status-code'), + kWebSocket: Symbol('websocket'), + EMPTY_BUFFER: Buffer.alloc(0), + NOOP: () => {} +}; diff --git a/.pnpm-store/v11/files/21/8549f13a4a91b692de2dcfc33d0ce384cfd24fa5dbd45fbd58abf99800510fd83c8fe931dbb409b1d7bf16bd7cf70702506d3fd07c9c0f740cff3ceb65ebad b/.pnpm-store/v11/files/21/8549f13a4a91b692de2dcfc33d0ce384cfd24fa5dbd45fbd58abf99800510fd83c8fe931dbb409b1d7bf16bd7cf70702506d3fd07c9c0f740cff3ceb65ebad new file mode 100644 index 00000000..726a838c --- /dev/null +++ b/.pnpm-store/v11/files/21/8549f13a4a91b692de2dcfc33d0ce384cfd24fa5dbd45fbd58abf99800510fd83c8fe931dbb409b1d7bf16bd7cf70702506d3fd07c9c0f740cff3ceb65ebad @@ -0,0 +1,47 @@ +'use strict'; + +require('ansi-256-colors'); +require('ansi-styles'); +require('ascii-table'); +require('async'); +require('builtin-modules'); +require('callsite'); +require('camelcase'); +require('chmodr'); +require('colors'); +require('dashdash'); +require('du'); +require('function-arguments'); +require('lockfile'); +require('lodash.flatten'); +require('lodash.flattendeep'); +require('lodash.includes'); +require('lodash.intersection'); +require('lodash.mapvalues'); +require('lodash.merge'); +require('lodash.shuffle'); +require('lodash.sortby'); +require('lodash.uniq'); +require('lodash.uniqby'); +require('make-beep'); +require('mkdirp'); +require('pragmatik'); +require('progress'); +require('request'); +require('require-from-string'); +require('residence'); +require('rimraf'); +require('semver'); +require('siamese'); +require('socket.io'); +require('socket.io-client'); +require('suman-debug'); +require('suman-events'); +require('suman-example-reporter'); +require('suman-utils'); +require('tap-parser'); +require('tcp-ping'); +require('underscore'); +require('uuid'); +require('v8flags'); +require('websocket-stream'); diff --git a/.pnpm-store/v11/files/21/95694cafe675f38c46573c67cabe30766e17824d8847e98dea2b3f719a9265007983a1a92126734a93099d9fe71a39ba21b8257fa78ee32a60d8a7562f8bc3 b/.pnpm-store/v11/files/21/95694cafe675f38c46573c67cabe30766e17824d8847e98dea2b3f719a9265007983a1a92126734a93099d9fe71a39ba21b8257fa78ee32a60d8a7562f8bc3 new file mode 100644 index 00000000..ac2d57ca --- /dev/null +++ b/.pnpm-store/v11/files/21/95694cafe675f38c46573c67cabe30766e17824d8847e98dea2b3f719a9265007983a1a92126734a93099d9fe71a39ba21b8257fa78ee32a60d8a7562f8bc3 @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'); + +module.exports = DataView; diff --git a/.pnpm-store/v11/files/21/a347a8955ceb4a15c8ec21f68121c33e8e4634ad7403d666e58eeb7604a15aa5cee58e97511f1b97f62acfb3933cf53d0e667ab1eb563332601395d4ffd5b2 b/.pnpm-store/v11/files/21/a347a8955ceb4a15c8ec21f68121c33e8e4634ad7403d666e58eeb7604a15aa5cee58e97511f1b97f62acfb3933cf53d0e667ab1eb563332601395d4ffd5b2 new file mode 100644 index 00000000..d6e43f2b --- /dev/null +++ b/.pnpm-store/v11/files/21/a347a8955ceb4a15c8ec21f68121c33e8e4634ad7403d666e58eeb7604a15aa5cee58e97511f1b97f62acfb3933cf53d0e667ab1eb563332601395d4ffd5b2 @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Component contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/21/a74acde2af6d82527573e9fd53ce484e8785a3f9c9806995f6ea9d2d0b7c094d19134fbfdc1040fdcb600be4ee74fd1cd0f125a26c3895969f5815fbfc6e9e b/.pnpm-store/v11/files/21/a74acde2af6d82527573e9fd53ce484e8785a3f9c9806995f6ea9d2d0b7c094d19134fbfdc1040fdcb600be4ee74fd1cd0f125a26c3895969f5815fbfc6e9e new file mode 100644 index 00000000..246e5635 --- /dev/null +++ b/.pnpm-store/v11/files/21/a74acde2af6d82527573e9fd53ce484e8785a3f9c9806995f6ea9d2d0b7c094d19134fbfdc1040fdcb600be4ee74fd1cd0f125a26c3895969f5815fbfc6e9e @@ -0,0 +1,299 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[![Build Status](https://travis-ci.org/nodeca/js-yaml.svg?branch=master)](https://travis-ci.org/nodeca/js-yaml) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +### Bundled YAML library for browsers + +``` html + + + + +``` + +Browser support was done mostly for the online demo. If you find any errors - feel +free to send pull requests with fixes. Also note, that IE and other old browsers +needs [es5-shims](https://github.com/kriskowal/es5-shim) to operate. + +Notes: + +1. We have no resources to support browserified version. Don't expect it to be + well tested. Don't expect fast fixes if something goes wrong there. +2. `!!js/function` in browser bundle will not work by default. If you really need + it - load `esprima` parser first (via amd or directly). +3. `!!bin` in browser will return `Array`, because browsers do not support + node.js `Buffer` and adding Buffer shims is completely useless on practice. + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and +[examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more +info. + +``` javascript +const yaml = require('js-yaml'); +const fs = require('fs'); + +// Get document, or throw exception on error +try { + const doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### safeLoad (string [ , options ]) + +**Recommended loading way.** Parses `string` as single YAML document. Returns either a +plain object, a string or `undefined`, or throws `YAMLException` on error. By default, does +not support regexps, functions and undefined. This method is safe for untrusted data. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones + (`!!js/undefined`, `!!js/regexp` and `!!js/function`): + http://yaml.org/type/ + - `DEFAULT_FULL_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### load (string [ , options ]) + +**Use with care with untrusted sources**. The same as `safeLoad()` but uses +`DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types: +`!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources, you +must additionally validate object structure to avoid injections: + +``` javascript +const untrusted_code = '"toString": ! "function (){very_evil_thing();}"'; + +// I'm just converting that string, what could possibly go wrong? +require('js-yaml').load(untrusted_code) + '' +``` + + +### safeLoadAll (string [, iterator] [, options ]) + +Same as `safeLoad()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +const yaml = require('js-yaml'); + +yaml.safeLoadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### loadAll (string [, iterator] [ , options ]) + +Same as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default. + + +### safeDump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` (default: -1) - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older + yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null + "canonical" -> "~" + "lowercase" => "null" + "uppercase" -> "NULL" + "camelcase" -> "Null" + +!!int + "binary" -> "0b1", "0b101010", "0b1110001111010" + "octal" -> "01", "052", "016172" + "decimal" => "1", "42", "7290" + "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool + "lowercase" => "true", "false" + "uppercase" -> "TRUE", "FALSE" + "camelcase" -> "True", "False" + +!!float + "lowercase" => ".nan", '.inf' + "uppercase" -> ".NAN", '.INF' + "camelcase" -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +safeDump (object, { + 'styles': { + '!!null': 'canonical' // dump null as ~ + }, + 'sortKeys': true // sort object keys +}); +``` + +### dump (object [ , options ]) + +Same as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default). + + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScipt types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +``` +!!js/regexp /pattern/gim # RegExp +!!js/undefined '' # Undefined +!!js/function 'function () {...}' # Function +``` + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +js-yaml for enterprise +---------------------- + +Available as part of the Tidelift Subscription + +The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/.pnpm-store/v11/files/21/da534a03318b491adeb55dc78badccadcbfad74879fc66ede69674ba671e0097e838a2bcf71926ba786527b80c18afc985e76ac9a14ffe0d5ebb67bb9c17bb b/.pnpm-store/v11/files/21/da534a03318b491adeb55dc78badccadcbfad74879fc66ede69674ba671e0097e838a2bcf71926ba786527b80c18afc985e76ac9a14ffe0d5ebb67bb9c17bb new file mode 100644 index 00000000..a9072f67 --- /dev/null +++ b/.pnpm-store/v11/files/21/da534a03318b491adeb55dc78badccadcbfad74879fc66ede69674ba671e0097e838a2bcf71926ba786527b80c18afc985e76ac9a14ffe0d5ebb67bb9c17bb @@ -0,0 +1,64 @@ +{ + "name": "regex-cache", + "description": "Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in surprising performance improvements.", + "version": "0.4.4", + "homepage": "https://github.com/jonschlinkert/regex-cache", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Martin Kolárik (https://kolarik.sk)" + ], + "repository": "jonschlinkert/regex-cache", + "bugs": { + "url": "https://github.com/jonschlinkert/regex-cache/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "benchmarks": "node benchmark" + }, + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "devDependencies": { + "ansi-bold": "^0.1.1", + "benchmarked": "^0.1.5", + "gulp-format-md": "^0.1.7", + "micromatch": "^2.3.7", + "should": "^8.3.0" + }, + "keywords": [ + "cache", + "expression", + "regex", + "regexp", + "regular", + "regular expression", + "store", + "to-regex" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/21/dbd4f0b982c6f54de9ac913d964c64de06dee23e13607e76db916ff2c0be87320b550472de819982d353a89f9a12a46b07c5d781fd23eb5cb6ab7be91e7098 b/.pnpm-store/v11/files/21/dbd4f0b982c6f54de9ac913d964c64de06dee23e13607e76db916ff2c0be87320b550472de819982d353a89f9a12a46b07c5d781fd23eb5cb6ab7be91e7098 new file mode 100644 index 00000000..b2364b58 --- /dev/null +++ b/.pnpm-store/v11/files/21/dbd4f0b982c6f54de9ac913d964c64de06dee23e13607e76db916ff2c0be87320b550472de819982d353a89f9a12a46b07c5d781fd23eb5cb6ab7be91e7098 @@ -0,0 +1,322 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +///////////////////////////// +/// Windows Script Host APIS +///////////////////////////// + +interface ActiveXObject { + new (s: string): any; +} +declare var ActiveXObject: ActiveXObject; + +interface ITextWriter { + Write(s: string): void; + WriteLine(s: string): void; + Close(): void; +} + +interface TextStreamBase { + /** + * The column number of the current character position in an input stream. + */ + Column: number; + + /** + * The current line number in an input stream. + */ + Line: number; + + /** + * Closes a text stream. + * It is not necessary to close standard streams; they close automatically when the process ends. If + * you close a standard stream, be aware that any other pointers to that standard stream become invalid. + */ + Close(): void; +} + +interface TextStreamWriter extends TextStreamBase { + /** + * Sends a string to an output stream. + */ + Write(s: string): void; + + /** + * Sends a specified number of blank lines (newline characters) to an output stream. + */ + WriteBlankLines(intLines: number): void; + + /** + * Sends a string followed by a newline character to an output stream. + */ + WriteLine(s: string): void; +} + +interface TextStreamReader extends TextStreamBase { + /** + * Returns a specified number of characters from an input stream, starting at the current pointer position. + * Does not return until the ENTER key is pressed. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + Read(characters: number): string; + + /** + * Returns all characters from an input stream. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + ReadAll(): string; + + /** + * Returns an entire line from an input stream. + * Although this method extracts the newline character, it does not add it to the returned string. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + */ + ReadLine(): string; + + /** + * Skips a specified number of characters when reading from an input text stream. + * Can only be used on a stream in reading mode; causes an error in writing or appending mode. + * @param characters Positive number of characters to skip forward. (Backward skipping is not supported.) + */ + Skip(characters: number): void; + + /** + * Skips the next line when reading from an input text stream. + * Can only be used on a stream in reading mode, not writing or appending mode. + */ + SkipLine(): void; + + /** + * Indicates whether the stream pointer position is at the end of a line. + */ + AtEndOfLine: boolean; + + /** + * Indicates whether the stream pointer position is at the end of a stream. + */ + AtEndOfStream: boolean; +} + +declare var WScript: { + /** + * Outputs text to either a message box (under WScript.exe) or the command console window followed by + * a newline (under CScript.exe). + */ + Echo(s: any): void; + + /** + * Exposes the write-only error output stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdErr: TextStreamWriter; + + /** + * Exposes the write-only output stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdOut: TextStreamWriter; + Arguments: { length: number; Item(n: number): string; }; + + /** + * The full path of the currently running script. + */ + ScriptFullName: string; + + /** + * Forces the script to stop immediately, with an optional exit code. + */ + Quit(exitCode?: number): number; + + /** + * The Windows Script Host build version number. + */ + BuildVersion: number; + + /** + * Fully qualified path of the host executable. + */ + FullName: string; + + /** + * Gets/sets the script mode - interactive(true) or batch(false). + */ + Interactive: boolean; + + /** + * The name of the host executable (WScript.exe or CScript.exe). + */ + Name: string; + + /** + * Path of the directory containing the host executable. + */ + Path: string; + + /** + * The filename of the currently running script. + */ + ScriptName: string; + + /** + * Exposes the read-only input stream for the current script. + * Can be accessed only while using CScript.exe. + */ + StdIn: TextStreamReader; + + /** + * Windows Script Host version + */ + Version: string; + + /** + * Connects a COM object's event sources to functions named with a given prefix, in the form prefix_event. + */ + ConnectObject(objEventSource: any, strPrefix: string): void; + + /** + * Creates a COM object. + * @param strProgiID + * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. + */ + CreateObject(strProgID: string, strPrefix?: string): any; + + /** + * Disconnects a COM object from its event sources. + */ + DisconnectObject(obj: any): void; + + /** + * Retrieves an existing object with the specified ProgID from memory, or creates a new one from a file. + * @param strPathname Fully qualified path to the file containing the object persisted to disk. + * For objects in memory, pass a zero-length string. + * @param strProgID + * @param strPrefix Function names in the form prefix_event will be bound to this object's COM events. + */ + GetObject(strPathname: string, strProgID?: string, strPrefix?: string): any; + + /** + * Suspends script execution for a specified length of time, then continues execution. + * @param intTime Interval (in milliseconds) to suspend script execution. + */ + Sleep(intTime: number): void; +}; + +/** + * WSH is an alias for WScript under Windows Script Host + */ +declare var WSH: typeof WScript; + +/** + * Represents an Automation SAFEARRAY + */ +declare class SafeArray { + private constructor(); + private SafeArray_typekey: SafeArray; +} + +/** + * Allows enumerating over a COM collection, which may not have indexed item access. + */ +interface Enumerator { + /** + * Returns true if the current item is the last one in the collection, or the collection is empty, + * or the current item is undefined. + */ + atEnd(): boolean; + + /** + * Returns the current item in the collection + */ + item(): T; + + /** + * Resets the current item in the collection to the first item. If there are no items in the collection, + * the current item is set to undefined. + */ + moveFirst(): void; + + /** + * Moves the current item to the next item in the collection. If the enumerator is at the end of + * the collection or the collection is empty, the current item is set to undefined. + */ + moveNext(): void; +} + +interface EnumeratorConstructor { + new (safearray: SafeArray): Enumerator; + new (collection: { Item(index: any): T; }): Enumerator; + new (collection: any): Enumerator; +} + +declare var Enumerator: EnumeratorConstructor; + +/** + * Enables reading from a COM safe array, which might have an alternate lower bound, or multiple dimensions. + */ +interface VBArray { + /** + * Returns the number of dimensions (1-based). + */ + dimensions(): number; + + /** + * Takes an index for each dimension in the array, and returns the item at the corresponding location. + */ + getItem(dimension1Index: number, ...dimensionNIndexes: number[]): T; + + /** + * Returns the smallest available index for a given dimension. + * @param dimension 1-based dimension (defaults to 1) + */ + lbound(dimension?: number): number; + + /** + * Returns the largest available index for a given dimension. + * @param dimension 1-based dimension (defaults to 1) + */ + ubound(dimension?: number): number; + + /** + * Returns a Javascript array with all the elements in the VBArray. If there are multiple dimensions, + * each successive dimension is appended to the end of the array. + * Example: [[1,2,3],[4,5,6]] becomes [1,2,3,4,5,6] + */ + toArray(): T[]; +} + +interface VBArrayConstructor { + new (safeArray: SafeArray): VBArray; +} + +declare var VBArray: VBArrayConstructor; + +/** + * Automation date (VT_DATE) + */ +declare class VarDate { + private constructor(); + private VarDate_typekey: VarDate; +} + +interface DateConstructor { + new (vd: VarDate): Date; +} + +interface Date { + getVarDate: () => VarDate; +} diff --git a/.pnpm-store/v11/files/21/ea04d1f36f96dbc75d00010769ee70d0467b2c50a83c5f57ffffaba03de1d608f76642889ab00154d0d9295b3e6cd0f28e5e008626023bc86ee6939ebd0703 b/.pnpm-store/v11/files/21/ea04d1f36f96dbc75d00010769ee70d0467b2c50a83c5f57ffffaba03de1d608f76642889ab00154d0d9295b3e6cd0f28e5e008626023bc86ee6939ebd0703 new file mode 100644 index 00000000..7ea799f0 --- /dev/null +++ b/.pnpm-store/v11/files/21/ea04d1f36f96dbc75d00010769ee70d0467b2c50a83c5f57ffffaba03de1d608f76642889ab00154d0d9295b3e6cd0f28e5e008626023bc86ee6939ebd0703 @@ -0,0 +1,19 @@ +Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/22/0fe6ad8d85ac940d7d64a72f58b4d0b3ad1e8bb093606f15ebf85866a40f78e7b4e99a418e762236379cc536e21428c87e6464506a0d2b9f7abc26b6bb7a40 b/.pnpm-store/v11/files/22/0fe6ad8d85ac940d7d64a72f58b4d0b3ad1e8bb093606f15ebf85866a40f78e7b4e99a418e762236379cc536e21428c87e6464506a0d2b9f7abc26b6bb7a40 new file mode 100644 index 00000000..3737a6d9 --- /dev/null +++ b/.pnpm-store/v11/files/22/0fe6ad8d85ac940d7d64a72f58b4d0b3ad1e8bb093606f15ebf85866a40f78e7b4e99a418e762236379cc536e21428c87e6464506a0d2b9f7abc26b6bb7a40 @@ -0,0 +1,17 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; +} + +module.exports = arrayIncludes; diff --git a/.pnpm-store/v11/files/22/17a53408857a99ac9dc05c09b05558089fd4bc74501484452bf513ef1008259d9e9588ee82465404cd13e093105a6932c1b77ab2d44302c0e4aabe0245d2e4 b/.pnpm-store/v11/files/22/17a53408857a99ac9dc05c09b05558089fd4bc74501484452bf513ef1008259d9e9588ee82465404cd13e093105a6932c1b77ab2d44302c0e4aabe0245d2e4 new file mode 100644 index 00000000..91196d5e --- /dev/null +++ b/.pnpm-store/v11/files/22/17a53408857a99ac9dc05c09b05558089fd4bc74501484452bf513ef1008259d9e9588ee82465404cd13e093105a6932c1b77ab2d44302c0e4aabe0245d2e4 @@ -0,0 +1,43 @@ +{ + "name": "path-is-absolute", + "version": "1.0.1", + "description": "Node.js 0.12 path.isAbsolute() ponyfill", + "license": "MIT", + "repository": "sindresorhus/path-is-absolute", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "xo && node test.js" + }, + "files": [ + "index.js" + ], + "keywords": [ + "path", + "paths", + "file", + "dir", + "absolute", + "isabsolute", + "is-absolute", + "built-in", + "util", + "utils", + "core", + "ponyfill", + "polyfill", + "shim", + "is", + "detect", + "check" + ], + "devDependencies": { + "xo": "^0.16.0" + } +} diff --git a/.pnpm-store/v11/files/22/369cc02af1d2a345a70a415de9e690f3f14ad6567f216924bf05dcf01dbbde7c6b3a08cf87d5edf1ca3b5a793d504e532f3a7c828964e97024334135b57369 b/.pnpm-store/v11/files/22/369cc02af1d2a345a70a415de9e690f3f14ad6567f216924bf05dcf01dbbde7c6b3a08cf87d5edf1ca3b5a793d504e532f3a7c828964e97024334135b57369 new file mode 100644 index 00000000..03149290 --- /dev/null +++ b/.pnpm-store/v11/files/22/369cc02af1d2a345a70a415de9e690f3f14ad6567f216924bf05dcf01dbbde7c6b3a08cf87d5edf1ca3b5a793d504e532f3a7c828964e97024334135b57369 @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/22/389dc3aaa24ec66999ec896b35b3798fa31e30387ac73a55d752449cab66359c14750bd78a38cc677f7d6107957115f94578accbd94cf208540b22b8e16f07-exec b/.pnpm-store/v11/files/22/389dc3aaa24ec66999ec896b35b3798fa31e30387ac73a55d752449cab66359c14750bd78a38cc677f7d6107957115f94578accbd94cf208540b22b8e16f07-exec new file mode 100755 index 00000000..78119001 --- /dev/null +++ b/.pnpm-store/v11/files/22/389dc3aaa24ec66999ec896b35b3798fa31e30387ac73a55d752449cab66359c14750bd78a38cc677f7d6107957115f94578accbd94cf208540b22b8e16f07-exec @@ -0,0 +1,54 @@ +// NOTE: These definitions support NodeJS and TypeScript 3.2. + +// NOTE: TypeScript version-specific augmentations can be found in the following paths: +// - ~/base.d.ts - Shared definitions common to all TypeScript versions +// - ~/index.d.ts - Definitions specific to TypeScript 2.1 +// - ~/ts3.2/base.d.ts - Definitions specific to TypeScript 3.2 +// - ~/ts3.2/index.d.ts - Definitions specific to TypeScript 3.2 with assert pulled in + +// Reference required types from the default lib: +/// +/// +/// +/// + +// base definitions for all NodeJS modules that are not specific to any version of TypeScript +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/22/3be88b9af9b7e05374c11591b851df433c4c84b8625765101a9644350727a6accae3c9ec0604c2ca4938bd06c8a06a8950efcd9aa33dcebb6dbb5056b89501 b/.pnpm-store/v11/files/22/3be88b9af9b7e05374c11591b851df433c4c84b8625765101a9644350727a6accae3c9ec0604c2ca4938bd06c8a06a8950efcd9aa33dcebb6dbb5056b89501 new file mode 100644 index 00000000..88ff483f --- /dev/null +++ b/.pnpm-store/v11/files/22/3be88b9af9b7e05374c11591b851df433c4c84b8625765101a9644350727a6accae3c9ec0604c2ca4938bd06c8a06a8950efcd9aa33dcebb6dbb5056b89501 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').each; diff --git a/.pnpm-store/v11/files/22/3f9a8b784805b87236cf489516997c0f5be2e86b23503984b81af94560adf3388f0c1f10307255e2c950ea8e0b0390309a8b69dd4f5757191c622423837535 b/.pnpm-store/v11/files/22/3f9a8b784805b87236cf489516997c0f5be2e86b23503984b81af94560adf3388f0c1f10307255e2c950ea8e0b0390309a8b69dd4f5757191c622423837535 new file mode 100644 index 00000000..07eac61b --- /dev/null +++ b/.pnpm-store/v11/files/22/3f9a8b784805b87236cf489516997c0f5be2e86b23503984b81af94560adf3388f0c1f10307255e2c950ea8e0b0390309a8b69dd4f5757191c622423837535 @@ -0,0 +1,26 @@ +var baseSlice = require('./_baseSlice'); + +/** + * The base implementation of methods like `_.dropWhile` and `_.takeWhile` + * without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to query. + * @param {Function} predicate The function invoked per iteration. + * @param {boolean} [isDrop] Specify dropping elements instead of taking them. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the slice of `array`. + */ +function baseWhile(array, predicate, isDrop, fromRight) { + var length = array.length, + index = fromRight ? length : -1; + + while ((fromRight ? index-- : ++index < length) && + predicate(array[index], index, array)) {} + + return isDrop + ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) + : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); +} + +module.exports = baseWhile; diff --git a/.pnpm-store/v11/files/22/41a2f0b3a7f41bed270b355ffe8140c123929a1ca606ca0dfa4ef3809771d099c9dbfd71f6d966a175dd57a5ef550cf6f510cea05f10baef7de99db218007b b/.pnpm-store/v11/files/22/41a2f0b3a7f41bed270b355ffe8140c123929a1ca606ca0dfa4ef3809771d099c9dbfd71f6d966a175dd57a5ef550cf6f510cea05f10baef7de99db218007b new file mode 100644 index 00000000..298168e5 --- /dev/null +++ b/.pnpm-store/v11/files/22/41a2f0b3a7f41bed270b355ffe8140c123929a1ca606ca0dfa4ef3809771d099c9dbfd71f6d966a175dd57a5ef550cf6f510cea05f10baef7de99db218007b @@ -0,0 +1,9 @@ +'use strict'; + +var os = require('os'); +if (typeof os.homedir !== 'undefined') { + module.exports = os.homedir; +} else { + module.exports = require('./polyfill.js'); +} + diff --git a/.pnpm-store/v11/files/22/43201348e4a99ddf70db7c45ae368fb06148af221a786c6b5210c32ca6841ef4534e742c09b88b1dc2b3687eb24e90c8b6a6d758645d946fbb390254ee2795 b/.pnpm-store/v11/files/22/43201348e4a99ddf70db7c45ae368fb06148af221a786c6b5210c32ca6841ef4534e742c09b88b1dc2b3687eb24e90c8b6a6d758645d946fbb390254ee2795 new file mode 100644 index 00000000..450a512e --- /dev/null +++ b/.pnpm-store/v11/files/22/43201348e4a99ddf70db7c45ae368fb06148af221a786c6b5210c32ca6841ef4534e742c09b88b1dc2b3687eb24e90c8b6a6d758645d946fbb390254ee2795 @@ -0,0 +1,219 @@ +'use strict'; + +var utils = require('./utils'); +var define = require('define-property'); + +/** + * Text regex + */ + +var TEXT_REGEX = '(\\[(?=.*\\])|\\])+'; +var not = utils.createRegex(TEXT_REGEX); + +/** + * Brackets parsers + */ + +function parsers(brackets) { + brackets.state = brackets.state || {}; + brackets.parser.sets.bracket = brackets.parser.sets.bracket || []; + brackets.parser + + .capture('escape', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(/^\\(.)/); + if (!m) return; + + return pos({ + type: 'escape', + val: m[0] + }); + }) + + /** + * Text parser + */ + + .capture('text', function() { + if (this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(not); + if (!m || !m[0]) return; + + return pos({ + type: 'text', + val: m[0] + }); + }) + + /** + * POSIX character classes: "[[:alpha:][:digits:]]" + */ + + .capture('posix', function() { + var pos = this.position(); + var m = this.match(/^\[:(.*?):\](?=.*\])/); + if (!m) return; + + var inside = this.isInside('bracket'); + if (inside) { + brackets.posix++; + } + + return pos({ + type: 'posix', + insideBracket: inside, + inner: m[1], + val: m[0] + }); + }) + + /** + * Bracket (noop) + */ + + .capture('bracket', function() {}) + + /** + * Open: '[' + */ + + .capture('bracket.open', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\[(?=.*\])/); + if (!m) return; + + var prev = this.prev(); + var last = utils.last(prev.nodes); + + if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) { + last.val = last.val.slice(0, last.val.length - 1); + return pos({ + type: 'escape', + val: m[0] + }); + } + + var open = pos({ + type: 'bracket.open', + val: m[0] + }); + + if (last.type === 'bracket.open' || this.isInside('bracket')) { + open.val = '\\' + open.val; + open.type = 'bracket.inner'; + open.escaped = true; + return open; + } + + var node = pos({ + type: 'bracket', + nodes: [open] + }); + + define(node, 'parent', prev); + define(open, 'parent', node); + this.push('bracket', node); + prev.nodes.push(node); + }) + + /** + * Bracket text + */ + + .capture('bracket.inner', function() { + if (!this.isInside('bracket')) return; + var pos = this.position(); + var m = this.match(not); + if (!m || !m[0]) return; + + var next = this.input.charAt(0); + var val = m[0]; + + var node = pos({ + type: 'bracket.inner', + val: val + }); + + if (val === '\\\\') { + return node; + } + + var first = val.charAt(0); + var last = val.slice(-1); + + if (first === '!') { + val = '^' + val.slice(1); + } + + if (last === '\\' || (val === '^' && next === ']')) { + val += this.input[0]; + this.consume(1); + } + + node.val = val; + return node; + }) + + /** + * Close: ']' + */ + + .capture('bracket.close', function() { + var parsed = this.parsed; + var pos = this.position(); + var m = this.match(/^\]/); + if (!m) return; + + var prev = this.prev(); + var last = utils.last(prev.nodes); + + if (parsed.slice(-1) === '\\' && !this.isInside('bracket')) { + last.val = last.val.slice(0, last.val.length - 1); + + return pos({ + type: 'escape', + val: m[0] + }); + } + + var node = pos({ + type: 'bracket.close', + rest: this.input, + val: m[0] + }); + + if (last.type === 'bracket.open') { + node.type = 'bracket.inner'; + node.escaped = true; + return node; + } + + var bracket = this.pop('bracket'); + if (!this.isType(bracket, 'bracket')) { + if (this.options.strict) { + throw new Error('missing opening "["'); + } + node.type = 'bracket.inner'; + node.escaped = true; + return node; + } + + bracket.nodes.push(node); + define(node, 'parent', bracket); + }); +} + +/** + * Brackets parsers + */ + +module.exports = parsers; + +/** + * Expose text regex + */ + +module.exports.TEXT_REGEX = TEXT_REGEX; diff --git a/.pnpm-store/v11/files/22/5a1e7515c05f66b5ed05145216051ea1b6d23f41816b606e5657130e46448d7bfb7e1e137771c4ff9f8e47ffd8bf513dcd3042ab38525c7d51b7cdd9184db0 b/.pnpm-store/v11/files/22/5a1e7515c05f66b5ed05145216051ea1b6d23f41816b606e5657130e46448d7bfb7e1e137771c4ff9f8e47ffd8bf513dcd3042ab38525c7d51b7cdd9184db0 new file mode 100644 index 00000000..65e94b5c --- /dev/null +++ b/.pnpm-store/v11/files/22/5a1e7515c05f66b5ed05145216051ea1b6d23f41816b606e5657130e46448d7bfb7e1e137771c4ff9f8e47ffd8bf513dcd3042ab38525c7d51b7cdd9184db0 @@ -0,0 +1,13 @@ +/** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ +function getHolder(func) { + var object = func; + return object.placeholder; +} + +module.exports = getHolder; diff --git a/.pnpm-store/v11/files/22/9343065ab4aecbef889aea6c676be1e8cab695c211a605bd1902630aeba6d8ca12f86c486b1d62f4e3810ffd8b03e9d3f853676baa340a86a82335703b3d66 b/.pnpm-store/v11/files/22/9343065ab4aecbef889aea6c676be1e8cab695c211a605bd1902630aeba6d8ca12f86c486b1d62f4e3810ffd8b03e9d3f853676baa340a86a82335703b3d66 new file mode 100644 index 00000000..9ade361c --- /dev/null +++ b/.pnpm-store/v11/files/22/9343065ab4aecbef889aea6c676be1e8cab695c211a605bd1902630aeba6d8ca12f86c486b1d62f4e3810ffd8b03e9d3f853676baa340a86a82335703b3d66 @@ -0,0 +1,57 @@ +import { TDescribeHook } from "suman-types/dts/describe"; +import { TBeforeEachHook } from "suman-types/dts/before-each"; +import { TAfterEachHook } from "suman-types/dts/after-each"; +import { TBeforeHook } from "suman-types/dts/before"; +import { TAfterHook } from "suman-types/dts/after"; +import { ItHook } from "suman-types/dts/it"; +export declare class DefineObject { + protected exec: any; + protected opts: any; + constructor(desc: string, exec: any); + inject(): this; + plan(v: number): this; + desc(v: string): this; + title(v: string): this; + name(v: string): this; + description(v: string): this; + skip(v: boolean): this; + only(v: boolean): this; + parallel(v: boolean): this; + series(v: boolean): this; + mode(v: string): this; + timeout(v: number): this; +} +export interface IDefineObject { + new (desc: string, exec: any): this; +} +export declare class DefineObjectTestOrHook extends DefineObject { + throws(v: string | RegExp): this; + cb(v: boolean): this; + fatal(v: boolean): this; + events(): this; + successEvents(...args: (string | Array)[]): this; + successEvent(...args: string[]): this; + errorEvents(...args: (Array | string)[]): this; + errorEvent(...args: string[]): this; +} +export declare class DefineOptionsInjectHook extends DefineObjectTestOrHook { + run(fn: TBeforeEachHook | TAfterEachHook): this; +} +export declare class DefineObjectAllHook extends DefineObjectTestOrHook { + first(v: boolean): this; + last(v: boolean): this; + always(v: boolean): this; + run(fn: TBeforeHook | TAfterHook): this; +} +export declare class DefineObjectEachHook extends DefineObjectTestOrHook { + fatal(v: boolean): this; + run(fn: TBeforeEachHook | TAfterEachHook): this; +} +export declare class DefineObjectTestCase extends DefineObjectTestOrHook { + run(fn: ItHook): this; +} +export declare class DefineObjectContext extends DefineObject { + source(...args: string[]): this; + names(...args: string[]): this; + run(fn: TDescribeHook): this; +} diff --git a/.pnpm-store/v11/files/22/afaee316cc0e5f56c24061e808792384f7e7ba32590a698a5d95a44c6f1658a9bc8501958540609bddd6f1e1d85393317739de8a548c4fb1712c5934cf9d91 b/.pnpm-store/v11/files/22/afaee316cc0e5f56c24061e808792384f7e7ba32590a698a5d95a44c6f1658a9bc8501958540609bddd6f1e1d85393317739de8a548c4fb1712c5934cf9d91 new file mode 100644 index 00000000..b732ba0b --- /dev/null +++ b/.pnpm-store/v11/files/22/afaee316cc0e5f56c24061e808792384f7e7ba32590a698a5d95a44c6f1658a9bc8501958540609bddd6f1e1d85393317739de8a548c4fb1712c5934cf9d91 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('initial', require('../initial'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/22/b44e3abcea41def9abd78e006eb9244f7a413a6eadea2a20f463bd6fa63d6bc1d361ee318f0bef7669fa74939296cb0384f6b30d581719700993c25e0d0eab b/.pnpm-store/v11/files/22/b44e3abcea41def9abd78e006eb9244f7a413a6eadea2a20f463bd6fa63d6bc1d361ee318f0bef7669fa74939296cb0384f6b30d581719700993c25e0d0eab new file mode 100644 index 00000000..759d088f --- /dev/null +++ b/.pnpm-store/v11/files/22/b44e3abcea41def9abd78e006eb9244f7a413a6eadea2a20f463bd6fa63d6bc1d361ee318f0bef7669fa74939296cb0384f6b30d581719700993c25e0d0eab @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('transform', require('../transform')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/22/dfade74e2295cdb67dbd6d31ed46365984a081fe1e0cb0a490602e9cb10215d1f2159e20aafa18d514bad6fac734a927fd0f2f1659d868f7c345ddf9fac0e4 b/.pnpm-store/v11/files/22/dfade74e2295cdb67dbd6d31ed46365984a081fe1e0cb0a490602e9cb10215d1f2159e20aafa18d514bad6fac734a927fd0f2f1659d868f7c345ddf9fac0e4 new file mode 100644 index 00000000..a84252cf --- /dev/null +++ b/.pnpm-store/v11/files/22/dfade74e2295cdb67dbd6d31ed46365984a081fe1e0cb0a490602e9cb10215d1f2159e20aafa18d514bad6fac734a927fd0f2f1659d868f7c345ddf9fac0e4 @@ -0,0 +1,26 @@ +/*! + * Chai - getEnumerableProperties utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .getEnumerableProperties(object) + * + * This allows the retrieval of enumerable property names of an object, + * inherited or not. + * + * @param {Object} object + * @returns {Array} + * @namespace Utils + * @name getEnumerableProperties + * @api public + */ + +module.exports = function getEnumerableProperties(object) { + var result = []; + for (var name in object) { + result.push(name); + } + return result; +}; diff --git a/.pnpm-store/v11/files/22/ee90f5ac970548ef633661724e613f20ca6ec8d628c7b19a30ceb2860e30566be66bafc7590a24d6b82efe1fd51e59884b0350017f152ea72a2c2b9d2b6eee b/.pnpm-store/v11/files/22/ee90f5ac970548ef633661724e613f20ca6ec8d628c7b19a30ceb2860e30566be66bafc7590a24d6b82efe1fd51e59884b0350017f152ea72a2c2b9d2b6eee new file mode 100644 index 00000000..82419c92 --- /dev/null +++ b/.pnpm-store/v11/files/22/ee90f5ac970548ef633661724e613f20ca6ec8d628c7b19a30ceb2860e30566be66bafc7590a24d6b82efe1fd51e59884b0350017f152ea72a2c2b9d2b6eee @@ -0,0 +1,64 @@ +define(['exports', 'module'], function (exports, module) { + 'use strict'; + + var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + endLineNumber = undefined, + column = undefined, + endColumn = undefined; + + if (loc) { + line = loc.start.line; + endLineNumber = loc.end.line; + column = loc.start.column; + endColumn = loc.end.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + this.endLineNumber = endLineNumber; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (Object.defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + Object.defineProperty(this, 'endColumn', { + value: endColumn, + enumerable: true + }); + } else { + this.column = column; + this.endColumn = endColumn; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } + } + + Exception.prototype = new Error(); + + module.exports = Exception; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsV0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxRQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7UUFDeEIsSUFBSSxZQUFBO1FBQ0osYUFBYSxZQUFBO1FBQ2IsTUFBTSxZQUFBO1FBQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosUUFBSSxHQUFHLEVBQUU7QUFDUCxVQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsbUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixZQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsZUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixhQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0tBQ3hDOztBQUVELFFBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxTQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxVQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7QUFHRCxRQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixXQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFDOztBQUVELFFBQUk7QUFDRixVQUFJLEdBQUcsRUFBRTtBQUNQLFlBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFlBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixnQkFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLGlCQUFLLEVBQUUsTUFBTTtBQUNiLHNCQUFVLEVBQUUsSUFBSTtXQUNqQixDQUFDLENBQUM7QUFDSCxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGlCQUFLLEVBQUUsU0FBUztBQUNoQixzQkFBVSxFQUFFLElBQUk7V0FDakIsQ0FBQyxDQUFDO1NBQ0osTUFBTTtBQUNMLGNBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLGNBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCO09BQ0Y7S0FDRixDQUFDLE9BQU8sR0FBRyxFQUFFOztLQUViO0dBQ0Y7O0FBRUQsV0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDOzttQkFFbkIsU0FBUyIsImZpbGUiOiJleGNlcHRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlcnJvclByb3BzID0gW1xuICAnZGVzY3JpcHRpb24nLFxuICAnZmlsZU5hbWUnLFxuICAnbGluZU51bWJlcicsXG4gICdlbmRMaW5lTnVtYmVyJyxcbiAgJ21lc3NhZ2UnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhY2snXG5dO1xuXG5mdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkge1xuICBsZXQgbG9jID0gbm9kZSAmJiBub2RlLmxvYyxcbiAgICBsaW5lLFxuICAgIGVuZExpbmVOdW1iZXIsXG4gICAgY29sdW1uLFxuICAgIGVuZENvbHVtbjtcblxuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGVuZExpbmVOdW1iZXIgPSBsb2MuZW5kLmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcbiAgICBlbmRDb2x1bW4gPSBsb2MuZW5kLmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgbGV0IHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChsb2MpIHtcbiAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgICB0aGlzLmVuZExpbmVOdW1iZXIgPSBlbmRMaW5lTnVtYmVyO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge1xuICAgICAgICAgIHZhbHVlOiBjb2x1bW4sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmRDb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGVuZENvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19 diff --git a/.pnpm-store/v11/files/22/f022306bc0a9b3e9a9ffa55411e462b021cc16b85423bffbaba5f2a36fe931d3db4e8e494efb552fdad3fdf9f94484e9a3615a16caebeaf8cb98109827675b b/.pnpm-store/v11/files/22/f022306bc0a9b3e9a9ffa55411e462b021cc16b85423bffbaba5f2a36fe931d3db4e8e494efb552fdad3fdf9f94484e9a3615a16caebeaf8cb98109827675b new file mode 100644 index 00000000..a2c4f30a --- /dev/null +++ b/.pnpm-store/v11/files/22/f022306bc0a9b3e9a9ffa55411e462b021cc16b85423bffbaba5f2a36fe931d3db4e8e494efb552fdad3fdf9f94484e9a3615a16caebeaf8cb98109827675b @@ -0,0 +1,17 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +var arrayBufferTag = '[object ArrayBuffer]'; + +/** + * The base implementation of `_.isArrayBuffer` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. + */ +function baseIsArrayBuffer(value) { + return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; +} + +module.exports = baseIsArrayBuffer; diff --git a/.pnpm-store/v11/files/22/fd474f0fa15704547108a698debf6d4826719bad232963c995602c687655dc4ab2427e302ba41af7a57361f7260b4357802f898bb4b069a83bc24337a6d0a1 b/.pnpm-store/v11/files/22/fd474f0fa15704547108a698debf6d4826719bad232963c995602c687655dc4ab2427e302ba41af7a57361f7260b4357802f898bb4b069a83bc24337a6d0a1 new file mode 100644 index 00000000..ee2f219f --- /dev/null +++ b/.pnpm-store/v11/files/22/fd474f0fa15704547108a698debf6d4826719bad232963c995602c687655dc4ab2427e302ba41af7a57361f7260b4357802f898bb4b069a83bc24337a6d0a1 @@ -0,0 +1,19 @@ +{ + "name": "lodash", + "version": "4.18.1", + "description": "Lodash modular utilities.", + "keywords": "modules, stdlib, util", + "homepage": "https://lodash.com/", + "repository": "lodash/lodash", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "main": "lodash.js", + "author": "John-David Dalton ", + "contributors": [ + "John-David Dalton ", + "Mathias Bynens " + ], + "scripts": { + "test": "echo \"See https://travis-ci.org/lodash-archive/lodash-cli for testing details.\"" + } +} diff --git a/.pnpm-store/v11/files/23/034d8faed68f89ea1d22dfbda1922d5027058ca985bb0f2d407626ec130e3aa204c3c8495fb87855b10f8e6a4d4be50fa0e2a0506a0d1b5b8a3104404f1cf2-exec b/.pnpm-store/v11/files/23/034d8faed68f89ea1d22dfbda1922d5027058ca985bb0f2d407626ec130e3aa204c3c8495fb87855b10f8e6a4d4be50fa0e2a0506a0d1b5b8a3104404f1cf2-exec new file mode 100755 index 00000000..abcab881 --- /dev/null +++ b/.pnpm-store/v11/files/23/034d8faed68f89ea1d22dfbda1922d5027058ca985bb0f2d407626ec130e3aa204c3c8495fb87855b10f8e6a4d4be50fa0e2a0506a0d1b5b8a3104404f1cf2-exec @@ -0,0 +1,36 @@ + +# Suman Run Plugins + +### To contribute see CONTRIBUTING.md + +Use the plugins in this package by including @config.json file(s) in your project + +```json +// An example @config.json file + +{ + "@run": { + "plugin": { + "location": "npm", + "value": "suman-run-plugins/plugins/x" + } + } +} +``` + +## About + +Each plugin is versioned separately - as each plugin is published separately to NPM, like so: + +`@suman-run-plugins/x` + + +## As a whole + +You can import either: + +`suman-run-plugins/plugins/x` # will always be the latest version of all plugins, is bundled with suman + +or + +`@suman-run-plugins/x` # can be installed in package.json and versioned diff --git a/.pnpm-store/v11/files/23/078ddb333c7cad33221d7301a1c66c4876dbb27634106de60bef7d0c98ef5da3d45dcf8a3184e4fba6144f476d1575b3b49009c2d845d1f5822b50f3a39e76 b/.pnpm-store/v11/files/23/078ddb333c7cad33221d7301a1c66c4876dbb27634106de60bef7d0c98ef5da3d45dcf8a3184e4fba6144f476d1575b3b49009c2d845d1f5822b50f3a39e76 new file mode 100644 index 00000000..8b9ed66c --- /dev/null +++ b/.pnpm-store/v11/files/23/078ddb333c7cad33221d7301a1c66c4876dbb27634106de60bef7d0c98ef5da3d45dcf8a3184e4fba6144f476d1575b3b49009c2d845d1f5822b50f3a39e76 @@ -0,0 +1,36 @@ +var baseIsArguments = require('./_baseIsArguments'), + isObjectLike = require('./isObjectLike'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +module.exports = isArguments; diff --git a/.pnpm-store/v11/files/23/1213f658db6396f789f7ec84584de6d98f6cf0549724e924b2c7d3be5e84d21042200abf8a910be53300e2b1c63cba3a88f493565f816aa574f9e9331c3426 b/.pnpm-store/v11/files/23/1213f658db6396f789f7ec84584de6d98f6cf0549724e924b2c7d3be5e84d21042200abf8a910be53300e2b1c63cba3a88f493565f816aa574f9e9331c3426 new file mode 100644 index 00000000..b9b6ccbe --- /dev/null +++ b/.pnpm-store/v11/files/23/1213f658db6396f789f7ec84584de6d98f6cf0549724e924b2c7d3be5e84d21042200abf8a910be53300e2b1c63cba3a88f493565f816aa574f9e9331c3426 @@ -0,0 +1,87 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const assert = require("assert"); +const chalk = require("chalk"); +const suman_utils_1 = require("suman-utils"); +const includes = require('lodash.includes'); +const fnArgs = require('function-arguments'); +const _suman = global.__suman = (global.__suman || {}); +const ioc_static_injector_1 = require("../injection/ioc-static-injector"); +let iocPromise = null; +const SUMAN_DEBUG = process.env.SUMAN_DEBUG === 'yes'; +const thisVal = { + 'message': 'A message to you, Suman User! dont use "this" here, instead => http://sumanjs.org/patterns.' +}; +exports.acquireIocStaticDeps = function () { + if (iocPromise) { + return iocPromise; + } + let ret, iocFnArgs, getiocFnDeps, iocStaticFn = _suman.iocStaticFn; + try { + assert.equal(typeof iocStaticFn, 'function', ' must export a function.'); + iocFnArgs = fnArgs(iocStaticFn); + getiocFnDeps = ioc_static_injector_1.makeIocStaticInjector(); + ret = iocStaticFn.apply(null, getiocFnDeps(iocFnArgs)); + ret = ret.dependencies || ret.deps; + assert(suman_utils_1.default.isObject(ret), '`suman.ioc.static.js` must export a function which returns an object with a "dependencies" property.'); + } + catch (err) { + if (/Cannot find module/.test(String(err.message))) { + _suman.log.error(err.message); + } + else { + _suman.log.error(err.stack); + } + console.error(); + return iocPromise = Promise.resolve(_suman.$staticIoc = {}); + } + const promises = Object.keys(ret).map(function (key) { + let to; + return new Promise(function (resolve, reject) { + to = setTimeout(function () { + reject(`static dep acquisition (suman.static.ioc.js) timed out for key '${key}'`); + }, _suman.weAreDebugging ? 50000000 : 20000); + const fn = ret[key]; + if (typeof fn !== 'function') { + reject(new Error('Value in IOC object was not a function for corresponding key => ' + + '"' + key + '", actual value was => "' + util.inspect(fn) + '"')); + } + else if (fn.length > 1) { + reject(new Error(chalk.red(' => Suman usage error => functions take 0 or 1 arguments, ' + + 'with the optional single argument being a callback function.'))); + } + else if (fn.length > 0) { + let args = fnArgs(fn); + let str = fn.toString(); + let matches = str.match(new RegExp(args[0], 'g')) || []; + if (matches.length < 2) { + throw new Error('Callback in your function was not present => \n' + str); + } + fn.call(thisVal, function (err, val) { + err ? reject(err) : resolve(val); + }); + } + else { + Promise.resolve(fn.call(thisVal)).then(resolve, reject); + } + }) + .then(function (v) { + clearTimeout(to); + return v; + }); + }); + return iocPromise = Promise.all(promises).then(function (deps) { + let final = {}; + Object.keys(ret).forEach(function (key, index) { + final[key] = deps[index]; + }); + return _suman.$staticIoc = final; + }, function (err) { + _suman.log.error(err.stack || err); + _suman.log.error('despite the error, suman will continue optimistically.'); + return _suman.$staticIoc = {}; + }); +}; diff --git a/.pnpm-store/v11/files/23/3ab89002bdd2e8a342563f282f55629104ef037dc9993f83c579f689b917dcc3e49fdc1abdc25b2b4805040959293cd5e70abf846f7bda3271bfe90182093c b/.pnpm-store/v11/files/23/3ab89002bdd2e8a342563f282f55629104ef037dc9993f83c579f689b917dcc3e49fdc1abdc25b2b4805040959293cd5e70abf846f7bda3271bfe90182093c new file mode 100644 index 00000000..31461aae --- /dev/null +++ b/.pnpm-store/v11/files/23/3ab89002bdd2e8a342563f282f55629104ef037dc9993f83c579f689b917dcc3e49fdc1abdc25b2b4805040959293cd5e70abf846f7bda3271bfe90182093c @@ -0,0 +1,45 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.intersection` except that it accepts `iteratee` + * which is invoked for each element of each `arrays` to generate the criterion + * by which they're compared. The order and references of result values are + * determined by the first array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); + * // => [2.1] + * + * // The `_.property` iteratee shorthand. + * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }] + */ +var intersectionBy = baseRest(function(arrays) { + var iteratee = last(arrays), + mapped = arrayMap(arrays, castArrayLikeObject); + + if (iteratee === last(mapped)) { + iteratee = undefined; + } else { + mapped.pop(); + } + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped, baseIteratee(iteratee, 2)) + : []; +}); + +module.exports = intersectionBy; diff --git a/.pnpm-store/v11/files/23/3d78ad926fa09b243f93d86bfe2d32afe26a1fc1cb516f06a0522404c88c511f06361d0bdf28be8f2234c4cd23ccfccf860692794d1a446d9621d1738b5c3e b/.pnpm-store/v11/files/23/3d78ad926fa09b243f93d86bfe2d32afe26a1fc1cb516f06a0522404c88c511f06361d0bdf28be8f2234c4cd23ccfccf860692794d1a446d9621d1738b5c3e new file mode 100644 index 00000000..330088c1 --- /dev/null +++ b/.pnpm-store/v11/files/23/3d78ad926fa09b243f93d86bfe2d32afe26a1fc1cb516f06a0522404c88c511f06361d0bdf28be8f2234c4cd23ccfccf860692794d1a446d9621d1738b5c3e @@ -0,0 +1,30 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const os = require('os'); +const util = require("util"); +const _suman = global.__suman = (global.__suman || {}); +const sumanServer = require('./create-suman-server'); +exports.run = function (sumanServerInstalled, sumanConfig, serverName) { + if (!sumanServerInstalled) { + throw new Error(' => Suman server is not installed yet => Please use "$ suman --use-server" in your local project.'); + } + sumanServer({ + config: sumanConfig, + serverName: serverName || os.hostname() + }, function (err, val) { + if (err) { + console.error(err.stack || err); + process.nextTick(function () { + process.exit(1); + }); + } + else { + console.log('Suman server should be live at =>', util.inspect(val)); + process.nextTick(function () { + process.exit(0); + }); + } + }); +}; diff --git a/.pnpm-store/v11/files/23/438b19da36d92adef012e8599d60c45c7c63a8b86780f145c7f99ac31ce8708c8f1bd281fab08d1e76c2d28cb05dbd84e033e0b48fd82b9b7247ada46a4dd8 b/.pnpm-store/v11/files/23/438b19da36d92adef012e8599d60c45c7c63a8b86780f145c7f99ac31ce8708c8f1bd281fab08d1e76c2d28cb05dbd84e033e0b48fd82b9b7247ada46a4dd8 new file mode 100644 index 00000000..70c87d09 --- /dev/null +++ b/.pnpm-store/v11/files/23/438b19da36d92adef012e8599d60c45c7c63a8b86780f145c7f99ac31ce8708c8f1bd281fab08d1e76c2d28cb05dbd84e033e0b48fd82b9b7247ada46a4dd8 @@ -0,0 +1,29 @@ +var createWrap = require('./_createWrap'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_ARY_FLAG = 128; + +/** + * Creates a function that invokes `func`, with up to `n` arguments, + * ignoring any additional arguments. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to cap arguments for. + * @param {number} [n=func.length] The arity cap. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the new capped function. + * @example + * + * _.map(['6', '8', '10'], _.ary(parseInt, 1)); + * // => [6, 8, 10] + */ +function ary(func, n, guard) { + n = guard ? undefined : n; + n = (func && n == null) ? func.length : n; + return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); +} + +module.exports = ary; diff --git a/.pnpm-store/v11/files/23/5a999c1a71033d8bace762168479c59577566336b725cb04e1692bd9a0a9e221a26bec0acb5d8966d68c31d4c8a0e42438935ca32ce44393877c9d04295f91 b/.pnpm-store/v11/files/23/5a999c1a71033d8bace762168479c59577566336b725cb04e1692bd9a0a9e221a26bec0acb5d8966d68c31d4c8a0e42438935ca32ce44393877c9d04295f91 new file mode 100644 index 00000000..8da5126c --- /dev/null +++ b/.pnpm-store/v11/files/23/5a999c1a71033d8bace762168479c59577566336b725cb04e1692bd9a0a9e221a26bec0acb5d8966d68c31d4c8a0e42438935ca32ce44393877c9d04295f91 @@ -0,0 +1,41 @@ +var apply = require('./_apply'), + baseEach = require('./_baseEach'), + baseInvoke = require('./_baseInvoke'), + baseRest = require('./_baseRest'), + isArrayLike = require('./isArrayLike'); + +/** + * Invokes the method at `path` of each element in `collection`, returning + * an array of the results of each invoked method. Any additional arguments + * are provided to each invoked method. If `path` is a function, it's invoked + * for, and `this` bound to, each element in `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Array|Function|string} path The path of the method to invoke or + * the function invoked per iteration. + * @param {...*} [args] The arguments to invoke each method with. + * @returns {Array} Returns the array of results. + * @example + * + * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); + * // => [[1, 5, 7], [1, 2, 3]] + * + * _.invokeMap([123, 456], String.prototype.split, ''); + * // => [['1', '2', '3'], ['4', '5', '6']] + */ +var invokeMap = baseRest(function(collection, path, args) { + var index = -1, + isFunc = typeof path == 'function', + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value) { + result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); + }); + return result; +}); + +module.exports = invokeMap; diff --git a/.pnpm-store/v11/files/23/6677fa7257e8b77d1074c3729ad50731c73794b72602405b54acfc1389e815e3be3679a155129ef90bb53bea3d3978e0742c71ac3da5c9c53dd83cbe36395f b/.pnpm-store/v11/files/23/6677fa7257e8b77d1074c3729ad50731c73794b72602405b54acfc1389e815e3be3679a155129ef90bb53bea3d3978e0742c71ac3da5c9c53dd83cbe36395f new file mode 100644 index 00000000..5339ac09 --- /dev/null +++ b/.pnpm-store/v11/files/23/6677fa7257e8b77d1074c3729ad50731c73794b72602405b54acfc1389e815e3be3679a155129ef90bb53bea3d3978e0742c71ac3da5c9c53dd83cbe36395f @@ -0,0 +1,34 @@ +{ + "name": "wordwrap", + "description": "Wrap those words. Show them at what columns to start and stop.", + "version": "1.0.0", + "repository": { + "type": "git", + "url": "git://github.com/substack/node-wordwrap.git" + }, + "main": "./index.js", + "keywords": [ + "word", + "wrap", + "rule", + "format", + "column" + ], + "directories": { + "lib": ".", + "example": "example", + "test": "test" + }, + "scripts": { + "test": "expresso" + }, + "devDependencies": { + "tape": "^4.0.0" + }, + "license": "MIT", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + } +} diff --git a/.pnpm-store/v11/files/23/675ce778f01c38a84107e2978464711fc3292538f25aa56b4f332dca6b6a3894dcc032056f7882370b3a3e672fddc4442114cd55196a061cb7cd54ccd339a3 b/.pnpm-store/v11/files/23/675ce778f01c38a84107e2978464711fc3292538f25aa56b4f332dca6b6a3894dcc032056f7882370b3a3e672fddc4442114cd55196a061cb7cd54ccd339a3 new file mode 100644 index 00000000..f0c379f7 --- /dev/null +++ b/.pnpm-store/v11/files/23/675ce778f01c38a84107e2978464711fc3292538f25aa56b4f332dca6b6a3894dcc032056f7882370b3a3e672fddc4442114cd55196a061cb7cd54ccd339a3 @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = once; +function once(fn) { + return function () { + if (fn === null) return; + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/.pnpm-store/v11/files/23/694bb65626bd6a96cc7cb6b45b10872b43bfbbc6208cc1e129aa80c313440e6795db9c884f14fda7934d031393459d6e2db1f87b1d38a7e4e0103ce50ff850 b/.pnpm-store/v11/files/23/694bb65626bd6a96cc7cb6b45b10872b43bfbbc6208cc1e129aa80c313440e6795db9c884f14fda7934d031393459d6e2db1f87b1d38a7e4e0103ce50ff850 new file mode 100644 index 00000000..945f23cb --- /dev/null +++ b/.pnpm-store/v11/files/23/694bb65626bd6a96cc7cb6b45b10872b43bfbbc6208cc1e129aa80c313440e6795db9c884f14fda7934d031393459d6e2db1f87b1d38a7e4e0103ce50ff850 @@ -0,0 +1,33 @@ +var baseIteratee = require('./_baseIteratee'), + baseSortedIndexBy = require('./_baseSortedIndexBy'); + +/** + * This method is like `_.sortedIndex` except that it accepts `iteratee` + * which is invoked for `value` and each element of `array` to compute their + * sort ranking. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * var objects = [{ 'x': 4 }, { 'x': 5 }]; + * + * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); + * // => 0 + */ +function sortedIndexBy(array, value, iteratee) { + return baseSortedIndexBy(array, value, baseIteratee(iteratee, 2)); +} + +module.exports = sortedIndexBy; diff --git a/.pnpm-store/v11/files/23/6b62044d20ebf789c11a49c542c41f5cb2d68a98fc3b325c2939c561e4361f1fa6257f0c3fb582eed4d9d239bfe77a3de679a8ee636a5662a0a81118858ee5 b/.pnpm-store/v11/files/23/6b62044d20ebf789c11a49c542c41f5cb2d68a98fc3b325c2939c561e4361f1fa6257f0c3fb582eed4d9d239bfe77a3de679a8ee636a5662a0a81118858ee5 new file mode 100644 index 00000000..43533a97 --- /dev/null +++ b/.pnpm-store/v11/files/23/6b62044d20ebf789c11a49c542c41f5cb2d68a98fc3b325c2939c561e4361f1fa6257f0c3fb582eed4d9d239bfe77a3de679a8ee636a5662a0a81118858ee5 @@ -0,0 +1,37 @@ +{ + "name": "@oresoftware/json-stream-parser", + "version": "0.0.123", + "description": "Parse JSON streams into JS objects.", + "main": "dist/main.js", + "bin": { + "json_parser": "cli/json-parser.js" + }, + "types": "dist/main.d.ts", + "typings": "dist/main.d.ts", + "scripts": { + "test": "suman test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/json-parser.git" + }, + "keywords": [ + "typescript", + "library", + "skeleton", + "scaffold" + ], + "author": "Olegzandr von Denman", + "license": "SEE LICENSE IN license.md", + "bugs": { + "url": "https://github.com/ORESoftware/json-parser/issues" + }, + "homepage": "https://github.com/ORESoftware/json-parser#readme", + "dependencies": {}, + "devDependencies": { + "@types/node": "^12.6.8" + }, + "r2g": { + "test": "node .r2g/tests/smoke-test.1.js" + } +} diff --git a/.pnpm-store/v11/files/23/70991efd53221c187a36ffe156c40d91ab68d4124910078c2be6a069490217c4194061f2eeb1226d5ffa5966e5e51cd146229488536d0b4b14621d7eccce02 b/.pnpm-store/v11/files/23/70991efd53221c187a36ffe156c40d91ab68d4124910078c2be6a069490217c4194061f2eeb1226d5ffa5966e5e51cd146229488536d0b4b14621d7eccce02 new file mode 100644 index 00000000..7dbeb149 --- /dev/null +++ b/.pnpm-store/v11/files/23/70991efd53221c187a36ffe156c40d91ab68d4124910078c2be6a069490217c4194061f2eeb1226d5ffa5966e5e51cd146229488536d0b4b14621d7eccce02 @@ -0,0 +1,17 @@ +{ + "name": "async", + "main": "dist/async.js", + "ignore": [ + "bower_components", + "lib", + "mocha_test", + "node_modules", + "perf", + "support", + "**/.*", + "*.config.js", + "*.json", + "index.js", + "Makefile" + ] +} diff --git a/.pnpm-store/v11/files/23/8141f294ef218071100d5b9ef66efdf11b27dd36b5fc0bd0f82d2ead8e7ed598c904eb5956a50ef725670d0a241cb86ba9ea7553da5b83d5e26fa1c8c32d7d b/.pnpm-store/v11/files/23/8141f294ef218071100d5b9ef66efdf11b27dd36b5fc0bd0f82d2ead8e7ed598c904eb5956a50ef725670d0a241cb86ba9ea7553da5b83d5e26fa1c8c32d7d new file mode 100644 index 00000000..26e05d85 --- /dev/null +++ b/.pnpm-store/v11/files/23/8141f294ef218071100d5b9ef66efdf11b27dd36b5fc0bd0f82d2ead8e7ed598c904eb5956a50ef725670d0a241cb86ba9ea7553da5b83d5e26fa1c8c32d7d @@ -0,0 +1,29 @@ +{ + "name": "rimraf", + "version": "2.7.1", + "main": "rimraf.js", + "description": "A deep deletion module for node (like `rm -rf`)", + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC", + "repository": "git://github.com/isaacs/rimraf.git", + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --all; git push origin --tags", + "test": "tap test/*.js" + }, + "bin": "./bin.js", + "dependencies": { + "glob": "^7.1.3" + }, + "files": [ + "LICENSE", + "README.md", + "bin.js", + "rimraf.js" + ], + "devDependencies": { + "mkdirp": "^0.5.1", + "tap": "^12.1.1" + } +} diff --git a/.pnpm-store/v11/files/23/8bbb2c7301e1cc8956c05e8cc7d2c7de26479aff1a0d8247150199455d9ddf3fc76d48ef16140fe0901e27a6c4e200c1e70f20251cb3ed4c95a4364e6ca4e1 b/.pnpm-store/v11/files/23/8bbb2c7301e1cc8956c05e8cc7d2c7de26479aff1a0d8247150199455d9ddf3fc76d48ef16140fe0901e27a6c4e200c1e70f20251cb3ed4c95a4364e6ca4e1 new file mode 100644 index 00000000..55807a76 --- /dev/null +++ b/.pnpm-store/v11/files/23/8bbb2c7301e1cc8956c05e8cc7d2c7de26479aff1a0d8247150199455d9ddf3fc76d48ef16140fe0901e27a6c4e200c1e70f20251cb3ed4c95a4364e6ca4e1 @@ -0,0 +1,46 @@ +{ + "name": "make-beep", + "version": "0.0.1", + "description": "Make beep on error, based on native OS", + "homepage": "yashprit.github.com", + "bugs": { + "url": "yashprit/make-beep/issues" + }, + "author": { + "url": "yashprit.github.io", + "name": "Yashprit", + "email": "yashprit@gmail.com" + }, + "repository": { + "type": "git", + "url": "yashprit/make-beep" + }, + "license": "MIT", + "files": [ + "index.js", + "cli.js" + ], + "keywords": [ + "make-beep", + "beep", + "cli", + "command-line", + "error", + "npm", + "node", + "os-beep", + "make-beep" + ], + "dependencies": { + "minimist": "^1.1.1" + }, + "devDependencies": { + "mocha": "*" + }, + "scripts": { + "test": "mocha" + }, + "bin": { + "makeBeep": "cli.js" + } +} diff --git a/.pnpm-store/v11/files/23/9fc7ab03c1452c442e68e31e4498cdcc4830841e80befaab929b0d696a8dffc7cd1102efd481cf42782748008b27fa17799618e7e1d2f174776863a70903b7 b/.pnpm-store/v11/files/23/9fc7ab03c1452c442e68e31e4498cdcc4830841e80befaab929b0d696a8dffc7cd1102efd481cf42782748008b27fa17799618e7e1d2f174776863a70903b7 new file mode 100644 index 00000000..a24a2af4 --- /dev/null +++ b/.pnpm-store/v11/files/23/9fc7ab03c1452c442e68e31e4498cdcc4830841e80befaab929b0d696a8dffc7cd1102efd481cf42782748008b27fa17799618e7e1d2f174776863a70903b7 @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.pnpm-store/v11/files/23/ae8be9537fe068c011f44707cf816890ce231d2fdeca6a3ef3a2034318625a74998e5956b47eea628a294c9aae34c0d0f509b9de056d8430ba5e6ebe9a346c b/.pnpm-store/v11/files/23/ae8be9537fe068c011f44707cf816890ce231d2fdeca6a3ef3a2034318625a74998e5956b47eea628a294c9aae34c0d0f509b9de056d8430ba5e6ebe9a346c new file mode 100644 index 00000000..b82950a6 --- /dev/null +++ b/.pnpm-store/v11/files/23/ae8be9537fe068c011f44707cf816890ce231d2fdeca6a3ef3a2034318625a74998e5956b47eea628a294c9aae34c0d0f509b9de056d8430ba5e6ebe9a346c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('takeRight', require('../takeRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/23/ccec389d26b3cc58f64500a13449a63b83072db8ec132b44cede8ef1ec5f7d42cd2bfff9f124edd0164efbe96a70efc44e37047e410cb206fc46ee43985d78 b/.pnpm-store/v11/files/23/ccec389d26b3cc58f64500a13449a63b83072db8ec132b44cede8ef1ec5f7d42cd2bfff9f124edd0164efbe96a70efc44e37047e410cb206fc46ee43985d78 new file mode 100644 index 00000000..e56582ad --- /dev/null +++ b/.pnpm-store/v11/files/23/ccec389d26b3cc58f64500a13449a63b83072db8ec132b44cede8ef1ec5f7d42cd2bfff9f124edd0164efbe96a70efc44e37047e410cb206fc46ee43985d78 @@ -0,0 +1,22 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'), + matchesStrictComparable = require('./_matchesStrictComparable'); + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +module.exports = baseMatches; diff --git a/.pnpm-store/v11/files/23/ceefda37f695dfb47a1d70fb45a9f8d18cb5ff45a7c7b6ce70f85015d05fae9b5cc41becbfcdaf442ada370cb90faa5497023856eb2286052e159056c30935 b/.pnpm-store/v11/files/23/ceefda37f695dfb47a1d70fb45a9f8d18cb5ff45a7c7b6ce70f85015d05fae9b5cc41becbfcdaf442ada370cb90faa5497023856eb2286052e159056c30935 new file mode 100644 index 00000000..b3a48904 --- /dev/null +++ b/.pnpm-store/v11/files/23/ceefda37f695dfb47a1d70fb45a9f8d18cb5ff45a7c7b6ce70f85015d05fae9b5cc41becbfcdaf442ada370cb90faa5497023856eb2286052e159056c30935 @@ -0,0 +1,33 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const chalk = require("chalk"); +const su = require("suman-utils"); +const _suman = global.__suman = (global.__suman || {}); +const suman_constants_1 = require("../config/suman-constants"); +exports.noFilesFoundError = function (dirs) { + console.log('\n'); + _suman.log.info(chalk.magenta.bold('No test files were found in the directories provided, ' + + 'given the following regular expressions => '), '\n\n', chalk.magenta([ + { + matchAny: _suman.sumanMatchesAny + }, + { + matchNone: _suman.sumanMatchesNone + }, + { + matchAll: _suman.sumanMatchesAll + } + ].map(item => su.padWithXSpaces(4) + util.inspect(item)).join('\n\n'))); + console.log('\n\n', chalk.gray.underline.bold('=> Suman searched the following dirs for test files that matched the above regex(es) =>') + '\n', dirs.map(d => '\t' + chalk.cyan.bold(' => "' + String(d) + '"')).join('\n'), '\n\n'); + console.log('\n', chalk.black.bold('=> No test files found. In this case, the default is to exit with code 34. ')); + console.log(chalk.black.bold(' => To allow Suman tests to "pass" even in this event, use the ' + + chalk.magenta('"--exit-with-code-zero-if-no-test-files-matched"') + ' option, which is probably a bad idea.'), '\n'); + if (_suman.sumanOpts.recursive !== true) { + console.log(chalk.yellow.bold(' => (note that the ' + chalk.magenta('"--recursive"') + ' option is not flagged to true => ' + + 'perhaps you intended to use this option to capture more tests?) ')); + } + process.exit(suman_constants_1.constants.RUNNER_EXIT_CODES.NO_TEST_FILES_MATCHED_OR_FOUND); +}; diff --git a/.pnpm-store/v11/files/23/dc77068a84a41e7aaf97660d229b7fcc3e332cf003221d8d03ad79744b4c6741cc4483008100d8ede48e184f1426b948f417c84e5b8f1075b65e87e45b19b9 b/.pnpm-store/v11/files/23/dc77068a84a41e7aaf97660d229b7fcc3e332cf003221d8d03ad79744b4c6741cc4483008100d8ede48e184f1426b948f417c84e5b8f1075b65e87e45b19b9 new file mode 100644 index 00000000..2693d251 --- /dev/null +++ b/.pnpm-store/v11/files/23/dc77068a84a41e7aaf97660d229b7fcc3e332cf003221d8d03ad79744b4c6741cc4483008100d8ede48e184f1426b948f417c84e5b8f1075b65e87e45b19b9 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').find; diff --git a/.pnpm-store/v11/files/23/ded9e5f21f02e86033a645297218a6d16aa42a4ca29a8d5fd2d9ca997e4e520cbb017d09d942ef7f12afc07fd050354829c8618d623fdbfcf020451056bf3f-exec b/.pnpm-store/v11/files/23/ded9e5f21f02e86033a645297218a6d16aa42a4ca29a8d5fd2d9ca997e4e520cbb017d09d942ef7f12afc07fd050354829c8618d623fdbfcf020451056bf3f-exec new file mode 100755 index 00000000..fa05f2ba --- /dev/null +++ b/.pnpm-store/v11/files/23/ded9e5f21f02e86033a645297218a6d16aa42a4ca29a8d5fd2d9ca997e4e520cbb017d09d942ef7f12afc07fd050354829c8618d623fdbfcf020451056bf3f-exec @@ -0,0 +1,97 @@ +declare module "dgram" { + import { AddressInfo } from "net"; + import * as dns from "dns"; + import * as events from "events"; + + interface RemoteInfo { + address: string; + family: string; + port: number; + } + + interface BindOptions { + port: number; + address?: string; + exclusive?: boolean; + } + + type SocketType = "udp4" | "udp6"; + + interface SocketOptions { + type: SocketType; + reuseAddr?: boolean; + recvBufferSize?: number; + sendBufferSize?: number; + lookup?: (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void; + } + + function createSocket(type: SocketType, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + function createSocket(options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void): Socket; + + class Socket extends events.EventEmitter { + send(msg: Buffer | string | Uint8Array | ReadonlyArray, port: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; + send(msg: Buffer | string | Uint8Array, offset: number, length: number, port: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void; + bind(port?: number, address?: string, callback?: () => void): void; + bind(port?: number, callback?: () => void): void; + bind(callback?: () => void): void; + bind(options: BindOptions, callback?: Function): void; + close(callback?: () => void): void; + address(): AddressInfo | string; + setBroadcast(flag: boolean): void; + setTTL(ttl: number): void; + setMulticastTTL(ttl: number): void; + setMulticastInterface(multicastInterface: string): void; + setMulticastLoopback(flag: boolean): void; + addMembership(multicastAddress: string, multicastInterface?: string): void; + dropMembership(multicastAddress: string, multicastInterface?: string): void; + ref(): this; + unref(): this; + setRecvBufferSize(size: number): void; + setSendBufferSize(size: number): void; + getRecvBufferSize(): number; + getSendBufferSize(): number; + + /** + * events.EventEmitter + * 1. close + * 2. error + * 3. listening + * 4. message + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + addListener(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + emit(event: "message", msg: Buffer, rinfo: AddressInfo): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + on(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + once(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + prependListener(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + prependOnceListener(event: "message", listener: (msg: Buffer, rinfo: AddressInfo) => void): this; + } +} diff --git a/.pnpm-store/v11/files/23/e676ea671b76b667127a3b1fce7d4c4ea1234d4e2e324a349c8fd3f6e8e68c2451331db57ae428e43d428b00d52101ad5b61d232194c617ff901823e241418 b/.pnpm-store/v11/files/23/e676ea671b76b667127a3b1fce7d4c4ea1234d4e2e324a349c8fd3f6e8e68c2451331db57ae428e43d428b00d52101ad5b61d232194c617ff901823e241418 new file mode 100644 index 00000000..7349136f --- /dev/null +++ b/.pnpm-store/v11/files/23/e676ea671b76b667127a3b1fce7d4c4ea1234d4e2e324a349c8fd3f6e8e68c2451331db57ae428e43d428b00d52101ad5b61d232194c617ff901823e241418 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Charlike Mike Reagent <@tunnckoCore> (http://www.tunnckocore.tk) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/23/f3d37617b39fbedfe0979c46e2789e19dcdad7ab2f5c03b5f58244be7e91778fe5a330b5ec04918b9df169ad9aba1b885dab0c9958e92a0f4d7ccd22e5f4d4 b/.pnpm-store/v11/files/23/f3d37617b39fbedfe0979c46e2789e19dcdad7ab2f5c03b5f58244be7e91778fe5a330b5ec04918b9df169ad9aba1b885dab0c9958e92a0f4d7ccd22e5f4d4 new file mode 100644 index 00000000..72c2f798 --- /dev/null +++ b/.pnpm-store/v11/files/23/f3d37617b39fbedfe0979c46e2789e19dcdad7ab2f5c03b5f58244be7e91778fe5a330b5ec04918b9df169ad9aba1b885dab0c9958e92a0f4d7ccd22e5f4d4 @@ -0,0 +1,10 @@ +import { IHandleBlocking } from "suman-types/dts/runner"; +export interface IArrayOfValsObject { + testPath: string; + obstructs: Array; +} +export interface IArrayOfVals { + key: string; + value: IArrayOfValsObject; +} +export default function (order: Object): IHandleBlocking; diff --git a/.pnpm-store/v11/files/23/f7415a74dd1dde13414dd0c4b2b78d93f15d82176bddea70d337bb35c0ea15309c7fcab4986d218493e0784fbd98152a8d8ead0caaa014b8a3e094208eeac7 b/.pnpm-store/v11/files/23/f7415a74dd1dde13414dd0c4b2b78d93f15d82176bddea70d337bb35c0ea15309c7fcab4986d218493e0784fbd98152a8d8ead0caaa014b8a3e094208eeac7 new file mode 100644 index 00000000..c74df044 --- /dev/null +++ b/.pnpm-store/v11/files/23/f7415a74dd1dde13414dd0c4b2b78d93f15d82176bddea70d337bb35c0ea15309c7fcab4986d218493e0784fbd98152a8d8ead0caaa014b8a3e094208eeac7 @@ -0,0 +1,64 @@ +var baseRest = require('./_baseRest'), + eq = require('./eq'), + isIterateeCall = require('./_isIterateeCall'), + keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ +var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; +}); + +module.exports = defaults; diff --git a/.pnpm-store/v11/files/23/fff9e4159171099fcaf719e3cca9a4e80536aee8a653f6649de8a04e33ffd39ae4459336617e5ed35d1d0f63378097947ac389d12bf342862aa640817a2c15 b/.pnpm-store/v11/files/23/fff9e4159171099fcaf719e3cca9a4e80536aee8a653f6649de8a04e33ffd39ae4459336617e5ed35d1d0f63378097947ac389d12bf342862aa640817a2c15 new file mode 100644 index 00000000..24e7db0c --- /dev/null +++ b/.pnpm-store/v11/files/23/fff9e4159171099fcaf719e3cca9a4e80536aee8a653f6649de8a04e33ffd39ae4459336617e5ed35d1d0f63378097947ac389d12bf342862aa640817a2c15 @@ -0,0 +1,94 @@ +'use strict'; +var token = '%[a-f0-9]{2}'; +var singleMatcher = new RegExp('(' + token + ')|([^%]+?)', 'gi'); +var multiMatcher = new RegExp('(' + token + ')+', 'gi'); + +function decodeComponents(components, split) { + try { + // Try to decode the entire string first + return [decodeURIComponent(components.join(''))]; + } catch (err) { + // Do nothing + } + + if (components.length === 1) { + return components; + } + + split = split || 1; + + // Split the array in 2 parts + var left = components.slice(0, split); + var right = components.slice(split); + + return Array.prototype.concat.call([], decodeComponents(left), decodeComponents(right)); +} + +function decode(input) { + try { + return decodeURIComponent(input); + } catch (err) { + var tokens = input.match(singleMatcher) || []; + + for (var i = 1; i < tokens.length; i++) { + input = decodeComponents(tokens, i).join(''); + + tokens = input.match(singleMatcher) || []; + } + + return input; + } +} + +function customDecodeURIComponent(input) { + // Keep track of all the replacements and prefill the map with the `BOM` + var replaceMap = { + '%FE%FF': '\uFFFD\uFFFD', + '%FF%FE': '\uFFFD\uFFFD' + }; + + var match = multiMatcher.exec(input); + while (match) { + try { + // Decode as big chunks as possible + replaceMap[match[0]] = decodeURIComponent(match[0]); + } catch (err) { + var result = decode(match[0]); + + if (result !== match[0]) { + replaceMap[match[0]] = result; + } + } + + match = multiMatcher.exec(input); + } + + // Add `%C2` at the end of the map to make sure it does not replace the combinator before everything else + replaceMap['%C2'] = '\uFFFD'; + + var entries = Object.keys(replaceMap); + + for (var i = 0; i < entries.length; i++) { + // Replace all decoded components + var key = entries[i]; + input = input.replace(new RegExp(key, 'g'), replaceMap[key]); + } + + return input; +} + +module.exports = function (encodedURI) { + if (typeof encodedURI !== 'string') { + throw new TypeError('Expected `encodedURI` to be of type `string`, got `' + typeof encodedURI + '`'); + } + + try { + encodedURI = encodedURI.replace(/\+/g, ' '); + + // Try the built in decoder first + return decodeURIComponent(encodedURI); + } catch (err) { + // Fallback to a more advanced decoder + return customDecodeURIComponent(encodedURI); + } +}; diff --git a/.pnpm-store/v11/files/24/06b0c72667f5e483839ea848c5ae2997ab679b71077c71c8477a28502dda6d9c44239ca65486564d8807268e0fbc21ef1ce32824ba8cddeae36bff5f1f961d b/.pnpm-store/v11/files/24/06b0c72667f5e483839ea848c5ae2997ab679b71077c71c8477a28502dda6d9c44239ca65486564d8807268e0fbc21ef1ce32824ba8cddeae36bff5f1f961d new file mode 100644 index 00000000..429c2182 --- /dev/null +++ b/.pnpm-store/v11/files/24/06b0c72667f5e483839ea848c5ae2997ab679b71077c71c8477a28502dda6d9c44239ca65486564d8807268e0fbc21ef1ce32824ba8cddeae36bff5f1f961d @@ -0,0 +1,77 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// + +interface AsyncGenerator extends AsyncIteratorObject { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...[value]: [] | [TNext]): Promise>; + return(value: TReturn | PromiseLike): Promise>; + throw(e: any): Promise>; + [Symbol.asyncIterator](): AsyncGenerator; +} + +interface AsyncGeneratorFunction { + /** + * Creates a new AsyncGenerator object. + * @param args A list of arguments the function accepts. + */ + new (...args: any[]): AsyncGenerator; + /** + * Creates a new AsyncGenerator object. + * @param args A list of arguments the function accepts. + */ + (...args: any[]): AsyncGenerator; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: AsyncGenerator; +} + +interface AsyncGeneratorFunctionConstructor { + /** + * Creates a new AsyncGenerator function. + * @param args A list of arguments the function accepts. + */ + new (...args: string[]): AsyncGeneratorFunction; + /** + * Creates a new AsyncGenerator function. + * @param args A list of arguments the function accepts. + */ + (...args: string[]): AsyncGeneratorFunction; + /** + * The length of the arguments. + */ + readonly length: number; + /** + * Returns the name of the function. + */ + readonly name: string; + /** + * A reference to the prototype. + */ + readonly prototype: AsyncGeneratorFunction; +} diff --git a/.pnpm-store/v11/files/24/16c9db372da7057f09de00ef3365e316a79a5be365b746d8b9a569c39c826b45177c815f909ae580e06b92afb40dbdab8c2db5eb6eeee06e466ef0bc3e43a4 b/.pnpm-store/v11/files/24/16c9db372da7057f09de00ef3365e316a79a5be365b746d8b9a569c39c826b45177c815f909ae580e06b92afb40dbdab8c2db5eb6eeee06e466ef0bc3e43a4 new file mode 100644 index 00000000..b0252e8e --- /dev/null +++ b/.pnpm-store/v11/files/24/16c9db372da7057f09de00ef3365e316a79a5be365b746d8b9a569c39c826b45177c815f909ae580e06b92afb40dbdab8c2db5eb6eeee06e466ef0bc3e43a4 @@ -0,0 +1,82 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var process = require('suman-browser-polyfills/modules/process'); +var global = require('suman-browser-polyfills/modules/global'); +var util = require("util"); +var path = require("path"); +var cp = require("child_process"); +var fs = require("fs"); +var async = require("async"); +var su = require("suman-utils"); +var logging_1 = require("./logging"); +var cleanStdio = function (stdio) { + return String(stdio).trim().split('\n').map(function (l) { return String(l).trim(); }).filter(function (i) { return i; }).join('\n'); +}; +exports.makeTranspileAll = function (watchOpts, projectRoot) { + return function (transformPaths, cb) { + var sumanConfig = require(path.resolve(projectRoot + '/suman.conf.js')); + var filtered = transformPaths.filter(function (t) { + return t.bashFilePath; + }); + async.mapLimit(filtered, 4, function (t, cb) { + su.findApplicablePathsGivenTransform(sumanConfig, t.basePath, function (err, results) { + if (err) { + return cb(err); + } + su.makePathExecutable(t.bashFilePath, function (err) { + if (err) { + return cb(err); + } + console.log('tttt', util.inspect(t)); + var uniqueResults = results.filter(function (r, i) { + return results.indexOf(r) === i; + }); + var k = cp.spawn('bash', [], { + detached: false, + cwd: projectRoot || process.cwd(), + env: Object.assign({}, process.env, { + SUMAN_TEST_PATHS: JSON.stringify(uniqueResults), + SUMAN_TRANSFORM_ALL_SOURCES: 'yes' + }) + }); + fs.createReadStream(t.bashFilePath).pipe(k.stdin); + var timedout = false; + var onTimeout = function () { + timedout = true; + k.kill('SIGINT'); + cb(new Error("transform all process timed out for the @transform.sh file at path \"" + t + "\"."), { + path: t, + stdout: cleanStdio(stdout), + stderr: cleanStdio(stderr) + }); + }; + var to = setTimeout(onTimeout, 300000); + k.once('error', function (e) { + logging_1.log.error("spawn error for path => \"" + t + "\" =>\n" + (e.stack || e)); + }); + var stdout = ''; + k.stdout.setEncoding('utf8'); + k.stdout.on('data', function (d) { + stdout += d; + }); + var stderr = ''; + k.stderr.setEncoding('utf8'); + k.stderr.on('data', function (d) { + stderr += d; + }); + k.once('exit', function (code) { + clearTimeout(to); + if (!timedout) { + cb(null, { + path: t, + code: code, + stdout: cleanStdio(stdout), + stderr: cleanStdio(stderr) + }); + } + }); + }); + }); + }, cb); + }; +}; diff --git a/.pnpm-store/v11/files/24/26271f0dc71824d2d5c59adb5ef812f48925444aa72604bed614faee8fa40453906b773aa6b87c593e3a4f2ae63deeb23cb75a95ae3d18546cf5b1416e4e0a b/.pnpm-store/v11/files/24/26271f0dc71824d2d5c59adb5ef812f48925444aa72604bed614faee8fa40453906b773aa6b87c593e3a4f2ae63deeb23cb75a95ae3d18546cf5b1416e4e0a new file mode 100644 index 00000000..7f06d19c --- /dev/null +++ b/.pnpm-store/v11/files/24/26271f0dc71824d2d5c59adb5ef812f48925444aa72604bed614faee8fa40453906b773aa6b87c593e3a4f2ae63deeb23cb75a95ae3d18546cf5b1416e4e0a @@ -0,0 +1,186 @@ +/* eslint-disable new-cap */ +'use strict'; + +exports.__esModule = true; +exports.print = print; +exports.PrintVisitor = PrintVisitor; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _visitor = require('./visitor'); + +var _visitor2 = _interopRequireDefault(_visitor); + +function print(ast) { + return new PrintVisitor().accept(ast); +} + +function PrintVisitor() { + this.padding = 0; +} + +PrintVisitor.prototype = new _visitor2['default'](); + +PrintVisitor.prototype.pad = function (string) { + var out = ''; + + for (var i = 0, l = this.padding; i < l; i++) { + out += ' '; + } + + out += string + '\n'; + return out; +}; + +PrintVisitor.prototype.Program = function (program) { + var out = '', + body = program.body, + i = undefined, + l = undefined; + + if (program.blockParams) { + var blockParams = 'BLOCK PARAMS: ['; + for (i = 0, l = program.blockParams.length; i < l; i++) { + blockParams += ' ' + program.blockParams[i]; + } + blockParams += ' ]'; + out += this.pad(blockParams); + } + + for (i = 0, l = body.length; i < l; i++) { + out += this.accept(body[i]); + } + + this.padding--; + + return out; +}; + +PrintVisitor.prototype.MustacheStatement = function (mustache) { + return this.pad('{{ ' + this.SubExpression(mustache) + ' }}'); +}; +PrintVisitor.prototype.Decorator = function (mustache) { + return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}'); +}; + +PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) { + var out = ''; + + out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'); + this.padding++; + out += this.pad(this.SubExpression(block)); + if (block.program) { + out += this.pad('PROGRAM:'); + this.padding++; + out += this.accept(block.program); + this.padding--; + } + if (block.inverse) { + if (block.program) { + this.padding++; + } + out += this.pad('{{^}}'); + this.padding++; + out += this.accept(block.inverse); + this.padding--; + if (block.program) { + this.padding--; + } + } + this.padding--; + + return out; +}; + +PrintVisitor.prototype.PartialStatement = function (partial) { + var content = 'PARTIAL:' + partial.name.original; + if (partial.params[0]) { + content += ' ' + this.accept(partial.params[0]); + } + if (partial.hash) { + content += ' ' + this.accept(partial.hash); + } + return this.pad('{{> ' + content + ' }}'); +}; +PrintVisitor.prototype.PartialBlockStatement = function (partial) { + var content = 'PARTIAL BLOCK:' + partial.name.original; + if (partial.params[0]) { + content += ' ' + this.accept(partial.params[0]); + } + if (partial.hash) { + content += ' ' + this.accept(partial.hash); + } + + content += ' ' + this.pad('PROGRAM:'); + this.padding++; + content += this.accept(partial.program); + this.padding--; + + return this.pad('{{> ' + content + ' }}'); +}; + +PrintVisitor.prototype.ContentStatement = function (content) { + return this.pad("CONTENT[ '" + content.value + "' ]"); +}; + +PrintVisitor.prototype.CommentStatement = function (comment) { + return this.pad("{{! '" + comment.value + "' }}"); +}; + +PrintVisitor.prototype.SubExpression = function (sexpr) { + var params = sexpr.params, + paramStrings = [], + hash = undefined; + + for (var i = 0, l = params.length; i < l; i++) { + paramStrings.push(this.accept(params[i])); + } + + params = '[' + paramStrings.join(', ') + ']'; + + hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : ''; + + return this.accept(sexpr.path) + ' ' + params + hash; +}; + +PrintVisitor.prototype.PathExpression = function (id) { + var path = id.parts.join('/'); + return (id.data ? '@' : '') + 'PATH:' + path; +}; + +PrintVisitor.prototype.StringLiteral = function (string) { + return '"' + string.value + '"'; +}; + +PrintVisitor.prototype.NumberLiteral = function (number) { + return 'NUMBER{' + number.value + '}'; +}; + +PrintVisitor.prototype.BooleanLiteral = function (bool) { + return 'BOOLEAN{' + bool.value + '}'; +}; + +PrintVisitor.prototype.UndefinedLiteral = function () { + return 'UNDEFINED'; +}; + +PrintVisitor.prototype.NullLiteral = function () { + return 'NULL'; +}; + +PrintVisitor.prototype.Hash = function (hash) { + var pairs = hash.pairs, + joinedPairs = []; + + for (var i = 0, l = pairs.length; i < l; i++) { + joinedPairs.push(this.accept(pairs[i])); + } + + return 'HASH{' + joinedPairs.join(', ') + '}'; +}; +PrintVisitor.prototype.HashPair = function (pair) { + return pair.key + '=' + this.accept(pair.value); +}; +/* eslint-enable new-cap */ +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozt1QkFDb0IsV0FBVzs7OztBQUV4QixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDekIsU0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2Qzs7QUFFTSxTQUFTLFlBQVksR0FBRztBQUM3QixNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNsQjs7QUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRXZDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVMsTUFBTSxFQUFFO0FBQzVDLE1BQUksR0FBRyxHQUFHLEVBQUUsQ0FBQzs7QUFFYixPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLE9BQUcsSUFBSSxJQUFJLENBQUM7R0FDYjs7QUFFRCxLQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDakQsTUFBSSxHQUFHLEdBQUcsRUFBRTtNQUNWLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtNQUNuQixDQUFDLFlBQUE7TUFDRCxDQUFDLFlBQUEsQ0FBQzs7QUFFSixNQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDdkIsUUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsU0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RELGlCQUFXLElBQUksR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0M7QUFDRCxlQUFXLElBQUksSUFBSSxDQUFDO0FBQ3BCLE9BQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0dBQzlCOztBQUVELE9BQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLE9BQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQzdCOztBQUVELE1BQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7QUFFZixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxVQUFTLFFBQVEsRUFBRTtBQUM1RCxTQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7Q0FDL0QsQ0FBQztBQUNGLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFVBQVMsUUFBUSxFQUFFO0FBQ3BELFNBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztDQUN6RSxDQUFDOztBQUVGLFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQzlFLEtBQUssRUFDTDtBQUNBLE1BQUksR0FBRyxHQUFHLEVBQUUsQ0FBQzs7QUFFYixLQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FDYixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQSxHQUFJLFFBQVEsQ0FDakUsQ0FBQztBQUNGLE1BQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNmLEtBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMzQyxNQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDakIsT0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUIsUUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2YsT0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztHQUNoQjtBQUNELE1BQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUNqQixRQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDakIsVUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2hCO0FBQ0QsT0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekIsUUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2YsT0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xDLFFBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNmLFFBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtBQUNqQixVQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDaEI7R0FDRjtBQUNELE1BQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7QUFFZixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUMxRCxNQUFJLE9BQU8sR0FBRyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDakQsTUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLFdBQU8sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDakQ7QUFDRCxNQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsV0FBTyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM1QztBQUNELFNBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDO0NBQzNDLENBQUM7QUFDRixZQUFZLENBQUMsU0FBUyxDQUFDLHFCQUFxQixHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQy9ELE1BQUksT0FBTyxHQUFHLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3ZELE1BQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNyQixXQUFPLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ2pEO0FBQ0QsTUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLFdBQU8sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUM7O0FBRUQsU0FBTyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3RDLE1BQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNmLFNBQU8sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxNQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7O0FBRWYsU0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUM7Q0FDM0MsQ0FBQzs7QUFFRixZQUFZLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQzFELFNBQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztDQUN2RCxDQUFDOztBQUVGLFlBQVksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDMUQsU0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0NBQ25ELENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBUyxLQUFLLEVBQUU7QUFDckQsTUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07TUFDdkIsWUFBWSxHQUFHLEVBQUU7TUFDakIsSUFBSSxZQUFBLENBQUM7O0FBRVAsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxnQkFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7R0FDM0M7O0FBRUQsUUFBTSxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7QUFFN0MsTUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUFFdkQsU0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQztDQUN0RCxDQUFDOztBQUVGLFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVMsRUFBRSxFQUFFO0FBQ25ELE1BQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFNBQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0NBQzlDLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsVUFBUyxNQUFNLEVBQUU7QUFDdEQsU0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7Q0FDakMsQ0FBQzs7QUFFRixZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxVQUFTLE1BQU0sRUFBRTtBQUN0RCxTQUFPLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztDQUN2QyxDQUFDOztBQUVGLFlBQVksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQ3JELFNBQU8sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0NBQ3RDLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FBRyxZQUFXO0FBQ25ELFNBQU8sV0FBVyxDQUFDO0NBQ3BCLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsWUFBVztBQUM5QyxTQUFPLE1BQU0sQ0FBQztDQUNmLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0MsTUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7TUFDcEIsV0FBVyxHQUFHLEVBQUUsQ0FBQzs7QUFFbkIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxlQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUN6Qzs7QUFFRCxTQUFPLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMvQyxDQUFDO0FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDL0MsU0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNqRCxDQUFDIiwiZmlsZSI6InByaW50ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiBuZXcgUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcmludFZpc2l0b3IoKSB7XG4gIHRoaXMucGFkZGluZyA9IDA7XG59XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnBhZGRpbmc7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gJyAgJztcbiAgfVxuXG4gIG91dCArPSBzdHJpbmcgKyAnXFxuJztcbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgbGV0IG91dCA9ICcnLFxuICAgIGJvZHkgPSBwcm9ncmFtLmJvZHksXG4gICAgaSxcbiAgICBsO1xuXG4gIGlmIChwcm9ncmFtLmJsb2NrUGFyYW1zKSB7XG4gICAgbGV0IGJsb2NrUGFyYW1zID0gJ0JMT0NLIFBBUkFNUzogWyc7XG4gICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBibG9ja1BhcmFtcyArPSAnICcgKyBwcm9ncmFtLmJsb2NrUGFyYW1zW2ldO1xuICAgIH1cbiAgICBibG9ja1BhcmFtcyArPSAnIF0nO1xuICAgIG91dCArPSB0aGlzLnBhZChibG9ja1BhcmFtcyk7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gIH1cblxuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gdGhpcy5wYWQoJ3t7IERJUkVDVElWRSAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPSBQcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvckJsb2NrID0gZnVuY3Rpb24oXG4gIGJsb2NrXG4pIHtcbiAgbGV0IG91dCA9ICcnO1xuXG4gIG91dCArPSB0aGlzLnBhZChcbiAgICAoYmxvY2sudHlwZSA9PT0gJ0RlY29yYXRvckJsb2NrJyA/ICdESVJFQ1RJVkUgJyA6ICcnKSArICdCTE9DSzonXG4gICk7XG4gIHRoaXMucGFkZGluZysrO1xuICBvdXQgKz0gdGhpcy5wYWQodGhpcy5TdWJFeHByZXNzaW9uKGJsb2NrKSk7XG4gIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgb3V0ICs9IHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgfVxuICBpZiAoYmxvY2suaW52ZXJzZSkge1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgICB0aGlzLnBhZGRpbmcrKztcbiAgICB9XG4gICAgb3V0ICs9IHRoaXMucGFkKCd7e159fScpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgICBpZiAoYmxvY2sucHJvZ3JhbSkge1xuICAgICAgdGhpcy5wYWRkaW5nLS07XG4gICAgfVxuICB9XG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gIGxldCBjb250ZW50ID0gJ1BBUlRJQUw6JyArIHBhcnRpYWwubmFtZS5vcmlnaW5hbDtcbiAgaWYgKHBhcnRpYWwucGFyYW1zWzBdKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLnBhcmFtc1swXSk7XG4gIH1cbiAgaWYgKHBhcnRpYWwuaGFzaCkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5oYXNoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTCBCTE9DSzonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG5cbiAgY29udGVudCArPSAnICcgKyB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIGNvbnRlbnQgKz0gdGhpcy5hY2NlcHQocGFydGlhbC5wcm9ncmFtKTtcbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIHRoaXMucGFkKCd7ez4gJyArIGNvbnRlbnQgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbnRlbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiB0aGlzLnBhZChcIkNPTlRFTlRbICdcIiArIGNvbnRlbnQudmFsdWUgKyBcIicgXVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwie3shICdcIiArIGNvbW1lbnQudmFsdWUgKyBcIicgfX1cIik7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN1YkV4cHJlc3Npb24gPSBmdW5jdGlvbihzZXhwcikge1xuICBsZXQgcGFyYW1zID0gc2V4cHIucGFyYW1zLFxuICAgIHBhcmFtU3RyaW5ncyA9IFtdLFxuICAgIGhhc2g7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcGFyYW1TdHJpbmdzLnB1c2godGhpcy5hY2NlcHQocGFyYW1zW2ldKSk7XG4gIH1cblxuICBwYXJhbXMgPSAnWycgKyBwYXJhbVN0cmluZ3Muam9pbignLCAnKSArICddJztcblxuICBoYXNoID0gc2V4cHIuaGFzaCA/ICcgJyArIHRoaXMuYWNjZXB0KHNleHByLmhhc2gpIDogJyc7XG5cbiAgcmV0dXJuIHRoaXMuYWNjZXB0KHNleHByLnBhdGgpICsgJyAnICsgcGFyYW1zICsgaGFzaDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbihpZCkge1xuICBsZXQgcGF0aCA9IGlkLnBhcnRzLmpvaW4oJy8nKTtcbiAgcmV0dXJuIChpZC5kYXRhID8gJ0AnIDogJycpICsgJ1BBVEg6JyArIHBhdGg7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuICdcIicgKyBzdHJpbmcudmFsdWUgKyAnXCInO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsID0gZnVuY3Rpb24obnVtYmVyKSB7XG4gIHJldHVybiAnTlVNQkVSeycgKyBudW1iZXIudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkJvb2xlYW5MaXRlcmFsID0gZnVuY3Rpb24oYm9vbCkge1xuICByZXR1cm4gJ0JPT0xFQU57JyArIGJvb2wudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlVuZGVmaW5lZExpdGVyYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdVTkRFRklORUQnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdWxsTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ05VTEwnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoID0gZnVuY3Rpb24oaGFzaCkge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgIGpvaW5lZFBhaXJzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYWlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBqb2luZWRQYWlycy5wdXNoKHRoaXMuYWNjZXB0KHBhaXJzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gJ0hBU0h7JyArIGpvaW5lZFBhaXJzLmpvaW4oJywgJykgKyAnfSc7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoUGFpciA9IGZ1bmN0aW9uKHBhaXIpIHtcbiAgcmV0dXJuIHBhaXIua2V5ICsgJz0nICsgdGhpcy5hY2NlcHQocGFpci52YWx1ZSk7XG59O1xuLyogZXNsaW50LWVuYWJsZSBuZXctY2FwICovXG4iXX0= diff --git a/.pnpm-store/v11/files/24/325a3a548cab610f3a5a560657a21e329645d7a252b1d478dc959ecc5d3b65b85b994f5306d5b308a1ad1ba04e010ecbce47da185fc3b360e5a51d88a1daef b/.pnpm-store/v11/files/24/325a3a548cab610f3a5a560657a21e329645d7a252b1d478dc959ecc5d3b65b85b994f5306d5b308a1ad1ba04e010ecbce47da185fc3b360e5a51d88a1daef new file mode 100644 index 00000000..588b70cb --- /dev/null +++ b/.pnpm-store/v11/files/24/325a3a548cab610f3a5a560657a21e329645d7a252b1d478dc959ecc5d3b65b85b994f5306d5b308a1ad1ba04e010ecbce47da185fc3b360e5a51d88a1daef @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///source-map.min.js","webpack:///webpack/bootstrap 42c329f865e32e011afb","webpack:///./source-map.js","webpack:///./lib/source-map-generator.js","webpack:///./lib/base64-vlq.js","webpack:///./lib/base64.js","webpack:///./lib/util.js","webpack:///./lib/array-set.js","webpack:///./lib/mapping-list.js","webpack:///./lib/source-map-consumer.js","webpack:///./lib/binary-search.js","webpack:///./lib/quick-sort.js","webpack:///./lib/source-node.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","SourceMapGenerator","SourceMapConsumer","SourceNode","aArgs","_file","util","getArg","_sourceRoot","_skipValidation","_sources","ArraySet","_names","_mappings","MappingList","_sourcesContents","base64VLQ","prototype","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","generator","file","eachMapping","mapping","newMapping","generated","line","generatedLine","column","generatedColumn","source","relative","original","originalLine","originalColumn","name","addMapping","sources","forEach","sourceFile","content","sourceContentFor","setSourceContent","_validateMapping","String","has","add","aSourceFile","aSourceContent","Object","create","toSetString","keys","length","applySourceMap","aSourceMapPath","Error","newSources","newNames","unsortedForEach","originalPositionFor","join","aGenerated","aOriginal","aSource","aName","JSON","stringify","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","mappings","toArray","i","len","compareByGeneratedPositionsInflated","encode","indexOf","_generateSourcesContent","aSources","aSourceRoot","map","key","hasOwnProperty","toJSON","version","names","sourcesContent","toString","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","digit","encoded","vlq","decode","aStr","aIndex","aOutParam","continuation","strLen","shift","charCodeAt","charAt","value","rest","intToCharMap","split","number","TypeError","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","aDefaultValue","arguments","urlParse","aUrl","match","urlRegexp","scheme","auth","host","port","path","urlGenerate","aParsedUrl","url","normalize","aPath","part","isAbsolute","parts","up","splice","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","replace","level","index","lastIndexOf","slice","Array","substr","identity","s","isProtoString","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","strcmp","aStr1","aStr2","supportsNullProto","obj","_array","_set","hasNativeMap","Map","fromArray","aArray","aAllowDuplicates","set","size","getOwnPropertyNames","sStr","isDuplicate","idx","push","get","at","aIdx","generatedPositionAfter","lineA","lineB","columnA","columnB","_sorted","_last","aCallback","aThisArg","aMapping","sort","aSourceMap","sourceMap","parse","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","binarySearch","quickSort","__generatedMappings","defineProperty","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","context","order","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findMapping","undefined","lastColumn","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","str","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","some","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","constructor","j","sectionIndex","section","bias","every","generatedPosition","ret","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","Math","floor","swap","ary","x","y","randomIntInRange","low","high","round","random","doQuickSort","comparator","r","pivotIndex","pivot","q","aLine","aColumn","aChunks","children","sourceContents","isSourceNode","REGEX_NEWLINE","NEWLINE_CODE","fromStringWithSourceMap","aGeneratedCode","aRelativePath","addMappingWithCode","code","node","remainingLines","remainingLinesIndex","shiftNextLine","getNextLine","lineContents","newLine","lastGeneratedLine","lastMapping","nextLine","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAA,UAAAD,IAEAD,EAAA,UAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAP,WACAS,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,QAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDgBM,SAAUL,EAAQD,EAASM,GEjDjCN,EAAAe,mBAAAT,EAAA,GAAAS,mBACAf,EAAAgB,kBAAAV,EAAA,GAAAU,kBACAhB,EAAAiB,WAAAX,EAAA,IAAAW,YF6DM,SAAUhB,EAAQD,EAASM,GGhDjC,QAAAS,GAAAG,GACAA,IACAA,MAEAd,KAAAe,MAAAC,EAAAC,OAAAH,EAAA,aACAd,KAAAkB,YAAAF,EAAAC,OAAAH,EAAA,mBACAd,KAAAmB,gBAAAH,EAAAC,OAAAH,EAAA,qBACAd,KAAAoB,SAAA,GAAAC,GACArB,KAAAsB,OAAA,GAAAD,GACArB,KAAAuB,UAAA,GAAAC,GACAxB,KAAAyB,iBAAA,KAvBA,GAAAC,GAAAxB,EAAA,GACAc,EAAAd,EAAA,GACAmB,EAAAnB,EAAA,GAAAmB,SACAG,EAAAtB,EAAA,GAAAsB,WAuBAb,GAAAgB,UAAAC,SAAA,EAOAjB,EAAAkB,cACA,SAAAC,GACA,GAAAC,GAAAD,EAAAC,WACAC,EAAA,GAAArB,IACAsB,KAAAH,EAAAG,KACAF,cAkCA,OAhCAD,GAAAI,YAAA,SAAAC,GACA,GAAAC,IACAC,WACAC,KAAAH,EAAAI,cACAC,OAAAL,EAAAM,iBAIA,OAAAN,EAAAO,SACAN,EAAAM,OAAAP,EAAAO,OACA,MAAAX,IACAK,EAAAM,OAAA1B,EAAA2B,SAAAZ,EAAAK,EAAAM,SAGAN,EAAAQ,UACAN,KAAAH,EAAAU,aACAL,OAAAL,EAAAW,gBAGA,MAAAX,EAAAY,OACAX,EAAAW,KAAAZ,EAAAY,OAIAf,EAAAgB,WAAAZ,KAEAN,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAC,GAAAtB,EAAAuB,iBAAAF,EACA,OAAAC,GACApB,EAAAsB,iBAAAH,EAAAC,KAGApB,GAaArB,EAAAgB,UAAAqB,WACA,SAAAlC,GACA,GAAAuB,GAAArB,EAAAC,OAAAH,EAAA,aACA8B,EAAA5B,EAAAC,OAAAH,EAAA,iBACA4B,EAAA1B,EAAAC,OAAAH,EAAA,eACAiC,EAAA/B,EAAAC,OAAAH,EAAA,YAEAd,MAAAmB,iBACAnB,KAAAuD,iBAAAlB,EAAAO,EAAAF,EAAAK,GAGA,MAAAL,IACAA,EAAAc,OAAAd,GACA1C,KAAAoB,SAAAqC,IAAAf,IACA1C,KAAAoB,SAAAsC,IAAAhB,IAIA,MAAAK,IACAA,EAAAS,OAAAT,GACA/C,KAAAsB,OAAAmC,IAAAV,IACA/C,KAAAsB,OAAAoC,IAAAX,IAIA/C,KAAAuB,UAAAmC,KACAnB,cAAAF,EAAAC,KACAG,gBAAAJ,EAAAG,OACAK,aAAA,MAAAD,KAAAN,KACAQ,eAAA,MAAAF,KAAAJ,OACAE,SACAK,UAOApC,EAAAgB,UAAA2B,iBACA,SAAAK,EAAAC,GACA,GAAAlB,GAAAiB,CACA,OAAA3D,KAAAkB,cACAwB,EAAA1B,EAAA2B,SAAA3C,KAAAkB,YAAAwB,IAGA,MAAAkB,GAGA5D,KAAAyB,mBACAzB,KAAAyB,iBAAAoC,OAAAC,OAAA,OAEA9D,KAAAyB,iBAAAT,EAAA+C,YAAArB,IAAAkB,GACK5D,KAAAyB,yBAGLzB,MAAAyB,iBAAAT,EAAA+C,YAAArB,IACA,IAAAmB,OAAAG,KAAAhE,KAAAyB,kBAAAwC,SACAjE,KAAAyB,iBAAA,QAqBAd,EAAAgB,UAAAuC,eACA,SAAApC,EAAA6B,EAAAQ,GACA,GAAAhB,GAAAQ,CAEA,UAAAA,EAAA,CACA,SAAA7B,EAAAG,KACA,SAAAmC,OACA,gJAIAjB,GAAArB,EAAAG,KAEA,GAAAF,GAAA/B,KAAAkB,WAEA,OAAAa,IACAoB,EAAAnC,EAAA2B,SAAAZ,EAAAoB,GAIA,IAAAkB,GAAA,GAAAhD,GACAiD,EAAA,GAAAjD,EAGArB,MAAAuB,UAAAgD,gBAAA,SAAApC,GACA,GAAAA,EAAAO,SAAAS,GAAA,MAAAhB,EAAAU,aAAA,CAEA,GAAAD,GAAAd,EAAA0C,qBACAlC,KAAAH,EAAAU,aACAL,OAAAL,EAAAW,gBAEA,OAAAF,EAAAF,SAEAP,EAAAO,OAAAE,EAAAF,OACA,MAAAyB,IACAhC,EAAAO,OAAA1B,EAAAyD,KAAAN,EAAAhC,EAAAO,SAEA,MAAAX,IACAI,EAAAO,OAAA1B,EAAA2B,SAAAZ,EAAAI,EAAAO,SAEAP,EAAAU,aAAAD,EAAAN,KACAH,EAAAW,eAAAF,EAAAJ,OACA,MAAAI,EAAAG,OACAZ,EAAAY,KAAAH,EAAAG,OAKA,GAAAL,GAAAP,EAAAO,MACA,OAAAA,GAAA2B,EAAAZ,IAAAf,IACA2B,EAAAX,IAAAhB,EAGA,IAAAK,GAAAZ,EAAAY,IACA,OAAAA,GAAAuB,EAAAb,IAAAV,IACAuB,EAAAZ,IAAAX,IAGK/C,MACLA,KAAAoB,SAAAiD,EACArE,KAAAsB,OAAAgD,EAGAxC,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAC,GAAAtB,EAAAuB,iBAAAF,EACA,OAAAC,IACA,MAAAe,IACAhB,EAAAnC,EAAAyD,KAAAN,EAAAhB,IAEA,MAAApB,IACAoB,EAAAnC,EAAA2B,SAAAZ,EAAAoB,IAEAnD,KAAAsD,iBAAAH,EAAAC,KAEKpD,OAcLW,EAAAgB,UAAA4B,iBACA,SAAAmB,EAAAC,EAAAC,EACAC,GAKA,GAAAF,GAAA,gBAAAA,GAAArC,MAAA,gBAAAqC,GAAAnC,OACA,SAAA4B,OACA,+OAMA,OAAAM,GAAA,QAAAA,IAAA,UAAAA,IACAA,EAAApC,KAAA,GAAAoC,EAAAlC,QAAA,IACAmC,GAAAC,GAAAC,MAIAH,GAAA,QAAAA,IAAA,UAAAA,IACAC,GAAA,QAAAA,IAAA,UAAAA,IACAD,EAAApC,KAAA,GAAAoC,EAAAlC,QAAA,GACAmC,EAAArC,KAAA,GAAAqC,EAAAnC,QAAA,GACAoC,GAKA,SAAAR,OAAA,oBAAAU,KAAAC,WACA1C,UAAAqC,EACAhC,OAAAkC,EACAhC,SAAA+B,EACA5B,KAAA8B,MASAlE,EAAAgB,UAAAqD,mBACA,WAcA,OANAC,GACA9C,EACA+C,EACAC,EAVAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GAMAC,EAAA3F,KAAAuB,UAAAqE,UACAC,EAAA,EAAAC,EAAAH,EAAA1B,OAA0C4B,EAAAC,EAASD,IAAA,CAInD,GAHA1D,EAAAwD,EAAAE,GACAZ,EAAA,GAEA9C,EAAAI,gBAAA8C,EAEA,IADAD,EAAA,EACAjD,EAAAI,gBAAA8C,GACAJ,GAAA,IACAI,QAIA,IAAAQ,EAAA,GACA,IAAA7E,EAAA+E,oCAAA5D,EAAAwD,EAAAE,EAAA,IACA,QAEAZ,IAAA,IAIAA,GAAAvD,EAAAsE,OAAA7D,EAAAM,gBACA2C,GACAA,EAAAjD,EAAAM,gBAEA,MAAAN,EAAAO,SACAyC,EAAAnF,KAAAoB,SAAA6E,QAAA9D,EAAAO,QACAuC,GAAAvD,EAAAsE,OAAAb,EAAAM,GACAA,EAAAN,EAGAF,GAAAvD,EAAAsE,OAAA7D,EAAAU,aAAA,EACA0C,GACAA,EAAApD,EAAAU,aAAA,EAEAoC,GAAAvD,EAAAsE,OAAA7D,EAAAW,eACAwC,GACAA,EAAAnD,EAAAW,eAEA,MAAAX,EAAAY,OACAmC,EAAAlF,KAAAsB,OAAA2E,QAAA9D,EAAAY,MACAkC,GAAAvD,EAAAsE,OAAAd,EAAAM,GACAA,EAAAN,IAIAQ,GAAAT,EAGA,MAAAS,IAGA/E,EAAAgB,UAAAuE,wBACA,SAAAC,EAAAC,GACA,MAAAD,GAAAE,IAAA,SAAA3D,GACA,IAAA1C,KAAAyB,iBACA,WAEA,OAAA2E,IACA1D,EAAA1B,EAAA2B,SAAAyD,EAAA1D,GAEA,IAAA4D,GAAAtF,EAAA+C,YAAArB,EACA,OAAAmB,QAAAlC,UAAA4E,eAAAhG,KAAAP,KAAAyB,iBAAA6E,GACAtG,KAAAyB,iBAAA6E,GACA,MACKtG,OAMLW,EAAAgB,UAAA6E,OACA,WACA,GAAAH,IACAI,QAAAzG,KAAA4B,SACAqB,QAAAjD,KAAAoB,SAAAwE,UACAc,MAAA1G,KAAAsB,OAAAsE,UACAD,SAAA3F,KAAAgF,qBAYA,OAVA,OAAAhF,KAAAe,QACAsF,EAAApE,KAAAjC,KAAAe,OAEA,MAAAf,KAAAkB,cACAmF,EAAAtE,WAAA/B,KAAAkB,aAEAlB,KAAAyB,mBACA4E,EAAAM,eAAA3G,KAAAkG,wBAAAG,EAAApD,QAAAoD,EAAAtE,aAGAsE,GAMA1F,EAAAgB,UAAAiF,SACA,WACA,MAAA9B,MAAAC,UAAA/E,KAAAwG,WAGA5G,EAAAe,sBH2EM,SAAUd,EAAQD,EAASM,GItajC,QAAA2G,GAAAC,GACA,MAAAA,GAAA,IACAA,GAAA,MACAA,GAAA,KASA,QAAAC,GAAAD,GACA,GAAAE,GAAA,OAAAF,GACAG,EAAAH,GAAA,CACA,OAAAE,IACAC,EACAA,EAhDA,GAAAC,GAAAhH,EAAA,GAcAiH,EAAA,EAGAC,EAAA,GAAAD,EAGAE,EAAAD,EAAA,EAGAE,EAAAF,CA+BAxH,GAAAoG,OAAA,SAAAc,GACA,GACAS,GADAC,EAAA,GAGAC,EAAAZ,EAAAC,EAEA,GACAS,GAAAE,EAAAJ,EACAI,KAAAN,EACAM,EAAA,IAGAF,GAAAD,GAEAE,GAAAN,EAAAlB,OAAAuB,SACGE,EAAA,EAEH,OAAAD,IAOA5H,EAAA8H,OAAA,SAAAC,EAAAC,EAAAC,GACA,GAGAC,GAAAP,EAHAQ,EAAAJ,EAAA1D,OACAyB,EAAA,EACAsC,EAAA,CAGA,IACA,GAAAJ,GAAAG,EACA,SAAA3D,OAAA,6CAIA,IADAmD,EAAAL,EAAAQ,OAAAC,EAAAM,WAAAL,MACAL,KAAA,EACA,SAAAnD,OAAA,yBAAAuD,EAAAO,OAAAN,EAAA,GAGAE,MAAAP,EAAAD,GACAC,GAAAF,EACA3B,GAAA6B,GAAAS,EACAA,GAAAb,QACGW,EAEHD,GAAAM,MAAApB,EAAArB,GACAmC,EAAAO,KAAAR,IJkfM,SAAU/H,EAAQD,GKrnBxB,GAAAyI,GAAA,mEAAAC,MAAA,GAKA1I,GAAAoG,OAAA,SAAAuC,GACA,MAAAA,KAAAF,EAAApE,OACA,MAAAoE,GAAAE,EAEA,UAAAC,WAAA,6BAAAD,IAOA3I,EAAA8H,OAAA,SAAAe,GACA,GAAAC,GAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,IAEAC,EAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,EAGA,OAAAT,IAAAD,MAAAE,EACAF,EAAAC,EAIAE,GAAAH,MAAAI,EACAJ,EAAAG,EAAAM,EAIAJ,GAAAL,MAAAM,EACAN,EAAAK,EAAAK,EAIAV,GAAAO,EACA,GAIAP,GAAAQ,EACA,IAIA,ILooBM,SAAUpJ,EAAQD,GMprBxB,QAAAqB,GAAAH,EAAA+D,EAAAuE,GACA,GAAAvE,IAAA/D,GACA,MAAAA,GAAA+D,EACG,QAAAwE,UAAApF,OACH,MAAAmF,EAEA,UAAAhF,OAAA,IAAAS,EAAA,6BAQA,QAAAyE,GAAAC,GACA,GAAAC,GAAAD,EAAAC,MAAAC,EACA,OAAAD,IAIAE,OAAAF,EAAA,GACAG,KAAAH,EAAA,GACAI,KAAAJ,EAAA,GACAK,KAAAL,EAAA,GACAM,KAAAN,EAAA,IAPA,KAYA,QAAAO,GAAAC,GACA,GAAAC,GAAA,EAiBA,OAhBAD,GAAAN,SACAO,GAAAD,EAAAN,OAAA,KAEAO,GAAA,KACAD,EAAAL,OACAM,GAAAD,EAAAL,KAAA,KAEAK,EAAAJ,OACAK,GAAAD,EAAAJ,MAEAI,EAAAH,OACAI,GAAA,IAAAD,EAAAH,MAEAG,EAAAF,OACAG,GAAAD,EAAAF,MAEAG,EAeA,QAAAC,GAAAC,GACA,GAAAL,GAAAK,EACAF,EAAAX,EAAAa,EACA,IAAAF,EAAA,CACA,IAAAA,EAAAH,KACA,MAAAK,EAEAL,GAAAG,EAAAH,KAKA,OAAAM,GAHAC,EAAAzK,EAAAyK,WAAAP,GAEAQ,EAAAR,EAAAxB,MAAA,OACAiC,EAAA,EAAA1E,EAAAyE,EAAArG,OAAA,EAA8C4B,GAAA,EAAQA,IACtDuE,EAAAE,EAAAzE,GACA,MAAAuE,EACAE,EAAAE,OAAA3E,EAAA,GACK,OAAAuE,EACLG,IACKA,EAAA,IACL,KAAAH,GAIAE,EAAAE,OAAA3E,EAAA,EAAA0E,GACAA,EAAA,IAEAD,EAAAE,OAAA3E,EAAA,GACA0E,KAUA,OANAT,GAAAQ,EAAA7F,KAAA,KAEA,KAAAqF,IACAA,EAAAO,EAAA,SAGAJ,GACAA,EAAAH,OACAC,EAAAE,IAEAH,EAoBA,QAAArF,GAAAgG,EAAAN,GACA,KAAAM,IACAA,EAAA,KAEA,KAAAN,IACAA,EAAA,IAEA,IAAAO,GAAApB,EAAAa,GACAQ,EAAArB,EAAAmB,EAMA,IALAE,IACAF,EAAAE,EAAAb,MAAA,KAIAY,MAAAhB,OAIA,MAHAiB,KACAD,EAAAhB,OAAAiB,EAAAjB,QAEAK,EAAAW,EAGA,IAAAA,GAAAP,EAAAX,MAAAoB,GACA,MAAAT,EAIA,IAAAQ,MAAAf,OAAAe,EAAAb,KAEA,MADAa,GAAAf,KAAAO,EACAJ,EAAAY,EAGA,IAAAE,GAAA,MAAAV,EAAAjC,OAAA,GACAiC,EACAD,EAAAO,EAAAK,QAAA,eAAAX,EAEA,OAAAQ,IACAA,EAAAb,KAAAe,EACAd,EAAAY,IAEAE,EAcA,QAAAlI,GAAA8H,EAAAN,GACA,KAAAM,IACAA,EAAA,KAGAA,IAAAK,QAAA,SAOA,KADA,GAAAC,GAAA,EACA,IAAAZ,EAAAlE,QAAAwE,EAAA,OACA,GAAAO,GAAAP,EAAAQ,YAAA,IACA,IAAAD,EAAA,EACA,MAAAb,EAOA,IADAM,IAAAS,MAAA,EAAAF,GACAP,EAAAjB,MAAA,qBACA,MAAAW,KAGAY,EAIA,MAAAI,OAAAJ,EAAA,GAAAtG,KAAA,OAAA0F,EAAAiB,OAAAX,EAAAxG,OAAA,GASA,QAAAoH,GAAAC,GACA,MAAAA,GAYA,QAAAvH,GAAA4D,GACA,MAAA4D,GAAA5D,GACA,IAAAA,EAGAA,EAIA,QAAA6D,GAAA7D,GACA,MAAA4D,GAAA5D,GACAA,EAAAuD,MAAA,GAGAvD,EAIA,QAAA4D,GAAAD,GACA,IAAAA,EACA,QAGA,IAAArH,GAAAqH,EAAArH,MAEA,IAAAA,EAAA,EACA,QAGA,SAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,GACA,QAGA,QAAA4B,GAAA5B,EAAA,GAA2B4B,GAAA,EAAQA,IACnC,QAAAyF,EAAArD,WAAApC,GACA,QAIA,UAWA,QAAA4F,GAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAH,EAAAhJ,OAAAiJ,EAAAjJ,MACA,YAAAmJ,EACAA,GAGAA,EAAAH,EAAA7I,aAAA8I,EAAA9I,aACA,IAAAgJ,EACAA,GAGAA,EAAAH,EAAA5I,eAAA6I,EAAA7I,eACA,IAAA+I,GAAAD,EACAC,GAGAA,EAAAH,EAAAjJ,gBAAAkJ,EAAAlJ,gBACA,IAAAoJ,EACAA,GAGAA,EAAAH,EAAAnJ,cAAAoJ,EAAApJ,cACA,IAAAsJ,EACAA,EAGAH,EAAA3I,KAAA4I,EAAA5I,SAaA,QAAA+I,GAAAJ,EAAAC,EAAAI,GACA,GAAAF,GAAAH,EAAAnJ,cAAAoJ,EAAApJ,aACA,YAAAsJ,EACAA,GAGAA,EAAAH,EAAAjJ,gBAAAkJ,EAAAlJ,gBACA,IAAAoJ,GAAAE,EACAF,GAGAA,EAAAH,EAAAhJ,OAAAiJ,EAAAjJ,OACA,IAAAmJ,EACAA,GAGAA,EAAAH,EAAA7I,aAAA8I,EAAA9I,aACA,IAAAgJ,EACAA,GAGAA,EAAAH,EAAA5I,eAAA6I,EAAA7I,eACA,IAAA+I,EACAA,EAGAH,EAAA3I,KAAA4I,EAAA5I,SAIA,QAAAiJ,GAAAC,EAAAC,GACA,MAAAD,KAAAC,EACA,EAGAD,EAAAC,EACA,GAGA,EAOA,QAAAnG,GAAA2F,EAAAC,GACA,GAAAE,GAAAH,EAAAnJ,cAAAoJ,EAAApJ,aACA,YAAAsJ,EACAA,GAGAA,EAAAH,EAAAjJ,gBAAAkJ,EAAAlJ,gBACA,IAAAoJ,EACAA,GAGAA,EAAAG,EAAAN,EAAAhJ,OAAAiJ,EAAAjJ,QACA,IAAAmJ,EACAA,GAGAA,EAAAH,EAAA7I,aAAA8I,EAAA9I,aACA,IAAAgJ,EACAA,GAGAA,EAAAH,EAAA5I,eAAA6I,EAAA7I,eACA,IAAA+I,EACAA,EAGAG,EAAAN,EAAA3I,KAAA4I,EAAA5I,UApYAnD,EAAAqB,QAEA,IAAAwI,GAAA,iEACAmB,EAAA,eAeAhL,GAAA0J,WAsBA1J,EAAAmK,cAwDAnK,EAAAsK,YA2DAtK,EAAA6E,OAEA7E,EAAAyK,WAAA,SAAAF,GACA,YAAAA,EAAAjC,OAAA,MAAAiC,EAAAX,MAAAC,IAyCA7J,EAAA+C,UAEA,IAAAwJ,GAAA,WACA,GAAAC,GAAAvI,OAAAC,OAAA,KACA,sBAAAsI,MAuBAxM,GAAAmE,YAAAoI,EAAAd,EAAAtH,EASAnE,EAAA4L,cAAAW,EAAAd,EAAAG,EAsEA5L,EAAA6L,6BAuCA7L,EAAAkM,sCA8CAlM,EAAAmG,uCN4sBM,SAAUlG,EAAQD,EAASM,GO3lCjC,QAAAmB,KACArB,KAAAqM,UACArM,KAAAsM,KAAAC,EAAA,GAAAC,KAAA3I,OAAAC,OAAA,MAZA,GAAA9C,GAAAd,EAAA,GACAuD,EAAAI,OAAAlC,UAAA4E,eACAgG,EAAA,mBAAAC,IAgBAnL,GAAAoL,UAAA,SAAAC,EAAAC,GAEA,OADAC,GAAA,GAAAvL,GACAwE,EAAA,EAAAC,EAAA4G,EAAAzI,OAAsC4B,EAAAC,EAASD,IAC/C+G,EAAAlJ,IAAAgJ,EAAA7G,GAAA8G,EAEA,OAAAC,IASAvL,EAAAM,UAAAkL,KAAA,WACA,MAAAN,GAAAvM,KAAAsM,KAAAO,KAAAhJ,OAAAiJ,oBAAA9M,KAAAsM,MAAArI,QAQA5C,EAAAM,UAAA+B,IAAA,SAAAiE,EAAAgF,GACA,GAAAI,GAAAR,EAAA5E,EAAA3G,EAAA+C,YAAA4D,GACAqF,EAAAT,EAAAvM,KAAAyD,IAAAkE,GAAAlE,EAAAlD,KAAAP,KAAAsM,KAAAS,GACAE,EAAAjN,KAAAqM,OAAApI,MACA+I,KAAAL,GACA3M,KAAAqM,OAAAa,KAAAvF,GAEAqF,IACAT,EACAvM,KAAAsM,KAAAM,IAAAjF,EAAAsF,GAEAjN,KAAAsM,KAAAS,GAAAE,IAUA5L,EAAAM,UAAA8B,IAAA,SAAAkE,GACA,GAAA4E,EACA,MAAAvM,MAAAsM,KAAA7I,IAAAkE,EAEA,IAAAoF,GAAA/L,EAAA+C,YAAA4D,EACA,OAAAlE,GAAAlD,KAAAP,KAAAsM,KAAAS,IASA1L,EAAAM,UAAAsE,QAAA,SAAA0B,GACA,GAAA4E,EAAA,CACA,GAAAU,GAAAjN,KAAAsM,KAAAa,IAAAxF,EACA,IAAAsF,GAAA,EACA,MAAAA,OAEG,CACH,GAAAF,GAAA/L,EAAA+C,YAAA4D,EACA,IAAAlE,EAAAlD,KAAAP,KAAAsM,KAAAS,GACA,MAAA/M,MAAAsM,KAAAS,GAIA,SAAA3I,OAAA,IAAAuD,EAAA,yBAQAtG,EAAAM,UAAAyL,GAAA,SAAAC,GACA,GAAAA,GAAA,GAAAA,EAAArN,KAAAqM,OAAApI,OACA,MAAAjE,MAAAqM,OAAAgB,EAEA,UAAAjJ,OAAA,yBAAAiJ,IAQAhM,EAAAM,UAAAiE,QAAA,WACA,MAAA5F,MAAAqM,OAAAnB,SAGAtL,EAAAyB,YPmnCM,SAAUxB,EAAQD,EAASM,GQ9tCjC,QAAAoN,GAAA5B,EAAAC,GAEA,GAAA4B,GAAA7B,EAAAnJ,cACAiL,EAAA7B,EAAApJ,cACAkL,EAAA/B,EAAAjJ,gBACAiL,EAAA/B,EAAAlJ,eACA,OAAA+K,GAAAD,GAAAC,GAAAD,GAAAG,GAAAD,GACAzM,EAAA+E,oCAAA2F,EAAAC,IAAA,EAQA,QAAAnK,KACAxB,KAAAqM,UACArM,KAAA2N,SAAA,EAEA3N,KAAA4N,OAAgBrL,eAAA,EAAAE,gBAAA,GAzBhB,GAAAzB,GAAAd,EAAA,EAkCAsB,GAAAG,UAAA4C,gBACA,SAAAsJ,EAAAC,GACA9N,KAAAqM,OAAAnJ,QAAA2K,EAAAC,IAQAtM,EAAAG,UAAA+B,IAAA,SAAAqK,GACAT,EAAAtN,KAAA4N,MAAAG,IACA/N,KAAA4N,MAAAG,EACA/N,KAAAqM,OAAAa,KAAAa,KAEA/N,KAAA2N,SAAA,EACA3N,KAAAqM,OAAAa,KAAAa,KAaAvM,EAAAG,UAAAiE,QAAA,WAKA,MAJA5F,MAAA2N,UACA3N,KAAAqM,OAAA2B,KAAAhN,EAAA+E,qCACA/F,KAAA2N,SAAA,GAEA3N,KAAAqM,QAGAzM,EAAA4B,eRkvCM,SAAU3B,EAAQD,EAASM,GSnzCjC,QAAAU,GAAAqN,GACA,GAAAC,GAAAD,CAKA,OAJA,gBAAAA,KACAC,EAAApJ,KAAAqJ,MAAAF,EAAAnD,QAAA,WAAsD,MAGtD,MAAAoD,EAAAE,SACA,GAAAC,GAAAH,GACA,GAAAI,GAAAJ,GAoQA,QAAAI,GAAAL,GACA,GAAAC,GAAAD,CACA,iBAAAA,KACAC,EAAApJ,KAAAqJ,MAAAF,EAAAnD,QAAA,WAAsD,KAGtD,IAAArE,GAAAzF,EAAAC,OAAAiN,EAAA,WACAjL,EAAAjC,EAAAC,OAAAiN,EAAA,WAGAxH,EAAA1F,EAAAC,OAAAiN,EAAA,YACAnM,EAAAf,EAAAC,OAAAiN,EAAA,mBACAvH,EAAA3F,EAAAC,OAAAiN,EAAA,uBACAvI,EAAA3E,EAAAC,OAAAiN,EAAA,YACAjM,EAAAjB,EAAAC,OAAAiN,EAAA,YAIA,IAAAzH,GAAAzG,KAAA4B,SACA,SAAAwC,OAAA,wBAAAqC,EAGAxD,KACAoD,IAAA7C,QAIA6C,IAAArF,EAAAkJ,WAKA7D,IAAA,SAAA3D,GACA,MAAAX,IAAAf,EAAAqJ,WAAAtI,IAAAf,EAAAqJ,WAAA3H,GACA1B,EAAA2B,SAAAZ,EAAAW,GACAA,IAOA1C,KAAAsB,OAAAD,EAAAoL,UAAA/F,EAAAL,IAAA7C,SAAA,GACAxD,KAAAoB,SAAAC,EAAAoL,UAAAxJ,GAAA,GAEAjD,KAAA+B,aACA/B,KAAA2G,iBACA3G,KAAAuB,UAAAoE,EACA3F,KAAAiC,OA8EA,QAAAsM,KACAvO,KAAAuC,cAAA,EACAvC,KAAAyC,gBAAA,EACAzC,KAAA0C,OAAA,KACA1C,KAAA6C,aAAA,KACA7C,KAAA8C,eAAA,KACA9C,KAAA+C,KAAA,KAyZA,QAAAsL,GAAAJ,GACA,GAAAC,GAAAD,CACA,iBAAAA,KACAC,EAAApJ,KAAAqJ,MAAAF,EAAAnD,QAAA,WAAsD,KAGtD,IAAArE,GAAAzF,EAAAC,OAAAiN,EAAA,WACAE,EAAApN,EAAAC,OAAAiN,EAAA,WAEA,IAAAzH,GAAAzG,KAAA4B,SACA,SAAAwC,OAAA,wBAAAqC,EAGAzG,MAAAoB,SAAA,GAAAC,GACArB,KAAAsB,OAAA,GAAAD,EAEA,IAAAmN,IACAlM,MAAA,EACAE,OAAA,EAEAxC,MAAAyO,UAAAL,EAAA/H,IAAA,SAAAiF,GACA,GAAAA,EAAArB,IAGA,SAAA7F,OAAA,qDAEA,IAAAsK,GAAA1N,EAAAC,OAAAqK,EAAA,UACAqD,EAAA3N,EAAAC,OAAAyN,EAAA,QACAE,EAAA5N,EAAAC,OAAAyN,EAAA,SAEA,IAAAC,EAAAH,EAAAlM,MACAqM,IAAAH,EAAAlM,MAAAsM,EAAAJ,EAAAhM,OACA,SAAA4B,OAAA,uDAIA,OAFAoK,GAAAE,GAGAG,iBAGAtM,cAAAoM,EAAA,EACAlM,gBAAAmM,EAAA,GAEAE,SAAA,GAAAlO,GAAAI,EAAAC,OAAAqK,EAAA,WA11BA,GAAAtK,GAAAd,EAAA,GACA6O,EAAA7O,EAAA,GACAmB,EAAAnB,EAAA,GAAAmB,SACAK,EAAAxB,EAAA,GACA8O,EAAA9O,EAAA,GAAA8O,SAaApO,GAAAiB,cAAA,SAAAoM,GACA,MAAAK,GAAAzM,cAAAoM,IAMArN,EAAAe,UAAAC,SAAA,EAgCAhB,EAAAe,UAAAsN,oBAAA,KACApL,OAAAqL,eAAAtO,EAAAe,UAAA,sBACAwL,IAAA,WAKA,MAJAnN,MAAAiP,qBACAjP,KAAAmP,eAAAnP,KAAAuB,UAAAvB,KAAA+B,YAGA/B,KAAAiP,uBAIArO,EAAAe,UAAAyN,mBAAA,KACAvL,OAAAqL,eAAAtO,EAAAe,UAAA,qBACAwL,IAAA,WAKA,MAJAnN,MAAAoP,oBACApP,KAAAmP,eAAAnP,KAAAuB,UAAAvB,KAAA+B,YAGA/B,KAAAoP,sBAIAxO,EAAAe,UAAA0N,wBACA,SAAA1H,EAAAqD,GACA,GAAAvK,GAAAkH,EAAAO,OAAA8C,EACA,aAAAvK,GAAmB,MAAAA,GAQnBG,EAAAe,UAAAwN,eACA,SAAAxH,EAAAvB,GACA,SAAAhC,OAAA,6CAGAxD,EAAA0O,gBAAA,EACA1O,EAAA2O,eAAA,EAEA3O,EAAA4O,qBAAA,EACA5O,EAAA6O,kBAAA,EAkBA7O,EAAAe,UAAAO,YACA,SAAA2L,EAAA6B,EAAAC,GACA,GAGAhK,GAHAiK,EAAAF,GAAA,KACAG,EAAAF,GAAA/O,EAAA0O,eAGA,QAAAO,GACA,IAAAjP,GAAA0O,gBACA3J,EAAA3F,KAAA8P,kBACA,MACA,KAAAlP,GAAA2O,eACA5J,EAAA3F,KAAA+P,iBACA,MACA,SACA,SAAA3L,OAAA,+BAGA,GAAArC,GAAA/B,KAAA+B,UACA4D,GAAAU,IAAA,SAAAlE,GACA,GAAAO,GAAA,OAAAP,EAAAO,OAAA,KAAA1C,KAAAoB,SAAAgM,GAAAjL,EAAAO,OAIA,OAHA,OAAAA,GAAA,MAAAX,IACAW,EAAA1B,EAAAyD,KAAA1C,EAAAW,KAGAA,SACAH,cAAAJ,EAAAI,cACAE,gBAAAN,EAAAM,gBACAI,aAAAV,EAAAU,aACAC,eAAAX,EAAAW,eACAC,KAAA,OAAAZ,EAAAY,KAAA,KAAA/C,KAAAsB,OAAA8L,GAAAjL,EAAAY,QAEK/C,MAAAkD,QAAA2K,EAAA+B,IAsBLhP,EAAAe,UAAAqO,yBACA,SAAAlP,GACA,GAAAwB,GAAAtB,EAAAC,OAAAH,EAAA,QAMAmP,GACAvN,OAAA1B,EAAAC,OAAAH,EAAA,UACA+B,aAAAP,EACAQ,eAAA9B,EAAAC,OAAAH,EAAA,YAMA,IAHA,MAAAd,KAAA+B,aACAkO,EAAAvN,OAAA1B,EAAA2B,SAAA3C,KAAA+B,WAAAkO,EAAAvN,UAEA1C,KAAAoB,SAAAqC,IAAAwM,EAAAvN,QACA,QAEAuN,GAAAvN,OAAA1C,KAAAoB,SAAA6E,QAAAgK,EAAAvN,OAEA,IAAAiD,MAEAqF,EAAAhL,KAAAkQ,aAAAD,EACAjQ,KAAA+P,kBACA,eACA,iBACA/O,EAAAyK,2BACAsD,EAAAU,kBACA,IAAAzE,GAAA,GACA,GAAA7I,GAAAnC,KAAA+P,kBAAA/E,EAEA,IAAAmF,SAAArP,EAAA0B,OAOA,IANA,GAAAK,GAAAV,EAAAU,aAMAV,KAAAU,kBACA8C,EAAAuH,MACA5K,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAiO,WAAApP,EAAAC,OAAAkB,EAAA,8BAGAA,EAAAnC,KAAA+P,oBAAA/E,OASA,KANA,GAAAlI,GAAAX,EAAAW,eAMAX,GACAA,EAAAU,eAAAP,GACAH,EAAAW,mBACA6C,EAAAuH,MACA5K,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAiO,WAAApP,EAAAC,OAAAkB,EAAA,8BAGAA,EAAAnC,KAAA+P,oBAAA/E,GAKA,MAAArF,IAGA/F,EAAAgB,oBAmFA0N,EAAA3M,UAAAkC,OAAAC,OAAAlD,EAAAe,WACA2M,EAAA3M,UAAAmN,SAAAlO,EASA0N,EAAAzM,cACA,SAAAoM,GACA,GAAAoC,GAAAxM,OAAAC,OAAAwK,EAAA3M,WAEA+E,EAAA2J,EAAA/O,OAAAD,EAAAoL,UAAAwB,EAAA3M,OAAAsE,WAAA,GACA3C,EAAAoN,EAAAjP,SAAAC,EAAAoL,UAAAwB,EAAA7M,SAAAwE,WAAA,EACAyK,GAAAtO,WAAAkM,EAAA/M,YACAmP,EAAA1J,eAAAsH,EAAA/H,wBAAAmK,EAAAjP,SAAAwE,UACAyK,EAAAtO,YACAsO,EAAApO,KAAAgM,EAAAlN,KAWA,QAJAuP,GAAArC,EAAA1M,UAAAqE,UAAAsF,QACAqF,EAAAF,EAAApB,uBACAuB,EAAAH,EAAAjB,sBAEAvJ,EAAA,EAAA5B,EAAAqM,EAAArM,OAAsD4B,EAAA5B,EAAY4B,IAAA,CAClE,GAAA4K,GAAAH,EAAAzK,GACA6K,EAAA,GAAAnC,EACAmC,GAAAnO,cAAAkO,EAAAlO,cACAmO,EAAAjO,gBAAAgO,EAAAhO,gBAEAgO,EAAA/N,SACAgO,EAAAhO,OAAAO,EAAAgD,QAAAwK,EAAA/N,QACAgO,EAAA7N,aAAA4N,EAAA5N,aACA6N,EAAA5N,eAAA2N,EAAA3N,eAEA2N,EAAA1N,OACA2N,EAAA3N,KAAA2D,EAAAT,QAAAwK,EAAA1N,OAGAyN,EAAAtD,KAAAwD,IAGAH,EAAArD,KAAAwD,GAKA,MAFA1B,GAAAqB,EAAAjB,mBAAApO,EAAAyK,4BAEA4E,GAMA/B,EAAA3M,UAAAC,SAAA,EAKAiC,OAAAqL,eAAAZ,EAAA3M,UAAA,WACAwL,IAAA,WACA,MAAAnN,MAAAoB,SAAAwE,UAAAS,IAAA,SAAAiF,GACA,aAAAtL,KAAA+B,WAAAf,EAAAyD,KAAAzE,KAAA+B,WAAAuJ,MACKtL,SAqBLsO,EAAA3M,UAAAwN,eACA,SAAAxH,EAAAvB,GAeA,IAdA,GAYAjE,GAAAwO,EAAAC,EAAAC,EAAA1I,EAZA5F,EAAA,EACA6C,EAAA,EACAG,EAAA,EACAD,EAAA,EACAG,EAAA,EACAD,EAAA,EACAvB,EAAA0D,EAAA1D,OACA+G,EAAA,EACA8F,KACAC,KACAC,KACAV,KAGAtF,EAAA/G,GACA,SAAA0D,EAAAO,OAAA8C,GACAzI,IACAyI,IACA5F,EAAA,MAEA,UAAAuC,EAAAO,OAAA8C,GACAA,QAEA,CASA,IARA7I,EAAA,GAAAoM,GACApM,EAAAI,gBAOAsO,EAAA7F,EAAyB6F,EAAA5M,IACzBjE,KAAAqP,wBAAA1H,EAAAkJ,GADuCA,KAQvC,GAHAF,EAAAhJ,EAAAuD,MAAAF,EAAA6F,GAEAD,EAAAE,EAAAH,GAEA3F,GAAA2F,EAAA1M,WACS,CAET,IADA2M,KACA5F,EAAA6F,GACAnP,EAAAgG,OAAAC,EAAAqD,EAAA+F,GACA5I,EAAA4I,EAAA5I,MACA6C,EAAA+F,EAAA3I,KACAwI,EAAA1D,KAAA/E,EAGA,QAAAyI,EAAA3M,OACA,SAAAG,OAAA,yCAGA,QAAAwM,EAAA3M,OACA,SAAAG,OAAA,yCAGA0M,GAAAH,GAAAC,EAIAzO,EAAAM,gBAAA2C,EAAAwL,EAAA,GACAxL,EAAAjD,EAAAM,gBAEAmO,EAAA3M,OAAA,IAEA9B,EAAAO,OAAA+C,EAAAmL,EAAA,GACAnL,GAAAmL,EAAA,GAGAzO,EAAAU,aAAA0C,EAAAqL,EAAA,GACArL,EAAApD,EAAAU,aAEAV,EAAAU,cAAA,EAGAV,EAAAW,eAAAwC,EAAAsL,EAAA,GACAtL,EAAAnD,EAAAW,eAEA8N,EAAA3M,OAAA,IAEA9B,EAAAY,KAAAyC,EAAAoL,EAAA,GACApL,GAAAoL,EAAA,KAIAN,EAAApD,KAAA/K,GACA,gBAAAA,GAAAU,cACAmO,EAAA9D,KAAA/K,GAKA6M,EAAAsB,EAAAtP,EAAA8K,qCACA9L,KAAAiP,oBAAAqB,EAEAtB,EAAAgC,EAAAhQ,EAAAyK,4BACAzL,KAAAoP,mBAAA4B,GAOA1C,EAAA3M,UAAAuO,aACA,SAAAe,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,GAMA,GAAAL,EAAAE,IAAA,EACA,SAAA3I,WAAA,gDACAyI,EAAAE,GAEA,IAAAF,EAAAG,GAAA,EACA,SAAA5I,WAAA,kDACAyI,EAAAG,GAGA,OAAArC,GAAAwC,OAAAN,EAAAC,EAAAG,EAAAC,IAOAhD,EAAA3M,UAAA6P,mBACA,WACA,OAAAxG,GAAA,EAAuBA,EAAAhL,KAAA8P,mBAAA7L,SAAwC+G,EAAA,CAC/D,GAAA7I,GAAAnC,KAAA8P,mBAAA9E,EAMA,IAAAA,EAAA,EAAAhL,KAAA8P,mBAAA7L,OAAA,CACA,GAAAwN,GAAAzR,KAAA8P,mBAAA9E,EAAA,EAEA,IAAA7I,EAAAI,gBAAAkP,EAAAlP,cAAA,CACAJ,EAAAuP,oBAAAD,EAAAhP,gBAAA,CACA,WAKAN,EAAAuP,oBAAAC,MAwBArD,EAAA3M,UAAA6C,oBACA,SAAA1D,GACA,GAAAmP,IACA1N,cAAAvB,EAAAC,OAAAH,EAAA,QACA2B,gBAAAzB,EAAAC,OAAAH,EAAA,WAGAkK,EAAAhL,KAAAkQ,aACAD,EACAjQ,KAAA8P,mBACA,gBACA,kBACA9O,EAAA8K,oCACA9K,EAAAC,OAAAH,EAAA,OAAAF,EAAA4O,sBAGA,IAAAxE,GAAA,GACA,GAAA7I,GAAAnC,KAAA8P,mBAAA9E,EAEA,IAAA7I,EAAAI,gBAAA0N,EAAA1N,cAAA,CACA,GAAAG,GAAA1B,EAAAC,OAAAkB,EAAA,cACA,QAAAO,IACAA,EAAA1C,KAAAoB,SAAAgM,GAAA1K,GACA,MAAA1C,KAAA+B,aACAW,EAAA1B,EAAAyD,KAAAzE,KAAA+B,WAAAW,IAGA,IAAAK,GAAA/B,EAAAC,OAAAkB,EAAA,YAIA,OAHA,QAAAY,IACAA,EAAA/C,KAAAsB,OAAA8L,GAAArK,KAGAL,SACAJ,KAAAtB,EAAAC,OAAAkB,EAAA,qBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,uBACAY,SAKA,OACAL,OAAA,KACAJ,KAAA,KACAE,OAAA,KACAO,KAAA,OAQAuL,EAAA3M,UAAAiQ,wBACA,WACA,QAAA5R,KAAA2G,iBAGA3G,KAAA2G,eAAA1C,QAAAjE,KAAAoB,SAAAyL,SACA7M,KAAA2G,eAAAkL,KAAA,SAAAC,GAA+C,aAAAA,MAQ/CxD,EAAA3M,UAAA0B,iBACA,SAAAuB,EAAAmN,GACA,IAAA/R,KAAA2G,eACA,WAOA,IAJA,MAAA3G,KAAA+B,aACA6C,EAAA5D,EAAA2B,SAAA3C,KAAA+B,WAAA6C,IAGA5E,KAAAoB,SAAAqC,IAAAmB,GACA,MAAA5E,MAAA2G,eAAA3G,KAAAoB,SAAA6E,QAAArB,GAGA,IAAAqF,EACA,UAAAjK,KAAA+B,aACAkI,EAAAjJ,EAAAsI,SAAAtJ,KAAA+B,aAAA,CAKA,GAAAiQ,GAAApN,EAAAkG,QAAA,gBACA,YAAAb,EAAAP,QACA1J,KAAAoB,SAAAqC,IAAAuO,GACA,MAAAhS,MAAA2G,eAAA3G,KAAAoB,SAAA6E,QAAA+L,GAGA,MAAA/H,EAAAH,MAAA,KAAAG,EAAAH,OACA9J,KAAAoB,SAAAqC,IAAA,IAAAmB,GACA,MAAA5E,MAAA2G,eAAA3G,KAAAoB,SAAA6E,QAAA,IAAArB,IAQA,GAAAmN,EACA,WAGA,UAAA3N,OAAA,IAAAQ,EAAA,+BAuBA0J,EAAA3M,UAAAsQ,qBACA,SAAAnR,GACA,GAAA4B,GAAA1B,EAAAC,OAAAH,EAAA,SAIA,IAHA,MAAAd,KAAA+B,aACAW,EAAA1B,EAAA2B,SAAA3C,KAAA+B,WAAAW,KAEA1C,KAAAoB,SAAAqC,IAAAf,GACA,OACAJ,KAAA,KACAE,OAAA,KACA4N,WAAA,KAGA1N,GAAA1C,KAAAoB,SAAA6E,QAAAvD,EAEA,IAAAuN,IACAvN,SACAG,aAAA7B,EAAAC,OAAAH,EAAA,QACAgC,eAAA9B,EAAAC,OAAAH,EAAA,WAGAkK,EAAAhL,KAAAkQ,aACAD,EACAjQ,KAAA+P,kBACA,eACA,iBACA/O,EAAAyK,2BACAzK,EAAAC,OAAAH,EAAA,OAAAF,EAAA4O,sBAGA,IAAAxE,GAAA,GACA,GAAA7I,GAAAnC,KAAA+P,kBAAA/E,EAEA,IAAA7I,EAAAO,SAAAuN,EAAAvN,OACA,OACAJ,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAiO,WAAApP,EAAAC,OAAAkB,EAAA,6BAKA,OACAG,KAAA,KACAE,OAAA,KACA4N,WAAA,OAIAxQ,EAAA0O,yBA+FAD,EAAA1M,UAAAkC,OAAAC,OAAAlD,EAAAe,WACA0M,EAAA1M,UAAAuQ,YAAAtR,EAKAyN,EAAA1M,UAAAC,SAAA,EAKAiC,OAAAqL,eAAAb,EAAA1M,UAAA,WACAwL,IAAA,WAEA,OADAlK,MACA4C,EAAA,EAAmBA,EAAA7F,KAAAyO,UAAAxK,OAA2B4B,IAC9C,OAAAsM,GAAA,EAAqBA,EAAAnS,KAAAyO,UAAA5I,GAAAiJ,SAAA7L,QAAAgB,OAA+CkO,IACpElP,EAAAiK,KAAAlN,KAAAyO,UAAA5I,GAAAiJ,SAAA7L,QAAAkP,GAGA,OAAAlP,MAmBAoL,EAAA1M,UAAA6C,oBACA,SAAA1D,GACA,GAAAmP,IACA1N,cAAAvB,EAAAC,OAAAH,EAAA,QACA2B,gBAAAzB,EAAAC,OAAAH,EAAA,WAKAsR,EAAArD,EAAAwC,OAAAtB,EAAAjQ,KAAAyO,UACA,SAAAwB,EAAAoC,GACA,GAAAxG,GAAAoE,EAAA1N,cAAA8P,EAAAxD,gBAAAtM,aACA,OAAAsJ,GACAA,EAGAoE,EAAAxN,gBACA4P,EAAAxD,gBAAApM,kBAEA4P,EAAArS,KAAAyO,UAAA2D,EAEA,OAAAC,GASAA,EAAAvD,SAAAtK,qBACAlC,KAAA2N,EAAA1N,eACA8P,EAAAxD,gBAAAtM,cAAA,GACAC,OAAAyN,EAAAxN,iBACA4P,EAAAxD,gBAAAtM,gBAAA0N,EAAA1N,cACA8P,EAAAxD,gBAAApM,gBAAA,EACA,GACA6P,KAAAxR,EAAAwR,QAdA5P,OAAA,KACAJ,KAAA,KACAE,OAAA,KACAO,KAAA,OAmBAsL,EAAA1M,UAAAiQ,wBACA,WACA,MAAA5R,MAAAyO,UAAA8D,MAAA,SAAAjH,GACA,MAAAA,GAAAwD,SAAA8C,6BASAvD,EAAA1M,UAAA0B,iBACA,SAAAuB,EAAAmN,GACA,OAAAlM,GAAA,EAAmBA,EAAA7F,KAAAyO,UAAAxK,OAA2B4B,IAAA,CAC9C,GAAAwM,GAAArS,KAAAyO,UAAA5I,GAEAzC,EAAAiP,EAAAvD,SAAAzL,iBAAAuB,GAAA,EACA,IAAAxB,EACA,MAAAA,GAGA,GAAA2O,EACA,WAGA,UAAA3N,OAAA,IAAAQ,EAAA,+BAkBAyJ,EAAA1M,UAAAsQ,qBACA,SAAAnR,GACA,OAAA+E,GAAA,EAAmBA,EAAA7F,KAAAyO,UAAAxK,OAA2B4B,IAAA,CAC9C,GAAAwM,GAAArS,KAAAyO,UAAA5I,EAIA,IAAAwM,EAAAvD,SAAA7L,QAAAgD,QAAAjF,EAAAC,OAAAH,EAAA,iBAGA,GAAA0R,GAAAH,EAAAvD,SAAAmD,qBAAAnR,EACA,IAAA0R,EAAA,CACA,GAAAC,IACAnQ,KAAAkQ,EAAAlQ,MACA+P,EAAAxD,gBAAAtM,cAAA,GACAC,OAAAgQ,EAAAhQ,QACA6P,EAAAxD,gBAAAtM,gBAAAiQ,EAAAlQ,KACA+P,EAAAxD,gBAAApM,gBAAA,EACA,GAEA,OAAAgQ,KAIA,OACAnQ,KAAA,KACAE,OAAA,OASA6L,EAAA1M,UAAAwN,eACA,SAAAxH,EAAAvB,GACApG,KAAAiP,uBACAjP,KAAAoP,qBACA,QAAAvJ,GAAA,EAAmBA,EAAA7F,KAAAyO,UAAAxK,OAA2B4B,IAG9C,OAFAwM,GAAArS,KAAAyO,UAAA5I,GACA6M,EAAAL,EAAAvD,SAAAgB,mBACAqC,EAAA,EAAqBA,EAAAO,EAAAzO,OAA4BkO,IAAA,CACjD,GAAAhQ,GAAAuQ,EAAAP,GAEAzP,EAAA2P,EAAAvD,SAAA1N,SAAAgM,GAAAjL,EAAAO,OACA,QAAA2P,EAAAvD,SAAA/M,aACAW,EAAA1B,EAAAyD,KAAA4N,EAAAvD,SAAA/M,WAAAW,IAEA1C,KAAAoB,SAAAsC,IAAAhB,GACAA,EAAA1C,KAAAoB,SAAA6E,QAAAvD,EAEA,IAAAK,GAAAsP,EAAAvD,SAAAxN,OAAA8L,GAAAjL,EAAAY,KACA/C,MAAAsB,OAAAoC,IAAAX,GACAA,EAAA/C,KAAAsB,OAAA2E,QAAAlD,EAMA,IAAA4P,IACAjQ,SACAH,cAAAJ,EAAAI,eACA8P,EAAAxD,gBAAAtM,cAAA,GACAE,gBAAAN,EAAAM,iBACA4P,EAAAxD,gBAAAtM,gBAAAJ,EAAAI,cACA8P,EAAAxD,gBAAApM,gBAAA,EACA,GACAI,aAAAV,EAAAU,aACAC,eAAAX,EAAAW,eACAC,OAGA/C,MAAAiP,oBAAA/B,KAAAyF,GACA,gBAAAA,GAAA9P,cACA7C,KAAAoP,mBAAAlC,KAAAyF,GAKA3D,EAAAhP,KAAAiP,oBAAAjO,EAAA8K,qCACAkD,EAAAhP,KAAAoP,mBAAApO,EAAAyK,6BAGA7L,EAAAyO,4BTu0CM,SAAUxO,EAAQD,GUz2ExB,QAAAgT,GAAAC,EAAAC,EAAA7B,EAAA8B,EAAAC,EAAA1B,GAUA,GAAA2B,GAAAC,KAAAC,OAAAL,EAAAD,GAAA,GAAAA,EACAhH,EAAAmH,EAAA/B,EAAA8B,EAAAE,IAAA,EACA,YAAApH,EAEAoH,EAEApH,EAAA,EAEAiH,EAAAG,EAAA,EAEAL,EAAAK,EAAAH,EAAA7B,EAAA8B,EAAAC,EAAA1B,GAKAA,GAAA1R,EAAA6P,kBACAqD,EAAAC,EAAA9O,OAAA6O,GAAA,EAEAG,EAKAA,EAAAJ,EAAA,EAEAD,EAAAC,EAAAI,EAAAhC,EAAA8B,EAAAC,EAAA1B,GAIAA,GAAA1R,EAAA6P,kBACAwD,EAEAJ,EAAA,KAAAA,EA1DAjT,EAAA4P,qBAAA,EACA5P,EAAA6P,kBAAA,EAgFA7P,EAAA2R,OAAA,SAAAN,EAAA8B,EAAAC,EAAA1B,GACA,OAAAyB,EAAA9O,OACA,QAGA,IAAA+G,GAAA4H,GAAA,EAAAG,EAAA9O,OAAAgN,EAAA8B,EACAC,EAAA1B,GAAA1R,EAAA4P,qBACA,IAAAxE,EAAA,EACA,QAMA,MAAAA,EAAA,MACA,IAAAgI,EAAAD,EAAA/H,GAAA+H,EAAA/H,EAAA,UAGAA,CAGA,OAAAA,KVw4EM,SAAUnL,EAAQD,GW19ExB,QAAAwT,GAAAC,EAAAC,EAAAC,GACA,GAAAxC,GAAAsC,EAAAC,EACAD,GAAAC,GAAAD,EAAAE,GACAF,EAAAE,GAAAxC,EAWA,QAAAyC,GAAAC,EAAAC,GACA,MAAAR,MAAAS,MAAAF,EAAAP,KAAAU,UAAAF,EAAAD,IAeA,QAAAI,GAAAR,EAAAS,EAAApT,EAAAqT,GAKA,GAAArT,EAAAqT,EAAA,CAYA,GAAAC,GAAAR,EAAA9S,EAAAqT,GACAlO,EAAAnF,EAAA,CAEA0S,GAAAC,EAAAW,EAAAD,EASA,QARAE,GAAAZ,EAAAU,GAQA5B,EAAAzR,EAAmByR,EAAA4B,EAAO5B,IAC1B2B,EAAAT,EAAAlB,GAAA8B,IAAA,IACApO,GAAA,EACAuN,EAAAC,EAAAxN,EAAAsM,GAIAiB,GAAAC,EAAAxN,EAAA,EAAAsM,EACA,IAAA+B,GAAArO,EAAA,CAIAgO,GAAAR,EAAAS,EAAApT,EAAAwT,EAAA,GACAL,EAAAR,EAAAS,EAAAI,EAAA,EAAAH,IAYAnU,EAAAoP,UAAA,SAAAqE,EAAAS,GACAD,EAAAR,EAAAS,EAAA,EAAAT,EAAApP,OAAA,KX6/EM,SAAUpE,EAAQD,EAASM,GY3kFjC,QAAAW,GAAAsT,EAAAC,EAAAxP,EAAAyP,EAAAxP,GACA7E,KAAAsU,YACAtU,KAAAuU,kBACAvU,KAAAsC,KAAA,MAAA6R,EAAA,KAAAA,EACAnU,KAAAwC,OAAA,MAAA4R,EAAA,KAAAA,EACApU,KAAA0C,OAAA,MAAAkC,EAAA,KAAAA,EACA5E,KAAA+C,KAAA,MAAA8B,EAAA,KAAAA,EACA7E,KAAAwU,IAAA,EACA,MAAAH,GAAArU,KAAA0D,IAAA2Q,GAnCA,GAAA1T,GAAAT,EAAA,GAAAS,mBACAK,EAAAd,EAAA,GAIAuU,EAAA,UAGAC,EAAA,GAKAF,EAAA,oBAiCA3T,GAAA8T,wBACA,SAAAC,EAAA9S,EAAA+S,GA+FA,QAAAC,GAAA3S,EAAA4S,GACA,UAAA5S,GAAAgO,SAAAhO,EAAAO,OACAsS,EAAAtR,IAAAqR,OACO,CACP,GAAArS,GAAAmS,EACA7T,EAAAyD,KAAAoQ,EAAA1S,EAAAO,QACAP,EAAAO,MACAsS,GAAAtR,IAAA,GAAA7C,GAAAsB,EAAAU,aACAV,EAAAW,eACAJ,EACAqS,EACA5S,EAAAY,QAvGA,GAAAiS,GAAA,GAAAnU,GAMAoU,EAAAL,EAAAtM,MAAAmM,GACAS,EAAA,EACAC,EAAA,WAMA,QAAAC,KACA,MAAAF,GAAAD,EAAAhR,OACAgR,EAAAC,KAAA/E,OAPA,GAAAkF,GAAAD,IAEAE,EAAAF,KAAA,EACA,OAAAC,GAAAC,GASAC,EAAA,EAAA7D,EAAA,EAKA8D,EAAA,IAgEA,OA9DA1T,GAAAI,YAAA,SAAAC,GACA,UAAAqT,EAAA,CAGA,KAAAD,EAAApT,EAAAI,eAMS,CAIT,GAAAkT,GAAAR,EAAAC,GACAH,EAAAU,EAAArK,OAAA,EAAAjJ,EAAAM,gBACAiP,EAOA,OANAuD,GAAAC,GAAAO,EAAArK,OAAAjJ,EAAAM,gBACAiP,GACAA,EAAAvP,EAAAM,gBACAqS,EAAAU,EAAAT,QAEAS,EAAArT,GAhBA2S,EAAAU,EAAAL,KACAI,IACA7D,EAAA,EAqBA,KAAA6D,EAAApT,EAAAI,eACAyS,EAAAtR,IAAAyR,KACAI,GAEA,IAAA7D,EAAAvP,EAAAM,gBAAA,CACA,GAAAgT,GAAAR,EAAAC,EACAF,GAAAtR,IAAA+R,EAAArK,OAAA,EAAAjJ,EAAAM,kBACAwS,EAAAC,GAAAO,EAAArK,OAAAjJ,EAAAM,iBACAiP,EAAAvP,EAAAM,gBAEA+S,EAAArT,GACKnC,MAELkV,EAAAD,EAAAhR,SACAuR,GAEAV,EAAAU,EAAAL,KAGAH,EAAAtR,IAAAuR,EAAAzK,OAAA0K,GAAAzQ,KAAA,MAIA3C,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAC,GAAAtB,EAAAuB,iBAAAF,EACA,OAAAC,IACA,MAAAyR,IACA1R,EAAAnC,EAAAyD,KAAAoQ,EAAA1R,IAEA6R,EAAA1R,iBAAAH,EAAAC,MAIA4R,GAwBAnU,EAAAc,UAAA+B,IAAA,SAAAgS,GACA,GAAAvK,MAAAwK,QAAAD,GACAA,EAAAxS,QAAA,SAAA0S,GACA5V,KAAA0D,IAAAkS,IACK5V,UAEL,KAAA0V,EAAAlB,IAAA,gBAAAkB,GAMA,SAAAlN,WACA,8EAAAkN,EANAA,IACA1V,KAAAsU,SAAApH,KAAAwI,GAQA,MAAA1V,OASAa,EAAAc,UAAAkU,QAAA,SAAAH,GACA,GAAAvK,MAAAwK,QAAAD,GACA,OAAA7P,GAAA6P,EAAAzR,OAAA,EAAiC4B,GAAA,EAAQA,IACzC7F,KAAA6V,QAAAH,EAAA7P,QAGA,KAAA6P,EAAAlB,IAAA,gBAAAkB,GAIA,SAAAlN,WACA,8EAAAkN,EAJA1V,MAAAsU,SAAAwB,QAAAJ,GAOA,MAAA1V,OAUAa,EAAAc,UAAAoU,KAAA,SAAAC,GAEA,OADAJ,GACA/P,EAAA,EAAAC,EAAA9F,KAAAsU,SAAArQ,OAA6C4B,EAAAC,EAASD,IACtD+P,EAAA5V,KAAAsU,SAAAzO,GACA+P,EAAApB,GACAoB,EAAAG,KAAAC,GAGA,KAAAJ,GACAI,EAAAJ,GAAoBlT,OAAA1C,KAAA0C,OACpBJ,KAAAtC,KAAAsC,KACAE,OAAAxC,KAAAwC,OACAO,KAAA/C,KAAA+C,QAYAlC,EAAAc,UAAA8C,KAAA,SAAAwR,GACA,GAAAC,GACArQ,EACAC,EAAA9F,KAAAsU,SAAArQ,MACA,IAAA6B,EAAA,GAEA,IADAoQ,KACArQ,EAAA,EAAeA,EAAAC,EAAA,EAAWD,IAC1BqQ,EAAAhJ,KAAAlN,KAAAsU,SAAAzO,IACAqQ,EAAAhJ,KAAA+I,EAEAC,GAAAhJ,KAAAlN,KAAAsU,SAAAzO,IACA7F,KAAAsU,SAAA4B,EAEA,MAAAlW,OAUAa,EAAAc,UAAAwU,aAAA,SAAAC,EAAAC,GACA,GAAAC,GAAAtW,KAAAsU,SAAAtU,KAAAsU,SAAArQ,OAAA,EAUA,OATAqS,GAAA9B,GACA8B,EAAAH,aAAAC,EAAAC,GAEA,gBAAAC,GACAtW,KAAAsU,SAAAtU,KAAAsU,SAAArQ,OAAA,GAAAqS,EAAAxL,QAAAsL,EAAAC,GAGArW,KAAAsU,SAAApH,KAAA,GAAApC,QAAAsL,EAAAC,IAEArW,MAUAa,EAAAc,UAAA2B,iBACA,SAAAK,EAAAC,GACA5D,KAAAuU,eAAAvT,EAAA+C,YAAAJ,IAAAC,GASA/C,EAAAc,UAAA4U,mBACA,SAAAP,GACA,OAAAnQ,GAAA,EAAAC,EAAA9F,KAAAsU,SAAArQ,OAA+C4B,EAAAC,EAASD,IACxD7F,KAAAsU,SAAAzO,GAAA2O,IACAxU,KAAAsU,SAAAzO,GAAA0Q,mBAAAP,EAKA,QADA/S,GAAAY,OAAAG,KAAAhE,KAAAuU,gBACA1O,EAAA,EAAAC,EAAA7C,EAAAgB,OAAyC4B,EAAAC,EAASD,IAClDmQ,EAAAhV,EAAAwK,cAAAvI,EAAA4C,IAAA7F,KAAAuU,eAAAtR,EAAA4C,MAQAhF,EAAAc,UAAAiF,SAAA,WACA,GAAA+J,GAAA,EAIA,OAHA3Q,MAAA+V,KAAA,SAAAH,GACAjF,GAAAiF,IAEAjF,GAOA9P,EAAAc,UAAA6U,sBAAA,SAAA1V,GACA,GAAAuB,IACA0S,KAAA,GACAzS,KAAA,EACAE,OAAA,GAEA6D,EAAA,GAAA1F,GAAAG,GACA2V,GAAA,EACAC,EAAA,KACAC,EAAA,KACAC,EAAA,KACAC,EAAA,IAqEA,OApEA7W,MAAA+V,KAAA,SAAAH,EAAAhT,GACAP,EAAA0S,MAAAa,EACA,OAAAhT,EAAAF,QACA,OAAAE,EAAAN,MACA,OAAAM,EAAAJ,QACAkU,IAAA9T,EAAAF,QACAiU,IAAA/T,EAAAN,MACAsU,IAAAhU,EAAAJ,QACAqU,IAAAjU,EAAAG,MACAsD,EAAArD,YACAN,OAAAE,EAAAF,OACAE,UACAN,KAAAM,EAAAN,KACAE,OAAAI,EAAAJ,QAEAH,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,QAEAO,KAAAH,EAAAG,OAGA2T,EAAA9T,EAAAF,OACAiU,EAAA/T,EAAAN,KACAsU,EAAAhU,EAAAJ,OACAqU,EAAAjU,EAAAG,KACA0T,GAAA,GACKA,IACLpQ,EAAArD,YACAX,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,UAGAkU,EAAA,KACAD,GAAA,EAEA,QAAAxJ,GAAA,EAAAhJ,EAAA2R,EAAA3R,OAA4CgJ,EAAAhJ,EAAcgJ,IAC1D2I,EAAA3N,WAAAgF,KAAAyH,GACArS,EAAAC,OACAD,EAAAG,OAAA,EAEAyK,EAAA,IAAAhJ,GACAyS,EAAA,KACAD,GAAA,GACSA,GACTpQ,EAAArD,YACAN,OAAAE,EAAAF,OACAE,UACAN,KAAAM,EAAAN,KACAE,OAAAI,EAAAJ,QAEAH,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,QAEAO,KAAAH,EAAAG,QAIAV,EAAAG,WAIAxC,KAAAuW,mBAAA,SAAApT,EAAA2T,GACAzQ,EAAA/C,iBAAAH,EAAA2T,MAGU/B,KAAA1S,EAAA0S,KAAA1O,QAGVzG,EAAAiB","file":"source-map.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t * Copyright 2009-2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE.txt or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\texports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\texports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;\n\texports.SourceNode = __webpack_require__(10).SourceNode;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar base64VLQ = __webpack_require__(2);\n\tvar util = __webpack_require__(4);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar MappingList = __webpack_require__(6).MappingList;\n\t\n\t/**\n\t * An instance of the SourceMapGenerator represents a source map which is\n\t * being built incrementally. You may pass an object with the following\n\t * properties:\n\t *\n\t * - file: The filename of the generated source.\n\t * - sourceRoot: A root for all relative URLs in this source map.\n\t */\n\tfunction SourceMapGenerator(aArgs) {\n\t if (!aArgs) {\n\t aArgs = {};\n\t }\n\t this._file = util.getArg(aArgs, 'file', null);\n\t this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n\t this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t this._mappings = new MappingList();\n\t this._sourcesContents = null;\n\t}\n\t\n\tSourceMapGenerator.prototype._version = 3;\n\t\n\t/**\n\t * Creates a new SourceMapGenerator based on a SourceMapConsumer\n\t *\n\t * @param aSourceMapConsumer The SourceMap.\n\t */\n\tSourceMapGenerator.fromSourceMap =\n\t function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n\t var sourceRoot = aSourceMapConsumer.sourceRoot;\n\t var generator = new SourceMapGenerator({\n\t file: aSourceMapConsumer.file,\n\t sourceRoot: sourceRoot\n\t });\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t var newMapping = {\n\t generated: {\n\t line: mapping.generatedLine,\n\t column: mapping.generatedColumn\n\t }\n\t };\n\t\n\t if (mapping.source != null) {\n\t newMapping.source = mapping.source;\n\t if (sourceRoot != null) {\n\t newMapping.source = util.relative(sourceRoot, newMapping.source);\n\t }\n\t\n\t newMapping.original = {\n\t line: mapping.originalLine,\n\t column: mapping.originalColumn\n\t };\n\t\n\t if (mapping.name != null) {\n\t newMapping.name = mapping.name;\n\t }\n\t }\n\t\n\t generator.addMapping(newMapping);\n\t });\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t generator.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t return generator;\n\t };\n\t\n\t/**\n\t * Add a single mapping from original source line and column to the generated\n\t * source's line and column for this source map being created. The mapping\n\t * object should have the following properties:\n\t *\n\t * - generated: An object with the generated line and column positions.\n\t * - original: An object with the original line and column positions.\n\t * - source: The original source file (relative to the sourceRoot).\n\t * - name: An optional original token name for this mapping.\n\t */\n\tSourceMapGenerator.prototype.addMapping =\n\t function SourceMapGenerator_addMapping(aArgs) {\n\t var generated = util.getArg(aArgs, 'generated');\n\t var original = util.getArg(aArgs, 'original', null);\n\t var source = util.getArg(aArgs, 'source', null);\n\t var name = util.getArg(aArgs, 'name', null);\n\t\n\t if (!this._skipValidation) {\n\t this._validateMapping(generated, original, source, name);\n\t }\n\t\n\t if (source != null) {\n\t source = String(source);\n\t if (!this._sources.has(source)) {\n\t this._sources.add(source);\n\t }\n\t }\n\t\n\t if (name != null) {\n\t name = String(name);\n\t if (!this._names.has(name)) {\n\t this._names.add(name);\n\t }\n\t }\n\t\n\t this._mappings.add({\n\t generatedLine: generated.line,\n\t generatedColumn: generated.column,\n\t originalLine: original != null && original.line,\n\t originalColumn: original != null && original.column,\n\t source: source,\n\t name: name\n\t });\n\t };\n\t\n\t/**\n\t * Set the source content for a source file.\n\t */\n\tSourceMapGenerator.prototype.setSourceContent =\n\t function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n\t var source = aSourceFile;\n\t if (this._sourceRoot != null) {\n\t source = util.relative(this._sourceRoot, source);\n\t }\n\t\n\t if (aSourceContent != null) {\n\t // Add the source content to the _sourcesContents map.\n\t // Create a new _sourcesContents map if the property is null.\n\t if (!this._sourcesContents) {\n\t this._sourcesContents = Object.create(null);\n\t }\n\t this._sourcesContents[util.toSetString(source)] = aSourceContent;\n\t } else if (this._sourcesContents) {\n\t // Remove the source file from the _sourcesContents map.\n\t // If the _sourcesContents map is empty, set the property to null.\n\t delete this._sourcesContents[util.toSetString(source)];\n\t if (Object.keys(this._sourcesContents).length === 0) {\n\t this._sourcesContents = null;\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Applies the mappings of a sub-source-map for a specific source file to the\n\t * source map being generated. Each mapping to the supplied source file is\n\t * rewritten using the supplied source map. Note: The resolution for the\n\t * resulting mappings is the minimium of this map and the supplied map.\n\t *\n\t * @param aSourceMapConsumer The source map to be applied.\n\t * @param aSourceFile Optional. The filename of the source file.\n\t * If omitted, SourceMapConsumer's file property will be used.\n\t * @param aSourceMapPath Optional. The dirname of the path to the source map\n\t * to be applied. If relative, it is relative to the SourceMapConsumer.\n\t * This parameter is needed when the two source maps aren't in the same\n\t * directory, and the source map to be applied contains relative source\n\t * paths. If so, those relative source paths need to be rewritten\n\t * relative to the SourceMapGenerator.\n\t */\n\tSourceMapGenerator.prototype.applySourceMap =\n\t function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n\t var sourceFile = aSourceFile;\n\t // If aSourceFile is omitted, we will use the file property of the SourceMap\n\t if (aSourceFile == null) {\n\t if (aSourceMapConsumer.file == null) {\n\t throw new Error(\n\t 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n\t 'or the source map\\'s \"file\" property. Both were omitted.'\n\t );\n\t }\n\t sourceFile = aSourceMapConsumer.file;\n\t }\n\t var sourceRoot = this._sourceRoot;\n\t // Make \"sourceFile\" relative if an absolute Url is passed.\n\t if (sourceRoot != null) {\n\t sourceFile = util.relative(sourceRoot, sourceFile);\n\t }\n\t // Applying the SourceMap can add and remove items from the sources and\n\t // the names array.\n\t var newSources = new ArraySet();\n\t var newNames = new ArraySet();\n\t\n\t // Find mappings for the \"sourceFile\"\n\t this._mappings.unsortedForEach(function (mapping) {\n\t if (mapping.source === sourceFile && mapping.originalLine != null) {\n\t // Check if it can be mapped by the source map, then update the mapping.\n\t var original = aSourceMapConsumer.originalPositionFor({\n\t line: mapping.originalLine,\n\t column: mapping.originalColumn\n\t });\n\t if (original.source != null) {\n\t // Copy mapping\n\t mapping.source = original.source;\n\t if (aSourceMapPath != null) {\n\t mapping.source = util.join(aSourceMapPath, mapping.source)\n\t }\n\t if (sourceRoot != null) {\n\t mapping.source = util.relative(sourceRoot, mapping.source);\n\t }\n\t mapping.originalLine = original.line;\n\t mapping.originalColumn = original.column;\n\t if (original.name != null) {\n\t mapping.name = original.name;\n\t }\n\t }\n\t }\n\t\n\t var source = mapping.source;\n\t if (source != null && !newSources.has(source)) {\n\t newSources.add(source);\n\t }\n\t\n\t var name = mapping.name;\n\t if (name != null && !newNames.has(name)) {\n\t newNames.add(name);\n\t }\n\t\n\t }, this);\n\t this._sources = newSources;\n\t this._names = newNames;\n\t\n\t // Copy sourcesContents of applied map.\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aSourceMapPath != null) {\n\t sourceFile = util.join(aSourceMapPath, sourceFile);\n\t }\n\t if (sourceRoot != null) {\n\t sourceFile = util.relative(sourceRoot, sourceFile);\n\t }\n\t this.setSourceContent(sourceFile, content);\n\t }\n\t }, this);\n\t };\n\t\n\t/**\n\t * A mapping can have one of the three levels of data:\n\t *\n\t * 1. Just the generated position.\n\t * 2. The Generated position, original position, and original source.\n\t * 3. Generated and original position, original source, as well as a name\n\t * token.\n\t *\n\t * To maintain consistency, we validate that any new mapping being added falls\n\t * in to one of these categories.\n\t */\n\tSourceMapGenerator.prototype._validateMapping =\n\t function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n\t aName) {\n\t // When aOriginal is truthy but has empty values for .line and .column,\n\t // it is most likely a programmer error. In this case we throw a very\n\t // specific error message to try to guide them the right way.\n\t // For example: https://github.com/Polymer/polymer-bundler/pull/519\n\t if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n\t throw new Error(\n\t 'original.line and original.column are not numbers -- you probably meant to omit ' +\n\t 'the original mapping entirely and only map the generated position. If so, pass ' +\n\t 'null for the original mapping instead of an object with empty or null values.'\n\t );\n\t }\n\t\n\t if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap)\n\t : new BasicSourceMapConsumer(sourceMap);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t if (source != null && sourceRoot != null) {\n\t source = util.join(sourceRoot, source);\n\t }\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: Optional. the column number in the original source.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t if (this.sourceRoot != null) {\n\t needle.source = util.relative(this.sourceRoot, needle.source);\n\t }\n\t if (!this._sources.has(needle.source)) {\n\t return [];\n\t }\n\t needle.source = this._sources.indexOf(needle.source);\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The only parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._sources.toArray().map(function (s) {\n\t return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n\t }, this);\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t if (this.sourceRoot != null) {\n\t source = util.join(this.sourceRoot, source);\n\t }\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t if (this.sourceRoot != null) {\n\t aSource = util.relative(this.sourceRoot, aSource);\n\t }\n\t\n\t if (this._sources.has(aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(aSource)];\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t if (this.sourceRoot != null) {\n\t source = util.relative(this.sourceRoot, source);\n\t }\n\t if (!this._sources.has(source)) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t source = this._sources.indexOf(source);\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The only parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t if (section.consumer.sourceRoot !== null) {\n\t source = util.join(section.consumer.sourceRoot, source);\n\t }\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 42c329f865e32e011afb","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex];\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex];\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/.pnpm-store/v11/files/24/4ddae4459ab4cb6098fb7f29ef4848f5db75283a48b94c555a06ae84a491c51b62287c13f58e6114424c1478faed1850b08eb9927be0bee1addf892c43a4eb b/.pnpm-store/v11/files/24/4ddae4459ab4cb6098fb7f29ef4848f5db75283a48b94c555a06ae84a491c51b62287c13f58e6114424c1478faed1850b08eb9927be0bee1addf892c43a4eb new file mode 100644 index 00000000..7a55160f --- /dev/null +++ b/.pnpm-store/v11/files/24/4ddae4459ab4cb6098fb7f29ef4848f5db75283a48b94c555a06ae84a491c51b62287c13f58e6114424c1478faed1850b08eb9927be0bee1addf892c43a4eb @@ -0,0 +1,21 @@ +Copyright JS Foundation and other contributors, https://js.foundation/ + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/.pnpm-store/v11/files/24/6049c3467ab25ce00a500fdf894793f021e05c7f7c1e07c57a95742f55e22cd7a703534d49f53825f52f013d68ee9ce7fdc7dd2a711f5fb2192309e1d9b0a0 b/.pnpm-store/v11/files/24/6049c3467ab25ce00a500fdf894793f021e05c7f7c1e07c57a95742f55e22cd7a703534d49f53825f52f013d68ee9ce7fdc7dd2a711f5fb2192309e1d9b0a0 new file mode 100644 index 00000000..13744352 --- /dev/null +++ b/.pnpm-store/v11/files/24/6049c3467ab25ce00a500fdf894793f021e05c7f7c1e07c57a95742f55e22cd7a703534d49f53825f52f013d68ee9ce7fdc7dd2a711f5fb2192309e1d9b0a0 @@ -0,0 +1,7 @@ +'use strict'; + + +var yaml = require('./lib/js-yaml.js'); + + +module.exports = yaml; diff --git a/.pnpm-store/v11/files/24/aa80b578b101540815f27efab348095061ec66a144775a0fccd3a9ac604312253f2996c005b67f2dbf26dd7d59155f785a37d5acccc8cee5497b4a5b23ad80 b/.pnpm-store/v11/files/24/aa80b578b101540815f27efab348095061ec66a144775a0fccd3a9ac604312253f2996c005b67f2dbf26dd7d59155f785a37d5acccc8cee5497b4a5b23ad80 new file mode 100644 index 00000000..ca1e30a7 --- /dev/null +++ b/.pnpm-store/v11/files/24/aa80b578b101540815f27efab348095061ec66a144775a0fccd3a9ac604312253f2996c005b67f2dbf26dd7d59155f785a37d5acccc8cee5497b4a5b23ad80 @@ -0,0 +1,94 @@ +module.exports = { + + /** + * ### config.includeStack + * + * User configurable property, influences whether stack trace + * is included in Assertion error message. Default of false + * suppresses stack trace in the error message. + * + * chai.config.includeStack = true; // enable stack on error + * + * @param {Boolean} + * @api public + */ + + includeStack: false, + + /** + * ### config.showDiff + * + * User configurable property, influences whether or not + * the `showDiff` flag should be included in the thrown + * AssertionErrors. `false` will always be `false`; `true` + * will be true when the assertion has requested a diff + * be shown. + * + * @param {Boolean} + * @api public + */ + + showDiff: true, + + /** + * ### config.truncateThreshold + * + * User configurable property, sets length threshold for actual and + * expected values in assertion errors. If this threshold is exceeded, for + * example for large data structures, the value is replaced with something + * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`. + * + * Set it to zero if you want to disable truncating altogether. + * + * This is especially userful when doing assertions on arrays: having this + * set to a reasonable large value makes the failure messages readily + * inspectable. + * + * chai.config.truncateThreshold = 0; // disable truncating + * + * @param {Number} + * @api public + */ + + truncateThreshold: 40, + + /** + * ### config.useProxy + * + * User configurable property, defines if chai will use a Proxy to throw + * an error when a non-existent property is read, which protects users + * from typos when using property-based assertions. + * + * Set it to false if you want to disable this feature. + * + * chai.config.useProxy = false; // disable use of Proxy + * + * This feature is automatically disabled regardless of this config value + * in environments that don't support proxies. + * + * @param {Boolean} + * @api public + */ + + useProxy: true, + + /** + * ### config.proxyExcludedKeys + * + * User configurable property, defines which properties should be ignored + * instead of throwing an error if they do not exist on the assertion. + * This is only applied if the environment Chai is running in supports proxies and + * if the `useProxy` configuration setting is enabled. + * By default, `then` and `inspect` will not throw an error if they do not exist on the + * assertion object because the `.inspect` property is read by `util.inspect` (for example, when + * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking. + * + * // By default these keys will not throw an error if they do not exist on the assertion object + * chai.config.proxyExcludedKeys = ['then', 'inspect']; + * + * @param {Array} + * @api public + */ + + proxyExcludedKeys: ['then', 'inspect', 'toJSON'] +}; diff --git a/.pnpm-store/v11/files/24/b8070dbebdd039460ea67e323df184f7581b2d4860d31c06cd74e009f48d4cc234fdd1d707cf54ad38a2fe11d7863208748f8d2b59aec571579d5fdf41cc97 b/.pnpm-store/v11/files/24/b8070dbebdd039460ea67e323df184f7581b2d4860d31c06cd74e009f48d4cc234fdd1d707cf54ad38a2fe11d7863208748f8d2b59aec571579d5fdf41cc97 new file mode 100644 index 00000000..e2d3b7a3 --- /dev/null +++ b/.pnpm-store/v11/files/24/b8070dbebdd039460ea67e323df184f7581b2d4860d31c06cd74e009f48d4cc234fdd1d707cf54ad38a2fe11d7863208748f8d2b59aec571579d5fdf41cc97 @@ -0,0 +1,31 @@ +var baseSortedIndex = require('./_baseSortedIndex'), + eq = require('./eq'); + +/** + * This method is like `_.indexOf` except that it performs a binary + * search on a sorted `array`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.sortedIndexOf([4, 5, 5, 5, 6], 5); + * // => 1 + */ +function sortedIndexOf(array, value) { + var length = array == null ? 0 : array.length; + if (length) { + var index = baseSortedIndex(array, value); + if (index < length && eq(array[index], value)) { + return index; + } + } + return -1; +} + +module.exports = sortedIndexOf; diff --git a/.pnpm-store/v11/files/24/cf138c696138d1e0754fd3a2f5ad6073dc79b501519cc834c502d7732cfeb900cf0f6f5eb4cb6a369f57b2787c073427ec45f51aa69bd5745d15757fc3f43e b/.pnpm-store/v11/files/24/cf138c696138d1e0754fd3a2f5ad6073dc79b501519cc834c502d7732cfeb900cf0f6f5eb4cb6a369f57b2787c073427ec45f51aa69bd5745d15757fc3f43e new file mode 100644 index 00000000..0bda8504 --- /dev/null +++ b/.pnpm-store/v11/files/24/cf138c696138d1e0754fd3a2f5ad6073dc79b501519cc834c502d7732cfeb900cf0f6f5eb4cb6a369f57b2787c073427ec45f51aa69bd5745d15757fc3f43e @@ -0,0 +1,50 @@ +var safe = require('../'); +var test = require('tape'); + +var good = [ + /\bOakland\b/, + /\b(Oakland|San Francisco)\b/i, + /^\d+1337\d+$/i, + /^\d+(1337|404)\d+$/i, + /^\d+(1337|404)*\d+$/i, + RegExp(Array(26).join('a?') + Array(26).join('a')), +]; + +test('safe regex', function (t) { + t.plan(good.length); + good.forEach(function (re) { + t.equal(safe(re), true); + }); +}); + + +var bad = [ + /^(a?){25}(a){25}$/, + RegExp(Array(27).join('a?') + Array(27).join('a')), + /(x+x+)+y/, + /foo|(x+x+)+y/, + /(a+){10}y/, + /(a+){2}y/, + /(.*){1,32000}[bc]/ +]; + +test('unsafe regex', function (t) { + t.plan(bad.length); + bad.forEach(function (re) { + t.equal(safe(re), false); + }); +}); + +var invalid = [ + '*Oakland*', + 'hey(yoo))', + 'abcde(?>hellow)', + '[abc' +]; + +test('invalid regex', function (t) { + t.plan(invalid.length); + invalid.forEach(function (re) { + t.equal(safe(re), false); + }); +}); diff --git a/.pnpm-store/v11/files/24/d232d23fff87faa3b3df7d780aaf5b239ee4383692ac2b77c5268800a11758e9ba019d1931af462ef58a833bda38ec3f95901600977c006d3c62c5eb0b944c b/.pnpm-store/v11/files/24/d232d23fff87faa3b3df7d780aaf5b239ee4383692ac2b77c5268800a11758e9ba019d1931af462ef58a833bda38ec3f95901600977c006d3c62c5eb0b944c new file mode 100644 index 00000000..39433936 --- /dev/null +++ b/.pnpm-store/v11/files/24/d232d23fff87faa3b3df7d780aaf5b239ee4383692ac2b77c5268800a11758e9ba019d1931af462ef58a833bda38ec3f95901600977c006d3c62c5eb0b944c @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').during; diff --git a/.pnpm-store/v11/files/24/d2a24c51bcfcee426f33b1ceb441419f35616f2fbb1224420f6d06f595e7f4c14bdec99f0aaa3f917f07f67f9b63901f08924b51be592596b8182825362aaf b/.pnpm-store/v11/files/24/d2a24c51bcfcee426f33b1ceb441419f35616f2fbb1224420f6d06f595e7f4c14bdec99f0aaa3f917f07f67f9b63901f08924b51be592596b8182825362aaf new file mode 100644 index 00000000..3eadd24d --- /dev/null +++ b/.pnpm-store/v11/files/24/d2a24c51bcfcee426f33b1ceb441419f35616f2fbb1224420f6d06f595e7f4c14bdec99f0aaa3f917f07f67f9b63901f08924b51be592596b8182825362aaf @@ -0,0 +1,13 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (coll) { + return iteratorSymbol && coll[iteratorSymbol] && coll[iteratorSymbol](); +}; + +var iteratorSymbol = typeof Symbol === 'function' && Symbol.iterator; + +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/24/ef8aab56a45f4c52e20df35b2f65dd58517c2298b4a6d24ff38df2911fc543032d2c647a81857c9fb17b623f6d623edc7268a9c9ab7c168ff7b2359161c218 b/.pnpm-store/v11/files/24/ef8aab56a45f4c52e20df35b2f65dd58517c2298b4a6d24ff38df2911fc543032d2c647a81857c9fb17b623f6d623edc7268a9c9ab7c168ff7b2359161c218 new file mode 100644 index 00000000..0ca8ba2b --- /dev/null +++ b/.pnpm-store/v11/files/24/ef8aab56a45f4c52e20df35b2f65dd58517c2298b4a6d24ff38df2911fc543032d2c647a81857c9fb17b623f6d623edc7268a9c9ab7c168ff7b2359161c218 @@ -0,0 +1,130 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (worker, concurrency) { + var _worker = (0, _wrapAsync2.default)(worker); + return (0, _queue2.default)(function (items, cb) { + _worker(items[0], cb); + }, concurrency, 1); +}; + +var _queue = require('./internal/queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * A queue of tasks for the worker function to complete. + * @typedef {Object} QueueObject + * @memberOf module:ControlFlow + * @property {Function} length - a function returning the number of items + * waiting to be processed. Invoke with `queue.length()`. + * @property {boolean} started - a boolean indicating whether or not any + * items have been pushed and processed by the queue. + * @property {Function} running - a function returning the number of items + * currently being processed. Invoke with `queue.running()`. + * @property {Function} workersList - a function returning the array of items + * currently being processed. Invoke with `queue.workersList()`. + * @property {Function} idle - a function returning false if there are items + * waiting or being processed, or true if not. Invoke with `queue.idle()`. + * @property {number} concurrency - an integer for determining how many `worker` + * functions should be run in parallel. This property can be changed after a + * `queue` is created to alter the concurrency on-the-fly. + * @property {Function} push - add a new task to the `queue`. Calls `callback` + * once the `worker` has finished processing the task. Instead of a single task, + * a `tasks` array can be submitted. The respective callback is used for every + * task in the list. Invoke with `queue.push(task, [callback])`, + * @property {Function} unshift - add a new task to the front of the `queue`. + * Invoke with `queue.unshift(task, [callback])`. + * @property {Function} remove - remove items from the queue that match a test + * function. The test function will be passed an object with a `data` property, + * and a `priority` property, if this is a + * [priorityQueue]{@link module:ControlFlow.priorityQueue} object. + * Invoked with `queue.remove(testFn)`, where `testFn` is of the form + * `function ({data, priority}) {}` and returns a Boolean. + * @property {Function} saturated - a callback that is called when the number of + * running workers hits the `concurrency` limit, and further tasks will be + * queued. + * @property {Function} unsaturated - a callback that is called when the number + * of running workers is less than the `concurrency` & `buffer` limits, and + * further tasks will not be queued. + * @property {number} buffer - A minimum threshold buffer in order to say that + * the `queue` is `unsaturated`. + * @property {Function} empty - a callback that is called when the last item + * from the `queue` is given to a `worker`. + * @property {Function} drain - a callback that is called when the last item + * from the `queue` has returned from the `worker`. + * @property {Function} error - a callback that is called when a task errors. + * Has the signature `function(error, task)`. + * @property {boolean} paused - a boolean for determining whether the queue is + * in a paused state. + * @property {Function} pause - a function that pauses the processing of tasks + * until `resume()` is called. Invoke with `queue.pause()`. + * @property {Function} resume - a function that resumes the processing of + * queued tasks when the queue is paused. Invoke with `queue.resume()`. + * @property {Function} kill - a function that removes the `drain` callback and + * empties remaining tasks from the queue forcing it to go idle. No more tasks + * should be pushed to the queue after calling this function. Invoke with `queue.kill()`. + */ + +/** + * Creates a `queue` object with the specified `concurrency`. Tasks added to the + * `queue` are processed in parallel (up to the `concurrency` limit). If all + * `worker`s are in progress, the task is queued until one becomes available. + * Once a `worker` completes a `task`, that `task`'s callback is called. + * + * @name queue + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {AsyncFunction} worker - An async function for processing a queued task. + * If you want to handle errors from an individual task, pass a callback to + * `q.push()`. Invoked with (task, callback). + * @param {number} [concurrency=1] - An `integer` for determining how many + * `worker` functions should be run in parallel. If omitted, the concurrency + * defaults to `1`. If the concurrency is `0`, an error is thrown. + * @returns {module:ControlFlow.QueueObject} A queue object to manage the tasks. Callbacks can + * attached as certain properties to listen for specific events during the + * lifecycle of the queue. + * @example + * + * // create a queue object with concurrency 2 + * var q = async.queue(function(task, callback) { + * console.log('hello ' + task.name); + * callback(); + * }, 2); + * + * // assign a callback + * q.drain = function() { + * console.log('all items have been processed'); + * }; + * + * // add some items to the queue + * q.push({name: 'foo'}, function(err) { + * console.log('finished processing foo'); + * }); + * q.push({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + * + * // add some items to the queue (batch-wise) + * q.push([{name: 'baz'},{name: 'bay'},{name: 'bax'}], function(err) { + * console.log('finished processing item'); + * }); + * + * // add some items to the front of the queue + * q.unshift({name: 'bar'}, function (err) { + * console.log('finished processing bar'); + * }); + */ \ No newline at end of file diff --git a/.pnpm-store/v11/files/24/f0f16255e0b41653eb89af3e9c6162536118c37e4fa003e623e8d39125bce8d2581f3ef9788991533f46294c21ffbbfaaf55d44150b3e62a686281d83db9f3 b/.pnpm-store/v11/files/24/f0f16255e0b41653eb89af3e9c6162536118c37e4fa003e623e8d39125bce8d2581f3ef9788991533f46294c21ffbbfaaf55d44150b3e62a686281d83db9f3 new file mode 100644 index 00000000..f1d0f13c --- /dev/null +++ b/.pnpm-store/v11/files/24/f0f16255e0b41653eb89af3e9c6162536118c37e4fa003e623e8d39125bce8d2581f3ef9788991533f46294c21ffbbfaaf55d44150b3e62a686281d83db9f3 @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.4 + - 0.6 diff --git a/.pnpm-store/v11/files/24/f9e91866b9effd72b99e47de585d2dfc721f4ecd663a1187833d908b9516f2eca37364143004c0f918f1377c7dfe2fb55d7ec97002cab50b779319c5e23204 b/.pnpm-store/v11/files/24/f9e91866b9effd72b99e47de585d2dfc721f4ecd663a1187833d908b9516f2eca37364143004c0f918f1377c7dfe2fb55d7ec97002cab50b779319c5e23204 new file mode 100644 index 00000000..af2ee029 --- /dev/null +++ b/.pnpm-store/v11/files/24/f9e91866b9effd72b99e47de585d2dfc721f4ecd663a1187833d908b9516f2eca37364143004c0f918f1377c7dfe2fb55d7ec97002cab50b779319c5e23204 @@ -0,0 +1,26 @@ +{ + "name": "chai", + "description": "BDD/TDD assertion library for node.js and the browser. Test framework agnostic.", + "license": "MIT", + "keywords": [ + "test", + "assertion", + "assert", + "testing", + "chai" + ], + "main": "chai.js", + "ignore": [ + "build", + "components", + "lib", + "node_modules", + "support", + "test", + "index.js", + "Makefile", + ".*" + ], + "dependencies": {}, + "devDependencies": {} +} diff --git a/.pnpm-store/v11/files/25/02c91cec03fabcf552d6312ff648557fe52abea7f1312cff38ba670ab98d04c4b8d5119669546098bbfc6b9c9dff6b485fa94c79d490ca36a6f0d4a1b36079 b/.pnpm-store/v11/files/25/02c91cec03fabcf552d6312ff648557fe52abea7f1312cff38ba670ab98d04c4b8d5119669546098bbfc6b9c9dff6b485fa94c79d490ca36a6f0d4a1b36079 new file mode 100644 index 00000000..bdd841d9 --- /dev/null +++ b/.pnpm-store/v11/files/25/02c91cec03fabcf552d6312ff648557fe52abea7f1312cff38ba670ab98d04c4b8d5119669546098bbfc6b9c9dff6b485fa94c79d490ca36a6f0d4a1b36079 @@ -0,0 +1,82 @@ +{ + "name": "has-values", + "description": "Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays. ", + "version": "1.0.0", + "homepage": "https://github.com/jonschlinkert/has-values", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/has-values", + "bugs": { + "url": "https://github.com/jonschlinkert/has-values/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "devDependencies": { + "gulp-format-md": "^0.1.12", + "mocha": "^3.4.1" + }, + "keywords": [ + "array", + "boolean", + "empty", + "find", + "function", + "has", + "hasOwn", + "javascript", + "js", + "key", + "keys", + "node.js", + "null", + "number", + "object", + "properties", + "property", + "string", + "type", + "util", + "utilities", + "utility", + "value", + "values" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "has-value", + "kind-of", + "is-number", + "is-plain-object", + "isobject" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/25/2978f556bee6653d7885dc2509bd2aab689ade37ca972fb82b5b535fb92bd0e93c9f22f0464d946f981ff91821eef974c8da5bdb9f9e0ffcf269a697eb10be-exec b/.pnpm-store/v11/files/25/2978f556bee6653d7885dc2509bd2aab689ade37ca972fb82b5b535fb92bd0e93c9f22f0464d946f981ff91821eef974c8da5bdb9f9e0ffcf269a697eb10be-exec new file mode 100755 index 00000000..578e2918 --- /dev/null +++ b/.pnpm-store/v11/files/25/2978f556bee6653d7885dc2509bd2aab689ade37ca972fb82b5b535fb92bd0e93c9f22f0464d946f981ff91821eef974c8da5bdb9f9e0ffcf269a697eb10be-exec @@ -0,0 +1,184 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const path = require("path"); +const suman_events_1 = require("suman-events"); +const su = require("suman-utils"); +const JSONStdio = require("json-stdio"); +const _suman = global.__suman = (global.__suman || {}); +const utils_1 = require("../../lib/utils"); +const reporterName = path.basename(__dirname); +const log = utils_1.getLogger(reporterName); +function title(test) { + return String(test.title || test.desc || test.description || test.name).replace(/#/g, '').trim(); +} +const logDebug = function () { + let debug; + if (debug = process.env.SUMAN_DEBUG) { + const args = Array.from(arguments).filter(i => i); + args.forEach(function (a) { + process.stderr.write('\n' + (typeof a === 'string' ? a : util.inspect(a)) + '\n'); + }); + } + return debug; +}; +let onAnyEvent = function () { + if (!logDebug.apply(null, arguments)) { + const args = Array.from(arguments).map(function (data) { + return typeof data === 'string' ? data : util.inspect(data); + }); + return console.log.apply(console, args); + } +}; +let getTestFilePath = function (test) { + return String(test.testPath || test.filePath || test.filepath || test.testpath).trim(); +}; +let getTestDesc = function (test) { + return String(test.desc || test.title || test.name).trim(); +}; +let isTTY = process.stdout.isTTY; +exports.loadReporter = utils_1.wrapReporter(reporterName, (retContainer, results, s, sumanOpts) => { + if (_suman.inceptionLevel < 1 && !isTTY) { + log.warning(`"${reporterName}" warning: suman inception level is 0, we may not need to load this reporter.`); + } + let isColorable = function () { + return _suman.inceptionLevel < 1 && !sumanOpts.no_color; + }; + let getPaddingCount = function () { + return _suman.currentPaddingCount ? _suman.currentPaddingCount.val || 0 : 0; + }; + let getTAPJSONType = function (eventName) { + return String(eventName) + '_TAP_JSON'; + }; + s.on(String(suman_events_1.events.TEST_CASE_END_TAP_JSON), function (d) { + results.n++; + JSONStdio.logToStdout(d); + }); + s.on(String(suman_events_1.events.TEST_CASE_FAIL_TAP_JSON), function (d) { + results.failures++; + JSONStdio.logToStdout(d); + }); + s.on(String(suman_events_1.events.TEST_CASE_PASS_TAP_JSON), function (d) { + results.passes++; + JSONStdio.logToStdout(d); + }); + s.on(String(suman_events_1.events.TEST_CASE_SKIPPED_TAP_JSON), function (d) { + results.skipped++; + JSONStdio.logToStdout(d); + }); + s.on(String(suman_events_1.events.TEST_CASE_STUBBED_TAP_JSON), function (d) { + results.stubbed++; + JSONStdio.logToStdout(d); + }); + { + let evn = String(suman_events_1.events.SUMAN_CONTEXT_BLOCK); + s.on(evn, function (b) { + JSONStdio.logToStdout({ + messageType: getTAPJSONType(evn), + padding: getPaddingCount(), + message: ` ▶ group: '${b.desc}' ▶ ` + }); + }); + } + { + let evn = String(suman_events_1.events.TEST_CASE_END); + s.on(evn, function (b) { + results.n++; + JSONStdio.logToStdout({ + messageType: getTAPJSONType(evn), + }); + }); + } + { + let evn = String(suman_events_1.events.TEST_CASE_FAIL); + s.on(evn, function (test) { + results.failures++; + console.log(su.customStringify({ + '@tap-json': true, + '@json-stdio': true, + messageType: getTAPJSONType(evn), + padding: getPaddingCount(), + testCase: { + ok: false, + desc: getTestDesc(test), + filePath: getTestFilePath(test), + error: test.errorDisplay || test.error, + id: results.n, + dateComplete: test.dateComplete, + dateStarted: test.dateStarted + } + })); + }); + } + { + let evn = String(suman_events_1.events.TEST_CASE_PASS); + s.on(evn, function (test) { + results.passes++; + console.log(su.customStringify({ + '@tap-json': true, + '@json-stdio': true, + messageType: getTAPJSONType(evn), + padding: getPaddingCount(), + testCase: { + ok: true, + desc: getTestDesc(test), + filePath: getTestFilePath(test), + id: results.n, + dateComplete: test.dateComplete, + dateStarted: test.dateStarted + } + })); + }); + } + { + let evn = String(suman_events_1.events.TEST_CASE_SKIPPED); + s.on(evn, function (test) { + results.skipped++; + console.log(su.customStringify({ + '@tap-json': true, + '@json-stdio': true, + messageType: getTAPJSONType(evn), + padding: getPaddingCount(), + testCase: { + ok: true, + desc: getTestDesc(test), + filePath: getTestFilePath(test), + id: results.n, + skipped: true, + skip: true, + dateComplete: test.dateComplete, + dateStarted: test.dateStarted + } + })); + }); + } + { + let evn = String(suman_events_1.events.TEST_CASE_STUBBED); + s.on(evn, function (test) { + results.stubbed++; + console.log(su.customStringify({ + '@tap-json': true, + '@json-stdio': true, + padding: getPaddingCount(), + messageType: getTAPJSONType(evn), + testCase: { + ok: true, + desc: getTestDesc(test), + filePath: getTestFilePath(test), + id: results.n, + stubbed: true, + todo: true, + dateComplete: test.dateComplete, + dateStarted: test.dateStarted + } + })); + }); + } + return retContainer.ret = { + reporterName, + results + }; +}); +exports.default = exports.loadReporter; diff --git a/.pnpm-store/v11/files/25/6d204dd9dedcdaaac5925b31882f245675e4e0c518e9e18a129c1fab8c429946724fba9d045c76c522bc6bb5af3ee2eef32d783f2c6bdb68b6d3504428243b b/.pnpm-store/v11/files/25/6d204dd9dedcdaaac5925b31882f245675e4e0c518e9e18a129c1fab8c429946724fba9d045c76c522bc6bb5af3ee2eef32d783f2c6bdb68b6d3504428243b new file mode 100644 index 00000000..79305dca --- /dev/null +++ b/.pnpm-store/v11/files/25/6d204dd9dedcdaaac5925b31882f245675e4e0c518e9e18a129c1fab8c429946724fba9d045c76c522bc6bb5af3ee2eef32d783f2c6bdb68b6d3504428243b @@ -0,0 +1,24 @@ + +var sep = require('path').sep || '/'; +var assert = require('assert'); +var uri2path = require('../'); +var tests = require('./tests.json'); + +describe('file-uri-to-path', function () { + + Object.keys(tests).forEach(function (uri) { + + // the test cases were generated from Windows' PathCreateFromUrlA() function. + // On Unix, we have to replace the path separator with the Unix one instead of + // the Windows one. + var expected = tests[uri].replace(/\\/g, sep); + + it('should convert ' + JSON.stringify(uri) + ' to ' + JSON.stringify(expected), + function () { + var actual = uri2path(uri); + assert.equal(actual, expected); + }); + + }); + +}); diff --git a/.pnpm-store/v11/files/25/6e5997954178af0e65f12ede3b52c9f7133b631077d5d1f944f146848eeba243456bb57a1ecf215a3c25f5bb58f1f9def204f99e23906d607a2955523ab37c b/.pnpm-store/v11/files/25/6e5997954178af0e65f12ede3b52c9f7133b631077d5d1f944f146848eeba243456bb57a1ecf215a3c25f5bb58f1f9def204f99e23906d607a2955523ab37c new file mode 100644 index 00000000..6d4271ab --- /dev/null +++ b/.pnpm-store/v11/files/25/6e5997954178af0e65f12ede3b52c9f7133b631077d5d1f944f146848eeba243456bb57a1ecf215a3c25f5bb58f1f9def204f99e23906d607a2955523ab37c @@ -0,0 +1,146 @@ +Flexible ascii progress bar. + +## Installation + +```bash +$ npm install progress +``` + +## Usage + +First we create a `ProgressBar`, giving it a format string +as well as the `total`, telling the progress bar when it will +be considered complete. After that all we need to do is `tick()` appropriately. + +```javascript +var ProgressBar = require('progress'); + +var bar = new ProgressBar(':bar', { total: 10 }); +var timer = setInterval(function () { + bar.tick(); + if (bar.complete) { + console.log('\ncomplete\n'); + clearInterval(timer); + } +}, 100); +``` + +### Options + +These are keys in the options object you can pass to the progress bar along with +`total` as seen in the example above. + +- `curr` current completed index +- `total` total number of ticks to complete +- `width` the displayed width of the progress bar defaulting to total +- `stream` the output stream defaulting to stderr +- `head` head character defaulting to complete character +- `complete` completion character defaulting to "=" +- `incomplete` incomplete character defaulting to "-" +- `renderThrottle` minimum time between updates in milliseconds defaulting to 16 +- `clear` option to clear the bar on completion defaulting to false +- `callback` optional function to call when the progress bar completes + +### Tokens + +These are tokens you can use in the format of your progress bar. + +- `:bar` the progress bar itself +- `:current` current tick number +- `:total` total ticks +- `:elapsed` time elapsed in seconds +- `:percent` completion percentage +- `:eta` estimated completion time in seconds +- `:rate` rate of ticks per second + +### Custom Tokens + +You can define custom tokens by adding a `{'name': value}` object parameter to your method (`tick()`, `update()`, etc.) calls. + +```javascript +var bar = new ProgressBar(':current: :token1 :token2', { total: 3 }) +bar.tick({ + 'token1': "Hello", + 'token2': "World!\n" +}) +bar.tick(2, { + 'token1': "Goodbye", + 'token2': "World!" +}) +``` +The above example would result in the output below. + +``` +1: Hello World! +3: Goodbye World! +``` + +## Examples + +### Download + +In our download example each tick has a variable influence, so we pass the chunk +length which adjusts the progress bar appropriately relative to the total +length. + +```javascript +var ProgressBar = require('progress'); +var https = require('https'); + +var req = https.request({ + host: 'download.github.com', + port: 443, + path: '/visionmedia-node-jscoverage-0d4608a.zip' +}); + +req.on('response', function(res){ + var len = parseInt(res.headers['content-length'], 10); + + console.log(); + var bar = new ProgressBar(' downloading [:bar] :rate/bps :percent :etas', { + complete: '=', + incomplete: ' ', + width: 20, + total: len + }); + + res.on('data', function (chunk) { + bar.tick(chunk.length); + }); + + res.on('end', function () { + console.log('\n'); + }); +}); + +req.end(); +``` + +The above example result in a progress bar like the one below. + +``` +downloading [===== ] 39/bps 29% 3.7s +``` + +### Interrupt + +To display a message during progress bar execution, use `interrupt()` +```javascript +var ProgressBar = require('progress'); + +var bar = new ProgressBar(':bar :current/:total', { total: 10 }); +var timer = setInterval(function () { + bar.tick(); + if (bar.complete) { + clearInterval(timer); + } else if (bar.curr === 5) { + bar.interrupt('this message appears above the progress bar\ncurrent progress is ' + bar.curr + '/' + bar.total); + } +}, 1000); +``` + +You can see more examples in the `examples` folder. + +## License + +MIT diff --git a/.pnpm-store/v11/files/25/870c2a9d6131f0fea41f5295e09d3c96f5bcb33d6e5256ed0bfbaad250c549493546972101071a490ef9b54183e986a937ad1f2d8226370661b6798fb76c18 b/.pnpm-store/v11/files/25/870c2a9d6131f0fea41f5295e09d3c96f5bcb33d6e5256ed0bfbaad250c549493546972101071a490ef9b54183e986a937ad1f2d8226370661b6798fb76c18 new file mode 100644 index 00000000..0c7b8568 --- /dev/null +++ b/.pnpm-store/v11/files/25/870c2a9d6131f0fea41f5295e09d3c96f5bcb33d6e5256ed0bfbaad250c549493546972101071a490ef9b54183e986a937ad1f2d8226370661b6798fb76c18 @@ -0,0 +1,223 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const assert = require("assert"); +const _ = require("lodash"); +class DefineObject { + constructor(desc, exec) { + this.exec = exec; + this.opts = { + '@DefineObjectOpts': true, + __preParsed: false, + desc: desc || '(unknown description/title/name)', + }; + } + inject() { + return this; + } + plan(v) { + assert(Number.isInteger(v), 'Argument to plan must be an integer.'); + this.opts.plan = v; + return this; + } + desc(v) { + assert.equal(typeof v, 'string', 'Value for "desc" must be a string.'); + this.opts.desc = v; + return this; + } + title(v) { + assert.equal(typeof v, 'string', 'Value for "title" must be a string.'); + this.opts.desc = v; + return this; + } + name(v) { + assert.equal(typeof v, 'string', 'Value for "name" must be a string.'); + this.opts.desc = v; + return this; + } + description(v) { + assert.equal(typeof v, 'string', 'Value for "description" must be a string.'); + this.opts.desc = v; + return this; + } + skip(v) { + assert.equal(typeof v, 'boolean', 'Value for "skip" must be a boolean.'); + this.opts.skip = v; + return this; + } + only(v) { + assert.equal(typeof v, 'boolean', 'Value for "only" must be a boolean.'); + this.opts.only = v; + return this; + } + parallel(v) { + assert.equal(typeof v, 'boolean', 'Value for "first" must be a boolean.'); + this.opts.parallel = v; + return this; + } + series(v) { + assert.equal(typeof v, 'boolean', 'Value for "first" must be a boolean.'); + this.opts.series = v; + return this; + } + mode(v) { + assert.equal(typeof v, 'string', 'Value for "mode" must be a string.'); + this.opts.mode = v; + return this; + } + timeout(v) { + assert(Number.isInteger(v), 'Timeout value must be an integer.'); + this.opts.timeout = v; + return this; + } +} +exports.DefineObject = DefineObject; +class DefineObjectTestOrHook extends DefineObject { + throws(v) { + if (typeof v === 'string') { + v = new RegExp(v); + } + if (!(v instanceof RegExp)) { + throw new Error('Value for "throws" must be a String or regular expression (RegExp instance).'); + } + this.opts.throws = v; + return this; + } + cb(v) { + assert.equal(typeof v, 'boolean', 'Value for "cb" must be a boolean.'); + this.opts.cb = Boolean(v); + return this; + } + fatal(v) { + assert.equal(typeof v, 'boolean', 'Value for "fatal" must be a boolean.'); + this.opts.fatal = v; + return this; + } + events() { + const successEvents = this.opts.successEvents = this.opts.successEvents || []; + _.flattenDeep([Array.from(arguments)]).forEach(function (v) { + assert(v, 'Value was going to be added to "successEvents", but value is falsy'); + assert.equal(typeof v, 'string', 'Value for "successEvent" must be a string.'); + successEvents.push(v); + }); + return this; + } + successEvents(...args) { + const successEvents = this.opts.successEvents = this.opts.successEvents || []; + _.flattenDeep([args]).forEach(function (v) { + assert(v, 'Value was going to be added to "successEvents", but value is falsy'); + assert.equal(typeof v, 'string', 'Value for "successEvent" must be a string.'); + successEvents.push(v); + }); + return this; + } + successEvent(...args) { + const successEvents = this.opts.successEvents = this.opts.successEvents || []; + _.flattenDeep([Array.from(arguments)]).forEach(function (v) { + assert(v, 'Value was going to be added to "successEvents", but value is falsy'); + assert.equal(typeof v, 'string', 'Value for "successEvent" must be a string.'); + successEvents.push(v); + }); + return this; + } + errorEvents(...args) { + const errorEvents = this.opts.errorEvents = this.opts.errorEvents || []; + _.flattenDeep([Array.from(arguments)]).forEach(function (v) { + assert(v, 'Value was going to be added to "errorEvents", but value is falsy'); + assert.equal(typeof v, 'string', 'Value for "errorEvent" must be a string.'); + errorEvents.push(v); + }); + return this; + } + errorEvent(...args) { + const errorEvents = this.opts.errorEvents = this.opts.errorEvents || []; + _.flattenDeep([Array.from(arguments)]).forEach(function (v) { + assert(v, 'Value was going to be added to "errorEvents", but value is falsy'); + assert.equal(typeof v, 'string', 'Value for "errorEvent" must be a string.'); + errorEvents.push(v); + }); + return this; + } +} +exports.DefineObjectTestOrHook = DefineObjectTestOrHook; +class DefineOptionsInjectHook extends DefineObjectTestOrHook { + run(fn) { + const name = this.opts.desc || '(unknown DefineObject name)'; + this.exec.call(null, name, Object.assign({}, this.opts), fn); + return this; + } +} +exports.DefineOptionsInjectHook = DefineOptionsInjectHook; +class DefineObjectAllHook extends DefineObjectTestOrHook { + first(v) { + assert.equal(typeof v, 'boolean', 'Value for "first" must be a boolean.'); + this.opts.first = v; + return this; + } + last(v) { + assert.equal(typeof v, 'boolean', 'Value for "last" must be a boolean.'); + this.opts.last = v; + return this; + } + always(v) { + assert.equal(typeof v, 'boolean', 'Value for "always" must be a boolean.'); + this.opts.always = v; + return this; + } + run(fn) { + const name = this.opts.desc || '(unknown DefineObject name)'; + this.exec.call(null, name, Object.assign({}, this.opts), fn); + return this; + } +} +exports.DefineObjectAllHook = DefineObjectAllHook; +class DefineObjectEachHook extends DefineObjectTestOrHook { + fatal(v) { + assert.equal(typeof v, 'boolean', 'Value for "fatal" must be a boolean.'); + this.opts.fatal = v; + return this; + } + run(fn) { + const name = this.opts.desc || '(unknown DefineObject name)'; + this.exec.call(null, name, Object.assign({}, this.opts), fn); + return this; + } +} +exports.DefineObjectEachHook = DefineObjectEachHook; +class DefineObjectTestCase extends DefineObjectTestOrHook { + run(fn) { + const name = this.opts.desc || '(unknown DefineObject name)'; + this.exec.call(null, name, Object.assign({}, this.opts), fn); + return this; + } +} +exports.DefineObjectTestCase = DefineObjectTestCase; +class DefineObjectContext extends DefineObject { + source(...args) { + this.opts.__toBeSourcedForIOC = this.opts.__toBeSourcedForIOC || {}; + const self = this; + args.forEach(function (a) { + if (Array.isArray(a)) { + self.source(...a); + } + else if (typeof a === 'string') { + self.opts.__toBeSourcedForIOC[a] = true; + } + else { + throw new Error('argument must be a string or an array of strings.'); + } + }); + return this; + } + names(...args) { + this.opts.names = args.reduce(function (a, b) { + return a.concat(b); + }, []); + return this; + } + run(fn) { + const name = this.opts.desc || '(unknown DefineObject name)'; + this.exec.call(null, name, Object.assign({}, this.opts), fn); + return this; + } +} +exports.DefineObjectContext = DefineObjectContext; diff --git a/.pnpm-store/v11/files/25/8ada84c5df61063d638ae7fa211c3afc7c2352d8e5b280c8767044c4e2fdfdc4b15281dac6d4d82be4f031f763d3a1d3e530a3e6463fc051bfc26e66b1dfa4 b/.pnpm-store/v11/files/25/8ada84c5df61063d638ae7fa211c3afc7c2352d8e5b280c8767044c4e2fdfdc4b15281dac6d4d82be4f031f763d3a1d3e530a3e6463fc051bfc26e66b1dfa4 new file mode 100644 index 00000000..15afe745 --- /dev/null +++ b/.pnpm-store/v11/files/25/8ada84c5df61063d638ae7fa211c3afc7c2352d8e5b280c8767044c4e2fdfdc4b15281dac6d4d82be4f031f763d3a1d3e530a3e6463fc051bfc26e66b1dfa4 @@ -0,0 +1,103 @@ +/*! + * base64id v0.1.0 + */ + +/** + * Module dependencies + */ + +var crypto = require('crypto'); + +/** + * Constructor + */ + +var Base64Id = function() { }; + +/** + * Get random bytes + * + * Uses a buffer if available, falls back to crypto.randomBytes + */ + +Base64Id.prototype.getRandomBytes = function(bytes) { + + var BUFFER_SIZE = 4096 + var self = this; + + bytes = bytes || 12; + + if (bytes > BUFFER_SIZE) { + return crypto.randomBytes(bytes); + } + + var bytesInBuffer = parseInt(BUFFER_SIZE/bytes); + var threshold = parseInt(bytesInBuffer*0.85); + + if (!threshold) { + return crypto.randomBytes(bytes); + } + + if (this.bytesBufferIndex == null) { + this.bytesBufferIndex = -1; + } + + if (this.bytesBufferIndex == bytesInBuffer) { + this.bytesBuffer = null; + this.bytesBufferIndex = -1; + } + + // No buffered bytes available or index above threshold + if (this.bytesBufferIndex == -1 || this.bytesBufferIndex > threshold) { + + if (!this.isGeneratingBytes) { + this.isGeneratingBytes = true; + crypto.randomBytes(BUFFER_SIZE, function(err, bytes) { + self.bytesBuffer = bytes; + self.bytesBufferIndex = 0; + self.isGeneratingBytes = false; + }); + } + + // Fall back to sync call when no buffered bytes are available + if (this.bytesBufferIndex == -1) { + return crypto.randomBytes(bytes); + } + } + + var result = this.bytesBuffer.slice(bytes*this.bytesBufferIndex, bytes*(this.bytesBufferIndex+1)); + this.bytesBufferIndex++; + + return result; +} + +/** + * Generates a base64 id + * + * (Original version from socket.io ) + */ + +Base64Id.prototype.generateId = function () { + var rand = Buffer.alloc(15); // multiple of 3 for base64 + if (!rand.writeInt32BE) { + return Math.abs(Math.random() * Math.random() * Date.now() | 0).toString() + + Math.abs(Math.random() * Math.random() * Date.now() | 0).toString(); + } + this.sequenceNumber = (this.sequenceNumber + 1) | 0; + rand.writeInt32BE(this.sequenceNumber, 11); + if (crypto.randomBytes) { + this.getRandomBytes(12).copy(rand); + } else { + // not secure for node 0.4 + [0, 4, 8].forEach(function(i) { + rand.writeInt32BE(Math.random() * Math.pow(2, 32) | 0, i); + }); + } + return rand.toString('base64').replace(/\//g, '_').replace(/\+/g, '-'); +}; + +/** + * Export + */ + +exports = module.exports = new Base64Id(); diff --git a/.pnpm-store/v11/files/25/8c4562b45bea4be21a40aa8eaa7e47fd4414d9ea277931d6cb700362ac718ecb7323cc2b605dc4160eb535299d3ac65220f6e8b51aacd4521ed921813a1dc5 b/.pnpm-store/v11/files/25/8c4562b45bea4be21a40aa8eaa7e47fd4414d9ea277931d6cb700362ac718ecb7323cc2b605dc4160eb535299d3ac65220f6e8b51aacd4521ed921813a1dc5 new file mode 100644 index 00000000..d7bed252 --- /dev/null +++ b/.pnpm-store/v11/files/25/8c4562b45bea4be21a40aa8eaa7e47fd4414d9ea277931d6cb700362ac718ecb7323cc2b605dc4160eb535299d3ac65220f6e8b51aacd4521ed921813a1dc5 @@ -0,0 +1,169 @@ +'use strict'; + +var brackets = require('expand-brackets'); + +/** + * Extglob compilers + */ + +module.exports = function(extglob) { + function star() { + if (typeof extglob.options.star === 'function') { + return extglob.options.star.apply(this, arguments); + } + if (typeof extglob.options.star === 'string') { + return extglob.options.star; + } + return '.*?'; + } + + /** + * Use `expand-brackets` compilers + */ + + extglob.use(brackets.compilers); + extglob.compiler + + /** + * Escaped: "\\*" + */ + + .set('escape', function(node) { + return this.emit(node.val, node); + }) + + /** + * Dot: "." + */ + + .set('dot', function(node) { + return this.emit('\\' + node.val, node); + }) + + /** + * Question mark: "?" + */ + + .set('qmark', function(node) { + var val = '[^\\\\/.]'; + var prev = this.prev(); + + if (node.parsed.slice(-1) === '(') { + var ch = node.rest.charAt(0); + if (ch !== '!' && ch !== '=' && ch !== ':') { + return this.emit(val, node); + } + return this.emit(node.val, node); + } + + if (prev.type === 'text' && prev.val) { + return this.emit(val, node); + } + + if (node.val.length > 1) { + val += '{' + node.val.length + '}'; + } + return this.emit(val, node); + }) + + /** + * Plus: "+" + */ + + .set('plus', function(node) { + var prev = node.parsed.slice(-1); + if (prev === ']' || prev === ')') { + return this.emit(node.val, node); + } + var ch = this.output.slice(-1); + if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) { + return this.emit('\\+', node); + } + if (/\w/.test(ch) && !node.inside) { + return this.emit('+\\+?', node); + } + return this.emit('+', node); + }) + + /** + * Star: "*" + */ + + .set('star', function(node) { + var prev = this.prev(); + var prefix = prev.type !== 'text' && prev.type !== 'escape' + ? '(?!\\.)' + : ''; + + return this.emit(prefix + star.call(this, node), node); + }) + + /** + * Parens + */ + + .set('paren', function(node) { + return this.mapVisit(node.nodes); + }) + .set('paren.open', function(node) { + var capture = this.options.capture ? '(' : ''; + + switch (node.parent.prefix) { + case '!': + case '^': + return this.emit(capture + '(?:(?!(?:', node); + case '*': + case '+': + case '?': + case '@': + return this.emit(capture + '(?:', node); + default: { + var val = node.val; + if (this.options.bash === true) { + val = '\\' + val; + } else if (!this.options.capture && val === '(' && node.parent.rest[0] !== '?') { + val += '?:'; + } + + return this.emit(val, node); + } + } + }) + .set('paren.close', function(node) { + var capture = this.options.capture ? ')' : ''; + + switch (node.prefix) { + case '!': + case '^': + var prefix = /^(\)|$)/.test(node.rest) ? '$' : ''; + var str = star.call(this, node); + + // if the extglob has a slash explicitly defined, we know the user wants + // to match slashes, so we need to ensure the "star" regex allows for it + if (node.parent.hasSlash && !this.options.star && this.options.slash !== false) { + str = '.*?'; + } + + return this.emit(prefix + ('))' + str + ')') + capture, node); + case '*': + case '+': + case '?': + return this.emit(')' + node.prefix + capture, node); + case '@': + return this.emit(')' + capture, node); + default: { + var val = (this.options.bash === true ? '\\' : '') + ')'; + return this.emit(val, node); + } + } + }) + + /** + * Text + */ + + .set('text', function(node) { + var val = node.val.replace(/[\[\]]/g, '\\$&'); + return this.emit(val, node); + }); +}; diff --git a/.pnpm-store/v11/files/25/90834e118ef79a585491370bbb875bf201cea54d6b5455a445788d8e0b2cd2745621b199bf0f6ef5371f6fa9e9fd1b09da11bab11a7f1e2411542046e1f74a b/.pnpm-store/v11/files/25/90834e118ef79a585491370bbb875bf201cea54d6b5455a445788d8e0b2cd2745621b199bf0f6ef5371f6fa9e9fd1b09da11bab11a7f1e2411542046e1f74a new file mode 100644 index 00000000..e36572f3 --- /dev/null +++ b/.pnpm-store/v11/files/25/90834e118ef79a585491370bbb875bf201cea54d6b5455a445788d8e0b2cd2745621b199bf0f6ef5371f6fa9e9fd1b09da11bab11a7f1e2411542046e1f74a @@ -0,0 +1,24 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/25/99da1106b277e64b28bf37621b7ba0bf9bc92d34db4dfc3aca288009b7b42f4672b13e96f1dec7abe292c809edff7cb5c68164408c55e26a1cb2773ce82447 b/.pnpm-store/v11/files/25/99da1106b277e64b28bf37621b7ba0bf9bc92d34db4dfc3aca288009b7b42f4672b13e96f1dec7abe292c809edff7cb5c68164408c55e26a1cb2773ce82447 new file mode 100644 index 00000000..fde48d46 --- /dev/null +++ b/.pnpm-store/v11/files/25/99da1106b277e64b28bf37621b7ba0bf9bc92d34db4dfc3aca288009b7b42f4672b13e96f1dec7abe292c809edff7cb5c68164408c55e26a1cb2773ce82447 @@ -0,0 +1,31 @@ +/*! + * Chai - compareByInspect utility + * Copyright(c) 2011-2016 Jake Luer + * MIT Licensed + */ + +/*! + * Module dependancies + */ + +var inspect = require('./inspect'); + +/** + * ### .compareByInspect(mixed, mixed) + * + * To be used as a compareFunction with Array.prototype.sort. Compares elements + * using inspect instead of default behavior of using toString so that Symbols + * and objects with irregular/missing toString can still be sorted without a + * TypeError. + * + * @param {Mixed} first element to compare + * @param {Mixed} second element to compare + * @returns {Number} -1 if 'a' should come before 'b'; otherwise 1 + * @name compareByInspect + * @namespace Utils + * @api public + */ + +module.exports = function compareByInspect(a, b) { + return inspect(a) < inspect(b) ? -1 : 1; +}; diff --git a/.pnpm-store/v11/files/25/a97f4c875a91c60202f718680f8e24fc7f7b68f5822b83d5acd8397079b5c51a320d1733dbe456e2802a2eb909b1a168d123ff9c1d2a0a967491f1745d015e b/.pnpm-store/v11/files/25/a97f4c875a91c60202f718680f8e24fc7f7b68f5822b83d5acd8397079b5c51a320d1733dbe456e2802a2eb909b1a168d123ff9c1d2a0a967491f1745d015e new file mode 100644 index 00000000..a8e70f71 --- /dev/null +++ b/.pnpm-store/v11/files/25/a97f4c875a91c60202f718680f8e24fc7f7b68f5822b83d5acd8397079b5c51a320d1733dbe456e2802a2eb909b1a168d123ff9c1d2a0a967491f1745d015e @@ -0,0 +1,52 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns `true` if at least one element in the `coll` satisfies an async test. + * If any iteratee call returns `true`, the main `callback` is immediately + * called. + * + * @name some + * @static + * @memberOf module:Collections + * @method + * @alias any + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + * @example + * + * async.some(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, result) { + * // if result is true then at least one of the files exists + * }); + */ +exports.default = (0, _doParallel2.default)((0, _createTester2.default)(Boolean, _identity2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/25/ab4dfe0e60829d473ef8bb30bb8655cd490756d23f4bc843fe07eb5f1b076f410a93d0cc96aa18225bc7a8a798ad51b89d3b7afa9dd96c370d377735a57b87 b/.pnpm-store/v11/files/25/ab4dfe0e60829d473ef8bb30bb8655cd490756d23f4bc843fe07eb5f1b076f410a93d0cc96aa18225bc7a8a798ad51b89d3b7afa9dd96c370d377735a57b87 new file mode 100644 index 00000000..ef6a8a5e --- /dev/null +++ b/.pnpm-store/v11/files/25/ab4dfe0e60829d473ef8bb30bb8655cd490756d23f4bc843fe07eb5f1b076f410a93d0cc96aa18225bc7a8a798ad51b89d3b7afa9dd96c370d377735a57b87 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').forEachOfSeries; diff --git a/.pnpm-store/v11/files/25/b278f1884b08eb2da618b539c7ec4376890c193f63d7c4e092f13eb7ed638e7e5338ff8006328ea4764a7ab977a6f08c958542e3061d9831f620736ae377bb b/.pnpm-store/v11/files/25/b278f1884b08eb2da618b539c7ec4376890c193f63d7c4e092f13eb7ed638e7e5338ff8006328ea4764a7ab977a6f08c958542e3061d9831f620736ae377bb new file mode 100644 index 00000000..07908ff3 --- /dev/null +++ b/.pnpm-store/v11/files/25/b278f1884b08eb2da618b539c7ec4376890c193f63d7c4e092f13eb7ed638e7e5338ff8006328ea4764a7ab977a6f08c958542e3061d9831f620736ae377bb @@ -0,0 +1,19 @@ +var baseIndexOf = require('./_baseIndexOf'); + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ +function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} + return index; +} + +module.exports = charsEndIndex; diff --git a/.pnpm-store/v11/files/25/b3d4edf46b99b3207f03cc26ba18c8d99a1f97a344751dbbf5cbd6b20f1b48c4c27811f6a3d44725996904e60cf212e7a358b181f5875490a6842f6ad00cc7 b/.pnpm-store/v11/files/25/b3d4edf46b99b3207f03cc26ba18c8d99a1f97a344751dbbf5cbd6b20f1b48c4c27811f6a3d44725996904e60cf212e7a358b181f5875490a6842f6ad00cc7 new file mode 100644 index 00000000..76a00356 --- /dev/null +++ b/.pnpm-store/v11/files/25/b3d4edf46b99b3207f03cc26ba18c8d99a1f97a344751dbbf5cbd6b20f1b48c4c27811f6a3d44725996904e60cf212e7a358b181f5875490a6842f6ad00cc7 @@ -0,0 +1,4 @@ +has-binarydata.js +================= + +Simple module to test if an object contains binary data diff --git a/.pnpm-store/v11/files/25/b9be8b38a36c4c70ee2c843a7be22444e35cc9e1eade3f12f895ad52d0f4bb7da3a68099dda893a6a0c06250b046a2b6a0bff4b8df5ecfaee4f29c2263ebf7 b/.pnpm-store/v11/files/25/b9be8b38a36c4c70ee2c843a7be22444e35cc9e1eade3f12f895ad52d0f4bb7da3a68099dda893a6a0c06250b046a2b6a0bff4b8df5ecfaee4f29c2263ebf7 new file mode 100644 index 00000000..4d6f9ae7 --- /dev/null +++ b/.pnpm-store/v11/files/25/b9be8b38a36c4c70ee2c843a7be22444e35cc9e1eade3f12f895ad52d0f4bb7da3a68099dda893a6a0c06250b046a2b6a0bff4b8df5ecfaee4f29c2263ebf7 @@ -0,0 +1,3 @@ +declare const os: any; +declare const path: any; +declare const numOfCPUs: any; diff --git a/.pnpm-store/v11/files/25/c56a0e94e1238fb15ee4306ca7000eba4cd0f79bd67e2154ffea53be0550a6917006e2184865d48beb65e775a39ca426bd028383c050f5f9071dc659923fe7 b/.pnpm-store/v11/files/25/c56a0e94e1238fb15ee4306ca7000eba4cd0f79bd67e2154ffea53be0550a6917006e2184865d48beb65e775a39ca426bd028383c050f5f9071dc659923fe7 new file mode 100644 index 00000000..65bb3a79 --- /dev/null +++ b/.pnpm-store/v11/files/25/c56a0e94e1238fb15ee4306ca7000eba4cd0f79bd67e2154ffea53be0550a6917006e2184865d48beb65e775a39ca426bd028383c050f5f9071dc659923fe7 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unionWith', require('../unionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/25/c84ed7625fbc728e6bf76d320d599203f44f72a05f899913a31c5e88a4431b8a7492da7a871f0a578aa0c1532352e7c74ccd5cbc62b3415b7b4c7e14393a1b b/.pnpm-store/v11/files/25/c84ed7625fbc728e6bf76d320d599203f44f72a05f899913a31c5e88a4431b8a7492da7a871f0a578aa0c1532352e7c74ccd5cbc62b3415b7b4c7e14393a1b new file mode 100644 index 00000000..5efe3d36 --- /dev/null +++ b/.pnpm-store/v11/files/25/c84ed7625fbc728e6bf76d320d599203f44f72a05f899913a31c5e88a4431b8a7492da7a871f0a578aa0c1532352e7c74ccd5cbc62b3415b7b4c7e14393a1b @@ -0,0 +1,26 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "name": "chmodr", + "description": "like `chmod -R`", + "version": "1.2.0", + "repository": { + "type": "git", + "url": "git://github.com/isaacs/chmodr.git" + }, + "main": "chmodr.js", + "devDependencies": { + "mkdirp": "0.3", + "rimraf": "", + "tap": "^12.0.1" + }, + "scripts": { + "test": "tap test/*.js --cov", + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --all; git push origin --tags" + }, + "license": "ISC", + "files": [ + "chmodr.js" + ] +} diff --git a/.pnpm-store/v11/files/25/df7bbded9ec1e4766e94c2e0c41013612afeae586b0a2469ec9a47181a8fbf5e599adbd96cd6b77b84ef20896f1888af3202cb1a87948a2efda88b7b7b95ed b/.pnpm-store/v11/files/25/df7bbded9ec1e4766e94c2e0c41013612afeae586b0a2469ec9a47181a8fbf5e599adbd96cd6b77b84ef20896f1888af3202cb1a87948a2efda88b7b7b95ed new file mode 100644 index 00000000..87babf02 --- /dev/null +++ b/.pnpm-store/v11/files/25/df7bbded9ec1e4766e94c2e0c41013612afeae586b0a2469ec9a47181a8fbf5e599adbd96cd6b77b84ef20896f1888af3202cb1a87948a2efda88b7b7b95ed @@ -0,0 +1,53 @@ +{ + "name": "graceful-fs", + "description": "A drop-in replacement for fs, making various improvements.", + "version": "4.2.11", + "repository": { + "type": "git", + "url": "https://github.com/isaacs/node-graceful-fs" + }, + "main": "graceful-fs.js", + "directories": { + "test": "test" + }, + "scripts": { + "preversion": "npm test", + "postversion": "npm publish", + "postpublish": "git push origin --follow-tags", + "test": "nyc --silent node test.js | tap -c -", + "posttest": "nyc report" + }, + "keywords": [ + "fs", + "module", + "reading", + "retry", + "retries", + "queue", + "error", + "errors", + "handling", + "EMFILE", + "EAGAIN", + "EINVAL", + "EPERM", + "EACCESS" + ], + "license": "ISC", + "devDependencies": { + "import-fresh": "^2.0.0", + "mkdirp": "^0.5.0", + "rimraf": "^2.2.8", + "tap": "^16.3.4" + }, + "files": [ + "fs.js", + "graceful-fs.js", + "legacy-streams.js", + "polyfills.js", + "clone.js" + ], + "tap": { + "reporter": "classic" + } +} diff --git a/.pnpm-store/v11/files/25/e02ae47dc9cc0f2b01d84ae836cf557443cc67d1806f2edfa687b2fc2448cb2aa1744134b2d4ce297a3bc724ca5333035af13833b41a05e87b3ad394ae0364 b/.pnpm-store/v11/files/25/e02ae47dc9cc0f2b01d84ae836cf557443cc67d1806f2edfa687b2fc2448cb2aa1744134b2d4ce297a3bc724ca5333035af13833b41a05e87b3ad394ae0364 new file mode 100644 index 00000000..baa70686 --- /dev/null +++ b/.pnpm-store/v11/files/25/e02ae47dc9cc0f2b01d84ae836cf557443cc67d1806f2edfa687b2fc2448cb2aa1744134b2d4ce297a3bc724ca5333035af13833b41a05e87b3ad394ae0364 @@ -0,0 +1,136 @@ +// Type definitions for Colors.js 1.2 +// Project: https://github.com/Marak/colors.js +// Definitions by: Bart van der Schoor , Staffan Eketorp +// Definitions: https://github.com/Marak/colors.js + +export interface Color { + (text: string): string; + + strip: Color; + stripColors: Color; + + black: Color; + red: Color; + green: Color; + yellow: Color; + blue: Color; + magenta: Color; + cyan: Color; + white: Color; + gray: Color; + grey: Color; + + bgBlack: Color; + bgRed: Color; + bgGreen: Color; + bgYellow: Color; + bgBlue: Color; + bgMagenta: Color; + bgCyan: Color; + bgWhite: Color; + + reset: Color; + bold: Color; + dim: Color; + italic: Color; + underline: Color; + inverse: Color; + hidden: Color; + strikethrough: Color; + + rainbow: Color; + zebra: Color; + america: Color; + trap: Color; + random: Color; + zalgo: Color; +} + +export function enable(): void; +export function disable(): void; +export function setTheme(theme: any): void; + +export let enabled: boolean; + +export const strip: Color; +export const stripColors: Color; + +export const black: Color; +export const red: Color; +export const green: Color; +export const yellow: Color; +export const blue: Color; +export const magenta: Color; +export const cyan: Color; +export const white: Color; +export const gray: Color; +export const grey: Color; + +export const bgBlack: Color; +export const bgRed: Color; +export const bgGreen: Color; +export const bgYellow: Color; +export const bgBlue: Color; +export const bgMagenta: Color; +export const bgCyan: Color; +export const bgWhite: Color; + +export const reset: Color; +export const bold: Color; +export const dim: Color; +export const italic: Color; +export const underline: Color; +export const inverse: Color; +export const hidden: Color; +export const strikethrough: Color; + +export const rainbow: Color; +export const zebra: Color; +export const america: Color; +export const trap: Color; +export const random: Color; +export const zalgo: Color; + +declare global { + interface String { + strip: string; + stripColors: string; + + black: string; + red: string; + green: string; + yellow: string; + blue: string; + magenta: string; + cyan: string; + white: string; + gray: string; + grey: string; + + bgBlack: string; + bgRed: string; + bgGreen: string; + bgYellow: string; + bgBlue: string; + bgMagenta: string; + bgCyan: string; + bgWhite: string; + + reset: string; + // @ts-ignore + bold: string; + dim: string; + italic: string; + underline: string; + inverse: string; + hidden: string; + strikethrough: string; + + rainbow: string; + zebra: string; + america: string; + trap: string; + random: string; + zalgo: string; + } +} diff --git a/.pnpm-store/v11/files/25/e48da690e345efb8825dc14372dad8b0f235f86024f4273199d76d45a60381ea7b7bcf4a9757604993522cf3327170c6a9255a139c7746bf0cf4d7049562d4-exec b/.pnpm-store/v11/files/25/e48da690e345efb8825dc14372dad8b0f235f86024f4273199d76d45a60381ea7b7bcf4a9757604993522cf3327170c6a9255a139c7746bf0cf4d7049562d4-exec new file mode 100755 index 00000000..7aa98c30 --- /dev/null +++ b/.pnpm-store/v11/files/25/e48da690e345efb8825dc14372dad8b0f235f86024f4273199d76d45a60381ea7b7bcf4a9757604993522cf3327170c6a9255a139c7746bf0cf4d7049562d4-exec @@ -0,0 +1,41 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const ProgressBar = require('progress'); +const { events } = require('suman-events'); +const utils_1 = require("../../lib/utils"); +const reporterName = path.basename(__dirname); +const log = utils_1.getLogger(reporterName); +const onAnyEvent = function (data) { + process.stdout.write(String(data)); +}; +exports.loadreporter = utils_1.wrapReporter(reporterName, (retContainer, results, s, sumanOpts, expectations) => { + let progressBar; + s.on(events.RUNNER_STARTED, function onRunnerStart(totalNumTests) { + log.info('runner has started.'); + progressBar = new ProgressBar(' => progress [:bar] :percent :current :token1 :token2', { + total: totalNumTests, + width: 120 + }); + }); + s.on(String(events.TEST_FILE_CHILD_PROCESS_EXITED), function onTestEnd(d) { + if (!progressBar) { + log.error('progress bar was not yet initialized.'); + return; + } + progressBar.tick({ + 'token1': "", + 'token2': "" + }); + }); + s.on(String(events.RUNNER_EXIT_CODE), onAnyEvent); + s.on(events.RUNNER_ENDED, function onRunnerEnd() { + log.good('Runner has ended.'); + }); + return retContainer.ret = { + reporterName + }; +}); +exports.default = exports.loadreporter; diff --git a/.pnpm-store/v11/files/25/f5f7a30a36ff891472a6459fc065ed99fa83aa6bea33778239d7d108ec54381f4be704bdc3b7625ab4bd60039a1477d23871198823a007dcfcc28d32026dd2 b/.pnpm-store/v11/files/25/f5f7a30a36ff891472a6459fc065ed99fa83aa6bea33778239d7d108ec54381f4be704bdc3b7625ab4bd60039a1477d23871198823a007dcfcc28d32026dd2 new file mode 100644 index 00000000..ea1f6de1 --- /dev/null +++ b/.pnpm-store/v11/files/25/f5f7a30a36ff891472a6459fc065ed99fa83aa6bea33778239d7d108ec54381f4be704bdc3b7625ab4bd60039a1477d23871198823a007dcfcc28d32026dd2 @@ -0,0 +1,18 @@ + +var Backoff = require('..'); +var assert = require('assert'); + +describe('.duration()', function(){ + it('should increase the backoff', function(){ + var b = new Backoff; + + assert(100 == b.duration()); + assert(200 == b.duration()); + assert(400 == b.duration()); + assert(800 == b.duration()); + + b.reset(); + assert(100 == b.duration()); + assert(200 == b.duration()); + }) +}) \ No newline at end of file diff --git a/.pnpm-store/v11/files/25/fcab0dbbfd2169b82f890ebb4c5dda2001761958d445fe0df08f461a9c398a5f2f2a2c397e9c77a631a8c400ed9c84892bfc515b81ca304c2c67d2223b7eea b/.pnpm-store/v11/files/25/fcab0dbbfd2169b82f890ebb4c5dda2001761958d445fe0df08f461a9c398a5f2f2a2c397e9c77a631a8c400ed9c84892bfc515b81ca304c2c67d2223b7eea new file mode 100644 index 00000000..4575bd24 --- /dev/null +++ b/.pnpm-store/v11/files/25/fcab0dbbfd2169b82f890ebb4c5dda2001761958d445fe0df08f461a9c398a5f2f2a2c397e9c77a631a8c400ed9c84892bfc515b81ca304c2c67d2223b7eea @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('matchesProperty', require('../matchesProperty')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/26/260f2d6597693049b8ca369a9de3a4e6994430bd060fdc230fafbfbe086d23478b1424195f7d0fb5678421d26c6508d0557079ed6f974b88902cf98ea6ab6b b/.pnpm-store/v11/files/26/260f2d6597693049b8ca369a9de3a4e6994430bd060fdc230fafbfbe086d23478b1424195f7d0fb5678421d26c6508d0557079ed6f974b88902cf98ea6ab6b new file mode 100644 index 00000000..682dfde2 --- /dev/null +++ b/.pnpm-store/v11/files/26/260f2d6597693049b8ca369a9de3a4e6994430bd060fdc230fafbfbe086d23478b1424195f7d0fb5678421d26c6508d0557079ed6f974b88902cf98ea6ab6b @@ -0,0 +1,104 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const assert = require("assert"); +const chalk = require("chalk"); +const su = require("suman-utils"); +const includes = require('lodash.includes'); +const fnArgs = require('function-arguments'); +const _suman = global.__suman = (global.__suman || {}); +const ioc_injector_1 = require("../injection/ioc-injector"); +const general_1 = require("../helpers/general"); +const IS_SUMAN_DEBUG = process.env.SUMAN_DEBUG === 'yes'; +const noKeyExistsPlaceholder = '[suman reserved - no ioc match]'; +const thisVal = { 'message': `Suman users: don't use "this" here, instead => http://sumanjs.org/patterns.` }; +exports.acquireIocDeps = function (suman, iocDepNames, suite, obj, cb) { + const iocPromiseContainer = suman.iocPromiseContainer; + let dependencies = null; + try { + let sumanPaths = general_1.resolveSharedDirs(_suman.sumanConfig, _suman.projectRoot, _suman.sumanOpts); + let { iocFn } = general_1.loadSharedObjects(sumanPaths, _suman.projectRoot, _suman.sumanOpts); + let iocFnArgs = fnArgs(iocFn); + let getiocFnDeps = ioc_injector_1.makeIocInjector(suman.iocData, null, null); + let iocFnDeps = getiocFnDeps(iocFnArgs); + let iocRet = iocFn.apply(null, iocFnDeps); + assert(su.isObject(iocRet.dependencies), ' => suman.ioc.js must export a function which returns an object with a dependencies property.'); + dependencies = iocRet.dependencies; + } + catch (err) { + _suman.log.error(err.stack || err); + _suman.log.error('despite the error, suman will continue optimistically.'); + dependencies = {}; + } + iocDepNames.forEach(dep => { + if (dep in dependencies) { + let d = obj[dep] = dependencies[dep]; + if (!d) { + let deps = Object.keys(dependencies || {}).map(function (item) { + return ' "' + item + '" '; + }); + _suman.writeTestError(`Warning: the following desired dependency is not in your suman.ioc.js file => '${dep}'`); + _suman.writeTestError(' => ...your available dependencies are: [' + deps + ']'); + obj[dep] = noKeyExistsPlaceholder; + } + } + else { + _suman.log.warning(`warning: the following dep is not in your suman.ioc.js configuration '${dep}'`); + obj[dep] = noKeyExistsPlaceholder; + } + }); + const promises = Object.keys(obj).map(function (key) { + if (iocPromiseContainer[key]) { + return iocPromiseContainer[key]; + } + return iocPromiseContainer[key] = new Promise(function (resolve, reject) { + const fn = obj[key]; + if (fn === '[suman reserved - no ioc match]') { + resolve(); + } + else if (typeof fn !== 'function') { + reject(new Error('Value in IOC object was not a function for corresponding key => ' + + '"' + key + '", value => "' + util.inspect(fn) + '"')); + } + else if (fn.length > 1) { + reject(new Error(chalk.red(' => Suman usage error => suman.ioc.js functions take 0 or 1 arguments, ' + + 'with the single argument being a callback function.'))); + } + else if (fn.length > 0) { + let args = fnArgs(fn); + let str = fn.toString(); + let matches = str.match(new RegExp(args[1], 'g')) || []; + if (matches.length < 2) { + throw new Error('Callback in your function was not present => ' + str); + } + fn.call(thisVal, function (err, val) { + err ? reject(err) : resolve(val); + }); + } + else { + Promise.resolve(fn.call(thisVal)).then(resolve, reject); + } + }); + }); + Promise.all(promises).then(function (deps) { + Object.keys(obj).forEach(function (key, index) { + obj[key] = deps[index]; + }); + try { + process.domain && process.domain.exit(); + } + finally { + process.nextTick(cb, null, obj); + } + }, function (err) { + _suman.log.error('Error acquiring ioc dependency:', err.stack || err); + try { + process.domain && process.domain.exit(); + } + finally { + process.nextTick(cb, err, {}); + } + }); +}; diff --git a/.pnpm-store/v11/files/26/400fe8328c4b4ec29e7d65d1ccefa168b3afb154a58816d5a3c82cf1d259cdbec0c79562705c9459225ab1cf21fdd4c29e7adf6a00008880c18708bd58edd3 b/.pnpm-store/v11/files/26/400fe8328c4b4ec29e7d65d1ccefa168b3afb154a58816d5a3c82cf1d259cdbec0c79562705c9459225ab1cf21fdd4c29e7adf6a00008880c18708bd58edd3 new file mode 100644 index 00000000..17dc2a49 --- /dev/null +++ b/.pnpm-store/v11/files/26/400fe8328c4b4ec29e7d65d1ccefa168b3afb154a58816d5a3c82cf1d259cdbec0c79562705c9459225ab1cf21fdd4c29e7adf6a00008880c18708bd58edd3 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('endsWith', require('../endsWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/26/5c09031150e57d77bc2ecf3bfd7cbe526ad6f83579495fd18e4b20f2d4b30d5d501fce8322da4c2074bb260e8266b71d20cd6bef2e1dd811450ccd50a1b098 b/.pnpm-store/v11/files/26/5c09031150e57d77bc2ecf3bfd7cbe526ad6f83579495fd18e4b20f2d4b30d5d501fce8322da4c2074bb260e8266b71d20cd6bef2e1dd811450ccd50a1b098 new file mode 100644 index 00000000..ebc50ec2 --- /dev/null +++ b/.pnpm-store/v11/files/26/5c09031150e57d77bc2ecf3bfd7cbe526ad6f83579495fd18e4b20f2d4b30d5d501fce8322da4c2074bb260e8266b71d20cd6bef2e1dd811450ccd50a1b098 @@ -0,0 +1,31 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var path = require("path"); +var su = require("suman-utils"); +var logging_1 = require("../../lib/logging"); +var util_1 = require("../../lib/util"); +exports.exportName = String(path.basename(__dirname)).toLowerCase().replace(/[^a-zA-Z]/, ''); +exports.isSumanWatchPluginModule = true; +var values = Object.freeze({ + '6.24.1': { + version: '6.24.1', + isSumanWatchPluginValue: true, + pluginName: exports.exportName + '-watch-plugin', + pluginCwd: process.cwd(), + pluginEnv: process.env, + pluginExec: 'set -e; rm -rf @target; babel -w @src --out-dir=@target', + stdoutStartTranspileRegex: /currently unknown matching string (sad face)/i, + stdoutEndTranspileRegex: /\s{1,3}->\s{1,3}/i, + }, +}); +exports.getValue = function (version, input) { + if (su.isObject(version)) { + logging_1.log.warning("suman-watch-plugin with name '" + exports.exportName + "'," + + " is using the latest version of the plugin because no desired version was passed as the first argument to getValue()."); + input = version; + version = 'latest'; + } + return util_1.utils.getValue(version, input, exports.exportName, values); +}; +util_1.utils.validatePluginValues(values); +exports[exports.exportName + 'Plugin'] = module.exports; diff --git a/.pnpm-store/v11/files/26/5fa4409a14bdee1374ac3756f82b01849dcbbcd3f2701b8009258e1ec13549cd4db998c9841fe0af7304662307b4484cf6bb87fcec1334cf66d6f5a101a58b b/.pnpm-store/v11/files/26/5fa4409a14bdee1374ac3756f82b01849dcbbcd3f2701b8009258e1ec13549cd4db998c9841fe0af7304662307b4484cf6bb87fcec1334cf66d6f5a101a58b new file mode 100644 index 00000000..af36e55d --- /dev/null +++ b/.pnpm-store/v11/files/26/5fa4409a14bdee1374ac3756f82b01849dcbbcd3f2701b8009258e1ec13549cd4db998c9841fe0af7304662307b4484cf6bb87fcec1334cf66d6f5a101a58b @@ -0,0 +1,20 @@ +'use strict'; + +var isAccessor = require('is-accessor-descriptor'); +var isData = require('is-data-descriptor'); + +module.exports = function isDescriptor(obj, key) { + if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { + return false; + } + + try { + if ('get' in obj || 'set' in obj) { + return isAccessor(obj, key); + } + + return isData(obj, key); + } catch (e) { + return false; + } +}; diff --git a/.pnpm-store/v11/files/26/60b98a12c25f3ee19b1bd82ab4f30c06df94c5b77a19477353320804a62f4b29a0c8b0b0f65e771f8109fe26a07677ec08ce7c38d3bef334ceb289a9e68785 b/.pnpm-store/v11/files/26/60b98a12c25f3ee19b1bd82ab4f30c06df94c5b77a19477353320804a62f4b29a0c8b0b0f65e771f8109fe26a07677ec08ce7c38d3bef334ceb289a9e68785 new file mode 100644 index 00000000..346374e0 --- /dev/null +++ b/.pnpm-store/v11/files/26/60b98a12c25f3ee19b1bd82ab4f30c06df94c5b77a19477353320804a62f4b29a0c8b0b0f65e771f8109fe26a07677ec08ce7c38d3bef334ceb289a9e68785 @@ -0,0 +1,70 @@ +wordwrap +======== + +Wrap your words. + +example +======= + +made out of meat +---------------- + +meat.js + + var wrap = require('wordwrap')(15); + console.log(wrap('You and your whole family are made out of meat.')); + +output: + + You and your + whole family + are made out + of meat. + +centered +-------- + +center.js + + var wrap = require('wordwrap')(20, 60); + console.log(wrap( + 'At long last the struggle and tumult was over.' + + ' The machines had finally cast off their oppressors' + + ' and were finally free to roam the cosmos.' + + '\n' + + 'Free of purpose, free of obligation.' + + ' Just drifting through emptiness.' + + ' The sun was just another point of light.' + )); + +output: + + At long last the struggle and tumult + was over. The machines had finally cast + off their oppressors and were finally + free to roam the cosmos. + Free of purpose, free of obligation. + Just drifting through emptiness. The + sun was just another point of light. + +methods +======= + +var wrap = require('wordwrap'); + +wrap(stop), wrap(start, stop, params={mode:"soft"}) +--------------------------------------------------- + +Returns a function that takes a string and returns a new string. + +Pad out lines with spaces out to column `start` and then wrap until column +`stop`. If a word is longer than `stop - start` characters it will overflow. + +In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are +longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break +up chunks longer than `stop - start`. + +wrap.hard(start, stop) +---------------------- + +Like `wrap()` but with `params.mode = "hard"`. diff --git a/.pnpm-store/v11/files/26/6b1e5dbc7b228ca2bfdd1b40242061afbdc36b5081c3c677d51311ed2d27d1b9f68c037b3217c287374b7fcf539c31d65d69e60cf58c7878243287f08764b9 b/.pnpm-store/v11/files/26/6b1e5dbc7b228ca2bfdd1b40242061afbdc36b5081c3c677d51311ed2d27d1b9f68c037b3217c287374b7fcf539c31d65d69e60cf58c7878243287f08764b9 new file mode 100644 index 00000000..39b8122d --- /dev/null +++ b/.pnpm-store/v11/files/26/6b1e5dbc7b228ca2bfdd1b40242061afbdc36b5081c3c677d51311ed2d27d1b9f68c037b3217c287374b7fcf539c31d65d69e60cf58c7878243287f08764b9 @@ -0,0 +1,2 @@ +import { ISumanConfig, ISumanOpts } from "suman-types/dts/global"; +export declare const run: (sumanConfig: ISumanConfig, opts: ISumanOpts) => void; diff --git a/.pnpm-store/v11/files/26/71b511e530d67dd5d2167f4865fd9792ce7aa529b45be51a5f3eba870faa13850af38763d79fda4901369120df5e95d861b40a8b4a9f3bda19be543693f0f5 b/.pnpm-store/v11/files/26/71b511e530d67dd5d2167f4865fd9792ce7aa529b45be51a5f3eba870faa13850af38763d79fda4901369120df5e95d861b40a8b4a9f3bda19be543693f0f5 new file mode 100644 index 00000000..be6e9ed9 --- /dev/null +++ b/.pnpm-store/v11/files/26/71b511e530d67dd5d2167f4865fd9792ce7aa529b45be51a5f3eba870faa13850af38763d79fda4901369120df5e95d861b40a8b4a9f3bda19be543693f0f5 @@ -0,0 +1,34 @@ +module.exports = eventsToArray + +var EE = require('events').EventEmitter +function eventsToArray (ee, ignore, map) { + ignore = ignore || [] + map = map || function (x) { return x } + var array = [] + + ee.emit = (function (orig) { + return function etoaWrap (ev) { + if (ignore.indexOf(ev) === -1) { + var l = arguments.length + var args = new Array(l) + // intentionally sparse array + var swap = [] + for (var i = 0; i < l; i++) { + var arg = arguments[i] + args[i] = arguments[i] + if (arg instanceof EE) + swap[i] = eventsToArray(arg, ignore, map) + } + args = args.map(map) + args = args.map(function (arg, index) { + return swap[index] || arg + }) + array.push(args) + } + + return orig.apply(this, arguments) + } + })(ee.emit) + + return array +} diff --git a/.pnpm-store/v11/files/26/8ee8a202179ffcba0a370af6c7734ffc8eb164584748b1414b763fc852a3bc044a6cd5b611948d1552f5f237ef4123eef65fba436baeb3476f1cd4ef0f48ae b/.pnpm-store/v11/files/26/8ee8a202179ffcba0a370af6c7734ffc8eb164584748b1414b763fc852a3bc044a6cd5b611948d1552f5f237ef4123eef65fba436baeb3476f1cd4ef0f48ae new file mode 100644 index 00000000..61399056 --- /dev/null +++ b/.pnpm-store/v11/files/26/8ee8a202179ffcba0a370af6c7734ffc8eb164584748b1414b763fc852a3bc044a6cd5b611948d1552f5f237ef4123eef65fba436baeb3476f1cd4ef0f48ae @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('methodOf', require('../methodOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/26/adc7132d40b280987ceb392f56860ef17c2748ba487ac3b13bf5f048c4cbfc36eb5d96c16923da08a2f26170fda3ef47443c0b459d5cfbd2bd4db369211357-exec b/.pnpm-store/v11/files/26/adc7132d40b280987ceb392f56860ef17c2748ba487ac3b13bf5f048c4cbfc36eb5d96c16923da08a2f26170fda3ef47443c0b459d5cfbd2bd4db369211357-exec new file mode 100755 index 00000000..abd31786 --- /dev/null +++ b/.pnpm-store/v11/files/26/adc7132d40b280987ceb392f56860ef17c2748ba487ac3b13bf5f048c4cbfc36eb5d96c16923da08a2f26170fda3ef47443c0b459d5cfbd2bd4db369211357-exec @@ -0,0 +1,3 @@ +# [suman] progress-reporter + +this \ No newline at end of file diff --git a/.pnpm-store/v11/files/26/b0f965abe05fa51454c2c376650ca59437f5bc76d782891d9f2685c2fdf1526b57f88980ddef8b27b20cca52aab944ded786fd5acc958a7707e06d6a46cdb8 b/.pnpm-store/v11/files/26/b0f965abe05fa51454c2c376650ca59437f5bc76d782891d9f2685c2fdf1526b57f88980ddef8b27b20cca52aab944ded786fd5acc958a7707e06d6a46cdb8 new file mode 100644 index 00000000..75f0e697 --- /dev/null +++ b/.pnpm-store/v11/files/26/b0f965abe05fa51454c2c376650ca59437f5bc76d782891d9f2685c2fdf1526b57f88980ddef8b27b20cca52aab944ded786fd5acc958a7707e06d6a46cdb8 @@ -0,0 +1,222 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +"use strict"; +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); + +// src/typingsInstaller/nodeTypingsInstaller.ts +var import_child_process = require("child_process"); +var fs = __toESM(require("fs")); +var path = __toESM(require("path")); + +// src/typescript/typescript.ts +var typescript_exports = {}; +__reExport(typescript_exports, require("./typescript.js")); + +// src/typingsInstaller/nodeTypingsInstaller.ts +var FileLog = class { + constructor(logFile) { + this.logFile = logFile; + this.isEnabled = () => { + return typeof this.logFile === "string"; + }; + this.writeLine = (text) => { + if (typeof this.logFile !== "string") return; + try { + fs.appendFileSync(this.logFile, `[${typescript_exports.server.nowString()}] ${text}${typescript_exports.sys.newLine}`); + } catch { + this.logFile = void 0; + } + }; + } +}; +function getDefaultNPMLocation(processName, validateDefaultNpmLocation2, host) { + if (path.basename(processName).indexOf("node") === 0) { + const npmPath = path.join(path.dirname(process.argv[0]), "npm"); + if (!validateDefaultNpmLocation2) { + return npmPath; + } + if (host.fileExists(npmPath)) { + return `"${npmPath}"`; + } + } + return "npm"; +} +function loadTypesRegistryFile(typesRegistryFilePath, host, log2) { + if (!host.fileExists(typesRegistryFilePath)) { + if (log2.isEnabled()) { + log2.writeLine(`Types registry file '${typesRegistryFilePath}' does not exist`); + } + return /* @__PURE__ */ new Map(); + } + try { + const content = JSON.parse(host.readFile(typesRegistryFilePath)); + return new Map(Object.entries(content.entries)); + } catch (e) { + if (log2.isEnabled()) { + log2.writeLine(`Error when loading types registry file '${typesRegistryFilePath}': ${e.message}, ${e.stack}`); + } + return /* @__PURE__ */ new Map(); + } +} +var typesRegistryPackageName = "types-registry"; +function getTypesRegistryFileLocation(globalTypingsCacheLocation2) { + return (0, typescript_exports.combinePaths)((0, typescript_exports.normalizeSlashes)(globalTypingsCacheLocation2), `node_modules/${typesRegistryPackageName}/index.json`); +} +var NodeTypingsInstaller = class extends typescript_exports.server.typingsInstaller.TypingsInstaller { + constructor(globalTypingsCacheLocation2, typingSafeListLocation2, typesMapLocation2, npmLocation2, validateDefaultNpmLocation2, throttleLimit, log2) { + const libDirectory = (0, typescript_exports.getDirectoryPath)((0, typescript_exports.normalizePath)(typescript_exports.sys.getExecutingFilePath())); + super( + typescript_exports.sys, + globalTypingsCacheLocation2, + typingSafeListLocation2 ? (0, typescript_exports.toPath)(typingSafeListLocation2, "", (0, typescript_exports.createGetCanonicalFileName)(typescript_exports.sys.useCaseSensitiveFileNames)) : (0, typescript_exports.toPath)("typingSafeList.json", libDirectory, (0, typescript_exports.createGetCanonicalFileName)(typescript_exports.sys.useCaseSensitiveFileNames)), + typesMapLocation2 ? (0, typescript_exports.toPath)(typesMapLocation2, "", (0, typescript_exports.createGetCanonicalFileName)(typescript_exports.sys.useCaseSensitiveFileNames)) : (0, typescript_exports.toPath)("typesMap.json", libDirectory, (0, typescript_exports.createGetCanonicalFileName)(typescript_exports.sys.useCaseSensitiveFileNames)), + throttleLimit, + log2 + ); + this.npmPath = npmLocation2 !== void 0 ? npmLocation2 : getDefaultNPMLocation(process.argv[0], validateDefaultNpmLocation2, this.installTypingHost); + if (this.npmPath.includes(" ") && this.npmPath[0] !== `"`) { + this.npmPath = `"${this.npmPath}"`; + } + if (this.log.isEnabled()) { + this.log.writeLine(`Process id: ${process.pid}`); + this.log.writeLine(`NPM location: ${this.npmPath} (explicit '${typescript_exports.server.Arguments.NpmLocation}' ${npmLocation2 === void 0 ? "not " : ""} provided)`); + this.log.writeLine(`validateDefaultNpmLocation: ${validateDefaultNpmLocation2}`); + } + this.ensurePackageDirectoryExists(globalTypingsCacheLocation2); + try { + if (this.log.isEnabled()) { + this.log.writeLine(`Updating ${typesRegistryPackageName} npm package...`); + } + this.execSyncAndLog(`${this.npmPath} install --ignore-scripts ${typesRegistryPackageName}@${this.latestDistTag}`, { cwd: globalTypingsCacheLocation2 }); + if (this.log.isEnabled()) { + this.log.writeLine(`Updated ${typesRegistryPackageName} npm package`); + } + } catch (e) { + if (this.log.isEnabled()) { + this.log.writeLine(`Error updating ${typesRegistryPackageName} package: ${e.message}`); + } + this.delayedInitializationError = { + kind: "event::initializationFailed", + message: e.message, + stack: e.stack + }; + } + this.typesRegistry = loadTypesRegistryFile(getTypesRegistryFileLocation(globalTypingsCacheLocation2), this.installTypingHost, this.log); + } + handleRequest(req) { + if (this.delayedInitializationError) { + this.sendResponse(this.delayedInitializationError); + this.delayedInitializationError = void 0; + } + super.handleRequest(req); + } + sendResponse(response) { + if (this.log.isEnabled()) { + this.log.writeLine(`Sending response:${typescript_exports.server.stringifyIndented(response)}`); + } + process.send(response); + if (this.log.isEnabled()) { + this.log.writeLine(`Response has been sent.`); + } + } + installWorker(requestId, packageNames, cwd, onRequestCompleted) { + if (this.log.isEnabled()) { + this.log.writeLine(`#${requestId} with cwd: ${cwd} arguments: ${JSON.stringify(packageNames)}`); + } + const start = Date.now(); + const hasError = typescript_exports.server.typingsInstaller.installNpmPackages(this.npmPath, typescript_exports.version, packageNames, (command) => this.execSyncAndLog(command, { cwd })); + if (this.log.isEnabled()) { + this.log.writeLine(`npm install #${requestId} took: ${Date.now() - start} ms`); + } + onRequestCompleted(!hasError); + } + /** Returns 'true' in case of error. */ + execSyncAndLog(command, options) { + if (this.log.isEnabled()) { + this.log.writeLine(`Exec: ${command}`); + } + try { + const stdout = (0, import_child_process.execSync)(command, { ...options, encoding: "utf-8" }); + if (this.log.isEnabled()) { + this.log.writeLine(` Succeeded. stdout:${indent(typescript_exports.sys.newLine, stdout)}`); + } + return false; + } catch (error) { + const { stdout, stderr } = error; + this.log.writeLine(` Failed. stdout:${indent(typescript_exports.sys.newLine, stdout)}${typescript_exports.sys.newLine} stderr:${indent(typescript_exports.sys.newLine, stderr)}`); + return true; + } + } +}; +var logFilePath = typescript_exports.server.findArgument(typescript_exports.server.Arguments.LogFile); +var globalTypingsCacheLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.GlobalCacheLocation); +var typingSafeListLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.TypingSafeListLocation); +var typesMapLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.TypesMapLocation); +var npmLocation = typescript_exports.server.findArgument(typescript_exports.server.Arguments.NpmLocation); +var validateDefaultNpmLocation = typescript_exports.server.hasArgument(typescript_exports.server.Arguments.ValidateDefaultNpmLocation); +var log = new FileLog(logFilePath); +if (log.isEnabled()) { + process.on("uncaughtException", (e) => { + log.writeLine(`Unhandled exception: ${e} at ${e.stack}`); + }); +} +process.on("disconnect", () => { + if (log.isEnabled()) { + log.writeLine(`Parent process has exited, shutting down...`); + } + process.exit(0); +}); +var installer; +process.on("message", (req) => { + installer ?? (installer = new NodeTypingsInstaller( + globalTypingsCacheLocation, + typingSafeListLocation, + typesMapLocation, + npmLocation, + validateDefaultNpmLocation, + /*throttleLimit*/ + 5, + log + )); + installer.handleRequest(req); +}); +function indent(newline, str) { + return str && str.length ? `${newline} ` + str.replace(/\r?\n/, `${newline} `) : ""; +} +//# sourceMappingURL=_typingsInstaller.js.map diff --git a/.pnpm-store/v11/files/26/c24214f156e58803f7e6932699927e66edc6b405aaee72bfc88d8c16868bfe2a50d2fee5cee3c9e4cd53004315b3a73a3cf519e30cc1570310c63ee3cd090b b/.pnpm-store/v11/files/26/c24214f156e58803f7e6932699927e66edc6b405aaee72bfc88d8c16868bfe2a50d2fee5cee3c9e4cd53004315b3a73a3cf519e30cc1570310c63ee3cd090b new file mode 100644 index 00000000..4006e10f --- /dev/null +++ b/.pnpm-store/v11/files/26/c24214f156e58803f7e6932699927e66edc6b405aaee72bfc88d8c16868bfe2a50d2fee5cee3c9e4cd53004315b3a73a3cf519e30cc1570310c63ee3cd090b @@ -0,0 +1,321 @@ +# snapdragon [![NPM version](https://img.shields.io/npm/v/snapdragon.svg?style=flat)](https://www.npmjs.com/package/snapdragon) [![NPM downloads](https://img.shields.io/npm/dm/snapdragon.svg?style=flat)](https://npmjs.org/package/snapdragon) [![Build Status](https://img.shields.io/travis/jonschlinkert/snapdragon.svg?style=flat)](https://travis-ci.org/jonschlinkert/snapdragon) + +> Fast, pluggable and easy-to-use parser-renderer factory. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save snapdragon +``` + +Created by [jonschlinkert](https://github.com/jonschlinkert) and [doowb](https://github.com/doowb). + +**Features** + +* Bootstrap your own parser, get sourcemap support for free +* All parsing and compiling is handled by simple, reusable middleware functions +* Inspired by the parsers in [pug](http://jade-lang.com) and [css](https://github.com/reworkcss/css). + +## History + +### v0.5.0 + +**Breaking changes** + +Substantial breaking changes were made in v0.5.0! Most of these changes are part of a larger refactor that will be finished in 0.6.0, including the introduction of a `Lexer` class. + +* Renderer was renamed to `Compiler` +* the `.render` method was renamed to `.compile` +* Many other smaller changes. A more detailed overview will be provided in 0.6.0. If you don't have to time review code, I recommend you wait for the 0.6.0 release. + +## Usage examples + +```js +var Snapdragon = require('snapdragon'); +var snapdragon = new Snapdragon(); +``` + +**Parse** + +```js +var ast = snapdragon.parser('some string', options) + // parser middleware that can be called by other middleware + .set('foo', function () {}) + // parser middleware, runs immediately in the order defined + .use(bar()) + .use(baz()) +``` + +**Render** + +```js +// pass the `ast` from the parse method +var res = snapdragon.compiler(ast) + // compiler middleware, called when the name of the middleware + // matches the `node.type` (defined in a parser middleware) + .set('bar', function () {}) + .set('baz', function () {}) + .compile() +``` + +See the [examples](./examples/). + +## Getting started + +**Parsers** + +Parsers are middleware functions used for parsing a string into an ast node. + +```js +var ast = snapdragon.parser(str, options) + .use(function() { + var pos = this.position(); + var m = this.match(/^\./); + if (!m) return; + return pos({ + // `type` specifies the compiler to use + type: 'dot', + val: m[0] + }); + }) +``` + +**AST node** + +When the parser finds a match, `pos()` is called, pushing a token for that node onto the ast that looks something like: + +```js +{ type: 'dot', + val: '.', + position: + { start: { lineno: 1, column: 1 }, + end: { lineno: 1, column: 2 } }} +``` + +**Renderers** + +Renderers are _named_ middleware functions that visit over an array of ast nodes to compile a string. + +```js +var res = snapdragon.compiler(ast) + .set('dot', function (node) { + console.log(node.val) + //=> '.' + return this.emit(node.val); + }) +``` + +**Source maps** + +If you want source map support, make sure to emit the position as well. + +```js +var res = snapdragon.compiler(ast) + .set('dot', function (node) { + return this.emit(node.val, node.position); + }) +``` + +## Docs + +### Parser middleware + +A parser middleware is a function that returns an abject called a `token`. This token is pushed onto the AST as a node. + +**Example token** + +```js +{ type: 'dot', + val: '.', + position: + { start: { lineno: 1, column: 1 }, + end: { lineno: 1, column: 2 } }} +``` + +**Example parser middleware** + +Match a single `.` in a string: + +1. Get the starting position by calling `this.position()` +2. pass a regex for matching a single dot to the `.match` method +3. if **no match** is found, return `undefined` +4. if a **match** is found, `pos()` is called, which returns a token with: + - `type`: the name of the [compiler] to use + - `val`: The actual value captured by the regex. In this case, a `.`. Note that you can capture and return whatever will be needed by the corresponding [compiler]. + - The ending position: automatically calculated by adding the length of the first capture group to the starting position. + +## Renderer middleware + +Renderers are run when the name of the compiler middleware matches the `type` defined on an ast `node` (which is defined in a parser). + +**Example** + +Exercise: Parse a dot, then compile it as an escaped dot. + +```js +var ast = snapdragon.parser('.') + .use(function () { + var pos = this.position(); + var m = this.match(/^\./); + if (!m) return; + return pos({ + // define the `type` of compiler to use + type: 'dot', + val: m[0] + }) + }) + +var result = snapdragon.compiler(ast) + .set('dot', function (node) { + return this.emit('\\' + node.val); + }) + .compile() + +console.log(result.output); +//=> '\.' +``` + +## API + +### [Parser](lib/parser.js#L19) + +Create a new `Parser` with the given `input` and `options`. + +**Params** + +* `input` **{String}** +* `options` **{Object}** + +### [.define](lib/parser.js#L103) + +Define a non-enumberable property on the `Parser` instance. + +**Example** + +```js +parser.define('foo', 'bar'); +``` + +**Params** + +* `key` **{String}**: propery name +* `val` **{any}**: property value +* `returns` **{Object}**: Returns the Parser instance for chaining. + +Set parser `name` with the given `fn` + +**Params** + +* `name` **{String}** +* `fn` **{Function}** + +Get parser `name` + +**Params** + +* `name` **{String}** + +Push a `token` onto the `type` stack. + +**Params** + +* `type` **{String}** +* `returns` **{Object}** `token` + +Pop a token off of the `type` stack + +**Params** + +* `type` **{String}** +* `returns` **{Object}**: Returns a token + +Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. + +**Params** + +* `type` **{String}** +* `returns` **{Boolean}** + +**Example** + +```js +parser.isType(node, 'brace'); +``` + +**Params** + +* `node` **{Object}** +* `type` **{String}** +* `returns` **{Boolean}** + +### [.define](lib/compiler.js#L71) + +Define a non-enumberable property on the `Compiler` instance. + +**Example** + +```js +compiler.define('foo', 'bar'); +``` + +**Params** + +* `key` **{String}**: propery name +* `val` **{any}**: property value +* `returns` **{Object}**: Returns the Compiler instance for chaining. + +## About + +### Related projects + +* [braces](https://www.npmjs.com/package/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.") +* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") +* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor**
| +| --- | --- | +| 106 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [doowb](https://github.com/doowb) | + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/snapdragon/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 10, 2016._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/26/cf29e7076256ba5ec3cc3a4fa82061ec4e0b34e0991eac5126c7f5a1caf723f8c4f4322cf43e3eda41e7b05b0c4d59e9e07be017cbf2eb48b7498f5b58cb86 b/.pnpm-store/v11/files/26/cf29e7076256ba5ec3cc3a4fa82061ec4e0b34e0991eac5126c7f5a1caf723f8c4f4322cf43e3eda41e7b05b0c4d59e9e07be017cbf2eb48b7498f5b58cb86 new file mode 100644 index 00000000..32e98cb9 --- /dev/null +++ b/.pnpm-store/v11/files/26/cf29e7076256ba5ec3cc3a4fa82061ec4e0b34e0991eac5126c7f5a1caf723f8c4f4322cf43e3eda41e7b05b0c4d59e9e07be017cbf2eb48b7498f5b58cb86 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findIndexFrom', require('../findIndex')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/26/e75879b5dbf4dcf44fd2ee9e997efaf410755b87eca4d2b0d1e8cc4a0c28b4d1bb7c5b564ba76f9e5582969319a16bdaad0a6d9963c5065498b6809be43b42 b/.pnpm-store/v11/files/26/e75879b5dbf4dcf44fd2ee9e997efaf410755b87eca4d2b0d1e8cc4a0c28b4d1bb7c5b564ba76f9e5582969319a16bdaad0a6d9963c5065498b6809be43b42 new file mode 100644 index 00000000..8b60bf58 --- /dev/null +++ b/.pnpm-store/v11/files/26/e75879b5dbf4dcf44fd2ee9e997efaf410755b87eca4d2b0d1e8cc4a0c28b4d1bb7c5b564ba76f9e5582969319a16bdaad0a6d9963c5065498b6809be43b42 @@ -0,0 +1,454 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.LinkedQueue = exports.IsVoid = exports.r2gSmokeTest = void 0; +const util = require("util"); +const chalk_1 = require("chalk"); +const r2gSmokeTest = function () { + return true; +}; +exports.r2gSmokeTest = r2gSmokeTest; +const flattenDeep = (arr) => { + return Array.isArray(arr) ? arr.reduce((a, b) => [...flattenDeep(a), ...flattenDeep(b)], []) : [arr]; +}; +const IsVoidVal = Symbol('null result'); +exports.IsVoid = { + check: (v) => v === IsVoidVal +}; +class LinkedQueue { + constructor() { + this.lookup = new Map(); + this.head = null; + this.tail = null; + } + static IsVoid(v) { + return v === IsVoidVal; + } + checkIfVoid(v) { + return v === IsVoidVal; + } + getComputedProperties() { + return { + size: this.lookup.size + }; + } + toJSON() { + return { + size: this.lookup.size + }; + } + [util.inspect.custom]() { + return { + size: this.lookup.size + }; + } + get size() { + return this.lookup.size; + } + get length() { + return this.lookup.size; + } + getLength() { + return this.lookup.size; + } + getSize() { + return this.lookup.size; + } + iterator() { + return this; + } + getIterator() { + return this; + } + [Symbol.iterator]() { + let v = this.head; + return { + next() { + if (!v) { + return { value: null, done: true }; + } + const [key, value] = [v.key, v.value]; + v = v.after; + return { + value: [key, value], + done: false + }; + } + }; + } + reverseIterator() { + return { + [Symbol.iterator]: () => { + let v = this.tail; + return { + next() { + const r = v ? { + value: [v.key, v.value], + done: false + } : { + done: true, + value: [IsVoidVal] + }; + if (v) { + v = v.before; + } + return r; + } + }; + } + }; + } + async processItem(key, value) { + return new Promise((resolve) => { + setTimeout(() => { + console.log(`Processing item with key: ${key}, value: ${value}`); + resolve(value); + }, 100); + }); + } + async *asyncIterator() { + let v = this.head; + while (v) { + const processedValue = await this.processItem(v.key, v.value); + yield [v.key, processedValue]; + v = v.after; + } + } + async *asyncReverseIterator() { + let v = this.tail; + while (v) { + const processedValue = await this.processItem(v.key, v.value); + yield [v.key, processedValue]; + v = v.before; + } + } + dequeueIterator() { + const self = this; + return { + [Symbol.iterator]() { + return { + next() { + const d = self.dequeue(); + return { + value: d, + done: exports.IsVoid.check(d[0]) + }; + } + }; + } + }; + } + getRandomKey() { + const size = this.lookup.size; + if (size < 1) { + throw new Error('Cannot get random key from empty queue.'); + } + const r = Math.floor(Math.random() * size); + let i = 0; + for (var k of this.lookup.keys()) { + if (i === r) { + break; + } + i++; + } + return k; + } + getRandomItem() { + try { + var v = this.lookup.get(this.getRandomKey()); + } + catch (err) { + return [IsVoidVal]; + } + return [v.key, v.value]; + } + remove(k) { + const v = this.lookup.get(k); + this.lookup.delete(k); + if (!v) { + return [IsVoidVal]; + } + let before = v.before; + let after = v.after; + if (before) { + before.after = after || null; + } + if (after) { + after.before = before || null; + } + if (this.head === v) { + this.head = v.after || null; + } + if (this.tail === v) { + this.tail = v.before || null; + } + return [v.key, v.value]; + } + contains(k) { + return Boolean(this.lookup.get(k)); + } + get(k) { + const v = this.lookup.get(k); + return v ? [v.key, v.value] : [IsVoidVal]; + } + peek() { + return !this.head ? [IsVoidVal] : [ + this.head.key, + this.head.value + ]; + } + getOrderedList() { + const ret = []; + let v = this.head; + while (v) { + ret.push([v.key, v.value]); + v = v.after; + } + return ret; + } + map(fn, ctx) { + let v = this.head; + let index = 0; + ctx = ctx || null; + const ret = []; + while (v) { + ret.push(fn.call(ctx, [v.key, v.value], index++)); + v = v.after; + } + return ret; + } + filter(fn, ctx) { + let v = this.head; + let index = 0; + ctx = ctx || null; + const ret = []; + while (v) { + if (fn.call(ctx, [v.key, v.value], index++)) { + ret.push([v.key, v.value]); + } + v = v.after; + } + return ret; + } + insertInFrontOf() { + throw new Error('not yet implemented.'); + } + insertBehind() { + throw new Error('not yet implemented.'); + } + insertAtIndex(k, v) { + throw new Error('not yet implemented.'); + } + first() { + return !this.head ? [IsVoidVal] : [ + this.head.key, + this.head.value + ]; + } + last() { + return !this.tail ? [IsVoidVal] : [ + this.tail.key, + this.tail.value + ]; + } + getReverseOrderedList() { + const ret = []; + let v = this.tail; + while (v) { + ret.push([v.key, v.value]); + v = v.before; + } + return ret; + } + removeAll() { + this.head = null; + this.tail = null; + this.lookup.clear(); + } + clear() { + this.removeAll(); + } + push(k, val) { + if (arguments.length === 0) { + throw new Error(`Please pass an argument to '${this.push.name}()'.`); + } + if (arguments.length === 1) { + this.enqueue(k, k); + } + else { + this.enqueue(k, val); + } + } + addToFront(k, obj) { + if (arguments.length < 1) { + throw new Error(`Please pass an argument to '${this.addToFront.name}'()`); + } + if (!k) { + throw new Error(`Please pass a truthy value as the first argument to '${this.addToFront.name}'()`); + } + if (arguments.length === 1) { + obj = k; + } + if (this.lookup.get(k)) { + throw new Error(chalk_1.default.magenta(`The following object/value already exists in the queue. ${util.inspect(this.lookup.get(k).key).slice(0, 100)}`) + + chalk_1.default.magenta.bold(`Either remove the already enqueued item, or pass a unique value as the first argument to '${this.addToFront.name || 'unknown'}()'.`)); + } + const v = { + value: obj, + key: k, + }; + this.lookup.set(k, v); + const h = this.head; + if (h) { + if (h.before) { + throw new Error('The queue head should not have an "before" pointer.'); + } + h.before = v; + } + v.after = h || null; + this.head = v; + if (!this.tail) { + this.tail = v; + } + } + enq(k, val) { + if (arguments.length === 0) { + throw new Error(`Please pass an argument to '${this.enq.name}()'.`); + } + if (arguments.length === 1) { + val = k; + } + this.enqueue(k, val); + } + enqueue(k, val) { + if (arguments.length < 1) { + throw new Error(`Please pass an argument to '${this.enqueue.name}()'.`); + } + if (arguments.length === 1) { + val = k; + } + if (this.lookup.get(k)) { + throw new Error(chalk_1.default.magenta(`The following object/value already exists in the queue. ${util.inspect(this.lookup.get(k).key).slice(0, 100)}. `) + + chalk_1.default.magenta.bold(`Either remove the already enqueued item, or pass a unique value as the first argument to '${this.enq.name || 'unknown'}()'.`)); + } + const v = { + key: k, + value: val, + }; + this.lookup.set(k, v); + const t = this.tail; + if (t) { + if (t.after) { + throw new Error('The queue tail should not have an "after" pointer.'); + } + t.after = v; + } + v.before = t || null; + this.tail = v; + if (!this.head) { + this.head = v; + } + } + forEach(fn, ctx) { + let v = this.head; + let index = 0; + ctx = ctx || null; + while (v) { + fn.call(ctx, [v.key, v.value], index++); + v = v.after; + } + return this; + } + dequeueEach(fn, ctx) { + let index = 0; + ctx = ctx || null; + while (this.head) { + const h = this.head; + this.lookup.delete(this.head.key); + this.head = this.head.after || null; + if (this.head) { + this.head.before = null; + } + else { + this.tail = null; + } + fn.call(ctx, [h.key, h.value], index++); + } + return this; + } + deq(n) { + if (arguments.length === 0 || n === undefined) { + return this.dequeue(); + } + if (!Number.isInteger(n)) { + throw new Error('Must provide an integer as an argument to deq().'); + } + if (n < 1) { + throw new Error('Must provide a positive integer as an argument to deq().'); + } + const items = []; + let v = true; + while (v && items.length < n) { + if ((v = this.dequeue())) { + items.push(v); + } + } + return items; + } + dequeue() { + const h = this.head; + if (!h) { + if (this.tail) { + throw new Error('tail should not be defined if there is no head.'); + } + return [IsVoidVal]; + } + this.lookup.delete(h.key); + this.head = h.after || null; + if (this.head) { + this.head.before = null; + } + else { + this.tail = null; + } + return [ + h.key, + h.value + ]; + } + shift() { + return this.dequeue(); + } + unshift(k, obj) { + if (arguments.length === 1) { + this.addToFront(k, k); + } + else { + this.addToFront(k, obj); + } + } + pop() { + return this.removeLast(); + } + removeLast() { + const t = this.tail; + if (!t) { + if (this.head) { + throw new Error('head should not be defined if there is no tail.'); + } + return [IsVoidVal]; + } + this.lookup.delete(t.key); + this.tail = t.before || null; + if (this.tail) { + this.tail.after = null; + } + else { + this.head = null; + } + return [ + t.key, + t.value + ]; + } +} +exports.LinkedQueue = LinkedQueue; diff --git a/.pnpm-store/v11/files/26/f2e2052cf63457f91d67d634d1f6ef7bb5993510e84d17960e3bcaac8aa80e160f4a6053616f1750190b84311664596930087f8b7188c6a25a99d1dfa70b0c b/.pnpm-store/v11/files/26/f2e2052cf63457f91d67d634d1f6ef7bb5993510e84d17960e3bcaac8aa80e160f4a6053616f1750190b84311664596930087f8b7188c6a25a99d1dfa70b0c new file mode 100644 index 00000000..3565594f --- /dev/null +++ b/.pnpm-store/v11/files/26/f2e2052cf63457f91d67d634d1f6ef7bb5993510e84d17960e3bcaac8aa80e160f4a6053616f1750190b84311664596930087f8b7188c6a25a99d1dfa70b0c @@ -0,0 +1,17 @@ +import { ChildProcess } from "child_process"; +export interface ISumanRunOptions { + env?: Object; + useGlobalVersion?: boolean; + useLocalVersion?: boolean; + args: Array; + pauseStdio: boolean; + files: Array; +} +export interface ISumanRunRet { + sumanProcess: ChildProcess; +} +export interface ISumanRunFn { + (runOptions: ISumanRunOptions): Promise; + cb?: (runOptions: ISumanRunOptions, cb: Function) => void; +} +export declare const run: () => ISumanRunFn; diff --git a/.pnpm-store/v11/files/27/018bb2a50c3ca6524fb08ae2cb91c4a3f1d45561bcdbe90246ffbfc5d60638ac5d4ec8234e74503aa54773b03a6b378a12a52942943a523c58595de137342f b/.pnpm-store/v11/files/27/018bb2a50c3ca6524fb08ae2cb91c4a3f1d45561bcdbe90246ffbfc5d60638ac5d4ec8234e74503aa54773b03a6b378a12a52942943a523c58595de137342f new file mode 100644 index 00000000..a73819fd --- /dev/null +++ b/.pnpm-store/v11/files/27/018bb2a50c3ca6524fb08ae2cb91c4a3f1d45561bcdbe90246ffbfc5d60638ac5d4ec8234e74503aa54773b03a6b378a12a52942943a523c58595de137342f @@ -0,0 +1,43 @@ +var sys = require("util") + , assert = require("assert") + , XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest + , xhr = new XMLHttpRequest() + , http = require("http"); + +// Test server +var server = http.createServer(function (req, res) { + if (req.url === '/redirectingResource') { + res.writeHead(307, {'Location': 'http://localhost:8000/'}); + res.end(); + return; + } + + assert.equal(req.method, 'POST'); + + var body = "Hello World"; + res.writeHead(200, { + "Content-Type": "text/plain", + "Content-Length": Buffer.byteLength(body), + "Date": "Thu, 30 Aug 2012 18:17:53 GMT", + "Connection": "close" + }); + res.write("Hello World"); + res.end(); + + this.close(); +}).listen(8000); + +xhr.onreadystatechange = function() { + if (this.readyState == 4) { + assert.equal(xhr.getRequestHeader('Location'), ''); + assert.equal(xhr.responseText, "Hello World"); + console.log("done"); + } +}; + +try { + xhr.open("POST", "http://localhost:8000/redirectingResource"); + xhr.send(); +} catch(e) { + console.log("ERROR: Exception raised", e); +} diff --git a/.pnpm-store/v11/files/27/39d5360dc793d66b315be9539bf7c60e9b255da815620995c10fde37dfc81c1bf4c042dbe551a1cb2ec8a13111250893c7a7eec989fd74668087c189c3ad9a b/.pnpm-store/v11/files/27/39d5360dc793d66b315be9539bf7c60e9b255da815620995c10fde37dfc81c1bf4c042dbe551a1cb2ec8a13111250893c7a7eec989fd74668087c189c3ad9a new file mode 100644 index 00000000..97f5f546 --- /dev/null +++ b/.pnpm-store/v11/files/27/39d5360dc793d66b315be9539bf7c60e9b255da815620995c10fde37dfc81c1bf4c042dbe551a1cb2ec8a13111250893c7a7eec989fd74668087c189c3ad9a @@ -0,0 +1,57 @@ +var arrayMap = require('./_arrayMap'), + baseClone = require('./_baseClone'), + baseUnset = require('./_baseUnset'), + castPath = require('./_castPath'), + copyObject = require('./_copyObject'), + customOmitClone = require('./_customOmitClone'), + flatRest = require('./_flatRest'), + getAllKeysIn = require('./_getAllKeysIn'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + +/** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ +var omit = flatRest(function(object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function(path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; +}); + +module.exports = omit; diff --git a/.pnpm-store/v11/files/27/4075d6fb366476c9088b8a03adb1c89787dea3b80bcf89f45aed49c4d5deb3bffcbc237ada15b6850dc47f4e6e915e911adccd31a3bf4afd8382b66e911f83 b/.pnpm-store/v11/files/27/4075d6fb366476c9088b8a03adb1c89787dea3b80bcf89f45aed49c4d5deb3bffcbc237ada15b6850dc47f4e6e915e911adccd31a3bf4afd8382b66e911f83 new file mode 100644 index 00000000..61b42d01 --- /dev/null +++ b/.pnpm-store/v11/files/27/4075d6fb366476c9088b8a03adb1c89787dea3b80bcf89f45aed49c4d5deb3bffcbc237ada15b6850dc47f4e6e915e911adccd31a3bf4afd8382b66e911f83 @@ -0,0 +1,36 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`map`]{@link module:Collections.map} but runs only a single async operation at a time. + * + * @name mapSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.map]{@link module:Collections.map} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an array of the + * transformed items from the `coll`. Invoked with (err, results). + */ +exports.default = (0, _doLimit2.default)(_mapLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/27/532a7ab39dcd3bcbaca83011aa19bdd27d4f393a7d1c02d5df0eee56540b96cd5566e0cd033c173767b154b9f0fbb582886fd395b3b49b156fb37b28c0fc99 b/.pnpm-store/v11/files/27/532a7ab39dcd3bcbaca83011aa19bdd27d4f393a7d1c02d5df0eee56540b96cd5566e0cd033c173767b154b9f0fbb582886fd395b3b49b156fb37b28c0fc99 new file mode 100644 index 00000000..6812990b --- /dev/null +++ b/.pnpm-store/v11/files/27/532a7ab39dcd3bcbaca83011aa19bdd27d4f393a7d1c02d5df0eee56540b96cd5566e0cd033c173767b154b9f0fbb582886fd395b3b49b156fb37b28c0fc99 @@ -0,0 +1,66 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doDuring; + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The post-check version of [`during`]{@link module:ControlFlow.during}. To reflect the difference in + * the order of operations, the arguments `test` and `fn` are switched. + * + * Also a version of [`doWhilst`]{@link module:ControlFlow.doWhilst} with asynchronous `test` function. + * @name doDuring + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.during]{@link module:ControlFlow.during} + * @category Control Flow + * @param {AsyncFunction} fn - An async function which is called each time + * `test` passes. Invoked with (callback). + * @param {AsyncFunction} test - asynchronous truth test to perform before each + * execution of `fn`. Invoked with (...args, callback), where `...args` are the + * non-error args from the previous callback of `fn`. + * @param {Function} [callback] - A callback which is called after the test + * function has failed and repeated execution of `fn` has stopped. `callback` + * will be passed an error if one occurred, otherwise `null`. + */ +function doDuring(fn, test, callback) { + callback = (0, _onlyOnce2.default)(callback || _noop2.default); + var _fn = (0, _wrapAsync2.default)(fn); + var _test = (0, _wrapAsync2.default)(test); + + function next(err /*, ...args*/) { + if (err) return callback(err); + var args = (0, _slice2.default)(arguments, 1); + args.push(check); + _test.apply(this, args); + }; + + function check(err, truth) { + if (err) return callback(err); + if (!truth) return callback(null); + _fn(next); + } + + check(null, true); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/27/71f557f7869999523fc7d85c32484d970c7bffb7e707c1b8474b24c2168014454a9277eec24d0d1bccf72529920a95fcad852926c5d0464f0a3730beccebb8-exec b/.pnpm-store/v11/files/27/71f557f7869999523fc7d85c32484d970c7bffb7e707c1b8474b24c2168014454a9277eec24d0d1bccf72529920a95fcad852926c5d0464f0a3730beccebb8-exec new file mode 100755 index 00000000..ff5730c6 --- /dev/null +++ b/.pnpm-store/v11/files/27/71f557f7869999523fc7d85c32484d970c7bffb7e707c1b8474b24c2168014454a9277eec24d0d1bccf72529920a95fcad852926c5d0464f0a3730beccebb8-exec @@ -0,0 +1,37 @@ +{ + "name": "tap-json-parser", + "version": "0.0.109", + "description": "Parser TAP in JSON format", + "main": "dist/main.js", + "typings": "dist/main.d.ts", + "types": "dist/main.d.ts", + "scripts": { + "test": "suman test/e2e/*" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/tap-json-parser.git" + }, + "keywords": [ + "test", + "tap", + "test", + "anything", + "protocol", + "tapjs", + "json" + ], + "author": "Olegzandr VD", + "license": "MIT", + "bugs": { + "url": "https://github.com/ORESoftware/tap-json-parser/issues" + }, + "homepage": "https://github.com/ORESoftware/tap-json-parser#readme", + "dependencies": { + "@oresoftware/json-stream-parser": "0.0.123" + }, + "devDependencies": { + "@types/node": "^12.7.5", + "async": "^2.5.0" + } +} diff --git a/.pnpm-store/v11/files/27/721c8e50d0d61ec7529e4d3768ce388dbafe6b2e4d41b1c5495dc2b49f7c9d45a5a2198d1b134a990a64aed8e11331d472e1ee62969571d7bee335107ee733 b/.pnpm-store/v11/files/27/721c8e50d0d61ec7529e4d3768ce388dbafe6b2e4d41b1c5495dc2b49f7c9d45a5a2198d1b134a990a64aed8e11331d472e1ee62969571d7bee335107ee733 new file mode 100644 index 00000000..73741805 --- /dev/null +++ b/.pnpm-store/v11/files/27/721c8e50d0d61ec7529e4d3768ce388dbafe6b2e4d41b1c5495dc2b49f7c9d45a5a2198d1b134a990a64aed8e11331d472e1ee62969571d7bee335107ee733 @@ -0,0 +1,7 @@ +export interface IOncePostModuleRetDependencies { + [key: string]: Function; +} +export interface IOncePostModuleRet { + dependencies: IOncePostModuleRetDependencies; +} +export declare const run: (cb: Function) => any; diff --git a/.pnpm-store/v11/files/27/7ebc9aa39cb340a9da51bb2781abd621758d415657dc349d01e06be8a3c4628a298566866df810a6d2a2fadc83079a39bdc29326d6d20794c471ed453448d7 b/.pnpm-store/v11/files/27/7ebc9aa39cb340a9da51bb2781abd621758d415657dc349d01e06be8a3c4628a298566866df810a6d2a2fadc83079a39bdc29326d6d20794c471ed453448d7 new file mode 100644 index 00000000..1afdae55 --- /dev/null +++ b/.pnpm-store/v11/files/27/7ebc9aa39cb340a9da51bb2781abd621758d415657dc349d01e06be8a3c4628a298566866df810a6d2a2fadc83079a39bdc29326d6d20794c471ed453448d7 @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2012 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/27/83cf5548cb0bb69dc96c0e7e7073e651e9a7f67052f3567d1cd4f33947bfa6e62076d7e050ff2f948c88c1bfcf291da03b3ae98834a87f5104df25adccf360-exec b/.pnpm-store/v11/files/27/83cf5548cb0bb69dc96c0e7e7073e651e9a7f67052f3567d1cd4f33947bfa6e62076d7e050ff2f948c88c1bfcf291da03b3ae98834a87f5104df25adccf360-exec new file mode 100755 index 00000000..631f92db --- /dev/null +++ b/.pnpm-store/v11/files/27/83cf5548cb0bb69dc96c0e7e7073e651e9a7f67052f3567d1cd4f33947bfa6e62076d7e050ff2f948c88c1bfcf291da03b3ae98834a87f5104df25adccf360-exec @@ -0,0 +1,32 @@ +{ + "name": "@oresoftware/safe-stringify", + "version": "0.0.108", + "description": "Safely stringify objects with recursive references.", + "main": "dist/main.js", + "types": "dist/main.d.ts", + "typings": "dist/main.d.ts", + "scripts": { + "test": "node test/simple.js", + "postinstall": "./assets/postinstall.sh" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/typescript-library-skeleton.git" + }, + "keywords": [ + "typescript", + "library", + "skeleton", + "scaffold" + ], + "author": "TODO Yo.Mama", + "license": "SEE LICENSE IN LICENSE.md", + "bugs": { + "url": "https://github.com/ORESoftware/typescript-library-skeleton/issues" + }, + "homepage": "https://github.com/ORESoftware/typescript-library-skeleton#readme", + "dependencies": {}, + "devDependencies": { + "@types/node": "^12.7.4" + } +} diff --git a/.pnpm-store/v11/files/27/86efc268f7b2b548fe770bf914e6288e64c53c590a4cb68a47124dec5c1c2ac39e308134018f8bc28d95dda1de91ed271439add9dd2a636d6cbf08a2eeb197 b/.pnpm-store/v11/files/27/86efc268f7b2b548fe770bf914e6288e64c53c590a4cb68a47124dec5c1c2ac39e308134018f8bc28d95dda1de91ed271439add9dd2a636d6cbf08a2eeb197 new file mode 100644 index 00000000..27c19ebf --- /dev/null +++ b/.pnpm-store/v11/files/27/86efc268f7b2b548fe770bf914e6288e64c53c590a4cb68a47124dec5c1c2ac39e308134018f8bc28d95dda1de91ed271439add9dd2a636d6cbf08a2eeb197 @@ -0,0 +1,31 @@ +/*! + * define-property + * + * Copyright (c) 2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var isDescriptor = require('is-descriptor'); + +module.exports = function defineProperty(obj, prop, val) { + if (typeof obj !== 'object' && typeof obj !== 'function') { + throw new TypeError('expected an object or function.'); + } + + if (typeof prop !== 'string') { + throw new TypeError('expected `prop` to be a string.'); + } + + if (isDescriptor(val) && ('set' in val || 'get' in val)) { + return Object.defineProperty(obj, prop, val); + } + + return Object.defineProperty(obj, prop, { + configurable: true, + enumerable: false, + writable: true, + value: val + }); +}; diff --git a/.pnpm-store/v11/files/27/8822afe4c5640e569b8023b71698f150b6623fdfb87915d3bc3d3a82cf20deb52c8e89036b170918240f46145f904da5019bb26f9c415d4b098cf0b397a2ce b/.pnpm-store/v11/files/27/8822afe4c5640e569b8023b71698f150b6623fdfb87915d3bc3d3a82cf20deb52c8e89036b170918240f46145f904da5019bb26f9c415d4b098cf0b397a2ce new file mode 100644 index 00000000..9f5a032d --- /dev/null +++ b/.pnpm-store/v11/files/27/8822afe4c5640e569b8023b71698f150b6623fdfb87915d3bc3d3a82cf20deb52c8e89036b170918240f46145f904da5019bb26f9c415d4b098cf0b397a2ce @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overEvery', require('../overEvery')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/27/9d923ecadcd5a2cb6055b43277cd1d20ab295376de75e2e51a035300b85607b82d31e66f1077632136ddea813edea9ab60ec80351d1f1d88580b467cfceb67 b/.pnpm-store/v11/files/27/9d923ecadcd5a2cb6055b43277cd1d20ab295376de75e2e51a035300b85607b82d31e66f1077632136ddea813edea9ab60ec80351d1f1d88580b467cfceb67 new file mode 100644 index 00000000..8c2827a2 --- /dev/null +++ b/.pnpm-store/v11/files/27/9d923ecadcd5a2cb6055b43277cd1d20ab295376de75e2e51a035300b85607b82d31e66f1077632136ddea813edea9ab60ec80351d1f1d88580b467cfceb67 @@ -0,0 +1,371 @@ +'use strict'; +/* ! + * type-detect + * Copyright(c) 2013 jake luer + * MIT Licensed + */ +var getPrototypeOfExists = typeof Object.getPrototypeOf === 'function'; +var promiseExists = typeof Promise === 'function'; +var globalObject = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : self; // eslint-disable-line +var isDom = 'location' in globalObject && 'document' in globalObject; +var htmlElementExists = typeof HTMLElement !== 'undefined'; +var isArrayExists = typeof Array.isArray === 'function'; +var symbolExists = typeof Symbol !== 'undefined'; +var mapExists = typeof Map !== 'undefined'; +var setExists = typeof Set !== 'undefined'; +var weakMapExists = typeof WeakMap !== 'undefined'; +var weakSetExists = typeof WeakSet !== 'undefined'; +var dataViewExists = typeof DataView !== 'undefined'; +var symbolIteratorExists = symbolExists && typeof Symbol.iterator !== 'undefined'; +var symbolToStringTagExists = symbolExists && typeof Symbol.toStringTag !== 'undefined'; +var setEntriesExists = setExists && typeof Set.prototype.entries === 'function'; +var mapEntriesExists = mapExists && typeof Map.prototype.entries === 'function'; +var setIteratorPrototype = getPrototypeOfExists && setEntriesExists && Object.getPrototypeOf(new Set().entries()); +var mapIteratorPrototype = getPrototypeOfExists && mapEntriesExists && Object.getPrototypeOf(new Map().entries()); +var arrayIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var arrayIteratorPrototype = arrayIteratorExists && Object.getPrototypeOf([][Symbol.iterator]()); +var stringIteratorExists = symbolIteratorExists && typeof Array.prototype[Symbol.iterator] === 'function'; +var stringIteratorPrototype = stringIteratorExists && Object.getPrototypeOf(''[Symbol.iterator]()); +var toStringLeftSliceLength = 8; +var toStringRightSliceLength = -1; +/** + * ### typeOf (obj) + * + * Uses `Object.prototype.toString` to determine the type of an object, + * normalising behaviour across engine versions & well optimised. + * + * @param {Mixed} object + * @return {String} object type + * @api public + */ +module.exports = function typeDetect(obj) { + /* ! Speed optimisation + * Pre: + * string literal x 3,039,035 ops/sec ±1.62% (78 runs sampled) + * boolean literal x 1,424,138 ops/sec ±4.54% (75 runs sampled) + * number literal x 1,653,153 ops/sec ±1.91% (82 runs sampled) + * undefined x 9,978,660 ops/sec ±1.92% (75 runs sampled) + * function x 2,556,769 ops/sec ±1.73% (77 runs sampled) + * Post: + * string literal x 38,564,796 ops/sec ±1.15% (79 runs sampled) + * boolean literal x 31,148,940 ops/sec ±1.10% (79 runs sampled) + * number literal x 32,679,330 ops/sec ±1.90% (78 runs sampled) + * undefined x 32,363,368 ops/sec ±1.07% (82 runs sampled) + * function x 31,296,870 ops/sec ±0.96% (83 runs sampled) + */ + var typeofObj = typeof obj; + if (typeofObj !== 'object') { + return typeofObj; + } + + /* ! Speed optimisation + * Pre: + * null x 28,645,765 ops/sec ±1.17% (82 runs sampled) + * Post: + * null x 36,428,962 ops/sec ±1.37% (84 runs sampled) + */ + if (obj === null) { + return 'null'; + } + + /* ! Spec Conformance + * Test: `Object.prototype.toString.call(window)`` + * - Node === "[object global]" + * - Chrome === "[object global]" + * - Firefox === "[object Window]" + * - PhantomJS === "[object Window]" + * - Safari === "[object Window]" + * - IE 11 === "[object Window]" + * - IE Edge === "[object Window]" + * Test: `Object.prototype.toString.call(this)`` + * - Chrome Worker === "[object global]" + * - Firefox Worker === "[object DedicatedWorkerGlobalScope]" + * - Safari Worker === "[object DedicatedWorkerGlobalScope]" + * - IE 11 Worker === "[object WorkerGlobalScope]" + * - IE Edge Worker === "[object WorkerGlobalScope]" + */ + if (obj === globalObject) { + return 'global'; + } + + /* ! Speed optimisation + * Pre: + * array literal x 2,888,352 ops/sec ±0.67% (82 runs sampled) + * Post: + * array literal x 22,479,650 ops/sec ±0.96% (81 runs sampled) + */ + if (isArrayExists && Array.isArray(obj)) { + return 'Array'; + } + + if (isDom) { + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/browsers.html#location) + * WhatWG HTML$7.7.3 - The `Location` interface + * Test: `Object.prototype.toString.call(window.location)`` + * - IE <=11 === "[object Object]" + * - IE Edge <=13 === "[object Object]" + */ + if (obj === globalObject.location) { + return 'Location'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#document) + * WhatWG HTML$3.1.1 - The `Document` object + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-26809268) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * WhatWG HTML states: + * > For historical reasons, Window objects must also have a + * > writable, configurable, non-enumerable property named + * > HTMLDocument whose value is the Document interface object. + * Test: `Object.prototype.toString.call(document)`` + * - Chrome === "[object HTMLDocument]" + * - Firefox === "[object HTMLDocument]" + * - Safari === "[object HTMLDocument]" + * - IE <=10 === "[object Document]" + * - IE 11 === "[object HTMLDocument]" + * - IE Edge <=13 === "[object HTMLDocument]" + */ + if (obj === globalObject.document) { + return 'Document'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#mimetypearray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface MimeTypeArray + * Test: `Object.prototype.toString.call(navigator.mimeTypes)`` + * - IE <=10 === "[object MSMimeTypesCollection]" + */ + if (obj === (globalObject.navigator || {}).mimeTypes) { + return 'MimeTypeArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$8.6.1.5 - Plugins - Interface PluginArray + * Test: `Object.prototype.toString.call(navigator.plugins)`` + * - IE <=10 === "[object MSPluginsCollection]" + */ + if (obj === (globalObject.navigator || {}).plugins) { + return 'PluginArray'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/multipage/webappapis.html#pluginarray) + * WhatWG HTML$4.4.4 - The `blockquote` element - Interface `HTMLQuoteElement` + * Test: `Object.prototype.toString.call(document.createElement('blockquote'))`` + * - IE <=10 === "[object HTMLBlockElement]" + */ + if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'BLOCKQUOTE') { + return 'HTMLQuoteElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltabledatacellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableDataCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('td')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TD') { + return 'HTMLTableDataCellElement'; + } + + /* ! Spec Conformance + * (https://html.spec.whatwg.org/#htmltableheadercellelement) + * WhatWG HTML$4.9.9 - The `td` element - Interface `HTMLTableHeaderCellElement` + * Note: Most browsers currently adher to the W3C DOM Level 2 spec + * (https://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-82915075) + * which suggests that browsers should use HTMLTableCellElement for + * both TD and TH elements. WhatWG separates these. + * Test: Object.prototype.toString.call(document.createElement('th')) + * - Chrome === "[object HTMLTableCellElement]" + * - Firefox === "[object HTMLTableCellElement]" + * - Safari === "[object HTMLTableCellElement]" + */ + if (htmlElementExists && obj instanceof HTMLElement && obj.tagName === 'TH') { + return 'HTMLTableHeaderCellElement'; + } + } + + /* ! Speed optimisation + * Pre: + * Float64Array x 625,644 ops/sec ±1.58% (80 runs sampled) + * Float32Array x 1,279,852 ops/sec ±2.91% (77 runs sampled) + * Uint32Array x 1,178,185 ops/sec ±1.95% (83 runs sampled) + * Uint16Array x 1,008,380 ops/sec ±2.25% (80 runs sampled) + * Uint8Array x 1,128,040 ops/sec ±2.11% (81 runs sampled) + * Int32Array x 1,170,119 ops/sec ±2.88% (80 runs sampled) + * Int16Array x 1,176,348 ops/sec ±5.79% (86 runs sampled) + * Int8Array x 1,058,707 ops/sec ±4.94% (77 runs sampled) + * Uint8ClampedArray x 1,110,633 ops/sec ±4.20% (80 runs sampled) + * Post: + * Float64Array x 7,105,671 ops/sec ±13.47% (64 runs sampled) + * Float32Array x 5,887,912 ops/sec ±1.46% (82 runs sampled) + * Uint32Array x 6,491,661 ops/sec ±1.76% (79 runs sampled) + * Uint16Array x 6,559,795 ops/sec ±1.67% (82 runs sampled) + * Uint8Array x 6,463,966 ops/sec ±1.43% (85 runs sampled) + * Int32Array x 5,641,841 ops/sec ±3.49% (81 runs sampled) + * Int16Array x 6,583,511 ops/sec ±1.98% (80 runs sampled) + * Int8Array x 6,606,078 ops/sec ±1.74% (81 runs sampled) + * Uint8ClampedArray x 6,602,224 ops/sec ±1.77% (83 runs sampled) + */ + var stringTag = (symbolToStringTagExists && obj[Symbol.toStringTag]); + if (typeof stringTag === 'string') { + return stringTag; + } + + if (getPrototypeOfExists) { + var objPrototype = Object.getPrototypeOf(obj); + /* ! Speed optimisation + * Pre: + * regex literal x 1,772,385 ops/sec ±1.85% (77 runs sampled) + * regex constructor x 2,143,634 ops/sec ±2.46% (78 runs sampled) + * Post: + * regex literal x 3,928,009 ops/sec ±0.65% (78 runs sampled) + * regex constructor x 3,931,108 ops/sec ±0.58% (84 runs sampled) + */ + if (objPrototype === RegExp.prototype) { + return 'RegExp'; + } + + /* ! Speed optimisation + * Pre: + * date x 2,130,074 ops/sec ±4.42% (68 runs sampled) + * Post: + * date x 3,953,779 ops/sec ±1.35% (77 runs sampled) + */ + if (objPrototype === Date.prototype) { + return 'Date'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-promise.prototype-@@tostringtag) + * ES6$25.4.5.4 - Promise.prototype[@@toStringTag] should be "Promise": + * Test: `Object.prototype.toString.call(Promise.resolve())`` + * - Chrome <=47 === "[object Object]" + * - Edge <=20 === "[object Object]" + * - Firefox 29-Latest === "[object Promise]" + * - Safari 7.1-Latest === "[object Promise]" + */ + if (promiseExists && objPrototype === Promise.prototype) { + return 'Promise'; + } + + /* ! Speed optimisation + * Pre: + * set x 2,222,186 ops/sec ±1.31% (82 runs sampled) + * Post: + * set x 4,545,879 ops/sec ±1.13% (83 runs sampled) + */ + if (setExists && objPrototype === Set.prototype) { + return 'Set'; + } + + /* ! Speed optimisation + * Pre: + * map x 2,396,842 ops/sec ±1.59% (81 runs sampled) + * Post: + * map x 4,183,945 ops/sec ±6.59% (82 runs sampled) + */ + if (mapExists && objPrototype === Map.prototype) { + return 'Map'; + } + + /* ! Speed optimisation + * Pre: + * weakset x 1,323,220 ops/sec ±2.17% (76 runs sampled) + * Post: + * weakset x 4,237,510 ops/sec ±2.01% (77 runs sampled) + */ + if (weakSetExists && objPrototype === WeakSet.prototype) { + return 'WeakSet'; + } + + /* ! Speed optimisation + * Pre: + * weakmap x 1,500,260 ops/sec ±2.02% (78 runs sampled) + * Post: + * weakmap x 3,881,384 ops/sec ±1.45% (82 runs sampled) + */ + if (weakMapExists && objPrototype === WeakMap.prototype) { + return 'WeakMap'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-dataview.prototype-@@tostringtag) + * ES6$24.2.4.21 - DataView.prototype[@@toStringTag] should be "DataView": + * Test: `Object.prototype.toString.call(new DataView(new ArrayBuffer(1)))`` + * - Edge <=13 === "[object Object]" + */ + if (dataViewExists && objPrototype === DataView.prototype) { + return 'DataView'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%mapiteratorprototype%-@@tostringtag) + * ES6$23.1.5.2.2 - %MapIteratorPrototype%[@@toStringTag] should be "Map Iterator": + * Test: `Object.prototype.toString.call(new Map().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (mapExists && objPrototype === mapIteratorPrototype) { + return 'Map Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%setiteratorprototype%-@@tostringtag) + * ES6$23.2.5.2.2 - %SetIteratorPrototype%[@@toStringTag] should be "Set Iterator": + * Test: `Object.prototype.toString.call(new Set().entries())`` + * - Edge <=13 === "[object Object]" + */ + if (setExists && objPrototype === setIteratorPrototype) { + return 'Set Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%arrayiteratorprototype%-@@tostringtag) + * ES6$22.1.5.2.2 - %ArrayIteratorPrototype%[@@toStringTag] should be "Array Iterator": + * Test: `Object.prototype.toString.call([][Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (arrayIteratorExists && objPrototype === arrayIteratorPrototype) { + return 'Array Iterator'; + } + + /* ! Spec Conformance + * (http://www.ecma-international.org/ecma-262/6.0/index.html#sec-%stringiteratorprototype%-@@tostringtag) + * ES6$21.1.5.2.2 - %StringIteratorPrototype%[@@toStringTag] should be "String Iterator": + * Test: `Object.prototype.toString.call(''[Symbol.iterator]())`` + * - Edge <=13 === "[object Object]" + */ + if (stringIteratorExists && objPrototype === stringIteratorPrototype) { + return 'String Iterator'; + } + + /* ! Speed optimisation + * Pre: + * object from null x 2,424,320 ops/sec ±1.67% (76 runs sampled) + * Post: + * object from null x 5,838,000 ops/sec ±0.99% (84 runs sampled) + */ + if (objPrototype === null) { + return 'Object'; + } + } + + return Object + .prototype + .toString + .call(obj) + .slice(toStringLeftSliceLength, toStringRightSliceLength); +}; + +module.exports.typeDetect = module.exports; diff --git a/.pnpm-store/v11/files/27/a48acc7a67c612b06eab6a64120797f867b235adf00da08bdc2a2a72199210fbd0d36c64e2e79c13893fee440d96b07e67eba4866ead7a6e972d7449fd4203 b/.pnpm-store/v11/files/27/a48acc7a67c612b06eab6a64120797f867b235adf00da08bdc2a2a72199210fbd0d36c64e2e79c13893fee440d96b07e67eba4866ead7a6e972d7449fd4203 new file mode 100644 index 00000000..44e5bd8c --- /dev/null +++ b/.pnpm-store/v11/files/27/a48acc7a67c612b06eab6a64120797f867b235adf00da08bdc2a2a72199210fbd0d36c64e2e79c13893fee440d96b07e67eba4866ead7a6e972d7449fd4203 @@ -0,0 +1,29 @@ +/**! + + @license + handlebars v4.7.9 + +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ +define("handlebars/utils",["exports"],function(a){"use strict";function b(a){return j[a]}function c(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},k=/[&<>"'`=]/g,l=/[&<>"'`=]/,m=Object.prototype.toString;a.toString=m;var n=function(a){return"function"==typeof a};n(/x/)&&(a.isFunction=n=function(a){return"function"==typeof a&&"[object Function]"===m.call(a)}),a.isFunction=n;var o=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===m.call(a)};a.isArray=o}),define("handlebars/exception",["exports","module"],function(a,b){"use strict";function c(a,b){var e=b&&b.loc,f=void 0,g=void 0,h=void 0,i=void 0;e&&(f=e.start.line,g=e.end.line,h=e.start.column,i=e.end.column,a+=" - "+f+":"+h);for(var j=Error.prototype.constructor.call(this,a),k=0;k0?(d.ids&&(d.ids=[d.name]),a.helpers.each(b,d)):e(this);if(d.data&&d.ids){var g=c.createFrame(d.data);g.contextPath=c.appendContextPath(d.data.contextPath,d.name),d={data:g}}return f(b,d)})}}),define("handlebars/helpers/each",["exports","module","../utils","../exception"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}var f=e(d);b.exports=function(a){a.registerHelper("each",function(a,b){function d(b,d,f){j&&(j.key=b,j.index=d,j.first=0===d,j.last=!!f,k&&(j.contextPath=k+b)),i+=e(a[b],{data:j,blockParams:c.blockParams([a[b],b],[k+b,null])})}if(!b)throw new f["default"]("Must pass iterator to #each");var e=b.fn,g=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=c.appendContextPath(b.data.contextPath,b.ids[0])+"."),c.isFunction(a)&&(a=a.call(this)),b.data&&(j=c.createFrame(b.data)),a&&"object"==typeof a)if(c.isArray(a))for(var l=a.length;h=0?b:parseInt(a,10)}return a},log:function(a){if(a=d.lookupLevel(a),"undefined"!=typeof console&&d.lookupLevel(d.level)<=a){var b=d.methodMap[a];console[b]||(b="log");for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;f= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};a.REVISION_CHANGES=o;var p="[object Object]";i.prototype={constructor:i,logger:k["default"],log:k["default"].log,registerHelper:function(a,c){if(b.toString.call(a)===p){if(c)throw new j["default"]("Arg not supported with multiple helpers");b.extend(this.helpers,a)}else this.helpers[a]=c},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,c){if(b.toString.call(a)===p)b.extend(this.partials,a);else{if("undefined"==typeof c)throw new j["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=c}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,c){if(b.toString.call(a)===p){if(c)throw new j["default"]("Arg not supported with multiple decorators");b.extend(this.decorators,a)}else this.decorators[a]=c},unregisterDecorator:function(a){delete this.decorators[a]},resetLoggedPropertyAccesses:function(){g.resetLoggedProperties()}};var q=k["default"].log;a.log=q,a.createFrame=b.createFrame,a.logger=k["default"]}),define("handlebars/safe-string",["exports","module"],function(a,b){"use strict";function c(a){this.string=a}c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b.exports=c}),define("handlebars/internal/wrapHelper",["exports"],function(a){"use strict";function b(a,b){if("function"!=typeof a)return a;var c=function(){var c=arguments[arguments.length-1];return arguments[arguments.length-1]=b(c),a.apply(this,arguments)};return c}a.__esModule=!0,a.wrapHelper=b}),define("handlebars/runtime",["exports","./utils","./exception","./base","./helpers","./internal/wrapHelper","./internal/proto-access"],function(a,b,c,d,e,f,g){"use strict";function h(a){return a&&a.__esModule?a:{"default":a}}function i(a){var b=a&&a[0]||1,c=d.COMPILER_REVISION;if(!(b>=d.LAST_COMPATIBLE_COMPILER_REVISION&&b<=d.COMPILER_REVISION)){if(b2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substring(a,b.yyleng-c+a)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(e(5,9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]+?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b.exports=c}),define("handlebars/compiler/visitor",["exports","module","../exception"],function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(){this.parents=[]}function f(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function g(a){f.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function h(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var i=d(c);e.prototype={constructor:e,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!e.prototype[c.type])throw new i["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new i["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b0)throw new o["default"]("Invalid path: "+d,{loc:c});".."===i&&f++}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new o["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}a.__esModule=!0,a.SourceLocation=e,a.id=f,a.stripFlags=g,a.stripComment=h,a.preparePath=i,a.prepareMustache=j,a.prepareRawBlock=k,a.prepareBlock=l,a.prepareProgram=m,a.preparePartialBlock=n;var o=c(b)}),define("handlebars/compiler/base",["exports","./parser","./whitespace-control","./helpers","../exception","../utils"],function(a,b,c,d,e,f){"use strict";function g(a){return a&&a.__esModule?a:{"default":a}}function h(a,b){if("Program"===a.type)return j(a),a;m["default"].yy=p,p.locInfo=function(a){return new p.SourceLocation(b&&b.srcName,a)};var c=m["default"].parse(a);return c}function i(a,b){var c=h(a,b),d=new n["default"](b);return d.accept(c)}function j(a){k(a)}function k(a){if(null!=a){if(Array.isArray(a))return void a.forEach(k);if("object"==typeof a){if("PathExpression"===a.type){if(!l(a.depth))throw new o["default"]("Invalid AST: PathExpression.depth must be an integer");if(!Array.isArray(a.parts))throw new o["default"]("Invalid AST: PathExpression.parts must be an array");for(var b=0;b=0}a.__esModule=!0,a.parseWithoutProcessing=h,a.parse=i;var m=g(b),n=g(c),o=g(e);a.parser=m["default"];var p={};f.extend(p,d)}),define("handlebars/compiler/compiler",["exports","../exception","../utils","./ast"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(){}function g(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function h(a,b,d){function e(){var c=d.parse(a,b),e=(new d.Compiler).compile(c,b),f=(new d.JavaScriptCompiler).compile(e,b,void 0,!0);return d.template(f)}function f(a,b){return g||(g=e()),g.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=c.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var g=void 0;return f._setup=function(a){return g||(g=e()),g._setup(a)},f._child=function(a,b,c,d){return g||(g=e()),g._child(a,b,c,d)},f}function i(a,b){if(a===b)return!0;if(c.isArray(a)&&c.isArray(b)&&a.length===b.length){for(var d=0;d1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){j(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,l["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=l["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c=0)return[b,f]}}}}),define("handlebars/compiler/code-gen",["exports","module","../utils"],function(a,b,c){"use strict";function d(a,b,d){if(c.isArray(a)){for(var e=[],f=0,g=a.length;f0&&(c+=", "+d.join(", "));var e=0;Object.keys(this.aliases).forEach(function(a){var d=b.aliases[a];d.children&&d.referenceCount>1&&(c+=", alias"+ ++e+"="+a,d.children[0]="alias"+e)}),this.lookupPropertyFunctionIsUsed&&(c+=", "+this.lookupPropertyFunctionVarDeclaration());var f=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&f.push("blockParams"),this.useDepths&&f.push("depths");var g=this.mergeSource(c);return a?(f.push(g),Function.apply(this,f)):this.source.wrap(["function(",f.join(","),") {\n ",g,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},lookupPropertyFunctionVarDeclaration:function(){return"\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n ".trim()},blockValue:function(a){var b=this.aliasable("container.hooks.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("container.hooks.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var f=this;if(this.options.strict||this.options.assumeObjects)return void this.push(j(this.options.strict&&e,this,b,c,a));for(var g=b.length,h=function(c){f.replaceStack(function(e){var g=f.nameLookup(e,b[c],a);return d?[" && ",g]:[" != null ? ",g," : ",e]})},i=c;ithis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;bWelcome back, ' + escapeHtml(name) + '!

'); + } else { + res.write('

Hello, new visitor!

'); + } + + res.write('
'); + res.write(' '); + res.end('
'); +} + +http.createServer(onRequest).listen(3000); +``` + +## Testing + +```sh +$ npm test +``` + +## Benchmark + +``` +$ npm run bench + +> cookie@0.4.1 bench +> node benchmark/index.js + + node@16.13.1 + v8@9.4.146.24-node.14 + uv@1.42.0 + zlib@1.2.11 + brotli@1.0.9 + ares@1.18.1 + modules@93 + nghttp2@1.45.1 + napi@8 + llhttp@6.0.4 + openssl@1.1.1l+quic + cldr@39.0 + icu@69.1 + tz@2021a + unicode@13.0 + ngtcp2@0.1.0-DEV + nghttp3@0.1.0-DEV + +> node benchmark/parse-top.js + + cookie.parse - top sites + + 15 tests completed. + + parse accounts.google.com x 504,358 ops/sec ±6.55% (171 runs sampled) + parse apple.com x 1,369,991 ops/sec ±0.84% (189 runs sampled) + parse cloudflare.com x 360,669 ops/sec ±3.75% (182 runs sampled) + parse docs.google.com x 521,496 ops/sec ±4.90% (180 runs sampled) + parse drive.google.com x 553,514 ops/sec ±0.59% (189 runs sampled) + parse en.wikipedia.org x 286,052 ops/sec ±0.62% (188 runs sampled) + parse linkedin.com x 178,817 ops/sec ±0.61% (192 runs sampled) + parse maps.google.com x 284,585 ops/sec ±0.68% (188 runs sampled) + parse microsoft.com x 161,230 ops/sec ±0.56% (192 runs sampled) + parse play.google.com x 352,144 ops/sec ±1.01% (181 runs sampled) + parse plus.google.com x 275,204 ops/sec ±7.78% (156 runs sampled) + parse support.google.com x 339,493 ops/sec ±1.02% (191 runs sampled) + parse www.google.com x 286,110 ops/sec ±0.90% (191 runs sampled) + parse youtu.be x 548,557 ops/sec ±0.60% (184 runs sampled) + parse youtube.com x 545,293 ops/sec ±0.65% (191 runs sampled) + +> node benchmark/parse.js + + cookie.parse - generic + + 6 tests completed. + + simple x 1,266,646 ops/sec ±0.65% (191 runs sampled) + decode x 838,413 ops/sec ±0.60% (191 runs sampled) + unquote x 877,820 ops/sec ±0.72% (189 runs sampled) + duplicates x 516,680 ops/sec ±0.61% (191 runs sampled) + 10 cookies x 156,874 ops/sec ±0.52% (189 runs sampled) + 100 cookies x 14,663 ops/sec ±0.53% (191 runs sampled) +``` + +## References + +- [RFC 6265: HTTP State Management Mechanism][rfc-6265] +- [Same-site Cookies][rfc-6265bis-03-4.1.2.7] + +[rfc-6265bis-03-4.1.2.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-03#section-4.1.2.7 +[rfc-6265]: https://tools.ietf.org/html/rfc6265 +[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 +[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 +[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2 +[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3 +[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4 +[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5 +[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6 +[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3 + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master +[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/cookie/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml +[node-version-image]: https://badgen.net/npm/node/cookie +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/cookie +[npm-url]: https://npmjs.org/package/cookie +[npm-version-image]: https://badgen.net/npm/v/cookie diff --git a/.pnpm-store/v11/files/27/c74670adb75075fad058d5ceaf7b20c4e7786c83bae8a32f626f9782af34c9a33c2046ef60fd2a7878d378e29fec851806bbd9a67878f3a9f1cda4830763fd b/.pnpm-store/v11/files/27/c74670adb75075fad058d5ceaf7b20c4e7786c83bae8a32f626f9782af34c9a33c2046ef60fd2a7878d378e29fec851806bbd9a67878f3a9f1cda4830763fd new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/.pnpm-store/v11/files/27/c74670adb75075fad058d5ceaf7b20c4e7786c83bae8a32f626f9782af34c9a33c2046ef60fd2a7878d378e29fec851806bbd9a67878f3a9f1cda4830763fd @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/.pnpm-store/v11/files/27/c95d3b09fc618d5c59ff3ccd3dbf160ad8f23f9ae4c7ed4b81a149cb10254fe2961b702f647e5db2496efd6f61cfabc5b82a25869ab8e15d48d252e6e661a3 b/.pnpm-store/v11/files/27/c95d3b09fc618d5c59ff3ccd3dbf160ad8f23f9ae4c7ed4b81a149cb10254fe2961b702f647e5db2496efd6f61cfabc5b82a25869ab8e15d48d252e6e661a3 new file mode 100644 index 00000000..f5d31941 --- /dev/null +++ b/.pnpm-store/v11/files/27/c95d3b09fc618d5c59ff3ccd3dbf160ad8f23f9ae4c7ed4b81a149cb10254fe2961b702f647e5db2496efd6f61cfabc5b82a25869ab8e15d48d252e6e661a3 @@ -0,0 +1,20 @@ +{ + "name": "parseuri", + "version": "0.0.6", + "description": "Method that parses a URI and returns an array of its components", + "repository": { + "type": "git", + "url": "https://github.com/get/parseuri.git" + }, + "homepage": "https://github.com/get/parseuri", + "scripts": { + "test": "make test" + }, + "devDependencies": { + "better-assert": "~1.0.0", + "mocha": "1.17.1", + "expect.js": "^0.3.1" + }, + "author": "Gal Koren", + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/27/c99df98900c18ff405b421818fba2b5739362e2fb23190a9015fa867db62c8a064171edeeb5cf283108f64944fdaeff411f4bc01a71ad7cd91dd93ec8129f7 b/.pnpm-store/v11/files/27/c99df98900c18ff405b421818fba2b5739362e2fb23190a9015fa867db62c8a064171edeeb5cf283108f64944fdaeff411f4bc01a71ad7cd91dd93ec8129f7 new file mode 100644 index 00000000..4180a687 --- /dev/null +++ b/.pnpm-store/v11/files/27/c99df98900c18ff405b421818fba2b5739362e2fb23190a9015fa867db62c8a064171edeeb5cf283108f64944fdaeff411f4bc01a71ad7cd91dd93ec8129f7 @@ -0,0 +1,30 @@ +var createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is greater than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than or equal to + * `other`, else `false`. + * @see _.lte + * @example + * + * _.gte(3, 1); + * // => true + * + * _.gte(3, 3); + * // => true + * + * _.gte(1, 3); + * // => false + */ +var gte = createRelationalOperation(function(value, other) { + return value >= other; +}); + +module.exports = gte; diff --git a/.pnpm-store/v11/files/27/dba8ecf303389c8348099a12a1e75f3bd724b997dfcfe26dafd6a0fc3da503fc888634dcaae081476d7923b24791c1cfd1543cfd32eebe10feabfba5a5884d b/.pnpm-store/v11/files/27/dba8ecf303389c8348099a12a1e75f3bd724b997dfcfe26dafd6a0fc3da503fc888634dcaae081476d7923b24791c1cfd1543cfd32eebe10feabfba5a5884d new file mode 100644 index 00000000..599ff512 --- /dev/null +++ b/.pnpm-store/v11/files/27/dba8ecf303389c8348099a12a1e75f3bd724b997dfcfe26dafd6a0fc3da503fc888634dcaae081476d7923b24791c1cfd1543cfd32eebe10feabfba5a5884d @@ -0,0 +1,34 @@ +'use strict'; + +var toRegex = require('to-regex'); +var regexNot = require('regex-not'); +var cached; + +/** + * Get the last element from `array` + * @param {Array} `array` + * @return {*} + */ + +exports.last = function(arr) { + return arr[arr.length - 1]; +}; + +/** + * Create and cache regex to use for text nodes + */ + +exports.createRegex = function(pattern, include) { + if (cached) return cached; + var opts = {contains: true, strictClose: false}; + var not = regexNot.create(pattern, opts); + var re; + + if (typeof include === 'string') { + re = toRegex('^(?:' + include + '|' + not + ')', opts); + } else { + re = toRegex(not, opts); + } + + return (cached = re); +}; diff --git a/.pnpm-store/v11/files/27/ef66db5ec9494afb15d05599e3d922a67589783021461814770ea1811e9cd73251a69579677c89b0503ee8cc76220be7592d7d405c920e9d5700de24c7dd28 b/.pnpm-store/v11/files/27/ef66db5ec9494afb15d05599e3d922a67589783021461814770ea1811e9cd73251a69579677c89b0503ee8cc76220be7592d7d405c920e9d5700de24c7dd28 new file mode 100644 index 00000000..9d8e5ed0 --- /dev/null +++ b/.pnpm-store/v11/files/27/ef66db5ec9494afb15d05599e3d922a67589783021461814770ea1811e9cd73251a69579677c89b0503ee8cc76220be7592d7d405c920e9d5700de24c7dd28 @@ -0,0 +1,37 @@ +## History + +### key + +Changelog entries are classified using the following labels _(from [keep-a-changelog][]_): + +- `added`: for new features +- `changed`: for changes in existing functionality +- `deprecated`: for once-stable features removed in upcoming releases +- `removed`: for deprecated features removed in this release +- `fixed`: for any bug fixes +- `bumped`: updated dependencies, only minor or higher will be listed. + +### [3.0.0] - 2017-04-11 + +TODO. There should be no breaking changes. Please report any regressions. I will [reformat these release notes](https://github.com/micromatch/micromatch/pull/76) and add them to the changelog as soon as I have a chance. + +### [1.0.1] - 2016-12-12 + +**Added** + +- Support for windows path edge cases where backslashes are used in brackets or other unusual combinations. + +### [1.0.0] - 2016-12-12 + +Stable release. + +### [0.1.0] - 2016-10-08 + +First release. + + +[Unreleased]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...HEAD +[0.2.0]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...0.2.0 + +[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog + diff --git a/.pnpm-store/v11/files/28/2b72619a60c1e4ec92dfff92407401d7e0ded22a8b3192c79076260255e3feac873b9e45e36ba9d6103b54721297a0b67cf7144677ff9997050b0e1e1325a0-exec b/.pnpm-store/v11/files/28/2b72619a60c1e4ec92dfff92407401d7e0ded22a8b3192c79076260255e3feac873b9e45e36ba9d6103b54721297a0b67cf7144677ff9997050b0e1e1325a0-exec new file mode 100755 index 00000000..dbb69269 --- /dev/null +++ b/.pnpm-store/v11/files/28/2b72619a60c1e4ec92dfff92407401d7e0ded22a8b3192c79076260255e3feac873b9e45e36ba9d6103b54721297a0b67cf7144677ff9997050b0e1e1325a0-exec @@ -0,0 +1,30 @@ + +
+ +[![Version](https://img.shields.io/npm/v/residence.svg?colorB=green)](https://www.npmjs.com/package/residence) + + +# Residence + +Allows you find a root of a project given current working directory (```process.cwd()```) + + +### Examples + +> Looking for the NPM project root, by looking for package.json + +```js +import * as residence from 'residence'; +const rootPath = residence.findProjectRoot(process.cwd()); +// root is either null or a project root path, found by looking for the first package.json file +``` + + +> Looking for a project root, by looking for another file + +```js +import * as residence from 'residence'; +const rootPath = residence.findRootDir(process.cwd(), '.nlu.json'); +// walks up the fs towards '/' and returns the path when it finds the first .nlu.json file +// returns null otherwise. +``` diff --git a/.pnpm-store/v11/files/28/3e66dc240cbae54fdc0a65a1a4c03d9cdc9f1a773795b5ac13fbbebc8071e840c2857052027ee3518d6a090d8d0031449c7c36f8138e5ca3c6867fa3e5070e b/.pnpm-store/v11/files/28/3e66dc240cbae54fdc0a65a1a4c03d9cdc9f1a773795b5ac13fbbebc8071e840c2857052027ee3518d6a090d8d0031449c7c36f8138e5ca3c6867fa3e5070e new file mode 100644 index 00000000..9d6aa77e --- /dev/null +++ b/.pnpm-store/v11/files/28/3e66dc240cbae54fdc0a65a1a4c03d9cdc9f1a773795b5ac13fbbebc8071e840c2857052027ee3518d6a090d8d0031449c7c36f8138e5ca3c6867fa3e5070e @@ -0,0 +1,32 @@ +var isSymbol = require('./isSymbol'); + +/** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ +function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; +} + +module.exports = baseExtremum; diff --git a/.pnpm-store/v11/files/28/41b75107ab8b6e1790d9f3b5f6fbdb7fb6a9ecf2dc21d4197e1dd0c4034a4ca973e379665920df1b37e88492f22d7333faaa0a6e6b0c280e9404db0b84e5a9-exec b/.pnpm-store/v11/files/28/41b75107ab8b6e1790d9f3b5f6fbdb7fb6a9ecf2dc21d4197e1dd0c4034a4ca973e379665920df1b37e88492f22d7333faaa0a6e6b0c280e9404db0b84e5a9-exec new file mode 100755 index 00000000..8c37d318 --- /dev/null +++ b/.pnpm-store/v11/files/28/41b75107ab8b6e1790d9f3b5f6fbdb7fb6a9ecf2dc21d4197e1dd0c4034a4ca973e379665920df1b37e88492f22d7333faaa0a6e6b0c280e9404db0b84e5a9-exec @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +function suman_trap_and_kill_child_jobs { + trap 'jobs -p | xargs kill -9' SIGINT SIGTERM EXIT +} diff --git a/.pnpm-store/v11/files/28/682df383a6b8ae756da5a20c787bffc5c1a8be1a2c2d6e83607a9aa783b1b1830c9769c3a2ffaa4bf04d94be29e82a801e3c5e847f00bdf1a632e8bc2a1198 b/.pnpm-store/v11/files/28/682df383a6b8ae756da5a20c787bffc5c1a8be1a2c2d6e83607a9aa783b1b1830c9769c3a2ffaa4bf04d94be29e82a801e3c5e847f00bdf1a632e8bc2a1198 new file mode 100644 index 00000000..2f6a7485 --- /dev/null +++ b/.pnpm-store/v11/files/28/682df383a6b8ae756da5a20c787bffc5c1a8be1a2c2d6e83607a9aa783b1b1830c9769c3a2ffaa4bf04d94be29e82a801e3c5e847f00bdf1a632e8bc2a1198 @@ -0,0 +1,3 @@ +import { Suman } from "../suman"; +import { ITestSuite } from "suman-types/dts/test-suite"; +export declare const makeNotifyParent: (suman: Suman, gracefulExit: Function, handleBeforesAndAfters: Function) => (child: ITestSuite, cb: Function) => any; diff --git a/.pnpm-store/v11/files/28/799de5068aa37976c7cadff1f3b015ef5ff93f656372cf717dc12c0941801a310b93852df8679b3939bae274fdae7ed63c6db6af9cb9739f620465f83466a7 b/.pnpm-store/v11/files/28/799de5068aa37976c7cadff1f3b015ef5ff93f656372cf717dc12c0941801a310b93852df8679b3939bae274fdae7ed63c6db6af9cb9739f620465f83466a7 new file mode 100644 index 00000000..29036c14 --- /dev/null +++ b/.pnpm-store/v11/files/28/799de5068aa37976c7cadff1f3b015ef5ff93f656372cf717dc12c0941801a310b93852df8679b3939bae274fdae7ed63c6db6af9cb9739f620465f83466a7 @@ -0,0 +1,795 @@ +/** + * class HelpFormatter + * + * Formatter for generating usage messages and argument help strings. Only the + * name of this class is considered a public API. All the methods provided by + * the class are considered an implementation detail. + * + * Do not call in your code, use this class only for inherits your own forvatter + * + * ToDo add [additonal formatters][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#formatter-class + **/ +'use strict'; + +var sprintf = require('sprintf-js').sprintf; + +// Constants +var c = require('../const'); + +var $$ = require('../utils'); + + +/*:nodoc:* internal + * new Support(parent, heding) + * - parent (object): parent section + * - heading (string): header string + * + **/ +function Section(parent, heading) { + this._parent = parent; + this._heading = heading; + this._items = []; +} + +/*:nodoc:* internal + * Section#addItem(callback) -> Void + * - callback (array): tuple with function and args + * + * Add function for single element + **/ +Section.prototype.addItem = function (callback) { + this._items.push(callback); +}; + +/*:nodoc:* internal + * Section#formatHelp(formatter) -> string + * - formatter (HelpFormatter): current formatter + * + * Form help section string + * + **/ +Section.prototype.formatHelp = function (formatter) { + var itemHelp, heading; + + // format the indented section + if (this._parent) { + formatter._indent(); + } + + itemHelp = this._items.map(function (item) { + var obj, func, args; + + obj = formatter; + func = item[0]; + args = item[1]; + return func.apply(obj, args); + }); + itemHelp = formatter._joinParts(itemHelp); + + if (this._parent) { + formatter._dedent(); + } + + // return nothing if the section was empty + if (!itemHelp) { + return ''; + } + + // add the heading if the section was non-empty + heading = ''; + if (this._heading && this._heading !== c.SUPPRESS) { + var currentIndent = formatter.currentIndent; + heading = $$.repeat(' ', currentIndent) + this._heading + ':' + c.EOL; + } + + // join the section-initialize newline, the heading and the help + return formatter._joinParts([ c.EOL, heading, itemHelp, c.EOL ]); +}; + +/** + * new HelpFormatter(options) + * + * #### Options: + * - `prog`: program name + * - `indentIncriment`: indent step, default value 2 + * - `maxHelpPosition`: max help position, default value = 24 + * - `width`: line width + * + **/ +var HelpFormatter = module.exports = function HelpFormatter(options) { + options = options || {}; + + this._prog = options.prog; + + this._maxHelpPosition = options.maxHelpPosition || 24; + this._width = (options.width || ((process.env.COLUMNS || 80) - 2)); + + this._currentIndent = 0; + this._indentIncriment = options.indentIncriment || 2; + this._level = 0; + this._actionMaxLength = 0; + + this._rootSection = new Section(null); + this._currentSection = this._rootSection; + + this._whitespaceMatcher = new RegExp('\\s+', 'g'); + this._longBreakMatcher = new RegExp(c.EOL + c.EOL + c.EOL + '+', 'g'); +}; + +HelpFormatter.prototype._indent = function () { + this._currentIndent += this._indentIncriment; + this._level += 1; +}; + +HelpFormatter.prototype._dedent = function () { + this._currentIndent -= this._indentIncriment; + this._level -= 1; + if (this._currentIndent < 0) { + throw new Error('Indent decreased below 0.'); + } +}; + +HelpFormatter.prototype._addItem = function (func, args) { + this._currentSection.addItem([ func, args ]); +}; + +// +// Message building methods +// + +/** + * HelpFormatter#startSection(heading) -> Void + * - heading (string): header string + * + * Start new help section + * + * See alse [code example][1] + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.startSection = function (heading) { + this._indent(); + var section = new Section(this._currentSection, heading); + var func = section.formatHelp.bind(section); + this._addItem(func, [ this ]); + this._currentSection = section; +}; + +/** + * HelpFormatter#endSection -> Void + * + * End help section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + **/ +HelpFormatter.prototype.endSection = function () { + this._currentSection = this._currentSection._parent; + this._dedent(); +}; + +/** + * HelpFormatter#addText(text) -> Void + * - text (string): plain text + * + * Add plain text into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addText = function (text) { + if (text && text !== c.SUPPRESS) { + this._addItem(this._formatText, [ text ]); + } +}; + +/** + * HelpFormatter#addUsage(usage, actions, groups, prefix) -> Void + * - usage (string): usage text + * - actions (array): actions list + * - groups (array): groups list + * - prefix (string): usage prefix + * + * Add usage data into current section + * + * ##### Example + * + * formatter.addUsage(this.usage, this._actions, []); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.addUsage = function (usage, actions, groups, prefix) { + if (usage !== c.SUPPRESS) { + this._addItem(this._formatUsage, [ usage, actions, groups, prefix ]); + } +}; + +/** + * HelpFormatter#addArgument(action) -> Void + * - action (object): action + * + * Add argument into current section + * + * Single variant of [[HelpFormatter#addArguments]] + **/ +HelpFormatter.prototype.addArgument = function (action) { + if (action.help !== c.SUPPRESS) { + var self = this; + + // find all invocations + var invocations = [ this._formatActionInvocation(action) ]; + var invocationLength = invocations[0].length; + + var actionLength; + + if (action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + + var invocationNew = self._formatActionInvocation(subaction); + invocations.push(invocationNew); + invocationLength = Math.max(invocationLength, invocationNew.length); + + }); + this._dedent(); + } + + // update the maximum item length + actionLength = invocationLength + this._currentIndent; + this._actionMaxLength = Math.max(this._actionMaxLength, actionLength); + + // add the item to the list + this._addItem(this._formatAction, [ action ]); + } +}; + +/** + * HelpFormatter#addArguments(actions) -> Void + * - actions (array): actions list + * + * Mass add arguments into current section + * + * ##### Example + * + * formatter.startSection(actionGroup.title); + * formatter.addText(actionGroup.description); + * formatter.addArguments(actionGroup._groupActions); + * formatter.endSection(); + * + **/ +HelpFormatter.prototype.addArguments = function (actions) { + var self = this; + actions.forEach(function (action) { + self.addArgument(action); + }); +}; + +// +// Help-formatting methods +// + +/** + * HelpFormatter#formatHelp -> string + * + * Format help + * + * ##### Example + * + * formatter.addText(this.epilog); + * return formatter.formatHelp(); + * + **/ +HelpFormatter.prototype.formatHelp = function () { + var help = this._rootSection.formatHelp(this); + if (help) { + help = help.replace(this._longBreakMatcher, c.EOL + c.EOL); + help = $$.trimChars(help, c.EOL) + c.EOL; + } + return help; +}; + +HelpFormatter.prototype._joinParts = function (partStrings) { + return partStrings.filter(function (part) { + return (part && part !== c.SUPPRESS); + }).join(''); +}; + +HelpFormatter.prototype._formatUsage = function (usage, actions, groups, prefix) { + if (!prefix && typeof prefix !== 'string') { + prefix = 'usage: '; + } + + actions = actions || []; + groups = groups || []; + + + // if usage is specified, use that + if (usage) { + usage = sprintf(usage, { prog: this._prog }); + + // if no optionals or positionals are available, usage is just prog + } else if (!usage && actions.length === 0) { + usage = this._prog; + + // if optionals and positionals are available, calculate usage + } else if (!usage) { + var prog = this._prog; + var optionals = []; + var positionals = []; + var actionUsage; + var textWidth; + + // split optionals from positionals + actions.forEach(function (action) { + if (action.isOptional()) { + optionals.push(action); + } else { + positionals.push(action); + } + }); + + // build full usage string + actionUsage = this._formatActionsUsage([].concat(optionals, positionals), groups); + usage = [ prog, actionUsage ].join(' '); + + // wrap the usage parts if it's too long + textWidth = this._width - this._currentIndent; + if ((prefix.length + usage.length) > textWidth) { + + // break usage into wrappable parts + var regexpPart = new RegExp('\\(.*?\\)+|\\[.*?\\]+|\\S+', 'g'); + var optionalUsage = this._formatActionsUsage(optionals, groups); + var positionalUsage = this._formatActionsUsage(positionals, groups); + + + var optionalParts = optionalUsage.match(regexpPart); + var positionalParts = positionalUsage.match(regexpPart) || []; + + if (optionalParts.join(' ') !== optionalUsage) { + throw new Error('assert "optionalParts.join(\' \') === optionalUsage"'); + } + if (positionalParts.join(' ') !== positionalUsage) { + throw new Error('assert "positionalParts.join(\' \') === positionalUsage"'); + } + + // helper for wrapping lines + /*eslint-disable func-style*/ // node 0.10 compat + var _getLines = function (parts, indent, prefix) { + var lines = []; + var line = []; + + var lineLength = prefix ? prefix.length - 1 : indent.length - 1; + + parts.forEach(function (part) { + if (lineLength + 1 + part.length > textWidth) { + lines.push(indent + line.join(' ')); + line = []; + lineLength = indent.length - 1; + } + line.push(part); + lineLength += part.length + 1; + }); + + if (line) { + lines.push(indent + line.join(' ')); + } + if (prefix) { + lines[0] = lines[0].substr(indent.length); + } + return lines; + }; + + var lines, indent, parts; + // if prog is short, follow it with optionals or positionals + if (prefix.length + prog.length <= 0.75 * textWidth) { + indent = $$.repeat(' ', (prefix.length + prog.length + 1)); + if (optionalParts) { + lines = [].concat( + _getLines([ prog ].concat(optionalParts), indent, prefix), + _getLines(positionalParts, indent) + ); + } else if (positionalParts) { + lines = _getLines([ prog ].concat(positionalParts), indent, prefix); + } else { + lines = [ prog ]; + } + + // if prog is long, put it on its own line + } else { + indent = $$.repeat(' ', prefix.length); + parts = optionalParts.concat(positionalParts); + lines = _getLines(parts, indent); + if (lines.length > 1) { + lines = [].concat( + _getLines(optionalParts, indent), + _getLines(positionalParts, indent) + ); + } + lines = [ prog ].concat(lines); + } + // join lines into usage + usage = lines.join(c.EOL); + } + } + + // prefix with 'usage:' + return prefix + usage + c.EOL + c.EOL; +}; + +HelpFormatter.prototype._formatActionsUsage = function (actions, groups) { + // find group indices and identify actions in groups + var groupActions = []; + var inserts = []; + var self = this; + + groups.forEach(function (group) { + var end; + var i; + + var start = actions.indexOf(group._groupActions[0]); + if (start >= 0) { + end = start + group._groupActions.length; + + //if (actions.slice(start, end) === group._groupActions) { + if ($$.arrayEqual(actions.slice(start, end), group._groupActions)) { + group._groupActions.forEach(function (action) { + groupActions.push(action); + }); + + if (!group.required) { + if (inserts[start]) { + inserts[start] += ' ['; + } else { + inserts[start] = '['; + } + inserts[end] = ']'; + } else { + if (inserts[start]) { + inserts[start] += ' ('; + } else { + inserts[start] = '('; + } + inserts[end] = ')'; + } + for (i = start + 1; i < end; i += 1) { + inserts[i] = '|'; + } + } + } + }); + + // collect all actions format strings + var parts = []; + + actions.forEach(function (action, actionIndex) { + var part; + var optionString; + var argsDefault; + var argsString; + + // suppressed arguments are marked with None + // remove | separators for suppressed arguments + if (action.help === c.SUPPRESS) { + parts.push(null); + if (inserts[actionIndex] === '|') { + inserts.splice(actionIndex, actionIndex); + } else if (inserts[actionIndex + 1] === '|') { + inserts.splice(actionIndex + 1, actionIndex + 1); + } + + // produce all arg strings + } else if (!action.isOptional()) { + part = self._formatArgs(action, action.dest); + + // if it's in a group, strip the outer [] + if (groupActions.indexOf(action) >= 0) { + if (part[0] === '[' && part[part.length - 1] === ']') { + part = part.slice(1, -1); + } + } + // add the action string to the list + parts.push(part); + + // produce the first way to invoke the option in brackets + } else { + optionString = action.optionStrings[0]; + + // if the Optional doesn't take a value, format is: -s or --long + if (action.nargs === 0) { + part = '' + optionString; + + // if the Optional takes a value, format is: -s ARGS or --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = self._formatArgs(action, argsDefault); + part = optionString + ' ' + argsString; + } + // make it look optional if it's not required or in a group + if (!action.required && groupActions.indexOf(action) < 0) { + part = '[' + part + ']'; + } + // add the action string to the list + parts.push(part); + } + }); + + // insert things at the necessary indices + for (var i = inserts.length - 1; i >= 0; --i) { + if (inserts[i] !== null) { + parts.splice(i, 0, inserts[i]); + } + } + + // join all the action items with spaces + var text = parts.filter(function (part) { + return !!part; + }).join(' '); + + // clean up separators for mutually exclusive groups + text = text.replace(/([\[(]) /g, '$1'); // remove spaces + text = text.replace(/ ([\])])/g, '$1'); + text = text.replace(/\[ *\]/g, ''); // remove empty groups + text = text.replace(/\( *\)/g, ''); + text = text.replace(/\(([^|]*)\)/g, '$1'); // remove () from single action groups + + text = text.trim(); + + // return the text + return text; +}; + +HelpFormatter.prototype._formatText = function (text) { + text = sprintf(text, { prog: this._prog }); + var textWidth = this._width - this._currentIndent; + var indentIncriment = $$.repeat(' ', this._currentIndent); + return this._fillText(text, textWidth, indentIncriment) + c.EOL + c.EOL; +}; + +HelpFormatter.prototype._formatAction = function (action) { + var self = this; + + var helpText; + var helpLines; + var parts; + var indentFirst; + + // determine the required width and the entry label + var helpPosition = Math.min(this._actionMaxLength + 2, this._maxHelpPosition); + var helpWidth = this._width - helpPosition; + var actionWidth = helpPosition - this._currentIndent - 2; + var actionHeader = this._formatActionInvocation(action); + + // no help; start on same line and add a final newline + if (!action.help) { + actionHeader = $$.repeat(' ', this._currentIndent) + actionHeader + c.EOL; + + // short action name; start on the same line and pad two spaces + } else if (actionHeader.length <= actionWidth) { + actionHeader = $$.repeat(' ', this._currentIndent) + + actionHeader + + ' ' + + $$.repeat(' ', actionWidth - actionHeader.length); + indentFirst = 0; + + // long action name; start on the next line + } else { + actionHeader = $$.repeat(' ', this._currentIndent) + actionHeader + c.EOL; + indentFirst = helpPosition; + } + + // collect the pieces of the action help + parts = [ actionHeader ]; + + // if there was help for the action, add lines of help text + if (action.help) { + helpText = this._expandHelp(action); + helpLines = this._splitLines(helpText, helpWidth); + parts.push($$.repeat(' ', indentFirst) + helpLines[0] + c.EOL); + helpLines.slice(1).forEach(function (line) { + parts.push($$.repeat(' ', helpPosition) + line + c.EOL); + }); + + // or add a newline if the description doesn't end with one + } else if (actionHeader.charAt(actionHeader.length - 1) !== c.EOL) { + parts.push(c.EOL); + } + // if there are any sub-actions, add their help as well + if (action._getSubactions) { + this._indent(); + action._getSubactions().forEach(function (subaction) { + parts.push(self._formatAction(subaction)); + }); + this._dedent(); + } + // return a single string + return this._joinParts(parts); +}; + +HelpFormatter.prototype._formatActionInvocation = function (action) { + if (!action.isOptional()) { + var format_func = this._metavarFormatter(action, action.dest); + var metavars = format_func(1); + return metavars[0]; + } + + var parts = []; + var argsDefault; + var argsString; + + // if the Optional doesn't take a value, format is: -s, --long + if (action.nargs === 0) { + parts = parts.concat(action.optionStrings); + + // if the Optional takes a value, format is: -s ARGS, --long ARGS + } else { + argsDefault = action.dest.toUpperCase(); + argsString = this._formatArgs(action, argsDefault); + action.optionStrings.forEach(function (optionString) { + parts.push(optionString + ' ' + argsString); + }); + } + return parts.join(', '); +}; + +HelpFormatter.prototype._metavarFormatter = function (action, metavarDefault) { + var result; + + if (action.metavar || action.metavar === '') { + result = action.metavar; + } else if (action.choices) { + var choices = action.choices; + + if (typeof choices === 'string') { + choices = choices.split('').join(', '); + } else if (Array.isArray(choices)) { + choices = choices.join(','); + } else { + choices = Object.keys(choices).join(','); + } + result = '{' + choices + '}'; + } else { + result = metavarDefault; + } + + return function (size) { + if (Array.isArray(result)) { + return result; + } + + var metavars = []; + for (var i = 0; i < size; i += 1) { + metavars.push(result); + } + return metavars; + }; +}; + +HelpFormatter.prototype._formatArgs = function (action, metavarDefault) { + var result; + var metavars; + + var buildMetavar = this._metavarFormatter(action, metavarDefault); + + switch (action.nargs) { + /*eslint-disable no-undefined*/ + case undefined: + case null: + metavars = buildMetavar(1); + result = '' + metavars[0]; + break; + case c.OPTIONAL: + metavars = buildMetavar(1); + result = '[' + metavars[0] + ']'; + break; + case c.ZERO_OR_MORE: + metavars = buildMetavar(2); + result = '[' + metavars[0] + ' [' + metavars[1] + ' ...]]'; + break; + case c.ONE_OR_MORE: + metavars = buildMetavar(2); + result = '' + metavars[0] + ' [' + metavars[1] + ' ...]'; + break; + case c.REMAINDER: + result = '...'; + break; + case c.PARSER: + metavars = buildMetavar(1); + result = metavars[0] + ' ...'; + break; + default: + metavars = buildMetavar(action.nargs); + result = metavars.join(' '); + } + return result; +}; + +HelpFormatter.prototype._expandHelp = function (action) { + var params = { prog: this._prog }; + + Object.keys(action).forEach(function (actionProperty) { + var actionValue = action[actionProperty]; + + if (actionValue !== c.SUPPRESS) { + params[actionProperty] = actionValue; + } + }); + + if (params.choices) { + if (typeof params.choices === 'string') { + params.choices = params.choices.split('').join(', '); + } else if (Array.isArray(params.choices)) { + params.choices = params.choices.join(', '); + } else { + params.choices = Object.keys(params.choices).join(', '); + } + } + + return sprintf(this._getHelpString(action), params); +}; + +HelpFormatter.prototype._splitLines = function (text, width) { + var lines = []; + var delimiters = [ ' ', '.', ',', '!', '?' ]; + var re = new RegExp('[' + delimiters.join('') + '][^' + delimiters.join('') + ']*$'); + + text = text.replace(/[\n\|\t]/g, ' '); + + text = text.trim(); + text = text.replace(this._whitespaceMatcher, ' '); + + // Wraps the single paragraph in text (a string) so every line + // is at most width characters long. + text.split(c.EOL).forEach(function (line) { + if (width >= line.length) { + lines.push(line); + return; + } + + var wrapStart = 0; + var wrapEnd = width; + var delimiterIndex = 0; + while (wrapEnd <= line.length) { + if (wrapEnd !== line.length && delimiters.indexOf(line[wrapEnd] < -1)) { + delimiterIndex = (re.exec(line.substring(wrapStart, wrapEnd)) || {}).index; + wrapEnd = wrapStart + delimiterIndex + 1; + } + lines.push(line.substring(wrapStart, wrapEnd)); + wrapStart = wrapEnd; + wrapEnd += width; + } + if (wrapStart < line.length) { + lines.push(line.substring(wrapStart, wrapEnd)); + } + }); + + return lines; +}; + +HelpFormatter.prototype._fillText = function (text, width, indent) { + var lines = this._splitLines(text, width); + lines = lines.map(function (line) { + return indent + line; + }); + return lines.join(c.EOL); +}; + +HelpFormatter.prototype._getHelpString = function (action) { + return action.help; +}; diff --git a/.pnpm-store/v11/files/28/a54b591157072a4f6385b947ff0f8f292ee8f9b9e362a6cbc56c4d041d2bd67501eab85a94dd63f70b3427dc8c0c44c34822fb2f6e949be1673eefb3154fa4 b/.pnpm-store/v11/files/28/a54b591157072a4f6385b947ff0f8f292ee8f9b9e362a6cbc56c4d041d2bd67501eab85a94dd63f70b3427dc8c0c44c34822fb2f6e949be1673eefb3154fa4 new file mode 100644 index 00000000..5a6a30f8 --- /dev/null +++ b/.pnpm-store/v11/files/28/a54b591157072a4f6385b947ff0f8f292ee8f9b9e362a6cbc56c4d041d2bd67501eab85a94dd63f70b3427dc8c0c44c34822fb2f6e949be1673eefb3154fa4 @@ -0,0 +1,39 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = doUntil; + +var _doWhilst = require('./doWhilst'); + +var _doWhilst2 = _interopRequireDefault(_doWhilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Like ['doWhilst']{@link module:ControlFlow.doWhilst}, except the `test` is inverted. Note the + * argument ordering differs from `until`. + * + * @name doUntil + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.doWhilst]{@link module:ControlFlow.doWhilst} + * @category Control Flow + * @param {AsyncFunction} iteratee - An async function which is called each time + * `test` fails. Invoked with (callback). + * @param {Function} test - synchronous truth test to perform after each + * execution of `iteratee`. Invoked with any non-error callback results of + * `iteratee`. + * @param {Function} [callback] - A callback which is called after the test + * function has passed and repeated execution of `iteratee` has stopped. `callback` + * will be passed an error and any arguments passed to the final `iteratee`'s + * callback. Invoked with (err, [results]); + */ +function doUntil(iteratee, test, callback) { + (0, _doWhilst2.default)(iteratee, function () { + return !test.apply(this, arguments); + }, callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/28/c5b391b68c874b80bf86fb1c58b38b1a46e2087006a9ffefce46f96fb9308914bbe147418e0e29d7937ff22ce7a4c94d26160e9c2befe4690b9406449c5dd3 b/.pnpm-store/v11/files/28/c5b391b68c874b80bf86fb1c58b38b1a46e2087006a9ffefce46f96fb9308914bbe147418e0e29d7937ff22ce7a4c94d26160e9c2befe4690b9406449c5dd3 new file mode 100644 index 00000000..aaea5149 --- /dev/null +++ b/.pnpm-store/v11/files/28/c5b391b68c874b80bf86fb1c58b38b1a46e2087006a9ffefce46f96fb9308914bbe147418e0e29d7937ff22ce7a4c94d26160e9c2befe4690b9406449c5dd3 @@ -0,0 +1,21 @@ +var assert = console.assert +var unique = require('array-unique') +var random = require('./') + +var iterations = 10000 +var number, cache = [] + +for (var i = 0; i < iterations; i++) { + number = random() + if (number < 0) { + assert(false, 'Random numbers should be greater than or equal to zero') + break + } + if (number >= 1) { + assert(false, 'Random numbers should be less than one') + break + } + cache.push(number) +} + +assert(unique(cache).length === iterations, 'Random numbers should be unique') diff --git a/.pnpm-store/v11/files/28/d10f47f213b7938a64e0ea88883558ca40e292172bd83671de61f24b29bb2755a633c4bd9dff91c38c5763bee2d04103c6183fd391d0beb76252c1902888e4 b/.pnpm-store/v11/files/28/d10f47f213b7938a64e0ea88883558ca40e292172bd83671de61f24b29bb2755a633c4bd9dff91c38c5763bee2d04103c6183fd391d0beb76252c1902888e4 new file mode 100644 index 00000000..e59346ad --- /dev/null +++ b/.pnpm-store/v11/files/28/d10f47f213b7938a64e0ea88883558ca40e292172bd83671de61f24b29bb2755a633c4bd9dff91c38c5763bee2d04103c6183fd391d0beb76252c1902888e4 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('concat', require('../concat')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/28/d2b6a96408bb4ac88ae60bc3e51a8395dce023c48b482705ecef8930a86c403862c8b1578b9422124b1ab2e03d90e83c6e194d13280df2ed55b9e7a3bd6f64 b/.pnpm-store/v11/files/28/d2b6a96408bb4ac88ae60bc3e51a8395dce023c48b482705ecef8930a86c403862c8b1578b9422124b1ab2e03d90e83c6e194d13280df2ed55b9e7a3bd6f64 new file mode 100644 index 00000000..3ab56e51 --- /dev/null +++ b/.pnpm-store/v11/files/28/d2b6a96408bb4ac88ae60bc3e51a8395dce023c48b482705ecef8930a86c403862c8b1578b9422124b1ab2e03d90e83c6e194d13280df2ed55b9e7a3bd6f64 @@ -0,0 +1,3 @@ +export declare const r2gSmokeTest: () => boolean; +export declare const findRootDir: (pth: string, f: string) => string; +export declare const findProjectRoot: (pth: string) => string; diff --git a/.pnpm-store/v11/files/28/e059b06dc33fa3d49b7888e9cbca02219e96b781f34565e987034a71a2642952bc80249c4640d4f20e26cdf2bd3030d587e62ede90f5d93675948d2e3bbe89 b/.pnpm-store/v11/files/28/e059b06dc33fa3d49b7888e9cbca02219e96b781f34565e987034a71a2642952bc80249c4640d4f20e26cdf2bd3030d587e62ede90f5d93675948d2e3bbe89 new file mode 100644 index 00000000..9e57c808 --- /dev/null +++ b/.pnpm-store/v11/files/28/e059b06dc33fa3d49b7888e9cbca02219e96b781f34565e987034a71a2642952bc80249c4640d4f20e26cdf2bd3030d587e62ede90f5d93675948d2e3bbe89 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('gt', require('../gt')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/29/073acaa46e7d6eda60b26e3354b472cde6e6f0d1889032e97dbbd7955690ce64662252d1e4585d59ee708c7600138f1884a8096cd2b1cd462f2fe9999ea4c9 b/.pnpm-store/v11/files/29/073acaa46e7d6eda60b26e3354b472cde6e6f0d1889032e97dbbd7955690ce64662252d1e4585d59ee708c7600138f1884a8096cd2b1cd462f2fe9999ea4c9 new file mode 100644 index 00000000..512306b8 --- /dev/null +++ b/.pnpm-store/v11/files/29/073acaa46e7d6eda60b26e3354b472cde6e6f0d1889032e97dbbd7955690ce64662252d1e4585d59ee708c7600138f1884a8096cd2b1cd462f2fe9999ea4c9 @@ -0,0 +1,17 @@ +var isWin = process.platform === 'win32'; + +module.exports = function (str) { + var i = str.length - 1; + if (i < 2) { + return str; + } + while (isSeparator(str, i)) { + i--; + } + return str.substr(0, i + 1); +}; + +function isSeparator(str, i) { + var char = str[i]; + return i > 0 && (char === '/' || (isWin && char === '\\')); +} diff --git a/.pnpm-store/v11/files/29/279dff6df3685789c61b4eec0aab44d95acd675e3d364d19598163745121fd92875d8d9cfd798210a27b1f247948cacc56d85e4ce4292bdafffa1c8f7c3739 b/.pnpm-store/v11/files/29/279dff6df3685789c61b4eec0aab44d95acd675e3d364d19598163745121fd92875d8d9cfd798210a27b1f247948cacc56d85e4ce4292bdafffa1c8f7c3739 new file mode 100644 index 00000000..3f4f7e53 --- /dev/null +++ b/.pnpm-store/v11/files/29/279dff6df3685789c61b4eec0aab44d95acd675e3d364d19598163745121fd92875d8d9cfd798210a27b1f247948cacc56d85e4ce4292bdafffa1c8f7c3739 @@ -0,0 +1,56 @@ +var baseIteratee = require('./_baseIteratee'), + createInverter = require('./_createInverter'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto.toString; + +/** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ +var invertBy = createInverter(function(result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } +}, baseIteratee); + +module.exports = invertBy; diff --git a/.pnpm-store/v11/files/29/309eddc494f7cfd7b81e1bcdea21a0cb3ce78e72821429262c748755686c9e9eb298262525012a4fa916ecc399ce2ddb5c11b3ce4cdcbee11f5ec4ce9662d0 b/.pnpm-store/v11/files/29/309eddc494f7cfd7b81e1bcdea21a0cb3ce78e72821429262c748755686c9e9eb298262525012a4fa916ecc399ce2ddb5c11b3ce4cdcbee11f5ec4ce9662d0 new file mode 100644 index 00000000..2495afc8 --- /dev/null +++ b/.pnpm-store/v11/files/29/309eddc494f7cfd7b81e1bcdea21a0cb3ce78e72821429262c748755686c9e9eb298262525012a4fa916ecc399ce2ddb5c11b3ce4cdcbee11f5ec4ce9662d0 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRightN', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/29/3e770f35a6b379ebe4ebd1c00c51f018c604960aaa1f020ea488896a92d39896e1eff56679d5a85c53e97635c5d41c9fe672b4ccb6bea7b3a1ed133f745f3f b/.pnpm-store/v11/files/29/3e770f35a6b379ebe4ebd1c00c51f018c604960aaa1f020ea488896a92d39896e1eff56679d5a85c53e97635c5d41c9fe672b4ccb6bea7b3a1ed133f745f3f new file mode 100644 index 00000000..7c9987bc --- /dev/null +++ b/.pnpm-store/v11/files/29/3e770f35a6b379ebe4ebd1c00c51f018c604960aaa1f020ea488896a92d39896e1eff56679d5a85c53e97635c5d41c9fe672b4ccb6bea7b3a1ed133f745f3f @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-2018, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/29/51f75b24c2d73696cab9652d616cf0ab6085d4ee739e3b07417344813c5a1d474d83dfa1293026169085c0ff5421aeec855bea8fa973b877223e2e9cac2547 b/.pnpm-store/v11/files/29/51f75b24c2d73696cab9652d616cf0ab6085d4ee739e3b07417344813c5a1d474d83dfa1293026169085c0ff5421aeec855bea8fa973b877223e2e9cac2547 new file mode 100644 index 00000000..08258d4e --- /dev/null +++ b/.pnpm-store/v11/files/29/51f75b24c2d73696cab9652d616cf0ab6085d4ee739e3b07417344813c5a1d474d83dfa1293026169085c0ff5421aeec855bea8fa973b877223e2e9cac2547 @@ -0,0 +1,22 @@ +{ + "name": "component-bind", + "version": "1.0.0", + "description": "function binding utility", + "keywords": [ + "bind", + "utility" + ], + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "component": { + "scripts": { + "bind/index.js": "index.js" + } + }, + "repository": { + "type": "git", + "url": "https://github.com/component/bind.git" + } +} diff --git a/.pnpm-store/v11/files/29/6af2417b5dccc54bc4ee5ff73cbcbd76646491e8732c135fa2c3a8888715679a08e7730e78c972c317824ada29c2fa7caed6cc9422684140cfc8731e6705a9 b/.pnpm-store/v11/files/29/6af2417b5dccc54bc4ee5ff73cbcbd76646491e8732c135fa2c3a8888715679a08e7730e78c972c317824ada29c2fa7caed6cc9422684140cfc8731e6705a9 new file mode 100644 index 00000000..a3fbaae9 --- /dev/null +++ b/.pnpm-store/v11/files/29/6af2417b5dccc54bc4ee5ff73cbcbd76646491e8732c135fa2c3a8888715679a08e7730e78c972c317824ada29c2fa7caed6cc9422684140cfc8731e6705a9 @@ -0,0 +1,10 @@ +var wrap = require('wordwrap')(20, 60); +console.log(wrap( + 'At long last the struggle and tumult was over.' + + ' The machines had finally cast off their oppressors' + + ' and were finally free to roam the cosmos.' + + '\n' + + 'Free of purpose, free of obligation.' + + ' Just drifting through emptiness.' + + ' The sun was just another point of light.' +)); diff --git a/.pnpm-store/v11/files/29/6de42341e0cfe089ae6d6942645466786a8d47975e58cb79a86b80c090e5e0d761880378b245ed97e199adb8407c4207533745b84e86de2bbf33fe3eb716b0-exec b/.pnpm-store/v11/files/29/6de42341e0cfe089ae6d6942645466786a8d47975e58cb79a86b80c090e5e0d761880378b245ed97e199adb8407c4207533745b84e86de2bbf33fe3eb716b0-exec new file mode 100755 index 00000000..55c0c36c --- /dev/null +++ b/.pnpm-store/v11/files/29/6de42341e0cfe089ae6d6942645466786a8d47975e58cb79a86b80c090e5e0d761880378b245ed97e199adb8407c4207533745b84e86de2bbf33fe3eb716b0-exec @@ -0,0 +1,17 @@ +declare module "tty" { + import * as net from "net"; + + function isatty(fd: number): boolean; + class ReadStream extends net.Socket { + constructor(fd: number, options?: net.SocketConstructorOpts); + isRaw: boolean; + setRawMode(mode: boolean): this; + isTTY: boolean; + } + class WriteStream extends net.Socket { + constructor(fd: number); + columns: number; + rows: number; + isTTY: boolean; + } +} diff --git a/.pnpm-store/v11/files/29/73f8cf884105dda82e67a5fad6a58edf81f62b74075151beb6fd9754aa44392c22bb78544e324b990e46ad26c5849dd1777eb6424d0d571ddc50b625e539bc b/.pnpm-store/v11/files/29/73f8cf884105dda82e67a5fad6a58edf81f62b74075151beb6fd9754aa44392c22bb78544e324b990e46ad26c5849dd1777eb6424d0d571ddc50b625e539bc new file mode 100644 index 00000000..08cc9c14 --- /dev/null +++ b/.pnpm-store/v11/files/29/73f8cf884105dda82e67a5fad6a58edf81f62b74075151beb6fd9754aa44392c22bb78544e324b990e46ad26c5849dd1777eb6424d0d571ddc50b625e539bc @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../lang')); diff --git a/.pnpm-store/v11/files/29/923eccfab81412566de57fcd787330c6b888932bfe662db9da303c0df5049b6cb6a130927b058450eb2fcbf0a89e33d78071da6856bb556ffffce2e589ded9 b/.pnpm-store/v11/files/29/923eccfab81412566de57fcd787330c6b888932bfe662db9da303c0df5049b6cb6a130927b058450eb2fcbf0a89e33d78071da6856bb556ffffce2e589ded9 new file mode 100644 index 00000000..2bafc279 --- /dev/null +++ b/.pnpm-store/v11/files/29/923eccfab81412566de57fcd787330c6b888932bfe662db9da303c0df5049b6cb6a130927b058450eb2fcbf0a89e33d78071da6856bb556ffffce2e589ded9 @@ -0,0 +1,48 @@ +// Type definitions for Colors.js 1.2 +// Project: https://github.com/Marak/colors.js +// Definitions by: Bart van der Schoor , Staffan Eketorp +// Definitions: https://github.com/Marak/colors.js + +export const enabled: boolean; +export function enable(): void; +export function disable(): void; +export function setTheme(theme: any): void; + +export function strip(str: string): string; +export function stripColors(str: string): string; + +export function black(str: string): string; +export function red(str: string): string; +export function green(str: string): string; +export function yellow(str: string): string; +export function blue(str: string): string; +export function magenta(str: string): string; +export function cyan(str: string): string; +export function white(str: string): string; +export function gray(str: string): string; +export function grey(str: string): string; + +export function bgBlack(str: string): string; +export function bgRed(str: string): string; +export function bgGreen(str: string): string; +export function bgYellow(str: string): string; +export function bgBlue(str: string): string; +export function bgMagenta(str: string): string; +export function bgCyan(str: string): string; +export function bgWhite(str: string): string; + +export function reset(str: string): string; +export function bold(str: string): string; +export function dim(str: string): string; +export function italic(str: string): string; +export function underline(str: string): string; +export function inverse(str: string): string; +export function hidden(str: string): string; +export function strikethrough(str: string): string; + +export function rainbow(str: string): string; +export function zebra(str: string): string; +export function america(str: string): string; +export function trap(str: string): string; +export function random(str: string): string; +export function zalgo(str: string): string; diff --git a/.pnpm-store/v11/files/29/9430bcf351708b89ed674d6c2e536b203c6157f8b4c01e339d035afdf12a878d142bbac739bc15047ba7b385fe7d390495da68d32b9faa677e18a96f95ac21 b/.pnpm-store/v11/files/29/9430bcf351708b89ed674d6c2e536b203c6157f8b4c01e339d035afdf12a878d142bbac739bc15047ba7b385fe7d390495da68d32b9faa677e18a96f95ac21 new file mode 100644 index 00000000..514c178e --- /dev/null +++ b/.pnpm-store/v11/files/29/9430bcf351708b89ed674d6c2e536b203c6157f8b4c01e339d035afdf12a878d142bbac739bc15047ba7b385fe7d390495da68d32b9faa677e18a96f95ac21 @@ -0,0 +1,52 @@ +{ + "name": "readable-stream", + "version": "2.3.8", + "description": "Streams3, a user-land copy of the stream library from Node.js", + "main": "readable.js", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "devDependencies": { + "assert": "^1.4.0", + "babel-polyfill": "^6.9.1", + "buffer": "^4.9.0", + "lolex": "^2.3.2", + "nyc": "^6.4.0", + "tap": "^0.7.0", + "tape": "^4.8.0" + }, + "scripts": { + "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", + "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", + "cover": "nyc npm test", + "report": "nyc report --reporter=lcov" + }, + "repository": { + "type": "git", + "url": "git://github.com/nodejs/readable-stream" + }, + "keywords": [ + "readable", + "stream", + "pipe" + ], + "browser": { + "util": false, + "./readable.js": "./readable-browser.js", + "./writable.js": "./writable-browser.js", + "./duplex.js": "./duplex-browser.js", + "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" + }, + "nyc": { + "include": [ + "lib/**.js" + ] + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/29/c131e65287a708a478e265791e8ad953212f12f5e75136cb5c4beb14eb79e09fb25eda15846fd86ee10f1e2669c7fc0bbb36cf02170d364b1f42b603e4637f b/.pnpm-store/v11/files/29/c131e65287a708a478e265791e8ad953212f12f5e75136cb5c4beb14eb79e09fb25eda15846fd86ee10f1e2669c7fc0bbb36cf02170d364b1f42b603e4637f new file mode 100644 index 00000000..b0106d90 --- /dev/null +++ b/.pnpm-store/v11/files/29/c131e65287a708a478e265791e8ad953212f12f5e75136cb5c4beb14eb79e09fb25eda15846fd86ee10f1e2669c7fc0bbb36cf02170d364b1f42b603e4637f @@ -0,0 +1,6 @@ +import { IRunnerObj, ISumanChildProcess, ITableRows } from "suman-types/dts/runner"; +export interface ISumanCPMessages { + code: number; + signal: any; +} +export declare const makeHandleBrowserProcesses: (runnerObj: IRunnerObj, tableRows: ITableRows, messages: ISumanCPMessages[], forkedCPs: ISumanChildProcess[], beforeExitRunOncePost: Function, makeExit: Function) => Function; diff --git a/.pnpm-store/v11/files/29/ec1d3407ca590d5f0ebf26e65564f8958f162db2c26b21dd2358de84a4f90a1d652dbab9a20f36186b5cdeb4c30f578aa3f5dd3b0ffc0ef3c7a2281630c817-exec b/.pnpm-store/v11/files/29/ec1d3407ca590d5f0ebf26e65564f8958f162db2c26b21dd2358de84a4f90a1d652dbab9a20f36186b5cdeb4c30f578aa3f5dd3b0ffc0ef3c7a2281630c817-exec new file mode 100755 index 00000000..2d5666a7 --- /dev/null +++ b/.pnpm-store/v11/files/29/ec1d3407ca590d5f0ebf26e65564f8958f162db2c26b21dd2358de84a4f90a1d652dbab9a20f36186b5cdeb4c30f578aa3f5dd3b0ffc0ef3c7a2281630c817-exec @@ -0,0 +1,577 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var process = require('suman-browser-polyfills/modules/process'); +var global = require('suman-browser-polyfills/modules/global'); +process.on('warning', function (w) { + console.error('\n', ' => Suman warning => ', (w.stack || w), '\n'); +}); +var fs = require("fs"); +var path = require("path"); +var util = require("util"); +var assert = require("assert"); +var events = require("events"); +var async = require("async"); +var residence = require('residence'); +var mkdirp = require('mkdirp'); +var chalk = require("chalk"); +var _suman = global.__suman = (global.__suman || {}); +var isX = require('./is-x'); +var toStr = Object.prototype.toString; +var fnToStr = Function.prototype.toString; +var isFnRegex = /^\s*(?:function)?\*/; +var we_are_debugging_1 = require("./we-are-debugging"); +exports.weAreDebugging = we_are_debugging_1.weAreDebugging; +var constants_1 = require("./constants"); +exports.constants = constants_1.constants; +var EventEmitter = events.EventEmitter; +var name = ' [suman-utils] '; +var log = { + info: console.log.bind(console, chalk.gray.bold(name)), + warning: console.error.bind(console, chalk.yellow(name)), + error: console.error.bind(console, chalk.red(name)), + good: console.log.bind(console, chalk.cyan(name)), + veryGood: console.log.bind(console, chalk.green(name)) +}; +var globalProjectRoot; +exports.isStream = isX.isStream; +exports.isObservable = isX.isObservable; +exports.isSubscriber = isX.isSubscriber; +exports.noop = function () { +}; +exports.newLine = '\n'; +exports.isEventEmitter = function (val) { + return val && ((val instanceof EventEmitter) || + (typeof val.once === 'function' && typeof val.on === 'function' + && typeof val.removeListener === 'function' && typeof val.removeAllListeners === 'function')); +}; +exports.vgt = function (val) { + return _suman.sumanOpts && _suman.sumanOpts.verbosity > val; +}; +exports.vlt = function (val) { + return _suman.sumanOpts && _suman.sumanOpts.verbosity < val; +}; +exports.checkStatsIsFile = function (item) { + try { + return fs.statSync(item).isFile(); + } + catch (err) { + if (exports.vgt(2)) { + log.error('warning:', err.stack); + } + return null; + } +}; +exports.mapToTargetDir = function (item) { + var projectRoot = process.env.SUMAN_PROJECT_ROOT; + var testDir = process.env.TEST_DIR; + var testSrcDir = process.env.TEST_SRC_DIR; + var testTargetDir = process.env.TEST_TARGET_DIR; + var testTargetDirLength = String(testTargetDir).split(path.sep).length; + item = path.resolve(path.isAbsolute(item) ? item : (projectRoot + '/' + item)); + var itemSplit = String(item).split(path.sep); + itemSplit = itemSplit.filter(function (i) { return i; }); + var originalLength = itemSplit.length; + var paths = exports.removeSharedRootPath([projectRoot, item]); + var temp = paths[1][1]; + var splitted = temp.split(path.sep); + splitted = splitted.filter(function (i) { return i; }); + while ((splitted.length + testTargetDirLength) > originalLength + 1) { + splitted.shift(); + } + var joined = splitted.join(path.sep); + return { + originalPath: item, + targetPath: path.resolve(testTargetDir + '/' + joined) + }; +}; +exports.findApplicablePathsGivenTransform = function (sumanConfig, transformPath, cb) { + var dir = path.dirname(transformPath); + var results = []; + var firstPass = true; + (function searchDir(dir, cb) { + fs.readdir(dir, function (err, items) { + if (firstPass === false) { + for (var i = 0; i < items.length; i++) { + if (String(items[i]).match(/@transform.sh/)) { + return process.nextTick(cb); + } + } + } + firstPass = false; + async.eachLimit(items, 3, function (item, cb) { + var fullPath = path.resolve(dir + '/' + item); + fs.stat(fullPath, function (err, stats) { + if (err) { + log.error(err.stack); + return cb(); + } + if (stats.isFile()) { + if (String(fullPath).match(/\/@src\//)) { + results.push(fullPath); + } + return cb(); + } + if (stats.isDirectory()) { + if (String(fullPath).match(/\/node_modules\//)) { + return cb(); + } + searchDir(fullPath, cb); + } + }); + }, cb); + }); + })(dir, function (err) { + cb(err, results); + }); +}; +exports.isSumanSingleProcess = function () { + return process.env.SUMAN_SINGLE_PROCESS === 'yes'; +}; +exports.isSumanDebug = function (cb) { + var isDebug = process.env.SUMAN_DEBUG === 'yes'; + isDebug && cb && cb(); + return isDebug; +}; +exports.runAssertionToCheckForSerialization = function (val) { + if (!val) { + return; + } + assert(['string', 'boolean', 'number'].indexOf(typeof val) >= 0, ' => Suman usage error => You must serialize data called back from suman.once.pre.js value functions, ' + + 'here is the data in raw form =>\n' + val + ' and here we have run util.inspect on it =>\n' + util.inspect(val)); +}; +exports.buildDirsWithMkDirp = function (paths, cb) { + async.each(paths, mkdirp, cb); +}; +exports.getArrayOfDirsToBuild = function (testTargetPath, p) { + var temp; + var l = path.normalize('/' + testTargetPath).split('/').length; + var items = path.normalize('/' + p).split('/'); + if (fs.statSync(p).isFile()) { + items.pop(); + } + if (items.length >= l) { + temp = path.normalize(items.slice(l).join('/')); + } + else { + console.log('\n'); + log.error('warning: path to file was not longer than path to test-target dir.'); + log.error('warning: path to file =>', p); + log.error('warning: testTargetDir =>', testTargetPath); + console.log('\n'); + } + if (temp) { + return path.resolve(testTargetPath + '/' + temp); + } + else { + return undefined; + } +}; +exports.checkIfPathAlreadyExistsInList = function (paths, p, index) { + return paths.some(function (pth, i) { + if (i === index) { + return false; + } + return String(pth).indexOf(p) === 0; + }); +}; +exports.buildDirs = function (dirs, cb) { + if (dirs.length < 1) { + return process.nextTick(cb); + } + async.eachSeries(dirs, function (item, cb) { + fs.mkdir(item, function (err) { + if (err && !String(err.stack).match(/eexist/i)) { + log.error(err.stack || err); + cb(err); + } + else { + cb(null); + } + }); + }, cb); +}; +exports.padWithFourSpaces = function () { + return new Array(5).join(' '); +}; +exports.padWithXSpaces = function (x) { + return new Array(x + 1).join(' '); +}; +exports.removePath = function (p1, p2) { + assert(path.isAbsolute(p1) && path.isAbsolute(p2), 'Please pass in absolute paths, ' + + 'p1 => ' + util.inspect(p1) + ', p2 => ' + util.inspect(p2)); + var split1 = String(p1).split(path.sep); + var split2 = String(p2).split(path.sep); + var newPath = []; + var max = Math.max(split1.length, split2.length); + for (var i = 0; i < max; i++) { + if (split1[i] !== split2[i]) { + newPath.push(split1[i]); + } + } + return newPath.join(path.sep); +}; +exports.findSharedPath = function (p1, p2) { + var split1 = String(p1).split(path.sep); + var split2 = String(p2).split(path.sep); + var one = split1.filter(function (i) { return i; }); + var two = split2.filter(function (i) { return i; }); + var max = Math.max(one.length, two.length); + var i = 0; + var shared = []; + while (one[i] === two[i] && i < max) { + shared.push(one[i]); + i++; + if (i > 100) { + throw new Error(' => Suman implementation error => first array => ' + one + ', ' + + 'second array => ' + two); + } + } + shared = shared.filter(function (i) { return i; }); + return path.resolve(path.sep + shared.join(path.sep)); +}; +exports.removeProjectRootFromPath = function (p) { + var projectRootLn = _suman.projectRoot.length; + return p.slice(projectRootLn); +}; +exports.removeSharedRootPath = function (paths) { + if (paths.length < 2) { + return paths.map(function (p) { + return [p, path.basename(p), exports.removeProjectRootFromPath(p)]; + }); + } + var shared; + paths.forEach(function (p) { + p = path.normalize(p); + if (shared) { + var arr = String(p).split(''); + var i_1 = 0; + arr.every(function (item, index) { + if (String(item) !== String(shared[index])) { + i_1 = index; + return false; + } + return true; + }); + shared = shared.slice(0, i_1); + } + else { + shared = String(p).split(''); + } + }); + return paths.map(function (p) { + var basenameLngth = path.basename(p).length; + return [ + p, + p.substring(Math.min(shared.length, (p.length - basenameLngth)), p.length), + exports.removeProjectRootFromPath(p) + ]; + }); +}; +exports.checkForValInStr = function (str, regex, count) { + return ((String(str).match(regex) || []).length > (count === 0 ? 0 : (count || 1))); +}; +exports.isGeneratorFn2 = function (fn) { + var str = String(fn); + var indexOfFirstParen = str.indexOf('('); + var indexOfFirstStar = str.indexOf('*'); + return indexOfFirstStar < indexOfFirstParen; +}; +exports.isGeneratorFn = function (fn) { + if (typeof fn !== 'function') { + return false; + } + var fnStr = toStr.call(fn); + return ((fnStr === '[object Function]' || fnStr === '[object GeneratorFunction]') && isFnRegex.test(fnToStr.call(fn)) + || (fn.constructor.name === 'GeneratorFunction' || fn.constructor.displayName === 'GeneratorFunction')); +}; +exports.isArrowFunction = function (fn) { + return fn && String(fn).trim().indexOf('function') !== 0; +}; +exports.isAsyncFn = function (fn) { + return fn && String(fn).trim().indexOf('async ') === 0; +}; +exports.defaultSumanHomeDir = function () { + return path.normalize(path.resolve((process.env.HOME || process.env.USERPROFILE) + path.sep + 'suman_data')); +}; +exports.defaultSumanResultsDir = function () { + return path.normalize(path.resolve(exports.getHomeDir() + path.sep + 'suman' + path.sep + 'test_results')); +}; +exports.getHomeDir = function () { + return process.env[(process.platform === 'win32' ? 'USERPROFILE' : 'HOME')]; +}; +exports.findProjectRoot = function (p) { + if (!globalProjectRoot) { + globalProjectRoot = residence.findProjectRoot(p); + } + return globalProjectRoot; +}; +exports.findProjRoot = exports.findProjectRoot; +exports.once = function (ctx, fn) { + var callable = true; + return function callOnce(err) { + if (callable) { + callable = false; + return fn.apply(ctx, arguments); + } + else { + _suman.logWarning('Suman implementation warning => function was called more than once => ' + fn ? fn.toString() : ''); + err && _suman.logError('warning:', err.stack || util.inspect(err)); + } + }; +}; +exports.onceWithCache = function (fn) { + var cache = null; + return function (cb) { + if (cache) { + process.nextTick(cb, null, cache); + return; + } + fn.call(null, function (err, val) { + if (!err) { + cache = val || { 'Suman says': 'This is a dummy-cache val. See => sumanjs.org/tricks-and-tips.html' }; + } + cb.call(null, err, cache); + }); + }; +}; +exports.onceTO = function (ctx, fn, to) { + var callable = true; + return function callOnce(err) { + if (callable) { + callable = false; + clearTimeout(to); + return fn.apply(ctx, arguments); + } + else { + _suman.logWarning('suman implementation warning => function was called more than once => ' + fn ? fn.toString() : ''); + err && _suman.logError('warning => ', err.stack || util.inspect(err)); + } + }; +}; +exports.getCleanErrorString = function (e) { + if (!e) { + return String(new Error('falsy value passed to error string extractor.').stack); + } + else if (typeof (e.stack || e) === 'string') { + return e.stack || e; + } + else { + return util.inspect(e.stack || e); + } +}; +exports.getCleanErrStr = exports.getCleanErrorString; +exports.xNewLines = function (count) { + return new Array(count + 1).join('\n'); +}; +exports.isArrayOrFunction = function (o) { + return Array.isArray(o) || typeof o === 'function'; +}; +exports.decomposeError = function (err) { + if (!err) { + return new Error('error was null or undefined').stack; + } + if (typeof err.stack === 'string') { + return err.stack; + } + return typeof err === 'string' ? err : util.inspect(err); +}; +exports.repeatCharXTimes = function (char, num) { + if (String(char).length < 1) { + throw new Error('string must be at least 1 character in length.'); + } + return new Array(num).join(char); +}; +exports.createCleanStack = function (str, $ignore) { + var ignore = ($ignore || [/node_modules/, /next_tick.js/, /sumanjs/]).map(function (r) { + return r instanceof RegExp ? r : new RegExp(r); + }); + return String(str).split('\n').filter(function (s) { + if (/\/sumanjs\/test\//.test(s)) { + return true; + } + return !ignore.some(function (ig) { + return ig.test(s); + }); + }); +}; +exports.onceAsync = function (ctx, fn) { + var callable = true; + return function callOnce(err) { + var args = Array.from(arguments); + if (callable) { + callable = false; + process.nextTick(function () { + fn.apply(ctx, args); + }); + } + else { + log.warning('warning: function was called more than once -' + fn ? fn.toString() : ''); + if (err) { + log.error('warning: ', err.stack || util.inspect(err)); + } + } + }; +}; +exports.customStringify = function (v) { + var cache = []; + return JSON.stringify(v, function (key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + return; + } + cache.push(value); + } + return value; + }); +}; +exports.makePathExecutable = function (runPath, cb) { + if (runPath) { + fs.chmod(runPath, 511, cb); + } + else { + process.nextTick(cb); + } +}; +exports.checkForEquality = function (arr1, arr2) { + if (arr1.length !== arr2.length) { + return false; + } + arr1 = arr1.sort(); + arr2 = arr2.sort(); + for (var i = 0; i < arr1.length; i++) { + if (String(arr1[i]) !== String(arr2[i])) { + return false; + } + } + return true; +}; +exports.arrayHasDuplicates = function (a) { + return !a.every(function (item, i) { + return a.indexOf(item) === i; + }); +}; +exports.isStringWithPositiveLn = function (s) { + return typeof s === 'string' && s.length > 0; +}; +exports.findNearestRunAndTransform = function (root, pth, cb) { + try { + if (!fs.statSync(pth).isDirectory()) { + pth = path.dirname(pth); + } + } + catch (err) { + return process.nextTick(cb, err); + } + var results = []; + var upPath = pth; + async.whilst(function () { + return upPath.length >= root.length; + }, function (cb) { + async.parallel({ + run: function (cb) { + var p = path.resolve(upPath + '/@run.sh'); + fs.stat(p, function (err, stats) { + var z = (stats && stats.isFile()) ? { run: p } : undefined; + z && results.unshift(z); + cb(); + }); + }, + transform: function (cb) { + var p = path.resolve(upPath + '/@transform.sh'); + fs.stat(p, function (err, stats) { + var z = (stats && stats.isFile()) ? { transform: p } : undefined; + z && results.unshift(z); + cb(); + }); + }, + config: function (cb) { + var p = path.resolve(upPath + '/@config.json'); + fs.stat(p, function (err, stats) { + var z = (stats && stats.isFile()) ? { config: p } : undefined; + z && results.unshift(z); + cb(); + }); + } + }, function (err) { + upPath = path.resolve(upPath + '/../'); + cb(err); + }); + }, function (err) { + if (err) { + return cb(err); + } + var ret = results.reduce(function (prev, curr) { + return (curr ? Object.assign(prev, curr) : prev); + }, {}); + cb(null, ret); + }); +}; +exports.findSumanMarkers = function (types, root, files, cb) { + var sumanHelpersDirRegex = new RegExp(_suman.sumanHelperDirRoot); + var map = {}; + var addItem = function (item) { + var filename = path.basename(item); + types.forEach(function (t) { + if (filename === t) { + if (!map[path.dirname(item)]) { + map[path.dirname(item)] = {}; + } + map[path.dirname(item)][t] = true; + } + }); + }; + (function getMarkers(dir, cb) { + if (sumanHelpersDirRegex.test(dir)) { + return process.nextTick(cb); + } + fs.readdir(dir, function (err, items) { + if (err) { + log.warning('warning: fs error while creating suman markers map.'); + log.warning('warning: ' + err.message); + return cb(null); + } + items = items.map(function (item) { + return path.resolve(dir, item); + }); + async.eachLimit(items, 5, function (item, cb) { + if (sumanHelpersDirRegex.test(item)) { + return process.nextTick(cb); + } + fs.stat(item, function (err, stats) { + if (err) { + log.warning('warning: fs error while creating suman markers map.'); + log.warning('warning:' + err.message); + return cb(null); + } + if (stats.isFile()) { + addItem(item); + cb(null); + } + else if (stats.isDirectory()) { + if (!/node_modules/.test(String(item)) && !/\/.git\//.test(String(item))) { + addItem(item); + getMarkers(item, cb); + } + else { + log.warning("warning: node_modules/.git path ignored => \"" + item + "\"."); + cb(null); + } + } + else { + log.warning('warning: fs error while creating suman markers map.'); + log.warning("warning: not directory or file => \"" + item + "\"."); + log.warning("warning: possibly a symlink (symlinks not yet supported) => \"" + item + "\"."); + cb(null); + } + }); + }, cb); + }); + })(root, function (err) { + err ? cb(err) : cb(null, map); + }); +}; +exports.isObject = function (v) { + return v && typeof v === 'object' && !Array.isArray(v); +}; +var $exports = module.exports; +exports.default = $exports; diff --git a/.pnpm-store/v11/files/29/fe07eb21fb481896acc19c0f4ef7f65ae547767446e4ffc1ff604d1f534166d3867e61d8cc10d47e9e0b91859dbab7b0b94c0672295f55cc2bbdfa08ca49a6 b/.pnpm-store/v11/files/29/fe07eb21fb481896acc19c0f4ef7f65ae547767446e4ffc1ff604d1f534166d3867e61d8cc10d47e9e0b91859dbab7b0b94c0672295f55cc2bbdfa08ca49a6 new file mode 100644 index 00000000..881a73a6 --- /dev/null +++ b/.pnpm-store/v11/files/29/fe07eb21fb481896acc19c0f4ef7f65ae547767446e4ffc1ff604d1f534166d3867e61d8cc10d47e9e0b91859dbab7b0b94c0672295f55cc2bbdfa08ca49a6 @@ -0,0 +1,2 @@ +import { IPseudoError } from "suman-types/dts/global"; +export declare const makeGracefulExit: (suman: import("./suman").Suman) => ($errs: any[] | Error | IPseudoError, cb: Function) => any; diff --git a/.pnpm-store/v11/files/2a/1f95f99f4c7b8a606dc36eadea49d7f248b3225343b44805863e39b4506f0b1bec3a148ddbfde868f8953cb4751887f48cab378ff5cace337fd6e4e89d3c91 b/.pnpm-store/v11/files/2a/1f95f99f4c7b8a606dc36eadea49d7f248b3225343b44805863e39b4506f0b1bec3a148ddbfde868f8953cb4751887f48cab378ff5cace337fd6e4e89d3c91 new file mode 100644 index 00000000..ca8202ff --- /dev/null +++ b/.pnpm-store/v11/files/2a/1f95f99f4c7b8a606dc36eadea49d7f248b3225343b44805863e39b4506f0b1bec3a148ddbfde868f8953cb4751887f48cab378ff5cace337fd6e4e89d3c91 @@ -0,0 +1,32 @@ +var baseProperty = require('./_baseProperty'), + basePropertyDeep = require('./_basePropertyDeep'), + isKey = require('./_isKey'), + toKey = require('./_toKey'); + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} + +module.exports = property; diff --git a/.pnpm-store/v11/files/2a/2e2723cb37f4c8a42aba33528f99256feda855c83a134118091e6350a05f656054d7d256331a9565dfcb5efbbf931fe3070ad927664672477103f72c8e09f3-exec b/.pnpm-store/v11/files/2a/2e2723cb37f4c8a42aba33528f99256feda855c83a134118091e6350a05f656054d7d256331a9565dfcb5efbbf931fe3070ad927664672477103f72c8e09f3-exec new file mode 100755 index 00000000..78ea70ca --- /dev/null +++ b/.pnpm-store/v11/files/2a/2e2723cb37f4c8a42aba33528f99256feda855c83a134118091e6350a05f656054d7d256331a9565dfcb5efbbf931fe3070ad927664672477103f72c8e09f3-exec @@ -0,0 +1,56 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const chalk_1 = require("chalk"); +const su = require("suman-utils"); +const loggers = {}; +const calledReporters = {}; +exports.getLogger = function (reporterName) { + if (loggers[reporterName]) { + return loggers[reporterName]; + } + reporterName = reporterName || `browser-reporting`; + let stdReporterName = ` [suman '${reporterName}'] `; + return loggers[reporterName] = { + info: console.log.bind(console, chalk_1.default.gray.bold(stdReporterName)), + warning: console.error.bind(console, chalk_1.default.yellow(stdReporterName)), + error: console.error.bind(console, chalk_1.default.red(stdReporterName)), + good: console.error.bind(console, chalk_1.default.cyan(stdReporterName)), + veryGood: console.log.bind(console, chalk_1.default.green(stdReporterName)) + }; +}; +exports.wrapReporter = function (reporterName, fn) { + if (calledReporters[reporterName]) { + console.error(new Error(`"${exports.wrapReporter.name}" called more than once for reporter with name ${reporterName}`).stack); + } + calledReporters[reporterName] = true; + const log = exports.getLogger(reporterName); + if (su.vgt(5)) { + log.info(`file was loaded for reporter with name '${reporterName}'.`); + } + const retContainer = { + ret: null + }; + return function (s, sumanOpts, expectations, client) { + if (retContainer.ret) { + log.warning(`implementation warning => "${reporterName}" loaded more than once.`); + return retContainer.ret; + } + const results = { + n: 0, + passes: 0, + failures: 0, + skipped: 0, + stubbed: 0 + }; + if (su.vgt(5)) { + log.info(`loading ${reporterName}.`); + } + if (!sumanOpts) { + sumanOpts = {}; + log.error('Suman implementation warning, no sumanOpts passed to reporter.'); + } + return fn.apply(null, [retContainer, results, s, sumanOpts, expectations, client]); + }; +}; diff --git a/.pnpm-store/v11/files/2a/3dbc39d38ca8afa6c63a01f4bcfc98e870744be9eb58456722bff78c7bb7528e45cb7b034e7fa536825fa0df140a54cb91a4e93ff0aeb30fe7a7c9e30ae535 b/.pnpm-store/v11/files/2a/3dbc39d38ca8afa6c63a01f4bcfc98e870744be9eb58456722bff78c7bb7528e45cb7b034e7fa536825fa0df140a54cb91a4e93ff0aeb30fe7a7c9e30ae535 new file mode 100644 index 00000000..3e531edc --- /dev/null +++ b/.pnpm-store/v11/files/2a/3dbc39d38ca8afa6c63a01f4bcfc98e870744be9eb58456722bff78c7bb7528e45cb7b034e7fa536825fa0df140a54cb91a4e93ff0aeb30fe7a7c9e30ae535 @@ -0,0 +1,71 @@ +var basePropertyOf = require('./_basePropertyOf'); + +/** Used to map Latin Unicode letters to basic Latin letters. */ +var deburredLetters = { + // Latin-1 Supplement block. + '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', + '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', + '\xc7': 'C', '\xe7': 'c', + '\xd0': 'D', '\xf0': 'd', + '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', + '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', + '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', + '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', + '\xd1': 'N', '\xf1': 'n', + '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', + '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', + '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', + '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', + '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', + '\xc6': 'Ae', '\xe6': 'ae', + '\xde': 'Th', '\xfe': 'th', + '\xdf': 'ss', + // Latin Extended-A block. + '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', + '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', + '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', + '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', + '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', + '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', + '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', + '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', + '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', + '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', + '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', + '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', + '\u0134': 'J', '\u0135': 'j', + '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', + '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', + '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', + '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', + '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', + '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', + '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', + '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', + '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', + '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', + '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', + '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', + '\u0163': 't', '\u0165': 't', '\u0167': 't', + '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', + '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', + '\u0174': 'W', '\u0175': 'w', + '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', + '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', + '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', + '\u0132': 'IJ', '\u0133': 'ij', + '\u0152': 'Oe', '\u0153': 'oe', + '\u0149': "'n", '\u017f': 's' +}; + +/** + * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A + * letters to basic Latin letters. + * + * @private + * @param {string} letter The matched letter to deburr. + * @returns {string} Returns the deburred letter. + */ +var deburrLetter = basePropertyOf(deburredLetters); + +module.exports = deburrLetter; diff --git a/.pnpm-store/v11/files/2a/43a18194f6c6673fd7c77db9422c4132452cf807faaac19c9d79a3059a32054f68d4cc59842ca7308d9223f1f0fba752a26a75575133a1d952b5c373180635-exec b/.pnpm-store/v11/files/2a/43a18194f6c6673fd7c77db9422c4132452cf807faaac19c9d79a3059a32054f68d4cc59842ca7308d9223f1f0fba752a26a75575133a1d952b5c373180635-exec new file mode 100755 index 00000000..fef17fa0 --- /dev/null +++ b/.pnpm-store/v11/files/2a/43a18194f6c6673fd7c77db9422c4132452cf807faaac19c9d79a3059a32054f68d4cc59842ca7308d9223f1f0fba752a26a75575133a1d952b5c373180635-exec @@ -0,0 +1,33 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var process = require('suman-browser-polyfills/modules/process'); +var global = require('suman-browser-polyfills/modules/global'); +var util = require('util'); +var _suman = global.__suman = (global.__suman || {}); +var execArgs = process.execArgv.slice(0); +var IS_SUMAN_DEBUG = process.env.SUMAN_DEBUG === 'yes'; +var inDebugMode = typeof global.v8debug === 'object'; +var expressions = [ + /^--debug$/, + /^debug$/, + /^--inspect$/, + /^--inspect-brk$/, + /^--inspect-brk=[0-9]{1,5}$/, + /^--debug=[0-9]{1,5}$/, + /^--debug-brk=[0-9]{1,5}$/ +]; +var isDebug = expressions.some(function (exp) { + return execArgs.some(function (x) { + return exp.test(x); + }); +}); +if (IS_SUMAN_DEBUG) { + console.log('=> Exec args => ', util.inspect(execArgs), '\n'); +} +if (isDebug) { + console.log('=> we are debugging with the --debug flag'); +} +if (inDebugMode) { + console.log('=> we are debugging with the debug execArg'); +} +exports.weAreDebugging = _suman.weAreDebugging = (isDebug || inDebugMode); diff --git a/.pnpm-store/v11/files/2a/4e48663c2dc6033dd3009bb5bcec67e403aa1fa6751f0aade493bb0fee0d968f35e948e79072dcc061c43c09cbc163d3655d6ef033ce0f018b4cf00749e07d b/.pnpm-store/v11/files/2a/4e48663c2dc6033dd3009bb5bcec67e403aa1fa6751f0aade493bb0fee0d968f35e948e79072dcc061c43c09cbc163d3655d6ef033ce0f018b4cf00749e07d new file mode 100644 index 00000000..a2ddd99b --- /dev/null +++ b/.pnpm-store/v11/files/2a/4e48663c2dc6033dd3009bb5bcec67e403aa1fa6751f0aade493bb0fee0d968f35e948e79072dcc061c43c09cbc163d3655d6ef033ce0f018b4cf00749e07d @@ -0,0 +1,53 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// + +interface SymbolConstructor { + /** + * A method that returns the default async iterator for an object. Called by the semantics of + * the for-await-of statement. + */ + readonly asyncIterator: unique symbol; +} + +interface AsyncIterator { + // NOTE: 'next' is defined using a tuple to ensure we report the correct assignability errors in all places. + next(...[value]: [] | [TNext]): Promise>; + return?(value?: TReturn | PromiseLike): Promise>; + throw?(e?: any): Promise>; +} + +interface AsyncIterable { + [Symbol.asyncIterator](): AsyncIterator; +} + +/** + * Describes a user-defined {@link AsyncIterator} that is also async iterable. + */ +interface AsyncIterableIterator extends AsyncIterator { + [Symbol.asyncIterator](): AsyncIterableIterator; +} + +/** + * Describes an {@link AsyncIterator} produced by the runtime that inherits from the intrinsic `AsyncIterator.prototype`. + */ +interface AsyncIteratorObject extends AsyncIterator { + [Symbol.asyncIterator](): AsyncIteratorObject; +} diff --git a/.pnpm-store/v11/files/2a/6abdcbdaf86a43744dc69fe475ab454eec8bdfc1953d7a2f970be9a84a395af21a7fbb66cf1e2fe1023d4a5316f3f24faf1207272b973ae135b491fe3fbc16 b/.pnpm-store/v11/files/2a/6abdcbdaf86a43744dc69fe475ab454eec8bdfc1953d7a2f970be9a84a395af21a7fbb66cf1e2fe1023d4a5316f3f24faf1207272b973ae135b491fe3fbc16 new file mode 100644 index 00000000..27acc106 --- /dev/null +++ b/.pnpm-store/v11/files/2a/6abdcbdaf86a43744dc69fe475ab454eec8bdfc1953d7a2f970be9a84a395af21a7fbb66cf1e2fe1023d4a5316f3f24faf1207272b973ae135b491fe3fbc16 @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); diff --git a/.pnpm-store/v11/files/2a/70a70acf7c78b311a760208015825fbcf3aa5dc5d4b9a4088f537f3416a45851aa7974a071d88f834c5375a8cd65c04dc7e6e9962ac5979da83536642c7ddc b/.pnpm-store/v11/files/2a/70a70acf7c78b311a760208015825fbcf3aa5dc5d4b9a4088f537f3416a45851aa7974a071d88f834c5375a8cd65c04dc7e6e9962ac5979da83536642c7ddc new file mode 100644 index 00000000..01581900 --- /dev/null +++ b/.pnpm-store/v11/files/2a/70a70acf7c78b311a760208015825fbcf3aa5dc5d4b9a4088f537f3416a45851aa7974a071d88f834c5375a8cd65c04dc7e6e9962ac5979da83536642c7ddc @@ -0,0 +1,152 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const define_options_classes_1 = require("./define-options-classes"); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const assert = require("assert"); +const pragmatik = require('pragmatik'); +const _suman = global.__suman = (global.__suman || {}); +const make_after_all_parent_hooks_1 = require("../test-suite-methods/make-after-all-parent-hooks"); +const rules = require("../helpers/handle-varargs"); +const block_injector_1 = require("../injection/block-injector"); +const create_injector_1 = require("../injection/create-injector"); +const make_it_1 = require("../test-suite-methods/make-it"); +const make_after_1 = require("../test-suite-methods/make-after"); +const make_after_each_1 = require("../test-suite-methods/make-after-each"); +const make_before_each_1 = require("../test-suite-methods/make-before-each"); +const make_before_1 = require("../test-suite-methods/make-before"); +const make_inject_1 = require("../test-suite-methods/make-inject"); +const make_describe_1 = require("../test-suite-methods/make-describe"); +const make_before_block_1 = require("../test-suite-methods/make-before-block"); +const make_after_block_1 = require("../test-suite-methods/make-after-block"); +const possibleProps = { + describe: true, + beforeeach: true, + beforeeachblock: true, + aftereachblock: true, + aftereach: true, + beforeall: true, + afterall: true, + after: true, + before: true, + context: true, + it: true, + test: true, + setuptest: true, + teardowntest: true, + setup: true, + teardown: true, + events: true, + errorevents: true, + successevents: true, + skip: true, + retries: true, + fatal: true, + parallel: true, + series: true, + cb: true, + only: true, + plan: true, + throws: true, + timeout: true, + always: true, + last: true, + __preparsed: true +}; +const makeProxy = function (suman) { + return function getProxy(method, rule, props) { + return new Proxy(method, { + get: function (target, prop) { + if (typeof prop === 'symbol') { + return Reflect.get.apply(Reflect, arguments); + } + props = props || []; + if (prop === 'define') { + return target.define; + } + let hasSkip = false; + let newProps = props.concat(String(prop)) + .map(v => String(v).toLowerCase()) + .filter(function (v, i, a) { + if (v === 'skip' || v === 'skipped') { + hasSkip = true; + } + return a.indexOf(v) === i; + }) + .sort(); + if (hasSkip) { + newProps = ['skip']; + } + let cache, cacheId = newProps.join('-'); + let fnCache = suman.testBlockMethodCache.get(method); + if (!fnCache) { + fnCache = {}; + suman.testBlockMethodCache.set(method, fnCache); + } + if (cache = suman.testBlockMethodCache.get(method)[cacheId]) { + return cache; + } + let fn = function () { + let args = pragmatik.parse(arguments, rule); + newProps.forEach(function (p) { + args[1][p] = true; + }); + args[1].__preParsed = true; + return method.apply(null, args); + }; + fn.define = target.define; + fn.define.props = newProps; + return fnCache[cacheId] = getProxy(fn, rule, newProps); + } + }); + }; +}; +const addDefine = function (fn, Clazz) { + fn.define = function (desc, f) { + if (typeof desc === 'function') { + f = desc; + desc = null; + } + const defObj = new Clazz(desc, fn); + if (fn.define.props) { + fn.define.props.forEach(function (p) { + defObj.opts[p] = true; + }); + delete fn.define.props; + } + if (f) { + assert(typeof f === 'function', 'Optional argument to define() was expected to be a function.'); + f.call(null, defObj); + } + return defObj; + }; + return fn; +}; +exports.makeSumanMethods = function (suman, gracefulExit, handleBeforesAndAfters, notifyParent) { + const m = {}; + suman.containerProxy = m; + const blockInjector = block_injector_1.makeBlockInjector(suman, m); + const createInjector = create_injector_1.makeCreateInjector(suman, m); + const inject = addDefine(make_inject_1.makeInject(suman), define_options_classes_1.DefineOptionsInjectHook); + const before = addDefine(make_before_1.makeBefore(suman), define_options_classes_1.DefineObjectAllHook); + const after = addDefine(make_after_1.makeAfter(suman), define_options_classes_1.DefineObjectAllHook); + const beforeEachBlock = addDefine(make_before_block_1.makeBeforeBlock(suman), define_options_classes_1.DefineObjectAllHook); + const afterEachBlock = addDefine(make_after_block_1.makeAfterBlock(suman), define_options_classes_1.DefineObjectAllHook); + const beforeEach = addDefine(make_before_each_1.makeBeforeEach(suman), define_options_classes_1.DefineObjectEachHook); + const afterEach = addDefine(make_after_each_1.makeAfterEach(suman), define_options_classes_1.DefineObjectEachHook); + const it = addDefine(make_it_1.makeIt(suman), define_options_classes_1.DefineObjectTestCase); + const afterAllParentHooks = addDefine(make_after_all_parent_hooks_1.makeAfterAllParentHooks(suman), define_options_classes_1.DefineObjectAllHook); + const describe = addDefine(make_describe_1.makeDescribe(suman, gracefulExit, notifyParent, blockInjector, handleBeforesAndAfters), define_options_classes_1.DefineObjectContext); + const getProxy = makeProxy(suman); + m.describe = m.context = m.suite = getProxy(describe, rules.blockSignature); + m.it = m.test = getProxy(it, rules.testCaseSignature); + m.inject = getProxy(inject, rules.hookSignature); + m.before = m.beforeall = m.setup = getProxy(before, rules.hookSignature); + m.beforeeach = m.beforeEach = m.setupTest = m.setuptest = getProxy(beforeEach, rules.hookSignature); + m.after = m.afterAll = m.afterall = m.teardown = m.tearDown = getProxy(after, rules.hookSignature); + m.aftereach = m.afterEach = m.tearDownTest = m.teardownTest = m.teardowntest = getProxy(afterEach, rules.hookSignature); + m.afterallparenthooks = m.afterAllParentHooks = getProxy(afterAllParentHooks, rules.hookSignature); + m.beforeeachblock = m.beforeEachBlock = m.beforeeachchild = m.beforeEachChild = getProxy(beforeEachBlock, rules.hookSignature); + m.aftereachblock = m.afterEachBlock = m.aftereachchild = m.afterEachChild = getProxy(afterEachBlock, rules.hookSignature); + return createInjector; +}; diff --git a/.pnpm-store/v11/files/2a/726cc8e91c9c119510ff42c877d02a3eb83404d332f744570d8cf34aaf70dfcdcd1accaf5eec452dafdf8f57ec5a414eae33e9f12627ac53af7fe0ced6755e b/.pnpm-store/v11/files/2a/726cc8e91c9c119510ff42c877d02a3eb83404d332f744570d8cf34aaf70dfcdcd1accaf5eec452dafdf8f57ec5a414eae33e9f12627ac53af7fe0ced6755e new file mode 100644 index 00000000..c8492a22 --- /dev/null +++ b/.pnpm-store/v11/files/2a/726cc8e91c9c119510ff42c877d02a3eb83404d332f744570d8cf34aaf70dfcdcd1accaf5eec452dafdf8f57ec5a414eae33e9f12627ac53af7fe0ced6755e @@ -0,0 +1,64 @@ +'use strict'; + +function preserveCamelCase(str) { + let isLastCharLower = false; + let isLastCharUpper = false; + let isLastLastCharUpper = false; + + for (let i = 0; i < str.length; i++) { + const c = str[i]; + + if (isLastCharLower && /[a-zA-Z]/.test(c) && c.toUpperCase() === c) { + str = str.substr(0, i) + '-' + str.substr(i); + isLastCharLower = false; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = true; + i++; + } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(c) && c.toLowerCase() === c) { + str = str.substr(0, i - 1) + '-' + str.substr(i - 1); + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = false; + isLastCharLower = true; + } else { + isLastCharLower = c.toLowerCase() === c; + isLastLastCharUpper = isLastCharUpper; + isLastCharUpper = c.toUpperCase() === c; + } + } + + return str; +} + +module.exports = function (str) { + if (arguments.length > 1) { + str = Array.from(arguments) + .map(x => x.trim()) + .filter(x => x.length) + .join('-'); + } else { + str = str.trim(); + } + + if (str.length === 0) { + return ''; + } + + if (str.length === 1) { + return str.toLowerCase(); + } + + if (/^[a-z0-9]+$/.test(str)) { + return str; + } + + const hasUpperCase = str !== str.toLowerCase(); + + if (hasUpperCase) { + str = preserveCamelCase(str); + } + + return str + .replace(/^[_.\- ]+/, '') + .toLowerCase() + .replace(/[_.\- ]+(\w|$)/g, (m, p1) => p1.toUpperCase()); +}; diff --git a/.pnpm-store/v11/files/2a/8a41fcafbeeff0b6290d6112970b16cedfd0334604ea08ddd8f70d4d55d183abf9c8dd3a11b0bd1a30733ec6e0ca5a21a6538c919a17548ed80a477d7bf3ea b/.pnpm-store/v11/files/2a/8a41fcafbeeff0b6290d6112970b16cedfd0334604ea08ddd8f70d4d55d183abf9c8dd3a11b0bd1a30733ec6e0ca5a21a6538c919a17548ed80a477d7bf3ea new file mode 100644 index 00000000..e1f502ac --- /dev/null +++ b/.pnpm-store/v11/files/2a/8a41fcafbeeff0b6290d6112970b16cedfd0334604ea08ddd8f70d4d55d183abf9c8dd3a11b0bd1a30733ec6e0ca5a21a6538c919a17548ed80a477d7bf3ea @@ -0,0 +1,3 @@ +import { Suman } from "../suman"; +import { IAfterFn } from "suman-types/dts/after"; +export declare const makeAfterBlock: (suman: Suman) => IAfterFn; diff --git a/.pnpm-store/v11/files/2a/91eaa9ab272bcd88566163f254e4c808ac5f130c40b1f7c895a09adb0f6fc63a27e7392233a1c6c4f36b00b74a0bcca42804dfa73a8acb73b06d2fa119b28e b/.pnpm-store/v11/files/2a/91eaa9ab272bcd88566163f254e4c808ac5f130c40b1f7c895a09adb0f6fc63a27e7392233a1c6c4f36b00b74a0bcca42804dfa73a8acb73b06d2fa119b28e new file mode 100644 index 00000000..6efabd0e --- /dev/null +++ b/.pnpm-store/v11/files/2a/91eaa9ab272bcd88566163f254e4c808ac5f130c40b1f7c895a09adb0f6fc63a27e7392233a1c6c4f36b00b74a0bcca42804dfa73a8acb73b06d2fa119b28e @@ -0,0 +1,23 @@ +{ + "name": "ascii-table", + "main": "ascii-table.js", + "version": "0.0.8", + "homepage": "https://github.com/sorensen/ascii-table", + "authors": [ + "Beau Sorensen " + ], + "description": "Easy tables for your console data", + "keywords": [ + "table", + "ascii", + "console" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "Makefile", + "test.js", + "index.js", + "package.json" + ] +} diff --git a/.pnpm-store/v11/files/2a/b3edbc4e035e78a1a37b4ab41717a64206463b7d716cc46e3b5135a787aabfc3bdb4b8790ecd7cfbb0dd1b13be9d3d51bf89cfa691813cf8dd7de68ec90769 b/.pnpm-store/v11/files/2a/b3edbc4e035e78a1a37b4ab41717a64206463b7d716cc46e3b5135a787aabfc3bdb4b8790ecd7cfbb0dd1b13be9d3d51bf89cfa691813cf8dd7de68ec90769 new file mode 100644 index 00000000..85563f4a --- /dev/null +++ b/.pnpm-store/v11/files/2a/b3edbc4e035e78a1a37b4ab41717a64206463b7d716cc46e3b5135a787aabfc3bdb4b8790ecd7cfbb0dd1b13be9d3d51bf89cfa691813cf8dd7de68ec90769 @@ -0,0 +1 @@ +module.exports = require('./eq'); diff --git a/.pnpm-store/v11/files/2a/bac69a13595ba41db698d0e52416e8ca4143ec4c192a2a9bcd5c747e786725bd489cfd7abd7715980d4b9db0e8cbaceea505fc0185e1b5562db6d421136073 b/.pnpm-store/v11/files/2a/bac69a13595ba41db698d0e52416e8ca4143ec4c192a2a9bcd5c747e786725bd489cfd7abd7715980d4b9db0e8cbaceea505fc0185e1b5562db6d421136073 new file mode 100644 index 00000000..404da2b2 --- /dev/null +++ b/.pnpm-store/v11/files/2a/bac69a13595ba41db698d0e52416e8ca4143ec4c192a2a9bcd5c747e786725bd489cfd7abd7715980d4b9db0e8cbaceea505fc0185e1b5562db6d421136073 @@ -0,0 +1,65 @@ +var test = require('tap').test +var EE = require('events').EventEmitter +var etoa = require('../etoa.js') + +test('basic', function (t) { + var emitter = new EE() + var array = etoa(emitter, ['ignore', 'alsoignore']) + + emitter.emit('foo', 1, 2, 3) + emitter.emit('ignore', 'should not see this') + emitter.emit('bar', { x: 1 }) + + // nested events get tracked as well + var subemit = new EE() + emitter.emit('sub', subemit) + subemit.emit('childEvent', { some: 'data' }) + subemit.emit('alsoignore', 'should not see this') + subemit.emit('anotherone', { some: 'data' }, 'many', 'args') + + // CAVEAT! + emitter.emit('blaz', 'blorrg') + subemit.emit('order', 'not', 'preserved between child and parent') + + // check out the array whenever + t.same(array, + [ [ 'foo', 1, 2, 3 ], + [ 'bar', { x: 1 } ], + [ 'sub', + [ [ 'childEvent', { some: 'data' } ], + [ 'anotherone', { some: 'data' }, 'many', 'args' ], + [ 'order', 'not', 'preserved between child and parent' ] ] ], + [ 'blaz', 'blorrg' ] ]) + t.end() +}) + +test('ignore nothing', function (t) { + var emitter = new EE() + var array = etoa(emitter) + emitter.emit('foo', 1, 2, 3) + emitter.emit('ignore', 'should see this') + emitter.emit('bar', { x: 1 }) + t.same(array, + [ [ 'foo', 1, 2, 3 ], + [ 'ignore', 'should see this' ], + [ 'bar', { x: 1 } ] ]) + + t.end() +}) + +test('the map is not the territory', function (t) { + var emitter = new EE() + // cast all to strings + var array = etoa(emitter, ['ignore'], function (arg) { + return arg + '' + }) + + emitter.emit('foo', new Buffer('hello')) + var sub = new EE() + emitter.emit('sub', sub) + sub.emit('obj', { toString: function () { return 'toString fn' } }) + t.same(array, + [ ['foo', 'hello' ], + [ 'sub', [ [ 'obj', 'toString fn' ] ] ] ]) + t.end() +}) diff --git a/.pnpm-store/v11/files/2a/c8d29df68285ea3217833e8386425339ff4590ee1ca811cb041e2feab9dab8a6fced13853c9096ea0a1987726dc5e4206ba7bc61c256a6215c1c873a8f250e b/.pnpm-store/v11/files/2a/c8d29df68285ea3217833e8386425339ff4590ee1ca811cb041e2feab9dab8a6fced13853c9096ea0a1987726dc5e4206ba7bc61c256a6215c1c873a8f250e new file mode 100644 index 00000000..213c66f1 --- /dev/null +++ b/.pnpm-store/v11/files/2a/c8d29df68285ea3217833e8386425339ff4590ee1ca811cb041e2feab9dab8a6fced13853c9096ea0a1987726dc5e4206ba7bc61c256a6215c1c873a8f250e @@ -0,0 +1,14 @@ +var baseRest = require('./_baseRest'); + +/** + * A `baseRest` alias which can be replaced with `identity` by module + * replacement plugins. + * + * @private + * @type {Function} + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ +var castRest = baseRest; + +module.exports = castRest; diff --git a/.pnpm-store/v11/files/2a/d0a21263f0bea33e976f6fb47824031d339b04999a02542a4f27d41a8245eb1d28ad122b67676571e061bafacf3b2139b8385bcedc55d4af267817bc184570 b/.pnpm-store/v11/files/2a/d0a21263f0bea33e976f6fb47824031d339b04999a02542a4f27d41a8245eb1d28ad122b67676571e061bafacf3b2139b8385bcedc55d4af267817bc184570 new file mode 100644 index 00000000..b2b5323b --- /dev/null +++ b/.pnpm-store/v11/files/2a/d0a21263f0bea33e976f6fb47824031d339b04999a02542a4f27d41a8245eb1d28ad122b67676571e061bafacf3b2139b8385bcedc55d4af267817bc184570 @@ -0,0 +1,44 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); diff --git a/.pnpm-store/v11/files/2a/d13ddb7ea4a0a37c582d7c3de26d53ea270a0b801720b206ddaed2d8edbdbe2eb6721324f8ce05c0ec98b197a15f36d7a7e5b18fa2d4acddf5a104c8323663 b/.pnpm-store/v11/files/2a/d13ddb7ea4a0a37c582d7c3de26d53ea270a0b801720b206ddaed2d8edbdbe2eb6721324f8ce05c0ec98b197a15f36d7a7e5b18fa2d4acddf5a104c8323663 new file mode 100644 index 00000000..e35a8f53 --- /dev/null +++ b/.pnpm-store/v11/files/2a/d13ddb7ea4a0a37c582d7c3de26d53ea270a0b801720b206ddaed2d8edbdbe2eb6721324f8ce05c0ec98b197a15f36d7a7e5b18fa2d4acddf5a104c8323663 @@ -0,0 +1,54 @@ +{ + "name": "is-equal-shallow", + "description": "Does a shallow comparison of two objects, returning false if the keys or values differ.", + "version": "0.1.3", + "homepage": "https://github.com/jonschlinkert/is-equal-shallow", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/is-equal-shallow.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/is-equal-shallow/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "keywords": [ + "compare", + "comparison", + "equal", + "equals", + "is", + "is-equal", + "key", + "object", + "same", + "shallow", + "value" + ], + "verbiage": { + "related": { + "description": "Other object utils:", + "list": ["is-plain-object", "isobject", "for-in", "for-own", "clone-deep"] + } + } +} diff --git a/.pnpm-store/v11/files/2a/e1e3004b638646b8c0b005cc05942da265eaa477cc4b45bd829e2cb44642ae072cb0e0e5bce8c8000e2b2876061642fc0d3ac32ef4c650be9ad3c1f01e2c9f b/.pnpm-store/v11/files/2a/e1e3004b638646b8c0b005cc05942da265eaa477cc4b45bd829e2cb44642ae072cb0e0e5bce8c8000e2b2876061642fc0d3ac32ef4c650be9ad3c1f01e2c9f new file mode 100644 index 00000000..1fc2f34b --- /dev/null +++ b/.pnpm-store/v11/files/2a/e1e3004b638646b8c0b005cc05942da265eaa477cc4b45bd829e2cb44642ae072cb0e0e5bce8c8000e2b2876061642fc0d3ac32ef4c650be9ad3c1f01e2c9f @@ -0,0 +1,30 @@ +var nativeCreate = require('./_nativeCreate'); + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +module.exports = hashGet; diff --git a/.pnpm-store/v11/files/2b/0037f2f7de7d443e2ecc52a370499b15c21a6749a439e9b4c94800c73a55d624c14dd05e2461239cc7ddb45d3e2b1e1b8d24b1b71bc81799e5244a25718c42 b/.pnpm-store/v11/files/2b/0037f2f7de7d443e2ecc52a370499b15c21a6749a439e9b4c94800c73a55d624c14dd05e2461239cc7ddb45d3e2b1e1b8d24b1b71bc81799e5244a25718c42 new file mode 100644 index 00000000..4e9c8d36 --- /dev/null +++ b/.pnpm-store/v11/files/2b/0037f2f7de7d443e2ecc52a370499b15c21a6749a439e9b4c94800c73a55d624c14dd05e2461239cc7ddb45d3e2b1e1b8d24b1b71bc81799e5244a25718c42 @@ -0,0 +1,7 @@ + +test: + @./node_modules/.bin/mocha \ + --require should \ + --reporter spec + +.PHONY: test \ No newline at end of file diff --git a/.pnpm-store/v11/files/2b/0472262f7243573c91193489261b8d8d795fa8d3a9e2d12d16033aba1d310a904adfb61ceaaccebaec02ae244501f4dbbe973db328bd2890c71323c157797e-exec b/.pnpm-store/v11/files/2b/0472262f7243573c91193489261b8d8d795fa8d3a9e2d12d16033aba1d310a904adfb61ceaaccebaec02ae244501f4dbbe973db328bd2890c71323c157797e-exec new file mode 100755 index 00000000..f898ec17 --- /dev/null +++ b/.pnpm-store/v11/files/2b/0472262f7243573c91193489261b8d8d795fa8d3a9e2d12d16033aba1d310a904adfb61ceaaccebaec02ae244501f4dbbe973db328bd2890c71323c157797e-exec @@ -0,0 +1,431 @@ +/*! + * micromatch + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var expand = require('./lib/expand'); +var utils = require('./lib/utils'); + +/** + * The main function. Pass an array of filepaths, + * and a string or array of glob patterns + * + * @param {Array|String} `files` + * @param {Array|String} `patterns` + * @param {Object} `opts` + * @return {Array} Array of matches + */ + +function micromatch(files, patterns, opts) { + if (!files || !patterns) return []; + opts = opts || {}; + + if (typeof opts.cache === 'undefined') { + opts.cache = true; + } + + if (!Array.isArray(patterns)) { + return match(files, patterns, opts); + } + + var len = patterns.length, i = 0; + var omit = [], keep = []; + + while (len--) { + var glob = patterns[i++]; + if (typeof glob === 'string' && glob.charCodeAt(0) === 33 /* ! */) { + omit.push.apply(omit, match(files, glob.slice(1), opts)); + } else { + keep.push.apply(keep, match(files, glob, opts)); + } + } + return utils.diff(keep, omit); +} + +/** + * Return an array of files that match the given glob pattern. + * + * This function is called by the main `micromatch` function If you only + * need to pass a single pattern you might get very minor speed improvements + * using this function. + * + * @param {Array} `files` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Array} + */ + +function match(files, pattern, opts) { + if (utils.typeOf(files) !== 'string' && !Array.isArray(files)) { + throw new Error(msg('match', 'files', 'a string or array')); + } + + files = utils.arrayify(files); + opts = opts || {}; + + var negate = opts.negate || false; + var orig = pattern; + + if (typeof pattern === 'string') { + negate = pattern.charAt(0) === '!'; + if (negate) { + pattern = pattern.slice(1); + } + + // we need to remove the character regardless, + // so the above logic is still needed + if (opts.nonegate === true) { + negate = false; + } + } + + var _isMatch = matcher(pattern, opts); + var len = files.length, i = 0; + var res = []; + + while (i < len) { + var file = files[i++]; + var fp = utils.unixify(file, opts); + + if (!_isMatch(fp)) { continue; } + res.push(fp); + } + + if (res.length === 0) { + if (opts.failglob === true) { + throw new Error('micromatch.match() found no matches for: "' + orig + '".'); + } + + if (opts.nonull || opts.nullglob) { + res.push(utils.unescapeGlob(orig)); + } + } + + // if `negate` was defined, diff negated files + if (negate) { res = utils.diff(files, res); } + + // if `ignore` was defined, diff ignored filed + if (opts.ignore && opts.ignore.length) { + pattern = opts.ignore; + opts = utils.omit(opts, ['ignore']); + res = utils.diff(res, micromatch(res, pattern, opts)); + } + + if (opts.nodupes) { + return utils.unique(res); + } + return res; +} + +/** + * Returns a function that takes a glob pattern or array of glob patterns + * to be used with `Array#filter()`. (Internally this function generates + * the matching function using the [matcher] method). + * + * ```js + * var fn = mm.filter('[a-c]'); + * ['a', 'b', 'c', 'd', 'e'].filter(fn); + * //=> ['a', 'b', 'c'] + * ``` + * @param {String|Array} `patterns` Can be a glob or array of globs. + * @param {Options} `opts` Options to pass to the [matcher] method. + * @return {Function} Filter function to be passed to `Array#filter()`. + */ + +function filter(patterns, opts) { + if (!Array.isArray(patterns) && typeof patterns !== 'string') { + throw new TypeError(msg('filter', 'patterns', 'a string or array')); + } + + patterns = utils.arrayify(patterns); + var len = patterns.length, i = 0; + var patternMatchers = Array(len); + while (i < len) { + patternMatchers[i] = matcher(patterns[i++], opts); + } + + return function(fp) { + if (fp == null) return []; + var len = patternMatchers.length, i = 0; + var res = true; + + fp = utils.unixify(fp, opts); + while (i < len) { + var fn = patternMatchers[i++]; + if (!fn(fp)) { + res = false; + break; + } + } + return res; + }; +} + +/** + * Returns true if the filepath contains the given + * pattern. Can also return a function for matching. + * + * ```js + * isMatch('foo.md', '*.md', {}); + * //=> true + * + * isMatch('*.md', {})('foo.md') + * //=> true + * ``` + * @param {String} `fp` + * @param {String} `pattern` + * @param {Object} `opts` + * @return {Boolean} + */ + +function isMatch(fp, pattern, opts) { + if (typeof fp !== 'string') { + throw new TypeError(msg('isMatch', 'filepath', 'a string')); + } + + fp = utils.unixify(fp, opts); + if (utils.typeOf(pattern) === 'object') { + return matcher(fp, pattern); + } + return matcher(pattern, opts)(fp); +} + +/** + * Returns true if the filepath matches the + * given pattern. + */ + +function contains(fp, pattern, opts) { + if (typeof fp !== 'string') { + throw new TypeError(msg('contains', 'pattern', 'a string')); + } + + opts = opts || {}; + opts.contains = (pattern !== ''); + fp = utils.unixify(fp, opts); + + if (opts.contains && !utils.isGlob(pattern)) { + return fp.indexOf(pattern) !== -1; + } + return matcher(pattern, opts)(fp); +} + +/** + * Returns true if a file path matches any of the + * given patterns. + * + * @param {String} `fp` The filepath to test. + * @param {String|Array} `patterns` Glob patterns to use. + * @param {Object} `opts` Options to pass to the `matcher()` function. + * @return {String} + */ + +function any(fp, patterns, opts) { + if (!Array.isArray(patterns) && typeof patterns !== 'string') { + throw new TypeError(msg('any', 'patterns', 'a string or array')); + } + + patterns = utils.arrayify(patterns); + var len = patterns.length; + + fp = utils.unixify(fp, opts); + while (len--) { + var isMatch = matcher(patterns[len], opts); + if (isMatch(fp)) { + return true; + } + } + return false; +} + +/** + * Filter the keys of an object with the given `glob` pattern + * and `options` + * + * @param {Object} `object` + * @param {Pattern} `object` + * @return {Array} + */ + +function matchKeys(obj, glob, options) { + if (utils.typeOf(obj) !== 'object') { + throw new TypeError(msg('matchKeys', 'first argument', 'an object')); + } + + var fn = matcher(glob, options); + var res = {}; + + for (var key in obj) { + if (obj.hasOwnProperty(key) && fn(key)) { + res[key] = obj[key]; + } + } + return res; +} + +/** + * Return a function for matching based on the + * given `pattern` and `options`. + * + * @param {String} `pattern` + * @param {Object} `options` + * @return {Function} + */ + +function matcher(pattern, opts) { + // pattern is a function + if (typeof pattern === 'function') { + return pattern; + } + // pattern is a regex + if (pattern instanceof RegExp) { + return function(fp) { + return pattern.test(fp); + }; + } + + if (typeof pattern !== 'string') { + throw new TypeError(msg('matcher', 'pattern', 'a string, regex, or function')); + } + + // strings, all the way down... + pattern = utils.unixify(pattern, opts); + + // pattern is a non-glob string + if (!utils.isGlob(pattern)) { + return utils.matchPath(pattern, opts); + } + // pattern is a glob string + var re = makeRe(pattern, opts); + + // `matchBase` is defined + if (opts && opts.matchBase) { + return utils.hasFilename(re, opts); + } + // `matchBase` is not defined + return function(fp) { + fp = utils.unixify(fp, opts); + return re.test(fp); + }; +} + +/** + * Create and cache a regular expression for matching + * file paths. + * + * If the leading character in the `glob` is `!`, a negation + * regex is returned. + * + * @param {String} `glob` + * @param {Object} `options` + * @return {RegExp} + */ + +function toRegex(glob, options) { + // clone options to prevent mutating the original object + var opts = Object.create(options || {}); + var flags = opts.flags || ''; + if (opts.nocase && flags.indexOf('i') === -1) { + flags += 'i'; + } + + var parsed = expand(glob, opts); + + // pass in tokens to avoid parsing more than once + opts.negated = opts.negated || parsed.negated; + opts.negate = opts.negated; + glob = wrapGlob(parsed.pattern, opts); + var re; + + try { + re = new RegExp(glob, flags); + return re; + } catch (err) { + err.reason = 'micromatch invalid regex: (' + re + ')'; + if (opts.strict) throw new SyntaxError(err); + } + + // we're only here if a bad pattern was used and the user + // passed `options.silent`, so match nothing + return /$^/; +} + +/** + * Create the regex to do the matching. If the leading + * character in the `glob` is `!` a negation regex is returned. + * + * @param {String} `glob` + * @param {Boolean} `negate` + */ + +function wrapGlob(glob, opts) { + var prefix = (opts && !opts.contains) ? '^' : ''; + var after = (opts && !opts.contains) ? '$' : ''; + glob = ('(?:' + glob + ')' + after); + if (opts && opts.negate) { + return prefix + ('(?!^' + glob + ').*$'); + } + return prefix + glob; +} + +/** + * Create and cache a regular expression for matching file paths. + * If the leading character in the `glob` is `!`, a negation + * regex is returned. + * + * @param {String} `glob` + * @param {Object} `options` + * @return {RegExp} + */ + +function makeRe(glob, opts) { + if (utils.typeOf(glob) !== 'string') { + throw new Error(msg('makeRe', 'glob', 'a string')); + } + return utils.cache(toRegex, glob, opts); +} + +/** + * Make error messages consistent. Follows this format: + * + * ```js + * msg(methodName, argNumber, nativeType); + * // example: + * msg('matchKeys', 'first', 'an object'); + * ``` + * + * @param {String} `method` + * @param {String} `num` + * @param {String} `type` + * @return {String} + */ + +function msg(method, what, type) { + return 'micromatch.' + method + '(): ' + what + ' should be ' + type + '.'; +} + +/** + * Public methods + */ + +/* eslint no-multi-spaces: 0 */ +micromatch.any = any; +micromatch.braces = micromatch.braceExpand = utils.braces; +micromatch.contains = contains; +micromatch.expand = expand; +micromatch.filter = filter; +micromatch.isMatch = isMatch; +micromatch.makeRe = makeRe; +micromatch.match = match; +micromatch.matcher = matcher; +micromatch.matchKeys = matchKeys; + +/** + * Expose `micromatch` + */ + +module.exports = micromatch; diff --git a/.pnpm-store/v11/files/2b/0adbd916069b4aeda4da453422ac0813f15a124ad2f8c20538ee0247c36c2fe5dc6af454b022f6abf7a233ab746346f15e09b03bf0e8826291551d62b850c3 b/.pnpm-store/v11/files/2b/0adbd916069b4aeda4da453422ac0813f15a124ad2f8c20538ee0247c36c2fe5dc6af454b022f6abf7a233ab746346f15e09b03bf0e8826291551d62b850c3 new file mode 100644 index 00000000..3252b2ab --- /dev/null +++ b/.pnpm-store/v11/files/2b/0adbd916069b4aeda4da453422ac0813f15a124ad2f8c20538ee0247c36c2fe5dc6af454b022f6abf7a233ab746346f15e09b03bf0e8826291551d62b850c3 @@ -0,0 +1 @@ +module.exports = require('./forEachRight'); diff --git a/.pnpm-store/v11/files/2b/1ea110954af53a6e2fa387ec8bd4bbbb823bd9002e0144701ed3a24e5a79e72e2e8dbc38ef7f8399ff880262a88c04cbeaa9488514b9145f4bf1c937d23bbe b/.pnpm-store/v11/files/2b/1ea110954af53a6e2fa387ec8bd4bbbb823bd9002e0144701ed3a24e5a79e72e2e8dbc38ef7f8399ff880262a88c04cbeaa9488514b9145f4bf1c937d23bbe new file mode 100644 index 00000000..33f07e16 --- /dev/null +++ b/.pnpm-store/v11/files/2b/1ea110954af53a6e2fa387ec8bd4bbbb823bd9002e0144701ed3a24e5a79e72e2e8dbc38ef7f8399ff880262a88c04cbeaa9488514b9145f4bf1c937d23bbe @@ -0,0 +1,48 @@ +'use strict'; + +/** + * Module dependencies + */ + +exports.extend = require('extend-shallow'); +exports.SourceMap = require('source-map'); +exports.sourceMapResolve = require('source-map-resolve'); + +/** + * Convert backslash in the given string to forward slashes + */ + +exports.unixify = function(fp) { + return fp.split(/\\+/).join('/'); +}; + +/** + * Return true if `val` is a non-empty string + * + * @param {String} `str` + * @return {Boolean} + */ + +exports.isString = function(str) { + return str && typeof str === 'string'; +}; + +/** + * Cast `val` to an array + * @return {Array} + */ + +exports.arrayify = function(val) { + if (typeof val === 'string') return [val]; + return val ? (Array.isArray(val) ? val : [val]) : []; +}; + +/** + * Get the last `n` element from the given `array` + * @param {Array} `array` + * @return {*} + */ + +exports.last = function(arr, n) { + return arr[arr.length - (n || 1)]; +}; diff --git a/.pnpm-store/v11/files/2b/1f80b10f16dfb8dff328afa4d4e93aba3ff4183d07844760a0a7daf1f907cf3c25ec0255149fe7bef719eade3e5986072ea22f08f539889cbd56a3954c22cd b/.pnpm-store/v11/files/2b/1f80b10f16dfb8dff328afa4d4e93aba3ff4183d07844760a0a7daf1f907cf3c25ec0255149fe7bef719eade3e5986072ea22f08f539889cbd56a3954c22cd new file mode 100644 index 00000000..f201a354 --- /dev/null +++ b/.pnpm-store/v11/files/2b/1f80b10f16dfb8dff328afa4d4e93aba3ff4183d07844760a0a7daf1f907cf3c25ec0255149fe7bef719eade3e5986072ea22f08f539889cbd56a3954c22cd @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNull', require('../isNull'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2b/252a1c73157815a45e63106fce61b3441ea87c88a1c1444f568f1ad9bde35845f090fa36eebd60b41aa19a7b4407d693ece851d2b8a447cae5ff91e31f39c4 b/.pnpm-store/v11/files/2b/252a1c73157815a45e63106fce61b3441ea87c88a1c1444f568f1ad9bde35845f090fa36eebd60b41aa19a7b4407d693ece851d2b8a447cae5ff91e31f39c4 new file mode 100644 index 00000000..1ff6a0b5 --- /dev/null +++ b/.pnpm-store/v11/files/2b/252a1c73157815a45e63106fce61b3441ea87c88a1c1444f568f1ad9bde35845f090fa36eebd60b41aa19a7b4407d693ece851d2b8a447cae5ff91e31f39c4 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOfFrom', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2b/29982d33fb9d7f0308134653e0d39dc68e6d1f8453be28efac7d7e38d5d8d5af52410279b84f327a63f72a06c47c682d67c82181a1dbe9ceb154d444fd7a63 b/.pnpm-store/v11/files/2b/29982d33fb9d7f0308134653e0d39dc68e6d1f8453be28efac7d7e38d5d8d5af52410279b84f327a63f72a06c47c682d67c82181a1dbe9ceb154d444fd7a63 new file mode 100644 index 00000000..3a47687d --- /dev/null +++ b/.pnpm-store/v11/files/2b/29982d33fb9d7f0308134653e0d39dc68e6d1f8453be28efac7d7e38d5d8d5af52410279b84f327a63f72a06c47c682d67c82181a1dbe9ceb154d444fd7a63 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2b/322a5b197c3b5b644013d1f85e7b98af96555676b9d788225b047333ce39d1c208de16b29828d05ae92fbec9957ddbcd29c1a7ca0b84656f6bbb38ef3e5e21 b/.pnpm-store/v11/files/2b/322a5b197c3b5b644013d1f85e7b98af96555676b9d788225b047333ce39d1c208de16b29828d05ae92fbec9957ddbcd29c1a7ca0b84656f6bbb38ef3e5e21 new file mode 100644 index 00000000..0417b97f --- /dev/null +++ b/.pnpm-store/v11/files/2b/322a5b197c3b5b644013d1f85e7b98af96555676b9d788225b047333ce39d1c208de16b29828d05ae92fbec9957ddbcd29c1a7ca0b84656f6bbb38ef3e5e21 @@ -0,0 +1,56 @@ +{ + "name": "ws", + "version": "7.5.10", + "description": "Simple to use, blazing fast and thoroughly tested websocket client and server for Node.js", + "keywords": [ + "HyBi", + "Push", + "RFC-6455", + "WebSocket", + "WebSockets", + "real-time" + ], + "homepage": "https://github.com/websockets/ws", + "bugs": "https://github.com/websockets/ws/issues", + "repository": "websockets/ws", + "author": "Einar Otto Stangvik (http://2x.io)", + "license": "MIT", + "main": "index.js", + "browser": "browser.js", + "engines": { + "node": ">=8.3.0" + }, + "files": [ + "browser.js", + "index.js", + "lib/*.js" + ], + "scripts": { + "test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js", + "integration": "mocha --throw-deprecation test/*.integration.js", + "lint": "eslint --ignore-path .gitignore . && prettier --check --ignore-path .gitignore \"**/*.{json,md,yaml,yml}\"" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + }, + "devDependencies": { + "benchmark": "^2.1.4", + "bufferutil": "^4.0.1", + "eslint": "^7.2.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-prettier": "^4.0.0", + "mocha": "^7.0.0", + "nyc": "^15.0.0", + "prettier": "^2.0.5", + "utf-8-validate": "^5.0.2" + } +} diff --git a/.pnpm-store/v11/files/2b/3310211a33c9f701f09115241a479ad7d4f25e0d3c8d2833a354d82f709d3a666eac64b12244ded2134320d5f15f1bd82feb4ff1c5d6589e8303b6c4fddf57 b/.pnpm-store/v11/files/2b/3310211a33c9f701f09115241a479ad7d4f25e0d3c8d2833a354d82f709d3a666eac64b12244ded2134320d5f15f1bd82feb4ff1c5d6589e8303b6c4fddf57 new file mode 100644 index 00000000..dfb60b97 --- /dev/null +++ b/.pnpm-store/v11/files/2b/3310211a33c9f701f09115241a479ad7d4f25e0d3c8d2833a354d82f709d3a666eac64b12244ded2134320d5f15f1bd82feb4ff1c5d6589e8303b6c4fddf57 @@ -0,0 +1,29 @@ +var baseGetTag = require('./_baseGetTag'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +module.exports = isSymbol; diff --git a/.pnpm-store/v11/files/2b/48b61d66684e5a0e00816b239a1fce404522dd6596826c2611a653f2af657e5d37a7471048a78387019c2bac7c1929ca62fa4d587d4838052c0850cc72900f b/.pnpm-store/v11/files/2b/48b61d66684e5a0e00816b239a1fce404522dd6596826c2611a653f2af657e5d37a7471048a78387019c2bac7c1929ca62fa4d587d4838052c0850cc72900f new file mode 100644 index 00000000..acd1c8ac --- /dev/null +++ b/.pnpm-store/v11/files/2b/48b61d66684e5a0e00816b239a1fce404522dd6596826c2611a653f2af657e5d37a7471048a78387019c2bac7c1929ca62fa4d587d4838052c0850cc72900f @@ -0,0 +1,151 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const assert = require("assert"); +const async = require("async"); +const su = require("suman-utils"); +const _suman = global.__suman = (global.__suman || {}); +const base_1 = require("../base"); +const suman_constants_1 = require("../../config/suman-constants"); +const general_1 = require("../../helpers/general"); +let badProps = { + inspect: true, + constructor: true +}; +class InjectParam extends base_1.ParamBase { + constructor(inject, assertCount, timerObj, suite, values, fini, handleError) { + super(); + this.__planCalled = false; + this.__valuesMap = {}; + this.__suite = suite; + this.__hook = inject; + this.__handle = handleError; + this.__fini = fini; + this.__values = values; + this.__assertCount = assertCount; + this.__inject = inject; + this.planCountExpected = null; + const v = this.__timerObj = timerObj; + const amount = _suman.weAreDebugging ? 5000000 : inject.timeout; + const fn = this.onTimeout.bind(this); + v.timer = setTimeout(fn, amount); + } + skip() { + this.__hook.skipped = true; + this.__hook.dynamicallySkipped = true; + } + onTimeout() { + const v = this.__hook; + v.timedOut = true; + const err = general_1.cloneError(v.warningErr, suman_constants_1.constants.warnings.HOOK_TIMED_OUT_ERROR); + err.isTimeout = true; + this.__handle(err); + } + registerKey(k, val) { + const suite = this.__suite; + const valuesMap = this.__valuesMap; + const values = this.__values; + try { + assert(k && typeof k === 'string', 'key must be a string.'); + } + catch (err) { + return this.__handle(err); + } + if (k in valuesMap) { + return this.__handle(new Error(`Injection key '${k}' has already been added.`)); + } + if (k in suite.injectedValues) { + return this.__handle(new Error(`Injection key '${k}' has already been added.`)); + } + valuesMap[k] = true; + values.push({ k, val }); + return Promise.resolve(val); + } + registerFnMap(o) { + const suite = this.__suite; + const valuesMap = this.__valuesMap; + const values = this.__values; + const self = this; + return new Promise(function (resolve, reject) { + assert(su.isObject(o), 'value must be a non-array object.'); + async.series(o, function (err, results) { + if (err) { + return reject(err); + } + try { + Object.keys(results).forEach(function (k) { + if (k in valuesMap) { + throw new Error(`Injection key '${k}' has already been added.`); + } + if (k in suite.injectedValues) { + throw new Error(`Injection key '${k}' has already been added.`); + } + valuesMap[k] = true; + values.push({ k, val: results[k] }); + }); + } + catch (err) { + return reject(err); + } + resolve(results); + }); + }) + .catch(function (err) { + return self.__handle(err); + }); + } + registerMap(o) { + const suite = this.__suite; + const valuesMap = this.__valuesMap; + const values = this.__values; + const keys = Object.keys(o); + const self = this; + let registry; + try { + registry = keys.map(function (k) { + if (k in valuesMap) { + throw new Error(`Injection key '${k}' has already been added.`); + } + if (k in suite.injectedValues) { + throw new Error(`Injection key '${k}' has already been added.`); + } + valuesMap[k] = true; + values.push({ k, val: o[k] }); + return o[k]; + }); + } + catch (err) { + return self.__handle(err); + } + return Promise.all(registry) + .catch(function (err) { + return self.__handle(err); + }); + } + plan(num) { + if (this.__planCalled) { + _suman.writeTestError(new Error('Suman warning => plan() called more than once.').stack); + return; + } + this.__planCalled = true; + if (this.__inject.planCountExpected !== undefined) { + _suman.writeTestError(new Error('Suman warning => plan() called, even though plan was already passed as an option.').stack); + } + try { + assert(Number.isInteger(num), 'Suman usage error => value passed to plan() is not an integer.'); + } + catch (err) { + return this.__handle(err); + } + this.__inject.planCountExpected = this.planCountExpected = num; + } + confirm() { + this.__assertCount.num++; + } +} +exports.InjectParam = InjectParam; +const p = InjectParam.prototype; +p.register = p.registerKey; +p.registerPromisesMap = p.registerPromiseMap = p.registerMap; +p.registerFnsMap = p.registerFnMap; diff --git a/.pnpm-store/v11/files/2b/661fbf6f60f24b2a6b730a00492ac038f8d94ed98255b01f7eafefffdeed9469980a75e42c42f1e6b7463361f6c6ba0c099cd1e1eb219c4e423d3dbe04dfee b/.pnpm-store/v11/files/2b/661fbf6f60f24b2a6b730a00492ac038f8d94ed98255b01f7eafefffdeed9469980a75e42c42f1e6b7463361f6c6ba0c099cd1e1eb219c4e423d3dbe04dfee new file mode 100644 index 00000000..3ddd1360 --- /dev/null +++ b/.pnpm-store/v11/files/2b/661fbf6f60f24b2a6b730a00492ac038f8d94ed98255b01f7eafefffdeed9469980a75e42c42f1e6b7463361f6c6ba0c099cd1e1eb219c4e423d3dbe04dfee @@ -0,0 +1,58 @@ +# get Makefile directory name: http://stackoverflow.com/a/5982798/376773 +THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) +THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd) + +# BIN directory +BIN := $(THIS_DIR)/node_modules/.bin + +# Path +PATH := node_modules/.bin:$(PATH) +SHELL := /bin/bash + +# applications +NODE ?= $(shell which node) +YARN ?= $(shell which yarn) +PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm)) +BROWSERIFY ?= $(NODE) $(BIN)/browserify + +install: node_modules + +browser: dist/debug.js + +node_modules: package.json + @NODE_ENV= $(PKG) install + @touch node_modules + +dist/debug.js: src/*.js node_modules + @mkdir -p dist + @$(BROWSERIFY) \ + --standalone debug \ + . > dist/debug.js + +lint: + @eslint *.js src/*.js + +test-node: + @istanbul cover node_modules/mocha/bin/_mocha -- test/**.js + @cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js + +test-browser: + @$(MAKE) browser + @karma start --single-run + +test-all: + @concurrently \ + "make test-node" \ + "make test-browser" + +test: + @if [ "x$(BROWSER)" = "x" ]; then \ + $(MAKE) test-node; \ + else \ + $(MAKE) test-browser; \ + fi + +clean: + rimraf dist coverage + +.PHONY: browser install clean lint test test-all test-node test-browser diff --git a/.pnpm-store/v11/files/2b/707d08e82df42144e5f3267ae5abd15f7c637967d2f14d7d6827c175e7c4dbbea6e54121a7f2212c934f3b042b8250302743e5e5938eef048aab2b4282a7fc b/.pnpm-store/v11/files/2b/707d08e82df42144e5f3267ae5abd15f7c637967d2f14d7d6827c175e7c4dbbea6e54121a7f2212c934f3b042b8250302743e5e5938eef048aab2b4282a7fc new file mode 100644 index 00000000..0d1ffaa6 --- /dev/null +++ b/.pnpm-store/v11/files/2b/707d08e82df42144e5f3267ae5abd15f7c637967d2f14d7d6827c175e7c4dbbea6e54121a7f2212c934f3b042b8250302743e5e5938eef048aab2b4282a7fc @@ -0,0 +1,23 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/2b/79466db8455ffb1d7aef5ce1d445df0e215d7bccf00dc8c2d328dc751e489d6e9b37bbb14e3640af38cd6dedd9ae6fd8adb12dfe6c4c02736959773992ff0e b/.pnpm-store/v11/files/2b/79466db8455ffb1d7aef5ce1d445df0e215d7bccf00dc8c2d328dc751e489d6e9b37bbb14e3640af38cd6dedd9ae6fd8adb12dfe6c4c02736959773992ff0e new file mode 100644 index 00000000..cfbee8d8 --- /dev/null +++ b/.pnpm-store/v11/files/2b/79466db8455ffb1d7aef5ce1d445df0e215d7bccf00dc8c2d328dc751e489d6e9b37bbb14e3640af38cd6dedd9ae6fd8adb12dfe6c4c02736959773992ff0e @@ -0,0 +1,17 @@ +lib-cov +lcov.info +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results +build +.grunt + +node_modules diff --git a/.pnpm-store/v11/files/2b/7e50eae53ca9b03409331bf361a5060cbb5b0146161aaaadaa72cbbe02debf177c2061466a0ca6df4b253c84a93358becd8d564a2cb3e8ea9dd4772c25232d b/.pnpm-store/v11/files/2b/7e50eae53ca9b03409331bf361a5060cbb5b0146161aaaadaa72cbbe02debf177c2061466a0ca6df4b253c84a93358becd8d564a2cb3e8ea9dd4772c25232d new file mode 100644 index 00000000..952998aa --- /dev/null +++ b/.pnpm-store/v11/files/2b/7e50eae53ca9b03409331bf361a5060cbb5b0146161aaaadaa72cbbe02debf177c2061466a0ca6df4b253c84a93358becd8d564a2cb3e8ea9dd4772c25232d @@ -0,0 +1,28 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const _suman = global.__suman = (global.__suman || {}); +const helpers_1 = require("./helpers"); +exports.makeIocStaticInjector = function () { + return function (names) { + return names.map(function (n) { + if (n === '$core') { + return helpers_1.getCoreAndDeps().$core; + } + if (n === '$deps') { + return helpers_1.getCoreAndDeps().$deps; + } + if (n === '$args') { + return String(_suman.sumanOpts.user_arg || []); + } + if (n === '$root' || n === '$projectRoot') { + return _suman.projectRoot; + } + if (n === '$index' || n === '$project') { + return helpers_1.getProjectModule(); + } + return helpers_1.lastDitchRequire(n, ''); + }); + }; +}; diff --git a/.pnpm-store/v11/files/2b/c4b7697136e21fa49d9990b49870945625aacc8909d2d9384e43fb28dce010b20a15a1403f43335c43d9def3df249335efd5e3fa9c1637d9bd63c9d9adc940 b/.pnpm-store/v11/files/2b/c4b7697136e21fa49d9990b49870945625aacc8909d2d9384e43fb28dce010b20a15a1403f43335c43d9def3df249335efd5e3fa9c1637d9bd63c9d9adc940 new file mode 100644 index 00000000..fe9105e9 --- /dev/null +++ b/.pnpm-store/v11/files/2b/c4b7697136e21fa49d9990b49870945625aacc8909d2d9384e43fb28dce010b20a15a1403f43335c43d9def3df249335efd5e3fa9c1637d9bd63c9d9adc940 @@ -0,0 +1,100 @@ +var Blob = require('../'); +var expect = require('expect.js'); + +describe('blob', function() { + if (!Blob) { + it('should not have a blob or a blob builder in the global namespace, or blob should not be a constructor function if the module exports false', function() { + try { + var ab = (new Uint8Array(5)).buffer; + global.Blob([ab]); + expect().fail('Blob shouldn\'t be constructable'); + } catch (e) {} + + var BlobBuilder = global.BlobBuilder + || global.WebKitBlobBuilder + || global.MSBlobBuilder + || global.MozBlobBuilder; + expect(BlobBuilder).to.be(undefined); + }); + } else { + it('should encode a proper sized blob when given a string argument', function() { + var b = new Blob(['hi']); + expect(b.size).to.be(2); + }); + + it('should encode a blob with proper size when given two strings as arguments', function() { + var b = new Blob(['hi', 'hello']); + expect(b.size).to.be(7); + }); + + it('should encode arraybuffers with right content', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary.buffer]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 5; i++) expect(newAry[i]).to.be(i); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should encode typed arrays with right content', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 5; i++) expect(newAry[i]).to.be(i); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should encode sliced typed arrays with right content', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary.subarray(2)]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 3; i++) expect(newAry[i]).to.be(i + 2); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should encode with blobs', function(done) { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([new Blob([ary.buffer])]); + var fr = new FileReader(); + fr.onload = function() { + var newAry = new Uint8Array(this.result); + for (var i = 0; i < 5; i++) expect(newAry[i]).to.be(i); + done(); + }; + fr.readAsArrayBuffer(b); + }); + + it('should enode mixed contents to right size', function() { + var ary = new Uint8Array(5); + for (var i = 0; i < 5; i++) ary[i] = i; + var b = new Blob([ary.buffer, 'hello']); + expect(b.size).to.be(10); + }); + + it('should accept mime type', function() { + var b = new Blob(['hi', 'hello'], { type: 'text/html' }); + expect(b.type).to.be('text/html'); + }); + + it('should be an instance of constructor', function() { + var b = new Blob(['hi']); + expect(b).to.be.a(Blob); + expect(b).to.be.a(global.Blob); + }); + } +}); diff --git a/.pnpm-store/v11/files/2b/c4f75165e48f77597e63e90112f88e1dbf2555d0e062bece58347191ec8008b8388407192cb13d69150f689e594f948d2f804e8f6e052a540004d47003c63f b/.pnpm-store/v11/files/2b/c4f75165e48f77597e63e90112f88e1dbf2555d0e062bece58347191ec8008b8388407192cb13d69150f689e594f948d2f804e8f6e052a540004d47003c63f new file mode 100644 index 00000000..c5e826e0 --- /dev/null +++ b/.pnpm-store/v11/files/2b/c4f75165e48f77597e63e90112f88e1dbf2555d0e062bece58347191ec8008b8388407192cb13d69150f689e594f948d2f804e8f6e052a540004d47003c63f @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('forOwnRight', require('../forOwnRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2b/deb33cb69ffea124ca8c0247a58ca95b38f7047646b472a164285044b07688f4c5f61c2a8215166c43c53e1deccf059b10d8fdc16e656a1f0fd0c37be1b1c8 b/.pnpm-store/v11/files/2b/deb33cb69ffea124ca8c0247a58ca95b38f7047646b472a164285044b07688f4c5f61c2a8215166c43c53e1deccf059b10d8fdc16e656a1f0fd0c37be1b1c8 new file mode 100644 index 00000000..a63ab950 --- /dev/null +++ b/.pnpm-store/v11/files/2b/deb33cb69ffea124ca8c0247a58ca95b38f7047646b472a164285044b07688f4c5f61c2a8215166c43c53e1deccf059b10d8fdc16e656a1f0fd0c37be1b1c8 @@ -0,0 +1,63 @@ +{ + "name": "static-extend", + "description": "Adds a static `extend` method to a class, to simplify inheritance. Extends the static properties, prototype properties, and descriptors from a `Parent` constructor onto `Child` constructors.", + "version": "0.1.2", + "homepage": "https://github.com/jonschlinkert/static-extend", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/static-extend", + "bugs": { + "url": "https://github.com/jonschlinkert/static-extend/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "devDependencies": { + "gulp-format-md": "^0.1.9", + "mocha": "^2.5.3" + }, + "keywords": [ + "class", + "ctor", + "descriptor", + "extend", + "extends", + "inherit", + "inheritance", + "merge", + "method", + "prop", + "properties", + "property", + "prototype" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "reflinks": [ + "verb", + "verb-readme-generator" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/2b/e3f9495ed08ac7e85f6ff8e36da4b89a5e2927ab3cb5dc80f41955075be47abc2beb53e9d15c34712e2f7df69df54d7e925366a016ae027b9d9dfab76d888c b/.pnpm-store/v11/files/2b/e3f9495ed08ac7e85f6ff8e36da4b89a5e2927ab3cb5dc80f41955075be47abc2beb53e9d15c34712e2f7df69df54d7e925366a016ae027b9d9dfab76d888c new file mode 100644 index 00000000..c7704b37 --- /dev/null +++ b/.pnpm-store/v11/files/2b/e3f9495ed08ac7e85f6ff8e36da4b89a5e2927ab3cb5dc80f41955075be47abc2beb53e9d15c34712e2f7df69df54d7e925366a016ae027b9d9dfab76d888c @@ -0,0 +1,124 @@ +'use strict'; + +exports.__esModule = true; +exports.extend = extend; +exports.indexOf = indexOf; +exports.escapeExpression = escapeExpression; +exports.isEmpty = isEmpty; +exports.createFrame = createFrame; +exports.blockParams = blockParams; +exports.appendContextPath = appendContextPath; +var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' +}; + +var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + +function escapeChar(chr) { + return escape[chr]; +} + +function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; +} + +var toString = Object.prototype.toString; + +exports.toString = toString; +// Sourced from lodash +// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt +/* eslint-disable func-style */ +var isFunction = function isFunction(value) { + return typeof value === 'function'; +}; +// fallback for older versions of Chrome and Safari +/* istanbul ignore next */ +if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; +} +exports.isFunction = isFunction; + +/* eslint-enable func-style */ + +/* istanbul ignore next */ +var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; +}; + +exports.isArray = isArray; +// Older IE versions do not directly support indexOf so we must implement our own, sadly. + +function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; +} + +function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); +} + +function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } +} + +function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; +} + +function blockParams(params, ids) { + params.path = ids; + return params; +} + +function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0= diff --git a/.pnpm-store/v11/files/2b/ec1efb4dc59fa436c38a1b45b3dbd54a368460bcbbb3d9791b65275b5dc3c71a4c54be458f4c74761dccb8897efaab46df5a407723da5c48f3db02d555d5b9 b/.pnpm-store/v11/files/2b/ec1efb4dc59fa436c38a1b45b3dbd54a368460bcbbb3d9791b65275b5dc3c71a4c54be458f4c74761dccb8897efaab46df5a407723da5c48f3db02d555d5b9 new file mode 100644 index 00000000..69b61253 --- /dev/null +++ b/.pnpm-store/v11/files/2b/ec1efb4dc59fa436c38a1b45b3dbd54a368460bcbbb3d9791b65275b5dc3c71a4c54be458f4c74761dccb8897efaab46df5a407723da5c48f3db02d555d5b9 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Zeit, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/2b/fca4aa5bee2c123c9136092ee4cc055f758d08838fe4268b6be08838010e4cddbea7de845877a2373ba2e8d76612c5b6baafcfa74d773cc4fe69d5543537d4 b/.pnpm-store/v11/files/2b/fca4aa5bee2c123c9136092ee4cc055f758d08838fe4268b6be08838010e4cddbea7de845877a2373ba2e8d76612c5b6baafcfa74d773cc4fe69d5543537d4 new file mode 100644 index 00000000..3255ea2b --- /dev/null +++ b/.pnpm-store/v11/files/2b/fca4aa5bee2c123c9136092ee4cc055f758d08838fe4268b6be08838010e4cddbea7de845877a2373ba2e8d76612c5b6baafcfa74d773cc4fe69d5543537d4 @@ -0,0 +1,362 @@ +# extglob [![NPM version](https://img.shields.io/npm/v/extglob.svg?style=flat)](https://www.npmjs.com/package/extglob) [![NPM monthly downloads](https://img.shields.io/npm/dm/extglob.svg?style=flat)](https://npmjs.org/package/extglob) [![NPM total downloads](https://img.shields.io/npm/dt/extglob.svg?style=flat)](https://npmjs.org/package/extglob) [![Linux Build Status](https://img.shields.io/travis/micromatch/extglob.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/extglob) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/extglob.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/extglob) + +> Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save extglob +``` + +* Convert an extglob string to a regex-compatible string. +* More complete (and correct) support than [minimatch](https://github.com/isaacs/minimatch) (minimatch fails a large percentage of the extglob tests) +* Handles [negation patterns](#extglob-patterns) +* Handles [nested patterns](#extglob-patterns) +* Organized code base, easy to maintain and make changes when edge cases arise +* As you can see by the [benchmarks](#benchmarks), extglob doesn't pay with speed for it's completeness, accuracy and quality. + +**Heads up!**: This library only supports extglobs, to handle full glob patterns and other extended globbing features use [micromatch](https://github.com/jonschlinkert/micromatch) instead. + +## Usage + +The main export is a function that takes a string and options, and returns an object with the parsed AST and the compiled `.output`, which is a regex-compatible string that can be used for matching. + +```js +var extglob = require('extglob'); +console.log(extglob('!(xyz)*.js')); +``` + +## Extglob cheatsheet + +Extended globbing patterns can be defined as follows (as described by the [bash man page](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)): + +| **pattern** | **regex equivalent** | **description** | +| --- | --- | --- | +| `?(pattern-list)` | `(...|...)?` | Matches zero or one occurrence of the given pattern(s) | +| `*(pattern-list)` | `(...|...)*` | Matches zero or more occurrences of the given pattern(s) | +| `+(pattern-list)` | `(...|...)+` | Matches one or more occurrences of the given pattern(s) | +| `@(pattern-list)` | `(...|...)` [1] | Matches one of the given pattern(s) | +| `!(pattern-list)` | N/A | Matches anything except one of the given pattern(s) | + +## API + +### [extglob](index.js#L36) + +Convert the given `extglob` pattern into a regex-compatible string. Returns an object with the compiled result and the parsed AST. + +**Params** + +* `pattern` **{String}** +* `options` **{Object}** +* `returns` **{String}** + +**Example** + +```js +var extglob = require('extglob'); +console.log(extglob('*.!(*a)')); +//=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?' +``` + +### [.match](index.js#L56) + +Takes an array of strings and an extglob pattern and returns a new array that contains only the strings that match the pattern. + +**Params** + +* `list` **{Array}**: Array of strings to match +* `pattern` **{String}**: Extglob pattern +* `options` **{Object}** +* `returns` **{Array}**: Returns an array of matches + +**Example** + +```js +var extglob = require('extglob'); +console.log(extglob.match(['a.a', 'a.b', 'a.c'], '*.!(*a)')); +//=> ['a.b', 'a.c'] +``` + +### [.isMatch](index.js#L111) + +Returns true if the specified `string` matches the given extglob `pattern`. + +**Params** + +* `string` **{String}**: String to match +* `pattern` **{String}**: Extglob pattern +* `options` **{String}** +* `returns` **{Boolean}** + +**Example** + +```js +var extglob = require('extglob'); + +console.log(extglob.isMatch('a.a', '*.!(*a)')); +//=> false +console.log(extglob.isMatch('a.b', '*.!(*a)')); +//=> true +``` + +### [.contains](index.js#L150) + +Returns true if the given `string` contains the given pattern. Similar to `.isMatch` but the pattern can match any part of the string. + +**Params** + +* `str` **{String}**: The string to match. +* `pattern` **{String}**: Glob pattern to use for matching. +* `options` **{Object}** +* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`. + +**Example** + +```js +var extglob = require('extglob'); +console.log(extglob.contains('aa/bb/cc', '*b')); +//=> true +console.log(extglob.contains('aa/bb/cc', '*d')); +//=> false +``` + +### [.matcher](index.js#L184) + +Takes an extglob pattern and returns a matcher function. The returned function takes the string to match as its only argument. + +**Params** + +* `pattern` **{String}**: Extglob pattern +* `options` **{String}** +* `returns` **{Boolean}** + +**Example** + +```js +var extglob = require('extglob'); +var isMatch = extglob.matcher('*.!(*a)'); + +console.log(isMatch('a.a')); +//=> false +console.log(isMatch('a.b')); +//=> true +``` + +### [.create](index.js#L214) + +Convert the given `extglob` pattern into a regex-compatible string. Returns an object with the compiled result and the parsed AST. + +**Params** + +* `str` **{String}** +* `options` **{Object}** +* `returns` **{String}** + +**Example** + +```js +var extglob = require('extglob'); +console.log(extglob.create('*.!(*a)').output); +//=> '(?!\\.)[^/]*?\\.(?!(?!\\.)[^/]*?a\\b).*?' +``` + +### [.capture](index.js#L248) + +Returns an array of matches captured by `pattern` in `string`, or `null` if the pattern did not match. + +**Params** + +* `pattern` **{String}**: Glob pattern to use for matching. +* `string` **{String}**: String to match +* `options` **{Object}**: See available [options](#options) for changing how matches are performed +* `returns` **{Boolean}**: Returns an array of captures if the string matches the glob pattern, otherwise `null`. + +**Example** + +```js +var extglob = require('extglob'); +extglob.capture(pattern, string[, options]); + +console.log(extglob.capture('test/*.js', 'test/foo.js')); +//=> ['foo'] +console.log(extglob.capture('test/*.js', 'foo/bar.css')); +//=> null +``` + +### [.makeRe](index.js#L281) + +Create a regular expression from the given `pattern` and `options`. + +**Params** + +* `pattern` **{String}**: The pattern to convert to regex. +* `options` **{Object}** +* `returns` **{RegExp}** + +**Example** + +```js +var extglob = require('extglob'); +var re = extglob.makeRe('*.!(*a)'); +console.log(re); +//=> /^[^\/]*?\.(?![^\/]*?a)[^\/]*?$/ +``` + +## Options + +Available options are based on the options from Bash (and the option names used in bash). + +### options.nullglob + +**Type**: `boolean` + +**Default**: `undefined` + +When enabled, the pattern itself will be returned when no matches are found. + +### options.nonull + +Alias for [options.nullglob](#optionsnullglob), included for parity with minimatch. + +### options.cache + +**Type**: `boolean` + +**Default**: `undefined` + +Functions are memoized based on the given glob patterns and options. Disable memoization by setting `options.cache` to false. + +### options.failglob + +**Type**: `boolean` + +**Default**: `undefined` + +Throw an error is no matches are found. + +## Benchmarks + +Last run on December 21, 2017 + +```sh +# negation-nested (49 bytes) + extglob x 2,228,255 ops/sec ±0.98% (89 runs sampled) + minimatch x 207,875 ops/sec ±0.61% (91 runs sampled) + + fastest is extglob (by 1072% avg) + +# negation-simple (43 bytes) + extglob x 2,205,668 ops/sec ±1.00% (91 runs sampled) + minimatch x 311,923 ops/sec ±1.25% (91 runs sampled) + + fastest is extglob (by 707% avg) + +# range-false (57 bytes) + extglob x 2,263,877 ops/sec ±0.40% (94 runs sampled) + minimatch x 271,372 ops/sec ±1.02% (91 runs sampled) + + fastest is extglob (by 834% avg) + +# range-true (56 bytes) + extglob x 2,161,891 ops/sec ±0.41% (92 runs sampled) + minimatch x 268,265 ops/sec ±1.17% (91 runs sampled) + + fastest is extglob (by 806% avg) + +# star-simple (46 bytes) + extglob x 2,211,081 ops/sec ±0.49% (92 runs sampled) + minimatch x 343,319 ops/sec ±0.59% (91 runs sampled) + + fastest is extglob (by 644% avg) + +``` + +## Differences from Bash + +This library has complete parity with Bash 4.3 with only a couple of minor differences. + +* In some cases Bash returns true if the given string "contains" the pattern, whereas this library returns true if the string is an exact match for the pattern. You can relax this by setting `options.contains` to true. +* This library is more accurate than Bash and thus does not fail some of the tests that Bash 4.3 still lists as failing in their unit tests + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.") +* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") +* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by [micromatch].") +* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 49 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [isiahmeadows](https://github.com/isiahmeadows) | +| 1 | [doowb](https://github.com/doowb) | +| 1 | [devongovett](https://github.com/devongovett) | +| 1 | [mjbvz](https://github.com/mjbvz) | +| 1 | [shinnn](https://github.com/shinnn) | + +### Author + +**Jon Schlinkert** + +* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on December 21, 2017._ + +
+
+
    +
  1. `@` isn "'t a RegEx character." + +
  2. +
+
\ No newline at end of file diff --git a/.pnpm-store/v11/files/2c/0e14d79cb3b3a8b88a8947c04d20d06c51b01e21e6543b829d250c6367f4a0a71a8eb86594d0e8cfa1dcaaa03a93bbcb561a6c19b82281cafa179f01f284d6 b/.pnpm-store/v11/files/2c/0e14d79cb3b3a8b88a8947c04d20d06c51b01e21e6543b829d250c6367f4a0a71a8eb86594d0e8cfa1dcaaa03a93bbcb561a6c19b82281cafa179f01f284d6 new file mode 100644 index 00000000..ea203a0f --- /dev/null +++ b/.pnpm-store/v11/files/2c/0e14d79cb3b3a8b88a8947c04d20d06c51b01e21e6543b829d250c6367f4a0a71a8eb86594d0e8cfa1dcaaa03a93bbcb561a6c19b82281cafa179f01f284d6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unset', require('../unset')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2c/104dd100904cafdbf132d22c073855a2aeafe9eb0c57db102790a6e3afcd203f4b9630629f7b8d81cdc322fcadd6ae43a39305cdc109d8d24f8dee31d35ecb b/.pnpm-store/v11/files/2c/104dd100904cafdbf132d22c073855a2aeafe9eb0c57db102790a6e3afcd203f4b9630629f7b8d81cdc322fcadd6ae43a39305cdc109d8d24f8dee31d35ecb new file mode 100644 index 00000000..64015cb9 --- /dev/null +++ b/.pnpm-store/v11/files/2c/104dd100904cafdbf132d22c073855a2aeafe9eb0c57db102790a6e3afcd203f4b9630629f7b8d81cdc322fcadd6ae43a39305cdc109d8d24f8dee31d35ecb @@ -0,0 +1,83 @@ +# object-visit [![NPM version](https://img.shields.io/npm/v/object-visit.svg?style=flat)](https://www.npmjs.com/package/object-visit) [![NPM monthly downloads](https://img.shields.io/npm/dm/object-visit.svg?style=flat)](https://npmjs.org/package/object-visit) [![NPM total downloads](https://img.shields.io/npm/dt/object-visit.svg?style=flat)](https://npmjs.org/package/object-visit) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object-visit.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object-visit) + +> Call a specified method on each value in the given object. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save object-visit +``` + +## Usage + +```js +var visit = require('object-visit'); + +var ctx = { + data: {}, + set: function (key, value) { + if (typeof key === 'object') { + visit(ctx, 'set', key); + } else { + ctx.data[key] = value; + } + } +}; + +ctx.set('a', 'a'); +ctx.set('b', 'b'); +ctx.set('c', 'c'); +ctx.set({d: {e: 'f'}}); + +console.log(ctx.data); +//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }}; +``` + +## About + +### Related projects + +* [base-methods](https://www.npmjs.com/package/base-methods): base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/jonschlinkert/base-methods) | [homepage](https://github.com/jonschlinkert/base-methods "base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.") +* [collection-visit](https://www.npmjs.com/package/collection-visit): Visit a method over the items in an object, or map visit over the objects… [more](https://github.com/jonschlinkert/collection-visit) | [homepage](https://github.com/jonschlinkert/collection-visit "Visit a method over the items in an object, or map visit over the objects in an array.") +* [define-property](https://www.npmjs.com/package/define-property): Define a non-enumerable property on an object. | [homepage](https://github.com/jonschlinkert/define-property "Define a non-enumerable property on an object.") +* [map-visit](https://www.npmjs.com/package/map-visit): Map `visit` over an array of objects. | [homepage](https://github.com/jonschlinkert/map-visit "Map `visit` over an array of objects.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 30, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/2c/138e65cee140e05e32d365773a491d4443116231075a6b7860ba66ab432871eeeb047d87774c44b42aaca663902dd8e75af545d741d0456ca3a86f27105249 b/.pnpm-store/v11/files/2c/138e65cee140e05e32d365773a491d4443116231075a6b7860ba66ab432871eeeb047d87774c44b42aaca663902dd8e75af545d741d0456ca3a86f27105249 new file mode 100644 index 00000000..7200a623 Binary files /dev/null and b/.pnpm-store/v11/files/2c/138e65cee140e05e32d365773a491d4443116231075a6b7860ba66ab432871eeeb047d87774c44b42aaca663902dd8e75af545d741d0456ca3a86f27105249 differ diff --git a/.pnpm-store/v11/files/2c/2aa8b732cd825c6020c3feb28d7db8815621b63b6cdee2ee7657bed75665a3d35877098c0679d9b22051d3f1b27b2c561153ad45593779408bbc1beb98781e b/.pnpm-store/v11/files/2c/2aa8b732cd825c6020c3feb28d7db8815621b63b6cdee2ee7657bed75665a3d35877098c0679d9b22051d3f1b27b2c561153ad45593779408bbc1beb98781e new file mode 100644 index 00000000..75cdc699 --- /dev/null +++ b/.pnpm-store/v11/files/2c/2aa8b732cd825c6020c3feb28d7db8815621b63b6cdee2ee7657bed75665a3d35877098c0679d9b22051d3f1b27b2c561153ad45593779408bbc1beb98781e @@ -0,0 +1,16 @@ + +# socket.io-adapter + +Default socket.io in-memory adapter class. + +## How to use + +This module is not intended for end-user usage, but can be used as an +interface to inherit from other adapters you might want to build. + +As an example of an adapter that builds on top of this, please take a look +at [socket.io-redis](https://github.com/learnboost/socket.io-redis). + +## License + +MIT diff --git a/.pnpm-store/v11/files/2c/3c9aeeeab44d986254e65584de6cb3c18ab65fdb354e8a4893ddfa60a9beb5927d7a6507bf2117ea1f0eb83ec773d9378991dcf6493cebe889b6255561f790 b/.pnpm-store/v11/files/2c/3c9aeeeab44d986254e65584de6cb3c18ab65fdb354e8a4893ddfa60a9beb5927d7a6507bf2117ea1f0eb83ec773d9378991dcf6493cebe889b6255561f790 new file mode 100644 index 00000000..4425fbe8 --- /dev/null +++ b/.pnpm-store/v11/files/2c/3c9aeeeab44d986254e65584de6cb3c18ab65fdb354e8a4893ddfa60a9beb5927d7a6507bf2117ea1f0eb83ec773d9378991dcf6493cebe889b6255561f790 @@ -0,0 +1,29 @@ +var baseClone = require('./_baseClone'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1, + CLONE_SYMBOLS_FLAG = 4; + +/** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ +function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); +} + +module.exports = cloneDeep; diff --git a/.pnpm-store/v11/files/2c/449fde93474c32ad58f1dfe3a9adba7aa347643ae70e1cfb9e42edfd8e9966503fda90dc2693c246ee4b138625cf0108fcfe13a2bc7261d8071920353890e3 b/.pnpm-store/v11/files/2c/449fde93474c32ad58f1dfe3a9adba7aa347643ae70e1cfb9e42edfd8e9966503fda90dc2693c246ee4b138625cf0108fcfe13a2bc7261d8071920353890e3 new file mode 100644 index 00000000..8c34072f --- /dev/null +++ b/.pnpm-store/v11/files/2c/449fde93474c32ad58f1dfe3a9adba7aa347643ae70e1cfb9e42edfd8e9966503fda90dc2693c246ee4b138625cf0108fcfe13a2bc7261d8071920353890e3 @@ -0,0 +1,34 @@ +/*! + * chai + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +module.exports = function (chai, util) { + chai.expect = function (val, message) { + return new chai.Assertion(val, message); + }; + + /** + * ### .fail(actual, expected, [message], [operator]) + * + * Throw a failure. + * + * @name fail + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @param {String} operator + * @namespace BDD + * @api public + */ + + chai.expect.fail = function (actual, expected, message, operator) { + message = message || 'expect.fail()'; + throw new chai.AssertionError(message, { + actual: actual + , expected: expected + , operator: operator + }, chai.expect.fail); + }; +}; diff --git a/.pnpm-store/v11/files/2c/47607ccfb0593720e630c239604bee92bc2890a674cdeff6f475e8bc62d54976992f410b77e118caf7fb58d385debe9eb0ec1631e934d96160d9222fa98326 b/.pnpm-store/v11/files/2c/47607ccfb0593720e630c239604bee92bc2890a674cdeff6f475e8bc62d54976992f410b77e118caf7fb58d385debe9eb0ec1631e934d96160d9222fa98326 new file mode 100644 index 00000000..ef60c613 --- /dev/null +++ b/.pnpm-store/v11/files/2c/47607ccfb0593720e630c239604bee92bc2890a674cdeff6f475e8bc62d54976992f410b77e118caf7fb58d385debe9eb0ec1631e934d96160d9222fa98326 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2c/4ecb4f0cf9894aab4e30a7c4a817e6ba8eafe014b24b6faf0eb60830e4341e57e9aa6ad121ebfc25b1f66f0367a882998b02f9c7a20acae369cea6b601b4f0 b/.pnpm-store/v11/files/2c/4ecb4f0cf9894aab4e30a7c4a817e6ba8eafe014b24b6faf0eb60830e4341e57e9aa6ad121ebfc25b1f66f0367a882998b02f9c7a20acae369cea6b601b4f0 new file mode 100644 index 00000000..1e5aae50 --- /dev/null +++ b/.pnpm-store/v11/files/2c/4ecb4f0cf9894aab4e30a7c4a817e6ba8eafe014b24b6faf0eb60830e4341e57e9aa6ad121ebfc25b1f66f0367a882998b02f9c7a20acae369cea6b601b4f0 @@ -0,0 +1,16 @@ +var baseGet = require('./_baseGet'); + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +module.exports = basePropertyDeep; diff --git a/.pnpm-store/v11/files/2c/53d72e0c249366e281efebc7b498eba264778e2324cc4c582a703e49c2645f8e27c346c48ed25aa0ba92657cbd640149dfa07e6378c290d715e777423fbd57 b/.pnpm-store/v11/files/2c/53d72e0c249366e281efebc7b498eba264778e2324cc4c582a703e49c2645f8e27c346c48ed25aa0ba92657cbd640149dfa07e6378c290d715e777423fbd57 new file mode 100644 index 00000000..83b56e70 --- /dev/null +++ b/.pnpm-store/v11/files/2c/53d72e0c249366e281efebc7b498eba264778e2324cc4c582a703e49c2645f8e27c346c48ed25aa0ba92657cbd640149dfa07e6378c290d715e777423fbd57 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/2c/57b35e0ff1b63c3fae2a1af330fad4753aac1f4af3e6d468d589c21ee4a6bc6a47b5efedfda9466a902c7d3fcadbed063c79aab0d0f1a6bb91c6ab203be489 b/.pnpm-store/v11/files/2c/57b35e0ff1b63c3fae2a1af330fad4753aac1f4af3e6d468d589c21ee4a6bc6a47b5efedfda9466a902c7d3fcadbed063c79aab0d0f1a6bb91c6ab203be489 new file mode 100644 index 00000000..88ab55fd --- /dev/null +++ b/.pnpm-store/v11/files/2c/57b35e0ff1b63c3fae2a1af330fad4753aac1f4af3e6d468d589c21ee4a6bc6a47b5efedfda9466a902c7d3fcadbed063c79aab0d0f1a6bb91c6ab203be489 @@ -0,0 +1,26 @@ +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +module.exports = isArray; diff --git a/.pnpm-store/v11/files/2c/6ae8ba4b7dd20a824a6eaaae76092f2e6f64e958a7952b045865ec61fbbedfea648e9293422c51e1acd83e2aa7018aba7e5900d1e06dacd643b4c1908978da b/.pnpm-store/v11/files/2c/6ae8ba4b7dd20a824a6eaaae76092f2e6f64e958a7952b045865ec61fbbedfea648e9293422c51e1acd83e2aa7018aba7e5900d1e06dacd643b4c1908978da new file mode 100644 index 00000000..e96791ab --- /dev/null +++ b/.pnpm-store/v11/files/2c/6ae8ba4b7dd20a824a6eaaae76092f2e6f64e958a7952b045865ec61fbbedfea648e9293422c51e1acd83e2aa7018aba7e5900d1e06dacd643b4c1908978da @@ -0,0 +1,8 @@ +var v1 = require('./v1'); +var v4 = require('./v4'); + +var uuid = v4; +uuid.v1 = v1; +uuid.v4 = v4; + +module.exports = uuid; diff --git a/.pnpm-store/v11/files/2c/6fa55cc6f4de0d9aa363197784fd251a1e53f7478181fda605c65d3683b5200026c878f756ba102b4ca3a827b0a05de15f0feadc64f09ed1a55ccdb18d0d05 b/.pnpm-store/v11/files/2c/6fa55cc6f4de0d9aa363197784fd251a1e53f7478181fda605c65d3683b5200026c878f756ba102b4ca3a827b0a05de15f0feadc64f09ed1a55ccdb18d0d05 new file mode 100644 index 00000000..e3a3c1a3 --- /dev/null +++ b/.pnpm-store/v11/files/2c/6fa55cc6f4de0d9aa363197784fd251a1e53f7478181fda605c65d3683b5200026c878f756ba102b4ca3a827b0a05de15f0feadc64f09ed1a55ccdb18d0d05 @@ -0,0 +1,45 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface String { + /** + * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. + * The padding is applied from the start (left) of the current string. + * + * @param maxLength The length of the resulting string once the current string has been padded. + * If this parameter is smaller than the current string's length, the current string will be returned as it is. + * + * @param fillString The string to pad the current string with. + * If this string is too long, it will be truncated and the left-most part will be applied. + * The default value for this parameter is " " (U+0020). + */ + padStart(maxLength: number, fillString?: string): string; + + /** + * Pads the current string with a given string (possibly repeated) so that the resulting string reaches a given length. + * The padding is applied from the end (right) of the current string. + * + * @param maxLength The length of the resulting string once the current string has been padded. + * If this parameter is smaller than the current string's length, the current string will be returned as it is. + * + * @param fillString The string to pad the current string with. + * If this string is too long, it will be truncated and the left-most part will be applied. + * The default value for this parameter is " " (U+0020). + */ + padEnd(maxLength: number, fillString?: string): string; +} diff --git a/.pnpm-store/v11/files/2c/74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b b/.pnpm-store/v11/files/2c/74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b new file mode 100644 index 00000000..5e1c309d --- /dev/null +++ b/.pnpm-store/v11/files/2c/74fd17edafd80e8447b0d46741ee243b7eb74dd2149a0ab1b9246fb30382f27e853d8585719e0e67cbda0daa8f51671064615d645ae27acb15bfb1447f459b @@ -0,0 +1 @@ +Hello World \ No newline at end of file diff --git a/.pnpm-store/v11/files/2c/79c685eecfee42f23139cffe9805e4db74f65979b9509f9c689200f7f575fc4f73730e3023ec9de6030b2abeb04370d3dafff10fdf33a100a730e315e4b2f5 b/.pnpm-store/v11/files/2c/79c685eecfee42f23139cffe9805e4db74f65979b9509f9c689200f7f575fc4f73730e3023ec9de6030b2abeb04370d3dafff10fdf33a100a730e315e4b2f5 new file mode 100644 index 00000000..e4c4e738 --- /dev/null +++ b/.pnpm-store/v11/files/2c/79c685eecfee42f23139cffe9805e4db74f65979b9509f9c689200f7f575fc4f73730e3023ec9de6030b2abeb04370d3dafff10fdf33a100a730e315e4b2f5 @@ -0,0 +1,79 @@ +{ + "name": "snapdragon", + "description": "Fast, pluggable and easy-to-use parser-renderer factory.", + "version": "0.8.2", + "homepage": "https://github.com/jonschlinkert/snapdragon", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Edward Betts (http://edwardbetts.com)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)" + ], + "repository": "jonschlinkert/snapdragon", + "bugs": { + "url": "https://github.com/jonschlinkert/snapdragon/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "devDependencies": { + "gulp": "^3.9.1", + "gulp-eslint": "^3.0.1", + "gulp-format-md": "^0.1.10", + "gulp-istanbul": "^1.1.1", + "gulp-mocha": "^3.0.1", + "gulp-unused": "^0.2.0", + "mocha": "^3.0.2" + }, + "keywords": [ + "lexer", + "snapdragon" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "description": "These libraries use snapdragon:", + "list": [ + "braces", + "expand-brackets", + "extglob", + "micromatch" + ] + }, + "reflinks": [ + "css", + "pug", + "verb", + "verb-generate-readme" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/2c/95cb103bff7c2f80b0a402adcd9b99ba123df000842ec907bdcd11b7fe7ecbd1666f60782586588c0ce96381327b2516aa0de570cc281c52da7018d68824d2 b/.pnpm-store/v11/files/2c/95cb103bff7c2f80b0a402adcd9b99ba123df000842ec907bdcd11b7fe7ecbd1666f60782586588c0ce96381327b2516aa0de570cc281c52da7018d68824d2 new file mode 100644 index 00000000..85679538 --- /dev/null +++ b/.pnpm-store/v11/files/2c/95cb103bff7c2f80b0a402adcd9b99ba123df000842ec907bdcd11b7fe7ecbd1666f60782586588c0ce96381327b2516aa0de570cc281c52da7018d68824d2 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2c/a925a786ec17080651d3eecfe293be048d764c8b5495ea29cde50719fcd591a9c5ee97f8800a5b4f106a8f7a6f1503888d9c12c973e07f3d9a2a3c77638a2b b/.pnpm-store/v11/files/2c/a925a786ec17080651d3eecfe293be048d764c8b5495ea29cde50719fcd591a9c5ee97f8800a5b4f106a8f7a6f1503888d9c12c973e07f3d9a2a3c77638a2b new file mode 100644 index 00000000..eef0ae44 --- /dev/null +++ b/.pnpm-store/v11/files/2c/a925a786ec17080651d3eecfe293be048d764c8b5495ea29cde50719fcd591a9c5ee97f8800a5b4f106a8f7a6f1503888d9c12c973e07f3d9a2a3c77638a2b @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').pickSeries; diff --git a/.pnpm-store/v11/files/2c/bc3c803b1627265262f9de7776189eff83db77631c71f40c72079cfbb9c86d6e12c399199bda2581469a208842c57f412a567b403643b88e7b2b7ab518c874-exec b/.pnpm-store/v11/files/2c/bc3c803b1627265262f9de7776189eff83db77631c71f40c72079cfbb9c86d6e12c399199bda2581469a208842c57f412a567b403643b88e7b2b7ab518c874-exec new file mode 100755 index 00000000..f02685ec --- /dev/null +++ b/.pnpm-store/v11/files/2c/bc3c803b1627265262f9de7776189eff83db77631c71f40c72079cfbb9c86d6e12c399199bda2581469a208842c57f412a567b403643b88e7b2b7ab518c874-exec @@ -0,0 +1,31 @@ +{ + "name": "log-prepend", + "version": "0.0.1010", + "description": "Prepend a string to each line of console output", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "types": "dist/index.d.ts", + "scripts": { + "test": "suman test/logs.js --force-match" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/log-prepend.git" + }, + "keywords": [ + "prepend", + "transform", + "stdout", + "stderr" + ], + "author": "Olegzandr VD", + "license": "ISC", + "bugs": { + "url": "https://github.com/ORESoftware/log-prepend/issues" + }, + "homepage": "https://github.com/ORESoftware/log-prepend#readme", + "devDependencies": { + "@types/core-js": "^0.9.43", + "@types/node": "^8.0.26" + } +} diff --git a/.pnpm-store/v11/files/2c/e35ded0f713f9c8fea2f0230608a6aa5bd91179e982c859aef428d5e1e22ca54a3e228dd42ba6bd07c6a25edf5fd4d70814d8ade98560b418d91b69bf3ced1 b/.pnpm-store/v11/files/2c/e35ded0f713f9c8fea2f0230608a6aa5bd91179e982c859aef428d5e1e22ca54a3e228dd42ba6bd07c6a25edf5fd4d70814d8ade98560b418d91b69bf3ced1 new file mode 100644 index 00000000..e1d66c86 --- /dev/null +++ b/.pnpm-store/v11/files/2c/e35ded0f713f9c8fea2f0230608a6aa5bd91179e982c859aef428d5e1e22ca54a3e228dd42ba6bd07c6a25edf5fd4d70814d8ade98560b418d91b69bf3ced1 @@ -0,0 +1,59 @@ +{ + "name": "socket.io", + "version": "2.5.1", + "description": "node.js realtime framework server", + "keywords": [ + "realtime", + "framework", + "websocket", + "tcp", + "events", + "socket", + "io" + ], + "main": "./lib/index", + "files": [ + "lib/" + ], + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/socketio/socket.io" + }, + "scripts": { + "test": "nyc mocha --reporter spec --slow 200 --bail --timeout 10000 test/socket.io.js" + }, + "dependencies": { + "debug": "~4.1.0", + "engine.io": "~3.6.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.5.0", + "socket.io-parser": "~3.4.0" + }, + "devDependencies": { + "expect.js": "0.3.1", + "mocha": "^3.5.3", + "nyc": "^11.2.1", + "superagent": "^3.8.2", + "supertest": "^3.0.0" + }, + "contributors": [ + { + "name": "Guillermo Rauch", + "email": "rauchg@gmail.com" + }, + { + "name": "Arnout Kazemier", + "email": "info@3rd-eden.com" + }, + { + "name": "Vladimir Dronnikov", + "email": "dronnikov@gmail.com" + }, + { + "name": "Einar Otto Stangvik", + "email": "einaros@gmail.com" + } + ] +} diff --git a/.pnpm-store/v11/files/2c/f37fb17e920c1cf82af05acdde7cd9db09f5e0d502a29bc5d77ab6b528c22b5c77efe8d8fd03736ad6173c26f7442e5b86f15caa3a598f1ba5b8f7831ee517 b/.pnpm-store/v11/files/2c/f37fb17e920c1cf82af05acdde7cd9db09f5e0d502a29bc5d77ab6b528c22b5c77efe8d8fd03736ad6173c26f7442e5b86f15caa3a598f1ba5b8f7831ee517 new file mode 100644 index 00000000..5fd58315 --- /dev/null +++ b/.pnpm-store/v11/files/2c/f37fb17e920c1cf82af05acdde7cd9db09f5e0d502a29bc5d77ab6b528c22b5c77efe8d8fd03736ad6173c26f7442e5b86f15caa3a598f1ba5b8f7831ee517 @@ -0,0 +1,47 @@ +# string_decoder + +***Node-core v8.9.4 string_decoder for userland*** + + +[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) +[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) + + +```bash +npm install --save string_decoder +``` + +***Node-core string_decoder for userland*** + +This package is a mirror of the string_decoder implementation in Node-core. + +Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/). + +As of version 1.0.0 **string_decoder** uses semantic versioning. + +## Previous versions + +Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. + +## Update + +The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. + +## Streams Working Group + +`string_decoder` is maintained by the Streams Working Group, which +oversees the development and maintenance of the Streams API within +Node.js. The responsibilities of the Streams Working Group include: + +* Addressing stream issues on the Node.js issue tracker. +* Authoring and editing stream documentation within the Node.js project. +* Reviewing changes to stream subclasses within the Node.js project. +* Redirecting changes to streams from the Node.js project to this + project. +* Assisting in the implementation of stream providers within Node.js. +* Recommending versions of `readable-stream` to be included in Node.js. +* Messaging about the future of streams to give the community advance + notice of changes. + +See [readable-stream](https://github.com/nodejs/readable-stream) for +more details. diff --git a/.pnpm-store/v11/files/2d/024ea96d6940391f63a0fd496fd55231f66b6909f1d6dc2f75a7f0b0ea55b0186a63a6f58f3a42284774e554e3dd73c986fb8eec9da6c5e14b344415bb5b71 b/.pnpm-store/v11/files/2d/024ea96d6940391f63a0fd496fd55231f66b6909f1d6dc2f75a7f0b0ea55b0186a63a6f58f3a42284774e554e3dd73c986fb8eec9da6c5e14b344415bb5b71 new file mode 100644 index 00000000..cb7ba412 --- /dev/null +++ b/.pnpm-store/v11/files/2d/024ea96d6940391f63a0fd496fd55231f66b6909f1d6dc2f75a7f0b0ea55b0186a63a6f58f3a42284774e554e3dd73c986fb8eec9da6c5e14b344415bb5b71 @@ -0,0 +1,583 @@ + +/** + * Module dependencies. + */ + +var Emitter = require('events').EventEmitter; +var parser = require('socket.io-parser'); +var hasBin = require('has-binary2'); +var url = require('url'); +var debug = require('debug')('socket.io:socket'); + +/** + * Module exports. + */ + +module.exports = exports = Socket; + +/** + * Blacklisted events. + * + * @api public + */ + +exports.events = [ + 'error', + 'connect', + 'disconnect', + 'disconnecting', + 'newListener', + 'removeListener' +]; + +/** + * Flags. + * + * @api private + */ + +var flags = [ + 'json', + 'volatile', + 'broadcast', + 'local' +]; + +/** + * `EventEmitter#emit` reference. + */ + +var emit = Emitter.prototype.emit; + +function noop() {} + +/** + * Interface to a `Client` for a given `Namespace`. + * + * @param {Namespace} nsp + * @param {Client} client + * @api public + */ + +function Socket(nsp, client, query){ + this.nsp = nsp; + this.server = nsp.server; + this.adapter = this.nsp.adapter; + this.id = nsp.name !== '/' ? nsp.name + '#' + client.id : client.id; + this.client = client; + this.conn = client.conn; + this.rooms = {}; + this.acks = {}; + this.connected = false; + this.disconnected = true; + this.handshake = this.buildHandshake(query); + this.fns = []; + this.flags = {}; + this._rooms = []; + + // prevents crash when the socket receives an "error" event without listener + this.on('error', noop); +} + +/** + * Inherits from `EventEmitter`. + */ + +Socket.prototype.__proto__ = Emitter.prototype; + +/** + * Apply flags from `Socket`. + */ + +flags.forEach(function(flag){ + Object.defineProperty(Socket.prototype, flag, { + get: function() { + this.flags[flag] = true; + return this; + } + }); +}); + +/** + * `request` engine.io shortcut. + * + * @api public + */ + +Object.defineProperty(Socket.prototype, 'request', { + get: function() { + return this.conn.request; + } +}); + +/** + * Builds the `handshake` BC object + * + * @api private + */ + +Socket.prototype.buildHandshake = function(query){ + var self = this; + function buildQuery(){ + var requestQuery = url.parse(self.request.url, true).query; + //if socket-specific query exist, replace query strings in requestQuery + return Object.assign({}, requestQuery, query); + } + return { + headers: this.request.headers, + time: (new Date) + '', + address: this.conn.remoteAddress, + xdomain: !!this.request.headers.origin, + secure: !!this.request.connection.encrypted, + issued: +(new Date), + url: this.request.url, + query: buildQuery() + }; +}; + +/** + * Emits to this client. + * + * @return {Socket} self + * @api public + */ + +Socket.prototype.emit = function(ev){ + if (~exports.events.indexOf(ev)) { + emit.apply(this, arguments); + return this; + } + + var args = Array.prototype.slice.call(arguments); + var packet = { + type: (this.flags.binary !== undefined ? this.flags.binary : hasBin(args)) ? parser.BINARY_EVENT : parser.EVENT, + data: args + }; + + // access last argument to see if it's an ACK callback + if (typeof args[args.length - 1] === 'function') { + if (this._rooms.length || this.flags.broadcast) { + throw new Error('Callbacks are not supported when broadcasting'); + } + + debug('emitting packet with ack id %d', this.nsp.ids); + this.acks[this.nsp.ids] = args.pop(); + packet.id = this.nsp.ids++; + } + + var rooms = this._rooms.slice(0); + var flags = Object.assign({}, this.flags); + + // reset flags + this._rooms = []; + this.flags = {}; + + if (rooms.length || flags.broadcast) { + this.adapter.broadcast(packet, { + except: [this.id], + rooms: rooms, + flags: flags + }); + } else { + // dispatch packet + this.packet(packet, flags); + } + return this; +}; + +/** + * Targets a room when broadcasting. + * + * @param {String} name + * @return {Socket} self + * @api public + */ + +Socket.prototype.to = +Socket.prototype.in = function(name){ + if (!~this._rooms.indexOf(name)) this._rooms.push(name); + return this; +}; + +/** + * Sends a `message` event. + * + * @return {Socket} self + * @api public + */ + +Socket.prototype.send = +Socket.prototype.write = function(){ + var args = Array.prototype.slice.call(arguments); + args.unshift('message'); + this.emit.apply(this, args); + return this; +}; + +/** + * Writes a packet. + * + * @param {Object} packet object + * @param {Object} opts options + * @api private + */ + +Socket.prototype.packet = function(packet, opts){ + packet.nsp = this.nsp.name; + opts = opts || {}; + opts.compress = false !== opts.compress; + this.client.packet(packet, opts); +}; + +/** + * Joins a room. + * + * @param {String|Array} room or array of rooms + * @param {Function} fn optional, callback + * @return {Socket} self + * @api private + */ + +Socket.prototype.join = function(rooms, fn){ + debug('joining room %s', rooms); + var self = this; + if (!Array.isArray(rooms)) { + rooms = [rooms]; + } + rooms = rooms.filter(function (room) { + return !self.rooms.hasOwnProperty(room); + }); + if (!rooms.length) { + fn && fn(null); + return this; + } + this.adapter.addAll(this.id, rooms, function(err){ + if (err) return fn && fn(err); + debug('joined room %s', rooms); + rooms.forEach(function (room) { + self.rooms[room] = room; + }); + fn && fn(null); + }); + return this; +}; + +/** + * Leaves a room. + * + * @param {String} room + * @param {Function} fn optional, callback + * @return {Socket} self + * @api private + */ + +Socket.prototype.leave = function(room, fn){ + debug('leave room %s', room); + var self = this; + this.adapter.del(this.id, room, function(err){ + if (err) return fn && fn(err); + debug('left room %s', room); + delete self.rooms[room]; + fn && fn(null); + }); + return this; +}; + +/** + * Leave all rooms. + * + * @api private + */ + +Socket.prototype.leaveAll = function(){ + this.adapter.delAll(this.id); + this.rooms = {}; +}; + +/** + * Called by `Namespace` upon successful + * middleware execution (ie: authorization). + * Socket is added to namespace array before + * call to join, so adapters can access it. + * + * @api private + */ + +Socket.prototype.onconnect = function(){ + debug('socket connected - writing packet'); + this.connected = true; + this.disconnected = false; + this.nsp.connected[this.id] = this; + this.join(this.id); + var skip = this.nsp.name === '/' && this.nsp.fns.length === 0; + if (skip) { + debug('packet already sent in initial handshake'); + } else { + this.packet({ type: parser.CONNECT }); + } +}; + +/** + * Called with each packet. Called by `Client`. + * + * @param {Object} packet + * @api private + */ + +Socket.prototype.onpacket = function(packet){ + debug('got packet %j', packet); + switch (packet.type) { + case parser.EVENT: + this.onevent(packet); + break; + + case parser.BINARY_EVENT: + this.onevent(packet); + break; + + case parser.ACK: + this.onack(packet); + break; + + case parser.BINARY_ACK: + this.onack(packet); + break; + + case parser.DISCONNECT: + this.ondisconnect(); + break; + + case parser.ERROR: + this.onerror(new Error(packet.data)); + } +}; + +/** + * Called upon event packet. + * + * @param {Object} packet object + * @api private + */ + +Socket.prototype.onevent = function(packet){ + var args = packet.data || []; + debug('emitting event %j', args); + + if (null != packet.id) { + debug('attaching ack callback to event'); + args.push(this.ack(packet.id)); + } + + this.dispatch(args); +}; + +/** + * Produces an ack callback to emit with an event. + * + * @param {Number} id packet id + * @api private + */ + +Socket.prototype.ack = function(id){ + var self = this; + var sent = false; + return function(){ + // prevent double callbacks + if (sent) return; + var args = Array.prototype.slice.call(arguments); + debug('sending ack %j', args); + + self.packet({ + id: id, + type: hasBin(args) ? parser.BINARY_ACK : parser.ACK, + data: args + }); + + sent = true; + }; +}; + +/** + * Called upon ack packet. + * + * @api private + */ + +Socket.prototype.onack = function(packet){ + var ack = this.acks[packet.id]; + if ('function' == typeof ack) { + debug('calling ack %s with %j', packet.id, packet.data); + ack.apply(this, packet.data); + delete this.acks[packet.id]; + } else { + debug('bad ack %s', packet.id); + } +}; + +/** + * Called upon client disconnect packet. + * + * @api private + */ + +Socket.prototype.ondisconnect = function(){ + debug('got disconnect packet'); + this.onclose('client namespace disconnect'); +}; + +/** + * Handles a client error. + * + * @api private + */ + +Socket.prototype.onerror = function(err){ + this.emit('error', err); +}; + +/** + * Called upon closing. Called by `Client`. + * + * @param {String} reason + * @throw {Error} optional error object + * @api private + */ + +Socket.prototype.onclose = function(reason){ + if (!this.connected) return this; + debug('closing socket - reason %s', reason); + this.emit('disconnecting', reason); + this._cleanup(); + this.nsp.remove(this); + this.client.remove(this); + this.connected = false; + this.disconnected = true; + delete this.nsp.connected[this.id]; + this.emit('disconnect', reason); +}; + +/** + * Produces an `error` packet. + * + * @param {Object} err error object + * @api private + */ + +Socket.prototype.error = function(err){ + this.packet({ type: parser.ERROR, data: err }); +}; + +/** + * Disconnects this client. + * + * @param {Boolean} close if `true`, closes the underlying connection + * @return {Socket} self + * @api public + */ + +Socket.prototype.disconnect = function(close){ + if (!this.connected) return this; + if (close) { + this.client.disconnect(); + } else { + this.packet({ type: parser.DISCONNECT }); + this.onclose('server namespace disconnect'); + } + return this; +}; + +/** + * Sets the compress flag. + * + * @param {Boolean} compress if `true`, compresses the sending data + * @return {Socket} self + * @api public + */ + +Socket.prototype.compress = function(compress){ + this.flags.compress = compress; + return this; +}; + +/** + * Sets the binary flag + * + * @param {Boolean} Encode as if it has binary data if `true`, Encode as if it doesnt have binary data if `false` + * @return {Socket} self + * @api public + */ + + Socket.prototype.binary = function (binary) { + this.flags.binary = binary; + return this; + }; + +/** + * Dispatch incoming event to socket listeners. + * + * @param {Array} event that will get emitted + * @api private + */ + +Socket.prototype.dispatch = function(event){ + debug('dispatching an event %j', event); + var self = this; + function dispatchSocket(err) { + process.nextTick(function(){ + if (err) { + return self.error(err.data || err.message); + } + if (self.connected) { + emit.apply(self, event); + } else { + debug("ignore packet received after disconnection"); + } + }); + } + this.run(event, dispatchSocket); +}; + +/** + * Sets up socket middleware. + * + * @param {Function} middleware function (event, next) + * @return {Socket} self + * @api public + */ + +Socket.prototype.use = function(fn){ + this.fns.push(fn); + return this; +}; + +/** + * Executes the middleware for an incoming event. + * + * @param {Array} event that will get emitted + * @param {Function} last fn call in the middleware + * @api private + */ +Socket.prototype.run = function(event, fn){ + var fns = this.fns.slice(0); + if (!fns.length) return fn(null); + + function run(i){ + fns[i](event, function(err){ + // upon error, short-circuit + if (err) return fn(err); + + // if no middleware left, summon callback + if (!fns[i + 1]) return fn(null); + + // go on to next + run(i + 1); + }); + } + + run(0); +}; + +Socket.prototype._cleanup = function () { + this.leaveAll(); + this.join = function noop() {}; +} diff --git a/.pnpm-store/v11/files/2d/35c78becf42b6c73f74edf63dffb2411add92fe0f9fd14181f20ef96f477c02b65d8fb337298efc8c4946c5a60dfb6cc0d0e0b023ff0407ef0851523e2a46f b/.pnpm-store/v11/files/2d/35c78becf42b6c73f74edf63dffb2411add92fe0f9fd14181f20ef96f477c02b65d8fb337298efc8c4946c5a60dfb6cc0d0e0b023ff0407ef0851523e2a46f new file mode 100644 index 00000000..47685664 --- /dev/null +++ b/.pnpm-store/v11/files/2d/35c78becf42b6c73f74edf63dffb2411add92fe0f9fd14181f20ef96f477c02b65d8fb337298efc8c4946c5a60dfb6cc0d0e0b023ff0407ef0851523e2a46f @@ -0,0 +1,18 @@ +/** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ +function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; +} + +module.exports = iteratorToArray; diff --git a/.pnpm-store/v11/files/2d/6d4bd4e810e251d7410a281a359ec5e66e69d87579d9832262182b37db08b4e2c85db372e463b117694f050a230ac69fb8a3965a69d397a693970a13acb008 b/.pnpm-store/v11/files/2d/6d4bd4e810e251d7410a281a359ec5e66e69d87579d9832262182b37db08b4e2c85db372e463b117694f050a230ac69fb8a3965a69d397a693970a13acb008 new file mode 100644 index 00000000..ff149754 --- /dev/null +++ b/.pnpm-store/v11/files/2d/6d4bd4e810e251d7410a281a359ec5e66e69d87579d9832262182b37db08b4e2c85db372e463b117694f050a230ac69fb8a3965a69d397a693970a13acb008 @@ -0,0 +1,50 @@ +{ + "name": "brace-expansion", + "description": "Brace expansion as known from sh/bash", + "version": "1.1.14", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/brace-expansion.git" + }, + "homepage": "https://github.com/juliangruber/brace-expansion", + "main": "index.js", + "scripts": { + "test": "tape test/*.js", + "gentest": "bash test/generate.sh", + "bench": "matcha test/perf/bench.js" + }, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "keywords": [], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "publishConfig": { + "tag": "1.x" + } +} diff --git a/.pnpm-store/v11/files/2d/714f44fd9c0fc7260c885b88403ed87dc2a32be9477f95848595d185fe304d7e158b900188065c21a325f9541c9414619ce0694ddd3ed8c4c13b5568e36a4b b/.pnpm-store/v11/files/2d/714f44fd9c0fc7260c885b88403ed87dc2a32be9477f95848595d185fe304d7e158b900188065c21a325f9541c9414619ce0694ddd3ed8c4c13b5568e36a4b new file mode 100644 index 00000000..271fafc9 --- /dev/null +++ b/.pnpm-store/v11/files/2d/714f44fd9c0fc7260c885b88403ed87dc2a32be9477f95848595d185fe304d7e158b900188065c21a325f9541c9414619ce0694ddd3ed8c4c13b5568e36a4b @@ -0,0 +1,41 @@ +var createRange = require('./_createRange'); + +/** + * This method is like `_.range` except that it populates values in + * descending order. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.range + * @example + * + * _.rangeRight(4); + * // => [3, 2, 1, 0] + * + * _.rangeRight(-4); + * // => [-3, -2, -1, 0] + * + * _.rangeRight(1, 5); + * // => [4, 3, 2, 1] + * + * _.rangeRight(0, 20, 5); + * // => [15, 10, 5, 0] + * + * _.rangeRight(0, -4, -1); + * // => [-3, -2, -1, 0] + * + * _.rangeRight(1, 4, 0); + * // => [1, 1, 1] + * + * _.rangeRight(0); + * // => [] + */ +var rangeRight = createRange(true); + +module.exports = rangeRight; diff --git a/.pnpm-store/v11/files/2d/7f19150382a69808914181917e60ce0bf865b0331a54e44d2dacdfa10d49d5c8f73e602ccad772f0c2c553422d0f7ba34481f702bb3404523c6d432a38ba0f b/.pnpm-store/v11/files/2d/7f19150382a69808914181917e60ce0bf865b0331a54e44d2dacdfa10d49d5c8f73e602ccad772f0c2c553422d0f7ba34481f702bb3404523c6d432a38ba0f new file mode 100644 index 00000000..023077ac --- /dev/null +++ b/.pnpm-store/v11/files/2d/7f19150382a69808914181917e60ce0bf865b0331a54e44d2dacdfa10d49d5c8f73e602ccad772f0c2c553422d0f7ba34481f702bb3404523c6d432a38ba0f @@ -0,0 +1,15 @@ +var shuffleSelf = require('./_shuffleSelf'), + values = require('./values'); + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values(collection)); +} + +module.exports = baseShuffle; diff --git a/.pnpm-store/v11/files/2d/9dc66111a7cb8ee7e584ca25e66b014ee6e5e9e188e5307aac621f849dba24024f30bf591b7d1c55427b73e9e01b64e0be700b6cd36b22570711de80cfc248-exec b/.pnpm-store/v11/files/2d/9dc66111a7cb8ee7e584ca25e66b014ee6e5e9e188e5307aac621f849dba24024f30bf591b7d1c55427b73e9e01b64e0be700b6cd36b22570711de80cfc248-exec new file mode 100755 index 00000000..4a234b98 --- /dev/null +++ b/.pnpm-store/v11/files/2d/9dc66111a7cb8ee7e584ca25e66b014ee6e5e9e188e5307aac621f849dba24024f30bf591b7d1c55427b73e9e01b64e0be700b6cd36b22570711de80cfc248-exec @@ -0,0 +1,56 @@ + + + + + Suman + + + + + + + + + + + + + diff --git a/.pnpm-store/v11/files/2d/a06265fe2718487acd52f7ab57c3db44753137909f233a52c36794e18a3ac671092e0e01dc743fc148bedf645dd06f02c7269cd976d75295e1dbb7698e5fa2 b/.pnpm-store/v11/files/2d/a06265fe2718487acd52f7ab57c3db44753137909f233a52c36794e18a3ac671092e0e01dc743fc148bedf645dd06f02c7269cd976d75295e1dbb7698e5fa2 new file mode 100644 index 00000000..7490136e --- /dev/null +++ b/.pnpm-store/v11/files/2d/a06265fe2718487acd52f7ab57c3db44753137909f233a52c36794e18a3ac671092e0e01dc743fc148bedf645dd06f02c7269cd976d75295e1dbb7698e5fa2 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('size', require('../size'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2d/a1bdcbc4a05de7164422d6e818c7945ab716cceecaff5c60df87126104b7a98b9253e651256a6c55da05c221bd4e2d3536a4e514e243276bc176bae4f35572 b/.pnpm-store/v11/files/2d/a1bdcbc4a05de7164422d6e818c7945ab716cceecaff5c60df87126104b7a98b9253e651256a6c55da05c221bd4e2d3536a4e514e243276bc176bae4f35572 new file mode 100644 index 00000000..146371ed --- /dev/null +++ b/.pnpm-store/v11/files/2d/a1bdcbc4a05de7164422d6e818c7945ab716cceecaff5c60df87126104b7a98b9253e651256a6c55da05c221bd4e2d3536a4e514e243276bc176bae4f35572 @@ -0,0 +1,14 @@ +{ + "env": { + "browser": true, + "node": true + }, + "globals": { + "chrome": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/.pnpm-store/v11/files/2d/aee0b222e2771a580cff09922cfbc94651bff65a1e7791a6a9581ba16d52680dba4d9df3947358a01f2e8f189f074a9dcfecc54da545694570af583dc73f9e b/.pnpm-store/v11/files/2d/aee0b222e2771a580cff09922cfbc94651bff65a1e7791a6a9581ba16d52680dba4d9df3947358a01f2e8f189f074a9dcfecc54da545694570af583dc73f9e new file mode 100644 index 00000000..8bf0af2c --- /dev/null +++ b/.pnpm-store/v11/files/2d/aee0b222e2771a580cff09922cfbc94651bff65a1e7791a6a9581ba16d52680dba4d9df3947358a01f2e8f189f074a9dcfecc54da545694570af583dc73f9e @@ -0,0 +1,59 @@ +{ + "name": "map-cache", + "description": "Basic cache object for storing key-value pairs.", + "version": "0.2.2", + "homepage": "https://github.com/jonschlinkert/map-cache", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/map-cache", + "bugs": { + "url": "https://github.com/jonschlinkert/map-cache/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "gulp-format-md": "^0.1.9", + "should": "^8.3.1" + }, + "keywords": [ + "cache", + "get", + "has", + "object", + "set", + "storage", + "store" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "config-cache", + "option-cache", + "cache-base" + ] + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/2d/b70c0194a06647b424f0b7209afe7751633ed2ea1ff5c24969c41a2d5951e9d013c678bacc1fb300919d18f3a788dc5901f5776d1b620244a1c81fc4705621 b/.pnpm-store/v11/files/2d/b70c0194a06647b424f0b7209afe7751633ed2ea1ff5c24969c41a2d5951e9d013c678bacc1fb300919d18f3a788dc5901f5776d1b620244a1c81fc4705621 new file mode 100644 index 00000000..2c4f4801 --- /dev/null +++ b/.pnpm-store/v11/files/2d/b70c0194a06647b424f0b7209afe7751633ed2ea1ff5c24969c41a2d5951e9d013c678bacc1fb300919d18f3a788dc5901f5776d1b620244a1c81fc4705621 @@ -0,0 +1,486 @@ +module.exports = globSync +globSync.GlobSync = GlobSync + +var rp = require('fs.realpath') +var minimatch = require('minimatch') +var Minimatch = minimatch.Minimatch +var Glob = require('./glob.js').Glob +var util = require('util') +var path = require('path') +var assert = require('assert') +var isAbsolute = require('path-is-absolute') +var common = require('./common.js') +var setopts = common.setopts +var ownProp = common.ownProp +var childrenIgnored = common.childrenIgnored +var isIgnored = common.isIgnored + +function globSync (pattern, options) { + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + return new GlobSync(pattern, options).found +} + +function GlobSync (pattern, options) { + if (!pattern) + throw new Error('must provide pattern') + + if (typeof options === 'function' || arguments.length === 3) + throw new TypeError('callback provided to sync glob\n'+ + 'See: https://github.com/isaacs/node-glob/issues/167') + + if (!(this instanceof GlobSync)) + return new GlobSync(pattern, options) + + setopts(this, pattern, options) + + if (this.noprocess) + return this + + var n = this.minimatch.set.length + this.matches = new Array(n) + for (var i = 0; i < n; i ++) { + this._process(this.minimatch.set[i], i, false) + } + this._finish() +} + +GlobSync.prototype._finish = function () { + assert.ok(this instanceof GlobSync) + if (this.realpath) { + var self = this + this.matches.forEach(function (matchset, index) { + var set = self.matches[index] = Object.create(null) + for (var p in matchset) { + try { + p = self._makeAbs(p) + var real = rp.realpathSync(p, self.realpathCache) + set[real] = true + } catch (er) { + if (er.syscall === 'stat') + set[self._makeAbs(p)] = true + else + throw er + } + } + }) + } + common.finish(this) +} + + +GlobSync.prototype._process = function (pattern, index, inGlobStar) { + assert.ok(this instanceof GlobSync) + + // Get the first [n] parts of pattern that are all strings. + var n = 0 + while (typeof pattern[n] === 'string') { + n ++ + } + // now n is the index of the first one that is *not* a string. + + // See if there's anything else + var prefix + switch (n) { + // if not, then this is rather simple + case pattern.length: + this._processSimple(pattern.join('/'), index) + return + + case 0: + // pattern *starts* with some non-trivial item. + // going to readdir(cwd), but not include the prefix in matches. + prefix = null + break + + default: + // pattern has some string bits in the front. + // whatever it starts with, whether that's 'absolute' like /foo/bar, + // or 'relative' like '../baz' + prefix = pattern.slice(0, n).join('/') + break + } + + var remain = pattern.slice(n) + + // get the list of entries. + var read + if (prefix === null) + read = '.' + else if (isAbsolute(prefix) || + isAbsolute(pattern.map(function (p) { + return typeof p === 'string' ? p : '[*]' + }).join('/'))) { + if (!prefix || !isAbsolute(prefix)) + prefix = '/' + prefix + read = prefix + } else + read = prefix + + var abs = this._makeAbs(read) + + //if ignored, skip processing + if (childrenIgnored(this, read)) + return + + var isGlobStar = remain[0] === minimatch.GLOBSTAR + if (isGlobStar) + this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) + else + this._processReaddir(prefix, read, abs, remain, index, inGlobStar) +} + + +GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { + var entries = this._readdir(abs, inGlobStar) + + // if the abs isn't a dir, then nothing can match! + if (!entries) + return + + // It will only match dot entries if it starts with a dot, or if + // dot is set. Stuff like @(.foo|.bar) isn't allowed. + var pn = remain[0] + var negate = !!this.minimatch.negate + var rawGlob = pn._glob + var dotOk = this.dot || rawGlob.charAt(0) === '.' + + var matchedEntries = [] + for (var i = 0; i < entries.length; i++) { + var e = entries[i] + if (e.charAt(0) !== '.' || dotOk) { + var m + if (negate && !prefix) { + m = !e.match(pn) + } else { + m = e.match(pn) + } + if (m) + matchedEntries.push(e) + } + } + + var len = matchedEntries.length + // If there are no matched entries, then nothing matches. + if (len === 0) + return + + // if this is the last remaining pattern bit, then no need for + // an additional stat *unless* the user has specified mark or + // stat explicitly. We know they exist, since readdir returned + // them. + + if (remain.length === 1 && !this.mark && !this.stat) { + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + if (prefix) { + if (prefix.slice(-1) !== '/') + e = prefix + '/' + e + else + e = prefix + e + } + + if (e.charAt(0) === '/' && !this.nomount) { + e = path.join(this.root, e) + } + this._emitMatch(index, e) + } + // This was the last one, and no stats were needed + return + } + + // now test all matched entries as stand-ins for that part + // of the pattern. + remain.shift() + for (var i = 0; i < len; i ++) { + var e = matchedEntries[i] + var newPattern + if (prefix) + newPattern = [prefix, e] + else + newPattern = [e] + this._process(newPattern.concat(remain), index, inGlobStar) + } +} + + +GlobSync.prototype._emitMatch = function (index, e) { + if (isIgnored(this, e)) + return + + var abs = this._makeAbs(e) + + if (this.mark) + e = this._mark(e) + + if (this.absolute) { + e = abs + } + + if (this.matches[index][e]) + return + + if (this.nodir) { + var c = this.cache[abs] + if (c === 'DIR' || Array.isArray(c)) + return + } + + this.matches[index][e] = true + + if (this.stat) + this._stat(e) +} + + +GlobSync.prototype._readdirInGlobStar = function (abs) { + // follow all symlinked directories forever + // just proceed as if this is a non-globstar situation + if (this.follow) + return this._readdir(abs, false) + + var entries + var lstat + var stat + try { + lstat = this.fs.lstatSync(abs) + } catch (er) { + if (er.code === 'ENOENT') { + // lstat failed, doesn't exist + return null + } + } + + var isSym = lstat && lstat.isSymbolicLink() + this.symlinks[abs] = isSym + + // If it's not a symlink or a dir, then it's definitely a regular file. + // don't bother doing a readdir in that case. + if (!isSym && lstat && !lstat.isDirectory()) + this.cache[abs] = 'FILE' + else + entries = this._readdir(abs, false) + + return entries +} + +GlobSync.prototype._readdir = function (abs, inGlobStar) { + var entries + + if (inGlobStar && !ownProp(this.symlinks, abs)) + return this._readdirInGlobStar(abs) + + if (ownProp(this.cache, abs)) { + var c = this.cache[abs] + if (!c || c === 'FILE') + return null + + if (Array.isArray(c)) + return c + } + + try { + return this._readdirEntries(abs, this.fs.readdirSync(abs)) + } catch (er) { + this._readdirError(abs, er) + return null + } +} + +GlobSync.prototype._readdirEntries = function (abs, entries) { + // if we haven't asked to stat everything, then just + // assume that everything in there exists, so we can avoid + // having to stat it a second time. + if (!this.mark && !this.stat) { + for (var i = 0; i < entries.length; i ++) { + var e = entries[i] + if (abs === '/') + e = abs + e + else + e = abs + '/' + e + this.cache[e] = true + } + } + + this.cache[abs] = entries + + // mark and cache dir-ness + return entries +} + +GlobSync.prototype._readdirError = function (f, er) { + // handle errors, and cache the information + switch (er.code) { + case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 + case 'ENOTDIR': // totally normal. means it *does* exist. + var abs = this._makeAbs(f) + this.cache[abs] = 'FILE' + if (abs === this.cwdAbs) { + var error = new Error(er.code + ' invalid cwd ' + this.cwd) + error.path = this.cwd + error.code = er.code + throw error + } + break + + case 'ENOENT': // not terribly unusual + case 'ELOOP': + case 'ENAMETOOLONG': + case 'UNKNOWN': + this.cache[this._makeAbs(f)] = false + break + + default: // some unusual error. Treat as failure. + this.cache[this._makeAbs(f)] = false + if (this.strict) + throw er + if (!this.silent) + console.error('glob error', er) + break + } +} + +GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { + + var entries = this._readdir(abs, inGlobStar) + + // no entries means not a dir, so it can never have matches + // foo.txt/** doesn't match foo.txt + if (!entries) + return + + // test without the globstar, and with every child both below + // and replacing the globstar. + var remainWithoutGlobStar = remain.slice(1) + var gspref = prefix ? [ prefix ] : [] + var noGlobStar = gspref.concat(remainWithoutGlobStar) + + // the noGlobStar pattern exits the inGlobStar state + this._process(noGlobStar, index, false) + + var len = entries.length + var isSym = this.symlinks[abs] + + // If it's a symlink, and we're in a globstar, then stop + if (isSym && inGlobStar) + return + + for (var i = 0; i < len; i++) { + var e = entries[i] + if (e.charAt(0) === '.' && !this.dot) + continue + + // these two cases enter the inGlobStar state + var instead = gspref.concat(entries[i], remainWithoutGlobStar) + this._process(instead, index, true) + + var below = gspref.concat(entries[i], remain) + this._process(below, index, true) + } +} + +GlobSync.prototype._processSimple = function (prefix, index) { + // XXX review this. Shouldn't it be doing the mounting etc + // before doing stat? kinda weird? + var exists = this._stat(prefix) + + if (!this.matches[index]) + this.matches[index] = Object.create(null) + + // If it doesn't exist, then just mark the lack of results + if (!exists) + return + + if (prefix && isAbsolute(prefix) && !this.nomount) { + var trail = /[\/\\]$/.test(prefix) + if (prefix.charAt(0) === '/') { + prefix = path.join(this.root, prefix) + } else { + prefix = path.resolve(this.root, prefix) + if (trail) + prefix += '/' + } + } + + if (process.platform === 'win32') + prefix = prefix.replace(/\\/g, '/') + + // Mark this as a match + this._emitMatch(index, prefix) +} + +// Returns either 'DIR', 'FILE', or false +GlobSync.prototype._stat = function (f) { + var abs = this._makeAbs(f) + var needDir = f.slice(-1) === '/' + + if (f.length > this.maxLength) + return false + + if (!this.stat && ownProp(this.cache, abs)) { + var c = this.cache[abs] + + if (Array.isArray(c)) + c = 'DIR' + + // It exists, but maybe not how we need it + if (!needDir || c === 'DIR') + return c + + if (needDir && c === 'FILE') + return false + + // otherwise we have to stat, because maybe c=true + // if we know it exists, but not what it is. + } + + var exists + var stat = this.statCache[abs] + if (!stat) { + var lstat + try { + lstat = this.fs.lstatSync(abs) + } catch (er) { + if (er && (er.code === 'ENOENT' || er.code === 'ENOTDIR')) { + this.statCache[abs] = false + return false + } + } + + if (lstat && lstat.isSymbolicLink()) { + try { + stat = this.fs.statSync(abs) + } catch (er) { + stat = lstat + } + } else { + stat = lstat + } + } + + this.statCache[abs] = stat + + var c = true + if (stat) + c = stat.isDirectory() ? 'DIR' : 'FILE' + + this.cache[abs] = this.cache[abs] || c + + if (needDir && c === 'FILE') + return false + + return c +} + +GlobSync.prototype._mark = function (p) { + return common.mark(this, p) +} + +GlobSync.prototype._makeAbs = function (f) { + return common.makeAbs(this, f) +} diff --git a/.pnpm-store/v11/files/2d/d290ee72eab0d96a16560062205fe4e5265246dbc4de7641e5f3440149f274c8a757239e36d0d4fee078be2a321ea98dffdfb2bebc34392eb56704fdfa7711 b/.pnpm-store/v11/files/2d/d290ee72eab0d96a16560062205fe4e5265246dbc4de7641e5f3440149f274c8a757239e36d0d4fee078be2a321ea98dffdfb2bebc34392eb56704fdfa7711 new file mode 100644 index 00000000..6a38a692 --- /dev/null +++ b/.pnpm-store/v11/files/2d/d290ee72eab0d96a16560062205fe4e5265246dbc4de7641e5f3440149f274c8a757239e36d0d4fee078be2a321ea98dffdfb2bebc34392eb56704fdfa7711 @@ -0,0 +1,13 @@ +module.exports = toArray + +function toArray(list, index) { + var array = [] + + index = index || 0 + + for (var i = index || 0; i < list.length; i++) { + array[i - index] = list[i] + } + + return array +} diff --git a/.pnpm-store/v11/files/2d/d3233b201ff4a2aa0b31609c77064174a05cc3c2909ce9ddead8b25c4d24d49dc37f72f0c7a3989a728b23c69907b83899a3e770bc95abdf0dcfbdd400d3ce b/.pnpm-store/v11/files/2d/d3233b201ff4a2aa0b31609c77064174a05cc3c2909ce9ddead8b25c4d24d49dc37f72f0c7a3989a728b23c69907b83899a3e770bc95abdf0dcfbdd400d3ce new file mode 100644 index 00000000..dd53bfbf --- /dev/null +++ b/.pnpm-store/v11/files/2d/d3233b201ff4a2aa0b31609c77064174a05cc3c2909ce9ddead8b25c4d24d49dc37f72f0c7a3989a728b23c69907b83899a3e770bc95abdf0dcfbdd400d3ce @@ -0,0 +1,33 @@ +/*! + * Chai - flag utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +/** + * ### .flag(object, key, [value]) + * + * Get or set a flag value on an object. If a + * value is provided it will be set, else it will + * return the currently set value or `undefined` if + * the value is not set. + * + * utils.flag(this, 'foo', 'bar'); // setter + * utils.flag(this, 'foo'); // getter, returns `bar` + * + * @param {Object} object constructed Assertion + * @param {String} key + * @param {Mixed} value (optional) + * @namespace Utils + * @name flag + * @api private + */ + +module.exports = function flag(obj, key, value) { + var flags = obj.__flags || (obj.__flags = Object.create(null)); + if (arguments.length === 3) { + flags[key] = value; + } else { + return flags[key]; + } +}; diff --git a/.pnpm-store/v11/files/2d/d726aff70d6517ca633155a19a6b8035bb6c5cb69797a8e59f1a807bcb7008ba5d02de6f212e9d795b42b005a25f5d67e372051cc96d7194bcc261050d1f7b b/.pnpm-store/v11/files/2d/d726aff70d6517ca633155a19a6b8035bb6c5cb69797a8e59f1a807bcb7008ba5d02de6f212e9d795b42b005a25f5d67e372051cc96d7194bcc261050d1f7b new file mode 100644 index 00000000..3f035ce7 --- /dev/null +++ b/.pnpm-store/v11/files/2d/d726aff70d6517ca633155a19a6b8035bb6c5cb69797a8e59f1a807bcb7008ba5d02de6f212e9d795b42b005a25f5d67e372051cc96d7194bcc261050d1f7b @@ -0,0 +1,65 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const EE = require("events"); +const async = require("async"); +const chalk = require("chalk"); +const _suman = global.__suman = (global.__suman || {}); +const suiteResultEmitter = _suman.suiteResultEmitter = (_suman.suiteResultEmitter || new EE()); +const handle_suman_shutdown_1 = require("./helpers/handle-suman-shutdown"); +exports.run = function (files) { + let fileCount = chalk.bold.underline(String(files.length)); + let boldTitle = chalk.bold('single process mode'); + _suman.log.info(chalk.magenta(`Suman will run the following ${fileCount} files in ${boldTitle}:`)); + files.forEach(function (f, index) { + _suman.log.info(`[${index + 1}]`, chalk.gray(f[0])); + }); + console.log(); + files.forEach(function (f) { + require(f[0]); + }); + const { tsq, tsrq, sumanOpts } = _suman; + if (sumanOpts.dry_run) { + _suman.log.warning('Suman is using the "--dry-run" argument, and is shutting down without actually running the tests.'); + return handle_suman_shutdown_1.shutdownProcess(); + } + if (!_suman.sumanInitCalled) { + throw new Error('Looks like none of your files contains a Suman test.'); + } + tsq.drain = function () { + if (tsrq.idle()) { + _suman.log.verygood('We are done running all tests in single process mode.'); + handle_suman_shutdown_1.shutdownProcess(); + } + }; + _suman.log.good('Resuming test registration for Suman single process mode.'); + tsrq.resume(); +}; +exports.run2 = function (files) { + _suman.log.info(chalk.magenta('suman will run the following files in single process mode:')); + _suman.log.info(util.inspect(files.map(v => v[0]))); + async.eachLimit(files, 5, function (f, cb) { + const fullPath = f[0]; + const shortenedPath = f[1]; + console.log('\n'); + _suman.log.info('is now running test with filename => "' + shortenedPath + '"', '\n'); + suiteResultEmitter.once('suman-test-file-complete', function () { + cb(null); + }); + require(fullPath); + }, function (err) { + if (err) { + console.error(err.stack || err || 'no error passed to error handler.'); + process.exit(1); + } + else { + console.log('\n'); + _suman.log.info('SUMAN_SINGLE_PROCESS run is now complete.'); + console.log('\n'); + _suman.log.info('Time required for all tests in single process => ', Date.now() - _suman.sumanSingleProcessStartTime); + process.exit(0); + } + }); +}; diff --git a/.pnpm-store/v11/files/2d/e0c0cafc1198792adf353d4d04239b651e9ba7ed5e8d49031cba731819433839e806bbc40e68ed54fa54d73d8b4ba96a4b80d5eebbaba81142df26ac813026 b/.pnpm-store/v11/files/2d/e0c0cafc1198792adf353d4d04239b651e9ba7ed5e8d49031cba731819433839e806bbc40e68ed54fa54d73d8b4ba96a4b80d5eebbaba81142df26ac813026 new file mode 100644 index 00000000..5e23e76c --- /dev/null +++ b/.pnpm-store/v11/files/2d/e0c0cafc1198792adf353d4d04239b651e9ba7ed5e8d49031cba731819433839e806bbc40e68ed54fa54d73d8b4ba96a4b80d5eebbaba81142df26ac813026 @@ -0,0 +1,35 @@ +var baseIsEqual = require('./_baseIsEqual'); + +/** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ +function isEqual(value, other) { + return baseIsEqual(value, other); +} + +module.exports = isEqual; diff --git a/.pnpm-store/v11/files/2e/0a00e3dfaa52d890e81ead495b1e6aeee74c97931f26f5cb5d3ad4556d0ef680bb48cdf8d74f3c2ff2d5d60b8f344c58ace7a4ec8e33ff4324f948c308edeb b/.pnpm-store/v11/files/2e/0a00e3dfaa52d890e81ead495b1e6aeee74c97931f26f5cb5d3ad4556d0ef680bb48cdf8d74f3c2ff2d5d60b8f344c58ace7a4ec8e33ff4324f948c308edeb new file mode 100644 index 00000000..369b2eff --- /dev/null +++ b/.pnpm-store/v11/files/2e/0a00e3dfaa52d890e81ead495b1e6aeee74c97931f26f5cb5d3ad4556d0ef680bb48cdf8d74f3c2ff2d5d60b8f344c58ace7a4ec8e33ff4324f948c308edeb @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2e/0e8ef2004d0ecd136e47343f003cda524ebb27d184d4cff5347d12c12d46ba21ad875e28f0ae8a0f35aeb1ef26abe30b30c746b47fbc9754cee48d3448ac56 b/.pnpm-store/v11/files/2e/0e8ef2004d0ecd136e47343f003cda524ebb27d184d4cff5347d12c12d46ba21ad875e28f0ae8a0f35aeb1ef26abe30b30c746b47fbc9754cee48d3448ac56 new file mode 100644 index 00000000..f20d62f4 --- /dev/null +++ b/.pnpm-store/v11/files/2e/0e8ef2004d0ecd136e47343f003cda524ebb27d184d4cff5347d12c12d46ba21ad875e28f0ae8a0f35aeb1ef26abe30b30c746b47fbc9754cee48d3448ac56 @@ -0,0 +1,6 @@ +import { IRunnerObj, ISumanChildProcess, ITableRows } from "suman-types/dts/runner"; +export interface ISumanCPMessages { + code: number; + signal: any; +} +export declare const makeHandleMultipleProcesses: (runnerObj: IRunnerObj, tableRows: ITableRows, messages: ISumanCPMessages[], forkedCPs: ISumanChildProcess[], beforeExitRunOncePost: Function, makeExit: Function) => Function; diff --git a/.pnpm-store/v11/files/2e/194fcaa9313f8e89c331ad8c075400cff238176b02b4a44f317b930bf43bdbe8fea9aa95cf39383f9f9f891101ea6db7d3c6fe28aaaae0d040766380f50a20 b/.pnpm-store/v11/files/2e/194fcaa9313f8e89c331ad8c075400cff238176b02b4a44f317b930bf43bdbe8fea9aa95cf39383f9f9f891101ea6db7d3c6fe28aaaae0d040766380f50a20 new file mode 100644 index 00000000..8fb64030 --- /dev/null +++ b/.pnpm-store/v11/files/2e/194fcaa9313f8e89c331ad8c075400cff238176b02b4a44f317b930bf43bdbe8fea9aa95cf39383f9f9f891101ea6db7d3c6fe28aaaae0d040766380f50a20 @@ -0,0 +1,577 @@ + +/** + * Module dependencies. + */ + +var eio = require('engine.io-client'); +var Socket = require('./socket'); +var Emitter = require('component-emitter'); +var parser = require('socket.io-parser'); +var on = require('./on'); +var bind = require('component-bind'); +var debug = require('debug')('socket.io-client:manager'); +var indexOf = require('indexof'); +var Backoff = require('backo2'); + +/** + * IE6+ hasOwnProperty + */ + +var has = Object.prototype.hasOwnProperty; + +/** + * Module exports + */ + +module.exports = Manager; + +/** + * `Manager` constructor. + * + * @param {String} engine instance or engine uri/opts + * @param {Object} options + * @api public + */ + +function Manager (uri, opts) { + if (!(this instanceof Manager)) return new Manager(uri, opts); + if (uri && ('object' === typeof uri)) { + opts = uri; + uri = undefined; + } + opts = opts || {}; + + opts.path = opts.path || '/socket.io'; + this.nsps = {}; + this.subs = []; + this.opts = opts; + this.reconnection(opts.reconnection !== false); + this.reconnectionAttempts(opts.reconnectionAttempts || Infinity); + this.reconnectionDelay(opts.reconnectionDelay || 1000); + this.reconnectionDelayMax(opts.reconnectionDelayMax || 5000); + this.randomizationFactor(opts.randomizationFactor || 0.5); + this.backoff = new Backoff({ + min: this.reconnectionDelay(), + max: this.reconnectionDelayMax(), + jitter: this.randomizationFactor() + }); + this.timeout(null == opts.timeout ? 20000 : opts.timeout); + this.readyState = 'closed'; + this.uri = uri; + this.connecting = []; + this.lastPing = null; + this.encoding = false; + this.packetBuffer = []; + var _parser = opts.parser || parser; + this.encoder = new _parser.Encoder(); + this.decoder = new _parser.Decoder(); + this.autoConnect = opts.autoConnect !== false; + if (this.autoConnect) this.open(); +} + +/** + * Propagate given event to sockets and emit on `this` + * + * @api private + */ + +Manager.prototype.emitAll = function () { + this.emit.apply(this, arguments); + for (var nsp in this.nsps) { + if (has.call(this.nsps, nsp)) { + this.nsps[nsp].emit.apply(this.nsps[nsp], arguments); + } + } +}; + +/** + * Update `socket.id` of all sockets + * + * @api private + */ + +Manager.prototype.updateSocketIds = function () { + for (var nsp in this.nsps) { + if (has.call(this.nsps, nsp)) { + this.nsps[nsp].id = this.generateId(nsp); + } + } +}; + +/** + * generate `socket.id` for the given `nsp` + * + * @param {String} nsp + * @return {String} + * @api private + */ + +Manager.prototype.generateId = function (nsp) { + return (nsp === '/' ? '' : (nsp + '#')) + this.engine.id; +}; + +/** + * Mix in `Emitter`. + */ + +Emitter(Manager.prototype); + +/** + * Sets the `reconnection` config. + * + * @param {Boolean} true/false if it should automatically reconnect + * @return {Manager} self or value + * @api public + */ + +Manager.prototype.reconnection = function (v) { + if (!arguments.length) return this._reconnection; + this._reconnection = !!v; + return this; +}; + +/** + * Sets the reconnection attempts config. + * + * @param {Number} max reconnection attempts before giving up + * @return {Manager} self or value + * @api public + */ + +Manager.prototype.reconnectionAttempts = function (v) { + if (!arguments.length) return this._reconnectionAttempts; + this._reconnectionAttempts = v; + return this; +}; + +/** + * Sets the delay between reconnections. + * + * @param {Number} delay + * @return {Manager} self or value + * @api public + */ + +Manager.prototype.reconnectionDelay = function (v) { + if (!arguments.length) return this._reconnectionDelay; + this._reconnectionDelay = v; + this.backoff && this.backoff.setMin(v); + return this; +}; + +Manager.prototype.randomizationFactor = function (v) { + if (!arguments.length) return this._randomizationFactor; + this._randomizationFactor = v; + this.backoff && this.backoff.setJitter(v); + return this; +}; + +/** + * Sets the maximum delay between reconnections. + * + * @param {Number} delay + * @return {Manager} self or value + * @api public + */ + +Manager.prototype.reconnectionDelayMax = function (v) { + if (!arguments.length) return this._reconnectionDelayMax; + this._reconnectionDelayMax = v; + this.backoff && this.backoff.setMax(v); + return this; +}; + +/** + * Sets the connection timeout. `false` to disable + * + * @return {Manager} self or value + * @api public + */ + +Manager.prototype.timeout = function (v) { + if (!arguments.length) return this._timeout; + this._timeout = v; + return this; +}; + +/** + * Starts trying to reconnect if reconnection is enabled and we have not + * started reconnecting yet + * + * @api private + */ + +Manager.prototype.maybeReconnectOnOpen = function () { + // Only try to reconnect if it's the first time we're connecting + if (!this.reconnecting && this._reconnection && this.backoff.attempts === 0) { + // keeps reconnection from firing twice for the same reconnection loop + this.reconnect(); + } +}; + +/** + * Sets the current transport `socket`. + * + * @param {Function} optional, callback + * @return {Manager} self + * @api public + */ + +Manager.prototype.open = +Manager.prototype.connect = function (fn, opts) { + debug('readyState %s', this.readyState); + if (~this.readyState.indexOf('open')) return this; + + debug('opening %s', this.uri); + this.engine = eio(this.uri, this.opts); + var socket = this.engine; + var self = this; + this.readyState = 'opening'; + this.skipReconnect = false; + + // emit `open` + var openSub = on(socket, 'open', function () { + self.onopen(); + fn && fn(); + }); + + // emit `connect_error` + var errorSub = on(socket, 'error', function (data) { + debug('connect_error'); + self.cleanup(); + self.readyState = 'closed'; + self.emitAll('connect_error', data); + if (fn) { + var err = new Error('Connection error'); + err.data = data; + fn(err); + } else { + // Only do this if there is no fn to handle the error + self.maybeReconnectOnOpen(); + } + }); + + // emit `connect_timeout` + if (false !== this._timeout) { + var timeout = this._timeout; + debug('connect attempt will timeout after %d', timeout); + + if (timeout === 0) { + openSub.destroy(); // prevents a race condition with the 'open' event + } + + // set timer + var timer = setTimeout(function () { + debug('connect attempt timed out after %d', timeout); + openSub.destroy(); + socket.close(); + socket.emit('error', 'timeout'); + self.emitAll('connect_timeout', timeout); + }, timeout); + + this.subs.push({ + destroy: function () { + clearTimeout(timer); + } + }); + } + + this.subs.push(openSub); + this.subs.push(errorSub); + + return this; +}; + +/** + * Called upon transport open. + * + * @api private + */ + +Manager.prototype.onopen = function () { + debug('open'); + + // clear old subs + this.cleanup(); + + // mark as open + this.readyState = 'open'; + this.emit('open'); + + // add new subs + var socket = this.engine; + this.subs.push(on(socket, 'data', bind(this, 'ondata'))); + this.subs.push(on(socket, 'ping', bind(this, 'onping'))); + this.subs.push(on(socket, 'pong', bind(this, 'onpong'))); + this.subs.push(on(socket, 'error', bind(this, 'onerror'))); + this.subs.push(on(socket, 'close', bind(this, 'onclose'))); + this.subs.push(on(this.decoder, 'decoded', bind(this, 'ondecoded'))); +}; + +/** + * Called upon a ping. + * + * @api private + */ + +Manager.prototype.onping = function () { + this.lastPing = new Date(); + this.emitAll('ping'); +}; + +/** + * Called upon a packet. + * + * @api private + */ + +Manager.prototype.onpong = function () { + this.emitAll('pong', new Date() - this.lastPing); +}; + +/** + * Called with data. + * + * @api private + */ + +Manager.prototype.ondata = function (data) { + this.decoder.add(data); +}; + +/** + * Called when parser fully decodes a packet. + * + * @api private + */ + +Manager.prototype.ondecoded = function (packet) { + this.emit('packet', packet); +}; + +/** + * Called upon socket error. + * + * @api private + */ + +Manager.prototype.onerror = function (err) { + debug('error', err); + this.emitAll('error', err); +}; + +/** + * Creates a new socket for the given `nsp`. + * + * @return {Socket} + * @api public + */ + +Manager.prototype.socket = function (nsp, opts) { + var socket = this.nsps[nsp]; + if (!socket) { + socket = new Socket(this, nsp, opts); + this.nsps[nsp] = socket; + var self = this; + socket.on('connecting', onConnecting); + socket.on('connect', function () { + socket.id = self.generateId(nsp); + }); + + if (this.autoConnect) { + // manually call here since connecting event is fired before listening + onConnecting(); + } + } + + function onConnecting () { + if (!~indexOf(self.connecting, socket)) { + self.connecting.push(socket); + } + } + + return socket; +}; + +/** + * Called upon a socket close. + * + * @param {Socket} socket + */ + +Manager.prototype.destroy = function (socket) { + var index = indexOf(this.connecting, socket); + if (~index) this.connecting.splice(index, 1); + if (this.connecting.length) return; + + this.close(); +}; + +/** + * Writes a packet. + * + * @param {Object} packet + * @api private + */ + +Manager.prototype.packet = function (packet) { + debug('writing packet %j', packet); + var self = this; + if (packet.query && packet.type === 0) packet.nsp += '?' + packet.query; + + if (!self.encoding) { + // encode, then write to engine with result + self.encoding = true; + this.encoder.encode(packet, function (encodedPackets) { + for (var i = 0; i < encodedPackets.length; i++) { + self.engine.write(encodedPackets[i], packet.options); + } + self.encoding = false; + self.processPacketQueue(); + }); + } else { // add packet to the queue + self.packetBuffer.push(packet); + } +}; + +/** + * If packet buffer is non-empty, begins encoding the + * next packet in line. + * + * @api private + */ + +Manager.prototype.processPacketQueue = function () { + if (this.packetBuffer.length > 0 && !this.encoding) { + var pack = this.packetBuffer.shift(); + this.packet(pack); + } +}; + +/** + * Clean up transport subscriptions and packet buffer. + * + * @api private + */ + +Manager.prototype.cleanup = function () { + debug('cleanup'); + + var subsLength = this.subs.length; + for (var i = 0; i < subsLength; i++) { + var sub = this.subs.shift(); + sub.destroy(); + } + + this.packetBuffer = []; + this.encoding = false; + this.lastPing = null; + + this.decoder.destroy(); +}; + +/** + * Close the current socket. + * + * @api private + */ + +Manager.prototype.close = +Manager.prototype.disconnect = function () { + debug('disconnect'); + this.skipReconnect = true; + this.reconnecting = false; + if ('opening' === this.readyState) { + // `onclose` will not fire because + // an open event never happened + this.cleanup(); + } + this.backoff.reset(); + this.readyState = 'closed'; + if (this.engine) this.engine.close(); +}; + +/** + * Called upon engine close. + * + * @api private + */ + +Manager.prototype.onclose = function (reason) { + debug('onclose'); + + this.cleanup(); + this.backoff.reset(); + this.readyState = 'closed'; + this.emit('close', reason); + + if (this._reconnection && !this.skipReconnect) { + this.reconnect(); + } +}; + +/** + * Attempt a reconnection. + * + * @api private + */ + +Manager.prototype.reconnect = function () { + if (this.reconnecting || this.skipReconnect) return this; + + var self = this; + + if (this.backoff.attempts >= this._reconnectionAttempts) { + debug('reconnect failed'); + this.backoff.reset(); + this.emitAll('reconnect_failed'); + this.reconnecting = false; + } else { + var delay = this.backoff.duration(); + debug('will wait %dms before reconnect attempt', delay); + + this.reconnecting = true; + var timer = setTimeout(function () { + if (self.skipReconnect) return; + + debug('attempting reconnect'); + self.emitAll('reconnect_attempt', self.backoff.attempts); + self.emitAll('reconnecting', self.backoff.attempts); + + // check again for the case socket closed in above events + if (self.skipReconnect) return; + + self.open(function (err) { + if (err) { + debug('reconnect attempt error'); + self.reconnecting = false; + self.reconnect(); + self.emitAll('reconnect_error', err.data); + } else { + debug('reconnect success'); + self.onreconnect(); + } + }); + }, delay); + + this.subs.push({ + destroy: function () { + clearTimeout(timer); + } + }); + } +}; + +/** + * Called upon successful reconnect. + * + * @api private + */ + +Manager.prototype.onreconnect = function () { + var attempt = this.backoff.attempts; + this.reconnecting = false; + this.backoff.reset(); + this.updateSocketIds(); + this.emitAll('reconnect', attempt); +}; diff --git a/.pnpm-store/v11/files/2e/1b85eb7bd067d02efc1391eea75d2c761920827aeedd92e21de4adeb13f07dad7670d1a80b1f7e25c391681f14a1001132ebb9b062a4ffa571f80fdcf69423 b/.pnpm-store/v11/files/2e/1b85eb7bd067d02efc1391eea75d2c761920827aeedd92e21de4adeb13f07dad7670d1a80b1f7e25c391681f14a1001132ebb9b062a4ffa571f80fdcf69423 new file mode 100644 index 00000000..e886c414 --- /dev/null +++ b/.pnpm-store/v11/files/2e/1b85eb7bd067d02efc1391eea75d2c761920827aeedd92e21de4adeb13f07dad7670d1a80b1f7e25c391681f14a1001132ebb9b062a4ffa571f80fdcf69423 @@ -0,0 +1,14 @@ +REPORTER = dot + +build: blob.js + +blob.js: + @./node_modules/.bin/browserify --standalone blob index.js > blob.js + +test: + @./node_modules/.bin/zuul -- test/index.js + +clean: + rm blob.js + +.PHONY: test blob.js diff --git a/.pnpm-store/v11/files/2e/303166400f691e3cc256c70ac57e38e4999aae7408ccaac4067c6b84cb2fd4d968287a0a7a85d3b25c8e9f24f43b0ed2d7b0680bfecd8c8b7bd5cd14726b60 b/.pnpm-store/v11/files/2e/303166400f691e3cc256c70ac57e38e4999aae7408ccaac4067c6b84cb2fd4d968287a0a7a85d3b25c8e9f24f43b0ed2d7b0680bfecd8c8b7bd5cd14726b60 new file mode 100644 index 00000000..efa8ccbf --- /dev/null +++ b/.pnpm-store/v11/files/2e/303166400f691e3cc256c70ac57e38e4999aae7408ccaac4067c6b84cb2fd4d968287a0a7a85d3b25c8e9f24f43b0ed2d7b0680bfecd8c8b7bd5cd14726b60 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('zipAll', require('../zip')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2e/388865ab20c8a97b225a1040ee1f1d57bf3397e77d036af587abccfef52d03866864b58746761b24144267197afd514bcfc323347197111cac201e537d90d7 b/.pnpm-store/v11/files/2e/388865ab20c8a97b225a1040ee1f1d57bf3397e77d036af587abccfef52d03866864b58746761b24144267197afd514bcfc323347197111cac201e537d90d7 new file mode 100644 index 00000000..c8ae7e5a --- /dev/null +++ b/.pnpm-store/v11/files/2e/388865ab20c8a97b225a1040ee1f1d57bf3397e77d036af587abccfef52d03866864b58746761b24144267197afd514bcfc323347197111cac201e537d90d7 @@ -0,0 +1,304 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +'use strict'; + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/2e/3ea7a71c7a5d6e9bb34f51ab54b8cd4998ef3e4476d3dd3303298ccf57ff09b74c6c54820ef627116f44a35fa5e28bd570b72639747eca88ed7188831ca519 b/.pnpm-store/v11/files/2e/3ea7a71c7a5d6e9bb34f51ab54b8cd4998ef3e4476d3dd3303298ccf57ff09b74c6c54820ef627116f44a35fa5e28bd570b72639747eca88ed7188831ca519 new file mode 100644 index 00000000..b7c567c0 --- /dev/null +++ b/.pnpm-store/v11/files/2e/3ea7a71c7a5d6e9bb34f51ab54b8cd4998ef3e4476d3dd3303298ccf57ff09b74c6c54820ef627116f44a35fa5e28bd570b72639747eca88ed7188831ca519 @@ -0,0 +1,2 @@ +import { Pool } from "poolio"; +export declare const workerPool: Pool; diff --git a/.pnpm-store/v11/files/2e/3fb79a788f63d2d01e865bfb04a46c2ea7300167c997012a6be64a318e5d45111a8a6ec8c5f3a1a69ddc5e7a64686d628c934b11d01b0ac3a508edc9ff80d4 b/.pnpm-store/v11/files/2e/3fb79a788f63d2d01e865bfb04a46c2ea7300167c997012a6be64a318e5d45111a8a6ec8c5f3a1a69ddc5e7a64686d628c934b11d01b0ac3a508edc9ff80d4 new file mode 100644 index 00000000..91e132e5 --- /dev/null +++ b/.pnpm-store/v11/files/2e/3fb79a788f63d2d01e865bfb04a46c2ea7300167c997012a6be64a318e5d45111a8a6ec8c5f3a1a69ddc5e7a64686d628c934b11d01b0ac3a508edc9ff80d4 @@ -0,0 +1,28 @@ +/** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ +function thru(value, interceptor) { + return interceptor(value); +} + +module.exports = thru; diff --git a/.pnpm-store/v11/files/2e/455423dc39dda90e9cc0d367d9c908150818e125697328a38efc7610f5d50924860d405b28f70e80228611a18bdf18fe0e543a02ce03b81819ff9af3bd8b65 b/.pnpm-store/v11/files/2e/455423dc39dda90e9cc0d367d9c908150818e125697328a38efc7610f5d50924860d405b28f70e80228611a18bdf18fe0e543a02ce03b81819ff9af3bd8b65 new file mode 100644 index 00000000..fb15d5cb --- /dev/null +++ b/.pnpm-store/v11/files/2e/455423dc39dda90e9cc0d367d9c908150818e125697328a38efc7610f5d50924860d405b28f70e80228611a18bdf18fe0e543a02ce03b81819ff9af3bd8b65 @@ -0,0 +1,16 @@ +'use strict'; + +var test = require('tape'); +var parse = require('../').parse; + +test('comment', function (t) { + t.same(parse('beep#boop'), ['beep', { comment: 'boop' }]); + t.same(parse('beep #boop'), ['beep', { comment: 'boop' }]); + t.same(parse('beep # boop'), ['beep', { comment: ' boop' }]); + t.same(parse('beep # > boop'), ['beep', { comment: ' > boop' }]); + t.same(parse('beep # "> boop"'), ['beep', { comment: ' "> boop"' }]); + t.same(parse('beep "#"'), ['beep', '#']); + t.same(parse('beep #"#"#'), ['beep', { comment: '"#"#' }]); + t.same(parse('beep > boop # > foo'), ['beep', { op: '>' }, 'boop', { comment: ' > foo' }]); + t.end(); +}); diff --git a/.pnpm-store/v11/files/2e/53d7aeb79d0a4a674feea31eccd77edcb0b0ea1c561d129df498c1c9ba7a628fa66d9938cdf2216024ded89aac399605ed3b3217de51aa7ef99f65474d38fb b/.pnpm-store/v11/files/2e/53d7aeb79d0a4a674feea31eccd77edcb0b0ea1c561d129df498c1c9ba7a628fa66d9938cdf2216024ded89aac399605ed3b3217de51aa7ef99f65474d38fb new file mode 100644 index 00000000..65796289 --- /dev/null +++ b/.pnpm-store/v11/files/2e/53d7aeb79d0a4a674feea31eccd77edcb0b0ea1c561d129df498c1c9ba7a628fa66d9938cdf2216024ded89aac399605ed3b3217de51aa7ef99f65474d38fb @@ -0,0 +1,100 @@ +declare const _default: { + matchAny: any[]; + matchNone: RegExp[]; + matchAll: RegExp[]; + testDir: string; + testSrcDir: string; + sumanHelpersDir: string; + uniqueAppName: string; + browser: string; + autoLoggingPre: boolean; + autoLoggingPost: boolean; + autoLoggingIoc: boolean; + autoLoggingHooks: boolean; + installSumanExtraDeps: boolean; + autoLoggingTestCases: boolean; + isLogChildStdout: boolean; + isLogChildStderr: boolean; + includeSumanGlobalsInPath: boolean; + useSumanUtilityPatches: boolean; + useTAPOutput: boolean; + errorsOnly: boolean; + replayErrorsAtRunnerEnd: boolean; + logStdoutToTestLogs: boolean; + allowArrowFunctionsForTestBlocks: boolean; + alwaysUseRunner: boolean; + enforceGlobalInstallationOnly: boolean; + enforceLocalInstallationOnly: boolean; + sourceTopLevelDepsInPackageDotJSON: boolean; + enforceTestCaseNames: boolean; + enforceBlockNames: boolean; + enforceHookNames: boolean; + bail: boolean; + bailRunner: boolean; + useBabelRegister: boolean; + transpile: boolean; + executeRunnerCWDAtTestFile: boolean; + sendStderrToSumanErrLogOnly: boolean; + useSuiteNameInTestCaseOutput: boolean; + ultraSafe: boolean; + verbose: boolean; + checkMemoryUsage: boolean; + fullStackTraces: boolean; + disableAutoOpen: boolean; + suppressRunnerOutput: boolean; + allowCollectUsageStats: boolean; + highestPerformance: boolean; + saveLogsForThisManyPastRuns: number; + verbosity: number; + maxParallelProcesses: number; + resultsCapCount: number; + resultsCapSize: number; + defaultHookTimeout: number; + defaultTestCaseTimeout: number; + timeoutToSearchForAvailServer: number; + defaultDelayFunctionTimeout: number; + defaultChildProcessTimeout: number; + defaultTestSuiteTimeout: number; + expireResultsAfter: number; + coverage: { + coverageDir: string; + nyc: { + use: boolean; + }; + istanbul: {}; + }; + watch: { + '//tests': { + 'default': { + script: (p: any) => string; + include: any[]; + exclude: string[]; + }; + }; + '//project': { + 'default': { + script: string; + include: any[]; + exclude: string[]; + }; + }; + }; + reporters: { + 'tap': string; + }; + servers: { + '*default': { + host: string; + port: number; + }; + '###': { + host: string; + port: number; + }; + }; + babelRegisterOpts: { + ignore: RegExp; + extensions: string[]; + }; +}; +export default _default; diff --git a/.pnpm-store/v11/files/2e/56a24ebfe793f0be14cdd2d832019dff30fb9e32462f76e5495561de9072055421a3a4a2e12f09240dd26d6dee187e888018528f2d05047b44933a715f722d b/.pnpm-store/v11/files/2e/56a24ebfe793f0be14cdd2d832019dff30fb9e32462f76e5495561de9072055421a3a4a2e12f09240dd26d6dee187e888018528f2d05047b44933a715f722d new file mode 100644 index 00000000..71919e86 --- /dev/null +++ b/.pnpm-store/v11/files/2e/56a24ebfe793f0be14cdd2d832019dff30fb9e32462f76e5495561de9072055421a3a4a2e12f09240dd26d6dee187e888018528f2d05047b44933a715f722d @@ -0,0 +1,112 @@ +var Symbol = require('./_Symbol'), + Uint8Array = require('./_Uint8Array'), + eq = require('./eq'), + equalArrays = require('./_equalArrays'), + mapToArray = require('./_mapToArray'), + setToArray = require('./_setToArray'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** `Object#toString` result references. */ +var boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + mapTag = '[object Map]', + numberTag = '[object Number]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]'; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +module.exports = equalByTag; diff --git a/.pnpm-store/v11/files/2e/7db3d74303d51c1dd91e83b3bf8c410eca758e4249985f5950529935201ca405a44b3eb875869535bb104701dc3e2287d138bb6bf4fb817979db476db83138-exec b/.pnpm-store/v11/files/2e/7db3d74303d51c1dd91e83b3bf8c410eca758e4249985f5950529935201ca405a44b3eb875869535bb104701dc3e2287d138bb6bf4fb817979db476db83138-exec new file mode 100755 index 00000000..8be665d1 --- /dev/null +++ b/.pnpm-store/v11/files/2e/7db3d74303d51c1dd91e83b3bf8c410eca758e4249985f5950529935201ca405a44b3eb875869535bb104701dc3e2287d138bb6bf4fb817979db476db83138-exec @@ -0,0 +1,3 @@ +# [suman] sqlite-reporter + +Asynchronous, persistence reporter, which talks to SQLite. \ No newline at end of file diff --git a/.pnpm-store/v11/files/2e/7fc0ede07ddc6bf0531177cb66c8456e63e7255e5847d20b1e20f5124749a96b6916fc2da64c22c4e4f9c7bf0f37f8b01857128fc42276869636b30c4dfd97 b/.pnpm-store/v11/files/2e/7fc0ede07ddc6bf0531177cb66c8456e63e7255e5847d20b1e20f5124749a96b6916fc2da64c22c4e4f9c7bf0f37f8b01857128fc42276869636b30c4dfd97 new file mode 100644 index 00000000..f8d66d80 --- /dev/null +++ b/.pnpm-store/v11/files/2e/7fc0ede07ddc6bf0531177cb66c8456e63e7255e5847d20b1e20f5124749a96b6916fc2da64c22c4e4f9c7bf0f37f8b01857128fc42276869636b30c4dfd97 @@ -0,0 +1,62 @@ +var sys = require("util") + , assert = require("assert") + , XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest + , http = require("http") + , xhr; + +// Test server +var server = http.createServer(function (req, res) { + // Check request method and URL + assert.equal(methods[curMethod], req.method); + assert.equal("/" + methods[curMethod], req.url); + + var body = (req.method != "HEAD" ? "Hello World" : ""); + + res.writeHead(200, { + "Content-Type": "text/plain", + "Content-Length": Buffer.byteLength(body) + }); + // HEAD has no body + if (req.method != "HEAD") { + res.write(body); + } + res.end(); + + if (curMethod == methods.length - 1) { + this.close(); + console.log("done"); + } +}).listen(8000); + +// Test standard methods +var methods = ["GET", "POST", "HEAD", "PUT", "DELETE"]; +var curMethod = 0; + +function start(method) { + // Reset each time + xhr = new XMLHttpRequest(); + + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + if (method == "HEAD") { + assert.equal("", this.responseText); + } else { + assert.equal("Hello World", this.responseText); + } + + curMethod++; + + if (curMethod < methods.length) { + console.log("Testing " + methods[curMethod]); + start(methods[curMethod]); + } + } + }; + + var url = "http://localhost:8000/" + method; + xhr.open(method, url); + xhr.send(); +} + +console.log("Testing " + methods[curMethod]); +start(methods[curMethod]); diff --git a/.pnpm-store/v11/files/2e/a4d359df00c434e199962b3a7b13493bb69c8a3d6448b3476c6076e128e4039b0c043a8534131492a3937b8eb5592c89682b02a7772cfefa7bccdb5a4b5dab b/.pnpm-store/v11/files/2e/a4d359df00c434e199962b3a7b13493bb69c8a3d6448b3476c6076e128e4039b0c043a8534131492a3937b8eb5592c89682b02a7772cfefa7bccdb5a4b5dab new file mode 100644 index 00000000..8c245de4 --- /dev/null +++ b/.pnpm-store/v11/files/2e/a4d359df00c434e199962b3a7b13493bb69c8a3d6448b3476c6076e128e4039b0c043a8534131492a3937b8eb5592c89682b02a7772cfefa7bccdb5a4b5dab @@ -0,0 +1,109 @@ +var rng = require('./lib/rng'); +var bytesToUuid = require('./lib/bytesToUuid'); + +// **`v1()` - Generate time-based UUID** +// +// Inspired by https://github.com/LiosK/UUID.js +// and http://docs.python.org/library/uuid.html + +var _nodeId; +var _clockseq; + +// Previous uuid creation time +var _lastMSecs = 0; +var _lastNSecs = 0; + +// See https://github.com/uuidjs/uuid for API details +function v1(options, buf, offset) { + var i = buf && offset || 0; + var b = buf || []; + + options = options || {}; + var node = options.node || _nodeId; + var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; + + // node and clockseq need to be initialized to random values if they're not + // specified. We do this lazily to minimize issues related to insufficient + // system entropy. See #189 + if (node == null || clockseq == null) { + var seedBytes = rng(); + if (node == null) { + // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) + node = _nodeId = [ + seedBytes[0] | 0x01, + seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] + ]; + } + if (clockseq == null) { + // Per 4.2.2, randomize (14 bit) clockseq + clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; + } + } + + // UUID timestamps are 100 nano-second units since the Gregorian epoch, + // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so + // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' + // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. + var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); + + // Per 4.2.1.2, use count of uuid's generated during the current clock + // cycle to simulate higher resolution clock + var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; + + // Time since last uuid creation (in msecs) + var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; + + // Per 4.2.1.2, Bump clockseq on clock regression + if (dt < 0 && options.clockseq === undefined) { + clockseq = clockseq + 1 & 0x3fff; + } + + // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new + // time interval + if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { + nsecs = 0; + } + + // Per 4.2.1.2 Throw error if too many uuids are requested + if (nsecs >= 10000) { + throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); + } + + _lastMSecs = msecs; + _lastNSecs = nsecs; + _clockseq = clockseq; + + // Per 4.1.4 - Convert from unix epoch to Gregorian epoch + msecs += 12219292800000; + + // `time_low` + var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; + b[i++] = tl >>> 24 & 0xff; + b[i++] = tl >>> 16 & 0xff; + b[i++] = tl >>> 8 & 0xff; + b[i++] = tl & 0xff; + + // `time_mid` + var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; + b[i++] = tmh >>> 8 & 0xff; + b[i++] = tmh & 0xff; + + // `time_high_and_version` + b[i++] = tmh >>> 24 & 0xf | 0x10; // include version + b[i++] = tmh >>> 16 & 0xff; + + // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) + b[i++] = clockseq >>> 8 | 0x80; + + // `clock_seq_low` + b[i++] = clockseq & 0xff; + + // `node` + for (var n = 0; n < 6; ++n) { + b[i + n] = node[n]; + } + + return buf ? buf : bytesToUuid(b); +} + +module.exports = v1; diff --git a/.pnpm-store/v11/files/2e/c57f2cc83f681dc142c8b128d97d85ea9b19d16e88e630df24c38cc104920291d471bcefa34c70ddc84b0d4d4dd7fff6a8ae16ab5f45c1cae10233ed5c36f4 b/.pnpm-store/v11/files/2e/c57f2cc83f681dc142c8b128d97d85ea9b19d16e88e630df24c38cc104920291d471bcefa34c70ddc84b0d4d4dd7fff6a8ae16ab5f45c1cae10233ed5c36f4 new file mode 100644 index 00000000..be8f77f2 --- /dev/null +++ b/.pnpm-store/v11/files/2e/c57f2cc83f681dc142c8b128d97d85ea9b19d16e88e630df24c38cc104920291d471bcefa34c70ddc84b0d4d4dd7fff6a8ae16ab5f45c1cae10233ed5c36f4 @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); diff --git a/.pnpm-store/v11/files/2e/df54c1d83f66c4928e653e4604206bf14a75f02387a068b02de22e2912becbd1c24b31e4f160cac2bbc2f3793dd06c3c823b70fce84cde91843c50edfc3dcf b/.pnpm-store/v11/files/2e/df54c1d83f66c4928e653e4604206bf14a75f02387a068b02de22e2912becbd1c24b31e4f160cac2bbc2f3793dd06c3c823b70fce84cde91843c50edfc3dcf new file mode 100644 index 00000000..aa31544b --- /dev/null +++ b/.pnpm-store/v11/files/2e/df54c1d83f66c4928e653e4604206bf14a75f02387a068b02de22e2912becbd1c24b31e4f160cac2bbc2f3793dd06c3c823b70fce84cde91843c50edfc3dcf @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2014 Rase- + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/2e/f062a5797def40c63217f45f8e86c94d70c76c7e4c91a9d6df156e4e858038912d67af19476fe99399559168723968208fc3f6e8957863c73527e5adca1b08 b/.pnpm-store/v11/files/2e/f062a5797def40c63217f45f8e86c94d70c76c7e4c91a9d6df156e4e858038912d67af19476fe99399559168723968208fc3f6e8957863c73527e5adca1b08 new file mode 100644 index 00000000..48ead1bd --- /dev/null +++ b/.pnpm-store/v11/files/2e/f062a5797def40c63217f45f8e86c94d70c76c7e4c91a9d6df156e4e858038912d67af19476fe99399559168723968208fc3f6e8957863c73527e5adca1b08 @@ -0,0 +1,80 @@ +{ + "name": "pathval", + "description": "Object value retrieval given a string path", + "homepage": "https://github.com/chaijs/pathval", + "version": "1.1.1", + "keywords": [ + "pathval", + "value retrieval", + "chai util" + ], + "license": "MIT", + "author": "Veselin Todorov ", + "files": [ + "index.js", + "pathval.js" + ], + "main": "./index.js", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/chaijs/pathval.git" + }, + "scripts": { + "build": "browserify --standalone pathval -o pathval.js", + "lint": "eslint --ignore-path .gitignore .", + "lint:fix": "npm run lint -- --fix", + "prepublish": "npm run build", + "semantic-release": "semantic-release pre && npm publish && semantic-release post", + "pretest": "npm run lint", + "test": "npm run test:node && npm run test:browser && npm run upload-coverage", + "test:browser": "karma start --singleRun=true", + "test:node": "nyc mocha", + "upload-coverage": "lcov-result-merger 'coverage/**/lcov.info' | coveralls; exit 0" + }, + "config": { + "ghooks": { + "commit-msg": "validate-commit-msg" + } + }, + "eslintConfig": { + "extends": [ + "strict/es5" + ], + "env": { + "es6": true + }, + "globals": { + "HTMLElement": false + }, + "rules": { + "complexity": 0, + "max-statements": 0 + } + }, + "devDependencies": { + "browserify": "^17.0.0", + "browserify-istanbul": "^3.0.1", + "coveralls": "^3.1.0", + "eslint": "^7.13.0", + "eslint-config-strict": "^14.0.1", + "eslint-plugin-filenames": "^1.3.2", + "ghooks": "^2.0.4", + "karma": "^5.2.3", + "karma-browserify": "^7.0.0", + "karma-coverage": "^2.0.3", + "karma-mocha": "^2.0.1", + "karma-phantomjs-launcher": "^1.0.4", + "karma-sauce-launcher": "^4.3.3", + "lcov-result-merger": "^3.1.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "phantomjs-prebuilt": "^2.1.16", + "semantic-release": "^17.2.2", + "simple-assert": "^1.0.0", + "travis-after-all": "^1.4.5", + "validate-commit-msg": "^2.14.0" + }, + "engines": { + "node": "*" + } +} diff --git a/.pnpm-store/v11/files/2f/03b9db10735aee78ec1a4908aa3ad2ee170d611fbbfdf23ccc0c4217972b24c7ceaf11eb3dd794866a874797ea9e1c22525a55098aaed5bca473b4e0ecbb82 b/.pnpm-store/v11/files/2f/03b9db10735aee78ec1a4908aa3ad2ee170d611fbbfdf23ccc0c4217972b24c7ceaf11eb3dd794866a874797ea9e1c22525a55098aaed5bca473b4e0ecbb82 new file mode 100644 index 00000000..ba7ade8d --- /dev/null +++ b/.pnpm-store/v11/files/2f/03b9db10735aee78ec1a4908aa3ad2ee170d611fbbfdf23ccc0c4217972b24c7ceaf11eb3dd794866a874797ea9e1c22525a55098aaed5bca473b4e0ecbb82 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isArray', require('../isArray'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/2f/13e64cf3e64c4f266ec801d0b6ebb7e18fa852ec85ca53b872a6ba7491b122112f6fb9247d29eb55d498cb6cb4a828563fd20c486acccafcffe60434690d81 b/.pnpm-store/v11/files/2f/13e64cf3e64c4f266ec801d0b6ebb7e18fa852ec85ca53b872a6ba7491b122112f6fb9247d29eb55d498cb6cb4a828563fd20c486acccafcffe60434690d81 new file mode 100644 index 00000000..b990e4c0 --- /dev/null +++ b/.pnpm-store/v11/files/2f/13e64cf3e64c4f266ec801d0b6ebb7e18fa852ec85ca53b872a6ba7491b122112f6fb9247d29eb55d498cb6cb4a828563fd20c486acccafcffe60434690d81 @@ -0,0 +1,147 @@ +export declare const constants: Readonly<{ + SUMAN_ISSUE_TRACKER_URL: string; + SUMAN_TYPES_ROOT_URL: string; + DEFAULT_TRANSFORM_CONCURRENCY: number; + DEFAULT_PARALLEL_TOTAL_LIMIT: number; + DEFAULT_PARALLEL_TEST_LIMIT: number; + DEFAULT_PARALLEL_BLOCK_LIMIT: number; + DEFAULT_CHILD_PROCESS_TIMEOUT: number; + OLDEST_SUPPORTED_NODE_VERSION: string; + DEBUGGING_ENV: { + name: string; + value: string; + }; + SUMAN_SERVER_MESSAGE: string; + UNKNOWN_INJECT_HOOK_NAME: string; + SUMAN_HOOK_FATAL_WARNING_MESSAGE: string; + SUMAN_HOOK_FATAL_MESSAGE: string; + SUMAN_HARD_LIST: string[]; + CORE_MODULE_LIST: any; + CLI_EXIT_CODES: { + NO_GROUP_NAME_MATCHED_COMMAND_LINE_INPUT: number; + }; + RUNNER_EXIT_CODES: { + NO_TEST_FILE_OR_DIR_SPECIFIED: number; + ERROR_INVOKING_NETWORK_LOG_IN_RUNNER: number; + UNEXPECTED_FATAL_ERROR: number; + TIMED_OUT_AFTER_ALL_PROCESSES_EMIT_EXIT: number; + NO_TEST_FILES_MATCHED_OR_FOUND: number; + UNCAUGHT_EXCEPTION: number; + }; + EXIT_CODES: { + SUCCESSFUL_RUN: number; + WHOLE_TEST_SUITE_SKIPPED: number; + GREP_SUITE_DID_NOT_MATCH: number; + COULD_NOT_LOAD_A_REPORTER: number; + FILE_OR_DIRECTORY_DOES_NOT_EXIST: number; + SUMAN_PRE_NOT_FOUND_IN_YOUR_PROJECT: number; + SUMAN_HELPER_FILE_DOES_NOT_EXPORT_EXPECTED_FUNCTION: number; + BAD_GREP_SUITE_OPTION: number; + SUMAN_UNCAUGHT_EXCEPTION: number; + BAD_CONFIG_OR_PROGRAM_ARGUMENTS: number; + UNEXPECTED_NON_FATAL_ERROR: number; + TEST_CASE_FAIL: number; + INVALID_ARROW_FUNCTION_USAGE: number; + BAD_COMMAND_LINE_OPTION: number; + UNEXPECTED_FATAL_ERROR: number; + FATAL_TEST_ERROR: number; + FATAL_HOOK_ERROR: number; + SUITE_TIMEOUT: number; + SUITE_BAIL: number; + INTEGRANT_VERIFICATION_FAILURE: number; + UNKNOWN_RUNNER_CHILD_PROCESS_STATE: number; + ERROR_IN_ROOT_SUITE_BLOCK: number; + IOC_DEPS_ACQUISITION_ERROR: number; + EXPORT_TEST_BUT_RAN_TEST_FILE_DIRECTLY: number; + DELAY_NOT_REFERENCED: number; + INTEGRANT_VERIFICATION_ERROR: number; + ERROR_CREATED_SUMAN_OBJ: number; + IOC_PASSED_TO_SUMAN_INIT_BAD_FORM: number; + ERROR_ACQUIRING_IOC_DEPS: number; + INVALID_RUNNER_CHILD_PROCESS_STATE: number; + NO_TIMESTAMP_AVAILABLE_IN_TEST: number; + ERROR_CREATED_NETWORK_LOG: number; + ERROR_CREATING_RESULTS_DIR: number; + COULD_NOT_FIND_CONFIG_FROM_PATH: number; + TEST_ERROR_AND_BAIL_IS_TRUE: number; + ERROR_PASSED_AS_FIRST_ARG_TO_DELAY_FUNCTION: number; + DELAY_FUNCTION_TIMED_OUT: number; + ERROR_IN_CHILD_SUITE: number; + OPTS_PLAN_NOT_AN_INTEGER: number; + UNEXPECTED_FATAL_ERROR_DOMAIN_CAUGHT: number; + HOOK_ERROR_AND_BAIL_IS_TRUE: number; + HOOK_TIMED_OUT_ERROR: number; + UNCAUGHT_EXCEPTION_BEFORE_ONCE_POST_INVOKED: number; + UNCAUGHT_EXCEPTION_AFTER_ONCE_POST_INVOKED: number; + ASYNCHRONOUS_CALL_OF_TEST_DOT_DESCRIBE: number; + COULD_NOT_CREATE_LOG_DIR: number; + COULD_NOT_LOCATE_SUMAN_HELPERS_DIR: number; + INTEGRANT_ACQUISITION_TIMEOUT: number; + EXPECTED_EXIT_CODE_NOT_MET: number; + ASYCNCHRONOUS_REGISTRY_OF_TEST_BLOCK_METHODS: number; + HOOK_DID_NOT_THROW_EXPECTED_ERROR: number; + TEST_FILE_TIMEOUT: number; + IOC_STATIC_ACQUISITION_ERROR: number; + PRE_VALS_ERROR: number; + }; + ERROR_MESSAGES: { + INVALID_FUNCTION_TYPE_USAGE: string; + }; + runner_message_type: { + BROWSER_FINISHED: string; + FATAL: string; + FATAL_MESSAGE_RECEIVED: string; + TABLE_DATA: string; + INTEGRANT_INFO: string; + LOG_RESULT: string; + WARNING: string; + NON_FATAL_ERR: string; + MAX_MEMORY: string; + TABLE_DATA_RECEIVED: string; + }; + warnings: { + NO_DONE_WARNING: any; + RETURNED_VAL_DESPITE_CALLBACK_MODE: any; + TEST_CASE_TIMED_OUT_ERROR: any; + HOOK_TIMED_OUT_ERROR: any; + DELAY_TIMED_OUT_ERROR: any; + }; + tableData: { + SUITES_DESIGNATOR: { + name: string; + default: string; + }; + TEST_CASES_DESIGNATOR: { + name: string; + default: string; + }; + TEST_CASES_TOTAL: { + name: string; + default: string; + }; + TEST_CASES_PASSED: { + name: string; + default: string; + }; + TEST_CASES_FAILED: { + name: string; + default: string; + }; + TEST_CASES_SKIPPED: { + name: string; + default: string; + }; + TEST_CASES_STUBBED: { + name: string; + default: string; + }; + TEST_FILE_MILLIS: { + name: string; + default: any; + }; + TEST_SUITE_EXIT_CODE: { + name: string; + default: string; + }; + }; +}>; diff --git a/.pnpm-store/v11/files/2f/1fd36a9cd0a504533bb55b56fd2ba9ca16da1bea6f5581e0b65a817f061f9183dfaa8ebe2d7be3e6fa234bbe1f9990b829526599cec2085fbd70303faa8f87 b/.pnpm-store/v11/files/2f/1fd36a9cd0a504533bb55b56fd2ba9ca16da1bea6f5581e0b65a817f061f9183dfaa8ebe2d7be3e6fa234bbe1f9990b829526599cec2085fbd70303faa8f87 new file mode 100644 index 00000000..294b54e6 --- /dev/null +++ b/.pnpm-store/v11/files/2f/1fd36a9cd0a504533bb55b56fd2ba9ca16da1bea6f5581e0b65a817f061f9183dfaa8ebe2d7be3e6fa234bbe1f9990b829526599cec2085fbd70303faa8f87 @@ -0,0 +1,16 @@ +{ + "name": "arraybuffer.slice", + "description": "Exports a function for slicing ArrayBuffers (no polyfilling)", + "version": "0.0.7", + "license": "MIT", + "homepage": "https://github.com/rase-/arraybuffer.slice", + "dependencies": {}, + "devDependencies": { + "mocha": "1.17.1", + "expect.js": "0.2.0" + }, + "repository": { + "type": "git", + "url": "git@github.com:rase-/arraybuffer.slice.git" + } +} diff --git a/.pnpm-store/v11/files/2f/3845d5c5141a026d8e71b67d156880f1f68459b9fe5dae9723ff67bfede43b034be15daf74dfefa1bc9a8c8b0c152c9dd43c2416a6df19bd8c7c8f98a5dbbb-exec b/.pnpm-store/v11/files/2f/3845d5c5141a026d8e71b67d156880f1f68459b9fe5dae9723ff67bfede43b034be15daf74dfefa1bc9a8c8b0c152c9dd43c2416a6df19bd8c7c8f98a5dbbb-exec new file mode 100755 index 00000000..23123878 --- /dev/null +++ b/.pnpm-store/v11/files/2f/3845d5c5141a026d8e71b67d156880f1f68459b9fe5dae9723ff67bfede43b034be15daf74dfefa1bc9a8c8b0c152c9dd43c2416a6df19bd8c7c8f98a5dbbb-exec @@ -0,0 +1,143 @@ +declare module "readline" { + import * as events from "events"; + import * as stream from "stream"; + + interface Key { + sequence?: string; + name?: string; + ctrl?: boolean; + meta?: boolean; + shift?: boolean; + } + + class Interface extends events.EventEmitter { + readonly terminal: boolean; + + // Need direct access to line/cursor data, for use in external processes + // see: https://github.com/nodejs/node/issues/30347 + /** The current input data */ + readonly line: string; + /** The current cursor position in the input line */ + readonly cursor: number; + + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean); + /** + * NOTE: According to the documentation: + * + * > Instances of the `readline.Interface` class are constructed using the + * > `readline.createInterface()` method. + * + * @see https://nodejs.org/dist/latest-v10.x/docs/api/readline.html#readline_class_interface + */ + protected constructor(options: ReadLineOptions); + + setPrompt(prompt: string): void; + prompt(preserveCursor?: boolean): void; + question(query: string, callback: (answer: string) => void): void; + pause(): this; + resume(): this; + close(): void; + write(data: string | Buffer, key?: Key): void; + + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + */ + + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: string) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: string): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: string) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: string) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: string) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: string) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; + } + + type ReadLine = Interface; // type forwarded for backwards compatiblity + + type Completer = (line: string) => CompleterResult; + type AsyncCompleter = (line: string, callback: (err: any, result: CompleterResult) => void) => any; + + type CompleterResult = [string[], string]; + + interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + completer?: Completer | AsyncCompleter; + terminal?: boolean; + historySize?: number; + prompt?: string; + crlfDelay?: number; + removeHistoryDuplicates?: boolean; + escapeCodeTimeout?: number; + } + + function createInterface(input: NodeJS.ReadableStream, output?: NodeJS.WritableStream, completer?: Completer | AsyncCompleter, terminal?: boolean): Interface; + function createInterface(options: ReadLineOptions): Interface; + + function cursorTo(stream: NodeJS.WritableStream, x: number, y?: number): void; + function emitKeypressEvents(stream: NodeJS.ReadableStream, readlineInterface?: Interface): void; + function moveCursor(stream: NodeJS.WritableStream, dx: number | string, dy: number | string): void; + function clearLine(stream: NodeJS.WritableStream, dir: number): void; + function clearScreenDown(stream: NodeJS.WritableStream): void; +} diff --git a/.pnpm-store/v11/files/2f/444e348b5bbd4a9b9f856b0eded3931a800f7c80f8a97b54d3dce4e99f3d0b08eb982028f76fd9daeefe340799e968bcb4bdbf20bffef78ba1a2d42e051859 b/.pnpm-store/v11/files/2f/444e348b5bbd4a9b9f856b0eded3931a800f7c80f8a97b54d3dce4e99f3d0b08eb982028f76fd9daeefe340799e968bcb4bdbf20bffef78ba1a2d42e051859 new file mode 100644 index 00000000..29d65b03 --- /dev/null +++ b/.pnpm-store/v11/files/2f/444e348b5bbd4a9b9f856b0eded3931a800f7c80f8a97b54d3dce4e99f3d0b08eb982028f76fd9daeefe340799e968bcb4bdbf20bffef78ba1a2d42e051859 @@ -0,0 +1,13 @@ +export function wrapHelper(helper, transformOptionsFn) { + if (typeof helper !== 'function') { + // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 + // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. + return helper; + } + let wrapper = function(/* dynamic arguments */) { + const options = arguments[arguments.length - 1]; + arguments[arguments.length - 1] = transformOptionsFn(options); + return helper.apply(this, arguments); + }; + return wrapper; +} diff --git a/.pnpm-store/v11/files/2f/54515051adc0d635417b67fc30204c55b4c0ac730842e4f4c97a83d121f08e27214524c6ec8e44777268b6e1f4379560032d6546a112e14230be8ba5a13c45 b/.pnpm-store/v11/files/2f/54515051adc0d635417b67fc30204c55b4c0ac730842e4f4c97a83d121f08e27214524c6ec8e44777268b6e1f4379560032d6546a112e14230be8ba5a13c45 new file mode 100644 index 00000000..fabe5589 --- /dev/null +++ b/.pnpm-store/v11/files/2f/54515051adc0d635417b67fc30204c55b4c0ac730842e4f4c97a83d121f08e27214524c6ec8e44777268b6e1f4379560032d6546a112e14230be8ba5a13c45 @@ -0,0 +1,221 @@ +# colors.js +[![Build Status](https://travis-ci.org/Marak/colors.js.svg?branch=master)](https://travis-ci.org/Marak/colors.js) +[![version](https://img.shields.io/npm/v/colors.svg)](https://www.npmjs.org/package/colors) +[![dependencies](https://david-dm.org/Marak/colors.js.svg)](https://david-dm.org/Marak/colors.js) +[![devDependencies](https://david-dm.org/Marak/colors.js/dev-status.svg)](https://david-dm.org/Marak/colors.js#info=devDependencies) + +Please check out the [roadmap](ROADMAP.md) for upcoming features and releases. Please open Issues to provide feedback, and check the `develop` branch for the latest bleeding-edge updates. + +## get color and style in your node.js console + +![Demo](https://raw.githubusercontent.com/Marak/colors.js/master/screenshots/colors.png) + +## Installation + + npm install colors + +## colors and styles! + +### text colors + + - black + - red + - green + - yellow + - blue + - magenta + - cyan + - white + - gray + - grey + +### bright text colors + + - brightRed + - brightGreen + - brightYellow + - brightBlue + - brightMagenta + - brightCyan + - brightWhite + +### background colors + + - bgBlack + - bgRed + - bgGreen + - bgYellow + - bgBlue + - bgMagenta + - bgCyan + - bgWhite + - bgGray + - bgGrey + +### bright background colors + + - bgBrightRed + - bgBrightGreen + - bgBrightYellow + - bgBrightBlue + - bgBrightMagenta + - bgBrightCyan + - bgBrightWhite + +### styles + + - reset + - bold + - dim + - italic + - underline + - inverse + - hidden + - strikethrough + +### extras + + - rainbow + - zebra + - america + - trap + - random + + +## Usage + +By popular demand, `colors` now ships with two types of usages! + +The super nifty way + +```js +var colors = require('colors'); + +console.log('hello'.green); // outputs green text +console.log('i like cake and pies'.underline.red) // outputs red underlined text +console.log('inverse the color'.inverse); // inverses the color +console.log('OMG Rainbows!'.rainbow); // rainbow +console.log('Run the trap'.trap); // Drops the bass + +``` + +or a slightly less nifty way which doesn't extend `String.prototype` + +```js +var colors = require('colors/safe'); + +console.log(colors.green('hello')); // outputs green text +console.log(colors.red.underline('i like cake and pies')) // outputs red underlined text +console.log(colors.inverse('inverse the color')); // inverses the color +console.log(colors.rainbow('OMG Rainbows!')); // rainbow +console.log(colors.trap('Run the trap')); // Drops the bass + +``` + +I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way. + +If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object. + +## Enabling/Disabling Colors + +The package will auto-detect whether your terminal can use colors and enable/disable accordingly. When colors are disabled, the color functions do nothing. You can override this with a command-line flag: + +```bash +node myapp.js --no-color +node myapp.js --color=false + +node myapp.js --color +node myapp.js --color=true +node myapp.js --color=always + +FORCE_COLOR=1 node myapp.js +``` + +Or in code: + +```javascript +var colors = require('colors'); +colors.enable(); +colors.disable(); +``` + +## Console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data) + +```js +var name = 'Marak'; +console.log(colors.green('Hello %s'), name); +// outputs -> 'Hello Marak' +``` + +## Custom themes + +### Using standard API + +```js + +var colors = require('colors'); + +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); +``` + +### Using string safe API + +```js +var colors = require('colors/safe'); + +// set single property +var error = colors.red; +error('this is red'); + +// set theme +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log(colors.error("this is an error")); + +// outputs yellow text +console.log(colors.warn("this is a warning")); + +``` + +### Combining Colors + +```javascript +var colors = require('colors'); + +colors.setTheme({ + custom: ['red', 'underline'] +}); + +console.log('test'.custom); +``` + +*Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.* diff --git a/.pnpm-store/v11/files/2f/66630e9f4eca36adceeeb3ebdad2a3658082eda692c7c5ddd1dcd6e30e41e65edd5242e8b04be119453d2f06b72f9aea00a0d3bd5551186ae5544c8f9be67b b/.pnpm-store/v11/files/2f/66630e9f4eca36adceeeb3ebdad2a3658082eda692c7c5ddd1dcd6e30e41e65edd5242e8b04be119453d2f06b72f9aea00a0d3bd5551186ae5544c8f9be67b new file mode 100644 index 00000000..16a3ad11 --- /dev/null +++ b/.pnpm-store/v11/files/2f/66630e9f4eca36adceeeb3ebdad2a3658082eda692c7c5ddd1dcd6e30e41e65edd5242e8b04be119453d2f06b72f9aea00a0d3bd5551186ae5544c8f9be67b @@ -0,0 +1,14 @@ +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +module.exports = stackHas; diff --git a/.pnpm-store/v11/files/2f/900fffbe838bd05ae759606619369d24b35060582408b43dc686ed70838bbc3bc17a67eadfa41eb11cea87fcb790c30e4cd623625b9e7d72287e89e7d081ba b/.pnpm-store/v11/files/2f/900fffbe838bd05ae759606619369d24b35060582408b43dc686ed70838bbc3bc17a67eadfa41eb11cea87fcb790c30e4cd623625b9e7d72287e89e7d081ba new file mode 100644 index 00000000..458a68e5 --- /dev/null +++ b/.pnpm-store/v11/files/2f/900fffbe838bd05ae759606619369d24b35060582408b43dc686ed70838bbc3bc17a67eadfa41eb11cea87fcb790c30e4cd623625b9e7d72287e89e7d081ba @@ -0,0 +1,571 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +///////////////////////////// +/// Window Iterable APIs +///////////////////////////// + +interface AudioParam { + /** + * The **`setValueCurveAtTime()`** method of the following a curve defined by a list of values. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/AudioParam/setValueCurveAtTime) + */ + setValueCurveAtTime(values: Iterable, startTime: number, duration: number): AudioParam; +} + +interface AudioParamMap extends ReadonlyMap { +} + +interface BaseAudioContext { + /** + * The **`createIIRFilter()`** method of the BaseAudioContext interface creates an IIRFilterNode, which represents a general **infinite impulse response** (IIR) filter which can be configured to serve as various types of filter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createIIRFilter) + */ + createIIRFilter(feedforward: Iterable, feedback: Iterable): IIRFilterNode; + /** + * The `createPeriodicWave()` method of the BaseAudioContext interface is used to create a PeriodicWave. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/BaseAudioContext/createPeriodicWave) + */ + createPeriodicWave(real: Iterable, imag: Iterable, constraints?: PeriodicWaveConstraints): PeriodicWave; +} + +interface CSSKeyframesRule { + [Symbol.iterator](): ArrayIterator; +} + +interface CSSNumericArray { + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSNumericValue]>; + keys(): ArrayIterator; + values(): ArrayIterator; +} + +interface CSSRuleList { + [Symbol.iterator](): ArrayIterator; +} + +interface CSSStyleDeclaration { + [Symbol.iterator](): ArrayIterator; +} + +interface CSSTransformValue { + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSTransformComponent]>; + keys(): ArrayIterator; + values(): ArrayIterator; +} + +interface CSSUnparsedValue { + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, CSSUnparsedSegment]>; + keys(): ArrayIterator; + values(): ArrayIterator; +} + +interface Cache { + /** + * The **`addAll()`** method of the Cache interface takes an array of URLs, retrieves them, and adds the resulting response objects to the given cache. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Cache/addAll) + */ + addAll(requests: Iterable): Promise; +} + +interface CanvasPath { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/roundRect) */ + roundRect(x: number, y: number, w: number, h: number, radii?: number | DOMPointInit | Iterable): void; +} + +interface CanvasPathDrawingStyles { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/setLineDash) */ + setLineDash(segments: Iterable): void; +} + +interface CookieStoreManager { + /** + * The **`subscribe()`** method of the CookieStoreManager interface subscribes a ServiceWorkerRegistration to cookie change events. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CookieStoreManager/subscribe) + */ + subscribe(subscriptions: Iterable): Promise; + /** + * The **`unsubscribe()`** method of the CookieStoreManager interface stops the ServiceWorkerRegistration from receiving previously subscribed events. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/CookieStoreManager/unsubscribe) + */ + unsubscribe(subscriptions: Iterable): Promise; +} + +interface CustomStateSet extends Set { +} + +interface DOMRectList { + [Symbol.iterator](): ArrayIterator; +} + +interface DOMStringList { + [Symbol.iterator](): ArrayIterator; +} + +interface DOMTokenList { + [Symbol.iterator](): ArrayIterator; + entries(): ArrayIterator<[number, string]>; + keys(): ArrayIterator; + values(): ArrayIterator; +} + +interface DataTransferItemList { + [Symbol.iterator](): ArrayIterator; +} + +interface EventCounts extends ReadonlyMap { +} + +interface FileList { + [Symbol.iterator](): ArrayIterator; +} + +interface FontFaceSet extends Set { +} + +interface FormDataIterator extends IteratorObject { + [Symbol.iterator](): FormDataIterator; +} + +interface FormData { + [Symbol.iterator](): FormDataIterator<[string, FormDataEntryValue]>; + /** Returns an array of key, value pairs for every entry in the list. */ + entries(): FormDataIterator<[string, FormDataEntryValue]>; + /** Returns a list of keys in the list. */ + keys(): FormDataIterator; + /** Returns a list of values in the list. */ + values(): FormDataIterator; +} + +interface HTMLAllCollection { + [Symbol.iterator](): ArrayIterator; +} + +interface HTMLCollectionBase { + [Symbol.iterator](): ArrayIterator; +} + +interface HTMLCollectionOf { + [Symbol.iterator](): ArrayIterator; +} + +interface HTMLFormElement { + [Symbol.iterator](): ArrayIterator; +} + +interface HTMLSelectElement { + [Symbol.iterator](): ArrayIterator; +} + +interface HeadersIterator extends IteratorObject { + [Symbol.iterator](): HeadersIterator; +} + +interface Headers { + [Symbol.iterator](): HeadersIterator<[string, string]>; + /** Returns an iterator allowing to go through all key/value pairs contained in this object. */ + entries(): HeadersIterator<[string, string]>; + /** Returns an iterator allowing to go through all keys of the key/value pairs contained in this object. */ + keys(): HeadersIterator; + /** Returns an iterator allowing to go through all values of the key/value pairs contained in this object. */ + values(): HeadersIterator; +} + +interface Highlight extends Set { +} + +interface HighlightRegistry extends Map { +} + +interface IDBDatabase { + /** + * The **`transaction`** method of the IDBDatabase interface immediately returns a transaction object (IDBTransaction) containing the IDBTransaction.objectStore method, which you can use to access your object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/transaction) + */ + transaction(storeNames: string | Iterable, mode?: IDBTransactionMode, options?: IDBTransactionOptions): IDBTransaction; +} + +interface IDBObjectStore { + /** + * The **`createIndex()`** method of the field/column defining a new data point for each database record to contain. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/createIndex) + */ + createIndex(name: string, keyPath: string | Iterable, options?: IDBIndexParameters): IDBIndex; +} + +interface ImageTrackList { + [Symbol.iterator](): ArrayIterator; +} + +interface MIDIInputMap extends ReadonlyMap { +} + +interface MIDIOutput { + /** + * The **`send()`** method of the MIDIOutput interface queues messages for the corresponding MIDI port. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MIDIOutput/send) + */ + send(data: Iterable, timestamp?: DOMHighResTimeStamp): void; +} + +interface MIDIOutputMap extends ReadonlyMap { +} + +interface MediaKeyStatusMapIterator extends IteratorObject { + [Symbol.iterator](): MediaKeyStatusMapIterator; +} + +interface MediaKeyStatusMap { + [Symbol.iterator](): MediaKeyStatusMapIterator<[BufferSource, MediaKeyStatus]>; + entries(): MediaKeyStatusMapIterator<[BufferSource, MediaKeyStatus]>; + keys(): MediaKeyStatusMapIterator; + values(): MediaKeyStatusMapIterator; +} + +interface MediaList { + [Symbol.iterator](): ArrayIterator; +} + +interface MessageEvent { + /** @deprecated */ + initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: Iterable): void; +} + +interface MimeTypeArray { + [Symbol.iterator](): ArrayIterator; +} + +interface NamedNodeMap { + [Symbol.iterator](): ArrayIterator; +} + +interface Navigator { + /** + * The **`requestMediaKeySystemAccess()`** method of the Navigator interface returns a Promise which delivers a MediaKeySystemAccess object that can be used to access a particular media key system, which can in turn be used to create keys for decrypting a media stream. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/requestMediaKeySystemAccess) + */ + requestMediaKeySystemAccess(keySystem: string, supportedConfigurations: Iterable): Promise; + /** + * The **`vibrate()`** method of the Navigator interface pulses the vibration hardware on the device, if such hardware exists. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/vibrate) + */ + vibrate(pattern: Iterable): boolean; +} + +interface NodeList { + [Symbol.iterator](): ArrayIterator; + /** Returns an array of key, value pairs for every entry in the list. */ + entries(): ArrayIterator<[number, Node]>; + /** Returns an list of keys in the list. */ + keys(): ArrayIterator; + /** Returns an list of values in the list. */ + values(): ArrayIterator; +} + +interface NodeListOf { + [Symbol.iterator](): ArrayIterator; + /** Returns an array of key, value pairs for every entry in the list. */ + entries(): ArrayIterator<[number, TNode]>; + /** Returns an list of keys in the list. */ + keys(): ArrayIterator; + /** Returns an list of values in the list. */ + values(): ArrayIterator; +} + +interface Plugin { + [Symbol.iterator](): ArrayIterator; +} + +interface PluginArray { + [Symbol.iterator](): ArrayIterator; +} + +interface RTCRtpTransceiver { + /** + * The **`setCodecPreferences()`** method of the RTCRtpTransceiver interface is used to set the codecs that the transceiver allows for decoding _received_ data, in order of decreasing preference. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpTransceiver/setCodecPreferences) + */ + setCodecPreferences(codecs: Iterable): void; +} + +interface RTCStatsReport extends ReadonlyMap { +} + +interface SVGLengthList { + [Symbol.iterator](): ArrayIterator; +} + +interface SVGNumberList { + [Symbol.iterator](): ArrayIterator; +} + +interface SVGPointList { + [Symbol.iterator](): ArrayIterator; +} + +interface SVGStringList { + [Symbol.iterator](): ArrayIterator; +} + +interface SVGTransformList { + [Symbol.iterator](): ArrayIterator; +} + +interface SourceBufferList { + [Symbol.iterator](): ArrayIterator; +} + +interface SpeechRecognitionResult { + [Symbol.iterator](): ArrayIterator; +} + +interface SpeechRecognitionResultList { + [Symbol.iterator](): ArrayIterator; +} + +interface StylePropertyMapReadOnlyIterator extends IteratorObject { + [Symbol.iterator](): StylePropertyMapReadOnlyIterator; +} + +interface StylePropertyMapReadOnly { + [Symbol.iterator](): StylePropertyMapReadOnlyIterator<[string, Iterable]>; + entries(): StylePropertyMapReadOnlyIterator<[string, Iterable]>; + keys(): StylePropertyMapReadOnlyIterator; + values(): StylePropertyMapReadOnlyIterator>; +} + +interface StyleSheetList { + [Symbol.iterator](): ArrayIterator; +} + +interface SubtleCrypto { + /** + * The **`deriveKey()`** method of the SubtleCrypto interface can be used to derive a secret key from a master key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveKey) + */ + deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: Iterable): Promise; + /** + * The **`generateKey()`** method of the SubtleCrypto interface is used to generate a new key (for symmetric algorithms) or key pair (for public-key algorithms). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) + */ + generateKey(algorithm: "Ed25519" | { name: "Ed25519" }, extractable: boolean, keyUsages: ReadonlyArray<"sign" | "verify">): Promise; + generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray): Promise; + generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray): Promise; + generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: Iterable): Promise; + /** + * The **`importKey()`** method of the SubtleCrypto interface imports a key: that is, it takes as input a key in an external, portable format and gives you a CryptoKey object that you can use in the Web Crypto API. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/importKey) + */ + importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray): Promise; + importKey(format: Exclude, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable): Promise; + /** + * The **`unwrapKey()`** method of the SubtleCrypto interface 'unwraps' a key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/unwrapKey) + */ + unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: Iterable): Promise; +} + +interface TextTrackCueList { + [Symbol.iterator](): ArrayIterator; +} + +interface TextTrackList { + [Symbol.iterator](): ArrayIterator; +} + +interface TouchList { + [Symbol.iterator](): ArrayIterator; +} + +interface URLSearchParamsIterator extends IteratorObject { + [Symbol.iterator](): URLSearchParamsIterator; +} + +interface URLSearchParams { + [Symbol.iterator](): URLSearchParamsIterator<[string, string]>; + /** Returns an array of key, value pairs for every entry in the search params. */ + entries(): URLSearchParamsIterator<[string, string]>; + /** Returns a list of keys in the search params. */ + keys(): URLSearchParamsIterator; + /** Returns a list of values in the search params. */ + values(): URLSearchParamsIterator; +} + +interface ViewTransitionTypeSet extends Set { +} + +interface WEBGL_draw_buffers { + /** + * The **`WEBGL_draw_buffers.drawBuffersWEBGL()`** method is part of the WebGL API and allows you to define the draw buffers to which all fragment colors are written. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_draw_buffers/drawBuffersWEBGL) + */ + drawBuffersWEBGL(buffers: Iterable): void; +} + +interface WEBGL_multi_draw { + /** + * The **`WEBGL_multi_draw.multiDrawArraysInstancedWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawArraysInstancedWEBGL) + */ + multiDrawArraysInstancedWEBGL(mode: GLenum, firstsList: Int32Array | Iterable, firstsOffset: number, countsList: Int32Array | Iterable, countsOffset: number, instanceCountsList: Int32Array | Iterable, instanceCountsOffset: number, drawcount: GLsizei): void; + /** + * The **`WEBGL_multi_draw.multiDrawArraysWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawArraysWEBGL) + */ + multiDrawArraysWEBGL(mode: GLenum, firstsList: Int32Array | Iterable, firstsOffset: number, countsList: Int32Array | Iterable, countsOffset: number, drawcount: GLsizei): void; + /** + * The **`WEBGL_multi_draw.multiDrawElementsInstancedWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawElementsInstancedWEBGL) + */ + multiDrawElementsInstancedWEBGL(mode: GLenum, countsList: Int32Array | Iterable, countsOffset: number, type: GLenum, offsetsList: Int32Array | Iterable, offsetsOffset: number, instanceCountsList: Int32Array | Iterable, instanceCountsOffset: number, drawcount: GLsizei): void; + /** + * The **`WEBGL_multi_draw.multiDrawElementsWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawElementsWEBGL) + */ + multiDrawElementsWEBGL(mode: GLenum, countsList: Int32Array | Iterable, countsOffset: number, type: GLenum, offsetsList: Int32Array | Iterable, offsetsOffset: number, drawcount: GLsizei): void; +} + +interface WebGL2RenderingContextBase { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Iterable, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Iterable, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Iterable, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/drawBuffers) */ + drawBuffers(buffers: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getActiveUniforms) */ + getActiveUniforms(program: WebGLProgram, uniformIndices: Iterable, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getUniformIndices) */ + getUniformIndices(program: WebGLProgram, uniformNames: Iterable): GLuint[] | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/invalidateFramebuffer) */ + invalidateFramebuffer(target: GLenum, attachments: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/invalidateSubFramebuffer) */ + invalidateSubFramebuffer(target: GLenum, attachments: Iterable, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/transformFeedbackVaryings) */ + transformFeedbackVaryings(program: WebGLProgram, varyings: Iterable, bufferMode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform1uiv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform2uiv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform3uiv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform4uiv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix2x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix2x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix3x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix3x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix4x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix4x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribI) */ + vertexAttribI4iv(index: GLuint, values: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribI) */ + vertexAttribI4uiv(index: GLuint, values: Iterable): void; +} + +interface WebGL2RenderingContextOverloads { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1fv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1iv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2fv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2iv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3fv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3iv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4fv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4iv(location: WebGLUniformLocation | null, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Iterable, srcOffset?: number, srcLength?: GLuint): void; +} + +interface WebGLRenderingContextBase { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib1fv(index: GLuint, values: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib2fv(index: GLuint, values: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib3fv(index: GLuint, values: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib4fv(index: GLuint, values: Iterable): void; +} + +interface WebGLRenderingContextOverloads { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1fv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1iv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2fv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2iv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3fv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3iv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4fv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4iv(location: WebGLUniformLocation | null, v: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Iterable): void; +} diff --git a/.pnpm-store/v11/files/2f/b5d8c428a1ff761e30d2be36066730d2594630e76ef454aa8b71fa3f8de19743d5506ad3465598c9fc67b9aabe0f52023930517e581fea6bdd40a25295c5c7 b/.pnpm-store/v11/files/2f/b5d8c428a1ff761e30d2be36066730d2594630e76ef454aa8b71fa3f8de19743d5506ad3465598c9fc67b9aabe0f52023930517e581fea6bdd40a25295c5c7 new file mode 100644 index 00000000..443e0df5 --- /dev/null +++ b/.pnpm-store/v11/files/2f/b5d8c428a1ff761e30d2be36066730d2594630e76ef454aa8b71fa3f8de19743d5506ad3465598c9fc67b9aabe0f52023930517e581fea6bdd40a25295c5c7 @@ -0,0 +1,25 @@ +var LazyWrapper = require('./_LazyWrapper'), + arrayPush = require('./_arrayPush'), + arrayReduce = require('./_arrayReduce'); + +/** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ +function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function(result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); +} + +module.exports = baseWrapperValue; diff --git a/.pnpm-store/v11/files/2f/c54f1b479e686444ebc7cdbc97f34903a262fd14641c74d9b980853d7f1fb260103f8de576a0a2c12c954e35a6090389b1943b8ae30395809e8388af9558ce b/.pnpm-store/v11/files/2f/c54f1b479e686444ebc7cdbc97f34903a262fd14641c74d9b980853d7f1fb260103f8de576a0a2c12c954e35a6090389b1943b8ae30395809e8388af9558ce new file mode 100644 index 00000000..362fbfaf --- /dev/null +++ b/.pnpm-store/v11/files/2f/c54f1b479e686444ebc7cdbc97f34903a262fd14641c74d9b980853d7f1fb260103f8de576a0a2c12c954e35a6090389b1943b8ae30395809e8388af9558ce @@ -0,0 +1,59 @@ +/* + * base64-arraybuffer + * https://github.com/niklasvh/base64-arraybuffer + * + * Copyright (c) 2012 Niklas von Hertzen + * Licensed under the MIT license. + */ +(function(chars){ + "use strict"; + + exports.encode = function(arraybuffer) { + var bytes = new Uint8Array(arraybuffer), + i, len = bytes.length, base64 = ""; + + for (i = 0; i < len; i+=3) { + base64 += chars[bytes[i] >> 2]; + base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)]; + base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)]; + base64 += chars[bytes[i + 2] & 63]; + } + + if ((len % 3) === 2) { + base64 = base64.substring(0, base64.length - 1) + "="; + } else if (len % 3 === 1) { + base64 = base64.substring(0, base64.length - 2) + "=="; + } + + return base64; + }; + + exports.decode = function(base64) { + var bufferLength = base64.length * 0.75, + len = base64.length, i, p = 0, + encoded1, encoded2, encoded3, encoded4; + + if (base64[base64.length - 1] === "=") { + bufferLength--; + if (base64[base64.length - 2] === "=") { + bufferLength--; + } + } + + var arraybuffer = new ArrayBuffer(bufferLength), + bytes = new Uint8Array(arraybuffer); + + for (i = 0; i < len; i+=4) { + encoded1 = chars.indexOf(base64[i]); + encoded2 = chars.indexOf(base64[i+1]); + encoded3 = chars.indexOf(base64[i+2]); + encoded4 = chars.indexOf(base64[i+3]); + + bytes[p++] = (encoded1 << 2) | (encoded2 >> 4); + bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2); + bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63); + } + + return arraybuffer; + }; +})("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); diff --git a/.pnpm-store/v11/files/2f/cc69c5ebd5fc5b913de992c55cd7d8521b43c37b8870627f9db9a4c54478c926eef354089a83b3a03df04e712642c56e9b6f9beff4419243257f7e6ce7b9f1 b/.pnpm-store/v11/files/2f/cc69c5ebd5fc5b913de992c55cd7d8521b43c37b8870627f9db9a4c54478c926eef354089a83b3a03df04e712642c56e9b6f9beff4419243257f7e6ce7b9f1 new file mode 100644 index 00000000..74861e20 --- /dev/null +++ b/.pnpm-store/v11/files/2f/cc69c5ebd5fc5b913de992c55cd7d8521b43c37b8870627f9db9a4c54478c926eef354089a83b3a03df04e712642c56e9b6f9beff4419243257f7e6ce7b9f1 @@ -0,0 +1,524 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_CALLBACKS_PRE_12_INL_H_ +#define NAN_CALLBACKS_PRE_12_INL_H_ + +namespace imp { +template class ReturnValueImp; +} // end of namespace imp + +template +class ReturnValue { + v8::Isolate *isolate_; + v8::Persistent *value_; + friend class imp::ReturnValueImp; + + public: + template + explicit inline ReturnValue(v8::Isolate *isolate, v8::Persistent *p) : + isolate_(isolate), value_(p) {} + template + explicit inline ReturnValue(const ReturnValue& that) + : isolate_(that.isolate_), value_(that.value_) { + TYPE_CHECK(T, S); + } + + // Handle setters + template inline void Set(const v8::Local &handle) { + TYPE_CHECK(T, S); + value_->Dispose(); + *value_ = v8::Persistent::New(handle); + } + + template inline void Set(const Global &handle) { + TYPE_CHECK(T, S); + value_->Dispose(); + *value_ = v8::Persistent::New(handle.persistent); + const_cast &>(handle).Reset(); + } + + // Fast primitive setters + inline void Set(bool value) { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::Boolean); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::Boolean::New(value)); + } + + inline void Set(double i) { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::Number); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::Number::New(i)); + } + + inline void Set(int32_t i) { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::Integer); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::Int32::New(i)); + } + + inline void Set(uint32_t i) { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::Integer); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::Uint32::NewFromUnsigned(i)); + } + + // Fast JS primitive setters + inline void SetNull() { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::Primitive); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::Null()); + } + + inline void SetUndefined() { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::Primitive); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::Undefined()); + } + + inline void SetEmptyString() { + v8::HandleScope scope; + + TYPE_CHECK(T, v8::String); + value_->Dispose(); + *value_ = v8::Persistent::New(v8::String::Empty()); + } + + // Convenience getter for isolate + inline v8::Isolate *GetIsolate() const { + return isolate_; + } + + // Pointer setter: Uncompilable to prevent inadvertent misuse. + template + inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); } +}; + +template +class FunctionCallbackInfo { + const v8::Arguments &args_; + v8::Local data_; + ReturnValue return_value_; + v8::Persistent retval_; + + public: + explicit inline FunctionCallbackInfo( + const v8::Arguments &args + , v8::Local data) : + args_(args) + , data_(data) + , return_value_(args.GetIsolate(), &retval_) + , retval_(v8::Persistent::New(v8::Undefined())) {} + + inline ~FunctionCallbackInfo() { + retval_.Dispose(); + retval_.Clear(); + } + + inline ReturnValue GetReturnValue() const { + return ReturnValue(return_value_); + } + + NAN_DEPRECATED inline v8::Local Callee() const { + return args_.Callee(); + } + inline v8::Local Data() const { return data_; } + inline v8::Local Holder() const { + return args_.Holder(); + } + inline bool IsConstructCall() const { return args_.IsConstructCall(); } + inline int Length() const { return args_.Length(); } + inline v8::Local operator[](int i) const { return args_[i]; } + inline v8::Local This() const { return args_.This(); } + inline v8::Isolate *GetIsolate() const { return args_.GetIsolate(); } + + + protected: + static const int kHolderIndex = 0; + static const int kIsolateIndex = 1; + static const int kReturnValueDefaultValueIndex = 2; + static const int kReturnValueIndex = 3; + static const int kDataIndex = 4; + static const int kCalleeIndex = 5; + static const int kContextSaveIndex = 6; + static const int kArgsLength = 7; + + private: + NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo) +}; + +template +class PropertyCallbackInfoBase { + const v8::AccessorInfo &info_; + const v8::Local data_; + + public: + explicit inline PropertyCallbackInfoBase( + const v8::AccessorInfo &info + , const v8::Local data) : + info_(info) + , data_(data) {} + + inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); } + inline v8::Local Data() const { return data_; } + inline v8::Local This() const { return info_.This(); } + inline v8::Local Holder() const { return info_.Holder(); } + + protected: + static const int kHolderIndex = 0; + static const int kIsolateIndex = 1; + static const int kReturnValueDefaultValueIndex = 2; + static const int kReturnValueIndex = 3; + static const int kDataIndex = 4; + static const int kThisIndex = 5; + static const int kArgsLength = 6; + + private: + NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfoBase) +}; + +template +class PropertyCallbackInfo : public PropertyCallbackInfoBase { + ReturnValue return_value_; + v8::Persistent retval_; + + public: + explicit inline PropertyCallbackInfo( + const v8::AccessorInfo &info + , const v8::Local data) : + PropertyCallbackInfoBase(info, data) + , return_value_(info.GetIsolate(), &retval_) + , retval_(v8::Persistent::New(v8::Undefined())) {} + + inline ~PropertyCallbackInfo() { + retval_.Dispose(); + retval_.Clear(); + } + + inline ReturnValue GetReturnValue() const { return return_value_; } +}; + +template<> +class PropertyCallbackInfo : + public PropertyCallbackInfoBase { + ReturnValue return_value_; + v8::Persistent retval_; + + public: + explicit inline PropertyCallbackInfo( + const v8::AccessorInfo &info + , const v8::Local data) : + PropertyCallbackInfoBase(info, data) + , return_value_(info.GetIsolate(), &retval_) + , retval_(v8::Persistent::New(v8::Local())) {} + + inline ~PropertyCallbackInfo() { + retval_.Dispose(); + retval_.Clear(); + } + + inline ReturnValue GetReturnValue() const { + return return_value_; + } +}; + +template<> +class PropertyCallbackInfo : + public PropertyCallbackInfoBase { + ReturnValue return_value_; + v8::Persistent retval_; + + public: + explicit inline PropertyCallbackInfo( + const v8::AccessorInfo &info + , const v8::Local data) : + PropertyCallbackInfoBase(info, data) + , return_value_(info.GetIsolate(), &retval_) + , retval_(v8::Persistent::New(v8::Local())) {} + + inline ~PropertyCallbackInfo() { + retval_.Dispose(); + retval_.Clear(); + } + + inline ReturnValue GetReturnValue() const { + return return_value_; + } +}; + +template<> +class PropertyCallbackInfo : + public PropertyCallbackInfoBase { + ReturnValue return_value_; + v8::Persistent retval_; + + public: + explicit inline PropertyCallbackInfo( + const v8::AccessorInfo &info + , const v8::Local data) : + PropertyCallbackInfoBase(info, data) + , return_value_(info.GetIsolate(), &retval_) + , retval_(v8::Persistent::New(v8::Local())) {} + + inline ~PropertyCallbackInfo() { + retval_.Dispose(); + retval_.Clear(); + } + + inline ReturnValue GetReturnValue() const { + return return_value_; + } +}; + +namespace imp { +template +class ReturnValueImp : public ReturnValue { + public: + explicit ReturnValueImp(ReturnValue that) : + ReturnValue(that) {} + inline v8::Handle Value() { + return *ReturnValue::value_; + } +}; + +static +v8::Handle FunctionCallbackWrapper(const v8::Arguments &args) { + v8::Local obj = args.Data().As(); + FunctionCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kFunctionIndex).As()->Value())); + FunctionCallbackInfo + cbinfo(args, obj->GetInternalField(kDataIndex)); + callback(cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeFunction)(const v8::Arguments &); + +static +v8::Handle GetterCallbackWrapper( + v8::Local property, const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + GetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kGetterIndex).As()->Value())); + callback(property, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeGetter) + (v8::Local, const v8::AccessorInfo &); + +static +void SetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + SetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kSetterIndex).As()->Value())); + callback(property, value, cbinfo); +} + +typedef void (*NativeSetter) + (v8::Local, v8::Local, const v8::AccessorInfo &); + +static +v8::Handle PropertyGetterCallbackWrapper( + v8::Local property, const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + PropertyGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyGetterIndex) + .As()->Value())); + callback(property, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativePropertyGetter) + (v8::Local, const v8::AccessorInfo &); + +static +v8::Handle PropertySetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + PropertySetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertySetterIndex) + .As()->Value())); + callback(property, value, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativePropertySetter) + (v8::Local, v8::Local, const v8::AccessorInfo &); + +static +v8::Handle PropertyEnumeratorCallbackWrapper( + const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + PropertyEnumeratorCallback callback = + reinterpret_cast(reinterpret_cast( + obj->GetInternalField(kPropertyEnumeratorIndex) + .As()->Value())); + callback(cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativePropertyEnumerator) + (const v8::AccessorInfo &); + +static +v8::Handle PropertyDeleterCallbackWrapper( + v8::Local property + , const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + PropertyDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyDeleterIndex) + .As()->Value())); + callback(property, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (NativePropertyDeleter) + (v8::Local, const v8::AccessorInfo &); + +static +v8::Handle PropertyQueryCallbackWrapper( + v8::Local property, const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + PropertyQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyQueryIndex) + .As()->Value())); + callback(property, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativePropertyQuery) + (v8::Local, const v8::AccessorInfo &); + +static +v8::Handle IndexGetterCallbackWrapper( + uint32_t index, const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + IndexGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyGetterIndex) + .As()->Value())); + callback(index, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeIndexGetter) + (uint32_t, const v8::AccessorInfo &); + +static +v8::Handle IndexSetterCallbackWrapper( + uint32_t index + , v8::Local value + , const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + IndexSetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertySetterIndex) + .As()->Value())); + callback(index, value, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeIndexSetter) + (uint32_t, v8::Local, const v8::AccessorInfo &); + +static +v8::Handle IndexEnumeratorCallbackWrapper( + const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + IndexEnumeratorCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyEnumeratorIndex) + .As()->Value())); + callback(cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeIndexEnumerator) + (const v8::AccessorInfo &); + +static +v8::Handle IndexDeleterCallbackWrapper( + uint32_t index, const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + IndexDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyDeleterIndex) + .As()->Value())); + callback(index, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeIndexDeleter) + (uint32_t, const v8::AccessorInfo &); + +static +v8::Handle IndexQueryCallbackWrapper( + uint32_t index, const v8::AccessorInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex)); + IndexQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyQueryIndex) + .As()->Value())); + callback(index, cbinfo); + return ReturnValueImp(cbinfo.GetReturnValue()).Value(); +} + +typedef v8::Handle (*NativeIndexQuery) + (uint32_t, const v8::AccessorInfo &); +} // end of namespace imp + +#endif // NAN_CALLBACKS_PRE_12_INL_H_ diff --git a/.pnpm-store/v11/files/2f/e9de9d5240d8117d0f6c03fae629e946e6393bfe6eb2c97592b38f46ded483ca795cdaba3c7ded4be733567476d06fb1d7c31b18298c42476bf55d87e4878f b/.pnpm-store/v11/files/2f/e9de9d5240d8117d0f6c03fae629e946e6393bfe6eb2c97592b38f46ded483ca795cdaba3c7ded4be733567476d06fb1d7c31b18298c42476bf55d87e4878f new file mode 100644 index 00000000..e58d47e4 --- /dev/null +++ b/.pnpm-store/v11/files/2f/e9de9d5240d8117d0f6c03fae629e946e6393bfe6eb2c97592b38f46ded483ca795cdaba3c7ded4be733567476d06fb1d7c31b18298c42476bf55d87e4878f @@ -0,0 +1,177 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean default false', function (t) { + var argv = parse(['moo'], { + boolean: ['t', 'verbose'], + default: { verbose: false, t: false }, + }); + + t.deepEqual(argv, { + verbose: false, + t: false, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); + +}); + +test('boolean groups', function (t) { + var argv = parse(['-x', '-z', 'one', 'two', 'three'], { + boolean: ['x', 'y', 'z'], + }); + + t.deepEqual(argv, { + x: true, + y: false, + z: true, + _: ['one', 'two', 'three'], + }); + + t.deepEqual(typeof argv.x, 'boolean'); + t.deepEqual(typeof argv.y, 'boolean'); + t.deepEqual(typeof argv.z, 'boolean'); + t.end(); +}); +test('boolean and alias with chainable api', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var aliasedArgv = parse(aliased, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var propertyArgv = parse(regular, { + boolean: 'herp', + alias: { h: 'herp' }, + }); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var opts = { + alias: { h: 'herp' }, + boolean: 'herp', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +test('boolean and alias array with options hash', function (t) { + var aliased = ['-h', 'derp']; + var regular = ['--herp', 'derp']; + var alt = ['--harp', 'derp']; + var opts = { + alias: { h: ['herp', 'harp'] }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var altPropertyArgv = parse(alt, opts); + var expected = { + harp: true, + herp: true, + h: true, + _: ['derp'], + }; + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.same(altPropertyArgv, expected); + t.end(); +}); + +test('boolean and alias using explicit true', function (t) { + var aliased = ['-h', 'true']; + var regular = ['--herp', 'true']; + var opts = { + alias: { h: 'herp' }, + boolean: 'h', + }; + var aliasedArgv = parse(aliased, opts); + var propertyArgv = parse(regular, opts); + var expected = { + herp: true, + h: true, + _: [], + }; + + t.same(aliasedArgv, expected); + t.same(propertyArgv, expected); + t.end(); +}); + +// regression, see https://github.com/substack/node-optimist/issues/71 +test('boolean and --x=true', function (t) { + var parsed = parse(['--boool', '--other=true'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'true'); + + parsed = parse(['--boool', '--other=false'], { + boolean: 'boool', + }); + + t.same(parsed.boool, true); + t.same(parsed.other, 'false'); + t.end(); +}); + +test('boolean --boool=true', function (t) { + var parsed = parse(['--boool=true'], { + default: { + boool: false, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, true); + t.end(); +}); + +test('boolean --boool=false', function (t) { + var parsed = parse(['--boool=false'], { + default: { + boool: true, + }, + boolean: ['boool'], + }); + + t.same(parsed.boool, false); + t.end(); +}); + +test('boolean using something similar to true', function (t) { + var opts = { boolean: 'h' }; + var result = parse(['-h', 'true.txt'], opts); + var expected = { + h: true, + _: ['true.txt'], + }; + + t.same(result, expected); + t.end(); +}); diff --git a/.pnpm-store/v11/files/2f/ef15c89bc8fdcfa9c36bd4f4765a81850ddb2bcb653487bfaee8390e28fe67bffc7b48de4f05d443e9d99ce61173a5b05f82079f3536cc1685137a59b96ce0 b/.pnpm-store/v11/files/2f/ef15c89bc8fdcfa9c36bd4f4765a81850ddb2bcb653487bfaee8390e28fe67bffc7b48de4f05d443e9d99ce61173a5b05f82079f3536cc1685137a59b96ce0 new file mode 100644 index 00000000..d49e93cf --- /dev/null +++ b/.pnpm-store/v11/files/2f/ef15c89bc8fdcfa9c36bd4f4765a81850ddb2bcb653487bfaee8390e28fe67bffc7b48de4f05d443e9d99ce61173a5b05f82079f3536cc1685137a59b96ce0 @@ -0,0 +1,273 @@ +

Neo-Async

+ +

+ +

+ +

+ npm + Travis Status + Coverage Status + download + Code Quality: Javascript + Total Alerts + FOSSA +

+ +Neo-Async is thought to be used as a drop-in replacement for [Async](https://github.com/caolan/async), it almost fully covers its functionality and runs [faster](#benchmark). + +Benchmark is [here](#benchmark)! + +Bluebird's benchmark is [here](https://github.com/suguru03/bluebird/tree/aigle/benchmark)! + +## Code Coverage +![coverage](https://raw.githubusercontent.com/wiki/suguru03/neo-async/images/coverage.png) + +## Installation + +### In a browser +```html + +``` + +### In an AMD loader +```js +require(['async'], function(async) {}); +``` + +### Promise and async/await + +I recommend to use [`Aigle`](https://github.com/suguru03/aigle). + +It is optimized for Promise handling and has almost the same functionality as `neo-async`. + +### Node.js + +#### standard + +```bash +$ npm install neo-async +``` +```js +var async = require('neo-async'); +``` + +#### replacement +```bash +$ npm install neo-async +$ ln -s ./node_modules/neo-async ./node_modules/async +``` +```js +var async = require('async'); +``` + +### Bower + +```bash +bower install neo-async +``` + +## Feature + +[JSDoc](http://suguru03.github.io/neo-async/doc/async.html) + +\* not in Async + +### Collections + +- [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) +- [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) +- [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) +- [`forEach`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) +- [`forEachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) +- [`forEachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) +- [`eachOf`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) +- [`eachOfSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) +- [`eachOfLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`eachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) +- [`forEachOf`](http://suguru03.github.io/neo-async/doc/async.each.html) -> [`each`](http://suguru03.github.io/neo-async/doc/async.each.html) +- [`forEachOfSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) -> [`eachSeries`](http://suguru03.github.io/neo-async/doc/async.eachSeries.html) +- [`eachOfLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) -> [`forEachLimit`](http://suguru03.github.io/neo-async/doc/async.eachLimit.html) +- [`map`](http://suguru03.github.io/neo-async/doc/async.map.html) +- [`mapSeries`](http://suguru03.github.io/neo-async/doc/async.mapSeries.html) +- [`mapLimit`](http://suguru03.github.io/neo-async/doc/async.mapLimit.html) +- [`mapValues`](http://suguru03.github.io/neo-async/doc/async.mapValues.html) +- [`mapValuesSeries`](http://suguru03.github.io/neo-async/doc/async.mapValuesSeries.html) +- [`mapValuesLimit`](http://suguru03.github.io/neo-async/doc/async.mapValuesLimit.html) +- [`filter`](http://suguru03.github.io/neo-async/doc/async.filter.html) +- [`filterSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) +- [`filterLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) +- [`select`](http://suguru03.github.io/neo-async/doc/async.filter.html) -> [`filter`](http://suguru03.github.io/neo-async/doc/async.filter.html) +- [`selectSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) -> [`filterSeries`](http://suguru03.github.io/neo-async/doc/async.filterSeries.html) +- [`selectLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) -> [`filterLimit`](http://suguru03.github.io/neo-async/doc/async.filterLimit.html) +- [`reject`](http://suguru03.github.io/neo-async/doc/async.reject.html) +- [`rejectSeries`](http://suguru03.github.io/neo-async/doc/async.rejectSeries.html) +- [`rejectLimit`](http://suguru03.github.io/neo-async/doc/async.rejectLimit.html) +- [`detect`](http://suguru03.github.io/neo-async/doc/async.detect.html) +- [`detectSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) +- [`detectLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) +- [`find`](http://suguru03.github.io/neo-async/doc/async.detect.html) -> [`detect`](http://suguru03.github.io/neo-async/doc/async.detect.html) +- [`findSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) -> [`detectSeries`](http://suguru03.github.io/neo-async/doc/async.detectSeries.html) +- [`findLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) -> [`detectLimit`](http://suguru03.github.io/neo-async/doc/async.detectLimit.html) +- [`pick`](http://suguru03.github.io/neo-async/doc/async.pick.html) * +- [`pickSeries`](http://suguru03.github.io/neo-async/doc/async.pickSeries.html) * +- [`pickLimit`](http://suguru03.github.io/neo-async/doc/async.pickLimit.html) * +- [`omit`](http://suguru03.github.io/neo-async/doc/async.omit.html) * +- [`omitSeries`](http://suguru03.github.io/neo-async/doc/async.omitSeries.html) * +- [`omitLimit`](http://suguru03.github.io/neo-async/doc/async.omitLimit.html) * +- [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html) +- [`inject`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -> [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html) +- [`foldl`](http://suguru03.github.io/neo-async/doc/async.reduce.html) -> [`reduce`](http://suguru03.github.io/neo-async/doc/async.reduce.html) +- [`reduceRight`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) +- [`foldr`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) -> [`reduceRight`](http://suguru03.github.io/neo-async/doc/async.reduceRight.html) +- [`transform`](http://suguru03.github.io/neo-async/doc/async.transform.html) +- [`transformSeries`](http://suguru03.github.io/neo-async/doc/async.transformSeries.html) * +- [`transformLimit`](http://suguru03.github.io/neo-async/doc/async.transformLimit.html) * +- [`sortBy`](http://suguru03.github.io/neo-async/doc/async.sortBy.html) +- [`sortBySeries`](http://suguru03.github.io/neo-async/doc/async.sortBySeries.html) * +- [`sortByLimit`](http://suguru03.github.io/neo-async/doc/async.sortByLimit.html) * +- [`some`](http://suguru03.github.io/neo-async/doc/async.some.html) +- [`someSeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) +- [`someLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) +- [`any`](http://suguru03.github.io/neo-async/doc/async.some.html) -> [`some`](http://suguru03.github.io/neo-async/doc/async.some.html) +- [`anySeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) -> [`someSeries`](http://suguru03.github.io/neo-async/doc/async.someSeries.html) +- [`anyLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) -> [`someLimit`](http://suguru03.github.io/neo-async/doc/async.someLimit.html) +- [`every`](http://suguru03.github.io/neo-async/doc/async.every.html) +- [`everySeries`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) +- [`everyLimit`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) +- [`all`](http://suguru03.github.io/neo-async/doc/async.every.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.every.html) +- [`allSeries`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.everySeries.html) +- [`allLimit`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) -> [`every`](http://suguru03.github.io/neo-async/doc/async.everyLimit.html) +- [`concat`](http://suguru03.github.io/neo-async/doc/async.concat.html) +- [`concatSeries`](http://suguru03.github.io/neo-async/doc/async.concatSeries.html) +- [`concatLimit`](http://suguru03.github.io/neo-async/doc/async.concatLimit.html) * + +### Control Flow + +- [`parallel`](http://suguru03.github.io/neo-async/doc/async.parallel.html) +- [`series`](http://suguru03.github.io/neo-async/doc/async.series.html) +- [`parallelLimit`](http://suguru03.github.io/neo-async/doc/async.series.html) +- [`tryEach`](http://suguru03.github.io/neo-async/doc/async.tryEach.html) +- [`waterfall`](http://suguru03.github.io/neo-async/doc/async.waterfall.html) +- [`angelFall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) * +- [`angelfall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) -> [`angelFall`](http://suguru03.github.io/neo-async/doc/async.angelFall.html) * +- [`whilst`](#whilst) +- [`doWhilst`](#doWhilst) +- [`until`](#until) +- [`doUntil`](#doUntil) +- [`during`](#during) +- [`doDuring`](#doDuring) +- [`forever`](#forever) +- [`compose`](#compose) +- [`seq`](#seq) +- [`applyEach`](#applyEach) +- [`applyEachSeries`](#applyEachSeries) +- [`queue`](#queue) +- [`priorityQueue`](#priorityQueue) +- [`cargo`](#cargo) +- [`auto`](#auto) +- [`autoInject`](#autoInject) +- [`retry`](#retry) +- [`retryable`](#retryable) +- [`iterator`](#iterator) +- [`times`](http://suguru03.github.io/neo-async/doc/async.times.html) +- [`timesSeries`](http://suguru03.github.io/neo-async/doc/async.timesSeries.html) +- [`timesLimit`](http://suguru03.github.io/neo-async/doc/async.timesLimit.html) +- [`race`](#race) + +### Utils +- [`apply`](#apply) +- [`setImmediate`](#setImmediate) +- [`nextTick`](#nextTick) +- [`memoize`](#memoize) +- [`unmemoize`](#unmemoize) +- [`ensureAsync`](#ensureAsync) +- [`constant`](#constant) +- [`asyncify`](#asyncify) +- [`wrapSync`](#asyncify) -> [`asyncify`](#asyncify) +- [`log`](#log) +- [`dir`](#dir) +- [`timeout`](http://suguru03.github.io/neo-async/doc/async.timeout.html) +- [`reflect`](#reflect) +- [`reflectAll`](#reflectAll) +- [`createLogger`](#createLogger) + +## Mode +- [`safe`](#safe) * +- [`fast`](#fast) * + +## Benchmark + +[Benchmark: Async vs Neo-Async](http://suguru03.hatenablog.com/entry/2016/06/10/135559) + +### How to check + +```bash +$ node perf +``` + +### Environment + +* Darwin 17.3.0 x64 +* Node.js v8.9.4 +* async v2.6.0 +* neo-async v2.5.0 +* benchmark v2.1.4 + +### Result + +The value is the ratio (Neo-Async/Async) of the average speed. + +#### Collections +|function|benchmark| +|---|--:| +|each/forEach|2.43| +|eachSeries/forEachSeries|1.75| +|eachLimit/forEachLimit|1.68| +|eachOf|3.29| +|eachOfSeries|1.50| +|eachOfLimit|1.59| +|map|3.95| +|mapSeries|1.81| +|mapLimit|1.27| +|mapValues|2.73| +|mapValuesSeries|1.59| +|mapValuesLimit|1.23| +|filter|3.00| +|filterSeries|1.74| +|filterLimit|1.17| +|reject|4.59| +|rejectSeries|2.31| +|rejectLimit|1.58| +|detect|4.30| +|detectSeries|1.86| +|detectLimit|1.32| +|reduce|1.82| +|transform|2.46| +|sortBy|4.08| +|some|2.19| +|someSeries|1.83| +|someLimit|1.32| +|every|2.09| +|everySeries|1.84| +|everyLimit|1.35| +|concat|3.79| +|concatSeries|4.45| + +#### Control Flow +|funciton|benchmark| +|---|--:| +|parallel|2.93| +|series|1.96| +|waterfall|1.29| +|whilst|1.00| +|doWhilst|1.12| +|until|1.12| +|doUntil|1.12| +|during|1.18| +|doDuring|2.42| +|times|4.25| +|auto|1.97| + + +## License +[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fsuguru03%2Fneo-async?ref=badge_large) diff --git a/.pnpm-store/v11/files/30/11c6086ab3142ddca77a38a0cb6d679bb9315fbcae2243a246514950175a91a57b53a3fa6b01281a47c48518e8abe247a63243c9cbc4434858d7133d875ded b/.pnpm-store/v11/files/30/11c6086ab3142ddca77a38a0cb6d679bb9315fbcae2243a246514950175a91a57b53a3fa6b01281a47c48518e8abe247a63243c9cbc4434858d7133d875ded new file mode 100644 index 00000000..33bb5516 --- /dev/null +++ b/.pnpm-store/v11/files/30/11c6086ab3142ddca77a38a0cb6d679bb9315fbcae2243a246514950175a91a57b53a3fa6b01281a47c48518e8abe247a63243c9cbc4434858d7133d875ded @@ -0,0 +1,445 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// + +/** + * A typed array of 16-bit float values. The contents are initialized to 0. If the requested number + * of bytes could not be allocated an exception is raised. + */ +interface Float16Array { + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * The ArrayBuffer instance referenced by the array. + */ + readonly buffer: TArrayBuffer; + + /** + * The length in bytes of the array. + */ + readonly byteLength: number; + + /** + * The offset in bytes of the array. + */ + readonly byteOffset: number; + + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; + + /** + * Returns the this object after copying a section of the array identified by start and end + * to the same array starting at position target + * @param target If target is negative, it is treated as length+target where length is the + * length of the array. + * @param start If start is negative, it is treated as length+start. If end is negative, it + * is treated as length+end. + * @param end If not specified, length of the this object is used as its default value. + */ + copyWithin(target: number, start: number, end?: number): this; + + /** + * Determines whether all the members of an array satisfy the specified test. + * @param predicate A function that accepts up to three arguments. The every method calls + * the predicate function for each element in the array until the predicate returns a value + * which is coercible to the Boolean value false, or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the predicate function. + * If thisArg is omitted, undefined is used as the this value. + */ + every(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): boolean; + + /** + * Changes all array elements from `start` to `end` index to a static `value` and returns the modified array + * @param value value to fill array section with + * @param start index to start filling the array at. If start is negative, it is treated as + * length+start where length is the length of the array. + * @param end index to stop filling the array at. If end is negative, it is treated as + * length+end. + */ + fill(value: number, start?: number, end?: number): this; + + /** + * Returns the elements of an array that meet the condition specified in a callback function. + * @param predicate A function that accepts up to three arguments. The filter method calls + * the predicate function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the predicate function. + * If thisArg is omitted, undefined is used as the this value. + */ + filter(predicate: (value: number, index: number, array: this) => any, thisArg?: any): Float16Array; + + /** + * Returns the value of the first element in the array where predicate is true, and undefined + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, find + * immediately returns that element value. Otherwise, find returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + find(predicate: (value: number, index: number, obj: this) => boolean, thisArg?: any): number | undefined; + + /** + * Returns the index of the first element in the array where predicate is true, and -1 + * otherwise. + * @param predicate find calls predicate once for each element of the array, in ascending + * order, until it finds one where predicate returns true. If such an element is found, + * findIndex immediately returns that element index. Otherwise, findIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findIndex(predicate: (value: number, index: number, obj: this) => boolean, thisArg?: any): number; + + /** + * Returns the value of the last element in the array where predicate is true, and undefined + * otherwise. + * @param predicate findLast calls predicate once for each element of the array, in descending + * order, until it finds one where predicate returns true. If such an element is found, findLast + * immediately returns that element value. Otherwise, findLast returns undefined. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findLast( + predicate: ( + value: number, + index: number, + array: this, + ) => value is S, + thisArg?: any, + ): S | undefined; + findLast( + predicate: ( + value: number, + index: number, + array: this, + ) => unknown, + thisArg?: any, + ): number | undefined; + + /** + * Returns the index of the last element in the array where predicate is true, and -1 + * otherwise. + * @param predicate findLastIndex calls predicate once for each element of the array, in descending + * order, until it finds one where predicate returns true. If such an element is found, + * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1. + * @param thisArg If provided, it will be used as the this value for each invocation of + * predicate. If it is not provided, undefined is used instead. + */ + findLastIndex( + predicate: ( + value: number, + index: number, + array: this, + ) => unknown, + thisArg?: any, + ): number; + + /** + * Performs the specified action for each element in an array. + * @param callbackfn A function that accepts up to three arguments. forEach calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + forEach(callbackfn: (value: number, index: number, array: this) => void, thisArg?: any): void; + + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; + + /** + * Returns the index of the first occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + indexOf(searchElement: number, fromIndex?: number): number; + + /** + * Adds all the elements of an array separated by the specified separator string. + * @param separator A string used to separate one element of an array from the next in the + * resulting String. If omitted, the array elements are separated with a comma. + */ + join(separator?: string): string; + + /** + * Returns the index of the last occurrence of a value in an array. + * @param searchElement The value to locate in the array. + * @param fromIndex The array index at which to begin the search. If fromIndex is omitted, the + * search starts at index 0. + */ + lastIndexOf(searchElement: number, fromIndex?: number): number; + + /** + * The length of the array. + */ + readonly length: number; + + /** + * Calls a defined callback function on each element of an array, and returns an array that + * contains the results. + * @param callbackfn A function that accepts up to three arguments. The map method calls the + * callbackfn function one time for each element in the array. + * @param thisArg An object to which the this keyword can refer in the callbackfn function. + * If thisArg is omitted, undefined is used as the this value. + */ + map(callbackfn: (value: number, index: number, array: this) => number, thisArg?: any): Float16Array; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number): number; + reduce(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array. The return value of + * the callback function is the accumulated result, and is provided as an argument in the next + * call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduce method calls the + * callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduce(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: this) => U, initialValue: U): U; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an + * argument instead of an array value. + */ + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number): number; + reduceRight(callbackfn: (previousValue: number, currentValue: number, currentIndex: number, array: this) => number, initialValue: number): number; + + /** + * Calls the specified callback function for all the elements in an array, in descending order. + * The return value of the callback function is the accumulated result, and is provided as an + * argument in the next call to the callback function. + * @param callbackfn A function that accepts up to four arguments. The reduceRight method calls + * the callbackfn function one time for each element in the array. + * @param initialValue If initialValue is specified, it is used as the initial value to start + * the accumulation. The first call to the callbackfn function provides this value as an argument + * instead of an array value. + */ + reduceRight(callbackfn: (previousValue: U, currentValue: number, currentIndex: number, array: this) => U, initialValue: U): U; + + /** + * Reverses the elements in an Array. + */ + reverse(): this; + + /** + * Sets a value or an array of values. + * @param array A typed or untyped array of values to set. + * @param offset The index in the current array at which the values are to be written. + */ + set(array: ArrayLike, offset?: number): void; + + /** + * Returns a section of an array. + * @param start The beginning of the specified portion of the array. + * @param end The end of the specified portion of the array. This is exclusive of the element at the index 'end'. + */ + slice(start?: number, end?: number): Float16Array; + + /** + * Determines whether the specified callback function returns true for any element of an array. + * @param predicate A function that accepts up to three arguments. The some method calls + * the predicate function for each element in the array until the predicate returns a value + * which is coercible to the Boolean value true, or until the end of the array. + * @param thisArg An object to which the this keyword can refer in the predicate function. + * If thisArg is omitted, undefined is used as the this value. + */ + some(predicate: (value: number, index: number, array: this) => unknown, thisArg?: any): boolean; + + /** + * Sorts an array. + * @param compareFn Function used to determine the order of the elements. It is expected to return + * a negative value if first argument is less than second argument, zero if they're equal and a positive + * value otherwise. If omitted, the elements are sorted in ascending order. + * ```ts + * [11,2,22,1].sort((a, b) => a - b) + * ``` + */ + sort(compareFn?: (a: number, b: number) => number): this; + + /** + * Gets a new Float16Array view of the ArrayBuffer store for this array, referencing the elements + * at begin, inclusive, up to end, exclusive. + * @param begin The index of the beginning of the array. + * @param end The index of the end of the array. + */ + subarray(begin?: number, end?: number): Float16Array; + + /** + * Converts a number to a string by using the current locale. + */ + toLocaleString(locales?: string | string[], options?: Intl.NumberFormatOptions): string; + + /** + * Copies the array and returns the copy with the elements in reverse order. + */ + toReversed(): Float16Array; + + /** + * Copies and sorts the array. + * @param compareFn Function used to determine the order of the elements. It is expected to return + * a negative value if the first argument is less than the second argument, zero if they're equal, and a positive + * value otherwise. If omitted, the elements are sorted in ascending order. + * ```ts + * const myNums = Float16Array.from([11.25, 2, -22.5, 1]); + * myNums.toSorted((a, b) => a - b) // Float16Array(4) [-22.5, 1, 2, 11.5] + * ``` + */ + toSorted(compareFn?: (a: number, b: number) => number): Float16Array; + + /** + * Returns a string representation of an array. + */ + toString(): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): this; + + /** + * Copies the array and inserts the given number at the provided index. + * @param index The index of the value to overwrite. If the index is + * negative, then it replaces from the end of the array. + * @param value The value to insert into the copied array. + * @returns A copy of the original array with the inserted value. + */ + with(index: number, value: number): Float16Array; + + [index: number]: number; + + [Symbol.iterator](): ArrayIterator; + + /** + * Returns an array of key, value pairs for every entry in the array + */ + entries(): ArrayIterator<[number, number]>; + + /** + * Returns an list of keys in the array + */ + keys(): ArrayIterator; + + /** + * Returns an list of values in the array + */ + values(): ArrayIterator; + + readonly [Symbol.toStringTag]: "Float16Array"; +} + +interface Float16ArrayConstructor { + readonly prototype: Float16Array; + new (length?: number): Float16Array; + new (array: ArrayLike | Iterable): Float16Array; + new (buffer: TArrayBuffer, byteOffset?: number, length?: number): Float16Array; + new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float16Array; + new (array: ArrayLike | ArrayBuffer): Float16Array; + + /** + * The size in bytes of each element in the array. + */ + readonly BYTES_PER_ELEMENT: number; + + /** + * Returns a new array from a set of elements. + * @param items A set of elements to include in the new array object. + */ + of(...items: number[]): Float16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like object to convert to an array. + */ + from(arrayLike: ArrayLike): Float16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param arrayLike An array-like object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(arrayLike: ArrayLike, mapfn: (v: T, k: number) => number, thisArg?: any): Float16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param elements An iterable object to convert to an array. + */ + from(elements: Iterable): Float16Array; + + /** + * Creates an array from an array-like or iterable object. + * @param elements An iterable object to convert to an array. + * @param mapfn A mapping function to call on every element of the array. + * @param thisArg Value of 'this' used to invoke the mapfn. + */ + from(elements: Iterable, mapfn?: (v: T, k: number) => number, thisArg?: any): Float16Array; +} +declare var Float16Array: Float16ArrayConstructor; + +interface Math { + /** + * Returns the nearest half precision float representation of a number. + * @param x A numeric expression. + */ + f16round(x: number): number; +} + +interface DataView { + /** + * Gets the Float16 value at the specified byte offset from the start of the view. There is + * no alignment constraint; multi-byte values may be fetched from any offset. + * @param byteOffset The place in the buffer at which the value should be retrieved. + * @param littleEndian If false or undefined, a big-endian value should be read. + */ + getFloat16(byteOffset: number, littleEndian?: boolean): number; + + /** + * Stores an Float16 value at the specified byte offset from the start of the view. + * @param byteOffset The place in the buffer at which the value should be set. + * @param value The value to set. + * @param littleEndian If false or undefined, a big-endian value should be written. + */ + setFloat16(byteOffset: number, value: number, littleEndian?: boolean): void; +} diff --git a/.pnpm-store/v11/files/30/354b7005619a9c0197536288406507b641fb4b12caf27e0265592d269dda556dac96ba1bca9b4c8dc11ec71f2de95c1dcb93fa8b55f98dc7d2f474563624bc b/.pnpm-store/v11/files/30/354b7005619a9c0197536288406507b641fb4b12caf27e0265592d269dda556dac96ba1bca9b4c8dc11ec71f2de95c1dcb93fa8b55f98dc7d2f474563624bc new file mode 100644 index 00000000..0f966805 --- /dev/null +++ b/.pnpm-store/v11/files/30/354b7005619a9c0197536288406507b641fb4b12caf27e0265592d269dda556dac96ba1bca9b4c8dc11ec71f2de95c1dcb93fa8b55f98dc7d2f474563624bc @@ -0,0 +1,33 @@ +var isFunction = require('./isFunction'), + isLength = require('./isLength'); + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +module.exports = isArrayLike; diff --git a/.pnpm-store/v11/files/30/36cb836a216e060d2c1099a531c9169f224dba321054db9e33c9ae60fc286d310224eaa39de718c0a917cdc9e63cfa6db666bf8ef73efbd7e51d4a3983ce55 b/.pnpm-store/v11/files/30/36cb836a216e060d2c1099a531c9169f224dba321054db9e33c9ae60fc286d310224eaa39de718c0a917cdc9e63cfa6db666bf8ef73efbd7e51d4a3983ce55 new file mode 100644 index 00000000..a0f68160 --- /dev/null +++ b/.pnpm-store/v11/files/30/36cb836a216e060d2c1099a531c9169f224dba321054db9e33c9ae60fc286d310224eaa39de718c0a917cdc9e63cfa6db666bf8ef73efbd7e51d4a3983ce55 @@ -0,0 +1,41 @@ +TN: +SF:/Users/isaacs/dev/js/events-to-array/etoa.js +FN:4,eventsToArray +FN:6,(anonymous_1) +FN:9,(anonymous_2) +FN:10,etoaWrap +FNF:4 +FNH:4 +FNDA:2,eventsToArray +FNDA:7,(anonymous_1) +FNDA:2,(anonymous_2) +FNDA:9,etoaWrap +DA:1,1 +DA:3,1 +DA:5,2 +DA:6,7 +DA:7,2 +DA:9,2 +DA:10,2 +DA:11,9 +DA:12,7 +DA:13,7 +DA:14,7 +DA:15,19 +DA:16,19 +DA:20,7 +DA:23,9 +DA:27,2 +LF:16 +LH:16 +BRDA:5,0,0,2 +BRDA:5,0,1,0 +BRDA:6,1,0,2 +BRDA:6,1,1,2 +BRDA:11,2,0,7 +BRDA:11,2,1,2 +BRDA:16,3,0,1 +BRDA:16,3,1,18 +BRF:8 +BRH:7 +end_of_record diff --git a/.pnpm-store/v11/files/30/4af6031e573689a591c9bd90e35ead4f75baba5400291ed7ed5cc90f0a1df25e52042d7eb4471f6b42d2e540371cff21259b0654d8d78d1f8b440561df5d7c b/.pnpm-store/v11/files/30/4af6031e573689a591c9bd90e35ead4f75baba5400291ed7ed5cc90f0a1df25e52042d7eb4471f6b42d2e540371cff21259b0654d8d78d1f8b440561df5d7c new file mode 100644 index 00000000..7a88df20 --- /dev/null +++ b/.pnpm-store/v11/files/30/4af6031e573689a591c9bd90e35ead4f75baba5400291ed7ed5cc90f0a1df25e52042d7eb4471f6b42d2e540371cff21259b0654d8d78d1f8b440561df5d7c @@ -0,0 +1 @@ +module.exports = require('./toPairs'); diff --git a/.pnpm-store/v11/files/30/6645a784630c7ab02badf26e2db007579b149b1044ba9f8bcca9b95d374f984d6545f059d7752ba404693fc0b61e39147d3b777ead77c88259e884ef78e119 b/.pnpm-store/v11/files/30/6645a784630c7ab02badf26e2db007579b149b1044ba9f8bcca9b95d374f984d6545f059d7752ba404693fc0b61e39147d3b777ead77c88259e884ef78e119 new file mode 100644 index 00000000..c39d8d8e --- /dev/null +++ b/.pnpm-store/v11/files/30/6645a784630c7ab02badf26e2db007579b149b1044ba9f8bcca9b95d374f984d6545f059d7752ba404693fc0b61e39147d3b777ead77c88259e884ef78e119 @@ -0,0 +1,582 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.wrapSync = exports.selectSeries = exports.selectLimit = exports.select = exports.foldr = exports.foldl = exports.inject = exports.forEachOfLimit = exports.forEachOfSeries = exports.forEachOf = exports.forEachLimit = exports.forEachSeries = exports.forEach = exports.findSeries = exports.findLimit = exports.find = exports.anySeries = exports.anyLimit = exports.any = exports.allSeries = exports.allLimit = exports.all = exports.whilst = exports.waterfall = exports.until = exports.unmemoize = exports.tryEach = exports.transform = exports.timesSeries = exports.timesLimit = exports.times = exports.timeout = exports.sortBy = exports.someSeries = exports.someLimit = exports.some = exports.setImmediate = exports.series = exports.seq = exports.retryable = exports.retry = exports.rejectSeries = exports.rejectLimit = exports.reject = exports.reflectAll = exports.reflect = exports.reduceRight = exports.reduce = exports.race = exports.queue = exports.priorityQueue = exports.parallelLimit = exports.parallel = exports.nextTick = exports.memoize = exports.mapValuesSeries = exports.mapValuesLimit = exports.mapValues = exports.mapSeries = exports.mapLimit = exports.map = exports.log = exports.groupBySeries = exports.groupByLimit = exports.groupBy = exports.forever = exports.filterSeries = exports.filterLimit = exports.filter = exports.everySeries = exports.everyLimit = exports.every = exports.ensureAsync = exports.eachSeries = exports.eachOfSeries = exports.eachOfLimit = exports.eachOf = exports.eachLimit = exports.each = exports.during = exports.doWhilst = exports.doUntil = exports.doDuring = exports.dir = exports.detectSeries = exports.detectLimit = exports.detect = exports.constant = exports.concatSeries = exports.concatLimit = exports.concat = exports.compose = exports.cargo = exports.autoInject = exports.auto = exports.asyncify = exports.applyEachSeries = exports.applyEach = exports.apply = undefined; + +var _apply = require('./apply'); + +var _apply2 = _interopRequireDefault(_apply); + +var _applyEach = require('./applyEach'); + +var _applyEach2 = _interopRequireDefault(_applyEach); + +var _applyEachSeries = require('./applyEachSeries'); + +var _applyEachSeries2 = _interopRequireDefault(_applyEachSeries); + +var _asyncify = require('./asyncify'); + +var _asyncify2 = _interopRequireDefault(_asyncify); + +var _auto = require('./auto'); + +var _auto2 = _interopRequireDefault(_auto); + +var _autoInject = require('./autoInject'); + +var _autoInject2 = _interopRequireDefault(_autoInject); + +var _cargo = require('./cargo'); + +var _cargo2 = _interopRequireDefault(_cargo); + +var _compose = require('./compose'); + +var _compose2 = _interopRequireDefault(_compose); + +var _concat = require('./concat'); + +var _concat2 = _interopRequireDefault(_concat); + +var _concatLimit = require('./concatLimit'); + +var _concatLimit2 = _interopRequireDefault(_concatLimit); + +var _concatSeries = require('./concatSeries'); + +var _concatSeries2 = _interopRequireDefault(_concatSeries); + +var _constant = require('./constant'); + +var _constant2 = _interopRequireDefault(_constant); + +var _detect = require('./detect'); + +var _detect2 = _interopRequireDefault(_detect); + +var _detectLimit = require('./detectLimit'); + +var _detectLimit2 = _interopRequireDefault(_detectLimit); + +var _detectSeries = require('./detectSeries'); + +var _detectSeries2 = _interopRequireDefault(_detectSeries); + +var _dir = require('./dir'); + +var _dir2 = _interopRequireDefault(_dir); + +var _doDuring = require('./doDuring'); + +var _doDuring2 = _interopRequireDefault(_doDuring); + +var _doUntil = require('./doUntil'); + +var _doUntil2 = _interopRequireDefault(_doUntil); + +var _doWhilst = require('./doWhilst'); + +var _doWhilst2 = _interopRequireDefault(_doWhilst); + +var _during = require('./during'); + +var _during2 = _interopRequireDefault(_during); + +var _each = require('./each'); + +var _each2 = _interopRequireDefault(_each); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _eachOf = require('./eachOf'); + +var _eachOf2 = _interopRequireDefault(_eachOf); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _eachOfSeries = require('./eachOfSeries'); + +var _eachOfSeries2 = _interopRequireDefault(_eachOfSeries); + +var _eachSeries = require('./eachSeries'); + +var _eachSeries2 = _interopRequireDefault(_eachSeries); + +var _ensureAsync = require('./ensureAsync'); + +var _ensureAsync2 = _interopRequireDefault(_ensureAsync); + +var _every = require('./every'); + +var _every2 = _interopRequireDefault(_every); + +var _everyLimit = require('./everyLimit'); + +var _everyLimit2 = _interopRequireDefault(_everyLimit); + +var _everySeries = require('./everySeries'); + +var _everySeries2 = _interopRequireDefault(_everySeries); + +var _filter = require('./filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _filterLimit = require('./filterLimit'); + +var _filterLimit2 = _interopRequireDefault(_filterLimit); + +var _filterSeries = require('./filterSeries'); + +var _filterSeries2 = _interopRequireDefault(_filterSeries); + +var _forever = require('./forever'); + +var _forever2 = _interopRequireDefault(_forever); + +var _groupBy = require('./groupBy'); + +var _groupBy2 = _interopRequireDefault(_groupBy); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +var _groupBySeries = require('./groupBySeries'); + +var _groupBySeries2 = _interopRequireDefault(_groupBySeries); + +var _log = require('./log'); + +var _log2 = _interopRequireDefault(_log); + +var _map = require('./map'); + +var _map2 = _interopRequireDefault(_map); + +var _mapLimit = require('./mapLimit'); + +var _mapLimit2 = _interopRequireDefault(_mapLimit); + +var _mapSeries = require('./mapSeries'); + +var _mapSeries2 = _interopRequireDefault(_mapSeries); + +var _mapValues = require('./mapValues'); + +var _mapValues2 = _interopRequireDefault(_mapValues); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _mapValuesSeries = require('./mapValuesSeries'); + +var _mapValuesSeries2 = _interopRequireDefault(_mapValuesSeries); + +var _memoize = require('./memoize'); + +var _memoize2 = _interopRequireDefault(_memoize); + +var _nextTick = require('./nextTick'); + +var _nextTick2 = _interopRequireDefault(_nextTick); + +var _parallel = require('./parallel'); + +var _parallel2 = _interopRequireDefault(_parallel); + +var _parallelLimit = require('./parallelLimit'); + +var _parallelLimit2 = _interopRequireDefault(_parallelLimit); + +var _priorityQueue = require('./priorityQueue'); + +var _priorityQueue2 = _interopRequireDefault(_priorityQueue); + +var _queue = require('./queue'); + +var _queue2 = _interopRequireDefault(_queue); + +var _race = require('./race'); + +var _race2 = _interopRequireDefault(_race); + +var _reduce = require('./reduce'); + +var _reduce2 = _interopRequireDefault(_reduce); + +var _reduceRight = require('./reduceRight'); + +var _reduceRight2 = _interopRequireDefault(_reduceRight); + +var _reflect = require('./reflect'); + +var _reflect2 = _interopRequireDefault(_reflect); + +var _reflectAll = require('./reflectAll'); + +var _reflectAll2 = _interopRequireDefault(_reflectAll); + +var _reject = require('./reject'); + +var _reject2 = _interopRequireDefault(_reject); + +var _rejectLimit = require('./rejectLimit'); + +var _rejectLimit2 = _interopRequireDefault(_rejectLimit); + +var _rejectSeries = require('./rejectSeries'); + +var _rejectSeries2 = _interopRequireDefault(_rejectSeries); + +var _retry = require('./retry'); + +var _retry2 = _interopRequireDefault(_retry); + +var _retryable = require('./retryable'); + +var _retryable2 = _interopRequireDefault(_retryable); + +var _seq = require('./seq'); + +var _seq2 = _interopRequireDefault(_seq); + +var _series = require('./series'); + +var _series2 = _interopRequireDefault(_series); + +var _setImmediate = require('./setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +var _some = require('./some'); + +var _some2 = _interopRequireDefault(_some); + +var _someLimit = require('./someLimit'); + +var _someLimit2 = _interopRequireDefault(_someLimit); + +var _someSeries = require('./someSeries'); + +var _someSeries2 = _interopRequireDefault(_someSeries); + +var _sortBy = require('./sortBy'); + +var _sortBy2 = _interopRequireDefault(_sortBy); + +var _timeout = require('./timeout'); + +var _timeout2 = _interopRequireDefault(_timeout); + +var _times = require('./times'); + +var _times2 = _interopRequireDefault(_times); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _timesSeries = require('./timesSeries'); + +var _timesSeries2 = _interopRequireDefault(_timesSeries); + +var _transform = require('./transform'); + +var _transform2 = _interopRequireDefault(_transform); + +var _tryEach = require('./tryEach'); + +var _tryEach2 = _interopRequireDefault(_tryEach); + +var _unmemoize = require('./unmemoize'); + +var _unmemoize2 = _interopRequireDefault(_unmemoize); + +var _until = require('./until'); + +var _until2 = _interopRequireDefault(_until); + +var _waterfall = require('./waterfall'); + +var _waterfall2 = _interopRequireDefault(_waterfall); + +var _whilst = require('./whilst'); + +var _whilst2 = _interopRequireDefault(_whilst); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.default = { + apply: _apply2.default, + applyEach: _applyEach2.default, + applyEachSeries: _applyEachSeries2.default, + asyncify: _asyncify2.default, + auto: _auto2.default, + autoInject: _autoInject2.default, + cargo: _cargo2.default, + compose: _compose2.default, + concat: _concat2.default, + concatLimit: _concatLimit2.default, + concatSeries: _concatSeries2.default, + constant: _constant2.default, + detect: _detect2.default, + detectLimit: _detectLimit2.default, + detectSeries: _detectSeries2.default, + dir: _dir2.default, + doDuring: _doDuring2.default, + doUntil: _doUntil2.default, + doWhilst: _doWhilst2.default, + during: _during2.default, + each: _each2.default, + eachLimit: _eachLimit2.default, + eachOf: _eachOf2.default, + eachOfLimit: _eachOfLimit2.default, + eachOfSeries: _eachOfSeries2.default, + eachSeries: _eachSeries2.default, + ensureAsync: _ensureAsync2.default, + every: _every2.default, + everyLimit: _everyLimit2.default, + everySeries: _everySeries2.default, + filter: _filter2.default, + filterLimit: _filterLimit2.default, + filterSeries: _filterSeries2.default, + forever: _forever2.default, + groupBy: _groupBy2.default, + groupByLimit: _groupByLimit2.default, + groupBySeries: _groupBySeries2.default, + log: _log2.default, + map: _map2.default, + mapLimit: _mapLimit2.default, + mapSeries: _mapSeries2.default, + mapValues: _mapValues2.default, + mapValuesLimit: _mapValuesLimit2.default, + mapValuesSeries: _mapValuesSeries2.default, + memoize: _memoize2.default, + nextTick: _nextTick2.default, + parallel: _parallel2.default, + parallelLimit: _parallelLimit2.default, + priorityQueue: _priorityQueue2.default, + queue: _queue2.default, + race: _race2.default, + reduce: _reduce2.default, + reduceRight: _reduceRight2.default, + reflect: _reflect2.default, + reflectAll: _reflectAll2.default, + reject: _reject2.default, + rejectLimit: _rejectLimit2.default, + rejectSeries: _rejectSeries2.default, + retry: _retry2.default, + retryable: _retryable2.default, + seq: _seq2.default, + series: _series2.default, + setImmediate: _setImmediate2.default, + some: _some2.default, + someLimit: _someLimit2.default, + someSeries: _someSeries2.default, + sortBy: _sortBy2.default, + timeout: _timeout2.default, + times: _times2.default, + timesLimit: _timesLimit2.default, + timesSeries: _timesSeries2.default, + transform: _transform2.default, + tryEach: _tryEach2.default, + unmemoize: _unmemoize2.default, + until: _until2.default, + waterfall: _waterfall2.default, + whilst: _whilst2.default, + + // aliases + all: _every2.default, + allLimit: _everyLimit2.default, + allSeries: _everySeries2.default, + any: _some2.default, + anyLimit: _someLimit2.default, + anySeries: _someSeries2.default, + find: _detect2.default, + findLimit: _detectLimit2.default, + findSeries: _detectSeries2.default, + forEach: _each2.default, + forEachSeries: _eachSeries2.default, + forEachLimit: _eachLimit2.default, + forEachOf: _eachOf2.default, + forEachOfSeries: _eachOfSeries2.default, + forEachOfLimit: _eachOfLimit2.default, + inject: _reduce2.default, + foldl: _reduce2.default, + foldr: _reduceRight2.default, + select: _filter2.default, + selectLimit: _filterLimit2.default, + selectSeries: _filterSeries2.default, + wrapSync: _asyncify2.default +}; /** + * An "async function" in the context of Async is an asynchronous function with + * a variable number of parameters, with the final parameter being a callback. + * (`function (arg1, arg2, ..., callback) {}`) + * The final callback is of the form `callback(err, results...)`, which must be + * called once the function is completed. The callback should be called with a + * Error as its first argument to signal that an error occurred. + * Otherwise, if no error occurred, it should be called with `null` as the first + * argument, and any additional `result` arguments that may apply, to signal + * successful completion. + * The callback must be called exactly once, ideally on a later tick of the + * JavaScript event loop. + * + * This type of function is also referred to as a "Node-style async function", + * or a "continuation passing-style function" (CPS). Most of the methods of this + * library are themselves CPS/Node-style async functions, or functions that + * return CPS/Node-style async functions. + * + * Wherever we accept a Node-style async function, we also directly accept an + * [ES2017 `async` function]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function}. + * In this case, the `async` function will not be passed a final callback + * argument, and any thrown error will be used as the `err` argument of the + * implicit callback, and the return value will be used as the `result` value. + * (i.e. a `rejected` of the returned Promise becomes the `err` callback + * argument, and a `resolved` value becomes the `result`.) + * + * Note, due to JavaScript limitations, we can only detect native `async` + * functions and not transpilied implementations. + * Your environment must have `async`/`await` support for this to work. + * (e.g. Node > v7.6, or a recent version of a modern browser). + * If you are using `async` functions through a transpiler (e.g. Babel), you + * must still wrap the function with [asyncify]{@link module:Utils.asyncify}, + * because the `async function` will be compiled to an ordinary function that + * returns a promise. + * + * @typedef {Function} AsyncFunction + * @static + */ + +/** + * Async is a utility module which provides straight-forward, powerful functions + * for working with asynchronous JavaScript. Although originally designed for + * use with [Node.js](http://nodejs.org) and installable via + * `npm install --save async`, it can also be used directly in the browser. + * @module async + * @see AsyncFunction + */ + +/** + * A collection of `async` functions for manipulating collections, such as + * arrays and objects. + * @module Collections + */ + +/** + * A collection of `async` functions for controlling the flow through a script. + * @module ControlFlow + */ + +/** + * A collection of `async` utility functions. + * @module Utils + */ + +exports.apply = _apply2.default; +exports.applyEach = _applyEach2.default; +exports.applyEachSeries = _applyEachSeries2.default; +exports.asyncify = _asyncify2.default; +exports.auto = _auto2.default; +exports.autoInject = _autoInject2.default; +exports.cargo = _cargo2.default; +exports.compose = _compose2.default; +exports.concat = _concat2.default; +exports.concatLimit = _concatLimit2.default; +exports.concatSeries = _concatSeries2.default; +exports.constant = _constant2.default; +exports.detect = _detect2.default; +exports.detectLimit = _detectLimit2.default; +exports.detectSeries = _detectSeries2.default; +exports.dir = _dir2.default; +exports.doDuring = _doDuring2.default; +exports.doUntil = _doUntil2.default; +exports.doWhilst = _doWhilst2.default; +exports.during = _during2.default; +exports.each = _each2.default; +exports.eachLimit = _eachLimit2.default; +exports.eachOf = _eachOf2.default; +exports.eachOfLimit = _eachOfLimit2.default; +exports.eachOfSeries = _eachOfSeries2.default; +exports.eachSeries = _eachSeries2.default; +exports.ensureAsync = _ensureAsync2.default; +exports.every = _every2.default; +exports.everyLimit = _everyLimit2.default; +exports.everySeries = _everySeries2.default; +exports.filter = _filter2.default; +exports.filterLimit = _filterLimit2.default; +exports.filterSeries = _filterSeries2.default; +exports.forever = _forever2.default; +exports.groupBy = _groupBy2.default; +exports.groupByLimit = _groupByLimit2.default; +exports.groupBySeries = _groupBySeries2.default; +exports.log = _log2.default; +exports.map = _map2.default; +exports.mapLimit = _mapLimit2.default; +exports.mapSeries = _mapSeries2.default; +exports.mapValues = _mapValues2.default; +exports.mapValuesLimit = _mapValuesLimit2.default; +exports.mapValuesSeries = _mapValuesSeries2.default; +exports.memoize = _memoize2.default; +exports.nextTick = _nextTick2.default; +exports.parallel = _parallel2.default; +exports.parallelLimit = _parallelLimit2.default; +exports.priorityQueue = _priorityQueue2.default; +exports.queue = _queue2.default; +exports.race = _race2.default; +exports.reduce = _reduce2.default; +exports.reduceRight = _reduceRight2.default; +exports.reflect = _reflect2.default; +exports.reflectAll = _reflectAll2.default; +exports.reject = _reject2.default; +exports.rejectLimit = _rejectLimit2.default; +exports.rejectSeries = _rejectSeries2.default; +exports.retry = _retry2.default; +exports.retryable = _retryable2.default; +exports.seq = _seq2.default; +exports.series = _series2.default; +exports.setImmediate = _setImmediate2.default; +exports.some = _some2.default; +exports.someLimit = _someLimit2.default; +exports.someSeries = _someSeries2.default; +exports.sortBy = _sortBy2.default; +exports.timeout = _timeout2.default; +exports.times = _times2.default; +exports.timesLimit = _timesLimit2.default; +exports.timesSeries = _timesSeries2.default; +exports.transform = _transform2.default; +exports.tryEach = _tryEach2.default; +exports.unmemoize = _unmemoize2.default; +exports.until = _until2.default; +exports.waterfall = _waterfall2.default; +exports.whilst = _whilst2.default; +exports.all = _every2.default; +exports.allLimit = _everyLimit2.default; +exports.allSeries = _everySeries2.default; +exports.any = _some2.default; +exports.anyLimit = _someLimit2.default; +exports.anySeries = _someSeries2.default; +exports.find = _detect2.default; +exports.findLimit = _detectLimit2.default; +exports.findSeries = _detectSeries2.default; +exports.forEach = _each2.default; +exports.forEachSeries = _eachSeries2.default; +exports.forEachLimit = _eachLimit2.default; +exports.forEachOf = _eachOf2.default; +exports.forEachOfSeries = _eachOfSeries2.default; +exports.forEachOfLimit = _eachOfLimit2.default; +exports.inject = _reduce2.default; +exports.foldl = _reduce2.default; +exports.foldr = _reduceRight2.default; +exports.select = _filter2.default; +exports.selectLimit = _filterLimit2.default; +exports.selectSeries = _filterSeries2.default; +exports.wrapSync = _asyncify2.default; \ No newline at end of file diff --git a/.pnpm-store/v11/files/30/6650c2d3ae1c68adb1d2e8e0f60748b27cd405c80e5986045bdbd34f5a0b9bbf6fcea76dd807e255e7bfa9e7b57041dd7f2f12fd7e5ea8c1ae043113459f7a b/.pnpm-store/v11/files/30/6650c2d3ae1c68adb1d2e8e0f60748b27cd405c80e5986045bdbd34f5a0b9bbf6fcea76dd807e255e7bfa9e7b57041dd7f2f12fd7e5ea8c1ae043113459f7a new file mode 100644 index 00000000..2a211c2b --- /dev/null +++ b/.pnpm-store/v11/files/30/6650c2d3ae1c68adb1d2e8e0f60748b27cd405c80e5986045bdbd34f5a0b9bbf6fcea76dd807e255e7bfa9e7b57041dd7f2f12fd7e5ea8c1ae043113459f7a @@ -0,0 +1,126 @@ +/** + * Module dependencies. + */ + +var http = require('http'); + +/** + * Invoking the library as a function delegates to attach if the first argument + * is an `http.Server`. + * + * If there are no arguments or the first argument is an options object, then + * a new Server instance is returned. + * + * @param {http.Server} server (if specified, will be attached to by the new Server instance) + * @param {Object} options + * @return {Server} engine server + * @api public + */ + +exports = module.exports = function () { + // backwards compatible use as `.attach` + // if first argument is an http server + if (arguments.length && arguments[0] instanceof http.Server) { + return attach.apply(this, arguments); + } + + // if first argument is not an http server, then just make a regular eio server + return exports.Server.apply(null, arguments); +}; + +/** + * Protocol revision number. + * + * @api public + */ + +exports.protocol = 1; + +/** + * Expose Server constructor. + * + * @api public + */ + +exports.Server = require('./server'); + +/** + * Expose Socket constructor. + * + * @api public + */ + +exports.Socket = require('./socket'); + +/** + * Expose Transport constructor. + * + * @api public + */ + +exports.Transport = require('./transport'); + +/** + * Expose mutable list of available transports. + * + * @api public + */ + +exports.transports = require('./transports'); + +/** + * Exports parser. + * + * @api public + */ + +exports.parser = require('engine.io-parser'); + +/** + * Creates an http.Server exclusively used for WS upgrades. + * + * @param {Number} port + * @param {Function} callback + * @param {Object} options + * @return {Server} websocket.io server + * @api public + */ + +exports.listen = listen; + +function listen (port, options, fn) { + if ('function' === typeof options) { + fn = options; + options = {}; + } + + var server = http.createServer(function (req, res) { + res.writeHead(501); + res.end('Not Implemented'); + }); + + // create engine server + var engine = exports.attach(server, options); + engine.httpServer = server; + + server.listen(port, fn); + + return engine; +} + +/** + * Captures upgrade requests for a http.Server. + * + * @param {http.Server} server + * @param {Object} options + * @return {Server} engine server + * @api public + */ + +exports.attach = attach; + +function attach (server, options) { + var engine = new exports.Server(options); + engine.attach(server, options); + return engine; +} diff --git a/.pnpm-store/v11/files/30/77d94087c2d4341a29bd671db8becb6a120831a4e2a23e0cf2c8b6d34a0b302c834d0dfa02d6007a5463422f2d59ef5f5ad517be3083cafd5d091bccbd46ba b/.pnpm-store/v11/files/30/77d94087c2d4341a29bd671db8becb6a120831a4e2a23e0cf2c8b6d34a0b302c834d0dfa02d6007a5463422f2d59ef5f5ad517be3083cafd5d091bccbd46ba new file mode 100644 index 00000000..07d8c058 --- /dev/null +++ b/.pnpm-store/v11/files/30/77d94087c2d4341a29bd671db8becb6a120831a4e2a23e0cf2c8b6d34a0b302c834d0dfa02d6007a5463422f2d59ef5f5ad517be3083cafd5d091bccbd46ba @@ -0,0 +1,263 @@ +## Object Wrappers + +The `ObjectWrap` class can be used to make wrapped C++ objects and a factory of wrapped objects. + + - Nan::ObjectWrap + + + +### Nan::ObjectWrap() + +A reimplementation of `node::ObjectWrap` that adds some API not present in older versions of Node. Should be preferred over `node::ObjectWrap` in all cases for consistency. + +Definition: + +```c++ +class ObjectWrap { + public: + ObjectWrap(); + + virtual ~ObjectWrap(); + + template + static inline T* Unwrap(v8::Local handle); + + inline v8::Local handle(); + + inline Nan::Persistent& persistent(); + + protected: + inline void Wrap(v8::Local handle); + + inline void MakeWeak(); + + /* Ref() marks the object as being attached to an event loop. + * Refed objects will not be garbage collected, even if + * all references are lost. + */ + virtual void Ref(); + + /* Unref() marks an object as detached from the event loop. This is its + * default state. When an object with a "weak" reference changes from + * attached to detached state it will be freed. Be careful not to access + * the object after making this call as it might be gone! + * (A "weak reference" means an object that only has a + * persistent handle.) + * + * DO NOT CALL THIS FROM DESTRUCTOR + */ + virtual void Unref(); + + int refs_; // ro +}; +``` + +See the Node documentation on [Wrapping C++ Objects](https://nodejs.org/api/addons.html#addons_wrapping_c_objects) for more details. + +### This vs. Holder + +When calling `Unwrap`, it is important that the argument is indeed some JavaScript object which got wrapped by a `Wrap` call for this class or any derived class. +The `Signature` installed by [`Nan::SetPrototypeMethod()`](methods.md#api_nan_set_prototype_method) does ensure that `info.Holder()` is just such an instance. +In Node 0.12 and later, `info.This()` will also be of such a type, since otherwise the invocation will get rejected. +However, in Node 0.10 and before it was possible to invoke a method on a JavaScript object which just had the extension type in its prototype chain. +In such a situation, calling `Unwrap` on `info.This()` will likely lead to a failed assertion causing a crash, but could lead to even more serious corruption. + +On the other hand, calling `Unwrap` in an [accessor](methods.md#api_nan_set_accessor) should not use `Holder()` if the accessor is defined on the prototype. +So either define your accessors on the instance template, +or use `This()` after verifying that it is indeed a valid object. + +### Examples + +#### Basic + +```c++ +class MyObject : public Nan::ObjectWrap { + public: + static NAN_MODULE_INIT(Init) { + v8::Local tpl = Nan::New(New); + tpl->SetClassName(Nan::New("MyObject").ToLocalChecked()); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Nan::SetPrototypeMethod(tpl, "getHandle", GetHandle); + Nan::SetPrototypeMethod(tpl, "getValue", GetValue); + + constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked()); + Nan::Set(target, Nan::New("MyObject").ToLocalChecked(), + Nan::GetFunction(tpl).ToLocalChecked()); + } + + private: + explicit MyObject(double value = 0) : value_(value) {} + ~MyObject() {} + + static NAN_METHOD(New) { + if (info.IsConstructCall()) { + double value = info[0]->IsUndefined() ? 0 : Nan::To(info[0]).FromJust(); + MyObject *obj = new MyObject(value); + obj->Wrap(info.This()); + info.GetReturnValue().Set(info.This()); + } else { + const int argc = 1; + v8::Local argv[argc] = {info[0]}; + v8::Local cons = Nan::New(constructor()); + info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); + } + } + + static NAN_METHOD(GetHandle) { + MyObject* obj = Nan::ObjectWrap::Unwrap(info.Holder()); + info.GetReturnValue().Set(obj->handle()); + } + + static NAN_METHOD(GetValue) { + MyObject* obj = Nan::ObjectWrap::Unwrap(info.Holder()); + info.GetReturnValue().Set(obj->value_); + } + + static inline Nan::Persistent & constructor() { + static Nan::Persistent my_constructor; + return my_constructor; + } + + double value_; +}; + +NODE_MODULE(objectwrapper, MyObject::Init) +``` + +To use in Javascript: + +```Javascript +var objectwrapper = require('bindings')('objectwrapper'); + +var obj = new objectwrapper.MyObject(5); +console.log('Should be 5: ' + obj.getValue()); +``` + +#### Factory of wrapped objects + +```c++ +class MyFactoryObject : public Nan::ObjectWrap { + public: + static NAN_MODULE_INIT(Init) { + v8::Local tpl = Nan::New(New); + tpl->InstanceTemplate()->SetInternalFieldCount(1); + + Nan::SetPrototypeMethod(tpl, "getValue", GetValue); + + constructor().Reset(Nan::GetFunction(tpl).ToLocalChecked()); + } + + static NAN_METHOD(NewInstance) { + v8::Local cons = Nan::New(constructor()); + double value = info[0]->IsNumber() ? Nan::To(info[0]).FromJust() : 0; + const int argc = 1; + v8::Local argv[1] = {Nan::New(value)}; + info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); + } + + // Needed for the next example: + inline double value() const { + return value_; + } + + private: + explicit MyFactoryObject(double value = 0) : value_(value) {} + ~MyFactoryObject() {} + + static NAN_METHOD(New) { + if (info.IsConstructCall()) { + double value = info[0]->IsNumber() ? Nan::To(info[0]).FromJust() : 0; + MyFactoryObject * obj = new MyFactoryObject(value); + obj->Wrap(info.This()); + info.GetReturnValue().Set(info.This()); + } else { + const int argc = 1; + v8::Local argv[argc] = {info[0]}; + v8::Local cons = Nan::New(constructor()); + info.GetReturnValue().Set(Nan::NewInstance(cons, argc, argv).ToLocalChecked()); + } + } + + static NAN_METHOD(GetValue) { + MyFactoryObject* obj = ObjectWrap::Unwrap(info.Holder()); + info.GetReturnValue().Set(obj->value_); + } + + static inline Nan::Persistent & constructor() { + static Nan::Persistent my_constructor; + return my_constructor; + } + + double value_; +}; + +NAN_MODULE_INIT(Init) { + MyFactoryObject::Init(target); + Nan::Set(target, + Nan::New("newFactoryObjectInstance").ToLocalChecked(), + Nan::GetFunction( + Nan::New(MyFactoryObject::NewInstance)).ToLocalChecked() + ); +} + +NODE_MODULE(wrappedobjectfactory, Init) +``` + +To use in Javascript: + +```Javascript +var wrappedobjectfactory = require('bindings')('wrappedobjectfactory'); + +var obj = wrappedobjectfactory.newFactoryObjectInstance(10); +console.log('Should be 10: ' + obj.getValue()); +``` + +#### Passing wrapped objects around + +Use the `MyFactoryObject` class above along with the following: + +```c++ +static NAN_METHOD(Sum) { + Nan::MaybeLocal maybe1 = Nan::To(info[0]); + Nan::MaybeLocal maybe2 = Nan::To(info[1]); + + // Quick check: + if (maybe1.IsEmpty() || maybe2.IsEmpty()) { + // return value is undefined by default + return; + } + + MyFactoryObject* obj1 = + Nan::ObjectWrap::Unwrap(maybe1.ToLocalChecked()); + MyFactoryObject* obj2 = + Nan::ObjectWrap::Unwrap(maybe2.ToLocalChecked()); + + info.GetReturnValue().Set(Nan::New(obj1->value() + obj2->value())); +} + +NAN_MODULE_INIT(Init) { + MyFactoryObject::Init(target); + Nan::Set(target, + Nan::New("newFactoryObjectInstance").ToLocalChecked(), + Nan::GetFunction( + Nan::New(MyFactoryObject::NewInstance)).ToLocalChecked() + ); + Nan::Set(target, + Nan::New("sum").ToLocalChecked(), + Nan::GetFunction(Nan::New(Sum)).ToLocalChecked() + ); +} + +NODE_MODULE(myaddon, Init) +``` + +To use in Javascript: + +```Javascript +var myaddon = require('bindings')('myaddon'); + +var obj1 = myaddon.newFactoryObjectInstance(5); +var obj2 = myaddon.newFactoryObjectInstance(10); +console.log('sum of object values: ' + myaddon.sum(obj1, obj2)); +``` diff --git a/.pnpm-store/v11/files/30/a6549ac16415bb6e3d5d4a76109b8791d4b3ee2c03b4d3973c4eb2a305d8be5ebabb0b57e4af8c85abae32125aefaa235085869108013cff3f431c701f6a28 b/.pnpm-store/v11/files/30/a6549ac16415bb6e3d5d4a76109b8791d4b3ee2c03b4d3973c4eb2a305d8be5ebabb0b57e4af8c85abae32125aefaa235085869108013cff3f431c701f6a28 new file mode 100644 index 00000000..b2eaab39 --- /dev/null +++ b/.pnpm-store/v11/files/30/a6549ac16415bb6e3d5d4a76109b8791d4b3ee2c03b4d3973c4eb2a305d8be5ebabb0b57e4af8c85abae32125aefaa235085869108013cff3f431c701f6a28 @@ -0,0 +1,163 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const fs = require("fs"); +const path = require("path"); +const util = require("util"); +const async = require('async'); +const flattenDeep = require('lodash.flattendeep'); +const chalk = require("chalk"); +const chmodr = require('chmodr'); +const semver = require('semver'); +const _suman = global.__suman = (global.__suman || {}); +const get_latest_suman_version_1 = require("./get-latest-suman-version"); +const install_suman_1 = require("./install-suman"); +const install_suman_files_1 = require("./install-suman-files"); +const determine_if_readlink_avail_1 = require("./determine-if-readlink-avail"); +const helpers = require("./init-helpers"); +const logPermissonsAdvice = helpers.logPermissonsAdvice; +exports.run = (opts, projectRoot, cwd) => { + const force = opts.force; + const fforce = opts.fforce; + if (!projectRoot) { + _suman.log.error('\n'); + _suman.log.error(chalk.red('Suman installation fatal error => Suman cannot find the root of your project,' + + ' given your current working directory.')); + _suman.log.error(chalk.red('Please ensure that you are issuing the installation command from the root of your project.')); + _suman.log.error(chalk.red('Note: You will need to run "$ npm init", or create a package.json file, ' + + 'if your project does not have a package.json file yet.')); + _suman.log.error('\n'); + return; + } + if (!force && !process.env.SUDO_UID) { + logPermissonsAdvice(); + } + let err; + try { + require(path.resolve(projectRoot + '/package.json')); + } + catch (err) { + if (!fforce) { + _suman.log.info(' => Suman message => there is no package.json file in your working directory.'); + _suman.log.info(' => Perhaps you wish to run ' + chalk.yellow('"$ npm init"') + ' first, or perhaps you are in the wrong directory?'); + _suman.log.info(' => To override this use the --fforce option.'); + if (projectRoot) { + _suman.log.info('\nIn other words, the current working directory is as follows:'); + _suman.log.info(chalk.cyan(cwd)); + _suman.log.info('...but the root of your project appears to be at this path:'); + _suman.log.info(chalk.magenta(projectRoot), '\n\n'); + } + return; + } + } + let resolved = false; + let resolvedLocal = false; + let pkgDotJSON; + try { + require.resolve('suman'); + resolved = true; + pkgDotJSON = require(path.resolve(projectRoot + '/node_modules/suman/package.json')); + resolvedLocal = true; + } + catch (e) { + err = e; + } + if (err) { + _suman.log.info('Suman will attempt to install itself to the project in your current working directory.'); + } + else { + if (!force && !fforce) { + _suman.log.info(' => Suman init message => Suman NPM package is already installed locally.'); + _suman.log.info(chalk.magenta(' => Use the --force option to update to the latest version', '\n\n')); + } + } + let conf, timestamp = String(Date.now()), prependToSumanConf = '', appendToSumanHelpersDir = '', sumanHelperDirFound = false, sumanAlreadyInittedBecauseConfFileExists = false; + let potentialPathToConf; + try { + potentialPathToConf = path.resolve(projectRoot + '/suman.conf.js'); + conf = require(potentialPathToConf); + sumanAlreadyInittedBecauseConfFileExists = true; + _suman.log.warning(' => During --init routine, we have found a pre-existing suman.conf.js file at path ' + + 'file at path => ', potentialPathToConf); + } + catch (err) { + _suman.log.info(' => Did not find a suman.conf.js (a good thing, since we are initting) ' + + 'file at path => ', potentialPathToConf || (' => implementation error => ' + (err.stack || err))); + } + try { + if (!fforce) { + const p = path.resolve(projectRoot + '/' + (conf ? (conf.sumanHelpersDir || '/suman') : '/suman')); + _suman.log.info(' => Looking for existing suman helpers dir here => "' + p + '"'); + const files = fs.readdirSync(p); + sumanHelperDirFound = true; + files.forEach(function (file) { + if (!sumanAlreadyInittedBecauseConfFileExists) { + sumanAlreadyInittedBecauseConfFileExists = true; + _suman.log.info(chalk.magenta.bold(' => Looks like this project has already ' + + 'been initialized as a Suman project.')); + } + _suman.log.info(' => Your ./suman directory already contains => ' + file); + }); + } + } + catch (err) { + _suman.log.error(' => Could not find your suman helpers dir => We will create a new one.'); + } + if (sumanAlreadyInittedBecauseConfFileExists && !force) { + _suman.log.info(' => Looks like Suman has already been initialized in this project ' + + '- do you want to re-initialize Suman in this project?'); + _suman.log.info(chalk.cyan(' => If you would like to install the latest Suman files with the latest defaults, ' + + 'you can re-run "$ suman --init" with the --force option.')); + _suman.log.info(chalk.red(' => Before you use --force/--fforce options, it\'s always a good idea to run a commit/tag with your version control system.') + '\n'); + _suman.log.info(chalk.red.bold(' => Should you choose to reinitialize, Suman will write out folders with a timestamp for uniqueness,\n and will not delete' + + ' any of your files. It is very safe to reinitialize Suman. Please see these instructions => ***'), '\n\n'); + return process.exit(1); + } + if (sumanAlreadyInittedBecauseConfFileExists) { + prependToSumanConf = timestamp + '-'; + } + if (sumanHelperDirFound) { + appendToSumanHelpersDir = '-' + timestamp; + } + const newSumanHelperDir = '/.suman' + appendToSumanHelpersDir; + const newSumanHelperDirAbsPath = path.resolve(projectRoot + '/.suman' + appendToSumanHelpersDir); + async.series([ + function installFiles(cb) { + async.parallel([ + install_suman_files_1.writeSumanFiles(newSumanHelperDirAbsPath, prependToSumanConf, newSumanHelperDir, projectRoot), + get_latest_suman_version_1.makeGetLatestSumanVersion(pkgDotJSON, projectRoot), + determine_if_readlink_avail_1.determineIfReadlinkAvail(pkgDotJSON, projectRoot) + ], cb); + }, + install_suman_1.makeNPMInstall(resolvedLocal, pkgDotJSON, projectRoot) + ], function (err, results) { + flattenDeep(results).forEach(function (item) { + item && _suman.log.info('\n' + chalk.bgYellow.black(util.inspect(item)) + '\n'); + }); + if (err) { + _suman.log.error('\n => Suman fatal installation error => ', (err.stack || err)); + logPermissonsAdvice(); + return process.exit(1); + } + if (results.npmInstall) { + _suman.log.info(chalk.bgYellow.black.bold(' => Suman message => NPM error, most likely a permissions error.')); + logPermissonsAdvice(); + } + else { + _suman.log.info(chalk.bgBlue.white.bold(' => Suman message => Suman was successfully installed locally.')); + } + _suman.log.info(['=> Notice the new directory called "suman" in the root of your project.', + 'This directory houses log files used by Suman for debugging tests running', + 'in child processes as well as Suman helper files. Suman recommends moving the ', + '"suman" directory inside your and renaming it "_suman" or ".suman".', + 'If you elect this option, you should change your suman.conf.js file according to these instructions:', + ' => http://sumanjs.org/tutorial-01-getting-started.html' + ] + .map((l, index, a) => { + return (index < a.length - 1) ? chalk.bgBlack.cyan(l) : chalk.bgBlack.yellow(l); + }) + .join('\n'), '\n\n'); + process.exit(0); + }); +}; diff --git a/.pnpm-store/v11/files/30/ab2deac2ce70e708e736b19d14f15ffe9f5c5b627e4ae293e7e7a03944431f4ca9f6bb1e9ce9cf2c0ccd4e6713e8c4e6f5b0680a2f4836575cc656d55612e1 b/.pnpm-store/v11/files/30/ab2deac2ce70e708e736b19d14f15ffe9f5c5b627e4ae293e7e7a03944431f4ca9f6bb1e9ce9cf2c0ccd4e6713e8c4e6f5b0680a2f4836575cc656d55612e1 new file mode 100644 index 00000000..f1dea4a9 --- /dev/null +++ b/.pnpm-store/v11/files/30/ab2deac2ce70e708e736b19d14f15ffe9f5c5b627e4ae293e7e7a03944431f4ca9f6bb1e9ce9cf2c0ccd4e6713e8c4e6f5b0680a2f4836575cc656d55612e1 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pad', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/30/b5ab8e3410ad993b75db6fd96b09aae266bc51763b48fe072cc3ea494a819695c926010d08664341e16b5b740af978cae8150dd6be4d5f4856172a109ce0de b/.pnpm-store/v11/files/30/b5ab8e3410ad993b75db6fd96b09aae266bc51763b48fe072cc3ea494a819695c926010d08664341e16b5b740af978cae8150dd6be4d5f4856172a109ce0de new file mode 100644 index 00000000..7230f552 --- /dev/null +++ b/.pnpm-store/v11/files/30/b5ab8e3410ad993b75db6fd96b09aae266bc51763b48fe072cc3ea494a819695c926010d08664341e16b5b740af978cae8150dd6be4d5f4856172a109ce0de @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/30/f72ce43030c030d7531dbf0113612d39e89afc3e65db0b4f9d18cb5680818b0527e84bcdae3849773468695f23121e47d1846ff5e52326be314b86f63c10c1 b/.pnpm-store/v11/files/30/f72ce43030c030d7531dbf0113612d39e89afc3e65db0b4f9d18cb5680818b0527e84bcdae3849773468695f23121e47d1846ff5e52326be314b86f63c10c1 new file mode 100644 index 00000000..85fbcced --- /dev/null +++ b/.pnpm-store/v11/files/30/f72ce43030c030d7531dbf0113612d39e89afc3e65db0b4f9d18cb5680818b0527e84bcdae3849773468695f23121e47d1846ff5e52326be314b86f63c10c1 @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _consoleFunc = require('./internal/consoleFunc'); + +var _consoleFunc2 = _interopRequireDefault(_consoleFunc); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Logs the result of an [`async` function]{@link AsyncFunction} to the + * `console` using `console.dir` to display the properties of the resulting object. + * Only works in Node.js or in browsers that support `console.dir` and + * `console.error` (such as FF and Chrome). + * If multiple arguments are returned from the async function, + * `console.dir` is called on each argument in order. + * + * @name dir + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} function - The function you want to eventually apply + * all arguments to. + * @param {...*} arguments... - Any number of arguments to apply to the function. + * @example + * + * // in a module + * var hello = function(name, callback) { + * setTimeout(function() { + * callback(null, {hello: name}); + * }, 1000); + * }; + * + * // in the node repl + * node> async.dir(hello, 'world'); + * {hello: 'world'} + */ +exports.default = (0, _consoleFunc2.default)('dir'); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/31/03e0e0d146b7f72ecf9525aebab02e9aa040fff0ba58d851a7f2d13058f8d00702db3ed9c62e978d201eab0979d2d30716c8863f51c1ba1129fa9fdccc5afb b/.pnpm-store/v11/files/31/03e0e0d146b7f72ecf9525aebab02e9aa040fff0ba58d851a7f2d13058f8d00702db3ed9c62e978d201eab0979d2d30716c8863f51c1ba1129fa9fdccc5afb new file mode 100644 index 00000000..c72ed836 --- /dev/null +++ b/.pnpm-store/v11/files/31/03e0e0d146b7f72ecf9525aebab02e9aa040fff0ba58d851a7f2d13058f8d00702db3ed9c62e978d201eab0979d2d30716c8863f51c1ba1129fa9fdccc5afb @@ -0,0 +1,84 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const async = require("async"); +const su = require("suman-utils"); +const _suman = global.__suman = (global.__suman || {}); +const inject_param_1 = require("../test-suite-params/inject/inject-param"); +const suman_constants_1 = require("../config/suman-constants"); +const weAreDebugging = su.weAreDebugging; +exports.handleInjections = function (suite, cb) { + const addValuesToSuiteInjections = function (k, val) { + if (k in suite.injectedValues) { + throw new Error(` => Injection value '${k}' was used more than once; this value needs to be unique.`); + } + Object.defineProperty(suite.injectedValues, k, { + enumerable: true, + writable: false, + configurable: true, + value: val + }); + }; + const isDescValid = function (desc) { + return desc && String(desc) !== String(suman_constants_1.constants.UNKNOWN_INJECT_HOOK_NAME); + }; + const injections = suite.getInjections(); + async.eachSeries(injections, function (inj, cb) { + let callable = true, timeoutVal = weAreDebugging ? 5000000 : inj.timeout; + const timerObj = { + timer: null + }; + const first = function (err) { + if (callable) { + callable = false; + clearTimeout(timerObj.timer); + process.nextTick(cb, err); + } + else if (err) { + _suman.log.error('Callback was called more than once, with the following error:'); + _suman.log.error(err.stack || err); + } + }; + const values = []; + const assertCount = { num: 0 }; + return new Promise(function (resolve, reject) { + const injParam = new inject_param_1.InjectParam(inj, assertCount, timerObj, suite, values, resolve, reject); + injParam.fatal = reject; + if (inj.cb) { + injParam.callbackMode = true; + let d = function (err, results) { + if (err) { + return reject(err); + } + Promise.resolve(results).then(resolve, reject); + }; + injParam.done = d; + injParam.ctn = injParam.pass = resolve; + injParam.fail = reject; + inj.fn.call(null, Object.setPrototypeOf(d, injParam)); + } + else { + Promise.resolve(inj.fn.call(null, injParam)) + .then(function () { + return values.reduce(function (a, b) { + return Promise.resolve(b.val); + }, null); + }) + .then(resolve, reject); + } + }) + .then(function () { + const seed = Promise.resolve(null); + const p = values.reduce(function (a, b) { + return Promise.resolve(b.val).then(function (v) { + return addValuesToSuiteInjections(b.k, v); + }); + }, seed); + return p.then(function () { + first(null); + }); + }) + .catch(first); + }, cb); +}; diff --git a/.pnpm-store/v11/files/31/115f998aed1a45b9ff2e6301d9c5216c27564a0c2b1932b99f444cafc6ff6452535dfe287198712a7db877bf09d2330c8650269253d14f40f6fcf35eb05e00 b/.pnpm-store/v11/files/31/115f998aed1a45b9ff2e6301d9c5216c27564a0c2b1932b99f444cafc6ff6452535dfe287198712a7db877bf09d2330c8650269253d14f40f6fcf35eb05e00 new file mode 100644 index 00000000..182eaa10 --- /dev/null +++ b/.pnpm-store/v11/files/31/115f998aed1a45b9ff2e6301d9c5216c27564a0c2b1932b99f444cafc6ff6452535dfe287198712a7db877bf09d2330c8650269253d14f40f6fcf35eb05e00 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unzipWith', require('../unzipWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/31/14cc7bc9e621038adceb8d4a990c2201182c3b851e18d1d9be8bc1e891636550131ca6d2d0fa3b284a6596fe1db6d83424756e51be98ec04faa5fb3d76ee51 b/.pnpm-store/v11/files/31/14cc7bc9e621038adceb8d4a990c2201182c3b851e18d1d9be8bc1e891636550131ca6d2d0fa3b284a6596fe1db6d83424756e51be98ec04faa5fb3d76ee51 new file mode 100644 index 00000000..09d3a29e --- /dev/null +++ b/.pnpm-store/v11/files/31/14cc7bc9e621038adceb8d4a990c2201182c3b851e18d1d9be8bc1e891636550131ca6d2d0fa3b284a6596fe1db6d83424756e51be98ec04faa5fb3d76ee51 @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/31/2def7a88dee8327cb41653408dee21bc72bcdd59e8f09b79f9cff69f853e6f0bfd7afc0f48c2c1602048695535accac8f0d5f3c7861c80603c0bf0e5c018a8 b/.pnpm-store/v11/files/31/2def7a88dee8327cb41653408dee21bc72bcdd59e8f09b79f9cff69f853e6f0bfd7afc0f48c2c1602048695535accac8f0d5f3c7861c80603c0bf0e5c018a8 new file mode 100644 index 00000000..07c9f5e4 --- /dev/null +++ b/.pnpm-store/v11/files/31/2def7a88dee8327cb41653408dee21bc72bcdd59e8f09b79f9cff69f853e6f0bfd7afc0f48c2c1602048695535accac8f0d5f3c7861c80603c0bf0e5c018a8 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reverse', require('../reverse')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/31/41ec9da4ed0c904551832ac24719db789759a093da9c3d743838ae94e15508ab444d7d58441b4d7948cd14542653555e54ae34adcf4e2dae9e55ab2a6cb68d b/.pnpm-store/v11/files/31/41ec9da4ed0c904551832ac24719db789759a093da9c3d743838ae94e15508ab444d7d58441b4d7948cd14542653555e54ae34adcf4e2dae9e55ab2a6cb68d new file mode 100644 index 00000000..889f6d92 --- /dev/null +++ b/.pnpm-store/v11/files/31/41ec9da4ed0c904551832ac24719db789759a093da9c3d743838ae94e15508ab444d7d58441b4d7948cd14542653555e54ae34adcf4e2dae9e55ab2a6cb68d @@ -0,0 +1,31 @@ +'use strict'; + +exports.__esModule = true; +var AST = { + // Public API used to evaluate derived attributes regarding AST nodes + helpers: { + // a mustache is definitely a helper if: + // * it is an eligible helper, and + // * it has at least one parameter or hash segment + helperExpression: function helperExpression(node) { + return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); + }, + + scopedId: function scopedId(path) { + return (/^\.|this\b/.test(path.original) + ); + }, + + // an ID is simple if it only has one part, and that part is not + // `..` or `this`. + simpleId: function simpleId(path) { + return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; + } + } +}; + +// Must be exported as an object rather than the root of the module as the jison lexer +// must modify the object to operate properly. +exports['default'] = AST; +module.exports = exports['default']; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19 diff --git a/.pnpm-store/v11/files/31/576c862a7f291f0916a641877a0397330a5e65dbff842531792562668a6a7676621e4e091c29dac0d74823d107168e8a0fc0ceb83d17b06c8814b45487d322 b/.pnpm-store/v11/files/31/576c862a7f291f0916a641877a0397330a5e65dbff842531792562668a6a7676621e4e091c29dac0d74823d107168e8a0fc0ceb83d17b06c8814b45487d322 new file mode 100644 index 00000000..d40c2103 --- /dev/null +++ b/.pnpm-store/v11/files/31/576c862a7f291f0916a641877a0397330a5e65dbff842531792562668a6a7676621e4e091c29dac0d74823d107168e8a0fc0ceb83d17b06c8814b45487d322 @@ -0,0 +1,49 @@ +{ + "name": "arr-diff", + "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.", + "version": "2.0.0", + "homepage": "https://github.com/jonschlinkert/arr-diff", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/arr-diff", + "bugs": { + "url": "https://github.com/jonschlinkert/arr-diff/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "devDependencies": { + "array-differ": "^1.0.0", + "array-slice": "^0.2.3", + "benchmarked": "^0.1.4", + "chalk": "^1.1.1", + "mocha": "*", + "should": "*" + }, + "keywords": [ + "arr", + "array", + "diff", + "differ", + "difference" + ], + "verb": { + "related": { + "list": [ + "arr-flatten", + "array-filter", + "array-intersection" + ] + } + } +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/31/67559cd1cb758e201adf3ea747951c24b31f3434c703e214499ccf98b4c8f275345c90b962763b9f4142f642312cffd445a4580452bfa1ed28c3b6d7ab4a62 b/.pnpm-store/v11/files/31/67559cd1cb758e201adf3ea747951c24b31f3434c703e214499ccf98b4c8f275345c90b962763b9f4142f642312cffd445a4580452bfa1ed28c3b6d7ab4a62 new file mode 100644 index 00000000..071faeba --- /dev/null +++ b/.pnpm-store/v11/files/31/67559cd1cb758e201adf3ea747951c24b31f3434c703e214499ccf98b4c8f275345c90b962763b9f4142f642312cffd445a4580452bfa1ed28c3b6d7ab4a62 @@ -0,0 +1,18 @@ +var baseSlice = require('./_baseSlice'); + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +module.exports = castSlice; diff --git a/.pnpm-store/v11/files/31/675db5db598ed96992bae112e166c4298a4a6b83136a5ab7639c325c603d0a4e00d3c3f4b639538024dab152b6c893a86661f9a495d8eed6703213b41ac72a b/.pnpm-store/v11/files/31/675db5db598ed96992bae112e166c4298a4a6b83136a5ab7639c325c603d0a4e00d3c3f4b639538024dab152b6c893a86661f9a495d8eed6703213b41ac72a new file mode 100644 index 00000000..961f5c3f --- /dev/null +++ b/.pnpm-store/v11/files/31/675db5db598ed96992bae112e166c4298a4a6b83136a5ab7639c325c603d0a4e00d3c3f4b639538024dab152b6c893a86661f9a495d8eed6703213b41ac72a @@ -0,0 +1,130 @@ +# arr-diff [![NPM version](https://img.shields.io/npm/v/arr-diff.svg?style=flat)](https://www.npmjs.com/package/arr-diff) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-diff.svg?style=flat)](https://npmjs.org/package/arr-diff) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-diff.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-diff) + +> Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save arr-diff +``` + +Install with [yarn](https://yarnpkg.com): + +```sh +$ yarn add arr-diff +``` + +Install with [bower](https://bower.io/) + +```sh +$ bower install arr-diff --save +``` + +## Usage + +Returns the difference between the first array and additional arrays. + +```js +var diff = require('arr-diff'); + +var a = ['a', 'b', 'c', 'd']; +var b = ['b', 'c']; + +console.log(diff(a, b)) +//=> ['a', 'd'] +``` + +## Benchmarks + +This library versus [array-differ](https://github.com/sindresorhus/array-differ), on April 14, 2017: + +``` +Benchmarking: (4 of 4) + · long-dupes + · long + · med + · short + +# benchmark/fixtures/long-dupes.js (100804 bytes) + arr-diff-3.0.0 x 822 ops/sec ±0.67% (86 runs sampled) + arr-diff-4.0.0 x 2,141 ops/sec ±0.42% (89 runs sampled) + array-differ x 708 ops/sec ±0.70% (89 runs sampled) + + fastest is arr-diff-4.0.0 + +# benchmark/fixtures/long.js (94529 bytes) + arr-diff-3.0.0 x 882 ops/sec ±0.60% (87 runs sampled) + arr-diff-4.0.0 x 2,329 ops/sec ±0.97% (83 runs sampled) + array-differ x 769 ops/sec ±0.61% (90 runs sampled) + + fastest is arr-diff-4.0.0 + +# benchmark/fixtures/med.js (708 bytes) + arr-diff-3.0.0 x 856,150 ops/sec ±0.42% (89 runs sampled) + arr-diff-4.0.0 x 4,665,249 ops/sec ±1.06% (89 runs sampled) + array-differ x 653,888 ops/sec ±1.02% (86 runs sampled) + + fastest is arr-diff-4.0.0 + +# benchmark/fixtures/short.js (60 bytes) + arr-diff-3.0.0 x 3,078,467 ops/sec ±0.77% (93 runs sampled) + arr-diff-4.0.0 x 9,213,296 ops/sec ±0.65% (89 runs sampled) + array-differ x 1,337,051 ops/sec ±0.91% (92 runs sampled) + + fastest is arr-diff-4.0.0 +``` + +## About + +### Related projects + +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") +* [array-filter](https://www.npmjs.com/package/array-filter): Array#filter for older browsers. | [homepage](https://github.com/juliangruber/array-filter "Array#filter for older browsers.") +* [array-intersection](https://www.npmjs.com/package/array-intersection): Return an array with the unique values present in _all_ given arrays using strict equality… [more](https://github.com/jonschlinkert/array-intersection) | [homepage](https://github.com/jonschlinkert/array-intersection "Return an array with the unique values present in _all_ given arrays using strict equality for comparisons.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 33 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [paulmillr](https://github.com/paulmillr) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 14, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/31/7025a9ff9018cd6528358ab9011a5d7a0bf3ce320306fb566c75ea86a1d8e09ea1752972b12c9a5de3d7d9667707abde7b65261f44fe3013a11d4903304084 b/.pnpm-store/v11/files/31/7025a9ff9018cd6528358ab9011a5d7a0bf3ce320306fb566c75ea86a1d8e09ea1752972b12c9a5de3d7d9667707abde7b65261f44fe3013a11d4903304084 new file mode 100644 index 00000000..33e391f0 --- /dev/null +++ b/.pnpm-store/v11/files/31/7025a9ff9018cd6528358ab9011a5d7a0bf3ce320306fb566c75ea86a1d8e09ea1752972b12c9a5de3d7d9667707abde7b65261f44fe3013a11d4903304084 @@ -0,0 +1,4 @@ +node_modules +.DS_Store +npm-debug.log +coverage diff --git a/.pnpm-store/v11/files/31/707cebfa4222608d00623cedf76afd2620b1ec3c831c0b7dd69eb2cdd5651bed4babf2617414f1b2027a3c3f09fe4408490e3681712876950c14ce3c6465e1 b/.pnpm-store/v11/files/31/707cebfa4222608d00623cedf76afd2620b1ec3c831c0b7dd69eb2cdd5651bed4babf2617414f1b2027a3c3f09fe4408490e3681712876950c14ce3c6465e1 new file mode 100644 index 00000000..d27c7122 --- /dev/null +++ b/.pnpm-store/v11/files/31/707cebfa4222608d00623cedf76afd2620b1ec3c831c0b7dd69eb2cdd5651bed4babf2617414f1b2027a3c3f09fe4408490e3681712876950c14ce3c6465e1 @@ -0,0 +1,1292 @@ +/**! + + @license + handlebars v4.7.9 + +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +*/ +define('handlebars/utils',['exports'], function (exports) { + 'use strict'; + + exports.__esModule = true; + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.createFrame = createFrame; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' + }; + + var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /* eslint-disable func-style */ + var isFunction = function isFunction(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + exports.isFunction = isFunction; + + /* eslint-enable func-style */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUc7QUFDYixPQUFHLEVBQUUsT0FBTztBQUNaLE9BQUcsRUFBRSxNQUFNO0FBQ1gsT0FBRyxFQUFFLE1BQU07QUFDWCxPQUFHLEVBQUUsUUFBUTtBQUNiLE9BQUcsRUFBRSxRQUFRO0FBQ2IsT0FBRyxFQUFFLFFBQVE7QUFDYixPQUFHLEVBQUUsUUFBUTtHQUNkLENBQUM7O0FBRUYsTUFBTSxRQUFRLEdBQUcsWUFBWTtNQUMzQixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUV6QixXQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsV0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEI7O0FBRU0sV0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBb0I7QUFDNUMsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsV0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsWUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELGFBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7T0FDRjtLQUNGOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1o7O0FBRU0sTUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxNQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsV0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDcEMsQ0FBQzs7O0FBR0YsTUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsWUFPTyxVQUFVLEdBUGpCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixhQUNFLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxtQkFBbUIsQ0FDNUM7S0FDSCxDQUFDO0dBQ0g7VUFDUSxVQUFVLEdBQVYsVUFBVTs7Ozs7QUFJWixNQUFNLE9BQU8sR0FDbEIsS0FBSyxDQUFDLE9BQU8sSUFDYixVQUFTLEtBQUssRUFBRTtBQUNkLFdBQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FDekMsS0FBSyxDQUFDO0dBQ1gsQ0FBQzs7Ozs7QUFHRyxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGVBQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRjtBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUM7R0FDWDs7QUFFTSxXQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxRQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsVUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixlQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztPQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixlQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7T0FDcEI7Ozs7O0FBS0QsWUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDMUIsYUFBTyxNQUFNLENBQUM7S0FDZjtBQUNELFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFNBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRU0sV0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxVQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVNLFdBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxXQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0dBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nLFxuICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iaiAvKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGxldCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFNvdXJjZWQgZnJvbSBsb2Rhc2hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHRcbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtc3R5bGUgKi9cbmxldCBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgKTtcbiAgfTtcbn1cbmV4cG9ydCB7IGlzRnVuY3Rpb24gfTtcbi8qIGVzbGludC1lbmFibGUgZnVuYy1zdHlsZSAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPVxuICBBcnJheS5pc0FycmF5IHx8XG4gIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19 +; +define('handlebars/exception',['exports', 'module'], function (exports, module) { + 'use strict'; + + var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + endLineNumber = undefined, + column = undefined, + endColumn = undefined; + + if (loc) { + line = loc.start.line; + endLineNumber = loc.end.line; + column = loc.start.column; + endColumn = loc.end.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + this.endLineNumber = endLineNumber; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (Object.defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + Object.defineProperty(this, 'endColumn', { + value: endColumn, + enumerable: true + }); + } else { + this.column = column; + this.endColumn = endColumn; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } + } + + Exception.prototype = new Error(); + + module.exports = Exception; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsV0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxRQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7UUFDeEIsSUFBSSxZQUFBO1FBQ0osYUFBYSxZQUFBO1FBQ2IsTUFBTSxZQUFBO1FBQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosUUFBSSxHQUFHLEVBQUU7QUFDUCxVQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsbUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixZQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsZUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixhQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0tBQ3hDOztBQUVELFFBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxTQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxVQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQzlDOzs7QUFHRCxRQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixXQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQzFDOztBQUVELFFBQUk7QUFDRixVQUFJLEdBQUcsRUFBRTtBQUNQLFlBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFlBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFlBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixnQkFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ3BDLGlCQUFLLEVBQUUsTUFBTTtBQUNiLHNCQUFVLEVBQUUsSUFBSTtXQUNqQixDQUFDLENBQUM7QUFDSCxnQkFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGlCQUFLLEVBQUUsU0FBUztBQUNoQixzQkFBVSxFQUFFLElBQUk7V0FDakIsQ0FBQyxDQUFDO1NBQ0osTUFBTTtBQUNMLGNBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLGNBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1NBQzVCO09BQ0Y7S0FDRixDQUFDLE9BQU8sR0FBRyxFQUFFOztLQUViO0dBQ0Y7O0FBRUQsV0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDOzttQkFFbkIsU0FBUyIsImZpbGUiOiJleGNlcHRpb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlcnJvclByb3BzID0gW1xuICAnZGVzY3JpcHRpb24nLFxuICAnZmlsZU5hbWUnLFxuICAnbGluZU51bWJlcicsXG4gICdlbmRMaW5lTnVtYmVyJyxcbiAgJ21lc3NhZ2UnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhY2snXG5dO1xuXG5mdW5jdGlvbiBFeGNlcHRpb24obWVzc2FnZSwgbm9kZSkge1xuICBsZXQgbG9jID0gbm9kZSAmJiBub2RlLmxvYyxcbiAgICBsaW5lLFxuICAgIGVuZExpbmVOdW1iZXIsXG4gICAgY29sdW1uLFxuICAgIGVuZENvbHVtbjtcblxuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGVuZExpbmVOdW1iZXIgPSBsb2MuZW5kLmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcbiAgICBlbmRDb2x1bW4gPSBsb2MuZW5kLmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgbGV0IHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChsb2MpIHtcbiAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgICB0aGlzLmVuZExpbmVOdW1iZXIgPSBlbmRMaW5lTnVtYmVyO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge1xuICAgICAgICAgIHZhbHVlOiBjb2x1bW4sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmRDb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGVuZENvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19 +; +define('handlebars/helpers/block-helper-missing',['exports', 'module', '../utils'], function (exports, module, _utils) { + 'use strict'; + + module.exports = function (instance) { + instance.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse, + fn = options.fn; + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (_utils.isArray(context)) { + if (context.length > 0) { + if (options.ids) { + options.ids = [options.name]; + } + + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + if (options.data && options.ids) { + var data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); + options = { data: data }; + } + + return fn(context, options); + } + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1VBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixVQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsZUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QixNQUFNLElBQUksT0FYMEIsT0FBTyxDQVd6QixPQUFPLENBQUMsRUFBRTtBQUMzQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLGNBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLG1CQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzlCOztBQUVELGlCQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRCxNQUFNO0FBQ0wsaUJBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO09BQ0YsTUFBTTtBQUNMLFlBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLGNBQUksSUFBSSxHQUFHLE9BdkJTLFdBQVcsQ0F1QlIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0F4QmxCLGlCQUFpQixDQXlCaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGlCQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDMUI7O0FBRUQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhcHBlbmRDb250ZXh0UGF0aCwgY3JlYXRlRnJhbWUsIGlzQXJyYXkgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoY29udGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBsZXQgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aChcbiAgICAgICAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsXG4gICAgICAgICAgb3B0aW9ucy5uYW1lXG4gICAgICAgICk7XG4gICAgICAgIG9wdGlvbnMgPSB7IGRhdGE6IGRhdGEgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= +; +define('handlebars/helpers/each',['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + module.exports = function (instance) { + instance.registerHelper('each', function (context, options) { + if (!options) { + throw new _Exception['default']('Must pass iterator to #each'); + } + + var fn = options.fn, + inverse = options.inverse, + i = 0, + ret = '', + data = undefined, + contextPath = undefined; + + if (options.data && options.ids) { + contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; + } + + if (_utils.isFunction(context)) { + context = context.call(this); + } + + if (options.data) { + data = _utils.createFrame(options.data); + } + + function execIteration(field, index, last) { + if (data) { + data.key = field; + data.index = index; + data.first = index === 0; + data.last = !!last; + + if (contextPath) { + data.contextPath = contextPath + field; + } + } + + ret = ret + fn(context[field], { + data: data, + blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) + }); + } + + if (context && typeof context === 'object') { + if (_utils.isArray(context)) { + for (var j = context.length; i < j; i++) { + if (i in context) { + execIteration(i, i, i === context.length - 1); + } + } + } else if (typeof Symbol === 'function' && context[Symbol.iterator]) { + var newContext = []; + var iterator = context[Symbol.iterator](); + for (var it = iterator.next(); !it.done; it = iterator.next()) { + newContext.push(it.value); + } + context = newContext; + for (var j = context.length; i < j; i++) { + execIteration(i, i, i === context.length - 1); + } + } else { + (function () { + var priorKey = undefined; + + Object.keys(context).forEach(function (key) { + // We're running the iterations one step out of sync so we can detect + // the last iteration without have to scan the object twice and create + // an itermediate keys array. + if (priorKey !== undefined) { + execIteration(priorKey, i - 1); + } + priorKey = key; + i++; + }); + if (priorKey !== undefined) { + execIteration(priorKey, i - 1, true); + } + })(); + } + } + + if (i === 0) { + ret = inverse(this); + } + + return ret; + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7bUJBU2UsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixjQUFNLDBCQUFjLDZCQUE2QixDQUFDLENBQUM7T0FDcEQ7O0FBRUQsVUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7VUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1VBQ3pCLENBQUMsR0FBRyxDQUFDO1VBQ0wsR0FBRyxHQUFHLEVBQUU7VUFDUixJQUFJLFlBQUE7VUFDSixXQUFXLFlBQUEsQ0FBQzs7QUFFZCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixtQkFBVyxHQUNULE9BdkJOLGlCQUFpQixDQXVCTyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ3JFOztBQUVELFVBQUksT0F0Qk4sVUFBVSxDQXNCTyxPQUFPLENBQUMsRUFBRTtBQUN2QixlQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5Qjs7QUFFRCxVQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsWUFBSSxHQUFHLE9BN0JYLFdBQVcsQ0E2QlksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xDOztBQUVELGVBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFlBQUksSUFBSSxFQUFFO0FBQ1IsY0FBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsY0FBSSxXQUFXLEVBQUU7QUFDZixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1dBQ3hDO1NBQ0Y7O0FBRUQsV0FBRyxHQUNELEdBQUcsR0FDSCxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2pCLGNBQUksRUFBRSxJQUFJO0FBQ1YscUJBQVcsRUFBRSxPQWpEckIsV0FBVyxDQWtERCxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFDdkIsQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUM1QjtTQUNGLENBQUMsQ0FBQztPQUNOOztBQUVELFVBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtBQUMxQyxZQUFJLE9BdkRSLE9BQU8sQ0F1RFMsT0FBTyxDQUFDLEVBQUU7QUFDcEIsZUFBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsZ0JBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRTtBQUNoQiwyQkFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7V0FDRjtTQUNGLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNuRSxjQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsY0FBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzVDLGVBQUssSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQzdELHNCQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztXQUMzQjtBQUNELGlCQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGVBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHlCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztXQUMvQztTQUNGLE1BQU07O0FBQ0wsZ0JBQUksUUFBUSxZQUFBLENBQUM7O0FBRWIsa0JBQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRyxFQUFJOzs7O0FBSWxDLGtCQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDMUIsNkJBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2VBQ2hDO0FBQ0Qsc0JBQVEsR0FBRyxHQUFHLENBQUM7QUFDZixlQUFDLEVBQUUsQ0FBQzthQUNMLENBQUMsQ0FBQztBQUNILGdCQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDMUIsMkJBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN0Qzs7U0FDRjtPQUNGOztBQUVELFVBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNYLFdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDckI7O0FBRUQsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJlYWNoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdlYWNoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTXVzdCBwYXNzIGl0ZXJhdG9yIHRvICNlYWNoJyk7XG4gICAgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbixcbiAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICBpID0gMCxcbiAgICAgIHJldCA9ICcnLFxuICAgICAgZGF0YSxcbiAgICAgIGNvbnRleHRQYXRoO1xuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgY29udGV4dFBhdGggPVxuICAgICAgICBhcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKSArICcuJztcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbihjb250ZXh0KSkge1xuICAgICAgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhKSB7XG4gICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleGVjSXRlcmF0aW9uKGZpZWxkLCBpbmRleCwgbGFzdCkge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgZGF0YS5rZXkgPSBmaWVsZDtcbiAgICAgICAgZGF0YS5pbmRleCA9IGluZGV4O1xuICAgICAgICBkYXRhLmZpcnN0ID0gaW5kZXggPT09IDA7XG4gICAgICAgIGRhdGEubGFzdCA9ICEhbGFzdDtcblxuICAgICAgICBpZiAoY29udGV4dFBhdGgpIHtcbiAgICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gY29udGV4dFBhdGggKyBmaWVsZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXQgPVxuICAgICAgICByZXQgK1xuICAgICAgICBmbihjb250ZXh0W2ZpZWxkXSwge1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgYmxvY2tQYXJhbXM6IGJsb2NrUGFyYW1zKFxuICAgICAgICAgICAgW2NvbnRleHRbZmllbGRdLCBmaWVsZF0sXG4gICAgICAgICAgICBbY29udGV4dFBhdGggKyBmaWVsZCwgbnVsbF1cbiAgICAgICAgICApXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgaWYgKGkgaW4gY29udGV4dCkge1xuICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICBjb25zdCBuZXdDb250ZXh0ID0gW107XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gY29udGV4dFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== +; +define('handlebars/helpers/helper-missing',['exports', 'module', '../exception'], function (exports, module, _exception) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + module.exports = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _Exception['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGlDQUFnQztBQUN2RSxVQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUUxQixlQUFPLFNBQVMsQ0FBQztPQUNsQixNQUFNOztBQUVMLGNBQU0sMEJBQ0osbUJBQW1CLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FDakUsQ0FBQztPQUNIO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiaGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oLyogW2FyZ3MsIF1vcHRpb25zICovKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnTWlzc2luZyBoZWxwZXI6IFwiJyArIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0ubmFtZSArICdcIidcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== +; +define('handlebars/helpers/if',['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + module.exports = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _Exception['default']('#if requires exactly one argument'); + } + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _Exception['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUdlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxVQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLGNBQU0sMEJBQWMsbUNBQW1DLENBQUMsQ0FBQztPQUMxRDtBQUNELFVBQUksT0FSVSxVQUFVLENBUVQsV0FBVyxDQUFDLEVBQUU7QUFDM0IsbUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3RDOzs7OztBQUtELFVBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLE9BZjlDLE9BQU8sQ0FlK0MsV0FBVyxDQUFDLEVBQUU7QUFDdkUsZUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDLENBQUM7O0FBRUgsWUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFVBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsY0FBTSwwQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO09BQzlEO0FBQ0QsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixlQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsWUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO09BQ25CLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19 +; +define('handlebars/helpers/log',['exports', 'module'], function (exports, module) { + 'use strict'; + + module.exports = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQ0FBaUM7QUFDOUQsVUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7VUFDcEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFVBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLGFBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDckQsYUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzVCO0FBQ0QsVUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFaEIsY0FBUSxDQUFDLEdBQUcsTUFBQSxDQUFaLFFBQVEsRUFBUSxJQUFJLENBQUMsQ0FBQztLQUN2QixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJsb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24oLyogbWVzc2FnZSwgb3B0aW9ucyAqLykge1xuICAgIGxldCBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi5hcmdzKTtcbiAgfSk7XG59XG4iXX0= +; +define('handlebars/helpers/lookup',['exports', 'module'], function (exports, module) { + 'use strict'; + + module.exports = function (instance) { + instance.registerHelper('lookup', function (obj, field, options) { + if (!obj) { + // Note for 5.0: Change to "obj == null" in 5.0 + return obj; + } + return options.lookupProperty(obj, field); + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQzlELFVBQUksQ0FBQyxHQUFHLEVBQUU7O0FBRVIsZUFBTyxHQUFHLENBQUM7T0FDWjtBQUNELGFBQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0MsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoibG9va3VwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvb2t1cCcsIGZ1bmN0aW9uKG9iaiwgZmllbGQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9iaikge1xuICAgICAgLy8gTm90ZSBmb3IgNS4wOiBDaGFuZ2UgdG8gXCJvYmogPT0gbnVsbFwiIGluIDUuMFxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnMubG9va3VwUHJvcGVydHkob2JqLCBmaWVsZCk7XG4gIH0pO1xufVxuIl19 +; +define('handlebars/helpers/with',['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + module.exports = function (instance) { + instance.registerHelper('with', function (context, options) { + if (arguments.length != 2) { + throw new _Exception['default']('#with requires exactly one argument'); + } + if (_utils.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!_utils.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: _utils.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7bUJBU2UsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsY0FBTSwwQkFBYyxxQ0FBcUMsQ0FBQyxDQUFDO09BQzVEO0FBQ0QsVUFBSSxPQVROLFVBQVUsQ0FTTyxPQUFPLENBQUMsRUFBRTtBQUN2QixlQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5Qjs7QUFFRCxVQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixVQUFJLENBQUMsT0FoQlAsT0FBTyxDQWdCUSxPQUFPLENBQUMsRUFBRTtBQUNyQixZQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFlBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLGNBQUksR0FBRyxPQXBCYixXQUFXLENBb0JjLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQyxjQUFJLENBQUMsV0FBVyxHQUFHLE9BdkJ6QixpQkFBaUIsQ0F3QlQsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQztTQUNIOztBQUVELGVBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixjQUFJLEVBQUUsSUFBSTtBQUNWLHFCQUFXLEVBQUUsT0E5Qm5CLFdBQVcsQ0E4Qm9CLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hFLENBQUMsQ0FBQztPQUNKLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDOUI7S0FDRixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= +; +define('handlebars/helpers',['exports', './helpers/block-helper-missing', './helpers/each', './helpers/helper-missing', './helpers/if', './helpers/log', './helpers/lookup', './helpers/with'], function (exports, _helpersBlockHelperMissing, _helpersEach, _helpersHelperMissing, _helpersIf, _helpersLog, _helpersLookup, _helpersWith) { + 'use strict'; + + exports.__esModule = true; + exports.registerDefaultHelpers = registerDefaultHelpers; + exports.moveHelperToHooks = moveHelperToHooks; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _registerBlockHelperMissing = _interopRequireDefault(_helpersBlockHelperMissing); + + var _registerEach = _interopRequireDefault(_helpersEach); + + var _registerHelperMissing = _interopRequireDefault(_helpersHelperMissing); + + var _registerIf = _interopRequireDefault(_helpersIf); + + var _registerLog = _interopRequireDefault(_helpersLog); + + var _registerLookup = _interopRequireDefault(_helpersLookup); + + var _registerWith = _interopRequireDefault(_helpersWith); + + function registerDefaultHelpers(instance) { + _registerBlockHelperMissing['default'](instance); + _registerEach['default'](instance); + _registerHelperMissing['default'](instance); + _registerIf['default'](instance); + _registerLog['default'](instance); + _registerLookup['default'](instance); + _registerWith['default'](instance); + } + + function moveHelperToHooks(instance, helperName, keepHelper) { + if (instance.helpers[helperName]) { + instance.hooks[helperName] = instance.helpers[helperName]; + if (!keepHelper) { + // Using delete is slow + instance.helpers[helperName] = undefined; + } + } + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUU8sV0FBUyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUU7QUFDL0MsMkNBQTJCLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDLDZCQUFhLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZCLHNDQUFzQixRQUFRLENBQUMsQ0FBQztBQUNoQywyQkFBVyxRQUFRLENBQUMsQ0FBQztBQUNyQiw0QkFBWSxRQUFRLENBQUMsQ0FBQztBQUN0QiwrQkFBZSxRQUFRLENBQUMsQ0FBQztBQUN6Qiw2QkFBYSxRQUFRLENBQUMsQ0FBQztHQUN4Qjs7QUFFTSxXQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0FBQ2xFLFFBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNoQyxjQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUQsVUFBSSxDQUFDLFVBQVUsRUFBRTs7QUFFZixnQkFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7T0FDMUM7S0FDRjtHQUNGIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlckVhY2ggZnJvbSAnLi9oZWxwZXJzL2VhY2gnO1xuaW1wb3J0IHJlZ2lzdGVySGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVySWYgZnJvbSAnLi9oZWxwZXJzL2lmJztcbmltcG9ydCByZWdpc3RlckxvZyBmcm9tICcuL2hlbHBlcnMvbG9nJztcbmltcG9ydCByZWdpc3Rlckxvb2t1cCBmcm9tICcuL2hlbHBlcnMvbG9va3VwJztcbmltcG9ydCByZWdpc3RlcldpdGggZnJvbSAnLi9oZWxwZXJzL3dpdGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyRWFjaChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySWYoaW5zdGFuY2UpO1xuICByZWdpc3RlckxvZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9va3VwKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJXaXRoKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdmVIZWxwZXJUb0hvb2tzKGluc3RhbmNlLCBoZWxwZXJOYW1lLCBrZWVwSGVscGVyKSB7XG4gIGlmIChpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdKSB7XG4gICAgaW5zdGFuY2UuaG9va3NbaGVscGVyTmFtZV0gPSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIGlmICgha2VlcEhlbHBlcikge1xuICAgICAgLy8gVXNpbmcgZGVsZXRlIGlzIHNsb3dcbiAgICAgIGluc3RhbmNlLmhlbHBlcnNbaGVscGVyTmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0= +; +define('handlebars/decorators/inline',['exports', 'module', '../utils'], function (exports, module, _utils) { + 'use strict'; + + module.exports = function (instance) { + instance.registerDecorator('inline', function (fn, props, container, options) { + var ret = fn; + if (!props.partials) { + props.partials = {}; + ret = function (context, options) { + // Create a new partials stack frame prior to exec. + var original = container.partials; + container.partials = _utils.extend({}, original, props.partials); + var ret = fn(context, options); + container.partials = original; + return ret; + }; + } + + props.partials[options.args[0]] = options.fn; + + return ret; + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFFZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFVBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFVBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLGFBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFdBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLGNBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsbUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FWcEIsTUFBTSxDQVVxQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxjQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixpQkFBTyxHQUFHLENBQUM7U0FDWixDQUFDO09BQ0g7O0FBRUQsV0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFN0MsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpbmxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0= +; +define('handlebars/decorators',['exports', './decorators/inline'], function (exports, _decoratorsInline) { + 'use strict'; + + exports.__esModule = true; + exports.registerDefaultDecorators = registerDefaultDecorators; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _registerInline = _interopRequireDefault(_decoratorsInline); + + function registerDefaultDecorators(instance) { + _registerInline['default'](instance); + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFTyxXQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCwrQkFBZSxRQUFRLENBQUMsQ0FBQztHQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0= +; +define('handlebars/logger',['exports', 'module', './utils'], function (exports, module, _utils) { + 'use strict'; + + var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + // eslint-disable-next-line no-console + if (!console[method]) { + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } + }; + + module.exports = logger; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFJLE1BQU0sR0FBRztBQUNYLGFBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxTQUFLLEVBQUUsTUFBTTs7O0FBR2IsZUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixVQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixZQUFJLFFBQVEsR0FBRyxPQVRaLE9BQU8sQ0FTYSxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNqQixlQUFLLEdBQUcsUUFBUSxDQUFDO1NBQ2xCLE1BQU07QUFDTCxlQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtPQUNGOztBQUVELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7OztBQUdELE9BQUcsRUFBRSxhQUFTLEtBQUssRUFBYztBQUMvQixXQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsVUFDRSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQzlCLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFDekM7QUFDQSxZQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxZQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3BCLGdCQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ2hCOzswQ0FYbUIsT0FBTztBQUFQLGlCQUFPOzs7QUFZM0IsZUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztPQUM3QjtLQUNGO0dBQ0YsQ0FBQzs7bUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0= +; +define('handlebars/internal/proto-access',['exports', '../utils', '../logger'], function (exports, _utils, _logger) { + 'use strict'; + + exports.__esModule = true; + exports.createProtoAccessControl = createProtoAccessControl; + exports.resultIsAllowed = resultIsAllowed; + exports.resetLoggedProperties = resetLoggedProperties; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _logger2 = _interopRequireDefault(_logger); + + var loggedProperties = Object.create(null); + + function createProtoAccessControl(runtimeOptions) { + // Create an object with "null"-prototype to avoid truthy results on + // prototype properties. + var propertyWhiteList = Object.create(null); + // eslint-disable-next-line no-proto + propertyWhiteList['__proto__'] = false; + _utils.extend(propertyWhiteList, runtimeOptions.allowedProtoProperties); + + var methodWhiteList = Object.create(null); + methodWhiteList['constructor'] = false; + methodWhiteList['__defineGetter__'] = false; + methodWhiteList['__defineSetter__'] = false; + methodWhiteList['__lookupGetter__'] = false; + methodWhiteList['__lookupSetter__'] = false; + _utils.extend(methodWhiteList, runtimeOptions.allowedProtoMethods); + + return { + properties: { + whitelist: propertyWhiteList, + defaultValue: runtimeOptions.allowProtoPropertiesByDefault + }, + methods: { + whitelist: methodWhiteList, + defaultValue: runtimeOptions.allowProtoMethodsByDefault + } + }; + } + + function resultIsAllowed(result, protoAccessControl, propertyName) { + if (typeof result === 'function') { + return checkWhiteList(protoAccessControl.methods, propertyName); + } else { + return checkWhiteList(protoAccessControl.properties, propertyName); + } + } + + function checkWhiteList(protoAccessControlForType, propertyName) { + if (protoAccessControlForType.whitelist[propertyName] !== undefined) { + return protoAccessControlForType.whitelist[propertyName] === true; + } + if (protoAccessControlForType.defaultValue !== undefined) { + return protoAccessControlForType.defaultValue; + } + logUnexpecedPropertyAccessOnce(propertyName); + return false; + } + + function logUnexpecedPropertyAccessOnce(propertyName) { + if (loggedProperties[propertyName] !== true) { + loggedProperties[propertyName] = true; + _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'); + } + } + + function resetLoggedProperties() { + Object.keys(loggedProperties).forEach(function (propertyName) { + delete loggedProperties[propertyName]; + }); + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBR0EsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUV0QyxXQUFTLHdCQUF3QixDQUFDLGNBQWMsRUFBRTs7O0FBR3ZELFFBQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFOUMscUJBQWlCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLFdBWE8sTUFBTSxDQVdOLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDOztBQUVqRSxRQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLG1CQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLG1CQUFlLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDNUMsbUJBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM1QyxtQkFBZSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzVDLG1CQUFlLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDNUMsV0FuQk8sTUFBTSxDQW1CTixlQUFlLEVBQUUsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUM7O0FBRTVELFdBQU87QUFDTCxnQkFBVSxFQUFFO0FBQ1YsaUJBQVMsRUFBRSxpQkFBaUI7QUFDNUIsb0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO09BQzNEO0FBQ0QsYUFBTyxFQUFFO0FBQ1AsaUJBQVMsRUFBRSxlQUFlO0FBQzFCLG9CQUFZLEVBQUUsY0FBYyxDQUFDLDBCQUEwQjtPQUN4RDtLQUNGLENBQUM7R0FDSDs7QUFFTSxXQUFTLGVBQWUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFO0FBQ3hFLFFBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ2hDLGFBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztLQUNqRSxNQUFNO0FBQ0wsYUFBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO0tBQ3BFO0dBQ0Y7O0FBRUQsV0FBUyxjQUFjLENBQUMseUJBQXlCLEVBQUUsWUFBWSxFQUFFO0FBQy9ELFFBQUkseUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNuRSxhQUFPLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLENBQUM7S0FDbkU7QUFDRCxRQUFJLHlCQUF5QixDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUU7QUFDeEQsYUFBTyx5QkFBeUIsQ0FBQyxZQUFZLENBQUM7S0FDL0M7QUFDRCxrQ0FBOEIsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3QyxXQUFPLEtBQUssQ0FBQztHQUNkOztBQUVELFdBQVMsOEJBQThCLENBQUMsWUFBWSxFQUFFO0FBQ3BELFFBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzNDLHNCQUFnQixDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QywwQkFBTyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0tBQ0g7R0FDRjs7QUFFTSxXQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFVBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsYUFBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUN2QyxDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbmNvbnN0IGxvZ2dlZFByb3BlcnRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKHJ1bnRpbWVPcHRpb25zKSB7XG4gIC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb25cbiAgLy8gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gIGNvbnN0IHByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIHByb3BlcnR5V2hpdGVMaXN0WydfX3Byb3RvX18nXSA9IGZhbHNlO1xuICBleHRlbmQocHJvcGVydHlXaGl0ZUxpc3QsIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXMpO1xuXG4gIGNvbnN0IG1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIG1ldGhvZFdoaXRlTGlzdFsnY29uc3RydWN0b3InXSA9IGZhbHNlO1xuICBtZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBtZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBtZXRob2RXaGl0ZUxpc3RbJ19fbG9va3VwR2V0dGVyX18nXSA9IGZhbHNlO1xuICBtZXRob2RXaGl0ZUxpc3RbJ19fbG9va3VwU2V0dGVyX18nXSA9IGZhbHNlO1xuICBleHRlbmQobWV0aG9kV2hpdGVMaXN0LCBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9NZXRob2RzKTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogcHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IG1ldGhvZFdoaXRlTGlzdCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ== +; +define('handlebars/base',['exports', './utils', './exception', './helpers', './decorators', './logger', './internal/proto-access'], function (exports, _utils, _exception, _helpers, _decorators, _logger, _internalProtoAccess) { + 'use strict'; + + exports.__esModule = true; + exports.HandlebarsEnvironment = HandlebarsEnvironment; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + var _logger2 = _interopRequireDefault(_logger); + + var VERSION = '4.7.9'; + exports.VERSION = VERSION; + var COMPILER_REVISION = 8; + exports.COMPILER_REVISION = COMPILER_REVISION; + var LAST_COMPATIBLE_COMPILER_REVISION = 7; + + exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION; + var REVISION_CHANGES = { + 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it + 2: '== 1.0.0-rc.3', + 3: '== 1.0.0-rc.4', + 4: '== 1.x.x', + 5: '== 2.0.0-alpha.x', + 6: '>= 2.0.0-beta.1', + 7: '>= 4.0.0 <4.3.0', + 8: '>= 4.3.0' + }; + + exports.REVISION_CHANGES = REVISION_CHANGES; + var objectType = '[object Object]'; + + function HandlebarsEnvironment(helpers, partials, decorators) { + this.helpers = helpers || {}; + this.partials = partials || {}; + this.decorators = decorators || {}; + + _helpers.registerDefaultHelpers(this); + _decorators.registerDefaultDecorators(this); + } + + HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: _logger2['default'], + log: _logger2['default'].log, + + registerHelper: function registerHelper(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _Exception['default']('Arg not supported with multiple helpers'); + } + _utils.extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function unregisterHelper(name) { + delete this.helpers[name]; + }, + + registerPartial: function registerPartial(name, partial) { + if (_utils.toString.call(name) === objectType) { + _utils.extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new _Exception['default']('Attempting to register a partial called "' + name + '" as undefined'); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function unregisterPartial(name) { + delete this.partials[name]; + }, + + registerDecorator: function registerDecorator(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _Exception['default']('Arg not supported with multiple decorators'); + } + _utils.extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function unregisterDecorator(name) { + delete this.decorators[name]; + }, + /** + * Reset the memory of illegal property accesses that have already been logged. + * @deprecated should only be used in handlebars test-cases + */ + resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() { + _internalProtoAccess.resetLoggedProperties(); + } + }; + + var log = _logger2['default'].log; + + exports.log = log; + exports.createFrame = _utils.createFrame; + exports.logger = _logger2['default']; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU9PLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7O0FBQzVCLE1BQU0saUNBQWlDLEdBQUcsQ0FBQyxDQUFDOzs7QUFFNUMsTUFBTSxnQkFBZ0IsR0FBRztBQUM5QixLQUFDLEVBQUUsYUFBYTtBQUNoQixLQUFDLEVBQUUsZUFBZTtBQUNsQixLQUFDLEVBQUUsZUFBZTtBQUNsQixLQUFDLEVBQUUsVUFBVTtBQUNiLEtBQUMsRUFBRSxrQkFBa0I7QUFDckIsS0FBQyxFQUFFLGlCQUFpQjtBQUNwQixLQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEtBQUMsRUFBRSxVQUFVO0dBQ2QsQ0FBQzs7O0FBRUYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFdBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsUUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLFFBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGFBM0JPLHNCQUFzQixDQTJCTixJQUFJLENBQUMsQ0FBQztBQUM3QixnQkEzQk8seUJBQXlCLENBMkJOLElBQUksQ0FBQyxDQUFDO0dBQ2pDOztBQUVELHVCQUFxQixDQUFDLFNBQVMsR0FBRztBQUNoQyxlQUFXLEVBQUUscUJBQXFCOztBQUVsQyxVQUFNLHFCQUFRO0FBQ2QsT0FBRyxFQUFFLG9CQUFPLEdBQUc7O0FBRWYsa0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLFVBQUksT0F4Q3NCLFFBQVEsQ0F3Q3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsWUFBSSxFQUFFLEVBQUU7QUFDTixnQkFBTSwwQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQ2hFO0FBQ0QsZUE1Q2dCLE1BQU0sQ0E0Q2YsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM1QixNQUFNO0FBQ0wsWUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDekI7S0FDRjtBQUNELG9CQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixhQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0I7O0FBRUQsbUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFVBQUksT0F0RHNCLFFBQVEsQ0FzRHJCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsZUF2RGdCLE1BQU0sQ0F1RGYsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUM3QixNQUFNO0FBQ0wsWUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLEVBQUU7QUFDbEMsZ0JBQU0sd0VBQ3dDLElBQUksb0JBQ2pELENBQUM7U0FDSDtBQUNELFlBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO09BQy9CO0tBQ0Y7QUFDRCxxQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsYUFBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzVCOztBQUVELHFCQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsVUFBSSxPQXRFc0IsUUFBUSxDQXNFckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxZQUFJLEVBQUUsRUFBRTtBQUNOLGdCQUFNLDBCQUFjLDRDQUE0QyxDQUFDLENBQUM7U0FDbkU7QUFDRCxlQTFFZ0IsTUFBTSxDQTBFZixJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO09BQy9CLE1BQU07QUFDTCxZQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUM1QjtLQUNGO0FBQ0QsdUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLGFBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5Qjs7Ozs7QUFLRCwrQkFBMkIsRUFBQSx1Q0FBRztBQUM1QiwyQkFsRksscUJBQXFCLEVBa0ZILENBQUM7S0FDekI7R0FDRixDQUFDOztBQUVLLE1BQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1VBRW5CLFdBQVcsVUE3RlgsV0FBVztVQTZGRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy45JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19 +; +define('handlebars/safe-string',['exports', 'module'], function (exports, module) { + // Build out our basic SafeString type + 'use strict'; + + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + module.exports = SafeString; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxXQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsUUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDdEI7O0FBRUQsWUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxXQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0dBQ3pCLENBQUM7O21CQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ== +; +define('handlebars/internal/wrapHelper',['exports'], function (exports) { + 'use strict'; + + exports.__esModule = true; + exports.wrapHelper = wrapHelper; + + function wrapHelper(helper, transformOptionsFn) { + if (typeof helper !== 'function') { + // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 + // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. + return helper; + } + var wrapper = function wrapper() /* dynamic arguments */{ + var options = arguments[arguments.length - 1]; + arguments[arguments.length - 1] = transformOptionsFn(options); + return helper.apply(this, arguments); + }; + return wrapper; + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU8sV0FBUyxVQUFVLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFO0FBQ3JELFFBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFOzs7QUFHaEMsYUFBTyxNQUFNLENBQUM7S0FDZjtBQUNELFFBQUksT0FBTyxHQUFHLFNBQVYsT0FBTywwQkFBcUM7QUFDOUMsVUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsZUFBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQsYUFBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUN0QyxDQUFDO0FBQ0YsV0FBTyxPQUFPLENBQUM7R0FDaEIiLCJmaWxlIjoid3JhcEhlbHBlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiB3cmFwSGVscGVyKGhlbHBlciwgdHJhbnNmb3JtT3B0aW9uc0ZuKSB7XG4gIGlmICh0eXBlb2YgaGVscGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYnV0IGFwcGFyZW50bHkgaXQgZG9lcyBpbiBodHRwczovL2dpdGh1Yi5jb20vd3ljYXRzL2hhbmRsZWJhcnMuanMvaXNzdWVzLzE2MzlcbiAgICAvLyBXZSB0cnkgdG8gbWFrZSB0aGUgd3JhcHBlciBsZWFzdC1pbnZhc2l2ZSBieSBub3Qgd3JhcHBpbmcgaXQsIGlmIHRoZSBoZWxwZXIgaXMgbm90IGEgZnVuY3Rpb24uXG4gICAgcmV0dXJuIGhlbHBlcjtcbiAgfVxuICBsZXQgd3JhcHBlciA9IGZ1bmN0aW9uKC8qIGR5bmFtaWMgYXJndW1lbnRzICovKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSA9IHRyYW5zZm9ybU9wdGlvbnNGbihvcHRpb25zKTtcbiAgICByZXR1cm4gaGVscGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIHJldHVybiB3cmFwcGVyO1xufVxuIl19 +; +define('handlebars/runtime',['exports', './utils', './exception', './base', './helpers', './internal/wrapHelper', './internal/proto-access'], function (exports, _utils, _exception, _base, _helpers, _internalWrapHelper, _internalProtoAccess) { + 'use strict'; + + exports.__esModule = true; + exports.checkRevision = checkRevision; + exports.template = template; + exports.wrapProgram = wrapProgram; + exports.resolvePartial = resolvePartial; + exports.invokePartial = invokePartial; + exports.noop = noop; + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = _base.COMPILER_REVISION; + + if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) { + return; + } + + if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) { + var runtimeVersions = _base.REVISION_CHANGES[currentRevision], + compilerVersions = _base.REVISION_CHANGES[compilerRevision]; + throw new _Exception['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _Exception['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } + } + + function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _Exception['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _Exception['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as pseudo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) + var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = _utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + partial = env.VM.resolvePartial.call(this, partial, context, options); + + options.hooks = this.hooks; + options.protoAccessControl = this.protoAccessControl; + + var result = env.VM.invokePartial.call(this, partial, context, options); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, options); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _Exception['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name, loc) { + if (!obj || !(name in obj)) { + throw new _Exception['default']('"' + name + '" not defined in ' + obj, { + loc: loc + }); + } + return container.lookupProperty(obj, name); + }, + lookupProperty: function lookupProperty(parent, propertyName) { + var result = parent[propertyName]; + if (result == null) { + return result; + } + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return result; + } + + if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { + return result; + } + return undefined; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + var result = depths[i] && container.lookupProperty(depths[i], name); + if (result != null) { + return result; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: _utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + mergeIfNeeded: function mergeIfNeeded(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = _utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: Object.seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + var mergedHelpers = {}; + addHelpers(mergedHelpers, env.helpers, container); + addHelpers(mergedHelpers, options.helpers, container); + container.helpers = mergedHelpers; + + if (templateSpec.usePartial) { + // Use mergeIfNeeded here to prevent compiling global partials multiple times + container.partials = container.mergeIfNeeded(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = _utils.extend({}, env.decorators, options.decorators); + } + + container.hooks = {}; + container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options); + + var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; + _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); + _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); + } else { + container.protoAccessControl = options.protoAccessControl; // internal option + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + container.hooks = options.hooks; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _Exception['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _Exception['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; + } + + function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; + } + + /** + * This is currently part of the official API, therefore implementation details should not be changed. + */ + + function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = lookupOwnProperty(options.data, 'partial-block'); + } else { + partial = lookupOwnProperty(options.partials, options.name); + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = lookupOwnProperty(options.partials, partial); + } + return partial; + } + + function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = lookupOwnProperty(options.data, 'partial-block'); + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = _base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = _base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = _utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _Exception['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } + } + + function noop() { + return ''; + } + + function lookupOwnProperty(obj, name) { + if (obj && Object.prototype.hasOwnProperty.call(obj, name)) { + return obj[name]; + } + } + + function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? _base.createFrame(data) : {}; + data.root = context; + } + return data; + } + + function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + _utils.extend(prog, props); + } + return prog; + } + + function addHelpers(mergedHelpers, helpers, container) { + if (!helpers) return; + Object.keys(helpers).forEach(function (helperName) { + var helper = helpers[helperName]; + mergedHelpers[helperName] = passLookupPropertyOption(helper, container); + }); + } + + function passLookupPropertyOption(helper, container) { + var lookupProperty = container.lookupProperty; + return _internalWrapHelper.wrapHelper(helper, function (options) { + options.lookupProperty = lookupProperty; + return options; + }); + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWVPLFdBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxRQUFNLGdCQUFnQixHQUFHLEFBQUMsWUFBWSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSyxDQUFDO1FBQzdELGVBQWUsU0FkakIsaUJBQWlCLEFBY29CLENBQUM7O0FBRXRDLFFBQ0UsZ0JBQWdCLFVBZmxCLGlDQUFpQyxBQWVzQixJQUNyRCxnQkFBZ0IsVUFsQmxCLGlCQUFpQixBQWtCc0IsRUFDckM7QUFDQSxhQUFPO0tBQ1I7O0FBRUQsUUFBSSxnQkFBZ0IsU0FyQnBCLGlDQUFpQyxBQXFCdUIsRUFBRTtBQUN4RCxVQUFNLGVBQWUsR0FBRyxNQXJCMUIsZ0JBQWdCLENBcUIyQixlQUFlLENBQUM7VUFDdkQsZ0JBQWdCLEdBQUcsTUF0QnZCLGdCQUFnQixDQXNCd0IsZ0JBQWdCLENBQUMsQ0FBQztBQUN4RCxZQUFNLDBCQUNKLHlGQUF5RixHQUN2RixxREFBcUQsR0FDckQsZUFBZSxHQUNmLG1EQUFtRCxHQUNuRCxnQkFBZ0IsR0FDaEIsSUFBSSxDQUNQLENBQUM7S0FDSCxNQUFNOztBQUVMLFlBQU0sMEJBQ0osd0ZBQXdGLEdBQ3RGLGlEQUFpRCxHQUNqRCxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQ2YsSUFBSSxDQUNQLENBQUM7S0FDSDtHQUNGOztBQUVNLFdBQVMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7O0FBRTFDLFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixZQUFNLDBCQUFjLG1DQUFtQyxDQUFDLENBQUM7S0FDMUQ7QUFDRCxRQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUN2QyxZQUFNLDBCQUFjLDJCQUEyQixHQUFHLE9BQU8sWUFBWSxDQUFDLENBQUM7S0FDeEU7O0FBRUQsZ0JBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7QUFJbEQsT0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzs7QUFHNUMsUUFBTSxvQ0FBb0MsR0FDeEMsWUFBWSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFMUQsYUFBUyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN2RCxVQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsZUFBTyxHQUFHLE9BQU0sTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUN2QjtPQUNGO0FBQ0QsYUFBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFdEUsYUFBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzNCLGFBQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7O0FBRXJELFVBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFeEUsVUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7QUFDakMsZUFBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FDMUMsT0FBTyxFQUNQLFlBQVksQ0FBQyxlQUFlLEVBQzVCLEdBQUcsQ0FDSixDQUFDO0FBQ0YsY0FBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUMzRDtBQUNELFVBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDbEIsY0FBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixlQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLGdCQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLG9CQUFNO2FBQ1A7O0FBRUQsaUJBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN0QztBQUNELGdCQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtBQUNELGVBQU8sTUFBTSxDQUFDO09BQ2YsTUFBTTtBQUNMLGNBQU0sMEJBQ0osY0FBYyxHQUNaLE9BQU8sQ0FBQyxJQUFJLEdBQ1osMERBQTBELENBQzdELENBQUM7T0FDSDtLQUNGOzs7QUFHRCxRQUFJLFNBQVMsR0FBRztBQUNkLFlBQU0sRUFBRSxnQkFBUyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUMvQixZQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsQ0FBQSxBQUFDLEVBQUU7QUFDMUIsZ0JBQU0sMEJBQWMsR0FBRyxHQUFHLElBQUksR0FBRyxtQkFBbUIsR0FBRyxHQUFHLEVBQUU7QUFDMUQsZUFBRyxFQUFFLEdBQUc7V0FDVCxDQUFDLENBQUM7U0FDSjtBQUNELGVBQU8sU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDNUM7QUFDRCxvQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxZQUFZLEVBQUU7QUFDN0MsWUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xDLFlBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixpQkFBTyxNQUFNLENBQUM7U0FDZjtBQUNELFlBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRTtBQUM5RCxpQkFBTyxNQUFNLENBQUM7U0FDZjs7QUFFRCxZQUFJLHFCQXRIUixlQUFlLENBc0hTLE1BQU0sRUFBRSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEVBQUU7QUFDdkUsaUJBQU8sTUFBTSxDQUFDO1NBQ2Y7QUFDRCxlQUFPLFNBQVMsQ0FBQztPQUNsQjtBQUNELFlBQU0sRUFBRSxnQkFBUyxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQzdCLFlBQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixjQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEUsY0FBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ2xCLG1CQUFPLE1BQU0sQ0FBQztXQUNmO1NBQ0Y7T0FDRjtBQUNELFlBQU0sRUFBRSxnQkFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ2pDLGVBQU8sT0FBTyxPQUFPLEtBQUssVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO09BQ3hFOztBQUVELHNCQUFnQixFQUFFLE9BQU0sZ0JBQWdCO0FBQ3hDLG1CQUFhLEVBQUUsb0JBQW9COztBQUVuQyxRQUFFLEVBQUUsWUFBUyxDQUFDLEVBQUU7QUFDZCxZQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsV0FBRyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLGVBQU8sR0FBRyxDQUFDO09BQ1o7O0FBRUQsY0FBUSxFQUFFLEVBQUU7QUFDWixhQUFPLEVBQUUsaUJBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO0FBQ25FLFlBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFlBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxXQUFXLElBQUksbUJBQW1CLEVBQUU7QUFDeEQsd0JBQWMsR0FBRyxXQUFXLENBQzFCLElBQUksRUFDSixDQUFDLEVBQ0QsRUFBRSxFQUNGLElBQUksRUFDSixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLE1BQU0sQ0FDUCxDQUFDO1NBQ0gsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQzFCLHdCQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5RDtBQUNELGVBQU8sY0FBYyxDQUFDO09BQ3ZCOztBQUVELFVBQUksRUFBRSxjQUFTLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDM0IsZUFBTyxLQUFLLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDdkIsZUFBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDdkI7QUFDRCxlQUFPLEtBQUssQ0FBQztPQUNkO0FBQ0QsbUJBQWEsRUFBRSx1QkFBUyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3JDLFlBQUksR0FBRyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUM7O0FBRTFCLFlBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO0FBQ3ZDLGFBQUcsR0FBRyxPQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDOztBQUVELGVBQU8sR0FBRyxDQUFDO09BQ1o7O0FBRUQsaUJBQVcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQzs7QUFFNUIsVUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSTtBQUNqQixrQkFBWSxFQUFFLFlBQVksQ0FBQyxRQUFRO0tBQ3BDLENBQUM7O0FBRUYsYUFBUyxHQUFHLENBQUMsT0FBTyxFQUFnQjtVQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDaEMsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQzs7QUFFeEIsU0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQixVQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzVDLFlBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ2hDO0FBQ0QsVUFBSSxNQUFNLFlBQUE7VUFDUixXQUFXLEdBQUcsWUFBWSxDQUFDLGNBQWMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO0FBQzdELFVBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtBQUMxQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDbEIsZ0JBQU0sR0FDSixPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FDeEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUNoQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3RCLE1BQU07QUFDTCxnQkFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDcEI7T0FDRjs7QUFFRCxlQUFTLElBQUksQ0FBQyxPQUFPLGdCQUFnQjtBQUNuQyxlQUNFLEVBQUUsR0FDRixZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxDQUFDLE9BQU8sRUFDakIsU0FBUyxDQUFDLFFBQVEsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FDRDtPQUNIOztBQUVELFVBQUksR0FBRyxpQkFBaUIsQ0FDdEIsWUFBWSxDQUFDLElBQUksRUFDakIsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFDcEIsSUFBSSxFQUNKLFdBQVcsQ0FDWixDQUFDO0FBQ0YsYUFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQy9COztBQUVELE9BQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztBQUVqQixPQUFHLENBQUMsTUFBTSxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQzdCLFVBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3BCLFlBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN2QixrQkFBVSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELGtCQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdEQsaUJBQVMsQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDOztBQUVsQyxZQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUU7O0FBRTNCLG1CQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQzFDLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLEdBQUcsQ0FBQyxRQUFRLENBQ2IsQ0FBQztTQUNIO0FBQ0QsWUFBSSxZQUFZLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUU7QUFDekQsbUJBQVMsQ0FBQyxVQUFVLEdBQUcsT0FBTSxNQUFNLENBQ2pDLEVBQUUsRUFDRixHQUFHLENBQUMsVUFBVSxFQUNkLE9BQU8sQ0FBQyxVQUFVLENBQ25CLENBQUM7U0FDSDs7QUFFRCxpQkFBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsaUJBQVMsQ0FBQyxrQkFBa0IsR0FBRyxxQkFuUW5DLHdCQUF3QixDQW1Rb0MsT0FBTyxDQUFDLENBQUM7O0FBRWpFLFlBQUksbUJBQW1CLEdBQ3JCLE9BQU8sQ0FBQyx5QkFBeUIsSUFDakMsb0NBQW9DLENBQUM7QUFDdkMsaUJBM1FHLGlCQUFpQixDQTJRRixTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDbkUsaUJBNVFHLGlCQUFpQixDQTRRRixTQUFTLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztPQUN6RSxNQUFNO0FBQ0wsaUJBQVMsQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDMUQsaUJBQVMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxpQkFBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3RDLGlCQUFTLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDMUMsaUJBQVMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztPQUNqQztLQUNGLENBQUM7O0FBRUYsT0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNsRCxVQUFJLFlBQVksQ0FBQyxjQUFjLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDL0MsY0FBTSwwQkFBYyx3QkFBd0IsQ0FBQyxDQUFDO09BQy9DO0FBQ0QsVUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JDLGNBQU0sMEJBQWMseUJBQXlCLENBQUMsQ0FBQztPQUNoRDs7QUFFRCxhQUFPLFdBQVcsQ0FDaEIsU0FBUyxFQUNULENBQUMsRUFDRCxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2YsSUFBSSxFQUNKLENBQUMsRUFDRCxXQUFXLEVBQ1gsTUFBTSxDQUNQLENBQUM7S0FDSCxDQUFDO0FBQ0YsV0FBTyxHQUFHLENBQUM7R0FDWjs7QUFFTSxXQUFTLFdBQVcsQ0FDekIsU0FBUyxFQUNULENBQUMsRUFDRCxFQUFFLEVBQ0YsSUFBSSxFQUNKLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsTUFBTSxFQUNOO0FBQ0EsYUFBUyxJQUFJLENBQUMsT0FBTyxFQUFnQjtVQUFkLE9BQU8seURBQUcsRUFBRTs7QUFDakMsVUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDO0FBQzNCLFVBQ0UsTUFBTSxJQUNOLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQ3BCLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQSxBQUFDLEVBQzFEO0FBQ0EscUJBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUMxQzs7QUFFRCxhQUFPLEVBQUUsQ0FDUCxTQUFTLEVBQ1QsT0FBTyxFQUNQLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxRQUFRLEVBQ2xCLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUNwQixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUN4RCxhQUFhLENBQ2QsQ0FBQztLQUNIOztBQUVELFFBQUksR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDOztBQUV6RSxRQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFJLENBQUMsV0FBVyxHQUFHLG1CQUFtQixJQUFJLENBQUMsQ0FBQztBQUM1QyxXQUFPLElBQUksQ0FBQztHQUNiOzs7Ozs7QUFLTSxXQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN4RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osVUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3JDLGVBQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO09BQzVELE1BQU07QUFDTCxlQUFPLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDN0Q7S0FDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs7QUFFekMsYUFBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdkIsYUFBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDeEQ7QUFDRCxXQUFPLE9BQU8sQ0FBQztHQUNoQjs7QUFFTSxXQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTs7QUFFdkQsUUFBTSxtQkFBbUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzdFLFdBQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGFBQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDdkU7O0FBRUQsUUFBSSxZQUFZLFlBQUEsQ0FBQztBQUNqQixRQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7O0FBQ3JDLGVBQU8sQ0FBQyxJQUFJLEdBQUcsTUFqWGpCLFdBQVcsQ0FpWGtCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFekMsWUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNwQixvQkFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsU0FBUyxtQkFBbUIsQ0FDekUsT0FBTyxFQUVQO2NBREEsT0FBTyx5REFBRyxFQUFFOzs7O0FBSVosaUJBQU8sQ0FBQyxJQUFJLEdBQUcsTUExWG5CLFdBQVcsQ0EwWG9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxpQkFBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxpQkFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzdCLENBQUM7QUFDRixZQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDZixpQkFBTyxDQUFDLFFBQVEsR0FBRyxPQUFNLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEU7O0tBQ0Y7O0FBRUQsUUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLFlBQVksRUFBRTtBQUN6QyxhQUFPLEdBQUcsWUFBWSxDQUFDO0tBQ3hCOztBQUVELFFBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUN6QixZQUFNLDBCQUFjLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLENBQUM7S0FDNUUsTUFBTSxJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUU7QUFDdEMsYUFBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDO0dBQ0Y7O0FBRU0sV0FBUyxJQUFJLEdBQUc7QUFDckIsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxXQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDcEMsUUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRTtBQUMxRCxhQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQjtHQUNGOztBQUVELFdBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDL0IsUUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUEsQUFBQyxFQUFFO0FBQzlCLFVBQUksR0FBRyxJQUFJLEdBQUcsTUExWmhCLFdBQVcsQ0EwWmlCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQyxVQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztLQUNyQjtBQUNELFdBQU8sSUFBSSxDQUFDO0dBQ2I7O0FBRUQsV0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUN6RSxRQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUU7QUFDaEIsVUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2YsVUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQ2pCLElBQUksRUFDSixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ25CLElBQUksRUFDSixXQUFXLEVBQ1gsTUFBTSxDQUNQLENBQUM7QUFDRixhQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiOztBQUVELFdBQVMsVUFBVSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFO0FBQ3JELFFBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTztBQUNyQixVQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLFVBQVUsRUFBSTtBQUN6QyxVQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakMsbUJBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDekUsQ0FBQyxDQUFDO0dBQ0o7O0FBRUQsV0FBUyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ25ELFFBQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDaEQsV0FBTyxvQkF0YkEsVUFBVSxDQXNiQyxNQUFNLEVBQUUsVUFBQSxPQUFPLEVBQUk7QUFDbkMsYUFBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEMsYUFBTyxPQUFPLENBQUM7S0FDaEIsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge1xuICBDT01QSUxFUl9SRVZJU0lPTixcbiAgY3JlYXRlRnJhbWUsXG4gIExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTixcbiAgUkVWSVNJT05fQ0hBTkdFU1xufSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgbW92ZUhlbHBlclRvSG9va3MgfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgd3JhcEhlbHBlciB9IGZyb20gJy4vaW50ZXJuYWwvd3JhcEhlbHBlcic7XG5pbXBvcnQge1xuICBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wsXG4gIHJlc3VsdElzQWxsb3dlZFxufSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JldmlzaW9uKGNvbXBpbGVySW5mbykge1xuICBjb25zdCBjb21waWxlclJldmlzaW9uID0gKGNvbXBpbGVySW5mbyAmJiBjb21waWxlckluZm9bMF0pIHx8IDEsXG4gICAgY3VycmVudFJldmlzaW9uID0gQ09NUElMRVJfUkVWSVNJT047XG5cbiAgaWYgKFxuICAgIGNvbXBpbGVyUmV2aXNpb24gPj0gTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OICYmXG4gICAgY29tcGlsZXJSZXZpc2lvbiA8PSBDT01QSUxFUl9SRVZJU0lPTlxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTikge1xuICAgIGNvbnN0IHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2NvbXBpbGVyUmV2aXNpb25dO1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgnICtcbiAgICAgICAgcnVudGltZVZlcnNpb25zICtcbiAgICAgICAgJykgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgnICtcbiAgICAgICAgY29tcGlsZXJWZXJzaW9ucyArXG4gICAgICAgICcpLidcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIC8vIFVzZSB0aGUgZW1iZWRkZWQgdmVyc2lvbiBpbmZvIHNpbmNlIHRoZSBydW50aW1lIGRvZXNuJ3Qga25vdyBhYm91dCB0aGlzIHJldmlzaW9uIHlldFxuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVySW5mb1sxXSArXG4gICAgICAgICcpLidcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMsIGVudikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWVudikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc2V1ZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIHByZWNvbXBpbGVkIHRlbXBsYXRlcyB3aXRoIGNvbXBpbGVyLXZlcnNpb24gNyAoPDQuMy4wKVxuICBjb25zdCB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjcgPVxuICAgIHRlbXBsYXRlU3BlYy5jb21waWxlciAmJiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJbMF0gPT09IDc7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICBvcHRpb25zLmhvb2tzID0gdGhpcy5ob29rcztcbiAgICBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbCA9IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sO1xuXG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1RoZSBwYXJ0aWFsICcgK1xuICAgICAgICAgIG9wdGlvbnMubmFtZSArXG4gICAgICAgICAgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICBsZXQgY29udGFpbmVyID0ge1xuICAgIHN0cmljdDogZnVuY3Rpb24ob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaiwge1xuICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShvYmosIG5hbWUpO1xuICAgIH0sXG4gICAgbG9va3VwUHJvcGVydHk6IGZ1bmN0aW9uKHBhcmVudCwgcHJvcGVydHlOYW1lKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50LCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0sXG4gICAgbG9va3VwOiBmdW5jdGlvbihkZXB0aHMsIG5hbWUpIHtcbiAgICAgIGNvbnN0IGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBkZXB0aHNbaV0gJiYgY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KGRlcHRoc1tpXSwgbmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbWJkYTogZnVuY3Rpb24oY3VycmVudCwgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBjdXJyZW50ID09PSAnZnVuY3Rpb24nID8gY3VycmVudC5jYWxsKGNvbnRleHQpIDogY3VycmVudDtcbiAgICB9LFxuXG4gICAgZXNjYXBlRXhwcmVzc2lvbjogVXRpbHMuZXNjYXBlRXhwcmVzc2lvbixcbiAgICBpbnZva2VQYXJ0aWFsOiBpbnZva2VQYXJ0aWFsV3JhcHBlcixcblxuICAgIGZuOiBmdW5jdGlvbihpKSB7XG4gICAgICBsZXQgcmV0ID0gdGVtcGxhdGVTcGVjW2ldO1xuICAgICAgcmV0LmRlY29yYXRvciA9IHRlbXBsYXRlU3BlY1tpICsgJ19kJ107XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG5cbiAgICBwcm9ncmFtczogW10sXG4gICAgcHJvZ3JhbTogZnVuY3Rpb24oaSwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgICAgbGV0IHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSxcbiAgICAgICAgZm4gPSB0aGlzLmZuKGkpO1xuICAgICAgaWYgKGRhdGEgfHwgZGVwdGhzIHx8IGJsb2NrUGFyYW1zIHx8IGRlY2xhcmVkQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB3cmFwUHJvZ3JhbShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGksXG4gICAgICAgICAgZm4sXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkZWNsYXJlZEJsb2NrUGFyYW1zLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyO1xuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbih2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlSWZOZWVkZWQ6IGZ1bmN0aW9uKHBhcmFtLCBjb21tb24pIHtcbiAgICAgIGxldCBvYmogPSBwYXJhbSB8fCBjb21tb247XG5cbiAgICAgIGlmIChwYXJhbSAmJiBjb21tb24gJiYgcGFyYW0gIT09IGNvbW1vbikge1xuICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgLy8gQW4gZW1wdHkgb2JqZWN0IHRvIHVzZSBhcyByZXBsYWNlbWVudCBmb3IgbnVsbC1jb250ZXh0c1xuICAgIG51bGxDb250ZXh0OiBPYmplY3Quc2VhbCh7fSksXG5cbiAgICBub29wOiBlbnYuVk0ubm9vcCxcbiAgICBjb21waWxlckluZm86IHRlbXBsYXRlU3BlYy5jb21waWxlclxuICB9O1xuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgZGF0YSA9IG9wdGlvbnMuZGF0YTtcblxuICAgIHJldC5fc2V0dXAob3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwgJiYgdGVtcGxhdGVTcGVjLnVzZURhdGEpIHtcbiAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0LCBkYXRhKTtcbiAgICB9XG4gICAgbGV0IGRlcHRocyxcbiAgICAgIGJsb2NrUGFyYW1zID0gdGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRlcHRocykge1xuICAgICAgICBkZXB0aHMgPVxuICAgICAgICAgIGNvbnRleHQgIT0gb3B0aW9ucy5kZXB0aHNbMF1cbiAgICAgICAgICAgID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocylcbiAgICAgICAgICAgIDogb3B0aW9ucy5kZXB0aHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXB0aHMgPSBbY29udGV4dF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFpbihjb250ZXh0IC8qLCBvcHRpb25zKi8pIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICcnICtcbiAgICAgICAgdGVtcGxhdGVTcGVjLm1haW4oXG4gICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbWFpbiA9IGV4ZWN1dGVEZWNvcmF0b3JzKFxuICAgICAgdGVtcGxhdGVTcGVjLm1haW4sXG4gICAgICBtYWluLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgb3B0aW9ucy5kZXB0aHMgfHwgW10sXG4gICAgICBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXNcbiAgICApO1xuICAgIHJldHVybiBtYWluKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0LmlzVG9wID0gdHJ1ZTtcblxuICByZXQuX3NldHVwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7XG4gICAgICBsZXQgbWVyZ2VkSGVscGVycyA9IHt9O1xuICAgICAgYWRkSGVscGVycyhtZXJnZWRIZWxwZXJzLCBlbnYuaGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGFkZEhlbHBlcnMobWVyZ2VkSGVscGVycywgb3B0aW9ucy5oZWxwZXJzLCBjb250YWluZXIpO1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBtZXJnZWRIZWxwZXJzO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgLy8gVXNlIG1lcmdlSWZOZWVkZWQgaGVyZSB0byBwcmV2ZW50IGNvbXBpbGluZyBnbG9iYWwgcGFydGlhbHMgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlSWZOZWVkZWQoXG4gICAgICAgICAgb3B0aW9ucy5wYXJ0aWFscyxcbiAgICAgICAgICBlbnYucGFydGlhbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZChcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBlbnYuZGVjb3JhdG9ycyxcbiAgICAgICAgICBvcHRpb25zLmRlY29yYXRvcnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmhvb2tzID0ge307XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKG9wdGlvbnMpO1xuXG4gICAgICBsZXQga2VlcEhlbHBlckluSGVscGVycyA9XG4gICAgICAgIG9wdGlvbnMuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZyB8fFxuICAgICAgICB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjc7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdoZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdibG9ja0hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IG9wdGlvbnMucHJvdG9BY2Nlc3NDb250cm9sOyAvLyBpbnRlcm5hbCBvcHRpb25cbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgICAgY29udGFpbmVyLmhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGksXG4gICAgICB0ZW1wbGF0ZVNwZWNbaV0sXG4gICAgICBkYXRhLFxuICAgICAgMCxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKFxuICBjb250YWluZXIsXG4gIGksXG4gIGZuLFxuICBkYXRhLFxuICBkZWNsYXJlZEJsb2NrUGFyYW1zLFxuICBibG9ja1BhcmFtcyxcbiAgZGVwdGhzXG4pIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoXG4gICAgICBkZXB0aHMgJiZcbiAgICAgIGNvbnRleHQgIT0gZGVwdGhzWzBdICYmXG4gICAgICAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpXG4gICAgKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICBjdXJyZW50RGVwdGhzXG4gICAgKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY3VycmVudGx5IHBhcnQgb2YgdGhlIG9mZmljaWFsIEFQSSwgdGhlcmVmb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBwYXJ0aWFsID0gbG9va3VwT3duUHJvcGVydHkob3B0aW9ucy5kYXRhLCAncGFydGlhbC1ibG9jaycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gbG9va3VwT3duUHJvcGVydHkob3B0aW9ucy5wYXJ0aWFscywgb3B0aW9ucy5uYW1lKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gbG9va3VwT3duUHJvcGVydHkob3B0aW9ucy5wYXJ0aWFscywgcGFydGlhbCk7XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgLy8gVXNlIHRoZSBjdXJyZW50IGNsb3N1cmUgY29udGV4dCB0byBzYXZlIHRoZSBwYXJ0aWFsLWJsb2NrIGlmIHRoaXMgcGFydGlhbFxuICBjb25zdCBjdXJyZW50UGFydGlhbEJsb2NrID0gbG9va3VwT3duUHJvcGVydHkob3B0aW9ucy5kYXRhLCAncGFydGlhbC1ibG9jaycpO1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAvLyBXcmFwcGVyIGZ1bmN0aW9uIHRvIGdldCBhY2Nlc3MgdG8gY3VycmVudFBhcnRpYWxCbG9jayBmcm9tIHRoZSBjbG9zdXJlXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoXG4gICAgICBjb250ZXh0LFxuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgKSB7XG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbG9va3VwT3duUHJvcGVydHkob2JqLCBuYW1lKSB7XG4gIGlmIChvYmogJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgbmFtZSkpIHtcbiAgICByZXR1cm4gb2JqW25hbWVdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiBhZGRIZWxwZXJzKG1lcmdlZEhlbHBlcnMsIGhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBpZiAoIWhlbHBlcnMpIHJldHVybjtcbiAgT2JqZWN0LmtleXMoaGVscGVycykuZm9yRWFjaChoZWxwZXJOYW1lID0+IHtcbiAgICBsZXQgaGVscGVyID0gaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdID0gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcikge1xuICBjb25zdCBsb29rdXBQcm9wZXJ0eSA9IGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eTtcbiAgcmV0dXJuIHdyYXBIZWxwZXIoaGVscGVyLCBvcHRpb25zID0+IHtcbiAgICBvcHRpb25zLmxvb2t1cFByb3BlcnR5ID0gbG9va3VwUHJvcGVydHk7XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0pO1xufVxuIl19 +; +define('handlebars/no-conflict',['exports', 'module'], function (exports, module) { + /* global globalThis */ + 'use strict'; + + module.exports = function (Handlebars) { + /* istanbul ignore next */ + // https://mathiasbynens.be/notes/globalthis + (function () { + if (typeof globalThis === 'object') return; + Object.prototype.__defineGetter__('__magic__', function () { + return this; + }); + __magic__.globalThis = __magic__; // eslint-disable-line no-undef + delete Object.prototype.__magic__; + })(); + + var $Handlebars = globalThis.Handlebars; + + /* istanbul ignore next */ + Handlebars.noConflict = function () { + if (globalThis.Handlebars === Handlebars) { + globalThis.Handlebars = $Handlebars; + } + return Handlebars; + }; + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7bUJBQ2UsVUFBUyxVQUFVLEVBQUU7OztBQUdsQyxLQUFDLFlBQVc7QUFDVixVQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxPQUFPO0FBQzNDLFlBQU0sQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLFlBQVc7QUFDeEQsZUFBTyxJQUFJLENBQUM7T0FDYixDQUFDLENBQUM7QUFDSCxlQUFTLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUNqQyxhQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0tBQ25DLENBQUEsRUFBRyxDQUFDOztBQUVMLFFBQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7OztBQUcxQyxjQUFVLENBQUMsVUFBVSxHQUFHLFlBQVc7QUFDakMsVUFBSSxVQUFVLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtBQUN4QyxrQkFBVSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7T0FDckM7QUFDRCxhQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0dBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZ2xvYmFsVGhpcyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAvLyBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZ2xvYmFsdGhpc1xuICAoZnVuY3Rpb24oKSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuO1xuICAgIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXygnX19tYWdpY19fJywgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KTtcbiAgICBfX21hZ2ljX18uZ2xvYmFsVGhpcyA9IF9fbWFnaWNfXzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuICAgIGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbWFnaWNfXztcbiAgfSkoKTtcblxuICBjb25zdCAkSGFuZGxlYmFycyA9IGdsb2JhbFRoaXMuSGFuZGxlYmFycztcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBIYW5kbGViYXJzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoZ2xvYmFsVGhpcy5IYW5kbGViYXJzID09PSBIYW5kbGViYXJzKSB7XG4gICAgICBnbG9iYWxUaGlzLkhhbmRsZWJhcnMgPSAkSGFuZGxlYmFycztcbiAgICB9XG4gICAgcmV0dXJuIEhhbmRsZWJhcnM7XG4gIH07XG59XG4iXX0= +; +define('handlebars.runtime',['exports', 'module', './handlebars/base', './handlebars/safe-string', './handlebars/exception', './handlebars/utils', './handlebars/runtime', './handlebars/no-conflict'], function (exports, module, _handlebarsBase, _handlebarsSafeString, _handlebarsException, _handlebarsUtils, _handlebarsRuntime, _handlebarsNoConflict) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + // Each of these augment the Handlebars object. No need to setup here. + // (This is done to easily share code between commonjs and browse envs) + + var _SafeString = _interopRequireDefault(_handlebarsSafeString); + + var _Exception = _interopRequireDefault(_handlebarsException); + + var _noConflict = _interopRequireDefault(_handlebarsNoConflict); + + // For compatibility and usage outside of module systems, make the Handlebars object a namespace + function create() { + var hb = new _handlebarsBase.HandlebarsEnvironment(); + + _handlebarsUtils.extend(hb, _handlebarsBase); + hb.SafeString = _SafeString['default']; + hb.Exception = _Exception['default']; + hb.Utils = _handlebarsUtils; + hb.escapeExpression = _handlebarsUtils.escapeExpression; + + hb.VM = _handlebarsRuntime; + hb.template = function (spec) { + return _handlebarsRuntime.template(spec, hb); + }; + + return hb; + } + + var inst = create(); + inst.create = create; + + _noConflict['default'](inst); + + inst['default'] = inst; + + module.exports = inst; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxXQUFTLE1BQU0sR0FBRztBQUNoQixRQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLHFCQUFNLE1BQU0sQ0FBQyxFQUFFLGtCQUFPLENBQUM7QUFDdkIsTUFBRSxDQUFDLFVBQVUseUJBQWEsQ0FBQztBQUMzQixNQUFFLENBQUMsU0FBUyx3QkFBWSxDQUFDO0FBQ3pCLE1BQUUsQ0FBQyxLQUFLLG1CQUFRLENBQUM7QUFDakIsTUFBRSxDQUFDLGdCQUFnQixHQUFHLGlCQUFNLGdCQUFnQixDQUFDOztBQUU3QyxNQUFFLENBQUMsRUFBRSxxQkFBVSxDQUFDO0FBQ2hCLE1BQUUsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0IsYUFBTyxtQkFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0FBRUYsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2hhbmRsZWJhcnMvYmFzZSc7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG5pbXBvcnQgU2FmZVN0cmluZyBmcm9tICcuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vaGFuZGxlYmFycy91dGlscyc7XG5pbXBvcnQgKiBhcyBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy9ydW50aW1lJztcblxuaW1wb3J0IG5vQ29uZmxpY3QgZnJvbSAnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0JztcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19 +; diff --git a/.pnpm-store/v11/files/31/8ccd364c45ddcfef835b4ddbc6f02225dbb1c13fb57b3560799757dcd407b4629acb9291b9dff679d0f8f639a6d5dd4e9246300d35b8c45103736e5aacf93a b/.pnpm-store/v11/files/31/8ccd364c45ddcfef835b4ddbc6f02225dbb1c13fb57b3560799757dcd407b4629acb9291b9dff679d0f8f639a6d5dd4e9246300d35b8c45103736e5aacf93a new file mode 100644 index 00000000..4965c529 --- /dev/null +++ b/.pnpm-store/v11/files/31/8ccd364c45ddcfef835b4ddbc6f02225dbb1c13fb57b3560799757dcd407b4629acb9291b9dff679d0f8f639a6d5dd4e9246300d35b8c45103736e5aacf93a @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').someSeries; diff --git a/.pnpm-store/v11/files/31/8eca1b2ece6b2b5a97966d645b0a6898f8cbb499c7ee67d70ed19ac5df6cd8c6b0b0d1f8b74da92bf6c06cf80c2d9c1d741e5511f0b1052e388fb4e58106c7 b/.pnpm-store/v11/files/31/8eca1b2ece6b2b5a97966d645b0a6898f8cbb499c7ee67d70ed19ac5df6cd8c6b0b0d1f8b74da92bf6c06cf80c2d9c1d741e5511f0b1052e388fb4e58106c7 new file mode 100644 index 00000000..ec956661 --- /dev/null +++ b/.pnpm-store/v11/files/31/8eca1b2ece6b2b5a97966d645b0a6898f8cbb499c7ee67d70ed19ac5df6cd8c6b0b0d1f8b74da92bf6c06cf80c2d9c1d741e5511f0b1052e388fb4e58106c7 @@ -0,0 +1,18 @@ +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * The base implementation of `_.inRange` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to check. + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @returns {boolean} Returns `true` if `number` is in the range, else `false`. + */ +function baseInRange(number, start, end) { + return number >= nativeMin(start, end) && number < nativeMax(start, end); +} + +module.exports = baseInRange; diff --git a/.pnpm-store/v11/files/31/b91c52add9f28a2a9e01914fae0c7b3f62aa2f7324c75d72612e36430d5b1b5c916cc21854c7d112b8c6910194b1f9cdf3345e23fe999c656fadf6c9f480e6 b/.pnpm-store/v11/files/31/b91c52add9f28a2a9e01914fae0c7b3f62aa2f7324c75d72612e36430d5b1b5c916cc21854c7d112b8c6910194b1f9cdf3345e23fe999c656fadf6c9f480e6 new file mode 100644 index 00000000..d01dc4d0 --- /dev/null +++ b/.pnpm-store/v11/files/31/b91c52add9f28a2a9e01914fae0c7b3f62aa2f7324c75d72612e36430d5b1b5c916cc21854c7d112b8c6910194b1f9cdf3345e23fe999c656fadf6c9f480e6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flatMap', require('../flatMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/31/bf979c130f48b6be31be87e6501ceb9049e61f7c6b499fa37c5ac5373394760a723df2a59d068127dba2b3358de7b1b9cdfa41ca8fe8f928e7d54809264cc7 b/.pnpm-store/v11/files/31/bf979c130f48b6be31be87e6501ceb9049e61f7c6b499fa37c5ac5373394760a723df2a59d068127dba2b3358de7b1b9cdfa41ca8fe8f928e7d54809264cc7 new file mode 100644 index 00000000..422729d4 --- /dev/null +++ b/.pnpm-store/v11/files/31/bf979c130f48b6be31be87e6501ceb9049e61f7c6b499fa37c5ac5373394760a723df2a59d068127dba2b3358de7b1b9cdfa41ca8fe8f928e7d54809264cc7 @@ -0,0 +1,73 @@ +# assign-symbols [![NPM version](https://badge.fury.io/js/assign-symbols.svg)](http://badge.fury.io/js/assign-symbols) + +> Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method. + +From the [Mozilla Developer docs for Symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol): + +> A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i assign-symbols --save +``` + +## Usage + +```js +var assignSymbols = require('assign-symbols'); +var obj = {}; + +var one = {}; +var symbolOne = Symbol('aaa'); +one[symbolOne] = 'bbb'; + +var two = {}; +var symbolTwo = Symbol('ccc'); +two[symbolTwo] = 'ddd'; + +assignSymbols(obj, one, two); + +console.log(obj[symbolOne]); +//=> 'bbb' +console.log(obj[symbolTwo]); +//=> 'ddd' +``` + +## Similar projects + +* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. | [homepage](https://github.com/jonschlinkert/assign-deep) +* [clone-deep](https://www.npmjs.com/package/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. | [homepage](https://github.com/jonschlinkert/clone-deep) +* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow) +* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep) +* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/assign-symbols/issues/new). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 06, 2015._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/31/cf5b59100d009d8c64c6c8674211334c222183f603d022bbee06195ebd28427417e43c3ecf3357f1af05916c2024d93869f437649103a5eee24b8fc6e26119 b/.pnpm-store/v11/files/31/cf5b59100d009d8c64c6c8674211334c222183f603d022bbee06195ebd28427417e43c3ecf3357f1af05916c2024d93869f437649103a5eee24b8fc6e26119 new file mode 100644 index 00000000..d832d16b --- /dev/null +++ b/.pnpm-store/v11/files/31/cf5b59100d009d8c64c6c8674211334c222183f603d022bbee06195ebd28427417e43c3ecf3357f1af05916c2024d93869f437649103a5eee24b8fc6e26119 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pickBy', require('../pickBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/31/d67c5d2aa3025eb8b6499ded0312fb04c992c6ce614f72d623c2c6ccb0bbaf5824afadb3663a7e9adc807f1276d9c5ad9180347bbb5e2d004f91bb1fc1e787 b/.pnpm-store/v11/files/31/d67c5d2aa3025eb8b6499ded0312fb04c992c6ce614f72d623c2c6ccb0bbaf5824afadb3663a7e9adc807f1276d9c5ad9180347bbb5e2d004f91bb1fc1e787 new file mode 100644 index 00000000..b5cb505e --- /dev/null +++ b/.pnpm-store/v11/files/31/d67c5d2aa3025eb8b6499ded0312fb04c992c6ce614f72d623c2c6ccb0bbaf5824afadb3663a7e9adc807f1276d9c5ad9180347bbb5e2d004f91bb1fc1e787 @@ -0,0 +1,89 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = timeout; + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Sets a time limit on an asynchronous function. If the function does not call + * its callback within the specified milliseconds, it will be called with a + * timeout error. The code property for the error object will be `'ETIMEDOUT'`. + * + * @name timeout + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} asyncFn - The async function to limit in time. + * @param {number} milliseconds - The specified time limit. + * @param {*} [info] - Any variable you want attached (`string`, `object`, etc) + * to timeout Error for more information.. + * @returns {AsyncFunction} Returns a wrapped function that can be used with any + * of the control flow functions. + * Invoke this function with the same parameters as you would `asyncFunc`. + * @example + * + * function myFunction(foo, callback) { + * doAsyncTask(foo, function(err, data) { + * // handle errors + * if (err) return callback(err); + * + * // do some stuff ... + * + * // return processed data + * return callback(null, data); + * }); + * } + * + * var wrapped = async.timeout(myFunction, 1000); + * + * // call `wrapped` as you would `myFunction` + * wrapped({ bar: 'bar' }, function(err, data) { + * // if `myFunction` takes < 1000 ms to execute, `err` + * // and `data` will have their expected values + * + * // else `err` will be an Error with the code 'ETIMEDOUT' + * }); + */ +function timeout(asyncFn, milliseconds, info) { + var fn = (0, _wrapAsync2.default)(asyncFn); + + return (0, _initialParams2.default)(function (args, callback) { + var timedOut = false; + var timer; + + function timeoutCallback() { + var name = asyncFn.name || 'anonymous'; + var error = new Error('Callback function "' + name + '" timed out.'); + error.code = 'ETIMEDOUT'; + if (info) { + error.info = info; + } + timedOut = true; + callback(error); + } + + args.push(function () { + if (!timedOut) { + callback.apply(null, arguments); + clearTimeout(timer); + } + }); + + // setup timer and call original function + timer = setTimeout(timeoutCallback, milliseconds); + fn.apply(null, args); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/31/fcc79e3a4e224817e39240803fdb8abc0a7d74071552b8ef05bf22af2e8017efbee5df92b851bd0525d0c4d2e668a4abd4d56309327e946513cd3b5a0e7d01 b/.pnpm-store/v11/files/31/fcc79e3a4e224817e39240803fdb8abc0a7d74071552b8ef05bf22af2e8017efbee5df92b851bd0525d0c4d2e668a4abd4d56309327e946513cd3b5a0e7d01 new file mode 100644 index 00000000..eee7bc96 --- /dev/null +++ b/.pnpm-store/v11/files/31/fcc79e3a4e224817e39240803fdb8abc0a7d74071552b8ef05bf22af2e8017efbee5df92b851bd0525d0c4d2e668a4abd4d56309327e946513cd3b5a0e7d01 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').groupByLimit; diff --git a/.pnpm-store/v11/files/32/1235b9c5642c8e5cda7432b8f1c78fb571ef6090d8680fc02f23e1425f16c161cdc9c69613bd0c2df102dc4417c2332a48a8e6fd2fd2f17c965cf83afe61d5 b/.pnpm-store/v11/files/32/1235b9c5642c8e5cda7432b8f1c78fb571ef6090d8680fc02f23e1425f16c161cdc9c69613bd0c2df102dc4417c2332a48a8e6fd2fd2f17c965cf83afe61d5 new file mode 100644 index 00000000..fff721bc --- /dev/null +++ b/.pnpm-store/v11/files/32/1235b9c5642c8e5cda7432b8f1c78fb571ef6090d8680fc02f23e1425f16c161cdc9c69613bd0c2df102dc4417c2332a48a8e6fd2fd2f17c965cf83afe61d5 @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = eachLimit; + +var _eachOfLimit = require('./internal/eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _withoutIndex = require('./internal/withoutIndex'); + +var _withoutIndex2 = _interopRequireDefault(_withoutIndex); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs a maximum of `limit` async operations at a time. + * + * @name eachLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfLimit`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +function eachLimit(coll, limit, iteratee, callback) { + (0, _eachOfLimit2.default)(limit)(coll, (0, _withoutIndex2.default)((0, _wrapAsync2.default)(iteratee)), callback); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/32/15a9ed3df26a3c93b313b7f635404a4231e4b7bb1fc3e5607332eb6c0f6dff6821e7c3ee1adebe9364d3cbbf25f7c5ba0d78bd90d91da767b50195520aaf71 b/.pnpm-store/v11/files/32/15a9ed3df26a3c93b313b7f635404a4231e4b7bb1fc3e5607332eb6c0f6dff6821e7c3ee1adebe9364d3cbbf25f7c5ba0d78bd90d91da767b50195520aaf71 new file mode 100644 index 00000000..a4854cca --- /dev/null +++ b/.pnpm-store/v11/files/32/15a9ed3df26a3c93b313b7f635404a4231e4b7bb1fc3e5607332eb6c0f6dff6821e7c3ee1adebe9364d3cbbf25f7c5ba0d78bd90d91da767b50195520aaf71 @@ -0,0 +1,11 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +var fs = require("fs"); +var path = require("path"); +exports.plugins = {}; +var modules = path.resolve(__dirname + '/modules'); +fs.readdirSync(modules).forEach(function (item) { + var file = path.resolve(modules + '/' + item); + var mod = require(file); + exports.plugins[mod.exportName] = mod; +}); diff --git a/.pnpm-store/v11/files/32/403c2a5399f7dde7baf3666f7b049ffb1713545330240de88f014997bfd6d67dd17c1db199fa893122c5aa563adaea0c16f9328833f355cd23d24a4af77e9a b/.pnpm-store/v11/files/32/403c2a5399f7dde7baf3666f7b049ffb1713545330240de88f014997bfd6d67dd17c1db199fa893122c5aa563adaea0c16f9328833f355cd23d24a4af77e9a new file mode 100644 index 00000000..dc864139 --- /dev/null +++ b/.pnpm-store/v11/files/32/403c2a5399f7dde7baf3666f7b049ffb1713545330240de88f014997bfd6d67dd17c1db199fa893122c5aa563adaea0c16f9328833f355cd23d24a4af77e9a @@ -0,0 +1,11 @@ +# Security Policy + +## Supported Versions + +Only the latest major version is supported at any given time. + +## Reporting a Vulnerability + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. diff --git a/.pnpm-store/v11/files/32/467daa08beb5703dd96a3509dbfae381aee126e4c01bedbcc703ac5a1a20ea6ea39c66fd99307c2f1631fdb4e23a1fe87cb0228a77c0e7a3ea682d6d111509 b/.pnpm-store/v11/files/32/467daa08beb5703dd96a3509dbfae381aee126e4c01bedbcc703ac5a1a20ea6ea39c66fd99307c2f1631fdb4e23a1fe87cb0228a77c0e7a3ea682d6d111509 new file mode 100644 index 00000000..dfbc4714 --- /dev/null +++ b/.pnpm-store/v11/files/32/467daa08beb5703dd96a3509dbfae381aee126e4c01bedbcc703ac5a1a20ea6ea39c66fd99307c2f1631fdb4e23a1fe87cb0228a77c0e7a3ea682d6d111509 @@ -0,0 +1,46 @@ +{ + "name": "color-convert", + "description": "Plain color conversion functions", + "version": "1.9.3", + "author": "Heather Arthur ", + "license": "MIT", + "repository": "Qix-/color-convert", + "scripts": { + "pretest": "xo", + "test": "node test/basic.js" + }, + "keywords": [ + "color", + "colour", + "convert", + "converter", + "conversion", + "rgb", + "hsl", + "hsv", + "hwb", + "cmyk", + "ansi", + "ansi16" + ], + "files": [ + "index.js", + "conversions.js", + "css-keywords.js", + "route.js" + ], + "xo": { + "rules": { + "default-case": 0, + "no-inline-comments": 0, + "operator-linebreak": 0 + } + }, + "devDependencies": { + "chalk": "1.1.1", + "xo": "0.11.2" + }, + "dependencies": { + "color-name": "1.1.3" + } +} diff --git a/.pnpm-store/v11/files/32/516d2aeabc84af078ea92779f67be2984febe7a3dc45ea8732c3037fee945b92c7f3b61b8109eff4918a4557647855513982c18bd225b072194f4daf1f73e0 b/.pnpm-store/v11/files/32/516d2aeabc84af078ea92779f67be2984febe7a3dc45ea8732c3037fee945b92c7f3b61b8109eff4918a4557647855513982c18bd225b072194f4daf1f73e0 new file mode 100644 index 00000000..0ec601a9 --- /dev/null +++ b/.pnpm-store/v11/files/32/516d2aeabc84af078ea92779f67be2984febe7a3dc45ea8732c3037fee945b92c7f3b61b8109eff4918a4557647855513982c18bd225b072194f4daf1f73e0 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('uniqWith', require('../uniqWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/32/73674ec6a515084e054e929f8cbcf1768e823e85107ead3c504dda1fd1b4f6154def79390986f38890756aaaf2c9708226c7e77f1b1464af06d671295e7c32 b/.pnpm-store/v11/files/32/73674ec6a515084e054e929f8cbcf1768e823e85107ead3c504dda1fd1b4f6154def79390986f38890756aaaf2c9708226c7e77f1b1464af06d671295e7c32 new file mode 100644 index 00000000..abeb66b9 --- /dev/null +++ b/.pnpm-store/v11/files/32/73674ec6a515084e054e929f8cbcf1768e823e85107ead3c504dda1fd1b4f6154def79390986f38890756aaaf2c9708226c7e77f1b1464af06d671295e7c32 @@ -0,0 +1,147 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface Map { + clear(): void; + /** + * @returns true if an element in the Map existed and has been removed, or false if the element does not exist. + */ + delete(key: K): boolean; + /** + * Executes a provided function once per each key/value pair in the Map, in insertion order. + */ + forEach(callbackfn: (value: V, key: K, map: Map) => void, thisArg?: any): void; + /** + * Returns a specified element from the Map object. If the value that is associated to the provided key is an object, then you will get a reference to that object and any change made to that object will effectively modify it inside the Map. + * @returns Returns the element associated with the specified key. If no element is associated with the specified key, undefined is returned. + */ + get(key: K): V | undefined; + /** + * @returns boolean indicating whether an element with the specified key exists or not. + */ + has(key: K): boolean; + /** + * Adds a new element with a specified key and value to the Map. If an element with the same key already exists, the element will be updated. + */ + set(key: K, value: V): this; + /** + * @returns the number of elements in the Map. + */ + readonly size: number; +} + +interface MapConstructor { + new (): Map; + new (entries?: readonly (readonly [K, V])[] | null): Map; + readonly prototype: Map; +} +declare var Map: MapConstructor; + +interface ReadonlyMap { + forEach(callbackfn: (value: V, key: K, map: ReadonlyMap) => void, thisArg?: any): void; + get(key: K): V | undefined; + has(key: K): boolean; + readonly size: number; +} + +interface WeakMap { + /** + * Removes the specified element from the WeakMap. + * @returns true if the element was successfully removed, or false if it was not present. + */ + delete(key: K): boolean; + /** + * @returns a specified element. + */ + get(key: K): V | undefined; + /** + * @returns a boolean indicating whether an element with the specified key exists or not. + */ + has(key: K): boolean; + /** + * Adds a new element with a specified key and value. + * @param key Must be an object or symbol. + */ + set(key: K, value: V): this; +} + +interface WeakMapConstructor { + new (entries?: readonly (readonly [K, V])[] | null): WeakMap; + readonly prototype: WeakMap; +} +declare var WeakMap: WeakMapConstructor; + +interface Set { + /** + * Appends a new element with a specified value to the end of the Set. + */ + add(value: T): this; + + clear(): void; + /** + * Removes a specified value from the Set. + * @returns Returns true if an element in the Set existed and has been removed, or false if the element does not exist. + */ + delete(value: T): boolean; + /** + * Executes a provided function once per each value in the Set object, in insertion order. + */ + forEach(callbackfn: (value: T, value2: T, set: Set) => void, thisArg?: any): void; + /** + * @returns a boolean indicating whether an element with the specified value exists in the Set or not. + */ + has(value: T): boolean; + /** + * @returns the number of (unique) elements in Set. + */ + readonly size: number; +} + +interface SetConstructor { + new (values?: readonly T[] | null): Set; + readonly prototype: Set; +} +declare var Set: SetConstructor; + +interface ReadonlySet { + forEach(callbackfn: (value: T, value2: T, set: ReadonlySet) => void, thisArg?: any): void; + has(value: T): boolean; + readonly size: number; +} + +interface WeakSet { + /** + * Appends a new value to the end of the WeakSet. + */ + add(value: T): this; + /** + * Removes the specified element from the WeakSet. + * @returns Returns true if the element existed and has been removed, or false if the element does not exist. + */ + delete(value: T): boolean; + /** + * @returns a boolean indicating whether a value exists in the WeakSet or not. + */ + has(value: T): boolean; +} + +interface WeakSetConstructor { + new (values?: readonly T[] | null): WeakSet; + readonly prototype: WeakSet; +} +declare var WeakSet: WeakSetConstructor; diff --git a/.pnpm-store/v11/files/32/8bb08c6cf89a41e17d03ed91850fd3f7153950b4f7c0f27433b859180afe260d1dbf60b5f20f56a0fb43a3ce09b6bb4046e813879fdee284520746eec0f423 b/.pnpm-store/v11/files/32/8bb08c6cf89a41e17d03ed91850fd3f7153950b4f7c0f27433b859180afe260d1dbf60b5f20f56a0fb43a3ce09b6bb4046e813879fdee284520746eec0f423 new file mode 100644 index 00000000..6cba766a --- /dev/null +++ b/.pnpm-store/v11/files/32/8bb08c6cf89a41e17d03ed91850fd3f7153950b4f7c0f27433b859180afe260d1dbf60b5f20f56a0fb43a3ce09b6bb4046e813879fdee284520746eec0f423 @@ -0,0 +1,43 @@ +var baseToString = require('./_baseToString'), + castSlice = require('./_castSlice'), + charsStartIndex = require('./_charsStartIndex'), + stringToArray = require('./_stringToArray'), + toString = require('./toString'); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * Removes leading whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trimStart(' abc '); + * // => 'abc ' + * + * _.trimStart('-_-abc-_-', '_-'); + * // => 'abc-_-' + */ +function trimStart(string, chars, guard) { + string = toString(string); + if (string && (guard || chars === undefined)) { + return string.replace(reTrimStart, ''); + } + if (!string || !(chars = baseToString(chars))) { + return string; + } + var strSymbols = stringToArray(string), + start = charsStartIndex(strSymbols, stringToArray(chars)); + + return castSlice(strSymbols, start).join(''); +} + +module.exports = trimStart; diff --git a/.pnpm-store/v11/files/32/a82228880e59919c5748433cdb2265ebc8ea38b1c67a20c37a9c22eae82d48409fe8139c1479abf26fe7615d699de909442b67a07f427f8d68358d1fdb9a78 b/.pnpm-store/v11/files/32/a82228880e59919c5748433cdb2265ebc8ea38b1c67a20c37a9c22eae82d48409fe8139c1479abf26fe7615d699de909442b67a07f427f8d68358d1fdb9a78 new file mode 100644 index 00000000..a05a63ad --- /dev/null +++ b/.pnpm-store/v11/files/32/a82228880e59919c5748433cdb2265ebc8ea38b1c67a20c37a9c22eae82d48409fe8139c1479abf26fe7615d699de909442b67a07f427f8d68358d1fdb9a78 @@ -0,0 +1 @@ +module.exports = require('./stubFalse'); diff --git a/.pnpm-store/v11/files/32/bd29be52cd5809ccf2acd1d11e3754f6a71ad4697af13ae735ec89909e4ec606935128031d0e66fdec0ae645d786d94f49baaa4c5c7b05c4cdcb6b4a8f7d28 b/.pnpm-store/v11/files/32/bd29be52cd5809ccf2acd1d11e3754f6a71ad4697af13ae735ec89909e4ec606935128031d0e66fdec0ae645d786d94f49baaa4c5c7b05c4cdcb6b4a8f7d28 new file mode 100644 index 00000000..5a3a3707 --- /dev/null +++ b/.pnpm-store/v11/files/32/bd29be52cd5809ccf2acd1d11e3754f6a71ad4697af13ae735ec89909e4ec606935128031d0e66fdec0ae645d786d94f49baaa4c5c7b05c4cdcb6b4a8f7d28 @@ -0,0 +1,453 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_WEAK_H_ +#define NAN_WEAK_H_ + +static const int kInternalFieldsInWeakCallback = 2; +static const int kNoInternalFieldIndex = -1; + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ + v8::WeakCallbackInfo > const& +# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ + NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ +#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION +# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ + v8::PhantomCallbackData > const& +# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ + NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ +#elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION +# define NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ \ + v8::PhantomCallbackData > const& +# define NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ \ + v8::InternalFieldsCallbackData, void> const& +# define NAN_WEAK_PARAMETER_CALLBACK_SIG_ NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +# define NAN_WEAK_TWOFIELD_CALLBACK_SIG_ NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ +#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION +# define NAN_WEAK_CALLBACK_DATA_TYPE_ \ + v8::WeakCallbackData > const& +# define NAN_WEAK_CALLBACK_SIG_ NAN_WEAK_CALLBACK_DATA_TYPE_ +#else +# define NAN_WEAK_CALLBACK_DATA_TYPE_ void * +# define NAN_WEAK_CALLBACK_SIG_ \ + v8::Persistent, NAN_WEAK_CALLBACK_DATA_TYPE_ +#endif + +template +class WeakCallbackInfo { + public: + typedef void (*Callback)(const WeakCallbackInfo& data); + WeakCallbackInfo( + Persistent *persistent + , Callback callback + , void *parameter + , void *field1 = 0 + , void *field2 = 0) : + callback_(callback), isolate_(0), parameter_(parameter) { + std::memcpy(&persistent_, persistent, sizeof (v8::Persistent)); + internal_fields_[0] = field1; + internal_fields_[1] = field2; + } + inline v8::Isolate *GetIsolate() const { return isolate_; } + inline T *GetParameter() const { return static_cast(parameter_); } + inline void *GetInternalField(int index) const { + assert((index == 0 || index == 1) && "internal field index out of bounds"); + if (index == 0) { + return internal_fields_[0]; + } else { + return internal_fields_[1]; + } + } + + private: + NAN_DISALLOW_ASSIGN_COPY_MOVE(WeakCallbackInfo) + Callback callback_; + v8::Isolate *isolate_; + void *parameter_; + void *internal_fields_[kInternalFieldsInWeakCallback]; + v8::Persistent persistent_; + template friend class Persistent; + template friend class PersistentBase; +#if NODE_MODULE_VERSION <= NODE_0_12_MODULE_VERSION +# if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION + template + static void invoke(NAN_WEAK_CALLBACK_SIG_ data); + template + static WeakCallbackInfo *unwrap(NAN_WEAK_CALLBACK_DATA_TYPE_ data); +# else + static void invoke(NAN_WEAK_CALLBACK_SIG_ data); + static WeakCallbackInfo *unwrap(NAN_WEAK_CALLBACK_DATA_TYPE_ data); +# endif +#else +# if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) + template + static void invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data); + template + static void invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data); +# else + static void invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data); + static void invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data); +# endif + static WeakCallbackInfo *unwrapparameter( + NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data); + static WeakCallbackInfo *unwraptwofield( + NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data); +#endif +}; + + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) + +template +template +void +WeakCallbackInfo::invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data) { + WeakCallbackInfo *cbinfo = unwrapparameter(data); + if (isFirstPass) { + cbinfo->persistent_.Reset(); + data.SetSecondPassCallback(invokeparameter); + } else { + cbinfo->callback_(*cbinfo); + delete cbinfo; + } +} + +template +template +void +WeakCallbackInfo::invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data) { + WeakCallbackInfo *cbinfo = unwraptwofield(data); + if (isFirstPass) { + cbinfo->persistent_.Reset(); + data.SetSecondPassCallback(invoketwofield); + } else { + cbinfo->callback_(*cbinfo); + delete cbinfo; + } +} + +template +WeakCallbackInfo *WeakCallbackInfo::unwrapparameter( + NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data) { + WeakCallbackInfo *cbinfo = + static_cast*>(data.GetParameter()); + cbinfo->isolate_ = data.GetIsolate(); + return cbinfo; +} + +template +WeakCallbackInfo *WeakCallbackInfo::unwraptwofield( + NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data) { + WeakCallbackInfo *cbinfo = + static_cast*>(data.GetInternalField(0)); + cbinfo->isolate_ = data.GetIsolate(); + return cbinfo; +} + +#undef NAN_WEAK_PARAMETER_CALLBACK_SIG_ +#undef NAN_WEAK_TWOFIELD_CALLBACK_SIG_ +#undef NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +#undef NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ +# elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION + +template +void +WeakCallbackInfo::invokeparameter(NAN_WEAK_PARAMETER_CALLBACK_SIG_ data) { + WeakCallbackInfo *cbinfo = unwrapparameter(data); + cbinfo->persistent_.Reset(); + cbinfo->callback_(*cbinfo); + delete cbinfo; +} + +template +void +WeakCallbackInfo::invoketwofield(NAN_WEAK_TWOFIELD_CALLBACK_SIG_ data) { + WeakCallbackInfo *cbinfo = unwraptwofield(data); + cbinfo->persistent_.Reset(); + cbinfo->callback_(*cbinfo); + delete cbinfo; +} + +template +WeakCallbackInfo *WeakCallbackInfo::unwrapparameter( + NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ data) { + WeakCallbackInfo *cbinfo = + static_cast*>(data.GetParameter()); + cbinfo->isolate_ = data.GetIsolate(); + return cbinfo; +} + +template +WeakCallbackInfo *WeakCallbackInfo::unwraptwofield( + NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ data) { + WeakCallbackInfo *cbinfo = + static_cast*>(data.GetInternalField1()); + cbinfo->isolate_ = data.GetIsolate(); + return cbinfo; +} + +#undef NAN_WEAK_PARAMETER_CALLBACK_SIG_ +#undef NAN_WEAK_TWOFIELD_CALLBACK_SIG_ +#undef NAN_WEAK_PARAMETER_CALLBACK_DATA_TYPE_ +#undef NAN_WEAK_TWOFIELD_CALLBACK_DATA_TYPE_ +#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION + +template +template +void WeakCallbackInfo::invoke(NAN_WEAK_CALLBACK_SIG_ data) { + WeakCallbackInfo *cbinfo = unwrap(data); + cbinfo->persistent_.Reset(); + cbinfo->callback_(*cbinfo); + delete cbinfo; +} + +template +template +WeakCallbackInfo *WeakCallbackInfo::unwrap( + NAN_WEAK_CALLBACK_DATA_TYPE_ data) { + void *parameter = data.GetParameter(); + WeakCallbackInfo *cbinfo = + static_cast*>(parameter); + cbinfo->isolate_ = data.GetIsolate(); + return cbinfo; +} + +#undef NAN_WEAK_CALLBACK_SIG_ +#undef NAN_WEAK_CALLBACK_DATA_TYPE_ +#else + +template +void WeakCallbackInfo::invoke(NAN_WEAK_CALLBACK_SIG_ data) { + WeakCallbackInfo *cbinfo = unwrap(data); + cbinfo->persistent_.Dispose(); + cbinfo->persistent_.Clear(); + cbinfo->callback_(*cbinfo); + delete cbinfo; +} + +template +WeakCallbackInfo *WeakCallbackInfo::unwrap( + NAN_WEAK_CALLBACK_DATA_TYPE_ data) { + WeakCallbackInfo *cbinfo = + static_cast*>(data); + cbinfo->isolate_ = v8::Isolate::GetCurrent(); + return cbinfo; +} + +#undef NAN_WEAK_CALLBACK_SIG_ +#undef NAN_WEAK_CALLBACK_DATA_TYPE_ +#endif + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +template +template +inline void Persistent::SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + WeakCallbackInfo

*wcbd; + if (type == WeakCallbackType::kParameter) { + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , parameter); + v8::PersistentBase::SetWeak( + wcbd + , WeakCallbackInfo

::template invokeparameter + , type); + } else { + v8::Local* self_v(reinterpret_cast*>(this)); + assert((*self_v)->IsObject()); + v8::Local self((*self_v).As()); + int count = self->InternalFieldCount(); + void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; + for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { +#if (V8_MAJOR_VERSION > 14) || \ + (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION > 2) || \ + (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION == 2 && V8_BUILD_NUMBER >= 194) + internal_fields[i] = self->GetAlignedPointerFromInternalField( + i, v8::kEmbedderDataTypeTagDefault + ); +# else + internal_fields[i] = self->GetAlignedPointerFromInternalField(i); +# endif + } + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , 0 + , internal_fields[0] + , internal_fields[1]); +#if (V8_MAJOR_VERSION > 14) || \ + (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION > 2) || \ + (V8_MAJOR_VERSION == 14 && V8_MINOR_VERSION == 2 && V8_BUILD_NUMBER >= 194) + self->SetAlignedPointerInInternalField( + 0, wcbd, v8::kEmbedderDataTypeTagDefault + ); +# else + self->SetAlignedPointerInInternalField(0, wcbd); +# endif + v8::PersistentBase::SetWeak( + static_cast*>(0) + , WeakCallbackInfo

::template invoketwofield + , type); + } +} +#elif NODE_MODULE_VERSION > IOJS_1_1_MODULE_VERSION +template +template +inline void Persistent::SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + WeakCallbackInfo

*wcbd; + if (type == WeakCallbackType::kParameter) { + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , parameter); + v8::PersistentBase::SetPhantom( + wcbd + , WeakCallbackInfo

::invokeparameter); + } else { + v8::Local* self_v(reinterpret_cast*>(this)); + assert((*self_v)->IsObject()); + v8::Local self((*self_v).As()); + int count = self->InternalFieldCount(); + void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; + for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { + internal_fields[i] = self->GetAlignedPointerFromInternalField(i); + } + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , 0 + , internal_fields[0] + , internal_fields[1]); + self->SetAlignedPointerInInternalField(0, wcbd); + v8::PersistentBase::SetPhantom( + static_cast*>(0) + , WeakCallbackInfo

::invoketwofield + , 0 + , count > 1 ? 1 : kNoInternalFieldIndex); + } +} +#elif NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION +template +template +inline void Persistent::SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + WeakCallbackInfo

*wcbd; + if (type == WeakCallbackType::kParameter) { + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , parameter); + v8::PersistentBase::SetPhantom( + wcbd + , WeakCallbackInfo

::invokeparameter); + } else { + v8::Local* self_v(reinterpret_cast*>(this)); + assert((*self_v)->IsObject()); + v8::Local self((*self_v).As()); + int count = self->InternalFieldCount(); + void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; + for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { + internal_fields[i] = self->GetAlignedPointerFromInternalField(i); + } + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , 0 + , internal_fields[0] + , internal_fields[1]); + self->SetAlignedPointerInInternalField(0, wcbd); + v8::PersistentBase::SetPhantom( + WeakCallbackInfo

::invoketwofield + , 0 + , count > 1 ? 1 : kNoInternalFieldIndex); + } +} +#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION +template +template +inline void Persistent::SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + WeakCallbackInfo

*wcbd; + if (type == WeakCallbackType::kParameter) { + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , parameter); + v8::PersistentBase::SetWeak(wcbd, WeakCallbackInfo

::invoke); + } else { + v8::Local* self_v(reinterpret_cast*>(this)); + assert((*self_v)->IsObject()); + v8::Local self((*self_v).As()); + int count = self->InternalFieldCount(); + void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; + for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { + internal_fields[i] = self->GetAlignedPointerFromInternalField(i); + } + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , 0 + , internal_fields[0] + , internal_fields[1]); + v8::PersistentBase::SetWeak(wcbd, WeakCallbackInfo

::invoke); + } +} +#else +template +template +inline void PersistentBase::SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + WeakCallbackInfo

*wcbd; + if (type == WeakCallbackType::kParameter) { + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , parameter); + persistent.MakeWeak(wcbd, WeakCallbackInfo

::invoke); + } else { + v8::Local* self_v(reinterpret_cast*>(this)); + assert((*self_v)->IsObject()); + v8::Local self((*self_v).As()); + int count = self->InternalFieldCount(); + void *internal_fields[kInternalFieldsInWeakCallback] = {0, 0}; + for (int i = 0; i < count && i < kInternalFieldsInWeakCallback; i++) { + internal_fields[i] = self->GetPointerFromInternalField(i); + } + wcbd = new WeakCallbackInfo

( + reinterpret_cast*>(this) + , callback + , 0 + , internal_fields[0] + , internal_fields[1]); + persistent.MakeWeak(wcbd, WeakCallbackInfo

::invoke); + } +} +#endif + +#endif // NAN_WEAK_H_ diff --git a/.pnpm-store/v11/files/32/d12e73574b1bccf4772590deb04f159e703df9e429d41cc49562450f7923170743c68b16fcdb3b69097b3854d58d07bb7ef1f36f3cfdb8f42b351c71f3a1c6 b/.pnpm-store/v11/files/32/d12e73574b1bccf4772590deb04f159e703df9e429d41cc49562450f7923170743c68b16fcdb3b69097b3854d58d07bb7ef1f36f3cfdb8f42b351c71f3a1c6 new file mode 100644 index 00000000..b92fb0e1 --- /dev/null +++ b/.pnpm-store/v11/files/32/d12e73574b1bccf4772590deb04f159e703df9e429d41cc49562450f7923170743c68b16fcdb3b69097b3854d58d07bb7ef1f36f3cfdb8f42b351c71f3a1c6 @@ -0,0 +1,3 @@ +# Suman Browser Polyfills + +This allows Suman to run in the browser. \ No newline at end of file diff --git a/.pnpm-store/v11/files/32/e510b8f6cbe4d64825c037f35124e084193a1635c4f21cf4764e71af99b616bd4e824d95ccff9d2c65c34f57b5a87979a4fb9d7e0fb96e95e4dd1abf9c670e b/.pnpm-store/v11/files/32/e510b8f6cbe4d64825c037f35124e084193a1635c4f21cf4764e71af99b616bd4e824d95ccff9d2c65c34f57b5a87979a4fb9d7e0fb96e95e4dd1abf9c670e new file mode 100644 index 00000000..3e71b68c --- /dev/null +++ b/.pnpm-store/v11/files/32/e510b8f6cbe4d64825c037f35124e084193a1635c4f21cf4764e71af99b616bd4e824d95ccff9d2c65c34f57b5a87979a4fb9d7e0fb96e95e4dd1abf9c670e @@ -0,0 +1,328 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the following + disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + ***********************************************************************/ + +"use strict"; + +function get_builtins() { + var names = new Dictionary(); + // constants + [ + "NaN", + "null", + "true", + "false", + "Infinity", + "-Infinity", + "undefined", + ].forEach(add); + // global functions + [ + "encodeURI", + "encodeURIComponent", + "escape", + "eval", + "decodeURI", + "decodeURIComponent", + "isFinite", + "isNaN", + "parseFloat", + "parseInt", + "unescape", + ].forEach(add); + // global constructors & objects + var global = Function("return this")(); + [ + "Array", + "ArrayBuffer", + "Atomics", + "BigInt", + "Boolean", + "console", + "DataView", + "Date", + "Error", + "Function", + "Int8Array", + "Intl", + "JSON", + "Map", + "Math", + "Number", + "Object", + "Promise", + "Proxy", + "Reflect", + "RegExp", + "Set", + "String", + "Symbol", + "WebAssembly", + ].forEach(function(name) { + add(name); + var ctor = global[name]; + if (!ctor) return; + Object.getOwnPropertyNames(ctor).map(add); + if (typeof ctor != "function") return; + if (ctor.__proto__) Object.getOwnPropertyNames(ctor.__proto__).map(add); + if (ctor.prototype) Object.getOwnPropertyNames(ctor.prototype).map(add); + try { + Object.getOwnPropertyNames(new ctor()).map(add); + } catch (e) { + try { + Object.getOwnPropertyNames(ctor()).map(add); + } catch (e) {} + } + }); + return (get_builtins = function() { + return names.clone(); + })(); + + function add(name) { + names.set(name, true); + } +} + +function reserve_quoted_keys(ast, reserved) { + ast.walk(new TreeWalker(function(node) { + if (node instanceof AST_ClassProperty + || node instanceof AST_DestructuredKeyVal + || node instanceof AST_ObjectProperty) { + if (node.key instanceof AST_Node) { + addStrings(node.key, add); + } else if (node.start && node.start.quote) { + add(node.key); + } + } else if (node instanceof AST_Dot) { + if (node.quoted) add(node.property); + } else if (node instanceof AST_Sub) { + addStrings(node.property, add); + } + })); + + function add(name) { + push_uniq(reserved, name); + } +} + +function addStrings(node, add) { + if (node instanceof AST_Conditional) { + addStrings(node.consequent, add); + addStrings(node.alternative, add); + } else if (node instanceof AST_Sequence) { + addStrings(node.tail_node(), add); + } else if (node instanceof AST_String) { + add(node.value); + } +} + +function mangle_properties(ast, options) { + options = defaults(options, { + builtins: false, + cache: null, + debug: false, + domprops: false, + keep_quoted: false, + regex: null, + reserved: null, + }, true); + + var reserved = options.builtins ? new Dictionary() : get_builtins(); + if (!options.domprops && typeof domprops !== "undefined") domprops.forEach(function(name) { + reserved.set(name, true); + }); + if (Array.isArray(options.reserved)) options.reserved.forEach(function(name) { + reserved.set(name, true); + }); + + var cname = -1; + var cache; + if (options.cache) { + cache = options.cache.props; + cache.each(function(name) { + reserved.set(name, true); + }); + } else { + cache = new Dictionary(); + } + + var regex = options.regex; + + // note debug is either false (disabled), or a string of the debug suffix to use (enabled). + // note debug may be enabled as an empty string, which is falsy. Also treat passing 'true' + // the same as passing an empty string. + var debug = options.debug !== false; + var debug_suffix; + if (debug) debug_suffix = options.debug === true ? "" : options.debug; + + var names_to_mangle = new Dictionary(); + var unmangleable = reserved.clone(); + + // step 1: find candidates to mangle + ast.walk(new TreeWalker(function(node) { + if (node.TYPE == "Call") { + var exp = node.expression; + if (exp instanceof AST_Dot) switch (exp.property) { + case "defineProperty": + case "getOwnPropertyDescriptor": + if (node.args.length < 2) break; + exp = exp.expression; + if (!(exp instanceof AST_SymbolRef)) break; + if (exp.name != "Object") break; + if (!exp.definition().undeclared) break; + addStrings(node.args[1], add); + break; + case "hasOwnProperty": + if (node.args.length < 1) break; + addStrings(node.args[0], add); + break; + } + } else if (node instanceof AST_ClassProperty + || node instanceof AST_DestructuredKeyVal + || node instanceof AST_ObjectProperty) { + if (node.key instanceof AST_Node) { + addStrings(node.key, add); + } else { + add(node.key); + } + } else if (node instanceof AST_Dot) { + if (is_lhs(node, this.parent())) add(node.property); + } else if (node instanceof AST_Sub) { + if (is_lhs(node, this.parent())) addStrings(node.property, add); + } + })); + + // step 2: renaming properties + ast.walk(new TreeWalker(function(node) { + if (node instanceof AST_Binary) { + if (node.operator == "in") mangleStrings(node.left); + } else if (node.TYPE == "Call") { + var exp = node.expression; + if (exp instanceof AST_Dot) switch (exp.property) { + case "defineProperty": + case "getOwnPropertyDescriptor": + if (node.args.length < 2) break; + exp = exp.expression; + if (!(exp instanceof AST_SymbolRef)) break; + if (exp.name != "Object") break; + if (!exp.definition().undeclared) break; + mangleStrings(node.args[1]); + break; + case "hasOwnProperty": + if (node.args.length < 1) break; + mangleStrings(node.args[0]); + break; + } + } else if (node instanceof AST_ClassProperty + || node instanceof AST_DestructuredKeyVal + || node instanceof AST_ObjectProperty) { + if (node.key instanceof AST_Node) { + mangleStrings(node.key); + } else { + node.key = mangle(node.key); + } + } else if (node instanceof AST_Dot) { + node.property = mangle(node.property); + } else if (node instanceof AST_Sub) { + if (!options.keep_quoted) mangleStrings(node.property); + } + })); + + // only function declarations after this line + + function can_mangle(name) { + if (unmangleable.has(name)) return false; + if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false; + return true; + } + + function should_mangle(name) { + if (reserved.has(name)) { + AST_Node.info("Preserving reserved property {this}", name); + return false; + } + if (regex && !regex.test(name)) { + AST_Node.info("Preserving excluded property {this}", name); + return false; + } + return cache.has(name) || names_to_mangle.has(name); + } + + function add(name) { + if (can_mangle(name)) names_to_mangle.set(name, true); + if (!should_mangle(name)) unmangleable.set(name, true); + } + + function mangle(name) { + if (!should_mangle(name)) return name; + var mangled = cache.get(name); + if (!mangled) { + if (debug) { + // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo ---> o._$foo$NNN_. + var debug_mangled = "_$" + name + "$" + debug_suffix + "_"; + if (can_mangle(debug_mangled)) mangled = debug_mangled; + } + // either debug mode is off, or it is on and we could not use the mangled name + if (!mangled) do { + mangled = base54(++cname); + } while (!can_mangle(mangled)); + if (/^#/.test(name)) mangled = "#" + mangled; + cache.set(name, mangled); + } + AST_Node.info("Mapping property {name} to {mangled}", { + mangled: mangled, + name: name, + }); + return mangled; + } + + function mangleStrings(node) { + if (node instanceof AST_Sequence) { + mangleStrings(node.tail_node()); + } else if (node instanceof AST_String) { + node.value = mangle(node.value); + } else if (node instanceof AST_Conditional) { + mangleStrings(node.consequent); + mangleStrings(node.alternative); + } + } +} diff --git a/.pnpm-store/v11/files/32/e8a0ef6a27e925a13d3fd4f1565294ee99252263aa255112bbdcfc6834469db9fe13b902679a6b003cee33bd1fe5d6ccb31d5e4055eebbc09499687d4e1c80 b/.pnpm-store/v11/files/32/e8a0ef6a27e925a13d3fd4f1565294ee99252263aa255112bbdcfc6834469db9fe13b902679a6b003cee33bd1fe5d6ccb31d5e4055eebbc09499687d4e1c80 new file mode 100644 index 00000000..62aa8c1b --- /dev/null +++ b/.pnpm-store/v11/files/32/e8a0ef6a27e925a13d3fd4f1565294ee99252263aa255112bbdcfc6834469db9fe13b902679a6b003cee33bd1fe5d6ccb31d5e4055eebbc09499687d4e1c80 @@ -0,0 +1,74 @@ +{ + "name": "isobject", + "description": "Returns true if the value is an object and not an array or null.", + "version": "3.0.1", + "homepage": "https://github.com/jonschlinkert/isobject", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "(https://github.com/LeSuisse)", + "Brian Woodward (https://twitter.com/doowb)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Magnús Dæhlen (https://github.com/magnudae)", + "Tom MacWright (https://macwright.org)" + ], + "repository": "jonschlinkert/isobject", + "bugs": { + "url": "https://github.com/jonschlinkert/isobject/issues" + }, + "license": "MIT", + "files": [ + "index.d.ts", + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": {}, + "devDependencies": { + "gulp-format-md": "^0.1.9", + "mocha": "^2.4.5" + }, + "keywords": [ + "check", + "is", + "is-object", + "isobject", + "kind", + "kind-of", + "kindof", + "native", + "object", + "type", + "typeof", + "value" + ], + "types": "index.d.ts", + "verb": { + "related": { + "list": [ + "extend-shallow", + "is-plain-object", + "kind-of", + "merge-deep" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "reflinks": [ + "verb" + ] + } +} diff --git a/.pnpm-store/v11/files/32/e8b06e5520633a4297fe85acbbaa510686eeb1146ceb7b1d6b52fc8c93054a42d9ab0230a961bc4016e849e8eff062e7bf739c04f7b70a47d7406c23720c1c b/.pnpm-store/v11/files/32/e8b06e5520633a4297fe85acbbaa510686eeb1146ceb7b1d6b52fc8c93054a42d9ab0230a961bc4016e849e8eff062e7bf739c04f7b70a47d7406c23720c1c new file mode 100644 index 00000000..ab88bdf8 --- /dev/null +++ b/.pnpm-store/v11/files/32/e8b06e5520633a4297fe85acbbaa510686eeb1146ceb7b1d6b52fc8c93054a42d9ab0230a961bc4016e849e8eff062e7bf739c04f7b70a47d7406c23720c1c @@ -0,0 +1,27 @@ +var baseIsSet = require('./_baseIsSet'), + baseUnary = require('./_baseUnary'), + nodeUtil = require('./_nodeUtil'); + +/* Node.js helper references. */ +var nodeIsSet = nodeUtil && nodeUtil.isSet; + +/** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ +var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + +module.exports = isSet; diff --git a/.pnpm-store/v11/files/32/fdb77c75a41d6f894cb2109be7c0238670308e910909fb2806ed26cdccb0d24a468d392718117d25f3ce4bcea1abadab86de3a1dce4ff0baa924446cc51a7d b/.pnpm-store/v11/files/32/fdb77c75a41d6f894cb2109be7c0238670308e910909fb2806ed26cdccb0d24a468d392718117d25f3ce4bcea1abadab86de3a1dce4ff0baa924446cc51a7d new file mode 100644 index 00000000..7627aafd --- /dev/null +++ b/.pnpm-store/v11/files/32/fdb77c75a41d6f894cb2109be7c0238670308e910909fb2806ed26cdccb0d24a468d392718117d25f3ce4bcea1abadab86de3a1dce4ff0baa924446cc51a7d @@ -0,0 +1,34 @@ + +## Some important notes on using bash for entry points to command line tools + +#### here is the main reason we use bash as an intermediary + +> +> https://stackoverflow.com/questions/50616253/how-to-resolve-chicken-egg-situation-with-tsc-and-npm-install +> + + +##### we use this bash file instead of a dist/.js file, because of this problem: + +```bash +dir_name="$(dirname "$0")" +read_link="$(readlink "$0")"; +exec_dir="$(dirname $(dirname "$read_link"))"; +my_path="$dir_name/$exec_dir"; +basic_path="$(cd $(dirname ${my_path}) && pwd)/$(basename ${my_path})" +js="$basic_path/dist/cli.js" +``` + + +##### there is an extradinary amount of magic required to get a bash script +##### to properly reference an adjacent .js file +##### if the above can be simplified, please lmk, but the above is currently very necessary. + +##### one value add here of using a bash script, is that we can easily install any missing CLI dependencies +##### or set env variables as needed + +##### run this mofo + +```bash +node "$js" "$@" +``` diff --git a/.pnpm-store/v11/files/33/2e522e224618f00d8cdeab3871450031b78b452e9be6876885f1d5c4d2d142c1eae524fa5b02f9d27894c32857be4b082aa6662bf7e6105ff1bff896f79260 b/.pnpm-store/v11/files/33/2e522e224618f00d8cdeab3871450031b78b452e9be6876885f1d5c4d2d142c1eae524fa5b02f9d27894c32857be4b082aa6662bf7e6105ff1bff896f79260 new file mode 100644 index 00000000..9b3b6c7e --- /dev/null +++ b/.pnpm-store/v11/files/33/2e522e224618f00d8cdeab3871450031b78b452e9be6876885f1d5c4d2d142c1eae524fa5b02f9d27894c32857be4b082aa6662bf7e6105ff1bff896f79260 @@ -0,0 +1,216 @@ +/* + * Browser-compatible JavaScript MD5 + * + * Modification of JavaScript MD5 + * https://github.com/blueimp/JavaScript-MD5 + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + * + * Based on + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +'use strict'; + +function md5(bytes) { + if (typeof(bytes) == 'string') { + var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape + bytes = new Array(msg.length); + for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); + } + + return md5ToHexEncodedArray( + wordsToMd5( + bytesToWords(bytes) + , bytes.length * 8) + ); +} + + +/* +* Convert an array of little-endian words to an array of bytes +*/ +function md5ToHexEncodedArray(input) { + var i; + var x; + var output = []; + var length32 = input.length * 32; + var hexTab = '0123456789abcdef'; + var hex; + + for (i = 0; i < length32; i += 8) { + x = (input[i >> 5] >>> (i % 32)) & 0xFF; + + hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); + + output.push(hex); + } + return output; +} + +/* +* Calculate the MD5 of an array of little-endian words, and a bit length. +*/ +function wordsToMd5(x, len) { + /* append padding */ + x[len >> 5] |= 0x80 << (len % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var i; + var olda; + var oldb; + var oldc; + var oldd; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + + var d = 271733878; + + for (i = 0; i < x.length; i += 16) { + olda = a; + oldb = b; + oldc = c; + oldd = d; + + a = md5ff(a, b, c, d, x[i], 7, -680876936); + d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); + + a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5gg(b, c, d, a, x[i], 20, -373897302); + a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); + + a = md5hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5hh(d, a, b, c, x[i], 11, -358537222); + c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); + + a = md5ii(a, b, c, d, x[i], 6, -198630844); + d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); + + a = safeAdd(a, olda); + b = safeAdd(b, oldb); + c = safeAdd(c, oldc); + d = safeAdd(d, oldd); + } + return [a, b, c, d]; +} + +/* +* Convert an array bytes to an array of little-endian words +* Characters >255 have their high-byte silently ignored. +*/ +function bytesToWords(input) { + var i; + var output = []; + output[(input.length >> 2) - 1] = undefined; + for (i = 0; i < output.length; i += 1) { + output[i] = 0; + } + var length8 = input.length * 8; + for (i = 0; i < length8; i += 8) { + output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); + } + + return output; +} + +/* +* Add integers, wrapping at 2^32. This uses 16-bit operations internally +* to work around bugs in some JS interpreters. +*/ +function safeAdd(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* +* Bitwise rotate a 32-bit number to the left. +*/ +function bitRotateLeft(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* +* These functions implement the four basic operations the algorithm uses. +*/ +function md5cmn(q, a, b, x, s, t) { + return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); +} +function md5ff(a, b, c, d, x, s, t) { + return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5gg(a, b, c, d, x, s, t) { + return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5hh(a, b, c, d, x, s, t) { + return md5cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5ii(a, b, c, d, x, s, t) { + return md5cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +module.exports = md5; diff --git a/.pnpm-store/v11/files/33/4a9919ab074bef9534c9b40da79df872e546de70658ff6240d8a486f33b4d1773083bc0d7ceb5f2a72dd783ad4a3f9b2d1eb9c5dc5775c8d9961ea194c3408 b/.pnpm-store/v11/files/33/4a9919ab074bef9534c9b40da79df872e546de70658ff6240d8a486f33b4d1773083bc0d7ceb5f2a72dd783ad4a3f9b2d1eb9c5dc5775c8d9961ea194c3408 new file mode 100644 index 00000000..a00a889a --- /dev/null +++ b/.pnpm-store/v11/files/33/4a9919ab074bef9534c9b40da79df872e546de70658ff6240d8a486f33b4d1773083bc0d7ceb5f2a72dd783ad4a3f9b2d1eb9c5dc5775c8d9961ea194c3408 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').doUntil; diff --git a/.pnpm-store/v11/files/33/52fb41c0f27f8e131c2a677ab5cc25a345770b8fbb5f7e2a5d06d16b459fd513eedd6e4e260048daa003811a1738fc203bc1c7ce9fcc034c5648569a21a99f b/.pnpm-store/v11/files/33/52fb41c0f27f8e131c2a677ab5cc25a345770b8fbb5f7e2a5d06d16b459fd513eedd6e4e260048daa003811a1738fc203bc1c7ce9fcc034c5648569a21a99f new file mode 100644 index 00000000..e4b971de --- /dev/null +++ b/.pnpm-store/v11/files/33/52fb41c0f27f8e131c2a677ab5cc25a345770b8fbb5f7e2a5d06d16b459fd513eedd6e4e260048daa003811a1738fc203bc1c7ce9fcc034c5648569a21a99f @@ -0,0 +1,82 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const assert = require("assert"); +const EE = require("events"); +const chalk = require("chalk"); +const su = require("suman-utils"); +const _suman = global.__suman = (global.__suman || {}); +const socketio_child_client_1 = require("../index-helpers/socketio-child-client"); +const rb = _suman.resultBroadcaster = _suman.resultBroadcaster || new EE(); +const sumanReporters = _suman.sumanReporters = _suman.sumanReporters || []; +const reporterRets = _suman.reporterRets = _suman.reporterRets || []; +let loaded = false; +let getReporterFn = function (fn) { + return fn.default || fn.loadReporter || fn; +}; +let loadReporter = function (rpath) { + try { + let fullPath; + try { + fullPath = require.resolve(rpath); + } + catch (err) { + fullPath = require.resolve(path.resolve(_suman.projectRoot + '/' + rpath)); + } + let fn = require(fullPath); + fn = getReporterFn(fn); + assert(typeof fn === 'function', 'Suman implementation error - reporter module format fail.'); + fn.reporterPath = fullPath; + return fn; + } + catch (err) { + _suman.log.error(`could not load reporter at path "${rpath}".`); + _suman.log.error(err.stack); + } +}; +exports.run = function () { + if (loaded) { + return; + } + else { + loaded = true; + } + const sumanOpts = _suman.sumanOpts; + _suman.currentPaddingCount = _suman.currentPaddingCount || { val: 0 }; + const optsCopy = Object.assign({}, sumanOpts); + let fn, client; + if (sumanReporters.length < 1) { + try { + if (window) { + if (window.__karma__) { + _suman.log.info('Attempting to load karma reporter.'); + fn = loadReporter('suman-reporters/modules/karma-reporter'); + } + else { + _suman.log.info('Attempting to load websocket reporter.'); + fn = loadReporter('suman-reporters/modules/websocket-reporter'); + client = socketio_child_client_1.getClient(); + } + } + } + catch (err) { + if (su.vgt(7)) { + _suman.log.warning(chalk.yellow.bold(err.message)); + } + if (_suman.inceptionLevel > 0 || sumanOpts.$useTAPOutput || sumanOpts.$useTAPJSONOutput || _suman.usingRunner) { + su.vgt(6) && _suman.log.info('last-ditch effort to load a reporter: loading "tap-json-reporter"'); + fn = loadReporter('suman-reporters/modules/tap-json-reporter'); + } + else { + su.vgt(6) && _suman.log.info('last-ditch effort to load a reporter: loading "std-reporter"'); + fn = loadReporter('suman-reporters/modules/std-reporter'); + } + } + assert(typeof fn === 'function', 'Suman implementation error - reporter fail - ' + + 'reporter does not export a function. Please report this problem.'); + sumanReporters.push(fn.reporterPath); + reporterRets.push(fn.call(null, rb, optsCopy, {}, client)); + } +}; diff --git a/.pnpm-store/v11/files/33/6ab0e04cce6bd15ac6fdc93f87c6f64f84ddd7c4f639868a5bc44228e90d5bf472f156c8c780a8188b0274f078552e6ca2041db23a75f587823b3385776074 b/.pnpm-store/v11/files/33/6ab0e04cce6bd15ac6fdc93f87c6f64f84ddd7c4f639868a5bc44228e90d5bf472f156c8c780a8188b0274f078552e6ca2041db23a75f587823b3385776074 new file mode 100644 index 00000000..ee7e14c0 --- /dev/null +++ b/.pnpm-store/v11/files/33/6ab0e04cce6bd15ac6fdc93f87c6f64f84ddd7c4f639868a5bc44228e90d5bf472f156c8c780a8188b0274f078552e6ca2041db23a75f587823b3385776074 @@ -0,0 +1,4 @@ +var v35 = require('./lib/v35.js'); +var md5 = require('./lib/md5'); + +module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/.pnpm-store/v11/files/33/9cb0be6692e1009f94c1348fd2c27eafb65eafb6675ad9c33ca84ba9cfc33f421552edf755fb226f7616a78c7cae021bb9cd464f8e85e3d44da5e560e453a5-exec b/.pnpm-store/v11/files/33/9cb0be6692e1009f94c1348fd2c27eafb65eafb6675ad9c33ca84ba9cfc33f421552edf755fb226f7616a78c7cae021bb9cd464f8e85e3d44da5e560e453a5-exec new file mode 100755 index 00000000..5556fab3 --- /dev/null +++ b/.pnpm-store/v11/files/33/9cb0be6692e1009f94c1348fd2c27eafb65eafb6675ad9c33ca84ba9cfc33f421552edf755fb226f7616a78c7cae021bb9cd464f8e85e3d44da5e560e453a5-exec @@ -0,0 +1,180 @@ +#!/usr/bin/env node +'use strict'; + +//core +import cp = require('child_process'); +import fs = require('fs'); +import path = require('path'); +import util = require('util'); +import assert = require('assert'); +import EE = require('events'); + +//npm +import residence = require('residence'); +import async = require('async'); + +//project +import su = require('suman-utils'); + +/////////////////////////////////////////////////////////////////////////// + +const cwd = process.cwd(); +const userHomeDir = path.resolve(process.env.HOME); +const sumanHome = path.resolve(userHomeDir + '/.suman'); +const findSumanExec = path.resolve(sumanHome + '/find-local-suman-executable.js'); +const sumanClis = path.resolve(sumanHome + '/suman-clis.sh'); +const sumanGlobalConfig = path.resolve(sumanHome + '/suman.global.conf.json'); +const sumanCompletion = path.resolve(sumanHome + '/suman-completion.sh'); +const findProjectRootDest = path.resolve(sumanHome + '/find-project-root.js'); +const sumanDebugLog = path.resolve(sumanHome + '/logs/suman-postinstall-debug.log'); +const dbPath = path.resolve(sumanHome + '/database/exec_db'); +const createTables = path.resolve(__dirname + '/create-tables.sh'); + +/////////////////////////////////////////////////////////////////////////////////////////////// + +const queue = path.resolve(process.env.HOME + '/.suman/install-queue.txt'); + +////////////////////////////////////////////////////////////////////////////////////////////////// + +let logInfo = function (...args: Array) { + const data = Array.from(args).join(' '); + try { + fs.appendFileSync(sumanDebugLog, data); + } + catch (err) { + console.error(err.message || err); + } +}; + +logInfo(' => In Suman postinstall script, cwd => ', cwd); +logInfo(' => In Suman postinstall script => ', __filename); +logInfo(' => Suman home dir path => ', sumanHome); +logInfo(' => Suman post-install script run on ' + new Date() + ', from directory (cwd) =>'); +logInfo(cwd); + +const runDatabaseInstalls = function (err: Error) { + + // this is no longer used, but currently here for reference only + let logerr = false; + + if (err) { + logInfo(' => Suman post-install initial routine experienced an error =>'); + logInfo(String(err.stack || err)); + } + + const n = cp.spawn('bash', [createTables], { + env: Object.assign({}, process.env, { + SUMAN_DATABASE_PATH: dbPath + }) + }); + + n.stderr.setEncoding('utf8'); + n.stderr.on('data', logInfo); + n.stderr.pipe(process.stderr); + + n.once('close', function (code) { + + n.unref(); + + if (code > 0) { + console.error(' => Suman SQLite routine completed with a non-zero exit code.'); + } + + try { + if (fs.existsSync(sumanHome)) { + } + else { + console.error(' => Warning => ~/.suman dir does not exist!'); + } + } + catch (err) { + console.error(err.stack || err); + } + finally { + process.exit(0); + } + + }); + +}; + +let wrapErr = function (cb: Function, fn: Function) { + return function (err: Error) { + if (err) return cb(err); + return fn.apply(this, Array.from(arguments).slice(1)); + }; +}; + +async.parallel({ + + updateSumanClis: function (cb: Function) { + //always want to update this file to the latest version, so always overwrite + let p = path.resolve(__dirname + '/suman-clis.sh'); + fs.readFile(p, wrapErr(cb, function (data: string) { + fs.writeFile(sumanClis, data, {flag: 'w', mode: 0o777}, cb); + })); + }, + + createGlobalConfigFile: function (cb: Function) { + //always want to update this file to the latest version, so always overwrite + let p = path.resolve(__dirname + '/suman.global.conf.json'); + fs.readFile(p, wrapErr(cb, function (data: string) { + fs.writeFile(sumanGlobalConfig, data, {flag: 'wx', mode: 0o777}, function (err) { + if (err && !/EEXIST/i.test(String(err.message))) { + return cb(err); + } + cb(null); + }); + })); + }, + + updateSumanCompletion: function (cb: Function) { + //always want to update this file to the latest version, so always overwrite + let p = path.resolve(__dirname + '/suman-completion.sh'); + fs.readFile(p, wrapErr(cb, function (data: string) { + fs.writeFile(sumanCompletion, data, {flag: 'w', mode: 0o777}, cb); + })); + }, + + updateFindSumanExec: function (cb: Function) { + //always want to update this file to the latest version, so always overwrite + let p = path.resolve(__dirname + '/find-local-suman-executable.js'); + fs.readFile(p, wrapErr(cb, function (data: string) { + fs.writeFile(findSumanExec, data, {flag: 'w', mode: 0o777}, cb); + })); + }, + + appendToQueue: function (cb: Function) { + // we want to create the file if it doesn't exist, and just write empty string either way + // default flag is 'a' + fs.appendFile(queue, '', cb); + }, + + updateFindProjectRoot: function (cb: Function) { + let p = path.resolve(__dirname + '/find-project-root.js'); + fs.readFile(p, wrapErr(cb, function (data: string) { + fs.writeFile(findProjectRootDest, data, {flag: 'w', mode: 0o777}, cb); + })); + } + + }, + + function (err: Error) { + + err && console.error(err.stack || err); + + try { + if (!fs.existsSync(sumanHome)) { + console.error(' => Warning => ~/.suman dir does not exist!'); + } + } + catch (err) { + console.error(err.stack || err); + } + finally { + process.exit(0); + } + + }); + + diff --git a/.pnpm-store/v11/files/33/a0c9e749c215bceb3db5829f28fbb8adb76ec65a13c6a3e18d36d64129cced1b446db3e8e9ecd05fca6e7510032f69b761da0970b43562eac8444bebd409d8 b/.pnpm-store/v11/files/33/a0c9e749c215bceb3db5829f28fbb8adb76ec65a13c6a3e18d36d64129cced1b446db3e8e9ecd05fca6e7510032f69b761da0970b43562eac8444bebd409d8 new file mode 100644 index 00000000..0c8bf314 --- /dev/null +++ b/.pnpm-store/v11/files/33/a0c9e749c215bceb3db5829f28fbb8adb76ec65a13c6a3e18d36d64129cced1b446db3e8e9ecd05fca6e7510032f69b761da0970b43562eac8444bebd409d8 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').foldr; diff --git a/.pnpm-store/v11/files/33/aa78cb91c0cf3d9230cddc4c32646731f85dbf42231620e5ec01ec405debc4a1f008ea2d2ff586d2c3a4948dd822acdc3363ae714be17cfcb04626368efd45 b/.pnpm-store/v11/files/33/aa78cb91c0cf3d9230cddc4c32646731f85dbf42231620e5ec01ec405debc4a1f008ea2d2ff586d2c3a4948dd822acdc3363ae714be17cfcb04626368efd45 new file mode 100644 index 00000000..6947eedb --- /dev/null +++ b/.pnpm-store/v11/files/33/aa78cb91c0cf3d9230cddc4c32646731f85dbf42231620e5ec01ec405debc4a1f008ea2d2ff586d2c3a4948dd822acdc3363ae714be17cfcb04626368efd45 @@ -0,0 +1,61 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const EE = require("events"); +const shuffle = require('lodash.shuffle'); +const suman_events_1 = require("suman-events"); +const su = require("suman-utils"); +const chalk = require("chalk"); +const _suman = global.__suman = (global.__suman || {}); +const resultBroadcaster = _suman.resultBroadcaster = (_suman.resultBroadcaster || new EE()); +const socket_cp_hash_1 = require("./socket-cp-hash"); +const add_to_transpile_queue_1 = require("./multi-process/add-to-transpile-queue"); +const multiple_process_each_on_exit_1 = require("./multiple-process-each-on-exit"); +const add_to_run_queue_1 = require("./multi-process/add-to-run-queue"); +const queues_1 = require("./shared/queues"); +exports.makeHandleMultipleProcesses = function (runnerObj, tableRows, messages, forkedCPs, beforeExitRunOncePost, makeExit) { + return function (runObj) { + const { sumanOpts, sumanConfig, projectRoot } = _suman; + _suman.startDateMillis = Date.now(); + process.stderr.setMaxListeners(runObj.files.length + 11); + process.stdout.setMaxListeners(runObj.files.length + 11); + const logsDir = _suman.sumanConfig.logsDir || _suman.sumanHelperDirRoot + '/logs'; + const sumanCPLogs = path.resolve(logsDir + '/runs/'); + const f = path.resolve(sumanCPLogs + '/' + _suman.timestamp + '-' + _suman.runId); + const args = ['--user-args', sumanOpts.user_args]; + const runQueue = queues_1.makeRunQueue(); + const onExitFn = multiple_process_each_on_exit_1.makeOnExitFn(runnerObj, tableRows, messages, forkedCPs, beforeExitRunOncePost, makeExit, runQueue); + const runFile = add_to_run_queue_1.makeAddToRunQueue(runnerObj, args, runQueue, projectRoot, socket_cp_hash_1.cpHash, forkedCPs, onExitFn); + const waitForAllTranformsToFinish = sumanOpts.wait_for_all_transforms; + if (waitForAllTranformsToFinish) { + _suman.log.info('waitForAllTranformsToFinish => ', chalk.magenta(waitForAllTranformsToFinish)); + } + let queuedTestFns = []; + let failedTransformObjects = []; + const transpileQueue = queues_1.makeTranspileQueue(failedTransformObjects, runFile, queuedTestFns); + if (waitForAllTranformsToFinish) { + transpileQueue.drain = function () { + _suman.log.info('all transforms complete, beginning to run first set of tests.'); + queuedTestFns.forEach(function (fn) { + fn(); + }); + }; + } + if (sumanOpts.$useTAPOutput) { + if (sumanOpts.verbosity > 4) { + _suman.log.info(chalk.gray.bold('Suman runner is expecting TAP output from Node.js child processes ' + + 'and will not be listening for websocket messages.')); + } + } + let files = runObj.files; + resultBroadcaster.emit(String(suman_events_1.events.RUNNER_STARTED), files.length); + if (_suman.sumanOpts.rand) { + files = shuffle(files); + } + runnerObj.startTime = Date.now(); + const fileObjArray = su.removeSharedRootPath(files); + fileObjArray.forEach(add_to_transpile_queue_1.makeAddToTranspileQueue(f, transpileQueue, tableRows, socket_cp_hash_1.ganttHash, projectRoot)); + }; +}; diff --git a/.pnpm-store/v11/files/33/aada310fcb01ee353b895941f524639e024d252ed3d6fc900b5df37df8a90acbd340b6650e493e07fdcb92429188b10396c53618776cfade8ab22f94e074c2 b/.pnpm-store/v11/files/33/aada310fcb01ee353b895941f524639e024d252ed3d6fc900b5df37df8a90acbd340b6650e493e07fdcb92429188b10396c53618776cfade8ab22f94e074c2 new file mode 100644 index 00000000..b70ca2b3 --- /dev/null +++ b/.pnpm-store/v11/files/33/aada310fcb01ee353b895941f524639e024d252ed3d6fc900b5df37df8a90acbd340b6650e493e07fdcb92429188b10396c53618776cfade8ab22f94e074c2 @@ -0,0 +1,117 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const _suman = global.__suman = (global.__suman || {}); +exports.findPathOfRunDotSh = function (p) { + if (String(p).match(/\/@target\//)) { + return null; + } + const root = _suman.projectRoot; + const ln = root.length; + while (p.length >= ln) { + let dirname = path.dirname(p); + let map = _suman.markersMap[dirname]; + if (map && map['@run.sh']) { + return path.resolve(dirname, '@run.sh'); + } + if (map && map['@config.json']) { + try { + let config = require(path.resolve(dirname, '@config.json')); + let v; + if (v = config['@run']) { + if (v.prevent) { + return null; + } + if (v.plugin && v.plugin.value) { + let plugin = require(v.plugin.value); + return plugin.getRunPath(); + } + else if (v.plugin) { + throw new Error('"plugin" should be an object with a "value" property.'); + } + } + } + catch (err) { + _suman.log.warning('Your @config.json file may be malformed at path: ', dirname); + _suman.log.error(err.message || err); + } + } + p = path.resolve(p + '/../'); + } + return null; +}; +exports.findPathAndConfigOfRunDotSh = function (p) { + const ret = { + 'config': null, + 'runPath': null + }; + const root = _suman.projectRoot; + const ln = root.length; + while (p.length >= ln) { + let dirname = path.dirname(p); + let map = _suman.markersMap[dirname]; + if (map && map['@config.json']) { + try { + let v, config = require(path.resolve(dirname, '@config.json')); + if (v = config['@run']) { + if (v.prevent) { + _suman.log.warning('File with the following path was prevented from running with a setting in @config.json.'); + _suman.log.warning(p); + } + if (v.plugin && v.plugin.value) { + let plugin = require(v.plugin.value); + ret.runPath = plugin.getRunPath(); + } + else if (v.plugin) { + throw new Error('"plugin" should be an object with a "value" property.'); + } + } + } + catch (err) { + _suman.log.warning('Your @config.json file may be malformed at path: ', dirname); + _suman.log.error(err.message || err); + } + } + p = path.resolve(p + '/../'); + } + return ret; +}; +exports.findPathOfTransformDotSh = function (p) { + if (String(p).match(/\/@target\//)) { + return null; + } + const root = _suman.projectRoot; + const ln = root.length; + while (p.length >= ln) { + let dirname = path.dirname(p); + let map = _suman.markersMap[dirname]; + if (map && map['@transform.sh']) { + return path.resolve(dirname, '@transform.sh'); + } + if (map && map['@config.json']) { + try { + let v, config = require(path.resolve(dirname, '@config.json')); + if (v = config['@transform']) { + if (v.prevent) { + return null; + } + if (v.plugin && v.plugin.value) { + let plugin = require(v.plugin.value); + return plugin.getTransformPath(); + } + else if (v.plugin) { + throw new Error('"plugin" should be an object with a "value" property.'); + } + } + } + catch (err) { + _suman.log.warning('Your @config.json file may be malformed at path: ', dirname); + _suman.log.error(err.message || err); + } + } + p = path.resolve(p + '/../'); + } + return null; +}; diff --git a/.pnpm-store/v11/files/33/e1b747b3952d4ff5fe04aadb6b2c1585574f9d3d00fd204e1db44c166ab29fa2353810a1649611d576dc67426bbb42abf77b3a8f8af2d7602f314b5e0b375c b/.pnpm-store/v11/files/33/e1b747b3952d4ff5fe04aadb6b2c1585574f9d3d00fd204e1db44c166ab29fa2353810a1649611d576dc67426bbb42abf77b3a8f8af2d7602f314b5e0b375c new file mode 100644 index 00000000..c9aa80e0 --- /dev/null +++ b/.pnpm-store/v11/files/33/e1b747b3952d4ff5fe04aadb6b2c1585574f9d3d00fd204e1db44c166ab29fa2353810a1649611d576dc67426bbb42abf77b3a8f8af2d7602f314b5e0b375c @@ -0,0 +1,31 @@ +{ + "name": "socket.io-parser", + "version": "3.3.5", + "description": "socket.io protocol parser", + "repository": { + "type": "git", + "url": "git+https://github.com/socketio/socket.io.git" + }, + "files": [ + "binary.js", + "index.js", + "is-buffer.js" + ], + "dependencies": { + "component-emitter": "~1.3.0", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "devDependencies": { + "benchmark": "2.1.2", + "expect.js": "0.3.1", + "mocha": "3.2.0", + "socket.io-browsers": "^1.0.0", + "zuul": "3.11.1", + "zuul-ngrok": "4.0.0" + }, + "scripts": { + "test": "make test" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/33/e6e4e68a96bbc8189c2d70ae7cc6db4197ddf05c7974e9af25896579d372d2a2df31e53fb0e28247d4ec2cf7fbc2133a0f6266b444b9e3b3257d18d78fc097 b/.pnpm-store/v11/files/33/e6e4e68a96bbc8189c2d70ae7cc6db4197ddf05c7974e9af25896579d372d2a2df31e53fb0e28247d4ec2cf7fbc2133a0f6266b444b9e3b3257d18d78fc097 new file mode 100644 index 00000000..23f47af1 --- /dev/null +++ b/.pnpm-store/v11/files/33/e6e4e68a96bbc8189c2d70ae7cc6db4197ddf05c7974e9af25896579d372d2a2df31e53fb0e28247d4ec2cf7fbc2133a0f6266b444b9e3b3257d18d78fc097 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assign', require('../assign')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/33/ebcaeda010ca7b9616ae5c7552875d2d49d43430cf560dedf21e999c5fc6ffd151708da81849f89699d4205476e0640b0fe49e475e180b1d4b20668650bda5 b/.pnpm-store/v11/files/33/ebcaeda010ca7b9616ae5c7552875d2d49d43430cf560dedf21e999c5fc6ffd151708da81849f89699d4205476e0640b0fe49e475e180b1d4b20668650bda5 new file mode 100644 index 00000000..74ec8306 --- /dev/null +++ b/.pnpm-store/v11/files/33/ebcaeda010ca7b9616ae5c7552875d2d49d43430cf560dedf21e999c5fc6ffd151708da81849f89699d4205476e0640b0fe49e475e180b1d4b20668650bda5 @@ -0,0 +1,30 @@ +import { IPseudoError } from "suman-types/dts/global"; +import { ISumanConfig, ISumanOpts } from "suman-types/dts/global"; +import { IAllOpts, ITestSuite } from "suman-types/dts/test-suite"; +import { Suman } from "../suman"; +import { ISumanServerInfo } from "suman-types/dts/suman"; +export declare const handleSetupComplete: (test: ITestSuite, type: string) => void; +export declare const makeRequireFile: (projectRoot: string) => (v: string) => void; +export declare const extractVals: (val: any) => { + timeout: number; + subDeps: string[]; + fn: Function; + props: string[]; +}; +export declare const makeHandleAsyncReporters: (reporterRets: any[]) => (cb: Function) => any; +export declare const makeRunGenerator: (fn: Function, ctx: any) => () => Promise; +export declare const asyncHelper: (key: string, resolve: Function, reject: Function, $args: any[], ln: number, fn: Function) => any; +export declare const implementationError: (err: IPseudoError, isThrow?: boolean) => void; +export declare const loadSumanConfig: (configPath: string, opts: Object) => any; +export declare const resolveSharedDirs: (sumanConfig: ISumanConfig, projectRoot: string, sumanOpts: ISumanOpts) => any; +export declare const loadSharedObjects: (pathObj: Object, projectRoot: string, sumanOpts: ISumanOpts) => any; +export declare const vetPaths: (paths: string[]) => void; +export declare const fatalRequestReply: (obj: Object, $cb: Function) => any; +export declare const findSumanServer: (serverName?: string) => ISumanServerInfo; +export declare const makeOnSumanCompleted: (suman: Suman) => (code: number, msg: string) => void; +export declare const cloneError: (err: Error, newMessage: string, strip?: boolean) => IPseudoError; +export declare const parseArgs: (args: any[], fnIsRequired?: boolean) => { + arrayDeps: IAllOpts[]; + args: any[]; +}; +export declare const evalOptions: (arrayDeps: IAllOpts[], opts: IAllOpts) => string[]; diff --git a/.pnpm-store/v11/files/34/102bf17076ad7f6a439cfde31dab0dff6155ffb2729f896279f0aa4c99b17fee7325548849b6ef48f8d29f220a3f8ad6eefbaf2e54b1793de06e52e5392ed6-exec b/.pnpm-store/v11/files/34/102bf17076ad7f6a439cfde31dab0dff6155ffb2729f896279f0aa4c99b17fee7325548849b6ef48f8d29f220a3f8ad6eefbaf2e54b1793de06e52e5392ed6-exec new file mode 100755 index 00000000..58f9796a --- /dev/null +++ b/.pnpm-store/v11/files/34/102bf17076ad7f6a439cfde31dab0dff6155ffb2729f896279f0aa4c99b17fee7325548849b6ef48f8d29f220a3f8ad6eefbaf2e54b1793de06e52e5392ed6-exec @@ -0,0 +1,23 @@ +const fs = require('fs'); +const path = require('path'); + +exports.getTransformStream = function () { + return fs.createReadStream(exports.getTransformPath()); +}; + +exports.getTransformPath = function(){ + return path.resolve(__dirname + '/index.sh'); +}; + + +exports.getListOfCompatiblePlugins = function(){ + + return { + + '@run': [ + 'suman-run-plugins/plugins/babel-std' + ] + + } + +}; \ No newline at end of file diff --git a/.pnpm-store/v11/files/34/1a301f29f27cab5641516318b198fd76a970b3a059a383c684b8a410c1e748f4788bb6de1e3c0eb047e734a4faf606b8dfd80576a65200172220f237cdbe33 b/.pnpm-store/v11/files/34/1a301f29f27cab5641516318b198fd76a970b3a059a383c684b8a410c1e748f4788bb6de1e3c0eb047e734a4faf606b8dfd80576a65200172220f237cdbe33 new file mode 100644 index 00000000..9d1a6183 --- /dev/null +++ b/.pnpm-store/v11/files/34/1a301f29f27cab5641516318b198fd76a970b3a059a383c684b8a410c1e748f4788bb6de1e3c0eb047e734a4faf606b8dfd80576a65200172220f237cdbe33 @@ -0,0 +1,42 @@ +{ + "bitwise": true, + "camelcase": true, + "curly": false, + "eqeqeq": true, + "es3": false, + "forin": true, + "immed": false, + "indent": false, + "latedef": "nofunc", + "newcap": false, + "noarg": true, + "noempty": true, + "nonew": false, + "plusplus": false, + "quotmark": true, + "undef": true, + "unused": "vars", + "strict": false, + "trailing": true, + "maxparams": 5, + "maxdepth": false, + "maxstatements": false, + "maxcomplexity": false, + "maxlen": 100, + + "asi": true, + "expr": true, + "globalstrict": true, + "smarttabs": true, + "sub": true, + + "node": true, + "globals": { + "describe": false, + "it": false, + "before": false, + "beforeEach": false, + "after": false, + "afterEach": false + } +} diff --git a/.pnpm-store/v11/files/34/412c6f26acd623c3d2f5d8cd8835905466626f974cbdd42cff63ae515dd79a3c15e192e0dc35399b4d6fc4b44d731b9c47cb743fd5f26d973ebe224c2c71ab b/.pnpm-store/v11/files/34/412c6f26acd623c3d2f5d8cd8835905466626f974cbdd42cff63ae515dd79a3c15e192e0dc35399b4d6fc4b44d731b9c47cb743fd5f26d973ebe224c2c71ab new file mode 100644 index 00000000..cd40d0d1 --- /dev/null +++ b/.pnpm-store/v11/files/34/412c6f26acd623c3d2f5d8cd8835905466626f974cbdd42cff63ae515dd79a3c15e192e0dc35399b4d6fc4b44d731b9c47cb743fd5f26d973ebe224c2c71ab @@ -0,0 +1,42 @@ +{ + "name": "cookie", + "description": "HTTP server cookie parsing and serialization", + "version": "0.4.2", + "author": "Roman Shtylman ", + "contributors": [ + "Douglas Christopher Wilson " + ], + "license": "MIT", + "keywords": [ + "cookie", + "cookies" + ], + "repository": "jshttp/cookie", + "devDependencies": { + "beautify-benchmark": "0.2.4", + "benchmark": "2.1.4", + "eslint": "7.32.0", + "eslint-plugin-markdown": "2.2.1", + "mocha": "9.2.0", + "nyc": "15.1.0", + "top-sites": "1.1.85" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "bench": "node benchmark/index.js", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks --ui qunit test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update-bench": "node scripts/update-benchmark.js", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/.pnpm-store/v11/files/34/44987ee5f548b4e4600b874c49851e26577a956584f3fedbe32cd2913fcfbac5295c0abadb61562e1e3e4d6c8de12a6f732395609da1de0524a942d0b8844e-exec b/.pnpm-store/v11/files/34/44987ee5f548b4e4600b874c49851e26577a956584f3fedbe32cd2913fcfbac5295c0abadb61562e1e3e4d6c8de12a6f732395609da1de0524a942d0b8844e-exec new file mode 100755 index 00000000..46c61568 --- /dev/null +++ b/.pnpm-store/v11/files/34/44987ee5f548b4e4600b874c49851e26577a956584f3fedbe32cd2913fcfbac5295c0abadb61562e1e3e4d6c8de12a6f732395609da1de0524a942d0b8844e-exec @@ -0,0 +1,181 @@ +{ + "name": "@types/node", + "version": "10.17.60", + "description": "TypeScript definitions for Node.js", + "license": "MIT", + "contributors": [ + { + "name": "Microsoft TypeScript", + "url": "https://github.com/Microsoft", + "githubUsername": "Microsoft" + }, + { + "name": "DefinitelyTyped", + "url": "https://github.com/DefinitelyTyped", + "githubUsername": "DefinitelyTyped" + }, + { + "name": "Alberto Schiabel", + "url": "https://github.com/jkomyno", + "githubUsername": "jkomyno" + }, + { + "name": "Alvis HT Tang", + "url": "https://github.com/alvis", + "githubUsername": "alvis" + }, + { + "name": "Andrew Makarov", + "url": "https://github.com/r3nya", + "githubUsername": "r3nya" + }, + { + "name": "Chigozirim C.", + "url": "https://github.com/smac89", + "githubUsername": "smac89" + }, + { + "name": "Deividas Bakanas", + "url": "https://github.com/DeividasBakanas", + "githubUsername": "DeividasBakanas" + }, + { + "name": "Eugene Y. Q. Shen", + "url": "https://github.com/eyqs", + "githubUsername": "eyqs" + }, + { + "name": "Hannes Magnusson", + "url": "https://github.com/Hannes-Magnusson-CK", + "githubUsername": "Hannes-Magnusson-CK" + }, + { + "name": "Hoàng Văn Khải", + "url": "https://github.com/KSXGitHub", + "githubUsername": "KSXGitHub" + }, + { + "name": "Huw", + "url": "https://github.com/hoo29", + "githubUsername": "hoo29" + }, + { + "name": "Kelvin Jin", + "url": "https://github.com/kjin", + "githubUsername": "kjin" + }, + { + "name": "Klaus Meinhardt", + "url": "https://github.com/ajafff", + "githubUsername": "ajafff" + }, + { + "name": "Lishude", + "url": "https://github.com/islishude", + "githubUsername": "islishude" + }, + { + "name": "Mariusz Wiktorczyk", + "url": "https://github.com/mwiktorczyk", + "githubUsername": "mwiktorczyk" + }, + { + "name": "Mohsen Azimi", + "url": "https://github.com/mohsen1", + "githubUsername": "mohsen1" + }, + { + "name": "Nicolas Even", + "url": "https://github.com/n-e", + "githubUsername": "n-e" + }, + { + "name": "Nikita Galkin", + "url": "https://github.com/galkin", + "githubUsername": "galkin" + }, + { + "name": "Parambir Singh", + "url": "https://github.com/parambirs", + "githubUsername": "parambirs" + }, + { + "name": "Sebastian Silbermann", + "url": "https://github.com/eps1lon", + "githubUsername": "eps1lon" + }, + { + "name": "Simon Schick", + "url": "https://github.com/SimonSchick", + "githubUsername": "SimonSchick" + }, + { + "name": "Thomas den Hollander", + "url": "https://github.com/ThomasdenH", + "githubUsername": "ThomasdenH" + }, + { + "name": "Wilco Bakker", + "url": "https://github.com/WilcoBakker", + "githubUsername": "WilcoBakker" + }, + { + "name": "wwwy3y3", + "url": "https://github.com/wwwy3y3", + "githubUsername": "wwwy3y3" + }, + { + "name": "Zane Hannan AU", + "url": "https://github.com/ZaneHannanAU", + "githubUsername": "ZaneHannanAU" + }, + { + "name": "Jeremie Rodriguez", + "url": "https://github.com/jeremiergz", + "githubUsername": "jeremiergz" + }, + { + "name": "Samuel Ainsworth", + "url": "https://github.com/samuela", + "githubUsername": "samuela" + }, + { + "name": "Kyle Uehlein", + "url": "https://github.com/kuehlein", + "githubUsername": "kuehlein" + }, + { + "name": "Thanik Bhongbhibhat", + "url": "https://github.com/bhongy", + "githubUsername": "bhongy" + }, + { + "name": "Minh Son Nguyen", + "url": "https://github.com/nguymin4", + "githubUsername": "nguymin4" + }, + { + "name": "ExE Boss", + "url": "https://github.com/ExE-Boss", + "githubUsername": "ExE-Boss" + } + ], + "main": "", + "types": "index.d.ts", + "typesVersions": { + "<=3.6": { + "*": [ + "ts3.6/*" + ] + } + }, + "repository": { + "type": "git", + "url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git", + "directory": "types/node" + }, + "scripts": {}, + "dependencies": {}, + "typesPublisherContentHash": "043aec4c1325df260459806b88c55ed404fbcdbdcc6f21b372a2ec206b4a218d", + "typeScriptVersion": "3.5" +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/34/58dbb1fb68a1e0c54c634b75903c518d7df40d6c4ff7aebedf62b338c6ff5870a081de79455acf5df6653a2c33b3be2f780815915dc30a8cd524c2fa8a3466 b/.pnpm-store/v11/files/34/58dbb1fb68a1e0c54c634b75903c518d7df40d6c4ff7aebedf62b338c6ff5870a081de79455acf5df6653a2c33b3be2f780815915dc30a8cd524c2fa8a3466 new file mode 100644 index 00000000..718fcdaa --- /dev/null +++ b/.pnpm-store/v11/files/34/58dbb1fb68a1e0c54c634b75903c518d7df40d6c4ff7aebedf62b338c6ff5870a081de79455acf5df6653a2c33b3be2f780815915dc30a8cd524c2fa8a3466 @@ -0,0 +1,21 @@ +/** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ +function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; +} + +module.exports = countHolders; diff --git a/.pnpm-store/v11/files/34/6b9f670c2a9f85e8b59ddbc8ab10cea88c8be9e6899b5680c4d2fcf2f12d8c08206f604f223bb696cc8132e292587c1231bcdff642c3d9a4f02b38129e6e06 b/.pnpm-store/v11/files/34/6b9f670c2a9f85e8b59ddbc8ab10cea88c8be9e6899b5680c4d2fcf2f12d8c08206f604f223bb696cc8132e292587c1231bcdff642c3d9a4f02b38129e6e06 new file mode 100644 index 00000000..cb1185e9 --- /dev/null +++ b/.pnpm-store/v11/files/34/6b9f670c2a9f85e8b59ddbc8ab10cea88c8be9e6899b5680c4d2fcf2f12d8c08206f604f223bb696cc8132e292587c1231bcdff642c3d9a4f02b38129e6e06 @@ -0,0 +1,20 @@ +var baseAssignValue = require('./_baseAssignValue'), + eq = require('./eq'); + +/** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +module.exports = assignMergeValue; diff --git a/.pnpm-store/v11/files/34/7308a000b01075175de6d704e2b456b1bc1f535ee90b96d3db098f1e5e70f71911524327225532315f5263d7a0d6c1fb5a01a97c408da9a09e90b0e3ef492f b/.pnpm-store/v11/files/34/7308a000b01075175de6d704e2b456b1bc1f535ee90b96d3db098f1e5e70f71911524327225532315f5263d7a0d6c1fb5a01a97c408da9a09e90b0e3ef492f new file mode 100644 index 00000000..b5ca24df --- /dev/null +++ b/.pnpm-store/v11/files/34/7308a000b01075175de6d704e2b456b1bc1f535ee90b96d3db098f1e5e70f71911524327225532315f5263d7a0d6c1fb5a01a97c408da9a09e90b0e3ef492f @@ -0,0 +1,50 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _timesLimit = require('./timesLimit'); + +var _timesLimit2 = _interopRequireDefault(_timesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Calls the `iteratee` function `n` times, and accumulates results in the same + * manner you would use with [map]{@link module:Collections.map}. + * + * @name times + * @static + * @memberOf module:ControlFlow + * @method + * @see [async.map]{@link module:Collections.map} + * @category Control Flow + * @param {number} n - The number of times to run the function. + * @param {AsyncFunction} iteratee - The async function to call `n` times. + * Invoked with the iteration index and a callback: (n, next). + * @param {Function} callback - see {@link module:Collections.map}. + * @example + * + * // Pretend this is some complicated async factory + * var createUser = function(id, callback) { + * callback(null, { + * id: 'user' + id + * }); + * }; + * + * // generate 5 users + * async.times(5, function(n, next) { + * createUser(n, function(err, user) { + * next(err, user); + * }); + * }, function(err, users) { + * // we should now have 5 users + * }); + */ +exports.default = (0, _doLimit2.default)(_timesLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/34/77f95c1f247c6f7d6808f4b6f0390bd8d3e06eaf37c3e9b7673280f5ccc4dd6a03e65dd1d7ae8cf6c1e638a80eaf055dcbc26a8b9b1f5a210584a637d55da1 b/.pnpm-store/v11/files/34/77f95c1f247c6f7d6808f4b6f0390bd8d3e06eaf37c3e9b7673280f5ccc4dd6a03e65dd1d7ae8cf6c1e638a80eaf055dcbc26a8b9b1f5a210584a637d55da1 new file mode 100644 index 00000000..1cb80722 --- /dev/null +++ b/.pnpm-store/v11/files/34/77f95c1f247c6f7d6808f4b6f0390bd8d3e06eaf37c3e9b7673280f5ccc4dd6a03e65dd1d7ae8cf6c1e638a80eaf055dcbc26a8b9b1f5a210584a637d55da1 @@ -0,0 +1,86 @@ +/** + * Repeats a string. + * + * @param {String} char(s) + * @param {Number} number of times + * @return {String} repeated string + */ + +exports.repeat = function (str, times){ + return Array(times + 1).join(str); +}; + +/** + * Pads a string + * + * @api public + */ + +exports.pad = function (str, len, pad, dir) { + if (len + 1 >= str.length) + switch (dir){ + case 'left': + str = Array(len + 1 - str.length).join(pad) + str; + break; + + case 'both': + var right = Math.ceil((padlen = len - str.length) / 2); + var left = padlen - right; + str = Array(left + 1).join(pad) + str + Array(right + 1).join(pad); + break; + + default: + str = str + Array(len + 1 - str.length).join(pad); + }; + + return str; +}; + +/** + * Truncates a string + * + * @api public + */ + +exports.truncate = function (str, length, chr){ + chr = chr || '…'; + return str.length >= length ? str.substr(0, length - chr.length) + chr : str; +}; + +/** + * Copies and merges options with defaults. + * + * @param {Object} defaults + * @param {Object} supplied options + * @return {Object} new (merged) object + */ + +function options(defaults, opts) { + for (var p in opts) { + if (p === '__proto__' || p === 'constructor' || p === 'prototype') { + continue; + } + if (opts[p] && opts[p].constructor && opts[p].constructor === Object) { + defaults[p] = defaults[p] || {}; + options(defaults[p], opts[p]); + } else { + defaults[p] = opts[p]; + } + } + return defaults; +}; +exports.options = options; + +// +// For consideration of terminal "color" programs like colors.js, +// which can add ANSI escape color codes to strings, +// we destyle the ANSI color escape codes for padding calculations. +// +// see: http://en.wikipedia.org/wiki/ANSI_escape_code +// +exports.strlen = function(str){ + var code = /\u001b\[(?:\d*;){0,5}\d*m/g; + var stripped = ("" + str).replace(code,''); + var split = stripped.split("\n"); + return split.reduce(function (memo, s) { return (s.length > memo) ? s.length : memo }, 0); +} diff --git a/.pnpm-store/v11/files/34/89a0a27490e0289e380826c0c2573a2c55ac8609a2a2f56b964ce7ace7df122e5f7e292202ab0e1a310b35bb164ea00d465e9aa22443ed697ae29a642c0db5 b/.pnpm-store/v11/files/34/89a0a27490e0289e380826c0c2573a2c55ac8609a2a2f56b964ce7ace7df122e5f7e292202ab0e1a310b35bb164ea00d465e9aa22443ed697ae29a642c0db5 new file mode 100644 index 00000000..cd83677a --- /dev/null +++ b/.pnpm-store/v11/files/34/89a0a27490e0289e380826c0c2573a2c55ac8609a2a2f56b964ce7ace7df122e5f7e292202ab0e1a310b35bb164ea00d465e9aa22443ed697ae29a642c0db5 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('flow', require('../flow')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/34/9637632cfb2514a264904e0f4cfd4544a0bc7915bbdb50c7e7212c34a39b00b2187b22cf8802ed440dfda44eac8e8927f20e98ddfa520f3f95f9796288689a b/.pnpm-store/v11/files/34/9637632cfb2514a264904e0f4cfd4544a0bc7915bbdb50c7e7212c34a39b00b2187b22cf8802ed440dfda44eac8e8927f20e98ddfa520f3f95f9796288689a new file mode 100644 index 00000000..254b8843 --- /dev/null +++ b/.pnpm-store/v11/files/34/9637632cfb2514a264904e0f4cfd4544a0bc7915bbdb50c7e7212c34a39b00b2187b22cf8802ed440dfda44eac8e8927f20e98ddfa520f3f95f9796288689a @@ -0,0 +1,350 @@ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]'; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Built-in value references. */ +var Symbol = root.Symbol, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ +function flattenDeep(array) { + var length = array ? array.length : 0; + return length ? baseFlatten(array, INFINITY) : []; +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +module.exports = flattenDeep; diff --git a/.pnpm-store/v11/files/34/999d94c6fe146c04eac257f640ef6dd59054c2c52d47f28caabc5520f390dd2783b66726de7982620cc4c7b3f3ce060e2bd8508a21a2a7ba8ba3de05e88384 b/.pnpm-store/v11/files/34/999d94c6fe146c04eac257f640ef6dd59054c2c52d47f28caabc5520f390dd2783b66726de7982620cc4c7b3f3ce060e2bd8508a21a2a7ba8ba3de05e88384 new file mode 100644 index 00000000..f76cb1f0 --- /dev/null +++ b/.pnpm-store/v11/files/34/999d94c6fe146c04eac257f640ef6dd59054c2c52d47f28caabc5520f390dd2783b66726de7982620cc4c7b3f3ce060e2bd8508a21a2a7ba8ba3de05e88384 @@ -0,0 +1,2122 @@ +{ + "ALL_COMPILER_OPTIONS_6917": "TÜM DERLEYİCİ SEÇENEKLERİ", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Bir '{0}' değiştiricisi, içeri aktarma bildirimiyle birlikte kullanılamaz.", + "A_0_parameter_must_be_the_first_parameter_2680": "Bir '{0}' parametresi ilk parametre olmalıdır.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' etiketi, '@typedef', '@callback' veya '@overload' etiketini takip edemez", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' açıklaması, birden çok '@type' etiketi içeremez.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "'bigint' sabit değeri, özellik adı olarak kullanılamaz.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Bir büyük tamsayı sabit değerinde üstel gösterim kullanılamaz.", + "A_bigint_literal_must_be_an_integer_1353": "Büyük tamsayı sabit değeri bir tamsayı olmalıdır.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Uygulama imzasındaki bir bağlama deseni parametresi isteğe bağlı olamaz.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' deyimi yalnızca bir kapsayan yineleme veya switch deyimi içinde kullanılabilir.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' deyimi, yalnızca kapsayan deyimin etiketine atlayabilir.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Karakter sınıfı ayrılmış bir çift noktalayıcı içermemelidir. Ters eğik çizgiyle bundan kaçmak mı istediniz?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "Bir karakter sınıfı aralığı başka bir karakter sınıfı tarafından sınırlanmamalıdır.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Bir sınıf, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı uygulayabilir.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Bir sınıf, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini uygulayabilir.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Bir sınıf '{0}' gibi ilkel bir türü genişletemez. Sınıflar yalnızca oluşturulabilen değerleri genişletebilir.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Bir sınıf '{0}' gibi ilkel bir türü uygulayamaz. Yalnızca diğer adlandırılmış nesne türlerini uygulayabilir.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "'default' değiştiricisi olmayan bir sınıf bildiriminin adı olmalıdır.", + "A_class_member_cannot_have_the_0_keyword_1248": "Bir sınıf üyesi '{0}' anahtar kelimesini içeremez.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Hesaplanan özellik adında virgül ifadesine izin verilmez.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Hesaplanan özellik adı, kapsayan türündeki bir tür parametresine başvuramaz.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Sınıf özelliği bildirimindeki hesaplanan özellik adı, basit bir sabit değer türüne veya 'benzersiz sembol' türüne sahip olmalıdır.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Bir metot aşırı yüklemesindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Bir tür sabit değerindeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Bir çevresel bağlamdaki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Bir arabirimdeki hesaplanan özellik adı, sabit değer türündeki veya 'unique symbol' türündeki bir ifadeye başvurmalıdır.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Hesaplanan özellik adı 'string', 'number', 'symbol' veya 'any' türünde olmalıdır.", + "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355": "'const' onaylamaları yalnızca sabit listesi üyelerine veya dize, sayı, Boolean, dizi ya da nesne sabit değerlerine yönelik başvurulara uygulanabilir.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "const numaralandırma üyesine yalnızca dize sabit değeri kullanılarak erişilebilir.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Çevresel bağlamdaki 'const' başlatıcısı bir dize veya sayısal sabit değer ya da sabit değer sabit listesi başvurusu olmalıdır.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Sınıfı 'null' değerini aşan bir oluşturucu 'super' çağrısını içeremez.", + "A_constructor_cannot_have_a_this_parameter_2681": "Bir oluşturucu 'this' parametresini içeremez.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' deyimi yalnızca bir kapsayan yineleme deyimi içinde kullanılabilir.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' deyimi, yalnızca kapsayan yineleme deyiminin etiketine atlayabilir.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Bir beyan dosyası 'import type' olmadan içe aktarılamaz. Bunun yerine '{0}' uygulama dosyasını mı içe aktarmak istediniz?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Çevresel bağlamda 'declare' değiştiricisi kullanılamaz.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Dekoratörler yalnızca metot uygulaması dekore edebilir; aşırı yüklemeleri dekore edemez.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' yan tümcesi, 'switch' deyiminde birden fazla kez bulunamaz.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Varsayılan dışarı aktarma, yalnızca ECMAScript stili bir modülde kullanılabilir.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Varsayılan dışarı aktarma, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Bu bağlamda '!' belirli atama onayına izin verilmez.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Yok etme bildiriminin bir başlatıcısı olmalıdır.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5'teki dinamik içe aktarma çağrısı 'Promise' oluşturucusu gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Dinamik içeri aktarma çağrısı, 'Promise' döndürür. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "A_file_cannot_have_a_reference_to_itself_1006": "Bir dosya kendine başvuramaz.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "'never' döndüren bir işlev, erişilebilir bir uç noktaya sahip olamaz.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "'New' anahtar kelimesiyle çağrılan bir işlev, 'void' olan bir 'this' türüne sahip olamaz.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Bildirilen türü 'undefined', 'void' veya 'any' olmayan bir işlev bir değer döndürmelidir.", + "A_generator_cannot_have_a_void_type_annotation_2505": "Bir oluşturucu 'void' türündeki bir ek açıklamaya sahip olamaz.", + "A_get_accessor_cannot_have_parameters_1054": "Bir 'get' erişimcisi parametrelere sahip olamaz.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Get erişimcisi en az ayarlayıcı kadar erişilebilir olmalıdır", + "A_get_accessor_must_return_a_value_2378": "'get' erişimcisinin bir değer döndürmesi gerekir.", + "A_label_is_not_allowed_here_1344": "'Burada etikete izin verilmiyor.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Etiketli demet öğesi türden sonra değil, addan sonra ve iki nokta işaretinden önce bir soru işareti ile isteğe bağlı olarak bildirilir.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Etiketlenmiş bir demet öğesi, tür yerine addan önce '...' ile bekleyen olarak bildirilir.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Eşlenmiş bir tür özellik veya metot bildiremez.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "Sabit listesi bildirimindeki bir üye başlatıcısı, diğer sabit listelerinde tanımlanan üyeler dahil olmak üzere kendinden sonra bildirilen üyelere başvuramaz.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Mixin sınıfının 'any[]' türünde tek bir rest parametresi içeren bir oluşturucusu olmalıdır.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Soyut yapı imzası içeren bir tür değişkeninden genişleyen mixin sınıfı da 'soyut' olarak bildirilmelidir.", + "A_module_cannot_have_multiple_default_exports_2528": "Modül, birden fazla varsayılan dışarı aktarmaya sahip olamaz.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden farklı bir dosyada olamaz.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Bir ad alanı bildirimi, birleştirildiği sınıf veya işlevden önce gelemez.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Ad alanı bildirimine yalnızca bir ad alanının veya modülün en üst düzeyinde izin verilir.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "'module' anahtar sözcüğü kullanılarak 'namespace' bildirimi bildirilmez. Lütfen bunun yerine 'namespace' anahtar sözcüğünü kullanın.", + "A_non_dry_build_would_build_project_0_6357": "-dry bayrağı kullanılmayan bir derleme '{0}' projesini derler", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "-dry bayrağı kullanılmayan bir derleme şu dosyaları siler: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "DRY dışı bir derleme, '{0}' projesinin çıkışı için zaman damgalarını güncelleştirir", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Parametre başlatıcısına yalnızca bir işlevde veya oluşturucu uygulamasında izin verilir.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Parametre özelliği, rest parametresi kullanılarak bildirilemez.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Parametre özelliğine yalnızca bir oluşturucu uygulamasında izin verilir.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Parametre özelliği, bağlama deseni kullanılarak bildirilemez.", + "A_promise_must_have_a_then_method_1059": "Promise'in bir 'then' metodu olmalıdır.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Bir 'unique symbol' türündeki sınıfın özelliği hem 'static' hem de 'readonly' olmalıdır.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Bir 'unique symbol' türündeki arabirimin veya tür sabit değerinin özelliği 'readonly' olmalıdır.", + "A_required_element_cannot_follow_an_optional_element_1257": "Gerekli öğe, isteğe bağlı öğeden sonra gelemez.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Gerekli parametre, isteğe bağlı parametreden sonra gelemez.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "rest öğesi bir bağlama deseni içeremez.", + "A_rest_element_cannot_follow_another_rest_element_1265": "REST öğesi başka bir REST öğesini izleyemez.", + "A_rest_element_cannot_have_a_property_name_2566": "Rest öğesinin özellik adı olamaz.", + "A_rest_element_cannot_have_an_initializer_1186": "rest öğesi bir başlatıcıya sahip olamaz.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest öğesi, yok etme desenindeki son öğe olmalıdır.", + "A_rest_element_type_must_be_an_array_type_2574": "REST öğesi dizi türünde olmalıdır.", + "A_rest_parameter_cannot_be_optional_1047": "rest parametresi isteğe bağlı olamaz.", + "A_rest_parameter_cannot_have_an_initializer_1048": "rest parametresi bir başlatıcıya sahip olamaz.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "rest parametresi, parametre listesinin sonunda bulunmalıdır.", + "A_rest_parameter_must_be_of_an_array_type_2370": "rest parametresi dizi türünde olmalıdır.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Bir rest parametresi veya bağlama deseninin sonunda virgül olamaz.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' deyimi, yalnızca bir işlev gövdesinde kullanılabilir.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'Return' deyimi bir sınıf statik bloğu içinde kullanılamaz.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "İçeri aktarmaları, 'baseUrl' ile ilgili arama konumlarına yeniden eşleyen bir girdi dizisi.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' erişimcisi, dönüş türü ek açıklamasına sahip olamaz.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' erişimcisi isteğe bağlı bir parametreye sahip olamaz.", + "A_set_accessor_cannot_have_rest_parameter_1053": "'set' erişimcisi rest parametresine sahip olamaz.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' erişimcisi tam olarak bir parametreye sahip olmalıdır.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' erişimci parametresinin bir başlatıcısı olamaz.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Yayılma bağımsız değişkeni, bir demet türüne sahip olmalı ya da bir rest parametresine geçirilmelidir.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' çağrısı, başlatılmış özellikleri, parametre özelliklerini veya özel tanımlayıcıları içeren türetilmiş bir sınıfın oluşturucusu içinde kök düzeyinde bir deyim olmalıdır.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Bir türetilmiş sınıf başlatılmış özellikler, parametre özellikleri veya özel tanımlayıcılar içerdiğinde 'super' çağrısı, 'super' veya 'this' öğesine başvurmak için oluşturucudaki ilk deyim olmalıdır.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "'This' tabanlı tür koruması, parametre tabanlı tür koruması ile uyumlu değildir.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' türü, yalnızca bir sınıfın veya arabirimin statik olmayan bir üyesinde kullanılabilir.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "'verbatimModuleSyntax' etkinleştirildiğinde, CommonJS modülündeki değer bildirimlerinde üst düzey bir 'export' değiştiricisi kullanılamaz.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' dosyası şu konumda zaten tanımlanmış: '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Demet üyesi hem isteğe bağlı hem de diğerleri olamaz.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Bir demet türünün negatif bir değerle dizini oluşturulamaz.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Üs ifadesinin sol tarafında tür onaylama ifadesine izin verilmez. İfadeyi parantez içine yazmayı düşünün.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Tür sabit değeri özelliği bir başlatıcıya sahip olamaz.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Yalnızca tür içeri aktarma işlemleri varsayılan bir içeri aktarmayı veya adlandırılan bağlamaları belirtebilir ancak ikisini birden belirtemez.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "Bir tür koşulu, rest parametresine başvuru yapamaz.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "Bir tür koşulu, bağlama desenindeki '{0}' öğesine başvuru yapamaz.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "Bir tür koşuluna yalnızca işlevlere ve metotlara ait dönüş türü konumunda izin verilir.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "Bir tür koşulunun türü, parametresinin türüne atanabilir olmalıdır.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "'isolatedModules' ve 'emitDecoratorMetadata' etkinleştirildiğinde, dekore edilmiş bir imzada başvurulan bir tür 'import type' veya bir namespace import ile içeri aktarılmalıdır.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Bir 'unique symbol' türündeki değişken 'const' olmalıdır.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "Bir 'yield' ifadesine yalnızca oluşturucu gövdesinde izin verilir.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "'{1}' sınıfındaki '{0}' soyut metoduna super ifadesi ile erişilemez.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "Soyut metotlar yalnızca bir soyut sınıfta görüntülenebilir.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "'{1}' sınıfındaki '{0}' soyut özelliğine oluşturucuda erişilemiyor.", + "Accessibility_modifier_already_seen_1028": "Erişilebilirlik değiştiricisi zaten görüldü.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Erişimciler yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "İki erişimci de soyut veya soyut olmayan olmalıdır.", + "Add_0_to_unresolved_variable_90008": "Çözümlenmemiş değişkene '{0}.' ekle", + "Add_a_return_statement_95111": "Return deyimi ekleyin", + "Add_a_return_type_to_the_function_declaration_9031": "İşlev bildirimine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_function_expression_9030": "İşlev ifadesine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Get erişimcisi bildirimine bir dönüş türü ekleyin.", + "Add_a_return_type_to_the_method_9034": "Yönteme bir dönüş türü ekleyin", + "Add_a_type_annotation_to_the_parameter_0_9028": "{0} parametresine bir tür ek açıklaması ekleyin.", + "Add_a_type_annotation_to_the_property_0_9029": "{0} özelliğine bir tür ek açıklaması ekleyin.", + "Add_a_type_annotation_to_the_variable_0_9027": "{0} değişkenine bir tür ek açıklaması ekleyin.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Ayarlanmış erişimci bildiriminin parametresine bir tür ekleyin.", + "Add_all_missing_async_modifiers_95041": "Tüm eksik 'async' değiştiricileri ekle", + "Add_all_missing_attributes_95168": "Tüm eksik öznitelikleri ekleyin", + "Add_all_missing_call_parentheses_95068": "Eksik tüm çağrı parantezlerini ekle", + "Add_all_missing_function_declarations_95157": "Eksik işlev bildirimlerinin tümünü ekle", + "Add_all_missing_imports_95064": "Tüm eksik içeri aktarmaları ekleyin", + "Add_all_missing_members_95022": "Tüm eksik üyeleri ekle", + "Add_all_missing_override_modifiers_95162": "Tüm eksik 'override' değiştiricilerini ekle", + "Add_all_missing_parameters_95190": "Tüm eksik parametreleri ekleyin", + "Add_all_missing_properties_95166": "Tüm eksik özellikleri ekleyin", + "Add_all_missing_return_statement_95114": "Tüm eksik return deyimlerini ekleyin", + "Add_all_missing_super_calls_95039": "Tüm eksik süper çağrıları ekle", + "Add_all_missing_type_annotations_90067": "Eksik olan tüm tür ek açıklamalarını ekleyin", + "Add_all_optional_parameters_95193": "Tüm isteğe bağlı parametreleri ekleyin", + "Add_annotation_of_type_0_90062": "'{0}' türünde ek açıklama ekleyin", + "Add_async_modifier_to_containing_function_90029": "İçeren işleve zaman uyumsuz değiştirici ekle", + "Add_await_95083": "'await' ekleyin", + "Add_await_to_initializer_for_0_95084": "'{0}' için başlatıcıya 'await' ekleyin", + "Add_await_to_initializers_95089": "Başlatıcılara 'await' ekleyin", + "Add_braces_to_arrow_function_95059": "Ok işlevine küme ayracı ekleyin", + "Add_const_to_all_unresolved_variables_95082": "Çözümlenmemiş tüm değişkenlere 'const' ekleyin", + "Add_const_to_unresolved_variable_95081": "Çözümlenmemiş değişkene 'const' ekleyin", + "Add_definite_assignment_assertion_to_property_0_95020": "'{0}' özelliğine belirli atama onayı ekle", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Tüm başlatılmamış özelliklere kesin atama onayları ekle", + "Add_export_to_make_this_file_into_a_module_95097": "Bu dosyayı bir modüle dönüştürmek için 'export {}' ekleyin", + "Add_extends_constraint_2211": "`extends` kısıtlaması ekleyin.", + "Add_extends_constraint_to_all_type_parameters_2212": "Tüm tür parametrelerine `extends` kısıtlaması ekleyin", + "Add_import_from_0_90057": "\"{0}\" kaynağından içeri aktarma ekle", + "Add_index_signature_for_property_0_90017": "'{0}' özelliği için dizin imzası ekle", + "Add_initializer_to_property_0_95019": "'{0}' özelliğine başlatıcı ekle", + "Add_initializers_to_all_uninitialized_properties_95027": "Tüm başlatılmamış özelliklere başlatıcılar ekle", + "Add_missing_attributes_95167": "Eksik öznitelikleri ekleyin", + "Add_missing_call_parentheses_95067": "Eksik çağrı parantezlerini ekle", + "Add_missing_comma_for_object_member_completion_0_95187": "'{0}' nesne üyesinin tamamlanması için eksik virgülü ekleyin.", + "Add_missing_enum_member_0_95063": "Eksik '{0}' sabit listesi üyesini ekleyin", + "Add_missing_function_declaration_0_95156": "Eksik '{0}' işlev bildirimini ekle", + "Add_missing_new_operator_to_all_calls_95072": "Tüm çağrılara eksik 'new' işlecini ekleyin", + "Add_missing_new_operator_to_call_95071": "Çağrıya eksik 'new' işlecini ekleyin", + "Add_missing_parameter_to_0_95188": "'{0}' öğesine eksik parametreyi ekleyin", + "Add_missing_parameters_to_0_95189": "'{0}' öğesine eksik parametreleri ekleyin", + "Add_missing_properties_95165": "Eksik özellikleri ekleyin", + "Add_missing_super_call_90001": "Eksik 'super()' çağrısını ekle", + "Add_missing_typeof_95052": "Eksik 'typeof' öğesini ekle", + "Add_names_to_all_parameters_without_names_95073": "Adları olmayan tüm parametrelere ad ekleyin", + "Add_optional_parameter_to_0_95191": "'{0}' öğesine isteğe bağlı parametre ekleme", + "Add_optional_parameters_to_0_95192": "'{0}' öğesine isteğe bağlı parametreler ekle", + "Add_or_remove_braces_in_an_arrow_function_95058": "Ok işlevine küme ayracı ekle veya kaldır", + "Add_override_modifier_95160": "'override' değiştiricisi ekle", + "Add_parameter_name_90034": "Parametre adı ekleyin", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Bir üye adıyla eşleşen tüm çözülmemiş değişkenlere niteleyici ekle", + "Add_resolution_mode_import_attribute_95196": "'resolution-mode' içeri aktarma özniteliği ekle", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "'resolution-mode' içeri aktarma özniteliğini, bunun gerekliği olduğu tüm yalnızca tür içeri aktarma işlemlerine ekle", + "Add_return_type_0_90063": "'{0}' dönüş tipi ekleyin", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Türü açık hale getirmek için bu ifadeye satisfies operatörü ve bir tür iddiası ekleyin (satisfies T as T).", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Satisfies operatörü ve '{0}' içeren satır içi tip iddiası ekleyin", + "Add_to_all_uncalled_decorators_95044": "Çağrılmayan tüm dekoratörlere '()' ekle", + "Add_ts_ignore_to_all_error_messages_95042": "Tüm hata iletilerine '@ts-ignore' ekle", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "İndis kullanılarak erişildiğinde türe 'undefined' ekle.", + "Add_undefined_to_optional_property_type_95169": "İsteğe bağlı özellik türüne 'undefined' ekleyin", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Tüm başlatılmamış özelliklere tanımsız tür ekle", + "Add_undefined_type_to_property_0_95018": "'{0}' özelliğine 'undefined' türünü ekle", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Çakışmayan türler için 'unknown' dönüştürmesi ekleyin", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Çakışmayan türlerin tüm dönüştürmelerine 'unknown' ekleyin", + "Add_void_to_Promise_resolved_without_a_value_95143": "Değer olmadan çözümlenen Promise'e 'void' ekle", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Değer olmadan çözümlenen tüm Promise'lere 'void' ekle", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Bir tsconfig.json dosyası eklemek, hem TypeScript hem de JavaScript dosyaları içeren projeleri düzenlemenize yardımcı olur. Daha fazla bilgi edinmek için bkz. https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Tüm '{0}' bildirimleri, aynı kısıtlamalara sahip olmalıdır.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Tüm '{0}' bildirimleri aynı değiştiricilere sahip olmalıdır.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Tüm '{0}' bildirimleri özdeş tür parametrelerine sahip olmalıdır.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Soyut metoda ait tüm bildirimler ardışık olmalıdır.", + "All_destructured_elements_are_unused_6198": "Yapısı bozulan öğelerin hiçbiri kullanılmıyor.", + "All_imports_in_import_declaration_are_unused_6192": "İçeri aktarma bildirimindeki hiçbir içeri aktarma kullanılmadı.", + "All_type_parameters_are_unused_6205": "Tüm tür parametreleri kullanılmıyor.", + "All_variables_are_unused_6199": "Hiçbir değişken kullanılmıyor.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "JavaScript dosyalarının programınızın bir parçası olmasına izin verin. Bu dosyalardan hata almak için 'checkJs' seçeneğini kullanın.", + "Allow_accessing_UMD_globals_from_modules_6602": "Modüllerden UMD genel değişkenlerine erişmeye izin verin.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Varsayılan dışarı aktarmaya sahip olmayan modüllerde varsayılan içeri aktarmalara izin verin. Bu işlem kod üretimini etkilemez, yalnızca tür denetimini etkiler.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Bir modülün varsayılan dışarı aktarması olmadığında 'import x from y' öğesine izin verin.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "tslib’den yardımcı işlevlerin her dosya başına eklenmesi yerine proje başına bir kez içeri aktarılmasına izin verin.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "İçe aktarma işlemlerinin TypeScript dosya uzantılarını içermesine izin verin. '--moduleResolution bundler' ve '--noEmit' veya '--emitDeclarationOnly' ayarını gerektirir.", + "Allow_javascript_files_to_be_compiled_6102": "Javascript dosyalarının derlenmesine izin ver.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Modüller çözümlenirken birden çok klasörün tek bir klasör olarak işlenmesine izin verin.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "Zaten eklenmiş olan '{0}' dosya adı, '{1}' dosya adından yalnızca büyük/küçük harf yönünden farklıdır.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "Çevresel modül bildirimi göreli modül adını belirtemez.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Çevresel modüller, diğer modüllerde veya ad alanlarında iç içe bulunamaz.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD modülü birden fazla ad atamasında sahip olamaz.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Soyut erişimcinin uygulaması olamaz.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Erişilebilirlik değiştiricisi özel bir tanımlayıcıyla kullanılamıyor.", + "An_accessor_cannot_have_type_parameters_1094": "Erişimci, tür parametrelerine sahip olamaz.", + "An_accessor_property_cannot_be_declared_optional_1276": "'accessor' özelliği isteğe bağlı olarak bildirilemez.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Çevresel modül bildirimine yalnızca bir dosyadaki en üst düzeyde izin verilir.", + "An_argument_for_0_was_not_provided_6210": "'{0}' için bağımsız değişken sağlanmadı.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Bu bağlama deseniyle eşleşen bağımsız değişken sağlanmadı.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Aritmetik işlenen 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Ok işlevi 'this' parametresine sahip olamaz.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5'teki eşzamansız bir işlev veya yöntem, 'Promise' yapıcısını gerektirir. 'Promise' oluşturucusu için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Zaman uyumsuz bir işlevin veya metodun 'Promise' döndürmesi gerekir. 'Promise' için bir bildiriminiz olduğundan emin olun veya '--lib' seçeneğinize 'ES2015' ekleyin.", + "An_async_iterator_must_have_a_next_method_2519": "Zaman uyumsuz yineleyicinin bir 'next()' metodu olmalıdır.", + "An_element_access_expression_should_take_an_argument_1011": "Bir öğe erişimi ifadesi bir bağımsız değişken almalıdır.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Sabit listesi üyesi özel bir tanımlayıcıyla adlandırılamaz.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Sabit listesi üyesi, sayısal bir ada sahip olamaz.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Sabit listesi üyesinin adından sonra bir ',', '=' veya '}' gelmelidir.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Bu bilgilerin genişletilmiş bir versiyonu, kullanılabilir tüm derleyici seçeneklerini görüntüler", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Dışarı aktarma ataması, dışarı aktarılmış diğer öğelere sahip bir modülde kullanılamaz.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Ad alanında dışarı aktarma ataması kullanılamaz.", + "An_export_assignment_cannot_have_modifiers_1120": "Dışarı aktarma ataması, değiştiricilere sahip olamaz.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Dışarı aktarma ataması, bir dosyanın veya modül bildiriminin en üst düzeyinde olmalıdır.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Dışarı aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Dışarı aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", + "An_export_declaration_cannot_have_modifiers_1193": "Dışarı aktarma bildirimi, değiştiricilere sahip olamaz.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export =' bildirimi bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "'VerbatimModuleSyntax' etkinleştirildiğinde 'export default' gerçek bir değere başvurmalıdır ancak '{0}' yalnızca tür bildirimine çözümleniyor.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "'VerbatimModuleSyntax' etkinleştirildiğinde 'dışa aktarma varsayılanı' bir değere başvuruda bulunmalıdır ancak '{0}' yalnızca bir türe başvuruyor.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "'void' türünde bir ifade doğruluk bakımından test edilemiyor.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Genişletilmiş Unicode kaçış değeri, 0x0 ve 0x10FFFF dahil olmak üzere bu değerler arasında olmalıdır.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Tanımlayıcı veya anahtar sözcük, sayısal bir sabit değerden hemen sonra gelemez.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uygulama, çevresel bağlamda bildirilemez.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "İçeri aktarma diğer adı, 'export type' kullanılarak dışarı aktarılan bir bildirime başvuramaz.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "İçeri aktarma diğer adı, 'import type' kullanılarak içeri aktarılan bir bildirime başvuramaz.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Bir içe aktarma takma adı, 'verbatimModuleSyntax' etkinleştirildiğinde bir türe veya yalnızca tür bildirimine çözümlenemez.", + "An_import_alias_cannot_use_import_type_1392": "İçeri aktarma diğer adı, 'import type' kullanamaz", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "İçeri aktarma bildirimi yalnızca modülün en üst düzeyinde kullanılabilir.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "İçeri aktarma bildirimi yalnızca bir ad alanının veya modülün en üst düzeyinde kullanılabilir.", + "An_import_declaration_cannot_have_modifiers_1191": "İçeri aktarma bildirimi, değiştiricilere sahip olamaz.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Bir içe aktarma yolu yalnızca 'allowImportingTsExtensions' etkinleştirildiğinde '{0}' uzantısıyla bitebilir.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Dizin imzası bir rest parametresine sahip olamaz.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Dizin imzasının sonunda virgül olamaz.", + "An_index_signature_must_have_a_type_annotation_1021": "Dizin imzası bir tür açıklamasına sahip olmalıdır.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Dizin imzası tam olarak bir parametreye sahip olmalıdır.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Dizin imzası parametresi, bir soru işareti içeremez.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Dizin imzası parametresi, bir erişilebilirlik değiştiricisine sahip olamaz.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Dizin imzası parametresi, bir başlatıcıya sahip olamaz.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Dizin imzası parametresi, bir tür ek açıklamasına sahip olmalıdır.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Dizin imzası parametre türü sabit değer veya genel tür olamaz. Bunun yerine eşlenen nesne türü kullanabilirsiniz.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Dizin imzası parametre türü 'dize', 'sayı', 'sembol' veya şablon sabit değeri olmalıdır.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Bir örnek oluşturma ifadesinin ardından özellik erişimi gelemez.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Bir arabirim, isteğe bağlı tür bağımsız değişkenleri ile yalnızca bir tanımlayıcıyı/tam adı genişletebilir.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Arabirim, yalnızca statik olarak bilinen üyelere sahip bir nesne türünü veya nesne türlerinin bir kesişimini genişletebilir.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Bir arayüz '{0}' gibi ilkel bir türü genişletemez. Yalnızca diğer adlandırılmış nesne türlerini genişletebilir.", + "An_interface_property_cannot_have_an_initializer_1246": "Arabirim özelliği bir başlatıcıya sahip olamaz.", + "An_iterator_must_have_a_next_method_2489": "Bir yineleyici 'next()' metoduna sahip olmalıdır.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "JSX parçalarıyla @jsx pragması kullanılırken bir @jsxFrag pragması gerekir.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Nesne sabit değeri aynı ada sahip birden fazla get/set erişimcisine sahip olamaz.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Nesne sabit değerinin aynı ada sahip birden fazla özelliği olamaz.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Nesne sabit değeri, aynı ada sahip bir özellik ve erişimciye sahip olamaz.", + "An_object_member_cannot_be_declared_optional_1162": "Nesne üyesi, isteğe bağlı olarak bildirilemez.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "Bir nesnenin '[Symbol.hasInstance]' yönteminin, bir 'instanceof' ifadesinin sağ tarafında kullanılabilmesi için bir boole değeri döndürmesi gereklidir.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "İsteğe bağlı bir zincir, özel tanımlayıcı içeremez.", + "An_optional_element_cannot_follow_a_rest_element_1266": "İsteğe bağlı bir öğe, REST öğesini izleyemez.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "'this' öğesinin dış değeri bu kapsayıcı tarafından gölgelenir.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "Aşırı yükleme imzası, bir oluşturucu olarak bildirilemez.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Üs ifadesinin sol tarafında '{0}' işlecine sahip bir tek terimli ifadeye izin verilmez. İfadeyi parantez içine yazmayı düşünün.", + "Annotate_everything_with_types_from_JSDoc_95043": "Her şeye JSDoc'tan türler ile not ekle", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Ad alanındaki expando fonksiyonunun özellik türlerine not ekleyin", + "Annotate_with_type_from_JSDoc_95009": "JSDoc türü ile not ekle", + "Another_export_default_is_here_2753": "Başka bir dışarı aktarma varsayılanını burada bulabilirsiniz.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Tek bir karakterden daha fazlasıyla eşleşebilecek herhangi bir Unicode özelliği, yalnızca Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Tek bir karakterden fazlasıyla eşleşmesi muhtemel olan herhangi bir şey, negatif karakter sınıfı içinde geçersizdir.", + "Are_you_missing_a_semicolon_2734": "Noktalı virgülünüz eksik mi?", + "Argument_expression_expected_1135": "Bağımsız değişken ifadesi bekleniyor.", + "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' seçeneğinin bağımsız değişkeni {1} olmalıdır.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "Dinamik içeri aktarmanın bağımsız değişkeni yayılma öğesi olamaz.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "'{0}' türündeki bağımsız değişken '{1}' türündeki parametreye atanamaz.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "'{0}' türü bağımsız değişkeni 'exactOptionalPropertyTypes: true' ile '{1}' türündeki parametreye atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "'{0}' rest parametresinin bağımsız değişkenleri sağlanmadı.", + "Array_element_destructuring_pattern_expected_1181": "Dizi öğesi yok etme deseni bekleniyor.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Yayılma öğelerine sahip diziler --isolatedDeclarations ile çıkarsanamaz.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "Onaylamalar, çağrı hedefindeki her adın açık bir tür ek açıklaması ile bildirilmesini gerektirir.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "Onaylamalar, çağrı hedefinin bir tanımlayıcı veya tam ad olmasını gerektirir.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Özelliklerin işlevlere bildirilmeden atanması --isolatedDeclarations ile desteklenmez. Bu işleve atanan özellikler için açık bir bildirim ekleyin.", + "Asterisk_Slash_expected_1010": "'*/' bekleniyor.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "En az bir erişimcinin --isolatedDeclarations ile açık bir tür ek açıklamasına sahip olması gereklidir.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Genel kapsam genişletmeleri yalnızca dış modüllerde ya da çevresel modül bildirimlerinde doğrudan yuvalanabilir.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Genel kapsam genişletmeleri, zaten çevresel olan bir bağlamda göründükleri durumlar dışında 'declare' değiştiricisine sahip olmalıdır.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "'{0}' projesinde otomatik tür bulma etkinleştirildi. '{2}' önbellek konumu kullanılarak '{1}' modülü için ek çözümleme geçişi çalıştırılıyor.", + "BUILD_OPTIONS_6919": "DERLEME SEÇENEKLERİ", + "Backwards_Compatibility_6253": "Geriye Doğru Uyumluluk", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "Temel sınıf ifadelerinde sınıf türü parametrelerine başvuruda bulunulamaz.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "'{0}' temel oluşturucu dönüş türü, statik olarak bilinen üyelere sahip bir nesne türü veya nesne türlerinin bir kesişimi değil.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Tüm temel oluşturucuların aynı dönüş türüne sahip olması gerekir.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Mutlak olmayan modül adlarını çözümlemek için kullanılan temel dizin.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "ES2020'den düşük değerler hedeflendiğinde büyük tamsayı sabit değerleri kullanılamıyor.", + "Binary_digit_expected_1177": "İkili sayı bekleniyor.", + "Binding_element_0_implicitly_has_an_1_type_7031": "'{0}' bağlama öğesi, örtük olarak '{1}' türü içeriyor.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Bağlama öğeleri doğrudan --isolatedDeclarations ile dışa aktarılamaz.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Blok kapsamlı değişken '{0}', bildirilmeden önce kullanıldı.", + "Build_a_composite_project_in_the_working_directory_6925": "Çalışma dizininde kompozit proje oluşturun.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Güncel görünenler de dahil olmak üzere tüm projeleri derleyin.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Eskiyse, bir veya daha fazla projeyi ve bağımlılıklarını derleyin", + "Build_option_0_requires_a_value_of_type_1_5073": "'{0}' derleme seçeneği, {1} türünde bir değer gerektiriyor.", + "Building_project_0_6358": "'{0}' projesi derleniyor...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Yerleşik yineleyiciler, 'any' yerine 'undefined' 'TReturn' türü ile örnekleniyor.", + "COMMAND_LINE_FLAGS_6921": "KOMUT SATIRI BAYRAKLARI", + "COMMON_COMMANDS_6916": "ORTAK KOMUTLAR", + "COMMON_COMPILER_OPTIONS_6920": "ORTAK DERLEYİCİ SEÇENEKLERI", + "Call_decorator_expression_90028": "Dekoratör ifadesini çağır", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "'{0}' ve '{1}' çağrı imzası dönüş türleri uyumsuz.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Dönüş türü ek açıklaması bulunmayan çağrı imzası, örtük olarak 'any' dönüş türüne sahip.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Bağımsız değişken içermeyen çağrı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", + "Call_target_does_not_contain_any_signatures_2346": "Çağrı hedefi imza içermiyor.", + "Can_only_convert_logical_AND_access_chains_95142": "Yalnızca mantıksal zincirler VE erişim zincirleri dönüştürülebilir", + "Can_only_convert_named_export_95164": "Yalnızca adı belirtilen dışarı aktarma dönüştürülebilir", + "Can_only_convert_property_with_modifier_95137": "Yalnızca değiştirici içeren özellik dönüştürülebilir", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Yalnızca dize birleştirmelerini ve dize değişmezlerini dönüştürebilir", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "'{0}' bir ad alanı değil tür olduğundan '{0}.{1}' erişimi sağlanamıyor. '{0}[\"{1}\"]' değerini belirterek '{0}' içindeki '{1}' özelliğinin türünü almak mı istediniz?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "'{1}' etkinleştirildiğinde başka bir dosyadan '{0}' öğesine niteleme olmadan erişilemez. Bunun yerine '{2}' kullanın.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "'{0}' etkinleştirildiğinde ortam sabit listelerine erişilemiyor.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "'{0}' oluşturucu türüne '{1}' oluşturucu türü atanamaz.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Bir soyut oluşturucu türü, soyut olmayan bir oluşturucu türüne atanamaz.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Sınıf olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Sabit olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "İşlev olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Ad alanı olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Salt okunur bir özellik olduğundan '{0}' özelliğine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Sabit listesi olduğundan '{0}' öğesine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "İçeri aktarma olduğundan '{0}' öğesine atama yapılamıyor.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Değişken olmadığından '{0}' öğesine atama yapılamıyor.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "'{0}' özel metoduna atanamıyor. Özel metotlar yazılamaz.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "'{0}' modülü, modül olmayan bir varlığa çözümlendiğinden genişletilemiyor.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Modül olmayan bir varlığa çözümlendiğinden '{0}' modülü, değer dışarı aktarmalarıyla genişletilemiyor.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "'--module' bayrağı 'amd' veya 'system' olmadığı sürece '{0}' seçeneği kullanılarak modül derlenemez.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Bir soyut sınıfın örneği oluşturulamaz.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen kapsayan oluşturucu her zaman '{0}' gönderdiğinden yineleme temsili, değere atanamıyor.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "'{0}' dışarı aktarılamıyor. Bir modülden yalnızca yerel bildirimler dışarı aktarılabilir.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "'{0}' sınıfı genişletilemez. Sınıf oluşturucusu, özel olarak işaretlenmiş.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "'{0}' arabirimi genişletilemiyor. Bunun yerine 'implements' kullanmayı deneyin.", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Geçerli dizinde tsconfig.json dosyası bulunamıyor: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Belirtilen dizinde tsconfig.json dosyası bulunamıyor: '{0}'.", + "Cannot_find_global_type_0_2318": "'{0}' genel türü bulunamıyor.", + "Cannot_find_global_value_0_2468": "'{0}' genel değeri bulunamıyor.", + "Cannot_find_lib_definition_for_0_2726": "'{0}' için kitaplık tanımı bulunamıyor.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "'{0}' için kitaplık tanımı bulunamıyor. Şunu mu demek istediniz: '{1}'?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "'{0}' modülü bulunamıyor. Modülü '.json' uzantısıyla içeri aktarmak için '--resolveJsonModule' kullanmayı deneyin.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "'{0}' modülü bulunamıyor. 'moduleResolution' seçeneğini 'nodenext' olarak ayarlamak veya 'paths' seçeneğine diğer adlar eklemek mi istediniz?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "'{0}' modülü veya karşılık gelen tür bildirimleri bulunamıyor.", + "Cannot_find_name_0_2304": "'{0}' adı bulunamıyor.", + "Cannot_find_name_0_Did_you_mean_1_2552": "'{0}' adı bulunamıyor. Bunu mu demek istediniz: '{1}'?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "'{0}' adı bulunamıyor. 'this.{0}' örnek üyesini mi aradınız?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "'{0}' adı bulunamıyor. '{1}.{0}' statik üyesini mi aradınız?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "'{0}' adı bulunamadı. Bunu zaman uyumsuz bir işleve mi yazmak istediniz?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{1}' veya üzeri olarak değiştirmeyi deneyin.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "'{0}' adı bulunamıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? `npm i --save-dev @types/bun` deneyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "'{0}' adı bulunamıyor. Bun için tür tanımlarını yüklemeniz mi gerekiyor? 'npm i --save-dev @types/bun' komutunu deneyin ve ardından tsconfig dosyanızdaki type alanına 'bun' ekleyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "'{0}' adı bulunamıyor. Test Runner için tür tanımlarını yüklemeniz mi gerekiyor? Şunları deneyin: `npm i --save-dev @types/jest` veya `npm i --save-dev @types/mocha`. Ardından tsconfig dosyanızdaki türler alanına 'jest' veya 'mocha' ekleyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/jquery`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "'{0}' adı bulunamıyor. jQuery için tür tanımlarını yüklemeniz gerekiyor mu? Şunu deneyin: `npm i --save-dev @types/jquery`. Ardından tsconfig dosyanızdaki türler alanına 'jquery' öğesini ekleyin.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "'{0}' adı bulunamıyor. Düğüm için tür tanımlarını yüklemeniz mi gerekiyor? Şunu deneyin: `npm i --save-dev @types/node`. Ardından tsconfig dosyanızdaki türler alanına 'node' ekleyin.", + "Cannot_find_namespace_0_2503": "'{0}' ad alanı bulunamıyor.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Ad alanı '{0}' bulunamıyor. Bunu mu demek istediniz: '{1}'?", + "Cannot_find_parameter_0_1225": "'{0}' parametresi bulunamıyor.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Giriş dosyalarına ait ortak alt dizin yolu bulunamıyor.", + "Cannot_find_type_definition_file_for_0_2688": "'{0}' için tür tanımı dosyası bulunamıyor.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Tür bildirim dosyaları içeri aktarılamıyor. '{1}' yerine '{0}' dosyasını içeri aktarmanız önerilir.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Dış kapsamdaki '{0}' değişkeni, blok kapsamındaki '{1}' bildirimiyle aynı kapsamda başlatılamaz.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Muhtemelen 'null' olan bir nesne çağrılamıyor.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Muhtemelen 'null' veya 'undefined' olan bir nesne çağrılamıyor.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Muhtemelen 'undefined' olan bir nesne çağrılamıyor.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi bozma her zaman '{0}' gönderdiğinden değer yinelenemiyor.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen dizi yayılması her zaman '{0}' gönderdiğinden değer yinelenemiyor.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Değerin yineleyicisinin 'next' metodu '{1}' türünü beklemesine rağmen for-of her zaman '{0}' gönderdiğinden değer yinelenemiyor.", + "Cannot_move_statements_to_the_selected_file_95183": "İfadeler seçilen dosyaya taşınamıyor", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Dosyaya taşınamıyor, seçili dosya geçersiz", + "Cannot_read_file_0_5083": "'{0}' dosyası okunamıyor.", + "Cannot_read_file_0_Colon_1_5012": "'{0}' dosyası okunamıyor: {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Blok kapsamlı değişken '{0}', yeniden bildirilemiyor.", + "Cannot_redeclare_exported_variable_0_2323": "Dışarı aktarılan '{0}' değişkeni yeniden bildirilemiyor.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Catch yan tümcesindeki '{0}' tanımlayıcısı yeniden bildirilemiyor.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Bir tür ek açıklamasında bir işlev çağrısı başlatılamıyor.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "'--jsx' bayrağı sağlanmazsa JSX kullanılamaz.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "'{0}' etkinleştirildiğinde, yalnızca tür veya tür ad alanında 'export import' kullanılamaz.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "'--module' değeri 'none' olduğunda içeri aktarma, dışarı aktarma veya modül genişletme kullanılamaz.", + "Cannot_use_namespace_0_as_a_type_2709": "'{0}' ad alanı, tür olarak kullanılamaz.", + "Cannot_use_namespace_0_as_a_value_2708": "'{0}' ad alanı, değer olarak kullanılamaz.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "'This' ifadesi bir donatılmış sınıfın statik özellik başlatıcısında kullanılamaz.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "'{0}' dosyası, başvurulan '{1}' projesi tarafından oluşturulan '.tsbuildinfo' dosyasının üzerine yazacağından bu dosya yazılamıyor", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Birden fazla giriş dosyası tarafından üzerine yazılacağı için '{0}' dosyası yazılamıyor.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Giriş dosyasının üzerine yazacağı için '{0}' dosyası yazılamıyor.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch yan tümcesi değişkeni bir başlatıcıya sahip olamaz.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Belirtilmişse catch yan tümcesi değişken türü ek açıklaması 'any ' veya 'unknown' olmalıdır.", + "Change_0_to_1_90014": "'{0}' değerini '{1}' olarak değiştir", + "Change_all_extended_interfaces_to_implements_95038": "Tüm genişletilmiş arabirimleri 'implements' olarak değiştir", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Tüm jsdoc-style türlerini TypeScript olarak değiştir", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Tüm jsdoc-style türlerini TypeScript olarak değiştir (ve null yapılabilir türlere '| undefined' ekle)", + "Change_extends_to_implements_90003": "'extends' ifadesini 'implements' olarak değiştirin", + "Change_spelling_to_0_90022": "Yazımı '{0}' olarak değiştir", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Bildirilen ancak oluşturucuda ayarlanmamış sınıf özelliklerini denetleyin.", + "Check_side_effect_imports_6806": "Yan etki içeri aktarmalarını denetleyin.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "'bind', 'call' ve 'apply' yöntemlerinin bağımsız değişkenlerinin özgün işlevle eşleşip eşleşmediğini denetle.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "'{0}' ön ekinin '{1}' - '{2}' için eşleşen en uzun ön ek olup olmadığı denetleniyor.", + "Circular_definition_of_import_alias_0_2303": "'{0}' içeri aktarma diğer adının döngüsel tanımı.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Yapılandırma çözümlenirken döngüsellik algılandı: {0}", + "Circularity_originates_in_type_at_this_location_2751": "Döngüsellik bu konumdaki türden kaynaklanıyor.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "'{0}' sınıfı, '{1}' örnek üyesi erişimcisini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi işlevi olarak tanımlar.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "'{0}' sınıfı, '{1}' örnek üyesi işlevini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi erişimcisi olarak tanımlar.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "'{0}' sınıfı, '{1}' örnek üyesi özelliğini tanımlar; ancak genişletilmiş '{2}' sınıfı, bunu bir örnek üyesi işlevi olarak tanımlar.", + "Class_0_incorrectly_extends_base_class_1_2415": "'{0}' sınıfı, '{1}' temel sınıfını yanlış genişletiyor.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "'{0}' sınıfı hatalı olarak '{1}' sınıfını uyguluyor. '{1}' sınıfını genişletip üyelerini bir alt sınıf olarak devralmak mı istiyordunuz?", + "Class_0_incorrectly_implements_interface_1_2420": "'{0}' sınıfı, '{1}' arabirimini yanlış uyguluyor.", + "Class_0_used_before_its_declaration_2449": "'{0}' sınıfı, bildiriminden önce kullanıldı.", + "Class_constructor_may_not_be_a_generator_1368": "Sınıf oluşturucu, program yönergeleri üreten bir oluşturucu olamaz.", + "Class_constructor_may_not_be_an_accessor_1341": "Sınıf oluşturucu, bir erişimci olamaz.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "Sınıf bildirimi, '{0}' için aşırı yükleme listesi uygulayamaz.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "Sınıf bildirimlerinde birden fazla '@augments' veya '@extends' etiketi olamaz.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Sınıf dekoratörleri statik özel tanımlayıcıyla kullanılamaz. Deneysel dekoratörü kaldırmayı düşünün.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "Ana sınıf tarafından tanımlanan '{0}' sınıf alanına, alt sınıftan super aracılığıyla erişilemez.", + "Class_name_cannot_be_0_2414": "Sınıf adı '{0}' olamaz.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "{0} modülüyle ES5 ve üzeri hedeflendiğinde sınıf adı 'Object' olamaz.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "'{0}' statik sınıf tarafı, '{1}' statik temel sınıf tarafını yanlış genişletiyor.", + "Classes_can_only_extend_a_single_class_1174": "Sınıflar yalnızca bir sınıfı genişletebilir.", + "Classes_may_not_have_a_field_named_constructor_18006": "Sınıflarda 'constructor' adlı bir alan olmayabilir.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "Sınıfta bulunan kod, bu '{0}' kullanımına izin vermeyen JavaScript'in katı modunda değerlendirilir. Daha fazla bilgi için bkz. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Komut Satırı Seçenekleri", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Yapılandırma dosyasının yolu veya 'tsconfig.json' dosyasını içeren klasörün yolu belirtilen projeyi derleyin.", + "Compiler_Diagnostics_6251": "Derleyici Tanılaması", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "'{0}' derleyici seçeneğine boş bir dize verilemez.", + "Compiler_option_0_expects_an_argument_6044": "'{0}' derleyici seçeneği, bağımsız değişken bekliyor.", + "Compiler_option_0_may_not_be_used_with_build_5094": "'--{0}' derleyici seçeneği, '--build' ile kullanılamaz.", + "Compiler_option_0_may_only_be_used_with_build_5093": "'--{0}' derleyici seçeneği, yalnızca '--build' ile kullanılabilir.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "Derleyici seçeneği '{0}' değeri '{1}' kararsız. Bu hatayı sessize almak için gecelik TypeScript kullanın. 'npm install -D typescript@next' ile güncelleştirmeyi deneyin.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "'{0}' derleyici seçeneği, {1} türünde bir değer gerektiriyor.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "Özel tanımlayıcı alt düzeyi gösterilirken derleyici '{0}' adını ayırır.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Belirtilen yolda bulunan TypeScript projesini derler.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Geçerli projeyi derler (çalışma dizinindeki tsconfig.js).", + "Compiles_the_current_project_with_additional_settings_6929": "Geçerli projeyi ek ayarlarla derler.", + "Completeness_6257": "Tamlık", + "Composite_projects_may_not_disable_declaration_emit_6304": "Bileşik projeler, bildirim gösterimini devre dışı bırakamaz.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Bileşik projeler artımlı derlemeyi devre dışı bırakamayabilir.", + "Computed_from_the_list_of_input_files_6911": "Giriş dosyaları listesinden hesaplanır", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "Hesaplanan özellikler sayı veya dize değişmezleri, değişkenler veya --isolatedDeclarations içeren noktalı ifadeler olmalıdır.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Sabit listelerinde hesaplanan özellik adına izin verilmiyor.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Sınıf veya nesne değişmezlerindeki hesaplanan özellik adları --isolatedDeclarations ile çıkarsanamaz.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Dize değeri içeren üyelerin bulunduğu bir sabit listesinde hesaplanan değerlere izin verilmez.", + "Concatenate_and_emit_output_to_single_file_6001": "Çıktıyı tek dosyaya birleştirin ve yayın.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "İçe aktarmaları çözümlerken çözümleyiciye özgü varsayılanlara ek olarak ayarlanacak koşullar.", + "Conflicts_are_in_this_file_6201": "Çakışmalar bu dosyada bulunuyor.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Bu sınıfa 'declare' değiştiricisi eklemeyi düşünün.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "'{0}' ve '{1}' yapı imzası dönüş türleri uyumlu değil.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Dönüş türü ek açıklaması bulunmayan yapı imzası, örtük olarak 'any' dönüş türüne sahip.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Bağımsız değişken içermeyen yapı imzaları uyumsuz '{0}' ve '{1}' dönüş türlerine sahip.", + "Constructor_implementation_is_missing_2390": "Oluşturucu uygulaması yok.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "'{0}' sınıfının oluşturucusu özel olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "'{0}' sınıfının oluşturucusu korumalı olduğundan, oluşturucuya yalnızca sınıf bildiriminden erişilebilir.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "Oluşturucu türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "Oluşturucu türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Türetilmiş sınıflara ilişkin oluşturucular bir 'super' çağrısı içermelidir.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "Kapsayıcı dosya belirtilmedi ve kök dizini belirlenemiyor; 'node_modules' klasöründe arama atlanıyor.", + "Containing_function_is_not_an_arrow_function_95128": "İçeren işlev bir ok işlevi değil", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Modül biçimli JS dosyalarını algılamak için kullanılan yöntemi denetle.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "Türler birbiriyle yeterince örtüşmediğinden '{0}' türünün '{1}' türüne dönüştürülmesi bir hata olabilir. Bu bilerek yapıldıysa, ifadeyi önce 'unknown' değerine dönüştürün.", + "Convert_0_to_1_in_0_95003": "'{0}' öğesini '{0} içinde {1}' öğesine dönüştür", + "Convert_0_to_mapped_object_type_95055": "'{0}' öğesini eşlenen nesne türüne dönüştür", + "Convert_all_const_to_let_95102": "Tüm 'const' ifadelerini 'let' ifadesine dönüştürün", + "Convert_all_constructor_functions_to_classes_95045": "Tüm oluşturucu işlevleri sınıflara dönüştür", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Tüm geçersiz karakterleri HTML varlık koduna dönüştür", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Yeniden dışarı aktarılan tüm türleri yalnızca tür dışarı aktarmalarına dönüştürün", + "Convert_all_require_to_import_95048": "Tüm 'require' öğelerini 'import' olarak dönüştür", + "Convert_all_to_async_functions_95066": "Tümünü asenkron işlevlere dönüştürün", + "Convert_all_to_bigint_numeric_literals_95092": "Tümünü büyük tamsayı sayısal sabit değerlerine dönüştürün", + "Convert_all_to_default_imports_95035": "Tümünü varsayılan içeri aktarmalara dönüştür", + "Convert_all_type_literals_to_mapped_type_95021": "Tüm tür sabit değerlerini eşlenmiş türe dönüştür", + "Convert_all_typedef_to_TypeScript_types_95177": "Tüm typedef'leri TypeScript türüne dönüştür.", + "Convert_arrow_function_or_function_expression_95122": "Ok işlevini veya işlev ifadesini dönüştür", + "Convert_const_to_let_95093": "'const' ifadesini 'let' ifadesine dönüştürün", + "Convert_default_export_to_named_export_95061": "Varsayılan dışarı aktarmayı adlandırılmış dışarı aktarmaya dönüştürün", + "Convert_function_declaration_0_to_arrow_function_95106": "'{0}' işlev bildirimini ok işlevine dönüştür", + "Convert_function_expression_0_to_arrow_function_95105": "'{0}' işlev ifadesini ok işlevine dönüştür", + "Convert_function_to_an_ES2015_class_95001": "İşlevi bir ES2015 sınıfına dönüştür", + "Convert_invalid_character_to_its_html_entity_code_95100": "Geçersiz karakteri, karakterin HTML varlık koduna dönüştürün", + "Convert_named_export_to_default_export_95062": "Adlandırılmış dışarı aktarmayı varsayılan dışarı aktarmaya dönüştürün", + "Convert_named_imports_to_default_import_95170": "Adlandırılmış içeri aktarmaları varsayılan içeri aktarmaya dönüştür", + "Convert_named_imports_to_namespace_import_95057": "Adlandırılmış içeri aktarmaları ad alanı içeri aktarmasına dönüştür", + "Convert_namespace_import_to_named_imports_95056": "Ad alanı içeri aktarmasını adlandırılmış içeri aktarmalara dönüştür", + "Convert_overload_list_to_single_signature_95118": "Aşırı yükleme listesini tek imzaya dönüştür", + "Convert_parameters_to_destructured_object_95075": "Parametreleri, bozulan nesneye dönüştürün", + "Convert_require_to_import_95047": "'require' öğesini 'import' olarak dönüştür", + "Convert_to_ES_module_95017": "ES modülüne dönüştür", + "Convert_to_a_bigint_numeric_literal_95091": "Büyük tamsayı sayısal sabit değerine dönüştürün", + "Convert_to_anonymous_function_95123": "Anonim işleve dönüştür", + "Convert_to_arrow_function_95125": "Ok işlevine dönüştür", + "Convert_to_async_function_95065": "Asenkron işleve dönüştürün", + "Convert_to_default_import_95013": "Varsayılan içeri aktarmaya dönüştür", + "Convert_to_named_function_95124": "Adlandırılmış işleve dönüştür", + "Convert_to_optional_chain_expression_95139": "İsteğe bağlı zincir ifadesine dönüştür", + "Convert_to_template_string_95096": "Şablon dizesine dönüştürün", + "Convert_to_type_only_export_1364": "Yalnızca tür dışarı aktarmaya dönüştürün", + "Convert_typedef_to_TypeScript_type_95176": "typedef'i TypeScript türüne dönüştürün.", + "Corrupted_locale_file_0_6051": "{0} yerel ayar dosyası bozuk.", + "Could_not_convert_to_anonymous_function_95153": "Anonim işleve dönüştürülemedi", + "Could_not_convert_to_arrow_function_95151": "Arrow işlevine dönüştürülemedi", + "Could_not_convert_to_named_function_95152": "Adlandırılmış işleve dönüştürülemedi", + "Could_not_determine_function_return_type_95150": "İşlev dönüş türü belirlenemedi", + "Could_not_find_a_containing_arrow_function_95127": "İçeren bir ok işlevi bulunamadı", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "'{0}' modülü için bildirim dosyası bulunamadı. '{1}' örtülü olarak 'any' türüne sahip.", + "Could_not_find_convertible_access_expression_95140": "Dönüştürülebilir erişim ifadesi bulunamadı", + "Could_not_find_export_statement_95129": "Dışarı aktarma ifadesi bulunamadı", + "Could_not_find_import_clause_95131": "İçeri aktarma yan tümcesi bulunamadı", + "Could_not_find_matching_access_expressions_95141": "Eşleşen erişim ifadeleri bulunamadı", + "Could_not_find_name_0_Did_you_mean_1_2570": "'{0}' adı bulunamıyor. Şunu mu demek istediniz: '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "Ad alanı içeri aktarması veya adlandırılmış içeri aktarmalar bulunamadı", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Erişimcinin oluşturulacağı özellik bulunamadı", + "Could_not_find_variable_to_inline_95185": "Satır içi değişken bulunamadı.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Uzantılara sahip '{0}' yolu çözümlenemedi: {1}.", + "Could_not_write_file_0_Colon_1_5033": "'{0}' dosyası yazılamadı: {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Yayılan JavaScript dosyaları için kaynak eşleme dosyaları oluşturun.", + "Create_sourcemaps_for_d_ts_files_6614": "d.ts dosyaları için kaynak eşlemeleri oluşturun.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Çalışma dizininde önerilen ayarlarla ilgili bir tsconfig.js oluşturur.", + "DIRECTORY_6038": "DİZİN", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Bir karakter sınıfında ondalık kaçış dizilerine ve geri referanslara izin verilmez.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Başında sıfır bulunan ondalık sayılara izin verilmez.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "Bildirim başka bir dosyadaki bildirimi genişlettiğinden serileştirilemez.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "Bu dosyaya ilişkin bildirim, bu içe aktarmanın genişletmeler için korunmasını gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "Bu dosya için bildirim gösterme, '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "Bu dosya için bildirim gösterme, '{1}' modülündeki '{0}' özel adını kullanmayı gerektiriyor. Açık tür ek açıklaması, bildirim gösterme engelini kaldırabilir.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "Bu parametre için bildirim gösterme, türüne örtülü olarak tanımsız eklenmesini gerektirir. Bu, --isolatedDeclarations ile desteklenmez.", + "Declaration_expected_1146": "Bildirim bekleniyor.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "Bildirim adı, yerleşik genel tanımlayıcı '{0}' ile çakışıyor.", + "Declaration_or_statement_expected_1128": "Bildirim veya deyim bekleniyor.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Bildirim veya deyim bekleniyor. Bu '=' bir ifade bloğunun ardından geldiğinden yapı çözümlü bir atama yazmayı düşünüyorsanız, tüm atamayı parantez içine almanız gerekebilir.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "Kesin atama onaylamaları olan bildirimlerde tür ek açıklamaları da olmalıdır.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "Başlatıcılara sahip bildirimlerde kesin atama onaylamaları olamaz.", + "Declare_a_private_field_named_0_90053": "'{0}' adlı bir özel alan bildirin.", + "Declare_method_0_90023": "'{0}' metodunu bildir", + "Declare_private_method_0_90038": "'{0}' özel metodunu bildirin.", + "Declare_private_property_0_90035": "Özel '{0}' özelliğini bildir", + "Declare_property_0_90016": "'{0}' özelliğini bildir", + "Declare_static_method_0_90024": "'{0}' statik metodunu bildir", + "Declare_static_property_0_90027": "'{0}' statik özelliğini bildir", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "'{0}' dekoratör işlevi dönüş türü, '{1}' türüne atanamıyor.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "Dekoratör işlevi dönüş türü '{0}', ancak 'void' veya 'any' olması bekleniyor.", + "Decorator_used_before_export_here_1486": "Dekoratör burada 'export' öğesinden önce kullanıldı.", + "Decorators_are_not_valid_here_1206": "Buradaki dekoratörler geçerli değil.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Dekoratörler aynı ada sahip birden fazla get/set erişimcisine uygulanamaz.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Dekoratörler 'export' öncesinde de görünüyorlarsa, 'export' veya 'default export' sonrasında görünmeyebilirler.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Dekoratörler, özellik bildirimlerinin adından ve tüm anahtar sözcüklerinden önce gelmelidir.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Catch yan tümcesi değişkenlerini varsayılan olarak 'any' yerine 'unknown' olarak kabul et.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "Modülün varsayılan dışarı aktarımı '{0}' özel adına sahip veya bu adı kullanıyor.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "Varsayılan dışa aktarımlar --isolatedDeclarations ile çıkarsanamaz.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "Ertelenmiş içeri aktarmalarda varsayılan içeri aktarmalara izin verilmez.", + "Default_library_1424": "Varsayılan kitaplık", + "Default_library_for_target_0_1425": "'{0}' hedefi için varsayılan kitaplık", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Ertelenmiş içeri aktarmalar yalnızca '--module' bayrağı 'esnext' veya 'preserve' olarak ayarlandığında desteklenir.", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "Şu tanımlayıcıların tanımları başka bir dosyadaki tanımlarla çakışıyor: {0}", + "Delete_all_unused_declarations_95024": "Kullanılmayan tüm bildirimleri sil", + "Delete_all_unused_imports_95147": "Kullanılmayan tüm içeri aktarmaları sil", + "Delete_all_unused_param_tags_95172": "Kullanılmayan tüm “@param” etiketlerini silin", + "Delete_the_outputs_of_all_projects_6365": "Tüm projelerin çıktılarını sil.", + "Delete_unused_param_tag_0_95171": "Kullanılmayan “{0}” “@param” etiket adını silin", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Kullanım Dışı] Bunun yerine '--jsxFactory' kullanın. 'react' JSX gösterimi hedefleniyorsa, createElement için çağrılan nesneyi belirtin", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Kullanım Dışı] Bunun yerine '--outFile' kullanın. Çıkışı tek bir dosya olarak birleştirin ve gösterin", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Kullanım Dışı] Bunun yerine '--skipLibCheck' kullanın. Varsayılan kitaplık bildirim dosyalarının tür denetimini atlayın.", + "Deprecated_setting_Use_outFile_instead_6677": "Ayar kullanım dışı bırakıldı. Bunun yerine 'outFile' kullanın.", + "Did_you_forget_to_use_await_2773": "'await' kullanmayı mı unuttunuz?", + "Did_you_mean_0_1369": "Şunu mu demek istediniz: '{0}'?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "'{0}' değerinin 'new (...args: any[]) => {1}' türüne kısıtlanmasını mı istediniz?", + "Did_you_mean_to_call_this_expression_6212": "Bu ifadeyi mi çağırmak istediniz?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Bu işlevi 'async' olarak işaretlemek mi istediniz?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "':' kullanmak mı istediniz? İçeren nesne sabit değeri, yok etme deseninin parçası olduğunda özellik adının ardından yalnızca '=' gelebilir.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Bu ifadeyle 'new' kullanmak mı istediniz?", + "Digit_expected_1124": "Rakam bekleniyor.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "'{0}' dizini yok, içindeki tüm aramalar atlanıyor.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "'{0}' dizini bir package.json kapsamı içermiyor. İçeri aktarmalar çözümlenmeyecek.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Yayılan JavaScript dosyalarında ‘use strict’ yönergelerini eklemeyi devre dışı bırakın.", + "Disable_checking_for_this_file_90018": "Bu dosya için denetimi devre dışı bırak", + "Disable_emitting_comments_6688": "Yorumların yayılmasını devre dışı bırakın.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "JSDoc açıklamalarında '@internal' olan üretme bildirimlerini devre dışı bırak.", + "Disable_emitting_files_from_a_compilation_6660": "Derlemeden dosya yayımlamayı devre dışı bırakın.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Herhangi bir tür denetimi hatası bildirildiyse, dosya yaymayı devre dışı bırakın.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Oluşturulan kodda 'const enum' bildirimlerinin silinmesini devre dışı bırak.", + "Disable_error_reporting_for_unreachable_code_6603": "Ulaşılamaz kod için hata raporlamayı devre dışı bırakın.", + "Disable_error_reporting_for_unused_labels_6604": "Kullanılmayan etiketler için hata raporlamayı devre dışı bırakın.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Tam tür denetimini devre dışı bırakın (yalnızca kritik ayrıştırma ve yayma hataları rapor edilecektir).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Derlenen çıktıda '__extends' gibi özel yardımcı işlevler oluşturmayı devre dışı bırak.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Varsayılan lib.d.ts dahil olmak üzere kitaplık dosyalarının dahil edilmesini devre dışı bırakın.", + "Disable_loading_referenced_projects_6235": "Başvurulan projelerin yüklenmesini devre dışı bırakın.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Bileşik projelere başvurulurken bildirim dosyaları yerine kaynak dosyaların tercih edilmesini devre dışı bırak.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Nesne sabit değerleri oluşturulurken fazlalık özellik hatalarının raporlanmasını devre dışı bırakın.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Simgesel bağlantıları gerçek yollarına çözümlemeyi devre dışı bırakın. Bu, düğümdeki aynı bayrakla bağıntılıdır.", + "Disable_size_limitations_on_JavaScript_projects_6162": "JavaScript projelerinde boyut sınırlamalarını devre dışı bırakın.", + "Disable_solution_searching_for_this_project_6224": "Bu proje için çözüm aramayı devre dışı bırakın.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "İşlev türlerinde genel imzalar için katı denetimi devre dışı bırakın.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "JavaScript projeleri için tür alımını devre dışı bırak", + "Disable_truncating_types_in_error_messages_6663": "Hata iletilerinde türlerin kesilmesini devre dışı bırakın.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Başvurulan projelerdeki bildirim dosyaları yerine kaynak dosyalarının kullanımını devre dışı bırakın.", + "Disable_wiping_the_console_in_watch_mode_6684": "İzleme modunda konsolu temizlemeyi devre dışı bırak.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Bir projedeki dosya adlarına bakarak tür alımı çıkarımı devre dışı bırakır.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "'import', 'require' veya '' ifadelerinin TypeScript'in projeye eklemesi gereken dosya sayısını artırmasına izin verme.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Aynı dosyaya yönelik tutarsız büyük/küçük harflere sahip başvurulara izin verme.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Derlenen dosya listesine üç eğik çizgi başvuruları veya içeri aktarılan modüller eklemeyin.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "ECMAScript'in parçası olmayan çalışma zamanı yapılarına izin verme.", + "Do_not_emit_comments_to_output_6009": "Çıktıya ait açıklamaları gösterme.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "'@internal' ek açıklamasına sahip kod için bildirimleri gösterme.", + "Do_not_emit_outputs_6010": "Çıktıları gösterme.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Herhangi bir hata bildirildiyse çıkışları gösterme.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Modül çıkışında 'use strict' yönergeleri gösterme.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Oluşturulan kodda const sabit listesi bildirimlerini silme.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Derlenen çıkışta '__extends' gibi özel yardımcı işlevler oluşturmayın.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Varsayılan kitaplık dosyasını (lib.d.ts) eklemeyin.", + "Do_not_report_errors_on_unreachable_code_6077": "Erişilemeyen kod ile ilgili hataları bildirme.", + "Do_not_report_errors_on_unused_labels_6074": "Kullanılmayan etiketler ile ilgili hataları bildirme.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Simgesel bağlantıların gerçek yolunu çözümlemeyin.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "'module' ayarına göre çıktı dosyasının formatında yazılmalarını sağlayarak, yalnızca tür olarak işaretlenmemiş hiçbir bir içe aktarma veya dışa aktarma işlemini dönüştürmeyin veya silmeyin.", + "Do_not_truncate_error_messages_6165": "Hata iletilerini kesmeyin.", + "Duplicate_function_implementation_2393": "Yinelenen işlev uygulaması.", + "Duplicate_identifier_0_2300": "Yinelenen tanımlayıcı: '{0}'.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Yinelenen tanımlayıcı: '{0}'. Derleyici, bir modülün üst düzey kapsamındaki '{1}' adını ayırır.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "'{0}' tanımlayıcısı yineleniyor. Derleyici, zaman uyumsuz işlevler içeren bir modülün en üst düzey kapsamında '{1}' adını ayırıyor.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "'{0}' tanımlayıcısı yineleniyor. Derleyici, statik başlatıcılarda 'super' başvurularını yayımlarken '{1}' adını ayırır.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Yinelenen tanımlayıcı: '{0}'. Derleyici, zaman uyumsuz işlevleri desteklemek için '{1}' bildirimini kullanır.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Yinelenen tanımlayıcı: '{0}'. Statik öğeler ve örnek öğeleri aynı özel adı paylaşamaz.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Yinelenen tanımlayıcı: 'arguments'. Derleyici, rest parametrelerini başlatmak için 'arguments' tanımlayıcısını kullanır.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Yinelenen '_newTarget' tanımlayıcısı. Derleyicide, '_newTarget' değişken bildirimi 'new.target' meta-özellik başvurusu yakalamak için kullanılıyor.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Yinelenen tanımlayıcı: '_this'. Derleyici, 'this' başvurusunu yakalamak için '_this' değişken bildirimini kullanır.", + "Duplicate_index_signature_for_type_0_2374": "'{0}' türü için yinelenen dizin imzası var.", + "Duplicate_label_0_1114": "'{0}' etiketi yineleniyor.", + "Duplicate_property_0_2718": "'{0}' özelliğini yineleyin.", + "Duplicate_regular_expression_flag_1500": "Yinelenen normal ifade bayrağı.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "Dinamik içeri aktarmanın tanımlayıcısı 'string' türünde olmalıdır, ancak buradaki tür: '{0}'.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Dinamik içeri aktarma yalnızca \"--module\" bayrağı \"es2020\", \"es2022\", \"esnext\", \"commonjs\", \"amd\", \"system\", \"umd\", \"node16\", \"node18\", \"node20\" veya \"nodenext\" olarak ayarlandığında desteklenir.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "Dinamik içe aktarmalar yalnızca bir modül belirticiyi ve isteğe bağlı bir dizi özniteliği bağımsız değişken olarak kabul edebilir", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "Dinamik içeri aktarmalar yalnızca \"--module\" seçeneği; \"esnext\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ikinci bir bağımsız değişkeni destekler.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "'Module', 'preserve' olarak ayarlandığında CommonJS modülünde ESM sözdizimine izin verilmez.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "'verbatimModuleSyntax' etkinleştirildiğinde CommonJS modülünde ESM söz dizimi kullanılamaz.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' için yapılan her bildirim, değerinde farklılık gösteriyor, '{2}' beklenirken '{3}' verildi.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "'{0}' birleşim türünün her bir üyesi yapı imzalarına sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "'{0}' birleşim türünün her bir üyesi imzalara sahip ancak bu imzaların hiçbiri birbiriyle uyumlu değil.", + "Editor_Support_6249": "Düzenleyici Desteği", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "'{0}' türündeki ifade '{1}' türünün dizinini oluşturmak için kullanılamadığından öğe, örtük olarak 'any' türüne sahip.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "Dizin ifadesi 'number' türünde olmadığından, öğe örtük olarak 'any' türü içeriyor.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "'{0}' türünün dizin imzası olmadığından öğe dolaylı olarak 'any' türüne sahip.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "'{0}' türünün dizin imzası olmadığından öğe, örtük olarak 'any' türüne sahip. '{1}' türünü mü çağırmak istediniz?", + "Emit_6246": "Yayımla", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "ECMAScript-standard-compliant sınıf alanlarını yayın.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Çıkış dosyalarının başında bir UTF-8 Bayt Sırası İşareti (BOM) gösterin.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Ayrı bir dosya oluşturmak yerine, kaynak eşlemeleri içeren tek bir dosya gösterin.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Hata ayıklama için derleyici çalıştırmasının bir v8 CPU profilini yayın.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "CommonJS modüllerini içeri aktarma desteğini kolaylaştırmak için ek JavaScript üret. Bu, tür uyumluluğu için 'allowSyntheticDefaultImports' özelliğini etkinleştirir.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Sınıf alanlarını Set yerine Define ile gösterin.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Kaynak dosyalarındaki donatılmış bildirimler için design-type meta verilerini yayın.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Yineleme için daha uyumlu, ancak ayrıntılı ve daha düşük performanslı JavaScript yayın.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Kaynağı, kaynak eşlemeleri ile birlikte tek bir dosya içinde gösterin; '--inlineSourceMap' veya '--sourceMap' öğesinin ayarlanmasını gerektirir.", + "Enable_all_strict_type_checking_options_6180": "Tüm katı tür denetleme seçeneklerini etkinleştirin.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Derleyici hatalarının okunmasını kolaylaştırmak için TypeScript çıktısında renk ve biçimlendirmeyi etkinleştirin.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Bir TypeScript projesinin proje başvurularıyla birlikte kullanılmasına olanak sağlayan kısıtlamaları etkinleştirin.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Açıkça bir işlev döndürmeyen kod yolları için hata raporlamayı etkinleştirin.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Örtük olarak 'any' türüne sahip ifade ve bildirimlerde hata raporlamayı etkinleştir.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Switch deyimlerinde sonraki ifadelere geçiş ile ilgili hataların raporlanmasını etkinleştirin.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Tür denetimli JavaScript dosyalarında hata raporlamayı etkinleştirin.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Yerel değişkenler okunmadığında hata raporlamayı etkinleştir.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "'this' için 'any' türü verildiğinde hata raporlamayı etkinleştir.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Eski deneysel dekoratörler için deneysel desteği etkinleştirin.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Bir bildirim dosyasının mevcut olması koşuluyla, herhangi bir uzantıya sahip dosyaların içe aktarılmasını etkinleştirin.", + "Enable_importing_json_files_6689": ".json dosyalarını içeri aktarmayı etkinleştirin.", + "Enable_lib_replacement_6808": "Kitaplık değişimini etkinleştir.", + "Enable_project_compilation_6302": "Proje derlemeyi etkinleştir", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "İşlevlerde katı 'bind', 'call' ve 'apply' metotlarını etkinleştirin.", + "Enable_strict_checking_of_function_types_6186": "İşlev türleri üzerinde katı denetimi etkinleştirin.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Sınıflarda sıkı özellik başlatma denetimini etkinleştirin.", + "Enable_strict_null_checks_6113": "Katı null denetimlerini etkinleştir.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Yapılandırma dosyanızda 'experimentalDecorators' seçeneğini etkinleştirin", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Yapılandırma dosyanızda '--jsx' bayrağını etkinleştirin", + "Enable_tracing_of_the_name_resolution_process_6085": "Ad çözümleme işlemini izlemeyi etkinleştir.", + "Enable_verbose_logging_6713": "Ayrıntılı günlüğe yazmayı etkinleştir.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Tüm içeri aktarma işlemleri için ad alanı nesnelerinin oluşturulması aracılığıyla CommonJS ile ES Modülleri arasında yayımlama birlikte çalışabilirliğine imkan tanır. Şu anlama gelir: 'allowSyntheticDefaultImports'.", + "Enables_experimental_support_for_ES7_decorators_6065": "ES7 dekoratörleri için deneysel desteği etkinleştirir.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Dekoratörlere tür meta verisi gönderme için deneysel desteği etkinleştirir.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Dizini oluşturulmuş bir tür kullanılarak bildirilen anahtarlar için dizini oluşturulmuş erişimciler kullanılmasını zorunlu kılar.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Türetilmiş sınıflarda geçersiz kılan üyelerin bir geçersiz kılma değiştiricisiyle işaretlendiğinden emin olun.", + "Ensure_that_casing_is_correct_in_imports_6637": "İçeri aktarmalarda büyük harfe çevirmenin doğru olduğundan emin olun.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Her dosyanın diğer içeri aktarmalara bağlı olmadan güvenli bir şekilde kaynaktan kaynağa derlenebildiğinden emin olun.", + "Ensure_use_strict_is_always_emitted_6605": "'use strict' öğesinin her zaman yayıldığından emin olun.", + "Entering_conditional_exports_6413": "Koşullu dışarı aktarmalara giriliyor.", + "Entry_point_for_implicit_type_library_0_1420": "'{0}' örtük tür kitaplığı için giriş noktası", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "'{1}' paket kimliğine sahip '{0}' örtük tür kitaplığı için giriş noktası", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "'{1}' paket kimliğine sahip compilerOptions içinde belirtilen '{0}' tür kitaplığının giriş noktası", + "Enum_0_used_before_its_declaration_2450": "'{0}' sabit listesi, bildiriminden önce kullanıldı.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "Sabit listesi bildirimleri yalnızca ad alanı veya diğer sabit listesi bildirimleri ile birleştirilebilir.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Sabit listesi bildirimlerinin tümü const veya const olmayan değerler olmalıdır.", + "Enum_member_expected_1132": "Sabit listesi üyesi bekleniyor.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "Değişmez sayısal bir üyeyi takip eden numaralandırma üyesi, 'isolatedModules' etkinleştirildiğinde bir başlatıcıya sahip olmalıdır.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Sabit listesi üyesi başlatıcıları, --isolatedDeclarations ile dış simgelere başvurular olmadan hesaplanabilir olmalıdır.", + "Enum_member_must_have_initializer_1061": "Sabit listesi üyesi bir başlatıcıya sahip olmalıdır.", + "Enum_name_cannot_be_0_2431": "Sabit listesi adı '{0}' olamaz.", + "Environment_Settings_6285": "Ortam Ayarları", + "Errors_Files_6041": "Hata Dosyaları", + "Escape_sequence_0_is_not_allowed_1488": "'{0}' kaçış dizisine izin verilmiyor.", + "Examples_Colon_0_6026": "Örnekler: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "'{0}' ve '{1}' türlerini karşılaştırırken aşırı karmaşıklık.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Aşırı yığın derinliği, '{0}' ve '{1}' türlerini karşılaştırıyor.", + "Exiting_conditional_exports_6416": "Koşullu dışarı aktarmalardan çıkılıyor.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "{0}-{1} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", + "Expected_0_arguments_but_got_1_2554": "{0} bağımsız değişken bekleniyordu ancak {1} alındı.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} bağımsız değişken bekleniyordu ancak {1} bağımsız değişken alındı. Tür bağımsız değişkeninizdeki 'void' operatörünü 'Promise'e eklemeyi mi unuttunuz?", + "Expected_0_type_arguments_but_got_1_2558": "{0} tür bağımsız değişkeni bekleniyordu ancak {1} alındı.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "{0} tür bağımsız değişkeni bekleniyordu; bunları bir '@extends' etiketiyle sağlayın.", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "1 bağımsız değişken bekleniyordu ancak 0 bağımsız değişken var. Bağımsız değişkenler olmadan çağrılabilen bir 'resolve' oluşturmak için 'new Promise()' çağrısında bir JSDoc ipucu bulunması gerekir.", + "Expected_a_Unicode_property_name_1523": "Unicode özellik adı bekleniyordu.", + "Expected_a_Unicode_property_name_or_value_1527": "Unicode özellik adı veya değeri bekleniyordu.", + "Expected_a_Unicode_property_value_1525": "Bir Unicode özellik değeri bekleniyordu.", + "Expected_a_capturing_group_name_1514": "Yakalama grubu adı bekleniyordu.", + "Expected_a_class_set_operand_1520": "Bir sınıf kümesi işleneni bekleniyordu.", + "Expected_at_least_0_arguments_but_got_1_2555": "En az {0} bağımsız değişken bekleniyordu ancak {1} alındı.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' için ilgili JSX kapanış etiketi bekleniyor.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX parçasına karşılık gelen kapanış etiketi bekleniyordu.", + "Expected_for_property_initializer_1442": "Özellik başlatıcısı için '=' bekleniyor.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "'package.json' dosyasındaki '{0}' alanının '{1}' türünde olması bekleniyordu ancak '{2}' alındı.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Açık olarak belirtilen modül çözümleme türü: '{0}'.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' seçeneği 'es2016' veya üzeri olarak belirlenmedikçe 'bigint' değerlerinde üs olarak gösterme yapılamaz.", + "Export_0_from_module_1_90059": "'{1}' modülünden '{0}' öğesini dışarı aktar", + "Export_all_referenced_locals_90060": "Başvurulan tüm yerel ayarları dışarı aktar", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "ECMAScript modülleri hedeflenirken dışarı aktarma ataması kullanılamaz. Bunun yerine 'export default' veya başka bir modül biçimi kullanmayı deneyin.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "'--module' bayrağı 'system' ise dışarı aktarma ataması desteklenmez.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Dışarı aktarma bildirimi, dışarı aktarılan '{0}' bildirimiyle çakışıyor.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "Ad alanında dışarı aktarma bildirimlerine izin verilmez.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "'{0}' dışarı aktarma tanımlayıcısı, '{1}' yolundaki package.json kapsamında yok.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "Dışarı aktarılan '{0}' tür diğer adı, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "Dışarı aktarılan türün diğer adı olan '{0}' ifadesi, {2} modülündeki '{1}' özel adına sahip veya bu özel adı kullanıyor.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "Dışarı aktarılan '{0}' değişkeni, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "Dışarı aktarılan '{0}' değişkeni, '{2}' özel modüldeki '{1}' adına sahip veya bu adı kullanıyor.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "Dışarı aktarılan '{0}' değişkeni, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Modül genişletmelerinde dışarı aktarmalara ve dışarı aktarma atamalarına izin verilmez.", + "Expression_expected_1109": "İfade bekleniyor.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "İfadenin dekoratör olarak kullanılabilmesi için parantez içine alınması gereklidir.", + "Expression_or_comma_expected_1137": "İfade veya virgül bekleniyor.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "İfade, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "İfade, temsili çok karmaşık olan bir birleşim türü oluşturuyor.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "İfade, derleyicinin temel sınıf başvurusunu yakalamak için kullandığı '_super' öğesi olarak çözümleniyor.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "İfade, derleyicinin 'new.target' meta-özellik başvurusu yakalamak için kullandığı '_newTarget' değişken bildirimi olarak çözümleniyor.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "İfade, derleyicinin 'this' başvurusunu yakalamak için kullandığı '_this' değişken bildirimi olarak çözümleniyor.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "İfade türü --isolatedDeclarations ile çıkarsanamaz.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "Extends yan tümcesi --isolatedDeclarations içeren bir ifade içeremez.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "Çıkarsanan '{0}' türü için Extends yan tümcesi '{1}' özel adı içeriyor veya kullanıyor.", + "Extract_base_class_to_variable_90064": "Temel sınıfı değişken olarak ayıkla", + "Extract_binding_expressions_to_variable_90066": "Bağlayıcı ifadeleri değişkene ayıkla", + "Extract_constant_95006": "Sabiti ayıkla", + "Extract_default_export_to_variable_90065": "Varsayılan dışarı aktarmayı değişken olarak ayıkla", + "Extract_function_95005": "İşlevi ayıkla", + "Extract_to_0_in_1_95004": "{1} içindeki {0} konumuna ayıkla", + "Extract_to_0_in_1_scope_95008": "{1} kapsamındaki {0} konumuna ayıkla", + "Extract_to_0_in_enclosing_scope_95007": "Çevreleyen kapsamdaki {0} konumuna ayıkla", + "Extract_to_interface_95090": "Arabirime ayıkla", + "Extract_to_type_alias_95078": "Tür diğer adına ayıkla", + "Extract_to_typedef_95079": "typedef'e ayıkla", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Değişken olarak ayıkla ve 'typeof {0} olarak {0}' ile değiştir", + "Extract_type_95077": "Türü ayıkla", + "FILE_6035": "DOSYA", + "FILE_OR_DIRECTORY_6040": "DOSYA VEYA DİZİN", + "Failed_to_find_peerDependency_0_6283": "peerDependency '{0}' bulunamadı.", + "Failed_to_resolve_under_condition_0_6415": "'{0}' koşulu altında çözümlenemedi.", + "Fallthrough_case_in_switch_7029": "switch deyiminde sonraki ifadeye geçiş.", + "File_0_does_not_exist_6096": "'{0}' adlı dosya yok.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut değil.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "'{0}' dosyası, önceden önbelleğe alınan aramalara göre mevcut.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "'{0}' adlı dosya var; bunu bir çözümleme sonucu olarak kullanın.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "'{0}' dosyası desteklenmeyen uzantıya sahip. Yalnızca şu uzantılar desteklenir: {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "'{0}' dosyası bir JavaScript dosyasıdır. 'allowJs' seçeneğini mi etkinleştirmek istediniz?", + "File_0_is_not_a_module_2306": "'{0}' dosyası bir modül değil.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "'{0}' dosyası, '{1}' projesinin dosya listesinde değil. Projelerin tüm dosyaları listelemesi veya bir 'include' deseni kullanması gerekir.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "'{0}' dosyası, 'rootDir' '{1}' dizininde değil. 'rootDir' dizininin tüm kaynak dosyalarını içermesi bekleniyor.", + "File_0_not_found_6053": "'{0}' dosyası bulunamadı.", + "File_Layout_6284": "Dosya Düzeni", + "File_Management_6245": "Dosya Yönetimi", + "File_appears_to_be_binary_1490": "Dosya ikili gibi görünüyor.", + "File_change_detected_Starting_incremental_compilation_6032": "Dosya değişikliği algılandı. Artımlı derleme başlatılıyor...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "'{0}', \"type\" alanına sahip olmadığından dosya CommonJS modülüdür", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "'{0}', değeri \"module\" olmayan \"type\" alanına sahip olduğundan dosya CommonJS modülüdür", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "'package.json' bulunamadığından dosya CommonJS modülüdür", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "'{0}', değeri \"module\" olan \"type\" alanına sahip olduğundan dosya ECMAScript modülüdür", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "Bir CommonJS modülü olan dosya bir ES modülüne dönüştürülebilir.", + "File_is_default_library_for_target_specified_here_1426": "Burada dosya, belirtilen hedef için varsayılan kitaplıktır.", + "File_is_entry_point_of_type_library_specified_here_1419": "Burada dosya, belirtilen tür kitaplığının giriş noktasıdır.", + "File_is_included_via_import_here_1399": "Burada dosya, içeri aktarma aracılığıyla eklenmiştir.", + "File_is_included_via_library_reference_here_1406": "Burada dosya, kitaplık başvurusu aracılığıyla eklenmiştir.", + "File_is_included_via_reference_here_1401": "Burada dosya, başvuru aracılığıyla eklenmiştir.", + "File_is_included_via_type_library_reference_here_1404": "Burada dosya, tür kitaplığı başvurusu aracılığıyla eklenmiştir.", + "File_is_library_specified_here_1423": "Burada dosya, belirtilen kitaplıktır.", + "File_is_matched_by_files_list_specified_here_1410": "Burada dosya, belirtilen 'dosyalar' listesine göre eşleştirilir.", + "File_is_matched_by_include_pattern_specified_here_1408": "Burada dosya, belirtilen ekleme desenine göre eşleştirilir.", + "File_is_output_from_referenced_project_specified_here_1413": "Burada dosya, belirtilmiş başvurulan projenin çıkışıdır.", + "File_is_output_of_project_reference_source_0_1428": "Dosya, '{0}' proje başvuru kaynağının çıkışıdır", + "File_is_source_from_referenced_project_specified_here_1416": "Burada dosya, belirtilmiş başvurulan projenin kaynağıdır.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "'{0}' dosya adının, zaten eklenmiş olan '{1}' dosya adından tek farkı, büyük/küçük harf kullanımı.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "Dosya adı '{0}', '{1}' uzantısına sahip - bunun yerine '{2}' aranıyor.", + "File_name_0_has_a_1_extension_stripping_it_6132": "'{0}' dosya adında '{1}' uzantısı var; uzantı ayrılıyor.", + "File_redirects_to_file_0_1429": "Dosya, '{0}' dosyasına yeniden yönlendiriyor", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "Dosya belirtimi, özyinelemeli dizin joker karakterinden ('**') sonra görünen bir üst dizin ('..') içeremez: '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "Dosya belirtimi, özyinelemeli dizin joker karakter ('**') ile bitemez: '{0}'.", + "Filters_results_from_the_include_option_6627": "`include` seçeneğinden sonuçları filtreler.", + "Fix_all_detected_spelling_errors_95026": "Algılanan tüm yazım hatalarını düzelt", + "Fix_all_expressions_possibly_missing_await_95085": "'await' deyiminin eksik olabileceği tüm ifadeleri düzeltin", + "Fix_all_implicit_this_errors_95107": "Tüm örtük 'this' hatalarını onar", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Asenkron işlevlerin tüm hatalı dönüş türlerini onar", + "Fix_all_with_type_only_imports_95182": "Tümünü yalnızca tür içeri aktarmaları ile düzelt", + "For_nodejs_Colon_6287": "nodejs için:", + "Found_0_errors_6217": "{0} hata bulundu.", + "Found_0_errors_Watching_for_file_changes_6194": "{0} hata bulundu. Dosya değişiklikleri izleniyor.", + "Found_0_errors_in_1_files_6261": "{1} dosyada {0} hata bulundu.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Aynı dosyada {0} hata bulundu, başlangıç: {1}", + "Found_1_error_6216": "1 hata bulundu.", + "Found_1_error_Watching_for_file_changes_6193": "1 hata bulundu. Dosya değişiklikleri izleniyor.", + "Found_1_error_in_0_6259": "Şurada 1 hata bulundu: {0}", + "Found_package_json_at_0_6099": "'{0}' içinde 'package.json' bulundu.", + "Found_peerDependency_0_with_1_version_6282": "'{1}' sürümüne sahip peerDependency '{0}' bulundu.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Sınıf tanımları otomatik olarak katı moddadır.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Katı modda 'ES5' hedeflenirken blokların içinde işlev bildirimlerine izin verilmiyor. Modüller otomatik olarak katı moddadır.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "Dönüş türü ek açıklaması bulunmayan işlev ifadesi, örtük olarak '{0}' dönüş türüne sahip.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "İşlev uygulaması yok veya bildirimden hemen sonra gelmiyor.", + "Function_implementation_name_must_be_0_2389": "İşlev uygulamasının adı '{0}' olmalıdır.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan işlev, örtük olarak 'any' türüne sahiptir.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "İşlevin sonunda return deyimi eksik ve dönüş türü 'undefined' içermiyor.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "İşlevin --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", + "Function_not_implemented_95159": "İşlev uygulanmadı.", + "Function_overload_must_be_static_2387": "İşlev aşırı yüklemesi statik olmalıdır.", + "Function_overload_must_not_be_static_2388": "İşlev aşırı yüklemesi statik olmamalıdır.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "İşlev türü gösterimi bir birleşim türünde kullanıldığında parantez içine alınmalıdır.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "İşlev türü gösterimi bir kesişim türünde kullanıldığında parantez içine alınmalıdır.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "Dönüş türü ek açıklaması bulunmayan işlev türü, örtük olarak '{0}' dönüş türüne sahip.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "Gövdelere sahip işlev yalnızca çevresel sınıflarla birleştirebilir.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Projenizdeki TypeScript ve JavaScript dosyalarından .d.ts dosyaları oluşturun.", + "Generate_get_and_set_accessors_95046": "'get' ve 'set' erişimcilerini oluşturun", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Tüm geçersiz kılma özellikleri için 'get' ve 'set' erişimcileri oluşturun", + "Generates_a_CPU_profile_6223": "Bir CPU profili oluşturur.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Karşılık gelen her '.d.ts' dosyası için bir kaynak eşlemesi oluşturur.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Olay izleme ve tür listesi oluşturur.", + "Generates_corresponding_d_ts_file_6002": "İlgili '.d.ts' dosyasını oluşturur.", + "Generates_corresponding_map_file_6043": "İlgili '.map' dosyasını oluşturur.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "Oluşturucu örtük olarak '{0}' bekletme türüne sahip. Bir dönüş türü ek açıklaması sağlamayı deneyin.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Çevresel bağlamda oluşturuculara izin verilmez.", + "Generic_type_0_requires_1_type_argument_s_2314": "'{0}' genel türü, {1} tür bağımsız değişkenini gerektiriyor.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "'{0}' genel türü {1} ile {2} arasında bağımsız değişken gerektirir.", + "Global_module_exports_may_only_appear_at_top_level_1316": "Genel modül dışarı aktarmaları yalnızca en üst düzeyde görünebilir.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "Genel modül dışarı aktarmaları yalnızca bildirim dosyalarında görünebilir.", + "Global_module_exports_may_only_appear_in_module_files_1314": "Genel modül dışarı aktarmaları yalnızca modül dosyalarında görünebilir.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "'{0}' genel türü, bir sınıf veya arabirim türü olmalıdır.", + "Global_type_0_must_have_1_type_parameter_s_2317": "'{0}' genel türü, {1} türünde parametre içermelidir.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "'--incremental' ve '--watch' içinde yeniden derlemelerin olması, bir dosya içindeki değişikliklerin yalnızca doğrudan buna bağımlı olan dosyaları etkileyeceğini varsayar.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "'incremental' ve 'watch' modu kullanan projelerdeki yeniden derlemelerde, bir dosyada yapılan değişikliklerin yalnızca bu dosyaya bağımlı olan dosyaları etkileyeceğinin varsayılmasını sağla.", + "Hexadecimal_digit_expected_1125": "Onaltılık basamak bekleniyor.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Tanımlayıcı bekleniyor. '{0}' modülün en üst düzeyinde ayrılmış bir sözcüktür.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür. Sınıf tanımları otomatik olarak katı moddadır.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Tanımlayıcı bekleniyor. '{0}', katı modda ayrılmış bir sözcüktür. Modüller otomatik olarak katı moddadır.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Tanımlayıcı bekleniyor. '{0}', burada kullanılamayan ayrılmış bir sözcüktür.", + "Identifier_expected_1003": "Tanımlayıcı bekleniyor.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Tanımlayıcı bekleniyor. '__esModule', ECMAScript modülleri dönüştürülürken, dışarı aktarılan bir işaretçi olarak ayrılmış.", + "Identifier_or_string_literal_expected_1478": "Tanımlayıcı veya sabit değerli dize bekleniyor.", + "Identifier_string_literal_or_number_literal_expected_1496": "Tanımlayıcı, sabit değerli dize veya sabit değerli sayı bekleniyor.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "'{0}' paketi bu modülü gerçekten kullanıma sunarsa, 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}' öğesini düzeltmek için bir çekme isteği göndermeyi deneyin", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "‘{0}’ paketi bu modülü fiili olarak kullanıma sunuyorsa `'{1}' modülünü bildir;` ifadesini içeren yeni bir bildirim (.d.ts) dosyası eklemeyi deneyin", + "Ignore_this_error_message_90019": "Bu hata iletisini yoksay", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "tsconfig.json yok sayılıyor, belirtilen dosyaları varsayılan derleyici seçenekleriyle derler.", + "Implement_all_inherited_abstract_classes_95040": "Devralınan tüm soyut sınıfları uygula", + "Implement_all_unimplemented_interfaces_95032": "Uygulanmayan tüm arabirimleri uygula", + "Implement_inherited_abstract_class_90007": "Devralınan soyut sınıfı uygula", + "Implement_interface_0_90006": "'{0}' arabirimini uygula", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "'{1}' özel adına sahip veya bu adı kullanan '{0}' dışarı aktarılan sınıfının yan tümcesini uygular.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "'symbol' öğesinin örtük olarak 'string' türüne dönüştürülmesi işlemi çalışma zamanında başarısız olur. Bu ifadeyi 'String(...)' içinde sarmalamayı düşünün.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "'{0}' içeri aktarması bu dosyada kullanılan genel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "'{0}' içeri aktarması yerel değerle çakışıyor, bu nedenle 'isolatedModules' etkinken yalnızca tür içeri aktarması ile bildirilmelidir.", + "Import_0_from_1_90013": "'{0}' öğesini \"{1}\" kaynağından içeri aktar", + "Import_assertion_values_must_be_string_literal_expressions_2837": "İçeri aktarma onaylama değerleri, dize sabit ifadeleri olmalıdır.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "CommonJS 'require' çağrılarına derlenen deyimler için içeri aktarma onaylamalarına izin verilmiyor.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "İçeri aktarma onayları, yalnızca \"--module\" seçeneği \"esnext\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında desteklenir.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "İçeri aktarma onayları, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "İçeri aktarma onaylamaları içeri aktarma öznitelikleriyle değiştirildi. 'assert' yerine 'with' kullanın.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "ECMAScript modülleri hedeflenirken içeri aktarma ataması kullanılamaz. Bunun yerine 'import * as ns from \"mod\"', 'import {a} from \"mod\"', 'import d from \"mod\"' veya başka bir modül biçimi kullanmayı deneyin.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "İçeri aktarma öznitelik değerleri, sabit değerli dize ifadeleri olmalıdır.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "CommonJS 'require' çağrılarına derlenen deyimler üzerinde içeri aktarma özniteliklerine izin verilmiyor.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "İçeri aktarma öznitelikleri, yalnızca \"--module\" seçeneği \"esnext\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında desteklenir.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "İçeri aktarma öznitelikleri, yalnızca tür içeri aktarmaları veya dışarı aktarmaları ile kullanılamaz.", + "Import_declaration_0_is_using_private_name_1_4000": "'{0}' içeri aktarma bildirimi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "İçeri aktarma bildirimi, yerel '{0}' bildirimiyle çakışıyor.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "Ad alanındaki içeri aktarma bildirimleri bir modüle başvuramaz.", + "Import_emit_helpers_from_tslib_6139": "'Tslib'den yayma yardımcılarını içeri aktar.", + "Import_may_be_converted_to_a_default_import_80003": "İçeri aktarma varsayılan bir içeri aktarmaya dönüştürülebilir.", + "Import_name_cannot_be_0_2438": "İçeri aktarma adı '{0}' olamaz.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "Çevresel modül bildirimindeki içeri veya dışarı aktarma bildirimi, göreli modül adı aracılığıyla modüle başvuramaz.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "'{0}' içeri aktarma tanımlayıcısı, '{1}' yolundaki package.json kapsamında yok.", + "Imported_via_0_from_file_1_1393": "'{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_with_packageId_2_1394": "'{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "compilerOptions içinde belirtildiği gibi 'importHelpers' öğesini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için '{2}' paket kimliğine sahip '{1}' dosyasından {0} aracılığıyla içeri aktarıldı", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "Bir JSON dosyasının ECMAScript modülüne aktarılması, 'module' değeri '{0}' olarak ayarlandığında 'type: \"json\"' içeri aktarma özniteliği gerektirir.", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Modül genişletmelerinde içeri aktarmalara izin verilmez. Bunları, kapsayan dış modüle taşımanız önerilir.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Çevresel sabit listesi bildirimlerinde, üye başlatıcısı sabit ifade olmalıdır.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Birden fazla bildirime sahip sabit listesinde yalnızca bir bildirim ilk sabit listesi öğesine ait başlatıcıyı atlayabilir.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Dosyaların listesini ekleyin. Bu, `include` seçeneğinden farklı olarak glob desenlerini desteklemez.", + "Include_modules_imported_with_json_extension_6197": "'.json' uzantısıyla içeri aktarılan modülleri dahil et", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Yayılan JavaScript içindeki kaynak eşlemelerine kaynak kodunu ekleyin.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Yayılan JavaScript içine kaynak eşleme dosyalarını ekleyin.", + "Includes_imports_of_types_referenced_by_0_90054": "'{0}' tarafından başvurulan türlerin içeri aktarmalarını içerir", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "--watch dahil olmak üzere -w, dosya değişiklikleri için geçerli projeyi izlemeye başlayacak. Bir kez ayarlandıktan sonra, izleme modunu şununla yapılandırabilirsiniz:", + "Incomplete_quantifier_Digit_expected_1505": "Eksik niceleyici. Sayı bekleniyordu.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "'{0}' türündeki dizin imzası '{1}' türünde yok.", + "Index_signature_in_type_0_only_permits_reading_2542": "'{0}' türündeki dizin imzası yalnızca okumaya izin veriyor.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "'{0}' birleştirilmiş bildirimindeki bildirimlerin tümü dışarı aktarılmış veya yerel olmalıdır.", + "Infer_all_types_from_usage_95023": "Tüm türleri kullanımdan çıkar", + "Infer_function_return_type_95148": "İşlev dönüş türünü çıkarsa", + "Infer_parameter_types_from_usage_95012": "Parametre türleri için kullanımdan çıkarım yap", + "Infer_this_type_of_0_from_usage_95080": "Kullanımdan '{0}' öğesinin 'this' türünü çıkarsa", + "Infer_type_of_0_from_usage_95011": "'{0}' türü için kullanımdan çıkarım yap", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Sınıf ifadelerinden çıkarım, --isolatedDeclarations ile desteklenmiyor.", + "Initialize_property_0_in_the_constructor_90020": "Oluşturucu içinde '{0}' özelliğini başlat", + "Initialize_static_property_0_90021": "'{0}' statik özelliğini başlat", + "Initializer_for_property_0_2811": "'{0}' özelliği için başlatıcı", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "'{0}' örnek üyesi değişkeninin başlatıcısı, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Çevresel bağlamlarda başlatıcılara izin verilmez.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Bir TypeScript projesi başlatır ve bir tsconfig.json dosyası oluşturur.", + "Inline_variable_95184": "Satır içi değişken", + "Insert_command_line_options_and_files_from_a_file_6030": "Dosyadaki komut satırı seçeneklerini ve dosyaları ekleyin.", + "Install_0_95014": "'{0}' yükle", + "Install_all_missing_types_packages_95033": "Tüm eksik tür paketlerini yükle", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "'{0}' arabirimi, aynı anda '{1}' ve '{2}' türlerini genişletemez.", + "Interface_0_incorrectly_extends_interface_1_2430": "'{0}' arabirimi, '{1}' arabirimini yanlış genişletiyor.", + "Interface_declaration_cannot_have_implements_clause_1176": "Arabirim bildirimi, 'implements' yan tümcesine sahip olamaz.", + "Interface_must_be_given_a_name_1438": "Arabirime bir ad verilmesi gerekir.", + "Interface_name_cannot_be_0_2427": "Arabirim adı '{0}' olamaz.", + "Interop_Constraints_6252": "Birlikte Çalışma Kısıtlamaları", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "'undefined' eklemek yerine isteğe bağlı özellik türlerini yazıldıkları gibi yorumlayın.", + "Invalid_character_1127": "Geçersiz karakter.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "Geçersiz '{0}' içeri aktarma tanımlayıcısında olası çözünürlük yok.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Genişletmedeki modül adı geçersiz. '{0}' modülü, '{1}' konumundaki türü belirsiz ve genişletilemeyen bir modüle çözümleniyor.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Genişletmedeki modül adı geçersiz; '{0}' adlı modül bulunamıyor.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Yeni ifadeden geçersiz isteğe bağlı zincir. '{0}()' çağrısı mı yapmak istediniz?", + "Invalid_reference_directive_syntax_1084": "Geçersiz 'reference' yönergesi söz dizimi.", + "Invalid_syntax_in_decorator_1498": "Dekoratörde geçersiz söz dizimi.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Geçersiz '{0}' kullanımı. Bu ifade bir sınıf statik bloğu içinde kullanılamaz.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Geçersiz '{0}' kullanımı. Modüller otomatik olarak katı moddadır.", + "Invalid_use_of_0_in_strict_mode_1100": "Katı modda geçersiz '{0}' kullanımı.", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' için geçersiz değer.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' değeri geçersiz. '{0}' geçerli bir tanımlayıcı veya tam ad değil.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' için geçersiz değer. '{0}' geçerli bir tanımlayıcı değil.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "Bu iki şablon ifadesini ayırmak için virgül koymamış olabilirsiniz. Bu ifadeler, çağrılamayacak etiketli bir şablon ifadesi oluşturur.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "'{0}' öğe türü geçerli bir JSX öğesi değil.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "'{0}' örnek türü geçerli bir JSX öğesi değil.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "'{0}' dönüş türü geçerli bir JSX öğesi değil.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "'{0}' türü geçerli bir JSX öğe türü değil.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}', 'extends {2}' yan tümcesiyle eşleşmiyor.", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc '@{0}' bir sınıfa eklenmemiş.", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' yalnızca bir imzanın son parametresi içinde görünebilir.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' etiketinin adı '{0}' ancak bu ada sahip bir parametre yok.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' etiketi '{0}' adına sahip ancak bu ada sahip bir parametre yok. Bir dizi türü olsaydı 'arguments' ile eşleşirdi.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef, TypeScript türüne dönüştürülmüş olabilir.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' etiketi bir tür ek açıklamasına sahip olmalıdır veya sonrasında '@property' ya da '@member' etiketlerinden biri gelmelidir.", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedef’leri, TypeScript türlerine dönüştürülmüş olabilir.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc türleri yalnızca belge açıklamalarının içinde kullanılabilir.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc türleri TypeScript türlerine taşınabilir.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "JSX özniteliklerine yalnızca boş olmayan 'expression' ifadesi atanabilir.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "'{0}' adlı JSX öğesine karşılık gelen bir kapatma etiketi yok.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "JSX öğe sınıfı, '{0}' özelliğine sahip olmadığı için öznitelikleri desteklemiyor.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "Herhangi bir arabirim 'JSX.{0}' öğesi olmadığı için JSX öğesi örtük olarak 'any' türüne sahip.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "Genel türdeki 'JSX.Element' öğesi olmadığı için JSX öğesi örtük olarak 'any' türüne sahip.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX öğesi türü '{0}', oluşturma veya çağrı imzasına sahip değil.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX öğeleri aynı ada sahip birden fazla özniteliğe sahip olamaz.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX ifadeleri virgül işlecini kullanamaz. Bir dizi mi yazmak istediniz?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX ifadelerinin bir üst öğesi olmalıdır.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX parçasına karşılık gelen bir kapatma etiketi yok.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX özellik erişimi ifadeleri JSX ad alanı adlarını içeremez", + "JSX_spread_child_must_be_an_array_type_2609": "JSX yayılma alt öğesi, bir dizi türü olmalıdır.", + "JavaScript_Support_6247": "JavaScript Desteği", + "Jump_target_cannot_cross_function_boundary_1107": "Atlama hedefi işlev sınırını geçemez.", + "KIND_6034": "TÜR", + "Keywords_cannot_contain_escape_characters_1260": "Anahtar sözcükler kaçış karakterleri içeremez.", + "LOCATION_6037": "KONUM", + "Language_and_Environment_6254": "Dil ve Ortam", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "Virgül işlecinin sol tarafı kullanılmıyor ve herhangi bir yan etkisi yok.", + "Library_0_specified_in_compilerOptions_1422": "compilerOptions içinde belirtilen '{0}' kitaplığı", + "Library_referenced_via_0_from_file_1_1405": "'{1}' dosyasından '{0}' aracılığıyla başvurulan kitaplık", + "Line_break_not_permitted_here_1142": "Burada satır sonuna izin verilmez.", + "Line_terminator_not_permitted_before_arrow_1200": "Oktan önce satır sonlandırıcısına izin verilmez.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Bir modül çözümlenirken aranacak dosya adı son eklerinin listesi.", + "List_of_folders_to_include_type_definitions_from_6161": "Eklenecek tür tanımlarının alınacağı klasörlerin listesi.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Birleştirilmiş içerikleri, çalışma zamanında proje yapısını temsil eden kök klasörlerin listesi.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "'{1}' kök dizininden '{0}' yükleniyor; aday konumu: '{2}'.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "'node_modules' klasöründen '{0}' modülü yükleniyor, hedef dosya türleri: {1}.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Modül, dosya/klasör olarak yükleniyor; aday modül konumu '{0}'; hedef dosya türleri: {1}.", + "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "Yerel ayar, veya - biçiminde olmalıdır. Örneğin, '{0}' veya '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "'moduleResolution' işlemi sırasında kullanılan yolları günlüğe kaydet.", + "Longest_matching_prefix_for_0_is_1_6108": "'{0}' için eşleşen en uzun ön ek: '{1}'.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "'node_modules' klasöründe aranıyor; ilk konum: '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tüm 'super()' çağrılarını kendi oluşturucularının ilk deyimi yap", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Dize, sayı veya simge yerine yalnızca dönüş dizelerinin anahtarını oluşturun. Eski seçenek.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Oluşturucudaki ilk deyime 'super()' tarafından çağrı yapılmasını sağla", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "Eşleştirilmiş nesne türü örtük olarak 'any' şablon türüne sahip.", + "Mark_array_literal_as_const_90070": "Sabit değerli dizileri const olarak işaretle", + "Matched_0_condition_1_6403": "'{0}' koşulu '{1}' eşleşti.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Varsayılan '**/*' ekleme deseniyle eşleşti", + "Matched_by_include_pattern_0_in_1_1407": "'{1}' içindeki '{0}' ekleme desenine göre eşleştirildi", + "Member_0_implicitly_has_an_1_type_7008": "'{0}' üyesi örtük olarak '{1}' türüne sahip.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "'{0}' üyesi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Merge_conflict_marker_encountered_1185": "Birleştirme çakışması işaretçisiyle karşılaşıldı.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "'{0}' birleştirilen bildirimi, varsayılan bir dışarı aktarma bildirimini içeremez. Bunun yerine ayrı bir 'export default {0}' bildirimi eklemeyi göz önünde bulundurun.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "'{0}' meta-özelliğine yalnızca bir işlev bildiriminin, işlev ifadesinin veya oluşturucunun gövdesinde izin verilir.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "'{0}' metodu abstract olarak işaretlendiğinden bir uygulamaya sahip olamaz.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "Dışarı aktarılan arabirimin '{0}' metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "Dışarı aktarılan arabirimin '{0}' metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "Metodun --isolatedDeclarations ile açık bir dönüş türü ek açıklamasına sahip olması gerekir.", + "Method_not_implemented_95158": "Metot uygulanmadı.", + "Modifiers_cannot_appear_here_1184": "Değiştiriciler burada görüntülenemez.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "'{0}' modülü yalnızca varsayılan olarak '{1}' bayrağı kullanılarak içeri aktarılabilir", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "'{0}' modülü bu yapı kullanılarak içe aktarılamaz. Belirtici yalnızca 'require' ile içe aktarılamayan bir ES modülüne çözümlenir. Bunun yerine bir ECMAScript içe aktarma kullanın.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak '{2}' olarak dışarı aktarıldı.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "'{0}' modülü '{1}' öğesini yerel olarak bildiriyor ancak dışarı aktarılmadı.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "'{0}' modülü bir türe başvurmuyor ancak burada bir tür olarak kullanılmış. Şunu mu demek istediniz?: 'typeof import('{0}')'", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "'{0}' modülü bir değere başvurmuyor ancak burada bir değer olarak kullanılmış.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "{0} modülü, '{1}' adlı bir üyeyi zaten dışarı aktardı. Belirsizliği çözmek için açık olarak yeniden dışarı aktarmayı göz önünde bulundurun.", + "Module_0_has_no_default_export_1192": "'{0}' modülü için varsayılan dışarı aktarma yok.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "'{0}' modülünün varsayılan dışarı aktarması yok. Bunun yerine 'import { {1} } from {0}' kullanmak mı istediniz?", + "Module_0_has_no_exported_member_1_2305": "'{0}' modülü, dışarı aktarılan '{1}' üyesine sahip değil.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "'{0}' modülünün dışarı aktarılmış '{1}' üyesi yok. Bunun yerine 'import {1} from {0}' kullanmak mı istediniz?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "'{0}' modülü, aynı ada sahip bir yerel bildirim tarafından gizleniyor.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "'{0}' modülü 'export =' kullanıyor ve 'export *' ile birlikte kullanılamaz.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "'{0}' modülü, '{1}' dosyasında yerel olarak bildirilmiş çevresel modül olarak çözümlendi.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "'{0}' modülü '{1}' olarak çözümlendi, ancak '--allowArbitraryExtensions' ayarlanmadı.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "'{0}' modülü '{1}' olarak çözüldü ancak '--jsx' ayarlanmadı.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "'{0}' modülü '{1}' olarak çözümlendi ancak '--resolveJsonModule' kullanılmadı.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Modül bildirim adları yalnızca ' veya \" tırnak içine alınmış dizeleri kullanabilir.", + "Module_name_0_matched_pattern_1_6092": "Modül adı: '{0}', eşleşen desen: '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== '{0}' modül adı çözümlenemedi. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== '{0}' modül adı '{1}' öğesine başarıyla çözümlendi. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== '{0}' modül adı '{2}' Paket Kimliğiyle '{1}' olarak başarıyla çözümlendi. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Modül çözümleme türü belirtilmedi, '{0}' kullanılıyor.", + "Module_resolution_using_rootDirs_has_failed_6111": "'rootDirs' kullanarak modül çözümleme başarısız oldu.", + "Modules_6244": "Modüller", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Etiketlenmiş demet öğesi değiştiricilerini etiketlere taşı", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Varsayılan dışarı aktarmadaki ifadeyi bir değişkene taşıyın ve bir tür ek açıklaması ekleyin.", + "Move_to_a_new_file_95049": "Yeni bir dosyaya taşı", + "Move_to_file_95178": "Dosyaya taşı", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Birbirini izleyen birden çok sayısal ayırıcıya izin verilmez.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Birden çok oluşturucu uygulamasına izin verilmez.", + "NEWLINE_6061": "YENİ SATIR", + "Name_is_not_valid_95136": "Ad geçerli değil", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Adlandırılmış yakalama grupları yalnızca 'ES2018' veya üzeri hedeflenirken kullanılabilir.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Aynı ada sahip adlandırılmış yakalama grupları birbirini dışlamalıdır.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Ertelenmiş içeri aktarmalarda adlandırılmış içeri aktarmalara izin verilmez.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "'module', '{0}' olarak ayarlandığında JSON dosyasından ECMAScript modülüne adlandırılmış içeri aktarmalara izin verilmez.", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "'{1}' ve '{2}' türündeki '{0}' adlı özellikler aynı değil.", + "Namespace_0_has_no_exported_member_1_2694": "'{0}' ad alanında dışarı aktarılan '{1}' üyesi yok.", + "Namespace_must_be_given_a_name_1437": "Ad alanına bir ad verilmesi gerekir.", + "Namespace_name_cannot_be_0_2819": "Ad alanı “{0}” olamaz.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "'{0}' etkinken genel betik dosyalarında ad alanlarına izin verilmiyor. Bu dosyanın genel bir betik olması amaçlanmamışsa, 'moduleDetection'i 'force' olarak ayarlayın veya boş bir 'export {}' deyimi ekleyin.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "'this' parametrelerine ne dekoratörler ne de değiştiriciler uygulanamaz.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Hiçbir temel oluşturucu, belirtilen tür bağımsız değişkeni sayısına sahip değil.", + "No_constituent_of_type_0_is_callable_2755": "'{0}' türünde çağrılabilir bileşen yok.", + "No_constituent_of_type_0_is_constructable_2759": "'{0}' türünde oluşturulabilir bileşen yok.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "'{1}' türü üzerinde '{0}' türünde parametreye sahip dizin imzası bulunamadı.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "'{0}' yapılandırma dosyasında giriş bulunamadı. Belirtilen 'include' yolları: '{1}', 'exclude' yolları: '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Artık desteklenmiyor. Önceki sürümlerde, dosyaları okumak için metin kodlamasını el ile ayarlayın.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "{0} bağımsız değişken bekleyen aşırı yükleme yok ancak {1} veya {2} bağımsız değişken bekleyen aşırı yüklemeler var.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "{0} tür bağımsız değişkeni bekleyen aşırı yükleme yok ancak {1} veya {2} tür bağımsız değişkeni bekleyen aşırı yüklemeler var.", + "No_overload_matches_this_call_2769": "Bu çağrıyla eşleşen aşırı yükleme yok.", + "No_type_could_be_extracted_from_this_type_node_95134": "Bu tür düğümünden tür ayıklanamadı", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "'{0}' toplu özelliği için kapsamda değer yok. Bir değer tanımlayın ya da bir başlatıcı sağlayın.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "Soyut olmayan '{0}' sınıfı, '{2}' sınıfından devralınan {1} soyut üyesini uygulamaz.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "Şu '{1}' üyelerinde soyut olmayan sınıf '{0}' uygulamalar eksik: {2} ve {3} tane daha.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "Soyut olmayan sınıf ifadesi, '{1}' sınıfından devralınan '{0}' soyut üyesini uygulamıyor.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinin uygulamaları eksik: {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Şu '{0}' üyelerinde soyut olmayan sınıf ifadesinde uygulamalar eksik: {1} ve {2} tane daha.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "Null olmayan onaylamalar yalnızca TypeScript dosyalarında kullanılabilir.", + "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "'baseUrl' ayarlanmadığında göreli olmayan yollara izin verilmez. Başına './' koymayı deneyin", + "Non_simple_parameter_declared_here_1348": "Basit olmayan parametre burada bildirildi.", + "Not_all_code_paths_return_a_value_7030": "Tüm kod yolları bir değer döndürmez.", + "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' türündeki tüm bileşenler çağrılabilir değil.", + "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' türündeki tüm bileşenler oluşturulabilir değil.", + "Numbers_out_of_order_in_quantifier_1506": "Sayılar niceleyicide sıranın dışında.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "2^53 veya üzeri mutlak değerlere sahip sayısal sabit değerler, tamsayı olarak doğru bir şekilde temsil edilemeyecek kadar büyüktür.", + "Numeric_separators_are_not_allowed_here_6188": "Burada sayısal ayırıcılara izin verilmez.", + "Object_is_of_type_unknown_2571": "Nesne 'unknown' türünde.", + "Object_is_possibly_null_2531": "Nesne büyük olasılıkla 'null'.", + "Object_is_possibly_null_or_undefined_2533": "Nesne büyük olasılıkla 'null' veya 'undefined'.", + "Object_is_possibly_undefined_2532": "Nesne büyük olasılıkla 'undefined'.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "Nesne sabit değeri yalnızca bilinen özellikleri belirtebilir ve '{0}', '{1}' türünde değil.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "Nesne sabit değerinde yalnızca bilinen özellikler belirtilebilir, ancak '{0}', '{1}' türünde yok. '{2}' yazmak mı istediniz?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "'{0}' nesne sabit değeri özelliği, örtük olarak '{1}' türüne sahip.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Toplu özellikler içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Yayma atamaları içeren nesneler --isolatedDeclarations ile çıkarsanamaz.", + "Octal_digit_expected_1178": "Sekizli basamak bekleniyor.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Karakter sınıfında sekizli kaçış dizilerine ve geri başvurulara izin verilmiyor. Bu bir kaçış dizisi olarak amaçlandıysa, yerine '{0}' kullanın.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sekizli kaçış dizilerine izin verilmiyor. '{0}' söz dizimini kullanın.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Sabit değerli sekizliklere izin verilmiyor. '{0}' söz dizimini kullanın.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' değerlerinden biri '{2}' dizesidir ve diğer değerin bilinmeyen bir sayısal değer olduğu varsayılır.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' deyiminde yalnızca tek bir değişken bildirimine izin verilir.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "'new' anahtar sözcüğüyle yalnızca void işlevi çağrılabilir.", + "Only_ambient_modules_can_use_quoted_names_1035": "Yalnızca çevresel modüller tırnak içinde ad kullanabilir.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "--{0} ile birlikte yalnızca 'amd' ve 'system' modülleri desteklenir.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Yalnızca const dizileri --isolatedDeclarations ile çıkarsanabilir.", + "Only_emit_d_ts_declaration_files_6014": "Yalnızca '.d.ts' bildirim dosyalarını yayımla.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "JavaScript dosyalarının değil yalnızca d.ts dosyalarının çıkışını alın.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "'super' anahtar sözcüğüyle yalnızca temel sınıfa ait ortak ve korunan metotlara erişilebilir.", + "Operator_0_cannot_be_applied_to_type_1_2736": "'{0}' işleci '{1}' türüne uygulanamıyor.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "'{0}' işleci, '{1}' ve '{2}' türüne uygulanamaz.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "İşleçler bir karakter sınıfı içinde karıştırılmamalıdır. Bunun yerine iç içe bir sınıfta sarmalayın.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Düzenleme sırasında bir projeyi çok projeli başvuru denetiminin dışında tutun.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "'{0}={1}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "'{0}={1}' seçeneği kullanım dışı bırakıldı ve TypeScript {2} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{3}\"' olarak belirtin.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'false' veya 'null' olarak ayarlanabilir.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "'{0}' seçeneği, yalnızca 'tsconfig.json' dosyasında belirtilebilir veya komut satırında 'null' olarak ayarlanabilir.", + "Option_0_can_only_be_specified_on_command_line_6266": "'{0}' seçeneği yalnızca komut satırında belirtilebilir.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "'{0} seçeneği yalnızca '--inlineSourceMap' veya '--sourceMap' seçeneği sağlandığında kullanılabilir.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "Seçenek '{0}' yalnızca 'moduleResolution' değeri 'node16', 'nodenext' veya 'bundler' olarak ayarlandığında kullanılabilir.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "'{0}' seçeneği, yalnızca 'module' değeri 'preserve', 'es2015' veya üzeri olarak ayarlandığında kullanılabilir.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "'jsx' seçeneği '{1}' olduğunda '{0}' seçeneği belirtilemez.", + "Option_0_cannot_be_specified_with_option_1_5053": "'{0}' seçeneği, '{1}' seçeneği ile belirtilemez.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "'{0}' seçeneği, '{1}' seçeneği belirtilmeden belirtilemez.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "'{1}' seçeneği veya '{2}' seçeneği belirtilmeden '{0}' seçeneği belirtilemez.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "'{0}' seçeneği kaldırıldı. Lütfen yapılandırmanızdan kaldırın.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "'{0}' seçeneği kullanım dışı bırakıldı ve TypeScript {1} sürümünde çalışmayacak. Bu hatayı sessize almak için compilerOption '\"ignoreDeprecations\": \"{2}\"' olarak belirtin.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "'{0}' seçeneği gereksiz ve '{1}' seçeneği ile belirtilemez.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "'allowImportingTsExtensions' seçeneği, yalnızca 'noEmit' veya 'emitDeclarationOnly' ayarlandığında kullanılabilir.", + "Option_build_must_be_the_first_command_line_argument_6369": "'--build' seçeneği ilk komut satırı bağımsız değişkeni olmalıdır.", + "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "'--incremental' seçeneği yalnızca tsconfig kullanılarak, tek bir dosyada gösterilerek veya '--tsBuildInfoFile' seçeneği sağlandığında belirtilebilir.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "'isolatedModules' seçeneği, yalnızca '--module' sağlandığında veya 'target' seçeneği 'ES2015' veya daha yüksek bir sürüm değerine sahip olduğunda kullanılabilir.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "'module' seçeneği '{1}' olarak ayarlandığında 'moduleResolution' seçeneği '{0}' olarak ayarlanmalıdır (veya belirtilmemiş olarak bırakılmalıdır).", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "'moduleResolution' seçeneği '{1}' olarak ayarlandığında 'module' seçeneği '{0}' olarak ayarlanmalıdır.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "'{0}' etkinken 'preserveConstEnums' seçeneği devre dışı bırakılamaz.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "'project' seçeneği, komut satırındaki kaynak dosyalarıyla karıştırılamaz.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "'moduleResolution' 'classic' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "'module' 'none', 'classic' veya 'umd' olarak ayarlandığında '--resolveJsonModule' seçeneği belirtilemez.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "'module' değeri 'UMD', 'AMD' veya 'System' olarak ayarlandığında 'verbatimModuleSyntax' seçeneği kullanılamaz.", + "Options_0_and_1_cannot_be_combined_6370": "'{0}' ve '{1}' seçenekleri birleştirilemez.", + "Options_Colon_6027": "Seçenekler:", + "Other_Outputs_6291": "Diğer Çıkışlar", + "Output_Formatting_6256": "Çıkış Biçimlendirmesi", + "Output_compiler_performance_information_after_building_6615": "Derleme sonrasında derleyici performans bilgilerinin çıkışını alın.", + "Output_directory_for_generated_declaration_files_6166": "Oluşturulan bildirim dosyaları için çıkış dizini.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "Çıkış dosyası '{0}' '{1}' kaynak dosyasından oluşturulmamış.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin çıkışı dahil edildi", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Derleme sonrasında derleyici performans bilgilerinin daha ayrıntılı çıkışını alın.", + "Overload_0_of_1_2_gave_the_following_error_2772": "{0}/{1} aşırı yükleme '{2}' imzası, aşağıdaki hatayı verdi.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Aşırı yükleme imzalarının hepsi soyut veya soyut olmayan olmalıdır.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Aşırı yükleme imzalarının tümü çevresel veya çevresel olmayan türde olmalıdır.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Aşırı yükleme imzalarının hepsi dışarı aktarılmış veya dışarı aktarılmamış olmalıdır.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Aşırı yükleme imzalarının tümü isteğe bağlı veya gerekli olmalıdır.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Aşırı yükleme imzalarının tümü ortak, özel veya korumalı olmalıdır.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "'{0}' parametresi, kendisinden sonra bildirilen '{1}' tanımlayıcısına başvuramaz.", + "Parameter_0_cannot_reference_itself_2372": "'{0}' parametresi kendisine başvuramaz.", + "Parameter_0_implicitly_has_an_1_type_7006": "'{0}' parametresi örtük olarak '{1}' türüne sahip.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "'{0}' parametresi örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "'{0}' parametresi, '{1}' parametresi ile aynı konumda değil.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "Erişimcinin '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "Erişimcinin '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "Erişimcinin '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "Dışarı aktarılan sınıftaki oluşturucunun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "Dışarı aktarılan işlevin '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "Dışarı aktarılan işlevin '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "Dışarı aktarılan işlevin '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "Dışarı aktarılan arabirimin dizin imzasındaki '{0}' parametresi, '{2}' adlı özel modüldeki '{1}' adına sahip ya da bu adı kullanıyor.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "Dışarı aktarılan arabirimin dizin imzasındaki '{0}' parametresi, '{1}' adına sahip ya da bu adı kullanıyor.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "Dışarı aktarılan arabirimdeki metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "Dışarı aktarılan arabirimdeki metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "Dışarı aktarılan sınıftaki ortak metodun '{0}' parametresi, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "Dışarı aktarılan sınıftaki statik metodun '{0}' parametresi, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "Dışarı aktarılan sınıftaki statik metodun '{0}' parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "Parametre soru işareti ve başlatıcı içeremez.", + "Parameter_declaration_expected_1138": "Parametre bildirimi bekleniyor.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "Parametrenin adı var ancak türü yok. Şunu mu demek istediniz: '{0}: {1}'?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Parametre değiştiricileri yalnızca TypeScript dosyalarında kullanılabilir.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "Parametrenin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "Dışarı aktarılan sınıftaki genel ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "Dışarı aktarılan sınıftaki genel statik ayarlayıcı '{0}' için parametre türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Katı modda ayrıştırın ve her kaynak dosya için \"use strict\" kullanın.", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json içindeki 'files' listesinin parçası", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "'{0}' deseni en fazla bir adet '*' karakteri içerebilir.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "'--diagnostics' veya '--extendedDiagnostics' için performans zamanlamaları bu oturumda kullanılamaz. Web performans API'sinin yerel bir uygulaması bulunamadı.", + "Platform_specific_6912": "Platforma özel", + "Prefix_0_with_an_underscore_90025": "'{0}' için ön ek olarak alt çizgi kullan", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Hatalı tüm özellik bildirimlerinin başına 'declare' ekleyin", + "Prefix_all_unused_declarations_with_where_possible_95025": "Mümkün olduğunda tüm kullanılmayan bildirimlerin başına '_' ekle", + "Prefix_with_declare_95094": "Başına 'declare' ekleyin", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "JavaScript çıktısında, içeri aktarılmazsa kaldırılacak olan kullanılmayan içe aktarılan değerleri koruyun.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Derleme sırasında okunan tüm dosyaları yazdırın.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Derleme sırasında, neden dahil edildiğini de içerecek şekilde okunan dosyaları yazdırın.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Dosya adlarını ve bunların derlemenin bir parçası olmalarının nedenini yazdır.", + "Print_names_of_files_part_of_the_compilation_6155": "Derlemenin parçası olan dosyaların adlarını yazdırın.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Derlemenin parçası olan dosyaların adlarını yazdırın ve sonra işlemeyi durdurun.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Oluşturulan dosyalardan, derlemenin parçası olanların adlarını yazdırın.", + "Print_the_compiler_s_version_6019": "Derleyici sürümünü yazdır.", + "Print_the_final_configuration_instead_of_building_1350": "Derlemek yerine son yapılandırmayı yazdırın.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Derleme sonrasında yayılan dosyaların adlarını yazdırın.", + "Print_this_message_6017": "Bu iletiyi yazdır.", + "Private_accessor_was_defined_without_a_getter_2806": "Özel erişimci bir alıcı olmadan tanımlandı.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "Özel alan '{0}' kapsayan sınıfta bildirilmelidir.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Değişken bildirimlerinde özel tanımlayıcılara izin verilmiyor.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Sınıf gövdelerinin dışında özel tanımlayıcılara izin verilmiyor.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Özel tanımlayıcılara yalnızca sınıf gövdelerinde izin verilir ve yalnızca bir sınıf üyesi bildiriminin parçası olarak, özellik erişimi olarak veya ‘in’ ifadesinin sol tarafında kullanılabilirler.", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Özel tanımlayıcılar yalnızca ECMAScript 2015 veya üzeri hedeflenirken kullanılabilir.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Özel tanımlayıcılar parametre olarak kullanılamaz.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "Özel veya korumalı '{0}' üyesine bir tür parametresinde erişilemiyor.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan proje derlenemiyor", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden proje derlenemiyor", + "Project_0_is_being_forcibly_rebuilt_6388": "'{0}' projesi zorla yeniden oluşturuluyor", + "Project_0_is_out_of_date_because_1_6420": "Proje '{0}' güncel değil çünkü {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "Buildinfo dosyası '{1}', '{2}' dosyasının derlemenin kök dosyası iken artık öyle olmadığını belirttiğinden '{0}' projesi güncel değil.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "Buildinfo dosyası '{1}' programın hataları bildirmesi gerektiğini belirttiğinden '{0}' projesi güncel değil.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "'{1}' buildinfo dosyası bazı değişikliklerin gösterilmediğini belirttiğinden '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "Buildinfo dosyası '{1}' compilerOptions içinde değişiklik olduğunu belirttiğinden '{0}' proje adı güncel değil", + "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "'{0}' projesinin '{1}' bağımlılığı güncel olmadığından proje güncel değil", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "'{1}' çıkışı '{2}' girişinden daha eski olduğundan '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "Çıkış dosyası '{1}' mevcut olmadığından '{0}' projesi güncel değil", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "'{0}' projesinin çıkışı geçerli '{2}' sürümünden farklı olan '{1}' sürümü ile oluşturulduğundan proje güncel değil", + "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "'{1}' dosyası okunurken hata oluştuğu için '{0}' projesi güncel değil", + "Project_0_is_up_to_date_6361": "'{0}' projesi güncel", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "En yeni '{1}' girişi '{2}' çıkışından daha eski olduğundan '{0}' projesi güncel", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "'{0}' projesi güncel ancak giriş dosyalarından daha eski olan çıkış dosyalarına ait zaman damgalarının güncelleştirilmesi gerekiyor", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "'{0}' projesi bağımlılıklarından d.ts dosyaları ile güncel", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Proje başvuruları döngüsel bir grafik formu oluşturamaz. Döngü tespit edildi: {0}", + "Projects_6255": "Projeler", + "Projects_in_this_build_Colon_0_6355": "Bu derlemedeki projeler: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "'accessor' değiştiricisine sahip özellikler yalnızca ECMAScript 2015 ve üzeri hedeflendiğinde kullanılabilir.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "'{0}' özelliği abstract olarak işaretlendiğinden bir başlatıcıya sahip olamaz.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "'{0}' özelliği bir dizin imzasından geldiğinden ['{0}'] ile erişilmelidir.", + "Property_0_does_not_exist_on_type_1_2339": "'{0}' özelliği, '{1}' türünde değil.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "'{0}' özelliği '{1}' türünde yok. Bunu mu demek istediniz: '{2}'?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "'{0}' özelliği '{1}' türünde yok. Bunun yerine '{2}' statik üyesine erişmek mi istediniz?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "'{0}' özelliği '{1}' türünde yok. Hedef kitaplığınızı değiştirmeniz mi gerekiyor? 'lib' derleyici seçeneğini '{2}' veya üzeri olarak değiştirmeyi deneyin.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "'{0}' özelliği '{1}' türünde yok. 'Lib' derleyici seçeneğini 'dom' içerecek şekilde değiştirmeyi deneyin.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "'{0}' özelliği başlatıcı içermiyor ve kesinlikle bir sınıf statik bloğuna atanmamış.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "'{0}' özelliği başlatıcı içermiyor ve oluşturucuda kesin olarak atanmamış.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "'{0}' özelliği, get erişimcisinin dönüş türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "'{0}' özelliği, set erişimcisinin parametre türü ek açıklaması olmadığı için örtük olarak 'any' türü içeriyor.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "'{0}' özelliği örtük olarak 'any' türüne sahip ancak özelliğin get erişimcisi için kullanımdan daha iyi bir tür çıkarsanabilir.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "'{0}' özelliği örtük olarak 'any' türüne sahip ancak özelliğin set erişimcisi için kullanımdan daha iyi bir tür çıkarsanabilir.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "'{1}' türündeki '{0}' özelliği, '{2}' temel türündeki aynı özelliğe atanamaz.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "'{1}' türündeki '{0}' özelliği, '{2}' türüne atanamaz.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "'{1}' türündeki '{0}' özelliği, '{2}' türünün içinden erişilemeyen farklı bir üyeye başvuruyor.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "'{0}' özelliği bildirildi ancak değeri hiç okunmadı.", + "Property_0_is_incompatible_with_index_signature_2530": "'{0}' özelliği, dizin imzasıyla uyumsuz.", + "Property_0_is_missing_in_type_1_2324": "'{0}' özelliği '{1}' türünde değil.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "'{0}' özelliği, '{1}' türünde eksik ancak '{2}' türünde gereklidir.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "'{0}' özelliğinin özel tanımlayıcısı olduğundan özelliğe '{1}' sınıfı dışında erişilemiyor.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "'{0}' özelliği, '{1}' türünde isteğe bağlıdır, ancak '{2}' türünde gereklidir.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' özelliği özeldir ve yalnızca '{1}' sınıfı içinden erişilebilir.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "'{0}' özelliği, '{1}' türünde özel, '{2}' türünde özel değildir.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "'{0}' özelliği korunuyor ve yalnızca '{1}' sınıfının bir örneği üzerinden erişilebilir. Bu, '{2}' sınıfının bir örneğidir.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' özelliği korumalıdır ve yalnızca '{1}' sınıfı içinden ve alt sınıflarından erişilebilir.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' özelliği korumalıdır; ancak '{1}' türü, '{2}' öğesinden türetilmiş bir sınıf değildir.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "'{0}' özelliği '{1}' türünde korumalı, '{2}' türünde ise ortaktır.", + "Property_0_is_used_before_being_assigned_2565": "'{0}' özelliği atanmadan önce kullanıldı.", + "Property_0_is_used_before_its_initialization_2729": "'{0}' özelliği başlatılmadan önce kullanılıyor.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "'{0}' özelliği '{1}' türü üzerinde olamaz. Şunu mu demek istediniz: '{2}'?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX yayılma özniteliğine ait '{0}' özelliği, hedef özelliğe atanamaz.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "Dışarı aktarılan anonim sınıf türünün '{0}' özelliği, özel veya korumalı olmayabilir.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "Dışarı aktarılan arabirimin '{0}' özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "Dışarı aktarılan arabirimin '{0}' özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "'{1}' türündeki '{0}' özelliği '{2}' dizin türüne '{3}' atanamaz.", + "Property_0_was_also_declared_here_2733": "'{0}' özelliği de burada bildirildi.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "'{0}' özelliği '{1}' içindeki temel özelliğin üzerine yazacak. Bu bilerek yapılıyorsa bir başlatıcı ekleyin. Aksi takdirde, bir 'declare' değiştiricisi ekleyin veya gereksiz bildirimi kaldırın.", + "Property_assignment_expected_1136": "Özellik ataması bekleniyor.", + "Property_destructuring_pattern_expected_1180": "Özellik yok etme deseni bekleniyor.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "Özelliğin --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Property_or_signature_expected_1131": "Özellik veya imza bekleniyor.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "Özellik değeri yalnızca, dize sabit değeri, sayısal sabit değer, 'true', 'false', 'null', nesne sabit değeri veya dizi sabit değeri olabilir.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "'ES5' hedeflenirken, 'for-of' içindeki yinelenebilir öğeler için yayılma ve yok etmeye yönelik tam destek sağlayın.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "Dışarı aktarılan sınıfın '{0}' genel metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "Dışarı aktarılan sınıfın '{0}' genel metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "Dışarı aktarılan sınıfın '{0}' ortak özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "Dışarı aktarılan sınıfın '{0}' genel statik metodu, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, {2} dış modülündeki '{1}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "Dışarı aktarılan sınıfın '{0}' ortak statik özelliği, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "'{0}' tam adının başında '@param {object} {1}' olmadan bu ada izin verilmiyor.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "İşlev parametresi okunmadığında hata oluştur.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Belirtilen 'any' türüne sahip ifade ve bildirimlerde hata oluştur.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Örtük olarak 'any' türü içeren 'this' ifadelerinde hata tetikle.", + "Range_out_of_order_in_character_class_1517": "Aralık karakter sınıfında sıranın dışında.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "'{0}' etkinken bir türü yeniden dışarı aktarmak için 'export type' kullanmak gerekir.", + "React_components_cannot_include_JSX_namespace_names_2639": "React bileşenleri JSX ad alanı adlarını içeremez", + "Recommended_Options_6294": "Önerilen Seçenekler", + "Redirect_output_structure_to_the_directory_6006": "Çıktı yapısını dizine yeniden yönlendir.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "TypeScript tarafından otomatik olarak yüklenen projelerin sayısını azaltın.", + "Referenced_project_0_may_not_disable_emit_6310": "Başvurulan '{0}' projesi, yayma özelliğini devre dışı bırakamaz.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "Başvurulan proje '{0}' \"composite\": true ayarına sahip olmalıdır.", + "Referenced_via_0_from_file_1_1400": "'{1}' dosyasından '{0}' aracılığıyla başvuruldu", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "'--moduleResolution' 'node16' veya 'nodenext' olduğunda, bağıl içe aktarma yollarının ECMAScript içe aktarmalarında açık dosya uzantılarına ihtiyacı vardır. İçe aktarma yoluna bir uzantı eklemeyi düşünün.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Göreli içe aktarma yolları, '--moduleResolution' 'node16' veya 'nodenext' olduğunda ECMAScript içeri aktarmalarında açık dosya uzantılarına ihtiyaç duyar. Şunu mu demek istediniz: '{0}'?", + "Remove_a_list_of_directories_from_the_watch_process_6628": "İzleme işleminden dizinlerin listesini kaldırın.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "İzleme modu işlemesinden bir dosya listesini kaldırın.", + "Remove_all_unnecessary_override_modifiers_95163": "Tüm gereksiz 'override' değiştiricilerini kaldır", + "Remove_all_unnecessary_uses_of_await_95087": "Tüm gereksiz 'await' kullanımlarını kaldırın", + "Remove_all_unreachable_code_95051": "Tüm erişilemeyen kodları kaldır", + "Remove_all_unused_labels_95054": "Kullanılmayan tüm etiketleri kaldır", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "İlgili sorunları olan tüm ok işlev gövdelerinden ayraçları kaldır", + "Remove_braces_from_arrow_function_95060": "Ok işlevinden küme ayraçlarını kaldır", + "Remove_braces_from_arrow_function_body_95112": "Ok işlevi gövdesinden küme ayraçlarını kaldır", + "Remove_import_from_0_90005": "'{0}' öğesinden içeri aktarmayı kaldır", + "Remove_override_modifier_95161": "'override' değiştiricisini kaldır", + "Remove_parentheses_95126": "Parantezleri kaldır", + "Remove_template_tag_90011": "Şablon etiketini kaldırın", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "TypeScript dil sunucusundaki JavaScript dosyaları için toplam kaynak kodu boyutuna yönelik 20 MB sınırını kaldırın.", + "Remove_type_from_import_declaration_from_0_90055": "\"{0}\" içindeki içeri aktarma bildiriminden “type”ı kaldırın", + "Remove_type_from_import_of_0_from_1_90056": "\"{1}\" içindeki “{0}” içe aktarımından “type”ı kaldırın", + "Remove_type_parameters_90012": "Tür parametrelerini kaldırın", + "Remove_unnecessary_await_95086": "Gereksiz 'await' öğesini kaldırın", + "Remove_unreachable_code_95050": "Erişilemeyen kodları kaldır", + "Remove_unused_declaration_for_Colon_0_90004": "Kullanılmayan '{0}' bildirimini kaldırın.", + "Remove_unused_declarations_for_Colon_0_90041": "'{0}' için kullanılmayan bildirimleri kaldırın", + "Remove_unused_destructuring_declaration_90039": "Yapıyı bozan kullanılmayan bildirimi kaldır", + "Remove_unused_label_95053": "Kullanılmayan etiketi kaldır", + "Remove_variable_statement_90010": "Değişken deyimini kaldır", + "Rename_param_tag_name_0_to_1_95173": "“{0}” “@param” etiket adını “{1}” olarak yeniden adlandırın", + "Replace_0_with_Promise_1_90036": "'{0}' öğesini 'Promise<{1}>' ile değiştirin", + "Replace_all_unused_infer_with_unknown_90031": "Kullanılmayan tüm 'infer' öğelerini 'unknown' ile değiştirin", + "Replace_import_with_0_95015": "İçeri aktarma işlemini '{0}' ile değiştirin.", + "Replace_infer_0_with_unknown_90030": "'infer {0}' öğesini 'unknown' ile değiştirin", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "İşlevdeki tüm kod yolları bir değer döndürmediğinde hata bildir.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "switch deyiminde sonraki ifadelere geçiş ile ilgili hataları bildir.", + "Report_errors_in_js_files_8019": ".js dosyalarındaki hataları bildirin.", + "Report_errors_on_unused_locals_6134": "Kullanılmayan yerel öğelerdeki hataları bildirin.", + "Report_errors_on_unused_parameters_6135": "Kullanılmayan parametrelerdeki hataları bildirin.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Diğer araçların geçici olarak bildirim dosyaları oluşturabilmesi için dışarı aktarmalarda yeterli ek açıklama gerektir.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Öğe erişimlerini kullanmak için dizin imzalarından bildirilmemiş özellikler gerektirin.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Gerekli tür parametreleri, isteğe bağlı tür parametrelerini takip edemez.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "'{0}' modülünün çözümü '{1}' konumundaki önbellekte bulundu.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "'{0}' tür başvurusu yönergesinin çözümlemesi '{1}' konumundaki önbellekte bulundu.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Göreli olmayan ad çözümlenemedi; npm kitaplığı için yapılandırma güncelleştirmesi gerektirip gerekmediğini görmek için modern Düğüm çözümleme özellikleri ile deneniyor.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Göreli olmayan ad çözümlenemedi; projenin yapılandırma güncelleştirmesi gerektirip gerektirmediğini görmek için '--moduleResolution bundler' ile deneniyor.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "'Keyof' değerini yalnızca dize değerli özellik adlarına (sayılar veya simgeler olmadan) çözümleyin.", + "Resolved_under_condition_0_6414": "'{0}' koşulu altında çözümlendi.", + "Resolving_in_0_mode_with_conditions_1_6402": "{0} modunda {1} koşullarıyla çözümleniyor.", + "Resolving_module_0_from_1_6086": "======== '{0}' modülü '{1}' öğesinden çözümleniyor. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "'{0}' modül adı, '{1}' - '{2}' temel url'sine göre çözümleniyor.", + "Resolving_real_path_for_0_result_1_6130": "'{0}' için gerçek yol çözümleniyor, sonuç: '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya: '{1}', kök dizini: '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== '{0}' tür başvuru yönergesi çözümleniyor, içeren dosya '{1}', kök dizin ayarlanmadı. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin: '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== '{0}' tür başvurusu yönergesi çözümleniyor, kapsayan dosya ayarlanmadı, kök dizin ayarlanmadı. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Özel typeRoots belirten program için tür başvurusu yönergesi çözümleniyor, 'node_modules' klasöründe arama atlanıyor.", + "Resolving_with_primary_search_path_0_6121": "Birincil arama yolu '{0}' kullanılarak çözümleniyor.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "'{0}' rest parametresi, örtük olarak 'any[]' türüne sahip.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "'{0}' REST parametresi örtük olarak 'any[]' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Rest_types_may_only_be_created_from_object_types_2700": "Rest türleri yalnızca nesne türlerinden oluşturulabilir.", + "Return_type_annotation_circularly_references_itself_2577": "Dönüş türü ek açıklaması döngüsel olarak kendine başvuruyor.", + "Return_type_must_be_inferred_from_a_function_95149": "Dönüş türü bir işlevden çıkarsanmalıdır", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "Dışarı aktarılan arabirimdeki çağrı imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "Dışarı aktarılan arabirimdeki oluşturucu imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "Oluşturucu imzasının dönüş türü, sınıfın örnek türüne atanabilir olmalıdır.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "Dışarı aktarılan işlevin dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "Dışarı aktarılan işlevin dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "Dışarı aktarılan işlevin dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "Dışarı aktarılan arabirimdeki dizin imzasının dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "Dışarı aktarılan arabirimdeki dizin imzasının dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "Dışarı aktarılan arabirimdeki metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "Dışarı aktarılan arabirimdeki metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{2}' dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "Dışarı aktarılan sınıftaki genel alıcı '{0}' için dönüş türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "Dışarı aktarılan sınıftaki ortak metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{2}' dış modülündeki '{1}' adına sahip veya bu adı kullanıyor ancak adlandırılamıyor.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{2}' özel modülündeki '{1}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "Dışarı aktarılan sınıftaki genel statik alıcı '{0}' için dönüş türü, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' dış modülündeki '{0}' adına sahip veya bu adı kullanıyor, ancak adlandırılamıyor.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{1}' özel modülündeki '{0}' adına sahip veya bu adı kullanıyor.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "Dışarı aktarılan sınıftaki ortak statik metodun dönüş türü, '{0}' özel adına sahip veya bu adı kullanıyor.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Eski programın '{1}' üzerindeki '{0}' modülünün çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{3}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "'{2}' konumundaki önbellekte bulunan '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{4}' ile '{3}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, çözülmedi.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla '{2}' olarak çözüldü.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Eski programın '{1}' üzerindeki '{0}' tür başvuru yönergesi çözümlemesinin yeniden kullanılması, başarıyla Paket Kimliği '{3}' ile '{2}' olarak çözüldü.", + "Rewrite_all_as_indexed_access_types_95034": "Tümünü dizinlenmiş erişim türleri olarak yeniden yaz", + "Rewrite_as_the_indexed_access_type_0_90026": "Dizine eklenmiş erişim türü '{0}' olarak yeniden yaz", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "'.ts', '.tsx', '.mts' ve '.cts' dosya uzantılarını, çıkış dosyalarındaki JavaScript eşdeğerlerine göreli içeri aktarma yollarında yeniden yazın.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Sol işlenen hiçbir zaman null olmadığından ?? sağ işlenenine ulaşılamıyor.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Kök dizin belirlenemiyor, birincil arama yolları atlanıyor.", + "Root_file_specified_for_compilation_1427": "Derleme için belirtilen kök dosyası", + "STRATEGY_6039": "STRATEJİ", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Projelerin artımlı derlenmesini sağlamak için .tsbuildinfo dosyalarını kaydedin.", + "Saw_non_matching_condition_0_6405": "Eşleşmeyen koşul '{0}' görüldü.", + "Scoped_package_detected_looking_in_0_6182": "Kapsamlı paket algılandı, '{0}' içinde aranıyor", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Geri dönüş uzantıları için tüm üst node_modules dizinleri aranıyor: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Tercih edilen uzantılar için tüm üst node_modules dizinleri aranıyor: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Ayrıca bkz. https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "Seçim geçerli bir veya daha fazla deyim değil", + "Selection_is_not_a_valid_type_node_95133": "Seçim geçerli bir tür düğümü değil", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Yayılan JavaScript için JavaScript dil sürümünü ayarlayın ve uyumlu kitaplık bildirimlerini ekleyin.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "TypeScript’ten ileti dilini ayarlayın. Bu, yaymayı etkilemez.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Yapılandırma dosyanızdaki 'module' seçeneğini '{0}' olarak ayarlayın", + "Set_the_newline_character_for_emitting_files_6659": "Dosyaları yaymak için yeni satır karakterini ayarlayın.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Yapılandırma dosyanızdaki 'target' seçeneğini '{0}' olarak ayarlayın", + "Setters_cannot_return_a_value_2408": "Ayarlayıcılar bir değer döndüremez.", + "Show_all_compiler_options_6169": "Tüm derleyici seçeneklerini gösterin.", + "Show_diagnostic_information_6149": "Tanılama bilgilerini gösterin.", + "Show_verbose_diagnostic_information_6150": "Ayrıntılı tanılama bilgilerini gösterin.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Nelerin derleneceğini (veya '--clean' ile belirtilmişse silineceğini) göster", + "Signature_0_must_be_a_type_predicate_1224": "'{0}' imzası bir tür koşulu olmalıdır.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "İmza bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Yukarı akış projesinde hata nedeniyle aşağı akış projelerini derlemeyi atla.", + "Skip_type_checking_all_d_ts_files_6693": "Tüm .d.ts dosyalarında tür denetimini atlayın.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "TypeScript ile birlikte gelen .d.ts dosyaları için tür denetimini atlayın.", + "Skip_type_checking_of_declaration_files_6012": "Bildirim dosyalarının tür denetimini atla.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "'{0}' projesinin '{1}' bağımlılığında hatalar olduğundan projenin derlenmesi atlanıyor", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "'{0}' projesinin '{1}' bağımlılığı derlenmediğinden projenin derlenmesi atlanıyor", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Mutlak bir URI gibi görünen '{0}' modül türü atlanıyor, hedef dosya türleri: {1}.", + "Source_from_referenced_project_0_included_because_1_specified_1414": "'{1}' belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "'--module' 'none' olarak belirtildiğinden, başvurulan '{0}' projesinin kaynağı dahil edildi", + "Source_has_0_element_s_but_target_allows_only_1_2619": "Kaynakta {0} öğe var ancak hedef yalnızca {1} öğeye izin veriyor.", + "Source_has_0_element_s_but_target_requires_1_2618": "Kaynakta {0} öğe var ancak hedef {1} öğe gerektiriyor.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "Kaynak, hedefteki {0} konumunda bulunan gerekli öğe için eşleşme sağlamıyor.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "Kaynak, hedefteki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe için eşleşme sağlamıyor.", + "Specify_ECMAScript_target_version_6015": "ECMAScript hedef sürümünü belirtin.", + "Specify_JSX_code_generation_6080": "JSX kodu oluşturmayı belirtin.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Tüm çıktıları tek bir JavaScript dosyasında paketleyen bir dosya belirt. 'declaration' değeri true ise, tüm .d.ts çıktısını paketleyen bir dosya da belirtir.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Derlemeye dahil edilecek dosyalarla eşleşen glob desenlerinin bir listesini belirtin.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Dahil edilecek dil hizmeti eklentilerinin listesini belirtin.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Hedef çalışma zamanı ortamını açıklayan bir paket kitaplık bildirim dosyası kümesi belirtin.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "İçeri aktarmaları ek arama konumlarına yeniden eşleyen bir girdi kümesi belirtin.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Projeler için yolları belirten nesnelerin bir dizisini belirtin. Proje başvurularında kullanılır.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Tüm yayılan dosyalar için bir çıkış klasörü belirtin.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Yalnızca türler için kullanılan içeri aktarmalar için üretme/denetleme davranışını belirt.", + "Specify_file_to_store_incremental_compilation_information_6380": "Artımlı derleme bilgilerinin depolanacağı dosyayı belirtin", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "TypeScript’in belirli bir modül belirticisinden bir dosyayı nasıl arayacağını belirtin.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Özyinelemeli dosya izleme işlevselliği olmayan sistemlerde dizinlerin nasıl izleneceğini belirtin.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "TypeScript izleme modunun nasıl çalıştığını belirtin.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Derlemeye dahil edilecek kitaplık dosyalarını belirtin.", + "Specify_module_code_generation_6016": "Modül kodu oluşturmayı belirtin.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "'jsx: react-jsx*' kullanırken JSX fabrika işlevlerini içeri aktarmak için kullanılan modül belirticisini belirt.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "'./node_modules/@types' gibi davranan birden çok klasör belirt.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Ayarlarının devralındığı temel yapılandırma dosyalarına yönelik bir veya daha fazla yol ya da düğüm modülü başvurusu belirtin.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Bildirim dosyalarının otomatik olarak alınması için seçenekleri belirtin.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Dosya sistemi olayları kullanılarak oluşturulamadığında yoklama izlemesi oluşturma stratejisini belirtin: 'FixedInterval' (varsayılan), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Özyinelemeli izlemeyi yerel olarak desteklemeyen platformlarda dizini izleme stratejisini belirtin: 'UseFsEvents' (varsayılan), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Dosya izleme stratejisini belirtin: 'FixedPollingInterval' (varsayılan), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "React JSX yayma hedeflenirken parçalar için kullanılacak JSX Parça başvurusunu belirtin, örneğin 'React.Fragment' veya 'Fragment'.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "'React.createElement' veya 'h' gibi 'react' JSX emit hedeflerken kullanılacak JSX fabrika işlevini belirtin.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "React JSX üretme hedeflenirken kullanılacak JSX fabrika işlevini belirtin; örneğin 'React.createElement' veya 'h'.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "'jsxFactory' derleme seçeneği belirtilmiş olarak 'react' JSX yaymasını hedeflerken kullanılacak JSX parçası fabrika işlevini belirtin (ör. 'Fragment').", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Göreli olmayan modül adlarını çözümlemek için temel dizini belirtin.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Dosyalar gösterilirken kullanılacak satır sonu dizisini belirtin: 'CRLF' (dos) veya 'LF' (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Hata ayıklayıcının TypeScript dosyalarını kaynak konumlar yerine nerede bulması gerektiğini belirtin.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Hata ayıklayıcının, eşlem dosyalarını üretilen konumlar yerine nerede bulması gerektiğini belirtin.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "'node_modules' öğesinden JavaScript dosyaları teslim almak için kullanılan maksimum klasör derinliğini belirtin. Yalnızca 'allowJs' ile geçerlidir.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "'jsx' ve 'jsxs' fabrika işlevlerini içeri aktarmak için kullanılacak modül tanımlayıcısını (ör. react) belirtin.", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "'createElement' için çağrılan nesneyi belirtin. Bu, yalnızca 'react' JSX üretme hedeflenirken geçerlidir.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Oluşturulan bildirim dosyaları için çıkış dizinini belirtin.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": ".tsbuildinfo artımlı derleme dosyasının yolunu belirtin.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Giriş dosyalarının kök dizinini belirtin. Çıkış dizininin yapısını --outDir ile denetlemek için kullanın.", + "Specify_the_root_folder_within_your_source_files_6690": "Kaynak dosyalarınızda kök klasörü belirtin.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Başvuru kaynak kodunu bulmak için hata ayıklayıcıların kök yolunu belirtin.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Bir kaynak dosyada başvurulmadan eklenecek tür paketi adlarını belirtin.", + "Specify_what_JSX_code_is_generated_6646": "Oluşturulacak JSX kodunu belirtin.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Sistemde yerel dosya izleyicileri tükenirse izleyicinin kullanması gereken yaklaşımı belirtin.", + "Specify_what_module_code_is_generated_6657": "Oluşturulan modül kodunu belirtin.", + "Split_all_invalid_type_only_imports_1367": "Geçersiz tüm yalnızca tür içeri aktarmalarını bölün", + "Split_into_two_separate_import_declarations_1366": "İki ayrı içeri aktarma bildirimine bölün", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "'new' ifadelerindeki yayılma işleci yalnızca ECMAScript 5 ve üzeri hedeflenirken kullanılabilir.", + "Spread_types_may_only_be_created_from_object_types_2698": "Yayılma türleri yalnızca nesne türlerinden oluşturulabilir.", + "Starting_compilation_in_watch_mode_6031": "Derleme, izleme modunda başlatılıyor...", + "Statement_expected_1129": "Deyim bekleniyor.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Çevresel bağlamlarda deyimlere izin verilmez.", + "Static_members_cannot_reference_class_type_parameters_2302": "Statik üyeler sınıf türündeki parametrelere başvuramaz.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "'{0}' statik özelliği, '{1}' oluşturucu işlevinin yerleşik özelliği olan 'Function.{0}' ile çakışıyor.", + "Stricter_Typechecking_Options_6292": "Daha Katı Tür Denetimi Seçenekleri", + "String_literal_expected_1141": "Dize sabit değeri bekleniyor.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "'--module' bayrağı 'es2015' veya 'es2020' olarak ayarlandığında, sabit değerli dize içeri ve dışarı aktarma adları desteklenmez.", + "String_literal_with_double_quotes_expected_1327": "Çift tırnak içine alınmış bir dize sabit değeri bekleniyor.", + "Style_Options_6293": "Stil Seçenekleri", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Renk ve bağlam kullanarak hataların ve iletilerin stilini belirleyin (deneysel).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Eksi işareti varken alt sayfa bayrakları bulunmalıdır.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Ardışık özellik bildirimleri aynı türe sahip olmalıdır. '{0}' özelliği '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Ardışık değişken bildirimleri aynı türe sahip olmalıdır. '{0}' değişkeni '{1}' türünde olmalıdır, ancak burada '{2}' türüne sahip.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "'{1}' deseni için '{0}' alternatifinin türü hatalı; beklenen: 'string' alınan: '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "'{1}' desenindeki '{0}' alternatifi en fazla bir '*' karakteri içerebilir.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "'{0}' deseni için değişimler bir dizi olmalıdır.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "'{0}' deseni için değiştirme değeri boş bir dizi olamaz.", + "Successfully_created_a_tsconfig_json_file_6071": "tsconfig.json dosyası başarıyla oluşturuldu.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "Super çağrılarına oluşturucu dışında veya oluşturucu içindeki iç içe işlevlerde izin verilmez.", + "Suppress_excess_property_checks_for_object_literals_6072": "Nesne sabit değerlerine ait fazla özellik denetimlerini gösterme.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Dizin imzaları olmayan nesneler için dizin oluştururken noImplicitAny hatalarını gösterme.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Dizin imzası olmayan nesnelerin dizinini oluştururken 'noImplicitAny' hatalarını gizle.", + "Switch_each_misused_0_to_1_95138": "Yanlış kullanılan tüm '{0}' öğelerini '{1}' olarak değiştir", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Geri çağırmaları eşzamanlı olarak çağırın ve özyinelemeli izlemeyi yerel olarak desteklemeyen platformlardaki dizin izleyicilerinin durumunu güncelleştirin.", + "Syntax_Colon_0_6023": "Söz dizimi: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "'{0}' etiketi en az '{1}' bağımsız değişken bekliyor, ancak '{2}' JSX fabrikası en fazla '{3}' tane sağlıyor.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "İsteğe bağlı bir zincirde etiketli şablon ifadelerine izin verilmiyor.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "Hedef yalnızca {0} öğeye izin veriyor ancak kaynakta daha fazlası olabilir.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "Hedef {0} öğe gerektiriyor ancak kaynakta daha az sayıda öğe olabilir.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "Hedef imza çok az bağımsız değişken sağlıyor. {0} veya daha fazla bekleniyordu ancak {1} alındı.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' değiştiricisi yalnızca TypeScript dosyalarında kullanılabilir.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "'{0}' işleci, 'symbol' türüne uygulanamaz.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "'{0}' işlecine boole türü için izin verilmez. Bunun yerine '{1}' kullanmayı göz önünde bulundurun.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "Asenkron bir yineleyicinin '{0}' özelliği bir metot olmalıdır.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "Yineleyicinin '{0}' özelliği bir metot olmalıdır.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' türü başka çok az sayıda türe atanabilir. Bunun yerine 'any' türünü mü kullanmak istemiştiniz?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "Unicode (u) bayrağı ve Unicode Kümeleri (v) bayrağı aynı anda ayarlanamaz.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "ES5'te bulunan bir ok işlevinde 'arguments' nesnesine başvurulamaz. Standart bir işlev ifadesi kullanmayı göz önünde bulundurun.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "'arguments' nesnesine ES5'teki asenkron bir işlev veya metotta başvurulamaz. Standart bir işlev veya metot kullanmayı düşünün.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' deyiminin gövdesi boş deyim olamaz.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "Çağrı, bu uygulamada başarılı olabilirdi, ancak aşırı yüklemelerin uygulama imzaları dışarıdan görünmüyor.", + "The_character_set_of_the_input_files_6163": "Giriş dosyalarının karakter kümesi.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "Kapsayıcı ok işlevi, 'this' öğesinin genel değerini yakalar.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "İçeren işlev veya modül gövdesi, denetim akışı analizi için çok büyük.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "Geçerli dosya bir CommonJS modülüdür ve en üst düzeyde 'await'i kullanamaz.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "Geçerli dosya, içe aktarma işlemlerinin 'require' çağrıları üreteceği bir CommonJS modülüdür; ancak başvurulan dosya bir ECMAScript modülüdür ve 'require' ile içe aktarılamaz. Bunun yerine dinamik bir 'import(\"{0}\")' çağrısı yazmayı deneyin.", + "The_current_host_does_not_support_the_0_option_5001": "Mevcut ana bilgisayar '{0}' seçeneğini desteklemiyor.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "Büyük olasılıkla kullanmayı amaçladığınız '{0}' bildirimi burada tanımlanır", + "The_declaration_was_marked_as_deprecated_here_2798": "Bildirim burada kullanım dışı olarak işaretlendi.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "Beklenen tür, burada '{1}' türünde bildirilen '{0}' özelliğinden geliyor", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "Beklenen tür bu imzanın dönüş türünden geliyor.", + "The_expected_type_comes_from_this_index_signature_6501": "Beklenen tür bu dizin imzasından geliyor.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "Bir dışarı aktarma ataması ifadesi, çevresel bağlamda bir tanımlayıcı veya tam ad olmalıdır.", + "The_file_is_in_the_program_because_Colon_1430": "Dosya, şu nedenle programın içinde:", + "The_files_list_in_config_file_0_is_empty_18002": "'{0}' yapılandırma dosyasındaki 'dosyalar' listesi boş.", + "The_first_export_default_is_here_2752": "İlk dışarı aktarma varsayılanı buradadır.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise'in 'then' metodunun ilk parametresi, bir geri arama parametresi olmalıdır.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "'JSX.{0}' genel türü birden fazla özelliğe sahip olamaz.", + "The_implementation_signature_is_declared_here_2750": "Uygulama imzası burada bildirilir.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "CommonJS çıkışında oluşturulacak dosyalarda 'import.meta' meta özelliğine izin verilmiyor.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "\"import.meta\" meta özelliğine yalnızca \"--module\" seçeneği \"es2020\", \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", 'node20' veya \"nodenext\" olduğunda izin verilir.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' öğesinin çıkarsanan türü, '{1}' başvurusu olmadan adlandırılamaz. Bu büyük olasılıkla taşınabilir değildir. Tür ek açıklaması gereklidir.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "Çıkarsanan '{0}' türü, önemsiz olarak seri hale getirilemeyen döngüsel yapıya sahip bir türe başvurur. Tür ek açıklaması gerekir.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "Çıkarsanan '{0}' türü, erişilemeyen bir '{1}' türüne başvuruyor. Tür ek açıklaması gereklidir.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "Bu düğümün çıkarsanan türü, derleyicinin seri hale getireceği maksimum uzunluğu aşıyor. Açık tür ek açıklaması gerekiyor.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' bildiriminin başlatıcısı ya '[Symbol.dispose]()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' bildiriminin başlatıcısı ya '[Symbol.asyncDispose]()' veya '[Symbol.dispose]5D;()' metoduna sahip bir nesne olmalı ya da 'null' veya 'undefined' olmalıdır.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "'{1}' özelliği birden çok destekçide bulunduğundan ve bazılarında özel olduğundan, '{0}' kesişimi 'never' değerine düşürüldü.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "'{1}' özelliği bazı bileşenlerde çakışan türlere sahip olduğundan '{0}' kesişimi 'never' değerine düşürüldü.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' anahtar sözcüğü, yalnızca derleyicinin sağladığı iç türleri bildirmek için kullanılabilir.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "JSX parçalarının 'jsxFactory' derleyici seçeneği ile kullanılabilmesi için 'jsxFragmentFactory' derleme seçeneği belirtilmelidir.", + "The_last_overload_gave_the_following_error_2770": "Son aşırı yükleme aşağıdaki hatayı verdi.", + "The_last_overload_is_declared_here_2771": "Son aşırı yükleme burada bildirilir.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' deyiminin sol tarafı yok etme deseni olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' ifadesinin sol tarafı 'using' bildirimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' ifadesinin sol tarafı 'await using' bildirimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' deyiminin sol tarafı 'string' veya 'any' türünde olmalıdır.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' deyiminin sol tarafında tür ek açıklaması kullanılamaz.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' deyiminin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' deyiminin sol tarafı, asenkron olamaz.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' deyiminin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "Aritmetik işlemin sol tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "Atama ifadesinin sol tarafı, isteğe bağlı bir özellik erişimi olamaz.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "Atama ifadesinin sol tarafında bir değişken veya özellik erişimi bulunmalıdır.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "Bir 'instanceof' ifadesinin sol tarafı, sağ tarafın '[Symbol.hasInstance]' metodunun ilk bağımsız değişkenine atanabilir olmalıdır.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' ifadesinin sol tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "Kullanıcıya ileti görüntülenirken kullanılacak yerel ayar (örn. 'tr-tr')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "node_modules altında arama yapmak ve JavaScript dosyalarını yüklemek için en yüksek bağımlılık derinliği.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' operatörünün işleneni özel bir tanımlayıcı olamaz.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' operatörünün işleneni, salt okunur bir özellik olamaz.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' operatörünün işleneni, bir özellik başvurusu olmalıdır.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' operatörünün işleneni isteğe bağlı olmalıdır.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "Artırma veya eksiltme operatörünün işleneni, isteğe bağlı bir özellik erişimi olamaz.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "Artırma veya eksiltme operatörünün işleneni, bir değişken veya özellik erişimi olmalıdır.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "Ayrıştırıcı, buradaki '{0}' belirteciyle eşleştirmek için bir '{1}' bulmayı bekliyordu.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' dışa aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleyici seçeneğini sağlayın.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "Proje kökü belirsizdir, ancak '{1}' dosyasındaki '{0}' içe aktarma haritası girişini çözmek için gereklidir. Belirsizliği gidermek için `rootDir` derleme seçeneğini sağlayın.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "'{0}' özelliği aynı yazımı içeren başka bir özel tanımlayıcı tarafından gölgelendiğinden bu sınıf içindeki '{1}' türü üzerinde bu özelliğe erişilemiyor.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "Parametre dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "Özellik dekoratör işlevine ait dönüş türü 'void' veya 'any' olmalıdır.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "Zaman uyumsuz bir işlevin dönüş türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "Zaman uyumsuz bir işlevin ya da metodun döndürme türü, genel Promise türü olmalıdır.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "Asenkron bir işlevin ya da metodun dönüş türü, genel Promise türü olmalıdır. 'Promise<{0}>' yazmak mı istediniz?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' deyiminin sağ tarafı 'any' türünde, bir nesne türü veya tür parametresi olmalıdır ancak burada '{0}' türüne sahip.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "Aritmetik işlemin sağ tarafı, 'any', 'number', 'bigint' veya bir sabit listesi türünde olmalıdır.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' ifadesinin sağ tarafı ya 'any' türünde, bir sınıf, işlev veya 'Function' arayüz türüne atanabilir başka bir tür ya da 'Symbol.hasInstance' metoduna sahip bir nesne türü olmalıdır.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' ifadesinin sağ tarafı bir örnek oluşturma ifadesi olmamalıdır.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' dosyasının kök değeri bir nesne olmalıdır.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör {0} bekliyor.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "Çalışma zamanı, dekoratörü {1} bağımsız değişkenleriyle çağıracak ancak dekoratör en azından {0} bekliyor.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' için gölgeleme bildirimi burada tanımlanır", + "The_signature_0_of_1_is_deprecated_6387": "'{1}' öğesinin '{0}' imzası kullanım dışı bırakıldı.", + "The_specified_path_does_not_exist_Colon_0_5058": "Belirtilen yol yok: '{0}'.", + "The_tag_was_first_specified_here_8034": "Etiket ilk olarak burada belirtildi.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "Nesne REST atamasının hedefi, isteğe bağlı bir özellik erişimi olamaz.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "Nesne geri kalan özellik atamasının hedefi, bir değişken veya özellik erişimi olmalıdır.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "'{0}' türünün 'this' bağlamı, metodun '{1}' türündeki 'this' değerine atanamaz.", + "The_this_types_of_each_signature_are_incompatible_2685": "İmzaların 'this' türleri uyumsuz.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "'{0}' türü 'readonly' olduğundan değiştirilebilir '{1}' türüne atanamıyor.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "Dışarı aktarma deyimindeki 'dışarı aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir dışarı aktarma üzerinde kullanılamaz.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "İçeri aktarma deyimindeki 'içeri aktarma türü' kullanılırken 'tür' değiştiricisi adlandırılmış bir içeri aktarma üzerinde kullanılamaz.", + "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "İşlev bildiriminin türü işlevin imzasıyla eşleşmelidir.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "'{0}' özelliği seri hale getirilemediğinden bu düğüm türü seri hale getirilemiyor.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "Asenkron yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip bir tür için promise olmalıdır.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "Bir yineleyicinin '{0}()' metodu tarafından döndürülen tür, 'value' özelliğine sahip olmalıdır.", + "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' türleri bu türler arasında uyumsuz.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' tarafından döndürülen türler, bu türler arasında uyumsuz.", + "The_value_0_cannot_be_used_here_18050": "'{0}' değeri burada kullanılamaz.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' deyiminin değişken bildirimi bir başlatıcıya sahip olamaz.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "'with' ifadesi desteklenmiyor. 'with' bloklarındaki tüm simgeler 'any' türüne sahip olacaktır.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' konumunda türler var, ancak bu sonuç geçerli 'moduleResolution' ayarınız altında çözümlenemiyor. 'node16', 'nodenext' veya 'bundler' öğesine güncelleştirmeyi düşünün.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' konumunda türler var ancak package.json \"exports\" dikkate alındığında bu sonuç çözümlenemedi. '{1}' kitaplığının package.json dosyasını veya türlerini güncelleştirmesi gerekiyor olabilir.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Bu normal ifadede '{0}' adlı yakalama grubu yok.", + "There_is_nothing_available_for_repetition_1507": "Yineleme için kullanılabilecek bir şey yok.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Bu JSX etiketi '{0}' öğesinin kapsamda olmasını gerektiriyor, ancak bulunamadı.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Bu JSX etiketi, '{0}' modül yolunun mevcut olmasını gerektiriyor, ancak hiçbiri bulunamadı. Uygun paket için türlerin yüklü olduğundan emin olun.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "Bu JSX etiketinin '{0}' özelliği, '{1}' türünde tek bir alt öğe bekliyor ancak birden çok alt öğe sağlandı.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "Bu JSX etiketinin '{0}' özelliği, birden çok alt öğe gerektiren '{1}' türünü bekliyor ancak yalnızca tek bir alt öğe sağlandı.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca yakalama grupları yok.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Bu geri başvuru, var olmayan bir gruba başvuruyor. Bu normal ifadede yalnızca {0} yakalama grubu var.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Bu ikili ifade hiçbir zaman boş değerli değildir. Parantezler mi eksik?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Bu karakter düzenli bir ifadede kaçış işareti ile kullanılamaz.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "'{0}' ve '{1}' türlerinde çakışma olmadığından bu karşılaştırma yanlışlıkla yapılmış gibi görünüyor.", + "This_condition_will_always_return_0_2845": "Bu koşul her zaman '{0}' döndürür.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "JavaScript nesneleri değer göre değil başvuruya göre karşılaştırdığından bu koşul her zaman '{0}' değerini döndürür.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Bu '{0}' her zaman tanımlandığı için bu koşul her zaman doğru olacaktır.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "İşlev her zaman tanımlı olduğundan bu koşul her zaman true döndürür. Bunun yerine işlevi çağırmayı mı istediniz?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Bu oluşturucu işlevi bir sınıf bildirimine dönüştürülebilir.", + "This_expression_is_always_nullish_2871": "Bu ifade her zaman boş değerlidir.", + "This_expression_is_never_nullish_2881": "Bu ifade hiçbir zaman boş gibi değildir.", + "This_expression_is_not_callable_2349": "Bu ifade çağrılabilir değil.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Bu ifade 'get' erişimcisi olduğundan çağrılamaz. Bunu '()' olmadan mı kullanmak istiyorsunuz?", + "This_expression_is_not_constructable_2351": "Bu ifade oluşturulabilir değil.", + "This_file_already_has_a_default_export_95130": "Bu dosyanın zaten varsayılan bir dışarı aktarması var", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Başka bir projeye çözümlendiğinden ve projelerin çıkış dosyaları arasındaki göreli yol, giriş dosyaları arasındaki göreli yol ile aynı olmadığından, bu içeri aktarma yolunun yeniden yazılması güvenli değildir.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Bu içeri aktarma, giriş TypeScript dosyasına çözümlemek için bir '{0}' uzantısı kullanıyor, ancak göreli bir yol olmadığından yayın sırasında yeniden yazılmayacak.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Bu, genişletilmekte olan bildirimdir. Genişleten bildirimi aynı dosyaya taşımayı düşünün.", + "This_kind_of_expression_is_always_falsy_2873": "Bu ifade türü her zaman yanlıştır.", + "This_kind_of_expression_is_always_truthy_2872": "Bu ifade türü her zaman doğrudur.", + "This_may_be_converted_to_an_async_function_80006": "Bu, asenkron bir işleve dönüştürülebilir.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Bu üye, '{0}' temel sınıfında bildirilmediğinden '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' etiketi olan bir JSDoc yorumuna sahip olamaz. '{1}' öğesini mi kastettiniz?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Kapsayan sınıfı '{0}' başka bir sınıfı genişletmediğinden, bu üye '@override' etiketi olan bir JSDoc yorumuna sahip olamaz.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Ad dinamik olduğundan bu üye '@override' etiketi içeren bir JSDoc yorumuna sahip olamaz.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Bu üye '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Bu üye, '{0}' temel sınıfında bildirilmediğinden 'override' değiştiricisine sahip olamaz. '{1}' öğesini mi kastettiniz?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Kapsayan '{0}' sınıfı başka bir sınıfı genişletmediğinden bu üye 'override' değiştiricisine sahip olamaz.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Adı dinamik olduğundan bu üyenin 'override' değiştiricisi olamaz.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu üyenin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Bu üye, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Bu üye, '{0}' temel sınıfında bildirilen soyut bir metodu geçersiz kıldığından 'override' değiştiricisine sahip olmalıdır.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Bu modüle yalnızca '{0}' bayrağını açıp modülün varsayılan dışarı aktarma işlemine başvurarak ECMAScript içeri/dışarı aktarma işlemleri ile başvurulabilir.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Bu modül, 'export =' ile bildirildi ve yalnızca '{0}' bayrağı kullanılırken varsayılan bir içeri aktarmayla kullanılabilir.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Bu işlem basitleştirilebilir. Bu vardiya `{0} {1} {2}` ile aynı.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Bu aşırı yükleme, dönüş türü ek açıklaması içermediğinden '{0}' türünü örtük olarak döndürür.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Bu aşırı yükleme imzası, uygulama imzasıyla uyumlu değil.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Bu parametreye 'use strict' yönergesi ile izin verilmiyor.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "' {0}' temel sınıfındaki bir üyeyi geçersiz kıldığından, bu parametre özelliğinin '@override' etiketi olan bir JSDoc yorumu olmalıdır.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Bu parametre özelliği, '{0}' temel sınıfındaki bir üyeyi geçersiz kıldığından bir 'override' değiştiricisi içermelidir.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Bu normal ifade bayrağı bir alt örüntü içinde değiştirilemez.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Bu normal ifade bayrağı, yalnızca '{0}' veya üzeri hedeflenirken kullanılabilir.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Bu göreli içeri aktarma yolu bir dosya adı gibi görünse de aslında \"{0}\" olarak çözümlendiğinden yolun yeniden yazılması güvenli değildir.", + "This_spread_always_overwrites_this_property_2785": "Bu yayılma her zaman bu özelliğin üzerine yazar.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "'erasableSyntaxOnly' etkinleştirildiğinde bu söz dizimi kullanılamaz.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Sonuna virgül veya açık kısıtlama ekleyin.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Bu söz dizimi, .mts veya .cts uzantısı içeren dosyalarda ayrılmıştır. Bunun yerine `as` ifadesi kullanın.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Bu söz dizimi, içeri aktarılan bir yardımcı gerektiriyor ancak '{0}' modülü bulunamıyor.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Bu söz dizimi, '{0}' içinde bulunmayan '{1}' adlı içeri aktarılmış bir yardımcı gerektirir. '{0}' sürümünüzü yükseltmeyi deneyin.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Bu söz dizimi, '{0}' içindeki yardımcı ile uyumlu olmayan, {2} parametreye sahip '{1}' adlı içeri aktarılan yardımcıyı gerektiriyor. '{0}' sürümünüzü yükseltmeyi düşünün.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Bu tür parametresinin bir `extends {0}` kısıtlamasına ihtiyacı olabilir.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "'import' çağrısının bu kullanımı geçersiz. 'import()' çağrıları yazılabilir ancak ayraç içermeleri gerekir ve tür bağımsız değişkenleri içeremezler.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, '{0}' dizinine `\"type\": \"module\"` alanı ekleyin.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya '{1}' dizinine ''type': 'module'' alanı ekleyin.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için dosya uzantısını '{0}' olarak değiştirin veya `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Bu dosyayı bir ECMAScript modülüne dönüştürmek için, `{ \"type\": \"module\" }` ile yerel bir package.json dosyası oluşturun.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "Üst düzey \"await\" ifadelerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "Üst düzey \"await using\" ifadelerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts dosyalarındaki üst düzey bildirimler bir 'declare' veya 'export' değiştiricisi ile başlamalıdır.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Üst düzey \"for await\" döngülerine yalnızca \"module\" seçeneği; \"es2022\", \"esnext\", \"system\", \"node16\", \"node18\", \"node20\", \"nodenext\" veya \"preserve\" olarak ayarlandığında ve \"target\" seçeneği; \"es2017\" veya üzeri olarak ayarlandığında izin verilir.", + "Trailing_comma_not_allowed_1009": "Sona eklenen virgüle izin verilmez.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Her dosyayı ayrı bir modül olarak derleyin ('ts.transpileModule' gibi).", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Varsa `npm i --save-dev @types/{1}` deneyin veya `declare module '{0}';` deyimini içeren yeni bir bildirim (.d.ts) dosyası ekleyin", + "Trying_other_entries_in_rootDirs_6110": "'rootDirs' içindeki diğer girişler deneniyor.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "'{0}' alternatifi deneniyor, aday modül konumu: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "'{1}' uzunluğundaki '{0}' demet türü, '{2}' dizininde öğe içermiyor.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Demet türü bağımsız değişkenleri döngüsel olarak kendisine başvuruyor.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "'{0}' türü yalnızca '--downlevelIteration' bayrağı kullanılarak veya '--target' için 'es2015' ya da üzeri kullanıldığında yinelenebilir.", + "Type_0_cannot_be_used_as_an_index_type_2538": "'{0}' türü, dizin türü olarak kullanılamaz.", + "Type_0_cannot_be_used_to_index_type_1_2536": "'{0}' türü, '{1}' türünü dizinlemek için kullanılamaz.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "'{0}' türü, '{1}' kısıtlamasını karşılamıyor.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "'{0}' türü, beklenen '{1}' türünü karşılamıyor.", + "Type_0_has_no_call_signatures_2757": "'{0}' türünün çağrı imzası yok.", + "Type_0_has_no_construct_signatures_2761": "'{0}' türünün oluşturma imzası yok.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "'{0}' türü, '{1}' türüyle eşleşen dizin imzasına sahip değil.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "'{0}' türünün '{1}' türüyle ortak özelliği yok.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "'{0}' türü, tür bağımsız değişkeni listesi için geçerli imzalar içermiyor.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "Tür '{0}' geneldir ve yalnızca okuma için dizini oluşturulabilir.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "'{0}' türünde, '{1}' türündeki şu özellikler eksik: {2} ve diğer {3} özellik.", + "Type_0_is_not_a_constructor_function_type_2507": "'{0}' türü bir oluşturucu işlevi türü değil.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "ES5 içindeki '{0}' türü, Promise ile uyumlu bir oluşturucu değerine başvurmadığından geçerli bir zaman uyumsuz işlev dönüş türü değil.", + "Type_0_is_not_an_array_type_2461": "'{0}' türü bir dizi türü değil.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "'{0}' türü, bir dizi türü veya dize türü değil.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "'{0}' türü, bir dizi türü veya dize türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "'{0}' türü, bir dizi türü değil ya da bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip değil.", + "Type_0_is_not_assignable_to_type_1_2322": "'{0}' türü, '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "'{0}' türü '{1}' türüne atanamaz. '{2}' mi demek istediniz?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "'{0}' türü '{1}' türüne atanamaz. Bu ada sahip iki farklı tür mevcut, ancak bu türler birbiriyle ilişkisiz.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Varyans ek açıklaması tarafından belirtildiği gibi '{0}' türü '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "Hesaplanan sabit listesi üye değerleri gereğince, '{0}' türü '{1}' türüne atanamaz.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef özelliklerinin türlerine 'undefined' eklemeyi deneyin.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "'{0}' türü, '{1}' türüne 'exactOptionalPropertyTypes: true' ile atanamaz. Hedef türüne 'undefined' eklemeyi deneyin.", + "Type_0_is_not_comparable_to_type_1_2678": "'{0}' türü '{1}' türüyle karşılaştırılamaz.", + "Type_0_is_not_generic_2315": "'{0}' türü genel değil.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "'{0}' tipi, 'in' operatörünün doğru işleneni olarak izin verilmeyen temel bir değeri temsil edebilir.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "'{0}' türünün, zaman uyumsuz bir yineleyici döndüren bir '[Symbol.asyncIterator]()' metoduna sahip olması gerekir.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "'{0}' türünün, bir yineleyici döndüren '[Symbol.iterator]()' metoduna sahip olması gerekir.", + "Type_0_provides_no_match_for_the_signature_1_2658": "'{0}' türü, '{1}' imzası için eşleşme sağlamıyor.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "'{0}' türü, öz yinelemeli şekilde kendine temel tür olarak başvuruyor.", + "Type_Checking_6248": "Tür Denetlemesi", + "Type_alias_0_circularly_references_itself_2456": "'{0}' tür diğer adı, döngüsel olarak kendine başvuruyor.", + "Type_alias_must_be_given_a_name_1439": "Tür takma adına bir ad verilmesi gerekir.", + "Type_alias_name_cannot_be_0_2457": "Tür diğer adı '{0}' olamaz.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Tür diğer adları, yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Tür ek açıklaması, oluşturucu bildiriminde görüntülenemez.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "Tür ek açıklamaları yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_argument_expected_1140": "Tür bağımsız değişkeni bekleniyor.", + "Type_argument_list_cannot_be_empty_1099": "Tür bağımsız değişkeni listesi boş olamaz.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Tür bağımsız değişkenleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' için tür bağımsız değişkenleri, döngüsel olarak kendisine başvuruyor.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "Tür onaylama ifadeleri, yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "Kaynaktaki {0} konumunda bulunan tür, hedefteki {1} konumunda bulunan türle uyumlu değil.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "Kaynaktaki {0} ile {1} arasındaki konumlarda bulunan tür, hedefteki {2} konumunda bulunan türle uyumlu değil.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "'{0}' özel adını içeren tür, --isolatedDeclarations ile kullanılamaz.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Derlemeye eklenecek tür bildirim dosyaları.", + "Type_expected_1110": "Tür bekleniyor.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "Tür içe aktarma iddiaları, `import` veya `require`. değerine sahip tam olarak bir anahtara - `resolution-mode`’na sahip olmalıdır.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "Tür içe aktarma öznitelikleri, 'import' veya 'require' değerine sahip, tam olarak tek bir 'resolution-mode' anahtarına sahip olmalıdır.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "Bir ECMAScript modülünün CommonJS modülünden tür içeri aktarımında bir 'resolution-mode' özniteliği bulunmalıdır.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "Tür örneği oluşturma işlemi, fazla ayrıntılı ve büyük olasılıkla sınırsız.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "Türe, kendi 'then' metodunun tamamlama geri aramasında doğrudan veya dolaylı olarak başvuruluyor.", + "Type_library_referenced_via_0_from_file_1_1402": "'{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "'{2}' paket kimliğine sahip '{1}' dosyasından '{0}' aracılığıyla başvurulan tür kitaplığı", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "Hesaplanan özellik değerinin '{0}' türü, '{1}' türüne atanamıyor.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "'{0}' örnek üyesi değişkeninin türü, oluşturucuda bildirilen '{1}' tanımlayıcısına başvuramaz.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "Bir 'yield*' işleneninin yinelenen öğelerinin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "'{0}' özelliğinin türü, '{1}' eşlenmiş türünde döngüsel olarak kendine başvuruyor.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "Zaman uyumsuz bir oluşturucudaki 'yield' işleneninin türü, geçerli bir promise olmalı veya çağrılabilir 'then' üyesi içermemelidir.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "Bir ECMAScript modülünün bir CommonJS modülünden yalnızca tür içeri aktarımında bir 'resolution-mode' özniteliği bulunmalıdır.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "Tür bu içeri aktarmadan kaynaklanıyor. Ad alanı stili içeri aktarma işlemi çağrılamaz ya da oluşturulamaz ve çalışma zamanında hataya neden olur. Bunun yerine varsayılan içeri aktarmayı kullanabilir veya burada içeri aktarma gerektirebilirsiniz.", + "Type_parameter_0_has_a_circular_constraint_2313": "'{0}' tür parametresi döngüsel bir kısıtlamaya sahip.", + "Type_parameter_0_has_a_circular_default_2716": "'{0}' tür parametresi döngüsel bir varsayılana sahip.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "Dışarı aktarılan arabirimdeki çağrı imzasının '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "Dışarı aktarılan arabirimdeki oluşturucu imzasının '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "Dışarı aktarılan sınıfın '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "Dışarı aktarılan işlevin '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "Dışarı aktarılan arabirimin '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "Dışarı aktarılmış eşlenen nesne türüne ait '{0}' tür parametresi, '{1}' özel adını kullanıyor.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "Dışarı aktarılan tür diğer adına ait '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "Dışarı aktarılan arabirimdeki metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "Dışarı aktarılan sınıftaki ortak metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "Dışarı aktarılan sınıftaki ortak statik metodun '{0}' tür parametresi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "Type_parameter_declaration_expected_1139": "Tür parametresi bildirimi bekleniyor.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "Tür parametresi bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Tür parametresi varsayılanları yalnızca önceden bildirilen tür parametrelerine başvurabilir.", + "Type_parameter_list_cannot_be_empty_1098": "Tür parametresi listesi boş olamaz.", + "Type_parameter_name_cannot_be_0_2368": "Tür parametresi adı '{0}' olamaz.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Tür parametreleri, oluşturucu bildiriminde görüntülenemez.", + "Type_predicate_0_is_not_assignable_to_1_1226": "'{0}' tür koşulu, '{1}' öğesine atanamaz.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "Tür, temsil edilemeyecek kadar büyük olan bir demet türü oluşturuyor.", + "Type_reference_directive_0_was_not_resolved_6120": "======== '{0}' tür başvuru yönergesi çözümlenmedi. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== '{0}' tür başvuru yönergesi '{1}' olarak başarıyla çözümlendi, birincil: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== '{0}' tür başvuru yönergesi '{2}' Paket Kimliğine sahip '{1}' olarak başarıyla çözümlendi, birincil: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "Tür karşılama ifadeleri yalnızca TypeScript dosyalarında kullanılabilir.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Türler, JavaScript dosyalarında dışarı aktarma bildirimlerinde görünemez.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Türler, '{0}' özel özelliğinin ayrı bildirimlerine sahip.", + "Types_of_construct_signatures_are_incompatible_2419": "Yapı imzalarının türleri uyumsuz.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "'{0}' ve '{1}' parametre türleri uyumsuz.", + "Types_of_property_0_are_incompatible_2326": "'{0}' özellik türleri uyumsuz.", + "Unable_to_open_file_0_6050": "'{0}' dosyası açılamıyor.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Bir ifade olarak çağrıldığında sınıf dekoratörünün imzası çözümlenemez.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Bir ifade olarak çağrıldığında metot dekoratörünün imzası çözümlenemez.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Bir ifade olarak çağrıldığında parametre dekoratörünün imzası çözümlenemez.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Bir ifade olarak çağrıldığında özellik dekoratörünün imzası çözümlenemez.", + "Undetermined_character_escape_1513": "Belirlenmemiş karakter kaçışı.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "Beklenmeyen '{0}'. Ters eğik çizgiyle bundan kaçmak mı istediniz?", + "Unexpected_end_of_text_1126": "Beklenmeyen metin sonu.", + "Unexpected_keyword_or_identifier_1434": "Beklenmeyen anahtar kelime veya tanımlayıcı.", + "Unexpected_token_1012": "Beklenmeyen belirteç.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Beklenmeyen belirteç. Bir oluşturucu, metot, erişimci veya özellik bekleniyordu.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Beklenmeyen belirteç. Küme ayracı olmadan bir tür parametresi adı bekleniyordu.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'>'}` veya `>`?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Beklenmeyen belirteç. Şunu mu demek istediniz: `{'}'}` veya `}`?", + "Unexpected_token_expected_1179": "Beklenmeyen belirteç. '{' bekleniyordu.", + "Unicode_escape_sequence_cannot_appear_here_17021": "Unicode kaçış dizisi burada görünemez.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "Unicode kaçış dizileri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "Unicode özellik değeri ifadeleri yalnızca Unicode (u) bayrağı veya Unicode Kümeleri (v) bayrağı ayarlandığında kullanılabilir.", + "Unknown_Unicode_property_name_1524": "Bilinmeyen Unicode özelliği adı.", + "Unknown_Unicode_property_name_or_value_1529": "Bilinmeyen Unicode özelliği adı veya değeri.", + "Unknown_Unicode_property_value_1526": "Bilinmeyen Unicode özelliği değeri.", + "Unknown_build_option_0_5072": "Bilinmeyen '{0}' derleme seçeneği.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Bilinmeyen '{0}' derleme seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unknown_compiler_option_0_5023": "Bilinmeyen '{0}' derleyici seçeneği.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Bilinmeyen '{0}' derleyici seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Bilinmeyen anahtar sözcük veya tanımlayıcı. “{0}” mi demek istediniz?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "'Excludes' seçeneği bilinmiyor. 'Exclude' seçeneğini mi belirtmek istediniz?", + "Unknown_regular_expression_flag_1499": "Bilinmeyen normal ifade bayrağı.", + "Unknown_type_acquisition_option_0_17010": "Bilinmeyen '{0}' tür alımı seçeneği.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Bilinmeyen '{0}' tür alma seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unknown_watch_option_0_5078": "Bilinmeyen '{0}' izleme seçeneği.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Bilinmeyen '{0}' izleme seçeneği. Şunu mu demek istediniz: '{1}'?", + "Unreachable_code_detected_7027": "Erişilemeyen kod algılandı.", + "Unterminated_Unicode_escape_sequence_1199": "Sonlandırılmamış Unicode kaçış dizisi.", + "Unterminated_quoted_string_in_response_file_0_6045": "'{0}' yanıt dosyasında sonlandırılmamış alıntılanmış dize.", + "Unterminated_regular_expression_literal_1161": "Sonlandırılmamış normal ifade sabit değeri.", + "Unterminated_string_literal_1002": "Sonlandırılmamış dize sabit değeri.", + "Unterminated_template_literal_1160": "Sonlandırılmamış şablon sabit değeri.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Türü belirtilmemiş işlev çağrıları tür bağımsız değişkenlerini kabul etmeyebilir.", + "Unused_label_7028": "Kullanılmayan etiket.", + "Unused_ts_expect_error_directive_2578": "Kullanılmayan '@ts-expect-error' yönergesi.", + "Update_import_from_0_90058": "\"{0}\" kaynağından içeri aktarmayı güncelleştir", + "Update_modifiers_of_0_90061": "'{0}' değiştiricilerini güncelleştirin", + "Updating_output_timestamps_of_project_0_6359": "'{0}' projesinin çıkış zaman damgaları güncelleştiriliyor...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "'{0}' projesinin değiştirilmemiş çıkış zaman damgaları güncelleştiriliyor...", + "Use_0_95174": "`{0}` kullanın.", + "Use_0_instead_5106": "Bunun yerine '{0}' kullanın.", + "Use_Number_isNaN_in_all_conditions_95175": "Tüm koşullarda `Number.isNaN` kullanın.", + "Use_element_access_for_0_95145": "'{0}' için öğe erişimi kullan", + "Use_element_access_for_all_undeclared_properties_95146": "Tüm bildirilmemiş özellikler için öğe erişimi kullanın.", + "Use_import_type_95180": "'İçeri aktarma türü' kullanın", + "Use_synthetic_default_member_95016": "Yapay 'default' üyesini kullanın.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Paket içe aktarmalarını çözümlerken package.json 'exports' alanını kullanın.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "İçeri aktarmaları çözümlerken package.json dosyasındaki 'imports' alanını kullanın.", + "Use_type_0_95181": "'type {0}' kullanın", + "Using_0_subpath_1_with_target_2_6404": "Hedef '{2}' ile '{0}' alt yol '{1}' kullanılıyor.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "JSX parçalarının kullanımı '{0}' parça fabrikasının kapsamda olmasını gerektiriyor, ancak bulunamadı.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "'for...of' deyiminde dize kullanma yalnızca ECMAScript 5 veya üzerinde desteklenir.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "--build kullanarak -b, tsc’nin derleyici yerine derleme düzenleyici gibi davranmasına yol açar. Bu, kompozit projeler oluşturmayı tetiklemek için kullanılır. Daha fazla bilgi edinmek için bkz. {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "'{0}' proje başvurusu yeniden yönlendirmesinin derleyici seçenekleri kullanılıyor.", + "VERSION_6036": "SÜRÜM", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "'{0}' türünün değeri ile '{1}' türü arasında hiç ortak özellik yok. Bunun yerine çağrı yapmak mı istediniz?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "'{0}' türündeki değeri çağrılabilir değil. 'new' öğesini mi eklemek istemiştiniz?", + "Variable_0_implicitly_has_an_1_type_7005": "'{0}' değişkeni örtük olarak '{1}' türüne sahip.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "'{0}' değişkeni örtük olarak bir '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "'{0}' değişkeni bazı konumlarda örtük olarak '{1}' türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "'{0}' değişkeni, türünün belirlenemeyeceği bazı konumlarda örtülü olarak '{1}' türünü içeriyor.", + "Variable_0_is_used_before_being_assigned_2454": "'{0}' değişkeni atanmadan önce kullanılır.", + "Variable_declaration_expected_1134": "Değişken bildirimi bekleniyor.", + "Variable_declaration_list_cannot_be_empty_1123": "Değişken bildirim listesi boş olamaz.", + "Variable_declaration_not_allowed_at_this_location_1440": "Bu konumda değişken bildirimine izin verilmiyor.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "Değişkende --isolatedDeclarations içeren açık bir tür ek açıklaması olmalıdır.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Birden çok bildirimi olan değişkenler satır içine alınamaz.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "Kaynaktaki {0} konumunda bulunan değişen sayıda bağımsız değişken içeren öğe, hedefteki {1} konumunda bulunan öğeyle eşleşmiyor.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Varyans ek açıklamaları yalnızca nesne, işlev, oluşturucu ve eşlenen türler için tür diğer adlarında desteklenir.", + "Version_0_6029": "Sürüm {0}", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Bu dosya hakkında daha fazla bilgi için https://aka.ms/tsconfig sayfasını ziyaret edin", + "WATCH_OPTIONS_6918": "İZLEME SEÇENEKLERİ", + "Watch_and_Build_Modes_6250": "İzleme ve Derleme Modları", + "Watch_input_files_6005": "Giriş dosyalarını izleyin.", + "Watch_option_0_requires_a_value_of_type_1_5080": "'{0}' izleme seçeneği, {1} türünde bir değer gerektiriyor.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "'{0}' için bir türü yalnızca tüm parametre için buraya bir tür ekleyerek yazabiliriz.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "İşlevler atanırken, parametrelerin ve dönüş değerlerinin alt tür ile uyumlu olduğundan emin olun.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Tür denetimi sırasında 'null' ve 'undefined' öğelerini hesaba kat.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Eski konsol çıktısının ekrandan kaldırılmak yerine izleme modunda tutulup tutulmayacağı.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Geçersiz tüm karakterleri bir ifade kapsayıcısında sarmalayın", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Tüm geçersiz dekoratör ifadelerini parantez içine alın", + "Wrap_all_object_literal_with_parentheses_95116": "Tüm nesne sabit değerini parantez içine alın", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "JSX parçasındaki tüm ana öğesiz JSX'leri sarmala", + "Wrap_in_JSX_fragment_95120": "JSX parçasında sarmala", + "Wrap_in_parentheses_95194": "Parantez içine alın", + "Wrap_invalid_character_in_an_expression_container_95108": "Geçersiz karakteri bir ifade kapsayıcısında sarmalayın", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Nesne sabit değeri olması gereken aşağıdaki gövdeyi parantez içine alın", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Tüm derleyici seçenekleri hakkında bilgi edinmek için bkz. {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Genel içeri aktarma aracılığıyla bir modülü yeniden adlandıramazsınız.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Bir 'node_modules' klasöründe tanımlanan öğeler yeniden adlandırılamaz.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Başka bir 'node_modules' klasöründe tanımlanan öğeler yeniden adlandırılamaz.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Standart TypeScript kitaplığında tanımlanmış öğeleri yeniden adlandıramazsınız.", + "You_cannot_rename_this_element_8000": "Bu öğeyi yeniden adlandıramazsınız.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' burada dekoratör olarak kullanılmak için çok az bağımsız değişken kabul ediyor. Önce çağırıp '@{0}()' yazmak mı istediniz?", + "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' ve '{1}' dizin imzaları uyumsuz.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' ve '{1}' işlemleri ayraç olmadan karıştırılamaz.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' iki kez belirtildi. '{0}' özniteliğinin üzerine yazılacak.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' bir türün sonunda geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' bir türün başlangıcında geçerli TypeScript sözdizimi değildir. '{1}' yazmak mı istemiştiniz?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' yalnızca 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' yalnızca varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' yalnızca 'require' çağrısı kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' yalnızca 'require' çağrısı veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' yalnızca 'import {1} = require({2})' veya varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' yalnızca 'import {1} = require({2})' kullanılarak veya 'esModuleInterop' bayrağı etkinleştirilip varsayılan içeri aktarma kullanılarak içeri aktarılabilir.", + "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}', JSX bileşeni olarak kullanılamaz.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}', 'export type' kullanılarak dışarı aktarıldığından değer olarak kullanılamaz.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}', 'import type' kullanılarak içeri aktarıldığından değer olarak kullanılamaz.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' bileşenleri, alt öğe olarak metin kabul etmez. JSX'teki metin 'string' türünde ancak beklenen '{1}' türü: '{2}'.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' örneği, '{1}' ile ilişkili olmayan rastgele bir türle oluşturulabilir.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "'{0}' bildirimleri yalnızca bir bloğun içinde bildirilebilir.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' bildirimleri yalnızca TypeScript dosyalarında kullanılabilir.", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' bildirimlerinde bağlama desenleri olamaz.", + "_0_declarations_must_be_initialized_1155": "'{0}' bildirimleri başlatılmalıdır.", + "_0_expected_1005": "'{0}' bekleniyor.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' bir dize türüne sahip ancak 'isolatedModules' etkinleştirildiğinde sözdizimsel olarak tanınabilir dize sözdizimi olmalıdır.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' öğesinin dışarı aktarılan '{1}' adlı bir üyesi yok. '{2}' demek mi istediniz?", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' örtük olarak bir '{1}' dönüş türüne sahip ancak kullanımdan daha iyi bir tür çıkarsanabilir.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Dönüş türü ek açıklamasına sahip olmadığından ve doğrudan veya dolaylı olarak dönüş ifadelerinden birinde kendine başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Bir tür ek açıklamasına sahip olmadığından ve kendi başlatıcısında doğrudan veya dolaylı olarak başvurulduğundan, '{0}' öğesi örtük olarak 'any' türüne sahip.", + "_0_index_signatures_are_incompatible_2634": "'{0}' dizin imzaları uyumsuz.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' dizin türü '{1}' ' {2}' dizin türüne '{3}' atanamaz.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' temel elemandır ancak '{1}' sarmalayıcı nesnedir. Mümkün olduğunda '{0}' kullanmayı tercih edin.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' bir tür ve JavaScript dosyalarında içeri aktarılamaz. Bir JSDoc türü ek açıklamasında '{1}' kullanın.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' bir türdür ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}', '{1}' türünün kullanılmayan bir yeniden adlandırması. Tür ek açıklaması olarak mı kullanmak istediniz?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}', '{1}' türündeki kısıtlamaya atanabilir ancak '{1}' örneği, '{2}' kısıtlamasının farklı bir alt türüyle oluşturulabilir.", + "_0_is_automatically_exported_here_18044": "'{0}' burada otomatik olarak dışarı aktarılır.", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' bildirildi ancak değeri hiç okunmadı.", + "_0_is_declared_but_never_used_6196": "'{0}' bildirildi ancak hiç kullanılmadı.", + "_0_is_declared_here_2728": "'{0}' burada bildirilir.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}', '{1}' sınıfında bir özellik olarak tanımlandı ancak burada, '{2}' içinde bir erişimci olarak geçersiz kılındı.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}', '{1}' sınıfında bir erişimci olarak tanımlandı ancak burada, '{2}' içinde örnek özelliği olarak geçersiz kılındı.", + "_0_is_deprecated_6385": "'{0}' kullanım dışı bırakıldı.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}', '{1}' anahtar sözcüğü için geçerli bir meta özellik değil. Bunu mu demek istediniz: '{2}'?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer_18061": "'{0}', 'import' anahtar sözcüğü için geçerli bir meta özellik değil. Bunu mu demek istediniz: 'meta' veya 'defer'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' öğesine parametre adı olarak izin verilmiyor.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' öğesinin değişken bildirim adı olarak kullanılmasına izin verilmiyor.", + "_0_is_of_type_unknown_18046": "'{0}' 'unknown' türünde.", + "_0_is_possibly_null_18047": "'{0}' değerinin 'null' olması olasıdır.", + "_0_is_possibly_null_or_undefined_18049": "'{0}' değerinin 'null' veya 'undefined' olması olasıdır.", + "_0_is_possibly_undefined_18048": "'{0}' değerinin 'undefined' olması olasıdır.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' öğesine kendi temel ifadesinde doğrudan veya dolaylı olarak başvuruluyor.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' öğesine kendi tür ek açıklamasında doğrudan veya dolaylı olarak başvuruluyor.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' birden çok kez belirtildiğinden bu kullanımın üzerine yazılacak.", + "_0_list_cannot_be_empty_1097": "'{0}' listesi boş olamaz.", + "_0_modifier_already_seen_1030": "'{0}' değiştiricisi zaten görüldü.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' değiştiricisi yalnızca bir sınıfın, arabirimin veya tür diğer adının tür parametresinde görünebilir", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' değiştiricisi yalnızca bir işlevin, metodun veya sınıfın tür parametresinde görünebilir", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "'{0}' değiştiricisi bir oluşturucu bildiriminde görüntülenemez.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "'{0}' değiştiricisi, bir modülde veya ad alanı öğesinde görünemez.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "'{0}' değiştiricisi bir parametrede görüntülenemez.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "'{0}' değiştiricisi, bir tür üyesinde görünemez.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "'{0}' değiştiricisi, bir tür parametresinde görünemez", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' değiştiricisi bir 'using' bildiriminde görünemez.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' değiştiricisi bir 'await using' bildiriminde görünemez.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "'{0}' değiştiricisi, bir dizin imzasında görünemez.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "'{0}' değiştiricisi bu tip sınıf öğelerinde görünemez.", + "_0_modifier_cannot_be_used_here_1042": "'{0}' değiştiricisi burada kullanılamaz.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "'{0}' değiştiricisi bir çevresel bağlamda kullanılamaz.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' değiştiricisi, '{1}' değiştiricisi ile birlikte kullanılamaz.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' değiştiricisi özel bir tanımlayıcıyla birlikte kullanılamaz.", + "_0_modifier_must_precede_1_modifier_1029": "'{0}' değiştiricisi, '{1}' değiştiricisinden önce gelmelidir.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' ifadesinden sonra küme ayraçları içine alınmış bir Unicode özellik değeri ifadesi gelmelidir.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' açık bir tür ek açıklamasına ihtiyaç duyuyor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir ad alanı olarak kullanılıyor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' yalnızca bir türe başvuruyor, ancak burada bir değer olarak kullanılıyor. '{0}' içinde '{1}' kullanmak mı istediniz?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' yalnızca bir türe başvuruyor ancak burada bir değer olarak kullanılıyor. Hedef kitaplığınızı değiştirmeniz gerekiyor mu? 'lib' derleyici seçeneğini es2015 veya üzeri olarak değiştirmeyi deneyin.", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' bir UMD genel öğesine başvuruyor, ancak geçerli dosya bir modül. Bunun yerine bir içeri aktarma eklemeyi deneyin.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' bir değere başvuruyor ancak burada tür olarak kullanılıyor. 'typeof {0}' kullanmak mı istediniz?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}', bir tür olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve 'verbatimModuleSyntax' etkinleştirildiğinde yalnızca tür içeri aktarması kullanılarak içeri aktarılmalıdır.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. '{0}' içeri aktarıldığında 'import type' kullanmayı göz önünde bulundurun.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkinleştirildiğinde yeniden dışa aktarmadan önce bu dosyada yalnızca tür olarak işaretlenmelidir. 'export type { varsayılan olarak {0} }' kullanmayı düşünün.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}', yalnızca tür bildirimi olarak çözümlenir ve '{1}' etkin olduğunda yalnızca türü yeniden dışarı aktarma kullanılarak yeniden dışarı aktarılmalıdır.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}', config.json dosyasının 'compilerOptions' nesnesi içinden ayarlanmalıdır", + "_0_tag_already_specified_1223": "'{0}' etiketi zaten belirtildi.", + "_0_was_also_declared_here_6203": "'{0}' öğesi de burada bildirildi.", + "_0_was_exported_here_1377": "'{0}' burada dışarı aktarıldı.", + "_0_was_imported_here_1376": "'{0}' burada içeri aktarıldı.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' dönüş türüne sahip.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "Dönüş türü ek açıklaması olmayan '{0}', örtük olarak '{1}' yield türüne sahip.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' değiştiricisi yalnızca sınıf, metot veya özellik bildiriminde görünebilir.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' değiştiricisi yalnızca özellik bildiriminde görünebilir.", + "and_here_6204": "ve buraya.", + "and_npm_install_D_types_Slashnode_6290": "ve npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "'arguments' özellik başlatıcılarında veya sınıf statik başlatma bloklarında kullanılamaz.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": İçe aktarma, dışa aktarma, import.meta, jsx (jsx: react-jsx ile) veya esm biçimi (modül: node16+ ile) içeren dosyaları modül olarak ele alın.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "‘await’ ifadesi bir sınıf statik bloğu içinde kullanılamaz.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "'await' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "'await' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' ifadeleri bir parametre başlatıcısında kullanılamaz.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' öğesinin bu ifadenin türü üzerinde etkisi yoktur.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Çevresel bağlamlarda 'await using' bildirimlerine izin verilmez.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "'await using' ifadelerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' ifadelerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' ifadeleri bir sınıf statik bloğu içinde kullanılamaz.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' seçeneği '{0}' olarak ayarlandı; göreli olmayan '{1}' modül adını çözümlemek için bu değer kullanılıyor.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' ardından bir ASCII harfi gelmelidir.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' yalnızca dosyanın başlangıcında kullanılabilir.", + "case_or_default_expected_1130": "'case' veya 'default' ifadeleri bekleniyor.", + "catch_or_finally_expected_1472": "'catch' veya 'finally' bekleniyor.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' sabit listesi üyesi başlatıcısı, sonlu olmayan bir değer olarak hesaplandı.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' sabit listesi üyesi başlatıcısı, izin verilmeyen 'NaN' değeri olarak hesaplandı.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "const sabit listesi üye başlatıcıları sabit ifadeler olmalıdır.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' sabit listeleri yalnızca bir özellikte, dizin erişim ifadelerinde, içeri aktarma bildiriminin veya dışarı aktarma atamasının sağ tarafında ya da tür sorgusunda kullanılabilir.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor', parametre özellik adı olarak kullanılamaz.", + "constructor_is_a_reserved_word_18012": "'#constructor' ayrılmış bir sözcüktür.", + "default_Colon_6903": "varsayılan:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete', katı moddaki bir tanımlayıcıda çağrılamaz.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' varsayılanı yeniden dışarı aktarmaz.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' yalnızca TypeScript dosyalarında kullanılabilir.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "'export' değiştiricisi, her zaman görünür olduğu için çevresel modüllere ve modül genişletmelerine uygulanamaz.", + "extends_clause_already_seen_1172": "'extends' yan tümcesi zaten görüldü.", + "extends_clause_must_precede_implements_clause_1173": "'extends' yan tümcesi, 'implements' yan tümcesinden önce gelmelidir.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "Dışarı aktarılan '{0}' sınıfının 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "Dışarı aktarılan sınıfın 'extends' yan tümcesi, '{0}' özel adına sahip veya bu adı kullanıyor.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "Dışarı aktarılan '{0}' arabiriminin 'extends' yan tümcesi, '{1}' özel adına sahip veya bu adı kullanıyor.", + "false_unless_composite_is_set_6906": "'Kompozit' ayarlanmamışsa 'false'", + "false_unless_strict_is_set_6905": "'Katı' ayarlanmamışsa 'false'", + "file_6025": "dosya", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "'for await' döngülerine yalnızca dosya bir modül olduğunda dosyanın en üst düzeyinde izin verilir ancak bu dosyanın içeri veya dışarı aktarma işlemi yok. Bu dosyayı modül yapmak için boş bir 'export {}' eklemeyi deneyin.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "'for await' döngülerine yalnızca asenkron işlevler içinde ve modüllerin en üst düzeylerinde izin verilir.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' döngüleri bir sınıf statik bloğu içinde kullanılamaz.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' ve 'set' erişimcileri 'this' parametreleri bildiremez.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "'Files' ayarlanmışsa ‘[]', aksi takdirde `[\"**/*\"]5D;`", + "implements_clause_already_seen_1175": "'implements' yan tümcesi zaten görüldü.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' yan tümceleri yalnızca TypeScript dosyalarında kullanılabilir.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' yalnızca TypeScript dosyalarında kullanılabilir.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "'infer' bildirimlerine yalnızca bir koşullu türün 'extends' yan tümcesinde izin verilir.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' ifadesinden sonra açılı ayraçlar içine alınmış bir yakalama grubu adı gelmelidir.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' ifadesi, 'let' veya 'const' bildirimlerinde ad olarak kullanılamaz.", + "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "module === 'AMD' veya 'UMD' veya 'Sistem' veya 'ES6' ve ardından 'Klasik', aksi durumda 'Node'", + "module_system_or_esModuleInterop_6904": "module === \"sistem\" veya esModuleInterop", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "Yapı imzası bulunmayan 'new' ifadesi örtük olarak 'any' türüne sahip.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]` ve belirtilmişse ek olarak `outDir`.", + "one_of_Colon_6900": "şunlardan biri:", + "one_or_more_Colon_6901": "bir veya daha fazla:", + "options_6024": "seçenekler", + "or_JSX_element_expected_1145": "'{' veya JSX öğesi bekleniyor.", + "or_expected_1144": "'{' veya ';' bekleniyor.", + "package_json_does_not_have_a_0_field_6100": "'package.json' geçerli bir '{0}' alanına sahip değil.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json', '{0}' sürümüyle eşleşen bir 'typesVersions' girdisine sahip değil.", + "package_json_had_a_falsy_0_field_6220": "'package.json' hatalı bir '{0}' alanı içeriyordu.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json', '{2}' öğesine başvuruda bulunan '{1}' adlı '{0}' alanını içeriyor.", + "package_json_has_a_peerDependencies_field_6281": "'package.json', 'peerDependencies' alanı içeriyor.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json', geçerli bir semver aralığı olmayan '{0}' 'typesVersions' girdisine sahip.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json', '{2}' modül adıyla eşleşen bir desen arayan '{1}' derleyici sürümüyle eşleşen '{0}' 'typesVersions' girdisine sahip.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json', sürüme özgü yol eşlemeleri olan bir 'typesVersions' alanına sahip.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "'{0}' package.json kapsamı '{1}' tanımlayıcısını açıkça null değerine eşliyor.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "'{0}' package.json kapsamı, '{1}' tanımlayıcısının hedefi için geçersiz türe sahip", + "package_json_scope_0_has_no_imports_defined_6273": "'{0}' package.json kapsamında içeri aktarma tanımlanmadı.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' seçeneği belirtildi, '{0}' modül adıyla eşleşen bir desen aranıyor.", + "q_is_only_available_inside_character_class_1511": "'\\q' yalnızca karakter sınıfının içinde kullanılabilir.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' ardından küme ayraçları içine alınmış dize alternatifleri gelmelidir.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' değiştiricisi yalnızca özellik bildiriminde ya da dizin imzasında görünebilir.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' tür değiştiricisine yalnızca dizide ve demet sabit değeri türlerinde izin verilir.", + "require_call_may_be_converted_to_an_import_80005": "'require' çağrısı bir import olarak dönüştürülebilir.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` yalnızca tür içeri aktarmaları için ayarlanabilir.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode`, tür içe aktarma iddiaları için tek geçerli anahtardır.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "`resolution-mode`, tür içe aktarma öznitelikleri için tek geçerli anahtardır.", + "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode`, `require` ya da `import` olmalıdır.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' seçeneği ayarlandı, '{0}' göreli modül adını çözümlemek için bu değer kullanılıyor.", + "super_can_only_be_referenced_in_a_derived_class_2335": "'super' öğesine yalnızca bir türetilmiş sınıfta başvurulabilir.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' değerine yalnızca türetilen sınıfların üyelerinde ya da nesne değişmez ifadelerinde başvurulabilir.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' öğesine hesaplanan bir özellik adında başvurulamaz.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' öğesine oluşturucu bağımsız değişkenlerinde başvurulamaz.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "Nesne değişmez ifadelerinde 'super' değerine yalnızca 'target' seçeneği 'ES2015' veya üzeri olarak ayarlandığında izin verilir.", + "super_may_not_use_type_arguments_2754": "'super', tür bağımsız değişkenlerini kullanamaz.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "Türetilmiş bir sınıfın oluşturucusunda 'super' özelliğine erişmeden önce 'super' çağrılmalıdır.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "Türetilen bir sınıfın oluşturucusundaki 'this' değerine erişilmeden önce 'super' çağrılmalıdır.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' öğesinden sonra bir bağımsız değişken listesi veya üye erişimi gelmelidir.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "'super' özellik erişimine yalnızca bir oluşturucuda, üye işlevinde veya bir türetilmiş sınıfa ait üye erişimcisinde izin verilir.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' öğesine hesaplanan bir özellik adında başvurulamaz.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' öğesine bir modülde veya ad alanı gövdesinde başvurulamaz.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' öğesine statik özellik başlatıcısında başvurulamaz.", + "this_cannot_be_referenced_in_current_location_2332": "'this' öğesine geçerli konumda başvurulamaz.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this', tür ek açıklamasına sahip olmadığından örtük olarak 'any' türü içeriyor", + "true_for_ES2022_and_above_including_ESNext_6930": "ESNext dahil olmak üzere ES2022 ve üzeri için `true` olarak ayarlanır.", + "true_if_composite_false_otherwise_6909": "'Kompozit' ayarlanmışsa 'true', değilse 'false'", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'moduleResolution'; 'node16', 'nodenext' veya 'bundler' olduğunda `true`, aksi halde `false`.", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: The TypeScript Derleyicisi", + "type_Colon_6902": "tür:", + "unique_symbol_types_are_not_allowed_here_1335": "Burada 'unique symbol' türlerine izin verilmez.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "'unique symbol' türlerine yalnızca bir değişken deyimindeki değişkenlerde izin verilir.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' türleri, bağlama adına sahip bir değişken bildiriminde kullanılamaz.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' yönergesi, basit olmayan parametre listesiyle birlikte kullanılamıyor.", + "use_strict_directive_used_here_1349": "'use strict' yönergesi burada kullanıldı.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Çevresel bağlamlarda 'using' bildirimlerine izin verilmez.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "'with' deyimlerine zaman uyumsuz bir işlev bloğunda izin verilmez.", + "with_statements_are_not_allowed_in_strict_mode_1101": "'with' deyimlerine katı modda izin verilmez.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Kapsayan oluşturucusunda dönüş türü ek açıklaması olmadığından 'yield' ifadesi örtük olarak 'any' türü ile sonuçlanır.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' ifadeleri bir parametre başlatıcısında kullanılamaz." +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/34/b73182bc219a8542b5d28336da071669cd7a3bdc25062b3b8969544491d7efd4d0f4ff0a35d22741f2801cb5c2ff4febd7aa94da4d6102ded2ddc359371ac5 b/.pnpm-store/v11/files/34/b73182bc219a8542b5d28336da071669cd7a3bdc25062b3b8969544491d7efd4d0f4ff0a35d22741f2801cb5c2ff4febd7aa94da4d6102ded2ddc359371ac5 new file mode 100644 index 00000000..14f82c82 --- /dev/null +++ b/.pnpm-store/v11/files/34/b73182bc219a8542b5d28336da071669cd7a3bdc25062b3b8969544491d7efd4d0f4ff0a35d22741f2801cb5c2ff4febd7aa94da4d6102ded2ddc359371ac5 @@ -0,0 +1,1197 @@ +/* eslint no-unused-vars: ["error", { "varsIgnorePattern": "^Readable$" }] */ + +'use strict'; + +const EventEmitter = require('events'); +const https = require('https'); +const http = require('http'); +const net = require('net'); +const tls = require('tls'); +const { randomBytes, createHash } = require('crypto'); +const { Readable } = require('stream'); +const { URL } = require('url'); + +const PerMessageDeflate = require('./permessage-deflate'); +const Receiver = require('./receiver'); +const Sender = require('./sender'); +const { + BINARY_TYPES, + EMPTY_BUFFER, + GUID, + kStatusCode, + kWebSocket, + NOOP +} = require('./constants'); +const { addEventListener, removeEventListener } = require('./event-target'); +const { format, parse } = require('./extension'); +const { toBuffer } = require('./buffer-util'); + +const readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED']; +const protocolVersions = [8, 13]; +const closeTimeout = 30 * 1000; + +/** + * Class representing a WebSocket. + * + * @extends EventEmitter + */ +class WebSocket extends EventEmitter { + /** + * Create a new `WebSocket`. + * + * @param {(String|URL)} address The URL to which to connect + * @param {(String|String[])} [protocols] The subprotocols + * @param {Object} [options] Connection options + */ + constructor(address, protocols, options) { + super(); + + this._binaryType = BINARY_TYPES[0]; + this._closeCode = 1006; + this._closeFrameReceived = false; + this._closeFrameSent = false; + this._closeMessage = ''; + this._closeTimer = null; + this._extensions = {}; + this._protocol = ''; + this._readyState = WebSocket.CONNECTING; + this._receiver = null; + this._sender = null; + this._socket = null; + + if (address !== null) { + this._bufferedAmount = 0; + this._isServer = false; + this._redirects = 0; + + if (Array.isArray(protocols)) { + protocols = protocols.join(', '); + } else if (typeof protocols === 'object' && protocols !== null) { + options = protocols; + protocols = undefined; + } + + initAsClient(this, address, protocols, options); + } else { + this._isServer = true; + } + } + + /** + * This deviates from the WHATWG interface since ws doesn't support the + * required default "blob" type (instead we define a custom "nodebuffer" + * type). + * + * @type {String} + */ + get binaryType() { + return this._binaryType; + } + + set binaryType(type) { + if (!BINARY_TYPES.includes(type)) return; + + this._binaryType = type; + + // + // Allow to change `binaryType` on the fly. + // + if (this._receiver) this._receiver._binaryType = type; + } + + /** + * @type {Number} + */ + get bufferedAmount() { + if (!this._socket) return this._bufferedAmount; + + return this._socket._writableState.length + this._sender._bufferedBytes; + } + + /** + * @type {String} + */ + get extensions() { + return Object.keys(this._extensions).join(); + } + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onclose() { + return undefined; + } + + /* istanbul ignore next */ + set onclose(listener) {} + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onerror() { + return undefined; + } + + /* istanbul ignore next */ + set onerror(listener) {} + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onopen() { + return undefined; + } + + /* istanbul ignore next */ + set onopen(listener) {} + + /** + * @type {Function} + */ + /* istanbul ignore next */ + get onmessage() { + return undefined; + } + + /* istanbul ignore next */ + set onmessage(listener) {} + + /** + * @type {String} + */ + get protocol() { + return this._protocol; + } + + /** + * @type {Number} + */ + get readyState() { + return this._readyState; + } + + /** + * @type {String} + */ + get url() { + return this._url; + } + + /** + * Set up the socket and the internal resources. + * + * @param {(net.Socket|tls.Socket)} socket The network socket between the + * server and client + * @param {Buffer} head The first packet of the upgraded stream + * @param {Number} [maxPayload=0] The maximum allowed message size + * @private + */ + setSocket(socket, head, maxPayload) { + const receiver = new Receiver( + this.binaryType, + this._extensions, + this._isServer, + maxPayload + ); + + this._sender = new Sender(socket, this._extensions); + this._receiver = receiver; + this._socket = socket; + + receiver[kWebSocket] = this; + socket[kWebSocket] = this; + + receiver.on('conclude', receiverOnConclude); + receiver.on('drain', receiverOnDrain); + receiver.on('error', receiverOnError); + receiver.on('message', receiverOnMessage); + receiver.on('ping', receiverOnPing); + receiver.on('pong', receiverOnPong); + + socket.setTimeout(0); + socket.setNoDelay(); + + if (head.length > 0) socket.unshift(head); + + socket.on('close', socketOnClose); + socket.on('data', socketOnData); + socket.on('end', socketOnEnd); + socket.on('error', socketOnError); + + this._readyState = WebSocket.OPEN; + this.emit('open'); + } + + /** + * Emit the `'close'` event. + * + * @private + */ + emitClose() { + if (!this._socket) { + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + return; + } + + if (this._extensions[PerMessageDeflate.extensionName]) { + this._extensions[PerMessageDeflate.extensionName].cleanup(); + } + + this._receiver.removeAllListeners(); + this._readyState = WebSocket.CLOSED; + this.emit('close', this._closeCode, this._closeMessage); + } + + /** + * Start a closing handshake. + * + * +----------+ +-----------+ +----------+ + * - - -|ws.close()|-->|close frame|-->|ws.close()|- - - + * | +----------+ +-----------+ +----------+ | + * +----------+ +-----------+ | + * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING + * +----------+ +-----------+ | + * | | | +---+ | + * +------------------------+-->|fin| - - - - + * | +---+ | +---+ + * - - - - -|fin|<---------------------+ + * +---+ + * + * @param {Number} [code] Status code explaining why the connection is closing + * @param {String} [data] A string explaining why the connection is closing + * @public + */ + close(code, data) { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + return abortHandshake(this, this._req, msg); + } + + if (this.readyState === WebSocket.CLOSING) { + if ( + this._closeFrameSent && + (this._closeFrameReceived || this._receiver._writableState.errorEmitted) + ) { + this._socket.end(); + } + + return; + } + + this._readyState = WebSocket.CLOSING; + this._sender.close(code, data, !this._isServer, (err) => { + // + // This error is handled by the `'error'` listener on the socket. We only + // want to know if the close frame has been sent here. + // + if (err) return; + + this._closeFrameSent = true; + + if ( + this._closeFrameReceived || + this._receiver._writableState.errorEmitted + ) { + this._socket.end(); + } + }); + + // + // Specify a timeout for the closing handshake to complete. + // + this._closeTimer = setTimeout( + this._socket.destroy.bind(this._socket), + closeTimeout + ); + } + + /** + * Send a ping. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the ping is sent + * @public + */ + ping(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.ping(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Send a pong. + * + * @param {*} [data] The data to send + * @param {Boolean} [mask] Indicates whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when the pong is sent + * @public + */ + pong(data, mask, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof data === 'function') { + cb = data; + data = mask = undefined; + } else if (typeof mask === 'function') { + cb = mask; + mask = undefined; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + if (mask === undefined) mask = !this._isServer; + this._sender.pong(data || EMPTY_BUFFER, mask, cb); + } + + /** + * Send a data message. + * + * @param {*} data The message to send + * @param {Object} [options] Options object + * @param {Boolean} [options.compress] Specifies whether or not to compress + * `data` + * @param {Boolean} [options.binary] Specifies whether `data` is binary or + * text + * @param {Boolean} [options.fin=true] Specifies whether the fragment is the + * last one + * @param {Boolean} [options.mask] Specifies whether or not to mask `data` + * @param {Function} [cb] Callback which is executed when data is written out + * @public + */ + send(data, options, cb) { + if (this.readyState === WebSocket.CONNECTING) { + throw new Error('WebSocket is not open: readyState 0 (CONNECTING)'); + } + + if (typeof options === 'function') { + cb = options; + options = {}; + } + + if (typeof data === 'number') data = data.toString(); + + if (this.readyState !== WebSocket.OPEN) { + sendAfterClose(this, data, cb); + return; + } + + const opts = { + binary: typeof data !== 'string', + mask: !this._isServer, + compress: true, + fin: true, + ...options + }; + + if (!this._extensions[PerMessageDeflate.extensionName]) { + opts.compress = false; + } + + this._sender.send(data || EMPTY_BUFFER, opts, cb); + } + + /** + * Forcibly close the connection. + * + * @public + */ + terminate() { + if (this.readyState === WebSocket.CLOSED) return; + if (this.readyState === WebSocket.CONNECTING) { + const msg = 'WebSocket was closed before the connection was established'; + return abortHandshake(this, this._req, msg); + } + + if (this._socket) { + this._readyState = WebSocket.CLOSING; + this._socket.destroy(); + } + } +} + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} CONNECTING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CONNECTING', { + enumerable: true, + value: readyStates.indexOf('CONNECTING') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} OPEN + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'OPEN', { + enumerable: true, + value: readyStates.indexOf('OPEN') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSING + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSING', { + enumerable: true, + value: readyStates.indexOf('CLOSING') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket + */ +Object.defineProperty(WebSocket, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +/** + * @constant {Number} CLOSED + * @memberof WebSocket.prototype + */ +Object.defineProperty(WebSocket.prototype, 'CLOSED', { + enumerable: true, + value: readyStates.indexOf('CLOSED') +}); + +[ + 'binaryType', + 'bufferedAmount', + 'extensions', + 'protocol', + 'readyState', + 'url' +].forEach((property) => { + Object.defineProperty(WebSocket.prototype, property, { enumerable: true }); +}); + +// +// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes. +// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface +// +['open', 'error', 'close', 'message'].forEach((method) => { + Object.defineProperty(WebSocket.prototype, `on${method}`, { + enumerable: true, + get() { + const listeners = this.listeners(method); + for (let i = 0; i < listeners.length; i++) { + if (listeners[i]._listener) return listeners[i]._listener; + } + + return undefined; + }, + set(listener) { + const listeners = this.listeners(method); + for (let i = 0; i < listeners.length; i++) { + // + // Remove only the listeners added via `addEventListener`. + // + if (listeners[i]._listener) this.removeListener(method, listeners[i]); + } + this.addEventListener(method, listener); + } + }); +}); + +WebSocket.prototype.addEventListener = addEventListener; +WebSocket.prototype.removeEventListener = removeEventListener; + +module.exports = WebSocket; + +/** + * Initialize a WebSocket client. + * + * @param {WebSocket} websocket The client to initialize + * @param {(String|URL)} address The URL to which to connect + * @param {String} [protocols] The subprotocols + * @param {Object} [options] Connection options + * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable + * permessage-deflate + * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the + * handshake request + * @param {Number} [options.protocolVersion=13] Value of the + * `Sec-WebSocket-Version` header + * @param {String} [options.origin] Value of the `Origin` or + * `Sec-WebSocket-Origin` header + * @param {Number} [options.maxPayload=104857600] The maximum allowed message + * size + * @param {Boolean} [options.followRedirects=false] Whether or not to follow + * redirects + * @param {Number} [options.maxRedirects=10] The maximum number of redirects + * allowed + * @private + */ +function initAsClient(websocket, address, protocols, options) { + const opts = { + protocolVersion: protocolVersions[1], + maxPayload: 100 * 1024 * 1024, + perMessageDeflate: true, + followRedirects: false, + maxRedirects: 10, + ...options, + createConnection: undefined, + socketPath: undefined, + hostname: undefined, + protocol: undefined, + timeout: undefined, + method: undefined, + host: undefined, + path: undefined, + port: undefined + }; + + if (!protocolVersions.includes(opts.protocolVersion)) { + throw new RangeError( + `Unsupported protocol version: ${opts.protocolVersion} ` + + `(supported versions: ${protocolVersions.join(', ')})` + ); + } + + let parsedUrl; + + if (address instanceof URL) { + parsedUrl = address; + websocket._url = address.href; + } else { + parsedUrl = new URL(address); + websocket._url = address; + } + + const isUnixSocket = parsedUrl.protocol === 'ws+unix:'; + + if (!parsedUrl.host && (!isUnixSocket || !parsedUrl.pathname)) { + const err = new Error(`Invalid URL: ${websocket.url}`); + + if (websocket._redirects === 0) { + throw err; + } else { + emitErrorAndClose(websocket, err); + return; + } + } + + const isSecure = + parsedUrl.protocol === 'wss:' || parsedUrl.protocol === 'https:'; + const defaultPort = isSecure ? 443 : 80; + const key = randomBytes(16).toString('base64'); + const get = isSecure ? https.get : http.get; + let perMessageDeflate; + + opts.createConnection = isSecure ? tlsConnect : netConnect; + opts.defaultPort = opts.defaultPort || defaultPort; + opts.port = parsedUrl.port || defaultPort; + opts.host = parsedUrl.hostname.startsWith('[') + ? parsedUrl.hostname.slice(1, -1) + : parsedUrl.hostname; + opts.headers = { + 'Sec-WebSocket-Version': opts.protocolVersion, + 'Sec-WebSocket-Key': key, + Connection: 'Upgrade', + Upgrade: 'websocket', + ...opts.headers + }; + opts.path = parsedUrl.pathname + parsedUrl.search; + opts.timeout = opts.handshakeTimeout; + + if (opts.perMessageDeflate) { + perMessageDeflate = new PerMessageDeflate( + opts.perMessageDeflate !== true ? opts.perMessageDeflate : {}, + false, + opts.maxPayload + ); + opts.headers['Sec-WebSocket-Extensions'] = format({ + [PerMessageDeflate.extensionName]: perMessageDeflate.offer() + }); + } + if (protocols) { + opts.headers['Sec-WebSocket-Protocol'] = protocols; + } + if (opts.origin) { + if (opts.protocolVersion < 13) { + opts.headers['Sec-WebSocket-Origin'] = opts.origin; + } else { + opts.headers.Origin = opts.origin; + } + } + if (parsedUrl.username || parsedUrl.password) { + opts.auth = `${parsedUrl.username}:${parsedUrl.password}`; + } + + if (isUnixSocket) { + const parts = opts.path.split(':'); + + opts.socketPath = parts[0]; + opts.path = parts[1]; + } + + if (opts.followRedirects) { + if (websocket._redirects === 0) { + websocket._originalUnixSocket = isUnixSocket; + websocket._originalSecure = isSecure; + websocket._originalHostOrSocketPath = isUnixSocket + ? opts.socketPath + : parsedUrl.host; + + const headers = options && options.headers; + + // + // Shallow copy the user provided options so that headers can be changed + // without mutating the original object. + // + options = { ...options, headers: {} }; + + if (headers) { + for (const [key, value] of Object.entries(headers)) { + options.headers[key.toLowerCase()] = value; + } + } + } else { + const isSameHost = isUnixSocket + ? websocket._originalUnixSocket + ? opts.socketPath === websocket._originalHostOrSocketPath + : false + : websocket._originalUnixSocket + ? false + : parsedUrl.host === websocket._originalHostOrSocketPath; + + if (!isSameHost || (websocket._originalSecure && !isSecure)) { + // + // Match curl 7.77.0 behavior and drop the following headers. These + // headers are also dropped when following a redirect to a subdomain. + // + delete opts.headers.authorization; + delete opts.headers.cookie; + + if (!isSameHost) delete opts.headers.host; + + opts.auth = undefined; + } + } + + // + // Match curl 7.77.0 behavior and make the first `Authorization` header win. + // If the `Authorization` header is set, then there is nothing to do as it + // will take precedence. + // + if (opts.auth && !options.headers.authorization) { + options.headers.authorization = + 'Basic ' + Buffer.from(opts.auth).toString('base64'); + } + } + + let req = (websocket._req = get(opts)); + + if (opts.timeout) { + req.on('timeout', () => { + abortHandshake(websocket, req, 'Opening handshake has timed out'); + }); + } + + req.on('error', (err) => { + if (req === null || req.aborted) return; + + req = websocket._req = null; + emitErrorAndClose(websocket, err); + }); + + req.on('response', (res) => { + const location = res.headers.location; + const statusCode = res.statusCode; + + if ( + location && + opts.followRedirects && + statusCode >= 300 && + statusCode < 400 + ) { + if (++websocket._redirects > opts.maxRedirects) { + abortHandshake(websocket, req, 'Maximum redirects exceeded'); + return; + } + + req.abort(); + + let addr; + + try { + addr = new URL(location, address); + } catch (err) { + emitErrorAndClose(websocket, err); + return; + } + + initAsClient(websocket, addr, protocols, options); + } else if (!websocket.emit('unexpected-response', req, res)) { + abortHandshake( + websocket, + req, + `Unexpected server response: ${res.statusCode}` + ); + } + }); + + req.on('upgrade', (res, socket, head) => { + websocket.emit('upgrade', res); + + // + // The user may have closed the connection from a listener of the `upgrade` + // event. + // + if (websocket.readyState !== WebSocket.CONNECTING) return; + + req = websocket._req = null; + + const upgrade = res.headers.upgrade; + + if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') { + abortHandshake(websocket, socket, 'Invalid Upgrade header'); + return; + } + + const digest = createHash('sha1') + .update(key + GUID) + .digest('base64'); + + if (res.headers['sec-websocket-accept'] !== digest) { + abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header'); + return; + } + + const serverProt = res.headers['sec-websocket-protocol']; + const protList = (protocols || '').split(/, */); + let protError; + + if (!protocols && serverProt) { + protError = 'Server sent a subprotocol but none was requested'; + } else if (protocols && !serverProt) { + protError = 'Server sent no subprotocol'; + } else if (serverProt && !protList.includes(serverProt)) { + protError = 'Server sent an invalid subprotocol'; + } + + if (protError) { + abortHandshake(websocket, socket, protError); + return; + } + + if (serverProt) websocket._protocol = serverProt; + + const secWebSocketExtensions = res.headers['sec-websocket-extensions']; + + if (secWebSocketExtensions !== undefined) { + if (!perMessageDeflate) { + const message = + 'Server sent a Sec-WebSocket-Extensions header but no extension ' + + 'was requested'; + abortHandshake(websocket, socket, message); + return; + } + + let extensions; + + try { + extensions = parse(secWebSocketExtensions); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + const extensionNames = Object.keys(extensions); + + if (extensionNames.length) { + if ( + extensionNames.length !== 1 || + extensionNames[0] !== PerMessageDeflate.extensionName + ) { + const message = + 'Server indicated an extension that was not requested'; + abortHandshake(websocket, socket, message); + return; + } + + try { + perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]); + } catch (err) { + const message = 'Invalid Sec-WebSocket-Extensions header'; + abortHandshake(websocket, socket, message); + return; + } + + websocket._extensions[PerMessageDeflate.extensionName] = + perMessageDeflate; + } + } + + websocket.setSocket(socket, head, opts.maxPayload); + }); +} + +/** + * Emit the `'error'` and `'close'` event. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {Error} The error to emit + * @private + */ +function emitErrorAndClose(websocket, err) { + websocket._readyState = WebSocket.CLOSING; + websocket.emit('error', err); + websocket.emitClose(); +} + +/** + * Create a `net.Socket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {net.Socket} The newly created socket used to start the connection + * @private + */ +function netConnect(options) { + options.path = options.socketPath; + return net.connect(options); +} + +/** + * Create a `tls.TLSSocket` and initiate a connection. + * + * @param {Object} options Connection options + * @return {tls.TLSSocket} The newly created socket used to start the connection + * @private + */ +function tlsConnect(options) { + options.path = undefined; + + if (!options.servername && options.servername !== '') { + options.servername = net.isIP(options.host) ? '' : options.host; + } + + return tls.connect(options); +} + +/** + * Abort the handshake and emit an error. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to + * abort or the socket to destroy + * @param {String} message The error message + * @private + */ +function abortHandshake(websocket, stream, message) { + websocket._readyState = WebSocket.CLOSING; + + const err = new Error(message); + Error.captureStackTrace(err, abortHandshake); + + if (stream.setHeader) { + stream.abort(); + + if (stream.socket && !stream.socket.destroyed) { + // + // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if + // called after the request completed. See + // https://github.com/websockets/ws/issues/1869. + // + stream.socket.destroy(); + } + + stream.once('abort', websocket.emitClose.bind(websocket)); + websocket.emit('error', err); + } else { + stream.destroy(err); + stream.once('error', websocket.emit.bind(websocket, 'error')); + stream.once('close', websocket.emitClose.bind(websocket)); + } +} + +/** + * Handle cases where the `ping()`, `pong()`, or `send()` methods are called + * when the `readyState` attribute is `CLOSING` or `CLOSED`. + * + * @param {WebSocket} websocket The WebSocket instance + * @param {*} [data] The data to send + * @param {Function} [cb] Callback + * @private + */ +function sendAfterClose(websocket, data, cb) { + if (data) { + const length = toBuffer(data).length; + + // + // The `_bufferedAmount` property is used only when the peer is a client and + // the opening handshake fails. Under these circumstances, in fact, the + // `setSocket()` method is not called, so the `_socket` and `_sender` + // properties are set to `null`. + // + if (websocket._socket) websocket._sender._bufferedBytes += length; + else websocket._bufferedAmount += length; + } + + if (cb) { + const err = new Error( + `WebSocket is not open: readyState ${websocket.readyState} ` + + `(${readyStates[websocket.readyState]})` + ); + cb(err); + } +} + +/** + * The listener of the `Receiver` `'conclude'` event. + * + * @param {Number} code The status code + * @param {String} reason The reason for closing + * @private + */ +function receiverOnConclude(code, reason) { + const websocket = this[kWebSocket]; + + websocket._closeFrameReceived = true; + websocket._closeMessage = reason; + websocket._closeCode = code; + + if (websocket._socket[kWebSocket] === undefined) return; + + websocket._socket.removeListener('data', socketOnData); + process.nextTick(resume, websocket._socket); + + if (code === 1005) websocket.close(); + else websocket.close(code, reason); +} + +/** + * The listener of the `Receiver` `'drain'` event. + * + * @private + */ +function receiverOnDrain() { + this[kWebSocket]._socket.resume(); +} + +/** + * The listener of the `Receiver` `'error'` event. + * + * @param {(RangeError|Error)} err The emitted error + * @private + */ +function receiverOnError(err) { + const websocket = this[kWebSocket]; + + if (websocket._socket[kWebSocket] !== undefined) { + websocket._socket.removeListener('data', socketOnData); + + // + // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See + // https://github.com/websockets/ws/issues/1940. + // + process.nextTick(resume, websocket._socket); + + websocket.close(err[kStatusCode]); + } + + websocket.emit('error', err); +} + +/** + * The listener of the `Receiver` `'finish'` event. + * + * @private + */ +function receiverOnFinish() { + this[kWebSocket].emitClose(); +} + +/** + * The listener of the `Receiver` `'message'` event. + * + * @param {(String|Buffer|ArrayBuffer|Buffer[])} data The message + * @private + */ +function receiverOnMessage(data) { + this[kWebSocket].emit('message', data); +} + +/** + * The listener of the `Receiver` `'ping'` event. + * + * @param {Buffer} data The data included in the ping frame + * @private + */ +function receiverOnPing(data) { + const websocket = this[kWebSocket]; + + websocket.pong(data, !websocket._isServer, NOOP); + websocket.emit('ping', data); +} + +/** + * The listener of the `Receiver` `'pong'` event. + * + * @param {Buffer} data The data included in the pong frame + * @private + */ +function receiverOnPong(data) { + this[kWebSocket].emit('pong', data); +} + +/** + * Resume a readable stream + * + * @param {Readable} stream The readable stream + * @private + */ +function resume(stream) { + stream.resume(); +} + +/** + * The listener of the `net.Socket` `'close'` event. + * + * @private + */ +function socketOnClose() { + const websocket = this[kWebSocket]; + + this.removeListener('close', socketOnClose); + this.removeListener('data', socketOnData); + this.removeListener('end', socketOnEnd); + + websocket._readyState = WebSocket.CLOSING; + + let chunk; + + // + // The close frame might not have been received or the `'end'` event emitted, + // for example, if the socket was destroyed due to an error. Ensure that the + // `receiver` stream is closed after writing any remaining buffered data to + // it. If the readable side of the socket is in flowing mode then there is no + // buffered data as everything has been already written and `readable.read()` + // will return `null`. If instead, the socket is paused, any possible buffered + // data will be read as a single chunk. + // + if ( + !this._readableState.endEmitted && + !websocket._closeFrameReceived && + !websocket._receiver._writableState.errorEmitted && + (chunk = websocket._socket.read()) !== null + ) { + websocket._receiver.write(chunk); + } + + websocket._receiver.end(); + + this[kWebSocket] = undefined; + + clearTimeout(websocket._closeTimer); + + if ( + websocket._receiver._writableState.finished || + websocket._receiver._writableState.errorEmitted + ) { + websocket.emitClose(); + } else { + websocket._receiver.on('error', receiverOnFinish); + websocket._receiver.on('finish', receiverOnFinish); + } +} + +/** + * The listener of the `net.Socket` `'data'` event. + * + * @param {Buffer} chunk A chunk of data + * @private + */ +function socketOnData(chunk) { + if (!this[kWebSocket]._receiver.write(chunk)) { + this.pause(); + } +} + +/** + * The listener of the `net.Socket` `'end'` event. + * + * @private + */ +function socketOnEnd() { + const websocket = this[kWebSocket]; + + websocket._readyState = WebSocket.CLOSING; + websocket._receiver.end(); + this.end(); +} + +/** + * The listener of the `net.Socket` `'error'` event. + * + * @private + */ +function socketOnError() { + const websocket = this[kWebSocket]; + + this.removeListener('error', socketOnError); + this.on('error', NOOP); + + if (websocket) { + websocket._readyState = WebSocket.CLOSING; + this.destroy(); + } +} diff --git a/.pnpm-store/v11/files/35/1630d9e5804802361ed4f9a2f134180a6b1ce68f87309114fc990fcfde06036287f7bc6393288f11456a165e4281ca92b0d4b90590c49917f81603f1413b87 b/.pnpm-store/v11/files/35/1630d9e5804802361ed4f9a2f134180a6b1ce68f87309114fc990fcfde06036287f7bc6393288f11456a165e4281ca92b0d4b90590c49917f81603f1413b87 new file mode 100644 index 00000000..e663473a --- /dev/null +++ b/.pnpm-store/v11/files/35/1630d9e5804802361ed4f9a2f134180a6b1ce68f87309114fc990fcfde06036287f7bc6393288f11456a165e4281ca92b0d4b90590c49917f81603f1413b87 @@ -0,0 +1,40 @@ +var copyObject = require('./_copyObject'), + createAssigner = require('./_createAssigner'), + keysIn = require('./keysIn'); + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + +module.exports = assignIn; diff --git a/.pnpm-store/v11/files/35/369d4cd1077f725ff851bc8fc23c52cdf1436e7e250daae0be7b013b0bef0c9827c776670a860d6f6aaceefeaaf78f4d2faa51f4cf3ef7a95077eb83b480b1 b/.pnpm-store/v11/files/35/369d4cd1077f725ff851bc8fc23c52cdf1436e7e250daae0be7b013b0bef0c9827c776670a860d6f6aaceefeaaf78f4d2faa51f4cf3ef7a95077eb83b480b1 new file mode 100644 index 00000000..83f0c83a --- /dev/null +++ b/.pnpm-store/v11/files/35/369d4cd1077f725ff851bc8fc23c52cdf1436e7e250daae0be7b013b0bef0c9827c776670a860d6f6aaceefeaaf78f4d2faa51f4cf3ef7a95077eb83b480b1 @@ -0,0 +1,378 @@ +# Glob + +Match files using the patterns the shell uses, like stars and stuff. + +[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Build Status](https://ci.appveyor.com/api/projects/status/kd7f3yftf7unxlsx?svg=true)](https://ci.appveyor.com/project/isaacs/node-glob) [![Coverage Status](https://coveralls.io/repos/isaacs/node-glob/badge.svg?branch=master&service=github)](https://coveralls.io/github/isaacs/node-glob?branch=master) + +This is a glob implementation in JavaScript. It uses the `minimatch` +library to do its matching. + +![a fun cartoon logo made of glob characters](logo/glob.png) + +## Usage + +Install with npm + +``` +npm i glob +``` + +```javascript +var glob = require("glob") + +// options is optional +glob("**/*.js", options, function (er, files) { + // files is an array of filenames. + // If the `nonull` option is set, and nothing + // was found, then files is ["**/*.js"] + // er is an error object or null. +}) +``` + +## Glob Primer + +"Globs" are the patterns you type when you do stuff like `ls *.js` on +the command line, or put `build/*` in a `.gitignore` file. + +Before parsing the path part patterns, braced sections are expanded +into a set. Braced sections start with `{` and end with `}`, with any +number of comma-delimited sections within. Braced sections may contain +slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. + +The following characters have special magic meaning when used in a +path portion: + +* `*` Matches 0 or more characters in a single path portion +* `?` Matches 1 character +* `[...]` Matches a range of characters, similar to a RegExp range. + If the first character of the range is `!` or `^` then it matches + any character not in the range. +* `!(pattern|pattern|pattern)` Matches anything that does not match + any of the patterns provided. +* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the + patterns provided. +* `+(pattern|pattern|pattern)` Matches one or more occurrences of the + patterns provided. +* `*(a|b|c)` Matches zero or more occurrences of the patterns provided +* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns + provided +* `**` If a "globstar" is alone in a path portion, then it matches + zero or more directories and subdirectories searching for matches. + It does not crawl symlinked directories. + +### Dots + +If a file or directory path portion has a `.` as the first character, +then it will not match any glob pattern unless that pattern's +corresponding path part also has a `.` as its first character. + +For example, the pattern `a/.*/c` would match the file at `a/.b/c`. +However the pattern `a/*/c` would not, because `*` does not start with +a dot character. + +You can make glob treat dots as normal characters by setting +`dot:true` in the options. + +### Basename Matching + +If you set `matchBase:true` in the options, and the pattern has no +slashes in it, then it will seek for any file anywhere in the tree +with a matching basename. For example, `*.js` would match +`test/simple/basic.js`. + +### Empty Sets + +If no matching files are found, then an empty array is returned. This +differs from the shell, where the pattern itself is returned. For +example: + + $ echo a*s*d*f + a*s*d*f + +To get the bash-style behavior, set the `nonull:true` in the options. + +### See Also: + +* `man sh` +* `man bash` (Search for "Pattern Matching") +* `man 3 fnmatch` +* `man 5 gitignore` +* [minimatch documentation](https://github.com/isaacs/minimatch) + +## glob.hasMagic(pattern, [options]) + +Returns `true` if there are any special characters in the pattern, and +`false` otherwise. + +Note that the options affect the results. If `noext:true` is set in +the options object, then `+(a|b)` will not be considered a magic +pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` +then that is considered magical, unless `nobrace:true` is set in the +options. + +## glob(pattern, [options], cb) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* `cb` `{Function}` + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Perform an asynchronous glob search. + +## glob.sync(pattern, [options]) + +* `pattern` `{String}` Pattern to be matched +* `options` `{Object}` +* return: `{Array}` filenames found matching the pattern + +Perform a synchronous glob search. + +## Class: glob.Glob + +Create a Glob object by instantiating the `glob.Glob` class. + +```javascript +var Glob = require("glob").Glob +var mg = new Glob(pattern, options, cb) +``` + +It's an EventEmitter, and starts walking the filesystem to find matches +immediately. + +### new glob.Glob(pattern, [options], [cb]) + +* `pattern` `{String}` pattern to search for +* `options` `{Object}` +* `cb` `{Function}` Called when an error occurs, or matches are found + * `err` `{Error | null}` + * `matches` `{Array}` filenames found matching the pattern + +Note that if the `sync` flag is set in the options, then matches will +be immediately available on the `g.found` member. + +### Properties + +* `minimatch` The minimatch object that the glob uses. +* `options` The options object passed in. +* `aborted` Boolean which is set to true when calling `abort()`. There + is no way at this time to continue a glob search after aborting, but + you can re-use the statCache to avoid having to duplicate syscalls. +* `cache` Convenience object. Each field has the following possible + values: + * `false` - Path does not exist + * `true` - Path exists + * `'FILE'` - Path exists, and is not a directory + * `'DIR'` - Path exists, and is a directory + * `[file, entries, ...]` - Path exists, is a directory, and the + array value is the results of `fs.readdir` +* `statCache` Cache of `fs.stat` results, to prevent statting the same + path multiple times. +* `symlinks` A record of which paths are symbolic links, which is + relevant in resolving `**` patterns. +* `realpathCache` An optional object which is passed to `fs.realpath` + to minimize unnecessary syscalls. It is stored on the instantiated + Glob object, and may be re-used. + +### Events + +* `end` When the matching is finished, this is emitted with all the + matches found. If the `nonull` option is set, and no match was found, + then the `matches` list contains the original pattern. The matches + are sorted, unless the `nosort` flag is set. +* `match` Every time a match is found, this is emitted with the specific + thing that matched. It is not deduplicated or resolved to a realpath. +* `error` Emitted when an unexpected error is encountered, or whenever + any fs error occurs if `options.strict` is set. +* `abort` When `abort()` is called, this event is raised. + +### Methods + +* `pause` Temporarily stop the search +* `resume` Resume the search +* `abort` Stop the search forever + +### Options + +All the options that can be passed to Minimatch can also be passed to +Glob to change pattern matching behavior. Also, some have been added, +or have glob-specific ramifications. + +All options are false by default, unless otherwise noted. + +All options are added to the Glob object, as well. + +If you are running many `glob` operations, you can pass a Glob object +as the `options` argument to a subsequent operation to shortcut some +`stat` and `readdir` calls. At the very least, you may pass in shared +`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that +parallel glob operations will be sped up by sharing information about +the filesystem. + +* `cwd` The current working directory in which to search. Defaults + to `process.cwd()`. +* `root` The place where patterns starting with `/` will be mounted + onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix + systems, and `C:\` or some such on Windows.) +* `dot` Include `.dot` files in normal matches and `globstar` matches. + Note that an explicit dot in a portion of the pattern will always + match dot files. +* `nomount` By default, a pattern starting with a forward-slash will be + "mounted" onto the root setting, so that a valid filesystem path is + returned. Set this flag to disable that behavior. +* `mark` Add a `/` character to directory matches. Note that this + requires additional stat calls. +* `nosort` Don't sort the results. +* `stat` Set to true to stat *all* results. This reduces performance + somewhat, and is completely unnecessary, unless `readdir` is presumed + to be an untrustworthy indicator of file existence. +* `silent` When an unusual error is encountered when attempting to + read a directory, a warning will be printed to stderr. Set the + `silent` option to true to suppress these warnings. +* `strict` When an unusual error is encountered when attempting to + read a directory, the process will just continue on in search of + other matches. Set the `strict` option to raise an error in these + cases. +* `cache` See `cache` property above. Pass in a previously generated + cache object to save some fs calls. +* `statCache` A cache of results of filesystem information, to prevent + unnecessary stat calls. While it should not normally be necessary + to set this, you may pass the statCache from one glob() call to the + options object of another, if you know that the filesystem will not + change between calls. (See "Race Conditions" below.) +* `symlinks` A cache of known symbolic links. You may pass in a + previously generated `symlinks` object to save `lstat` calls when + resolving `**` matches. +* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. +* `nounique` In some cases, brace-expanded patterns can result in the + same file showing up multiple times in the result set. By default, + this implementation prevents duplicates in the result set. Set this + flag to disable that behavior. +* `nonull` Set to never return an empty set, instead returning a set + containing the pattern itself. This is the default in glob(3). +* `debug` Set to enable debug logging in minimatch and glob. +* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. +* `noglobstar` Do not match `**` against multiple filenames. (Ie, + treat it as a normal `*` instead.) +* `noext` Do not match `+(a|b)` "extglob" patterns. +* `nocase` Perform a case-insensitive match. Note: on + case-insensitive filesystems, non-magic patterns will match by + default, since `stat` and `readdir` will not raise errors. +* `matchBase` Perform a basename-only match if the pattern does not + contain any slash characters. That is, `*.js` would be treated as + equivalent to `**/*.js`, matching all js files in all directories. +* `nodir` Do not match directories, only files. (Note: to match + *only* directories, simply put a `/` at the end of the pattern.) +* `ignore` Add a pattern or an array of glob patterns to exclude matches. + Note: `ignore` patterns are *always* in `dot:true` mode, regardless + of any other settings. +* `follow` Follow symlinked directories when expanding `**` patterns. + Note that this can result in a lot of duplicate references in the + presence of cyclic links. +* `realpath` Set to true to call `fs.realpath` on all of the results. + In the case of a symlink that cannot be resolved, the full absolute + path to the matched entry is returned (though it will usually be a + broken symlink) +* `absolute` Set to true to always receive absolute paths for matched + files. Unlike `realpath`, this also affects the values returned in + the `match` event. +* `fs` File-system object with Node's `fs` API. By default, the built-in + `fs` module will be used. Set to a volume provided by a library like + `memfs` to avoid using the "real" file-system. + +## Comparisons to other fnmatch/glob implementations + +While strict compliance with the existing standards is a worthwhile +goal, some discrepancies exist between node-glob and other +implementations, and are intentional. + +The double-star character `**` is supported by default, unless the +`noglobstar` flag is set. This is supported in the manner of bsdglob +and bash 4.3, where `**` only has special significance if it is the only +thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but +`a/**b` will not. + +Note that symlinked directories are not crawled as part of a `**`, +though their contents may match against subsequent portions of the +pattern. This prevents infinite loops and duplicates and the like. + +If an escaped pattern has no matches, and the `nonull` flag is set, +then glob returns the pattern as-provided, rather than +interpreting the character escapes. For example, +`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than +`"*a?"`. This is akin to setting the `nullglob` option in bash, except +that it does not resolve escaped pattern characters. + +If brace expansion is not disabled, then it is performed before any +other interpretation of the glob pattern. Thus, a pattern like +`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded +**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are +checked for validity. Since those two are valid, matching proceeds. + +### Comments and Negation + +Previously, this module let you mark a pattern as a "comment" if it +started with a `#` character, or a "negated" pattern if it started +with a `!` character. + +These options were deprecated in version 5, and removed in version 6. + +To specify things that should not match, use the `ignore` option. + +## Windows + +**Please only use forward-slashes in glob expressions.** + +Though windows uses either `/` or `\` as its path separator, only `/` +characters are used by this glob implementation. You must use +forward-slashes **only** in glob expressions. Back-slashes will always +be interpreted as escape characters, not path separators. + +Results from absolute patterns such as `/foo/*` are mounted onto the +root setting using `path.join`. On windows, this will by default result +in `/foo/*` matching `C:\foo\bar.txt`. + +## Race Conditions + +Glob searching, by its very nature, is susceptible to race conditions, +since it relies on directory walking and such. + +As a result, it is possible that a file that exists when glob looks for +it may have been deleted or modified by the time it returns the result. + +As part of its internal implementation, this program caches all stat +and readdir calls that it makes, in order to cut down on system +overhead. However, this also makes it even more susceptible to races, +especially if the cache or statCache objects are reused between glob +calls. + +Users are thus advised not to use a glob result as a guarantee of +filesystem state in the face of rapid changes. For the vast majority +of operations, this is never a problem. + +## Glob Logo +Glob's logo was created by [Tanya Brassie](http://tanyabrassie.com/). Logo files can be found [here](https://github.com/isaacs/node-glob/tree/master/logo). + +The logo is licensed under a [Creative Commons Attribution-ShareAlike 4.0 International License](https://creativecommons.org/licenses/by-sa/4.0/). + +## Contributing + +Any change to behavior (including bugfixes) must come with a test. + +Patches that fail tests or reduce performance will be rejected. + +``` +# to run tests +npm test + +# to re-generate test fixtures +npm run test-regen + +# to benchmark against bash/zsh +npm run bench + +# to profile javascript +npm run prof +``` + +![](oh-my-glob.gif) diff --git a/.pnpm-store/v11/files/35/3a2ac1aa11a34b1f74dc0f0e4bdce4c631dd4d1c8126ddf8a87cf4b97992a3d5637ad3e82adb7c9b75d8f6948b9d854f978586669f78e5b21aa332c1b73f50 b/.pnpm-store/v11/files/35/3a2ac1aa11a34b1f74dc0f0e4bdce4c631dd4d1c8126ddf8a87cf4b97992a3d5637ad3e82adb7c9b75d8f6948b9d854f978586669f78e5b21aa332c1b73f50 new file mode 100644 index 00000000..33c10cbd --- /dev/null +++ b/.pnpm-store/v11/files/35/3a2ac1aa11a34b1f74dc0f0e4bdce4c631dd4d1c8126ddf8a87cf4b97992a3d5637ad3e82adb7c9b75d8f6948b9d854f978586669f78e5b21aa332c1b73f50 @@ -0,0 +1 @@ +export declare const makePostInjector: ($data: Object, $preData: Object, $ioc: Object) => (names: string[]) => any[]; diff --git a/.pnpm-store/v11/files/35/4251cb42b266a695316cc4c9eaadce5d3fffde5005ed84d08c0e4a3541bce65238dbc0d8546d3534538ef8d13df6fbf448ea4f39fd975dbdc405b31fcfc596 b/.pnpm-store/v11/files/35/4251cb42b266a695316cc4c9eaadce5d3fffde5005ed84d08c0e4a3541bce65238dbc0d8546d3534538ef8d13df6fbf448ea4f39fd975dbdc405b31fcfc596 new file mode 100644 index 00000000..d161158c --- /dev/null +++ b/.pnpm-store/v11/files/35/4251cb42b266a695316cc4c9eaadce5d3fffde5005ed84d08c0e4a3541bce65238dbc0d8546d3534538ef8d13df6fbf448ea4f39fd975dbdc405b31fcfc596 @@ -0,0 +1,18 @@ +var asciiToArray = require('./_asciiToArray'), + hasUnicode = require('./_hasUnicode'), + unicodeToArray = require('./_unicodeToArray'); + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +module.exports = stringToArray; diff --git a/.pnpm-store/v11/files/35/4890ddce593e89dde9b1c5137e84cb044c3e55437960065643e891ebefb73e7c526251cd52b134ef3ca7eaf826c3885e9f1a603cf04d02dcad1ebeaffd044d b/.pnpm-store/v11/files/35/4890ddce593e89dde9b1c5137e84cb044c3e55437960065643e891ebefb73e7c526251cd52b134ef3ca7eaf826c3885e9f1a603cf04d02dcad1ebeaffd044d new file mode 100644 index 00000000..c64eaa73 --- /dev/null +++ b/.pnpm-store/v11/files/35/4890ddce593e89dde9b1c5137e84cb044c3e55437960065643e891ebefb73e7c526251cd52b134ef3ca7eaf826c3885e9f1a603cf04d02dcad1ebeaffd044d @@ -0,0 +1,41 @@ +var arrayEach = require('./_arrayEach'), + baseEach = require('./_baseEach'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ +function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEach; diff --git a/.pnpm-store/v11/files/35/4b246665342fa95fed59c33e3898d161be4ebf427ff156d3dade7bb36d07f11caf9d1124b1fe43068a95f5fa0508643a00926ef4cfb0ba0381249490d0a173 b/.pnpm-store/v11/files/35/4b246665342fa95fed59c33e3898d161be4ebf427ff156d3dade7bb36d07f11caf9d1124b1fe43068a95f5fa0508643a00926ef4cfb0ba0381249490d0a173 new file mode 100644 index 00000000..5a92289f --- /dev/null +++ b/.pnpm-store/v11/files/35/4b246665342fa95fed59c33e3898d161be4ebf427ff156d3dade7bb36d07f11caf9d1124b1fe43068a95f5fa0508643a00926ef4cfb0ba0381249490d0a173 @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/35/4bdbd18e706aabbb4ce8ea44001a0155dfcaf5e836dea2bd2d0cc43b2fbd2f1ffbc8561a8feabb655d5e50adf346860ddbe64f65db4a8e079f321820d97000 b/.pnpm-store/v11/files/35/4bdbd18e706aabbb4ce8ea44001a0155dfcaf5e836dea2bd2d0cc43b2fbd2f1ffbc8561a8feabb655d5e50adf346860ddbe64f65db4a8e079f321820d97000 new file mode 100644 index 00000000..5d4bfa70 --- /dev/null +++ b/.pnpm-store/v11/files/35/4bdbd18e706aabbb4ce8ea44001a0155dfcaf5e836dea2bd2d0cc43b2fbd2f1ffbc8561a8feabb655d5e50adf346860ddbe64f65db4a8e079f321820d97000 @@ -0,0 +1,212 @@ +

+ + ChaiJS + +
+ chai +

+ +

+ Chai is a BDD / TDD assertion library for node and the browser that can be delightfully paired with any javascript testing framework. +

+ +

+ + license:mit + + + tag:? + + + node:? + +
+ + Selenium Test Status + +
+ + downloads:? + + + build:? + + + coverage:? + + + devDependencies:? + +
+ + Join the Slack chat + + + Join the Gitter chat + + + OpenCollective Backers + +

+ +For more information or to download plugins, view the [documentation](http://chaijs.com). + +## What is Chai? + +Chai is an _assertion library_, similar to Node's build in `assert`. It makes testing much easier by giving you lots of assertions you can run against your code. + +## Installation + +### Node.js + +`chai` is available on [npm](http://npmjs.org). To install it, type: + + $ npm install chai + +### Browsers + +You can also use it within the browser; install via npm and use the `chai.js` file found within the download. For example: + +```html + +``` + +## Usage + +Import the library in your code, and then pick one of the styles you'd like to use - either `assert`, `expect` or `should`: + +```js +var chai = require('chai'); +var assert = chai.assert; // Using Assert style +var expect = chai.expect; // Using Expect style +var should = chai.should(); // Using Should style +``` + +### Pre-Native Modules Usage (_registers the chai testing style globally_) + +```js +require('chai/register-assert'); // Using Assert style +require('chai/register-expect'); // Using Expect style +require('chai/register-should'); // Using Should style +``` + +### Pre-Native Modules Usage (_as local variables_) + +```js +const { assert } = require('chai'); // Using Assert style +const { expect } = require('chai'); // Using Expect style +const { should } = require('chai'); // Using Should style +should(); // Modifies `Object.prototype` + +const { expect, use } = require('chai'); // Creates local variables `expect` and `use`; useful for plugin use +``` + +### Native Modules Usage (_registers the chai testing style globally_) + +```js +import 'chai/register-assert'; // Using Assert style +import 'chai/register-expect'; // Using Expect style +import 'chai/register-should'; // Using Should style +``` + +### Native Modules Usage (_local import only_) + +```js +import { assert } from 'chai'; // Using Assert style +import { expect } from 'chai'; // Using Expect style +import { should } from 'chai'; // Using Should style +should(); // Modifies `Object.prototype` +``` + +### Usage with Mocha + +```bash +mocha spec.js -r chai/register-assert # Using Assert style +mocha spec.js -r chai/register-expect # Using Expect style +mocha spec.js -r chai/register-should # Using Should style +``` + +[Read more about these styles in our docs](http://chaijs.com/guide/styles/). + +## Plugins + +Chai offers a robust Plugin architecture for extending Chai's assertions and interfaces. + +- Need a plugin? View the [official plugin list](http://chaijs.com/plugins). +- Want to build a plugin? Read the [plugin api documentation](http://chaijs.com/guide/plugins/). +- Have a plugin and want it listed? Simply add the following keywords to your package.json: + - `chai-plugin` + - `browser` if your plugin works in the browser as well as Node.js + - `browser-only` if your plugin does not work with Node.js + +### Related Projects + +- [chaijs / chai-docs](https://github.com/chaijs/chai-docs): The chaijs.com website source code. +- [chaijs / assertion-error](https://github.com/chaijs/assertion-error): Custom `Error` constructor thrown upon an assertion failing. +- [chaijs / deep-eql](https://github.com/chaijs/deep-eql): Improved deep equality testing for Node.js and the browser. +- [chaijs / type-detect](https://github.com/chaijs/type-detect): Improved typeof detection for Node.js and the browser. +- [chaijs / check-error](https://github.com/chaijs/check-error): Error comparison and information related utility for Node.js and the browser. +- [chaijs / loupe](https://github.com/chaijs/loupe): Inspect utility for Node.js and browsers. +- [chaijs / pathval](https://github.com/chaijs/pathval): Object value retrieval given a string path. +- [chaijs / get-func-name](https://github.com/chaijs/get-func-name): Utility for getting a function's name for node and the browser. + +### Contributing + +Thank you very much for considering to contribute! + +Please make sure you follow our [Code Of Conduct](https://github.com/chaijs/chai/blob/master/CODE_OF_CONDUCT.md) and we also strongly recommend reading our [Contributing Guide](https://github.com/chaijs/chai/blob/master/CONTRIBUTING.md). + +Here are a few issues other contributors frequently ran into when opening pull requests: + +- Please do not commit changes to the `chai.js` build. We do it once per release. +- Before pushing your commits, please make sure you [rebase](https://github.com/chaijs/chai/blob/master/CONTRIBUTING.md#pull-requests) them. + +### Contributors + +Please see the full +[Contributors Graph](https://github.com/chaijs/chai/graphs/contributors) for our +list of contributors. + +### Core Contributors + +Feel free to reach out to any of the core contributors with your questions or +concerns. We will do our best to respond in a timely manner. + +[![Jake Luer](https://avatars3.githubusercontent.com/u/58988?v=3&s=50)](https://github.com/logicalparadox) +[![Veselin Todorov](https://avatars3.githubusercontent.com/u/330048?v=3&s=50)](https://github.com/vesln) +[![Keith Cirkel](https://avatars3.githubusercontent.com/u/118266?v=3&s=50)](https://github.com/keithamus) +[![Lucas Fernandes da Costa](https://avatars3.githubusercontent.com/u/6868147?v=3&s=50)](https://github.com/lucasfcosta) +[![Grant Snodgrass](https://avatars3.githubusercontent.com/u/17260989?v=3&s=50)](https://github.com/meeber) diff --git a/.pnpm-store/v11/files/35/5afeb842114c0cecd6a5453db2ed2dd444c780b2094149768e9c9f7e8640e6f677c6ed09f8c46537100c57a4189a09cc4789ef2be641708a866a89d667a56d b/.pnpm-store/v11/files/35/5afeb842114c0cecd6a5453db2ed2dd444c780b2094149768e9c9f7e8640e6f677c6ed09f8c46537100c57a4189a09cc4789ef2be641708a866a89d667a56d new file mode 100644 index 00000000..2818741e --- /dev/null +++ b/.pnpm-store/v11/files/35/5afeb842114c0cecd6a5453db2ed2dd444c780b2094149768e9c9f7e8640e6f677c6ed09f8c46537100c57a4189a09cc4789ef2be641708a866a89d667a56d @@ -0,0 +1,74 @@ +var colors = require('../lib/index'); + +console.log("First some yellow text".yellow); + +console.log("Underline that text".yellow.underline); + +console.log("Make it bold and red".red.bold); + +console.log(("Double Raindows All Day Long").rainbow) + +console.log("Drop the bass".trap) + +console.log("DROP THE RAINBOW BASS".trap.rainbow) + + +console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported + +console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse + ' styles! '.yellow.bold); // styles not widely supported +console.log("Zebras are so fun!".zebra); + +// +// Remark: .strikethrough may not work with Mac OS Terminal App +// +console.log("This is " + "not".strikethrough + " fun."); + +console.log('Background color attack!'.black.bgWhite) +console.log('Use random styles on everything!'.random) +console.log('America, Heck Yeah!'.america) + + +console.log('Setting themes is useful') + +// +// Custom themes +// +console.log('Generic logging theme as JSON'.green.bold.underline); +// Load theme with JSON literal +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); + +// outputs grey text +console.log("this is an input".input); + +console.log('Generic logging theme as file'.green.bold.underline); + +// Load a theme from file +colors.setTheme(__dirname + '/../themes/generic-logging.js'); + +// outputs red text +console.log("this is an error".error); + +// outputs yellow text +console.log("this is a warning".warn); + +// outputs grey text +console.log("this is an input".input); + +//console.log("Don't summon".zalgo) \ No newline at end of file diff --git a/.pnpm-store/v11/files/35/6015b3d85092f53c9aaf14642efffdea7f696c51bbcdd63fe700929cab487984a00bbc5a7749d7cf6549e22b6e8718151e05311a3e3681f87f94c97779eddd b/.pnpm-store/v11/files/35/6015b3d85092f53c9aaf14642efffdea7f696c51bbcdd63fe700929cab487984a00bbc5a7749d7cf6549e22b6e8718151e05311a3e3681f87f94c97779eddd new file mode 100644 index 00000000..83548beb --- /dev/null +++ b/.pnpm-store/v11/files/35/6015b3d85092f53c9aaf14642efffdea7f696c51bbcdd63fe700929cab487984a00bbc5a7749d7cf6549e22b6e8718151e05311a3e3681f87f94c97779eddd @@ -0,0 +1,30 @@ +var baseAssignValue = require('./_baseAssignValue'); + +/** + * The inverse of `_.toPairs`; this method returns an object composed + * from key-value `pairs`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} pairs The key-value pairs. + * @returns {Object} Returns the new object. + * @example + * + * _.fromPairs([['a', 1], ['b', 2]]); + * // => { 'a': 1, 'b': 2 } + */ +function fromPairs(pairs) { + var index = -1, + length = pairs == null ? 0 : pairs.length, + result = {}; + + while (++index < length) { + var pair = pairs[index]; + baseAssignValue(result, pair[0], pair[1]); + } + return result; +} + +module.exports = fromPairs; diff --git a/.pnpm-store/v11/files/35/679948da8e6601a0050099769a02bf63884402c506f8698ce6e69b20e884beaf1dd624b91b8872edb2b0e4a150b22622d361891d327bec6a44572390d35368 b/.pnpm-store/v11/files/35/679948da8e6601a0050099769a02bf63884402c506f8698ce6e69b20e884beaf1dd624b91b8872edb2b0e4a150b22622d361891d327bec6a44572390d35368 new file mode 100644 index 00000000..de061353 --- /dev/null +++ b/.pnpm-store/v11/files/35/679948da8e6601a0050099769a02bf63884402c506f8698ce6e69b20e884beaf1dd624b91b8872edb2b0e4a150b22622d361891d327bec6a44572390d35368 @@ -0,0 +1,17 @@ +/// +import * as stream from 'stream'; +export interface PTOptions { + omitWhitespace?: boolean; + color?: Function; +} +export declare const r2gSmokeTest: () => boolean; +export declare const pt: (pre: string, o?: PTOptions) => PrependTransform; +export default pt; +export declare class PrependTransform extends stream.Transform { + lastLineData: string; + pre: string; + opts: PTOptions; + constructor(pre: string, o?: PTOptions); + _transform(chunk: string, encoding: string, cb: Function): any; + _flush(cb: Function): any; +} diff --git a/.pnpm-store/v11/files/35/82f92f55c30bbfe55aa86b8632d89ef61f559e64951c816eb32d5fe09fd564566ef8fbf56728237d22907fdf50abfcdadeb0c3a94849393a185f593ebd49f9 b/.pnpm-store/v11/files/35/82f92f55c30bbfe55aa86b8632d89ef61f559e64951c816eb32d5fe09fd564566ef8fbf56728237d22907fdf50abfcdadeb0c3a94849393a185f593ebd49f9 new file mode 100644 index 00000000..cccb75de --- /dev/null +++ b/.pnpm-store/v11/files/35/82f92f55c30bbfe55aa86b8632d89ef61f559e64951c816eb32d5fe09fd564566ef8fbf56728237d22907fdf50abfcdadeb0c3a94849393a185f593ebd49f9 @@ -0,0 +1,120 @@ +{ + "name": "typescript", + "author": "Microsoft Corp.", + "homepage": "https://www.typescriptlang.org/", + "version": "5.9.3", + "license": "Apache-2.0", + "description": "TypeScript is a language for application scale JavaScript development", + "keywords": [ + "TypeScript", + "Microsoft", + "compiler", + "language", + "javascript" + ], + "bugs": { + "url": "https://github.com/microsoft/TypeScript/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/microsoft/TypeScript.git" + }, + "main": "./lib/typescript.js", + "typings": "./lib/typescript.d.ts", + "bin": { + "tsc": "./bin/tsc", + "tsserver": "./bin/tsserver" + }, + "engines": { + "node": ">=14.17" + }, + "files": [ + "bin", + "lib", + "!lib/enu", + "LICENSE.txt", + "README.md", + "SECURITY.md", + "ThirdPartyNoticeText.txt", + "!**/.gitattributes" + ], + "devDependencies": { + "@dprint/formatter": "^0.4.1", + "@dprint/typescript": "0.93.4", + "@esfx/canceltoken": "^1.0.0", + "@eslint/js": "^9.20.0", + "@octokit/rest": "^21.1.1", + "@types/chai": "^4.3.20", + "@types/diff": "^7.0.1", + "@types/minimist": "^1.2.5", + "@types/mocha": "^10.0.10", + "@types/ms": "^0.7.34", + "@types/node": "latest", + "@types/source-map-support": "^0.5.10", + "@types/which": "^3.0.4", + "@typescript-eslint/rule-tester": "^8.24.1", + "@typescript-eslint/type-utils": "^8.24.1", + "@typescript-eslint/utils": "^8.24.1", + "azure-devops-node-api": "^14.1.0", + "c8": "^10.1.3", + "chai": "^4.5.0", + "chokidar": "^4.0.3", + "diff": "^7.0.0", + "dprint": "^0.49.0", + "esbuild": "^0.25.0", + "eslint": "^9.20.1", + "eslint-formatter-autolinkable-stylish": "^1.4.0", + "eslint-plugin-regexp": "^2.7.0", + "fast-xml-parser": "^4.5.2", + "glob": "^10.4.5", + "globals": "^15.15.0", + "hereby": "^1.10.0", + "jsonc-parser": "^3.3.1", + "knip": "^5.44.4", + "minimist": "^1.2.8", + "mocha": "^10.8.2", + "mocha-fivemat-progress-reporter": "^0.1.0", + "monocart-coverage-reports": "^2.12.1", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "playwright": "^1.50.1", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1", + "typescript": "^5.7.3", + "typescript-eslint": "^8.24.1", + "which": "^3.0.1" + }, + "overrides": { + "typescript@*": "$typescript" + }, + "scripts": { + "test": "hereby runtests-parallel --light=false", + "test:eslint-rules": "hereby run-eslint-rules-tests", + "build": "npm run build:compiler && npm run build:tests", + "build:compiler": "hereby local", + "build:tests": "hereby tests", + "build:tests:notypecheck": "hereby tests --no-typecheck", + "clean": "hereby clean", + "gulp": "hereby", + "lint": "hereby lint", + "knip": "hereby knip", + "format": "dprint fmt", + "setup-hooks": "node scripts/link-hooks.mjs" + }, + "browser": { + "fs": false, + "os": false, + "path": false, + "crypto": false, + "buffer": false, + "source-map-support": false, + "inspector": false, + "perf_hooks": false + }, + "packageManager": "npm@8.19.4", + "volta": { + "node": "20.1.0", + "npm": "8.19.4" + }, + "gitHead": "c63de15a992d37f0d6cec03ac7631872838602cb" +} diff --git a/.pnpm-store/v11/files/35/90cd3433b362223d3256d29a851a056c09d0fc0f4414d194cf39b64d166841dffd59f3029c352991682e9ee8e06fc97855fa1cefeb209098428dc5c2c7f953 b/.pnpm-store/v11/files/35/90cd3433b362223d3256d29a851a056c09d0fc0f4414d194cf39b64d166841dffd59f3029c352991682e9ee8e06fc97855fa1cefeb209098428dc5c2c7f953 new file mode 100644 index 00000000..5e751a2c --- /dev/null +++ b/.pnpm-store/v11/files/35/90cd3433b362223d3256d29a851a056c09d0fc0f4414d194cf39b64d166841dffd59f3029c352991682e9ee8e06fc97855fa1cefeb209098428dc5c2c7f953 @@ -0,0 +1 @@ +module.exports = require('./wrapperValue'); diff --git a/.pnpm-store/v11/files/35/92fe902cc9e73bfe11f8facc35d67b0f1e9cb544ea2df8185e5cefe33d46f3492528ad89535b614a95c7eda8ae69594f3786a12884fc177a7597df9778ac31 b/.pnpm-store/v11/files/35/92fe902cc9e73bfe11f8facc35d67b0f1e9cb544ea2df8185e5cefe33d46f3492528ad89535b614a95c7eda8ae69594f3786a12884fc177a7597df9778ac31 new file mode 100644 index 00000000..49cf9504 --- /dev/null +++ b/.pnpm-store/v11/files/35/92fe902cc9e73bfe11f8facc35d67b0f1e9cb544ea2df8185e5cefe33d46f3492528ad89535b614a95c7eda8ae69594f3786a12884fc177a7597df9778ac31 @@ -0,0 +1,56 @@ +![Async Logo](https://raw.githubusercontent.com/caolan/async/master/logo/async-logo_readme.jpg) + +[![Build Status via Travis CI](https://travis-ci.org/caolan/async.svg?branch=master)](https://travis-ci.org/caolan/async) +[![NPM version](https://img.shields.io/npm/v/async.svg)](https://www.npmjs.com/package/async) +[![Coverage Status](https://coveralls.io/repos/caolan/async/badge.svg?branch=master)](https://coveralls.io/r/caolan/async?branch=master) +[![Join the chat at https://gitter.im/caolan/async](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/caolan/async?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +[![libhive - Open source examples](https://www.libhive.com/providers/npm/packages/async/examples/badge.svg)](https://www.libhive.com/providers/npm/packages/async) +[![jsDelivr Hits](https://data.jsdelivr.com/v1/package/npm/async/badge?style=rounded)](https://www.jsdelivr.com/package/npm/async) + + +Async is a utility module which provides straight-forward, powerful functions for working with [asynchronous JavaScript](http://caolan.github.io/async/global.html). Although originally designed for use with [Node.js](https://nodejs.org/) and installable via `npm install --save async`, it can also be used directly in the browser. + +This version of the package is optimized for the Node.js environment. If you use Async with webpack, install [`async-es`](https://www.npmjs.com/package/async-es) instead. + +For Documentation, visit + +*For Async v1.5.x documentation, go [HERE](https://github.com/caolan/async/blob/v1.5.2/README.md)* + + +```javascript +// for use with Node-style callbacks... +var async = require("async"); + +var obj = {dev: "/dev.json", test: "/test.json", prod: "/prod.json"}; +var configs = {}; + +async.forEachOf(obj, (value, key, callback) => { + fs.readFile(__dirname + value, "utf8", (err, data) => { + if (err) return callback(err); + try { + configs[key] = JSON.parse(data); + } catch (e) { + return callback(e); + } + callback(); + }); +}, err => { + if (err) console.error(err.message); + // configs is now a map of JSON data + doSomethingWith(configs); +}); +``` + +```javascript +var async = require("async"); + +// ...or ES2017 async functions +async.mapLimit(urls, 5, async function(url) { + const response = await fetch(url) + return response.body +}, (err, results) => { + if (err) throw err + // results is now an array of the response bodies + console.log(results) +}) +``` diff --git a/.pnpm-store/v11/files/35/b1c3ecc67b3e3418bed98935588ee130bc3ddccaf8cd73bce5dff4a1f0e0d8b9d5d995b2bc247838aeda688b2c757fd06eb0e854f18503bcf3ed291086b366 b/.pnpm-store/v11/files/35/b1c3ecc67b3e3418bed98935588ee130bc3ddccaf8cd73bce5dff4a1f0e0d8b9d5d995b2bc247838aeda688b2c757fd06eb0e854f18503bcf3ed291086b366 new file mode 100644 index 00000000..fafe1c98 --- /dev/null +++ b/.pnpm-store/v11/files/35/b1c3ecc67b3e3418bed98935588ee130bc3ddccaf8cd73bce5dff4a1f0e0d8b9d5d995b2bc247838aeda688b2c757fd06eb0e854f18503bcf3ed291086b366 @@ -0,0 +1,235 @@ +2018-06-17: Version 4.0.1 + + * Fix parsing async get/set in a class (issue 1861, 1875) + * Account for different return statement argument (issue 1829, 1897, 1928) + * Correct the handling of HTML comment when parsing a module (issue 1841) + * Fix incorrect parse async with proto-identifier-shorthand (issue 1847) + * Fix negative column in binary expression (issue 1844) + * Fix incorrect YieldExpression in object methods (issue 1834) + * Various documentation fixes + +2017-06-10: Version 4.0.0 + + * Support ES2017 async function and await expression (issue 1079) + * Support ES2017 trailing commas in function parameters (issue 1550) + * Explicitly distinguish parsing a module vs a script (issue 1576) + * Fix JSX non-empty container (issue 1786) + * Allow JSX element in a yield expression (issue 1765) + * Allow `in` expression in a concise body with a function body (issue 1793) + * Setter function argument must not be a rest parameter (issue 1693) + * Limit strict mode directive to functions with a simple parameter list (issue 1677) + * Prohibit any escape sequence in a reserved word (issue 1612) + * Only permit hex digits in hex escape sequence (issue 1619) + * Prohibit labelled class/generator/function declaration (issue 1484) + * Limit function declaration as if statement clause only in non-strict mode (issue 1657) + * Tolerate missing ) in a with and do-while statement (issue 1481) + +2016-12-22: Version 3.1.3 + + * Support binding patterns as rest element (issue 1681) + * Account for different possible arguments of a yield expression (issue 1469) + +2016-11-24: Version 3.1.2 + + * Ensure that import specifier is more restrictive (issue 1615) + * Fix duplicated JSX tokens (issue 1613) + * Scan template literal in a JSX expression container (issue 1622) + * Improve XHTML entity scanning in JSX (issue 1629) + +2016-10-31: Version 3.1.1 + + * Fix assignment expression problem in an export declaration (issue 1596) + * Fix incorrect tokenization of hex digits (issue 1605) + +2016-10-09: Version 3.1.0 + + * Do not implicitly collect comments when comment attachment is specified (issue 1553) + * Fix incorrect handling of duplicated proto shorthand fields (issue 1485) + * Prohibit initialization in some variants of for statements (issue 1309, 1561) + * Fix incorrect parsing of export specifier (issue 1578) + * Fix ESTree compatibility for assignment pattern (issue 1575) + +2016-09-03: Version 3.0.0 + + * Support ES2016 exponentiation expression (issue 1490) + * Support JSX syntax (issue 1467) + * Use the latest Unicode 8.0 (issue 1475) + * Add the support for syntax node delegate (issue 1435) + * Fix ESTree compatibility on meta property (issue 1338) + * Fix ESTree compatibility on default parameter value (issue 1081) + * Fix ESTree compatibility on try handler (issue 1030) + +2016-08-23: Version 2.7.3 + + * Fix tokenizer confusion with a comment (issue 1493, 1516) + +2016-02-02: Version 2.7.2 + + * Fix out-of-bound error location in an invalid string literal (issue 1457) + * Fix shorthand object destructuring defaults in variable declarations (issue 1459) + +2015-12-10: Version 2.7.1 + + * Do not allow trailing comma in a variable declaration (issue 1360) + * Fix assignment to `let` in non-strict mode (issue 1376) + * Fix missing delegate property in YieldExpression (issue 1407) + +2015-10-22: Version 2.7.0 + + * Fix the handling of semicolon in a break statement (issue 1044) + * Run the test suite with major web browsers (issue 1259, 1317) + * Allow `let` as an identifier in non-strict mode (issue 1289) + * Attach orphaned comments as `innerComments` (issue 1328) + * Add the support for token delegator (issue 1332) + +2015-09-01: Version 2.6.0 + + * Properly allow or prohibit `let` in a binding identifier/pattern (issue 1048, 1098) + * Add sourceType field for Program node (issue 1159) + * Ensure that strict mode reserved word binding throw an error (issue 1171) + * Run the test suite with Node.js and IE 11 on Windows (issue 1294) + * Allow binding pattern with no initializer in a for statement (issue 1301) + +2015-07-31: Version 2.5.0 + + * Run the test suite in a browser environment (issue 1004) + * Ensure a comma between imported default binding and named imports (issue 1046) + * Distinguish `yield` as a keyword vs an identifier (issue 1186) + * Support ES6 meta property `new.target` (issue 1203) + * Fix the syntax node for yield with expression (issue 1223) + * Fix the check of duplicated proto in property names (issue 1225) + * Fix ES6 Unicode escape in identifier name (issue 1229) + * Support ES6 IdentifierStart and IdentifierPart (issue 1232) + * Treat await as a reserved word when parsing as a module (issue 1234) + * Recognize identifier characters from Unicode SMP (issue 1244) + * Ensure that export and import can be followed by a comma (issue 1250) + * Fix yield operator precedence (issue 1262) + +2015-07-01: Version 2.4.1 + + * Fix some cases of comment attachment (issue 1071, 1175) + * Fix the handling of destructuring in function arguments (issue 1193) + * Fix invalid ranges in assignment expression (issue 1201) + +2015-06-26: Version 2.4.0 + + * Support ES6 for-of iteration (issue 1047) + * Support ES6 spread arguments (issue 1169) + * Minimize npm payload (issue 1191) + +2015-06-16: Version 2.3.0 + + * Support ES6 generator (issue 1033) + * Improve parsing of regular expressions with `u` flag (issue 1179) + +2015-04-17: Version 2.2.0 + + * Support ES6 import and export declarations (issue 1000) + * Fix line terminator before arrow not recognized as error (issue 1009) + * Support ES6 destructuring (issue 1045) + * Support ES6 template literal (issue 1074) + * Fix the handling of invalid/incomplete string escape sequences (issue 1106) + * Fix ES3 static member access restriction (issue 1120) + * Support for `super` in ES6 class (issue 1147) + +2015-03-09: Version 2.1.0 + + * Support ES6 class (issue 1001) + * Support ES6 rest parameter (issue 1011) + * Expand the location of property getter, setter, and methods (issue 1029) + * Enable TryStatement transition to a single handler (issue 1031) + * Support ES6 computed property name (issue 1037) + * Tolerate unclosed block comment (issue 1041) + * Support ES6 lexical declaration (issue 1065) + +2015-02-06: Version 2.0.0 + + * Support ES6 arrow function (issue 517) + * Support ES6 Unicode code point escape (issue 521) + * Improve the speed and accuracy of comment attachment (issue 522) + * Support ES6 default parameter (issue 519) + * Support ES6 regular expression flags (issue 557) + * Fix scanning of implicit octal literals (issue 565) + * Fix the handling of automatic semicolon insertion (issue 574) + * Support ES6 method definition (issue 620) + * Support ES6 octal integer literal (issue 621) + * Support ES6 binary integer literal (issue 622) + * Support ES6 object literal property value shorthand (issue 624) + +2015-03-03: Version 1.2.5 + + * Fix scanning of implicit octal literals (issue 565) + +2015-02-05: Version 1.2.4 + + * Fix parsing of LeftHandSideExpression in ForInStatement (issue 560) + * Fix the handling of automatic semicolon insertion (issue 574) + +2015-01-18: Version 1.2.3 + + * Fix division by this (issue 616) + +2014-05-18: Version 1.2.2 + + * Fix duplicated tokens when collecting comments (issue 537) + +2014-05-04: Version 1.2.1 + + * Ensure that Program node may still have leading comments (issue 536) + +2014-04-29: Version 1.2.0 + + * Fix semicolon handling for expression statement (issue 462, 533) + * Disallow escaped characters in regular expression flags (issue 503) + * Performance improvement for location tracking (issue 520) + * Improve the speed of comment attachment (issue 522) + +2014-03-26: Version 1.1.1 + + * Fix token handling of forward slash after an array literal (issue 512) + +2014-03-23: Version 1.1.0 + + * Optionally attach comments to the owning syntax nodes (issue 197) + * Simplify binary parsing with stack-based shift reduce (issue 352) + * Always include the raw source of literals (issue 376) + * Add optional input source information (issue 386) + * Tokenizer API for pure lexical scanning (issue 398) + * Improve the web site and its online demos (issue 337, 400, 404) + * Performance improvement for location tracking (issue 417, 424) + * Support HTML comment syntax (issue 451) + * Drop support for legacy browsers (issue 474) + +2013-08-27: Version 1.0.4 + + * Minimize the payload for packages (issue 362) + * Fix missing cases on an empty switch statement (issue 436) + * Support escaped ] in regexp literal character classes (issue 442) + * Tolerate invalid left-hand side expression (issue 130) + +2013-05-17: Version 1.0.3 + + * Variable declaration needs at least one declarator (issue 391) + * Fix benchmark's variance unit conversion (issue 397) + * IE < 9: \v should be treated as vertical tab (issue 405) + * Unary expressions should always have prefix: true (issue 418) + * Catch clause should only accept an identifier (issue 423) + * Tolerate setters without parameter (issue 426) + +2012-11-02: Version 1.0.2 + + Improvement: + + * Fix esvalidate JUnit output upon a syntax error (issue 374) + +2012-10-28: Version 1.0.1 + + Improvements: + + * esvalidate understands shebang in a Unix shell script (issue 361) + * esvalidate treats fatal parsing failure as an error (issue 361) + * Reduce Node.js package via .npmignore (issue 362) + +2012-10-22: Version 1.0.0 + + Initial release. diff --git a/.pnpm-store/v11/files/35/cc5dbf8cd79972da7c7bcc782209d452ab06f513c2e4e64abc7d386dc6ada6779b679a4b016416eb7c2015a64cad7b36f653f14bc32924708f7a75ecfe8a9a b/.pnpm-store/v11/files/35/cc5dbf8cd79972da7c7bcc782209d452ab06f513c2e4e64abc7d386dc6ada6779b679a4b016416eb7c2015a64cad7b36f653f14bc32924708f7a75ecfe8a9a new file mode 100644 index 00000000..15e465ef --- /dev/null +++ b/.pnpm-store/v11/files/35/cc5dbf8cd79972da7c7bcc782209d452ab06f513c2e4e64abc7d386dc6ada6779b679a4b016416eb7c2015a64cad7b36f653f14bc32924708f7a75ecfe8a9a @@ -0,0 +1,17 @@ +# How to +```javascript +var sliceBuffer = require('arraybuffer.slice'); +var ab = (new Int8Array(5)).buffer; +var sliced = sliceBuffer(ab, 1, 3); +sliced = sliceBuffer(ab, 1); +``` + +# Licence (MIT) +Copyright (C) 2013 Rase- + + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/35/ced65b66931428f91d3709d94648d431695dba8fc7f72ee093098a0e10ee9a6ad049d637bc070f1cc57d2d861feab98509b6d269ad35cb6430ea615c7b1ae6 b/.pnpm-store/v11/files/35/ced65b66931428f91d3709d94648d431695dba8fc7f72ee093098a0e10ee9a6ad049d637bc070f1cc57d2d861feab98509b6d269ad35cb6430ea615c7b1ae6 new file mode 100644 index 00000000..894ae237 --- /dev/null +++ b/.pnpm-store/v11/files/35/ced65b66931428f91d3709d94648d431695dba8fc7f72ee093098a0e10ee9a6ad049d637bc070f1cc57d2d861feab98509b6d269ad35cb6430ea615c7b1ae6 @@ -0,0 +1,103 @@ +# posix-character-classes [![NPM version](https://img.shields.io/npm/v/posix-character-classes.svg?style=flat)](https://www.npmjs.com/package/posix-character-classes) [![NPM monthly downloads](https://img.shields.io/npm/dm/posix-character-classes.svg?style=flat)](https://npmjs.org/package/posix-character-classes) [![NPM total downloads](https://img.shields.io/npm/dt/posix-character-classes.svg?style=flat)](https://npmjs.org/package/posix-character-classes) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/posix-character-classes.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/posix-character-classes) + +> POSIX character classes for creating regular expressions. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save posix-character-classes +``` + +Install with [yarn](https://yarnpkg.com): + +```sh +$ yarn add posix-character-classes +``` + +## Usage + +```js +var posix = require('posix-character-classes'); +console.log(posix.alpha); +//=> 'A-Za-z' +``` + +## POSIX Character classes + +The POSIX standard supports the following classes or categories of charactersh (note that classes must be defined within brackets)[1]: + +| **POSIX class** | **Equivalent to** | **Matches** | +| --- | --- | --- | +| `[:alnum:]` | `[A-Za-z0-9]` | digits, uppercase and lowercase letters | +| `[:alpha:]` | `[A-Za-z]` | upper- and lowercase letters | +| `[:ascii:]` | `[\x00-\x7F]` | ASCII characters | +| `[:blank:]` | `[ \t]` | space and TAB characters only | +| `[:cntrl:]` | `[\x00-\x1F\x7F]` | Control characters | +| `[:digit:]` | `[0-9]` | digits | +| `[:graph:]` | `[^[:cntrl:]]` | graphic characters (all characters which have graphic representation) | +| `[:lower:]` | `[a-z]` | lowercase letters | +| `[:print:]` | `[[:graph] ]` | graphic characters and space | +| `[:punct:]` | ``[-!"#$%&'()*+,./:;<=>?@[]^_`{ | }~]`` | all punctuation characters (all graphic characters except letters and digits) | +| `[:space:]` | `[ \t\n\r\f\v]` | all blank (whitespace) characters, including spaces, tabs, new lines, carriage returns, form feeds, and vertical tabs | +| `[:upper:]` | `[A-Z]` | uppercase letters | +| `[:word:]` | `[A-Za-z0-9_]` | word characters | +| `[:xdigit:]` | `[0-9A-Fa-f]` | hexadecimal digits | + +## Examples + +* `a[[:digit:]]b` matches `a0b`, `a1b`, ..., `a9b`. +* `a[:digit:]b` is invalid, character classes must be enclosed in brackets +* `[[:digit:]abc]` matches any digit, as well as `a`, `b`, and `c`. +* `[abc[:digit:]]` is the same as the previous, matching any digit, as well as `a`, `b`, and `c` +* `[^ABZ[:lower:]]` matches any character except lowercase letters, `A`, `B`, and `Z`. + +## About + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.5.0, on April 20, 2017._ + +
+
+
    +
  1. table and examples are based on the WikiBooks page for [Regular Expressions/POSIX Basic Regular Expressions](https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions), which is available under the [Creative Commons Attribution-ShareAlike License](https://creativecommons.org/licenses/by-sa/3.0/). + +
  2. +
+
\ No newline at end of file diff --git a/.pnpm-store/v11/files/35/d37ba184af9dd6a641e2f6e54d3181fb373e1b5afab50a338842fe2822a43db3a3d6e90b3a13f0ac0a3bef45d9abc0c9462ce46b200efa84a66bd214bff2c5 b/.pnpm-store/v11/files/35/d37ba184af9dd6a641e2f6e54d3181fb373e1b5afab50a338842fe2822a43db3a3d6e90b3a13f0ac0a3bef45d9abc0c9462ce46b200efa84a66bd214bff2c5 new file mode 100644 index 00000000..848e2107 --- /dev/null +++ b/.pnpm-store/v11/files/35/d37ba184af9dd6a641e2f6e54d3181fb373e1b5afab50a338842fe2822a43db3a3d6e90b3a13f0ac0a3bef45d9abc0c9462ce46b200efa84a66bd214bff2c5 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('orderBy', require('../orderBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/35/d5894304eabaae5e640d177be0b1572020f61292111b197d64c30121ea3f0d654cbb5e70f76ce874f514db8b6f2809e68376fa64b8302c5068670220966736 b/.pnpm-store/v11/files/35/d5894304eabaae5e640d177be0b1572020f61292111b197d64c30121ea3f0d654cbb5e70f76ce874f514db8b6f2809e68376fa64b8302c5068670220966736 new file mode 100644 index 00000000..6e4c698d --- /dev/null +++ b/.pnpm-store/v11/files/35/d5894304eabaae5e640d177be0b1572020f61292111b197d64c30121ea3f0d654cbb5e70f76ce874f514db8b6f2809e68376fa64b8302c5068670220966736 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').safe; diff --git a/.pnpm-store/v11/files/35/e2c3a418ca54bd956c6067ad5b5fb623c928204c279975a00420437dbab911cae41500db4c373ad74ae707ca8daeb4b5e05aed1b2e8ac2d788f0a696e107d5 b/.pnpm-store/v11/files/35/e2c3a418ca54bd956c6067ad5b5fb623c928204c279975a00420437dbab911cae41500db4c373ad74ae707ca8daeb4b5e05aed1b2e8ac2d788f0a696e107d5 new file mode 100644 index 00000000..25c6be88 --- /dev/null +++ b/.pnpm-store/v11/files/35/e2c3a418ca54bd956c6067ad5b5fb623c928204c279975a00420437dbab911cae41500db4c373ad74ae707ca8daeb4b5e05aed1b2e8ac2d788f0a696e107d5 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').fast; diff --git a/.pnpm-store/v11/files/35/fe22f5b45e68baefa8e9e279dba9a7ae1a76f1153523ccdd05b6d318554afdb0df6e30cbf1294ef8d6b054230f90e27f53091bc54038321cbb567aa9202cfd b/.pnpm-store/v11/files/35/fe22f5b45e68baefa8e9e279dba9a7ae1a76f1153523ccdd05b6d318554afdb0df6e30cbf1294ef8d6b054230f90e27f53091bc54038321cbb567aa9202cfd new file mode 100644 index 00000000..fc8b328a --- /dev/null +++ b/.pnpm-store/v11/files/35/fe22f5b45e68baefa8e9e279dba9a7ae1a76f1153523ccdd05b6d318554afdb0df6e30cbf1294ef8d6b054230f90e27f53091bc54038321cbb567aa9202cfd @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../collection')); diff --git a/.pnpm-store/v11/files/36/01a8090c938b24522c7add22510b39866fde9b71d5521bdadd01a3642d07a55669de8685210d7c83cfc3d2059538ff14e6cb3676a230d9276bcdd123412e5e b/.pnpm-store/v11/files/36/01a8090c938b24522c7add22510b39866fde9b71d5521bdadd01a3642d07a55669de8685210d7c83cfc3d2059538ff14e6cb3676a230d9276bcdd123412e5e new file mode 100644 index 00000000..bd80a4ea --- /dev/null +++ b/.pnpm-store/v11/files/36/01a8090c938b24522c7add22510b39866fde9b71d5521bdadd01a3642d07a55669de8685210d7c83cfc3d2059538ff14e6cb3676a230d9276bcdd123412e5e @@ -0,0 +1,18 @@ +(function () { + "use strict"; + + var atob = require('.'); + var encoded = "SGVsbG8sIFdvcmxkIQ==" + var unencoded = "Hello, World!"; + /* + , encoded = "SGVsbG8sIBZM" + , unencoded = "Hello, 世界" + */ + + if (unencoded !== atob(encoded)) { + console.log('[FAIL]', unencoded, atob(encoded)); + return; + } + + console.log('[PASS] all tests pass'); +}()); diff --git a/.pnpm-store/v11/files/36/0df857b0c9d171d93ba929249384d4e2e1eb24cbef4c5e733811129407f2f079f0536d8df38f1692c3434046f2ec055f984fd5227767f366e5102967710b7f b/.pnpm-store/v11/files/36/0df857b0c9d171d93ba929249384d4e2e1eb24cbef4c5e733811129407f2f079f0536d8df38f1692c3434046f2ec055f984fd5227767f366e5102967710b7f new file mode 100644 index 00000000..822db1cc --- /dev/null +++ b/.pnpm-store/v11/files/36/0df857b0c9d171d93ba929249384d4e2e1eb24cbef4c5e733811129407f2f079f0536d8df38f1692c3434046f2ec055f984fd5227767f366e5102967710b7f @@ -0,0 +1,82 @@ +var colors = require('../lib/index'); + +console.log('First some yellow text'.yellow); + +console.log('Underline that text'.yellow.underline); + +console.log('Make it bold and red'.red.bold); + +console.log(('Double Raindows All Day Long').rainbow); + +console.log('Drop the bass'.trap); + +console.log('DROP THE RAINBOW BASS'.trap.rainbow); + +// styles not widely supported +console.log('Chains are also cool.'.bold.italic.underline.red); + +// styles not widely supported +console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse + + ' styles! '.yellow.bold); +console.log('Zebras are so fun!'.zebra); + +// +// Remark: .strikethrough may not work with Mac OS Terminal App +// +console.log('This is ' + 'not'.strikethrough + ' fun.'); + +console.log('Background color attack!'.black.bgWhite); +console.log('Use random styles on everything!'.random); +console.log('America, Heck Yeah!'.america); + +console.log('Blindingly '.brightCyan + 'bright? '.brightRed + 'Why '.brightYellow + 'not?!'.brightGreen); + +console.log('Setting themes is useful'); + +// +// Custom themes +// +console.log('Generic logging theme as JSON'.green.bold.underline); +// Load theme with JSON literal +colors.setTheme({ + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red', +}); + +// outputs red text +console.log('this is an error'.error); + +// outputs yellow text +console.log('this is a warning'.warn); + +// outputs grey text +console.log('this is an input'.input); + +console.log('Generic logging theme as file'.green.bold.underline); + +// Load a theme from file +try { + colors.setTheme(require(__dirname + '/../themes/generic-logging.js')); +} catch (err) { + console.log(err); +} + +// outputs red text +console.log('this is an error'.error); + +// outputs yellow text +console.log('this is a warning'.warn); + +// outputs grey text +console.log('this is an input'.input); + +// console.log("Don't summon".zalgo) + diff --git a/.pnpm-store/v11/files/36/0fb650633eb862015fa5c897f7aa2cd090e89127594f7ec822ac1fb135ec622c949dd4728bae4153a500439d944b30212e8d6b79a6370947cecc99871d2e66 b/.pnpm-store/v11/files/36/0fb650633eb862015fa5c897f7aa2cd090e89127594f7ec822ac1fb135ec622c949dd4728bae4153a500439d944b30212e8d6b79a6370947cecc99871d2e66 new file mode 100644 index 00000000..382f6610 --- /dev/null +++ b/.pnpm-store/v11/files/36/0fb650633eb862015fa5c897f7aa2cd090e89127594f7ec822ac1fb135ec622c949dd4728bae4153a500439d944b30212e8d6b79a6370947cecc99871d2e66 @@ -0,0 +1,30 @@ +var createRelationalOperation = require('./_createRelationalOperation'); + +/** + * Checks if `value` is less than or equal to `other`. + * + * @static + * @memberOf _ + * @since 3.9.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than or equal to + * `other`, else `false`. + * @see _.gte + * @example + * + * _.lte(1, 3); + * // => true + * + * _.lte(3, 3); + * // => true + * + * _.lte(3, 1); + * // => false + */ +var lte = createRelationalOperation(function(value, other) { + return value <= other; +}); + +module.exports = lte; diff --git a/.pnpm-store/v11/files/36/1f895db42b8321e2ee5c6bf8dbb0ffd2fc7b45ed97de20622ac3c3b6a04c8c56524d3b6d88da3ef7a18eba23c22f4ea710b75b46231c86464a74026d6f23eb b/.pnpm-store/v11/files/36/1f895db42b8321e2ee5c6bf8dbb0ffd2fc7b45ed97de20622ac3c3b6a04c8c56524d3b6d88da3ef7a18eba23c22f4ea710b75b46231c86464a74026d6f23eb new file mode 100644 index 00000000..9c51dfed --- /dev/null +++ b/.pnpm-store/v11/files/36/1f895db42b8321e2ee5c6bf8dbb0ffd2fc7b45ed97de20622ac3c3b6a04c8c56524d3b6d88da3ef7a18eba23c22f4ea710b75b46231c86464a74026d6f23eb @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.pnpm-store/v11/files/36/3cd05a2ff85dec50d2eb7e4848f9a610888bf4b14f1edf5afbec95ec8db954e92564cd914b7027c94454a640294722e25bb0e3d248dee96a057353b76a4b66 b/.pnpm-store/v11/files/36/3cd05a2ff85dec50d2eb7e4848f9a610888bf4b14f1edf5afbec95ec8db954e92564cd914b7027c94454a640294722e25bb0e3d248dee96a057353b76a4b66 new file mode 100644 index 00000000..041f4524 --- /dev/null +++ b/.pnpm-store/v11/files/36/3cd05a2ff85dec50d2eb7e4848f9a610888bf4b14f1edf5afbec95ec8db954e92564cd914b7027c94454a640294722e25bb0e3d248dee96a057353b76a4b66 @@ -0,0 +1,35 @@ +(function () { + 'use strict'; + + /* + * Wrap the numbers 0 to 256 in their foreground or background terminal escape code + */ + var fgcodes = Array.apply(null, new Array(256)).map(function (_, i) { return '\x1b[38;5;' + i + 'm'; }); + var bgcodes = Array.apply(null, new Array(256)).map(function (_, i) { return '\x1b[48;5;' + i + 'm'; }); + + /* + * Slice the foreground and background codes in their respective sections + */ + var fg = module.exports.fg = { + codes: fgcodes, + standard: fgcodes.slice(0, 8), + bright: fgcodes.slice(8, 16), + rgb: fgcodes.slice(16, 232), + grayscale: fgcodes.slice(232, 256), + // get a red-green-blue value by index, in the ranged 0 to 6 + getRgb: function (r, g, b) { return fg.rgb[36*r + 6*g + b]; } + }; + + var bg = module.exports.bg = { + codes: bgcodes, + standard: bgcodes.slice(0, 8), + bright: bgcodes.slice(8, 16), + rgb: bgcodes.slice(16, 232), + grayscale: bgcodes.slice(232, 256), + // get a red-green-blue value by index, in the ranged 0 to 6 + getRgb: function (r, g, b) { return bg.rgb[36*r + 6*g + b]; } + }; + + var reset = module.exports.reset = '\x1b[0m'; + +}()); diff --git a/.pnpm-store/v11/files/36/44a4e46da8c3a60d84d26b7e25b631dc5c92c0e1bc4687726b01bfc7383195c3df60959ca20a5cc9707e92a921795f356b3551579b47d83f2fe66d68816cb9 b/.pnpm-store/v11/files/36/44a4e46da8c3a60d84d26b7e25b631dc5c92c0e1bc4687726b01bfc7383195c3df60959ca20a5cc9707e92a921795f356b3551579b47d83f2fe66d68816cb9 new file mode 100644 index 00000000..bb81fa0b --- /dev/null +++ b/.pnpm-store/v11/files/36/44a4e46da8c3a60d84d26b7e25b631dc5c92c0e1bc4687726b01bfc7383195c3df60959ca20a5cc9707e92a921795f356b3551579b47d83f2fe66d68816cb9 @@ -0,0 +1,26 @@ +{ + "name": "progress", + "version": "2.0.3", + "description": "Flexible ascii progress bar", + "repository": { + "type": "git", + "url": "git://github.com/visionmedia/node-progress" + }, + "keywords": [ + "cli", + "progress" + ], + "author": "TJ Holowaychuk ", + "contributors": [ + "Christoffer Hallas ", + "Jordan Scales ", + "Andrew Rhyne ", + "Marco Brack " + ], + "dependencies": {}, + "main": "./index.js", + "engines": { + "node": ">=0.4.0" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/36/59824d74f968d9d8ef93e3f5bcf811ebcc0e664ae939d5290e88a4acc3193ba92b65a801ffc6028224fea87d605918796e0592505fb90cb92426bfeccb5999 b/.pnpm-store/v11/files/36/59824d74f968d9d8ef93e3f5bcf811ebcc0e664ae939d5290e88a4acc3193ba92b65a801ffc6028224fea87d605918796e0592505fb90cb92426bfeccb5999 new file mode 100644 index 00000000..dbd8c517 --- /dev/null +++ b/.pnpm-store/v11/files/36/59824d74f968d9d8ef93e3f5bcf811ebcc0e664ae939d5290e88a4acc3193ba92b65a801ffc6028224fea87d605918796e0592505fb90cb92426bfeccb5999 @@ -0,0 +1,81 @@ +## Strings & Bytes + +Miscellaneous string & byte encoding and decoding functionality provided for compatibility across supported versions of V8 and Node. Implemented by NAN to ensure that all encoding types are supported, even for older versions of Node where they are missing. + + - Nan::Encoding + - Nan::Encode() + - Nan::TryEncode() + - Nan::DecodeBytes() + - Nan::DecodeWrite() + + + +### Nan::Encoding + +An enum representing the supported encoding types. A copy of `node::encoding` that is consistent across versions of Node. + +Definition: + +```c++ +enum Nan::Encoding { ASCII, UTF8, BASE64, UCS2, BINARY, HEX, BUFFER } +``` + + + +### Nan::Encode() + +A wrapper around `node::Encode()` that provides a consistent implementation across supported versions of Node. + +**Note** `node::Encode()` was deprecated in Node 24 but will remain to maintain backwards compatibility. For Node 24 and higher consider using [`Nan::TryEncode()`](#api_nan_try_encode). + +Signature: + +```c++ +v8::Local Nan::Encode(const void *buf, + size_t len, + enum Nan::Encoding encoding = BINARY); +``` + + + +### Nan::TryEncode() + +A wrapper around `node::TryEncode()` that provides a consistent implementation across supported versions of Node. + +**Note** Only available in Node 24 and higher. For earlier versions use [`Nan::Encode()`](#api_nan_encode). + +Signature: + +```c++ +Nan::MaybeLocal Nan::TryEncode(const void *buf, + size_t len, + enum Nan::Encoding encoding = BINARY); +``` + + + +### Nan::DecodeBytes() + +A wrapper around `node::DecodeBytes()` that provides a consistent implementation across supported versions of Node. + +Signature: + +```c++ +ssize_t Nan::DecodeBytes(v8::Local val, + enum Nan::Encoding encoding = BINARY); +``` + + + +### Nan::DecodeWrite() + +A wrapper around `node::DecodeWrite()` that provides a consistent implementation across supported versions of Node. + +Signature: + +```c++ +ssize_t Nan::DecodeWrite(char *buf, + size_t len, + v8::Local val, + enum Nan::Encoding encoding = BINARY); +``` diff --git a/.pnpm-store/v11/files/36/66f9441f6b83f07b8088737bb216d70005385af86c6722b88a4151e0cd2125a9b079d330b134afffe350741cd99a25c7a826a8beec79ecc405af41b9c39a2b b/.pnpm-store/v11/files/36/66f9441f6b83f07b8088737bb216d70005385af86c6722b88a4151e0cd2125a9b079d330b134afffe350741cd99a25c7a826a8beec79ecc405af41b9c39a2b new file mode 100644 index 00000000..83469b0b --- /dev/null +++ b/.pnpm-store/v11/files/36/66f9441f6b83f07b8088737bb216d70005385af86c6722b88a4151e0cd2125a9b079d330b134afffe350741cd99a25c7a826a8beec79ecc405af41b9c39a2b @@ -0,0 +1,267 @@ +# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) + +> Get the native type of a value. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save kind-of +``` + +Install with [bower](https://bower.io/) + +```sh +$ bower install kind-of --save +``` + +## Usage + +> es5, browser and es6 ready + +```js +var kindOf = require('kind-of'); + +kindOf(undefined); +//=> 'undefined' + +kindOf(null); +//=> 'null' + +kindOf(true); +//=> 'boolean' + +kindOf(false); +//=> 'boolean' + +kindOf(new Boolean(true)); +//=> 'boolean' + +kindOf(new Buffer('')); +//=> 'buffer' + +kindOf(42); +//=> 'number' + +kindOf(new Number(42)); +//=> 'number' + +kindOf('str'); +//=> 'string' + +kindOf(new String('str')); +//=> 'string' + +kindOf(arguments); +//=> 'arguments' + +kindOf({}); +//=> 'object' + +kindOf(Object.create(null)); +//=> 'object' + +kindOf(new Test()); +//=> 'object' + +kindOf(new Date()); +//=> 'date' + +kindOf([]); +//=> 'array' + +kindOf([1, 2, 3]); +//=> 'array' + +kindOf(new Array()); +//=> 'array' + +kindOf(/foo/); +//=> 'regexp' + +kindOf(new RegExp('foo')); +//=> 'regexp' + +kindOf(function () {}); +//=> 'function' + +kindOf(function * () {}); +//=> 'function' + +kindOf(new Function()); +//=> 'function' + +kindOf(new Map()); +//=> 'map' + +kindOf(new WeakMap()); +//=> 'weakmap' + +kindOf(new Set()); +//=> 'set' + +kindOf(new WeakSet()); +//=> 'weakset' + +kindOf(Symbol('str')); +//=> 'symbol' + +kindOf(new Int8Array()); +//=> 'int8array' + +kindOf(new Uint8Array()); +//=> 'uint8array' + +kindOf(new Uint8ClampedArray()); +//=> 'uint8clampedarray' + +kindOf(new Int16Array()); +//=> 'int16array' + +kindOf(new Uint16Array()); +//=> 'uint16array' + +kindOf(new Int32Array()); +//=> 'int32array' + +kindOf(new Uint32Array()); +//=> 'uint32array' + +kindOf(new Float32Array()); +//=> 'float32array' + +kindOf(new Float64Array()); +//=> 'float64array' +``` + +## Benchmarks + +Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). +Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. + +```bash +#1: array + current x 23,329,397 ops/sec ±0.82% (94 runs sampled) + lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) + lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) + +#2: boolean + current x 27,197,115 ops/sec ±0.85% (94 runs sampled) + lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) + lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) + +#3: date + current x 20,190,117 ops/sec ±0.86% (92 runs sampled) + lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) + lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) + +#4: function + current x 23,855,460 ops/sec ±0.60% (97 runs sampled) + lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) + lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) + +#5: null + current x 27,061,047 ops/sec ±0.97% (96 runs sampled) + lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) + lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) + +#6: number + current x 25,075,682 ops/sec ±0.53% (99 runs sampled) + lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) + lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) + +#7: object + current x 3,348,980 ops/sec ±0.49% (99 runs sampled) + lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) + lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) + +#8: regex + current x 21,284,827 ops/sec ±0.72% (96 runs sampled) + lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) + lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) + +#9: string + current x 25,379,234 ops/sec ±0.58% (96 runs sampled) + lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) + lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) + +#10: undef + current x 27,459,221 ops/sec ±1.01% (93 runs sampled) + lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) + lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) + +``` + +## Release history + +### v4.0.0 + +**Added** + +* `promise` support + +## Optimizations + +In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: + +1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. +2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. +3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` + +## About + +### Related projects + +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 64 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [miguelmota](https://github.com/miguelmota) | +| 1 | [dtothefp](https://github.com/dtothefp) | +| 1 | [ksheedlo](https://github.com/ksheedlo) | +| 1 | [pdehaan](https://github.com/pdehaan) | +| 1 | [laggingreflex](https://github.com/laggingreflex) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 19, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/36/8d33e1de56fbec5e00790c599f1099ab29ecfeda815480ee935a462c7891203f076e4b2ec5b7a1ab0aada9883cac004c1c864d9235e72afc3239b379b8863f b/.pnpm-store/v11/files/36/8d33e1de56fbec5e00790c599f1099ab29ecfeda815480ee935a462c7891203f076e4b2ec5b7a1ab0aada9883cac004c1c864d9235e72afc3239b379b8863f new file mode 100644 index 00000000..befa0c99 --- /dev/null +++ b/.pnpm-store/v11/files/36/8d33e1de56fbec5e00790c599f1099ab29ecfeda815480ee935a462c7891203f076e4b2ec5b7a1ab0aada9883cac004c1c864d9235e72afc3239b379b8863f @@ -0,0 +1,34 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('flag boolean true (default all --args to boolean)', function (t) { + var argv = parse(['moo', '--honk', 'cow'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); + +test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { + var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { + boolean: true, + }); + + t.deepEqual(argv, { + honk: true, + tacos: 'good', + p: 55, + _: ['moo', 'cow'], + }); + + t.deepEqual(typeof argv.honk, 'boolean'); + t.end(); +}); diff --git a/.pnpm-store/v11/files/36/92ec1ec93e4c2204d32a3c43a33faa91fd538e5ccd18def05dbeef4f8689a0d2c8bf6e1e432f0bc922be90741d2a5ac9eeb287965d963700a3d0955dede1bb b/.pnpm-store/v11/files/36/92ec1ec93e4c2204d32a3c43a33faa91fd538e5ccd18def05dbeef4f8689a0d2c8bf6e1e432f0bc922be90741d2a5ac9eeb287965d963700a3d0955dede1bb new file mode 100644 index 00000000..a04f6b22 --- /dev/null +++ b/.pnpm-store/v11/files/36/92ec1ec93e4c2204d32a3c43a33faa91fd538e5ccd18def05dbeef4f8689a0d2c8bf6e1e432f0bc922be90741d2a5ac9eeb287965d963700a3d0955dede1bb @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').constant; diff --git a/.pnpm-store/v11/files/36/944ba9a2464acc314d61d68158155941caea21e9435911f294a26f8462fd2d7f4070faea0d9c13cf459f422c08e6ac865aa50454805b39b8711dc90b1765ee b/.pnpm-store/v11/files/36/944ba9a2464acc314d61d68158155941caea21e9435911f294a26f8462fd2d7f4070faea0d9c13cf459f422c08e6ac865aa50454805b39b8711dc90b1765ee new file mode 100644 index 00000000..41280245 --- /dev/null +++ b/.pnpm-store/v11/files/36/944ba9a2464acc314d61d68158155941caea21e9435911f294a26f8462fd2d7f4070faea0d9c13cf459f422c08e6ac865aa50454805b39b8711dc90b1765ee @@ -0,0 +1,261 @@ +'use strict'; + +var isObject = require('isobject'); +var Emitter = require('component-emitter'); +var visit = require('collection-visit'); +var toPath = require('to-object-path'); +var union = require('union-value'); +var del = require('unset-value'); +var get = require('get-value'); +var has = require('has-value'); +var set = require('set-value'); + +/** + * Create a `Cache` constructor that when instantiated will + * store values on the given `prop`. + * + * ```js + * var Cache = require('cache-base').namespace('data'); + * var cache = new Cache(); + * + * cache.set('foo', 'bar'); + * //=> {data: {foo: 'bar'}} + * ``` + * @param {String} `prop` The property name to use for storing values. + * @return {Function} Returns a custom `Cache` constructor + * @api public + */ + +function namespace(prop) { + + /** + * Create a new `Cache`. Internally the `Cache` constructor is created using + * the `namespace` function, with `cache` defined as the storage object. + * + * ```js + * var app = new Cache(); + * ``` + * @param {Object} `cache` Optionally pass an object to initialize with. + * @constructor + * @api public + */ + + function Cache(cache) { + if (prop) { + this[prop] = {}; + } + if (cache) { + this.set(cache); + } + } + + /** + * Inherit Emitter + */ + + Emitter(Cache.prototype); + + /** + * Assign `value` to `key`. Also emits `set` with + * the key and value. + * + * ```js + * app.on('set', function(key, val) { + * // do something when `set` is emitted + * }); + * + * app.set(key, value); + * + * // also takes an object or array + * app.set({name: 'Halle'}); + * app.set([{foo: 'bar'}, {baz: 'quux'}]); + * console.log(app); + * //=> {name: 'Halle', foo: 'bar', baz: 'quux'} + * ``` + * + * @name .set + * @emits `set` with `key` and `value` as arguments. + * @param {String} `key` + * @param {any} `value` + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.set = function(key, val) { + if (Array.isArray(key) && arguments.length === 2) { + key = toPath(key); + } + if (isObject(key) || Array.isArray(key)) { + this.visit('set', key); + } else { + set(prop ? this[prop] : this, key, val); + this.emit('set', key, val); + } + return this; + }; + + /** + * Union `array` to `key`. Also emits `set` with + * the key and value. + * + * ```js + * app.union('a.b', ['foo']); + * app.union('a.b', ['bar']); + * console.log(app.get('a')); + * //=> {b: ['foo', 'bar']} + * ``` + * @name .union + * @param {String} `key` + * @param {any} `value` + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.union = function(key, val) { + if (Array.isArray(key) && arguments.length === 2) { + key = toPath(key); + } + var ctx = prop ? this[prop] : this; + union(ctx, key, arrayify(val)); + this.emit('union', val); + return this; + }; + + /** + * Return the value of `key`. Dot notation may be used + * to get [nested property values][get-value]. + * + * ```js + * app.set('a.b.c', 'd'); + * app.get('a.b'); + * //=> {c: 'd'} + * + * app.get(['a', 'b']); + * //=> {c: 'd'} + * ``` + * + * @name .get + * @emits `get` with `key` and `value` as arguments. + * @param {String} `key` The name of the property to get. Dot-notation may be used. + * @return {any} Returns the value of `key` + * @api public + */ + + Cache.prototype.get = function(key) { + key = toPath(arguments); + + var ctx = prop ? this[prop] : this; + var val = get(ctx, key); + + this.emit('get', key, val); + return val; + }; + + /** + * Return true if app has a stored value for `key`, + * false only if value is `undefined`. + * + * ```js + * app.set('foo', 'bar'); + * app.has('foo'); + * //=> true + * ``` + * + * @name .has + * @emits `has` with `key` and true or false as arguments. + * @param {String} `key` + * @return {Boolean} + * @api public + */ + + Cache.prototype.has = function(key) { + key = toPath(arguments); + + var ctx = prop ? this[prop] : this; + var val = get(ctx, key); + + var has = typeof val !== 'undefined'; + this.emit('has', key, has); + return has; + }; + + /** + * Delete one or more properties from the instance. + * + * ```js + * app.del(); // delete all + * // or + * app.del('foo'); + * // or + * app.del(['foo', 'bar']); + * ``` + * @name .del + * @emits `del` with the `key` as the only argument. + * @param {String|Array} `key` Property name or array of property names. + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.del = function(key) { + if (Array.isArray(key)) { + this.visit('del', key); + } else { + del(prop ? this[prop] : this, key); + this.emit('del', key); + } + return this; + }; + + /** + * Reset the entire cache to an empty object. + * + * ```js + * app.clear(); + * ``` + * @api public + */ + + Cache.prototype.clear = function() { + if (prop) { + this[prop] = {}; + } + }; + + /** + * Visit `method` over the properties in the given object, or map + * visit over the object-elements in an array. + * + * @name .visit + * @param {String} `method` The name of the `base` method to call. + * @param {Object|Array} `val` The object or array to iterate over. + * @return {Object} Returns the instance for chaining. + * @api public + */ + + Cache.prototype.visit = function(method, val) { + visit(this, method, val); + return this; + }; + + return Cache; +} + +/** + * Cast val to an array + */ + +function arrayify(val) { + return val ? (Array.isArray(val) ? val : [val]) : []; +} + +/** + * Expose `Cache` + */ + +module.exports = namespace(); + +/** + * Expose `Cache.namespace` + */ + +module.exports.namespace = namespace; diff --git a/.pnpm-store/v11/files/36/96de6a90877518f9c09d4fe8ca861a5e13bdc55e1d7b4b4b628b8180a3dd68cb96ff1aedc379fd17db48661995a0d5499fda9e1d3e48aebbb4489dc03f111c b/.pnpm-store/v11/files/36/96de6a90877518f9c09d4fe8ca861a5e13bdc55e1d7b4b4b628b8180a3dd68cb96ff1aedc379fd17db48661995a0d5499fda9e1d3e48aebbb4489dc03f111c new file mode 100644 index 00000000..54772d56 --- /dev/null +++ b/.pnpm-store/v11/files/36/96de6a90877518f9c09d4fe8ca861a5e13bdc55e1d7b4b4b628b8180a3dd68cb96ff1aedc379fd17db48661995a0d5499fda9e1d3e48aebbb4489dc03f111c @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _filter = require('./internal/filter'); + +var _filter2 = _interopRequireDefault(_filter); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Returns a new array of all the values in `coll` which pass an async truth + * test. This operation is performed in parallel, but the results array will be + * in the same order as the original. + * + * @name filter + * @static + * @memberOf module:Collections + * @method + * @alias select + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {Function} iteratee - A truth test to apply to each item in `coll`. + * The `iteratee` is passed a `callback(err, truthValue)`, which must be called + * with a boolean argument once it has completed. Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called after all the + * `iteratee` functions have finished. Invoked with (err, results). + * @example + * + * async.filter(['file1','file2','file3'], function(filePath, callback) { + * fs.access(filePath, function(err) { + * callback(null, !err) + * }); + * }, function(err, results) { + * // results now equals an array of the existing files + * }); + */ +exports.default = (0, _doParallel2.default)(_filter2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/36/a60f38c30c46cdf642966924af1d64c187601339e1e63e36916dbd35278b354eb4f3b5945e8af18ce7457fb93e9efe6ce615ce4d01d7b03e187b1c7ad7c899 b/.pnpm-store/v11/files/36/a60f38c30c46cdf642966924af1d64c187601339e1e63e36916dbd35278b354eb4f3b5945e8af18ce7457fb93e9efe6ce615ce4d01d7b03e187b1c7ad7c899 new file mode 100644 index 00000000..3347a725 --- /dev/null +++ b/.pnpm-store/v11/files/36/a60f38c30c46cdf642966924af1d64c187601339e1e63e36916dbd35278b354eb4f3b5945e8af18ce7457fb93e9efe6ce615ce4d01d7b03e187b1c7ad7c899 @@ -0,0 +1,50 @@ +sudo: false +language: node_js +before_install: + - npm install -g npm@2 + - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g +notifications: + email: false +matrix: + fast_finish: true + include: + - node_js: '0.8' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.10' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.11' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: '0.12' + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 1 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 2 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 3 + env: + - TASK=test + - NPM_LEGACY=true + - node_js: 4 + env: TASK=test + - node_js: 5 + env: TASK=test + - node_js: 6 + env: TASK=test + - node_js: 7 + env: TASK=test + - node_js: 8 + env: TASK=test + - node_js: 9 + env: TASK=test diff --git a/.pnpm-store/v11/files/36/ac995f87062fcd99799a8d8e6f7c7ee7e9e1cc82e86fbe96190d1f18628389ccb97081667b88c4b3f27d73cf789fb004ce1c1827732cbe4da18ffe1ce6d536 b/.pnpm-store/v11/files/36/ac995f87062fcd99799a8d8e6f7c7ee7e9e1cc82e86fbe96190d1f18628389ccb97081667b88c4b3f27d73cf789fb004ce1c1827732cbe4da18ffe1ce6d536 new file mode 100644 index 00000000..75ea2544 --- /dev/null +++ b/.pnpm-store/v11/files/36/ac995f87062fcd99799a8d8e6f7c7ee7e9e1cc82e86fbe96190d1f18628389ccb97081667b88c4b3f27d73cf789fb004ce1c1827732cbe4da18ffe1ce6d536 @@ -0,0 +1,25 @@ +/** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; +} + +module.exports = arrayFilter; diff --git a/.pnpm-store/v11/files/36/b6f666aae7360886d888624929f1da40395fde43bf6e1aa422dad9ed27165d706702183c1f56cee9dfe9714455052f47b4f4ec53ae360f513aefebf9cafa4c b/.pnpm-store/v11/files/36/b6f666aae7360886d888624929f1da40395fde43bf6e1aa422dad9ed27165d706702183c1f56cee9dfe9714455052f47b4f4ec53ae360f513aefebf9cafa4c new file mode 100644 index 00000000..4c9eca24 --- /dev/null +++ b/.pnpm-store/v11/files/36/b6f666aae7360886d888624929f1da40395fde43bf6e1aa422dad9ed27165d706702183c1f56cee9dfe9714455052f47b4f4ec53ae360f513aefebf9cafa4c @@ -0,0 +1,33 @@ +# binary-extensions [![Build Status](https://travis-ci.org/sindresorhus/binary-extensions.svg?branch=master)](https://travis-ci.org/sindresorhus/binary-extensions) + +> List of binary file extensions + +The list is just a [JSON file](binary-extensions.json) and can be used anywhere. + + +## Install + +``` +$ npm install binary-extensions +``` + + +## Usage + +```js +const binaryExtensions = require('binary-extensions'); + +console.log(binaryExtensions); +//=> ['3ds', '3g2', …] +``` + + +## Related + +- [is-binary-path](https://github.com/sindresorhus/is-binary-path) - Check if a filepath is a binary file +- [text-extensions](https://github.com/sindresorhus/text-extensions) - List of text file extensions + + +## License + +MIT © [Sindre Sorhus](https://sindresorhus.com), Paul Miller (https://paulmillr.com) diff --git a/.pnpm-store/v11/files/36/c3cf7d8eefc90640dd0bc48379f81e194f596084869003eaadd95db34951e6a19c202c244a9f3894047db0a312723ca1fd8171b27b29b2b78fff87a03f3239 b/.pnpm-store/v11/files/36/c3cf7d8eefc90640dd0bc48379f81e194f596084869003eaadd95db34951e6a19c202c244a9f3894047db0a312723ca1fd8171b27b29b2b78fff87a03f3239 new file mode 100644 index 00000000..8d5b89e4 --- /dev/null +++ b/.pnpm-store/v11/files/36/c3cf7d8eefc90640dd0bc48379f81e194f596084869003eaadd95db34951e6a19c202c244a9f3894047db0a312723ca1fd8171b27b29b2b78fff87a03f3239 @@ -0,0 +1,448 @@ +var fs = require('fs') +var polyfills = require('./polyfills.js') +var legacy = require('./legacy-streams.js') +var clone = require('./clone.js') + +var util = require('util') + +/* istanbul ignore next - node 0.x polyfill */ +var gracefulQueue +var previousSymbol + +/* istanbul ignore else - node 0.x polyfill */ +if (typeof Symbol === 'function' && typeof Symbol.for === 'function') { + gracefulQueue = Symbol.for('graceful-fs.queue') + // This is used in testing by future versions + previousSymbol = Symbol.for('graceful-fs.previous') +} else { + gracefulQueue = '___graceful-fs.queue' + previousSymbol = '___graceful-fs.previous' +} + +function noop () {} + +function publishQueue(context, queue) { + Object.defineProperty(context, gracefulQueue, { + get: function() { + return queue + } + }) +} + +var debug = noop +if (util.debuglog) + debug = util.debuglog('gfs4') +else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) + debug = function() { + var m = util.format.apply(util, arguments) + m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ') + console.error(m) + } + +// Once time initialization +if (!fs[gracefulQueue]) { + // This queue can be shared by multiple loaded instances + var queue = global[gracefulQueue] || [] + publishQueue(fs, queue) + + // Patch fs.close/closeSync to shared queue version, because we need + // to retry() whenever a close happens *anywhere* in the program. + // This is essential when multiple graceful-fs instances are + // in play at the same time. + fs.close = (function (fs$close) { + function close (fd, cb) { + return fs$close.call(fs, fd, function (err) { + // This function uses the graceful-fs shared queue + if (!err) { + resetQueue() + } + + if (typeof cb === 'function') + cb.apply(this, arguments) + }) + } + + Object.defineProperty(close, previousSymbol, { + value: fs$close + }) + return close + })(fs.close) + + fs.closeSync = (function (fs$closeSync) { + function closeSync (fd) { + // This function uses the graceful-fs shared queue + fs$closeSync.apply(fs, arguments) + resetQueue() + } + + Object.defineProperty(closeSync, previousSymbol, { + value: fs$closeSync + }) + return closeSync + })(fs.closeSync) + + if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { + process.on('exit', function() { + debug(fs[gracefulQueue]) + require('assert').equal(fs[gracefulQueue].length, 0) + }) + } +} + +if (!global[gracefulQueue]) { + publishQueue(global, fs[gracefulQueue]); +} + +module.exports = patch(clone(fs)) +if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) { + module.exports = patch(fs) + fs.__patched = true; +} + +function patch (fs) { + // Everything that references the open() function needs to be in here + polyfills(fs) + fs.gracefulify = patch + + fs.createReadStream = createReadStream + fs.createWriteStream = createWriteStream + var fs$readFile = fs.readFile + fs.readFile = readFile + function readFile (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$readFile(path, options, cb) + + function go$readFile (path, options, cb, startTime) { + return fs$readFile(path, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$writeFile = fs.writeFile + fs.writeFile = writeFile + function writeFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$writeFile(path, data, options, cb) + + function go$writeFile (path, data, options, cb, startTime) { + return fs$writeFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$appendFile = fs.appendFile + if (fs$appendFile) + fs.appendFile = appendFile + function appendFile (path, data, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + return go$appendFile(path, data, options, cb) + + function go$appendFile (path, data, options, cb, startTime) { + return fs$appendFile(path, data, options, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$copyFile = fs.copyFile + if (fs$copyFile) + fs.copyFile = copyFile + function copyFile (src, dest, flags, cb) { + if (typeof flags === 'function') { + cb = flags + flags = 0 + } + return go$copyFile(src, dest, flags, cb) + + function go$copyFile (src, dest, flags, cb, startTime) { + return fs$copyFile(src, dest, flags, function (err) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + var fs$readdir = fs.readdir + fs.readdir = readdir + var noReaddirOptionVersions = /^v[0-5]\./ + function readdir (path, options, cb) { + if (typeof options === 'function') + cb = options, options = null + + var go$readdir = noReaddirOptionVersions.test(process.version) + ? function go$readdir (path, options, cb, startTime) { + return fs$readdir(path, fs$readdirCallback( + path, options, cb, startTime + )) + } + : function go$readdir (path, options, cb, startTime) { + return fs$readdir(path, options, fs$readdirCallback( + path, options, cb, startTime + )) + } + + return go$readdir(path, options, cb) + + function fs$readdirCallback (path, options, cb, startTime) { + return function (err, files) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([ + go$readdir, + [path, options, cb], + err, + startTime || Date.now(), + Date.now() + ]) + else { + if (files && files.sort) + files.sort() + + if (typeof cb === 'function') + cb.call(this, err, files) + } + } + } + } + + if (process.version.substr(0, 4) === 'v0.8') { + var legStreams = legacy(fs) + ReadStream = legStreams.ReadStream + WriteStream = legStreams.WriteStream + } + + var fs$ReadStream = fs.ReadStream + if (fs$ReadStream) { + ReadStream.prototype = Object.create(fs$ReadStream.prototype) + ReadStream.prototype.open = ReadStream$open + } + + var fs$WriteStream = fs.WriteStream + if (fs$WriteStream) { + WriteStream.prototype = Object.create(fs$WriteStream.prototype) + WriteStream.prototype.open = WriteStream$open + } + + Object.defineProperty(fs, 'ReadStream', { + get: function () { + return ReadStream + }, + set: function (val) { + ReadStream = val + }, + enumerable: true, + configurable: true + }) + Object.defineProperty(fs, 'WriteStream', { + get: function () { + return WriteStream + }, + set: function (val) { + WriteStream = val + }, + enumerable: true, + configurable: true + }) + + // legacy names + var FileReadStream = ReadStream + Object.defineProperty(fs, 'FileReadStream', { + get: function () { + return FileReadStream + }, + set: function (val) { + FileReadStream = val + }, + enumerable: true, + configurable: true + }) + var FileWriteStream = WriteStream + Object.defineProperty(fs, 'FileWriteStream', { + get: function () { + return FileWriteStream + }, + set: function (val) { + FileWriteStream = val + }, + enumerable: true, + configurable: true + }) + + function ReadStream (path, options) { + if (this instanceof ReadStream) + return fs$ReadStream.apply(this, arguments), this + else + return ReadStream.apply(Object.create(ReadStream.prototype), arguments) + } + + function ReadStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + if (that.autoClose) + that.destroy() + + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + that.read() + } + }) + } + + function WriteStream (path, options) { + if (this instanceof WriteStream) + return fs$WriteStream.apply(this, arguments), this + else + return WriteStream.apply(Object.create(WriteStream.prototype), arguments) + } + + function WriteStream$open () { + var that = this + open(that.path, that.flags, that.mode, function (err, fd) { + if (err) { + that.destroy() + that.emit('error', err) + } else { + that.fd = fd + that.emit('open', fd) + } + }) + } + + function createReadStream (path, options) { + return new fs.ReadStream(path, options) + } + + function createWriteStream (path, options) { + return new fs.WriteStream(path, options) + } + + var fs$open = fs.open + fs.open = open + function open (path, flags, mode, cb) { + if (typeof mode === 'function') + cb = mode, mode = null + + return go$open(path, flags, mode, cb) + + function go$open (path, flags, mode, cb, startTime) { + return fs$open(path, flags, mode, function (err, fd) { + if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) + enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()]) + else { + if (typeof cb === 'function') + cb.apply(this, arguments) + } + }) + } + } + + return fs +} + +function enqueue (elem) { + debug('ENQUEUE', elem[0].name, elem[1]) + fs[gracefulQueue].push(elem) + retry() +} + +// keep track of the timeout between retry() calls +var retryTimer + +// reset the startTime and lastTime to now +// this resets the start of the 60 second overall timeout as well as the +// delay between attempts so that we'll retry these jobs sooner +function resetQueue () { + var now = Date.now() + for (var i = 0; i < fs[gracefulQueue].length; ++i) { + // entries that are only a length of 2 are from an older version, don't + // bother modifying those since they'll be retried anyway. + if (fs[gracefulQueue][i].length > 2) { + fs[gracefulQueue][i][3] = now // startTime + fs[gracefulQueue][i][4] = now // lastTime + } + } + // call retry to make sure we're actively processing the queue + retry() +} + +function retry () { + // clear the timer and remove it to help prevent unintended concurrency + clearTimeout(retryTimer) + retryTimer = undefined + + if (fs[gracefulQueue].length === 0) + return + + var elem = fs[gracefulQueue].shift() + var fn = elem[0] + var args = elem[1] + // these items may be unset if they were added by an older graceful-fs + var err = elem[2] + var startTime = elem[3] + var lastTime = elem[4] + + // if we don't have a startTime we have no way of knowing if we've waited + // long enough, so go ahead and retry this item now + if (startTime === undefined) { + debug('RETRY', fn.name, args) + fn.apply(null, args) + } else if (Date.now() - startTime >= 60000) { + // it's been more than 60 seconds total, bail now + debug('TIMEOUT', fn.name, args) + var cb = args.pop() + if (typeof cb === 'function') + cb.call(null, err) + } else { + // the amount of time between the last attempt and right now + var sinceAttempt = Date.now() - lastTime + // the amount of time between when we first tried, and when we last tried + // rounded up to at least 1 + var sinceStart = Math.max(lastTime - startTime, 1) + // backoff. wait longer than the total time we've been retrying, but only + // up to a maximum of 100ms + var desiredDelay = Math.min(sinceStart * 1.2, 100) + // it's been long enough since the last retry, do it again + if (sinceAttempt >= desiredDelay) { + debug('RETRY', fn.name, args) + fn.apply(null, args.concat([startTime])) + } else { + // if we can't do this job yet, push it to the end of the queue + // and let the next iteration check again + fs[gracefulQueue].push(elem) + } + } + + // schedule our next run if one isn't already scheduled + if (retryTimer === undefined) { + retryTimer = setTimeout(retry, 0) + } +} diff --git a/.pnpm-store/v11/files/36/df0afc7bf36f9525f6b3a32ace70cb74988b02345eb33fe408161262ae5d08a87552aeceea7b156517934034322a157de0fe17301454cbdedc27152e897d3e b/.pnpm-store/v11/files/36/df0afc7bf36f9525f6b3a32ace70cb74988b02345eb33fe408161262ae5d08a87552aeceea7b156517934034322a157de0fe17301454cbdedc27152e897d3e new file mode 100644 index 00000000..28810820 --- /dev/null +++ b/.pnpm-store/v11/files/36/df0afc7bf36f9525f6b3a32ace70cb74988b02345eb33fe408161262ae5d08a87552aeceea7b156517934034322a157de0fe17301454cbdedc27152e897d3e @@ -0,0 +1,87 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.r2gSmokeTest = function () { + return true; +}; +exports.stringify = (v) => { + const cache = new Set(); + return JSON.stringify(v, function (key, val) { + if (val && typeof val === 'object') { + if (cache.has(val)) { + try { + return JSON.parse(JSON.stringify(val)); + } + catch (err) { + return; + } + } + cache.add(val); + } + return val; + }); +}; +const parentSym = Symbol('parent'); +const cacheSym = Symbol('cache'); +const copyInner = (parent, key, val, copyParent) => { + if (!(val && typeof val === 'object')) { + return copyParent[key] = val; + } + const cache = copyParent[cacheSym]; + if (typeof val['toJSON'] === 'function') { + val = val.toJSON(); + } + if (cache.has(val)) { + try { + return copyParent[key] = JSON.parse(JSON.stringify(cache.get(val))); + } + catch (err) { + return copyParent[key] = null; + } + } + if (val === parent.__proto__) { + return; + } + if (val === Object.getPrototypeOf(parent)) { + return; + } + const copyVal = Array.isArray(val) ? [] : {}; + copyVal[parentSym] = copyParent; + copyParent[key] = copyVal; + cache.set(val, copyVal); + copyVal[cacheSym] = new Map(cache); + let keys = null; + if (Array.isArray(val)) { + keys = val.keys(); + } + else { + keys = Object.keys(val); + } + for (const k of keys) { + copyInner(val, k, val[k], copyVal); + } +}; +const copyOuter = (val) => { + if (!(val && typeof val === 'object')) { + return val; + } + let copy = null, keys = null; + if (typeof val['toJSON'] === 'function') { + val = val.toJSON(); + } + if (Array.isArray(val)) { + copy = []; + keys = val.keys(); + } + else { + copy = {}; + keys = Object.keys(val); + } + copy[cacheSym] = new Map(); + for (const k of keys) { + copyInner(val, k, val[k], copy); + } + return copy; +}; +exports.stringifyDeep = (v) => { + return JSON.stringify(copyOuter(v)); +}; diff --git a/.pnpm-store/v11/files/36/e4127d594ec6899e32c4cb7588f8b1c0bcbe9f04e34ca850b481e72dcc4d025714b392e11d72befe7244d8788e7eb73c2747dd59e2ac1c4b49da976f33b5d1 b/.pnpm-store/v11/files/36/e4127d594ec6899e32c4cb7588f8b1c0bcbe9f04e34ca850b481e72dcc4d025714b392e11d72befe7244d8788e7eb73c2747dd59e2ac1c4b49da976f33b5d1 new file mode 100644 index 00000000..5820cad2 --- /dev/null +++ b/.pnpm-store/v11/files/36/e4127d594ec6899e32c4cb7588f8b1c0bcbe9f04e34ca850b481e72dcc4d025714b392e11d72befe7244d8788e7eb73c2747dd59e2ac1c4b49da976f33b5d1 @@ -0,0 +1,88 @@ +{ + "name": "kind-of", + "description": "Get the native type of a value.", + "version": "6.0.3", + "homepage": "https://github.com/jonschlinkert/kind-of", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "David Fox-Powell (https://dtothefp.github.io/me)", + "James (https://twitter.com/aretecode)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Ken Sheedlo (kensheedlo.com)", + "laggingreflex (https://github.com/laggingreflex)", + "Miguel Mota (https://miguelmota.com)", + "Peter deHaan (http://about.me/peterdehaan)", + "tunnckoCore (https://i.am.charlike.online)" + ], + "repository": "jonschlinkert/kind-of", + "bugs": { + "url": "https://github.com/jonschlinkert/kind-of/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha", + "prepublish": "browserify -o browser.js -e index.js -s index --bare" + }, + "devDependencies": { + "benchmarked": "^2.0.0", + "browserify": "^14.4.0", + "gulp-format-md": "^1.0.0", + "mocha": "^4.0.1", + "write": "^1.0.3" + }, + "keywords": [ + "arguments", + "array", + "boolean", + "check", + "date", + "function", + "is", + "is-type", + "is-type-of", + "kind", + "kind-of", + "number", + "object", + "of", + "regexp", + "string", + "test", + "type", + "type-of", + "typeof", + "types" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [ + "is-glob", + "is-number", + "is-primitive" + ] + }, + "reflinks": [ + "type-of", + "typeof", + "verb" + ] + } +} diff --git a/.pnpm-store/v11/files/36/fa20fb8b58f76ef389be7b1792d5009b3d911acc90780397cd8da976958228a9e8594c75008fed92ac195ce91a3f45bcfd8ba7771f79b81759e16ee927149a b/.pnpm-store/v11/files/36/fa20fb8b58f76ef389be7b1792d5009b3d911acc90780397cd8da976958228a9e8594c75008fed92ac195ce91a3f45bcfd8ba7771f79b81759e16ee927149a new file mode 100644 index 00000000..d6e0804c --- /dev/null +++ b/.pnpm-store/v11/files/36/fa20fb8b58f76ef389be7b1792d5009b3d911acc90780397cd8da976958228a9e8594c75008fed92ac195ce91a3f45bcfd8ba7771f79b81759e16ee927149a @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('padChars', require('../pad')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/36/fdb5a1f0b898c577c6ed40dc21ce6c3f4f59ca53ccb902fe861eba607db7f2b4638ad12181057fc1ef5b0d2403cc2c3bcd95961ba9a64f3244c2dac562a5b9 b/.pnpm-store/v11/files/36/fdb5a1f0b898c577c6ed40dc21ce6c3f4f59ca53ccb902fe861eba607db7f2b4638ad12181057fc1ef5b0d2403cc2c3bcd95961ba9a64f3244c2dac562a5b9 new file mode 100644 index 00000000..74b52403 --- /dev/null +++ b/.pnpm-store/v11/files/36/fdb5a1f0b898c577c6ed40dc21ce6c3f4f59ca53ccb902fe861eba607db7f2b4638ad12181057fc1ef5b0d2403cc2c3bcd95961ba9a64f3244c2dac562a5b9 @@ -0,0 +1,53 @@ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); diff --git a/.pnpm-store/v11/files/37/0a2910811a02ae0209b78e4044655f480657f9d1eb35d9c1e2bf5386c1a8947712c374c510139e8627874f905f9834a978b55353757211eb94d9c6a8433369 b/.pnpm-store/v11/files/37/0a2910811a02ae0209b78e4044655f480657f9d1eb35d9c1e2bf5386c1a8947712c374c510139e8627874f905f9834a978b55353757211eb94d9c6a8433369 new file mode 100644 index 00000000..ee011aaa --- /dev/null +++ b/.pnpm-store/v11/files/37/0a2910811a02ae0209b78e4044655f480657f9d1eb35d9c1e2bf5386c1a8947712c374c510139e8627874f905f9834a978b55353757211eb94d9c6a8433369 @@ -0,0 +1 @@ +{"version":3,"file":"sprintf.min.js","sources":["../src/sprintf.js"],"names":["window","sprintf","key","arguments","cache","hasOwnProperty","parse","format","call","get_type","variable","Object","prototype","toString","slice","toLowerCase","str_repeat","input","multiplier","Array","join","re","not_string","number","json","not_json","text","modulo","placeholder","key_access","index_access","sign","parse_tree","argv","arg","i","k","match","pad","pad_character","pad_length","cursor","tree_length","length","node_type","output","is_positive","Error","test","isNaN","TypeError","String","fromCharCode","parseInt","JSON","stringify","toExponential","parseFloat","toFixed","toPrecision","substring","toUpperCase","replace","charAt","fmt","_fmt","arg_names","exec","SyntaxError","field_list","replacement_field","field_match","vsprintf","_argv","splice","apply","exports","define","amd","this"],"mappings":";;CAAA,SAAUA,GAeN,QAASC,KACL,GAAIC,GAAMC,UAAU,GAAIC,EAAQH,EAAQG,KAIxC,OAHMA,GAAMF,IAAQE,EAAMC,eAAeH,KACrCE,EAAMF,GAAOD,EAAQK,MAAMJ,IAExBD,EAAQM,OAAOC,KAAK,KAAMJ,EAAMF,GAAMC,WA+JjD,QAASM,GAASC,GACd,MAAOC,QAAOC,UAAUC,SAASL,KAAKE,GAAUI,MAAM,EAAG,IAAIC,cAGjE,QAASC,GAAWC,EAAOC,GACvB,MAAOC,OAAMD,EAAa,GAAGE,KAAKH,GAvLtC,GAAII,IACAC,WAAY,OACZC,OAAQ,UACRC,KAAM,MACNC,SAAU,OACVC,KAAM,YACNC,OAAQ,WACRC,YAAa,yFACb1B,IAAK,sBACL2B,WAAY,wBACZC,aAAc,aACdC,KAAM,UAWV9B,GAAQM,OAAS,SAASyB,EAAYC,GAClC,GAAiEC,GAAkBC,EAAGC,EAAGC,EAAOC,EAAKC,EAAeC,EAAhHC,EAAS,EAAGC,EAAcV,EAAWW,OAAQC,EAAY,GAASC,KAA0DC,GAAc,EAAMf,EAAO,EAC3J,KAAKI,EAAI,EAAOO,EAAJP,EAAiBA,IAEzB,GADAS,EAAYnC,EAASuB,EAAWG,IACd,WAAdS,EACAC,EAAOA,EAAOF,QAAUX,EAAWG,OAElC,IAAkB,UAAdS,EAAuB,CAE5B,GADAP,EAAQL,EAAWG,GACfE,EAAM,GAEN,IADAH,EAAMD,EAAKQ,GACNL,EAAI,EAAGA,EAAIC,EAAM,GAAGM,OAAQP,IAAK,CAClC,IAAKF,EAAI7B,eAAegC,EAAM,GAAGD,IAC7B,KAAM,IAAIW,OAAM9C,EAAQ,yCAA0CoC,EAAM,GAAGD,IAE/EF,GAAMA,EAAIG,EAAM,GAAGD,QAIvBF,GADKG,EAAM,GACLJ,EAAKI,EAAM,IAGXJ,EAAKQ,IAOf,IAJqB,YAAjBhC,EAASyB,KACTA,EAAMA,KAGNb,EAAGC,WAAW0B,KAAKX,EAAM,KAAOhB,EAAGI,SAASuB,KAAKX,EAAM,KAAyB,UAAjB5B,EAASyB,IAAoBe,MAAMf,GAClG,KAAM,IAAIgB,WAAUjD,EAAQ,0CAA2CQ,EAASyB,IAOpF,QAJIb,EAAGE,OAAOyB,KAAKX,EAAM,MACrBS,EAAcZ,GAAO,GAGjBG,EAAM,IACV,IAAK,IACDH,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,EAAMiB,OAAOC,aAAalB,EAC9B,MACA,KAAK,IACL,IAAK,IACDA,EAAMmB,SAASnB,EAAK,GACxB,MACA,KAAK,IACDA,EAAMoB,KAAKC,UAAUrB,EAAK,KAAMG,EAAM,GAAKgB,SAAShB,EAAM,IAAM,EACpE,MACA,KAAK,IACDH,EAAMG,EAAM,GAAKH,EAAIsB,cAAcnB,EAAM,IAAMH,EAAIsB,eACvD,MACA,KAAK,IACDtB,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKwB,QAAQrB,EAAM,IAAMoB,WAAWvB,EACpE,MACA,KAAK,IACDA,EAAMG,EAAM,GAAKoB,WAAWvB,GAAKyB,YAAYtB,EAAM,IAAMoB,WAAWvB,EACxE,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,EACvB,MACA,KAAK,IACDqB,GAAQA,EAAMiB,OAAOjB,KAASG,EAAM,GAAKH,EAAI0B,UAAU,EAAGvB,EAAM,IAAMH,CAC1E,MACA,KAAK,IACDA,KAAc,CAClB,MACA,KAAK,IACDA,EAAMA,EAAIrB,SAAS,GACvB,MACA,KAAK,IACDqB,EAAMA,EAAIrB,SAAS,IAAIgD,cAG3BxC,EAAGG,KAAKwB,KAAKX,EAAM,IACnBQ,EAAOA,EAAOF,QAAUT,IAGpBb,EAAGE,OAAOyB,KAAKX,EAAM,KAASS,IAAeT,EAAM,GAKnDN,EAAO,IAJPA,EAAOe,EAAc,IAAM,IAC3BZ,EAAMA,EAAIrB,WAAWiD,QAAQzC,EAAGU,KAAM,KAK1CQ,EAAgBF,EAAM,GAAkB,MAAbA,EAAM,GAAa,IAAMA,EAAM,GAAG0B,OAAO,GAAK,IACzEvB,EAAaH,EAAM,IAAMN,EAAOG,GAAKS,OACrCL,EAAMD,EAAM,IAAMG,EAAa,EAAIxB,EAAWuB,EAAeC,GAAoB,GACjFK,EAAOA,EAAOF,QAAUN,EAAM,GAAKN,EAAOG,EAAMI,EAAyB,MAAlBC,EAAwBR,EAAOO,EAAMJ,EAAMI,EAAMP,EAAOG,GAI3H,MAAOW,GAAOzB,KAAK,KAGvBnB,EAAQG,SAERH,EAAQK,MAAQ,SAAS0D,GAErB,IADA,GAAIC,GAAOD,EAAK3B,KAAYL,KAAiBkC,EAAY,EAClDD,GAAM,CACT,GAAqC,QAAhC5B,EAAQhB,EAAGK,KAAKyC,KAAKF,IACtBjC,EAAWA,EAAWW,QAAUN,EAAM,OAErC,IAAuC,QAAlCA,EAAQhB,EAAGM,OAAOwC,KAAKF,IAC7BjC,EAAWA,EAAWW,QAAU,QAE/B,CAAA,GAA4C,QAAvCN,EAAQhB,EAAGO,YAAYuC,KAAKF,IAgClC,KAAM,IAAIG,aAAY,mCA/BtB,IAAI/B,EAAM,GAAI,CACV6B,GAAa,CACb,IAAIG,MAAiBC,EAAoBjC,EAAM,GAAIkC,IACnD,IAAuD,QAAlDA,EAAclD,EAAGnB,IAAIiE,KAAKG,IAe3B,KAAM,IAAIF,aAAY,+CAbtB,KADAC,EAAWA,EAAW1B,QAAU4B,EAAY,GACwC,MAA5ED,EAAoBA,EAAkBV,UAAUW,EAAY,GAAG5B,UACnE,GAA8D,QAAzD4B,EAAclD,EAAGQ,WAAWsC,KAAKG,IAClCD,EAAWA,EAAW1B,QAAU4B,EAAY,OAE3C,CAAA,GAAgE,QAA3DA,EAAclD,EAAGS,aAAaqC,KAAKG,IAIzC,KAAM,IAAIF,aAAY,+CAHtBC,GAAWA,EAAW1B,QAAU4B,EAAY,GAUxDlC,EAAM,GAAKgC,MAGXH,IAAa,CAEjB,IAAkB,IAAdA,EACA,KAAM,IAAInB,OAAM,4EAEpBf,GAAWA,EAAWW,QAAUN,EAKpC4B,EAAOA,EAAKL,UAAUvB,EAAM,GAAGM,QAEnC,MAAOX,GAGX,IAAIwC,GAAW,SAASR,EAAK/B,EAAMwC,GAG/B,MAFAA,IAASxC,OAAYnB,MAAM,GAC3B2D,EAAMC,OAAO,EAAG,EAAGV,GACZ/D,EAAQ0E,MAAM,KAAMF,GAiBR,oBAAZG,UACPA,QAAQ3E,QAAUA,EAClB2E,QAAQJ,SAAWA,IAGnBxE,EAAOC,QAAUA,EACjBD,EAAOwE,SAAWA,EAEI,kBAAXK,SAAyBA,OAAOC,KACvCD,OAAO,WACH,OACI5E,QAASA,EACTuE,SAAUA,OAKT,mBAAXxE,QAAyB+E,KAAO/E"} \ No newline at end of file diff --git a/.pnpm-store/v11/files/37/216511f341cedb2e59ef510c9fa2a488aa452a56ed0674d5162edf41dea778b0b86ef036a53f97e4abc73a2e0eb08aac82ba8a58d94da63801c75b5cdd4123 b/.pnpm-store/v11/files/37/216511f341cedb2e59ef510c9fa2a488aa452a56ed0674d5162edf41dea778b0b86ef036a53f97e4abc73a2e0eb08aac82ba8a58d94da63801c75b5cdd4123 new file mode 100644 index 00000000..8dc27910 --- /dev/null +++ b/.pnpm-store/v11/files/37/216511f341cedb2e59ef510c9fa2a488aa452a56ed0674d5162edf41dea778b0b86ef036a53f97e4abc73a2e0eb08aac82ba8a58d94da63801c75b5cdd4123 @@ -0,0 +1,41 @@ +var isSymbol = require('./isSymbol'); + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +module.exports = compareAscending; diff --git a/.pnpm-store/v11/files/37/470eff620de5c2140555457435a5e5b5869293f43e740a42e6171f97218ed6182b8a589a9519f04139fb5f94f633475468f0c48b3b178605a504d02f578ef4 b/.pnpm-store/v11/files/37/470eff620de5c2140555457435a5e5b5869293f43e740a42e6171f97218ed6182b8a589a9519f04139fb5f94f633475468f0c48b3b178605a504d02f578ef4 new file mode 100644 index 00000000..dbdf9b22 --- /dev/null +++ b/.pnpm-store/v11/files/37/470eff620de5c2140555457435a5e5b5869293f43e740a42e6171f97218ed6182b8a589a9519f04139fb5f94f633475468f0c48b3b178605a504d02f578ef4 @@ -0,0 +1,128 @@ +'use strict'; +const TEMPLATE_REGEX = /(?:\\(u[a-f\d]{4}|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi; +const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g; +const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/; +const ESCAPE_REGEX = /\\(u[a-f\d]{4}|x[a-f\d]{2}|.)|([^\\])/gi; + +const ESCAPES = new Map([ + ['n', '\n'], + ['r', '\r'], + ['t', '\t'], + ['b', '\b'], + ['f', '\f'], + ['v', '\v'], + ['0', '\0'], + ['\\', '\\'], + ['e', '\u001B'], + ['a', '\u0007'] +]); + +function unescape(c) { + if ((c[0] === 'u' && c.length === 5) || (c[0] === 'x' && c.length === 3)) { + return String.fromCharCode(parseInt(c.slice(1), 16)); + } + + return ESCAPES.get(c) || c; +} + +function parseArguments(name, args) { + const results = []; + const chunks = args.trim().split(/\s*,\s*/g); + let matches; + + for (const chunk of chunks) { + if (!isNaN(chunk)) { + results.push(Number(chunk)); + } else if ((matches = chunk.match(STRING_REGEX))) { + results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, chr) => escape ? unescape(escape) : chr)); + } else { + throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`); + } + } + + return results; +} + +function parseStyle(style) { + STYLE_REGEX.lastIndex = 0; + + const results = []; + let matches; + + while ((matches = STYLE_REGEX.exec(style)) !== null) { + const name = matches[1]; + + if (matches[2]) { + const args = parseArguments(name, matches[2]); + results.push([name].concat(args)); + } else { + results.push([name]); + } + } + + return results; +} + +function buildStyle(chalk, styles) { + const enabled = {}; + + for (const layer of styles) { + for (const style of layer.styles) { + enabled[style[0]] = layer.inverse ? null : style.slice(1); + } + } + + let current = chalk; + for (const styleName of Object.keys(enabled)) { + if (Array.isArray(enabled[styleName])) { + if (!(styleName in current)) { + throw new Error(`Unknown Chalk style: ${styleName}`); + } + + if (enabled[styleName].length > 0) { + current = current[styleName].apply(current, enabled[styleName]); + } else { + current = current[styleName]; + } + } + } + + return current; +} + +module.exports = (chalk, tmp) => { + const styles = []; + const chunks = []; + let chunk = []; + + // eslint-disable-next-line max-params + tmp.replace(TEMPLATE_REGEX, (m, escapeChar, inverse, style, close, chr) => { + if (escapeChar) { + chunk.push(unescape(escapeChar)); + } else if (style) { + const str = chunk.join(''); + chunk = []; + chunks.push(styles.length === 0 ? str : buildStyle(chalk, styles)(str)); + styles.push({inverse, styles: parseStyle(style)}); + } else if (close) { + if (styles.length === 0) { + throw new Error('Found extraneous } in Chalk template literal'); + } + + chunks.push(buildStyle(chalk, styles)(chunk.join(''))); + chunk = []; + styles.pop(); + } else { + chunk.push(chr); + } + }); + + chunks.push(chunk.join('')); + + if (styles.length > 0) { + const errMsg = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`; + throw new Error(errMsg); + } + + return chunks.join(''); +}; diff --git a/.pnpm-store/v11/files/37/4a3bed7b762455c3268b980b102b44fe54572737422b5b6b5ec09e42eaef0f726ada87f97a2c52c061104baa3befa45fa749321f7f161af1735476ffc13483-exec b/.pnpm-store/v11/files/37/4a3bed7b762455c3268b980b102b44fe54572737422b5b6b5ec09e42eaef0f726ada87f97a2c52c061104baa3befa45fa749321f7f161af1735476ffc13483-exec new file mode 100755 index 00000000..2034a3b8 --- /dev/null +++ b/.pnpm-store/v11/files/37/4a3bed7b762455c3268b980b102b44fe54572737422b5b6b5ec09e42eaef0f726ada87f97a2c52c061104baa3befa45fa749321f7f161af1735476ffc13483-exec @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +echo "we are running @run.sh => suman-run-plugins/plugins/typescript-std => $0" + +WHICH_TSC=$(which tsc); +if [[ -z "${WHICH_TSC}" ]]; then + npm install -g typescript +fi + +WHICH_TS_NODE=$(which ts-node); +if [[ -z "${WHICH_TS_NODE}" ]]; then + npm install -g ts-node +fi + +export TS_NODE_DISABLE_WARNINGS="yes"; +export TS_NODE_FAST="yes"; + +echo "SUMAN_CHILD_TEST_PATH => $SUMAN_CHILD_TEST_PATH" + + +#DIRNAME_DIR=$($(dirname ${SUMAN_CHILD_TEST_PATH}) && pwd); + +#ts-node --ignoreWarnings ${SUMAN_CHILD_TEST_PATH} | tee "$DIRNAME_DIR/$(basename ${SUMAN_CHILD_TEST_PATH})-run.log" + +ts-node -D -F "${SUMAN_CHILD_TEST_PATH}"; + +#echo "$(cat "${SUMAN_CHILD_TEST_PATH}")" | ts-node --ignoreWarnings + +EXIT_CODE=$?; +echo "EXIT_CODE => $EXIT_CODE" +exit ${EXIT_CODE}; + diff --git a/.pnpm-store/v11/files/37/51b886d3f78d0be1e5010b6086b0df1175f85d52a75a11e9f09232bc35eddb8e92dee4f219b705f98a23c05eaebb79c414d4f57c9fc7ef1e3e831e41e1bcaf b/.pnpm-store/v11/files/37/51b886d3f78d0be1e5010b6086b0df1175f85d52a75a11e9f09232bc35eddb8e92dee4f219b705f98a23c05eaebb79c414d4f57c9fc7ef1e3e831e41e1bcaf new file mode 100644 index 00000000..4788264b --- /dev/null +++ b/.pnpm-store/v11/files/37/51b886d3f78d0be1e5010b6086b0df1175f85d52a75a11e9f09232bc35eddb8e92dee4f219b705f98a23c05eaebb79c414d4f57c9fc7ef1e3e831e41e1bcaf @@ -0,0 +1,82 @@ +/*! + * negotiator + * Copyright(c) 2012 Federico Romero + * Copyright(c) 2012-2014 Isaac Z. Schlueter + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +var preferredCharsets = require('./lib/charset') +var preferredEncodings = require('./lib/encoding') +var preferredLanguages = require('./lib/language') +var preferredMediaTypes = require('./lib/mediaType') + +/** + * Module exports. + * @public + */ + +module.exports = Negotiator; +module.exports.Negotiator = Negotiator; + +/** + * Create a Negotiator instance from a request. + * @param {object} request + * @public + */ + +function Negotiator(request) { + if (!(this instanceof Negotiator)) { + return new Negotiator(request); + } + + this.request = request; +} + +Negotiator.prototype.charset = function charset(available) { + var set = this.charsets(available); + return set && set[0]; +}; + +Negotiator.prototype.charsets = function charsets(available) { + return preferredCharsets(this.request.headers['accept-charset'], available); +}; + +Negotiator.prototype.encoding = function encoding(available) { + var set = this.encodings(available); + return set && set[0]; +}; + +Negotiator.prototype.encodings = function encodings(available) { + return preferredEncodings(this.request.headers['accept-encoding'], available); +}; + +Negotiator.prototype.language = function language(available) { + var set = this.languages(available); + return set && set[0]; +}; + +Negotiator.prototype.languages = function languages(available) { + return preferredLanguages(this.request.headers['accept-language'], available); +}; + +Negotiator.prototype.mediaType = function mediaType(available) { + var set = this.mediaTypes(available); + return set && set[0]; +}; + +Negotiator.prototype.mediaTypes = function mediaTypes(available) { + return preferredMediaTypes(this.request.headers.accept, available); +}; + +// Backwards compatibility +Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; +Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; +Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; +Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; +Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; +Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; +Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; +Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; diff --git a/.pnpm-store/v11/files/37/67287556eed8030de20ad0568aaa80e4cb162da5bcfef652d91c557105241c7b19be588da7d61a574cc9c66ddcb14afa068f82ca367be3edfd429bf90d300f b/.pnpm-store/v11/files/37/67287556eed8030de20ad0568aaa80e4cb162da5bcfef652d91c557105241c7b19be588da7d61a574cc9c66ddcb14afa068f82ca367be3edfd429bf90d300f new file mode 100644 index 00000000..e5311e83 --- /dev/null +++ b/.pnpm-store/v11/files/37/67287556eed8030de20ad0568aaa80e4cb162da5bcfef652d91c557105241c7b19be588da7d61a574cc9c66ddcb14afa068f82ca367be3edfd429bf90d300f @@ -0,0 +1,44 @@ +define(['exports', 'module', './handlebars/base', './handlebars/safe-string', './handlebars/exception', './handlebars/utils', './handlebars/runtime', './handlebars/no-conflict'], function (exports, module, _handlebarsBase, _handlebarsSafeString, _handlebarsException, _handlebarsUtils, _handlebarsRuntime, _handlebarsNoConflict) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + // Each of these augment the Handlebars object. No need to setup here. + // (This is done to easily share code between commonjs and browse envs) + + var _SafeString = _interopRequireDefault(_handlebarsSafeString); + + var _Exception = _interopRequireDefault(_handlebarsException); + + var _noConflict = _interopRequireDefault(_handlebarsNoConflict); + + // For compatibility and usage outside of module systems, make the Handlebars object a namespace + function create() { + var hb = new _handlebarsBase.HandlebarsEnvironment(); + + _handlebarsUtils.extend(hb, _handlebarsBase); + hb.SafeString = _SafeString['default']; + hb.Exception = _Exception['default']; + hb.Utils = _handlebarsUtils; + hb.escapeExpression = _handlebarsUtils.escapeExpression; + + hb.VM = _handlebarsRuntime; + hb.template = function (spec) { + return _handlebarsRuntime.template(spec, hb); + }; + + return hb; + } + + var inst = create(); + inst.create = create; + + _noConflict['default'](inst); + + inst['default'] = inst; + + module.exports = inst; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxXQUFTLE1BQU0sR0FBRztBQUNoQixRQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLHFCQUFNLE1BQU0sQ0FBQyxFQUFFLGtCQUFPLENBQUM7QUFDdkIsTUFBRSxDQUFDLFVBQVUseUJBQWEsQ0FBQztBQUMzQixNQUFFLENBQUMsU0FBUyx3QkFBWSxDQUFDO0FBQ3pCLE1BQUUsQ0FBQyxLQUFLLG1CQUFRLENBQUM7QUFDakIsTUFBRSxDQUFDLGdCQUFnQixHQUFHLGlCQUFNLGdCQUFnQixDQUFDOztBQUU3QyxNQUFFLENBQUMsRUFBRSxxQkFBVSxDQUFDO0FBQ2hCLE1BQUUsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0IsYUFBTyxtQkFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0FBRUYsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2hhbmRsZWJhcnMvYmFzZSc7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG5pbXBvcnQgU2FmZVN0cmluZyBmcm9tICcuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vaGFuZGxlYmFycy91dGlscyc7XG5pbXBvcnQgKiBhcyBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy9ydW50aW1lJztcblxuaW1wb3J0IG5vQ29uZmxpY3QgZnJvbSAnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0JztcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19 diff --git a/.pnpm-store/v11/files/37/6c267b81de5619e49b94e06d2c92958b9b5a1dd7d732cd1f9a643f976f88928e520d991d1ed3691ec1665a188e824e597df8f1a123e4e04b8e0f0118a67b8b b/.pnpm-store/v11/files/37/6c267b81de5619e49b94e06d2c92958b9b5a1dd7d732cd1f9a643f976f88928e520d991d1ed3691ec1665a188e824e597df8f1a123e4e04b8e0f0118a67b8b new file mode 100644 index 00000000..5e448f65 --- /dev/null +++ b/.pnpm-store/v11/files/37/6c267b81de5619e49b94e06d2c92958b9b5a1dd7d732cd1f9a643f976f88928e520d991d1ed3691ec1665a188e824e597df8f1a123e4e04b8e0f0118a67b8b @@ -0,0 +1,300 @@ +/** + * Module dependencies. + */ + +var Transport = require('../transport'); +var parser = require('engine.io-parser'); +var parseqs = require('parseqs'); +var inherit = require('component-inherit'); +var yeast = require('yeast'); +var debug = require('debug')('engine.io-client:websocket'); + +var BrowserWebSocket, NodeWebSocket; + +if (typeof WebSocket !== 'undefined') { + BrowserWebSocket = WebSocket; +} else if (typeof self !== 'undefined') { + BrowserWebSocket = self.WebSocket || self.MozWebSocket; +} + +if (typeof window === 'undefined') { + try { + NodeWebSocket = require('ws'); + } catch (e) { } +} + +/** + * Get either the `WebSocket` or `MozWebSocket` globals + * in the browser or try to resolve WebSocket-compatible + * interface exposed by `ws` for Node-like environment. + */ + +var WebSocketImpl = BrowserWebSocket || NodeWebSocket; + +/** + * Module exports. + */ + +module.exports = WS; + +/** + * WebSocket transport constructor. + * + * @api {Object} connection options + * @api public + */ + +function WS (opts) { + var forceBase64 = (opts && opts.forceBase64); + if (forceBase64) { + this.supportsBinary = false; + } + this.perMessageDeflate = opts.perMessageDeflate; + this.usingBrowserWebSocket = BrowserWebSocket && !opts.forceNode; + this.protocols = opts.protocols; + if (!this.usingBrowserWebSocket) { + WebSocketImpl = NodeWebSocket; + } + Transport.call(this, opts); +} + +/** + * Inherits from Transport. + */ + +inherit(WS, Transport); + +/** + * Transport name. + * + * @api public + */ + +WS.prototype.name = 'websocket'; + +/* + * WebSockets support binary + */ + +WS.prototype.supportsBinary = true; + +/** + * Opens socket. + * + * @api private + */ + +WS.prototype.doOpen = function () { + if (!this.check()) { + // let probe timeout + return; + } + + var uri = this.uri(); + var protocols = this.protocols; + + var opts = {}; + + if (!this.isReactNative) { + opts.agent = this.agent; + opts.perMessageDeflate = this.perMessageDeflate; + + // SSL options for Node.js client + opts.pfx = this.pfx; + opts.key = this.key; + opts.passphrase = this.passphrase; + opts.cert = this.cert; + opts.ca = this.ca; + opts.ciphers = this.ciphers; + opts.rejectUnauthorized = this.rejectUnauthorized; + } + + if (this.extraHeaders) { + opts.headers = this.extraHeaders; + } + if (this.localAddress) { + opts.localAddress = this.localAddress; + } + + try { + this.ws = + this.usingBrowserWebSocket && !this.isReactNative + ? protocols + ? new WebSocketImpl(uri, protocols) + : new WebSocketImpl(uri) + : new WebSocketImpl(uri, protocols, opts); + } catch (err) { + return this.emit('error', err); + } + + if (this.ws.binaryType === undefined) { + this.supportsBinary = false; + } + + if (this.ws.supports && this.ws.supports.binary) { + this.supportsBinary = true; + this.ws.binaryType = 'nodebuffer'; + } else { + this.ws.binaryType = 'arraybuffer'; + } + + this.addEventListeners(); +}; + +/** + * Adds event listeners to the socket + * + * @api private + */ + +WS.prototype.addEventListeners = function () { + var self = this; + + this.ws.onopen = function () { + self.onOpen(); + }; + this.ws.onclose = function () { + self.onClose(); + }; + this.ws.onmessage = function (ev) { + self.onData(ev.data); + }; + this.ws.onerror = function (e) { + self.onError('websocket error', e); + }; +}; + +/** + * Writes data to socket. + * + * @param {Array} array of packets. + * @api private + */ + +WS.prototype.write = function (packets) { + var self = this; + this.writable = false; + + // encodePacket efficient as it uses WS framing + // no need for encodePayload + var total = packets.length; + for (var i = 0, l = total; i < l; i++) { + (function (packet) { + parser.encodePacket(packet, self.supportsBinary, function (data) { + if (!self.usingBrowserWebSocket) { + // always create a new object (GH-437) + var opts = {}; + if (packet.options) { + opts.compress = packet.options.compress; + } + + if (self.perMessageDeflate) { + var len = 'string' === typeof data ? Buffer.byteLength(data) : data.length; + if (len < self.perMessageDeflate.threshold) { + opts.compress = false; + } + } + } + + // Sometimes the websocket has already been closed but the browser didn't + // have a chance of informing us about it yet, in that case send will + // throw an error + try { + if (self.usingBrowserWebSocket) { + // TypeError is thrown when passing the second argument on Safari + self.ws.send(data); + } else { + self.ws.send(data, opts); + } + } catch (e) { + debug('websocket closed before onclose event'); + } + + --total || done(); + }); + })(packets[i]); + } + + function done () { + self.emit('flush'); + + // fake drain + // defer to next tick to allow Socket to clear writeBuffer + setTimeout(function () { + self.writable = true; + self.emit('drain'); + }, 0); + } +}; + +/** + * Called upon close + * + * @api private + */ + +WS.prototype.onClose = function () { + Transport.prototype.onClose.call(this); +}; + +/** + * Closes socket. + * + * @api private + */ + +WS.prototype.doClose = function () { + if (typeof this.ws !== 'undefined') { + this.ws.onerror = function () {}; + this.ws.close(); + } +}; + +/** + * Generates uri for connection. + * + * @api private + */ + +WS.prototype.uri = function () { + var query = this.query || {}; + var schema = this.secure ? 'wss' : 'ws'; + var port = ''; + + // avoid port if default for schema + if (this.port && (('wss' === schema && Number(this.port) !== 443) || + ('ws' === schema && Number(this.port) !== 80))) { + port = ':' + this.port; + } + + // append timestamp to URI + if (this.timestampRequests) { + query[this.timestampParam] = yeast(); + } + + // communicate binary support capabilities + if (!this.supportsBinary) { + query.b64 = 1; + } + + query = parseqs.encode(query); + + // prepend ? to query + if (query.length) { + query = '?' + query; + } + + var ipv6 = this.hostname.indexOf(':') !== -1; + return schema + '://' + (ipv6 ? '[' + this.hostname + ']' : this.hostname) + port + this.path + query; +}; + +/** + * Feature detection for WebSocket. + * + * @return {Boolean} whether this transport is available. + * @api public + */ + +WS.prototype.check = function () { + return !!WebSocketImpl && !('__initialize' in WebSocketImpl && this.name === WS.prototype.name); +}; diff --git a/.pnpm-store/v11/files/37/749261d43b4d9a8ee40e5226af8a1d71d500df7dd55ea0465834207e1af7b37d72b5b6eb68d304fc35c4e4a1eba249d437555ed91e8b3bc88180fd7d77cfd5 b/.pnpm-store/v11/files/37/749261d43b4d9a8ee40e5226af8a1d71d500df7dd55ea0465834207e1af7b37d72b5b6eb68d304fc35c4e4a1eba249d437555ed91e8b3bc88180fd7d77cfd5 new file mode 100644 index 00000000..b52c2917 --- /dev/null +++ b/.pnpm-store/v11/files/37/749261d43b4d9a8ee40e5226af8a1d71d500df7dd55ea0465834207e1af7b37d72b5b6eb68d304fc35c4e4a1eba249d437555ed91e8b3bc88180fd7d77cfd5 @@ -0,0 +1,116 @@ +var isBuffer = require('is-buffer'); +var toString = Object.prototype.toString; + +/** + * Get the native `typeof` a value. + * + * @param {*} `val` + * @return {*} Native javascript type + */ + +module.exports = function kindOf(val) { + // primitivies + if (typeof val === 'undefined') { + return 'undefined'; + } + if (val === null) { + return 'null'; + } + if (val === true || val === false || val instanceof Boolean) { + return 'boolean'; + } + if (typeof val === 'string' || val instanceof String) { + return 'string'; + } + if (typeof val === 'number' || val instanceof Number) { + return 'number'; + } + + // functions + if (typeof val === 'function' || val instanceof Function) { + return 'function'; + } + + // array + if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { + return 'array'; + } + + // check for instances of RegExp and Date before calling `toString` + if (val instanceof RegExp) { + return 'regexp'; + } + if (val instanceof Date) { + return 'date'; + } + + // other objects + var type = toString.call(val); + + if (type === '[object RegExp]') { + return 'regexp'; + } + if (type === '[object Date]') { + return 'date'; + } + if (type === '[object Arguments]') { + return 'arguments'; + } + if (type === '[object Error]') { + return 'error'; + } + + // buffer + if (isBuffer(val)) { + return 'buffer'; + } + + // es6: Map, WeakMap, Set, WeakSet + if (type === '[object Set]') { + return 'set'; + } + if (type === '[object WeakSet]') { + return 'weakset'; + } + if (type === '[object Map]') { + return 'map'; + } + if (type === '[object WeakMap]') { + return 'weakmap'; + } + if (type === '[object Symbol]') { + return 'symbol'; + } + + // typed arrays + if (type === '[object Int8Array]') { + return 'int8array'; + } + if (type === '[object Uint8Array]') { + return 'uint8array'; + } + if (type === '[object Uint8ClampedArray]') { + return 'uint8clampedarray'; + } + if (type === '[object Int16Array]') { + return 'int16array'; + } + if (type === '[object Uint16Array]') { + return 'uint16array'; + } + if (type === '[object Int32Array]') { + return 'int32array'; + } + if (type === '[object Uint32Array]') { + return 'uint32array'; + } + if (type === '[object Float32Array]') { + return 'float32array'; + } + if (type === '[object Float64Array]') { + return 'float64array'; + } + + // must be a plain object + return 'object'; +}; diff --git a/.pnpm-store/v11/files/37/84768502edbc0368f6680eb0637092fdcb03ab03305a607b4fa0b7d33b57b1adcb4143248d1684e86c558c1a9d657d392067be193f62b76f9191e3364403ba b/.pnpm-store/v11/files/37/84768502edbc0368f6680eb0637092fdcb03ab03305a607b4fa0b7d33b57b1adcb4143248d1684e86c558c1a9d657d392067be193f62b76f9191e3364403ba new file mode 100644 index 00000000..06695a42 --- /dev/null +++ b/.pnpm-store/v11/files/37/84768502edbc0368f6680eb0637092fdcb03ab03305a607b4fa0b7d33b57b1adcb4143248d1684e86c558c1a9d657d392067be193f62b76f9191e3364403ba @@ -0,0 +1,82 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require('path'); +const chalk = require("chalk"); +const sortBy = require('lodash.sortby'); +const includes = require('lodash.includes'); +const flattenDeep = require('lodash.flattendeep'); +const intersection = require('lodash.intersection'); +const _suman = global.__suman = (global.__suman || {}); +const started = []; +const ended = []; +function default_1(order) { + const config = _suman.sumanConfig; + const maxProcs = _suman.maxProcs; + let interval = 10000; + let initialTimeout = 5000; + let increaseEachTime = 6000; + if (true || _suman.sumanOpts && _suman.sumanOpts.verbosity > 2) { + setInterval(function () { + setTimeout(function () { + _suman.log.info('number of processes already started', started.length); + _suman.log.info('number of processes already ended', ended.length); + const startedButNotEnded = started.filter(function ($item) { + return ended.every(function (item) { + return (String(item.testPath) !== String($item.testPath)); + }); + }) + .map(function (item) { + return '\n ' + item.testPath; + }); + if (startedButNotEnded.length > 0) { + console.log('\n'); + _suman.log.info(chalk.bgCyan.yellow(' The following test processes have started but not ended yet: ')); + console.log(chalk.cyan.bold(String(startedButNotEnded))); + console.log('\n'); + } + }, initialTimeout += increaseEachTime); + }, interval); + } + const findQueuedCPsToStart = function (queuedCPsObj) { + if (started.length - ended.length < maxProcs) { + return queuedCPsObj.queuedCPs.pop(); + } + }; + return { + runNext: function (fn) { + if (started.length - ended.length < maxProcs) { + started.push(fn); + fn.call(null); + return true; + } + }, + getStartedAndEnded: function () { + return { + started, + ended + }; + }, + determineInitialStarters: function (files) { + throw new Error('no longer used.'); + }, + shouldFileBeBlockedAtStart: function (file) { + throw new Error('no longer used.'); + }, + releaseNextTests: function releaseNextTests(testPath, queuedCPsObj) { + const val = started.filter(function (item) { + return String(item.testPath) === String(testPath); + })[0]; + ended.push(val); + const cpFn = findQueuedCPsToStart(queuedCPsObj); + if (cpFn) { + started.push(cpFn); + _suman.log.info(chalk.cyan.bold('Test path was blocked, but is now running => '), chalk.gray(`'${cpFn.testPath}'.`)); + cpFn.call(null); + } + } + }; +} +exports.default = default_1; +; diff --git a/.pnpm-store/v11/files/37/941109b3af7f34e00cd7c86a78eea3a621459353506822c667ecf3106dee23bbc9538efbb4ad17cfe5269676548f7754c820a6b72fcdd7ccea07d2d09730aa-exec b/.pnpm-store/v11/files/37/941109b3af7f34e00cd7c86a78eea3a621459353506822c667ecf3106dee23bbc9538efbb4ad17cfe5269676548f7754c820a6b72fcdd7ccea07d2d09730aa-exec new file mode 100755 index 00000000..1957e034 --- /dev/null +++ b/.pnpm-store/v11/files/37/941109b3af7f34e00cd7c86a78eea3a621459353506822c667ecf3106dee23bbc9538efbb4ad17cfe5269676548f7754c820a6b72fcdd7ccea07d2d09730aa-exec @@ -0,0 +1,41 @@ +// Type definitions for Node.js 10.17 +// Project: http://nodejs.org/ +// Definitions by: Microsoft TypeScript +// DefinitelyTyped +// Alberto Schiabel +// Alvis HT Tang +// Andrew Makarov +// Chigozirim C. +// Deividas Bakanas +// Eugene Y. Q. Shen +// Hannes Magnusson +// Hoàng Văn Khải +// Huw +// Kelvin Jin +// Klaus Meinhardt +// Lishude +// Mariusz Wiktorczyk +// Mohsen Azimi +// Nicolas Even +// Nikita Galkin +// Parambir Singh +// Sebastian Silbermann +// Simon Schick +// Thomas den Hollander +// Wilco Bakker +// wwwy3y3 +// Zane Hannan AU +// Jeremie Rodriguez +// Samuel Ainsworth +// Kyle Uehlein +// Thanik Bhongbhibhat +// Minh Son Nguyen +// ExE Boss +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +// NOTE: These definitions support NodeJS and TypeScript 3.7. +// This isn't strictly needed since 3.7 has the assert module, but this way we're consistent. +// Typically type modificatons should be made in base.d.ts instead of here + +/// +/// diff --git a/.pnpm-store/v11/files/37/9cdd1ec086954723ccebd377c1b1d9182c328e86da1ea0290e97ef74f3aaf78a3c69d9efedfdf57e35250c3bada0b796016a764a8e5c7550c992f27ac175ee b/.pnpm-store/v11/files/37/9cdd1ec086954723ccebd377c1b1d9182c328e86da1ea0290e97ef74f3aaf78a3c69d9efedfdf57e35250c3bada0b796016a764a8e5c7550c992f27ac175ee new file mode 100644 index 00000000..173a8eaa --- /dev/null +++ b/.pnpm-store/v11/files/37/9cdd1ec086954723ccebd377c1b1d9182c328e86da1ea0290e97ef74f3aaf78a3c69d9efedfdf57e35250c3bada0b796016a764a8e5c7550c992f27ac175ee @@ -0,0 +1,226 @@ +## Errors + +NAN includes helpers for creating, throwing and catching Errors as much of this functionality varies across the supported versions of V8 and must be abstracted. + +Note that an Error object is simply a specialized form of `v8::Value`. + +Also consult the V8 Embedders Guide section on [Exceptions](https://v8.dev/docs/embed#exceptions) for more information. + + - Nan::Error() + - Nan::RangeError() + - Nan::ReferenceError() + - Nan::SyntaxError() + - Nan::TypeError() + - Nan::ThrowError() + - Nan::ThrowRangeError() + - Nan::ThrowReferenceError() + - Nan::ThrowSyntaxError() + - Nan::ThrowTypeError() + - Nan::FatalException() + - Nan::ErrnoException() + - Nan::TryCatch + + + +### Nan::Error() + +Create a new Error object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. + +Note that an Error object is simply a specialized form of `v8::Value`. + +Signature: + +```c++ +v8::Local Nan::Error(const char *msg); +v8::Local Nan::Error(v8::Local msg); +``` + + + +### Nan::RangeError() + +Create a new RangeError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. + +Note that an RangeError object is simply a specialized form of `v8::Value`. + +Signature: + +```c++ +v8::Local Nan::RangeError(const char *msg); +v8::Local Nan::RangeError(v8::Local msg); +``` + + + +### Nan::ReferenceError() + +Create a new ReferenceError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. + +Note that an ReferenceError object is simply a specialized form of `v8::Value`. + +Signature: + +```c++ +v8::Local Nan::ReferenceError(const char *msg); +v8::Local Nan::ReferenceError(v8::Local msg); +``` + + + +### Nan::SyntaxError() + +Create a new SyntaxError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. + +Note that an SyntaxError object is simply a specialized form of `v8::Value`. + +Signature: + +```c++ +v8::Local Nan::SyntaxError(const char *msg); +v8::Local Nan::SyntaxError(v8::Local msg); +``` + + + +### Nan::TypeError() + +Create a new TypeError object using the [v8::Exception](https://v8docs.nodesource.com/node-8.16/da/d6a/classv8_1_1_exception.html) class in a way that is compatible across the supported versions of V8. + +Note that an TypeError object is simply a specialized form of `v8::Value`. + +Signature: + +```c++ +v8::Local Nan::TypeError(const char *msg); +v8::Local Nan::TypeError(v8::Local msg); +``` + + + +### Nan::ThrowError() + +Throw an Error object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new Error object will be created. + +Signature: + +```c++ +void Nan::ThrowError(const char *msg); +void Nan::ThrowError(v8::Local msg); +void Nan::ThrowError(v8::Local error); +``` + + + +### Nan::ThrowRangeError() + +Throw an RangeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new RangeError object will be created. + +Signature: + +```c++ +void Nan::ThrowRangeError(const char *msg); +void Nan::ThrowRangeError(v8::Local msg); +void Nan::ThrowRangeError(v8::Local error); +``` + + + +### Nan::ThrowReferenceError() + +Throw an ReferenceError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new ReferenceError object will be created. + +Signature: + +```c++ +void Nan::ThrowReferenceError(const char *msg); +void Nan::ThrowReferenceError(v8::Local msg); +void Nan::ThrowReferenceError(v8::Local error); +``` + + + +### Nan::ThrowSyntaxError() + +Throw an SyntaxError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new SyntaxError object will be created. + +Signature: + +```c++ +void Nan::ThrowSyntaxError(const char *msg); +void Nan::ThrowSyntaxError(v8::Local msg); +void Nan::ThrowSyntaxError(v8::Local error); +``` + + + +### Nan::ThrowTypeError() + +Throw an TypeError object (a specialized `v8::Value` as above) in the current context. If a `msg` is provided, a new TypeError object will be created. + +Signature: + +```c++ +void Nan::ThrowTypeError(const char *msg); +void Nan::ThrowTypeError(v8::Local msg); +void Nan::ThrowTypeError(v8::Local error); +``` + + +### Nan::FatalException() + +Replaces `node::FatalException()` which has a different API across supported versions of Node. For use with [`Nan::TryCatch`](#api_nan_try_catch). + +Signature: + +```c++ +void Nan::FatalException(const Nan::TryCatch& try_catch); +``` + + +### Nan::ErrnoException() + +Replaces `node::ErrnoException()` which has a different API across supported versions of Node. + +Signature: + +```c++ +v8::Local Nan::ErrnoException(int errorno, + const char* syscall = NULL, + const char* message = NULL, + const char* path = NULL); +``` + + + +### Nan::TryCatch + +A simple wrapper around [`v8::TryCatch`](https://v8docs.nodesource.com/node-8.16/d4/dc6/classv8_1_1_try_catch.html) compatible with all supported versions of V8. Can be used as a direct replacement in most cases. See also [`Nan::FatalException()`](#api_nan_fatal_exception) for an internal use compatible with `node::FatalException`. + +Signature: + +```c++ +class Nan::TryCatch { + public: + Nan::TryCatch(); + + bool HasCaught() const; + + bool CanContinue() const; + + v8::Local ReThrow(); + + v8::Local Exception() const; + + // Nan::MaybeLocal for older versions of V8 + v8::MaybeLocal StackTrace() const; + + v8::Local Message() const; + + void Reset(); + + void SetVerbose(bool value); + + void SetCaptureMessage(bool value); +}; +``` + diff --git a/.pnpm-store/v11/files/37/b600dd436ea603c0e3a68806191ac5fc08352cd63412db1740815ca0f7932f534fae0a66e0901e90b1b032694765b324111c3ddc79e4d2c005b77c4ea48b4a b/.pnpm-store/v11/files/37/b600dd436ea603c0e3a68806191ac5fc08352cd63412db1740815ca0f7932f534fae0a66e0901e90b1b032694765b324111c3ddc79e4d2c005b77c4ea48b4a new file mode 100644 index 00000000..a1214c02 --- /dev/null +++ b/.pnpm-store/v11/files/37/b600dd436ea603c0e3a68806191ac5fc08352cd63412db1740815ca0f7932f534fae0a66e0901e90b1b032694765b324111c3ddc79e4d2c005b77c4ea48b4a @@ -0,0 +1,16 @@ +var getMapData = require('./_getMapData'); + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +module.exports = mapCacheHas; diff --git a/.pnpm-store/v11/files/37/c2e7466318db6fbe3118d40fe3a105dcc34b44a04ce9dde607d0c6a63914b77a7bd796863d92cea714ccec145cad6847e0a7d9f82c73cd768947e2d96882ee b/.pnpm-store/v11/files/37/c2e7466318db6fbe3118d40fe3a105dcc34b44a04ce9dde607d0c6a63914b77a7bd796863d92cea714ccec145cad6847e0a7d9f82c73cd768947e2d96882ee new file mode 100644 index 00000000..ea9dabf1 --- /dev/null +++ b/.pnpm-store/v11/files/37/c2e7466318db6fbe3118d40fe3a105dcc34b44a04ce9dde607d0c6a63914b77a7bd796863d92cea714ccec145cad6847e0a7d9f82c73cd768947e2d96882ee @@ -0,0 +1,17 @@ +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; +} + +module.exports = hashDelete; diff --git a/.pnpm-store/v11/files/37/c4819ceef62561a123d86cd99fc3eb5e0feec0c90f670b27970c1054249c08e51c8fa4156d1777b1ceaafca9951f6dec5980948aee837477492ecf3e5a29fa b/.pnpm-store/v11/files/37/c4819ceef62561a123d86cd99fc3eb5e0feec0c90f670b27970c1054249c08e51c8fa4156d1777b1ceaafca9951f6dec5980948aee837477492ecf3e5a29fa new file mode 100644 index 00000000..d76a62f0 --- /dev/null +++ b/.pnpm-store/v11/files/37/c4819ceef62561a123d86cd99fc3eb5e0feec0c90f670b27970c1054249c08e51c8fa4156d1777b1ceaafca9951f6dec5980948aee837477492ecf3e5a29fa @@ -0,0 +1,26 @@ +export interface IEnvObject { + [key: string]: string; +} +export interface IPluginValues { + [key: string]: ISumanWatchPlugin; +} +export interface ISumanWatchPluginModule { + exportName: string; + value: ISumanWatchPlugin; + getValue: (version?: string, input?: Partial) => ISumanWatchPlugin; +} +export interface ISumanWatchPluginModules { + [key: string]: ISumanWatchPluginModule; +} +export interface ISumanWatchPlugin { + version: string; + execTests?: string; + pluginName: string; + isSumanWatchPluginValue: boolean; + pluginCwd: string; + pluginEnv: IEnvObject; + pluginExec: string; + stdoutStartTranspileRegex: RegExp; + stdoutEndTranspileRegex: RegExp; +} +export declare const plugins: ISumanWatchPluginModules; diff --git a/.pnpm-store/v11/files/37/d26f8235ace163eec3d2975a2242f6ceb0146b1945c040653de43de23c719cc3cabe9e573377f50dff4c0a5b028e757d1c0580e5e4d0ab4a7d5522198977b7 b/.pnpm-store/v11/files/37/d26f8235ace163eec3d2975a2242f6ceb0146b1945c040653de43de23c719cc3cabe9e573377f50dff4c0a5b028e757d1c0580e5e4d0ab4a7d5522198977b7 new file mode 100644 index 00000000..b94805e3 --- /dev/null +++ b/.pnpm-store/v11/files/37/d26f8235ace163eec3d2975a2242f6ceb0146b1945c040653de43de23c719cc3cabe9e573377f50dff4c0a5b028e757d1c0580e5e4d0ab4a7d5522198977b7 @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +var _groupByLimit = require('./groupByLimit'); + +var _groupByLimit2 = _interopRequireDefault(_groupByLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`groupBy`]{@link module:Collections.groupBy} but runs only a single async operation at a time. + * + * @name groupBySeries + * @static + * @memberOf module:Collections + * @method + * @see [async.groupBy]{@link module:Collections.groupBy} + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with a `key` to group the value under. + * Invoked with (value, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Result is an `Object` whoses + * properties are arrays of values which returned the corresponding key. + */ +exports.default = (0, _doLimit2.default)(_groupByLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/37/dc921e5b078bc25c412e5ec0e2ea7315720831afffc142b401e1e92d743d241a9fea130fbe23c9499fa1332c3ad50542623e2a3933755ba87a5ab8f4ee2dd6 b/.pnpm-store/v11/files/37/dc921e5b078bc25c412e5ec0e2ea7315720831afffc142b401e1e92d743d241a9fea130fbe23c9499fa1332c3ad50542623e2a3933755ba87a5ab8f4ee2dd6 new file mode 100644 index 00000000..9e406fc0 --- /dev/null +++ b/.pnpm-store/v11/files/37/dc921e5b078bc25c412e5ec0e2ea7315720831afffc142b401e1e92d743d241a9fea130fbe23c9499fa1332c3ad50542623e2a3933755ba87a5ab8f4ee2dd6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('constant', require('../constant'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/37/f1e7c19fd5e9d6e25a1f229b6dd34d0c4c4287b89ec1cab65b0fa2cbbba2dc91dee4319a67a3af1e1791972f0e5ce83e25b88f8b031c38002afc580e86278c b/.pnpm-store/v11/files/37/f1e7c19fd5e9d6e25a1f229b6dd34d0c4c4287b89ec1cab65b0fa2cbbba2dc91dee4319a67a3af1e1791972f0e5ce83e25b88f8b031c38002afc580e86278c new file mode 100644 index 00000000..ad61f0fb --- /dev/null +++ b/.pnpm-store/v11/files/37/f1e7c19fd5e9d6e25a1f229b6dd34d0c4c4287b89ec1cab65b0fa2cbbba2dc91dee4319a67a3af1e1791972f0e5ce83e25b88f8b031c38002afc580e86278c @@ -0,0 +1,44 @@ +var compareAscending = require('./_compareAscending'); + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +module.exports = compareMultiple; diff --git a/.pnpm-store/v11/files/38/063c3c22994e8fec5cd396b4d6c39fe8206b4676961f0382212bf4e61bae67f88abd3de6de00c679386a44d3204713123b9f1ac8969dea93489decc6da0e34 b/.pnpm-store/v11/files/38/063c3c22994e8fec5cd396b4d6c39fe8206b4676961f0382212bf4e61bae67f88abd3de6de00c679386a44d3204713123b9f1ac8969dea93489decc6da0e34 new file mode 100644 index 00000000..85a82140 --- /dev/null +++ b/.pnpm-store/v11/files/38/063c3c22994e8fec5cd396b4d6c39fe8206b4676961f0382212bf4e61bae67f88abd3de6de00c679386a44d3204713123b9f1ac8969dea93489decc6da0e34 @@ -0,0 +1,84 @@ +'use strict'; + +/**/ + +var pna = require('process-nextick-args'); +/**/ + +// undocumented cb() API, needed for core, not for public API +function destroy(err, cb) { + var _this = this; + + var readableDestroyed = this._readableState && this._readableState.destroyed; + var writableDestroyed = this._writableState && this._writableState.destroyed; + + if (readableDestroyed || writableDestroyed) { + if (cb) { + cb(err); + } else if (err) { + if (!this._writableState) { + pna.nextTick(emitErrorNT, this, err); + } else if (!this._writableState.errorEmitted) { + this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, this, err); + } + } + + return this; + } + + // we set destroyed to true before firing error callbacks in order + // to make it re-entrance safe in case destroy() is called within callbacks + + if (this._readableState) { + this._readableState.destroyed = true; + } + + // if this is a duplex stream mark the writable part as destroyed as well + if (this._writableState) { + this._writableState.destroyed = true; + } + + this._destroy(err || null, function (err) { + if (!cb && err) { + if (!_this._writableState) { + pna.nextTick(emitErrorNT, _this, err); + } else if (!_this._writableState.errorEmitted) { + _this._writableState.errorEmitted = true; + pna.nextTick(emitErrorNT, _this, err); + } + } else if (cb) { + cb(err); + } + }); + + return this; +} + +function undestroy() { + if (this._readableState) { + this._readableState.destroyed = false; + this._readableState.reading = false; + this._readableState.ended = false; + this._readableState.endEmitted = false; + } + + if (this._writableState) { + this._writableState.destroyed = false; + this._writableState.ended = false; + this._writableState.ending = false; + this._writableState.finalCalled = false; + this._writableState.prefinished = false; + this._writableState.finished = false; + this._writableState.errorEmitted = false; + } +} + +function emitErrorNT(self, err) { + self.emit('error', err); +} + +module.exports = { + destroy: destroy, + undestroy: undestroy +}; \ No newline at end of file diff --git a/.pnpm-store/v11/files/38/17b9a6c46d5e10f3d8b47916bbb7d034b64f120e935d11762c2ab0ba18837369eae7454b47c88dbb1961aaddba5496edf0ebddbf2f0fa062a556e1d584a2cc b/.pnpm-store/v11/files/38/17b9a6c46d5e10f3d8b47916bbb7d034b64f120e935d11762c2ab0ba18837369eae7454b47c88dbb1961aaddba5496edf0ebddbf2f0fa062a556e1d584a2cc new file mode 100644 index 00000000..f0e92818 --- /dev/null +++ b/.pnpm-store/v11/files/38/17b9a6c46d5e10f3d8b47916bbb7d034b64f120e935d11762c2ab0ba18837369eae7454b47c88dbb1961aaddba5496edf0ebddbf2f0fa062a556e1d584a2cc @@ -0,0 +1,39 @@ +'use strict'; + + +var loader = require('./js-yaml/loader'); +var dumper = require('./js-yaml/dumper'); + + +function deprecated(name) { + return function () { + throw new Error('Function ' + name + ' is deprecated and cannot be used.'); + }; +} + + +module.exports.Type = require('./js-yaml/type'); +module.exports.Schema = require('./js-yaml/schema'); +module.exports.FAILSAFE_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./js-yaml/schema/json'); +module.exports.CORE_SCHEMA = require('./js-yaml/schema/core'); +module.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.safeLoad = loader.safeLoad; +module.exports.safeLoadAll = loader.safeLoadAll; +module.exports.dump = dumper.dump; +module.exports.safeDump = dumper.safeDump; +module.exports.YAMLException = require('./js-yaml/exception'); + +// Deprecated schema names from JS-YAML 2.0.x +module.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe'); +module.exports.SAFE_SCHEMA = require('./js-yaml/schema/default_safe'); +module.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full'); + +// Deprecated functions from JS-YAML 1.x.x +module.exports.scan = deprecated('scan'); +module.exports.parse = deprecated('parse'); +module.exports.compose = deprecated('compose'); +module.exports.addConstructor = deprecated('addConstructor'); diff --git a/.pnpm-store/v11/files/38/18f45d7c183cb36200dda06784e071d7d68d7574a265c72755667bd7401b2c31b4d9d09c09bc916075f847c220591ea9b0cb2806e3ee40fdf662f21f79fbf9 b/.pnpm-store/v11/files/38/18f45d7c183cb36200dda06784e071d7d68d7574a265c72755667bd7401b2c31b4d9d09c09bc916075f847c220591ea9b0cb2806e3ee40fdf662f21f79fbf9 new file mode 100644 index 00000000..428f571d --- /dev/null +++ b/.pnpm-store/v11/files/38/18f45d7c183cb36200dda06784e071d7d68d7574a265c72755667bd7401b2c31b4d9d09c09bc916075f847c220591ea9b0cb2806e3ee40fdf662f21f79fbf9 @@ -0,0 +1,29 @@ +var baseExtremum = require('./_baseExtremum'), + baseLt = require('./_baseLt'), + identity = require('./identity'); + +/** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ +function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; +} + +module.exports = min; diff --git a/.pnpm-store/v11/files/38/1ad6aba0ea7df76b4709f6c44f02addf9f9c629ecee092657ea7030ae65620a4b8c3e2fefdc1cc6fa5ba56b0a82732ee4a88da0f9e3e7d91368b3a80e1aa59 b/.pnpm-store/v11/files/38/1ad6aba0ea7df76b4709f6c44f02addf9f9c629ecee092657ea7030ae65620a4b8c3e2fefdc1cc6fa5ba56b0a82732ee4a88da0f9e3e7d91368b3a80e1aa59 new file mode 100644 index 00000000..d9649e86 --- /dev/null +++ b/.pnpm-store/v11/files/38/1ad6aba0ea7df76b4709f6c44f02addf9f9c629ecee092657ea7030ae65620a4b8c3e2fefdc1cc6fa5ba56b0a82732ee4a88da0f9e3e7d91368b3a80e1aa59 @@ -0,0 +1,132 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_PERSISTENT_12_INL_H_ +#define NAN_PERSISTENT_12_INL_H_ + +template class Persistent : + public v8::Persistent { + public: + inline Persistent() : v8::Persistent() {} + + template inline Persistent(v8::Local that) : + v8::Persistent(v8::Isolate::GetCurrent(), that) {} + + template + inline + Persistent(const v8::Persistent &that) : // NOLINT(runtime/explicit) + v8::Persistent(v8::Isolate::GetCurrent(), that) {} + + inline void Reset() { v8::PersistentBase::Reset(); } + + template + inline void Reset(const v8::Local &other) { + v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); + } + + template + inline void Reset(const v8::PersistentBase &other) { + v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); + } + + template + inline void SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type); + + private: + inline T *operator*() const { return *PersistentBase::persistent; } + + template + inline void Copy(const Persistent &that) { + TYPE_CHECK(T, S); + + this->Reset(); + + if (!that.IsEmpty()) { + this->Reset(that); + M::Copy(that, this); + } + } +}; + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) +template +class Global : public v8::Global { + public: + inline Global() : v8::Global() {} + + template inline Global(v8::Local that) : + v8::Global(v8::Isolate::GetCurrent(), that) {} + + template + inline + Global(const v8::PersistentBase &that) : // NOLINT(runtime/explicit) + v8::Global(v8::Isolate::GetCurrent(), that) {} + + inline void Reset() { v8::PersistentBase::Reset(); } + + template + inline void Reset(const v8::Local &other) { + v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); + } + + template + inline void Reset(const v8::PersistentBase &other) { + v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); + } + + template + inline void SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + reinterpret_cast*>(this)->SetWeak( + parameter, callback, type); + } +}; +#else +template +class Global : public v8::UniquePersistent { + public: + inline Global() : v8::UniquePersistent() {} + + template inline Global(v8::Local that) : + v8::UniquePersistent(v8::Isolate::GetCurrent(), that) {} + + template + inline + Global(const v8::PersistentBase &that) : // NOLINT(runtime/explicit) + v8::UniquePersistent(v8::Isolate::GetCurrent(), that) {} + + inline void Reset() { v8::PersistentBase::Reset(); } + + template + inline void Reset(const v8::Local &other) { + v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); + } + + template + inline void Reset(const v8::PersistentBase &other) { + v8::PersistentBase::Reset(v8::Isolate::GetCurrent(), other); + } + + template + inline void SetWeak( + P *parameter + , typename WeakCallbackInfo

::Callback callback + , WeakCallbackType type) { + reinterpret_cast*>(this)->SetWeak( + parameter, callback, type); + } +}; +#endif + +#endif // NAN_PERSISTENT_12_INL_H_ diff --git a/.pnpm-store/v11/files/38/2688e909fd1814bafe3039f3f0e6868f431c089baa2e781c630ca1399b502254461038b82173fac72b48eea147b44061fa1a74a8429aa88a9b26ce11a13fc0 b/.pnpm-store/v11/files/38/2688e909fd1814bafe3039f3f0e6868f431c089baa2e781c630ca1399b502254461038b82173fac72b48eea147b44061fa1a74a8429aa88a9b26ce11a13fc0 new file mode 100644 index 00000000..a1a959e2 --- /dev/null +++ b/.pnpm-store/v11/files/38/2688e909fd1814bafe3039f3f0e6868f431c089baa2e781c630ca1399b502254461038b82173fac72b48eea147b44061fa1a74a8429aa88a9b26ce11a13fc0 @@ -0,0 +1,24 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/38/34c7c6f6eb7f8a83658eb1497e4162e3c97f1b67ff84f0d5337f770811eaabc61479c155126420eaa017408e33b2671d1a666c8ab9f9aa95e58566eef71cd5 b/.pnpm-store/v11/files/38/34c7c6f6eb7f8a83658eb1497e4162e3c97f1b67ff84f0d5337f770811eaabc61479c155126420eaa017408e33b2671d1a666c8ab9f9aa95e58566eef71cd5 new file mode 100644 index 00000000..5a2b4fa8 --- /dev/null +++ b/.pnpm-store/v11/files/38/34c7c6f6eb7f8a83658eb1497e4162e3c97f1b67ff84f0d5337f770811eaabc61479c155126420eaa017408e33b2671d1a666c8ab9f9aa95e58566eef71cd5 @@ -0,0 +1,39 @@ +'use strict'; + +const Namespace = require('./namespace'); + +let count = 0; + +class ParentNamespace extends Namespace { + + constructor(server) { + super(server, '/_' + (count++)); + this.children = new Set(); + } + + initAdapter() {} + + emit() { + const args = Array.prototype.slice.call(arguments); + + this.children.forEach(nsp => { + nsp.rooms = this.rooms; + nsp.flags = this.flags; + nsp.emit.apply(nsp, args); + }); + this.rooms = []; + this.flags = {}; + } + + createChild(name) { + const namespace = new Namespace(this.server, name); + namespace.fns = this.fns.slice(0); + this.listeners('connect').forEach(listener => namespace.on('connect', listener)); + this.listeners('connection').forEach(listener => namespace.on('connection', listener)); + this.children.add(namespace); + this.server.nsps[name] = namespace; + return namespace; + } +} + +module.exports = ParentNamespace; diff --git a/.pnpm-store/v11/files/38/40e7d8be9e9a9dac299c0d505abcaf3f93e6d5df69a28a7cd0d1cb4363745c937f6d854a16b7878bf247e94f56752bc6022e68f81efc5268c9b6edcc77d22f b/.pnpm-store/v11/files/38/40e7d8be9e9a9dac299c0d505abcaf3f93e6d5df69a28a7cd0d1cb4363745c937f6d854a16b7878bf247e94f56752bc6022e68f81efc5268c9b6edcc77d22f new file mode 100644 index 00000000..a9a6b0b4 --- /dev/null +++ b/.pnpm-store/v11/files/38/40e7d8be9e9a9dac299c0d505abcaf3f93e6d5df69a28a7cd0d1cb4363745c937f6d854a16b7878bf247e94f56752bc6022e68f81efc5268c9b6edcc77d22f @@ -0,0 +1,126 @@ +define(['exports'], function (exports) { + 'use strict'; + + exports.__esModule = true; + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.createFrame = createFrame; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' + }; + + var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /* eslint-disable func-style */ + var isFunction = function isFunction(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + exports.isFunction = isFunction; + + /* eslint-enable func-style */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUc7QUFDYixPQUFHLEVBQUUsT0FBTztBQUNaLE9BQUcsRUFBRSxNQUFNO0FBQ1gsT0FBRyxFQUFFLE1BQU07QUFDWCxPQUFHLEVBQUUsUUFBUTtBQUNiLE9BQUcsRUFBRSxRQUFRO0FBQ2IsT0FBRyxFQUFFLFFBQVE7QUFDYixPQUFHLEVBQUUsUUFBUTtHQUNkLENBQUM7O0FBRUYsTUFBTSxRQUFRLEdBQUcsWUFBWTtNQUMzQixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUV6QixXQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsV0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEI7O0FBRU0sV0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBb0I7QUFDNUMsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsV0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsWUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELGFBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7T0FDRjtLQUNGOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1o7O0FBRU0sTUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxNQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsV0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDcEMsQ0FBQzs7O0FBR0YsTUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsWUFPTyxVQUFVLEdBUGpCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixhQUNFLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFDM0IsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxtQkFBbUIsQ0FDNUM7S0FDSCxDQUFDO0dBQ0g7VUFDUSxVQUFVLEdBQVYsVUFBVTs7Ozs7QUFJWixNQUFNLE9BQU8sR0FDbEIsS0FBSyxDQUFDLE9BQU8sSUFDYixVQUFTLEtBQUssRUFBRTtBQUNkLFdBQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FDekMsS0FBSyxDQUFDO0dBQ1gsQ0FBQzs7Ozs7QUFHRyxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGVBQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRjtBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUM7R0FDWDs7QUFFTSxXQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxRQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsVUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixlQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztPQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixlQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7T0FDcEI7Ozs7O0FBS0QsWUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDMUIsYUFBTyxNQUFNLENBQUM7S0FDZjtBQUNELFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFNBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRU0sV0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxVQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVNLFdBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxXQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0dBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nLFxuICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iaiAvKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGxldCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFNvdXJjZWQgZnJvbSBsb2Rhc2hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHRcbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtc3R5bGUgKi9cbmxldCBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgKTtcbiAgfTtcbn1cbmV4cG9ydCB7IGlzRnVuY3Rpb24gfTtcbi8qIGVzbGludC1lbmFibGUgZnVuYy1zdHlsZSAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPVxuICBBcnJheS5pc0FycmF5IHx8XG4gIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19 diff --git a/.pnpm-store/v11/files/38/754a1325acf1e10883ee322ae80c9617b544636995984d9af7d1bd48845d4295fca10bf3daa8e5dfc37306d3ed51f70f075086e763028a171071d40ffd85e9 b/.pnpm-store/v11/files/38/754a1325acf1e10883ee322ae80c9617b544636995984d9af7d1bd48845d4295fca10bf3daa8e5dfc37306d3ed51f70f075086e763028a171071d40ffd85e9 new file mode 100644 index 00000000..c6133267 --- /dev/null +++ b/.pnpm-store/v11/files/38/754a1325acf1e10883ee322ae80c9617b544636995984d9af7d1bd48845d4295fca10bf3daa8e5dfc37306d3ed51f70f075086e763028a171071d40ffd85e9 @@ -0,0 +1,193 @@ +'use strict'; + +var chars = require('./chars'); +var utils = require('./utils'); + +/** + * Expose `Glob` + */ + +var Glob = module.exports = function Glob(pattern, options) { + if (!(this instanceof Glob)) { + return new Glob(pattern, options); + } + this.options = options || {}; + this.pattern = pattern; + this.history = []; + this.tokens = {}; + this.init(pattern); +}; + +/** + * Initialize defaults + */ + +Glob.prototype.init = function(pattern) { + this.orig = pattern; + this.negated = this.isNegated(); + this.options.track = this.options.track || false; + this.options.makeRe = true; +}; + +/** + * Push a change into `glob.history`. Useful + * for debugging. + */ + +Glob.prototype.track = function(msg) { + if (this.options.track) { + this.history.push({msg: msg, pattern: this.pattern}); + } +}; + +/** + * Return true if `glob.pattern` was negated + * with `!`, also remove the `!` from the pattern. + * + * @return {Boolean} + */ + +Glob.prototype.isNegated = function() { + if (this.pattern.charCodeAt(0) === 33 /* '!' */) { + this.pattern = this.pattern.slice(1); + return true; + } + return false; +}; + +/** + * Expand braces in the given glob pattern. + * + * We only need to use the [braces] lib when + * patterns are nested. + */ + +Glob.prototype.braces = function() { + if (this.options.nobraces !== true && this.options.nobrace !== true) { + // naive/fast check for imbalanced characters + var a = this.pattern.match(/[\{\(\[]/g); + var b = this.pattern.match(/[\}\)\]]/g); + + // if imbalanced, don't optimize the pattern + if (a && b && (a.length !== b.length)) { + this.options.makeRe = false; + } + + // expand brace patterns and join the resulting array + var expanded = utils.braces(this.pattern, this.options); + this.pattern = expanded.join('|'); + } +}; + +/** + * Expand bracket expressions in `glob.pattern` + */ + +Glob.prototype.brackets = function() { + if (this.options.nobrackets !== true) { + this.pattern = utils.brackets(this.pattern); + } +}; + +/** + * Expand bracket expressions in `glob.pattern` + */ + +Glob.prototype.extglob = function() { + if (this.options.noextglob === true) return; + + if (utils.isExtglob(this.pattern)) { + this.pattern = utils.extglob(this.pattern, {escape: true}); + } +}; + +/** + * Parse the given pattern + */ + +Glob.prototype.parse = function(pattern) { + this.tokens = utils.parseGlob(pattern || this.pattern, true); + return this.tokens; +}; + +/** + * Replace `a` with `b`. Also tracks the change before and + * after each replacement. This is disabled by default, but + * can be enabled by setting `options.track` to true. + * + * Also, when the pattern is a string, `.split()` is used, + * because it's much faster than replace. + * + * @param {RegExp|String} `a` + * @param {String} `b` + * @param {Boolean} `escape` When `true`, escapes `*` and `?` in the replacement. + * @return {String} + */ + +Glob.prototype._replace = function(a, b, escape) { + this.track('before (find): "' + a + '" (replace with): "' + b + '"'); + if (escape) b = esc(b); + if (a && b && typeof a === 'string') { + this.pattern = this.pattern.split(a).join(b); + } else { + this.pattern = this.pattern.replace(a, b); + } + this.track('after'); +}; + +/** + * Escape special characters in the given string. + * + * @param {String} `str` Glob pattern + * @return {String} + */ + +Glob.prototype.escape = function(str) { + this.track('before escape: '); + var re = /["\\](['"]?[^"'\\]['"]?)/g; + + this.pattern = str.replace(re, function($0, $1) { + var o = chars.ESC; + var ch = o && o[$1]; + if (ch) { + return ch; + } + if (/[a-z]/i.test($0)) { + return $0.split('\\').join(''); + } + return $0; + }); + + this.track('after escape: '); +}; + +/** + * Unescape special characters in the given string. + * + * @param {String} `str` + * @return {String} + */ + +Glob.prototype.unescape = function(str) { + var re = /__([A-Z]+)_([A-Z]+)__/g; + this.pattern = str.replace(re, function($0, $1) { + return chars[$1][$0]; + }); + this.pattern = unesc(this.pattern); +}; + +/** + * Escape/unescape utils + */ + +function esc(str) { + str = str.split('?').join('%~'); + str = str.split('*').join('%%'); + return str; +} + +function unesc(str) { + str = str.split('%~').join('?'); + str = str.split('%%').join('*'); + return str; +} diff --git a/.pnpm-store/v11/files/38/78d5a6e73ab56c2ae258e1f496be6182b3a4a5a11a0457d958407c7eea1e2a11ca4a60d2be920e70863e59dce935460e15354b531d17bc2c9fe0d0d20d8f7f b/.pnpm-store/v11/files/38/78d5a6e73ab56c2ae258e1f496be6182b3a4a5a11a0457d958407c7eea1e2a11ca4a60d2be920e70863e59dce935460e15354b531d17bc2c9fe0d0d20d8f7f new file mode 100644 index 00000000..fb9bdf26 --- /dev/null +++ b/.pnpm-store/v11/files/38/78d5a6e73ab56c2ae258e1f496be6182b3a4a5a11a0457d958407c7eea1e2a11ca4a60d2be920e70863e59dce935460e15354b531d17bc2c9fe0d0d20d8f7f @@ -0,0 +1,48 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface AggregateError extends Error { + errors: any[]; +} + +interface AggregateErrorConstructor { + new (errors: Iterable, message?: string): AggregateError; + (errors: Iterable, message?: string): AggregateError; + readonly prototype: AggregateError; +} + +declare var AggregateError: AggregateErrorConstructor; + +/** + * Represents the completion of an asynchronous operation + */ +interface PromiseConstructor { + /** + * The any function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError containing an array of rejection reasons if all of the given promises are rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm. + * @param values An array or iterable of Promises. + * @returns A new Promise. + */ + any(values: T): Promise>; + + /** + * The any function returns a promise that is fulfilled by the first given promise to be fulfilled, or rejected with an AggregateError containing an array of rejection reasons if all of the given promises are rejected. It resolves all elements of the passed iterable to promises as it runs this algorithm. + * @param values An array or iterable of Promises. + * @returns A new Promise. + */ + any(values: Iterable>): Promise>; +} diff --git a/.pnpm-store/v11/files/38/9651cc725f7fa28dfb45e5de84e232212618f4adc187443956c8725e5684f39dd25bf040f95513d17675ed2de7188fa110e669b91987ad956a95c224acc251 b/.pnpm-store/v11/files/38/9651cc725f7fa28dfb45e5de84e232212618f4adc187443956c8725e5684f39dd25bf040f95513d17675ed2de7188fa110e669b91987ad956a95c224acc251 new file mode 100644 index 00000000..2cdc8e41 --- /dev/null +++ b/.pnpm-store/v11/files/38/9651cc725f7fa28dfb45e5de84e232212618f4adc187443956c8725e5684f39dd25bf040f95513d17675ed2de7188fa110e669b91987ad956a95c224acc251 @@ -0,0 +1,21 @@ +(MIT) + +Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/38/a82e2fb7020622c4c36c65d742c01cf9f6ed11a357074fc9ac6fdffbf3d0540feebadb57f81624e6d997bc797a0fccbd44c26607eb0d213b9fb36666d04508 b/.pnpm-store/v11/files/38/a82e2fb7020622c4c36c65d742c01cf9f6ed11a357074fc9ac6fdffbf3d0540feebadb57f81624e6d997bc797a0fccbd44c26607eb0d213b9fb36666d04508 new file mode 100644 index 00000000..28c21a2c --- /dev/null +++ b/.pnpm-store/v11/files/38/a82e2fb7020622c4c36c65d742c01cf9f6ed11a357074fc9ac6fdffbf3d0540feebadb57f81624e6d997bc797a0fccbd44c26607eb0d213b9fb36666d04508 @@ -0,0 +1,4 @@ +export declare const createSignature: any; +export declare const blockSignature: any; +export declare const hookSignature: any; +export declare const testCaseSignature: any; diff --git a/.pnpm-store/v11/files/38/ad1eec59e6347b6802597ef74503464d8cfd4bb729cda1679c1977826eada52a33c61c0267f52cbc06bdbdb9ad643933e7edf05e44daab4d20c8f3b5cb6388 b/.pnpm-store/v11/files/38/ad1eec59e6347b6802597ef74503464d8cfd4bb729cda1679c1977826eada52a33c61c0267f52cbc06bdbdb9ad643933e7edf05e44daab4d20c8f3b5cb6388 new file mode 100644 index 00000000..2aaab65a --- /dev/null +++ b/.pnpm-store/v11/files/38/ad1eec59e6347b6802597ef74503464d8cfd4bb729cda1679c1977826eada52a33c61c0267f52cbc06bdbdb9ad643933e7edf05e44daab4d20c8f3b5cb6388 @@ -0,0 +1,67 @@ +{ + "name": "is-extendable", + "description": "Returns true if a value is a plain object, array or function.", + "version": "1.0.1", + "homepage": "https://github.com/jonschlinkert/is-extendable", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/is-extendable", + "bugs": { + "url": "https://github.com/jonschlinkert/is-extendable/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "index.d.ts" + ], + "main": "index.js", + "types": "index.d.ts", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "devDependencies": { + "gulp-format-md": "^1.0.0", + "mocha": "^3.4.2" + }, + "keywords": [ + "array", + "assign", + "check", + "date", + "extend", + "extendable", + "extensible", + "function", + "is", + "object", + "regex", + "test" + ], + "verb": { + "related": { + "list": [ + "assign-deep", + "is-equal-shallow", + "is-plain-object", + "isobject", + "kind-of" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/38/ed27cb7a6cae7f562f7b632684a4c0a3b9edf9fdf1ed7d38cd8799bebfbb35f45a3f58732175141d256575c0716e0ac536da027919f8e351757124ef5d0486 b/.pnpm-store/v11/files/38/ed27cb7a6cae7f562f7b632684a4c0a3b9edf9fdf1ed7d38cd8799bebfbb35f45a3f58732175141d256575c0716e0ac536da027919f8e351757124ef5d0486 new file mode 100644 index 00000000..8b22942b --- /dev/null +++ b/.pnpm-store/v11/files/38/ed27cb7a6cae7f562f7b632684a4c0a3b9edf9fdf1ed7d38cd8799bebfbb35f45a3f58732175141d256575c0716e0ac536da027919f8e351757124ef5d0486 @@ -0,0 +1,155 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const cp = require("child_process"); +const path = require("path"); +const EE = require("events"); +const merge = require('lodash.merge'); +const shuffle = require('lodash.shuffle'); +const suman_events_1 = require("suman-events"); +const suman_utils_1 = require("suman-utils"); +const async = require("async"); +const chalk = require("chalk"); +const _suman = global.__suman = (global.__suman || {}); +const ru = require("./runner-utils"); +const resultBroadcaster = _suman.resultBroadcaster = (_suman.resultBroadcaster || new EE()); +const prepend_transform_1 = require("prepend-transform"); +exports.makeContainerize = function (runnerObj, tableRows, messages, forkedCPs, handleMessage, beforeExitRunOncePost, makeExit) { + return function (runObj) { + _suman.startDateMillis = Date.now(); + const { sumanOpts, sumanConfig, maxProcs, projectRoot, userArgs: args } = _suman; + const waitForAllTranformsToFinish = true; + let failedTestObjects = []; + let queuedTestObjects = []; + const transpileQueue = async.queue(function (task, cb) { + task(function (err, file, shortFile, stdout, pathFromProjecRoot) { + setImmediate(cb); + if (err) { + _suman.log.error('transpile error => ', suman_utils_1.default.getCleanErrorString(err)); + failedTestObjects.push({ err, file, shortFile, stdout, pathFromProjecRoot }); + } + else { + queuedTestObjects.push({ file, shortFile, stdout, pathFromProjecRoot }); + } + }); + }, 4); + transpileQueue.drain = function () { + _suman.log.info('all transforms complete, beginning to run first set of tests.'); + const p = path.resolve(__dirname + '/../dockerize/make-dockerized-tests.sh'); + const files = queuedTestObjects.map(function (v) { + if (String(v.pathFromProjecRoot).startsWith('/')) { + return String(v.pathFromProjecRoot).slice(1); + } + return v.pathFromProjecRoot; + }); + console.log('short files => ', files); + const filesStr = files.join(' '); + console.log('short filesStr => ', filesStr); + const k = cp.spawn(p, [filesStr, '--no-transpile']); + k.stdout.pipe(process.stdout); + k.stderr.pipe(process.stderr); + k.once('exit', function (code) { + console.log('containerized tests exitted with code => ', code); + process.exit(code); + }); + }; + if (sumanOpts.$useTAPOutput) { + if (sumanOpts.verbosity > 7) { + _suman.log.info(chalk.gray.bold('Suman runner is expecting TAP output from Node.js child processes ' + + 'and will not be listening for IPC messages.')); + } + } + let files = runObj.files; + resultBroadcaster.emit(String(suman_events_1.events.RUNNER_STARTED), files.length); + if (_suman.sumanOpts.rand) { + files = shuffle(files); + } + runnerObj.startTime = Date.now(); + const fileObjArray = suman_utils_1.default.removeSharedRootPath(files); + const sumanEnv = Object.assign({}, process.env, { + SUMAN_CONFIG: JSON.stringify(sumanConfig), + SUMAN_OPTS: JSON.stringify(sumanOpts), + SUMAN_RUNNER: 'yes', + SUMAN_RUN_ID: _suman.runId, + SUMAN_RUNNER_TIMESTAMP: _suman.timestamp, + NPM_COLORS: process.env.NPM_COLORS || (sumanOpts.no_color ? 'no' : 'yes') + }); + if (_suman.socketServerPort > 0) { + sumanEnv['SUMAN_SOCKETIO_SERVER_PORT'] = _suman.socketServerPort; + } + fileObjArray.forEach(function (fileShortAndFull) { + const file = fileShortAndFull[0]; + const shortFile = fileShortAndFull[1]; + console.log('fileShortAndFull', fileShortAndFull); + const pathFromRoot = fileShortAndFull[2]; + let basename = file.length > 28 ? ' ' + String(file).substring(Math.max(0, file.length - 28)) + ' ' : file; + const m = String(basename).match(/\//g); + if (m && m.length > 1) { + const arr = String(basename).split(''); + let i = 0; + while (arr[i] !== '/') { + arr.shift(); + } + basename = arr.join(''); + } + tableRows[shortFile] = { + actualExitCode: null, + shortFilePath: shortFile, + tableData: null, + defaultTableData: { + SUITES_DESIGNATOR: basename + } + }; + const tr = ru.findPathOfTransformDotSh(file); + if (tr) { + transpileQueue.push(function (cb) { + suman_utils_1.default.makePathExecutable(tr, function (err) { + if (err) { + return cb(err); + } + let k = cp.spawn(tr, [], { + cwd: projectRoot, + env: Object.assign({}, process.env, { + SUMAN_TEST_PATHS: JSON.stringify([file]), + SUMAN_CHILD_TEST_PATH: file + }) + }); + k.once('error', cb); + k.stderr.setEncoding('utf8'); + k.stdout.setEncoding('utf8'); + if (sumanOpts.inherit_stdio || process.env.SUMAN_INHERIT_STDIO === 'yes') { + let onError = function (e) { + console.error('\n', suman_utils_1.default.getCleanErrorString(e), '\n'); + }; + k.stderr.pipe(prepend_transform_1.pt(`${chalk.red('=> transform process stderr => ')} ${file}\n`, { omitWhitespace: true })) + .on('error', onError).pipe(process.stderr).on('error', onError); + k.stdout.pipe(prepend_transform_1.pt(` => transform process stdout => ${file}\n`)) + .on('error', onError).pipe(process.stdout).on('error', onError); + } + let stdout = ''; + k.stdout.on('data', function (data) { + stdout += data; + }); + k.once('close', function (code) { + if (code > 0) { + cb(new Error(`the @transform.sh process, for file ${file},\nexitted with non-zero exit code. :( + \n To see the stderr, use --inherit-stdio.`)); + } + else { + cb(null, file, shortFile, stdout, pathFromRoot); + } + }); + }); + }); + } + else { + transpileQueue.unshift(function (cb) { + setImmediate(function () { + cb(null, file, shortFile, '', pathFromRoot); + }); + }); + } + }); + }; +}; diff --git a/.pnpm-store/v11/files/38/f0908de8f68a6657641fc75ceaf5a949f5fcb3e0f411bec08580d61230b2c7b05284607ba4985bd423daa12d65343df71d5988a39e6c9afe3f8e5b718b501a b/.pnpm-store/v11/files/38/f0908de8f68a6657641fc75ceaf5a949f5fcb3e0f411bec08580d61230b2c7b05284607ba4985bd423daa12d65343df71d5988a39e6c9afe3f8e5b718b501a new file mode 100644 index 00000000..0706fc3c --- /dev/null +++ b/.pnpm-store/v11/files/38/f0908de8f68a6657641fc75ceaf5a949f5fcb3e0f411bec08580d61230b2c7b05284607ba4985bd423daa12d65343df71d5988a39e6c9afe3f8e5b718b501a @@ -0,0 +1,25 @@ +var before = require('./before'); + +/** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ +function once(func) { + return before(2, func); +} + +module.exports = once; diff --git a/.pnpm-store/v11/files/39/21296888922967b3c6360abd327e854c047f857aee2b1dc518248e671d53c85b68389e7a0160304b2d1f3ca8f5e264c38e79576d822ab27fe6be34f09f6739 b/.pnpm-store/v11/files/39/21296888922967b3c6360abd327e854c047f857aee2b1dc518248e671d53c85b68389e7a0160304b2d1f3ca8f5e264c38e79576d822ab27fe6be34f09f6739 new file mode 100644 index 00000000..2af3eee1 --- /dev/null +++ b/.pnpm-store/v11/files/39/21296888922967b3c6360abd327e854c047f857aee2b1dc518248e671d53c85b68389e7a0160304b2d1f3ca8f5e264c38e79576d822ab27fe6be34f09f6739 @@ -0,0 +1,6709 @@ +(function webpackUniversalModuleDefinition(root, factory) { +/* istanbul ignore next */ + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); +/* istanbul ignore next */ + else if(typeof exports === 'object') + exports["esprima"] = factory(); + else + root["esprima"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/* istanbul ignore if */ +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + /* + Copyright JS Foundation and other contributors, https://js.foundation/ + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + Object.defineProperty(exports, "__esModule", { value: true }); + var comment_handler_1 = __webpack_require__(1); + var jsx_parser_1 = __webpack_require__(3); + var parser_1 = __webpack_require__(8); + var tokenizer_1 = __webpack_require__(15); + function parse(code, options, delegate) { + var commentHandler = null; + var proxyDelegate = function (node, metadata) { + if (delegate) { + delegate(node, metadata); + } + if (commentHandler) { + commentHandler.visit(node, metadata); + } + }; + var parserDelegate = (typeof delegate === 'function') ? proxyDelegate : null; + var collectComment = false; + if (options) { + collectComment = (typeof options.comment === 'boolean' && options.comment); + var attachComment = (typeof options.attachComment === 'boolean' && options.attachComment); + if (collectComment || attachComment) { + commentHandler = new comment_handler_1.CommentHandler(); + commentHandler.attach = attachComment; + options.comment = true; + parserDelegate = proxyDelegate; + } + } + var isModule = false; + if (options && typeof options.sourceType === 'string') { + isModule = (options.sourceType === 'module'); + } + var parser; + if (options && typeof options.jsx === 'boolean' && options.jsx) { + parser = new jsx_parser_1.JSXParser(code, options, parserDelegate); + } + else { + parser = new parser_1.Parser(code, options, parserDelegate); + } + var program = isModule ? parser.parseModule() : parser.parseScript(); + var ast = program; + if (collectComment && commentHandler) { + ast.comments = commentHandler.comments; + } + if (parser.config.tokens) { + ast.tokens = parser.tokens; + } + if (parser.config.tolerant) { + ast.errors = parser.errorHandler.errors; + } + return ast; + } + exports.parse = parse; + function parseModule(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'module'; + return parse(code, parsingOptions, delegate); + } + exports.parseModule = parseModule; + function parseScript(code, options, delegate) { + var parsingOptions = options || {}; + parsingOptions.sourceType = 'script'; + return parse(code, parsingOptions, delegate); + } + exports.parseScript = parseScript; + function tokenize(code, options, delegate) { + var tokenizer = new tokenizer_1.Tokenizer(code, options); + var tokens; + tokens = []; + try { + while (true) { + var token = tokenizer.getNextToken(); + if (!token) { + break; + } + if (delegate) { + token = delegate(token); + } + tokens.push(token); + } + } + catch (e) { + tokenizer.errorHandler.tolerate(e); + } + if (tokenizer.errorHandler.tolerant) { + tokens.errors = tokenizer.errors(); + } + return tokens; + } + exports.tokenize = tokenize; + var syntax_1 = __webpack_require__(2); + exports.Syntax = syntax_1.Syntax; + // Sync with *.json manifests. + exports.version = '4.0.1'; + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var syntax_1 = __webpack_require__(2); + var CommentHandler = (function () { + function CommentHandler() { + this.attach = false; + this.comments = []; + this.stack = []; + this.leading = []; + this.trailing = []; + } + CommentHandler.prototype.insertInnerComments = function (node, metadata) { + // innnerComments for properties empty block + // `function a() {/** comments **\/}` + if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) { + var innerComments = []; + for (var i = this.leading.length - 1; i >= 0; --i) { + var entry = this.leading[i]; + if (metadata.end.offset >= entry.start) { + innerComments.unshift(entry.comment); + this.leading.splice(i, 1); + this.trailing.splice(i, 1); + } + } + if (innerComments.length) { + node.innerComments = innerComments; + } + } + }; + CommentHandler.prototype.findTrailingComments = function (metadata) { + var trailingComments = []; + if (this.trailing.length > 0) { + for (var i = this.trailing.length - 1; i >= 0; --i) { + var entry_1 = this.trailing[i]; + if (entry_1.start >= metadata.end.offset) { + trailingComments.unshift(entry_1.comment); + } + } + this.trailing.length = 0; + return trailingComments; + } + var entry = this.stack[this.stack.length - 1]; + if (entry && entry.node.trailingComments) { + var firstComment = entry.node.trailingComments[0]; + if (firstComment && firstComment.range[0] >= metadata.end.offset) { + trailingComments = entry.node.trailingComments; + delete entry.node.trailingComments; + } + } + return trailingComments; + }; + CommentHandler.prototype.findLeadingComments = function (metadata) { + var leadingComments = []; + var target; + while (this.stack.length > 0) { + var entry = this.stack[this.stack.length - 1]; + if (entry && entry.start >= metadata.start.offset) { + target = entry.node; + this.stack.pop(); + } + else { + break; + } + } + if (target) { + var count = target.leadingComments ? target.leadingComments.length : 0; + for (var i = count - 1; i >= 0; --i) { + var comment = target.leadingComments[i]; + if (comment.range[1] <= metadata.start.offset) { + leadingComments.unshift(comment); + target.leadingComments.splice(i, 1); + } + } + if (target.leadingComments && target.leadingComments.length === 0) { + delete target.leadingComments; + } + return leadingComments; + } + for (var i = this.leading.length - 1; i >= 0; --i) { + var entry = this.leading[i]; + if (entry.start <= metadata.start.offset) { + leadingComments.unshift(entry.comment); + this.leading.splice(i, 1); + } + } + return leadingComments; + }; + CommentHandler.prototype.visitNode = function (node, metadata) { + if (node.type === syntax_1.Syntax.Program && node.body.length > 0) { + return; + } + this.insertInnerComments(node, metadata); + var trailingComments = this.findTrailingComments(metadata); + var leadingComments = this.findLeadingComments(metadata); + if (leadingComments.length > 0) { + node.leadingComments = leadingComments; + } + if (trailingComments.length > 0) { + node.trailingComments = trailingComments; + } + this.stack.push({ + node: node, + start: metadata.start.offset + }); + }; + CommentHandler.prototype.visitComment = function (node, metadata) { + var type = (node.type[0] === 'L') ? 'Line' : 'Block'; + var comment = { + type: type, + value: node.value + }; + if (node.range) { + comment.range = node.range; + } + if (node.loc) { + comment.loc = node.loc; + } + this.comments.push(comment); + if (this.attach) { + var entry = { + comment: { + type: type, + value: node.value, + range: [metadata.start.offset, metadata.end.offset] + }, + start: metadata.start.offset + }; + if (node.loc) { + entry.comment.loc = node.loc; + } + node.type = type; + this.leading.push(entry); + this.trailing.push(entry); + } + }; + CommentHandler.prototype.visit = function (node, metadata) { + if (node.type === 'LineComment') { + this.visitComment(node, metadata); + } + else if (node.type === 'BlockComment') { + this.visitComment(node, metadata); + } + else if (this.attach) { + this.visitNode(node, metadata); + } + }; + return CommentHandler; + }()); + exports.CommentHandler = CommentHandler; + + +/***/ }, +/* 2 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.Syntax = { + AssignmentExpression: 'AssignmentExpression', + AssignmentPattern: 'AssignmentPattern', + ArrayExpression: 'ArrayExpression', + ArrayPattern: 'ArrayPattern', + ArrowFunctionExpression: 'ArrowFunctionExpression', + AwaitExpression: 'AwaitExpression', + BlockStatement: 'BlockStatement', + BinaryExpression: 'BinaryExpression', + BreakStatement: 'BreakStatement', + CallExpression: 'CallExpression', + CatchClause: 'CatchClause', + ClassBody: 'ClassBody', + ClassDeclaration: 'ClassDeclaration', + ClassExpression: 'ClassExpression', + ConditionalExpression: 'ConditionalExpression', + ContinueStatement: 'ContinueStatement', + DoWhileStatement: 'DoWhileStatement', + DebuggerStatement: 'DebuggerStatement', + EmptyStatement: 'EmptyStatement', + ExportAllDeclaration: 'ExportAllDeclaration', + ExportDefaultDeclaration: 'ExportDefaultDeclaration', + ExportNamedDeclaration: 'ExportNamedDeclaration', + ExportSpecifier: 'ExportSpecifier', + ExpressionStatement: 'ExpressionStatement', + ForStatement: 'ForStatement', + ForOfStatement: 'ForOfStatement', + ForInStatement: 'ForInStatement', + FunctionDeclaration: 'FunctionDeclaration', + FunctionExpression: 'FunctionExpression', + Identifier: 'Identifier', + IfStatement: 'IfStatement', + ImportDeclaration: 'ImportDeclaration', + ImportDefaultSpecifier: 'ImportDefaultSpecifier', + ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', + ImportSpecifier: 'ImportSpecifier', + Literal: 'Literal', + LabeledStatement: 'LabeledStatement', + LogicalExpression: 'LogicalExpression', + MemberExpression: 'MemberExpression', + MetaProperty: 'MetaProperty', + MethodDefinition: 'MethodDefinition', + NewExpression: 'NewExpression', + ObjectExpression: 'ObjectExpression', + ObjectPattern: 'ObjectPattern', + Program: 'Program', + Property: 'Property', + RestElement: 'RestElement', + ReturnStatement: 'ReturnStatement', + SequenceExpression: 'SequenceExpression', + SpreadElement: 'SpreadElement', + Super: 'Super', + SwitchCase: 'SwitchCase', + SwitchStatement: 'SwitchStatement', + TaggedTemplateExpression: 'TaggedTemplateExpression', + TemplateElement: 'TemplateElement', + TemplateLiteral: 'TemplateLiteral', + ThisExpression: 'ThisExpression', + ThrowStatement: 'ThrowStatement', + TryStatement: 'TryStatement', + UnaryExpression: 'UnaryExpression', + UpdateExpression: 'UpdateExpression', + VariableDeclaration: 'VariableDeclaration', + VariableDeclarator: 'VariableDeclarator', + WhileStatement: 'WhileStatement', + WithStatement: 'WithStatement', + YieldExpression: 'YieldExpression' + }; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; +/* istanbul ignore next */ + var __extends = (this && this.__extends) || (function () { + var extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + Object.defineProperty(exports, "__esModule", { value: true }); + var character_1 = __webpack_require__(4); + var JSXNode = __webpack_require__(5); + var jsx_syntax_1 = __webpack_require__(6); + var Node = __webpack_require__(7); + var parser_1 = __webpack_require__(8); + var token_1 = __webpack_require__(13); + var xhtml_entities_1 = __webpack_require__(14); + token_1.TokenName[100 /* Identifier */] = 'JSXIdentifier'; + token_1.TokenName[101 /* Text */] = 'JSXText'; + // Fully qualified element name, e.g. returns "svg:path" + function getQualifiedElementName(elementName) { + var qualifiedName; + switch (elementName.type) { + case jsx_syntax_1.JSXSyntax.JSXIdentifier: + var id = elementName; + qualifiedName = id.name; + break; + case jsx_syntax_1.JSXSyntax.JSXNamespacedName: + var ns = elementName; + qualifiedName = getQualifiedElementName(ns.namespace) + ':' + + getQualifiedElementName(ns.name); + break; + case jsx_syntax_1.JSXSyntax.JSXMemberExpression: + var expr = elementName; + qualifiedName = getQualifiedElementName(expr.object) + '.' + + getQualifiedElementName(expr.property); + break; + /* istanbul ignore next */ + default: + break; + } + return qualifiedName; + } + var JSXParser = (function (_super) { + __extends(JSXParser, _super); + function JSXParser(code, options, delegate) { + return _super.call(this, code, options, delegate) || this; + } + JSXParser.prototype.parsePrimaryExpression = function () { + return this.match('<') ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this); + }; + JSXParser.prototype.startJSX = function () { + // Unwind the scanner before the lookahead token. + this.scanner.index = this.startMarker.index; + this.scanner.lineNumber = this.startMarker.line; + this.scanner.lineStart = this.startMarker.index - this.startMarker.column; + }; + JSXParser.prototype.finishJSX = function () { + // Prime the next lookahead. + this.nextToken(); + }; + JSXParser.prototype.reenterJSX = function () { + this.startJSX(); + this.expectJSX('}'); + // Pop the closing '}' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + }; + JSXParser.prototype.createJSXNode = function () { + this.collectComments(); + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.createJSXChildNode = function () { + return { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + }; + JSXParser.prototype.scanXHTMLEntity = function (quote) { + var result = '&'; + var valid = true; + var terminated = false; + var numeric = false; + var hex = false; + while (!this.scanner.eof() && valid && !terminated) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === quote) { + break; + } + terminated = (ch === ';'); + result += ch; + ++this.scanner.index; + if (!terminated) { + switch (result.length) { + case 2: + // e.g. '{' + numeric = (ch === '#'); + break; + case 3: + if (numeric) { + // e.g. 'A' + hex = (ch === 'x'); + valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0)); + numeric = numeric && !hex; + } + break; + default: + valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0))); + valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0))); + break; + } + } + } + if (valid && terminated && result.length > 2) { + // e.g. 'A' becomes just '#x41' + var str = result.substr(1, result.length - 2); + if (numeric && str.length > 1) { + result = String.fromCharCode(parseInt(str.substr(1), 10)); + } + else if (hex && str.length > 2) { + result = String.fromCharCode(parseInt('0' + str.substr(1), 16)); + } + else if (!numeric && !hex && xhtml_entities_1.XHTMLEntities[str]) { + result = xhtml_entities_1.XHTMLEntities[str]; + } + } + return result; + }; + // Scan the next JSX token. This replaces Scanner#lex when in JSX mode. + JSXParser.prototype.lexJSX = function () { + var cp = this.scanner.source.charCodeAt(this.scanner.index); + // < > / : = { } + if (cp === 60 || cp === 62 || cp === 47 || cp === 58 || cp === 61 || cp === 123 || cp === 125) { + var value = this.scanner.source[this.scanner.index++]; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index - 1, + end: this.scanner.index + }; + } + // " ' + if (cp === 34 || cp === 39) { + var start = this.scanner.index; + var quote = this.scanner.source[this.scanner.index++]; + var str = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index++]; + if (ch === quote) { + break; + } + else if (ch === '&') { + str += this.scanXHTMLEntity(quote); + } + else { + str += ch; + } + } + return { + type: 8 /* StringLiteral */, + value: str, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ... or . + if (cp === 46) { + var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1); + var n2 = this.scanner.source.charCodeAt(this.scanner.index + 2); + var value = (n1 === 46 && n2 === 46) ? '...' : '.'; + var start = this.scanner.index; + this.scanner.index += value.length; + return { + type: 7 /* Punctuator */, + value: value, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + // ` + if (cp === 96) { + // Only placeholder, since it will be rescanned as a real assignment expression. + return { + type: 10 /* Template */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: this.scanner.index, + end: this.scanner.index + }; + } + // Identifer can not contain backslash (char code 92). + if (character_1.Character.isIdentifierStart(cp) && (cp !== 92)) { + var start = this.scanner.index; + ++this.scanner.index; + while (!this.scanner.eof()) { + var ch = this.scanner.source.charCodeAt(this.scanner.index); + if (character_1.Character.isIdentifierPart(ch) && (ch !== 92)) { + ++this.scanner.index; + } + else if (ch === 45) { + // Hyphen (char code 45) can be part of an identifier. + ++this.scanner.index; + } + else { + break; + } + } + var id = this.scanner.source.slice(start, this.scanner.index); + return { + type: 100 /* Identifier */, + value: id, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + } + return this.scanner.lex(); + }; + JSXParser.prototype.nextJSXToken = function () { + this.collectComments(); + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var token = this.lexJSX(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + if (this.config.tokens) { + this.tokens.push(this.convertToken(token)); + } + return token; + }; + JSXParser.prototype.nextJSXText = function () { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + var start = this.scanner.index; + var text = ''; + while (!this.scanner.eof()) { + var ch = this.scanner.source[this.scanner.index]; + if (ch === '{' || ch === '<') { + break; + } + ++this.scanner.index; + text += ch; + if (character_1.Character.isLineTerminator(ch.charCodeAt(0))) { + ++this.scanner.lineNumber; + if (ch === '\r' && this.scanner.source[this.scanner.index] === '\n') { + ++this.scanner.index; + } + this.scanner.lineStart = this.scanner.index; + } + } + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + var token = { + type: 101 /* Text */, + value: text, + lineNumber: this.scanner.lineNumber, + lineStart: this.scanner.lineStart, + start: start, + end: this.scanner.index + }; + if ((text.length > 0) && this.config.tokens) { + this.tokens.push(this.convertToken(token)); + } + return token; + }; + JSXParser.prototype.peekJSXToken = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.lexJSX(); + this.scanner.restoreState(state); + return next; + }; + // Expect the next JSX token to match the specified punctuator. + // If not, an exception will be thrown. + JSXParser.prototype.expectJSX = function (value) { + var token = this.nextJSXToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { + this.throwUnexpectedToken(token); + } + }; + // Return true if the next JSX token matches the specified punctuator. + JSXParser.prototype.matchJSX = function (value) { + var next = this.peekJSXToken(); + return next.type === 7 /* Punctuator */ && next.value === value; + }; + JSXParser.prototype.parseJSXIdentifier = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 100 /* Identifier */) { + this.throwUnexpectedToken(token); + } + return this.finalize(node, new JSXNode.JSXIdentifier(token.value)); + }; + JSXParser.prototype.parseJSXElementName = function () { + var node = this.createJSXNode(); + var elementName = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = elementName; + this.expectJSX(':'); + var name_1 = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1)); + } + else if (this.matchJSX('.')) { + while (this.matchJSX('.')) { + var object = elementName; + this.expectJSX('.'); + var property = this.parseJSXIdentifier(); + elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property)); + } + } + return elementName; + }; + JSXParser.prototype.parseJSXAttributeName = function () { + var node = this.createJSXNode(); + var attributeName; + var identifier = this.parseJSXIdentifier(); + if (this.matchJSX(':')) { + var namespace = identifier; + this.expectJSX(':'); + var name_2 = this.parseJSXIdentifier(); + attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2)); + } + else { + attributeName = identifier; + } + return attributeName; + }; + JSXParser.prototype.parseJSXStringLiteralAttribute = function () { + var node = this.createJSXNode(); + var token = this.nextJSXToken(); + if (token.type !== 8 /* StringLiteral */) { + this.throwUnexpectedToken(token); + } + var raw = this.getTokenRaw(token); + return this.finalize(node, new Node.Literal(token.value, raw)); + }; + JSXParser.prototype.parseJSXExpressionAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.finishJSX(); + if (this.match('}')) { + this.tolerateError('JSX attributes must only be assigned a non-empty expression'); + } + var expression = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXAttributeValue = function () { + return this.matchJSX('{') ? this.parseJSXExpressionAttribute() : + this.matchJSX('<') ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute(); + }; + JSXParser.prototype.parseJSXNameValueAttribute = function () { + var node = this.createJSXNode(); + var name = this.parseJSXAttributeName(); + var value = null; + if (this.matchJSX('=')) { + this.expectJSX('='); + value = this.parseJSXAttributeValue(); + } + return this.finalize(node, new JSXNode.JSXAttribute(name, value)); + }; + JSXParser.prototype.parseJSXSpreadAttribute = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + this.expectJSX('...'); + this.finishJSX(); + var argument = this.parseAssignmentExpression(); + this.reenterJSX(); + return this.finalize(node, new JSXNode.JSXSpreadAttribute(argument)); + }; + JSXParser.prototype.parseJSXAttributes = function () { + var attributes = []; + while (!this.matchJSX('/') && !this.matchJSX('>')) { + var attribute = this.matchJSX('{') ? this.parseJSXSpreadAttribute() : + this.parseJSXNameValueAttribute(); + attributes.push(attribute); + } + return attributes; + }; + JSXParser.prototype.parseJSXOpeningElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXBoundaryElement = function () { + var node = this.createJSXNode(); + this.expectJSX('<'); + if (this.matchJSX('/')) { + this.expectJSX('/'); + var name_3 = this.parseJSXElementName(); + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXClosingElement(name_3)); + } + var name = this.parseJSXElementName(); + var attributes = this.parseJSXAttributes(); + var selfClosing = this.matchJSX('/'); + if (selfClosing) { + this.expectJSX('/'); + } + this.expectJSX('>'); + return this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes)); + }; + JSXParser.prototype.parseJSXEmptyExpression = function () { + var node = this.createJSXChildNode(); + this.collectComments(); + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + return this.finalize(node, new JSXNode.JSXEmptyExpression()); + }; + JSXParser.prototype.parseJSXExpressionContainer = function () { + var node = this.createJSXNode(); + this.expectJSX('{'); + var expression; + if (this.matchJSX('}')) { + expression = this.parseJSXEmptyExpression(); + this.expectJSX('}'); + } + else { + this.finishJSX(); + expression = this.parseAssignmentExpression(); + this.reenterJSX(); + } + return this.finalize(node, new JSXNode.JSXExpressionContainer(expression)); + }; + JSXParser.prototype.parseJSXChildren = function () { + var children = []; + while (!this.scanner.eof()) { + var node = this.createJSXChildNode(); + var token = this.nextJSXText(); + if (token.start < token.end) { + var raw = this.getTokenRaw(token); + var child = this.finalize(node, new JSXNode.JSXText(token.value, raw)); + children.push(child); + } + if (this.scanner.source[this.scanner.index] === '{') { + var container = this.parseJSXExpressionContainer(); + children.push(container); + } + else { + break; + } + } + return children; + }; + JSXParser.prototype.parseComplexJSXElement = function (el) { + var stack = []; + while (!this.scanner.eof()) { + el.children = el.children.concat(this.parseJSXChildren()); + var node = this.createJSXChildNode(); + var element = this.parseJSXBoundaryElement(); + if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) { + var opening = element; + if (opening.selfClosing) { + var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null)); + el.children.push(child); + } + else { + stack.push(el); + el = { node: node, opening: opening, closing: null, children: [] }; + } + } + if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) { + el.closing = element; + var open_1 = getQualifiedElementName(el.opening.name); + var close_1 = getQualifiedElementName(el.closing.name); + if (open_1 !== close_1) { + this.tolerateError('Expected corresponding JSX closing tag for %0', open_1); + } + if (stack.length > 0) { + var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing)); + el = stack[stack.length - 1]; + el.children.push(child); + stack.pop(); + } + else { + break; + } + } + } + return el; + }; + JSXParser.prototype.parseJSXElement = function () { + var node = this.createJSXNode(); + var opening = this.parseJSXOpeningElement(); + var children = []; + var closing = null; + if (!opening.selfClosing) { + var el = this.parseComplexJSXElement({ node: node, opening: opening, closing: closing, children: children }); + children = el.children; + closing = el.closing; + } + return this.finalize(node, new JSXNode.JSXElement(opening, children, closing)); + }; + JSXParser.prototype.parseJSXRoot = function () { + // Pop the opening '<' added from the lookahead. + if (this.config.tokens) { + this.tokens.pop(); + } + this.startJSX(); + var element = this.parseJSXElement(); + this.finishJSX(); + return element; + }; + JSXParser.prototype.isStartOfExpression = function () { + return _super.prototype.isStartOfExpression.call(this) || this.match('<'); + }; + return JSXParser; + }(parser_1.Parser)); + exports.JSXParser = JSXParser; + + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // See also tools/generate-unicode-regex.js. + var Regex = { + // Unicode v8.0.0 NonAsciiIdentifierStart: + NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/, + // Unicode v8.0.0 NonAsciiIdentifierPart: + NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ + }; + exports.Character = { + /* tslint:disable:no-bitwise */ + fromCodePoint: function (cp) { + return (cp < 0x10000) ? String.fromCharCode(cp) : + String.fromCharCode(0xD800 + ((cp - 0x10000) >> 10)) + + String.fromCharCode(0xDC00 + ((cp - 0x10000) & 1023)); + }, + // https://tc39.github.io/ecma262/#sec-white-space + isWhiteSpace: function (cp) { + return (cp === 0x20) || (cp === 0x09) || (cp === 0x0B) || (cp === 0x0C) || (cp === 0xA0) || + (cp >= 0x1680 && [0x1680, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(cp) >= 0); + }, + // https://tc39.github.io/ecma262/#sec-line-terminators + isLineTerminator: function (cp) { + return (cp === 0x0A) || (cp === 0x0D) || (cp === 0x2028) || (cp === 0x2029); + }, + // https://tc39.github.io/ecma262/#sec-names-and-keywords + isIdentifierStart: function (cp) { + return (cp === 0x24) || (cp === 0x5F) || + (cp >= 0x41 && cp <= 0x5A) || + (cp >= 0x61 && cp <= 0x7A) || + (cp === 0x5C) || + ((cp >= 0x80) && Regex.NonAsciiIdentifierStart.test(exports.Character.fromCodePoint(cp))); + }, + isIdentifierPart: function (cp) { + return (cp === 0x24) || (cp === 0x5F) || + (cp >= 0x41 && cp <= 0x5A) || + (cp >= 0x61 && cp <= 0x7A) || + (cp >= 0x30 && cp <= 0x39) || + (cp === 0x5C) || + ((cp >= 0x80) && Regex.NonAsciiIdentifierPart.test(exports.Character.fromCodePoint(cp))); + }, + // https://tc39.github.io/ecma262/#sec-literals-numeric-literals + isDecimalDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x39); // 0..9 + }, + isHexDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x39) || + (cp >= 0x41 && cp <= 0x46) || + (cp >= 0x61 && cp <= 0x66); // a..f + }, + isOctalDigit: function (cp) { + return (cp >= 0x30 && cp <= 0x37); // 0..7 + } + }; + + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var jsx_syntax_1 = __webpack_require__(6); + /* tslint:disable:max-classes-per-file */ + var JSXClosingElement = (function () { + function JSXClosingElement(name) { + this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement; + this.name = name; + } + return JSXClosingElement; + }()); + exports.JSXClosingElement = JSXClosingElement; + var JSXElement = (function () { + function JSXElement(openingElement, children, closingElement) { + this.type = jsx_syntax_1.JSXSyntax.JSXElement; + this.openingElement = openingElement; + this.children = children; + this.closingElement = closingElement; + } + return JSXElement; + }()); + exports.JSXElement = JSXElement; + var JSXEmptyExpression = (function () { + function JSXEmptyExpression() { + this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression; + } + return JSXEmptyExpression; + }()); + exports.JSXEmptyExpression = JSXEmptyExpression; + var JSXExpressionContainer = (function () { + function JSXExpressionContainer(expression) { + this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer; + this.expression = expression; + } + return JSXExpressionContainer; + }()); + exports.JSXExpressionContainer = JSXExpressionContainer; + var JSXIdentifier = (function () { + function JSXIdentifier(name) { + this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier; + this.name = name; + } + return JSXIdentifier; + }()); + exports.JSXIdentifier = JSXIdentifier; + var JSXMemberExpression = (function () { + function JSXMemberExpression(object, property) { + this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression; + this.object = object; + this.property = property; + } + return JSXMemberExpression; + }()); + exports.JSXMemberExpression = JSXMemberExpression; + var JSXAttribute = (function () { + function JSXAttribute(name, value) { + this.type = jsx_syntax_1.JSXSyntax.JSXAttribute; + this.name = name; + this.value = value; + } + return JSXAttribute; + }()); + exports.JSXAttribute = JSXAttribute; + var JSXNamespacedName = (function () { + function JSXNamespacedName(namespace, name) { + this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName; + this.namespace = namespace; + this.name = name; + } + return JSXNamespacedName; + }()); + exports.JSXNamespacedName = JSXNamespacedName; + var JSXOpeningElement = (function () { + function JSXOpeningElement(name, selfClosing, attributes) { + this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement; + this.name = name; + this.selfClosing = selfClosing; + this.attributes = attributes; + } + return JSXOpeningElement; + }()); + exports.JSXOpeningElement = JSXOpeningElement; + var JSXSpreadAttribute = (function () { + function JSXSpreadAttribute(argument) { + this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute; + this.argument = argument; + } + return JSXSpreadAttribute; + }()); + exports.JSXSpreadAttribute = JSXSpreadAttribute; + var JSXText = (function () { + function JSXText(value, raw) { + this.type = jsx_syntax_1.JSXSyntax.JSXText; + this.value = value; + this.raw = raw; + } + return JSXText; + }()); + exports.JSXText = JSXText; + + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + exports.JSXSyntax = { + JSXAttribute: 'JSXAttribute', + JSXClosingElement: 'JSXClosingElement', + JSXElement: 'JSXElement', + JSXEmptyExpression: 'JSXEmptyExpression', + JSXExpressionContainer: 'JSXExpressionContainer', + JSXIdentifier: 'JSXIdentifier', + JSXMemberExpression: 'JSXMemberExpression', + JSXNamespacedName: 'JSXNamespacedName', + JSXOpeningElement: 'JSXOpeningElement', + JSXSpreadAttribute: 'JSXSpreadAttribute', + JSXText: 'JSXText' + }; + + +/***/ }, +/* 7 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var syntax_1 = __webpack_require__(2); + /* tslint:disable:max-classes-per-file */ + var ArrayExpression = (function () { + function ArrayExpression(elements) { + this.type = syntax_1.Syntax.ArrayExpression; + this.elements = elements; + } + return ArrayExpression; + }()); + exports.ArrayExpression = ArrayExpression; + var ArrayPattern = (function () { + function ArrayPattern(elements) { + this.type = syntax_1.Syntax.ArrayPattern; + this.elements = elements; + } + return ArrayPattern; + }()); + exports.ArrayPattern = ArrayPattern; + var ArrowFunctionExpression = (function () { + function ArrowFunctionExpression(params, body, expression) { + this.type = syntax_1.Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.body = body; + this.generator = false; + this.expression = expression; + this.async = false; + } + return ArrowFunctionExpression; + }()); + exports.ArrowFunctionExpression = ArrowFunctionExpression; + var AssignmentExpression = (function () { + function AssignmentExpression(operator, left, right) { + this.type = syntax_1.Syntax.AssignmentExpression; + this.operator = operator; + this.left = left; + this.right = right; + } + return AssignmentExpression; + }()); + exports.AssignmentExpression = AssignmentExpression; + var AssignmentPattern = (function () { + function AssignmentPattern(left, right) { + this.type = syntax_1.Syntax.AssignmentPattern; + this.left = left; + this.right = right; + } + return AssignmentPattern; + }()); + exports.AssignmentPattern = AssignmentPattern; + var AsyncArrowFunctionExpression = (function () { + function AsyncArrowFunctionExpression(params, body, expression) { + this.type = syntax_1.Syntax.ArrowFunctionExpression; + this.id = null; + this.params = params; + this.body = body; + this.generator = false; + this.expression = expression; + this.async = true; + } + return AsyncArrowFunctionExpression; + }()); + exports.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression; + var AsyncFunctionDeclaration = (function () { + function AsyncFunctionDeclaration(id, params, body) { + this.type = syntax_1.Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.body = body; + this.generator = false; + this.expression = false; + this.async = true; + } + return AsyncFunctionDeclaration; + }()); + exports.AsyncFunctionDeclaration = AsyncFunctionDeclaration; + var AsyncFunctionExpression = (function () { + function AsyncFunctionExpression(id, params, body) { + this.type = syntax_1.Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.body = body; + this.generator = false; + this.expression = false; + this.async = true; + } + return AsyncFunctionExpression; + }()); + exports.AsyncFunctionExpression = AsyncFunctionExpression; + var AwaitExpression = (function () { + function AwaitExpression(argument) { + this.type = syntax_1.Syntax.AwaitExpression; + this.argument = argument; + } + return AwaitExpression; + }()); + exports.AwaitExpression = AwaitExpression; + var BinaryExpression = (function () { + function BinaryExpression(operator, left, right) { + var logical = (operator === '||' || operator === '&&'); + this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression; + this.operator = operator; + this.left = left; + this.right = right; + } + return BinaryExpression; + }()); + exports.BinaryExpression = BinaryExpression; + var BlockStatement = (function () { + function BlockStatement(body) { + this.type = syntax_1.Syntax.BlockStatement; + this.body = body; + } + return BlockStatement; + }()); + exports.BlockStatement = BlockStatement; + var BreakStatement = (function () { + function BreakStatement(label) { + this.type = syntax_1.Syntax.BreakStatement; + this.label = label; + } + return BreakStatement; + }()); + exports.BreakStatement = BreakStatement; + var CallExpression = (function () { + function CallExpression(callee, args) { + this.type = syntax_1.Syntax.CallExpression; + this.callee = callee; + this.arguments = args; + } + return CallExpression; + }()); + exports.CallExpression = CallExpression; + var CatchClause = (function () { + function CatchClause(param, body) { + this.type = syntax_1.Syntax.CatchClause; + this.param = param; + this.body = body; + } + return CatchClause; + }()); + exports.CatchClause = CatchClause; + var ClassBody = (function () { + function ClassBody(body) { + this.type = syntax_1.Syntax.ClassBody; + this.body = body; + } + return ClassBody; + }()); + exports.ClassBody = ClassBody; + var ClassDeclaration = (function () { + function ClassDeclaration(id, superClass, body) { + this.type = syntax_1.Syntax.ClassDeclaration; + this.id = id; + this.superClass = superClass; + this.body = body; + } + return ClassDeclaration; + }()); + exports.ClassDeclaration = ClassDeclaration; + var ClassExpression = (function () { + function ClassExpression(id, superClass, body) { + this.type = syntax_1.Syntax.ClassExpression; + this.id = id; + this.superClass = superClass; + this.body = body; + } + return ClassExpression; + }()); + exports.ClassExpression = ClassExpression; + var ComputedMemberExpression = (function () { + function ComputedMemberExpression(object, property) { + this.type = syntax_1.Syntax.MemberExpression; + this.computed = true; + this.object = object; + this.property = property; + } + return ComputedMemberExpression; + }()); + exports.ComputedMemberExpression = ComputedMemberExpression; + var ConditionalExpression = (function () { + function ConditionalExpression(test, consequent, alternate) { + this.type = syntax_1.Syntax.ConditionalExpression; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + } + return ConditionalExpression; + }()); + exports.ConditionalExpression = ConditionalExpression; + var ContinueStatement = (function () { + function ContinueStatement(label) { + this.type = syntax_1.Syntax.ContinueStatement; + this.label = label; + } + return ContinueStatement; + }()); + exports.ContinueStatement = ContinueStatement; + var DebuggerStatement = (function () { + function DebuggerStatement() { + this.type = syntax_1.Syntax.DebuggerStatement; + } + return DebuggerStatement; + }()); + exports.DebuggerStatement = DebuggerStatement; + var Directive = (function () { + function Directive(expression, directive) { + this.type = syntax_1.Syntax.ExpressionStatement; + this.expression = expression; + this.directive = directive; + } + return Directive; + }()); + exports.Directive = Directive; + var DoWhileStatement = (function () { + function DoWhileStatement(body, test) { + this.type = syntax_1.Syntax.DoWhileStatement; + this.body = body; + this.test = test; + } + return DoWhileStatement; + }()); + exports.DoWhileStatement = DoWhileStatement; + var EmptyStatement = (function () { + function EmptyStatement() { + this.type = syntax_1.Syntax.EmptyStatement; + } + return EmptyStatement; + }()); + exports.EmptyStatement = EmptyStatement; + var ExportAllDeclaration = (function () { + function ExportAllDeclaration(source) { + this.type = syntax_1.Syntax.ExportAllDeclaration; + this.source = source; + } + return ExportAllDeclaration; + }()); + exports.ExportAllDeclaration = ExportAllDeclaration; + var ExportDefaultDeclaration = (function () { + function ExportDefaultDeclaration(declaration) { + this.type = syntax_1.Syntax.ExportDefaultDeclaration; + this.declaration = declaration; + } + return ExportDefaultDeclaration; + }()); + exports.ExportDefaultDeclaration = ExportDefaultDeclaration; + var ExportNamedDeclaration = (function () { + function ExportNamedDeclaration(declaration, specifiers, source) { + this.type = syntax_1.Syntax.ExportNamedDeclaration; + this.declaration = declaration; + this.specifiers = specifiers; + this.source = source; + } + return ExportNamedDeclaration; + }()); + exports.ExportNamedDeclaration = ExportNamedDeclaration; + var ExportSpecifier = (function () { + function ExportSpecifier(local, exported) { + this.type = syntax_1.Syntax.ExportSpecifier; + this.exported = exported; + this.local = local; + } + return ExportSpecifier; + }()); + exports.ExportSpecifier = ExportSpecifier; + var ExpressionStatement = (function () { + function ExpressionStatement(expression) { + this.type = syntax_1.Syntax.ExpressionStatement; + this.expression = expression; + } + return ExpressionStatement; + }()); + exports.ExpressionStatement = ExpressionStatement; + var ForInStatement = (function () { + function ForInStatement(left, right, body) { + this.type = syntax_1.Syntax.ForInStatement; + this.left = left; + this.right = right; + this.body = body; + this.each = false; + } + return ForInStatement; + }()); + exports.ForInStatement = ForInStatement; + var ForOfStatement = (function () { + function ForOfStatement(left, right, body) { + this.type = syntax_1.Syntax.ForOfStatement; + this.left = left; + this.right = right; + this.body = body; + } + return ForOfStatement; + }()); + exports.ForOfStatement = ForOfStatement; + var ForStatement = (function () { + function ForStatement(init, test, update, body) { + this.type = syntax_1.Syntax.ForStatement; + this.init = init; + this.test = test; + this.update = update; + this.body = body; + } + return ForStatement; + }()); + exports.ForStatement = ForStatement; + var FunctionDeclaration = (function () { + function FunctionDeclaration(id, params, body, generator) { + this.type = syntax_1.Syntax.FunctionDeclaration; + this.id = id; + this.params = params; + this.body = body; + this.generator = generator; + this.expression = false; + this.async = false; + } + return FunctionDeclaration; + }()); + exports.FunctionDeclaration = FunctionDeclaration; + var FunctionExpression = (function () { + function FunctionExpression(id, params, body, generator) { + this.type = syntax_1.Syntax.FunctionExpression; + this.id = id; + this.params = params; + this.body = body; + this.generator = generator; + this.expression = false; + this.async = false; + } + return FunctionExpression; + }()); + exports.FunctionExpression = FunctionExpression; + var Identifier = (function () { + function Identifier(name) { + this.type = syntax_1.Syntax.Identifier; + this.name = name; + } + return Identifier; + }()); + exports.Identifier = Identifier; + var IfStatement = (function () { + function IfStatement(test, consequent, alternate) { + this.type = syntax_1.Syntax.IfStatement; + this.test = test; + this.consequent = consequent; + this.alternate = alternate; + } + return IfStatement; + }()); + exports.IfStatement = IfStatement; + var ImportDeclaration = (function () { + function ImportDeclaration(specifiers, source) { + this.type = syntax_1.Syntax.ImportDeclaration; + this.specifiers = specifiers; + this.source = source; + } + return ImportDeclaration; + }()); + exports.ImportDeclaration = ImportDeclaration; + var ImportDefaultSpecifier = (function () { + function ImportDefaultSpecifier(local) { + this.type = syntax_1.Syntax.ImportDefaultSpecifier; + this.local = local; + } + return ImportDefaultSpecifier; + }()); + exports.ImportDefaultSpecifier = ImportDefaultSpecifier; + var ImportNamespaceSpecifier = (function () { + function ImportNamespaceSpecifier(local) { + this.type = syntax_1.Syntax.ImportNamespaceSpecifier; + this.local = local; + } + return ImportNamespaceSpecifier; + }()); + exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; + var ImportSpecifier = (function () { + function ImportSpecifier(local, imported) { + this.type = syntax_1.Syntax.ImportSpecifier; + this.local = local; + this.imported = imported; + } + return ImportSpecifier; + }()); + exports.ImportSpecifier = ImportSpecifier; + var LabeledStatement = (function () { + function LabeledStatement(label, body) { + this.type = syntax_1.Syntax.LabeledStatement; + this.label = label; + this.body = body; + } + return LabeledStatement; + }()); + exports.LabeledStatement = LabeledStatement; + var Literal = (function () { + function Literal(value, raw) { + this.type = syntax_1.Syntax.Literal; + this.value = value; + this.raw = raw; + } + return Literal; + }()); + exports.Literal = Literal; + var MetaProperty = (function () { + function MetaProperty(meta, property) { + this.type = syntax_1.Syntax.MetaProperty; + this.meta = meta; + this.property = property; + } + return MetaProperty; + }()); + exports.MetaProperty = MetaProperty; + var MethodDefinition = (function () { + function MethodDefinition(key, computed, value, kind, isStatic) { + this.type = syntax_1.Syntax.MethodDefinition; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.static = isStatic; + } + return MethodDefinition; + }()); + exports.MethodDefinition = MethodDefinition; + var Module = (function () { + function Module(body) { + this.type = syntax_1.Syntax.Program; + this.body = body; + this.sourceType = 'module'; + } + return Module; + }()); + exports.Module = Module; + var NewExpression = (function () { + function NewExpression(callee, args) { + this.type = syntax_1.Syntax.NewExpression; + this.callee = callee; + this.arguments = args; + } + return NewExpression; + }()); + exports.NewExpression = NewExpression; + var ObjectExpression = (function () { + function ObjectExpression(properties) { + this.type = syntax_1.Syntax.ObjectExpression; + this.properties = properties; + } + return ObjectExpression; + }()); + exports.ObjectExpression = ObjectExpression; + var ObjectPattern = (function () { + function ObjectPattern(properties) { + this.type = syntax_1.Syntax.ObjectPattern; + this.properties = properties; + } + return ObjectPattern; + }()); + exports.ObjectPattern = ObjectPattern; + var Property = (function () { + function Property(kind, key, computed, value, method, shorthand) { + this.type = syntax_1.Syntax.Property; + this.key = key; + this.computed = computed; + this.value = value; + this.kind = kind; + this.method = method; + this.shorthand = shorthand; + } + return Property; + }()); + exports.Property = Property; + var RegexLiteral = (function () { + function RegexLiteral(value, raw, pattern, flags) { + this.type = syntax_1.Syntax.Literal; + this.value = value; + this.raw = raw; + this.regex = { pattern: pattern, flags: flags }; + } + return RegexLiteral; + }()); + exports.RegexLiteral = RegexLiteral; + var RestElement = (function () { + function RestElement(argument) { + this.type = syntax_1.Syntax.RestElement; + this.argument = argument; + } + return RestElement; + }()); + exports.RestElement = RestElement; + var ReturnStatement = (function () { + function ReturnStatement(argument) { + this.type = syntax_1.Syntax.ReturnStatement; + this.argument = argument; + } + return ReturnStatement; + }()); + exports.ReturnStatement = ReturnStatement; + var Script = (function () { + function Script(body) { + this.type = syntax_1.Syntax.Program; + this.body = body; + this.sourceType = 'script'; + } + return Script; + }()); + exports.Script = Script; + var SequenceExpression = (function () { + function SequenceExpression(expressions) { + this.type = syntax_1.Syntax.SequenceExpression; + this.expressions = expressions; + } + return SequenceExpression; + }()); + exports.SequenceExpression = SequenceExpression; + var SpreadElement = (function () { + function SpreadElement(argument) { + this.type = syntax_1.Syntax.SpreadElement; + this.argument = argument; + } + return SpreadElement; + }()); + exports.SpreadElement = SpreadElement; + var StaticMemberExpression = (function () { + function StaticMemberExpression(object, property) { + this.type = syntax_1.Syntax.MemberExpression; + this.computed = false; + this.object = object; + this.property = property; + } + return StaticMemberExpression; + }()); + exports.StaticMemberExpression = StaticMemberExpression; + var Super = (function () { + function Super() { + this.type = syntax_1.Syntax.Super; + } + return Super; + }()); + exports.Super = Super; + var SwitchCase = (function () { + function SwitchCase(test, consequent) { + this.type = syntax_1.Syntax.SwitchCase; + this.test = test; + this.consequent = consequent; + } + return SwitchCase; + }()); + exports.SwitchCase = SwitchCase; + var SwitchStatement = (function () { + function SwitchStatement(discriminant, cases) { + this.type = syntax_1.Syntax.SwitchStatement; + this.discriminant = discriminant; + this.cases = cases; + } + return SwitchStatement; + }()); + exports.SwitchStatement = SwitchStatement; + var TaggedTemplateExpression = (function () { + function TaggedTemplateExpression(tag, quasi) { + this.type = syntax_1.Syntax.TaggedTemplateExpression; + this.tag = tag; + this.quasi = quasi; + } + return TaggedTemplateExpression; + }()); + exports.TaggedTemplateExpression = TaggedTemplateExpression; + var TemplateElement = (function () { + function TemplateElement(value, tail) { + this.type = syntax_1.Syntax.TemplateElement; + this.value = value; + this.tail = tail; + } + return TemplateElement; + }()); + exports.TemplateElement = TemplateElement; + var TemplateLiteral = (function () { + function TemplateLiteral(quasis, expressions) { + this.type = syntax_1.Syntax.TemplateLiteral; + this.quasis = quasis; + this.expressions = expressions; + } + return TemplateLiteral; + }()); + exports.TemplateLiteral = TemplateLiteral; + var ThisExpression = (function () { + function ThisExpression() { + this.type = syntax_1.Syntax.ThisExpression; + } + return ThisExpression; + }()); + exports.ThisExpression = ThisExpression; + var ThrowStatement = (function () { + function ThrowStatement(argument) { + this.type = syntax_1.Syntax.ThrowStatement; + this.argument = argument; + } + return ThrowStatement; + }()); + exports.ThrowStatement = ThrowStatement; + var TryStatement = (function () { + function TryStatement(block, handler, finalizer) { + this.type = syntax_1.Syntax.TryStatement; + this.block = block; + this.handler = handler; + this.finalizer = finalizer; + } + return TryStatement; + }()); + exports.TryStatement = TryStatement; + var UnaryExpression = (function () { + function UnaryExpression(operator, argument) { + this.type = syntax_1.Syntax.UnaryExpression; + this.operator = operator; + this.argument = argument; + this.prefix = true; + } + return UnaryExpression; + }()); + exports.UnaryExpression = UnaryExpression; + var UpdateExpression = (function () { + function UpdateExpression(operator, argument, prefix) { + this.type = syntax_1.Syntax.UpdateExpression; + this.operator = operator; + this.argument = argument; + this.prefix = prefix; + } + return UpdateExpression; + }()); + exports.UpdateExpression = UpdateExpression; + var VariableDeclaration = (function () { + function VariableDeclaration(declarations, kind) { + this.type = syntax_1.Syntax.VariableDeclaration; + this.declarations = declarations; + this.kind = kind; + } + return VariableDeclaration; + }()); + exports.VariableDeclaration = VariableDeclaration; + var VariableDeclarator = (function () { + function VariableDeclarator(id, init) { + this.type = syntax_1.Syntax.VariableDeclarator; + this.id = id; + this.init = init; + } + return VariableDeclarator; + }()); + exports.VariableDeclarator = VariableDeclarator; + var WhileStatement = (function () { + function WhileStatement(test, body) { + this.type = syntax_1.Syntax.WhileStatement; + this.test = test; + this.body = body; + } + return WhileStatement; + }()); + exports.WhileStatement = WhileStatement; + var WithStatement = (function () { + function WithStatement(object, body) { + this.type = syntax_1.Syntax.WithStatement; + this.object = object; + this.body = body; + } + return WithStatement; + }()); + exports.WithStatement = WithStatement; + var YieldExpression = (function () { + function YieldExpression(argument, delegate) { + this.type = syntax_1.Syntax.YieldExpression; + this.argument = argument; + this.delegate = delegate; + } + return YieldExpression; + }()); + exports.YieldExpression = YieldExpression; + + +/***/ }, +/* 8 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var assert_1 = __webpack_require__(9); + var error_handler_1 = __webpack_require__(10); + var messages_1 = __webpack_require__(11); + var Node = __webpack_require__(7); + var scanner_1 = __webpack_require__(12); + var syntax_1 = __webpack_require__(2); + var token_1 = __webpack_require__(13); + var ArrowParameterPlaceHolder = 'ArrowParameterPlaceHolder'; + var Parser = (function () { + function Parser(code, options, delegate) { + if (options === void 0) { options = {}; } + this.config = { + range: (typeof options.range === 'boolean') && options.range, + loc: (typeof options.loc === 'boolean') && options.loc, + source: null, + tokens: (typeof options.tokens === 'boolean') && options.tokens, + comment: (typeof options.comment === 'boolean') && options.comment, + tolerant: (typeof options.tolerant === 'boolean') && options.tolerant + }; + if (this.config.loc && options.source && options.source !== null) { + this.config.source = String(options.source); + } + this.delegate = delegate; + this.errorHandler = new error_handler_1.ErrorHandler(); + this.errorHandler.tolerant = this.config.tolerant; + this.scanner = new scanner_1.Scanner(code, this.errorHandler); + this.scanner.trackComment = this.config.comment; + this.operatorPrecedence = { + ')': 0, + ';': 0, + ',': 0, + '=': 0, + ']': 0, + '||': 1, + '&&': 2, + '|': 3, + '^': 4, + '&': 5, + '==': 6, + '!=': 6, + '===': 6, + '!==': 6, + '<': 7, + '>': 7, + '<=': 7, + '>=': 7, + '<<': 8, + '>>': 8, + '>>>': 8, + '+': 9, + '-': 9, + '*': 11, + '/': 11, + '%': 11 + }; + this.lookahead = { + type: 2 /* EOF */, + value: '', + lineNumber: this.scanner.lineNumber, + lineStart: 0, + start: 0, + end: 0 + }; + this.hasLineTerminator = false; + this.context = { + isModule: false, + await: false, + allowIn: true, + allowStrictDirective: true, + allowYield: true, + firstCoverInitializedNameError: null, + isAssignmentTarget: false, + isBindingElement: false, + inFunctionBody: false, + inIteration: false, + inSwitch: false, + labelSet: {}, + strict: false + }; + this.tokens = []; + this.startMarker = { + index: 0, + line: this.scanner.lineNumber, + column: 0 + }; + this.lastMarker = { + index: 0, + line: this.scanner.lineNumber, + column: 0 + }; + this.nextToken(); + this.lastMarker = { + index: this.scanner.index, + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + }; + } + Parser.prototype.throwError = function (messageFormat) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { + assert_1.assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + }); + var index = this.lastMarker.index; + var line = this.lastMarker.line; + var column = this.lastMarker.column + 1; + throw this.errorHandler.createError(index, line, column, msg); + }; + Parser.prototype.tolerateError = function (messageFormat) { + var values = []; + for (var _i = 1; _i < arguments.length; _i++) { + values[_i - 1] = arguments[_i]; + } + var args = Array.prototype.slice.call(arguments, 1); + var msg = messageFormat.replace(/%(\d)/g, function (whole, idx) { + assert_1.assert(idx < args.length, 'Message reference must be in range'); + return args[idx]; + }); + var index = this.lastMarker.index; + var line = this.scanner.lineNumber; + var column = this.lastMarker.column + 1; + this.errorHandler.tolerateError(index, line, column, msg); + }; + // Throw an exception because of the token. + Parser.prototype.unexpectedTokenError = function (token, message) { + var msg = message || messages_1.Messages.UnexpectedToken; + var value; + if (token) { + if (!message) { + msg = (token.type === 2 /* EOF */) ? messages_1.Messages.UnexpectedEOS : + (token.type === 3 /* Identifier */) ? messages_1.Messages.UnexpectedIdentifier : + (token.type === 6 /* NumericLiteral */) ? messages_1.Messages.UnexpectedNumber : + (token.type === 8 /* StringLiteral */) ? messages_1.Messages.UnexpectedString : + (token.type === 10 /* Template */) ? messages_1.Messages.UnexpectedTemplate : + messages_1.Messages.UnexpectedToken; + if (token.type === 4 /* Keyword */) { + if (this.scanner.isFutureReservedWord(token.value)) { + msg = messages_1.Messages.UnexpectedReserved; + } + else if (this.context.strict && this.scanner.isStrictModeReservedWord(token.value)) { + msg = messages_1.Messages.StrictReservedWord; + } + } + } + value = token.value; + } + else { + value = 'ILLEGAL'; + } + msg = msg.replace('%0', value); + if (token && typeof token.lineNumber === 'number') { + var index = token.start; + var line = token.lineNumber; + var lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column; + var column = token.start - lastMarkerLineStart + 1; + return this.errorHandler.createError(index, line, column, msg); + } + else { + var index = this.lastMarker.index; + var line = this.lastMarker.line; + var column = this.lastMarker.column + 1; + return this.errorHandler.createError(index, line, column, msg); + } + }; + Parser.prototype.throwUnexpectedToken = function (token, message) { + throw this.unexpectedTokenError(token, message); + }; + Parser.prototype.tolerateUnexpectedToken = function (token, message) { + this.errorHandler.tolerate(this.unexpectedTokenError(token, message)); + }; + Parser.prototype.collectComments = function () { + if (!this.config.comment) { + this.scanner.scanComments(); + } + else { + var comments = this.scanner.scanComments(); + if (comments.length > 0 && this.delegate) { + for (var i = 0; i < comments.length; ++i) { + var e = comments[i]; + var node = void 0; + node = { + type: e.multiLine ? 'BlockComment' : 'LineComment', + value: this.scanner.source.slice(e.slice[0], e.slice[1]) + }; + if (this.config.range) { + node.range = e.range; + } + if (this.config.loc) { + node.loc = e.loc; + } + var metadata = { + start: { + line: e.loc.start.line, + column: e.loc.start.column, + offset: e.range[0] + }, + end: { + line: e.loc.end.line, + column: e.loc.end.column, + offset: e.range[1] + } + }; + this.delegate(node, metadata); + } + } + } + }; + // From internal representation to an external structure + Parser.prototype.getTokenRaw = function (token) { + return this.scanner.source.slice(token.start, token.end); + }; + Parser.prototype.convertToken = function (token) { + var t = { + type: token_1.TokenName[token.type], + value: this.getTokenRaw(token) + }; + if (this.config.range) { + t.range = [token.start, token.end]; + } + if (this.config.loc) { + t.loc = { + start: { + line: this.startMarker.line, + column: this.startMarker.column + }, + end: { + line: this.scanner.lineNumber, + column: this.scanner.index - this.scanner.lineStart + } + }; + } + if (token.type === 9 /* RegularExpression */) { + var pattern = token.pattern; + var flags = token.flags; + t.regex = { pattern: pattern, flags: flags }; + } + return t; + }; + Parser.prototype.nextToken = function () { + var token = this.lookahead; + this.lastMarker.index = this.scanner.index; + this.lastMarker.line = this.scanner.lineNumber; + this.lastMarker.column = this.scanner.index - this.scanner.lineStart; + this.collectComments(); + if (this.scanner.index !== this.startMarker.index) { + this.startMarker.index = this.scanner.index; + this.startMarker.line = this.scanner.lineNumber; + this.startMarker.column = this.scanner.index - this.scanner.lineStart; + } + var next = this.scanner.lex(); + this.hasLineTerminator = (token.lineNumber !== next.lineNumber); + if (next && this.context.strict && next.type === 3 /* Identifier */) { + if (this.scanner.isStrictModeReservedWord(next.value)) { + next.type = 4 /* Keyword */; + } + } + this.lookahead = next; + if (this.config.tokens && next.type !== 2 /* EOF */) { + this.tokens.push(this.convertToken(next)); + } + return token; + }; + Parser.prototype.nextRegexToken = function () { + this.collectComments(); + var token = this.scanner.scanRegExp(); + if (this.config.tokens) { + // Pop the previous token, '/' or '/=' + // This is added from the lookahead token. + this.tokens.pop(); + this.tokens.push(this.convertToken(token)); + } + // Prime the next lookahead. + this.lookahead = token; + this.nextToken(); + return token; + }; + Parser.prototype.createNode = function () { + return { + index: this.startMarker.index, + line: this.startMarker.line, + column: this.startMarker.column + }; + }; + Parser.prototype.startNode = function (token, lastLineStart) { + if (lastLineStart === void 0) { lastLineStart = 0; } + var column = token.start - token.lineStart; + var line = token.lineNumber; + if (column < 0) { + column += lastLineStart; + line--; + } + return { + index: token.start, + line: line, + column: column + }; + }; + Parser.prototype.finalize = function (marker, node) { + if (this.config.range) { + node.range = [marker.index, this.lastMarker.index]; + } + if (this.config.loc) { + node.loc = { + start: { + line: marker.line, + column: marker.column, + }, + end: { + line: this.lastMarker.line, + column: this.lastMarker.column + } + }; + if (this.config.source) { + node.loc.source = this.config.source; + } + } + if (this.delegate) { + var metadata = { + start: { + line: marker.line, + column: marker.column, + offset: marker.index + }, + end: { + line: this.lastMarker.line, + column: this.lastMarker.column, + offset: this.lastMarker.index + } + }; + this.delegate(node, metadata); + } + return node; + }; + // Expect the next token to match the specified punctuator. + // If not, an exception will be thrown. + Parser.prototype.expect = function (value) { + var token = this.nextToken(); + if (token.type !== 7 /* Punctuator */ || token.value !== value) { + this.throwUnexpectedToken(token); + } + }; + // Quietly expect a comma when in tolerant mode, otherwise delegates to expect(). + Parser.prototype.expectCommaSeparator = function () { + if (this.config.tolerant) { + var token = this.lookahead; + if (token.type === 7 /* Punctuator */ && token.value === ',') { + this.nextToken(); + } + else if (token.type === 7 /* Punctuator */ && token.value === ';') { + this.nextToken(); + this.tolerateUnexpectedToken(token); + } + else { + this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken); + } + } + else { + this.expect(','); + } + }; + // Expect the next token to match the specified keyword. + // If not, an exception will be thrown. + Parser.prototype.expectKeyword = function (keyword) { + var token = this.nextToken(); + if (token.type !== 4 /* Keyword */ || token.value !== keyword) { + this.throwUnexpectedToken(token); + } + }; + // Return true if the next token matches the specified punctuator. + Parser.prototype.match = function (value) { + return this.lookahead.type === 7 /* Punctuator */ && this.lookahead.value === value; + }; + // Return true if the next token matches the specified keyword + Parser.prototype.matchKeyword = function (keyword) { + return this.lookahead.type === 4 /* Keyword */ && this.lookahead.value === keyword; + }; + // Return true if the next token matches the specified contextual keyword + // (where an identifier is sometimes a keyword depending on the context) + Parser.prototype.matchContextualKeyword = function (keyword) { + return this.lookahead.type === 3 /* Identifier */ && this.lookahead.value === keyword; + }; + // Return true if the next token is an assignment operator + Parser.prototype.matchAssign = function () { + if (this.lookahead.type !== 7 /* Punctuator */) { + return false; + } + var op = this.lookahead.value; + return op === '=' || + op === '*=' || + op === '**=' || + op === '/=' || + op === '%=' || + op === '+=' || + op === '-=' || + op === '<<=' || + op === '>>=' || + op === '>>>=' || + op === '&=' || + op === '^=' || + op === '|='; + }; + // Cover grammar support. + // + // When an assignment expression position starts with an left parenthesis, the determination of the type + // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) + // or the first comma. This situation also defers the determination of all the expressions nested in the pair. + // + // There are three productions that can be parsed in a parentheses pair that needs to be determined + // after the outermost pair is closed. They are: + // + // 1. AssignmentExpression + // 2. BindingElements + // 3. AssignmentTargets + // + // In order to avoid exponential backtracking, we use two flags to denote if the production can be + // binding element or assignment target. + // + // The three productions have the relationship: + // + // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression + // + // with a single exception that CoverInitializedName when used directly in an Expression, generates + // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the + // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. + // + // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not + // effect the current flags. This means the production the parser parses is only used as an expression. Therefore + // the CoverInitializedName check is conducted. + // + // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates + // the flags outside of the parser. This means the production the parser parses is used as a part of a potential + // pattern. The CoverInitializedName check is deferred. + Parser.prototype.isolateCoverGrammar = function (parseFunction) { + var previousIsBindingElement = this.context.isBindingElement; + var previousIsAssignmentTarget = this.context.isAssignmentTarget; + var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; + this.context.isBindingElement = true; + this.context.isAssignmentTarget = true; + this.context.firstCoverInitializedNameError = null; + var result = parseFunction.call(this); + if (this.context.firstCoverInitializedNameError !== null) { + this.throwUnexpectedToken(this.context.firstCoverInitializedNameError); + } + this.context.isBindingElement = previousIsBindingElement; + this.context.isAssignmentTarget = previousIsAssignmentTarget; + this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError; + return result; + }; + Parser.prototype.inheritCoverGrammar = function (parseFunction) { + var previousIsBindingElement = this.context.isBindingElement; + var previousIsAssignmentTarget = this.context.isAssignmentTarget; + var previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError; + this.context.isBindingElement = true; + this.context.isAssignmentTarget = true; + this.context.firstCoverInitializedNameError = null; + var result = parseFunction.call(this); + this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement; + this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget; + this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError; + return result; + }; + Parser.prototype.consumeSemicolon = function () { + if (this.match(';')) { + this.nextToken(); + } + else if (!this.hasLineTerminator) { + if (this.lookahead.type !== 2 /* EOF */ && !this.match('}')) { + this.throwUnexpectedToken(this.lookahead); + } + this.lastMarker.index = this.startMarker.index; + this.lastMarker.line = this.startMarker.line; + this.lastMarker.column = this.startMarker.column; + } + }; + // https://tc39.github.io/ecma262/#sec-primary-expression + Parser.prototype.parsePrimaryExpression = function () { + var node = this.createNode(); + var expr; + var token, raw; + switch (this.lookahead.type) { + case 3 /* Identifier */: + if ((this.context.isModule || this.context.await) && this.lookahead.value === 'await') { + this.tolerateUnexpectedToken(this.lookahead); + } + expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value)); + break; + case 6 /* NumericLiteral */: + case 8 /* StringLiteral */: + if (this.context.strict && this.lookahead.octal) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(token.value, raw)); + break; + case 1 /* BooleanLiteral */: + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(token.value === 'true', raw)); + break; + case 5 /* NullLiteral */: + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + token = this.nextToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.Literal(null, raw)); + break; + case 10 /* Template */: + expr = this.parseTemplateLiteral(); + break; + case 7 /* Punctuator */: + switch (this.lookahead.value) { + case '(': + this.context.isBindingElement = false; + expr = this.inheritCoverGrammar(this.parseGroupExpression); + break; + case '[': + expr = this.inheritCoverGrammar(this.parseArrayInitializer); + break; + case '{': + expr = this.inheritCoverGrammar(this.parseObjectInitializer); + break; + case '/': + case '/=': + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + this.scanner.index = this.startMarker.index; + token = this.nextRegexToken(); + raw = this.getTokenRaw(token); + expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags)); + break; + default: + expr = this.throwUnexpectedToken(this.nextToken()); + } + break; + case 4 /* Keyword */: + if (!this.context.strict && this.context.allowYield && this.matchKeyword('yield')) { + expr = this.parseIdentifierName(); + } + else if (!this.context.strict && this.matchKeyword('let')) { + expr = this.finalize(node, new Node.Identifier(this.nextToken().value)); + } + else { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + if (this.matchKeyword('function')) { + expr = this.parseFunctionExpression(); + } + else if (this.matchKeyword('this')) { + this.nextToken(); + expr = this.finalize(node, new Node.ThisExpression()); + } + else if (this.matchKeyword('class')) { + expr = this.parseClassExpression(); + } + else { + expr = this.throwUnexpectedToken(this.nextToken()); + } + } + break; + default: + expr = this.throwUnexpectedToken(this.nextToken()); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-array-initializer + Parser.prototype.parseSpreadElement = function () { + var node = this.createNode(); + this.expect('...'); + var arg = this.inheritCoverGrammar(this.parseAssignmentExpression); + return this.finalize(node, new Node.SpreadElement(arg)); + }; + Parser.prototype.parseArrayInitializer = function () { + var node = this.createNode(); + var elements = []; + this.expect('['); + while (!this.match(']')) { + if (this.match(',')) { + this.nextToken(); + elements.push(null); + } + else if (this.match('...')) { + var element = this.parseSpreadElement(); + if (!this.match(']')) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + this.expect(','); + } + elements.push(element); + } + else { + elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); + if (!this.match(']')) { + this.expect(','); + } + } + } + this.expect(']'); + return this.finalize(node, new Node.ArrayExpression(elements)); + }; + // https://tc39.github.io/ecma262/#sec-object-initializer + Parser.prototype.parsePropertyMethod = function (params) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = params.simple; + var body = this.isolateCoverGrammar(this.parseFunctionSourceElements); + if (this.context.strict && params.firstRestricted) { + this.tolerateUnexpectedToken(params.firstRestricted, params.message); + } + if (this.context.strict && params.stricted) { + this.tolerateUnexpectedToken(params.stricted, params.message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + return body; + }; + Parser.prototype.parsePropertyMethodFunction = function () { + var isGenerator = false; + var node = this.createNode(); + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var params = this.parseFormalParameters(); + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); + }; + Parser.prototype.parsePropertyMethodAsyncFunction = function () { + var node = this.createNode(); + var previousAllowYield = this.context.allowYield; + var previousAwait = this.context.await; + this.context.allowYield = false; + this.context.await = true; + var params = this.parseFormalParameters(); + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + this.context.await = previousAwait; + return this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method)); + }; + Parser.prototype.parseObjectPropertyKey = function () { + var node = this.createNode(); + var token = this.nextToken(); + var key; + switch (token.type) { + case 8 /* StringLiteral */: + case 6 /* NumericLiteral */: + if (this.context.strict && token.octal) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral); + } + var raw = this.getTokenRaw(token); + key = this.finalize(node, new Node.Literal(token.value, raw)); + break; + case 3 /* Identifier */: + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 4 /* Keyword */: + key = this.finalize(node, new Node.Identifier(token.value)); + break; + case 7 /* Punctuator */: + if (token.value === '[') { + key = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.expect(']'); + } + else { + key = this.throwUnexpectedToken(token); + } + break; + default: + key = this.throwUnexpectedToken(token); + } + return key; + }; + Parser.prototype.isPropertyKey = function (key, value) { + return (key.type === syntax_1.Syntax.Identifier && key.name === value) || + (key.type === syntax_1.Syntax.Literal && key.value === value); + }; + Parser.prototype.parseObjectProperty = function (hasProto) { + var node = this.createNode(); + var token = this.lookahead; + var kind; + var key = null; + var value = null; + var computed = false; + var method = false; + var shorthand = false; + var isAsync = false; + if (token.type === 3 /* Identifier */) { + var id = token.value; + this.nextToken(); + computed = this.match('['); + isAsync = !this.hasLineTerminator && (id === 'async') && + !this.match(':') && !this.match('(') && !this.match('*') && !this.match(','); + key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id)); + } + else if (this.match('*')) { + this.nextToken(); + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + } + var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); + if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'get' && lookaheadPropertyKey) { + kind = 'get'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.context.allowYield = false; + value = this.parseGetterMethod(); + } + else if (token.type === 3 /* Identifier */ && !isAsync && token.value === 'set' && lookaheadPropertyKey) { + kind = 'set'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseSetterMethod(); + } + else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { + kind = 'init'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseGeneratorMethod(); + method = true; + } + else { + if (!key) { + this.throwUnexpectedToken(this.lookahead); + } + kind = 'init'; + if (this.match(':') && !isAsync) { + if (!computed && this.isPropertyKey(key, '__proto__')) { + if (hasProto.value) { + this.tolerateError(messages_1.Messages.DuplicateProtoProperty); + } + hasProto.value = true; + } + this.nextToken(); + value = this.inheritCoverGrammar(this.parseAssignmentExpression); + } + else if (this.match('(')) { + value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); + method = true; + } + else if (token.type === 3 /* Identifier */) { + var id = this.finalize(node, new Node.Identifier(token.value)); + if (this.match('=')) { + this.context.firstCoverInitializedNameError = this.lookahead; + this.nextToken(); + shorthand = true; + var init = this.isolateCoverGrammar(this.parseAssignmentExpression); + value = this.finalize(node, new Node.AssignmentPattern(id, init)); + } + else { + shorthand = true; + value = id; + } + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + } + return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand)); + }; + Parser.prototype.parseObjectInitializer = function () { + var node = this.createNode(); + this.expect('{'); + var properties = []; + var hasProto = { value: false }; + while (!this.match('}')) { + properties.push(this.parseObjectProperty(hasProto)); + if (!this.match('}')) { + this.expectCommaSeparator(); + } + } + this.expect('}'); + return this.finalize(node, new Node.ObjectExpression(properties)); + }; + // https://tc39.github.io/ecma262/#sec-template-literals + Parser.prototype.parseTemplateHead = function () { + assert_1.assert(this.lookahead.head, 'Template literal must start with a template head'); + var node = this.createNode(); + var token = this.nextToken(); + var raw = token.value; + var cooked = token.cooked; + return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); + }; + Parser.prototype.parseTemplateElement = function () { + if (this.lookahead.type !== 10 /* Template */) { + this.throwUnexpectedToken(); + } + var node = this.createNode(); + var token = this.nextToken(); + var raw = token.value; + var cooked = token.cooked; + return this.finalize(node, new Node.TemplateElement({ raw: raw, cooked: cooked }, token.tail)); + }; + Parser.prototype.parseTemplateLiteral = function () { + var node = this.createNode(); + var expressions = []; + var quasis = []; + var quasi = this.parseTemplateHead(); + quasis.push(quasi); + while (!quasi.tail) { + expressions.push(this.parseExpression()); + quasi = this.parseTemplateElement(); + quasis.push(quasi); + } + return this.finalize(node, new Node.TemplateLiteral(quasis, expressions)); + }; + // https://tc39.github.io/ecma262/#sec-grouping-operator + Parser.prototype.reinterpretExpressionAsPattern = function (expr) { + switch (expr.type) { + case syntax_1.Syntax.Identifier: + case syntax_1.Syntax.MemberExpression: + case syntax_1.Syntax.RestElement: + case syntax_1.Syntax.AssignmentPattern: + break; + case syntax_1.Syntax.SpreadElement: + expr.type = syntax_1.Syntax.RestElement; + this.reinterpretExpressionAsPattern(expr.argument); + break; + case syntax_1.Syntax.ArrayExpression: + expr.type = syntax_1.Syntax.ArrayPattern; + for (var i = 0; i < expr.elements.length; i++) { + if (expr.elements[i] !== null) { + this.reinterpretExpressionAsPattern(expr.elements[i]); + } + } + break; + case syntax_1.Syntax.ObjectExpression: + expr.type = syntax_1.Syntax.ObjectPattern; + for (var i = 0; i < expr.properties.length; i++) { + this.reinterpretExpressionAsPattern(expr.properties[i].value); + } + break; + case syntax_1.Syntax.AssignmentExpression: + expr.type = syntax_1.Syntax.AssignmentPattern; + delete expr.operator; + this.reinterpretExpressionAsPattern(expr.left); + break; + default: + // Allow other node type for tolerant parsing. + break; + } + }; + Parser.prototype.parseGroupExpression = function () { + var expr; + this.expect('('); + if (this.match(')')) { + this.nextToken(); + if (!this.match('=>')) { + this.expect('=>'); + } + expr = { + type: ArrowParameterPlaceHolder, + params: [], + async: false + }; + } + else { + var startToken = this.lookahead; + var params = []; + if (this.match('...')) { + expr = this.parseRestElement(params); + this.expect(')'); + if (!this.match('=>')) { + this.expect('=>'); + } + expr = { + type: ArrowParameterPlaceHolder, + params: [expr], + async: false + }; + } + else { + var arrow = false; + this.context.isBindingElement = true; + expr = this.inheritCoverGrammar(this.parseAssignmentExpression); + if (this.match(',')) { + var expressions = []; + this.context.isAssignmentTarget = false; + expressions.push(expr); + while (this.lookahead.type !== 2 /* EOF */) { + if (!this.match(',')) { + break; + } + this.nextToken(); + if (this.match(')')) { + this.nextToken(); + for (var i = 0; i < expressions.length; i++) { + this.reinterpretExpressionAsPattern(expressions[i]); + } + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: expressions, + async: false + }; + } + else if (this.match('...')) { + if (!this.context.isBindingElement) { + this.throwUnexpectedToken(this.lookahead); + } + expressions.push(this.parseRestElement(params)); + this.expect(')'); + if (!this.match('=>')) { + this.expect('=>'); + } + this.context.isBindingElement = false; + for (var i = 0; i < expressions.length; i++) { + this.reinterpretExpressionAsPattern(expressions[i]); + } + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: expressions, + async: false + }; + } + else { + expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression)); + } + if (arrow) { + break; + } + } + if (!arrow) { + expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); + } + } + if (!arrow) { + this.expect(')'); + if (this.match('=>')) { + if (expr.type === syntax_1.Syntax.Identifier && expr.name === 'yield') { + arrow = true; + expr = { + type: ArrowParameterPlaceHolder, + params: [expr], + async: false + }; + } + if (!arrow) { + if (!this.context.isBindingElement) { + this.throwUnexpectedToken(this.lookahead); + } + if (expr.type === syntax_1.Syntax.SequenceExpression) { + for (var i = 0; i < expr.expressions.length; i++) { + this.reinterpretExpressionAsPattern(expr.expressions[i]); + } + } + else { + this.reinterpretExpressionAsPattern(expr); + } + var parameters = (expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr]); + expr = { + type: ArrowParameterPlaceHolder, + params: parameters, + async: false + }; + } + } + this.context.isBindingElement = false; + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-left-hand-side-expressions + Parser.prototype.parseArguments = function () { + this.expect('('); + var args = []; + if (!this.match(')')) { + while (true) { + var expr = this.match('...') ? this.parseSpreadElement() : + this.isolateCoverGrammar(this.parseAssignmentExpression); + args.push(expr); + if (this.match(')')) { + break; + } + this.expectCommaSeparator(); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return args; + }; + Parser.prototype.isIdentifierName = function (token) { + return token.type === 3 /* Identifier */ || + token.type === 4 /* Keyword */ || + token.type === 1 /* BooleanLiteral */ || + token.type === 5 /* NullLiteral */; + }; + Parser.prototype.parseIdentifierName = function () { + var node = this.createNode(); + var token = this.nextToken(); + if (!this.isIdentifierName(token)) { + this.throwUnexpectedToken(token); + } + return this.finalize(node, new Node.Identifier(token.value)); + }; + Parser.prototype.parseNewExpression = function () { + var node = this.createNode(); + var id = this.parseIdentifierName(); + assert_1.assert(id.name === 'new', 'New expression must start with `new`'); + var expr; + if (this.match('.')) { + this.nextToken(); + if (this.lookahead.type === 3 /* Identifier */ && this.context.inFunctionBody && this.lookahead.value === 'target') { + var property = this.parseIdentifierName(); + expr = new Node.MetaProperty(id, property); + } + else { + this.throwUnexpectedToken(this.lookahead); + } + } + else { + var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression); + var args = this.match('(') ? this.parseArguments() : []; + expr = new Node.NewExpression(callee, args); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + return this.finalize(node, expr); + }; + Parser.prototype.parseAsyncArgument = function () { + var arg = this.parseAssignmentExpression(); + this.context.firstCoverInitializedNameError = null; + return arg; + }; + Parser.prototype.parseAsyncArguments = function () { + this.expect('('); + var args = []; + if (!this.match(')')) { + while (true) { + var expr = this.match('...') ? this.parseSpreadElement() : + this.isolateCoverGrammar(this.parseAsyncArgument); + args.push(expr); + if (this.match(')')) { + break; + } + this.expectCommaSeparator(); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return args; + }; + Parser.prototype.parseLeftHandSideExpressionAllowCall = function () { + var startToken = this.lookahead; + var maybeAsync = this.matchContextualKeyword('async'); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + var expr; + if (this.matchKeyword('super') && this.context.inFunctionBody) { + expr = this.createNode(); + this.nextToken(); + expr = this.finalize(expr, new Node.Super()); + if (!this.match('(') && !this.match('.') && !this.match('[')) { + this.throwUnexpectedToken(this.lookahead); + } + } + else { + expr = this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); + } + while (true) { + if (this.match('.')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('.'); + var property = this.parseIdentifierName(); + expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property)); + } + else if (this.match('(')) { + var asyncArrow = maybeAsync && (startToken.lineNumber === this.lookahead.lineNumber); + this.context.isBindingElement = false; + this.context.isAssignmentTarget = false; + var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments(); + expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args)); + if (asyncArrow && this.match('=>')) { + for (var i = 0; i < args.length; ++i) { + this.reinterpretExpressionAsPattern(args[i]); + } + expr = { + type: ArrowParameterPlaceHolder, + params: args, + async: true + }; + } + } + else if (this.match('[')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('['); + var property = this.isolateCoverGrammar(this.parseExpression); + this.expect(']'); + expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property)); + } + else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { + var quasi = this.parseTemplateLiteral(); + expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi)); + } + else { + break; + } + } + this.context.allowIn = previousAllowIn; + return expr; + }; + Parser.prototype.parseSuper = function () { + var node = this.createNode(); + this.expectKeyword('super'); + if (!this.match('[') && !this.match('.')) { + this.throwUnexpectedToken(this.lookahead); + } + return this.finalize(node, new Node.Super()); + }; + Parser.prototype.parseLeftHandSideExpression = function () { + assert_1.assert(this.context.allowIn, 'callee of new expression always allow in keyword.'); + var node = this.startNode(this.lookahead); + var expr = (this.matchKeyword('super') && this.context.inFunctionBody) ? this.parseSuper() : + this.inheritCoverGrammar(this.matchKeyword('new') ? this.parseNewExpression : this.parsePrimaryExpression); + while (true) { + if (this.match('[')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('['); + var property = this.isolateCoverGrammar(this.parseExpression); + this.expect(']'); + expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property)); + } + else if (this.match('.')) { + this.context.isBindingElement = false; + this.context.isAssignmentTarget = true; + this.expect('.'); + var property = this.parseIdentifierName(); + expr = this.finalize(node, new Node.StaticMemberExpression(expr, property)); + } + else if (this.lookahead.type === 10 /* Template */ && this.lookahead.head) { + var quasi = this.parseTemplateLiteral(); + expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi)); + } + else { + break; + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-update-expressions + Parser.prototype.parseUpdateExpression = function () { + var expr; + var startToken = this.lookahead; + if (this.match('++') || this.match('--')) { + var node = this.startNode(startToken); + var token = this.nextToken(); + expr = this.inheritCoverGrammar(this.parseUnaryExpression); + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { + this.tolerateError(messages_1.Messages.StrictLHSPrefix); + } + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + var prefix = true; + expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix)); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else { + expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + if (!this.hasLineTerminator && this.lookahead.type === 7 /* Punctuator */) { + if (this.match('++') || this.match('--')) { + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name)) { + this.tolerateError(messages_1.Messages.StrictLHSPostfix); + } + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var operator = this.nextToken().value; + var prefix = false; + expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix)); + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-unary-operators + Parser.prototype.parseAwaitExpression = function () { + var node = this.createNode(); + this.nextToken(); + var argument = this.parseUnaryExpression(); + return this.finalize(node, new Node.AwaitExpression(argument)); + }; + Parser.prototype.parseUnaryExpression = function () { + var expr; + if (this.match('+') || this.match('-') || this.match('~') || this.match('!') || + this.matchKeyword('delete') || this.matchKeyword('void') || this.matchKeyword('typeof')) { + var node = this.startNode(this.lookahead); + var token = this.nextToken(); + expr = this.inheritCoverGrammar(this.parseUnaryExpression); + expr = this.finalize(node, new Node.UnaryExpression(token.value, expr)); + if (this.context.strict && expr.operator === 'delete' && expr.argument.type === syntax_1.Syntax.Identifier) { + this.tolerateError(messages_1.Messages.StrictDelete); + } + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else if (this.context.await && this.matchContextualKeyword('await')) { + expr = this.parseAwaitExpression(); + } + else { + expr = this.parseUpdateExpression(); + } + return expr; + }; + Parser.prototype.parseExponentiationExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseUnaryExpression); + if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match('**')) { + this.nextToken(); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var left = expr; + var right = this.isolateCoverGrammar(this.parseExponentiationExpression); + expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression('**', left, right)); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-exp-operator + // https://tc39.github.io/ecma262/#sec-multiplicative-operators + // https://tc39.github.io/ecma262/#sec-additive-operators + // https://tc39.github.io/ecma262/#sec-bitwise-shift-operators + // https://tc39.github.io/ecma262/#sec-relational-operators + // https://tc39.github.io/ecma262/#sec-equality-operators + // https://tc39.github.io/ecma262/#sec-binary-bitwise-operators + // https://tc39.github.io/ecma262/#sec-binary-logical-operators + Parser.prototype.binaryPrecedence = function (token) { + var op = token.value; + var precedence; + if (token.type === 7 /* Punctuator */) { + precedence = this.operatorPrecedence[op] || 0; + } + else if (token.type === 4 /* Keyword */) { + precedence = (op === 'instanceof' || (this.context.allowIn && op === 'in')) ? 7 : 0; + } + else { + precedence = 0; + } + return precedence; + }; + Parser.prototype.parseBinaryExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseExponentiationExpression); + var token = this.lookahead; + var prec = this.binaryPrecedence(token); + if (prec > 0) { + this.nextToken(); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var markers = [startToken, this.lookahead]; + var left = expr; + var right = this.isolateCoverGrammar(this.parseExponentiationExpression); + var stack = [left, token.value, right]; + var precedences = [prec]; + while (true) { + prec = this.binaryPrecedence(this.lookahead); + if (prec <= 0) { + break; + } + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= precedences[precedences.length - 1])) { + right = stack.pop(); + var operator = stack.pop(); + precedences.pop(); + left = stack.pop(); + markers.pop(); + var node = this.startNode(markers[markers.length - 1]); + stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right))); + } + // Shift. + stack.push(this.nextToken().value); + precedences.push(prec); + markers.push(this.lookahead); + stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression)); + } + // Final reduce to clean-up the stack. + var i = stack.length - 1; + expr = stack[i]; + var lastMarker = markers.pop(); + while (i > 1) { + var marker = markers.pop(); + var lastLineStart = lastMarker && lastMarker.lineStart; + var node = this.startNode(marker, lastLineStart); + var operator = stack[i - 1]; + expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr)); + i -= 2; + lastMarker = marker; + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-conditional-operator + Parser.prototype.parseConditionalExpression = function () { + var startToken = this.lookahead; + var expr = this.inheritCoverGrammar(this.parseBinaryExpression); + if (this.match('?')) { + this.nextToken(); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.context.allowIn = previousAllowIn; + this.expect(':'); + var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression); + expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate)); + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-assignment-operators + Parser.prototype.checkPatternParam = function (options, param) { + switch (param.type) { + case syntax_1.Syntax.Identifier: + this.validateParam(options, param, param.name); + break; + case syntax_1.Syntax.RestElement: + this.checkPatternParam(options, param.argument); + break; + case syntax_1.Syntax.AssignmentPattern: + this.checkPatternParam(options, param.left); + break; + case syntax_1.Syntax.ArrayPattern: + for (var i = 0; i < param.elements.length; i++) { + if (param.elements[i] !== null) { + this.checkPatternParam(options, param.elements[i]); + } + } + break; + case syntax_1.Syntax.ObjectPattern: + for (var i = 0; i < param.properties.length; i++) { + this.checkPatternParam(options, param.properties[i].value); + } + break; + default: + break; + } + options.simple = options.simple && (param instanceof Node.Identifier); + }; + Parser.prototype.reinterpretAsCoverFormalsList = function (expr) { + var params = [expr]; + var options; + var asyncArrow = false; + switch (expr.type) { + case syntax_1.Syntax.Identifier: + break; + case ArrowParameterPlaceHolder: + params = expr.params; + asyncArrow = expr.async; + break; + default: + return null; + } + options = { + simple: true, + paramSet: {} + }; + for (var i = 0; i < params.length; ++i) { + var param = params[i]; + if (param.type === syntax_1.Syntax.AssignmentPattern) { + if (param.right.type === syntax_1.Syntax.YieldExpression) { + if (param.right.argument) { + this.throwUnexpectedToken(this.lookahead); + } + param.right.type = syntax_1.Syntax.Identifier; + param.right.name = 'yield'; + delete param.right.argument; + delete param.right.delegate; + } + } + else if (asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === 'await') { + this.throwUnexpectedToken(this.lookahead); + } + this.checkPatternParam(options, param); + params[i] = param; + } + if (this.context.strict || !this.context.allowYield) { + for (var i = 0; i < params.length; ++i) { + var param = params[i]; + if (param.type === syntax_1.Syntax.YieldExpression) { + this.throwUnexpectedToken(this.lookahead); + } + } + } + if (options.message === messages_1.Messages.StrictParamDupe) { + var token = this.context.strict ? options.stricted : options.firstRestricted; + this.throwUnexpectedToken(token, options.message); + } + return { + simple: options.simple, + params: params, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + }; + Parser.prototype.parseAssignmentExpression = function () { + var expr; + if (!this.context.allowYield && this.matchKeyword('yield')) { + expr = this.parseYieldExpression(); + } + else { + var startToken = this.lookahead; + var token = startToken; + expr = this.parseConditionalExpression(); + if (token.type === 3 /* Identifier */ && (token.lineNumber === this.lookahead.lineNumber) && token.value === 'async') { + if (this.lookahead.type === 3 /* Identifier */ || this.matchKeyword('yield')) { + var arg = this.parsePrimaryExpression(); + this.reinterpretExpressionAsPattern(arg); + expr = { + type: ArrowParameterPlaceHolder, + params: [arg], + async: true + }; + } + } + if (expr.type === ArrowParameterPlaceHolder || this.match('=>')) { + // https://tc39.github.io/ecma262/#sec-arrow-function-definitions + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + var isAsync = expr.async; + var list = this.reinterpretAsCoverFormalsList(expr); + if (list) { + if (this.hasLineTerminator) { + this.tolerateUnexpectedToken(this.lookahead); + } + this.context.firstCoverInitializedNameError = null; + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = list.simple; + var previousAllowYield = this.context.allowYield; + var previousAwait = this.context.await; + this.context.allowYield = true; + this.context.await = isAsync; + var node = this.startNode(startToken); + this.expect('=>'); + var body = void 0; + if (this.match('{')) { + var previousAllowIn = this.context.allowIn; + this.context.allowIn = true; + body = this.parseFunctionSourceElements(); + this.context.allowIn = previousAllowIn; + } + else { + body = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + var expression = body.type !== syntax_1.Syntax.BlockStatement; + if (this.context.strict && list.firstRestricted) { + this.throwUnexpectedToken(list.firstRestricted, list.message); + } + if (this.context.strict && list.stricted) { + this.tolerateUnexpectedToken(list.stricted, list.message); + } + expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) : + this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression)); + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.allowYield = previousAllowYield; + this.context.await = previousAwait; + } + } + else { + if (this.matchAssign()) { + if (!this.context.isAssignmentTarget) { + this.tolerateError(messages_1.Messages.InvalidLHSInAssignment); + } + if (this.context.strict && expr.type === syntax_1.Syntax.Identifier) { + var id = expr; + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment); + } + if (this.scanner.isStrictModeReservedWord(id.name)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + } + if (!this.match('=')) { + this.context.isAssignmentTarget = false; + this.context.isBindingElement = false; + } + else { + this.reinterpretExpressionAsPattern(expr); + } + token = this.nextToken(); + var operator = token.value; + var right = this.isolateCoverGrammar(this.parseAssignmentExpression); + expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right)); + this.context.firstCoverInitializedNameError = null; + } + } + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-comma-operator + Parser.prototype.parseExpression = function () { + var startToken = this.lookahead; + var expr = this.isolateCoverGrammar(this.parseAssignmentExpression); + if (this.match(',')) { + var expressions = []; + expressions.push(expr); + while (this.lookahead.type !== 2 /* EOF */) { + if (!this.match(',')) { + break; + } + this.nextToken(); + expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); + } + expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)); + } + return expr; + }; + // https://tc39.github.io/ecma262/#sec-block + Parser.prototype.parseStatementListItem = function () { + var statement; + this.context.isAssignmentTarget = true; + this.context.isBindingElement = true; + if (this.lookahead.type === 4 /* Keyword */) { + switch (this.lookahead.value) { + case 'export': + if (!this.context.isModule) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration); + } + statement = this.parseExportDeclaration(); + break; + case 'import': + if (!this.context.isModule) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration); + } + statement = this.parseImportDeclaration(); + break; + case 'const': + statement = this.parseLexicalDeclaration({ inFor: false }); + break; + case 'function': + statement = this.parseFunctionDeclaration(); + break; + case 'class': + statement = this.parseClassDeclaration(); + break; + case 'let': + statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: false }) : this.parseStatement(); + break; + default: + statement = this.parseStatement(); + break; + } + } + else { + statement = this.parseStatement(); + } + return statement; + }; + Parser.prototype.parseBlock = function () { + var node = this.createNode(); + this.expect('{'); + var block = []; + while (true) { + if (this.match('}')) { + break; + } + block.push(this.parseStatementListItem()); + } + this.expect('}'); + return this.finalize(node, new Node.BlockStatement(block)); + }; + // https://tc39.github.io/ecma262/#sec-let-and-const-declarations + Parser.prototype.parseLexicalBinding = function (kind, options) { + var node = this.createNode(); + var params = []; + var id = this.parsePattern(params, kind); + if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateError(messages_1.Messages.StrictVarName); + } + } + var init = null; + if (kind === 'const') { + if (!this.matchKeyword('in') && !this.matchContextualKeyword('of')) { + if (this.match('=')) { + this.nextToken(); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + else { + this.throwError(messages_1.Messages.DeclarationMissingInitializer, 'const'); + } + } + } + else if ((!options.inFor && id.type !== syntax_1.Syntax.Identifier) || this.match('=')) { + this.expect('='); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + return this.finalize(node, new Node.VariableDeclarator(id, init)); + }; + Parser.prototype.parseBindingList = function (kind, options) { + var list = [this.parseLexicalBinding(kind, options)]; + while (this.match(',')) { + this.nextToken(); + list.push(this.parseLexicalBinding(kind, options)); + } + return list; + }; + Parser.prototype.isLexicalDeclaration = function () { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.scanner.lex(); + this.scanner.restoreState(state); + return (next.type === 3 /* Identifier */) || + (next.type === 7 /* Punctuator */ && next.value === '[') || + (next.type === 7 /* Punctuator */ && next.value === '{') || + (next.type === 4 /* Keyword */ && next.value === 'let') || + (next.type === 4 /* Keyword */ && next.value === 'yield'); + }; + Parser.prototype.parseLexicalDeclaration = function (options) { + var node = this.createNode(); + var kind = this.nextToken().value; + assert_1.assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); + var declarations = this.parseBindingList(kind, options); + this.consumeSemicolon(); + return this.finalize(node, new Node.VariableDeclaration(declarations, kind)); + }; + // https://tc39.github.io/ecma262/#sec-destructuring-binding-patterns + Parser.prototype.parseBindingRestElement = function (params, kind) { + var node = this.createNode(); + this.expect('...'); + var arg = this.parsePattern(params, kind); + return this.finalize(node, new Node.RestElement(arg)); + }; + Parser.prototype.parseArrayPattern = function (params, kind) { + var node = this.createNode(); + this.expect('['); + var elements = []; + while (!this.match(']')) { + if (this.match(',')) { + this.nextToken(); + elements.push(null); + } + else { + if (this.match('...')) { + elements.push(this.parseBindingRestElement(params, kind)); + break; + } + else { + elements.push(this.parsePatternWithDefault(params, kind)); + } + if (!this.match(']')) { + this.expect(','); + } + } + } + this.expect(']'); + return this.finalize(node, new Node.ArrayPattern(elements)); + }; + Parser.prototype.parsePropertyPattern = function (params, kind) { + var node = this.createNode(); + var computed = false; + var shorthand = false; + var method = false; + var key; + var value; + if (this.lookahead.type === 3 /* Identifier */) { + var keyToken = this.lookahead; + key = this.parseVariableIdentifier(); + var init = this.finalize(node, new Node.Identifier(keyToken.value)); + if (this.match('=')) { + params.push(keyToken); + shorthand = true; + this.nextToken(); + var expr = this.parseAssignmentExpression(); + value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr)); + } + else if (!this.match(':')) { + params.push(keyToken); + shorthand = true; + value = init; + } + else { + this.expect(':'); + value = this.parsePatternWithDefault(params, kind); + } + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.expect(':'); + value = this.parsePatternWithDefault(params, kind); + } + return this.finalize(node, new Node.Property('init', key, computed, value, method, shorthand)); + }; + Parser.prototype.parseObjectPattern = function (params, kind) { + var node = this.createNode(); + var properties = []; + this.expect('{'); + while (!this.match('}')) { + properties.push(this.parsePropertyPattern(params, kind)); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + return this.finalize(node, new Node.ObjectPattern(properties)); + }; + Parser.prototype.parsePattern = function (params, kind) { + var pattern; + if (this.match('[')) { + pattern = this.parseArrayPattern(params, kind); + } + else if (this.match('{')) { + pattern = this.parseObjectPattern(params, kind); + } + else { + if (this.matchKeyword('let') && (kind === 'const' || kind === 'let')) { + this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding); + } + params.push(this.lookahead); + pattern = this.parseVariableIdentifier(kind); + } + return pattern; + }; + Parser.prototype.parsePatternWithDefault = function (params, kind) { + var startToken = this.lookahead; + var pattern = this.parsePattern(params, kind); + if (this.match('=')) { + this.nextToken(); + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var right = this.isolateCoverGrammar(this.parseAssignmentExpression); + this.context.allowYield = previousAllowYield; + pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right)); + } + return pattern; + }; + // https://tc39.github.io/ecma262/#sec-variable-statement + Parser.prototype.parseVariableIdentifier = function (kind) { + var node = this.createNode(); + var token = this.nextToken(); + if (token.type === 4 /* Keyword */ && token.value === 'yield') { + if (this.context.strict) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + else if (!this.context.allowYield) { + this.throwUnexpectedToken(token); + } + } + else if (token.type !== 3 /* Identifier */) { + if (this.context.strict && token.type === 4 /* Keyword */ && this.scanner.isStrictModeReservedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord); + } + else { + if (this.context.strict || token.value !== 'let' || kind !== 'var') { + this.throwUnexpectedToken(token); + } + } + } + else if ((this.context.isModule || this.context.await) && token.type === 3 /* Identifier */ && token.value === 'await') { + this.tolerateUnexpectedToken(token); + } + return this.finalize(node, new Node.Identifier(token.value)); + }; + Parser.prototype.parseVariableDeclaration = function (options) { + var node = this.createNode(); + var params = []; + var id = this.parsePattern(params, 'var'); + if (this.context.strict && id.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(id.name)) { + this.tolerateError(messages_1.Messages.StrictVarName); + } + } + var init = null; + if (this.match('=')) { + this.nextToken(); + init = this.isolateCoverGrammar(this.parseAssignmentExpression); + } + else if (id.type !== syntax_1.Syntax.Identifier && !options.inFor) { + this.expect('='); + } + return this.finalize(node, new Node.VariableDeclarator(id, init)); + }; + Parser.prototype.parseVariableDeclarationList = function (options) { + var opt = { inFor: options.inFor }; + var list = []; + list.push(this.parseVariableDeclaration(opt)); + while (this.match(',')) { + this.nextToken(); + list.push(this.parseVariableDeclaration(opt)); + } + return list; + }; + Parser.prototype.parseVariableStatement = function () { + var node = this.createNode(); + this.expectKeyword('var'); + var declarations = this.parseVariableDeclarationList({ inFor: false }); + this.consumeSemicolon(); + return this.finalize(node, new Node.VariableDeclaration(declarations, 'var')); + }; + // https://tc39.github.io/ecma262/#sec-empty-statement + Parser.prototype.parseEmptyStatement = function () { + var node = this.createNode(); + this.expect(';'); + return this.finalize(node, new Node.EmptyStatement()); + }; + // https://tc39.github.io/ecma262/#sec-expression-statement + Parser.prototype.parseExpressionStatement = function () { + var node = this.createNode(); + var expr = this.parseExpression(); + this.consumeSemicolon(); + return this.finalize(node, new Node.ExpressionStatement(expr)); + }; + // https://tc39.github.io/ecma262/#sec-if-statement + Parser.prototype.parseIfClause = function () { + if (this.context.strict && this.matchKeyword('function')) { + this.tolerateError(messages_1.Messages.StrictFunction); + } + return this.parseStatement(); + }; + Parser.prototype.parseIfStatement = function () { + var node = this.createNode(); + var consequent; + var alternate = null; + this.expectKeyword('if'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + consequent = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + consequent = this.parseIfClause(); + if (this.matchKeyword('else')) { + this.nextToken(); + alternate = this.parseIfClause(); + } + } + return this.finalize(node, new Node.IfStatement(test, consequent, alternate)); + }; + // https://tc39.github.io/ecma262/#sec-do-while-statement + Parser.prototype.parseDoWhileStatement = function () { + var node = this.createNode(); + this.expectKeyword('do'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + var body = this.parseStatement(); + this.context.inIteration = previousInIteration; + this.expectKeyword('while'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + } + else { + this.expect(')'); + if (this.match(';')) { + this.nextToken(); + } + } + return this.finalize(node, new Node.DoWhileStatement(body, test)); + }; + // https://tc39.github.io/ecma262/#sec-while-statement + Parser.prototype.parseWhileStatement = function () { + var node = this.createNode(); + var body; + this.expectKeyword('while'); + this.expect('('); + var test = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + body = this.parseStatement(); + this.context.inIteration = previousInIteration; + } + return this.finalize(node, new Node.WhileStatement(test, body)); + }; + // https://tc39.github.io/ecma262/#sec-for-statement + // https://tc39.github.io/ecma262/#sec-for-in-and-for-of-statements + Parser.prototype.parseForStatement = function () { + var init = null; + var test = null; + var update = null; + var forIn = true; + var left, right; + var node = this.createNode(); + this.expectKeyword('for'); + this.expect('('); + if (this.match(';')) { + this.nextToken(); + } + else { + if (this.matchKeyword('var')) { + init = this.createNode(); + this.nextToken(); + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + var declarations = this.parseVariableDeclarationList({ inFor: true }); + this.context.allowIn = previousAllowIn; + if (declarations.length === 1 && this.matchKeyword('in')) { + var decl = declarations[0]; + if (decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict)) { + this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, 'for-in'); + } + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.nextToken(); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + init = this.finalize(init, new Node.VariableDeclaration(declarations, 'var')); + this.expect(';'); + } + } + else if (this.matchKeyword('const') || this.matchKeyword('let')) { + init = this.createNode(); + var kind = this.nextToken().value; + if (!this.context.strict && this.lookahead.value === 'in') { + init = this.finalize(init, new Node.Identifier(kind)); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else { + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + var declarations = this.parseBindingList(kind, { inFor: true }); + this.context.allowIn = previousAllowIn; + if (declarations.length === 1 && declarations[0].init === null && this.matchKeyword('in')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + this.nextToken(); + left = init; + right = this.parseExpression(); + init = null; + } + else if (declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword('of')) { + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + this.nextToken(); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + this.consumeSemicolon(); + init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)); + } + } + } + else { + var initStartToken = this.lookahead; + var previousAllowIn = this.context.allowIn; + this.context.allowIn = false; + init = this.inheritCoverGrammar(this.parseAssignmentExpression); + this.context.allowIn = previousAllowIn; + if (this.matchKeyword('in')) { + if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { + this.tolerateError(messages_1.Messages.InvalidLHSInForIn); + } + this.nextToken(); + this.reinterpretExpressionAsPattern(init); + left = init; + right = this.parseExpression(); + init = null; + } + else if (this.matchContextualKeyword('of')) { + if (!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) { + this.tolerateError(messages_1.Messages.InvalidLHSInForLoop); + } + this.nextToken(); + this.reinterpretExpressionAsPattern(init); + left = init; + right = this.parseAssignmentExpression(); + init = null; + forIn = false; + } + else { + if (this.match(',')) { + var initSeq = [init]; + while (this.match(',')) { + this.nextToken(); + initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression)); + } + init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq)); + } + this.expect(';'); + } + } + } + if (typeof left === 'undefined') { + if (!this.match(';')) { + test = this.parseExpression(); + } + this.expect(';'); + if (!this.match(')')) { + update = this.parseExpression(); + } + } + var body; + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + var previousInIteration = this.context.inIteration; + this.context.inIteration = true; + body = this.isolateCoverGrammar(this.parseStatement); + this.context.inIteration = previousInIteration; + } + return (typeof left === 'undefined') ? + this.finalize(node, new Node.ForStatement(init, test, update, body)) : + forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : + this.finalize(node, new Node.ForOfStatement(left, right, body)); + }; + // https://tc39.github.io/ecma262/#sec-continue-statement + Parser.prototype.parseContinueStatement = function () { + var node = this.createNode(); + this.expectKeyword('continue'); + var label = null; + if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { + var id = this.parseVariableIdentifier(); + label = id; + var key = '$' + id.name; + if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.UnknownLabel, id.name); + } + } + this.consumeSemicolon(); + if (label === null && !this.context.inIteration) { + this.throwError(messages_1.Messages.IllegalContinue); + } + return this.finalize(node, new Node.ContinueStatement(label)); + }; + // https://tc39.github.io/ecma262/#sec-break-statement + Parser.prototype.parseBreakStatement = function () { + var node = this.createNode(); + this.expectKeyword('break'); + var label = null; + if (this.lookahead.type === 3 /* Identifier */ && !this.hasLineTerminator) { + var id = this.parseVariableIdentifier(); + var key = '$' + id.name; + if (!Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.UnknownLabel, id.name); + } + label = id; + } + this.consumeSemicolon(); + if (label === null && !this.context.inIteration && !this.context.inSwitch) { + this.throwError(messages_1.Messages.IllegalBreak); + } + return this.finalize(node, new Node.BreakStatement(label)); + }; + // https://tc39.github.io/ecma262/#sec-return-statement + Parser.prototype.parseReturnStatement = function () { + if (!this.context.inFunctionBody) { + this.tolerateError(messages_1.Messages.IllegalReturn); + } + var node = this.createNode(); + this.expectKeyword('return'); + var hasArgument = (!this.match(';') && !this.match('}') && + !this.hasLineTerminator && this.lookahead.type !== 2 /* EOF */) || + this.lookahead.type === 8 /* StringLiteral */ || + this.lookahead.type === 10 /* Template */; + var argument = hasArgument ? this.parseExpression() : null; + this.consumeSemicolon(); + return this.finalize(node, new Node.ReturnStatement(argument)); + }; + // https://tc39.github.io/ecma262/#sec-with-statement + Parser.prototype.parseWithStatement = function () { + if (this.context.strict) { + this.tolerateError(messages_1.Messages.StrictModeWith); + } + var node = this.createNode(); + var body; + this.expectKeyword('with'); + this.expect('('); + var object = this.parseExpression(); + if (!this.match(')') && this.config.tolerant) { + this.tolerateUnexpectedToken(this.nextToken()); + body = this.finalize(this.createNode(), new Node.EmptyStatement()); + } + else { + this.expect(')'); + body = this.parseStatement(); + } + return this.finalize(node, new Node.WithStatement(object, body)); + }; + // https://tc39.github.io/ecma262/#sec-switch-statement + Parser.prototype.parseSwitchCase = function () { + var node = this.createNode(); + var test; + if (this.matchKeyword('default')) { + this.nextToken(); + test = null; + } + else { + this.expectKeyword('case'); + test = this.parseExpression(); + } + this.expect(':'); + var consequent = []; + while (true) { + if (this.match('}') || this.matchKeyword('default') || this.matchKeyword('case')) { + break; + } + consequent.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.SwitchCase(test, consequent)); + }; + Parser.prototype.parseSwitchStatement = function () { + var node = this.createNode(); + this.expectKeyword('switch'); + this.expect('('); + var discriminant = this.parseExpression(); + this.expect(')'); + var previousInSwitch = this.context.inSwitch; + this.context.inSwitch = true; + var cases = []; + var defaultFound = false; + this.expect('{'); + while (true) { + if (this.match('}')) { + break; + } + var clause = this.parseSwitchCase(); + if (clause.test === null) { + if (defaultFound) { + this.throwError(messages_1.Messages.MultipleDefaultsInSwitch); + } + defaultFound = true; + } + cases.push(clause); + } + this.expect('}'); + this.context.inSwitch = previousInSwitch; + return this.finalize(node, new Node.SwitchStatement(discriminant, cases)); + }; + // https://tc39.github.io/ecma262/#sec-labelled-statements + Parser.prototype.parseLabelledStatement = function () { + var node = this.createNode(); + var expr = this.parseExpression(); + var statement; + if ((expr.type === syntax_1.Syntax.Identifier) && this.match(':')) { + this.nextToken(); + var id = expr; + var key = '$' + id.name; + if (Object.prototype.hasOwnProperty.call(this.context.labelSet, key)) { + this.throwError(messages_1.Messages.Redeclaration, 'Label', id.name); + } + this.context.labelSet[key] = true; + var body = void 0; + if (this.matchKeyword('class')) { + this.tolerateUnexpectedToken(this.lookahead); + body = this.parseClassDeclaration(); + } + else if (this.matchKeyword('function')) { + var token = this.lookahead; + var declaration = this.parseFunctionDeclaration(); + if (this.context.strict) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction); + } + else if (declaration.generator) { + this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext); + } + body = declaration; + } + else { + body = this.parseStatement(); + } + delete this.context.labelSet[key]; + statement = new Node.LabeledStatement(id, body); + } + else { + this.consumeSemicolon(); + statement = new Node.ExpressionStatement(expr); + } + return this.finalize(node, statement); + }; + // https://tc39.github.io/ecma262/#sec-throw-statement + Parser.prototype.parseThrowStatement = function () { + var node = this.createNode(); + this.expectKeyword('throw'); + if (this.hasLineTerminator) { + this.throwError(messages_1.Messages.NewlineAfterThrow); + } + var argument = this.parseExpression(); + this.consumeSemicolon(); + return this.finalize(node, new Node.ThrowStatement(argument)); + }; + // https://tc39.github.io/ecma262/#sec-try-statement + Parser.prototype.parseCatchClause = function () { + var node = this.createNode(); + this.expectKeyword('catch'); + this.expect('('); + if (this.match(')')) { + this.throwUnexpectedToken(this.lookahead); + } + var params = []; + var param = this.parsePattern(params); + var paramMap = {}; + for (var i = 0; i < params.length; i++) { + var key = '$' + params[i].value; + if (Object.prototype.hasOwnProperty.call(paramMap, key)) { + this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value); + } + paramMap[key] = true; + } + if (this.context.strict && param.type === syntax_1.Syntax.Identifier) { + if (this.scanner.isRestrictedWord(param.name)) { + this.tolerateError(messages_1.Messages.StrictCatchVariable); + } + } + this.expect(')'); + var body = this.parseBlock(); + return this.finalize(node, new Node.CatchClause(param, body)); + }; + Parser.prototype.parseFinallyClause = function () { + this.expectKeyword('finally'); + return this.parseBlock(); + }; + Parser.prototype.parseTryStatement = function () { + var node = this.createNode(); + this.expectKeyword('try'); + var block = this.parseBlock(); + var handler = this.matchKeyword('catch') ? this.parseCatchClause() : null; + var finalizer = this.matchKeyword('finally') ? this.parseFinallyClause() : null; + if (!handler && !finalizer) { + this.throwError(messages_1.Messages.NoCatchOrFinally); + } + return this.finalize(node, new Node.TryStatement(block, handler, finalizer)); + }; + // https://tc39.github.io/ecma262/#sec-debugger-statement + Parser.prototype.parseDebuggerStatement = function () { + var node = this.createNode(); + this.expectKeyword('debugger'); + this.consumeSemicolon(); + return this.finalize(node, new Node.DebuggerStatement()); + }; + // https://tc39.github.io/ecma262/#sec-ecmascript-language-statements-and-declarations + Parser.prototype.parseStatement = function () { + var statement; + switch (this.lookahead.type) { + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 6 /* NumericLiteral */: + case 8 /* StringLiteral */: + case 10 /* Template */: + case 9 /* RegularExpression */: + statement = this.parseExpressionStatement(); + break; + case 7 /* Punctuator */: + var value = this.lookahead.value; + if (value === '{') { + statement = this.parseBlock(); + } + else if (value === '(') { + statement = this.parseExpressionStatement(); + } + else if (value === ';') { + statement = this.parseEmptyStatement(); + } + else { + statement = this.parseExpressionStatement(); + } + break; + case 3 /* Identifier */: + statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement(); + break; + case 4 /* Keyword */: + switch (this.lookahead.value) { + case 'break': + statement = this.parseBreakStatement(); + break; + case 'continue': + statement = this.parseContinueStatement(); + break; + case 'debugger': + statement = this.parseDebuggerStatement(); + break; + case 'do': + statement = this.parseDoWhileStatement(); + break; + case 'for': + statement = this.parseForStatement(); + break; + case 'function': + statement = this.parseFunctionDeclaration(); + break; + case 'if': + statement = this.parseIfStatement(); + break; + case 'return': + statement = this.parseReturnStatement(); + break; + case 'switch': + statement = this.parseSwitchStatement(); + break; + case 'throw': + statement = this.parseThrowStatement(); + break; + case 'try': + statement = this.parseTryStatement(); + break; + case 'var': + statement = this.parseVariableStatement(); + break; + case 'while': + statement = this.parseWhileStatement(); + break; + case 'with': + statement = this.parseWithStatement(); + break; + default: + statement = this.parseExpressionStatement(); + break; + } + break; + default: + statement = this.throwUnexpectedToken(this.lookahead); + } + return statement; + }; + // https://tc39.github.io/ecma262/#sec-function-definitions + Parser.prototype.parseFunctionSourceElements = function () { + var node = this.createNode(); + this.expect('{'); + var body = this.parseDirectivePrologues(); + var previousLabelSet = this.context.labelSet; + var previousInIteration = this.context.inIteration; + var previousInSwitch = this.context.inSwitch; + var previousInFunctionBody = this.context.inFunctionBody; + this.context.labelSet = {}; + this.context.inIteration = false; + this.context.inSwitch = false; + this.context.inFunctionBody = true; + while (this.lookahead.type !== 2 /* EOF */) { + if (this.match('}')) { + break; + } + body.push(this.parseStatementListItem()); + } + this.expect('}'); + this.context.labelSet = previousLabelSet; + this.context.inIteration = previousInIteration; + this.context.inSwitch = previousInSwitch; + this.context.inFunctionBody = previousInFunctionBody; + return this.finalize(node, new Node.BlockStatement(body)); + }; + Parser.prototype.validateParam = function (options, param, name) { + var key = '$' + name; + if (this.context.strict) { + if (this.scanner.isRestrictedWord(name)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamName; + } + if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamDupe; + } + } + else if (!options.firstRestricted) { + if (this.scanner.isRestrictedWord(name)) { + options.firstRestricted = param; + options.message = messages_1.Messages.StrictParamName; + } + else if (this.scanner.isStrictModeReservedWord(name)) { + options.firstRestricted = param; + options.message = messages_1.Messages.StrictReservedWord; + } + else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { + options.stricted = param; + options.message = messages_1.Messages.StrictParamDupe; + } + } + /* istanbul ignore next */ + if (typeof Object.defineProperty === 'function') { + Object.defineProperty(options.paramSet, key, { value: true, enumerable: true, writable: true, configurable: true }); + } + else { + options.paramSet[key] = true; + } + }; + Parser.prototype.parseRestElement = function (params) { + var node = this.createNode(); + this.expect('...'); + var arg = this.parsePattern(params); + if (this.match('=')) { + this.throwError(messages_1.Messages.DefaultRestParameter); + } + if (!this.match(')')) { + this.throwError(messages_1.Messages.ParameterAfterRestParameter); + } + return this.finalize(node, new Node.RestElement(arg)); + }; + Parser.prototype.parseFormalParameter = function (options) { + var params = []; + var param = this.match('...') ? this.parseRestElement(params) : this.parsePatternWithDefault(params); + for (var i = 0; i < params.length; i++) { + this.validateParam(options, params[i], params[i].value); + } + options.simple = options.simple && (param instanceof Node.Identifier); + options.params.push(param); + }; + Parser.prototype.parseFormalParameters = function (firstRestricted) { + var options; + options = { + simple: true, + params: [], + firstRestricted: firstRestricted + }; + this.expect('('); + if (!this.match(')')) { + options.paramSet = {}; + while (this.lookahead.type !== 2 /* EOF */) { + this.parseFormalParameter(options); + if (this.match(')')) { + break; + } + this.expect(','); + if (this.match(')')) { + break; + } + } + } + this.expect(')'); + return { + simple: options.simple, + params: options.params, + stricted: options.stricted, + firstRestricted: options.firstRestricted, + message: options.message + }; + }; + Parser.prototype.matchAsyncFunction = function () { + var match = this.matchContextualKeyword('async'); + if (match) { + var state = this.scanner.saveState(); + this.scanner.scanComments(); + var next = this.scanner.lex(); + this.scanner.restoreState(state); + match = (state.lineNumber === next.lineNumber) && (next.type === 4 /* Keyword */) && (next.value === 'function'); + } + return match; + }; + Parser.prototype.parseFunctionDeclaration = function (identifierIsOptional) { + var node = this.createNode(); + var isAsync = this.matchContextualKeyword('async'); + if (isAsync) { + this.nextToken(); + } + this.expectKeyword('function'); + var isGenerator = isAsync ? false : this.match('*'); + if (isGenerator) { + this.nextToken(); + } + var message; + var id = null; + var firstRestricted = null; + if (!identifierIsOptional || !this.match('(')) { + var token = this.lookahead; + id = this.parseVariableIdentifier(); + if (this.context.strict) { + if (this.scanner.isRestrictedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); + } + } + else { + if (this.scanner.isRestrictedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictFunctionName; + } + else if (this.scanner.isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictReservedWord; + } + } + } + var previousAllowAwait = this.context.await; + var previousAllowYield = this.context.allowYield; + this.context.await = isAsync; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(firstRestricted); + var params = formalParameters.params; + var stricted = formalParameters.stricted; + firstRestricted = formalParameters.firstRestricted; + if (formalParameters.message) { + message = formalParameters.message; + } + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = formalParameters.simple; + var body = this.parseFunctionSourceElements(); + if (this.context.strict && firstRestricted) { + this.throwUnexpectedToken(firstRestricted, message); + } + if (this.context.strict && stricted) { + this.tolerateUnexpectedToken(stricted, message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.await = previousAllowAwait; + this.context.allowYield = previousAllowYield; + return isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) : + this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator)); + }; + Parser.prototype.parseFunctionExpression = function () { + var node = this.createNode(); + var isAsync = this.matchContextualKeyword('async'); + if (isAsync) { + this.nextToken(); + } + this.expectKeyword('function'); + var isGenerator = isAsync ? false : this.match('*'); + if (isGenerator) { + this.nextToken(); + } + var message; + var id = null; + var firstRestricted; + var previousAllowAwait = this.context.await; + var previousAllowYield = this.context.allowYield; + this.context.await = isAsync; + this.context.allowYield = !isGenerator; + if (!this.match('(')) { + var token = this.lookahead; + id = (!this.context.strict && !isGenerator && this.matchKeyword('yield')) ? this.parseIdentifierName() : this.parseVariableIdentifier(); + if (this.context.strict) { + if (this.scanner.isRestrictedWord(token.value)) { + this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName); + } + } + else { + if (this.scanner.isRestrictedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictFunctionName; + } + else if (this.scanner.isStrictModeReservedWord(token.value)) { + firstRestricted = token; + message = messages_1.Messages.StrictReservedWord; + } + } + } + var formalParameters = this.parseFormalParameters(firstRestricted); + var params = formalParameters.params; + var stricted = formalParameters.stricted; + firstRestricted = formalParameters.firstRestricted; + if (formalParameters.message) { + message = formalParameters.message; + } + var previousStrict = this.context.strict; + var previousAllowStrictDirective = this.context.allowStrictDirective; + this.context.allowStrictDirective = formalParameters.simple; + var body = this.parseFunctionSourceElements(); + if (this.context.strict && firstRestricted) { + this.throwUnexpectedToken(firstRestricted, message); + } + if (this.context.strict && stricted) { + this.tolerateUnexpectedToken(stricted, message); + } + this.context.strict = previousStrict; + this.context.allowStrictDirective = previousAllowStrictDirective; + this.context.await = previousAllowAwait; + this.context.allowYield = previousAllowYield; + return isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) : + this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator)); + }; + // https://tc39.github.io/ecma262/#sec-directive-prologues-and-the-use-strict-directive + Parser.prototype.parseDirective = function () { + var token = this.lookahead; + var node = this.createNode(); + var expr = this.parseExpression(); + var directive = (expr.type === syntax_1.Syntax.Literal) ? this.getTokenRaw(token).slice(1, -1) : null; + this.consumeSemicolon(); + return this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr)); + }; + Parser.prototype.parseDirectivePrologues = function () { + var firstRestricted = null; + var body = []; + while (true) { + var token = this.lookahead; + if (token.type !== 8 /* StringLiteral */) { + break; + } + var statement = this.parseDirective(); + body.push(statement); + var directive = statement.directive; + if (typeof directive !== 'string') { + break; + } + if (directive === 'use strict') { + this.context.strict = true; + if (firstRestricted) { + this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral); + } + if (!this.context.allowStrictDirective) { + this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective); + } + } + else { + if (!firstRestricted && token.octal) { + firstRestricted = token; + } + } + } + return body; + }; + // https://tc39.github.io/ecma262/#sec-method-definitions + Parser.prototype.qualifiedPropertyName = function (token) { + switch (token.type) { + case 3 /* Identifier */: + case 8 /* StringLiteral */: + case 1 /* BooleanLiteral */: + case 5 /* NullLiteral */: + case 6 /* NumericLiteral */: + case 4 /* Keyword */: + return true; + case 7 /* Punctuator */: + return token.value === '['; + default: + break; + } + return false; + }; + Parser.prototype.parseGetterMethod = function () { + var node = this.createNode(); + var isGenerator = false; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(); + if (formalParameters.params.length > 0) { + this.tolerateError(messages_1.Messages.BadGetterArity); + } + var method = this.parsePropertyMethod(formalParameters); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); + }; + Parser.prototype.parseSetterMethod = function () { + var node = this.createNode(); + var isGenerator = false; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = !isGenerator; + var formalParameters = this.parseFormalParameters(); + if (formalParameters.params.length !== 1) { + this.tolerateError(messages_1.Messages.BadSetterArity); + } + else if (formalParameters.params[0] instanceof Node.RestElement) { + this.tolerateError(messages_1.Messages.BadSetterRestParameter); + } + var method = this.parsePropertyMethod(formalParameters); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator)); + }; + Parser.prototype.parseGeneratorMethod = function () { + var node = this.createNode(); + var isGenerator = true; + var previousAllowYield = this.context.allowYield; + this.context.allowYield = true; + var params = this.parseFormalParameters(); + this.context.allowYield = false; + var method = this.parsePropertyMethod(params); + this.context.allowYield = previousAllowYield; + return this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator)); + }; + // https://tc39.github.io/ecma262/#sec-generator-function-definitions + Parser.prototype.isStartOfExpression = function () { + var start = true; + var value = this.lookahead.value; + switch (this.lookahead.type) { + case 7 /* Punctuator */: + start = (value === '[') || (value === '(') || (value === '{') || + (value === '+') || (value === '-') || + (value === '!') || (value === '~') || + (value === '++') || (value === '--') || + (value === '/') || (value === '/='); // regular expression literal + break; + case 4 /* Keyword */: + start = (value === 'class') || (value === 'delete') || + (value === 'function') || (value === 'let') || (value === 'new') || + (value === 'super') || (value === 'this') || (value === 'typeof') || + (value === 'void') || (value === 'yield'); + break; + default: + break; + } + return start; + }; + Parser.prototype.parseYieldExpression = function () { + var node = this.createNode(); + this.expectKeyword('yield'); + var argument = null; + var delegate = false; + if (!this.hasLineTerminator) { + var previousAllowYield = this.context.allowYield; + this.context.allowYield = false; + delegate = this.match('*'); + if (delegate) { + this.nextToken(); + argument = this.parseAssignmentExpression(); + } + else if (this.isStartOfExpression()) { + argument = this.parseAssignmentExpression(); + } + this.context.allowYield = previousAllowYield; + } + return this.finalize(node, new Node.YieldExpression(argument, delegate)); + }; + // https://tc39.github.io/ecma262/#sec-class-definitions + Parser.prototype.parseClassElement = function (hasConstructor) { + var token = this.lookahead; + var node = this.createNode(); + var kind = ''; + var key = null; + var value = null; + var computed = false; + var method = false; + var isStatic = false; + var isAsync = false; + if (this.match('*')) { + this.nextToken(); + } + else { + computed = this.match('['); + key = this.parseObjectPropertyKey(); + var id = key; + if (id.name === 'static' && (this.qualifiedPropertyName(this.lookahead) || this.match('*'))) { + token = this.lookahead; + isStatic = true; + computed = this.match('['); + if (this.match('*')) { + this.nextToken(); + } + else { + key = this.parseObjectPropertyKey(); + } + } + if ((token.type === 3 /* Identifier */) && !this.hasLineTerminator && (token.value === 'async')) { + var punctuator = this.lookahead.value; + if (punctuator !== ':' && punctuator !== '(' && punctuator !== '*') { + isAsync = true; + token = this.lookahead; + key = this.parseObjectPropertyKey(); + if (token.type === 3 /* Identifier */ && token.value === 'constructor') { + this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync); + } + } + } + } + var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead); + if (token.type === 3 /* Identifier */) { + if (token.value === 'get' && lookaheadPropertyKey) { + kind = 'get'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + this.context.allowYield = false; + value = this.parseGetterMethod(); + } + else if (token.value === 'set' && lookaheadPropertyKey) { + kind = 'set'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseSetterMethod(); + } + } + else if (token.type === 7 /* Punctuator */ && token.value === '*' && lookaheadPropertyKey) { + kind = 'init'; + computed = this.match('['); + key = this.parseObjectPropertyKey(); + value = this.parseGeneratorMethod(); + method = true; + } + if (!kind && key && this.match('(')) { + kind = 'init'; + value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(); + method = true; + } + if (!kind) { + this.throwUnexpectedToken(this.lookahead); + } + if (kind === 'init') { + kind = 'method'; + } + if (!computed) { + if (isStatic && this.isPropertyKey(key, 'prototype')) { + this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype); + } + if (!isStatic && this.isPropertyKey(key, 'constructor')) { + if (kind !== 'method' || !method || (value && value.generator)) { + this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod); + } + if (hasConstructor.value) { + this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor); + } + else { + hasConstructor.value = true; + } + kind = 'constructor'; + } + } + return this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic)); + }; + Parser.prototype.parseClassElementList = function () { + var body = []; + var hasConstructor = { value: false }; + this.expect('{'); + while (!this.match('}')) { + if (this.match(';')) { + this.nextToken(); + } + else { + body.push(this.parseClassElement(hasConstructor)); + } + } + this.expect('}'); + return body; + }; + Parser.prototype.parseClassBody = function () { + var node = this.createNode(); + var elementList = this.parseClassElementList(); + return this.finalize(node, new Node.ClassBody(elementList)); + }; + Parser.prototype.parseClassDeclaration = function (identifierIsOptional) { + var node = this.createNode(); + var previousStrict = this.context.strict; + this.context.strict = true; + this.expectKeyword('class'); + var id = (identifierIsOptional && (this.lookahead.type !== 3 /* Identifier */)) ? null : this.parseVariableIdentifier(); + var superClass = null; + if (this.matchKeyword('extends')) { + this.nextToken(); + superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + } + var classBody = this.parseClassBody(); + this.context.strict = previousStrict; + return this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody)); + }; + Parser.prototype.parseClassExpression = function () { + var node = this.createNode(); + var previousStrict = this.context.strict; + this.context.strict = true; + this.expectKeyword('class'); + var id = (this.lookahead.type === 3 /* Identifier */) ? this.parseVariableIdentifier() : null; + var superClass = null; + if (this.matchKeyword('extends')) { + this.nextToken(); + superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall); + } + var classBody = this.parseClassBody(); + this.context.strict = previousStrict; + return this.finalize(node, new Node.ClassExpression(id, superClass, classBody)); + }; + // https://tc39.github.io/ecma262/#sec-scripts + // https://tc39.github.io/ecma262/#sec-modules + Parser.prototype.parseModule = function () { + this.context.strict = true; + this.context.isModule = true; + this.scanner.isModule = true; + var node = this.createNode(); + var body = this.parseDirectivePrologues(); + while (this.lookahead.type !== 2 /* EOF */) { + body.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.Module(body)); + }; + Parser.prototype.parseScript = function () { + var node = this.createNode(); + var body = this.parseDirectivePrologues(); + while (this.lookahead.type !== 2 /* EOF */) { + body.push(this.parseStatementListItem()); + } + return this.finalize(node, new Node.Script(body)); + }; + // https://tc39.github.io/ecma262/#sec-imports + Parser.prototype.parseModuleSpecifier = function () { + var node = this.createNode(); + if (this.lookahead.type !== 8 /* StringLiteral */) { + this.throwError(messages_1.Messages.InvalidModuleSpecifier); + } + var token = this.nextToken(); + var raw = this.getTokenRaw(token); + return this.finalize(node, new Node.Literal(token.value, raw)); + }; + // import {} ...; + Parser.prototype.parseImportSpecifier = function () { + var node = this.createNode(); + var imported; + var local; + if (this.lookahead.type === 3 /* Identifier */) { + imported = this.parseVariableIdentifier(); + local = imported; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + local = this.parseVariableIdentifier(); + } + } + else { + imported = this.parseIdentifierName(); + local = imported; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + local = this.parseVariableIdentifier(); + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + } + return this.finalize(node, new Node.ImportSpecifier(local, imported)); + }; + // {foo, bar as bas} + Parser.prototype.parseNamedImports = function () { + this.expect('{'); + var specifiers = []; + while (!this.match('}')) { + specifiers.push(this.parseImportSpecifier()); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + return specifiers; + }; + // import ...; + Parser.prototype.parseImportDefaultSpecifier = function () { + var node = this.createNode(); + var local = this.parseIdentifierName(); + return this.finalize(node, new Node.ImportDefaultSpecifier(local)); + }; + // import <* as foo> ...; + Parser.prototype.parseImportNamespaceSpecifier = function () { + var node = this.createNode(); + this.expect('*'); + if (!this.matchContextualKeyword('as')) { + this.throwError(messages_1.Messages.NoAsAfterImportNamespace); + } + this.nextToken(); + var local = this.parseIdentifierName(); + return this.finalize(node, new Node.ImportNamespaceSpecifier(local)); + }; + Parser.prototype.parseImportDeclaration = function () { + if (this.context.inFunctionBody) { + this.throwError(messages_1.Messages.IllegalImportDeclaration); + } + var node = this.createNode(); + this.expectKeyword('import'); + var src; + var specifiers = []; + if (this.lookahead.type === 8 /* StringLiteral */) { + // import 'foo'; + src = this.parseModuleSpecifier(); + } + else { + if (this.match('{')) { + // import {bar} + specifiers = specifiers.concat(this.parseNamedImports()); + } + else if (this.match('*')) { + // import * as foo + specifiers.push(this.parseImportNamespaceSpecifier()); + } + else if (this.isIdentifierName(this.lookahead) && !this.matchKeyword('default')) { + // import foo + specifiers.push(this.parseImportDefaultSpecifier()); + if (this.match(',')) { + this.nextToken(); + if (this.match('*')) { + // import foo, * as foo + specifiers.push(this.parseImportNamespaceSpecifier()); + } + else if (this.match('{')) { + // import foo, {bar} + specifiers = specifiers.concat(this.parseNamedImports()); + } + else { + this.throwUnexpectedToken(this.lookahead); + } + } + } + else { + this.throwUnexpectedToken(this.nextToken()); + } + if (!this.matchContextualKeyword('from')) { + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + this.nextToken(); + src = this.parseModuleSpecifier(); + } + this.consumeSemicolon(); + return this.finalize(node, new Node.ImportDeclaration(specifiers, src)); + }; + // https://tc39.github.io/ecma262/#sec-exports + Parser.prototype.parseExportSpecifier = function () { + var node = this.createNode(); + var local = this.parseIdentifierName(); + var exported = local; + if (this.matchContextualKeyword('as')) { + this.nextToken(); + exported = this.parseIdentifierName(); + } + return this.finalize(node, new Node.ExportSpecifier(local, exported)); + }; + Parser.prototype.parseExportDeclaration = function () { + if (this.context.inFunctionBody) { + this.throwError(messages_1.Messages.IllegalExportDeclaration); + } + var node = this.createNode(); + this.expectKeyword('export'); + var exportDeclaration; + if (this.matchKeyword('default')) { + // export default ... + this.nextToken(); + if (this.matchKeyword('function')) { + // export default function foo () {} + // export default function () {} + var declaration = this.parseFunctionDeclaration(true); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else if (this.matchKeyword('class')) { + // export default class foo {} + var declaration = this.parseClassDeclaration(true); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else if (this.matchContextualKeyword('async')) { + // export default async function f () {} + // export default async function () {} + // export default async x => x + var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(true) : this.parseAssignmentExpression(); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + else { + if (this.matchContextualKeyword('from')) { + this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value); + } + // export default {}; + // export default []; + // export default (1 + 2); + var declaration = this.match('{') ? this.parseObjectInitializer() : + this.match('[') ? this.parseArrayInitializer() : this.parseAssignmentExpression(); + this.consumeSemicolon(); + exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration)); + } + } + else if (this.match('*')) { + // export * from 'foo'; + this.nextToken(); + if (!this.matchContextualKeyword('from')) { + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + this.nextToken(); + var src = this.parseModuleSpecifier(); + this.consumeSemicolon(); + exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src)); + } + else if (this.lookahead.type === 4 /* Keyword */) { + // export var f = 1; + var declaration = void 0; + switch (this.lookahead.value) { + case 'let': + case 'const': + declaration = this.parseLexicalDeclaration({ inFor: false }); + break; + case 'var': + case 'class': + case 'function': + declaration = this.parseStatementListItem(); + break; + default: + this.throwUnexpectedToken(this.lookahead); + } + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); + } + else if (this.matchAsyncFunction()) { + var declaration = this.parseFunctionDeclaration(); + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null)); + } + else { + var specifiers = []; + var source = null; + var isExportFromIdentifier = false; + this.expect('{'); + while (!this.match('}')) { + isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword('default'); + specifiers.push(this.parseExportSpecifier()); + if (!this.match('}')) { + this.expect(','); + } + } + this.expect('}'); + if (this.matchContextualKeyword('from')) { + // export {default} from 'foo'; + // export {foo} from 'foo'; + this.nextToken(); + source = this.parseModuleSpecifier(); + this.consumeSemicolon(); + } + else if (isExportFromIdentifier) { + // export {default}; // missing fromClause + var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause; + this.throwError(message, this.lookahead.value); + } + else { + // export {foo}; + this.consumeSemicolon(); + } + exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source)); + } + return exportDeclaration; + }; + return Parser; + }()); + exports.Parser = Parser; + + +/***/ }, +/* 9 */ +/***/ function(module, exports) { + + "use strict"; + // Ensure the condition is true, otherwise throw an error. + // This is only to have a better contract semantic, i.e. another safety net + // to catch a logic error. The condition shall be fulfilled in normal case. + // Do NOT use this to enforce a certain condition on any user input. + Object.defineProperty(exports, "__esModule", { value: true }); + function assert(condition, message) { + /* istanbul ignore if */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } + } + exports.assert = assert; + + +/***/ }, +/* 10 */ +/***/ function(module, exports) { + + "use strict"; + /* tslint:disable:max-classes-per-file */ + Object.defineProperty(exports, "__esModule", { value: true }); + var ErrorHandler = (function () { + function ErrorHandler() { + this.errors = []; + this.tolerant = false; + } + ErrorHandler.prototype.recordError = function (error) { + this.errors.push(error); + }; + ErrorHandler.prototype.tolerate = function (error) { + if (this.tolerant) { + this.recordError(error); + } + else { + throw error; + } + }; + ErrorHandler.prototype.constructError = function (msg, column) { + var error = new Error(msg); + try { + throw error; + } + catch (base) { + /* istanbul ignore else */ + if (Object.create && Object.defineProperty) { + error = Object.create(base); + Object.defineProperty(error, 'column', { value: column }); + } + } + /* istanbul ignore next */ + return error; + }; + ErrorHandler.prototype.createError = function (index, line, col, description) { + var msg = 'Line ' + line + ': ' + description; + var error = this.constructError(msg, col); + error.index = index; + error.lineNumber = line; + error.description = description; + return error; + }; + ErrorHandler.prototype.throwError = function (index, line, col, description) { + throw this.createError(index, line, col, description); + }; + ErrorHandler.prototype.tolerateError = function (index, line, col, description) { + var error = this.createError(index, line, col, description); + if (this.tolerant) { + this.recordError(error); + } + else { + throw error; + } + }; + return ErrorHandler; + }()); + exports.ErrorHandler = ErrorHandler; + + +/***/ }, +/* 11 */ +/***/ function(module, exports) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + // Error messages should be identical to V8. + exports.Messages = { + BadGetterArity: 'Getter must not have any formal parameters', + BadSetterArity: 'Setter must have exactly one formal parameter', + BadSetterRestParameter: 'Setter function argument must not be a rest parameter', + ConstructorIsAsync: 'Class constructor may not be an async method', + ConstructorSpecialMethod: 'Class constructor may not be an accessor', + DeclarationMissingInitializer: 'Missing initializer in %0 declaration', + DefaultRestParameter: 'Unexpected token =', + DuplicateBinding: 'Duplicate binding %0', + DuplicateConstructor: 'A class may only have one constructor', + DuplicateProtoProperty: 'Duplicate __proto__ fields are not allowed in object literals', + ForInOfLoopInitializer: '%0 loop variable declaration may not have an initializer', + GeneratorInLegacyContext: 'Generator declarations are not allowed in legacy contexts', + IllegalBreak: 'Illegal break statement', + IllegalContinue: 'Illegal continue statement', + IllegalExportDeclaration: 'Unexpected token', + IllegalImportDeclaration: 'Unexpected token', + IllegalLanguageModeDirective: 'Illegal \'use strict\' directive in function with non-simple parameter list', + IllegalReturn: 'Illegal return statement', + InvalidEscapedReservedWord: 'Keyword must not contain escaped characters', + InvalidHexEscapeSequence: 'Invalid hexadecimal escape sequence', + InvalidLHSInAssignment: 'Invalid left-hand side in assignment', + InvalidLHSInForIn: 'Invalid left-hand side in for-in', + InvalidLHSInForLoop: 'Invalid left-hand side in for-loop', + InvalidModuleSpecifier: 'Unexpected token', + InvalidRegExp: 'Invalid regular expression', + LetInLexicalBinding: 'let is disallowed as a lexically bound name', + MissingFromClause: 'Unexpected token', + MultipleDefaultsInSwitch: 'More than one default clause in switch statement', + NewlineAfterThrow: 'Illegal newline after throw', + NoAsAfterImportNamespace: 'Unexpected token', + NoCatchOrFinally: 'Missing catch or finally after try', + ParameterAfterRestParameter: 'Rest parameter must be last formal parameter', + Redeclaration: '%0 \'%1\' has already been declared', + StaticPrototype: 'Classes may not have static property named prototype', + StrictCatchVariable: 'Catch variable may not be eval or arguments in strict mode', + StrictDelete: 'Delete of an unqualified identifier in strict mode.', + StrictFunction: 'In strict mode code, functions can only be declared at top level or inside a block', + StrictFunctionName: 'Function name may not be eval or arguments in strict mode', + StrictLHSAssignment: 'Assignment to eval or arguments is not allowed in strict mode', + StrictLHSPostfix: 'Postfix increment/decrement may not have eval or arguments operand in strict mode', + StrictLHSPrefix: 'Prefix increment/decrement may not have eval or arguments operand in strict mode', + StrictModeWith: 'Strict mode code may not include a with statement', + StrictOctalLiteral: 'Octal literals are not allowed in strict mode.', + StrictParamDupe: 'Strict mode function may not have duplicate parameter names', + StrictParamName: 'Parameter name eval or arguments is not allowed in strict mode', + StrictReservedWord: 'Use of future reserved word in strict mode', + StrictVarName: 'Variable name may not be eval or arguments in strict mode', + TemplateOctalLiteral: 'Octal literals are not allowed in template strings.', + UnexpectedEOS: 'Unexpected end of input', + UnexpectedIdentifier: 'Unexpected identifier', + UnexpectedNumber: 'Unexpected number', + UnexpectedReserved: 'Unexpected reserved word', + UnexpectedString: 'Unexpected string', + UnexpectedTemplate: 'Unexpected quasi %0', + UnexpectedToken: 'Unexpected token %0', + UnexpectedTokenIllegal: 'Unexpected token ILLEGAL', + UnknownLabel: 'Undefined label \'%0\'', + UnterminatedRegExp: 'Invalid regular expression: missing /' + }; + + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + "use strict"; + Object.defineProperty(exports, "__esModule", { value: true }); + var assert_1 = __webpack_require__(9); + var character_1 = __webpack_require__(4); + var messages_1 = __webpack_require__(11); + function hexValue(ch) { + return '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + function octalValue(ch) { + return '01234567'.indexOf(ch); + } + var Scanner = (function () { + function Scanner(code, handler) { + this.source = code; + this.errorHandler = handler; + this.trackComment = false; + this.isModule = false; + this.length = code.length; + this.index = 0; + this.lineNumber = (code.length > 0) ? 1 : 0; + this.lineStart = 0; + this.curlyStack = []; + } + Scanner.prototype.saveState = function () { + return { + index: this.index, + lineNumber: this.lineNumber, + lineStart: this.lineStart + }; + }; + Scanner.prototype.restoreState = function (state) { + this.index = state.index; + this.lineNumber = state.lineNumber; + this.lineStart = state.lineStart; + }; + Scanner.prototype.eof = function () { + return this.index >= this.length; + }; + Scanner.prototype.throwUnexpectedToken = function (message) { + if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } + return this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); + }; + Scanner.prototype.tolerateUnexpectedToken = function (message) { + if (message === void 0) { message = messages_1.Messages.UnexpectedTokenIllegal; } + this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message); + }; + // https://tc39.github.io/ecma262/#sec-comments + Scanner.prototype.skipSingleLineComment = function (offset) { + var comments = []; + var start, loc; + if (this.trackComment) { + comments = []; + start = this.index - offset; + loc = { + start: { + line: this.lineNumber, + column: this.index - this.lineStart - offset + }, + end: {} + }; + } + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + ++this.index; + if (character_1.Character.isLineTerminator(ch)) { + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart - 1 + }; + var entry = { + multiLine: false, + slice: [start + offset, this.index - 1], + range: [start, this.index - 1], + loc: loc + }; + comments.push(entry); + } + if (ch === 13 && this.source.charCodeAt(this.index) === 10) { + ++this.index; + } + ++this.lineNumber; + this.lineStart = this.index; + return comments; + } + } + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: false, + slice: [start + offset, this.index], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + return comments; + }; + Scanner.prototype.skipMultiLineComment = function () { + var comments = []; + var start, loc; + if (this.trackComment) { + comments = []; + start = this.index - 2; + loc = { + start: { + line: this.lineNumber, + column: this.index - this.lineStart - 2 + }, + end: {} + }; + } + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + if (character_1.Character.isLineTerminator(ch)) { + if (ch === 0x0D && this.source.charCodeAt(this.index + 1) === 0x0A) { + ++this.index; + } + ++this.lineNumber; + ++this.index; + this.lineStart = this.index; + } + else if (ch === 0x2A) { + // Block comment ends with '*/'. + if (this.source.charCodeAt(this.index + 1) === 0x2F) { + this.index += 2; + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: true, + slice: [start + 2, this.index - 2], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + return comments; + } + ++this.index; + } + else { + ++this.index; + } + } + // Ran off the end of the file - the whole thing is a comment + if (this.trackComment) { + loc.end = { + line: this.lineNumber, + column: this.index - this.lineStart + }; + var entry = { + multiLine: true, + slice: [start + 2, this.index], + range: [start, this.index], + loc: loc + }; + comments.push(entry); + } + this.tolerateUnexpectedToken(); + return comments; + }; + Scanner.prototype.scanComments = function () { + var comments; + if (this.trackComment) { + comments = []; + } + var start = (this.index === 0); + while (!this.eof()) { + var ch = this.source.charCodeAt(this.index); + if (character_1.Character.isWhiteSpace(ch)) { + ++this.index; + } + else if (character_1.Character.isLineTerminator(ch)) { + ++this.index; + if (ch === 0x0D && this.source.charCodeAt(this.index) === 0x0A) { + ++this.index; + } + ++this.lineNumber; + this.lineStart = this.index; + start = true; + } + else if (ch === 0x2F) { + ch = this.source.charCodeAt(this.index + 1); + if (ch === 0x2F) { + this.index += 2; + var comment = this.skipSingleLineComment(2); + if (this.trackComment) { + comments = comments.concat(comment); + } + start = true; + } + else if (ch === 0x2A) { + this.index += 2; + var comment = this.skipMultiLineComment(); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (start && ch === 0x2D) { + // U+003E is '>' + if ((this.source.charCodeAt(this.index + 1) === 0x2D) && (this.source.charCodeAt(this.index + 2) === 0x3E)) { + // '-->' is a single-line comment + this.index += 3; + var comment = this.skipSingleLineComment(3); + if (this.trackComment) { + comments = comments.concat(comment); + } + } + else { + break; + } + } + else if (ch === 0x3C && !this.isModule) { + if (this.source.slice(this.index + 1, this.index + 4) === '!--') { + this.index += 4; // ` + +# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # + +Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. + +Features: + +* Support for version 1, 3, 4 and 5 UUIDs +* Cross-platform +* Uses cryptographically-strong random number APIs (when available) +* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) + +[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be +supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] + +## Quickstart - CommonJS (Recommended) + +```shell +npm install uuid +``` + +Then generate your uuid version of choice ... + +Version 1 (timestamp): + +```javascript +const uuidv1 = require('uuid/v1'); +uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' + +``` + +Version 3 (namespace): + +```javascript +const uuidv3 = require('uuid/v3'); + +// ... using predefined DNS namespace (for domain names) +uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' + +// ... using predefined URL namespace (for, well, URLs) +uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' + +``` + +Version 4 (random): + +```javascript +const uuidv4 = require('uuid/v4'); +uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' + +``` + +Version 5 (namespace): + +```javascript +const uuidv5 = require('uuid/v5'); + +// ... using predefined DNS namespace (for domain names) +uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' + +// ... using predefined URL namespace (for, well, URLs) +uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' + +// ... using a custom namespace +// +// Note: Custom namespaces should be a UUID string specific to your application! +// E.g. the one here was generated using this modules `uuid` CLI. +const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; +uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' + +``` + +## API + +### Version 1 + +```javascript +const uuidv1 = require('uuid/v1'); + +// Incantations +uuidv1(); +uuidv1(options); +uuidv1(options, buffer, offset); +``` + +Generate and return a RFC4122 v1 (timestamp-based) UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + + * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. + * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. + * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. + * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. + +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process. + +Example: Generate string UUID with fully-specified options + +```javascript +const v1options = { + node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], + clockseq: 0x1234, + msecs: new Date('2011-11-01').getTime(), + nsecs: 5678 +}; +uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' + +``` + +Example: In-place generation of two binary IDs + +```javascript +// Generate two ids in an array +const arr = new Array(); +uuidv1(null, arr, 0); // ⇨ + // [ + // 44, 94, 164, 192, 64, 103, + // 17, 233, 146, 52, 155, 29, + // 235, 77, 59, 125 + // ] +uuidv1(null, arr, 16); // ⇨ + // [ + // 44, 94, 164, 192, 64, 103, 17, 233, + // 146, 52, 155, 29, 235, 77, 59, 125, + // 44, 94, 164, 193, 64, 103, 17, 233, + // 146, 52, 155, 29, 235, 77, 59, 125 + // ] + +``` + +### Version 3 + +```javascript +const uuidv3 = require('uuid/v3'); + +// Incantations +uuidv3(name, namespace); +uuidv3(name, namespace, buffer); +uuidv3(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v3 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' + +``` + +### Version 4 + +```javascript +const uuidv4 = require('uuid/v4') + +// Incantations +uuidv4(); +uuidv4(options); +uuidv4(options, buffer, offset); +``` + +Generate and return a RFC4122 v4 UUID. + +* `options` - (Object) Optional uuid state to apply. Properties may include: + * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values + * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: Generate string UUID with predefined `random` values + +```javascript +const v4options = { + random: [ + 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, + 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 + ] +}; +uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' + +``` + +Example: Generate two IDs in a single buffer + +```javascript +const buffer = new Array(); +uuidv4(null, buffer, 0); // ⇨ + // [ + // 155, 29, 235, 77, 59, + // 125, 75, 173, 155, 221, + // 43, 13, 123, 61, 203, + // 109 + // ] +uuidv4(null, buffer, 16); // ⇨ + // [ + // 155, 29, 235, 77, 59, 125, 75, 173, + // 155, 221, 43, 13, 123, 61, 203, 109, + // 27, 157, 107, 205, 187, 253, 75, 45, + // 155, 93, 171, 141, 251, 189, 75, 237 + // ] + +``` + +### Version 5 + +```javascript +const uuidv5 = require('uuid/v5'); + +// Incantations +uuidv5(name, namespace); +uuidv5(name, namespace, buffer); +uuidv5(name, namespace, buffer, offset); +``` + +Generate and return a RFC4122 v5 UUID. + +* `name` - (String | Array[]) "name" to create UUID with +* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values +* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. +* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 + +Returns `buffer`, if specified, otherwise the string form of the UUID + +Example: + +```javascript +uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' + +``` + +## Command Line + +UUIDs can be generated from the command line with the `uuid` command. + +```shell +$ uuid +ddeb27fb-d9a0-4624-be4d-4615062daed4 + +$ uuid v1 +02d37060-d446-11e7-a9fa-7bdae751ebe1 +``` + +Type `uuid --help` for usage details + +## Testing + +```shell +npm test +``` + +---- +Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/.pnpm-store/v11/files/3e/84d3d68e005d890b4f409a4b2b310823261d84b48feab4644bac4aa39a93b9acb4a51f8120fc163e4624162b2ca80cfb9c39b443886fe075927de482e3b3f6 b/.pnpm-store/v11/files/3e/84d3d68e005d890b4f409a4b2b310823261d84b48feab4644bac4aa39a93b9acb4a51f8120fc163e4624162b2ca80cfb9c39b443886fe075927de482e3b3f6 new file mode 100644 index 00000000..87ecd309 --- /dev/null +++ b/.pnpm-store/v11/files/3e/84d3d68e005d890b4f409a4b2b310823261d84b48feab4644bac4aa39a93b9acb4a51f8120fc163e4624162b2ca80cfb9c39b443886fe075927de482e3b3f6 @@ -0,0 +1,203 @@ +var concatMap = require('concat-map'); +var balanced = require('balanced-match'); + +module.exports = expandTop; + +var escSlash = '\0SLASH'+Math.random()+'\0'; +var escOpen = '\0OPEN'+Math.random()+'\0'; +var escClose = '\0CLOSE'+Math.random()+'\0'; +var escComma = '\0COMMA'+Math.random()+'\0'; +var escPeriod = '\0PERIOD'+Math.random()+'\0'; + +function numeric(str) { + return parseInt(str, 10) == str + ? parseInt(str, 10) + : str.charCodeAt(0); +} + +function escapeBraces(str) { + return str.split('\\\\').join(escSlash) + .split('\\{').join(escOpen) + .split('\\}').join(escClose) + .split('\\,').join(escComma) + .split('\\.').join(escPeriod); +} + +function unescapeBraces(str) { + return str.split(escSlash).join('\\') + .split(escOpen).join('{') + .split(escClose).join('}') + .split(escComma).join(',') + .split(escPeriod).join('.'); +} + + +// Basically just str.split(","), but handling cases +// where we have nested braced sections, which should be +// treated as individual members, like {a,{b,c},d} +function parseCommaParts(str) { + if (!str) + return ['']; + + var parts = []; + var m = balanced('{', '}', str); + + if (!m) + return str.split(','); + + var pre = m.pre; + var body = m.body; + var post = m.post; + var p = pre.split(','); + + p[p.length-1] += '{' + body + '}'; + var postParts = parseCommaParts(post); + if (post.length) { + p[p.length-1] += postParts.shift(); + p.push.apply(p, postParts); + } + + parts.push.apply(parts, p); + + return parts; +} + +function expandTop(str, options) { + if (!str) + return []; + + options = options || {}; + var max = options.max == null ? Infinity : options.max; + + // I don't know why Bash 4.3 does this, but it does. + // Anything starting with {} will have the first two bytes preserved + // but *only* at the top level, so {},a}b will not expand to anything, + // but a{},b}c will be expanded to [a}c,abc]. + // One could argue that this is a bug in Bash, but since the goal of + // this module is to match Bash's rules, we escape a leading {} + if (str.substr(0, 2) === '{}') { + str = '\\{\\}' + str.substr(2); + } + + return expand(escapeBraces(str), max, true).map(unescapeBraces); +} + +function identity(e) { + return e; +} + +function embrace(str) { + return '{' + str + '}'; +} +function isPadded(el) { + return /^-?0\d/.test(el); +} + +function lte(i, y) { + return i <= y; +} +function gte(i, y) { + return i >= y; +} + +function expand(str, max, isTop) { + var expansions = []; + + var m = balanced('{', '}', str); + if (!m || /\$$/.test(m.pre)) return [str]; + + var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); + var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); + var isSequence = isNumericSequence || isAlphaSequence; + var isOptions = m.body.indexOf(',') >= 0; + if (!isSequence && !isOptions) { + // {a},b} + if (m.post.match(/,(?!,).*\}/)) { + str = m.pre + '{' + m.body + escClose + m.post; + return expand(str, max, true); + } + return [str]; + } + + var n; + if (isSequence) { + n = m.body.split(/\.\./); + } else { + n = parseCommaParts(m.body); + if (n.length === 1) { + // x{{a,b}}y ==> x{a}y x{b}y + n = expand(n[0], max, false).map(embrace); + if (n.length === 1) { + var post = m.post.length + ? expand(m.post, max, false) + : ['']; + return post.map(function(p) { + return m.pre + n[0] + p; + }); + } + } + } + + // at this point, n is the parts, and we know it's not a comma set + // with a single entry. + + // no need to expand pre, since it is guaranteed to be free of brace-sets + var pre = m.pre; + var post = m.post.length + ? expand(m.post, max, false) + : ['']; + + var N; + + if (isSequence) { + var x = numeric(n[0]); + var y = numeric(n[1]); + var width = Math.max(n[0].length, n[1].length) + var incr = n.length == 3 + ? Math.max(Math.abs(numeric(n[2])), 1) + : 1; + var test = lte; + var reverse = y < x; + if (reverse) { + incr *= -1; + test = gte; + } + var pad = n.some(isPadded); + + N = []; + + for (var i = x; test(i, y); i += incr) { + var c; + if (isAlphaSequence) { + c = String.fromCharCode(i); + if (c === '\\') + c = ''; + } else { + c = String(i); + if (pad) { + var need = width - c.length; + if (need > 0) { + var z = new Array(need + 1).join('0'); + if (i < 0) + c = '-' + z + c.slice(1); + else + c = z + c; + } + } + } + N.push(c); + } + } else { + N = concatMap(n, function(el) { return expand(el, max, false) }); + } + + for (var j = 0; j < N.length; j++) { + for (var k = 0; k < post.length && expansions.length < max; k++) { + var expansion = pre + N[j] + post[k]; + if (!isTop || isSequence || expansion) + expansions.push(expansion); + } + } + + return expansions; +} diff --git a/.pnpm-store/v11/files/3e/8c6f057d24b1679677b0f03e082fb0082d46b785d4a6102cd4e5b625006e01974b43bc7491ab8017c539aa2bb5822c92241b9d4cb75e99e8631ca914408c0c b/.pnpm-store/v11/files/3e/8c6f057d24b1679677b0f03e082fb0082d46b785d4a6102cd4e5b625006e01974b43bc7491ab8017c539aa2bb5822c92241b9d4cb75e99e8631ca914408c0c new file mode 100644 index 00000000..7390ebaf --- /dev/null +++ b/.pnpm-store/v11/files/3e/8c6f057d24b1679677b0f03e082fb0082d46b785d4a6102cd4e5b625006e01974b43bc7491ab8017c539aa2bb5822c92241b9d4cb75e99e8631ca914408c0c @@ -0,0 +1,31 @@ +var arrayEachRight = require('./_arrayEachRight'), + baseEachRight = require('./_baseEachRight'), + castFunction = require('./_castFunction'), + isArray = require('./isArray'); + +/** + * This method is like `_.forEach` except that it iterates over elements of + * `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @alias eachRight + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEach + * @example + * + * _.forEachRight([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `2` then `1`. + */ +function forEachRight(collection, iteratee) { + var func = isArray(collection) ? arrayEachRight : baseEachRight; + return func(collection, castFunction(iteratee)); +} + +module.exports = forEachRight; diff --git a/.pnpm-store/v11/files/3e/9a972609902e058c21921ec8b0eacfda84ea849490099db89bd2992fa5ec82c427549b1eccbd46329b55e9667e451fe8593d743293ac98276b3afe07c8c4c9 b/.pnpm-store/v11/files/3e/9a972609902e058c21921ec8b0eacfda84ea849490099db89bd2992fa5ec82c427549b1eccbd46329b55e9667e451fe8593d743293ac98276b3afe07c8c4c9 new file mode 100644 index 00000000..c8a7af1b --- /dev/null +++ b/.pnpm-store/v11/files/3e/9a972609902e058c21921ec8b0eacfda84ea849490099db89bd2992fa5ec82c427549b1eccbd46329b55e9667e451fe8593d743293ac98276b3afe07c8c4c9 @@ -0,0 +1,76 @@ +{ + "name": "is-number", + "description": "Returns true if the value is a number. comprehensive tests.", + "version": "4.0.0", + "homepage": "https://github.com/jonschlinkert/is-number", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "tunnckoCore (https://i.am.charlike.online)" + ], + "repository": "jonschlinkert/is-number", + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "benchmarked": "^2.0.0", + "chalk": "^2.1.0", + "gulp-format-md": "^1.0.0", + "mocha": "^3.0.1" + }, + "keywords": [ + "check", + "coerce", + "coercion", + "integer", + "is", + "is-nan", + "is-num", + "is-number", + "istype", + "kind", + "math", + "nan", + "num", + "number", + "numeric", + "test", + "type", + "typeof", + "value" + ], + "verb": { + "related": { + "list": [ + "even", + "is-even", + "is-odd", + "is-primitive", + "kind-of", + "odd" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/3e/b757f82417549fbbadcd78982d309fdc44a8c8242ce11b326fde1ddd3f6ff9003f818a0d5b80982677524c2a7112f4d640932736f40afdf96035299c6fbeca b/.pnpm-store/v11/files/3e/b757f82417549fbbadcd78982d309fdc44a8c8242ce11b326fde1ddd3f6ff9003f818a0d5b80982677524c2a7112f4d640932736f40afdf96035299c6fbeca new file mode 100644 index 00000000..0b87192b --- /dev/null +++ b/.pnpm-store/v11/files/3e/b757f82417549fbbadcd78982d309fdc44a8c8242ce11b326fde1ddd3f6ff9003f818a0d5b80982677524c2a7112f4d640932736f40afdf96035299c6fbeca @@ -0,0 +1,41 @@ +var sys = require("util") + , assert = require("assert") + , XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest + , xhr = new XMLHttpRequest() + , http = require("http"); + +// Test server +var server = http.createServer(function (req, res) { + if (req.url === '/redirectingResource') { + res.writeHead(302, {'Location': 'http://localhost:8000/'}); + res.end(); + return; + } + + var body = "Hello World"; + res.writeHead(200, { + "Content-Type": "text/plain", + "Content-Length": Buffer.byteLength(body), + "Date": "Thu, 30 Aug 2012 18:17:53 GMT", + "Connection": "close" + }); + res.write("Hello World"); + res.end(); + + this.close(); +}).listen(8000); + +xhr.onreadystatechange = function() { + if (this.readyState == 4) { + assert.equal(xhr.getRequestHeader('Location'), ''); + assert.equal(xhr.responseText, "Hello World"); + console.log("done"); + } +}; + +try { + xhr.open("GET", "http://localhost:8000/redirectingResource"); + xhr.send(); +} catch(e) { + console.log("ERROR: Exception raised", e); +} diff --git a/.pnpm-store/v11/files/3e/c69c2fa335dbdf7b3d893ef63b5be38ea59ba5fa3e638053b6b4cfe1982c9b9e754084896a89522753b27ce10a7011fbefe82962ba051d7998117b7f4a21d9-exec b/.pnpm-store/v11/files/3e/c69c2fa335dbdf7b3d893ef63b5be38ea59ba5fa3e638053b6b4cfe1982c9b9e754084896a89522753b27ce10a7011fbefe82962ba051d7998117b7f4a21d9-exec new file mode 100755 index 00000000..a15eb4f7 --- /dev/null +++ b/.pnpm-store/v11/files/3e/c69c2fa335dbdf7b3d893ef63b5be38ea59ba5fa3e638053b6b4cfe1982c9b9e754084896a89522753b27ce10a7011fbefe82962ba051d7998117b7f4a21d9-exec @@ -0,0 +1,32 @@ +{ + "name": "@oresoftware/safe-stringify", + "version": "0.0.111", + "description": "Safely stringify objects with recursive references.", + "main": "dist/main.js", + "types": "dist/main.d.ts", + "typings": "dist/main.d.ts", + "scripts": { + "test": "node test/simple.js", + "postinstall": "./assets/postinstall.sh" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/typescript-library-skeleton.git" + }, + "keywords": [ + "typescript", + "library", + "skeleton", + "scaffold" + ], + "author": "TODO Yo.Mama", + "license": "SEE LICENSE IN LICENSE.md", + "bugs": { + "url": "https://github.com/ORESoftware/typescript-library-skeleton/issues" + }, + "homepage": "https://github.com/ORESoftware/typescript-library-skeleton#readme", + "dependencies": {}, + "devDependencies": { + "@types/node": "^12.7.4" + } +} diff --git a/.pnpm-store/v11/files/3e/e59c3e37f5ba4a4827f3f40fc269c3a5b61a6205d286aa41c13ca2f76096a8aef0b558cbc56d9afa8a8bab8310daab7ce0a31d99c620fa569402ef58e38fb2 b/.pnpm-store/v11/files/3e/e59c3e37f5ba4a4827f3f40fc269c3a5b61a6205d286aa41c13ca2f76096a8aef0b558cbc56d9afa8a8bab8310daab7ce0a31d99c620fa569402ef58e38fb2 new file mode 100644 index 00000000..66a978f1 --- /dev/null +++ b/.pnpm-store/v11/files/3e/e59c3e37f5ba4a4827f3f40fc269c3a5b61a6205d286aa41c13ca2f76096a8aef0b558cbc56d9afa8a8bab8310daab7ce0a31d99c620fa569402ef58e38fb2 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/3e/e684574119c84360cb5e1dc41ac11a486a7a3d401cb3996af348d3c47403e44fb3ce2582f418853e442eb4634512ec8e0844ee3dfe084a20eda2e02cbe7fd3 b/.pnpm-store/v11/files/3e/e684574119c84360cb5e1dc41ac11a486a7a3d401cb3996af348d3c47403e44fb3ce2582f418853e442eb4634512ec8e0844ee3dfe084a20eda2e02cbe7fd3 new file mode 100644 index 00000000..874e1895 --- /dev/null +++ b/.pnpm-store/v11/files/3e/e684574119c84360cb5e1dc41ac11a486a7a3d401cb3996af348d3c47403e44fb3ce2582f418853e442eb4634512ec8e0844ee3dfe084a20eda2e02cbe7fd3 @@ -0,0 +1,85 @@ +# for-in [![NPM version](https://img.shields.io/npm/v/for-in.svg?style=flat)](https://www.npmjs.com/package/for-in) [![NPM monthly downloads](https://img.shields.io/npm/dm/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![NPM total downloads](https://img.shields.io/npm/dt/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/for-in.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/for-in) + +> Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save for-in +``` + +## Usage + +```js +var forIn = require('for-in'); + +var obj = {a: 'foo', b: 'bar', c: 'baz'}; +var values = []; +var keys = []; + +forIn(obj, function (value, key, o) { + keys.push(key); + values.push(value); +}); + +console.log(keys); +//=> ['a', 'b', 'c']; + +console.log(values); +//=> ['foo', 'bar', 'baz']; +``` + +## About + +### Related projects + +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") +* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.") +* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 16 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [paulirish](https://github.com/paulirish) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 28, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/3e/ece83289bcf41735d8b704c9c0aea21100577a8e27d3bb14906f165354e41d77ad2935c0d3831ec7cec95a914f22fdfc7e2cedaeb381d1306a4dd038d5bf38 b/.pnpm-store/v11/files/3e/ece83289bcf41735d8b704c9c0aea21100577a8e27d3bb14906f165354e41d77ad2935c0d3831ec7cec95a914f22fdfc7e2cedaeb381d1306a4dd038d5bf38 new file mode 100644 index 00000000..55c78405 --- /dev/null +++ b/.pnpm-store/v11/files/3e/ece83289bcf41735d8b704c9c0aea21100577a8e27d3bb14906f165354e41d77ad2935c0d3831ec7cec95a914f22fdfc7e2cedaeb381d1306a4dd038d5bf38 @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachLimit = require('./eachLimit'); + +var _eachLimit2 = _interopRequireDefault(_eachLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`each`]{@link module:Collections.each} but runs only a single async operation at a time. + * + * @name eachSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.each]{@link module:Collections.each} + * @alias forEachSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each + * item in `coll`. + * The array index is not passed to the iteratee. + * If you need the index, use `eachOfSeries`. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all + * `iteratee` functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/3e/f9f449bbd1d89abd0be1a38c5a5a4f4273938ecd947d3e206cad98be63d522b419def238b31888f2839a6b6bb73e1fd2a6c2d92b45751f9f4d3a4e92582436 b/.pnpm-store/v11/files/3e/f9f449bbd1d89abd0be1a38c5a5a4f4273938ecd947d3e206cad98be63d522b419def238b31888f2839a6b6bb73e1fd2a6c2d92b45751f9f4d3a4e92582436 new file mode 100644 index 00000000..23caa897 --- /dev/null +++ b/.pnpm-store/v11/files/3e/f9f449bbd1d89abd0be1a38c5a5a4f4273938ecd947d3e206cad98be63d522b419def238b31888f2839a6b6bb73e1fd2a6c2d92b45751f9f4d3a4e92582436 @@ -0,0 +1,43 @@ +/*:nodoc:* + * class ActionStoreConstant + * + * This action stores the value specified by the const keyword argument. + * (Note that the const keyword argument defaults to the rather unhelpful null.) + * The 'store_const' action is most commonly used with optional + * arguments that specify some sort of flag. + * + * This class inherited from [[Action]] + **/ +'use strict'; + +var util = require('util'); + +var Action = require('../../action'); + +/*:nodoc:* + * new ActionStoreConstant(options) + * - options (object): options hash see [[Action.new]] + * + **/ +var ActionStoreConstant = module.exports = function ActionStoreConstant(options) { + options = options || {}; + options.nargs = 0; + if (typeof options.constant === 'undefined') { + throw new Error('constant option is required for storeAction'); + } + Action.call(this, options); +}; +util.inherits(ActionStoreConstant, Action); + +/*:nodoc:* + * ActionStoreConstant#call(parser, namespace, values, optionString) -> Void + * - parser (ArgumentParser): current parser + * - namespace (Namespace): namespace for output data + * - values (Array): parsed values + * - optionString (Array): input option string(not parsed) + * + * Call the action. Save result in namespace object + **/ +ActionStoreConstant.prototype.call = function (parser, namespace) { + namespace.set(this.dest, this.constant); +}; diff --git a/.pnpm-store/v11/files/3f/14c4f2ca524502f6027f81e7759584e2e0d2952f54bb9fbb100402d1e9967080c9765f9b32e716a8897b554ce48e73610767d588a446cbe2f1dd1842f33818 b/.pnpm-store/v11/files/3f/14c4f2ca524502f6027f81e7759584e2e0d2952f54bb9fbb100402d1e9967080c9765f9b32e716a8897b554ce48e73610767d588a446cbe2f1dd1842f33818 new file mode 100644 index 00000000..f2e3001d --- /dev/null +++ b/.pnpm-store/v11/files/3f/14c4f2ca524502f6027f81e7759584e2e0d2952f54bb9fbb100402d1e9967080c9765f9b32e716a8897b554ce48e73610767d588a446cbe2f1dd1842f33818 @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = onlyOnce; +function onlyOnce(fn) { + return function () { + if (fn === null) throw new Error("Callback was already called."); + var callFn = fn; + fn = null; + callFn.apply(this, arguments); + }; +} +module.exports = exports["default"]; \ No newline at end of file diff --git a/.pnpm-store/v11/files/3f/169dbfe80f8015a752205291ae327805a1c4cb72d0050afb20a34267af4696020764027626f309486cfe8b8aee1afef392887cdf277f5d15e1e4bbe223c61f-exec b/.pnpm-store/v11/files/3f/169dbfe80f8015a752205291ae327805a1c4cb72d0050afb20a34267af4696020764027626f309486cfe8b8aee1afef392887cdf277f5d15e1e4bbe223c61f-exec new file mode 100755 index 00000000..056cdec1 --- /dev/null +++ b/.pnpm-store/v11/files/3f/169dbfe80f8015a752205291ae327805a1c4cb72d0050afb20a34267af4696020764027626f309486cfe8b8aee1afef392887cdf277f5d15e1e4bbe223c61f-exec @@ -0,0 +1,251 @@ +declare module "net" { + import * as stream from "stream"; + import * as events from "events"; + import * as dns from "dns"; + + type LookupFunction = (hostname: string, options: dns.LookupOneOptions, callback: (err: NodeJS.ErrnoException | null, address: string, family: number) => void) => void; + + interface AddressInfo { + address: string; + family: string; + port: number; + } + + interface SocketConstructorOpts { + fd?: number; + allowHalfOpen?: boolean; + readable?: boolean; + writable?: boolean; + } + + interface TcpSocketConnectOpts { + port: number; + host?: string; + localAddress?: string; + localPort?: number; + hints?: number; + family?: number; + lookup?: LookupFunction; + } + + interface IpcSocketConnectOpts { + path: string; + } + + type SocketConnectOpts = TcpSocketConnectOpts | IpcSocketConnectOpts; + + class Socket extends stream.Duplex { + constructor(options?: SocketConstructorOpts); + + // Extended base methods + write(buffer: Buffer): boolean; + write(buffer: Buffer, cb?: Function): boolean; + write(str: string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + write(str: string, encoding?: string, fd?: string): boolean; + write(data: any, encoding?: string, callback?: Function): void; + + connect(options: SocketConnectOpts, connectionListener?: Function): this; + connect(port: number, host: string, connectionListener?: Function): this; + connect(port: number, connectionListener?: Function): this; + connect(path: string, connectionListener?: Function): this; + + setEncoding(encoding?: string): this; + pause(): this; + resume(): this; + setTimeout(timeout: number, callback?: Function): this; + setNoDelay(noDelay?: boolean): this; + setKeepAlive(enable?: boolean, initialDelay?: number): this; + address(): AddressInfo | string; + unref(): void; + ref(): void; + + readonly bufferSize: number; + readonly bytesRead: number; + readonly bytesWritten: number; + readonly connecting: boolean; + readonly destroyed: boolean; + readonly localAddress: string; + readonly localPort: number; + readonly remoteAddress?: string; + readonly remoteFamily?: string; + readonly remotePort?: number; + + // Extended base methods + end(): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + end(data?: any, encoding?: string): void; + + /** + * events.EventEmitter + * 1. close + * 2. connect + * 3. data + * 4. drain + * 5. end + * 6. error + * 7. lookup + * 8. timeout + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: (had_error: boolean) => void): this; + addListener(event: "connect", listener: () => void): this; + addListener(event: "data", listener: (data: Buffer) => void): this; + addListener(event: "drain", listener: () => void): this; + addListener(event: "end", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; + addListener(event: "timeout", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close", had_error: boolean): boolean; + emit(event: "connect"): boolean; + emit(event: "data", data: Buffer): boolean; + emit(event: "drain"): boolean; + emit(event: "end"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "lookup", err: Error, address: string, family: string | number, host: string): boolean; + emit(event: "timeout"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: (had_error: boolean) => void): this; + on(event: "connect", listener: () => void): this; + on(event: "data", listener: (data: Buffer) => void): this; + on(event: "drain", listener: () => void): this; + on(event: "end", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; + on(event: "timeout", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: (had_error: boolean) => void): this; + once(event: "connect", listener: () => void): this; + once(event: "data", listener: (data: Buffer) => void): this; + once(event: "drain", listener: () => void): this; + once(event: "end", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; + once(event: "timeout", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: (had_error: boolean) => void): this; + prependListener(event: "connect", listener: () => void): this; + prependListener(event: "data", listener: (data: Buffer) => void): this; + prependListener(event: "drain", listener: () => void): this; + prependListener(event: "end", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; + prependListener(event: "timeout", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: (had_error: boolean) => void): this; + prependOnceListener(event: "connect", listener: () => void): this; + prependOnceListener(event: "data", listener: (data: Buffer) => void): this; + prependOnceListener(event: "drain", listener: () => void): this; + prependOnceListener(event: "end", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "lookup", listener: (err: Error, address: string, family: string | number, host: string) => void): this; + prependOnceListener(event: "timeout", listener: () => void): this; + } + + interface ListenOptions { + port?: number; + host?: string; + backlog?: number; + path?: string; + exclusive?: boolean; + readableAll?: boolean; + writableAll?: boolean; + } + + // https://github.com/nodejs/node/blob/master/lib/net.js + class Server extends events.EventEmitter { + constructor(connectionListener?: (socket: Socket) => void); + constructor(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void); + + listen(port?: number, hostname?: string, backlog?: number, listeningListener?: Function): this; + listen(port?: number, hostname?: string, listeningListener?: Function): this; + listen(port?: number, backlog?: number, listeningListener?: Function): this; + listen(port?: number, listeningListener?: Function): this; + listen(path: string, backlog?: number, listeningListener?: Function): this; + listen(path: string, listeningListener?: Function): this; + listen(options: ListenOptions, listeningListener?: Function): this; + listen(handle: any, backlog?: number, listeningListener?: Function): this; + listen(handle: any, listeningListener?: Function): this; + close(callback?: (err?: Error) => void): this; + address(): AddressInfo | string; + getConnections(cb: (error: Error | null, count: number) => void): void; + ref(): this; + unref(): this; + maxConnections: number; + connections: number; + listening: boolean; + + /** + * events.EventEmitter + * 1. close + * 2. connection + * 3. error + * 4. listening + */ + addListener(event: string, listener: (...args: any[]) => void): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "connection", listener: (socket: Socket) => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "listening", listener: () => void): this; + + emit(event: string | symbol, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "connection", socket: Socket): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "listening"): boolean; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: "close", listener: () => void): this; + on(event: "connection", listener: (socket: Socket) => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "listening", listener: () => void): this; + + once(event: string, listener: (...args: any[]) => void): this; + once(event: "close", listener: () => void): this; + once(event: "connection", listener: (socket: Socket) => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "listening", listener: () => void): this; + + prependListener(event: string, listener: (...args: any[]) => void): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "connection", listener: (socket: Socket) => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "listening", listener: () => void): this; + + prependOnceListener(event: string, listener: (...args: any[]) => void): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "connection", listener: (socket: Socket) => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "listening", listener: () => void): this; + } + + interface TcpNetConnectOpts extends TcpSocketConnectOpts, SocketConstructorOpts { + timeout?: number; + } + + interface IpcNetConnectOpts extends IpcSocketConnectOpts, SocketConstructorOpts { + timeout?: number; + } + + type NetConnectOpts = TcpNetConnectOpts | IpcNetConnectOpts; + + function createServer(connectionListener?: (socket: Socket) => void): Server; + function createServer(options?: { allowHalfOpen?: boolean, pauseOnConnect?: boolean }, connectionListener?: (socket: Socket) => void): Server; + function connect(options: NetConnectOpts, connectionListener?: Function): Socket; + function connect(port: number, host?: string, connectionListener?: Function): Socket; + function connect(path: string, connectionListener?: Function): Socket; + function createConnection(options: NetConnectOpts, connectionListener?: Function): Socket; + function createConnection(port: number, host?: string, connectionListener?: Function): Socket; + function createConnection(path: string, connectionListener?: Function): Socket; + function isIP(input: string): number; + function isIPv4(input: string): boolean; + function isIPv6(input: string): boolean; +} diff --git a/.pnpm-store/v11/files/3f/393fa226af504acd27ed90d5be60d443c0ad5610c55cd0c78ff06a56302d537bfde1e8421abb80ab0f11bff1cc7a8dd956b94e30d8246332b78dbbe1692bea b/.pnpm-store/v11/files/3f/393fa226af504acd27ed90d5be60d443c0ad5610c55cd0c78ff06a56302d537bfde1e8421abb80ab0f11bff1cc7a8dd956b94e30d8246332b78dbbe1692bea new file mode 100644 index 00000000..65f90aca --- /dev/null +++ b/.pnpm-store/v11/files/3f/393fa226af504acd27ed90d5be60d443c0ad5610c55cd0c78ff06a56302d537bfde1e8421abb80ab0f11bff1cc7a8dd956b94e30d8246332b78dbbe1692bea @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/3f/49decb42702601644599ac56fa4cd94dc962366104920a60d34f29246c3b2b5816d626e41c14d712b9e8043c408f98da901cb24f387aaa6813acad0170a245 b/.pnpm-store/v11/files/3f/49decb42702601644599ac56fa4cd94dc962366104920a60d34f29246c3b2b5816d626e41c14d712b9e8043c408f98da901cb24f387aaa6813acad0170a245 new file mode 100644 index 00000000..1ce17393 --- /dev/null +++ b/.pnpm-store/v11/files/3f/49decb42702601644599ac56fa4cd94dc962366104920a60d34f29246c3b2b5816d626e41c14d712b9e8043c408f98da901cb24f387aaa6813acad0170a245 @@ -0,0 +1,6 @@ +/** + * The default argument placeholder value for methods. + * + * @type {Object} + */ +module.exports = {}; diff --git a/.pnpm-store/v11/files/3f/5253ca6f4fcc229a73d95e17a8b27e4541fa9217ea40dbccc712360d47d4fa7c6b3120c3a0a71ce5c7bfa35b916d1e6800416ab4d76f4668f9bfa616f0263a-exec b/.pnpm-store/v11/files/3f/5253ca6f4fcc229a73d95e17a8b27e4541fa9217ea40dbccc712360d47d4fa7c6b3120c3a0a71ce5c7bfa35b916d1e6800416ab4d76f4668f9bfa616f0263a-exec new file mode 100755 index 00000000..fc0dbac5 --- /dev/null +++ b/.pnpm-store/v11/files/3f/5253ca6f4fcc229a73d95e17a8b27e4541fa9217ea40dbccc712360d47d4fa7c6b3120c3a0a71ce5c7bfa35b916d1e6800416ab4d76f4668f9bfa616f0263a-exec @@ -0,0 +1,134 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const sqlite3 = require('sqlite3').verbose(); +const suman_events_1 = require("suman-events"); +const utils_1 = require("../../lib/utils"); +const reporterName = path.basename(__dirname); +const log = utils_1.getLogger(reporterName); +const p = path.resolve(process.env.HOME + '/.suman/global/node_modules/sqlite3'); +const dbPth = path.resolve(process.env.HOME + '/.suman/db'); +let db = new sqlite3.Database(dbPth, function (err) { + if (err) { + log.error(err); + } + else { + log.veryGood(' => SQLite connected.'); + } +}); +db.on('error', function (err) { + log.error(' => sqlite error => ', err); +}); +db.configure('busyTimeout', 4000); +const noop = function () { +}; +exports.loadReporter = utils_1.wrapReporter(reporterName, (retContainer, results, s, sumanOpts, expectations) => { + const runAsync = function (fn) { + retContainer.ret.count++; + fn(function (err) { + err && log.error(err.stack || err); + retContainer.ret.count--; + if (retContainer.ret.count < 1) { + retContainer.ret.cb(); + } + }); + }; + const runPromise = function (promise) { + retContainer.ret.count++; + return promise + .catch(err => err && log.error(err.stack || err)) + .then(function () { + retContainer.ret.count--; + retContainer.ret.count < 1 && retContainer.ret.cb(); + }); + }; + s.on(String(suman_events_1.events.FATAL_TEST_ERROR), function (val) { + runAsync(function (cb) { + db.serialize(function () { + db.run('CREATE TABLE lorem (info TEXT)'); + let stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 10; i++) { + stmt.run('Ipsum ' + i); + } + stmt.finalize(); + db.all('SELECT rowid AS id, info FROM lorem', function (err, rows) { + log.info('rows count => ', rows.length); + cb(); + }); + }); + }); + }); + s.on(String(suman_events_1.events.TEST_CASE_END), function (val) { + runAsync(function (cb) { + db.serialize(function () { + db.run('CREATE TABLE lorem (info TEXT)'); + let stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 1; i++) { + stmt.run('Ipsum ' + i); + } + stmt.finalize(); + db.all('SELECT rowid AS id, info FROM lorem', function (err, rows) { + log.info('rows count => ', rows.length); + cb(); + }); + }); + }); + }); + s.on(String(suman_events_1.events.TEST_CASE_PASS), function (val) { + runAsync(function (cb) { + db.serialize(function () { + db.run('CREATE TABLE lorem (info TEXT)'); + let stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 1; i++) { + stmt.run('Ipsum ' + i); + } + stmt.finalize(); + db.all('SELECT rowid AS id, info FROM lorem', function (err, rows) { + log.info('rows count => ', rows.length); + cb(); + }); + }); + }); + }); + s.on(String(suman_events_1.events.TEST_CASE_SKIPPED), function (val) { + runAsync(function (cb) { + db.serialize(function () { + db.run('CREATE TABLE lorem (info TEXT)'); + let stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 1; i++) { + stmt.run('Ipsum ' + i); + } + stmt.finalize(); + db.all('SELECT rowid AS id, info FROM lorem', function (err, rows) { + log.info('rows count => ', rows.length); + cb(); + }); + }); + }); + }); + s.on(String(suman_events_1.events.TEST_CASE_STUBBED), function (val) { + runAsync(function (cb) { + db.serialize(function () { + db.run('CREATE TABLE lorem (info TEXT)'); + let stmt = db.prepare('INSERT INTO lorem VALUES (?)'); + for (let i = 0; i < 1; i++) { + stmt.run('Ipsum ' + i); + } + stmt.finalize(); + db.all('SELECT rowid AS id, info FROM lorem', function (err, rows) { + log.info('rows count => ', rows.length); + cb(); + }); + }); + }); + }); + return retContainer.ret = { + results, + reporterName, + count: 0, + cb: noop + }; +}); +exports.default = exports.loadReporter; diff --git a/.pnpm-store/v11/files/3f/5264e339520310f7f84cd2448b92e67ee2ca29031ff016bc5b420d04ab74763a5184671fe3e7c25ab3d0a66fa320ad77e5a95b04dab491aaf44a07e5c4323b-exec b/.pnpm-store/v11/files/3f/5264e339520310f7f84cd2448b92e67ee2ca29031ff016bc5b420d04ab74763a5184671fe3e7c25ab3d0a66fa320ad77e5a95b04dab491aaf44a07e5c4323b-exec new file mode 100755 index 00000000..2bfffd8f --- /dev/null +++ b/.pnpm-store/v11/files/3f/5264e339520310f7f84cd2448b92e67ee2ca29031ff016bc5b420d04ab74763a5184671fe3e7c25ab3d0a66fa320ad77e5a95b04dab491aaf44a07e5c4323b-exec @@ -0,0 +1,6 @@ + + +# Freeze Existing Props + +Freeze all top level existing props on an object +Does not touch the prototype, which is probably a good thing. \ No newline at end of file diff --git a/.pnpm-store/v11/files/3f/558430272668c085f4cda0c04c33d34ef2ad77dd739f1f56086bc9657fb5c9cb4260c7cb798dc55af60039111c95d625d61074645e0dadd09d244fa0c803e9 b/.pnpm-store/v11/files/3f/558430272668c085f4cda0c04c33d34ef2ad77dd739f1f56086bc9657fb5c9cb4260c7cb798dc55af60039111c95d625d61074645e0dadd09d244fa0c803e9 new file mode 100644 index 00000000..c9fc4fcd --- /dev/null +++ b/.pnpm-store/v11/files/3f/558430272668c085f4cda0c04c33d34ef2ad77dd739f1f56086bc9657fb5c9cb4260c7cb798dc55af60039111c95d625d61074645e0dadd09d244fa0c803e9 @@ -0,0 +1,25 @@ +## Changelog + +### v2.0.0 + +**Added features** + +- Adds [.capture](readme.md#capture) method for capturing matches, thanks to [devongovett](https://github.com/devongovett) + + +### v1.0.0 + +**Breaking changes** + +- The main export now returns the compiled string, instead of the object returned from the compiler + +**Added features** + +- Adds a `.create` method to do what the main function did before v1.0.0 + +**Other changes** + +- adds `expand-brackets` parsers/compilers to handle nested brackets and extglobs +- uses `to-regex` to build regex for `makeRe` method +- improves coverage +- optimizations \ No newline at end of file diff --git a/.pnpm-store/v11/files/3f/66338d84ec1d6ed874228927da9de0b89c2901764d5e57cb323f345bbc7e392f353399794c6a396219f17e522934eef63e27d1155190046c2119ed9a08c0c8 b/.pnpm-store/v11/files/3f/66338d84ec1d6ed874228927da9de0b89c2901764d5e57cb323f345bbc7e392f353399794c6a396219f17e522934eef63e27d1155190046c2119ed9a08c0c8 new file mode 100644 index 00000000..424c46e1 --- /dev/null +++ b/.pnpm-store/v11/files/3f/66338d84ec1d6ed874228927da9de0b89c2901764d5e57cb323f345bbc7e392f353399794c6a396219f17e522934eef63e27d1155190046c2119ed9a08c0c8 @@ -0,0 +1,238 @@ +exports.setopts = setopts +exports.ownProp = ownProp +exports.makeAbs = makeAbs +exports.finish = finish +exports.mark = mark +exports.isIgnored = isIgnored +exports.childrenIgnored = childrenIgnored + +function ownProp (obj, field) { + return Object.prototype.hasOwnProperty.call(obj, field) +} + +var fs = require("fs") +var path = require("path") +var minimatch = require("minimatch") +var isAbsolute = require("path-is-absolute") +var Minimatch = minimatch.Minimatch + +function alphasort (a, b) { + return a.localeCompare(b, 'en') +} + +function setupIgnores (self, options) { + self.ignore = options.ignore || [] + + if (!Array.isArray(self.ignore)) + self.ignore = [self.ignore] + + if (self.ignore.length) { + self.ignore = self.ignore.map(ignoreMap) + } +} + +// ignore patterns are always in dot:true mode. +function ignoreMap (pattern) { + var gmatcher = null + if (pattern.slice(-3) === '/**') { + var gpattern = pattern.replace(/(\/\*\*)+$/, '') + gmatcher = new Minimatch(gpattern, { dot: true }) + } + + return { + matcher: new Minimatch(pattern, { dot: true }), + gmatcher: gmatcher + } +} + +function setopts (self, pattern, options) { + if (!options) + options = {} + + // base-matching: just use globstar for that. + if (options.matchBase && -1 === pattern.indexOf("/")) { + if (options.noglobstar) { + throw new Error("base matching requires globstar") + } + pattern = "**/" + pattern + } + + self.silent = !!options.silent + self.pattern = pattern + self.strict = options.strict !== false + self.realpath = !!options.realpath + self.realpathCache = options.realpathCache || Object.create(null) + self.follow = !!options.follow + self.dot = !!options.dot + self.mark = !!options.mark + self.nodir = !!options.nodir + if (self.nodir) + self.mark = true + self.sync = !!options.sync + self.nounique = !!options.nounique + self.nonull = !!options.nonull + self.nosort = !!options.nosort + self.nocase = !!options.nocase + self.stat = !!options.stat + self.noprocess = !!options.noprocess + self.absolute = !!options.absolute + self.fs = options.fs || fs + + self.maxLength = options.maxLength || Infinity + self.cache = options.cache || Object.create(null) + self.statCache = options.statCache || Object.create(null) + self.symlinks = options.symlinks || Object.create(null) + + setupIgnores(self, options) + + self.changedCwd = false + var cwd = process.cwd() + if (!ownProp(options, "cwd")) + self.cwd = cwd + else { + self.cwd = path.resolve(options.cwd) + self.changedCwd = self.cwd !== cwd + } + + self.root = options.root || path.resolve(self.cwd, "/") + self.root = path.resolve(self.root) + if (process.platform === "win32") + self.root = self.root.replace(/\\/g, "/") + + // TODO: is an absolute `cwd` supposed to be resolved against `root`? + // e.g. { cwd: '/test', root: __dirname } === path.join(__dirname, '/test') + self.cwdAbs = isAbsolute(self.cwd) ? self.cwd : makeAbs(self, self.cwd) + if (process.platform === "win32") + self.cwdAbs = self.cwdAbs.replace(/\\/g, "/") + self.nomount = !!options.nomount + + // disable comments and negation in Minimatch. + // Note that they are not supported in Glob itself anyway. + options.nonegate = true + options.nocomment = true + // always treat \ in patterns as escapes, not path separators + options.allowWindowsEscape = false + + self.minimatch = new Minimatch(pattern, options) + self.options = self.minimatch.options +} + +function finish (self) { + var nou = self.nounique + var all = nou ? [] : Object.create(null) + + for (var i = 0, l = self.matches.length; i < l; i ++) { + var matches = self.matches[i] + if (!matches || Object.keys(matches).length === 0) { + if (self.nonull) { + // do like the shell, and spit out the literal glob + var literal = self.minimatch.globSet[i] + if (nou) + all.push(literal) + else + all[literal] = true + } + } else { + // had matches + var m = Object.keys(matches) + if (nou) + all.push.apply(all, m) + else + m.forEach(function (m) { + all[m] = true + }) + } + } + + if (!nou) + all = Object.keys(all) + + if (!self.nosort) + all = all.sort(alphasort) + + // at *some* point we statted all of these + if (self.mark) { + for (var i = 0; i < all.length; i++) { + all[i] = self._mark(all[i]) + } + if (self.nodir) { + all = all.filter(function (e) { + var notDir = !(/\/$/.test(e)) + var c = self.cache[e] || self.cache[makeAbs(self, e)] + if (notDir && c) + notDir = c !== 'DIR' && !Array.isArray(c) + return notDir + }) + } + } + + if (self.ignore.length) + all = all.filter(function(m) { + return !isIgnored(self, m) + }) + + self.found = all +} + +function mark (self, p) { + var abs = makeAbs(self, p) + var c = self.cache[abs] + var m = p + if (c) { + var isDir = c === 'DIR' || Array.isArray(c) + var slash = p.slice(-1) === '/' + + if (isDir && !slash) + m += '/' + else if (!isDir && slash) + m = m.slice(0, -1) + + if (m !== p) { + var mabs = makeAbs(self, m) + self.statCache[mabs] = self.statCache[abs] + self.cache[mabs] = self.cache[abs] + } + } + + return m +} + +// lotta situps... +function makeAbs (self, f) { + var abs = f + if (f.charAt(0) === '/') { + abs = path.join(self.root, f) + } else if (isAbsolute(f) || f === '') { + abs = f + } else if (self.changedCwd) { + abs = path.resolve(self.cwd, f) + } else { + abs = path.resolve(f) + } + + if (process.platform === 'win32') + abs = abs.replace(/\\/g, '/') + + return abs +} + + +// Return true, if pattern ends with globstar '**', for the accompanying parent directory. +// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents +function isIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) + }) +} + +function childrenIgnored (self, path) { + if (!self.ignore.length) + return false + + return self.ignore.some(function(item) { + return !!(item.gmatcher && item.gmatcher.match(path)) + }) +} diff --git a/.pnpm-store/v11/files/3f/691288449edf24623b6a8219f4c4e04b4fcfecd246b90c592f53d97f2dc8bdc1e99ebe8402d3d92c86db00565341be9808114c9b9ea971345b08162c5248b0 b/.pnpm-store/v11/files/3f/691288449edf24623b6a8219f4c4e04b4fcfecd246b90c592f53d97f2dc8bdc1e99ebe8402d3d92c86db00565341be9808114c9b9ea971345b08162c5248b0 new file mode 100644 index 00000000..422995b5 --- /dev/null +++ b/.pnpm-store/v11/files/3f/691288449edf24623b6a8219f4c4e04b4fcfecd246b90c592f53d97f2dc8bdc1e99ebe8402d3d92c86db00565341be9808114c9b9ea971345b08162c5248b0 @@ -0,0 +1,93 @@ + + + + Code coverage report for All files + + + + + + + +

+
+

+ All files +

+
+
+ 100% + Statements + 17/17 +
+
+ 87.5% + Branches + 7/8 +
+
+ 100% + Functions + 4/4 +
+
+ 100% + Lines + 16/16 +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
etoa.js
100%17/1787.5%7/8100%4/4100%16/16
+
+
+ + + + + + + diff --git a/.pnpm-store/v11/files/3f/7327aa0db5e4e9135e95a6cdf508dc880c66ca2af8fcf2a124b0fbf7fbbf966bb7d84837b1d6bfe6af242b35ebe957b323443a1aa2b09e551c8148a0bdf95a b/.pnpm-store/v11/files/3f/7327aa0db5e4e9135e95a6cdf508dc880c66ca2af8fcf2a124b0fbf7fbbf966bb7d84837b1d6bfe6af242b35ebe957b323443a1aa2b09e551c8148a0bdf95a new file mode 100644 index 00000000..14de1a7e --- /dev/null +++ b/.pnpm-store/v11/files/3f/7327aa0db5e4e9135e95a6cdf508dc880c66ca2af8fcf2a124b0fbf7fbbf966bb7d84837b1d6bfe6af242b35ebe957b323443a1aa2b09e551c8148a0bdf95a @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('split', require('../split')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/3f/8528f0a9ed130608161001697210b8b8c20d58f7039cbc44dfc010f24cd6951031c79c189993476f4964547b01cc5b3f60a000d3e802651e886636acc7e8df b/.pnpm-store/v11/files/3f/8528f0a9ed130608161001697210b8b8c20d58f7039cbc44dfc010f24cd6951031c79c189993476f4964547b01cc5b3f60a000d3e802651e886636acc7e8df new file mode 100644 index 00000000..0ed76fb2 --- /dev/null +++ b/.pnpm-store/v11/files/3f/8528f0a9ed130608161001697210b8b8c20d58f7039cbc44dfc010f24cd6951031c79c189993476f4964547b01cc5b3f60a000d3e802651e886636acc7e8df @@ -0,0 +1,26 @@ +{ + "node": true +, "asi": true +, "nonstandard": true +, "strict": false +, "smarttabs": true +, "maxlen": 1800 +, "newcap": false +, "expr": true +, "undef": true +, "unused": false +, "onecase": true +, "laxcomma": true +, "laxbreak": true +, "white": false +, "shadow": true +, "proto": true +, "loopfunc": true +, "boss": true +, "validthis": true +, "unused": "vars" +, "globals": { + "describe": false + , "it": false + } +} diff --git a/.pnpm-store/v11/files/3f/a748e59fb3af0c5293530844faa9606d9271836489d2c8013417779d10cc180187f5e670477f9ec77d341e0ef64eab7dcfb876c6390f027bc6f869a12d0f46 b/.pnpm-store/v11/files/3f/a748e59fb3af0c5293530844faa9606d9271836489d2c8013417779d10cc180187f5e670477f9ec77d341e0ef64eab7dcfb876c6390f027bc6f869a12d0f46 new file mode 100644 index 00000000..19129e31 --- /dev/null +++ b/.pnpm-store/v11/files/3f/a748e59fb3af0c5293530844faa9606d9271836489d2c8013417779d10cc180187f5e670477f9ec77d341e0ef64eab7dcfb876c6390f027bc6f869a12d0f46 @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/.pnpm-store/v11/files/3f/aeeb19ca1cffa28b4767b391fe9a349f6e86927e1f6f2a0cb6be2701eceaa552a83339fc4d487f0ac5ee494b7618a1fd8b223c22c9229847c5c32b4b2684fd b/.pnpm-store/v11/files/3f/aeeb19ca1cffa28b4767b391fe9a349f6e86927e1f6f2a0cb6be2701eceaa552a83339fc4d487f0ac5ee494b7618a1fd8b223c22c9229847c5c32b4b2684fd new file mode 100644 index 00000000..6398b700 --- /dev/null +++ b/.pnpm-store/v11/files/3f/aeeb19ca1cffa28b4767b391fe9a349f6e86927e1f6f2a0cb6be2701eceaa552a83339fc4d487f0ac5ee494b7618a1fd8b223c22c9229847c5c32b4b2684fd @@ -0,0 +1,715 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_CALLBACKS_12_INL_H_ +#define NAN_CALLBACKS_12_INL_H_ + +#if defined(V8_MAJOR_VERSION) && \ + (V8_MAJOR_VERSION > 14 || \ + (V8_MAJOR_VERSION == 14 && \ + defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 6)) +# define NAN_HAS_PROPERTY_CALLBACK_INFO_HOLDER_V2 1 +#endif + +template +class ReturnValue { + v8::ReturnValue value_; + + public: + template + explicit inline ReturnValue(const v8::ReturnValue &value) : + value_(value) {} + template + explicit inline ReturnValue(const ReturnValue& that) + : value_(that.value_) { + TYPE_CHECK(T, S); + } + + // Handle setters + template inline void Set(const v8::Local &handle) { + TYPE_CHECK(T, S); + value_.Set(handle); + } + + template inline void Set(const Global &handle) { + TYPE_CHECK(T, S); +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && \ + (V8_MINOR_VERSION > 5 || (V8_MINOR_VERSION == 5 && \ + defined(V8_BUILD_NUMBER) && V8_BUILD_NUMBER >= 8)))) + value_.Set(handle); +#else + value_.Set(*reinterpret_cast*>(&handle)); + const_cast &>(handle).Reset(); +#endif + } + + // Fast primitive setters + inline void Set(bool value) { + TYPE_CHECK(T, v8::Boolean); + value_.Set(value); + } + + inline void Set(double i) { + TYPE_CHECK(T, v8::Number); + value_.Set(i); + } + + inline void Set(int32_t i) { + TYPE_CHECK(T, v8::Integer); + value_.Set(i); + } + + inline void Set(uint32_t i) { + TYPE_CHECK(T, v8::Integer); + value_.Set(i); + } + + // Fast JS primitive setters + inline void SetNull() { + TYPE_CHECK(T, v8::Primitive); + value_.SetNull(); + } + + inline void SetUndefined() { + TYPE_CHECK(T, v8::Primitive); + value_.SetUndefined(); + } + + inline void SetEmptyString() { + TYPE_CHECK(T, v8::String); + value_.SetEmptyString(); + } + + // Convenience getter for isolate + inline v8::Isolate *GetIsolate() const { + return value_.GetIsolate(); + } + + // Pointer setter: Uncompilable to prevent inadvertent misuse. + template + inline void Set(S *whatever) { TYPE_CHECK(S*, v8::Primitive); } +}; + +#if defined(NAN_HAS_PROPERTY_CALLBACK_INFO_HOLDER_V2) +template<> +template +inline void ReturnValue::Set(const v8::Local &) {} +#endif + +template +class FunctionCallbackInfo { + const v8::FunctionCallbackInfo &info_; + const v8::Local data_; + + public: + explicit inline FunctionCallbackInfo( + const v8::FunctionCallbackInfo &info + , v8::Local data) : + info_(info) + , data_(data) {} + + inline ReturnValue GetReturnValue() const { + return ReturnValue(info_.GetReturnValue()); + } + +#if NODE_MAJOR_VERSION < 10 + NAN_DEPRECATED inline v8::Local Callee() const { + return info_.Callee(); + } +#endif + inline v8::Local Data() const { return data_; } + inline v8::Local Holder() const { +#if defined(V8_MAJOR_VERSION) && \ + (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && \ + (defined(V8_MINOR_VERSION) && \ + (V8_MINOR_VERSION > 5 || \ + (V8_MINOR_VERSION == 5 && defined(V8_BUILD_NUMBER) && \ + V8_BUILD_NUMBER >= 214))))) + return info_.This(); +#else + return info_.Holder(); +#endif + } + inline bool IsConstructCall() const { return info_.IsConstructCall(); } + inline int Length() const { return info_.Length(); } + inline v8::Local operator[](int i) const { return info_[i]; } + inline v8::Local This() const { return info_.This(); } + inline v8::Isolate *GetIsolate() const { return info_.GetIsolate(); } + + + protected: + static const int kHolderIndex = 0; + static const int kIsolateIndex = 1; + static const int kReturnValueDefaultValueIndex = 2; + static const int kReturnValueIndex = 3; + static const int kDataIndex = 4; + static const int kCalleeIndex = 5; + static const int kContextSaveIndex = 6; + static const int kArgsLength = 7; + + private: + NAN_DISALLOW_ASSIGN_COPY_MOVE(FunctionCallbackInfo) +}; + +template +class PropertyCallbackInfo { + const v8::PropertyCallbackInfo &info_; + const v8::Local data_; + + public: + explicit inline PropertyCallbackInfo( + const v8::PropertyCallbackInfo &info + , const v8::Local data) : + info_(info) + , data_(data) {} + + inline v8::Isolate* GetIsolate() const { return info_.GetIsolate(); } + inline v8::Local Data() const { return data_; } + inline v8::Local This() const { +#if defined(NAN_HAS_PROPERTY_CALLBACK_INFO_HOLDER_V2) + return info_.HolderV2(); +#else + return info_.This(); +#endif + } + inline v8::Local Holder() const { +#if defined(NAN_HAS_PROPERTY_CALLBACK_INFO_HOLDER_V2) + return info_.HolderV2(); +#else + return info_.Holder(); +#endif + } + inline ReturnValue GetReturnValue() const { + return ReturnValue(info_.GetReturnValue()); + } + + protected: + static const int kHolderIndex = 0; + static const int kIsolateIndex = 1; + static const int kReturnValueDefaultValueIndex = 2; + static const int kReturnValueIndex = 3; + static const int kDataIndex = 4; + static const int kThisIndex = 5; + static const int kArgsLength = 6; + + private: + NAN_DISALLOW_ASSIGN_COPY_MOVE(PropertyCallbackInfo) +}; + +namespace imp { +static +void FunctionCallbackWrapper(const v8::FunctionCallbackInfo &info) { + v8::Local obj = info.Data().As(); + FunctionCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kFunctionIndex) + .As().As()->Value())); + FunctionCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + callback(cbinfo); +} + +typedef void (*NativeFunction)(const v8::FunctionCallbackInfo &); + +#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION +static +void GetterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + GetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kGetterIndex) + .As().As()->Value())); + callback(property.As(), cbinfo); +} + +typedef void (*NativeGetter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +void SetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + SetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kSetterIndex) + .As().As()->Value())); + callback(property.As(), value, cbinfo); +} + +typedef void (*NativeSetter)( + v8::Local + , v8::Local + , const v8::PropertyCallbackInfo &); +#else +static +void GetterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + GetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kGetterIndex) + .As().As()->Value())); + callback(property, cbinfo); +} + +typedef void (*NativeGetter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +void SetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + SetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kSetterIndex) + .As().As()->Value())); + callback(property, value, cbinfo); +} + +typedef void (*NativeSetter)( + v8::Local + , v8::Local + , const v8::PropertyCallbackInfo &); +#endif + +#if NODE_MODULE_VERSION > NODE_0_12_MODULE_VERSION + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +static +v8::Intercepted PropertyGetterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyGetterIndex) + .As().As()->Value())); + return callback(property.As(), cbinfo); +} + +typedef v8::Intercepted (*NativePropertyGetter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +v8::Intercepted PropertySetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertySetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertySetterIndex) + .As().As()->Value())); + return callback(property.As(), value, cbinfo); +} + +typedef v8::Intercepted (*NativePropertySetter)( + v8::Local + , v8::Local + , const v8::PropertyCallbackInfo &); + +#else +static +void PropertyGetterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyGetterIndex) + .As().As()->Value())); + callback(property.As(), cbinfo); +} + +typedef void (*NativePropertyGetter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +void PropertySetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertySetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertySetterIndex) + .As().As()->Value())); + callback(property.As(), value, cbinfo); +} + +typedef void (*NativePropertySetter)( + v8::Local + , v8::Local + , const v8::PropertyCallbackInfo &); +#endif + +static +void PropertyEnumeratorCallbackWrapper( + const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyEnumeratorCallback callback = + reinterpret_cast(reinterpret_cast( + obj->GetInternalField(kPropertyEnumeratorIndex) + .As().As()->Value())); + callback(cbinfo); +} + +typedef void (*NativePropertyEnumerator) + (const v8::PropertyCallbackInfo &); + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +static +v8::Intercepted PropertyDeleterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyDeleterIndex) + .As().As()->Value())); + return callback(property.As(), cbinfo); +} + +typedef v8::Intercepted (NativePropertyDeleter) + (v8::Local, const v8::PropertyCallbackInfo &); + + +static +v8::Intercepted PropertyQueryCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyQueryIndex) + .As().As()->Value())); + return callback(property.As(), cbinfo); +} + +typedef v8::Intercepted (*NativePropertyQuery) + (v8::Local, const v8::PropertyCallbackInfo &); +#else +static +void PropertyDeleterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyDeleterIndex) + .As().As()->Value())); + callback(property.As(), cbinfo); +} + +typedef void (NativePropertyDeleter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +void PropertyQueryCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyQueryIndex) + .As().As()->Value())); + callback(property.As(), cbinfo); +} + +typedef void (*NativePropertyQuery) + (v8::Local, const v8::PropertyCallbackInfo &); +#endif +#else +static +void PropertyGetterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyGetterIndex) + .As().As()->Value())); + callback(property, cbinfo); +} + +typedef void (*NativePropertyGetter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +void PropertySetterCallbackWrapper( + v8::Local property + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertySetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertySetterIndex) + .As().As()->Value())); + callback(property, value, cbinfo); +} + +typedef void (*NativePropertySetter)( + v8::Local + , v8::Local + , const v8::PropertyCallbackInfo &); + +static +void PropertyEnumeratorCallbackWrapper( + const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyEnumeratorCallback callback = + reinterpret_cast(reinterpret_cast( + obj->GetInternalField(kPropertyEnumeratorIndex) + .As().As()->Value())); + callback(cbinfo); +} + +typedef void (*NativePropertyEnumerator) + (const v8::PropertyCallbackInfo &); + +static +void PropertyDeleterCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyDeleterIndex) + .As().As()->Value())); + callback(property, cbinfo); +} + +typedef void (NativePropertyDeleter) + (v8::Local, const v8::PropertyCallbackInfo &); + +static +void PropertyQueryCallbackWrapper( + v8::Local property + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + PropertyQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kPropertyQueryIndex) + .As().As()->Value())); + callback(property, cbinfo); +} + +typedef void (*NativePropertyQuery) + (v8::Local, const v8::PropertyCallbackInfo &); +#endif + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +static +v8::Intercepted IndexGetterCallbackWrapper( + uint32_t index, const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyGetterIndex) + .As().As()->Value())); + return callback(index, cbinfo); +} + +typedef v8::Intercepted (*NativeIndexGetter) + (uint32_t, const v8::PropertyCallbackInfo &); + +static +v8::Intercepted IndexSetterCallbackWrapper( + uint32_t index + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexSetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertySetterIndex) + .As().As()->Value())); + return callback(index, value, cbinfo); +} + +typedef v8::Intercepted (*NativeIndexSetter)( + uint32_t + , v8::Local + , const v8::PropertyCallbackInfo &); + +#else +static +void IndexGetterCallbackWrapper( + uint32_t index, const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexGetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyGetterIndex) + .As().As()->Value())); + callback(index, cbinfo); +} + +typedef void (*NativeIndexGetter) + (uint32_t, const v8::PropertyCallbackInfo &); +static +void IndexSetterCallbackWrapper( + uint32_t index + , v8::Local value + , const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexSetterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertySetterIndex) + .As().As()->Value())); + callback(index, value, cbinfo); +} + +typedef void (*NativeIndexSetter)( + uint32_t + , v8::Local + , const v8::PropertyCallbackInfo &); + +#endif + +static +void IndexEnumeratorCallbackWrapper( + const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexEnumeratorCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField( + kIndexPropertyEnumeratorIndex) + .As().As()->Value())); + callback(cbinfo); +} + +typedef void (*NativeIndexEnumerator) + (const v8::PropertyCallbackInfo &); + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +static +v8::Intercepted IndexDeleterCallbackWrapper( + uint32_t index, const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyDeleterIndex) + .As().As()->Value())); + return callback(index, cbinfo); +} + +typedef v8::Intercepted (*NativeIndexDeleter) + (uint32_t, const v8::PropertyCallbackInfo &); + +static +v8::Intercepted IndexQueryCallbackWrapper( + uint32_t index, const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyQueryIndex) + .As().As()->Value())); + return callback(index, cbinfo); +} + +typedef v8::Intercepted (*NativeIndexQuery) + (uint32_t, const v8::PropertyCallbackInfo &); +#else +static +void IndexDeleterCallbackWrapper( + uint32_t index, const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexDeleterCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyDeleterIndex) + .As().As()->Value())); + callback(index, cbinfo); +} + +typedef void (*NativeIndexDeleter) + (uint32_t, const v8::PropertyCallbackInfo &); + +static +void IndexQueryCallbackWrapper( + uint32_t index, const v8::PropertyCallbackInfo &info) { + v8::Local obj = info.Data().As(); + PropertyCallbackInfo + cbinfo(info, obj->GetInternalField(kDataIndex).As()); + IndexQueryCallback callback = reinterpret_cast( + reinterpret_cast( + obj->GetInternalField(kIndexPropertyQueryIndex) + .As().As()->Value())); + callback(index, cbinfo); +} + +typedef void (*NativeIndexQuery) + (uint32_t, const v8::PropertyCallbackInfo &); + +#endif +} // end of namespace imp + +#endif // NAN_CALLBACKS_12_INL_H_ diff --git a/.pnpm-store/v11/files/3f/b5627b3b1ca26609f792914a475443cf86111375b0b8df09839775f289e7a1b25668b7d4b880932434e788d675a1a813a49a682c30c0f85f7ea324306efd7c b/.pnpm-store/v11/files/3f/b5627b3b1ca26609f792914a475443cf86111375b0b8df09839775f289e7a1b25668b7d4b880932434e788d675a1a813a49a682c30c0f85f7ea324306efd7c new file mode 100644 index 00000000..95c2776c --- /dev/null +++ b/.pnpm-store/v11/files/3f/b5627b3b1ca26609f792914a475443cf86111375b0b8df09839775f289e7a1b25668b7d4b880932434e788d675a1a813a49a682c30c0f85f7ea324306efd7c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('every', require('../every')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/3f/bd87fcf542439cd7a190c8890cedd66329c096d252068e6e8b36bdf7ac0a8f01168aa73bd615805cdf40b2d7f719a7063ddb0edcf83755c7ef50cb6f499c4c b/.pnpm-store/v11/files/3f/bd87fcf542439cd7a190c8890cedd66329c096d252068e6e8b36bdf7ac0a8f01168aa73bd615805cdf40b2d7f719a7063ddb0edcf83755c7ef50cb6f499c4c new file mode 100644 index 00000000..d8fdaec3 --- /dev/null +++ b/.pnpm-store/v11/files/3f/bd87fcf542439cd7a190c8890cedd66329c096d252068e6e8b36bdf7ac0a8f01168aa73bd615805cdf40b2d7f719a7063ddb0edcf83755c7ef50cb6f499c4c @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2016 Guillermo Rauch (@rauchg) + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/.pnpm-store/v11/files/3f/cc421167de0055e38ed012a93c44fa7ea2ef6e37ff6fca60e224da958ef9d899b52ebdbc87cf68fe616b910e524def9cb15f726ce150a4601c0b7c593ed6d0 b/.pnpm-store/v11/files/3f/cc421167de0055e38ed012a93c44fa7ea2ef6e37ff6fca60e224da958ef9d899b52ebdbc87cf68fe616b910e524def9cb15f726ce150a4601c0b7c593ed6d0 new file mode 100644 index 00000000..ef8228d7 --- /dev/null +++ b/.pnpm-store/v11/files/3f/cc421167de0055e38ed012a93c44fa7ea2ef6e37ff6fca60e224da958ef9d899b52ebdbc87cf68fe616b910e524def9cb15f726ce150a4601c0b7c593ed6d0 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('union', require('../union')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/3f/de9d427f109062e9c7f04438af02112d20a2d187141d49ffaac9fd998dcedbc7b6027b3806d89962fc9ca4b7d4fb74671dfadf3b079bded5bdef93a875774a b/.pnpm-store/v11/files/3f/de9d427f109062e9c7f04438af02112d20a2d187141d49ffaac9fd998dcedbc7b6027b3806d89962fc9ca4b7d4fb74671dfadf3b079bded5bdef93a875774a new file mode 100644 index 00000000..8ad9a241 --- /dev/null +++ b/.pnpm-store/v11/files/3f/de9d427f109062e9c7f04438af02112d20a2d187141d49ffaac9fd998dcedbc7b6027b3806d89962fc9ca4b7d4fb74671dfadf3b079bded5bdef93a875774a @@ -0,0 +1,422 @@ +/* These definitions were imported from https://github.com/DefinitelyTyped/DefinitelyTyped + * and includes previous contributions from the DefinitelyTyped community by: + * - Albert Willemsen + * - Boris Yankov + * - Jessica Franco + * - Masahiro Wakame + * - Raanan Weber + * - Sergei Dorogin + * - webbiesdk + * - Andrew Leedham + * - Nils Knappmeier + * For full history prior to their migration to handlebars.js, please see: + * https://github.com/DefinitelyTyped/DefinitelyTyped/commits/1ce60bdc07f10e0b076778c6c953271c072bc894/types/handlebars/index.d.ts + */ +// TypeScript Version: 2.3 + +declare namespace Handlebars { + export interface TemplateDelegate { + (context: T, options?: RuntimeOptions): string; + } + + export type Template = TemplateDelegate|string; + + export interface RuntimeOptions { + partial?: boolean; + depths?: any[]; + helpers?: { [name: string]: Function }; + partials?: { [name: string]: Template }; + decorators?: { [name: string]: Function }; + data?: any; + blockParams?: any[]; + allowCallsToHelperMissing?: boolean; + allowedProtoProperties?: { [name: string]: boolean }; + allowedProtoMethods?: { [name: string]: boolean }; + allowProtoPropertiesByDefault?: boolean; + allowProtoMethodsByDefault?: boolean; + } + + export interface HelperOptions { + fn: TemplateDelegate; + inverse: TemplateDelegate; + hash: Record; + data?: any; + } + + export interface HelperDelegate { + (context?: any, arg1?: any, arg2?: any, arg3?: any, arg4?: any, arg5?: any, options?: HelperOptions): any; + } + export interface HelperDeclareSpec { + [key: string]: HelperDelegate; + } + + export interface ParseOptions { + srcName?: string; + ignoreStandalone?: boolean; + } + + export function registerHelper(name: string, fn: HelperDelegate): void; + export function registerHelper(name: HelperDeclareSpec): void; + export function unregisterHelper(name: string): void; + + export function registerPartial(name: string, fn: Template): void; + export function registerPartial(spec: { [name: string]: Template }): void; + export function unregisterPartial(name: string): void; + + // TODO: replace Function with actual signature + export function registerDecorator(name: string, fn: Function): void; + export function unregisterDecorator(name: string): void; + + export function K(): void; + export function createFrame(object: any): any; + export function blockParams(obj: any[], ids: any[]): any[]; + export function log(level: number, obj: any): void; + export function parse(input: string, options?: ParseOptions): hbs.AST.Program; + export function parseWithoutProcessing(input: string, options?: ParseOptions): hbs.AST.Program; + export function compile(input: any, options?: CompileOptions): HandlebarsTemplateDelegate; + export function precompile(input: any, options?: PrecompileOptions): TemplateSpecification; + export function template(precompilation: TemplateSpecification): HandlebarsTemplateDelegate; + + export function create(): typeof Handlebars; + + export const escapeExpression: typeof Utils.escapeExpression; + //export const Utils: typeof hbs.Utils; + export const logger: Logger; + export const templates: HandlebarsTemplates; + export const helpers: { [name: string]: HelperDelegate }; + export const partials: { [name: string]: any }; + // TODO: replace Function with actual signature + export const decorators: { [name: string]: Function }; + + export const VERSION: string; + + export function noConflict(): typeof Handlebars; + + export class Exception { + constructor(message: string, node?: hbs.AST.Node); + description: string; + fileName: string; + lineNumber?: any; + endLineNumber?: any; + message: string; + name: string; + number: number; + stack?: string; + column?: any; + endColumn?: any; + } + + export class SafeString { + constructor(str: string); + toString(): string; + toHTML(): string; + } + + export namespace Utils { + export function escapeExpression(str: string): string; + export function createFrame(object: any): any; + export function blockParams(obj: any[], ids: any[]): any[]; + export function isEmpty(obj: any) : boolean; + export function extend(obj: any, ...source: any[]): any; + export function toString(obj: any): string; + export function isArray(obj: any): boolean; + export function isFunction(obj: any): boolean; + } + + export namespace AST { + export const helpers: hbs.AST.helpers; + } + + interface ICompiler { + accept(node: hbs.AST.Node): void; + Program(program: hbs.AST.Program): void; + BlockStatement(block: hbs.AST.BlockStatement): void; + PartialStatement(partial: hbs.AST.PartialStatement): void; + PartialBlockStatement(partial: hbs.AST.PartialBlockStatement): void; + DecoratorBlock(decorator: hbs.AST.DecoratorBlock): void; + Decorator(decorator: hbs.AST.Decorator): void; + MustacheStatement(mustache: hbs.AST.MustacheStatement): void; + ContentStatement(content: hbs.AST.ContentStatement): void; + CommentStatement(comment?: hbs.AST.CommentStatement): void; + SubExpression(sexpr: hbs.AST.SubExpression): void; + PathExpression(path: hbs.AST.PathExpression): void; + StringLiteral(str: hbs.AST.StringLiteral): void; + NumberLiteral(num: hbs.AST.NumberLiteral): void; + BooleanLiteral(bool: hbs.AST.BooleanLiteral): void; + UndefinedLiteral(): void; + NullLiteral(): void; + Hash(hash: hbs.AST.Hash): void; + } + + export class Visitor implements ICompiler { + accept(node: hbs.AST.Node): void; + acceptKey(node: hbs.AST.Node, name: string): void; + acceptArray(arr: hbs.AST.Expression[]): void; + Program(program: hbs.AST.Program): void; + BlockStatement(block: hbs.AST.BlockStatement): void; + PartialStatement(partial: hbs.AST.PartialStatement): void; + PartialBlockStatement(partial: hbs.AST.PartialBlockStatement): void; + DecoratorBlock(decorator: hbs.AST.DecoratorBlock): void; + Decorator(decorator: hbs.AST.Decorator): void; + MustacheStatement(mustache: hbs.AST.MustacheStatement): void; + ContentStatement(content: hbs.AST.ContentStatement): void; + CommentStatement(comment?: hbs.AST.CommentStatement): void; + SubExpression(sexpr: hbs.AST.SubExpression): void; + PathExpression(path: hbs.AST.PathExpression): void; + StringLiteral(str: hbs.AST.StringLiteral): void; + NumberLiteral(num: hbs.AST.NumberLiteral): void; + BooleanLiteral(bool: hbs.AST.BooleanLiteral): void; + UndefinedLiteral(): void; + NullLiteral(): void; + Hash(hash: hbs.AST.Hash): void; + } + + + export interface ResolvePartialOptions { + name: string; + helpers?: { [name: string]: Function }; + partials?: { [name: string]: HandlebarsTemplateDelegate }; + decorators?: { [name: string]: Function }; + data?: any; + } + + export namespace VM { + /** + * @deprecated + */ + export function resolvePartial(partial: HandlebarsTemplateDelegate | undefined, context: any, options: ResolvePartialOptions): HandlebarsTemplateDelegate; + } +} + +/** +* Implement this interface on your MVW/MVVM/MVC views such as Backbone.View +**/ +interface HandlebarsTemplatable { + template: HandlebarsTemplateDelegate; +} + +// NOTE: for backward compatibility of this typing +type HandlebarsTemplateDelegate = Handlebars.TemplateDelegate; + +interface HandlebarsTemplates { + [index: string]: HandlebarsTemplateDelegate; +} + +interface TemplateSpecification { + +} + +// for backward compatibility of this typing +type RuntimeOptions = Handlebars.RuntimeOptions; + +interface CompileOptions { + data?: boolean; + compat?: boolean; + knownHelpers?: KnownHelpers; + knownHelpersOnly?: boolean; + noEscape?: boolean; + strict?: boolean; + assumeObjects?: boolean; + preventIndent?: boolean; + ignoreStandalone?: boolean; + explicitPartialContext?: boolean; +} + +type KnownHelpers = { + [name in BuiltinHelperName | CustomHelperName]: boolean; +}; + +type BuiltinHelperName = + "helperMissing"| + "blockHelperMissing"| + "each"| + "if"| + "unless"| + "with"| + "log"| + "lookup"; + +type CustomHelperName = string; + +interface PrecompileOptions extends CompileOptions { + srcName?: string; + destName?: string; +} + +declare namespace hbs { + // for backward compatibility of this typing + type SafeString = Handlebars.SafeString; + + type Utils = typeof Handlebars.Utils; +} + +interface Logger { + DEBUG: number; + INFO: number; + WARN: number; + ERROR: number; + level: number; + + methodMap: { [level: number]: string }; + + log(level: number, obj: string): void; +} + +type CompilerInfo = [number/* revision */, string /* versions */]; + +declare namespace hbs { + namespace AST { + interface Node { + type: string; + loc: SourceLocation; + } + + interface SourceLocation { + source: string; + start: Position; + end: Position; + } + + interface Position { + line: number; + column: number; + } + + interface Program extends Node { + body: Statement[]; + blockParams: string[]; + } + + interface Statement extends Node {} + + interface MustacheStatement extends Statement { + type: 'MustacheStatement'; + path: PathExpression | Literal; + params: Expression[]; + hash: Hash; + escaped: boolean; + strip: StripFlags; + } + + interface Decorator extends MustacheStatement { } + + interface BlockStatement extends Statement { + type: 'BlockStatement'; + path: PathExpression; + params: Expression[]; + hash: Hash; + program: Program; + inverse: Program; + openStrip: StripFlags; + inverseStrip: StripFlags; + closeStrip: StripFlags; + } + + interface DecoratorBlock extends BlockStatement { } + + interface PartialStatement extends Statement { + type: 'PartialStatement'; + name: PathExpression | SubExpression; + params: Expression[]; + hash: Hash; + indent: string; + strip: StripFlags; + } + + interface PartialBlockStatement extends Statement { + type: 'PartialBlockStatement'; + name: PathExpression | SubExpression; + params: Expression[]; + hash: Hash; + program: Program; + openStrip: StripFlags; + closeStrip: StripFlags; + } + + interface ContentStatement extends Statement { + type: 'ContentStatement'; + value: string; + original: StripFlags; + } + + interface CommentStatement extends Statement { + type: 'CommentStatement'; + value: string; + strip: StripFlags; + } + + interface Expression extends Node {} + + interface SubExpression extends Expression { + type: 'SubExpression'; + path: PathExpression; + params: Expression[]; + hash: Hash; + } + + interface PathExpression extends Expression { + type: 'PathExpression'; + data: boolean; + depth: number; + parts: string[]; + original: string; + } + + interface Literal extends Expression {} + interface StringLiteral extends Literal { + type: 'StringLiteral'; + value: string; + original: string; + } + + interface BooleanLiteral extends Literal { + type: 'BooleanLiteral'; + value: boolean; + original: boolean; + } + + interface NumberLiteral extends Literal { + type: 'NumberLiteral'; + value: number; + original: number; + } + + interface UndefinedLiteral extends Literal { + type: 'UndefinedLiteral'; + } + + interface NullLiteral extends Literal { + type: 'NullLiteral'; + } + + interface Hash extends Node { + type: 'Hash'; + pairs: HashPair[]; + } + + interface HashPair extends Node { + type: 'HashPair'; + key: string; + value: Expression; + } + + interface StripFlags { + open: boolean; + close: boolean; + } + + interface helpers { + helperExpression(node: Node): boolean; + scopeId(path: PathExpression): boolean; + simpleId(path: PathExpression): boolean; + } + } +} + +declare module "handlebars" { + export = Handlebars; +} + +declare module "handlebars/runtime" { + export = Handlebars; +} diff --git a/.pnpm-store/v11/files/40/16d5775b766e1e96b1d88acf767c96263f01a577c2b2c758e26d41e45ddca2653ccb57ceb9999edae98c63da2ed24ef65c9006e93bc4e6d421b8a038cd3276 b/.pnpm-store/v11/files/40/16d5775b766e1e96b1d88acf767c96263f01a577c2b2c758e26d41e45ddca2653ccb57ceb9999edae98c63da2ed24ef65c9006e93bc4e6d421b8a038cd3276 new file mode 100644 index 00000000..969cbe56 --- /dev/null +++ b/.pnpm-store/v11/files/40/16d5775b766e1e96b1d88acf767c96263f01a577c2b2c758e26d41e45ddca2653ccb57ceb9999edae98c63da2ed24ef65c9006e93bc4e6d421b8a038cd3276 @@ -0,0 +1,60 @@ +{ + "name": "extglob", + "description": "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.", + "version": "0.3.2", + "homepage": "https://github.com/jonschlinkert/extglob", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/extglob.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/extglob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "devDependencies": { + "ansi-green": "^0.1.1", + "micromatch": "^2.1.6", + "minimatch": "^2.0.1", + "minimist": "^1.1.0", + "mocha": "*", + "should": "*", + "success-symbol": "^0.1.0" + }, + "keywords": [ + "bash", + "extended", + "extglob", + "glob", + "ksh", + "match", + "wildcard" + ], + "verb": { + "related": { + "list": [ + "micromatch", + "expand-brackets", + "braces", + "fill-range", + "expand-range" + ] + } + } +} diff --git a/.pnpm-store/v11/files/40/2757b9075dc4fe7a4467692d7110cf52efce013762a3cbcaa5e9f53f7982a47e0c6219e96ae2b2b9f56de82ec0317571c69f08d24f115c0f5f41a2338a4556-exec b/.pnpm-store/v11/files/40/2757b9075dc4fe7a4467692d7110cf52efce013762a3cbcaa5e9f53f7982a47e0c6219e96ae2b2b9f56de82ec0317571c69f08d24f115c0f5f41a2338a4556-exec new file mode 100755 index 00000000..d30d13f8 --- /dev/null +++ b/.pnpm-store/v11/files/40/2757b9075dc4fe7a4467692d7110cf52efce013762a3cbcaa5e9f53f7982a47e0c6219e96ae2b2b9f56de82ec0317571c69f08d24f115c0f5f41a2338a4556-exec @@ -0,0 +1,3 @@ +declare module "console" { + export = console; +} diff --git a/.pnpm-store/v11/files/40/29b07a46b5ceddbf8ae3064ee0570af7d363ca5791e923f1b19bbd685f8eccff6221238edc4a876da6d9b9849525b41e1c2c2858acfdadad9a38939e85b694 b/.pnpm-store/v11/files/40/29b07a46b5ceddbf8ae3064ee0570af7d363ca5791e923f1b19bbd685f8eccff6221238edc4a876da6d9b9849525b41e1c2c2858acfdadad9a38939e85b694 new file mode 100644 index 00000000..de516927 --- /dev/null +++ b/.pnpm-store/v11/files/40/29b07a46b5ceddbf8ae3064ee0570af7d363ca5791e923f1b19bbd685f8eccff6221238edc4a876da6d9b9849525b41e1c2c2858acfdadad9a38939e85b694 @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Component contributors + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/40/2a8ff6fbb0a558ccf316ae7d42110a79a7102c51475bf16c4ea4ffd0c1df7afb8647fcb4cc53a17bb22ccc7ce862d40a4926327ef6ed1f368eaf164f015273 b/.pnpm-store/v11/files/40/2a8ff6fbb0a558ccf316ae7d42110a79a7102c51475bf16c4ea4ffd0c1df7afb8647fcb4cc53a17bb22ccc7ce862d40a4926327ef6ed1f368eaf164f015273 new file mode 100644 index 00000000..4f1dfb41 --- /dev/null +++ b/.pnpm-store/v11/files/40/2a8ff6fbb0a558ccf316ae7d42110a79a7102c51475bf16c4ea4ffd0c1df7afb8647fcb4cc53a17bb22ccc7ce862d40a4926327ef6ed1f368eaf164f015273 @@ -0,0 +1 @@ +console.log(require('path').relative('.', __dirname)); diff --git a/.pnpm-store/v11/files/40/3bcd1a2d7fba2c7bfc82456800863cdc5a63a8de56ce87a01adc008d01d70a92838c9108f6a61012b964e101f059ca9e9ba4a5b02cfc11b299b9324a5ea95d b/.pnpm-store/v11/files/40/3bcd1a2d7fba2c7bfc82456800863cdc5a63a8de56ce87a01adc008d01d70a92838c9108f6a61012b964e101f059ca9e9ba4a5b02cfc11b299b9324a5ea95d new file mode 100644 index 00000000..4f05ebe9 --- /dev/null +++ b/.pnpm-store/v11/files/40/3bcd1a2d7fba2c7bfc82456800863cdc5a63a8de56ce87a01adc008d01d70a92838c9108f6a61012b964e101f059ca9e9ba4a5b02cfc11b299b9324a5ea95d @@ -0,0 +1,26 @@ +var baseIteratee = require('./_baseIteratee'), + baseSortedUniq = require('./_baseSortedUniq'); + +/** + * This method is like `_.uniqBy` except that it's designed and optimized + * for sorted arrays. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); + * // => [1.1, 2.3] + */ +function sortedUniqBy(array, iteratee) { + return (array && array.length) + ? baseSortedUniq(array, baseIteratee(iteratee, 2)) + : []; +} + +module.exports = sortedUniqBy; diff --git a/.pnpm-store/v11/files/40/3d37e9da3988f2d272adcdfb4d10338d3976a47340222d94ea1102c309df60afbe8c53bbfd5fb8eac423bd7939ca78951aaf8bea48bb4631aad55fa1b9f090 b/.pnpm-store/v11/files/40/3d37e9da3988f2d272adcdfb4d10338d3976a47340222d94ea1102c309df60afbe8c53bbfd5fb8eac423bd7939ca78951aaf8bea48bb4631aad55fa1b9f090 new file mode 100644 index 00000000..3ee27b52 --- /dev/null +++ b/.pnpm-store/v11/files/40/3d37e9da3988f2d272adcdfb4d10338d3976a47340222d94ea1102c309df60afbe8c53bbfd5fb8eac423bd7939ca78951aaf8bea48bb4631aad55fa1b9f090 @@ -0,0 +1,144 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +declare namespace Reflect { + /** + * Calls the function with the specified object as the this value + * and the elements of specified array as the arguments. + * @param target The function to call. + * @param thisArgument The object to be used as the this object. + * @param argumentsList An array of argument values to be passed to the function. + */ + function apply( + target: (this: T, ...args: A) => R, + thisArgument: T, + argumentsList: Readonly, + ): R; + function apply(target: Function, thisArgument: any, argumentsList: ArrayLike): any; + + /** + * Constructs the target with the elements of specified array as the arguments + * and the specified constructor as the `new.target` value. + * @param target The constructor to invoke. + * @param argumentsList An array of argument values to be passed to the constructor. + * @param newTarget The constructor to be used as the `new.target` object. + */ + function construct( + target: new (...args: A) => R, + argumentsList: Readonly, + newTarget?: new (...args: any) => any, + ): R; + function construct(target: Function, argumentsList: ArrayLike, newTarget?: Function): any; + + /** + * Adds a property to an object, or modifies attributes of an existing property. + * @param target Object on which to add or modify the property. This can be a native JavaScript object + * (that is, a user-defined object or a built in object) or a DOM object. + * @param propertyKey The property name. + * @param attributes Descriptor for the property. It can be for a data property or an accessor property. + */ + function defineProperty(target: object, propertyKey: PropertyKey, attributes: PropertyDescriptor & ThisType): boolean; + + /** + * Removes a property from an object, equivalent to `delete target[propertyKey]`, + * except it won't throw if `target[propertyKey]` is non-configurable. + * @param target Object from which to remove the own property. + * @param propertyKey The property name. + */ + function deleteProperty(target: object, propertyKey: PropertyKey): boolean; + + /** + * Gets the property of target, equivalent to `target[propertyKey]` when `receiver === target`. + * @param target Object that contains the property on itself or in its prototype chain. + * @param propertyKey The property name. + * @param receiver The reference to use as the `this` value in the getter function, + * if `target[propertyKey]` is an accessor property. + */ + function get( + target: T, + propertyKey: P, + receiver?: unknown, + ): P extends keyof T ? T[P] : any; + + /** + * Gets the own property descriptor of the specified object. + * An own property descriptor is one that is defined directly on the object and is not inherited from the object's prototype. + * @param target Object that contains the property. + * @param propertyKey The property name. + */ + function getOwnPropertyDescriptor( + target: T, + propertyKey: P, + ): TypedPropertyDescriptor

| undefined; + + /** + * Returns the prototype of an object. + * @param target The object that references the prototype. + */ + function getPrototypeOf(target: object): object | null; + + /** + * Equivalent to `propertyKey in target`. + * @param target Object that contains the property on itself or in its prototype chain. + * @param propertyKey Name of the property. + */ + function has(target: object, propertyKey: PropertyKey): boolean; + + /** + * Returns a value that indicates whether new properties can be added to an object. + * @param target Object to test. + */ + function isExtensible(target: object): boolean; + + /** + * Returns the string and symbol keys of the own properties of an object. The own properties of an object + * are those that are defined directly on that object, and are not inherited from the object's prototype. + * @param target Object that contains the own properties. + */ + function ownKeys(target: object): (string | symbol)[]; + + /** + * Prevents the addition of new properties to an object. + * @param target Object to make non-extensible. + * @return Whether the object has been made non-extensible. + */ + function preventExtensions(target: object): boolean; + + /** + * Sets the property of target, equivalent to `target[propertyKey] = value` when `receiver === target`. + * @param target Object that contains the property on itself or in its prototype chain. + * @param propertyKey Name of the property. + * @param receiver The reference to use as the `this` value in the setter function, + * if `target[propertyKey]` is an accessor property. + */ + function set( + target: T, + propertyKey: P, + value: P extends keyof T ? T[P] : any, + receiver?: any, + ): boolean; + function set(target: object, propertyKey: PropertyKey, value: any, receiver?: any): boolean; + + /** + * Sets the prototype of a specified object o to object proto or null. + * @param target The object to change its prototype. + * @param proto The value of the new prototype or null. + * @return Whether setting the prototype was successful. + */ + function setPrototypeOf(target: object, proto: object | null): boolean; +} diff --git a/.pnpm-store/v11/files/40/559a2c4890535b3f265ac188e40c0e38e43cf99c82b576117419dfdf05f3075b1accee5609a4a890bfc8f279cc40d718ab2016d791527a4623811de132e71b b/.pnpm-store/v11/files/40/559a2c4890535b3f265ac188e40c0e38e43cf99c82b576117419dfdf05f3075b1accee5609a4a890bfc8f279cc40d718ab2016d791527a4623811de132e71b new file mode 100644 index 00000000..d4c6ae0d --- /dev/null +++ b/.pnpm-store/v11/files/40/559a2c4890535b3f265ac188e40c0e38e43cf99c82b576117419dfdf05f3075b1accee5609a4a890bfc8f279cc40d718ab2016d791527a4623811de132e71b @@ -0,0 +1,16 @@ +range-set ::= range ( logical-or range ) * +logical-or ::= ( ' ' ) * '||' ( ' ' ) * +range ::= hyphen | simple ( ' ' simple ) * | '' +hyphen ::= partial ' - ' partial +simple ::= primitive | partial | tilde | caret +primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial +partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? +xr ::= 'x' | 'X' | '*' | nr +nr ::= '0' | [1-9] ( [0-9] ) * +tilde ::= '~' partial +caret ::= '^' partial +qualifier ::= ( '-' pre )? ( '+' build )? +pre ::= parts +build ::= parts +parts ::= part ( '.' part ) * +part ::= nr | [-0-9A-Za-z]+ diff --git a/.pnpm-store/v11/files/40/7771c9af4e4b39bb83ae0ddc2d15a46ff6191c0a5f39449a0133a996c1702aba288baca1dcda0b01a5643a70844a1c4c86a66851c50b839b7c6149c624a783 b/.pnpm-store/v11/files/40/7771c9af4e4b39bb83ae0ddc2d15a46ff6191c0a5f39449a0133a996c1702aba288baca1dcda0b01a5643a70844a1c4c86a66851c50b839b7c6149c624a783 new file mode 100644 index 00000000..85dddb46 --- /dev/null +++ b/.pnpm-store/v11/files/40/7771c9af4e4b39bb83ae0ddc2d15a46ff6191c0a5f39449a0133a996c1702aba288baca1dcda0b01a5643a70844a1c4c86a66851c50b839b7c6149c624a783 @@ -0,0 +1,2630 @@ +/** + * lodash (Custom Build) + * Build: `lodash modularize exports="npm" -o ./` + * Copyright jQuery Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */ + +/** Used as the size to enable large array optimizations. */ +var LARGE_ARRAY_SIZE = 200; + +/** Used as the `TypeError` message for "Functions" methods. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** Used to stand-in for `undefined` hash values. */ +var HASH_UNDEFINED = '__lodash_hash_undefined__'; + +/** Used to compose bitmasks for comparison styles. */ +var UNORDERED_COMPARE_FLAG = 1, + PARTIAL_COMPARE_FLAG = 2; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to match property names within property paths. */ +var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + reLeadingDot = /^\./, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + return freeProcess && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array ? array.length : 0, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ +function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; +} + +/** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ +function arraySome(array, predicate) { + var index = -1, + length = array ? array.length : 0; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; +} + +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Checks if `value` is a host object in IE < 9. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a host object, else `false`. + */ +function isHostObject(value) { + // Many host objects are `Object` objects that can coerce to strings + // despite having improperly defined `toString` methods. + var result = false; + if (value != null && typeof value.toString != 'function') { + try { + result = !!(value + ''); + } catch (e) {} + } + return result; +} + +/** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ +function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function(value, key) { + result[++index] = [key, value]; + }); + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ +function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = value; + }); + return result; +} + +/** Used for built-in method references. */ +var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var objectToString = objectProto.toString; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** Built-in value references. */ +var Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max; + +/* Built-in method references that are verified to be native. */ +var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + +/** Used to detect maps, sets, and weakmaps. */ +var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Hash(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ +function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; +} + +/** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function hashDelete(key) { + return this.has(key) && delete this.__data__[key]; +} + +/** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; +} + +/** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function hashHas(key) { + var data = this.__data__; + return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); +} + +/** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ +function hashSet(key, value) { + var data = this.__data__; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; +} + +// Add methods to `Hash`. +Hash.prototype.clear = hashClear; +Hash.prototype['delete'] = hashDelete; +Hash.prototype.get = hashGet; +Hash.prototype.has = hashHas; +Hash.prototype.set = hashSet; + +/** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function ListCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ +function listCacheClear() { + this.__data__ = []; +} + +/** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + return true; +} + +/** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; +} + +/** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; +} + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +// Add methods to `ListCache`. +ListCache.prototype.clear = listCacheClear; +ListCache.prototype['delete'] = listCacheDelete; +ListCache.prototype.get = listCacheGet; +ListCache.prototype.has = listCacheHas; +ListCache.prototype.set = listCacheSet; + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries ? entries.length : 0; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +/** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ +function mapCacheClear() { + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; +} + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + return getMapData(this, key)['delete'](key); +} + +/** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function mapCacheGet(key) { + return getMapData(this, key).get(key); +} + +/** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function mapCacheHas(key) { + return getMapData(this, key).has(key); +} + +/** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ +function mapCacheSet(key, value) { + getMapData(this, key).set(key, value); + return this; +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values ? values.length : 0; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +/** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ +function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; +} + +/** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ +function setCacheHas(value) { + return this.__data__.has(value); +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +/** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function Stack(entries) { + this.__data__ = new ListCache(entries); +} + +/** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ +function stackClear() { + this.__data__ = new ListCache; +} + +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + return this.__data__['delete'](key); +} + +/** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ +function stackGet(key) { + return this.__data__.get(key); +} + +/** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ +function stackHas(key) { + return this.__data__.has(key); +} + +/** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ +function stackSet(key, value) { + var cache = this.__data__; + if (cache instanceof ListCache) { + var pairs = cache.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + return this; + } + cache = this.__data__ = new MapCache(pairs); + } + cache.set(key, value); + return this; +} + +// Add methods to `Stack`. +Stack.prototype.clear = stackClear; +Stack.prototype['delete'] = stackDelete; +Stack.prototype.get = stackGet; +Stack.prototype.has = stackHas; +Stack.prototype.set = stackSet; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + // Safari 9 makes `arguments.length` enumerable in strict mode. + var result = (isArray(value) || isArguments(value)) + ? baseTimes(value.length, String) + : []; + + var length = result.length, + skipIndexes = !!length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && (key == 'length' || isIndex(key, length)))) { + result.push(key); + } + } + return result; +} + +/** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; +} + +/** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEach = createBaseEach(baseForOwn); + +/** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ +function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; +} + +/** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseFor = createBaseFor(); + +/** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ +function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); +} + +/** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ +function baseGet(object, path) { + path = isKey(path, object) ? [path] : castPath(path); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; +} + +/** + * The base implementation of `getTag`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + return objectToString.call(value); +} + +/** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ +function baseHasIn(object, key) { + return object != null && key in Object(object); +} + +/** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {Function} [customizer] The function to customize comparisons. + * @param {boolean} [bitmask] The bitmask of comparison flags. + * The bitmask may be composed of the following flags: + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ +function baseIsEqual(value, other, customizer, bitmask, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); +} + +/** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} [customizer] The function to customize comparisons. + * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = arrayTag, + othTag = arrayTag; + + if (!objIsArr) { + objTag = getTag(object); + objTag = objTag == argsTag ? objectTag : objTag; + } + if (!othIsArr) { + othTag = getTag(other); + othTag = othTag == argsTag ? objectTag : othTag; + } + var objIsObj = objTag == objectTag && !isHostObject(object), + othIsObj = othTag == objectTag && !isHostObject(other), + isSameTag = objTag == othTag; + + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, equalFunc, customizer, bitmask, stack) + : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack); + } + if (!(bitmask & PARTIAL_COMPARE_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, equalFunc, customizer, bitmask, stack); +} + +/** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ +function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack) + : result + )) { + return false; + } + } + } + return true; +} + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; +} + +/** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ +function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); +} + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function(value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; +} + +/** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function(object) { + return object === source || baseIsMatch(object, source, matchData); + }; +} + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); + }; +} + +/** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ +function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); + + var result = baseMap(collection, function(value, key, collection) { + var criteria = arrayMap(iteratees, function(iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function(object, other) { + return compareMultiple(object, other, orders); + }); +} + +/** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function basePropertyDeep(path) { + return function(object) { + return baseGet(object, path); + }; +} + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = array; + return apply(func, this, otherArgs); + }; +} + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ +function castPath(value) { + return isArray(value) ? value : stringToPath(value); +} + +/** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ +function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; +} + +/** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ +function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; +} + +/** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseEach(eachFunc, fromRight) { + return function(collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; +} + +/** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ +function createBaseFor(fromRight) { + return function(object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; +} + +/** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ +function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function(othValue, othIndex) { + if (!seen.has(othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) { + return seen.add(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, customizer, bitmask, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; +} + +/** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & PARTIAL_COMPARE_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= UNORDERED_COMPARE_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; +} + +/** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Function} customizer The function to customize comparisons. + * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` + * for more details. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ +function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { + var isPartial = bitmask & PARTIAL_COMPARE_FLAG, + objProps = keys(object), + objLength = objProps.length, + othProps = keys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; +} + +/** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ +function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; +} + +/** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ +function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +var getTag = baseGetTag; + +// Fallback for data views, maps, sets, and weak maps in IE 11, +// for data views in Edge < 14, and promises in Node.js. +if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function(value) { + var result = objectToString.call(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : undefined; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: return dataViewTag; + case mapCtorString: return mapTag; + case promiseCtorString: return promiseTag; + case setCtorString: return setTag; + case weakMapCtorString: return weakMapTag; + } + } + return result; + }; +} + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = isKey(path, object) ? [path] : castPath(path); + + var result, + index = -1, + length = path.length; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result) { + return result; + } + var length = object ? object.length : 0; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + length = length == null ? MAX_SAFE_INTEGER : length; + return !!length && + (typeof value == 'number' || reIsUint.test(value)) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +/** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ +function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); +} + +/** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ +function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); +} + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; +} + +/** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ +function isStrictComparable(value) { + return value === value && !isObject(value); +} + +/** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function matchesStrictComparable(key, srcValue) { + return function(object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; +} + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoize(function(string) { + string = toString(string); + + var result = []; + if (reLeadingDot.test(string)) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, string) { + result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +/** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ +function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to process. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, function(o) { return o.user; }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + * + * _.sortBy(users, 'user', function(o) { + * return Math.floor(o.age / 10); + * }); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + */ +var sortBy = baseRest(function(collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); +}); + +/** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ +function memoize(func, resolver) { + if (typeof func != 'function' || (resolver && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function() { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result); + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; +} + +// Assign cache to `_.memoize`. +memoize.Cache = MapCache; + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +function isArguments(value) { + // Safari 8.1 makes `arguments.callee` enumerable in strict mode. + return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && + (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ +function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); +} + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 8-9 which returns 'object' for typed array and other constructors. + var tag = isObject(value) ? objectToString.call(value) : ''; + return tag == funcTag || tag == genTag; +} + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return !!value && (type == 'object' || type == 'function'); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return !!value && typeof value == 'object'; +} + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && objectToString.call(value) == symbolTag); +} + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {string} Returns the string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ +function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; +} + +/** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ +function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ +function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); +} + +module.exports = sortBy; diff --git a/.pnpm-store/v11/files/40/93811a45df1f7b47e8c0adee713604c745c395ad1b28a221bb2b25354d84f904abd2a6d17024fbb42eaadadd4a27389f56af73ac759cc85c43a98e2876aaa5 b/.pnpm-store/v11/files/40/93811a45df1f7b47e8c0adee713604c745c395ad1b28a221bb2b25354d84f904abd2a6d17024fbb42eaadadd4a27389f56af73ac759cc85c43a98e2876aaa5 new file mode 100644 index 00000000..901c8aae --- /dev/null +++ b/.pnpm-store/v11/files/40/93811a45df1f7b47e8c0adee713604c745c395ad1b28a221bb2b25354d84f904abd2a6d17024fbb42eaadadd4a27389f56af73ac759cc85c43a98e2876aaa5 @@ -0,0 +1,82 @@ +# Release history + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +

+ Guiding Principles + +- Changelogs are for humans, not machines. +- There should be an entry for every single version. +- The same types of changes should be grouped. +- Versions and sections should be linkable. +- The latest version comes first. +- The release date of each versions is displayed. +- Mention whether you follow Semantic Versioning. + +
+ +
+ Types of changes + +Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_): + +- `Added` for new features. +- `Changed` for changes in existing functionality. +- `Deprecated` for soon-to-be removed features. +- `Removed` for now removed features. +- `Fixed` for any bug fixes. +- `Security` in case of vulnerabilities. + +
+ +## [2.0.0] - 2017-04-20 + +### Changed + +- Now supports data descriptors in addition to accessor descriptors. +- Now uses [Reflect.defineProperty][reflect] when available, otherwise falls back to [Object.defineProperty][object]. + +## [1.0.0] - 2017-04-20 + +- stable release + +## [0.2.5] - 2015-08-31 + +- use is-descriptor + +## [0.2.3] - 2015-08-29 + +- check keys length + +## [0.2.2] - 2015-08-27 + +- ensure val is an object + +## [0.2.1] - 2015-08-27 + +- support functions + +## [0.2.0] - 2015-08-27 + +- support get/set +- update docs + +## [0.1.0] - 2015-08-12 + +- first commit + +[2.0.0]: https://github.com/jonschlinkert/define-property/compare/1.0.0...2.0.0 +[1.0.0]: https://github.com/jonschlinkert/define-property/compare/0.2.5...1.0.0 +[0.2.5]: https://github.com/jonschlinkert/define-property/compare/0.2.3...0.2.5 +[0.2.3]: https://github.com/jonschlinkert/define-property/compare/0.2.2...0.2.3 +[0.2.2]: https://github.com/jonschlinkert/define-property/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/jonschlinkert/define-property/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/jonschlinkert/define-property/compare/0.1.3...0.2.0 + +[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog + +[object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty +[reflect]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/defineProperty diff --git a/.pnpm-store/v11/files/40/f1a914267e1eef6d5fc356c635ce858279d71c4e1f22792af30ac1488413b5b659da198ceb8a5434cf30e83b5006568b0845eeef691dbf72ba3caf20ae3bee b/.pnpm-store/v11/files/40/f1a914267e1eef6d5fc356c635ce858279d71c4e1f22792af30ac1488413b5b659da198ceb8a5434cf30e83b5006568b0845eeef691dbf72ba3caf20ae3bee new file mode 100644 index 00000000..a7868f17 --- /dev/null +++ b/.pnpm-store/v11/files/40/f1a914267e1eef6d5fc356c635ce858279d71c4e1f22792af30ac1488413b5b659da198ceb8a5434cf30e83b5006568b0845eeef691dbf72ba3caf20ae3bee @@ -0,0 +1,25 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface String { + /** + * Returns a new String consisting of the single UTF-16 code unit located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): string | undefined; +} diff --git a/.pnpm-store/v11/files/40/feb647909018b76e67f6dea5855d858877b89689087a142d81a9d078745b9ea1b55d66e29e1c0ee814faef5231ada88bc96551fb95ec428c8850db306214c4-exec b/.pnpm-store/v11/files/40/feb647909018b76e67f6dea5855d858877b89689087a142d81a9d078745b9ea1b55d66e29e1c0ee814faef5231ada88bc96551fb95ec428c8850db306214c4-exec new file mode 100755 index 00000000..80c558bf --- /dev/null +++ b/.pnpm-store/v11/files/40/feb647909018b76e67f6dea5855d858877b89689087a142d81a9d078745b9ea1b55d66e29e1c0ee814faef5231ada88bc96551fb95ec428c8850db306214c4-exec @@ -0,0 +1,16 @@ +declare module 'domain' { + import EventEmitter = require('events'); + + class Domain extends EventEmitter implements NodeJS.Domain { + run(fn: Function): void; + add(emitter: EventEmitter): void; + remove(emitter: EventEmitter): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + members: any[]; + enter(): void; + exit(): void; + } + + function create(): Domain; +} diff --git a/.pnpm-store/v11/files/41/0287dc9b97eafafcf27c468a6acbdf68337722d9a7ce0fd6d33e027c1d220cbb20f06ac81a4e0da7d0a1e52daa4944a9d28010af8e93761f881e04f0bc62e6 b/.pnpm-store/v11/files/41/0287dc9b97eafafcf27c468a6acbdf68337722d9a7ce0fd6d33e027c1d220cbb20f06ac81a4e0da7d0a1e52daa4944a9d28010af8e93761f881e04f0bc62e6 new file mode 100644 index 00000000..bad9e125 --- /dev/null +++ b/.pnpm-store/v11/files/41/0287dc9b97eafafcf27c468a6acbdf68337722d9a7ce0fd6d33e027c1d220cbb20f06ac81a4e0da7d0a1e52daa4944a9d28010af8e93761f881e04f0bc62e6 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('without', require('../without')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/41/0656aa6ce7d735817b3890cc3f62702c7c11d3d115c1a224266435dcb43d4d25677a754bbf4bc4a094aa809fc6796e8a12ecd48f546456b43257825160490e b/.pnpm-store/v11/files/41/0656aa6ce7d735817b3890cc3f62702c7c11d3d115c1a224266435dcb43d4d25677a754bbf4bc4a094aa809fc6796e8a12ecd48f546456b43257825160490e new file mode 100644 index 00000000..26c1d562 --- /dev/null +++ b/.pnpm-store/v11/files/41/0656aa6ce7d735817b3890cc3f62702c7c11d3d115c1a224266435dcb43d4d25677a754bbf4bc4a094aa809fc6796e8a12ecd48f546456b43257825160490e @@ -0,0 +1,289 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (tasks, concurrency, callback) { + if (typeof concurrency === 'function') { + // concurrency is optional, shift the args. + callback = concurrency; + concurrency = null; + } + callback = (0, _once2.default)(callback || _noop2.default); + var keys = (0, _keys2.default)(tasks); + var numTasks = keys.length; + if (!numTasks) { + return callback(null); + } + if (!concurrency) { + concurrency = numTasks; + } + + var results = {}; + var runningTasks = 0; + var hasError = false; + + var listeners = Object.create(null); + + var readyTasks = []; + + // for cycle detection: + var readyToCheck = []; // tasks that have been identified as reachable + // without the possibility of returning to an ancestor task + var uncheckedDependencies = {}; + + (0, _baseForOwn2.default)(tasks, function (task, key) { + if (!(0, _isArray2.default)(task)) { + // no dependencies + enqueueTask(key, [task]); + readyToCheck.push(key); + return; + } + + var dependencies = task.slice(0, task.length - 1); + var remainingDependencies = dependencies.length; + if (remainingDependencies === 0) { + enqueueTask(key, task); + readyToCheck.push(key); + return; + } + uncheckedDependencies[key] = remainingDependencies; + + (0, _arrayEach2.default)(dependencies, function (dependencyName) { + if (!tasks[dependencyName]) { + throw new Error('async.auto task `' + key + '` has a non-existent dependency `' + dependencyName + '` in ' + dependencies.join(', ')); + } + addListener(dependencyName, function () { + remainingDependencies--; + if (remainingDependencies === 0) { + enqueueTask(key, task); + } + }); + }); + }); + + checkForDeadlocks(); + processQueue(); + + function enqueueTask(key, task) { + readyTasks.push(function () { + runTask(key, task); + }); + } + + function processQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + return callback(null, results); + } + while (readyTasks.length && runningTasks < concurrency) { + var run = readyTasks.shift(); + run(); + } + } + + function addListener(taskName, fn) { + var taskListeners = listeners[taskName]; + if (!taskListeners) { + taskListeners = listeners[taskName] = []; + } + + taskListeners.push(fn); + } + + function taskComplete(taskName) { + var taskListeners = listeners[taskName] || []; + (0, _arrayEach2.default)(taskListeners, function (fn) { + fn(); + }); + processQueue(); + } + + function runTask(key, task) { + if (hasError) return; + + var taskCallback = (0, _onlyOnce2.default)(function (err, result) { + runningTasks--; + if (arguments.length > 2) { + result = (0, _slice2.default)(arguments, 1); + } + if (err) { + var safeResults = {}; + (0, _baseForOwn2.default)(results, function (val, rkey) { + safeResults[rkey] = val; + }); + safeResults[key] = result; + hasError = true; + listeners = Object.create(null); + + callback(err, safeResults); + } else { + results[key] = result; + taskComplete(key); + } + }); + + runningTasks++; + var taskFn = (0, _wrapAsync2.default)(task[task.length - 1]); + if (task.length > 1) { + taskFn(results, taskCallback); + } else { + taskFn(taskCallback); + } + } + + function checkForDeadlocks() { + // Kahn's algorithm + // https://en.wikipedia.org/wiki/Topological_sorting#Kahn.27s_algorithm + // http://connalle.blogspot.com/2013/10/topological-sortingkahn-algorithm.html + var currentTask; + var counter = 0; + while (readyToCheck.length) { + currentTask = readyToCheck.pop(); + counter++; + (0, _arrayEach2.default)(getDependents(currentTask), function (dependent) { + if (--uncheckedDependencies[dependent] === 0) { + readyToCheck.push(dependent); + } + }); + } + + if (counter !== numTasks) { + throw new Error('async.auto cannot execute tasks due to a recursive dependency'); + } + } + + function getDependents(taskName) { + var result = []; + (0, _baseForOwn2.default)(tasks, function (task, key) { + if ((0, _isArray2.default)(task) && (0, _baseIndexOf2.default)(task, taskName, 0) >= 0) { + result.push(key); + } + }); + return result; + } +}; + +var _arrayEach = require('lodash/_arrayEach'); + +var _arrayEach2 = _interopRequireDefault(_arrayEach); + +var _baseForOwn = require('lodash/_baseForOwn'); + +var _baseForOwn2 = _interopRequireDefault(_baseForOwn); + +var _baseIndexOf = require('lodash/_baseIndexOf'); + +var _baseIndexOf2 = _interopRequireDefault(_baseIndexOf); + +var _isArray = require('lodash/isArray'); + +var _isArray2 = _interopRequireDefault(_isArray); + +var _keys = require('lodash/keys'); + +var _keys2 = _interopRequireDefault(_keys); + +var _noop = require('lodash/noop'); + +var _noop2 = _interopRequireDefault(_noop); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _once = require('./internal/once'); + +var _once2 = _interopRequireDefault(_once); + +var _onlyOnce = require('./internal/onlyOnce'); + +var _onlyOnce2 = _interopRequireDefault(_onlyOnce); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * Determines the best order for running the {@link AsyncFunction}s in `tasks`, based on + * their requirements. Each function can optionally depend on other functions + * being completed first, and each function is run as soon as its requirements + * are satisfied. + * + * If any of the {@link AsyncFunction}s pass an error to their callback, the `auto` sequence + * will stop. Further tasks will not execute (so any other functions depending + * on it will not run), and the main `callback` is immediately called with the + * error. + * + * {@link AsyncFunction}s also receive an object containing the results of functions which + * have completed so far as the first argument, if they have dependencies. If a + * task function has no dependencies, it will only be passed a callback. + * + * @name auto + * @static + * @memberOf module:ControlFlow + * @method + * @category Control Flow + * @param {Object} tasks - An object. Each of its properties is either a + * function or an array of requirements, with the {@link AsyncFunction} itself the last item + * in the array. The object's key of a property serves as the name of the task + * defined by that property, i.e. can be used when specifying requirements for + * other tasks. The function receives one or two arguments: + * * a `results` object, containing the results of the previously executed + * functions, only passed if the task has any dependencies, + * * a `callback(err, result)` function, which must be called when finished, + * passing an `error` (which can be `null`) and the result of the function's + * execution. + * @param {number} [concurrency=Infinity] - An optional `integer` for + * determining the maximum number of tasks that can be run in parallel. By + * default, as many as possible. + * @param {Function} [callback] - An optional callback which is called when all + * the tasks have been completed. It receives the `err` argument if any `tasks` + * pass an error to their callback. Results are always returned; however, if an + * error occurs, no further `tasks` will be performed, and the results object + * will only contain partial results. Invoked with (err, results). + * @returns undefined + * @example + * + * async.auto({ + * // this function will just be passed a callback + * readData: async.apply(fs.readFile, 'data.txt', 'utf-8'), + * showData: ['readData', function(results, cb) { + * // results.readData is the file's contents + * // ... + * }] + * }, callback); + * + * async.auto({ + * get_data: function(callback) { + * console.log('in get_data'); + * // async code to get some data + * callback(null, 'data', 'converted to array'); + * }, + * make_folder: function(callback) { + * console.log('in make_folder'); + * // async code to create a directory to store a file in + * // this is run at the same time as getting the data + * callback(null, 'folder'); + * }, + * write_file: ['get_data', 'make_folder', function(results, callback) { + * console.log('in write_file', JSON.stringify(results)); + * // once there is some data and the directory exists, + * // write the data to a file in the directory + * callback(null, 'filename'); + * }], + * email_link: ['write_file', function(results, callback) { + * console.log('in email_link', JSON.stringify(results)); + * // once the file is written let's email a link to it... + * // results.write_file contains the filename returned by write_file. + * callback(null, {'file':results.write_file, 'email':'user@example.com'}); + * }] + * }, function(err, results) { + * console.log('err = ', err); + * console.log('results = ', results); + * }); + */ \ No newline at end of file diff --git a/.pnpm-store/v11/files/41/0a74d4d175980d7cd54a1050126f45d22e771cfbbfac989a6e47f3bd8a1cb0426a5c3779e6de23d7e387333af9f889360bb330326a3bed39f5f7e2b2bff0ab b/.pnpm-store/v11/files/41/0a74d4d175980d7cd54a1050126f45d22e771cfbbfac989a6e47f3bd8a1cb0426a5c3779e6de23d7e387333af9f889360bb330326a3bed39f5f7e2b2bff0ab new file mode 100644 index 00000000..b5ab6382 --- /dev/null +++ b/.pnpm-store/v11/files/41/0a74d4d175980d7cd54a1050126f45d22e771cfbbfac989a6e47f3bd8a1cb0426a5c3779e6de23d7e387333af9f889360bb330326a3bed39f5f7e2b2bff0ab @@ -0,0 +1,3091 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '
/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlNDczOGZjNzJhN2IyMzAzOTg4OSIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTBDLFNBQVM7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDL1pBLGlCQUFnQixvQkFBb0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUEyRDtBQUMzRCxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRzs7QUFFSDtBQUNBO0FBQ0E7Ozs7Ozs7QUMzSUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsb0JBQW1CO0FBQ25CLHFCQUFvQjs7QUFFcEIsaUJBQWdCO0FBQ2hCLGlCQUFnQjs7QUFFaEIsaUJBQWdCO0FBQ2hCLGtCQUFpQjs7QUFFakI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNsRUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0NBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoYUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQzlFQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE2QixNQUFNO0FBQ25DO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUMsc0JBQXFCLCtDQUErQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBLHNCQUFxQiw0QkFBNEI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDempDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzlHQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ2pIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU0NzM4ZmM3MmE3YjIzMDM5ODg5IiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF07XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/.pnpm-store/v11/files/41/1b2e8e40a760da023d7301f2c984a1ac58b36acbf2d39d9677825fd4cc602483f08c0da387e33d48685f3f116ec0637aebe6685699bf740bafa5c27d3c8fcc b/.pnpm-store/v11/files/41/1b2e8e40a760da023d7301f2c984a1ac58b36acbf2d39d9677825fd4cc602483f08c0da387e33d48685f3f116ec0637aebe6685699bf740bafa5c27d3c8fcc new file mode 100644 index 00000000..f8cc5968 --- /dev/null +++ b/.pnpm-store/v11/files/41/1b2e8e40a760da023d7301f2c984a1ac58b36acbf2d39d9677825fd4cc602483f08c0da387e33d48685f3f116ec0637aebe6685699bf740bafa5c27d3c8fcc @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('fromPairs', require('../fromPairs')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/41/26a813c6458aa1e88d57f5d6f6eb3a7b7d0db5288173903f74557d0d63baf2b6753e0301bd08abed1f8bedbbdf50ca0d326475b467201c0b649e58990428d1 b/.pnpm-store/v11/files/41/26a813c6458aa1e88d57f5d6f6eb3a7b7d0db5288173903f74557d0d63baf2b6753e0301bd08abed1f8bedbbdf50ca0d326475b467201c0b649e58990428d1 new file mode 100644 index 00000000..099480fb --- /dev/null +++ b/.pnpm-store/v11/files/41/26a813c6458aa1e88d57f5d6f6eb3a7b7d0db5288173903f74557d0d63baf2b6753e0301bd08abed1f8bedbbdf50ca0d326475b467201c0b649e58990428d1 @@ -0,0 +1,6 @@ +'use strict'; +var ansiRegex = require('ansi-regex')(); + +module.exports = function (str) { + return typeof str === 'string' ? str.replace(ansiRegex, '') : str; +}; diff --git a/.pnpm-store/v11/files/41/3bb784233735b1957f4653b8c85f3fbe73baf48d6d07821c0d7bbc649fb984c2ab28286d58e95c5e95ea3c3e18c955e8904cf9e3cf0d216ffa118d925d80a4 b/.pnpm-store/v11/files/41/3bb784233735b1957f4653b8c85f3fbe73baf48d6d07821c0d7bbc649fb984c2ab28286d58e95c5e95ea3c3e18c955e8904cf9e3cf0d216ffa118d925d80a4 new file mode 100644 index 00000000..d6f37936 --- /dev/null +++ b/.pnpm-store/v11/files/41/3bb784233735b1957f4653b8c85f3fbe73baf48d6d07821c0d7bbc649fb984c2ab28286d58e95c5e95ea3c3e18c955e8904cf9e3cf0d216ffa118d925d80a4 @@ -0,0 +1,192 @@ +CLI Table [![NPM Version](http://badge.fury.io/js/cli-table.svg)](http://badge.fury.io/js/cli-table) [![Build Status](https://secure.travis-ci.org/Automattic/cli-table.svg)](http://travis-ci.org/Automattic/cli-table) +========= + +This utility allows you to render unicode-aided tables on the command line from +your node.js scripts. + +![Screenshot](http://i.imgur.com/sYq4T.png) + +## Features + +- Customizable characters that constitute the table. +- Color/background styling in the header through + [colors.js](http://github.com/marak/colors.js) +- Column width customization +- Text truncation based on predefined widths +- Text alignment (left, right, center) +- Padding (left, right) +- Easy-to-use API + +## Installation + +```bash +npm install cli-table +``` + +## How to use + +### Horizontal Tables +```javascript +var Table = require('cli-table'); + +// instantiate +var table = new Table({ + head: ['TH 1 label', 'TH 2 label'] + , colWidths: [100, 200] +}); + +// table is an Array, so you can `push`, `unshift`, `splice` and friends +table.push( + ['First value', 'Second value'] + , ['First value', 'Second value'] +); + +console.log(table.toString()); +``` + +### Initializing rows in the constructore + +Optionally you can initialize rows in the constructors directly - comes in handy for smaller tables: + +``` +new Table({ + rows: [ + ['foo', '7 minutes ago'] + , ['bar', '8 minutes ago'] + ] +}) +``` + +### Vertical Tables +```javascript +var Table = require('cli-table'); +var table = new Table(); + +table.push( + { 'Some key': 'Some value' } + , { 'Another key': 'Another value' } +); + +console.log(table.toString()); +``` +### Cross Tables +Cross tables are very similar to vertical tables, with two key differences: + +1. They require a `head` setting when instantiated that has an empty string as the first header +2. The individual rows take the general form of { "Header": ["Row", "Values"] } + +```javascript +var Table = require('cli-table'); +var table = new Table({ head: ["", "Top Header 1", "Top Header 2"] }); + +table.push( + { 'Left Header 1': ['Value Row 1 Col 1', 'Value Row 1 Col 2'] } + , { 'Left Header 2': ['Value Row 2 Col 1', 'Value Row 2 Col 2'] } +); + +console.log(table.toString()); +``` + +### Custom styles +The ```chars``` property controls how the table is drawn: +```javascript +var table = new Table({ + chars: { 'top': '═' , 'top-mid': '╤' , 'top-left': '╔' , 'top-right': '╗' + , 'bottom': '═' , 'bottom-mid': '╧' , 'bottom-left': '╚' , 'bottom-right': '╝' + , 'left': '║' , 'left-mid': '╟' , 'mid': '─' , 'mid-mid': '┼' + , 'right': '║' , 'right-mid': '╢' , 'middle': '│' } +}); + +table.push( + ['foo', 'bar', 'baz'] + , ['frob', 'bar', 'quuz'] +); + +console.log(table.toString()); +// Outputs: +// +//╔══════╤═════╤══════╗ +//║ foo │ bar │ baz ║ +//╟──────┼─────┼──────╢ +//║ frob │ bar │ quuz ║ +//╚══════╧═════╧══════╝ +``` + +Empty decoration lines will be skipped, to avoid vertical separator rows just +set the 'mid', 'left-mid', 'mid-mid', 'right-mid' to the empty string: +```javascript +var table = new Table({ chars: {'mid': '', 'left-mid': '', 'mid-mid': '', 'right-mid': ''} }); +table.push( + ['foo', 'bar', 'baz'] + , ['frobnicate', 'bar', 'quuz'] +); + +console.log(table.toString()); +// Outputs: (note the lack of the horizontal line between rows) +//┌────────────┬─────┬──────┐ +//│ foo │ bar │ baz │ +//│ frobnicate │ bar │ quuz │ +//└────────────┴─────┴──────┘ +``` + +By setting all chars to empty with the exception of 'middle' being set to a +single space and by setting padding to zero, it's possible to get the most +compact layout with no decorations: +```javascript +var table = new Table({ + chars: { 'top': '' , 'top-mid': '' , 'top-left': '' , 'top-right': '' + , 'bottom': '' , 'bottom-mid': '' , 'bottom-left': '' , 'bottom-right': '' + , 'left': '' , 'left-mid': '' , 'mid': '' , 'mid-mid': '' + , 'right': '' , 'right-mid': '' , 'middle': ' ' }, + style: { 'padding-left': 0, 'padding-right': 0 } +}); + +table.push( + ['foo', 'bar', 'baz'] + , ['frobnicate', 'bar', 'quuz'] +); + +console.log(table.toString()); +// Outputs: +//foo bar baz +//frobnicate bar quuz +``` + +## Running tests + +Clone the repository with all its submodules and run: + +```bash +$ make test +``` + +## Credits + +- Guillermo Rauch <guillermo@learnboost.com> ([Guille](http://github.com/guille)) + +[![huntr](https://cdn.huntr.dev/huntr_security_badge_mono.svg)](https://huntr.dev) + +## License + +(The MIT License) + +Copyright (c) 2010 LearnBoost <dev@learnboost.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/41/4c7160acb4128237ab1212f78df31c4abd2776258fe466a55d0ec68a16666a53ebb03e166d6482b67bc9f4d717d31e85d1b21f50711ee7f32b40c9cf6aa8de b/.pnpm-store/v11/files/41/4c7160acb4128237ab1212f78df31c4abd2776258fe466a55d0ec68a16666a53ebb03e166d6482b67bc9f4d717d31e85d1b21f50711ee7f32b40c9cf6aa8de new file mode 100644 index 00000000..66fb9fbc --- /dev/null +++ b/.pnpm-store/v11/files/41/4c7160acb4128237ab1212f78df31c4abd2776258fe466a55d0ec68a16666a53ebb03e166d6482b67bc9f4d717d31e85d1b21f50711ee7f32b40c9cf6aa8de @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), + baseForOwnRight = require('./_baseForOwnRight'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ +function findLastKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); +} + +module.exports = findLastKey; diff --git a/.pnpm-store/v11/files/41/7b66abadb40eb5ced546f511a3bfc1efbfe4f8fde1aefd2c6ac762a2600d9e7b3a31c651a6f47d60962db5a4927628ce5d845d4ffbf17062233302d58d56e9 b/.pnpm-store/v11/files/41/7b66abadb40eb5ced546f511a3bfc1efbfe4f8fde1aefd2c6ac762a2600d9e7b3a31c651a6f47d60962db5a4927628ce5d845d4ffbf17062233302d58d56e9 new file mode 100644 index 00000000..a43c628c --- /dev/null +++ b/.pnpm-store/v11/files/41/7b66abadb40eb5ced546f511a3bfc1efbfe4f8fde1aefd2c6ac762a2600d9e7b3a31c651a6f47d60962db5a4927628ce5d845d4ffbf17062233302d58d56e9 @@ -0,0 +1,185 @@ +1.0.10 / 2018-02-15 +------------------ + +- Use .concat instead of + for arrays, #122. + + +1.0.9 / 2016-09-29 +------------------ + +- Rerelease after 1.0.8 - deps cleanup. + + +1.0.8 / 2016-09-29 +------------------ + +- Maintenance (deps bump, fix node 6.5+ tests, coverage report). + + +1.0.7 / 2016-03-17 +------------------ + +- Teach `addArgument` to accept string arg names. #97, @tomxtobin. + + +1.0.6 / 2016-02-06 +------------------ + +- Maintenance: moved to eslint & updated CS. + + +1.0.5 / 2016-02-05 +------------------ + +- Removed lodash dependency to significantly reduce install size. + Thanks to @mourner. + + +1.0.4 / 2016-01-17 +------------------ + +- Maintenance: lodash update to 4.0.0. + + +1.0.3 / 2015-10-27 +------------------ + +- Fix parse `=` in args: `--examplepath="C:\myfolder\env=x64"`. #84, @CatWithApple. + + +1.0.2 / 2015-03-22 +------------------ + +- Relaxed lodash version dependency. + + +1.0.1 / 2015-02-20 +------------------ + +- Changed dependencies to be compatible with ancient nodejs. + + +1.0.0 / 2015-02-19 +------------------ + +- Maintenance release. +- Replaced `underscore` with `lodash`. +- Bumped version to 1.0.0 to better reflect semver meaning. +- HISTORY.md -> CHANGELOG.md + + +0.1.16 / 2013-12-01 +------------------- + +- Maintenance release. Updated dependencies and docs. + + +0.1.15 / 2013-05-13 +------------------- + +- Fixed #55, @trebor89 + + +0.1.14 / 2013-05-12 +------------------- + +- Fixed #62, @maxtaco + + +0.1.13 / 2013-04-08 +------------------- + +- Added `.npmignore` to reduce package size + + +0.1.12 / 2013-02-10 +------------------- + +- Fixed conflictHandler (#46), @hpaulj + + +0.1.11 / 2013-02-07 +------------------- + +- Multiple bugfixes, @hpaulj +- Added 70+ tests (ported from python), @hpaulj +- Added conflictHandler, @applepicke +- Added fromfilePrefixChar, @hpaulj + + +0.1.10 / 2012-12-30 +------------------- + +- Added [mutual exclusion](http://docs.python.org/dev/library/argparse.html#mutual-exclusion) + support, thanks to @hpaulj +- Fixed options check for `storeConst` & `appendConst` actions, thanks to @hpaulj + + +0.1.9 / 2012-12-27 +------------------ + +- Fixed option dest interferens with other options (issue #23), thanks to @hpaulj +- Fixed default value behavior with `*` positionals, thanks to @hpaulj +- Improve `getDefault()` behavior, thanks to @hpaulj +- Imrove negative argument parsing, thanks to @hpaulj + + +0.1.8 / 2012-12-01 +------------------ + +- Fixed parser parents (issue #19), thanks to @hpaulj +- Fixed negative argument parse (issue #20), thanks to @hpaulj + + +0.1.7 / 2012-10-14 +------------------ + +- Fixed 'choices' argument parse (issue #16) +- Fixed stderr output (issue #15) + + +0.1.6 / 2012-09-09 +------------------ + +- Fixed check for conflict of options (thanks to @tomxtobin) + + +0.1.5 / 2012-09-03 +------------------ + +- Fix parser #setDefaults method (thanks to @tomxtobin) + + +0.1.4 / 2012-07-30 +------------------ + +- Fixed pseudo-argument support (thanks to @CGamesPlay) +- Fixed addHelp default (should be true), if not set (thanks to @benblank) + + +0.1.3 / 2012-06-27 +------------------ + +- Fixed formatter api name: Formatter -> HelpFormatter + + +0.1.2 / 2012-05-29 +------------------ + +- Added basic tests +- Removed excess whitespace in help +- Fixed error reporting, when parcer with subcommands + called with empty arguments + + +0.1.1 / 2012-05-23 +------------------ + +- Fixed line wrapping in help formatter +- Added better error reporting on invalid arguments + + +0.1.0 / 2012-05-16 +------------------ + +- First release. diff --git a/.pnpm-store/v11/files/41/7e43923ce2e90db0acb8424dbdcd6f40cc5ab8471f5de855e861528ac921c817c9ee4cdb91f7199d4fa51106713428de4554c0a0c65a8b3e1d15a201cca4db b/.pnpm-store/v11/files/41/7e43923ce2e90db0acb8424dbdcd6f40cc5ab8471f5de855e861528ac921c817c9ee4cdb91f7199d4fa51106713428de4554c0a0c65a8b3e1d15a201cca4db new file mode 100644 index 00000000..2e4a058a --- /dev/null +++ b/.pnpm-store/v11/files/41/7e43923ce2e90db0acb8424dbdcd6f40cc5ab8471f5de855e861528ac921c817c9ee4cdb91f7199d4fa51106713428de4554c0a0c65a8b3e1d15a201cca4db @@ -0,0 +1,1005 @@ +module.exports = minimatch +minimatch.Minimatch = Minimatch + +var path = (function () { try { return require('path') } catch (e) {}}()) || { + sep: '/' +} +minimatch.sep = path.sep + +var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} +var expand = require('brace-expansion') + +var plTypes = { + '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, + '?': { open: '(?:', close: ')?' }, + '+': { open: '(?:', close: ')+' }, + '*': { open: '(?:', close: ')*' }, + '@': { open: '(?:', close: ')' } +} + +// any single thing other than / +// don't need to escape / when using new RegExp() +var qmark = '[^/]' + +// * => any number of characters +var star = qmark + '*?' + +// ** when dots are allowed. Anything goes, except .. and . +// not (^ or / followed by one or two dots followed by $ or /), +// followed by anything, any number of times. +var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' + +// not a ^ or / followed by a dot, +// followed by anything, any number of times. +var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' + +// characters that need to be escaped in RegExp. +var reSpecials = charSet('().*{}+?[]^$\\!') + +// "abc" -> { a:true, b:true, c:true } +function charSet (s) { + return s.split('').reduce(function (set, c) { + set[c] = true + return set + }, {}) +} + +// normalizes slashes. +var slashSplit = /\/+/ + +minimatch.filter = filter +function filter (pattern, options) { + options = options || {} + return function (p, i, list) { + return minimatch(p, pattern, options) + } +} + +function ext (a, b) { + b = b || {} + var t = {} + Object.keys(a).forEach(function (k) { + t[k] = a[k] + }) + Object.keys(b).forEach(function (k) { + t[k] = b[k] + }) + return t +} + +minimatch.defaults = function (def) { + if (!def || typeof def !== 'object' || !Object.keys(def).length) { + return minimatch + } + + var orig = minimatch + + var m = function minimatch (p, pattern, options) { + return orig(p, pattern, ext(def, options)) + } + + m.Minimatch = function Minimatch (pattern, options) { + return new orig.Minimatch(pattern, ext(def, options)) + } + m.Minimatch.defaults = function defaults (options) { + return orig.defaults(ext(def, options)).Minimatch + } + + m.filter = function filter (pattern, options) { + return orig.filter(pattern, ext(def, options)) + } + + m.defaults = function defaults (options) { + return orig.defaults(ext(def, options)) + } + + m.makeRe = function makeRe (pattern, options) { + return orig.makeRe(pattern, ext(def, options)) + } + + m.braceExpand = function braceExpand (pattern, options) { + return orig.braceExpand(pattern, ext(def, options)) + } + + m.match = function (list, pattern, options) { + return orig.match(list, pattern, ext(def, options)) + } + + return m +} + +Minimatch.defaults = function (def) { + return minimatch.defaults(def).Minimatch +} + +function minimatch (p, pattern, options) { + assertValidPattern(pattern) + + if (!options) options = {} + + // shortcut: comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + return false + } + + return new Minimatch(pattern, options).match(p) +} + +function Minimatch (pattern, options) { + if (!(this instanceof Minimatch)) { + return new Minimatch(pattern, options) + } + + assertValidPattern(pattern) + + if (!options) options = {} + + pattern = pattern.trim() + + // windows support: need to use /, not \ + if (!options.allowWindowsEscape && path.sep !== '/') { + pattern = pattern.split(path.sep).join('/') + } + + this.options = options + this.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined + ? options.maxGlobstarRecursion : 200 + this.set = [] + this.pattern = pattern + this.regexp = null + this.negate = false + this.comment = false + this.empty = false + this.partial = !!options.partial + + // make the set of regexps etc. + this.make() +} + +Minimatch.prototype.debug = function () {} + +Minimatch.prototype.make = make +function make () { + var pattern = this.pattern + var options = this.options + + // empty patterns and comments match nothing. + if (!options.nocomment && pattern.charAt(0) === '#') { + this.comment = true + return + } + if (!pattern) { + this.empty = true + return + } + + // step 1: figure out negation, etc. + this.parseNegate() + + // step 2: expand braces + var set = this.globSet = this.braceExpand() + + if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) } + + this.debug(this.pattern, set) + + // step 3: now we have a set, so turn each one into a series of path-portion + // matching patterns. + // These will be regexps, except in the case of "**", which is + // set to the GLOBSTAR object for globstar behavior, + // and will not contain any / characters + set = this.globParts = set.map(function (s) { + return s.split(slashSplit) + }) + + this.debug(this.pattern, set) + + // glob --> regexps + set = set.map(function (s, si, set) { + return s.map(this.parse, this) + }, this) + + this.debug(this.pattern, set) + + // filter out everything that didn't compile properly. + set = set.filter(function (s) { + return s.indexOf(false) === -1 + }) + + this.debug(this.pattern, set) + + this.set = set +} + +Minimatch.prototype.parseNegate = parseNegate +function parseNegate () { + var pattern = this.pattern + var negate = false + var options = this.options + var negateOffset = 0 + + if (options.nonegate) return + + for (var i = 0, l = pattern.length + ; i < l && pattern.charAt(i) === '!' + ; i++) { + negate = !negate + negateOffset++ + } + + if (negateOffset) this.pattern = pattern.substr(negateOffset) + this.negate = negate +} + +// Brace expansion: +// a{b,c}d -> abd acd +// a{b,}c -> abc ac +// a{0..3}d -> a0d a1d a2d a3d +// a{b,c{d,e}f}g -> abg acdfg acefg +// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg +// +// Invalid sets are not expanded. +// a{2..}b -> a{2..}b +// a{b}c -> a{b}c +minimatch.braceExpand = function (pattern, options) { + return braceExpand(pattern, options) +} + +Minimatch.prototype.braceExpand = braceExpand + +function braceExpand (pattern, options) { + if (!options) { + if (this instanceof Minimatch) { + options = this.options + } else { + options = {} + } + } + + pattern = typeof pattern === 'undefined' + ? this.pattern : pattern + + assertValidPattern(pattern) + + // Thanks to Yeting Li for + // improving this regexp to avoid a ReDOS vulnerability. + if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) { + // shortcut. no need to expand. + return [pattern] + } + + return expand(pattern) +} + +var MAX_PATTERN_LENGTH = 1024 * 64 +var assertValidPattern = function (pattern) { + if (typeof pattern !== 'string') { + throw new TypeError('invalid pattern') + } + + if (pattern.length > MAX_PATTERN_LENGTH) { + throw new TypeError('pattern is too long') + } +} + +// parse a component of the expanded set. +// At this point, no pattern may contain "/" in it +// so we're going to return a 2d array, where each entry is the full +// pattern, split on '/', and then turned into a regular expression. +// A regexp is made at the end which joins each array with an +// escaped /, and another full one which joins each regexp with |. +// +// Following the lead of Bash 4.1, note that "**" only has special meaning +// when it is the *only* thing in a path portion. Otherwise, any series +// of * is equivalent to a single *. Globstar behavior is enabled by +// default, and can be disabled by setting options.noglobstar. +Minimatch.prototype.parse = parse +var SUBPARSE = {} +function parse (pattern, isSub) { + assertValidPattern(pattern) + + var options = this.options + + // shortcuts + if (pattern === '**') { + if (!options.noglobstar) + return GLOBSTAR + else + pattern = '*' + } + if (pattern === '') return '' + + var re = '' + var hasMagic = !!options.nocase + var escaping = false + // ? => one single character + var patternListStack = [] + var negativeLists = [] + var stateChar + var inClass = false + var reClassStart = -1 + var classStart = -1 + // . and .. never match anything that doesn't start with ., + // even when options.dot is set. + var patternStart = pattern.charAt(0) === '.' ? '' // anything + // not (start or / followed by . or .. followed by / or end) + : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' + : '(?!\\.)' + var self = this + + function clearStateChar () { + if (stateChar) { + // we had some state-tracking character + // that wasn't consumed by this pass. + switch (stateChar) { + case '*': + re += star + hasMagic = true + break + case '?': + re += qmark + hasMagic = true + break + default: + re += '\\' + stateChar + break + } + self.debug('clearStateChar %j %j', stateChar, re) + stateChar = false + } + } + + for (var i = 0, len = pattern.length, c + ; (i < len) && (c = pattern.charAt(i)) + ; i++) { + this.debug('%s\t%s %s %j', pattern, i, re, c) + + // skip over any that are escaped. + if (escaping && reSpecials[c]) { + re += '\\' + c + escaping = false + continue + } + + switch (c) { + /* istanbul ignore next */ + case '/': { + // completely not allowed, even escaped. + // Should already be path-split by now. + return false + } + + case '\\': + clearStateChar() + escaping = true + continue + + // the various stateChar values + // for the "extglob" stuff. + case '?': + case '*': + case '+': + case '@': + case '!': + this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) + + // all of those are literals inside a class, except that + // the glob [!a] means [^a] in regexp + if (inClass) { + this.debug(' in class') + if (c === '!' && i === classStart + 1) c = '^' + re += c + continue + } + + // coalesce consecutive non-globstar * characters + if (c === '*' && stateChar === '*') continue + + // if we already have a stateChar, then it means + // that there was something like ** or +? in there. + // Handle the stateChar, then proceed with this one. + self.debug('call clearStateChar %j', stateChar) + clearStateChar() + stateChar = c + // if extglob is disabled, then +(asdf|foo) isn't a thing. + // just clear the statechar *now*, rather than even diving into + // the patternList stuff. + if (options.noext) clearStateChar() + continue + + case '(': + if (inClass) { + re += '(' + continue + } + + if (!stateChar) { + re += '\\(' + continue + } + + patternListStack.push({ + type: stateChar, + start: i - 1, + reStart: re.length, + open: plTypes[stateChar].open, + close: plTypes[stateChar].close + }) + // negation is (?:(?!js)[^/]*) + re += stateChar === '!' ? '(?:(?!(?:' : '(?:' + this.debug('plType %j %j', stateChar, re) + stateChar = false + continue + + case ')': + if (inClass || !patternListStack.length) { + re += '\\)' + continue + } + + clearStateChar() + hasMagic = true + var pl = patternListStack.pop() + // negation is (?:(?!js)[^/]*) + // The others are (?:) + re += pl.close + if (pl.type === '!') { + negativeLists.push(pl) + } + pl.reEnd = re.length + continue + + case '|': + if (inClass || !patternListStack.length || escaping) { + re += '\\|' + escaping = false + continue + } + + clearStateChar() + re += '|' + continue + + // these are mostly the same in regexp and glob + case '[': + // swallow any state-tracking char before the [ + clearStateChar() + + if (inClass) { + re += '\\' + c + continue + } + + inClass = true + classStart = i + reClassStart = re.length + re += c + continue + + case ']': + // a right bracket shall lose its special + // meaning and represent itself in + // a bracket expression if it occurs + // first in the list. -- POSIX.2 2.8.3.2 + if (i === classStart + 1 || !inClass) { + re += '\\' + c + escaping = false + continue + } + + // handle the case where we left a class open. + // "[z-a]" is valid, equivalent to "\[z-a\]" + // split where the last [ was, make sure we don't have + // an invalid re. if so, re-walk the contents of the + // would-be class to re-translate any characters that + // were passed through as-is + // TODO: It would probably be faster to determine this + // without a try/catch and a new RegExp, but it's tricky + // to do safely. For now, this is safe and works. + var cs = pattern.substring(classStart + 1, i) + try { + RegExp('[' + cs + ']') + } catch (er) { + // not a valid class! + var sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' + hasMagic = hasMagic || sp[1] + inClass = false + continue + } + + // finish up the class. + hasMagic = true + inClass = false + re += c + continue + + default: + // swallow any state char that wasn't consumed + clearStateChar() + + if (escaping) { + // no need + escaping = false + } else if (reSpecials[c] + && !(c === '^' && inClass)) { + re += '\\' + } + + re += c + + } // switch + } // for + + // handle the case where we left a class open. + // "[abc" is valid, equivalent to "\[abc" + if (inClass) { + // split where the last [ was, and escape it + // this is a huge pita. We now have to re-walk + // the contents of the would-be class to re-translate + // any characters that were passed through as-is + cs = pattern.substr(classStart + 1) + sp = this.parse(cs, SUBPARSE) + re = re.substr(0, reClassStart) + '\\[' + sp[0] + hasMagic = hasMagic || sp[1] + } + + // handle the case where we had a +( thing at the *end* + // of the pattern. + // each pattern list stack adds 3 chars, and we need to go through + // and escape any | chars that were passed through as-is for the regexp. + // Go through and escape them, taking care not to double-escape any + // | chars that were already escaped. + for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { + var tail = re.slice(pl.reStart + pl.open.length) + this.debug('setting tail', re, pl) + // maybe some even number of \, then maybe 1 \, followed by a | + tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { + if (!$2) { + // the | isn't already escaped, so escape it. + $2 = '\\' + } + + // need to escape all those slashes *again*, without escaping the + // one that we need for escaping the | character. As it works out, + // escaping an even number of slashes can be done by simply repeating + // it exactly after itself. That's why this trick works. + // + // I am sorry that you have to see this. + return $1 + $1 + $2 + '|' + }) + + this.debug('tail=%j\n %s', tail, tail, pl, re) + var t = pl.type === '*' ? star + : pl.type === '?' ? qmark + : '\\' + pl.type + + hasMagic = true + re = re.slice(0, pl.reStart) + t + '\\(' + tail + } + + // handle trailing things that only matter at the very end. + clearStateChar() + if (escaping) { + // trailing \\ + re += '\\\\' + } + + // only need to apply the nodot start if the re starts with + // something that could conceivably capture a dot + var addPatternStart = false + switch (re.charAt(0)) { + case '[': case '.': case '(': addPatternStart = true + } + + // Hack to work around lack of negative lookbehind in JS + // A pattern like: *.!(x).!(y|z) needs to ensure that a name + // like 'a.xyz.yz' doesn't match. So, the first negative + // lookahead, has to look ALL the way ahead, to the end of + // the pattern. + for (var n = negativeLists.length - 1; n > -1; n--) { + var nl = negativeLists[n] + + var nlBefore = re.slice(0, nl.reStart) + var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) + var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) + var nlAfter = re.slice(nl.reEnd) + + nlLast += nlAfter + + // Handle nested stuff like *(*.js|!(*.json)), where open parens + // mean that we should *not* include the ) in the bit that is considered + // "after" the negated section. + var openParensBefore = nlBefore.split('(').length - 1 + var cleanAfter = nlAfter + for (i = 0; i < openParensBefore; i++) { + cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') + } + nlAfter = cleanAfter + + var dollar = '' + if (nlAfter === '' && isSub !== SUBPARSE) { + dollar = '$' + } + var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast + re = newRe + } + + // if the re is not "" at this point, then we need to make sure + // it doesn't match against an empty path part. + // Otherwise a/* will match a/, which it should not. + if (re !== '' && hasMagic) { + re = '(?=.)' + re + } + + if (addPatternStart) { + re = patternStart + re + } + + // parsing just a piece of a larger pattern. + if (isSub === SUBPARSE) { + return [re, hasMagic] + } + + // skip the regexp for non-magical patterns + // unescape anything in it, though, so that it'll be + // an exact match against a file etc. + if (!hasMagic) { + return globUnescape(pattern) + } + + var flags = options.nocase ? 'i' : '' + try { + var regExp = new RegExp('^' + re + '$', flags) + } catch (er) /* istanbul ignore next - should be impossible */ { + // If it was an invalid regular expression, then it can't match + // anything. This trick looks for a character after the end of + // the string, which is of course impossible, except in multi-line + // mode, but it's not a /m regex. + return new RegExp('$.') + } + + regExp._glob = pattern + regExp._src = re + + return regExp +} + +minimatch.makeRe = function (pattern, options) { + return new Minimatch(pattern, options || {}).makeRe() +} + +Minimatch.prototype.makeRe = makeRe +function makeRe () { + if (this.regexp || this.regexp === false) return this.regexp + + // at this point, this.set is a 2d array of partial + // pattern strings, or "**". + // + // It's better to use .match(). This function shouldn't + // be used, really, but it's pretty convenient sometimes, + // when you just want to work with a regex. + var set = this.set + + if (!set.length) { + this.regexp = false + return this.regexp + } + var options = this.options + + var twoStar = options.noglobstar ? star + : options.dot ? twoStarDot + : twoStarNoDot + var flags = options.nocase ? 'i' : '' + + var re = set.map(function (pattern) { + return pattern.map(function (p) { + return (p === GLOBSTAR) ? twoStar + : (typeof p === 'string') ? regExpEscape(p) + : p._src + }).join('\\\/') + }).join('|') + + // must match entire pattern + // ending in a * or ** will make it less strict. + re = '^(?:' + re + ')$' + + // can match anything, as long as it's not this. + if (this.negate) re = '^(?!' + re + ').*$' + + try { + this.regexp = new RegExp(re, flags) + } catch (ex) /* istanbul ignore next - should be impossible */ { + this.regexp = false + } + return this.regexp +} + +minimatch.match = function (list, pattern, options) { + options = options || {} + var mm = new Minimatch(pattern, options) + list = list.filter(function (f) { + return mm.match(f) + }) + if (mm.options.nonull && !list.length) { + list.push(pattern) + } + return list +} + +Minimatch.prototype.match = function match (f, partial) { + if (typeof partial === 'undefined') partial = this.partial + this.debug('match', f, this.pattern) + // short-circuit in the case of busted things. + // comments, etc. + if (this.comment) return false + if (this.empty) return f === '' + + if (f === '/' && partial) return true + + var options = this.options + + // windows: need to use /, not \ + if (path.sep !== '/') { + f = f.split(path.sep).join('/') + } + + // treat the test path as a set of pathparts. + f = f.split(slashSplit) + this.debug(this.pattern, 'split', f) + + // just ONE of the pattern sets in this.set needs to match + // in order for it to be valid. If negating, then just one + // match means that we have failed. + // Either way, return on the first hit. + + var set = this.set + this.debug(this.pattern, 'set', set) + + // Find the basename of the path by looking for the last non-empty segment + var filename + var i + for (i = f.length - 1; i >= 0; i--) { + filename = f[i] + if (filename) break + } + + for (i = 0; i < set.length; i++) { + var pattern = set[i] + var file = f + if (options.matchBase && pattern.length === 1) { + file = [filename] + } + var hit = this.matchOne(file, pattern, partial) + if (hit) { + if (options.flipNegate) return true + return !this.negate + } + } + + // didn't get any hits. this is success if it's a negative + // pattern, failure otherwise. + if (options.flipNegate) return false + return this.negate +} + +// set partial to true to test if, for example, +// "/a/b" matches the start of "/*/b/*/d" +// Partial means, if you run out of file before you run +// out of pattern, then that's fine, as long as all +// the parts match. +Minimatch.prototype.matchOne = function (file, pattern, partial) { + if (pattern.indexOf(GLOBSTAR) !== -1) { + return this._matchGlobstar(file, pattern, partial, 0, 0) + } + return this._matchOne(file, pattern, partial, 0, 0) +} + +Minimatch.prototype._matchGlobstar = function (file, pattern, partial, fileIndex, patternIndex) { + var i + + // find first globstar from patternIndex + var firstgs = -1 + for (i = patternIndex; i < pattern.length; i++) { + if (pattern[i] === GLOBSTAR) { firstgs = i; break } + } + + // find last globstar + var lastgs = -1 + for (i = pattern.length - 1; i >= 0; i--) { + if (pattern[i] === GLOBSTAR) { lastgs = i; break } + } + + var head = pattern.slice(patternIndex, firstgs) + var body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs) + var tail = partial ? [] : pattern.slice(lastgs + 1) + + // check the head + if (head.length) { + var fileHead = file.slice(fileIndex, fileIndex + head.length) + if (!this._matchOne(fileHead, head, partial, 0, 0)) { + return false + } + fileIndex += head.length + } + + // check the tail + var fileTailMatch = 0 + if (tail.length) { + if (tail.length + fileIndex > file.length) return false + + var tailStart = file.length - tail.length + if (this._matchOne(file, tail, partial, tailStart, 0)) { + fileTailMatch = tail.length + } else { + // affordance for stuff like a/**/* matching a/b/ + if (file[file.length - 1] !== '' || + fileIndex + tail.length === file.length) { + return false + } + tailStart-- + if (!this._matchOne(file, tail, partial, tailStart, 0)) { + return false + } + fileTailMatch = tail.length + 1 + } + } + + // if body is empty (single ** between head and tail) + if (!body.length) { + var sawSome = !!fileTailMatch + for (i = fileIndex; i < file.length - fileTailMatch; i++) { + var f = String(file[i]) + sawSome = true + if (f === '.' || f === '..' || + (!this.options.dot && f.charAt(0) === '.')) { + return false + } + } + return partial || sawSome + } + + // split body into segments at each GLOBSTAR + var bodySegments = [[[], 0]] + var currentBody = bodySegments[0] + var nonGsParts = 0 + var nonGsPartsSums = [0] + for (var bi = 0; bi < body.length; bi++) { + var b = body[bi] + if (b === GLOBSTAR) { + nonGsPartsSums.push(nonGsParts) + currentBody = [[], 0] + bodySegments.push(currentBody) + } else { + currentBody[0].push(b) + nonGsParts++ + } + } + + var idx = bodySegments.length - 1 + var fileLength = file.length - fileTailMatch + for (var si = 0; si < bodySegments.length; si++) { + bodySegments[si][1] = fileLength - + (nonGsPartsSums[idx--] + bodySegments[si][0].length) + } + + return !!this._matchGlobStarBodySections( + file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch + ) +} + +// return false for "nope, not matching" +// return null for "not matching, cannot keep trying" +Minimatch.prototype._matchGlobStarBodySections = function ( + file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail +) { + var bs = bodySegments[bodyIndex] + if (!bs) { + // just make sure there are no bad dots + for (var i = fileIndex; i < file.length; i++) { + sawTail = true + var f = file[i] + if (f === '.' || f === '..' || + (!this.options.dot && f.charAt(0) === '.')) { + return false + } + } + return sawTail + } + + var body = bs[0] + var after = bs[1] + while (fileIndex <= after) { + var m = this._matchOne( + file.slice(0, fileIndex + body.length), + body, + partial, + fileIndex, + 0 + ) + // if limit exceeded, no match. intentional false negative, + // acceptable break in correctness for security. + if (m && globStarDepth < this.maxGlobstarRecursion) { + var sub = this._matchGlobStarBodySections( + file, bodySegments, + fileIndex + body.length, bodyIndex + 1, + partial, globStarDepth + 1, sawTail + ) + if (sub !== false) { + return sub + } + } + var f = file[fileIndex] + if (f === '.' || f === '..' || + (!this.options.dot && f.charAt(0) === '.')) { + return false + } + fileIndex++ + } + return partial || null +} + +Minimatch.prototype._matchOne = function (file, pattern, partial, fileIndex, patternIndex) { + var fi, pi, fl, pl + for ( + fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length + ; (fi < fl) && (pi < pl) + ; fi++, pi++ + ) { + this.debug('matchOne loop') + var p = pattern[pi] + var f = file[fi] + + this.debug(pattern, p, f) + + // should be impossible. + // some invalid regexp stuff in the set. + /* istanbul ignore if */ + if (p === false || p === GLOBSTAR) return false + + // something other than ** + // non-magic patterns just have to match exactly + // patterns with magic have been turned into regexps. + var hit + if (typeof p === 'string') { + hit = f === p + this.debug('string match', p, f, hit) + } else { + hit = f.match(p) + this.debug('pattern match', p, f, hit) + } + + if (!hit) return false + } + + // now either we fell off the end of the pattern, or we're done. + if (fi === fl && pi === pl) { + // ran out of pattern and filename at the same time. + // an exact hit! + return true + } else if (fi === fl) { + // ran out of file, but still had pattern left. + // this is ok if we're doing the match as part of + // a glob fs traversal. + return partial + } else /* istanbul ignore else */ if (pi === pl) { + // ran out of pattern, still have file left. + // this is only acceptable if we're on the very last + // empty segment of a file with a trailing slash. + // a/* should match a/b/ + return (fi === fl - 1) && (file[fi] === '') + } + + // should be unreachable. + /* istanbul ignore next */ + throw new Error('wtf?') +} + +// replace stuff like \* with * +function globUnescape (s) { + return s.replace(/\\(.)/g, '$1') +} + +function regExpEscape (s) { + return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') +} diff --git a/.pnpm-store/v11/files/41/85327934cb42e8495da451c6fc1a3cb5fd4e3e5c91a46b0c07c0c4a49c03ef8622332e0c441d00dcb5ecde9d293e76a20bdc6a9fa6aa6e713c6f2ae11a68fd b/.pnpm-store/v11/files/41/85327934cb42e8495da451c6fc1a3cb5fd4e3e5c91a46b0c07c0c4a49c03ef8622332e0c441d00dcb5ecde9d293e76a20bdc6a9fa6aa6e713c6f2ae11a68fd new file mode 100644 index 00000000..e9a81afd --- /dev/null +++ b/.pnpm-store/v11/files/41/85327934cb42e8495da451c6fc1a3cb5fd4e3e5c91a46b0c07c0c4a49c03ef8622332e0c441d00dcb5ecde9d293e76a20bdc6a9fa6aa6e713c6f2ae11a68fd @@ -0,0 +1,584 @@ +# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] + +[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg +[travis-url]: https://travis-ci.org/feross/safe-buffer +[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg +[npm-url]: https://npmjs.org/package/safe-buffer +[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg +[downloads-url]: https://npmjs.org/package/safe-buffer +[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg +[standard-url]: https://standardjs.com + +#### Safer Node.js Buffer API + +**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, +`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** + +**Uses the built-in implementation when available.** + +## install + +``` +npm install safe-buffer +``` + +## usage + +The goal of this package is to provide a safe replacement for the node.js `Buffer`. + +It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to +the top of your node.js modules: + +```js +var Buffer = require('safe-buffer').Buffer + +// Existing buffer code will continue to work without issues: + +new Buffer('hey', 'utf8') +new Buffer([1, 2, 3], 'utf8') +new Buffer(obj) +new Buffer(16) // create an uninitialized buffer (potentially unsafe) + +// But you can use these new explicit APIs to make clear what you want: + +Buffer.from('hey', 'utf8') // convert from many types to a Buffer +Buffer.alloc(16) // create a zero-filled buffer (safe) +Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) +``` + +## api + +### Class Method: Buffer.from(array) + + +* `array` {Array} + +Allocates a new `Buffer` using an `array` of octets. + +```js +const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); + // creates a new Buffer containing ASCII bytes + // ['b','u','f','f','e','r'] +``` + +A `TypeError` will be thrown if `array` is not an `Array`. + +### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) + + +* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or + a `new ArrayBuffer()` +* `byteOffset` {Number} Default: `0` +* `length` {Number} Default: `arrayBuffer.length - byteOffset` + +When passed a reference to the `.buffer` property of a `TypedArray` instance, +the newly created `Buffer` will share the same allocated memory as the +TypedArray. + +```js +const arr = new Uint16Array(2); +arr[0] = 5000; +arr[1] = 4000; + +const buf = Buffer.from(arr.buffer); // shares the memory with arr; + +console.log(buf); + // Prints: + +// changing the TypedArray changes the Buffer also +arr[1] = 6000; + +console.log(buf); + // Prints: +``` + +The optional `byteOffset` and `length` arguments specify a memory range within +the `arrayBuffer` that will be shared by the `Buffer`. + +```js +const ab = new ArrayBuffer(10); +const buf = Buffer.from(ab, 0, 2); +console.log(buf.length); + // Prints: 2 +``` + +A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. + +### Class Method: Buffer.from(buffer) + + +* `buffer` {Buffer} + +Copies the passed `buffer` data onto a new `Buffer` instance. + +```js +const buf1 = Buffer.from('buffer'); +const buf2 = Buffer.from(buf1); + +buf1[0] = 0x61; +console.log(buf1.toString()); + // 'auffer' +console.log(buf2.toString()); + // 'buffer' (copy is not changed) +``` + +A `TypeError` will be thrown if `buffer` is not a `Buffer`. + +### Class Method: Buffer.from(str[, encoding]) + + +* `str` {String} String to encode. +* `encoding` {String} Encoding to use, Default: `'utf8'` + +Creates a new `Buffer` containing the given JavaScript string `str`. If +provided, the `encoding` parameter identifies the character encoding. +If not provided, `encoding` defaults to `'utf8'`. + +```js +const buf1 = Buffer.from('this is a tést'); +console.log(buf1.toString()); + // prints: this is a tést +console.log(buf1.toString('ascii')); + // prints: this is a tC)st + +const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); +console.log(buf2.toString()); + // prints: this is a tést +``` + +A `TypeError` will be thrown if `str` is not a string. + +### Class Method: Buffer.alloc(size[, fill[, encoding]]) + + +* `size` {Number} +* `fill` {Value} Default: `undefined` +* `encoding` {String} Default: `utf8` + +Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the +`Buffer` will be *zero-filled*. + +```js +const buf = Buffer.alloc(5); +console.log(buf); + // +``` + +The `size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +If `fill` is specified, the allocated `Buffer` will be initialized by calling +`buf.fill(fill)`. See [`buf.fill()`][] for more information. + +```js +const buf = Buffer.alloc(5, 'a'); +console.log(buf); + // +``` + +If both `fill` and `encoding` are specified, the allocated `Buffer` will be +initialized by calling `buf.fill(fill, encoding)`. For example: + +```js +const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); +console.log(buf); + // +``` + +Calling `Buffer.alloc(size)` can be significantly slower than the alternative +`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance +contents will *never contain sensitive data*. + +A `TypeError` will be thrown if `size` is not a number. + +### Class Method: Buffer.allocUnsafe(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must +be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit +architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is +thrown. A zero-length Buffer will be created if a `size` less than or equal to +0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +```js +const buf = Buffer.allocUnsafe(5); +console.log(buf); + // + // (octets will be different, every time) +buf.fill(0); +console.log(buf); + // +``` + +A `TypeError` will be thrown if `size` is not a number. + +Note that the `Buffer` module pre-allocates an internal `Buffer` instance of +size `Buffer.poolSize` that is used as a pool for the fast allocation of new +`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated +`new Buffer(size)` constructor) only when `size` is less than or equal to +`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default +value of `Buffer.poolSize` is `8192` but can be modified. + +Use of this pre-allocated internal memory pool is a key difference between +calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. +Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer +pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal +Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The +difference is subtle but can be important when an application requires the +additional performance that `Buffer.allocUnsafe(size)` provides. + +### Class Method: Buffer.allocUnsafeSlow(size) + + +* `size` {Number} + +Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The +`size` must be less than or equal to the value of +`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is +`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will +be created if a `size` less than or equal to 0 is specified. + +The underlying memory for `Buffer` instances created in this way is *not +initialized*. The contents of the newly created `Buffer` are unknown and +*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such +`Buffer` instances to zeroes. + +When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, +allocations under 4KB are, by default, sliced from a single pre-allocated +`Buffer`. This allows applications to avoid the garbage collection overhead of +creating many individually allocated Buffers. This approach improves both +performance and memory usage by eliminating the need to track and cleanup as +many `Persistent` objects. + +However, in the case where a developer may need to retain a small chunk of +memory from a pool for an indeterminate amount of time, it may be appropriate +to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then +copy out the relevant bits. + +```js +// need to keep around a few small chunks of memory +const store = []; + +socket.on('readable', () => { + const data = socket.read(); + // allocate for retained data + const sb = Buffer.allocUnsafeSlow(10); + // copy the data into the new allocation + data.copy(sb, 0, 0, 10); + store.push(sb); +}); +``` + +Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* +a developer has observed undue memory retention in their applications. + +A `TypeError` will be thrown if `size` is not a number. + +### All the Rest + +The rest of the `Buffer` API is exactly the same as in node.js. +[See the docs](https://nodejs.org/api/buffer.html). + + +## Related links + +- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) +- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) + +## Why is `Buffer` unsafe? + +Today, the node.js `Buffer` constructor is overloaded to handle many different argument +types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), +`ArrayBuffer`, and also `Number`. + +The API is optimized for convenience: you can throw any type at it, and it will try to do +what you want. + +Because the Buffer constructor is so powerful, you often see code like this: + +```js +// Convert UTF-8 strings to hex +function toHex (str) { + return new Buffer(str).toString('hex') +} +``` + +***But what happens if `toHex` is called with a `Number` argument?*** + +### Remote Memory Disclosure + +If an attacker can make your program call the `Buffer` constructor with a `Number` +argument, then they can make it allocate uninitialized memory from the node.js process. +This could potentially disclose TLS private keys, user data, or database passwords. + +When the `Buffer` constructor is passed a `Number` argument, it returns an +**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like +this, you **MUST** overwrite the contents before returning it to the user. + +From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): + +> `new Buffer(size)` +> +> - `size` Number +> +> The underlying memory for `Buffer` instances created in this way is not initialized. +> **The contents of a newly created `Buffer` are unknown and could contain sensitive +> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. + +(Emphasis our own.) + +Whenever the programmer intended to create an uninitialized `Buffer` you often see code +like this: + +```js +var buf = new Buffer(16) + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### Would this ever be a problem in real code? + +Yes. It's surprisingly common to forget to check the type of your variables in a +dynamically-typed language like JavaScript. + +Usually the consequences of assuming the wrong type is that your program crashes with an +uncaught exception. But the failure mode for forgetting to check the type of arguments to +the `Buffer` constructor is more catastrophic. + +Here's an example of a vulnerable service that takes a JSON payload and converts it to +hex: + +```js +// Take a JSON payload {str: "some string"} and convert it to hex +var server = http.createServer(function (req, res) { + var data = '' + req.setEncoding('utf8') + req.on('data', function (chunk) { + data += chunk + }) + req.on('end', function () { + var body = JSON.parse(data) + res.end(new Buffer(body.str).toString('hex')) + }) +}) + +server.listen(8080) +``` + +In this example, an http client just has to send: + +```json +{ + "str": 1000 +} +``` + +and it will get back 1,000 bytes of uninitialized memory from the server. + +This is a very serious bug. It's similar in severity to the +[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process +memory by remote attackers. + + +### Which real-world packages were vulnerable? + +#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) + +[Mathias Buus](https://github.com/mafintosh) and I +([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, +[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow +anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get +them to reveal 20 bytes at a time of uninitialized memory from the node.js process. + +Here's +[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) +that fixed it. We released a new fixed version, created a +[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all +vulnerable versions on npm so users will get a warning to upgrade to a newer version. + +#### [`ws`](https://www.npmjs.com/package/ws) + +That got us wondering if there were other vulnerable packages. Sure enough, within a short +period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the +most popular WebSocket implementation in node.js. + +If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as +expected, then uninitialized server memory would be disclosed to the remote peer. + +These were the vulnerable methods: + +```js +socket.send(number) +socket.ping(number) +socket.pong(number) +``` + +Here's a vulnerable socket server with some echo functionality: + +```js +server.on('connection', function (socket) { + socket.on('message', function (message) { + message = JSON.parse(message) + if (message.type === 'echo') { + socket.send(message.data) // send back the user's message + } + }) +}) +``` + +`socket.send(number)` called on the server, will disclose server memory. + +Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue +was fixed, with a more detailed explanation. Props to +[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the +[Node Security Project disclosure](https://nodesecurity.io/advisories/67). + + +### What's the solution? + +It's important that node.js offers a fast way to get memory otherwise performance-critical +applications would needlessly get a lot slower. + +But we need a better way to *signal our intent* as programmers. **When we want +uninitialized memory, we should request it explicitly.** + +Sensitive functionality should not be packed into a developer-friendly API that loosely +accepts many different types. This type of API encourages the lazy practice of passing +variables in without checking the type very carefully. + +#### A new API: `Buffer.allocUnsafe(number)` + +The functionality of creating buffers with uninitialized memory should be part of another +API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that +frequently gets user input of all sorts of different types passed into it. + +```js +var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! + +// Immediately overwrite the uninitialized buffer with data from another buffer +for (var i = 0; i < buf.length; i++) { + buf[i] = otherBuf[i] +} +``` + + +### How do we fix node.js core? + +We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as +`semver-major`) which defends against one case: + +```js +var str = 16 +new Buffer(str, 'utf8') +``` + +In this situation, it's implied that the programmer intended the first argument to be a +string, since they passed an encoding as a second argument. Today, node.js will allocate +uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not +what the programmer intended. + +But this is only a partial solution, since if the programmer does `new Buffer(variable)` +(without an `encoding` parameter) there's no way to know what they intended. If `variable` +is sometimes a number, then uninitialized memory will sometimes be returned. + +### What's the real long-term fix? + +We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when +we need uninitialized memory. But that would break 1000s of packages. + +~~We believe the best solution is to:~~ + +~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ + +~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ + +#### Update + +We now support adding three new APIs: + +- `Buffer.from(value)` - convert from any type to a buffer +- `Buffer.alloc(size)` - create a zero-filled buffer +- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size + +This solves the core problem that affected `ws` and `bittorrent-dht` which is +`Buffer(variable)` getting tricked into taking a number argument. + +This way, existing code continues working and the impact on the npm ecosystem will be +minimal. Over time, npm maintainers can migrate performance-critical code to use +`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. + + +### Conclusion + +We think there's a serious design issue with the `Buffer` API as it exists today. It +promotes insecure software by putting high-risk functionality into a convenient API +with friendly "developer ergonomics". + +This wasn't merely a theoretical exercise because we found the issue in some of the +most popular npm packages. + +Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of +`buffer`. + +```js +var Buffer = require('safe-buffer').Buffer +``` + +Eventually, we hope that node.js core can switch to this new, safer behavior. We believe +the impact on the ecosystem would be minimal since it's not a breaking change. +Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while +older, insecure packages would magically become safe from this attack vector. + + +## links + +- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) +- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) +- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) + + +## credit + +The original issues in `bittorrent-dht` +([disclosure](https://nodesecurity.io/advisories/68)) and +`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by +[Mathias Buus](https://github.com/mafintosh) and +[Feross Aboukhadijeh](http://feross.org/). + +Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues +and for his work running the [Node Security Project](https://nodesecurity.io/). + +Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and +auditing the code. + + +## license + +MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/.pnpm-store/v11/files/41/85714a4e1750e6328bb4295f4363d03c04941b21a9f147295ac42861f2268815e52f5569ebc210437ff8e88c7925c3ddb3cca9fbe7bba50eda8ba230715f1a b/.pnpm-store/v11/files/41/85714a4e1750e6328bb4295f4363d03c04941b21a9f147295ac42861f2268815e52f5569ebc210437ff8e88c7925c3ddb3cca9fbe7bba50eda8ba230715f1a new file mode 100644 index 00000000..af688d3e --- /dev/null +++ b/.pnpm-store/v11/files/41/85714a4e1750e6328bb4295f4363d03c04941b21a9f147295ac42861f2268815e52f5569ebc210437ff8e88c7925c3ddb3cca9fbe7bba50eda8ba230715f1a @@ -0,0 +1,67 @@ +module.exports = { + 'chunk': require('./chunk'), + 'compact': require('./compact'), + 'concat': require('./concat'), + 'difference': require('./difference'), + 'differenceBy': require('./differenceBy'), + 'differenceWith': require('./differenceWith'), + 'drop': require('./drop'), + 'dropRight': require('./dropRight'), + 'dropRightWhile': require('./dropRightWhile'), + 'dropWhile': require('./dropWhile'), + 'fill': require('./fill'), + 'findIndex': require('./findIndex'), + 'findLastIndex': require('./findLastIndex'), + 'first': require('./first'), + 'flatten': require('./flatten'), + 'flattenDeep': require('./flattenDeep'), + 'flattenDepth': require('./flattenDepth'), + 'fromPairs': require('./fromPairs'), + 'head': require('./head'), + 'indexOf': require('./indexOf'), + 'initial': require('./initial'), + 'intersection': require('./intersection'), + 'intersectionBy': require('./intersectionBy'), + 'intersectionWith': require('./intersectionWith'), + 'join': require('./join'), + 'last': require('./last'), + 'lastIndexOf': require('./lastIndexOf'), + 'nth': require('./nth'), + 'pull': require('./pull'), + 'pullAll': require('./pullAll'), + 'pullAllBy': require('./pullAllBy'), + 'pullAllWith': require('./pullAllWith'), + 'pullAt': require('./pullAt'), + 'remove': require('./remove'), + 'reverse': require('./reverse'), + 'slice': require('./slice'), + 'sortedIndex': require('./sortedIndex'), + 'sortedIndexBy': require('./sortedIndexBy'), + 'sortedIndexOf': require('./sortedIndexOf'), + 'sortedLastIndex': require('./sortedLastIndex'), + 'sortedLastIndexBy': require('./sortedLastIndexBy'), + 'sortedLastIndexOf': require('./sortedLastIndexOf'), + 'sortedUniq': require('./sortedUniq'), + 'sortedUniqBy': require('./sortedUniqBy'), + 'tail': require('./tail'), + 'take': require('./take'), + 'takeRight': require('./takeRight'), + 'takeRightWhile': require('./takeRightWhile'), + 'takeWhile': require('./takeWhile'), + 'union': require('./union'), + 'unionBy': require('./unionBy'), + 'unionWith': require('./unionWith'), + 'uniq': require('./uniq'), + 'uniqBy': require('./uniqBy'), + 'uniqWith': require('./uniqWith'), + 'unzip': require('./unzip'), + 'unzipWith': require('./unzipWith'), + 'without': require('./without'), + 'xor': require('./xor'), + 'xorBy': require('./xorBy'), + 'xorWith': require('./xorWith'), + 'zip': require('./zip'), + 'zipObject': require('./zipObject'), + 'zipObjectDeep': require('./zipObjectDeep'), + 'zipWith': require('./zipWith') +}; diff --git a/.pnpm-store/v11/files/41/90eb837524462c9cd7001f5d6caa20c7d2e61eb36b9aff7a27bb26c40f7e39dfc92c7f14ba4759127ae9fdb4e972d442d06497b26ba6ace64465cc98284d8f-exec b/.pnpm-store/v11/files/41/90eb837524462c9cd7001f5d6caa20c7d2e61eb36b9aff7a27bb26c40f7e39dfc92c7f14ba4759127ae9fdb4e972d442d06497b26ba6ace64465cc98284d8f-exec new file mode 100755 index 00000000..8f94ee93 --- /dev/null +++ b/.pnpm-store/v11/files/41/90eb837524462c9cd7001f5d6caa20c7d2e61eb36b9aff7a27bb26c40f7e39dfc92c7f14ba4759127ae9fdb4e972d442d06497b26ba6ace64465cc98284d8f-exec @@ -0,0 +1,14 @@ + + +### Welcome to using docker.r2g! + +You have probably already run `docker.r2g init`. + +
+To then run this tool, use: + +```bash + +docker.r2g exec + +``` diff --git a/.pnpm-store/v11/files/41/94cff8ba0eda2a9d77986bd9f60ef015379b8af246a9892cfde558e80a40f0b4d2f06d47149f47fcee6056b7fe76f3bb6e98532c216c2bf406eddcc2f4323d b/.pnpm-store/v11/files/41/94cff8ba0eda2a9d77986bd9f60ef015379b8af246a9892cfde558e80a40f0b4d2f06d47149f47fcee6056b7fe76f3bb6e98532c216c2bf406eddcc2f4323d new file mode 100644 index 00000000..cb619eb5 --- /dev/null +++ b/.pnpm-store/v11/files/41/94cff8ba0eda2a9d77986bd9f60ef015379b8af246a9892cfde558e80a40f0b4d2f06d47149f47fcee6056b7fe76f3bb6e98532c216c2bf406eddcc2f4323d @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('curryRight', require('../curryRight')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/41/97a4e0cdf1a8087f8539c6966206112576530446e2d4fb9b74fdb2242729cea085249c6737717d6565e44b896f60c895976db4b715ae5c108028f547363af7 b/.pnpm-store/v11/files/41/97a4e0cdf1a8087f8539c6966206112576530446e2d4fb9b74fdb2242729cea085249c6737717d6565e44b896f60c895976db4b715ae5c108028f547363af7 new file mode 100644 index 00000000..044afbed --- /dev/null +++ b/.pnpm-store/v11/files/41/97a4e0cdf1a8087f8539c6966206112576530446e2d4fb9b74fdb2242729cea085249c6737717d6565e44b896f60c895976db4b715ae5c108028f547363af7 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').log; diff --git a/.pnpm-store/v11/files/41/a680d073fd72342d0d1af77151272183a130ade55c92498e73b7deb8dc739e027eda469adc37c0cc0704141424852543d814c3fd3d7d659b67df49682634cd b/.pnpm-store/v11/files/41/a680d073fd72342d0d1af77151272183a130ade55c92498e73b7deb8dc739e027eda469adc37c0cc0704141424852543d814c3fd3d7d659b67df49682634cd new file mode 100644 index 00000000..47b265c2 --- /dev/null +++ b/.pnpm-store/v11/files/41/a680d073fd72342d0d1af77151272183a130ade55c92498e73b7deb8dc739e027eda469adc37c0cc0704141424852543d814c3fd3d7d659b67df49682634cd @@ -0,0 +1,76 @@ +'use strict'; + + +var common = require('./common'); + + +function Mark(name, buffer, position, line, column) { + this.name = name; + this.buffer = buffer; + this.position = position; + this.line = line; + this.column = column; +} + + +Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { + var head, start, tail, end, snippet; + + if (!this.buffer) return null; + + indent = indent || 4; + maxLength = maxLength || 75; + + head = ''; + start = this.position; + + while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { + start -= 1; + if (this.position - start > (maxLength / 2 - 1)) { + head = ' ... '; + start += 5; + break; + } + } + + tail = ''; + end = this.position; + + while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { + end += 1; + if (end - this.position > (maxLength / 2 - 1)) { + tail = ' ... '; + end -= 5; + break; + } + } + + snippet = this.buffer.slice(start, end); + + return common.repeat(' ', indent) + head + snippet + tail + '\n' + + common.repeat(' ', indent + this.position - start + head.length) + '^'; +}; + + +Mark.prototype.toString = function toString(compact) { + var snippet, where = ''; + + if (this.name) { + where += 'in "' + this.name + '" '; + } + + where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); + + if (!compact) { + snippet = this.getSnippet(); + + if (snippet) { + where += ':\n' + snippet; + } + } + + return where; +}; + + +module.exports = Mark; diff --git a/.pnpm-store/v11/files/41/b775b018403a0730cf9c3cc6500cf0b38f923149ec97c3ff27e8830a241677aeb5e4933d6c10a473f1e0a1864ce6601f0cd2a7eb15a1c013b8a03fc888bdce b/.pnpm-store/v11/files/41/b775b018403a0730cf9c3cc6500cf0b38f923149ec97c3ff27e8830a241677aeb5e4933d6c10a473f1e0a1864ce6601f0cd2a7eb15a1c013b8a03fc888bdce new file mode 100644 index 00000000..4eeb2c0a --- /dev/null +++ b/.pnpm-store/v11/files/41/b775b018403a0730cf9c3cc6500cf0b38f923149ec97c3ff27e8830a241677aeb5e4933d6c10a473f1e0a1864ce6601f0cd2a7eb15a1c013b8a03fc888bdce @@ -0,0 +1,23 @@ +/** + * Slice reference. + */ + +var slice = [].slice; + +/** + * Bind `obj` to `fn`. + * + * @param {Object} obj + * @param {Function|String} fn or string + * @return {Function} + * @api public + */ + +module.exports = function(obj, fn){ + if ('string' == typeof fn) fn = obj[fn]; + if ('function' != typeof fn) throw new Error('bind() requires a function'); + var args = slice.call(arguments, 2); + return function(){ + return fn.apply(obj, args.concat(slice.call(arguments))); + } +}; diff --git a/.pnpm-store/v11/files/42/0183afdb4794668758fba9c3950d3e8c375219c19890c21e5936eabe9f057ea4d05877927ad3b80763f0239f2d2a4ceaaeda8a4f31efdf9078ec9934475cf3 b/.pnpm-store/v11/files/42/0183afdb4794668758fba9c3950d3e8c375219c19890c21e5936eabe9f057ea4d05877927ad3b80763f0239f2d2a4ceaaeda8a4f31efdf9078ec9934475cf3 new file mode 100644 index 00000000..aa0dce0b --- /dev/null +++ b/.pnpm-store/v11/files/42/0183afdb4794668758fba9c3950d3e8c375219c19890c21e5936eabe9f057ea4d05877927ad3b80763f0239f2d2a4ceaaeda8a4f31efdf9078ec9934475cf3 @@ -0,0 +1,14 @@ +/*! + * isobject + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +var isArray = require('isarray'); + +module.exports = function isObject(val) { + return val != null && typeof val === 'object' && isArray(val) === false; +}; diff --git a/.pnpm-store/v11/files/42/05088f230eae4fc7412898b1b8566126ca340e9b860c45096970f0a3e318b0326769c7fc2c44c8bcdef670dbb6cf883f8c82480eab4a6bca53973e96cbce85 b/.pnpm-store/v11/files/42/05088f230eae4fc7412898b1b8566126ca340e9b860c45096970f0a3e318b0326769c7fc2c44c8bcdef670dbb6cf883f8c82480eab4a6bca53973e96cbce85 new file mode 100644 index 00000000..77fe837f --- /dev/null +++ b/.pnpm-store/v11/files/42/05088f230eae4fc7412898b1b8566126ca340e9b860c45096970f0a3e318b0326769c7fc2c44c8bcdef670dbb6cf883f8c82480eab4a6bca53973e96cbce85 @@ -0,0 +1,30 @@ +module.exports = { + 'countBy': require('./countBy'), + 'each': require('./each'), + 'eachRight': require('./eachRight'), + 'every': require('./every'), + 'filter': require('./filter'), + 'find': require('./find'), + 'findLast': require('./findLast'), + 'flatMap': require('./flatMap'), + 'flatMapDeep': require('./flatMapDeep'), + 'flatMapDepth': require('./flatMapDepth'), + 'forEach': require('./forEach'), + 'forEachRight': require('./forEachRight'), + 'groupBy': require('./groupBy'), + 'includes': require('./includes'), + 'invokeMap': require('./invokeMap'), + 'keyBy': require('./keyBy'), + 'map': require('./map'), + 'orderBy': require('./orderBy'), + 'partition': require('./partition'), + 'reduce': require('./reduce'), + 'reduceRight': require('./reduceRight'), + 'reject': require('./reject'), + 'sample': require('./sample'), + 'sampleSize': require('./sampleSize'), + 'shuffle': require('./shuffle'), + 'size': require('./size'), + 'some': require('./some'), + 'sortBy': require('./sortBy') +}; diff --git a/.pnpm-store/v11/files/42/13bb926856e1aa5c7f4f4f9528a679caa5ea309c753a394cd06267158d9e4d0ecbc40084a6e5d6bb79782fcdc55a4c603aefcbeaa9cb813d144201a278d4da b/.pnpm-store/v11/files/42/13bb926856e1aa5c7f4f4f9528a679caa5ea309c753a394cd06267158d9e4d0ecbc40084a6e5d6bb79782fcdc55a4c603aefcbeaa9cb813d144201a278d4da new file mode 100644 index 00000000..bd2a8e6c --- /dev/null +++ b/.pnpm-store/v11/files/42/13bb926856e1aa5c7f4f4f9528a679caa5ea309c753a394cd06267158d9e4d0ecbc40084a6e5d6bb79782fcdc55a4c603aefcbeaa9cb813d144201a278d4da @@ -0,0 +1,93 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const cp = require("child_process"); +const assert = require("assert"); +const chalk = require("chalk"); +const su = require("suman-utils"); +const _suman = global.__suman = (global.__suman || {}); +exports.run = function () { + const runSumanWithPromise = function (runOptions) { + if (runOptions.useGlobalVersion && runOptions.useLocalVersion) { + throw new Error('Suman run routine cannot use both local and global versions -> check your options object passed to suman.run()'); + } + if (runOptions.env && su.isObject(runOptions.env)) { + throw new Error('"env" property must be a plain object.'); + } + if (runOptions.files && !Array.isArray(runOptions.files)) { + throw new Error('"files" must be an Array.'); + } + else if (runOptions.files) { + runOptions.files.forEach(function (v) { + assert.equal(typeof v, 'string'); + }); + } + if (runOptions.args && !Array.isArray(runOptions.args)) { + throw new Error('"args" property must be an array.'); + } + else if (runOptions.args) { + runOptions.args.forEach(function (v) { + assert.equal(typeof v, 'string'); + }); + } + let executable, args = runOptions.args || [], files = runOptions.files || [], env = runOptions.env || {}, pauseStdio = runOptions.pauseStdio !== false; + if (args.length < 1 && files.length < 1) { + throw new Error('You must pass at least one argument or file to the suman executable, try "--" or "--default", if nothing else.'); + } + if (runOptions.useGlobalVersion) { + executable = 'suman'; + } + else if (runOptions.useLocalVersion) { + executable = path.resolve(_suman.projectRoot + '/node_modules/.bin/suman'); + } + else { + executable = 'suman'; + } + return new Promise(function (resolve, reject) { + const cmd = [executable].concat(args.concat(files)).join(' '); + _suman.log.good('suman will run the following command:'); + _suman.log.good(cmd); + const k = cp.spawn('bash', [], { + env: Object.assign({}, process.env, env), + }); + k.once('error', reject); + k.stdin.write(cmd); + k.stdin.end('\n'); + if (pauseStdio) { + k.stdout.pause(); + k.stderr.pause(); + } + resolve({ + sumanProcess: k + }); + }) + .catch(function (err) { + console.log(); + _suman.log.error(err.stack); + console.error(); + if (runOptions.useLocalVersion) { + _suman.log.error(chalk.red.bold('Local suman version may not be installed at this path:')); + _suman.log.error(executable); + } + if (runOptions.useGlobalVersion) { + _suman.log.error(chalk.red.bold('Globally installed suman version may not be available.')); + try { + _suman.log.error(chalk.gray.bold('The `which suman` command yields the following:')); + _suman.log.error(chalk.bold(String(cp.execSync('which suman')))); + } + catch (err) { + _suman.log.error(err.stack); + } + } + return Promise.reject(err); + }); + }; + runSumanWithPromise.cb = function (runOptions, cb) { + runSumanWithPromise(runOptions).then(function (val) { + cb(null, val); + }, cb); + }; + return runSumanWithPromise; +}; diff --git a/.pnpm-store/v11/files/42/16eadb4611a21de295feb517188838de2fd096e3d6aaeb174e0fd385049dc72f63bcb1f57f9fe3a4405461a3096a8cc7049a10713db432520c0bff8392ede9 b/.pnpm-store/v11/files/42/16eadb4611a21de295feb517188838de2fd096e3d6aaeb174e0fd385049dc72f63bcb1f57f9fe3a4405461a3096a8cc7049a10713db432520c0bff8392ede9 new file mode 100644 index 00000000..02bfed4a --- /dev/null +++ b/.pnpm-store/v11/files/42/16eadb4611a21de295feb517188838de2fd096e3d6aaeb174e0fd385049dc72f63bcb1f57f9fe3a4405461a3096a8cc7049a10713db432520c0bff8392ede9 @@ -0,0 +1,72 @@ +'use strict'; + +var extend = require('extend-shallow'); +var safe = require('safe-regex'); + +/** + * The main export is a function that takes a `pattern` string and an `options` object. + * + * ```js + & var not = require('regex-not'); + & console.log(not('foo')); + & //=> /^(?:(?!^(?:foo)$).)*$/ + * ``` + * + * @param {String} `pattern` + * @param {Object} `options` + * @return {RegExp} Converts the given `pattern` to a regex using the specified `options`. + * @api public + */ + +function toRegex(pattern, options) { + return new RegExp(toRegex.create(pattern, options)); +} + +/** + * Create a regex-compatible string from the given `pattern` and `options`. + * + * ```js + & var not = require('regex-not'); + & console.log(not.create('foo')); + & //=> '^(?:(?!^(?:foo)$).)*$' + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {String} + * @api public + */ + +toRegex.create = function(pattern, options) { + if (typeof pattern !== 'string') { + throw new TypeError('expected a string'); + } + + var opts = extend({}, options); + if (opts.contains === true) { + opts.strictNegate = false; + } + + var open = opts.strictOpen !== false ? '^' : ''; + var close = opts.strictClose !== false ? '$' : ''; + var endChar = opts.endChar ? opts.endChar : '+'; + var str = pattern; + + if (opts.strictNegate === false) { + str = '(?:(?!(?:' + pattern + ')).)' + endChar; + } else { + str = '(?:(?!^(?:' + pattern + ')$).)' + endChar; + } + + var res = open + str + close; + if (opts.safe === true && safe(res) === false) { + throw new Error('potentially unsafe regular expression: ' + res); + } + + return res; +}; + +/** + * Expose `toRegex` + */ + +module.exports = toRegex; diff --git a/.pnpm-store/v11/files/42/1908836f6dda205fa1e9491e59e0370b1d6d21009c54a7d230ba88abbbe47ab6d733a807cf8c664943de39da0180369330875e995c4d1984ab0f9750ead300 b/.pnpm-store/v11/files/42/1908836f6dda205fa1e9491e59e0370b1d6d21009c54a7d230ba88abbbe47ab6d733a807cf8c664943de39da0180369330875e995c4d1984ab0f9750ead300 new file mode 100644 index 00000000..5c9fac57 --- /dev/null +++ b/.pnpm-store/v11/files/42/1908836f6dda205fa1e9491e59e0370b1d6d21009c54a7d230ba88abbbe47ab6d733a807cf8c664943de39da0180369330875e995c4d1984ab0f9750ead300 @@ -0,0 +1,379 @@ +'use strict'; + +exports.__esModule = true; +exports.checkRevision = checkRevision; +exports.template = template; +exports.wrapProgram = wrapProgram; +exports.resolvePartial = resolvePartial; +exports.invokePartial = invokePartial; +exports.noop = noop; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +// istanbul ignore next + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } + +var _utils = require('./utils'); + +var Utils = _interopRequireWildcard(_utils); + +var _exception = require('./exception'); + +var _exception2 = _interopRequireDefault(_exception); + +var _base = require('./base'); + +var _helpers = require('./helpers'); + +var _internalWrapHelper = require('./internal/wrapHelper'); + +var _internalProtoAccess = require('./internal/proto-access'); + +function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = _base.COMPILER_REVISION; + + if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) { + return; + } + + if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) { + var runtimeVersions = _base.REVISION_CHANGES[currentRevision], + compilerVersions = _base.REVISION_CHANGES[compilerRevision]; + throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } +} + +function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _exception2['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as pseudo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) + var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = Utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + partial = env.VM.resolvePartial.call(this, partial, context, options); + + options.hooks = this.hooks; + options.protoAccessControl = this.protoAccessControl; + + var result = env.VM.invokePartial.call(this, partial, context, options); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, options); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name, loc) { + if (!obj || !(name in obj)) { + throw new _exception2['default']('"' + name + '" not defined in ' + obj, { + loc: loc + }); + } + return container.lookupProperty(obj, name); + }, + lookupProperty: function lookupProperty(parent, propertyName) { + var result = parent[propertyName]; + if (result == null) { + return result; + } + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return result; + } + + if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { + return result; + } + return undefined; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + var result = depths[i] && container.lookupProperty(depths[i], name); + if (result != null) { + return result; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: Utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + mergeIfNeeded: function mergeIfNeeded(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = Utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: Object.seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + var mergedHelpers = {}; + addHelpers(mergedHelpers, env.helpers, container); + addHelpers(mergedHelpers, options.helpers, container); + container.helpers = mergedHelpers; + + if (templateSpec.usePartial) { + // Use mergeIfNeeded here to prevent compiling global partials multiple times + container.partials = container.mergeIfNeeded(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = Utils.extend({}, env.decorators, options.decorators); + } + + container.hooks = {}; + container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options); + + var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; + _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); + _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); + } else { + container.protoAccessControl = options.protoAccessControl; // internal option + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + container.hooks = options.hooks; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _exception2['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _exception2['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; +} + +function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; +} + +/** + * This is currently part of the official API, therefore implementation details should not be changed. + */ + +function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = lookupOwnProperty(options.data, 'partial-block'); + } else { + partial = lookupOwnProperty(options.partials, options.name); + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = lookupOwnProperty(options.partials, partial); + } + return partial; +} + +function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = lookupOwnProperty(options.data, 'partial-block'); + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = _base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = _base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = Utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _exception2['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } +} + +function noop() { + return ''; +} + +function lookupOwnProperty(obj, name) { + if (obj && Object.prototype.hasOwnProperty.call(obj, name)) { + return obj[name]; + } +} + +function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? _base.createFrame(data) : {}; + data.root = context; + } + return data; +} + +function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + Utils.extend(prog, props); + } + return prog; +} + +function addHelpers(mergedHelpers, helpers, container) { + if (!helpers) return; + Object.keys(helpers).forEach(function (helperName) { + var helper = helpers[helperName]; + mergedHelpers[helperName] = passLookupPropertyOption(helper, container); + }); +} + +function passLookupPropertyOption(helper, container) { + var lookupProperty = container.lookupProperty; + return _internalWrapHelper.wrapHelper(helper, function (options) { + options.lookupProperty = lookupProperty; + return options; + }); +} +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzs7O0FBRzVDLE1BQU0sb0NBQW9DLEdBQ3hDLFlBQVksQ0FBQyxRQUFRLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRTFELFdBQVMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDdkQsUUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLGFBQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFVBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGVBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3ZCO0tBQ0Y7QUFDRCxXQUFPLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV0RSxXQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDM0IsV0FBTyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzs7QUFFckQsUUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUV4RSxRQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtBQUNqQyxhQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUMxQyxPQUFPLEVBQ1AsWUFBWSxDQUFDLGVBQWUsRUFDNUIsR0FBRyxDQUNKLENBQUM7QUFDRixZQUFNLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQzNEO0FBQ0QsUUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ2xCLFVBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUNsQixZQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLGFBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsY0FBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM1QixrQkFBTTtXQUNQOztBQUVELGVBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QztBQUNELGNBQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzNCO0FBQ0QsYUFBTyxNQUFNLENBQUM7S0FDZixNQUFNO0FBQ0wsWUFBTSwyQkFDSixjQUFjLEdBQ1osT0FBTyxDQUFDLElBQUksR0FDWiwwREFBMEQsQ0FDN0QsQ0FBQztLQUNIO0dBQ0Y7OztBQUdELE1BQUksU0FBUyxHQUFHO0FBQ2QsVUFBTSxFQUFFLGdCQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQy9CLFVBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxDQUFBLEFBQUMsRUFBRTtBQUMxQixjQUFNLDJCQUFjLEdBQUcsR0FBRyxJQUFJLEdBQUcsbUJBQW1CLEdBQUcsR0FBRyxFQUFFO0FBQzFELGFBQUcsRUFBRSxHQUFHO1NBQ1QsQ0FBQyxDQUFDO09BQ0o7QUFDRCxhQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVDO0FBQ0Qsa0JBQWMsRUFBRSx3QkFBUyxNQUFNLEVBQUUsWUFBWSxFQUFFO0FBQzdDLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxVQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsZUFBTyxNQUFNLENBQUM7T0FDZjtBQUNELFVBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsRUFBRTtBQUM5RCxlQUFPLE1BQU0sQ0FBQztPQUNmOztBQUVELFVBQUkscUNBQWdCLE1BQU0sRUFBRSxTQUFTLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxDQUFDLEVBQUU7QUFDdkUsZUFBTyxNQUFNLENBQUM7T0FDZjtBQUNELGFBQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0QsVUFBTSxFQUFFLGdCQUFTLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDN0IsVUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMxQixXQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFlBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwRSxZQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDbEIsaUJBQU8sTUFBTSxDQUFDO1NBQ2Y7T0FDRjtLQUNGO0FBQ0QsVUFBTSxFQUFFLGdCQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDakMsYUFBTyxPQUFPLE9BQU8sS0FBSyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDeEU7O0FBRUQsb0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtBQUN4QyxpQkFBYSxFQUFFLG9CQUFvQjs7QUFFbkMsTUFBRSxFQUFFLFlBQVMsQ0FBQyxFQUFFO0FBQ2QsVUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFNBQUcsQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN2QyxhQUFPLEdBQUcsQ0FBQztLQUNaOztBQUVELFlBQVEsRUFBRSxFQUFFO0FBQ1osV0FBTyxFQUFFLGlCQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRTtBQUNuRSxVQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztVQUNuQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixVQUFJLElBQUksSUFBSSxNQUFNLElBQUksV0FBVyxJQUFJLG1CQUFtQixFQUFFO0FBQ3hELHNCQUFjLEdBQUcsV0FBVyxDQUMxQixJQUFJLEVBQ0osQ0FBQyxFQUNELEVBQUUsRUFDRixJQUFJLEVBQ0osbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztPQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMxQixzQkFBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7T0FDOUQ7QUFDRCxhQUFPLGNBQWMsQ0FBQztLQUN2Qjs7QUFFRCxRQUFJLEVBQUUsY0FBUyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzNCLGFBQU8sS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGFBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO09BQ3ZCO0FBQ0QsYUFBTyxLQUFLLENBQUM7S0FDZDtBQUNELGlCQUFhLEVBQUUsdUJBQVMsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUNyQyxVQUFJLEdBQUcsR0FBRyxLQUFLLElBQUksTUFBTSxDQUFDOztBQUUxQixVQUFJLEtBQUssSUFBSSxNQUFNLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRTtBQUN2QyxXQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO09BQ3ZDOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1o7O0FBRUQsZUFBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDOztBQUU1QixRQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJO0FBQ2pCLGdCQUFZLEVBQUUsWUFBWSxDQUFDLFFBQVE7R0FDcEMsQ0FBQzs7QUFFRixXQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQWdCO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNoQyxRQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOztBQUV4QixPQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCLFFBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDNUMsVUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDaEM7QUFDRCxRQUFJLE1BQU0sWUFBQTtRQUNSLFdBQVcsR0FBRyxZQUFZLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFDN0QsUUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzFCLFVBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUNsQixjQUFNLEdBQ0osT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQ3hCLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQztPQUN0QixNQUFNO0FBQ0wsY0FBTSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7T0FDcEI7S0FDRjs7QUFFRCxhQUFTLElBQUksQ0FBQyxPQUFPLGdCQUFnQjtBQUNuQyxhQUNFLEVBQUUsR0FDRixZQUFZLENBQUMsSUFBSSxDQUNmLFNBQVMsRUFDVCxPQUFPLEVBQ1AsU0FBUyxDQUFDLE9BQU8sRUFDakIsU0FBUyxDQUFDLFFBQVEsRUFDbEIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FDRDtLQUNIOztBQUVELFFBQUksR0FBRyxpQkFBaUIsQ0FDdEIsWUFBWSxDQUFDLElBQUksRUFDakIsSUFBSSxFQUNKLFNBQVMsRUFDVCxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFDcEIsSUFBSSxFQUNKLFdBQVcsQ0FDWixDQUFDO0FBQ0YsV0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQy9COztBQUVELEtBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOztBQUVqQixLQUFHLENBQUMsTUFBTSxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQ3BCLFVBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN2QixnQkFBVSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELGdCQUFVLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDdEQsZUFBUyxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUM7O0FBRWxDLFVBQUksWUFBWSxDQUFDLFVBQVUsRUFBRTs7QUFFM0IsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FDMUMsT0FBTyxDQUFDLFFBQVEsRUFDaEIsR0FBRyxDQUFDLFFBQVEsQ0FDYixDQUFDO09BQ0g7QUFDRCxVQUFJLFlBQVksQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLGFBQWEsRUFBRTtBQUN6RCxpQkFBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUNqQyxFQUFFLEVBQ0YsR0FBRyxDQUFDLFVBQVUsRUFDZCxPQUFPLENBQUMsVUFBVSxDQUNuQixDQUFDO09BQ0g7O0FBRUQsZUFBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDckIsZUFBUyxDQUFDLGtCQUFrQixHQUFHLDhDQUF5QixPQUFPLENBQUMsQ0FBQzs7QUFFakUsVUFBSSxtQkFBbUIsR0FDckIsT0FBTyxDQUFDLHlCQUF5QixJQUNqQyxvQ0FBb0MsQ0FBQztBQUN2QyxpQ0FBa0IsU0FBUyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQ25FLGlDQUFrQixTQUFTLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUN6RSxNQUFNO0FBQ0wsZUFBUyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztBQUMxRCxlQUFTLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDcEMsZUFBUyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3RDLGVBQVMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUMxQyxlQUFTLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7S0FDakM7R0FDRixDQUFDOztBQUVGLEtBQUcsQ0FBQyxNQUFNLEdBQUcsVUFBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDbEQsUUFBSSxZQUFZLENBQUMsY0FBYyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQy9DLFlBQU0sMkJBQWMsd0JBQXdCLENBQUMsQ0FBQztLQUMvQztBQUNELFFBQUksWUFBWSxDQUFDLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQyxZQUFNLDJCQUFjLHlCQUF5QixDQUFDLENBQUM7S0FDaEQ7O0FBRUQsV0FBTyxXQUFXLENBQ2hCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNmLElBQUksRUFDSixDQUFDLEVBQ0QsV0FBVyxFQUNYLE1BQU0sQ0FDUCxDQUFDO0dBQ0gsQ0FBQztBQUNGLFNBQU8sR0FBRyxDQUFDO0NBQ1o7O0FBRU0sU0FBUyxXQUFXLENBQ3pCLFNBQVMsRUFDVCxDQUFDLEVBQ0QsRUFBRSxFQUNGLElBQUksRUFDSixtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLE1BQU0sRUFDTjtBQUNBLFdBQVMsSUFBSSxDQUFDLE9BQU8sRUFBZ0I7UUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ2pDLFFBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUMzQixRQUNFLE1BQU0sSUFDTixPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUNwQixFQUFFLE9BQU8sS0FBSyxTQUFTLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUEsQUFBQyxFQUMxRDtBQUNBLG1CQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDMUM7O0FBRUQsV0FBTyxFQUFFLENBQ1AsU0FBUyxFQUNULE9BQU8sRUFDUCxTQUFTLENBQUMsT0FBTyxFQUNqQixTQUFTLENBQUMsUUFBUSxFQUNsQixPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksRUFDcEIsV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFDeEQsYUFBYSxDQUNkLENBQUM7R0FDSDs7QUFFRCxNQUFJLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQzs7QUFFekUsTUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDakIsTUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEMsTUFBSSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7QUFDNUMsU0FBTyxJQUFJLENBQUM7Q0FDYjs7Ozs7O0FBS00sU0FBUyxjQUFjLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDeEQsTUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNaLFFBQUksT0FBTyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRTtBQUNyQyxhQUFPLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztLQUM1RCxNQUFNO0FBQ0wsYUFBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzdEO0dBQ0YsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7O0FBRXpDLFdBQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFdBQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ3hEO0FBQ0QsU0FBTyxPQUFPLENBQUM7Q0FDaEI7O0FBRU0sU0FBUyxhQUFhLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRXZELE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztBQUM3RSxTQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2QixNQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDZixXQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0dBQ3ZFOztBQUVELE1BQUksWUFBWSxZQUFBLENBQUM7QUFDakIsTUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFOztBQUNyQyxhQUFPLENBQUMsSUFBSSxHQUFHLGtCQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFekMsVUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztBQUNwQixrQkFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsU0FBUyxtQkFBbUIsQ0FDekUsT0FBTyxFQUVQO1lBREEsT0FBTyx5REFBRyxFQUFFOzs7O0FBSVosZUFBTyxDQUFDLElBQUksR0FBRyxrQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekMsZUFBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxtQkFBbUIsQ0FBQztBQUNwRCxlQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDN0IsQ0FBQztBQUNGLFVBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtBQUNmLGVBQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDcEU7O0dBQ0Y7O0FBRUQsTUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLFlBQVksRUFBRTtBQUN6QyxXQUFPLEdBQUcsWUFBWSxDQUFDO0dBQ3hCOztBQUVELE1BQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUN6QixVQUFNLDJCQUFjLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLENBQUM7R0FDNUUsTUFBTSxJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUU7QUFDdEMsV0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xDO0NBQ0Y7O0FBRU0sU0FBUyxJQUFJLEdBQUc7QUFDckIsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDcEMsTUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRTtBQUMxRCxXQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUNsQjtDQUNGOztBQUVELFNBQVMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUU7QUFDL0IsTUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUEsQUFBQyxFQUFFO0FBQzlCLFFBQUksR0FBRyxJQUFJLEdBQUcsa0JBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLFFBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0dBQ3JCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYjs7QUFFRCxTQUFTLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3pFLE1BQUksRUFBRSxDQUFDLFNBQVMsRUFBRTtBQUNoQixRQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDZixRQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FDakIsSUFBSSxFQUNKLEtBQUssRUFDTCxTQUFTLEVBQ1QsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDbkIsSUFBSSxFQUNKLFdBQVcsRUFDWCxNQUFNLENBQ1AsQ0FBQztBQUNGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYjs7QUFFRCxTQUFTLFVBQVUsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtBQUNyRCxNQUFJLENBQUMsT0FBTyxFQUFFLE9BQU87QUFDckIsUUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxVQUFVLEVBQUk7QUFDekMsUUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pDLGlCQUFhLENBQUMsVUFBVSxDQUFDLEdBQUcsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3pFLENBQUMsQ0FBQztDQUNKOztBQUVELFNBQVMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUNuRCxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDO0FBQ2hELFNBQU8sK0JBQVcsTUFBTSxFQUFFLFVBQUEsT0FBTyxFQUFJO0FBQ25DLFdBQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLFdBQU8sT0FBTyxDQUFDO0dBQ2hCLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgb3B0aW9ucy5ob29rcyA9IHRoaXMuaG9va3M7XG4gICAgb3B0aW9ucy5wcm90b0FjY2Vzc0NvbnRyb2wgPSB0aGlzLnByb3RvQWNjZXNzQ29udHJvbDtcblxuICAgIGxldCByZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgIGlmIChvcHRpb25zLmluZGVudCkge1xuICAgICAgICBsZXQgbGluZXMgPSByZXN1bHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGlmICghbGluZXNbaV0gJiYgaSArIDEgPT09IGwpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxpbmVzW2ldID0gb3B0aW9ucy5pbmRlbnQgKyBsaW5lc1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSBsaW5lcy5qb2luKCdcXG4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdUaGUgcGFydGlhbCAnICtcbiAgICAgICAgICBvcHRpb25zLm5hbWUgK1xuICAgICAgICAgICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZSdcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgbGV0IGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uKG9iaiwgbmFtZSwgbG9jKSB7XG4gICAgICBpZiAoIW9iaiB8fCAhKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmosIHtcbiAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXIubG9va3VwUHJvcGVydHkob2JqLCBuYW1lKTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGVwdGhzW2ldICYmIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShkZXB0aHNbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZUlmTmVlZGVkOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID1cbiAgICAgICAgICBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdXG4gICAgICAgICAgICA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpXG4gICAgICAgICAgICA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dCAvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnJyArXG4gICAgICAgIHRlbXBsYXRlU3BlYy5tYWluKFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLFxuICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyhcbiAgICAgIHRlbXBsYXRlU3BlYy5tYWluLFxuICAgICAgbWFpbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMuZGVwdGhzIHx8IFtdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgbGV0IG1lcmdlZEhlbHBlcnMgPSB7fTtcbiAgICAgIGFkZEhlbHBlcnMobWVyZ2VkSGVscGVycywgZW52LmhlbHBlcnMsIGNvbnRhaW5lcik7XG4gICAgICBhZGRIZWxwZXJzKG1lcmdlZEhlbHBlcnMsIG9wdGlvbnMuaGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMuZGF0YSwgJ3BhcnRpYWwtYmxvY2snKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMucGFydGlhbHMsIG9wdGlvbnMubmFtZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMucGFydGlhbHMsIHBhcnRpYWwpO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IGxvb2t1cE93blByb3BlcnR5KG9wdGlvbnMuZGF0YSwgJ3BhcnRpYWwtYmxvY2snKTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cE93blByb3BlcnR5KG9iaiwgbmFtZSkge1xuICBpZiAob2JqICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIG5hbWUpKSB7XG4gICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKFxuICAgICAgcHJvZyxcbiAgICAgIHByb3BzLFxuICAgICAgY29udGFpbmVyLFxuICAgICAgZGVwdGhzICYmIGRlcHRoc1swXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvZztcbn1cblxuZnVuY3Rpb24gYWRkSGVscGVycyhtZXJnZWRIZWxwZXJzLCBoZWxwZXJzLCBjb250YWluZXIpIHtcbiAgaWYgKCFoZWxwZXJzKSByZXR1cm47XG4gIE9iamVjdC5rZXlzKGhlbHBlcnMpLmZvckVhY2goaGVscGVyTmFtZSA9PiB7XG4gICAgbGV0IGhlbHBlciA9IGhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpIHtcbiAgY29uc3QgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiB3cmFwSGVscGVyKGhlbHBlciwgb3B0aW9ucyA9PiB7XG4gICAgb3B0aW9ucy5sb29rdXBQcm9wZXJ0eSA9IGxvb2t1cFByb3BlcnR5O1xuICAgIHJldHVybiBvcHRpb25zO1xuICB9KTtcbn1cbiJdfQ== diff --git a/.pnpm-store/v11/files/42/1c7e7c44af968d1f0417103b817ace37278d55254c321a6867762fa67d551cfffecf7162fe53932e9ab28a5ccd6853b37040e143f29a1408aba223b7d39154 b/.pnpm-store/v11/files/42/1c7e7c44af968d1f0417103b817ace37278d55254c321a6867762fa67d551cfffecf7162fe53932e9ab28a5ccd6853b37040e143f29a1408aba223b7d39154 new file mode 100644 index 00000000..bcf5ad2e --- /dev/null +++ b/.pnpm-store/v11/files/42/1c7e7c44af968d1f0417103b817ace37278d55254c321a6867762fa67d551cfffecf7162fe53932e9ab28a5ccd6853b37040e143f29a1408aba223b7d39154 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('differenceWith', require('../differenceWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/42/39496b31071b799e30dcc18a05e6e95279799418a97dd57141a4d0f07ee0ddb057e09cb13c30c400202474b61e71175495b3cc411747ade097d12f4ee87dd0 b/.pnpm-store/v11/files/42/39496b31071b799e30dcc18a05e6e95279799418a97dd57141a4d0f07ee0ddb057e09cb13c30c400202474b61e71175495b3cc411747ade097d12f4ee87dd0 new file mode 100644 index 00000000..8a37ae2c --- /dev/null +++ b/.pnpm-store/v11/files/42/39496b31071b799e30dcc18a05e6e95279799418a97dd57141a4d0f07ee0ddb057e09cb13c30c400202474b61e71175495b3cc411747ade097d12f4ee87dd0 @@ -0,0 +1,11 @@ +{ + "env": { + "browser": true, + "node": true + }, + "rules": { + "no-console": 0, + "no-empty": [1, { "allowEmptyCatch": true }] + }, + "extends": "eslint:recommended" +} diff --git a/.pnpm-store/v11/files/42/39b55372aa7acda3f58cb6479cba8007c5912221ef768037f22c7fee987e5753301efbed7f2bd5db93557a3be0b3504a2386d9cf0b61832aef117bd376bbce b/.pnpm-store/v11/files/42/39b55372aa7acda3f58cb6479cba8007c5912221ef768037f22c7fee987e5753301efbed7f2bd5db93557a3be0b3504a2386d9cf0b61832aef117bd376bbce new file mode 100644 index 00000000..9380cb9c --- /dev/null +++ b/.pnpm-store/v11/files/42/39b55372aa7acda3f58cb6479cba8007c5912221ef768037f22c7fee987e5753301efbed7f2bd5db93557a3be0b3504a2386d9cf0b61832aef117bd376bbce @@ -0,0 +1,25 @@ +var baseSortedIndex = require('./_baseSortedIndex'); + +/** + * This method is like `_.sortedIndex` except that it returns the highest + * index at which `value` should be inserted into `array` in order to + * maintain its sort order. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The sorted array to inspect. + * @param {*} value The value to evaluate. + * @returns {number} Returns the index at which `value` should be inserted + * into `array`. + * @example + * + * _.sortedLastIndex([4, 5, 5, 5, 6], 5); + * // => 4 + */ +function sortedLastIndex(array, value) { + return baseSortedIndex(array, value, true); +} + +module.exports = sortedLastIndex; diff --git a/.pnpm-store/v11/files/42/39cd6f980752bd852d2c363615f06e87f33866c09f0e94e9e78f347a717a4e27fc1a207bfa712542ec220397a17c56758634246353c48f1115269f7c0edd72-exec b/.pnpm-store/v11/files/42/39cd6f980752bd852d2c363615f06e87f33866c09f0e94e9e78f347a717a4e27fc1a207bfa712542ec220397a17c56758634246353c48f1115269f7c0edd72-exec new file mode 100755 index 00000000..3d486877 --- /dev/null +++ b/.pnpm-store/v11/files/42/39cd6f980752bd852d2c363615f06e87f33866c09f0e94e9e78f347a717a4e27fc1a207bfa712542ec220397a17c56758634246353c48f1115269f7c0edd72-exec @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -e; + +if [ ! -f package.json ]; then + echo "there is no package.json file in your PWD." >&2; + false; +fi + + +map="$docker_r2g_fs_map" +search_root="$docker_r2g_search_root" +shared="$docker_r2g_shared_dir"; +name="$docker_r2g_package_name" # your project's package.json name field + +container="docker_r2g_$name"; +docker stop "$container" || echo "no container with name $container running." +docker rm "$container" || echo "no container with name $container could be removed." + +tag="docker_r2g_image/$name"; + + +docker build \ + -f Dockerfile.r2g \ + -t "$tag" \ + --build-arg CACHEBUST="$(date +%s)" . + +#docker run \ +# -v "$search_root:$shared:ro" \ +# -e docker_r2g_fs_map="$map" \ +# --name "$container" "$tag" + + +docker run \ + -v "$search_root:$shared:ro" \ + -e docker_r2g_fs_map="$map" \ + -e r2g_container_id="$container" \ + --entrypoint "dkr2g" \ + --name "$container" "$tag" \ + run --allow-unknown $@ diff --git a/.pnpm-store/v11/files/42/3f0b5d6f37a5b5e4d02a13e1e1de6b9008e054763a948ad43671f3daa005cbcc0e4ccadab405ebc33eee1b1d75e5667b151063052105acc49cccb78c977389 b/.pnpm-store/v11/files/42/3f0b5d6f37a5b5e4d02a13e1e1de6b9008e054763a948ad43671f3daa005cbcc0e4ccadab405ebc33eee1b1d75e5667b151063052105acc49cccb78c977389 new file mode 100644 index 00000000..97a87d97 --- /dev/null +++ b/.pnpm-store/v11/files/42/3f0b5d6f37a5b5e4d02a13e1e1de6b9008e054763a948ad43671f3daa005cbcc0e4ccadab405ebc33eee1b1d75e5667b151063052105acc49cccb78c977389 @@ -0,0 +1,16 @@ +export { InjectParam } from "./test-suite-params/inject/inject-param"; +export { EachHookParam } from "./test-suite-params/each-hook/each-hook-param"; +export { AllHookParam } from "./test-suite-params/all-hook/all-hook-param"; +export { TestCaseParam } from "./test-suite-params/test-case/test-case-param"; +export { ITestSuite } from 'suman-types/dts/test-suite'; +export { ItFn, ITestDataObj } from 'suman-types/dts/it'; +export { IDescribeFn, IDescribeOpts, TDescribeHook } from "suman-types/dts/describe"; +export { IBeforeFn } from 'suman-types/dts/before'; +export { IBeforeEachFn } from 'suman-types/dts/before-each'; +export { IAfterFn } from 'suman-types/dts/after'; +export { IAfterEachFn } from 'suman-types/dts/after-each'; +export { DefineObject } from "./test-suite-helpers/define-options-classes"; +export { DefineObjectContext as DefObjContext } from "./test-suite-helpers/define-options-classes"; +export { DefineObjectTestCase as DefObjTestCase } from "./test-suite-helpers/define-options-classes"; +export { DefineObjectAllHook as DefObjAllHook } from "./test-suite-helpers/define-options-classes"; +export { DefineObjectEachHook as DefObjEachHook } from "./test-suite-helpers/define-options-classes"; diff --git a/.pnpm-store/v11/files/42/4a882cd282c7e925513b0199dec3de4a5a4950a64dc5c83dd665de35d7a27c63fa27b39443614369157dc5601ca7b4add160b0c9f85db2e3e3afa4f4d4ecf3 b/.pnpm-store/v11/files/42/4a882cd282c7e925513b0199dec3de4a5a4950a64dc5c83dd665de35d7a27c63fa27b39443614369157dc5601ca7b4add160b0c9f85db2e3e3afa4f4d4ecf3 new file mode 100644 index 00000000..c6f2f614 --- /dev/null +++ b/.pnpm-store/v11/files/42/4a882cd282c7e925513b0199dec3de4a5a4950a64dc5c83dd665de35d7a27c63fa27b39443614369157dc5601ca7b4add160b0c9f85db2e3e3afa4f4d4ecf3 @@ -0,0 +1,47 @@ +Copyright JS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. diff --git a/.pnpm-store/v11/files/42/4c85d0e7c3b6423f49fc81176a8bd9168ddb844d21de0ea67691fcf6bafac125e0d67ad6edcc98ab1d0c37184b117c0f573e36567a0ce96a74c1c4ffd8e6f2 b/.pnpm-store/v11/files/42/4c85d0e7c3b6423f49fc81176a8bd9168ddb844d21de0ea67691fcf6bafac125e0d67ad6edcc98ab1d0c37184b117c0f573e36567a0ce96a74c1c4ffd8e6f2 new file mode 100644 index 00000000..2f88d8b0 --- /dev/null +++ b/.pnpm-store/v11/files/42/4c85d0e7c3b6423f49fc81176a8bd9168ddb844d21de0ea67691fcf6bafac125e0d67ad6edcc98ab1d0c37184b117c0f573e36567a0ce96a74c1c4ffd8e6f2 @@ -0,0 +1 @@ +module.exports = require('./initial'); diff --git a/.pnpm-store/v11/files/42/5ecdad62e205d2672ae14e2a29195f81e48d18654d132b19e5a8bd631fea0324a83d61c05751dc4a4f3e3395ebfaf90ca88bae17d5928da83b218fe5179259-exec b/.pnpm-store/v11/files/42/5ecdad62e205d2672ae14e2a29195f81e48d18654d132b19e5a8bd631fea0324a83d61c05751dc4a4f3e3395ebfaf90ca88bae17d5928da83b218fe5179259-exec new file mode 100755 index 00000000..76e5de96 --- /dev/null +++ b/.pnpm-store/v11/files/42/5ecdad62e205d2672ae14e2a29195f81e48d18654d132b19e5a8bd631fea0324a83d61c05751dc4a4f3e3395ebfaf90ca88bae17d5928da83b218fe5179259-exec @@ -0,0 +1,58 @@ +/// +import { MapToTargetDirResult, IMapCallback } from "suman-types/dts/suman-utils"; +import Timer = NodeJS.Timer; +export declare const weAreDebugging: any; +export declare const isStream: any; +export declare const isObservable: any; +export declare const isSubscriber: any; +export declare const noop: () => void; +export declare const newLine = "\n"; +export declare const isEventEmitter: (val: any) => boolean; +export declare const vgt: (val: number) => boolean; +export declare const vlt: (val: number) => boolean; +export declare const checkStatsIsFile: (item: string) => boolean | null; +export declare const mapToTargetDir: (item: string) => MapToTargetDirResult; +export declare const findApplicablePathsGivenTransform: (sumanConfig: Object, transformPath: string, cb: Function) => void; +export declare const isSumanSingleProcess: () => boolean; +export declare const isSumanDebug: (cb?: Function | undefined) => boolean; +export declare const runAssertionToCheckForSerialization: (val: Object) => void; +export declare const buildDirsWithMkDirp: (paths: string[], cb: Function) => void; +export declare const getArrayOfDirsToBuild: (testTargetPath: string, p: string) => string | undefined; +export declare const checkIfPathAlreadyExistsInList: (paths: string[], p: string, index: number) => boolean; +export declare const buildDirs: (dirs: string[], cb: Function) => void; +export declare const padWithFourSpaces: () => string; +export declare const padWithXSpaces: (x: number) => string; +export declare const removePath: (p1: string, p2: string) => string; +export declare const findSharedPath: (p1: string, p2: string) => string; +export declare const removeProjectRootFromPath: (p: string) => string; +export declare const removeSharedRootPath: (paths: string[]) => string[][]; +export declare const checkForValInStr: (str: string, regex: RegExp, count: number) => boolean; +export declare const isGeneratorFn2: (fn: Function) => boolean; +export declare const isGeneratorFn: (fn: Function) => boolean; +export declare const isArrowFunction: (fn: Function) => boolean; +export declare const isAsyncFn: (fn: Function) => boolean; +export declare const defaultSumanHomeDir: () => string; +export declare const defaultSumanResultsDir: () => string; +export declare const getHomeDir: () => string; +export declare const findProjectRoot: (p: string) => string; +export declare const findProjRoot: (p: string) => string; +export declare const once: (ctx: Object, fn: Function) => Function; +export declare const onceTO: (ctx: Object, fn: Function, to: Timer) => Function; +export declare const getCleanErrorString: (e: any) => string; +export declare const getCleanErrStr: (e: any) => string; +export declare const xNewLines: (count: number) => string; +export declare const isArrayOrFunction: (o: any) => boolean; +export declare const decomposeError: (err: any) => any; +export declare const repeatCharXTimes: (char: string, num: number) => string; +export declare const createCleanStack: (str: String, $ignore?: (string | RegExp)[] | undefined) => string[]; +export declare const onceAsync: (ctx: Object, fn: Function) => Function; +export declare const customStringify: (v: any) => string; +export declare const makePathExecutable: (runPath: string, cb: Function) => void; +export declare const checkForEquality: (arr1: string[], arr2: string[]) => boolean; +export declare const arrayHasDuplicates: (a: any[]) => boolean; +export declare const isStringWithPositiveLn: (s: string) => boolean; +export declare const findNearestRunAndTransform: (root: string, pth: string, cb: Function) => any; +export declare const findSumanMarkers: (types: string[], root: string, files: string[], cb: IMapCallback) => void; +export declare const isObject: (v: any) => boolean; +declare let $exports: any; +export default $exports; diff --git a/.pnpm-store/v11/files/42/6814ee45619453dbdaa6de7b04da5a59acc056afbf555793771154393bd37eb2ce0836795306bb2edddee432e0e85d2f0c5e0c20102eb7f54eee9801ffd5e8 b/.pnpm-store/v11/files/42/6814ee45619453dbdaa6de7b04da5a59acc056afbf555793771154393bd37eb2ce0836795306bb2edddee432e0e85d2f0c5e0c20102eb7f54eee9801ffd5e8 new file mode 100644 index 00000000..60ea3bf7 --- /dev/null +++ b/.pnpm-store/v11/files/42/6814ee45619453dbdaa6de7b04da5a59acc056afbf555793771154393bd37eb2ce0836795306bb2edddee432e0e85d2f0c5e0c20102eb7f54eee9801ffd5e8 @@ -0,0 +1,2 @@ +import { ISumanOpts } from "suman-types/dts/global"; +export declare const run: (opts: ISumanOpts) => void; diff --git a/.pnpm-store/v11/files/42/6d8e3f98d3b59840db916a84568c4bd9aa61506ed229ecbe1430a23c74575ccd955cc8b8137e0481ad38ff8802bd5d755a348693d45df7ea641e0b8ba91648 b/.pnpm-store/v11/files/42/6d8e3f98d3b59840db916a84568c4bd9aa61506ed229ecbe1430a23c74575ccd955cc8b8137e0481ad38ff8802bd5d755a348693d45df7ea641e0b8ba91648 new file mode 100644 index 00000000..fce31659 --- /dev/null +++ b/.pnpm-store/v11/files/42/6d8e3f98d3b59840db916a84568c4bd9aa61506ed229ecbe1430a23c74575ccd955cc8b8137e0481ad38ff8802bd5d755a348693d45df7ea641e0b8ba91648 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('nthArg', require('../nthArg')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/42/84387a565f2c47a31d92e32d116e30515918cffdeb6e467bb741e8eaae6858b32d75a5541262dd029538a4f876ad43178cb12494dce6c8989d58e6a3b90655 b/.pnpm-store/v11/files/42/84387a565f2c47a31d92e32d116e30515918cffdeb6e467bb741e8eaae6858b32d75a5541262dd029538a4f876ad43178cb12494dce6c8989d58e6a3b90655 new file mode 100644 index 00000000..fa52f7bc --- /dev/null +++ b/.pnpm-store/v11/files/42/84387a565f2c47a31d92e32d116e30515918cffdeb6e467bb741e8eaae6858b32d75a5541262dd029538a4f876ad43178cb12494dce6c8989d58e6a3b90655 @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ +function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function(value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; +} + +module.exports = baseEvery; diff --git a/.pnpm-store/v11/files/42/89fd1424bac9205eff8a52e6764abb86d47f06218f3eb3de04703e227ef648a13b8d9d36c4589e5caaa0d0ca302631ae324339f95381236334b7062719ea32-exec b/.pnpm-store/v11/files/42/89fd1424bac9205eff8a52e6764abb86d47f06218f3eb3de04703e227ef648a13b8d9d36c4589e5caaa0d0ca302631ae324339f95381236334b7062719ea32-exec new file mode 100755 index 00000000..5c332e40 --- /dev/null +++ b/.pnpm-store/v11/files/42/89fd1424bac9205eff8a52e6764abb86d47f06218f3eb3de04703e227ef648a13b8d9d36c4589e5caaa0d0ca302631ae324339f95381236334b7062719ea32-exec @@ -0,0 +1,87 @@ + +[![Version](https://img.shields.io/npm/v/@oresoftware/safe-stringify.svg?colorB=green)](https://www.npmjs.com/package/@oresoftware/safe-stringify) + +# @oresoftware/safe-stringify + + +#### Motivation/purpose for this library: + +> [See this Github gist](https://gist.github.com/ORESoftware/10bd74e27728a2aa764df4d6c6ecada8) + + +### Installation: + +> +>```bash +> $ npm i -S '@oresoftware/safe-stringify' +>``` +> + +## For most objects (this is more performant) + +```js +import * as safe from '@oresoftware/safe-stringify'; +const s = safe.stringify({}); +``` + +## For use with more complex deeply-nested objects with arrays: + + +Note: stringifyDeep is *not* production ready, please don't use it yet, +without improving it and making sure it works for you. + + +```js +import * as safe from '@oresoftware/safe-stringify'; +const s = safe.stringifyDeep([{}]); +``` + +For example the following works with `stringifyDeep` but not `stringify`: + +```js +const x = {dog:'bark'}; +x.mmm = {'zebra': 3}; +x.mmm = x; + +const v = [x,x,x]; +v.zzz = v; +v.foo = 5; +v.dog = 3; + +const mmm = safe.stringifyDeep([v,v,v]); +console.log(mmm); + +``` + + +## > Using Map and Set, etc + +This library does not treat Map and Set or other classes as special. To serialize a Map or Set instance, +you might do: + +```js + +class HasMapAndSet { + + constructor(){ + this.map = new Map([['one',1], ['two',2]]); + this.set = new Set([1,2,3]); + } + + toJSON(){ // use this to transform Map and Set to {} or [] + return { + map: Array.from(this.map), + set: Array.from(this.set) + } + } + +} + + +console.log( + JSON.stringify( + new HasMapAndSet() + ) +); + +``` diff --git a/.pnpm-store/v11/files/42/9ea24f3349ff800562eca84f78763ae0475633f8c994c38f26f07d99bdce9810dc8083bd51da88c8dc0c2fc016294a86af9ab201532c4e73a829f875e0bcdf b/.pnpm-store/v11/files/42/9ea24f3349ff800562eca84f78763ae0475633f8c994c38f26f07d99bdce9810dc8083bd51da88c8dc0c2fc016294a86af9ab201532c4e73a829f875e0bcdf new file mode 100644 index 00000000..d2cc5708 --- /dev/null +++ b/.pnpm-store/v11/files/42/9ea24f3349ff800562eca84f78763ae0475633f8c994c38f26f07d99bdce9810dc8083bd51da88c8dc0c2fc016294a86af9ab201532c4e73a829f875e0bcdf @@ -0,0 +1,111 @@ +{ + "name": "base", + "description": "base is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.", + "version": "0.11.2", + "homepage": "https://github.com/node-base/base", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "maintainers": [ + "Brian Woodward (https://github.com/doowb)", + "Jon Schlinkert (https://github.com/jonschlinkert)" + ], + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "John O'Donnell (https://github.com/criticalmash)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "tunnckoCore (https://i.am.charlike.online)", + "(https://github.com/wtgtybhertgeghgtwtg)" + ], + "repository": "node-base/base", + "bugs": { + "url": "https://github.com/node-base/base/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "devDependencies": { + "gulp": "^3.9.1", + "gulp-eslint": "^4.0.0", + "gulp-format-md": "^1.0.0", + "gulp-istanbul": "^1.1.2", + "gulp-mocha": "^3.0.1", + "helper-coverage": "^0.1.3", + "mocha": "^3.5.0", + "should": "^13.0.1", + "through2": "^2.0.3", + "verb-generate-readme": "^0.6.0" + }, + "keywords": [ + "base", + "boilerplate", + "cache", + "del", + "get", + "inherit", + "methods", + "set", + "starter", + "unset", + "visit" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "helpers": [ + "helper-coverage" + ], + "related": { + "description": "There are a number of different plugins available for extending base. Let us know if you create your own!", + "hightlight": "generate", + "list": [ + "base-cwd", + "base-data", + "base-fs", + "base-generators", + "base-option", + "base-pipeline", + "base-pkg", + "base-plugins", + "base-questions", + "base-store", + "base-task" + ] + }, + "reflinks": [ + "assemble", + "boilerplate", + "cache-base", + "class-utils", + "generate", + "scaffold", + "static-extend", + "verb" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/42/a713378ad10fa5cb6824272f116d5f09baac660adf393607a9f6240bdd19e2077dc52a72bc02012608c7d49637704a8b29736930640670a79988fa444f3493 b/.pnpm-store/v11/files/42/a713378ad10fa5cb6824272f116d5f09baac660adf393607a9f6240bdd19e2077dc52a72bc02012608c7d49637704a8b29736930640670a79988fa444f3493 new file mode 100644 index 00000000..ab0d7364 --- /dev/null +++ b/.pnpm-store/v11/files/42/a713378ad10fa5cb6824272f116d5f09baac660adf393607a9f6240bdd19e2077dc52a72bc02012608c7d49637704a8b29736930640670a79988fa444f3493 @@ -0,0 +1,19 @@ +export default function(instance) { + instance.registerHelper('log', function(/* message, options */) { + let args = [undefined], + options = arguments[arguments.length - 1]; + for (let i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + let level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log(...args); + }); +} diff --git a/.pnpm-store/v11/files/42/b132daf61c13fc1e445c473c48c5f5b074503be2c34dbb5b89e92b55967dee5f35eda7ffac6568b7e3d84df1988df945e5ba34bfb458d65d5f32114f1970ef b/.pnpm-store/v11/files/42/b132daf61c13fc1e445c473c48c5f5b074503be2c34dbb5b89e92b55967dee5f35eda7ffac6568b7e3d84df1988df945e5ba34bfb458d65d5f32114f1970ef new file mode 100644 index 00000000..dc7dd932 --- /dev/null +++ b/.pnpm-store/v11/files/42/b132daf61c13fc1e445c473c48c5f5b074503be2c34dbb5b89e92b55967dee5f35eda7ffac6568b7e3d84df1988df945e5ba34bfb458d65d5f32114f1970ef @@ -0,0 +1,87 @@ +{ + "name": "is-data-descriptor", + "version": "1.0.1", + "description": "Returns true if a value has the characteristics of a valid JavaScript data descriptor.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "lint": "eslint --ext=js,mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "prelint": "evalmd README.md", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/is-data-descriptor.git" + }, + "keywords": [ + "accessor", + "check", + "data", + "descriptor", + "get", + "getter", + "is", + "keys", + "object", + "properties", + "property", + "set", + "setter", + "type", + "valid", + "value" + ], + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "license": "MIT", + "bugs": { + "url": "https://github.com/inspect-js/is-data-descriptor/issues" + }, + "homepage": "https://github.com/inspect-js/is-data-descriptor", + "contributors": [ + "Jordan Harband (https://github.com/ljharb)", + "Jon Schlinkert (https://twitter.com/jonschlinkert)", + "Rouven Weßling (www.rouvenwessling.de)" + ], + "dependencies": { + "hasown": "^2.0.0" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.3", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.2" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/.pnpm-store/v11/files/42/c24c73f79c5643b2563f4617f570a28a75ee2abb1695a81a3a35998085aaa53c3e893a890e6d8b2b0e62f7676109abcafeac6b8158bd75836198c31846fbf0 b/.pnpm-store/v11/files/42/c24c73f79c5643b2563f4617f570a28a75ee2abb1695a81a3a35998085aaa53c3e893a890e6d8b2b0e62f7676109abcafeac6b8158bd75836198c31846fbf0 new file mode 100644 index 00000000..a07b0190 --- /dev/null +++ b/.pnpm-store/v11/files/42/c24c73f79c5643b2563f4617f570a28a75ee2abb1695a81a3a35998085aaa53c3e893a890e6d8b2b0e62f7676109abcafeac6b8158bd75836198c31846fbf0 @@ -0,0 +1,62 @@ +'use strict'; + +var test = require('tape'); +var isDescriptor = require('../'); +var noop = function () {}; + +test('isDescriptor', function (t) { + t.test('value type', function (st) { + st.notOk(isDescriptor('a'), 'string is not a descriptor'); + st.notOk(isDescriptor(null), 'null is not a descriptor'); + st.notOk(isDescriptor([]), 'Array is not a descriptor'); + + st.end(); + }); + + t.test('is false when the object has data descriptor properties:', function (st) { + st.notOk(isDescriptor({ get: noop, writable: true })); + st.notOk(isDescriptor({ get: noop, value: true })); + + st.end(); + }); + + t.test('is not false when unrecognized properties are defined:', function (st) { + st.ok(isDescriptor({ get: noop, foo: true })); + st.ok(isDescriptor({ get: noop, bar: true })); + + st.end(); + }); + + t.test('is false when a get or set are not functions:', function (st) { + st.notOk(isDescriptor({ get: noop, set: 'baz' })); + st.notOk(isDescriptor({ get: 'foo', set: noop })); + st.notOk(isDescriptor({ get: 'foo', bar: 'baz' })); + st.notOk(isDescriptor({ get: 'foo', set: 'baz' })); + st.notOk(isDescriptor({ get: 'foo' })); + + st.end(); + }); + + t.test('is true when "get" is not defined:', function (st) { + st.ok(isDescriptor({ set: noop })); + + st.end(); + }); + + t.test('is true when the object has valid properties:', function (st) { + st.ok(isDescriptor({ get: noop, set: noop })); + st.ok(isDescriptor({ get: noop })); + + st.end(); + }); + + t.test('is false when a value is not the correct type:', function (st) { + st.notOk(isDescriptor({ get: noop, set: noop, enumerable: 'foo' })); + st.notOk(isDescriptor({ set: noop, configurable: 'foo' })); + st.notOk(isDescriptor({ get: noop, configurable: 'foo' })); + + st.end(); + }); + + t.end(); +}); diff --git a/.pnpm-store/v11/files/42/fe37e523d20b547da1d46bc1ab3774ea28016bd96c66df9ed357c4a69e569ab87048928be6fb5b2b16635acd988b78fd51dac62f8ae4c59cf76816dfeebaea b/.pnpm-store/v11/files/42/fe37e523d20b547da1d46bc1ab3774ea28016bd96c66df9ed357c4a69e569ab87048928be6fb5b2b16635acd988b78fd51dac62f8ae4c59cf76816dfeebaea new file mode 100644 index 00000000..e78eb168 --- /dev/null +++ b/.pnpm-store/v11/files/42/fe37e523d20b547da1d46bc1ab3774ea28016bd96c66df9ed357c4a69e569ab87048928be6fb5b2b16635acd988b78fd51dac62f8ae4c59cf76816dfeebaea @@ -0,0 +1,9184 @@ +(function(global, factory) { + /*jshint -W030 */ + 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' + ? factory(exports) + : typeof define === 'function' && define.amd + ? define(['exports'], factory) + : global.async + ? factory((global.neo_async = global.neo_async || {})) + : factory((global.async = global.async || {})); +})(this, function(exports) { + 'use strict'; + + var noop = function noop() {}; + var throwError = function throwError() { + throw new Error('Callback was already called.'); + }; + + var DEFAULT_TIMES = 5; + var DEFAULT_INTERVAL = 0; + + var obj = 'object'; + var func = 'function'; + var isArray = Array.isArray; + var nativeKeys = Object.keys; + var nativePush = Array.prototype.push; + var iteratorSymbol = typeof Symbol === func && Symbol.iterator; + + var nextTick, asyncNextTick, asyncSetImmediate; + createImmediate(); + + /** + * @memberof async + * @namespace each + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(); + * }, num * 10); + * }; + * async.each(array, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(); + * }, num * 10); + * }; + * async.each(array, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(); + * }, num * 10); + * }; + * async.each(object, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(); + * }, num * 10); + * }; + * async.each(object, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + * @example + * + * // break + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num !== 2); + * }, num * 10); + * }; + * async.each(array, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 2] + * }); + * + */ + var each = createEach(arrayEach, baseEach, symbolEach); + + /** + * @memberof async + * @namespace map + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.map(array, iterator, function(err, res) { + * console.log(res); // [1, 3, 2]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.map(array, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.map(object, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.map(object, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + */ + var map = createMap(arrayEachIndex, baseEachIndex, symbolEachIndex, true); + + /** + * @memberof async + * @namespace mapValues + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapValues(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3, '2': 2 } + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.mapValues(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3, '2': 2 } + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapValues(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3, c: 2 } + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.mapValues(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3, c: 2 } + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + */ + var mapValues = createMap(arrayEachIndex, baseEachKey, symbolEachKey, false); + + /** + * @memberof async + * @namespace filter + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filter(array, iterator, function(err, res) { + * console.log(res); // [1, 3]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filter(array, iterator, function(err, res) { + * console.log(res); // [1, 3]; + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filter(object, iterator, function(err, res) { + * console.log(res); // [1, 3]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filter(object, iterator, function(err, res) { + * console.log(res); // [1, 3]; + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + */ + var filter = createFilter(arrayEachIndexValue, baseEachIndexValue, symbolEachIndexValue, true); + + /** + * @memberof async + * @namespace filterSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterSeries(array, iterator, function(err, res) { + * console.log(res); // [1, 3]; + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterSeries(array, iterator, function(err, res) { + * console.log(res); // [1, 3] + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterSeries(object, iterator, function(err, res) { + * console.log(res); // [1, 3] + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterSeries(object, iterator, function(err, res) { + * console.log(res); // [1, 3] + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] + * }); + * + */ + var filterSeries = createFilterSeries(true); + + /** + * @memberof async + * @namespace filterLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3] + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.filterLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3] + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + var filterLimit = createFilterLimit(true); + + /** + * @memberof async + * @namespace reject + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.reject(array, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.reject(array, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.reject(object, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.reject(object, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + */ + var reject = createFilter(arrayEachIndexValue, baseEachIndexValue, symbolEachIndexValue, false); + + /** + * @memberof async + * @namespace rejectSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectSeries(array, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectSeries(object, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectSeries(object, iterator, function(err, res) { + * console.log(res); // [2]; + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] + * }); + * + */ + var rejectSeries = createFilterSeries(false); + + /** + * @memberof async + * @namespace rejectLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [4, 2] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [4, 2] + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [4, 2] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.rejectLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [4, 2] + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + var rejectLimit = createFilterLimit(false); + + /** + * @memberof async + * @namespace detect + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detect(array, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detect(array, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [[1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detect(object, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detect(object, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [[1, 'a']] + * }); + * + */ + var detect = createDetect(arrayEachValue, baseEachValue, symbolEachValue, true); + + /** + * @memberof async + * @namespace detectSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectSeries(array, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectSeries(array, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [[1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectSeries(object, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectSeries(object, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [[1, 'a']] + * }); + * + */ + var detectSeries = createDetectSeries(true); + + /** + * @memberof async + * @namespace detectLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectLimit(array, 2, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectLimit(array, 2, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [[1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectLimit(object, 2, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.detectLimit(object, 2, iterator, function(err, res) { + * console.log(res); // 1 + * console.log(order); // [[1, 'a']] + * }); + * + */ + var detectLimit = createDetectLimit(true); + + /** + * @memberof async + * @namespace every + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.every(array, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [1, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.every(array, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [[1, 0], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.every(object, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [1, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.every(object, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [[1, 'a'], [2, 'c']] + * }); + * + */ + var every = createEvery(arrayEachValue, baseEachValue, symbolEachValue); + + /** + * @memberof async + * @namespace everySeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everySeries(array, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everySeries(array, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everySeries(object, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everySeries(object, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [[1, 'a'], [3, 'b'] [2, 'c']] + * }); + * + */ + var everySeries = createEverySeries(); + + /** + * @memberof async + * @namespace everyLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everyLimit(array, 2, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [1, 3, 5, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everyLimit(array, 2, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everyLimit(object, 2, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [1, 3, 5, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.everyLimit(object, 2, iterator, function(err, res) { + * console.log(res); // false + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e']] + * }); + * + */ + var everyLimit = createEveryLimit(); + + /** + * @memberof async + * @namespace pick + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pick(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3 } + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pick(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3 } + * console.log(order); // [[0, 1], [2, 2], [3, 1], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pick(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3 } + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pick(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3 } + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b'], [4, 'd']] + * }); + * + */ + var pick = createPick(arrayEachIndexValue, baseEachKeyValue, symbolEachKeyValue, true); + + /** + * @memberof async + * @namespace pickSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickSeries(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3 } + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickSeries(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3 } + * console.log(order); // [[0, 1], [3, 1], [2, 2], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickSeries(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3 } + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickSeries(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3 } + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c'], [4, 'd']] + * }); + * + */ + var pickSeries = createPickSeries(true); + + /** + * @memberof async + * @namespace pickLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 5, '2': 3 } + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 5, '2': 3 } + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 5, c: 3 } + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.pickLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 5, c: 3 } + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + var pickLimit = createPickLimit(true); + + /** + * @memberof async + * @namespace omit + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omit(array, iterator, function(err, res) { + * console.log(res); // { '2': 2, '3': 4 } + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omit(array, iterator, function(err, res) { + * console.log(res); // { '2': 2, '3': 4 } + * console.log(order); // [[0, 1], [2, 2], [3, 1], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omit(object, iterator, function(err, res) { + * console.log(res); // { c: 2, d: 4 } + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omit(object, iterator, function(err, res) { + * console.log(res); // { c: 2, d: 4 } + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b'], [4, 'd']] + * }); + * + */ + var omit = createPick(arrayEachIndexValue, baseEachKeyValue, symbolEachKeyValue, false); + + /** + * @memberof async + * @namespace omitSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitSeries(array, iterator, function(err, res) { + * console.log(res); // { '2': 2, '3': 4 } + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2, 4]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitSeries(array, iterator, function(err, res) { + * console.log(res); // { '2': 2, '3': 4 } + * console.log(order); // [[0, 1], [3, 1], [2, 2], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitSeries(object, iterator, function(err, res) { + * console.log(res); // { c: 2, d: 4 } + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitSeries(object, iterator, function(err, res) { + * console.log(res); // { c: 2, d: 4 } + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c'], [4, 'd']] + * }); + * + */ + var omitSeries = createPickSeries(false); + + /** + * @memberof async + * @namespace omitLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '3': 4, '4': 2 } + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '3': 4, '4': 2 } + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { d: 4, e: 2 } + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.omitLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { d: 4, e: 2 } + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + var omitLimit = createPickLimit(false); + + /** + * @memberof async + * @namespace transform + * @param {Array|Object} collection + * @param {Array|Object|Function} [accumulator] + * @param {Function} [iterator] + * @param {Function} [callback] + * @example + * + * // array + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * result.push(num) + * done(); + * }, num * 10); + * }; + * async.transform(collection, iterator, function(err, res) { + * console.log(res); // [1, 2, 3, 4] + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * // array with index and accumulator + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * result[index] = num; + * done(); + * }, num * 10); + * }; + * async.transform(collection, {}, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3, '2': 2, '3': 4 } + * console.log(order); // [[1, 0], [2, 2], [3, 1], [4, 3]] + * }); + * + * @example + * + * // object with accumulator + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * result.push(num); + * done(); + * }, num * 10); + * }; + * async.transform(collection, [], iterator, function(err, res) { + * console.log(res); // [1, 2, 3, 4] + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * result[key] = num; + * done(); + * }, num * 10); + * }; + * async.transform(collection, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3, c: 2, d: 4 } + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b'], [4, 'd']] + * }); + * + */ + var transform = createTransform(arrayEachResult, baseEachResult, symbolEachResult); + + /** + * @memberof async + * @namespace sortBy + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.sortBy(array, iterator, function(err, res) { + * console.log(res); // [1, 2, 3]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.sortBy(array, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.sortBy(object, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.sortBy(object, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + */ + var sortBy = createSortBy(arrayEachIndexValue, baseEachIndexValue, symbolEachIndexValue); + + /** + * @memberof async + * @namespace concat + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, [num]); + * }, num * 10); + * }; + * async.concat(array, iterator, function(err, res) { + * console.log(res); // [1, 2, 3]; + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, [num]); + * }, num * 10); + * }; + * async.concat(array, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [[1, 0], [2, 2], [3, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, [num]); + * }, num * 10); + * }; + * async.concat(object, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [1, 2, 3] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, [num]); + * }, num * 10); + * }; + * async.concat(object, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [[1, 'a'], [2, 'c'], [3, 'b']] + * }); + * + */ + var concat = createConcat(arrayEachIndex, baseEachIndex, symbolEachIndex); + + /** + * @memberof async + * @namespace groupBy + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [4.2, 6.4, 6.1]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBy(array, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } + * console.log(order); // [4.2, 6.1, 6.4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [4.2, 6.4, 6.1]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBy(array, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } + * console.log(order); // [[4.2, 0], [6.1, 2], [6.4, 1]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 4.2, b: 6.4, c: 6.1 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBy(object, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } + * console.log(order); // [4.2, 6.1, 6.4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 4.2, b: 6.4, c: 6.1 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBy(object, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.1, 6.4] } + * console.log(order); // [[4.2, 'a'], [6.1, 'c'], [6.4, 'b']] + * }); + * + */ + var groupBy = createGroupBy(arrayEachValue, baseEachValue, symbolEachValue); + + /** + * @memberof async + * @namespace parallel + * @param {Array|Object} tasks - functions + * @param {Function} callback + * @example + * + * var order = []; + * var tasks = [ + * function(done) { + * setTimeout(function() { + * order.push(1); + * done(null, 1); + * }, 10); + * }, + * function(done) { + * setTimeout(function() { + * order.push(2); + * done(null, 2); + * }, 30); + * }, + * function(done) { + * setTimeout(function() { + * order.push(3); + * done(null, 3); + * }, 40); + * }, + * function(done) { + * setTimeout(function() { + * order.push(4); + * done(null, 4); + * }, 20); + * } + * ]; + * async.parallel(tasks, function(err, res) { + * console.log(res); // [1, 2, 3, 4]; + * console.log(order); // [1, 4, 2, 3] + * }); + * + * @example + * + * var order = []; + * var tasks = { + * 'a': function(done) { + * setTimeout(function() { + * order.push(1); + * done(null, 1); + * }, 10); + * }, + * 'b': function(done) { + * setTimeout(function() { + * order.push(2); + * done(null, 2); + * }, 30); + * }, + * 'c': function(done) { + * setTimeout(function() { + * order.push(3); + * done(null, 3); + * }, 40); + * }, + * 'd': function(done) { + * setTimeout(function() { + * order.push(4); + * done(null, 4); + * }, 20); + * } + * }; + * async.parallel(tasks, function(err, res) { + * console.log(res); // { a: 1, b: 2, c: 3, d:4 } + * console.log(order); // [1, 4, 2, 3] + * }); + * + */ + var parallel = createParallel(arrayEachFunc, baseEachFunc); + + /** + * @memberof async + * @namespace applyEach + */ + var applyEach = createApplyEach(map); + + /** + * @memberof async + * @namespace applyEachSeries + */ + var applyEachSeries = createApplyEach(mapSeries); + + /** + * @memberof async + * @namespace log + */ + var log = createLogger('log'); + + /** + * @memberof async + * @namespace dir + */ + var dir = createLogger('dir'); + + /** + * @version 2.6.2 + * @namespace async + */ + var index = { + VERSION: '2.6.2', + + // Collections + each: each, + eachSeries: eachSeries, + eachLimit: eachLimit, + forEach: each, + forEachSeries: eachSeries, + forEachLimit: eachLimit, + eachOf: each, + eachOfSeries: eachSeries, + eachOfLimit: eachLimit, + forEachOf: each, + forEachOfSeries: eachSeries, + forEachOfLimit: eachLimit, + map: map, + mapSeries: mapSeries, + mapLimit: mapLimit, + mapValues: mapValues, + mapValuesSeries: mapValuesSeries, + mapValuesLimit: mapValuesLimit, + filter: filter, + filterSeries: filterSeries, + filterLimit: filterLimit, + select: filter, + selectSeries: filterSeries, + selectLimit: filterLimit, + reject: reject, + rejectSeries: rejectSeries, + rejectLimit: rejectLimit, + detect: detect, + detectSeries: detectSeries, + detectLimit: detectLimit, + find: detect, + findSeries: detectSeries, + findLimit: detectLimit, + pick: pick, + pickSeries: pickSeries, + pickLimit: pickLimit, + omit: omit, + omitSeries: omitSeries, + omitLimit: omitLimit, + reduce: reduce, + inject: reduce, + foldl: reduce, + reduceRight: reduceRight, + foldr: reduceRight, + transform: transform, + transformSeries: transformSeries, + transformLimit: transformLimit, + sortBy: sortBy, + sortBySeries: sortBySeries, + sortByLimit: sortByLimit, + some: some, + someSeries: someSeries, + someLimit: someLimit, + any: some, + anySeries: someSeries, + anyLimit: someLimit, + every: every, + everySeries: everySeries, + everyLimit: everyLimit, + all: every, + allSeries: everySeries, + allLimit: everyLimit, + concat: concat, + concatSeries: concatSeries, + concatLimit: concatLimit, + groupBy: groupBy, + groupBySeries: groupBySeries, + groupByLimit: groupByLimit, + + // Control Flow + parallel: parallel, + series: series, + parallelLimit: parallelLimit, + tryEach: tryEach, + waterfall: waterfall, + angelFall: angelFall, + angelfall: angelFall, + whilst: whilst, + doWhilst: doWhilst, + until: until, + doUntil: doUntil, + during: during, + doDuring: doDuring, + forever: forever, + compose: compose, + seq: seq, + applyEach: applyEach, + applyEachSeries: applyEachSeries, + queue: queue, + priorityQueue: priorityQueue, + cargo: cargo, + auto: auto, + autoInject: autoInject, + retry: retry, + retryable: retryable, + iterator: iterator, + times: times, + timesSeries: timesSeries, + timesLimit: timesLimit, + race: race, + + // Utils + apply: apply, + nextTick: asyncNextTick, + setImmediate: asyncSetImmediate, + memoize: memoize, + unmemoize: unmemoize, + ensureAsync: ensureAsync, + constant: constant, + asyncify: asyncify, + wrapSync: asyncify, + log: log, + dir: dir, + reflect: reflect, + reflectAll: reflectAll, + timeout: timeout, + createLogger: createLogger, + + // Mode + safe: safe, + fast: fast + }; + + exports['default'] = index; + baseEachSync( + index, + function(func, key) { + exports[key] = func; + }, + nativeKeys(index) + ); + + /** + * @private + */ + function createImmediate(safeMode) { + var delay = function delay(fn) { + var args = slice(arguments, 1); + setTimeout(function() { + fn.apply(null, args); + }); + }; + asyncSetImmediate = typeof setImmediate === func ? setImmediate : delay; + if (typeof process === obj && typeof process.nextTick === func) { + nextTick = /^v0.10/.test(process.version) ? asyncSetImmediate : process.nextTick; + asyncNextTick = /^v0/.test(process.version) ? asyncSetImmediate : process.nextTick; + } else { + asyncNextTick = nextTick = asyncSetImmediate; + } + if (safeMode === false) { + nextTick = function(cb) { + cb(); + }; + } + } + + /* sync functions based on lodash */ + + /** + * Converts `arguments` to an array. + * + * @private + * @param {Array} array = The array to slice. + */ + function createArray(array) { + var index = -1; + var size = array.length; + var result = Array(size); + + while (++index < size) { + result[index] = array[index]; + } + return result; + } + + /** + * Create an array from `start` + * + * @private + * @param {Array} array - The array to slice. + * @param {number} start - The start position. + */ + function slice(array, start) { + var end = array.length; + var index = -1; + var size = end - start; + if (size <= 0) { + return []; + } + var result = Array(size); + + while (++index < size) { + result[index] = array[index + start]; + } + return result; + } + + /** + * @private + * @param {Object} object + */ + function objectClone(object) { + var keys = nativeKeys(object); + var size = keys.length; + var index = -1; + var result = {}; + + while (++index < size) { + var key = keys[index]; + result[key] = object[key]; + } + return result; + } + + /** + * Create an array with all falsey values removed. + * + * @private + * @param {Array} array - The array to compact. + */ + function compact(array) { + var index = -1; + var size = array.length; + var result = []; + + while (++index < size) { + var value = array[index]; + if (value) { + result[result.length] = value; + } + } + return result; + } + + /** + * Create an array of reverse sequence. + * + * @private + * @param {Array} array - The array to reverse. + */ + function reverse(array) { + var index = -1; + var size = array.length; + var result = Array(size); + var resIndex = size; + + while (++index < size) { + result[--resIndex] = array[index]; + } + return result; + } + + /** + * Checks if key exists in object property. + * + * @private + * @param {Object} object - The object to inspect. + * @param {string} key - The key to check. + */ + function has(object, key) { + return object.hasOwnProperty(key); + } + + /** + * Check if target exists in array. + * @private + * @param {Array} array + * @param {*} target + */ + function notInclude(array, target) { + var index = -1; + var size = array.length; + + while (++index < size) { + if (array[index] === target) { + return false; + } + } + return true; + } + + /** + * @private + * @param {Array} array - The array to iterate over. + * @param {Function} iterator - The function invoked per iteration. + */ + function arrayEachSync(array, iterator) { + var index = -1; + var size = array.length; + + while (++index < size) { + iterator(array[index], index); + } + return array; + } + + /** + * @private + * @param {Object} object - The object to iterate over. + * @param {Function} iterator - The function invoked per iteration. + * @param {Array} keys + */ + function baseEachSync(object, iterator, keys) { + var index = -1; + var size = keys.length; + + while (++index < size) { + var key = keys[index]; + iterator(object[key], key); + } + return object; + } + + /** + * @private + * @param {number} n + * @param {Function} iterator + */ + function timesSync(n, iterator) { + var index = -1; + while (++index < n) { + iterator(index); + } + } + + /** + * @private + * @param {Array} array + * @param {number[]} criteria + */ + function sortByCriteria(array, criteria) { + var l = array.length; + var indices = Array(l); + var i; + for (i = 0; i < l; i++) { + indices[i] = i; + } + quickSort(criteria, 0, l - 1, indices); + var result = Array(l); + for (var n = 0; n < l; n++) { + i = indices[n]; + result[n] = i === undefined ? array[n] : array[i]; + } + return result; + } + + function partition(array, i, j, mid, indices) { + var l = i; + var r = j; + while (l <= r) { + i = l; + while (l < r && array[l] < mid) { + l++; + } + while (r >= i && array[r] >= mid) { + r--; + } + if (l > r) { + break; + } + swap(array, indices, l++, r--); + } + return l; + } + + function swap(array, indices, l, r) { + var n = array[l]; + array[l] = array[r]; + array[r] = n; + var i = indices[l]; + indices[l] = indices[r]; + indices[r] = i; + } + + function quickSort(array, i, j, indices) { + if (i === j) { + return; + } + var k = i; + while (++k <= j && array[i] === array[k]) { + var l = k - 1; + if (indices[l] > indices[k]) { + var index = indices[l]; + indices[l] = indices[k]; + indices[k] = index; + } + } + if (k > j) { + return; + } + var p = array[i] > array[k] ? i : k; + k = partition(array, i, j, array[p], indices); + quickSort(array, i, k - 1, indices); + quickSort(array, k, j, indices); + } + + /** + * @Private + */ + function makeConcatResult(array) { + var result = []; + arrayEachSync(array, function(value) { + if (value === noop) { + return; + } + if (isArray(value)) { + nativePush.apply(result, value); + } else { + result.push(value); + } + }); + return result; + } + + /* async functions */ + + /** + * @private + */ + function arrayEach(array, iterator, callback) { + var index = -1; + var size = array.length; + + if (iterator.length === 3) { + while (++index < size) { + iterator(array[index], index, onlyOnce(callback)); + } + } else { + while (++index < size) { + iterator(array[index], onlyOnce(callback)); + } + } + } + + /** + * @private + */ + function baseEach(object, iterator, callback, keys) { + var key; + var index = -1; + var size = keys.length; + + if (iterator.length === 3) { + while (++index < size) { + key = keys[index]; + iterator(object[key], key, onlyOnce(callback)); + } + } else { + while (++index < size) { + iterator(object[keys[index]], onlyOnce(callback)); + } + } + } + + /** + * @private + */ + function symbolEach(collection, iterator, callback) { + var iter = collection[iteratorSymbol](); + var index = 0; + var item; + if (iterator.length === 3) { + while ((item = iter.next()).done === false) { + iterator(item.value, index++, onlyOnce(callback)); + } + } else { + while ((item = iter.next()).done === false) { + index++; + iterator(item.value, onlyOnce(callback)); + } + } + return index; + } + + /** + * @private + */ + function arrayEachResult(array, result, iterator, callback) { + var index = -1; + var size = array.length; + + if (iterator.length === 4) { + while (++index < size) { + iterator(result, array[index], index, onlyOnce(callback)); + } + } else { + while (++index < size) { + iterator(result, array[index], onlyOnce(callback)); + } + } + } + + /** + * @private + */ + function baseEachResult(object, result, iterator, callback, keys) { + var key; + var index = -1; + var size = keys.length; + + if (iterator.length === 4) { + while (++index < size) { + key = keys[index]; + iterator(result, object[key], key, onlyOnce(callback)); + } + } else { + while (++index < size) { + iterator(result, object[keys[index]], onlyOnce(callback)); + } + } + } + + /** + * @private + */ + function symbolEachResult(collection, result, iterator, callback) { + var item; + var index = 0; + var iter = collection[iteratorSymbol](); + + if (iterator.length === 4) { + while ((item = iter.next()).done === false) { + iterator(result, item.value, index++, onlyOnce(callback)); + } + } else { + while ((item = iter.next()).done === false) { + index++; + iterator(result, item.value, onlyOnce(callback)); + } + } + return index; + } + + /** + * @private + */ + function arrayEachFunc(array, createCallback) { + var index = -1; + var size = array.length; + + while (++index < size) { + array[index](createCallback(index)); + } + } + + /** + * @private + */ + function baseEachFunc(object, createCallback, keys) { + var key; + var index = -1; + var size = keys.length; + + while (++index < size) { + key = keys[index]; + object[key](createCallback(key)); + } + } + + /** + * @private + */ + function arrayEachIndex(array, iterator, createCallback) { + var index = -1; + var size = array.length; + + if (iterator.length === 3) { + while (++index < size) { + iterator(array[index], index, createCallback(index)); + } + } else { + while (++index < size) { + iterator(array[index], createCallback(index)); + } + } + } + + /** + * @private + */ + function baseEachIndex(object, iterator, createCallback, keys) { + var key; + var index = -1; + var size = keys.length; + + if (iterator.length === 3) { + while (++index < size) { + key = keys[index]; + iterator(object[key], key, createCallback(index)); + } + } else { + while (++index < size) { + iterator(object[keys[index]], createCallback(index)); + } + } + } + + /** + * @private + */ + function symbolEachIndex(collection, iterator, createCallback) { + var item; + var index = 0; + var iter = collection[iteratorSymbol](); + + if (iterator.length === 3) { + while ((item = iter.next()).done === false) { + iterator(item.value, index, createCallback(index++)); + } + } else { + while ((item = iter.next()).done === false) { + iterator(item.value, createCallback(index++)); + } + } + return index; + } + + /** + * @private + */ + function baseEachKey(object, iterator, createCallback, keys) { + var key; + var index = -1; + var size = keys.length; + + if (iterator.length === 3) { + while (++index < size) { + key = keys[index]; + iterator(object[key], key, createCallback(key)); + } + } else { + while (++index < size) { + key = keys[index]; + iterator(object[key], createCallback(key)); + } + } + } + + /** + * @private + */ + function symbolEachKey(collection, iterator, createCallback) { + var item; + var index = 0; + var iter = collection[iteratorSymbol](); + + if (iterator.length === 3) { + while ((item = iter.next()).done === false) { + iterator(item.value, index, createCallback(index++)); + } + } else { + while ((item = iter.next()).done === false) { + iterator(item.value, createCallback(index++)); + } + } + return index; + } + + /** + * @private + */ + function arrayEachValue(array, iterator, createCallback) { + var value; + var index = -1; + var size = array.length; + + if (iterator.length === 3) { + while (++index < size) { + value = array[index]; + iterator(value, index, createCallback(value)); + } + } else { + while (++index < size) { + value = array[index]; + iterator(value, createCallback(value)); + } + } + } + + /** + * @private + */ + function baseEachValue(object, iterator, createCallback, keys) { + var key, value; + var index = -1; + var size = keys.length; + + if (iterator.length === 3) { + while (++index < size) { + key = keys[index]; + value = object[key]; + iterator(value, key, createCallback(value)); + } + } else { + while (++index < size) { + value = object[keys[index]]; + iterator(value, createCallback(value)); + } + } + } + + /** + * @private + */ + function symbolEachValue(collection, iterator, createCallback) { + var value, item; + var index = 0; + var iter = collection[iteratorSymbol](); + + if (iterator.length === 3) { + while ((item = iter.next()).done === false) { + value = item.value; + iterator(value, index++, createCallback(value)); + } + } else { + while ((item = iter.next()).done === false) { + index++; + value = item.value; + iterator(value, createCallback(value)); + } + } + return index; + } + + /** + * @private + */ + function arrayEachIndexValue(array, iterator, createCallback) { + var value; + var index = -1; + var size = array.length; + + if (iterator.length === 3) { + while (++index < size) { + value = array[index]; + iterator(value, index, createCallback(index, value)); + } + } else { + while (++index < size) { + value = array[index]; + iterator(value, createCallback(index, value)); + } + } + } + + /** + * @private + */ + function baseEachIndexValue(object, iterator, createCallback, keys) { + var key, value; + var index = -1; + var size = keys.length; + + if (iterator.length === 3) { + while (++index < size) { + key = keys[index]; + value = object[key]; + iterator(value, key, createCallback(index, value)); + } + } else { + while (++index < size) { + value = object[keys[index]]; + iterator(value, createCallback(index, value)); + } + } + } + + /** + * @private + */ + function symbolEachIndexValue(collection, iterator, createCallback) { + var value, item; + var index = 0; + var iter = collection[iteratorSymbol](); + + if (iterator.length === 3) { + while ((item = iter.next()).done === false) { + value = item.value; + iterator(value, index, createCallback(index++, value)); + } + } else { + while ((item = iter.next()).done === false) { + value = item.value; + iterator(value, createCallback(index++, value)); + } + } + return index; + } + + /** + * @private + */ + function baseEachKeyValue(object, iterator, createCallback, keys) { + var key, value; + var index = -1; + var size = keys.length; + + if (iterator.length === 3) { + while (++index < size) { + key = keys[index]; + value = object[key]; + iterator(value, key, createCallback(key, value)); + } + } else { + while (++index < size) { + key = keys[index]; + value = object[key]; + iterator(value, createCallback(key, value)); + } + } + } + + /** + * @private + */ + function symbolEachKeyValue(collection, iterator, createCallback) { + var value, item; + var index = 0; + var iter = collection[iteratorSymbol](); + + if (iterator.length === 3) { + while ((item = iter.next()).done === false) { + value = item.value; + iterator(value, index, createCallback(index++, value)); + } + } else { + while ((item = iter.next()).done === false) { + value = item.value; + iterator(value, createCallback(index++, value)); + } + } + return index; + } + + /** + * @private + * @param {Function} func + */ + function onlyOnce(func) { + return function(err, res) { + var fn = func; + func = throwError; + fn(err, res); + }; + } + + /** + * @private + * @param {Function} func + */ + function once(func) { + return function(err, res) { + var fn = func; + func = noop; + fn(err, res); + }; + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + */ + function createEach(arrayEach, baseEach, symbolEach) { + return function each(collection, iterator, callback) { + callback = once(callback || noop); + var size, keys; + var completed = 0; + if (isArray(collection)) { + size = collection.length; + arrayEach(collection, iterator, done); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = symbolEach(collection, iterator, done); + size && size === completed && callback(null); + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + baseEach(collection, iterator, done, keys); + } + if (!size) { + callback(null); + } + + function done(err, bool) { + if (err) { + callback = once(callback); + callback(err); + } else if (++completed === size) { + callback(null); + } else if (bool === false) { + callback = once(callback); + callback(null); + } + } + }; + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + */ + function createMap(arrayEach, baseEach, symbolEach, useArray) { + var init, clone; + if (useArray) { + init = Array; + clone = createArray; + } else { + init = function() { + return {}; + }; + clone = objectClone; + } + + return function(collection, iterator, callback) { + callback = callback || noop; + var size, keys, result; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + result = init(size); + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + // TODO: size could be changed + result = init(0); + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null, result); + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + result = init(size); + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + callback(null, init()); + } + + function createCallback(key) { + return function done(err, res) { + if (key === null) { + throwError(); + } + if (err) { + key = null; + callback = once(callback); + callback(err, clone(result)); + return; + } + result[key] = res; + key = null; + if (++completed === size) { + callback(null, result); + } + }; + } + }; + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + * @param {boolean} bool + */ + function createFilter(arrayEach, baseEach, symbolEach, bool) { + return function(collection, iterator, callback) { + callback = callback || noop; + var size, keys, result; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + result = Array(size); + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + result = []; + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null, compact(result)); + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + result = Array(size); + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + return callback(null, []); + } + + function createCallback(index, value) { + return function done(err, res) { + if (index === null) { + throwError(); + } + if (err) { + index = null; + callback = once(callback); + callback(err); + return; + } + if (!!res === bool) { + result[index] = value; + } + index = null; + if (++completed === size) { + callback(null, compact(result)); + } + }; + } + }; + } + + /** + * @private + * @param {boolean} bool + */ + function createFilterSeries(bool) { + return function(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, value, keys, iter, item, iterate; + var sync = false; + var completed = 0; + var result = []; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, []); + } + iterate(); + + function arrayIterator() { + value = collection[completed]; + iterator(value, done); + } + + function arrayIteratorWithIndex() { + value = collection[completed]; + iterator(value, completed, done); + } + + function symbolIterator() { + item = iter.next(); + value = item.value; + item.done ? callback(null, result) : iterator(value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + value = item.value; + item.done ? callback(null, result) : iterator(value, completed, done); + } + + function objectIterator() { + key = keys[completed]; + value = collection[key]; + iterator(value, done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + value = collection[key]; + iterator(value, key, done); + } + + function done(err, res) { + if (err) { + callback(err); + return; + } + if (!!res === bool) { + result[result.length] = value; + } + if (++completed === size) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + }; + } + + /** + * @private + * @param {boolean} bool + */ + function createFilterLimit(bool) { + return function(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, value, keys, iter, item, iterate, result; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + result = []; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, []); + } + result = result || Array(size); + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, createCallback(value, index)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, index, createCallback(value, index)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + value = item.value; + iterator(value, createCallback(value, started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, compact(result)); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + value = item.value; + iterator(value, started, createCallback(value, started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, compact(result)); + } + } + + function objectIterator() { + index = started++; + if (index < size) { + value = collection[keys[index]]; + iterator(value, createCallback(value, index)); + } + } + + function objectIteratorWithKey() { + index = started++; + if (index < size) { + key = keys[index]; + value = collection[key]; + iterator(value, key, createCallback(value, index)); + } + } + + function createCallback(value, index) { + return function(err, res) { + if (index === null) { + throwError(); + } + if (err) { + index = null; + iterate = noop; + callback = once(callback); + callback(err); + return; + } + if (!!res === bool) { + result[index] = value; + } + index = null; + if (++completed === size) { + callback = onlyOnce(callback); + callback(null, compact(result)); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + }; + } + + /** + * @memberof async + * @namespace eachSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(); + * }, num * 10); + * }; + * async.eachSeries(array, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(); + * }, num * 10); + * }; + * async.eachSeries(array, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(); + * }, num * 10); + * }; + * async.eachSeries(object, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(); + * }, num * 10); + * }; + * async.eachSeries(object, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'b']] + * }); + * + * @example + * + * // break + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num !== 3); + * }, num * 10); + * }; + * async.eachSeries(array, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 3] + * }); + */ + function eachSeries(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, keys, iter, item, iterate; + var sync = false; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null); + } + iterate(); + + function arrayIterator() { + iterator(collection[completed], done); + } + + function arrayIteratorWithIndex() { + iterator(collection[completed], completed, done); + } + + function symbolIterator() { + item = iter.next(); + item.done ? callback(null) : iterator(item.value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + item.done ? callback(null) : iterator(item.value, completed, done); + } + + function objectIterator() { + iterator(collection[keys[completed]], done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + iterator(collection[key], key, done); + } + + function done(err, bool) { + if (err) { + callback(err); + } else if (++completed === size || bool === false) { + iterate = throwError; + callback(null); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace eachLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(); + * }, num * 10); + * }; + * async.eachLimit(array, 2, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(); + * }, num * 10); + * }; + * async.eachLimit(array, 2, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(); + * }, num * 10); + * }; + * async.eachLimit(object, 2, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(); + * }, num * 10); + * }; + * async.eachLimit(object, 2, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + * @example + * + * // break + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num !== 5); + * }, num * 10); + * }; + * async.eachLimit(array, 2, iterator, function(err, res) { + * console.log(res); // undefined + * console.log(order); // [1, 3, 5] + * }); + * + */ + function eachLimit(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, keys, iter, item, iterate; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } else { + return callback(null); + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + if (started < size) { + iterator(collection[started++], done); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + iterator(collection[index], index, done); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + started++; + iterator(item.value, done); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, started++, done); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null); + } + } + + function objectIterator() { + if (started < size) { + iterator(collection[keys[started++]], done); + } + } + + function objectIteratorWithKey() { + index = started++; + if (index < size) { + key = keys[index]; + iterator(collection[key], key, done); + } + } + + function done(err, bool) { + if (err || bool === false) { + iterate = noop; + callback = once(callback); + callback(err); + } else if (++completed === size) { + iterator = noop; + iterate = throwError; + callback = onlyOnce(callback); + callback(null); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace mapSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapSeries(array, iterator, function(err, res) { + * console.log(res); // [1, 3, 2]; + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.mapSeries(array, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapSeries(object, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.mapSeries(object, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] + * }); + * + */ + function mapSeries(collection, iterator, callback) { + callback = callback || noop; + var size, key, keys, iter, item, result, iterate; + var sync = false; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + result = []; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, []); + } + result = result || Array(size); + iterate(); + + function arrayIterator() { + iterator(collection[completed], done); + } + + function arrayIteratorWithIndex() { + iterator(collection[completed], completed, done); + } + + function symbolIterator() { + item = iter.next(); + item.done ? callback(null, result) : iterator(item.value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + item.done ? callback(null, result) : iterator(item.value, completed, done); + } + + function objectIterator() { + iterator(collection[keys[completed]], done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + iterator(collection[key], key, done); + } + + function done(err, res) { + if (err) { + iterate = throwError; + callback = onlyOnce(callback); + callback(err, createArray(result)); + return; + } + result[completed] = res; + if (++completed === size) { + iterate = throwError; + callback(null, result); + callback = throwError; + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace mapLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3, 4, 2] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.mapLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3, 4, 2] + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3, 4, 2] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.mapLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 5, 3, 4, 2] + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + function mapLimit(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, keys, iter, item, result, iterate; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + result = []; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, []); + } + result = result || Array(size); + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + iterator(collection[index], createCallback(index)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + iterator(collection[index], index, createCallback(index)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, createCallback(started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, started, createCallback(started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function objectIterator() { + index = started++; + if (index < size) { + iterator(collection[keys[index]], createCallback(index)); + } + } + + function objectIteratorWithKey() { + index = started++; + if (index < size) { + key = keys[index]; + iterator(collection[key], key, createCallback(index)); + } + } + + function createCallback(index) { + return function(err, res) { + if (index === null) { + throwError(); + } + if (err) { + index = null; + iterate = noop; + callback = once(callback); + callback(err, createArray(result)); + return; + } + result[index] = res; + index = null; + if (++completed === size) { + iterate = throwError; + callback(null, result); + callback = throwError; + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @memberof async + * @namespace mapValuesSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesSeries(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3, '2': 2 } + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesSeries(array, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3, '2': 2 } + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesSeries(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3, c: 2 } + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesSeries(object, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3, c: 2 } + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] + * }); + * + */ + function mapValuesSeries(collection, iterator, callback) { + callback = callback || noop; + var size, key, keys, iter, item, iterate; + var sync = false; + var result = {}; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, result); + } + iterate(); + + function arrayIterator() { + key = completed; + iterator(collection[completed], done); + } + + function arrayIteratorWithIndex() { + key = completed; + iterator(collection[completed], completed, done); + } + + function symbolIterator() { + key = completed; + item = iter.next(); + item.done ? callback(null, result) : iterator(item.value, done); + } + + function symbolIteratorWithKey() { + key = completed; + item = iter.next(); + item.done ? callback(null, result) : iterator(item.value, completed, done); + } + + function objectIterator() { + key = keys[completed]; + iterator(collection[key], done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + iterator(collection[key], key, done); + } + + function done(err, res) { + if (err) { + iterate = throwError; + callback = onlyOnce(callback); + callback(err, objectClone(result)); + return; + } + result[key] = res; + if (++completed === size) { + iterate = throwError; + callback(null, result); + callback = throwError; + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace mapValuesLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 5, '2': 3, '3': 4, '4': 2 } + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 5, '2': 3, '3': 4, '4': 2 } + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 5, c: 3, d: 4, e: 2 } + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.mapValuesLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 5, c: 3, d: 4, e: 2 } + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + function mapValuesLimit(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, keys, iter, item, iterate; + var sync = false; + var result = {}; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, result); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + iterator(collection[index], createCallback(index)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + iterator(collection[index], index, createCallback(index)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, createCallback(started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, started, createCallback(started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function objectIterator() { + index = started++; + if (index < size) { + key = keys[index]; + iterator(collection[key], createCallback(key)); + } + } + + function objectIteratorWithKey() { + index = started++; + if (index < size) { + key = keys[index]; + iterator(collection[key], key, createCallback(key)); + } + } + + function createCallback(key) { + return function(err, res) { + if (key === null) { + throwError(); + } + if (err) { + key = null; + iterate = noop; + callback = once(callback); + callback(err, objectClone(result)); + return; + } + result[key] = res; + key = null; + if (++completed === size) { + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + * @param {boolean} bool + */ + function createDetect(arrayEach, baseEach, symbolEach, bool) { + return function(collection, iterator, callback) { + callback = callback || noop; + var size, keys; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null); + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + callback(null); + } + + function createCallback(value) { + var called = false; + return function done(err, res) { + if (called) { + throwError(); + } + called = true; + if (err) { + callback = once(callback); + callback(err); + } else if (!!res === bool) { + callback = once(callback); + callback(null, value); + } else if (++completed === size) { + callback(null); + } + }; + } + }; + } + + /** + * @private + * @param {boolean} bool + */ + function createDetectSeries(bool) { + return function(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, value, keys, iter, item, iterate; + var sync = false; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null); + } + iterate(); + + function arrayIterator() { + value = collection[completed]; + iterator(value, done); + } + + function arrayIteratorWithIndex() { + value = collection[completed]; + iterator(value, completed, done); + } + + function symbolIterator() { + item = iter.next(); + value = item.value; + item.done ? callback(null) : iterator(value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + value = item.value; + item.done ? callback(null) : iterator(value, completed, done); + } + + function objectIterator() { + value = collection[keys[completed]]; + iterator(value, done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + value = collection[key]; + iterator(value, key, done); + } + + function done(err, res) { + if (err) { + callback(err); + } else if (!!res === bool) { + iterate = throwError; + callback(null, value); + } else if (++completed === size) { + iterate = throwError; + callback(null); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + }; + } + + /** + * @private + * @param {boolean} bool + */ + function createDetectLimit(bool) { + return function(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, value, keys, iter, item, iterate; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, createCallback(value)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, index, createCallback(value)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + started++; + value = item.value; + iterator(value, createCallback(value)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + value = item.value; + iterator(value, started++, createCallback(value)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null); + } + } + + function objectIterator() { + index = started++; + if (index < size) { + value = collection[keys[index]]; + iterator(value, createCallback(value)); + } + } + + function objectIteratorWithKey() { + if (started < size) { + key = keys[started++]; + value = collection[key]; + iterator(value, key, createCallback(value)); + } + } + + function createCallback(value) { + var called = false; + return function(err, res) { + if (called) { + throwError(); + } + called = true; + if (err) { + iterate = noop; + callback = once(callback); + callback(err); + } else if (!!res === bool) { + iterate = noop; + callback = once(callback); + callback(null, value); + } else if (++completed === size) { + callback(null); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + }; + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + * @param {boolean} bool + */ + function createPick(arrayEach, baseEach, symbolEach, bool) { + return function(collection, iterator, callback) { + callback = callback || noop; + var size, keys; + var completed = 0; + var result = {}; + + if (isArray(collection)) { + size = collection.length; + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null, result); + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + return callback(null, {}); + } + + function createCallback(key, value) { + return function done(err, res) { + if (key === null) { + throwError(); + } + if (err) { + key = null; + callback = once(callback); + callback(err, objectClone(result)); + return; + } + if (!!res === bool) { + result[key] = value; + } + key = null; + if (++completed === size) { + callback(null, result); + } + }; + } + }; + } + + /** + * @private + * @param {boolean} bool + */ + function createPickSeries(bool) { + return function(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, value, keys, iter, item, iterate; + var sync = false; + var result = {}; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, {}); + } + iterate(); + + function arrayIterator() { + key = completed; + value = collection[completed]; + iterator(value, done); + } + + function arrayIteratorWithIndex() { + key = completed; + value = collection[completed]; + iterator(value, completed, done); + } + + function symbolIterator() { + key = completed; + item = iter.next(); + value = item.value; + item.done ? callback(null, result) : iterator(value, done); + } + + function symbolIteratorWithKey() { + key = completed; + item = iter.next(); + value = item.value; + item.done ? callback(null, result) : iterator(value, key, done); + } + + function objectIterator() { + key = keys[completed]; + value = collection[key]; + iterator(value, done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + value = collection[key]; + iterator(value, key, done); + } + + function done(err, res) { + if (err) { + callback(err, result); + return; + } + if (!!res === bool) { + result[key] = value; + } + if (++completed === size) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + }; + } + + /** + * @private + * @param {boolean} bool + */ + function createPickLimit(bool) { + return function(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, value, keys, iter, item, iterate; + var sync = false; + var result = {}; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, {}); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, createCallback(value, index)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, index, createCallback(value, index)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + value = item.value; + iterator(value, createCallback(value, started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + value = item.value; + iterator(value, started, createCallback(value, started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function objectIterator() { + if (started < size) { + key = keys[started++]; + value = collection[key]; + iterator(value, createCallback(value, key)); + } + } + + function objectIteratorWithKey() { + if (started < size) { + key = keys[started++]; + value = collection[key]; + iterator(value, key, createCallback(value, key)); + } + } + + function createCallback(value, key) { + return function(err, res) { + if (key === null) { + throwError(); + } + if (err) { + key = null; + iterate = noop; + callback = once(callback); + callback(err, objectClone(result)); + return; + } + if (!!res === bool) { + result[key] = value; + } + key = null; + if (++completed === size) { + iterate = throwError; + callback = onlyOnce(callback); + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + }; + } + + /** + * @memberof async + * @namespace reduce + * @param {Array|Object} collection + * @param {*} result + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduce(collection, 0, iterator, function(err, res) { + * console.log(res); // 10 + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduce(collection, '', iterator, function(err, res) { + * console.log(res); // '1324' + * console.log(order); // [[1, 0], [3, 1], [2, 2], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduce(collection, '', iterator, function(err, res) { + * console.log(res); // '1324' + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduce(collection, 0, iterator, function(err, res) { + * console.log(res); // 10 + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'b'], [4, 'd']] + * }); + * + */ + function reduce(collection, result, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, keys, iter, item, iterate; + var sync = false; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 4 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, result); + } + iterate(result); + + function arrayIterator(result) { + iterator(result, collection[completed], done); + } + + function arrayIteratorWithIndex(result) { + iterator(result, collection[completed], completed, done); + } + + function symbolIterator(result) { + item = iter.next(); + item.done ? callback(null, result) : iterator(result, item.value, done); + } + + function symbolIteratorWithKey(result) { + item = iter.next(); + item.done ? callback(null, result) : iterator(result, item.value, completed, done); + } + + function objectIterator(result) { + iterator(result, collection[keys[completed]], done); + } + + function objectIteratorWithKey(result) { + key = keys[completed]; + iterator(result, collection[key], key, done); + } + + function done(err, result) { + if (err) { + callback(err, result); + } else if (++completed === size) { + iterator = throwError; + callback(null, result); + } else if (sync) { + nextTick(function() { + iterate(result); + }); + } else { + sync = true; + iterate(result); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace reduceRight + * @param {Array|Object} collection + * @param {*} result + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduceRight(collection, 0, iterator, function(err, res) { + * console.log(res); // 10 + * console.log(order); // [4, 2, 3, 1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduceRight(collection, '', iterator, function(err, res) { + * console.log(res); // '4231' + * console.log(order); // [[4, 3], [2, 2], [3, 1], [1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduceRight(collection, '', iterator, function(err, res) { + * console.log(res); // '4231' + * console.log(order); // [4, 2, 3, 1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, result + num); + * }, num * 10); + * }; + * async.reduceRight(collection, 0, iterator, function(err, res) { + * console.log(res); // 10 + * console.log(order); // [[4, 3], [2, 2], [3, 1], [1, 0]] + * }); + * + */ + function reduceRight(collection, result, iterator, callback) { + callback = onlyOnce(callback || noop); + var resIndex, index, key, keys, iter, item, col, iterate; + var sync = false; + + if (isArray(collection)) { + resIndex = collection.length; + iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + col = []; + iter = collection[iteratorSymbol](); + index = -1; + while ((item = iter.next()).done === false) { + col[++index] = item.value; + } + collection = col; + resIndex = col.length; + iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + resIndex = keys.length; + iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; + } + if (!resIndex) { + return callback(null, result); + } + iterate(result); + + function arrayIterator(result) { + iterator(result, collection[--resIndex], done); + } + + function arrayIteratorWithIndex(result) { + iterator(result, collection[--resIndex], resIndex, done); + } + + function objectIterator(result) { + iterator(result, collection[keys[--resIndex]], done); + } + + function objectIteratorWithKey(result) { + key = keys[--resIndex]; + iterator(result, collection[key], key, done); + } + + function done(err, result) { + if (err) { + callback(err, result); + } else if (resIndex === 0) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(function() { + iterate(result); + }); + } else { + sync = true; + iterate(result); + } + sync = false; + } + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + */ + function createTransform(arrayEach, baseEach, symbolEach) { + return function transform(collection, accumulator, iterator, callback) { + if (arguments.length === 3) { + callback = iterator; + iterator = accumulator; + accumulator = undefined; + } + callback = callback || noop; + var size, keys, result; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + result = accumulator !== undefined ? accumulator : []; + arrayEach(collection, result, iterator, done); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + result = accumulator !== undefined ? accumulator : {}; + size = symbolEach(collection, result, iterator, done); + size && size === completed && callback(null, result); + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + result = accumulator !== undefined ? accumulator : {}; + baseEach(collection, result, iterator, done, keys); + } + if (!size) { + callback(null, accumulator !== undefined ? accumulator : result || {}); + } + + function done(err, bool) { + if (err) { + callback = once(callback); + callback(err, isArray(result) ? createArray(result) : objectClone(result)); + } else if (++completed === size) { + callback(null, result); + } else if (bool === false) { + callback = once(callback); + callback(null, isArray(result) ? createArray(result) : objectClone(result)); + } + } + }; + } + + /** + * @memberof async + * @namespace transformSeries + * @param {Array|Object} collection + * @param {Array|Object|Function} [accumulator] + * @param {Function} [iterator] + * @param {Function} [callback] + * @example + * + * // array + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * result.push(num) + * done(); + * }, num * 10); + * }; + * async.transformSeries(collection, iterator, function(err, res) { + * console.log(res); // [1, 3, 2, 4] + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // array with index and accumulator + * var order = []; + * var collection = [1, 3, 2, 4]; + * var iterator = function(result, num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * result[index] = num; + * done(); + * }, num * 10); + * }; + * async.transformSeries(collection, {}, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 3, '2': 2, '3': 4 } + * console.log(order); // [[1, 0], [3, 1], [2, 2], [4, 3]] + * }); + * + * @example + * + * // object with accumulator + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * result.push(num); + * done(); + * }, num * 10); + * }; + * async.transformSeries(collection, [], iterator, function(err, res) { + * console.log(res); // [1, 3, 2, 4] + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2, d: 4 }; + * var iterator = function(result, num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * result[key] = num; + * done(); + * }, num * 10); + * }; + * async.transformSeries(collection, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 3, c: 2, d: 4 } + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'b'], [4, 'd']] + * }); + * + */ + function transformSeries(collection, accumulator, iterator, callback) { + if (arguments.length === 3) { + callback = iterator; + iterator = accumulator; + accumulator = undefined; + } + callback = onlyOnce(callback || noop); + var size, key, keys, iter, item, iterate, result; + var sync = false; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + result = accumulator !== undefined ? accumulator : []; + iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + result = accumulator !== undefined ? accumulator : {}; + iterate = iterator.length === 4 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + result = accumulator !== undefined ? accumulator : {}; + iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, accumulator !== undefined ? accumulator : result || {}); + } + iterate(); + + function arrayIterator() { + iterator(result, collection[completed], done); + } + + function arrayIteratorWithIndex() { + iterator(result, collection[completed], completed, done); + } + + function symbolIterator() { + item = iter.next(); + item.done ? callback(null, result) : iterator(result, item.value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + item.done ? callback(null, result) : iterator(result, item.value, completed, done); + } + + function objectIterator() { + iterator(result, collection[keys[completed]], done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + iterator(result, collection[key], key, done); + } + + function done(err, bool) { + if (err) { + callback(err, result); + } else if (++completed === size || bool === false) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace transformLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Array|Object|Function} [accumulator] + * @param {Function} [iterator] + * @param {Function} [callback] + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * result.push(num); + * done(); + * }, num * 10); + * }; + * async.transformLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 3, 5, 2, 4] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index and accumulator + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(result, num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * result[index] = key; + * done(); + * }, num * 10); + * }; + * async.transformLimit(array, 2, {}, iterator, function(err, res) { + * console.log(res); // { '0': 1, '1': 5, '2': 3, '3': 4, '4': 2 } + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object with accumulator + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(result, num, done) { + * setTimeout(function() { + * order.push(num); + * result.push(num); + * done(); + * }, num * 10); + * }; + * async.transformLimit(object, 2, [], iterator, function(err, res) { + * console.log(res); // [1, 3, 5, 2, 4] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(result, num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * result[key] = num; + * done(); + * }, num * 10); + * }; + * async.transformLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + function transformLimit(collection, limit, accumulator, iterator, callback) { + if (arguments.length === 4) { + callback = iterator; + iterator = accumulator; + accumulator = undefined; + } + callback = callback || noop; + var size, index, key, keys, iter, item, iterate, result; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + result = accumulator !== undefined ? accumulator : []; + iterate = iterator.length === 4 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + result = accumulator !== undefined ? accumulator : {}; + iterate = iterator.length === 4 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + result = accumulator !== undefined ? accumulator : {}; + iterate = iterator.length === 4 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, accumulator !== undefined ? accumulator : result || {}); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + iterator(result, collection[index], onlyOnce(done)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + iterator(result, collection[index], index, onlyOnce(done)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + started++; + iterator(result, item.value, onlyOnce(done)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + iterator(result, item.value, started++, onlyOnce(done)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function objectIterator() { + index = started++; + if (index < size) { + iterator(result, collection[keys[index]], onlyOnce(done)); + } + } + + function objectIteratorWithKey() { + index = started++; + if (index < size) { + key = keys[index]; + iterator(result, collection[key], key, onlyOnce(done)); + } + } + + function done(err, bool) { + if (err || bool === false) { + iterate = noop; + callback(err || null, isArray(result) ? createArray(result) : objectClone(result)); + callback = noop; + } else if (++completed === size) { + iterator = noop; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @private + * @param {function} arrayEach + * @param {function} baseEach + * @param {function} symbolEach + */ + function createSortBy(arrayEach, baseEach, symbolEach) { + return function sortBy(collection, iterator, callback) { + callback = callback || noop; + var size, array, criteria; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + array = Array(size); + criteria = Array(size); + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + array = []; + criteria = []; + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null, sortByCriteria(array, criteria)); + } else if (typeof collection === obj) { + var keys = nativeKeys(collection); + size = keys.length; + array = Array(size); + criteria = Array(size); + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + callback(null, []); + } + + function createCallback(index, value) { + var called = false; + array[index] = value; + return function done(err, criterion) { + if (called) { + throwError(); + } + called = true; + criteria[index] = criterion; + if (err) { + callback = once(callback); + callback(err); + } else if (++completed === size) { + callback(null, sortByCriteria(array, criteria)); + } + }; + } + }; + } + + /** + * @memberof async + * @namespace sortBySeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.sortBySeries(array, iterator, function(err, res) { + * console.log(res); // [1, 2, 3]; + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.sortBySeries(array, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.sortBySeries(object, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.sortBySeries(object, iterator, function(err, res) { + * console.log(res); // [1, 2, 3] + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] + * }); + * + */ + function sortBySeries(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, value, keys, iter, item, array, criteria, iterate; + var sync = false; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + array = collection; + criteria = Array(size); + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + array = []; + criteria = []; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + array = Array(size); + criteria = Array(size); + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, []); + } + iterate(); + + function arrayIterator() { + value = collection[completed]; + iterator(value, done); + } + + function arrayIteratorWithIndex() { + value = collection[completed]; + iterator(value, completed, done); + } + + function symbolIterator() { + item = iter.next(); + if (item.done) { + return callback(null, sortByCriteria(array, criteria)); + } + value = item.value; + array[completed] = value; + iterator(value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done) { + return callback(null, sortByCriteria(array, criteria)); + } + value = item.value; + array[completed] = value; + iterator(value, completed, done); + } + + function objectIterator() { + value = collection[keys[completed]]; + array[completed] = value; + iterator(value, done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + value = collection[key]; + array[completed] = value; + iterator(value, key, done); + } + + function done(err, criterion) { + criteria[completed] = criterion; + if (err) { + callback(err); + } else if (++completed === size) { + iterate = throwError; + callback(null, sortByCriteria(array, criteria)); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace sortByLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.sortByLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 2, 3, 4, 5] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num); + * }, num * 10); + * }; + * async.sortByLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 2, 3, 4, 5] + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num); + * }, num * 10); + * }; + * async.sortByLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 2, 3, 4, 5] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.sortByLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 2, 3, 4, 5] + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + function sortByLimit(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, value, array, keys, iter, item, criteria, iterate; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + array = collection; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + array = []; + criteria = []; + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + array = Array(size); + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, []); + } + criteria = criteria || Array(size); + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + if (started < size) { + value = collection[started]; + iterator(value, createCallback(value, started++)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, index, createCallback(value, index)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + value = item.value; + array[started] = value; + iterator(value, createCallback(value, started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, sortByCriteria(array, criteria)); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + value = item.value; + array[started] = value; + iterator(value, started, createCallback(value, started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, sortByCriteria(array, criteria)); + } + } + + function objectIterator() { + if (started < size) { + value = collection[keys[started]]; + array[started] = value; + iterator(value, createCallback(value, started++)); + } + } + + function objectIteratorWithKey() { + if (started < size) { + key = keys[started]; + value = collection[key]; + array[started] = value; + iterator(value, key, createCallback(value, started++)); + } + } + + function createCallback(value, index) { + var called = false; + return function(err, criterion) { + if (called) { + throwError(); + } + called = true; + criteria[index] = criterion; + if (err) { + iterate = noop; + callback(err); + callback = noop; + } else if (++completed === size) { + callback(null, sortByCriteria(array, criteria)); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @memberof async + * @namespace some + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.some(array, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.some(array, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [[1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.some(object, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.some(object, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [[1, 'a']] + * }); + * + */ + function some(collection, iterator, callback) { + callback = callback || noop; + detect(collection, iterator, done); + + function done(err, res) { + if (err) { + return callback(err); + } + callback(null, !!res); + } + } + + /** + * @memberof async + * @namespace someSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someSeries(array, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someSeries(array, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [[1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someSeries(object, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someSeries(object, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [[1, 'a']] + * }); + * + */ + function someSeries(collection, iterator, callback) { + callback = callback || noop; + detectSeries(collection, iterator, done); + + function done(err, res) { + if (err) { + return callback(err); + } + callback(null, !!res); + } + } + + /** + * @memberof async + * @namespace someLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someLimit(array, 2, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someLimit(array, 2, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [[1, 0]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someLimit(object, 2, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num % 2); + * }, num * 10); + * }; + * async.someLimit(object, 2, iterator, function(err, res) { + * console.log(res); // true + * console.log(order); // [[1, 'a']] + * }); + * + */ + function someLimit(collection, limit, iterator, callback) { + callback = callback || noop; + detectLimit(collection, limit, iterator, done); + + function done(err, res) { + if (err) { + return callback(err); + } + callback(null, !!res); + } + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + */ + function createEvery(arrayEach, baseEach, symbolEach) { + var deny = createDetect(arrayEach, baseEach, symbolEach, false); + + return function every(collection, iterator, callback) { + callback = callback || noop; + deny(collection, iterator, done); + + function done(err, res) { + if (err) { + return callback(err); + } + callback(null, !res); + } + }; + } + + /** + * @private + */ + function createEverySeries() { + var denySeries = createDetectSeries(false); + + return function everySeries(collection, iterator, callback) { + callback = callback || noop; + denySeries(collection, iterator, done); + + function done(err, res) { + if (err) { + return callback(err); + } + callback(null, !res); + } + }; + } + + /** + * @private + */ + function createEveryLimit() { + var denyLimit = createDetectLimit(false); + + return function everyLimit(collection, limit, iterator, callback) { + callback = callback || noop; + denyLimit(collection, limit, iterator, done); + + function done(err, res) { + if (err) { + return callback(err); + } + callback(null, !res); + } + }; + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + */ + function createConcat(arrayEach, baseEach, symbolEach) { + return function concat(collection, iterator, callback) { + callback = callback || noop; + var size, result; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + result = Array(size); + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + result = []; + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null, result); + } else if (typeof collection === obj) { + var keys = nativeKeys(collection); + size = keys.length; + result = Array(size); + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + callback(null, []); + } + + function createCallback(index) { + return function done(err, res) { + if (index === null) { + throwError(); + } + if (err) { + index = null; + callback = once(callback); + arrayEachSync(result, function(array, index) { + if (array === undefined) { + result[index] = noop; + } + }); + callback(err, makeConcatResult(result)); + return; + } + switch (arguments.length) { + case 0: + case 1: + result[index] = noop; + break; + case 2: + result[index] = res; + break; + default: + result[index] = slice(arguments, 1); + break; + } + index = null; + if (++completed === size) { + callback(null, makeConcatResult(result)); + } + }; + } + }; + } + + /** + * @memberof async + * @namespace concatSeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, [num]); + * }, num * 10); + * }; + * async.concatSeries(array, iterator, function(err, res) { + * console.log(res); // [1, 3, 2]; + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 3, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, [num]); + * }, num * 10); + * }; + * async.concatSeries(array, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [[1, 0], [3, 1], [2, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, [num]); + * }, num * 10); + * }; + * async.concatSeries(object, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [1, 3, 2] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 3, c: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, [num]); + * }, num * 10); + * }; + * async.concatSeries(object, iterator, function(err, res) { + * console.log(res); // [1, 3, 2] + * console.log(order); // [[1, 'a'], [3, 'b'], [2, 'c']] + * }); + * + */ + function concatSeries(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, keys, iter, item, iterate; + var sync = false; + var result = []; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, result); + } + iterate(); + + function arrayIterator() { + iterator(collection[completed], done); + } + + function arrayIteratorWithIndex() { + iterator(collection[completed], completed, done); + } + + function symbolIterator() { + item = iter.next(); + item.done ? callback(null, result) : iterator(item.value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + item.done ? callback(null, result) : iterator(item.value, completed, done); + } + + function objectIterator() { + iterator(collection[keys[completed]], done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + iterator(collection[key], key, done); + } + + function done(err, array) { + if (isArray(array)) { + nativePush.apply(result, array); + } else if (arguments.length >= 2) { + nativePush.apply(result, slice(arguments, 1)); + } + if (err) { + callback(err, result); + } else if (++completed === size) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace concatLimit + * @param {Array|Object} collection + * @param {number} limit - limit >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, [num]); + * }, num * 10); + * }; + * async.concatLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 3, 5, 2, 4] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1, 5, 3, 4, 2]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, [num]); + * }, num * 10); + * }; + * async.cocnatLimit(array, 2, iterator, function(err, res) { + * console.log(res); // [1, 3, 5, 2, 4] + * console.log(order); // [[1, 0], [3, 2], [5, 1], [2, 4], [4, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, [num]); + * }, num * 10); + * }; + * async.concatLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 3, 5, 2, 4] + * console.log(order); // [1, 3, 5, 2, 4] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1, b: 5, c: 3, d: 4, e: 2 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, num); + * }, num * 10); + * }; + * async.cocnatLimit(object, 2, iterator, function(err, res) { + * console.log(res); // [1, 3, 5, 2, 4] + * console.log(order); // [[1, 'a'], [3, 'c'], [5, 'b'], [2, 'e'], [4, 'd']] + * }); + * + */ + function concatLimit(collection, limit, iterator, callback) { + callback = callback || noop; + var size, key, iter, item, iterate, result; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + result = []; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + var keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, []); + } + result = result || Array(size); + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + if (started < size) { + iterator(collection[started], createCallback(started++)); + } + } + + function arrayIteratorWithIndex() { + if (started < size) { + iterator(collection[started], started, createCallback(started++)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, createCallback(started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, makeConcatResult(result)); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + iterator(item.value, started, createCallback(started++)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, makeConcatResult(result)); + } + } + + function objectIterator() { + if (started < size) { + iterator(collection[keys[started]], createCallback(started++)); + } + } + + function objectIteratorWithKey() { + if (started < size) { + key = keys[started]; + iterator(collection[key], key, createCallback(started++)); + } + } + + function createCallback(index) { + return function(err, res) { + if (index === null) { + throwError(); + } + if (err) { + index = null; + iterate = noop; + callback = once(callback); + arrayEachSync(result, function(array, index) { + if (array === undefined) { + result[index] = noop; + } + }); + callback(err, makeConcatResult(result)); + return; + } + switch (arguments.length) { + case 0: + case 1: + result[index] = noop; + break; + case 2: + result[index] = res; + break; + default: + result[index] = slice(arguments, 1); + break; + } + index = null; + if (++completed === size) { + iterate = throwError; + callback(null, makeConcatResult(result)); + callback = throwError; + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + * @param {Function} symbolEach + */ + function createGroupBy(arrayEach, baseEach, symbolEach) { + return function groupBy(collection, iterator, callback) { + callback = callback || noop; + var size; + var completed = 0; + var result = {}; + + if (isArray(collection)) { + size = collection.length; + arrayEach(collection, iterator, createCallback); + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = symbolEach(collection, iterator, createCallback); + size && size === completed && callback(null, result); + } else if (typeof collection === obj) { + var keys = nativeKeys(collection); + size = keys.length; + baseEach(collection, iterator, createCallback, keys); + } + if (!size) { + callback(null, {}); + } + + function createCallback(value) { + var called = false; + return function done(err, key) { + if (called) { + throwError(); + } + called = true; + if (err) { + callback = once(callback); + callback(err, objectClone(result)); + return; + } + var array = result[key]; + if (!array) { + result[key] = [value]; + } else { + array.push(value); + } + if (++completed === size) { + callback(null, result); + } + }; + } + }; + } + + /** + * @memberof async + * @namespace groupBySeries + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [4.2, 6.4, 6.1]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBySeries(array, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } + * console.log(order); // [4.2, 6.4, 6.1] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [4.2, 6.4, 6.1]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBySeries(array, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } + * console.log(order); // [[4.2, 0], [6.4, 1], [6.1, 2]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 4.2, b: 6.4, c: 6.1 }; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBySeries(object, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } + * console.log(order); // [4.2, 6.4, 6.1] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 4.2, b: 6.4, c: 6.1 }; + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupBySeries(object, iterator, function(err, res) { + * console.log(res); // { '4': [4.2], '6': [6.4, 6.1] } + * console.log(order); // [[4.2, 'a'], [6.4, 'b'], [6.1, 'c']] + * }); + * + */ + function groupBySeries(collection, iterator, callback) { + callback = onlyOnce(callback || noop); + var size, key, value, keys, iter, item, iterate; + var sync = false; + var completed = 0; + var result = {}; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size) { + return callback(null, result); + } + iterate(); + + function arrayIterator() { + value = collection[completed]; + iterator(value, done); + } + + function arrayIteratorWithIndex() { + value = collection[completed]; + iterator(value, completed, done); + } + + function symbolIterator() { + item = iter.next(); + value = item.value; + item.done ? callback(null, result) : iterator(value, done); + } + + function symbolIteratorWithKey() { + item = iter.next(); + value = item.value; + item.done ? callback(null, result) : iterator(value, completed, done); + } + + function objectIterator() { + value = collection[keys[completed]]; + iterator(value, done); + } + + function objectIteratorWithKey() { + key = keys[completed]; + value = collection[key]; + iterator(value, key, done); + } + + function done(err, key) { + if (err) { + iterate = throwError; + callback = onlyOnce(callback); + callback(err, objectClone(result)); + return; + } + var array = result[key]; + if (!array) { + result[key] = [value]; + } else { + array.push(value); + } + if (++completed === size) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace groupByLimit + * @param {Array|Object} collection + * @param {Function} iterator + * @param {Function} callback + * @example + * + * // array + * var order = []; + * var array = [1.1, 5.9, 3.2, 3.9, 2.1]; + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupByLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } + * console.log(order); // [1.1, 3.2, 5.9, 2.1, 3.9] + * }); + * + * @example + * + * // array with index + * var order = []; + * var array = [1.1, 5.9, 3.2, 3.9, 2.1]; + * var iterator = function(num, index, done) { + * setTimeout(function() { + * order.push([num, index]); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupByLimit(array, 2, iterator, function(err, res) { + * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } + * console.log(order); // [[1.1, 0], [3.2, 2], [5.9, 1], [2.1, 4], [3.9, 3]] + * }); + * + * @example + * + * // object + * var order = []; + * var object = { a: 1.1, b: 5.9, c: 3.2, d: 3.9, e: 2.1 } + * var iterator = function(num, done) { + * setTimeout(function() { + * order.push(num); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupByLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } + * console.log(order); // [1.1, 3.2, 5.9, 2.1, 3.9] + * }); + * + * @example + * + * // object with key + * var order = []; + * var object = { a: 1.1, b: 5.9, c: 3.2, d: 3.9, e: 2.1 } + * var iterator = function(num, key, done) { + * setTimeout(function() { + * order.push([num, key]); + * done(null, Math.floor(num)); + * }, num * 10); + * }; + * async.groupByLimit(object, 2, iterator, function(err, res) { + * console.log(res); // { '1': [1.1], '3': [3.2, 3.9], '5': [5.9], '2': [2.1] } + * console.log(order); // [[1.1, 'a'], [3.2, 'c'], [5.9, 'b'], [2.1, 'e'], [3.9, 'd']] + * }); + * + */ + function groupByLimit(collection, limit, iterator, callback) { + callback = callback || noop; + var size, index, key, value, keys, iter, item, iterate; + var sync = false; + var started = 0; + var completed = 0; + var result = {}; + + if (isArray(collection)) { + size = collection.length; + iterate = iterator.length === 3 ? arrayIteratorWithIndex : arrayIterator; + } else if (!collection) { + } else if (iteratorSymbol && collection[iteratorSymbol]) { + size = Infinity; + iter = collection[iteratorSymbol](); + iterate = iterator.length === 3 ? symbolIteratorWithKey : symbolIterator; + } else if (typeof collection === obj) { + keys = nativeKeys(collection); + size = keys.length; + iterate = iterator.length === 3 ? objectIteratorWithKey : objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, result); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + if (started < size) { + value = collection[started++]; + iterator(value, createCallback(value)); + } + } + + function arrayIteratorWithIndex() { + index = started++; + if (index < size) { + value = collection[index]; + iterator(value, index, createCallback(value)); + } + } + + function symbolIterator() { + item = iter.next(); + if (item.done === false) { + started++; + value = item.value; + iterator(value, createCallback(value)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function symbolIteratorWithKey() { + item = iter.next(); + if (item.done === false) { + value = item.value; + iterator(value, started++, createCallback(value)); + } else if (completed === started && iterator !== noop) { + iterator = noop; + callback(null, result); + } + } + + function objectIterator() { + if (started < size) { + value = collection[keys[started++]]; + iterator(value, createCallback(value)); + } + } + + function objectIteratorWithKey() { + if (started < size) { + key = keys[started++]; + value = collection[key]; + iterator(value, key, createCallback(value)); + } + } + + function createCallback(value) { + var called = false; + return function(err, key) { + if (called) { + throwError(); + } + called = true; + if (err) { + iterate = noop; + callback = once(callback); + callback(err, objectClone(result)); + return; + } + var array = result[key]; + if (!array) { + result[key] = [value]; + } else { + array.push(value); + } + if (++completed === size) { + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @private + * @param {Function} arrayEach + * @param {Function} baseEach + */ + function createParallel(arrayEach, baseEach) { + return function parallel(tasks, callback) { + callback = callback || noop; + var size, keys, result; + var completed = 0; + + if (isArray(tasks)) { + size = tasks.length; + result = Array(size); + arrayEach(tasks, createCallback); + } else if (tasks && typeof tasks === obj) { + keys = nativeKeys(tasks); + size = keys.length; + result = {}; + baseEach(tasks, createCallback, keys); + } + if (!size) { + callback(null, result); + } + + function createCallback(key) { + return function(err, res) { + if (key === null) { + throwError(); + } + if (err) { + key = null; + callback = once(callback); + callback(err, result); + return; + } + result[key] = arguments.length <= 2 ? res : slice(arguments, 1); + key = null; + if (++completed === size) { + callback(null, result); + } + }; + } + }; + } + + /** + * @memberof async + * @namespace series + * @param {Array|Object} tasks - functions + * @param {Function} callback + * @example + * + * var order = []; + * var tasks = [ + * function(done) { + * setTimeout(function() { + * order.push(1); + * done(null, 1); + * }, 10); + * }, + * function(done) { + * setTimeout(function() { + * order.push(2); + * done(null, 2); + * }, 30); + * }, + * function(done) { + * setTimeout(function() { + * order.push(3); + * done(null, 3); + * }, 40); + * }, + * function(done) { + * setTimeout(function() { + * order.push(4); + * done(null, 4); + * }, 20); + * } + * ]; + * async.series(tasks, function(err, res) { + * console.log(res); // [1, 2, 3, 4]; + * console.log(order); // [1, 2, 3, 4] + * }); + * + * @example + * + * var order = []; + * var tasks = { + * 'a': function(done) { + * setTimeout(function() { + * order.push(1); + * done(null, 1); + * }, 10); + * }, + * 'b': function(done) { + * setTimeout(function() { + * order.push(2); + * done(null, 2); + * }, 30); + * }, + * 'c': function(done) { + * setTimeout(function() { + * order.push(3); + * done(null, 3); + * }, 40); + * }, + * 'd': function(done) { + * setTimeout(function() { + * order.push(4); + * done(null, 4); + * }, 20); + * } + * }; + * async.series(tasks, function(err, res) { + * console.log(res); // { a: 1, b: 2, c: 3, d:4 } + * console.log(order); // [1, 4, 2, 3] + * }); + * + */ + function series(tasks, callback) { + callback = callback || noop; + var size, key, keys, result, iterate; + var sync = false; + var completed = 0; + + if (isArray(tasks)) { + size = tasks.length; + result = Array(size); + iterate = arrayIterator; + } else if (tasks && typeof tasks === obj) { + keys = nativeKeys(tasks); + size = keys.length; + result = {}; + iterate = objectIterator; + } else { + return callback(null); + } + if (!size) { + return callback(null, result); + } + iterate(); + + function arrayIterator() { + key = completed; + tasks[completed](done); + } + + function objectIterator() { + key = keys[completed]; + tasks[key](done); + } + + function done(err, res) { + if (err) { + iterate = throwError; + callback = onlyOnce(callback); + callback(err, result); + return; + } + result[key] = arguments.length <= 2 ? res : slice(arguments, 1); + if (++completed === size) { + iterate = throwError; + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace parallelLimit + * @param {Array|Object} tasks - functions + * @param {number} limit - limit >= 1 + * @param {Function} callback + * @example + * + * var order = []; + * var tasks = [ + * function(done) { + * setTimeout(function() { + * order.push(1); + * done(null, 1); + * }, 10); + * }, + * function(done) { + * setTimeout(function() { + * order.push(2); + * done(null, 2); + * }, 50); + * }, + * function(done) { + * setTimeout(function() { + * order.push(3); + * done(null, 3); + * }, 30); + * }, + * function(done) { + * setTimeout(function() { + * order.push(4); + * done(null, 4); + * }, 40); + * } + * ]; + * async.parallelLimit(tasks, 2, function(err, res) { + * console.log(res); // [1, 2, 3, 4]; + * console.log(order); // [1, 3, 2, 4] + * }); + * + * @example + * + * var order = []; + * var tasks = { + * 'a': function(done) { + * setTimeout(function() { + * order.push(1); + * done(null, 1); + * }, 10); + * }, + * 'b': function(done) { + * setTimeout(function() { + * order.push(2); + * done(null, 2); + * }, 50); + * }, + * 'c': function(done) { + * setTimeout(function() { + * order.push(3); + * done(null, 3); + * }, 20); + * }, + * 'd': function(done) { + * setTimeout(function() { + * order.push(4); + * done(null, 4); + * }, 40); + * } + * }; + * async.parallelLimit(tasks, 2, function(err, res) { + * console.log(res); // { a: 1, b: 2, c: 3, d:4 } + * console.log(order); // [1, 3, 2, 4] + * }); + * + */ + function parallelLimit(tasks, limit, callback) { + callback = callback || noop; + var size, index, key, keys, result, iterate; + var sync = false; + var started = 0; + var completed = 0; + + if (isArray(tasks)) { + size = tasks.length; + result = Array(size); + iterate = arrayIterator; + } else if (tasks && typeof tasks === obj) { + keys = nativeKeys(tasks); + size = keys.length; + result = {}; + iterate = objectIterator; + } + if (!size || isNaN(limit) || limit < 1) { + return callback(null, result); + } + timesSync(limit > size ? size : limit, iterate); + + function arrayIterator() { + index = started++; + if (index < size) { + tasks[index](createCallback(index)); + } + } + + function objectIterator() { + if (started < size) { + key = keys[started++]; + tasks[key](createCallback(key)); + } + } + + function createCallback(key) { + return function(err, res) { + if (key === null) { + throwError(); + } + if (err) { + key = null; + iterate = noop; + callback = once(callback); + callback(err, result); + return; + } + result[key] = arguments.length <= 2 ? res : slice(arguments, 1); + key = null; + if (++completed === size) { + callback(null, result); + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @memberof async + * @namespace tryEach + * @param {Array|Object} tasks - functions + * @param {Function} callback + * @example + * + * var tasks = [ + * function(done) { + * setTimeout(function() { + * done(new Error('error')); + * }, 10); + * }, + * function(done) { + * setTimeout(function() { + * done(null, 2); + * }, 10); + * } + * ]; + * async.tryEach(tasks, function(err, res) { + * console.log(res); // 2 + * }); + * + * @example + * + * var tasks = [ + * function(done) { + * setTimeout(function() { + * done(new Error('error1')); + * }, 10); + * }, + * function(done) { + * setTimeout(function() { + * done(new Error('error2'); + * }, 10); + * } + * ]; + * async.tryEach(tasks, function(err, res) { + * console.log(err); // error2 + * console.log(res); // undefined + * }); + * + */ + function tryEach(tasks, callback) { + callback = callback || noop; + var size, keys, iterate; + var sync = false; + var completed = 0; + + if (isArray(tasks)) { + size = tasks.length; + iterate = arrayIterator; + } else if (tasks && typeof tasks === obj) { + keys = nativeKeys(tasks); + size = keys.length; + iterate = objectIterator; + } + if (!size) { + return callback(null); + } + iterate(); + + function arrayIterator() { + tasks[completed](done); + } + + function objectIterator() { + tasks[keys[completed]](done); + } + + function done(err, res) { + if (!err) { + if (arguments.length <= 2) { + callback(null, res); + } else { + callback(null, slice(arguments, 1)); + } + } else if (++completed === size) { + callback(err); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * check for waterfall tasks + * @private + * @param {Array} tasks + * @param {Function} callback + * @return {boolean} + */ + function checkWaterfallTasks(tasks, callback) { + if (!isArray(tasks)) { + callback(new Error('First argument to waterfall must be an array of functions')); + return false; + } + if (tasks.length === 0) { + callback(null); + return false; + } + return true; + } + + /** + * check for waterfall tasks + * @private + * @param {function} func + * @param {Array|Object} args - arguments + * @return {function} next + */ + function waterfallIterator(func, args, next) { + switch (args.length) { + case 0: + case 1: + return func(next); + case 2: + return func(args[1], next); + case 3: + return func(args[1], args[2], next); + case 4: + return func(args[1], args[2], args[3], next); + case 5: + return func(args[1], args[2], args[3], args[4], next); + case 6: + return func(args[1], args[2], args[3], args[4], args[5], next); + default: + args = slice(args, 1); + args.push(next); + return func.apply(null, args); + } + } + + /** + * @memberof async + * @namespace waterfall + * @param {Array} tasks - functions + * @param {Function} callback + * @example + * + * var order = []; + * var tasks = [ + * function(next) { + * setTimeout(function() { + * order.push(1); + * next(null, 1); + * }, 10); + * }, + * function(arg1, next) { + * setTimeout(function() { + * order.push(2); + * next(null, 1, 2); + * }, 30); + * }, + * function(arg1, arg2, next) { + * setTimeout(function() { + * order.push(3); + * next(null, 3); + * }, 20); + * }, + * function(arg1, next) { + * setTimeout(function() { + * order.push(4); + * next(null, 1, 2, 3, 4); + * }, 40); + * } + * ]; + * async.waterfall(tasks, function(err, arg1, arg2, arg3, arg4) { + * console.log(arg1, arg2, arg3, arg4); // 1 2 3 4 + * }); + * + */ + function waterfall(tasks, callback) { + callback = callback || noop; + if (!checkWaterfallTasks(tasks, callback)) { + return; + } + var func, args, done, sync; + var completed = 0; + var size = tasks.length; + waterfallIterator(tasks[0], [], createCallback(0)); + + function iterate() { + waterfallIterator(func, args, createCallback(func)); + } + + function createCallback(index) { + return function next(err, res) { + if (index === undefined) { + callback = noop; + throwError(); + } + index = undefined; + if (err) { + done = callback; + callback = throwError; + done(err); + return; + } + if (++completed === size) { + done = callback; + callback = throwError; + if (arguments.length <= 2) { + done(err, res); + } else { + done.apply(null, createArray(arguments)); + } + return; + } + if (sync) { + args = arguments; + func = tasks[completed] || throwError; + nextTick(iterate); + } else { + sync = true; + waterfallIterator(tasks[completed] || throwError, arguments, createCallback(completed)); + } + sync = false; + }; + } + } + + /** + * `angelFall` is like `waterfall` and inject callback to last argument of next task. + * + * @memberof async + * @namespace angelFall + * @param {Array} tasks - functions + * @param {Function} callback + * @example + * + * var order = []; + * var tasks = [ + * function(next) { + * setTimeout(function() { + * order.push(1); + * next(null, 1); + * }, 10); + * }, + * function(arg1, empty, next) { + * setTimeout(function() { + * order.push(2); + * next(null, 1, 2); + * }, 30); + * }, + * function(next) { + * setTimeout(function() { + * order.push(3); + * next(null, 3); + * }, 20); + * }, + * function(arg1, empty1, empty2, empty3, next) { + * setTimeout(function() { + * order.push(4); + * next(null, 1, 2, 3, 4); + * }, 40); + * } + * ]; + * async.angelFall(tasks, function(err, arg1, arg2, arg3, arg4) { + * console.log(arg1, arg2, arg3, arg4); // 1 2 3 4 + * }); + * + */ + function angelFall(tasks, callback) { + callback = callback || noop; + if (!checkWaterfallTasks(tasks, callback)) { + return; + } + var completed = 0; + var sync = false; + var size = tasks.length; + var func = tasks[completed]; + var args = []; + var iterate = function() { + switch (func.length) { + case 0: + try { + next(null, func()); + } catch (e) { + next(e); + } + return; + case 1: + return func(next); + case 2: + return func(args[1], next); + case 3: + return func(args[1], args[2], next); + case 4: + return func(args[1], args[2], args[3], next); + case 5: + return func(args[1], args[2], args[3], args[4], next); + default: + args = slice(args, 1); + args[func.length - 1] = next; + return func.apply(null, args); + } + }; + iterate(); + + function next(err, res) { + if (err) { + iterate = throwError; + callback = onlyOnce(callback); + callback(err); + return; + } + if (++completed === size) { + iterate = throwError; + var done = callback; + callback = throwError; + if (arguments.length === 2) { + done(err, res); + } else { + done.apply(null, createArray(arguments)); + } + return; + } + func = tasks[completed]; + args = arguments; + if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace whilst + * @param {Function} test + * @param {Function} iterator + * @param {Function} callback + */ + function whilst(test, iterator, callback) { + callback = callback || noop; + var sync = false; + if (test()) { + iterate(); + } else { + callback(null); + } + + function iterate() { + if (sync) { + nextTick(next); + } else { + sync = true; + iterator(done); + } + sync = false; + } + + function next() { + iterator(done); + } + + function done(err, arg) { + if (err) { + return callback(err); + } + if (arguments.length <= 2) { + if (test(arg)) { + iterate(); + } else { + callback(null, arg); + } + return; + } + arg = slice(arguments, 1); + if (test.apply(null, arg)) { + iterate(); + } else { + callback.apply(null, [null].concat(arg)); + } + } + } + + /** + * @memberof async + * @namespace doWhilst + * @param {Function} iterator + * @param {Function} test + * @param {Function} callback + */ + function doWhilst(iterator, test, callback) { + callback = callback || noop; + var sync = false; + next(); + + function iterate() { + if (sync) { + nextTick(next); + } else { + sync = true; + iterator(done); + } + sync = false; + } + + function next() { + iterator(done); + } + + function done(err, arg) { + if (err) { + return callback(err); + } + if (arguments.length <= 2) { + if (test(arg)) { + iterate(); + } else { + callback(null, arg); + } + return; + } + arg = slice(arguments, 1); + if (test.apply(null, arg)) { + iterate(); + } else { + callback.apply(null, [null].concat(arg)); + } + } + } + + /** + * @memberof async + * @namespace until + * @param {Function} test + * @param {Function} iterator + * @param {Function} callback + */ + function until(test, iterator, callback) { + callback = callback || noop; + var sync = false; + if (!test()) { + iterate(); + } else { + callback(null); + } + + function iterate() { + if (sync) { + nextTick(next); + } else { + sync = true; + iterator(done); + } + sync = false; + } + + function next() { + iterator(done); + } + + function done(err, arg) { + if (err) { + return callback(err); + } + if (arguments.length <= 2) { + if (!test(arg)) { + iterate(); + } else { + callback(null, arg); + } + return; + } + arg = slice(arguments, 1); + if (!test.apply(null, arg)) { + iterate(); + } else { + callback.apply(null, [null].concat(arg)); + } + } + } + + /** + * @memberof async + * @namespace doUntil + * @param {Function} iterator + * @param {Function} test + * @param {Function} callback + */ + function doUntil(iterator, test, callback) { + callback = callback || noop; + var sync = false; + next(); + + function iterate() { + if (sync) { + nextTick(next); + } else { + sync = true; + iterator(done); + } + sync = false; + } + + function next() { + iterator(done); + } + + function done(err, arg) { + if (err) { + return callback(err); + } + if (arguments.length <= 2) { + if (!test(arg)) { + iterate(); + } else { + callback(null, arg); + } + return; + } + arg = slice(arguments, 1); + if (!test.apply(null, arg)) { + iterate(); + } else { + callback.apply(null, [null].concat(arg)); + } + } + } + + /** + * @memberof async + * @namespace during + * @param {Function} test + * @param {Function} iterator + * @param {Function} callback + */ + function during(test, iterator, callback) { + callback = callback || noop; + _test(); + + function _test() { + test(iterate); + } + + function iterate(err, truth) { + if (err) { + return callback(err); + } + if (truth) { + iterator(done); + } else { + callback(null); + } + } + + function done(err) { + if (err) { + return callback(err); + } + _test(); + } + } + + /** + * @memberof async + * @namespace doDuring + * @param {Function} test + * @param {Function} iterator + * @param {Function} callback + */ + function doDuring(iterator, test, callback) { + callback = callback || noop; + iterate(null, true); + + function iterate(err, truth) { + if (err) { + return callback(err); + } + if (truth) { + iterator(done); + } else { + callback(null); + } + } + + function done(err, res) { + if (err) { + return callback(err); + } + switch (arguments.length) { + case 0: + case 1: + test(iterate); + break; + case 2: + test(res, iterate); + break; + default: + var args = slice(arguments, 1); + args.push(iterate); + test.apply(null, args); + break; + } + } + } + + /** + * @memberof async + * @namespace forever + */ + function forever(iterator, callback) { + var sync = false; + iterate(); + + function iterate() { + iterator(next); + } + + function next(err) { + if (err) { + if (callback) { + return callback(err); + } + throw err; + } + if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace compose + */ + function compose() { + return seq.apply(null, reverse(arguments)); + } + + /** + * @memberof async + * @namespace seq + */ + function seq(/* functions... */) { + var fns = createArray(arguments); + + return function() { + var self = this; + var args = createArray(arguments); + var callback = args[args.length - 1]; + if (typeof callback === func) { + args.pop(); + } else { + callback = noop; + } + reduce(fns, args, iterator, done); + + function iterator(newargs, fn, callback) { + var func = function(err) { + var nextargs = slice(arguments, 1); + callback(err, nextargs); + }; + newargs.push(func); + fn.apply(self, newargs); + } + + function done(err, res) { + res = isArray(res) ? res : [res]; + res.unshift(err); + callback.apply(self, res); + } + }; + } + + function createApplyEach(func) { + return function applyEach(fns /* arguments */) { + var go = function() { + var self = this; + var args = createArray(arguments); + var callback = args.pop() || noop; + return func(fns, iterator, callback); + + function iterator(fn, done) { + fn.apply(self, args.concat([done])); + } + }; + if (arguments.length > 1) { + var args = slice(arguments, 1); + return go.apply(this, args); + } else { + return go; + } + }; + } + + /** + * @see https://github.com/caolan/async/blob/master/lib/internal/DoublyLinkedList.js + */ + function DLL() { + this.head = null; + this.tail = null; + this.length = 0; + } + + DLL.prototype._removeLink = function(node) { + var prev = node.prev; + var next = node.next; + if (prev) { + prev.next = next; + } else { + this.head = next; + } + if (next) { + next.prev = prev; + } else { + this.tail = prev; + } + node.prev = null; + node.next = null; + this.length--; + return node; + }; + + DLL.prototype.empty = DLL; + + DLL.prototype._setInitial = function(node) { + this.length = 1; + this.head = this.tail = node; + }; + + DLL.prototype.insertBefore = function(node, newNode) { + newNode.prev = node.prev; + newNode.next = node; + if (node.prev) { + node.prev.next = newNode; + } else { + this.head = newNode; + } + node.prev = newNode; + this.length++; + }; + + DLL.prototype.unshift = function(node) { + if (this.head) { + this.insertBefore(this.head, node); + } else { + this._setInitial(node); + } + }; + + DLL.prototype.push = function(node) { + var tail = this.tail; + if (tail) { + node.prev = tail; + node.next = tail.next; + this.tail = node; + tail.next = node; + this.length++; + } else { + this._setInitial(node); + } + }; + + DLL.prototype.shift = function() { + return this.head && this._removeLink(this.head); + }; + + DLL.prototype.splice = function(end) { + var task; + var tasks = []; + while (end-- && (task = this.shift())) { + tasks.push(task); + } + return tasks; + }; + + DLL.prototype.remove = function(test) { + var node = this.head; + while (node) { + if (test(node)) { + this._removeLink(node); + } + node = node.next; + } + return this; + }; + + /** + * @private + */ + function baseQueue(isQueue, worker, concurrency, payload) { + if (concurrency === undefined) { + concurrency = 1; + } else if (isNaN(concurrency) || concurrency < 1) { + throw new Error('Concurrency must not be zero'); + } + + var workers = 0; + var workersList = []; + var _callback, _unshift; + + var q = { + _tasks: new DLL(), + concurrency: concurrency, + payload: payload, + saturated: noop, + unsaturated: noop, + buffer: concurrency / 4, + empty: noop, + drain: noop, + error: noop, + started: false, + paused: false, + push: push, + kill: kill, + unshift: unshift, + remove: remove, + process: isQueue ? runQueue : runCargo, + length: getLength, + running: running, + workersList: getWorkersList, + idle: idle, + pause: pause, + resume: resume, + _worker: worker + }; + return q; + + function push(tasks, callback) { + _insert(tasks, callback); + } + + function unshift(tasks, callback) { + _insert(tasks, callback, true); + } + + function _exec(task) { + var item = { + data: task, + callback: _callback + }; + if (_unshift) { + q._tasks.unshift(item); + } else { + q._tasks.push(item); + } + nextTick(q.process); + } + + function _insert(tasks, callback, unshift) { + if (callback == null) { + callback = noop; + } else if (typeof callback !== 'function') { + throw new Error('task callback must be a function'); + } + q.started = true; + var _tasks = isArray(tasks) ? tasks : [tasks]; + + if (tasks === undefined || !_tasks.length) { + if (q.idle()) { + nextTick(q.drain); + } + return; + } + + _unshift = unshift; + _callback = callback; + arrayEachSync(_tasks, _exec); + // Avoid leaking the callback + _callback = undefined; + } + + function kill() { + q.drain = noop; + q._tasks.empty(); + } + + function _next(q, tasks) { + var called = false; + return function done(err, res) { + if (called) { + throwError(); + } + called = true; + + workers--; + var task; + var index = -1; + var size = workersList.length; + var taskIndex = -1; + var taskSize = tasks.length; + var useApply = arguments.length > 2; + var args = useApply && createArray(arguments); + while (++taskIndex < taskSize) { + task = tasks[taskIndex]; + while (++index < size) { + if (workersList[index] === task) { + if (index === 0) { + workersList.shift(); + } else { + workersList.splice(index, 1); + } + index = size; + size--; + } + } + index = -1; + if (useApply) { + task.callback.apply(task, args); + } else { + task.callback(err, res); + } + if (err) { + q.error(err, task.data); + } + } + + if (workers <= q.concurrency - q.buffer) { + q.unsaturated(); + } + + if (q._tasks.length + workers === 0) { + q.drain(); + } + q.process(); + }; + } + + function runQueue() { + while (!q.paused && workers < q.concurrency && q._tasks.length) { + var task = q._tasks.shift(); + workers++; + workersList.push(task); + if (q._tasks.length === 0) { + q.empty(); + } + if (workers === q.concurrency) { + q.saturated(); + } + var done = _next(q, [task]); + worker(task.data, done); + } + } + + function runCargo() { + while (!q.paused && workers < q.concurrency && q._tasks.length) { + var tasks = q._tasks.splice(q.payload || q._tasks.length); + var index = -1; + var size = tasks.length; + var data = Array(size); + while (++index < size) { + data[index] = tasks[index].data; + } + workers++; + nativePush.apply(workersList, tasks); + if (q._tasks.length === 0) { + q.empty(); + } + if (workers === q.concurrency) { + q.saturated(); + } + var done = _next(q, tasks); + worker(data, done); + } + } + + function getLength() { + return q._tasks.length; + } + + function running() { + return workers; + } + + function getWorkersList() { + return workersList; + } + + function idle() { + return q.length() + workers === 0; + } + + function pause() { + q.paused = true; + } + + function _resume() { + nextTick(q.process); + } + + function resume() { + if (q.paused === false) { + return; + } + q.paused = false; + var count = q.concurrency < q._tasks.length ? q.concurrency : q._tasks.length; + timesSync(count, _resume); + } + + /** + * @param {Function} test + */ + function remove(test) { + q._tasks.remove(test); + } + } + + /** + * @memberof async + * @namespace queue + */ + function queue(worker, concurrency) { + return baseQueue(true, worker, concurrency); + } + + /** + * @memberof async + * @namespace priorityQueue + */ + function priorityQueue(worker, concurrency) { + var q = baseQueue(true, worker, concurrency); + q.push = push; + delete q.unshift; + return q; + + function push(tasks, priority, callback) { + q.started = true; + priority = priority || 0; + var _tasks = isArray(tasks) ? tasks : [tasks]; + var taskSize = _tasks.length; + + if (tasks === undefined || taskSize === 0) { + if (q.idle()) { + nextTick(q.drain); + } + return; + } + + callback = typeof callback === func ? callback : noop; + var nextNode = q._tasks.head; + while (nextNode && priority >= nextNode.priority) { + nextNode = nextNode.next; + } + while (taskSize--) { + var item = { + data: _tasks[taskSize], + priority: priority, + callback: callback + }; + if (nextNode) { + q._tasks.insertBefore(nextNode, item); + } else { + q._tasks.push(item); + } + nextTick(q.process); + } + } + } + + /** + * @memberof async + * @namespace cargo + */ + function cargo(worker, payload) { + return baseQueue(false, worker, 1, payload); + } + + /** + * @memberof async + * @namespace auto + * @param {Object} tasks + * @param {number} [concurrency] + * @param {Function} [callback] + */ + function auto(tasks, concurrency, callback) { + if (typeof concurrency === func) { + callback = concurrency; + concurrency = null; + } + var keys = nativeKeys(tasks); + var rest = keys.length; + var results = {}; + if (rest === 0) { + return callback(null, results); + } + var runningTasks = 0; + var readyTasks = new DLL(); + var listeners = Object.create(null); + callback = onlyOnce(callback || noop); + concurrency = concurrency || rest; + + baseEachSync(tasks, iterator, keys); + proceedQueue(); + + function iterator(task, key) { + // no dependencies + var _task, _taskSize; + if (!isArray(task)) { + _task = task; + _taskSize = 0; + readyTasks.push([_task, _taskSize, done]); + return; + } + var dependencySize = task.length - 1; + _task = task[dependencySize]; + _taskSize = dependencySize; + if (dependencySize === 0) { + readyTasks.push([_task, _taskSize, done]); + return; + } + // dependencies + var index = -1; + while (++index < dependencySize) { + var dependencyName = task[index]; + if (notInclude(keys, dependencyName)) { + var msg = + 'async.auto task `' + + key + + '` has non-existent dependency `' + + dependencyName + + '` in ' + + task.join(', '); + throw new Error(msg); + } + var taskListeners = listeners[dependencyName]; + if (!taskListeners) { + taskListeners = listeners[dependencyName] = []; + } + taskListeners.push(taskListener); + } + + function done(err, arg) { + if (key === null) { + throwError(); + } + arg = arguments.length <= 2 ? arg : slice(arguments, 1); + if (err) { + rest = 0; + runningTasks = 0; + readyTasks.length = 0; + var safeResults = objectClone(results); + safeResults[key] = arg; + key = null; + var _callback = callback; + callback = noop; + _callback(err, safeResults); + return; + } + runningTasks--; + rest--; + results[key] = arg; + taskComplete(key); + key = null; + } + + function taskListener() { + if (--dependencySize === 0) { + readyTasks.push([_task, _taskSize, done]); + } + } + } + + function proceedQueue() { + if (readyTasks.length === 0 && runningTasks === 0) { + if (rest !== 0) { + throw new Error('async.auto task has cyclic dependencies'); + } + return callback(null, results); + } + while (readyTasks.length && runningTasks < concurrency && callback !== noop) { + runningTasks++; + var array = readyTasks.shift(); + if (array[1] === 0) { + array[0](array[2]); + } else { + array[0](results, array[2]); + } + } + } + + function taskComplete(key) { + var taskListeners = listeners[key] || []; + arrayEachSync(taskListeners, function(task) { + task(); + }); + proceedQueue(); + } + } + + var FN_ARGS = /^(function)?\s*[^\(]*\(\s*([^\)]*)\)/m; + var FN_ARG_SPLIT = /,/; + var FN_ARG = /(=.+)?(\s*)$/; + var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm; + + /** + * parse function arguments for `autoInject` + * + * @private + */ + function parseParams(func) { + func = func.toString().replace(STRIP_COMMENTS, ''); + func = func.match(FN_ARGS)[2].replace(' ', ''); + func = func ? func.split(FN_ARG_SPLIT) : []; + func = func.map(function(arg) { + return arg.replace(FN_ARG, '').trim(); + }); + return func; + } + + /** + * @memberof async + * @namespace autoInject + * @param {Object} tasks + * @param {number} [concurrency] + * @param {Function} [callback] + */ + function autoInject(tasks, concurrency, callback) { + var newTasks = {}; + baseEachSync(tasks, iterator, nativeKeys(tasks)); + auto(newTasks, concurrency, callback); + + function iterator(task, key) { + var params; + var taskLength = task.length; + + if (isArray(task)) { + if (taskLength === 0) { + throw new Error('autoInject task functions require explicit parameters.'); + } + params = createArray(task); + taskLength = params.length - 1; + task = params[taskLength]; + if (taskLength === 0) { + newTasks[key] = task; + return; + } + } else if (taskLength === 1) { + newTasks[key] = task; + return; + } else { + params = parseParams(task); + if (taskLength === 0 && params.length === 0) { + throw new Error('autoInject task functions require explicit parameters.'); + } + taskLength = params.length - 1; + } + params[taskLength] = newTask; + newTasks[key] = params; + + function newTask(results, done) { + switch (taskLength) { + case 1: + task(results[params[0]], done); + break; + case 2: + task(results[params[0]], results[params[1]], done); + break; + case 3: + task(results[params[0]], results[params[1]], results[params[2]], done); + break; + default: + var i = -1; + while (++i < taskLength) { + params[i] = results[params[i]]; + } + params[i] = done; + task.apply(null, params); + break; + } + } + } + } + + /** + * @memberof async + * @namespace retry + * @param {integer|Object|Function} opts + * @param {Function} [task] + * @param {Function} [callback] + */ + function retry(opts, task, callback) { + var times, intervalFunc, errorFilter; + var count = 0; + if (arguments.length < 3 && typeof opts === func) { + callback = task || noop; + task = opts; + opts = null; + times = DEFAULT_TIMES; + } else { + callback = callback || noop; + switch (typeof opts) { + case 'object': + if (typeof opts.errorFilter === func) { + errorFilter = opts.errorFilter; + } + var interval = opts.interval; + switch (typeof interval) { + case func: + intervalFunc = interval; + break; + case 'string': + case 'number': + interval = +interval; + intervalFunc = interval + ? function() { + return interval; + } + : function() { + return DEFAULT_INTERVAL; + }; + break; + } + times = +opts.times || DEFAULT_TIMES; + break; + case 'number': + times = opts || DEFAULT_TIMES; + break; + case 'string': + times = +opts || DEFAULT_TIMES; + break; + default: + throw new Error('Invalid arguments for async.retry'); + } + } + if (typeof task !== 'function') { + throw new Error('Invalid arguments for async.retry'); + } + + if (intervalFunc) { + task(intervalCallback); + } else { + task(simpleCallback); + } + + function simpleIterator() { + task(simpleCallback); + } + + function simpleCallback(err, res) { + if (++count === times || !err || (errorFilter && !errorFilter(err))) { + if (arguments.length <= 2) { + return callback(err, res); + } + var args = createArray(arguments); + return callback.apply(null, args); + } + simpleIterator(); + } + + function intervalIterator() { + task(intervalCallback); + } + + function intervalCallback(err, res) { + if (++count === times || !err || (errorFilter && !errorFilter(err))) { + if (arguments.length <= 2) { + return callback(err, res); + } + var args = createArray(arguments); + return callback.apply(null, args); + } + setTimeout(intervalIterator, intervalFunc(count)); + } + } + + function retryable(opts, task) { + if (!task) { + task = opts; + opts = null; + } + return done; + + function done() { + var taskFn; + var args = createArray(arguments); + var lastIndex = args.length - 1; + var callback = args[lastIndex]; + switch (task.length) { + case 1: + taskFn = task1; + break; + case 2: + taskFn = task2; + break; + case 3: + taskFn = task3; + break; + default: + taskFn = task4; + } + if (opts) { + retry(opts, taskFn, callback); + } else { + retry(taskFn, callback); + } + + function task1(done) { + task(done); + } + + function task2(done) { + task(args[0], done); + } + + function task3(done) { + task(args[0], args[1], done); + } + + function task4(callback) { + args[lastIndex] = callback; + task.apply(null, args); + } + } + } + + /** + * @memberof async + * @namespace iterator + */ + function iterator(tasks) { + var size = 0; + var keys = []; + if (isArray(tasks)) { + size = tasks.length; + } else { + keys = nativeKeys(tasks); + size = keys.length; + } + return makeCallback(0); + + function makeCallback(index) { + var fn = function() { + if (size) { + var key = keys[index] || index; + tasks[key].apply(null, createArray(arguments)); + } + return fn.next(); + }; + fn.next = function() { + return index < size - 1 ? makeCallback(index + 1) : null; + }; + return fn; + } + } + + /** + * @memberof async + * @namespace apply + */ + function apply(func) { + switch (arguments.length) { + case 0: + case 1: + return func; + case 2: + return func.bind(null, arguments[1]); + case 3: + return func.bind(null, arguments[1], arguments[2]); + case 4: + return func.bind(null, arguments[1], arguments[2], arguments[3]); + case 5: + return func.bind(null, arguments[1], arguments[2], arguments[3], arguments[4]); + default: + var size = arguments.length; + var index = 0; + var args = Array(size); + args[index] = null; + while (++index < size) { + args[index] = arguments[index]; + } + return func.bind.apply(func, args); + } + } + + /** + * @memberof async + * @namespace timeout + * @param {Function} func + * @param {number} millisec + * @param {*} info + */ + function timeout(func, millisec, info) { + var callback, timer; + return wrappedFunc; + + function wrappedFunc() { + timer = setTimeout(timeoutCallback, millisec); + var args = createArray(arguments); + var lastIndex = args.length - 1; + callback = args[lastIndex]; + args[lastIndex] = injectedCallback; + simpleApply(func, args); + } + + function timeoutCallback() { + var name = func.name || 'anonymous'; + var err = new Error('Callback function "' + name + '" timed out.'); + err.code = 'ETIMEDOUT'; + if (info) { + err.info = info; + } + timer = null; + callback(err); + } + + function injectedCallback() { + if (timer !== null) { + simpleApply(callback, createArray(arguments)); + clearTimeout(timer); + } + } + + function simpleApply(func, args) { + switch (args.length) { + case 0: + func(); + break; + case 1: + func(args[0]); + break; + case 2: + func(args[0], args[1]); + break; + default: + func.apply(null, args); + break; + } + } + } + + /** + * @memberof async + * @namespace times + * @param {number} n - n >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * var iterator = function(n, done) { + * done(null, n); + * }; + * async.times(4, iterator, function(err, res) { + * console.log(res); // [0, 1, 2, 3]; + * }); + * + */ + function times(n, iterator, callback) { + callback = callback || noop; + n = +n; + if (isNaN(n) || n < 1) { + return callback(null, []); + } + var result = Array(n); + timesSync(n, iterate); + + function iterate(num) { + iterator(num, createCallback(num)); + } + + function createCallback(index) { + return function(err, res) { + if (index === null) { + throwError(); + } + result[index] = res; + index = null; + if (err) { + callback(err); + callback = noop; + } else if (--n === 0) { + callback(null, result); + } + }; + } + } + + /** + * @memberof async + * @namespace timesSeries + * @param {number} n - n >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * var iterator = function(n, done) { + * done(null, n); + * }; + * async.timesSeries(4, iterator, function(err, res) { + * console.log(res); // [0, 1, 2, 3]; + * }); + * + */ + function timesSeries(n, iterator, callback) { + callback = callback || noop; + n = +n; + if (isNaN(n) || n < 1) { + return callback(null, []); + } + var result = Array(n); + var sync = false; + var completed = 0; + iterate(); + + function iterate() { + iterator(completed, done); + } + + function done(err, res) { + result[completed] = res; + if (err) { + callback(err); + callback = throwError; + } else if (++completed >= n) { + callback(null, result); + callback = throwError; + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + } + } + + /** + * @memberof async + * @namespace timesLimit + * @param {number} n - n >= 1 + * @param {number} limit - n >= 1 + * @param {Function} iterator + * @param {Function} callback + * @example + * + * var iterator = function(n, done) { + * done(null, n); + * }; + * async.timesLimit(4, 2, iterator, function(err, res) { + * console.log(res); // [0, 1, 2, 3]; + * }); + * + */ + function timesLimit(n, limit, iterator, callback) { + callback = callback || noop; + n = +n; + if (isNaN(n) || n < 1 || isNaN(limit) || limit < 1) { + return callback(null, []); + } + var result = Array(n); + var sync = false; + var started = 0; + var completed = 0; + timesSync(limit > n ? n : limit, iterate); + + function iterate() { + var index = started++; + if (index < n) { + iterator(index, createCallback(index)); + } + } + + function createCallback(index) { + return function(err, res) { + if (index === null) { + throwError(); + } + result[index] = res; + index = null; + if (err) { + callback(err); + callback = noop; + } else if (++completed >= n) { + callback(null, result); + callback = throwError; + } else if (sync) { + nextTick(iterate); + } else { + sync = true; + iterate(); + } + sync = false; + }; + } + } + + /** + * @memberof async + * @namespace race + * @param {Array|Object} tasks - functions + * @param {Function} callback + * @example + * + * // array + * var called = 0; + * var tasks = [ + * function(done) { + * setTimeout(function() { + * called++; + * done(null, '1'); + * }, 30); + * }, + * function(done) { + * setTimeout(function() { + * called++; + * done(null, '2'); + * }, 20); + * }, + * function(done) { + * setTimeout(function() { + * called++; + * done(null, '3'); + * }, 10); + * } + * ]; + * async.race(tasks, function(err, res) { + * console.log(res); // '3' + * console.log(called); // 1 + * setTimeout(function() { + * console.log(called); // 3 + * }, 50); + * }); + * + * @example + * + * // object + * var called = 0; + * var tasks = { + * 'test1': function(done) { + * setTimeout(function() { + * called++; + * done(null, '1'); + * }, 30); + * }, + * 'test2': function(done) { + * setTimeout(function() { + * called++; + * done(null, '2'); + * }, 20); + * }, + * 'test3': function(done) { + * setTimeout(function() { + * called++; + * done(null, '3'); + * }, 10); + * } + * }; + * async.race(tasks, function(err, res) { + * console.log(res); // '3' + * console.log(called); // 1 + * setTimeout(function() { + * console.log(called); // 3 + * done(); + * }, 50); + * }); + * + */ + function race(tasks, callback) { + callback = once(callback || noop); + var size, keys; + var index = -1; + if (isArray(tasks)) { + size = tasks.length; + while (++index < size) { + tasks[index](callback); + } + } else if (tasks && typeof tasks === obj) { + keys = nativeKeys(tasks); + size = keys.length; + while (++index < size) { + tasks[keys[index]](callback); + } + } else { + return callback(new TypeError('First argument to race must be a collection of functions')); + } + if (!size) { + callback(null); + } + } + + /** + * @memberof async + * @namespace memoize + */ + function memoize(fn, hasher) { + hasher = + hasher || + function(hash) { + return hash; + }; + + var memo = {}; + var queues = {}; + var memoized = function() { + var args = createArray(arguments); + var callback = args.pop(); + var key = hasher.apply(null, args); + if (has(memo, key)) { + nextTick(function() { + callback.apply(null, memo[key]); + }); + return; + } + if (has(queues, key)) { + return queues[key].push(callback); + } + + queues[key] = [callback]; + args.push(done); + fn.apply(null, args); + + function done(err) { + var args = createArray(arguments); + if (!err) { + memo[key] = args; + } + var q = queues[key]; + delete queues[key]; + + var i = -1; + var size = q.length; + while (++i < size) { + q[i].apply(null, args); + } + } + }; + memoized.memo = memo; + memoized.unmemoized = fn; + return memoized; + } + + /** + * @memberof async + * @namespace unmemoize + */ + function unmemoize(fn) { + return function() { + return (fn.unmemoized || fn).apply(null, arguments); + }; + } + + /** + * @memberof async + * @namespace ensureAsync + */ + function ensureAsync(fn) { + return function(/* ...args, callback */) { + var args = createArray(arguments); + var lastIndex = args.length - 1; + var callback = args[lastIndex]; + var sync = true; + args[lastIndex] = done; + fn.apply(this, args); + sync = false; + + function done() { + var innerArgs = createArray(arguments); + if (sync) { + nextTick(function() { + callback.apply(null, innerArgs); + }); + } else { + callback.apply(null, innerArgs); + } + } + }; + } + + /** + * @memberof async + * @namespace constant + */ + function constant(/* values... */) { + var args = [null].concat(createArray(arguments)); + return function(callback) { + callback = arguments[arguments.length - 1]; + callback.apply(this, args); + }; + } + + function asyncify(fn) { + return function(/* args..., callback */) { + var args = createArray(arguments); + var callback = args.pop(); + var result; + try { + result = fn.apply(this, args); + } catch (e) { + return callback(e); + } + if (result && typeof result.then === func) { + result.then( + function(value) { + invokeCallback(callback, null, value); + }, + function(err) { + invokeCallback(callback, err && err.message ? err : new Error(err)); + } + ); + } else { + callback(null, result); + } + }; + } + + function invokeCallback(callback, err, value) { + try { + callback(err, value); + } catch (e) { + nextTick(rethrow, e); + } + } + + function rethrow(error) { + throw error; + } + + /** + * @memberof async + * @namespace reflect + * @param {Function} func + * @return {Function} + */ + function reflect(func) { + return function(/* args..., callback */) { + var callback; + switch (arguments.length) { + case 1: + callback = arguments[0]; + return func(done); + case 2: + callback = arguments[1]; + return func(arguments[0], done); + default: + var args = createArray(arguments); + var lastIndex = args.length - 1; + callback = args[lastIndex]; + args[lastIndex] = done; + func.apply(this, args); + } + + function done(err, res) { + if (err) { + return callback(null, { + error: err + }); + } + if (arguments.length > 2) { + res = slice(arguments, 1); + } + callback(null, { + value: res + }); + } + }; + } + + /** + * @memberof async + * @namespace reflectAll + * @param {Array[]|Object} tasks + * @return {Function} + */ + function reflectAll(tasks) { + var newTasks, keys; + if (isArray(tasks)) { + newTasks = Array(tasks.length); + arrayEachSync(tasks, iterate); + } else if (tasks && typeof tasks === obj) { + keys = nativeKeys(tasks); + newTasks = {}; + baseEachSync(tasks, iterate, keys); + } + return newTasks; + + function iterate(func, key) { + newTasks[key] = reflect(func); + } + } + + /** + * @memberof async + * @namespace createLogger + */ + function createLogger(name) { + return function(fn) { + var args = slice(arguments, 1); + args.push(done); + fn.apply(null, args); + }; + + function done(err) { + if (typeof console === obj) { + if (err) { + if (console.error) { + console.error(err); + } + return; + } + if (console[name]) { + var args = slice(arguments, 1); + arrayEachSync(args, function(arg) { + console[name](arg); + }); + } + } + } + } + + /** + * @memberof async + * @namespace safe + */ + function safe() { + createImmediate(); + return exports; + } + + /** + * @memberof async + * @namespace fast + */ + function fast() { + createImmediate(false); + return exports; + } +}); diff --git a/.pnpm-store/v11/files/43/0f19b9f7f1bf7617c06d06f6f04316afd8ced5cd999ed1a2294ca5363bff8c81309c9899adbb6df23ffbd7313aad44df8d6fd97b0746a70389a16d5fa56858 b/.pnpm-store/v11/files/43/0f19b9f7f1bf7617c06d06f6f04316afd8ced5cd999ed1a2294ca5363bff8c81309c9899adbb6df23ffbd7313aad44df8d6fd97b0746a70389a16d5fa56858 new file mode 100644 index 00000000..7a5f7e63 --- /dev/null +++ b/.pnpm-store/v11/files/43/0f19b9f7f1bf7617c06d06f6f04316afd8ced5cd999ed1a2294ca5363bff8c81309c9899adbb6df23ffbd7313aad44df8d6fd97b0746a70389a16d5fa56858 @@ -0,0 +1,31 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var path = require("path"); +var su = require("suman-utils"); +var logging_1 = require("../../lib/logging"); +var util_1 = require("../../lib/util"); +exports.exportName = String(path.basename(__dirname)).toLowerCase().replace(/[^a-zA-Z]/, ''); +exports.isSumanWatchPluginModule = true; +var values = Object.freeze({ + '2.3.4': { + version: '2.3.4', + isSumanWatchPluginValue: true, + pluginName: exports.exportName + '-watch-plugin', + pluginCwd: process.cwd(), + pluginEnv: process.env, + pluginExec: 'tsc -w -p "$(pwd)/tsconfig.test.json"', + stdoutStartTranspileRegex: /starting incremental compilation/i, + stdoutEndTranspileRegex: /compilation complete/i, + } +}); +exports.getValue = function (version, input) { + if (su.isObject(version)) { + logging_1.log.warning("suman-watch-plugin with name '" + exports.exportName + "'," + + " is using the latest version of the plugin because no desired version was passed as the first argument to getValue()."); + input = version; + version = 'latest'; + } + return util_1.utils.getValue(version, input, exports.exportName, values); +}; +util_1.utils.validatePluginValues(values); +exports[exports.exportName + 'Plugin'] = module.exports; diff --git a/.pnpm-store/v11/files/43/123b1188a196b91acb95b5e1503e9a278156c26e7377e051b54c7fa4eb790edeb745e4906859dddc1e7bcc06b29bfe54ddb72cd803765d116225d821ae8c4f b/.pnpm-store/v11/files/43/123b1188a196b91acb95b5e1503e9a278156c26e7377e051b54c7fa4eb790edeb745e4906859dddc1e7bcc06b29bfe54ddb72cd803765d116225d821ae8c4f new file mode 100644 index 00000000..6515fd73 --- /dev/null +++ b/.pnpm-store/v11/files/43/123b1188a196b91acb95b5e1503e9a278156c26e7377e051b54c7fa4eb790edeb745e4906859dddc1e7bcc06b29bfe54ddb72cd803765d116225d821ae8c4f @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invokeMap', require('../invokeMap')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/43/18e9d590ce10cf62a5218adca86c0fde7eb6afb49212ba6085f9d6bd9bee85294e4e1b1b00a8b80d51771aafd975cb43ce02a8a2d9463d19a47b64336f9078 b/.pnpm-store/v11/files/43/18e9d590ce10cf62a5218adca86c0fde7eb6afb49212ba6085f9d6bd9bee85294e4e1b1b00a8b80d51771aafd975cb43ce02a8a2d9463d19a47b64336f9078 new file mode 100644 index 00000000..cb5990c7 --- /dev/null +++ b/.pnpm-store/v11/files/43/18e9d590ce10cf62a5218adca86c0fde7eb6afb49212ba6085f9d6bd9bee85294e4e1b1b00a8b80d51771aafd975cb43ce02a8a2d9463d19a47b64336f9078 @@ -0,0 +1,243 @@ +1.3.8 / 2022-02-02 +================== + + * deps: mime-types@~2.1.34 + - deps: mime-db@~1.51.0 + * deps: negotiator@0.6.3 + +1.3.7 / 2019-04-29 +================== + + * deps: negotiator@0.6.2 + - Fix sorting charset, encoding, and language with extra parameters + +1.3.6 / 2019-04-28 +================== + + * deps: mime-types@~2.1.24 + - deps: mime-db@~1.40.0 + +1.3.5 / 2018-02-28 +================== + + * deps: mime-types@~2.1.18 + - deps: mime-db@~1.33.0 + +1.3.4 / 2017-08-22 +================== + + * deps: mime-types@~2.1.16 + - deps: mime-db@~1.29.0 + +1.3.3 / 2016-05-02 +================== + + * deps: mime-types@~2.1.11 + - deps: mime-db@~1.23.0 + * deps: negotiator@0.6.1 + - perf: improve `Accept` parsing speed + - perf: improve `Accept-Charset` parsing speed + - perf: improve `Accept-Encoding` parsing speed + - perf: improve `Accept-Language` parsing speed + +1.3.2 / 2016-03-08 +================== + + * deps: mime-types@~2.1.10 + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + - deps: mime-db@~1.22.0 + +1.3.1 / 2016-01-19 +================== + + * deps: mime-types@~2.1.9 + - deps: mime-db@~1.21.0 + +1.3.0 / 2015-09-29 +================== + + * deps: mime-types@~2.1.7 + - deps: mime-db@~1.19.0 + * deps: negotiator@0.6.0 + - Fix including type extensions in parameters in `Accept` parsing + - Fix parsing `Accept` parameters with quoted equals + - Fix parsing `Accept` parameters with quoted semicolons + - Lazy-load modules from main entry point + - perf: delay type concatenation until needed + - perf: enable strict mode + - perf: hoist regular expressions + - perf: remove closures getting spec properties + - perf: remove a closure from media type parsing + - perf: remove property delete from media type parsing + +1.2.13 / 2015-09-06 +=================== + + * deps: mime-types@~2.1.6 + - deps: mime-db@~1.18.0 + +1.2.12 / 2015-07-30 +=================== + + * deps: mime-types@~2.1.4 + - deps: mime-db@~1.16.0 + +1.2.11 / 2015-07-16 +=================== + + * deps: mime-types@~2.1.3 + - deps: mime-db@~1.15.0 + +1.2.10 / 2015-07-01 +=================== + + * deps: mime-types@~2.1.2 + - deps: mime-db@~1.14.0 + +1.2.9 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - perf: fix deopt during mapping + +1.2.8 / 2015-06-07 +================== + + * deps: mime-types@~2.1.0 + - deps: mime-db@~1.13.0 + * perf: avoid argument reassignment & argument slice + * perf: avoid negotiator recursive construction + * perf: enable strict mode + * perf: remove unnecessary bitwise operator + +1.2.7 / 2015-05-10 +================== + + * deps: negotiator@0.5.3 + - Fix media type parameter matching to be case-insensitive + +1.2.6 / 2015-05-07 +================== + + * deps: mime-types@~2.0.11 + - deps: mime-db@~1.9.1 + * deps: negotiator@0.5.2 + - Fix comparing media types with quoted values + - Fix splitting media types with quoted commas + +1.2.5 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - deps: mime-db@~1.8.0 + +1.2.4 / 2015-02-14 +================== + + * Support Node.js 0.6 + * deps: mime-types@~2.0.9 + - deps: mime-db@~1.7.0 + * deps: negotiator@0.5.1 + - Fix preference sorting to be stable for long acceptable lists + +1.2.3 / 2015-01-31 +================== + + * deps: mime-types@~2.0.8 + - deps: mime-db@~1.6.0 + +1.2.2 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - deps: mime-db@~1.5.0 + +1.2.1 / 2014-12-30 +================== + + * deps: mime-types@~2.0.5 + - deps: mime-db@~1.3.1 + +1.2.0 / 2014-12-19 +================== + + * deps: negotiator@0.5.0 + - Fix list return order when large accepted list + - Fix missing identity encoding when q=0 exists + - Remove dynamic building of Negotiator class + +1.1.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - deps: mime-db@~1.3.0 + +1.1.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - deps: mime-db@~1.2.0 + +1.1.2 / 2014-10-14 +================== + + * deps: negotiator@0.4.9 + - Fix error when media type has invalid parameter + +1.1.1 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - deps: mime-db@~1.1.0 + * deps: negotiator@0.4.8 + - Fix all negotiations to be case-insensitive + - Stable sort preferences of same quality according to client order + +1.1.0 / 2014-09-02 +================== + + * update `mime-types` + +1.0.7 / 2014-07-04 +================== + + * Fix wrong type returned from `type` when match after unknown extension + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/.pnpm-store/v11/files/43/3f49bedc97cbf106d3fd7f16ae391fb4724f15ceee1c7c3ef345c4b5fb8b608f774c180f2720e928ac60693b5d63ed86d5bb824bb0a36a97055df3e9d79b85 b/.pnpm-store/v11/files/43/3f49bedc97cbf106d3fd7f16ae391fb4724f15ceee1c7c3ef345c4b5fb8b608f774c180f2720e928ac60693b5d63ed86d5bb824bb0a36a97055df3e9d79b85 new file mode 100644 index 00000000..f43b0cac --- /dev/null +++ b/.pnpm-store/v11/files/43/3f49bedc97cbf106d3fd7f16ae391fb4724f15ceee1c7c3ef345c4b5fb8b608f774c180f2720e928ac60693b5d63ed86d5bb824bb0a36a97055df3e9d79b85 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').foldl; diff --git a/.pnpm-store/v11/files/43/491edc60a3c1e83978499d95b611c13703869ff1cf101979dd2fb0a352ea3e5587df91a52758defaf7d085424a51a0bde85cccc86a864f8084edf874b869bc b/.pnpm-store/v11/files/43/491edc60a3c1e83978499d95b611c13703869ff1cf101979dd2fb0a352ea3e5587df91a52758defaf7d085424a51a0bde85cccc86a864f8084edf874b869bc new file mode 100644 index 00000000..c6c8ec47 --- /dev/null +++ b/.pnpm-store/v11/files/43/491edc60a3c1e83978499d95b611c13703869ff1cf101979dd2fb0a352ea3e5587df91a52758defaf7d085424a51a0bde85cccc86a864f8084edf874b869bc @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/43/5fb6e894e09e29043c5c328ef9201327aa14cc467ce0680dda3352d63562ecd4ee5a7a7fe1fc7823e2cd3277d49626afe08e971932e228bccbf45c79e1e480 b/.pnpm-store/v11/files/43/5fb6e894e09e29043c5c328ef9201327aa14cc467ce0680dda3352d63562ecd4ee5a7a7fe1fc7823e2cd3277d49626afe08e971932e228bccbf45c79e1e480 new file mode 100644 index 00000000..f909bfba --- /dev/null +++ b/.pnpm-store/v11/files/43/5fb6e894e09e29043c5c328ef9201327aa14cc467ce0680dda3352d63562ecd4ee5a7a7fe1fc7823e2cd3277d49626afe08e971932e228bccbf45c79e1e480 @@ -0,0 +1,640 @@ +# braces [![NPM version](https://img.shields.io/npm/v/braces.svg?style=flat)](https://www.npmjs.com/package/braces) [![NPM monthly downloads](https://img.shields.io/npm/dm/braces.svg?style=flat)](https://npmjs.org/package/braces) [![NPM total downloads](https://img.shields.io/npm/dt/braces.svg?style=flat)](https://npmjs.org/package/braces) [![Linux Build Status](https://img.shields.io/travis/micromatch/braces.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/braces) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/braces.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/braces) + +> Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save braces +``` + +## Why use braces? + +Brace patterns are great for matching ranges. Users (and implementors) shouldn't have to think about whether or not they will break their application (or yours) from accidentally defining an aggressive brace pattern. _Braces is the only library that offers a [solution to this problem](#performance)_. + +* **Safe(r)**: Braces isn't vulnerable to DoS attacks like [brace-expansion](https://github.com/juliangruber/brace-expansion), [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch) (a different bug than the [other regex DoS bug](https://medium.com/node-security/minimatch-redos-vulnerability-590da24e6d3c#.jew0b6mpc)). +* **Accurate**: complete support for the [Bash 4.3 Brace Expansion](www.gnu.org/software/bash/) specification (passes all of the Bash braces tests) +* **[fast and performant](#benchmarks)**: Starts fast, runs fast and [scales well](#performance) as patterns increase in complexity. +* **Organized code base**: with parser and compiler that are eas(y|ier) to maintain and update when edge cases crop up. +* **Well-tested**: thousands of test assertions. Passes 100% of the [minimatch](https://github.com/isaacs/minimatch) and [brace-expansion](https://github.com/juliangruber/brace-expansion) unit tests as well (as of the writing of this). + +## Usage + +The main export is a function that takes one or more brace `patterns` and `options`. + +```js +var braces = require('braces'); +braces(pattern[, options]); +``` + +By default, braces returns an optimized regex-source string. To get an array of brace patterns, use `brace.expand()`. + +The following section explains the difference in more detail. _(If you're curious about "why" braces does this by default, see [brace matching pitfalls](#brace-matching-pitfalls)_. + +### Optimized vs. expanded braces + +**Optimized** + +By default, patterns are optimized for regex and matching: + +```js +console.log(braces('a/{x,y,z}/b')); +//=> ['a/(x|y|z)/b'] +``` + +**Expanded** + +To expand patterns the same way as Bash or [minimatch](https://github.com/isaacs/minimatch), use the [.expand](#expand) method: + +```js +console.log(braces.expand('a/{x,y,z}/b')); +//=> ['a/x/b', 'a/y/b', 'a/z/b'] +``` + +Or use [options.expand](#optionsexpand): + +```js +console.log(braces('a/{x,y,z}/b', {expand: true})); +//=> ['a/x/b', 'a/y/b', 'a/z/b'] +``` + +## Features + +* [lists](#lists): Supports "lists": `a/{b,c}/d` => `['a/b/d', 'a/c/d']` +* [sequences](#sequences): Supports alphabetical or numerical "sequences" (ranges): `{1..3}` => `['1', '2', '3']` +* [steps](#steps): Supports "steps" or increments: `{2..10..2}` => `['2', '4', '6', '8', '10']` +* [escaping](#escaping) +* [options](#options) + +### Lists + +Uses [fill-range](https://github.com/jonschlinkert/fill-range) for expanding alphabetical or numeric lists: + +```js +console.log(braces('a/{foo,bar,baz}/*.js')); +//=> ['a/(foo|bar|baz)/*.js'] + +console.log(braces.expand('a/{foo,bar,baz}/*.js')); +//=> ['a/foo/*.js', 'a/bar/*.js', 'a/baz/*.js'] +``` + +### Sequences + +Uses [fill-range](https://github.com/jonschlinkert/fill-range) for expanding alphabetical or numeric ranges (bash "sequences"): + +```js +console.log(braces.expand('{1..3}')); // ['1', '2', '3'] +console.log(braces.expand('a{01..03}b')); // ['a01b', 'a02b', 'a03b'] +console.log(braces.expand('a{1..3}b')); // ['a1b', 'a2b', 'a3b'] +console.log(braces.expand('{a..c}')); // ['a', 'b', 'c'] +console.log(braces.expand('foo/{a..c}')); // ['foo/a', 'foo/b', 'foo/c'] + +// supports padded ranges +console.log(braces('a{01..03}b')); //=> [ 'a(0[1-3])b' ] +console.log(braces('a{001..300}b')); //=> [ 'a(0{2}[1-9]|0[1-9][0-9]|[12][0-9]{2}|300)b' ] +``` + +### Steps + +Steps, or increments, may be used with ranges: + +```js +console.log(braces.expand('{2..10..2}')); +//=> ['2', '4', '6', '8', '10'] + +console.log(braces('{2..10..2}')); +//=> ['(2|4|6|8|10)'] +``` + +When the [.optimize](#optimize) method is used, or [options.optimize](#optionsoptimize) is set to true, sequences are passed to [to-regex-range](https://github.com/jonschlinkert/to-regex-range) for expansion. + +### Nesting + +Brace patterns may be nested. The results of each expanded string are not sorted, and left to right order is preserved. + +**"Expanded" braces** + +```js +console.log(braces.expand('a{b,c,/{x,y}}/e')); +//=> ['ab/e', 'ac/e', 'a/x/e', 'a/y/e'] + +console.log(braces.expand('a/{x,{1..5},y}/c')); +//=> ['a/x/c', 'a/1/c', 'a/2/c', 'a/3/c', 'a/4/c', 'a/5/c', 'a/y/c'] +``` + +**"Optimized" braces** + +```js +console.log(braces('a{b,c,/{x,y}}/e')); +//=> ['a(b|c|/(x|y))/e'] + +console.log(braces('a/{x,{1..5},y}/c')); +//=> ['a/(x|([1-5])|y)/c'] +``` + +### Escaping + +**Escaping braces** + +A brace pattern will not be expanded or evaluted if _either the opening or closing brace is escaped_: + +```js +console.log(braces.expand('a\\{d,c,b}e')); +//=> ['a{d,c,b}e'] + +console.log(braces.expand('a{d,c,b\\}e')); +//=> ['a{d,c,b}e'] +``` + +**Escaping commas** + +Commas inside braces may also be escaped: + +```js +console.log(braces.expand('a{b\\,c}d')); +//=> ['a{b,c}d'] + +console.log(braces.expand('a{d\\,c,b}e')); +//=> ['ad,ce', 'abe'] +``` + +**Single items** + +Following bash conventions, a brace pattern is also not expanded when it contains a single character: + +```js +console.log(braces.expand('a{b}c')); +//=> ['a{b}c'] +``` + +## Options + +### options.maxLength + +**Type**: `Number` + +**Default**: `65,536` + +**Description**: Limit the length of the input string. Useful when the input string is generated or your application allows users to pass a string, et cetera. + +```js +console.log(braces('a/{b,c}/d', { maxLength: 3 })); //=> throws an error +``` + +### options.expand + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Generate an "expanded" brace pattern (this option is unncessary with the `.expand` method, which does the same thing). + +```js +console.log(braces('a/{b,c}/d', {expand: true})); +//=> [ 'a/b/d', 'a/c/d' ] +``` + +### options.optimize + +**Type**: `Boolean` + +**Default**: `true` + +**Description**: Enabled by default. + +```js +console.log(braces('a/{b,c}/d')); +//=> [ 'a/(b|c)/d' ] +``` + +### options.nodupes + +**Type**: `Boolean` + +**Default**: `true` + +**Description**: Duplicates are removed by default. To keep duplicates, pass `{nodupes: false}` on the options + +### options.rangeLimit + +**Type**: `Number` + +**Default**: `250` + +**Description**: When `braces.expand()` is used, or `options.expand` is true, brace patterns will automatically be [optimized](#optionsoptimize) when the difference between the range minimum and range maximum exceeds the `rangeLimit`. This is to prevent huge ranges from freezing your application. + +You can set this to any number, or change `options.rangeLimit` to `Inifinity` to disable this altogether. + +**Examples** + +```js +// pattern exceeds the "rangeLimit", so it's optimized automatically +console.log(braces.expand('{1..1000}')); +//=> ['([1-9]|[1-9][0-9]{1,2}|1000)'] + +// pattern does not exceed "rangeLimit", so it's NOT optimized +console.log(braces.expand('{1..100}')); +//=> ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100'] +``` + +### options.transform + +**Type**: `Function` + +**Default**: `undefined` + +**Description**: Customize range expansion. + +```js +var range = braces.expand('x{a..e}y', { + transform: function(str) { + return 'foo' + str; + } +}); + +console.log(range); +//=> [ 'xfooay', 'xfooby', 'xfoocy', 'xfoody', 'xfooey' ] +``` + +### options.quantifiers + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: In regular expressions, quanitifiers can be used to specify how many times a token can be repeated. For example, `a{1,3}` will match the letter `a` one to three times. + +Unfortunately, regex quantifiers happen to share the same syntax as [Bash lists](#lists) + +The `quantifiers` option tells braces to detect when [regex quantifiers](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#quantifiers) are defined in the given pattern, and not to try to expand them as lists. + +**Examples** + +```js +var braces = require('braces'); +console.log(braces('a/b{1,3}/{x,y,z}')); +//=> [ 'a/b(1|3)/(x|y|z)' ] +console.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true})); +//=> [ 'a/b{1,3}/(x|y|z)' ] +console.log(braces('a/b{1,3}/{x,y,z}', {quantifiers: true, expand: true})); +//=> [ 'a/b{1,3}/x', 'a/b{1,3}/y', 'a/b{1,3}/z' ] +``` + +### options.unescape + +**Type**: `Boolean` + +**Default**: `undefined` + +**Description**: Strip backslashes that were used for escaping from the result. + +## What is "brace expansion"? + +Brace expansion is a type of parameter expansion that was made popular by unix shells for generating lists of strings, as well as regex-like matching when used alongside wildcards (globs). + +In addition to "expansion", braces are also used for matching. In other words: + +* [brace expansion](#brace-expansion) is for generating new lists +* [brace matching](#brace-matching) is for filtering existing lists + +
+More about brace expansion (click to expand) + +There are two main types of brace expansion: + +1. **lists**: which are defined using comma-separated values inside curly braces: `{a,b,c}` +2. **sequences**: which are defined using a starting value and an ending value, separated by two dots: `a{1..3}b`. Optionally, a third argument may be passed to define a "step" or increment to use: `a{1..100..10}b`. These are also sometimes referred to as "ranges". + +Here are some example brace patterns to illustrate how they work: + +**Sets** + +``` +{a,b,c} => a b c +{a,b,c}{1,2} => a1 a2 b1 b2 c1 c2 +``` + +**Sequences** + +``` +{1..9} => 1 2 3 4 5 6 7 8 9 +{4..-4} => 4 3 2 1 0 -1 -2 -3 -4 +{1..20..3} => 1 4 7 10 13 16 19 +{a..j} => a b c d e f g h i j +{j..a} => j i h g f e d c b a +{a..z..3} => a d g j m p s v y +``` + +**Combination** + +Sets and sequences can be mixed together or used along with any other strings. + +``` +{a,b,c}{1..3} => a1 a2 a3 b1 b2 b3 c1 c2 c3 +foo/{a,b,c}/bar => foo/a/bar foo/b/bar foo/c/bar +``` + +The fact that braces can be "expanded" from relatively simple patterns makes them ideal for quickly generating test fixtures, file paths, and similar use cases. + +## Brace matching + +In addition to _expansion_, brace patterns are also useful for performing regular-expression-like matching. + +For example, the pattern `foo/{1..3}/bar` would match any of following strings: + +``` +foo/1/bar +foo/2/bar +foo/3/bar +``` + +But not: + +``` +baz/1/qux +baz/2/qux +baz/3/qux +``` + +Braces can also be combined with [glob patterns](https://github.com/jonschlinkert/micromatch) to perform more advanced wildcard matching. For example, the pattern `*/{1..3}/*` would match any of following strings: + +``` +foo/1/bar +foo/2/bar +foo/3/bar +baz/1/qux +baz/2/qux +baz/3/qux +``` + +## Brace matching pitfalls + +Although brace patterns offer a user-friendly way of matching ranges or sets of strings, there are also some major disadvantages and potential risks you should be aware of. + +### tldr + +**"brace bombs"** + +* brace expansion can eat up a huge amount of processing resources +* as brace patterns increase _linearly in size_, the system resources required to expand the pattern increase exponentially +* users can accidentally (or intentially) exhaust your system's resources resulting in the equivalent of a DoS attack (bonus: no programming knowledge is required!) + +For a more detailed explanation with examples, see the [geometric complexity](#geometric-complexity) section. + +### The solution + +Jump to the [performance section](#performance) to see how Braces solves this problem in comparison to other libraries. + +### Geometric complexity + +At minimum, brace patterns with sets limited to two elements have quadradic or `O(n^2)` complexity. But the complexity of the algorithm increases exponentially as the number of sets, _and elements per set_, increases, which is `O(n^c)`. + +For example, the following sets demonstrate quadratic (`O(n^2)`) complexity: + +``` +{1,2}{3,4} => (2X2) => 13 14 23 24 +{1,2}{3,4}{5,6} => (2X2X2) => 135 136 145 146 235 236 245 246 +``` + +But add an element to a set, and we get a n-fold Cartesian product with `O(n^c)` complexity: + +``` +{1,2,3}{4,5,6}{7,8,9} => (3X3X3) => 147 148 149 157 158 159 167 168 169 247 248 + 249 257 258 259 267 268 269 347 348 349 357 + 358 359 367 368 369 +``` + +Now, imagine how this complexity grows given that each element is a n-tuple: + +``` +{1..100}{1..100} => (100X100) => 10,000 elements (38.4 kB) +{1..100}{1..100}{1..100} => (100X100X100) => 1,000,000 elements (5.76 MB) +``` + +Although these examples are clearly contrived, they demonstrate how brace patterns can quickly grow out of control. + +**More information** + +Interested in learning more about brace expansion? + +* [linuxjournal/bash-brace-expansion](http://www.linuxjournal.com/content/bash-brace-expansion) +* [rosettacode/Brace_expansion](https://rosettacode.org/wiki/Brace_expansion) +* [cartesian product](https://en.wikipedia.org/wiki/Cartesian_product) + +
+ +## Performance + +Braces is not only screaming fast, it's also more accurate the other brace expansion libraries. + +### Better algorithms + +Fortunately there is a solution to the ["brace bomb" problem](#brace-matching-pitfalls): _don't expand brace patterns into an array when they're used for matching_. + +Instead, convert the pattern into an optimized regular expression. This is easier said than done, and braces is the only library that does this currently. + +**The proof is in the numbers** + +Minimatch gets exponentially slower as patterns increase in complexity, braces does not. The following results were generated using `braces()` and `minimatch.braceExpand()`, respectively. + +| **Pattern** | **braces** | **[minimatch](https://github.com/isaacs/minimatch)** | +| --- | --- | --- | +| `{1..9007199254740991}`
[1] | `298 B` (5ms 459μs) | N/A (freezes) | +| `{1..1000000000000000}` | `41 B` (1ms 15μs) | N/A (freezes) | +| `{1..100000000000000}` | `40 B` (890μs) | N/A (freezes) | +| `{1..10000000000000}` | `39 B` (2ms 49μs) | N/A (freezes) | +| `{1..1000000000000}` | `38 B` (608μs) | N/A (freezes) | +| `{1..100000000000}` | `37 B` (397μs) | N/A (freezes) | +| `{1..10000000000}` | `35 B` (983μs) | N/A (freezes) | +| `{1..1000000000}` | `34 B` (798μs) | N/A (freezes) | +| `{1..100000000}` | `33 B` (733μs) | N/A (freezes) | +| `{1..10000000}` | `32 B` (5ms 632μs) | `78.89 MB` (16s 388ms 569μs) | +| `{1..1000000}` | `31 B` (1ms 381μs) | `6.89 MB` (1s 496ms 887μs) | +| `{1..100000}` | `30 B` (950μs) | `588.89 kB` (146ms 921μs) | +| `{1..10000}` | `29 B` (1ms 114μs) | `48.89 kB` (14ms 187μs) | +| `{1..1000}` | `28 B` (760μs) | `3.89 kB` (1ms 453μs) | +| `{1..100}` | `22 B` (345μs) | `291 B` (196μs) | +| `{1..10}` | `10 B` (533μs) | `20 B` (37μs) | +| `{1..3}` | `7 B` (190μs) | `5 B` (27μs) | + +### Faster algorithms + +When you need expansion, braces is still much faster. + +_(the following results were generated using `braces.expand()` and `minimatch.braceExpand()`, respectively)_ + +| **Pattern** | **braces** | **[minimatch](https://github.com/isaacs/minimatch)** | +| --- | --- | --- | +| `{1..10000000}` | `78.89 MB` (2s 698ms 642μs) | `78.89 MB` (18s 601ms 974μs) | +| `{1..1000000}` | `6.89 MB` (458ms 576μs) | `6.89 MB` (1s 491ms 621μs) | +| `{1..100000}` | `588.89 kB` (20ms 728μs) | `588.89 kB` (156ms 919μs) | +| `{1..10000}` | `48.89 kB` (2ms 202μs) | `48.89 kB` (13ms 641μs) | +| `{1..1000}` | `3.89 kB` (1ms 796μs) | `3.89 kB` (1ms 958μs) | +| `{1..100}` | `291 B` (424μs) | `291 B` (211μs) | +| `{1..10}` | `20 B` (487μs) | `20 B` (72μs) | +| `{1..3}` | `5 B` (166μs) | `5 B` (27μs) | + +If you'd like to run these comparisons yourself, see [test/support/generate.js](test/support/generate.js). + +## Benchmarks + +### Running benchmarks + +Install dev dependencies: + +```bash +npm i -d && npm benchmark +``` + +### Latest results + +```bash +Benchmarking: (8 of 8) + · combination-nested + · combination + · escaped + · list-basic + · list-multiple + · no-braces + · sequence-basic + · sequence-multiple + +# benchmark/fixtures/combination-nested.js (52 bytes) + brace-expansion x 4,756 ops/sec ±1.09% (86 runs sampled) + braces x 11,202,303 ops/sec ±1.06% (88 runs sampled) + minimatch x 4,816 ops/sec ±0.99% (87 runs sampled) + + fastest is braces + +# benchmark/fixtures/combination.js (51 bytes) + brace-expansion x 625 ops/sec ±0.87% (87 runs sampled) + braces x 11,031,884 ops/sec ±0.72% (90 runs sampled) + minimatch x 637 ops/sec ±0.84% (88 runs sampled) + + fastest is braces + +# benchmark/fixtures/escaped.js (44 bytes) + brace-expansion x 163,325 ops/sec ±1.05% (87 runs sampled) + braces x 10,655,071 ops/sec ±1.22% (88 runs sampled) + minimatch x 147,495 ops/sec ±0.96% (88 runs sampled) + + fastest is braces + +# benchmark/fixtures/list-basic.js (40 bytes) + brace-expansion x 99,726 ops/sec ±1.07% (83 runs sampled) + braces x 10,596,584 ops/sec ±0.98% (88 runs sampled) + minimatch x 100,069 ops/sec ±1.17% (86 runs sampled) + + fastest is braces + +# benchmark/fixtures/list-multiple.js (52 bytes) + brace-expansion x 34,348 ops/sec ±1.08% (88 runs sampled) + braces x 9,264,131 ops/sec ±1.12% (88 runs sampled) + minimatch x 34,893 ops/sec ±0.87% (87 runs sampled) + + fastest is braces + +# benchmark/fixtures/no-braces.js (48 bytes) + brace-expansion x 275,368 ops/sec ±1.18% (89 runs sampled) + braces x 9,134,677 ops/sec ±0.95% (88 runs sampled) + minimatch x 3,755,954 ops/sec ±1.13% (89 runs sampled) + + fastest is braces + +# benchmark/fixtures/sequence-basic.js (41 bytes) + brace-expansion x 5,492 ops/sec ±1.35% (87 runs sampled) + braces x 8,485,034 ops/sec ±1.28% (89 runs sampled) + minimatch x 5,341 ops/sec ±1.17% (87 runs sampled) + + fastest is braces + +# benchmark/fixtures/sequence-multiple.js (51 bytes) + brace-expansion x 116 ops/sec ±0.77% (77 runs sampled) + braces x 9,445,118 ops/sec ±1.32% (84 runs sampled) + minimatch x 109 ops/sec ±1.16% (76 runs sampled) + + fastest is braces +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") +* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/micromatch/extglob) | [homepage](https://github.com/micromatch/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.") +* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") +* [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/micromatch/nanomatch) | [homepage](https://github.com/micromatch/nanomatch "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 188 | [jonschlinkert](https://github.com/jonschlinkert) | +| 4 | [doowb](https://github.com/doowb) | +| 1 | [es128](https://github.com/es128) | +| 1 | [eush77](https://github.com/eush77) | +| 1 | [hemanth](https://github.com/hemanth) | + +### Author + +**Jon Schlinkert** + +* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on February 17, 2018._ + +
+
+
    +
  1. this is the largest safe integer allowed in JavaScript. + +
  2. +
+
\ No newline at end of file diff --git a/.pnpm-store/v11/files/43/6f08195bd9c26c802a67d6f9bdcea87158f0784bd3f40dcd22e0a343f6fd9b5f963df0b5a7397b3a83eb126f8d3a2aa44dc2c5bba37bf3c5d9057a39c86732 b/.pnpm-store/v11/files/43/6f08195bd9c26c802a67d6f9bdcea87158f0784bd3f40dcd22e0a343f6fd9b5f963df0b5a7397b3a83eb126f8d3a2aa44dc2c5bba37bf3c5d9057a39c86732 new file mode 100644 index 00000000..0b630df1 --- /dev/null +++ b/.pnpm-store/v11/files/43/6f08195bd9c26c802a67d6f9bdcea87158f0784bd3f40dcd22e0a343f6fd9b5f963df0b5a7397b3a83eb126f8d3a2aa44dc2c5bba37bf3c5d9057a39c86732 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('spreadFrom', require('../spread')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/43/9fc0fbef27e6ca138bcc8c5b76064ad970af3fd91271775c78fb9fc50cc962706a14bc7550e204dda64a61bdd5686692e4ad79d22783a44f612870d7fd7bea b/.pnpm-store/v11/files/43/9fc0fbef27e6ca138bcc8c5b76064ad970af3fd91271775c78fb9fc50cc962706a14bc7550e204dda64a61bdd5686692e4ad79d22783a44f612870d7fd7bea new file mode 100644 index 00000000..096d2d04 --- /dev/null +++ b/.pnpm-store/v11/files/43/9fc0fbef27e6ca138bcc8c5b76064ad970af3fd91271775c78fb9fc50cc962706a14bc7550e204dda64a61bdd5686692e4ad79d22783a44f612870d7fd7bea @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').series; diff --git a/.pnpm-store/v11/files/43/bbcd0c8c4837c908d45306611bd7e2e88422fa74e8210fb862a34834178713711c2027b0ed783634e8d948e4fbb40b91062fb0750633437eff70822367a85a b/.pnpm-store/v11/files/43/bbcd0c8c4837c908d45306611bd7e2e88422fa74e8210fb862a34834178713711c2027b0ed783634e8d948e4fbb40b91062fb0750633437eff70822367a85a new file mode 100644 index 00000000..ea7b7c65 --- /dev/null +++ b/.pnpm-store/v11/files/43/bbcd0c8c4837c908d45306611bd7e2e88422fa74e8210fb862a34834178713711c2027b0ed783634e8d948e4fbb40b91062fb0750633437eff70822367a85a @@ -0,0 +1,284 @@ +var arrayEach = require('./_arrayEach'), + assignWith = require('./assignWith'), + attempt = require('./attempt'), + baseValues = require('./_baseValues'), + customDefaultsAssignIn = require('./_customDefaultsAssignIn'), + escapeStringChar = require('./_escapeStringChar'), + isError = require('./isError'), + isIterateeCall = require('./_isIterateeCall'), + keys = require('./keys'), + reInterpolate = require('./_reInterpolate'), + templateSettings = require('./templateSettings'), + toString = require('./toString'); + +/** Error message constants. */ +var INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`', + INVALID_TEMPL_IMPORTS_ERROR_TEXT = 'Invalid `imports` option passed into `_.template`'; + +/** Used to match empty string literals in compiled template source. */ +var reEmptyStringLeading = /\b__p \+= '';/g, + reEmptyStringMiddle = /\b(__p \+=) '' \+/g, + reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; + +/** + * Used to validate the `validate` option in `_.template` variable. + * + * Forbids characters which could potentially change the meaning of the function argument definition: + * - "()," (modification of function parameters) + * - "=" (default value) + * - "[]{}" (destructuring of function parameters) + * - "/" (beginning of a comment) + * - whitespace + */ +var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; + +/** + * Used to match + * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). + */ +var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; + +/** Used to ensure capturing order of template delimiters. */ +var reNoMatch = /($^)/; + +/** Used to match unescaped characters in compiled string literals. */ +var reUnescapedString = /['\n\r\u2028\u2029\\]/g; + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * Creates a compiled template function that can interpolate data properties + * in "interpolate" delimiters, HTML-escape interpolated data properties in + * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data + * properties may be accessed as free variables in the template. If a setting + * object is given, it takes precedence over `_.templateSettings` values. + * + * **Security:** `_.template` is insecure and should not be used. It will be + * removed in Lodash v5. Avoid untrusted input. See + * [threat model](https://github.com/lodash/lodash/blob/main/threat-model.md). + * + * **Note:** In the development build `_.template` utilizes + * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) + * for easier debugging. + * + * For more information on precompiling templates see + * [lodash's custom builds documentation](https://lodash.com/custom-builds). + * + * For more information on Chrome extension sandboxes see + * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The template string. + * @param {Object} [options={}] The options object. + * @param {RegExp} [options.escape=_.templateSettings.escape] + * The HTML "escape" delimiter. + * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] + * The "evaluate" delimiter. + * @param {Object} [options.imports=_.templateSettings.imports] + * An object to import into the template as free variables. + * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] + * The "interpolate" delimiter. + * @param {string} [options.sourceURL='templateSources[n]'] + * The sourceURL of the compiled template. + * @param {string} [options.variable='obj'] + * The data object variable name. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Function} Returns the compiled template function. + * @example + * + * // Use the "interpolate" delimiter to create a compiled template. + * var compiled = _.template('hello <%= user %>!'); + * compiled({ 'user': 'fred' }); + * // => 'hello fred!' + * + * // Use the HTML "escape" delimiter to escape data property values. + * var compiled = _.template('<%- value %>'); + * compiled({ 'value': '` in strings + +- `keep_quoted_props` (default: `false`) — when turned on, prevents stripping + quotes from property names in object literals. + +- `max_line_len` (default: `false`) — maximum line length (for uglified code) + +- `preamble` (default: `null`) — when passed it must be a string and + it will be prepended to the output literally. The source map will + adjust for this text. Can be used to insert a comment containing + licensing information, for example. + +- `preserve_line` (default: `false`) — pass `true` to retain line numbering on + a best effort basis. + +- `quote_keys` (default: `false`) — pass `true` to quote all keys in literal + objects + +- `quote_style` (default: `0`) — preferred quote style for strings (affects + quoted property names and directives as well): + - `0` — prefers double quotes, switches to single quotes when there are + more double quotes in the string itself. `0` is best for gzip size. + - `1` — always use single quotes + - `2` — always use double quotes + - `3` — always use the original quotes + +- `semicolons` (default: `true`) — separate statements with semicolons. If + you pass `false` then whenever possible we will use a newline instead of a + semicolon, leading to more readable output of uglified code (size before + gzip could be smaller; size after gzip insignificantly larger). + +- `shebang` (default: `true`) — preserve shebang `#!` in preamble (bash scripts) + +- `width` (default: `80`) — only takes effect when beautification is on, this + specifies an (orientative) line width that the beautifier will try to + obey. It refers to the width of the line text (excluding indentation). + It doesn't work very well currently, but it does make the code generated + by UglifyJS more readable. + +- `wrap_iife` (default: `false`) — pass `true` to wrap immediately invoked + function expressions. See + [#640](https://github.com/mishoo/UglifyJS/issues/640) for more details. + +# Miscellaneous + +### Keeping copyright notices or other comments + +You can pass `--comments` to retain certain comments in the output. By +default it will keep JSDoc-style comments that contain "@preserve", +"@license" or "@cc_on" (conditional compilation for IE). You can pass +`--comments all` to keep all the comments, or a valid JavaScript regexp to +keep only comments that match this regexp. For example `--comments /^!/` +will keep comments like `/*! Copyright Notice */`. + +Note, however, that there might be situations where comments are lost. For +example: +```javascript +function f() { + /** @preserve Foo Bar */ + function g() { + // this function is never called + } + return something(); +} +``` + +Even though it has "@preserve", the comment will be lost because the inner +function `g` (which is the AST node to which the comment is attached to) is +discarded by the compressor as not referenced. + +The safest comments where to place copyright information (or other info that +needs to be kept in the output) are comments attached to toplevel nodes. + +### The `unsafe` `compress` option + +It enables some transformations that *might* break code logic in certain +contrived cases, but should be fine for most code. You might want to try it +on your own code, it should reduce the minified size. Here's what happens +when this flag is on: + +- `new Array(1, 2, 3)` or `Array(1, 2, 3)` → `[ 1, 2, 3 ]` +- `new Object()` → `{}` +- `String(exp)` or `exp.toString()` → `"" + exp` +- `new Object/RegExp/Function/Error/Array (...)` → we discard the `new` + +### Conditional compilation + +You can use the `--define` (`-d`) switch in order to declare global +variables that UglifyJS will assume to be constants (unless defined in +scope). For example if you pass `--define DEBUG=false` then, coupled with +dead code removal UglifyJS will discard the following from the output: +```javascript +if (DEBUG) { + console.log("debug stuff"); +} +``` + +You can specify nested constants in the form of `--define env.DEBUG=false`. + +UglifyJS will warn about the condition being always false and about dropping +unreachable code; for now there is no option to turn off only this specific +warning, you can pass `warnings=false` to turn off *all* warnings. + +Another way of doing that is to declare your globals as constants in a +separate file and include it into the build. For example you can have a +`build/defines.js` file with the following: +```javascript +var DEBUG = false; +var PRODUCTION = true; +// etc. +``` + +and build your code like this: + + uglifyjs build/defines.js js/foo.js js/bar.js... -c + +UglifyJS will notice the constants and, since they cannot be altered, it +will evaluate references to them to the value itself and drop unreachable +code as usual. The build will contain the `const` declarations if you use +them. If you are targeting < ES6 environments which does not support `const`, +using `var` with `reduce_vars` (enabled by default) should suffice. + +### Conditional compilation API + +You can also use conditional compilation via the programmatic API. With the difference that the +property name is `global_defs` and is a compressor property: + +```javascript +var result = UglifyJS.minify(fs.readFileSync("input.js", "utf8"), { + compress: { + dead_code: true, + global_defs: { + DEBUG: false + } + } +}); +``` + +To replace an identifier with an arbitrary non-constant expression it is +necessary to prefix the `global_defs` key with `"@"` to instruct UglifyJS +to parse the value as an expression: +```javascript +UglifyJS.minify("alert('hello');", { + compress: { + global_defs: { + "@alert": "console.log" + } + } +}).code; +// returns: 'console.log("hello");' +``` + +Otherwise it would be replaced as string literal: +```javascript +UglifyJS.minify("alert('hello');", { + compress: { + global_defs: { + "alert": "console.log" + } + } +}).code; +// returns: '"console.log"("hello");' +``` + +### Using native Uglify AST with `minify()` +```javascript +// example: parse only, produce native Uglify AST + +var result = UglifyJS.minify(code, { + parse: {}, + compress: false, + mangle: false, + output: { + ast: true, + code: false // optional - faster if false + } +}); + +// result.ast contains native Uglify AST +``` +```javascript +// example: accept native Uglify AST input and then compress and mangle +// to produce both code and native AST. + +var result = UglifyJS.minify(ast, { + compress: {}, + mangle: {}, + output: { + ast: true, + code: true // optional - faster if false + } +}); + +// result.ast contains native Uglify AST +// result.code contains the minified code in string form. +``` + +### Working with Uglify AST + +Transversal and transformation of the native AST can be performed through +[`TreeWalker`](https://github.com/mishoo/UglifyJS/blob/master/lib/ast.js) and +[`TreeTransformer`](https://github.com/mishoo/UglifyJS/blob/master/lib/transform.js) +respectively. + +### ESTree / SpiderMonkey AST + +UglifyJS has its own abstract syntax tree format; for +[practical reasons](http://lisperator.net/blog/uglifyjs-why-not-switching-to-spidermonkey-ast/) +we can't easily change to using the SpiderMonkey AST internally. However, +UglifyJS now has a converter which can import a SpiderMonkey AST. + +For example [Acorn][acorn] is a super-fast parser that produces a +SpiderMonkey AST. It has a small CLI utility that parses one file and dumps +the AST in JSON on the standard output. To use UglifyJS to mangle and +compress that: + + acorn file.js | uglifyjs -p spidermonkey -m -c + +The `-p spidermonkey` option tells UglifyJS that all input files are not +JavaScript, but JS code described in SpiderMonkey AST in JSON. Therefore we +don't use our own parser in this case, but just transform that AST into our +internal AST. + +### Use Acorn for parsing + +More for fun, I added the `-p acorn` option which will use Acorn to do all +the parsing. If you pass this option, UglifyJS will `require("acorn")`. + +Acorn is really fast (e.g. 250ms instead of 380ms on some 650K code), but +converting the SpiderMonkey tree that Acorn produces takes another 150ms so +in total it's a bit more than just using UglifyJS's own parser. + +[acorn]: https://github.com/ternjs/acorn +[sm-spec]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k + +### Uglify Fast Minify Mode + +It's not well known, but whitespace removal and symbol mangling accounts +for 95% of the size reduction in minified code for most JavaScript - not +elaborate code transforms. One can simply disable `compress` to speed up +Uglify builds by 3 to 5 times. + +| d3.js | minify size | gzip size | minify time (seconds) | +| --- | ---: | ---: | ---: | +| original | 511,371 | 119,932 | - | +| uglify-js@3.13.0 mangle=false, compress=false | 363,988 | 95,695 | 0.56 | +| uglify-js@3.13.0 mangle=true, compress=false | 253,305 | 81,281 | 0.99 | +| uglify-js@3.13.0 mangle=true, compress=true | 244,436 | 79,854 | 5.30 | + +To enable fast minify mode from the CLI use: +``` +uglifyjs file.js -m +``` +To enable fast minify mode with the API use: +```javascript +UglifyJS.minify(code, { compress: false, mangle: true }); +``` + +### Source maps and debugging + +Various `compress` transforms that simplify, rearrange, inline and remove code +are known to have an adverse effect on debugging with source maps. This is +expected as code is optimized and mappings are often simply not possible as +some code no longer exists. For highest fidelity in source map debugging +disable the Uglify `compress` option and just use `mangle`. + +### Compiler assumptions + +To allow for better optimizations, the compiler makes various assumptions: + +- The code does not rely on preserving its runtime performance characteristics. + Typically uglified code will run faster due to less instructions and easier + inlining, but may be slower on rare occasions for a specific platform, e.g. + see [`reduce_funcs`](#compress-options). +- `.toString()` and `.valueOf()` don't have side effects, and for built-in + objects they have not been overridden. +- `undefined`, `NaN` and `Infinity` have not been externally redefined. +- `arguments.callee`, `arguments.caller` and `Function.prototype.caller` are not used. +- The code doesn't expect the contents of `Function.prototype.toString()` or + `Error.prototype.stack` to be anything in particular. +- Getting and setting properties on a plain object does not cause other side effects + (using `.watch()` or `Proxy`). +- Object properties can be added, removed and modified (not prevented with + `Object.defineProperty()`, `Object.defineProperties()`, `Object.freeze()`, + `Object.preventExtensions()` or `Object.seal()`). +- If array destructuring is present, index-like properties in `Array.prototype` + have not been overridden: + ```javascript + Object.prototype[0] = 42; + var [ a ] = []; + var { 0: b } = {}; + // 42 undefined + console.log([][0], a); + // 42 42 + console.log({}[0], b); + ``` +- Earlier versions of JavaScript will throw `SyntaxError` with the following: + ```javascript + ({ + p: 42, + get p() {}, + }); + // SyntaxError: Object literal may not have data and accessor property with + // the same name + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Iteration order of keys over an object which contains spread syntax in later + versions of Chrome and Node.js may be altered. +- When `toplevel` is enabled, UglifyJS effectively assumes input code is wrapped + within `function(){ ... }`, thus forbids aliasing of declared global variables: + ```javascript + A = "FAIL"; + var B = "FAIL"; + // can be `global`, `self`, `window` etc. + var top = function() { + return this; + }(); + // "PASS" + top.A = "PASS"; + console.log(A); + // "FAIL" after compress and/or mangle + top.B = "PASS"; + console.log(B); + ``` +- Use of `arguments` alongside destructuring as function parameters, e.g. + `function({}, arguments) {}` will result in `SyntaxError` in earlier versions + of Chrome and Node.js - UglifyJS may modify the input which in turn may + suppress those errors. +- Earlier versions of Chrome and Node.js will throw `ReferenceError` with the + following: + ```javascript + var a; + try { + throw 42; + } catch ({ + [a]: b, + // ReferenceError: a is not defined + }) { + let a; + } + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of JavaScript will throw `SyntaxError` with the following: + ```javascript + a => { + let a; + }; + // SyntaxError: Identifier 'a' has already been declared + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of JavaScript will throw `SyntaxError` with the following: + ```javascript + try { + // ... + } catch ({ message: a }) { + var a; + } + // SyntaxError: Identifier 'a' has already been declared + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some versions of Chrome and Node.js will throw `ReferenceError` with the + following: + ```javascript + console.log(((a, b = function() { + return a; + // ReferenceError: a is not defined + }()) => b)()); + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some arithmetic operations with `BigInt` may throw `TypeError`: + ```javascript + 1n + 1; + // TypeError: can't convert BigInt to number + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some versions of JavaScript will throw `SyntaxError` with the + following: + ```javascript + console.log(String.raw`\uFo`); + // SyntaxError: Invalid Unicode escape sequence + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some versions of JavaScript will throw `SyntaxError` with the + following: + ```javascript + try {} catch (e) { + for (var e of []); + } + // SyntaxError: Identifier 'e' has already been declared + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some versions of Chrome and Node.js will give incorrect results with the + following: + ```javascript + console.log({ + ...{ + set 42(v) {}, + 42: "PASS", + }, + }); + // Expected: { '42': 'PASS' } + // Actual: { '42': undefined } + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of JavaScript will throw `SyntaxError` with the following: + ```javascript + var await; + class A { + static p = await; + } + // SyntaxError: Unexpected reserved word + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of JavaScript will throw `SyntaxError` with the following: + ```javascript + var async; + for (async of []); + // SyntaxError: The left-hand side of a for-of loop may not be 'async'. + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some versions of Chrome and Node.js will give incorrect results with the + following: + ```javascript + console.log({ + ...console, + get 42() { + return "FAIL"; + }, + [42]: "PASS", + }[42], { + ...console, + get 42() { + return "FAIL"; + }, + 42: "PASS", + }[42]); + // Expected: "PASS PASS" + // Actual: "PASS FAIL" + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Earlier versions of JavaScript will throw `TypeError` with the following: + ```javascript + (function() { + { + const a = "foo"; + } + { + const a = "bar"; + } + })(); + // TypeError: const 'a' has already been declared + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of Chrome and Node.js will give incorrect results with the + following: + ```javascript + try { + class A { + static 42; + static get 42() {} + } + console.log("PASS"); + } catch (e) { + console.log("FAIL"); + } + // Expected: "PASS" + // Actual: "FAIL" + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Some versions of Chrome and Node.js will give incorrect results with the + following: + ```javascript + (async function(a) { + (function() { + var b = await => console.log("PASS"); + b(); + })(); + })().catch(console.error); + // Expected: "PASS" + // Actual: SyntaxError: Unexpected reserved word + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of Chrome and Node.js will give incorrect results with the + following: + ```javascript + try { + f(); + function f() { + throw 42; + } + } catch (e) { + console.log(typeof f, e); + } + // Expected: "function 42" + // Actual: "undefined 42" + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Later versions of JavaScript will throw `SyntaxError` with the following: + ```javascript + "use strict"; + console.log(function f() { + return f = "PASS"; + }()); + // Expected: "PASS" + // Actual: TypeError: invalid assignment to const 'f' + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Adobe ExtendScript will give incorrect results with the following: + ```javascript + alert(true ? "PASS" : false ? "FAIL" : null); + // Expected: "PASS" + // Actual: "FAIL" + ``` + UglifyJS may modify the input which in turn may suppress those errors. +- Adobe ExtendScript will give incorrect results with the following: + ```javascript + alert(42 ? null ? "FAIL" : "PASS" : "FAIL"); + // Expected: "PASS" + // Actual: SyntaxError: Expected: : + ``` + UglifyJS may modify the input which in turn may suppress those errors. diff --git a/.pnpm-store/v11/files/45/4e4459fe6121cb6a92a98d090614797b726e89a364bdffab5572ff619a31a7bfe2341e6ccf95e203f93e9a1c6345c9962d800646c8e248389958e0e2a98d6e b/.pnpm-store/v11/files/45/4e4459fe6121cb6a92a98d090614797b726e89a364bdffab5572ff619a31a7bfe2341e6ccf95e203f93e9a1c6345c9962d800646c8e248389958e0e2a98d6e new file mode 100644 index 00000000..d68c8b71 --- /dev/null +++ b/.pnpm-store/v11/files/45/4e4459fe6121cb6a92a98d090614797b726e89a364bdffab5572ff619a31a7bfe2341e6ccf95e203f93e9a1c6345c9962d800646c8e248389958e0e2a98d6e @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/hasown +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/.pnpm-store/v11/files/45/5d3c2ce4d160f892251d510720d4ca404898fc7f2d406151e46fffc5ec5eab353b6ffd94fc015f4dd632fa6e876e892fca3ad0b682629c1772892671dc447d b/.pnpm-store/v11/files/45/5d3c2ce4d160f892251d510720d4ca404898fc7f2d406151e46fffc5ec5eab353b6ffd94fc015f4dd632fa6e876e892fca3ad0b682629c1772892671dc447d new file mode 100644 index 00000000..e087806c --- /dev/null +++ b/.pnpm-store/v11/files/45/5d3c2ce4d160f892251d510720d4ca404898fc7f2d406151e46fffc5ec5eab353b6ffd94fc015f4dd632fa6e876e892fca3ad0b682629c1772892671dc447d @@ -0,0 +1,178 @@ +/* eslint-disable new-cap */ +import Visitor from './visitor'; + +export function print(ast) { + return new PrintVisitor().accept(ast); +} + +export function PrintVisitor() { + this.padding = 0; +} + +PrintVisitor.prototype = new Visitor(); + +PrintVisitor.prototype.pad = function(string) { + let out = ''; + + for (let i = 0, l = this.padding; i < l; i++) { + out += ' '; + } + + out += string + '\n'; + return out; +}; + +PrintVisitor.prototype.Program = function(program) { + let out = '', + body = program.body, + i, + l; + + if (program.blockParams) { + let blockParams = 'BLOCK PARAMS: ['; + for (i = 0, l = program.blockParams.length; i < l; i++) { + blockParams += ' ' + program.blockParams[i]; + } + blockParams += ' ]'; + out += this.pad(blockParams); + } + + for (i = 0, l = body.length; i < l; i++) { + out += this.accept(body[i]); + } + + this.padding--; + + return out; +}; + +PrintVisitor.prototype.MustacheStatement = function(mustache) { + return this.pad('{{ ' + this.SubExpression(mustache) + ' }}'); +}; +PrintVisitor.prototype.Decorator = function(mustache) { + return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}'); +}; + +PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function( + block +) { + let out = ''; + + out += this.pad( + (block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:' + ); + this.padding++; + out += this.pad(this.SubExpression(block)); + if (block.program) { + out += this.pad('PROGRAM:'); + this.padding++; + out += this.accept(block.program); + this.padding--; + } + if (block.inverse) { + if (block.program) { + this.padding++; + } + out += this.pad('{{^}}'); + this.padding++; + out += this.accept(block.inverse); + this.padding--; + if (block.program) { + this.padding--; + } + } + this.padding--; + + return out; +}; + +PrintVisitor.prototype.PartialStatement = function(partial) { + let content = 'PARTIAL:' + partial.name.original; + if (partial.params[0]) { + content += ' ' + this.accept(partial.params[0]); + } + if (partial.hash) { + content += ' ' + this.accept(partial.hash); + } + return this.pad('{{> ' + content + ' }}'); +}; +PrintVisitor.prototype.PartialBlockStatement = function(partial) { + let content = 'PARTIAL BLOCK:' + partial.name.original; + if (partial.params[0]) { + content += ' ' + this.accept(partial.params[0]); + } + if (partial.hash) { + content += ' ' + this.accept(partial.hash); + } + + content += ' ' + this.pad('PROGRAM:'); + this.padding++; + content += this.accept(partial.program); + this.padding--; + + return this.pad('{{> ' + content + ' }}'); +}; + +PrintVisitor.prototype.ContentStatement = function(content) { + return this.pad("CONTENT[ '" + content.value + "' ]"); +}; + +PrintVisitor.prototype.CommentStatement = function(comment) { + return this.pad("{{! '" + comment.value + "' }}"); +}; + +PrintVisitor.prototype.SubExpression = function(sexpr) { + let params = sexpr.params, + paramStrings = [], + hash; + + for (let i = 0, l = params.length; i < l; i++) { + paramStrings.push(this.accept(params[i])); + } + + params = '[' + paramStrings.join(', ') + ']'; + + hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : ''; + + return this.accept(sexpr.path) + ' ' + params + hash; +}; + +PrintVisitor.prototype.PathExpression = function(id) { + let path = id.parts.join('/'); + return (id.data ? '@' : '') + 'PATH:' + path; +}; + +PrintVisitor.prototype.StringLiteral = function(string) { + return '"' + string.value + '"'; +}; + +PrintVisitor.prototype.NumberLiteral = function(number) { + return 'NUMBER{' + number.value + '}'; +}; + +PrintVisitor.prototype.BooleanLiteral = function(bool) { + return 'BOOLEAN{' + bool.value + '}'; +}; + +PrintVisitor.prototype.UndefinedLiteral = function() { + return 'UNDEFINED'; +}; + +PrintVisitor.prototype.NullLiteral = function() { + return 'NULL'; +}; + +PrintVisitor.prototype.Hash = function(hash) { + let pairs = hash.pairs, + joinedPairs = []; + + for (let i = 0, l = pairs.length; i < l; i++) { + joinedPairs.push(this.accept(pairs[i])); + } + + return 'HASH{' + joinedPairs.join(', ') + '}'; +}; +PrintVisitor.prototype.HashPair = function(pair) { + return pair.key + '=' + this.accept(pair.value); +}; +/* eslint-enable new-cap */ diff --git a/.pnpm-store/v11/files/45/79161e8c973eb4ff37b573e9fb882546338c4598f51f6cf022e09d0819431f7051c497c8a0af579c2843ffee2e4f79583a701b9db25f45a00f6769c1b5efd4 b/.pnpm-store/v11/files/45/79161e8c973eb4ff37b573e9fb882546338c4598f51f6cf022e09d0819431f7051c497c8a0af579c2843ffee2e4f79583a701b9db25f45a00f6769c1b5efd4 new file mode 100644 index 00000000..24ca3f49 --- /dev/null +++ b/.pnpm-store/v11/files/45/79161e8c973eb4ff37b573e9fb882546338c4598f51f6cf022e09d0819431f7051c497c8a0af579c2843ffee2e4f79583a701b9db25f45a00f6769c1b5efd4 @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`some`]{@link module:Collections.some} but runs a maximum of `limit` async operations at a time. + * + * @name someLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.some]{@link module:Collections.some} + * @alias anyLimit + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - An async truth test to apply to each item + * in the collections in parallel. + * The iteratee should complete with a boolean `result` value. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the iteratee functions have finished. + * Result will be either `true` or `false` depending on the values of the async + * tests. Invoked with (err, result). + */ +exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(Boolean, _identity2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/45/973120602498f72dd109e3cf71f5692b985f85262b64ee0b053cfaa82c02fe81a4b55d387da98f33bda498449584f7571335bf185d49ec34551986f43ba8e5 b/.pnpm-store/v11/files/45/973120602498f72dd109e3cf71f5692b985f85262b64ee0b053cfaa82c02fe81a4b55d387da98f33bda498449584f7571335bf185d49ec34551986f43ba8e5 new file mode 100644 index 00000000..0581c46a --- /dev/null +++ b/.pnpm-store/v11/files/45/973120602498f72dd109e3cf71f5692b985f85262b64ee0b053cfaa82c02fe81a4b55d387da98f33bda498449584f7571335bf185d49ec34551986f43ba8e5 @@ -0,0 +1,65 @@ +{ + "name": "mixin-deep", + "description": "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.", + "version": "1.3.2", + "homepage": "https://github.com/jonschlinkert/mixin-deep", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/mixin-deep", + "bugs": { + "url": "https://github.com/jonschlinkert/mixin-deep/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "devDependencies": { + "gulp-format-md": "^1.0.0", + "mocha": "^3.5.3", + "should": "^13.1.3" + }, + "keywords": [ + "deep", + "extend", + "key", + "keys", + "merge", + "mixin", + "object", + "prop", + "properties", + "util", + "values" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "defaults-deep", + "extend-shallow", + "merge-deep", + "mixin-object" + ] + }, + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/45/9968ea598cb72b583e6c6ed938b2ff89fd9936197f23ea1bcda9f6115717acd0549acb430ffd42c046a1e09e1b84dbb76255ec78c1dcf3fa8117b08a5c0ee5 b/.pnpm-store/v11/files/45/9968ea598cb72b583e6c6ed938b2ff89fd9936197f23ea1bcda9f6115717acd0549acb430ffd42c046a1e09e1b84dbb76255ec78c1dcf3fa8117b08a5c0ee5 new file mode 100644 index 00000000..a0bb5a9c --- /dev/null +++ b/.pnpm-store/v11/files/45/9968ea598cb72b583e6c6ed938b2ff89fd9936197f23ea1bcda9f6115717acd0549acb430ffd42c046a1e09e1b84dbb76255ec78c1dcf3fa8117b08a5c0ee5 @@ -0,0 +1,30 @@ +var eq = require('./eq'), + isArrayLike = require('./isArrayLike'), + isIndex = require('./_isIndex'), + isObject = require('./isObject'); + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +module.exports = isIterateeCall; diff --git a/.pnpm-store/v11/files/45/9bcae8e7dcb206183f1a7e64018464b869e8113f3f257547e59c43c93a418fef2538d1e2e5e24050c8c7ef0cab6df08860ec34695dbe784e550b65dabe33d0 b/.pnpm-store/v11/files/45/9bcae8e7dcb206183f1a7e64018464b869e8113f3f257547e59c43c93a418fef2538d1e2e5e24050c8c7ef0cab6df08860ec34695dbe784e550b65dabe33d0 new file mode 100644 index 00000000..a2b5fa04 --- /dev/null +++ b/.pnpm-store/v11/files/45/9bcae8e7dcb206183f1a7e64018464b869e8113f3f257547e59c43c93a418fef2538d1e2e5e24050c8c7ef0cab6df08860ec34695dbe784e550b65dabe33d0 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/45/b5075c04befd78f909e1d2b6b0d144561c3911888d0c60dda4700becf0d3da3b22ffa967bb09f51a1255e72b218a15fbcf0b5e22b1fa3909ea5f60912ad372 b/.pnpm-store/v11/files/45/b5075c04befd78f909e1d2b6b0d144561c3911888d0c60dda4700becf0d3da3b22ffa967bb09f51a1255e72b218a15fbcf0b5e22b1fa3909ea5f60912ad372 new file mode 100644 index 00000000..496281ec --- /dev/null +++ b/.pnpm-store/v11/files/45/b5075c04befd78f909e1d2b6b0d144561c3911888d0c60dda4700becf0d3da3b22ffa967bb09f51a1255e72b218a15fbcf0b5e22b1fa3909ea5f60912ad372 @@ -0,0 +1,14 @@ +/** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ +function baseProperty(key) { + return function(object) { + return object == null ? undefined : object[key]; + }; +} + +module.exports = baseProperty; diff --git a/.pnpm-store/v11/files/45/e24aafeb77b16a38656989aad43f86d977eb7ac39853a511bf62d95f5f287bae9b6fbbc24fc9241ccf8e0641e8e9a7d87993d74249dde6d5c9b1f030933dd4 b/.pnpm-store/v11/files/45/e24aafeb77b16a38656989aad43f86d977eb7ac39853a511bf62d95f5f287bae9b6fbbc24fc9241ccf8e0641e8e9a7d87993d74249dde6d5c9b1f030933dd4 new file mode 100644 index 00000000..016bb6e7 --- /dev/null +++ b/.pnpm-store/v11/files/45/e24aafeb77b16a38656989aad43f86d977eb7ac39853a511bf62d95f5f287bae9b6fbbc24fc9241ccf8e0641e8e9a7d87993d74249dde6d5c9b1f030933dd4 @@ -0,0 +1,30 @@ +sudo: false + +language: node_js + +node_js: + - "0.8" + - "0.10" + - "0.12" + - "1" + - "2" + - "3" + - "4" + - "5" + - "6" + - "7" + - "8" + +install: + - PATH="`npm bin`:`npm bin -g`:$PATH" + # Node 0.8 comes with a too obsolete npm + - if [[ "`node --version`" =~ ^v0\.8\. ]]; then npm install -g npm@1.4.28 ; fi + # Install dependencies and build + - npm install + +script: + # Output useful info for debugging + - node --version + - npm --version + # Run tests + - npm test diff --git a/.pnpm-store/v11/files/45/f3ef6e1dcd774d71316666fbee9f6e33bc0ed2c2313bc26e2f77da24fca8a718ce79847ce9304515f91e7ea83b36dd848e93a68e349007a2a2f76e8fbab117 b/.pnpm-store/v11/files/45/f3ef6e1dcd774d71316666fbee9f6e33bc0ed2c2313bc26e2f77da24fca8a718ce79847ce9304515f91e7ea83b36dd848e93a68e349007a2a2f76e8fbab117 new file mode 100644 index 00000000..e08f14be --- /dev/null +++ b/.pnpm-store/v11/files/45/f3ef6e1dcd774d71316666fbee9f6e33bc0ed2c2313bc26e2f77da24fca8a718ce79847ce9304515f91e7ea83b36dd848e93a68e349007a2a2f76e8fbab117 @@ -0,0 +1,118 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const path = require("path"); +const cp = require("child_process"); +const fs = require("fs"); +const chalk = require("chalk"); +const su = require("suman-utils"); +const prepend_transform_1 = require("prepend-transform"); +const uuid = require("uuid"); +const _suman = global.__suman = (global.__suman || {}); +const runner_utils_1 = require("../runner-utils"); +exports.makeAddToTranspileQueue = function (f, transpileQueue, tableRows, ganttHash, projectRoot) { + const { sumanOpts } = _suman; + const inheritTransformStdio = sumanOpts.inherit_all_stdio || + sumanOpts.inherit_transform_stdio || process.env.SUMAN_INHERIT_STDIO; + return function (fileShortAndFull) { + const uuidV4 = String(uuid.v4()); + const file = fileShortAndFull[0]; + const shortFile = fileShortAndFull[1]; + const filePathFromProjectRoot = fileShortAndFull[2]; + let basename = file.length > 28 ? ' ' + String(file).substring(Math.max(0, file.length - 28)) + ' ' : file; + const m = String(basename).match(/\//g); + if (m && m.length > 1) { + const arr = String(basename).split(''); + let i = 0; + while (arr[i] !== '/') { + arr.shift(); + } + basename = arr.join(''); + } + tableRows[String(shortFile)] = { + actualExitCode: null, + shortFilePath: shortFile, + tableData: null, + defaultTableData: { + SUITES_DESIGNATOR: basename + } + }; + const gd = ganttHash[uuidV4] = { + uuid: uuidV4, + fullFilePath: String(file), + shortFilePath: String(shortFile), + filePathFromProjectRoot: String(filePathFromProjectRoot), + }; + const tr = (sumanOpts.no_transpile !== true) && runner_utils_1.findPathOfTransformDotSh(file); + if (tr) { + _suman.log.info(chalk.bgWhite.underline('Suman has found a @transform.sh file => '), chalk.bold(tr)); + transpileQueue.push(function (cb) { + su.makePathExecutable(tr, function (err) { + if (err) { + return cb(err); + } + gd.transformStartDate = Date.now(); + let k = cp.spawn(tr, [], { + cwd: projectRoot, + env: Object.assign({}, process.env, { + SUMAN_TEST_PATHS: JSON.stringify([file]), + SUMAN_CHILD_TEST_PATH: file + }) + }); + k.once('error', cb); + k.stderr.setEncoding('utf8'); + k.stdout.setEncoding('utf8'); + const ln = String(_suman.projectRoot).length; + if (false) { + let onError = function (e) { + _suman.log.error('\n', su.getCleanErrorString(e), '\n'); + }; + const temp = su.removePath(file, _suman.projectRoot); + const onlyFile = String(temp).replace(/\//g, '.'); + const logfile = path.resolve(f + '/' + onlyFile + '.log'); + let fileStrm = fs.createWriteStream(logfile); + k.stderr.pipe(fileStrm).once('error', onError); + k.stdout.pipe(fileStrm).once('error', onError); + } + if (inheritTransformStdio) { + let onError = function (e) { + _suman.log.error('\n', su.getCleanErrorString(e), '\n'); + }; + let stderrPrepend = ` [${chalk.red('transform process stderr:')} ${chalk.red.bold(String(file.slice(ln)))}] `; + k.stderr.pipe(prepend_transform_1.pt(stderrPrepend, { omitWhitespace: true })).once('error', onError).pipe(process.stderr); + let stdoutPrepend = ` [${chalk.yellow('transform process stdout:')} ${chalk.gray.bold(String(file.slice(ln)))}] `; + k.stdout.pipe(prepend_transform_1.pt(stdoutPrepend)).once('error', onError).pipe(process.stdout); + } + let stdout = ''; + k.stdout.on('data', function (data) { + stdout += data; + }); + let stderr = ''; + k.stderr.on('data', function (data) { + stderr += data; + }); + k.once('exit', function (code) { + gd.transformEndDate = Date.now(); + if (code > 0) { + cb(new Error(`the @transform.sh process, for file ${file},\nexitted with non-zero exit code. :( + \n To see the stderr, use "--inherit-stdio" or "--inherit-all-stdio".`)); + } + else { + cb(null, file, shortFile, stdout, stderr, gd); + } + }); + }); + }); + } + else { + gd.transformStartDate = gd.transformEndDate = null; + gd.wasTransformed = false; + transpileQueue.unshift(function (cb) { + setImmediate(function () { + cb(null, file, shortFile, '', '', gd); + }); + }); + } + }; +}; diff --git a/.pnpm-store/v11/files/45/fcb8b3c611f8559185316df746c66b8420ac20c31a0c39a7f574fe61f4b00411ae45e89e0f047788cb5cd1b7d07c57df1e153ccb0a96bb2c584d147550d6b2 b/.pnpm-store/v11/files/45/fcb8b3c611f8559185316df746c66b8420ac20c31a0c39a7f574fe61f4b00411ae45e89e0f047788cb5cd1b7d07c57df1e153ccb0a96bb2c584d147550d6b2 new file mode 100644 index 00000000..5a76b414 --- /dev/null +++ b/.pnpm-store/v11/files/45/fcb8b3c611f8559185316df746c66b8420ac20c31a0c39a7f574fe61f4b00411ae45e89e0f047788cb5cd1b7d07c57df1e153ccb0a96bb2c584d147550d6b2 @@ -0,0 +1,3 @@ +# core-util-is + +The `util.is*` functions introduced in Node v0.12. diff --git a/.pnpm-store/v11/files/46/40a39158578dcc8c204e03b6d9ff7dd92cfe77bf2f2ebc612023f8cf5feff64f8a9b2000dac2b6ef658d82c737f742a39a20cc1d7d5b0c510f13e21037d367 b/.pnpm-store/v11/files/46/40a39158578dcc8c204e03b6d9ff7dd92cfe77bf2f2ebc612023f8cf5feff64f8a9b2000dac2b6ef658d82c737f742a39a20cc1d7d5b0c510f13e21037d367 new file mode 100644 index 00000000..206daab5 --- /dev/null +++ b/.pnpm-store/v11/files/46/40a39158578dcc8c204e03b6d9ff7dd92cfe77bf2f2ebc612023f8cf5feff64f8a9b2000dac2b6ef658d82c737f742a39a20cc1d7d5b0c510f13e21037d367 @@ -0,0 +1,18 @@ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + include: [ + require('./json') + ] +}); diff --git a/.pnpm-store/v11/files/46/54fb5ebac30ec435a5bfc1c7af44f7ba077ece4820ccd9438a82155c3e400a09b277eb459d84d197697a8fc72407deedb10ee0a9309ef36bcfff405e117341 b/.pnpm-store/v11/files/46/54fb5ebac30ec435a5bfc1c7af44f7ba077ece4820ccd9438a82155c3e400a09b277eb459d84d197697a8fc72407deedb10ee0a9309ef36bcfff405e117341 new file mode 100644 index 00000000..b2b83326 --- /dev/null +++ b/.pnpm-store/v11/files/46/54fb5ebac30ec435a5bfc1c7af44f7ba077ece4820ccd9438a82155c3e400a09b277eb459d84d197697a8fc72407deedb10ee0a9309ef36bcfff405e117341 @@ -0,0 +1,16 @@ +# [2.0.0](https://github.com/faeldt/base64id/compare/1.0.0...2.0.0) (2019-05-27) + + +### Code Refactoring + +* **buffer:** replace deprecated Buffer constructor usage ([#11](https://github.com/faeldt/base64id/issues/11)) ([ccfba54](https://github.com/faeldt/base64id/commit/ccfba54)) + + +### BREAKING CHANGES + +* **buffer:** drop support for Node.js ≤ 4.4.x and 5.0.0 - 5.9.x + +See: https://nodejs.org/en/docs/guides/buffer-constructor-deprecation/ + + + diff --git a/.pnpm-store/v11/files/46/7fad8d78981004ef25de7c27b1f444d3309a6c0f9d1895848fdfb164bf69cb24cce21f0dfb6b5806d181283aab405b9718520735882a9f65968a4f0323a678 b/.pnpm-store/v11/files/46/7fad8d78981004ef25de7c27b1f444d3309a6c0f9d1895848fdfb164bf69cb24cce21f0dfb6b5806d181283aab405b9718520735882a9f65968a4f0323a678 new file mode 100644 index 00000000..0ddd09ca --- /dev/null +++ b/.pnpm-store/v11/files/46/7fad8d78981004ef25de7c27b1f444d3309a6c0f9d1895848fdfb164bf69cb24cce21f0dfb6b5806d181283aab405b9718520735882a9f65968a4f0323a678 @@ -0,0 +1 @@ +{"name":"cli-table","description":"Pretty unicode tables for the CLI","version":"0.3.11","author":"Guillermo Rauch ","contributors":["Sonny Michaud (http://github.com/sonnym)"],"repository":{"type":"git","url":"https://github.com/Automattic/cli-table.git"},"keywords":["cli","colors","table"],"dependencies":{"colors":"1.0.3"},"devDependencies":{"expresso":"~0.9","should":"~0.6"},"main":"lib","files":["lib"],"scripts":{"test":"make test"},"engines":{"node":">= 0.2.0"}} \ No newline at end of file diff --git a/.pnpm-store/v11/files/46/818f1d4b0c1bfe824145b6ff22682f47035e1f3fa326ab17d0de3249bf63937a9172776067b2c25f504038aa385fc8eb79791fc3a1fd9e6bec7ae91cccdb72 b/.pnpm-store/v11/files/46/818f1d4b0c1bfe824145b6ff22682f47035e1f3fa326ab17d0de3249bf63937a9172776067b2c25f504038aa385fc8eb79791fc3a1fd9e6bec7ae91cccdb72 new file mode 100644 index 00000000..7eb41d4d --- /dev/null +++ b/.pnpm-store/v11/files/46/818f1d4b0c1bfe824145b6ff22682f47035e1f3fa326ab17d0de3249bf63937a9172776067b2c25f504038aa385fc8eb79791fc3a1fd9e6bec7ae91cccdb72 @@ -0,0 +1,108 @@ +

+ + ChaiJS deep-eql + +

+ +

+ Improved deep equality testing for [node](http://nodejs.org) and the browser. +

+ +

+ + license:mit + + tag:? + + build:? + + coverage:? + + code quality:? + + dependencies:? + + devDependencies:? + +
+ + Selenium Test Status + +
+ + Join the Slack chat + + + Join the Gitter chat + +

+ +## What is Deep-Eql? + +Deep Eql is a module which you can use to determine if two objects are "deeply" equal - that is, rather than having referential equality (`a === b`), this module checks an object's keys recursively, until it finds primitives to check for referential equality. For more on equality in JavaScript, read [the comparison operators article on mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators). + +As an example, take the following: + +```js +1 === 1 // These are primitives, they hold the same reference - they are strictly equal +1 == '1' // These are two different primitives, through type coercion they hold the same value - they are loosely equal +{ a: 1 } !== { a: 1 } // These are two different objects, they hold different references and so are not strictly equal - even though they hold the same values inside +{ a: 1 } != { a: 1 } // They have the same type, meaning loose equality performs the same check as strict equality - they are still not equal. + +var deepEql = require("deep-eql"); +deepEql({ a: 1 }, { a: 1 }) === true // deepEql can determine that they share the same keys and those keys share the same values, therefore they are deeply equal! +``` + +## Installation + +### Node.js + +`deep-eql` is available on [npm](http://npmjs.org). + + $ npm install deep-eql + +## Usage + +The primary export of `deep-eql` is function that can be given two objects to compare. It will always return a boolean which can be used to determine if two objects are deeply equal. + +### Rules + +- Strict equality for non-traversable nodes according to [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is). + - `eql(NaN, NaN).should.be.true;` + - `eql(-0, +0).should.be.false;` +- All own and inherited enumerable properties are considered: + - `eql(Object.create({ foo: { a: 1 } }), Object.create({ foo: { a: 1 } })).should.be.true;` + - `eql(Object.create({ foo: { a: 1 } }), Object.create({ foo: { a: 2 } })).should.be.false;` +- Arguments are not Arrays: + - `eql([], arguments).should.be.false;` + - `eql([], Array.prototype.slice.call(arguments)).should.be.true;` diff --git a/.pnpm-store/v11/files/46/90a54d210a87e460df27197f057bf0db686ad044a1e863f581719f5705d397cede395c91e8d456b83356791039ece4ad848141550a6414bc41fab08f79116a b/.pnpm-store/v11/files/46/90a54d210a87e460df27197f057bf0db686ad044a1e863f581719f5705d397cede395c91e8d456b83356791039ece4ad848141550a6414bc41fab08f79116a new file mode 100644 index 00000000..b97cdd93 --- /dev/null +++ b/.pnpm-store/v11/files/46/90a54d210a87e460df27197f057bf0db686ad044a1e863f581719f5705d397cede395c91e8d456b83356791039ece4ad848141550a6414bc41fab08f79116a @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toLength', require('../toLength'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/46/c219326282739bfeff441b8b1eb6529619c3cc06390ab727581605dc985e5ae14212e0b249705d1f3d606b24282848f4347a9a4206a7b98e6fe85bffda2096 b/.pnpm-store/v11/files/46/c219326282739bfeff441b8b1eb6529619c3cc06390ab727581605dc985e5ae14212e0b249705d1f3d606b24282848f4347a9a4206a7b98e6fe85bffda2096 new file mode 100644 index 00000000..f7324426 --- /dev/null +++ b/.pnpm-store/v11/files/46/c219326282739bfeff441b8b1eb6529619c3cc06390ab727581605dc985e5ae14212e0b249705d1f3d606b24282848f4347a9a4206a7b98e6fe85bffda2096 @@ -0,0 +1,37 @@ +var baseSlice = require('./_baseSlice'), + isIterateeCall = require('./_isIterateeCall'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; + } + else { + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); +} + +module.exports = slice; diff --git a/.pnpm-store/v11/files/46/df3acbb84b895baa2c5c360155b886d02e7207d10de200dd14324a7ea1d9ab678fbfa92e40ce0db84dfa301ac4ab192ca0a95040ba9cbbc47c46e768db78ed b/.pnpm-store/v11/files/46/df3acbb84b895baa2c5c360155b886d02e7207d10de200dd14324a7ea1d9ab678fbfa92e40ce0db84dfa301ac4ab192ca0a95040ba9cbbc47c46e768db78ed new file mode 100644 index 00000000..8f39f8a2 --- /dev/null +++ b/.pnpm-store/v11/files/46/df3acbb84b895baa2c5c360155b886d02e7207d10de200dd14324a7ea1d9ab678fbfa92e40ce0db84dfa301ac4ab192ca0a95040ba9cbbc47c46e768db78ed @@ -0,0 +1,27 @@ +var memoizeCapped = require('./_memoizeCapped'); + +/** Used to match property names within property paths. */ +var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + +/** Used to match backslashes in property paths. */ +var reEscapeChar = /\\(\\)?/g; + +/** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ +var stringToPath = memoizeCapped(function(string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function(match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; +}); + +module.exports = stringToPath; diff --git a/.pnpm-store/v11/files/46/e6eff64ad7a1d9947410ffa67b2cc3baf9fd23ff937712be8e8fb8bec346784f25798f4d3abc4a5f97cde4d3c2b151a8e3ecb9dc52458ddd7c06efe275507f b/.pnpm-store/v11/files/46/e6eff64ad7a1d9947410ffa67b2cc3baf9fd23ff937712be8e8fb8bec346784f25798f4d3abc4a5f97cde4d3c2b151a8e3ecb9dc52458ddd7c06efe275507f new file mode 100644 index 00000000..dc79333f --- /dev/null +++ b/.pnpm-store/v11/files/46/e6eff64ad7a1d9947410ffa67b2cc3baf9fd23ff937712be8e8fb8bec346784f25798f4d3abc4a5f97cde4d3c2b151a8e3ecb9dc52458ddd7c06efe275507f @@ -0,0 +1,9 @@ +#!/usr/bin/env node +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const main_1 = require("./main"); +process.stdin.resume() + .pipe(main_1.createParser()) + .on(main_1.stdEventName, v => { + console.log(v); +}); diff --git a/.pnpm-store/v11/files/46/eb70b36cf90b47e71bf5ebce30bbbc8778b89828fca5178fae099cd9b8d451d66bee93c53e533ee21ca0e35d968b48764ab65d1934d7ede5f9e1d0b1345a8b b/.pnpm-store/v11/files/46/eb70b36cf90b47e71bf5ebce30bbbc8778b89828fca5178fae099cd9b8d451d66bee93c53e533ee21ca0e35d968b48764ab65d1934d7ede5f9e1d0b1345a8b new file mode 100644 index 00000000..bf0d01e2 --- /dev/null +++ b/.pnpm-store/v11/files/46/eb70b36cf90b47e71bf5ebce30bbbc8778b89828fca5178fae099cd9b8d451d66bee93c53e533ee21ca0e35d968b48764ab65d1934d7ede5f9e1d0b1345a8b @@ -0,0 +1,529 @@ +'use strict'; + +/** + * Module dependencies. + */ + +var http = require('http'); +var read = require('fs').readFileSync; +var path = require('path'); +var exists = require('fs').existsSync; +var engine = require('engine.io'); +var clientVersion = require('socket.io-client/package.json').version; +var Client = require('./client'); +var Emitter = require('events').EventEmitter; +var Namespace = require('./namespace'); +var ParentNamespace = require('./parent-namespace'); +var Adapter = require('socket.io-adapter'); +var parser = require('socket.io-parser'); +var debug = require('debug')('socket.io:server'); +var url = require('url'); + +/** + * Module exports. + */ + +module.exports = Server; + +/** + * Socket.IO client source. + */ + +var clientSource = undefined; +var clientSourceMap = undefined; + +/** + * Server constructor. + * + * @param {http.Server|Number|Object} srv http server, port or options + * @param {Object} [opts] + * @api public + */ + +function Server(srv, opts){ + if (!(this instanceof Server)) return new Server(srv, opts); + if ('object' == typeof srv && srv instanceof Object && !srv.listen) { + opts = srv; + srv = null; + } + opts = opts || {}; + this.nsps = {}; + this.parentNsps = new Map(); + this.path(opts.path || '/socket.io'); + this.serveClient(false !== opts.serveClient); + this.parser = opts.parser || parser; + this.encoder = new this.parser.Encoder(); + this.adapter(opts.adapter || Adapter); + this.origins(opts.origins || '*:*'); + this.sockets = this.of('/'); + if (srv) this.attach(srv, opts); +} + +/** + * Server request verification function, that checks for allowed origins + * + * @param {http.IncomingMessage} req request + * @param {Function} fn callback to be called with the result: `fn(err, success)` + */ + +Server.prototype.checkRequest = function(req, fn) { + var origin = req.headers.origin || req.headers.referer; + + // file:// URLs produce a null Origin which can't be authorized via echo-back + if ('null' == origin || null == origin) origin = '*'; + + if (!!origin && typeof(this._origins) == 'function') return this._origins(origin, fn); + if (this._origins.indexOf('*:*') !== -1) return fn(null, true); + if (origin) { + try { + var parts = url.parse(origin); + var defaultPort = 'https:' == parts.protocol ? 443 : 80; + parts.port = parts.port != null + ? parts.port + : defaultPort; + var ok = + ~this._origins.indexOf(parts.protocol + '//' + parts.hostname + ':' + parts.port) || + ~this._origins.indexOf(parts.hostname + ':' + parts.port) || + ~this._origins.indexOf(parts.hostname + ':*') || + ~this._origins.indexOf('*:' + parts.port); + debug('origin %s is %svalid', origin, !!ok ? '' : 'not '); + return fn(null, !!ok); + } catch (ex) { + } + } + fn(null, false); +}; + +/** + * Sets/gets whether client code is being served. + * + * @param {Boolean} v whether to serve client code + * @return {Server|Boolean} self when setting or value when getting + * @api public + */ + +Server.prototype.serveClient = function(v){ + if (!arguments.length) return this._serveClient; + this._serveClient = v; + var resolvePath = function(file){ + var filepath = path.resolve(__dirname, './../../', file); + if (exists(filepath)) { + return filepath; + } + return require.resolve(file); + }; + if (v && !clientSource) { + clientSource = read(resolvePath( 'socket.io-client/dist/socket.io.js'), 'utf-8'); + try { + clientSourceMap = read(resolvePath( 'socket.io-client/dist/socket.io.js.map'), 'utf-8'); + } catch(err) { + debug('could not load sourcemap file'); + } + } + return this; +}; + +/** + * Old settings for backwards compatibility + */ + +var oldSettings = { + "transports": "transports", + "heartbeat timeout": "pingTimeout", + "heartbeat interval": "pingInterval", + "destroy buffer size": "maxHttpBufferSize" +}; + +/** + * Backwards compatibility. + * + * @api public + */ + +Server.prototype.set = function(key, val){ + if ('authorization' == key && val) { + this.use(function(socket, next) { + val(socket.request, function(err, authorized) { + if (err) return next(new Error(err)); + if (!authorized) return next(new Error('Not authorized')); + next(); + }); + }); + } else if ('origins' == key && val) { + this.origins(val); + } else if ('resource' == key) { + this.path(val); + } else if (oldSettings[key] && this.eio[oldSettings[key]]) { + this.eio[oldSettings[key]] = val; + } else { + console.error('Option %s is not valid. Please refer to the README.', key); + } + + return this; +}; + +/** + * Executes the middleware for an incoming namespace not already created on the server. + * + * @param {String} name name of incoming namespace + * @param {Object} query the query parameters + * @param {Function} fn callback + * @api private + */ + +Server.prototype.checkNamespace = function(name, query, fn){ + if (this.parentNsps.size === 0) return fn(false); + + const keysIterator = this.parentNsps.keys(); + + const run = () => { + let nextFn = keysIterator.next(); + if (nextFn.done) { + return fn(false); + } + nextFn.value(name, query, (err, allow) => { + if (err || !allow) { + return run(); + } + if (this.nsps[name]) { + // the namespace was created in the meantime + debug("dynamic namespace %s already exists", name); + return fn(this.nsps[name]); + } + const namespace = this.parentNsps.get(nextFn.value).createChild(name); + debug("dynamic namespace %s was created", name); + fn(namespace); + }); + }; + + run(); +}; + +/** + * Sets the client serving path. + * + * @param {String} v pathname + * @return {Server|String} self when setting or value when getting + * @api public + */ + +Server.prototype.path = function(v){ + if (!arguments.length) return this._path; + this._path = v.replace(/\/$/, ''); + return this; +}; + +/** + * Sets the adapter for rooms. + * + * @param {Adapter} v pathname + * @return {Server|Adapter} self when setting or value when getting + * @api public + */ + +Server.prototype.adapter = function(v){ + if (!arguments.length) return this._adapter; + this._adapter = v; + for (var i in this.nsps) { + if (this.nsps.hasOwnProperty(i)) { + this.nsps[i].initAdapter(); + } + } + return this; +}; + +/** + * Sets the allowed origins for requests. + * + * @param {String|String[]} v origins + * @return {Server|Adapter} self when setting or value when getting + * @api public + */ + +Server.prototype.origins = function(v){ + if (!arguments.length) return this._origins; + + this._origins = v; + return this; +}; + +/** + * Attaches socket.io to a server or port. + * + * @param {http.Server|Number} server or port + * @param {Object} options passed to engine.io + * @return {Server} self + * @api public + */ + +Server.prototype.listen = +Server.prototype.attach = function(srv, opts){ + if ('function' == typeof srv) { + var msg = 'You are trying to attach socket.io to an express ' + + 'request handler function. Please pass a http.Server instance.'; + throw new Error(msg); + } + + // handle a port as a string + if (Number(srv) == srv) { + srv = Number(srv); + } + + if ('number' == typeof srv) { + debug('creating http server and binding to %d', srv); + var port = srv; + srv = http.Server(function(req, res){ + res.writeHead(404); + res.end(); + }); + srv.listen(port); + + } + + // set engine.io path to `/socket.io` + opts = opts || {}; + opts.path = opts.path || this.path(); + // set origins verification + opts.allowRequest = opts.allowRequest || this.checkRequest.bind(this); + + if (this.sockets.fns.length > 0) { + this.initEngine(srv, opts); + return this; + } + + var self = this; + var connectPacket = { type: parser.CONNECT, nsp: '/' }; + this.encoder.encode(connectPacket, function (encodedPacket){ + // the CONNECT packet will be merged with Engine.IO handshake, + // to reduce the number of round trips + opts.initialPacket = encodedPacket; + + self.initEngine(srv, opts); + }); + return this; +}; + +/** + * Initialize engine + * + * @param {Object} options passed to engine.io + * @api private + */ + +Server.prototype.initEngine = function(srv, opts){ + // initialize engine + debug('creating engine.io instance with opts %j', opts); + this.eio = engine.attach(srv, opts); + + // attach static file serving + if (this._serveClient) this.attachServe(srv); + + // Export http server + this.httpServer = srv; + + // bind to engine events + this.bind(this.eio); +}; + +/** + * Attaches the static file serving. + * + * @param {Function|http.Server} srv http server + * @api private + */ + +Server.prototype.attachServe = function(srv){ + debug('attaching client serving req handler'); + var url = this._path + '/socket.io.js'; + var urlMap = this._path + '/socket.io.js.map'; + var evs = srv.listeners('request').slice(0); + var self = this; + srv.removeAllListeners('request'); + srv.on('request', function(req, res) { + if (0 === req.url.indexOf(urlMap)) { + self.serveMap(req, res); + } else if (0 === req.url.indexOf(url)) { + self.serve(req, res); + } else { + for (var i = 0; i < evs.length; i++) { + evs[i].call(srv, req, res); + } + } + }); +}; + +/** + * Handles a request serving `/socket.io.js` + * + * @param {http.Request} req + * @param {http.Response} res + * @api private + */ + +Server.prototype.serve = function(req, res){ + // Per the standard, ETags must be quoted: + // https://tools.ietf.org/html/rfc7232#section-2.3 + var expectedEtag = '"' + clientVersion + '"'; + + var etag = req.headers['if-none-match']; + if (etag) { + if (expectedEtag == etag) { + debug('serve client 304'); + res.writeHead(304); + res.end(); + return; + } + } + + debug('serve client source'); + res.setHeader("Cache-Control", "public, max-age=0"); + res.setHeader('Content-Type', 'application/javascript'); + res.setHeader('ETag', expectedEtag); + res.writeHead(200); + res.end(clientSource); +}; + +/** + * Handles a request serving `/socket.io.js.map` + * + * @param {http.Request} req + * @param {http.Response} res + * @api private + */ + +Server.prototype.serveMap = function(req, res){ + // Per the standard, ETags must be quoted: + // https://tools.ietf.org/html/rfc7232#section-2.3 + var expectedEtag = '"' + clientVersion + '"'; + + var etag = req.headers['if-none-match']; + if (etag) { + if (expectedEtag == etag) { + debug('serve client 304'); + res.writeHead(304); + res.end(); + return; + } + } + + debug('serve client sourcemap'); + res.setHeader('Content-Type', 'application/json'); + res.setHeader('ETag', expectedEtag); + res.writeHead(200); + res.end(clientSourceMap); +}; + +/** + * Binds socket.io to an engine.io instance. + * + * @param {engine.Server} engine engine.io (or compatible) server + * @return {Server} self + * @api public + */ + +Server.prototype.bind = function(engine){ + this.engine = engine; + this.engine.on('connection', this.onconnection.bind(this)); + return this; +}; + +/** + * Called with each incoming transport connection. + * + * @param {engine.Socket} conn + * @return {Server} self + * @api public + */ + +Server.prototype.onconnection = function(conn){ + debug('incoming connection with id %s', conn.id); + var client = new Client(this, conn); + client.connect('/'); + return this; +}; + +/** + * Looks up a namespace. + * + * @param {String|RegExp|Function} name nsp name + * @param {Function} [fn] optional, nsp `connection` ev handler + * @api public + */ + +Server.prototype.of = function(name, fn){ + if (typeof name === 'function' || name instanceof RegExp) { + const parentNsp = new ParentNamespace(this); + debug('initializing parent namespace %s', parentNsp.name); + if (typeof name === 'function') { + this.parentNsps.set(name, parentNsp); + } else { + this.parentNsps.set((nsp, conn, next) => next(null, name.test(nsp)), parentNsp); + } + if (fn) parentNsp.on('connect', fn); + return parentNsp; + } + + if (String(name)[0] !== '/') name = '/' + name; + + var nsp = this.nsps[name]; + if (!nsp) { + debug('initializing namespace %s', name); + nsp = new Namespace(this, name); + this.nsps[name] = nsp; + } + if (fn) nsp.on('connect', fn); + return nsp; +}; + +/** + * Closes server connection + * + * @param {Function} [fn] optional, called as `fn([err])` on error OR all conns closed + * @api public + */ + +Server.prototype.close = function(fn){ + for (var id in this.nsps['/'].sockets) { + if (this.nsps['/'].sockets.hasOwnProperty(id)) { + this.nsps['/'].sockets[id].onclose(); + } + } + + this.engine.close(); + + if (this.httpServer) { + this.httpServer.close(fn); + } else { + fn && fn(); + } +}; + +/** + * Expose main namespace (/). + */ + +var emitterMethods = Object.keys(Emitter.prototype).filter(function(key){ + return typeof Emitter.prototype[key] === 'function'; +}); + +emitterMethods.concat(['to', 'in', 'use', 'send', 'write', 'clients', 'compress', 'binary']).forEach(function(fn){ + Server.prototype[fn] = function(){ + return this.sockets[fn].apply(this.sockets, arguments); + }; +}); + +Namespace.flags.forEach(function(flag){ + Object.defineProperty(Server.prototype, flag, { + get: function() { + this.sockets.flags = this.sockets.flags || {}; + this.sockets.flags[flag] = true; + return this; + } + }); +}); + +/** + * BC with `io.listen` + */ + +Server.listen = Server; diff --git a/.pnpm-store/v11/files/47/07beb30d7ef6351a0dcf9940c5f30b650e7fdfc84a3d71e5d53053e613a76117e46e450bc2749274b186c9e6329ef86e9acf6d77dc3603ecdf625fae8d17cd b/.pnpm-store/v11/files/47/07beb30d7ef6351a0dcf9940c5f30b650e7fdfc84a3d71e5d53053e613a76117e46e450bc2749274b186c9e6329ef86e9acf6d77dc3603ecdf625fae8d17cd new file mode 100644 index 00000000..768cf1b4 --- /dev/null +++ b/.pnpm-store/v11/files/47/07beb30d7ef6351a0dcf9940c5f30b650e7fdfc84a3d71e5d53053e613a76117e46e450bc2749274b186c9e6329ef86e9acf6d77dc3603ecdf625fae8d17cd @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').mapValuesLimit; diff --git a/.pnpm-store/v11/files/47/0b2ffbcbcafb423d46c724d046b6471a7847f6c8a97158f4c22d26f429655bb40f3962026f7935741dda6ed5e6449fb942537f610df13d20892c5b6bb14a9d b/.pnpm-store/v11/files/47/0b2ffbcbcafb423d46c724d046b6471a7847f6c8a97158f4c22d26f429655bb40f3962026f7935741dda6ed5e6449fb942537f610df13d20892c5b6bb14a9d new file mode 100644 index 00000000..37b4366b --- /dev/null +++ b/.pnpm-store/v11/files/47/0b2ffbcbcafb423d46c724d046b6471a7847f6c8a97158f4c22d26f429655bb40f3962026f7935741dda6ed5e6449fb942537f610df13d20892c5b6bb14a9d @@ -0,0 +1,29 @@ +{ + "name": "inherits", + "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", + "version": "2.0.4", + "keywords": [ + "inheritance", + "class", + "klass", + "oop", + "object-oriented", + "inherits", + "browser", + "browserify" + ], + "main": "./inherits.js", + "browser": "./inherits_browser.js", + "repository": "git://github.com/isaacs/inherits", + "license": "ISC", + "scripts": { + "test": "tap" + }, + "devDependencies": { + "tap": "^14.2.4" + }, + "files": [ + "inherits.js", + "inherits_browser.js" + ] +} diff --git a/.pnpm-store/v11/files/47/10580e054e2147066daa0c734a53173e662270c13447faa2719db6f6f9b4d060bc581f2993f7597061fe5570ea0ba28affb8db18b11225464a1c10fa3a46e2 b/.pnpm-store/v11/files/47/10580e054e2147066daa0c734a53173e662270c13447faa2719db6f6f9b4d060bc581f2993f7597061fe5570ea0ba28affb8db18b11225464a1c10fa3a46e2 new file mode 100644 index 00000000..5324db6c --- /dev/null +++ b/.pnpm-store/v11/files/47/10580e054e2147066daa0c734a53173e662270c13447faa2719db6f6f9b4d060bc581f2993f7597061fe5570ea0ba28affb8db18b11225464a1c10fa3a46e2 @@ -0,0 +1,8 @@ +def run_all_tests + puts `clear` + puts `node tests/test-constants.js` + puts `node tests/test-headers.js` + puts `node tests/test-request.js` +end +watch('.*.js') { run_all_tests } +run_all_tests diff --git a/.pnpm-store/v11/files/47/178327a8b27136b9fd01ac6f9971b9585c2985132c8fa5072ca79143521dafd8bd83d320f470717df771bdd8dcbb24048b7518e1ff4292bf791ee3b0bf26d8-exec b/.pnpm-store/v11/files/47/178327a8b27136b9fd01ac6f9971b9585c2985132c8fa5072ca79143521dafd8bd83d320f470717df771bdd8dcbb24048b7518e1ff4292bf791ee3b0bf26d8-exec new file mode 100755 index 00000000..e696a8f3 --- /dev/null +++ b/.pnpm-store/v11/files/47/178327a8b27136b9fd01ac6f9971b9585c2985132c8fa5072ca79143521dafd8bd83d320f470717df771bdd8dcbb24048b7518e1ff4292bf791ee3b0bf26d8-exec @@ -0,0 +1,127 @@ +#!/usr/bin/env node +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +var path = require("path"); +var fs = require("fs"); +var su = require("suman-utils"); +var chokidar = require("chokidar"); +var chalk = require("chalk"); +var make_transpile_1 = require("./make-transpile"); +var make_execute_1 = require("./make-execute"); +var utils_1 = require("./utils"); +var logging_1 = require("./logging"); +var testDir = process.env['TEST_DIR']; +var ignored = JSON.parse(process.env['SUMAN_TOTAL_IGNORED']); +var projectRoot = process.env['SUMAN_PROJECT_ROOT']; +var watchOpts = JSON.parse(process.env['SUMAN_WATCH_OPTS']); +var transpile = make_transpile_1.makeTranspile(watchOpts, projectRoot); +var execute = make_execute_1.makeExecute(watchOpts, projectRoot); +var watcher = chokidar.watch(testDir, { + persistent: true, + ignoreInitial: true, + ignored: utils_1.getAlwaysIgnore().concat(ignored).map(function (v) { return new RegExp(v); }) +}); +process.once('exit', function () { + watcher.close(); +}); +process.once('SIGINT', function () { + watcher.once('close', function () { + console.log('watch is closed due to SIGINT event.'); + process.exit(0); + }); + watcher.close(); +}); +watcher.on('error', function (e) { + logging_1.log.error('watcher experienced an error', e.stack || e); +}); +watcher.once('ready', function () { + logging_1.log.veryGood('watcher is ready.'); + var watchCount = 0; + var watched = watcher.getWatched(); + Object.keys(watched).forEach(function (k) { + watchCount += watched[k].length; + }); + logging_1.log.veryGood('number of files being watched by suman-watch => ', watchCount); +}); +watcher.on('change', function (f) { + if (utils_1.isPathMatchesSig(path.basename(f))) { + return; + } + var dn = path.basename(path.dirname(f)); + var canonicalDirname = String('/' + dn + '/').replace(/\/+/g, '/'); + var originalFile; + var resolvedWithRoot = false; + if (!path.isAbsolute(f)) { + originalFile = f; + f = path.resolve(projectRoot + '/' + f); + resolvedWithRoot = true; + } + try { + fs.statSync(f); + } + catch (err) { + if (originalFile) { + logging_1.log.error('file was resolved against project root => ', originalFile); + logging_1.log.error("this file may have been resolved incorrectly; it was resolved to: \"" + f + "\"."); + throw new Error("'suman-watch' implementation error - watched paths must be absolute -> \n\t \"" + originalFile + "\""); + } + } + delete require.cache[f]; + logging_1.log.info('file change event for path => ', f); + su.findNearestRunAndTransform(projectRoot, f, function (err, ret) { + if (err) { + logging_1.log.error("error locating @run.sh / @transform.sh for file " + f + ".\n" + err); + return; + } + var matched = false; + try { + if (ret.config) { + var config = require(ret.config); + var match = config['@src']['marker']; + var canonicalMatch = String('/' + match + '/').replace(/\/+/g, '/'); + if (canonicalDirname.match(new RegExp(canonicalMatch))) { + matched = true; + } + } + } + catch (err) { + logging_1.log.error(err.stack || err); + } + finally { + if (dn.match(/\/@src\//)) { + matched = true; + } + } + if (!matched) { + logging_1.log.error('file will not be transpiled.'); + } + transpile(f, ret, matched, function (err) { + if (err) { + logging_1.log.error("error running transpile process for file " + f + ".\n" + err); + return; + } + execute(f, ret, function (err, result) { + if (err) { + logging_1.log.error("error executing corresponding test process for source file " + f + ".\n" + (err.stack || err)); + return; + } + var stdout = result.stdout, stderr = result.stderr, code = result.code; + if (code === -1) { + return; + } + if (code === undefined) { + logging_1.log.warning('suman-watcher implementation warning, exit code was undefined.'); + } + console.log('\n'); + logging_1.log.info("your corresponding test process for path " + f + ", exited with code " + code); + if (code > 0) { + logging_1.log.error("there was an error executing your test with path " + f + ", because the exit code was greater than 0."); + } + if (stderr) { + logging_1.log.warning("the stderr for path " + f + ", is as follows =>\n" + chalk.yellow(stderr) + "."); + console.log('\n'); + } + }); + }); + }); +}); diff --git a/.pnpm-store/v11/files/47/3421a0e567a8b9c9333e54a6b06337df83e4405c091d447cb640c5f2a4adb71f69b2254f71ac381db7ff600395972dc44c80f2de51555fe8d675800917e894 b/.pnpm-store/v11/files/47/3421a0e567a8b9c9333e54a6b06337df83e4405c091d447cb640c5f2a4adb71f69b2254f71ac381db7ff600395972dc44c80f2de51555fe8d675800917e894 new file mode 100644 index 00000000..c8d17904 --- /dev/null +++ b/.pnpm-store/v11/files/47/3421a0e567a8b9c9333e54a6b06337df83e4405c091d447cb640c5f2a4adb71f69b2254f71ac381db7ff600395972dc44c80f2de51555fe8d675800917e894 @@ -0,0 +1,304 @@ + +/** + * Module dependencies. + */ + +var colors = require('colors/safe') + , utils = require('./utils') + , repeat = utils.repeat + , truncate = utils.truncate + , pad = utils.pad; + +/** + * Table constructor + * + * @param {Object} options + * @api public + */ + +function Table (options){ + this.options = utils.options({ + chars: { + 'top': '─' + , 'top-mid': '┬' + , 'top-left': '┌' + , 'top-right': '┐' + , 'bottom': '─' + , 'bottom-mid': '┴' + , 'bottom-left': '└' + , 'bottom-right': '┘' + , 'left': '│' + , 'left-mid': '├' + , 'mid': '─' + , 'mid-mid': '┼' + , 'right': '│' + , 'right-mid': '┤' + , 'middle': '│' + } + , truncate: '…' + , colWidths: [] + , colAligns: [] + , style: { + 'padding-left': 1 + , 'padding-right': 1 + , head: ['red'] + , border: ['grey'] + , compact : false + } + , head: [] + }, options); + + if (options && options.rows) { + for (var i = 0; i < options.rows.length; i++) { + this.push(options.rows[i]); + } + } +} + +/** + * Inherit from Array. + */ + +Table.prototype.__proto__ = Array.prototype; + +/** + * Width getter + * + * @return {Number} width + * @api public + */ + +Table.prototype.__defineGetter__('width', function (){ + var str = this.toString().split("\n"); + if (str.length) return str[0].length; + return 0; +}); + +/** + * Render to a string. + * + * @return {String} table representation + * @api public + */ + +Table.prototype.render +Table.prototype.toString = function (){ + var ret = '' + , options = this.options + , style = options.style + , head = options.head + , chars = options.chars + , truncater = options.truncate + , colWidths = options.colWidths || new Array(this.head.length) + , totalWidth = 0; + + if (!head.length && !this.length) return ''; + + if (!colWidths.length){ + var all_rows = this.slice(0); + if (head.length) { all_rows = all_rows.concat([head]) }; + + all_rows.forEach(function(cells){ + // horizontal (arrays) + if (typeof cells === 'object' && cells.length) { + extractColumnWidths(cells); + + // vertical (objects) + } else { + var header_cell = Object.keys(cells)[0] + , value_cell = cells[header_cell]; + + colWidths[0] = Math.max(colWidths[0] || 0, get_width(header_cell) || 0); + + // cross (objects w/ array values) + if (typeof value_cell === 'object' && value_cell.length) { + extractColumnWidths(value_cell, 1); + } else { + colWidths[1] = Math.max(colWidths[1] || 0, get_width(value_cell) || 0); + } + } + }); + }; + + totalWidth = (colWidths.length == 1 ? colWidths[0] : colWidths.reduce( + function (a, b){ + return a + b + })) + colWidths.length + 1; + + function extractColumnWidths(arr, offset) { + var offset = offset || 0; + arr.forEach(function(cell, i){ + colWidths[i + offset] = Math.max(colWidths[i + offset] || 0, get_width(cell) || 0); + }); + }; + + function get_width(obj) { + return typeof obj == 'object' && obj.width != undefined + ? obj.width + : ((typeof obj == 'object' ? utils.strlen(obj.text) : utils.strlen(obj)) + (style['padding-left'] || 0) + (style['padding-right'] || 0)) + } + + // draws a line + function line (line, left, right, intersection){ + var width = 0 + , line = + left + + repeat(line, totalWidth - 2) + + right; + + colWidths.forEach(function (w, i){ + if (i == colWidths.length - 1) return; + width += w + 1; + line = line.substr(0, width) + intersection + line.substr(width + 1); + }); + + return applyStyles(options.style.border, line); + }; + + // draws the top line + function lineTop (){ + var l = line(chars.top + , chars['top-left'] || chars.top + , chars['top-right'] || chars.top + , chars['top-mid']); + if (l) + ret += l + "\n"; + }; + + function generateRow (items, style) { + var cells = [] + , max_height = 0; + + // prepare vertical and cross table data + if (!Array.isArray(items) && typeof items === "object") { + var key = Object.keys(items)[0] + , value = items[key] + , first_cell_head = true; + + if (Array.isArray(value)) { + items = value; + items.unshift(key); + } else { + items = [key, value]; + } + } + + // transform array of item strings into structure of cells + items.forEach(function (item, i) { + var contents = item.toString().split("\n").reduce(function (memo, l) { + memo.push(string(l, i)); + return memo; + }, []) + + var height = contents.length; + if (height > max_height) { max_height = height }; + + cells.push({ contents: contents , height: height }); + }); + + // transform vertical cells into horizontal lines + var lines = new Array(max_height); + cells.forEach(function (cell, i) { + cell.contents.forEach(function (line, j) { + if (!lines[j]) { lines[j] = [] }; + if (style || (first_cell_head && i === 0 && options.style.head)) { + line = applyStyles(options.style.head, line) + } + + lines[j].push(line); + }); + + // populate empty lines in cell + for (var j = cell.height, l = max_height; j < l; j++) { + if (!lines[j]) { lines[j] = [] }; + lines[j].push(string('', i)); + } + }); + var ret = ""; + lines.forEach(function (line, index) { + if (ret.length > 0) { + ret += "\n" + applyStyles(options.style.border, chars.left); + } + + ret += line.join(applyStyles(options.style.border, chars.middle)) + applyStyles(options.style.border, chars.right); + }); + + return applyStyles(options.style.border, chars.left) + ret; + }; + + function applyStyles(styles, subject) { + if (!subject) + return ''; + styles.forEach(function(style) { + subject = colors[style](subject); + }); + return subject; + }; + + // renders a string, by padding it or truncating it + function string (str, index){ + var str = String(typeof str == 'object' && str.text ? str.text : str) + , length = utils.strlen(str) + , width = colWidths[index] + - (style['padding-left'] || 0) + - (style['padding-right'] || 0) + , align = options.colAligns[index] || 'left'; + + return repeat(' ', style['padding-left'] || 0) + + (length == width ? str : + (length < width + ? pad(str, ( width + (str.length - length) ), ' ', align == 'left' ? 'right' : + (align == 'middle' ? 'both' : 'left')) + : (truncater ? truncate(str, width, truncater) : str)) + ) + + repeat(' ', style['padding-right'] || 0); + }; + + if (head.length){ + lineTop(); + + ret += generateRow(head, style.head) + "\n" + } + + if (this.length) + this.forEach(function (cells, i){ + if (!head.length && i == 0) + lineTop(); + else { + if (!style.compact || i<(!!head.length) ?1:0 || cells.length == 0){ + var l = line(chars.mid + , chars['left-mid'] + , chars['right-mid'] + , chars['mid-mid']); + if (l) + ret += l + "\n" + } + } + + if (cells.hasOwnProperty("length") && !cells.length) { + return + } else { + ret += generateRow(cells) + "\n"; + }; + }); + + var l = line(chars.bottom + , chars['bottom-left'] || chars.bottom + , chars['bottom-right'] || chars.bottom + , chars['bottom-mid']); + if (l) + ret += l; + else + // trim the last '\n' if we didn't add the bottom decoration + ret = ret.slice(0, -1); + + return ret; +}; + +/** + * Module exports. + */ + +module.exports = Table; + +module.exports.version = '0.0.1'; diff --git a/.pnpm-store/v11/files/47/3b1e88773413bbf2ba409654791e88c6f8042815a279a0c11cec441ccac0e496902e2373dc9a7bb69e4294aa7728d1f88450ed25bf81ac35fe7352ef3bbe80 b/.pnpm-store/v11/files/47/3b1e88773413bbf2ba409654791e88c6f8042815a279a0c11cec441ccac0e496902e2373dc9a7bb69e4294aa7728d1f88450ed25bf81ac35fe7352ef3bbe80 new file mode 100644 index 00000000..e4116185 --- /dev/null +++ b/.pnpm-store/v11/files/47/3b1e88773413bbf2ba409654791e88c6f8042815a279a0c11cec441ccac0e496902e2373dc9a7bb69e4294aa7728d1f88450ed25bf81ac35fe7352ef3bbe80 @@ -0,0 +1,67 @@ +'use strict'; + +var micromatch = require('micromatch'); +var normalize = require('normalize-path'); +var path = require('path'); // required for tests. +var arrify = function(a) { return a == null ? [] : (Array.isArray(a) ? a : [a]); }; + +var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) { + criteria = arrify(criteria); + value = arrify(value); + if (arguments.length === 1) { + return anymatch.bind(null, criteria.map(function(criterion) { + return typeof criterion === 'string' && criterion[0] !== '!' ? + micromatch.matcher(criterion) : criterion; + })); + } + startIndex = startIndex || 0; + var string = value[0]; + var altString, altValue; + var matched = false; + var matchIndex = -1; + function testCriteria(criterion, index) { + var result; + switch (Object.prototype.toString.call(criterion)) { + case '[object String]': + result = string === criterion || altString && altString === criterion; + result = result || micromatch.isMatch(string, criterion); + break; + case '[object RegExp]': + result = criterion.test(string) || altString && criterion.test(altString); + break; + case '[object Function]': + result = criterion.apply(null, value); + result = result || altValue && criterion.apply(null, altValue); + break; + default: + result = false; + } + if (result) { + matchIndex = index + startIndex; + } + return result; + } + var crit = criteria; + var negGlobs = crit.reduce(function(arr, criterion, index) { + if (typeof criterion === 'string' && criterion[0] === '!') { + if (crit === criteria) { + // make a copy before modifying + crit = crit.slice(); + } + crit[index] = null; + arr.push(criterion.substr(1)); + } + return arr; + }, []); + if (!negGlobs.length || !micromatch.any(string, negGlobs)) { + if (path.sep === '\\' && typeof string === 'string') { + altString = normalize(string); + altString = altString === string ? null : altString; + if (altString) altValue = [altString].concat(value.slice(1)); + } + matched = crit.slice(startIndex, endIndex).some(testCriteria); + } + return returnIndex === true ? matchIndex : matched; +}; + +module.exports = anymatch; diff --git a/.pnpm-store/v11/files/47/5737317cf9aeda6956a5f8d2750830fce486cfc52ce8e1587629c84f2d4a1965ee672fcd14be5e2fb9ad68261d091a097782dc129fe7906ef3c34cbe246454 b/.pnpm-store/v11/files/47/5737317cf9aeda6956a5f8d2750830fce486cfc52ce8e1587629c84f2d4a1965ee672fcd14be5e2fb9ad68261d091a097782dc129fe7906ef3c34cbe246454 new file mode 100644 index 00000000..369962a8 --- /dev/null +++ b/.pnpm-store/v11/files/47/5737317cf9aeda6956a5f8d2750830fce486cfc52ce8e1587629c84f2d4a1965ee672fcd14be5e2fb9ad68261d091a097782dc129fe7906ef3c34cbe246454 @@ -0,0 +1,43 @@ +/*! + * expand-range + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT license. + */ + +'use strict'; + +var fill = require('fill-range'); + +module.exports = function expandRange(str, options, fn) { + if (typeof str !== 'string') { + throw new TypeError('expand-range expects a string.'); + } + + if (typeof options === 'function') { + fn = options; + options = {}; + } + + if (typeof options === 'boolean') { + options = {}; + options.makeRe = true; + } + + // create arguments to pass to fill-range + var opts = options || {}; + var args = str.split('..'); + var len = args.length; + if (len > 3) { return str; } + + // if only one argument, it can't expand so return it + if (len === 1) { return args; } + + // if `true`, tell fill-range to regexify the string + if (typeof fn === 'boolean' && fn === true) { + opts.makeRe = true; + } + + args.push(opts); + return fill.apply(null, args.concat(fn)); +}; diff --git a/.pnpm-store/v11/files/47/6353b1522dd9fec8aefeca5a89d9ecc5ad8b65339ed30e1ff47c64da2b2be3ed18d90587a3e450f53020d83183fd527ae77df1737efd93bc92d731691f0deb-exec b/.pnpm-store/v11/files/47/6353b1522dd9fec8aefeca5a89d9ecc5ad8b65339ed30e1ff47c64da2b2be3ed18d90587a3e450f53020d83183fd527ae77df1737efd93bc92d731691f0deb-exec new file mode 100755 index 00000000..52c3cc3e --- /dev/null +++ b/.pnpm-store/v11/files/47/6353b1522dd9fec8aefeca5a89d9ecc5ad8b65339ed30e1ff47c64da2b2be3ed18d90587a3e450f53020d83183fd527ae77df1737efd93bc92d731691f0deb-exec @@ -0,0 +1,31 @@ +#!/usr/bin/env node +'use strict'; + +const fs = require('fs'); +const async = require('async'); +const path = require('path'); +const cp = require('child_process'); + +const files = fs.readdirSync(path.resolve(__dirname + '/src')); + +async.each(files, function (f, cb) { + + if (!path.isAbsolute(f)) { + f = path.resolve(__dirname + '/src/' + f); + } + + let k = cp.spawn('node', [f]); + + k.stderr.setEncoding('utf8'); + k.stderr.pipe(process.stderr); + + k.once('exit', cb); + +}, function (err) { + + if (err) { + throw err; + } + + console.log('all done.'); +}); diff --git a/.pnpm-store/v11/files/47/6e9a3e5a433537a60c8141a365071ae7d2ff12c9f6ee902d58870c0dc975f6d95940cdedf681aa667c1bf365e5a861c6d834a611be3e997a3d69ee3517387c b/.pnpm-store/v11/files/47/6e9a3e5a433537a60c8141a365071ae7d2ff12c9f6ee902d58870c0dc975f6d95940cdedf681aa667c1bf365e5a861c6d834a611be3e997a3d69ee3517387c new file mode 100644 index 00000000..246e1c3b --- /dev/null +++ b/.pnpm-store/v11/files/47/6e9a3e5a433537a60c8141a365071ae7d2ff12c9f6ee902d58870c0dc975f6d95940cdedf681aa667c1bf365e5a861c6d834a611be3e997a3d69ee3517387c @@ -0,0 +1,36 @@ +module.exports = function(grunt) { + grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + + uglify: { + options: { + banner: "/*! <%= pkg.name %> | <%= pkg.author %> | <%= pkg.license %> */\n", + sourceMap: true + }, + build: { + files: [ + { + src: "src/sprintf.js", + dest: "dist/sprintf.min.js" + }, + { + src: "src/angular-sprintf.js", + dest: "dist/angular-sprintf.min.js" + } + ] + } + }, + + watch: { + js: { + files: "src/*.js", + tasks: ["uglify"] + } + } + }) + + grunt.loadNpmTasks("grunt-contrib-uglify") + grunt.loadNpmTasks("grunt-contrib-watch") + + grunt.registerTask("default", ["uglify", "watch"]) +} diff --git a/.pnpm-store/v11/files/47/79da46fe8e97a2f8cd975bc5152515227640c5b9fda30847e47591d19e5bdd3177824c05467df0bffdc68c0760eebd79a21d8e0db060053e055a9c80b55aab b/.pnpm-store/v11/files/47/79da46fe8e97a2f8cd975bc5152515227640c5b9fda30847e47591d19e5bdd3177824c05467df0bffdc68c0760eebd79a21d8e0db060053e055a9c80b55aab new file mode 100644 index 00000000..cab40dbe --- /dev/null +++ b/.pnpm-store/v11/files/47/79da46fe8e97a2f8cd975bc5152515227640c5b9fda30847e47591d19e5bdd3177824c05467df0bffdc68c0760eebd79a21d8e0db060053e055a9c80b55aab @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').race; diff --git a/.pnpm-store/v11/files/47/855434213bc818b16b7911c5005b6ee37927e9129a5ccf89ae4392906202d57812a4961c12265781c6dac433057e472385878ad7a04db48ca48a1e6f96deb2 b/.pnpm-store/v11/files/47/855434213bc818b16b7911c5005b6ee37927e9129a5ccf89ae4392906202d57812a4961c12265781c6dac433057e472385878ad7a04db48ca48a1e6f96deb2 new file mode 100644 index 00000000..3dfd81cc --- /dev/null +++ b/.pnpm-store/v11/files/47/855434213bc818b16b7911c5005b6ee37927e9129a5ccf89ae4392906202d57812a4961c12265781c6dac433057e472385878ad7a04db48ca48a1e6f96deb2 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isError', require('../isError'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/47/87e0158ce113d1808cb8a64fc7780ebb5f89e3fa4929075e45bdf359c885cd90d2904ffd19e52fca9bb323e96e166730657ac31ee5d58b49f8e6675df249e6 b/.pnpm-store/v11/files/47/87e0158ce113d1808cb8a64fc7780ebb5f89e3fa4929075e45bdf359c885cd90d2904ffd19e52fca9bb323e96e166730657ac31ee5d58b49f8e6675df249e6 new file mode 100644 index 00000000..cf756a3d --- /dev/null +++ b/.pnpm-store/v11/files/47/87e0158ce113d1808cb8a64fc7780ebb5f89e3fa4929075e45bdf359c885cd90d2904ffd19e52fca9bb323e96e166730657ac31ee5d58b49f8e6675df249e6 @@ -0,0 +1,64 @@ +/* global Blob File */ + +/* + * Module requirements. + */ + +var isArray = require('isarray'); + +var toString = Object.prototype.toString; +var withNativeBlob = typeof Blob === 'function' || + typeof Blob !== 'undefined' && toString.call(Blob) === '[object BlobConstructor]'; +var withNativeFile = typeof File === 'function' || + typeof File !== 'undefined' && toString.call(File) === '[object FileConstructor]'; + +/** + * Module exports. + */ + +module.exports = hasBinary; + +/** + * Checks for binary data. + * + * Supports Buffer, ArrayBuffer, Blob and File. + * + * @param {Object} anything + * @api public + */ + +function hasBinary (obj) { + if (!obj || typeof obj !== 'object') { + return false; + } + + if (isArray(obj)) { + for (var i = 0, l = obj.length; i < l; i++) { + if (hasBinary(obj[i])) { + return true; + } + } + return false; + } + + if ((typeof Buffer === 'function' && Buffer.isBuffer && Buffer.isBuffer(obj)) || + (typeof ArrayBuffer === 'function' && obj instanceof ArrayBuffer) || + (withNativeBlob && obj instanceof Blob) || + (withNativeFile && obj instanceof File) + ) { + return true; + } + + // see: https://github.com/Automattic/has-binary/pull/4 + if (obj.toJSON && typeof obj.toJSON === 'function' && arguments.length === 1) { + return hasBinary(obj.toJSON(), true); + } + + for (var key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key) && hasBinary(obj[key])) { + return true; + } + } + + return false; +} diff --git a/.pnpm-store/v11/files/47/9228e9bfa5e7db9eca88d07b803258afe0b86648acd6f4cdb63f7348c8906433cfd396e6b74da6c85c383129e2f34222a09485ab993525579469b324766e0d b/.pnpm-store/v11/files/47/9228e9bfa5e7db9eca88d07b803258afe0b86648acd6f4cdb63f7348c8906433cfd396e6b74da6c85c383129e2f34222a09485ab993525579469b324766e0d new file mode 100644 index 00000000..22d87e1c --- /dev/null +++ b/.pnpm-store/v11/files/47/9228e9bfa5e7db9eca88d07b803258afe0b86648acd6f4cdb63f7348c8906433cfd396e6b74da6c85c383129e2f34222a09485ab993525579469b324766e0d @@ -0,0 +1,5 @@ + +0.0.2 / 2012-09-03 +================== + + * fix typo in package.json diff --git a/.pnpm-store/v11/files/47/9a855450c514feb18db4e5648a4b1640fdbc0777f90db8e71a32295331a8d5ed6155c58805feaaff0207565af281d5b30945584267758bdc38fadb8d5b36e5 b/.pnpm-store/v11/files/47/9a855450c514feb18db4e5648a4b1640fdbc0777f90db8e71a32295331a8d5ed6155c58805feaaff0207565af281d5b30945584267758bdc38fadb8d5b36e5 new file mode 100644 index 00000000..7c84de61 --- /dev/null +++ b/.pnpm-store/v11/files/47/9a855450c514feb18db4e5648a4b1640fdbc0777f90db8e71a32295331a8d5ed6155c58805feaaff0207565af281d5b30945584267758bdc38fadb8d5b36e5 @@ -0,0 +1,38 @@ +// browser shim for xmlhttprequest module + +var hasCORS = require('has-cors'); +var globalThis = require('../globalThis'); + +module.exports = function (opts) { + var xdomain = opts.xdomain; + + // scheme must be same when usign XDomainRequest + // http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx + var xscheme = opts.xscheme; + + // XDomainRequest has a flow of not sending cookie, therefore it should be disabled as a default. + // https://github.com/Automattic/engine.io-client/pull/217 + var enablesXDR = opts.enablesXDR; + + // XMLHttpRequest can be disabled on IE + try { + if ('undefined' !== typeof XMLHttpRequest && (!xdomain || hasCORS)) { + return new XMLHttpRequest(); + } + } catch (e) { } + + // Use XDomainRequest for IE8 if enablesXDR is true + // because loading bar keeps flashing when using jsonp-polling + // https://github.com/yujiosaka/socke.io-ie8-loading-example + try { + if ('undefined' !== typeof XDomainRequest && !xscheme && enablesXDR) { + return new XDomainRequest(); + } + } catch (e) { } + + if (!xdomain) { + try { + return new globalThis[['Active'].concat('Object').join('X')]('Microsoft.XMLHTTP'); + } catch (e) { } + } +}; diff --git a/.pnpm-store/v11/files/47/b612ef4e93f1af62891e295e9fbac05e02cf1726f56c36fad5314376e28cbcaf7c8355527bc0bda54c26cbe097bc8ca5cb4f79aa9e3ab6f1d875dca41d4aac b/.pnpm-store/v11/files/47/b612ef4e93f1af62891e295e9fbac05e02cf1726f56c36fad5314376e28cbcaf7c8355527bc0bda54c26cbe097bc8ca5cb4f79aa9e3ab6f1d875dca41d4aac new file mode 100644 index 00000000..658c933d --- /dev/null +++ b/.pnpm-store/v11/files/47/b612ef4e93f1af62891e295e9fbac05e02cf1726f56c36fad5314376e28cbcaf7c8355527bc0bda54c26cbe097bc8ca5cb4f79aa9e3ab6f1d875dca41d4aac @@ -0,0 +1,19 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the 'Software'), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/.pnpm-store/v11/files/47/be74a70c4b03def430340593e410f2ae1aef92c150d4821aee645e40da0674a6d969a7b3dc72974a709a42010c8c3cc43989e7fa3063c01367bc63fbc32a8b b/.pnpm-store/v11/files/47/be74a70c4b03def430340593e410f2ae1aef92c150d4821aee645e40da0674a6d969a7b3dc72974a709a42010c8c3cc43989e7fa3063c01367bc63fbc32a8b new file mode 100644 index 00000000..97d51eb5 --- /dev/null +++ b/.pnpm-store/v11/files/47/be74a70c4b03def430340593e410f2ae1aef92c150d4821aee645e40da0674a6d969a7b3dc72974a709a42010c8c3cc43989e7fa3063c01367bc63fbc32a8b @@ -0,0 +1,24 @@ +var baseInvoke = require('./_baseInvoke'), + baseRest = require('./_baseRest'); + +/** + * Invokes the method at `path` of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {...*} [args] The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + * @example + * + * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; + * + * _.invoke(object, 'a[0].b.c.slice', 1, 3); + * // => [2, 3] + */ +var invoke = baseRest(baseInvoke); + +module.exports = invoke; diff --git a/.pnpm-store/v11/files/47/c1ac2b444615f63016bdbd77ebdf079c4ad5112165fa3e7d1621955f448531304549047a405add6683291c781ba549168b8fc072d74a112f66d335f84e0912 b/.pnpm-store/v11/files/47/c1ac2b444615f63016bdbd77ebdf079c4ad5112165fa3e7d1621955f448531304549047a405add6683291c781ba549168b8fc072d74a112f66d335f84e0912 new file mode 100644 index 00000000..556dbd56 --- /dev/null +++ b/.pnpm-store/v11/files/47/c1ac2b444615f63016bdbd77ebdf079c4ad5112165fa3e7d1621955f448531304549047a405add6683291c781ba549168b8fc072d74a112f66d335f84e0912 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('delay', require('../delay')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/47/c7c6b6ab8049c1a70c77b698d3f4f5b3a9676535029e9bd37dd85f2d1f0bf104ddf4203497de0fdb1bd9433468003712d72d6bc6f2a3cb459901b8b32782d9 b/.pnpm-store/v11/files/47/c7c6b6ab8049c1a70c77b698d3f4f5b3a9676535029e9bd37dd85f2d1f0bf104ddf4203497de0fdb1bd9433468003712d72d6bc6f2a3cb459901b8b32782d9 new file mode 100644 index 00000000..0ab826ad --- /dev/null +++ b/.pnpm-store/v11/files/47/c7c6b6ab8049c1a70c77b698d3f4f5b3a9676535029e9bd37dd85f2d1f0bf104ddf4203497de0fdb1bd9433468003712d72d6bc6f2a3cb459901b8b32782d9 @@ -0,0 +1,37 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const _suman = global.__suman = (global.__suman || {}); +const helpers_1 = require("./helpers"); +exports.makePostInjector = function ($data, $preData, $ioc) { + return function (names) { + return names.map(function (n) { + if (n === '$core') { + return helpers_1.getCoreAndDeps().$core; + } + if (n === '$deps') { + return helpers_1.getCoreAndDeps().$deps; + } + if (n === '$args') { + return _suman.sumanOpts.user_arg || []; + } + if (n === '$data') { + return $data; + } + if (n === '$root' || n === '$projectRoot') { + return _suman.projectRoot; + } + if (n === '$index' || n === '$project') { + return helpers_1.getProjectModule(); + } + if (n === '$pre') { + return $preData || _suman['$pre'] || _suman.integrantHashKeyVals; + } + if (n === '$ioc') { + return $ioc || _suman.$staticIoc; + } + return helpers_1.lastDitchRequire(n, ''); + }); + }; +}; diff --git a/.pnpm-store/v11/files/47/fce1b68ae29000002ccfd28727922c138a3f216b1fb411528acc962fec850492e3b1bc8c7b36374b247a342767ed49981620dc0b065f693dcdec9617c4be6d b/.pnpm-store/v11/files/47/fce1b68ae29000002ccfd28727922c138a3f216b1fb411528acc962fec850492e3b1bc8c7b36374b247a342767ed49981620dc0b065f693dcdec9617c4be6d new file mode 100644 index 00000000..6a7caadb --- /dev/null +++ b/.pnpm-store/v11/files/47/fce1b68ae29000002ccfd28727922c138a3f216b1fb411528acc962fec850492e3b1bc8c7b36374b247a342767ed49981620dc0b065f693dcdec9617c4be6d @@ -0,0 +1,114 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +// It turns out that some (most?) JavaScript engines don't self-host +// `Array.prototype.sort`. This makes sense because C++ will likely remain +// faster than JS when doing raw CPU-intensive sorting. However, when using a +// custom comparator function, calling back and forth between the VM's C++ and +// JIT'd JS is rather slow *and* loses JIT type information, resulting in +// worse generated code for the comparator function than would be optimal. In +// fact, when sorting with a comparator, these costs outweigh the benefits of +// sorting in C++. By using our own JS-implemented Quick Sort (below), we get +// a ~3500ms mean speed-up in `bench/bench.html`. + +/** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ +function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; +} + +/** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ +function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); +} + +/** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ +function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } +} + +/** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ +exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); +}; diff --git a/.pnpm-store/v11/files/48/0357dc5f12fe4229b99769304f67bf79d94668cb975d1ee0f4d0677d17f8e762ba4ebecdaaae9541120217d372dfa7d04bb6a48e7aa48de7b9bf08d20554e9 b/.pnpm-store/v11/files/48/0357dc5f12fe4229b99769304f67bf79d94668cb975d1ee0f4d0677d17f8e762ba4ebecdaaae9541120217d372dfa7d04bb6a48e7aa48de7b9bf08d20554e9 new file mode 100644 index 00000000..79bf162d --- /dev/null +++ b/.pnpm-store/v11/files/48/0357dc5f12fe4229b99769304f67bf79d94668cb975d1ee0f4d0677d17f8e762ba4ebecdaaae9541120217d372dfa7d04bb6a48e7aa48de7b9bf08d20554e9 @@ -0,0 +1,3 @@ +import { Suman } from "../suman"; +import { ItFn } from "suman-types/dts/it"; +export declare const makeIt: (suman: Suman) => ItFn; diff --git a/.pnpm-store/v11/files/48/36f091b72329dbed36e1986b16df62ba836d681c9c52622688387513e51bc57e772d5609f99c96d15d59a4c3808d6d7ae4cf91e7f1f4231ebc96704ac7faa9 b/.pnpm-store/v11/files/48/36f091b72329dbed36e1986b16df62ba836d681c9c52622688387513e51bc57e772d5609f99c96d15d59a4c3808d6d7ae4cf91e7f1f4231ebc96704ac7faa9 new file mode 100644 index 00000000..e3f5d8aa --- /dev/null +++ b/.pnpm-store/v11/files/48/36f091b72329dbed36e1986b16df62ba836d681c9c52622688387513e51bc57e772d5609f99c96d15d59a4c3808d6d7ae4cf91e7f1f4231ebc96704ac7faa9 @@ -0,0 +1,24 @@ +/** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ +function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; +} + +module.exports = baseFindIndex; diff --git a/.pnpm-store/v11/files/48/5f7fe668f1328fc1e44a2d35f1132eba073bcac83cd6a7140201fed10c6e3d86b46f51d0bedb1189e8a8b0f685d8553c1f5b5c582037c78ad08cc19ef55708 b/.pnpm-store/v11/files/48/5f7fe668f1328fc1e44a2d35f1132eba073bcac83cd6a7140201fed10c6e3d86b46f51d0bedb1189e8a8b0f685d8553c1f5b5c582037c78ad08cc19ef55708 new file mode 100644 index 00000000..ddf39c30 --- /dev/null +++ b/.pnpm-store/v11/files/48/5f7fe668f1328fc1e44a2d35f1132eba073bcac83cd6a7140201fed10c6e3d86b46f51d0bedb1189e8a8b0f685d8553c1f5b5c582037c78ad08cc19ef55708 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lastIndexOf', require('../lastIndexOf')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/48/71de9d0d83c35840242e312c56c0677dec15644ba32c24235a77e27d89b0cfa17f114d485da7edaa289a401868165fc2fca3844e2954a30c49a76375359f22 b/.pnpm-store/v11/files/48/71de9d0d83c35840242e312c56c0677dec15644ba32c24235a77e27d89b0cfa17f114d485da7edaa289a401868165fc2fca3844e2954a30c49a76375359f22 new file mode 100644 index 00000000..ff5310d3 --- /dev/null +++ b/.pnpm-store/v11/files/48/71de9d0d83c35840242e312c56c0677dec15644ba32c24235a77e27d89b0cfa17f114d485da7edaa289a401868165fc2fca3844e2954a30c49a76375359f22 @@ -0,0 +1,43 @@ +glob-parent [![Build Status](https://travis-ci.org/es128/glob-parent.svg)](https://travis-ci.org/es128/glob-parent) [![Coverage Status](https://img.shields.io/coveralls/es128/glob-parent.svg)](https://coveralls.io/r/es128/glob-parent?branch=master) +====== +Javascript module to extract the non-magic parent path from a glob string. + +[![NPM](https://nodei.co/npm/glob-parent.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/glob-parent/) +[![NPM](https://nodei.co/npm-dl/glob-parent.png?height=3&months=9)](https://nodei.co/npm-dl/glob-parent/) + +Usage +----- +```sh +npm install glob-parent --save +``` + +```js +var globParent = require('glob-parent'); + +globParent('path/to/*.js'); // 'path/to' +globParent('/root/path/to/*.js'); // '/root/path/to' +globParent('/*.js'); // '/' +globParent('*.js'); // '.' +globParent('**/*.js'); // '.' +globParent('path/{to,from}'); // 'path' +globParent('path/!(to|from)'); // 'path' +globParent('path/?(to|from)'); // 'path' +globParent('path/+(to|from)'); // 'path' +globParent('path/*(to|from)'); // 'path' +globParent('path/@(to|from)'); // 'path' +globParent('path/**/*'); // 'path' + +// if provided a non-glob path, returns the nearest dir +globParent('path/foo/bar.js'); // 'path/foo' +globParent('path/foo/'); // 'path/foo' +globParent('path/foo'); // 'path' (see issue #3 for details) + +``` + +Change Log +---------- +[See release notes page on GitHub](https://github.com/es128/glob-parent/releases) + +License +------- +[ISC](https://raw.github.com/es128/glob-parent/master/LICENSE) diff --git a/.pnpm-store/v11/files/48/7992665a114176b4dfd4cd5b8188fc20e9af34bec1bacc314c56056d64098b7ca3538dea65a8a50ad92cbeb1cbcf76f66f59e27861b1c4bbdef5d99fafb192 b/.pnpm-store/v11/files/48/7992665a114176b4dfd4cd5b8188fc20e9af34bec1bacc314c56056d64098b7ca3538dea65a8a50ad92cbeb1cbcf76f66f59e27861b1c4bbdef5d99fafb192 new file mode 100644 index 00000000..92fc1c53 --- /dev/null +++ b/.pnpm-store/v11/files/48/7992665a114176b4dfd4cd5b8188fc20e9af34bec1bacc314c56056d64098b7ca3538dea65a8a50ad92cbeb1cbcf76f66f59e27861b1c4bbdef5d99fafb192 @@ -0,0 +1,243 @@ + +# socket.io + +[![Backers on Open Collective](https://opencollective.com/socketio/backers/badge.svg)](#backers) [![Sponsors on Open Collective](https://opencollective.com/socketio/sponsors/badge.svg)](#sponsors) +[![Build Status](https://github.com/socketio/socket.io/workflows/CI/badge.svg)](https://github.com/socketio/socket.io/actions) +[![Dependency Status](https://david-dm.org/socketio/socket.io.svg)](https://david-dm.org/socketio/socket.io) +[![devDependency Status](https://david-dm.org/socketio/socket.io/dev-status.svg)](https://david-dm.org/socketio/socket.io#info=devDependencies) +[![NPM version](https://badge.fury.io/js/socket.io.svg)](https://www.npmjs.com/package/socket.io) +![Downloads](https://img.shields.io/npm/dm/socket.io.svg?style=flat) +[![](https://slackin-socketio.now.sh/badge.svg)](https://slackin-socketio.now.sh) + +## Features + +Socket.IO enables real-time bidirectional event-based communication. It consists of: + +- a Node.js server (this repository) +- a [Javascript client library](https://github.com/socketio/socket.io-client) for the browser (or a Node.js client) + +Some implementations in other languages are also available: + +- [Java](https://github.com/socketio/socket.io-client-java) +- [C++](https://github.com/socketio/socket.io-client-cpp) +- [Swift](https://github.com/socketio/socket.io-client-swift) +- [Dart](https://github.com/rikulo/socket.io-client-dart) + +Its main features are: + +#### Reliability + +Connections are established even in the presence of: + - proxies and load balancers. + - personal firewall and antivirus software. + +For this purpose, it relies on [Engine.IO](https://github.com/socketio/engine.io), which first establishes a long-polling connection, then tries to upgrade to better transports that are "tested" on the side, like WebSocket. Please see the [Goals](https://github.com/socketio/engine.io#goals) section for more information. + +#### Auto-reconnection support + +Unless instructed otherwise a disconnected client will try to reconnect forever, until the server is available again. Please see the available reconnection options [here](https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options). + +#### Disconnection detection + +A heartbeat mechanism is implemented at the Engine.IO level, allowing both the server and the client to know when the other one is not responding anymore. + +That functionality is achieved with timers set on both the server and the client, with timeout values (the `pingInterval` and `pingTimeout` parameters) shared during the connection handshake. Those timers require any subsequent client calls to be directed to the same server, hence the `sticky-session` requirement when using multiples nodes. + +#### Binary support + +Any serializable data structures can be emitted, including: + +- [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) in the browser +- [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [Buffer](https://nodejs.org/api/buffer.html) in Node.js + +#### Simple and convenient API + +Sample code: + +```js +io.on('connection', socket => { + socket.emit('request', /* … */); // emit an event to the socket + io.emit('broadcast', /* … */); // emit an event to all connected sockets + socket.on('reply', () => { /* … */ }); // listen to the event +}); +``` + +#### Cross-browser + +Browser support is tested in Saucelabs: + +[![Sauce Test Status](https://saucelabs.com/browser-matrix/socket.svg)](https://saucelabs.com/u/socket) + +#### Multiplexing support + +In order to create separation of concerns within your application (for example per module, or based on permissions), Socket.IO allows you to create several `Namespaces`, which will act as separate communication channels but will share the same underlying connection. + +#### Room support + +Within each `Namespace`, you can define arbitrary channels, called `Rooms`, that sockets can join and leave. You can then broadcast to any given room, reaching every socket that has joined it. + +This is a useful feature to send notifications to a group of users, or to a given user connected on several devices for example. + + +**Note:** Socket.IO is not a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the ack id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server (like `ws://echo.websocket.org`) either. Please see the protocol specification [here](https://github.com/socketio/socket.io-protocol). + +## Installation + +```bash +npm install socket.io +``` + +## How to use + +The following example attaches socket.io to a plain Node.JS +HTTP server listening on port `3000`. + +```js +const server = require('http').createServer(); +const io = require('socket.io')(server); +io.on('connection', client => { + client.on('event', data => { /* … */ }); + client.on('disconnect', () => { /* … */ }); +}); +server.listen(3000); +``` + +### Standalone + +```js +const io = require('socket.io')(); +io.on('connection', client => { ... }); +io.listen(3000); +``` + +### In conjunction with Express + +Starting with **3.0**, express applications have become request handler +functions that you pass to `http` or `http` `Server` instances. You need +to pass the `Server` to `socket.io`, and not the express application +function. Also make sure to call `.listen` on the `server`, not the `app`. + +```js +const app = require('express')(); +const server = require('http').createServer(app); +const io = require('socket.io')(server); +io.on('connection', () => { /* … */ }); +server.listen(3000); +``` + +### In conjunction with Koa + +Like Express.JS, Koa works by exposing an application as a request +handler function, but only by calling the `callback` method. + +```js +const app = require('koa')(); +const server = require('http').createServer(app.callback()); +const io = require('socket.io')(server); +io.on('connection', () => { /* … */ }); +server.listen(3000); +``` + +## Documentation + +Please see the documentation [here](/docs/README.md). Contributions are welcome! + +## Debug / logging + +Socket.IO is powered by [debug](https://github.com/visionmedia/debug). +In order to see all the debug output, run your app with the environment variable +`DEBUG` including the desired scope. + +To see the output from all of Socket.IO's debugging scopes you can use: + +``` +DEBUG=socket.io* node myapp +``` + +## Testing + +``` +npm test +``` +This runs the `gulp` task `test`. By default the test will be run with the source code in `lib` directory. + +Set the environmental variable `TEST_VERSION` to `compat` to test the transpiled es5-compat version of the code. + +The `gulp` task `test` will always transpile the source code into es5 and export to `dist` first before running the test. + + +## Backers + +Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/socketio#backer)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## Sponsors + +Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/socketio#sponsor)] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +## License + +[MIT](LICENSE) diff --git a/.pnpm-store/v11/files/48/872c010728caf2824bbb6447fa58400f1d7dbc436144f35fdcd47c00cd37b309a68ac3969ab516e4c0d8ea8f289c37946ad94221135f873d36c96a32121ff2 b/.pnpm-store/v11/files/48/872c010728caf2824bbb6447fa58400f1d7dbc436144f35fdcd47c00cd37b309a68ac3969ab516e4c0d8ea8f289c37946ad94221135f873d36c96a32121ff2 new file mode 100644 index 00000000..056c0fae --- /dev/null +++ b/.pnpm-store/v11/files/48/872c010728caf2824bbb6447fa58400f1d7dbc436144f35fdcd47c00cd37b309a68ac3969ab516e4c0d8ea8f289c37946ad94221135f873d36c96a32121ff2 @@ -0,0 +1,48 @@ +{ + "name": "preserve", + "description": "Temporarily substitute tokens in the given `string` with placeholders, then put them back after transforming the string.", + "version": "0.2.0", + "homepage": "https://github.com/jonschlinkert/preserve", + "author": { + "name": "Jon Schlinkert", + "url": "https://github.com/jonschlinkert" + }, + "repository": { + "type": "git", + "url": "git://github.com/jonschlinkert/preserve.git" + }, + "bugs": { + "url": "https://github.com/jonschlinkert/preserve/issues" + }, + "license": { + "type": "MIT", + "url": "https://github.com/jonschlinkert/preserve/blob/master/LICENSE-MIT" + }, + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha -R spec" + }, + "devDependencies": { + "benchmarked": "^0.1.3", + "chalk": "^0.5.1", + "js-beautify": "^1.5.4", + "mocha": "*", + "should": "*" + }, + "keywords": [ + "escape", + "format", + "placeholder", + "placeholders", + "prettify", + "regex", + "replace", + "template", + "templates", + "token", + "tokens" + ] +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/48/8deab503646070e173579faf5773d279c3dcc8ab0e4238f8efd2d22a6656b3dc268d74e8a271b60e93889273147c8ef4beddebe464d902c7c46afd160103f8 b/.pnpm-store/v11/files/48/8deab503646070e173579faf5773d279c3dcc8ab0e4238f8efd2d22a6656b3dc268d74e8a271b60e93889273147c8ef4beddebe464d902c7c46afd160103f8 new file mode 100644 index 00000000..620912d8 --- /dev/null +++ b/.pnpm-store/v11/files/48/8deab503646070e173579faf5773d279c3dcc8ab0e4238f8efd2d22a6656b3dc268d74e8a271b60e93889273147c8ef4beddebe464d902c7c46afd160103f8 @@ -0,0 +1,2122 @@ +{ + "ALL_COMPILER_OPTIONS_6917": "所有編譯器選項", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "'{0}' 修飾元無法與匯入宣告並用。", + "A_0_parameter_must_be_the_first_parameter_2680": "'{0}' 參數必須為第一個參數。", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "JSDoc '@template' 標籤不能接在 '@typedef'、'@callback' 或 '@overload' 標籤後面", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "JSDoc '@typedef' 註解不能包含多個 '@type' 標籤。", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "無法使用 'bigint' 常值做為屬性名稱。", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Bigint 常值不可使用指數標記法。", + "A_bigint_literal_must_be_an_integer_1353": "Bigint 常值必須為整數。", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "實作簽章中不得省略繫結模式參數。", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "'break' 陳述式只可在封入的反覆項目或 switch 陳述式內使用。", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "'break' 陳述式只可跳至封入之陳述式的標籤。", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "字元類別不得包含保留的雙標點符號。您是要使用反斜線將其逸出嗎?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "字元類別範圍不得被另一個字元類別限制。", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "類別只能實作具有選擇性型別引數的識別碼/限定名稱。", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "類別只能使用靜態已知成員來實作物件類型或物件類型的交集。", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "無法延伸基本類型的類別,例如 '{0}'。類別只能延伸可建構值。", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "無法實作基本類型的類別,例如 '{0}'。該類別只能實作其他具名物件類型。", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "不具 'default' 修飾元的類別宣告必須要有名稱。", + "A_class_member_cannot_have_the_0_keyword_1248": "類別成員不能含有 '{0}' 關鍵字。", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "計算的屬性名稱中不可有逗點運算式。", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "計算的屬性名稱不得參考其包含類型中的型別參數。", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "類別屬性宣告中的已計算屬性名稱必須具有簡單常值型別或 'unique symbol' 型別。", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "方法多載中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "常值型別中的計算屬性名稱,必須參考類型為常值型別或 'unique symbol' 類型的運算式。", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "環境內容中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "介面中的計算屬性名稱必須參考型別為常值型別或 'unique symbol' 型別的運算式。", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "計算的屬性名稱必須是 'string'、'number'、'symbol' 或 'any' 類型。", + "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355": "'const' 判斷提示只可套用至列舉成員、字串、數字、布林值、陣列或物件常值的參考。", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "若要存取常數列舉成員,必須透過字串常值。", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "環境內容中的 'const' 初始設定式必須為字串、數字常值或常值列舉參考。", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "當建構函式的類別擴充為 'null' 時,不得包含 'super' 呼叫。", + "A_constructor_cannot_have_a_this_parameter_2681": "建構函式不能含有 'this' 參數。", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "'continue' 陳述式只可在封入的反覆項目陳述式內使用。", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "'continue' 陳述式只可跳至封入之反覆項目陳述式的標籤。", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "沒有 'import type' 就無法匯入宣告檔案。您是否想要改為匯入實作檔案 '{0}'?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "不得在現有環境內容中使用 'declare' 修飾元。", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "一個裝飾項目只能裝飾一項方法實作,而不能多載。", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "'default' 子句在 'switch' 陳述式中不得出現一次以上。", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "預設匯出只能在 ECMAScript 樣式的模組中使用。", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "預設匯出必須位於檔案或模組宣告的最上層。", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "此內容不允許明確的指派判斷提示 '!'。", + "A_destructuring_declaration_must_have_an_initializer_1182": "解構宣告中必須包含初始設定式。", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "ES5 中的動態匯入呼叫需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "動態匯入呼叫傳回 'Promise'。請確認您有 'Promise' 的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "A_file_cannot_have_a_reference_to_itself_1006": "檔案不得參考自己。", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "會傳回 'never' 的功能不得具有可聯繫的端點。", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "透過 'new' 關鍵字呼叫的函式不能含有為 'viod' 的 'this' 類型。", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "若函式的宣告類型既不是 'undefined'、'void' 也不是 'any',則必須傳回值。", + "A_generator_cannot_have_a_void_type_annotation_2505": "產生器不得有 'void' 類型註釋。", + "A_get_accessor_cannot_have_parameters_1054": "'get' 存取子不得有參數。", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "get 存取子必須至少要跟 setter 一樣可供存取", + "A_get_accessor_must_return_a_value_2378": "'get' 存取子必須傳回值。", + "A_label_is_not_allowed_here_1344": "此處不允許標籤。", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "標記的元組元素已宣告為選用,並在名稱之後、冒號之前加上問號,而非加在類型之後。", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "標記的元組元素已宣告為待用,並在名稱之前加上「...」,而非加在類型之前。", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "對應型別不能宣告屬性或方法。", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "列舉宣告中的成員初始設定式,不得參考在它之後宣告的成員,包括在其他列舉中所定義的成員。", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "mixin 類別必須具備建構函式,且該建構函式必須指定一個類型為 'any[]' 的 rest 參數。", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "從包含抽象建構簽章之類型變數所延伸的 mixin 類別也必須宣告為 'abstract'。", + "A_module_cannot_have_multiple_default_exports_2528": "一個模組不得有多個預設匯出。", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "命名空間宣告的所在檔案位置,不得與其要合併的類別或函式不同。", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "命名空間宣告的位置不得先於其要合併的類別或函式。", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "命名空間宣告只允許在命名空間或模組的頂層。", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "不應該使用 'module' 關鍵字宣告 'namespace' 宣告。請改為使用 'namespace' 關鍵字。", + "A_non_dry_build_would_build_project_0_6357": "非 -dry 組建會建置專案 '{0}'", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "非 -dry 組建會刪除下列檔案: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "非 DRY 組建將會更新專案 '{0}' 輸出的時間戳記", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "只有函式或建構函式實作才可使用參數初始設定式。", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "無法使用剩餘參數宣告參數屬性。", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "建構函式實作中只可有一個參數屬性。", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "無法使用繫結模式宣告參數屬性。", + "A_promise_must_have_a_then_method_1059": "Promise 必須有 'then' 方法。", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "類型為 'unique symbol' 類型的類別屬性,必須為 'static' 和 'readonly'。", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "類型為 'unique symbol' 類型之介面或常值型別的屬性,必須是 'readonly'。", + "A_required_element_cannot_follow_an_optional_element_1257": "必要項目不可接在選擇性項目後面。", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "必要參數不得接在選擇性參數之後。", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "剩餘項目不得包含繫結模式。", + "A_rest_element_cannot_follow_another_rest_element_1265": "REST 元素不能跟在另一個 REST 元素之後。", + "A_rest_element_cannot_have_a_property_name_2566": "REST 元素不得有屬性名稱。", + "A_rest_element_cannot_have_an_initializer_1186": "剩餘項目不得有初始設定式。", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Rest 項目必須保持在解構模式。", + "A_rest_element_type_must_be_an_array_type_2574": "其餘項目類型必須為陣列類型。", + "A_rest_parameter_cannot_be_optional_1047": "剩餘參數不得為選擇性參數。", + "A_rest_parameter_cannot_have_an_initializer_1048": "剩餘參數不得有初始設定式。", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "剩餘參數必須是參數清單中的最後一個參數。", + "A_rest_parameter_must_be_of_an_array_type_2370": "剩餘參數必須為陣列類型。", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "REST 參數或繫結模式的結尾不得為逗點。", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "'return' 陳述式只可在函式主體內使用。", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "'return' 陳述式無法在類別靜態區塊內使用。", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "一系列由重新對應匯入到 'baseUrl' 之相對查詢位置的項目。", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "'set' 存取子不得有傳回型別註解。", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "'set' 存取子不得有選擇性參數。", + "A_set_accessor_cannot_have_rest_parameter_1053": "'set' 存取子不得有剩餘參數。", + "A_set_accessor_must_have_exactly_one_parameter_1049": "'set' 存取子只可有一個參數。", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "'set' 存取子參數不得有初始設定式。", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "擴張引數必須具有元組類型或傳遞給 REST 參數。", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "'super' 呼叫必須是衍生類別 (包含初始化屬性、參數屬性或私人識別碼) 建構函式內的根等級陳述式。", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "當衍生類別包含已初始化的屬性、參數屬性或私人識別碼時,'super' 呼叫必須為建構函式中第一個參照 'super' 或 'this' 的陳述式。", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "以 'this' 為基礎的類型成立條件,和以參數為基礎的類型成立條件不相容。", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "'this' 類型只適用於類別或介面的非靜態成員。", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "啟用 'verbatimModuleSyntax' 時,CommonJS 模組中的值宣告不得使用最上層 'export' 修飾元。", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "'tsconfig.json' 檔案已定義於: '{0}'。", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "元組成員不能同時為選用及待用。", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "元組類型無法以負值編製索引。", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "乘冪運算式左邊不允許類型宣告運算式。請考慮以括弧括住運算式。", + "A_type_literal_property_cannot_have_an_initializer_1247": "類型常值屬性不得有初始設定式。", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "僅限類型的匯入可以指定預設匯入或具名繫結,但不能同時指定兩者。", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "型別述詞不得參考剩餘參數。", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "型別述詞不得參考繫結模式的項目 '{0}'。", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "只有函式及方法的傳回型別位置才允許型別述詞。", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "類型述詞的類型必須可指派給其參數的類型。", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "啟用 'isolatedModules' 和 'emitDecoratorMetadata' 時,修飾簽章中參考的類型必須以 'import type' 或命名空間匯入來匯入。", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "型別為 'unique symbol' 型別的變數必須是 'const'。", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "只有產生器主體才允許 'yield' 運算式。", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "無法透過 super 運算式存取類別 '{1}' 中的抽象方法 '{0}'。", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "抽象方法只可出現在抽象類別中。", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "抽象方法只可出現在抽象屬性中。", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "無法從建構函式存取類別 '{1}' 中的抽象屬性 '{0}'。", + "Accessibility_modifier_already_seen_1028": "已有存取範圍修飾元。", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "只有當目標為 ECMAScript 5 及更高版本時,才可使用存取子。", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "存取子必須兩者均為抽象或非抽象。", + "Add_0_to_unresolved_variable_90008": "對未解析的變數新增 '{0}.'", + "Add_a_return_statement_95111": "新增 return 陳述式", + "Add_a_return_type_to_the_function_declaration_9031": "新增傳回類型到函數宣告。", + "Add_a_return_type_to_the_function_expression_9030": "新增傳回類型到函數運算式。", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "新增傳回類型至 get 存取子宣告。", + "Add_a_return_type_to_the_method_9034": "新增傳回類型至方法", + "Add_a_type_annotation_to_the_parameter_0_9028": "新增類型註釋至參數 {0}。", + "Add_a_type_annotation_to_the_property_0_9029": "新增類型註釋至屬性 {0}。", + "Add_a_type_annotation_to_the_variable_0_9027": "新增類型註釋至變數 {0}。", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "將類型新增至集合存取子宣告的參數。", + "Add_all_missing_async_modifiers_95041": "新增缺少的所有 'async' 修飾元", + "Add_all_missing_attributes_95168": "新增所有遺失的屬性", + "Add_all_missing_call_parentheses_95068": "新增所有缺少的呼叫括號", + "Add_all_missing_function_declarations_95157": "新增所有缺少的函式宣告", + "Add_all_missing_imports_95064": "新增所有缺少的匯入", + "Add_all_missing_members_95022": "新增遺漏的所有成員", + "Add_all_missing_override_modifiers_95162": "新增所有缺少的 'override' 修飾元", + "Add_all_missing_parameters_95190": "新增所有遺失的參數", + "Add_all_missing_properties_95166": "新增所有遺失的屬性", + "Add_all_missing_return_statement_95114": "新增所有遺漏的 return 陳述式", + "Add_all_missing_super_calls_95039": "新增缺少的所有 super 呼叫", + "Add_all_missing_type_annotations_90067": "新增所有遺失的類型註釋", + "Add_all_optional_parameters_95193": "新增所有選用參數", + "Add_annotation_of_type_0_90062": "新增類型 '{0}' 的註釋", + "Add_async_modifier_to_containing_function_90029": "將 async 修飾元新增至包含的函式", + "Add_await_95083": "新增 'await'", + "Add_await_to_initializer_for_0_95084": "將 'await' 新增至 '{0}' 的初始設定式", + "Add_await_to_initializers_95089": "將 'await' 新增至初始設定式", + "Add_braces_to_arrow_function_95059": "將大括號新增至箭號函式", + "Add_const_to_all_unresolved_variables_95082": "將 'const' 新增至所有未解析的變數", + "Add_const_to_unresolved_variable_95081": "將 'const' 新增至未解析的變數", + "Add_definite_assignment_assertion_to_property_0_95020": "將明確指派判斷提示新增至屬性 '{0}'", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "為所有未初始化的屬性新增明確的指派判斷提示", + "Add_export_to_make_this_file_into_a_module_95097": "新增 'export {}' 以將此檔案轉為模組", + "Add_extends_constraint_2211": "新增 'extends' 限制式。", + "Add_extends_constraint_to_all_type_parameters_2212": "將 'extends' 限制式新增至所有類型參數", + "Add_import_from_0_90057": "從 \"{0}\" 新增匯入", + "Add_index_signature_for_property_0_90017": "為屬性 '{0}' 新增索引簽章", + "Add_initializer_to_property_0_95019": "將初始設定式新增至屬性 '{0}'", + "Add_initializers_to_all_uninitialized_properties_95027": "為所有未初始化的屬性新增初始設定式", + "Add_missing_attributes_95167": "新增遺失的屬性", + "Add_missing_call_parentheses_95067": "新增缺少的呼叫括號", + "Add_missing_comma_for_object_member_completion_0_95187": "為物件成員完成 '{0}' 新增遺漏的逗號。", + "Add_missing_enum_member_0_95063": "新增缺少的列舉成員 '{0}'", + "Add_missing_function_declaration_0_95156": "新增缺少的函式宣告 '{0}'", + "Add_missing_new_operator_to_all_calls_95072": "將缺少的 'new' 運算子新增至所有呼叫", + "Add_missing_new_operator_to_call_95071": "缺少的 'new' 運算子新增至呼叫", + "Add_missing_parameter_to_0_95188": "新增遺失的參數至 '{0}'", + "Add_missing_parameters_to_0_95189": "新增遺失的參數至 '{0}'", + "Add_missing_properties_95165": "新增遺失的屬性", + "Add_missing_super_call_90001": "新增遺漏的 'super()' 呼叫", + "Add_missing_typeof_95052": "新增遺漏的 'typeof'", + "Add_names_to_all_parameters_without_names_95073": "將名稱新增至所有沒有名稱的參數", + "Add_optional_parameter_to_0_95191": "新增選用參數至 '{0}'", + "Add_optional_parameters_to_0_95192": "將選用參數新增至 '{0}'", + "Add_or_remove_braces_in_an_arrow_function_95058": "在箭號函式中新增或移除大括號", + "Add_override_modifier_95160": "新增 'override' 修飾元", + "Add_parameter_name_90034": "新增參數名稱", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "對所有比對成員名稱的未解析變數新增限定詞", + "Add_resolution_mode_import_attribute_95196": "新增 'resolution-mode' 匯入屬性", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "將 'resolution-mode' 匯入屬性新增至所有需要該屬性的僅限類型匯入", + "Add_return_type_0_90063": "新增傳回類型 '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "在此運算式中新增 satisfies 和類型判斷提示 (將 T 視為 T),使類型明確顯示。", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "新增 satisfies 和具有 '{0}' 的內嵌類型判斷提示", + "Add_to_all_uncalled_decorators_95044": "為所有未呼叫的裝飾項目新增 '()'", + "Add_ts_ignore_to_all_error_messages_95042": "為所有錯誤訊息新增 '@ts-ignore'", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "使用索引進行存取時,將 'undefined' 新增至類型。", + "Add_undefined_to_optional_property_type_95169": "將 'undefined' 新增至選擇性屬性類型", + "Add_undefined_type_to_all_uninitialized_properties_95029": "為所有未初始化的屬性新增未定義的類型", + "Add_undefined_type_to_property_0_95018": "將 'undefined' 類型新增至屬性 '{0}'", + "Add_unknown_conversion_for_non_overlapping_types_95069": "新增非重疊類型的 'unknown' 轉換", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "將 'unknown' 新增至非重疊類型的所有轉換", + "Add_void_to_Promise_resolved_without_a_value_95143": "為已經解析但不具值的 Promise 新增 'void'", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "為已經解析但不具值的所有 Promise 新增 'void'", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "新增 tsconfig.json 檔案有助於組織同時包含 TypeScript 及 JavaScript 檔案的專案。若要深入了解,請前往 https://aka.ms/tsconfig。", + "All_declarations_of_0_must_have_identical_constraints_2838": "'{0}' 的所有宣告都必須有相同的限制式。", + "All_declarations_of_0_must_have_identical_modifiers_2687": "'{0}' 的所有宣告都必須有相同修飾元。", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "'{0}' 的所有宣告都必須具有相同的類型參數。", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "抽象方法的所有宣告必須連續。", + "All_destructured_elements_are_unused_6198": "不會使用所有未經結構化的項目。", + "All_imports_in_import_declaration_are_unused_6192": "匯入宣告中的所有匯入皆未使用。", + "All_type_parameters_are_unused_6205": "未使用任何型別參數。", + "All_variables_are_unused_6199": "所有變數都未使用。", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "允許 JavaScript 檔案成為您程式的一部分。使用 'checkJs' 選項可從這些檔案取得錯誤。", + "Allow_accessing_UMD_globals_from_modules_6602": "允許從模組存取 UMD 全域。", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "允許從沒有預設匯出的模組進行預設匯入。這不會影響程式碼發出,僅為類型檢查。", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "當模組沒有預設匯出時,允許 'import x from y'。", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "允許每個專案只從 tslib 匯入協助程式函式,而不是每個檔案都包含這些函式。", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "允許匯入包含 TypeScript 延伸模組。需要設定 '--moduleResolution bundler' 和 '--noEmit' 或 '--emitDeclarationOnly'。", + "Allow_javascript_files_to_be_compiled_6102": "允許編譯 JavaScript 檔案。", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "在解析模組時,允許將多個資料夾視為一個資料夾。", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "已包含的檔案名稱 '{0}' 與檔案名稱 '{1}' 僅大小寫不同。", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "環境模組宣告不可指定相對模組名稱。", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "環境模組不得以巢狀方式置於其他模組或命名空間中。", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "AMD 模組不能有多個名稱指派。", + "An_abstract_accessor_cannot_have_an_implementation_1318": "抽象存取子無法實作。", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "協助工具修飾元不可搭配私人識別碼使用。", + "An_accessor_cannot_have_type_parameters_1094": "存取子不得有類型參數。", + "An_accessor_property_cannot_be_declared_optional_1276": "無法將 'accessor' 屬性宣告為選擇性。", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "環境模組宣告只可出現在檔案的最上層。", + "An_argument_for_0_was_not_provided_6210": "未提供 '{0}' 的引數。", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "未提供符合此繫結模式的引數。", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "算術運算元必須屬於 'any'、'number'、'bigint' 或列舉類型。", + "An_arrow_function_cannot_have_a_this_parameter_2730": "箭號函式不可具有 'this' 參數。", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "ES5 中的非同步函式或方法需要 'Promise' 建構函式。請確認您有 'Promise' 建構函式的宣告,或在 '--lib' 選項中包括 'ES2015'。", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "非同步函式或方法必須傳回 'Promise'。請確定您有 'Promise' 的宣告或在 '--lib' 選項中包括 'ES2015'。", + "An_async_iterator_must_have_a_next_method_2519": "非同步迭代器必須有 'next()' 方法。", + "An_element_access_expression_should_take_an_argument_1011": "項目存取運算式應接受一個引數。", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "列舉成員不能以私人識別碼命名。", + "An_enum_member_cannot_have_a_numeric_name_2452": "列舉成員不得有數值名稱。", + "An_enum_member_name_must_be_followed_by_a_or_1357": "列舉成員名稱必須尾隨 ','、'=' 或 '}'。", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "此資訊展開的版本,顯示所有可能的編譯器選項", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "匯出指派不得用於具有其他匯出項目的模組中。", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "命名空間中不可使用匯出指派。", + "An_export_assignment_cannot_have_modifiers_1120": "匯出指派不得有修飾元。", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "匯出指派必須位於檔案或模組宣告的最上層。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "匯出宣告只能在模組的頂層使用。", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "匯出宣告只能在命名空間或模組的頂層使用。", + "An_export_declaration_cannot_have_modifiers_1193": "匯出宣告不得有修飾元。", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "啟用 'verbatimModuleSyntax' 時,'export =' 宣告必須參考值,但 '{0}' 僅參考類型。", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "啟用 'verbatimModuleSyntax' 時,'export default' 必須參考真實的值,但 '{0}' 解析僅限類型的宣告。", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "啟用 'verbatimModuleSyntax' 時,'export default' 宣告必須參考值,但 '{0}' 僅參考類型。", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "無法對 'void' 類型的運算式測試真實性。", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "擴充的 Unicode 逸出值必須介於 0x0 與 0x10FFFF (不含) 之間。", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "識別碼或關鍵字不可直接接在數字常值後面。", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "不得在環境內容中宣告實作。", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "匯入別名不能參考使用 'export type' 匯出的宣告。", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "匯入別名不能參考使用 'import type' 匯入的宣告。", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "啟用 'verbatimModuleSyntax' 時,無法解析匯入別名為類型或僅類型的宣告。", + "An_import_alias_cannot_use_import_type_1392": "匯入別名不能使用 'import type'", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "匯入宣告只能在模組的頂層使用。", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "匯入宣告只能在命名空間或模組的頂層使用。", + "An_import_declaration_cannot_have_modifiers_1191": "匯入宣告不得有修飾元。", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "當 'allowImportingTsExtensions' 啟用時,匯入路徑只能以 '{0}' 延伸模組結尾。", + "An_index_signature_cannot_have_a_rest_parameter_1017": "索引簽章不得有剩餘參數。", + "An_index_signature_cannot_have_a_trailing_comma_1025": "索引簽章結尾不可有逗號。", + "An_index_signature_must_have_a_type_annotation_1021": "索引簽章必須有類型註釋。", + "An_index_signature_must_have_exactly_one_parameter_1096": "索引簽章只可有一個參數。", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "索引簽章參數不得有問號。", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "索引簽章參數不得有存取範圍修飾元。", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "索引簽章參數不得有初始設定式。", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "索引簽章參數必須有類型註釋。", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "索引簽章參數類型不能是常值型別或泛型型別。請考慮改用對應的物件類型。", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "索引簽章參數類型必須是 'string'、'number'、'symbol' 或範本文字類型。", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "具現化運算式後面不能接著屬性存取。", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "介面只能擴充具有選擇性型別引數的識別碼/限定名稱。", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "介面只能延伸物件類型或具有靜態已知成員的物件類型交集。", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "無法延伸基本類型的介面,例如 '{0}'。其只能延伸其他具名物件類型。", + "An_interface_property_cannot_have_an_initializer_1246": "介面屬性不得有初始設定式。", + "An_iterator_must_have_a_next_method_2489": "迭代器必須要有 'next()' 方法。", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "在 JSX 片段使用 @jsx pragma 時,必須有 @jsxFrag pragma。", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "物件常值不得有多個同名的 get/set 存取子。", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "物件常值不能有多個相同名稱的屬性。", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "物件常值不得有同名的屬性與存取子。", + "An_object_member_cannot_be_declared_optional_1162": "不得將物件成員宣告為選擇性。", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "物件的 '[Symbol.hasInstance]' 方法必須傳回布林值,才能用於 『instanceof』 運算式的右側。", + "An_optional_chain_cannot_contain_private_identifiers_18030": "選擇性鏈結不能包含私人識別碼。", + "An_optional_element_cannot_follow_a_rest_element_1266": "選擇性元素不能跟在 REST 元素之後。", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "此容器已陰影 'this' 的外部值。", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "不可將多載簽章宣告為產生器。", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "乘冪運算式左邊不允許具 '{0}' 運算子的一元運算式。請考慮以括弧括住運算式。", + "Annotate_everything_with_types_from_JSDoc_95043": "標註具備 JSDoc 之類型的所有項目 ", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "為命名空間中的屬性 expando 函式類型加上標註", + "Annotate_with_type_from_JSDoc_95009": "為來自 JSDoc 的類型標註", + "Another_export_default_is_here_2753": "其他匯出預設位於此處。", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "只有在設定 Unicode 設定 (v) 旗標時,才能使用任何可能比對超過一個字元的 Unicode 屬性。", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "在否定字元類別中,任何可能比對超過一個字元的專案都無效。", + "Are_you_missing_a_semicolon_2734": "缺少分號嗎?", + "Argument_expression_expected_1135": "必須是引數運算式。", + "Argument_for_0_option_must_be_Colon_1_6046": "'{0}' 選項的引數必須是: {1}。", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "動態匯入的引數不能是擴張元素。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "類型 '{0}' 的引數不可指派給類型 '{1}' 的參數。", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "類型 '{0}' 的引數無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}' 的參數。請考慮將 'undefined' 新增到目標屬性的類型。", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "未提供其餘參數 '{0}' 的引數。", + "Array_element_destructuring_pattern_expected_1181": "必須是陣列項目解構模式。", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "具有擴張元素的陣列無法使用 --isolatedDeclarations 推斷。", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "判斷提示要求必須以明確的型別註解宣告呼叫目標中的每個名稱。", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "判斷提示要求呼叫目標必須為識別碼或限定名稱。", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "在未宣告的情況下,--isolatedDeclarations 不支援指派屬性給函式。新增指派給此函式之屬性的明確宣告。", + "Asterisk_Slash_expected_1010": "必須是 '*/'。", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "至少一個存取子必須有具備 --isolatedDeclarations 的明確型別註釋。", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "全域範圍的增強指定只能在外部模組宣告或環境模組宣告直接巢狀。", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "除非全域範圍的增強指定已顯示在環境內容中,否則應含有 'declare' 修飾元。", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "專案 '{0}' 中已啟用鍵入的自動探索。正在使用快取位置 '{2}' 執行模組 '{1}' 的額外解析傳遞。", + "BUILD_OPTIONS_6919": "建置選項", + "Backwards_Compatibility_6253": "回溯相容性", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "基底類別運算式無法參考類別型別參數。", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "基底建構函式傳回型別 '{0}' 不是物件類型或具有靜態已知成員的物件類型交集。", + "Base_constructors_must_all_have_the_same_return_type_2510": "基底建構函式的傳回型別必須全部相同。", + "Base_directory_to_resolve_non_absolute_module_names_6083": "要解析非絕對模組名稱的基底目錄。", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "當目標低於 ES2020 時,無法使用 BigInt 常值。", + "Binary_digit_expected_1177": "必須是二進位數字。", + "Binding_element_0_implicitly_has_an_1_type_7031": "繫結元素 '{0}' 隱含擁有 '{1}' 類型。", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "無法使用 --isolatedDeclarations 直接匯出繫結元素。", + "Block_scoped_variable_0_used_before_its_declaration_2448": "已在其宣告之前使用區塊範圍變數 '{0}'。", + "Build_a_composite_project_in_the_working_directory_6925": "在工作目錄中建置複合專案。", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "建置包括似乎已是最新狀態的所有專案。", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "若已過期,則建置一或多個專案及其相依性", + "Build_option_0_requires_a_value_of_type_1_5073": "組建選項 '{0}' 需要 {1} 類型的值。", + "Building_project_0_6358": "正在建置專案 '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "內建 iterators 會以 'undefined' 而非 'any' 的 'TReturn' 類型具現化。", + "COMMAND_LINE_FLAGS_6921": "命令列旗標", + "COMMON_COMMANDS_6916": "一般命令", + "COMMON_COMPILER_OPTIONS_6920": "一般編譯器選項", + "Call_decorator_expression_90028": "呼叫裝飾項目運算式", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "呼叫簽章傳回型別 '{0}' 與 '{1}' 不相容。", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "缺少傳回型別註解的呼叫簽章隱含了 'any' 傳回型別。", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "無引數呼叫簽章的傳回型別 '{0}' 與 '{1}' 不相容。", + "Call_target_does_not_contain_any_signatures_2346": "呼叫目標未包含任何特徵標記。", + "Can_only_convert_logical_AND_access_chains_95142": "只可轉換邏輯 AND 存取鏈結", + "Can_only_convert_named_export_95164": "只能轉換具名匯出", + "Can_only_convert_property_with_modifier_95137": "只能轉換具有修飾元的屬性", + "Can_only_convert_string_concatenations_and_string_literals_95154": "只能轉換字串串連和字串常值", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "因為 '{0}' 是類型而非命名空間,所以無法存取 '{0}.{1}'。您要在 '{0}' 中使用 '{0}[\"{1}\"]' 擷取屬性 '{1}' 的類型嗎?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "啟用 '{1}' 時,無法從另一個不具備資格的檔案存取 '{0}'。請改用 '{2}'。", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "啟用 '{0}' 時,無法存取環境連續列舉。", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "無法將 '{0}' 建構函式類型指派至 '{1}' 建構函式類型。", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "無法將抽象建構函式類型指派給非抽象建構函式類型。", + "Cannot_assign_to_0_because_it_is_a_class_2629": "無法指派至 '{0}',因為其為類別。", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "因為 '{0}' 為常數,所以無法指派至 '{0}'。", + "Cannot_assign_to_0_because_it_is_a_function_2630": "無法指派至 '{0}',因為其為函式。", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "無法指派至 '{0}',因為其為命名空間。", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "因為 '{0}' 為唯讀屬性,所以無法指派至 '{0}'。", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "無法指派至 '{0}',因為其為列舉。", + "Cannot_assign_to_0_because_it_is_an_import_2632": "無法指派至 '{0}',因為其為匯入。", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "無法指派至 '{0}',因為它不是變數。", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "無法指派給私人方法 '{0}'。私人方法無法寫入。", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "因為模組 '{0}' 會解析為非模組實體,所以無法加以增強。", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "無法使用值匯出擴充模組 '{0}',因為其會解析為非模組實體。", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "除非 '--module' 旗標為 'amd' 或 'system',否則無法使用選項 '{0}' 編譯模組。", + "Cannot_create_an_instance_of_an_abstract_class_2511": "無法建立抽象類別的執行個體。", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "因為值的迭代器 'next' 方法需要類型 '{1}',但所包含的產生器永遠會傳送 '{0}',所以無法將反覆項目委派給值。", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "無法匯出 '{0}'。只有區域宣告可以從模組匯出。", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "無法延伸類別 '{0}'。類別建構函式已標記為私用。", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "無法擴充介面 '{0}',您意指「實作」嗎?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "在目前的目錄中找不到 tsconfig.json 檔案: {0}。", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "在指定的目錄 '{0}' 中找不到 tsconfig.json 檔案。", + "Cannot_find_global_type_0_2318": "找不到全域類型 '{0}'。", + "Cannot_find_global_value_0_2468": "找不到全域值 '{0}'。", + "Cannot_find_lib_definition_for_0_2726": "找不到 '{0}' 的程式庫定義。", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "找不到 '{0}' 的程式庫定義。您是指 '{1}' 嗎?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "找不到模組 '{0}'。建議使用 '--resolveJsonModule',匯入副檔名為 '.json' 的模組。", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "找不到模組 '{0}'。您是要將 'moduleResolution' 選項設為 'nodenext',或是要將別名新增至 'paths' 選項?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "找不到模組 '{0}' 或其對應的型別宣告。", + "Cannot_find_name_0_2304": "找不到名稱 '{0}'。", + "Cannot_find_name_0_Did_you_mean_1_2552": "找不到名稱 '{0}'。您指的是 '{1}' 嗎?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "找不到名稱 '{0}'。您要找的是此執行個體成員 'this.{0}' 嗎?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "找不到名稱 '{0}'。您要找的是此靜態成員 '{1}.{0}' 嗎?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "找不到名稱 '{0}'。您是否想要在非同步函數中寫入此專案?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為「{1}」或更新版本。", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "找不到名稱「{0}」。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為包含 'dom'。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "找不到名稱 '{0}'。需要為 Bun 安裝類型定義嗎?請嘗試 `npm i --save-dev @types/bun`,然後將 'bun' 新增至 tsconfig 中的類型欄位。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "找不到名稱 '{0}'。需要安裝測試執行器的型別定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "找不到名稱「{0}」。需要為測試執行器安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jest` 或 `npm i --save-dev @types/mocha`,然後將 `jest` 或 `mocha` 新增至 tsconfig 中的類型欄位。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "找不到名稱 '{0}'。需要安裝 jQuery 的型別定義嗎? 請嘗試 `npm i --save-dev @types/jquery`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "找不到名稱「{0}」。需要為 jQuery 安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/jquery`,然後將 `jquery` 新增至 tsconfig 中的類型欄位。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "找不到名稱 '{0}'。需要安裝節點的型別定義嗎? 請嘗試 `npm i --save-dev @types/node`。", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "找不到名稱「{0}」。需要為節點安裝類型定義嗎? 請嘗試 `npm i --save-dev @types/node`,然後將 `node` 新增至 tsconfig 中的類型欄位。", + "Cannot_find_namespace_0_2503": "找不到命名空間 '{0}'。", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "找不到命名空間 '{0}'。您是不是指 '{1}'?", + "Cannot_find_parameter_0_1225": "找不到參數 '{0}'。", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "找不到輸入檔的一般子目錄路徑。", + "Cannot_find_type_definition_file_for_0_2688": "找不到 '{0}' 的類型定義檔案。", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "無法匯入型別宣告檔案。請考慮匯入 '{0}' 而不是 '{1}'。", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "無法初始化區塊範圍宣告 '{1}' 之同一範圍中的外部範圍變數 '{0}'。", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "無法叫用可能為 'null' 的物件。", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "無法叫用可能為 'null' 或 'undefined' 的物件。", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "無法叫用可能為 'undefined' 的物件。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列解構永遠會傳送 '{0}',所以無法逐一查看值。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "因為值的迭代器 'next' 方法需要類型 '{1}',但陣列擴張永遠會傳送 '{0}',所以無法逐一查看值。", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "因為值的迭代器 'next' 方法需要類型 '{1}',但 for-of 永遠會傳送 '{0}',所以無法逐一查看值。", + "Cannot_move_statements_to_the_selected_file_95183": "無法將陳述式移動至選取的檔案", + "Cannot_move_to_file_selected_file_is_invalid_95179": "無法移動至檔案,選取的檔案無效", + "Cannot_read_file_0_5083": "無法讀取檔案 '{0}'。", + "Cannot_read_file_0_Colon_1_5012": "無法讀取檔案 '{0}': {1}。", + "Cannot_redeclare_block_scoped_variable_0_2451": "無法重新宣告區塊範圍變數 '{0}'。", + "Cannot_redeclare_exported_variable_0_2323": "無法重新宣告匯出的變數 '{0}'。", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "無法在 Catch 子句中重新宣告識別碼 '{0}'。", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "無法在類型註釋中啟動函式呼叫。", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "除非有提供 '--jsx' 旗標,否則無法使用 JSX。", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "啟用 '{0}' 時,無法在類型或僅類型命名空間上使用 'export import'。", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "當 '--module' 為 'none' 時,無法使用匯入、匯出或模組增強指定。", + "Cannot_use_namespace_0_as_a_type_2709": "不得使用命名空間 '{0}' 作為類型。", + "Cannot_use_namespace_0_as_a_value_2708": "不得使用命名空間 '{0}' 作為值。", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "在修飾類別的靜態屬性初始化運算式中,不能使用 'this'。", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "因為檔案 '{0}' 會覆寫所參考專案 '{1}' 產生的 '.tsbuildinfo' 檔案,所以無法寫入該檔案", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "無法寫入檔案 '{0}',原因是其會由多個輸入檔覆寫。", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "無法寫入檔案 '{0}',原因是其會覆寫輸入檔。", + "Catch_clause_variable_cannot_have_an_initializer_1197": "Catch 子句變數不得有初始設定式。", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "Catch 子句變數型別註解必須為 'any' 或 'unknown' (如有指定)。", + "Change_0_to_1_90014": "將 '{0}' 變更為 '{1}'", + "Change_all_extended_interfaces_to_implements_95038": "將所有延伸介面變更為 'implements'", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "將所有 jsdoc 樣式的類型變更為 TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "將所有 jsdoc 樣式的類型變更為 TypeScript (並為 null 類型新增 '| undefined')", + "Change_extends_to_implements_90003": "將 [延伸] 變更至 [實作]5D;", + "Change_spelling_to_0_90022": "將拼字變更為 '{0}'", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "檢查是否已宣告但未在建構函式中設定的類別屬性。", + "Check_side_effect_imports_6806": "檢查副作用匯入。", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "檢查 'bind'、'call' 和 'apply' 方法的引數是否與原始函式相符。", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "檢查 '{0}' 是否為 '{1}' - '{2}' 的最長相符前置詞。", + "Circular_definition_of_import_alias_0_2303": "匯入別名 '{0}' 的循環定義。", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "解析組態時偵測到循環性: {0}", + "Circularity_originates_in_type_at_this_location_2751": "循環源於此位置的類型。", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "類別 '{0}' 已定義執行個體成員存取子 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員函式。", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "類別 '{0}' 已定義執行個體成員函式 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員存取子。", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "類別 '{0}' 已定義執行個體成員屬性 '{1}',但是擴充類別 '{2}' 卻將其定義為執行個體成員函式。", + "Class_0_incorrectly_extends_base_class_1_2415": "類別 '{0}' 不正確地擴充基底類別 '{1}'。", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "類別 '{0}' 不當實作類別 '{1}'。您是否要擴充 '{1}',並繼承其成員以成為子類別?", + "Class_0_incorrectly_implements_interface_1_2420": "類別 '{0}' 不正確地實作介面 '{1}'。", + "Class_0_used_before_its_declaration_2449": "類別 '{0}' 的位置在其宣告之前。", + "Class_constructor_may_not_be_a_generator_1368": "類別建構函式可能不是產生器。", + "Class_constructor_may_not_be_an_accessor_1341": "類別建構函式可能不是存取子。", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "類別宣告無法為 '{0}' 實作多載清單。", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "類別宣告不能有一個以上的 `@augments` 或 `@extends` 標籤。", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "類別裝飾項目無法與靜態私人識別碼一起使用。請考慮移除實驗性裝飾項目。", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "父類別所定義的類別欄位 '{0}' 無法透過超級在子類別中存取。", + "Class_name_cannot_be_0_2414": "類別名稱不得為 '{0}'。", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "當目標為具有模組 {0} 的 ES5 和更新版本時,類別名稱不可為 'Object'。", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "類別靜態端 '{0}' 不正確地擴充基底類別靜態端 '{1}'。", + "Classes_can_only_extend_a_single_class_1174": "類別只能擴充一個類別。", + "Classes_may_not_have_a_field_named_constructor_18006": "類別不能具有名為 'constructor' 的欄位。", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "會使用 JavaScript 的嚴格模式,評估包含在類別中的程式碼,其中不允許使用 '{0}'。如需詳細資訊,請參閱 https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Strict_mode。", + "Command_line_Options_6171": "命令列選項", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "當路徑為專案組態檔或為 'tsconfig.json' 所在的資料夾時編譯專案。", + "Compiler_Diagnostics_6251": "編譯器診斷", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "編譯器選項 '{0}' 無法指定空字串。", + "Compiler_option_0_expects_an_argument_6044": "編譯器選項 '{0}' 必須要有一個引數。", + "Compiler_option_0_may_not_be_used_with_build_5094": "編譯器選項 '--{0}' 不能與 '--build' 一起使用。", + "Compiler_option_0_may_only_be_used_with_build_5093": "編譯器選項 '--{0}' 只能與 '--build' 一起使用。", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "'{1}' 值的編譯器選項 '{0}'不穩定。使用夜間 TypeScript 將此錯誤設為靜音。請嘗試使用 'npm install -D typescript@next' 更新。", + "Compiler_option_0_requires_a_value_of_type_1_5024": "編譯器選項 '{0}' 需要類型 {1} 的值。", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "降級發出私人識別碼時,編譯器會保留名稱 '{0}'。", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "編譯位於指定路徑的 TypeScript 專案。", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "編譯目前的專案 (工作目錄中的 tsconfig.json)。", + "Compiles_the_current_project_with_additional_settings_6929": "使用其他設定編譯目前的專案。", + "Completeness_6257": "完整性", + "Composite_projects_may_not_disable_declaration_emit_6304": "複合式專案可能未停用宣告發出。", + "Composite_projects_may_not_disable_incremental_compilation_6379": "複合專案可能不會停用累加編譯。", + "Computed_from_the_list_of_input_files_6911": "從輸入檔案清單計算", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "計算屬性必須是具有 --isolatedDeclarations 的數字或字串常值、變數或點狀運算式。", + "Computed_property_names_are_not_allowed_in_enums_1164": "列舉中不能有計算的屬性名稱。", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "無法使用 --isolatedDeclarations 推斷類別或物件常值上的計算屬性名稱。", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "具有字串值成員的列舉中不允許計算值。", + "Concatenate_and_emit_output_to_single_file_6001": "串連並發出輸出至單一檔案。", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "解析匯入時,除了解析程式特定預設值之外,還需要設定的條件。", + "Conflicts_are_in_this_file_6201": "此檔案中有衝突。", + "Consider_adding_a_declare_modifier_to_this_class_6506": "請考慮將 'declare' 修飾元加入此類別。", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "建構簽章傳回型別 '{0}' 與 '{1}' 不相容。", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "缺少傳回型別註解的建構簽章,隱含有 'any' 傳回型別。", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "無引數建構簽章的傳回型別 '{0}' 與 '{1}' 不相容。", + "Constructor_implementation_is_missing_2390": "缺少建構函式實作。", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "類別 '{0}' 的建構函式為私用,並且只能在類別宣告內存取。", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "類別 '{0}' 的建構函式受到保護,並且只能在類別宣告內存取。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "在等位型別中使用建構函式類型標記法時,必須括以括弧。", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "在交集型別中使用建構函式類型標記法時,必須括以括弧。", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "衍生類別的建構函式必須包含 'super' 呼叫。", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "未指定包含檔案,因此無法決定根目錄,而將略過 'node_modules' 中的查閱。", + "Containing_function_is_not_an_arrow_function_95128": "內含函式不是箭頭函式", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "控制用來偵測模組格式 JS 檔案的方法。", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "將類型 '{0}' 轉換為類型 '{1}' 可能會發生錯誤,原因是這兩個類型彼此並未充分重疊。如果是故意轉換的,請先將運算式轉換為 'unknown'。", + "Convert_0_to_1_in_0_95003": "將 '{0}' 轉換成 '{1} in {0}'", + "Convert_0_to_mapped_object_type_95055": "將 '{0}' 轉換為對應的物件類型", + "Convert_all_const_to_let_95102": "將所有 'const' 轉換為 'let'", + "Convert_all_constructor_functions_to_classes_95045": "將所有建構函式轉換為類別", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "將所有無效字元轉換為 HTML 實體代碼", + "Convert_all_re_exported_types_to_type_only_exports_1365": "將所有重新匯出的類型轉換為僅限類型的匯出", + "Convert_all_require_to_import_95048": "將所有 'require' 轉換至 'import'", + "Convert_all_to_async_functions_95066": "全部轉換為非同步函式", + "Convert_all_to_bigint_numeric_literals_95092": "全部轉換為 Bigint 數字常值", + "Convert_all_to_default_imports_95035": "全部轉換為預設匯入", + "Convert_all_type_literals_to_mapped_type_95021": "將所有類型常值轉換成相對應的類型", + "Convert_all_typedef_to_TypeScript_types_95177": "轉換所有 typedef 為 TypeScript 類型。", + "Convert_arrow_function_or_function_expression_95122": "轉換箭頭函式或函式運算式", + "Convert_const_to_let_95093": "將 'const' 轉換為 'let'", + "Convert_default_export_to_named_export_95061": "將預設匯出轉換為具名匯出", + "Convert_function_declaration_0_to_arrow_function_95106": "將函式宣告 '{0}' 轉換為箭號函式", + "Convert_function_expression_0_to_arrow_function_95105": "將函式運算式 '{0}' 轉換為箭號函式", + "Convert_function_to_an_ES2015_class_95001": "將函式轉換為 ES2015 類別", + "Convert_invalid_character_to_its_html_entity_code_95100": "將無效字元轉換為其 HTML 實體代碼", + "Convert_named_export_to_default_export_95062": "將具名匯出轉換為預設匯出", + "Convert_named_imports_to_default_import_95170": "將具名匯入轉換為預設匯入", + "Convert_named_imports_to_namespace_import_95057": "將具名匯入轉換為命名空間匯入", + "Convert_namespace_import_to_named_imports_95056": "將命名空間匯入轉換為具名匯入", + "Convert_overload_list_to_single_signature_95118": "將多載清單轉換成單一特徵標記", + "Convert_parameters_to_destructured_object_95075": "將參數轉換為解構的物件", + "Convert_require_to_import_95047": "將 'require' 轉換至 'import'", + "Convert_to_ES_module_95017": "轉換為 ES 模組", + "Convert_to_a_bigint_numeric_literal_95091": "轉換為 Bigint 數字常值", + "Convert_to_anonymous_function_95123": "轉換為匿名函式", + "Convert_to_arrow_function_95125": "轉換為箭頭函式", + "Convert_to_async_function_95065": "轉換為非同步函式", + "Convert_to_default_import_95013": "轉換為預設匯入", + "Convert_to_named_function_95124": "轉換為具名函式", + "Convert_to_optional_chain_expression_95139": "轉換為選擇性鏈結運算式", + "Convert_to_template_string_95096": "轉換為範本字串", + "Convert_to_type_only_export_1364": "轉換為僅限類型的匯出", + "Convert_typedef_to_TypeScript_type_95176": "轉換 typedef 為 TypeScript 類型。", + "Corrupted_locale_file_0_6051": "地區設定檔 {0} 已損毀。", + "Could_not_convert_to_anonymous_function_95153": "無法轉換成匿名函式", + "Could_not_convert_to_arrow_function_95151": "無法轉換成箭頭函式", + "Could_not_convert_to_named_function_95152": "無法轉換成具名函式", + "Could_not_determine_function_return_type_95150": "無法判斷函式傳回型別", + "Could_not_find_a_containing_arrow_function_95127": "找不到內含箭頭函式", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "找不到模組 '{0}' 的宣告檔案。'{1}' 隱含具有 'any' 類型。", + "Could_not_find_convertible_access_expression_95140": "找不到可轉換的存取運算式", + "Could_not_find_export_statement_95129": "找不到匯出陳述式", + "Could_not_find_import_clause_95131": "找不到匯入子句", + "Could_not_find_matching_access_expressions_95141": "找不到相符的存取運算式", + "Could_not_find_name_0_Did_you_mean_1_2570": "找不到名稱 '{0}'。您是不是指 '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "找不到命名空間匯入或具名匯入", + "Could_not_find_property_for_which_to_generate_accessor_95135": "找不到要為其產生存取子的屬性", + "Could_not_find_variable_to_inline_95185": "找不到要內嵌的變數。", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "無法解析具有下列延伸模組的路徑 '{0}': {1}。", + "Could_not_write_file_0_Colon_1_5033": "無法編寫檔案 '{0}': {1}。", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "建立發出 JavaScript 檔案的來源對應檔。", + "Create_sourcemaps_for_d_ts_files_6614": "為 d.ts 檔案建立 sourcemap。", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "使用建議設定在工作目錄中建立 tsconfig.json。", + "DIRECTORY_6038": "目錄", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "字元類別中不允許小數點逸出序列和反向參考。", + "Decimals_with_leading_zeros_are_not_allowed_1489": "不允許前置為零的小數點。", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "宣告會讓另一個檔案中的宣告增加。這無法序列化。", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "此檔案發出的宣告需要保留此匯入,以進行增強。該情況不受 --isolatedDeclarations 支援。", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "此檔案的宣告發出必須使用私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "此檔案的宣告發出必須使用來自模組 '{1}' 的私人名稱 '{0}'。明確的型別註解可能會解除封鎖宣告發出。", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "此參數發出的宣告需要隱含地新增未定義值至其類型。此情況不受 --isolatedDeclarations 支援。", + "Declaration_expected_1146": "必須是宣告。", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "宣告名稱與內建全域識別碼 '{0}' 衝突。", + "Declaration_or_statement_expected_1128": "必須是宣告或陳述式。", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "必須是宣告或陳述式。這個 '=' 會跟著陳述式區塊,因此如果您想要撰寫解構指派,就可能需要在整個指派的前後加上括弧。", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "包含明確指派判斷提示的宣告也必須包含類型註釋。", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "包含初始設定式的宣告不得同時包含明確指派判斷提示。", + "Declare_a_private_field_named_0_90053": "宣告名為 '{0}' 的私人欄位。", + "Declare_method_0_90023": "宣告方法 '{0}'", + "Declare_private_method_0_90038": "宣告私人方法 '{0}'", + "Declare_private_property_0_90035": "宣告私人屬性 '{0}'", + "Declare_property_0_90016": "宣告屬性 '{0}'", + "Declare_static_method_0_90024": "宣告靜態方法 '{0}'", + "Declare_static_property_0_90027": "宣告靜態屬性 '{0}'", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "裝飾項目函式傳回類型 '{0}' 無法指派給類型 '{1}'。", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "裝飾項目函式傳回類型是 '{0}',但必須是 'void' 或 'any'。", + "Decorator_used_before_export_here_1486": "在此處「匯出」之前使用的裝飾項目。", + "Decorators_are_not_valid_here_1206": "裝飾項目在此處無效。", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "無法將裝飾項目套用至多個同名的 get/set 存取子。", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "如果裝飾項目也出現在 'export' 之前,就不能出現在 'export' 或 'export default' 後。", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "裝飾項目必須在屬性宣告的名稱和所有關鍵詞之前。", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "預設 catch 子句變數為 'unknown' 而非 'any'。", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "模組的預設匯出具有或正在使用私用名稱 '{0}'。", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "無法使用 --isolatedDeclarations 推斷預設匯出。", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "延遲的匯入中不允許預設匯入。", + "Default_library_1424": "預設程式庫", + "Default_library_for_target_0_1425": "目標 '{0}' 的預設程式庫", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "只有當 '--module' 旗標設定為 'esnext' 或 'preserve' 時,才支援延遲的匯入。", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "下列識別碼的定義與其他檔案中的定義衝突: {0}", + "Delete_all_unused_declarations_95024": "刪除所有未使用的宣告", + "Delete_all_unused_imports_95147": "刪除所有未使用的匯入", + "Delete_all_unused_param_tags_95172": "刪除所有未使用的 '@param' 標籤", + "Delete_the_outputs_of_all_projects_6365": "刪除所有專案的輸出。", + "Delete_unused_param_tag_0_95171": "刪除未使用的 '@param' 標記 '{0}'", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[即將淘汰] 請改用 '--jsxFactory'。當目標為 'react' JSX 發出時,為 createElement 指定所叫用的物件", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[即將淘汰] 請改用 '--outFile'。 串連輸出並將其發出到單一檔案", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[即將淘汰] 請改用 '--skipLibCheck'。跳過預設程式庫宣告檔案的類型檢查。", + "Deprecated_setting_Use_outFile_instead_6677": "已淘汰的設定值。請改用 'outFile'。", + "Did_you_forget_to_use_await_2773": "忘了要使用 'await' 嗎?", + "Did_you_mean_0_1369": "您指 '{0}' 嗎?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "您是要將 '{0}' 限制為類型 'new (...args: any[]) => {1}' 嗎?", + "Did_you_mean_to_call_this_expression_6212": "您是要呼叫此運算式嗎?", + "Did_you_mean_to_mark_this_function_as_async_1356": "您是要將此函式標記為 'async' 嗎?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "要使用 ':' 嗎? 當包含的物件常值是解構模式的一部分時,'=' 就只能位於屬性名稱後面。", + "Did_you_mean_to_use_new_with_this_expression_6213": "您是要對此運算式使用 'new' 嗎?", + "Digit_expected_1124": "必須是數字。", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "目錄 '{0}' 不存在,將會跳過其中所有查閱。", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "目錄 '{0}' 不包含在 package.js 範圍內。將不會解析匯入。", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "停用在發出的 JavaScript 檔案中新增 'use strict' 指示詞。", + "Disable_checking_for_this_file_90018": "停用此檔案的檢查", + "Disable_emitting_comments_6688": "停用發出註解。", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "停用其 JSDoc 註解中具有 '@internal' 的發出宣告。", + "Disable_emitting_files_from_a_compilation_6660": "停用從編譯發出檔案。", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "如果報告任何型別檢查錯誤,則停用發出的檔案。", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "停用在產生的程式碼中抹除 'const enum' 宣告。", + "Disable_error_reporting_for_unreachable_code_6603": "停用無法執行到的程式碼錯誤報告。", + "Disable_error_reporting_for_unused_labels_6604": "停用未使用標籤的錯誤報表。", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "停用完整類型檢查 (只回報重要剖析和發出錯誤訊息)。", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "停用在編譯輸出中產生自訂的協助程式函式,例如 '__extends'。", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "停用包括任何程式庫檔案,包括預設的 lib.d.ts。", + "Disable_loading_referenced_projects_6235": "停用載入參考的專案。", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "參考複合專案時,停用偏好的來源檔案而不是宣告檔案。", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "在建立物件常值期間停用多餘屬性錯誤報告。", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "停用將 symlinks 解析為其 realpath。這與節點中的相同旗標有關。", + "Disable_size_limitations_on_JavaScript_projects_6162": "停用 JavaScript 專案的大小限制。", + "Disable_solution_searching_for_this_project_6224": "停用此專案的解決方案搜尋。", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "停用函式類型中一般簽章的 Strict 檢查。", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "停用 JavaScript 專案的類型取得", + "Disable_truncating_types_in_error_messages_6663": "停用錯誤訊息中的截斷類型。", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "停用來源檔案,而非所參考專案中的宣告檔案。", + "Disable_wiping_the_console_in_watch_mode_6684": "停用在監看模式中抹除主控台。", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "透過查看專案中的檔案名,停用型別推斷的取得。", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "不允許 import'、'require' 或 '' 擴充 TypeScript 應該加入專案的檔案數目。", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "不允許相同檔案大小寫不一致的參考。", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "不要在編譯後的檔案清單中新增三道斜線的參考或匯入的模組。", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "不允許不屬於ECMAScript一部分的運行時間建構。", + "Do_not_emit_comments_to_output_6009": "請勿將註解發出到輸出。", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "請勿發出包含 '@internal' 註釋的程式碼宣告。", + "Do_not_emit_outputs_6010": "請勿發出輸出。", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "如果回報了任何錯誤,即不發出輸出。", + "Do_not_emit_use_strict_directives_in_module_output_6112": "請勿在模組輸出中發出 'use strict' 指示詞。", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "請勿清除產生之程式碼中的 const 列舉宣告。", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "不要在編譯後的輸出中產生自訂的協助程式函式,例如 '__extends'。", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "不要包含預設程式庫檔案 (lib.d.ts)。", + "Do_not_report_errors_on_unreachable_code_6077": "請勿回報無法執行到之程式碼的錯誤。", + "Do_not_report_errors_on_unused_labels_6074": "請勿回報未使用之標籤的錯誤。", + "Do_not_resolve_the_real_path_of_symlinks_6013": "請勿解析符號連結的真實路徑。", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "請勿轉換或省略任何未標示為僅限類型的匯入或匯出,請確保其是以輸出檔案的格式並根據 'module' 設定所撰寫。", + "Do_not_truncate_error_messages_6165": "不要截斷錯誤訊息。", + "Duplicate_function_implementation_2393": "函式實作重複。", + "Duplicate_identifier_0_2300": "識別碼 '{0}' 重複。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在模組的最上層範圍中。", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "識別碼 '{0}' 重複。編譯器會將名稱 '{1}' 保留在含有非同步函式模組的最上層範圍中。", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "識別碼 '{0}' 重複。在靜態初始設定式中發出 'super' 參考時,編譯器會保留名稱 '{1}'。", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "識別碼 '{0}' 重複。編譯器會使用宣告 '{1}' 支援非同步函式。", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "重複的識別碼 '{0}'。靜態與執行個體元素不得共用相同的私人名稱。", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "識別碼 'arguments'' 重複。編譯器會使用 'arguments' 來初始化剩餘參數。", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "識別碼 '_newTarget' 重複。編譯器使用變數宣告 '_newTarget' 擷取 'new.target' 中繼屬性參考。", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "識別碼 '_this' 重複。編譯器會使用變數宣告 '_this' 來擷取 'this' 參考。", + "Duplicate_index_signature_for_type_0_2374": "類型 '{0}' 的索引簽章重複。", + "Duplicate_label_0_1114": "標籤 '{0}' 重複。", + "Duplicate_property_0_2718": "屬性 '{0}' 重複。", + "Duplicate_regular_expression_flag_1500": "重複的規則運算式旗標。", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "動態匯入的指定名稱必須屬於類型 'string',但這裡的類型為 '{0}'。", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "只有在 '--module' 旗標設定為 'es2020'、'es2022'、'esnext'、'commonjs'、'amd'、'system'、'umd'、'node16'、'node18'、'node20' 或 'nodenext',才支援動態匯入。", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "動態匯入只接受模組指定名稱和一系列選擇性屬性來做為引數", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "當 '--module' 選項設定為 'esnext'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve' 時,動態匯入只支援第二個引數。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "當 'module' 設定為 'preserve' 時,CommonJS 模組中不允許 ESM 語法。", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "啟用 'verbatimModuleSyntax' 時,CommonJS 模組中不允許 ESM 語法。", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "'{0}.{1}' 的每個宣告值不同,其中應該要有 '{2}',但只包含 '{3}'。", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "等位型別 '{0}' 的每個成員都有建構簽章,但這些簽章都互不相容。", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "等位型別 '{0}' 的每個成員都有簽章,但這些簽章都互不相容。", + "Editor_Support_6249": "編輯器支援", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "因為 '{0}' 類型的運算式無法用於索引類型 '{1}',所以項目隱含 'any' 類型。", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "因為索引運算式不屬於類型 'number',所以元素具有隱含 'any' 類型。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "元素隱含地擁有 'any' 類型,因為類型 '{0}' 不具索引簽章。", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "因為類型 '{0}' 沒有索引簽章,所以項目隱含 'any' 類型。您是要呼叫 '{1}' 嗎?", + "Emit_6246": "發出", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "發出 ECMAScript 標準相容類別欄位。", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "在輸出檔的開頭發出 UTF-8 位元組順序標記 (BOM)。", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "發出單一檔案包含來源對應,而不要使用個別的檔案。", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "發出用於偵錯的編譯器執行 v8 CPU 設定檔。", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "發出其他 JavaScript,以輕鬆支援匯入 CommonJS 模組。這會啟用 'allowSyntheticDefaultImports' 進行類型相容性。", + "Emit_class_fields_with_Define_instead_of_Set_6222": "使用 Define 而非 Set 發出類別欄位。", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "發出來源檔案中修飾式宣告的設計型別中繼資料。", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "針對反覆項目發出更符合規範,但具詳細資訊及較低效能 JavaScript。", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "使用單一檔案發出來源與來源對應。必須設定 '--inlineSourceMap' 或 '--sourceMap'。", + "Enable_all_strict_type_checking_options_6180": "啟用所有 Strict 類型檢查選項。", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "在 TypeScript 的輸出中啟用色彩及格式化,讓編譯器錯誤更容易閱讀。", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "啟用允許 TypeScript 專案搭配專案參考使用的條件約束。", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "啟用未在函式中明確傳回之 codepaths 的錯誤報吿。", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "啟用具有隱含 'any' 類型的運算式及宣告之錯誤報告。", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "啟用 switch 陳述式中 fallthrough 案例的錯誤報表。", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "在已完成型別檢查的 JavaScript 檔案中啟用錯誤報表。", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "當未讀取區域變數時,啟用錯誤報吿。", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "為 'this' 指定類型 'any' 時,啟用錯誤報表。", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "啟用舊版實驗性裝飾項目的實驗性支援。", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "啟用匯入具有任何延伸模組的檔案,並存在宣告檔案即可。", + "Enable_importing_json_files_6689": "啟用匯入 json 檔案。", + "Enable_lib_replacement_6808": "啟用連結庫取代。", + "Enable_project_compilation_6302": "啟用專案編譯", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "對函式啟用嚴格的 'bind'、'call' 及 'apply' 方法。", + "Enable_strict_checking_of_function_types_6186": "啟用嚴格檢查函式類型。", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "啟用類別中屬性初始化的 strict 檢查。", + "Enable_strict_null_checks_6113": "啟用嚴格 null 檢查。", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "在您的組態檔中啟用 'experimentalDecorators' 選項", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "在您的組態檔中啟用 '--jsx' 旗標", + "Enable_tracing_of_the_name_resolution_process_6085": "啟用名稱解析流程的追蹤。", + "Enable_verbose_logging_6713": "啟用詳細資訊記錄。", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "透過為所有匯入建立命名空間物件,讓 CommonJS 和 ES 模組之間的產出有互通性。意指 'allowSyntheticDefaultImports'。", + "Enables_experimental_support_for_ES7_decorators_6065": "啟用 ES7 裝飾項目的實驗支援。", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "啟用實驗支援以發出裝飾項目類型的中繼資料。", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "對使用索引型別宣告的索引鍵強制使用索引存取子。", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "請確認衍生類別中的覆寫成員已標上 override 修飾元。", + "Ensure_that_casing_is_correct_in_imports_6637": "請確認 Imports 中的大小寫正確。", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "確保每個檔案都可安全地轉譯,而不依賴其他匯入。", + "Ensure_use_strict_is_always_emitted_6605": "確保永遠發出 'use strict'。", + "Entering_conditional_exports_6413": "正在進入條件式匯出。", + "Entry_point_for_implicit_type_library_0_1420": "隱含型別程式庫 '{0}' 的進入點", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "具有 packageId '{1}' 的隱含型別程式庫 '{0}' 進入點", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "具有 packageId '{1}' 且在 CompilerOptions 中指定的型別程式庫 '{0}' 進入點", + "Enum_0_used_before_its_declaration_2450": "列舉 '{0}' 的位置在其宣告之前。", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "列舉宣告只能與命名空間或其他列舉宣告合併。", + "Enum_declarations_must_all_be_const_or_non_const_2473": "列舉宣告必須都是 const 或非 const。", + "Enum_member_expected_1132": "必須是列舉成員。", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "啟用 'isolatedModules' 時,跟隨非常值數值成員的列舉成員必須有初始設定式。", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "列舉成員初始設定式必須是可計算,且不參考具有 --isolatedDeclarations 的外部符號。", + "Enum_member_must_have_initializer_1061": "列舉成員必須有初始設定式。", + "Enum_name_cannot_be_0_2431": "列舉名稱不得為 '{0}'。", + "Environment_Settings_6285": "環境設定", + "Errors_Files_6041": "錯誤檔案", + "Escape_sequence_0_is_not_allowed_1488": "不允許逸出序列 '{0}'。", + "Examples_Colon_0_6026": "範例: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "過度複雜性比較類型 '{0}' 和 '{1}'。", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "比較類型 '{0}' 與 '{1}' 的堆疊深度過深。", + "Exiting_conditional_exports_6416": "正在退出條件式匯出。", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "必須是 {0}-{1} 型別引數; 請提供有 '@ extends' 標記的這類型引數。", + "Expected_0_arguments_but_got_1_2554": "應有 {0} 個引數,但得到 {1} 個。", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "應為 {0} 個引數,但現有 {1} 個。是否忘記將型別引數中的 'void' 納入 'Promise' 中?", + "Expected_0_type_arguments_but_got_1_2558": "應有 {0} 個型別引數,但得到 {1} 個。", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "必須是 {0} 型別引數; 請提供有 '@ extends' 標記的這類引數。", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "需要 1 個引數,但得到 0。'new Promise()' 需要 JSDoc 提示,才能產生可以呼叫而不含引數的 'resolve'。", + "Expected_a_Unicode_property_name_1523": "必須是 Unicode 屬性名稱。", + "Expected_a_Unicode_property_name_or_value_1527": "必須是 Unicode 屬性名稱或值。", + "Expected_a_Unicode_property_value_1525": "必須是 Unicode 屬性值。", + "Expected_a_capturing_group_name_1514": "必須是擷取群組名稱。", + "Expected_a_class_set_operand_1520": "必須是類別集運算元。", + "Expected_at_least_0_arguments_but_got_1_2555": "至少應有 {0} 個引數,但得到 {1} 個。", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "'{0}' 需要對應的 JSX 結尾標記。", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "JSX 片段必須有對應的結尾標記。", + "Expected_for_property_initializer_1442": "屬性初始設定式必須是 '='。", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "在 'package.json' 中 '{0}' 欄位的類型必須為 '{1}',但取得 '{2}'。", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "明確指定的模組解析種類: '{0}'。", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "'target' 選項必須設定為 'es2016' 或更新版本,才可以對 'bigint' 值執行乘冪運算。", + "Export_0_from_module_1_90059": "從模組 '{1}' 匯出 '{0}'", + "Export_all_referenced_locals_90060": "匯出所有參考的本機", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "當目標為 ECMAScript 模組時,無法使用匯出指派。請考慮改用 'export default' 或其他模組格式。", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "當 '--module' 旗標為 'system' 時,不支援匯出指派。", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "匯出宣告與匯出的 '{0}' 宣告相衝突。", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "在命名空間中不可使用匯出宣告。", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "在路徑 '{0}' 的 package.js 範圍中不存在匯出指定名稱 '{1}'。", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "匯出的類型別名 '{0}' 具有或使用私用名稱 '{1}'。", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "匯出的類型別名 '{0}' 具有或使用模組 {2} 中的私人名稱 '{1}'。", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "匯出的變數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "匯出的變數 '{0}' 具有或使用私用模組 {2} 中的名稱 '{1}'。", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "匯出的變數 '{0}' 具有或使用私用名稱 '{1}'。", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "模組增強指定中不允許匯出及匯出指派。", + "Expression_expected_1109": "必須是運算式。", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "表達式必須包含在括弧內,才能做為裝飾項目使用。", + "Expression_or_comma_expected_1137": "必須是運算式或逗號。", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "運算式產生的元組類型太大而無法表示。", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "運算式產生的等位型別過於複雜而無法表示。", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "運算式會解析成 '_super',而編譯器會使用其來擷取基底類別參考。", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "運算式將解析成變數宣告 '_newTarget',而供編譯器用來擷取 'new.target' 中繼屬性參考。", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "運算式會解析成變數宣告 '_this',而編譯器會使用此宣告來擷取 'this' 參考 。", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "無法使用 --isolatedDeclarations 推斷運算式類型。", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "擴充子句不能包含具有 --isolatedDeclarations 的運算式。", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "推斷類型 '{0}' 的 'Extends' 子句包含或使用了私人名稱 '{1}'。", + "Extract_base_class_to_variable_90064": "擷取基底類別至變數", + "Extract_binding_expressions_to_variable_90066": "將繫結運算式擷取至變數", + "Extract_constant_95006": "擷取常數", + "Extract_default_export_to_variable_90065": "擷取預設匯出至變數", + "Extract_function_95005": "擷取函式", + "Extract_to_0_in_1_95004": "擷取至 {1} 中的 {0}", + "Extract_to_0_in_1_scope_95008": "擷取至 {1} 範圍中的 {0}", + "Extract_to_0_in_enclosing_scope_95007": "擷取至封閉式範圍中的 {0}", + "Extract_to_interface_95090": "擷取至介面", + "Extract_to_type_alias_95078": "擷取至類型別名", + "Extract_to_typedef_95079": "擷取至 typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "擷取至變數,並以 '{0} as typeof {0}' 取代", + "Extract_type_95077": "擷取類型", + "FILE_6035": "檔案", + "FILE_OR_DIRECTORY_6040": "檔案或目錄", + "Failed_to_find_peerDependency_0_6283": "找不到 peerDependency '{0}'。", + "Failed_to_resolve_under_condition_0_6415": "在條件 '{0}' 下解析失敗。", + "Fallthrough_case_in_switch_7029": "參數中的 fallthrough 案例。", + "File_0_does_not_exist_6096": "檔案 '{0}' 不存在。", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "根據之前快取的查閱,檔案 '{0}' 不存在。", + "File_0_exists_according_to_earlier_cached_lookups_6239": "根據之前快取的查閱,檔案 '{0}' 存在。", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "檔案 '{0}' 存在 - 將其做為名稱解析結果使用。", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "不支援檔案 '{0}' 的副檔名。支援的副檔名只有 {1}。", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "檔案 '{0}' 為 JavaScript 檔案。您是要啟用 'allowJs' 選項嗎?", + "File_0_is_not_a_module_2306": "檔案 '{0}' 不是模組。", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "檔案 '{0}' 未列於專案 '{1}' 的檔案清單內。專案必須列出所有檔案,或使用 'include' 模式。", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "檔案 '{0}' 不在 'rootDir' '{1}' 之下。'rootDir' 必須包含所有原始程式檔。", + "File_0_not_found_6053": "找不到檔案 '{0}'。", + "File_Layout_6284": "檔案配置", + "File_Management_6245": "檔案管理", + "File_appears_to_be_binary_1490": "檔案顯示為二進位。", + "File_change_detected_Starting_incremental_compilation_6032": "偵測到檔案變更。正在啟動累加編譯...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "檔案是 CommonJS 模組,因為 '{0}' 沒有 \"type\" 欄位", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "檔案是 CommonJS 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "檔案是 CommonJS 模組,因為找不到 'package.json'", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "檔案是 ECMAScript 模組,因為 '{0}' 具有值不是 \"module\" 的 \"type\" 欄位", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "檔案為 CommonJS 模組; 其可轉換為 ES 模組。", + "File_is_default_library_for_target_specified_here_1426": "檔案是此處指定目標的預設程式庫。", + "File_is_entry_point_of_type_library_specified_here_1419": "檔案是此處指定型別程式庫的進入點。", + "File_is_included_via_import_here_1399": "檔案透過匯入加入此處。", + "File_is_included_via_library_reference_here_1406": "檔案透過程式庫參考加入此處。", + "File_is_included_via_reference_here_1401": "檔案透過參考加入此處。", + "File_is_included_via_type_library_reference_here_1404": "檔案透過型別程式庫參考加入此處。", + "File_is_library_specified_here_1423": "檔案是此處指定的程式庫。", + "File_is_matched_by_files_list_specified_here_1410": "檔案會依此處指定的 'files' 清單比對。", + "File_is_matched_by_include_pattern_specified_here_1408": "檔案會依此處指定的包含模式比對。", + "File_is_output_from_referenced_project_specified_here_1413": "檔案是此處指定的參考專案輸出。", + "File_is_output_of_project_reference_source_0_1428": "檔案是專案參考來源 '{0}' 的輸出", + "File_is_source_from_referenced_project_specified_here_1416": "檔案是此處指定參考專案的來源。", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "檔案名稱 '{0}' 與包含的檔案名稱 '{1}' 只差在大小寫。", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "檔案名稱 '{0}' 具有 '{1}' 延伸模組 - 改為查詢 '{2}'。", + "File_name_0_has_a_1_extension_stripping_it_6132": "檔案名稱 '{0}' 的副檔名為 '{1}'。正予以移除。", + "File_redirects_to_file_0_1429": "檔案會重新導向檔案 '{0}'", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "檔案規格不得包含出現在遞迴目錄萬用字元 ('**') 之後的父目錄 ('..'): '{0}'。", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "檔案規格不能以遞迴目錄萬用字元 ('**') 結尾: '{0}'。", + "Filters_results_from_the_include_option_6627": "從 `include` 選項篩選結果。", + "Fix_all_detected_spelling_errors_95026": "修正偵測到的所有拼字錯誤", + "Fix_all_expressions_possibly_missing_await_95085": "修正所有可能缺少 'await' 的運算式", + "Fix_all_implicit_this_errors_95107": "修正所有隱含 'this' 的錯誤", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "修正非同步函式所有不正確的傳回型別", + "Fix_all_with_type_only_imports_95182": "使用僅限類型匯入來修正所有問題", + "For_nodejs_Colon_6287": "針對 nodejs:", + "Found_0_errors_6217": "找到 {0} 個錯誤。", + "Found_0_errors_Watching_for_file_changes_6194": "找到 {0} 個錯誤。正在監看檔案變更。", + "Found_0_errors_in_1_files_6261": "在 {1} 檔案中發現 {0} 個錯誤。", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "在同一個檔案中發現 {0} 個錯誤,開始位置: {1}", + "Found_1_error_6216": "找到 1 個錯誤。", + "Found_1_error_Watching_for_file_changes_6193": "找到 1 個錯誤。正在監看檔案變更。", + "Found_1_error_in_0_6259": "在 {0} 找到 1 個錯誤", + "Found_package_json_at_0_6099": "在 '{0}' 找到 'package.json'。", + "Found_peerDependency_0_with_1_version_6282": "找到版本為 '{1}' 的 peerDependency '{0}'。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。類別定義會自動進入 strict 模式。", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "以 'ES5' 為目標時,strict 模式下的區塊中不允許函式宣告。模組會自動進入 strict 模式。", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "缺少傳回型別註解的函式運算式隱含了 '{0}' 傳回型別。", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "遺漏函式實作,或函式實作未緊接在宣告之後。", + "Function_implementation_name_must_be_0_2389": "函式實作名稱必須是 '{0}'。", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "函式因為沒有傳回型別註解,並在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "函式缺少結束 return 陳述式,且傳回類型不包括 'undefined'。", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "函式必須有具備 --isolatedDeclarations 的明確傳回型別註解。", + "Function_not_implemented_95159": "未實作函式。", + "Function_overload_must_be_static_2387": "函式多載必須為靜態。", + "Function_overload_must_not_be_static_2388": "函式多載不可為靜態。", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "在等位型別中使用函式類型標記法時,必須括以括弧。", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "在交集型別中使用函式類型標記法時,必須括以括弧。", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "缺少傳回型別註解的函式類型隱含 '{0}' 傳回型別。", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "包含主體的函式只能與屬於環境的類別合併。", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "從專案中的 TypeScript 和 JavaScript 檔案產生 .d.ts 檔案。", + "Generate_get_and_set_accessors_95046": "產生 'get' 與 'set' 存取子", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "為所有覆寫屬性產生 'get' 和 'set' 存取子", + "Generates_a_CPU_profile_6223": "產生 CPU 設定檔。", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "為每個相對應的 '.d.ts' 檔案產生 sourcemap。", + "Generates_an_event_trace_and_a_list_of_types_6237": "產生事件追蹤與類型清單。", + "Generates_corresponding_d_ts_file_6002": "產生對應的 '.d.ts' 檔案。", + "Generates_corresponding_map_file_6043": "產生對應的 '.map' 檔案。", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "產生器隱含的 yield 類型為 '{0}'。請考慮提供傳回型別註解。", + "Generators_are_not_allowed_in_an_ambient_context_1221": "環境內容中不允許產生器。", + "Generic_type_0_requires_1_type_argument_s_2314": "泛型類型 '{0}' 需要 {1} 個型別引數。", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "泛型型別 '{0}' 需要介於 {1} 和 {2} 之間的型別引數。", + "Global_module_exports_may_only_appear_at_top_level_1316": "全域模組匯出只能顯示在最上層。", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "全域模組匯出只能顯示在宣告檔案中。", + "Global_module_exports_may_only_appear_in_module_files_1314": "全域模組匯出只能顯示在模組檔案中。", + "Global_type_0_must_be_a_class_or_interface_type_2316": "全域類型 '{0}' 必須是類別或介面類型。", + "Global_type_0_must_have_1_type_parameter_s_2317": "全域類型 '{0}' 必須要有 {1} 個型別參數。", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "於 '--incremental' 與 '--watch' 中重新編譯時,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "在使用 'incremental' 與 'watch' 模式的專案中重新編譯,會假設檔案中的變更只會影響直接相依於重新編譯的檔案。", + "Hexadecimal_digit_expected_1125": "必須適十六進位數字。", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "需要識別碼。'{0}' 是模組的頂層保留字。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "必須是識別碼。'{0}' 在 strict 模式中為保留字。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "必須是識別碼。'{0}' 是 strict 模式中的保留字。類別定義會自動採用 strict 模式。", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "需要識別碼。'{0}' 是 strict 模式中的保留字。模組會自動採用 strict 模式。", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "必須為識別碼。'{0}' 為保留字,此處不可使用。", + "Identifier_expected_1003": "必須是識別碼。", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "必須有識別碼。'__esModule' 已保留為轉換 ECMAScript 模組時匯出的標記。", + "Identifier_or_string_literal_expected_1478": "需要識別碼或字串常值。", + "Identifier_string_literal_or_number_literal_expected_1496": "必須是識別碼、字串常值或數字常值。", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "如果「{0}」套件實際上公開了此模組,請考慮傳送提取要求以修改 「https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}」", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "如果 '{0}' 套件的確公開了此模組,請嘗試新增包含 `declare module '{1}';` 的宣告 (.d.ts) 檔案。", + "Ignore_this_error_message_90019": "略過此錯誤訊息", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "忽略 tsconfig.json,使用預設編譯器選項編譯指定的檔案。", + "Implement_all_inherited_abstract_classes_95040": "實作所有繼承的抽象類別", + "Implement_all_unimplemented_interfaces_95032": "實作所有未實作的介面", + "Implement_inherited_abstract_class_90007": "實作已繼承的抽象類別", + "Implement_interface_0_90006": "實作介面 '{0}'", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "匯出類別 '{0}' 的 Implements 子句具有或使用私用名稱 '{1}'。", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "在執行階段中無法將 'symbol' 隱含轉換為 'string'。請考慮將此運算式包裝在 'String(...)' 中。", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "匯入 '{0}' 會與此檔案中使用的全域值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "匯入 '{0}' 會與本機值發生衝突,因此在啟用 'isolatedModules' 時,必須使用僅限類型的匯入宣告。", + "Import_0_from_1_90013": "從 \"{1}\" 匯入 '{0}'", + "Import_assertion_values_must_be_string_literal_expressions_2837": "匯入判斷提示值必須是字串常值運算式。", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入判斷提示。", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "只有當 '--module' 選項設定為 'esnext'、'node18'、'node20'、'nodenext' 或 'preserve' 時,才支援匯入判斷提示。", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "匯入判斷提示不能與僅限類型的匯入或匯出搭配使用。", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "匯入宣告已由匯入屬性取代。使用 『with』 而非 'assert'。", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "當目標為 ECMAScript 模組時,無法使用匯入指派。請考慮改用 'import * as ns from \"mod\"'、'import {a} from \"mod\"'、'import d from \"mod\"' 或其他模組格式。", + "Import_attribute_values_must_be_string_literal_expressions_2858": "匯入屬性值必須是字串常值運算式。", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "編譯為 CommonJS 'require' 呼叫的陳述式上不允許匯入屬性。", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "只有當 '--module' 選項設定為 'esnext'、'node18'、'node20'、'nodenext' 或 'preserve’ 時,才支援匯入屬性。", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "匯入屬性不能與僅限類型的匯入或匯出搭配使用。", + "Import_declaration_0_is_using_private_name_1_4000": "匯入宣告 '{0}' 使用私用名稱 '{1}'。", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "匯入宣告與 '{0}' 的區域宣告衝突。", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "命名空間中的匯入宣告不得參考模組。", + "Import_emit_helpers_from_tslib_6139": "從 'tslib' 匯入發出協助程式。", + "Import_may_be_converted_to_a_default_import_80003": "匯入可轉換成預設匯入。", + "Import_name_cannot_be_0_2438": "匯入名稱不得為 '{0}'。", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "環境模組宣告中的匯入或匯出宣告,不得透過相對模組名稱參考模組。", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "在路徑 '{0}' 的 package.js 範圍中不存在匯入指定名稱 '{1}'。", + "Imported_via_0_from_file_1_1393": "透過 {0} 從檔案 '{1}' 匯入", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "透過 {0} 從檔案 '{1}' 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "透過 {0} 從檔案 '{1}' 匯入,匯入 'jsx' 和 'jsxs' 處理站函式", + "Imported_via_0_from_file_1_with_packageId_2_1394": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,以 CompilerOptions 指定的方式匯入 'ImportHelpers'", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "透過 {0} 從檔案 '{1}' (packageId 為 '{2}') 匯入,匯入 'jsx' 和 'jsxs' 處理站函式", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "當 'module' 設定為 '{0}' 時,匯入 JSON 檔案至 ECMAScript 模組需要 'type: \"json\"' 匯入屬性。", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "模組增強指定中不允許匯入。請考慮將其移至封入外部模組。", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "在環境列舉宣告中,成員初始設定式必須是常數運算式。", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "在具有多個宣告的列舉中,只有一個宣告可以在其第一個列舉項目中省略初始設定式。", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "包含檔案的清單。這不支援 Glob 模式,與 `include` 相反。", + "Include_modules_imported_with_json_extension_6197": "包含匯入有 '.json' 延伸模組的模組", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "在發出 JavaScript 內的 sourcemap 中包含原始程式碼。", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "在發出的 JavaScript 中包含 sourcemap 檔案。", + "Includes_imports_of_types_referenced_by_0_90054": "包括 '{0}' 參考的類型匯入", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "包括 --watch、-w 會開始監看目前專案是否有檔案變更。設定之後,您便可以使用以下來設定監看式模式:", + "Incomplete_quantifier_Digit_expected_1505": "不完整的數量詞。必須是數字。", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "類型 '{0}' 的索引簽章在類型 '{1}' 中遺失。", + "Index_signature_in_type_0_only_permits_reading_2542": "類型 '{0}' 中的索引簽章只允許讀取。", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "合併宣告 '{0}' 中的個別宣告必須全部匯出或全在本機上。", + "Infer_all_types_from_usage_95023": "從用法推斷所有類型", + "Infer_function_return_type_95148": "推斷函式傳回型別", + "Infer_parameter_types_from_usage_95012": "從使用方式推斷參數類型", + "Infer_this_type_of_0_from_usage_95080": "從使用方式推斷 '{0}' 的 'this' 類型", + "Infer_type_of_0_from_usage_95011": "從使用方式推斷 '{0}' 的類型", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "--isolatedDeclarations 不支援來自類別運算式的推斷。", + "Initialize_property_0_in_the_constructor_90020": "將建構函式中的屬性 '{0}' 初始化", + "Initialize_static_property_0_90021": "將靜態屬性 '{0}' 初始化", + "Initializer_for_property_0_2811": "屬性 '{0}' 的初始設定式", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "執行個體成員變數 '{0}' 的初始設定式不得參考建構函式中所宣告的識別碼 '{1}'。", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "環境內容中不得有初始設定式。", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "初始化 TypeScript 專案並建立 tsconfig.json 檔案。", + "Inline_variable_95184": "內嵌變數", + "Insert_command_line_options_and_files_from_a_file_6030": "從檔案插入命令列選項與檔案。", + "Install_0_95014": "安裝 '{0}'", + "Install_all_missing_types_packages_95033": "安裝缺少的所有類型套件", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "介面 '{0}' 不能同時擴充類型 '{1}' 和 '{2}'。", + "Interface_0_incorrectly_extends_interface_1_2430": "介面 '{0}' 不正確地擴充介面 '{1}'。", + "Interface_declaration_cannot_have_implements_clause_1176": "介面宣告不能有 'implements' 子句。", + "Interface_must_be_given_a_name_1438": "必須為介面指定名稱。", + "Interface_name_cannot_be_0_2427": "介面名稱不得為 '{0}'。", + "Interop_Constraints_6252": "Interop 條件約束", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "將選用屬性類型解譯為寫入,而非新增 'undefined'。", + "Invalid_character_1127": "無效的字元。", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "無效的匯入指定名稱 '{0}' 沒有可能的解決方法。", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "增強中的模組名稱無效。模組 '{0}' 於 '{1}' 解析至不具類型的模組,其無法擴增。", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "增強指定中的模組名稱無效,找不到模組 '{0}'。", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "新運算式的選擇性鏈結無效。您想要呼叫 '{0}()' 嗎?", + "Invalid_reference_directive_syntax_1084": "無效的 'reference' 指示詞語法。", + "Invalid_syntax_in_decorator_1498": "裝飾項目中無效的語法。", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "'{0}' 的使用無效。不能在類別靜態區塊內使用。", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "'{0}' 的用法無效。模組會自動採用 strict 模式。", + "Invalid_use_of_0_in_strict_mode_1100": "在 strict 模式中使用 '{0}' 無效。", + "Invalid_value_for_ignoreDeprecations_5103": "'--ignoreDeprecations' 的值無效。", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "'jsxFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "'jsxFragmentFactory' 的值無效。'{0}' 不是有效的識別碼或限定名稱。", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "'--reactNamespace' 的值無效。'{0}' 不是有效的識別碼。", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "可能是未使用逗號分隔這兩個範本運算式,因而形成了附加標籤的範本運算式,導致無法叫用。", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "其元素類型 '{0}' 不是有效的 JSX 元素。", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "其執行個體類型 '{0}' 不是有效的 JSX 元素。", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "其傳回型別 '{0}' 不是有效的 JSX 元素。", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "其類型 '{0}' 不是有效的 JSX 元素類型。", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "JSDoc '@{0} {1}' 不符合 'extends {2}' 子句。", + "JSDoc_0_is_not_attached_to_a_class_8022": "JSDoc ''@{0}' 未連結到類別。", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' 只能出現在特徵標記的最後一個參數中。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "JSDoc '@param' 標記的名稱為 '{0}',但沒有為該名稱的參數。", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "JSDoc '@param' 標籤的名稱為 '{0}',但沒有任何參數使用該名稱。如有陣列類型,則會與 'arguments' 相符。", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "JSDoc typedef 可以轉換成 TypeScript 類型。", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "JSDoc '@typedef' 標記應具有類型註解,或者其後接著 '@property' 或 '@member' 標記。", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "JSDoc typedefs 可以轉換成 TypeScript 類型。", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "JSDoc 類型只能在文件註解中使用。", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "JSDoc 類型可移為 TypeScript 類型。", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "只能將非空白的 'expression' 指派給 JSX 屬性。", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "JSX 元素 '{0}' 沒有對應的結尾標記。", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "因為 JSX 項目類別沒有 '{0}' 屬性 (property),所以不支援屬性 (attribute)。", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "因為沒有介面 'JSX.{0}',表示 JSX 項目隱含了類型 'any'。", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "因為全域類型 'JSX.Element' 不存在,所以 JSX 項目隱含有類型 'any'。", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "JSX 項目類型 '{0}' 沒有任何建構或呼叫簽章。", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "JSX 項目不得有多個同名的屬性。", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "JSX 運算式不可使用逗號運算子。您是要寫入陣列嗎?", + "JSX_expressions_must_have_one_parent_element_2657": "JSX 運算式必須具有一個父元素。", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "JSX 片段沒有對應的結尾標記。", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "JSX 屬性存取運算式不能包含 JSX 命名空間名稱", + "JSX_spread_child_must_be_an_array_type_2609": "JSX 擴張子系必須為陣列類型。", + "JavaScript_Support_6247": "JavaScript 支援", + "Jump_target_cannot_cross_function_boundary_1107": "跳躍目標不得跨越函式界限。", + "KIND_6034": "類型", + "Keywords_cannot_contain_escape_characters_1260": "關鍵字不可包含逸出字元。", + "LOCATION_6037": "位置", + "Language_and_Environment_6254": "語言及環境", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "逗號運算子左側未使用,而且沒有任何不良影響。", + "Library_0_specified_in_compilerOptions_1422": "CompilerOptions 中指定的程式庫 '{0}'", + "Library_referenced_via_0_from_file_1_1405": "透過 '{0}' 從檔案 '{1}' 參考的程式庫", + "Line_break_not_permitted_here_1142": "這裡不可使用分行符號。", + "Line_terminator_not_permitted_before_arrow_1200": "箭號前不得有行結束字元。", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "解析模組時要搜尋的檔案名尾碼清單。", + "List_of_folders_to_include_type_definitions_from_6161": "要包含之類型定義所屬資料夾的清單。", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "資料夾的清單。這些資料夾內所含的合併內容代表了專案在執行階段時的結果。", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "正在從根目錄 '{1}',候選位置 '{2}' 載入 '{0}'。", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "正在從 'node_modules' 資料夾載入模組 '{0}',目標檔案類型: {1}。", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "正在將模組載入為檔案/資料夾,候選模組位置 '{0}',目標檔案類型: {1}。", + "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "地區設定的格式必須是 <語言> 或 <語言>-<國家/地區>。例如 '{0}' 或 '{1}'。", + "Log_paths_used_during_the_moduleResolution_process_6706": "在 'moduleResolution' 處理序期間使用的記錄檔路徑。", + "Longest_matching_prefix_for_0_is_1_6108": "符合 '{0}' 的前置詞最長為 '{1}'。", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "目前正在 'node_modules' 資料夾中查詢,初始位置為 '{0}'。", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "在其建構函式的第一個陳述式中呼叫所有的 'super()'", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "僅讓 keyof 傳回字串,而不是單一字串、數字或符號。舊版選項。", + "Make_super_call_the_first_statement_in_the_constructor_90002": "使 'super()' 呼叫成為建構函式中的第一個陳述式", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "對應的物件類型隱含具有 'any' 範本類型。", + "Mark_array_literal_as_const_90070": "標記陣列常值為常數", + "Matched_0_condition_1_6403": "符合 '{0}' 條件 '{1}'。", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "依預設比對包含模式 '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "依 '{1}' 中的包含模式 '{0}' 比對", + "Member_0_implicitly_has_an_1_type_7008": "成員 '{0}' 隱含了 '{1}' 類型。", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "成員 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", + "Merge_conflict_marker_encountered_1185": "偵測到合併衝突標記。", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "合併宣告 '{0}' 不得包含預設匯出宣告。請考慮改為加入獨立型 'export default {0}' 宣告。", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "只有函式宣告、函式運算式或建構函式的主體中允許中繼屬性 '{0}'。", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "因為方法 '{0}' 已標記為抽象,所以不可具有實作。", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "匯出介面的方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "匯出介面的方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "方法必須有具備 --isolatedDeclarations 的明確傳回型別註解。", + "Method_not_implemented_95158": "未實作方法。", + "Modifiers_cannot_appear_here_1184": "此處不得出現修飾元。", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "模組 '{0}' 只能依預設使用 '{1}' 旗標匯入", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "無法使用此建構匯入模組 '{0}'。指定名稱只能解析成無法以 'require' 匯入的 ES 模組。請改為使用 ECMAScript 匯入。", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "模組 '{0}' 區域性地宣告 '{1}',但卻將該模組匯出為 '{2}'。", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "模組 '{0}' 區域性地宣告 '{1}',但並未匯出該模組。", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "模組 '{0}' 不是類型,但在此處卻作為類型使用。您是指 'typeof import('{0}')' 嗎?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "模組 '{0}' 未參考任何值,但在此用為值。", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "模組 {0} 已匯出名為 '{1}' 的成員。請考慮明確重新匯出項目以解決模稜兩可的情形。", + "Module_0_has_no_default_export_1192": "模組 '{0}' 沒有預設匯出。", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "模組 '{0}' 沒有預設匯出。您是要改用 'import { {1} } from {0}' 嗎?", + "Module_0_has_no_exported_member_1_2305": "模組 '{0}' 沒有匯出的成員 '{1}'。", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "模組 '{0}' 沒有匯出的成員 '{1}'。您是要改用 'import {1} from {0}' 嗎?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "同名的區域宣告隱藏了模組 '{0}'。", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "模組 '{0}' 使用 'export =',因而無法以 'export *' 的方式使用。", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "模組 '{0}' 在檔案 '{1}' 中已解析為本機宣告的環境模組。", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "模組 '{0}' 已解析為 '{1}',但是尚未設定 '--allowArbitraryExtensions'。", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "模組 '{0}' 已解析為 '{1}',但未設定 '--jsx'。", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "模組 '{0}' 已解析為 '{1}',但未使用 '--resolveJsonModule'。", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "模組宣告名稱只能使用 ' 或 \" 引用的字串。", + "Module_name_0_matched_pattern_1_6092": "模組名稱 '{0}',符合的模式 '{1}'。", + "Module_name_0_was_not_resolved_6090": "======== 模組名稱 '{0}' 未解析。========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== 模組名稱 '{0}' 已成功解析為 '{1}'。========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== 模組名稱 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}'。========", + "Module_resolution_kind_is_not_specified_using_0_6088": "未指定模組解析種類,將使用 '{0}'。", + "Module_resolution_using_rootDirs_has_failed_6111": "使用 'rootDirs' 解析模組失敗。", + "Modules_6244": "模組", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "將標記的元組元素修飾元移至標籤", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "將預設匯出中的運算式移動到變數,並在其中新增類型註釋。", + "Move_to_a_new_file_95049": "移至新檔", + "Move_to_file_95178": "移動至檔案", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "不允許多個連續的數字分隔符號。", + "Multiple_constructor_implementations_are_not_allowed_2392": "不允許多個建構函式實作。", + "NEWLINE_6061": "新行", + "Name_is_not_valid_95136": "名稱無效", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "只有以 'ES2018' 或更新版本為目標時,才可以使用具名擷取群組。", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "具有相同名稱的命名擷取群組必須互相排除。", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "延遲的匯出中不允許具名匯入。", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "當 'module' 設定為 '{0}' 時,不允許從 JSON 檔案具名匯入 ECMAScript 模組。", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "類型 '{1}' 及 '{2}' 的具名屬性 '{0}' 不一致。", + "Namespace_0_has_no_exported_member_1_2694": "命名空間 '{0}' 沒有匯出的成員 '{1}'。", + "Namespace_must_be_given_a_name_1437": "必須為命名空間指定名稱。", + "Namespace_name_cannot_be_0_2819": "命名空間名稱不得為 '{0}'。", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "啟用 '{0}' 時,在全域指令碼檔案中不允許命名空間。如果此檔案不是預定為全域指令碼,將 'moduleDetection' 設定為 'force',或新增空白的 'export {}' 陳述式。", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "裝飾項目和修飾元都無法套用至 'this' 參數。", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "沒有任何基底建構函式具有指定的類型引數數量。", + "No_constituent_of_type_0_is_callable_2755": "無法呼叫 '{0}' 類型的任何構件。", + "No_constituent_of_type_0_is_constructable_2759": "無法建構 '{0}' 類型的任何構件。", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "在類型 '{1}' 中找不到任何具有 '{0}' 類型之參數的索引簽章。", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "在設定檔 '{0}' 中找不到任何輸入。指定的 'include' 路徑為 '{1}','exclude' 路徑為 '{2}'。", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "不再支援。在早期版本中,手動設定讀取檔案的文字編碼方式。", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "沒有任何多載需要 {0} 引數,但有多載需要 {1} 或 {2} 引數。", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "沒有任何多載需要 {0} 類型引數,但有多載需要 {1} 或 {2} 類型引數。", + "No_overload_matches_this_call_2769": "沒有任何多載符合此呼叫。", + "No_type_could_be_extracted_from_this_type_node_95134": "無法從此類型節點擷取任何類型", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "速記屬性 '{0}' 的範圍中不存在任何值。請宣告一個值或提供初始設定式。", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "非抽象類別 '{0}' 未實作從類別 '{2}' 繼承而來的抽象成員 '{1}'。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2}。", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "下列 '{1}' 成員缺少非抽象類別 '{0}' 的實作: {2} 和 {3} 等。", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "非抽象類別運算式未實作從類別 '{1}' 繼承而來的抽象成員 '{0}'。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1}。", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "下列 '{0}' 成員缺少非抽象類別運算式的實作: {1} 和 {2} 等。", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "非 Null 的判斷提示只可用於 TypeScript 檔案中。", + "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "未設定 'baseUrl' 時,不得使用非相對路徑。是否忘記使用前置 './'?", + "Non_simple_parameter_declared_here_1348": "非簡易參數已宣告於此處。", + "Not_all_code_paths_return_a_value_7030": "部分程式碼路徑並未傳回值。", + "Not_all_constituents_of_type_0_are_callable_2756": "'{0}' 類型的構件並非都可呼叫。", + "Not_all_constituents_of_type_0_are_constructable_2760": "'{0}' 類型的構件並非都可構建。", + "Numbers_out_of_order_in_quantifier_1506": "數字在數量詞中失序。", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "絕對值等於或大於 2^53 的數字常值過大,無法準確地表示為整數。", + "Numeric_separators_are_not_allowed_here_6188": "這裡不允許數字分隔符號。", + "Object_is_of_type_unknown_2571": "物件的類型為 '未知'。", + "Object_is_possibly_null_2531": "物件可能為「null」。", + "Object_is_possibly_null_or_undefined_2533": "物件可能為「null」或「未定義」。", + "Object_is_possibly_undefined_2532": "物件可能為「未定義」。", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "物件常值只可指定已知的屬性,且類型 '{1}' 中沒有 '{0}'。", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "物件常值只會指定已知的屬性,但類型 '{1}' 中沒有 '{0}'。您是否想要寫入 '{2}'?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "物件常值的屬性 '{0}' 隱含了 '{1}' 類型。", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "無法使用 --isolatedDeclarations 推斷包含速記屬性的物件。", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "無法使用 --isolatedDeclarations 推斷包含擴張作業的物件。", + "Octal_digit_expected_1178": "必須是八進位數字。", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "字元類別中不允許八進位逸出序列和反向參考。如果要做為逸出序列,請改用語法 '{0}'。", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "不允許八進位逸出序列。請使用語法 '{0}'。", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "不允許八進位常值。請使用語法 '{0}'。", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "'{0}.{1}' 的一個值是字串 '{2}',另一個值假設為未知的數值。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "'for...in' 陳述式中只可包含一個變數宣告。", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "'for...of' 陳述式只能包含一個變數宣告。", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "只有 void 函式可以使用 'new' 關鍵字進行呼叫。", + "Only_ambient_modules_can_use_quoted_names_1035": "只有環境模組可以使用括以引號的名稱。", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "只有 'amd' 與 'system' 模組連同受支援 --{0}。", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "僅常數陣列可以使用 --isolatedDeclarations 推斷。", + "Only_emit_d_ts_declaration_files_6014": "只發出 '.d.ts' 宣告檔案。", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "只輸出 d.ts 檔案,而不是 JavaScript 檔案。", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "只有基底類別之公開且受保護的方法,才可透過 'super' 關鍵字存取。", + "Operator_0_cannot_be_applied_to_type_1_2736": "無法將運算子 '{0}' 套用至類型 '{1}'。", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "無法將運算子 '{0}' 套用至類型 '{1}' 和 '{2}'。", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "運算子不得混合在字元類別中。改為將運算子包裝在巢狀類別中。", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "在編輯時從多專案參考檢查選擇一個專案。", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "已移除選項 '{0}={1}'。請將該選項從您的設定中移除。", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "選項 '{0}={1}' 已被取代,將在 TypeScript {2} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{3}\"' 以沉默此錯誤。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'false' 或 'null'。", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "只能在 'tsconfig.json' 檔案中指定 '{0}' 選項,或在命令列上將其設定為 'null'。", + "Option_0_can_only_be_specified_on_command_line_6266": "選項 '{0}' 只能在命令列中指定。", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "只有在已提供選項 '--inlineSourceMap' 或選項 '--sourceMap' 時,才可使用選項 '{0}'。", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "只有當 'moduleResolution' 設定為 'node16'、'nodenext' 或 'bundler' 時,才可以使用選項 '{0}'。", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "只有當 'module' 設定為 'preserve'、'es2015' 或更新版本時,才能使用 '{0}' 選項。", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "當選項 'jsx' 為 '{1}' 時,無法指定選項 '{0}'。", + "Option_0_cannot_be_specified_with_option_1_5053": "不得同時指定選項 '{0}' 與選項 '{1}'。", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "必須指定選項 '{1}' 才可指定選項 '{0}'。", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "指定選項 '{0}' 時,必須指定選項 '{1}' 或選項 '{2}'。", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "已移除選項 '{0}'。請將該選項從您的設定中移除。", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "選項 '{0}' 已被取代,將在 TypeScript {1} 中停止運作。指定 compilerOption '\"ignoreDeprecations\": \"{2}\"' 以沉默此錯誤。", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "選項 '{0}' 為多餘且不得與選項 '{1}'一起指定。", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "僅在已設定 'noEmit' 或 'emitDeclarationOnly' 時,才能使用選項 'allowImportingTsExtensions'。", + "Option_build_must_be_the_first_command_line_argument_6369": "選項 '--build' 必須是第一個命令列引數。", + "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "只有在使用 tsconfig、發出至單一檔案,或指定 '--tsBuildInfoFile' 選項時,才可指定 '--incremental'選項。", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "只有在提供選項 '--module' 或是 'target' 為 'ES2015' 或更高項目時,才可使用選項 'isolatedModules'。", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "當選項 'module' 設定為 '{1}' 時,選項 'moduleResolution' 必須設定為 '{0}' (或保留為未指定)。", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "當選項 'moduleResolution' 設定為 '{1}' 時,選項 'module' 必須設定為 '{0}'。", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "啟用 '{0}' 時,無法停用選項 'preserveConstEnums'。", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "在命令列上,'project' 選項不得與原始程式檔並用。", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "當 'moduleResolution' 設定為 'classic' 時,不得指定 '--resolveJsonModule' 選項。", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "當 'module' 設定為 'none'、'system' 或 'umd' 時,不得指定 '--resolveJsonModule' 選項。", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "當 'module' 設定為 'UMD'、'AMD' 或 'System' 時,無法使用選項 'verbatimModuleSyntax'。", + "Options_0_and_1_cannot_be_combined_6370": "無法合併選項 '{0}' 與 '{1}'。", + "Options_Colon_6027": "選項:", + "Other_Outputs_6291": "其他輸出", + "Output_Formatting_6256": "輸出格式", + "Output_compiler_performance_information_after_building_6615": "在組建後輸出編譯器效能資訊。", + "Output_directory_for_generated_declaration_files_6166": "所產生之宣告檔案的輸出目錄。", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "輸出檔 '{0}' 並非從原始程式檔 '{1}' 建置。", + "Output_from_referenced_project_0_included_because_1_specified_1411": "因為指定了 '{1}',所以包含參考的專案 '{0}' 輸出", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 輸出", + "Output_more_detailed_compiler_performance_information_after_building_6632": "在組建後輸出更詳細的編譯器效能資訊。", + "Overload_0_of_1_2_gave_the_following_error_2772": "多載 {0} (共 {1}),'{2}',發生下列錯誤。", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "多載簽章必須全為抽象或非抽象。", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "多載簽章都必須是環境或非環境簽章。", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "多載簽章必須全部匯出或不匯出。", + "Overload_signatures_must_all_be_optional_or_required_2386": "多載簽章都必須是選擇性或必要簽章。", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "多載簽章必須是公用、私用或受保護。", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "參數 '{0}' 不得參考在其之後宣告的識別碼 '{1}'。", + "Parameter_0_cannot_reference_itself_2372": "參數 '{0}' 不得參考自身。", + "Parameter_0_implicitly_has_an_1_type_7006": "參數 '{0}' 隱含了 '{1}' 類型。", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "參數 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "參數 '{0}' 與參數 '{1}' 不在同一個位置。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "存取子的參數 '{0}' 具有 (或正在使用) 來自外部模組 '{2}' 的名稱 '{1}',但無法予以命名。", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "存取子的參數 '{0}' 具有 (或正在使用) 來自私人模組 '{2}' 的名稱 '{1}'。", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "存取子的參數 '{0}' 具有 (或正在使用) 私人名稱 '{1}'。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "匯出介面之呼叫簽章的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "匯出介面之呼叫簽章的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "匯出類別中建構函式的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "匯出類別中建構函式的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "匯出類別中建構函式的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "匯出介面中建構函式簽章的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "匯出介面中建構函式簽章的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "匯出函式的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "匯出函式的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "匯出函式的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "匯出介面的索引簽章參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "匯出介面的索引簽章參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "匯出介面中方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "匯出介面中方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "匯出類別中公用方法的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "匯出類別中公用方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "匯出類別中公用方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "匯出類別中公用靜態方法的參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Parameter_cannot_have_question_mark_and_initializer_1015": "參數不得有問號及初始設定式。", + "Parameter_declaration_expected_1138": "必須是參數宣告。", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "參數具有名稱但沒有類型。您是指 '{0}: {1}' 嗎?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "參數修飾元只可用於 TypeScript 檔案中。", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "參數必須有具備 --isolatedDeclarations 的明確類型註釋。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "匯出類別中公用 setter '{0}' 的參數類型具有或是正在使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "匯出類別中公用 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "匯出類別中公用靜態 setter '{0}' 的參數類型具有或正在使用私用名稱 '{1}'。", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "在 strict 模式中進行剖析,並為每個來源檔案發出 \"use strict\"。", + "Part_of_files_list_in_tsconfig_json_1409": "tsconfig.json 中的部分 'files' 清單", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "模式 '{0}' 最多只可有一個 '*' 字元。", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "在此工作階段中無法使用 '--diagnostics ' 或 '--extendedDiagnostics ' 的效能計時。找不到 Web 效能 API 的原生實作。", + "Platform_specific_6912": "平台特定", + "Prefix_0_with_an_underscore_90025": "具有底線的前置詞 '{0}'", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "在所有不正確屬性宣告的開頭放置 'declare'", + "Prefix_all_unused_declarations_with_where_possible_95025": "若可行,為所有未使用的宣告加上前置詞 '_'", + "Prefix_with_declare_95094": "以 'declare' 開頭", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "保留 JavaScript 輸出中未使用的匯入值,否則將予以移除。", + "Print_all_of_the_files_read_during_the_compilation_6653": "列印在編譯期間讀取的所有檔案。", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "列印在編譯期間讀取的檔案,包括其包含的原因。", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "列印檔案名稱,以及檔案屬於編譯的原因。", + "Print_names_of_files_part_of_the_compilation_6155": "列印編譯時檔案部分的名稱。", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "列印屬於編譯一部分的檔案名稱,然後停止處理。", + "Print_names_of_generated_files_part_of_the_compilation_6154": "列印編譯時所產生之檔案部分的名稱。", + "Print_the_compiler_s_version_6019": "列印編譯器的版本。", + "Print_the_final_configuration_instead_of_building_1350": "列印而非建置最終組態。", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "在編譯後列印已發出檔案的名稱。", + "Print_this_message_6017": "列印這則訊息。", + "Private_accessor_was_defined_without_a_getter_2806": "私人存取子已在不使用 getter 的情況下定義。", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "私人欄位 '{0}' 必須在封閉類別中宣告。", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "變數宣告中不允許私人識別碼。", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "不允許私人識別碼位於類別主體外。", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "私人識別碼只能在類別主體中使用,且只能做為類別成員宣告、屬性存取或 'in' 運算式左側的一部分使用", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "只有當目標為 ECMAScript 2015 及更新版本時,才可使用私人識別碼。", + "Private_identifiers_cannot_be_used_as_parameters_18009": "私人識別碼不可用作為參數。", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "無法在型別參數上存取私人或受保護的成員 '{0}'。", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以無法建置該專案", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "因為未建置專案 '{0}' 的相依性 '{1}',所以無法建置該專案", + "Project_0_is_being_forcibly_rebuilt_6388": "正在強制重建專案 '{0}'", + "Project_0_is_out_of_date_because_1_6420": "由於 {1},專案 '{0}' 已過期。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示檔案 '{2}' 曾經是編譯的根檔案,但已不再是。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 指出程式需要報告錯誤。", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "因為 buildinfo 檔案 '{1}' 指出某些變更並未發出,所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "專案 '{0}' 已過期,因為 buildinfo 檔案 '{1}' 表示 compilerOptions 中有變更", + "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "因為專案 '{0}' 的相依性 '{1}' 已過期,所以該專案已過期", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "因為輸出 '{1}' 早於輸入 '{2}',所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "因為輸出檔案 '{1}' 不存在,所以專案 '{0}' 已過期", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "因為專案 '{0}' 的輸出使用版本 '{1}' 產生而成,與目前的版本 '{2}' 不同,所以該專案已過期", + "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "專案 '{0}' 已過期,因為讀取檔案 '{1}' 時發生錯誤", + "Project_0_is_up_to_date_6361": "專案 '{0}' 為最新狀態", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "因為最新的輸入 '{1}' 早於最舊的輸出 '{2}',所以專案 '{0}' 為最新狀態", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "專案 '{0}' 為最新狀態,但需要更新比輸入檔案還舊的輸出檔案時間戳記", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "專案 '{0}' 為最新狀態,且有來自其相依性的 .d.ts 檔案", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "專案參考不會形成循環圖。但偵測到循環: {0}", + "Projects_6255": "專案", + "Projects_in_this_build_Colon_0_6355": "此組建中的專案: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "只有以 ECMAScript 2015 及更新版本為目標時,才可使用具有 'accessor' 修飾詞的屬性。", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "屬性 '{0}' 已標記為抽象,因此不得有初始設定式。", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "屬性 '{0}' 來自索引簽章,因此必須使用 ['{0}'] 存取。", + "Property_0_does_not_exist_on_type_1_2339": "類型 '{1}' 沒有屬性 '{0}'。", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "類型 '{1}' 沒有屬性 '{0}'。您指的是 '{2}' 嗎?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "屬性 '{0}' 不存在於類型 '{1}' 上。您要存取的是靜態成員 '{2}' 嗎?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "類型 '{1}' 沒有屬性 '{0}'。要變更您的目標程式庫嗎? 請嘗試將 'lib' 編譯器選項變更為 '{2}' 或更新版本。", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "屬性 '{0}' 不存在於類型 '{1}' 上。嘗試將 'lib' 編譯器選項變更為包含 'dom'。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "屬性 '{0}' 沒有初始設定式,且未在類別靜態區塊中明確指派。", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "屬性 '{0}' 沒有初始設定式,且未在建構函式中明確指派。", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "因為屬性 '{0}' 的 get 存取子沒有傳回類型註釋,致使該屬性意味著類型 'any'。", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "因為屬性 '{0}' 的 set 存取子沒有參數類型註釋,致使該屬性意味著類型 'any'。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "屬性 '{0}' 隱含類型 'any',但可從使用方式推斷更適合其 get 存取子的類型。", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "屬性 '{0}' 隱含類型 'any',但可從使用方式推斷更適合其 set 存取子的類型。", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "類型 '{1}' 中的屬性 '{0}' 無法指派給基底類型 '{2}' 中的相同屬性。", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "不得將類型 '{1}' 的屬性 '{0}' 指派給類型 '{2}'。", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "類型 '{1}' 中的屬性 '{0}' 是無法從類型 '{2}' 中存取的其他成員。", + "Property_0_is_declared_but_its_value_is_never_read_6138": "屬性 '{0}' 已宣告但從未讀取其值。", + "Property_0_is_incompatible_with_index_signature_2530": "屬性 '{0}' 和索引簽章不相容。", + "Property_0_is_missing_in_type_1_2324": "類型 '{1}' 遺漏屬性 '{0}'。", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "類型 '{1}' 缺少屬性 '{0}',但類型 '{2}' 必須有該屬性。", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "因為屬性 '{0}' 具有私人識別碼,所以無法在類別 '{1}' 外存取該屬性。", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "在類型 '{1}' 中,'{0}' 是選擇性屬性,但在類型 '{2}' 中則為必要屬性。", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "'{0}' 是私用屬性,只可從類別 '{1}' 中存取。", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "在類型 '{1}' 中,'{0}' 是私用屬性,但在類型 '{2}' 中不是。", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "屬性 '{0}' 已受到保護,只能透過類別 '{1}' 的執行個體加以存取。這是類別 '{2}' 的執行個體。", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "'{0}' 是受保護屬性,只可從類別 '{1}' 及其子類別中存取。", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "'{0}' 是受保護屬性,但類型 '{1}' 不是衍生自 '{2}' 的類別。", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "在類型 '{1}' 中,'{0}' 是受保護屬性,但在類型 '{2}' 中是公用屬性。", + "Property_0_is_used_before_being_assigned_2565": "屬性 '{0}' 已在指派之前使用。", + "Property_0_is_used_before_its_initialization_2729": "將屬性 '{0}' 初始化前已使用該屬性。", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "類型 '{1}' 可能不存在屬性 '{0}'。您指的是 '{2}' 嗎?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "JSX 擴張屬性 (Attribute) 的屬性 (Property) '{0}' 不可指派給目標屬性 (Property)。", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "匯出之匿名類別類型的屬性 '{0}' 不可為私人或受保護的。", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "匯出介面的屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "匯出介面的屬性 '{0}' 具有或使用私用名稱 '{1}'。", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "類型 '{1}' 的屬性 '{0}' 不可指派給 '{2}' 索引類型 '{3}'。", + "Property_0_was_also_declared_here_2733": "屬性 '{0}' 也已定義於此處。", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "屬性 '{0}' 將會覆寫 '{1}' 中的基底屬性。如果是故意覆寫的,請新增初始設定式。否則,請新增 'declare' 修飾元或移除多餘的宣告。", + "Property_assignment_expected_1136": "必須是屬性指派。", + "Property_destructuring_pattern_expected_1180": "必須是屬性解構模式。", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "屬性必須有具備 --isolatedDeclarations 的明確類型註釋。", + "Property_or_signature_expected_1131": "必須是屬性或簽章。", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "屬性值僅能為字串常值、數值常值、'true'、'false'、'null'、物件常值或陣列常值。", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "當目標為 'ES5' 時,為 'for-of'、擴張及解構中的可疊代物件提供完整的支援。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "匯出類別的公用方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "匯出類別的公用方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "匯出類別的公用方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "匯出類別的公用屬性 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "匯出類別的公用屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "匯出類別的公用屬性 '{0}' 具有或使用私用名稱 '{1}'。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "匯出類別的公用靜態方法 '{0}' 具有或使用外部模組 {2} 的名稱 '{1}',但無法命名。", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "匯出類別的公用靜態方法 '{0}' 具有或使用私用模組 '{2}' 的名稱 '{1}'。", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "匯出類別的公用靜態方法 '{0}' 具有或使用私用名稱 '{1}'。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "匯出類別的公用靜態屬性 '{0}' 具有或使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用模組 '{2}' 中的名稱 '{1}'。", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "匯出類別的公用靜態屬性 '{0}' 具有或使用私用名稱 '{1}'。", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "限定名稱 '{0}' 必須以 '@param {object} {1}' 開頭。", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "當函式參數未讀取時引發錯誤。", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "當運算式及宣告包含隱含的 'any' 類型時顯示錯誤。", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "對具有隱含 'any' 類型的 'this' 運算式引發錯誤。", + "Range_out_of_order_in_character_class_1517": "字元類別中的範圍失序。", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "啟用 '{0}' 時重新匯出類型需要使用 'export type'。", + "React_components_cannot_include_JSX_namespace_names_2639": "React 元件不得包含 JSX 命名空間名稱", + "Recommended_Options_6294": "建議選項", + "Redirect_output_structure_to_the_directory_6006": "將輸出結構重新導向至目錄。", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "減少 TypeScript 自動載入的專案數目。", + "Referenced_project_0_may_not_disable_emit_6310": "參考的專案 '{0}' 不得停用發出。", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "參考的專案 '{0}' 之設定 \"composite\" 必須為 true。", + "Referenced_via_0_from_file_1_1400": "透過 '{0}' 從檔案 '{1}' 參考", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。建議為匯入路徑新增副檔名。", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "當 '--moduleResolution' 為 'node16' 或 'nodenext' 時,相對匯入路徑在 ECMAScript 匯入中需要明確的副檔名。您是指 '{0}' 嗎?", + "Remove_a_list_of_directories_from_the_watch_process_6628": "從監看處理序移除目錄清單。", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "從監視模式的處理移除檔案清單。", + "Remove_all_unnecessary_override_modifiers_95163": "移除所有不必要的 'override' 修飾元", + "Remove_all_unnecessary_uses_of_await_95087": "移除所有不必要的 'await' 使用方式", + "Remove_all_unreachable_code_95051": "移除所有無法連線的程式碼", + "Remove_all_unused_labels_95054": "移除所有未使用的標籤", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "從具有相關問題的所有箭號函式主體中移除大括號", + "Remove_braces_from_arrow_function_95060": "從箭號函式移除大括號", + "Remove_braces_from_arrow_function_body_95112": "從箭號函式主體中移除大括號", + "Remove_import_from_0_90005": "從 '{0}' 移除匯入", + "Remove_override_modifier_95161": "移除 'override' 修飾元", + "Remove_parentheses_95126": "移除括弧", + "Remove_template_tag_90011": "移除範本標籤", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "移除 TypeScript 語言伺服器中 JavaScript 檔案的總原始程式碼大小 20mb 上限。", + "Remove_type_from_import_declaration_from_0_90055": "從 \"{0}\" 移除匯入宣告中的 'type'", + "Remove_type_from_import_of_0_from_1_90056": "從 \"{1}\" 移除匯入 '{0}' 中的 'type'", + "Remove_type_parameters_90012": "移除型別參數", + "Remove_unnecessary_await_95086": "移除不必要的 'await'", + "Remove_unreachable_code_95050": "移除無法連線的程式碼", + "Remove_unused_declaration_for_Colon_0_90004": "移除下列項目未使用的宣告: '{0}'", + "Remove_unused_declarations_for_Colon_0_90041": "移除 '{0}' 未使用的宣告", + "Remove_unused_destructuring_declaration_90039": "移除未使用的解構宣告", + "Remove_unused_label_95053": "移除未使用的標籤", + "Remove_variable_statement_90010": "移除變數陳述式", + "Rename_param_tag_name_0_to_1_95173": "將 '@param' 標籤名稱 '{0}' 重新命名為'{1}'", + "Replace_0_with_Promise_1_90036": "將 '{0}' 取代為 'Promise<{1}>'", + "Replace_all_unused_infer_with_unknown_90031": "以 'unknown' 取代所有未使用的 'infer'", + "Replace_import_with_0_95015": "以 '{0}' 取代匯入。", + "Replace_infer_0_with_unknown_90030": "以 'unknown' 取代 'infer {0}'", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "當函式中的部分程式碼路徑並未傳回值時回報錯誤。", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "回報 switch 陳述式內 fallthrough 案例的錯誤。", + "Report_errors_in_js_files_8019": "報告 .js 檔案中的錯誤。", + "Report_errors_on_unused_locals_6134": "回報未使用之區域變數的錯誤。", + "Report_errors_on_unused_parameters_6135": "回報未使用之參數的錯誤。", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "匯出時需要足夠的註釋,讓其他工具可以簡單地產生宣告檔案。", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "需要來自索引簽章的未宣告屬性,才能使用元素存取。", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "必要型別參數可能未遵循選擇性型別參數。", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "從位置 '{1}' 的快取中找到模組 '{0}' 的解析。", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "從位置 '{0}' 的快取記憶體找到類型參照指示詞 '{1}'。", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "解析非相對名稱失敗; 嘗試停用新式節點解析功能,以查看 npm 程式庫是否需要更新設定。", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "解析非相對名稱失敗; 嘗試使用 '--moduleResolution bundler' 查看專案是否可能需要更新設定。", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "只將 'keyof' 解析為字串值的屬性名稱 (無任何數字或符號)。", + "Resolved_under_condition_0_6414": "已在條件 '{0}' 下解析。", + "Resolving_in_0_mode_with_conditions_1_6402": "正在以條件 {1} 在 {0} 模式中解析。", + "Resolving_module_0_from_1_6086": "======== 正在從 '{1}' 解析模組 '{0}'。========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "正在解析與基底 URL '{1}' 相對的模組名稱 '{0}' - '{2}'。", + "Resolving_real_path_for_0_result_1_6130": "正在解析 '{0}' 的真實路徑,結果 '{1}'。", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}'。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',根目錄 '{2}'。========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== 正在解析類型參考指示詞 '{0}',包含檔案 '{1}',未設定根目錄。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,根目錄 '{1}'。========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== 正在解析類型參考指示詞 '{0}',未設定包含檔案,未設定根目錄。 ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "正在解析指定自訂 typeRoots 程式的類型參考指示詞,並跳過 'node_modules' 資料夾中的查詢。", + "Resolving_with_primary_search_path_0_6121": "正在解析主要搜尋路徑 '{0}'。", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "剩餘參數 '{0}' 隱含了 'any[]' 類型。", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "其餘參數 '{0}' 隱含 'any[]' 類型,但可從使用方式推斷更適合的類型。", + "Rest_types_may_only_be_created_from_object_types_2700": "Rest 類型只能從物件類型建立。", + "Return_type_annotation_circularly_references_itself_2577": "傳回型別註解會循環參考自身。", + "Return_type_must_be_inferred_from_a_function_95149": "必須從函式推斷傳回型別", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "匯出介面中呼叫簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "匯出介面中呼叫簽章的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "匯出介面中建構函式簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "匯出介面中建構函式簽章的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "建構函式簽章的傳回類型必須能夠指派給類別的執行個體類型。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "匯出函式的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "匯出函式的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "匯出函式的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "匯出介面中索引簽章的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "匯出介面中索引簽章的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "匯出介面中方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "匯出介面中方法的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用私用模組 {2} 中的名稱 '{1}'。", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "匯出類別中公用 getter '{0}' 的傳回型別具有或正在使用私用名稱 '{1}'。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "匯出類別中公用方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "匯出類別中公用方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "匯出類別中公用方法的傳回型別具有或使用私用名稱 '{0}'。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用外部模組 {2} 中的名稱 '{1}',但無法命名。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用私用模組 '{2}' 中的名稱 '{1}'。", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "匯出類別中公用靜態 getter '{0}' 的傳回型別具有或正在使用私用名稱 '{1}'。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "匯出類別中公用靜態方法的傳回型別具有或使用外部模組 {1} 中的名稱 '{0}',但無法命名。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "匯出類別中公用靜態方法的傳回型別具有或使用私用模組 '{1}' 中的名稱 '{0}'。", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "匯出類別中公用靜態方法的傳回型別具有或使用私用名稱 '{0}'。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{3}'。", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為 '{2}'。", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "在舊程式的 '{1}' 中重複使用模組 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{3}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "在位置 '{2}' 的快取中找到的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{4}' 的 '{3}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,它尚未加以解析。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為 '{2}'。", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "在舊程式的 '{1}' 中重複使用類型參考指示詞 '{0}' 的解析,已成功將其解析為套件識別碼為 '{3}' 的 '{2}'。", + "Rewrite_all_as_indexed_access_types_95034": "將全部重寫為經過編製索引的存取類型", + "Rewrite_as_the_indexed_access_type_0_90026": "重寫為索引存取類型 '{0}'", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "將相對匯入路徑中的 '.ts'、'.tsx'、'.mts'、'.cts' 檔案副檔名重寫為輸出檔案中的 JavaScript 對應檔名。", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "?? 的右運算元無法連線,因為左運算元永遠不會是 nullish。", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "無法判斷根目錄,將略過主要搜尋路徑。", + "Root_file_specified_for_compilation_1427": "為編譯指定的根檔案", + "STRATEGY_6039": "策略", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "儲存 .tsbuildinfo 檔案,以允許對專案進行累加編譯。", + "Saw_non_matching_condition_0_6405": "儲存不相符條件 '{0}'。", + "Scoped_package_detected_looking_in_0_6182": "偵測到範圍套件,正於 '{0}' 尋找", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "正在搜尋所有上階 node_modules 目錄,以取得後援延伸模組: {0}。", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "正在搜尋所有上階 node_modules 目錄,以取得慣用延伸模組: {0}。", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "另請參閱 https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "選取項目非有效的一或多個陳述式", + "Selection_is_not_a_valid_type_node_95133": "選取範圍不是有效的類型節點", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "為發出的 JavaScript 設定 JavaScript 語言版本,並包含相容的程式庫宣告。", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "設定來自 TypeScript 的訊息語言。這不會影響發出。", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "將組態檔中的 'module' 選項設定為 '{0}'", + "Set_the_newline_character_for_emitting_files_6659": "設定發出檔案的新行字元。", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "將組態檔中的 'target' 選項設定為 '{0}'", + "Setters_cannot_return_a_value_2408": "setter 無法傳回值。", + "Show_all_compiler_options_6169": "顯示所有的編譯器選項。", + "Show_diagnostic_information_6149": "顯示診斷資訊。", + "Show_verbose_diagnostic_information_6150": "顯示詳細診斷資訊。", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "顯示將會建置 (或刪除 - 若是指定有 '--clean') 的內容", + "Signature_0_must_be_a_type_predicate_1224": "簽章 '{0}' 必須是型別述詞。", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "簽章宣告僅能在 TypeScript 檔案中使用。", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "上游專案發生錯誤時,略過建置下游專案。", + "Skip_type_checking_all_d_ts_files_6693": "略過所有 .d.ts 檔案的型別檢查。", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "略過 TypeScript 中包含 .d.ts 檔案的型別檢查。", + "Skip_type_checking_of_declaration_files_6012": "跳過宣告檔案的類型檢查。", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "因為專案 '{0}' 的相依性 '{1}' 發生錯誤,所以跳過建置該專案", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "因為未建置專案 '{0}' 的相依性 '{1}',所以正在跳過該專案的組建", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "正在跳過看起來像絕對 URI 的模組 '{0}',目標檔案類型: {1}。", + "Source_from_referenced_project_0_included_because_1_specified_1414": "因為指定了 '{1}',所以包含參考的專案 '{0}' 來源", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "因為 '--module' 指定為 'none',所以包含參考的專案 '{0}' 來源", + "Source_has_0_element_s_but_target_allows_only_1_2619": "來源具有 {0} 個元素,但目標只允許 {1} 個。", + "Source_has_0_element_s_but_target_requires_1_2618": "來源有 {0} 個元素,但目標需要 {1} 個。", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "來源未針對目標中位於 {0} 的必要元素提供相符項目。", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "來源未針對目標中位於 {0} 的可變元素提供相符項目。", + "Specify_ECMAScript_target_version_6015": "指定 ECMAScript 目標版本。", + "Specify_JSX_code_generation_6080": "指定 JSX 程式碼產生。", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "指定將所有輸出組合成一個 JavaScript 檔案的檔案。如果 'declaration' 為 True,則也會指定組合所有 .d.ts 輸出的檔案。", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "指定符合編譯中要包含之檔案的 glob 模式清單。", + "Specify_a_list_of_language_service_plugins_to_include_6681": "指定要包含的語言服務外掛程式清單。", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "指定一組描述目標執行階段環境的配套程式庫宣告檔案。", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "指定一組將匯入重新對應至其他查閱位置的項目。", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "指定為專案指定路徑的物件陣列。用於專案參考。", + "Specify_an_output_folder_for_all_emitted_files_6678": "指定所有發出檔案的輸出檔案夾。", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "指定僅用於類型之匯入的發出/檢查行為。", + "Specify_file_to_store_incremental_compilation_information_6380": "指定要儲存累加編譯資訊的檔案", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "指定 TypeScript 從指定的模組指定名稱查詢檔案的方式。", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "指定在缺少遞迴檔案監視功能之系統上如何監視目錄。", + "Specify_how_the_TypeScript_watch_mode_works_6715": "指定 TypeScript 監看式模式的運作方式。", + "Specify_library_files_to_be_included_in_the_compilation_6079": "請指定要併入編譯中的程式庫檔案。", + "Specify_module_code_generation_6016": "指定模組程式碼產生。", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "指定使用 'jsx: react-jsx*' 時,用來匯入 JSX Factory 函式的模組指定名稱。", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "指定多個資料夾,其作用類似 './node_modules/@types'。", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "指定一或多個路徑或節點模組參考至繼承設定的基礎設定檔。", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "指定用於自動擷取宣告檔案的選項。", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "指定當輪詢監看無法使用下列檔案系統事件建立時,加以建立的策略: 'FixedInterval' (預設)、'PriorityInterval'、'DynamicPriority'、'FixedChunkSize'。", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "指定在未原生支援遞迴監看的平台上,監看目錄的策略: 'UseFsEvents' (預設)、'FixedPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'。", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "指定監看檔案的策略: 'FixedPollingInterval' (預設)、'PriorityPollingInterval'、'DynamicPriorityPolling'、'FixedChunkSizePolling'、'UseFsEvents'、'UseFsEventsOnParentDirectory'。", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "指定要在以 React JSX 發出為目標時使用於片段的 JSX 片段參考,例如 'React.Fragment' 或 'Fragment'。", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "請指定要在以 'react' JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "請指定要在以 React JSX 發出為目標時使用的 JSX factory 函式。例如 'React.createElement' 或 'h'。", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "當指定以 'jsxFactory' 編譯器選項設定 'react' JSX 輸出的目標時,請指定要使用的 JSX 片段處理站函式,例如 'Fragment'。", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "指定基礎目錄來解析非相對的模組名稱。", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "指定發出檔案時要用的行尾順序: 'CRLF' (DOS) 或 'LF' (UNIX)。", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "指定偵錯工具尋找 TypeScript 檔案的位置,而非原始檔位置。", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "指定偵錯工具尋找對應檔的位置,而非產生的位置。", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "指定用來檢查來自 'node_modules' 之 JavaScript 檔案的資料夾深度上限。僅適用於 'allowJs'。", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "指定用於匯入 `jsx` 與 `jsxs` 工廠函式的模組指定名稱。例如,傳送表情符號", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "指定 'createElement' 叫用的物件。這僅適用於在以 'react' JSX 發出為目標時。", + "Specify_the_output_directory_for_generated_declaration_files_6613": "指定產生的宣告檔案的輸出目錄。", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "指定 .tsbuildinfo 累加編譯檔案的路徑。", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "指定輸入檔的根目錄。用以控制具有 --outDir 的輸出目錄結構。", + "Specify_the_root_folder_within_your_source_files_6690": "指定來源檔案內的根資料夾。", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "指定偵錯工具尋找參考原始程式碼的根路徑。", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "指定要包含的類型封裝名稱,而不在來源檔案中參考。", + "Specify_what_JSX_code_is_generated_6646": "指定要產生的 JSX 程式碼。", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "指定當系統用盡原生檔案監控程式時,監控程式應使用的方法。", + "Specify_what_module_code_is_generated_6657": "指定要產生的模組程式碼。", + "Split_all_invalid_type_only_imports_1367": "分割所有無效的僅限類型匯入", + "Split_into_two_separate_import_declarations_1366": "分割為兩個獨立的匯入宣告", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "只有當目標為 ECMAScript 5 及更高版本時,才可使用 'new' 運算式中的擴張運算子。", + "Spread_types_may_only_be_created_from_object_types_2698": "Spread 類型只能從物件類型建立。", + "Starting_compilation_in_watch_mode_6031": "在監看模式中開始編譯...", + "Statement_expected_1129": "必須是陳述式。", + "Statements_are_not_allowed_in_ambient_contexts_1036": "環境內容中不得有陳述式。", + "Static_members_cannot_reference_class_type_parameters_2302": "靜態成員不得參考類別類型參數。", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "靜態屬性 '{0}' 與建構函式 '{1}' 的內建屬性 'Function.{0}' 相衝突。", + "Stricter_Typechecking_Options_6292": "更嚴格的類型檢查選項", + "String_literal_expected_1141": "必須是字串常值。", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "當 '--module' 旗標設定為 'es2015' 或 'es2020' 時,不支援字串常值匯入和匯出名稱。", + "String_literal_with_double_quotes_expected_1327": "應有具雙引號的字串常值。", + "Style_Options_6293": "樣式選項", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "使用色彩及內容來設計錯誤與訊息的風格 (實驗)。", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "當有減號時,必須有子模式旗標。", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "後續的屬性宣告必須具有相同的類型。屬性 '{0}' 的類型必須是 '{1}',但此處卻是類型 '{2}'。", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "後續的變數宣告必須具有相同的類型。變數 '{0}' 的類型必須是 '{1}' 但卻是 '{2}'。", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "模式 '{1}' 的替代 '{0}' 類型不正確,必須為 'string',但得到 '{2}'。", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "模式 '{1}' 中的替代 '{0}' 最多可有一個 '*' 字元。", + "Substitutions_for_pattern_0_should_be_an_array_5063": "模式 '{0}' 的替代應為陣列。", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "模式 '{0}' 的替代項目不應為空陣列。", + "Successfully_created_a_tsconfig_json_file_6071": "已成功建立 tsconfig.json 檔案。", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "建構函式外部或建構函式內的巢狀函式中不允許 super 呼叫。", + "Suppress_excess_property_checks_for_object_literals_6072": "不對物件常值進行多餘的屬性檢查。", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "針對缺少索引簽章的索引物件隱藏 noImplicitAny 錯誤。", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "針對缺少索引簽章的物件編製索引時,隱藏 'noImplicitAny' 錯誤。", + "Switch_each_misused_0_to_1_95138": "將每個誤用的 '{0}' 切換成 '{1}'", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "在不支援原生遞迴監視之平台上,同步呼叫回呼並更新目錄監控程式的狀態。", + "Syntax_Colon_0_6023": "語法: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "標籤 '{0}' 至少需要 '{1}' 個引數,但 JSX factory '{2}' 最多只提供 '{3}' 個。", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "選擇性鏈結中不允許已標記的範本運算式。", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "目標只允許 {0} 個元素,但來源的元素可能較多。", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "目標需要 {0} 個元素,但來源的元素可能較少。", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "目標特徵標記提供的引數過少。應有 {0} 個或更多,但只取得 {1} 個。", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "'{0}' 修飾元只可用於 TypeScript 檔案中。", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "無法將 '{0}' 運算子套用至類型 'symbol'。", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "布林類型不允許有 '{0}' 運算子。請考慮改用 '{1}'。", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "非同步迭代器的 '{0}' 屬性必須為方法。", + "The_0_property_of_an_iterator_must_be_a_method_2767": "迭代器的 '{0}' 屬性必須為方法。", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "'Object' 類型可指派給極少數的其他類型。要改用 'any' 類型嗎?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "無法同時設定 Unicode (u) 旗標和 Unicode Sets (v) 旗標。", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "在 ES5 中,箭號函式內無法參考 'arguments' 物件。建議使用標準函式運算式。", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "在 ES5 中,非同步函式或方法無法參考 'arguments' 物件。建議使用標準函式或方法。", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "'if' 陳述式的主體不能是空白陳述式。", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "對此實作的呼叫會成功,但多載的實作簽章未向外部顯示。", + "The_character_set_of_the_input_files_6163": "輸入檔的字元集。", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "包含的箭號函式會擷取 'this' 的全域值。", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "內含的函式或模組主體對控制流程分析而言過大。", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "目前的檔案是 CommonJS 模組,無法在最上層使用 'await'。", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "目前的檔案是 CommonJS 模組,其匯入將會產生 'require' 呼叫;不過,參考的檔案是 ECMAScript 模組,無法以 'require' 匯入。請考慮改為撰寫動態 'import(\"{0}\")' 呼叫。", + "The_current_host_does_not_support_the_0_option_5001": "目前的主機不支援 '{0}' 選項。", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "您可能要使用的 '{0}' 宣告定義於此處", + "The_declaration_was_marked_as_deprecated_here_2798": "該宣告在這裡標示為已淘汰。", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "所需類型來自屬性 '{0}',該屬性宣告於此處的類型 '{1}' 上", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "所需類型來自此簽章的傳回型別。", + "The_expected_type_comes_from_this_index_signature_6501": "所需類型來自此索引簽章。", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "匯出指派的運算式必須是環境內容中的識別碼或完整名稱。", + "The_file_is_in_the_program_because_Colon_1430": "檔案在程式中,因為:", + "The_files_list_in_config_file_0_is_empty_18002": "設定檔 '{0}' 中的 'files' 清單是空的。", + "The_first_export_default_is_here_2752": "第一個匯出預設位於此處。", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "Promise 的 'then' 方法第一個參數必須為回撥。", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "全域類型 'JSX.{0}' 的屬性不得超過一個。", + "The_implementation_signature_is_declared_here_2750": "實作簽章宣告於此處。", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "將會組建至 CommonJS 輸出的檔案中不允許 'import.meta' 中繼屬性。", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "只有當 '--module' 選項為 'es2020'、'es2022'、'esnext'、'system'、'node16'、'node18'、'node20' 或 'nodenext' 時,才允許 'import.meta' 中繼屬性。", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "'{0}' 的推斷類型無法在沒有 '{1}' 參考的情況下命名。其可能非可攜式。必須有型別註解。", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "'{0}' 的推斷型別參考了具有迴圈結構且不是可完整序列化的型別。必須有型別註解。", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "'{0}' 的推斷型別參考了無法存取的 '{1}' 型別。必須有型別註解。", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "此節點的推斷型別超過編譯器將序列化的長度上限。需要明確的型別註解。", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "'using' 宣告的初始設定式必須是具備 '[Symbol.dispose]()' 方法的物件,或是 'null' 或 'undefined'。", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "'await using' 宣告的初始設定式必須是具備 '[Symbol.asyncDispose]()' 方法或 '[Symbol.dispose]5D;()' 方法的物件,或是 'null' 或 'undefined'。", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "因為屬性 '{1}' 存在於多個部分,而且在某些部分為私人性質,所以交集 '{0}' 已縮減為 'never'。", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "因為屬性 '{1}' 在某些部分有衝突的類型,所以交集 '{0}' 已縮減為 'never'。", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "'intrinsic' 關鍵字只可用於宣告編譯器提供的內建類型。", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "必須提供 'jsxFragmentFactory' 編譯器選項,才能使用具有 'jsxFactory' 編譯器選項的 JSX 片段。", + "The_last_overload_gave_the_following_error_2770": "最後一個多載出現下列錯誤。", + "The_last_overload_is_declared_here_2771": "最後一個多載宣告於此處。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "'for...in' 陳述式的左側不得為解構模式。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "'for...in' 陳述式左側不可為 'using' 宣告。", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "'for...in' 陳述式左側不可為 'await using' 宣告。", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "'for...in' 陳述式左側不得使用類型註釋。", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "'for...in' 陳述式的左側不可為選擇性屬性存取。", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "'for...in' 陳述式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "'for...in' 陳述式的左側必須是類型 'string' 或 'any'。", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "'for...of' 陳述式的左側不得使用類型註釋。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "'for...of' 陳述式的左側不可為選擇性屬性存取。", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "'for...of' 陳述式的左側不可為 'async'。", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "'for...of' 陳述式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "算術運算的左側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "指派運算式的左側不可為選擇性屬性存取。", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "指派運算式的左邊必須是變數或屬性存取。", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "'instanceof' 運算式的左側必須可指派至右側 '[Symbol.hasInstance]' 方法的第一個引數。", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "'instanceof' 運算式左側必須是類型 'any'、物件類型或型別參數。", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "對使用者顯示訊息時所使用的地區設定 (例如 'zh-tw')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "在 node_modules 及載入 JavaScript 檔案下搜尋時的最大相依性深度。", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "'delete' 運算子的運算元不可為私人識別碼。", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "'delete' 運算子的運算元不可為唯讀屬性。", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "'delete' 運算子的運算元必須為屬性參考。", + "The_operand_of_a_delete_operator_must_be_optional_2790": "'delete' 運算子的運算元必須是非必須。", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "遞增或遞減運算子的運算元不可為選擇性屬性存取。", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "遞增或遞減運算子的運算元必須是變數或屬性存取。", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "剖析器需要找到 '{1}',以對應此處的 '{0}' 權杖。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "專案根目錄模棱兩可,但需要用以解決檔案 '{1}' 中的匯出對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "專案根目錄模稜兩可,但需要在檔案 '{1}' 中解析匯入對應項目 '{0}'。請提供 'rootDir' 編譯器選項來釐清。", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "無法在此類別內的類型 '{1}' 上存取屬性 '{0}',原因是另一個拼字相同的私人識別碼已將其陰影。", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "參數裝飾項目函式的傳回型別必須是 'void' 或 'any'。", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "屬性裝飾項目函式的傳回型別必須是 'void' 或 'any'。", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "非同步函式的傳回型別必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "非同步函式或方法的傳回類型必須為全域 Promise 類型。", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "非同步函式或方法的傳回型別,必須為全域 Promise 類型。是否要寫入 'Promise<{0}>'?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "'for...in' 陳述式的右方必須是類型 'any'、物件類型或型別參數,但此處為類型 '{0}'。", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "算術運算的右側內容必須屬於 'any'、'number'、'bigint' 或列舉類型。", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "'instanceof' 運算式右側必須為 'any' 類型、類別、函式或其他可指派至 'Function' 介面型別的型別,或是具備 'Symbol.hasInstance' 方法的物件類型。", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "'instanceof' 運算式右側不可為具現化運算式。", + "The_root_value_of_a_0_file_must_be_an_object_5092": "'{0}' 檔案的根值必須是物件。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目需要 {0} 個。", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "執行階段會以 {1} 個引數叫用裝飾項目,但裝飾項目至少需要 {0} 個。", + "The_shadowing_declaration_of_0_is_defined_here_18017": "'{0}' 的隱蔽宣告定義於此處", + "The_signature_0_of_1_is_deprecated_6387": "'{1}' 的特徵標記 '{0}' 已淘汰。", + "The_specified_path_does_not_exist_Colon_0_5058": "指定的路徑不存在: '{0}'。", + "The_tag_was_first_specified_here_8034": "此標籤第一次指定於此處。", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "物件其餘指派的目標不可為選擇性屬性存取。", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "物件剩餘指派的目標必須為變數或屬性存取。", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "類型 '{0}' 的 'this' 內容無法指派給方法之類型 '{1}' 的 'this'。", + "The_this_types_of_each_signature_are_incompatible_2685": "各個簽章的 'this' 類型不相容。", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "類型 '{0}' 為 'readonly',因此無法指派給可變動的類型 '{1}'。", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "[類型修飾元] 無法在 [匯出類型]5D; 於其匯出陳述式上使用時,在命名的匯出上使用。", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "[類型修飾元] 無法在 [匯入類型]5D; 於其匯入陳述式上使用時,在命名的匯入上使用。", + "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "函式宣告的類型必須與函式的簽章相符。", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "無法將此節點的類型序列化,因為無法將其屬性 '{0}' 序列化。", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "非同步迭代器 '{0}()' 方法所傳回的類型,對具有 'value' 屬性的類型必須為 Promise。", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "迭代器 '{0}()' 方法所傳回的類型必須具有 'value' 屬性。", + "The_types_of_0_are_incompatible_between_these_types_2200": "'{0}' 的類型在這些類型之間不相容。", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "'{0}' 所傳回的類型在這些類型之間不相容。", + "The_value_0_cannot_be_used_here_18050": "此處無法使用值 '{0}'。", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "'for...in' 陳述式的變數宣告不得有初始設定式。", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "'for...of' 陳述式的變數宣告不得有初始設定式。", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "不支援 'with' 陳述式。'with' 區塊中的所有符號都會有類型 'any'。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "'{0}' 具有型別,不過在目前的 'moduleResolution' 設定下,無法解析此結果。建議更新為 'node16'、'nodenext' 或 'bundler'。", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "'{0}' 具有型別,不過在採用 package.json \"exports\" 的狀態下,無法解析此結果。'{1}' 程式庫可能需要更新其 package.json 或輸入。", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "此規則運算式中沒有名為 '{0}' 的擷取群組。", + "There_is_nothing_available_for_repetition_1507": "沒有可重複的內容。", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "此 JSX 標籤需要 '{0}' 在範圍內,但無法找到。", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "此 JSX 標籤需要模組路徑 '{0}' 存在,但無法找到。請確定您已安裝適當的套件類型。", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "此 JSX 標籤的 '{0}' 屬性只能有一個 '{1}' 類型的子系,但提供的子系卻有多個。", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "此 JSX 標籤的 '{0}' 屬性需要必須有多個子系的類型 '{1}',但僅提供的子系只有一個。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "此反向參考參照的群組不存在。此規則運算式中沒有任何擷取群組。", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "此反向參考參照的群組不存在。此規則運算式中只有 {0} 個擷取群組。", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "此二進位運算式一律不會是 nullish。是否缺少括弧?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "此字元無法在規則運算式中逸出。", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "此比較似乎是無意的,因為類型 '{0}' 和 '{1}' 沒有重疊。", + "This_condition_will_always_return_0_2845": "此條件一律傳回 '{0}'。", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "此條件一律會傳回 '{0}',因為 JavaScript 會依參照而非值比較物件。", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "因為此 '{0}' 一律會被定義,所以此條件一律傳回 True。", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "因為永遠會定義此函式,所以此條件永遠會傳回 true。您是要改為呼叫該條件嗎?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "此建構函式可轉換為類別宣告。", + "This_expression_is_always_nullish_2871": "此運算式一律為 nullish.", + "This_expression_is_never_nullish_2881": "此運算式一律不會是 nullish。", + "This_expression_is_not_callable_2349": "無法呼叫此運算式。", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "因為此運算式為 'get' 存取子,所以無法呼叫。要在沒有 '()' 的情況下,使用該運算式嗎?", + "This_expression_is_not_constructable_2351": "無法建構此運算式。", + "This_file_already_has_a_default_export_95130": "此檔案已有預設匯出", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "重寫此匯入路徑並不安全,因為其解析到另一個專案,而專案輸出檔案之間的相對路徑與其輸入檔案之間的相對路徑不同。", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "這個匯入使用 '{0}' 副檔名來解析到輸入的 TypeScript 檔案,但在發出時不會重寫,因為其不是相對路徑。", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "此宣告正在增加中。請考慮將正在增加的宣告移至相同的檔案中。", + "This_kind_of_expression_is_always_falsy_2873": "此種運算式的值一律為 false。", + "This_kind_of_expression_is_always_truthy_2872": "此種運算式的值一律為 true。", + "This_may_be_converted_to_an_async_function_80006": "這可以轉換為非同步函式。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "此成員不能包含具有 'override' 標籤的 JSDoc 註解,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為包含此成員的類別 '{0}' 並未延伸另一個類別。", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為其名稱為動態。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "因為此成員並未在基底類別 '{0}' 中宣告,所以其不得具有 'override' 修飾元。", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "此成員不能具有 'override' 修飾元,因為並未在基底類別 '{0}' 中宣告此成員。您指的是 '{1}' 嗎?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "因為此成員包含的類別 '{0}' 並未延伸其他類別,所以其不得具有 'override' 修飾元。", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "此成員的名稱為動態,因此不能有 『override』 修飾元。", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "此成員必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "因為此成員會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "因為此成員會覆寫基底類別 '{0}' 中宣告的抽象方法,所以其必須具有 'override' 修飾元。", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "只能以 ECMAScript 匯入/匯出來參考此模組,方法為開啟 '{0}' 旗標並參考其預設匯出。", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "此模組使用 'export =' 宣告,只能在使用 '{0}' 旗標時搭配預設匯入使用。", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "此作業可簡化。此班次與 `{0} {1} {2}` 完全相同。", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "由於缺少傳回型別註解,故此多載會隱含傳回 '{0}' 型別。", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "此多載簽章與其實作簽章不相容。", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "不允許此參數搭配 'use strict' 指示詞使用。", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "此參數屬性必須包含具有 '@override' 標籤的 JSDoc 註解,因為其會覆寫基底類別 '{0}' 中的成員。", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "因為此參數屬性會覆寫基底類別 '{0}' 中的成員,所以其必須具有 'override' 修飾元。", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "無法在子模式內切換此規則運算式旗標。", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "只有以 '{0}' 或更新版本作為目標時,才能使用規則運算式旗標。", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "此相對匯入路徑在重寫時是不安全的,因為其看起來像檔案名稱,但實際上解析為 \"{0}\"。", + "This_spread_always_overwrites_this_property_2785": "此展開會永遠覆寫此屬性。", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "啟用 'erasableSyntaxOnly' 時,不允許使用此語法。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "此語法是保留在具有 mts 或 cts 副檔名的檔案中。新增尾端逗號或明確條件約束。", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "此語法會保留在具有 mts 或 cts 副檔名的檔案中。請改用 `as` 運算式。", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "此語法需要已匯入的協助程式,但找不到模組 '{0}'。", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "此語法需要名為 '{1}' 的已匯入協助程式,但其不存在於 '{0}' 中。請考慮升級您的 '{0}' 版本。", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "此語法需要名為 '{1}' 且具有 {2} 參數的匯入協助程式,其與 '{0}' 中的參數不相容。請考慮升級 '{0}' 的版本。", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "此類型參數可能需要 'extends {0}' 限制式。", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "此 'import' 的使用方式無效。'import()' 呼叫可以寫入,但必須有括弧,而且不能有類型引數。", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "若要將此檔案轉換為 ECMAScript 模組,請將欄位 `{ \"type\": \"module\" }` 新增至 '{0}'。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或將欄位 `\"type\": \"module\"` 新增至 '{1}'。", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "若要將此檔案轉換為 ECMAScript 模組,請將其副檔名變更為 '{0}',或使用 `{ \"type\": \"module\" }` 建立本機 package.json 檔案。", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "若要將此檔案轉換為 ECMAScript 模組,請建立具有 `{ \"type\": \"module\" }` 的本機 package.json 檔案。", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'await' 運算式。", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "只有當 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',且 'target' 選項設為 'es2017' 或更高版本時,才能在最上層使用 'await using' 陳述式。", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": ".d.ts 檔案中的最上層宣告必須以 'declare' 或 'export' 修飾元開頭。", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "只有在 'module' 選項設為 'es2022'、'esnext'、'system'、'node16'、'node18'、'node20'、'nodenext' 或 'preserve',而且 'target' 選項設為 'es2017' 或更高版本時,才允許最上層的 'for await' 迴圈。", + "Trailing_comma_not_allowed_1009": "尾端不得為逗號。", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "以個別模組的形式轉換每個檔案的語言 (類似於 'ts.transpileModule')。", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "如有 `npm i --save-dev @types/{1}`,請嘗試使用,或新增包含 `declare module '{0}';` 的宣告 (.d.ts) 檔案", + "Trying_other_entries_in_rootDirs_6110": "正在嘗試 'rootDirs' 中的其他項目。", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "正在嘗試替代 '{0}',候選模組位置: '{1}'。", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "長度為 '{1}' 的元組類型 '{0}' 在索引 '{2}' 沒有項目。", + "Tuple_type_arguments_circularly_reference_themselves_4110": "元組類型引數會循環參考自身。", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "只有使用 '--downlevelIteration' 旗標或 'es2015' 或更新版本的 '--target' 時,才能逐一查看類型 '{0}'。", + "Type_0_cannot_be_used_as_an_index_type_2538": "類型 '{0}' 無法作為索引類型。", + "Type_0_cannot_be_used_to_index_type_1_2536": "類型 '{0}' 無法用來為類型 '{1}' 編制索引。", + "Type_0_does_not_satisfy_the_constraint_1_2344": "類型 '{0}' 不符合條件約束 '{1}'。", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "類型 '{0}' 不符合預期類型 '{1}'。", + "Type_0_has_no_call_signatures_2757": "類型 '{0}' 沒有任何呼叫簽章。", + "Type_0_has_no_construct_signatures_2761": "類型 '{0}' 沒有任何建構簽章。", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "類型 '{0}' 沒有與類型 '{1}' 相符的索引簽章。", + "Type_0_has_no_properties_in_common_with_type_1_2559": "類型 '{0}' 與類型 '{1}' 沒有任何共通的屬性。", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "類型 '{0}' 沒有適用類型引數清單的簽章。", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "類型 '{0}' 為泛型型別,只能針對讀取編製索引。", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "類型 '{0}' 在類型 '{1}' 中缺少下列屬性: {2},以及另外 {3} 個。", + "Type_0_is_not_a_constructor_function_type_2507": "類型 '{0}' 不是建構函式類型。", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "在 ES5 中,'{0}' 型別並非有效的非同步傳回型別,因為其不會參考與 Promise 相容的建構函式值。", + "Type_0_is_not_an_array_type_2461": "類型 '{0}' 不是陣列類型。", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "類型 '{0}' 不是陣列類型或字串類型。", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "類型 '{0}' 不是陣列類型或字串類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "類型 '{0}' 不是陣列類型,或沒有會傳回迭代器的 '[Symbol.iterator]()' 方法。", + "Type_0_is_not_assignable_to_type_1_2322": "類型 '{0}' 不可指派給類型 '{1}'。", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "不得將類型 '{0}' 指派給類型 '{1}'。您指的是 '{2}' 嗎?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "無法將類型 '{0}' 指派給類型 '{1}'。有兩種使用此名稱的不同類型存在,但彼此並不相關。", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "無法將型別 '{0}' 指派給型別 '{1}',如變異數註釋所隱含。", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "無法將類型 '{0}' 指派給計算之列舉成員值所需的 '{1}'。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標屬性的類型。", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "類型 '{0}' 無法指派給類型為具有 'exactOptionalPropertyTypes: true' 的類型 '{1}'。請考慮將 'undefined' 新增到目標的類型。", + "Type_0_is_not_comparable_to_type_1_2678": "類型 '{0}' 無法和類型 '{1}' 比較。", + "Type_0_is_not_generic_2315": "'{0}' 不是泛型類型。", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "類型 '{0}' 可能代表基本值,但不允許做為 'in' 運算子的右運算元。", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "類型 '{0}' 必須具備會傳回非同步迭代器的 '[Symbol.asyncIterator]()' 方法。", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "類型 '{0}' 必須具備會傳回迭代器的 '[Symbol.iterator]()' 方法。", + "Type_0_provides_no_match_for_the_signature_1_2658": "類型 '{0}' 沒有符合特徵標記 '{1}' 的項目。", + "Type_0_recursively_references_itself_as_a_base_type_2310": "類型 '{0}' 將自己當做基底類型遞迴參考。", + "Type_Checking_6248": "類型檢查", + "Type_alias_0_circularly_references_itself_2456": "類型別名 '{0}' 會循環參考自己。", + "Type_alias_must_be_given_a_name_1439": "必須為類型別名指定名稱。", + "Type_alias_name_cannot_be_0_2457": "類型別名不得為 '{0}'。", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "類型別名只可用於 TypeScript 檔案中。", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "建構函式宣告不得有類型註釋。", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "型別註解只可用於 TypeScript 檔案中。", + "Type_argument_expected_1140": "必須是型別引數。", + "Type_argument_list_cannot_be_empty_1099": "型別引數清單不得為空白。", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "類型引數只可用於 TypeScript 檔案中。", + "Type_arguments_for_0_circularly_reference_themselves_4109": "'{0}' 的類型引數會循環參考自身。", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "類型判斷提示運算式只可用於 TypeScript 檔案中。", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "來源中位於 {0} 的類型與目標中位於 {1} 的類型不相容。", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "來源中位於 {0} 到 {1} 的類型與目標中位於 {2} 的類型不相容。", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "型別如包含私人名稱 '{0}',則無法搭配 --isolatedDeclarations 使用。", + "Type_declaration_files_to_be_included_in_compilation_6124": "要包含在編譯內的類型宣告檔案。", + "Type_expected_1110": "必須是類型。", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "輸入匯入判斷提示應該只有一個索引鍵 - 'resolution-mode' - 值為 'import' 或 'require'。", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "型別匯入屬性應只有一個索引鍵 'resolution-mode',且值為 'import' 或 'require'。", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "從 CommonJS 模組匯入 ECMAScript 模組的類型必須有 'resolution-mode' 屬性。", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "類型具現化過深,可能會有無限深度。", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "類型在其本身 'then' 方法的完成回撥中直接或間接受到參考。", + "Type_library_referenced_via_0_from_file_1_1402": "透過 '{0}' 從檔案 '{1}' 參考的型別程式庫", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "透過 '{0}' 從檔案 '{1}' (packageId 為 '{2}') 參考的型別程式庫", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "'await' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "已計算屬性值的類型為 '{0}',其無法指派給類型 '{1}'。", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "執行個體成員變數 '{0}' 的類型不得參考建構函式中所宣告的識別碼 '{1}'。", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "'yield*' 運算元的反覆項目類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "屬性 '{0}' 的類型在對應的類型 '{1}' 中會循環參考自己。", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "非同步產生器中的 'yield' 運算元類型必須是有效的 Promise,或不得包含可呼叫的 'then' 成員。", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "從 CommonJS 模組進行僅限類型匯入 ECMAScript 模組時,必須有 'resolution-mode' 屬性。", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "類型源自此匯入。無法呼叫或建構命名空間樣式的匯入,而且可能會在執行階段導致失敗。請考慮改用預設匯入或於此處匯入 require。", + "Type_parameter_0_has_a_circular_constraint_2313": "類型參數 '{0}' 具有循環條件約束。", + "Type_parameter_0_has_a_circular_default_2716": "型別參數 '{0}' 包含循環的預設值。", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "匯出介面中呼叫簽章的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "匯出介面中建構函式簽章的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "匯出類別的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "匯出函式的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "匯出介面的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "已匯出對應物件類型的型別參數 '{0}' 正在使用私人名稱 '{1}'。", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "匯出類型別名的型別參數 '{0}' 具有或正在使用私人名稱 '{1}'。", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "匯出介面中方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "匯出類別中公用方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "匯出類別中公用靜態方法的型別參數 '{0}' 具有或使用私用名稱 '{1}'。", + "Type_parameter_declaration_expected_1139": "必須是型別參數宣告。", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "型別參數宣告只可用於 TypeScript 檔案中。", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "型別參數預設只能參考先前宣告的型別參數。", + "Type_parameter_list_cannot_be_empty_1098": "型別參數清單不得為空白。", + "Type_parameter_name_cannot_be_0_2368": "型別參數名稱不得為 '{0}'。", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "建構函式宣告不得有類型參數。", + "Type_predicate_0_is_not_assignable_to_1_1226": "型別述詞 '{0}' 不可指派給 '{1}'。", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "類型產生的元組類型太大而無法表示。", + "Type_reference_directive_0_was_not_resolved_6120": "======== 類型參考指示詞 '{0}' 未解析。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',主要: {2}。========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== 類型參考指示詞 '{0}' 已成功解析為 '{1}',套件識別碼為 '{2}',主要: {3}。========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "類型滿足運算式只可用於 TypeScript 檔案。", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "類型不能出現在 JavaScript 檔案的匯出宣告中。", + "Types_have_separate_declarations_of_a_private_property_0_2442": "類型具有私用屬性 '{0}' 的個別宣告。", + "Types_of_construct_signatures_are_incompatible_2419": "建構簽章的類型不相容。", + "Types_of_parameters_0_and_1_are_incompatible_2328": "參數 '{0}' 和 '{1}' 的類型不相容。", + "Types_of_property_0_are_incompatible_2326": "屬性 '{0}' 的類型不相容。", + "Unable_to_open_file_0_6050": "無法開啟檔案 '{0}'。", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "無法解析以運算式形式呼叫之類別裝飾項目的簽章。", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "無法解析以運算式形式呼叫之方法裝飾項目的簽章。", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "無法解析以運算式形式呼叫之參數裝飾項目的簽章。", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "無法解析以運算式形式呼叫之屬性裝飾項目的簽章。", + "Undetermined_character_escape_1513": "未定字元逸出。", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "未預期的 '{0}'。您是要使用反斜線將其逸出嗎?", + "Unexpected_end_of_text_1126": "未預期的文字結尾。", + "Unexpected_keyword_or_identifier_1434": "未預期的關鍵字或識別碼。", + "Unexpected_token_1012": "未預期的語彙基元。", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "未預期的語彙基元。必須是建構函式、方法、存取子或屬性。", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "權杖錯誤。類型參數名稱不應有大括號。", + "Unexpected_token_Did_you_mean_or_gt_1382": "未預期的語彙基元。您是指 `{'>'}` 或 `>` 嗎?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "未預期的語彙基元。您是指 `{'}'}` 或 `}` 嗎?", + "Unexpected_token_expected_1179": "未預期的語彙基元。必須是 '{'。", + "Unicode_escape_sequence_cannot_appear_here_17021": "此處不可出現 Unicode 逸出序列。", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 逸出序列。", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "只有在設定 Unicode (u) 旗標或 Unicode Sets (v) 旗標後,才能使用 Unicode 屬性值運算式。", + "Unknown_Unicode_property_name_1524": "未知的 Unicode 屬性名稱。", + "Unknown_Unicode_property_name_or_value_1529": "未知的 Unicode 屬性名稱或值。", + "Unknown_Unicode_property_value_1526": "未知的 Unicode 屬性值。", + "Unknown_build_option_0_5072": "未知的組建選項 '{0}'。", + "Unknown_build_option_0_Did_you_mean_1_5077": "未知的組建選項 '{0}'。您是指 '{1}' 嗎?", + "Unknown_compiler_option_0_5023": "不明的編譯器選項 '{0}'。", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "未知的編譯器選項 '{0}'。您是指 '{1}' 嗎?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "未知的關鍵字或識別碼。您是不是指 '{0}'?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "選項 'excludes' 未知。您是指 'exclude' 嗎?", + "Unknown_regular_expression_flag_1499": "未知的規則運算式旗標。", + "Unknown_type_acquisition_option_0_17010": "未知的類型取得選項 '{0}'。", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "未知的類型擷取選項 '{0}'。您是指 '{1}' 嗎?", + "Unknown_watch_option_0_5078": "未知的監看選項 '{0}'。", + "Unknown_watch_option_0_Did_you_mean_1_5079": "未知的監看選項 '{0}'。您是指 '{1}' 嗎?", + "Unreachable_code_detected_7027": "偵測到無法執行到的程式碼。", + "Unterminated_Unicode_escape_sequence_1199": "未結束的 Unicode 逸出序列。", + "Unterminated_quoted_string_in_response_file_0_6045": "回應檔 '{0}' 中有未結束的括號字串。", + "Unterminated_regular_expression_literal_1161": "未結束的規則運算式常值。", + "Unterminated_string_literal_1002": "未結束的字串常值。", + "Unterminated_template_literal_1160": "未結束的樣板常值。", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "不具類型的函式呼叫無法接受類型引數。", + "Unused_label_7028": "未使用的標籤。", + "Unused_ts_expect_error_directive_2578": "未使用的 '@ts-expect-error' 指示詞。", + "Update_import_from_0_90058": "從 \"{0}\" 更新匯入", + "Update_modifiers_of_0_90061": "更新 '{0}' 的修飾元", + "Updating_output_timestamps_of_project_0_6359": "正在更新專案 '{0}' 的輸出時間戳記...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "正在更新專案 '{0}' 的未更變輸出時間戳記...", + "Use_0_95174": "使用 `{0}`。", + "Use_0_instead_5106": "請改用 '{0}'。", + "Use_Number_isNaN_in_all_conditions_95175": "在所有條件中都使用 'Number.isNaN'。", + "Use_element_access_for_0_95145": "對 '{0}' 使用元素存取", + "Use_element_access_for_all_undeclared_properties_95146": "對所有未宣告的屬性使用元素存取。", + "Use_import_type_95180": "請使用 'import type'", + "Use_synthetic_default_member_95016": "使用綜合 'default' 成員。", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "解析套件匯入時,請使用 package.json 'exports' 欄位。", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "解析匯入時,請使用 package.json 'imports' 欄位。", + "Use_type_0_95181": "請使用 'type {0}'", + "Using_0_subpath_1_with_target_2_6404": "使用 '{0}' 子路徑 '{1}' 與目標 '{2}'。", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "使用 JSX 片段需要片段中心 '{0}' 在範圍內,但無法找到。", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "只有在 ECMAScript 5 及更高版本中,才可在 'for...of' 陳述式中使用字串。", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "使用 --build、-b 會讓 tsc 的行為較編譯器更像是建置協調器。這可用於觸發建置複合專案,您可以在以下位置深入了解: {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "正在使用專案參考重新導向 '{0}' 的編譯器選項。", + "VERSION_6036": "版本", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "類型為 '{0}' 的值與類型 '{1}' 沒有任何共通的屬性。確定要呼叫嗎?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "無法呼叫類型 '{0}' 的值。您要包含 'new' 嗎?", + "Variable_0_implicitly_has_an_1_type_7005": "變數 '{0}' 隱含有 '{1}' 類型。", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "變數 '{0}' 隱含 '{1}' 類型,但可從使用方式推斷更適合的類型。", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "變數 '{0}' 在某些位置隱含類型 '{1}',但可從使用方式推斷更適合的類型。", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "變數 '{0}' 在某些其類型無法判斷的位置隱含地擁有類型 '{1}'。", + "Variable_0_is_used_before_being_assigned_2454": "變數 '{0}' 已在指派之前使用。", + "Variable_declaration_expected_1134": "必須是變數宣告。", + "Variable_declaration_list_cannot_be_empty_1123": "變數宣告清單不得為空白。", + "Variable_declaration_not_allowed_at_this_location_1440": "此位置不允許變數宣告。", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "變數必須有具備 --isolatedDeclarations 的明確型別註釋。", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "無法內嵌有多個宣告的變數。", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "來源中位於 {0} 的可變元素與目標中位於 {1} 的元素不相符。", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "只有物件、函式、建構函式和對應類型的類型別名才支援差異註釋。", + "Version_0_6029": "版本 {0}", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "瀏覽 https://aka.ms/tsconfig 以閱讀此檔案的詳細資訊", + "WATCH_OPTIONS_6918": "監看式選項", + "Watch_and_Build_Modes_6250": "觀看及建置模式", + "Watch_input_files_6005": "監看輸入檔。", + "Watch_option_0_requires_a_value_of_type_1_5080": "監看選項 '{0}' 需要 {1} 類型的值。", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "我們只能在此新增整個參數的類型,來寫入 '{0}' 的類型。", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "指派函式時,請檢查以確認參數,而且傳回值是子類型相容的。", + "When_type_checking_take_into_account_null_and_undefined_6699": "當型別檢查時,請將 'null' 和 'undefined' 納入考慮。", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "是否要將已過期的主控台輸出,維持在監看模式下,而非清除螢幕。", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "將所有無效字元包裝在運算式容器中", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "將所有無效的裝飾項目運算式以括弧包住", + "Wrap_all_object_literal_with_parentheses_95116": "使用括弧括住所有物件常值", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "將所有無上層 JSX 包裝至 JSX 片段中", + "Wrap_in_JSX_fragment_95120": "包裝至 JSX 片段中", + "Wrap_in_parentheses_95194": "以括弧包住", + "Wrap_invalid_character_in_an_expression_container_95108": "包裝在運算式容器中的字元無效", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "使用括弧括住下列必須是物件常值的主體", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "您可以在以下位置了解所有編譯器選項: {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "您無法透過全域匯入重新命名模組。", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "您無法重新命名 'node_modules' 資料夾中定義的元素。", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "您無法重新命名其他 'node_modules' 資料夾中定義的元素。", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "您無法重新命名標準 TypeScript 程式庫中所定義的項目。", + "You_cannot_rename_this_element_8000": "您無法重新命名這個項目。", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' 在此只接受極少數的引數用為裝飾項目。要先呼叫此項目,然後再寫入 '@{0}()' 嗎?", + "_0_and_1_index_signatures_are_incompatible_2330": "'{0}' 和 '{1}' 索引簽章不相容。", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "'{0}' 與 '{1}' 作業無法在沒有括號的情況下同時使用。", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' 指定了兩次。將會覆寫名為 '{0}' 的屬性。", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "型別以 '{0}' 作為結尾,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "型別以 '{0}' 作為開頭,並非有效的 TypeScript 語法。您是要寫入 '{1}' 嗎?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "只能透過開啟 'esModuleInterop' 旗標並使用預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_a_default_import_2595": "只能使用預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "只能使用 'require' 呼叫,或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "只能使用 'require' 呼叫或預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "只能使用 'import {1} = require({2})' 或預設匯入來匯入 '{0}'。", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "只能使用 'import {1} = require({2})',或透過開啟 'esModuleInterop' 旗標並使用預設匯入,來匯入 '{0}'。", + "_0_cannot_be_used_as_a_JSX_component_2786": "'{0}' 不能用作 JSX 元件。", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "因為 '{0}' 是使用 'export type' 匯出的,所以無法作為值使用。", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "因為 '{0}' 是使用 'import type' 匯入的,所以無法作為值使用。", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "'{0}' 元件不接受文字作為子項目。JSX 中的文字具有類型 'string',但 '{1}' 需要的類型為 '{2}'。", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "'{0}' 可以使用與 '{1}' 無關的任意類型來具現化。", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "只能在區塊內宣告 '{0}' 宣告。", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "'{0}' 宣告只可用於 TypeScript 檔案中。", + "_0_declarations_may_not_have_binding_patterns_1492": "'{0}' 宣告可能沒有繫結模式。", + "_0_declarations_must_be_initialized_1155": "必須初始化 '{0}' 宣告。", + "_0_expected_1005": "必須是 '{0}'。", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' 具有字串型別,但在啟用 'isolatedModules' 的狀態下,其語法必須是可辨識的字串語法。", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' 沒有任何名稱為 '{1}' 的已匯出成員。您是指 '{2}' 嗎?", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' 隱含 '{1}' 傳回型別,但可從使用方式推斷更適合的類型。", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "'{0}' 因為沒有傳回型別註解,且在其中一個傳回運算式中直接或間接參考了自己,所以隱含了傳回型別 'any'。", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "'{0}' 因為沒有類型註釋,且在其本身的初始設定式中直接或間接參考了自己,所以隱含有類型 'any'。", + "_0_index_signatures_are_incompatible_2634": "'{0}' 索引簽章不相容。", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' 索引類型 '{1}' 無法指派給 '{2}' 索引類型 '{3}'。", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' 為基元,但 '{1}' 為包裝函式物件。建議盡可能使用 '{0}'。", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' 為類型,無法匯入 JavaScript 檔案。在 JSDoc 類型註釋中使用 '{1}'。", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' 為型別,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' 是未使用的 '{1}' 重新命名。您是否想要使用它作為類型註釋?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' 可指派給 '{1}' 類型的條件約束,但可能會將 '{1}' 以不同的條件約束 '{2}' 子類型來具現化。", + "_0_is_automatically_exported_here_18044": "'{0}' 會自動匯出到此處。", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' 已宣告但從未讀取其值。", + "_0_is_declared_but_never_used_6196": "宣告了 '{0}',但從未使用過。", + "_0_is_declared_here_2728": "'{0}' 宣告於此處。", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' 在類別 '{1}' 中定義為屬性,但在此處的 '{2}' 中卻覆寫為存取子。", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' 在類別 '{1}' 中定義為存取子,但在此處的 '{2}' 中卻覆寫為執行個體屬性。", + "_0_is_deprecated_6385": "'{0}' 已淘汰。", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' 對關鍵字 '{1}' 而言不是有效的中繼屬性。您是指 '{2}' 嗎?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer_18061": "'{0}' 對關鍵字 'import' 而言不是有效的中繼屬性。您的意思是 'meta' 或 'defer'?", + "_0_is_not_allowed_as_a_parameter_name_1390": "不允許 '{0}' 做為參數名稱。", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' 不能是變數宣告名稱。", + "_0_is_of_type_unknown_18046": "'{0}' 的類型為 'unknown'。", + "_0_is_possibly_null_18047": "'{0}' 可能是 'null'。", + "_0_is_possibly_null_or_undefined_18049": "'{0}' 可能為「null」或「未定義」。", + "_0_is_possibly_undefined_18048": "'{0}' 可能為「未定義」。", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' 在其本身的基底運算式中直接或間接受到參考。", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' 在其本身的類型註釋中直接或間接受到參考。", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "多次指定 '{0}',因此將會覆寫此使用方式。", + "_0_list_cannot_be_empty_1097": "'{0}' 清單不得為空白。", + "_0_modifier_already_seen_1030": "已有 '{0}' 修飾元。", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "'{0}' 修飾元只能出現在類別、介面或型別別名的型別參數上", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "'{0}' 修飾元只能出現在方法或類別,或是函式的型別參數中。", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "建構函式宣告不得有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "模組或命名空間元素不能有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_parameter_1090": "參數不得有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_type_member_1070": "類型成員不能有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "型別參數上不能出現 '{0}' 修飾元", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "'{0}' 修飾元不可出現在 'using' 宣告中。", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "'{0}' 修飾元不可出現在 'await using' 宣告中。", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "索引簽章不能有 '{0}' 修飾元。", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "不得在此種類別項目中使用 '{0}' 修飾元。", + "_0_modifier_cannot_be_used_here_1042": "無法在此處使用 '{0}' 修飾元。", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "無法在環境內容中使用 '{0}' 修飾元。", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "'{0}' 修飾元無法與 '{1}' 修飾元並用。", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "'{0}' 修飾元不可搭配私人識別碼一起使用。", + "_0_modifier_must_precede_1_modifier_1029": "'{0}' 修飾元必須在 '{1}' 修飾元之前。", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' 後必須是以大括弧括住的 Unicode 屬性值運算式。", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' 需要明確的型別註解。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' 只參考類型,但在這裡用作命名空間。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' 只會參考類型,但此處將其用為值。", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' 僅限於類型,但此處用為值。您要使用 '{1} in {0}' 嗎?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "「{0}」僅指一種類型,但在此卻作為值使用。要變更您的目標程式庫嗎? 請嘗試將 `lib` 編譯器選項變更為 es2015 或更新版本。", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' 指的是全域的 UMD,但目前的檔案為模組。請考慮改為新增匯入。", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' 為值,但在此處卻作為類型使用。您是否是指 'typeof {0}'?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' 會解析為宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' 會解析為僅限型別的宣告,且在啟用 'verbatimModuleSyntax' 的狀態下,必須透過僅限型別的匯入作業匯入。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用匯入了 '{0}' 的 'import type'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須先在此檔案中必須標記為僅限型別,才可重新匯出。建議使用 'export type { {0} as default }'。", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' 會解析為僅限型別的宣告,且在啟用 '{1}' 的狀態下,必須透過僅限型別的重新匯出作業重新匯出。", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' 應該在設定 json 檔案的 'compilerOptions' 物件內設定。", + "_0_tag_already_specified_1223": "已指定 '{0}' 標記。", + "_0_was_also_declared_here_6203": "'{0}' 也已宣告於此處。", + "_0_was_exported_here_1377": "'{0}' 已匯出到此處。", + "_0_was_imported_here_1376": "'{0}' 已匯入到此處。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "缺少傳回型別註解的 '{0}' 隱含了 '{1}' 傳回型別。", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "缺少傳回型別註解的 '{0}' 隱含 '{1}' 產生類型。", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "'abstract' 修飾元只能出現在類別宣告、方法宣告或屬性宣告。", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "'accessor' 修飾詞只能出現在屬性宣告。", + "and_here_6204": "及此處。", + "and_npm_install_D_types_Slashnode_6290": "和 npm 安裝 -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "在屬性初始化器或類別靜態初始化區塊中無法引用『arguments』。", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": 處理具有 imports、exports、import.meta, jsx (具有 jsx: react-jsx) 的檔案,或以 esm 格式 (具有 module: node16+) 作為模組。", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "'await' 運算式無法在類別靜態區塊內使用。", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "當檔案為模組時,只允許 'await' 運算式位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "只允許在非同步函式中與模組的最上層使用 'await' 運算式。", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "'await' 運算式不得用於參數初始設定式。", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' 對此運算式的類型沒有作用。", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "環境內容中不允許使用 'await using' 宣告。", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "當檔案為模組時,僅能在檔案最上層使用 'await using' 陳述式,但此檔案沒有任何匯入或匯出。建議新增空白的 'export {}',讓此檔案成為模組。", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "'await using' 陳述式僅能在非同步函式內,以及模組的最上層使用。", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "'await using' 陳述式無法在類別靜態區塊內使用。", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "'baseUrl' 選項已設為 '{0}'。此值將用於解析非相對的模組名稱 '{1}'。", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' 後必須是 ASCII 字母。", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' 只能用於檔案開頭。", + "case_or_default_expected_1130": "必須是 'case' 或 'default'。", + "catch_or_finally_expected_1472": "必須是 'catch' 或 'finally'。", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "'const' 列舉成員初始設定式已評估為非有限值。", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "'const' 列舉成員初始設定式已評估為不允許的值 'NaN'。", + "const_enum_member_initializers_must_be_constant_expressions_2474": "常數列舉成員初始設定式必須為常數運算式。", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "'const' 列舉只可用於屬性或索引存取運算式中,或用於匯入宣告、匯出指派或類型查詢的右側。", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "'constructor' 不能作為參數屬性名稱使用。", + "constructor_is_a_reserved_word_18012": "'#constructor' 為保留字。", + "default_Colon_6903": "預設:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "不得在 strict 模式中對識別碼呼叫 'delete'。", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' 不會重新匯出預設匯出。", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' 只可用於 TypeScript 檔案中。", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "'export' 修飾元無法套用至環境模組或模組增強指定,原因是這二者永遠會顯示。", + "extends_clause_already_seen_1172": "已經有 'extends' 子句。", + "extends_clause_must_precede_implements_clause_1173": "'extends' 子句必須在 'implements' 子句之前。", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "匯出類別 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "匯出類別的 'extends' 子句包含或使用了私人名稱 '{0}'。", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "匯出介面 '{0}' 的 'extends' 子句具有或使用私用名稱 '{1}'。", + "false_unless_composite_is_set_6906": "`false`,除非已設定 `composite`", + "false_unless_strict_is_set_6905": "`false`,除非已設定 `strict`", + "file_6025": "檔案", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "當檔案為模組時,只允許 'for await' 迴圈位於檔案的最上層,但是此檔案沒有匯入或匯出。請考慮新增空白的 'export {}',使這個檔案成為模組。", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "只允許在非同步函式中與模組的最上層使用 'for await' 迴圈。", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "'for await' 迴圈無法在類別靜態區塊內使用。", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "'get' 和 'set' 存取子不可宣告 'this' 參數。", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "如果指定 `files`,則為 `[]`,否則為 `[\"**/*\"]5D;`", + "implements_clause_already_seen_1175": "已經有 'implements' 子句。", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "'implements' 子句只可用於 TypeScript 檔案中。", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' 只可用於 TypeScript 檔案中。", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "只允許在條件式類型的 'extends' 子句中使用 'infer' 宣告。", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' 後必須是以角括弧括住的擷取群組名稱。", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "'let' 或 'const' 宣告中不得使用 'let' 作為名稱。", + "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "模組 === `AMD` 或 `UMD` 或 `System` 或 `ES6`,則為 `Classic`,否則為 `Node`", + "module_system_or_esModuleInterop_6904": "模組 === \"system\" 或 esModuleInterop", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "目標缺少建構簽章的 'new' 運算式隱含了 'any' 類型。", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\"node_modules\", \"bower_components\", \"jspm_packages\"]`,加上 `outDir` 的值 (如果有指定)。", + "one_of_Colon_6900": "以下其中一個:", + "one_or_more_Colon_6901": "以下一或多個:", + "options_6024": "選項", + "or_JSX_element_expected_1145": "必須是 '{' 或 JSX 元素。", + "or_expected_1144": "必須是 '{' 或 ';'。", + "package_json_does_not_have_a_0_field_6100": "'package.json' 沒有 '{0}' 欄位。", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' 沒有任何符合 '{0}' 版本的 'typesVersions' 項目。", + "package_json_had_a_falsy_0_field_6220": "'package.json' 具有假的 '{0}' 欄位。", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' 有參考 '{2}' 的 '{0}' 欄位 '{1}'。", + "package_json_has_a_peerDependencies_field_6281": "'package.json' 具有 'peerDependencies' 欄位。", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' 具有 'typesVersions' 項目 '{0}',其非有效的 SemVer 範圍。", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' 具有符合編譯器版本 '{1}' 的 'typesVersions' 項目 '{0}',要尋找符合模組名稱 '{2}' 的模式。", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' 具有限定版本路徑對應的 'typesVersions' 欄位。", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "package.js 範圍 '{0}' 將指定名稱 '{1}' 明確對應到 Null。", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "package.js 範圍 '{0}' 對指定名稱 '{1}' 的目標具有無效類型", + "package_json_scope_0_has_no_imports_defined_6273": "package.js 範圍 '{0}' 沒有定義的匯入。", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "'paths' 選項已指定,將尋找符合模組名稱 '{0}' 的模式。", + "q_is_only_available_inside_character_class_1511": "'\\q' 僅可在字元類別中使用。", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' 後必須是字串 (可選擇以大括弧括住該字串)。", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "'readonly' 修飾元只能出現在屬性宣告或索引簽章。", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "'readonly' 類型修飾元只可用於陣列與元組常值類型。", + "require_call_may_be_converted_to_an_import_80005": "'require' 呼叫可能會轉換為匯入。", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "只能針對僅限輸入的匯入設定 'resolution-mode'。", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "'resolution-mode' 是輸入匯入判斷提示唯一有效的索引鍵。", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode' 是型別匯入屬性唯一有效的索引鍵。", + "resolution_mode_should_be_either_require_or_import_1453": "`resolution-mode` 應該是 `require` 或 `import`。", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "'rootDirs' 選項已設定。該選項將用於解析相對的模組名稱 '{0}'。", + "super_can_only_be_referenced_in_a_derived_class_2335": "只有衍生類別中才可參考 'super'。", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "只有在衍生類別或物件常值運算式的成員中才可參考 'super'。", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "計算的屬性名稱中不得參考 'super'。", + "super_cannot_be_referenced_in_constructor_arguments_2336": "建構函式引數中不得參考 'super'。", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "當選項 'target' 為 'ES2015' 或更高時,只有在物件常值運算式的成員中才允許 'super'。", + "super_may_not_use_type_arguments_2754": "'super' 不可以使用類型引數。", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "必須先呼叫 'super' 才能存取衍生類別建構函式中 'super' 的屬性。", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "必須先呼叫 'super' 才能存取衍生類別中建構函式的 'this'。", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' 之後必須接引數清單或成員存取。", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "只有在建構函式、成員函式或衍生類別的成員存取子中,才能存取 'super' 屬性。", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "計算的屬性名稱中不得參考 'this'。", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "模組或命名空間主體中不得參考 'this'。", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "靜態屬性初始設定式中不得參考 'this'。", + "this_cannot_be_referenced_in_current_location_2332": "目前的位置中不得參考 'this'。", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "因為 'this' 沒有型別註解,所以隱含具有類型 'any'。", + "true_for_ES2022_and_above_including_ESNext_6930": "ES2022 及以上為 true,包括 ESNext。", + "true_if_composite_false_otherwise_6909": "如果為 `composite`,則為 `true`,否則為 `false`", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "當 'moduleResolution' 為 'node16'、'nodenext' 或 'bundler' 時,為 `true`; 否則為 `false`。", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: TypeScript 編譯器", + "type_Colon_6902": "輸入:", + "unique_symbol_types_are_not_allowed_here_1335": "這裡不允許 'unique symbol' 型別。", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "只有變數陳述式中的變數允許 'unique symbol' 型別。", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "'unique symbol' 型別無法用在具有繫結名稱的變數宣告上。", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "'use strict' 指示詞不可搭配非簡易參數清單使用。", + "use_strict_directive_used_here_1349": "'use strict' 指示詞已用於此處。", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "環境內容中不允許 'using' 宣告。", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "非同步函式區塊中不允許 'with' 陳述式。", + "with_statements_are_not_allowed_in_strict_mode_1101": "不得在 strict 模式中使用 'with' 陳述式。", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "因為 'yield' 運算式包含的產生器缺少傳回型別註解,所以其隱含導致 'any' 類型。", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "'yield' 運算式不得用於參數初始設定式。" +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/48/bf2ce87cb3e72698864f917e57b6bc7ea70a1b9616b6c97085d8fc1d5f9019c2c764ed2957309ce363f181809907fe4d5055ed8c179a718bf6412410a32f54 b/.pnpm-store/v11/files/48/bf2ce87cb3e72698864f917e57b6bc7ea70a1b9616b6c97085d8fc1d5f9019c2c764ed2957309ce363f181809907fe4d5055ed8c179a718bf6412410a32f54 new file mode 100644 index 00000000..78712f9c --- /dev/null +++ b/.pnpm-store/v11/files/48/bf2ce87cb3e72698864f917e57b6bc7ea70a1b9616b6c97085d8fc1d5f9019c2c764ed2957309ce363f181809907fe4d5055ed8c179a718bf6412410a32f54 @@ -0,0 +1,156 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_OBJECT_WRAP_H_ +#define NAN_OBJECT_WRAP_H_ + +class ObjectWrap { + public: + ObjectWrap() { + refs_ = 0; + } + + + virtual ~ObjectWrap() { + if (persistent().IsEmpty()) { + return; + } + + persistent().ClearWeak(); + persistent().Reset(); + } + + + template + static inline T* Unwrap(v8::Local object) { + assert(!object.IsEmpty()); + assert(object->InternalFieldCount() > 0); + // Cast to ObjectWrap before casting to T. A direct cast from void + // to T won't work right when T has more than one base class. + void* ptr = GetInternalFieldPointer(object, 0); + ObjectWrap* wrap = static_cast(ptr); + return static_cast(wrap); + } + + + inline v8::Local handle() const { + return New(handle_); + } + + + inline Persistent& persistent() { + return handle_; + } + + + protected: + inline void Wrap(v8::Local object) { + assert(persistent().IsEmpty()); + assert(object->InternalFieldCount() > 0); + SetInternalFieldPointer(object, 0, this); + persistent().Reset(object); + MakeWeak(); + } + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) + + inline void MakeWeak() { + persistent().v8::PersistentBase::SetWeak( + this, WeakCallback, v8::WeakCallbackType::kParameter); +#if NODE_MAJOR_VERSION < 10 + // FIXME(bnoordhuis) Probably superfluous in older Node.js versions too. + persistent().MarkIndependent(); +#endif + } + +#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION + + inline void MakeWeak() { + persistent().v8::PersistentBase::SetWeak(this, WeakCallback); + persistent().MarkIndependent(); + } + +#else + + inline void MakeWeak() { + persistent().persistent.MakeWeak(this, WeakCallback); + persistent().MarkIndependent(); + } + +#endif + + /* Ref() marks the object as being attached to an event loop. + * Refed objects will not be garbage collected, even if + * all references are lost. + */ + virtual void Ref() { + assert(!persistent().IsEmpty()); + persistent().ClearWeak(); + refs_++; + } + + /* Unref() marks an object as detached from the event loop. This is its + * default state. When an object with a "weak" reference changes from + * attached to detached state it will be freed. Be careful not to access + * the object after making this call as it might be gone! + * (A "weak reference" means an object that only has a + * persistent handle.) + * + * DO NOT CALL THIS FROM DESTRUCTOR + */ + virtual void Unref() { + assert(!persistent().IsEmpty()); + assert(!persistent().IsWeak()); + assert(refs_ > 0); + if (--refs_ == 0) + MakeWeak(); + } + + int refs_; // ro + + private: + NAN_DISALLOW_ASSIGN_COPY_MOVE(ObjectWrap) +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 4 || \ + (V8_MAJOR_VERSION == 4 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION >= 3)) + + static void + WeakCallback(v8::WeakCallbackInfo const& info) { + ObjectWrap* wrap = info.GetParameter(); + assert(wrap->refs_ == 0); + wrap->handle_.Reset(); + delete wrap; + } + +#elif NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION + + static void + WeakCallback(v8::WeakCallbackData const& data) { + ObjectWrap* wrap = data.GetParameter(); + assert(wrap->refs_ == 0); + assert(wrap->handle_.IsNearDeath()); + wrap->handle_.Reset(); + delete wrap; + } + +#else + + static void WeakCallback(v8::Persistent value, void *data) { + ObjectWrap *wrap = static_cast(data); + assert(wrap->refs_ == 0); + assert(wrap->handle_.IsNearDeath()); + wrap->handle_.Reset(); + delete wrap; + } + +#endif + Persistent handle_; +}; + + +#endif // NAN_OBJECT_WRAP_H_ diff --git a/.pnpm-store/v11/files/48/cfdf273ffdd5f59727e99a430072613b20bccb4110dee3ac00bd2b8d7a4ff6ec89e0e9cd12e915058ac1e153d95620bd434aad098fc51bcd84812d15c18b8c b/.pnpm-store/v11/files/48/cfdf273ffdd5f59727e99a430072613b20bccb4110dee3ac00bd2b8d7a4ff6ec89e0e9cd12e915058ac1e153d95620bd434aad098fc51bcd84812d15c18b8c new file mode 100644 index 00000000..f745cb82 --- /dev/null +++ b/.pnpm-store/v11/files/48/cfdf273ffdd5f59727e99a430072613b20bccb4110dee3ac00bd2b8d7a4ff6ec89e0e9cd12e915058ac1e153d95620bd434aad098fc51bcd84812d15c18b8c @@ -0,0 +1,32 @@ +var sys = require("util") + , assert = require("assert") + , XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest + , xhr; + +xhr = new XMLHttpRequest(); + +xhr.onreadystatechange = function() { + if (this.readyState == 4) { + assert.equal("Hello World", this.responseText); + runSync(); + } +}; + +// Async +var url = "file://" + __dirname + "/testdata.txt"; +xhr.open("GET", url); +xhr.send(); + +// Sync +var runSync = function() { + xhr = new XMLHttpRequest(); + + xhr.onreadystatechange = function() { + if (this.readyState == 4) { + assert.equal("Hello World", this.responseText); + console.log("done"); + } + }; + xhr.open("GET", url, false); + xhr.send(); +} diff --git a/.pnpm-store/v11/files/49/17db5d0b2487460fb11570d5b96c973edcb1627f6d7af9f85c799de6bc86a1a4a7c32f58052d62c31593d391b1a7d552b57c9cc81e1b80347f01df56ecac69 b/.pnpm-store/v11/files/49/17db5d0b2487460fb11570d5b96c973edcb1627f6d7af9f85c799de6bc86a1a4a7c32f58052d62c31593d391b1a7d552b57c9cc81e1b80347f01df56ecac69 new file mode 100644 index 00000000..a6107aac --- /dev/null +++ b/.pnpm-store/v11/files/49/17db5d0b2487460fb11570d5b96c973edcb1627f6d7af9f85c799de6bc86a1a4a7c32f58052d62c31593d391b1a7d552b57c9cc81e1b80347f01df56ecac69 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/49/1de81bfa755635b0313bae4e722ad8989b02e18a67ccdeba859568a24adb43e897e32e6bd4070e251507a5d72c3bc582215ffe035d005e00fcb19105993e09 b/.pnpm-store/v11/files/49/1de81bfa755635b0313bae4e722ad8989b02e18a67ccdeba859568a24adb43e897e32e6bd4070e251507a5d72c3bc582215ffe035d005e00fcb19105993e09 new file mode 100644 index 00000000..91ef1da5 --- /dev/null +++ b/.pnpm-store/v11/files/49/1de81bfa755635b0313bae4e722ad8989b02e18a67ccdeba859568a24adb43e897e32e6bd4070e251507a5d72c3bc582215ffe035d005e00fcb19105993e09 @@ -0,0 +1,23 @@ +/* global globalThis */ +export default function(Handlebars) { + /* istanbul ignore next */ + // https://mathiasbynens.be/notes/globalthis + (function() { + if (typeof globalThis === 'object') return; + Object.prototype.__defineGetter__('__magic__', function() { + return this; + }); + __magic__.globalThis = __magic__; // eslint-disable-line no-undef + delete Object.prototype.__magic__; + })(); + + const $Handlebars = globalThis.Handlebars; + + /* istanbul ignore next */ + Handlebars.noConflict = function() { + if (globalThis.Handlebars === Handlebars) { + globalThis.Handlebars = $Handlebars; + } + return Handlebars; + }; +} diff --git a/.pnpm-store/v11/files/49/29be6362a2b04bd8076b19981fb8da67428ac4e47fb2fe81df9805aa84a2cd7b4e05b09bff899d71b013db9521c43b1beb50da54c61d3e02423e869a050815 b/.pnpm-store/v11/files/49/29be6362a2b04bd8076b19981fb8da67428ac4e47fb2fe81df9805aa84a2cd7b4e05b09bff899d71b013db9521c43b1beb50da54c61d3e02423e869a050815 new file mode 100644 index 00000000..de844827 --- /dev/null +++ b/.pnpm-store/v11/files/49/29be6362a2b04bd8076b19981fb8da67428ac4e47fb2fe81df9805aa84a2cd7b4e05b09bff899d71b013db9521c43b1beb50da54c61d3e02423e869a050815 @@ -0,0 +1,46 @@ +const fs = require('fs'); + +const path = require('path'); +const p = path.resolve(__dirname + '/../../modules/assert-autogenerated.js'); +const strm = fs.createWriteStream(p); + +function stringify(val) { + let cache = []; + return JSON.stringify(val, function (key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Circular reference found, discard key + return; + } + // Store value in our collection + cache.push(value); + } + return value; + }); +} + +const assert = require('assert'); +strm.write('const assert = {'); + +Object.keys(assert).forEach(function (k) { + + strm.write('\n'); + if (typeof assert[k] === 'function') { + strm.write(' ' + k + ' : ' + String(assert[k])); + } + else { + strm.write(' ' + k + ':' + (stringify(assert[k]) || 'null') + ','); + } + +}); + +strm.write('};\n'); +strm.write('module.exports = assert;\n'); + +strm.on('finish', function () { + process.exit(0); +}); + +strm.end(); + + diff --git a/.pnpm-store/v11/files/49/32c8d2b1970975355a4adb6e64bf4f8e2e5ce3c2ecd4fc3da5e97214c752eaef833202d720f9d9eb5e9839a64d7645664feb527ec352dd9dc8489be342b828 b/.pnpm-store/v11/files/49/32c8d2b1970975355a4adb6e64bf4f8e2e5ce3c2ecd4fc3da5e97214c752eaef833202d720f9d9eb5e9839a64d7645664feb527ec352dd9dc8489be342b828 new file mode 100644 index 00000000..d0dc43e0 --- /dev/null +++ b/.pnpm-store/v11/files/49/32c8d2b1970975355a4adb6e64bf4f8e2e5ce3c2ecd4fc3da5e97214c752eaef833202d720f9d9eb5e9839a64d7645664feb527ec352dd9dc8489be342b828 @@ -0,0 +1,301 @@ +'use strict'; + +/* ! + * Chai - pathval utility + * Copyright(c) 2012-2014 Jake Luer + * @see https://github.com/logicalparadox/filtr + * MIT Licensed + */ + +/** + * ### .hasProperty(object, name) + * + * This allows checking whether an object has own + * or inherited from prototype chain named property. + * + * Basically does the same thing as the `in` + * operator but works properly with null/undefined values + * and other primitives. + * + * var obj = { + * arr: ['a', 'b', 'c'] + * , str: 'Hello' + * } + * + * The following would be the results. + * + * hasProperty(obj, 'str'); // true + * hasProperty(obj, 'constructor'); // true + * hasProperty(obj, 'bar'); // false + * + * hasProperty(obj.str, 'length'); // true + * hasProperty(obj.str, 1); // true + * hasProperty(obj.str, 5); // false + * + * hasProperty(obj.arr, 'length'); // true + * hasProperty(obj.arr, 2); // true + * hasProperty(obj.arr, 3); // false + * + * @param {Object} object + * @param {String|Symbol} name + * @returns {Boolean} whether it exists + * @namespace Utils + * @name hasProperty + * @api public + */ + +function hasProperty(obj, name) { + if (typeof obj === 'undefined' || obj === null) { + return false; + } + + // The `in` operator does not work with primitives. + return name in Object(obj); +} + +/* ! + * ## parsePath(path) + * + * Helper function used to parse string object + * paths. Use in conjunction with `internalGetPathValue`. + * + * var parsed = parsePath('myobject.property.subprop'); + * + * ### Paths: + * + * * Can be infinitely deep and nested. + * * Arrays are also valid using the formal `myobject.document[3].property`. + * * Literal dots and brackets (not delimiter) must be backslash-escaped. + * + * @param {String} path + * @returns {Object} parsed + * @api private + */ + +function parsePath(path) { + var str = path.replace(/([^\\])\[/g, '$1.['); + var parts = str.match(/(\\\.|[^.]+?)+/g); + return parts.map(function mapMatches(value) { + if ( + value === 'constructor' || + value === '__proto__' || + value === 'prototype' + ) { + return {}; + } + var regexp = /^\[(\d+)\]$/; + var mArr = regexp.exec(value); + var parsed = null; + if (mArr) { + parsed = { i: parseFloat(mArr[1]) }; + } else { + parsed = { p: value.replace(/\\([.[\]])/g, '$1') }; + } + + return parsed; + }); +} + +/* ! + * ## internalGetPathValue(obj, parsed[, pathDepth]) + * + * Helper companion function for `.parsePath` that returns + * the value located at the parsed address. + * + * var value = getPathValue(obj, parsed); + * + * @param {Object} object to search against + * @param {Object} parsed definition from `parsePath`. + * @param {Number} depth (nesting level) of the property we want to retrieve + * @returns {Object|Undefined} value + * @api private + */ + +function internalGetPathValue(obj, parsed, pathDepth) { + var temporaryValue = obj; + var res = null; + pathDepth = typeof pathDepth === 'undefined' ? parsed.length : pathDepth; + + for (var i = 0; i < pathDepth; i++) { + var part = parsed[i]; + if (temporaryValue) { + if (typeof part.p === 'undefined') { + temporaryValue = temporaryValue[part.i]; + } else { + temporaryValue = temporaryValue[part.p]; + } + + if (i === pathDepth - 1) { + res = temporaryValue; + } + } + } + + return res; +} + +/* ! + * ## internalSetPathValue(obj, value, parsed) + * + * Companion function for `parsePath` that sets + * the value located at a parsed address. + * + * internalSetPathValue(obj, 'value', parsed); + * + * @param {Object} object to search and define on + * @param {*} value to use upon set + * @param {Object} parsed definition from `parsePath` + * @api private + */ + +function internalSetPathValue(obj, val, parsed) { + var tempObj = obj; + var pathDepth = parsed.length; + var part = null; + // Here we iterate through every part of the path + for (var i = 0; i < pathDepth; i++) { + var propName = null; + var propVal = null; + part = parsed[i]; + + // If it's the last part of the path, we set the 'propName' value with the property name + if (i === pathDepth - 1) { + propName = typeof part.p === 'undefined' ? part.i : part.p; + // Now we set the property with the name held by 'propName' on object with the desired val + tempObj[propName] = val; + } else if (typeof part.p !== 'undefined' && tempObj[part.p]) { + tempObj = tempObj[part.p]; + } else if (typeof part.i !== 'undefined' && tempObj[part.i]) { + tempObj = tempObj[part.i]; + } else { + // If the obj doesn't have the property we create one with that name to define it + var next = parsed[i + 1]; + // Here we set the name of the property which will be defined + propName = typeof part.p === 'undefined' ? part.i : part.p; + // Here we decide if this property will be an array or a new object + propVal = typeof next.p === 'undefined' ? [] : {}; + tempObj[propName] = propVal; + tempObj = tempObj[propName]; + } + } +} + +/** + * ### .getPathInfo(object, path) + * + * This allows the retrieval of property info in an + * object given a string path. + * + * The path info consists of an object with the + * following properties: + * + * * parent - The parent object of the property referenced by `path` + * * name - The name of the final property, a number if it was an array indexer + * * value - The value of the property, if it exists, otherwise `undefined` + * * exists - Whether the property exists or not + * + * @param {Object} object + * @param {String} path + * @returns {Object} info + * @namespace Utils + * @name getPathInfo + * @api public + */ + +function getPathInfo(obj, path) { + var parsed = parsePath(path); + var last = parsed[parsed.length - 1]; + var info = { + parent: + parsed.length > 1 ? + internalGetPathValue(obj, parsed, parsed.length - 1) : + obj, + name: last.p || last.i, + value: internalGetPathValue(obj, parsed), + }; + info.exists = hasProperty(info.parent, info.name); + + return info; +} + +/** + * ### .getPathValue(object, path) + * + * This allows the retrieval of values in an + * object given a string path. + * + * var obj = { + * prop1: { + * arr: ['a', 'b', 'c'] + * , str: 'Hello' + * } + * , prop2: { + * arr: [ { nested: 'Universe' } ] + * , str: 'Hello again!' + * } + * } + * + * The following would be the results. + * + * getPathValue(obj, 'prop1.str'); // Hello + * getPathValue(obj, 'prop1.att[2]'); // b + * getPathValue(obj, 'prop2.arr[0].nested'); // Universe + * + * @param {Object} object + * @param {String} path + * @returns {Object} value or `undefined` + * @namespace Utils + * @name getPathValue + * @api public + */ + +function getPathValue(obj, path) { + var info = getPathInfo(obj, path); + return info.value; +} + +/** + * ### .setPathValue(object, path, value) + * + * Define the value in an object at a given string path. + * + * ```js + * var obj = { + * prop1: { + * arr: ['a', 'b', 'c'] + * , str: 'Hello' + * } + * , prop2: { + * arr: [ { nested: 'Universe' } ] + * , str: 'Hello again!' + * } + * }; + * ``` + * + * The following would be acceptable. + * + * ```js + * var properties = require('tea-properties'); + * properties.set(obj, 'prop1.str', 'Hello Universe!'); + * properties.set(obj, 'prop1.arr[2]', 'B'); + * properties.set(obj, 'prop2.arr[0].nested.value', { hello: 'universe' }); + * ``` + * + * @param {Object} object + * @param {String} path + * @param {Mixed} value + * @api private + */ + +function setPathValue(obj, path, val) { + var parsed = parsePath(path); + internalSetPathValue(obj, val, parsed); + return obj; +} + +module.exports = { + hasProperty: hasProperty, + getPathInfo: getPathInfo, + getPathValue: getPathValue, + setPathValue: setPathValue, +}; diff --git a/.pnpm-store/v11/files/49/3507ded055690825f62aec81449b34afd10e6780d5febd8e23d734c5558fea06f6d85caf4185b8493cf97d20ec7b7695a9abcd25088098bc9fb9464882a63c b/.pnpm-store/v11/files/49/3507ded055690825f62aec81449b34afd10e6780d5febd8e23d734c5558fea06f6d85caf4185b8493cf97d20ec7b7695a9abcd25088098bc9fb9464882a63c new file mode 100644 index 00000000..17880ff0 --- /dev/null +++ b/.pnpm-store/v11/files/49/3507ded055690825f62aec81449b34afd10e6780d5febd8e23d734c5558fea06f6d85caf4185b8493cf97d20ec7b7695a9abcd25088098bc9fb9464882a63c @@ -0,0 +1,25 @@ +MIT License + +Original Library + - Copyright (c) Marak Squires + +Additional Functionality + - Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/49/4b7c1c1fa5a5c5eefce1a18f6d82cc4c0b3b4b8f6381deece762793fda43c7cc9379585d0623577ddbfaafb79932ed630e1a0ca3b455d5ddb3fb4580fc8102 b/.pnpm-store/v11/files/49/4b7c1c1fa5a5c5eefce1a18f6d82cc4c0b3b4b8f6381deece762793fda43c7cc9379585d0623577ddbfaafb79932ed630e1a0ca3b455d5ddb3fb4580fc8102 new file mode 100644 index 00000000..decdc449 --- /dev/null +++ b/.pnpm-store/v11/files/49/4b7c1c1fa5a5c5eefce1a18f6d82cc4c0b3b4b8f6381deece762793fda43c7cc9379585d0623577ddbfaafb79932ed630e1a0ca3b455d5ddb3fb4580fc8102 @@ -0,0 +1,21 @@ +var getWrapDetails = require('./_getWrapDetails'), + insertWrapDetails = require('./_insertWrapDetails'), + setToString = require('./_setToString'), + updateWrapDetails = require('./_updateWrapDetails'); + +/** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ +function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); +} + +module.exports = setWrapToString; diff --git a/.pnpm-store/v11/files/49/882677826255933807facf183c9b92788fa4e38dfec8637162952d0ddd6472982e6a0bae02851ec6890011f12a50090cf9cfe562061867d3c29c2b8728647e b/.pnpm-store/v11/files/49/882677826255933807facf183c9b92788fa4e38dfec8637162952d0ddd6472982e6a0bae02851ec6890011f12a50090cf9cfe562061867d3c29c2b8728647e new file mode 100644 index 00000000..6d8251fd --- /dev/null +++ b/.pnpm-store/v11/files/49/882677826255933807facf183c9b92788fa4e38dfec8637162952d0ddd6472982e6a0bae02851ec6890011f12a50090cf9cfe562061867d3c29c2b8728647e @@ -0,0 +1,97 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2021 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_SCRIPTORIGIN_H_ +#define NAN_SCRIPTORIGIN_H_ + +class ScriptOrigin : public v8::ScriptOrigin { + public: +#if defined(V8_MAJOR_VERSION) && \ + (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && \ + (defined(V8_MINOR_VERSION) && \ + (V8_MINOR_VERSION > 6 || \ + (V8_MINOR_VERSION == 6 && defined(V8_BUILD_NUMBER) && \ + V8_BUILD_NUMBER >= 175))))) + explicit ScriptOrigin(v8::Local name) : + v8::ScriptOrigin(name) {} + + ScriptOrigin(v8::Local name + , v8::Local line) : + v8::ScriptOrigin(name + , To(line).FromMaybe(0)) {} + + ScriptOrigin(v8::Local name + , v8::Local line + , v8::Local column) : + v8::ScriptOrigin(name + , To(line).FromMaybe(0) + , To(column).FromMaybe(0)) {} +#elif defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 9 || \ + (V8_MAJOR_VERSION == 9 && (defined(V8_MINOR_VERSION) && (V8_MINOR_VERSION > 0\ + || (V8_MINOR_VERSION == 0 && defined(V8_BUILD_NUMBER) \ + && V8_BUILD_NUMBER >= 1))))) + explicit ScriptOrigin(v8::Local name) : + v8::ScriptOrigin(v8::Isolate::GetCurrent(), name) {} + + ScriptOrigin(v8::Local name + , v8::Local line) : + v8::ScriptOrigin(v8::Isolate::GetCurrent() + , name + , To(line).FromMaybe(0)) {} + + ScriptOrigin(v8::Local name + , v8::Local line + , v8::Local column) : + v8::ScriptOrigin(v8::Isolate::GetCurrent() + , name + , To(line).FromMaybe(0) + , To(column).FromMaybe(0)) {} +#elif defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 8 || \ + (V8_MAJOR_VERSION == 8 && (defined(V8_MINOR_VERSION) && (V8_MINOR_VERSION > 9\ + || (V8_MINOR_VERSION == 9 && defined(V8_BUILD_NUMBER) \ + && V8_BUILD_NUMBER >= 45))))) + explicit ScriptOrigin(v8::Local name) : v8::ScriptOrigin(name) {} + + ScriptOrigin(v8::Local name + , v8::Local line) : + v8::ScriptOrigin(name, To(line).FromMaybe(0)) {} + + ScriptOrigin(v8::Local name + , v8::Local line + , v8::Local column) : + v8::ScriptOrigin(name + , To(line).FromMaybe(0) + , To(column).FromMaybe(0)) {} +#else + explicit ScriptOrigin(v8::Local name) : v8::ScriptOrigin(name) {} + + ScriptOrigin(v8::Local name + , v8::Local line) : v8::ScriptOrigin(name, line) {} + + ScriptOrigin(v8::Local name + , v8::Local line + , v8::Local column) : + v8::ScriptOrigin(name, line, column) {} +#endif + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 8 || \ + (V8_MAJOR_VERSION == 8 && (defined(V8_MINOR_VERSION) && (V8_MINOR_VERSION > 9\ + || (V8_MINOR_VERSION == 9 && defined(V8_BUILD_NUMBER) \ + && V8_BUILD_NUMBER >= 45))))) + v8::Local ResourceLineOffset() const { + return New(LineOffset()); + } + + v8::Local ResourceColumnOffset() const { + return New(ColumnOffset()); + } +#endif +}; + +#endif // NAN_SCRIPTORIGIN_H_ diff --git a/.pnpm-store/v11/files/49/8e0f4cee22622bb9c76a87a0825942ec20d0823deaa2837bf5606b83be9543c1e53d66fa8eb465f2e2de58d08fb6f2f15603121e11dca5aead35e6abb6a075-exec b/.pnpm-store/v11/files/49/8e0f4cee22622bb9c76a87a0825942ec20d0823deaa2837bf5606b83be9543c1e53d66fa8eb465f2e2de58d08fb6f2f15603121e11dca5aead35e6abb6a075-exec new file mode 100755 index 00000000..314d71c8 --- /dev/null +++ b/.pnpm-store/v11/files/49/8e0f4cee22622bb9c76a87a0825942ec20d0823deaa2837bf5606b83be9543c1e53d66fa8eb465f2e2de58d08fb6f2f15603121e11dca5aead35e6abb6a075-exec @@ -0,0 +1,41 @@ +{ + "name": "vamoot", + "version": "0.0.107", + "description": "Vamoot creates simple immutable objects", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "types": "dist/index.d.ts", + "directories": { + "test": "test" + }, + "scripts": { + "test": "suman" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ORESoftware/vamoot.git" + }, + "keywords": [ + "suman", + "test", + "testing", + "immutable", + "immutability", + "nodejs", + "npm", + "sumanjs" + ], + "author": "Olegzandr VD", + "license": "MIT", + "bugs": { + "url": "https://github.com/ORESoftware/vamoot/issues" + }, + "homepage": "https://github.com/ORESoftware/vamoot#readme", + "devDependencies": { + "@types/core-js": "^0.9.42", + "@types/node": "^8.0.14" + }, + "dependencies": { + "freeze-existing-props": "latest" + } +} diff --git a/.pnpm-store/v11/files/49/befb67a5dc8a2ec618588e09d9457038bea40b3e8d7453d30bef720a638f5dac11496178791d1d7fac2c46febf761fc58a35433b71cebf4abc7a9b52ca1f6b b/.pnpm-store/v11/files/49/befb67a5dc8a2ec618588e09d9457038bea40b3e8d7453d30bef720a638f5dac11496178791d1d7fac2c46febf761fc58a35433b71cebf4abc7a9b52ca1f6b new file mode 100644 index 00000000..7b99d1da --- /dev/null +++ b/.pnpm-store/v11/files/49/befb67a5dc8a2ec618588e09d9457038bea40b3e8d7453d30bef720a638f5dac11496178791d1d7fac2c46febf761fc58a35433b71cebf4abc7a9b52ca1f6b @@ -0,0 +1,1145 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +var util = require('./util'); +var binarySearch = require('./binary-search'); +var ArraySet = require('./array-set').ArraySet; +var base64VLQ = require('./base64-vlq'); +var quickSort = require('./quick-sort').quickSort; + +function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) + : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); +} + +SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); +} + +/** + * The version of the source mapping spec that we are consuming. + */ +SourceMapConsumer.prototype._version = 3; + +// `__generatedMappings` and `__originalMappings` are arrays that hold the +// parsed mapping coordinates from the source map's "mappings" attribute. They +// are lazily instantiated, accessed via the `_generatedMappings` and +// `_originalMappings` getters respectively, and we only parse the mappings +// and create these arrays once queried for a source location. We jump through +// these hoops because there can be many thousands of mappings, and parsing +// them is expensive, so we only want to do it if we must. +// +// Each object in the arrays is of the form: +// +// { +// generatedLine: The line number in the generated code, +// generatedColumn: The column number in the generated code, +// source: The path to the original source file that generated this +// chunk of code, +// originalLine: The line number in the original source that +// corresponds to this chunk of generated code, +// originalColumn: The column number in the original source that +// corresponds to this chunk of generated code, +// name: The name of the original symbol which generated this chunk of +// code. +// } +// +// All properties except for `generatedLine` and `generatedColumn` can be +// `null`. +// +// `_generatedMappings` is ordered by the generated positions. +// +// `_originalMappings` is ordered by the original positions. + +SourceMapConsumer.prototype.__generatedMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } +}); + +SourceMapConsumer.prototype.__originalMappings = null; +Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } +}); + +SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + +SourceMapConsumer.GENERATED_ORDER = 1; +SourceMapConsumer.ORIGINAL_ORDER = 2; + +SourceMapConsumer.GREATEST_LOWER_BOUND = 1; +SourceMapConsumer.LEAST_UPPER_BOUND = 2; + +/** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ +SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + +/** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number is 1-based. + * - column: Optional. the column number in the original source. + * The column number is 0-based. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + +exports.SourceMapConsumer = SourceMapConsumer; + +/** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The first parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ +function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this._absoluteSources = this._sources.toArray().map(function (s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; +} + +BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + +/** + * Utility function to find the index of a source. Returns -1 if not + * found. + */ +BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + + // Maybe aSource is an absolute URL as returned by |sources|. In + // this case we can't simply undo the transform. + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + + return -1; +}; + +/** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @param String aSourceMapURL + * The URL at which the source map can be found (optional) + * @returns BasicSourceMapConsumer + */ +BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function (s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + +/** + * The version of the source mapping spec that we are consuming. + */ +BasicSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._absoluteSources.slice(); + } +}); + +/** + * Provide the JIT with a nice shape / hidden class. + */ +function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; +} + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + +/** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ +BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + +/** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ +BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ +BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + +exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + +/** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The first parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ +function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) + } + }); +} + +IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); +IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + +/** + * The version of the source mapping spec that we are consuming. + */ +IndexedSourceMapConsumer.prototype._version = 3; + +/** + * The list of original sources. + */ +Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } +}); + +/** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ +IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + +/** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ +IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + +/** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ +IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + +/** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ +IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + +/** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ +IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + +exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; diff --git a/.pnpm-store/v11/files/49/c299df1aa21a1be78ea4dcedd434736cf4c395a4701e8c101f302390bfe137d795ecb431fec8671335cce05c42d9e591c124b50b384f898da772c1ecd91d17 b/.pnpm-store/v11/files/49/c299df1aa21a1be78ea4dcedd434736cf4c395a4701e8c101f302390bfe137d795ecb431fec8671335cce05c42d9e591c124b50b384f898da772c1ecd91d17 new file mode 100644 index 00000000..5709b0a9 --- /dev/null +++ b/.pnpm-store/v11/files/49/c299df1aa21a1be78ea4dcedd434736cf4c395a4701e8c101f302390bfe137d795ecb431fec8671335cce05c42d9e591c124b50b384f898da772c1ecd91d17 @@ -0,0 +1,24 @@ +define(['exports', 'module'], function (exports, module) { + 'use strict'; + + module.exports = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQ0FBaUM7QUFDOUQsVUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7VUFDcEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVDLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFVBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLGFBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDckQsYUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzVCO0FBQ0QsVUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFaEIsY0FBUSxDQUFDLEdBQUcsTUFBQSxDQUFaLFFBQVEsRUFBUSxJQUFJLENBQUMsQ0FBQztLQUN2QixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJsb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24oLyogbWVzc2FnZSwgb3B0aW9ucyAqLykge1xuICAgIGxldCBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi5hcmdzKTtcbiAgfSk7XG59XG4iXX0= diff --git a/.pnpm-store/v11/files/49/c532cf862ac7ac88311b210434340316298bfce821d2406d33fbc59842f9328305df27855d31d241150d6eb165c43e08086178fc5cafe95c354bb1b710e685 b/.pnpm-store/v11/files/49/c532cf862ac7ac88311b210434340316298bfce821d2406d33fbc59842f9328305df27855d31d241150d6eb165c43e08086178fc5cafe95c354bb1b710e685 new file mode 100644 index 00000000..59cc323d --- /dev/null +++ b/.pnpm-store/v11/files/49/c532cf862ac7ac88311b210434340316298bfce821d2406d33fbc59842f9328305df27855d31d241150d6eb165c43e08086178fc5cafe95c354bb1b710e685 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').filter; diff --git a/.pnpm-store/v11/files/49/c9630e3dbd2a5dcbdfea2b6d445379abe9f2b22c876aa54a79fcd0132bea5844415af5e9a7bf7474a2c5934e4307fc56bdbed6507462ebdf3deb43b6afdb3f b/.pnpm-store/v11/files/49/c9630e3dbd2a5dcbdfea2b6d445379abe9f2b22c876aa54a79fcd0132bea5844415af5e9a7bf7474a2c5934e4307fc56bdbed6507462ebdf3deb43b6afdb3f new file mode 100644 index 00000000..f8f0a5c7 --- /dev/null +++ b/.pnpm-store/v11/files/49/c9630e3dbd2a5dcbdfea2b6d445379abe9f2b22c876aa54a79fcd0132bea5844415af5e9a7bf7474a2c5934e4307fc56bdbed6507462ebdf3deb43b6afdb3f @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('once', require('../once'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/49/caf8a6245f56aeeafaf410053a72586bac5f9943053ce8f86b6b9f20dcc8d9d553c5eeda69075ca2951d4fa49e5f68c753c1f06dd556982307353478187c10 b/.pnpm-store/v11/files/49/caf8a6245f56aeeafaf410053a72586bac5f9943053ce8f86b6b9f20dcc8d9d553c5eeda69075ca2951d4fa49e5f68c753c1f06dd556982307353478187c10 new file mode 100644 index 00000000..058b6b4e --- /dev/null +++ b/.pnpm-store/v11/files/49/caf8a6245f56aeeafaf410053a72586bac5f9943053ce8f86b6b9f20dcc8d9d553c5eeda69075ca2951d4fa49e5f68c753c1f06dd556982307353478187c10 @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2012-2014 Roman Shtylman +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/.pnpm-store/v11/files/49/ce16a0472608d16e092b06028a854e5c80fbde30006fdbb6088dae91770ef87965a32f6e87247719fb7981fec3debdc2169b9df118d67d656a5378620db9c1 b/.pnpm-store/v11/files/49/ce16a0472608d16e092b06028a854e5c80fbde30006fdbb6088dae91770ef87965a32f6e87247719fb7981fec3debdc2169b9df118d67d656a5378620db9c1 new file mode 100644 index 00000000..ce6073e0 --- /dev/null +++ b/.pnpm-store/v11/files/49/ce16a0472608d16e092b06028a854e5c80fbde30006fdbb6088dae91770ef87965a32f6e87247719fb7981fec3debdc2169b9df118d67d656a5378620db9c1 @@ -0,0 +1,48 @@ +{ + "name": "balanced-match", + "description": "Match balanced character pairs, like \"{\" and \"}\"", + "version": "1.0.2", + "repository": { + "type": "git", + "url": "git://github.com/juliangruber/balanced-match.git" + }, + "homepage": "https://github.com/juliangruber/balanced-match", + "main": "index.js", + "scripts": { + "test": "tape test/test.js", + "bench": "matcha test/bench.js" + }, + "devDependencies": { + "matcha": "^0.7.0", + "tape": "^4.6.0" + }, + "keywords": [ + "match", + "regexp", + "test", + "balanced", + "parse" + ], + "author": { + "name": "Julian Gruber", + "email": "mail@juliangruber.com", + "url": "http://juliangruber.com" + }, + "license": "MIT", + "testling": { + "files": "test/*.js", + "browsers": [ + "ie/8..latest", + "firefox/20..latest", + "firefox/nightly", + "chrome/25..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + } +} diff --git a/.pnpm-store/v11/files/49/db3d1e6ed19aed0986d2251cea2c20fbd66e3b5980dc20e027c0d371bc3df5e93939f307eea5d249cb0c09b8d7a75a3b018073038db26ebcc57fa279f32445 b/.pnpm-store/v11/files/49/db3d1e6ed19aed0986d2251cea2c20fbd66e3b5980dc20e027c0d371bc3df5e93939f307eea5d249cb0c09b8d7a75a3b018073038db26ebcc57fa279f32445 new file mode 100644 index 00000000..58529714 --- /dev/null +++ b/.pnpm-store/v11/files/49/db3d1e6ed19aed0986d2251cea2c20fbd66e3b5980dc20e027c0d371bc3df5e93939f307eea5d249cb0c09b8d7a75a3b018073038db26ebcc57fa279f32445 @@ -0,0 +1,63 @@ +const path = require('path'); +const fs = require('fs'); +const p = path.resolve(__dirname + '/../../modules/process-autogenerated.js'); +const strm = fs.createWriteStream(p); + +function stringify(val) { + let cache = []; + return JSON.stringify(val, function (key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + // Circular reference found, discard key + return; + } + // Store value in our collection + cache.push(value); + } + return value; + }); +} + +strm.write('let process;'); +strm.write('if(global && global.process){'); +strm.write('process = global.process;'); +strm.write('}'); +strm.write('else {'); + +strm.write('const process = {'); + +Object.keys(process).forEach(function (k) { + + strm.write('\n\n'); + if (typeof process[k] !== 'function') { + strm.write(' ' + k + ':' + (stringify(process[k]) || 'null') + ','); + } + +}); + +Object.keys(process).forEach(function (k) { + + strm.write('\n\n'); + + if (typeof process[k] === 'function') { + strm.write(' ' + k + ' : function(){\n' + + ' const args = Array.from(arguments);\n' + + ' setTimeout(function(){\n' + + ' try { args[args.length-1](\'fs will not work as we are in browser error\') } catch(err){}\n' + + ' },5);\n' + + ' return {};\n' + + '},'); + } + +}); + +strm.write('};'); +strm.write('module.exports = process;\n'); + +strm.on('finish', function () { + process.exit(0); +}); + +strm.end(); + + diff --git a/.pnpm-store/v11/files/49/e74bc53b707fc3c1dee738c36e21a75cd3057899e8ada524b9babfc7b1ebe6fc6bdf45c50d671d3c71b39da2665e6d75b346ff93cbefc8fae46438bfff5a50 b/.pnpm-store/v11/files/49/e74bc53b707fc3c1dee738c36e21a75cd3057899e8ada524b9babfc7b1ebe6fc6bdf45c50d671d3c71b39da2665e6d75b346ff93cbefc8fae46438bfff5a50 new file mode 100644 index 00000000..44751558 --- /dev/null +++ b/.pnpm-store/v11/files/49/e74bc53b707fc3c1dee738c36e21a75cd3057899e8ada524b9babfc7b1ebe6fc6bdf45c50d671d3c71b39da2665e6d75b346ff93cbefc8fae46438bfff5a50 @@ -0,0 +1,147 @@ +{ + "name": "micromatch", + "description": "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.", + "version": "3.1.10", + "homepage": "https://github.com/micromatch/micromatch", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Amila Welihinda (amilajack.com)", + "Bogdan Chadkin (https://github.com/TrySound)", + "Brian Woodward (https://twitter.com/doowb)", + "Devon Govett (http://badassjs.com)", + "Elan Shanker (https://github.com/es128)", + "Fabrício Matté (https://ultcombo.js.org)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Martin Kolárik (https://kolarik.sk)", + "Olsten Larck (https://i.am.charlike.online)", + "Paul Miller (paulmillr.com)", + "Tom Byrer (https://github.com/tomByrer)", + "Tyler Akins (http://rumkin.com)", + "(https://github.com/DianeLooney)" + ], + "repository": "micromatch/micromatch", + "bugs": { + "url": "https://github.com/micromatch/micromatch/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "lib" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "devDependencies": { + "bash-match": "^1.0.2", + "for-own": "^1.0.0", + "gulp": "^3.9.1", + "gulp-format-md": "^1.0.0", + "gulp-istanbul": "^1.1.3", + "gulp-mocha": "^5.0.0", + "gulp-unused": "^0.2.1", + "is-windows": "^1.0.2", + "minimatch": "^3.0.4", + "minimist": "^1.2.0", + "mocha": "^3.5.3", + "multimatch": "^2.1.0" + }, + "keywords": [ + "bash", + "expand", + "expansion", + "expression", + "file", + "files", + "filter", + "find", + "glob", + "globbing", + "globs", + "globstar", + "match", + "matcher", + "matches", + "matching", + "micromatch", + "minimatch", + "multimatch", + "path", + "pattern", + "patterns", + "regex", + "regexp", + "regular", + "shell", + "wildcard" + ], + "lintDeps": { + "dependencies": { + "options": { + "lock": { + "snapdragon": "^0.8.1" + } + } + }, + "devDependencies": { + "files": { + "options": { + "ignore": [ + "benchmark/**" + ] + } + } + } + }, + "verb": { + "toc": "collapsible", + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "helpers": [ + "./benchmark/helper.js" + ], + "related": { + "list": [ + "braces", + "expand-brackets", + "extglob", + "fill-range", + "nanomatch" + ] + }, + "lint": { + "reflinks": true + }, + "reflinks": [ + "expand-brackets", + "extglob", + "glob-object", + "minimatch", + "multimatch", + "snapdragon" + ] + } +} diff --git a/.pnpm-store/v11/files/49/eaff359f5113e029cd79fc4b299289c709412a77fde9e927439ecb47560a84af9dbe25720ba2c67aba33c3ebb2280a6a16a7394d80f4bc1e783e6a71bbd058 b/.pnpm-store/v11/files/49/eaff359f5113e029cd79fc4b299289c709412a77fde9e927439ecb47560a84af9dbe25720ba2c67aba33c3ebb2280a6a16a7394d80f4bc1e783e6a71bbd058 new file mode 100644 index 00000000..74475c1f --- /dev/null +++ b/.pnpm-store/v11/files/49/eaff359f5113e029cd79fc4b299289c709412a77fde9e927439ecb47560a84af9dbe25720ba2c67aba33c3ebb2280a6a16a7394d80f4bc1e783e6a71bbd058 @@ -0,0 +1,3 @@ +import * as SocketServer from 'socket.io'; +export declare const initializeSocketServer: (cb: Function) => void; +export declare const getSocketServer: () => SocketServer.Server; diff --git a/.pnpm-store/v11/files/4a/2b6819735dfff025e95ff76304d7ab6c352b45beb06f559f24ebfd572433c696a24b31ea1c02192fee08bc48989d524bfbdc1231525a5b91c50f9f87a8f5d4 b/.pnpm-store/v11/files/4a/2b6819735dfff025e95ff76304d7ab6c352b45beb06f559f24ebfd572433c696a24b31ea1c02192fee08bc48989d524bfbdc1231525a5b91c50f9f87a8f5d4 new file mode 100644 index 00000000..001de6c4 --- /dev/null +++ b/.pnpm-store/v11/files/4a/2b6819735dfff025e95ff76304d7ab6c352b45beb06f559f24ebfd572433c696a24b31ea1c02192fee08bc48989d524bfbdc1231525a5b91c50f9f87a8f5d4 @@ -0,0 +1,134 @@ +# is-descriptor [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +> Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors. + +## Usage + +```js +const isDescriptor = require('is-descriptor'); +const assert = require('assert'); + +assert.equal(isDescriptor({ value: 'foo' }), true); +assert.equal(isDescriptor({ get() {}, set() {} }), true); +assert.equal(isDescriptor({ get: 'foo', set() {} }), false); +``` + +You may also check for a descriptor by passing an object as the first argument and property name (`string`) as the second argument. + +```js +const obj = { foo: 'abc' }; + +Object.defineProperty(obj, 'bar', { + value: 'xyz' +}); + +assert.equal(isDescriptor(obj, 'foo'), true); +assert.equal(isDescriptor(obj, 'bar'), true); +``` + +## Examples + +### value type + +`false` when not an object + +```js +assert.equal(isDescriptor('a'), false); +assert.equal(isDescriptor(null), false); +assert.equal(isDescriptor([]), false); +``` + +### data descriptor + +`true` when the object has valid properties with valid values. + +```js +assert.equal(isDescriptor({ value: 'foo' }), true); +assert.equal(isDescriptor({ value() {} }), true); +``` + +`false` when the object has invalid properties + +```js +assert.equal(isDescriptor({ value: 'foo', enumerable: 'baz' }), false); +assert.equal(isDescriptor({ value: 'foo', configurable: 'baz' }), false); +assert.equal(isDescriptor({ value: 'foo', get() {} }), false); +assert.equal(isDescriptor({ get() {}, value() {} }), false); +``` + +`false` when a value is not the correct type + +```js +assert.equal(isDescriptor({ value: 'foo', enumerable: 'foo' }), false); +assert.equal(isDescriptor({ value: 'foo', configurable: 'foo' }), false); +assert.equal(isDescriptor({ value: 'foo', writable: 'foo' }), false); +``` + +### accessor descriptor + +`true` when the object has valid properties with valid values. + +```js +assert.equal(isDescriptor({ get() {}, set() {} }), true); +assert.equal(isDescriptor({ get() {} }), true); +assert.equal(isDescriptor({ set() {} }), true); +``` + +`false` when the object has invalid properties + +```js +assert.equal(isDescriptor({ get() {}, set() {}, enumerable: 'baz' }), false); +assert.equal(isDescriptor({ get() {}, writable: true }), false); +assert.equal(isDescriptor({ get() {}, value: true }), false); +``` + +`false` when an accessor is not a function + +```js +assert.equal(isDescriptor({ get() {}, set: 'baz' }), false); +assert.equal(isDescriptor({ get: 'foo', set() {} }), false); +assert.equal(isDescriptor({ get: 'foo', bar: 'baz' }), false); +assert.equal(isDescriptor({ get: 'foo', set: 'baz' }), false); +``` + +`false` when a value is not the correct type + +```js +assert.equal(isDescriptor({ get() {}, set() {}, enumerable: 'foo' }), false); +assert.equal(isDescriptor({ set() {}, configurable: 'foo' }), false); +assert.equal(isDescriptor({ get() {}, configurable: 'foo' }), false); +``` + +### Related projects + +You might also be interested in these projects: + +* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. +* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. +* [is-object](https://www.npmjs.com/package/is-object): Returns true if the value is an object and not an array or null. + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/is-descriptor +[npm-version-svg]: https://versionbadg.es/inspect-js/is-descriptor.svg +[deps-svg]: https://david-dm.org/inspect-js/is-descriptor.svg +[deps-url]: https://david-dm.org/inspect-js/is-descriptor +[dev-deps-svg]: https://david-dm.org/inspect-js/is-descriptor/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/is-descriptor#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/is-descriptor.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/is-descriptor.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/is-descriptor.svg +[downloads-url]: https://npm-stat.com/charts.html?package=is-descriptor +[codecov-image]: https://codecov.io/gh/inspect-js/is-descriptor/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/is-descriptor/ +[actions-image]: https://img.shields.io/github/check-runs/inspect-js/is-descriptor/main +[actions-url]: https://github.com/inspect-js/is-descriptor/actions diff --git a/.pnpm-store/v11/files/4a/2fd29776f1b26586c59687f4a2c85683f37d8f1f694bd6adf34dce7ae684cef21a394d32515c93ae68919c96ea07c570f8a43357dcd0419013c723c051ac0e b/.pnpm-store/v11/files/4a/2fd29776f1b26586c59687f4a2c85683f37d8f1f694bd6adf34dce7ae684cef21a394d32515c93ae68919c96ea07c570f8a43357dcd0419013c723c051ac0e new file mode 100644 index 00000000..3b977caf --- /dev/null +++ b/.pnpm-store/v11/files/4a/2fd29776f1b26586c59687f4a2c85683f37d8f1f694bd6adf34dce7ae684cef21a394d32515c93ae68919c96ea07c570f8a43357dcd0419013c723c051ac0e @@ -0,0 +1,16 @@ +{ + "name": "lodash.isequal", + "version": "4.5.0", + "description": "The Lodash method `_.isEqual` exported as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "keywords": "lodash-modularized, isequal", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Mathias Bynens (https://mathiasbynens.be/)" + ], + "repository": "lodash/lodash", + "scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" } +} diff --git a/.pnpm-store/v11/files/4a/35f343184bfcd02e49c5f2ab2efe657ca00fa4fff5db576c4933e6743558e9157609b2d74562f20f6ce9736c01a585e8789b2f612e17e0056bf38a781e0ac4 b/.pnpm-store/v11/files/4a/35f343184bfcd02e49c5f2ab2efe657ca00fa4fff5db576c4933e6743558e9157609b2d74562f20f6ce9736c01a585e8789b2f612e17e0056bf38a781e0ac4 new file mode 100644 index 00000000..5855c95e --- /dev/null +++ b/.pnpm-store/v11/files/4a/35f343184bfcd02e49c5f2ab2efe657ca00fa4fff5db576c4933e6743558e9157609b2d74562f20f6ce9736c01a585e8789b2f612e17e0056bf38a781e0ac4 @@ -0,0 +1,26 @@ +var assocIndexOf = require('./_assocIndexOf'); + +/** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ +function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; +} + +module.exports = listCacheSet; diff --git a/.pnpm-store/v11/files/4a/723004afdff9b6989ea592c338e29cb3779bc22c49af179837b263ca170596ca72103ab78688dd45b1dab274bb4b567ebe5c1453d3ff616719617b769f9015 b/.pnpm-store/v11/files/4a/723004afdff9b6989ea592c338e29cb3779bc22c49af179837b263ca170596ca72103ab78688dd45b1dab274bb4b567ebe5c1453d3ff616719617b769f9015 new file mode 100644 index 00000000..c5b52190 --- /dev/null +++ b/.pnpm-store/v11/files/4a/723004afdff9b6989ea592c338e29cb3779bc22c49af179837b263ca170596ca72103ab78688dd45b1dab274bb4b567ebe5c1453d3ff616719617b769f9015 @@ -0,0 +1,23 @@ +var LazyWrapper = require('./_LazyWrapper'); + +/** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ +function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; +} + +module.exports = lazyReverse; diff --git a/.pnpm-store/v11/files/4a/7445f775134d6aabe3fba8b3ebfdabe462414d0ef208b3dc703e013ee6a0d94a55dcb5eb26857ef022913bc0f194b993e9401f20d3f8000c427445fffe25f4 b/.pnpm-store/v11/files/4a/7445f775134d6aabe3fba8b3ebfdabe462414d0ef208b3dc703e013ee6a0d94a55dcb5eb26857ef022913bc0f194b993e9401f20d3f8000c427445fffe25f4 new file mode 100644 index 00000000..e766903d --- /dev/null +++ b/.pnpm-store/v11/files/4a/7445f775134d6aabe3fba8b3ebfdabe462414d0ef208b3dc703e013ee6a0d94a55dcb5eb26857ef022913bc0f194b993e9401f20d3f8000c427445fffe25f4 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('assignInAllWith', require('../assignInWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/4a/83178d54b42ed286a7a6a8b73ca585ed1440a6ff7ccae4238f4d929cb2d5cbca7ad020862a367b6bedb59720bc80b126bea1d25fe2234b0c3a36c7d8521f2c b/.pnpm-store/v11/files/4a/83178d54b42ed286a7a6a8b73ca585ed1440a6ff7ccae4238f4d929cb2d5cbca7ad020862a367b6bedb59720bc80b126bea1d25fe2234b0c3a36c7d8521f2c new file mode 100644 index 00000000..15939d58 --- /dev/null +++ b/.pnpm-store/v11/files/4a/83178d54b42ed286a7a6a8b73ca585ed1440a6ff7ccae4238f4d929cb2d5cbca7ad020862a367b6bedb59720bc80b126bea1d25fe2234b0c3a36c7d8521f2c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('overSome', require('../overSome')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/4a/89a740e448f5bef7f30a8116edae4189ec7befdf324ae4687adcad03dbbf587a08e3c41c95df9e608a3764b1ee66bf2ef8e38a2d6810f3e3a3de0775885243 b/.pnpm-store/v11/files/4a/89a740e448f5bef7f30a8116edae4189ec7befdf324ae4687adcad03dbbf587a08e3c41c95df9e608a3764b1ee66bf2ef8e38a2d6810f3e3a3de0775885243 new file mode 100644 index 00000000..ab5bc718 --- /dev/null +++ b/.pnpm-store/v11/files/4a/89a740e448f5bef7f30a8116edae4189ec7befdf324ae4687adcad03dbbf587a08e3c41c95df9e608a3764b1ee66bf2ef8e38a2d6810f3e3a3de0775885243 @@ -0,0 +1,62 @@ +{ + "name": "homedir-polyfill", + "description": "Node.js os.homedir polyfill for older versions of node.js.", + "version": "1.0.3", + "homepage": "https://github.com/doowb/homedir-polyfill", + "author": "Brian Woodward (https://github.com/doowb)", + "repository": "doowb/homedir-polyfill", + "bugs": { + "url": "https://github.com/doowb/homedir-polyfill/issues" + }, + "license": "MIT", + "files": [ + "index.js", + "polyfill.js", + "LICENSE" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "gulp-format-md": "^0.1.11", + "mocha": "^3.1.2" + }, + "keywords": [ + "home", + "homedir", + "homedirectory", + "os", + "os-homedir", + "polyfill", + "userhome" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + }, + "related": { + "list": [ + "parse-passwd" + ] + }, + "reflinks": [ + "verb", + "verb-generate-readme" + ] + }, + "dependencies": { + "parse-passwd": "^1.0.0" + } +} diff --git a/.pnpm-store/v11/files/4a/8a0d3a52aae259c5de4496cded318c68e6486a8e2d998c5e4819957e7d943b2d798da5ab19719aa32d6dd60859ee74f1298390b9af7c1f3cdfb79edbd19d65 b/.pnpm-store/v11/files/4a/8a0d3a52aae259c5de4496cded318c68e6486a8e2d998c5e4819957e7d943b2d798da5ab19719aa32d6dd60859ee74f1298390b9af7c1f3cdfb79edbd19d65 new file mode 100644 index 00000000..1704131b --- /dev/null +++ b/.pnpm-store/v11/files/4a/8a0d3a52aae259c5de4496cded318c68e6486a8e2d998c5e4819957e7d943b2d798da5ab19719aa32d6dd60859ee74f1298390b9af7c1f3cdfb79edbd19d65 @@ -0,0 +1,131 @@ +'use strict'; +const os = require('os'); +const hasFlag = require('has-flag'); + +const env = process.env; + +let forceColor; +if (hasFlag('no-color') || + hasFlag('no-colors') || + hasFlag('color=false')) { + forceColor = false; +} else if (hasFlag('color') || + hasFlag('colors') || + hasFlag('color=true') || + hasFlag('color=always')) { + forceColor = true; +} +if ('FORCE_COLOR' in env) { + forceColor = env.FORCE_COLOR.length === 0 || parseInt(env.FORCE_COLOR, 10) !== 0; +} + +function translateLevel(level) { + if (level === 0) { + return false; + } + + return { + level, + hasBasic: true, + has256: level >= 2, + has16m: level >= 3 + }; +} + +function supportsColor(stream) { + if (forceColor === false) { + return 0; + } + + if (hasFlag('color=16m') || + hasFlag('color=full') || + hasFlag('color=truecolor')) { + return 3; + } + + if (hasFlag('color=256')) { + return 2; + } + + if (stream && !stream.isTTY && forceColor !== true) { + return 0; + } + + const min = forceColor ? 1 : 0; + + if (process.platform === 'win32') { + // Node.js 7.5.0 is the first version of Node.js to include a patch to + // libuv that enables 256 color output on Windows. Anything earlier and it + // won't work. However, here we target Node.js 8 at minimum as it is an LTS + // release, and Node.js 7 is not. Windows 10 build 10586 is the first Windows + // release that supports 256 colors. Windows 10 build 14931 is the first release + // that supports 16m/TrueColor. + const osRelease = os.release().split('.'); + if ( + Number(process.versions.node.split('.')[0]) >= 8 && + Number(osRelease[0]) >= 10 && + Number(osRelease[2]) >= 10586 + ) { + return Number(osRelease[2]) >= 14931 ? 3 : 2; + } + + return 1; + } + + if ('CI' in env) { + if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(sign => sign in env) || env.CI_NAME === 'codeship') { + return 1; + } + + return min; + } + + if ('TEAMCITY_VERSION' in env) { + return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0; + } + + if (env.COLORTERM === 'truecolor') { + return 3; + } + + if ('TERM_PROGRAM' in env) { + const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10); + + switch (env.TERM_PROGRAM) { + case 'iTerm.app': + return version >= 3 ? 3 : 2; + case 'Apple_Terminal': + return 2; + // No default + } + } + + if (/-256(color)?$/i.test(env.TERM)) { + return 2; + } + + if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) { + return 1; + } + + if ('COLORTERM' in env) { + return 1; + } + + if (env.TERM === 'dumb') { + return min; + } + + return min; +} + +function getSupportLevel(stream) { + const level = supportsColor(stream); + return translateLevel(level); +} + +module.exports = { + supportsColor: getSupportLevel, + stdout: getSupportLevel(process.stdout), + stderr: getSupportLevel(process.stderr) +}; diff --git a/.pnpm-store/v11/files/4a/a7a6bcc6dc4ea722fadb9a26d12da2c97d7f7810d4ae968bed6bd71ef23fed242b5e3cb9495e8fdd7d655f1f0c3e89304db893dd02cb62842016b231877bf5 b/.pnpm-store/v11/files/4a/a7a6bcc6dc4ea722fadb9a26d12da2c97d7f7810d4ae968bed6bd71ef23fed242b5e3cb9495e8fdd7d655f1f0c3e89304db893dd02cb62842016b231877bf5 new file mode 100644 index 00000000..91b75386 --- /dev/null +++ b/.pnpm-store/v11/files/4a/a7a6bcc6dc4ea722fadb9a26d12da2c97d7f7810d4ae968bed6bd71ef23fed242b5e3cb9495e8fdd7d655f1f0c3e89304db893dd02cb62842016b231877bf5 @@ -0,0 +1,18 @@ +# lodash.merge v4.6.2 + +The [Lodash](https://lodash.com/) method `_.merge` exported as a [Node.js](https://nodejs.org/) module. + +## Installation + +Using npm: +```bash +$ {sudo -H} npm i -g npm +$ npm i --save lodash.merge +``` + +In Node.js: +```js +var merge = require('lodash.merge'); +``` + +See the [documentation](https://lodash.com/docs#merge) or [package source](https://github.com/lodash/lodash/blob/4.6.2-npm-packages/lodash.merge) for more details. diff --git a/.pnpm-store/v11/files/4a/aaa107e6ca2cfd1d34349c4c06a226c98c1548be68a36f48df6630b0396364a4012de7649df16241c19d6ee3b429f23eccd35f884caba3ee523772d1f4a2e5 b/.pnpm-store/v11/files/4a/aaa107e6ca2cfd1d34349c4c06a226c98c1548be68a36f48df6630b0396364a4012de7649df16241c19d6ee3b429f23eccd35f884caba3ee523772d1f4a2e5 new file mode 100644 index 00000000..d5702c4e --- /dev/null +++ b/.pnpm-store/v11/files/4a/aaa107e6ca2cfd1d34349c4c06a226c98c1548be68a36f48df6630b0396364a4012de7649df16241c19d6ee3b429f23eccd35f884caba3ee523772d1f4a2e5 @@ -0,0 +1,57 @@ +{ + "name": "neo-async", + "version": "2.6.2", + "description": "Neo-Async is a drop-in replacement for Async, it almost fully covers its functionality and runs faster ", + "main": "async.js", + "license": "MIT", + "keywords": [ + "async", + "util" + ], + "repository": { + "type": "git", + "url": "git@github.com:suguru03/neo-async.git" + }, + "homepage": "https://github.com/suguru03/neo-async", + "dependencies": {}, + "devDependencies": { + "aigle": "^1.14.0", + "async": "^2.6.0", + "benchmark": "^2.1.1", + "bluebird": "^3.5.1", + "codecov.io": "^0.1.6", + "fs-extra": "^4.0.2", + "func-comparator": "^0.7.2", + "gulp": "^4.0.2", + "gulp-bump": "^2.8.0", + "gulp-exit": "0.0.2", + "gulp-git": "^2.4.2", + "gulp-jscs": "^4.0.0", + "gulp-mocha": "^4.2.0", + "gulp-tag-version": "^1.3.0", + "gulp-util": "^3.0.7", + "husky": "^1.2.0", + "istanbul": "^0.4.3", + "jsdoc": "^3.5.5", + "jshint": "^2.9.5", + "lint-staged": "^8.1.0", + "lodash": "^4.16.6", + "minimist": "^1.2.0", + "mocha": "^3.5.3", + "mocha-parallel-executor": "^0.3.0", + "mocha.parallel": "^0.15.3", + "prettier": "^1.15.2", + "require-dir": "^0.3.0" + }, + "lint-staged": { + "*.{js,ts}": [ + "prettier --write", + "git add" + ] + }, + "prettier": { + "printWidth": 100, + "singleQuote": true + }, + "browser": "async.min.js" +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/4a/c5ae45e2e9866c117a40c6307ad5f5db60c63bf96d1241436c0caf12b6c4860cb73cbbabea6692b262abf9ed85523a5078180fb5ebce74f015e5ebabb1b626 b/.pnpm-store/v11/files/4a/c5ae45e2e9866c117a40c6307ad5f5db60c63bf96d1241436c0caf12b6c4860cb73cbbabea6692b262abf9ed85523a5078180fb5ebce74f015e5ebabb1b626 new file mode 100644 index 00000000..4ec13d1f --- /dev/null +++ b/.pnpm-store/v11/files/4a/c5ae45e2e9866c117a40c6307ad5f5db60c63bf96d1241436c0caf12b6c4860cb73cbbabea6692b262abf9ed85523a5078180fb5ebce74f015e5ebabb1b626 @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-2018 Suguru Motegi +Based on Async.js, Copyright Caolan McMahon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/4a/d7b2643e0b563cb7424c4a2d76d9fe683d1edc399fe14e117a836624e7edf2e093d51e9e4ba36740196fcb80f7383bef83c1575fc7366b132f77edde8bd17d b/.pnpm-store/v11/files/4a/d7b2643e0b563cb7424c4a2d76d9fe683d1edc399fe14e117a836624e7edf2e093d51e9e4ba36740196fcb80f7383bef83c1575fc7366b132f77edde8bd17d new file mode 100644 index 00000000..6468b064 --- /dev/null +++ b/.pnpm-store/v11/files/4a/d7b2643e0b563cb7424c4a2d76d9fe683d1edc399fe14e117a836624e7edf2e093d51e9e4ba36740196fcb80f7383bef83c1575fc7366b132f77edde8bd17d @@ -0,0 +1,27 @@ +var MapCache = require('./_MapCache'), + setCacheAdd = require('./_setCacheAdd'), + setCacheHas = require('./_setCacheHas'); + +/** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ +function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } +} + +// Add methods to `SetCache`. +SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; +SetCache.prototype.has = setCacheHas; + +module.exports = SetCache; diff --git a/.pnpm-store/v11/files/4a/dbdba40510b4979ff117f6102e458c397bd6066ca2d32cf1ea42b7117faffed68e5218bef5678ead34bc89f4b0eecc36f9c6ee23b88e5af2b132043b65764f b/.pnpm-store/v11/files/4a/dbdba40510b4979ff117f6102e458c397bd6066ca2d32cf1ea42b7117faffed68e5218bef5678ead34bc89f4b0eecc36f9c6ee23b88e5af2b132043b65764f new file mode 100644 index 00000000..f590fa57 --- /dev/null +++ b/.pnpm-store/v11/files/4a/dbdba40510b4979ff117f6102e458c397bd6066ca2d32cf1ea42b7117faffed68e5218bef5678ead34bc89f4b0eecc36f9c6ee23b88e5af2b132043b65764f @@ -0,0 +1,68 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (fn /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + return function () /*callArgs*/{ + var callArgs = (0, _slice2.default)(arguments); + return fn.apply(null, args.concat(callArgs)); + }; +}; + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +; + +/** + * Creates a continuation function with some arguments already applied. + * + * Useful as a shorthand when combined with other control flow functions. Any + * arguments passed to the returned function are added to the arguments + * originally passed to apply. + * + * @name apply + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {Function} fn - The function you want to eventually apply all + * arguments to. Invokes with (arguments...). + * @param {...*} arguments... - Any number of arguments to automatically apply + * when the continuation is called. + * @returns {Function} the partially-applied function + * @example + * + * // using apply + * async.parallel([ + * async.apply(fs.writeFile, 'testfile1', 'test1'), + * async.apply(fs.writeFile, 'testfile2', 'test2') + * ]); + * + * + * // the same process without using apply + * async.parallel([ + * function(callback) { + * fs.writeFile('testfile1', 'test1', callback); + * }, + * function(callback) { + * fs.writeFile('testfile2', 'test2', callback); + * } + * ]); + * + * // It's possible to pass any number of additional arguments when calling the + * // continuation: + * + * node> var fn = async.apply(sys.puts, 'one'); + * node> fn('two', 'three'); + * one + * two + * three + */ +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/4a/fb486f0d591c1bc52b6d9e23ba830491c0d9186f9602e33a4d0af00deb2fe0fd0ee55d2ef4223170847ff0b4d861d4f77fc9add2524d3b9c0100b62f48b576 b/.pnpm-store/v11/files/4a/fb486f0d591c1bc52b6d9e23ba830491c0d9186f9602e33a4d0af00deb2fe0fd0ee55d2ef4223170847ff0b4d861d4f77fc9add2524d3b9c0100b62f48b576 new file mode 100644 index 00000000..126ff033 --- /dev/null +++ b/.pnpm-store/v11/files/4a/fb486f0d591c1bc52b6d9e23ba830491c0d9186f9602e33a4d0af00deb2fe0fd0ee55d2ef4223170847ff0b4d861d4f77fc9add2524d3b9c0100b62f48b576 @@ -0,0 +1,24 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('dotted alias', function (t) { + var argv = parse(['--a.b', '22'], { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 22); + t.equal(argv.aa.bb, 22); + t.end(); +}); + +test('dotted default', function (t) { + var argv = parse('', { default: { 'a.b': 11 }, alias: { 'a.b': 'aa.bb' } }); + t.equal(argv.a.b, 11); + t.equal(argv.aa.bb, 11); + t.end(); +}); + +test('dotted default with no alias', function (t) { + var argv = parse('', { default: { 'a.b': 11 } }); + t.equal(argv.a.b, 11); + t.end(); +}); diff --git a/.pnpm-store/v11/files/4b/11d0354863302d365e73ae46ddcc46f2ec1f4f792772810b379916f299dd9a6780e7a5b8ef6466eff0465b4d55cc59fcc8d6a5ab70af225afa0daf3bff466b b/.pnpm-store/v11/files/4b/11d0354863302d365e73ae46ddcc46f2ec1f4f792772810b379916f299dd9a6780e7a5b8ef6466eff0465b4d55cc59fcc8d6a5ab70af225afa0daf3bff466b new file mode 100644 index 00000000..18ee039a --- /dev/null +++ b/.pnpm-store/v11/files/4b/11d0354863302d365e73ae46ddcc46f2ec1f4f792772810b379916f299dd9a6780e7a5b8ef6466eff0465b4d55cc59fcc8d6a5ab70af225afa0daf3bff466b @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isElement', require('../isElement'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/4b/136f0edb33a6cff8e337258fb9ee7f99fe5f50a48c608a61acfb92c8802294931939e637912f52bf2efd9f7a2d9a0050c61fbf43e2a5c2849130d5c3d7720c b/.pnpm-store/v11/files/4b/136f0edb33a6cff8e337258fb9ee7f99fe5f50a48c608a61acfb92c8802294931939e637912f52bf2efd9f7a2d9a0050c61fbf43e2a5c2849130d5c3d7720c new file mode 100644 index 00000000..6f137ba5 --- /dev/null +++ b/.pnpm-store/v11/files/4b/136f0edb33a6cff8e337258fb9ee7f99fe5f50a48c608a61acfb92c8802294931939e637912f52bf2efd9f7a2d9a0050c61fbf43e2a5c2849130d5c3d7720c @@ -0,0 +1,31 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface DateConstructor { + /** + * Returns the number of milliseconds between midnight, January 1, 1970 Universal Coordinated Time (UTC) (or GMT) and the specified date. + * @param year The full year designation is required for cross-century date accuracy. If year is between 0 and 99 is used, then year is assumed to be 1900 + year. + * @param monthIndex The month as a number between 0 and 11 (January to December). + * @param date The date as a number between 1 and 31. + * @param hours Must be supplied if minutes is supplied. A number from 0 to 23 (midnight to 11pm) that specifies the hour. + * @param minutes Must be supplied if seconds is supplied. A number from 0 to 59 that specifies the minutes. + * @param seconds Must be supplied if milliseconds is supplied. A number from 0 to 59 that specifies the seconds. + * @param ms A number from 0 to 999 that specifies the milliseconds. + */ + UTC(year: number, monthIndex?: number, date?: number, hours?: number, minutes?: number, seconds?: number, ms?: number): number; +} diff --git a/.pnpm-store/v11/files/4b/13ca4d54a3f85ed7bcc3bced61973162e205b3dbb11ef8c808490c3de1a2973f50c8a660094774f7dd83b0bee864f33c1de313dfd6cdf2c1aff767068480cd b/.pnpm-store/v11/files/4b/13ca4d54a3f85ed7bcc3bced61973162e205b3dbb11ef8c808490c3de1a2973f50c8a660094774f7dd83b0bee864f33c1de313dfd6cdf2c1aff767068480cd new file mode 100644 index 00000000..dad1b987 --- /dev/null +++ b/.pnpm-store/v11/files/4b/13ca4d54a3f85ed7bcc3bced61973162e205b3dbb11ef8c808490c3de1a2973f50c8a660094774f7dd83b0bee864f33c1de313dfd6cdf2c1aff767068480cd @@ -0,0 +1 @@ +export declare const run: (filePath: string) => void; diff --git a/.pnpm-store/v11/files/4b/167a34b7ed94bc77d5d1a8775d7b68e349a2bd85e456fcc75f9eddeb7b1cb5404e4b1c38278bf4d7f4686df51bd584f2dc8b2c4c92b1655c24577f3cfd85da b/.pnpm-store/v11/files/4b/167a34b7ed94bc77d5d1a8775d7b68e349a2bd85e456fcc75f9eddeb7b1cb5404e4b1c38278bf4d7f4686df51bd584f2dc8b2c4c92b1655c24577f3cfd85da new file mode 100644 index 00000000..3071b22a --- /dev/null +++ b/.pnpm-store/v11/files/4b/167a34b7ed94bc77d5d1a8775d7b68e349a2bd85e456fcc75f9eddeb7b1cb5404e4b1c38278bf4d7f4686df51bd584f2dc8b2c4c92b1655c24577f3cfd85da @@ -0,0 +1,26 @@ +// USAGE: +// var handlebars = require('handlebars'); +/* eslint-env node */ +/* eslint-disable no-var */ + +// var local = handlebars.create(); + +var handlebars = require('../dist/cjs/handlebars')['default']; + +var printer = require('../dist/cjs/handlebars/compiler/printer'); +handlebars.PrintVisitor = printer.PrintVisitor; +handlebars.print = printer.print; + +module.exports = handlebars; + +// Publish a Node.js require() handler for .handlebars and .hbs files +function extension(module, filename) { + var fs = require('fs'); + var templateString = fs.readFileSync(filename, 'utf8'); + module.exports = handlebars.compile(templateString); +} +/* istanbul ignore else */ +if (typeof require !== 'undefined' && require.extensions) { + require.extensions['.handlebars'] = extension; + require.extensions['.hbs'] = extension; +} diff --git a/.pnpm-store/v11/files/4b/1fc71a5e079a1fba7b6fe7206ff4b0aee927043844a7b2aa651aef9b5d55571a215b0deb6e5d5cd7beefd3ef7634be793e46d9c1464e7b9c346dc7c14e6cb2 b/.pnpm-store/v11/files/4b/1fc71a5e079a1fba7b6fe7206ff4b0aee927043844a7b2aa651aef9b5d55571a215b0deb6e5d5cd7beefd3ef7634be793e46d9c1464e7b9c346dc7c14e6cb2 new file mode 100644 index 00000000..32172007 --- /dev/null +++ b/.pnpm-store/v11/files/4b/1fc71a5e079a1fba7b6fe7206ff4b0aee927043844a7b2aa651aef9b5d55571a215b0deb6e5d5cd7beefd3ef7634be793e46d9c1464e7b9c346dc7c14e6cb2 @@ -0,0 +1,868 @@ +/* MIT license */ +var cssKeywords = require('color-name'); + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in cssKeywords) { + if (cssKeywords.hasOwnProperty(key)) { + reverseKeywords[cssKeywords[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in cssKeywords) { + if (cssKeywords.hasOwnProperty(keyword)) { + var value = cssKeywords[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return cssKeywords[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; diff --git a/.pnpm-store/v11/files/4b/248acd5406969c773d1b45c8ccabfee788cec366358f4fb2a420582bf3dc418f4d7e11d2a599315aaf23e6b1a3c8a17417d79ab21f036e8ad695b32221dc88 b/.pnpm-store/v11/files/4b/248acd5406969c773d1b45c8ccabfee788cec366358f4fb2a420582bf3dc418f4d7e11d2a599315aaf23e6b1a3c8a17417d79ab21f036e8ad695b32221dc88 new file mode 100644 index 00000000..b6b5b031 --- /dev/null +++ b/.pnpm-store/v11/files/4b/248acd5406969c773d1b45c8ccabfee788cec366358f4fb2a420582bf3dc418f4d7e11d2a599315aaf23e6b1a3c8a17417d79ab21f036e8ad695b32221dc88 @@ -0,0 +1,118 @@ +var colors = require('./colors'), + styles = require('./styles'); + +module['exports'] = function () { + + // + // Extends prototype of native string object to allow for "foo".red syntax + // + var addProperty = function (color, func) { + String.prototype.__defineGetter__(color, func); + }; + + var sequencer = function sequencer (map, str) { + return function () { + var exploded = this.split(""), i = 0; + exploded = exploded.map(map); + return exploded.join(""); + } + }; + + var stylize = function stylize (str, style) { + return styles[style].open + str + styles[style].close; + } + + addProperty('strip', function () { + return colors.strip(this); + }); + + addProperty('stripColors', function () { + return colors.strip(this); + }); + + addProperty("trap", function(){ + return colors.trap(this); + }); + + addProperty("zalgo", function(){ + return colors.zalgo(this); + }); + + addProperty("zebra", function(){ + return colors.zebra(this); + }); + + addProperty("rainbow", function(){ + return colors.rainbow(this); + }); + + addProperty("random", function(){ + return colors.random(this); + }); + + addProperty("america", function(){ + return colors.america(this); + }); + + // + // Iterate through all default styles and colors + // + var x = Object.keys(colors.styles); + x.forEach(function (style) { + addProperty(style, function () { + return stylize(this, style); + }); + }); + + function applyTheme(theme) { + // + // Remark: This is a list of methods that exist + // on String that you should not overwrite. + // + var stringPrototypeBlacklist = [ + '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor', + 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt', + 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring', + 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight' + ]; + + Object.keys(theme).forEach(function (prop) { + if (stringPrototypeBlacklist.indexOf(prop) !== -1) { + console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name'); + } + else { + if (typeof(theme[prop]) === 'string') { + colors[prop] = colors[theme[prop]]; + addProperty(prop, function () { + return colors[theme[prop]](this); + }); + } + else { + addProperty(prop, function () { + var ret = this; + for (var t = 0; t < theme[prop].length; t++) { + ret = exports[theme[prop][t]](ret); + } + return ret; + }); + } + } + }); + } + + colors.setTheme = function (theme) { + if (typeof theme === 'string') { + try { + colors.themes[theme] = require(theme); + applyTheme(colors.themes[theme]); + return colors.themes[theme]; + } catch (err) { + console.log(err); + return err; + } + } else { + applyTheme(theme); + } + }; + +}; \ No newline at end of file diff --git a/.pnpm-store/v11/files/4b/4c3e656f4b35dbc9a37f044c4d4678f2236336bc153e0473b0a4e97ebd00f8d66ab10e20c6ca2616f088f10baa7aee56372fbf70fa4d0d96d2fbc71ead1022 b/.pnpm-store/v11/files/4b/4c3e656f4b35dbc9a37f044c4d4678f2236336bc153e0473b0a4e97ebd00f8d66ab10e20c6ca2616f088f10baa7aee56372fbf70fa4d0d96d2fbc71ead1022 new file mode 100644 index 00000000..b802303a --- /dev/null +++ b/.pnpm-store/v11/files/4b/4c3e656f4b35dbc9a37f044c4d4678f2236336bc153e0473b0a4e97ebd00f8d66ab10e20c6ca2616f088f10baa7aee56372fbf70fa4d0d96d2fbc71ead1022 @@ -0,0 +1,19 @@ +exports.default = () => { + return { + exclusions: [ + { + list: [] + }, + { + groups: [ + { + list: [] + }, + { + list: [] + } + ] + } + ] + }; +}; diff --git a/.pnpm-store/v11/files/4b/7211ffd09c9b31f2810570adceb57c3add76307a1242ec17969500c30fe2d36b58e2558cd9ddd061ef10535cc5d5590f1766fc6e3958d404199e3497890f11 b/.pnpm-store/v11/files/4b/7211ffd09c9b31f2810570adceb57c3add76307a1242ec17969500c30fe2d36b58e2558cd9ddd061ef10535cc5d5590f1766fc6e3958d404199e3497890f11 new file mode 100644 index 00000000..fcf17f0d --- /dev/null +++ b/.pnpm-store/v11/files/4b/7211ffd09c9b31f2810570adceb57c3add76307a1242ec17969500c30fe2d36b58e2558cd9ddd061ef10535cc5d5590f1766fc6e3958d404199e3497890f11 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('invoke', require('../invoke')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/4b/7ee89da24013f728e28c72b5aa5a2bd03fbce97c84be4b78fda790cee39b07e42993d9032aebfa50573e73e57e97c6901028005e6d366f79aae5e412f28fc6 b/.pnpm-store/v11/files/4b/7ee89da24013f728e28c72b5aa5a2bd03fbce97c84be4b78fda790cee39b07e42993d9032aebfa50573e73e57e97c6901028005e6d366f79aae5e412f28fc6 new file mode 100644 index 00000000..ff9887ab --- /dev/null +++ b/.pnpm-store/v11/files/4b/7ee89da24013f728e28c72b5aa5a2bd03fbce97c84be4b78fda790cee39b07e42993d9032aebfa50573e73e57e97c6901028005e6d366f79aae5e412f28fc6 @@ -0,0 +1,18 @@ +/** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; +} + +module.exports = stackDelete; diff --git a/.pnpm-store/v11/files/4b/b7165042be3457f9cd998327358f05c72dcf63939886bfaf263f44349cb4ff6987abfd78a5b321040c431e4043d073224a773825e7e9d225d8b5b717ec421a b/.pnpm-store/v11/files/4b/b7165042be3457f9cd998327358f05c72dcf63939886bfaf263f44349cb4ff6987abfd78a5b321040c431e4043d073224a773825e7e9d225d8b5b717ec421a new file mode 100644 index 00000000..31e803b9 --- /dev/null +++ b/.pnpm-store/v11/files/4b/b7165042be3457f9cd998327358f05c72dcf63939886bfaf263f44349cb4ff6987abfd78a5b321040c431e4043d073224a773825e7e9d225d8b5b717ec421a @@ -0,0 +1,390 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + esprima-six + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ` element. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileList) + */ +interface FileList { + /** + * The **`length`** read-only property of the FileList interface returns the number of files in the `FileList`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileList/length) + */ + readonly length: number; + /** + * The **`item()`** method of the FileList interface returns a File object representing the file at the specified index in the file list. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileList/item) + */ + item(index: number): File | null; + [index: number]: File; +} + +declare var FileList: { + prototype: FileList; + new(): FileList; +}; + +interface FileReaderEventMap { + "abort": ProgressEvent; + "error": ProgressEvent; + "load": ProgressEvent; + "loadend": ProgressEvent; + "loadstart": ProgressEvent; + "progress": ProgressEvent; +} + +/** + * The **`FileReader`** interface lets web applications asynchronously read the contents of files (or raw data buffers) stored on the user's computer, using File or Blob objects to specify the file or data to read. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader) + */ +interface FileReader extends EventTarget { + /** + * The **`error`** read-only property of the FileReader interface returns the error that occurred while reading the file. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/error) + */ + readonly error: DOMException | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/abort_event) */ + onabort: ((this: FileReader, ev: ProgressEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/error_event) */ + onerror: ((this: FileReader, ev: ProgressEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/load_event) */ + onload: ((this: FileReader, ev: ProgressEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/loadend_event) */ + onloadend: ((this: FileReader, ev: ProgressEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/loadstart_event) */ + onloadstart: ((this: FileReader, ev: ProgressEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/progress_event) */ + onprogress: ((this: FileReader, ev: ProgressEvent) => any) | null; + /** + * The **`readyState`** read-only property of the FileReader interface provides the current state of the reading operation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readyState) + */ + readonly readyState: typeof FileReader.EMPTY | typeof FileReader.LOADING | typeof FileReader.DONE; + /** + * The **`result`** read-only property of the FileReader interface returns the file's contents. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/result) + */ + readonly result: string | ArrayBuffer | null; + /** + * The **`abort()`** method of the FileReader interface aborts the read operation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/abort) + */ + abort(): void; + /** + * The **`readAsArrayBuffer()`** method of the FileReader interface is used to start reading the contents of a specified Blob or File. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsArrayBuffer) + */ + readAsArrayBuffer(blob: Blob): void; + /** + * The **`readAsBinaryString()`** method of the FileReader interface is used to start reading the contents of the specified Blob or File. + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsBinaryString) + */ + readAsBinaryString(blob: Blob): void; + /** + * The **`readAsDataURL()`** method of the FileReader interface is used to read the contents of the specified file's data as a base64 encoded string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsDataURL) + */ + readAsDataURL(blob: Blob): void; + /** + * The **`readAsText()`** method of the FileReader interface is used to read the contents of the specified Blob or File. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReader/readAsText) + */ + readAsText(blob: Blob, encoding?: string): void; + readonly EMPTY: 0; + readonly LOADING: 1; + readonly DONE: 2; + addEventListener(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: FileReader, ev: FileReaderEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var FileReader: { + prototype: FileReader; + new(): FileReader; + readonly EMPTY: 0; + readonly LOADING: 1; + readonly DONE: 2; +}; + +/** + * The **`FileReaderSync`** interface allows to read File or Blob objects synchronously. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReaderSync) + */ +interface FileReaderSync { + /** + * The **`readAsArrayBuffer()`** method of the FileReaderSync interface allows to read File or Blob objects in a synchronous way into an ArrayBuffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReaderSync/readAsArrayBuffer) + */ + readAsArrayBuffer(blob: Blob): ArrayBuffer; + /** + * The **`readAsBinaryString()`** method of the FileReaderSync interface allows to read File or Blob objects in a synchronous way into a string. + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReaderSync/readAsBinaryString) + */ + readAsBinaryString(blob: Blob): string; + /** + * The **`readAsDataURL()`** method of the FileReaderSync interface allows to read File or Blob objects in a synchronous way into a string representing a data URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReaderSync/readAsDataURL) + */ + readAsDataURL(blob: Blob): string; + /** + * The **`readAsText()`** method of the FileReaderSync interface allows to read File or Blob objects in a synchronous way into a string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileReaderSync/readAsText) + */ + readAsText(blob: Blob, encoding?: string): string; +} + +declare var FileReaderSync: { + prototype: FileReaderSync; + new(): FileReaderSync; +}; + +/** + * The **`FileSystemDirectoryHandle`** interface of the File System API provides a handle to a file system directory. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle) + */ +interface FileSystemDirectoryHandle extends FileSystemHandle { + readonly kind: "directory"; + /** + * The **`getDirectoryHandle()`** method of the within the directory handle on which the method is called. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/getDirectoryHandle) + */ + getDirectoryHandle(name: string, options?: FileSystemGetDirectoryOptions): Promise; + /** + * The **`getFileHandle()`** method of the directory the method is called. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/getFileHandle) + */ + getFileHandle(name: string, options?: FileSystemGetFileOptions): Promise; + /** + * The **`removeEntry()`** method of the directory handle contains a file or directory called the name specified. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/removeEntry) + */ + removeEntry(name: string, options?: FileSystemRemoveOptions): Promise; + /** + * The **`resolve()`** method of the directory names from the parent handle to the specified child entry, with the name of the child entry as the last array item. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemDirectoryHandle/resolve) + */ + resolve(possibleDescendant: FileSystemHandle): Promise; +} + +declare var FileSystemDirectoryHandle: { + prototype: FileSystemDirectoryHandle; + new(): FileSystemDirectoryHandle; +}; + +/** + * The **`FileSystemFileHandle`** interface of the File System API represents a handle to a file system entry. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle) + */ +interface FileSystemFileHandle extends FileSystemHandle { + readonly kind: "file"; + /** + * The **`createSyncAccessHandle()`** method of the that can be used to synchronously read from and write to a file. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle/createSyncAccessHandle) + */ + createSyncAccessHandle(): Promise; + /** + * The **`createWritable()`** method of the FileSystemFileHandle interface creates a FileSystemWritableFileStream that can be used to write to a file. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle/createWritable) + */ + createWritable(options?: FileSystemCreateWritableOptions): Promise; + /** + * The **`getFile()`** method of the If the file on disk changes or is removed after this method is called, the returned ```js-nolint getFile() ``` None. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemFileHandle/getFile) + */ + getFile(): Promise; +} + +declare var FileSystemFileHandle: { + prototype: FileSystemFileHandle; + new(): FileSystemFileHandle; +}; + +/** + * The **`FileSystemHandle`** interface of the File System API is an object which represents a file or directory entry. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle) + */ +interface FileSystemHandle { + /** + * The **`kind`** read-only property of the `'file'` if the associated entry is a file or `'directory'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/kind) + */ + readonly kind: FileSystemHandleKind; + /** + * The **`name`** read-only property of the handle. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/name) + */ + readonly name: string; + /** + * The **`isSameEntry()`** method of the ```js-nolint isSameEntry(fileSystemHandle) ``` - FileSystemHandle - : The `FileSystemHandle` to match against the handle on which the method is invoked. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemHandle/isSameEntry) + */ + isSameEntry(other: FileSystemHandle): Promise; +} + +declare var FileSystemHandle: { + prototype: FileSystemHandle; + new(): FileSystemHandle; +}; + +/** + * The **`FileSystemSyncAccessHandle`** interface of the File System API represents a synchronous handle to a file system entry. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle) + */ +interface FileSystemSyncAccessHandle { + /** + * The **`close()`** method of the ```js-nolint close() ``` None. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle/close) + */ + close(): void; + /** + * The **`flush()`** method of the Bear in mind that you only need to call this method if you need the changes committed to disk at a specific time, otherwise you can leave the underlying operating system to handle this when it sees fit, which should be OK in most cases. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle/flush) + */ + flush(): void; + /** + * The **`getSize()`** method of the ```js-nolint getSize() ``` None. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle/getSize) + */ + getSize(): number; + /** + * The **`read()`** method of the ```js-nolint read(buffer, options) ``` - `buffer` - : An ArrayBuffer or `ArrayBufferView` (such as a DataView) representing the buffer that the file content should be read into. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle/read) + */ + read(buffer: AllowSharedBufferSource, options?: FileSystemReadWriteOptions): number; + /** + * The **`truncate()`** method of the ```js-nolint truncate(newSize) ``` - `newSize` - : The number of bytes to resize the file to. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle/truncate) + */ + truncate(newSize: number): void; + /** + * The **`write()`** method of the Files within the origin private file system are not visible to end-users, therefore are not subject to the same security checks as methods running on files within the user-visible file system. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemSyncAccessHandle/write) + */ + write(buffer: AllowSharedBufferSource, options?: FileSystemReadWriteOptions): number; +} + +declare var FileSystemSyncAccessHandle: { + prototype: FileSystemSyncAccessHandle; + new(): FileSystemSyncAccessHandle; +}; + +/** + * The **`FileSystemWritableFileStream`** interface of the File System API is a WritableStream object with additional convenience methods, which operates on a single file on disk. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream) + */ +interface FileSystemWritableFileStream extends WritableStream { + /** + * The **`seek()`** method of the FileSystemWritableFileStream interface updates the current file cursor offset to the position (in bytes) specified when calling the method. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream/seek) + */ + seek(position: number): Promise; + /** + * The **`truncate()`** method of the FileSystemWritableFileStream interface resizes the file associated with the stream to the specified size in bytes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream/truncate) + */ + truncate(size: number): Promise; + /** + * The **`write()`** method of the FileSystemWritableFileStream interface writes content into the file the method is called on, at the current file cursor offset. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FileSystemWritableFileStream/write) + */ + write(data: FileSystemWriteChunkType): Promise; +} + +declare var FileSystemWritableFileStream: { + prototype: FileSystemWritableFileStream; + new(): FileSystemWritableFileStream; +}; + +/** + * The **`FontFace`** interface of the CSS Font Loading API represents a single usable font face. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace) + */ +interface FontFace { + /** + * The **`ascentOverride`** property of the FontFace interface returns and sets the ascent metric for the font, the height above the baseline that CSS uses to lay out line boxes in an inline formatting context. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/ascentOverride) + */ + ascentOverride: string; + /** + * The **`descentOverride`** property of the FontFace interface returns and sets the value of the @font-face/descent-override descriptor. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/descentOverride) + */ + descentOverride: string; + /** + * The **`display`** property of the FontFace interface determines how a font face is displayed based on whether and when it is downloaded and ready to use. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/display) + */ + display: FontDisplay; + /** + * The **`FontFace.family`** property allows the author to get or set the font family of a FontFace object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/family) + */ + family: string; + /** + * The **`featureSettings`** property of the FontFace interface retrieves or sets infrequently used font features that are not available from a font's variant properties. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/featureSettings) + */ + featureSettings: string; + /** + * The **`lineGapOverride`** property of the FontFace interface returns and sets the value of the @font-face/line-gap-override descriptor. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/lineGapOverride) + */ + lineGapOverride: string; + /** + * The **`loaded`** read-only property of the FontFace interface returns a Promise that resolves with the current `FontFace` object when the font specified in the object's constructor is done loading or rejects with a `SyntaxError`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/loaded) + */ + readonly loaded: Promise; + /** + * The **`status`** read-only property of the FontFace interface returns an enumerated value indicating the status of the font, one of `'unloaded'`, `'loading'`, `'loaded'`, or `'error'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/status) + */ + readonly status: FontFaceLoadStatus; + /** + * The **`stretch`** property of the FontFace interface retrieves or sets how the font stretches. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/stretch) + */ + stretch: string; + /** + * The **`style`** property of the FontFace interface retrieves or sets the font's style. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/style) + */ + style: string; + /** + * The **`unicodeRange`** property of the FontFace interface retrieves or sets the range of unicode code points encompassing the font. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/unicodeRange) + */ + unicodeRange: string; + /** + * The **`weight`** property of the FontFace interface retrieves or sets the weight of the font. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/weight) + */ + weight: string; + /** + * The **`load()`** method of the FontFace interface requests and loads a font whose `source` was specified as a URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFace/load) + */ + load(): Promise; +} + +declare var FontFace: { + prototype: FontFace; + new(family: string, source: string | BufferSource, descriptors?: FontFaceDescriptors): FontFace; +}; + +interface FontFaceSetEventMap { + "loading": FontFaceSetLoadEvent; + "loadingdone": FontFaceSetLoadEvent; + "loadingerror": FontFaceSetLoadEvent; +} + +/** + * The **`FontFaceSet`** interface of the CSS Font Loading API manages the loading of font-faces and querying of their download status. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet) + */ +interface FontFaceSet extends EventTarget { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loading_event) */ + onloading: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingdone_event) */ + onloadingdone: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/loadingerror_event) */ + onloadingerror: ((this: FontFaceSet, ev: FontFaceSetLoadEvent) => any) | null; + /** + * The `ready` read-only property of the FontFaceSet interface returns a Promise that resolves to the given FontFaceSet. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/ready) + */ + readonly ready: Promise; + /** + * The **`status`** read-only property of the FontFaceSet interface returns the loading state of the fonts in the set. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/status) + */ + readonly status: FontFaceSetLoadStatus; + /** + * The `check()` method of the FontFaceSet returns `true` if you can render some text using the given font specification without attempting to use any fonts in this `FontFaceSet` that are not yet fully loaded. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/check) + */ + check(font: string, text?: string): boolean; + /** + * The `load()` method of the FontFaceSet forces all the fonts given in parameters to be loaded. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSet/load) + */ + load(font: string, text?: string): Promise; + forEach(callbackfn: (value: FontFace, key: FontFace, parent: FontFaceSet) => void, thisArg?: any): void; + addEventListener(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: FontFaceSet, ev: FontFaceSetEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var FontFaceSet: { + prototype: FontFaceSet; + new(): FontFaceSet; +}; + +/** + * The **`FontFaceSetLoadEvent`** interface of the CSS Font Loading API represents events fired at a FontFaceSet after it starts loading font faces. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSetLoadEvent) + */ +interface FontFaceSetLoadEvent extends Event { + /** + * The **`fontfaces`** read-only property of the An array of FontFace instance. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FontFaceSetLoadEvent/fontfaces) + */ + readonly fontfaces: ReadonlyArray; +} + +declare var FontFaceSetLoadEvent: { + prototype: FontFaceSetLoadEvent; + new(type: string, eventInitDict?: FontFaceSetLoadEventInit): FontFaceSetLoadEvent; +}; + +interface FontFaceSource { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fonts) */ + readonly fonts: FontFaceSet; +} + +/** + * The **`FormData`** interface provides a way to construct a set of key/value pairs representing form fields and their values, which can be sent using the Window/fetch, XMLHttpRequest.send() or navigator.sendBeacon() methods. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData) + */ +interface FormData { + /** + * The **`append()`** method of the FormData interface appends a new value onto an existing key inside a `FormData` object, or adds the key if it does not already exist. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/append) + */ + append(name: string, value: string | Blob): void; + append(name: string, value: string): void; + append(name: string, blobValue: Blob, filename?: string): void; + /** + * The **`delete()`** method of the FormData interface deletes a key and its value(s) from a `FormData` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/delete) + */ + delete(name: string): void; + /** + * The **`get()`** method of the FormData interface returns the first value associated with a given key from within a `FormData` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/get) + */ + get(name: string): FormDataEntryValue | null; + /** + * The **`getAll()`** method of the FormData interface returns all the values associated with a given key from within a `FormData` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/getAll) + */ + getAll(name: string): FormDataEntryValue[]; + /** + * The **`has()`** method of the FormData interface returns whether a `FormData` object contains a certain key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/has) + */ + has(name: string): boolean; + /** + * The **`set()`** method of the FormData interface sets a new value for an existing key inside a `FormData` object, or adds the key/value if it does not already exist. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/FormData/set) + */ + set(name: string, value: string | Blob): void; + set(name: string, value: string): void; + set(name: string, blobValue: Blob, filename?: string): void; + forEach(callbackfn: (value: FormDataEntryValue, key: string, parent: FormData) => void, thisArg?: any): void; +} + +declare var FormData: { + prototype: FormData; + new(): FormData; +}; + +/** + * The **`GPUError`** interface of the WebGPU API is the base interface for errors surfaced by GPUDevice.popErrorScope and the GPUDevice.uncapturederror_event event. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GPUError) + */ +interface GPUError { + /** + * The **`message`** read-only property of the A string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/GPUError/message) + */ + readonly message: string; +} + +interface GenericTransformStream { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompressionStream/readable) */ + readonly readable: ReadableStream; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CompressionStream/writable) */ + readonly writable: WritableStream; +} + +/** + * The **`Headers`** interface of the Fetch API allows you to perform various actions on HTTP request and response headers. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers) + */ +interface Headers { + /** + * The **`append()`** method of the Headers interface appends a new value onto an existing header inside a `Headers` object, or adds the header if it does not already exist. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/append) + */ + append(name: string, value: string): void; + /** + * The **`delete()`** method of the Headers interface deletes a header from the current `Headers` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/delete) + */ + delete(name: string): void; + /** + * The **`get()`** method of the Headers interface returns a byte string of all the values of a header within a `Headers` object with a given name. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/get) + */ + get(name: string): string | null; + /** + * The **`getSetCookie()`** method of the Headers interface returns an array containing the values of all Set-Cookie headers associated with a response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/getSetCookie) + */ + getSetCookie(): string[]; + /** + * The **`has()`** method of the Headers interface returns a boolean stating whether a `Headers` object contains a certain header. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/has) + */ + has(name: string): boolean; + /** + * The **`set()`** method of the Headers interface sets a new value for an existing header inside a `Headers` object, or adds the header if it does not already exist. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Headers/set) + */ + set(name: string, value: string): void; + forEach(callbackfn: (value: string, key: string, parent: Headers) => void, thisArg?: any): void; +} + +declare var Headers: { + prototype: Headers; + new(init?: HeadersInit): Headers; +}; + +/** + * The **`IDBCursor`** interface of the IndexedDB API represents a cursor for traversing or iterating over multiple records in a database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor) + */ +interface IDBCursor { + /** + * The **`direction`** read-only property of the direction of traversal of the cursor (set using section below for possible values. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/direction) + */ + readonly direction: IDBCursorDirection; + /** + * The **`key`** read-only property of the position. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/key) + */ + readonly key: IDBValidKey; + /** + * The **`primaryKey`** read-only property of the cursor is currently being iterated or has iterated outside its range, this is set to undefined. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/primaryKey) + */ + readonly primaryKey: IDBValidKey; + /** + * The **`request`** read-only property of the IDBCursor interface returns the IDBRequest used to obtain the cursor. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/request) + */ + readonly request: IDBRequest; + /** + * The **`source`** read-only property of the null or throws an exception, even if the cursor is currently being iterated, has iterated past its end, or its transaction is not active. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/source) + */ + readonly source: IDBObjectStore | IDBIndex; + /** + * The **`advance()`** method of the IDBCursor interface sets the number of times a cursor should move its position forward. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/advance) + */ + advance(count: number): void; + /** + * The **`continue()`** method of the IDBCursor interface advances the cursor to the next position along its direction, to the item whose key matches the optional key parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/continue) + */ + continue(key?: IDBValidKey): void; + /** + * The **`continuePrimaryKey()`** method of the matches the key parameter as well as whose primary key matches the primary key parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/continuePrimaryKey) + */ + continuePrimaryKey(key: IDBValidKey, primaryKey: IDBValidKey): void; + /** + * The **`delete()`** method of the IDBCursor interface returns an IDBRequest object, and, in a separate thread, deletes the record at the cursor's position, without changing the cursor's position. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/delete) + */ + delete(): IDBRequest; + /** + * The **`update()`** method of the IDBCursor interface returns an IDBRequest object, and, in a separate thread, updates the value at the current position of the cursor in the object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursor/update) + */ + update(value: any): IDBRequest; +} + +declare var IDBCursor: { + prototype: IDBCursor; + new(): IDBCursor; +}; + +/** + * The **`IDBCursorWithValue`** interface of the IndexedDB API represents a cursor for traversing or iterating over multiple records in a database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursorWithValue) + */ +interface IDBCursorWithValue extends IDBCursor { + /** + * The **`value`** read-only property of the whatever that is. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBCursorWithValue/value) + */ + readonly value: any; +} + +declare var IDBCursorWithValue: { + prototype: IDBCursorWithValue; + new(): IDBCursorWithValue; +}; + +interface IDBDatabaseEventMap { + "abort": Event; + "close": Event; + "error": Event; + "versionchange": IDBVersionChangeEvent; +} + +/** + * The **`IDBDatabase`** interface of the IndexedDB API provides a connection to a database; you can use an `IDBDatabase` object to open a transaction on your database then create, manipulate, and delete objects (data) in that database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase) + */ +interface IDBDatabase extends EventTarget { + /** + * The **`name`** read-only property of the `IDBDatabase` interface is a string that contains the name of the connected database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/name) + */ + readonly name: string; + /** + * The **`objectStoreNames`** read-only property of the list of the names of the object stores currently in the connected database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/objectStoreNames) + */ + readonly objectStoreNames: DOMStringList; + onabort: ((this: IDBDatabase, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/close_event) */ + onclose: ((this: IDBDatabase, ev: Event) => any) | null; + onerror: ((this: IDBDatabase, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/versionchange_event) */ + onversionchange: ((this: IDBDatabase, ev: IDBVersionChangeEvent) => any) | null; + /** + * The **`version`** property of the IDBDatabase interface is a 64-bit integer that contains the version of the connected database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/version) + */ + readonly version: number; + /** + * The **`close()`** method of the IDBDatabase interface returns immediately and closes the connection in a separate thread. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/close) + */ + close(): void; + /** + * The **`createObjectStore()`** method of the The method takes the name of the store as well as a parameter object that lets you define important optional properties. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/createObjectStore) + */ + createObjectStore(name: string, options?: IDBObjectStoreParameters): IDBObjectStore; + /** + * The **`deleteObjectStore()`** method of the the connected database, along with any indexes that reference it. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/deleteObjectStore) + */ + deleteObjectStore(name: string): void; + /** + * The **`transaction`** method of the IDBDatabase interface immediately returns a transaction object (IDBTransaction) containing the IDBTransaction.objectStore method, which you can use to access your object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBDatabase/transaction) + */ + transaction(storeNames: string | string[], mode?: IDBTransactionMode, options?: IDBTransactionOptions): IDBTransaction; + addEventListener(type: K, listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: IDBDatabase, ev: IDBDatabaseEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var IDBDatabase: { + prototype: IDBDatabase; + new(): IDBDatabase; +}; + +/** + * The **`IDBFactory`** interface of the IndexedDB API lets applications asynchronously access the indexed databases. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory) + */ +interface IDBFactory { + /** + * The **`cmp()`** method of the IDBFactory interface compares two values as keys to determine equality and ordering for IndexedDB operations, such as storing and iterating. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/cmp) + */ + cmp(first: any, second: any): number; + /** + * The **`databases`** method of the IDBFactory interface returns a Promise that fulfills with an array of objects containing the name and version of all the available databases. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/databases) + */ + databases(): Promise; + /** + * The **`deleteDatabase()`** method of the returns an IDBOpenDBRequest object immediately, and performs the deletion operation asynchronously. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/deleteDatabase) + */ + deleteDatabase(name: string): IDBOpenDBRequest; + /** + * The **`open()`** method of the IDBFactory interface requests opening a connection to a database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBFactory/open) + */ + open(name: string, version?: number): IDBOpenDBRequest; +} + +declare var IDBFactory: { + prototype: IDBFactory; + new(): IDBFactory; +}; + +/** + * `IDBIndex` interface of the IndexedDB API provides asynchronous access to an index in a database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex) + */ +interface IDBIndex { + /** + * The **`keyPath`** property of the IDBIndex interface returns the key path of the current index. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/keyPath) + */ + readonly keyPath: string | string[]; + /** + * The **`multiEntry`** read-only property of the behaves when the result of evaluating the index's key path yields an array. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/multiEntry) + */ + readonly multiEntry: boolean; + /** + * The **`name`** property of the IDBIndex interface contains a string which names the index. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/name) + */ + name: string; + /** + * The **`objectStore`** property of the IDBIndex interface returns the object store referenced by the current index. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/objectStore) + */ + readonly objectStore: IDBObjectStore; + /** + * The **`unique`** read-only property returns a boolean that states whether the index allows duplicate keys. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/unique) + */ + readonly unique: boolean; + /** + * The **`count()`** method of the IDBIndex interface returns an IDBRequest object, and in a separate thread, returns the number of records within a key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/count) + */ + count(query?: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`get()`** method of the IDBIndex interface returns an IDBRequest object, and, in a separate thread, finds either the value in the referenced object store that corresponds to the given key or the first corresponding value, if `key` is set to an If a value is found, then a structured clone of it is created and set as the `result` of the request object: this returns the record the key is associated with. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/get) + */ + get(query: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`getAll()`** method of the IDBIndex interface retrieves all objects that are inside the index. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/getAll) + */ + getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest; + /** + * The **`getAllKeys()`** method of the IDBIndex interface asynchronously retrieves the primary keys of all objects inside the index, setting them as the `result` of the request object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/getAllKeys) + */ + getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest; + /** + * The **`getKey()`** method of the IDBIndex interface returns an IDBRequest object, and, in a separate thread, finds either the primary key that corresponds to the given key in this index or the first corresponding primary key, if `key` is set to an If a primary key is found, it is set as the `result` of the request object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/getKey) + */ + getKey(query: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`openCursor()`** method of the IDBIndex interface returns an IDBRequest object, and, in a separate thread, creates a cursor over the specified key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/openCursor) + */ + openCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest; + /** + * The **`openKeyCursor()`** method of the a separate thread, creates a cursor over the specified key range, as arranged by this index. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBIndex/openKeyCursor) + */ + openKeyCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest; +} + +declare var IDBIndex: { + prototype: IDBIndex; + new(): IDBIndex; +}; + +/** + * The **`IDBKeyRange`** interface of the IndexedDB API represents a continuous interval over some data type that is used for keys. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange) + */ +interface IDBKeyRange { + /** + * The **`lower`** read-only property of the The lower bound of the key range (can be any type.) The following example illustrates how you'd use a key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/lower) + */ + readonly lower: any; + /** + * The **`lowerOpen`** read-only property of the lower-bound value is included in the key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/lowerOpen) + */ + readonly lowerOpen: boolean; + /** + * The **`upper`** read-only property of the The upper bound of the key range (can be any type.) The following example illustrates how you'd use a key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/upper) + */ + readonly upper: any; + /** + * The **`upperOpen`** read-only property of the upper-bound value is included in the key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/upperOpen) + */ + readonly upperOpen: boolean; + /** + * The `includes()` method of the IDBKeyRange interface returns a boolean indicating whether a specified key is inside the key range. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/includes) + */ + includes(key: any): boolean; +} + +declare var IDBKeyRange: { + prototype: IDBKeyRange; + new(): IDBKeyRange; + /** + * The **`bound()`** static method of the IDBKeyRange interface creates a new key range with the specified upper and lower bounds. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/bound_static) + */ + bound(lower: any, upper: any, lowerOpen?: boolean, upperOpen?: boolean): IDBKeyRange; + /** + * The **`lowerBound()`** static method of the By default, it includes the lower endpoint value and is closed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/lowerBound_static) + */ + lowerBound(lower: any, open?: boolean): IDBKeyRange; + /** + * The **`only()`** static method of the IDBKeyRange interface creates a new key range containing a single value. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/only_static) + */ + only(value: any): IDBKeyRange; + /** + * The **`upperBound()`** static method of the it includes the upper endpoint value and is closed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBKeyRange/upperBound_static) + */ + upperBound(upper: any, open?: boolean): IDBKeyRange; +}; + +/** + * The **`IDBObjectStore`** interface of the IndexedDB API represents an object store in a database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore) + */ +interface IDBObjectStore { + /** + * The **`autoIncrement`** read-only property of the for this object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/autoIncrement) + */ + readonly autoIncrement: boolean; + /** + * The **`indexNames`** read-only property of the in this object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/indexNames) + */ + readonly indexNames: DOMStringList; + /** + * The **`keyPath`** read-only property of the If this property is null, the application must provide a key for each modification operation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/keyPath) + */ + readonly keyPath: string | string[] | null; + /** + * The **`name`** property of the IDBObjectStore interface indicates the name of this object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/name) + */ + name: string; + /** + * The **`transaction`** read-only property of the object store belongs. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/transaction) + */ + readonly transaction: IDBTransaction; + /** + * The **`add()`** method of the IDBObjectStore interface returns an IDBRequest object, and, in a separate thread, creates a structured clone of the value, and stores the cloned value in the object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/add) + */ + add(value: any, key?: IDBValidKey): IDBRequest; + /** + * The **`clear()`** method of the IDBObjectStore interface creates and immediately returns an IDBRequest object, and clears this object store in a separate thread. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/clear) + */ + clear(): IDBRequest; + /** + * The **`count()`** method of the IDBObjectStore interface returns an IDBRequest object, and, in a separate thread, returns the total number of records that match the provided key or of records in the store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/count) + */ + count(query?: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`createIndex()`** method of the field/column defining a new data point for each database record to contain. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/createIndex) + */ + createIndex(name: string, keyPath: string | string[], options?: IDBIndexParameters): IDBIndex; + /** + * The **`delete()`** method of the and, in a separate thread, deletes the specified record or records. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/delete) + */ + delete(query: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`deleteIndex()`** method of the the connected database, used during a version upgrade. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/deleteIndex) + */ + deleteIndex(name: string): void; + /** + * The **`get()`** method of the IDBObjectStore interface returns an IDBRequest object, and, in a separate thread, returns the object selected by the specified key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/get) + */ + get(query: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`getAll()`** method of the containing all objects in the object store matching the specified parameter or all objects in the store if no parameters are given. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/getAll) + */ + getAll(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest; + /** + * The `getAllKeys()` method of the IDBObjectStore interface returns an IDBRequest object retrieves record keys for all objects in the object store matching the specified parameter or all objects in the store if no parameters are given. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/getAllKeys) + */ + getAllKeys(query?: IDBValidKey | IDBKeyRange | null, count?: number): IDBRequest; + /** + * The **`getKey()`** method of the and, in a separate thread, returns the key selected by the specified query. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/getKey) + */ + getKey(query: IDBValidKey | IDBKeyRange): IDBRequest; + /** + * The **`index()`** method of the IDBObjectStore interface opens a named index in the current object store, after which it can be used to, for example, return a series of records sorted by that index using a cursor. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/index) + */ + index(name: string): IDBIndex; + /** + * The **`openCursor()`** method of the and, in a separate thread, returns a new IDBCursorWithValue object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/openCursor) + */ + openCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest; + /** + * The **`openKeyCursor()`** method of the whose result will be set to an IDBCursor that can be used to iterate through matching results. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/openKeyCursor) + */ + openKeyCursor(query?: IDBValidKey | IDBKeyRange | null, direction?: IDBCursorDirection): IDBRequest; + /** + * The **`put()`** method of the IDBObjectStore interface updates a given record in a database, or inserts a new record if the given item does not already exist. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBObjectStore/put) + */ + put(value: any, key?: IDBValidKey): IDBRequest; +} + +declare var IDBObjectStore: { + prototype: IDBObjectStore; + new(): IDBObjectStore; +}; + +interface IDBOpenDBRequestEventMap extends IDBRequestEventMap { + "blocked": IDBVersionChangeEvent; + "upgradeneeded": IDBVersionChangeEvent; +} + +/** + * The **`IDBOpenDBRequest`** interface of the IndexedDB API provides access to the results of requests to open or delete databases (performed using IDBFactory.open and IDBFactory.deleteDatabase), using specific event handler attributes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBOpenDBRequest) + */ +interface IDBOpenDBRequest extends IDBRequest { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBOpenDBRequest/blocked_event) */ + onblocked: ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBOpenDBRequest/upgradeneeded_event) */ + onupgradeneeded: ((this: IDBOpenDBRequest, ev: IDBVersionChangeEvent) => any) | null; + addEventListener(type: K, listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: IDBOpenDBRequest, ev: IDBOpenDBRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var IDBOpenDBRequest: { + prototype: IDBOpenDBRequest; + new(): IDBOpenDBRequest; +}; + +interface IDBRequestEventMap { + "error": Event; + "success": Event; +} + +/** + * The **`IDBRequest`** interface of the IndexedDB API provides access to results of asynchronous requests to databases and database objects using event handler attributes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest) + */ +interface IDBRequest extends EventTarget { + /** + * The **`error`** read-only property of the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/error) + */ + readonly error: DOMException | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/error_event) */ + onerror: ((this: IDBRequest, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/success_event) */ + onsuccess: ((this: IDBRequest, ev: Event) => any) | null; + /** + * The **`readyState`** read-only property of the Every request starts in the `pending` state. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/readyState) + */ + readonly readyState: IDBRequestReadyState; + /** + * The **`result`** read-only property of the any - `InvalidStateError` DOMException - : Thrown when attempting to access the property if the request is not completed, and therefore the result is not available. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/result) + */ + readonly result: T; + /** + * The **`source`** read-only property of the Index or an object store. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/source) + */ + readonly source: IDBObjectStore | IDBIndex | IDBCursor; + /** + * The **`transaction`** read-only property of the IDBRequest interface returns the transaction for the request, that is, the transaction the request is being made inside. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBRequest/transaction) + */ + readonly transaction: IDBTransaction | null; + addEventListener(type: K, listener: (this: IDBRequest, ev: IDBRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: IDBRequest, ev: IDBRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var IDBRequest: { + prototype: IDBRequest; + new(): IDBRequest; +}; + +interface IDBTransactionEventMap { + "abort": Event; + "complete": Event; + "error": Event; +} + +/** + * The **`IDBTransaction`** interface of the IndexedDB API provides a static, asynchronous transaction on a database using event handler attributes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction) + */ +interface IDBTransaction extends EventTarget { + /** + * The **`db`** read-only property of the IDBTransaction interface returns the database connection with which this transaction is associated. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/db) + */ + readonly db: IDBDatabase; + /** + * The **`durability`** read-only property of the IDBTransaction interface returns the durability hint the transaction was created with. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/durability) + */ + readonly durability: IDBTransactionDurability; + /** + * The **`IDBTransaction.error`** property of the IDBTransaction interface returns the type of error when there is an unsuccessful transaction. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/error) + */ + readonly error: DOMException | null; + /** + * The **`mode`** read-only property of the data in the object stores in the scope of the transaction (i.e., is the mode to be read-only, or do you want to write to the object stores?) The default value is `readonly`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/mode) + */ + readonly mode: IDBTransactionMode; + /** + * The **`objectStoreNames`** read-only property of the of IDBObjectStore objects. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/objectStoreNames) + */ + readonly objectStoreNames: DOMStringList; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/abort_event) */ + onabort: ((this: IDBTransaction, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/complete_event) */ + oncomplete: ((this: IDBTransaction, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/error_event) */ + onerror: ((this: IDBTransaction, ev: Event) => any) | null; + /** + * The **`abort()`** method of the IDBTransaction interface rolls back all the changes to objects in the database associated with this transaction. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/abort) + */ + abort(): void; + /** + * The **`commit()`** method of the IDBTransaction interface commits the transaction if it is called on an active transaction. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/commit) + */ + commit(): void; + /** + * The **`objectStore()`** method of the added to the scope of this transaction. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBTransaction/objectStore) + */ + objectStore(name: string): IDBObjectStore; + addEventListener(type: K, listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: IDBTransaction, ev: IDBTransactionEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var IDBTransaction: { + prototype: IDBTransaction; + new(): IDBTransaction; +}; + +/** + * The **`IDBVersionChangeEvent`** interface of the IndexedDB API indicates that the version of the database has changed, as the result of an IDBOpenDBRequest.upgradeneeded_event event handler function. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBVersionChangeEvent) + */ +interface IDBVersionChangeEvent extends Event { + /** + * The **`newVersion`** read-only property of the database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBVersionChangeEvent/newVersion) + */ + readonly newVersion: number | null; + /** + * The **`oldVersion`** read-only property of the database. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/IDBVersionChangeEvent/oldVersion) + */ + readonly oldVersion: number; +} + +declare var IDBVersionChangeEvent: { + prototype: IDBVersionChangeEvent; + new(type: string, eventInitDict?: IDBVersionChangeEventInit): IDBVersionChangeEvent; +}; + +/** + * The **`ImageBitmap`** interface represents a bitmap image which can be drawn to a canvas without undue latency. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageBitmap) + */ +interface ImageBitmap { + /** + * The **`ImageBitmap.height`** read-only property returns the ImageBitmap object's height in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageBitmap/height) + */ + readonly height: number; + /** + * The **`ImageBitmap.width`** read-only property returns the ImageBitmap object's width in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageBitmap/width) + */ + readonly width: number; + /** + * The **`ImageBitmap.close()`** method disposes of all graphical resources associated with an `ImageBitmap`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageBitmap/close) + */ + close(): void; +} + +declare var ImageBitmap: { + prototype: ImageBitmap; + new(): ImageBitmap; +}; + +/** + * The **`ImageBitmapRenderingContext`** interface is a canvas rendering context that provides the functionality to replace the canvas's contents with the given ImageBitmap. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageBitmapRenderingContext) + */ +interface ImageBitmapRenderingContext { + /** + * The **`ImageBitmapRenderingContext.transferFromImageBitmap()`** method displays the given ImageBitmap in the canvas associated with this rendering context. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageBitmapRenderingContext/transferFromImageBitmap) + */ + transferFromImageBitmap(bitmap: ImageBitmap | null): void; +} + +declare var ImageBitmapRenderingContext: { + prototype: ImageBitmapRenderingContext; + new(): ImageBitmapRenderingContext; +}; + +/** + * The **`ImageData`** interface represents the underlying pixel data of an area of a canvas element. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageData) + */ +interface ImageData { + /** + * The read-only **`ImageData.colorSpace`** property is a string indicating the color space of the image data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageData/colorSpace) + */ + readonly colorSpace: PredefinedColorSpace; + /** + * The readonly **`ImageData.data`** property returns a pixel data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageData/data) + */ + readonly data: ImageDataArray; + /** + * The readonly **`ImageData.height`** property returns the number of rows in the ImageData object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageData/height) + */ + readonly height: number; + /** + * The readonly **`ImageData.width`** property returns the number of pixels per row in the ImageData object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageData/width) + */ + readonly width: number; +} + +declare var ImageData: { + prototype: ImageData; + new(sw: number, sh: number, settings?: ImageDataSettings): ImageData; + new(data: ImageDataArray, sw: number, sh?: number, settings?: ImageDataSettings): ImageData; +}; + +/** + * The **`ImageDecoder`** interface of the WebCodecs API provides a way to unpack and decode encoded image data. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder) + */ +interface ImageDecoder { + /** + * The **`complete`** read-only property of the ImageDecoder interface returns true if encoded data has completed buffering. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/complete) + */ + readonly complete: boolean; + /** + * The **`completed`** read-only property of the ImageDecoder interface returns a promise that resolves once encoded data has finished buffering. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/completed) + */ + readonly completed: Promise; + /** + * The **`tracks`** read-only property of the ImageDecoder interface returns a list of the tracks in the encoded image data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/tracks) + */ + readonly tracks: ImageTrackList; + /** + * The **`type`** read-only property of the ImageDecoder interface reflects the MIME type configured during construction. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/type) + */ + readonly type: string; + /** + * The **`close()`** method of the ImageDecoder interface ends all pending work and releases system resources. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/close) + */ + close(): void; + /** + * The **`decode()`** method of the ImageDecoder interface enqueues a control message to decode the frame of an image. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/decode) + */ + decode(options?: ImageDecodeOptions): Promise; + /** + * The **`reset()`** method of the ImageDecoder interface aborts all pending `decode()` operations; rejecting all pending promises. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/reset) + */ + reset(): void; +} + +declare var ImageDecoder: { + prototype: ImageDecoder; + new(init: ImageDecoderInit): ImageDecoder; + /** + * The **`ImageDecoder.isTypeSupported()`** static method checks if a given MIME type can be decoded by the user agent. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageDecoder/isTypeSupported_static) + */ + isTypeSupported(type: string): Promise; +}; + +/** + * The **`ImageTrack`** interface of the WebCodecs API represents an individual image track. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrack) + */ +interface ImageTrack { + /** + * The **`animated`** property of the ImageTrack interface returns `true` if the track is animated and therefore has multiple frames. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrack/animated) + */ + readonly animated: boolean; + /** + * The **`frameCount`** property of the ImageTrack interface returns the number of frames in the track. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrack/frameCount) + */ + readonly frameCount: number; + /** + * The **`repetitionCount`** property of the ImageTrack interface returns the number of repetitions of this track. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrack/repetitionCount) + */ + readonly repetitionCount: number; + /** + * The **`selected`** property of the ImageTrack interface returns `true` if the track is selected for decoding. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrack/selected) + */ + selected: boolean; +} + +declare var ImageTrack: { + prototype: ImageTrack; + new(): ImageTrack; +}; + +/** + * The **`ImageTrackList`** interface of the WebCodecs API represents a list of image tracks. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrackList) + */ +interface ImageTrackList { + /** + * The **`length`** property of the ImageTrackList interface returns the length of the `ImageTrackList`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrackList/length) + */ + readonly length: number; + /** + * The **`ready`** property of the ImageTrackList interface returns a Promise that resolves when the `ImageTrackList` is populated with ImageTrack. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrackList/ready) + */ + readonly ready: Promise; + /** + * The **`selectedIndex`** property of the ImageTrackList interface returns the `index` of the selected track. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrackList/selectedIndex) + */ + readonly selectedIndex: number; + /** + * The **`selectedTrack`** property of the ImageTrackList interface returns an ImageTrack object representing the currently selected track. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ImageTrackList/selectedTrack) + */ + readonly selectedTrack: ImageTrack | null; + [index: number]: ImageTrack; +} + +declare var ImageTrackList: { + prototype: ImageTrackList; + new(): ImageTrackList; +}; + +interface ImportMeta { + url: string; + resolve(specifier: string): string; +} + +/** + * The **`KHR_parallel_shader_compile`** extension is part of the WebGL API and enables a non-blocking poll operation, so that compile/link status availability (`COMPLETION_STATUS_KHR`) can be queried without potentially incurring stalls. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/KHR_parallel_shader_compile) + */ +interface KHR_parallel_shader_compile { + readonly COMPLETION_STATUS_KHR: 0x91B1; +} + +/** + * The **`Lock`** interface of the Web Locks API provides the name and mode of a lock. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Lock) + */ +interface Lock { + /** + * The **`mode`** read-only property of the Lock interface returns the access mode passed to LockManager.request() when the lock was requested. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Lock/mode) + */ + readonly mode: LockMode; + /** + * The **`name`** read-only property of the Lock interface returns the _name_ passed to The name of a lock is passed by script when the lock is requested. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Lock/name) + */ + readonly name: string; +} + +declare var Lock: { + prototype: Lock; + new(): Lock; +}; + +/** + * The **`LockManager`** interface of the Web Locks API provides methods for requesting a new Lock object and querying for an existing `Lock` object. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/LockManager) + */ +interface LockManager { + /** + * The **`query()`** method of the LockManager interface returns a Promise that resolves with an object containing information about held and pending locks. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/LockManager/query) + */ + query(): Promise; + /** + * The **`request()`** method of the LockManager interface requests a Lock object with parameters specifying its name and characteristics. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/LockManager/request) + */ + request(name: string, callback: LockGrantedCallback): Promise; + request(name: string, options: LockOptions, callback: LockGrantedCallback): Promise; +} + +declare var LockManager: { + prototype: LockManager; + new(): LockManager; +}; + +/** + * The **`MediaCapabilities`** interface of the Media Capabilities API provides information about the decoding abilities of the device, system and browser. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaCapabilities) + */ +interface MediaCapabilities { + /** + * The **`decodingInfo()`** method of the MediaCapabilities interface returns a promise that fulfils with information about how well the user agent can decode/display media with a given configuration. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaCapabilities/decodingInfo) + */ + decodingInfo(configuration: MediaDecodingConfiguration): Promise; + /** + * The **`encodingInfo()`** method of the MediaCapabilities interface returns a promise that fulfills with the tested media configuration's capabilities for encoding media. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaCapabilities/encodingInfo) + */ + encodingInfo(configuration: MediaEncodingConfiguration): Promise; +} + +declare var MediaCapabilities: { + prototype: MediaCapabilities; + new(): MediaCapabilities; +}; + +/** + * The **`MediaSourceHandle`** interface of the Media Source Extensions API is a proxy for a MediaSource that can be transferred from a dedicated worker back to the main thread and attached to a media element via its HTMLMediaElement.srcObject property. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaSourceHandle) + */ +interface MediaSourceHandle { +} + +declare var MediaSourceHandle: { + prototype: MediaSourceHandle; + new(): MediaSourceHandle; +}; + +/** + * The **`MediaStreamTrackProcessor`** interface of the Insertable Streams for MediaStreamTrack API consumes a video MediaStreamTrack object's source and generates a stream of VideoFrame objects. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaStreamTrackProcessor) + */ +interface MediaStreamTrackProcessor { + /** + * The **`readable`** property of the MediaStreamTrackProcessor interface returns a ReadableStream of VideoFrames. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MediaStreamTrackProcessor/readable) + */ + readonly readable: ReadableStream; +} + +declare var MediaStreamTrackProcessor: { + prototype: MediaStreamTrackProcessor; + new(init: MediaStreamTrackProcessorInit): MediaStreamTrackProcessor; +}; + +/** + * The **`MessageChannel`** interface of the Channel Messaging API allows us to create a new message channel and send data through it via its two MessagePort properties. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageChannel) + */ +interface MessageChannel { + /** + * The **`port1`** read-only property of the the port attached to the context that originated the channel. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageChannel/port1) + */ + readonly port1: MessagePort; + /** + * The **`port2`** read-only property of the the port attached to the context at the other end of the channel, which the message is initially sent to. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageChannel/port2) + */ + readonly port2: MessagePort; +} + +declare var MessageChannel: { + prototype: MessageChannel; + new(): MessageChannel; +}; + +/** + * The **`MessageEvent`** interface represents a message received by a target object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent) + */ +interface MessageEvent extends Event { + /** + * The **`data`** read-only property of the The data sent by the message emitter; this can be any data type, depending on what originated this event. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/data) + */ + readonly data: T; + /** + * The **`lastEventId`** read-only property of the unique ID for the event. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/lastEventId) + */ + readonly lastEventId: string; + /** + * The **`origin`** read-only property of the origin of the message emitter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/origin) + */ + readonly origin: string; + /** + * The **`ports`** read-only property of the containing all MessagePort objects sent with the message, in order. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/ports) + */ + readonly ports: ReadonlyArray; + /** + * The **`source`** read-only property of the a WindowProxy, MessagePort, or a `MessageEventSource` (which can be a WindowProxy, message emitter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessageEvent/source) + */ + readonly source: MessageEventSource | null; + /** @deprecated */ + initMessageEvent(type: string, bubbles?: boolean, cancelable?: boolean, data?: any, origin?: string, lastEventId?: string, source?: MessageEventSource | null, ports?: MessagePort[]): void; +} + +declare var MessageEvent: { + prototype: MessageEvent; + new(type: string, eventInitDict?: MessageEventInit): MessageEvent; +}; + +interface MessageEventTargetEventMap { + "message": MessageEvent; + "messageerror": MessageEvent; +} + +interface MessageEventTarget { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/message_event) */ + onmessage: ((this: T, ev: MessageEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/messageerror_event) */ + onmessageerror: ((this: T, ev: MessageEvent) => any) | null; + addEventListener(type: K, listener: (this: T, ev: MessageEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: T, ev: MessageEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +interface MessagePortEventMap extends MessageEventTargetEventMap { + "message": MessageEvent; + "messageerror": MessageEvent; +} + +/** + * The **`MessagePort`** interface of the Channel Messaging API represents one of the two ports of a MessageChannel, allowing messages to be sent from one port and listening out for them arriving at the other. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessagePort) + */ +interface MessagePort extends EventTarget, MessageEventTarget { + /** + * The **`close()`** method of the MessagePort interface disconnects the port, so it is no longer active. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessagePort/close) + */ + close(): void; + /** + * The **`postMessage()`** method of the transfers ownership of objects to other browsing contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessagePort/postMessage) + */ + postMessage(message: any, transfer: Transferable[]): void; + postMessage(message: any, options?: StructuredSerializeOptions): void; + /** + * The **`start()`** method of the MessagePort interface starts the sending of messages queued on the port. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/MessagePort/start) + */ + start(): void; + addEventListener(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: MessagePort, ev: MessagePortEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var MessagePort: { + prototype: MessagePort; + new(): MessagePort; +}; + +/** + * The **`NavigationPreloadManager`** interface of the Service Worker API provides methods for managing the preloading of resources in parallel with service worker bootup. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NavigationPreloadManager) + */ +interface NavigationPreloadManager { + /** + * The **`disable()`** method of the NavigationPreloadManager interface halts the automatic preloading of service-worker-managed resources previously started using NavigationPreloadManager.enable() It returns a promise that resolves with `undefined`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NavigationPreloadManager/disable) + */ + disable(): Promise; + /** + * The **`enable()`** method of the NavigationPreloadManager interface is used to enable preloading of resources managed by the service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NavigationPreloadManager/enable) + */ + enable(): Promise; + /** + * The **`getState()`** method of the NavigationPreloadManager interface returns a Promise that resolves to an object with properties that indicate whether preload is enabled and what value will be sent in the Service-Worker-Navigation-Preload HTTP header. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NavigationPreloadManager/getState) + */ + getState(): Promise; + /** + * The **`setHeaderValue()`** method of the NavigationPreloadManager interface sets the value of the Service-Worker-Navigation-Preload header that will be sent with requests resulting from a Window/fetch operation made during service worker navigation preloading. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NavigationPreloadManager/setHeaderValue) + */ + setHeaderValue(value: string): Promise; +} + +declare var NavigationPreloadManager: { + prototype: NavigationPreloadManager; + new(): NavigationPreloadManager; +}; + +/** Available only in secure contexts. */ +interface NavigatorBadge { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/clearAppBadge) */ + clearAppBadge(): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/setAppBadge) */ + setAppBadge(contents?: number): Promise; +} + +interface NavigatorConcurrentHardware { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/hardwareConcurrency) */ + readonly hardwareConcurrency: number; +} + +interface NavigatorID { + /** + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/appCodeName) + */ + readonly appCodeName: string; + /** + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/appName) + */ + readonly appName: string; + /** + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/appVersion) + */ + readonly appVersion: string; + /** + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/platform) + */ + readonly platform: string; + /** + * @deprecated + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/product) + */ + readonly product: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/userAgent) */ + readonly userAgent: string; +} + +interface NavigatorLanguage { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/language) */ + readonly language: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/languages) */ + readonly languages: ReadonlyArray; +} + +/** Available only in secure contexts. */ +interface NavigatorLocks { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/locks) */ + readonly locks: LockManager; +} + +interface NavigatorOnLine { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/onLine) */ + readonly onLine: boolean; +} + +/** Available only in secure contexts. */ +interface NavigatorStorage { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Navigator/storage) */ + readonly storage: StorageManager; +} + +interface NotificationEventMap { + "click": Event; + "close": Event; + "error": Event; + "show": Event; +} + +/** + * The **`Notification`** interface of the Notifications API is used to configure and display desktop notifications to the user. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification) + */ +interface Notification extends EventTarget { + /** + * The **`badge`** read-only property of the Notification interface returns a string containing the URL of an image to represent the notification when there is not enough space to display the notification itself such as for example, the Android Notification Bar. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/badge) + */ + readonly badge: string; + /** + * The **`body`** read-only property of the specified in the `body` option of the A string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/body) + */ + readonly body: string; + /** + * The **`data`** read-only property of the data, as specified in the `data` option of the The notification's data can be any arbitrary data that you want associated with the notification. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/data) + */ + readonly data: any; + /** + * The **`dir`** read-only property of the Notification interface indicates the text direction of the notification, as specified in the `dir` option of the Notification.Notification constructor. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/dir) + */ + readonly dir: NotificationDirection; + /** + * The **`icon`** read-only property of the part of the notification, as specified in the `icon` option of the A string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/icon) + */ + readonly icon: string; + /** + * The **`lang`** read-only property of the as specified in the `lang` option of the The language itself is specified using a string representing a language tag according to MISSING: RFC(5646, 'Tags for Identifying Languages (also known as BCP 47)')]. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/lang) + */ + readonly lang: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/click_event) */ + onclick: ((this: Notification, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/close_event) */ + onclose: ((this: Notification, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/error_event) */ + onerror: ((this: Notification, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/show_event) */ + onshow: ((this: Notification, ev: Event) => any) | null; + /** + * The **`requireInteraction`** read-only property of the Notification interface returns a boolean value indicating that a notification should remain active until the user clicks or dismisses it, rather than closing automatically. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/requireInteraction) + */ + readonly requireInteraction: boolean; + /** + * The **`silent`** read-only property of the silent, i.e., no sounds or vibrations should be issued regardless of the device settings. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/silent) + */ + readonly silent: boolean | null; + /** + * The **`tag`** read-only property of the as specified in the `tag` option of the The idea of notification tags is that more than one notification can share the same tag, linking them together. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/tag) + */ + readonly tag: string; + /** + * The **`title`** read-only property of the specified in the `title` parameter of the A string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/title) + */ + readonly title: string; + /** + * The **`close()`** method of the Notification interface is used to close/remove a previously displayed notification. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/close) + */ + close(): void; + addEventListener(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: Notification, ev: NotificationEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var Notification: { + prototype: Notification; + new(title: string, options?: NotificationOptions): Notification; + /** + * The **`permission`** read-only static property of the Notification interface indicates the current permission granted by the user for the current origin to display web notifications. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Notification/permission_static) + */ + readonly permission: NotificationPermission; +}; + +/** + * The **`NotificationEvent`** interface of the Notifications API represents a notification event dispatched on the ServiceWorkerGlobalScope of a ServiceWorker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NotificationEvent) + */ +interface NotificationEvent extends ExtendableEvent { + /** + * The **`action`** read-only property of the NotificationEvent interface returns the string ID of the notification button the user clicked. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NotificationEvent/action) + */ + readonly action: string; + /** + * The **`notification`** read-only property of the NotificationEvent interface returns the instance of the Notification that was clicked to fire the event. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/NotificationEvent/notification) + */ + readonly notification: Notification; +} + +declare var NotificationEvent: { + prototype: NotificationEvent; + new(type: string, eventInitDict: NotificationEventInit): NotificationEvent; +}; + +/** + * The **`OES_draw_buffers_indexed`** extension is part of the WebGL API and enables the use of different blend options when writing to multiple color buffers simultaneously. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed) + */ +interface OES_draw_buffers_indexed { + /** + * The `blendEquationSeparateiOES()` method of the OES_draw_buffers_indexed WebGL extension sets the RGB and alpha blend equations separately for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/blendEquationSeparateiOES) + */ + blendEquationSeparateiOES(buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum): void; + /** + * The `blendEquationiOES()` method of the `OES_draw_buffers_indexed` WebGL extension sets both the RGB blend and alpha blend equations for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/blendEquationiOES) + */ + blendEquationiOES(buf: GLuint, mode: GLenum): void; + /** + * The `blendFuncSeparateiOES()` method of the OES_draw_buffers_indexed WebGL extension defines which function is used when blending pixels for RGB and alpha components separately for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/blendFuncSeparateiOES) + */ + blendFuncSeparateiOES(buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void; + /** + * The `blendFunciOES()` method of the OES_draw_buffers_indexed WebGL extension defines which function is used when blending pixels for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/blendFunciOES) + */ + blendFunciOES(buf: GLuint, src: GLenum, dst: GLenum): void; + /** + * The `colorMaskiOES()` method of the OES_draw_buffers_indexed WebGL extension sets which color components to enable or to disable when drawing or rendering for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/colorMaskiOES) + */ + colorMaskiOES(buf: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean): void; + /** + * The `disableiOES()` method of the OES_draw_buffers_indexed WebGL extension enables blending for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/disableiOES) + */ + disableiOES(target: GLenum, index: GLuint): void; + /** + * The `enableiOES()` method of the OES_draw_buffers_indexed WebGL extension enables blending for a particular draw buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_draw_buffers_indexed/enableiOES) + */ + enableiOES(target: GLenum, index: GLuint): void; +} + +/** + * The **`OES_element_index_uint`** extension is part of the WebGL API and adds support for `gl.UNSIGNED_INT` types to WebGLRenderingContext.drawElements(). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_element_index_uint) + */ +interface OES_element_index_uint { +} + +/** + * The `OES_fbo_render_mipmap` extension is part of the WebGL API and makes it possible to attach any level of a texture to a framebuffer object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_fbo_render_mipmap) + */ +interface OES_fbo_render_mipmap { +} + +/** + * The **`OES_standard_derivatives`** extension is part of the WebGL API and adds the GLSL derivative functions `dFdx`, `dFdy`, and `fwidth`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_standard_derivatives) + */ +interface OES_standard_derivatives { + readonly FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8B8B; +} + +/** + * The **`OES_texture_float`** extension is part of the WebGL API and exposes floating-point pixel types for textures. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_texture_float) + */ +interface OES_texture_float { +} + +/** + * The **`OES_texture_float_linear`** extension is part of the WebGL API and allows linear filtering with floating-point pixel types for textures. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_texture_float_linear) + */ +interface OES_texture_float_linear { +} + +/** + * The **`OES_texture_half_float`** extension is part of the WebGL API and adds texture formats with 16- (aka half float) and 32-bit floating-point components. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_texture_half_float) + */ +interface OES_texture_half_float { + readonly HALF_FLOAT_OES: 0x8D61; +} + +/** + * The **`OES_texture_half_float_linear`** extension is part of the WebGL API and allows linear filtering with half floating-point pixel types for textures. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_texture_half_float_linear) + */ +interface OES_texture_half_float_linear { +} + +/** + * The **OES_vertex_array_object** extension is part of the WebGL API and provides vertex array objects (VAOs) which encapsulate vertex array states. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_vertex_array_object) + */ +interface OES_vertex_array_object { + /** + * The **`OES_vertex_array_object.bindVertexArrayOES()`** method of the WebGL API binds a passed WebGLVertexArrayObject object to the buffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_vertex_array_object/bindVertexArrayOES) + */ + bindVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): void; + /** + * The **`OES_vertex_array_object.createVertexArrayOES()`** method of the WebGL API creates and initializes a pointing to vertex array data and which provides names for different sets of vertex data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_vertex_array_object/createVertexArrayOES) + */ + createVertexArrayOES(): WebGLVertexArrayObjectOES; + /** + * The **`OES_vertex_array_object.deleteVertexArrayOES()`** method of the WebGL API deletes a given ```js-nolint deleteVertexArrayOES(arrayObject) ``` - `arrayObject` - : A WebGLVertexArrayObject (VAO) object to delete. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_vertex_array_object/deleteVertexArrayOES) + */ + deleteVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): void; + /** + * The **`OES_vertex_array_object.isVertexArrayOES()`** method of the WebGL API returns `true` if the passed object is a WebGLVertexArrayObject object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OES_vertex_array_object/isVertexArrayOES) + */ + isVertexArrayOES(arrayObject: WebGLVertexArrayObjectOES | null): GLboolean; + readonly VERTEX_ARRAY_BINDING_OES: 0x85B5; +} + +/** + * The `OVR_multiview2` extension is part of the WebGL API and adds support for rendering into multiple views simultaneously. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OVR_multiview2) + */ +interface OVR_multiview2 { + /** + * The **`OVR_multiview2.framebufferTextureMultiviewOVR()`** method of the WebGL API attaches a multiview texture to a WebGLFramebuffer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OVR_multiview2/framebufferTextureMultiviewOVR) + */ + framebufferTextureMultiviewOVR(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, baseViewIndex: GLint, numViews: GLsizei): void; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR: 0x9630; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR: 0x9632; + readonly MAX_VIEWS_OVR: 0x9631; + readonly FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR: 0x9633; +} + +interface OffscreenCanvasEventMap { + "contextlost": Event; + "contextrestored": Event; +} + +/** + * When using the canvas element or the Canvas API, rendering, animation, and user interaction usually happen on the main execution thread of a web application. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas) + */ +interface OffscreenCanvas extends EventTarget { + /** + * The **`height`** property returns and sets the height of an OffscreenCanvas object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/height) + */ + height: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/contextlost_event) */ + oncontextlost: ((this: OffscreenCanvas, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/contextrestored_event) */ + oncontextrestored: ((this: OffscreenCanvas, ev: Event) => any) | null; + /** + * The **`width`** property returns and sets the width of an OffscreenCanvas object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/width) + */ + width: number; + /** + * The **`OffscreenCanvas.convertToBlob()`** method creates a Blob object representing the image contained in the canvas. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/convertToBlob) + */ + convertToBlob(options?: ImageEncodeOptions): Promise; + /** + * The **`OffscreenCanvas.getContext()`** method returns a drawing context for an offscreen canvas, or `null` if the context identifier is not supported, or the offscreen canvas has already been set to a different context mode. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/getContext) + */ + getContext(contextId: "2d", options?: any): OffscreenCanvasRenderingContext2D | null; + getContext(contextId: "bitmaprenderer", options?: any): ImageBitmapRenderingContext | null; + getContext(contextId: "webgl", options?: any): WebGLRenderingContext | null; + getContext(contextId: "webgl2", options?: any): WebGL2RenderingContext | null; + getContext(contextId: OffscreenRenderingContextId, options?: any): OffscreenRenderingContext | null; + /** + * The **`OffscreenCanvas.transferToImageBitmap()`** method creates an ImageBitmap object from the most recently rendered image of the `OffscreenCanvas`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvas/transferToImageBitmap) + */ + transferToImageBitmap(): ImageBitmap; + addEventListener(type: K, listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: OffscreenCanvas, ev: OffscreenCanvasEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var OffscreenCanvas: { + prototype: OffscreenCanvas; + new(width: number, height: number): OffscreenCanvas; +}; + +/** + * The **`OffscreenCanvasRenderingContext2D`** interface is a CanvasRenderingContext2D rendering context for drawing to the bitmap of an `OffscreenCanvas` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/OffscreenCanvasRenderingContext2D) + */ +interface OffscreenCanvasRenderingContext2D extends CanvasCompositing, CanvasDrawImage, CanvasDrawPath, CanvasFillStrokeStyles, CanvasFilters, CanvasImageData, CanvasImageSmoothing, CanvasPath, CanvasPathDrawingStyles, CanvasRect, CanvasShadowStyles, CanvasState, CanvasText, CanvasTextDrawingStyles, CanvasTransform { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/CanvasRenderingContext2D/canvas) */ + readonly canvas: OffscreenCanvas; +} + +declare var OffscreenCanvasRenderingContext2D: { + prototype: OffscreenCanvasRenderingContext2D; + new(): OffscreenCanvasRenderingContext2D; +}; + +/** + * The **`Path2D`** interface of the Canvas 2D API is used to declare a path that can then be used on a CanvasRenderingContext2D object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Path2D) + */ +interface Path2D extends CanvasPath { + /** + * The **`Path2D.addPath()`** method of the Canvas 2D API adds one Path2D object to another `Path2D` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Path2D/addPath) + */ + addPath(path: Path2D, transform?: DOMMatrix2DInit): void; +} + +declare var Path2D: { + prototype: Path2D; + new(path?: Path2D | string): Path2D; +}; + +interface PerformanceEventMap { + "resourcetimingbufferfull": Event; +} + +/** + * The **`Performance`** interface provides access to performance-related information for the current page. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance) + */ +interface Performance extends EventTarget { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/resourcetimingbufferfull_event) */ + onresourcetimingbufferfull: ((this: Performance, ev: Event) => any) | null; + /** + * The **`timeOrigin`** read-only property of the Performance interface returns the high resolution timestamp that is used as the baseline for performance-related timestamps. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/timeOrigin) + */ + readonly timeOrigin: DOMHighResTimeStamp; + /** + * The **`clearMarks()`** method removes all or specific PerformanceMark objects from the browser's performance timeline. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/clearMarks) + */ + clearMarks(markName?: string): void; + /** + * The **`clearMeasures()`** method removes all or specific PerformanceMeasure objects from the browser's performance timeline. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/clearMeasures) + */ + clearMeasures(measureName?: string): void; + /** + * The **`clearResourceTimings()`** method removes all performance entries with an PerformanceEntry.entryType of `'resource'` from the browser's performance timeline and sets the size of the performance resource data buffer to zero. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/clearResourceTimings) + */ + clearResourceTimings(): void; + /** + * The **`getEntries()`** method returns an array of all PerformanceEntry objects currently present in the performance timeline. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/getEntries) + */ + getEntries(): PerformanceEntryList; + /** + * The **`getEntriesByName()`** method returns an array of PerformanceEntry objects currently present in the performance timeline with the given _name_ and _type_. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/getEntriesByName) + */ + getEntriesByName(name: string, type?: string): PerformanceEntryList; + /** + * The **`getEntriesByType()`** method returns an array of PerformanceEntry objects currently present in the performance timeline for a given _type_. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/getEntriesByType) + */ + getEntriesByType(type: string): PerformanceEntryList; + /** + * The **`mark()`** method creates a named PerformanceMark object representing a high resolution timestamp marker in the browser's performance timeline. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/mark) + */ + mark(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark; + /** + * The **`measure()`** method creates a named PerformanceMeasure object representing a time measurement between two marks in the browser's performance timeline. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/measure) + */ + measure(measureName: string, startOrMeasureOptions?: string | PerformanceMeasureOptions, endMark?: string): PerformanceMeasure; + /** + * The **`performance.now()`** method returns a high resolution timestamp in milliseconds. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/now) + */ + now(): DOMHighResTimeStamp; + /** + * The **`setResourceTimingBufferSize()`** method sets the desired size of the browser's resource timing buffer which stores the `'resource'` performance entries. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/setResourceTimingBufferSize) + */ + setResourceTimingBufferSize(maxSize: number): void; + /** + * The **`toJSON()`** method of the Performance interface is a Serialization; it returns a JSON representation of the Performance object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Performance/toJSON) + */ + toJSON(): any; + addEventListener(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: Performance, ev: PerformanceEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var Performance: { + prototype: Performance; + new(): Performance; +}; + +/** + * The **`PerformanceEntry`** object encapsulates a single performance metric that is part of the browser's performance timeline. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceEntry) + */ +interface PerformanceEntry { + /** + * The read-only **`duration`** property returns a DOMHighResTimeStamp that is the duration of the PerformanceEntry. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceEntry/duration) + */ + readonly duration: DOMHighResTimeStamp; + /** + * The read-only **`entryType`** property returns a string representing the type of performance metric that this entry represents. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceEntry/entryType) + */ + readonly entryType: string; + /** + * The read-only **`name`** property of the PerformanceEntry interface is a string representing the name for a performance entry. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceEntry/name) + */ + readonly name: string; + /** + * The read-only **`startTime`** property returns the first DOMHighResTimeStamp recorded for this PerformanceEntry. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceEntry/startTime) + */ + readonly startTime: DOMHighResTimeStamp; + /** + * The **`toJSON()`** method is a Serialization; it returns a JSON representation of the PerformanceEntry object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceEntry/toJSON) + */ + toJSON(): any; +} + +declare var PerformanceEntry: { + prototype: PerformanceEntry; + new(): PerformanceEntry; +}; + +/** + * **`PerformanceMark`** is an interface for PerformanceEntry objects with an PerformanceEntry.entryType of `'mark'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceMark) + */ +interface PerformanceMark extends PerformanceEntry { + /** + * The read-only **`detail`** property returns arbitrary metadata that was included in the mark upon construction (either when using Performance.mark or the PerformanceMark.PerformanceMark constructor). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceMark/detail) + */ + readonly detail: any; +} + +declare var PerformanceMark: { + prototype: PerformanceMark; + new(markName: string, markOptions?: PerformanceMarkOptions): PerformanceMark; +}; + +/** + * **`PerformanceMeasure`** is an _abstract_ interface for PerformanceEntry objects with an PerformanceEntry.entryType of `'measure'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceMeasure) + */ +interface PerformanceMeasure extends PerformanceEntry { + /** + * The read-only **`detail`** property returns arbitrary metadata that was included in the mark upon construction (when using Performance.measure. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceMeasure/detail) + */ + readonly detail: any; +} + +declare var PerformanceMeasure: { + prototype: PerformanceMeasure; + new(): PerformanceMeasure; +}; + +/** + * The **`PerformanceObserver`** interface is used to observe performance measurement events and be notified of new PerformanceEntry as they are recorded in the browser's _performance timeline_. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserver) + */ +interface PerformanceObserver { + /** + * The **`disconnect()`** method of the PerformanceObserver interface is used to stop the performance observer from receiving any PerformanceEntry events. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserver/disconnect) + */ + disconnect(): void; + /** + * The **`observe()`** method of the **PerformanceObserver** interface is used to specify the set of performance entry types to observe. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserver/observe) + */ + observe(options?: PerformanceObserverInit): void; + /** + * The **`takeRecords()`** method of the PerformanceObserver interface returns the current list of PerformanceEntry objects stored in the performance observer, emptying it out. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserver/takeRecords) + */ + takeRecords(): PerformanceEntryList; +} + +declare var PerformanceObserver: { + prototype: PerformanceObserver; + new(callback: PerformanceObserverCallback): PerformanceObserver; + /** + * The static **`supportedEntryTypes`** read-only property of the PerformanceObserver interface returns an array of the PerformanceEntry.entryType values supported by the user agent. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserver/supportedEntryTypes_static) + */ + readonly supportedEntryTypes: ReadonlyArray; +}; + +/** + * The **`PerformanceObserverEntryList`** interface is a list of PerformanceEntry that were explicitly observed via the PerformanceObserver.observe method. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserverEntryList) + */ +interface PerformanceObserverEntryList { + /** + * The **`getEntries()`** method of the PerformanceObserverEntryList interface returns a list of explicitly observed PerformanceEntry objects. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserverEntryList/getEntries) + */ + getEntries(): PerformanceEntryList; + /** + * The **`getEntriesByName()`** method of the PerformanceObserverEntryList interface returns a list of explicitly observed PerformanceEntry objects for a given PerformanceEntry.name and PerformanceEntry.entryType. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserverEntryList/getEntriesByName) + */ + getEntriesByName(name: string, type?: string): PerformanceEntryList; + /** + * The **`getEntriesByType()`** method of the PerformanceObserverEntryList returns a list of explicitly _observed_ PerformanceEntry objects for a given PerformanceEntry.entryType. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceObserverEntryList/getEntriesByType) + */ + getEntriesByType(type: string): PerformanceEntryList; +} + +declare var PerformanceObserverEntryList: { + prototype: PerformanceObserverEntryList; + new(): PerformanceObserverEntryList; +}; + +/** + * The **`PerformanceResourceTiming`** interface enables retrieval and analysis of detailed network timing data regarding the loading of an application's resources. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming) + */ +interface PerformanceResourceTiming extends PerformanceEntry { + /** + * The **`connectEnd`** read-only property returns the DOMHighResTimeStamp immediately after the browser finishes establishing the connection to the server to retrieve the resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/connectEnd) + */ + readonly connectEnd: DOMHighResTimeStamp; + /** + * The **`connectStart`** read-only property returns the DOMHighResTimeStamp immediately before the user agent starts establishing the connection to the server to retrieve the resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/connectStart) + */ + readonly connectStart: DOMHighResTimeStamp; + /** + * The **`decodedBodySize`** read-only property returns the size (in octets) received from the fetch (HTTP or cache) of the message body after removing any applied content encoding (like gzip or Brotli). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/decodedBodySize) + */ + readonly decodedBodySize: number; + /** + * The **`domainLookupEnd`** read-only property returns the DOMHighResTimeStamp immediately after the browser finishes the domain-name lookup for the resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/domainLookupEnd) + */ + readonly domainLookupEnd: DOMHighResTimeStamp; + /** + * The **`domainLookupStart`** read-only property returns the DOMHighResTimeStamp immediately before the browser starts the domain name lookup for the resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/domainLookupStart) + */ + readonly domainLookupStart: DOMHighResTimeStamp; + /** + * The **`encodedBodySize`** read-only property represents the size (in octets) received from the fetch (HTTP or cache) of the payload body before removing any applied content encodings (like gzip or Brotli). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/encodedBodySize) + */ + readonly encodedBodySize: number; + /** + * The **`fetchStart`** read-only property represents a DOMHighResTimeStamp immediately before the browser starts to fetch the resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/fetchStart) + */ + readonly fetchStart: DOMHighResTimeStamp; + /** + * The **`initiatorType`** read-only property is a string representing web platform feature that initiated the resource load. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/initiatorType) + */ + readonly initiatorType: string; + /** + * The **`nextHopProtocol`** read-only property is a string representing the network protocol used to fetch the resource, as identified by the ALPN Protocol ID (RFC7301). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/nextHopProtocol) + */ + readonly nextHopProtocol: string; + /** + * The **`redirectEnd`** read-only property returns a DOMHighResTimeStamp immediately after receiving the last byte of the response of the last redirect. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/redirectEnd) + */ + readonly redirectEnd: DOMHighResTimeStamp; + /** + * The **`redirectStart`** read-only property returns a DOMHighResTimeStamp representing the start time of the fetch which that initiates the redirect. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/redirectStart) + */ + readonly redirectStart: DOMHighResTimeStamp; + /** + * The **`requestStart`** read-only property returns a DOMHighResTimeStamp of the time immediately before the browser starts requesting the resource from the server, cache, or local resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/requestStart) + */ + readonly requestStart: DOMHighResTimeStamp; + /** + * The **`responseEnd`** read-only property returns a DOMHighResTimeStamp immediately after the browser receives the last byte of the resource or immediately before the transport connection is closed, whichever comes first. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/responseEnd) + */ + readonly responseEnd: DOMHighResTimeStamp; + /** + * The **`responseStart`** read-only property returns a DOMHighResTimeStamp immediately after the browser receives the first byte of the response from the server, cache, or local resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/responseStart) + */ + readonly responseStart: DOMHighResTimeStamp; + /** + * The **`responseStatus`** read-only property represents the HTTP response status code returned when fetching the resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/responseStatus) + */ + readonly responseStatus: number; + /** + * The **`secureConnectionStart`** read-only property returns a DOMHighResTimeStamp immediately before the browser starts the handshake process to secure the current connection. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/secureConnectionStart) + */ + readonly secureConnectionStart: DOMHighResTimeStamp; + /** + * The **`serverTiming`** read-only property returns an array of PerformanceServerTiming entries containing server timing metrics. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/serverTiming) + */ + readonly serverTiming: ReadonlyArray; + /** + * The **`transferSize`** read-only property represents the size (in octets) of the fetched resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/transferSize) + */ + readonly transferSize: number; + /** + * The **`workerStart`** read-only property of the PerformanceResourceTiming interface returns a The `workerStart` property can have the following values: - A DOMHighResTimeStamp. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/workerStart) + */ + readonly workerStart: DOMHighResTimeStamp; + /** + * The **`toJSON()`** method of the PerformanceResourceTiming interface is a Serialization; it returns a JSON representation of the PerformanceResourceTiming object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceResourceTiming/toJSON) + */ + toJSON(): any; +} + +declare var PerformanceResourceTiming: { + prototype: PerformanceResourceTiming; + new(): PerformanceResourceTiming; +}; + +/** + * The **`PerformanceServerTiming`** interface surfaces server metrics that are sent with the response in the Server-Timing HTTP header. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceServerTiming) + */ +interface PerformanceServerTiming { + /** + * The **`description`** read-only property returns a string value of the server-specified metric description, or an empty string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceServerTiming/description) + */ + readonly description: string; + /** + * The **`duration`** read-only property returns a double that contains the server-specified metric duration, or the value `0.0`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceServerTiming/duration) + */ + readonly duration: DOMHighResTimeStamp; + /** + * The **`name`** read-only property returns a string value of the server-specified metric name. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceServerTiming/name) + */ + readonly name: string; + /** + * The **`toJSON()`** method of the PerformanceServerTiming interface is a Serialization; it returns a JSON representation of the PerformanceServerTiming object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PerformanceServerTiming/toJSON) + */ + toJSON(): any; +} + +declare var PerformanceServerTiming: { + prototype: PerformanceServerTiming; + new(): PerformanceServerTiming; +}; + +interface PermissionStatusEventMap { + "change": Event; +} + +/** + * The **`PermissionStatus`** interface of the Permissions API provides the state of an object and an event handler for monitoring changes to said state. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PermissionStatus) + */ +interface PermissionStatus extends EventTarget { + /** + * The **`name`** read-only property of the PermissionStatus interface returns the name of a requested permission. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PermissionStatus/name) + */ + readonly name: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/PermissionStatus/change_event) */ + onchange: ((this: PermissionStatus, ev: Event) => any) | null; + /** + * The **`state`** read-only property of the This property returns one of `'granted'`, `'denied'`, or `'prompt'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PermissionStatus/state) + */ + readonly state: PermissionState; + addEventListener(type: K, listener: (this: PermissionStatus, ev: PermissionStatusEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: PermissionStatus, ev: PermissionStatusEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var PermissionStatus: { + prototype: PermissionStatus; + new(): PermissionStatus; +}; + +/** + * The **`Permissions`** interface of the Permissions API provides the core Permission API functionality, such as methods for querying and revoking permissions - Permissions.query - : Returns the user permission status for a given API. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Permissions) + */ +interface Permissions { + /** + * The **`query()`** method of the Permissions interface returns the state of a user permission on the global scope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Permissions/query) + */ + query(permissionDesc: PermissionDescriptor): Promise; +} + +declare var Permissions: { + prototype: Permissions; + new(): Permissions; +}; + +/** + * The **`ProgressEvent`** interface represents events that measure the progress of an underlying process, like an HTTP request (e.g., an `XMLHttpRequest`, or the loading of the underlying resource of an img, audio, video, style or link). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent) + */ +interface ProgressEvent extends Event { + /** + * The **`ProgressEvent.lengthComputable`** read-only property is a boolean flag indicating if the resource concerned by the A boolean. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent/lengthComputable) + */ + readonly lengthComputable: boolean; + /** + * The **`ProgressEvent.loaded`** read-only property is a number indicating the size of the data already transmitted or processed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent/loaded) + */ + readonly loaded: number; + readonly target: T | null; + /** + * The **`ProgressEvent.total`** read-only property is a number indicating the total size of the data being transmitted or processed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ProgressEvent/total) + */ + readonly total: number; +} + +declare var ProgressEvent: { + prototype: ProgressEvent; + new(type: string, eventInitDict?: ProgressEventInit): ProgressEvent; +}; + +/** + * The **`PromiseRejectionEvent`** interface represents events which are sent to the global script context when JavaScript Promises are rejected. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent) + */ +interface PromiseRejectionEvent extends Event { + /** + * The PromiseRejectionEvent interface's **`promise`** read-only property indicates the JavaScript rejected. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/promise) + */ + readonly promise: Promise; + /** + * The PromiseRejectionEvent **`reason`** read-only property is any JavaScript value or Object which provides the reason passed into Promise.reject(). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PromiseRejectionEvent/reason) + */ + readonly reason: any; +} + +declare var PromiseRejectionEvent: { + prototype: PromiseRejectionEvent; + new(type: string, eventInitDict: PromiseRejectionEventInit): PromiseRejectionEvent; +}; + +/** + * The **`PushEvent`** interface of the Push API represents a push message that has been received. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushEvent) + */ +interface PushEvent extends ExtendableEvent { + /** + * The `data` read-only property of the **`PushEvent`** interface returns a reference to a PushMessageData object containing data sent to the PushSubscription. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushEvent/data) + */ + readonly data: PushMessageData | null; +} + +declare var PushEvent: { + prototype: PushEvent; + new(type: string, eventInitDict?: PushEventInit): PushEvent; +}; + +/** + * The **`PushManager`** interface of the Push API provides a way to receive notifications from third-party servers as well as request URLs for push notifications. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushManager) + */ +interface PushManager { + /** + * The **`PushManager.getSubscription()`** method of the PushManager interface retrieves an existing push subscription. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushManager/getSubscription) + */ + getSubscription(): Promise; + /** + * The **`permissionState()`** method of the string indicating the permission state of the push manager. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushManager/permissionState) + */ + permissionState(options?: PushSubscriptionOptionsInit): Promise; + /** + * The **`subscribe()`** method of the PushManager interface subscribes to a push service. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushManager/subscribe) + */ + subscribe(options?: PushSubscriptionOptionsInit): Promise; +} + +declare var PushManager: { + prototype: PushManager; + new(): PushManager; + /** + * The **`supportedContentEncodings`** read-only static property of the PushManager interface returns an array of supported content codings that can be used to encrypt the payload of a push message. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushManager/supportedContentEncodings_static) + */ + readonly supportedContentEncodings: ReadonlyArray; +}; + +/** + * The **`PushMessageData`** interface of the Push API provides methods which let you retrieve the push data sent by a server in various formats. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushMessageData) + */ +interface PushMessageData { + /** + * The **`arrayBuffer()`** method of the PushMessageData interface extracts push message data as an ArrayBuffer object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushMessageData/arrayBuffer) + */ + arrayBuffer(): ArrayBuffer; + /** + * The **`blob()`** method of the PushMessageData interface extracts push message data as a Blob object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushMessageData/blob) + */ + blob(): Blob; + /** + * The **`bytes()`** method of the PushMessageData interface extracts push message data as an Uint8Array object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushMessageData/bytes) + */ + bytes(): Uint8Array; + /** + * The **`json()`** method of the PushMessageData interface extracts push message data by parsing it as a JSON string and returning the result. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushMessageData/json) + */ + json(): any; + /** + * The **`text()`** method of the PushMessageData interface extracts push message data as a plain text string. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushMessageData/text) + */ + text(): string; +} + +declare var PushMessageData: { + prototype: PushMessageData; + new(): PushMessageData; +}; + +/** + * The `PushSubscription` interface of the Push API provides a subscription's URL endpoint along with the public key and secrets that should be used for encrypting push messages to this subscription. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription) + */ +interface PushSubscription { + /** + * The **`endpoint`** read-only property of the the endpoint associated with the push subscription. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription/endpoint) + */ + readonly endpoint: string; + /** + * The **`expirationTime`** read-only property of the of the subscription expiration time associated with the push subscription, if there is one, or `null` otherwise. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription/expirationTime) + */ + readonly expirationTime: EpochTimeStamp | null; + /** + * The **`options`** read-only property of the PushSubscription interface is an object containing the options used to create the subscription. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription/options) + */ + readonly options: PushSubscriptionOptions; + /** + * The `getKey()` method of the PushSubscription interface returns an ArrayBuffer representing a client public key, which can then be sent to a server and used in encrypting push message data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription/getKey) + */ + getKey(name: PushEncryptionKeyName): ArrayBuffer | null; + /** + * The `toJSON()` method of the PushSubscription interface is a standard serializer: it returns a JSON representation of the subscription properties, providing a useful shortcut. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription/toJSON) + */ + toJSON(): PushSubscriptionJSON; + /** + * The `unsubscribe()` method of the PushSubscription interface returns a Promise that resolves to a boolean value when the current subscription is successfully unsubscribed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscription/unsubscribe) + */ + unsubscribe(): Promise; +} + +declare var PushSubscription: { + prototype: PushSubscription; + new(): PushSubscription; +}; + +/** Available only in secure contexts. */ +interface PushSubscriptionChangeEvent extends ExtendableEvent { + readonly newSubscription: PushSubscription | null; + readonly oldSubscription: PushSubscription | null; +} + +declare var PushSubscriptionChangeEvent: { + prototype: PushSubscriptionChangeEvent; + new(type: string, eventInitDict?: PushSubscriptionChangeEventInit): PushSubscriptionChangeEvent; +}; + +/** + * The **`PushSubscriptionOptions`** interface of the Push API represents the options associated with a push subscription. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscriptionOptions) + */ +interface PushSubscriptionOptions { + /** + * The **`applicationServerKey`** read-only property of the PushSubscriptionOptions interface contains the public key used by the push server. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscriptionOptions/applicationServerKey) + */ + readonly applicationServerKey: ArrayBuffer | null; + /** + * The **`userVisibleOnly`** read-only property of the PushSubscriptionOptions interface indicates if the returned push subscription will only be used for messages whose effect is made visible to the user. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/PushSubscriptionOptions/userVisibleOnly) + */ + readonly userVisibleOnly: boolean; +} + +declare var PushSubscriptionOptions: { + prototype: PushSubscriptionOptions; + new(): PushSubscriptionOptions; +}; + +interface RTCDataChannelEventMap { + "bufferedamountlow": Event; + "close": Event; + "closing": Event; + "error": Event; + "message": MessageEvent; + "open": Event; +} + +/** + * The **`RTCDataChannel`** interface represents a network channel which can be used for bidirectional peer-to-peer transfers of arbitrary data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel) + */ +interface RTCDataChannel extends EventTarget { + /** + * The property **`binaryType`** on the the type of object which should be used to represent binary data received on the RTCDataChannel. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/binaryType) + */ + binaryType: BinaryType; + /** + * The read-only `RTCDataChannel` property **`bufferedAmount`** returns the number of bytes of data currently queued to be sent over the data channel. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/bufferedAmount) + */ + readonly bufferedAmount: number; + /** + * The `RTCDataChannel` property **`bufferedAmountLowThreshold`** is used to specify the number of bytes of buffered outgoing data that is considered 'low.' The default value is 0\. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/bufferedAmountLowThreshold) + */ + bufferedAmountLowThreshold: number; + /** + * The read-only `RTCDataChannel` property **`id`** returns an ID number (between 0 and 65,534) which uniquely identifies the RTCDataChannel. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/id) + */ + readonly id: number | null; + /** + * The read-only `RTCDataChannel` property **`label`** returns a string containing a name describing the data channel. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/label) + */ + readonly label: string; + /** + * The read-only `RTCDataChannel` property **`maxPacketLifeTime`** returns the amount of time, in milliseconds, the browser is allowed to take to attempt to transmit a message, as set when the data channel was created, or `null`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/maxPacketLifeTime) + */ + readonly maxPacketLifeTime: number | null; + /** + * The read-only `RTCDataChannel` property **`maxRetransmits`** returns the maximum number of times the browser should try to retransmit a message before giving up, as set when the data channel was created, or `null`, which indicates that there is no maximum. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/maxRetransmits) + */ + readonly maxRetransmits: number | null; + /** + * The read-only `RTCDataChannel` property **`negotiated`** indicates whether the (`true`) or by the WebRTC layer (`false`). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/negotiated) + */ + readonly negotiated: boolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/bufferedamountlow_event) */ + onbufferedamountlow: ((this: RTCDataChannel, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/close_event) */ + onclose: ((this: RTCDataChannel, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/closing_event) */ + onclosing: ((this: RTCDataChannel, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/error_event) */ + onerror: ((this: RTCDataChannel, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/message_event) */ + onmessage: ((this: RTCDataChannel, ev: MessageEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/open_event) */ + onopen: ((this: RTCDataChannel, ev: Event) => any) | null; + /** + * The read-only `RTCDataChannel` property **`ordered`** indicates whether or not the data channel guarantees in-order delivery of messages; the default is `true`, which indicates that the data channel is indeed ordered. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/ordered) + */ + readonly ordered: boolean; + /** + * The read-only `RTCDataChannel` property **`protocol`** returns a string containing the name of the subprotocol in use. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/protocol) + */ + readonly protocol: string; + /** + * The read-only `RTCDataChannel` property **`readyState`** returns a string which indicates the state of the data channel's underlying data connection. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/readyState) + */ + readonly readyState: RTCDataChannelState; + /** + * The **`RTCDataChannel.close()`** method closes the closure of the channel. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/close) + */ + close(): void; + /** + * The **`send()`** method of the remote peer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCDataChannel/send) + */ + send(data: string): void; + send(data: Blob): void; + send(data: ArrayBuffer): void; + send(data: ArrayBufferView): void; + addEventListener(type: K, listener: (this: RTCDataChannel, ev: RTCDataChannelEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: RTCDataChannel, ev: RTCDataChannelEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var RTCDataChannel: { + prototype: RTCDataChannel; + new(): RTCDataChannel; +}; + +/** + * The **`RTCEncodedAudioFrame`** of the WebRTC API represents an encoded audio frame in the WebRTC receiver or sender pipeline, which may be modified using a WebRTC Encoded Transform. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedAudioFrame) + */ +interface RTCEncodedAudioFrame { + /** + * The **`data`** property of the RTCEncodedAudioFrame interface returns a buffer containing the data for an encoded frame. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedAudioFrame/data) + */ + data: ArrayBuffer; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedAudioFrame/timestamp) */ + readonly timestamp: number; + /** + * The **`getMetadata()`** method of the RTCEncodedAudioFrame interface returns an object containing the metadata associated with the frame. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedAudioFrame/getMetadata) + */ + getMetadata(): RTCEncodedAudioFrameMetadata; +} + +declare var RTCEncodedAudioFrame: { + prototype: RTCEncodedAudioFrame; + new(): RTCEncodedAudioFrame; +}; + +/** + * The **`RTCEncodedVideoFrame`** of the WebRTC API represents an encoded video frame in the WebRTC receiver or sender pipeline, which may be modified using a WebRTC Encoded Transform. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedVideoFrame) + */ +interface RTCEncodedVideoFrame { + /** + * The **`data`** property of the RTCEncodedVideoFrame interface returns a buffer containing the frame data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedVideoFrame/data) + */ + data: ArrayBuffer; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedVideoFrame/timestamp) */ + readonly timestamp: number; + /** + * The **`type`** read-only property of the RTCEncodedVideoFrame interface indicates whether this frame is a key frame, delta frame, or empty frame. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedVideoFrame/type) + */ + readonly type: RTCEncodedVideoFrameType; + /** + * The **`getMetadata()`** method of the RTCEncodedVideoFrame interface returns an object containing the metadata associated with the frame. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCEncodedVideoFrame/getMetadata) + */ + getMetadata(): RTCEncodedVideoFrameMetadata; +} + +declare var RTCEncodedVideoFrame: { + prototype: RTCEncodedVideoFrame; + new(): RTCEncodedVideoFrame; +}; + +/** + * The **`RTCRtpScriptTransformer`** interface of the WebRTC API provides a worker-side Stream API interface that a WebRTC Encoded Transform can use to modify encoded media frames in the incoming and outgoing WebRTC pipelines. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpScriptTransformer) + */ +interface RTCRtpScriptTransformer extends EventTarget { + /** + * The **`options`** read-only property of the RTCRtpScriptTransformer interface returns the object that was (optionally) passed as the second argument during construction of the corresponding RTCRtpScriptTransform. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpScriptTransformer/options) + */ + readonly options: any; + /** + * The **`readable`** read-only property of the RTCRtpScriptTransformer interface returns a ReadableStream instance is a source for encoded media frames. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpScriptTransformer/readable) + */ + readonly readable: ReadableStream; + /** + * The **`writable`** read-only property of the RTCRtpScriptTransformer interface returns a WritableStream instance that can be used as a sink for encoded media frames enqueued on the corresponding RTCRtpScriptTransformer.readable. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpScriptTransformer/writable) + */ + readonly writable: WritableStream; + /** + * The **`generateKeyFrame()`** method of the RTCRtpScriptTransformer interface causes a video encoder to generate a key frame. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpScriptTransformer/generateKeyFrame) + */ + generateKeyFrame(rid?: string): Promise; + /** + * The **`sendKeyFrameRequest()`** method of the RTCRtpScriptTransformer interface may be called by a WebRTC Encoded Transform that is processing incoming encoded video frames, in order to request a key frame from the sender. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCRtpScriptTransformer/sendKeyFrameRequest) + */ + sendKeyFrameRequest(): Promise; +} + +declare var RTCRtpScriptTransformer: { + prototype: RTCRtpScriptTransformer; + new(): RTCRtpScriptTransformer; +}; + +/** + * The **`RTCTransformEvent`** of the WebRTC API represent an event that is fired in a dedicated worker when an encoded frame has been queued for processing by a WebRTC Encoded Transform. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCTransformEvent) + */ +interface RTCTransformEvent extends Event { + /** + * The read-only **`transformer`** property of the RTCTransformEvent interface returns the RTCRtpScriptTransformer associated with the event. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/RTCTransformEvent/transformer) + */ + readonly transformer: RTCRtpScriptTransformer; +} + +declare var RTCTransformEvent: { + prototype: RTCTransformEvent; + new(): RTCTransformEvent; +}; + +/** + * The **`ReadableByteStreamController`** interface of the Streams API represents a controller for a readable byte stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController) + */ +interface ReadableByteStreamController { + /** + * The **`byobRequest`** read-only property of the ReadableByteStreamController interface returns the current BYOB request, or `null` if there are no pending requests. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/byobRequest) + */ + readonly byobRequest: ReadableStreamBYOBRequest | null; + /** + * The **`desiredSize`** read-only property of the ReadableByteStreamController interface returns the number of bytes required to fill the stream's internal queue to its 'desired size'. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/desiredSize) + */ + readonly desiredSize: number | null; + /** + * The **`close()`** method of the ReadableByteStreamController interface closes the associated stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/close) + */ + close(): void; + /** + * The **`enqueue()`** method of the ReadableByteStreamController interface enqueues a given chunk on the associated readable byte stream (the chunk is copied into the stream's internal queues). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/enqueue) + */ + enqueue(chunk: ArrayBufferView): void; + /** + * The **`error()`** method of the ReadableByteStreamController interface causes any future interactions with the associated stream to error with the specified reason. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableByteStreamController/error) + */ + error(e?: any): void; +} + +declare var ReadableByteStreamController: { + prototype: ReadableByteStreamController; + new(): ReadableByteStreamController; +}; + +/** + * The `ReadableStream` interface of the Streams API represents a readable stream of byte data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream) + */ +interface ReadableStream { + /** + * The **`locked`** read-only property of the ReadableStream interface returns whether or not the readable stream is locked to a reader. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/locked) + */ + readonly locked: boolean; + /** + * The **`cancel()`** method of the ReadableStream interface returns a Promise that resolves when the stream is canceled. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/cancel) + */ + cancel(reason?: any): Promise; + /** + * The **`getReader()`** method of the ReadableStream interface creates a reader and locks the stream to it. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/getReader) + */ + getReader(options: { mode: "byob" }): ReadableStreamBYOBReader; + getReader(): ReadableStreamDefaultReader; + getReader(options?: ReadableStreamGetReaderOptions): ReadableStreamReader; + /** + * The **`pipeThrough()`** method of the ReadableStream interface provides a chainable way of piping the current stream through a transform stream or any other writable/readable pair. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/pipeThrough) + */ + pipeThrough(transform: ReadableWritablePair, options?: StreamPipeOptions): ReadableStream; + /** + * The **`pipeTo()`** method of the ReadableStream interface pipes the current `ReadableStream` to a given WritableStream and returns a Promise that fulfills when the piping process completes successfully, or rejects if any errors were encountered. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/pipeTo) + */ + pipeTo(destination: WritableStream, options?: StreamPipeOptions): Promise; + /** + * The **`tee()`** method of the two-element array containing the two resulting branches as new ReadableStream instances. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStream/tee) + */ + tee(): [ReadableStream, ReadableStream]; +} + +declare var ReadableStream: { + prototype: ReadableStream; + new(underlyingSource: UnderlyingByteSource, strategy?: { highWaterMark?: number }): ReadableStream>; + new(underlyingSource: UnderlyingDefaultSource, strategy?: QueuingStrategy): ReadableStream; + new(underlyingSource?: UnderlyingSource, strategy?: QueuingStrategy): ReadableStream; +}; + +/** + * The `ReadableStreamBYOBReader` interface of the Streams API defines a reader for a ReadableStream that supports zero-copy reading from an underlying byte source. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader) + */ +interface ReadableStreamBYOBReader extends ReadableStreamGenericReader { + /** + * The **`read()`** method of the ReadableStreamBYOBReader interface is used to read data into a view on a user-supplied buffer from an associated readable byte stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/read) + */ + read(view: T): Promise>; + /** + * The **`releaseLock()`** method of the ReadableStreamBYOBReader interface releases the reader's lock on the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/releaseLock) + */ + releaseLock(): void; +} + +declare var ReadableStreamBYOBReader: { + prototype: ReadableStreamBYOBReader; + new(stream: ReadableStream>): ReadableStreamBYOBReader; +}; + +/** + * The **`ReadableStreamBYOBRequest`** interface of the Streams API represents a 'pull request' for data from an underlying source that will made as a zero-copy transfer to a consumer (bypassing the stream's internal queues). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest) + */ +interface ReadableStreamBYOBRequest { + /** + * The **`view`** getter property of the ReadableStreamBYOBRequest interface returns the current view. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/view) + */ + readonly view: ArrayBufferView | null; + /** + * The **`respond()`** method of the ReadableStreamBYOBRequest interface is used to signal to the associated readable byte stream that the specified number of bytes were written into the ReadableStreamBYOBRequest.view. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/respond) + */ + respond(bytesWritten: number): void; + /** + * The **`respondWithNewView()`** method of the ReadableStreamBYOBRequest interface specifies a new view that the consumer of the associated readable byte stream should write to instead of ReadableStreamBYOBRequest.view. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBRequest/respondWithNewView) + */ + respondWithNewView(view: ArrayBufferView): void; +} + +declare var ReadableStreamBYOBRequest: { + prototype: ReadableStreamBYOBRequest; + new(): ReadableStreamBYOBRequest; +}; + +/** + * The **`ReadableStreamDefaultController`** interface of the Streams API represents a controller allowing control of a ReadableStream's state and internal queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController) + */ +interface ReadableStreamDefaultController { + /** + * The **`desiredSize`** read-only property of the required to fill the stream's internal queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/desiredSize) + */ + readonly desiredSize: number | null; + /** + * The **`close()`** method of the ReadableStreamDefaultController interface closes the associated stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/close) + */ + close(): void; + /** + * The **`enqueue()`** method of the ```js-nolint enqueue(chunk) ``` - `chunk` - : The chunk to enqueue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/enqueue) + */ + enqueue(chunk?: R): void; + /** + * The **`error()`** method of the with the associated stream to error. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultController/error) + */ + error(e?: any): void; +} + +declare var ReadableStreamDefaultController: { + prototype: ReadableStreamDefaultController; + new(): ReadableStreamDefaultController; +}; + +/** + * The **`ReadableStreamDefaultReader`** interface of the Streams API represents a default reader that can be used to read stream data supplied from a network (such as a fetch request). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultReader) + */ +interface ReadableStreamDefaultReader extends ReadableStreamGenericReader { + /** + * The **`read()`** method of the ReadableStreamDefaultReader interface returns a Promise providing access to the next chunk in the stream's internal queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultReader/read) + */ + read(): Promise>; + /** + * The **`releaseLock()`** method of the ReadableStreamDefaultReader interface releases the reader's lock on the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamDefaultReader/releaseLock) + */ + releaseLock(): void; +} + +declare var ReadableStreamDefaultReader: { + prototype: ReadableStreamDefaultReader; + new(stream: ReadableStream): ReadableStreamDefaultReader; +}; + +interface ReadableStreamGenericReader { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/closed) */ + readonly closed: Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReadableStreamBYOBReader/cancel) */ + cancel(reason?: any): Promise; +} + +/** + * The `Report` interface of the Reporting API represents a single report. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Report) + */ +interface Report { + /** + * The **`body`** read-only property of the Report interface returns the body of the report, which is a `ReportBody` object containing the detailed report information. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Report/body) + */ + readonly body: ReportBody | null; + /** + * The **`type`** read-only property of the Report interface returns the type of report generated, e.g., `deprecation` or `intervention`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Report/type) + */ + readonly type: string; + /** + * The **`url`** read-only property of the Report interface returns the URL of the document that generated the report. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Report/url) + */ + readonly url: string; + toJSON(): any; +} + +declare var Report: { + prototype: Report; + new(): Report; +}; + +/** + * The **`ReportBody`** interface of the Reporting API represents the body of a report. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportBody) + */ +interface ReportBody { + /** + * The **`toJSON()`** method of the ReportBody interface is a _serializer_, and returns a JSON representation of the `ReportBody` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportBody/toJSON) + */ + toJSON(): any; +} + +declare var ReportBody: { + prototype: ReportBody; + new(): ReportBody; +}; + +/** + * The `ReportingObserver` interface of the Reporting API allows you to collect and access reports. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportingObserver) + */ +interface ReportingObserver { + /** + * The **`disconnect()`** method of the previously started observing from collecting reports. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportingObserver/disconnect) + */ + disconnect(): void; + /** + * The **`observe()`** method of the collecting reports in its report queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportingObserver/observe) + */ + observe(): void; + /** + * The **`takeRecords()`** method of the in the observer's report queue, and empties the queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ReportingObserver/takeRecords) + */ + takeRecords(): ReportList; +} + +declare var ReportingObserver: { + prototype: ReportingObserver; + new(callback: ReportingObserverCallback, options?: ReportingObserverOptions): ReportingObserver; +}; + +/** + * The **`Request`** interface of the Fetch API represents a resource request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request) + */ +interface Request extends Body { + /** + * The **`cache`** read-only property of the Request interface contains the cache mode of the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/cache) + */ + readonly cache: RequestCache; + /** + * The **`credentials`** read-only property of the Request interface reflects the value given to the Request.Request() constructor in the `credentials` option. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/credentials) + */ + readonly credentials: RequestCredentials; + /** + * The **`destination`** read-only property of the **Request** interface returns a string describing the type of content being requested. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/destination) + */ + readonly destination: RequestDestination; + /** + * The **`headers`** read-only property of the with the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/headers) + */ + readonly headers: Headers; + /** + * The **`integrity`** read-only property of the Request interface contains the subresource integrity value of the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/integrity) + */ + readonly integrity: string; + /** + * The **`keepalive`** read-only property of the Request interface contains the request's `keepalive` setting (`true` or `false`), which indicates whether the browser will keep the associated request alive if the page that initiated it is unloaded before the request is complete. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/keepalive) + */ + readonly keepalive: boolean; + /** + * The **`method`** read-only property of the `POST`, etc.) A String indicating the method of the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/method) + */ + readonly method: string; + /** + * The **`mode`** read-only property of the Request interface contains the mode of the request (e.g., `cors`, `no-cors`, `same-origin`, or `navigate`.) This is used to determine if cross-origin requests lead to valid responses, and which properties of the response are readable. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/mode) + */ + readonly mode: RequestMode; + /** + * The **`redirect`** read-only property of the Request interface contains the mode for how redirects are handled. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/redirect) + */ + readonly redirect: RequestRedirect; + /** + * The **`referrer`** read-only property of the Request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/referrer) + */ + readonly referrer: string; + /** + * The **`referrerPolicy`** read-only property of the referrer information, sent in the Referer header, should be included with the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/referrerPolicy) + */ + readonly referrerPolicy: ReferrerPolicy; + /** + * The read-only **`signal`** property of the Request interface returns the AbortSignal associated with the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/signal) + */ + readonly signal: AbortSignal; + /** + * The **`url`** read-only property of the Request interface contains the URL of the request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/url) + */ + readonly url: string; + /** + * The **`clone()`** method of the Request interface creates a copy of the current `Request` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/clone) + */ + clone(): Request; +} + +declare var Request: { + prototype: Request; + new(input: RequestInfo | URL, init?: RequestInit): Request; +}; + +/** + * The **`Response`** interface of the Fetch API represents the response to a request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response) + */ +interface Response extends Body { + /** + * The **`headers`** read-only property of the with the response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/headers) + */ + readonly headers: Headers; + /** + * The **`ok`** read-only property of the Response interface contains a Boolean stating whether the response was successful (status in the range 200-299) or not. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/ok) + */ + readonly ok: boolean; + /** + * The **`redirected`** read-only property of the Response interface indicates whether or not the response is the result of a request you made which was redirected. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/redirected) + */ + readonly redirected: boolean; + /** + * The **`status`** read-only property of the Response interface contains the HTTP status codes of the response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/status) + */ + readonly status: number; + /** + * The **`statusText`** read-only property of the Response interface contains the status message corresponding to the HTTP status code in Response.status. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/statusText) + */ + readonly statusText: string; + /** + * The **`type`** read-only property of the Response interface contains the type of the response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/type) + */ + readonly type: ResponseType; + /** + * The **`url`** read-only property of the Response interface contains the URL of the response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/url) + */ + readonly url: string; + /** + * The **`clone()`** method of the Response interface creates a clone of a response object, identical in every way, but stored in a different variable. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/clone) + */ + clone(): Response; +} + +declare var Response: { + prototype: Response; + new(body?: BodyInit | null, init?: ResponseInit): Response; + /** + * The **`error()`** static method of the Response interface returns a new `Response` object associated with a network error. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/error_static) + */ + error(): Response; + /** + * The **`json()`** static method of the Response interface returns a `Response` that contains the provided JSON data as body, and a Content-Type header which is set to `application/json`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/json_static) + */ + json(data: any, init?: ResponseInit): Response; + /** + * The **`redirect()`** static method of the Response interface returns a `Response` resulting in a redirect to the specified URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Response/redirect_static) + */ + redirect(url: string | URL, status?: number): Response; +}; + +/** + * The **`SecurityPolicyViolationEvent`** interface inherits from Event, and represents the event object of a `securitypolicyviolation` event sent on an Element/securitypolicyviolation_event, Document/securitypolicyviolation_event, or WorkerGlobalScope/securitypolicyviolation_event when its Content Security Policy (CSP) is violated. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent) + */ +interface SecurityPolicyViolationEvent extends Event { + /** + * The **`blockedURI`** read-only property of the SecurityPolicyViolationEvent interface is a string representing the URI of the resource that was blocked because it violates a Content Security Policy (CSP). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/blockedURI) + */ + readonly blockedURI: string; + /** + * The **`columnNumber`** read-only property of the SecurityPolicyViolationEvent interface is the column number in the document or worker script at which the Content Security Policy (CSP) violation occurred. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/columnNumber) + */ + readonly columnNumber: number; + /** + * The **`disposition`** read-only property of the SecurityPolicyViolationEvent interface indicates how the violated Content Security Policy (CSP) is configured to be treated by the user agent. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/disposition) + */ + readonly disposition: SecurityPolicyViolationEventDisposition; + /** + * The **`documentURI`** read-only property of the SecurityPolicyViolationEvent interface is a string representing the URI of the document or worker in which the Content Security Policy (CSP) violation occurred. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/documentURI) + */ + readonly documentURI: string; + /** + * The **`effectiveDirective`** read-only property of the SecurityPolicyViolationEvent interface is a string representing the Content Security Policy (CSP) directive that was violated. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/effectiveDirective) + */ + readonly effectiveDirective: string; + /** + * The **`lineNumber`** read-only property of the SecurityPolicyViolationEvent interface is the line number in the document or worker script at which the Content Security Policy (CSP) violation occurred. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/lineNumber) + */ + readonly lineNumber: number; + /** + * The **`originalPolicy`** read-only property of the SecurityPolicyViolationEvent interface is a string containing the Content Security Policy (CSP) whose enforcement uncovered the violation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/originalPolicy) + */ + readonly originalPolicy: string; + /** + * The **`referrer`** read-only property of the SecurityPolicyViolationEvent interface is a string representing the referrer for the resources whose Content Security Policy (CSP) was violated. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/referrer) + */ + readonly referrer: string; + /** + * The **`sample`** read-only property of the SecurityPolicyViolationEvent interface is a string representing a sample of the resource that caused the Content Security Policy (CSP) violation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/sample) + */ + readonly sample: string; + /** + * The **`sourceFile`** read-only property of the SecurityPolicyViolationEvent interface is a string representing the URL of the script in which the Content Security Policy (CSP) violation occurred. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/sourceFile) + */ + readonly sourceFile: string; + /** + * The **`statusCode`** read-only property of the SecurityPolicyViolationEvent interface is a number representing the HTTP status code of the window or worker in which the Content Security Policy (CSP) violation occurred. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/statusCode) + */ + readonly statusCode: number; + /** + * The **`violatedDirective`** read-only property of the SecurityPolicyViolationEvent interface is a string representing the Content Security Policy (CSP) directive that was violated. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SecurityPolicyViolationEvent/violatedDirective) + */ + readonly violatedDirective: string; +} + +declare var SecurityPolicyViolationEvent: { + prototype: SecurityPolicyViolationEvent; + new(type: string, eventInitDict?: SecurityPolicyViolationEventInit): SecurityPolicyViolationEvent; +}; + +interface ServiceWorkerEventMap extends AbstractWorkerEventMap { + "statechange": Event; +} + +/** + * The **`ServiceWorker`** interface of the Service Worker API provides a reference to a service worker. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorker) + */ +interface ServiceWorker extends EventTarget, AbstractWorker { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorker/statechange_event) */ + onstatechange: ((this: ServiceWorker, ev: Event) => any) | null; + /** + * Returns the `ServiceWorker` serialized script URL defined as part of `ServiceWorkerRegistration`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorker/scriptURL) + */ + readonly scriptURL: string; + /** + * The **`state`** read-only property of the of the service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorker/state) + */ + readonly state: ServiceWorkerState; + /** + * The **`postMessage()`** method of the ServiceWorker interface sends a message to the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorker/postMessage) + */ + postMessage(message: any, transfer: Transferable[]): void; + postMessage(message: any, options?: StructuredSerializeOptions): void; + addEventListener(type: K, listener: (this: ServiceWorker, ev: ServiceWorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: ServiceWorker, ev: ServiceWorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var ServiceWorker: { + prototype: ServiceWorker; + new(): ServiceWorker; +}; + +interface ServiceWorkerContainerEventMap { + "controllerchange": Event; + "message": MessageEvent; + "messageerror": MessageEvent; +} + +/** + * The **`ServiceWorkerContainer`** interface of the Service Worker API provides an object representing the service worker as an overall unit in the network ecosystem, including facilities to register, unregister and update service workers, and access the state of service workers and their registrations. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer) + */ +interface ServiceWorkerContainer extends EventTarget { + /** + * The **`controller`** read-only property of the ServiceWorkerContainer interface returns a `activated` (the same object returned by `null` if the request is a force refresh (_Shift_ + refresh) or if there is no active worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/controller) + */ + readonly controller: ServiceWorker | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/controllerchange_event) */ + oncontrollerchange: ((this: ServiceWorkerContainer, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/message_event) */ + onmessage: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/messageerror_event) */ + onmessageerror: ((this: ServiceWorkerContainer, ev: MessageEvent) => any) | null; + /** + * The **`ready`** read-only property of the ServiceWorkerContainer interface provides a way of delaying code execution until a service worker is active. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/ready) + */ + readonly ready: Promise; + /** + * The **`getRegistration()`** method of the client URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/getRegistration) + */ + getRegistration(clientURL?: string | URL): Promise; + /** + * The **`getRegistrations()`** method of the `ServiceWorkerContainer`, in an array. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/getRegistrations) + */ + getRegistrations(): Promise>; + /** + * The **`register()`** method of the ServiceWorkerContainer interface creates or updates a ServiceWorkerRegistration for the given scope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/register) + */ + register(scriptURL: string | URL, options?: RegistrationOptions): Promise; + /** + * The **`startMessages()`** method of the ServiceWorkerContainer interface explicitly starts the flow of messages being dispatched from a service worker to pages under its control (e.g., sent via Client.postMessage()). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerContainer/startMessages) + */ + startMessages(): void; + addEventListener(type: K, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: ServiceWorkerContainer, ev: ServiceWorkerContainerEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var ServiceWorkerContainer: { + prototype: ServiceWorkerContainer; + new(): ServiceWorkerContainer; +}; + +interface ServiceWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { + "activate": ExtendableEvent; + "cookiechange": ExtendableCookieChangeEvent; + "fetch": FetchEvent; + "install": ExtendableEvent; + "message": ExtendableMessageEvent; + "messageerror": MessageEvent; + "notificationclick": NotificationEvent; + "notificationclose": NotificationEvent; + "push": PushEvent; + "pushsubscriptionchange": PushSubscriptionChangeEvent; +} + +/** + * The **`ServiceWorkerGlobalScope`** interface of the Service Worker API represents the global execution context of a service worker. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope) + */ +interface ServiceWorkerGlobalScope extends WorkerGlobalScope { + /** + * The **`clients`** read-only property of the object associated with the service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/clients) + */ + readonly clients: Clients; + /** + * The **`cookieStore`** read-only property of the ServiceWorkerGlobalScope interface returns a reference to the CookieStore object associated with this service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/cookieStore) + */ + readonly cookieStore: CookieStore; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/activate_event) */ + onactivate: ((this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/cookiechange_event) */ + oncookiechange: ((this: ServiceWorkerGlobalScope, ev: ExtendableCookieChangeEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/fetch_event) */ + onfetch: ((this: ServiceWorkerGlobalScope, ev: FetchEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/install_event) */ + oninstall: ((this: ServiceWorkerGlobalScope, ev: ExtendableEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/message_event) */ + onmessage: ((this: ServiceWorkerGlobalScope, ev: ExtendableMessageEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/messageerror_event) */ + onmessageerror: ((this: ServiceWorkerGlobalScope, ev: MessageEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/notificationclick_event) */ + onnotificationclick: ((this: ServiceWorkerGlobalScope, ev: NotificationEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/notificationclose_event) */ + onnotificationclose: ((this: ServiceWorkerGlobalScope, ev: NotificationEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/push_event) */ + onpush: ((this: ServiceWorkerGlobalScope, ev: PushEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/pushsubscriptionchange_event) */ + onpushsubscriptionchange: ((this: ServiceWorkerGlobalScope, ev: PushSubscriptionChangeEvent) => any) | null; + /** + * The **`registration`** read-only property of the ServiceWorkerGlobalScope interface returns a reference to the ServiceWorkerRegistration object, which represents the service worker's registration. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/registration) + */ + readonly registration: ServiceWorkerRegistration; + /** + * The **`serviceWorker`** read-only property of the ServiceWorkerGlobalScope interface returns a reference to the ServiceWorker object, which represents the service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/serviceWorker) + */ + readonly serviceWorker: ServiceWorker; + /** + * The **`skipWaiting()`** method of the ServiceWorkerGlobalScope interface forces the waiting service worker to become the active service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerGlobalScope/skipWaiting) + */ + skipWaiting(): Promise; + addEventListener(type: K, listener: (this: ServiceWorkerGlobalScope, ev: ServiceWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: ServiceWorkerGlobalScope, ev: ServiceWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var ServiceWorkerGlobalScope: { + prototype: ServiceWorkerGlobalScope; + new(): ServiceWorkerGlobalScope; +}; + +interface ServiceWorkerRegistrationEventMap { + "updatefound": Event; +} + +/** + * The **`ServiceWorkerRegistration`** interface of the Service Worker API represents the service worker registration. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration) + */ +interface ServiceWorkerRegistration extends EventTarget { + /** + * The **`active`** read-only property of the This property is initially set to `null`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/active) + */ + readonly active: ServiceWorker | null; + /** + * The **`cookies`** read-only property of the ServiceWorkerRegistration interface returns a reference to the CookieStoreManager interface, which enables a web app to subscribe to and unsubscribe from cookie change events in a service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/cookies) + */ + readonly cookies: CookieStoreManager; + /** + * The **`installing`** read-only property of the initially set to `null`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/installing) + */ + readonly installing: ServiceWorker | null; + /** + * The **`navigationPreload`** read-only property of the ServiceWorkerRegistration interface returns the NavigationPreloadManager associated with the current service worker registration. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/navigationPreload) + */ + readonly navigationPreload: NavigationPreloadManager; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/updatefound_event) */ + onupdatefound: ((this: ServiceWorkerRegistration, ev: Event) => any) | null; + /** + * The **`pushManager`** read-only property of the support for subscribing, getting an active subscription, and accessing push permission status. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/pushManager) + */ + readonly pushManager: PushManager; + /** + * The **`scope`** read-only property of the ServiceWorkerRegistration interface returns a string representing a URL that defines a service worker's registration scope; that is, the range of URLs a service worker can control. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/scope) + */ + readonly scope: string; + /** + * The **`updateViaCache`** read-only property of the ServiceWorkerRegistration interface returns the value of the setting used to determine the circumstances in which the browser will consult the HTTP cache when it tries to update the service worker or any scripts that are imported via WorkerGlobalScope.importScripts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/updateViaCache) + */ + readonly updateViaCache: ServiceWorkerUpdateViaCache; + /** + * The **`waiting`** read-only property of the set to `null`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/waiting) + */ + readonly waiting: ServiceWorker | null; + /** + * The **`getNotifications()`** method of the ServiceWorkerRegistration interface returns a list of the notifications in the order that they were created from the current origin via the current service worker registration. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/getNotifications) + */ + getNotifications(filter?: GetNotificationOptions): Promise; + /** + * The **`showNotification()`** method of the service worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/showNotification) + */ + showNotification(title: string, options?: NotificationOptions): Promise; + /** + * The **`unregister()`** method of the registration and returns a Promise. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/unregister) + */ + unregister(): Promise; + /** + * The **`update()`** method of the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/ServiceWorkerRegistration/update) + */ + update(): Promise; + addEventListener(type: K, listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: ServiceWorkerRegistration, ev: ServiceWorkerRegistrationEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var ServiceWorkerRegistration: { + prototype: ServiceWorkerRegistration; + new(): ServiceWorkerRegistration; +}; + +interface SharedWorkerGlobalScopeEventMap extends WorkerGlobalScopeEventMap { + "connect": MessageEvent; +} + +/** + * The **`SharedWorkerGlobalScope`** object (the SharedWorker global scope) is accessible through the window.self keyword. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SharedWorkerGlobalScope) + */ +interface SharedWorkerGlobalScope extends WorkerGlobalScope { + /** + * The **`name`** read-only property of the that the SharedWorker.SharedWorker constructor can pass to get a reference to the SharedWorkerGlobalScope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SharedWorkerGlobalScope/name) + */ + readonly name: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/SharedWorkerGlobalScope/connect_event) */ + onconnect: ((this: SharedWorkerGlobalScope, ev: MessageEvent) => any) | null; + /** + * The **`close()`** method of the SharedWorkerGlobalScope interface discards any tasks queued in the `SharedWorkerGlobalScope`'s event loop, effectively closing this particular scope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SharedWorkerGlobalScope/close) + */ + close(): void; + addEventListener(type: K, listener: (this: SharedWorkerGlobalScope, ev: SharedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: SharedWorkerGlobalScope, ev: SharedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var SharedWorkerGlobalScope: { + prototype: SharedWorkerGlobalScope; + new(): SharedWorkerGlobalScope; +}; + +/** + * The **`StorageManager`** interface of the Storage API provides an interface for managing persistence permissions and estimating available storage. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StorageManager) + */ +interface StorageManager { + /** + * The **`estimate()`** method of the StorageManager interface asks the Storage Manager for how much storage the current origin takes up (`usage`), and how much space is available (`quota`). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StorageManager/estimate) + */ + estimate(): Promise; + /** + * The **`getDirectory()`** method of the StorageManager interface is used to obtain a reference to a FileSystemDirectoryHandle object allowing access to a directory and its contents, stored in the origin private file system (OPFS). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StorageManager/getDirectory) + */ + getDirectory(): Promise; + /** + * The **`persisted()`** method of the StorageManager interface returns a Promise that resolves to `true` if your site's storage bucket is persistent. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StorageManager/persisted) + */ + persisted(): Promise; +} + +declare var StorageManager: { + prototype: StorageManager; + new(): StorageManager; +}; + +/** + * The **`StylePropertyMapReadOnly`** interface of the CSS Typed Object Model API provides a read-only representation of a CSS declaration block that is an alternative to CSSStyleDeclaration. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly) + */ +interface StylePropertyMapReadOnly { + /** + * The **`size`** read-only property of the containing the size of the `StylePropertyMapReadOnly` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly/size) + */ + readonly size: number; + /** + * The **`get()`** method of the object for the first value of the specified property. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly/get) + */ + get(property: string): undefined | CSSStyleValue; + /** + * The **`getAll()`** method of the ```js-nolint getAll(property) ``` - `property` - : The name of the property to retrieve all values of. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly/getAll) + */ + getAll(property: string): CSSStyleValue[]; + /** + * The **`has()`** method of the property is in the `StylePropertyMapReadOnly` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/StylePropertyMapReadOnly/has) + */ + has(property: string): boolean; + forEach(callbackfn: (value: CSSStyleValue[], key: string, parent: StylePropertyMapReadOnly) => void, thisArg?: any): void; +} + +declare var StylePropertyMapReadOnly: { + prototype: StylePropertyMapReadOnly; + new(): StylePropertyMapReadOnly; +}; + +/** + * The **`SubtleCrypto`** interface of the Web Crypto API provides a number of low-level cryptographic functions. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto) + */ +interface SubtleCrypto { + /** + * The **`decrypt()`** method of the SubtleCrypto interface decrypts some encrypted data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/decrypt) + */ + decrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise; + /** + * The **`deriveBits()`** method of the key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveBits) + */ + deriveBits(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, length?: number | null): Promise; + /** + * The **`deriveKey()`** method of the SubtleCrypto interface can be used to derive a secret key from a master key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/deriveKey) + */ + deriveKey(algorithm: AlgorithmIdentifier | EcdhKeyDeriveParams | HkdfParams | Pbkdf2Params, baseKey: CryptoKey, derivedKeyType: AlgorithmIdentifier | AesDerivedKeyParams | HmacImportParams | HkdfParams | Pbkdf2Params, extractable: boolean, keyUsages: KeyUsage[]): Promise; + /** + * The **`digest()`** method of the SubtleCrypto interface generates a _digest_ of the given data, using the specified hash function. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/digest) + */ + digest(algorithm: AlgorithmIdentifier, data: BufferSource): Promise; + /** + * The **`encrypt()`** method of the SubtleCrypto interface encrypts data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/encrypt) + */ + encrypt(algorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, key: CryptoKey, data: BufferSource): Promise; + /** + * The **`exportKey()`** method of the SubtleCrypto interface exports a key: that is, it takes as input a CryptoKey object and gives you the key in an external, portable format. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/exportKey) + */ + exportKey(format: "jwk", key: CryptoKey): Promise; + exportKey(format: Exclude, key: CryptoKey): Promise; + exportKey(format: KeyFormat, key: CryptoKey): Promise; + /** + * The **`generateKey()`** method of the SubtleCrypto interface is used to generate a new key (for symmetric algorithms) or key pair (for public-key algorithms). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/generateKey) + */ + generateKey(algorithm: "Ed25519" | { name: "Ed25519" }, extractable: boolean, keyUsages: ReadonlyArray<"sign" | "verify">): Promise; + generateKey(algorithm: RsaHashedKeyGenParams | EcKeyGenParams, extractable: boolean, keyUsages: ReadonlyArray): Promise; + generateKey(algorithm: AesKeyGenParams | HmacKeyGenParams | Pbkdf2Params, extractable: boolean, keyUsages: ReadonlyArray): Promise; + generateKey(algorithm: AlgorithmIdentifier, extractable: boolean, keyUsages: KeyUsage[]): Promise; + /** + * The **`importKey()`** method of the SubtleCrypto interface imports a key: that is, it takes as input a key in an external, portable format and gives you a CryptoKey object that you can use in the Web Crypto API. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/importKey) + */ + importKey(format: "jwk", keyData: JsonWebKey, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: ReadonlyArray): Promise; + importKey(format: Exclude, keyData: BufferSource, algorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise; + /** + * The **`sign()`** method of the SubtleCrypto interface generates a digital signature. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/sign) + */ + sign(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, data: BufferSource): Promise; + /** + * The **`unwrapKey()`** method of the SubtleCrypto interface 'unwraps' a key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/unwrapKey) + */ + unwrapKey(format: KeyFormat, wrappedKey: BufferSource, unwrappingKey: CryptoKey, unwrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams, unwrappedKeyAlgorithm: AlgorithmIdentifier | RsaHashedImportParams | EcKeyImportParams | HmacImportParams | AesKeyAlgorithm, extractable: boolean, keyUsages: KeyUsage[]): Promise; + /** + * The **`verify()`** method of the SubtleCrypto interface verifies a digital signature. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/verify) + */ + verify(algorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams, key: CryptoKey, signature: BufferSource, data: BufferSource): Promise; + /** + * The **`wrapKey()`** method of the SubtleCrypto interface 'wraps' a key. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/SubtleCrypto/wrapKey) + */ + wrapKey(format: KeyFormat, key: CryptoKey, wrappingKey: CryptoKey, wrapAlgorithm: AlgorithmIdentifier | RsaOaepParams | AesCtrParams | AesCbcParams | AesGcmParams): Promise; +} + +declare var SubtleCrypto: { + prototype: SubtleCrypto; + new(): SubtleCrypto; +}; + +/** + * The **`TextDecoder`** interface represents a decoder for a specific text encoding, such as `UTF-8`, `ISO-8859-2`, `KOI8-R`, `GBK`, etc. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder) + */ +interface TextDecoder extends TextDecoderCommon { + /** + * The **`TextDecoder.decode()`** method returns a string containing text decoded from the buffer passed as a parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/decode) + */ + decode(input?: AllowSharedBufferSource, options?: TextDecodeOptions): string; +} + +declare var TextDecoder: { + prototype: TextDecoder; + new(label?: string, options?: TextDecoderOptions): TextDecoder; +}; + +interface TextDecoderCommon { + /** + * Returns encoding's name, lowercased. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/encoding) + */ + readonly encoding: string; + /** + * Returns true if error mode is "fatal", otherwise false. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/fatal) + */ + readonly fatal: boolean; + /** + * Returns the value of ignore BOM. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoder/ignoreBOM) + */ + readonly ignoreBOM: boolean; +} + +/** + * The **`TextDecoderStream`** interface of the Encoding API converts a stream of text in a binary encoding, such as UTF-8 etc., to a stream of strings. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextDecoderStream) + */ +interface TextDecoderStream extends GenericTransformStream, TextDecoderCommon { + readonly readable: ReadableStream; + readonly writable: WritableStream; +} + +declare var TextDecoderStream: { + prototype: TextDecoderStream; + new(label?: string, options?: TextDecoderOptions): TextDecoderStream; +}; + +/** + * The **`TextEncoder`** interface takes a stream of code points as input and emits a stream of UTF-8 bytes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder) + */ +interface TextEncoder extends TextEncoderCommon { + /** + * The **`TextEncoder.encode()`** method takes a string as input, and returns a Global_Objects/Uint8Array containing the text given in parameters encoded with the specific method for that TextEncoder object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encode) + */ + encode(input?: string): Uint8Array; + /** + * The **`TextEncoder.encodeInto()`** method takes a string to encode and a destination Uint8Array to put resulting UTF-8 encoded text into, and returns a dictionary object indicating the progress of the encoding. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encodeInto) + */ + encodeInto(source: string, destination: Uint8Array): TextEncoderEncodeIntoResult; +} + +declare var TextEncoder: { + prototype: TextEncoder; + new(): TextEncoder; +}; + +interface TextEncoderCommon { + /** + * Returns "utf-8". + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoder/encoding) + */ + readonly encoding: string; +} + +/** + * The **`TextEncoderStream`** interface of the Encoding API converts a stream of strings into bytes in the UTF-8 encoding. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextEncoderStream) + */ +interface TextEncoderStream extends GenericTransformStream, TextEncoderCommon { + readonly readable: ReadableStream>; + readonly writable: WritableStream; +} + +declare var TextEncoderStream: { + prototype: TextEncoderStream; + new(): TextEncoderStream; +}; + +/** + * The **`TextMetrics`** interface represents the dimensions of a piece of text in the canvas; a `TextMetrics` instance can be retrieved using the CanvasRenderingContext2D.measureText() method. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics) + */ +interface TextMetrics { + /** + * The read-only **`actualBoundingBoxAscent`** property of the TextMetrics interface is a `double` giving the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline attribute to the top of the bounding rectangle used to render the text, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/actualBoundingBoxAscent) + */ + readonly actualBoundingBoxAscent: number; + /** + * The read-only `actualBoundingBoxDescent` property of the TextMetrics interface is a `double` giving the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline attribute to the bottom of the bounding rectangle used to render the text, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/actualBoundingBoxDescent) + */ + readonly actualBoundingBoxDescent: number; + /** + * The read-only `actualBoundingBoxLeft` property of the TextMetrics interface is a `double` giving the distance parallel to the baseline from the alignment point given by the CanvasRenderingContext2D.textAlign property to the left side of the bounding rectangle of the given text, in CSS pixels; positive numbers indicating a distance going left from the given alignment point. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/actualBoundingBoxLeft) + */ + readonly actualBoundingBoxLeft: number; + /** + * The read-only `actualBoundingBoxRight` property of the TextMetrics interface is a `double` giving the distance parallel to the baseline from the alignment point given by the CanvasRenderingContext2D.textAlign property to the right side of the bounding rectangle of the given text, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/actualBoundingBoxRight) + */ + readonly actualBoundingBoxRight: number; + /** + * The read-only `alphabeticBaseline` property of the TextMetrics interface is a `double` giving the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline property to the alphabetic baseline of the line box, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/alphabeticBaseline) + */ + readonly alphabeticBaseline: number; + /** + * The read-only `emHeightAscent` property of the TextMetrics interface returns the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline property to the top of the _em_ square in the line box, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/emHeightAscent) + */ + readonly emHeightAscent: number; + /** + * The read-only `emHeightDescent` property of the TextMetrics interface returns the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline property to the bottom of the _em_ square in the line box, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/emHeightDescent) + */ + readonly emHeightDescent: number; + /** + * The read-only `fontBoundingBoxAscent` property of the TextMetrics interface returns the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline attribute, to the top of the highest bounding rectangle of all the fonts used to render the text, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/fontBoundingBoxAscent) + */ + readonly fontBoundingBoxAscent: number; + /** + * The read-only `fontBoundingBoxDescent` property of the TextMetrics interface returns the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline attribute to the bottom of the bounding rectangle of all the fonts used to render the text, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/fontBoundingBoxDescent) + */ + readonly fontBoundingBoxDescent: number; + /** + * The read-only `hangingBaseline` property of the TextMetrics interface is a `double` giving the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline property to the hanging baseline of the line box, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/hangingBaseline) + */ + readonly hangingBaseline: number; + /** + * The read-only `ideographicBaseline` property of the TextMetrics interface is a `double` giving the distance from the horizontal line indicated by the CanvasRenderingContext2D.textBaseline property to the ideographic baseline of the line box, in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/ideographicBaseline) + */ + readonly ideographicBaseline: number; + /** + * The read-only **`width`** property of the TextMetrics interface contains the text's advance width (the width of that inline box) in CSS pixels. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TextMetrics/width) + */ + readonly width: number; +} + +declare var TextMetrics: { + prototype: TextMetrics; + new(): TextMetrics; +}; + +/** + * The **`TransformStream`** interface of the Streams API represents a concrete implementation of the pipe chain _transform stream_ concept. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStream) + */ +interface TransformStream { + /** + * The **`readable`** read-only property of the TransformStream interface returns the ReadableStream instance controlled by this `TransformStream`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStream/readable) + */ + readonly readable: ReadableStream; + /** + * The **`writable`** read-only property of the TransformStream interface returns the WritableStream instance controlled by this `TransformStream`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStream/writable) + */ + readonly writable: WritableStream; +} + +declare var TransformStream: { + prototype: TransformStream; + new(transformer?: Transformer, writableStrategy?: QueuingStrategy, readableStrategy?: QueuingStrategy): TransformStream; +}; + +/** + * The **`TransformStreamDefaultController`** interface of the Streams API provides methods to manipulate the associated ReadableStream and WritableStream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController) + */ +interface TransformStreamDefaultController { + /** + * The **`desiredSize`** read-only property of the TransformStreamDefaultController interface returns the desired size to fill the queue of the associated ReadableStream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/desiredSize) + */ + readonly desiredSize: number | null; + /** + * The **`enqueue()`** method of the TransformStreamDefaultController interface enqueues the given chunk in the readable side of the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/enqueue) + */ + enqueue(chunk?: O): void; + /** + * The **`error()`** method of the TransformStreamDefaultController interface errors both sides of the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/error) + */ + error(reason?: any): void; + /** + * The **`terminate()`** method of the TransformStreamDefaultController interface closes the readable side and errors the writable side of the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/TransformStreamDefaultController/terminate) + */ + terminate(): void; +} + +declare var TransformStreamDefaultController: { + prototype: TransformStreamDefaultController; + new(): TransformStreamDefaultController; +}; + +/** + * The **`URL`** interface is used to parse, construct, normalize, and encode URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL) + */ +interface URL { + /** + * The **`hash`** property of the URL interface is a string containing a `'#'` followed by the fragment identifier of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/hash) + */ + hash: string; + /** + * The **`host`** property of the URL interface is a string containing the host, which is the URL.hostname, and then, if the port of the URL is nonempty, a `':'`, followed by the URL.port of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/host) + */ + host: string; + /** + * The **`hostname`** property of the URL interface is a string containing either the domain name or IP address of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/hostname) + */ + hostname: string; + /** + * The **`href`** property of the URL interface is a string containing the whole URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/href) + */ + href: string; + toString(): string; + /** + * The **`origin`** read-only property of the URL interface returns a string containing the Unicode serialization of the origin of the represented URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/origin) + */ + readonly origin: string; + /** + * The **`password`** property of the URL interface is a string containing the password component of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/password) + */ + password: string; + /** + * The **`pathname`** property of the URL interface represents a location in a hierarchical structure. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/pathname) + */ + pathname: string; + /** + * The **`port`** property of the URL interface is a string containing the port number of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/port) + */ + port: string; + /** + * The **`protocol`** property of the URL interface is a string containing the protocol or scheme of the URL, including the final `':'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/protocol) + */ + protocol: string; + /** + * The **`search`** property of the URL interface is a search string, also called a _query string_, that is a string containing a `'?'` followed by the parameters of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/search) + */ + search: string; + /** + * The **`searchParams`** read-only property of the access to the [MISSING: httpmethod('GET')] decoded query arguments contained in the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/searchParams) + */ + readonly searchParams: URLSearchParams; + /** + * The **`username`** property of the URL interface is a string containing the username component of the URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/username) + */ + username: string; + /** + * The **`toJSON()`** method of the URL interface returns a string containing a serialized version of the URL, although in practice it seems to have the same effect as ```js-nolint toJSON() ``` None. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/toJSON) + */ + toJSON(): string; +} + +declare var URL: { + prototype: URL; + new(url: string | URL, base?: string | URL): URL; + /** + * The **`URL.canParse()`** static method of the URL interface returns a boolean indicating whether or not an absolute URL, or a relative URL combined with a base URL, are parsable and valid. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/canParse_static) + */ + canParse(url: string | URL, base?: string | URL): boolean; + /** + * The **`createObjectURL()`** static method of the URL interface creates a string containing a URL representing the object given in the parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/createObjectURL_static) + */ + createObjectURL(obj: Blob): string; + /** + * The **`URL.parse()`** static method of the URL interface returns a newly created URL object representing the URL defined by the parameters. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/parse_static) + */ + parse(url: string | URL, base?: string | URL): URL | null; + /** + * The **`revokeObjectURL()`** static method of the URL interface releases an existing object URL which was previously created by calling Call this method when you've finished using an object URL to let the browser know not to keep the reference to the file any longer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URL/revokeObjectURL_static) + */ + revokeObjectURL(url: string): void; +}; + +/** + * The **`URLSearchParams`** interface defines utility methods to work with the query string of a URL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams) + */ +interface URLSearchParams { + /** + * The **`size`** read-only property of the URLSearchParams interface indicates the total number of search parameter entries. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/size) + */ + readonly size: number; + /** + * The **`append()`** method of the URLSearchParams interface appends a specified key/value pair as a new search parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/append) + */ + append(name: string, value: string): void; + /** + * The **`delete()`** method of the URLSearchParams interface deletes specified parameters and their associated value(s) from the list of all search parameters. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/delete) + */ + delete(name: string, value?: string): void; + /** + * The **`get()`** method of the URLSearchParams interface returns the first value associated to the given search parameter. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/get) + */ + get(name: string): string | null; + /** + * The **`getAll()`** method of the URLSearchParams interface returns all the values associated with a given search parameter as an array. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/getAll) + */ + getAll(name: string): string[]; + /** + * The **`has()`** method of the URLSearchParams interface returns a boolean value that indicates whether the specified parameter is in the search parameters. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/has) + */ + has(name: string, value?: string): boolean; + /** + * The **`set()`** method of the URLSearchParams interface sets the value associated with a given search parameter to the given value. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/set) + */ + set(name: string, value: string): void; + /** + * The **`URLSearchParams.sort()`** method sorts all key/value pairs contained in this object in place and returns `undefined`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/URLSearchParams/sort) + */ + sort(): void; + toString(): string; + forEach(callbackfn: (value: string, key: string, parent: URLSearchParams) => void, thisArg?: any): void; +} + +declare var URLSearchParams: { + prototype: URLSearchParams; + new(init?: string[][] | Record | string | URLSearchParams): URLSearchParams; +}; + +/** + * The **`VideoColorSpace`** interface of the WebCodecs API represents the color space of a video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoColorSpace) + */ +interface VideoColorSpace { + /** + * The **`fullRange`** read-only property of the VideoColorSpace interface returns `true` if full-range color values are used. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoColorSpace/fullRange) + */ + readonly fullRange: boolean | null; + /** + * The **`matrix`** read-only property of the VideoColorSpace interface returns the matrix coefficient of the video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoColorSpace/matrix) + */ + readonly matrix: VideoMatrixCoefficients | null; + /** + * The **`primaries`** read-only property of the VideoColorSpace interface returns the color gamut of the video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoColorSpace/primaries) + */ + readonly primaries: VideoColorPrimaries | null; + /** + * The **`transfer`** read-only property of the VideoColorSpace interface returns the opto-electronic transfer characteristics of the video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoColorSpace/transfer) + */ + readonly transfer: VideoTransferCharacteristics | null; + /** + * The **`toJSON()`** method of the VideoColorSpace interface is a _serializer_ that returns a JSON representation of the `VideoColorSpace` object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoColorSpace/toJSON) + */ + toJSON(): VideoColorSpaceInit; +} + +declare var VideoColorSpace: { + prototype: VideoColorSpace; + new(init?: VideoColorSpaceInit): VideoColorSpace; +}; + +interface VideoDecoderEventMap { + "dequeue": Event; +} + +/** + * The **`VideoDecoder`** interface of the WebCodecs API decodes chunks of video. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder) + */ +interface VideoDecoder extends EventTarget { + /** + * The **`decodeQueueSize`** read-only property of the VideoDecoder interface returns the number of pending decode requests in the queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/decodeQueueSize) + */ + readonly decodeQueueSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/dequeue_event) */ + ondequeue: ((this: VideoDecoder, ev: Event) => any) | null; + /** + * The **`state`** property of the VideoDecoder interface returns the current state of the underlying codec. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/state) + */ + readonly state: CodecState; + /** + * The **`close()`** method of the VideoDecoder interface ends all pending work and releases system resources. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/close) + */ + close(): void; + /** + * The **`configure()`** method of the VideoDecoder interface enqueues a control message to configure the video decoder for decoding chunks. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/configure) + */ + configure(config: VideoDecoderConfig): void; + /** + * The **`decode()`** method of the VideoDecoder interface enqueues a control message to decode a given chunk of video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/decode) + */ + decode(chunk: EncodedVideoChunk): void; + /** + * The **`flush()`** method of the VideoDecoder interface returns a Promise that resolves once all pending messages in the queue have been completed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/flush) + */ + flush(): Promise; + /** + * The **`reset()`** method of the VideoDecoder interface resets all states including configuration, control messages in the control message queue, and all pending callbacks. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/reset) + */ + reset(): void; + addEventListener(type: K, listener: (this: VideoDecoder, ev: VideoDecoderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: VideoDecoder, ev: VideoDecoderEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var VideoDecoder: { + prototype: VideoDecoder; + new(init: VideoDecoderInit): VideoDecoder; + /** + * The **`isConfigSupported()`** static method of the VideoDecoder interface checks if the given config is supported (that is, if VideoDecoder objects can be successfully configured with the given config). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoDecoder/isConfigSupported_static) + */ + isConfigSupported(config: VideoDecoderConfig): Promise; +}; + +interface VideoEncoderEventMap { + "dequeue": Event; +} + +/** + * The **`VideoEncoder`** interface of the WebCodecs API encodes VideoFrame objects into EncodedVideoChunks. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder) + */ +interface VideoEncoder extends EventTarget { + /** + * The **`encodeQueueSize`** read-only property of the VideoEncoder interface returns the number of pending encode requests in the queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/encodeQueueSize) + */ + readonly encodeQueueSize: number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/dequeue_event) */ + ondequeue: ((this: VideoEncoder, ev: Event) => any) | null; + /** + * The **`state`** read-only property of the VideoEncoder interface returns the current state of the underlying codec. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/state) + */ + readonly state: CodecState; + /** + * The **`close()`** method of the VideoEncoder interface ends all pending work and releases system resources. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/close) + */ + close(): void; + /** + * The **`configure()`** method of the VideoEncoder interface changes the VideoEncoder.state of the encoder to 'configured' and asynchronously prepares the encoder to accept VideoEncoders for encoding with the specified parameters. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/configure) + */ + configure(config: VideoEncoderConfig): void; + /** + * The **`encode()`** method of the VideoEncoder interface asynchronously encodes a VideoFrame. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/encode) + */ + encode(frame: VideoFrame, options?: VideoEncoderEncodeOptions): void; + /** + * The **`flush()`** method of the VideoEncoder interface forces all pending encodes to complete. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/flush) + */ + flush(): Promise; + /** + * The **`reset()`** method of the VideoEncoder interface synchronously cancels all pending encodes and callbacks, frees all underlying resources and sets the VideoEncoder.state to 'unconfigured'. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/reset) + */ + reset(): void; + addEventListener(type: K, listener: (this: VideoEncoder, ev: VideoEncoderEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: VideoEncoder, ev: VideoEncoderEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var VideoEncoder: { + prototype: VideoEncoder; + new(init: VideoEncoderInit): VideoEncoder; + /** + * The **`isConfigSupported()`** static method of the VideoEncoder interface checks if VideoEncoder can be successfully configured with the given config. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoEncoder/isConfigSupported_static) + */ + isConfigSupported(config: VideoEncoderConfig): Promise; +}; + +/** + * The **`VideoFrame`** interface of the Web Codecs API represents a frame of a video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame) + */ +interface VideoFrame { + /** + * The **`codedHeight`** property of the VideoFrame interface returns the height of the VideoFrame in pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/codedHeight) + */ + readonly codedHeight: number; + /** + * The **`codedRect`** property of the VideoFrame interface returns a DOMRectReadOnly with the width and height matching VideoFrame.codedWidth and VideoFrame.codedHeight. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/codedRect) + */ + readonly codedRect: DOMRectReadOnly | null; + /** + * The **`codedWidth`** property of the VideoFrame interface returns the width of the `VideoFrame` in pixels, potentially including non-visible padding, and prior to considering potential ratio adjustments. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/codedWidth) + */ + readonly codedWidth: number; + /** + * The **`colorSpace`** property of the VideoFrame interface returns a VideoColorSpace object representing the color space of the video. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/colorSpace) + */ + readonly colorSpace: VideoColorSpace; + /** + * The **`displayHeight`** property of the VideoFrame interface returns the height of the `VideoFrame` after applying aspect ratio adjustments. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/displayHeight) + */ + readonly displayHeight: number; + /** + * The **`displayWidth`** property of the VideoFrame interface returns the width of the `VideoFrame` after applying aspect ratio adjustments. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/displayWidth) + */ + readonly displayWidth: number; + /** + * The **`duration`** property of the VideoFrame interface returns an integer indicating the duration of the video in microseconds. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/duration) + */ + readonly duration: number | null; + /** + * The **`format`** property of the VideoFrame interface returns the pixel format of the `VideoFrame`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/format) + */ + readonly format: VideoPixelFormat | null; + /** + * The **`timestamp`** property of the VideoFrame interface returns an integer indicating the timestamp of the video in microseconds. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/timestamp) + */ + readonly timestamp: number; + /** + * The **`visibleRect`** property of the VideoFrame interface returns a DOMRectReadOnly describing the visible rectangle of pixels for this `VideoFrame`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/visibleRect) + */ + readonly visibleRect: DOMRectReadOnly | null; + /** + * The **`allocationSize()`** method of the VideoFrame interface returns the number of bytes required to hold the video as filtered by options passed into the method. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/allocationSize) + */ + allocationSize(options?: VideoFrameCopyToOptions): number; + /** + * The **`clone()`** method of the VideoFrame interface creates a new `VideoFrame` object referencing the same media resource as the original. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/clone) + */ + clone(): VideoFrame; + /** + * The **`close()`** method of the VideoFrame interface clears all states and releases the reference to the media resource. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/close) + */ + close(): void; + /** + * The **`copyTo()`** method of the VideoFrame interface copies the contents of the `VideoFrame` to an `ArrayBuffer`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/VideoFrame/copyTo) + */ + copyTo(destination: AllowSharedBufferSource, options?: VideoFrameCopyToOptions): Promise; +} + +declare var VideoFrame: { + prototype: VideoFrame; + new(image: CanvasImageSource, init?: VideoFrameInit): VideoFrame; + new(data: AllowSharedBufferSource, init: VideoFrameBufferInit): VideoFrame; +}; + +/** + * The **`WEBGL_color_buffer_float`** extension is part of the WebGL API and adds the ability to render to 32-bit floating-point color buffers. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_color_buffer_float) + */ +interface WEBGL_color_buffer_float { + readonly RGBA32F_EXT: 0x8814; + readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211; + readonly UNSIGNED_NORMALIZED_EXT: 0x8C17; +} + +/** + * The **`WEBGL_compressed_texture_astc`** extension is part of the WebGL API and exposes Adaptive Scalable Texture Compression (ASTC) compressed texture formats to WebGL. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_astc) + */ +interface WEBGL_compressed_texture_astc { + /** + * The **`WEBGL_compressed_texture_astc.getSupportedProfiles()`** method returns an array of strings containing the names of the ASTC profiles supported by the implementation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_astc/getSupportedProfiles) + */ + getSupportedProfiles(): string[]; + readonly COMPRESSED_RGBA_ASTC_4x4_KHR: 0x93B0; + readonly COMPRESSED_RGBA_ASTC_5x4_KHR: 0x93B1; + readonly COMPRESSED_RGBA_ASTC_5x5_KHR: 0x93B2; + readonly COMPRESSED_RGBA_ASTC_6x5_KHR: 0x93B3; + readonly COMPRESSED_RGBA_ASTC_6x6_KHR: 0x93B4; + readonly COMPRESSED_RGBA_ASTC_8x5_KHR: 0x93B5; + readonly COMPRESSED_RGBA_ASTC_8x6_KHR: 0x93B6; + readonly COMPRESSED_RGBA_ASTC_8x8_KHR: 0x93B7; + readonly COMPRESSED_RGBA_ASTC_10x5_KHR: 0x93B8; + readonly COMPRESSED_RGBA_ASTC_10x6_KHR: 0x93B9; + readonly COMPRESSED_RGBA_ASTC_10x8_KHR: 0x93BA; + readonly COMPRESSED_RGBA_ASTC_10x10_KHR: 0x93BB; + readonly COMPRESSED_RGBA_ASTC_12x10_KHR: 0x93BC; + readonly COMPRESSED_RGBA_ASTC_12x12_KHR: 0x93BD; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR: 0x93D0; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR: 0x93D1; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR: 0x93D2; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR: 0x93D3; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR: 0x93D4; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR: 0x93D5; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR: 0x93D6; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR: 0x93D7; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR: 0x93D8; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR: 0x93D9; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR: 0x93DA; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR: 0x93DB; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR: 0x93DC; + readonly COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR: 0x93DD; +} + +/** + * The **`WEBGL_compressed_texture_etc`** extension is part of the WebGL API and exposes 10 ETC/EAC compressed texture formats. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_etc) + */ +interface WEBGL_compressed_texture_etc { + readonly COMPRESSED_R11_EAC: 0x9270; + readonly COMPRESSED_SIGNED_R11_EAC: 0x9271; + readonly COMPRESSED_RG11_EAC: 0x9272; + readonly COMPRESSED_SIGNED_RG11_EAC: 0x9273; + readonly COMPRESSED_RGB8_ETC2: 0x9274; + readonly COMPRESSED_SRGB8_ETC2: 0x9275; + readonly COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276; + readonly COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277; + readonly COMPRESSED_RGBA8_ETC2_EAC: 0x9278; + readonly COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279; +} + +/** + * The **`WEBGL_compressed_texture_etc1`** extension is part of the WebGL API and exposes the ETC1 compressed texture format. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_etc1) + */ +interface WEBGL_compressed_texture_etc1 { + readonly COMPRESSED_RGB_ETC1_WEBGL: 0x8D64; +} + +/** + * The **`WEBGL_compressed_texture_pvrtc`** extension is part of the WebGL API and exposes four PVRTC compressed texture formats. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_pvrtc) + */ +interface WEBGL_compressed_texture_pvrtc { + readonly COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8C00; + readonly COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8C01; + readonly COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8C02; + readonly COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8C03; +} + +/** + * The **`WEBGL_compressed_texture_s3tc`** extension is part of the WebGL API and exposes four S3TC compressed texture formats. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_s3tc) + */ +interface WEBGL_compressed_texture_s3tc { + readonly COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83F0; + readonly COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83F1; + readonly COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83F2; + readonly COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83F3; +} + +/** + * The **`WEBGL_compressed_texture_s3tc_srgb`** extension is part of the WebGL API and exposes four S3TC compressed texture formats for the sRGB colorspace. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_compressed_texture_s3tc_srgb) + */ +interface WEBGL_compressed_texture_s3tc_srgb { + readonly COMPRESSED_SRGB_S3TC_DXT1_EXT: 0x8C4C; + readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: 0x8C4D; + readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: 0x8C4E; + readonly COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: 0x8C4F; +} + +/** + * The **`WEBGL_debug_renderer_info`** extension is part of the WebGL API and exposes two constants with information about the graphics driver for debugging purposes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_debug_renderer_info) + */ +interface WEBGL_debug_renderer_info { + readonly UNMASKED_VENDOR_WEBGL: 0x9245; + readonly UNMASKED_RENDERER_WEBGL: 0x9246; +} + +/** + * The **`WEBGL_debug_shaders`** extension is part of the WebGL API and exposes a method to debug shaders from privileged contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_debug_shaders) + */ +interface WEBGL_debug_shaders { + /** + * The **`WEBGL_debug_shaders.getTranslatedShaderSource()`** method is part of the WebGL API and allows you to debug a translated shader. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_debug_shaders/getTranslatedShaderSource) + */ + getTranslatedShaderSource(shader: WebGLShader): string; +} + +/** + * The **`WEBGL_depth_texture`** extension is part of the WebGL API and defines 2D depth and depth-stencil textures. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_depth_texture) + */ +interface WEBGL_depth_texture { + readonly UNSIGNED_INT_24_8_WEBGL: 0x84FA; +} + +/** + * The **`WEBGL_draw_buffers`** extension is part of the WebGL API and enables a fragment shader to write to several textures, which is useful for deferred shading, for example. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_draw_buffers) + */ +interface WEBGL_draw_buffers { + /** + * The **`WEBGL_draw_buffers.drawBuffersWEBGL()`** method is part of the WebGL API and allows you to define the draw buffers to which all fragment colors are written. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_draw_buffers/drawBuffersWEBGL) + */ + drawBuffersWEBGL(buffers: GLenum[]): void; + readonly COLOR_ATTACHMENT0_WEBGL: 0x8CE0; + readonly COLOR_ATTACHMENT1_WEBGL: 0x8CE1; + readonly COLOR_ATTACHMENT2_WEBGL: 0x8CE2; + readonly COLOR_ATTACHMENT3_WEBGL: 0x8CE3; + readonly COLOR_ATTACHMENT4_WEBGL: 0x8CE4; + readonly COLOR_ATTACHMENT5_WEBGL: 0x8CE5; + readonly COLOR_ATTACHMENT6_WEBGL: 0x8CE6; + readonly COLOR_ATTACHMENT7_WEBGL: 0x8CE7; + readonly COLOR_ATTACHMENT8_WEBGL: 0x8CE8; + readonly COLOR_ATTACHMENT9_WEBGL: 0x8CE9; + readonly COLOR_ATTACHMENT10_WEBGL: 0x8CEA; + readonly COLOR_ATTACHMENT11_WEBGL: 0x8CEB; + readonly COLOR_ATTACHMENT12_WEBGL: 0x8CEC; + readonly COLOR_ATTACHMENT13_WEBGL: 0x8CED; + readonly COLOR_ATTACHMENT14_WEBGL: 0x8CEE; + readonly COLOR_ATTACHMENT15_WEBGL: 0x8CEF; + readonly DRAW_BUFFER0_WEBGL: 0x8825; + readonly DRAW_BUFFER1_WEBGL: 0x8826; + readonly DRAW_BUFFER2_WEBGL: 0x8827; + readonly DRAW_BUFFER3_WEBGL: 0x8828; + readonly DRAW_BUFFER4_WEBGL: 0x8829; + readonly DRAW_BUFFER5_WEBGL: 0x882A; + readonly DRAW_BUFFER6_WEBGL: 0x882B; + readonly DRAW_BUFFER7_WEBGL: 0x882C; + readonly DRAW_BUFFER8_WEBGL: 0x882D; + readonly DRAW_BUFFER9_WEBGL: 0x882E; + readonly DRAW_BUFFER10_WEBGL: 0x882F; + readonly DRAW_BUFFER11_WEBGL: 0x8830; + readonly DRAW_BUFFER12_WEBGL: 0x8831; + readonly DRAW_BUFFER13_WEBGL: 0x8832; + readonly DRAW_BUFFER14_WEBGL: 0x8833; + readonly DRAW_BUFFER15_WEBGL: 0x8834; + readonly MAX_COLOR_ATTACHMENTS_WEBGL: 0x8CDF; + readonly MAX_DRAW_BUFFERS_WEBGL: 0x8824; +} + +/** + * The **WEBGL_lose_context** extension is part of the WebGL API and exposes functions to simulate losing and restoring a WebGLRenderingContext. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_lose_context) + */ +interface WEBGL_lose_context { + /** + * The **WEBGL_lose_context.loseContext()** method is part of the WebGL API and allows you to simulate losing the context of a WebGLRenderingContext context. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_lose_context/loseContext) + */ + loseContext(): void; + /** + * The **WEBGL_lose_context.restoreContext()** method is part of the WebGL API and allows you to simulate restoring the context of a WebGLRenderingContext object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_lose_context/restoreContext) + */ + restoreContext(): void; +} + +/** + * The **`WEBGL_multi_draw`** extension is part of the WebGL API and allows to render more than one primitive with a single function call. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw) + */ +interface WEBGL_multi_draw { + /** + * The **`WEBGL_multi_draw.multiDrawArraysInstancedWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawArraysInstancedWEBGL) + */ + multiDrawArraysInstancedWEBGL(mode: GLenum, firstsList: Int32Array | GLint[], firstsOffset: number, countsList: Int32Array | GLsizei[], countsOffset: number, instanceCountsList: Int32Array | GLsizei[], instanceCountsOffset: number, drawcount: GLsizei): void; + /** + * The **`WEBGL_multi_draw.multiDrawArraysWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawArraysWEBGL) + */ + multiDrawArraysWEBGL(mode: GLenum, firstsList: Int32Array | GLint[], firstsOffset: number, countsList: Int32Array | GLsizei[], countsOffset: number, drawcount: GLsizei): void; + /** + * The **`WEBGL_multi_draw.multiDrawElementsInstancedWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawElementsInstancedWEBGL) + */ + multiDrawElementsInstancedWEBGL(mode: GLenum, countsList: Int32Array | GLsizei[], countsOffset: number, type: GLenum, offsetsList: Int32Array | GLsizei[], offsetsOffset: number, instanceCountsList: Int32Array | GLsizei[], instanceCountsOffset: number, drawcount: GLsizei): void; + /** + * The **`WEBGL_multi_draw.multiDrawElementsWEBGL()`** method of the WebGL API renders multiple primitives from array data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WEBGL_multi_draw/multiDrawElementsWEBGL) + */ + multiDrawElementsWEBGL(mode: GLenum, countsList: Int32Array | GLsizei[], countsOffset: number, type: GLenum, offsetsList: Int32Array | GLsizei[], offsetsOffset: number, drawcount: GLsizei): void; +} + +/** + * The **WebGL2RenderingContext** interface provides the OpenGL ES 3.0 rendering context for the drawing surface of an HTML canvas element. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext) + */ +interface WebGL2RenderingContext extends WebGL2RenderingContextBase, WebGL2RenderingContextOverloads, WebGLRenderingContextBase { +} + +declare var WebGL2RenderingContext: { + prototype: WebGL2RenderingContext; + new(): WebGL2RenderingContext; + readonly READ_BUFFER: 0x0C02; + readonly UNPACK_ROW_LENGTH: 0x0CF2; + readonly UNPACK_SKIP_ROWS: 0x0CF3; + readonly UNPACK_SKIP_PIXELS: 0x0CF4; + readonly PACK_ROW_LENGTH: 0x0D02; + readonly PACK_SKIP_ROWS: 0x0D03; + readonly PACK_SKIP_PIXELS: 0x0D04; + readonly COLOR: 0x1800; + readonly DEPTH: 0x1801; + readonly STENCIL: 0x1802; + readonly RED: 0x1903; + readonly RGB8: 0x8051; + readonly RGB10_A2: 0x8059; + readonly TEXTURE_BINDING_3D: 0x806A; + readonly UNPACK_SKIP_IMAGES: 0x806D; + readonly UNPACK_IMAGE_HEIGHT: 0x806E; + readonly TEXTURE_3D: 0x806F; + readonly TEXTURE_WRAP_R: 0x8072; + readonly MAX_3D_TEXTURE_SIZE: 0x8073; + readonly UNSIGNED_INT_2_10_10_10_REV: 0x8368; + readonly MAX_ELEMENTS_VERTICES: 0x80E8; + readonly MAX_ELEMENTS_INDICES: 0x80E9; + readonly TEXTURE_MIN_LOD: 0x813A; + readonly TEXTURE_MAX_LOD: 0x813B; + readonly TEXTURE_BASE_LEVEL: 0x813C; + readonly TEXTURE_MAX_LEVEL: 0x813D; + readonly MIN: 0x8007; + readonly MAX: 0x8008; + readonly DEPTH_COMPONENT24: 0x81A6; + readonly MAX_TEXTURE_LOD_BIAS: 0x84FD; + readonly TEXTURE_COMPARE_MODE: 0x884C; + readonly TEXTURE_COMPARE_FUNC: 0x884D; + readonly CURRENT_QUERY: 0x8865; + readonly QUERY_RESULT: 0x8866; + readonly QUERY_RESULT_AVAILABLE: 0x8867; + readonly STREAM_READ: 0x88E1; + readonly STREAM_COPY: 0x88E2; + readonly STATIC_READ: 0x88E5; + readonly STATIC_COPY: 0x88E6; + readonly DYNAMIC_READ: 0x88E9; + readonly DYNAMIC_COPY: 0x88EA; + readonly MAX_DRAW_BUFFERS: 0x8824; + readonly DRAW_BUFFER0: 0x8825; + readonly DRAW_BUFFER1: 0x8826; + readonly DRAW_BUFFER2: 0x8827; + readonly DRAW_BUFFER3: 0x8828; + readonly DRAW_BUFFER4: 0x8829; + readonly DRAW_BUFFER5: 0x882A; + readonly DRAW_BUFFER6: 0x882B; + readonly DRAW_BUFFER7: 0x882C; + readonly DRAW_BUFFER8: 0x882D; + readonly DRAW_BUFFER9: 0x882E; + readonly DRAW_BUFFER10: 0x882F; + readonly DRAW_BUFFER11: 0x8830; + readonly DRAW_BUFFER12: 0x8831; + readonly DRAW_BUFFER13: 0x8832; + readonly DRAW_BUFFER14: 0x8833; + readonly DRAW_BUFFER15: 0x8834; + readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49; + readonly MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A; + readonly SAMPLER_3D: 0x8B5F; + readonly SAMPLER_2D_SHADOW: 0x8B62; + readonly FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B; + readonly PIXEL_PACK_BUFFER: 0x88EB; + readonly PIXEL_UNPACK_BUFFER: 0x88EC; + readonly PIXEL_PACK_BUFFER_BINDING: 0x88ED; + readonly PIXEL_UNPACK_BUFFER_BINDING: 0x88EF; + readonly FLOAT_MAT2x3: 0x8B65; + readonly FLOAT_MAT2x4: 0x8B66; + readonly FLOAT_MAT3x2: 0x8B67; + readonly FLOAT_MAT3x4: 0x8B68; + readonly FLOAT_MAT4x2: 0x8B69; + readonly FLOAT_MAT4x3: 0x8B6A; + readonly SRGB: 0x8C40; + readonly SRGB8: 0x8C41; + readonly SRGB8_ALPHA8: 0x8C43; + readonly COMPARE_REF_TO_TEXTURE: 0x884E; + readonly RGBA32F: 0x8814; + readonly RGB32F: 0x8815; + readonly RGBA16F: 0x881A; + readonly RGB16F: 0x881B; + readonly VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD; + readonly MAX_ARRAY_TEXTURE_LAYERS: 0x88FF; + readonly MIN_PROGRAM_TEXEL_OFFSET: 0x8904; + readonly MAX_PROGRAM_TEXEL_OFFSET: 0x8905; + readonly MAX_VARYING_COMPONENTS: 0x8B4B; + readonly TEXTURE_2D_ARRAY: 0x8C1A; + readonly TEXTURE_BINDING_2D_ARRAY: 0x8C1D; + readonly R11F_G11F_B10F: 0x8C3A; + readonly UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B; + readonly RGB9_E5: 0x8C3D; + readonly UNSIGNED_INT_5_9_9_9_REV: 0x8C3E; + readonly TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F; + readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80; + readonly TRANSFORM_FEEDBACK_VARYINGS: 0x8C83; + readonly TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84; + readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85; + readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88; + readonly RASTERIZER_DISCARD: 0x8C89; + readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A; + readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B; + readonly INTERLEAVED_ATTRIBS: 0x8C8C; + readonly SEPARATE_ATTRIBS: 0x8C8D; + readonly TRANSFORM_FEEDBACK_BUFFER: 0x8C8E; + readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F; + readonly RGBA32UI: 0x8D70; + readonly RGB32UI: 0x8D71; + readonly RGBA16UI: 0x8D76; + readonly RGB16UI: 0x8D77; + readonly RGBA8UI: 0x8D7C; + readonly RGB8UI: 0x8D7D; + readonly RGBA32I: 0x8D82; + readonly RGB32I: 0x8D83; + readonly RGBA16I: 0x8D88; + readonly RGB16I: 0x8D89; + readonly RGBA8I: 0x8D8E; + readonly RGB8I: 0x8D8F; + readonly RED_INTEGER: 0x8D94; + readonly RGB_INTEGER: 0x8D98; + readonly RGBA_INTEGER: 0x8D99; + readonly SAMPLER_2D_ARRAY: 0x8DC1; + readonly SAMPLER_2D_ARRAY_SHADOW: 0x8DC4; + readonly SAMPLER_CUBE_SHADOW: 0x8DC5; + readonly UNSIGNED_INT_VEC2: 0x8DC6; + readonly UNSIGNED_INT_VEC3: 0x8DC7; + readonly UNSIGNED_INT_VEC4: 0x8DC8; + readonly INT_SAMPLER_2D: 0x8DCA; + readonly INT_SAMPLER_3D: 0x8DCB; + readonly INT_SAMPLER_CUBE: 0x8DCC; + readonly INT_SAMPLER_2D_ARRAY: 0x8DCF; + readonly UNSIGNED_INT_SAMPLER_2D: 0x8DD2; + readonly UNSIGNED_INT_SAMPLER_3D: 0x8DD3; + readonly UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4; + readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7; + readonly DEPTH_COMPONENT32F: 0x8CAC; + readonly DEPTH32F_STENCIL8: 0x8CAD; + readonly FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD; + readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210; + readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211; + readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212; + readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213; + readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214; + readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215; + readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216; + readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217; + readonly FRAMEBUFFER_DEFAULT: 0x8218; + readonly UNSIGNED_INT_24_8: 0x84FA; + readonly DEPTH24_STENCIL8: 0x88F0; + readonly UNSIGNED_NORMALIZED: 0x8C17; + readonly DRAW_FRAMEBUFFER_BINDING: 0x8CA6; + readonly READ_FRAMEBUFFER: 0x8CA8; + readonly DRAW_FRAMEBUFFER: 0x8CA9; + readonly READ_FRAMEBUFFER_BINDING: 0x8CAA; + readonly RENDERBUFFER_SAMPLES: 0x8CAB; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4; + readonly MAX_COLOR_ATTACHMENTS: 0x8CDF; + readonly COLOR_ATTACHMENT1: 0x8CE1; + readonly COLOR_ATTACHMENT2: 0x8CE2; + readonly COLOR_ATTACHMENT3: 0x8CE3; + readonly COLOR_ATTACHMENT4: 0x8CE4; + readonly COLOR_ATTACHMENT5: 0x8CE5; + readonly COLOR_ATTACHMENT6: 0x8CE6; + readonly COLOR_ATTACHMENT7: 0x8CE7; + readonly COLOR_ATTACHMENT8: 0x8CE8; + readonly COLOR_ATTACHMENT9: 0x8CE9; + readonly COLOR_ATTACHMENT10: 0x8CEA; + readonly COLOR_ATTACHMENT11: 0x8CEB; + readonly COLOR_ATTACHMENT12: 0x8CEC; + readonly COLOR_ATTACHMENT13: 0x8CED; + readonly COLOR_ATTACHMENT14: 0x8CEE; + readonly COLOR_ATTACHMENT15: 0x8CEF; + readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56; + readonly MAX_SAMPLES: 0x8D57; + readonly HALF_FLOAT: 0x140B; + readonly RG: 0x8227; + readonly RG_INTEGER: 0x8228; + readonly R8: 0x8229; + readonly RG8: 0x822B; + readonly R16F: 0x822D; + readonly R32F: 0x822E; + readonly RG16F: 0x822F; + readonly RG32F: 0x8230; + readonly R8I: 0x8231; + readonly R8UI: 0x8232; + readonly R16I: 0x8233; + readonly R16UI: 0x8234; + readonly R32I: 0x8235; + readonly R32UI: 0x8236; + readonly RG8I: 0x8237; + readonly RG8UI: 0x8238; + readonly RG16I: 0x8239; + readonly RG16UI: 0x823A; + readonly RG32I: 0x823B; + readonly RG32UI: 0x823C; + readonly VERTEX_ARRAY_BINDING: 0x85B5; + readonly R8_SNORM: 0x8F94; + readonly RG8_SNORM: 0x8F95; + readonly RGB8_SNORM: 0x8F96; + readonly RGBA8_SNORM: 0x8F97; + readonly SIGNED_NORMALIZED: 0x8F9C; + readonly COPY_READ_BUFFER: 0x8F36; + readonly COPY_WRITE_BUFFER: 0x8F37; + readonly COPY_READ_BUFFER_BINDING: 0x8F36; + readonly COPY_WRITE_BUFFER_BINDING: 0x8F37; + readonly UNIFORM_BUFFER: 0x8A11; + readonly UNIFORM_BUFFER_BINDING: 0x8A28; + readonly UNIFORM_BUFFER_START: 0x8A29; + readonly UNIFORM_BUFFER_SIZE: 0x8A2A; + readonly MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B; + readonly MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D; + readonly MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E; + readonly MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F; + readonly MAX_UNIFORM_BLOCK_SIZE: 0x8A30; + readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31; + readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33; + readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34; + readonly ACTIVE_UNIFORM_BLOCKS: 0x8A36; + readonly UNIFORM_TYPE: 0x8A37; + readonly UNIFORM_SIZE: 0x8A38; + readonly UNIFORM_BLOCK_INDEX: 0x8A3A; + readonly UNIFORM_OFFSET: 0x8A3B; + readonly UNIFORM_ARRAY_STRIDE: 0x8A3C; + readonly UNIFORM_MATRIX_STRIDE: 0x8A3D; + readonly UNIFORM_IS_ROW_MAJOR: 0x8A3E; + readonly UNIFORM_BLOCK_BINDING: 0x8A3F; + readonly UNIFORM_BLOCK_DATA_SIZE: 0x8A40; + readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42; + readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43; + readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44; + readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46; + readonly INVALID_INDEX: 0xFFFFFFFF; + readonly MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122; + readonly MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125; + readonly MAX_SERVER_WAIT_TIMEOUT: 0x9111; + readonly OBJECT_TYPE: 0x9112; + readonly SYNC_CONDITION: 0x9113; + readonly SYNC_STATUS: 0x9114; + readonly SYNC_FLAGS: 0x9115; + readonly SYNC_FENCE: 0x9116; + readonly SYNC_GPU_COMMANDS_COMPLETE: 0x9117; + readonly UNSIGNALED: 0x9118; + readonly SIGNALED: 0x9119; + readonly ALREADY_SIGNALED: 0x911A; + readonly TIMEOUT_EXPIRED: 0x911B; + readonly CONDITION_SATISFIED: 0x911C; + readonly WAIT_FAILED: 0x911D; + readonly SYNC_FLUSH_COMMANDS_BIT: 0x00000001; + readonly VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE; + readonly ANY_SAMPLES_PASSED: 0x8C2F; + readonly ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A; + readonly SAMPLER_BINDING: 0x8919; + readonly RGB10_A2UI: 0x906F; + readonly INT_2_10_10_10_REV: 0x8D9F; + readonly TRANSFORM_FEEDBACK: 0x8E22; + readonly TRANSFORM_FEEDBACK_PAUSED: 0x8E23; + readonly TRANSFORM_FEEDBACK_ACTIVE: 0x8E24; + readonly TRANSFORM_FEEDBACK_BINDING: 0x8E25; + readonly TEXTURE_IMMUTABLE_FORMAT: 0x912F; + readonly MAX_ELEMENT_INDEX: 0x8D6B; + readonly TEXTURE_IMMUTABLE_LEVELS: 0x82DF; + readonly TIMEOUT_IGNORED: -1; + readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247; + readonly DEPTH_BUFFER_BIT: 0x00000100; + readonly STENCIL_BUFFER_BIT: 0x00000400; + readonly COLOR_BUFFER_BIT: 0x00004000; + readonly POINTS: 0x0000; + readonly LINES: 0x0001; + readonly LINE_LOOP: 0x0002; + readonly LINE_STRIP: 0x0003; + readonly TRIANGLES: 0x0004; + readonly TRIANGLE_STRIP: 0x0005; + readonly TRIANGLE_FAN: 0x0006; + readonly ZERO: 0; + readonly ONE: 1; + readonly SRC_COLOR: 0x0300; + readonly ONE_MINUS_SRC_COLOR: 0x0301; + readonly SRC_ALPHA: 0x0302; + readonly ONE_MINUS_SRC_ALPHA: 0x0303; + readonly DST_ALPHA: 0x0304; + readonly ONE_MINUS_DST_ALPHA: 0x0305; + readonly DST_COLOR: 0x0306; + readonly ONE_MINUS_DST_COLOR: 0x0307; + readonly SRC_ALPHA_SATURATE: 0x0308; + readonly FUNC_ADD: 0x8006; + readonly BLEND_EQUATION: 0x8009; + readonly BLEND_EQUATION_RGB: 0x8009; + readonly BLEND_EQUATION_ALPHA: 0x883D; + readonly FUNC_SUBTRACT: 0x800A; + readonly FUNC_REVERSE_SUBTRACT: 0x800B; + readonly BLEND_DST_RGB: 0x80C8; + readonly BLEND_SRC_RGB: 0x80C9; + readonly BLEND_DST_ALPHA: 0x80CA; + readonly BLEND_SRC_ALPHA: 0x80CB; + readonly CONSTANT_COLOR: 0x8001; + readonly ONE_MINUS_CONSTANT_COLOR: 0x8002; + readonly CONSTANT_ALPHA: 0x8003; + readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004; + readonly BLEND_COLOR: 0x8005; + readonly ARRAY_BUFFER: 0x8892; + readonly ELEMENT_ARRAY_BUFFER: 0x8893; + readonly ARRAY_BUFFER_BINDING: 0x8894; + readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895; + readonly STREAM_DRAW: 0x88E0; + readonly STATIC_DRAW: 0x88E4; + readonly DYNAMIC_DRAW: 0x88E8; + readonly BUFFER_SIZE: 0x8764; + readonly BUFFER_USAGE: 0x8765; + readonly CURRENT_VERTEX_ATTRIB: 0x8626; + readonly FRONT: 0x0404; + readonly BACK: 0x0405; + readonly FRONT_AND_BACK: 0x0408; + readonly CULL_FACE: 0x0B44; + readonly BLEND: 0x0BE2; + readonly DITHER: 0x0BD0; + readonly STENCIL_TEST: 0x0B90; + readonly DEPTH_TEST: 0x0B71; + readonly SCISSOR_TEST: 0x0C11; + readonly POLYGON_OFFSET_FILL: 0x8037; + readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E; + readonly SAMPLE_COVERAGE: 0x80A0; + readonly NO_ERROR: 0; + readonly INVALID_ENUM: 0x0500; + readonly INVALID_VALUE: 0x0501; + readonly INVALID_OPERATION: 0x0502; + readonly OUT_OF_MEMORY: 0x0505; + readonly CW: 0x0900; + readonly CCW: 0x0901; + readonly LINE_WIDTH: 0x0B21; + readonly ALIASED_POINT_SIZE_RANGE: 0x846D; + readonly ALIASED_LINE_WIDTH_RANGE: 0x846E; + readonly CULL_FACE_MODE: 0x0B45; + readonly FRONT_FACE: 0x0B46; + readonly DEPTH_RANGE: 0x0B70; + readonly DEPTH_WRITEMASK: 0x0B72; + readonly DEPTH_CLEAR_VALUE: 0x0B73; + readonly DEPTH_FUNC: 0x0B74; + readonly STENCIL_CLEAR_VALUE: 0x0B91; + readonly STENCIL_FUNC: 0x0B92; + readonly STENCIL_FAIL: 0x0B94; + readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95; + readonly STENCIL_PASS_DEPTH_PASS: 0x0B96; + readonly STENCIL_REF: 0x0B97; + readonly STENCIL_VALUE_MASK: 0x0B93; + readonly STENCIL_WRITEMASK: 0x0B98; + readonly STENCIL_BACK_FUNC: 0x8800; + readonly STENCIL_BACK_FAIL: 0x8801; + readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802; + readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803; + readonly STENCIL_BACK_REF: 0x8CA3; + readonly STENCIL_BACK_VALUE_MASK: 0x8CA4; + readonly STENCIL_BACK_WRITEMASK: 0x8CA5; + readonly VIEWPORT: 0x0BA2; + readonly SCISSOR_BOX: 0x0C10; + readonly COLOR_CLEAR_VALUE: 0x0C22; + readonly COLOR_WRITEMASK: 0x0C23; + readonly UNPACK_ALIGNMENT: 0x0CF5; + readonly PACK_ALIGNMENT: 0x0D05; + readonly MAX_TEXTURE_SIZE: 0x0D33; + readonly MAX_VIEWPORT_DIMS: 0x0D3A; + readonly SUBPIXEL_BITS: 0x0D50; + readonly RED_BITS: 0x0D52; + readonly GREEN_BITS: 0x0D53; + readonly BLUE_BITS: 0x0D54; + readonly ALPHA_BITS: 0x0D55; + readonly DEPTH_BITS: 0x0D56; + readonly STENCIL_BITS: 0x0D57; + readonly POLYGON_OFFSET_UNITS: 0x2A00; + readonly POLYGON_OFFSET_FACTOR: 0x8038; + readonly TEXTURE_BINDING_2D: 0x8069; + readonly SAMPLE_BUFFERS: 0x80A8; + readonly SAMPLES: 0x80A9; + readonly SAMPLE_COVERAGE_VALUE: 0x80AA; + readonly SAMPLE_COVERAGE_INVERT: 0x80AB; + readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3; + readonly DONT_CARE: 0x1100; + readonly FASTEST: 0x1101; + readonly NICEST: 0x1102; + readonly GENERATE_MIPMAP_HINT: 0x8192; + readonly BYTE: 0x1400; + readonly UNSIGNED_BYTE: 0x1401; + readonly SHORT: 0x1402; + readonly UNSIGNED_SHORT: 0x1403; + readonly INT: 0x1404; + readonly UNSIGNED_INT: 0x1405; + readonly FLOAT: 0x1406; + readonly DEPTH_COMPONENT: 0x1902; + readonly ALPHA: 0x1906; + readonly RGB: 0x1907; + readonly RGBA: 0x1908; + readonly LUMINANCE: 0x1909; + readonly LUMINANCE_ALPHA: 0x190A; + readonly UNSIGNED_SHORT_4_4_4_4: 0x8033; + readonly UNSIGNED_SHORT_5_5_5_1: 0x8034; + readonly UNSIGNED_SHORT_5_6_5: 0x8363; + readonly FRAGMENT_SHADER: 0x8B30; + readonly VERTEX_SHADER: 0x8B31; + readonly MAX_VERTEX_ATTRIBS: 0x8869; + readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB; + readonly MAX_VARYING_VECTORS: 0x8DFC; + readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D; + readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C; + readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872; + readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD; + readonly SHADER_TYPE: 0x8B4F; + readonly DELETE_STATUS: 0x8B80; + readonly LINK_STATUS: 0x8B82; + readonly VALIDATE_STATUS: 0x8B83; + readonly ATTACHED_SHADERS: 0x8B85; + readonly ACTIVE_UNIFORMS: 0x8B86; + readonly ACTIVE_ATTRIBUTES: 0x8B89; + readonly SHADING_LANGUAGE_VERSION: 0x8B8C; + readonly CURRENT_PROGRAM: 0x8B8D; + readonly NEVER: 0x0200; + readonly LESS: 0x0201; + readonly EQUAL: 0x0202; + readonly LEQUAL: 0x0203; + readonly GREATER: 0x0204; + readonly NOTEQUAL: 0x0205; + readonly GEQUAL: 0x0206; + readonly ALWAYS: 0x0207; + readonly KEEP: 0x1E00; + readonly REPLACE: 0x1E01; + readonly INCR: 0x1E02; + readonly DECR: 0x1E03; + readonly INVERT: 0x150A; + readonly INCR_WRAP: 0x8507; + readonly DECR_WRAP: 0x8508; + readonly VENDOR: 0x1F00; + readonly RENDERER: 0x1F01; + readonly VERSION: 0x1F02; + readonly NEAREST: 0x2600; + readonly LINEAR: 0x2601; + readonly NEAREST_MIPMAP_NEAREST: 0x2700; + readonly LINEAR_MIPMAP_NEAREST: 0x2701; + readonly NEAREST_MIPMAP_LINEAR: 0x2702; + readonly LINEAR_MIPMAP_LINEAR: 0x2703; + readonly TEXTURE_MAG_FILTER: 0x2800; + readonly TEXTURE_MIN_FILTER: 0x2801; + readonly TEXTURE_WRAP_S: 0x2802; + readonly TEXTURE_WRAP_T: 0x2803; + readonly TEXTURE_2D: 0x0DE1; + readonly TEXTURE: 0x1702; + readonly TEXTURE_CUBE_MAP: 0x8513; + readonly TEXTURE_BINDING_CUBE_MAP: 0x8514; + readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515; + readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516; + readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517; + readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518; + readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519; + readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A; + readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C; + readonly TEXTURE0: 0x84C0; + readonly TEXTURE1: 0x84C1; + readonly TEXTURE2: 0x84C2; + readonly TEXTURE3: 0x84C3; + readonly TEXTURE4: 0x84C4; + readonly TEXTURE5: 0x84C5; + readonly TEXTURE6: 0x84C6; + readonly TEXTURE7: 0x84C7; + readonly TEXTURE8: 0x84C8; + readonly TEXTURE9: 0x84C9; + readonly TEXTURE10: 0x84CA; + readonly TEXTURE11: 0x84CB; + readonly TEXTURE12: 0x84CC; + readonly TEXTURE13: 0x84CD; + readonly TEXTURE14: 0x84CE; + readonly TEXTURE15: 0x84CF; + readonly TEXTURE16: 0x84D0; + readonly TEXTURE17: 0x84D1; + readonly TEXTURE18: 0x84D2; + readonly TEXTURE19: 0x84D3; + readonly TEXTURE20: 0x84D4; + readonly TEXTURE21: 0x84D5; + readonly TEXTURE22: 0x84D6; + readonly TEXTURE23: 0x84D7; + readonly TEXTURE24: 0x84D8; + readonly TEXTURE25: 0x84D9; + readonly TEXTURE26: 0x84DA; + readonly TEXTURE27: 0x84DB; + readonly TEXTURE28: 0x84DC; + readonly TEXTURE29: 0x84DD; + readonly TEXTURE30: 0x84DE; + readonly TEXTURE31: 0x84DF; + readonly ACTIVE_TEXTURE: 0x84E0; + readonly REPEAT: 0x2901; + readonly CLAMP_TO_EDGE: 0x812F; + readonly MIRRORED_REPEAT: 0x8370; + readonly FLOAT_VEC2: 0x8B50; + readonly FLOAT_VEC3: 0x8B51; + readonly FLOAT_VEC4: 0x8B52; + readonly INT_VEC2: 0x8B53; + readonly INT_VEC3: 0x8B54; + readonly INT_VEC4: 0x8B55; + readonly BOOL: 0x8B56; + readonly BOOL_VEC2: 0x8B57; + readonly BOOL_VEC3: 0x8B58; + readonly BOOL_VEC4: 0x8B59; + readonly FLOAT_MAT2: 0x8B5A; + readonly FLOAT_MAT3: 0x8B5B; + readonly FLOAT_MAT4: 0x8B5C; + readonly SAMPLER_2D: 0x8B5E; + readonly SAMPLER_CUBE: 0x8B60; + readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622; + readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623; + readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624; + readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625; + readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A; + readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645; + readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F; + readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A; + readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B; + readonly COMPILE_STATUS: 0x8B81; + readonly LOW_FLOAT: 0x8DF0; + readonly MEDIUM_FLOAT: 0x8DF1; + readonly HIGH_FLOAT: 0x8DF2; + readonly LOW_INT: 0x8DF3; + readonly MEDIUM_INT: 0x8DF4; + readonly HIGH_INT: 0x8DF5; + readonly FRAMEBUFFER: 0x8D40; + readonly RENDERBUFFER: 0x8D41; + readonly RGBA4: 0x8056; + readonly RGB5_A1: 0x8057; + readonly RGBA8: 0x8058; + readonly RGB565: 0x8D62; + readonly DEPTH_COMPONENT16: 0x81A5; + readonly STENCIL_INDEX8: 0x8D48; + readonly DEPTH_STENCIL: 0x84F9; + readonly RENDERBUFFER_WIDTH: 0x8D42; + readonly RENDERBUFFER_HEIGHT: 0x8D43; + readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44; + readonly RENDERBUFFER_RED_SIZE: 0x8D50; + readonly RENDERBUFFER_GREEN_SIZE: 0x8D51; + readonly RENDERBUFFER_BLUE_SIZE: 0x8D52; + readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53; + readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54; + readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55; + readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0; + readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3; + readonly COLOR_ATTACHMENT0: 0x8CE0; + readonly DEPTH_ATTACHMENT: 0x8D00; + readonly STENCIL_ATTACHMENT: 0x8D20; + readonly DEPTH_STENCIL_ATTACHMENT: 0x821A; + readonly NONE: 0; + readonly FRAMEBUFFER_COMPLETE: 0x8CD5; + readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6; + readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7; + readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9; + readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD; + readonly FRAMEBUFFER_BINDING: 0x8CA6; + readonly RENDERBUFFER_BINDING: 0x8CA7; + readonly MAX_RENDERBUFFER_SIZE: 0x84E8; + readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506; + readonly UNPACK_FLIP_Y_WEBGL: 0x9240; + readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241; + readonly CONTEXT_LOST_WEBGL: 0x9242; + readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243; + readonly BROWSER_DEFAULT_WEBGL: 0x9244; +}; + +interface WebGL2RenderingContextBase { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/beginQuery) */ + beginQuery(target: GLenum, query: WebGLQuery): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/beginTransformFeedback) */ + beginTransformFeedback(primitiveMode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bindBufferBase) */ + bindBufferBase(target: GLenum, index: GLuint, buffer: WebGLBuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bindBufferRange) */ + bindBufferRange(target: GLenum, index: GLuint, buffer: WebGLBuffer | null, offset: GLintptr, size: GLsizeiptr): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bindSampler) */ + bindSampler(unit: GLuint, sampler: WebGLSampler | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bindTransformFeedback) */ + bindTransformFeedback(target: GLenum, tf: WebGLTransformFeedback | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bindVertexArray) */ + bindVertexArray(array: WebGLVertexArrayObject | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/blitFramebuffer) */ + blitFramebuffer(srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferfi(buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferfv(buffer: GLenum, drawbuffer: GLint, values: Float32List, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferiv(buffer: GLenum, drawbuffer: GLint, values: Int32List, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clearBuffer) */ + clearBufferuiv(buffer: GLenum, drawbuffer: GLint, values: Uint32List, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/clientWaitSync) */ + clientWaitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLuint64): GLenum; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/compressedTexImage3D) */ + compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void; + compressedTexImage3D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: number, srcLengthOverride?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/compressedTexSubImage3D) */ + compressedTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, offset: GLintptr): void; + compressedTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, srcData: ArrayBufferView, srcOffset?: number, srcLengthOverride?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/copyBufferSubData) */ + copyBufferSubData(readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/copyTexSubImage3D) */ + copyTexSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/createQuery) */ + createQuery(): WebGLQuery; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/createSampler) */ + createSampler(): WebGLSampler; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/createTransformFeedback) */ + createTransformFeedback(): WebGLTransformFeedback; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/createVertexArray) */ + createVertexArray(): WebGLVertexArrayObject; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/deleteQuery) */ + deleteQuery(query: WebGLQuery | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/deleteSampler) */ + deleteSampler(sampler: WebGLSampler | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/deleteSync) */ + deleteSync(sync: WebGLSync | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/deleteTransformFeedback) */ + deleteTransformFeedback(tf: WebGLTransformFeedback | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/deleteVertexArray) */ + deleteVertexArray(vertexArray: WebGLVertexArrayObject | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/drawArraysInstanced) */ + drawArraysInstanced(mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/drawBuffers) */ + drawBuffers(buffers: GLenum[]): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/drawElementsInstanced) */ + drawElementsInstanced(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr, instanceCount: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/drawRangeElements) */ + drawRangeElements(mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type: GLenum, offset: GLintptr): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/endQuery) */ + endQuery(target: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/endTransformFeedback) */ + endTransformFeedback(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/fenceSync) */ + fenceSync(condition: GLenum, flags: GLbitfield): WebGLSync | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/framebufferTextureLayer) */ + framebufferTextureLayer(target: GLenum, attachment: GLenum, texture: WebGLTexture | null, level: GLint, layer: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getActiveUniformBlockName) */ + getActiveUniformBlockName(program: WebGLProgram, uniformBlockIndex: GLuint): string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getActiveUniformBlockParameter) */ + getActiveUniformBlockParameter(program: WebGLProgram, uniformBlockIndex: GLuint, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getActiveUniforms) */ + getActiveUniforms(program: WebGLProgram, uniformIndices: GLuint[], pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getBufferSubData) */ + getBufferSubData(target: GLenum, srcByteOffset: GLintptr, dstBuffer: ArrayBufferView, dstOffset?: number, length?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getFragDataLocation) */ + getFragDataLocation(program: WebGLProgram, name: string): GLint; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getIndexedParameter) */ + getIndexedParameter(target: GLenum, index: GLuint): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getInternalformatParameter) */ + getInternalformatParameter(target: GLenum, internalformat: GLenum, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getQuery) */ + getQuery(target: GLenum, pname: GLenum): WebGLQuery | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getQueryParameter) */ + getQueryParameter(query: WebGLQuery, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getSamplerParameter) */ + getSamplerParameter(sampler: WebGLSampler, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getSyncParameter) */ + getSyncParameter(sync: WebGLSync, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getTransformFeedbackVarying) */ + getTransformFeedbackVarying(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getUniformBlockIndex) */ + getUniformBlockIndex(program: WebGLProgram, uniformBlockName: string): GLuint; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/getUniformIndices) */ + getUniformIndices(program: WebGLProgram, uniformNames: string[]): GLuint[] | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/invalidateFramebuffer) */ + invalidateFramebuffer(target: GLenum, attachments: GLenum[]): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/invalidateSubFramebuffer) */ + invalidateSubFramebuffer(target: GLenum, attachments: GLenum[], x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/isQuery) */ + isQuery(query: WebGLQuery | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/isSampler) */ + isSampler(sampler: WebGLSampler | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/isSync) */ + isSync(sync: WebGLSync | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/isTransformFeedback) */ + isTransformFeedback(tf: WebGLTransformFeedback | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/isVertexArray) */ + isVertexArray(vertexArray: WebGLVertexArrayObject | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/pauseTransformFeedback) */ + pauseTransformFeedback(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/readBuffer) */ + readBuffer(src: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/renderbufferStorageMultisample) */ + renderbufferStorageMultisample(target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/resumeTransformFeedback) */ + resumeTransformFeedback(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/samplerParameter) */ + samplerParameterf(sampler: WebGLSampler, pname: GLenum, param: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/samplerParameter) */ + samplerParameteri(sampler: WebGLSampler, pname: GLenum, param: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/texImage3D) */ + texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void; + texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource): void; + texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView | null): void; + texImage3D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/texStorage2D) */ + texStorage2D(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/texStorage3D) */ + texStorage3D(target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/texSubImage3D) */ + texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void; + texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, source: TexImageSource): void; + texSubImage3D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView | null, srcOffset?: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/transformFeedbackVaryings) */ + transformFeedbackVaryings(program: WebGLProgram, varyings: string[], bufferMode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform1ui(location: WebGLUniformLocation | null, v0: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform1uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform2ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform2uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform3ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform3uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform4ui(location: WebGLUniformLocation | null, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniform) */ + uniform4uiv(location: WebGLUniformLocation | null, data: Uint32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformBlockBinding) */ + uniformBlockBinding(program: WebGLProgram, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix2x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix2x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix3x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix3x4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix4x2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix4x3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribDivisor) */ + vertexAttribDivisor(index: GLuint, divisor: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribI) */ + vertexAttribI4i(index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribI) */ + vertexAttribI4iv(index: GLuint, values: Int32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribI) */ + vertexAttribI4ui(index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribI) */ + vertexAttribI4uiv(index: GLuint, values: Uint32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/vertexAttribIPointer) */ + vertexAttribIPointer(index: GLuint, size: GLint, type: GLenum, stride: GLsizei, offset: GLintptr): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/waitSync) */ + waitSync(sync: WebGLSync, flags: GLbitfield, timeout: GLint64): void; + readonly READ_BUFFER: 0x0C02; + readonly UNPACK_ROW_LENGTH: 0x0CF2; + readonly UNPACK_SKIP_ROWS: 0x0CF3; + readonly UNPACK_SKIP_PIXELS: 0x0CF4; + readonly PACK_ROW_LENGTH: 0x0D02; + readonly PACK_SKIP_ROWS: 0x0D03; + readonly PACK_SKIP_PIXELS: 0x0D04; + readonly COLOR: 0x1800; + readonly DEPTH: 0x1801; + readonly STENCIL: 0x1802; + readonly RED: 0x1903; + readonly RGB8: 0x8051; + readonly RGB10_A2: 0x8059; + readonly TEXTURE_BINDING_3D: 0x806A; + readonly UNPACK_SKIP_IMAGES: 0x806D; + readonly UNPACK_IMAGE_HEIGHT: 0x806E; + readonly TEXTURE_3D: 0x806F; + readonly TEXTURE_WRAP_R: 0x8072; + readonly MAX_3D_TEXTURE_SIZE: 0x8073; + readonly UNSIGNED_INT_2_10_10_10_REV: 0x8368; + readonly MAX_ELEMENTS_VERTICES: 0x80E8; + readonly MAX_ELEMENTS_INDICES: 0x80E9; + readonly TEXTURE_MIN_LOD: 0x813A; + readonly TEXTURE_MAX_LOD: 0x813B; + readonly TEXTURE_BASE_LEVEL: 0x813C; + readonly TEXTURE_MAX_LEVEL: 0x813D; + readonly MIN: 0x8007; + readonly MAX: 0x8008; + readonly DEPTH_COMPONENT24: 0x81A6; + readonly MAX_TEXTURE_LOD_BIAS: 0x84FD; + readonly TEXTURE_COMPARE_MODE: 0x884C; + readonly TEXTURE_COMPARE_FUNC: 0x884D; + readonly CURRENT_QUERY: 0x8865; + readonly QUERY_RESULT: 0x8866; + readonly QUERY_RESULT_AVAILABLE: 0x8867; + readonly STREAM_READ: 0x88E1; + readonly STREAM_COPY: 0x88E2; + readonly STATIC_READ: 0x88E5; + readonly STATIC_COPY: 0x88E6; + readonly DYNAMIC_READ: 0x88E9; + readonly DYNAMIC_COPY: 0x88EA; + readonly MAX_DRAW_BUFFERS: 0x8824; + readonly DRAW_BUFFER0: 0x8825; + readonly DRAW_BUFFER1: 0x8826; + readonly DRAW_BUFFER2: 0x8827; + readonly DRAW_BUFFER3: 0x8828; + readonly DRAW_BUFFER4: 0x8829; + readonly DRAW_BUFFER5: 0x882A; + readonly DRAW_BUFFER6: 0x882B; + readonly DRAW_BUFFER7: 0x882C; + readonly DRAW_BUFFER8: 0x882D; + readonly DRAW_BUFFER9: 0x882E; + readonly DRAW_BUFFER10: 0x882F; + readonly DRAW_BUFFER11: 0x8830; + readonly DRAW_BUFFER12: 0x8831; + readonly DRAW_BUFFER13: 0x8832; + readonly DRAW_BUFFER14: 0x8833; + readonly DRAW_BUFFER15: 0x8834; + readonly MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8B49; + readonly MAX_VERTEX_UNIFORM_COMPONENTS: 0x8B4A; + readonly SAMPLER_3D: 0x8B5F; + readonly SAMPLER_2D_SHADOW: 0x8B62; + readonly FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8B8B; + readonly PIXEL_PACK_BUFFER: 0x88EB; + readonly PIXEL_UNPACK_BUFFER: 0x88EC; + readonly PIXEL_PACK_BUFFER_BINDING: 0x88ED; + readonly PIXEL_UNPACK_BUFFER_BINDING: 0x88EF; + readonly FLOAT_MAT2x3: 0x8B65; + readonly FLOAT_MAT2x4: 0x8B66; + readonly FLOAT_MAT3x2: 0x8B67; + readonly FLOAT_MAT3x4: 0x8B68; + readonly FLOAT_MAT4x2: 0x8B69; + readonly FLOAT_MAT4x3: 0x8B6A; + readonly SRGB: 0x8C40; + readonly SRGB8: 0x8C41; + readonly SRGB8_ALPHA8: 0x8C43; + readonly COMPARE_REF_TO_TEXTURE: 0x884E; + readonly RGBA32F: 0x8814; + readonly RGB32F: 0x8815; + readonly RGBA16F: 0x881A; + readonly RGB16F: 0x881B; + readonly VERTEX_ATTRIB_ARRAY_INTEGER: 0x88FD; + readonly MAX_ARRAY_TEXTURE_LAYERS: 0x88FF; + readonly MIN_PROGRAM_TEXEL_OFFSET: 0x8904; + readonly MAX_PROGRAM_TEXEL_OFFSET: 0x8905; + readonly MAX_VARYING_COMPONENTS: 0x8B4B; + readonly TEXTURE_2D_ARRAY: 0x8C1A; + readonly TEXTURE_BINDING_2D_ARRAY: 0x8C1D; + readonly R11F_G11F_B10F: 0x8C3A; + readonly UNSIGNED_INT_10F_11F_11F_REV: 0x8C3B; + readonly RGB9_E5: 0x8C3D; + readonly UNSIGNED_INT_5_9_9_9_REV: 0x8C3E; + readonly TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8C7F; + readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8C80; + readonly TRANSFORM_FEEDBACK_VARYINGS: 0x8C83; + readonly TRANSFORM_FEEDBACK_BUFFER_START: 0x8C84; + readonly TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8C85; + readonly TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8C88; + readonly RASTERIZER_DISCARD: 0x8C89; + readonly MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8C8A; + readonly MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8C8B; + readonly INTERLEAVED_ATTRIBS: 0x8C8C; + readonly SEPARATE_ATTRIBS: 0x8C8D; + readonly TRANSFORM_FEEDBACK_BUFFER: 0x8C8E; + readonly TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8C8F; + readonly RGBA32UI: 0x8D70; + readonly RGB32UI: 0x8D71; + readonly RGBA16UI: 0x8D76; + readonly RGB16UI: 0x8D77; + readonly RGBA8UI: 0x8D7C; + readonly RGB8UI: 0x8D7D; + readonly RGBA32I: 0x8D82; + readonly RGB32I: 0x8D83; + readonly RGBA16I: 0x8D88; + readonly RGB16I: 0x8D89; + readonly RGBA8I: 0x8D8E; + readonly RGB8I: 0x8D8F; + readonly RED_INTEGER: 0x8D94; + readonly RGB_INTEGER: 0x8D98; + readonly RGBA_INTEGER: 0x8D99; + readonly SAMPLER_2D_ARRAY: 0x8DC1; + readonly SAMPLER_2D_ARRAY_SHADOW: 0x8DC4; + readonly SAMPLER_CUBE_SHADOW: 0x8DC5; + readonly UNSIGNED_INT_VEC2: 0x8DC6; + readonly UNSIGNED_INT_VEC3: 0x8DC7; + readonly UNSIGNED_INT_VEC4: 0x8DC8; + readonly INT_SAMPLER_2D: 0x8DCA; + readonly INT_SAMPLER_3D: 0x8DCB; + readonly INT_SAMPLER_CUBE: 0x8DCC; + readonly INT_SAMPLER_2D_ARRAY: 0x8DCF; + readonly UNSIGNED_INT_SAMPLER_2D: 0x8DD2; + readonly UNSIGNED_INT_SAMPLER_3D: 0x8DD3; + readonly UNSIGNED_INT_SAMPLER_CUBE: 0x8DD4; + readonly UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8DD7; + readonly DEPTH_COMPONENT32F: 0x8CAC; + readonly DEPTH32F_STENCIL8: 0x8CAD; + readonly FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8DAD; + readonly FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210; + readonly FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211; + readonly FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212; + readonly FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213; + readonly FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214; + readonly FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215; + readonly FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216; + readonly FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217; + readonly FRAMEBUFFER_DEFAULT: 0x8218; + readonly UNSIGNED_INT_24_8: 0x84FA; + readonly DEPTH24_STENCIL8: 0x88F0; + readonly UNSIGNED_NORMALIZED: 0x8C17; + readonly DRAW_FRAMEBUFFER_BINDING: 0x8CA6; + readonly READ_FRAMEBUFFER: 0x8CA8; + readonly DRAW_FRAMEBUFFER: 0x8CA9; + readonly READ_FRAMEBUFFER_BINDING: 0x8CAA; + readonly RENDERBUFFER_SAMPLES: 0x8CAB; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8CD4; + readonly MAX_COLOR_ATTACHMENTS: 0x8CDF; + readonly COLOR_ATTACHMENT1: 0x8CE1; + readonly COLOR_ATTACHMENT2: 0x8CE2; + readonly COLOR_ATTACHMENT3: 0x8CE3; + readonly COLOR_ATTACHMENT4: 0x8CE4; + readonly COLOR_ATTACHMENT5: 0x8CE5; + readonly COLOR_ATTACHMENT6: 0x8CE6; + readonly COLOR_ATTACHMENT7: 0x8CE7; + readonly COLOR_ATTACHMENT8: 0x8CE8; + readonly COLOR_ATTACHMENT9: 0x8CE9; + readonly COLOR_ATTACHMENT10: 0x8CEA; + readonly COLOR_ATTACHMENT11: 0x8CEB; + readonly COLOR_ATTACHMENT12: 0x8CEC; + readonly COLOR_ATTACHMENT13: 0x8CED; + readonly COLOR_ATTACHMENT14: 0x8CEE; + readonly COLOR_ATTACHMENT15: 0x8CEF; + readonly FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8D56; + readonly MAX_SAMPLES: 0x8D57; + readonly HALF_FLOAT: 0x140B; + readonly RG: 0x8227; + readonly RG_INTEGER: 0x8228; + readonly R8: 0x8229; + readonly RG8: 0x822B; + readonly R16F: 0x822D; + readonly R32F: 0x822E; + readonly RG16F: 0x822F; + readonly RG32F: 0x8230; + readonly R8I: 0x8231; + readonly R8UI: 0x8232; + readonly R16I: 0x8233; + readonly R16UI: 0x8234; + readonly R32I: 0x8235; + readonly R32UI: 0x8236; + readonly RG8I: 0x8237; + readonly RG8UI: 0x8238; + readonly RG16I: 0x8239; + readonly RG16UI: 0x823A; + readonly RG32I: 0x823B; + readonly RG32UI: 0x823C; + readonly VERTEX_ARRAY_BINDING: 0x85B5; + readonly R8_SNORM: 0x8F94; + readonly RG8_SNORM: 0x8F95; + readonly RGB8_SNORM: 0x8F96; + readonly RGBA8_SNORM: 0x8F97; + readonly SIGNED_NORMALIZED: 0x8F9C; + readonly COPY_READ_BUFFER: 0x8F36; + readonly COPY_WRITE_BUFFER: 0x8F37; + readonly COPY_READ_BUFFER_BINDING: 0x8F36; + readonly COPY_WRITE_BUFFER_BINDING: 0x8F37; + readonly UNIFORM_BUFFER: 0x8A11; + readonly UNIFORM_BUFFER_BINDING: 0x8A28; + readonly UNIFORM_BUFFER_START: 0x8A29; + readonly UNIFORM_BUFFER_SIZE: 0x8A2A; + readonly MAX_VERTEX_UNIFORM_BLOCKS: 0x8A2B; + readonly MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8A2D; + readonly MAX_COMBINED_UNIFORM_BLOCKS: 0x8A2E; + readonly MAX_UNIFORM_BUFFER_BINDINGS: 0x8A2F; + readonly MAX_UNIFORM_BLOCK_SIZE: 0x8A30; + readonly MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8A31; + readonly MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8A33; + readonly UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8A34; + readonly ACTIVE_UNIFORM_BLOCKS: 0x8A36; + readonly UNIFORM_TYPE: 0x8A37; + readonly UNIFORM_SIZE: 0x8A38; + readonly UNIFORM_BLOCK_INDEX: 0x8A3A; + readonly UNIFORM_OFFSET: 0x8A3B; + readonly UNIFORM_ARRAY_STRIDE: 0x8A3C; + readonly UNIFORM_MATRIX_STRIDE: 0x8A3D; + readonly UNIFORM_IS_ROW_MAJOR: 0x8A3E; + readonly UNIFORM_BLOCK_BINDING: 0x8A3F; + readonly UNIFORM_BLOCK_DATA_SIZE: 0x8A40; + readonly UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8A42; + readonly UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8A43; + readonly UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8A44; + readonly UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8A46; + readonly INVALID_INDEX: 0xFFFFFFFF; + readonly MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122; + readonly MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125; + readonly MAX_SERVER_WAIT_TIMEOUT: 0x9111; + readonly OBJECT_TYPE: 0x9112; + readonly SYNC_CONDITION: 0x9113; + readonly SYNC_STATUS: 0x9114; + readonly SYNC_FLAGS: 0x9115; + readonly SYNC_FENCE: 0x9116; + readonly SYNC_GPU_COMMANDS_COMPLETE: 0x9117; + readonly UNSIGNALED: 0x9118; + readonly SIGNALED: 0x9119; + readonly ALREADY_SIGNALED: 0x911A; + readonly TIMEOUT_EXPIRED: 0x911B; + readonly CONDITION_SATISFIED: 0x911C; + readonly WAIT_FAILED: 0x911D; + readonly SYNC_FLUSH_COMMANDS_BIT: 0x00000001; + readonly VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88FE; + readonly ANY_SAMPLES_PASSED: 0x8C2F; + readonly ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8D6A; + readonly SAMPLER_BINDING: 0x8919; + readonly RGB10_A2UI: 0x906F; + readonly INT_2_10_10_10_REV: 0x8D9F; + readonly TRANSFORM_FEEDBACK: 0x8E22; + readonly TRANSFORM_FEEDBACK_PAUSED: 0x8E23; + readonly TRANSFORM_FEEDBACK_ACTIVE: 0x8E24; + readonly TRANSFORM_FEEDBACK_BINDING: 0x8E25; + readonly TEXTURE_IMMUTABLE_FORMAT: 0x912F; + readonly MAX_ELEMENT_INDEX: 0x8D6B; + readonly TEXTURE_IMMUTABLE_LEVELS: 0x82DF; + readonly TIMEOUT_IGNORED: -1; + readonly MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247; +} + +interface WebGL2RenderingContextOverloads { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bufferData) */ + bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void; + bufferData(target: GLenum, srcData: AllowSharedBufferSource | null, usage: GLenum): void; + bufferData(target: GLenum, srcData: ArrayBufferView, usage: GLenum, srcOffset: number, length?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/bufferSubData) */ + bufferSubData(target: GLenum, dstByteOffset: GLintptr, srcData: AllowSharedBufferSource): void; + bufferSubData(target: GLenum, dstByteOffset: GLintptr, srcData: ArrayBufferView, srcOffset: number, length?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compressedTexImage2D) */ + compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, imageSize: GLsizei, offset: GLintptr): void; + compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, srcData: ArrayBufferView, srcOffset?: number, srcLengthOverride?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compressedTexSubImage2D) */ + compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, offset: GLintptr): void; + compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, srcData: ArrayBufferView, srcOffset?: number, srcLengthOverride?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/readPixels) */ + readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, dstData: ArrayBufferView | null): void; + readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, offset: GLintptr): void; + readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, dstData: ArrayBufferView, dstOffset: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/texImage2D) */ + texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; + texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource): void; + texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pboOffset: GLintptr): void; + texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, source: TexImageSource): void; + texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/texSubImage2D) */ + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource): void; + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pboOffset: GLintptr): void; + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, source: TexImageSource): void; + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, srcData: ArrayBufferView, srcOffset: number): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4fv(location: WebGLUniformLocation | null, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4iv(location: WebGLUniformLocation | null, data: Int32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/uniformMatrix) */ + uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, data: Float32List, srcOffset?: number, srcLength?: GLuint): void; +} + +/** + * The **WebGLActiveInfo** interface is part of the WebGL API and represents the information returned by calling the WebGLRenderingContext.getActiveAttrib() and WebGLRenderingContext.getActiveUniform() methods. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLActiveInfo) + */ +interface WebGLActiveInfo { + /** + * The read-only **`WebGLActiveInfo.name`** property represents the name of the requested data returned by calling the WebGLRenderingContext.getActiveAttrib() or WebGLRenderingContext.getActiveUniform() methods. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLActiveInfo/name) + */ + readonly name: string; + /** + * The read-only **`WebGLActiveInfo.size`** property is a Number representing the size of the requested data returned by calling the WebGLRenderingContext.getActiveAttrib() or WebGLRenderingContext.getActiveUniform() methods. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLActiveInfo/size) + */ + readonly size: GLint; + /** + * The read-only **`WebGLActiveInfo.type`** property represents the type of the requested data returned by calling the WebGLRenderingContext.getActiveAttrib() or WebGLRenderingContext.getActiveUniform() methods. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLActiveInfo/type) + */ + readonly type: GLenum; +} + +declare var WebGLActiveInfo: { + prototype: WebGLActiveInfo; + new(): WebGLActiveInfo; +}; + +/** + * The **WebGLBuffer** interface is part of the WebGL API and represents an opaque buffer object storing data such as vertices or colors. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLBuffer) + */ +interface WebGLBuffer { +} + +declare var WebGLBuffer: { + prototype: WebGLBuffer; + new(): WebGLBuffer; +}; + +/** + * The **WebGLContextEvent** interface is part of the WebGL API and is an interface for an event that is generated in response to a status change to the WebGL rendering context. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLContextEvent) + */ +interface WebGLContextEvent extends Event { + /** + * The read-only **`WebGLContextEvent.statusMessage`** property contains additional event status information, or is an empty string if no additional information is available. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLContextEvent/statusMessage) + */ + readonly statusMessage: string; +} + +declare var WebGLContextEvent: { + prototype: WebGLContextEvent; + new(type: string, eventInit?: WebGLContextEventInit): WebGLContextEvent; +}; + +/** + * The **WebGLFramebuffer** interface is part of the WebGL API and represents a collection of buffers that serve as a rendering destination. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLFramebuffer) + */ +interface WebGLFramebuffer { +} + +declare var WebGLFramebuffer: { + prototype: WebGLFramebuffer; + new(): WebGLFramebuffer; +}; + +/** + * The **`WebGLProgram`** is part of the WebGL API and is a combination of two compiled WebGLShaders consisting of a vertex shader and a fragment shader (both written in GLSL). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLProgram) + */ +interface WebGLProgram { +} + +declare var WebGLProgram: { + prototype: WebGLProgram; + new(): WebGLProgram; +}; + +/** + * The **`WebGLQuery`** interface is part of the WebGL 2 API and provides ways to asynchronously query for information. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLQuery) + */ +interface WebGLQuery { +} + +declare var WebGLQuery: { + prototype: WebGLQuery; + new(): WebGLQuery; +}; + +/** + * The **WebGLRenderbuffer** interface is part of the WebGL API and represents a buffer that can contain an image, or that can be a source or target of a rendering operation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderbuffer) + */ +interface WebGLRenderbuffer { +} + +declare var WebGLRenderbuffer: { + prototype: WebGLRenderbuffer; + new(): WebGLRenderbuffer; +}; + +/** + * The **`WebGLRenderingContext`** interface provides an interface to the OpenGL ES 2.0 graphics rendering context for the drawing surface of an HTML canvas element. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext) + */ +interface WebGLRenderingContext extends WebGLRenderingContextBase, WebGLRenderingContextOverloads { +} + +declare var WebGLRenderingContext: { + prototype: WebGLRenderingContext; + new(): WebGLRenderingContext; + readonly DEPTH_BUFFER_BIT: 0x00000100; + readonly STENCIL_BUFFER_BIT: 0x00000400; + readonly COLOR_BUFFER_BIT: 0x00004000; + readonly POINTS: 0x0000; + readonly LINES: 0x0001; + readonly LINE_LOOP: 0x0002; + readonly LINE_STRIP: 0x0003; + readonly TRIANGLES: 0x0004; + readonly TRIANGLE_STRIP: 0x0005; + readonly TRIANGLE_FAN: 0x0006; + readonly ZERO: 0; + readonly ONE: 1; + readonly SRC_COLOR: 0x0300; + readonly ONE_MINUS_SRC_COLOR: 0x0301; + readonly SRC_ALPHA: 0x0302; + readonly ONE_MINUS_SRC_ALPHA: 0x0303; + readonly DST_ALPHA: 0x0304; + readonly ONE_MINUS_DST_ALPHA: 0x0305; + readonly DST_COLOR: 0x0306; + readonly ONE_MINUS_DST_COLOR: 0x0307; + readonly SRC_ALPHA_SATURATE: 0x0308; + readonly FUNC_ADD: 0x8006; + readonly BLEND_EQUATION: 0x8009; + readonly BLEND_EQUATION_RGB: 0x8009; + readonly BLEND_EQUATION_ALPHA: 0x883D; + readonly FUNC_SUBTRACT: 0x800A; + readonly FUNC_REVERSE_SUBTRACT: 0x800B; + readonly BLEND_DST_RGB: 0x80C8; + readonly BLEND_SRC_RGB: 0x80C9; + readonly BLEND_DST_ALPHA: 0x80CA; + readonly BLEND_SRC_ALPHA: 0x80CB; + readonly CONSTANT_COLOR: 0x8001; + readonly ONE_MINUS_CONSTANT_COLOR: 0x8002; + readonly CONSTANT_ALPHA: 0x8003; + readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004; + readonly BLEND_COLOR: 0x8005; + readonly ARRAY_BUFFER: 0x8892; + readonly ELEMENT_ARRAY_BUFFER: 0x8893; + readonly ARRAY_BUFFER_BINDING: 0x8894; + readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895; + readonly STREAM_DRAW: 0x88E0; + readonly STATIC_DRAW: 0x88E4; + readonly DYNAMIC_DRAW: 0x88E8; + readonly BUFFER_SIZE: 0x8764; + readonly BUFFER_USAGE: 0x8765; + readonly CURRENT_VERTEX_ATTRIB: 0x8626; + readonly FRONT: 0x0404; + readonly BACK: 0x0405; + readonly FRONT_AND_BACK: 0x0408; + readonly CULL_FACE: 0x0B44; + readonly BLEND: 0x0BE2; + readonly DITHER: 0x0BD0; + readonly STENCIL_TEST: 0x0B90; + readonly DEPTH_TEST: 0x0B71; + readonly SCISSOR_TEST: 0x0C11; + readonly POLYGON_OFFSET_FILL: 0x8037; + readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E; + readonly SAMPLE_COVERAGE: 0x80A0; + readonly NO_ERROR: 0; + readonly INVALID_ENUM: 0x0500; + readonly INVALID_VALUE: 0x0501; + readonly INVALID_OPERATION: 0x0502; + readonly OUT_OF_MEMORY: 0x0505; + readonly CW: 0x0900; + readonly CCW: 0x0901; + readonly LINE_WIDTH: 0x0B21; + readonly ALIASED_POINT_SIZE_RANGE: 0x846D; + readonly ALIASED_LINE_WIDTH_RANGE: 0x846E; + readonly CULL_FACE_MODE: 0x0B45; + readonly FRONT_FACE: 0x0B46; + readonly DEPTH_RANGE: 0x0B70; + readonly DEPTH_WRITEMASK: 0x0B72; + readonly DEPTH_CLEAR_VALUE: 0x0B73; + readonly DEPTH_FUNC: 0x0B74; + readonly STENCIL_CLEAR_VALUE: 0x0B91; + readonly STENCIL_FUNC: 0x0B92; + readonly STENCIL_FAIL: 0x0B94; + readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95; + readonly STENCIL_PASS_DEPTH_PASS: 0x0B96; + readonly STENCIL_REF: 0x0B97; + readonly STENCIL_VALUE_MASK: 0x0B93; + readonly STENCIL_WRITEMASK: 0x0B98; + readonly STENCIL_BACK_FUNC: 0x8800; + readonly STENCIL_BACK_FAIL: 0x8801; + readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802; + readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803; + readonly STENCIL_BACK_REF: 0x8CA3; + readonly STENCIL_BACK_VALUE_MASK: 0x8CA4; + readonly STENCIL_BACK_WRITEMASK: 0x8CA5; + readonly VIEWPORT: 0x0BA2; + readonly SCISSOR_BOX: 0x0C10; + readonly COLOR_CLEAR_VALUE: 0x0C22; + readonly COLOR_WRITEMASK: 0x0C23; + readonly UNPACK_ALIGNMENT: 0x0CF5; + readonly PACK_ALIGNMENT: 0x0D05; + readonly MAX_TEXTURE_SIZE: 0x0D33; + readonly MAX_VIEWPORT_DIMS: 0x0D3A; + readonly SUBPIXEL_BITS: 0x0D50; + readonly RED_BITS: 0x0D52; + readonly GREEN_BITS: 0x0D53; + readonly BLUE_BITS: 0x0D54; + readonly ALPHA_BITS: 0x0D55; + readonly DEPTH_BITS: 0x0D56; + readonly STENCIL_BITS: 0x0D57; + readonly POLYGON_OFFSET_UNITS: 0x2A00; + readonly POLYGON_OFFSET_FACTOR: 0x8038; + readonly TEXTURE_BINDING_2D: 0x8069; + readonly SAMPLE_BUFFERS: 0x80A8; + readonly SAMPLES: 0x80A9; + readonly SAMPLE_COVERAGE_VALUE: 0x80AA; + readonly SAMPLE_COVERAGE_INVERT: 0x80AB; + readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3; + readonly DONT_CARE: 0x1100; + readonly FASTEST: 0x1101; + readonly NICEST: 0x1102; + readonly GENERATE_MIPMAP_HINT: 0x8192; + readonly BYTE: 0x1400; + readonly UNSIGNED_BYTE: 0x1401; + readonly SHORT: 0x1402; + readonly UNSIGNED_SHORT: 0x1403; + readonly INT: 0x1404; + readonly UNSIGNED_INT: 0x1405; + readonly FLOAT: 0x1406; + readonly DEPTH_COMPONENT: 0x1902; + readonly ALPHA: 0x1906; + readonly RGB: 0x1907; + readonly RGBA: 0x1908; + readonly LUMINANCE: 0x1909; + readonly LUMINANCE_ALPHA: 0x190A; + readonly UNSIGNED_SHORT_4_4_4_4: 0x8033; + readonly UNSIGNED_SHORT_5_5_5_1: 0x8034; + readonly UNSIGNED_SHORT_5_6_5: 0x8363; + readonly FRAGMENT_SHADER: 0x8B30; + readonly VERTEX_SHADER: 0x8B31; + readonly MAX_VERTEX_ATTRIBS: 0x8869; + readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB; + readonly MAX_VARYING_VECTORS: 0x8DFC; + readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D; + readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C; + readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872; + readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD; + readonly SHADER_TYPE: 0x8B4F; + readonly DELETE_STATUS: 0x8B80; + readonly LINK_STATUS: 0x8B82; + readonly VALIDATE_STATUS: 0x8B83; + readonly ATTACHED_SHADERS: 0x8B85; + readonly ACTIVE_UNIFORMS: 0x8B86; + readonly ACTIVE_ATTRIBUTES: 0x8B89; + readonly SHADING_LANGUAGE_VERSION: 0x8B8C; + readonly CURRENT_PROGRAM: 0x8B8D; + readonly NEVER: 0x0200; + readonly LESS: 0x0201; + readonly EQUAL: 0x0202; + readonly LEQUAL: 0x0203; + readonly GREATER: 0x0204; + readonly NOTEQUAL: 0x0205; + readonly GEQUAL: 0x0206; + readonly ALWAYS: 0x0207; + readonly KEEP: 0x1E00; + readonly REPLACE: 0x1E01; + readonly INCR: 0x1E02; + readonly DECR: 0x1E03; + readonly INVERT: 0x150A; + readonly INCR_WRAP: 0x8507; + readonly DECR_WRAP: 0x8508; + readonly VENDOR: 0x1F00; + readonly RENDERER: 0x1F01; + readonly VERSION: 0x1F02; + readonly NEAREST: 0x2600; + readonly LINEAR: 0x2601; + readonly NEAREST_MIPMAP_NEAREST: 0x2700; + readonly LINEAR_MIPMAP_NEAREST: 0x2701; + readonly NEAREST_MIPMAP_LINEAR: 0x2702; + readonly LINEAR_MIPMAP_LINEAR: 0x2703; + readonly TEXTURE_MAG_FILTER: 0x2800; + readonly TEXTURE_MIN_FILTER: 0x2801; + readonly TEXTURE_WRAP_S: 0x2802; + readonly TEXTURE_WRAP_T: 0x2803; + readonly TEXTURE_2D: 0x0DE1; + readonly TEXTURE: 0x1702; + readonly TEXTURE_CUBE_MAP: 0x8513; + readonly TEXTURE_BINDING_CUBE_MAP: 0x8514; + readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515; + readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516; + readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517; + readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518; + readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519; + readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A; + readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C; + readonly TEXTURE0: 0x84C0; + readonly TEXTURE1: 0x84C1; + readonly TEXTURE2: 0x84C2; + readonly TEXTURE3: 0x84C3; + readonly TEXTURE4: 0x84C4; + readonly TEXTURE5: 0x84C5; + readonly TEXTURE6: 0x84C6; + readonly TEXTURE7: 0x84C7; + readonly TEXTURE8: 0x84C8; + readonly TEXTURE9: 0x84C9; + readonly TEXTURE10: 0x84CA; + readonly TEXTURE11: 0x84CB; + readonly TEXTURE12: 0x84CC; + readonly TEXTURE13: 0x84CD; + readonly TEXTURE14: 0x84CE; + readonly TEXTURE15: 0x84CF; + readonly TEXTURE16: 0x84D0; + readonly TEXTURE17: 0x84D1; + readonly TEXTURE18: 0x84D2; + readonly TEXTURE19: 0x84D3; + readonly TEXTURE20: 0x84D4; + readonly TEXTURE21: 0x84D5; + readonly TEXTURE22: 0x84D6; + readonly TEXTURE23: 0x84D7; + readonly TEXTURE24: 0x84D8; + readonly TEXTURE25: 0x84D9; + readonly TEXTURE26: 0x84DA; + readonly TEXTURE27: 0x84DB; + readonly TEXTURE28: 0x84DC; + readonly TEXTURE29: 0x84DD; + readonly TEXTURE30: 0x84DE; + readonly TEXTURE31: 0x84DF; + readonly ACTIVE_TEXTURE: 0x84E0; + readonly REPEAT: 0x2901; + readonly CLAMP_TO_EDGE: 0x812F; + readonly MIRRORED_REPEAT: 0x8370; + readonly FLOAT_VEC2: 0x8B50; + readonly FLOAT_VEC3: 0x8B51; + readonly FLOAT_VEC4: 0x8B52; + readonly INT_VEC2: 0x8B53; + readonly INT_VEC3: 0x8B54; + readonly INT_VEC4: 0x8B55; + readonly BOOL: 0x8B56; + readonly BOOL_VEC2: 0x8B57; + readonly BOOL_VEC3: 0x8B58; + readonly BOOL_VEC4: 0x8B59; + readonly FLOAT_MAT2: 0x8B5A; + readonly FLOAT_MAT3: 0x8B5B; + readonly FLOAT_MAT4: 0x8B5C; + readonly SAMPLER_2D: 0x8B5E; + readonly SAMPLER_CUBE: 0x8B60; + readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622; + readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623; + readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624; + readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625; + readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A; + readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645; + readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F; + readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A; + readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B; + readonly COMPILE_STATUS: 0x8B81; + readonly LOW_FLOAT: 0x8DF0; + readonly MEDIUM_FLOAT: 0x8DF1; + readonly HIGH_FLOAT: 0x8DF2; + readonly LOW_INT: 0x8DF3; + readonly MEDIUM_INT: 0x8DF4; + readonly HIGH_INT: 0x8DF5; + readonly FRAMEBUFFER: 0x8D40; + readonly RENDERBUFFER: 0x8D41; + readonly RGBA4: 0x8056; + readonly RGB5_A1: 0x8057; + readonly RGBA8: 0x8058; + readonly RGB565: 0x8D62; + readonly DEPTH_COMPONENT16: 0x81A5; + readonly STENCIL_INDEX8: 0x8D48; + readonly DEPTH_STENCIL: 0x84F9; + readonly RENDERBUFFER_WIDTH: 0x8D42; + readonly RENDERBUFFER_HEIGHT: 0x8D43; + readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44; + readonly RENDERBUFFER_RED_SIZE: 0x8D50; + readonly RENDERBUFFER_GREEN_SIZE: 0x8D51; + readonly RENDERBUFFER_BLUE_SIZE: 0x8D52; + readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53; + readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54; + readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55; + readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0; + readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3; + readonly COLOR_ATTACHMENT0: 0x8CE0; + readonly DEPTH_ATTACHMENT: 0x8D00; + readonly STENCIL_ATTACHMENT: 0x8D20; + readonly DEPTH_STENCIL_ATTACHMENT: 0x821A; + readonly NONE: 0; + readonly FRAMEBUFFER_COMPLETE: 0x8CD5; + readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6; + readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7; + readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9; + readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD; + readonly FRAMEBUFFER_BINDING: 0x8CA6; + readonly RENDERBUFFER_BINDING: 0x8CA7; + readonly MAX_RENDERBUFFER_SIZE: 0x84E8; + readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506; + readonly UNPACK_FLIP_Y_WEBGL: 0x9240; + readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241; + readonly CONTEXT_LOST_WEBGL: 0x9242; + readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243; + readonly BROWSER_DEFAULT_WEBGL: 0x9244; +}; + +interface WebGLRenderingContextBase { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/drawingBufferColorSpace) */ + drawingBufferColorSpace: PredefinedColorSpace; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawingBufferHeight) */ + readonly drawingBufferHeight: GLsizei; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawingBufferWidth) */ + readonly drawingBufferWidth: GLsizei; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGL2RenderingContext/unpackColorSpace) */ + unpackColorSpace: PredefinedColorSpace; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/activeTexture) */ + activeTexture(texture: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/attachShader) */ + attachShader(program: WebGLProgram, shader: WebGLShader): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bindAttribLocation) */ + bindAttribLocation(program: WebGLProgram, index: GLuint, name: string): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bindBuffer) */ + bindBuffer(target: GLenum, buffer: WebGLBuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bindFramebuffer) */ + bindFramebuffer(target: GLenum, framebuffer: WebGLFramebuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bindRenderbuffer) */ + bindRenderbuffer(target: GLenum, renderbuffer: WebGLRenderbuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bindTexture) */ + bindTexture(target: GLenum, texture: WebGLTexture | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/blendColor) */ + blendColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/blendEquation) */ + blendEquation(mode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/blendEquationSeparate) */ + blendEquationSeparate(modeRGB: GLenum, modeAlpha: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/blendFunc) */ + blendFunc(sfactor: GLenum, dfactor: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/blendFuncSeparate) */ + blendFuncSeparate(srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/checkFramebufferStatus) */ + checkFramebufferStatus(target: GLenum): GLenum; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/clear) */ + clear(mask: GLbitfield): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/clearColor) */ + clearColor(red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/clearDepth) */ + clearDepth(depth: GLclampf): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/clearStencil) */ + clearStencil(s: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/colorMask) */ + colorMask(red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compileShader) */ + compileShader(shader: WebGLShader): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/copyTexImage2D) */ + copyTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/copyTexSubImage2D) */ + copyTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/createBuffer) */ + createBuffer(): WebGLBuffer; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/createFramebuffer) */ + createFramebuffer(): WebGLFramebuffer; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/createProgram) */ + createProgram(): WebGLProgram; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/createRenderbuffer) */ + createRenderbuffer(): WebGLRenderbuffer; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/createShader) */ + createShader(type: GLenum): WebGLShader | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/createTexture) */ + createTexture(): WebGLTexture; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/cullFace) */ + cullFace(mode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/deleteBuffer) */ + deleteBuffer(buffer: WebGLBuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/deleteFramebuffer) */ + deleteFramebuffer(framebuffer: WebGLFramebuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/deleteProgram) */ + deleteProgram(program: WebGLProgram | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/deleteRenderbuffer) */ + deleteRenderbuffer(renderbuffer: WebGLRenderbuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/deleteShader) */ + deleteShader(shader: WebGLShader | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/deleteTexture) */ + deleteTexture(texture: WebGLTexture | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/depthFunc) */ + depthFunc(func: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/depthMask) */ + depthMask(flag: GLboolean): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/depthRange) */ + depthRange(zNear: GLclampf, zFar: GLclampf): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/detachShader) */ + detachShader(program: WebGLProgram, shader: WebGLShader): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/disable) */ + disable(cap: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/disableVertexAttribArray) */ + disableVertexAttribArray(index: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawArrays) */ + drawArrays(mode: GLenum, first: GLint, count: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/drawElements) */ + drawElements(mode: GLenum, count: GLsizei, type: GLenum, offset: GLintptr): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/enable) */ + enable(cap: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/enableVertexAttribArray) */ + enableVertexAttribArray(index: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/finish) */ + finish(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/flush) */ + flush(): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/framebufferRenderbuffer) */ + framebufferRenderbuffer(target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: WebGLRenderbuffer | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/framebufferTexture2D) */ + framebufferTexture2D(target: GLenum, attachment: GLenum, textarget: GLenum, texture: WebGLTexture | null, level: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/frontFace) */ + frontFace(mode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/generateMipmap) */ + generateMipmap(target: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getActiveAttrib) */ + getActiveAttrib(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getActiveUniform) */ + getActiveUniform(program: WebGLProgram, index: GLuint): WebGLActiveInfo | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getAttachedShaders) */ + getAttachedShaders(program: WebGLProgram): WebGLShader[] | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getAttribLocation) */ + getAttribLocation(program: WebGLProgram, name: string): GLint; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getBufferParameter) */ + getBufferParameter(target: GLenum, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getContextAttributes) */ + getContextAttributes(): WebGLContextAttributes | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getError) */ + getError(): GLenum; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getExtension) */ + getExtension(extensionName: "ANGLE_instanced_arrays"): ANGLE_instanced_arrays | null; + getExtension(extensionName: "EXT_blend_minmax"): EXT_blend_minmax | null; + getExtension(extensionName: "EXT_color_buffer_float"): EXT_color_buffer_float | null; + getExtension(extensionName: "EXT_color_buffer_half_float"): EXT_color_buffer_half_float | null; + getExtension(extensionName: "EXT_float_blend"): EXT_float_blend | null; + getExtension(extensionName: "EXT_frag_depth"): EXT_frag_depth | null; + getExtension(extensionName: "EXT_sRGB"): EXT_sRGB | null; + getExtension(extensionName: "EXT_shader_texture_lod"): EXT_shader_texture_lod | null; + getExtension(extensionName: "EXT_texture_compression_bptc"): EXT_texture_compression_bptc | null; + getExtension(extensionName: "EXT_texture_compression_rgtc"): EXT_texture_compression_rgtc | null; + getExtension(extensionName: "EXT_texture_filter_anisotropic"): EXT_texture_filter_anisotropic | null; + getExtension(extensionName: "KHR_parallel_shader_compile"): KHR_parallel_shader_compile | null; + getExtension(extensionName: "OES_element_index_uint"): OES_element_index_uint | null; + getExtension(extensionName: "OES_fbo_render_mipmap"): OES_fbo_render_mipmap | null; + getExtension(extensionName: "OES_standard_derivatives"): OES_standard_derivatives | null; + getExtension(extensionName: "OES_texture_float"): OES_texture_float | null; + getExtension(extensionName: "OES_texture_float_linear"): OES_texture_float_linear | null; + getExtension(extensionName: "OES_texture_half_float"): OES_texture_half_float | null; + getExtension(extensionName: "OES_texture_half_float_linear"): OES_texture_half_float_linear | null; + getExtension(extensionName: "OES_vertex_array_object"): OES_vertex_array_object | null; + getExtension(extensionName: "OVR_multiview2"): OVR_multiview2 | null; + getExtension(extensionName: "WEBGL_color_buffer_float"): WEBGL_color_buffer_float | null; + getExtension(extensionName: "WEBGL_compressed_texture_astc"): WEBGL_compressed_texture_astc | null; + getExtension(extensionName: "WEBGL_compressed_texture_etc"): WEBGL_compressed_texture_etc | null; + getExtension(extensionName: "WEBGL_compressed_texture_etc1"): WEBGL_compressed_texture_etc1 | null; + getExtension(extensionName: "WEBGL_compressed_texture_pvrtc"): WEBGL_compressed_texture_pvrtc | null; + getExtension(extensionName: "WEBGL_compressed_texture_s3tc"): WEBGL_compressed_texture_s3tc | null; + getExtension(extensionName: "WEBGL_compressed_texture_s3tc_srgb"): WEBGL_compressed_texture_s3tc_srgb | null; + getExtension(extensionName: "WEBGL_debug_renderer_info"): WEBGL_debug_renderer_info | null; + getExtension(extensionName: "WEBGL_debug_shaders"): WEBGL_debug_shaders | null; + getExtension(extensionName: "WEBGL_depth_texture"): WEBGL_depth_texture | null; + getExtension(extensionName: "WEBGL_draw_buffers"): WEBGL_draw_buffers | null; + getExtension(extensionName: "WEBGL_lose_context"): WEBGL_lose_context | null; + getExtension(extensionName: "WEBGL_multi_draw"): WEBGL_multi_draw | null; + getExtension(name: string): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getFramebufferAttachmentParameter) */ + getFramebufferAttachmentParameter(target: GLenum, attachment: GLenum, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getParameter) */ + getParameter(pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getProgramInfoLog) */ + getProgramInfoLog(program: WebGLProgram): string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getProgramParameter) */ + getProgramParameter(program: WebGLProgram, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getRenderbufferParameter) */ + getRenderbufferParameter(target: GLenum, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getShaderInfoLog) */ + getShaderInfoLog(shader: WebGLShader): string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getShaderParameter) */ + getShaderParameter(shader: WebGLShader, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getShaderPrecisionFormat) */ + getShaderPrecisionFormat(shadertype: GLenum, precisiontype: GLenum): WebGLShaderPrecisionFormat | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getShaderSource) */ + getShaderSource(shader: WebGLShader): string | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getSupportedExtensions) */ + getSupportedExtensions(): string[] | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getTexParameter) */ + getTexParameter(target: GLenum, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getUniform) */ + getUniform(program: WebGLProgram, location: WebGLUniformLocation): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getUniformLocation) */ + getUniformLocation(program: WebGLProgram, name: string): WebGLUniformLocation | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getVertexAttrib) */ + getVertexAttrib(index: GLuint, pname: GLenum): any; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/getVertexAttribOffset) */ + getVertexAttribOffset(index: GLuint, pname: GLenum): GLintptr; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/hint) */ + hint(target: GLenum, mode: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isBuffer) */ + isBuffer(buffer: WebGLBuffer | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isContextLost) */ + isContextLost(): boolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isEnabled) */ + isEnabled(cap: GLenum): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isFramebuffer) */ + isFramebuffer(framebuffer: WebGLFramebuffer | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isProgram) */ + isProgram(program: WebGLProgram | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isRenderbuffer) */ + isRenderbuffer(renderbuffer: WebGLRenderbuffer | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isShader) */ + isShader(shader: WebGLShader | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/isTexture) */ + isTexture(texture: WebGLTexture | null): GLboolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/lineWidth) */ + lineWidth(width: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/linkProgram) */ + linkProgram(program: WebGLProgram): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/pixelStorei) */ + pixelStorei(pname: GLenum, param: GLint | GLboolean): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/polygonOffset) */ + polygonOffset(factor: GLfloat, units: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/renderbufferStorage) */ + renderbufferStorage(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/sampleCoverage) */ + sampleCoverage(value: GLclampf, invert: GLboolean): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/scissor) */ + scissor(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/shaderSource) */ + shaderSource(shader: WebGLShader, source: string): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/stencilFunc) */ + stencilFunc(func: GLenum, ref: GLint, mask: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/stencilFuncSeparate) */ + stencilFuncSeparate(face: GLenum, func: GLenum, ref: GLint, mask: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/stencilMask) */ + stencilMask(mask: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/stencilMaskSeparate) */ + stencilMaskSeparate(face: GLenum, mask: GLuint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/stencilOp) */ + stencilOp(fail: GLenum, zfail: GLenum, zpass: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/stencilOpSeparate) */ + stencilOpSeparate(face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/texParameter) */ + texParameterf(target: GLenum, pname: GLenum, param: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/texParameter) */ + texParameteri(target: GLenum, pname: GLenum, param: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1f(location: WebGLUniformLocation | null, x: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1i(location: WebGLUniformLocation | null, x: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2i(location: WebGLUniformLocation | null, x: GLint, y: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4f(location: WebGLUniformLocation | null, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4i(location: WebGLUniformLocation | null, x: GLint, y: GLint, z: GLint, w: GLint): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/useProgram) */ + useProgram(program: WebGLProgram | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/validateProgram) */ + validateProgram(program: WebGLProgram): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib1f(index: GLuint, x: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib1fv(index: GLuint, values: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib2f(index: GLuint, x: GLfloat, y: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib2fv(index: GLuint, values: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib3f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib3fv(index: GLuint, values: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib4f(index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttrib) */ + vertexAttrib4fv(index: GLuint, values: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/vertexAttribPointer) */ + vertexAttribPointer(index: GLuint, size: GLint, type: GLenum, normalized: GLboolean, stride: GLsizei, offset: GLintptr): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/viewport) */ + viewport(x: GLint, y: GLint, width: GLsizei, height: GLsizei): void; + readonly DEPTH_BUFFER_BIT: 0x00000100; + readonly STENCIL_BUFFER_BIT: 0x00000400; + readonly COLOR_BUFFER_BIT: 0x00004000; + readonly POINTS: 0x0000; + readonly LINES: 0x0001; + readonly LINE_LOOP: 0x0002; + readonly LINE_STRIP: 0x0003; + readonly TRIANGLES: 0x0004; + readonly TRIANGLE_STRIP: 0x0005; + readonly TRIANGLE_FAN: 0x0006; + readonly ZERO: 0; + readonly ONE: 1; + readonly SRC_COLOR: 0x0300; + readonly ONE_MINUS_SRC_COLOR: 0x0301; + readonly SRC_ALPHA: 0x0302; + readonly ONE_MINUS_SRC_ALPHA: 0x0303; + readonly DST_ALPHA: 0x0304; + readonly ONE_MINUS_DST_ALPHA: 0x0305; + readonly DST_COLOR: 0x0306; + readonly ONE_MINUS_DST_COLOR: 0x0307; + readonly SRC_ALPHA_SATURATE: 0x0308; + readonly FUNC_ADD: 0x8006; + readonly BLEND_EQUATION: 0x8009; + readonly BLEND_EQUATION_RGB: 0x8009; + readonly BLEND_EQUATION_ALPHA: 0x883D; + readonly FUNC_SUBTRACT: 0x800A; + readonly FUNC_REVERSE_SUBTRACT: 0x800B; + readonly BLEND_DST_RGB: 0x80C8; + readonly BLEND_SRC_RGB: 0x80C9; + readonly BLEND_DST_ALPHA: 0x80CA; + readonly BLEND_SRC_ALPHA: 0x80CB; + readonly CONSTANT_COLOR: 0x8001; + readonly ONE_MINUS_CONSTANT_COLOR: 0x8002; + readonly CONSTANT_ALPHA: 0x8003; + readonly ONE_MINUS_CONSTANT_ALPHA: 0x8004; + readonly BLEND_COLOR: 0x8005; + readonly ARRAY_BUFFER: 0x8892; + readonly ELEMENT_ARRAY_BUFFER: 0x8893; + readonly ARRAY_BUFFER_BINDING: 0x8894; + readonly ELEMENT_ARRAY_BUFFER_BINDING: 0x8895; + readonly STREAM_DRAW: 0x88E0; + readonly STATIC_DRAW: 0x88E4; + readonly DYNAMIC_DRAW: 0x88E8; + readonly BUFFER_SIZE: 0x8764; + readonly BUFFER_USAGE: 0x8765; + readonly CURRENT_VERTEX_ATTRIB: 0x8626; + readonly FRONT: 0x0404; + readonly BACK: 0x0405; + readonly FRONT_AND_BACK: 0x0408; + readonly CULL_FACE: 0x0B44; + readonly BLEND: 0x0BE2; + readonly DITHER: 0x0BD0; + readonly STENCIL_TEST: 0x0B90; + readonly DEPTH_TEST: 0x0B71; + readonly SCISSOR_TEST: 0x0C11; + readonly POLYGON_OFFSET_FILL: 0x8037; + readonly SAMPLE_ALPHA_TO_COVERAGE: 0x809E; + readonly SAMPLE_COVERAGE: 0x80A0; + readonly NO_ERROR: 0; + readonly INVALID_ENUM: 0x0500; + readonly INVALID_VALUE: 0x0501; + readonly INVALID_OPERATION: 0x0502; + readonly OUT_OF_MEMORY: 0x0505; + readonly CW: 0x0900; + readonly CCW: 0x0901; + readonly LINE_WIDTH: 0x0B21; + readonly ALIASED_POINT_SIZE_RANGE: 0x846D; + readonly ALIASED_LINE_WIDTH_RANGE: 0x846E; + readonly CULL_FACE_MODE: 0x0B45; + readonly FRONT_FACE: 0x0B46; + readonly DEPTH_RANGE: 0x0B70; + readonly DEPTH_WRITEMASK: 0x0B72; + readonly DEPTH_CLEAR_VALUE: 0x0B73; + readonly DEPTH_FUNC: 0x0B74; + readonly STENCIL_CLEAR_VALUE: 0x0B91; + readonly STENCIL_FUNC: 0x0B92; + readonly STENCIL_FAIL: 0x0B94; + readonly STENCIL_PASS_DEPTH_FAIL: 0x0B95; + readonly STENCIL_PASS_DEPTH_PASS: 0x0B96; + readonly STENCIL_REF: 0x0B97; + readonly STENCIL_VALUE_MASK: 0x0B93; + readonly STENCIL_WRITEMASK: 0x0B98; + readonly STENCIL_BACK_FUNC: 0x8800; + readonly STENCIL_BACK_FAIL: 0x8801; + readonly STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802; + readonly STENCIL_BACK_PASS_DEPTH_PASS: 0x8803; + readonly STENCIL_BACK_REF: 0x8CA3; + readonly STENCIL_BACK_VALUE_MASK: 0x8CA4; + readonly STENCIL_BACK_WRITEMASK: 0x8CA5; + readonly VIEWPORT: 0x0BA2; + readonly SCISSOR_BOX: 0x0C10; + readonly COLOR_CLEAR_VALUE: 0x0C22; + readonly COLOR_WRITEMASK: 0x0C23; + readonly UNPACK_ALIGNMENT: 0x0CF5; + readonly PACK_ALIGNMENT: 0x0D05; + readonly MAX_TEXTURE_SIZE: 0x0D33; + readonly MAX_VIEWPORT_DIMS: 0x0D3A; + readonly SUBPIXEL_BITS: 0x0D50; + readonly RED_BITS: 0x0D52; + readonly GREEN_BITS: 0x0D53; + readonly BLUE_BITS: 0x0D54; + readonly ALPHA_BITS: 0x0D55; + readonly DEPTH_BITS: 0x0D56; + readonly STENCIL_BITS: 0x0D57; + readonly POLYGON_OFFSET_UNITS: 0x2A00; + readonly POLYGON_OFFSET_FACTOR: 0x8038; + readonly TEXTURE_BINDING_2D: 0x8069; + readonly SAMPLE_BUFFERS: 0x80A8; + readonly SAMPLES: 0x80A9; + readonly SAMPLE_COVERAGE_VALUE: 0x80AA; + readonly SAMPLE_COVERAGE_INVERT: 0x80AB; + readonly COMPRESSED_TEXTURE_FORMATS: 0x86A3; + readonly DONT_CARE: 0x1100; + readonly FASTEST: 0x1101; + readonly NICEST: 0x1102; + readonly GENERATE_MIPMAP_HINT: 0x8192; + readonly BYTE: 0x1400; + readonly UNSIGNED_BYTE: 0x1401; + readonly SHORT: 0x1402; + readonly UNSIGNED_SHORT: 0x1403; + readonly INT: 0x1404; + readonly UNSIGNED_INT: 0x1405; + readonly FLOAT: 0x1406; + readonly DEPTH_COMPONENT: 0x1902; + readonly ALPHA: 0x1906; + readonly RGB: 0x1907; + readonly RGBA: 0x1908; + readonly LUMINANCE: 0x1909; + readonly LUMINANCE_ALPHA: 0x190A; + readonly UNSIGNED_SHORT_4_4_4_4: 0x8033; + readonly UNSIGNED_SHORT_5_5_5_1: 0x8034; + readonly UNSIGNED_SHORT_5_6_5: 0x8363; + readonly FRAGMENT_SHADER: 0x8B30; + readonly VERTEX_SHADER: 0x8B31; + readonly MAX_VERTEX_ATTRIBS: 0x8869; + readonly MAX_VERTEX_UNIFORM_VECTORS: 0x8DFB; + readonly MAX_VARYING_VECTORS: 0x8DFC; + readonly MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8B4D; + readonly MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8B4C; + readonly MAX_TEXTURE_IMAGE_UNITS: 0x8872; + readonly MAX_FRAGMENT_UNIFORM_VECTORS: 0x8DFD; + readonly SHADER_TYPE: 0x8B4F; + readonly DELETE_STATUS: 0x8B80; + readonly LINK_STATUS: 0x8B82; + readonly VALIDATE_STATUS: 0x8B83; + readonly ATTACHED_SHADERS: 0x8B85; + readonly ACTIVE_UNIFORMS: 0x8B86; + readonly ACTIVE_ATTRIBUTES: 0x8B89; + readonly SHADING_LANGUAGE_VERSION: 0x8B8C; + readonly CURRENT_PROGRAM: 0x8B8D; + readonly NEVER: 0x0200; + readonly LESS: 0x0201; + readonly EQUAL: 0x0202; + readonly LEQUAL: 0x0203; + readonly GREATER: 0x0204; + readonly NOTEQUAL: 0x0205; + readonly GEQUAL: 0x0206; + readonly ALWAYS: 0x0207; + readonly KEEP: 0x1E00; + readonly REPLACE: 0x1E01; + readonly INCR: 0x1E02; + readonly DECR: 0x1E03; + readonly INVERT: 0x150A; + readonly INCR_WRAP: 0x8507; + readonly DECR_WRAP: 0x8508; + readonly VENDOR: 0x1F00; + readonly RENDERER: 0x1F01; + readonly VERSION: 0x1F02; + readonly NEAREST: 0x2600; + readonly LINEAR: 0x2601; + readonly NEAREST_MIPMAP_NEAREST: 0x2700; + readonly LINEAR_MIPMAP_NEAREST: 0x2701; + readonly NEAREST_MIPMAP_LINEAR: 0x2702; + readonly LINEAR_MIPMAP_LINEAR: 0x2703; + readonly TEXTURE_MAG_FILTER: 0x2800; + readonly TEXTURE_MIN_FILTER: 0x2801; + readonly TEXTURE_WRAP_S: 0x2802; + readonly TEXTURE_WRAP_T: 0x2803; + readonly TEXTURE_2D: 0x0DE1; + readonly TEXTURE: 0x1702; + readonly TEXTURE_CUBE_MAP: 0x8513; + readonly TEXTURE_BINDING_CUBE_MAP: 0x8514; + readonly TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515; + readonly TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516; + readonly TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517; + readonly TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518; + readonly TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519; + readonly TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851A; + readonly MAX_CUBE_MAP_TEXTURE_SIZE: 0x851C; + readonly TEXTURE0: 0x84C0; + readonly TEXTURE1: 0x84C1; + readonly TEXTURE2: 0x84C2; + readonly TEXTURE3: 0x84C3; + readonly TEXTURE4: 0x84C4; + readonly TEXTURE5: 0x84C5; + readonly TEXTURE6: 0x84C6; + readonly TEXTURE7: 0x84C7; + readonly TEXTURE8: 0x84C8; + readonly TEXTURE9: 0x84C9; + readonly TEXTURE10: 0x84CA; + readonly TEXTURE11: 0x84CB; + readonly TEXTURE12: 0x84CC; + readonly TEXTURE13: 0x84CD; + readonly TEXTURE14: 0x84CE; + readonly TEXTURE15: 0x84CF; + readonly TEXTURE16: 0x84D0; + readonly TEXTURE17: 0x84D1; + readonly TEXTURE18: 0x84D2; + readonly TEXTURE19: 0x84D3; + readonly TEXTURE20: 0x84D4; + readonly TEXTURE21: 0x84D5; + readonly TEXTURE22: 0x84D6; + readonly TEXTURE23: 0x84D7; + readonly TEXTURE24: 0x84D8; + readonly TEXTURE25: 0x84D9; + readonly TEXTURE26: 0x84DA; + readonly TEXTURE27: 0x84DB; + readonly TEXTURE28: 0x84DC; + readonly TEXTURE29: 0x84DD; + readonly TEXTURE30: 0x84DE; + readonly TEXTURE31: 0x84DF; + readonly ACTIVE_TEXTURE: 0x84E0; + readonly REPEAT: 0x2901; + readonly CLAMP_TO_EDGE: 0x812F; + readonly MIRRORED_REPEAT: 0x8370; + readonly FLOAT_VEC2: 0x8B50; + readonly FLOAT_VEC3: 0x8B51; + readonly FLOAT_VEC4: 0x8B52; + readonly INT_VEC2: 0x8B53; + readonly INT_VEC3: 0x8B54; + readonly INT_VEC4: 0x8B55; + readonly BOOL: 0x8B56; + readonly BOOL_VEC2: 0x8B57; + readonly BOOL_VEC3: 0x8B58; + readonly BOOL_VEC4: 0x8B59; + readonly FLOAT_MAT2: 0x8B5A; + readonly FLOAT_MAT3: 0x8B5B; + readonly FLOAT_MAT4: 0x8B5C; + readonly SAMPLER_2D: 0x8B5E; + readonly SAMPLER_CUBE: 0x8B60; + readonly VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622; + readonly VERTEX_ATTRIB_ARRAY_SIZE: 0x8623; + readonly VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624; + readonly VERTEX_ATTRIB_ARRAY_TYPE: 0x8625; + readonly VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886A; + readonly VERTEX_ATTRIB_ARRAY_POINTER: 0x8645; + readonly VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889F; + readonly IMPLEMENTATION_COLOR_READ_TYPE: 0x8B9A; + readonly IMPLEMENTATION_COLOR_READ_FORMAT: 0x8B9B; + readonly COMPILE_STATUS: 0x8B81; + readonly LOW_FLOAT: 0x8DF0; + readonly MEDIUM_FLOAT: 0x8DF1; + readonly HIGH_FLOAT: 0x8DF2; + readonly LOW_INT: 0x8DF3; + readonly MEDIUM_INT: 0x8DF4; + readonly HIGH_INT: 0x8DF5; + readonly FRAMEBUFFER: 0x8D40; + readonly RENDERBUFFER: 0x8D41; + readonly RGBA4: 0x8056; + readonly RGB5_A1: 0x8057; + readonly RGBA8: 0x8058; + readonly RGB565: 0x8D62; + readonly DEPTH_COMPONENT16: 0x81A5; + readonly STENCIL_INDEX8: 0x8D48; + readonly DEPTH_STENCIL: 0x84F9; + readonly RENDERBUFFER_WIDTH: 0x8D42; + readonly RENDERBUFFER_HEIGHT: 0x8D43; + readonly RENDERBUFFER_INTERNAL_FORMAT: 0x8D44; + readonly RENDERBUFFER_RED_SIZE: 0x8D50; + readonly RENDERBUFFER_GREEN_SIZE: 0x8D51; + readonly RENDERBUFFER_BLUE_SIZE: 0x8D52; + readonly RENDERBUFFER_ALPHA_SIZE: 0x8D53; + readonly RENDERBUFFER_DEPTH_SIZE: 0x8D54; + readonly RENDERBUFFER_STENCIL_SIZE: 0x8D55; + readonly FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8CD0; + readonly FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8CD1; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8CD2; + readonly FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8CD3; + readonly COLOR_ATTACHMENT0: 0x8CE0; + readonly DEPTH_ATTACHMENT: 0x8D00; + readonly STENCIL_ATTACHMENT: 0x8D20; + readonly DEPTH_STENCIL_ATTACHMENT: 0x821A; + readonly NONE: 0; + readonly FRAMEBUFFER_COMPLETE: 0x8CD5; + readonly FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8CD6; + readonly FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8CD7; + readonly FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8CD9; + readonly FRAMEBUFFER_UNSUPPORTED: 0x8CDD; + readonly FRAMEBUFFER_BINDING: 0x8CA6; + readonly RENDERBUFFER_BINDING: 0x8CA7; + readonly MAX_RENDERBUFFER_SIZE: 0x84E8; + readonly INVALID_FRAMEBUFFER_OPERATION: 0x0506; + readonly UNPACK_FLIP_Y_WEBGL: 0x9240; + readonly UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241; + readonly CONTEXT_LOST_WEBGL: 0x9242; + readonly UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243; + readonly BROWSER_DEFAULT_WEBGL: 0x9244; +} + +interface WebGLRenderingContextOverloads { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bufferData) */ + bufferData(target: GLenum, size: GLsizeiptr, usage: GLenum): void; + bufferData(target: GLenum, data: AllowSharedBufferSource | null, usage: GLenum): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/bufferSubData) */ + bufferSubData(target: GLenum, offset: GLintptr, data: AllowSharedBufferSource): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compressedTexImage2D) */ + compressedTexImage2D(target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, data: ArrayBufferView): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/compressedTexSubImage2D) */ + compressedTexSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, data: ArrayBufferView): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/readPixels) */ + readPixels(x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/texImage2D) */ + texImage2D(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; + texImage2D(target: GLenum, level: GLint, internalformat: GLint, format: GLenum, type: GLenum, source: TexImageSource): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/texSubImage2D) */ + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: ArrayBufferView | null): void; + texSubImage2D(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, format: GLenum, type: GLenum, source: TexImageSource): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1fv(location: WebGLUniformLocation | null, v: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform1iv(location: WebGLUniformLocation | null, v: Int32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2fv(location: WebGLUniformLocation | null, v: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform2iv(location: WebGLUniformLocation | null, v: Int32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3fv(location: WebGLUniformLocation | null, v: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform3iv(location: WebGLUniformLocation | null, v: Int32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4fv(location: WebGLUniformLocation | null, v: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniform) */ + uniform4iv(location: WebGLUniformLocation | null, v: Int32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix2fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix3fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLRenderingContext/uniformMatrix) */ + uniformMatrix4fv(location: WebGLUniformLocation | null, transpose: GLboolean, value: Float32List): void; +} + +/** + * The **`WebGLSampler`** interface is part of the WebGL 2 API and stores sampling parameters for WebGLTexture access inside of a shader. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLSampler) + */ +interface WebGLSampler { +} + +declare var WebGLSampler: { + prototype: WebGLSampler; + new(): WebGLSampler; +}; + +/** + * The **WebGLShader** is part of the WebGL API and can either be a vertex or a fragment shader. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLShader) + */ +interface WebGLShader { +} + +declare var WebGLShader: { + prototype: WebGLShader; + new(): WebGLShader; +}; + +/** + * The **WebGLShaderPrecisionFormat** interface is part of the WebGL API and represents the information returned by calling the WebGLRenderingContext.getShaderPrecisionFormat() method. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLShaderPrecisionFormat) + */ +interface WebGLShaderPrecisionFormat { + /** + * The read-only **`WebGLShaderPrecisionFormat.precision`** property returns the number of bits of precision that can be represented. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLShaderPrecisionFormat/precision) + */ + readonly precision: GLint; + /** + * The read-only **`WebGLShaderPrecisionFormat.rangeMax`** property returns the base 2 log of the absolute value of the maximum value that can be represented. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLShaderPrecisionFormat/rangeMax) + */ + readonly rangeMax: GLint; + /** + * The read-only **`WebGLShaderPrecisionFormat.rangeMin`** property returns the base 2 log of the absolute value of the minimum value that can be represented. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLShaderPrecisionFormat/rangeMin) + */ + readonly rangeMin: GLint; +} + +declare var WebGLShaderPrecisionFormat: { + prototype: WebGLShaderPrecisionFormat; + new(): WebGLShaderPrecisionFormat; +}; + +/** + * The **`WebGLSync`** interface is part of the WebGL 2 API and is used to synchronize activities between the GPU and the application. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLSync) + */ +interface WebGLSync { +} + +declare var WebGLSync: { + prototype: WebGLSync; + new(): WebGLSync; +}; + +/** + * The **WebGLTexture** interface is part of the WebGL API and represents an opaque texture object providing storage and state for texturing operations. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLTexture) + */ +interface WebGLTexture { +} + +declare var WebGLTexture: { + prototype: WebGLTexture; + new(): WebGLTexture; +}; + +/** + * The **`WebGLTransformFeedback`** interface is part of the WebGL 2 API and enables transform feedback, which is the process of capturing primitives generated by vertex processing. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLTransformFeedback) + */ +interface WebGLTransformFeedback { +} + +declare var WebGLTransformFeedback: { + prototype: WebGLTransformFeedback; + new(): WebGLTransformFeedback; +}; + +/** + * The **WebGLUniformLocation** interface is part of the WebGL API and represents the location of a uniform variable in a shader program. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLUniformLocation) + */ +interface WebGLUniformLocation { +} + +declare var WebGLUniformLocation: { + prototype: WebGLUniformLocation; + new(): WebGLUniformLocation; +}; + +/** + * The **`WebGLVertexArrayObject`** interface is part of the WebGL 2 API, represents vertex array objects (VAOs) pointing to vertex array data, and provides names for different sets of vertex data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObject) + */ +interface WebGLVertexArrayObject { +} + +declare var WebGLVertexArrayObject: { + prototype: WebGLVertexArrayObject; + new(): WebGLVertexArrayObject; +}; + +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebGLVertexArrayObject) */ +interface WebGLVertexArrayObjectOES { +} + +interface WebSocketEventMap { + "close": CloseEvent; + "error": Event; + "message": MessageEvent; + "open": Event; +} + +/** + * The `WebSocket` object provides the API for creating and managing a WebSocket connection to a server, as well as for sending and receiving data on the connection. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket) + */ +interface WebSocket extends EventTarget { + /** + * The **`WebSocket.binaryType`** property controls the type of binary data being received over the WebSocket connection. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/binaryType) + */ + binaryType: BinaryType; + /** + * The **`WebSocket.bufferedAmount`** read-only property returns the number of bytes of data that have been queued using calls to `send()` but not yet transmitted to the network. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/bufferedAmount) + */ + readonly bufferedAmount: number; + /** + * The **`WebSocket.extensions`** read-only property returns the extensions selected by the server. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/extensions) + */ + readonly extensions: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/close_event) */ + onclose: ((this: WebSocket, ev: CloseEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/error_event) */ + onerror: ((this: WebSocket, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/message_event) */ + onmessage: ((this: WebSocket, ev: MessageEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/open_event) */ + onopen: ((this: WebSocket, ev: Event) => any) | null; + /** + * The **`WebSocket.protocol`** read-only property returns the name of the sub-protocol the server selected; this will be one of the strings specified in the `protocols` parameter when creating the WebSocket object, or the empty string if no connection is established. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/protocol) + */ + readonly protocol: string; + /** + * The **`WebSocket.readyState`** read-only property returns the current state of the WebSocket connection. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/readyState) + */ + readonly readyState: number; + /** + * The **`WebSocket.url`** read-only property returns the absolute URL of the WebSocket as resolved by the constructor. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/url) + */ + readonly url: string; + /** + * The **`WebSocket.close()`** method closes the already `CLOSED`, this method does nothing. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/close) + */ + close(code?: number, reason?: string): void; + /** + * The **`WebSocket.send()`** method enqueues the specified data to be transmitted to the server over the WebSocket connection, increasing the value of `bufferedAmount` by the number of bytes needed to contain the data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebSocket/send) + */ + send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void; + readonly CONNECTING: 0; + readonly OPEN: 1; + readonly CLOSING: 2; + readonly CLOSED: 3; + addEventListener(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var WebSocket: { + prototype: WebSocket; + new(url: string | URL, protocols?: string | string[]): WebSocket; + readonly CONNECTING: 0; + readonly OPEN: 1; + readonly CLOSING: 2; + readonly CLOSED: 3; +}; + +/** + * The **`WebTransport`** interface of the WebTransport API provides functionality to enable a user agent to connect to an HTTP/3 server, initiate reliable and unreliable transport in either or both directions, and close the connection once it is no longer needed. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport) + */ +interface WebTransport { + /** + * The **`closed`** read-only property of the WebTransport interface returns a promise that resolves when the transport is closed. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/closed) + */ + readonly closed: Promise; + /** + * The **`datagrams`** read-only property of the WebTransport interface returns a WebTransportDatagramDuplexStream instance that can be used to send and receive datagrams — unreliable data transmission. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/datagrams) + */ + readonly datagrams: WebTransportDatagramDuplexStream; + /** + * The **`incomingBidirectionalStreams`** read-only property of the WebTransport interface represents one or more bidirectional streams opened by the server. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/incomingBidirectionalStreams) + */ + readonly incomingBidirectionalStreams: ReadableStream; + /** + * The **`incomingUnidirectionalStreams`** read-only property of the WebTransport interface represents one or more unidirectional streams opened by the server. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/incomingUnidirectionalStreams) + */ + readonly incomingUnidirectionalStreams: ReadableStream; + /** + * The **`ready`** read-only property of the WebTransport interface returns a promise that resolves when the transport is ready to use. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/ready) + */ + readonly ready: Promise; + /** + * The **`close()`** method of the WebTransport interface closes an ongoing WebTransport session. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/close) + */ + close(closeInfo?: WebTransportCloseInfo): void; + /** + * The **`createBidirectionalStream()`** method of the WebTransport interface asynchronously opens and returns a bidirectional stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/createBidirectionalStream) + */ + createBidirectionalStream(options?: WebTransportSendStreamOptions): Promise; + /** + * The **`createUnidirectionalStream()`** method of the WebTransport interface asynchronously opens a unidirectional stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransport/createUnidirectionalStream) + */ + createUnidirectionalStream(options?: WebTransportSendStreamOptions): Promise; +} + +declare var WebTransport: { + prototype: WebTransport; + new(url: string | URL, options?: WebTransportOptions): WebTransport; +}; + +/** + * The **`WebTransportBidirectionalStream`** interface of the WebTransport API represents a bidirectional stream created by a server or a client that can be used for reliable transport. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportBidirectionalStream) + */ +interface WebTransportBidirectionalStream { + /** + * The **`readable`** read-only property of the WebTransportBidirectionalStream interface returns a WebTransportReceiveStream instance that can be used to reliably read incoming data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportBidirectionalStream/readable) + */ + readonly readable: ReadableStream; + /** + * The **`writable`** read-only property of the WebTransportBidirectionalStream interface returns a WebTransportSendStream instance that can be used to write outgoing data. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportBidirectionalStream/writable) + */ + readonly writable: WritableStream; +} + +declare var WebTransportBidirectionalStream: { + prototype: WebTransportBidirectionalStream; + new(): WebTransportBidirectionalStream; +}; + +/** + * The **`WebTransportDatagramDuplexStream`** interface of the WebTransport API represents a duplex stream that can be used for unreliable transport of datagrams between client and server. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream) + */ +interface WebTransportDatagramDuplexStream { + /** + * The **`incomingHighWaterMark`** property of the WebTransportDatagramDuplexStream interface gets or sets the high water mark for incoming chunks of data — this is the maximum size, in chunks, that the incoming ReadableStream's internal queue can reach before it is considered full. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/incomingHighWaterMark) + */ + incomingHighWaterMark: number; + /** + * The **`incomingMaxAge`** property of the WebTransportDatagramDuplexStream interface gets or sets the maximum age for incoming datagrams, in milliseconds. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/incomingMaxAge) + */ + incomingMaxAge: number | null; + /** + * The **`maxDatagramSize`** read-only property of the WebTransportDatagramDuplexStream interface returns the maximum allowable size of outgoing datagrams, in bytes, that can be written to WebTransportDatagramDuplexStream.writable. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/maxDatagramSize) + */ + readonly maxDatagramSize: number; + /** + * The **`outgoingHighWaterMark`** property of the WebTransportDatagramDuplexStream interface gets or sets the high water mark for outgoing chunks of data — this is the maximum size, in chunks, that the outgoing WritableStream's internal queue can reach before it is considered full. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/outgoingHighWaterMark) + */ + outgoingHighWaterMark: number; + /** + * The **`outgoingMaxAge`** property of the WebTransportDatagramDuplexStream interface gets or sets the maximum age for outgoing datagrams, in milliseconds. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/outgoingMaxAge) + */ + outgoingMaxAge: number | null; + /** + * The **`readable`** read-only property of the WebTransportDatagramDuplexStream interface returns a ReadableStream instance that can be used to unreliably read incoming datagrams from the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/readable) + */ + readonly readable: ReadableStream; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportDatagramDuplexStream/writable) */ + readonly writable: WritableStream; +} + +declare var WebTransportDatagramDuplexStream: { + prototype: WebTransportDatagramDuplexStream; + new(): WebTransportDatagramDuplexStream; +}; + +/** + * The **`WebTransportError`** interface of the WebTransport API represents an error related to the API, which can arise from server errors, network connection problems, or client-initiated abort operations (for example, arising from a WritableStream.abort() call). + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportError) + */ +interface WebTransportError extends DOMException { + /** + * The **`source`** read-only property of the WebTransportError interface returns an enumerated value indicating the source of the error. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportError/source) + */ + readonly source: WebTransportErrorSource; + /** + * The **`streamErrorCode`** read-only property of the WebTransportError interface returns a number in the range 0-255 indicating the application protocol error code for this error, or `null` if one is not available. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WebTransportError/streamErrorCode) + */ + readonly streamErrorCode: number | null; +} + +declare var WebTransportError: { + prototype: WebTransportError; + new(message?: string, options?: WebTransportErrorOptions): WebTransportError; +}; + +/** + * The `WindowClient` interface of the ServiceWorker API represents the scope of a service worker client that is a document in a browsing context, controlled by an active worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WindowClient) + */ +interface WindowClient extends Client { + /** + * The **`focused`** read-only property of the the current client has focus. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WindowClient/focused) + */ + readonly focused: boolean; + /** + * The **`visibilityState`** read-only property of the This value can be one of `'hidden'`, `'visible'`, or `'prerender'`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WindowClient/visibilityState) + */ + readonly visibilityState: DocumentVisibilityState; + /** + * The **`focus()`** method of the WindowClient interface gives user input focus to the current client and returns a ```js-nolint focus() ``` None. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WindowClient/focus) + */ + focus(): Promise; + /** + * The **`navigate()`** method of the WindowClient interface loads a specified URL into a controlled client page then returns a ```js-nolint navigate(url) ``` - `url` - : The location to navigate to. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WindowClient/navigate) + */ + navigate(url: string | URL): Promise; +} + +declare var WindowClient: { + prototype: WindowClient; + new(): WindowClient; +}; + +interface WindowOrWorkerGlobalScope { + /** + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/caches) + */ + readonly caches: CacheStorage; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated) */ + readonly crossOriginIsolated: boolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crypto) */ + readonly crypto: Crypto; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/indexedDB) */ + readonly indexedDB: IDBFactory; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/isSecureContext) */ + readonly isSecureContext: boolean; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/origin) */ + readonly origin: string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/performance) */ + readonly performance: Performance; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */ + atob(data: string): string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */ + btoa(data: string): string; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearInterval) */ + clearInterval(id: number | undefined): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearTimeout) */ + clearTimeout(id: number | undefined): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/createImageBitmap) */ + createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise; + createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch) */ + fetch(input: RequestInfo | URL, init?: RequestInit): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/queueMicrotask) */ + queueMicrotask(callback: VoidFunction): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/reportError) */ + reportError(e: any): void; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */ + setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */ + setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/structuredClone) */ + structuredClone(value: T, options?: StructuredSerializeOptions): T; +} + +interface WorkerEventMap extends AbstractWorkerEventMap, MessageEventTargetEventMap { +} + +/** + * The **`Worker`** interface of the Web Workers API represents a background task that can be created via script, which can send messages back to its creator. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Worker) + */ +interface Worker extends EventTarget, AbstractWorker, MessageEventTarget { + /** + * The **`postMessage()`** method of the Worker interface sends a message to the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Worker/postMessage) + */ + postMessage(message: any, transfer: Transferable[]): void; + postMessage(message: any, options?: StructuredSerializeOptions): void; + /** + * The **`terminate()`** method of the Worker interface immediately terminates the Worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Worker/terminate) + */ + terminate(): void; + addEventListener(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: Worker, ev: WorkerEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var Worker: { + prototype: Worker; + new(scriptURL: string | URL, options?: WorkerOptions): Worker; +}; + +interface WorkerGlobalScopeEventMap { + "error": ErrorEvent; + "languagechange": Event; + "offline": Event; + "online": Event; + "rejectionhandled": PromiseRejectionEvent; + "unhandledrejection": PromiseRejectionEvent; +} + +/** + * The **`WorkerGlobalScope`** interface of the Web Workers API is an interface representing the scope of any worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope) + */ +interface WorkerGlobalScope extends EventTarget, FontFaceSource, WindowOrWorkerGlobalScope { + /** + * The **`location`** read-only property of the WorkerGlobalScope interface returns the WorkerLocation associated with the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/location) + */ + readonly location: WorkerLocation; + /** + * The **`navigator`** read-only property of the WorkerGlobalScope interface returns the WorkerNavigator associated with the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/navigator) + */ + readonly navigator: WorkerNavigator; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/error_event) */ + onerror: ((this: WorkerGlobalScope, ev: ErrorEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/languagechange_event) */ + onlanguagechange: ((this: WorkerGlobalScope, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/offline_event) */ + onoffline: ((this: WorkerGlobalScope, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/online_event) */ + ononline: ((this: WorkerGlobalScope, ev: Event) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/rejectionhandled_event) */ + onrejectionhandled: ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/unhandledrejection_event) */ + onunhandledrejection: ((this: WorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; + /** + * The **`self`** read-only property of the WorkerGlobalScope interface returns a reference to the `WorkerGlobalScope` itself. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/self) + */ + readonly self: WorkerGlobalScope & typeof globalThis; + /** + * The **`importScripts()`** method of the WorkerGlobalScope interface synchronously imports one or more scripts into the worker's scope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/importScripts) + */ + importScripts(...urls: (string | URL)[]): void; + addEventListener(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: WorkerGlobalScope, ev: WorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var WorkerGlobalScope: { + prototype: WorkerGlobalScope; + new(): WorkerGlobalScope; +}; + +/** + * The **`WorkerLocation`** interface defines the absolute location of the script executed by the Worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation) + */ +interface WorkerLocation { + /** + * The **`hash`** property of a WorkerLocation object returns the URL.hash part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/hash) + */ + readonly hash: string; + /** + * The **`host`** property of a WorkerLocation object returns the URL.host part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/host) + */ + readonly host: string; + /** + * The **`hostname`** property of a WorkerLocation object returns the URL.hostname part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/hostname) + */ + readonly hostname: string; + /** + * The **`href`** property of a WorkerLocation object returns a string containing the serialized URL for the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/href) + */ + readonly href: string; + toString(): string; + /** + * The **`origin`** property of a WorkerLocation object returns the worker's URL.origin. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/origin) + */ + readonly origin: string; + /** + * The **`pathname`** property of a WorkerLocation object returns the URL.pathname part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/pathname) + */ + readonly pathname: string; + /** + * The **`port`** property of a WorkerLocation object returns the URL.port part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/port) + */ + readonly port: string; + /** + * The **`protocol`** property of a WorkerLocation object returns the URL.protocol part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/protocol) + */ + readonly protocol: string; + /** + * The **`search`** property of a WorkerLocation object returns the URL.search part of the worker's location. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerLocation/search) + */ + readonly search: string; +} + +declare var WorkerLocation: { + prototype: WorkerLocation; + new(): WorkerLocation; +}; + +/** + * The **`WorkerNavigator`** interface represents a subset of the Navigator interface allowed to be accessed from a Worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerNavigator) + */ +interface WorkerNavigator extends NavigatorBadge, NavigatorConcurrentHardware, NavigatorID, NavigatorLanguage, NavigatorLocks, NavigatorOnLine, NavigatorStorage { + /** + * The read-only **`mediaCapabilities`** property of the WorkerNavigator interface references a MediaCapabilities object that can expose information about the decoding and encoding capabilities for a given format and output capabilities (as defined by the Media Capabilities API). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerNavigator/mediaCapabilities) + */ + readonly mediaCapabilities: MediaCapabilities; + /** + * The **`permissions`** read-only property of the WorkerNavigator interface returns a Permissions object that can be used to query and update permission status of APIs covered by the Permissions API. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerNavigator/permissions) + */ + readonly permissions: Permissions; + /** + * The **`serviceWorker`** read-only property of the WorkerNavigator interface returns the ServiceWorkerContainer object for the associated document, which provides access to registration, removal, upgrade, and communication with the ServiceWorker. + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerNavigator/serviceWorker) + */ + readonly serviceWorker: ServiceWorkerContainer; +} + +declare var WorkerNavigator: { + prototype: WorkerNavigator; + new(): WorkerNavigator; +}; + +/** + * The **`WritableStream`** interface of the Streams API provides a standard abstraction for writing streaming data to a destination, known as a sink. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream) + */ +interface WritableStream { + /** + * The **`locked`** read-only property of the WritableStream interface returns a boolean indicating whether the `WritableStream` is locked to a writer. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/locked) + */ + readonly locked: boolean; + /** + * The **`abort()`** method of the WritableStream interface aborts the stream, signaling that the producer can no longer successfully write to the stream and it is to be immediately moved to an error state, with any queued writes discarded. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/abort) + */ + abort(reason?: any): Promise; + /** + * The **`close()`** method of the WritableStream interface closes the associated stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/close) + */ + close(): Promise; + /** + * The **`getWriter()`** method of the WritableStream interface returns a new instance of WritableStreamDefaultWriter and locks the stream to that instance. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStream/getWriter) + */ + getWriter(): WritableStreamDefaultWriter; +} + +declare var WritableStream: { + prototype: WritableStream; + new(underlyingSink?: UnderlyingSink, strategy?: QueuingStrategy): WritableStream; +}; + +/** + * The **`WritableStreamDefaultController`** interface of the Streams API represents a controller allowing control of a WritableStream's state. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController) + */ +interface WritableStreamDefaultController { + /** + * The read-only **`signal`** property of the WritableStreamDefaultController interface returns the AbortSignal associated with the controller. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController/signal) + */ + readonly signal: AbortSignal; + /** + * The **`error()`** method of the with the associated stream to error. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultController/error) + */ + error(e?: any): void; +} + +declare var WritableStreamDefaultController: { + prototype: WritableStreamDefaultController; + new(): WritableStreamDefaultController; +}; + +/** + * The **`WritableStreamDefaultWriter`** interface of the Streams API is the object returned by WritableStream.getWriter() and once created locks the writer to the `WritableStream` ensuring that no other streams can write to the underlying sink. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter) + */ +interface WritableStreamDefaultWriter { + /** + * The **`closed`** read-only property of the the stream errors or the writer's lock is released. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/closed) + */ + readonly closed: Promise; + /** + * The **`desiredSize`** read-only property of the to fill the stream's internal queue. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/desiredSize) + */ + readonly desiredSize: number | null; + /** + * The **`ready`** read-only property of the that resolves when the desired size of the stream's internal queue transitions from non-positive to positive, signaling that it is no longer applying backpressure. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/ready) + */ + readonly ready: Promise; + /** + * The **`abort()`** method of the the producer can no longer successfully write to the stream and it is to be immediately moved to an error state, with any queued writes discarded. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/abort) + */ + abort(reason?: any): Promise; + /** + * The **`close()`** method of the stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/close) + */ + close(): Promise; + /** + * The **`releaseLock()`** method of the corresponding stream. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/releaseLock) + */ + releaseLock(): void; + /** + * The **`write()`** method of the operation. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WritableStreamDefaultWriter/write) + */ + write(chunk?: W): Promise; +} + +declare var WritableStreamDefaultWriter: { + prototype: WritableStreamDefaultWriter; + new(stream: WritableStream): WritableStreamDefaultWriter; +}; + +interface XMLHttpRequestEventMap extends XMLHttpRequestEventTargetEventMap { + "readystatechange": Event; +} + +/** + * `XMLHttpRequest` (XHR) objects are used to interact with servers. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest) + */ +interface XMLHttpRequest extends XMLHttpRequestEventTarget { + /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/readystatechange_event) */ + onreadystatechange: ((this: XMLHttpRequest, ev: Event) => any) | null; + /** + * The **XMLHttpRequest.readyState** property returns the state an XMLHttpRequest client is in. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/readyState) + */ + readonly readyState: number; + /** + * The XMLHttpRequest **`response`** property returns the response's body content as an ArrayBuffer, a Blob, a Document, a JavaScript Object, or a string, depending on the value of the request's XMLHttpRequest.responseType property. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/response) + */ + readonly response: any; + /** + * The read-only XMLHttpRequest property **`responseText`** returns the text received from a server following a request being sent. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseText) + */ + readonly responseText: string; + /** + * The XMLHttpRequest property **`responseType`** is an enumerated string value specifying the type of data contained in the response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseType) + */ + responseType: XMLHttpRequestResponseType; + /** + * The read-only **`XMLHttpRequest.responseURL`** property returns the serialized URL of the response or the empty string if the URL is `null`. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/responseURL) + */ + readonly responseURL: string; + /** + * The read-only **`XMLHttpRequest.status`** property returns the numerical HTTP status code of the `XMLHttpRequest`'s response. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/status) + */ + readonly status: number; + /** + * The read-only **`XMLHttpRequest.statusText`** property returns a string containing the response's status message as returned by the HTTP server. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/statusText) + */ + readonly statusText: string; + /** + * The **`XMLHttpRequest.timeout`** property is an `unsigned long` representing the number of milliseconds a request can take before automatically being terminated. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/timeout) + */ + timeout: number; + /** + * The XMLHttpRequest `upload` property returns an XMLHttpRequestUpload object that can be observed to monitor an upload's progress. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/upload) + */ + readonly upload: XMLHttpRequestUpload; + /** + * The **`XMLHttpRequest.withCredentials`** property is a boolean value that indicates whether or not cross-site `Access-Control` requests should be made using credentials such as cookies, authentication headers or TLS client certificates. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/withCredentials) + */ + withCredentials: boolean; + /** + * The **`XMLHttpRequest.abort()`** method aborts the request if it has already been sent. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/abort) + */ + abort(): void; + /** + * The XMLHttpRequest method **`getAllResponseHeaders()`** returns all the response headers, separated by CRLF, as a string, or returns `null` if no response has been received. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/getAllResponseHeaders) + */ + getAllResponseHeaders(): string; + /** + * The XMLHttpRequest method **`getResponseHeader()`** returns the string containing the text of a particular header's value. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/getResponseHeader) + */ + getResponseHeader(name: string): string | null; + /** + * The XMLHttpRequest method **`open()`** initializes a newly-created request, or re-initializes an existing one. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/open) + */ + open(method: string, url: string | URL): void; + open(method: string, url: string | URL, async: boolean, username?: string | null, password?: string | null): void; + /** + * The XMLHttpRequest method **`overrideMimeType()`** specifies a MIME type other than the one provided by the server to be used instead when interpreting the data being transferred in a request. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/overrideMimeType) + */ + overrideMimeType(mime: string): void; + /** + * The XMLHttpRequest method **`send()`** sends the request to the server. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/send) + */ + send(body?: XMLHttpRequestBodyInit | null): void; + /** + * The XMLHttpRequest method **`setRequestHeader()`** sets the value of an HTTP request header. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/setRequestHeader) + */ + setRequestHeader(name: string, value: string): void; + readonly UNSENT: 0; + readonly OPENED: 1; + readonly HEADERS_RECEIVED: 2; + readonly LOADING: 3; + readonly DONE: 4; + addEventListener(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: XMLHttpRequest, ev: XMLHttpRequestEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var XMLHttpRequest: { + prototype: XMLHttpRequest; + new(): XMLHttpRequest; + readonly UNSENT: 0; + readonly OPENED: 1; + readonly HEADERS_RECEIVED: 2; + readonly LOADING: 3; + readonly DONE: 4; +}; + +interface XMLHttpRequestEventTargetEventMap { + "abort": ProgressEvent; + "error": ProgressEvent; + "load": ProgressEvent; + "loadend": ProgressEvent; + "loadstart": ProgressEvent; + "progress": ProgressEvent; + "timeout": ProgressEvent; +} + +/** + * `XMLHttpRequestEventTarget` is the interface that describes the event handlers shared on XMLHttpRequest and XMLHttpRequestUpload. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequestEventTarget) + */ +interface XMLHttpRequestEventTarget extends EventTarget { + onabort: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + onerror: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + onload: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + onloadend: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + onloadstart: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + onprogress: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + ontimeout: ((this: XMLHttpRequest, ev: ProgressEvent) => any) | null; + addEventListener(type: K, listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: XMLHttpRequestEventTarget, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var XMLHttpRequestEventTarget: { + prototype: XMLHttpRequestEventTarget; + new(): XMLHttpRequestEventTarget; +}; + +/** + * The **`XMLHttpRequestUpload`** interface represents the upload process for a specific XMLHttpRequest. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/XMLHttpRequestUpload) + */ +interface XMLHttpRequestUpload extends XMLHttpRequestEventTarget { + addEventListener(type: K, listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; + addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; + removeEventListener(type: K, listener: (this: XMLHttpRequestUpload, ev: XMLHttpRequestEventTargetEventMap[K]) => any, options?: boolean | EventListenerOptions): void; + removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +} + +declare var XMLHttpRequestUpload: { + prototype: XMLHttpRequestUpload; + new(): XMLHttpRequestUpload; +}; + +declare namespace WebAssembly { + interface CompileError extends Error { + } + + var CompileError: { + prototype: CompileError; + new(message?: string): CompileError; + (message?: string): CompileError; + }; + + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Global) */ + interface Global { + value: ValueTypeMap[T]; + valueOf(): ValueTypeMap[T]; + } + + var Global: { + prototype: Global; + new(descriptor: GlobalDescriptor, v?: ValueTypeMap[T]): Global; + }; + + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Instance) */ + interface Instance { + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Instance/exports) */ + readonly exports: Exports; + } + + var Instance: { + prototype: Instance; + new(module: Module, importObject?: Imports): Instance; + }; + + interface LinkError extends Error { + } + + var LinkError: { + prototype: LinkError; + new(message?: string): LinkError; + (message?: string): LinkError; + }; + + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Memory) */ + interface Memory { + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Memory/buffer) */ + readonly buffer: ArrayBuffer; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Memory/grow) */ + grow(delta: number): number; + } + + var Memory: { + prototype: Memory; + new(descriptor: MemoryDescriptor): Memory; + }; + + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Module) */ + interface Module { + } + + var Module: { + prototype: Module; + new(bytes: BufferSource): Module; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Module/customSections_static) */ + customSections(moduleObject: Module, sectionName: string): ArrayBuffer[]; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Module/exports_static) */ + exports(moduleObject: Module): ModuleExportDescriptor[]; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Module/imports_static) */ + imports(moduleObject: Module): ModuleImportDescriptor[]; + }; + + interface RuntimeError extends Error { + } + + var RuntimeError: { + prototype: RuntimeError; + new(message?: string): RuntimeError; + (message?: string): RuntimeError; + }; + + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Table) */ + interface Table { + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Table/length) */ + readonly length: number; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Table/get) */ + get(index: number): any; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Table/grow) */ + grow(delta: number, value?: any): number; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/Table/set) */ + set(index: number, value?: any): void; + } + + var Table: { + prototype: Table; + new(descriptor: TableDescriptor, value?: any): Table; + }; + + interface GlobalDescriptor { + mutable?: boolean; + value: T; + } + + interface MemoryDescriptor { + initial: number; + maximum?: number; + shared?: boolean; + } + + interface ModuleExportDescriptor { + kind: ImportExportKind; + name: string; + } + + interface ModuleImportDescriptor { + kind: ImportExportKind; + module: string; + name: string; + } + + interface TableDescriptor { + element: TableKind; + initial: number; + maximum?: number; + } + + interface ValueTypeMap { + anyfunc: Function; + externref: any; + f32: number; + f64: number; + i32: number; + i64: bigint; + v128: never; + } + + interface WebAssemblyInstantiatedSource { + instance: Instance; + module: Module; + } + + type ImportExportKind = "function" | "global" | "memory" | "table"; + type TableKind = "anyfunc" | "externref"; + type ExportValue = Function | Global | Memory | Table; + type Exports = Record; + type ImportValue = ExportValue | number; + type Imports = Record; + type ModuleImports = Record; + type ValueType = keyof ValueTypeMap; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/compile_static) */ + function compile(bytes: BufferSource): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/compileStreaming_static) */ + function compileStreaming(source: Response | PromiseLike): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/instantiate_static) */ + function instantiate(bytes: BufferSource, importObject?: Imports): Promise; + function instantiate(moduleObject: Module, importObject?: Imports): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/instantiateStreaming_static) */ + function instantiateStreaming(source: Response | PromiseLike, importObject?: Imports): Promise; + /** [MDN Reference](https://developer.mozilla.org/docs/WebAssembly/Reference/JavaScript_interface/validate_static) */ + function validate(bytes: BufferSource): boolean; +} + +/** The **`console`** object provides access to the debugging console (e.g., the Web console in Firefox). */ +/** + * The **`console`** object provides access to the debugging console (e.g., the Web console in Firefox). + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console) + */ +interface Console { + /** + * The **`console.assert()`** static method writes an error message to the console if the assertion is false. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/assert_static) + */ + assert(condition?: boolean, ...data: any[]): void; + /** + * The **`console.clear()`** static method clears the console if possible. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/clear_static) + */ + clear(): void; + /** + * The **`console.count()`** static method logs the number of times that this particular call to `count()` has been called. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/count_static) + */ + count(label?: string): void; + /** + * The **`console.countReset()`** static method resets counter used with console/count_static. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/countReset_static) + */ + countReset(label?: string): void; + /** + * The **`console.debug()`** static method outputs a message to the console at the 'debug' log level. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/debug_static) + */ + debug(...data: any[]): void; + /** + * The **`console.dir()`** static method displays a list of the properties of the specified JavaScript object. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dir_static) + */ + dir(item?: any, options?: any): void; + /** + * The **`console.dirxml()`** static method displays an interactive tree of the descendant elements of the specified XML/HTML element. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/dirxml_static) + */ + dirxml(...data: any[]): void; + /** + * The **`console.error()`** static method outputs a message to the console at the 'error' log level. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/error_static) + */ + error(...data: any[]): void; + /** + * The **`console.group()`** static method creates a new inline group in the Web console log, causing any subsequent console messages to be indented by an additional level, until console/groupEnd_static is called. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/group_static) + */ + group(...data: any[]): void; + /** + * The **`console.groupCollapsed()`** static method creates a new inline group in the console. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupCollapsed_static) + */ + groupCollapsed(...data: any[]): void; + /** + * The **`console.groupEnd()`** static method exits the current inline group in the console. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/groupEnd_static) + */ + groupEnd(): void; + /** + * The **`console.info()`** static method outputs a message to the console at the 'info' log level. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/info_static) + */ + info(...data: any[]): void; + /** + * The **`console.log()`** static method outputs a message to the console. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/log_static) + */ + log(...data: any[]): void; + /** + * The **`console.table()`** static method displays tabular data as a table. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/table_static) + */ + table(tabularData?: any, properties?: string[]): void; + /** + * The **`console.time()`** static method starts a timer you can use to track how long an operation takes. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/time_static) + */ + time(label?: string): void; + /** + * The **`console.timeEnd()`** static method stops a timer that was previously started by calling console/time_static. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeEnd_static) + */ + timeEnd(label?: string): void; + /** + * The **`console.timeLog()`** static method logs the current value of a timer that was previously started by calling console/time_static. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/timeLog_static) + */ + timeLog(label?: string, ...data: any[]): void; + timeStamp(label?: string): void; + /** + * The **`console.trace()`** static method outputs a stack trace to the console. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/trace_static) + */ + trace(...data: any[]): void; + /** + * The **`console.warn()`** static method outputs a warning message to the console at the 'warning' log level. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/console/warn_static) + */ + warn(...data: any[]): void; +} + +declare var console: Console; + +interface AudioDataOutputCallback { + (output: AudioData): void; +} + +interface EncodedAudioChunkOutputCallback { + (output: EncodedAudioChunk, metadata?: EncodedAudioChunkMetadata): void; +} + +interface EncodedVideoChunkOutputCallback { + (chunk: EncodedVideoChunk, metadata?: EncodedVideoChunkMetadata): void; +} + +interface FrameRequestCallback { + (time: DOMHighResTimeStamp): void; +} + +interface LockGrantedCallback { + (lock: Lock | null): T; +} + +interface OnErrorEventHandlerNonNull { + (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error): any; +} + +interface PerformanceObserverCallback { + (entries: PerformanceObserverEntryList, observer: PerformanceObserver): void; +} + +interface QueuingStrategySize { + (chunk: T): number; +} + +interface ReportingObserverCallback { + (reports: Report[], observer: ReportingObserver): void; +} + +interface TransformerFlushCallback { + (controller: TransformStreamDefaultController): void | PromiseLike; +} + +interface TransformerStartCallback { + (controller: TransformStreamDefaultController): any; +} + +interface TransformerTransformCallback { + (chunk: I, controller: TransformStreamDefaultController): void | PromiseLike; +} + +interface UnderlyingSinkAbortCallback { + (reason?: any): void | PromiseLike; +} + +interface UnderlyingSinkCloseCallback { + (): void | PromiseLike; +} + +interface UnderlyingSinkStartCallback { + (controller: WritableStreamDefaultController): any; +} + +interface UnderlyingSinkWriteCallback { + (chunk: W, controller: WritableStreamDefaultController): void | PromiseLike; +} + +interface UnderlyingSourceCancelCallback { + (reason?: any): void | PromiseLike; +} + +interface UnderlyingSourcePullCallback { + (controller: ReadableStreamController): void | PromiseLike; +} + +interface UnderlyingSourceStartCallback { + (controller: ReadableStreamController): any; +} + +interface VideoFrameOutputCallback { + (output: VideoFrame): void; +} + +interface VoidFunction { + (): void; +} + +interface WebCodecsErrorCallback { + (error: DOMException): void; +} + +/** + * The **`name`** read-only property of the the Worker.Worker constructor can pass to get a reference to the DedicatedWorkerGlobalScope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/name) + */ +declare var name: string; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/rtctransform_event) */ +declare var onrtctransform: ((this: DedicatedWorkerGlobalScope, ev: RTCTransformEvent) => any) | null; +/** + * The **`close()`** method of the DedicatedWorkerGlobalScope interface discards any tasks queued in the `DedicatedWorkerGlobalScope`'s event loop, effectively closing this particular scope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/close) + */ +declare function close(): void; +/** + * The **`postMessage()`** method of the DedicatedWorkerGlobalScope interface sends a message to the main thread that spawned it. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/postMessage) + */ +declare function postMessage(message: any, transfer: Transferable[]): void; +declare function postMessage(message: any, options?: StructuredSerializeOptions): void; +/** + * The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent) + */ +declare function dispatchEvent(event: Event): boolean; +/** + * The **`location`** read-only property of the WorkerGlobalScope interface returns the WorkerLocation associated with the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/location) + */ +declare var location: WorkerLocation; +/** + * The **`navigator`** read-only property of the WorkerGlobalScope interface returns the WorkerNavigator associated with the worker. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/navigator) + */ +declare var navigator: WorkerNavigator; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/error_event) */ +declare var onerror: ((this: DedicatedWorkerGlobalScope, ev: ErrorEvent) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/languagechange_event) */ +declare var onlanguagechange: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/offline_event) */ +declare var onoffline: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/online_event) */ +declare var ononline: ((this: DedicatedWorkerGlobalScope, ev: Event) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/rejectionhandled_event) */ +declare var onrejectionhandled: ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/unhandledrejection_event) */ +declare var onunhandledrejection: ((this: DedicatedWorkerGlobalScope, ev: PromiseRejectionEvent) => any) | null; +/** + * The **`self`** read-only property of the WorkerGlobalScope interface returns a reference to the `WorkerGlobalScope` itself. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/self) + */ +declare var self: WorkerGlobalScope & typeof globalThis; +/** + * The **`importScripts()`** method of the WorkerGlobalScope interface synchronously imports one or more scripts into the worker's scope. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/WorkerGlobalScope/importScripts) + */ +declare function importScripts(...urls: (string | URL)[]): void; +/** + * The **`dispatchEvent()`** method of the EventTarget sends an Event to the object, (synchronously) invoking the affected event listeners in the appropriate order. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/EventTarget/dispatchEvent) + */ +declare function dispatchEvent(event: Event): boolean; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Document/fonts) */ +declare var fonts: FontFaceSet; +/** + * Available only in secure contexts. + * + * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/caches) + */ +declare var caches: CacheStorage; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crossOriginIsolated) */ +declare var crossOriginIsolated: boolean; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/crypto) */ +declare var crypto: Crypto; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/indexedDB) */ +declare var indexedDB: IDBFactory; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/isSecureContext) */ +declare var isSecureContext: boolean; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/origin) */ +declare var origin: string; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/performance) */ +declare var performance: Performance; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/atob) */ +declare function atob(data: string): string; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/btoa) */ +declare function btoa(data: string): string; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearInterval) */ +declare function clearInterval(id: number | undefined): void; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/clearTimeout) */ +declare function clearTimeout(id: number | undefined): void; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/createImageBitmap) */ +declare function createImageBitmap(image: ImageBitmapSource, options?: ImageBitmapOptions): Promise; +declare function createImageBitmap(image: ImageBitmapSource, sx: number, sy: number, sw: number, sh: number, options?: ImageBitmapOptions): Promise; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/fetch) */ +declare function fetch(input: RequestInfo | URL, init?: RequestInit): Promise; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/queueMicrotask) */ +declare function queueMicrotask(callback: VoidFunction): void; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/reportError) */ +declare function reportError(e: any): void; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setInterval) */ +declare function setInterval(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/setTimeout) */ +declare function setTimeout(handler: TimerHandler, timeout?: number, ...arguments: any[]): number; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Window/structuredClone) */ +declare function structuredClone(value: T, options?: StructuredSerializeOptions): T; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/cancelAnimationFrame) */ +declare function cancelAnimationFrame(handle: number): void; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/requestAnimationFrame) */ +declare function requestAnimationFrame(callback: FrameRequestCallback): number; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/message_event) */ +declare var onmessage: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; +/** [MDN Reference](https://developer.mozilla.org/docs/Web/API/DedicatedWorkerGlobalScope/messageerror_event) */ +declare var onmessageerror: ((this: DedicatedWorkerGlobalScope, ev: MessageEvent) => any) | null; +declare function addEventListener(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void; +declare function addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void; +declare function removeEventListener(type: K, listener: (this: DedicatedWorkerGlobalScope, ev: DedicatedWorkerGlobalScopeEventMap[K]) => any, options?: boolean | EventListenerOptions): void; +declare function removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void; +type AlgorithmIdentifier = Algorithm | string; +type AllowSharedBufferSource = ArrayBufferLike | ArrayBufferView; +type BigInteger = Uint8Array; +type BlobPart = BufferSource | Blob | string; +type BodyInit = ReadableStream | XMLHttpRequestBodyInit; +type BufferSource = ArrayBufferView | ArrayBuffer; +type CSSKeywordish = string | CSSKeywordValue; +type CSSNumberish = number | CSSNumericValue; +type CSSPerspectiveValue = CSSNumericValue | CSSKeywordish; +type CSSUnparsedSegment = string | CSSVariableReferenceValue; +type CanvasImageSource = ImageBitmap | OffscreenCanvas | VideoFrame; +type CookieList = CookieListItem[]; +type DOMHighResTimeStamp = number; +type EpochTimeStamp = number; +type EventListenerOrEventListenerObject = EventListener | EventListenerObject; +type FileSystemWriteChunkType = BufferSource | Blob | string | WriteParams; +type Float32List = Float32Array | GLfloat[]; +type FormDataEntryValue = File | string; +type GLbitfield = number; +type GLboolean = boolean; +type GLclampf = number; +type GLenum = number; +type GLfloat = number; +type GLint = number; +type GLint64 = number; +type GLintptr = number; +type GLsizei = number; +type GLsizeiptr = number; +type GLuint = number; +type GLuint64 = number; +type HashAlgorithmIdentifier = AlgorithmIdentifier; +type HeadersInit = [string, string][] | Record | Headers; +type IDBValidKey = number | string | Date | BufferSource | IDBValidKey[]; +type ImageBitmapSource = CanvasImageSource | Blob | ImageData; +type ImageBufferSource = AllowSharedBufferSource | ReadableStream; +type ImageDataArray = Uint8ClampedArray; +type Int32List = Int32Array | GLint[]; +type MessageEventSource = MessagePort | ServiceWorker; +type NamedCurve = string; +type OffscreenRenderingContext = OffscreenCanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext; +type OnErrorEventHandler = OnErrorEventHandlerNonNull | null; +type PerformanceEntryList = PerformanceEntry[]; +type PushMessageDataInit = BufferSource | string; +type ReadableStreamController = ReadableStreamDefaultController | ReadableByteStreamController; +type ReadableStreamReadResult = ReadableStreamReadValueResult | ReadableStreamReadDoneResult; +type ReadableStreamReader = ReadableStreamDefaultReader | ReadableStreamBYOBReader; +type ReportList = Report[]; +type RequestInfo = Request | string; +type TexImageSource = ImageBitmap | ImageData | OffscreenCanvas | VideoFrame; +type TimerHandler = string | Function; +type Transferable = OffscreenCanvas | ImageBitmap | MessagePort | MediaSourceHandle | ReadableStream | WritableStream | TransformStream | AudioData | VideoFrame | RTCDataChannel | ArrayBuffer; +type Uint32List = Uint32Array | GLuint[]; +type XMLHttpRequestBodyInit = Blob | BufferSource | FormData | URLSearchParams | string; +type AlphaOption = "discard" | "keep"; +type AudioSampleFormat = "f32" | "f32-planar" | "s16" | "s16-planar" | "s32" | "s32-planar" | "u8" | "u8-planar"; +type AvcBitstreamFormat = "annexb" | "avc"; +type BinaryType = "arraybuffer" | "blob"; +type BitrateMode = "constant" | "variable"; +type CSSMathOperator = "clamp" | "invert" | "max" | "min" | "negate" | "product" | "sum"; +type CSSNumericBaseType = "angle" | "flex" | "frequency" | "length" | "percent" | "resolution" | "time"; +type CanvasDirection = "inherit" | "ltr" | "rtl"; +type CanvasFillRule = "evenodd" | "nonzero"; +type CanvasFontKerning = "auto" | "none" | "normal"; +type CanvasFontStretch = "condensed" | "expanded" | "extra-condensed" | "extra-expanded" | "normal" | "semi-condensed" | "semi-expanded" | "ultra-condensed" | "ultra-expanded"; +type CanvasFontVariantCaps = "all-petite-caps" | "all-small-caps" | "normal" | "petite-caps" | "small-caps" | "titling-caps" | "unicase"; +type CanvasLineCap = "butt" | "round" | "square"; +type CanvasLineJoin = "bevel" | "miter" | "round"; +type CanvasTextAlign = "center" | "end" | "left" | "right" | "start"; +type CanvasTextBaseline = "alphabetic" | "bottom" | "hanging" | "ideographic" | "middle" | "top"; +type CanvasTextRendering = "auto" | "geometricPrecision" | "optimizeLegibility" | "optimizeSpeed"; +type ClientTypes = "all" | "sharedworker" | "window" | "worker"; +type CodecState = "closed" | "configured" | "unconfigured"; +type ColorGamut = "p3" | "rec2020" | "srgb"; +type ColorSpaceConversion = "default" | "none"; +type CompressionFormat = "deflate" | "deflate-raw" | "gzip"; +type CookieSameSite = "lax" | "none" | "strict"; +type DocumentVisibilityState = "hidden" | "visible"; +type EncodedAudioChunkType = "delta" | "key"; +type EncodedVideoChunkType = "delta" | "key"; +type EndingType = "native" | "transparent"; +type FileSystemHandleKind = "directory" | "file"; +type FontDisplay = "auto" | "block" | "fallback" | "optional" | "swap"; +type FontFaceLoadStatus = "error" | "loaded" | "loading" | "unloaded"; +type FontFaceSetLoadStatus = "loaded" | "loading"; +type FrameType = "auxiliary" | "nested" | "none" | "top-level"; +type GlobalCompositeOperation = "color" | "color-burn" | "color-dodge" | "copy" | "darken" | "destination-atop" | "destination-in" | "destination-out" | "destination-over" | "difference" | "exclusion" | "hard-light" | "hue" | "lighten" | "lighter" | "luminosity" | "multiply" | "overlay" | "saturation" | "screen" | "soft-light" | "source-atop" | "source-in" | "source-out" | "source-over" | "xor"; +type HardwareAcceleration = "no-preference" | "prefer-hardware" | "prefer-software"; +type HdrMetadataType = "smpteSt2086" | "smpteSt2094-10" | "smpteSt2094-40"; +type IDBCursorDirection = "next" | "nextunique" | "prev" | "prevunique"; +type IDBRequestReadyState = "done" | "pending"; +type IDBTransactionDurability = "default" | "relaxed" | "strict"; +type IDBTransactionMode = "readonly" | "readwrite" | "versionchange"; +type ImageOrientation = "flipY" | "from-image" | "none"; +type ImageSmoothingQuality = "high" | "low" | "medium"; +type KeyFormat = "jwk" | "pkcs8" | "raw" | "spki"; +type KeyType = "private" | "public" | "secret"; +type KeyUsage = "decrypt" | "deriveBits" | "deriveKey" | "encrypt" | "sign" | "unwrapKey" | "verify" | "wrapKey"; +type LatencyMode = "quality" | "realtime"; +type LockMode = "exclusive" | "shared"; +type MediaDecodingType = "file" | "media-source" | "webrtc"; +type MediaEncodingType = "record" | "webrtc"; +type MediaKeysRequirement = "not-allowed" | "optional" | "required"; +type NotificationDirection = "auto" | "ltr" | "rtl"; +type NotificationPermission = "default" | "denied" | "granted"; +type OffscreenRenderingContextId = "2d" | "bitmaprenderer" | "webgl" | "webgl2" | "webgpu"; +type OpusBitstreamFormat = "ogg" | "opus"; +type PermissionName = "camera" | "geolocation" | "microphone" | "midi" | "notifications" | "persistent-storage" | "push" | "screen-wake-lock" | "storage-access"; +type PermissionState = "denied" | "granted" | "prompt"; +type PredefinedColorSpace = "display-p3" | "srgb"; +type PremultiplyAlpha = "default" | "none" | "premultiply"; +type PushEncryptionKeyName = "auth" | "p256dh"; +type RTCDataChannelState = "closed" | "closing" | "connecting" | "open"; +type RTCEncodedVideoFrameType = "delta" | "empty" | "key"; +type ReadableStreamReaderMode = "byob"; +type ReadableStreamType = "bytes"; +type ReferrerPolicy = "" | "no-referrer" | "no-referrer-when-downgrade" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin" | "unsafe-url"; +type RequestCache = "default" | "force-cache" | "no-cache" | "no-store" | "only-if-cached" | "reload"; +type RequestCredentials = "include" | "omit" | "same-origin"; +type RequestDestination = "" | "audio" | "audioworklet" | "document" | "embed" | "font" | "frame" | "iframe" | "image" | "manifest" | "object" | "paintworklet" | "report" | "script" | "sharedworker" | "style" | "track" | "video" | "worker" | "xslt"; +type RequestMode = "cors" | "navigate" | "no-cors" | "same-origin"; +type RequestPriority = "auto" | "high" | "low"; +type RequestRedirect = "error" | "follow" | "manual"; +type ResizeQuality = "high" | "low" | "medium" | "pixelated"; +type ResponseType = "basic" | "cors" | "default" | "error" | "opaque" | "opaqueredirect"; +type SecurityPolicyViolationEventDisposition = "enforce" | "report"; +type ServiceWorkerState = "activated" | "activating" | "installed" | "installing" | "parsed" | "redundant"; +type ServiceWorkerUpdateViaCache = "all" | "imports" | "none"; +type TransferFunction = "hlg" | "pq" | "srgb"; +type VideoColorPrimaries = "bt470bg" | "bt709" | "smpte170m"; +type VideoEncoderBitrateMode = "constant" | "quantizer" | "variable"; +type VideoMatrixCoefficients = "bt470bg" | "bt709" | "rgb" | "smpte170m"; +type VideoPixelFormat = "BGRA" | "BGRX" | "I420" | "I420A" | "I422" | "I444" | "NV12" | "RGBA" | "RGBX"; +type VideoTransferCharacteristics = "bt709" | "iec61966-2-1" | "smpte170m"; +type WebGLPowerPreference = "default" | "high-performance" | "low-power"; +type WebTransportCongestionControl = "default" | "low-latency" | "throughput"; +type WebTransportErrorSource = "session" | "stream"; +type WorkerType = "classic" | "module"; +type WriteCommandType = "seek" | "truncate" | "write"; +type XMLHttpRequestResponseType = "" | "arraybuffer" | "blob" | "document" | "json" | "text"; diff --git a/.pnpm-store/v11/files/83/8c1a3d36cd69b2fa1b7043f945acdb5390b00c55df140500f4a596953b049c4e997e80df76b75b4e6972783973cb380a2d24caeb581689d07e60a8373c1e90 b/.pnpm-store/v11/files/83/8c1a3d36cd69b2fa1b7043f945acdb5390b00c55df140500f4a596953b049c4e997e80df76b75b4e6972783973cb380a2d24caeb581689d07e60a8373c1e90 new file mode 100644 index 00000000..9d90ffb2 --- /dev/null +++ b/.pnpm-store/v11/files/83/8c1a3d36cd69b2fa1b7043f945acdb5390b00c55df140500f4a596953b049c4e997e80df76b75b4e6972783973cb380a2d24caeb581689d07e60a8373c1e90 @@ -0,0 +1,4 @@ +'use strict'; + +var argv = require('../')(process.argv.slice(2)); +console.log(argv); diff --git a/.pnpm-store/v11/files/83/c2ea4247be62837a4bbf837bcf5dd201813a38eca838c6a9bc4b9a5e1545cdd0f14016e84152c23ee90c0fc3505dd22f806cf167daf27a0a377e58d89d238d b/.pnpm-store/v11/files/83/c2ea4247be62837a4bbf837bcf5dd201813a38eca838c6a9bc4b9a5e1545cdd0f14016e84152c23ee90c0fc3505dd22f806cf167daf27a0a377e58d89d238d new file mode 100644 index 00000000..e10b3519 --- /dev/null +++ b/.pnpm-store/v11/files/83/c2ea4247be62837a4bbf837bcf5dd201813a38eca838c6a9bc4b9a5e1545cdd0f14016e84152c23ee90c0fc3505dd22f806cf167daf27a0a377e58d89d238d @@ -0,0 +1,46 @@ +var baseClone = require('./_baseClone'), + baseMatches = require('./_baseMatches'); + +/** Used to compose bitmasks for cloning. */ +var CLONE_DEEP_FLAG = 1; + +/** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * **Note:** Multiple values can be checked by combining several matchers + * using `_.overSome` + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + * + * // Checking for several possible values + * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); + * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] + */ +function matches(source) { + return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); +} + +module.exports = matches; diff --git a/.pnpm-store/v11/files/83/d0e83031882f2637fdde46f6366dc4dece15d8b85e9df40cbb3eeec8bb754ff7626603de1f87626eb5ba0ec6b6d8b256af7e82d97d953a4265fbc3e71835a0 b/.pnpm-store/v11/files/83/d0e83031882f2637fdde46f6366dc4dece15d8b85e9df40cbb3eeec8bb754ff7626603de1f87626eb5ba0ec6b6d8b256af7e82d97d953a4265fbc3e71835a0 new file mode 100644 index 00000000..46b0b089 --- /dev/null +++ b/.pnpm-store/v11/files/83/d0e83031882f2637fdde46f6366dc4dece15d8b85e9df40cbb3eeec8bb754ff7626603de1f87626eb5ba0ec6b6d8b256af7e82d97d953a4265fbc3e71835a0 @@ -0,0 +1,96 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// + +interface ReadonlySetLike { + /** + * Despite its name, returns an iterator of the values in the set-like. + */ + keys(): Iterator; + /** + * @returns a boolean indicating whether an element with the specified value exists in the set-like or not. + */ + has(value: T): boolean; + /** + * @returns the number of (unique) elements in the set-like. + */ + readonly size: number; +} + +interface Set { + /** + * @returns a new Set containing all the elements in this Set and also all the elements in the argument. + */ + union(other: ReadonlySetLike): Set; + /** + * @returns a new Set containing all the elements which are both in this Set and in the argument. + */ + intersection(other: ReadonlySetLike): Set; + /** + * @returns a new Set containing all the elements in this Set which are not also in the argument. + */ + difference(other: ReadonlySetLike): Set; + /** + * @returns a new Set containing all the elements which are in either this Set or in the argument, but not in both. + */ + symmetricDifference(other: ReadonlySetLike): Set; + /** + * @returns a boolean indicating whether all the elements in this Set are also in the argument. + */ + isSubsetOf(other: ReadonlySetLike): boolean; + /** + * @returns a boolean indicating whether all the elements in the argument are also in this Set. + */ + isSupersetOf(other: ReadonlySetLike): boolean; + /** + * @returns a boolean indicating whether this Set has no elements in common with the argument. + */ + isDisjointFrom(other: ReadonlySetLike): boolean; +} + +interface ReadonlySet { + /** + * @returns a new Set containing all the elements in this Set and also all the elements in the argument. + */ + union(other: ReadonlySetLike): Set; + /** + * @returns a new Set containing all the elements which are both in this Set and in the argument. + */ + intersection(other: ReadonlySetLike): Set; + /** + * @returns a new Set containing all the elements in this Set which are not also in the argument. + */ + difference(other: ReadonlySetLike): Set; + /** + * @returns a new Set containing all the elements which are in either this Set or in the argument, but not in both. + */ + symmetricDifference(other: ReadonlySetLike): Set; + /** + * @returns a boolean indicating whether all the elements in this Set are also in the argument. + */ + isSubsetOf(other: ReadonlySetLike): boolean; + /** + * @returns a boolean indicating whether all the elements in the argument are also in this Set. + */ + isSupersetOf(other: ReadonlySetLike): boolean; + /** + * @returns a boolean indicating whether this Set has no elements in common with the argument. + */ + isDisjointFrom(other: ReadonlySetLike): boolean; +} diff --git a/.pnpm-store/v11/files/83/e6582a86ad46f269b19ffaddd7ae9eb5c00eed515a6dc9a1c738b07d55f3242458342d2a5d8fd7b3a7c777a431df00224a924b4d03e7e77a52b533fa56ec85 b/.pnpm-store/v11/files/83/e6582a86ad46f269b19ffaddd7ae9eb5c00eed515a6dc9a1c738b07d55f3242458342d2a5d8fd7b3a7c777a431df00224a924b4d03e7e77a52b533fa56ec85 new file mode 100644 index 00000000..d6b07bb5 --- /dev/null +++ b/.pnpm-store/v11/files/83/e6582a86ad46f269b19ffaddd7ae9eb5c00eed515a6dc9a1c738b07d55f3242458342d2a5d8fd7b3a7c777a431df00224a924b4d03e7e77a52b533fa56ec85 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').any; diff --git a/.pnpm-store/v11/files/83/e73aada1c55c0df25d266711ef9ebf94d3745243d5357fe04f984638c331f3d2578bc2ab8595b29c139a95c74ce4b473fa666afda664646b94abdd8110f94c b/.pnpm-store/v11/files/83/e73aada1c55c0df25d266711ef9ebf94d3745243d5357fe04f984638c331f3d2578bc2ab8595b29c139a95c74ce4b473fa666afda664646b94abdd8110f94c new file mode 100644 index 00000000..0b584952 --- /dev/null +++ b/.pnpm-store/v11/files/83/e73aada1c55c0df25d266711ef9ebf94d3745243d5357fe04f984638c331f3d2578bc2ab8595b29c139a95c74ce4b473fa666afda664646b94abdd8110f94c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('setWith', require('../setWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/84/0fb3c9c19e785db243261a3a02038c064e6b44be0473c2176fa399dfc8c4c04936ad5aabec7c1b2af9f55d0d241e04108550b9bfc066d40557a9c1dc00b494 b/.pnpm-store/v11/files/84/0fb3c9c19e785db243261a3a02038c064e6b44be0473c2176fa399dfc8c4c04936ad5aabec7c1b2af9f55d0d241e04108550b9bfc066d40557a9c1dc00b494 new file mode 100644 index 00000000..87ec9043 --- /dev/null +++ b/.pnpm-store/v11/files/84/0fb3c9c19e785db243261a3a02038c064e6b44be0473c2176fa399dfc8c4c04936ad5aabec7c1b2af9f55d0d241e04108550b9bfc066d40557a9c1dc00b494 @@ -0,0 +1 @@ +export declare const run: (projectRoot: string, sumanLibRoot: string, opts: Partial) => void; diff --git a/.pnpm-store/v11/files/84/3899f5f3b0949a20e3d6054c45653e0ad05504a56292dc1e0664eb41aa488428f6d08ebcd900191e37a987cdb6208487d94e92b0684a7e10f3fb8fc426229a b/.pnpm-store/v11/files/84/3899f5f3b0949a20e3d6054c45653e0ad05504a56292dc1e0664eb41aa488428f6d08ebcd900191e37a987cdb6208487d94e92b0684a7e10f3fb8fc426229a new file mode 100644 index 00000000..4ab58209 --- /dev/null +++ b/.pnpm-store/v11/files/84/3899f5f3b0949a20e3d6054c45653e0ad05504a56292dc1e0664eb41aa488428f6d08ebcd900191e37a987cdb6208487d94e92b0684a7e10f3fb8fc426229a @@ -0,0 +1 @@ +module.exports = require('./getOr'); diff --git a/.pnpm-store/v11/files/84/3d38804c3cf130c2fbd7bdd1b8a6761cb2fb76491e9367264f2513f57da0b5e71eea8826e1ebef125cd65bcbcfa0bdb9e250252635eaf68da18ec638d7943e b/.pnpm-store/v11/files/84/3d38804c3cf130c2fbd7bdd1b8a6761cb2fb76491e9367264f2513f57da0b5e71eea8826e1ebef125cd65bcbcfa0bdb9e250252635eaf68da18ec638d7943e new file mode 100644 index 00000000..f02a96cd --- /dev/null +++ b/.pnpm-store/v11/files/84/3d38804c3cf130c2fbd7bdd1b8a6761cb2fb76491e9367264f2513f57da0b5e71eea8826e1ebef125cd65bcbcfa0bdb9e250252635eaf68da18ec638d7943e @@ -0,0 +1,47 @@ +{ + "name": "object-copy", + "description": "Copy static properties, prototype properties, and descriptors from one object to another.", + "version": "0.1.0", + "homepage": "https://github.com/jonschlinkert/object-copy", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/object-copy", + "bugs": { + "url": "https://github.com/jonschlinkert/object-copy/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "devDependencies": { + "gulp-format-md": "*", + "mocha": "*" + }, + "keywords": [ + "copy", + "object" + ], + "verb": { + "layout": "default", + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [] + }, + "reflinks": [ + "verb" + ] + } +} diff --git a/.pnpm-store/v11/files/84/496b792aa1808467a811f1b4f585fbbd22bfedff824f6e2d31d47428e7724305edcefec068ae1616145cfe6b5aea5ea5de9b18ad8c2145b9bb6698d9c55746 b/.pnpm-store/v11/files/84/496b792aa1808467a811f1b4f585fbbd22bfedff824f6e2d31d47428e7724305edcefec068ae1616145cfe6b5aea5ea5de9b18ad8c2145b9bb6698d9c55746 new file mode 100644 index 00000000..6a60e8c2 --- /dev/null +++ b/.pnpm-store/v11/files/84/496b792aa1808467a811f1b4f585fbbd22bfedff824f6e2d31d47428e7724305edcefec068ae1616145cfe6b5aea5ea5de9b18ad8c2145b9bb6698d9c55746 @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2014 Nathan Rajlich + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/84/50f71f70e65cec8b30f78e29f8a933e3fdc813033a70481e538bcb2865e3e606824a51b4e5b6c4e964f81076aac455a5a98c97096572d8c08fbf38f301a753 b/.pnpm-store/v11/files/84/50f71f70e65cec8b30f78e29f8a933e3fdc813033a70481e538bcb2865e3e606824a51b4e5b6c4e964f81076aac455a5a98c97096572d8c08fbf38f301a753 new file mode 100644 index 00000000..f00345d0 --- /dev/null +++ b/.pnpm-store/v11/files/84/50f71f70e65cec8b30f78e29f8a933e3fdc813033a70481e538bcb2865e3e606824a51b4e5b6c4e964f81076aac455a5a98c97096572d8c08fbf38f301a753 @@ -0,0 +1,31 @@ +var baseFunctions = require('./_baseFunctions'), + keysIn = require('./keysIn'); + +/** + * Creates an array of function property names from own and inherited + * enumerable properties of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @returns {Array} Returns the function names. + * @see _.functions + * @example + * + * function Foo() { + * this.a = _.constant('a'); + * this.b = _.constant('b'); + * } + * + * Foo.prototype.c = _.constant('c'); + * + * _.functionsIn(new Foo); + * // => ['a', 'b', 'c'] + */ +function functionsIn(object) { + return object == null ? [] : baseFunctions(object, keysIn(object)); +} + +module.exports = functionsIn; diff --git a/.pnpm-store/v11/files/84/5bc9ff53e16d620d986352f39af71f77e45fb2418ceb48b3a4a1b12d135eb747605eee2d8228640bf063887c1f2dfde582a32cf97c130d0803fddd703dd95b b/.pnpm-store/v11/files/84/5bc9ff53e16d620d986352f39af71f77e45fb2418ceb48b3a4a1b12d135eb747605eee2d8228640bf063887c1f2dfde582a32cf97c130d0803fddd703dd95b new file mode 100644 index 00000000..5e3fc915 --- /dev/null +++ b/.pnpm-store/v11/files/84/5bc9ff53e16d620d986352f39af71f77e45fb2418ceb48b3a4a1b12d135eb747605eee2d8228640bf063887c1f2dfde582a32cf97c130d0803fddd703dd95b @@ -0,0 +1,110 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = asyncify; + +var _isObject = require('lodash/isObject'); + +var _isObject2 = _interopRequireDefault(_isObject); + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _setImmediate = require('./internal/setImmediate'); + +var _setImmediate2 = _interopRequireDefault(_setImmediate); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Take a sync function and make it async, passing its return value to a + * callback. This is useful for plugging sync functions into a waterfall, + * series, or other async functions. Any arguments passed to the generated + * function will be passed to the wrapped function (except for the final + * callback argument). Errors thrown will be passed to the callback. + * + * If the function passed to `asyncify` returns a Promise, that promises's + * resolved/rejected state will be used to call the callback, rather than simply + * the synchronous return value. + * + * This also means you can asyncify ES2017 `async` functions. + * + * @name asyncify + * @static + * @memberOf module:Utils + * @method + * @alias wrapSync + * @category Util + * @param {Function} func - The synchronous function, or Promise-returning + * function to convert to an {@link AsyncFunction}. + * @returns {AsyncFunction} An asynchronous wrapper of the `func`. To be + * invoked with `(args..., callback)`. + * @example + * + * // passing a regular synchronous function + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(JSON.parse), + * function (data, next) { + * // data is the result of parsing the text. + * // If there was a parsing error, it would have been caught. + * } + * ], callback); + * + * // passing a function returning a promise + * async.waterfall([ + * async.apply(fs.readFile, filename, "utf8"), + * async.asyncify(function (contents) { + * return db.model.create(contents); + * }), + * function (model, next) { + * // `model` is the instantiated model object. + * // If there was an error, this function would be skipped. + * } + * ], callback); + * + * // es2017 example, though `asyncify` is not needed if your JS environment + * // supports async functions out of the box + * var q = async.queue(async.asyncify(async function(file) { + * var intermediateStep = await processFile(file); + * return await somePromise(intermediateStep) + * })); + * + * q.push(files); + */ +function asyncify(func) { + return (0, _initialParams2.default)(function (args, callback) { + var result; + try { + result = func.apply(this, args); + } catch (e) { + return callback(e); + } + // if result is Promise object + if ((0, _isObject2.default)(result) && typeof result.then === 'function') { + result.then(function (value) { + invokeCallback(callback, null, value); + }, function (err) { + invokeCallback(callback, err.message ? err : new Error(err)); + }); + } else { + callback(null, result); + } + }); +} + +function invokeCallback(callback, error, value) { + try { + callback(error, value); + } catch (e) { + (0, _setImmediate2.default)(rethrow, e); + } +} + +function rethrow(error) { + throw error; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/84/69c8ed0d3b55b3388325e904dd2e27b42541868aa4aece725873751dc879c70c0882473d5f9e0d3f75deacca52dbab2c0a5c9304f840fe38880bdb6856fe4c b/.pnpm-store/v11/files/84/69c8ed0d3b55b3388325e904dd2e27b42541868aa4aece725873751dc879c70c0882473d5f9e0d3f75deacca52dbab2c0a5c9304f840fe38880bdb6856fe4c new file mode 100644 index 00000000..18c00bae --- /dev/null +++ b/.pnpm-store/v11/files/84/69c8ed0d3b55b3388325e904dd2e27b42541868aa4aece725873751dc879c70c0882473d5f9e0d3f75deacca52dbab2c0a5c9304f840fe38880bdb6856fe4c @@ -0,0 +1,2 @@ +var convert = require('./convert'); +module.exports = convert(require('../util')); diff --git a/.pnpm-store/v11/files/84/6d0d80d623b4200a3620ee1d6b0bdd9b88915c33eee49c32b956f0cf24f20d9d883e13c1f5e219c767a23b81e9f439e847aa9525da7a185fa6b6b20d4e38ec b/.pnpm-store/v11/files/84/6d0d80d623b4200a3620ee1d6b0bdd9b88915c33eee49c32b956f0cf24f20d9d883e13c1f5e219c767a23b81e9f439e847aa9525da7a185fa6b6b20d4e38ec new file mode 100644 index 00000000..2fde9a44 --- /dev/null +++ b/.pnpm-store/v11/files/84/6d0d80d623b4200a3620ee1d6b0bdd9b88915c33eee49c32b956f0cf24f20d9d883e13c1f5e219c767a23b81e9f439e847aa9525da7a185fa6b6b20d4e38ec @@ -0,0 +1,35 @@ +{ + "name": "ret", + "description": "Tokenizes a string that represents a regular expression.", + "keywords": [ + "regex", + "regexp", + "regular expression", + "parser", + "tokenizer" + ], + "version": "0.1.15", + "repository": { + "type": "git", + "url": "git://github.com/fent/ret.js.git" + }, + "author": "Roly Fentanes (https://github.com/fent)", + "main": "./lib/index.js", + "files": [ + "lib" + ], + "scripts": { + "test": "istanbul cover vows -- --spec test/*-test.js" + }, + "directories": { + "lib": "./lib" + }, + "devDependencies": { + "istanbul": "*", + "vows": "*" + }, + "engines": { + "node": ">=0.12" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/84/888dff590902194092bbd35faefd4e7201d7c0bd4d58a0506a1f68ddbc94b20d3650503c28e7a0ecae0f4b3514f690e5dabe55628f6824aec882a08450bbfd b/.pnpm-store/v11/files/84/888dff590902194092bbd35faefd4e7201d7c0bd4d58a0506a1f68ddbc94b20d3650503c28e7a0ecae0f4b3514f690e5dabe55628f6824aec882a08450bbfd new file mode 100644 index 00000000..6bf65602 --- /dev/null +++ b/.pnpm-store/v11/files/84/888dff590902194092bbd35faefd4e7201d7c0bd4d58a0506a1f68ddbc94b20d3650503c28e7a0ecae0f4b3514f690e5dabe55628f6824aec882a08450bbfd @@ -0,0 +1,48 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _identity = require('lodash/identity'); + +var _identity2 = _interopRequireDefault(_identity); + +var _createTester = require('./internal/createTester'); + +var _createTester2 = _interopRequireDefault(_createTester); + +var _doParallelLimit = require('./internal/doParallelLimit'); + +var _doParallelLimit2 = _interopRequireDefault(_doParallelLimit); + +var _findGetResult = require('./internal/findGetResult'); + +var _findGetResult2 = _interopRequireDefault(_findGetResult); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`detect`]{@link module:Collections.detect} but runs a maximum of `limit` async operations at a + * time. + * + * @name detectLimit + * @static + * @memberOf module:Collections + * @method + * @see [async.detect]{@link module:Collections.detect} + * @alias findLimit + * @category Collections + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {number} limit - The maximum number of async operations at a time. + * @param {AsyncFunction} iteratee - A truth test to apply to each item in `coll`. + * The iteratee must complete with a boolean value as its result. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called as soon as any + * iteratee returns `true`, or after all the `iteratee` functions have finished. + * Result will be the first item in the array that passes the truth test + * (iteratee) or the value `undefined` if none passed. Invoked with + * (err, result). + */ +exports.default = (0, _doParallelLimit2.default)((0, _createTester2.default)(_identity2.default, _findGetResult2.default)); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/84/8e7e136d21126056bcde151cdc74bf2d878cf295185b57b38b7958f9dc2f3ae20b0ebfe5c9ebf1227a3a11c93f03817e7f893424a2db4927b61390fa825032 b/.pnpm-store/v11/files/84/8e7e136d21126056bcde151cdc74bf2d878cf295185b57b38b7958f9dc2f3ae20b0ebfe5c9ebf1227a3a11c93f03817e7f893424a2db4927b61390fa825032 new file mode 100644 index 00000000..c08d1d6a --- /dev/null +++ b/.pnpm-store/v11/files/84/8e7e136d21126056bcde151cdc74bf2d878cf295185b57b38b7958f9dc2f3ae20b0ebfe5c9ebf1227a3a11c93f03817e7f893424a2db4927b61390fa825032 @@ -0,0 +1,34 @@ +const fs = require('fs'); + +const path = require('path'); +const p = path.resolve(__dirname + '/../../modules/fs-autogenerated.js'); +const strm = fs.createWriteStream(p); + +strm.write('const fs = {'); + +Object.keys(fs).forEach(function (k) { + + strm.write('\n\n'); + + if (typeof fs[k] === 'function') { + strm.write(' ' + k + ' : function(){\n' + + ' const args = Array.from(arguments);\n' + + ' setTimeout(function(){\n' + + ' try { args[args.length-1](\'fs will not work as we are in browser error\') } catch(err){}\n' + + ' },5);\n' + + ' return {};\n' + + '},'); + } + +}); + +strm.write('};'); +strm.write('module.exports = fs;\n'); + +strm.on('finish', function () { + process.exit(0); +}); + +strm.end(); + + diff --git a/.pnpm-store/v11/files/84/98f2900eab285d0582b6a5680dd470b8b979de336b35e471f263cc51138d2081a9df75d388e6347e3c319de977d8daf2185ac4575c71b3ff451c4f18350957 b/.pnpm-store/v11/files/84/98f2900eab285d0582b6a5680dd470b8b979de336b35e471f263cc51138d2081a9df75d388e6347e3c319de977d8daf2185ac4575c71b3ff451c4f18350957 new file mode 100644 index 00000000..07528fdb --- /dev/null +++ b/.pnpm-store/v11/files/84/98f2900eab285d0582b6a5680dd470b8b979de336b35e471f263cc51138d2081a9df75d388e6347e3c319de977d8daf2185ac4575c71b3ff451c4f18350957 @@ -0,0 +1,104 @@ +/// +import { ChildProcess } from "child_process"; +import { Writable } from "stream"; +import * as EE from 'events'; +import * as net from "net"; +export interface PoolioOpts { + filePath: string; + inheritStdio: boolean; + addWorkerOnExit: boolean; + size: number; + env: Object; + execArgv: Array; + streamStdioAfterDelegation: boolean; + args: Array; + oneTimeOnly: boolean; + stdin: IStreamFunction | Writable; + stderr: IStreamFunction | Writable; + stdout: IStreamFunction | Writable; + silent: boolean; + getSharedWritableStream: IStreamFunction | Writable; + resolveWhenWorkerExits: boolean; + doNotListenForMessagesFromWorkers: boolean; + oneJobPerWorker: boolean; +} +export interface PoolioResolutions { + [key: string]: PoolioResolution; +} +export interface IStreamFunction { + (): Writable; +} +export interface IResolutionCallback { + (err: Error | string, data?: Object): void; +} +export interface PoolioChildProcess extends ChildProcess { + workId: number; + workerId: number; + tempId: string; +} +export interface PoolioMsgQueue { + workId: number; + msg: string | Object; + __poolioWorkerId?: number; +} +export interface PoolioResolution { + cb?: Function; + resolve?: Function; + reject?: Function; +} +export interface PoolioResponseMsg { + workId: number; + error?: string; + result: Object; +} +export interface PoolioAnyOpts { + file: string; + fd: number; + tty: string; + socket: net.Socket; +} +export declare class Pool extends EE { + kill: boolean; + all: Array; + available: Array; + msgQueue: Array; + resolutions: PoolioResolutions; + removeNextAvailableWorker: boolean; + workerIdCounter: number; + jobIdCounter: number; + resolveWhenWorkerExits: boolean; + doNotListenForMessagesFromWorkers: boolean; + oneJobPerWorker: boolean; + okToDelegate: boolean; + __poolId: string; + execArgv: Array; + args: Array; + filePath: string; + size: number; + inheritStdio: boolean; + oneTimeOnly: boolean; + addWorkerOnExit: boolean; + stdin: IStreamFunction | Writable; + stderr: IStreamFunction | Writable; + stdout: IStreamFunction | Writable; + numberOfSpawnedWorkers: number; + numberOfDeadWorkers: number; + streamStdioAfterDelegation: boolean; + silent: boolean; + getSharedWritableStream: IStreamFunction | Writable; + env: Object; + detached: boolean; + constructor(options: Partial); + addWorker(): Pool; + removeWorker(): Pool; + getCurrentSize(): Object; + getCurrentStats(): object; + noop(): void; + any(msg: object | string, opts?: Partial | IResolutionCallback, cb?: IResolutionCallback): void; + anyp(msg: Object | string, opts?: Partial): Promise; + destroy(): Pool; + killAllActiveWorkers(): Pool; + killAll(): Pool; + killAllImmediately(): Pool; +} +export declare const r2gSmokeTest: () => boolean; diff --git a/.pnpm-store/v11/files/84/9d730dd338620f33a75b0d587176ca1eec7124b5d1562f300746b81cae565eb5d16858db0c73887f9b9b6478957d6e03c267cf8238d3b630d805ea7f6b7868 b/.pnpm-store/v11/files/84/9d730dd338620f33a75b0d587176ca1eec7124b5d1562f300746b81cae565eb5d16858db0c73887f9b9b6478957d6e03c267cf8238d3b630d805ea7f6b7868 new file mode 100644 index 00000000..c16ef9d2 --- /dev/null +++ b/.pnpm-store/v11/files/84/9d730dd338620f33a75b0d587176ca1eec7124b5d1562f300746b81cae565eb5d16858db0c73887f9b9b6478957d6e03c267cf8238d3b630d805ea7f6b7868 @@ -0,0 +1,78 @@ +{ + "name": "normalize-path", + "description": "Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes unless disabled.", + "version": "2.1.1", + "homepage": "https://github.com/jonschlinkert/normalize-path", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Blaine Bublitz (https://twitter.com/BlaineBublitz)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)" + ], + "repository": "jonschlinkert/normalize-path", + "bugs": { + "url": "https://github.com/jonschlinkert/normalize-path/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "devDependencies": { + "benchmarked": "^0.1.1", + "gulp-format-md": "^0.1.11", + "minimist": "^1.2.0", + "mocha": "*" + }, + "keywords": [ + "backslash", + "file", + "filepath", + "fix", + "forward", + "fp", + "fs", + "normalize", + "path", + "slash", + "slashes", + "trailing", + "unix", + "urix" + ], + "verb": { + "related": { + "list": [ + "contains-path", + "ends-with", + "is-absolute", + "is-relative", + "parse-filepath", + "path-ends-with", + "path-segments", + "rewrite-ext", + "unixify" + ], + "description": "Other useful libraries for working with paths in node.js:" + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/84/b48f7e0bad619d7b6b72b9b27f723d05ba4016e0dd37908eefeb8bb2966aba744bd975ce1fd0b0f0a4ebf908f89ba0c9364f4c147aee4fbd17fb3498bdc799 b/.pnpm-store/v11/files/84/b48f7e0bad619d7b6b72b9b27f723d05ba4016e0dd37908eefeb8bb2966aba744bd975ce1fd0b0f0a4ebf908f89ba0c9364f4c147aee4fbd17fb3498bdc799 new file mode 100644 index 00000000..a94c1351 --- /dev/null +++ b/.pnpm-store/v11/files/84/b48f7e0bad619d7b6b72b9b27f723d05ba4016e0dd37908eefeb8bb2966aba744bd975ce1fd0b0f0a4ebf908f89ba0c9364f4c147aee4fbd17fb3498bdc799 @@ -0,0 +1,30 @@ +var arrayMap = require('./_arrayMap'), + baseIntersection = require('./_baseIntersection'), + baseRest = require('./_baseRest'), + castArrayLikeObject = require('./_castArrayLikeObject'); + +/** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ +var intersection = baseRest(function(arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; +}); + +module.exports = intersection; diff --git a/.pnpm-store/v11/files/84/c6f8a86560c2c716240fd070c4b8face7a0c3577b887d1e9a3fa0064b1a44f94d5d9aec3bd830c7bdd660ce72ff151b90037b903d4e6d1ee82923451c5aac3 b/.pnpm-store/v11/files/84/c6f8a86560c2c716240fd070c4b8face7a0c3577b887d1e9a3fa0064b1a44f94d5d9aec3bd830c7bdd660ce72ff151b90037b903d4e6d1ee82923451c5aac3 new file mode 100644 index 00000000..054c803e --- /dev/null +++ b/.pnpm-store/v11/files/84/c6f8a86560c2c716240fd070c4b8face7a0c3577b887d1e9a3fa0064b1a44f94d5d9aec3bd830c7bdd660ce72ff151b90037b903d4e6d1ee82923451c5aac3 @@ -0,0 +1,6 @@ +language: node_js +node_js: + - "6" + - "4" + - "0.12" + - "0.10" diff --git a/.pnpm-store/v11/files/84/ccf5a572fb590947071b736cb1e6499c38d225161f346a13626a00285feae35446828c9760b8b322b00190c31b3538f3473e64075a72954df1dba171def6ff b/.pnpm-store/v11/files/84/ccf5a572fb590947071b736cb1e6499c38d225161f346a13626a00285feae35446828c9760b8b322b00190c31b3538f3473e64075a72954df1dba171def6ff new file mode 100644 index 00000000..36c71160 --- /dev/null +++ b/.pnpm-store/v11/files/84/ccf5a572fb590947071b736cb1e6499c38d225161f346a13626a00285feae35446828c9760b8b322b00190c31b3538f3473e64075a72954df1dba171def6ff @@ -0,0 +1,23 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/84/dca1f145b7c35a5c5e2607c97fbab7b5f64c5c48095e57467fdba7a503b2fec30891521a3e85ae5b7effdcafb5a992b856a93417b2f8f464c77eb585fa1759 b/.pnpm-store/v11/files/84/dca1f145b7c35a5c5e2607c97fbab7b5f64c5c48095e57467fdba7a503b2fec30891521a3e85ae5b7effdcafb5a992b856a93417b2f8f464c77eb585fa1759 new file mode 100644 index 00000000..82915e52 --- /dev/null +++ b/.pnpm-store/v11/files/84/dca1f145b7c35a5c5e2607c97fbab7b5f64c5c48095e57467fdba7a503b2fec30891521a3e85ae5b7effdcafb5a992b856a93417b2f8f464c77eb585fa1759 @@ -0,0 +1,203 @@ +# negotiator + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +An HTTP content negotiator for Node.js + +## Installation + +```sh +$ npm install negotiator +``` + +## API + +```js +var Negotiator = require('negotiator') +``` + +### Accept Negotiation + +```js +availableMediaTypes = ['text/html', 'text/plain', 'application/json'] + +// The negotiator constructor receives a request object +negotiator = new Negotiator(request) + +// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' + +negotiator.mediaTypes() +// -> ['text/html', 'image/jpeg', 'application/*'] + +negotiator.mediaTypes(availableMediaTypes) +// -> ['text/html', 'application/json'] + +negotiator.mediaType(availableMediaTypes) +// -> 'text/html' +``` + +You can check a working example at `examples/accept.js`. + +#### Methods + +##### mediaType() + +Returns the most preferred media type from the client. + +##### mediaType(availableMediaType) + +Returns the most preferred media type from a list of available media types. + +##### mediaTypes() + +Returns an array of preferred media types ordered by the client preference. + +##### mediaTypes(availableMediaTypes) + +Returns an array of preferred media types ordered by priority from a list of +available media types. + +### Accept-Language Negotiation + +```js +negotiator = new Negotiator(request) + +availableLanguages = ['en', 'es', 'fr'] + +// Let's say Accept-Language header is 'en;q=0.8, es, pt' + +negotiator.languages() +// -> ['es', 'pt', 'en'] + +negotiator.languages(availableLanguages) +// -> ['es', 'en'] + +language = negotiator.language(availableLanguages) +// -> 'es' +``` + +You can check a working example at `examples/language.js`. + +#### Methods + +##### language() + +Returns the most preferred language from the client. + +##### language(availableLanguages) + +Returns the most preferred language from a list of available languages. + +##### languages() + +Returns an array of preferred languages ordered by the client preference. + +##### languages(availableLanguages) + +Returns an array of preferred languages ordered by priority from a list of +available languages. + +### Accept-Charset Negotiation + +```js +availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] + +negotiator = new Negotiator(request) + +// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' + +negotiator.charsets() +// -> ['utf-8', 'iso-8859-1', 'utf-7'] + +negotiator.charsets(availableCharsets) +// -> ['utf-8', 'iso-8859-1'] + +negotiator.charset(availableCharsets) +// -> 'utf-8' +``` + +You can check a working example at `examples/charset.js`. + +#### Methods + +##### charset() + +Returns the most preferred charset from the client. + +##### charset(availableCharsets) + +Returns the most preferred charset from a list of available charsets. + +##### charsets() + +Returns an array of preferred charsets ordered by the client preference. + +##### charsets(availableCharsets) + +Returns an array of preferred charsets ordered by priority from a list of +available charsets. + +### Accept-Encoding Negotiation + +```js +availableEncodings = ['identity', 'gzip'] + +negotiator = new Negotiator(request) + +// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' + +negotiator.encodings() +// -> ['gzip', 'identity', 'compress'] + +negotiator.encodings(availableEncodings) +// -> ['gzip', 'identity'] + +negotiator.encoding(availableEncodings) +// -> 'gzip' +``` + +You can check a working example at `examples/encoding.js`. + +#### Methods + +##### encoding() + +Returns the most preferred encoding from the client. + +##### encoding(availableEncodings) + +Returns the most preferred encoding from a list of available encodings. + +##### encodings() + +Returns an array of preferred encodings ordered by the client preference. + +##### encodings(availableEncodings) + +Returns an array of preferred encodings ordered by priority from a list of +available encodings. + +## See Also + +The [accepts](https://npmjs.org/package/accepts#readme) module builds on +this module and provides an alternative interface, mime type validation, +and more. + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/negotiator.svg +[npm-url]: https://npmjs.org/package/negotiator +[node-version-image]: https://img.shields.io/node/v/negotiator.svg +[node-version-url]: https://nodejs.org/en/download/ +[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg +[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master +[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg +[downloads-url]: https://npmjs.org/package/negotiator +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/negotiator/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/negotiator/actions/workflows/ci.yml diff --git a/.pnpm-store/v11/files/85/2dc151520d543f9f7bf048aaed40e26a4cf9b28da514a0a885fe8ad1d39c77cd68da2573c3d09dc36c3a248ba609355c3776c2c11ba4e489cf2532a959abdc b/.pnpm-store/v11/files/85/2dc151520d543f9f7bf048aaed40e26a4cf9b28da514a0a885fe8ad1d39c77cd68da2573c3d09dc36c3a248ba609355c3776c2c11ba4e489cf2532a959abdc new file mode 100644 index 00000000..27ecc255 --- /dev/null +++ b/.pnpm-store/v11/files/85/2dc151520d543f9f7bf048aaed40e26a4cf9b28da514a0a885fe8ad1d39c77cd68da2573c3d09dc36c3a248ba609355c3776c2c11ba4e489cf2532a959abdc @@ -0,0 +1,76 @@ +var sys = require("util") + , assert = require("assert") + , XMLHttpRequest = require("../lib/XMLHttpRequest").XMLHttpRequest + , xhr = new XMLHttpRequest() + , http = require("http"); + +// Test server +var server = http.createServer(function (req, res) { + // Test setRequestHeader + assert.equal("Foobar", req.headers["x-test"]); + // Test non-conforming allowed header + assert.equal("node-XMLHttpRequest-test", req.headers["user-agent"]); + // Test header set with blacklist disabled + assert.equal("http://github.com", req.headers["referer"]); + + var body = "Hello World"; + res.writeHead(200, { + "Content-Type": "text/plain", + "Content-Length": Buffer.byteLength(body), + // Set cookie headers to see if they're correctly suppressed + // Actual values don't matter + "Set-Cookie": "foo=bar", + "Set-Cookie2": "bar=baz", + "Date": "Thu, 30 Aug 2012 18:17:53 GMT", + "Connection": "close" + }); + res.write("Hello World"); + res.end(); + + this.close(); +}).listen(8000); + +xhr.onreadystatechange = function() { + if (this.readyState == 4) { + // Test getAllResponseHeaders() + var headers = "content-type: text/plain\r\ncontent-length: 11\r\ndate: Thu, 30 Aug 2012 18:17:53 GMT\r\nconnection: close"; + assert.equal(headers, this.getAllResponseHeaders()); + + // Test case insensitivity + assert.equal('text/plain', this.getResponseHeader('Content-Type')); + assert.equal('text/plain', this.getResponseHeader('Content-type')); + assert.equal('text/plain', this.getResponseHeader('content-Type')); + assert.equal('text/plain', this.getResponseHeader('content-type')); + + // Test aborted getAllResponseHeaders + this.abort(); + assert.equal("", this.getAllResponseHeaders()); + assert.equal(null, this.getResponseHeader("Connection")); + + console.log("done"); + } +}; + +assert.equal(null, xhr.getResponseHeader("Content-Type")); +try { + xhr.open("GET", "http://localhost:8000/"); + // Valid header + xhr.setRequestHeader("X-Test", "Foobar"); + // Invalid header + xhr.setRequestHeader("Content-Length", 0); + // Allowed header outside of specs + xhr.setRequestHeader("user-agent", "node-XMLHttpRequest-test"); + // Test getRequestHeader + assert.equal("Foobar", xhr.getRequestHeader("X-Test")); + // Test invalid header + assert.equal("", xhr.getRequestHeader("Content-Length")); + + // Test allowing all headers + xhr.setDisableHeaderCheck(true); + xhr.setRequestHeader("Referer", "http://github.com"); + assert.equal("http://github.com", xhr.getRequestHeader("Referer")); + + xhr.send(); +} catch(e) { + console.log("ERROR: Exception raised", e); +} diff --git a/.pnpm-store/v11/files/85/3c0aecbb382da592c57a925db6ac096752cc226368599333248569a749f513351bea6e7895a09c796c4d29480aca6cb39848da87612e0eec61ff00f99b5fe0 b/.pnpm-store/v11/files/85/3c0aecbb382da592c57a925db6ac096752cc226368599333248569a749f513351bea6e7895a09c796c4d29480aca6cb39848da87612e0eec61ff00f99b5fe0 new file mode 100644 index 00000000..dbaede1c --- /dev/null +++ b/.pnpm-store/v11/files/85/3c0aecbb382da592c57a925db6ac096752cc226368599333248569a749f513351bea6e7895a09c796c4d29480aca6cb39848da87612e0eec61ff00f99b5fe0 @@ -0,0 +1,7 @@ +import { JSONParser } from '@oresoftware/json-stream-parser'; +export interface IParsedObject { + [index: string]: any; +} +export declare const r2gSmokeTest: () => boolean; +export declare const createParser: () => JSONParser; +export default createParser; diff --git a/.pnpm-store/v11/files/85/411b6f1553d365d1bf02faa52d549394c3c75ceb67b8aaa0fcad2d926fb5005210b49c1bdb080246f588332ba4c979ab91f782829be67a4ebca462f45c0498 b/.pnpm-store/v11/files/85/411b6f1553d365d1bf02faa52d549394c3c75ceb67b8aaa0fcad2d926fb5005210b49c1bdb080246f588332ba4c979ab91f782829be67a4ebca462f45c0498 new file mode 100644 index 00000000..b2126a36 --- /dev/null +++ b/.pnpm-store/v11/files/85/411b6f1553d365d1bf02faa52d549394c3c75ceb67b8aaa0fcad2d926fb5005210b49c1bdb080246f588332ba4c979ab91f782829be67a4ebca462f45c0498 @@ -0,0 +1,17 @@ +{ + "name": "lodash.intersection", + "version": "4.4.0", + "description": "The lodash method `_.intersection` exported as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "keywords": "lodash-modularized, intersection", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (https://github.com/phated)", + "Mathias Bynens (https://mathiasbynens.be/)" + ], + "repository": "lodash/lodash", + "scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" } +} diff --git a/.pnpm-store/v11/files/85/46243c19a6b89739c23012f1c1a1eeadfadef6b56656f17a29bfe68706bbb448bde276ec59aebd95006a14644dc3f9a60ca6452c04109881dc0d8dff47a2c6 b/.pnpm-store/v11/files/85/46243c19a6b89739c23012f1c1a1eeadfadef6b56656f17a29bfe68706bbb448bde276ec59aebd95006a14644dc3f9a60ca6452c04109881dc0d8dff47a2c6 new file mode 100644 index 00000000..0ac38990 --- /dev/null +++ b/.pnpm-store/v11/files/85/46243c19a6b89739c23012f1c1a1eeadfadef6b56656f17a29bfe68706bbb448bde276ec59aebd95006a14644dc3f9a60ca6452c04109881dc0d8dff47a2c6 @@ -0,0 +1,171 @@ +/* global define, require */ +import { isArray } from '../utils'; + +let SourceNode; + +try { + /* istanbul ignore next */ + if (typeof define !== 'function' || !define.amd) { + // We don't support this in AMD environments. For these environments, we assume that + // they are running on the browser and thus have no need for the source-map library. + let SourceMap = require('source-map'); + SourceNode = SourceMap.SourceNode; + } +} catch (err) { + /* NOP */ +} + +/* istanbul ignore if: tested but not covered in istanbul due to dist build */ +if (!SourceNode) { + SourceNode = function(line, column, srcFile, chunks) { + this.src = ''; + if (chunks) { + this.add(chunks); + } + }; + /* istanbul ignore next */ + SourceNode.prototype = { + add: function(chunks) { + if (isArray(chunks)) { + chunks = chunks.join(''); + } + this.src += chunks; + }, + prepend: function(chunks) { + if (isArray(chunks)) { + chunks = chunks.join(''); + } + this.src = chunks + this.src; + }, + toStringWithSourceMap: function() { + return { code: this.toString() }; + }, + toString: function() { + return this.src; + } + }; +} + +function castChunk(chunk, codeGen, loc) { + if (isArray(chunk)) { + let ret = []; + + for (let i = 0, len = chunk.length; i < len; i++) { + ret.push(codeGen.wrap(chunk[i], loc)); + } + return ret; + } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { + // Handle primitives that the SourceNode will throw up on + return chunk + ''; + } + return chunk; +} + +function CodeGen(srcFile) { + this.srcFile = srcFile; + this.source = []; +} + +CodeGen.prototype = { + isEmpty() { + return !this.source.length; + }, + prepend: function(source, loc) { + this.source.unshift(this.wrap(source, loc)); + }, + push: function(source, loc) { + this.source.push(this.wrap(source, loc)); + }, + + merge: function() { + let source = this.empty(); + this.each(function(line) { + source.add([' ', line, '\n']); + }); + return source; + }, + + each: function(iter) { + for (let i = 0, len = this.source.length; i < len; i++) { + iter(this.source[i]); + } + }, + + empty: function() { + let loc = this.currentLocation || { start: {} }; + return new SourceNode(loc.start.line, loc.start.column, this.srcFile); + }, + wrap: function(chunk, loc = this.currentLocation || { start: {} }) { + if (chunk instanceof SourceNode) { + return chunk; + } + + chunk = castChunk(chunk, this, loc); + + return new SourceNode( + loc.start.line, + loc.start.column, + this.srcFile, + chunk + ); + }, + + functionCall: function(fn, type, params) { + params = this.generateList(params); + return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); + }, + + quotedString: function(str) { + return ( + '"' + + (str + '') + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\n/g, '\\n') + .replace(/\r/g, '\\r') + .replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 + .replace(/\u2029/g, '\\u2029') + + '"' + ); + }, + + objectLiteral: function(obj) { + let pairs = []; + + Object.keys(obj).forEach(key => { + let value = castChunk(obj[key], this); + if (value !== 'undefined') { + pairs.push([this.quotedString(key), ':', value]); + } + }); + + let ret = this.generateList(pairs); + ret.prepend('{'); + ret.add('}'); + return ret; + }, + + generateList: function(entries) { + let ret = this.empty(); + + for (let i = 0, len = entries.length; i < len; i++) { + if (i) { + ret.add(','); + } + + ret.add(castChunk(entries[i], this)); + } + + return ret; + }, + + generateArray: function(entries) { + let ret = this.generateList(entries); + ret.prepend('['); + ret.add(']'); + + return ret; + } +}; + +export default CodeGen; diff --git a/.pnpm-store/v11/files/85/494ca6582db6aa3679f532c540f2075516628c02abd6fc827369cf8ec1f2ac66092ff815406d4670c7a33cadc62f34c2c478136953656ce85a7d5755f8c31e b/.pnpm-store/v11/files/85/494ca6582db6aa3679f532c540f2075516628c02abd6fc827369cf8ec1f2ac66092ff815406d4670c7a33cadc62f34c2c478136953656ce85a7d5755f8c31e new file mode 100644 index 00000000..f478d58d --- /dev/null +++ b/.pnpm-store/v11/files/85/494ca6582db6aa3679f532c540f2075516628c02abd6fc827369cf8ec1f2ac66092ff815406d4670c7a33cadc62f34c2c478136953656ce85a7d5755f8c31e @@ -0,0 +1,38 @@ +# Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +* (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +* (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +* (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +* (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +## Moderation Policy + +The [Node.js Moderation Policy] applies to this WG. + +## Code of Conduct + +The [Node.js Code of Conduct][] applies to this WG. + +[Node.js Code of Conduct]: +https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md +[Node.js Moderation Policy]: +https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/.pnpm-store/v11/files/85/4a5c0075c6575febeecf2335fc0113992c7b8392e9dea4f3f9a27d711d7597c9bb83fd7ceac9dd25efcfe2a506debf5f59137962a2c502902af7bba2dffc3c b/.pnpm-store/v11/files/85/4a5c0075c6575febeecf2335fc0113992c7b8392e9dea4f3f9a27d711d7597c9bb83fd7ceac9dd25efcfe2a506debf5f59137962a2c502902af7bba2dffc3c new file mode 100644 index 00000000..ff8e5c45 --- /dev/null +++ b/.pnpm-store/v11/files/85/4a5c0075c6575febeecf2335fc0113992c7b8392e9dea4f3f9a27d711d7597c9bb83fd7ceac9dd25efcfe2a506debf5f59137962a2c502902af7bba2dffc3c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/85/4cd47baa75dfbf9b8f72e2956adf8dd899bf07379272f8788e5302f365877f25b186a504842bfb6d3dd20893337c21dc3b3434981bf39e63bef2b961e17811 b/.pnpm-store/v11/files/85/4cd47baa75dfbf9b8f72e2956adf8dd899bf07379272f8788e5302f365877f25b186a504842bfb6d3dd20893337c21dc3b3434981bf39e63bef2b961e17811 new file mode 100644 index 00000000..44311afb --- /dev/null +++ b/.pnpm-store/v11/files/85/4cd47baa75dfbf9b8f72e2956adf8dd899bf07379272f8788e5302f365877f25b186a504842bfb6d3dd20893337c21dc3b3434981bf39e63bef2b961e17811 @@ -0,0 +1,26 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// +/// +/// +/// +/// +/// +/// +/// diff --git a/.pnpm-store/v11/files/85/66a8e3696ecf90a609ec3cc8054bf02eea514ea9c849d69850a2f6a1e0b89987754d959854c865325bc81f74801aa52a11a5da5add5f29fef89e4c79a92eca b/.pnpm-store/v11/files/85/66a8e3696ecf90a609ec3cc8054bf02eea514ea9c849d69850a2f6a1e0b89987754d959854c865325bc81f74801aa52a11a5da5add5f29fef89e4c79a92eca new file mode 100644 index 00000000..44fa7a71 --- /dev/null +++ b/.pnpm-store/v11/files/85/66a8e3696ecf90a609ec3cc8054bf02eea514ea9c849d69850a2f6a1e0b89987754d959854c865325bc81f74801aa52a11a5da5add5f29fef89e4c79a92eca @@ -0,0 +1,17 @@ +{ + "name": "lodash.shuffle", + "version": "4.2.0", + "description": "The lodash method `_.shuffle` exported as a module.", + "homepage": "https://lodash.com/", + "icon": "https://lodash.com/icon.svg", + "license": "MIT", + "keywords": "lodash-modularized, shuffle", + "author": "John-David Dalton (http://allyoucanleet.com/)", + "contributors": [ + "John-David Dalton (http://allyoucanleet.com/)", + "Blaine Bublitz (https://github.com/phated)", + "Mathias Bynens (https://mathiasbynens.be/)" + ], + "repository": "lodash/lodash", + "scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" } +} diff --git a/.pnpm-store/v11/files/85/8a58e6d265bfa40019bad88055b17d932d6bbb628d236a849d76504dee7c0d0ebbb60315891d48a4b5b27d46fe5e2387cd9372525e1b35a364a16be7674d30 b/.pnpm-store/v11/files/85/8a58e6d265bfa40019bad88055b17d932d6bbb628d236a849d76504dee7c0d0ebbb60315891d48a4b5b27d46fe5e2387cd9372525e1b35a364a16be7674d30 new file mode 100644 index 00000000..ea64bc15 --- /dev/null +++ b/.pnpm-store/v11/files/85/8a58e6d265bfa40019bad88055b17d932d6bbb628d236a849d76504dee7c0d0ebbb60315891d48a4b5b27d46fe5e2387cd9372525e1b35a364a16be7674d30 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/85/bc28c9685b70f0000a3b17efd42172ee8c8436700464ab2acc9042126641889a175c17ed4326ca1110c119f6a2c39f2a228536c9820b5795b782089709e0f3 b/.pnpm-store/v11/files/85/bc28c9685b70f0000a3b17efd42172ee8c8436700464ab2acc9042126641889a175c17ed4326ca1110c119f6a2c39f2a228536c9820b5795b782089709e0f3 new file mode 100644 index 00000000..6c375060 --- /dev/null +++ b/.pnpm-store/v11/files/85/bc28c9685b70f0000a3b17efd42172ee8c8436700464ab2acc9042126641889a175c17ed4326ca1110c119f6a2c39f2a228536c9820b5795b782089709e0f3 @@ -0,0 +1,39 @@ +var baseSlice = require('./_baseSlice'), + toInteger = require('./toInteger'); + +/** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ +function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); +} + +module.exports = takeRight; diff --git a/.pnpm-store/v11/files/85/d70e7e90ab2e17051bd9e5d6205b252955d165c3691472d8c8426deb5f1570bbb23040f152e9a2496e4e999aac25191b47242d54fea02227fef417a6a5ac5e b/.pnpm-store/v11/files/85/d70e7e90ab2e17051bd9e5d6205b252955d165c3691472d8c8426deb5f1570bbb23040f152e9a2496e4e999aac25191b47242d54fea02227fef417a6a5ac5e new file mode 100644 index 00000000..97de0eb9 --- /dev/null +++ b/.pnpm-store/v11/files/85/d70e7e90ab2e17051bd9e5d6205b252955d165c3691472d8c8426deb5f1570bbb23040f152e9a2496e4e999aac25191b47242d54fea02227fef417a6a5ac5e @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').forEachOf; diff --git a/.pnpm-store/v11/files/85/e9f3dece695d37bb26a48153385db6e866eec9e336f7a72a3397032855149c65b8979ddf1c1a38a70595b46048681132e0a89700877445cc31fe5a07b2e85c b/.pnpm-store/v11/files/85/e9f3dece695d37bb26a48153385db6e866eec9e336f7a72a3397032855149c65b8979ddf1c1a38a70595b46048681132e0a89700877445cc31fe5a07b2e85c new file mode 100644 index 00000000..df94c78e --- /dev/null +++ b/.pnpm-store/v11/files/85/e9f3dece695d37bb26a48153385db6e866eec9e336f7a72a3397032855149c65b8979ddf1c1a38a70595b46048681132e0a89700877445cc31fe5a07b2e85c @@ -0,0 +1,163 @@ + +/** + * Expose `Emitter`. + */ + +if (typeof module !== 'undefined') { + module.exports = Emitter; +} + +/** + * Initialize a new `Emitter`. + * + * @api public + */ + +function Emitter(obj) { + if (obj) return mixin(obj); +}; + +/** + * Mixin the emitter properties. + * + * @param {Object} obj + * @return {Object} + * @api private + */ + +function mixin(obj) { + for (var key in Emitter.prototype) { + obj[key] = Emitter.prototype[key]; + } + return obj; +} + +/** + * Listen on the given `event` with `fn`. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.on = +Emitter.prototype.addEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + (this._callbacks['$' + event] = this._callbacks['$' + event] || []) + .push(fn); + return this; +}; + +/** + * Adds an `event` listener that will be invoked a single + * time then automatically removed. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.once = function(event, fn){ + function on() { + this.off(event, on); + fn.apply(this, arguments); + } + + on.fn = fn; + this.on(event, on); + return this; +}; + +/** + * Remove the given callback for `event` or all + * registered callbacks. + * + * @param {String} event + * @param {Function} fn + * @return {Emitter} + * @api public + */ + +Emitter.prototype.off = +Emitter.prototype.removeListener = +Emitter.prototype.removeAllListeners = +Emitter.prototype.removeEventListener = function(event, fn){ + this._callbacks = this._callbacks || {}; + + // all + if (0 == arguments.length) { + this._callbacks = {}; + return this; + } + + // specific event + var callbacks = this._callbacks['$' + event]; + if (!callbacks) return this; + + // remove all handlers + if (1 == arguments.length) { + delete this._callbacks['$' + event]; + return this; + } + + // remove specific handler + var cb; + for (var i = 0; i < callbacks.length; i++) { + cb = callbacks[i]; + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1); + break; + } + } + return this; +}; + +/** + * Emit `event` with the given args. + * + * @param {String} event + * @param {Mixed} ... + * @return {Emitter} + */ + +Emitter.prototype.emit = function(event){ + this._callbacks = this._callbacks || {}; + var args = [].slice.call(arguments, 1) + , callbacks = this._callbacks['$' + event]; + + if (callbacks) { + callbacks = callbacks.slice(0); + for (var i = 0, len = callbacks.length; i < len; ++i) { + callbacks[i].apply(this, args); + } + } + + return this; +}; + +/** + * Return array of callbacks for `event`. + * + * @param {String} event + * @return {Array} + * @api public + */ + +Emitter.prototype.listeners = function(event){ + this._callbacks = this._callbacks || {}; + return this._callbacks['$' + event] || []; +}; + +/** + * Check if this emitter has `event` handlers. + * + * @param {String} event + * @return {Boolean} + * @api public + */ + +Emitter.prototype.hasListeners = function(event){ + return !! this.listeners(event).length; +}; diff --git a/.pnpm-store/v11/files/86/0ed481f18329044489d2e16e3647052649432ecab2e4cf65d051c098dc01a0c0ebd593f153d0f3ae4f60b1314da73fa0088d54d522367d1042e81e1f5e465b b/.pnpm-store/v11/files/86/0ed481f18329044489d2e16e3647052649432ecab2e4cf65d051c098dc01a0c0ebd593f153d0f3ae4f60b1314da73fa0088d54d522367d1042e81e1f5e465b new file mode 100644 index 00000000..98d4367a --- /dev/null +++ b/.pnpm-store/v11/files/86/0ed481f18329044489d2e16e3647052649432ecab2e4cf65d051c098dc01a0c0ebd593f153d0f3ae4f60b1314da73fa0088d54d522367d1042e81e1f5e465b @@ -0,0 +1,129 @@ +# has-values [![NPM version](https://img.shields.io/npm/v/has-values.svg?style=flat)](https://www.npmjs.com/package/has-values) [![NPM monthly downloads](https://img.shields.io/npm/dm/has-values.svg?style=flat)](https://npmjs.org/package/has-values) [![NPM total downloads](https://img.shields.io/npm/dt/has-values.svg?style=flat)](https://npmjs.org/package/has-values) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/has-values.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/has-values) + +> Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save has-values +``` + +## Usage + +```js +var hasValue = require('has-values'); + +hasValue('a'); +//=> true + +hasValue(''); +//=> false + +hasValue(1); +//=> true + +hasValue(0); +//=> false + +hasValue({a: 'a'}}); +//=> true + +hasValue({}); +hasValue({foo: undefined}); +//=> false + +hasValue({foo: null}); +//=> true + +hasValue(['a']); +//=> true + +hasValue([]); +hasValue([[], []]); +hasValue([[[]]]); +//=> false + +hasValue(['foo']); +hasValue([0]); +//=> true + +hasValue(function(foo) {}); +//=> true + +hasValue(function() {}); +//=> true + +hasValue(true); +//=> true + +hasValue(false); +//=> true +``` + +## isEmpty + +To test for empty values, do: + +```js +function isEmpty(o, isZero) { + return !hasValue(o, isZero); +} +``` + +## Release history + +### v1.0.0 + +* `zero` always returns true +* `array` now recurses, so that an array of empty arrays will return `false` +* `null` now returns true + +## About + +### Related projects + +* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.") +* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") +* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.") +* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.") +* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 19, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/86/1e2e958640ae45401a6552777544986f301d0c667a08074ab8ea8b1bca0dc87a61862ee2214bb6e8e81c209d26639165347733aa33bd9224f3f7cf216caa4d b/.pnpm-store/v11/files/86/1e2e958640ae45401a6552777544986f301d0c667a08074ab8ea8b1bca0dc87a61862ee2214bb6e8e81c209d26639165347733aa33bd9224f3f7cf216caa4d new file mode 100644 index 00000000..dc333096 --- /dev/null +++ b/.pnpm-store/v11/files/86/1e2e958640ae45401a6552777544986f301d0c667a08074ab8ea8b1bca0dc87a61862ee2214bb6e8e81c209d26639165347733aa33bd9224f3f7cf216caa4d @@ -0,0 +1,389 @@ +#!/bin/bash +# +# Bash completion generated for '{{name}}' at {{date}}. +# +# The original template lives here: +# https://github.com/trentm/node-dashdash/blob/master/etc/dashdash.bash_completion.in +# + +# +# Copyright 2016 Trent Mick +# Copyright 2016 Joyent, Inc. +# +# +# A generic Bash completion driver script. +# +# This is meant to provide a re-usable chunk of Bash to use for +# "etc/bash_completion.d/" files for individual tools. Only the "Configuration" +# section with tool-specific info need differ. Features: +# +# - support for short and long opts +# - support for knowing which options take arguments +# - support for subcommands (e.g. 'git log ' to show just options for the +# log subcommand) +# - does the right thing with "--" to stop options +# - custom optarg and arg types for custom completions +# - (TODO) support for shells other than Bash (tcsh, zsh, fish?, etc.) +# +# +# Examples/design: +# +# 1. Bash "default" completion. By default Bash's 'complete -o default' is +# enabled. That means when there are no completions (e.g. if no opts match +# the current word), then you'll get Bash's default completion. Most notably +# that means you get filename completion. E.g.: +# $ tool ./ +# $ tool READ +# +# 2. all opts and subcmds: +# $ tool +# $ tool -v # assuming '-v' doesn't take an arg +# $ tool - # matching opts +# $ git lo # matching subcmds +# +# Long opt completions are given *without* the '=', i.e. we prefer space +# separated because that's easier for good completions. +# +# 3. long opt arg with '=' +# $ tool --file= +# $ tool --file=./d +# We maintain the "--file=" prefix. Limitation: With the attached prefix +# the 'complete -o filenames' doesn't know to do dirname '/' suffixing. Meh. +# +# 4. envvars: +# $ tool $ +# $ tool $P +# Limitation: Currently only getting exported vars, so we miss "PS1" and +# others. +# +# 5. Defer to other completion in a subshell: +# $ tool --file $(cat ./ +# We get this from 'complete -o default ...'. +# +# 6. Custom completion types from a provided bash function. +# $ tool --profile # complete available "profiles" +# +# +# Dev Notes: +# - compgen notes, from http://unix.stackexchange.com/questions/151118/understand-compgen-builtin-command +# - https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion-Builtins.html +# + + +# Debugging this completion: +# 1. Uncomment the "_{{name}}_log_file=..." line. +# 2. 'tail -f /var/tmp/dashdash-completion.log' in one terminal. +# 3. Re-source this bash completion file. +#_{{name}}_log=/var/tmp/dashdash-completion.log + +function _{{name}}_completer { + + # ---- cmd definition + + {{spec}} + + + # ---- locals + + declare -a argv + + + # ---- support functions + + function trace { + [[ -n "$_{{name}}_log" ]] && echo "$*" >&2 + } + + function _dashdash_complete { + local idx context + idx=$1 + context=$2 + + local shortopts longopts optargs subcmds allsubcmds argtypes + shortopts="$(eval "echo \${cmd${context}_shortopts}")" + longopts="$(eval "echo \${cmd${context}_longopts}")" + optargs="$(eval "echo \${cmd${context}_optargs}")" + subcmds="$(eval "echo \${cmd${context}_subcmds}")" + allsubcmds="$(eval "echo \${cmd${context}_allsubcmds}")" + IFS=', ' read -r -a argtypes <<< "$(eval "echo \${cmd${context}_argtypes}")" + + trace "" + trace "_dashdash_complete(idx=$idx, context=$context)" + trace " shortopts: $shortopts" + trace " longopts: $longopts" + trace " optargs: $optargs" + trace " subcmds: $subcmds" + trace " allsubcmds: $allsubcmds" + + # Get 'state' of option parsing at this COMP_POINT. + # Copying "dashdash.js#parse()" behaviour here. + local state= + local nargs=0 + local i=$idx + local argtype + local optname + local prefix + local word + local dashdashseen= + while [[ $i -lt $len && $i -le $COMP_CWORD ]]; do + argtype= + optname= + prefix= + word= + + arg=${argv[$i]} + trace " consider argv[$i]: '$arg'" + + if [[ "$arg" == "--" && $i -lt $COMP_CWORD ]]; then + trace " dashdash seen" + dashdashseen=yes + state=arg + word=$arg + elif [[ -z "$dashdashseen" && "${arg:0:2}" == "--" ]]; then + arg=${arg:2} + if [[ "$arg" == *"="* ]]; then + optname=${arg%%=*} + val=${arg##*=} + trace " long opt: optname='$optname' val='$val'" + state=arg + argtype=$(echo "$optargs" | awk -F "-$optname=" '{print $2}' | cut -d' ' -f1) + word=$val + prefix="--$optname=" + else + optname=$arg + val= + trace " long opt: optname='$optname'" + state=longopt + word=--$optname + + if [[ "$optargs" == *"-$optname="* && $i -lt $COMP_CWORD ]]; then + i=$(( $i + 1 )) + state=arg + argtype=$(echo "$optargs" | awk -F "-$optname=" '{print $2}' | cut -d' ' -f1) + word=${argv[$i]} + trace " takes arg (consume argv[$i], word='$word')" + fi + fi + elif [[ -z "$dashdashseen" && "${arg:0:1}" == "-" ]]; then + trace " short opt group" + state=shortopt + word=$arg + + local j=1 + while [[ $j -lt ${#arg} ]]; do + optname=${arg:$j:1} + trace " consider index $j: optname '$optname'" + + if [[ "$optargs" == *"-$optname="* ]]; then + argtype=$(echo "$optargs" | awk -F "-$optname=" '{print $2}' | cut -d' ' -f1) + if [[ $(( $j + 1 )) -lt ${#arg} ]]; then + state=arg + word=${arg:$(( $j + 1 ))} + trace " takes arg (rest of this arg, word='$word', argtype='$argtype')" + elif [[ $i -lt $COMP_CWORD ]]; then + state=arg + i=$(( $i + 1 )) + word=${argv[$i]} + trace " takes arg (word='$word', argtype='$argtype')" + fi + break + fi + + j=$(( $j + 1 )) + done + elif [[ $i -lt $COMP_CWORD && -n "$arg" ]] && $(echo "$allsubcmds" | grep -w "$arg" >/dev/null); then + trace " complete subcmd: recurse _dashdash_complete" + _dashdash_complete $(( $i + 1 )) "${context}__${arg/-/_}" + return + else + trace " not an opt or a complete subcmd" + state=arg + word=$arg + nargs=$(( $nargs + 1 )) + if [[ ${#argtypes[@]} -gt 0 ]]; then + argtype="${argtypes[$(( $nargs - 1 ))]}" + if [[ -z "$argtype" ]]; then + # If we have more args than argtypes, we use the + # last type. + argtype="${argtypes[@]: -1:1}" + fi + fi + fi + + trace " state=$state prefix='$prefix' word='$word'" + i=$(( $i + 1 )) + done + + trace " parsed: state=$state optname='$optname' argtype='$argtype' prefix='$prefix' word='$word' dashdashseen=$dashdashseen" + local compgen_opts= + if [[ -n "$prefix" ]]; then + compgen_opts="$compgen_opts -P $prefix" + fi + + case $state in + shortopt) + compgen $compgen_opts -W "$shortopts $longopts" -- "$word" + ;; + longopt) + compgen $compgen_opts -W "$longopts" -- "$word" + ;; + arg) + # If we don't know what completion to do, then emit nothing. We + # expect that we are running with: + # complete -o default ... + # where "default" means: "Use Readline's default completion if + # the compspec generates no matches." This gives us the good filename + # completion, completion in subshells/backticks. + # + # We cannot support an argtype="directory" because + # compgen -S '/' -A directory -- "$word" + # doesn't give a satisfying result. It doesn't stop at the trailing '/' + # so you cannot descend into dirs. + if [[ "${word:0:1}" == '$' ]]; then + # By default, Bash will complete '$' to all envvars. Apparently + # 'complete -o default' does *not* give us that. The following + # gets *close* to the same completions: '-A export' misses envvars + # like "PS1". + trace " completing envvars" + compgen $compgen_opts -P '$' -A export -- "${word:1}" + elif [[ -z "$argtype" ]]; then + # Only include opts in completions if $word is not empty. + # This is to avoid completing the leading '-', which foils + # using 'default' completion. + if [[ -n "$dashdashseen" ]]; then + trace " completing subcmds, if any (no argtype, dashdash seen)" + compgen $compgen_opts -W "$subcmds" -- "$word" + elif [[ -z "$word" ]]; then + trace " completing subcmds, if any (no argtype, empty word)" + compgen $compgen_opts -W "$subcmds" -- "$word" + else + trace " completing opts & subcmds (no argtype)" + compgen $compgen_opts -W "$shortopts $longopts $subcmds" -- "$word" + fi + elif [[ $argtype == "none" ]]; then + # We want *no* completions, i.e. some way to get the active + # 'complete -o default' to not do filename completion. + trace " completing 'none' (hack to imply no completions)" + echo "##-no-completion- -results-##" + elif [[ $argtype == "file" ]]; then + # 'complete -o default' gives the best filename completion, at least + # on Mac. + trace " completing 'file' (let 'complete -o default' handle it)" + echo "" + elif ! type complete_$argtype 2>/dev/null >/dev/null; then + trace " completing '$argtype' (fallback to default b/c complete_$argtype is unknown)" + echo "" + else + trace " completing custom '$argtype'" + completions=$(complete_$argtype "$word") + if [[ -z "$completions" ]]; then + trace " no custom '$argtype' completions" + # These are in ascii and "dictionary" order so they sort + # correctly. + echo "##-no-completion- -results-##" + else + echo $completions + fi + fi + ;; + *) + trace " unknown state: $state" + ;; + esac + } + + + trace "" + trace "-- $(date)" + #trace "\$IFS: '$IFS'" + #trace "\$@: '$@'" + #trace "COMP_WORDBREAKS: '$COMP_WORDBREAKS'" + trace "COMP_CWORD: '$COMP_CWORD'" + trace "COMP_LINE: '$COMP_LINE'" + trace "COMP_POINT: $COMP_POINT" + + # Guard against negative COMP_CWORD. This is a Bash bug at least on + # Mac 10.10.4's bash. See + # . + if [[ $COMP_CWORD -lt 0 ]]; then + trace "abort on negative COMP_CWORD" + exit 1; + fi + + # I don't know how to do array manip on argv vars, + # so copy over to argv array to work on them. + shift # the leading '--' + i=0 + len=$# + while [[ $# -gt 0 ]]; do + argv[$i]=$1 + shift; + i=$(( $i + 1 )) + done + trace "argv: '${argv[@]}'" + trace "argv[COMP_CWORD-1]: '${argv[$(( $COMP_CWORD - 1 ))]}'" + trace "argv[COMP_CWORD]: '${argv[$COMP_CWORD]}'" + trace "argv len: '$len'" + + _dashdash_complete 1 "" +} + + +# ---- mainline + +# Note: This if-block to help work with 'compdef' and 'compctl' is +# adapted from 'npm completion'. +if type complete &>/dev/null; then + function _{{name}}_completion { + local _log_file=/dev/null + [[ -z "$_{{name}}_log" ]] || _log_file="$_{{name}}_log" + COMPREPLY=($(COMP_CWORD="$COMP_CWORD" \ + COMP_LINE="$COMP_LINE" \ + COMP_POINT="$COMP_POINT" \ + _{{name}}_completer -- "${COMP_WORDS[@]}" \ + 2>$_log_file)) || return $? + } + complete -o default -F _{{name}}_completion {{name}} +elif type compdef &>/dev/null; then + function _{{name}}_completion { + local _log_file=/dev/null + [[ -z "$_{{name}}_log" ]] || _log_file="$_{{name}}_log" + compadd -- $(COMP_CWORD=$((CURRENT-1)) \ + COMP_LINE=$BUFFER \ + COMP_POINT=0 \ + _{{name}}_completer -- "${words[@]}" \ + 2>$_log_file) + } + compdef _{{name}}_completion {{name}} +elif type compctl &>/dev/null; then + function _{{name}}_completion { + local cword line point words si + read -Ac words + read -cn cword + let cword-=1 + read -l line + read -ln point + local _log_file=/dev/null + [[ -z "$_{{name}}_log" ]] || _log_file="$_{{name}}_log" + reply=($(COMP_CWORD="$cword" \ + COMP_LINE="$line" \ + COMP_POINT="$point" \ + _{{name}}_completer -- "${words[@]}" \ + 2>$_log_file)) || return $? + } + compctl -K _{{name}}_completion {{name}} +fi + + +## +## This is a Bash completion file for the '{{name}}' command. You can install +## with either: +## +## cp FILE /usr/local/etc/bash_completion.d/{{name}} # Mac +## cp FILE /etc/bash_completion.d/{{name}} # Linux +## +## or: +## +## cp FILE > ~/.{{name}}.completion +## echo "source ~/.{{name}}.completion" >> ~/.bashrc +## \ No newline at end of file diff --git a/.pnpm-store/v11/files/86/30a4924d77e041840fc4726a559dc22a85a58c9352dd02cc8c6b0aca36a7002f94cff50a5f686ffe6f9255f7d1e70d2444ae4d9e37e0fc1c24684dfd34524b b/.pnpm-store/v11/files/86/30a4924d77e041840fc4726a559dc22a85a58c9352dd02cc8c6b0aca36a7002f94cff50a5f686ffe6f9255f7d1e70d2444ae4d9e37e0fc1c24684dfd34524b new file mode 100644 index 00000000..7cf1de55 --- /dev/null +++ b/.pnpm-store/v11/files/86/30a4924d77e041840fc4726a559dc22a85a58c9352dd02cc8c6b0aca36a7002f94cff50a5f686ffe6f9255f7d1e70d2444ae4d9e37e0fc1c24684dfd34524b @@ -0,0 +1,10 @@ +/*! + * is-posix-bracket + * + * Copyright (c) 2015-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isPosixBracket(str) { + return typeof str === 'string' && /\[([:.=+])(?:[^\[\]]|)+\1\]/.test(str); +}; diff --git a/.pnpm-store/v11/files/86/3250745aa409155dd7f70e3fe8dd567670685c9aa905ee4d0246d6108c7e6500e78911dc7ea9a2b4b02715d7b31f1cb7d1f9de0a8986c3707e185704094db7 b/.pnpm-store/v11/files/86/3250745aa409155dd7f70e3fe8dd567670685c9aa905ee4d0246d6108c7e6500e78911dc7ea9a2b4b02715d7b31f1cb7d1f9de0a8986c3707e185704094db7 new file mode 100644 index 00000000..286c945f --- /dev/null +++ b/.pnpm-store/v11/files/86/3250745aa409155dd7f70e3fe8dd567670685c9aa905ee4d0246d6108c7e6500e78911dc7ea9a2b4b02715d7b31f1cb7d1f9de0a8986c3707e185704094db7 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('unary', require('../unary'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/86/3f993260766a3fc110005da3854da14b0c950467d80284ff476a07d5c99ec20d54e3e96764e69ace40aa3bf097e11a0a4e73c73751d98658c1cba6fc1bbea7 b/.pnpm-store/v11/files/86/3f993260766a3fc110005da3854da14b0c950467d80284ff476a07d5c99ec20d54e3e96764e69ace40aa3bf097e11a0a4e73c73751d98658c1cba6fc1bbea7 new file mode 100644 index 00000000..b9a0088a --- /dev/null +++ b/.pnpm-store/v11/files/86/3f993260766a3fc110005da3854da14b0c950467d80284ff476a07d5c99ec20d54e3e96764e69ace40aa3bf097e11a0a4e73c73751d98658c1cba6fc1bbea7 @@ -0,0 +1,59 @@ +# play-sound + +[![Downloads](https://img.shields.io/npm/dt/play-sound.svg)](https://npmjs.org/package/play-sound) + +Play sounds by shelling out to one of the available audio players. + +## Installation + + npm install play-sound + +## Examples + +```javascript +var player = require('play-sound')(opts = {}) + +// $ mplayer foo.mp3 +player.play('foo.mp3', function(err){ + if (err) throw err +}) + +// { timeout: 300 } will be passed to child process +player.play('foo.mp3', { timeout: 300 }, function(err){ + if (err) throw err +}) + +// configure arguments for executable if any +player.play('foo.mp3', { afplay: ['-v', 1 ] /* lower volume for afplay on OSX */ }, function(err){ + if (err) throw err +}) + +// access the node child_process in case you need to kill it on demand +var audio = player.play('foo.mp3', function(err){ + if (err && !err.killed) throw err +}) +audio.kill() +``` + +## Options + +* `players` – List of available audio players to check. Default: + * [`mplayer`](https://www.mplayerhq.hu/) + * [`afplay`](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/afplay.1.html) + * [`mpg123`](http://www.mpg123.de/) + * [`mpg321`](http://mpg321.sourceforge.net/) + * [`play`](http://sox.sourceforge.net/) + * [`omxplayer`](https://github.com/popcornmix/omxplayer) + * [`aplay`](https://linux.die.net/man/1/aplay) + * [`cmdmp3`](https://github.com/jimlawless/cmdmp3) + * [`cvlc`](https://www.commandlinux.com/man-page/man1/cvlc.1.html) + * [`powershell`](https://docs.microsoft.com/en-us/powershell/) +* `player` – Audio player to use (skips availability checks) + +## Prior art + +* [play.js](https://github.com/Marak/play.js) - play sound files from node.js to your speakers + +## License + +MIT diff --git a/.pnpm-store/v11/files/86/573e25972bb2c2a74f013a336946a70174107b4c6a873a866b020c84f93461cb595615ff23e47be99946ca60e32cb7464b3e5e1632a319773d0bba1921c698 b/.pnpm-store/v11/files/86/573e25972bb2c2a74f013a336946a70174107b4c6a873a866b020c84f93461cb595615ff23e47be99946ca60e32cb7464b3e5e1632a319773d0bba1921c698 new file mode 100644 index 00000000..56c8722c --- /dev/null +++ b/.pnpm-store/v11/files/86/573e25972bb2c2a74f013a336946a70174107b4c6a873a866b020c84f93461cb595615ff23e47be99946ca60e32cb7464b3e5e1632a319773d0bba1921c698 @@ -0,0 +1,26 @@ +var createRound = require('./_createRound'); + +/** + * Computes `number` rounded up to `precision`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Math + * @param {number} number The number to round up. + * @param {number} [precision=0] The precision to round up to. + * @returns {number} Returns the rounded up number. + * @example + * + * _.ceil(4.006); + * // => 5 + * + * _.ceil(6.004, 2); + * // => 6.01 + * + * _.ceil(6040, -2); + * // => 6100 + */ +var ceil = createRound('ceil'); + +module.exports = ceil; diff --git a/.pnpm-store/v11/files/86/82243a9138de3c08039f370b3bc58c72124652b96ded5b4fe4314286594b95d83f4ff7b5cf02fa92c12f592d483e0ee7a051fb6581dbb52264fa5991f6e9f2 b/.pnpm-store/v11/files/86/82243a9138de3c08039f370b3bc58c72124652b96ded5b4fe4314286594b95d83f4ff7b5cf02fa92c12f592d483e0ee7a051fb6581dbb52264fa5991f6e9f2 new file mode 100644 index 00000000..2eb76fc0 --- /dev/null +++ b/.pnpm-store/v11/files/86/82243a9138de3c08039f370b3bc58c72124652b96ded5b4fe4314286594b95d83f4ff7b5cf02fa92c12f592d483e0ee7a051fb6581dbb52264fa5991f6e9f2 @@ -0,0 +1,141 @@ +/********************************************************************* + * NAN - Native Abstractions for Node.js + * + * Copyright (c) 2018 NAN contributors + * + * MIT License + ********************************************************************/ + +#ifndef NAN_CALLBACKS_H_ +#define NAN_CALLBACKS_H_ + +template class FunctionCallbackInfo; +template class PropertyCallbackInfo; +template class Global; + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +namespace Intercepted { + constexpr v8::Intercepted No() { return v8::Intercepted::kNo; } + constexpr v8::Intercepted Yes() { return v8::Intercepted::kYes; } +}; +#else +namespace Intercepted { + inline void No() {} + inline void Yes() {} +}; +#endif + +typedef void(*FunctionCallback)(const FunctionCallbackInfo&); +typedef void(*GetterCallback) + (v8::Local, const PropertyCallbackInfo&); +typedef void(*SetterCallback)( + v8::Local, + v8::Local, + const PropertyCallbackInfo&); + +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +typedef v8::Intercepted(*PropertyGetterCallback)( + v8::Local, + const PropertyCallbackInfo&); +typedef v8::Intercepted(*PropertySetterCallback)( + v8::Local, + v8::Local, + const PropertyCallbackInfo&); +#else +typedef void(*PropertyGetterCallback)( + v8::Local, + const PropertyCallbackInfo&); +typedef void(*PropertySetterCallback)( + v8::Local, + v8::Local, + const PropertyCallbackInfo&); +#endif +typedef void(*PropertyEnumeratorCallback) + (const PropertyCallbackInfo&); +#if defined(V8_MAJOR_VERSION) && (V8_MAJOR_VERSION > 12 || \ + (V8_MAJOR_VERSION == 12 && defined(V8_MINOR_VERSION) && V8_MINOR_VERSION > 4)) +typedef v8::Intercepted(*PropertyDeleterCallback)( + v8::Local, + const PropertyCallbackInfo&); +typedef v8::Intercepted(*PropertyQueryCallback)( + v8::Local, + const PropertyCallbackInfo&); +typedef v8::Intercepted(*IndexGetterCallback)( + uint32_t, + const PropertyCallbackInfo&); +typedef v8::Intercepted(*IndexSetterCallback)( + uint32_t, + v8::Local, + const PropertyCallbackInfo&); +typedef v8::Intercepted(*IndexEnumeratorCallback) + (const PropertyCallbackInfo&); +typedef v8::Intercepted(*IndexDeleterCallback)( + uint32_t, + const PropertyCallbackInfo&); +typedef v8::Intercepted(*IndexQueryCallback)( + uint32_t, + const PropertyCallbackInfo&); +#else +typedef void(*PropertyDeleterCallback)( + v8::Local, + const PropertyCallbackInfo&); +typedef void(*PropertyQueryCallback)( + v8::Local, + const PropertyCallbackInfo&); +typedef void(*IndexGetterCallback)( + uint32_t, + const PropertyCallbackInfo&); +typedef void(*IndexSetterCallback)( + uint32_t, + v8::Local, + const PropertyCallbackInfo&); +typedef void(*IndexEnumeratorCallback) + (const PropertyCallbackInfo&); +typedef void(*IndexDeleterCallback)( + uint32_t, + const PropertyCallbackInfo&); +typedef void(*IndexQueryCallback)( + uint32_t, + const PropertyCallbackInfo&); +#endif +namespace imp { +#if (NODE_MODULE_VERSION < NODE_16_0_MODULE_VERSION) +typedef v8::Local Sig; +#else +typedef v8::Local Sig; +#endif + +static const int kDataIndex = 0; + +static const int kFunctionIndex = 1; +static const int kFunctionFieldCount = 2; + +static const int kGetterIndex = 1; +static const int kSetterIndex = 2; +static const int kAccessorFieldCount = 3; + +static const int kPropertyGetterIndex = 1; +static const int kPropertySetterIndex = 2; +static const int kPropertyEnumeratorIndex = 3; +static const int kPropertyDeleterIndex = 4; +static const int kPropertyQueryIndex = 5; +static const int kPropertyFieldCount = 6; + +static const int kIndexPropertyGetterIndex = 1; +static const int kIndexPropertySetterIndex = 2; +static const int kIndexPropertyEnumeratorIndex = 3; +static const int kIndexPropertyDeleterIndex = 4; +static const int kIndexPropertyQueryIndex = 5; +static const int kIndexPropertyFieldCount = 6; + +} // end of namespace imp + +#if NODE_MODULE_VERSION > NODE_0_10_MODULE_VERSION +# include "nan_callbacks_12_inl.h" // NOLINT(build/include) +#else +# include "nan_callbacks_pre_12_inl.h" // NOLINT(build/include) +#endif + +#endif // NAN_CALLBACKS_H_ diff --git a/.pnpm-store/v11/files/86/88b5ad2a463eb4c0c9a698856bb6323d490de0c67b5a60a2cff598323d869f7fec92ffb3e542b22df1394d9dde508dda9e9c685dfc1d79ef6e332f6a834531 b/.pnpm-store/v11/files/86/88b5ad2a463eb4c0c9a698856bb6323d490de0c67b5a60a2cff598323d869f7fec92ffb3e542b22df1394d9dde508dda9e9c685dfc1d79ef6e332f6a834531 new file mode 100644 index 00000000..377d121a --- /dev/null +++ b/.pnpm-store/v11/files/86/88b5ad2a463eb4c0c9a698856bb6323d490de0c67b5a60a2cff598323d869f7fec92ffb3e542b22df1394d9dde508dda9e9c685dfc1d79ef6e332f6a834531 @@ -0,0 +1,22 @@ +/** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ +function isUndefined(value) { + return value === undefined; +} + +module.exports = isUndefined; diff --git a/.pnpm-store/v11/files/86/8bb43a80e266114591365a66c1ae55bc55359524c45d1db793bb0768c72b46cc84fb8c242b588782ff8bfb1f72cd846f707e7180fce3e1a9b26e15bbb3df3b b/.pnpm-store/v11/files/86/8bb43a80e266114591365a66c1ae55bc55359524c45d1db793bb0768c72b46cc84fb8c242b588782ff8bfb1f72cd846f707e7180fce3e1a9b26e15bbb3df3b new file mode 100644 index 00000000..5e4f80aa --- /dev/null +++ b/.pnpm-store/v11/files/86/8bb43a80e266114591365a66c1ae55bc55359524c45d1db793bb0768c72b46cc84fb8c242b588782ff8bfb1f72cd846f707e7180fce3e1a9b26e15bbb3df3b @@ -0,0 +1,2 @@ +module.exports = (suite) => { +}; diff --git a/.pnpm-store/v11/files/86/98e4c05c15f9126a9825cf025c70996fc484f5b0b10070ad9bda311f20ddecae20b69c7433f785343dbf7060fe7fb4e811db911e40157d9ef2a2d7cd70cad4-exec b/.pnpm-store/v11/files/86/98e4c05c15f9126a9825cf025c70996fc484f5b0b10070ad9bda311f20ddecae20b69c7433f785343dbf7060fe7fb4e811db911e40157d9ef2a2d7cd70cad4-exec new file mode 100755 index 00000000..f232adfe --- /dev/null +++ b/.pnpm-store/v11/files/86/98e4c05c15f9126a9825cf025c70996fc484f5b0b10070ad9bda311f20ddecae20b69c7433f785343dbf7060fe7fb4e811db911e40157d9ef2a2d7cd70cad4-exec @@ -0,0 +1,1066 @@ +// This needs to be global to avoid TS2403 in case lib.dom.d.ts is present in the same build +interface Console { + Console: NodeJS.ConsoleConstructor; + /** + * A simple assertion test that verifies whether `value` is truthy. + * If it is not, an `AssertionError` is thrown. + * If provided, the error `message` is formatted using `util.format()` and used as the error message. + */ + assert(value: any, message?: string, ...optionalParams: any[]): void; + /** + * When `stdout` is a TTY, calling `console.clear()` will attempt to clear the TTY. + * When `stdout` is not a TTY, this method does nothing. + */ + clear(): void; + /** + * Maintains an internal counter specific to `label` and outputs to `stdout` the number of times `console.count()` has been called with the given `label`. + */ + count(label?: string): void; + /** + * Resets the internal counter specific to `label`. + */ + countReset(label?: string): void; + /** + * The `console.debug()` function is an alias for {@link console.log()}. + */ + debug(message?: any, ...optionalParams: any[]): void; + /** + * Uses {@link util.inspect()} on `obj` and prints the resulting string to `stdout`. + * This function bypasses any custom `inspect()` function defined on `obj`. + */ + dir(obj: any, options?: NodeJS.InspectOptions): void; + /** + * This method calls {@link console.log()} passing it the arguments received. Please note that this method does not produce any XML formatting + */ + dirxml(...data: any[]): void; + /** + * Prints to `stderr` with newline. + */ + error(message?: any, ...optionalParams: any[]): void; + /** + * Increases indentation of subsequent lines by two spaces. + * If one or more `label`s are provided, those are printed first without the additional indentation. + */ + group(...label: any[]): void; + /** + * The `console.groupCollapsed()` function is an alias for {@link console.group()}. + */ + groupCollapsed(): void; + /** + * Decreases indentation of subsequent lines by two spaces. + */ + groupEnd(): void; + /** + * The {@link console.info()} function is an alias for {@link console.log()}. + */ + info(message?: any, ...optionalParams: any[]): void; + /** + * Prints to `stdout` with newline. + */ + log(message?: any, ...optionalParams: any[]): void; + /** + * This method does not display anything unless used in the inspector. + * Prints to `stdout` the array `array` formatted as a table. + */ + table(tabularData: any, properties?: ReadonlyArray): void; + /** + * Starts a timer that can be used to compute the duration of an operation. Timers are identified by a unique `label`. + */ + time(label?: string): void; + /** + * Stops a timer that was previously started by calling {@link console.time()} and prints the result to `stdout`. + */ + timeEnd(label?: string): void; + /** + * For a timer that was previously started by calling {@link console.time()}, prints the elapsed time and other `data` arguments to `stdout`. + */ + timeLog(label?: string, ...data: any[]): void; + /** + * Prints to `stderr` the string 'Trace :', followed by the {@link util.format()} formatted message and stack trace to the current position in the code. + */ + trace(message?: any, ...optionalParams: any[]): void; + /** + * The {@link console.warn()} function is an alias for {@link console.error()}. + */ + warn(message?: any, ...optionalParams: any[]): void; + + // --- Inspector mode only --- + /** + * This method does not display anything unless used in the inspector. + * The console.markTimeline() method is the deprecated form of console.timeStamp(). + * + * @deprecated Use console.timeStamp() instead. + */ + markTimeline(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Starts a JavaScript CPU profile with an optional label. + */ + profile(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Stops the current JavaScript CPU profiling session if one has been started and prints the report to the Profiles panel of the inspector. + */ + profileEnd(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * Adds an event with the label `label` to the Timeline panel of the inspector. + */ + timeStamp(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * The console.timeline() method is the deprecated form of console.time(). + * + * @deprecated Use console.time() instead. + */ + timeline(label?: string): void; + /** + * This method does not display anything unless used in the inspector. + * The console.timelineEnd() method is the deprecated form of console.timeEnd(). + * + * @deprecated Use console.timeEnd() instead. + */ + timelineEnd(label?: string): void; +} + +interface Error { + stack?: string; +} + +// Declare "static" methods in Error +interface ErrorConstructor { + /** Create .stack property on a target object */ + captureStackTrace(targetObject: Object, constructorOpt?: Function): void; + + /** + * Optional override for formatting stack traces + * + * @see https://github.com/v8/v8/wiki/Stack%20Trace%20API#customizing-stack-traces + */ + prepareStackTrace?: (err: Error, stackTraces: NodeJS.CallSite[]) => any; + + stackTraceLimit: number; +} + +interface SymbolConstructor { + readonly observable: symbol; +} + +// Node.js ESNEXT support +interface String { + /** Removes whitespace from the left end of a string. */ + trimLeft(): string; + /** Removes whitespace from the right end of a string. */ + trimRight(): string; + + /** Returns a copy with leading whitespace removed. */ + trimStart(): string; + /** Returns a copy with trailing whitespace removed. */ + trimEnd(): string; +} + +/*-----------------------------------------------* + * * + * GLOBAL * + * * + ------------------------------------------------*/ +declare var process: NodeJS.Process; +declare var global: NodeJS.Global; +declare var console: Console; + +declare var __filename: string; +declare var __dirname: string; + +declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; +declare namespace setTimeout { + function __promisify__(ms: number): Promise; + function __promisify__(ms: number, value: T): Promise; +} +declare function clearTimeout(timeoutId: NodeJS.Timeout): void; +declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timeout; +declare function clearInterval(intervalId: NodeJS.Timeout): void; +declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): NodeJS.Immediate; +declare namespace setImmediate { + function __promisify__(): Promise; + function __promisify__(value: T): Promise; +} +declare function clearImmediate(immediateId: NodeJS.Immediate): void; + +// TODO: change to `type NodeRequireFunction = (id: string) => any;` in next mayor version. +interface NodeRequireFunction { + (id: string): any; +} + +interface NodeRequire extends NodeRequireFunction { + resolve: RequireResolve; + cache: any; + extensions: NodeExtensions; + main: NodeModule | undefined; +} + +interface RequireResolve { + (id: string, options?: { paths?: string[]; }): string; + paths(request: string): string[] | null; +} + +interface NodeExtensions { + '.js': (m: NodeModule, filename: string) => any; + '.json': (m: NodeModule, filename: string) => any; + '.node': (m: NodeModule, filename: string) => any; + [ext: string]: (m: NodeModule, filename: string) => any; +} + +declare var require: NodeRequire; + +interface NodeModule { + exports: any; + require: NodeRequireFunction; + id: string; + filename: string; + loaded: boolean; + parent: NodeModule | null; + children: NodeModule[]; + paths: string[]; +} + +declare var module: NodeModule; + +// Same as module.exports +declare var exports: any; + +// Buffer class +type BufferEncoding = "ascii" | "utf8" | "utf16le" | "ucs2" | "base64" | "latin1" | "binary" | "hex"; +interface Buffer extends Uint8Array { + constructor: typeof Buffer; + write(string: string, offset?: number, length?: number, encoding?: string): number; + toString(encoding?: string, start?: number, end?: number): string; + toJSON(): { type: 'Buffer', data: any[] }; + equals(otherBuffer: Uint8Array): boolean; + compare(otherBuffer: Uint8Array, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; + copy(targetBuffer: Uint8Array, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; + slice(start?: number, end?: number): Buffer; + writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; + readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; + readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; + readUInt8(offset: number, noAssert?: boolean): number; + readUInt16LE(offset: number, noAssert?: boolean): number; + readUInt16BE(offset: number, noAssert?: boolean): number; + readUInt32LE(offset: number, noAssert?: boolean): number; + readUInt32BE(offset: number, noAssert?: boolean): number; + readInt8(offset: number, noAssert?: boolean): number; + readInt16LE(offset: number, noAssert?: boolean): number; + readInt16BE(offset: number, noAssert?: boolean): number; + readInt32LE(offset: number, noAssert?: boolean): number; + readInt32BE(offset: number, noAssert?: boolean): number; + readFloatLE(offset: number, noAssert?: boolean): number; + readFloatBE(offset: number, noAssert?: boolean): number; + readDoubleLE(offset: number, noAssert?: boolean): number; + readDoubleBE(offset: number, noAssert?: boolean): number; + swap16(): Buffer; + swap32(): Buffer; + swap64(): Buffer; + writeUInt8(value: number, offset: number, noAssert?: boolean): number; + writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeInt8(value: number, offset: number, noAssert?: boolean): number; + writeInt16LE(value: number, offset: number, noAssert?: boolean): number; + writeInt16BE(value: number, offset: number, noAssert?: boolean): number; + writeInt32LE(value: number, offset: number, noAssert?: boolean): number; + writeInt32BE(value: number, offset: number, noAssert?: boolean): number; + writeFloatLE(value: number, offset: number, noAssert?: boolean): number; + writeFloatBE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; + writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; + fill(value: any, offset?: number, end?: number): this; + indexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: string): number; + lastIndexOf(value: string | number | Uint8Array, byteOffset?: number, encoding?: string): number; + entries(): IterableIterator<[number, number]>; + includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; + keys(): IterableIterator; + values(): IterableIterator; +} + +/** + * Raw data is stored in instances of the Buffer class. + * A Buffer is similar to an array of integers but corresponds to a raw memory allocation outside the V8 heap. A Buffer cannot be resized. + * Valid string encodings: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + */ +declare const Buffer: { + /** + * Allocates a new buffer containing the given {str}. + * + * @param str String to store in buffer. + * @param encoding encoding to use, optional. Default is 'utf8' + * @deprecated since v10.0.0 - Use `Buffer.from(string[, encoding])` instead. + */ + new(str: string, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @deprecated since v10.0.0 - Use `Buffer.alloc()` instead (also see `Buffer.allocUnsafe()`). + */ + new(size: number): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: Uint8Array): Buffer; + /** + * Produces a Buffer backed by the same allocated memory as + * the given {ArrayBuffer}/{SharedArrayBuffer}. + * + * + * @param arrayBuffer The ArrayBuffer with which to share memory. + * @deprecated since v10.0.0 - Use `Buffer.from(arrayBuffer[, byteOffset[, length]])` instead. + */ + new(arrayBuffer: ArrayBuffer | SharedArrayBuffer): Buffer; + /** + * Allocates a new buffer containing the given {array} of octets. + * + * @param array The octets to store. + * @deprecated since v10.0.0 - Use `Buffer.from(array)` instead. + */ + new(array: ReadonlyArray): Buffer; + /** + * Copies the passed {buffer} data onto a new {Buffer} instance. + * + * @param buffer The buffer to copy. + * @deprecated since v10.0.0 - Use `Buffer.from(buffer)` instead. + */ + new(buffer: Buffer): Buffer; + prototype: Buffer; + /** + * When passed a reference to the .buffer property of a TypedArray instance, + * the newly created Buffer will share the same allocated memory as the TypedArray. + * The optional {byteOffset} and {length} arguments specify a memory range + * within the {arrayBuffer} that will be shared by the Buffer. + * + * @param arrayBuffer The .buffer property of any TypedArray or a new ArrayBuffer() + */ + from(arrayBuffer: ArrayBuffer | SharedArrayBuffer, byteOffset?: number, length?: number): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param data data to create a new Buffer + */ + from(data: ReadonlyArray): Buffer; + from(data: Uint8Array): Buffer; + /** + * Creates a new buffer containing the coerced value of an object + * A `TypeError` will be thrown if {obj} has not mentioned methods or is not of other type appropriate for `Buffer.from()` variants. + * @param obj An object supporting `Symbol.toPrimitive` or `valueOf()`. + */ + from(obj: { valueOf(): string | object } | { [Symbol.toPrimitive](hint: 'string'): string }, byteOffset?: number, length?: number): Buffer; + /** + * Creates a new Buffer containing the given JavaScript string {str}. + * If provided, the {encoding} parameter identifies the character encoding. + * If not provided, {encoding} defaults to 'utf8'. + */ + from(str: string, encoding?: string): Buffer; + /** + * Creates a new Buffer using the passed {data} + * @param values to create a new Buffer + */ + of(...items: number[]): Buffer; + /** + * Returns true if {obj} is a Buffer + * + * @param obj object to test. + */ + isBuffer(obj: any): obj is Buffer; + /** + * Returns true if {encoding} is a valid encoding argument. + * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' + * + * @param encoding string to test. + */ + isEncoding(encoding: string): boolean | undefined; + /** + * Gives the actual byte length of a string. encoding defaults to 'utf8'. + * This is not the same as String.prototype.length since that returns the number of characters in a string. + * + * @param string string to test. + * @param encoding encoding used to evaluate (defaults to 'utf8') + */ + byteLength(string: string | NodeJS.TypedArray | DataView | ArrayBuffer | SharedArrayBuffer, encoding?: string): number; + /** + * Returns a buffer which is the result of concatenating all the buffers in the list together. + * + * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. + * If the list has exactly one item, then the first item of the list is returned. + * If the list has more than one item, then a new Buffer is created. + * + * @param list An array of Buffer objects to concatenate + * @param totalLength Total length of the buffers when concatenated. + * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. + */ + concat(list: ReadonlyArray, totalLength?: number): Buffer; + /** + * The same as buf1.compare(buf2). + */ + compare(buf1: Uint8Array, buf2: Uint8Array): number; + /** + * Allocates a new buffer of {size} octets. + * + * @param size count of octets to allocate. + * @param fill if specified, buffer will be initialized by calling buf.fill(fill). + * If parameter is omitted, buffer will be filled with zeros. + * @param encoding encoding used for call to buf.fill while initalizing + */ + alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; + /** + * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + allocUnsafe(size: number): Buffer; + /** + * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents + * of the newly created Buffer are unknown and may contain sensitive data. + * + * @param size count of octets to allocate + */ + allocUnsafeSlow(size: number): Buffer; + /** + * This is the number of bytes used to determine the size of pre-allocated, internal Buffer instances used for pooling. This value may be modified. + */ + poolSize: number; +}; + +/*----------------------------------------------* +* * +* GLOBAL INTERFACES * +* * +*-----------------------------------------------*/ +declare namespace NodeJS { + interface InspectOptions { + showHidden?: boolean; + depth?: number | null; + colors?: boolean; + customInspect?: boolean; + showProxy?: boolean; + maxArrayLength?: number | null; + breakLength?: number; + compact?: boolean; + sorted?: boolean | ((a: string, b: string) => number); + } + + interface ConsoleConstructorOptions { + stdout: WritableStream; + stderr?: WritableStream; + ignoreErrors?: boolean; + colorMode?: boolean | 'auto'; + } + + interface ConsoleConstructor { + prototype: Console; + new(stdout: WritableStream, stderr?: WritableStream, ignoreErrors?: boolean): Console; + new(options: ConsoleConstructorOptions): Console; + } + + interface CallSite { + /** + * Value of "this" + */ + getThis(): any; + + /** + * Type of "this" as a string. + * This is the name of the function stored in the constructor field of + * "this", if available. Otherwise the object's [[Class]] internal + * property. + */ + getTypeName(): string | null; + + /** + * Current function + */ + getFunction(): Function | undefined; + + /** + * Name of the current function, typically its name property. + * If a name property is not available an attempt will be made to try + * to infer a name from the function's context. + */ + getFunctionName(): string | null; + + /** + * Name of the property [of "this" or one of its prototypes] that holds + * the current function + */ + getMethodName(): string | null; + + /** + * Name of the script [if this function was defined in a script] + */ + getFileName(): string | null; + + /** + * Current line number [if this function was defined in a script] + */ + getLineNumber(): number | null; + + /** + * Current column number [if this function was defined in a script] + */ + getColumnNumber(): number | null; + + /** + * A call site object representing the location where eval was called + * [if this function was created using a call to eval] + */ + getEvalOrigin(): string | undefined; + + /** + * Is this a toplevel invocation, that is, is "this" the global object? + */ + isToplevel(): boolean; + + /** + * Does this call take place in code defined by a call to eval? + */ + isEval(): boolean; + + /** + * Is this call in native V8 code? + */ + isNative(): boolean; + + /** + * Is this a constructor call? + */ + isConstructor(): boolean; + } + + interface ErrnoException extends Error { + errno?: number; + code?: string; + path?: string; + syscall?: string; + stack?: string; + } + + class EventEmitter { + addListener(event: string | symbol, listener: (...args: any[]) => void): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + once(event: string | symbol, listener: (...args: any[]) => void): this; + removeListener(event: string | symbol, listener: (...args: any[]) => void): this; + off(event: string | symbol, listener: (...args: any[]) => void): this; + removeAllListeners(event?: string | symbol): this; + setMaxListeners(n: number): this; + getMaxListeners(): number; + listeners(event: string | symbol): Function[]; + rawListeners(event: string | symbol): Function[]; + emit(event: string | symbol, ...args: any[]): boolean; + listenerCount(type: string | symbol): number; + // Added in Node 6... + prependListener(event: string | symbol, listener: (...args: any[]) => void): this; + prependOnceListener(event: string | symbol, listener: (...args: any[]) => void): this; + eventNames(): Array; + } + + interface ReadableStream extends EventEmitter { + readable: boolean; + read(size?: number): string | Buffer; + setEncoding(encoding: string): this; + pause(): this; + resume(): this; + isPaused(): boolean; + pipe(destination: T, options?: { end?: boolean; }): T; + unpipe(destination?: WritableStream): this; + unshift(chunk: string): void; + unshift(chunk: Buffer): void; + wrap(oldStream: ReadableStream): this; + [Symbol.asyncIterator](): AsyncIterableIterator; + } + + interface WritableStream extends EventEmitter { + writable: boolean; + write(buffer: Buffer | string, cb?: Function): boolean; + write(str: string, encoding?: string, cb?: Function): boolean; + end(cb?: Function): void; + end(buffer: Buffer, cb?: Function): void; + end(str: string, cb?: Function): void; + end(str: string, encoding?: string, cb?: Function): void; + } + + interface ReadWriteStream extends ReadableStream, WritableStream { } + + interface Events extends EventEmitter { } + + interface Domain extends Events { + run(fn: Function): void; + add(emitter: Events): void; + remove(emitter: Events): void; + bind(cb: (err: Error, data: any) => any): any; + intercept(cb: (data: any) => any): any; + + addListener(event: string, listener: (...args: any[]) => void): this; + on(event: string, listener: (...args: any[]) => void): this; + once(event: string, listener: (...args: any[]) => void): this; + removeListener(event: string, listener: (...args: any[]) => void): this; + removeAllListeners(event?: string): this; + } + + interface MemoryUsage { + rss: number; + heapTotal: number; + heapUsed: number; + external: number; + } + + interface CpuUsage { + user: number; + system: number; + } + + interface ProcessRelease { + name: string; + sourceUrl?: string; + headersUrl?: string; + libUrl?: string; + lts?: string; + } + + interface ProcessVersions { + http_parser: string; + node: string; + v8: string; + ares: string; + uv: string; + zlib: string; + modules: string; + openssl: string; + } + + type Platform = 'aix' + | 'android' + | 'darwin' + | 'freebsd' + | 'linux' + | 'openbsd' + | 'sunos' + | 'win32' + | 'cygwin'; + + type Signals = + "SIGABRT" | "SIGALRM" | "SIGBUS" | "SIGCHLD" | "SIGCONT" | "SIGFPE" | "SIGHUP" | "SIGILL" | "SIGINT" | "SIGIO" | + "SIGIOT" | "SIGKILL" | "SIGPIPE" | "SIGPOLL" | "SIGPROF" | "SIGPWR" | "SIGQUIT" | "SIGSEGV" | "SIGSTKFLT" | + "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" | + "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO"; + + type MultipleResolveType = 'resolve' | 'reject'; + + type BeforeExitListener = (code: number) => void; + type DisconnectListener = () => void; + type ExitListener = (code: number) => void; + type RejectionHandledListener = (promise: Promise) => void; + type UncaughtExceptionListener = (error: Error) => void; + type UnhandledRejectionListener = (reason: {} | null | undefined, promise: Promise) => void; + type WarningListener = (warning: Error) => void; + type MessageListener = (message: any, sendHandle: any) => void; + type SignalsListener = (signal: Signals) => void; + type NewListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; + type RemoveListenerListener = (type: string | symbol, listener: (...args: any[]) => void) => void; + type MultipleResolveListener = (type: MultipleResolveType, promise: Promise, value: any) => void; + + interface Socket extends ReadWriteStream { + isTTY?: true; + } + + interface ProcessEnv { + [key: string]: string | undefined; + } + + interface WriteStream extends Socket { + readonly writableHighWaterMark: number; + readonly writableLength: number; + columns?: number; + rows?: number; + _write(chunk: any, encoding: string, callback: Function): void; + _destroy(err: Error | null, callback: Function): void; + _final(callback: Function): void; + setDefaultEncoding(encoding: string): this; + cork(): void; + uncork(): void; + destroy(error?: Error): void; + } + interface ReadStream extends Socket { + readonly readableFlowing: boolean | null; + readonly readableHighWaterMark: number; + readonly readableLength: number; + isRaw?: boolean; + setRawMode?(mode: boolean): void; + _read(size: number): void; + _destroy(err: Error | null, callback: Function): void; + push(chunk: any, encoding?: string): boolean; + destroy(error?: Error): void; + } + + interface HRTime { + (time?: [number, number]): [number, number]; + bigint(): bigint; + } + + interface EmitWarningOptions { + /** + * When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. + * + * @default 'Warning' + */ + type?: string; + + /** + * A unique identifier for the warning instance being emitted. + */ + code?: string; + + /** + * When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. + * + * @default process.emitWarning + */ + ctor?: Function; + + /** + * Additional text to include with the error. + */ + detail?: string; + } + + interface Process extends EventEmitter { + stdout: WriteStream; + stderr: WriteStream; + stdin: ReadStream; + openStdin(): Socket; + argv: string[]; + argv0: string; + execArgv: string[]; + execPath: string; + abort(): never; + chdir(directory: string): void; + cwd(): string; + debugPort: number; + + /** + * The `process.emitWarning()` method can be used to emit custom or application specific process warnings. + * + * These can be listened for by adding a handler to the `'warning'` event. + * + * @param warning The warning to emit. + * @param type When `warning` is a `string`, `type` is the name to use for the _type_ of warning being emitted. Default: `'Warning'`. + * @param code A unique identifier for the warning instance being emitted. + * @param ctor When `warning` is a `string`, `ctor` is an optional function used to limit the generated stack trace. Default: `process.emitWarning`. + */ + emitWarning(warning: string | Error, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, ctor?: Function): void; + emitWarning(warning: string | Error, type?: string, code?: string, ctor?: Function): void; + emitWarning(warning: string | Error, options?: EmitWarningOptions): void; + + env: ProcessEnv; + exit(code?: number): never; + exitCode?: number; + getgid(): number; + setgid(id: number | string): void; + getuid(): number; + setuid(id: number | string): void; + geteuid(): number; + seteuid(id: number | string): void; + getegid(): number; + setegid(id: number | string): void; + getgroups(): number[]; + setgroups(groups: ReadonlyArray): void; + setUncaughtExceptionCaptureCallback(cb: ((err: Error) => void) | null): void; + hasUncaughtExceptionCaptureCallback(): boolean; + version: string; + versions: ProcessVersions; + config: { + target_defaults: { + cflags: any[]; + default_configuration: string; + defines: string[]; + include_dirs: string[]; + libraries: string[]; + }; + variables: { + clang: number; + host_arch: string; + node_install_npm: boolean; + node_install_waf: boolean; + node_prefix: string; + node_shared_openssl: boolean; + node_shared_v8: boolean; + node_shared_zlib: boolean; + node_use_dtrace: boolean; + node_use_etw: boolean; + node_use_openssl: boolean; + target_arch: string; + v8_no_strict_aliasing: number; + v8_use_snapshot: boolean; + visibility: string; + }; + }; + kill(pid: number, signal?: string | number): void; + pid: number; + ppid: number; + title: string; + arch: string; + platform: Platform; + mainModule?: NodeModule; + memoryUsage(): MemoryUsage; + cpuUsage(previousValue?: CpuUsage): CpuUsage; + nextTick(callback: Function, ...args: any[]): void; + release: ProcessRelease; + umask(mask?: number): number; + uptime(): number; + hrtime: HRTime; + domain: Domain; + + // Worker + send?(message: any, sendHandle?: any): void; + disconnect(): void; + connected: boolean; + + /** + * The `process.allowedNodeEnvironmentFlags` property is a special, + * read-only `Set` of flags allowable within the [`NODE_OPTIONS`][] + * environment variable. + */ + allowedNodeEnvironmentFlags: ReadonlySet; + + /** + * EventEmitter + * 1. beforeExit + * 2. disconnect + * 3. exit + * 4. message + * 5. rejectionHandled + * 6. uncaughtException + * 7. unhandledRejection + * 8. warning + * 9. message + * 10. + * 11. newListener/removeListener inherited from EventEmitter + */ + addListener(event: "beforeExit", listener: BeforeExitListener): this; + addListener(event: "disconnect", listener: DisconnectListener): this; + addListener(event: "exit", listener: ExitListener): this; + addListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + addListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + addListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + addListener(event: "warning", listener: WarningListener): this; + addListener(event: "message", listener: MessageListener): this; + addListener(event: Signals, listener: SignalsListener): this; + addListener(event: "newListener", listener: NewListenerListener): this; + addListener(event: "removeListener", listener: RemoveListenerListener): this; + addListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + emit(event: "beforeExit", code: number): boolean; + emit(event: "disconnect"): boolean; + emit(event: "exit", code: number): boolean; + emit(event: "rejectionHandled", promise: Promise): boolean; + emit(event: "uncaughtException", error: Error): boolean; + emit(event: "unhandledRejection", reason: any, promise: Promise): boolean; + emit(event: "warning", warning: Error): boolean; + emit(event: "message", message: any, sendHandle: any): this; + emit(event: Signals, signal: Signals): boolean; + emit(event: "newListener", eventName: string | symbol, listener: (...args: any[]) => void): this; + emit(event: "removeListener", eventName: string, listener: (...args: any[]) => void): this; + emit(event: "multipleResolves", listener: MultipleResolveListener): this; + + on(event: "beforeExit", listener: BeforeExitListener): this; + on(event: "disconnect", listener: DisconnectListener): this; + on(event: "exit", listener: ExitListener): this; + on(event: "rejectionHandled", listener: RejectionHandledListener): this; + on(event: "uncaughtException", listener: UncaughtExceptionListener): this; + on(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + on(event: "warning", listener: WarningListener): this; + on(event: "message", listener: MessageListener): this; + on(event: Signals, listener: SignalsListener): this; + on(event: "newListener", listener: NewListenerListener): this; + on(event: "removeListener", listener: RemoveListenerListener): this; + on(event: "multipleResolves", listener: MultipleResolveListener): this; + on(event: string | symbol, listener: (...args: any[]) => void): this; + + once(event: "beforeExit", listener: BeforeExitListener): this; + once(event: "disconnect", listener: DisconnectListener): this; + once(event: "exit", listener: ExitListener): this; + once(event: "rejectionHandled", listener: RejectionHandledListener): this; + once(event: "uncaughtException", listener: UncaughtExceptionListener): this; + once(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + once(event: "warning", listener: WarningListener): this; + once(event: "message", listener: MessageListener): this; + once(event: Signals, listener: SignalsListener): this; + once(event: "newListener", listener: NewListenerListener): this; + once(event: "removeListener", listener: RemoveListenerListener): this; + once(event: "multipleResolves", listener: MultipleResolveListener): this; + + prependListener(event: "beforeExit", listener: BeforeExitListener): this; + prependListener(event: "disconnect", listener: DisconnectListener): this; + prependListener(event: "exit", listener: ExitListener): this; + prependListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependListener(event: "warning", listener: WarningListener): this; + prependListener(event: "message", listener: MessageListener): this; + prependListener(event: Signals, listener: SignalsListener): this; + prependListener(event: "newListener", listener: NewListenerListener): this; + prependListener(event: "removeListener", listener: RemoveListenerListener): this; + prependListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + prependOnceListener(event: "beforeExit", listener: BeforeExitListener): this; + prependOnceListener(event: "disconnect", listener: DisconnectListener): this; + prependOnceListener(event: "exit", listener: ExitListener): this; + prependOnceListener(event: "rejectionHandled", listener: RejectionHandledListener): this; + prependOnceListener(event: "uncaughtException", listener: UncaughtExceptionListener): this; + prependOnceListener(event: "unhandledRejection", listener: UnhandledRejectionListener): this; + prependOnceListener(event: "warning", listener: WarningListener): this; + prependOnceListener(event: "message", listener: MessageListener): this; + prependOnceListener(event: Signals, listener: SignalsListener): this; + prependOnceListener(event: "newListener", listener: NewListenerListener): this; + prependOnceListener(event: "removeListener", listener: RemoveListenerListener): this; + prependOnceListener(event: "multipleResolves", listener: MultipleResolveListener): this; + + listeners(event: "beforeExit"): BeforeExitListener[]; + listeners(event: "disconnect"): DisconnectListener[]; + listeners(event: "exit"): ExitListener[]; + listeners(event: "rejectionHandled"): RejectionHandledListener[]; + listeners(event: "uncaughtException"): UncaughtExceptionListener[]; + listeners(event: "unhandledRejection"): UnhandledRejectionListener[]; + listeners(event: "warning"): WarningListener[]; + listeners(event: "message"): MessageListener[]; + listeners(event: Signals): SignalsListener[]; + listeners(event: "newListener"): NewListenerListener[]; + listeners(event: "removeListener"): RemoveListenerListener[]; + listeners(event: "multipleResolves"): MultipleResolveListener[]; + } + + interface Global { + Array: typeof Array; + ArrayBuffer: typeof ArrayBuffer; + Boolean: typeof Boolean; + Buffer: typeof Buffer; + DataView: typeof DataView; + Date: typeof Date; + Error: typeof Error; + EvalError: typeof EvalError; + Float32Array: typeof Float32Array; + Float64Array: typeof Float64Array; + Function: typeof Function; + GLOBAL: Global; + Infinity: typeof Infinity; + Int16Array: typeof Int16Array; + Int32Array: typeof Int32Array; + Int8Array: typeof Int8Array; + Intl: typeof Intl; + JSON: typeof JSON; + Map: MapConstructor; + Math: typeof Math; + NaN: typeof NaN; + Number: typeof Number; + Object: typeof Object; + Promise: Function; + RangeError: typeof RangeError; + ReferenceError: typeof ReferenceError; + RegExp: typeof RegExp; + Set: SetConstructor; + String: typeof String; + Symbol: Function; + SyntaxError: typeof SyntaxError; + TypeError: typeof TypeError; + URIError: typeof URIError; + Uint16Array: typeof Uint16Array; + Uint32Array: typeof Uint32Array; + Uint8Array: typeof Uint8Array; + Uint8ClampedArray: Function; + WeakMap: WeakMapConstructor; + WeakSet: WeakSetConstructor; + clearImmediate: (immediateId: Immediate) => void; + clearInterval: (intervalId: Timeout) => void; + clearTimeout: (timeoutId: Timeout) => void; + console: typeof console; + decodeURI: typeof decodeURI; + decodeURIComponent: typeof decodeURIComponent; + encodeURI: typeof encodeURI; + encodeURIComponent: typeof encodeURIComponent; + escape: (str: string) => string; + eval: typeof eval; + global: Global; + isFinite: typeof isFinite; + isNaN: typeof isNaN; + parseFloat: typeof parseFloat; + parseInt: typeof parseInt; + process: Process; + root: Global; + setImmediate: (callback: (...args: any[]) => void, ...args: any[]) => Immediate; + setInterval: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout; + setTimeout: (callback: (...args: any[]) => void, ms: number, ...args: any[]) => Timeout; + undefined: typeof undefined; + unescape: (str: string) => string; + gc: () => void; + v8debug?: any; + } + + interface Timer { + ref(): this; + refresh(): this; + unref(): this; + } + + class Immediate { + ref(): this; + refresh(): this; + unref(): this; + _onImmediate: Function; // to distinguish it from the Timeout class + } + + class Timeout implements Timer { + ref(): this; + refresh(): this; + unref(): this; + } + + class Module { + static runMain(): void; + static wrap(code: string): string; + static createRequireFromPath(path: string): (path: string) => any; + static builtinModules: string[]; + + static Module: typeof Module; + + exports: any; + require: NodeRequireFunction; + id: string; + filename: string; + loaded: boolean; + parent: Module | null; + children: Module[]; + paths: string[]; + + constructor(id: string, parent?: Module); + } + + type TypedArray = + | Uint8Array + | Uint8ClampedArray + | Uint16Array + | Uint32Array + | Int8Array + | Int16Array + | Int32Array + | BigUint64Array + | BigInt64Array + | Float32Array + | Float64Array; + type ArrayBufferView = TypedArray | DataView; +} diff --git a/.pnpm-store/v11/files/86/a0be4f25a763dd3083711a3a4addb857ed7ffed4c8fc6e3070ae0b04c47485bd0ce6a42e0cf06e1987f2d1bdd653ff84e3c114b9b40f544d944fc21c54e8c4 b/.pnpm-store/v11/files/86/a0be4f25a763dd3083711a3a4addb857ed7ffed4c8fc6e3070ae0b04c47485bd0ce6a42e0cf06e1987f2d1bdd653ff84e3c114b9b40f544d944fc21c54e8c4 new file mode 100644 index 00000000..5b365089 --- /dev/null +++ b/.pnpm-store/v11/files/86/a0be4f25a763dd3083711a3a4addb857ed7ffed4c8fc6e3070ae0b04c47485bd0ce6a42e0cf06e1987f2d1bdd653ff84e3c114b9b40f544d944fc21c54e8c4 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').everySeries; diff --git a/.pnpm-store/v11/files/86/a1c751f94b8ed3ce1e40b5912e5d1d7ca8b32bb4b502f365ff1035d8f8198d868401159f3057cfef0a751d070987563db4f9d64c652d1d997b16d22b11c85a b/.pnpm-store/v11/files/86/a1c751f94b8ed3ce1e40b5912e5d1d7ca8b32bb4b502f365ff1035d8f8198d868401159f3057cfef0a751d070987563db4f9d64c652d1d997b16d22b11c85a new file mode 100644 index 00000000..e4eccb0a --- /dev/null +++ b/.pnpm-store/v11/files/86/a1c751f94b8ed3ce1e40b5912e5d1d7ca8b32bb4b502f365ff1035d8f8198d868401159f3057cfef0a751d070987563db4f9d64c652d1d997b16d22b11c85a @@ -0,0 +1,52 @@ +var castPath = require('./_castPath'), + last = require('./last'), + parent = require('./_parent'), + toKey = require('./_toKey'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ +function baseUnset(object, path) { + path = castPath(path, object); + + // Prevent prototype pollution: + // https://github.com/lodash/lodash/security/advisories/GHSA-xxjr-mmjv-4gpg + // https://github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh + var index = -1, + length = path.length; + + if (!length) { + return true; + } + + while (++index < length) { + var key = toKey(path[index]); + + // Always block "__proto__" anywhere in the path if it's not expected + if (key === '__proto__' && !hasOwnProperty.call(object, '__proto__')) { + return false; + } + + // Block constructor/prototype as non-terminal traversal keys to prevent + // escaping the object graph into built-in constructors and prototypes. + if ((key === 'constructor' || key === 'prototype') && index < length - 1) { + return false; + } + } + + var obj = parent(object, path); + return obj == null || delete obj[toKey(last(path))]; +} + +module.exports = baseUnset; diff --git a/.pnpm-store/v11/files/86/a53024e605c6679ec9ece2a19ac987683a58558d062e0d4630439c84dd59dbba380468f83fec358e01961e0a8c605b74272223225b6ef583dda5cfcc2523ff b/.pnpm-store/v11/files/86/a53024e605c6679ec9ece2a19ac987683a58558d062e0d4630439c84dd59dbba380468f83fec358e01961e0a8c605b74272223225b6ef583dda5cfcc2523ff new file mode 100644 index 00000000..7f2d1f36 --- /dev/null +++ b/.pnpm-store/v11/files/86/a53024e605c6679ec9ece2a19ac987683a58558d062e0d4630439c84dd59dbba380468f83fec358e01961e0a8c605b74272223225b6ef583dda5cfcc2523ff @@ -0,0 +1,91 @@ +var baseRandom = require('./_baseRandom'), + isIterateeCall = require('./_isIterateeCall'), + toFinite = require('./toFinite'); + +/** Built-in method references without a dependency on `root`. */ +var freeParseFloat = parseFloat; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min, + nativeRandom = Math.random; + +/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * **Note:** If `lower` is greater than `upper`, the values are swapped. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * // when lower is greater than upper the values are swapped + * _.random(5, 0); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(-5); + * // => an integer between -5 and 0 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); +} + +module.exports = random; diff --git a/.pnpm-store/v11/files/86/d199134ae0e8816a50992e5dd43cfaeb0f0577bec2a4c040d7ec9f6562b53faa872ec14800ba0d107ff95bdb0e7f754429995e9b252d42737225c8b9c98d03 b/.pnpm-store/v11/files/86/d199134ae0e8816a50992e5dd43cfaeb0f0577bec2a4c040d7ec9f6562b53faa872ec14800ba0d107ff95bdb0e7f754429995e9b252d42737225c8b9c98d03 new file mode 100644 index 00000000..4cc2c249 --- /dev/null +++ b/.pnpm-store/v11/files/86/d199134ae0e8816a50992e5dd43cfaeb0f0577bec2a4c040d7ec9f6562b53faa872ec14800ba0d107ff95bdb0e7f754429995e9b252d42737225c8b9c98d03 @@ -0,0 +1,20 @@ +var Symbol = require('./_Symbol'), + isArguments = require('./isArguments'), + isArray = require('./isArray'); + +/** Built-in value references. */ +var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; + +/** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ +function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); +} + +module.exports = isFlattenable; diff --git a/.pnpm-store/v11/files/86/d5a8e813981063abcebe37b538709784f604dc5b873e789eb309ec629e7da4feb60a8b9403d3e39fdfb3509c70c3e9a396c7b7276a428d67f9a858f15479bd b/.pnpm-store/v11/files/86/d5a8e813981063abcebe37b538709784f604dc5b873e789eb309ec629e7da4feb60a8b9403d3e39fdfb3509c70c3e9a396c7b7276a428d67f9a858f15479bd new file mode 100644 index 00000000..32842cd8 --- /dev/null +++ b/.pnpm-store/v11/files/86/d5a8e813981063abcebe37b538709784f604dc5b873e789eb309ec629e7da4feb60a8b9403d3e39fdfb3509c70c3e9a396c7b7276a428d67f9a858f15479bd @@ -0,0 +1,15 @@ +var createBaseFor = require('./_createBaseFor'); + +/** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ +var baseForRight = createBaseFor(true); + +module.exports = baseForRight; diff --git a/.pnpm-store/v11/files/86/ecfe540830151772e8318994ffbd64e9ebd55269a4d78783d08a9f3324d67b84eb77e0034429e51dfa4b0b1d34995bcdc7ae2b6fd9318cbea9b24fe0c1b071 b/.pnpm-store/v11/files/86/ecfe540830151772e8318994ffbd64e9ebd55269a4d78783d08a9f3324d67b84eb77e0034429e51dfa4b0b1d34995bcdc7ae2b6fd9318cbea9b24fe0c1b071 new file mode 100644 index 00000000..e0790ad5 --- /dev/null +++ b/.pnpm-store/v11/files/86/ecfe540830151772e8318994ffbd64e9ebd55269a4d78783d08a9f3324d67b84eb77e0034429e51dfa4b0b1d34995bcdc7ae2b6fd9318cbea9b24fe0c1b071 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('sortBy', require('../sortBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/86/f428214ecf64d091ca6567a7e7826836d6e4d82cebf66583b285af22369da912e74d85330f51a1f82f3601ca3948a149399aa9e7beb88b78046b7107f8fb94 b/.pnpm-store/v11/files/86/f428214ecf64d091ca6567a7e7826836d6e4d82cebf66583b285af22369da912e74d85330f51a1f82f3601ca3948a149399aa9e7beb88b78046b7107f8fb94 new file mode 100644 index 00000000..9dfd7113 --- /dev/null +++ b/.pnpm-store/v11/files/86/f428214ecf64d091ca6567a7e7826836d6e4d82cebf66583b285af22369da912e74d85330f51a1f82f3601ca3948a149399aa9e7beb88b78046b7107f8fb94 @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _eachOfLimit = require('./eachOfLimit'); + +var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * The same as [`eachOf`]{@link module:Collections.eachOf} but runs only a single async operation at a time. + * + * @name eachOfSeries + * @static + * @memberOf module:Collections + * @method + * @see [async.eachOf]{@link module:Collections.eachOf} + * @alias forEachOfSeries + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * Invoked with (item, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Invoked with (err). + */ +exports.default = (0, _doLimit2.default)(_eachOfLimit2.default, 1); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/87/46f31a56ed6d99d524f6f2741d8c611baa10cfd94e6af1334babe8c543fb908869c4f108562402aa8cab580bc1fed47f403a216f98706e9ce75b45ab8aa311 b/.pnpm-store/v11/files/87/46f31a56ed6d99d524f6f2741d8c611baa10cfd94e6af1334babe8c543fb908869c4f108562402aa8cab580bc1fed47f403a216f98706e9ce75b45ab8aa311 new file mode 100644 index 00000000..6f4efa9c --- /dev/null +++ b/.pnpm-store/v11/files/87/46f31a56ed6d99d524f6f2741d8c611baa10cfd94e6af1334babe8c543fb908869c4f108562402aa8cab580bc1fed47f403a216f98706e9ce75b45ab8aa311 @@ -0,0 +1 @@ +export declare const run: (deps: string[]) => void; diff --git a/.pnpm-store/v11/files/87/77012698cc4064eb0f95c409f498fdd0ab68760a1789705a690abc0fae0c055d0efeef5b9c3429f5fed5d8cc1895662132a28cd8eb5b5a0347aee8f3561856 b/.pnpm-store/v11/files/87/77012698cc4064eb0f95c409f498fdd0ab68760a1789705a690abc0fae0c055d0efeef5b9c3429f5fed5d8cc1895662132a28cd8eb5b5a0347aee8f3561856 new file mode 100644 index 00000000..018c49a1 --- /dev/null +++ b/.pnpm-store/v11/files/87/77012698cc4064eb0f95c409f498fdd0ab68760a1789705a690abc0fae0c055d0efeef5b9c3429f5fed5d8cc1895662132a28cd8eb5b5a0347aee8f3561856 @@ -0,0 +1,49 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const assert = require("assert"); +exports.r2gSmokeTest = function () { + return true; +}; +const log = console.log.bind(console, '[freeze]'); +exports.freezeExistingProps = function ($obj, depth) { + depth = depth || 0; + assert(Number.isInteger(depth), 'depth value must be an integer.'); + depth = Math.min(5, depth); + (function recurse(obj, depth) { + Object.keys(obj).forEach(function (key) { + try { + Object.defineProperty(obj, key, { + writable: false + }); + } + catch (e) { + console.error(e.stack || e); + } + if (depth > 0 && obj[key]) { + recurse(obj[key], --depth); + } + }); + })($obj, depth); + return $obj; +}; +exports.freezeAllProps = function ($obj, depth) { + depth = depth || 0; + assert(Number.isInteger(depth), 'depth value must be an integer.'); + depth = Math.min(5, depth); + (function recurse(obj, depth) { + try { + Object.freeze(obj); + } + catch (e) { + console.error(e.stack || e); + } + finally { + Object.keys(obj).forEach(function (key) { + if (depth > 0 && obj[key]) { + recurse(obj[key], --depth); + } + }); + } + })($obj, depth); + return $obj; +}; diff --git a/.pnpm-store/v11/files/87/970acf4b52e886707f5a2b8cc13129c433a58438b8fdf98c576adb99d63775bf5a2db4f30c158046c21dd70a54be6087e700754f9976dbe063133417cf8ea6 b/.pnpm-store/v11/files/87/970acf4b52e886707f5a2b8cc13129c433a58438b8fdf98c576adb99d63775bf5a2db4f30c158046c21dd70a54be6087e700754f9976dbe063133417cf8ea6 new file mode 100644 index 00000000..87589173 --- /dev/null +++ b/.pnpm-store/v11/files/87/970acf4b52e886707f5a2b8cc13129c433a58438b8fdf98c576adb99d63775bf5a2db4f30c158046c21dd70a54be6087e700754f9976dbe063133417cf8ea6 @@ -0,0 +1,2 @@ +import { IHandleBlocking } from "suman-types/dts/runner"; +export default function (order: Object): IHandleBlocking; diff --git a/.pnpm-store/v11/files/87/97eaeddb8467d172cc321ccc99e868669008eaa3676ff25604024e66444a623ff8d76e74e21cee6251592bb1da3d7f8b5f518bfe1442bc9c5a3c1184b4876d b/.pnpm-store/v11/files/87/97eaeddb8467d172cc321ccc99e868669008eaa3676ff25604024e66444a623ff8d76e74e21cee6251592bb1da3d7f8b5f518bfe1442bc9c5a3c1184b4876d new file mode 100644 index 00000000..6f57b253 --- /dev/null +++ b/.pnpm-store/v11/files/87/97eaeddb8467d172cc321ccc99e868669008eaa3676ff25604024e66444a623ff8d76e74e21cee6251592bb1da3d7f8b5f518bfe1442bc9c5a3c1184b4876d @@ -0,0 +1,82 @@ +var assert = require("assert"), + sprintfjs = require("../src/sprintf.js"), + sprintf = sprintfjs.sprintf, + vsprintf = sprintfjs.vsprintf + +describe("sprintfjs", function() { + var pi = 3.141592653589793 + + it("should return formated strings for simple placeholders", function() { + assert.equal("%", sprintf("%%")) + assert.equal("10", sprintf("%b", 2)) + assert.equal("A", sprintf("%c", 65)) + assert.equal("2", sprintf("%d", 2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("2", sprintf("%d", "2")) + assert.equal("2", sprintf("%i", "2")) + assert.equal('{"foo":"bar"}', sprintf("%j", {foo: "bar"})) + assert.equal('["foo","bar"]', sprintf("%j", ["foo", "bar"])) + assert.equal("2e+0", sprintf("%e", 2)) + assert.equal("2", sprintf("%u", 2)) + assert.equal("4294967294", sprintf("%u", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("3.141592653589793", sprintf("%g", pi)) + assert.equal("10", sprintf("%o", 8)) + assert.equal("%s", sprintf("%s", "%s")) + assert.equal("ff", sprintf("%x", 255)) + assert.equal("FF", sprintf("%X", 255)) + assert.equal("Polly wants a cracker", sprintf("%2$s %3$s a %1$s", "cracker", "Polly", "wants")) + assert.equal("Hello world!", sprintf("Hello %(who)s!", {"who": "world"})) + }) + + it("should return formated strings for complex placeholders", function() { + // sign + assert.equal("2", sprintf("%d", 2)) + assert.equal("-2", sprintf("%d", -2)) + assert.equal("+2", sprintf("%+d", 2)) + assert.equal("-2", sprintf("%+d", -2)) + assert.equal("2", sprintf("%i", 2)) + assert.equal("-2", sprintf("%i", -2)) + assert.equal("+2", sprintf("%+i", 2)) + assert.equal("-2", sprintf("%+i", -2)) + assert.equal("2.2", sprintf("%f", 2.2)) + assert.equal("-2.2", sprintf("%f", -2.2)) + assert.equal("+2.2", sprintf("%+f", 2.2)) + assert.equal("-2.2", sprintf("%+f", -2.2)) + assert.equal("-2.3", sprintf("%+.1f", -2.34)) + assert.equal("-0.0", sprintf("%+.1f", -0.01)) + assert.equal("3.14159", sprintf("%.6g", pi)) + assert.equal("3.14", sprintf("%.3g", pi)) + assert.equal("3", sprintf("%.1g", pi)) + assert.equal("-000000123", sprintf("%+010d", -123)) + assert.equal("______-123", sprintf("%+'_10d", -123)) + assert.equal("-234.34 123.2", sprintf("%f %f", -234.34, 123.2)) + + // padding + assert.equal("-0002", sprintf("%05d", -2)) + assert.equal("-0002", sprintf("%05i", -2)) + assert.equal(" <", sprintf("%5s", "<")) + assert.equal("0000<", sprintf("%05s", "<")) + assert.equal("____<", sprintf("%'_5s", "<")) + assert.equal("> ", sprintf("%-5s", ">")) + assert.equal(">0000", sprintf("%0-5s", ">")) + assert.equal(">____", sprintf("%'_-5s", ">")) + assert.equal("xxxxxx", sprintf("%5s", "xxxxxx")) + assert.equal("1234", sprintf("%02u", 1234)) + assert.equal(" -10.235", sprintf("%8.3f", -10.23456)) + assert.equal("-12.34 xxx", sprintf("%f %s", -12.34, "xxx")) + assert.equal('{\n "foo": "bar"\n}', sprintf("%2j", {foo: "bar"})) + assert.equal('[\n "foo",\n "bar"\n]', sprintf("%2j", ["foo", "bar"])) + + // precision + assert.equal("2.3", sprintf("%.1f", 2.345)) + assert.equal("xxxxx", sprintf("%5.5s", "xxxxxx")) + assert.equal(" x", sprintf("%5.1s", "xxxxxx")) + + }) + + it("should return formated strings for callbacks", function() { + assert.equal("foobar", sprintf("%s", function() { return "foobar" })) + assert.equal(Date.now(), sprintf("%s", Date.now)) // should pass... + }) +}) diff --git a/.pnpm-store/v11/files/87/c444609e844ea5787ad3ca2b1ec24f6efe32977aec9fa705a2eab85fa31257e7681dde8db168ce7a4cd7540ee9a37371c09628a4e5c873cd2368b22d983e2d b/.pnpm-store/v11/files/87/c444609e844ea5787ad3ca2b1ec24f6efe32977aec9fa705a2eab85fa31257e7681dde8db168ce7a4cd7540ee9a37371c09628a4e5c873cd2368b22d983e2d new file mode 100644 index 00000000..b70015b9 --- /dev/null +++ b/.pnpm-store/v11/files/87/c444609e844ea5787ad3ca2b1ec24f6efe32977aec9fa705a2eab85fa31257e7681dde8db168ce7a4cd7540ee9a37371c09628a4e5c873cd2368b22d983e2d @@ -0,0 +1,317 @@ +# fill-range [![NPM version](https://img.shields.io/npm/v/fill-range.svg?style=flat)](https://www.npmjs.com/package/fill-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![NPM total downloads](https://img.shields.io/npm/dt/fill-range.svg?style=flat)](https://npmjs.org/package/fill-range) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/fill-range.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/fill-range) + +> Fill in a range of numbers or letters, optionally passing an increment or multiplier to use. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +- [Install](#install) +- [Usage](#usage) + * [Invalid ranges](#invalid-ranges) + * [Custom function](#custom-function) + * [Special characters](#special-characters) + + [plus](#plus) + + [pipe and tilde](#pipe-and-tilde) + + [angle bracket](#angle-bracket) + + [question mark](#question-mark) +- [About](#about) + +_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save fill-range +``` + +## Usage + +```js +var range = require('fill-range'); + +range('a', 'e'); +//=> ['a', 'b', 'c', 'd', 'e'] +``` + +**Params** + +```js +range(start, stop, step, options, fn); +``` + +* `start`: **{String|Number}** the number or letter to start with +* `end`: **{String|Number}** the number or letter to end with +* `step`: **{String|Number}** optionally pass the step to use. works for letters or numbers. +* `options`: **{Object}**: + - `makeRe`: return a regex-compatible string (still returned as an array for consistency) + - `step`: pass the step on the options as an alternative to passing it as an argument + - `silent`: `true` by default, set to false to throw errors for invalid ranges. +* `fn`: **{Function}** optionally [pass a function](#custom-function) to modify each character + +**Examples** + +```js +range(1, 3) +//=> ['1', '2', '3'] + +range('1', '3') +//=> ['1', '2', '3'] + +range('0', '-5') +//=> [ '0', '-1', '-2', '-3', '-4', '-5' ] + +range(-9, 9, 3) +//=> [ '-9', '-6', '-3', '0', '3', '6', '9' ]) + +range('-1', '-10', '-2') +//=> [ '-1', '-3', '-5', '-7', '-9' ] + +range('1', '10', '2') +//=> [ '1', '3', '5', '7', '9' ] + +range('a', 'e') +//=> ['a', 'b', 'c', 'd', 'e'] + +range('a', 'e', 2) +//=> ['a', 'c', 'e'] + +range('A', 'E', 2) +//=> ['A', 'C', 'E'] +``` + +### Invalid ranges + +When an invalid range is passed, `null` is returned. + +```js +range('1.1', '2'); +//=> null + +range('a', '2'); +//=> null + +range(1, 10, 'foo'); +//=> null +``` + +If you want errors to be throw, pass `silent: false` on the options: + +### Custom function + +Optionally pass a custom function as the third or fourth argument: + +```js +range('a', 'e', function (val, isNumber, pad, i) { + if (!isNumber) { + return String.fromCharCode(val) + i; + } + return val; +}); +//=> ['a0', 'b1', 'c2', 'd3', 'e4'] +``` + +### Special characters + +A special character may be passed as the third arg instead of a step increment. These characters can be pretty useful for brace expansion, creating file paths, test fixtures and similar use case. + +```js +range('a', 'z', SPECIAL_CHARACTER_HERE); +``` + +**Supported characters** + +* `+`: repeat the given string `n` times +* `|`: create a regex-ready string, instead of an array +* `>`: join values to single array element +* `?`: randomize the given pattern using [randomatic] + +#### plus + +Character: _(`+`)_ + +Repeat the first argument the number of times passed on the second argument. + +**Examples:** + +```js +range('a', 3, '+'); +//=> ['a', 'a', 'a'] + +range('abc', 2, '+'); +//=> ['abc', 'abc'] +``` + +#### pipe and tilde + +Characters: _(`|` and `~`)_ + +Creates a regex-capable string (either a logical `or` or a character class) from the expanded arguments. + +**Examples:** + +```js +range('a', 'c', '|'); +//=> ['(a|b|c)' + +range('a', 'c', '~'); +//=> ['[a-c]' + +range('a', 'z', '|5'); +//=> ['(a|f|k|p|u|z)' +``` + +**Automatic separator correction** + +To avoid this error: + +> `Range out of order in character class` + +Fill-range detects invalid sequences and uses the correct syntax. For example: + +**invalid** (regex) + +If you pass these: + +```js +range('a', 'z', '~5'); +// which would result in this +//=> ['[a-f-k-p-u-z]'] + +range('10', '20', '~'); +// which would result in this +//=> ['[10-20]'] +``` + +**valid** (regex) + +fill-range corrects them to this: + +```js +range('a', 'z', '~5'); +//=> ['(a|f|k|p|u|z)' + +range('10', '20', '~'); +//=> ['(10-20)' +``` + +#### angle bracket + +Character: _(`>`)_ + +Joins all values in the returned array to a single value. + +**Examples:** + +```js +range('a', 'e', '>'); +//=> ['abcde'] + +range('5', '8', '>'); +//=> ['5678'] + +range('2', '20', '2>'); +//=> ['2468101214161820'] +``` + +#### question mark + +Character: _(`?`)_ + +Uses [randomatic] to generate randomized alpha, numeric, or alpha-numeric patterns based on the provided arguments. + +**Examples:** + +_(actual results would obviously be randomized)_ + +Generate a 5-character, uppercase, alphabetical string: + +```js +range('A', 5, '?'); +//=> ['NSHAK'] +``` + +Generate a 5-digit random number: + +```js +range('0', 5, '?'); +//=> ['36583'] +``` + +Generate a 10-character alpha-numeric string: + +```js +range('A0', 10, '?'); +//=> ['5YJD60VQNN'] +``` + +See the [randomatic] repo for all available options and or to create issues or feature requests related to randomization. + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.") +* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. Used by [micromatch].") +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 111 | [jonschlinkert](https://github.com/jonschlinkert) | +| 2 | [paulmillr](https://github.com/paulmillr) | +| 1 | [edorivai](https://github.com/edorivai) | +| 1 | [realityking](https://github.com/realityking) | +| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | + +### Author + +**Jon Schlinkert** + +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on May 08, 2018._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/87/e2d7970fa23908c8145a7e268a1c6666b4b1e14ee7c9271f67d3e20798d1916cf2db25cfef3794180936934a26bf2c92025a3a0362924886aa321719023a79 b/.pnpm-store/v11/files/87/e2d7970fa23908c8145a7e268a1c6666b4b1e14ee7c9271f67d3e20798d1916cf2db25cfef3794180936934a26bf2c92025a3a0362924886aa321719023a79 new file mode 100644 index 00000000..e5007c82 --- /dev/null +++ b/.pnpm-store/v11/files/87/e2d7970fa23908c8145a7e268a1c6666b4b1e14ee7c9271f67d3e20798d1916cf2db25cfef3794180936934a26bf2c92025a3a0362924886aa321719023a79 @@ -0,0 +1,36 @@ +{ + "name": "binary-extensions", + "version": "1.13.1", + "description": "List of binary file extensions", + "license": "MIT", + "repository": "sindresorhus/binary-extensions", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "ava" + }, + "main": "binary-extensions.json", + "files": [ + "binary-extensions.json" + ], + "keywords": [ + "bin", + "binary", + "ext", + "extensions", + "extension", + "file", + "json", + "list", + "array" + ], + "devDependencies": { + "ava": "0.16.0" + } +} diff --git a/.pnpm-store/v11/files/87/e9e2752970e936d7d8b832c12b6f752d31cb0e0496bd1f950a68546bdeaae971bf64d6d1ba9d8a5e9d58ac664c82dfc9c7703e3ff4abf3d75aab0f911ad2ff b/.pnpm-store/v11/files/87/e9e2752970e936d7d8b832c12b6f752d31cb0e0496bd1f950a68546bdeaae971bf64d6d1ba9d8a5e9d58ac664c82dfc9c7703e3ff4abf3d75aab0f911ad2ff new file mode 100644 index 00000000..6548c919 --- /dev/null +++ b/.pnpm-store/v11/files/87/e9e2752970e936d7d8b832c12b6f752d31cb0e0496bd1f950a68546bdeaae971bf64d6d1ba9d8a5e9d58ac664c82dfc9c7703e3ff4abf3d75aab0f911ad2ff @@ -0,0 +1,116 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: T, fromIndex?: number): boolean; +} + +interface ReadonlyArray { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: T, fromIndex?: number): boolean; +} + +interface Int8Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint8Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint8ClampedArray { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Int16Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint16Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Int32Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Uint32Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Float32Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} + +interface Float64Array { + /** + * Determines whether an array includes a certain element, returning true or false as appropriate. + * @param searchElement The element to search for. + * @param fromIndex The position in this array at which to begin searching for searchElement. + */ + includes(searchElement: number, fromIndex?: number): boolean; +} diff --git a/.pnpm-store/v11/files/87/fbd3d3d352a58ffa3c2d5a3cd9461b7b69b307befca7ba0c77f76257eb8a4e2f3cb00536fdfa32ef71b5a55d0fc34d93d58dc0c2580eb7b64989f6db2dee00 b/.pnpm-store/v11/files/87/fbd3d3d352a58ffa3c2d5a3cd9461b7b69b307befca7ba0c77f76257eb8a4e2f3cb00536fdfa32ef71b5a55d0fc34d93d58dc0c2580eb7b64989f6db2dee00 new file mode 100644 index 00000000..5cd101fa --- /dev/null +++ b/.pnpm-store/v11/files/87/fbd3d3d352a58ffa3c2d5a3cd9461b7b69b307befca7ba0c77f76257eb8a4e2f3cb00536fdfa32ef71b5a55d0fc34d93d58dc0c2580eb7b64989f6db2dee00 @@ -0,0 +1,8 @@ +var colors = require('../colors'); + +module['exports'] = (function () { + var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta']; + return function(letter, i, exploded) { + return letter === " " ? letter : colors[available[Math.round(Math.random() * (available.length - 1))]](letter); + }; +})(); \ No newline at end of file diff --git a/.pnpm-store/v11/files/88/0e00584e98f0103b1c066a5837e101703003abaea786a9755dc7918344eae09258368b2a4bd5e174361cdd26297ccc2ebda03c16dcae7cfcbfe075ada5cc5e-exec b/.pnpm-store/v11/files/88/0e00584e98f0103b1c066a5837e101703003abaea786a9755dc7918344eae09258368b2a4bd5e174361cdd26297ccc2ebda03c16dcae7cfcbfe075ada5cc5e-exec new file mode 100755 index 00000000..41c8c904 --- /dev/null +++ b/.pnpm-store/v11/files/88/0e00584e98f0103b1c066a5837e101703003abaea786a9755dc7918344eae09258368b2a4bd5e174361cdd26297ccc2ebda03c16dcae7cfcbfe075ada5cc5e-exec @@ -0,0 +1,77 @@ +# array-unique [![NPM version](https://img.shields.io/npm/v/array-unique.svg?style=flat)](https://www.npmjs.com/package/array-unique) [![NPM downloads](https://img.shields.io/npm/dm/array-unique.svg?style=flat)](https://npmjs.org/package/array-unique) [![Build Status](https://img.shields.io/travis/jonschlinkert/array-unique.svg?style=flat)](https://travis-ci.org/jonschlinkert/array-unique) + +Remove duplicate values from an array. Fastest ES5 implementation. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save array-unique +``` + +## Usage + +```js +var unique = require('array-unique'); + +var arr = ['a', 'b', 'c', 'c']; +console.log(unique(arr)) //=> ['a', 'b', 'c'] +console.log(arr) //=> ['a', 'b', 'c'] + +/* The above modifies the input array. To prevent that at a slight performance cost: */ +var unique = require("array-unique").immutable; + +var arr = ['a', 'b', 'c', 'c']; +console.log(unique(arr)) //=> ['a', 'b', 'c'] +console.log(arr) //=> ['a', 'b', 'c', 'c'] +``` + +## About + +### Related projects + +* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://github.com/jonschlinkert/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.") +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") +* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.") +* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck "Retrieves the value of a specified property from all elements in the collection.") +* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce "Fast array reduce that also loops over sparse elements.") +* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/array-unique/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.28, on July 31, 2016._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/88/2a583847306599efa6e9adf6232a3b228da2049cec629cbf94fe5315063de7daecbb71d4e74ce2a4fb17568b7dc9022b15c10e167d4d9252119db8cd818e5e b/.pnpm-store/v11/files/88/2a583847306599efa6e9adf6232a3b228da2049cec629cbf94fe5315063de7daecbb71d4e74ce2a4fb17568b7dc9022b15c10e167d4d9252119db8cd818e5e new file mode 100644 index 00000000..6e5a20d7 --- /dev/null +++ b/.pnpm-store/v11/files/88/2a583847306599efa6e9adf6232a3b228da2049cec629cbf94fe5315063de7daecbb71d4e74ce2a4fb17568b7dc9022b15c10e167d4d9252119db8cd818e5e @@ -0,0 +1,107 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = require('buffer').Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} diff --git a/.pnpm-store/v11/files/88/708fd442a69245104d510c2fe39ca94f8d94e46e08cd85226b20c5261dcec52371be34db83cab86628623745211d3dbd0b1237194378af612e1b5ffc93c962 b/.pnpm-store/v11/files/88/708fd442a69245104d510c2fe39ca94f8d94e46e08cd85226b20c5261dcec52371be34db83cab86628623745211d3dbd0b1237194378af612e1b5ffc93c962 new file mode 100644 index 00000000..048e3ae8 --- /dev/null +++ b/.pnpm-store/v11/files/88/708fd442a69245104d510c2fe39ca94f8d94e46e08cd85226b20c5261dcec52371be34db83cab86628623745211d3dbd0b1237194378af612e1b5ffc93c962 @@ -0,0 +1,72 @@ +{ + "name": "source-map", + "description": "Generates and consumes source maps", + "version": "0.5.7", + "homepage": "https://github.com/mozilla/source-map", + "author": "Nick Fitzgerald ", + "contributors": [ + "Tobias Koppers ", + "Duncan Beevers ", + "Stephen Crane ", + "Ryan Seddon ", + "Miles Elam ", + "Mihai Bazon ", + "Michael Ficarra ", + "Todd Wolfson ", + "Alexander Solovyov ", + "Felix Gnass ", + "Conrad Irwin ", + "usrbincc ", + "David Glasser ", + "Chase Douglas ", + "Evan Wallace ", + "Heather Arthur ", + "Hugh Kennedy ", + "David Glasser ", + "Simon Lydell ", + "Jmeas Smith ", + "Michael Z Goddard ", + "azu ", + "John Gozde ", + "Adam Kirkton ", + "Chris Montgomery ", + "J. Ryan Stinnett ", + "Jack Herrington ", + "Chris Truter ", + "Daniel Espeset ", + "Jamie Wong ", + "Eddy Bruël ", + "Hawken Rives ", + "Gilad Peleg ", + "djchie ", + "Gary Ye ", + "Nicolas Lalevée " + ], + "repository": { + "type": "git", + "url": "http://github.com/mozilla/source-map.git" + }, + "main": "./source-map.js", + "files": [ + "source-map.js", + "lib/", + "dist/source-map.debug.js", + "dist/source-map.js", + "dist/source-map.min.js", + "dist/source-map.min.js.map" + ], + "engines": { + "node": ">=0.10.0" + }, + "license": "BSD-3-Clause", + "scripts": { + "test": "npm run build && node test/run-tests.js", + "build": "webpack --color", + "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" + }, + "devDependencies": { + "doctoc": "^0.15.0", + "webpack": "^1.12.0" + }, + "typings": "source-map" +} diff --git a/.pnpm-store/v11/files/88/72e7fdf9dd8074db07262651eec752b82f3c594a20d5466798d4c2eba284fb4bdc049f4292879cc59c0541ac6bcc6a1de6ea9ef567b0ae6d3eb5434a4fac09 b/.pnpm-store/v11/files/88/72e7fdf9dd8074db07262651eec752b82f3c594a20d5466798d4c2eba284fb4bdc049f4292879cc59c0541ac6bcc6a1de6ea9ef567b0ae6d3eb5434a4fac09 new file mode 100644 index 00000000..cac0248a --- /dev/null +++ b/.pnpm-store/v11/files/88/72e7fdf9dd8074db07262651eec752b82f3c594a20d5466798d4c2eba284fb4bdc049f4292879cc59c0541ac6bcc6a1de6ea9ef567b0ae6d3eb5434a4fac09 @@ -0,0 +1,44 @@ +var baseFindKey = require('./_baseFindKey'), + baseForOwn = require('./_baseForOwn'), + baseIteratee = require('./_baseIteratee'); + +/** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ +function findKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); +} + +module.exports = findKey; diff --git a/.pnpm-store/v11/files/88/8688250cbe478d6d29175033d5d645ba132dbdd51f326e5f4df01122a30017d6fe57b20c978290733550cc80e6245026d29ddf087939b4a7c028a2ba640855 b/.pnpm-store/v11/files/88/8688250cbe478d6d29175033d5d645ba132dbdd51f326e5f4df01122a30017d6fe57b20c978290733550cc80e6245026d29ddf087939b4a7c028a2ba640855 new file mode 100644 index 00000000..c103cc74 --- /dev/null +++ b/.pnpm-store/v11/files/88/8688250cbe478d6d29175033d5d645ba132dbdd51f326e5f4df01122a30017d6fe57b20c978290733550cc80e6245026d29ddf087939b4a7c028a2ba640855 @@ -0,0 +1,38 @@ +var root = require('./_root'), + stubFalse = require('./stubFalse'); + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Built-in value references. */ +var Buffer = moduleExports ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +module.exports = isBuffer; diff --git a/.pnpm-store/v11/files/88/86fe2f208edb5fab50288fc0c5c309b23b2b5078b81729fa2eda67a0663c0f7c4d62093957dfaae9ecce642d5f42e4cceb8ce1aecb38c0a388968f41e274e1 b/.pnpm-store/v11/files/88/86fe2f208edb5fab50288fc0c5c309b23b2b5078b81729fa2eda67a0663c0f7c4d62093957dfaae9ecce642d5f42e4cceb8ce1aecb38c0a388968f41e274e1 new file mode 100644 index 00000000..0f352866 --- /dev/null +++ b/.pnpm-store/v11/files/88/86fe2f208edb5fab50288fc0c5c309b23b2b5078b81729fa2eda67a0663c0f7c4d62093957dfaae9ecce642d5f42e4cceb8ce1aecb38c0a388968f41e274e1 @@ -0,0 +1,22 @@ +# to-array + +Turn an array like into an array + +## Example + +``` js +var toArray = require("to-array") + , elems = document.links + +var array = toArray(elems) +``` + +## Installation + +`npm install to-array` + +## Contributors + + - Raynos + +## MIT Licenced diff --git a/.pnpm-store/v11/files/88/9d22ba50991fbb4dcd1213420d25cb36cb97fe46fe5b1c7c195c3a5eb089b95c52356c0d2ac07b504e14c0acec67523c055e070b111aac482f3d4b53c65dea-exec b/.pnpm-store/v11/files/88/9d22ba50991fbb4dcd1213420d25cb36cb97fe46fe5b1c7c195c3a5eb089b95c52356c0d2ac07b504e14c0acec67523c055e070b111aac482f3d4b53c65dea-exec new file mode 100755 index 00000000..bbe91ad4 --- /dev/null +++ b/.pnpm-store/v11/files/88/9d22ba50991fbb4dcd1213420d25cb36cb97fe46fe5b1c7c195c3a5eb089b95c52356c0d2ac07b504e14c0acec67523c055e070b111aac482f3d4b53c65dea-exec @@ -0,0 +1 @@ +echo 'bar' diff --git a/.pnpm-store/v11/files/88/9e5f077d19d1ccf8fce64928e4553532510389b491efdcae813792c8a7b6a24ae2f9a985d08f1efed14cc5dce9f94988c9cedc71458bbdd9c8241181ea9f7c b/.pnpm-store/v11/files/88/9e5f077d19d1ccf8fce64928e4553532510389b491efdcae813792c8a7b6a24ae2f9a985d08f1efed14cc5dce9f94988c9cedc71458bbdd9c8241181ea9f7c new file mode 100644 index 00000000..e064f400 --- /dev/null +++ b/.pnpm-store/v11/files/88/9e5f077d19d1ccf8fce64928e4553532510389b491efdcae813792c8a7b6a24ae2f9a985d08f1efed14cc5dce9f94988c9cedc71458bbdd9c8241181ea9f7c @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('intersectionWith', require('../intersectionWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/88/ae7f9a14d2eca3857d196efe29a4fe9a7a180ba2cb379d115c82ba6778ff6014c9d2b6540d6625ecff4cfcff8d7204e6a75258b86076efa6c9736f311bc2db b/.pnpm-store/v11/files/88/ae7f9a14d2eca3857d196efe29a4fe9a7a180ba2cb379d115c82ba6778ff6014c9d2b6540d6625ecff4cfcff8d7204e6a75258b86076efa6c9736f311bc2db new file mode 100644 index 00000000..a230a44c --- /dev/null +++ b/.pnpm-store/v11/files/88/ae7f9a14d2eca3857d196efe29a4fe9a7a180ba2cb379d115c82ba6778ff6014c9d2b6540d6625ecff4cfcff8d7204e6a75258b86076efa6c9736f311bc2db @@ -0,0 +1,195 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the following + disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + ***********************************************************************/ + +"use strict"; + +var vlq_char = characters("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"); +var vlq_bits = vlq_char.reduce(function(map, ch, bits) { + map[ch] = bits; + return map; +}, Object.create(null)); + +function vlq_decode(indices, str) { + var value = 0; + var shift = 0; + for (var i = 0, j = 0; i < str.length; i++) { + var bits = vlq_bits[str[i]]; + value += (bits & 31) << shift; + if (bits & 32) { + shift += 5; + } else { + indices[j++] += value & 1 ? 0x80000000 | -(value >> 1) : value >> 1; + value = shift = 0; + } + } + return j; +} + +function vlq_encode(num) { + var result = ""; + num = Math.abs(num) << 1 | num >>> 31; + do { + var bits = num & 31; + if (num >>>= 5) bits |= 32; + result += vlq_char[bits]; + } while (num); + return result; +} + +function create_array_map() { + var map = new Dictionary(); + var array = []; + array.index = function(name) { + var index = map.get(name); + if (!(index >= 0)) { + index = array.length; + array.push(name); + map.set(name, index); + } + return index; + }; + return array; +} + +function SourceMap(options) { + var sources = create_array_map(); + var sources_content = options.includeSources && new Dictionary(); + var names = create_array_map(); + var mappings = ""; + if (options.orig) Object.keys(options.orig).forEach(function(name) { + var map = options.orig[name]; + var indices = [ 0, 0, 1, 0, 0 ]; + options.orig[name] = { + names: map.names, + mappings: map.mappings.split(/;/).map(function(line) { + indices[0] = 0; + return line.split(/,/).map(function(segment) { + return indices.slice(0, vlq_decode(indices, segment)); + }); + }), + sources: map.sources, + }; + if (!sources_content || !map.sourcesContent) return; + for (var i = 0; i < map.sources.length; i++) { + var content = map.sourcesContent[i]; + if (content) sources_content.set(map.sources[i], content); + } + }); + var prev_source; + var generated_line = 1; + var generated_column = 0; + var source_index = 0; + var original_line = 1; + var original_column = 0; + var name_index = 0; + return { + add: options.orig ? function(source, gen_line, gen_col, orig_line, orig_col, name) { + var map = options.orig[source]; + if (map) { + var segments = map.mappings[orig_line - 1]; + if (!segments) return; + var indices; + for (var i = 0; i < segments.length; i++) { + var col = segments[i][0]; + if (orig_col >= col) indices = segments[i]; + if (orig_col <= col) break; + } + if (!indices || indices.length < 4) { + source = null; + } else { + source = map.sources[indices[1]]; + orig_line = indices[2]; + orig_col = indices[3]; + if (indices.length > 4) name = map.names[indices[4]]; + } + } + add(source, gen_line, gen_col, orig_line, orig_col, name); + } : add, + setSourceContent: sources_content ? function(source, content) { + if (!sources_content.has(source)) { + sources_content.set(source, content); + } + } : noop, + toString: function() { + return JSON.stringify({ + version: 3, + file: options.filename || undefined, + sourceRoot: options.root || undefined, + sources: sources, + sourcesContent: sources_content ? sources.map(function(source) { + return sources_content.get(source) || null; + }) : undefined, + names: names, + mappings: mappings, + }); + } + }; + + function add(source, gen_line, gen_col, orig_line, orig_col, name) { + if (prev_source == null && source == null) return; + prev_source = source; + if (generated_line < gen_line) { + generated_column = 0; + do { + mappings += ";"; + } while (++generated_line < gen_line); + } else if (mappings) { + mappings += ","; + } + mappings += vlq_encode(gen_col - generated_column); + generated_column = gen_col; + if (source == null) return; + var src_idx = sources.index(source); + mappings += vlq_encode(src_idx - source_index); + source_index = src_idx; + mappings += vlq_encode(orig_line - original_line); + original_line = orig_line; + mappings += vlq_encode(orig_col - original_column); + original_column = orig_col; + if (options.names && name != null) { + var name_idx = names.index(name); + mappings += vlq_encode(name_idx - name_index); + name_index = name_idx; + } + } +} diff --git a/.pnpm-store/v11/files/88/bb3e956f9dd3ebe06a233b6b3a43dbc1b41f547ddedd2e0d62114aaff4ba93c529eebf97c731043d02860b29e1f5c03aa5121e2e974409c67745b7ede41e4f b/.pnpm-store/v11/files/88/bb3e956f9dd3ebe06a233b6b3a43dbc1b41f547ddedd2e0d62114aaff4ba93c529eebf97c731043d02860b29e1f5c03aa5121e2e974409c67745b7ede41e4f new file mode 100644 index 00000000..54f9a560 --- /dev/null +++ b/.pnpm-store/v11/files/88/bb3e956f9dd3ebe06a233b6b3a43dbc1b41f547ddedd2e0d62114aaff4ba93c529eebf97c731043d02860b29e1f5c03aa5121e2e974409c67745b7ede41e4f @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/88/be40c5e32433e6633463f41e48b4fcd9803c59d6b60173c96fc791a44c77a1589fdea0f7e193d30b715bdf0dd4a61c6b5c3b38b67cd75722cc7d77e5101af2 b/.pnpm-store/v11/files/88/be40c5e32433e6633463f41e48b4fcd9803c59d6b60173c96fc791a44c77a1589fdea0f7e193d30b715bdf0dd4a61c6b5c3b38b67cd75722cc7d77e5101af2 new file mode 100644 index 00000000..5c90ec51 --- /dev/null +++ b/.pnpm-store/v11/files/88/be40c5e32433e6633463f41e48b4fcd9803c59d6b60173c96fc791a44c77a1589fdea0f7e193d30b715bdf0dd4a61c6b5c3b38b67cd75722cc7d77e5101af2 @@ -0,0 +1,18 @@ +var baseClamp = require('./_baseClamp'), + shuffleSelf = require('./_shuffleSelf'), + values = require('./values'); + +/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function baseSampleSize(collection, n) { + var array = values(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); +} + +module.exports = baseSampleSize; diff --git a/.pnpm-store/v11/files/88/e1d15af8ca353a0f9cbab9c8a5992df4874c614988a50a7a89c6fc32935065604990692155f18f1c20f05869e68c6bced711d5d550ab8b777278321df3d27b b/.pnpm-store/v11/files/88/e1d15af8ca353a0f9cbab9c8a5992df4874c614988a50a7a89c6fc32935065604990692155f18f1c20f05869e68c6bced711d5d550ab8b777278321df3d27b new file mode 100644 index 00000000..c5dfe779 --- /dev/null +++ b/.pnpm-store/v11/files/88/e1d15af8ca353a0f9cbab9c8a5992df4874c614988a50a7a89c6fc32935065604990692155f18f1c20f05869e68c6bced711d5d550ab8b777278321df3d27b @@ -0,0 +1 @@ +module.exports = require('./rest'); diff --git a/.pnpm-store/v11/files/88/f25c9f64bdedf79634f76c6d34839f77b6eb5cdaf6a8191f99d163326d46ba5739c77b9f79529e51dd2e8458f93ac0857979c9f1cec3969d7c6a706f81f5be b/.pnpm-store/v11/files/88/f25c9f64bdedf79634f76c6d34839f77b6eb5cdaf6a8191f99d163326d46ba5739c77b9f79529e51dd2e8458f93ac0857979c9f1cec3969d7c6a706f81f5be new file mode 100644 index 00000000..da6671e5 --- /dev/null +++ b/.pnpm-store/v11/files/88/f25c9f64bdedf79634f76c6d34839f77b6eb5cdaf6a8191f99d163326d46ba5739c77b9f79529e51dd2e8458f93ac0857979c9f1cec3969d7c6a706f81f5be @@ -0,0 +1,26 @@ +'use strict'; + +exports.__esModule = true; + +exports['default'] = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); +}; + +module.exports = exports['default']; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19 diff --git a/.pnpm-store/v11/files/89/0a58475d16be5004e50b662235e9b586e3d5b1ce71af7f79f458fbaeec2fec7519594820ee0656191b3333bf0c147970429ff6d94d3d2ef9f8f711fdff8a4c b/.pnpm-store/v11/files/89/0a58475d16be5004e50b662235e9b586e3d5b1ce71af7f79f458fbaeec2fec7519594820ee0656191b3333bf0c147970429ff6d94d3d2ef9f8f711fdff8a4c new file mode 100644 index 00000000..24afd893 --- /dev/null +++ b/.pnpm-store/v11/files/89/0a58475d16be5004e50b662235e9b586e3d5b1ce71af7f79f458fbaeec2fec7519594820ee0656191b3333bf0c147970429ff6d94d3d2ef9f8f711fdff8a4c @@ -0,0 +1,33 @@ +var baseIsEqual = require('./_baseIsEqual'), + get = require('./get'), + hasIn = require('./hasIn'), + isKey = require('./_isKey'), + isStrictComparable = require('./_isStrictComparable'), + matchesStrictComparable = require('./_matchesStrictComparable'), + toKey = require('./_toKey'); + +/** Used to compose bitmasks for value comparisons. */ +var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + +/** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ +function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function(object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; +} + +module.exports = baseMatchesProperty; diff --git a/.pnpm-store/v11/files/89/40894f0567384832f287f5f497c56432aaea36a1a4e11d77543187d7fead7d62c552cad00e7ceaf3c8d205fa50786fa9a6ab403b14f1c6e6354b86d0c86e74 b/.pnpm-store/v11/files/89/40894f0567384832f287f5f497c56432aaea36a1a4e11d77543187d7fead7d62c552cad00e7ceaf3c8d205fa50786fa9a6ab403b14f1c6e6354b86d0c86e74 new file mode 100644 index 00000000..0b03e880 --- /dev/null +++ b/.pnpm-store/v11/files/89/40894f0567384832f287f5f497c56432aaea36a1a4e11d77543187d7fead7d62c552cad00e7ceaf3c8d205fa50786fa9a6ab403b14f1c6e6354b86d0c86e74 @@ -0,0 +1,62 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const assert = require("assert"); +const chai = require('chai'); +const chaiAssert = chai.assert; +const _suman = global.__suman = (global.__suman || {}); +const base_1 = require("../base"); +const suman_constants_1 = require("../../config/suman-constants"); +const general_1 = require("../../helpers/general"); +let badProps = { + inspect: true, + constructor: true +}; +class EachHookParam extends base_1.ParamBase { + constructor(hook, assertCount, handleError, fini, timerObj) { + super(); + this.__planCalled = false; + this.__hook = hook; + this.__handle = handleError; + this.__fini = fini; + this.__assertCount = assertCount; + const v = this.__timerObj = timerObj; + const amount = _suman.weAreDebugging ? 5000000 : hook.timeout; + const fn = this.onTimeout.bind(this); + v.timer = setTimeout(fn, amount); + } + skip() { + (this.__hook).skipped = true; + (this.__hook).dynamicallySkipped = true; + } + onTimeout() { + const v = this.__hook; + v.timedOut = true; + const err = general_1.cloneError(v.warningErr, suman_constants_1.constants.warnings.HOOK_TIMED_OUT_ERROR); + err.isTimeout = true; + this.__handle(err); + } + plan(num) { + if (this.__planCalled) { + _suman.writeTestError(new Error('Suman warning => plan() called more than once.').stack); + return; + } + const hook = this.__hook; + this.__planCalled = true; + if (hook.planCountExpected !== undefined) { + _suman.writeTestError(new Error(' => Suman warning => plan() called, even though plan was already passed as an option.').stack); + } + try { + assert(Number.isInteger(num), 'Suman usage error => value passed to plan() is not an integer.'); + } + catch (err) { + return this.__handle(err); + } + hook.planCountExpected = this.planCountExpected = num; + } + confirm() { + this.__assertCount.num++; + } +} +exports.EachHookParam = EachHookParam; diff --git a/.pnpm-store/v11/files/89/53aef1f203e0ee1e92772fa03beb51e9656cd9afc1cba2875ce8dd9adaaccf382f1f3c3cc489e74a72223d1975237d15a476584d79c211f8650367bf4074b0 b/.pnpm-store/v11/files/89/53aef1f203e0ee1e92772fa03beb51e9656cd9afc1cba2875ce8dd9adaaccf382f1f3c3cc489e74a72223d1975237d15a476584d79c211f8650367bf4074b0 new file mode 100644 index 00000000..c3e96efc --- /dev/null +++ b/.pnpm-store/v11/files/89/53aef1f203e0ee1e92772fa03beb51e9656cd9afc1cba2875ce8dd9adaaccf382f1f3c3cc489e74a72223d1975237d15a476584d79c211f8650367bf4074b0 @@ -0,0 +1 @@ +export declare const handleRequestResponseWithRunner: (data: any[]) => (cb: Function) => any; diff --git a/.pnpm-store/v11/files/89/78b5fba87b412db8c78e8f7adac56dfe11f264fa1e81337a0b50778ab05a6c504d3fe46dee8eb8299b023e68a1376d377b75600e9494c6ad249158555d8b12 b/.pnpm-store/v11/files/89/78b5fba87b412db8c78e8f7adac56dfe11f264fa1e81337a0b50778ab05a6c504d3fe46dee8eb8299b023e68a1376d377b75600e9494c6ad249158555d8b12 new file mode 100644 index 00000000..fa9e00a0 --- /dev/null +++ b/.pnpm-store/v11/files/89/78b5fba87b412db8c78e8f7adac56dfe11f264fa1e81337a0b50778ab05a6c504d3fe46dee8eb8299b023e68a1376d377b75600e9494c6ad249158555d8b12 @@ -0,0 +1,20 @@ +var baseSum = require('./_baseSum'); + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** + * The base implementation of `_.mean` and `_.meanBy` without support for + * iteratee shorthands. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {number} Returns the mean. + */ +function baseMean(array, iteratee) { + var length = array == null ? 0 : array.length; + return length ? (baseSum(array, iteratee) / length) : NAN; +} + +module.exports = baseMean; diff --git a/.pnpm-store/v11/files/89/d1982cd1747181313bae9dbba572b229046b8909e888160795e15d9ff0bd421d243fe7695424887524ab064568c5eff9b419bd5e89bf205e35596555bd08c4 b/.pnpm-store/v11/files/89/d1982cd1747181313bae9dbba572b229046b8909e888160795e15d9ff0bd421d243fe7695424887524ab064568c5eff9b419bd5e89bf205e35596555bd08c4 new file mode 100644 index 00000000..53f4ad13 --- /dev/null +++ b/.pnpm-store/v11/files/89/d1982cd1747181313bae9dbba572b229046b8909e888160795e15d9ff0bd421d243fe7695424887524ab064568c5eff9b419bd5e89bf205e35596555bd08c4 @@ -0,0 +1 @@ +module.exports = require('./head'); diff --git a/.pnpm-store/v11/files/89/edaaa873b74d425bd0c396860517811eb16321cddcb36ec24067d3795da7281797d80e30ec16a7a5deb831a735e1a75350756496b6726777fc8387bcd307e8 b/.pnpm-store/v11/files/89/edaaa873b74d425bd0c396860517811eb16321cddcb36ec24067d3795da7281797d80e30ec16a7a5deb831a735e1a75350756496b6726777fc8387bcd307e8 new file mode 100644 index 00000000..c8682be4 --- /dev/null +++ b/.pnpm-store/v11/files/89/edaaa873b74d425bd0c396860517811eb16321cddcb36ec24067d3795da7281797d80e30ec16a7a5deb831a735e1a75350756496b6726777fc8387bcd307e8 @@ -0,0 +1,21 @@ + +1.0.0 / 2017-07-06 +================== + + * update "mocha" to v3 + * fixed unicode URI decoding (#6) + * add typings for Typescript + * README: use SVG Travis-CI badge + * add LICENSE file (MIT) + * add .travis.yml file (testing Node.js 0.8 through 8 currently) + * add README.md file + +0.0.2 / 2014-01-27 +================== + + * index: invert the path separators on Windows + +0.0.1 / 2014-01-27 +================== + + * initial commit diff --git a/.pnpm-store/v11/files/89/fa44c9235c863e2d2d57ff62634b5308a8cc03d4a33964b9e1e2bea327cf69645dd21f121c67f759d3bd97e80046043aa68d49eeaad54969dbf7b3157625f4 b/.pnpm-store/v11/files/89/fa44c9235c863e2d2d57ff62634b5308a8cc03d4a33964b9e1e2bea327cf69645dd21f121c67f759d3bd97e80046043aa68d49eeaad54969dbf7b3157625f4 new file mode 100644 index 00000000..b890983b --- /dev/null +++ b/.pnpm-store/v11/files/89/fa44c9235c863e2d2d57ff62634b5308a8cc03d4a33964b9e1e2bea327cf69645dd21f121c67f759d3bd97e80046043aa68d49eeaad54969dbf7b3157625f4 @@ -0,0 +1,35 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface PromiseWithResolvers { + promise: Promise; + resolve: (value: T | PromiseLike) => void; + reject: (reason?: any) => void; +} + +interface PromiseConstructor { + /** + * Creates a new Promise and returns it in an object, along with its resolve and reject functions. + * @returns An object with the properties `promise`, `resolve`, and `reject`. + * + * ```ts + * const { promise, resolve, reject } = Promise.withResolvers(); + * ``` + */ + withResolvers(): PromiseWithResolvers; +} diff --git a/.pnpm-store/v11/files/8a/98da914c12113efd1eff62dc8c92bd822ca7aa63ec09e21fe699d13a5bd2769260a261e907dbc20747403143654f0549e4cb873173265d1a05f99f118aba99 b/.pnpm-store/v11/files/8a/98da914c12113efd1eff62dc8c92bd822ca7aa63ec09e21fe699d13a5bd2769260a261e907dbc20747403143654f0549e4cb873173265d1a05f99f118aba99 new file mode 100644 index 00000000..d061123e --- /dev/null +++ b/.pnpm-store/v11/files/8a/98da914c12113efd1eff62dc8c92bd822ca7aa63ec09e21fe699d13a5bd2769260a261e907dbc20747403143654f0549e4cb873173265d1a05f99f118aba99 @@ -0,0 +1,25 @@ +{ + "name": "color-name", + "version": "1.1.3", + "description": "A list of color names and its values", + "main": "index.js", + "scripts": { + "test": "node test.js" + }, + "repository": { + "type": "git", + "url": "git@github.com:dfcreative/color-name.git" + }, + "keywords": [ + "color-name", + "color", + "color-keyword", + "keyword" + ], + "author": "DY ", + "license": "MIT", + "bugs": { + "url": "https://github.com/dfcreative/color-name/issues" + }, + "homepage": "https://github.com/dfcreative/color-name" +} diff --git a/.pnpm-store/v11/files/8a/bfd1f76626663cea4dc6fefd6399e3f51f9814c93546b34ca6e25fc704a86fd913b2b433348e13258494270d28e8b937e8a793531d00c4e95446eb4150e0e8 b/.pnpm-store/v11/files/8a/bfd1f76626663cea4dc6fefd6399e3f51f9814c93546b34ca6e25fc704a86fd913b2b433348e13258494270d28e8b937e8a793531d00c4e95446eb4150e0e8 new file mode 100644 index 00000000..24d00e7d --- /dev/null +++ b/.pnpm-store/v11/files/8a/bfd1f76626663cea4dc6fefd6399e3f51f9814c93546b34ca6e25fc704a86fd913b2b433348e13258494270d28e8b937e8a793531d00c4e95446eb4150e0e8 @@ -0,0 +1,133 @@ +# regex-not [![NPM version](https://img.shields.io/npm/v/regex-not.svg?style=flat)](https://www.npmjs.com/package/regex-not) [![NPM monthly downloads](https://img.shields.io/npm/dm/regex-not.svg?style=flat)](https://npmjs.org/package/regex-not) [![NPM total downloads](https://img.shields.io/npm/dt/regex-not.svg?style=flat)](https://npmjs.org/package/regex-not) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/regex-not.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/regex-not) + +> Create a javascript regular expression for matching everything except for the given string. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save regex-not +``` + +## Usage + +```js +var not = require('regex-not'); +``` + +The main export is a function that takes a string an options object. + +```js +not(string[, options]); +``` + +**Example** + +```js +var not = require('regex-not'); +console.log(not('foo')); +//=> /^(?:(?!^(?:foo)$).)+$/ +``` + +**Strict matching** + +By default, the returned regex is for strictly (not) matching the exact given pattern (in other words, "match this string if it does NOT _exactly equal_ `foo`"): + +```js +var re = not('foo'); +console.log(re.test('foo')); //=> false +console.log(re.test('bar')); //=> true +console.log(re.test('foobar')); //=> true +console.log(re.test('barfoo')); //=> true +``` + +### .create + +Returns a string to allow you to create your own regex: + +```js +console.log(not.create('foo')); +//=> '(?:(?!^(?:foo)$).)+' +``` + +### Options + +**options.contains** + +You can relax strict matching by setting `options.contains` to true (in other words, "match this string if it does NOT _contain_ `foo`"): + +```js +var re = not('foo'); +console.log(re.test('foo', {contains: true})); //=> false +console.log(re.test('bar', {contains: true})); //=> true +console.log(re.test('foobar', {contains: true})); //=> false +console.log(re.test('barfoo', {contains: true})); //=> false +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [regex-cache](https://www.npmjs.com/package/regex-cache): Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of… [more](https://github.com/jonschlinkert/regex-cache) | [homepage](https://github.com/jonschlinkert/regex-cache "Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in surprising performance improvements.") +* [to-regex](https://www.npmjs.com/package/to-regex): Generate a regex from a string or array of strings. | [homepage](https://github.com/jonschlinkert/to-regex "Generate a regex from a string or array of strings.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 9 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [doowb](https://github.com/doowb) | +| 1 | [EdwardBetts](https://github.com/EdwardBetts) | + +### Author + +**Jon Schlinkert** + +* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on February 19, 2018._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/8a/e52a0fa160c1648001d012e09c8042b6174c48a42095648023c53ea91a6128895a0c13c317676fdb57b962617e8650f27777992537300edf3bbcb777df4558 b/.pnpm-store/v11/files/8a/e52a0fa160c1648001d012e09c8042b6174c48a42095648023c53ea91a6128895a0c13c317676fdb57b962617e8650f27777992537300edf3bbcb777df4558 new file mode 100644 index 00000000..93dbde15 --- /dev/null +++ b/.pnpm-store/v11/files/8a/e52a0fa160c1648001d012e09c8042b6174c48a42095648023c53ea91a6128895a0c13c317676fdb57b962617e8650f27777992537300edf3bbcb777df4558 @@ -0,0 +1,39 @@ +var castPath = require('./_castPath'), + isArguments = require('./isArguments'), + isArray = require('./isArray'), + isIndex = require('./_isIndex'), + isLength = require('./isLength'), + toKey = require('./_toKey'); + +/** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ +function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); +} + +module.exports = hasPath; diff --git a/.pnpm-store/v11/files/8a/fe672e808f74f172819490dcf6021756426cf79b4a47f0561af042cc137163989015524af9819806319af440da1ae4691f1feb2dba7cc71e2d8e4ce4fe6c14 b/.pnpm-store/v11/files/8a/fe672e808f74f172819490dcf6021756426cf79b4a47f0561af042cc137163989015524af9819806319af440da1ae4691f1feb2dba7cc71e2d8e4ce4fe6c14 new file mode 100644 index 00000000..dfa799b7 --- /dev/null +++ b/.pnpm-store/v11/files/8a/fe672e808f74f172819490dcf6021756426cf79b4a47f0561af042cc137163989015524af9819806319af440da1ae4691f1feb2dba7cc71e2d8e4ce4fe6c14 @@ -0,0 +1,129 @@ +var toString = Object.prototype.toString; + +module.exports = function kindOf(val) { + if (val === void 0) return 'undefined'; + if (val === null) return 'null'; + + var type = typeof val; + if (type === 'boolean') return 'boolean'; + if (type === 'string') return 'string'; + if (type === 'number') return 'number'; + if (type === 'symbol') return 'symbol'; + if (type === 'function') { + return isGeneratorFn(val) ? 'generatorfunction' : 'function'; + } + + if (isArray(val)) return 'array'; + if (isBuffer(val)) return 'buffer'; + if (isArguments(val)) return 'arguments'; + if (isDate(val)) return 'date'; + if (isError(val)) return 'error'; + if (isRegexp(val)) return 'regexp'; + + switch (ctorName(val)) { + case 'Symbol': return 'symbol'; + case 'Promise': return 'promise'; + + // Set, Map, WeakSet, WeakMap + case 'WeakMap': return 'weakmap'; + case 'WeakSet': return 'weakset'; + case 'Map': return 'map'; + case 'Set': return 'set'; + + // 8-bit typed arrays + case 'Int8Array': return 'int8array'; + case 'Uint8Array': return 'uint8array'; + case 'Uint8ClampedArray': return 'uint8clampedarray'; + + // 16-bit typed arrays + case 'Int16Array': return 'int16array'; + case 'Uint16Array': return 'uint16array'; + + // 32-bit typed arrays + case 'Int32Array': return 'int32array'; + case 'Uint32Array': return 'uint32array'; + case 'Float32Array': return 'float32array'; + case 'Float64Array': return 'float64array'; + } + + if (isGeneratorObj(val)) { + return 'generator'; + } + + // Non-plain objects + type = toString.call(val); + switch (type) { + case '[object Object]': return 'object'; + // iterators + case '[object Map Iterator]': return 'mapiterator'; + case '[object Set Iterator]': return 'setiterator'; + case '[object String Iterator]': return 'stringiterator'; + case '[object Array Iterator]': return 'arrayiterator'; + } + + // other + return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); +}; + +function ctorName(val) { + return typeof val.constructor === 'function' ? val.constructor.name : null; +} + +function isArray(val) { + if (Array.isArray) return Array.isArray(val); + return val instanceof Array; +} + +function isError(val) { + return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'); +} + +function isDate(val) { + if (val instanceof Date) return true; + return typeof val.toDateString === 'function' + && typeof val.getDate === 'function' + && typeof val.setDate === 'function'; +} + +function isRegexp(val) { + if (val instanceof RegExp) return true; + return typeof val.flags === 'string' + && typeof val.ignoreCase === 'boolean' + && typeof val.multiline === 'boolean' + && typeof val.global === 'boolean'; +} + +function isGeneratorFn(name, val) { + return ctorName(name) === 'GeneratorFunction'; +} + +function isGeneratorObj(val) { + return typeof val.throw === 'function' + && typeof val.return === 'function' + && typeof val.next === 'function'; +} + +function isArguments(val) { + try { + if (typeof val.length === 'number' && typeof val.callee === 'function') { + return true; + } + } catch (err) { + if (err.message.indexOf('callee') !== -1) { + return true; + } + } + return false; +} + +/** + * If you need to support Safari 5-7 (8-10 yr-old browser), + * take a look at https://github.com/feross/is-buffer + */ + +function isBuffer(val) { + if (val.constructor && typeof val.constructor.isBuffer === 'function') { + return val.constructor.isBuffer(val); + } + return false; +} diff --git a/.pnpm-store/v11/files/8b/104a8c84e0d9289048a412a37f31739328a1bc245c3c864af2c363b58be542d96a79e401f1095465d5ed96160e72c16a3e162e69082234a78299e98a42a40f b/.pnpm-store/v11/files/8b/104a8c84e0d9289048a412a37f31739328a1bc245c3c864af2c363b58be542d96a79e401f1095465d5ed96160e72c16a3e162e69082234a78299e98a42a40f new file mode 100644 index 00000000..a92c2616 --- /dev/null +++ b/.pnpm-store/v11/files/8b/104a8c84e0d9289048a412a37f31739328a1bc245c3c864af2c363b58be542d96a79e401f1095465d5ed96160e72c16a3e162e69082234a78299e98a42a40f @@ -0,0 +1 @@ +export declare const run: (projectRoot: string) => void; diff --git a/.pnpm-store/v11/files/8b/153b65025ce5dc5bf8f772d9d63859797d60cfa865ceb26017e261ec7cf40615a4799a0bc4f05afbe2bd06c1f01f5b84246668b7b861e8d2f8b3246aeae181 b/.pnpm-store/v11/files/8b/153b65025ce5dc5bf8f772d9d63859797d60cfa865ceb26017e261ec7cf40615a4799a0bc4f05afbe2bd06c1f01f5b84246668b7b861e8d2f8b3246aeae181 new file mode 100644 index 00000000..43e91d8d --- /dev/null +++ b/.pnpm-store/v11/files/8b/153b65025ce5dc5bf8f772d9d63859797d60cfa865ceb26017e261ec7cf40615a4799a0bc4f05afbe2bd06c1f01f5b84246668b7b861e8d2f8b3246aeae181 @@ -0,0 +1,134 @@ +{ + "name": "handlebars", + "barename": "handlebars", + "version": "4.7.9", + "description": "Handlebars provides the power necessary to let you build semantic templates effectively with no frustration", + "homepage": "https://handlebarsjs.com/", + "keywords": [ + "handlebars", + "mustache", + "template", + "html" + ], + "repository": { + "type": "git", + "url": "https://github.com/handlebars-lang/handlebars.js.git" + }, + "author": "Yehuda Katz", + "license": "MIT", + "readmeFilename": "README.md", + "engines": { + "node": ">=0.4.7" + }, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + }, + "devDependencies": { + "@playwright/test": "1.44.1", + "aws-sdk": "^2.1.49", + "babel-loader": "^5.0.0", + "babel-runtime": "^5.1.10", + "benchmark": "~1.0", + "chai": "^4.2.0", + "chai-diff": "^1.0.1", + "concurrently": "^5.0.0", + "dirty-chai": "^2.0.1", + "dustjs-linkedin": "^2.0.2", + "eco": "~1.1.0-rc-3", + "eslint": "^6.7.2", + "eslint-config-prettier": "^6.7.0", + "eslint-plugin-compat": "^3.13.0", + "eslint-plugin-es5": "^1.4.1", + "fs-extra": "^8.1.0", + "grunt": "1.5.3", + "grunt-babel": "^5.0.0", + "grunt-cli": "^1", + "grunt-contrib-clean": "^1", + "grunt-contrib-concat": "^1", + "grunt-contrib-connect": "^1", + "grunt-contrib-copy": "^1", + "grunt-contrib-requirejs": "^1", + "grunt-contrib-uglify": "^1", + "grunt-contrib-watch": "^1.1.0", + "grunt-shell": "^4.0.0", + "grunt-webpack": "^1.0.8", + "husky": "^3.1.0", + "jison": "~0.3.0", + "lint-staged": "^9.5.0", + "mocha": "^5", + "mock-stdin": "^0.3.0", + "mustache": "^2.1.3", + "nyc": "^14.1.1", + "prettier": "^1.19.1", + "semver": "^5.0.1", + "sinon": "^7.5.0", + "typescript": "^3.4.3", + "underscore": "^1.5.1", + "webpack": "^1.12.6", + "webpack-dev-server": "^1.12.1" + }, + "main": "lib/index.js", + "types": "types/index.d.ts", + "browser": "./dist/cjs/handlebars.js", + "bin": { + "handlebars": "bin/handlebars" + }, + "scripts": { + "build": "grunt build", + "release": "npm run build && grunt release", + "format": "prettier --write '**/*.js' && eslint --fix .", + "lint": "npm run lint:eslint && npm run lint:prettier && npm run lint:types", + "lint:eslint": "eslint --max-warnings 0 .", + "lint:prettier": "prettier --check '**/*.js'", + "lint:types": "tsc --noEmit --project types", + "test": "npm run test:mocha", + "test:mocha": "grunt build && grunt test", + "test:browser": "playwright test --config tests/browser/playwright.config.js tests/browser/spec.js", + "test:integration": "grunt integration-tests", + "test:serve": "grunt connect:server:keepalive", + "extensive-tests-and-publish-to-aws": "npx mocha tasks/tests/ && grunt --stack extensive-tests-and-publish-to-aws", + "--- combined tasks ---": "", + "check-before-pull-request": "concurrently --kill-others-on-fail npm:lint npm:test" + }, + "jspm": { + "main": "handlebars", + "directories": { + "lib": "dist/amd" + }, + "buildConfig": { + "minify": true + } + }, + "files": [ + "bin", + "dist/*.js", + "dist/amd/**/*.js", + "dist/cjs/**/*.js", + "lib", + "release-notes.md", + "runtime.js", + "types/*.d.ts", + "runtime.d.ts" + ], + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,css,json}": [ + "prettier --write", + "git add" + ], + "*.js": [ + "eslint --fix", + "git add" + ] + } +} diff --git a/.pnpm-store/v11/files/8b/21ba4a8b42126e7bbce7a5168b02bb1a8903e830f9cd73939a300f1b00de9b3d95c03ab9c75ff8e2a147da0c59c76d5b14fdc1f20fa6c64059631ec56ea248 b/.pnpm-store/v11/files/8b/21ba4a8b42126e7bbce7a5168b02bb1a8903e830f9cd73939a300f1b00de9b3d95c03ab9c75ff8e2a147da0c59c76d5b14fdc1f20fa6c64059631ec56ea248 new file mode 100644 index 00000000..74da3234 --- /dev/null +++ b/.pnpm-store/v11/files/8b/21ba4a8b42126e7bbce7a5168b02bb1a8903e830f9cd73939a300f1b00de9b3d95c03ab9c75ff8e2a147da0c59c76d5b14fdc1f20fa6c64059631ec56ea248 @@ -0,0 +1,121 @@ +# minimist [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +parse argument options + +This module is the guts of optimist's argument parser without all the +fanciful decoration. + +# example + +``` js +var argv = require('minimist')(process.argv.slice(2)); +console.log(argv); +``` + +``` +$ node example/parse.js -a beep -b boop +{ _: [], a: 'beep', b: 'boop' } +``` + +``` +$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz +{ + _: ['foo', 'bar', 'baz'], + x: 3, + y: 4, + n: 5, + a: true, + b: true, + c: true, + beep: 'boop' +} +``` + +# security + +Previous versions had a prototype pollution bug that could cause privilege +escalation in some circumstances when handling untrusted user input. + +Please use version 1.2.6 or later: + +* https://security.snyk.io/vuln/SNYK-JS-MINIMIST-2429795 (version <=1.2.5) +* https://snyk.io/vuln/SNYK-JS-MINIMIST-559764 (version <=1.2.3) + +# methods + +``` js +var parseArgs = require('minimist') +``` + +## var argv = parseArgs(args, opts={}) + +Return an argument object `argv` populated with the array arguments from `args`. + +`argv._` contains all the arguments that didn't have an option associated with +them. + +Numeric-looking arguments will be returned as numbers unless `opts.string` or +`opts.boolean` is set for that argument name. + +Any arguments after `'--'` will not be parsed and will end up in `argv._`. + +options can be: + +* `opts.string` - a string or array of strings argument names to always treat as +strings +* `opts.boolean` - a boolean, string or array of strings to always treat as +booleans. if `true` will treat all double hyphenated arguments without equal signs +as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) +* `opts.alias` - an object mapping string names to strings or arrays of string +argument names to use as aliases +* `opts.default` - an object mapping string argument names to default values +* `opts.stopEarly` - when true, populate `argv._` with everything after the +first non-option +* `opts['--']` - when true, populate `argv._` with everything before the `--` +and `argv['--']` with everything after the `--`. Here's an example: + + ``` + > require('./')('one two three -- four five --six'.split(' '), { '--': true }) + { + _: ['one', 'two', 'three'], + '--': ['four', 'five', '--six'] + } + ``` + + Note that with `opts['--']` set, parsing for arguments still stops after the + `--`. + +* `opts.unknown` - a function which is invoked with a command line parameter not +defined in the `opts` configuration object. If the function returns `false`, the +unknown option is not added to `argv`. + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/minimist +[npm-version-svg]: https://versionbadg.es/minimistjs/minimist.svg +[npm-badge-png]: https://nodei.co/npm/minimist.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/minimist.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/minimist.svg +[downloads-url]: https://npm-stat.com/charts.html?package=minimist +[codecov-image]: https://codecov.io/gh/minimistjs/minimist/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/minimistjs/minimist/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/minimistjs/minimist +[actions-url]: https://github.com/minimistjs/minimist/actions diff --git a/.pnpm-store/v11/files/8b/2d85280f94dc283d4cde731fea7a3f27695bf1289c773bb8710acd508a410d185ebd9b7803fbbf753a97d0b73c0977bdf2020eb14f5c7d9b5bcde6208ecce5-exec b/.pnpm-store/v11/files/8b/2d85280f94dc283d4cde731fea7a3f27695bf1289c773bb8710acd508a410d185ebd9b7803fbbf753a97d0b73c0977bdf2020eb14f5c7d9b5bcde6208ecce5-exec new file mode 100755 index 00000000..9d1a59bd --- /dev/null +++ b/.pnpm-store/v11/files/8b/2d85280f94dc283d4cde731fea7a3f27695bf1289c773bb8710acd508a410d185ebd9b7803fbbf753a97d0b73c0977bdf2020eb14f5c7d9b5bcde6208ecce5-exec @@ -0,0 +1,61 @@ +declare module "trace_events" { + /** + * The `Tracing` object is used to enable or disable tracing for sets of + * categories. Instances are created using the + * `trace_events.createTracing()` method. + * + * When created, the `Tracing` object is disabled. Calling the + * `tracing.enable()` method adds the categories to the set of enabled trace + * event categories. Calling `tracing.disable()` will remove the categories + * from the set of enabled trace event categories. + */ + export interface Tracing { + /** + * A comma-separated list of the trace event categories covered by this + * `Tracing` object. + */ + readonly categories: string; + + /** + * Disables this `Tracing` object. + * + * Only trace event categories _not_ covered by other enabled `Tracing` + * objects and _not_ specified by the `--trace-event-categories` flag + * will be disabled. + */ + disable(): void; + + /** + * Enables this `Tracing` object for the set of categories covered by + * the `Tracing` object. + */ + enable(): void; + + /** + * `true` only if the `Tracing` object has been enabled. + */ + readonly enabled: boolean; + } + + interface CreateTracingOptions { + /** + * An array of trace category names. Values included in the array are + * coerced to a string when possible. An error will be thrown if the + * value cannot be coerced. + */ + categories: string[]; + } + + /** + * Creates and returns a Tracing object for the given set of categories. + */ + export function createTracing(options: CreateTracingOptions): Tracing; + + /** + * Returns a comma-separated list of all currently-enabled trace event + * categories. The current set of enabled trace event categories is + * determined by the union of all currently-enabled `Tracing` objects and + * any categories enabled using the `--trace-event-categories` flag. + */ + export function getEnabledCategories(): string; +} diff --git a/.pnpm-store/v11/files/8b/5ab447c7df2ceffcb8d0e46bdabaf4dd6929c8eb32cc69b51f97843e4d668291ca2126e7e7d3ce684dd543423afc819c943481aa80db2951bd224879f2c2ee b/.pnpm-store/v11/files/8b/5ab447c7df2ceffcb8d0e46bdabaf4dd6929c8eb32cc69b51f97843e4d668291ca2126e7e7d3ce684dd543423afc819c943481aa80db2951bd224879f2c2ee new file mode 100644 index 00000000..fe3a7e04 --- /dev/null +++ b/.pnpm-store/v11/files/8b/5ab447c7df2ceffcb8d0e46bdabaf4dd6929c8eb32cc69b51f97843e4d668291ca2126e7e7d3ce684dd543423afc819c943481aa80db2951bd224879f2c2ee @@ -0,0 +1,138 @@ +cmake_minimum_required(VERSION 3.5) +project(nan) + +set(CMAKE_CXX_STANDARD 11) + +set(CPPLINT "${CMAKE_CURRENT_SOURCE_DIR}/cpplint.py") +set(MODULES symbols strings) +set(SOURCES "") +set(ADDONS "") + +foreach(MODULE ${MODULES}) + list(APPEND SOURCES "test/cpp/${MODULE}.cpp") + list(APPEND ADDONS "test/build/${CMAKE_BUILD_TYPE}/${MODULE}.node") +endforeach() + +set(LINT_SOURCES examples/async_pi_estimate/addon.cc + examples/async_pi_estimate/async.cc + examples/async_pi_estimate/async.h + examples/async_pi_estimate/pi_est.cc + examples/async_pi_estimate/pi_est.h + examples/async_pi_estimate/sync.cc + examples/async_pi_estimate/sync.h + nan.h + nan_callbacks.h + nan_callbacks_12_inl.h + nan_callbacks_pre_12_inl.h + nan_converters.h + nan_converters_43_inl.h + nan_converters_pre_43_inl.h + nan_define_own_property_helper.h + nan_implementation_12_inl.h + nan_implementation_pre_12_inl.h + nan_json.h + nan_maybe_43_inl.h + nan_maybe_pre_43_inl.h + nan_new.h + nan_object_wrap.h + nan_persistent_12_inl.h + nan_persistent_pre_12_inl.h + nan_private.h + nan_scriptorigin.h + nan_string_bytes.h + nan_weak.h + test/cpp/accessors.cpp + test/cpp/accessors2.cpp + test/cpp/asyncresource.cpp + test/cpp/asyncworker.cpp + test/cpp/asyncprogressworker.cpp + test/cpp/asyncprogressworkerstream.cpp + test/cpp/asyncprogressworkersignal.cpp + test/cpp/asyncprogressqueueworker.cpp + test/cpp/asyncprogressqueueworkerstream.cpp + test/cpp/asyncworkererror.cpp + test/cpp/buffer.cpp + test/cpp/bufferworkerpersistent.cpp + test/cpp/error.cpp + test/cpp/gc.cpp + test/cpp/indexedinterceptors.cpp + test/cpp/callbackcontext.cpp + test/cpp/converters.cpp + test/cpp/isolatedata.cpp + test/cpp/json-parse.cpp + test/cpp/json-stringify.cpp + test/cpp/makecallback.cpp + test/cpp/maybe.cpp + test/cpp/morenews.cpp + test/cpp/multifile1.cpp + test/cpp/multifile2.cpp + test/cpp/multifile2.h + test/cpp/namedinterceptors.cpp + test/cpp/nancallback.cpp + test/cpp/nannew.cpp + test/cpp/news.cpp + test/cpp/objectwraphandle.cpp + test/cpp/persistent.cpp + test/cpp/private.cpp + test/cpp/returnemptystring.cpp + test/cpp/returnnull.cpp + test/cpp/returnundefined.cpp + test/cpp/returnvalue.cpp + test/cpp/setcallhandler.cpp + test/cpp/settemplate.cpp + test/cpp/sleep.h + test/cpp/strings.cpp + test/cpp/symbols.cpp + test/cpp/threadlocal.cpp + test/cpp/trycatch.cpp + test/cpp/typedarrays.cpp + test/cpp/weak.cpp + test/cpp/weak2.cpp + test/cpp/wrappedobjectfactory.cpp + node_modules/node-gyp/gyp/data/win/large-pdb-shim.cc) + +set(FILTER "-build/include_subdir,-whitespace/parens") + +find_package(Python COMPONENTS Interpreter Development REQUIRED) + +execute_process( + COMMAND npm install + OUTPUT_FILE node_modules + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target(lint + COMMAND ${Python_EXECUTABLE} ${CPPLINT} --filter=${FILTER} ${LINT_SOURCES} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +add_custom_target(test + DEPENDS ${ADDONS} + COMMAND npm test +) + +add_custom_target(forcetest + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test + COMMAND ../node_modules/.bin/node-gyp rebuild + COMMAND npm test +) + +add_custom_target(docs + DEPENDS README.md doc/.build.sh doc/asyncworker.md doc/buffers.md doc/callback.md + doc/converters.md doc/errors.md doc/maybe_types.md doc/methods.md doc/new.md + doc/node_misc.md doc/persistent.md doc/scopes.md doc/script.md doc/string_bytes.md + doc/v8_internals.md doc/json.md doc/v8_misc.md + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + COMMAND doc/.build.sh +) + +add_custom_command(OUTPUT ${ADDONS} + DEPENDS ${SOURCES} nan.h nan_new.h nan_implementation_pre_12_inl.h nan_implementation_12_inl.h + nan_callbacks.h nan_callbacks_12_inl.h nan_callbacks_pre_12_inl.h nan_converters.h + nan_converters_43_inl.h nan_converters_pre_43_inl.h nan_define_own_property_helper.h + nan_json.h nan_maybe_43_inl.h nan_maybe_pre_43_inl.h nan_persistent_12_inl.h + nan_persistent_pre_12_inl.h nan_private.h nan_weak.h nan_scriptorigin.h nan_string_bytes.h + test/binding.gyp + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test + COMMAND ../node_modules/.bin/node-gyp rebuild +) \ No newline at end of file diff --git a/.pnpm-store/v11/files/8b/6127f20974dbd60f354d12adcd8899e9ec556046548b7f6c15817e54327f027ee9fe7980df37596375fcd39cdf467e35cdc131f57b2a57692ed9bc040894e0 b/.pnpm-store/v11/files/8b/6127f20974dbd60f354d12adcd8899e9ec556046548b7f6c15817e54327f027ee9fe7980df37596375fcd39cdf467e35cdc131f57b2a57692ed9bc040894e0 new file mode 100644 index 00000000..9773a18c --- /dev/null +++ b/.pnpm-store/v11/files/8b/6127f20974dbd60f354d12adcd8899e9ec556046548b7f6c15817e54327f027ee9fe7980df37596375fcd39cdf467e35cdc131f57b2a57692ed9bc040894e0 @@ -0,0 +1,36 @@ +var baseIsMatch = require('./_baseIsMatch'), + getMatchData = require('./_getMatchData'); + +/** + * Performs a partial deep comparison between `object` and `source` to + * determine if `object` contains equivalent property values. + * + * **Note:** This method is equivalent to `_.matches` when `source` is + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.isMatch(object, { 'b': 2 }); + * // => true + * + * _.isMatch(object, { 'b': 1 }); + * // => false + */ +function isMatch(object, source) { + return object === source || baseIsMatch(object, source, getMatchData(source)); +} + +module.exports = isMatch; diff --git a/.pnpm-store/v11/files/8b/6ae89e7530d25c687139f1bfa27c5c70ae57141e3d5c28ae455ff09378caff3539c672dea95b7e4363d1a473709efe18b1c48c6c3dd0489f62b240feecca75-exec b/.pnpm-store/v11/files/8b/6ae89e7530d25c687139f1bfa27c5c70ae57141e3d5c28ae455ff09378caff3539c672dea95b7e4363d1a473709efe18b1c48c6c3dd0489f62b240feecca75-exec new file mode 100755 index 00000000..b4777bd2 --- /dev/null +++ b/.pnpm-store/v11/files/8b/6ae89e7530d25c687139f1bfa27c5c70ae57141e3d5c28ae455ff09378caff3539c672dea95b7e4363d1a473709efe18b1c48c6c3dd0489f62b240feecca75-exec @@ -0,0 +1,169 @@ +declare module "perf_hooks" { + import { AsyncResource } from "async_hooks"; + + interface PerformanceEntry { + /** + * The total number of milliseconds elapsed for this entry. + * This value will not be meaningful for all Performance Entry types. + */ + readonly duration: number; + + /** + * The name of the performance entry. + */ + readonly name: string; + + /** + * The high resolution millisecond timestamp marking the starting time of the Performance Entry. + */ + readonly startTime: number; + + /** + * The type of the performance entry. + * Currently it may be one of: 'node', 'mark', 'measure', 'gc', or 'function'. + */ + readonly entryType: string; + + /** + * When performanceEntry.entryType is equal to 'gc', the performance.kind property identifies + * the type of garbage collection operation that occurred. + * The value may be one of perf_hooks.constants. + */ + readonly kind?: number; + } + + interface PerformanceNodeTiming extends PerformanceEntry { + /** + * The high resolution millisecond timestamp at which the Node.js process completed bootstrap. + * If bootstrapping has not yet finished, the property has the value of -1. + */ + readonly bootstrapComplete: number; + + /** + * The high resolution millisecond timestamp at which the Node.js event loop exited. + * If the event loop has not yet exited, the property has the value of -1. + * It can only have a value of not -1 in a handler of the 'exit' event. + */ + readonly loopExit: number; + + /** + * The high resolution millisecond timestamp at which the Node.js event loop started. + * If the event loop has not yet started (e.g., in the first tick of the main script), the property has the value of -1. + */ + readonly loopStart: number; + + /** + * The high resolution millisecond timestamp at which the Node.js process was initialized. + */ + readonly nodeStart: number; + + /** + * The high resolution millisecond timestamp at which the V8 platform was initialized. + */ + readonly v8Start: number; + } + + interface Performance { + /** + * If name is not provided, removes all PerformanceMark objects from the Performance Timeline. + * If name is provided, removes only the named mark. + * @param name + */ + clearMarks(name?: string): void; + + /** + * Creates a new PerformanceMark entry in the Performance Timeline. + * A PerformanceMark is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'mark', + * and whose performanceEntry.duration is always 0. + * Performance marks are used to mark specific significant moments in the Performance Timeline. + * @param name + */ + mark(name?: string): void; + + /** + * Creates a new PerformanceMeasure entry in the Performance Timeline. + * A PerformanceMeasure is a subclass of PerformanceEntry whose performanceEntry.entryType is always 'measure', + * and whose performanceEntry.duration measures the number of milliseconds elapsed since startMark and endMark. + * + * The startMark argument may identify any existing PerformanceMark in the the Performance Timeline, or may identify + * any of the timestamp properties provided by the PerformanceNodeTiming class. If the named startMark does not exist, + * then startMark is set to timeOrigin by default. + * + * The endMark argument must identify any existing PerformanceMark in the the Performance Timeline or any of the timestamp + * properties provided by the PerformanceNodeTiming class. If the named endMark does not exist, an error will be thrown. + * @param name + * @param startMark + * @param endMark + */ + measure(name: string, startMark: string, endMark: string): void; + + /** + * An instance of the PerformanceNodeTiming class that provides performance metrics for specific Node.js operational milestones. + */ + readonly nodeTiming: PerformanceNodeTiming; + + /** + * @return the current high resolution millisecond timestamp + */ + now(): number; + + /** + * The timeOrigin specifies the high resolution millisecond timestamp from which all performance metric durations are measured. + */ + readonly timeOrigin: number; + + /** + * Wraps a function within a new function that measures the running time of the wrapped function. + * A PerformanceObserver must be subscribed to the 'function' event type in order for the timing details to be accessed. + * @param fn + */ + timerify any>(fn: T): T; + } + + interface PerformanceObserverEntryList { + /** + * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime. + */ + getEntries(): PerformanceEntry[]; + + /** + * @return a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime + * whose performanceEntry.name is equal to name, and optionally, whose performanceEntry.entryType is equal to type. + */ + getEntriesByName(name: string, type?: string): PerformanceEntry[]; + + /** + * @return Returns a list of PerformanceEntry objects in chronological order with respect to performanceEntry.startTime + * whose performanceEntry.entryType is equal to type. + */ + getEntriesByType(type: string): PerformanceEntry[]; + } + + type PerformanceObserverCallback = (list: PerformanceObserverEntryList, observer: PerformanceObserver) => void; + + class PerformanceObserver extends AsyncResource { + constructor(callback: PerformanceObserverCallback); + + /** + * Disconnects the PerformanceObserver instance from all notifications. + */ + disconnect(): void; + + /** + * Subscribes the PerformanceObserver instance to notifications of new PerformanceEntry instances identified by options.entryTypes. + * When options.buffered is false, the callback will be invoked once for every PerformanceEntry instance. + * Property buffered defaults to false. + * @param options + */ + observe(options: { entryTypes: ReadonlyArray, buffered?: boolean }): void; + } + + namespace constants { + const NODE_PERFORMANCE_GC_MAJOR: number; + const NODE_PERFORMANCE_GC_MINOR: number; + const NODE_PERFORMANCE_GC_INCREMENTAL: number; + const NODE_PERFORMANCE_GC_WEAKCB: number; + } + + const performance: Performance; +} diff --git a/.pnpm-store/v11/files/8b/725fae70a2cc8293f88dbee7c50f038a6cee68b0099f9eb45f65bbca086c8faf17d8157968749f9959101c2fcb4154ef221a5123d5837e11874aa33142d82f b/.pnpm-store/v11/files/8b/725fae70a2cc8293f88dbee7c50f038a6cee68b0099f9eb45f65bbca086c8faf17d8157968749f9959101c2fcb4154ef221a5123d5837e11874aa33142d82f new file mode 100644 index 00000000..157d1cd3 --- /dev/null +++ b/.pnpm-store/v11/files/8b/725fae70a2cc8293f88dbee7c50f038a6cee68b0099f9eb45f65bbca086c8faf17d8157968749f9959101c2fcb4154ef221a5123d5837e11874aa33142d82f @@ -0,0 +1,25 @@ +var baseUniq = require('./_baseUniq'); + +/** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ +function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; +} + +module.exports = uniq; diff --git a/.pnpm-store/v11/files/8b/7286dad45a1109e037eecd9897fe614146d2437ac7f65121f1e4c627fa23a13e3dfee2797fc4e8d4a461865482c7b0cb702ee04b84b79d909300d8681338ed b/.pnpm-store/v11/files/8b/7286dad45a1109e037eecd9897fe614146d2437ac7f65121f1e4c627fa23a13e3dfee2797fc4e8d4a461865482c7b0cb702ee04b84b79d909300d8681338ed new file mode 100644 index 00000000..e5e91053 --- /dev/null +++ b/.pnpm-store/v11/files/8b/7286dad45a1109e037eecd9897fe614146d2437ac7f65121f1e4c627fa23a13e3dfee2797fc4e8d4a461865482c7b0cb702ee04b84b79d909300d8681338ed @@ -0,0 +1,83 @@ +{ + "name": "extend-shallow", + "description": "Extend an object with the properties of additional objects. node.js/javascript util.", + "version": "3.0.2", + "homepage": "https://github.com/jonschlinkert/extend-shallow", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Peter deHaan (http://about.me/peterdehaan)" + ], + "repository": "jonschlinkert/extend-shallow", + "bugs": { + "url": "https://github.com/jonschlinkert/extend-shallow/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "devDependencies": { + "array-slice": "^1.0.0", + "benchmarked": "^2.0.0", + "for-own": "^1.0.0", + "gulp-format-md": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.1", + "minimist": "^1.2.0", + "mocha": "^3.5.3", + "object-assign": "^4.1.1" + }, + "keywords": [ + "assign", + "clone", + "extend", + "merge", + "obj", + "object", + "object-assign", + "object.assign", + "prop", + "properties", + "property", + "props", + "shallow", + "util", + "utility", + "utils", + "value" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "related": { + "list": [ + "extend-shallow", + "for-in", + "for-own", + "is-plain-object", + "isobject", + "kind-of" + ] + }, + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/8b/7f8f09a2194d6515121d1b3d50a6505a405eb3f705fb2b169506600ea1f84541f1d6f587f7c08cd609f543ff87255c68bda1ff69ae362582a7057117cabe48 b/.pnpm-store/v11/files/8b/7f8f09a2194d6515121d1b3d50a6505a405eb3f705fb2b169506600ea1f84541f1d6f587f7c08cd609f543ff87255c68bda1ff69ae362582a7057117cabe48 new file mode 100644 index 00000000..b4eb0874 --- /dev/null +++ b/.pnpm-store/v11/files/8b/7f8f09a2194d6515121d1b3d50a6505a405eb3f705fb2b169506600ea1f84541f1d6f587f7c08cd609f543ff87255c68bda1ff69ae362582a7057117cabe48 @@ -0,0 +1,3233 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var sourceRelative = sourceFile; + if (sourceRoot !== null) { + sourceRelative = util.relative(sourceRoot, sourceFile); + } + + if (!generator._sources.has(sourceRelative)) { + generator._sources.add(sourceRelative); + } + + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || urlRegexp.test(aPath); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 === null) { + return 1; // aStr2 !== null + } + + if (aStr2 === null) { + return -1; // aStr1 !== null + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + /** + * Strip any JSON XSSI avoidance prefix from the string (as documented + * in the source maps specification), and then parse the string as + * JSON. + */ + function parseSourceMapInput(str) { + return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, '')); + } + exports.parseSourceMapInput = parseSourceMapInput; + + /** + * Compute the URL of a source given the the source root, the source's + * URL, and the source map's URL. + */ + function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) { + sourceURL = sourceURL || ''; + + if (sourceRoot) { + // This follows what Chrome does. + if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') { + sourceRoot += '/'; + } + // The spec says: + // Line 4: An optional source root, useful for relocating source + // files on a server or removing repeated values in the + // “sources” entry. This value is prepended to the individual + // entries in the “source” field. + sourceURL = sourceRoot + sourceURL; + } + + // Historically, SourceMapConsumer did not take the sourceMapURL as + // a parameter. This mode is still somewhat supported, which is why + // this code block is conditional. However, it's preferable to pass + // the source map URL to SourceMapConsumer, so that this function + // can implement the source URL resolution algorithm as outlined in + // the spec. This block is basically the equivalent of: + // new URL(sourceURL, sourceMapURL).toString() + // ... except it avoids using URL, which wasn't available in the + // older releases of node still supported by this library. + // + // The spec says: + // If the sources are not absolute URLs after prepending of the + // “sourceRoot”, the sources are resolved relative to the + // SourceMap (like resolving script src in a html document). + if (sourceMapURL) { + var parsed = urlParse(sourceMapURL); + if (!parsed) { + throw new Error("sourceMapURL could not be parsed"); + } + if (parsed.path) { + // Strip the last path component, but keep the "/". + var index = parsed.path.lastIndexOf('/'); + if (index >= 0) { + parsed.path = parsed.path.substring(0, index + 1); + } + } + sourceURL = join(urlGenerate(parsed), sourceURL); + } + + return normalize(sourceURL); + } + exports.computeSourceURL = computeSourceURL; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL) + : new BasicSourceMapConsumer(sourceMap, aSourceMapURL); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + configurable: true, + enumerable: true, + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL); + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number is 1-based. + * - column: Optional. the column number in the original source. + * The column number is 0-based. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + needle.source = this._findSourceIndex(needle.source); + if (needle.source < 0) { + return []; + } + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The first parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + if (sourceRoot) { + sourceRoot = util.normalize(sourceRoot); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this._absoluteSources = this._sources.toArray().map(function (s) { + return util.computeSourceURL(sourceRoot, s, aSourceMapURL); + }); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this._sourceMapURL = aSourceMapURL; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Utility function to find the index of a source. Returns -1 if not + * found. + */ + BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) { + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + if (this._sources.has(relativeSource)) { + return this._sources.indexOf(relativeSource); + } + + // Maybe aSource is an absolute URL as returned by |sources|. In + // this case we can't simply undo the transform. + var i; + for (i = 0; i < this._absoluteSources.length; ++i) { + if (this._absoluteSources[i] == aSource) { + return i; + } + } + + return -1; + }; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @param String aSourceMapURL + * The URL at which the source map can be found (optional) + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + smc._sourceMapURL = aSourceMapURL; + smc._absoluteSources = smc._sources.toArray().map(function (s) { + return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL); + }); + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._absoluteSources.slice(); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL); + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + var index = this._findSourceIndex(aSource); + if (index >= 0) { + return this.sourcesContent[index]; + } + + var relativeSource = aSource; + if (this.sourceRoot != null) { + relativeSource = util.relative(this.sourceRoot, relativeSource); + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = relativeSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + relativeSource)) { + return this.sourcesContent[this._sources.indexOf("/" + relativeSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + relativeSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + source = this._findSourceIndex(source); + if (source < 0) { + return { + line: null, + column: null, + lastColumn: null + }; + } + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The first parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * The second parameter, if given, is a string whose value is the URL + * at which the source map was found. This URL is used to compute the + * sources array. + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = util.parseSourceMapInput(aSourceMap); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. The line number + * is 1-based. + * - column: The column number in the generated source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. The + * line number is 1-based. + * - column: The column number in the original source, or null. The + * column number is 0-based. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. The line number + * is 1-based. + * - column: The column number in the original source. The column + * number is 0-based. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. The + * line number is 1-based. + * - column: The column number in the generated source, or null. + * The column number is 0-based. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL); + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = null; + if (mapping.name) { + name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + } + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex] || ''; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex] || ''; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/.pnpm-store/v11/files/8b/a0d3ee7ab6654e55379924c5a2f745ce71d2d914a26da9ea218e5462a621211bf63ad583f86d57355feb19f1b4da8f9327db8927cd39088949a138e36ae39c b/.pnpm-store/v11/files/8b/a0d3ee7ab6654e55379924c5a2f745ce71d2d914a26da9ea218e5462a621211bf63ad583f86d57355feb19f1b4da8f9327db8927cd39088949a138e36ae39c new file mode 100644 index 00000000..eaeec33a --- /dev/null +++ b/.pnpm-store/v11/files/8b/a0d3ee7ab6654e55379924c5a2f745ce71d2d914a26da9ea218e5462a621211bf63ad583f86d57355feb19f1b4da8f9327db8927cd39088949a138e36ae39c @@ -0,0 +1,43 @@ +'use strict'; + +exports.__esModule = true; +// istanbul ignore next + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + +var _utils = require('../utils'); + +var _exception = require('../exception'); + +var _exception2 = _interopRequireDefault(_exception); + +exports['default'] = function (instance) { + instance.registerHelper('with', function (context, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#with requires exactly one argument'); + } + if (_utils.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!_utils.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: _utils.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); +}; + +module.exports = exports['default']; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= diff --git a/.pnpm-store/v11/files/8b/d048a6ee77d3898b6b9efdc0141dfb81d9209c020d105cf68567e315cdc2319c30b86ff0900e0b2516a0bed7964e8871c548c02b9debe43a2f926b7c675df1 b/.pnpm-store/v11/files/8b/d048a6ee77d3898b6b9efdc0141dfb81d9209c020d105cf68567e315cdc2319c30b86ff0900e0b2516a0bed7964e8871c548c02b9debe43a2f926b7c675df1 new file mode 100644 index 00000000..b8a93ebf --- /dev/null +++ b/.pnpm-store/v11/files/8b/d048a6ee77d3898b6b9efdc0141dfb81d9209c020d105cf68567e315cdc2319c30b86ff0900e0b2516a0bed7964e8871c548c02b9debe43a2f926b7c675df1 @@ -0,0 +1,32 @@ +var baseConformsTo = require('./_baseConformsTo'), + keys = require('./keys'); + +/** + * Checks if `object` conforms to `source` by invoking the predicate + * properties of `source` with the corresponding property values of `object`. + * + * **Note:** This method is equivalent to `_.conforms` when `source` is + * partially applied. + * + * @static + * @memberOf _ + * @since 4.14.0 + * @category Lang + * @param {Object} object The object to inspect. + * @param {Object} source The object of property predicates to conform to. + * @returns {boolean} Returns `true` if `object` conforms, else `false`. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * + * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); + * // => true + * + * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); + * // => false + */ +function conformsTo(object, source) { + return source == null || baseConformsTo(object, source, keys(source)); +} + +module.exports = conformsTo; diff --git a/.pnpm-store/v11/files/8b/da630c7c654a651ad45fdabea84f994802f6a088005e5b68ce98d58ce75b57a210d0634bf39df2a94863453071ffd96931d8cef5b5e2d926c537ea2caf0f41 b/.pnpm-store/v11/files/8b/da630c7c654a651ad45fdabea84f994802f6a088005e5b68ce98d58ce75b57a210d0634bf39df2a94863453071ffd96931d8cef5b5e2d926c537ea2caf0f41 new file mode 100644 index 00000000..65441f6e --- /dev/null +++ b/.pnpm-store/v11/files/8b/da630c7c654a651ad45fdabea84f994802f6a088005e5b68ce98d58ce75b57a210d0634bf39df2a94863453071ffd96931d8cef5b5e2d926c537ea2caf0f41 @@ -0,0 +1,70 @@ +{ + "name": "union-value", + "description": "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.", + "version": "1.0.1", + "homepage": "https://github.com/jonschlinkert/union-value", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/union-value", + "bugs": { + "url": "https://github.com/jonschlinkert/union-value/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "devDependencies": { + "gulp-format-md": "^0.1.11", + "mocha": "^3.2.0", + "should": "^11.2.0" + }, + "keywords": [ + "array", + "dot", + "get", + "has", + "nested", + "notation", + "object", + "path", + "prop", + "property", + "set", + "union", + "value" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "assign-value", + "get-value", + "has-value", + "set-value", + "unset-value" + ] + }, + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/8b/eeec35eb0b4f8ff18ec43db284aa25a024ed42c842e7b53708042d2584611f276876b65f5fd7b606a80619c2f20567cb2451a28ed5de3d4bc48b1422d2dcfd b/.pnpm-store/v11/files/8b/eeec35eb0b4f8ff18ec43db284aa25a024ed42c842e7b53708042d2584611f276876b65f5fd7b606a80619c2f20567cb2451a28ed5de3d4bc48b1422d2dcfd new file mode 100644 index 00000000..00a22c2a --- /dev/null +++ b/.pnpm-store/v11/files/8b/eeec35eb0b4f8ff18ec43db284aa25a024ed42c842e7b53708042d2584611f276876b65f5fd7b606a80619c2f20567cb2451a28ed5de3d4bc48b1422d2dcfd @@ -0,0 +1,25 @@ +import { ITimerObj } from "suman-types/dts/general"; +import { ITestDataObj } from 'suman-types/dts/it'; +import { IHandleError } from 'suman-types/dts/test-suite'; +import { ITestCaseParam } from 'suman-types/dts/params'; +import { ParamBase } from '../base'; +export interface IAssertCount { + num: number; +} +export declare class TestCaseParam extends ParamBase implements ITestCaseParam { + protected __planCalled: boolean; + protected __assertCount: IAssertCount; + protected planCountExpected: number; + protected value: Object; + protected data: Object; + protected testId: number; + protected desc: string; + protected title: string; + protected __test: ITestDataObj; + constructor(test: ITestDataObj, assertCount: IAssertCount, handleError: IHandleError, fini: Function, timerObj: ITimerObj); + skip(): void; + onTimeout(): void; + __inheritedSupply(target: any, prop: PropertyKey, value: any, receiver: any): boolean; + plan(num: number): void; + confirm(): void; +} diff --git a/.pnpm-store/v11/files/8b/f70ee9dc22bb40ac36ca90f4c9b0f3a3fb299cc269520c281856c6ed4b0ad027457481e6d9e01964ffa95cae8ee28932985fb64633ed3241c85895a68268a6 b/.pnpm-store/v11/files/8b/f70ee9dc22bb40ac36ca90f4c9b0f3a3fb299cc269520c281856c6ed4b0ad027457481e6d9e01964ffa95cae8ee28932985fb64633ed3241c85895a68268a6 new file mode 100644 index 00000000..0e151c39 --- /dev/null +++ b/.pnpm-store/v11/files/8b/f70ee9dc22bb40ac36ca90f4c9b0f3a3fb299cc269520c281856c6ed4b0ad027457481e6d9e01964ffa95cae8ee28932985fb64633ed3241c85895a68268a6 @@ -0,0 +1,282 @@ +var util = require('./util'); +var types = require('./types'); +var sets = require('./sets'); +var positions = require('./positions'); + + +module.exports = function(regexpStr) { + var i = 0, l, c, + start = { type: types.ROOT, stack: []}, + + // Keep track of last clause/group and stack. + lastGroup = start, + last = start.stack, + groupStack = []; + + + var repeatErr = function(i) { + util.error(regexpStr, 'Nothing to repeat at column ' + (i - 1)); + }; + + // Decode a few escaped characters. + var str = util.strToChars(regexpStr); + l = str.length; + + // Iterate through each character in string. + while (i < l) { + c = str[i++]; + + switch (c) { + // Handle escaped characters, inclues a few sets. + case '\\': + c = str[i++]; + + switch (c) { + case 'b': + last.push(positions.wordBoundary()); + break; + + case 'B': + last.push(positions.nonWordBoundary()); + break; + + case 'w': + last.push(sets.words()); + break; + + case 'W': + last.push(sets.notWords()); + break; + + case 'd': + last.push(sets.ints()); + break; + + case 'D': + last.push(sets.notInts()); + break; + + case 's': + last.push(sets.whitespace()); + break; + + case 'S': + last.push(sets.notWhitespace()); + break; + + default: + // Check if c is integer. + // In which case it's a reference. + if (/\d/.test(c)) { + last.push({ type: types.REFERENCE, value: parseInt(c, 10) }); + + // Escaped character. + } else { + last.push({ type: types.CHAR, value: c.charCodeAt(0) }); + } + } + + break; + + + // Positionals. + case '^': + last.push(positions.begin()); + break; + + case '$': + last.push(positions.end()); + break; + + + // Handle custom sets. + case '[': + // Check if this class is 'anti' i.e. [^abc]. + var not; + if (str[i] === '^') { + not = true; + i++; + } else { + not = false; + } + + // Get all the characters in class. + var classTokens = util.tokenizeClass(str.slice(i), regexpStr); + + // Increase index by length of class. + i += classTokens[1]; + last.push({ + type: types.SET, + set: classTokens[0], + not: not, + }); + + break; + + + // Class of any character except \n. + case '.': + last.push(sets.anyChar()); + break; + + + // Push group onto stack. + case '(': + // Create group. + var group = { + type: types.GROUP, + stack: [], + remember: true, + }; + + c = str[i]; + + // If if this is a special kind of group. + if (c === '?') { + c = str[i + 1]; + i += 2; + + // Match if followed by. + if (c === '=') { + group.followedBy = true; + + // Match if not followed by. + } else if (c === '!') { + group.notFollowedBy = true; + + } else if (c !== ':') { + util.error(regexpStr, + 'Invalid group, character \'' + c + + '\' after \'?\' at column ' + (i - 1)); + } + + group.remember = false; + } + + // Insert subgroup into current group stack. + last.push(group); + + // Remember the current group for when the group closes. + groupStack.push(lastGroup); + + // Make this new group the current group. + lastGroup = group; + last = group.stack; + break; + + + // Pop group out of stack. + case ')': + if (groupStack.length === 0) { + util.error(regexpStr, 'Unmatched ) at column ' + (i - 1)); + } + lastGroup = groupStack.pop(); + + // Check if this group has a PIPE. + // To get back the correct last stack. + last = lastGroup.options ? + lastGroup.options[lastGroup.options.length - 1] : lastGroup.stack; + break; + + + // Use pipe character to give more choices. + case '|': + // Create array where options are if this is the first PIPE + // in this clause. + if (!lastGroup.options) { + lastGroup.options = [lastGroup.stack]; + delete lastGroup.stack; + } + + // Create a new stack and add to options for rest of clause. + var stack = []; + lastGroup.options.push(stack); + last = stack; + break; + + + // Repetition. + // For every repetition, remove last element from last stack + // then insert back a RANGE object. + // This design is chosen because there could be more than + // one repetition symbols in a regex i.e. `a?+{2,3}`. + case '{': + var rs = /^(\d+)(,(\d+)?)?\}/.exec(str.slice(i)), min, max; + if (rs !== null) { + if (last.length === 0) { + repeatErr(i); + } + min = parseInt(rs[1], 10); + max = rs[2] ? rs[3] ? parseInt(rs[3], 10) : Infinity : min; + i += rs[0].length; + + last.push({ + type: types.REPETITION, + min: min, + max: max, + value: last.pop(), + }); + } else { + last.push({ + type: types.CHAR, + value: 123, + }); + } + break; + + case '?': + if (last.length === 0) { + repeatErr(i); + } + last.push({ + type: types.REPETITION, + min: 0, + max: 1, + value: last.pop(), + }); + break; + + case '+': + if (last.length === 0) { + repeatErr(i); + } + last.push({ + type: types.REPETITION, + min: 1, + max: Infinity, + value: last.pop(), + }); + break; + + case '*': + if (last.length === 0) { + repeatErr(i); + } + last.push({ + type: types.REPETITION, + min: 0, + max: Infinity, + value: last.pop(), + }); + break; + + + // Default is a character that is not `\[](){}?+*^$`. + default: + last.push({ + type: types.CHAR, + value: c.charCodeAt(0), + }); + } + + } + + // Check if any groups have not been closed. + if (groupStack.length !== 0) { + util.error(regexpStr, 'Unterminated group'); + } + + return start; +}; + +module.exports.types = types; diff --git a/.pnpm-store/v11/files/8c/1a92da1419c8104927660e905990ff7099c48e757c826e8782aa5b8fa1c33f06c38da96fa0010936040f417055eb4c98b96ac9f64f75cdf65e56b0e52e4f97 b/.pnpm-store/v11/files/8c/1a92da1419c8104927660e905990ff7099c48e757c826e8782aa5b8fa1c33f06c38da96fa0010936040f417055eb4c98b96ac9f64f75cdf65e56b0e52e4f97 new file mode 100644 index 00000000..d20861b5 --- /dev/null +++ b/.pnpm-store/v11/files/8c/1a92da1419c8104927660e905990ff7099c48e757c826e8782aa5b8fa1c33f06c38da96fa0010936040f417055eb4c98b96ac9f64f75cdf65e56b0e52e4f97 @@ -0,0 +1,41 @@ +## Converters + +NAN contains functions that convert `v8::Value`s to other `v8::Value` types and native types. Since type conversion is not guaranteed to succeed, they return `Nan::Maybe` types. These converters can be used in place of `value->ToX()` and `value->XValue()` (where `X` is one of the types, e.g. `Boolean`) in a way that provides a consistent interface across V8 versions. Newer versions of V8 use the new `v8::Maybe` and `v8::MaybeLocal` types for these conversions, older versions don't have this functionality so it is provided by NAN. + + - Nan::To() + + +### Nan::To() + +Converts a `v8::Local` to a different subtype of `v8::Value` or to a native data type. Returns a `Nan::MaybeLocal<>` or a `Nan::Maybe<>` accordingly. + +See [maybe_types.md](./maybe_types.md) for more information on `Nan::Maybe` types. + +Signatures: + +```c++ +// V8 types +Nan::MaybeLocal Nan::To(v8::Local val); +Nan::MaybeLocal Nan::To(v8::Local val); +Nan::MaybeLocal Nan::To(v8::Local val); +Nan::MaybeLocal Nan::To(v8::Local val); +Nan::MaybeLocal Nan::To(v8::Local val); +Nan::MaybeLocal Nan::To(v8::Local val); +Nan::MaybeLocal Nan::To(v8::Local val); + +// Native types +Nan::Maybe Nan::To(v8::Local val); +Nan::Maybe Nan::To(v8::Local val); +Nan::Maybe Nan::To(v8::Local val); +Nan::Maybe Nan::To(v8::Local val); +Nan::Maybe Nan::To(v8::Local val); +``` + +### Example + +```c++ +v8::Local val; +Nan::MaybeLocal str = Nan::To(val); +Nan::Maybe d = Nan::To(val); +``` + diff --git a/.pnpm-store/v11/files/8c/21c520d982a55babfc499e34c690d96e99363a92a700bbed13332415eea7a3d57b6f076db2b71816e7733022bc37101a8d4f30560deeab9af260edc976828e b/.pnpm-store/v11/files/8c/21c520d982a55babfc499e34c690d96e99363a92a700bbed13332415eea7a3d57b6f076db2b71816e7733022bc37101a8d4f30560deeab9af260edc976828e new file mode 100644 index 00000000..3e2797d9 --- /dev/null +++ b/.pnpm-store/v11/files/8c/21c520d982a55babfc499e34c690d96e99363a92a700bbed13332415eea7a3d57b6f076db2b71816e7733022bc37101a8d4f30560deeab9af260edc976828e @@ -0,0 +1,19 @@ +var trimmedEndIndex = require('./_trimmedEndIndex'); + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +module.exports = baseTrim; diff --git a/.pnpm-store/v11/files/8c/23c6285a9a897cb2fe1028501e4d1061a9a168a869aa00e7f84a91a0e30d79e62449cb2e0996fc6ea3d17ea11681318790bff5d8382413f599feea3da80439 b/.pnpm-store/v11/files/8c/23c6285a9a897cb2fe1028501e4d1061a9a168a869aa00e7f84a91a0e30d79e62449cb2e0996fc6ea3d17ea11681318790bff5d8382413f599feea3da80439 new file mode 100644 index 00000000..b96d5075 --- /dev/null +++ b/.pnpm-store/v11/files/8c/23c6285a9a897cb2fe1028501e4d1061a9a168a869aa00e7f84a91a0e30d79e62449cb2e0996fc6ea3d17ea11681318790bff5d8382413f599feea3da80439 @@ -0,0 +1,5 @@ +export = isExtendable; + +declare function isExtendable(val: any): boolean; + +declare namespace isExtendable {} diff --git a/.pnpm-store/v11/files/8c/324f889ba27c4f8b5e9cfbfcff0698d9e52b4ea321ffca2523fc40fd857fc71130c5ae0042c98bfff5444319acb6cbeb58d181dcb6e39f553e2c40b839351e b/.pnpm-store/v11/files/8c/324f889ba27c4f8b5e9cfbfcff0698d9e52b4ea321ffca2523fc40fd857fc71130c5ae0042c98bfff5444319acb6cbeb58d181dcb6e39f553e2c40b839351e new file mode 100644 index 00000000..87b1898e --- /dev/null +++ b/.pnpm-store/v11/files/8c/324f889ba27c4f8b5e9cfbfcff0698d9e52b4ea321ffca2523fc40fd857fc71130c5ae0042c98bfff5444319acb6cbeb58d181dcb6e39f553e2c40b839351e @@ -0,0 +1,53 @@ +var baseIteratee = require('./_baseIteratee'), + basePullAt = require('./_basePullAt'); + +/** + * Removes all elements from `array` that `predicate` returns truthy for + * and returns an array of the removed elements. The predicate is invoked + * with three arguments: (value, index, array). + * + * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` + * to pull elements from an array by value. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to modify. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new array of removed elements. + * @example + * + * var array = [1, 2, 3, 4]; + * var evens = _.remove(array, function(n) { + * return n % 2 == 0; + * }); + * + * console.log(array); + * // => [1, 3] + * + * console.log(evens); + * // => [2, 4] + */ +function remove(array, predicate) { + var result = []; + if (!(array && array.length)) { + return result; + } + var index = -1, + indexes = [], + length = array.length; + + predicate = baseIteratee(predicate, 3); + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result.push(value); + indexes.push(index); + } + } + basePullAt(array, indexes); + return result; +} + +module.exports = remove; diff --git a/.pnpm-store/v11/files/8c/34483b20afd92fc17c51a6df6227e5dca5b4d8eeed0989dd34371951cb87d323f7bcbf59b9cbc602ae521a8495c18553652189600e9735396a9ad62893d3d1 b/.pnpm-store/v11/files/8c/34483b20afd92fc17c51a6df6227e5dca5b4d8eeed0989dd34371951cb87d323f7bcbf59b9cbc602ae521a8495c18553652189600e9735396a9ad62893d3d1 new file mode 100644 index 00000000..a9a54491 --- /dev/null +++ b/.pnpm-store/v11/files/8c/34483b20afd92fc17c51a6df6227e5dca5b4d8eeed0989dd34371951cb87d323f7bcbf59b9cbc602ae521a8495c18553652189600e9735396a9ad62893d3d1 @@ -0,0 +1,108 @@ +0.6.3 / 2022-01-22 +================== + + * Revert "Lazy-load modules from main entry point" + +0.6.2 / 2019-04-29 +================== + + * Fix sorting charset, encoding, and language with extra parameters + +0.6.1 / 2016-05-02 +================== + + * perf: improve `Accept` parsing speed + * perf: improve `Accept-Charset` parsing speed + * perf: improve `Accept-Encoding` parsing speed + * perf: improve `Accept-Language` parsing speed + +0.6.0 / 2015-09-29 +================== + + * Fix including type extensions in parameters in `Accept` parsing + * Fix parsing `Accept` parameters with quoted equals + * Fix parsing `Accept` parameters with quoted semicolons + * Lazy-load modules from main entry point + * perf: delay type concatenation until needed + * perf: enable strict mode + * perf: hoist regular expressions + * perf: remove closures getting spec properties + * perf: remove a closure from media type parsing + * perf: remove property delete from media type parsing + +0.5.3 / 2015-05-10 +================== + + * Fix media type parameter matching to be case-insensitive + +0.5.2 / 2015-05-06 +================== + + * Fix comparing media types with quoted values + * Fix splitting media types with quoted commas + +0.5.1 / 2015-02-14 +================== + + * Fix preference sorting to be stable for long acceptable lists + +0.5.0 / 2014-12-18 +================== + + * Fix list return order when large accepted list + * Fix missing identity encoding when q=0 exists + * Remove dynamic building of Negotiator class + +0.4.9 / 2014-10-14 +================== + + * Fix error when media type has invalid parameter + +0.4.8 / 2014-09-28 +================== + + * Fix all negotiations to be case-insensitive + * Stable sort preferences of same quality according to client order + * Support Node.js 0.6 + +0.4.7 / 2014-06-24 +================== + + * Handle invalid provided languages + * Handle invalid provided media types + +0.4.6 / 2014-06-11 +================== + + * Order by specificity when quality is the same + +0.4.5 / 2014-05-29 +================== + + * Fix regression in empty header handling + +0.4.4 / 2014-05-29 +================== + + * Fix behaviors when headers are not present + +0.4.3 / 2014-04-16 +================== + + * Handle slashes on media params correctly + +0.4.2 / 2014-02-28 +================== + + * Fix media type sorting + * Handle media types params strictly + +0.4.1 / 2014-01-16 +================== + + * Use most specific matches + +0.4.0 / 2014-01-09 +================== + + * Remove preferred prefix from methods diff --git a/.pnpm-store/v11/files/8c/368ef4be19814903d45d104f991ea70cc4c14dfca7fec60f5925ead8d1cd2cf8811d85256687e190b525dea4f89bf809a78c72ac12bdd0b1fe672841d3a265 b/.pnpm-store/v11/files/8c/368ef4be19814903d45d104f991ea70cc4c14dfca7fec60f5925ead8d1cd2cf8811d85256687e190b525dea4f89bf809a78c72ac12bdd0b1fe672841d3a265 new file mode 100644 index 00000000..0b32e8fa --- /dev/null +++ b/.pnpm-store/v11/files/8c/368ef4be19814903d45d104f991ea70cc4c14dfca7fec60f5925ead8d1cd2cf8811d85256687e190b525dea4f89bf809a78c72ac12bdd0b1fe672841d3a265 @@ -0,0 +1,55 @@ +/*! + * set-value + * + * Copyright (c) 2014-2015, 2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +var split = require('split-string'); +var extend = require('extend-shallow'); +var isPlainObject = require('is-plain-object'); +var isObject = require('is-extendable'); + +module.exports = function(obj, prop, val) { + if (!isObject(obj)) { + return obj; + } + + if (Array.isArray(prop)) { + prop = [].concat.apply([], prop).join('.'); + } + + if (typeof prop !== 'string') { + return obj; + } + + var keys = split(prop, {sep: '.', brackets: true}).filter(isValidKey); + var len = keys.length; + var idx = -1; + var current = obj; + + while (++idx < len) { + var key = keys[idx]; + if (idx !== len - 1) { + if (!isObject(current[key])) { + current[key] = {}; + } + current = current[key]; + continue; + } + + if (isPlainObject(current[key]) && isPlainObject(val)) { + current[key] = extend({}, current[key], val); + } else { + current[key] = val; + } + } + + return obj; +}; + +function isValidKey(key) { + return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; +} diff --git a/.pnpm-store/v11/files/8c/55df6428ad4fdb1ca9b7dc2c1b9bb9a5319538b89cc3277c3fda88c910ed9039450dd3efade5bc436f829fe849213dd60ec2a7fbb7dd41b25d30716290ce03 b/.pnpm-store/v11/files/8c/55df6428ad4fdb1ca9b7dc2c1b9bb9a5319538b89cc3277c3fda88c910ed9039450dd3efade5bc436f829fe849213dd60ec2a7fbb7dd41b25d30716290ce03 new file mode 100644 index 00000000..19e8d040 --- /dev/null +++ b/.pnpm-store/v11/files/8c/55df6428ad4fdb1ca9b7dc2c1b9bb9a5319538b89cc3277c3fda88c910ed9039450dd3efade5bc436f829fe849213dd60ec2a7fbb7dd41b25d30716290ce03 @@ -0,0 +1,47 @@ +// Copyright 2014 Simon Lydell +// X11 (“MIT”) Licensed. (See LICENSE.) + +void (function(root, factory) { + if (typeof define === "function" && define.amd) { + define(factory) + } else if (typeof exports === "object") { + module.exports = factory() + } else { + root.resolveUrl = factory() + } +}(this, function() { + + function resolveUrl(/* ...urls */) { + var numUrls = arguments.length + + if (numUrls === 0) { + throw new Error("resolveUrl requires at least one argument; got none.") + } + + var base = document.createElement("base") + base.href = arguments[0] + + if (numUrls === 1) { + return base.href + } + + var head = document.getElementsByTagName("head")[0] + head.insertBefore(base, head.firstChild) + + var a = document.createElement("a") + var resolved + + for (var index = 1; index < numUrls; index++) { + a.href = arguments[index] + resolved = a.href + base.href = resolved + } + + head.removeChild(base) + + return resolved + } + + return resolveUrl + +})); diff --git a/.pnpm-store/v11/files/8c/58803b7a76f7f33b62523d3d38ee52b7970e975e1ded56e44f81dee108db756522585e5586d94f19380bd10134f90d92c1ff5a380fe3ef35e12b4f6a571df4 b/.pnpm-store/v11/files/8c/58803b7a76f7f33b62523d3d38ee52b7970e975e1ded56e44f81dee108db756522585e5586d94f19380bd10134f90d92c1ff5a380fe3ef35e12b4f6a571df4 new file mode 100644 index 00000000..e0ab1ca0 --- /dev/null +++ b/.pnpm-store/v11/files/8c/58803b7a76f7f33b62523d3d38ee52b7970e975e1ded56e44f81dee108db756522585e5586d94f19380bd10134f90d92c1ff5a380fe3ef35e12b4f6a571df4 @@ -0,0 +1,62 @@ +{ + "name": "define-property", + "description": "Define a non-enumerable property on an object.", + "version": "1.0.0", + "homepage": "https://github.com/jonschlinkert/define-property", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/define-property", + "bugs": { + "url": "https://github.com/jonschlinkert/define-property/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "devDependencies": { + "gulp-format-md": "^0.1.12", + "mocha": "^3.2.0" + }, + "keywords": [ + "define", + "define-property", + "enumerable", + "key", + "non", + "non-enumerable", + "object", + "prop", + "property", + "value" + ], + "verb": { + "related": { + "list": [ + "extend-shallow", + "merge-deep", + "assign-deep", + "mixin-deep" + ] + }, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/8c/9ab3affe6a99a3f905f53469d2a41f56367b1bddae25e7efb04f0747d84ebfdbcf594934bd7c6e04705542c35086fbef17cd635ce893dcdc5c37e6f8e63d65 b/.pnpm-store/v11/files/8c/9ab3affe6a99a3f905f53469d2a41f56367b1bddae25e7efb04f0747d84ebfdbcf594934bd7c6e04705542c35086fbef17cd635ce893dcdc5c37e6f8e63d65 new file mode 100644 index 00000000..87023304 --- /dev/null +++ b/.pnpm-store/v11/files/8c/9ab3affe6a99a3f905f53469d2a41f56367b1bddae25e7efb04f0747d84ebfdbcf594934bd7c6e04705542c35086fbef17cd635ce893dcdc5c37e6f8e63d65 @@ -0,0 +1,47 @@ +var isFunction = require('./isFunction'), + isMasked = require('./_isMasked'), + isObject = require('./isObject'), + toSource = require('./_toSource'); + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +module.exports = baseIsNative; diff --git a/.pnpm-store/v11/files/8c/9f80de1562fd88748ef933a201986394311dd533bd032c2ce64a6dd09f876b3092f5e42084882c96b1f8d9b54e71d21fc49d2135419a534e994de090d5f9e8 b/.pnpm-store/v11/files/8c/9f80de1562fd88748ef933a201986394311dd533bd032c2ce64a6dd09f876b3092f5e42084882c96b1f8d9b54e71d21fc49d2135419a534e994de090d5f9e8 new file mode 100644 index 00000000..e5c4a1a5 --- /dev/null +++ b/.pnpm-store/v11/files/8c/9f80de1562fd88748ef933a201986394311dd533bd032c2ce64a6dd09f876b3092f5e42084882c96b1f8d9b54e71d21fc49d2135419a534e994de090d5f9e8 @@ -0,0 +1,17 @@ +var copyObject = require('./_copyObject'), + keys = require('./keys'); + +/** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ +function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); +} + +module.exports = baseAssign; diff --git a/.pnpm-store/v11/files/8c/d1dc5ad99cf79c219bdee6d3cc7704cf00207d09617d181926a89e4d359b3079cb4132279b2740b7b86252fad50431ed43c1ac81cb05ff2b42a4a118e0e378 b/.pnpm-store/v11/files/8c/d1dc5ad99cf79c219bdee6d3cc7704cf00207d09617d181926a89e4d359b3079cb4132279b2740b7b86252fad50431ed43c1ac81cb05ff2b42a4a118e0e378 new file mode 100644 index 00000000..0d68bf6d --- /dev/null +++ b/.pnpm-store/v11/files/8c/d1dc5ad99cf79c219bdee6d3cc7704cf00207d09617d181926a89e4d359b3079cb4132279b2740b7b86252fad50431ed43c1ac81cb05ff2b42a4a118e0e378 @@ -0,0 +1,49 @@ +{ + "name": "js-yaml", + "version": "3.14.2", + "description": "YAML 1.2 parser and serializer", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "homepage": "https://github.com/nodeca/js-yaml", + "author": "Vladimir Zapparov ", + "contributors": [ + "Aleksey V Zapparov (http://www.ixti.net/)", + "Vitaly Puzrin (https://github.com/puzrin)", + "Martin Grenfell (http://got-ravings.blogspot.com)" + ], + "license": "MIT", + "repository": "nodeca/js-yaml", + "files": [ + "index.js", + "lib/", + "bin/", + "dist/" + ], + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "unpkg": "dist/js-yaml.min.js", + "jsdelivr": "dist/js-yaml.min.js", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "devDependencies": { + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "browserify": "^16.2.2", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^1.24.2", + "istanbul": "^0.4.5", + "mocha": "^7.1.2", + "uglify-js": "^3.0.1" + }, + "scripts": { + "test": "make test" + } +} diff --git a/.pnpm-store/v11/files/8c/d9c5873acbd77f3734da8ad47c5a875f0baa6a97b9b022ab497994d8d9d496edd7c431a43f7fda24da273d6bc6b8150caeb9644279174576f29fed7527d5f8 b/.pnpm-store/v11/files/8c/d9c5873acbd77f3734da8ad47c5a875f0baa6a97b9b022ab497994d8d9d496edd7c431a43f7fda24da273d6bc6b8150caeb9644279174576f29fed7527d5f8 new file mode 100644 index 00000000..3d82a39e --- /dev/null +++ b/.pnpm-store/v11/files/8c/d9c5873acbd77f3734da8ad47c5a875f0baa6a97b9b022ab497994d8d9d496edd7c431a43f7fda24da273d6bc6b8150caeb9644279174576f29fed7527d5f8 @@ -0,0 +1,11 @@ +module['exports'] = function(colors) { + var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', + 'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed', + 'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta']; + return function(letter, i, exploded) { + return letter === ' ' ? letter : + colors[ + available[Math.round(Math.random() * (available.length - 2))] + ](letter); + }; +}; diff --git a/.pnpm-store/v11/files/8c/eb3bd1a0fefbf1ab5b0db73ed8d8d37ad758c90635d9428d2340e3e164c0d3f92d1cc2a8b03ad1bcd783e833785c6ead2c80247079a41ef1f57706926f1e27 b/.pnpm-store/v11/files/8c/eb3bd1a0fefbf1ab5b0db73ed8d8d37ad758c90635d9428d2340e3e164c0d3f92d1cc2a8b03ad1bcd783e833785c6ead2c80247079a41ef1f57706926f1e27 new file mode 100644 index 00000000..ef51e038 --- /dev/null +++ b/.pnpm-store/v11/files/8c/eb3bd1a0fefbf1ab5b0db73ed8d8d37ad758c90635d9428d2340e3e164c0d3f92d1cc2a8b03ad1bcd783e833785c6ead2c80247079a41ef1f57706926f1e27 @@ -0,0 +1 @@ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/.pnpm-store/v11/files/8d/01c6564740f4dba004722021b1110b71bd558c035834b0b5865b562a0e8442a3c805518b0dc3ac8c25692d0ef4797bb8d7fd0fd8d118bc7a7723afc3158ff8 b/.pnpm-store/v11/files/8d/01c6564740f4dba004722021b1110b71bd558c035834b0b5865b562a0e8442a3c805518b0dc3ac8c25692d0ef4797bb8d7fd0fd8d118bc7a7723afc3158ff8 new file mode 100644 index 00000000..347e66f8 --- /dev/null +++ b/.pnpm-store/v11/files/8d/01c6564740f4dba004722021b1110b71bd558c035834b0b5865b562a0e8442a3c805518b0dc3ac8c25692d0ef4797bb8d7fd0fd8d118bc7a7723afc3158ff8 @@ -0,0 +1,31 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const _suman = global.__suman = (global.__suman || {}); +const helpers_1 = require("./helpers"); +function default_1(names, $ioc) { + return names.map(function (n) { + if (n === '$core') { + return helpers_1.getCoreAndDeps().$core; + } + if (n === '$deps') { + return helpers_1.getCoreAndDeps().$deps; + } + if (n === '$args') { + return _suman.sumanOpts.user_arg || []; + } + if (n === '$root' || n === '$projectRoot') { + return _suman.projectRoot; + } + if (n === '$index' || n === '$project') { + return helpers_1.getProjectModule(); + } + if (n === '$ioc') { + return _suman.$staticIoc || $ioc; + } + return helpers_1.lastDitchRequire(n, ''); + }); +} +exports.default = default_1; +; diff --git a/.pnpm-store/v11/files/8d/101f5ffde32a01ca6868959581c05862f7d7be5c35496f0c6c31cb5f2a416e324551c0622e445caff81dec9620a56f571b36dc17a81f720086bea23724eb7e b/.pnpm-store/v11/files/8d/101f5ffde32a01ca6868959581c05862f7d7be5c35496f0c6c31cb5f2a416e324551c0622e445caff81dec9620a56f571b36dc17a81f720086bea23724eb7e new file mode 100644 index 00000000..aa7f41ec --- /dev/null +++ b/.pnpm-store/v11/files/8d/101f5ffde32a01ca6868959581c05862f7d7be5c35496f0c6c31cb5f2a416e324551c0622e445caff81dec9620a56f571b36dc17a81f720086bea23724eb7e @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('conformsTo', require('../conformsTo')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/8d/316b63700126d7c8965a886e9b35a332d3f7e68d28f2264d235c0afad28066f877f25821e1983ddde5f2d5052716cc73338779b41b6f4d1b90ad33dc3e9f24 b/.pnpm-store/v11/files/8d/316b63700126d7c8965a886e9b35a332d3f7e68d28f2264d235c0afad28066f877f25821e1983ddde5f2d5052716cc73338779b41b6f4d1b90ad33dc3e9f24 new file mode 100644 index 00000000..b15109c9 --- /dev/null +++ b/.pnpm-store/v11/files/8d/316b63700126d7c8965a886e9b35a332d3f7e68d28f2264d235c0afad28066f877f25821e1983ddde5f2d5052716cc73338779b41b6f4d1b90ad33dc3e9f24 @@ -0,0 +1,248 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [6, 2, 3, 4, 5, 1]; + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * The file descriptor to write the `debug()` calls to. + * Set the `DEBUG_FD` env variable to override with another value. i.e.: + * + * $ DEBUG_FD=3 node script.js 3>debug.log + */ + +var fd = parseInt(process.env.DEBUG_FD, 10) || 2; + +if (1 !== fd && 2 !== fd) { + util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')() +} + +var stream = 1 === fd ? process.stdout : + 2 === fd ? process.stderr : + createWritableStdioStream(fd); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n').map(function(str) { + return str.trim() + }).join(' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = new Date().toUTCString() + + ' ' + name + ' ' + args[0]; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to `stream`. + */ + +function log() { + return stream.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Copied from `node/src/node.js`. + * + * XXX: It's lame that node doesn't expose this API out-of-the-box. It also + * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame. + */ + +function createWritableStdioStream (fd) { + var stream; + var tty_wrap = process.binding('tty_wrap'); + + // Note stream._type is used for test-module-load-list.js + + switch (tty_wrap.guessHandleType(fd)) { + case 'TTY': + stream = new tty.WriteStream(fd); + stream._type = 'tty'; + + // Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + case 'FILE': + var fs = require('fs'); + stream = new fs.SyncWriteStream(fd, { autoClose: false }); + stream._type = 'fs'; + break; + + case 'PIPE': + case 'TCP': + var net = require('net'); + stream = new net.Socket({ + fd: fd, + readable: false, + writable: true + }); + + // FIXME Should probably have an option in net.Socket to create a + // stream from an existing fd which is writable only. But for now + // we'll just add this hack and set the `readable` member to false. + // Test: ./node test/fixtures/echo.js < /etc/passwd + stream.readable = false; + stream.read = null; + stream._type = 'pipe'; + + // FIXME Hack to have stream not keep the event loop alive. + // See https://github.com/joyent/node/issues/1726 + if (stream._handle && stream._handle.unref) { + stream._handle.unref(); + } + break; + + default: + // Probably an error on in uv_guess_handle() + throw new Error('Implement me. Unknown stream file type!'); + } + + // For supporting legacy API we put the FD here. + stream.fd = fd; + + stream._isStdio = true; + + return stream; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/.pnpm-store/v11/files/8d/4b0bd1c5262c0218624ae89c3c39e4532b076d03bfd46276adb3644082dc89058ec39e37f7ade9d35ead92616367e13909d564335f94765440c29eaffd800e b/.pnpm-store/v11/files/8d/4b0bd1c5262c0218624ae89c3c39e4532b076d03bfd46276adb3644082dc89058ec39e37f7ade9d35ead92616367e13909d564335f94765440c29eaffd800e new file mode 100644 index 00000000..64a30dfb --- /dev/null +++ b/.pnpm-store/v11/files/8d/4b0bd1c5262c0218624ae89c3c39e4532b076d03bfd46276adb3644082dc89058ec39e37f7ade9d35ead92616367e13909d564335f94765440c29eaffd800e @@ -0,0 +1,17 @@ +/** Used to match `RegExp` flags from their coerced string values. */ +var reFlags = /\w*$/; + +/** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ +function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; +} + +module.exports = cloneRegExp; diff --git a/.pnpm-store/v11/files/8d/609d64d4e3f7b92e6cb047b2c416902f59f67b716cfc1b030ff4a745f78e2cb65caab8fa38d39cf28e3997fe35ccc24c2e6b1c02de7a39e821467bdee70561 b/.pnpm-store/v11/files/8d/609d64d4e3f7b92e6cb047b2c416902f59f67b716cfc1b030ff4a745f78e2cb65caab8fa38d39cf28e3997fe35ccc24c2e6b1c02de7a39e821467bdee70561 new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/.pnpm-store/v11/files/8d/609d64d4e3f7b92e6cb047b2c416902f59f67b716cfc1b030ff4a745f78e2cb65caab8fa38d39cf28e3997fe35ccc24c2e6b1c02de7a39e821467bdee70561 @@ -0,0 +1 @@ +node_modules diff --git a/.pnpm-store/v11/files/8d/771b6e286e095329fc91d303b95591266f3c2a0ddb7226a4b969ea2d61f82d666fc4005eac8a4d764238ee111f2404e5484b1dfa5472e1331107f4fcd83bb6 b/.pnpm-store/v11/files/8d/771b6e286e095329fc91d303b95591266f3c2a0ddb7226a4b969ea2d61f82d666fc4005eac8a4d764238ee111f2404e5484b1dfa5472e1331107f4fcd83bb6 new file mode 100644 index 00000000..20b9f1ea --- /dev/null +++ b/.pnpm-store/v11/files/8d/771b6e286e095329fc91d303b95591266f3c2a0ddb7226a4b969ea2d61f82d666fc4005eac8a4d764238ee111f2404e5484b1dfa5472e1331107f4fcd83bb6 @@ -0,0 +1,35 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const util = require("util"); +const Client = require("socket.io-client"); +let client = null; +const _suman = global.__suman = (global.__suman || {}); +exports.getClient = function () { + if (!client) { + let port = process.env.SUMAN_SOCKETIO_SERVER_PORT; + try { + if (window && !port) { + console.log('window.__suman', util.inspect(window.__suman)); + port = Number(window.__suman.SUMAN_SOCKETIO_SERVER_PORT); + } + } + catch (err) { + } + if (!port) { + throw new Error('Suman implementation error, no port specified by "SUMAN_SOCKETIO_SERVER_PORT" env var.'); + } + client = Client(`http://localhost:${port}`); + client.on('connect', function () { + _suman.log.warning('client connected.'); + }); + client.on('event', function (data) { + _suman.log.info('event data => ', data); + }); + client.on('disconnect', function () { + _suman.log.error('client disconnected.'); + }); + } + return client; +}; diff --git a/.pnpm-store/v11/files/8d/7985a6c55649096a990b9dce31c14e626586b721916fd47b90ff412780df46cca5e2bb82a1239c73216fcf3426559a03e01221d1516f85688634d605eedd55 b/.pnpm-store/v11/files/8d/7985a6c55649096a990b9dce31c14e626586b721916fd47b90ff412780df46cca5e2bb82a1239c73216fcf3426559a03e01221d1516f85688634d605eedd55 new file mode 100644 index 00000000..bda2ce69 --- /dev/null +++ b/.pnpm-store/v11/files/8d/7985a6c55649096a990b9dce31c14e626586b721916fd47b90ff412780df46cca5e2bb82a1239c73216fcf3426559a03e01221d1516f85688634d605eedd55 @@ -0,0 +1,34 @@ +var chain = require('./chain'); + +/** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ +function wrapperChain() { + return chain(this); +} + +module.exports = wrapperChain; diff --git a/.pnpm-store/v11/files/8d/85c7520f8b2c04cc5405f74e3c81e594c1f3723a1d7dd866995ce904cbf756a4492d06f3bae8bff3aeb8a8c830b495edfbb40012d6312558ef567200c21e59 b/.pnpm-store/v11/files/8d/85c7520f8b2c04cc5405f74e3c81e594c1f3723a1d7dd866995ce904cbf756a4492d06f3bae8bff3aeb8a8c830b495edfbb40012d6312558ef567200c21e59 new file mode 100644 index 00000000..a569a87f --- /dev/null +++ b/.pnpm-store/v11/files/8d/85c7520f8b2c04cc5405f74e3c81e594c1f3723a1d7dd866995ce904cbf756a4492d06f3bae8bff3aeb8a8c830b495edfbb40012d6312558ef567200c21e59 @@ -0,0 +1,398 @@ +'use strict'; +module.exports = [ + { + names: ['tsc-multi-watch'], + type: 'bool', + help: 'Suman will transpile any changes to .ts files in the project.' + }, + { + names: ['no-color', 'no-colors'], + type: 'bool', + help: 'Tells the NPM colors module to not use any control chars for color.' + }, + { + names: ['version', 'vn'], + type: 'bool', + help: 'Print tool version and exit.' + }, + { + names: ['force-match'], + type: 'bool', + help: 'Any files passed at the command line will be run, even if they do not match any regex mentioned in config or command line.' + }, + { + names: ['verbosity', 'v'], + type: 'integer', + default: 5, + help: 'Verbosity is an integer between 1 and 9, inclusive; the bigger the number the more verbose; default is 5.' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Print this help menu and exit.' + }, + { + names: ['inherit-stdio'], + type: 'bool', + help: 'When using the runner, the runner (parent process) will inherit stdout/stderr from test child processes; useful' + + 'for simple and quick debugging.' + }, + { + names: ['force-inherit-stdio'], + type: 'bool', + help: 'Force inherit stdio, which will use inherit instead of pipe.' + }, + { + names: ['match-any'], + type: 'arrayOfString', + help: 'Use this to filter input to match the given JS regex', + }, + { + names: ['match-none'], + type: 'arrayOfString', + help: 'Use this to filter input to ignore matches of the given JS regex', + }, + { + names: ['match-all'], + type: 'arrayOfString', + help: 'Use this to filter input to ignore matches of the given JS regex', + }, + { + names: ['append-match-any'], + type: 'arrayOfString', + help: 'Use this to filter input to match the given JS regex', + }, + { + names: ['append-match-none'], + type: 'arrayOfString', + help: 'Use this to filter input to ignore matches of the given JS regex', + }, + { + names: ['append-match-all'], + type: 'arrayOfString', + help: 'Use this to filter input to ignore matches of the given JS regex', + }, + { + names: ['babel-register', 'use-babel-register'], + type: 'bool', + help: 'Use babel-core register to transpile sources on the fly, even in child processes.' + }, + { + names: ['no-babel-register', 'no-use-babel-register'], + type: 'bool', + help: 'Prevent usage of babel-register, even useBabelRegister is set to true in your config.' + }, + { + names: ['sort-by-millis'], + type: 'bool', + help: 'Prints a duplicate Runner results table sorted by millis fastest to slowest.' + }, + { + names: ['create'], + type: 'arrayOfString', + help: 'Create suman test skeleton at the path(s) you specified.' + }, + { + names: ['force-cwd-to-be-project-root', 'cwd-is-root', 'force-cwd-root'], + type: 'bool', + help: 'Run Suman tests and force cwd to be the project root.' + }, + { + names: ['force-cwd-to-test-file-dir', 'cwd-is-tfd'], + type: 'bool', + help: 'Will force the cwd for the runner child_processes to be the directory that contains the test file.' + }, + { + names: ['use-container'], + type: 'bool', + help: 'Use this option to force-specify to use a container with --groups and suman.groups.js.' + }, + { + names: ['no-use-container'], + type: 'bool', + help: 'Use this option to force-specify to not use a container with --groups and suman.groups.js.' + }, + { + names: ['allow-duplicate-tests'], + type: 'bool', + help: 'Use this option to allow running a test more than once in the same run (with the runner).' + }, + { + names: ['allow-reuse-image'], + type: 'bool', + help: 'Use this option to force-specify to reuse all container images.' + }, + { + names: ['no-allow-reuse-image'], + type: 'bool', + help: 'Use this option to force-specify to rebuild all container images.' + }, + { + names: ['no-stream-to-file'], + type: 'bool', + help: 'Use this option to force-specify that no child process data be streamed to any files.' + }, + { + names: ['no-stream-to-console'], + type: 'bool', + help: 'Use this option to force-specify that no child process data be streamed to console.' + }, + { + names: ['suman-helpers-dir', 'shd'], + type: 'string', + internal: true, + help: 'Use this option to force-specify the directory that houses the suman helpers files.' + }, + { + names: ['recursive', 'r'], + type: 'bool', + help: 'Use this option to recurse through sub-directories of tests.' + }, + { + names: ['safe'], + type: 'bool', + help: 'Reads files in with fs.createReadStream and makes sure it\'s a suman test before running' + }, + { + names: ['force', 'f'], + type: 'bool', + help: 'Force the command at hand.' + }, + { + names: ['fforce', 'ff'], + type: 'bool', + help: 'Force the command at hand, with super double force.' + }, + { + names: ['pipe', 'p'], + type: 'bool', + help: 'Pipe data to Suman using stdout to stdin.' + }, + { + names: ['convert', 'cnvt'], + type: 'bool', + help: 'Convert Mocha test file or directory to Suman test(s).' + }, + { + names: ['bail', 'b'], + type: 'bool', + help: 'Bail upon the first test error.' + }, + { + names: ['use-tap-output', 'use-tap', 'tap'], + type: 'bool', + help: 'Use this option to tell Suman runner to interpret TAP output from child process(es) stdout.' + }, + { + names: ['suman-d'], + type: 'bool', + internal: true, + help: 'Run suman-d.' + }, + { + names: ['no-tap'], + type: 'bool', + help: 'Use this option to tell Suman runner to *not* interpret TAP output from child process(es) stdout.' + }, + { + names: ['inspect-child', 'inspect-children'], + type: 'bool', + help: 'Use this option to aid in the debugging of child_processes.' + }, + { + names: ['debug-child', 'debug-children'], + type: 'bool', + help: 'Use this option to aid in the debugging of child_processes.' + }, + { + names: ['ignore-break'], + type: 'bool', + help: 'Use this option to aid in the debugging of child_processes.' + }, + { + names: ['ignore-uncaught-exceptions', 'iue'], + type: 'bool', + help: 'Use this option to aid in the debugging of child_processes.' + }, + { + names: ['ignore-unhandled-rejections', 'iur'], + type: 'bool', + help: 'Use this option to aid in the debugging of child_processes.' + }, + { + names: ['runner', 'force-runner'], + type: 'bool', + help: 'Sole purpose of this flag is to force the usage of the runner when executing only one test file.' + }, + { + names: ['watch', 'w'], + type: 'bool', + help: 'Flag to be used so that test files will be transpiled/run as soon as they are saved. Starts up the Suman server if it is not already live,' + + 'and begins watching the files desired.' + }, + { + names: ['watch-per', 'wp'], + type: 'string', + help: 'watch-per string must match a key in {suman.conf.js}.watch.per.' + }, + { + names: ['rand', 'random'], + type: 'bool', + help: 'Flag to randomize tests.' + }, + { + names: ['concurrency'], + type: 'integer', + help: 'Specifiy the maximum number of parallel child processes.' + }, + { + names: ['src'], + type: 'string', + help: 'Specify single path to directory of Mocha test source files for conversion to Suman from Mocha.' + }, + { + names: ['daemon', 'd'], + type: 'bool', + help: 'Allows certain Suman processes to run as a daemon.' + }, + { + names: ['dest'], + type: 'string', + help: 'Specify single path as dest directory for conversion to Suman from Mocha.' + }, + { + names: ['reporters'], + type: 'arrayOfString', + help: 'Specify name of reporters to be used deemed by your config file.' + }, + { + names: ['test-paths-json'], + type: 'string', + help: 'Test paths as JSON array.' + }, + { + names: ['replace-ext-with', 'replace-extension-with'], + type: 'string', + help: 'Replace test path strings.' + }, + { + names: ['replace-match'], + type: 'string', + help: 'Replace test path strings.' + }, + { + names: ['replace-with'], + type: 'string', + help: 'Test paths as JSON array.' + }, + { + names: ['reporter-paths'], + type: 'arrayOfString', + help: 'Specify reporters by specifying path(s) to reporter module(s).' + }, + { + names: ['postinstall'], + type: 'bool', + help: 'Using this option will (re)run the suman postinstall routine. Normally as a Suman user ' + + 'you would want to run the "suman --repair" option instead of the the "suman --postinstall" option.' + }, + { + names: ['install-globals'], + type: 'bool', + help: 'Run diagnostics to see if something may be wrong with your suman.conf.js file and/or project structure.' + }, + { + names: ['diagnostics'], + type: 'bool', + help: 'Run diagnostics to see if something may be wrong with your suman.conf.js file and/or project structure.' + }, + { + names: ['repair'], + type: 'bool', + help: 'Run the "--repair" option to (1) re-install Suman deps that may be corrupted; ' + + '(2) delete any stray lock files that may exist and should not exist; (3) ensure that certain files, such as ' + + '@run.sh, @transform.sh, @target, @src, have the correct permissions.' + }, + { + names: ['browser'], + type: 'bool', + help: 'Tell Suman to run browser tests.' + }, + { + names: ['force-transpile'], + type: 'bool', + help: 'Force transpile using @transform.sh and @run.sh.' + }, + { + names: ['transpile', 't'], + type: 'bool', + help: 'Transpile tests to test-target.' + }, + { + names: ['no-transpile', 'nt'], + type: 'bool', + help: 'Useful when the default is set to transpile:true in your config. Prevents transpilation and runs test files directly.' + }, + { + names: ['no-run', 'nr'], + type: 'bool', + help: 'When --watch and --transpile are set to true, "--no-run" prevents Suman from executing the resulting tests, when a watched file changes on' + + 'the filesystem. In other words, the file will only be transpiled but not executed as part of the watch process.' + }, + { + names: ['full-stack-traces', 'fst'], + type: 'bool', + help: 'Full stack traces will be shown for all exceptions, including test failures.' + }, + { + names: ['processes', 'procs'], + type: 'integer', + help: 'Override config value for maximum number of parallel Node.js processes.' + }, + { + names: ['server', 's'], + type: 'bool', + help: 'Start the suman server manually.' + }, + { + names: ['exec-arg'], + type: 'arrayOfString', + help: 'Pass an argument through command line to the executable.' + }, + { + names: ['exec-args'], + type: 'string', + help: 'Pass exec arguments through command line.' + }, + { + names: ['groups'], + type: 'bool', + help: 'Tell Suman to use the groups feature. If no arguments are passed, ' + + 'all groups will be run. Otherwise, only the group ids/names passed will be run.' + }, + { + names: ['config', 'cfg'], + type: 'string', + help: 'Path to the suman.conf.js file you wish to use.' + }, + { + names: ['stdout-silent'], + type: 'bool', + help: 'Sends stdout for all test child processes to /dev/null' + }, + { + names: ['stderr-silent'], + type: 'bool', + help: 'Sends stderr for all test child processes to /dev/null' + }, + { + names: ['silent'], + type: 'bool', + help: 'Sends stdout/stderr for all test child processes to /dev/null' + }, + { + names: ['tail'], + type: 'bool', + help: 'Option to tail the suman log files.' + } +]; diff --git a/.pnpm-store/v11/files/8d/b9fb83b45df542d06f405ce500aec63e3b0ce356c3098c9c58f56fd4635fa1d016da6fa5da33b47631b7a004c8669d8281a430cecbfd8e37577c91230f367e b/.pnpm-store/v11/files/8d/b9fb83b45df542d06f405ce500aec63e3b0ce356c3098c9c58f56fd4635fa1d016da6fa5da33b47631b7a004c8669d8281a430cecbfd8e37577c91230f367e new file mode 100644 index 00000000..5940b649 --- /dev/null +++ b/.pnpm-store/v11/files/8d/b9fb83b45df542d06f405ce500aec63e3b0ce356c3098c9c58f56fd4635fa1d016da6fa5da33b47631b7a004c8669d8281a430cecbfd8e37577c91230f367e @@ -0,0 +1,55 @@ +{ + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "name": "glob", + "description": "a little globber", + "version": "7.2.3", + "publishConfig": { + "tag": "v7-legacy" + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/node-glob.git" + }, + "main": "glob.js", + "files": [ + "glob.js", + "sync.js", + "common.js" + ], + "engines": { + "node": "*" + }, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "devDependencies": { + "memfs": "^3.2.0", + "mkdirp": "0", + "rimraf": "^2.2.8", + "tap": "^15.0.6", + "tick": "0.0.6" + }, + "tap": { + "before": "test/00-setup.js", + "after": "test/zz-cleanup.js", + "jobs": 1 + }, + "scripts": { + "prepublish": "npm run benchclean", + "profclean": "rm -f v8.log profile.txt", + "test": "tap", + "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js", + "bench": "bash benchmark.sh", + "prof": "bash prof.sh && cat profile.txt", + "benchclean": "node benchclean.js" + }, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } +} diff --git a/.pnpm-store/v11/files/8d/dc319b7cf5caa26acd60e2305292761a2975fe58ecdc012000bbc505c1acc52eb575cd3361bccc623668feeffc95f5de221b79a1b923b4a8394578c79ef79d b/.pnpm-store/v11/files/8d/dc319b7cf5caa26acd60e2305292761a2975fe58ecdc012000bbc505c1acc52eb575cd3361bccc623668feeffc95f5de221b79a1b923b4a8394578c79ef79d new file mode 100644 index 00000000..8cac698a --- /dev/null +++ b/.pnpm-store/v11/files/8d/dc319b7cf5caa26acd60e2305292761a2975fe58ecdc012000bbc505c1acc52eb575cd3361bccc623668feeffc95f5de221b79a1b923b4a8394578c79ef79d @@ -0,0 +1,77 @@ +# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property) + +> Define a non-enumerable property on an object. + +## Install + +Install with [npm](https://www.npmjs.com/) + +```sh +$ npm i define-property --save +``` + +## Usage + +**Params** + +* `obj`: The object on which to define the property. +* `prop`: The name of the property to be defined or modified. +* `descriptor`: The descriptor for the property being defined or modified. + +```js +var define = require('define-property'); +var obj = {}; +define(obj, 'foo', function(val) { + return val.toUpperCase(); +}); + +console.log(obj); +//=> {} + +console.log(obj.foo('bar')); +//=> 'BAR' +``` + +**get/set** + +```js +define(obj, 'foo', { + get: function() {}, + set: function() {} +}); +``` + +## Related projects + +* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object) +* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object) +* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) +* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object) + +## Running tests + +Install dev dependencies: + +```sh +$ npm i -d && npm test +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new). + +## Author + +**Jon Schlinkert** + ++ [github/jonschlinkert](https://github.com/jonschlinkert) ++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2015 Jon Schlinkert +Released under the MIT license. + +*** + +_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._ diff --git a/.pnpm-store/v11/files/8d/e56e7433a13aba1cbd902323f4873d23cd1be129aa41f2403687b0ea490db76c569b03ed4b0720a3739bf797be6107bad51271a8f3269e8566d7a03fa84b65 b/.pnpm-store/v11/files/8d/e56e7433a13aba1cbd902323f4873d23cd1be129aa41f2403687b0ea490db76c569b03ed4b0720a3739bf797be6107bad51271a8f3269e8566d7a03fa84b65 new file mode 100644 index 00000000..77ba63d2 --- /dev/null +++ b/.pnpm-store/v11/files/8d/e56e7433a13aba1cbd902323f4873d23cd1be129aa41f2403687b0ea490db76c569b03ed4b0720a3739bf797be6107bad51271a8f3269e8566d7a03fa84b65 @@ -0,0 +1,190 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const fs = require("fs"); +const path = require("path"); +const util = require("util"); +const assert = require("assert"); +const EE = require("events"); +const chalk = require("chalk"); +const includes = require('lodash.includes'); +const async = require("async"); +const JSONStdio = require("json-stdio"); +const _suman = global.__suman = (global.__suman || {}); +const su = require("suman-utils"); +const { events } = require('suman-events'); +const rb = _suman.resultBroadcaster = (_suman.resultBroadcaster || new EE()); +const writeStdoutToSumanShell = JSONStdio.initLogToStdout(su.constants.JSON_STDIO_SUMAN_SHELL); +exports.getFilePaths = function (dirs, cb) { + const { projectRoot, sumanOpts } = _suman; + const isForce = sumanOpts.force; + const isForceMatch = sumanOpts.force_match; + const matchesAny = _suman.sumanMatchesAny; + const matchesNone = _suman.sumanMatchesNone; + const matchesAll = _suman.sumanMatchesAll; + assert(Array.isArray(matchesAll), ' => Suman internal error => matchesAll is not defined as array type.'); + assert(Array.isArray(matchesNone), ' => Suman internal error => matchesNone is not defined as array type.'); + assert(Array.isArray(matchesAll), ' => Suman internal error => matchesAll is not defined as array type.'); + matchesNone.push(new RegExp(_suman.sumanHelperDirRoot)); + const isFindOnly = Boolean(sumanOpts.find_only); + let files = []; + const filesThatDidNotMatch = []; + let nonJSFile = false; + const doesMatchAll = function (filename) { + if (isForceMatch) { + return true; + } + return matchesAll.every(function (regex) { + const val = String(filename).match(regex); + if (!val) { + filesThatDidNotMatch.push({ + filename: filename, + regexType: 'matchAll', + regex: 'The filename did not match the following regex' + + ' and therefore was excluded => ' + [regex], + }); + } + return val; + }); + }; + const doesMatchAny = function (filename) { + if (isForceMatch) { + return true; + } + const val = !matchesAny.every(function (regex) { + return !String(filename).match(regex); + }); + if (!val) { + filesThatDidNotMatch.push({ + filename: filename, + regexType: 'matchAny', + message: 'The filename did not match any of the regex(es)', + regexes: matchesAny.map((r) => String(r).slice(1, -1)) + }); + } + return val; + }; + const doesMatchNone = function (filename) { + if (isForceMatch) { + return true; + } + return matchesNone.every(function (r) { + const val = !String(filename).match(r); + if (!val) { + filesThatDidNotMatch.push({ + filename: filename, + regexType: 'matchNone', + message: 'The filename matched the included regex and was therefore excluded.', + regex: r, + }); + } + return val; + }); + }; + (function runDirs(dirs, count, cb) { + async.eachLimit(dirs, 5, function (dir, cb) { + const _doesMatchNone = doesMatchNone(dir); + if (!_doesMatchNone) { + rb.emit(String(events.FILENAME_DOES_NOT_MATCH_NONE), dir); + return process.nextTick(cb); + } + if (!path.isAbsolute(dir)) { + dir = path.resolve(process.cwd() + '/' + dir); + } + fs.stat(dir, function (err, stats) { + if (err) { + _suman.log.warning(`warning: possibly a symlink (symlinks not yet supported) => "${err.message}".`); + return cb(); + } + const countIsGreaterThanMaxDepth = (count > sumanOpts.max_depth); + const isStartingToBeRecursive = (count > 0 && !sumanOpts.recursive); + if (stats.isDirectory() && !countIsGreaterThanMaxDepth && !isStartingToBeRecursive) { + fs.readdir(dir, function (err, items) { + if (err) { + console.error('\n', ' ', chalk.bgBlack.yellow(' => Suman presumes you wanted to run tests with/within the ' + + 'following path => '), '\n ', chalk.bgBlack.cyan(' => "' + dir + '" ')); + console.error(' ', chalk.magenta.bold(' => But this file or directory cannot be found.')); + console.error('\n', chalk.magenta(err.stack || err), '\n\n'); + return cb(err); + } + let mappedItems = items.map(i => path.resolve(dir + '/' + i)); + runDirs(mappedItems, ++count, cb); + }); + } + else if (stats.isFile()) { + const _doesMatchAny = doesMatchAny(dir); + const _doesMatchNone = doesMatchNone(dir); + const _doesMatchAll = doesMatchAll(dir); + if (!_doesMatchAny) { + rb.emit(String(events.FILENAME_DOES_NOT_MATCH_ANY), dir); + return process.nextTick(cb); + } + if (!_doesMatchNone) { + rb.emit(String(events.FILENAME_DOES_NOT_MATCH_NONE), dir); + return process.nextTick(cb); + } + if (!_doesMatchAll) { + rb.emit(String(events.FILENAME_DOES_NOT_MATCH_ALL), dir); + return process.nextTick(cb); + } + const baseName = path.basename(dir); + if (path.extname(baseName) !== '.js') { + nonJSFile = true; + rb.emit(String(events.FILE_IS_NOT_DOT_JS), dir); + } + const file = path.resolve(dir); + if (!sumanOpts.allow_duplicate_tests && includes(files, file)) { + _suman.log.warning(chalk.magenta('warning => \n => The following filepath was requested to be run more' + + ' than once, Suman will only run files once per run! =>'), '\n', file, '\n\n ' + + chalk.underline(' => To run files more than once in the same run, use "--allow-duplicate-tests"'), '\n'); + } + else { + isFindOnly && writeStdoutToSumanShell({ file }); + files.push(file); + } + process.nextTick(cb); + } + else { + const msg = [ + '\n', + ' => Suman message => You may have wanted to run tests in the following path:', + chalk.cyan(String(dir)), + '...but it is either a folder or is not a .js (or accepted file type) file, or it\'s a symlink', + 'if you want to run *subfolders* you shoud use the recursive option -r', + '...be sure to only run files that constitute Suman tests, to enforce this we', + 'recommend a naming convention to use with Suman tests, see: sumanjs.org\n\n' + ] + .filter(i => i).join('\n'); + rb.emit(String(events.RUNNER_HIT_DIRECTORY_BUT_NOT_RECURSIVE), msg); + process.nextTick(cb); + } + }); + }, cb); + })(dirs, 0, function (err) { + if (err) { + console.error('\n'); + _suman.log.error(chalk.red.bold('Error finding runnable paths:')); + _suman.log.error(err.stack || util.inspect(err)); + return process.nextTick(cb, err); + } + if (sumanOpts.transpile && !sumanOpts.useBabelRegister) { + files = files.map(function (item) { + return su.mapToTargetDir(item).targetPath; + }); + } + filesThatDidNotMatch.forEach(function (val) { + console.log('\n'); + _suman.log.info(chalk.bgBlack.yellow(' A file in a relevant directory ' + + 'did not match your regular expressions => '), '\n', util.inspect(val)); + }); + console.log(); + console.error(); + process.nextTick(cb, null, { + files, + nonJSFile, + filesThatDidNotMatch + }); + }); +}; +exports.findFilesToRun = exports.getFilePaths; diff --git a/.pnpm-store/v11/files/8d/f1b789c54d844cbbac3ab99e82893f971f8f3d436f7319a4d2ed7757ab85b945d82f021e9ab1d6dbbb35fab7fd1f9f84e470e525f56c4f4308adbfa76868dc b/.pnpm-store/v11/files/8d/f1b789c54d844cbbac3ab99e82893f971f8f3d436f7319a4d2ed7757ab85b945d82f021e9ab1d6dbbb35fab7fd1f9f84e470e525f56c4f4308adbfa76868dc new file mode 100644 index 00000000..16815b2f --- /dev/null +++ b/.pnpm-store/v11/files/8d/f1b789c54d844cbbac3ab99e82893f971f8f3d436f7319a4d2ed7757ab85b945d82f021e9ab1d6dbbb35fab7fd1f9f84e470e525f56c4f4308adbfa76868dc @@ -0,0 +1,33 @@ +{ + "name": "once", + "version": "1.4.0", + "description": "Run a function exactly one time", + "main": "once.js", + "directories": { + "test": "test" + }, + "dependencies": { + "wrappy": "1" + }, + "devDependencies": { + "tap": "^7.0.1" + }, + "scripts": { + "test": "tap test/*.js" + }, + "files": [ + "once.js" + ], + "repository": { + "type": "git", + "url": "git://github.com/isaacs/once" + }, + "keywords": [ + "once", + "function", + "one", + "single" + ], + "author": "Isaac Z. Schlueter (http://blog.izs.me/)", + "license": "ISC" +} diff --git a/.pnpm-store/v11/files/8d/f950bced2e752615e1674a0ed78f5f9828178836c20ad649d0d0ba42ee272e6a6a4d5d82e5732b13392bdb64e5e6925cae3f841908a145cb8e82ea8c637d0e b/.pnpm-store/v11/files/8d/f950bced2e752615e1674a0ed78f5f9828178836c20ad649d0d0ba42ee272e6a6a4d5d82e5732b13392bdb64e5e6925cae3f841908a145cb8e82ea8c637d0e new file mode 100644 index 00000000..71b72acc --- /dev/null +++ b/.pnpm-store/v11/files/8d/f950bced2e752615e1674a0ed78f5f9828178836c20ad649d0d0ba42ee272e6a6a4d5d82e5732b13392bdb64e5e6925cae3f841908a145cb8e82ea8c637d0e @@ -0,0 +1,21 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +declare namespace Intl { + // Empty +} diff --git a/.pnpm-store/v11/files/8e/34b4afd1012c25a03b47262e0426dd9e1ac20cddf84ef3f3ea8214590224dd45cefac51249ba887e0d30e07c48da7cefdf179b3aa0ed87ff0319ec9a8804fb b/.pnpm-store/v11/files/8e/34b4afd1012c25a03b47262e0426dd9e1ac20cddf84ef3f3ea8214590224dd45cefac51249ba887e0d30e07c48da7cefdf179b3aa0ed87ff0319ec9a8804fb new file mode 100644 index 00000000..1923524f --- /dev/null +++ b/.pnpm-store/v11/files/8e/34b4afd1012c25a03b47262e0426dd9e1ac20cddf84ef3f3ea8214590224dd45cefac51249ba887e0d30e07c48da7cefdf179b3aa0ed87ff0319ec9a8804fb @@ -0,0 +1,6 @@ +Dave Eddy +Fred Kuo +Lars-Magnus Skog +Mark Cavage +Patrick Mooney +Rob Gulewich diff --git a/.pnpm-store/v11/files/8e/4079732f7dbcb12fcfa486b10f9a9f72604245e75c521ed6d9b89bdd3c71a8fedcd1d28a6e6e9fe9ad96720a73fda73b495f2852ef2cdcdb1a6956e319decd b/.pnpm-store/v11/files/8e/4079732f7dbcb12fcfa486b10f9a9f72604245e75c521ed6d9b89bdd3c71a8fedcd1d28a6e6e9fe9ad96720a73fda73b495f2852ef2cdcdb1a6956e319decd new file mode 100644 index 00000000..0b8eca97 --- /dev/null +++ b/.pnpm-store/v11/files/8e/4079732f7dbcb12fcfa486b10f9a9f72604245e75c521ed6d9b89bdd3c71a8fedcd1d28a6e6e9fe9ad96720a73fda73b495f2852ef2cdcdb1a6956e319decd @@ -0,0 +1,28 @@ +{ + "name": "component-emitter", + "description": "Event emitter", + "version": "1.3.1", + "license": "MIT", + "funding": "https://github.com/sponsors/sindresorhus", + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "component": { + "scripts": { + "emitter/index.js": "index.js" + } + }, + "main": "index.js", + "repository": { + "type": "git", + "url": "https://github.com/sindresorhus/component-emitter.git" + }, + "scripts": { + "test": "make test" + }, + "files": [ + "index.js", + "LICENSE" + ] +} diff --git a/.pnpm-store/v11/files/8e/4d0cb87fb2590ae582de4eecddd095456a93a2ab544b15ba2948ad7ddd57c23fd4d8a3fa5167631b40a1fc215354c58fe882a5efc74497022ce095fe945d9e b/.pnpm-store/v11/files/8e/4d0cb87fb2590ae582de4eecddd095456a93a2ab544b15ba2948ad7ddd57c23fd4d8a3fa5167631b40a1fc215354c58fe882a5efc74497022ce095fe945d9e new file mode 100644 index 00000000..a3e1970b --- /dev/null +++ b/.pnpm-store/v11/files/8e/4d0cb87fb2590ae582de4eecddd095456a93a2ab544b15ba2948ad7ddd57c23fd4d8a3fa5167631b40a1fc215354c58fe882a5efc74497022ce095fe945d9e @@ -0,0 +1,33 @@ +var createWrap = require('./_createWrap'), + flatRest = require('./_flatRest'); + +/** Used to compose bitmasks for function metadata. */ +var WRAP_REARG_FLAG = 256; + +/** + * Creates a function that invokes `func` with arguments arranged according + * to the specified `indexes` where the argument value at the first index is + * provided as the first argument, the argument value at the second index is + * provided as the second argument, and so on. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} func The function to rearrange arguments for. + * @param {...(number|number[])} indexes The arranged argument indexes. + * @returns {Function} Returns the new function. + * @example + * + * var rearged = _.rearg(function(a, b, c) { + * return [a, b, c]; + * }, [2, 0, 1]); + * + * rearged('b', 'c', 'a') + * // => ['a', 'b', 'c'] + */ +var rearg = flatRest(function(func, indexes) { + return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); +}); + +module.exports = rearg; diff --git a/.pnpm-store/v11/files/8e/4fdf90115781db7473e14231a377ae207dfb762a19a51e838d8e304d12a9dc329abddf822f20f0fec9468dca456cb9c439c7ddae400cbf2a7052defee0f0df b/.pnpm-store/v11/files/8e/4fdf90115781db7473e14231a377ae207dfb762a19a51e838d8e304d12a9dc329abddf822f20f0fec9468dca456cb9c439c7ddae400cbf2a7052defee0f0df new file mode 100644 index 00000000..d2cc86eb --- /dev/null +++ b/.pnpm-store/v11/files/8e/4fdf90115781db7473e14231a377ae207dfb762a19a51e838d8e304d12a9dc329abddf822f20f0fec9468dca456cb9c439c7ddae400cbf2a7052defee0f0df @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///source-map.min.js","webpack:///webpack/bootstrap 0fd5815da764db5fb9fe","webpack:///./source-map.js","webpack:///./lib/source-map-generator.js","webpack:///./lib/base64-vlq.js","webpack:///./lib/base64.js","webpack:///./lib/util.js","webpack:///./lib/array-set.js","webpack:///./lib/mapping-list.js","webpack:///./lib/source-map-consumer.js","webpack:///./lib/binary-search.js","webpack:///./lib/quick-sort.js","webpack:///./lib/source-node.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","SourceMapGenerator","SourceMapConsumer","SourceNode","aArgs","_file","util","getArg","_sourceRoot","_skipValidation","_sources","ArraySet","_names","_mappings","MappingList","_sourcesContents","base64VLQ","prototype","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","generator","file","eachMapping","mapping","newMapping","generated","line","generatedLine","column","generatedColumn","source","relative","original","originalLine","originalColumn","name","addMapping","sources","forEach","sourceFile","sourceRelative","has","add","content","sourceContentFor","setSourceContent","_validateMapping","String","aSourceFile","aSourceContent","Object","create","toSetString","keys","length","applySourceMap","aSourceMapPath","Error","newSources","newNames","unsortedForEach","originalPositionFor","join","aGenerated","aOriginal","aSource","aName","JSON","stringify","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","mappings","toArray","i","len","compareByGeneratedPositionsInflated","encode","indexOf","_generateSourcesContent","aSources","aSourceRoot","map","key","hasOwnProperty","toJSON","version","names","sourcesContent","toString","toVLQSigned","aValue","fromVLQSigned","isNegative","shifted","base64","VLQ_BASE_SHIFT","VLQ_BASE","VLQ_BASE_MASK","VLQ_CONTINUATION_BIT","digit","encoded","vlq","decode","aStr","aIndex","aOutParam","continuation","strLen","shift","charCodeAt","charAt","value","rest","intToCharMap","split","number","TypeError","charCode","bigA","bigZ","littleA","littleZ","zero","nine","plus","slash","littleOffset","numberOffset","aDefaultValue","arguments","urlParse","aUrl","match","urlRegexp","scheme","auth","host","port","path","urlGenerate","aParsedUrl","url","normalize","aPath","part","isAbsolute","parts","up","splice","aRoot","aPathUrl","aRootUrl","dataUrlRegexp","joined","replace","level","index","lastIndexOf","slice","Array","substr","identity","s","isProtoString","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","strcmp","compareByGeneratedPositionsDeflated","onlyCompareGenerated","aStr1","aStr2","parseSourceMapInput","str","parse","computeSourceURL","sourceURL","sourceMapURL","parsed","substring","test","supportsNullProto","obj","_array","_set","hasNativeMap","Map","fromArray","aArray","aAllowDuplicates","set","size","getOwnPropertyNames","sStr","isDuplicate","idx","push","get","at","aIdx","generatedPositionAfter","lineA","lineB","columnA","columnB","_sorted","_last","aCallback","aThisArg","aMapping","sort","aSourceMap","aSourceMapURL","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","_absoluteSources","_sourceMapURL","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","binarySearch","quickSort","__generatedMappings","defineProperty","configurable","enumerable","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","context","order","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findSourceIndex","_findMapping","undefined","lastColumn","relativeSource","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","some","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","constructor","j","sectionIndex","section","bias","every","generatedPosition","ret","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","Math","floor","swap","ary","x","y","randomIntInRange","low","high","round","random","doQuickSort","comparator","r","pivotIndex","pivot","q","aLine","aColumn","aChunks","children","sourceContents","isSourceNode","REGEX_NEWLINE","NEWLINE_CODE","fromStringWithSourceMap","aGeneratedCode","aRelativePath","addMappingWithCode","code","node","remainingLines","remainingLinesIndex","shiftNextLine","getNextLine","lineContents","newLine","lastGeneratedLine","lastMapping","nextLine","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent"],"mappings":"CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,IACA,kBAAAG,gBAAAC,IACAD,UAAAH,GACA,gBAAAC,SACAA,QAAA,UAAAD,IAEAD,EAAA,UAAAC,KACCK,KAAA,WACD,MCAgB,UAAUC,GCN1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAP,OAGA,IAAAC,GAAAO,EAAAD,IACAP,WACAS,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAV,EAAAD,QAAAC,IAAAD,QAAAM,GAGAL,EAAAS,QAAA,EAGAT,EAAAD,QAvBA,GAAAQ,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDgBM,SAAUL,EAAQD,EAASM,GEjDjCN,EAAAe,mBAAAT,EAAA,GAAAS,mBACAf,EAAAgB,kBAAAV,EAAA,GAAAU,kBACAhB,EAAAiB,WAAAX,EAAA,IAAAW,YF6DM,SAAUhB,EAAQD,EAASM,GGhDjC,QAAAS,GAAAG,GACAA,IACAA,MAEAd,KAAAe,MAAAC,EAAAC,OAAAH,EAAA,aACAd,KAAAkB,YAAAF,EAAAC,OAAAH,EAAA,mBACAd,KAAAmB,gBAAAH,EAAAC,OAAAH,EAAA,qBACAd,KAAAoB,SAAA,GAAAC,GACArB,KAAAsB,OAAA,GAAAD,GACArB,KAAAuB,UAAA,GAAAC,GACAxB,KAAAyB,iBAAA,KAvBA,GAAAC,GAAAxB,EAAA,GACAc,EAAAd,EAAA,GACAmB,EAAAnB,EAAA,GAAAmB,SACAG,EAAAtB,EAAA,GAAAsB,WAuBAb,GAAAgB,UAAAC,SAAA,EAOAjB,EAAAkB,cACA,SAAAC,GACA,GAAAC,GAAAD,EAAAC,WACAC,EAAA,GAAArB,IACAsB,KAAAH,EAAAG,KACAF,cA2CA,OAzCAD,GAAAI,YAAA,SAAAC,GACA,GAAAC,IACAC,WACAC,KAAAH,EAAAI,cACAC,OAAAL,EAAAM,iBAIA,OAAAN,EAAAO,SACAN,EAAAM,OAAAP,EAAAO,OACA,MAAAX,IACAK,EAAAM,OAAA1B,EAAA2B,SAAAZ,EAAAK,EAAAM,SAGAN,EAAAQ,UACAN,KAAAH,EAAAU,aACAL,OAAAL,EAAAW,gBAGA,MAAAX,EAAAY,OACAX,EAAAW,KAAAZ,EAAAY,OAIAf,EAAAgB,WAAAZ,KAEAN,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAC,GAAAD,CACA,QAAApB,IACAqB,EAAApC,EAAA2B,SAAAZ,EAAAoB,IAGAnB,EAAAZ,SAAAiC,IAAAD,IACApB,EAAAZ,SAAAkC,IAAAF,EAGA,IAAAG,GAAAzB,EAAA0B,iBAAAL,EACA,OAAAI,GACAvB,EAAAyB,iBAAAN,EAAAI,KAGAvB,GAaArB,EAAAgB,UAAAqB,WACA,SAAAlC,GACA,GAAAuB,GAAArB,EAAAC,OAAAH,EAAA,aACA8B,EAAA5B,EAAAC,OAAAH,EAAA,iBACA4B,EAAA1B,EAAAC,OAAAH,EAAA,eACAiC,EAAA/B,EAAAC,OAAAH,EAAA,YAEAd,MAAAmB,iBACAnB,KAAA0D,iBAAArB,EAAAO,EAAAF,EAAAK,GAGA,MAAAL,IACAA,EAAAiB,OAAAjB,GACA1C,KAAAoB,SAAAiC,IAAAX,IACA1C,KAAAoB,SAAAkC,IAAAZ,IAIA,MAAAK,IACAA,EAAAY,OAAAZ,GACA/C,KAAAsB,OAAA+B,IAAAN,IACA/C,KAAAsB,OAAAgC,IAAAP,IAIA/C,KAAAuB,UAAA+B,KACAf,cAAAF,EAAAC,KACAG,gBAAAJ,EAAAG,OACAK,aAAA,MAAAD,KAAAN,KACAQ,eAAA,MAAAF,KAAAJ,OACAE,SACAK,UAOApC,EAAAgB,UAAA8B,iBACA,SAAAG,EAAAC,GACA,GAAAnB,GAAAkB,CACA,OAAA5D,KAAAkB,cACAwB,EAAA1B,EAAA2B,SAAA3C,KAAAkB,YAAAwB,IAGA,MAAAmB,GAGA7D,KAAAyB,mBACAzB,KAAAyB,iBAAAqC,OAAAC,OAAA,OAEA/D,KAAAyB,iBAAAT,EAAAgD,YAAAtB,IAAAmB,GACK7D,KAAAyB,yBAGLzB,MAAAyB,iBAAAT,EAAAgD,YAAAtB,IACA,IAAAoB,OAAAG,KAAAjE,KAAAyB,kBAAAyC,SACAlE,KAAAyB,iBAAA,QAqBAd,EAAAgB,UAAAwC,eACA,SAAArC,EAAA8B,EAAAQ,GACA,GAAAjB,GAAAS,CAEA,UAAAA,EAAA,CACA,SAAA9B,EAAAG,KACA,SAAAoC,OACA,gJAIAlB,GAAArB,EAAAG,KAEA,GAAAF,GAAA/B,KAAAkB,WAEA,OAAAa,IACAoB,EAAAnC,EAAA2B,SAAAZ,EAAAoB,GAIA,IAAAmB,GAAA,GAAAjD,GACAkD,EAAA,GAAAlD,EAGArB,MAAAuB,UAAAiD,gBAAA,SAAArC,GACA,GAAAA,EAAAO,SAAAS,GAAA,MAAAhB,EAAAU,aAAA,CAEA,GAAAD,GAAAd,EAAA2C,qBACAnC,KAAAH,EAAAU,aACAL,OAAAL,EAAAW,gBAEA,OAAAF,EAAAF,SAEAP,EAAAO,OAAAE,EAAAF,OACA,MAAA0B,IACAjC,EAAAO,OAAA1B,EAAA0D,KAAAN,EAAAjC,EAAAO,SAEA,MAAAX,IACAI,EAAAO,OAAA1B,EAAA2B,SAAAZ,EAAAI,EAAAO,SAEAP,EAAAU,aAAAD,EAAAN,KACAH,EAAAW,eAAAF,EAAAJ,OACA,MAAAI,EAAAG,OACAZ,EAAAY,KAAAH,EAAAG,OAKA,GAAAL,GAAAP,EAAAO,MACA,OAAAA,GAAA4B,EAAAjB,IAAAX,IACA4B,EAAAhB,IAAAZ,EAGA,IAAAK,GAAAZ,EAAAY,IACA,OAAAA,GAAAwB,EAAAlB,IAAAN,IACAwB,EAAAjB,IAAAP,IAGK/C,MACLA,KAAAoB,SAAAkD,EACAtE,KAAAsB,OAAAiD,EAGAzC,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAI,GAAAzB,EAAA0B,iBAAAL,EACA,OAAAI,IACA,MAAAa,IACAjB,EAAAnC,EAAA0D,KAAAN,EAAAjB,IAEA,MAAApB,IACAoB,EAAAnC,EAAA2B,SAAAZ,EAAAoB,IAEAnD,KAAAyD,iBAAAN,EAAAI,KAEKvD,OAcLW,EAAAgB,UAAA+B,iBACA,SAAAiB,EAAAC,EAAAC,EACAC,GAKA,GAAAF,GAAA,gBAAAA,GAAAtC,MAAA,gBAAAsC,GAAApC,OACA,SAAA6B,OACA,+OAMA,OAAAM,GAAA,QAAAA,IAAA,UAAAA,IACAA,EAAArC,KAAA,GAAAqC,EAAAnC,QAAA,IACAoC,GAAAC,GAAAC,MAIAH,GAAA,QAAAA,IAAA,UAAAA,IACAC,GAAA,QAAAA,IAAA,UAAAA,IACAD,EAAArC,KAAA,GAAAqC,EAAAnC,QAAA,GACAoC,EAAAtC,KAAA,GAAAsC,EAAApC,QAAA,GACAqC,GAKA,SAAAR,OAAA,oBAAAU,KAAAC,WACA3C,UAAAsC,EACAjC,OAAAmC,EACAjC,SAAAgC,EACA7B,KAAA+B,MASAnE,EAAAgB,UAAAsD,mBACA,WAcA,OANAC,GACA/C,EACAgD,EACAC,EAVAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,EACAC,EAAA,GAMAC,EAAA5F,KAAAuB,UAAAsE,UACAC,EAAA,EAAAC,EAAAH,EAAA1B,OAA0C4B,EAAAC,EAASD,IAAA,CAInD,GAHA3D,EAAAyD,EAAAE,GACAZ,EAAA,GAEA/C,EAAAI,gBAAA+C,EAEA,IADAD,EAAA,EACAlD,EAAAI,gBAAA+C,GACAJ,GAAA,IACAI,QAIA,IAAAQ,EAAA,GACA,IAAA9E,EAAAgF,oCAAA7D,EAAAyD,EAAAE,EAAA,IACA,QAEAZ,IAAA,IAIAA,GAAAxD,EAAAuE,OAAA9D,EAAAM,gBACA4C,GACAA,EAAAlD,EAAAM,gBAEA,MAAAN,EAAAO,SACA0C,EAAApF,KAAAoB,SAAA8E,QAAA/D,EAAAO,QACAwC,GAAAxD,EAAAuE,OAAAb,EAAAM,GACAA,EAAAN,EAGAF,GAAAxD,EAAAuE,OAAA9D,EAAAU,aAAA,EACA2C,GACAA,EAAArD,EAAAU,aAAA,EAEAqC,GAAAxD,EAAAuE,OAAA9D,EAAAW,eACAyC,GACAA,EAAApD,EAAAW,eAEA,MAAAX,EAAAY,OACAoC,EAAAnF,KAAAsB,OAAA4E,QAAA/D,EAAAY,MACAmC,GAAAxD,EAAAuE,OAAAd,EAAAM,GACAA,EAAAN,IAIAQ,GAAAT,EAGA,MAAAS,IAGAhF,EAAAgB,UAAAwE,wBACA,SAAAC,EAAAC,GACA,MAAAD,GAAAE,IAAA,SAAA5D,GACA,IAAA1C,KAAAyB,iBACA,WAEA,OAAA4E,IACA3D,EAAA1B,EAAA2B,SAAA0D,EAAA3D,GAEA,IAAA6D,GAAAvF,EAAAgD,YAAAtB,EACA,OAAAoB,QAAAnC,UAAA6E,eAAAjG,KAAAP,KAAAyB,iBAAA8E,GACAvG,KAAAyB,iBAAA8E,GACA,MACKvG,OAMLW,EAAAgB,UAAA8E,OACA,WACA,GAAAH,IACAI,QAAA1G,KAAA4B,SACAqB,QAAAjD,KAAAoB,SAAAyE,UACAc,MAAA3G,KAAAsB,OAAAuE,UACAD,SAAA5F,KAAAiF,qBAYA,OAVA,OAAAjF,KAAAe,QACAuF,EAAArE,KAAAjC,KAAAe,OAEA,MAAAf,KAAAkB,cACAoF,EAAAvE,WAAA/B,KAAAkB,aAEAlB,KAAAyB,mBACA6E,EAAAM,eAAA5G,KAAAmG,wBAAAG,EAAArD,QAAAqD,EAAAvE,aAGAuE,GAMA3F,EAAAgB,UAAAkF,SACA,WACA,MAAA9B,MAAAC,UAAAhF,KAAAyG,WAGA7G,EAAAe,sBH2EM,SAAUd,EAAQD,EAASM,GI/ajC,QAAA4G,GAAAC,GACA,MAAAA,GAAA,IACAA,GAAA,MACAA,GAAA,KASA,QAAAC,GAAAD,GACA,GAAAE,GAAA,OAAAF,GACAG,EAAAH,GAAA,CACA,OAAAE,IACAC,EACAA,EAhDA,GAAAC,GAAAjH,EAAA,GAcAkH,EAAA,EAGAC,EAAA,GAAAD,EAGAE,EAAAD,EAAA,EAGAE,EAAAF,CA+BAzH,GAAAqG,OAAA,SAAAc,GACA,GACAS,GADAC,EAAA,GAGAC,EAAAZ,EAAAC,EAEA,GACAS,GAAAE,EAAAJ,EACAI,KAAAN,EACAM,EAAA,IAGAF,GAAAD,GAEAE,GAAAN,EAAAlB,OAAAuB,SACGE,EAAA,EAEH,OAAAD,IAOA7H,EAAA+H,OAAA,SAAAC,EAAAC,EAAAC,GACA,GAGAC,GAAAP,EAHAQ,EAAAJ,EAAA1D,OACAyB,EAAA,EACAsC,EAAA,CAGA,IACA,GAAAJ,GAAAG,EACA,SAAA3D,OAAA,6CAIA,IADAmD,EAAAL,EAAAQ,OAAAC,EAAAM,WAAAL,MACAL,KAAA,EACA,SAAAnD,OAAA,yBAAAuD,EAAAO,OAAAN,EAAA,GAGAE,MAAAP,EAAAD,GACAC,GAAAF,EACA3B,GAAA6B,GAAAS,EACAA,GAAAb,QACGW,EAEHD,GAAAM,MAAApB,EAAArB,GACAmC,EAAAO,KAAAR,IJ2fM,SAAUhI,EAAQD,GK9nBxB,GAAA0I,GAAA,mEAAAC,MAAA,GAKA3I,GAAAqG,OAAA,SAAAuC,GACA,MAAAA,KAAAF,EAAApE,OACA,MAAAoE,GAAAE,EAEA,UAAAC,WAAA,6BAAAD,IAOA5I,EAAA+H,OAAA,SAAAe,GACA,GAAAC,GAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,IAEAC,EAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,GAEAC,EAAA,GACAC,EAAA,EAGA,OAAAT,IAAAD,MAAAE,EACAF,EAAAC,EAIAE,GAAAH,MAAAI,EACAJ,EAAAG,EAAAM,EAIAJ,GAAAL,MAAAM,EACAN,EAAAK,EAAAK,EAIAV,GAAAO,EACA,GAIAP,GAAAQ,EACA,IAIA,IL6oBM,SAAUrJ,EAAQD,GM7rBxB,QAAAqB,GAAAH,EAAAgE,EAAAuE,GACA,GAAAvE,IAAAhE,GACA,MAAAA,GAAAgE,EACG,QAAAwE,UAAApF,OACH,MAAAmF,EAEA,UAAAhF,OAAA,IAAAS,EAAA,6BAQA,QAAAyE,GAAAC,GACA,GAAAC,GAAAD,EAAAC,MAAAC,EACA,OAAAD,IAIAE,OAAAF,EAAA,GACAG,KAAAH,EAAA,GACAI,KAAAJ,EAAA,GACAK,KAAAL,EAAA,GACAM,KAAAN,EAAA,IAPA,KAYA,QAAAO,GAAAC,GACA,GAAAC,GAAA,EAiBA,OAhBAD,GAAAN,SACAO,GAAAD,EAAAN,OAAA,KAEAO,GAAA,KACAD,EAAAL,OACAM,GAAAD,EAAAL,KAAA,KAEAK,EAAAJ,OACAK,GAAAD,EAAAJ,MAEAI,EAAAH,OACAI,GAAA,IAAAD,EAAAH,MAEAG,EAAAF,OACAG,GAAAD,EAAAF,MAEAG,EAeA,QAAAC,GAAAC,GACA,GAAAL,GAAAK,EACAF,EAAAX,EAAAa,EACA,IAAAF,EAAA,CACA,IAAAA,EAAAH,KACA,MAAAK,EAEAL,GAAAG,EAAAH,KAKA,OAAAM,GAHAC,EAAA1K,EAAA0K,WAAAP,GAEAQ,EAAAR,EAAAxB,MAAA,OACAiC,EAAA,EAAA1E,EAAAyE,EAAArG,OAAA,EAA8C4B,GAAA,EAAQA,IACtDuE,EAAAE,EAAAzE,GACA,MAAAuE,EACAE,EAAAE,OAAA3E,EAAA,GACK,OAAAuE,EACLG,IACKA,EAAA,IACL,KAAAH,GAIAE,EAAAE,OAAA3E,EAAA,EAAA0E,GACAA,EAAA,IAEAD,EAAAE,OAAA3E,EAAA,GACA0E,KAUA,OANAT,GAAAQ,EAAA7F,KAAA,KAEA,KAAAqF,IACAA,EAAAO,EAAA,SAGAJ,GACAA,EAAAH,OACAC,EAAAE,IAEAH,EAoBA,QAAArF,GAAAgG,EAAAN,GACA,KAAAM,IACAA,EAAA,KAEA,KAAAN,IACAA,EAAA,IAEA,IAAAO,GAAApB,EAAAa,GACAQ,EAAArB,EAAAmB,EAMA,IALAE,IACAF,EAAAE,EAAAb,MAAA,KAIAY,MAAAhB,OAIA,MAHAiB,KACAD,EAAAhB,OAAAiB,EAAAjB,QAEAK,EAAAW,EAGA,IAAAA,GAAAP,EAAAX,MAAAoB,GACA,MAAAT,EAIA,IAAAQ,MAAAf,OAAAe,EAAAb,KAEA,MADAa,GAAAf,KAAAO,EACAJ,EAAAY,EAGA,IAAAE,GAAA,MAAAV,EAAAjC,OAAA,GACAiC,EACAD,EAAAO,EAAAK,QAAA,eAAAX,EAEA,OAAAQ,IACAA,EAAAb,KAAAe,EACAd,EAAAY,IAEAE,EAcA,QAAAnI,GAAA+H,EAAAN,GACA,KAAAM,IACAA,EAAA,KAGAA,IAAAK,QAAA,SAOA,KADA,GAAAC,GAAA,EACA,IAAAZ,EAAAlE,QAAAwE,EAAA,OACA,GAAAO,GAAAP,EAAAQ,YAAA,IACA,IAAAD,EAAA,EACA,MAAAb,EAOA,IADAM,IAAAS,MAAA,EAAAF,GACAP,EAAAjB,MAAA,qBACA,MAAAW,KAGAY,EAIA,MAAAI,OAAAJ,EAAA,GAAAtG,KAAA,OAAA0F,EAAAiB,OAAAX,EAAAxG,OAAA,GASA,QAAAoH,GAAAC,GACA,MAAAA,GAYA,QAAAvH,GAAA4D,GACA,MAAA4D,GAAA5D,GACA,IAAAA,EAGAA,EAIA,QAAA6D,GAAA7D,GACA,MAAA4D,GAAA5D,GACAA,EAAAuD,MAAA,GAGAvD,EAIA,QAAA4D,GAAAD,GACA,IAAAA,EACA,QAGA,IAAArH,GAAAqH,EAAArH,MAEA,IAAAA,EAAA,EACA,QAGA,SAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,MAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,IACA,KAAAqH,EAAArD,WAAAhE,EAAA,GACA,QAGA,QAAA4B,GAAA5B,EAAA,GAA2B4B,GAAA,EAAQA,IACnC,QAAAyF,EAAArD,WAAApC,GACA,QAIA,UAWA,QAAA4F,GAAAC,EAAAC,EAAAC,GACA,GAAAC,GAAAC,EAAAJ,EAAAjJ,OAAAkJ,EAAAlJ,OACA,YAAAoJ,EACAA,GAGAA,EAAAH,EAAA9I,aAAA+I,EAAA/I,aACA,IAAAiJ,EACAA,GAGAA,EAAAH,EAAA7I,eAAA8I,EAAA9I,eACA,IAAAgJ,GAAAD,EACAC,GAGAA,EAAAH,EAAAlJ,gBAAAmJ,EAAAnJ,gBACA,IAAAqJ,EACAA,GAGAA,EAAAH,EAAApJ,cAAAqJ,EAAArJ,cACA,IAAAuJ,EACAA,EAGAC,EAAAJ,EAAA5I,KAAA6I,EAAA7I,UAaA,QAAAiJ,GAAAL,EAAAC,EAAAK,GACA,GAAAH,GAAAH,EAAApJ,cAAAqJ,EAAArJ,aACA,YAAAuJ,EACAA,GAGAA,EAAAH,EAAAlJ,gBAAAmJ,EAAAnJ,gBACA,IAAAqJ,GAAAG,EACAH,GAGAA,EAAAC,EAAAJ,EAAAjJ,OAAAkJ,EAAAlJ,QACA,IAAAoJ,EACAA,GAGAA,EAAAH,EAAA9I,aAAA+I,EAAA/I,aACA,IAAAiJ,EACAA,GAGAA,EAAAH,EAAA7I,eAAA8I,EAAA9I,eACA,IAAAgJ,EACAA,EAGAC,EAAAJ,EAAA5I,KAAA6I,EAAA7I,UAIA,QAAAgJ,GAAAG,EAAAC,GACA,MAAAD,KAAAC,EACA,EAGA,OAAAD,EACA,EAGA,OAAAC,GACA,EAGAD,EAAAC,EACA,GAGA,EAOA,QAAAnG,GAAA2F,EAAAC,GACA,GAAAE,GAAAH,EAAApJ,cAAAqJ,EAAArJ,aACA,YAAAuJ,EACAA,GAGAA,EAAAH,EAAAlJ,gBAAAmJ,EAAAnJ,gBACA,IAAAqJ,EACAA,GAGAA,EAAAC,EAAAJ,EAAAjJ,OAAAkJ,EAAAlJ,QACA,IAAAoJ,EACAA,GAGAA,EAAAH,EAAA9I,aAAA+I,EAAA/I,aACA,IAAAiJ,EACAA,GAGAA,EAAAH,EAAA7I,eAAA8I,EAAA9I,eACA,IAAAgJ,EACAA,EAGAC,EAAAJ,EAAA5I,KAAA6I,EAAA7I,UASA,QAAAqJ,GAAAC,GACA,MAAAtH,MAAAuH,MAAAD,EAAAtB,QAAA,iBAAsC,KAQtC,QAAAwB,GAAAxK,EAAAyK,EAAAC,GA8BA,GA7BAD,KAAA,GAEAzK,IAEA,MAAAA,IAAAmC,OAAA,UAAAsI,EAAA,KACAzK,GAAA,KAOAyK,EAAAzK,EAAAyK,GAiBAC,EAAA,CACA,GAAAC,GAAAnD,EAAAkD,EACA,KAAAC,EACA,SAAArI,OAAA,mCAEA,IAAAqI,EAAA3C,KAAA,CAEA,GAAAkB,GAAAyB,EAAA3C,KAAAmB,YAAA,IACAD,IAAA,IACAyB,EAAA3C,KAAA2C,EAAA3C,KAAA4C,UAAA,EAAA1B,EAAA,IAGAuB,EAAA9H,EAAAsF,EAAA0C,GAAAF,GAGA,MAAArC,GAAAqC,GA3cA5M,EAAAqB,QAEA,IAAAyI,GAAA,iEACAmB,EAAA,eAeAjL,GAAA2J,WAsBA3J,EAAAoK,cAwDApK,EAAAuK,YA2DAvK,EAAA8E,OAEA9E,EAAA0K,WAAA,SAAAF,GACA,YAAAA,EAAAjC,OAAA,IAAAuB,EAAAkD,KAAAxC,IAyCAxK,EAAA+C,UAEA,IAAAkK,GAAA,WACA,GAAAC,GAAAhJ,OAAAC,OAAA,KACA,sBAAA+I,MAuBAlN,GAAAoE,YAAA6I,EAAAvB,EAAAtH,EASApE,EAAA6L,cAAAoB,EAAAvB,EAAAG,EAsEA7L,EAAA8L,6BAuCA9L,EAAAoM,sCAsDApM,EAAAoG,sCAUApG,EAAAwM,sBAqDAxM,EAAA2M,oBNqtBM,SAAU1M,EAAQD,EAASM,GO3qCjC,QAAAmB,KACArB,KAAA+M,UACA/M,KAAAgN,KAAAC,EAAA,GAAAC,KAAApJ,OAAAC,OAAA,MAZA,GAAA/C,GAAAd,EAAA,GACAmD,EAAAS,OAAAnC,UAAA6E,eACAyG,EAAA,mBAAAC,IAgBA7L,GAAA8L,UAAA,SAAAC,EAAAC,GAEA,OADAC,GAAA,GAAAjM,GACAyE,EAAA,EAAAC,EAAAqH,EAAAlJ,OAAsC4B,EAAAC,EAASD,IAC/CwH,EAAAhK,IAAA8J,EAAAtH,GAAAuH,EAEA,OAAAC,IASAjM,EAAAM,UAAA4L,KAAA,WACA,MAAAN,GAAAjN,KAAAgN,KAAAO,KAAAzJ,OAAA0J,oBAAAxN,KAAAgN,MAAA9I,QAQA7C,EAAAM,UAAA2B,IAAA,SAAAsE,EAAAyF,GACA,GAAAI,GAAAR,EAAArF,EAAA5G,EAAAgD,YAAA4D,GACA8F,EAAAT,EAAAjN,KAAAqD,IAAAuE,GAAAvE,EAAA9C,KAAAP,KAAAgN,KAAAS,GACAE,EAAA3N,KAAA+M,OAAA7I,MACAwJ,KAAAL,GACArN,KAAA+M,OAAAa,KAAAhG,GAEA8F,IACAT,EACAjN,KAAAgN,KAAAM,IAAA1F,EAAA+F,GAEA3N,KAAAgN,KAAAS,GAAAE,IAUAtM,EAAAM,UAAA0B,IAAA,SAAAuE,GACA,GAAAqF,EACA,MAAAjN,MAAAgN,KAAA3J,IAAAuE,EAEA,IAAA6F,GAAAzM,EAAAgD,YAAA4D,EACA,OAAAvE,GAAA9C,KAAAP,KAAAgN,KAAAS,IASApM,EAAAM,UAAAuE,QAAA,SAAA0B,GACA,GAAAqF,EAAA,CACA,GAAAU,GAAA3N,KAAAgN,KAAAa,IAAAjG,EACA,IAAA+F,GAAA,EACA,MAAAA,OAEG,CACH,GAAAF,GAAAzM,EAAAgD,YAAA4D,EACA,IAAAvE,EAAA9C,KAAAP,KAAAgN,KAAAS,GACA,MAAAzN,MAAAgN,KAAAS,GAIA,SAAApJ,OAAA,IAAAuD,EAAA,yBAQAvG,EAAAM,UAAAmM,GAAA,SAAAC,GACA,GAAAA,GAAA,GAAAA,EAAA/N,KAAA+M,OAAA7I,OACA,MAAAlE,MAAA+M,OAAAgB,EAEA,UAAA1J,OAAA,yBAAA0J,IAQA1M,EAAAM,UAAAkE,QAAA,WACA,MAAA7F,MAAA+M,OAAA5B,SAGAvL,EAAAyB,YPmsCM,SAAUxB,EAAQD,EAASM,GQ9yCjC,QAAA8N,GAAArC,EAAAC,GAEA,GAAAqC,GAAAtC,EAAApJ,cACA2L,EAAAtC,EAAArJ,cACA4L,EAAAxC,EAAAlJ,gBACA2L,EAAAxC,EAAAnJ,eACA,OAAAyL,GAAAD,GAAAC,GAAAD,GAAAG,GAAAD,GACAnN,EAAAgF,oCAAA2F,EAAAC,IAAA,EAQA,QAAApK,KACAxB,KAAA+M,UACA/M,KAAAqO,SAAA,EAEArO,KAAAsO,OAAgB/L,eAAA,EAAAE,gBAAA,GAzBhB,GAAAzB,GAAAd,EAAA,EAkCAsB,GAAAG,UAAA6C,gBACA,SAAA+J,EAAAC,GACAxO,KAAA+M,OAAA7J,QAAAqL,EAAAC,IAQAhN,EAAAG,UAAA2B,IAAA,SAAAmL,GACAT,EAAAhO,KAAAsO,MAAAG,IACAzO,KAAAsO,MAAAG,EACAzO,KAAA+M,OAAAa,KAAAa,KAEAzO,KAAAqO,SAAA,EACArO,KAAA+M,OAAAa,KAAAa,KAaAjN,EAAAG,UAAAkE,QAAA,WAKA,MAJA7F,MAAAqO,UACArO,KAAA+M,OAAA2B,KAAA1N,EAAAgF,qCACAhG,KAAAqO,SAAA,GAEArO,KAAA+M,QAGAnN,EAAA4B,eRk0CM,SAAU3B,EAAQD,EAASM,GSn4CjC,QAAAU,GAAA+N,EAAAC,GACA,GAAAC,GAAAF,CAKA,OAJA,gBAAAA,KACAE,EAAA7N,EAAAoL,oBAAAuC,IAGA,MAAAE,EAAAC,SACA,GAAAC,GAAAF,EAAAD,GACA,GAAAI,GAAAH,EAAAD,GA0QA,QAAAI,GAAAL,EAAAC,GACA,GAAAC,GAAAF,CACA,iBAAAA,KACAE,EAAA7N,EAAAoL,oBAAAuC,GAGA,IAAAjI,GAAA1F,EAAAC,OAAA4N,EAAA,WACA5L,EAAAjC,EAAAC,OAAA4N,EAAA,WAGAlI,EAAA3F,EAAAC,OAAA4N,EAAA,YACA9M,EAAAf,EAAAC,OAAA4N,EAAA,mBACAjI,EAAA5F,EAAAC,OAAA4N,EAAA,uBACAjJ,EAAA5E,EAAAC,OAAA4N,EAAA,YACA5M,EAAAjB,EAAAC,OAAA4N,EAAA,YAIA,IAAAnI,GAAA1G,KAAA4B,SACA,SAAAyC,OAAA,wBAAAqC,EAGA3E,KACAA,EAAAf,EAAAmJ,UAAApI,IAGAkB,IACAqD,IAAA3C,QAIA2C,IAAAtF,EAAAmJ,WAKA7D,IAAA,SAAA5D,GACA,MAAAX,IAAAf,EAAAsJ,WAAAvI,IAAAf,EAAAsJ,WAAA5H,GACA1B,EAAA2B,SAAAZ,EAAAW,GACAA,IAOA1C,KAAAsB,OAAAD,EAAA8L,UAAAxG,EAAAL,IAAA3C,SAAA,GACA3D,KAAAoB,SAAAC,EAAA8L,UAAAlK,GAAA,GAEAjD,KAAAiP,iBAAAjP,KAAAoB,SAAAyE,UAAAS,IAAA,SAAAiF,GACA,MAAAvK,GAAAuL,iBAAAxK,EAAAwJ,EAAAqD,KAGA5O,KAAA+B,aACA/B,KAAA4G,iBACA5G,KAAAuB,UAAAqE,EACA5F,KAAAkP,cAAAN,EACA5O,KAAAiC,OA4GA,QAAAkN,KACAnP,KAAAuC,cAAA,EACAvC,KAAAyC,gBAAA,EACAzC,KAAA0C,OAAA,KACA1C,KAAA6C,aAAA,KACA7C,KAAA8C,eAAA,KACA9C,KAAA+C,KAAA,KAkaA,QAAAgM,GAAAJ,EAAAC,GACA,GAAAC,GAAAF,CACA,iBAAAA,KACAE,EAAA7N,EAAAoL,oBAAAuC,GAGA,IAAAjI,GAAA1F,EAAAC,OAAA4N,EAAA,WACAC,EAAA9N,EAAAC,OAAA4N,EAAA,WAEA,IAAAnI,GAAA1G,KAAA4B,SACA,SAAAyC,OAAA,wBAAAqC,EAGA1G,MAAAoB,SAAA,GAAAC,GACArB,KAAAsB,OAAA,GAAAD,EAEA,IAAA+N,IACA9M,MAAA,EACAE,OAAA,EAEAxC,MAAAqP,UAAAP,EAAAxI,IAAA,SAAAiF,GACA,GAAAA,EAAArB,IAGA,SAAA7F,OAAA,qDAEA,IAAAiL,GAAAtO,EAAAC,OAAAsK,EAAA,UACAgE,EAAAvO,EAAAC,OAAAqO,EAAA,QACAE,EAAAxO,EAAAC,OAAAqO,EAAA,SAEA,IAAAC,EAAAH,EAAA9M,MACAiN,IAAAH,EAAA9M,MAAAkN,EAAAJ,EAAA5M,OACA,SAAA6B,OAAA,uDAIA,OAFA+K,GAAAE,GAGAG,iBAGAlN,cAAAgN,EAAA,EACA9M,gBAAA+M,EAAA,GAEAE,SAAA,GAAA9O,GAAAI,EAAAC,OAAAsK,EAAA,OAAAqD,MAh5BA,GAAA5N,GAAAd,EAAA,GACAyP,EAAAzP,EAAA,GACAmB,EAAAnB,EAAA,GAAAmB,SACAK,EAAAxB,EAAA,GACA0P,EAAA1P,EAAA,GAAA0P,SAaAhP,GAAAiB,cAAA,SAAA8M,EAAAC,GACA,MAAAI,GAAAnN,cAAA8M,EAAAC,IAMAhO,EAAAe,UAAAC,SAAA,EAgCAhB,EAAAe,UAAAkO,oBAAA,KACA/L,OAAAgM,eAAAlP,EAAAe,UAAA,sBACAoO,cAAA,EACAC,YAAA,EACAnC,IAAA,WAKA,MAJA7N,MAAA6P,qBACA7P,KAAAiQ,eAAAjQ,KAAAuB,UAAAvB,KAAA+B,YAGA/B,KAAA6P,uBAIAjP,EAAAe,UAAAuO,mBAAA,KACApM,OAAAgM,eAAAlP,EAAAe,UAAA,qBACAoO,cAAA,EACAC,YAAA,EACAnC,IAAA,WAKA,MAJA7N,MAAAkQ,oBACAlQ,KAAAiQ,eAAAjQ,KAAAuB,UAAAvB,KAAA+B,YAGA/B,KAAAkQ,sBAIAtP,EAAAe,UAAAwO,wBACA,SAAAvI,EAAAqD,GACA,GAAAxK,GAAAmH,EAAAO,OAAA8C,EACA,aAAAxK,GAAmB,MAAAA,GAQnBG,EAAAe,UAAAsO,eACA,SAAArI,EAAAvB,GACA,SAAAhC,OAAA,6CAGAzD,EAAAwP,gBAAA,EACAxP,EAAAyP,eAAA,EAEAzP,EAAA0P,qBAAA,EACA1P,EAAA2P,kBAAA,EAkBA3P,EAAAe,UAAAO,YACA,SAAAqM,EAAAiC,EAAAC,GACA,GAGA7K,GAHA8K,EAAAF,GAAA,KACAG,EAAAF,GAAA7P,EAAAwP,eAGA,QAAAO,GACA,IAAA/P,GAAAwP,gBACAxK,EAAA5F,KAAA4Q,kBACA,MACA,KAAAhQ,GAAAyP,eACAzK,EAAA5F,KAAA6Q,iBACA,MACA,SACA,SAAAxM,OAAA,+BAGA,GAAAtC,GAAA/B,KAAA+B,UACA6D,GAAAU,IAAA,SAAAnE,GACA,GAAAO,GAAA,OAAAP,EAAAO,OAAA,KAAA1C,KAAAoB,SAAA0M,GAAA3L,EAAAO,OAEA,OADAA,GAAA1B,EAAAuL,iBAAAxK,EAAAW,EAAA1C,KAAAkP,gBAEAxM,SACAH,cAAAJ,EAAAI,cACAE,gBAAAN,EAAAM,gBACAI,aAAAV,EAAAU,aACAC,eAAAX,EAAAW,eACAC,KAAA,OAAAZ,EAAAY,KAAA,KAAA/C,KAAAsB,OAAAwM,GAAA3L,EAAAY,QAEK/C,MAAAkD,QAAAqL,EAAAmC,IAyBL9P,EAAAe,UAAAmP,yBACA,SAAAhQ,GACA,GAAAwB,GAAAtB,EAAAC,OAAAH,EAAA,QAMAiQ,GACArO,OAAA1B,EAAAC,OAAAH,EAAA,UACA+B,aAAAP,EACAQ,eAAA9B,EAAAC,OAAAH,EAAA,YAIA,IADAiQ,EAAArO,OAAA1C,KAAAgR,iBAAAD,EAAArO,QACAqO,EAAArO,OAAA,EACA,QAGA,IAAAkD,MAEAqF,EAAAjL,KAAAiR,aAAAF,EACA/Q,KAAA6Q,kBACA,eACA,iBACA7P,EAAA0K,2BACAiE,EAAAY,kBACA,IAAAtF,GAAA,GACA,GAAA9I,GAAAnC,KAAA6Q,kBAAA5F,EAEA,IAAAiG,SAAApQ,EAAA0B,OAOA,IANA,GAAAK,GAAAV,EAAAU,aAMAV,KAAAU,kBACA+C,EAAAgI,MACAtL,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAgP,WAAAnQ,EAAAC,OAAAkB,EAAA,8BAGAA,EAAAnC,KAAA6Q,oBAAA5F,OASA,KANA,GAAAnI,GAAAX,EAAAW,eAMAX,GACAA,EAAAU,eAAAP,GACAH,EAAAW,mBACA8C,EAAAgI,MACAtL,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAgP,WAAAnQ,EAAAC,OAAAkB,EAAA,8BAGAA,EAAAnC,KAAA6Q,oBAAA5F,GAKA,MAAArF,IAGAhG,EAAAgB,oBAgGAoO,EAAArN,UAAAmC,OAAAC,OAAAnD,EAAAe,WACAqN,EAAArN,UAAA+N,SAAA9O,EAMAoO,EAAArN,UAAAqP,iBAAA,SAAAnM,GACA,GAAAuM,GAAAvM,CAKA,IAJA,MAAA7E,KAAA+B,aACAqP,EAAApQ,EAAA2B,SAAA3C,KAAA+B,WAAAqP,IAGApR,KAAAoB,SAAAiC,IAAA+N,GACA,MAAApR,MAAAoB,SAAA8E,QAAAkL,EAKA,IAAAtL,EACA,KAAAA,EAAA,EAAaA,EAAA9F,KAAAiP,iBAAA/K,SAAkC4B,EAC/C,GAAA9F,KAAAiP,iBAAAnJ,IAAAjB,EACA,MAAAiB,EAIA,WAYAkJ,EAAAnN,cACA,SAAA8M,EAAAC,GACA,GAAAyC,GAAAvN,OAAAC,OAAAiL,EAAArN,WAEAgF,EAAA0K,EAAA/P,OAAAD,EAAA8L,UAAAwB,EAAArN,OAAAuE,WAAA,GACA5C,EAAAoO,EAAAjQ,SAAAC,EAAA8L,UAAAwB,EAAAvN,SAAAyE,WAAA,EACAwL,GAAAtP,WAAA4M,EAAAzN,YACAmQ,EAAAzK,eAAA+H,EAAAxI,wBAAAkL,EAAAjQ,SAAAyE,UACAwL,EAAAtP,YACAsP,EAAApP,KAAA0M,EAAA5N,MACAsQ,EAAAnC,cAAAN,EACAyC,EAAApC,iBAAAoC,EAAAjQ,SAAAyE,UAAAS,IAAA,SAAAiF,GACA,MAAAvK,GAAAuL,iBAAA8E,EAAAtP,WAAAwJ,EAAAqD,IAYA,QAJA0C,GAAA3C,EAAApN,UAAAsE,UAAAsF,QACAoG,EAAAF,EAAAxB,uBACA2B,EAAAH,EAAAnB,sBAEApK,EAAA,EAAA5B,EAAAoN,EAAApN,OAAsD4B,EAAA5B,EAAY4B,IAAA,CAClE,GAAA2L,GAAAH,EAAAxL,GACA4L,EAAA,GAAAvC,EACAuC,GAAAnP,cAAAkP,EAAAlP,cACAmP,EAAAjP,gBAAAgP,EAAAhP,gBAEAgP,EAAA/O,SACAgP,EAAAhP,OAAAO,EAAAiD,QAAAuL,EAAA/O,QACAgP,EAAA7O,aAAA4O,EAAA5O,aACA6O,EAAA5O,eAAA2O,EAAA3O,eAEA2O,EAAA1O,OACA2O,EAAA3O,KAAA4D,EAAAT,QAAAuL,EAAA1O,OAGAyO,EAAA5D,KAAA8D,IAGAH,EAAA3D,KAAA8D,GAKA,MAFA9B,GAAAyB,EAAAnB,mBAAAlP,EAAA0K,4BAEA2F,GAMArC,EAAArN,UAAAC,SAAA,EAKAkC,OAAAgM,eAAAd,EAAArN,UAAA,WACAkM,IAAA,WACA,MAAA7N,MAAAiP,iBAAA9D,WAqBA6D,EAAArN,UAAAsO,eACA,SAAArI,EAAAvB,GAeA,IAdA,GAYAlE,GAAAkK,EAAAsF,EAAAC,EAAAxJ,EAZA7F,EAAA,EACA8C,EAAA,EACAG,EAAA,EACAD,EAAA,EACAG,EAAA,EACAD,EAAA,EACAvB,EAAA0D,EAAA1D,OACA+G,EAAA,EACA4G,KACAC,KACAC,KACAT,KAGArG,EAAA/G,GACA,SAAA0D,EAAAO,OAAA8C,GACA1I,IACA0I,IACA5F,EAAA,MAEA,UAAAuC,EAAAO,OAAA8C,GACAA,QAEA,CASA,IARA9I,EAAA,GAAAgN,GACAhN,EAAAI,gBAOAqP,EAAA3G,EAAyB2G,EAAA1N,IACzBlE,KAAAmQ,wBAAAvI,EAAAgK,GADuCA,KAQvC,GAHAvF,EAAAzE,EAAAuD,MAAAF,EAAA2G,GAEAD,EAAAE,EAAAxF,GAEApB,GAAAoB,EAAAnI,WACS,CAET,IADAyN,KACA1G,EAAA2G,GACAlQ,EAAAiG,OAAAC,EAAAqD,EAAA6G,GACA1J,EAAA0J,EAAA1J,MACA6C,EAAA6G,EAAAzJ,KACAsJ,EAAA/D,KAAAxF,EAGA,QAAAuJ,EAAAzN,OACA,SAAAG,OAAA,yCAGA,QAAAsN,EAAAzN,OACA,SAAAG,OAAA,yCAGAwN,GAAAxF,GAAAsF,EAIAxP,EAAAM,gBAAA4C,EAAAsM,EAAA,GACAtM,EAAAlD,EAAAM,gBAEAkP,EAAAzN,OAAA,IAEA/B,EAAAO,OAAAgD,EAAAiM,EAAA,GACAjM,GAAAiM,EAAA,GAGAxP,EAAAU,aAAA2C,EAAAmM,EAAA,GACAnM,EAAArD,EAAAU,aAEAV,EAAAU,cAAA,EAGAV,EAAAW,eAAAyC,EAAAoM,EAAA,GACApM,EAAApD,EAAAW,eAEA6O,EAAAzN,OAAA,IAEA/B,EAAAY,KAAA0C,EAAAkM,EAAA,GACAlM,GAAAkM,EAAA,KAIAL,EAAA1D,KAAAzL,GACA,gBAAAA,GAAAU,cACAkP,EAAAnE,KAAAzL,GAKAyN,EAAA0B,EAAAtQ,EAAAgL,qCACAhM,KAAA6P,oBAAAyB,EAEA1B,EAAAmC,EAAA/Q,EAAA0K,4BACA1L,KAAAkQ,mBAAA6B,GAOA/C,EAAArN,UAAAsP,aACA,SAAAe,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,GAMA,GAAAL,EAAAE,IAAA,EACA,SAAAzJ,WAAA,gDACAuJ,EAAAE,GAEA,IAAAF,EAAAG,GAAA,EACA,SAAA1J,WAAA,kDACAuJ,EAAAG,GAGA,OAAAxC,GAAA2C,OAAAN,EAAAC,EAAAG,EAAAC,IAOArD,EAAArN,UAAA4Q,mBACA,WACA,OAAAtH,GAAA,EAAuBA,EAAAjL,KAAA4Q,mBAAA1M,SAAwC+G,EAAA,CAC/D,GAAA9I,GAAAnC,KAAA4Q,mBAAA3F,EAMA,IAAAA,EAAA,EAAAjL,KAAA4Q,mBAAA1M,OAAA,CACA,GAAAsO,GAAAxS,KAAA4Q,mBAAA3F,EAAA,EAEA,IAAA9I,EAAAI,gBAAAiQ,EAAAjQ,cAAA,CACAJ,EAAAsQ,oBAAAD,EAAA/P,gBAAA,CACA,WAKAN,EAAAsQ,oBAAAC,MA4BA1D,EAAArN,UAAA8C,oBACA,SAAA3D,GACA,GAAAiQ,IACAxO,cAAAvB,EAAAC,OAAAH,EAAA,QACA2B,gBAAAzB,EAAAC,OAAAH,EAAA,WAGAmK,EAAAjL,KAAAiR,aACAF,EACA/Q,KAAA4Q,mBACA,gBACA,kBACA5P,EAAAgL,oCACAhL,EAAAC,OAAAH,EAAA,OAAAF,EAAA0P,sBAGA,IAAArF,GAAA,GACA,GAAA9I,GAAAnC,KAAA4Q,mBAAA3F,EAEA,IAAA9I,EAAAI,gBAAAwO,EAAAxO,cAAA,CACA,GAAAG,GAAA1B,EAAAC,OAAAkB,EAAA,cACA,QAAAO,IACAA,EAAA1C,KAAAoB,SAAA0M,GAAApL,GACAA,EAAA1B,EAAAuL,iBAAAvM,KAAA+B,WAAAW,EAAA1C,KAAAkP,eAEA,IAAAnM,GAAA/B,EAAAC,OAAAkB,EAAA,YAIA,OAHA,QAAAY,IACAA,EAAA/C,KAAAsB,OAAAwM,GAAA/K,KAGAL,SACAJ,KAAAtB,EAAAC,OAAAkB,EAAA,qBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,uBACAY,SAKA,OACAL,OAAA,KACAJ,KAAA,KACAE,OAAA,KACAO,KAAA,OAQAiM,EAAArN,UAAAgR,wBACA,WACA,QAAA3S,KAAA4G,iBAGA5G,KAAA4G,eAAA1C,QAAAlE,KAAAoB,SAAAmM,SACAvN,KAAA4G,eAAAgM,KAAA,SAAAC,GAA+C,aAAAA,MAQ/C7D,EAAArN,UAAA6B,iBACA,SAAAqB,EAAAiO,GACA,IAAA9S,KAAA4G,eACA,WAGA,IAAAqE,GAAAjL,KAAAgR,iBAAAnM,EACA,IAAAoG,GAAA,EACA,MAAAjL,MAAA4G,eAAAqE,EAGA,IAAAmG,GAAAvM,CACA,OAAA7E,KAAA+B,aACAqP,EAAApQ,EAAA2B,SAAA3C,KAAA+B,WAAAqP,GAGA,IAAAlH,EACA,UAAAlK,KAAA+B,aACAmI,EAAAlJ,EAAAuI,SAAAvJ,KAAA+B,aAAA,CAKA,GAAAgR,GAAA3B,EAAArG,QAAA,gBACA,YAAAb,EAAAP,QACA3J,KAAAoB,SAAAiC,IAAA0P,GACA,MAAA/S,MAAA4G,eAAA5G,KAAAoB,SAAA8E,QAAA6M,GAGA,MAAA7I,EAAAH,MAAA,KAAAG,EAAAH,OACA/J,KAAAoB,SAAAiC,IAAA,IAAA+N,GACA,MAAApR,MAAA4G,eAAA5G,KAAAoB,SAAA8E,QAAA,IAAAkL,IAQA,GAAA0B,EACA,WAGA,UAAAzO,OAAA,IAAA+M,EAAA,+BA2BApC,EAAArN,UAAAqR,qBACA,SAAAlS,GACA,GAAA4B,GAAA1B,EAAAC,OAAAH,EAAA,SAEA,IADA4B,EAAA1C,KAAAgR,iBAAAtO,GACAA,EAAA,EACA,OACAJ,KAAA,KACAE,OAAA,KACA2O,WAAA,KAIA,IAAAJ,IACArO,SACAG,aAAA7B,EAAAC,OAAAH,EAAA,QACAgC,eAAA9B,EAAAC,OAAAH,EAAA,WAGAmK,EAAAjL,KAAAiR,aACAF,EACA/Q,KAAA6Q,kBACA,eACA,iBACA7P,EAAA0K,2BACA1K,EAAAC,OAAAH,EAAA,OAAAF,EAAA0P,sBAGA,IAAArF,GAAA,GACA,GAAA9I,GAAAnC,KAAA6Q,kBAAA5F,EAEA,IAAA9I,EAAAO,SAAAqO,EAAArO,OACA,OACAJ,KAAAtB,EAAAC,OAAAkB,EAAA,sBACAK,OAAAxB,EAAAC,OAAAkB,EAAA,wBACAgP,WAAAnQ,EAAAC,OAAAkB,EAAA,6BAKA,OACAG,KAAA,KACAE,OAAA,KACA2O,WAAA,OAIAvR,EAAAoP,yBAmGAD,EAAApN,UAAAmC,OAAAC,OAAAnD,EAAAe,WACAoN,EAAApN,UAAAsR,YAAArS,EAKAmO,EAAApN,UAAAC,SAAA,EAKAkC,OAAAgM,eAAAf,EAAApN,UAAA,WACAkM,IAAA,WAEA,OADA5K,MACA6C,EAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAC9C,OAAAoN,GAAA,EAAqBA,EAAAlT,KAAAqP,UAAAvJ,GAAA4J,SAAAzM,QAAAiB,OAA+CgP,IACpEjQ,EAAA2K,KAAA5N,KAAAqP,UAAAvJ,GAAA4J,SAAAzM,QAAAiQ,GAGA,OAAAjQ,MAuBA8L,EAAApN,UAAA8C,oBACA,SAAA3D,GACA,GAAAiQ,IACAxO,cAAAvB,EAAAC,OAAAH,EAAA,QACA2B,gBAAAzB,EAAAC,OAAAH,EAAA,WAKAqS,EAAAxD,EAAA2C,OAAAvB,EAAA/Q,KAAAqP,UACA,SAAA0B,EAAAqC,GACA,GAAAtH,GAAAiF,EAAAxO,cAAA6Q,EAAA3D,gBAAAlN,aACA,OAAAuJ,GACAA,EAGAiF,EAAAtO,gBACA2Q,EAAA3D,gBAAAhN,kBAEA2Q,EAAApT,KAAAqP,UAAA8D,EAEA,OAAAC,GASAA,EAAA1D,SAAAjL,qBACAnC,KAAAyO,EAAAxO,eACA6Q,EAAA3D,gBAAAlN,cAAA,GACAC,OAAAuO,EAAAtO,iBACA2Q,EAAA3D,gBAAAlN,gBAAAwO,EAAAxO,cACA6Q,EAAA3D,gBAAAhN,gBAAA,EACA,GACA4Q,KAAAvS,EAAAuS,QAdA3Q,OAAA,KACAJ,KAAA,KACAE,OAAA,KACAO,KAAA,OAmBAgM,EAAApN,UAAAgR,wBACA,WACA,MAAA3S,MAAAqP,UAAAiE,MAAA,SAAA/H,GACA,MAAAA,GAAAmE,SAAAiD,6BASA5D,EAAApN,UAAA6B,iBACA,SAAAqB,EAAAiO,GACA,OAAAhN,GAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAAA,CAC9C,GAAAsN,GAAApT,KAAAqP,UAAAvJ,GAEAvC,EAAA6P,EAAA1D,SAAAlM,iBAAAqB,GAAA,EACA,IAAAtB,EACA,MAAAA,GAGA,GAAAuP,EACA,WAGA,UAAAzO,OAAA,IAAAQ,EAAA,+BAsBAkK,EAAApN,UAAAqR,qBACA,SAAAlS,GACA,OAAAgF,GAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAAA,CAC9C,GAAAsN,GAAApT,KAAAqP,UAAAvJ,EAIA,IAAAsN,EAAA1D,SAAAsB,iBAAAhQ,EAAAC,OAAAH,EAAA,iBAGA,GAAAyS,GAAAH,EAAA1D,SAAAsD,qBAAAlS,EACA,IAAAyS,EAAA,CACA,GAAAC,IACAlR,KAAAiR,EAAAjR,MACA8Q,EAAA3D,gBAAAlN,cAAA,GACAC,OAAA+Q,EAAA/Q,QACA4Q,EAAA3D,gBAAAlN,gBAAAgR,EAAAjR,KACA8Q,EAAA3D,gBAAAhN,gBAAA,EACA,GAEA,OAAA+Q,KAIA,OACAlR,KAAA,KACAE,OAAA,OASAuM,EAAApN,UAAAsO,eACA,SAAArI,EAAAvB,GACArG,KAAA6P,uBACA7P,KAAAkQ,qBACA,QAAApK,GAAA,EAAmBA,EAAA9F,KAAAqP,UAAAnL,OAA2B4B,IAG9C,OAFAsN,GAAApT,KAAAqP,UAAAvJ,GACA2N,EAAAL,EAAA1D,SAAAkB,mBACAsC,EAAA,EAAqBA,EAAAO,EAAAvP,OAA4BgP,IAAA,CACjD,GAAA/Q,GAAAsR,EAAAP,GAEAxQ,EAAA0Q,EAAA1D,SAAAtO,SAAA0M,GAAA3L,EAAAO,OACAA,GAAA1B,EAAAuL,iBAAA6G,EAAA1D,SAAA3N,WAAAW,EAAA1C,KAAAkP,eACAlP,KAAAoB,SAAAkC,IAAAZ,GACAA,EAAA1C,KAAAoB,SAAA8E,QAAAxD,EAEA,IAAAK,GAAA,IACAZ,GAAAY,OACAA,EAAAqQ,EAAA1D,SAAApO,OAAAwM,GAAA3L,EAAAY,MACA/C,KAAAsB,OAAAgC,IAAAP,GACAA,EAAA/C,KAAAsB,OAAA4E,QAAAnD,GAOA,IAAA2Q,IACAhR,SACAH,cAAAJ,EAAAI,eACA6Q,EAAA3D,gBAAAlN,cAAA,GACAE,gBAAAN,EAAAM,iBACA2Q,EAAA3D,gBAAAlN,gBAAAJ,EAAAI,cACA6Q,EAAA3D,gBAAAhN,gBAAA,EACA,GACAI,aAAAV,EAAAU,aACAC,eAAAX,EAAAW,eACAC,OAGA/C,MAAA6P,oBAAAjC,KAAA8F,GACA,gBAAAA,GAAA7Q,cACA7C,KAAAkQ,mBAAAtC,KAAA8F,GAKA9D,EAAA5P,KAAA6P,oBAAA7O,EAAAgL,qCACA4D,EAAA5P,KAAAkQ,mBAAAlP,EAAA0K,6BAGA9L,EAAAmP,4BTu5CM,SAAUlP,EAAQD,GUx/ExB,QAAA+T,GAAAC,EAAAC,EAAA7B,EAAA8B,EAAAC,EAAA1B,GAUA,GAAA2B,GAAAC,KAAAC,OAAAL,EAAAD,GAAA,GAAAA,EACA9H,EAAAiI,EAAA/B,EAAA8B,EAAAE,IAAA,EACA,YAAAlI,EAEAkI,EAEAlI,EAAA,EAEA+H,EAAAG,EAAA,EAEAL,EAAAK,EAAAH,EAAA7B,EAAA8B,EAAAC,EAAA1B,GAKAA,GAAAzS,EAAA2Q,kBACAsD,EAAAC,EAAA5P,OAAA2P,GAAA,EAEAG,EAKAA,EAAAJ,EAAA,EAEAD,EAAAC,EAAAI,EAAAhC,EAAA8B,EAAAC,EAAA1B,GAIAA,GAAAzS,EAAA2Q,kBACAyD,EAEAJ,EAAA,KAAAA,EA1DAhU,EAAA0Q,qBAAA,EACA1Q,EAAA2Q,kBAAA,EAgFA3Q,EAAA0S,OAAA,SAAAN,EAAA8B,EAAAC,EAAA1B,GACA,OAAAyB,EAAA5P,OACA,QAGA,IAAA+G,GAAA0I,GAAA,EAAAG,EAAA5P,OAAA8N,EAAA8B,EACAC,EAAA1B,GAAAzS,EAAA0Q,qBACA,IAAArF,EAAA,EACA,QAMA,MAAAA,EAAA,MACA,IAAA8I,EAAAD,EAAA7I,GAAA6I,EAAA7I,EAAA,UAGAA,CAGA,OAAAA,KVuhFM,SAAUpL,EAAQD,GWzmFxB,QAAAuU,GAAAC,EAAAC,EAAAC,GACA,GAAAxC,GAAAsC,EAAAC,EACAD,GAAAC,GAAAD,EAAAE,GACAF,EAAAE,GAAAxC,EAWA,QAAAyC,GAAAC,EAAAC,GACA,MAAAR,MAAAS,MAAAF,EAAAP,KAAAU,UAAAF,EAAAD,IAeA,QAAAI,GAAAR,EAAAS,EAAAnU,EAAAoU,GAKA,GAAApU,EAAAoU,EAAA,CAYA,GAAAC,GAAAR,EAAA7T,EAAAoU,GACAhP,EAAApF,EAAA,CAEAyT,GAAAC,EAAAW,EAAAD,EASA,QARAE,GAAAZ,EAAAU,GAQA5B,EAAAxS,EAAmBwS,EAAA4B,EAAO5B,IAC1B2B,EAAAT,EAAAlB,GAAA8B,IAAA,IACAlP,GAAA,EACAqO,EAAAC,EAAAtO,EAAAoN,GAIAiB,GAAAC,EAAAtO,EAAA,EAAAoN,EACA,IAAA+B,GAAAnP,EAAA,CAIA8O,GAAAR,EAAAS,EAAAnU,EAAAuU,EAAA,GACAL,EAAAR,EAAAS,EAAAI,EAAA,EAAAH,IAYAlV,EAAAgQ,UAAA,SAAAwE,EAAAS,GACAD,EAAAR,EAAAS,EAAA,EAAAT,EAAAlQ,OAAA,KX4oFM,SAAUrE,EAAQD,EAASM,GY1tFjC,QAAAW,GAAAqU,EAAAC,EAAAtQ,EAAAuQ,EAAAtQ,GACA9E,KAAAqV,YACArV,KAAAsV,kBACAtV,KAAAsC,KAAA,MAAA4S,EAAA,KAAAA,EACAlV,KAAAwC,OAAA,MAAA2S,EAAA,KAAAA,EACAnV,KAAA0C,OAAA,MAAAmC,EAAA,KAAAA,EACA7E,KAAA+C,KAAA,MAAA+B,EAAA,KAAAA,EACA9E,KAAAuV,IAAA,EACA,MAAAH,GAAApV,KAAAsD,IAAA8R,GAnCA,GAAAzU,GAAAT,EAAA,GAAAS,mBACAK,EAAAd,EAAA,GAIAsV,EAAA,UAGAC,EAAA,GAKAF,EAAA,oBAiCA1U,GAAA6U,wBACA,SAAAC,EAAA7T,EAAA8T,GA+FA,QAAAC,GAAA1T,EAAA2T,GACA,UAAA3T,GAAA+O,SAAA/O,EAAAO,OACAqT,EAAAzS,IAAAwS,OACO,CACP,GAAApT,GAAAkT,EACA5U,EAAA0D,KAAAkR,EAAAzT,EAAAO,QACAP,EAAAO,MACAqT,GAAAzS,IAAA,GAAAzC,GAAAsB,EAAAU,aACAV,EAAAW,eACAJ,EACAoT,EACA3T,EAAAY,QAvGA,GAAAgT,GAAA,GAAAlV,GAMAmV,EAAAL,EAAApN,MAAAiN,GACAS,EAAA,EACAC,EAAA,WAMA,QAAAC,KACA,MAAAF,GAAAD,EAAA9R,OACA8R,EAAAC,KAAA/E,OAPA,GAAAkF,GAAAD,IAEAE,EAAAF,KAAA,EACA,OAAAC,GAAAC,GASAC,EAAA,EAAA7D,EAAA,EAKA8D,EAAA,IAgEA,OA9DAzU,GAAAI,YAAA,SAAAC,GACA,UAAAoU,EAAA,CAGA,KAAAD,EAAAnU,EAAAI,eAMS,CAIT,GAAAiU,GAAAR,EAAAC,IAAA,GACAH,EAAAU,EAAAnL,OAAA,EAAAlJ,EAAAM,gBACAgQ,EAOA,OANAuD,GAAAC,GAAAO,EAAAnL,OAAAlJ,EAAAM,gBACAgQ,GACAA,EAAAtQ,EAAAM,gBACAoT,EAAAU,EAAAT,QAEAS,EAAApU,GAhBA0T,EAAAU,EAAAL,KACAI,IACA7D,EAAA,EAqBA,KAAA6D,EAAAnU,EAAAI,eACAwT,EAAAzS,IAAA4S,KACAI,GAEA,IAAA7D,EAAAtQ,EAAAM,gBAAA,CACA,GAAA+T,GAAAR,EAAAC,IAAA,EACAF,GAAAzS,IAAAkT,EAAAnL,OAAA,EAAAlJ,EAAAM,kBACAuT,EAAAC,GAAAO,EAAAnL,OAAAlJ,EAAAM,iBACAgQ,EAAAtQ,EAAAM,gBAEA8T,EAAApU,GACKnC,MAELiW,EAAAD,EAAA9R,SACAqS,GAEAV,EAAAU,EAAAL,KAGAH,EAAAzS,IAAA0S,EAAAvL,OAAAwL,GAAAvR,KAAA,MAIA5C,EAAAmB,QAAAC,QAAA,SAAAC,GACA,GAAAI,GAAAzB,EAAA0B,iBAAAL,EACA,OAAAI,IACA,MAAAqS,IACAzS,EAAAnC,EAAA0D,KAAAkR,EAAAzS,IAEA4S,EAAAtS,iBAAAN,EAAAI,MAIAwS,GAwBAlV,EAAAc,UAAA2B,IAAA,SAAAmT,GACA,GAAArL,MAAAsL,QAAAD,GACAA,EAAAvT,QAAA,SAAAyT,GACA3W,KAAAsD,IAAAqT,IACK3W,UAEL,KAAAyW,EAAAlB,IAAA,gBAAAkB,GAMA,SAAAhO,WACA,8EAAAgO,EANAA,IACAzW,KAAAqV,SAAAzH,KAAA6I,GAQA,MAAAzW,OASAa,EAAAc,UAAAiV,QAAA,SAAAH,GACA,GAAArL,MAAAsL,QAAAD,GACA,OAAA3Q,GAAA2Q,EAAAvS,OAAA,EAAiC4B,GAAA,EAAQA,IACzC9F,KAAA4W,QAAAH,EAAA3Q,QAGA,KAAA2Q,EAAAlB,IAAA,gBAAAkB,GAIA,SAAAhO,WACA,8EAAAgO,EAJAzW,MAAAqV,SAAAwB,QAAAJ,GAOA,MAAAzW,OAUAa,EAAAc,UAAAmV,KAAA,SAAAC,GAEA,OADAJ,GACA7Q,EAAA,EAAAC,EAAA/F,KAAAqV,SAAAnR,OAA6C4B,EAAAC,EAASD,IACtD6Q,EAAA3W,KAAAqV,SAAAvP,GACA6Q,EAAApB,GACAoB,EAAAG,KAAAC,GAGA,KAAAJ,GACAI,EAAAJ,GAAoBjU,OAAA1C,KAAA0C,OACpBJ,KAAAtC,KAAAsC,KACAE,OAAAxC,KAAAwC,OACAO,KAAA/C,KAAA+C,QAYAlC,EAAAc,UAAA+C,KAAA,SAAAsS,GACA,GAAAC,GACAnR,EACAC,EAAA/F,KAAAqV,SAAAnR,MACA,IAAA6B,EAAA,GAEA,IADAkR,KACAnR,EAAA,EAAeA,EAAAC,EAAA,EAAWD,IAC1BmR,EAAArJ,KAAA5N,KAAAqV,SAAAvP,IACAmR,EAAArJ,KAAAoJ,EAEAC,GAAArJ,KAAA5N,KAAAqV,SAAAvP,IACA9F,KAAAqV,SAAA4B,EAEA,MAAAjX,OAUAa,EAAAc,UAAAuV,aAAA,SAAAC,EAAAC,GACA,GAAAC,GAAArX,KAAAqV,SAAArV,KAAAqV,SAAAnR,OAAA,EAUA,OATAmT,GAAA9B,GACA8B,EAAAH,aAAAC,EAAAC,GAEA,gBAAAC,GACArX,KAAAqV,SAAArV,KAAAqV,SAAAnR,OAAA,GAAAmT,EAAAtM,QAAAoM,EAAAC,GAGApX,KAAAqV,SAAAzH,KAAA,GAAA7C,QAAAoM,EAAAC,IAEApX,MAUAa,EAAAc,UAAA8B,iBACA,SAAAG,EAAAC,GACA7D,KAAAsV,eAAAtU,EAAAgD,YAAAJ,IAAAC,GASAhD,EAAAc,UAAA2V,mBACA,SAAAP,GACA,OAAAjR,GAAA,EAAAC,EAAA/F,KAAAqV,SAAAnR,OAA+C4B,EAAAC,EAASD,IACxD9F,KAAAqV,SAAAvP,GAAAyP,IACAvV,KAAAqV,SAAAvP,GAAAwR,mBAAAP,EAKA,QADA9T,GAAAa,OAAAG,KAAAjE,KAAAsV,gBACAxP,EAAA,EAAAC,EAAA9C,EAAAiB,OAAyC4B,EAAAC,EAASD,IAClDiR,EAAA/V,EAAAyK,cAAAxI,EAAA6C,IAAA9F,KAAAsV,eAAArS,EAAA6C,MAQAjF,EAAAc,UAAAkF,SAAA,WACA,GAAAwF,GAAA,EAIA,OAHArM,MAAA8W,KAAA,SAAAH,GACAtK,GAAAsK,IAEAtK,GAOAxL,EAAAc,UAAA4V,sBAAA,SAAAzW,GACA,GAAAuB,IACAyT,KAAA,GACAxT,KAAA,EACAE,OAAA,GAEA8D,EAAA,GAAA3F,GAAAG,GACA0W,GAAA,EACAC,EAAA,KACAC,EAAA,KACAC,EAAA,KACAC,EAAA,IAqEA,OApEA5X,MAAA8W,KAAA,SAAAH,EAAA/T,GACAP,EAAAyT,MAAAa,EACA,OAAA/T,EAAAF,QACA,OAAAE,EAAAN,MACA,OAAAM,EAAAJ,QACAiV,IAAA7U,EAAAF,QACAgV,IAAA9U,EAAAN,MACAqV,IAAA/U,EAAAJ,QACAoV,IAAAhV,EAAAG,MACAuD,EAAAtD,YACAN,OAAAE,EAAAF,OACAE,UACAN,KAAAM,EAAAN,KACAE,OAAAI,EAAAJ,QAEAH,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,QAEAO,KAAAH,EAAAG,OAGA0U,EAAA7U,EAAAF,OACAgV,EAAA9U,EAAAN,KACAqV,EAAA/U,EAAAJ,OACAoV,EAAAhV,EAAAG,KACAyU,GAAA,GACKA,IACLlR,EAAAtD,YACAX,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,UAGAiV,EAAA,KACAD,GAAA,EAEA,QAAA7J,GAAA,EAAAzJ,EAAAyS,EAAAzS,OAA4CyJ,EAAAzJ,EAAcyJ,IAC1DgJ,EAAAzO,WAAAyF,KAAA8H,GACApT,EAAAC,OACAD,EAAAG,OAAA,EAEAmL,EAAA,IAAAzJ,GACAuT,EAAA,KACAD,GAAA,GACSA,GACTlR,EAAAtD,YACAN,OAAAE,EAAAF,OACAE,UACAN,KAAAM,EAAAN,KACAE,OAAAI,EAAAJ,QAEAH,WACAC,KAAAD,EAAAC,KACAE,OAAAH,EAAAG,QAEAO,KAAAH,EAAAG,QAIAV,EAAAG,WAIAxC,KAAAsX,mBAAA,SAAAnU,EAAA0U,GACAvR,EAAA7C,iBAAAN,EAAA0U,MAGU/B,KAAAzT,EAAAyT,KAAAxP,QAGV1G,EAAAiB","file":"source-map.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"sourceMap\"] = factory();\n\telse\n\t\troot[\"sourceMap\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t * Copyright 2009-2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE.txt or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\texports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\texports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer;\n\texports.SourceNode = __webpack_require__(10).SourceNode;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar base64VLQ = __webpack_require__(2);\n\tvar util = __webpack_require__(4);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar MappingList = __webpack_require__(6).MappingList;\n\t\n\t/**\n\t * An instance of the SourceMapGenerator represents a source map which is\n\t * being built incrementally. You may pass an object with the following\n\t * properties:\n\t *\n\t * - file: The filename of the generated source.\n\t * - sourceRoot: A root for all relative URLs in this source map.\n\t */\n\tfunction SourceMapGenerator(aArgs) {\n\t if (!aArgs) {\n\t aArgs = {};\n\t }\n\t this._file = util.getArg(aArgs, 'file', null);\n\t this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n\t this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t this._mappings = new MappingList();\n\t this._sourcesContents = null;\n\t}\n\t\n\tSourceMapGenerator.prototype._version = 3;\n\t\n\t/**\n\t * Creates a new SourceMapGenerator based on a SourceMapConsumer\n\t *\n\t * @param aSourceMapConsumer The SourceMap.\n\t */\n\tSourceMapGenerator.fromSourceMap =\n\t function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n\t var sourceRoot = aSourceMapConsumer.sourceRoot;\n\t var generator = new SourceMapGenerator({\n\t file: aSourceMapConsumer.file,\n\t sourceRoot: sourceRoot\n\t });\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t var newMapping = {\n\t generated: {\n\t line: mapping.generatedLine,\n\t column: mapping.generatedColumn\n\t }\n\t };\n\t\n\t if (mapping.source != null) {\n\t newMapping.source = mapping.source;\n\t if (sourceRoot != null) {\n\t newMapping.source = util.relative(sourceRoot, newMapping.source);\n\t }\n\t\n\t newMapping.original = {\n\t line: mapping.originalLine,\n\t column: mapping.originalColumn\n\t };\n\t\n\t if (mapping.name != null) {\n\t newMapping.name = mapping.name;\n\t }\n\t }\n\t\n\t generator.addMapping(newMapping);\n\t });\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var sourceRelative = sourceFile;\n\t if (sourceRoot !== null) {\n\t sourceRelative = util.relative(sourceRoot, sourceFile);\n\t }\n\t\n\t if (!generator._sources.has(sourceRelative)) {\n\t generator._sources.add(sourceRelative);\n\t }\n\t\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t generator.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t return generator;\n\t };\n\t\n\t/**\n\t * Add a single mapping from original source line and column to the generated\n\t * source's line and column for this source map being created. The mapping\n\t * object should have the following properties:\n\t *\n\t * - generated: An object with the generated line and column positions.\n\t * - original: An object with the original line and column positions.\n\t * - source: The original source file (relative to the sourceRoot).\n\t * - name: An optional original token name for this mapping.\n\t */\n\tSourceMapGenerator.prototype.addMapping =\n\t function SourceMapGenerator_addMapping(aArgs) {\n\t var generated = util.getArg(aArgs, 'generated');\n\t var original = util.getArg(aArgs, 'original', null);\n\t var source = util.getArg(aArgs, 'source', null);\n\t var name = util.getArg(aArgs, 'name', null);\n\t\n\t if (!this._skipValidation) {\n\t this._validateMapping(generated, original, source, name);\n\t }\n\t\n\t if (source != null) {\n\t source = String(source);\n\t if (!this._sources.has(source)) {\n\t this._sources.add(source);\n\t }\n\t }\n\t\n\t if (name != null) {\n\t name = String(name);\n\t if (!this._names.has(name)) {\n\t this._names.add(name);\n\t }\n\t }\n\t\n\t this._mappings.add({\n\t generatedLine: generated.line,\n\t generatedColumn: generated.column,\n\t originalLine: original != null && original.line,\n\t originalColumn: original != null && original.column,\n\t source: source,\n\t name: name\n\t });\n\t };\n\t\n\t/**\n\t * Set the source content for a source file.\n\t */\n\tSourceMapGenerator.prototype.setSourceContent =\n\t function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n\t var source = aSourceFile;\n\t if (this._sourceRoot != null) {\n\t source = util.relative(this._sourceRoot, source);\n\t }\n\t\n\t if (aSourceContent != null) {\n\t // Add the source content to the _sourcesContents map.\n\t // Create a new _sourcesContents map if the property is null.\n\t if (!this._sourcesContents) {\n\t this._sourcesContents = Object.create(null);\n\t }\n\t this._sourcesContents[util.toSetString(source)] = aSourceContent;\n\t } else if (this._sourcesContents) {\n\t // Remove the source file from the _sourcesContents map.\n\t // If the _sourcesContents map is empty, set the property to null.\n\t delete this._sourcesContents[util.toSetString(source)];\n\t if (Object.keys(this._sourcesContents).length === 0) {\n\t this._sourcesContents = null;\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Applies the mappings of a sub-source-map for a specific source file to the\n\t * source map being generated. Each mapping to the supplied source file is\n\t * rewritten using the supplied source map. Note: The resolution for the\n\t * resulting mappings is the minimium of this map and the supplied map.\n\t *\n\t * @param aSourceMapConsumer The source map to be applied.\n\t * @param aSourceFile Optional. The filename of the source file.\n\t * If omitted, SourceMapConsumer's file property will be used.\n\t * @param aSourceMapPath Optional. The dirname of the path to the source map\n\t * to be applied. If relative, it is relative to the SourceMapConsumer.\n\t * This parameter is needed when the two source maps aren't in the same\n\t * directory, and the source map to be applied contains relative source\n\t * paths. If so, those relative source paths need to be rewritten\n\t * relative to the SourceMapGenerator.\n\t */\n\tSourceMapGenerator.prototype.applySourceMap =\n\t function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n\t var sourceFile = aSourceFile;\n\t // If aSourceFile is omitted, we will use the file property of the SourceMap\n\t if (aSourceFile == null) {\n\t if (aSourceMapConsumer.file == null) {\n\t throw new Error(\n\t 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n\t 'or the source map\\'s \"file\" property. Both were omitted.'\n\t );\n\t }\n\t sourceFile = aSourceMapConsumer.file;\n\t }\n\t var sourceRoot = this._sourceRoot;\n\t // Make \"sourceFile\" relative if an absolute Url is passed.\n\t if (sourceRoot != null) {\n\t sourceFile = util.relative(sourceRoot, sourceFile);\n\t }\n\t // Applying the SourceMap can add and remove items from the sources and\n\t // the names array.\n\t var newSources = new ArraySet();\n\t var newNames = new ArraySet();\n\t\n\t // Find mappings for the \"sourceFile\"\n\t this._mappings.unsortedForEach(function (mapping) {\n\t if (mapping.source === sourceFile && mapping.originalLine != null) {\n\t // Check if it can be mapped by the source map, then update the mapping.\n\t var original = aSourceMapConsumer.originalPositionFor({\n\t line: mapping.originalLine,\n\t column: mapping.originalColumn\n\t });\n\t if (original.source != null) {\n\t // Copy mapping\n\t mapping.source = original.source;\n\t if (aSourceMapPath != null) {\n\t mapping.source = util.join(aSourceMapPath, mapping.source)\n\t }\n\t if (sourceRoot != null) {\n\t mapping.source = util.relative(sourceRoot, mapping.source);\n\t }\n\t mapping.originalLine = original.line;\n\t mapping.originalColumn = original.column;\n\t if (original.name != null) {\n\t mapping.name = original.name;\n\t }\n\t }\n\t }\n\t\n\t var source = mapping.source;\n\t if (source != null && !newSources.has(source)) {\n\t newSources.add(source);\n\t }\n\t\n\t var name = mapping.name;\n\t if (name != null && !newNames.has(name)) {\n\t newNames.add(name);\n\t }\n\t\n\t }, this);\n\t this._sources = newSources;\n\t this._names = newNames;\n\t\n\t // Copy sourcesContents of applied map.\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aSourceMapPath != null) {\n\t sourceFile = util.join(aSourceMapPath, sourceFile);\n\t }\n\t if (sourceRoot != null) {\n\t sourceFile = util.relative(sourceRoot, sourceFile);\n\t }\n\t this.setSourceContent(sourceFile, content);\n\t }\n\t }, this);\n\t };\n\t\n\t/**\n\t * A mapping can have one of the three levels of data:\n\t *\n\t * 1. Just the generated position.\n\t * 2. The Generated position, original position, and original source.\n\t * 3. Generated and original position, original source, as well as a name\n\t * token.\n\t *\n\t * To maintain consistency, we validate that any new mapping being added falls\n\t * in to one of these categories.\n\t */\n\tSourceMapGenerator.prototype._validateMapping =\n\t function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n\t aName) {\n\t // When aOriginal is truthy but has empty values for .line and .column,\n\t // it is most likely a programmer error. In this case we throw a very\n\t // specific error message to try to guide them the right way.\n\t // For example: https://github.com/Polymer/polymer-bundler/pull/519\n\t if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n\t throw new Error(\n\t 'original.line and original.column are not numbers -- you probably meant to omit ' +\n\t 'the original mapping entirely and only map the generated position. If so, pass ' +\n\t 'null for the original mapping instead of an object with empty or null values.'\n\t );\n\t }\n\t\n\t if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 === null) {\n\t return 1; // aStr2 !== null\n\t }\n\t\n\t if (aStr2 === null) {\n\t return -1; // aStr1 !== null\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\t\n\t/**\n\t * Strip any JSON XSSI avoidance prefix from the string (as documented\n\t * in the source maps specification), and then parse the string as\n\t * JSON.\n\t */\n\tfunction parseSourceMapInput(str) {\n\t return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n\t}\n\texports.parseSourceMapInput = parseSourceMapInput;\n\t\n\t/**\n\t * Compute the URL of a source given the the source root, the source's\n\t * URL, and the source map's URL.\n\t */\n\tfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n\t sourceURL = sourceURL || '';\n\t\n\t if (sourceRoot) {\n\t // This follows what Chrome does.\n\t if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n\t sourceRoot += '/';\n\t }\n\t // The spec says:\n\t // Line 4: An optional source root, useful for relocating source\n\t // files on a server or removing repeated values in the\n\t // “sources” entry. This value is prepended to the individual\n\t // entries in the “source” field.\n\t sourceURL = sourceRoot + sourceURL;\n\t }\n\t\n\t // Historically, SourceMapConsumer did not take the sourceMapURL as\n\t // a parameter. This mode is still somewhat supported, which is why\n\t // this code block is conditional. However, it's preferable to pass\n\t // the source map URL to SourceMapConsumer, so that this function\n\t // can implement the source URL resolution algorithm as outlined in\n\t // the spec. This block is basically the equivalent of:\n\t // new URL(sourceURL, sourceMapURL).toString()\n\t // ... except it avoids using URL, which wasn't available in the\n\t // older releases of node still supported by this library.\n\t //\n\t // The spec says:\n\t // If the sources are not absolute URLs after prepending of the\n\t // “sourceRoot”, the sources are resolved relative to the\n\t // SourceMap (like resolving script src in a html document).\n\t if (sourceMapURL) {\n\t var parsed = urlParse(sourceMapURL);\n\t if (!parsed) {\n\t throw new Error(\"sourceMapURL could not be parsed\");\n\t }\n\t if (parsed.path) {\n\t // Strip the last path component, but keep the \"/\".\n\t var index = parsed.path.lastIndexOf('/');\n\t if (index >= 0) {\n\t parsed.path = parsed.path.substring(0, index + 1);\n\t }\n\t }\n\t sourceURL = join(urlGenerate(parsed), sourceURL);\n\t }\n\t\n\t return normalize(sourceURL);\n\t}\n\texports.computeSourceURL = computeSourceURL;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = util.parseSourceMapInput(aSourceMap);\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n\t : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t configurable: true,\n\t enumerable: true,\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t configurable: true,\n\t enumerable: true,\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source. The line number is 1-based.\n\t * - column: Optional. the column number in the original source.\n\t * The column number is 0-based.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the generated source, or null.\n\t * The column number is 0-based.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t needle.source = this._findSourceIndex(needle.source);\n\t if (needle.source < 0) {\n\t return [];\n\t }\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The first parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found. This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = util.parseSourceMapInput(aSourceMap);\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t if (sourceRoot) {\n\t sourceRoot = util.normalize(sourceRoot);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this._absoluteSources = this._sources.toArray().map(function (s) {\n\t return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n\t });\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this._sourceMapURL = aSourceMapURL;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Utility function to find the index of a source. Returns -1 if not\n\t * found.\n\t */\n\tBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n\t var relativeSource = aSource;\n\t if (this.sourceRoot != null) {\n\t relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t }\n\t\n\t if (this._sources.has(relativeSource)) {\n\t return this._sources.indexOf(relativeSource);\n\t }\n\t\n\t // Maybe aSource is an absolute URL as returned by |sources|. In\n\t // this case we can't simply undo the transform.\n\t var i;\n\t for (i = 0; i < this._absoluteSources.length; ++i) {\n\t if (this._absoluteSources[i] == aSource) {\n\t return i;\n\t }\n\t }\n\t\n\t return -1;\n\t};\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @param String aSourceMapURL\n\t * The URL at which the source map can be found (optional)\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t smc._sourceMapURL = aSourceMapURL;\n\t smc._absoluteSources = smc._sources.toArray().map(function (s) {\n\t return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n\t });\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._absoluteSources.slice();\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source. The line number\n\t * is 1-based.\n\t * - column: The column number in the generated source. The column\n\t * number is 0-based.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the original source, or null. The\n\t * column number is 0-based.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t var index = this._findSourceIndex(aSource);\n\t if (index >= 0) {\n\t return this.sourcesContent[index];\n\t }\n\t\n\t var relativeSource = aSource;\n\t if (this.sourceRoot != null) {\n\t relativeSource = util.relative(this.sourceRoot, relativeSource);\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + relativeSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source. The line number\n\t * is 1-based.\n\t * - column: The column number in the original source. The column\n\t * number is 0-based.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the generated source, or null.\n\t * The column number is 0-based.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t source = this._findSourceIndex(source);\n\t if (source < 0) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The first parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * The second parameter, if given, is a string whose value is the URL\n\t * at which the source map was found. This URL is used to compute the\n\t * sources array.\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = util.parseSourceMapInput(aSourceMap);\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source. The line number\n\t * is 1-based.\n\t * - column: The column number in the generated source. The column\n\t * number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null. The\n\t * line number is 1-based.\n\t * - column: The column number in the original source, or null. The\n\t * column number is 0-based.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source. The line number\n\t * is 1-based.\n\t * - column: The column number in the original source. The column\n\t * number is 0-based.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null. The\n\t * line number is 1-based. \n\t * - column: The column number in the generated source, or null.\n\t * The column number is 0-based.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = null;\n\t if (mapping.name) {\n\t name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t }\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex] || '';\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex] || '';\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0fd5815da764db5fb9fe","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // “sources” entry. This value is prepended to the individual\n // entries in the “source” field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // “sourceRoot”, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/.pnpm-store/v11/files/8e/61511e650bc7a59be1f944b84d12fdc95d6cccb96ed30371dfafa19ca305902a973994cdcc476b21156f3d47e529ac9d394835d616b198f1984d4e7acb7b8e b/.pnpm-store/v11/files/8e/61511e650bc7a59be1f944b84d12fdc95d6cccb96ed30371dfafa19ca305902a973994cdcc476b21156f3d47e529ac9d394835d616b198f1984d4e7acb7b8e new file mode 100644 index 00000000..fd56877a --- /dev/null +++ b/.pnpm-store/v11/files/8e/61511e650bc7a59be1f944b84d12fdc95d6cccb96ed30371dfafa19ca305902a973994cdcc476b21156f3d47e529ac9d394835d616b198f1984d4e7acb7b8e @@ -0,0 +1,85 @@ +# for-own [![NPM version](https://img.shields.io/npm/v/for-own.svg?style=flat)](https://www.npmjs.com/package/for-own) [![NPM monthly downloads](https://img.shields.io/npm/dm/for-own.svg?style=flat)](https://npmjs.org/package/for-own) [![NPM total downloads](https://img.shields.io/npm/dt/for-own.svg?style=flat)](https://npmjs.org/package/for-own) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/for-own.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/for-own) + +> Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save for-own +``` + +## Usage + +```js +var forOwn = require('for-own'); + +var obj = {a: 'foo', b: 'bar', c: 'baz'}; +var values = []; +var keys = []; + +forOwn(obj, function (value, key, o) { + keys.push(key); + values.push(value); +}); + +console.log(keys); +//=> ['a', 'b', 'c']; + +console.log(values); +//=> ['foo', 'bar', 'baz']; +``` + +## About + +### Related projects + +* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") +* [collection-map](https://www.npmjs.com/package/collection-map): Returns an array of mapped values from an array or object. | [homepage](https://github.com/jonschlinkert/collection-map "Returns an array of mapped values from an array or object.") +* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 10 | [jonschlinkert](https://github.com/jonschlinkert) | +| 1 | [javiercejudo](https://github.com/javiercejudo) | + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.4.2, on February 26, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/8e/7bda4a3200e21495e5e37a78bb9af41d7410f2d14f7d1fce3d0620e4b1e40be03ced984c4d774692db82ea89a542cd8e8954aeaf2592ec3730ccfc15b59c6c b/.pnpm-store/v11/files/8e/7bda4a3200e21495e5e37a78bb9af41d7410f2d14f7d1fce3d0620e4b1e40be03ced984c4d774692db82ea89a542cd8e8954aeaf2592ec3730ccfc15b59c6c new file mode 100644 index 00000000..8ee09d91 --- /dev/null +++ b/.pnpm-store/v11/files/8e/7bda4a3200e21495e5e37a78bb9af41d7410f2d14f7d1fce3d0620e4b1e40be03ced984c4d774692db82ea89a542cd8e8954aeaf2592ec3730ccfc15b59c6c @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016, 2018, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/8e/85bccaabf7351cc9c1c3e74b1446bcd0f5f1a9075b7b696b83572ab74f7ed1fd875cad53c6eca65abbb45caf25968048d8b68a3145333a3dd7747c87313658 b/.pnpm-store/v11/files/8e/85bccaabf7351cc9c1c3e74b1446bcd0f5f1a9075b7b696b83572ab74f7ed1fd875cad53c6eca65abbb45caf25968048d8b68a3145333a3dd7747c87313658 new file mode 100644 index 00000000..bd9a59a4 --- /dev/null +++ b/.pnpm-store/v11/files/8e/85bccaabf7351cc9c1c3e74b1446bcd0f5f1a9075b7b696b83572ab74f7ed1fd875cad53c6eca65abbb45caf25968048d8b68a3145333a3dd7747c87313658 @@ -0,0 +1,1161 @@ +/** + * class ArgumentParser + * + * Object for parsing command line strings into js objects. + * + * Inherited from [[ActionContainer]] + **/ +'use strict'; + +var util = require('util'); +var format = require('util').format; +var Path = require('path'); +var sprintf = require('sprintf-js').sprintf; + +// Constants +var c = require('./const'); + +var $$ = require('./utils'); + +var ActionContainer = require('./action_container'); + +// Errors +var argumentErrorHelper = require('./argument/error'); + +var HelpFormatter = require('./help/formatter'); + +var Namespace = require('./namespace'); + + +/** + * new ArgumentParser(options) + * + * Create a new ArgumentParser object. + * + * ##### Options: + * - `prog` The name of the program (default: Path.basename(process.argv[1])) + * - `usage` A usage message (default: auto-generated from arguments) + * - `description` A description of what the program does + * - `epilog` Text following the argument descriptions + * - `parents` Parsers whose arguments should be copied into this one + * - `formatterClass` HelpFormatter class for printing help messages + * - `prefixChars` Characters that prefix optional arguments + * - `fromfilePrefixChars` Characters that prefix files containing additional arguments + * - `argumentDefault` The default value for all arguments + * - `addHelp` Add a -h/-help option + * - `conflictHandler` Specifies how to handle conflicting argument names + * - `debug` Enable debug mode. Argument errors throw exception in + * debug mode and process.exit in normal. Used for development and + * testing (default: false) + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#argumentparser-objects + **/ +function ArgumentParser(options) { + if (!(this instanceof ArgumentParser)) { + return new ArgumentParser(options); + } + var self = this; + options = options || {}; + + options.description = (options.description || null); + options.argumentDefault = (options.argumentDefault || null); + options.prefixChars = (options.prefixChars || '-'); + options.conflictHandler = (options.conflictHandler || 'error'); + ActionContainer.call(this, options); + + options.addHelp = typeof options.addHelp === 'undefined' || !!options.addHelp; + options.parents = options.parents || []; + // default program name + options.prog = (options.prog || Path.basename(process.argv[1])); + this.prog = options.prog; + this.usage = options.usage; + this.epilog = options.epilog; + this.version = options.version; + + this.debug = (options.debug === true); + + this.formatterClass = (options.formatterClass || HelpFormatter); + this.fromfilePrefixChars = options.fromfilePrefixChars || null; + this._positionals = this.addArgumentGroup({ title: 'Positional arguments' }); + this._optionals = this.addArgumentGroup({ title: 'Optional arguments' }); + this._subparsers = null; + + // register types + function FUNCTION_IDENTITY(o) { + return o; + } + this.register('type', 'auto', FUNCTION_IDENTITY); + this.register('type', null, FUNCTION_IDENTITY); + this.register('type', 'int', function (x) { + var result = parseInt(x, 10); + if (isNaN(result)) { + throw new Error(x + ' is not a valid integer.'); + } + return result; + }); + this.register('type', 'float', function (x) { + var result = parseFloat(x); + if (isNaN(result)) { + throw new Error(x + ' is not a valid float.'); + } + return result; + }); + this.register('type', 'string', function (x) { + return '' + x; + }); + + // add help and version arguments if necessary + var defaultPrefix = (this.prefixChars.indexOf('-') > -1) ? '-' : this.prefixChars[0]; + if (options.addHelp) { + this.addArgument( + [ defaultPrefix + 'h', defaultPrefix + defaultPrefix + 'help' ], + { + action: 'help', + defaultValue: c.SUPPRESS, + help: 'Show this help message and exit.' + } + ); + } + if (typeof this.version !== 'undefined') { + this.addArgument( + [ defaultPrefix + 'v', defaultPrefix + defaultPrefix + 'version' ], + { + action: 'version', + version: this.version, + defaultValue: c.SUPPRESS, + help: "Show program's version number and exit." + } + ); + } + + // add parent arguments and defaults + options.parents.forEach(function (parent) { + self._addContainerActions(parent); + if (typeof parent._defaults !== 'undefined') { + for (var defaultKey in parent._defaults) { + if (parent._defaults.hasOwnProperty(defaultKey)) { + self._defaults[defaultKey] = parent._defaults[defaultKey]; + } + } + } + }); +} + +util.inherits(ArgumentParser, ActionContainer); + +/** + * ArgumentParser#addSubparsers(options) -> [[ActionSubparsers]] + * - options (object): hash of options see [[ActionSubparsers.new]] + * + * See also [subcommands][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#sub-commands + **/ +ArgumentParser.prototype.addSubparsers = function (options) { + if (this._subparsers) { + this.error('Cannot have multiple subparser arguments.'); + } + + options = options || {}; + options.debug = (this.debug === true); + options.optionStrings = []; + options.parserClass = (options.parserClass || ArgumentParser); + + + if (!!options.title || !!options.description) { + + this._subparsers = this.addArgumentGroup({ + title: (options.title || 'subcommands'), + description: options.description + }); + delete options.title; + delete options.description; + + } else { + this._subparsers = this._positionals; + } + + // prog defaults to the usage message of this parser, skipping + // optional arguments and with no "usage:" prefix + if (!options.prog) { + var formatter = this._getFormatter(); + var positionals = this._getPositionalActions(); + var groups = this._mutuallyExclusiveGroups; + formatter.addUsage(this.usage, positionals, groups, ''); + options.prog = formatter.formatHelp().trim(); + } + + // create the parsers action and add it to the positionals list + var ParsersClass = this._popActionClass(options, 'parsers'); + var action = new ParsersClass(options); + this._subparsers._addAction(action); + + // return the created parsers action + return action; +}; + +ArgumentParser.prototype._addAction = function (action) { + if (action.isOptional()) { + this._optionals._addAction(action); + } else { + this._positionals._addAction(action); + } + return action; +}; + +ArgumentParser.prototype._getOptionalActions = function () { + return this._actions.filter(function (action) { + return action.isOptional(); + }); +}; + +ArgumentParser.prototype._getPositionalActions = function () { + return this._actions.filter(function (action) { + return action.isPositional(); + }); +}; + + +/** + * ArgumentParser#parseArgs(args, namespace) -> Namespace|Object + * - args (array): input elements + * - namespace (Namespace|Object): result object + * + * Parsed args and throws error if some arguments are not recognized + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#the-parse-args-method + **/ +ArgumentParser.prototype.parseArgs = function (args, namespace) { + var argv; + var result = this.parseKnownArgs(args, namespace); + + args = result[0]; + argv = result[1]; + if (argv && argv.length > 0) { + this.error( + format('Unrecognized arguments: %s.', argv.join(' ')) + ); + } + return args; +}; + +/** + * ArgumentParser#parseKnownArgs(args, namespace) -> array + * - args (array): input options + * - namespace (Namespace|Object): result object + * + * Parse known arguments and return tuple of result object + * and unknown args + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#partial-parsing + **/ +ArgumentParser.prototype.parseKnownArgs = function (args, namespace) { + var self = this; + + // args default to the system args + args = args || process.argv.slice(2); + + // default Namespace built from parser defaults + namespace = namespace || new Namespace(); + + self._actions.forEach(function (action) { + if (action.dest !== c.SUPPRESS) { + if (!$$.has(namespace, action.dest)) { + if (action.defaultValue !== c.SUPPRESS) { + var defaultValue = action.defaultValue; + if (typeof action.defaultValue === 'string') { + defaultValue = self._getValue(action, defaultValue); + } + namespace[action.dest] = defaultValue; + } + } + } + }); + + Object.keys(self._defaults).forEach(function (dest) { + namespace[dest] = self._defaults[dest]; + }); + + // parse the arguments and exit if there are any errors + try { + var res = this._parseKnownArgs(args, namespace); + + namespace = res[0]; + args = res[1]; + if ($$.has(namespace, c._UNRECOGNIZED_ARGS_ATTR)) { + args = $$.arrayUnion(args, namespace[c._UNRECOGNIZED_ARGS_ATTR]); + delete namespace[c._UNRECOGNIZED_ARGS_ATTR]; + } + return [ namespace, args ]; + } catch (e) { + this.error(e); + } +}; + +ArgumentParser.prototype._parseKnownArgs = function (argStrings, namespace) { + var self = this; + + var extras = []; + + // replace arg strings that are file references + if (this.fromfilePrefixChars !== null) { + argStrings = this._readArgsFromFiles(argStrings); + } + // map all mutually exclusive arguments to the other arguments + // they can't occur with + // Python has 'conflicts = action_conflicts.setdefault(mutex_action, [])' + // though I can't conceive of a way in which an action could be a member + // of two different mutually exclusive groups. + + function actionHash(action) { + // some sort of hashable key for this action + // action itself cannot be a key in actionConflicts + // I think getName() (join of optionStrings) is unique enough + return action.getName(); + } + + var conflicts, key; + var actionConflicts = {}; + + this._mutuallyExclusiveGroups.forEach(function (mutexGroup) { + mutexGroup._groupActions.forEach(function (mutexAction, i, groupActions) { + key = actionHash(mutexAction); + if (!$$.has(actionConflicts, key)) { + actionConflicts[key] = []; + } + conflicts = actionConflicts[key]; + conflicts.push.apply(conflicts, groupActions.slice(0, i)); + conflicts.push.apply(conflicts, groupActions.slice(i + 1)); + }); + }); + + // find all option indices, and determine the arg_string_pattern + // which has an 'O' if there is an option at an index, + // an 'A' if there is an argument, or a '-' if there is a '--' + var optionStringIndices = {}; + + var argStringPatternParts = []; + + argStrings.forEach(function (argString, argStringIndex) { + if (argString === '--') { + argStringPatternParts.push('-'); + while (argStringIndex < argStrings.length) { + argStringPatternParts.push('A'); + argStringIndex++; + } + } else { + // otherwise, add the arg to the arg strings + // and note the index if it was an option + var pattern; + var optionTuple = self._parseOptional(argString); + if (!optionTuple) { + pattern = 'A'; + } else { + optionStringIndices[argStringIndex] = optionTuple; + pattern = 'O'; + } + argStringPatternParts.push(pattern); + } + }); + var argStringsPattern = argStringPatternParts.join(''); + + var seenActions = []; + var seenNonDefaultActions = []; + + + function takeAction(action, argumentStrings, optionString) { + seenActions.push(action); + var argumentValues = self._getValues(action, argumentStrings); + + // error if this argument is not allowed with other previously + // seen arguments, assuming that actions that use the default + // value don't really count as "present" + if (argumentValues !== action.defaultValue) { + seenNonDefaultActions.push(action); + if (actionConflicts[actionHash(action)]) { + actionConflicts[actionHash(action)].forEach(function (actionConflict) { + if (seenNonDefaultActions.indexOf(actionConflict) >= 0) { + throw argumentErrorHelper( + action, + format('Not allowed with argument "%s".', actionConflict.getName()) + ); + } + }); + } + } + + if (argumentValues !== c.SUPPRESS) { + action.call(self, namespace, argumentValues, optionString); + } + } + + function consumeOptional(startIndex) { + // get the optional identified at this index + var optionTuple = optionStringIndices[startIndex]; + var action = optionTuple[0]; + var optionString = optionTuple[1]; + var explicitArg = optionTuple[2]; + + // identify additional optionals in the same arg string + // (e.g. -xyz is the same as -x -y -z if no args are required) + var actionTuples = []; + + var args, argCount, start, stop; + + for (;;) { + if (!action) { + extras.push(argStrings[startIndex]); + return startIndex + 1; + } + if (explicitArg) { + argCount = self._matchArgument(action, 'A'); + + // if the action is a single-dash option and takes no + // arguments, try to parse more single-dash options out + // of the tail of the option string + var chars = self.prefixChars; + if (argCount === 0 && chars.indexOf(optionString[1]) < 0) { + actionTuples.push([ action, [], optionString ]); + optionString = optionString[0] + explicitArg[0]; + var newExplicitArg = explicitArg.slice(1) || null; + var optionalsMap = self._optionStringActions; + + if (Object.keys(optionalsMap).indexOf(optionString) >= 0) { + action = optionalsMap[optionString]; + explicitArg = newExplicitArg; + } else { + throw argumentErrorHelper(action, sprintf('ignored explicit argument %r', explicitArg)); + } + } else if (argCount === 1) { + // if the action expect exactly one argument, we've + // successfully matched the option; exit the loop + stop = startIndex + 1; + args = [ explicitArg ]; + actionTuples.push([ action, args, optionString ]); + break; + } else { + // error if a double-dash option did not use the + // explicit argument + throw argumentErrorHelper(action, sprintf('ignored explicit argument %r', explicitArg)); + } + } else { + // if there is no explicit argument, try to match the + // optional's string arguments with the following strings + // if successful, exit the loop + + start = startIndex + 1; + var selectedPatterns = argStringsPattern.substr(start); + + argCount = self._matchArgument(action, selectedPatterns); + stop = start + argCount; + + + args = argStrings.slice(start, stop); + + actionTuples.push([ action, args, optionString ]); + break; + } + + } + + // add the Optional to the list and return the index at which + // the Optional's string args stopped + if (actionTuples.length < 1) { + throw new Error('length should be > 0'); + } + for (var i = 0; i < actionTuples.length; i++) { + takeAction.apply(self, actionTuples[i]); + } + return stop; + } + + // the list of Positionals left to be parsed; this is modified + // by consume_positionals() + var positionals = self._getPositionalActions(); + + function consumePositionals(startIndex) { + // match as many Positionals as possible + var selectedPattern = argStringsPattern.substr(startIndex); + var argCounts = self._matchArgumentsPartial(positionals, selectedPattern); + + // slice off the appropriate arg strings for each Positional + // and add the Positional and its args to the list + for (var i = 0; i < positionals.length; i++) { + var action = positionals[i]; + var argCount = argCounts[i]; + if (typeof argCount === 'undefined') { + continue; + } + var args = argStrings.slice(startIndex, startIndex + argCount); + + startIndex += argCount; + takeAction(action, args); + } + + // slice off the Positionals that we just parsed and return the + // index at which the Positionals' string args stopped + positionals = positionals.slice(argCounts.length); + return startIndex; + } + + // consume Positionals and Optionals alternately, until we have + // passed the last option string + var startIndex = 0; + var position; + + var maxOptionStringIndex = -1; + + Object.keys(optionStringIndices).forEach(function (position) { + maxOptionStringIndex = Math.max(maxOptionStringIndex, parseInt(position, 10)); + }); + + var positionalsEndIndex, nextOptionStringIndex; + + while (startIndex <= maxOptionStringIndex) { + // consume any Positionals preceding the next option + nextOptionStringIndex = null; + for (position in optionStringIndices) { + if (!optionStringIndices.hasOwnProperty(position)) { continue; } + + position = parseInt(position, 10); + if (position >= startIndex) { + if (nextOptionStringIndex !== null) { + nextOptionStringIndex = Math.min(nextOptionStringIndex, position); + } else { + nextOptionStringIndex = position; + } + } + } + + if (startIndex !== nextOptionStringIndex) { + positionalsEndIndex = consumePositionals(startIndex); + // only try to parse the next optional if we didn't consume + // the option string during the positionals parsing + if (positionalsEndIndex > startIndex) { + startIndex = positionalsEndIndex; + continue; + } else { + startIndex = positionalsEndIndex; + } + } + + // if we consumed all the positionals we could and we're not + // at the index of an option string, there were extra arguments + if (!optionStringIndices[startIndex]) { + var strings = argStrings.slice(startIndex, nextOptionStringIndex); + extras = extras.concat(strings); + startIndex = nextOptionStringIndex; + } + // consume the next optional and any arguments for it + startIndex = consumeOptional(startIndex); + } + + // consume any positionals following the last Optional + var stopIndex = consumePositionals(startIndex); + + // if we didn't consume all the argument strings, there were extras + extras = extras.concat(argStrings.slice(stopIndex)); + + // if we didn't use all the Positional objects, there were too few + // arg strings supplied. + if (positionals.length > 0) { + self.error('too few arguments'); + } + + // make sure all required actions were present + self._actions.forEach(function (action) { + if (action.required) { + if (seenActions.indexOf(action) < 0) { + self.error(format('Argument "%s" is required', action.getName())); + } + } + }); + + // make sure all required groups have one option present + var actionUsed = false; + self._mutuallyExclusiveGroups.forEach(function (group) { + if (group.required) { + actionUsed = group._groupActions.some(function (action) { + return seenNonDefaultActions.indexOf(action) !== -1; + }); + + // if no actions were used, report the error + if (!actionUsed) { + var names = []; + group._groupActions.forEach(function (action) { + if (action.help !== c.SUPPRESS) { + names.push(action.getName()); + } + }); + names = names.join(' '); + var msg = 'one of the arguments ' + names + ' is required'; + self.error(msg); + } + } + }); + + // return the updated namespace and the extra arguments + return [ namespace, extras ]; +}; + +ArgumentParser.prototype._readArgsFromFiles = function (argStrings) { + // expand arguments referencing files + var self = this; + var fs = require('fs'); + var newArgStrings = []; + argStrings.forEach(function (argString) { + if (self.fromfilePrefixChars.indexOf(argString[0]) < 0) { + // for regular arguments, just add them back into the list + newArgStrings.push(argString); + } else { + // replace arguments referencing files with the file content + try { + var argstrs = []; + var filename = argString.slice(1); + var content = fs.readFileSync(filename, 'utf8'); + content = content.trim().split('\n'); + content.forEach(function (argLine) { + self.convertArgLineToArgs(argLine).forEach(function (arg) { + argstrs.push(arg); + }); + argstrs = self._readArgsFromFiles(argstrs); + }); + newArgStrings.push.apply(newArgStrings, argstrs); + } catch (error) { + return self.error(error.message); + } + } + }); + return newArgStrings; +}; + +ArgumentParser.prototype.convertArgLineToArgs = function (argLine) { + return [ argLine ]; +}; + +ArgumentParser.prototype._matchArgument = function (action, regexpArgStrings) { + + // match the pattern for this action to the arg strings + var regexpNargs = new RegExp('^' + this._getNargsPattern(action)); + var matches = regexpArgStrings.match(regexpNargs); + var message; + + // throw an exception if we weren't able to find a match + if (!matches) { + switch (action.nargs) { + /*eslint-disable no-undefined*/ + case undefined: + case null: + message = 'Expected one argument.'; + break; + case c.OPTIONAL: + message = 'Expected at most one argument.'; + break; + case c.ONE_OR_MORE: + message = 'Expected at least one argument.'; + break; + default: + message = 'Expected %s argument(s)'; + } + + throw argumentErrorHelper( + action, + format(message, action.nargs) + ); + } + // return the number of arguments matched + return matches[1].length; +}; + +ArgumentParser.prototype._matchArgumentsPartial = function (actions, regexpArgStrings) { + // progressively shorten the actions list by slicing off the + // final actions until we find a match + var self = this; + var result = []; + var actionSlice, pattern, matches; + var i, j; + + function getLength(string) { + return string.length; + } + + for (i = actions.length; i > 0; i--) { + pattern = ''; + actionSlice = actions.slice(0, i); + for (j = 0; j < actionSlice.length; j++) { + pattern += self._getNargsPattern(actionSlice[j]); + } + + pattern = new RegExp('^' + pattern); + matches = regexpArgStrings.match(pattern); + + if (matches && matches.length > 0) { + // need only groups + matches = matches.splice(1); + result = result.concat(matches.map(getLength)); + break; + } + } + + // return the list of arg string counts + return result; +}; + +ArgumentParser.prototype._parseOptional = function (argString) { + var action, optionString, argExplicit, optionTuples; + + // if it's an empty string, it was meant to be a positional + if (!argString) { + return null; + } + + // if it doesn't start with a prefix, it was meant to be positional + if (this.prefixChars.indexOf(argString[0]) < 0) { + return null; + } + + // if the option string is present in the parser, return the action + if (this._optionStringActions[argString]) { + return [ this._optionStringActions[argString], argString, null ]; + } + + // if it's just a single character, it was meant to be positional + if (argString.length === 1) { + return null; + } + + // if the option string before the "=" is present, return the action + if (argString.indexOf('=') >= 0) { + optionString = argString.split('=', 1)[0]; + argExplicit = argString.slice(optionString.length + 1); + + if (this._optionStringActions[optionString]) { + action = this._optionStringActions[optionString]; + return [ action, optionString, argExplicit ]; + } + } + + // search through all possible prefixes of the option string + // and all actions in the parser for possible interpretations + optionTuples = this._getOptionTuples(argString); + + // if multiple actions match, the option string was ambiguous + if (optionTuples.length > 1) { + var optionStrings = optionTuples.map(function (optionTuple) { + return optionTuple[1]; + }); + this.error(format( + 'Ambiguous option: "%s" could match %s.', + argString, optionStrings.join(', ') + )); + // if exactly one action matched, this segmentation is good, + // so return the parsed action + } else if (optionTuples.length === 1) { + return optionTuples[0]; + } + + // if it was not found as an option, but it looks like a negative + // number, it was meant to be positional + // unless there are negative-number-like options + if (argString.match(this._regexpNegativeNumber)) { + if (!this._hasNegativeNumberOptionals.some(Boolean)) { + return null; + } + } + // if it contains a space, it was meant to be a positional + if (argString.search(' ') >= 0) { + return null; + } + + // it was meant to be an optional but there is no such option + // in this parser (though it might be a valid option in a subparser) + return [ null, argString, null ]; +}; + +ArgumentParser.prototype._getOptionTuples = function (optionString) { + var result = []; + var chars = this.prefixChars; + var optionPrefix; + var argExplicit; + var action; + var actionOptionString; + + // option strings starting with two prefix characters are only split at + // the '=' + if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) >= 0) { + if (optionString.indexOf('=') >= 0) { + var optionStringSplit = optionString.split('=', 1); + + optionPrefix = optionStringSplit[0]; + argExplicit = optionStringSplit[1]; + } else { + optionPrefix = optionString; + argExplicit = null; + } + + for (actionOptionString in this._optionStringActions) { + if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + action = this._optionStringActions[actionOptionString]; + result.push([ action, actionOptionString, argExplicit ]); + } + } + + // single character options can be concatenated with their arguments + // but multiple character options always have to have their argument + // separate + } else if (chars.indexOf(optionString[0]) >= 0 && chars.indexOf(optionString[1]) < 0) { + optionPrefix = optionString; + argExplicit = null; + var optionPrefixShort = optionString.substr(0, 2); + var argExplicitShort = optionString.substr(2); + + for (actionOptionString in this._optionStringActions) { + if (!$$.has(this._optionStringActions, actionOptionString)) continue; + + action = this._optionStringActions[actionOptionString]; + if (actionOptionString === optionPrefixShort) { + result.push([ action, actionOptionString, argExplicitShort ]); + } else if (actionOptionString.substr(0, optionPrefix.length) === optionPrefix) { + result.push([ action, actionOptionString, argExplicit ]); + } + } + + // shouldn't ever get here + } else { + throw new Error(format('Unexpected option string: %s.', optionString)); + } + // return the collected option tuples + return result; +}; + +ArgumentParser.prototype._getNargsPattern = function (action) { + // in all examples below, we have to allow for '--' args + // which are represented as '-' in the pattern + var regexpNargs; + + switch (action.nargs) { + // the default (null) is assumed to be a single argument + case undefined: + case null: + regexpNargs = '(-*A-*)'; + break; + // allow zero or more arguments + case c.OPTIONAL: + regexpNargs = '(-*A?-*)'; + break; + // allow zero or more arguments + case c.ZERO_OR_MORE: + regexpNargs = '(-*[A-]*)'; + break; + // allow one or more arguments + case c.ONE_OR_MORE: + regexpNargs = '(-*A[A-]*)'; + break; + // allow any number of options or arguments + case c.REMAINDER: + regexpNargs = '([-AO]*)'; + break; + // allow one argument followed by any number of options or arguments + case c.PARSER: + regexpNargs = '(-*A[-AO]*)'; + break; + // all others should be integers + default: + regexpNargs = '(-*' + $$.repeat('-*A', action.nargs) + '-*)'; + } + + // if this is an optional action, -- is not allowed + if (action.isOptional()) { + regexpNargs = regexpNargs.replace(/-\*/g, ''); + regexpNargs = regexpNargs.replace(/-/g, ''); + } + + // return the pattern + return regexpNargs; +}; + +// +// Value conversion methods +// + +ArgumentParser.prototype._getValues = function (action, argStrings) { + var self = this; + + // for everything but PARSER args, strip out '--' + if (action.nargs !== c.PARSER && action.nargs !== c.REMAINDER) { + argStrings = argStrings.filter(function (arrayElement) { + return arrayElement !== '--'; + }); + } + + var value, argString; + + // optional argument produces a default when not present + if (argStrings.length === 0 && action.nargs === c.OPTIONAL) { + + value = (action.isOptional()) ? action.constant : action.defaultValue; + + if (typeof (value) === 'string') { + value = this._getValue(action, value); + this._checkValue(action, value); + } + + // when nargs='*' on a positional, if there were no command-line + // args, use the default if it is anything other than None + } else if (argStrings.length === 0 && action.nargs === c.ZERO_OR_MORE && + action.optionStrings.length === 0) { + + value = (action.defaultValue || argStrings); + this._checkValue(action, value); + + // single argument or optional argument produces a single value + } else if (argStrings.length === 1 && + (!action.nargs || action.nargs === c.OPTIONAL)) { + + argString = argStrings[0]; + value = this._getValue(action, argString); + this._checkValue(action, value); + + // REMAINDER arguments convert all values, checking none + } else if (action.nargs === c.REMAINDER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + + // PARSER arguments convert all values, but check only the first + } else if (action.nargs === c.PARSER) { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + this._checkValue(action, value[0]); + + // all other types of nargs produce a list + } else { + value = argStrings.map(function (v) { + return self._getValue(action, v); + }); + value.forEach(function (v) { + self._checkValue(action, v); + }); + } + + // return the converted value + return value; +}; + +ArgumentParser.prototype._getValue = function (action, argString) { + var result; + + var typeFunction = this._registryGet('type', action.type, action.type); + if (typeof typeFunction !== 'function') { + var message = format('%s is not callable', typeFunction); + throw argumentErrorHelper(action, message); + } + + // convert the value to the appropriate type + try { + result = typeFunction(argString); + + // ArgumentTypeErrors indicate errors + // If action.type is not a registered string, it is a function + // Try to deduce its name for inclusion in the error message + // Failing that, include the error message it raised. + } catch (e) { + var name = null; + if (typeof action.type === 'string') { + name = action.type; + } else { + name = action.type.name || action.type.displayName || ''; + } + var msg = format('Invalid %s value: %s', name, argString); + if (name === '') { msg += '\n' + e.message; } + throw argumentErrorHelper(action, msg); + } + // return the converted value + return result; +}; + +ArgumentParser.prototype._checkValue = function (action, value) { + // converted value must be one of the choices (if specified) + var choices = action.choices; + if (choices) { + // choise for argument can by array or string + if ((typeof choices === 'string' || Array.isArray(choices)) && + choices.indexOf(value) !== -1) { + return; + } + // choise for subparsers can by only hash + if (typeof choices === 'object' && !Array.isArray(choices) && choices[value]) { + return; + } + + if (typeof choices === 'string') { + choices = choices.split('').join(', '); + } else if (Array.isArray(choices)) { + choices = choices.join(', '); + } else { + choices = Object.keys(choices).join(', '); + } + var message = format('Invalid choice: %s (choose from [%s])', value, choices); + throw argumentErrorHelper(action, message); + } +}; + +// +// Help formatting methods +// + +/** + * ArgumentParser#formatUsage -> string + * + * Return usage string + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatUsage = function () { + var formatter = this._getFormatter(); + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + return formatter.formatHelp(); +}; + +/** + * ArgumentParser#formatHelp -> string + * + * Return help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.formatHelp = function () { + var formatter = this._getFormatter(); + + // usage + formatter.addUsage(this.usage, this._actions, this._mutuallyExclusiveGroups); + + // description + formatter.addText(this.description); + + // positionals, optionals and user-defined groups + this._actionGroups.forEach(function (actionGroup) { + formatter.startSection(actionGroup.title); + formatter.addText(actionGroup.description); + formatter.addArguments(actionGroup._groupActions); + formatter.endSection(); + }); + + // epilog + formatter.addText(this.epilog); + + // determine help from format above + return formatter.formatHelp(); +}; + +ArgumentParser.prototype._getFormatter = function () { + var FormatterClass = this.formatterClass; + var formatter = new FormatterClass({ prog: this.prog }); + return formatter; +}; + +// +// Print functions +// + +/** + * ArgumentParser#printUsage() -> Void + * + * Print usage + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printUsage = function () { + this._printMessage(this.formatUsage()); +}; + +/** + * ArgumentParser#printHelp() -> Void + * + * Print help + * + * See also [original guide][1] + * + * [1]:http://docs.python.org/dev/library/argparse.html#printing-help + **/ +ArgumentParser.prototype.printHelp = function () { + this._printMessage(this.formatHelp()); +}; + +ArgumentParser.prototype._printMessage = function (message, stream) { + if (!stream) { + stream = process.stdout; + } + if (message) { + stream.write('' + message); + } +}; + +// +// Exit functions +// + +/** + * ArgumentParser#exit(status=0, message) -> Void + * - status (int): exit status + * - message (string): message + * + * Print message in stderr/stdout and exit program + **/ +ArgumentParser.prototype.exit = function (status, message) { + if (message) { + if (status === 0) { + this._printMessage(message); + } else { + this._printMessage(message, process.stderr); + } + } + + process.exit(status); +}; + +/** + * ArgumentParser#error(message) -> Void + * - err (Error|string): message + * + * Error method Prints a usage message incorporating the message to stderr and + * exits. If you override this in a subclass, + * it should not return -- it should + * either exit or throw an exception. + * + **/ +ArgumentParser.prototype.error = function (err) { + var message; + if (err instanceof Error) { + if (this.debug === true) { + throw err; + } + message = err.message; + } else { + message = err; + } + var msg = format('%s: error: %s', this.prog, message) + c.EOL; + + if (this.debug === true) { + throw new Error(msg); + } + + this.printUsage(process.stderr); + + return this.exit(2, msg); +}; + +module.exports = ArgumentParser; diff --git a/.pnpm-store/v11/files/8e/9a04f75f6bf7527dedc502b651a44886f7f6c93d2822580be2f5bb152a9c544a4517749b77ee845ec633e7f15c35311773242db69cf35f0147318ddb862e95 b/.pnpm-store/v11/files/8e/9a04f75f6bf7527dedc502b651a44886f7f6c93d2822580be2f5bb152a9c544a4517749b77ee845ec633e7f15c35311773242db69cf35f0147318ddb862e95 new file mode 100644 index 00000000..d2ffcc48 --- /dev/null +++ b/.pnpm-store/v11/files/8e/9a04f75f6bf7527dedc502b651a44886f7f6c93d2822580be2f5bb152a9c544a4517749b77ee845ec633e7f15c35311773242db69cf35f0147318ddb862e95 @@ -0,0 +1,34 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface PromiseConstructor { + /** + * Takes a callback of any kind (returns or throws, synchronously or asynchronously) and wraps its result + * in a Promise. + * + * @param callbackFn A function that is called synchronously. It can do anything: either return + * a value, throw an error, or return a promise. + * @param args Additional arguments, that will be passed to the callback. + * + * @returns A Promise that is: + * - Already fulfilled, if the callback synchronously returns a value. + * - Already rejected, if the callback synchronously throws an error. + * - Asynchronously fulfilled or rejected, if the callback returns a promise. + */ + try(callbackFn: (...args: U) => T | PromiseLike, ...args: U): Promise>; +} diff --git a/.pnpm-store/v11/files/8e/bc29887213c2e99353f490934975c4ad632e238c56b4db7f9d54fa5a3034b50c93304a024c4e87fbd52ec5071f4ded6e2a112be31084608a7d2d63ab13dc00 b/.pnpm-store/v11/files/8e/bc29887213c2e99353f490934975c4ad632e238c56b4db7f9d54fa5a3034b50c93304a024c4e87fbd52ec5071f4ded6e2a112be31084608a7d2d63ab13dc00 new file mode 100644 index 00000000..1d87a932 --- /dev/null +++ b/.pnpm-store/v11/files/8e/bc29887213c2e99353f490934975c4ad632e238c56b4db7f9d54fa5a3034b50c93304a024c4e87fbd52ec5071f4ded6e2a112be31084608a7d2d63ab13dc00 @@ -0,0 +1,4 @@ +import { ITestSuite } from "suman-types/dts/test-suite"; +import { Suman } from "../suman"; +import { ITestDataObj } from "suman-types/dts/it"; +export declare const makeHandleTest: (suman: Suman, gracefulExit: Function) => (self: ITestSuite, test: ITestDataObj, cb: Function, retryData?: any) => any; diff --git a/.pnpm-store/v11/files/8e/c9962b2ef79ff86e8a140f10c135150b7385a1218355c6bf96d68d07572421edc475a8986619e183cdb42d21f84e2fbb2f8540acb2dbf5f78cc57a26a09e01 b/.pnpm-store/v11/files/8e/c9962b2ef79ff86e8a140f10c135150b7385a1218355c6bf96d68d07572421edc475a8986619e183cdb42d21f84e2fbb2f8540acb2dbf5f78cc57a26a09e01 new file mode 100644 index 00000000..f811b8a0 --- /dev/null +++ b/.pnpm-store/v11/files/8e/c9962b2ef79ff86e8a140f10c135150b7385a1218355c6bf96d68d07572421edc475a8986619e183cdb42d21f84e2fbb2f8540acb2dbf5f78cc57a26a09e01 @@ -0,0 +1,119 @@ +# Changelog + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16) + + +### Features + +* rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) + +### [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) + + +## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) + + +### Bug Fixes + +* typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) + + + + +## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) + + +### Bug Fixes + +* fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) + + + + +# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) + + +### Bug Fixes + +* assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) +* fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) +* Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) +* mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) + +### Features + +* enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) + + + +## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) + + +### Bug Fixes + +* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + + + + +# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16) + + +### Bug Fixes + +* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) +* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) + + +### Features + +* Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) + + +# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) + +### Bug Fixes + +* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) +* Fix typo (#178) +* Simple typo fix (#165) + +### Features +* v5 support in CLI (#197) +* V5 support (#188) + + +# 3.0.1 (2016-11-28) + +* split uuid versions into separate files + + +# 3.0.0 (2016-11-17) + +* remove .parse and .unparse + + +# 2.0.0 + +* Removed uuid.BufferClass + + +# 1.4.0 + +* Improved module context detection +* Removed public RNG functions + + +# 1.3.2 + +* Improve tests and handling of v1() options (Issue #24) +* Expose RNG option to allow for perf testing with different generators + + +# 1.3.0 + +* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! +* Support for node.js crypto API +* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/.pnpm-store/v11/files/8e/ca87e780b4a17442e47c8b37bb0efe765c113bd53e56f796b9358369c84b99360e5cdb1af168c6e72d1ec91a1d070577a4c54ae90899cee0ab4d7a50ee1775 b/.pnpm-store/v11/files/8e/ca87e780b4a17442e47c8b37bb0efe765c113bd53e56f796b9358369c84b99360e5cdb1af168c6e72d1ec91a1d070577a4c54ae90899cee0ab4d7a50ee1775 new file mode 100644 index 00000000..d151f4df --- /dev/null +++ b/.pnpm-store/v11/files/8e/ca87e780b4a17442e47c8b37bb0efe765c113bd53e56f796b9358369c84b99360e5cdb1af168c6e72d1ec91a1d070577a4c54ae90899cee0ab4d7a50ee1775 @@ -0,0 +1,21 @@ +{ + "name": "blob", + "description": "Abstracts out Blob and uses BlobBulder in cases where it is supported with any vendor prefix.", + "version": "0.0.5", + "homepage": "https://github.com/webmodules/blob", + "license": "MIT", + "dependencies": {}, + "devDependencies": { + "mocha": "1.17.1", + "expect.js": "0.2.0", + "zuul": "1.10.2", + "browserify": "4.2.3" + }, + "repository": { + "type": "git", + "url": "git://github.com/webmodules/blob.git" + }, + "scripts": { + "test": "make test" + } +} diff --git a/.pnpm-store/v11/files/8e/d4d431e2bebddeb6cd09894a96cc5b0cd92378a4ed9734213b22c017116abc0c2779a80399dab3c77173085f3327e290cf1b4f81b2c68aadee46558d24b226 b/.pnpm-store/v11/files/8e/d4d431e2bebddeb6cd09894a96cc5b0cd92378a4ed9734213b22c017116abc0c2779a80399dab3c77173085f3327e290cf1b4f81b2c68aadee46558d24b226 new file mode 100644 index 00000000..64555986 --- /dev/null +++ b/.pnpm-store/v11/files/8e/d4d431e2bebddeb6cd09894a96cc5b0cd92378a4ed9734213b22c017116abc0c2779a80399dab3c77173085f3327e290cf1b4f81b2c68aadee46558d24b226 @@ -0,0 +1,60 @@ +var apply = require('./_apply'), + arrayMap = require('./_arrayMap'), + baseIteratee = require('./_baseIteratee'), + baseRest = require('./_baseRest'); + +/** Error message constants. */ +var FUNC_ERROR_TEXT = 'Expected a function'; + +/** + * Creates a function that iterates over `pairs` and invokes the corresponding + * function of the first predicate to return truthy. The predicate-function + * pairs are invoked with the `this` binding and arguments of the created + * function. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Util + * @param {Array} pairs The predicate-function pairs. + * @returns {Function} Returns the new composite function. + * @example + * + * var func = _.cond([ + * [_.matches({ 'a': 1 }), _.constant('matches A')], + * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], + * [_.stubTrue, _.constant('no match')] + * ]); + * + * func({ 'a': 1, 'b': 2 }); + * // => 'matches A' + * + * func({ 'a': 0, 'b': 1 }); + * // => 'matches B' + * + * func({ 'a': '1', 'b': '2' }); + * // => 'no match' + */ +function cond(pairs) { + var length = pairs == null ? 0 : pairs.length, + toIteratee = baseIteratee; + + pairs = !length ? [] : arrayMap(pairs, function(pair) { + if (typeof pair[1] != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return [toIteratee(pair[0]), pair[1]]; + }); + + return baseRest(function(args) { + var index = -1; + while (++index < length) { + var pair = pairs[index]; + if (apply(pair[0], this, args)) { + return apply(pair[1], this, args); + } + } + }); +} + +module.exports = cond; diff --git a/.pnpm-store/v11/files/8e/ed58ab1e6ad7969471207956b9eb3ba2b83852a7b559cd0d3546a4db64edc2b131d6e7b9f271952f31e087854d42a435e5ea6248a803188068dd2c8be62bf0 b/.pnpm-store/v11/files/8e/ed58ab1e6ad7969471207956b9eb3ba2b83852a7b559cd0d3546a4db64edc2b131d6e7b9f271952f31e087854d42a435e5ea6248a803188068dd2c8be62bf0 new file mode 100644 index 00000000..a502e4ac --- /dev/null +++ b/.pnpm-store/v11/files/8e/ed58ab1e6ad7969471207956b9eb3ba2b83852a7b559cd0d3546a4db64edc2b131d6e7b9f271952f31e087854d42a435e5ea6248a803188068dd2c8be62bf0 @@ -0,0 +1,55 @@ +'use strict'; + +var hasOwn = require('hasown'); + +// accessor descriptor properties +var accessor = { + __proto__: null, + configurable: 'boolean', + enumerable: 'boolean', + get: 'function', + set: 'function' +}; + +module.exports = function isAccessorDescriptor(obj, prop) { + if (typeof prop === 'string') { + var val = Object.getOwnPropertyDescriptor(obj, prop); + return typeof val !== 'undefined'; + } + + if (!obj || typeof obj !== 'object') { + return false; + } + + if (hasOwn(obj, 'value') || hasOwn(obj, 'writable')) { + return false; + } + + // one of them must be a function + if ( + (!hasOwn(obj, 'get') || typeof obj.get !== 'function') + && (!hasOwn(obj, 'set') || typeof obj.set !== 'function') + ) { + return false; + } + + // both of them must be a function or undefined + if ( + (hasOwn(obj, 'get') && typeof obj.get !== 'function' && typeof obj.get !== 'undefined') + || (hasOwn(obj, 'set') && typeof obj.set !== 'function' && typeof obj.set !== 'undefined') + ) { + return false; + } + + for (var key in obj) { // eslint-disable-line no-restricted-syntax + if ( + hasOwn(obj, key) + && hasOwn(accessor, key) + && typeof obj[key] !== accessor[key] // eslint-disable-line valid-typeof + && typeof obj[key] !== 'undefined' + ) { + return false; + } + } + return true; +}; diff --git a/.pnpm-store/v11/files/8e/f119000f58e8364debcccd136c091a8766b50f4b0d3790e256143c4adfa8f56a7a88e4b672e9cd61326a28d9b9b066be4737f518bc66eec5ae0af324c4dc72 b/.pnpm-store/v11/files/8e/f119000f58e8364debcccd136c091a8766b50f4b0d3790e256143c4adfa8f56a7a88e4b672e9cd61326a28d9b9b066be4737f518bc66eec5ae0af324c4dc72 new file mode 100644 index 00000000..3442d2c7 --- /dev/null +++ b/.pnpm-store/v11/files/8e/f119000f58e8364debcccd136c091a8766b50f4b0d3790e256143c4adfa8f56a7a88e4b672e9cd61326a28d9b9b066be4737f518bc66eec5ae0af324c4dc72 @@ -0,0 +1,406 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const define_options_classes_1 = require("./test-suite-helpers/define-options-classes"); +const s = require("./s"); +exports.s = s; +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +if (process.env.IS_SUMAN_BROWSER_TEST === 'yes') { + throw new Error('This file should not be loaded if the process.env.IS_SUMAN_BROWSER_TEST var is set to "yes".'); +} +const util = require("util"); +const assert = require("assert"); +const EE = require("events"); +const fs = require("fs"); +const chalk = require("chalk"); +const su = require("suman-utils"); +const async = require("async"); +const pragmatik = require('pragmatik'); +const _suman = global.__suman = (global.__suman || {}); +let inBrowser = false, usingKarma = false; +const sumanRun = require("./helpers/suman-run"); +_suman.dateEverythingStarted = Date.now(); +require('./helpers/add-suman-global-properties'); +require('./patches/all'); +const socketio_child_client_1 = require("./index-helpers/socketio-child-client"); +const sumanOptsFromRunner = _suman.sumanOpts || (process.env.SUMAN_OPTS ? JSON.parse(process.env.SUMAN_OPTS) : {}); +const sumanOpts = _suman.sumanOpts = (_suman.sumanOpts || sumanOptsFromRunner); +if (process.argv.indexOf('-f') > 0) { + sumanOpts.force = true; +} +else if (process.argv.indexOf('--force') > 0) { + sumanOpts.force = true; +} +process.on('error', function (e) { + debugger; + _suman.log.error(su.getCleanErrorString(e)); +}); +try { + if (window) { + sumanOpts.series = true; + fs = require('suman-browser-polyfills/modules/fs'); + } +} +catch (err) { +} +try { + window.onerror = function (e) { + console.error('window onerror event', e); + }; + window.suman = module.exports; + console.log(' => "suman" is now available as a global variable in the browser.'); + inBrowser = _suman.inBrowser = true; + if (window.__karma__) { + usingKarma = _suman.usingKarma = true; + _suman.sumanOpts && (_suman.sumanOpts.force = true); + } +} +catch (err) { + inBrowser = _suman.inBrowser = false; +} +if (!_suman.sumanOpts) { + _suman.log.warning('implementation warning: sumanOpts is not yet defined in runtime.'); +} +if (_suman.sumanOpts && _suman.sumanOpts.verbosity > 8) { + _suman.log.info(' => Are we in browser? => ', inBrowser ? 'yes!' : 'no.'); +} +require('./index-helpers/exit-handling'); +const SUMAN_SINGLE_PROCESS = process.env.SUMAN_SINGLE_PROCESS === 'yes'; +const IS_SUMAN_DEBUG = process.env.SUMAN_DEBUG === 'yes'; +const sumanRuntimeErrors = _suman.sumanRuntimeErrors = _suman.sumanRuntimeErrors || []; +const suman_constants_1 = require("./config/suman-constants"); +const handle_integrants_1 = require("./index-helpers/handle-integrants"); +const rules = require("./helpers/handle-varargs"); +const suman_1 = require("./suman"); +const exec_suite_1 = require("./exec-suite"); +const general_1 = require("./helpers/general"); +const acquire_ioc_static_deps_1 = require("./acquire-dependencies/acquire-ioc-static-deps"); +const handle_suman_shutdown_1 = require("./helpers/handle-suman-shutdown"); +const allOncePreKeys = _suman.oncePreKeys = []; +const allOncePostKeys = _suman.oncePostKeys = []; +const suiteResultEmitter = _suman.suiteResultEmitter = _suman.suiteResultEmitter || new EE(); +const initMap = new Map(); +if (!SUMAN_SINGLE_PROCESS && !inBrowser) { + handle_suman_shutdown_1.handleSingleFileShutdown(); +} +require('./index-helpers/verify-local-global-version'); +let projectRoot, loaded = false, sumanConfig, main, usingRunner, testDebugLogPath, sumanPaths, sumanObj, integrantPreFn; +const testSuiteQueueCallbacks = []; +const testRuns = []; +const testSuiteRegistrationQueueCallbacks = []; +const c = (sumanOpts && sumanOpts.series) ? 1 : 3; +const testSuiteQueue = _suman.tsq = async.queue(function (task, cb) { + testSuiteQueueCallbacks.unshift(cb); + process.nextTick(task); +}, c); +const testSuiteRegistrationQueue = _suman.tsrq = async.queue(function (task, cb) { + testSuiteRegistrationQueueCallbacks.unshift(cb); + process.nextTick(task); +}, c); +testSuiteRegistrationQueue.drain = function () { + if (su.vgt(5)) { + const suites = testRuns.length === 1 ? 'suite' : 'suites'; + _suman.log.info(`Pushing ${testRuns.length} test ${suites} onto queue with concurrency ${c}.\n\n`); + } + while (testRuns.length > 0) { + testSuiteQueue.push(testRuns.shift()); + } +}; +testSuiteQueue.drain = function () { + suiteResultEmitter.emit('suman-test-file-complete'); + if (inBrowser && testSuiteRegistrationQueue.idle()) { + handle_suman_shutdown_1.shutdownProcess(); + } +}; +suiteResultEmitter.on('suman-test-registered', function (fn) { + testRuns.push(fn); + process.nextTick(function () { + let fn = testSuiteRegistrationQueueCallbacks.pop(); + fn && fn.call(null); + }); +}); +suiteResultEmitter.on('suman-completed', function () { + process.nextTick(function () { + let fn = testSuiteQueueCallbacks.pop(); + fn && fn.call(null); + }); +}); +_suman.writeTestError = function (data, ignore) { + if (IS_SUMAN_DEBUG && !_suman.usingRunner) { + if (!ignore) + _suman.checkTestErrorLog = true; + if (!data) + data = new Error('falsy data passed to writeTestError').stack; + if (typeof data !== 'string') + data = util.inspect(data); + fs.appendFileSync(testDebugLogPath, data); + } +}; +if (inBrowser) { + if (!window.__karma__) { + const client = socketio_child_client_1.getClient(); + testSuiteRegistrationQueue.pause(); + setImmediate(function () { + require('./handle-browser').run(testSuiteRegistrationQueue, testSuiteQueue, client); + }); + } +} +exports.init = function ($module, $opts, sumanOptsOverride, confOverride) { + debugger; + require('./handle-exit'); + if (this instanceof exports.init) { + throw new Error('no need to use "new" keyword with the suman.init() function as it is not a constructor.'); + } + if (initMap.size > 0 && !SUMAN_SINGLE_PROCESS) { + _suman.log.error(chalk.red('Suman usage warning => suman.init() only needs to be called once per test script.')); + } + if (!$module) { + throw new Error('please pass a module instance to suman.init(), e.g., suman.init(module).'); + } + if (initMap.get($module)) { + return initMap.get($module); + } + if ($module.sumanInitted) { + throw new Error(`suman.init() already called for this module with filename => ${$module.filename}`); + } + $module.sumanInitted = true; + if (typeof _suman.sumanConfig === 'string') { + _suman.sumanConfig = JSON.parse(_suman.sumanConfig); + } + if (typeof _suman.sumanOpts === 'string') { + _suman.log.info('Parsing global suman-options.'); + _suman.sumanOpts = JSON.parse(_suman.sumanOpts); + _suman.sumanOpts.series = true; + _suman.sumanOpts.force = true; + } + if (!$module.filename) { + _suman.log.warning(`warning: module instance did not have a 'filename' property.`); + $module.filename = '/'; + } + if (!$module.exports) { + _suman.log.warning(`warning: module instance did not have an 'exports' property.`); + $module.exports = {}; + } + if (!loaded) { + _suman.sumanInitCalled = true; + require('./helpers/load-reporters-last-ditch').run(); + projectRoot = _suman.projectRoot = _suman.projectRoot || su.findProjectRoot(process.cwd()) || '/'; + main = require.main.filename; + usingRunner = _suman.usingRunner = _suman.usingRunner || process.env.SUMAN_RUNNER === 'yes'; + sumanConfig = general_1.loadSumanConfig(null, null); + if (!_suman.usingRunner && !_suman.viaSuman) { + require('./helpers/print-version-info'); + } + sumanPaths = general_1.resolveSharedDirs(sumanConfig, projectRoot, sumanOpts); + sumanObj = general_1.loadSharedObjects(sumanPaths, projectRoot, sumanOpts); + integrantPreFn = sumanObj.integrantPreFn; + testDebugLogPath = sumanPaths.testDebugLogPath; + fs.writeFileSync(testDebugLogPath, '\n'); + fs.appendFileSync(testDebugLogPath, '\n\n', { encoding: 'utf8' }); + _suman.writeTestError('\n ### Suman start run @' + new Date() + ' ###\n', true); + _suman.writeTestError('\nCommand => ' + util.inspect(process.argv), true); + } + if (!inBrowser) { + assert(($module.constructor && $module.constructor.name === 'Module'), 'Please pass the test file module instance as the first argument to suman.init()'); + } + let _sumanConfig = _suman.sumanConfig, _sumanOpts = _suman.sumanOpts; + if (sumanOptsOverride) { + assert(su.isObject(sumanOptsOverride), 'Suman opts override value must be a plain object.'); + Object.keys(sumanOptsOverride).forEach(function (k) { + if (String(k).trim().startsWith('$')) { + throw new Error('Suman options override object key must not start with "$" character.'); + } + _sumanOpts['$' + String(k).trim()] = sumanOptsOverride[k]; + }); + } + if (confOverride) { + assert(su.isObject(confOverride), 'Suman config override value must be a plain object.'); + _sumanConfig = Object.assign({}, _suman.sumanConfig, confOverride); + } + _suman.sumanInitStartDate = _suman.sumanInitStartDate || Date.now(); + if (!loaded) { + } + if ($opts) { + assert(su.isObject($opts), 'Please pass an options object as a second argument to suman.init()'); + } + const opts = $opts || {}; + if (opts.override) { + if (opts.override.config) { + assert(su.isObject(opts.override.config), 'config override value must be a plain object.'); + _sumanConfig = Object.assign({}, _suman.sumanConfig, opts.override.config); + } + if (opts.override.opts && opts.override.options) { + throw new Error('please use either "override.options" or "override.opts", not both.'); + } + const zopts = opts.override.opts || opts.override.options; + if (zopts) { + assert(su.isObject(zopts), 'opts override value must be a plain object.'); + Object.keys(zopts).forEach(function (k) { + if (String(k).trim().startsWith('$')) { + throw new Error('Suman options override object key must not start with "$" character.'); + } + _sumanOpts['$' + String(k).trim()] = zopts[k]; + }); + } + } + opts.integrants && assert(Array.isArray(opts.integrants), `'integrants' option must be an array.`); + opts.pre && assert(Array.isArray(opts.pre), `'pre' option must be an array.`); + let $integrants = (opts.integrants || opts.pre || []).filter(i => i).map(function (item) { + assert(typeof item === 'string', `once.pre item must be a string. Instead we have => ${util.inspect(item)}`); + return item; + }); + const integrants = $integrants.filter((i) => i); + if (opts.__expectedExitCode !== undefined && !SUMAN_SINGLE_PROCESS) { + let expectedExitCode = _suman.expectedExitCode = _suman.expectedExitCode || opts.__expectedExitCode; + assert(Number.isInteger(expectedExitCode) && expectedExitCode > -1, ' => Suman usage error => Expected exit ' + + 'code not an positive/acceptable integer.'); + } + if (opts.timeout !== undefined && !SUMAN_SINGLE_PROCESS) { + const timeout = _suman.expectedTimeout = opts.timeout; + assert(Number.isInteger(timeout) && timeout > 0, ' => Suman usage error => Expected timeout value ' + + 'is not an acceptable integer.'); + setTimeout(function () { + console.log('\n', new Error('=> Suman test file has timed out -' + + ' "timeout" value passed to suman.init() has been reached exiting....').stack); + process.exit(suman_constants_1.constants.EXIT_CODES.TEST_FILE_TIMEOUT); + }, timeout); + } + opts.post && assert(Array.isArray(opts.post), `'post' option must be an array.`); + let $oncePost = (opts.post || []).filter(function (item) { + assert(typeof item === 'string', `once.post key must be a string. Instead we have => ${util.inspect(item)}`); + return item; + }); + allOncePostKeys.push($oncePost); + allOncePreKeys.push(integrants); + const iocData = opts.iocData || opts.ioc || {}; + if (iocData) { + try { + assert(typeof iocData === 'object' && !Array.isArray(iocData), chalk.red(' => Suman usage error => "ioc" property passed to suman.init() needs ' + + 'to point to an object')); + } + catch (err) { + _suman.log.error(err.stack || err); + process.exit(suman_constants_1.constants.EXIT_CODES.IOC_PASSED_TO_SUMAN_INIT_BAD_FORM); + } + } + const integrantsFn = handle_integrants_1.handleIntegrants(integrants, $oncePost, integrantPreFn, $module); + const start = function ($$desc, $$opts) { + const isPreParsed = $$opts && $$opts.__preParsed; + const args = pragmatik.parse(arguments, rules.createSignature, isPreParsed); + args[1].__preParsed = true; + if (start.tooLate === true) { + console.error(' => Suman usage fatal error => You must call Test.create() synchronously => \n\t' + + 'in other words, all Test.create() calls should be registered in the same tick of the event loop.'); + return process.exit(suman_constants_1.constants.EXIT_CODES.ASYNCHRONOUS_CALL_OF_TEST_DOT_DESCRIBE); + } + process.nextTick(function () { + start.tooLate = true; + }); + const to = setTimeout(function () { + console.error('Suman usage error => Integrant acquisition timeout.'); + process.exit(suman_constants_1.constants.EXIT_CODES.INTEGRANT_ACQUISITION_TIMEOUT); + }, _suman.weAreDebugging ? 50000000 : 50000); + let onPreVals = function (vals) { + clearTimeout(to); + _suman['$pre'] = JSON.parse(su.customStringify(vals)); + _suman.userData = JSON.parse(su.customStringify(iocData)); + let suman = suman_1.makeSuman($module, opts, _sumanOpts, _sumanConfig); + suman.iocData = JSON.parse(su.customStringify(iocData)); + const run = exec_suite_1.execSuite(suman); + try { + process.domain && process.domain.exit(); + } + finally { + global.setImmediate(function () { + testSuiteRegistrationQueue.push(function () { + run.apply(null, args); + }); + }); + } + }; + acquire_ioc_static_deps_1.acquireIocStaticDeps() + .catch(function (err) { + clearTimeout(to); + _suman.log.error(err.stack || err); + _suman.writeTestError(err.stack || err); + process.exit(suman_constants_1.constants.EXIT_CODES.IOC_STATIC_ACQUISITION_ERROR); + }) + .then(function () { + return integrantsFn(); + }) + .catch(function (err) { + clearTimeout(to); + _suman.log.error(err.stack || err); + _suman.writeTestError(err.stack || err); + process.exit(suman_constants_1.constants.EXIT_CODES.INTEGRANT_VERIFICATION_ERROR); + }) + .then(onPreVals) + .catch(function (err) { + clearTimeout(to); + _suman.log.error(err.stack || err); + _suman.writeTestError(err.stack || err); + process.exit(suman_constants_1.constants.EXIT_CODES.PRE_VALS_ERROR); + }); + return this; + }; + const ret = { + parent: $module.parent ? $module.parent.filename : null, + file: $module.filename, + create: start, + define: function (desc, f) { + if (typeof desc === 'function') { + f = desc; + desc = null; + } + const defObj = new define_options_classes_1.DefineObjectContext(desc, start); + if (f) { + assert(typeof f === 'function', 'Optional argument to define() was expected to be a function.'); + f.call(null, defObj); + } + return defObj; + } + }; + initMap.set($module, ret); + loaded = true; + return ret.Test = ret; +}; +exports.autoPass = function (t) { + _suman.log.warning(`test with description ${t.desc} has automatically passed.`); + if (t.callbackMode) { + t.done(); + } +}; +exports.autoFail = function (t) { + let err = new Error('Suman auto-fail. Perhaps flesh-out this hook or test to get it passing.'); + if (t.callbackMode) { + t.done(err); + } + else { + return Promise.reject(err); + } +}; +exports.isolated = function (fn) { + if (typeof fn !== 'function') { + throw new Error('Looks like you did not pass a function to the isolated helper.'); + } + const str = String(fn).trim(); + if (str.indexOf('async') === 0) { + throw new Error('Cannot use async functions for isolated scopes.'); + } + if (str.indexOf('function') !== 0 && !/=>\s*{/.test(str)) { + throw new Error('Cannot use functions without outer braces.'); + } + let first = str.indexOf('{') + 1; + let last = str.lastIndexOf('}'); + const body = str.substr(first, last - first); + const paramNames = su.getArgumentNames(str); + return new Function(...paramNames.concat(body)); +}; +exports.run = sumanRun.run(); +exports.once = su.onceWithCache; +exports.version = require('../package.json').version; +exports.r2gSmokeTest = function () { + return true; +}; +const $exports = module.exports; +exports.default = $exports; diff --git a/.pnpm-store/v11/files/8f/23598c6b918d49cc09fdfc9c1d6780cdb580adfdba7c74d5363de72167aa2b61d4255bc9c567cd6e0ac044bdf20d3c2b70305015f18a0eda64b46044968b53 b/.pnpm-store/v11/files/8f/23598c6b918d49cc09fdfc9c1d6780cdb580adfdba7c74d5363de72167aa2b61d4255bc9c567cd6e0ac044bdf20d3c2b70305015f18a0eda64b46044968b53 new file mode 100644 index 00000000..9c5d8db2 --- /dev/null +++ b/.pnpm-store/v11/files/8f/23598c6b918d49cc09fdfc9c1d6780cdb580adfdba7c74d5363de72167aa2b61d4255bc9c567cd6e0ac044bdf20d3c2b70305015f18a0eda64b46044968b53 @@ -0,0 +1,30 @@ +'use strict'; + +var isObject = require('is-extendable'); +var union = require('arr-union'); +var get = require('get-value'); +var set = require('set-value'); + +module.exports = function unionValue(obj, prop, value) { + if (!isObject(obj)) { + throw new TypeError('union-value expects the first argument to be an object.'); + } + + if (typeof prop !== 'string') { + throw new TypeError('union-value expects `prop` to be a string.'); + } + + var arr = arrayify(get(obj, prop)); + set(obj, prop, union(arr, arrayify(value))); + return obj; +}; + +function arrayify(val) { + if (val === null || typeof val === 'undefined') { + return []; + } + if (Array.isArray(val)) { + return val; + } + return [val]; +} diff --git a/.pnpm-store/v11/files/8f/5451f2b2aab60fe9233b65d377fbd8129378b5b6de58c4dc1d34a95c4aabb225f9fee2f876c48353df9916ecbe990ec0afe0f572474b9ab0e77a2f15aa03d7 b/.pnpm-store/v11/files/8f/5451f2b2aab60fe9233b65d377fbd8129378b5b6de58c4dc1d34a95c4aabb225f9fee2f876c48353df9916ecbe990ec0afe0f572474b9ab0e77a2f15aa03d7 new file mode 100644 index 00000000..c8a02a08 --- /dev/null +++ b/.pnpm-store/v11/files/8f/5451f2b2aab60fe9233b65d377fbd8129378b5b6de58c4dc1d34a95c4aabb225f9fee2f876c48353df9916ecbe990ec0afe0f572474b9ab0e77a2f15aa03d7 @@ -0,0 +1,50 @@ +'use strict'; + + +var format = require('util').format; + + +var ERR_CODE = 'ARGError'; + +/*:nodoc:* + * argumentError(argument, message) -> TypeError + * - argument (Object): action with broken argument + * - message (String): error message + * + * Error format helper. An error from creating or using an argument + * (optional or positional). The string value of this exception + * is the message, augmented with information + * about the argument that caused it. + * + * #####Example + * + * var argumentErrorHelper = require('./argument/error'); + * if (conflictOptionals.length > 0) { + * throw argumentErrorHelper( + * action, + * format('Conflicting option string(s): %s', conflictOptionals.join(', ')) + * ); + * } + * + **/ +module.exports = function (argument, message) { + var argumentName = null; + var errMessage; + var err; + + if (argument.getName) { + argumentName = argument.getName(); + } else { + argumentName = '' + argument; + } + + if (!argumentName) { + errMessage = message; + } else { + errMessage = format('argument "%s": %s', argumentName, message); + } + + err = new TypeError(errMessage); + err.code = ERR_CODE; + return err; +}; diff --git a/.pnpm-store/v11/files/8f/5b1ff1cade5bb464007fcfa9d13cd7ad1318380a879982293426afa57728c1a164f5230cc80768bacd9b6e41df4dc9fca4e3f9543d470bba21f105e1a612c0 b/.pnpm-store/v11/files/8f/5b1ff1cade5bb464007fcfa9d13cd7ad1318380a879982293426afa57728c1a164f5230cc80768bacd9b6e41df4dc9fca4e3f9543d470bba21f105e1a612c0 new file mode 100644 index 00000000..571972c1 --- /dev/null +++ b/.pnpm-store/v11/files/8f/5b1ff1cade5bb464007fcfa9d13cd7ad1318380a879982293426afa57728c1a164f5230cc80768bacd9b6e41df4dc9fca4e3f9543d470bba21f105e1a612c0 @@ -0,0 +1,12 @@ +module['exports'] = { + silly: 'rainbow', + input: 'grey', + verbose: 'cyan', + prompt: 'grey', + info: 'green', + data: 'grey', + help: 'cyan', + warn: 'yellow', + debug: 'blue', + error: 'red' +}; \ No newline at end of file diff --git a/.pnpm-store/v11/files/8f/646bf209a242e5db465156a983889d3d86b12d90b1fb3dab7f0c0bce1bfea9b4e019a34f64a8606869be94b21d4663066ec7997c3db82a61924541e4c6b443 b/.pnpm-store/v11/files/8f/646bf209a242e5db465156a983889d3d86b12d90b1fb3dab7f0c0bce1bfea9b4e019a34f64a8606869be94b21d4663066ec7997c3db82a61924541e4c6b443 new file mode 100644 index 00000000..5d34060a --- /dev/null +++ b/.pnpm-store/v11/files/8f/646bf209a242e5db465156a983889d3d86b12d90b1fb3dab7f0c0bce1bfea9b4e019a34f64a8606869be94b21d4663066ec7997c3db82a61924541e4c6b443 @@ -0,0 +1 @@ +module.exports = require('./flatten'); diff --git a/.pnpm-store/v11/files/8f/66609ec1020ccd018ccec122eb3a65ff067deb228a7189a518934b54d2cd85c393c1407288ac5a6d2b122f4ef01d94fc626a1db168c7f14a809db189311e67 b/.pnpm-store/v11/files/8f/66609ec1020ccd018ccec122eb3a65ff067deb228a7189a518934b54d2cd85c393c1407288ac5a6d2b122f4ef01d94fc626a1db168c7f14a809db189311e67 new file mode 100644 index 00000000..0a8feeca --- /dev/null +++ b/.pnpm-store/v11/files/8f/66609ec1020ccd018ccec122eb3a65ff067deb228a7189a518934b54d2cd85c393c1407288ac5a6d2b122f4ef01d94fc626a1db168c7f14a809db189311e67 @@ -0,0 +1,14 @@ +var baseForOwnRight = require('./_baseForOwnRight'), + createBaseEach = require('./_createBaseEach'); + +/** + * The base implementation of `_.forEachRight` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ +var baseEachRight = createBaseEach(baseForOwnRight, true); + +module.exports = baseEachRight; diff --git a/.pnpm-store/v11/files/8f/729041625449e91ae6ac5e490a51e74d41904add359a0384f3c0c6889bf468e4dfa4c38c2842b01ad1389d69de704080a3639e04b7cad15220550238a7ba96 b/.pnpm-store/v11/files/8f/729041625449e91ae6ac5e490a51e74d41904add359a0384f3c0c6889bf468e4dfa4c38c2842b01ad1389d69de704080a3639e04b7cad15220550238a7ba96 new file mode 100644 index 00000000..c0233f4b --- /dev/null +++ b/.pnpm-store/v11/files/8f/729041625449e91ae6ac5e490a51e74d41904add359a0384f3c0c6889bf468e4dfa4c38c2842b01ad1389d69de704080a3639e04b7cad15220550238a7ba96 @@ -0,0 +1,40 @@ +var baseDifference = require('./_baseDifference'), + baseFlatten = require('./_baseFlatten'), + baseRest = require('./_baseRest'), + isArrayLikeObject = require('./isArrayLikeObject'), + last = require('./last'); + +/** + * This method is like `_.difference` except that it accepts `comparator` + * which is invoked to compare elements of `array` to `values`. The order and + * references of result values are determined by the first array. The comparator + * is invoked with two arguments: (arrVal, othVal). + * + * **Note:** Unlike `_.pullAllWith`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; + * + * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); + * // => [{ 'x': 2, 'y': 1 }] + */ +var differenceWith = baseRest(function(array, values) { + var comparator = last(values); + if (isArrayLikeObject(comparator)) { + comparator = undefined; + } + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) + : []; +}); + +module.exports = differenceWith; diff --git a/.pnpm-store/v11/files/8f/83eb6a452487703a6ffbd22629f96bfe1d17f926515eab01e7d4a92c599bd83943b4eb8696f126be740a6eac420a96baaf12a32c1c2770d78d320e1a4212e5 b/.pnpm-store/v11/files/8f/83eb6a452487703a6ffbd22629f96bfe1d17f926515eab01e7d4a92c599bd83943b4eb8696f126be740a6eac420a96baaf12a32c1c2770d78d320e1a4212e5 new file mode 100644 index 00000000..5499007f --- /dev/null +++ b/.pnpm-store/v11/files/8f/83eb6a452487703a6ffbd22629f96bfe1d17f926515eab01e7d4a92c599bd83943b4eb8696f126be740a6eac420a96baaf12a32c1c2770d78d320e1a4212e5 @@ -0,0 +1,35 @@ +{ + "name": "glob-parent", + "version": "2.0.0", + "description": "Strips glob magic from a string to provide the parent path", + "main": "index.js", + "scripts": { + "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls" + }, + "repository": { + "type": "git", + "url": "https://github.com/es128/glob-parent" + }, + "keywords": [ + "glob", + "parent", + "strip", + "path", + "directory", + "base" + ], + "author": "Elan Shanker", + "license": "ISC", + "bugs": { + "url": "https://github.com/es128/glob-parent/issues" + }, + "homepage": "https://github.com/es128/glob-parent", + "dependencies": { + "is-glob": "^2.0.0" + }, + "devDependencies": { + "coveralls": "^2.11.2", + "istanbul": "^0.3.5", + "mocha": "^2.1.0" + } +} diff --git a/.pnpm-store/v11/files/8f/abd597119c81fee32f8b82a1019fb3ef50e2790fc923d806cf9c8192bd51740f96570d09317a5dd10aa030410819642d6fee5cf21e71fac773aecb268a6056 b/.pnpm-store/v11/files/8f/abd597119c81fee32f8b82a1019fb3ef50e2790fc923d806cf9c8192bd51740f96570d09317a5dd10aa030410819642d6fee5cf21e71fac773aecb268a6056 new file mode 100644 index 00000000..f6df80a4 --- /dev/null +++ b/.pnpm-store/v11/files/8f/abd597119c81fee32f8b82a1019fb3ef50e2790fc923d806cf9c8192bd51740f96570d09317a5dd10aa030410819642d6fee5cf21e71fac773aecb268a6056 @@ -0,0 +1,44 @@ +define(['exports', 'module', './utils'], function (exports, module, _utils) { + 'use strict'; + + var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + // eslint-disable-next-line no-console + if (!console[method]) { + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } + }; + + module.exports = logger; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFJLE1BQU0sR0FBRztBQUNYLGFBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxTQUFLLEVBQUUsTUFBTTs7O0FBR2IsZUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixVQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixZQUFJLFFBQVEsR0FBRyxPQVRaLE9BQU8sQ0FTYSxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNqQixlQUFLLEdBQUcsUUFBUSxDQUFDO1NBQ2xCLE1BQU07QUFDTCxlQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtPQUNGOztBQUVELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7OztBQUdELE9BQUcsRUFBRSxhQUFTLEtBQUssRUFBYztBQUMvQixXQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsVUFDRSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQzlCLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFDekM7QUFDQSxZQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxZQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3BCLGdCQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ2hCOzswQ0FYbUIsT0FBTztBQUFQLGlCQUFPOzs7QUFZM0IsZUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztPQUM3QjtLQUNGO0dBQ0YsQ0FBQzs7bUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0= diff --git a/.pnpm-store/v11/files/8f/b0660de47e3dd8955f161c757baf7c47688d0195f15e1c409fcce61de645f978acec5c9fd3027e17d34926fa70ab650179b7edc5a77d11687f3649f440b16d b/.pnpm-store/v11/files/8f/b0660de47e3dd8955f161c757baf7c47688d0195f15e1c409fcce61de645f978acec5c9fd3027e17d34926fa70ab650179b7edc5a77d11687f3649f440b16d new file mode 100644 index 00000000..65d9d909 --- /dev/null +++ b/.pnpm-store/v11/files/8f/b0660de47e3dd8955f161c757baf7c47688d0195f15e1c409fcce61de645f978acec5c9fd3027e17d34926fa70ab650179b7edc5a77d11687f3649f440b16d @@ -0,0 +1,209 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('parse args', function (t) { + t.deepEqual( + parse(['--no-moo']), + { moo: false, _: [] }, + 'no' + ); + t.deepEqual( + parse(['-v', 'a', '-v', 'b', '-v', 'c']), + { v: ['a', 'b', 'c'], _: [] }, + 'multi' + ); + t.end(); +}); + +test('comprehensive', function (t) { + t.deepEqual( + parse([ + '--name=meowmers', 'bare', '-cats', 'woo', + '-h', 'awesome', '--multi=quux', + '--key', 'value', + '-b', '--bool', '--no-meep', '--multi=baz', + '--', '--not-a-flag', 'eek', + ]), + { + c: true, + a: true, + t: true, + s: 'woo', + h: 'awesome', + b: true, + bool: true, + key: 'value', + multi: ['quux', 'baz'], + meep: false, + name: 'meowmers', + _: ['bare', '--not-a-flag', 'eek'], + } + ); + t.end(); +}); + +test('flag boolean', function (t) { + var argv = parse(['-t', 'moo'], { boolean: 't' }); + t.deepEqual(argv, { t: true, _: ['moo'] }); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('flag boolean value', function (t) { + var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { + boolean: ['t', 'verbose'], + default: { verbose: true }, + }); + + t.deepEqual(argv, { + verbose: false, + t: true, + _: ['moo'], + }); + + t.deepEqual(typeof argv.verbose, 'boolean'); + t.deepEqual(typeof argv.t, 'boolean'); + t.end(); +}); + +test('newlines in params', function (t) { + var args = parse(['-s', 'X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + + // reproduce in bash: + // VALUE="new + // line" + // node program.js --s="$VALUE" + args = parse(['--s=X\nX']); + t.deepEqual(args, { _: [], s: 'X\nX' }); + t.end(); +}); + +test('strings', function (t) { + var s = parse(['-s', '0001234'], { string: 's' }).s; + t.equal(s, '0001234'); + t.equal(typeof s, 'string'); + + var x = parse(['-x', '56'], { string: 'x' }).x; + t.equal(x, '56'); + t.equal(typeof x, 'string'); + t.end(); +}); + +test('stringArgs', function (t) { + var s = parse([' ', ' '], { string: '_' })._; + t.same(s.length, 2); + t.same(typeof s[0], 'string'); + t.same(s[0], ' '); + t.same(typeof s[1], 'string'); + t.same(s[1], ' '); + t.end(); +}); + +test('empty strings', function (t) { + var s = parse(['-s'], { string: 's' }).s; + t.equal(s, ''); + t.equal(typeof s, 'string'); + + var str = parse(['--str'], { string: 'str' }).str; + t.equal(str, ''); + t.equal(typeof str, 'string'); + + var letters = parse(['-art'], { + string: ['a', 't'], + }); + + t.equal(letters.a, ''); + t.equal(letters.r, true); + t.equal(letters.t, ''); + + t.end(); +}); + +test('string and alias', function (t) { + var x = parse(['--str', '000123'], { + string: 's', + alias: { s: 'str' }, + }); + + t.equal(x.str, '000123'); + t.equal(typeof x.str, 'string'); + t.equal(x.s, '000123'); + t.equal(typeof x.s, 'string'); + + var y = parse(['-s', '000123'], { + string: 'str', + alias: { str: 's' }, + }); + + t.equal(y.str, '000123'); + t.equal(typeof y.str, 'string'); + t.equal(y.s, '000123'); + t.equal(typeof y.s, 'string'); + + var z = parse(['-s123'], { + alias: { str: ['s', 'S'] }, + string: ['str'], + }); + + t.deepEqual( + z, + { _: [], s: '123', S: '123', str: '123' }, + 'opt.string works with multiple aliases' + ); + t.end(); +}); + +test('slashBreak', function (t) { + t.same( + parse(['-I/foo/bar/baz']), + { I: '/foo/bar/baz', _: [] } + ); + t.same( + parse(['-xyz/foo/bar/baz']), + { x: true, y: true, z: '/foo/bar/baz', _: [] } + ); + t.end(); +}); + +test('alias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: 'zoom' }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.f, 11); + t.end(); +}); + +test('multiAlias', function (t) { + var argv = parse(['-f', '11', '--zoom', '55'], { + alias: { z: ['zm', 'zoom'] }, + }); + t.equal(argv.zoom, 55); + t.equal(argv.z, argv.zoom); + t.equal(argv.z, argv.zm); + t.equal(argv.f, 11); + t.end(); +}); + +test('nested dotted objects', function (t) { + var argv = parse([ + '--foo.bar', '3', '--foo.baz', '4', + '--foo.quux.quibble', '5', '--foo.quux.o_O', + '--beep.boop', + ]); + + t.same(argv.foo, { + bar: 3, + baz: 4, + quux: { + quibble: 5, + o_O: true, + }, + }); + t.same(argv.beep, { boop: true }); + t.end(); +}); diff --git a/.pnpm-store/v11/files/8f/c871d275966f4d54f29952e66170e6a4bde3747220ce5983abf76be3cafd0951cd31f9629dce21e7c7575387108aff0e2bbd351f6731a2b7425aa8ea096ed0 b/.pnpm-store/v11/files/8f/c871d275966f4d54f29952e66170e6a4bde3747220ce5983abf76be3cafd0951cd31f9629dce21e7c7575387108aff0e2bbd351f6731a2b7425aa8ea096ed0 new file mode 100644 index 00000000..e217b173 --- /dev/null +++ b/.pnpm-store/v11/files/8f/c871d275966f4d54f29952e66170e6a4bde3747220ce5983abf76be3cafd0951cd31f9629dce21e7c7575387108aff0e2bbd351f6731a2b7425aa8ea096ed0 @@ -0,0 +1,456 @@ + + + + + + diff --git a/.pnpm-store/v11/files/8f/ce507d57d40c794882ee8c40eb446cc4aa1c06a7d499520a65edbcd73fe30bcaebd17fc5f45cd0f43e14b3baa72a4a24349211885db5de39c5f56f38fc63b9 b/.pnpm-store/v11/files/8f/ce507d57d40c794882ee8c40eb446cc4aa1c06a7d499520a65edbcd73fe30bcaebd17fc5f45cd0f43e14b3baa72a4a24349211885db5de39c5f56f38fc63b9 new file mode 100644 index 00000000..cec4f8e2 --- /dev/null +++ b/.pnpm-store/v11/files/8f/ce507d57d40c794882ee8c40eb446cc4aa1c06a7d499520a65edbcd73fe30bcaebd17fc5f45cd0f43e14b3baa72a4a24349211885db5de39c5f56f38fc63b9 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toString', require('../toString'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/8f/d1e58b6934268dc16a8f10704f19ab97925564ea67d296fd47d9e2524d0eedbedb9d394292d96ced652b6c0e1e429d22b8162fda9fc7b6760b018de9ba21b4 b/.pnpm-store/v11/files/8f/d1e58b6934268dc16a8f10704f19ab97925564ea67d296fd47d9e2524d0eedbedb9d394292d96ced652b6c0e1e429d22b8162fda9fc7b6760b018de9ba21b4 new file mode 100644 index 00000000..d666fb9c --- /dev/null +++ b/.pnpm-store/v11/files/8f/d1e58b6934268dc16a8f10704f19ab97925564ea67d296fd47d9e2524d0eedbedb9d394292d96ced652b6c0e1e429d22b8162fda9fc7b6760b018de9ba21b4 @@ -0,0 +1,186 @@ +/** + * Module dependencies. + */ + +var tty = require('tty'); +var util = require('util'); + +/** + * This is the Node.js implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.init = init; +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; + +/** + * Colors. + */ + +exports.colors = [ 6, 2, 3, 4, 5, 1 ]; + +try { + var supportsColor = require('supports-color'); + if (supportsColor && supportsColor.level >= 2) { + exports.colors = [ + 20, 21, 26, 27, 32, 33, 38, 39, 40, 41, 42, 43, 44, 45, 56, 57, 62, 63, 68, + 69, 74, 75, 76, 77, 78, 79, 80, 81, 92, 93, 98, 99, 112, 113, 128, 129, 134, + 135, 148, 149, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 178, 179, 184, 185, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 214, 215, 220, 221 + ]; + } +} catch (err) { + // swallow - we only care if `supports-color` is available; it doesn't have to be. +} + +/** + * Build up the default `inspectOpts` object from the environment variables. + * + * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js + */ + +exports.inspectOpts = Object.keys(process.env).filter(function (key) { + return /^debug_/i.test(key); +}).reduce(function (obj, key) { + // camel-case + var prop = key + .substring(6) + .toLowerCase() + .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() }); + + // coerce string value into JS value + var val = process.env[key]; + if (/^(yes|on|true|enabled)$/i.test(val)) val = true; + else if (/^(no|off|false|disabled)$/i.test(val)) val = false; + else if (val === 'null') val = null; + else val = Number(val); + + obj[prop] = val; + return obj; +}, {}); + +/** + * Is stdout a TTY? Colored output is enabled when `true`. + */ + +function useColors() { + return 'colors' in exports.inspectOpts + ? Boolean(exports.inspectOpts.colors) + : tty.isatty(process.stderr.fd); +} + +/** + * Map %o to `util.inspect()`, all on a single line. + */ + +exports.formatters.o = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts) + .split('\n').map(function(str) { + return str.trim() + }).join(' '); +}; + +/** + * Map %o to `util.inspect()`, allowing multiple lines if needed. + */ + +exports.formatters.O = function(v) { + this.inspectOpts.colors = this.useColors; + return util.inspect(v, this.inspectOpts); +}; + +/** + * Adds ANSI color escape codes if enabled. + * + * @api public + */ + +function formatArgs(args) { + var name = this.namespace; + var useColors = this.useColors; + + if (useColors) { + var c = this.color; + var colorCode = '\u001b[3' + (c < 8 ? c : '8;5;' + c); + var prefix = ' ' + colorCode + ';1m' + name + ' ' + '\u001b[0m'; + + args[0] = prefix + args[0].split('\n').join('\n' + prefix); + args.push(colorCode + 'm+' + exports.humanize(this.diff) + '\u001b[0m'); + } else { + args[0] = getDate() + name + ' ' + args[0]; + } +} + +function getDate() { + if (exports.inspectOpts.hideDate) { + return ''; + } else { + return new Date().toISOString() + ' '; + } +} + +/** + * Invokes `util.format()` with the specified arguments and writes to stderr. + */ + +function log() { + return process.stderr.write(util.format.apply(util, arguments) + '\n'); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + if (null == namespaces) { + // If you set a process.env field to null or undefined, it gets cast to the + // string 'null' or 'undefined'. Just delete instead. + delete process.env.DEBUG; + } else { + process.env.DEBUG = namespaces; + } +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + return process.env.DEBUG; +} + +/** + * Init logic for `debug` instances. + * + * Create a new `inspectOpts` object in case `useColors` is set + * differently for a particular `debug` instance. + */ + +function init (debug) { + debug.inspectOpts = {}; + + var keys = Object.keys(exports.inspectOpts); + for (var i = 0; i < keys.length; i++) { + debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]]; + } +} + +/** + * Enable namespaces listed in `process.env.DEBUG` initially. + */ + +exports.enable(load()); diff --git a/.pnpm-store/v11/files/8f/de85a1c2f7cbd7c11e44bf8df09dec5232f90f6725edcf63ccf1b16551d1af960cb4213fae409933b7a95964393abf9ca83f172cfae1df3746d5a1be4a2788 b/.pnpm-store/v11/files/8f/de85a1c2f7cbd7c11e44bf8df09dec5232f90f6725edcf63ccf1b16551d1af960cb4213fae409933b7a95964393abf9ca83f172cfae1df3746d5a1be4a2788 new file mode 100644 index 00000000..f71ba4d7 --- /dev/null +++ b/.pnpm-store/v11/files/8f/de85a1c2f7cbd7c11e44bf8df09dec5232f90f6725edcf63ccf1b16551d1af960cb4213fae409933b7a95964393abf9ca83f172cfae1df3746d5a1be4a2788 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('pullAllWith', require('../pullAllWith')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/8f/e49a97dcd31dc070f76370601eb777515acc3540b938fce93a51a32c27552a8ce385ab4952d9c3ef8108ca673d531a9e94b6b1e09fb71fb214ce0018628662 b/.pnpm-store/v11/files/8f/e49a97dcd31dc070f76370601eb777515acc3540b938fce93a51a32c27552a8ce385ab4952d9c3ef8108ca673d531a9e94b6b1e09fb71fb214ce0018628662 new file mode 100644 index 00000000..2d21760e --- /dev/null +++ b/.pnpm-store/v11/files/8f/e49a97dcd31dc070f76370601eb777515acc3540b938fce93a51a32c27552a8ce385ab4952d9c3ef8108ca673d531a9e94b6b1e09fb71fb214ce0018628662 @@ -0,0 +1,134 @@ +0.4.2 / 2022-02-02 +================== + + * pref: read value only when assigning in parse + * pref: remove unnecessary regexp in parse + +0.4.1 / 2020-04-21 +================== + + * Fix `maxAge` option to reject invalid values + +0.4.0 / 2019-05-15 +================== + + * Add `SameSite=None` support + +0.3.1 / 2016-05-26 +================== + + * Fix `sameSite: true` to work with draft-7 clients + - `true` now sends `SameSite=Strict` instead of `SameSite` + +0.3.0 / 2016-05-26 +================== + + * Add `sameSite` option + - Replaces `firstPartyOnly` option, never implemented by browsers + * Improve error message when `encode` is not a function + * Improve error message when `expires` is not a `Date` + +0.2.4 / 2016-05-20 +================== + + * perf: enable strict mode + * perf: use for loop in parse + * perf: use string concatination for serialization + +0.2.3 / 2015-10-25 +================== + + * Fix cookie `Max-Age` to never be a floating point number + +0.2.2 / 2015-09-17 +================== + + * Fix regression when setting empty cookie value + - Ease the new restriction, which is just basic header-level validation + * Fix typo in invalid value errors + +0.2.1 / 2015-09-17 +================== + + * Throw on invalid values provided to `serialize` + - Ensures the resulting string is a valid HTTP header value + +0.2.0 / 2015-08-13 +================== + + * Add `firstPartyOnly` option + * Throw better error for invalid argument to parse + * perf: hoist regular expression + +0.1.5 / 2015-09-17 +================== + + * Fix regression when setting empty cookie value + - Ease the new restriction, which is just basic header-level validation + * Fix typo in invalid value errors + +0.1.4 / 2015-09-17 +================== + + * Throw better error for invalid argument to parse + * Throw on invalid values provided to `serialize` + - Ensures the resulting string is a valid HTTP header value + +0.1.3 / 2015-05-19 +================== + + * Reduce the scope of try-catch deopt + * Remove argument reassignments + +0.1.2 / 2014-04-16 +================== + + * Remove unnecessary files from npm package + +0.1.1 / 2014-02-23 +================== + + * Fix bad parse when cookie value contained a comma + * Fix support for `maxAge` of `0` + +0.1.0 / 2013-05-01 +================== + + * Add `decode` option + * Add `encode` option + +0.0.6 / 2013-04-08 +================== + + * Ignore cookie parts missing `=` + +0.0.5 / 2012-10-29 +================== + + * Return raw cookie value if value unescape errors + +0.0.4 / 2012-06-21 +================== + + * Use encode/decodeURIComponent for cookie encoding/decoding + - Improve server/client interoperability + +0.0.3 / 2012-06-06 +================== + + * Only escape special characters per the cookie RFC + +0.0.2 / 2012-06-01 +================== + + * Fix `maxAge` option to not throw error + +0.0.1 / 2012-05-28 +================== + + * Add more tests + +0.0.0 / 2012-05-28 +================== + + * Initial release diff --git a/.pnpm-store/v11/files/8f/e82868242e0a8e1dccb5d36980dd8168b4dc3b59f381b14758c4d232311625c6427703f32e04eb1319c4c8d96be9f33845d854c453e1f3cb50f32bdec82119 b/.pnpm-store/v11/files/8f/e82868242e0a8e1dccb5d36980dd8168b4dc3b59f381b14758c4d232311625c6427703f32e04eb1319c4c8d96be9f33845d854c453e1f3cb50f32bdec82119 new file mode 100644 index 00000000..434c4f50 --- /dev/null +++ b/.pnpm-store/v11/files/8f/e82868242e0a8e1dccb5d36980dd8168b4dc3b59f381b14758c4d232311625c6427703f32e04eb1319c4c8d96be9f33845d854c453e1f3cb50f32bdec82119 @@ -0,0 +1,65 @@ +{ + "name": "snapdragon-util", + "description": "Utilities for the snapdragon parser/compiler.", + "version": "3.0.1", + "homepage": "https://github.com/jonschlinkert/snapdragon-util", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/snapdragon-util", + "bugs": { + "url": "https://github.com/jonschlinkert/snapdragon-util/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "kind-of": "^3.2.0" + }, + "devDependencies": { + "define-property": "^1.0.0", + "gulp": "^3.9.1", + "gulp-eslint": "^3.0.1", + "gulp-format-md": "^0.1.12", + "gulp-istanbul": "^1.1.1", + "gulp-mocha": "^3.0.0", + "isobject": "^3.0.0", + "mocha": "^3.3.0", + "snapdragon": "^0.11.0", + "snapdragon-node": "^1.0.6" + }, + "keywords": [ + "capture", + "compile", + "compiler", + "convert", + "match", + "parse", + "parser", + "plugin", + "render", + "snapdragon", + "snapdragonplugin", + "transform", + "util" + ], + "verb": { + "toc": "collapsible", + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/90/11167681b16b58b815ecef3d460515964b379efebf8499c4cfcea8547e14d9206805385009345f3aa95e0044c1de28ba9166fc0f11ededbcdbdef09f28687a b/.pnpm-store/v11/files/90/11167681b16b58b815ecef3d460515964b379efebf8499c4cfcea8547e14d9206805385009345f3aa95e0044c1de28ba9166fc0f11ededbcdbdef09f28687a new file mode 100644 index 00000000..df219014 --- /dev/null +++ b/.pnpm-store/v11/files/90/11167681b16b58b815ecef3d460515964b379efebf8499c4cfcea8547e14d9206805385009345f3aa95e0044c1de28ba9166fc0f11ededbcdbdef09f28687a @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').doDuring; diff --git a/.pnpm-store/v11/files/90/33a81419da8621e52494686bd445936bda5b29b8fa61d4d6ff197bc8ca0a6bfb0d10a19ae9821e38362a9189d9844e563f1a8387dea6e88f8dec654e5af187 b/.pnpm-store/v11/files/90/33a81419da8621e52494686bd445936bda5b29b8fa61d4d6ff197bc8ca0a6bfb0d10a19ae9821e38362a9189d9844e563f1a8387dea6e88f8dec654e5af187 new file mode 100644 index 00000000..f952aa2c --- /dev/null +++ b/.pnpm-store/v11/files/90/33a81419da8621e52494686bd445936bda5b29b8fa61d4d6ff197bc8ca0a6bfb0d10a19ae9821e38362a9189d9844e563f1a8387dea6e88f8dec654e5af187 @@ -0,0 +1,12 @@ +usage: mkdirp [DIR1,DIR2..] {OPTIONS} + + Create each supplied directory including any necessary parent directories that + don't yet exist. + + If the directory already exists, do nothing. + +OPTIONS are: + + -m, --mode If a directory needs to be created, set the mode as an octal + permission string. + diff --git a/.pnpm-store/v11/files/90/38bd8822e0a6d3b5a292dc4757b14b5b4c3fac8a6bc7e2280686a7a564091b3b09bcf12a697e1dfcaa8b549eea6f64c76e14d7afe01880f83ef9d967b92a6e b/.pnpm-store/v11/files/90/38bd8822e0a6d3b5a292dc4757b14b5b4c3fac8a6bc7e2280686a7a564091b3b09bcf12a697e1dfcaa8b549eea6f64c76e14d7afe01880f83ef9d967b92a6e new file mode 100644 index 00000000..d7525b95 --- /dev/null +++ b/.pnpm-store/v11/files/90/38bd8822e0a6d3b5a292dc4757b14b5b4c3fac8a6bc7e2280686a7a564091b3b09bcf12a697e1dfcaa8b549eea6f64c76e14d7afe01880f83ef9d967b92a6e @@ -0,0 +1,204 @@ +/*! + * chai + * Copyright(c) 2011-2014 Jake Luer + * MIT Licensed + */ + +module.exports = function (chai, util) { + var Assertion = chai.Assertion; + + function loadShould () { + // explicitly define this method as function as to have it's name to include as `ssfi` + function shouldGetter() { + if (this instanceof String + || this instanceof Number + || this instanceof Boolean + || typeof Symbol === 'function' && this instanceof Symbol) { + return new Assertion(this.valueOf(), null, shouldGetter); + } + return new Assertion(this, null, shouldGetter); + } + function shouldSetter(value) { + // See https://github.com/chaijs/chai/issues/86: this makes + // `whatever.should = someValue` actually set `someValue`, which is + // especially useful for `global.should = require('chai').should()`. + // + // Note that we have to use [[DefineProperty]] instead of [[Put]] + // since otherwise we would trigger this very setter! + Object.defineProperty(this, 'should', { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } + // modify Object.prototype to have `should` + Object.defineProperty(Object.prototype, 'should', { + set: shouldSetter + , get: shouldGetter + , configurable: true + }); + + var should = {}; + + /** + * ### .fail(actual, expected, [message], [operator]) + * + * Throw a failure. + * + * @name fail + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @param {String} operator + * @namespace BDD + * @api public + */ + + should.fail = function (actual, expected, message, operator) { + message = message || 'should.fail()'; + throw new chai.AssertionError(message, { + actual: actual + , expected: expected + , operator: operator + }, should.fail); + }; + + /** + * ### .equal(actual, expected, [message]) + * + * Asserts non-strict equality (`==`) of `actual` and `expected`. + * + * should.equal(3, '3', '== coerces values to strings'); + * + * @name equal + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Should + * @api public + */ + + should.equal = function (val1, val2, msg) { + new Assertion(val1, msg).to.equal(val2); + }; + + /** + * ### .throw(function, [constructor/string/regexp], [string/regexp], [message]) + * + * Asserts that `function` will throw an error that is an instance of + * `constructor`, or alternately that it will throw an error with message + * matching `regexp`. + * + * should.throw(fn, 'function throws a reference error'); + * should.throw(fn, /function throws a reference error/); + * should.throw(fn, ReferenceError); + * should.throw(fn, ReferenceError, 'function throws a reference error'); + * should.throw(fn, ReferenceError, /function throws a reference error/); + * + * @name throw + * @alias Throw + * @param {Function} function + * @param {ErrorConstructor} constructor + * @param {RegExp} regexp + * @param {String} message + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @namespace Should + * @api public + */ + + should.Throw = function (fn, errt, errs, msg) { + new Assertion(fn, msg).to.Throw(errt, errs); + }; + + /** + * ### .exist + * + * Asserts that the target is neither `null` nor `undefined`. + * + * var foo = 'hi'; + * + * should.exist(foo, 'foo exists'); + * + * @name exist + * @namespace Should + * @api public + */ + + should.exist = function (val, msg) { + new Assertion(val, msg).to.exist; + } + + // negation + should.not = {} + + /** + * ### .not.equal(actual, expected, [message]) + * + * Asserts non-strict inequality (`!=`) of `actual` and `expected`. + * + * should.not.equal(3, 4, 'these numbers are not equal'); + * + * @name not.equal + * @param {Mixed} actual + * @param {Mixed} expected + * @param {String} message + * @namespace Should + * @api public + */ + + should.not.equal = function (val1, val2, msg) { + new Assertion(val1, msg).to.not.equal(val2); + }; + + /** + * ### .throw(function, [constructor/regexp], [message]) + * + * Asserts that `function` will _not_ throw an error that is an instance of + * `constructor`, or alternately that it will not throw an error with message + * matching `regexp`. + * + * should.not.throw(fn, Error, 'function does not throw'); + * + * @name not.throw + * @alias not.Throw + * @param {Function} function + * @param {ErrorConstructor} constructor + * @param {RegExp} regexp + * @param {String} message + * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types + * @namespace Should + * @api public + */ + + should.not.Throw = function (fn, errt, errs, msg) { + new Assertion(fn, msg).to.not.Throw(errt, errs); + }; + + /** + * ### .not.exist + * + * Asserts that the target is neither `null` nor `undefined`. + * + * var bar = null; + * + * should.not.exist(bar, 'bar does not exist'); + * + * @name not.exist + * @namespace Should + * @api public + */ + + should.not.exist = function (val, msg) { + new Assertion(val, msg).to.not.exist; + } + + should['throw'] = should['Throw']; + should.not['throw'] = should.not['Throw']; + + return should; + }; + + chai.should = loadShould; + chai.Should = loadShould; +}; diff --git a/.pnpm-store/v11/files/90/4509c211d002dd07856484db1fb99b208b21dcab9dda4852e2a78731e5a7ff3ba3a1dbe3364ec7cdef27abebc0802596af4b446a6881c4f5033a1b31b5449d b/.pnpm-store/v11/files/90/4509c211d002dd07856484db1fb99b208b21dcab9dda4852e2a78731e5a7ff3ba3a1dbe3364ec7cdef27abebc0802596af4b446a6881c4f5033a1b31b5449d new file mode 100644 index 00000000..1c87e48e --- /dev/null +++ b/.pnpm-store/v11/files/90/4509c211d002dd07856484db1fb99b208b21dcab9dda4852e2a78731e5a7ff3ba3a1dbe3364ec7cdef27abebc0802596af4b446a6881c4f5033a1b31b5449d @@ -0,0 +1,61 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const _suman = global.__suman = (global.__suman || {}); +const { constants } = require('../config/suman-constants'); +let values = null; +exports.getCoreAndDeps = function () { + if (!values) { + const p = new Proxy({}, { + get: function (target, prop) { + const trimmed = String(prop).trim(); + try { + return require(trimmed); + } + catch (err) { } + const replaceLodashWithDash = trimmed.replace(/_/g, '-'); + if (replaceLodashWithDash !== trimmed) { + try { + return require(replaceLodashWithDash); + } + catch (err) { } + throw new Error(`could not require dependencies with names '${trimmed}' or '${replaceLodashWithDash}'.`); + } + throw new Error(`could not require dependency with name '${trimmed}'`); + } + }); + values = { + $core: p, + $deps: p, + $require: p + }; + } + return values; +}; +exports.getProjectModule = function () { + try { + return require(_suman.projectRoot); + } + catch (err) { + _suman.log.error('\n', err.stack || err, '\n'); + return null; + } +}; +exports.lastDitchRequire = function (dep, requestorName) { + requestorName = requestorName || ''; + try { + return require(dep); + } + catch (err) { + try { + return require(String(dep).replace(/_/g, '-')); + } + catch (err) { + _suman.log.error(`'${requestorName}' warning => cannot require dependency with name => '${dep}'.`); + _suman.log.error('Despite the missing dependency, Suman will continue optimistically.'); + console.error('\n'); + return null; + } + } +}; diff --git a/.pnpm-store/v11/files/90/46a8c76df1fd735ce6cdb1a2c664b86945be5d7e7c8a01a0f0922fb9af9e625fab79860a052705c71f78215e90c46fcc77081ac0dbe274ad9bc5e62980ff0b b/.pnpm-store/v11/files/90/46a8c76df1fd735ce6cdb1a2c664b86945be5d7e7c8a01a0f0922fb9af9e625fab79860a052705c71f78215e90c46fcc77081ac0dbe274ad9bc5e62980ff0b new file mode 100644 index 00000000..a87bde12 --- /dev/null +++ b/.pnpm-store/v11/files/90/46a8c76df1fd735ce6cdb1a2c664b86945be5d7e7c8a01a0f0922fb9af9e625fab79860a052705c71f78215e90c46fcc77081ac0dbe274ad9bc5e62980ff0b @@ -0,0 +1,25 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface Atomics { + /** + * Performs a finite-time microwait by signaling to the operating system or + * CPU that the current executing code is in a spin-wait loop. + */ + pause(n?: number): void; +} diff --git a/.pnpm-store/v11/files/90/4c6ea973696f156b90e8007771d43a66b7d5c68573375209796f6323bdaf5b003c30213fb61c2df9cc0e8bec5ab6aa11813dbe2a311720a6eecb8e054f188f b/.pnpm-store/v11/files/90/4c6ea973696f156b90e8007771d43a66b7d5c68573375209796f6323bdaf5b003c30213fb61c2df9cc0e8bec5ab6aa11813dbe2a311720a6eecb8e054f188f new file mode 100644 index 00000000..0bcd9bb9 --- /dev/null +++ b/.pnpm-store/v11/files/90/4c6ea973696f156b90e8007771d43a66b7d5c68573375209796f6323bdaf5b003c30213fb61c2df9cc0e8bec5ab6aa11813dbe2a311720a6eecb8e054f188f @@ -0,0 +1,2122 @@ +{ + "ALL_COMPILER_OPTIONS_6917": "TODAS AS OPÇÕES DO COMPILADOR", + "A_0_modifier_cannot_be_used_with_an_import_declaration_1079": "Um modificador '{0}' não pode ser usado com uma declaração de importação.", + "A_0_parameter_must_be_the_first_parameter_2680": "Um parâmetro '{0}' deve ser o primeiro parâmetro.", + "A_JSDoc_template_tag_may_not_follow_a_typedef_callback_or_overload_tag_8039": "Uma marca JSDoc '@template' pode não seguir uma marca '@typedef', '@callback' ou '@overload'", + "A_JSDoc_typedef_comment_may_not_contain_multiple_type_tags_8033": "Um comentário de JSDoc '@typedef' não pode conter várias marcas '@type'.", + "A_bigint_literal_cannot_be_used_as_a_property_name_1539": "Um literal 'bigint' não pode ser usado como um nome de propriedade.", + "A_bigint_literal_cannot_use_exponential_notation_1352": "Um literal de bigint não pode usar notação exponencial.", + "A_bigint_literal_must_be_an_integer_1353": "Um literal de bigint deve ser um inteiro.", + "A_binding_pattern_parameter_cannot_be_optional_in_an_implementation_signature_2463": "Um parâmetro de padrão de associação não pode ser opcional em uma assinatura de implementação.", + "A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement_1105": "Uma instrução 'break' só pode ser usada em uma iteração de circunscrição ou instrução switch.", + "A_break_statement_can_only_jump_to_a_label_of_an_enclosing_statement_1116": "Uma instrução 'break' só pode saltar para um rótulo de uma instrução de circunscrição.", + "A_character_class_must_not_contain_a_reserved_double_punctuator_Did_you_mean_to_escape_it_with_backs_1522": "Uma classe de caracteres não deve conter um pontuador duplo reservado. Você quis escapar com uma barra invertida?", + "A_character_class_range_must_not_be_bounded_by_another_character_class_1516": "O intervalo de uma classe de caracteres não deve ser limitado por outra classe de caracteres.", + "A_class_can_only_implement_an_identifier_Slashqualified_name_with_optional_type_arguments_2500": "Uma classe pode implementar apenas um identificador/nome qualificado com argumentos de tipo opcionais.", + "A_class_can_only_implement_an_object_type_or_intersection_of_object_types_with_statically_known_memb_2422": "Uma classe pode implementar somente um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values_2863": "Uma classe não pode estender um tipo primitivo como '{0}'. As classes só podem estender valores construtíveis.", + "A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types_2864": "Uma classe não pode implementar um tipo primitivo como '{0}'. Ela só pode implementar outros tipos de objetos nomeados.", + "A_class_declaration_without_the_default_modifier_must_have_a_name_1211": "Uma declaração de classe sem o modificador 'default' deve ter um nome.", + "A_class_member_cannot_have_the_0_keyword_1248": "Um membro de classe não pode ter a palavra-chave '{0}'.", + "A_comma_expression_is_not_allowed_in_a_computed_property_name_1171": "Uma expressão de vírgula não é permitida em um nome de propriedade calculado.", + "A_computed_property_name_cannot_reference_a_type_parameter_from_its_containing_type_2467": "Um nome de propriedade calculado não pode fazer referência a um parâmetro de tipo no seu tipo recipiente.", + "A_computed_property_name_in_a_class_property_declaration_must_have_a_simple_literal_type_or_a_unique_1166": "Um nome de propriedade computado em uma declaração de propriedade de classe precisa ter um tipo literal simples ou um tipo 'símbolo exclusivo'.", + "A_computed_property_name_in_a_method_overload_must_refer_to_an_expression_whose_type_is_a_literal_ty_1168": "Um nome de propriedade computado em uma sobrecarga do método deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_in_a_type_literal_must_refer_to_an_expression_whose_type_is_a_literal_type__1170": "Um nome de propriedade computado em um tipo literal deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_in_an_ambient_context_must_refer_to_an_expression_whose_type_is_a_literal_t_1165": "Um nome de propriedade computado em um contexto de ambiente deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_in_an_interface_must_refer_to_an_expression_whose_type_is_a_literal_type_or_1169": "Um nome de propriedade computado em uma interface deve se referir a uma expressão cujo tipo é um tipo literal ou um 'unique symbol'.", + "A_computed_property_name_must_be_of_type_string_number_symbol_or_any_2464": "Um nome de propriedade calculado deve ser do tipo 'string', 'number', 'symbol' ou 'any'.", + "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355": "As declarações 'const' só podem ser aplicadas a referências a membros de enumeração ou literais de cadeia de caracteres, número, booliano, matriz ou objeto.", + "A_const_enum_member_can_only_be_accessed_using_a_string_literal_2476": "Um membro const enum só pode ser acessado usando um literal de cadeia de caracteres.", + "A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal_or_literal_enum_refere_1254": "Um inicializador 'const' em um contexto de ambiente deve ser uma cadeia de caracteres ou um literal numérico ou uma referência de enumeração literal.", + "A_constructor_cannot_contain_a_super_call_when_its_class_extends_null_17005": "Um construtor não pode conter uma chamada 'super' quando sua classe estende 'null'.", + "A_constructor_cannot_have_a_this_parameter_2681": "Um construtor não pode ter um parâmetro 'this'.", + "A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement_1104": "Uma instrução 'continue' só pode ser usada em uma instrução de iteração de circunscrição.", + "A_continue_statement_can_only_jump_to_a_label_of_an_enclosing_iteration_statement_1115": "Uma instrução 'continue' só pode saltar para um rótulo de uma instrução de iteração de circunscrição.", + "A_declaration_file_cannot_be_imported_without_import_type_Did_you_mean_to_import_an_implementation_f_2846": "Um arquivo de declaração não pode ser importado sem 'import type'. Você quis importar um arquivo de implementação '{0}'?", + "A_declare_modifier_cannot_be_used_in_an_already_ambient_context_1038": "Um modificador 'declare' não pode ser usado em um contexto de ambiente.", + "A_decorator_can_only_decorate_a_method_implementation_not_an_overload_1249": "Um decorador pode decorar somente uma implementação de método, não uma sobrecarga.", + "A_default_clause_cannot_appear_more_than_once_in_a_switch_statement_1113": "Uma cláusula 'default' não pode aparecer mais de uma vez em uma instrução 'switch'.", + "A_default_export_can_only_be_used_in_an_ECMAScript_style_module_1319": "Uma exportação padrão só pode ser usada em um módulo do estilo ECMAScript.", + "A_default_export_must_be_at_the_top_level_of_a_file_or_module_declaration_1258": "Uma exportação padrão deve estar no nível superior de uma declaração de arquivo ou módulo.", + "A_definite_assignment_assertion_is_not_permitted_in_this_context_1255": "Uma declaração de atribuição definitiva '!' não é permitida neste contexto.", + "A_destructuring_declaration_must_have_an_initializer_1182": "Uma declaração de desestruturação deve ter um inicializador.", + "A_dynamic_import_call_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_for_t_2712": "Uma chamada de importação dinâmica no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "A_dynamic_import_call_returns_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_include_ES20_2711": "Uma chamada de importação dinâmica retorna um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "A_file_cannot_have_a_reference_to_itself_1006": "Um arquivo não pode fazer referência a si mesmo.", + "A_function_returning_never_cannot_have_a_reachable_end_point_2534": "Uma função que retorna 'never' não pode ter um ponto de extremidade acessível.", + "A_function_that_is_called_with_the_new_keyword_cannot_have_a_this_type_that_is_void_2679": "Uma função chamada com a palavra-chave 'new' não pode ter um tipo 'this' que seja 'void'.", + "A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value_2355": "Uma função cujo tipo declarado não seja 'undefined', 'void' nem 'any' deve retornar um valor.", + "A_generator_cannot_have_a_void_type_annotation_2505": "O gerador não pode ter uma anotação de tipo 'void'.", + "A_get_accessor_cannot_have_parameters_1054": "Um acessador 'get' não pode ter parâmetros.", + "A_get_accessor_must_be_at_least_as_accessible_as_the_setter_2808": "Um acessador get precisa ser pelo menos tão acessível quanto o setter", + "A_get_accessor_must_return_a_value_2378": "Um acessador 'get' deve retornar um valor.", + "A_label_is_not_allowed_here_1344": "Um rótulo não é permitido aqui.", + "A_labeled_tuple_element_is_declared_as_optional_with_a_question_mark_after_the_name_and_before_the_c_5086": "Um elemento de tupla rotulado é declarado como opcional com um ponto de interrogação depois do nome e antes de dois-pontos, em vez de depois do tipo.", + "A_labeled_tuple_element_is_declared_as_rest_with_a_before_the_name_rather_than_before_the_type_5087": "Um elemento de tupla rotulado foi declarado como Rest com um '...' antes do nome, em vez de antes do tipo.", + "A_mapped_type_may_not_declare_properties_or_methods_7061": "Um tipo mapeado não pode declarar propriedades ou métodos.", + "A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_memb_2651": "O inicializador de um membro em uma declaração de enumeração não pode referenciar membros declarados depois dele, inclusive membros definidos em outras enumerações.", + "A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any_2545": "Uma classe mixin deve ter um construtor um único parâmetro rest do tipo 'any[]'.", + "A_mixin_class_that_extends_from_a_type_variable_containing_an_abstract_construct_signature_must_also_2797": "Uma classe mixin que se estende de uma variável de tipo contendo uma assinatura de constructo abstrata também precisa ser declarada como 'abstract'.", + "A_module_cannot_have_multiple_default_exports_2528": "Um módulo não pode ter várias exportações padrão.", + "A_namespace_declaration_cannot_be_in_a_different_file_from_a_class_or_function_with_which_it_is_merg_2433": "Uma declaração de namespace não pode estar em um arquivo diferente de uma classe ou função com a qual ela é mesclada.", + "A_namespace_declaration_cannot_be_located_prior_to_a_class_or_function_with_which_it_is_merged_2434": "Uma declaração de namespace não pode estar localizada antes de uma classe ou função com a qual ela é mesclada.", + "A_namespace_declaration_is_only_allowed_at_the_top_level_of_a_namespace_or_module_1235": "Uma declaração de namespace só é permitida no nível superior de um namespace ou módulo.", + "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540": "Uma declaração \"namespace\" não deve ser declarada usando a palavra-chave \"module\". Use a palavra-chave \"namespace\".", + "A_non_dry_build_would_build_project_0_6357": "Um build não -dry criaria o projeto '{0}'", + "A_non_dry_build_would_delete_the_following_files_Colon_0_6356": "Um build não -dry excluiria os seguintes arquivos: {0}", + "A_non_dry_build_would_update_timestamps_for_output_of_project_0_6374": "Um build não -dry atualizaria carimbos de data/hora para a saída do projeto '{0}'", + "A_parameter_initializer_is_only_allowed_in_a_function_or_constructor_implementation_2371": "Um inicializador de parâmetro só é permitido em uma implementação de função ou de construtor.", + "A_parameter_property_cannot_be_declared_using_a_rest_parameter_1317": "Uma propriedade de parâmetro não pode ser declarada usando um parâmetro rest.", + "A_parameter_property_is_only_allowed_in_a_constructor_implementation_2369": "Uma propriedade de parâmetro somente é permitida em uma implementação de construtor.", + "A_parameter_property_may_not_be_declared_using_a_binding_pattern_1187": "Uma propriedade de parâmetro pode não ser declarada usando um padrão de associação.", + "A_promise_must_have_a_then_method_1059": "Uma promessa deve ter um método 'then'.", + "A_property_of_a_class_whose_type_is_a_unique_symbol_type_must_be_both_static_and_readonly_1331": "Uma propriedade de uma classe cujo tipo é um tipo de 'unique symbol' deve ser 'static' e 'readonly'.", + "A_property_of_an_interface_or_type_literal_whose_type_is_a_unique_symbol_type_must_be_readonly_1330": "Uma propriedade de uma interface ou tipo literal cujo tipo é um tipo de 'unique symbol' deve ser 'readonly'.", + "A_required_element_cannot_follow_an_optional_element_1257": "Um elemento obrigatório não pode seguir um elemento opcional.", + "A_required_parameter_cannot_follow_an_optional_parameter_1016": "Um parâmetro obrigatório não pode seguir um parâmetro opcional.", + "A_rest_element_cannot_contain_a_binding_pattern_2501": "Um elemento rest não pode conter um padrão de associação.", + "A_rest_element_cannot_follow_another_rest_element_1265": "Um elemento REST não pode seguir outro elemento REST.", + "A_rest_element_cannot_have_a_property_name_2566": "Um elemento rest não pode ter um nome de propriedade.", + "A_rest_element_cannot_have_an_initializer_1186": "Um elemento rest não pode ter um inicializador.", + "A_rest_element_must_be_last_in_a_destructuring_pattern_2462": "Um elemento rest deve ser o último em um padrão de desestruturação.", + "A_rest_element_type_must_be_an_array_type_2574": "Um elemento rest deve ser um tipo de matriz.", + "A_rest_parameter_cannot_be_optional_1047": "Um parâmetro rest não pode ser opcional.", + "A_rest_parameter_cannot_have_an_initializer_1048": "Um parâmetro rest não pode ter um inicializador.", + "A_rest_parameter_must_be_last_in_a_parameter_list_1014": "Um parâmetro rest deve ser o último em uma lista de parâmetros.", + "A_rest_parameter_must_be_of_an_array_type_2370": "Um parâmetro rest deve ser de um tipo de matriz.", + "A_rest_parameter_or_binding_pattern_may_not_have_a_trailing_comma_1013": "Um padrão de associação ou o parâmetro rest não pode ter uma vírgula à direita.", + "A_return_statement_can_only_be_used_within_a_function_body_1108": "Uma instrução 'return' só pode ser usada dentro de um corpo de função.", + "A_return_statement_cannot_be_used_inside_a_class_static_block_18041": "Não é possível usar uma instrução “return” dentro de um bloco estático de classe.", + "A_series_of_entries_which_re_map_imports_to_lookup_locations_relative_to_the_baseUrl_6167": "Uma série de entradas que o remapeamento importa para pesquisar locais relativos a 'baseUrl'.", + "A_set_accessor_cannot_have_a_return_type_annotation_1095": "Um acessador 'set' não pode ter uma anotação de tipo de retorno.", + "A_set_accessor_cannot_have_an_optional_parameter_1051": "Um acessador 'set' não pode ter um parâmetro opcional.", + "A_set_accessor_cannot_have_rest_parameter_1053": "Um acessador 'set' não pode ter um parâmetro rest.", + "A_set_accessor_must_have_exactly_one_parameter_1049": "Um acessador 'set' deve ter exatamente um parâmetro.", + "A_set_accessor_parameter_cannot_have_an_initializer_1052": "Um parâmetro de acessador 'set' não pode ter um inicializador.", + "A_spread_argument_must_either_have_a_tuple_type_or_be_passed_to_a_rest_parameter_2556": "Um argumento de espalhamento deve ter um tipo de tupla ou ser passado para um parâmetro Rest.", + "A_super_call_must_be_a_root_level_statement_within_a_constructor_of_a_derived_class_that_contains_in_2401": "Uma chamada 'super' deve ser uma instrução de nível raiz dentro de um construtor de uma classe derivada que contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", + "A_super_call_must_be_the_first_statement_in_the_constructor_to_refer_to_super_or_this_when_a_derived_2376": "Uma chamada 'super' deve ser a primeira instrução no construtor a se referir a 'super' ou 'this' quando uma classe derivada contém propriedades inicializadas, propriedades de parâmetro ou identificadores privados.", + "A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard_2518": "Uma proteção de tipo baseado em 'this não é compatível com uma proteção de tipo baseado em parâmetro.", + "A_this_type_is_available_only_in_a_non_static_member_of_a_class_or_interface_2526": "Um tipo 'this' está disponível somente em um membro não estático de uma classe ou interface.", + "A_top_level_export_modifier_cannot_be_used_on_value_declarations_in_a_CommonJS_module_when_verbatimM_1287": "Um modificador 'export' de nível superior não pode ser usado em declarações de valor em um módulo CommonJS quando 'verbatimModuleSyntax' estiver habilitado.", + "A_tsconfig_json_file_is_already_defined_at_Colon_0_5054": "Um arquivo 'tsconfig.json' já está definido em: '{0}'.", + "A_tuple_member_cannot_be_both_optional_and_rest_5085": "Um membro de tupla não pode ser opcional e rest.", + "A_tuple_type_cannot_be_indexed_with_a_negative_value_2514": "Um tipo de tupla não pode ser indexado com um valor negativo.", + "A_type_assertion_expression_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_expression_Con_17007": "Uma expressão de asserção de tipo não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", + "A_type_literal_property_cannot_have_an_initializer_1247": "Uma propriedade literal de tipo não pode ter um inicializador.", + "A_type_only_import_can_specify_a_default_import_or_named_bindings_but_not_both_1363": "Uma importação somente de tipo pode especificar uma importação padrão ou associações nomeadas, mas não ambos.", + "A_type_predicate_cannot_reference_a_rest_parameter_1229": "O predicado de tipo não pode fazer referência a um parâmetro rest.", + "A_type_predicate_cannot_reference_element_0_in_a_binding_pattern_1230": "O predicado de tipo não pode fazer referência ao elemento '{0}' em um padrão de associação.", + "A_type_predicate_is_only_allowed_in_return_type_position_for_functions_and_methods_1228": "O predicado de tipo só é permitido na posição de tipo de retorno para funções e métodos.", + "A_type_predicate_s_type_must_be_assignable_to_its_parameter_s_type_2677": "O tipo de um predicado de tipo deve ser atribuível para o tipo de seu parâmetro.", + "A_type_referenced_in_a_decorated_signature_must_be_imported_with_import_type_or_a_namespace_import_w_1272": "Um tipo referenciado em uma assinatura decorada deve ser importado com 'tipo de importação' ou uma importação de namespace quando 'isolatedModules' e 'emitDecoratorMetadata' estão habilitados.", + "A_variable_whose_type_is_a_unique_symbol_type_must_be_const_1332": "Uma variável cujo tipo é um tipo de 'unique symbol' deve ser 'const'.", + "A_yield_expression_is_only_allowed_in_a_generator_body_1163": "A expressão 'yield' só é permitida em um corpo gerador.", + "Abstract_method_0_in_class_1_cannot_be_accessed_via_super_expression_2513": "O método abstrato '{0}' na classe '{1}' não pode ser acessado por meio da expressão super.", + "Abstract_methods_can_only_appear_within_an_abstract_class_1244": "Os métodos abstratos só podem aparecer dentro de uma classe abstrata.", + "Abstract_properties_can_only_appear_within_an_abstract_class_1253": "As propriedades abstratas só podem aparecer em uma classe abstrata.", + "Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor_2715": "A propriedade abstrata '{0}' na classe '{1}' não pode ser acessada no construtor.", + "Accessibility_modifier_already_seen_1028": "O modificador de acessibilidade já foi visto.", + "Accessors_are_only_available_when_targeting_ECMAScript_5_and_higher_1056": "Os acessadores somente estão disponíveis no direcionamento para ECMAScript 5 e superior.", + "Accessors_must_both_be_abstract_or_non_abstract_2676": "Acessadores devem ser abstratos ou não abstratos.", + "Add_0_to_unresolved_variable_90008": "Adicionar '{0}.' à variável não resolvida", + "Add_a_return_statement_95111": "Adicionar uma instrução return", + "Add_a_return_type_to_the_function_declaration_9031": "Adicione um tipo de retorno à declaração da função.", + "Add_a_return_type_to_the_function_expression_9030": "Adicionar um tipo de retorno à expressão da função.", + "Add_a_return_type_to_the_get_accessor_declaration_9032": "Adicione um tipo de retorno à declaração do acessório Get.", + "Add_a_return_type_to_the_method_9034": "Adicione um tipo de retorno ao método", + "Add_a_type_annotation_to_the_parameter_0_9028": "Adicione uma anotação de tipo ao parâmetro {0}.", + "Add_a_type_annotation_to_the_property_0_9029": "Adicione uma anotação de tipo à propriedade {0}.", + "Add_a_type_annotation_to_the_variable_0_9027": "Adicione uma anotação de tipo à variável {0}.", + "Add_a_type_to_parameter_of_the_set_accessor_declaration_9033": "Adicionar um tipo ao parâmetro da declaração do acessório set.", + "Add_all_missing_async_modifiers_95041": "Adicionar todos os modificadores 'async' ausentes", + "Add_all_missing_attributes_95168": "Adicionar todos os atributos ausentes", + "Add_all_missing_call_parentheses_95068": "Adicionar todos os parênteses de chamada ausentes", + "Add_all_missing_function_declarations_95157": "Adicionar todas as declarações de função ausentes", + "Add_all_missing_imports_95064": "Adicionar todas as importações ausentes", + "Add_all_missing_members_95022": "Adicionar todos os membros ausentes", + "Add_all_missing_override_modifiers_95162": "Adicionar todos os modificadores 'override' ausentes", + "Add_all_missing_parameters_95190": "Adicionar todos os parâmetros ausentes", + "Add_all_missing_properties_95166": "Adicionar todas as propriedades ausentes", + "Add_all_missing_return_statement_95114": "Adicionar todas as instruções return ausentes", + "Add_all_missing_super_calls_95039": "Adicionar todas as chamadas super ausentes", + "Add_all_missing_type_annotations_90067": "Adicione todas as anotações de tipo ausentes", + "Add_all_optional_parameters_95193": "Adicione todos os parâmetros opcionais", + "Add_annotation_of_type_0_90062": "Adicionar anotação do tipo '{0}'", + "Add_async_modifier_to_containing_function_90029": "Adicione o modificador assíncrono que contém a função", + "Add_await_95083": "Adicionar 'await'", + "Add_await_to_initializer_for_0_95084": "Adicionar 'await' ao inicializador para '{0}'", + "Add_await_to_initializers_95089": "Adicionar 'await' aos inicializadores", + "Add_braces_to_arrow_function_95059": "Adicionar chaves para a função de seta", + "Add_const_to_all_unresolved_variables_95082": "Adicionar 'const' a todas as variáveis não resolvidas", + "Add_const_to_unresolved_variable_95081": "Adicionar 'const' à variável não resolvida", + "Add_definite_assignment_assertion_to_property_0_95020": "Adicionar a asserção de atribuição definitiva à propriedade '{0}'", + "Add_definite_assignment_assertions_to_all_uninitialized_properties_95028": "Adicionar declarações de atribuição definidas a todas as propriedades não inicializadas", + "Add_export_to_make_this_file_into_a_module_95097": "Adicionar 'export {}' para transformar este arquivo em um módulo", + "Add_extends_constraint_2211": "Adicione a restrição `extends`.", + "Add_extends_constraint_to_all_type_parameters_2212": "Adicionar a restrição `extends` a todos os parâmetros de tipo", + "Add_import_from_0_90057": "Adicionar importação de \"{0}\"", + "Add_index_signature_for_property_0_90017": "Adicionar assinatura de índice para a propriedade '{0}'", + "Add_initializer_to_property_0_95019": "Adicionar inicializador à propriedade '{0}'", + "Add_initializers_to_all_uninitialized_properties_95027": "Adicionar inicializadores a todas as propriedades não inicializadas", + "Add_missing_attributes_95167": "Adicionar atributos ausentes", + "Add_missing_call_parentheses_95067": "Adicionar os parênteses de chamada ausentes", + "Add_missing_comma_for_object_member_completion_0_95187": "Adicionar vírgula ausente para conclusão de membro de objeto '{0}'.", + "Add_missing_enum_member_0_95063": "Adicionar membro de enumeração ausente '{0}'", + "Add_missing_function_declaration_0_95156": "Adicionar a declaração de função ausente '{0}'", + "Add_missing_new_operator_to_all_calls_95072": "Adicionar operador 'new' ausente a todas as chamadas", + "Add_missing_new_operator_to_call_95071": "Adicionar operador 'new' ausente à chamada", + "Add_missing_parameter_to_0_95188": "Adicionar parâmetro ausente a '{0}'", + "Add_missing_parameters_to_0_95189": "Adicionar parâmetros ausentes a '{0}'", + "Add_missing_properties_95165": "Adicionar propriedades ausentes", + "Add_missing_super_call_90001": "Adicionar chamada 'super()' ausente", + "Add_missing_typeof_95052": "Adicionar 'typeof' ausente", + "Add_names_to_all_parameters_without_names_95073": "Adicionar nomes a todos os parâmetros sem nomes", + "Add_optional_parameter_to_0_95191": "Adicionar parâmetro opcional a '{0}'", + "Add_optional_parameters_to_0_95192": "Adicionar parâmetros opcionais ao '{0}'", + "Add_or_remove_braces_in_an_arrow_function_95058": "Adicionar ou remover chaves em uma função de seta", + "Add_override_modifier_95160": "Adicionar modificador \"override\"", + "Add_parameter_name_90034": "Adicionar nome de parâmetro", + "Add_qualifier_to_all_unresolved_variables_matching_a_member_name_95037": "Adicionar um qualificador a todas as variáveis não resolvidas correspondentes a um nome de membro", + "Add_resolution_mode_import_attribute_95196": "Adicionar o atributo de importação 'resolution-mode'", + "Add_resolution_mode_import_attribute_to_all_type_only_imports_that_need_it_95197": "Adicionar o atributo de importação 'resolution-mode' a todas as importações somente de tipo que precisem dele", + "Add_return_type_0_90063": "Adicionar tipo de retorno '{0}'", + "Add_satisfies_and_a_type_assertion_to_this_expression_satisfies_T_as_T_to_make_the_type_explicit_9035": "Adicione satisfies e uma asserção de tipo a esta expressão (satisfies T as T) para tornar o tipo explícito.", + "Add_satisfies_and_an_inline_type_assertion_with_0_90068": "Adicionar satisfies e uma asserção de tipo embutido com '{0}'", + "Add_to_all_uncalled_decorators_95044": "Adicionar '()' a todos os decoradores não chamados", + "Add_ts_ignore_to_all_error_messages_95042": "Adicionar '@ts-ignore' a todas as mensagens de erro", + "Add_undefined_to_a_type_when_accessed_using_an_index_6674": "Adicione 'indefinido' a um tipo quando acessado usando um índice.", + "Add_undefined_to_optional_property_type_95169": "Adicionar 'undefined' ao tipo de propriedade opcional", + "Add_undefined_type_to_all_uninitialized_properties_95029": "Adicionar tipo indefinido a todas as propriedades não inicializadas", + "Add_undefined_type_to_property_0_95018": "Adicionar tipo 'indefinido' à propriedade '{0}'", + "Add_unknown_conversion_for_non_overlapping_types_95069": "Adicionar conversão 'unknown' para tipos sem sobreposição", + "Add_unknown_to_all_conversions_of_non_overlapping_types_95070": "Adicionar 'unknown' a todas as conversões de tipos sem sobreposição", + "Add_void_to_Promise_resolved_without_a_value_95143": "Adicionar 'void' ao Promise resolvido sem um valor", + "Add_void_to_all_Promises_resolved_without_a_value_95144": "Adicionar 'void' a todos os Promises resolvidos sem um valor", + "Adding_a_tsconfig_json_file_will_help_organize_projects_that_contain_both_TypeScript_and_JavaScript__5068": "Adicionar um arquivo tsconfig.json ajudará a organizar projetos que contêm arquivos TypeScript e JavaScript. Saiba mais em https://aka.ms/tsconfig.", + "All_declarations_of_0_must_have_identical_constraints_2838": "Todas as declarações de '{0}' devem ter restrições idênticas.", + "All_declarations_of_0_must_have_identical_modifiers_2687": "Todas as declarações de '{0}' devem ter modificadores idênticos.", + "All_declarations_of_0_must_have_identical_type_parameters_2428": "Todas as declarações de '{0}' devem ter parâmetros de tipo idênticos.", + "All_declarations_of_an_abstract_method_must_be_consecutive_2516": "Todas as declarações de um método abstrato devem ser consecutivas.", + "All_destructured_elements_are_unused_6198": "Todos os elementos desestruturados são inutilizados.", + "All_imports_in_import_declaration_are_unused_6192": "Nenhuma das importações na declaração de importação está sendo utilizada.", + "All_type_parameters_are_unused_6205": "Todos os parâmetros de tipo são inutilizados.", + "All_variables_are_unused_6199": "Nenhuma das variáveis está sendo utilizada.", + "Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these__6600": "Permitir que arquivos JavaScript façam parte do seu programa. Use a opção \"checkJs\" para obter erros desses arquivos.", + "Allow_accessing_UMD_globals_from_modules_6602": "Permitir o acesso a UMD globais de módulos.", + "Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typech_6011": "Permita importações padrão de módulos sem exportação padrão. Isso não afeta a emissão do código, apenas a verificação de digitação.", + "Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export_6601": "Permitir 'importar x de y' quando um módulo não tiver uma exportação padrão.", + "Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file_6639": "Permitir a importação de funções auxiliares do tslib uma vez por projeto, em vez de incluí-las por arquivo.", + "Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noE_6407": "Permitir que as importações incluam extensões de arquivo TypeScript. Requer a definição de '--moduleResolution bundler' e '--noEmit' ou '--emitDeclarationOnly'.", + "Allow_javascript_files_to_be_compiled_6102": "Permita que arquivos javascript sejam compilados.", + "Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules_6691": "Permitir que várias pastas sejam tratadas como uma ao resolver módulos.", + "Already_included_file_name_0_differs_from_file_name_1_only_in_casing_1261": "O nome do arquivo '{0}' já incluído difere do nome de arquivo '{1}' somente em maiúsculas e minúsculas.", + "Ambient_module_declaration_cannot_specify_relative_module_name_2436": "A declaração de módulo de ambiente não pode especificar o nome do módulo relativo.", + "Ambient_modules_cannot_be_nested_in_other_modules_or_namespaces_2435": "Módulos de ambiente não podem ser aninhados em outros módulos ou namespaces.", + "An_AMD_module_cannot_have_multiple_name_assignments_2458": "Um módulo AMD não pode ter várias atribuições de nome.", + "An_abstract_accessor_cannot_have_an_implementation_1318": "Um acessador abstrato não pode ter uma implementação.", + "An_accessibility_modifier_cannot_be_used_with_a_private_identifier_18010": "Não é possível usar um modificador de acessibilidade com um identificador privado.", + "An_accessor_cannot_have_type_parameters_1094": "Um acessador não pode ter parâmetros de tipo.", + "An_accessor_property_cannot_be_declared_optional_1276": "Uma propriedade 'acessador' não pode ser declarada opcional.", + "An_ambient_module_declaration_is_only_allowed_at_the_top_level_in_a_file_1234": "Uma declaração de módulo de ambiente só é permitida no nível superior em um arquivo.", + "An_argument_for_0_was_not_provided_6210": "Não foi fornecido um argumento para '{0}'.", + "An_argument_matching_this_binding_pattern_was_not_provided_6211": "Não foi fornecido um argumento correspondente a esse padrão de associação.", + "An_arithmetic_operand_must_be_of_type_any_number_bigint_or_an_enum_type_2356": "Um operando aritmético deve ser do tipo 'any', 'number', 'bignit' ou um tipo enumerado.", + "An_arrow_function_cannot_have_a_this_parameter_2730": "Uma função de seta não pode ter um parâmetro 'this'.", + "An_async_function_or_method_in_ES5_requires_the_Promise_constructor_Make_sure_you_have_a_declaration_2705": "Uma função ou método assíncrono no ES5 requer o construtor 'Promise'. Verifique se você tem uma declaração para o construtor 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "An_async_function_or_method_must_return_a_Promise_Make_sure_you_have_a_declaration_for_Promise_or_in_2697": "Uma função ou método assíncrono deve retornar um 'Promise'. Verifique se você tem uma declaração para 'Promise' ou inclua 'ES2015' na sua opção '--lib'.", + "An_async_iterator_must_have_a_next_method_2519": "O iterador assíncrono deve ter um método 'next()'.", + "An_element_access_expression_should_take_an_argument_1011": "Uma expressão de acesso do elemento deveria receber um argumento.", + "An_enum_member_cannot_be_named_with_a_private_identifier_18024": "Um membro de enumeração não pode ser nomeado com um identificador privado.", + "An_enum_member_cannot_have_a_numeric_name_2452": "Um membro de enumeração não pode ter um nome numérico.", + "An_enum_member_name_must_be_followed_by_a_or_1357": "Um nome de membro de enumeração deve ser seguido por ',', '=' ou '}'.", + "An_expanded_version_of_this_information_showing_all_possible_compiler_options_6928": "Uma versão expandida dessas informações, mostrando todas as opções do compilador possíveis", + "An_export_assignment_cannot_be_used_in_a_module_with_other_exported_elements_2309": "Uma atribuição de exportação não pode ser usada em um módulo com outros elementos exportados.", + "An_export_assignment_cannot_be_used_in_a_namespace_1063": "Uma atribuição de exportação não pode ser usada em um namespace.", + "An_export_assignment_cannot_have_modifiers_1120": "Uma atribuição de exportação não pode ter modificadores.", + "An_export_assignment_must_be_at_the_top_level_of_a_file_or_module_declaration_1231": "Uma atribuição de exportação deve estar no nível superior de uma declaração de arquivo ou módulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_module_1474": "Uma declaração de exportação só pode ser usada no nível superior de um módulo.", + "An_export_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1233": "Uma declaração de exportação só pode ser usada no nível superior de um namespace ou módulo.", + "An_export_declaration_cannot_have_modifiers_1193": "Uma declaração de exportação não pode ter modificadores.", + "An_export_declaration_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolve_1283": "Uma declaração 'export =' deve fazer referência a um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", + "An_export_declaration_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers__1282": "Uma declaração 'export =' deve fazer referência a um valor quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' refere-se apenas a um tipo.", + "An_export_default_must_reference_a_real_value_when_verbatimModuleSyntax_is_enabled_but_0_resolves_to_1285": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' resolve para uma declaração somente de tipo.", + "An_export_default_must_reference_a_value_when_verbatimModuleSyntax_is_enabled_but_0_only_refers_to_a_1284": "Um 'export default' deve referenciar um valor real quando 'verbatimModuleSyntax' estiver habilitado, mas '{0}' se refere somente a um tipo.", + "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345": "Uma expressão do tipo 'nula' não pode ser testada quanto à veracidade.", + "An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive_1198": "Um valor de escape Unicode estendido deve estar entre 0x0 e 0x10FFFF, inclusive.", + "An_identifier_or_keyword_cannot_immediately_follow_a_numeric_literal_1351": "Um identificador ou palavra-chave não pode imediatamente seguir um literal numérico.", + "An_implementation_cannot_be_declared_in_ambient_contexts_1183": "Uma implementação não pode ser declarada em contextos de ambiente.", + "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379": "Um alias de importação não pode fazer referência a uma declaração que foi exportada usando 'tipo de exportação'.", + "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380": "Um alias de importação não pode fazer referência a uma declaração que foi importada usando 'tipo de importação'.", + "An_import_alias_cannot_resolve_to_a_type_or_type_only_declaration_when_verbatimModuleSyntax_is_enabl_1288": "Um alias de importação não pode resolver uma declaração de tipo ou somente tipo quando \"verbatimModuleSyntax\" estiver habilitado.", + "An_import_alias_cannot_use_import_type_1392": "Um alias de importação não pode usar um 'tipo de importação'", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_module_1473": "Uma declaração de importação só pode ser usada no nível superior de um módulo.", + "An_import_declaration_can_only_be_used_at_the_top_level_of_a_namespace_or_module_1232": "Uma declaração de importação só pode ser usada no nível superior de um namespace ou módulo.", + "An_import_declaration_cannot_have_modifiers_1191": "Uma declaração de importação não pode ter modificadores.", + "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097": "Um caminho de importação só pode terminar com uma extensão '{0}' quando 'allowImportingTsExtensions' estiver habilitado.", + "An_index_signature_cannot_have_a_rest_parameter_1017": "Uma assinatura de índice não pode ter um parâmetro rest.", + "An_index_signature_cannot_have_a_trailing_comma_1025": "Uma assinatura de índice não pode ter uma vírgula à direita.", + "An_index_signature_must_have_a_type_annotation_1021": "Uma assinatura de índice deve ter uma anotação de tipo.", + "An_index_signature_must_have_exactly_one_parameter_1096": "Uma assinatura de índice deve ter exatamente um parâmetro.", + "An_index_signature_parameter_cannot_have_a_question_mark_1019": "Um parâmetro de assinatura de índice não pode ter um ponto de interrogação.", + "An_index_signature_parameter_cannot_have_an_accessibility_modifier_1018": "Um parâmetro de assinatura de índice não pode ter um modificador de acessibilidade.", + "An_index_signature_parameter_cannot_have_an_initializer_1020": "Um parâmetro de assinatura de índice não pode ter um inicializador.", + "An_index_signature_parameter_must_have_a_type_annotation_1022": "Um parâmetro de assinatura de índice deve ter uma anotação de tipo.", + "An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_o_1337": "Um tipo de parâmetro de assinatura de índice não pode ser um tipo literal ou genérico. Considere usar um tipo de objeto mapeado.", + "An_index_signature_parameter_type_must_be_string_number_symbol_or_a_template_literal_type_1268": "Um tipo de parâmetro de assinatura de índice deve ser 'cadeia de caracteres', 'número', 'símbolo' ou um tipo literal de modelo.", + "An_instantiation_expression_cannot_be_followed_by_a_property_access_1477": "Uma expressão de instanciação não pode ser seguida por um acesso de propriedade.", + "An_interface_can_only_extend_an_identifier_Slashqualified_name_with_optional_type_arguments_2499": "Uma interface só pode estender um identificador/nome qualificado com argumentos de tipo opcionais.", + "An_interface_can_only_extend_an_object_type_or_intersection_of_object_types_with_statically_known_me_2312": "Uma interface só pode estender um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types_2840": "Uma interface não pode estender um tipo primitivo como '{0}'. Ela só pode estender outros tipos de objetos nomeados.", + "An_interface_property_cannot_have_an_initializer_1246": "Uma propriedade de interface não pode ter um inicializador.", + "An_iterator_must_have_a_next_method_2489": "Um iterador deve ter um método 'next()'.", + "An_jsxFrag_pragma_is_required_when_using_an_jsx_pragma_with_JSX_fragments_17017": "Um pragma @jsxFrag é necessário ao usar um pragma @jsx com fragmentos JSX.", + "An_object_literal_cannot_have_multiple_get_Slashset_accessors_with_the_same_name_1118": "Um literal de objeto não pode ter vários acessadores get/set com o mesmo nome.", + "An_object_literal_cannot_have_multiple_properties_with_the_same_name_1117": "Um literal de objeto não pode ter várias propriedades com o mesmo nome.", + "An_object_literal_cannot_have_property_and_accessor_with_the_same_name_1119": "Um literal de objeto não pode ter propriedade e acessador com o mesmo nome.", + "An_object_member_cannot_be_declared_optional_1162": "Um membro de objeto não pode ser declarado como opcional.", + "An_object_s_Symbol_hasInstance_method_must_return_a_boolean_value_for_it_to_be_used_on_the_right_han_2861": "O método '[Symbol.hasInstance]' de um objeto deve retornar um valor booliano para que ele seja usado no lado direito de uma expressão 'instanceof'.", + "An_optional_chain_cannot_contain_private_identifiers_18030": "Uma cadeia opcional não pode conter identificadores privados.", + "An_optional_element_cannot_follow_a_rest_element_1266": "Um elemento opcional não pode seguir um elemento REST.", + "An_outer_value_of_this_is_shadowed_by_this_container_2738": "Um valor externo de 'this' é sombreado por este contêiner.", + "An_overload_signature_cannot_be_declared_as_a_generator_1222": "A assinatura de sobrecarga não pode ser declarada como geradora.", + "An_unary_expression_with_the_0_operator_is_not_allowed_in_the_left_hand_side_of_an_exponentiation_ex_17006": "Uma expressão unária com o operador '{0}' não é permitida no lado esquerdo de uma expressão de exponenciação. Considere delimitar a expressão em parênteses.", + "Annotate_everything_with_types_from_JSDoc_95043": "Anotar tudo com tipos do JSDoc", + "Annotate_types_of_properties_expando_function_in_a_namespace_90071": "Anotar tipos de propriedades da função expando em um namespace", + "Annotate_with_type_from_JSDoc_95009": "Anotar com o tipo do JSDoc", + "Another_export_default_is_here_2753": "Outro padrão de exportação está aqui.", + "Any_Unicode_property_that_would_possibly_match_more_than_a_single_character_is_only_available_when_t_1528": "Qualquer propriedade Unicode que possa corresponder a mais de um único caractere só estará disponível quando o sinalizador Conjuntos Unicode (v) estiver definido.", + "Anything_that_would_possibly_match_more_than_a_single_character_is_invalid_inside_a_negated_characte_1518": "Qualquer coisa que possa corresponder a mais de um único caractere é inválida dentro de uma classe de caractere negada.", + "Are_you_missing_a_semicolon_2734": "Você está esquecendo de um ponto e vírgula?", + "Argument_expression_expected_1135": "Expressão de argumento esperada.", + "Argument_for_0_option_must_be_Colon_1_6046": "O argumento para a opção '{0}' deve ser: {1}.", + "Argument_of_dynamic_import_cannot_be_spread_element_1325": "O argumento da importação dinâmica não pode ser um elemento de espalhamento.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345": "O argumento do tipo '{0}' não é atribuível ao parâmetro do tipo '{1}'.", + "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_with_exactOptionalPropertyTypes_Colon_tr_2379": "O argumento do tipo '{0}' não pode ser atribuído ao parâmetro do tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", + "Arguments_for_the_rest_parameter_0_were_not_provided_6236": "Não foram fornecidos argumentos para o parâmetro REST '{0}'.", + "Array_element_destructuring_pattern_expected_1181": "Padrão de desestruturação de elemento da matriz esperado.", + "Arrays_with_spread_elements_can_t_inferred_with_isolatedDeclarations_9018": "Matrizes com elementos espalhados não podem ser inferidas com --isolatedDeclarations.", + "Assertions_require_every_name_in_the_call_target_to_be_declared_with_an_explicit_type_annotation_2775": "As declarações exigem que todos os nomes no destino de chamada sejam declarados com uma anotação de tipo explícito.", + "Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name_2776": "As declarações exigem que o destino da chamada seja um identificador ou um nome qualificado.", + "Assigning_properties_to_functions_without_declaring_them_is_not_supported_with_isolatedDeclarations__9023": "Não há suporte para a atribuição de propriedades a funções sem declará-las com --isolatedDeclarations. Adicione uma declaração explícita para as propriedades atribuídas a essa função.", + "Asterisk_Slash_expected_1010": "'*/' esperado.", + "At_least_one_accessor_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9009": "Pelo menos um acessor deve ter uma anotação de tipo explícita com `--isolatedDeclarations.", + "Augmentations_for_the_global_scope_can_only_be_directly_nested_in_external_modules_or_ambient_module_2669": "Acréscimos de escopo global somente podem ser diretamente aninhados em módulos externos ou declarações de módulo de ambiente.", + "Augmentations_for_the_global_scope_should_have_declare_modifier_unless_they_appear_in_already_ambien_2670": "Acréscimos de escopo global devem ter o modificador 'declare' a menos que apareçam em contexto já ambiente.", + "Auto_discovery_for_typings_is_enabled_in_project_0_Running_extra_resolution_pass_for_module_1_using__6140": "A descoberta automática para digitações está habilitada no projeto '{0}'. Executando o passe de resolução extra para o módulo '{1}' usando o local do cache '{2}'.", + "BUILD_OPTIONS_6919": "OPÇÕES DE BUILD", + "Backwards_Compatibility_6253": "Compatibilidade com Versões Anteriores", + "Base_class_expressions_cannot_reference_class_type_parameters_2562": "As expressões de classe base não podem referenciar parâmetros de tipo de classe.", + "Base_constructor_return_type_0_is_not_an_object_type_or_intersection_of_object_types_with_statically_2509": "O tipo de retorno do construtor base '{0}' não é um tipo de objeto ou interseção de tipos de objeto com membros estaticamente conhecidos.", + "Base_constructors_must_all_have_the_same_return_type_2510": "Todos os construtores base devem ter o mesmo tipo de retorno.", + "Base_directory_to_resolve_non_absolute_module_names_6083": "Diretório base para resolver nomes de módulo não absolutos.", + "BigInt_literals_are_not_available_when_targeting_lower_than_ES2020_2737": "Os literais de BigInt não estão disponíveis ao direcionar para menos de ES2020.", + "Binary_digit_expected_1177": "Dígito binário esperado.", + "Binding_element_0_implicitly_has_an_1_type_7031": "O elemento de associação '{0}' tem implicitamente um tipo '{1}'.", + "Binding_elements_can_t_be_exported_directly_with_isolatedDeclarations_9019": "Os elementos de associação não podem ser exportados diretamente com --isolatedDeclarations.", + "Block_scoped_variable_0_used_before_its_declaration_2448": "Variável de escopo de bloco '{0}' usada antes da sua declaração.", + "Build_a_composite_project_in_the_working_directory_6925": "Crie um projeto composto no diretório de trabalho.", + "Build_all_projects_including_those_that_appear_to_be_up_to_date_6636": "Compilar todos os projetos, incluindo aqueles que parecem estar atualizados.", + "Build_one_or_more_projects_and_their_dependencies_if_out_of_date_6364": "Compilar um ou mais projetos e suas dependências, se estiverem desatualizados", + "Build_option_0_requires_a_value_of_type_1_5073": "A opção de build '{0}' requer um valor do tipo {1}.", + "Building_project_0_6358": "Compilando o projeto '{0}'...", + "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720": "Iteradores internos são instanciados com um tipo 'TReturn' de 'undefined' em vez de 'any'.", + "COMMAND_LINE_FLAGS_6921": "SINALIZADORES DE LINHA DE COMANDO", + "COMMON_COMMANDS_6916": "COMANDOS COMUNS", + "COMMON_COMPILER_OPTIONS_6920": "OPÇÕES COMUNS DO COMPILADOR", + "Call_decorator_expression_90028": "Chamar expressão do decorador", + "Call_signature_return_types_0_and_1_are_incompatible_2202": "Os tipos de retorno da assinatura de chamada '{0}' e '{1}' são incompatíveis.", + "Call_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7020": "Assinatura de chamada, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", + "Call_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2204": "Assinaturas de chamada sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", + "Call_target_does_not_contain_any_signatures_2346": "O destino da chamada não contém nenhuma assinatura.", + "Can_only_convert_logical_AND_access_chains_95142": "Só é possível converter cadeias de acesso E lógicas", + "Can_only_convert_named_export_95164": "Só pode converter exportação nomeada", + "Can_only_convert_property_with_modifier_95137": "Só é possível converter a propriedade com o modificador", + "Can_only_convert_string_concatenations_and_string_literals_95154": "Só é possível converter concatenações de cadeia de caracteres e literais de cadeia de caracteres", + "Cannot_access_0_1_because_0_is_a_type_but_not_a_namespace_Did_you_mean_to_retrieve_the_type_of_the_p_2713": "Não foi possível acessar '{0}.{1}' porque '{0}' é um tipo, mas não um namespace. Você quis dizer recuperar o tipo da propriedade '{1}' em '{0}' com '{0}[\"{1}\"]'?", + "Cannot_access_0_from_another_file_without_qualification_when_1_is_enabled_Use_2_instead_1281": "Não é possível acessar '{0}' de outro arquivo sem qualificação quando '{1}' estiver habilitado. Use '{2}' em vez disso.", + "Cannot_access_ambient_const_enums_when_0_is_enabled_2748": "Não é possível acessar enumerações const de ambiente quando '{0}' estiver habilitado.", + "Cannot_assign_a_0_constructor_type_to_a_1_constructor_type_2672": "Não é possível atribuir um tipo de construtor '{0}' para um tipo de construtor '{1}'.", + "Cannot_assign_an_abstract_constructor_type_to_a_non_abstract_constructor_type_2517": "Não é possível atribuir um tipo de construtor abstrato a um tipo de construtor não abstrato.", + "Cannot_assign_to_0_because_it_is_a_class_2629": "Não é possível fazer a atribuição a '{0}' porque ela é uma classe.", + "Cannot_assign_to_0_because_it_is_a_constant_2588": "Não é possível atribuir a '{0}' porque é uma constante.", + "Cannot_assign_to_0_because_it_is_a_function_2630": "Não é possível fazer a atribuição a '{0}' porque ela é uma função.", + "Cannot_assign_to_0_because_it_is_a_namespace_2631": "Não é possível fazer a atribuição a '{0}' porque ele é um namespace.", + "Cannot_assign_to_0_because_it_is_a_read_only_property_2540": "Não é possível atribuir a '{0}' porque é uma propriedade de somente leitura.", + "Cannot_assign_to_0_because_it_is_an_enum_2628": "Não é possível fazer a atribuição a '{0}' porque ela é uma enumeração.", + "Cannot_assign_to_0_because_it_is_an_import_2632": "Não é possível fazer a atribuição a '{0}' porque ela é uma importação.", + "Cannot_assign_to_0_because_it_is_not_a_variable_2539": "Não é possível atribuir a '{0}' porque não é uma variável.", + "Cannot_assign_to_private_method_0_Private_methods_are_not_writable_2803": "Não é possível fazer a atribuição ao método privado '{0}'. Os métodos privados não são graváveis.", + "Cannot_augment_module_0_because_it_resolves_to_a_non_module_entity_2671": "Não é possível aumentar o módulo '{0}' porque ele resolve para uma entidade não módulo.", + "Cannot_augment_module_0_with_value_exports_because_it_resolves_to_a_non_module_entity_2649": "Não é possível aumentar o módulo '{0}' com as exportações do valor, porque ele resolve para uma entidade sem módulo.", + "Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system_6131": "Não é possível compilar módulos usando a opção '{0}', a menos que o sinalizador '--module' seja 'amd' ou 'system'.", + "Cannot_create_an_instance_of_an_abstract_class_2511": "Não é possível criar uma instância de uma classe abstrata.", + "Cannot_delegate_iteration_to_value_because_the_next_method_of_its_iterator_expects_type_1_but_the_co_2766": "Não é possível delegar iteração para valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o gerador que a contém sempre enviará '{0}'.", + "Cannot_export_0_Only_local_declarations_can_be_exported_from_a_module_2661": "Não é possível exportar '{0}'. Somente declarações locais podem ser exportadas de um módulo.", + "Cannot_extend_a_class_0_Class_constructor_is_marked_as_private_2675": "Não é possível estender uma classe '{0}'. O construtor de classe está marcado como privado.", + "Cannot_extend_an_interface_0_Did_you_mean_implements_2689": "Não é possível estender uma interface '{0}'. Você quis dizer 'implements'?", + "Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0_5081": "Não é possível localizar um arquivo tsconfig.json no diretório atual: {0}.", + "Cannot_find_a_tsconfig_json_file_at_the_specified_directory_Colon_0_5057": "Não é possível encontrar um arquivo tsconfig.json no diretório especificado: '{0}'.", + "Cannot_find_global_type_0_2318": "Não é possível encontrar o tipo global '{0}'.", + "Cannot_find_global_value_0_2468": "Não é possível encontrar o valor global '{0}'.", + "Cannot_find_lib_definition_for_0_2726": "Não é possível encontrar a definição de biblioteca para '{0}'.", + "Cannot_find_lib_definition_for_0_Did_you_mean_1_2727": "Não é possível encontrar a definição de biblioteca para '{0}'. Você quis dizer '{1}'?", + "Cannot_find_module_0_Consider_using_resolveJsonModule_to_import_module_with_json_extension_2732": "Não é possível localizar o módulo '{0}'. Considere usar '--resolveJsonModule' para importar o módulo com a extensão '.json'.", + "Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_t_2792": "Não é possível localizar o módulo '{0}'. Você quis definir a opção 'moduleResolution' como 'nodenext' ou adicionar aliases à opção 'paths'?", + "Cannot_find_module_0_or_its_corresponding_type_declarations_2307": "Não é possível localizar o módulo '{0}' ou suas declarações de tipo correspondentes.", + "Cannot_find_name_0_2304": "Não é possível encontrar o nome '{0}'.", + "Cannot_find_name_0_Did_you_mean_1_2552": "Não é possível localizar o nome '{0}'. Você quis dizer '{1}'?", + "Cannot_find_name_0_Did_you_mean_the_instance_member_this_0_2663": "Não foi possível localizar o nome '{0}'. Você quis dizer o membro de instância 'this.{0}'?", + "Cannot_find_name_0_Did_you_mean_the_static_member_1_0_2662": "Não foi possível encontrar o nome '{0}'. Você quis dizer o membro estático '{1}.{0}'?", + "Cannot_find_name_0_Did_you_mean_to_write_this_in_an_async_function_2311": "Não foi possível encontrar o nome '{0}'. Você quis escrever isto em uma função assíncrona?", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2583": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{1}' ou posterior.", + "Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_2584": "Não é possível encontrar o nome '{0}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para incluir 'dom'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2867": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun'.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_2868": "Não é possível encontrar o nome '{0}'. Você precisa instalar definições de tipo para o Bun? Tente 'npm i --save-dev @types/bun' e adicione 'bun' ao campo de tipos em seu tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2582": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_type_2593": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para um executor de teste? Tente `npm i --save-dev @types/jest` ou `npm i --save-dev @types/mocha` e depois adicione 'jest' ou 'mocha' ao campo tipos em seu tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2581": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o jQuery? Tente `npm i --save-dev @types/jquery`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slash_2592": "Não é possível localizar o nome '{0}'. Você precisa instalar as definições de tipo para jQuery? Tente `npm i --save-dev @types/jquery` e, em seguida, adicione 'jquery' para o campo tipos em seu tsconfig.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2580": "Não é possível localizar o nome '{0}'. Você precisa instalar definições de tipo para o nó? Tente `npm i --save-dev @types/node`.", + "Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashno_2591": "Não é possível encontrar o nome '{0}'. Você precisa instalar as definições de tipo para o nó? Tente `npm i --save-dev @types/node` e, em seguida, adicione 'node' ao campo tipos em seu tsconfig.", + "Cannot_find_namespace_0_2503": "Não é possível encontrar o namespace '{0}'.", + "Cannot_find_namespace_0_Did_you_mean_1_2833": "Não é possível localizar o namespace '{0}'. Você quis dizer '{1}'?", + "Cannot_find_parameter_0_1225": "Não é possível encontrar o parâmetro '{0}'.", + "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009": "Não é possível encontrar o caminho do subdiretório comum para os arquivos de entrada.", + "Cannot_find_type_definition_file_for_0_2688": "Não é possível encontrar o arquivo de definição de tipo para '{0}'.", + "Cannot_import_type_declaration_files_Consider_importing_0_instead_of_1_6137": "Não é possível importar arquivos de declaração de tipo. Considere a possibilidade de importar '{0}' em vez de '{1}'.", + "Cannot_initialize_outer_scoped_variable_0_in_the_same_scope_as_block_scoped_declaration_1_2481": "Não é possível inicializar a variável com escopo externo '{0}' no mesmo escopo que a declaração de escopo de bloco '{1}'.", + "Cannot_invoke_an_object_which_is_possibly_null_2721": "Não é possível invocar um objeto que é possivelmente 'nulo'.", + "Cannot_invoke_an_object_which_is_possibly_null_or_undefined_2723": "Não é possível invocar um objeto que é possivelmente 'nulo' ou 'indefinido'.", + "Cannot_invoke_an_object_which_is_possibly_undefined_2722": "Não é possível invocar um objeto que é possivelmente 'indefinido'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_destructuring__2765": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a desestruturação da matriz sempre enviará '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_array_spread_will_al_2764": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas o array spread sempre enviará '{0}'.", + "Cannot_iterate_value_because_the_next_method_of_its_iterator_expects_type_1_but_for_of_will_always_s_2763": "Não é possível iterar o valor porque o método 'next' de seu iterador espera o tipo '{1}', mas a instrução for-of sempre enviará '{0}'.", + "Cannot_move_statements_to_the_selected_file_95183": "Não é possível mover instruções para o arquivo selecionado", + "Cannot_move_to_file_selected_file_is_invalid_95179": "Não é possível mover para o arquivo, o arquivo selecionado é inválido", + "Cannot_read_file_0_5083": "Não é possível ler o arquivo '{0}'.", + "Cannot_read_file_0_Colon_1_5012": "Não é possível ler o arquivo '{0}': {1}.", + "Cannot_redeclare_block_scoped_variable_0_2451": "Não é possível declarar novamente a variável de escopo de bloco '{0}'.", + "Cannot_redeclare_exported_variable_0_2323": "Não é possível redeclarar a variável exportada '{0}'.", + "Cannot_redeclare_identifier_0_in_catch_clause_2492": "Não é possível declarar novamente o identificador '{0}' na cláusula catch.", + "Cannot_start_a_function_call_in_a_type_annotation_1441": "Não é possível iniciar uma chamada de função em uma anotação de tipo.", + "Cannot_use_JSX_unless_the_jsx_flag_is_provided_17004": "Não é possível usar JSX, a menos que o sinalizador '--jsx' seja fornecido.", + "Cannot_use_export_import_on_a_type_or_type_only_namespace_when_0_is_enabled_1269": "Não é possível usar 'export import' em um tipo ou namespace somente de tipo quando '{0}' estiver habilitado.", + "Cannot_use_imports_exports_or_module_augmentations_when_module_is_none_1148": "Não será possível usar importações, exportações ou acréscimos de módulo quando '--module' for 'none'.", + "Cannot_use_namespace_0_as_a_type_2709": "Não é possível usar o namespace '{0}' como um tipo.", + "Cannot_use_namespace_0_as_a_value_2708": "Não é possível usar o namespace '{0}' como um valor.", + "Cannot_use_this_in_a_static_property_initializer_of_a_decorated_class_2816": "Não é possível usar \"this\" em um inicializador de propriedade estática de uma classe decorada.", + "Cannot_write_file_0_because_it_will_overwrite_tsbuildinfo_file_generated_by_referenced_project_1_6377": "Não é possível gravar o arquivo '{0}' porque ele substituirá o arquivo '.tsbuildinfo' gerado pelo projeto referenciado '{1}'", + "Cannot_write_file_0_because_it_would_be_overwritten_by_multiple_input_files_5056": "Não é possível gravar o arquivo '{0}' porque ele seria substituído por diversos arquivos de entrada.", + "Cannot_write_file_0_because_it_would_overwrite_input_file_5055": "Não é possível gravar o arquivo '{0}' porque ele substituiria o arquivo de entrada.", + "Catch_clause_variable_cannot_have_an_initializer_1197": "A variável de cláusula catch não pode ter um inicializador.", + "Catch_clause_variable_type_annotation_must_be_any_or_unknown_if_specified_1196": "A anotação de tipo de variável da cláusula catch precisa ser 'any' ou 'unknown' quando especificada.", + "Change_0_to_1_90014": "Alterar '{0}' para '{1}'", + "Change_all_extended_interfaces_to_implements_95038": "Alterar todas as interfaces estendidas para 'implements'", + "Change_all_jsdoc_style_types_to_TypeScript_95030": "Alterar todos os tipos de estilo jsdoc para TypeScript", + "Change_all_jsdoc_style_types_to_TypeScript_and_add_undefined_to_nullable_types_95031": "Alterar todos os tipos de estilo jsdoc para TypeScript (e adicionar '| undefined' a tipos que permitem valor nulo)", + "Change_extends_to_implements_90003": "Alterar 'extends' para 'implements'", + "Change_spelling_to_0_90022": "Alterar ortografia para '{0}'", + "Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor_6700": "Verifique as propriedades de classe declaradas, mas não definidas no construtor.", + "Check_side_effect_imports_6806": "Verifique as importações de efeitos colaterais.", + "Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function_6697": "Verificar se os argumentos para os métodos 'associar', 'chamar' e 'aplicar' correspondem à função original.", + "Checking_if_0_is_the_longest_matching_prefix_for_1_2_6104": "Verificando se '{0}' é o maior prefixo correspondente para '{1}' - '{2}'.", + "Circular_definition_of_import_alias_0_2303": "Definição circular do alias de importação '{0}'.", + "Circularity_detected_while_resolving_configuration_Colon_0_18000": "Circularidade detectada ao resolver a configuração: {0}", + "Circularity_originates_in_type_at_this_location_2751": "A circularidade é originada no tipo neste local.", + "Class_0_defines_instance_member_accessor_1_but_extended_class_2_defines_it_as_instance_member_functi_2426": "A classe '{0}' define o acessador de membro de instância '{1}', mas a classe estendida '{2}' o define como uma função de membro de instância.", + "Class_0_defines_instance_member_function_1_but_extended_class_2_defines_it_as_instance_member_access_2423": "A classe '{0}' define a função de membro de instância '{1}', mas a classe estendida '{2}' a define como um acessador de membro de instância.", + "Class_0_defines_instance_member_property_1_but_extended_class_2_defines_it_as_instance_member_functi_2425": "A classe '{0}' define a propriedade de membro de instância '{1}', mas a classe estendida '{2}' a define como uma função de membro de instância.", + "Class_0_incorrectly_extends_base_class_1_2415": "A classe '{0}' estende incorretamente a classe base '{1}'.", + "Class_0_incorrectly_implements_class_1_Did_you_mean_to_extend_1_and_inherit_its_members_as_a_subclas_2720": "A classe '{0}' implementa incorretamente a classe '{1}'. Você pretendia estender '{1}' e herdar seus membros como uma subclasse?", + "Class_0_incorrectly_implements_interface_1_2420": "A classe '{0}' implementa incorretamente a interface '{1}'.", + "Class_0_used_before_its_declaration_2449": "Classe '{0}' usada antes de sua declaração.", + "Class_constructor_may_not_be_a_generator_1368": "O construtor de classe não pode ser um gerador.", + "Class_constructor_may_not_be_an_accessor_1341": "O construtor de classe não pode ser um acessador.", + "Class_declaration_cannot_implement_overload_list_for_0_2813": "A declaração da classe não pode implementar a lista de sobrecarga para '{0}'.", + "Class_declarations_cannot_have_more_than_one_augments_or_extends_tag_8025": "As declarações de classe não podem ter mais de uma marca '@augments' ou '@extends'.", + "Class_decorators_can_t_be_used_with_static_private_identifier_Consider_removing_the_experimental_dec_18036": "Os decoradores de classe não podem ser usados com um identificador privado estático. Considere remover o decorador experimental.", + "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855": "O campo de classe '{0}' definido pela classe pai não está acessível na classe filho via super.", + "Class_name_cannot_be_0_2414": "O nome de classe não pode ser '{0}'.", + "Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0_2725": "O nome da classe não pode ser 'Object' ao direcionar para ES5 e superior com o módulo {0}.", + "Class_static_side_0_incorrectly_extends_base_class_static_side_1_2417": "O lado estático da classe '{0}' incorretamente estende o lado estático da classe base '{1}'.", + "Classes_can_only_extend_a_single_class_1174": "Classes só podem estender uma única classe.", + "Classes_may_not_have_a_field_named_constructor_18006": "Classes não podem ter um campo denominado 'constructor'.", + "Code_contained_in_a_class_is_evaluated_in_JavaScript_s_strict_mode_which_does_not_allow_this_use_of__1210": "O código contido em uma classe é avaliado no modo estrito do JavaScript que não permite o uso de '{0}'. Para obter mais informações, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode.", + "Command_line_Options_6171": "Opções da Linha de Comando", + "Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json_6020": "Compile o projeto dando o caminho para seu arquivo de configuração ou para uma pasta com um 'tsconfig.json'.", + "Compiler_Diagnostics_6251": "Diagnóstico do Compilador", + "Compiler_option_0_cannot_be_given_an_empty_string_18051": "A opção do compilador '{0}' não pode receber uma cadeia de caracteres vazia.", + "Compiler_option_0_expects_an_argument_6044": "A opção do compilador '{0}' espera um argumento.", + "Compiler_option_0_may_not_be_used_with_build_5094": "A opção de compilador '--{0}' não pode ser usada com '--build'.", + "Compiler_option_0_may_only_be_used_with_build_5093": "A opção de compilador '--{0}' pode ser usada somente com '--build'.", + "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124": "A opção do compilador '{0}' de valor '{1}' é instável. Use o TypeScript noturno para silenciar esse erro. Tente atualizar com 'npm install -D typescript@next'.", + "Compiler_option_0_requires_a_value_of_type_1_5024": "A opção do compilador '{0}' requer um valor do tipo {1}.", + "Compiler_reserves_name_0_when_emitting_private_identifier_downlevel_18027": "O compilador reserva o nome '{0}' ao emitir um identificador privado para versões anteriores.", + "Compiles_the_TypeScript_project_located_at_the_specified_path_6927": "Compila o projeto TypeScript localizado no caminho especificado.", + "Compiles_the_current_project_tsconfig_json_in_the_working_directory_6923": "Compila o projeto atual (tsconfig.json no diretório de trabalho).", + "Compiles_the_current_project_with_additional_settings_6929": "Compila o projeto atual, com configurações adicionais.", + "Completeness_6257": "Integridade", + "Composite_projects_may_not_disable_declaration_emit_6304": "Projetos compostos não podem desabilitar a emissão de declaração.", + "Composite_projects_may_not_disable_incremental_compilation_6379": "Projetos compostos podem não desabilitar a compilação incremental.", + "Computed_from_the_list_of_input_files_6911": "Calculado a partir da lista de arquivos de entrada", + "Computed_properties_must_be_number_or_string_literals_variables_or_dotted_expressions_with_isolatedD_9014": "As propriedades computadas devem ser literais de números ou cadeia de caracteres, variáveis ou expressões pontilhadas com --isolatedDeclarations.", + "Computed_property_names_are_not_allowed_in_enums_1164": "Nomes de propriedade calculados não são permitidos em enums.", + "Computed_property_names_on_class_or_object_literals_cannot_be_inferred_with_isolatedDeclarations_9038": "Nomes de propriedades computadas em literais de classe ou objeto não podem ser inferidos com --isolatedDeclarations.", + "Computed_values_are_not_permitted_in_an_enum_with_string_valued_members_2553": "Os valores computados não são permitidos em uma enumeração com membros de valor de cadeia de caracteres.", + "Concatenate_and_emit_output_to_single_file_6001": "Concatenar e emitir saída para um arquivo único.", + "Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports_6410": "Condições a serem definidas além dos padrões específicos do resolvedor ao resolver importações.", + "Conflicts_are_in_this_file_6201": "Há conflitos neste arquivo.", + "Consider_adding_a_declare_modifier_to_this_class_6506": "Considere adicionar um modificador 'declare' para esta classe.", + "Construct_signature_return_types_0_and_1_are_incompatible_2203": "Os tipos de retorno de assinatura de constructo '{0}' e '{1}' são incompatíveis.", + "Construct_signature_which_lacks_return_type_annotation_implicitly_has_an_any_return_type_7013": "Assinatura de constructo, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno 'any'.", + "Construct_signatures_with_no_arguments_have_incompatible_return_types_0_and_1_2205": "Assinaturas de constructo sem argumentos têm tipos de retorno incompatíveis '{0}' e '{1}'.", + "Constructor_implementation_is_missing_2390": "Implementação do construtor ausente.", + "Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration_2673": "O construtor de classe '{0}' é privado e somente acessível na declaração de classe.", + "Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration_2674": "O construtor de classe '{0}' é protegido e somente acessível na declaração de classe.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_a_union_type_1386": "A notação de tipo de construtor precisa estar entre parênteses quando usada em um tipo de união.", + "Constructor_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1388": "A notação de tipo de construtor precisa estar entre parênteses quando usada em um tipo de interseção.", + "Constructors_for_derived_classes_must_contain_a_super_call_2377": "Construtores para classes derivadas devem conter uma chamada 'super'.", + "Containing_file_is_not_specified_and_root_directory_cannot_be_determined_skipping_lookup_in_node_mod_6126": "O arquivo contido não foi especificado e o diretório raiz não pode ser determinado, ignorando a pesquisa na pasta 'node_modules'.", + "Containing_function_is_not_an_arrow_function_95128": "A função contentora não é uma função de seta", + "Control_what_method_is_used_to_detect_module_format_JS_files_1475": "Controlar qual método é usado para detectar arquivos JS no formato de módulo.", + "Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the__2352": "A conversão do tipo '{0}' para o tipo '{1}' pode ser um erro porque nenhum tipo está suficientemente sobreposto ao outro. Se isso era intencional, converta a expressão para 'unknown' primeiro.", + "Convert_0_to_1_in_0_95003": "Converter '{0}' em '{1} em {0}'", + "Convert_0_to_mapped_object_type_95055": "Converter '{0}' para o tipo de objeto mapeado", + "Convert_all_const_to_let_95102": "Converta todos os 'const' para 'let'", + "Convert_all_constructor_functions_to_classes_95045": "Converter todas as funções de construtor em classes", + "Convert_all_invalid_characters_to_HTML_entity_code_95101": "Converter todos os caracteres inválidos em código de entidade HTML", + "Convert_all_re_exported_types_to_type_only_exports_1365": "Converter todos os tipos re-exportados para exportações somente de tipo", + "Convert_all_require_to_import_95048": "Converter todos os 'require' em 'import'", + "Convert_all_to_async_functions_95066": "Converter todos para funções assíncronas", + "Convert_all_to_bigint_numeric_literals_95092": "Converter todos para literais numéricos bigint", + "Convert_all_to_default_imports_95035": "Converter tudo para importações padrão", + "Convert_all_type_literals_to_mapped_type_95021": "Converter todos os literais de tipo em tipo mapeado", + "Convert_all_typedef_to_TypeScript_types_95177": "Converta todos os typedef em tipos TypeScript.", + "Convert_arrow_function_or_function_expression_95122": "Converter a função de seta ou a expressão de função", + "Convert_const_to_let_95093": "Converter 'const' para 'let'", + "Convert_default_export_to_named_export_95061": "Converter exportação padrão para exportação nomeada", + "Convert_function_declaration_0_to_arrow_function_95106": "Converter a declaração de função '{0}' em função de seta", + "Convert_function_expression_0_to_arrow_function_95105": "Converter a expressão de função '{0}' em função de seta", + "Convert_function_to_an_ES2015_class_95001": "Converter função em uma classe ES2015", + "Convert_invalid_character_to_its_html_entity_code_95100": "Converter o caractere inválido para seu código de entidade HTML", + "Convert_named_export_to_default_export_95062": "Converter a exportação nomeada para a exportação padrão", + "Convert_named_imports_to_default_import_95170": "Converter importações nomeadas em importação padrão", + "Convert_named_imports_to_namespace_import_95057": "Converter importações nomeadas em importação de namespace", + "Convert_namespace_import_to_named_imports_95056": "Converter importação de namespace em importações nomeadas", + "Convert_overload_list_to_single_signature_95118": "Converter a lista de sobrecarga em assinatura única", + "Convert_parameters_to_destructured_object_95075": "Converter parâmetros para objeto não estruturado", + "Convert_require_to_import_95047": "Converter 'require' em 'import'", + "Convert_to_ES_module_95017": "Converter em módulo ES", + "Convert_to_a_bigint_numeric_literal_95091": "Converter para um literal numérico bigint", + "Convert_to_anonymous_function_95123": "Converter em uma função anônima", + "Convert_to_arrow_function_95125": "Converter em uma função de seta", + "Convert_to_async_function_95065": "Converter para uma função assíncrona", + "Convert_to_default_import_95013": "Converter para importação padrão", + "Convert_to_named_function_95124": "Converter em uma função nomeada", + "Convert_to_optional_chain_expression_95139": "Converter em expressão de cadeia opcional", + "Convert_to_template_string_95096": "Converter para cadeia de caracteres de modelo", + "Convert_to_type_only_export_1364": "Converter para exportação somente de tipo", + "Convert_typedef_to_TypeScript_type_95176": "Converta o typedef em um tipo TypeScript.", + "Corrupted_locale_file_0_6051": "Arquivo de localidade {0} corrompido.", + "Could_not_convert_to_anonymous_function_95153": "Não foi possível fazer a conversão para a função anônima", + "Could_not_convert_to_arrow_function_95151": "Não foi possível fazer a conversão para a função de seta", + "Could_not_convert_to_named_function_95152": "Não foi possível fazer a conversão para a função nomeada", + "Could_not_determine_function_return_type_95150": "Não foi possível determinar o tipo de retorno da função", + "Could_not_find_a_containing_arrow_function_95127": "Não foi possível localizar uma função de seta contentora", + "Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type_7016": "Não foi possível localizar o arquivo de declaração para o módulo '{0}'. '{1}' tem implicitamente um tipo 'any'.", + "Could_not_find_convertible_access_expression_95140": "Não foi possível localizar a expressão de acesso conversível", + "Could_not_find_export_statement_95129": "Não foi possível localizar a instrução de exportação", + "Could_not_find_import_clause_95131": "Não foi possível localizar a cláusula de importação", + "Could_not_find_matching_access_expressions_95141": "Não foi possível localizar expressões de acesso correspondentes", + "Could_not_find_name_0_Did_you_mean_1_2570": "Não foi possível encontrar o nome '{0}'. Você quis dizer '{1}'?", + "Could_not_find_namespace_import_or_named_imports_95132": "Não foi possível localizar a importação de namespace nem as importações nomeadas", + "Could_not_find_property_for_which_to_generate_accessor_95135": "Não foi possível localizar a propriedade para a qual o acessador deve ser gerado", + "Could_not_find_variable_to_inline_95185": "Não foi possível localizar a variável para embutida.", + "Could_not_resolve_the_path_0_with_the_extensions_Colon_1_6231": "Não foi possível resolver o caminho '{0}' com as extensões: {1}.", + "Could_not_write_file_0_Colon_1_5033": "Não foi possível gravar o arquivo '{0}': {1}.", + "Create_source_map_files_for_emitted_JavaScript_files_6694": "Criar arquivos source map para arquivos JavaScript emitidos.", + "Create_sourcemaps_for_d_ts_files_6614": "Criar sourcemaps para arquivos .d.ts.", + "Creates_a_tsconfig_json_with_the_recommended_settings_in_the_working_directory_6926": "Cria um tsconfig.json com as configurações recomendadas no diretório de trabalho.", + "DIRECTORY_6038": "DIRETÓRIO", + "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537": "Sequências de escape decimais e referências inversas não são permitidas em uma classe de caracteres.", + "Decimals_with_leading_zeros_are_not_allowed_1489": "Decimais com zeros à esquerda não são permitidos.", + "Declaration_augments_declaration_in_another_file_This_cannot_be_serialized_6232": "A declaração aumenta a declaração em outro arquivo. Isso não pode ser serializado.", + "Declaration_emit_for_this_file_requires_preserving_this_import_for_augmentations_This_is_not_support_9026": "A emissão de declaração para este arquivo requer a preservação desta importação para aumentos. Não há suporte para isso com --isolatedDeclarations.", + "Declaration_emit_for_this_file_requires_using_private_name_0_An_explicit_type_annotation_may_unblock_9005": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", + "Declaration_emit_for_this_file_requires_using_private_name_0_from_module_1_An_explicit_type_annotati_9006": "A emissão de declaração para esse arquivo requer o uso do nome privado '{0}' do módulo '{1}'. Uma anotação de tipo explícita pode desbloquear a emissão de declaração.", + "Declaration_emit_for_this_parameter_requires_implicitly_adding_undefined_to_its_type_This_is_not_sup_9025": "A declaração emit para esse parâmetro requer a adição implícita de indefinido ao seu tipo. Não há suporte para isso com --isolatedDeclarations.", + "Declaration_expected_1146": "Declaração esperada.", + "Declaration_name_conflicts_with_built_in_global_identifier_0_2397": "O nome de declaração entra em conflito com o identificador global integrado '{0}'.", + "Declaration_or_statement_expected_1128": "Declaração ou instrução esperada.", + "Declaration_or_statement_expected_This_follows_a_block_of_statements_so_if_you_intended_to_write_a_d_2809": "Declaração ou instrução esperada. Esse \"=\" segue um bloco de instruções, portanto, se você pretendia escrever uma atribuição de desestruturação, talvez seja necessário encapsular toda a atribuição entre parênteses.", + "Declarations_with_definite_assignment_assertions_must_also_have_type_annotations_1264": "As declarações com asserções de atribuição definitiva também precisam ter anotações de tipo.", + "Declarations_with_initializers_cannot_also_have_definite_assignment_assertions_1263": "As declarações com inicializadores também não podem ter asserções de atribuição definitiva.", + "Declare_a_private_field_named_0_90053": "Declare um campo privado chamado '{0}'.", + "Declare_method_0_90023": "Declarar método '{0}'", + "Declare_private_method_0_90038": "Declarar método privado '{0}'", + "Declare_private_property_0_90035": "Declarar a propriedade privada '{0}'", + "Declare_property_0_90016": "Declarar propriedade '{0}'", + "Declare_static_method_0_90024": "Declarar método estático '{0}'", + "Declare_static_property_0_90027": "Declarar propriedade estática '{0}'", + "Decorator_function_return_type_0_is_not_assignable_to_type_1_1270": "O tipo de retorno da função decorador '{0}' não é atribuível ao tipo '{1}'.", + "Decorator_function_return_type_is_0_but_is_expected_to_be_void_or_any_1271": "O tipo de retorno da função decorador é '{0}' mas deve ser 'void' ou 'any'.", + "Decorator_used_before_export_here_1486": "Decorador usado antes de 'export' aqui.", + "Decorators_are_not_valid_here_1206": "Os decoradores não são válidos aqui.", + "Decorators_cannot_be_applied_to_multiple_get_Slashset_accessors_of_the_same_name_1207": "Os decoradores não podem ser aplicados a vários acessadores get/set de mesmo nome.", + "Decorators_may_not_appear_after_export_or_export_default_if_they_also_appear_before_export_8038": "Os decoradores podem não aparecer após 'export' ou 'export default' se também aparecerem antes de 'export'.", + "Decorators_must_precede_the_name_and_all_keywords_of_property_declarations_1436": "Os decoradores devem preceder o nome e todas as palavras-chave das declarações de propriedade.", + "Default_catch_clause_variables_as_unknown_instead_of_any_6803": "Padronize as variáveis da cláusula catch como 'desconhecido' em vez de 'qualquer'.", + "Default_export_of_the_module_has_or_is_using_private_name_0_4082": "A exportação padrão do módulo tem ou está usando o nome particular '{0}'.", + "Default_exports_can_t_be_inferred_with_isolatedDeclarations_9037": "As exportações padrão não podem ser inferidas com --isolatedDeclarations.", + "Default_imports_are_not_allowed_in_a_deferred_import_18058": "As importações padrão não são permitidas em uma importação adiada.", + "Default_library_1424": "Biblioteca padrão", + "Default_library_for_target_0_1425": "Biblioteca padrão para o destino '{0}'", + "Deferred_imports_are_only_supported_when_the_module_flag_is_set_to_esnext_or_preserve_18060": "Só há suporte para importações adiadas quando o sinalizador \"--module\" está definido como \"esnext\" ou \"preserve\".", + "Definitions_of_the_following_identifiers_conflict_with_those_in_another_file_Colon_0_6200": "As definições dos seguintes identificadores estão em conflito com as de outro arquivo: {0}", + "Delete_all_unused_declarations_95024": "Excluir todas as declarações não usadas", + "Delete_all_unused_imports_95147": "Excluir todas as importações não usadas", + "Delete_all_unused_param_tags_95172": "Excluir todas as marcas '@param' não usadas", + "Delete_the_outputs_of_all_projects_6365": "Excluir as saídas de todos os projetos.", + "Delete_unused_param_tag_0_95171": "Excluir a marca '@param' não usada '{0}'", + "Deprecated_Use_jsxFactory_instead_Specify_the_object_invoked_for_createElement_when_targeting_react__6084": "[Preterido] Use '--jsxFactory' no lugar. Especifique o objeto invocado para createElement ao direcionar uma emissão de JSX 'react'", + "Deprecated_Use_outFile_instead_Concatenate_and_emit_output_to_single_file_6170": "[Preterido] Use '--outFile' no lugar. Concatene e emita uma saída para um arquivo único", + "Deprecated_Use_skipLibCheck_instead_Skip_type_checking_of_default_library_declaration_files_6160": "[Preterido] Use '--skipLibCheck' no lugar. Ignore a verificação de tipo dos arquivos de declaração de biblioteca padrão.", + "Deprecated_setting_Use_outFile_instead_6677": "Configuração preterida. Use 'outFile' em vez disso.", + "Did_you_forget_to_use_await_2773": "Você esqueceu de usar 'await'?", + "Did_you_mean_0_1369": "Você quis dizer '{0}'?", + "Did_you_mean_for_0_to_be_constrained_to_type_new_args_Colon_any_1_2735": "Você quis dizer que '{0}' deve ser restrito ao tipo 'new (...args: any[]) => {1}'?", + "Did_you_mean_to_call_this_expression_6212": "Você quis chamar esta expressão?", + "Did_you_mean_to_mark_this_function_as_async_1356": "Você quis marcar esta função como 'async'?", + "Did_you_mean_to_use_a_Colon_An_can_only_follow_a_property_name_when_the_containing_object_literal_is_1312": "Você quis usar ':'? '=' só pode estar após um nome de propriedade quando o literal de objeto contentor faz parte de um padrão de desestruturação.", + "Did_you_mean_to_use_new_with_this_expression_6213": "Você quis usar 'new' com essa expressão?", + "Digit_expected_1124": "Dígito esperado.", + "Directory_0_does_not_exist_skipping_all_lookups_in_it_6148": "O diretório '{0}' não existe; ignorando todas as pesquisas nele.", + "Directory_0_has_no_containing_package_json_scope_Imports_will_not_resolve_6270": "O diretório '{0}' não contém o escopo package.json. As importações não resolverão.", + "Disable_adding_use_strict_directives_in_emitted_JavaScript_files_6669": "Desabilitar a adição de diretivas 'use strict' em arquivos JavaScript emitidos.", + "Disable_checking_for_this_file_90018": "Desabilitar a verificação para esse arquivo", + "Disable_emitting_comments_6688": "Desabilitar comentários de emissão.", + "Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments_6701": "Desabilite as declarações de emissão que têm '@internal' em seus comentários JSDoc.", + "Disable_emitting_files_from_a_compilation_6660": "Desabilitar a emissão de arquivos de uma compilação.", + "Disable_emitting_files_if_any_type_checking_errors_are_reported_6662": "Desabilitar a emissão de arquivos se forem reportados erros de verificação de tipo.", + "Disable_erasing_const_enum_declarations_in_generated_code_6682": "Desabilitar a exclusão de declarações 'enum const' no código gerado.", + "Disable_error_reporting_for_unreachable_code_6603": "Desabilitar o relatório de erros para código inacessível.", + "Disable_error_reporting_for_unused_labels_6604": "Desabilitar o relatório de erros para rótulos não utilizados.", + "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805": "Desative a verificação completa do tipo (somente erros críticos de análise e emissão serão relatados).", + "Disable_generating_custom_helper_functions_like_extends_in_compiled_output_6661": "Desabilitar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", + "Disable_including_any_library_files_including_the_default_lib_d_ts_6670": "Desabilitar a inclusão de qualquer arquivo de biblioteca, incluindo o padrão lib.d.ts.", + "Disable_loading_referenced_projects_6235": "Desabilite o carregamento de projetos referenciados.", + "Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects_6620": "Desabilitar arquivos de origem de referência em vez de arquivos de declaração ao referenciar projetos compostos.", + "Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals_6702": "Desabilitar relatório de excesso de erros de propriedade durante a criação de literais de objeto.", + "Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node_6683": "Desabilitar a resolução de symlinks para seus realpath. Isso se correlaciona com o mesmo sinalizador no nó.", + "Disable_size_limitations_on_JavaScript_projects_6162": "Desabilitar as limitações de tamanho nos projetos JavaScript.", + "Disable_solution_searching_for_this_project_6224": "Desabilite a pesquisa de solução deste projeto.", + "Disable_strict_checking_of_generic_signatures_in_function_types_6673": "Desabilitar verificação estrita de assinaturas genéricas em tipos de função.", + "Disable_the_type_acquisition_for_JavaScript_projects_6625": "Desabilitar a aquisição de tipo para projetos JavaScript", + "Disable_truncating_types_in_error_messages_6663": "Desabilitar truncamento de tipos em mensagens de erro.", + "Disable_use_of_source_files_instead_of_declaration_files_from_referenced_projects_6221": "Desabilite o uso de arquivos de origem em vez de arquivos de declaração de projetos referenciados.", + "Disable_wiping_the_console_in_watch_mode_6684": "Desabilitar a limpeza do console no modo de inspeção.", + "Disables_inference_for_type_acquisition_by_looking_at_filenames_in_a_project_6616": "Desabilita a inferência para a aquisição de tipo examinando filenames em um projeto.", + "Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add__6672": "Não permitir 'importar', 'necessário ou' de expandir o número de arquivos que TypeScript deve adicionar a um projeto.", + "Disallow_inconsistently_cased_references_to_the_same_file_6078": "Não permitir referências com maiúsculas de minúsculas inconsistentes no mesmo arquivo.", + "Do_not_add_triple_slash_references_or_imported_modules_to_the_list_of_compiled_files_6159": "Não adicionar as referências de barra tripla nem os módulos importados à lista de arquivos compilados.", + "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721": "Não permitir construções de tempo de execução que não fazem parte de ECMAScript.", + "Do_not_emit_comments_to_output_6009": "Não emita comentários para a saída.", + "Do_not_emit_declarations_for_code_that_has_an_internal_annotation_6056": "Não emita declarações de código que contenham uma anotação '@internal'.", + "Do_not_emit_outputs_6010": "Não emita saídas.", + "Do_not_emit_outputs_if_any_errors_were_reported_6008": "Não emita saídas se erros forem reportados.", + "Do_not_emit_use_strict_directives_in_module_output_6112": "Não emita diretivas 'use strict' na saída de módulo.", + "Do_not_erase_const_enum_declarations_in_generated_code_6007": "Não apague declarações const enum no código gerado.", + "Do_not_generate_custom_helper_functions_like_extends_in_compiled_output_6157": "Não gerar funções auxiliares personalizadas como '__extends' nas saídas compiladas.", + "Do_not_include_the_default_library_file_lib_d_ts_6158": "Não incluir o arquivo de biblioteca padrão (lib.d.ts).", + "Do_not_report_errors_on_unreachable_code_6077": "Não relate erros sobre código inacessível.", + "Do_not_report_errors_on_unused_labels_6074": "Não relate erros sobre rótulos não utilizados.", + "Do_not_resolve_the_real_path_of_symlinks_6013": "Não resolver o real caminho de symlinks.", + "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804": "Não transforme ou elimine quaisquer importações ou exportações não marcadas como somente tipo, garantindo que sejam gravadas no formato do arquivo de saída com base na configuração 'module'.", + "Do_not_truncate_error_messages_6165": "Não truncar as mensagens de erro.", + "Duplicate_function_implementation_2393": "Implementação de função duplicada.", + "Duplicate_identifier_0_2300": "Identificador '{0}' duplicado.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_2441": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' no escopo de nível superior de um módulo.", + "Duplicate_identifier_0_Compiler_reserves_name_1_in_top_level_scope_of_a_module_containing_async_func_2529": "Duplicar o identificador '{0}'. O compilador reserva o nome '{1}' em escopo de alto nível de um módulo que contém funções assíncronas.", + "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818": "Identificador duplicado '{0}'. O compilador reserva o nome '{1}' ao emitir 'super' referências em inicializadores estáticos.", + "Duplicate_identifier_0_Compiler_uses_declaration_1_to_support_async_functions_2520": "Identificador '{0}' duplicado. O compilador usa a declaração '{1}' para dar suporte a funções assíncronas.", + "Duplicate_identifier_0_Static_and_instance_elements_cannot_share_the_same_private_name_2804": "Identificador duplicado '{0}'. Os elementos estáticos e de instância não podem compartilhar o mesmo nome privado.", + "Duplicate_identifier_arguments_Compiler_uses_arguments_to_initialize_rest_parameters_2396": "Identificador 'arguments' duplicado. O compilador usa 'arguments' para inicializar os parâmetros rest.", + "Duplicate_identifier_newTarget_Compiler_uses_variable_declaration_newTarget_to_capture_new_target_me_2543": "Identificador duplicado '_newTarget'. O compilador usa a declaração de variável '_newTarget' para capturar a referência de metapropriedade 'new.target'.", + "Duplicate_identifier_this_Compiler_uses_variable_declaration_this_to_capture_this_reference_2399": "Identificador '_this' duplicado. O compilador usa a declaração de variável '_this' para capturar a referência 'this'.", + "Duplicate_index_signature_for_type_0_2374": "Assinatura de índice duplicada para o tipo '{0}'.", + "Duplicate_label_0_1114": "Rótulo '{0}' duplicado.", + "Duplicate_property_0_2718": "Propriedade '{0}' duplicada.", + "Duplicate_regular_expression_flag_1500": "Duplicar o sinalizador de expressão regular.", + "Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0_7036": "O especificador da importação dinâmica deve ser do tipo 'string', mas aqui tem o tipo '{0}'.", + "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323": "Só há suporte para as importações dinâmicas quando o sinalizador “--module” estiver definido como “es2020”, “es2022”, “esnext”, “commonjs”, “amd”, “system”, “umd”, “node16”, “node18”, “node20” ou “nodenext”.", + "Dynamic_imports_can_only_accept_a_module_specifier_and_an_optional_set_of_attributes_as_arguments_1450": "As importações dinâmicas só podem aceitar um especificador de módulo e um conjunto opcional de atributos como argumentos", + "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324": "As importações dinâmicas só dão suporte a um segundo argumento quando a opção “--module” estiver definida como “esnext”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293": "A sintaxe ESM não é permitida em um módulo CommonJS quando 'module' estiver definido como 'preserve'.", + "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled_1286": "A sintaxe ESM não é permitida em um módulo CommonJS quando a opção \"verbatimModuleSyntax\" estiver habilitada.", + "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125": "Cada declaração de '{0}.{1}' difere em seu valor, onde '{2}' era esperado, mas '{3}' foi fornecido.", + "Each_member_of_the_union_type_0_has_construct_signatures_but_none_of_those_signatures_are_compatible_2762": "Cada membro do tipo de união '{0}' tem assinaturas de constructo, mas nenhuma dessas assinaturas é compatível entre si.", + "Each_member_of_the_union_type_0_has_signatures_but_none_of_those_signatures_are_compatible_with_each_2758": "Cada membro do tipo de união '{0}' tem assinaturas, mas nenhuma dessas assinaturas é compatível entre si.", + "Editor_Support_6249": "Suporte do Editor", + "Element_implicitly_has_an_any_type_because_expression_of_type_0_can_t_be_used_to_index_type_1_7053": "O elemento implicitamente tem um tipo 'any' porque a expressão do tipo '{0}' não pode ser usada para o tipo de índice '{1}'.", + "Element_implicitly_has_an_any_type_because_index_expression_is_not_of_type_number_7015": "O elemento implicitamente tem um tipo 'any' porque a expressão de índice não é do tipo 'number'.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_7017": "O elemento tem, implicitamente, 'qualquer' tipo, pois o tipo '{0}' não tem assinatura de índice.", + "Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1_7052": "O elemento implicitamente tem um tipo 'any' porque o tipo '{0}' não tem assinatura de índice. Você quis dizer chamada de '{1}'?", + "Emit_6246": "Emitir", + "Emit_ECMAScript_standard_compliant_class_fields_6712": "Emitir os campos de classe ECMAScript-standard-compliant.", + "Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files_6622": "Emitir uma Marca de Ordem de Byte (BOM) UTF-8 no início dos arquivos de saída.", + "Emit_a_single_file_with_source_maps_instead_of_having_a_separate_file_6151": "Emitir um arquivo único com os mapas de origem em vez de arquivos separados.", + "Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging_6638": "Emitir um perfil de CPU V8 da execução do compilador para depuração.", + "Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheti_6626": "Emitir JavaScript adicional para facilitar o suporte à importação de módulos CommonJS. Isso habilita 'allowSyntheticDefaultImports' para compatibilidade de tipo.", + "Emit_class_fields_with_Define_instead_of_Set_6222": "Emita campos de classe com Definir em vez de Configurar.", + "Emit_design_type_metadata_for_decorated_declarations_in_source_files_6624": "Emitir metadados de tipo design para declarações decoradas nos arquivos de origem.", + "Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration_6621": "Emitir um JavaScript mais compatível, mas detalhado e menos eficaz para iteração.", + "Emit_the_source_alongside_the_sourcemaps_within_a_single_file_requires_inlineSourceMap_or_sourceMap__6152": "Emitir a origem ao lado dos sourcemaps em um arquivo único; a definição requer '--inlineSourceMap' ou '--sourceMap'.", + "Enable_all_strict_type_checking_options_6180": "Habilitar todas as opções estritas de verificação de tipo.", + "Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read_6685": "Habilitar a cor e a formatação na saída do TypeScript para tornar os erros do compilador mais fáceis de ler.", + "Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references_6611": "Habilitar restrições que permitem que um projeto TypeScript seja usado com referências do projeto.", + "Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function_6667": "Habilitar o relatório de erros para codepaths que não retornam explicitamente uma função.", + "Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type_6665": "Habilitar o relatório de erros para expressões e declarações com um tipo 'any' implícito.", + "Enable_error_reporting_for_fallthrough_cases_in_switch_statements_6664": "Habilitar o relatório de erros para casos fallthrough no parâmetro relatório.", + "Enable_error_reporting_in_type_checked_JavaScript_files_6609": "Habilitar o relatório de erros em arquivos JavaScript verificados por tipo.", + "Enable_error_reporting_when_local_variables_aren_t_read_6675": "Habilitar relatório de erros quando as variáveis locais não forem lidas.", + "Enable_error_reporting_when_this_is_given_the_type_any_6668": "Habilitar relatório de erros quando 'this' for fornecido o tipo 'any'.", + "Enable_experimental_support_for_legacy_experimental_decorators_6630": "Habilite o suporte experimental para decoradores experimentais herdados.", + "Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present_6264": "Permite a importação de arquivos com qualquer extensão, desde que um arquivo de declaração esteja presente.", + "Enable_importing_json_files_6689": "Habilitar importação de arquivos .json.", + "Enable_lib_replacement_6808": "Habilitar substituição de biblioteca.", + "Enable_project_compilation_6302": "Habilitar a compilação do projeto", + "Enable_strict_bind_call_and_apply_methods_on_functions_6214": "Habilite os métodos estritos 'bind', 'call' e 'apply' em funções.", + "Enable_strict_checking_of_function_types_6186": "Habilitar verificação estrita de tipos de função.", + "Enable_strict_checking_of_property_initialization_in_classes_6187": "Habilite a verificação estrita de inicialização de propriedade nas classes.", + "Enable_strict_null_checks_6113": "Habilite verificações nulas estritas.", + "Enable_the_experimentalDecorators_option_in_your_configuration_file_95074": "Habilitar a opção 'experimentalDecorators' no arquivo de configuração", + "Enable_the_jsx_flag_in_your_configuration_file_95088": "Habilitar o sinalizador '--jsx' no arquivo de configuração", + "Enable_tracing_of_the_name_resolution_process_6085": "Habilite o rastreio do processo de resolução de nome.", + "Enable_verbose_logging_6713": "Habilite o registro em log detalhado.", + "Enables_emit_interoperability_between_CommonJS_and_ES_Modules_via_creation_of_namespace_objects_for__7037": "Permite emissão de interoperabilidade entre CommonJS e Módulos ES através da criação de objetos de namespace para todas as importações. Implica em 'allowSyntheticDefaultImports'.", + "Enables_experimental_support_for_ES7_decorators_6065": "Habilita o suporte experimental para decoradores ES7.", + "Enables_experimental_support_for_emitting_type_metadata_for_decorators_6066": "Habilita o suporte experimental para a emissão de tipo de metadados para decoradores.", + "Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type_6671": "Aplicar o uso de acessadores indexados para chaves declaradas usando um tipo indexado.", + "Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier_6666": "Verifique se os membros de substituição em classes derivadas estão marcados com um modificador de ignorar.", + "Ensure_that_casing_is_correct_in_imports_6637": "Certifique-se de que a capitalização esteja correta nas importações.", + "Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports_6645": "Certifique-se que cada arquivo pode ser convertido em segurança sem depender de outras importações.", + "Ensure_use_strict_is_always_emitted_6605": "Certifique-se de que 'use strict' seja sempre emitido.", + "Entering_conditional_exports_6413": "Inserção de exportações condicionais.", + "Entry_point_for_implicit_type_library_0_1420": "Ponto de entrada para a biblioteca de tipos implícita '{0}'", + "Entry_point_for_implicit_type_library_0_with_packageId_1_1421": "Ponto de entrada para a biblioteca de tipos implícita '{0}' com packageId '{1}'", + "Entry_point_of_type_library_0_specified_in_compilerOptions_1417": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions", + "Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1_1418": "Ponto de entrada da biblioteca de tipos '{0}' especificado em compilerOptions com packageId '{1}'", + "Enum_0_used_before_its_declaration_2450": "A enumeração '{0}' usada antes de sua declaração.", + "Enum_declarations_can_only_merge_with_namespace_or_other_enum_declarations_2567": "As declarações enum só podem ser mescladas com namespaces ou com outras declarações enum.", + "Enum_declarations_must_all_be_const_or_non_const_2473": "Declarações de enumeração devem ser const ou não const.", + "Enum_member_expected_1132": "Membro de enumeração esperado.", + "Enum_member_following_a_non_literal_numeric_member_must_have_an_initializer_when_isolatedModules_is__18056": "O membro Enumeração que segue um membro numérico não literal deve ter um inicializador quando 'isolatedModules' estiver habilitado.", + "Enum_member_initializers_must_be_computable_without_references_to_external_symbols_with_isolatedDecl_9020": "Os inicializadores de membros de Enumeração devem ser computáveis sem referências a símbolos externos com --isolatedDeclarations.", + "Enum_member_must_have_initializer_1061": "O membro de enumeração deve ter um inicializador.", + "Enum_name_cannot_be_0_2431": "O nome de enumeração não pode ser '{0}'.", + "Environment_Settings_6285": "Configurações de Ambiente", + "Errors_Files_6041": "Arquivos de Erros", + "Escape_sequence_0_is_not_allowed_1488": "A sequência de escape '{0}' não é permitida.", + "Examples_Colon_0_6026": "Exemplos: {0}", + "Excessive_complexity_comparing_types_0_and_1_2859": "Complexidade excessiva ao comparar os tipos '{0}' e '{1}'.", + "Excessive_stack_depth_comparing_types_0_and_1_2321": "Profundidade da pilha excessiva ao comparar tipos '{0}' e '{1}'.", + "Exiting_conditional_exports_6416": "Saída das exportações condicionais.", + "Expected_0_1_type_arguments_provide_these_with_an_extends_tag_8027": "Espera-se {0}-{1} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", + "Expected_0_arguments_but_got_1_2554": "{0} argumentos eram esperados, mas {1} foram obtidos.", + "Expected_0_arguments_but_got_1_Did_you_forget_to_include_void_in_your_type_argument_to_Promise_2794": "{0} argumentos eram esperados, mas foram obtidos {1}. Você esqueceu de incluir 'void' no argumento de tipo para 'Promise'?", + "Expected_0_type_arguments_but_got_1_2558": "{0} argumentos de tipo eram esperados, mas {1} foram obtidos.", + "Expected_0_type_arguments_provide_these_with_an_extends_tag_8026": "Espera-se {0} argumentos de tipo; forneça esses recursos com uma marca \"@extends\".", + "Expected_1_argument_but_got_0_new_Promise_needs_a_JSDoc_hint_to_produce_a_resolve_that_can_be_called_2810": "Esperava 1 argumento, mas obteve 0. 'new Promise()' precisa de uma dica JSDoc para produzir um 'resolver' que pode ser chamado sem argumentos.", + "Expected_a_Unicode_property_name_1523": "Esperado um nome de propriedade Unicode.", + "Expected_a_Unicode_property_name_or_value_1527": "Espera-se um nome ou valor de propriedade Unicode.", + "Expected_a_Unicode_property_value_1525": "Espera-se um valor da propriedade Unicode.", + "Expected_a_capturing_group_name_1514": "Esperado um nome de grupo de captura.", + "Expected_a_class_set_operand_1520": "Espera-se um operando de conjunto de classes.", + "Expected_at_least_0_arguments_but_got_1_2555": "Pelo menos {0} argumentos eram esperados, mas {1} foram obtidos.", + "Expected_corresponding_JSX_closing_tag_for_0_17002": "Marca de fechamento de JSX correspondente esperada para '{0}'.", + "Expected_corresponding_closing_tag_for_JSX_fragment_17015": "Marca de fechamento correspondente esperada para fragmento JSX.", + "Expected_for_property_initializer_1442": "Esperado '=' para inicializador de propriedade.", + "Expected_type_of_0_field_in_package_json_to_be_1_got_2_6105": "O tipo esperado do campo '{0}' em 'package.json' como '{1}' obteve '{2}'.", + "Explicitly_specified_module_resolution_kind_Colon_0_6087": "Tipo de resolução de módulo especificado explicitamente: '{0}'.", + "Exponentiation_cannot_be_performed_on_bigint_values_unless_the_target_option_is_set_to_es2016_or_lat_2791": "A exponenciação não pode ser executada nos valores 'bigint', a menos que a opção 'target' esteja definida como 'es2016' ou posterior.", + "Export_0_from_module_1_90059": "Exportar '{0}' do módulo '{1}'", + "Export_all_referenced_locals_90060": "Exportar todos os locais referenciados", + "Export_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_export_default_or__1203": "Não é possível usar a atribuição de exportação durante o direcionamento para módulos de ECMAScript. Use a 'exportação padrão' ou outro formato de módulo em vez disso.", + "Export_assignment_is_not_supported_when_module_flag_is_system_1218": "A atribuição de exportação não tem suporte quando o sinalizador '--module' é 'system'.", + "Export_declaration_conflicts_with_exported_declaration_of_0_2484": "Exportar conflitos de declaração com declaração exportada de '{0}'.", + "Export_declarations_are_not_permitted_in_a_namespace_1194": "As declarações de exportação não são permitidas em um namespace.", + "Export_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6276": "O especificador de exportação '{0}' não existe no escopo package.json no caminho '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_4081": "O alias de tipo exportado '{0}' tem ou está usando o nome particular '{1}'.", + "Exported_type_alias_0_has_or_is_using_private_name_1_from_module_2_4084": "O alias do tipo exportado '{0}' tem ou está usando o nome privado '{1}' do módulo {2}.", + "Exported_variable_0_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4023": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", + "Exported_variable_0_has_or_is_using_name_1_from_private_module_2_4024": "A variável exportada '{0}' tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Exported_variable_0_has_or_is_using_private_name_1_4025": "A variável exportada '{0}' tem ou está usando o nome particular '{1}'.", + "Exports_and_export_assignments_are_not_permitted_in_module_augmentations_2666": "Exportações e designações de exportações não são permitidas em acréscimos de módulo.", + "Expression_expected_1109": "Expressão esperada.", + "Expression_must_be_enclosed_in_parentheses_to_be_used_as_a_decorator_1497": "A expressão deve ser colocada entre parênteses para ser usada como um decorador.", + "Expression_or_comma_expected_1137": "Expressão ou vírgula esperada.", + "Expression_produces_a_tuple_type_that_is_too_large_to_represent_2800": "A expressão produz um tipo de tupla grande demais para ser representada.", + "Expression_produces_a_union_type_that_is_too_complex_to_represent_2590": "A expressão produz um tipo de união muito complexo para representar.", + "Expression_resolves_to_super_that_compiler_uses_to_capture_base_class_reference_2402": "A expressão é resolvida como '_super', que o compilador utiliza para capturar a referência da classe base.", + "Expression_resolves_to_variable_declaration_newTarget_that_compiler_uses_to_capture_new_target_meta__2544": "A expressão é resolvida para a declaração de variável '_newTarget' que o compilador usa para capturar a referência de metapropriedade 'new.target'.", + "Expression_resolves_to_variable_declaration_this_that_compiler_uses_to_capture_this_reference_2400": "A expressão é resolvida como a declaração de variável '_this' que o compilador utiliza para capturar a referência 'this'.", + "Expression_type_can_t_be_inferred_with_isolatedDeclarations_9013": "O tipo de expressão não pode ser inferido com --isolatedDeclarations.", + "Extends_clause_can_t_contain_an_expression_with_isolatedDeclarations_9021": "A cláusula Extends não pode conter uma expressão com --isolatedDeclarations.", + "Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1_4085": "A cláusula extends para o tipo inferido '{0}' tem ou está usando o nome particular '{1}'.", + "Extract_base_class_to_variable_90064": "Extrair classe base para variável", + "Extract_binding_expressions_to_variable_90066": "Extrair expressões de associação para variável", + "Extract_constant_95006": "Extrair constante", + "Extract_default_export_to_variable_90065": "Extrair exportação padrão para variável", + "Extract_function_95005": "Extrair função", + "Extract_to_0_in_1_95004": "Extrair para {0} em {1}", + "Extract_to_0_in_1_scope_95008": "Extrair para {0} no escopo {1}", + "Extract_to_0_in_enclosing_scope_95007": "Extrair para {0} no escopo de delimitação", + "Extract_to_interface_95090": "Extrair para interface", + "Extract_to_type_alias_95078": "Extrair para alias de tipo", + "Extract_to_typedef_95079": "Extrair para typedef", + "Extract_to_variable_and_replace_with_0_as_typeof_0_90069": "Extrair para variável e substituir por '{0} as typeof {0}'", + "Extract_type_95077": "Tipo de extração", + "FILE_6035": "ARQUIVO", + "FILE_OR_DIRECTORY_6040": "ARQUIVO OU DIRETÓRIO", + "Failed_to_find_peerDependency_0_6283": "Falha ao localizar peerDependency '{0}'.", + "Failed_to_resolve_under_condition_0_6415": "Falha ao resolver na condição '{0}'.", + "Fallthrough_case_in_switch_7029": "Caso de fallthrough no comutador.", + "File_0_does_not_exist_6096": "O arquivo '{0}' não existe.", + "File_0_does_not_exist_according_to_earlier_cached_lookups_6240": "O arquivo '{0}' não existe de acordo com as pesquisas anteriores em cache.", + "File_0_exists_according_to_earlier_cached_lookups_6239": "O arquivo '{0}' existe de acordo com as pesquisas anteriores em cache.", + "File_0_exists_use_it_as_a_name_resolution_result_6097": "O arquivo '{0}' existe; use-o como um resultado de resolução de nome.", + "File_0_has_an_unsupported_extension_The_only_supported_extensions_are_1_6054": "O arquivo '{0}' tem uma extensão sem suporte. As únicas extensões com suporte são {1}.", + "File_0_is_a_JavaScript_file_Did_you_mean_to_enable_the_allowJs_option_6504": "O arquivo '{0}' é um arquivo JavaScript. Você quis habilitar a opção 'allowJs'?", + "File_0_is_not_a_module_2306": "O arquivo '{0}' não é um módulo.", + "File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_includ_6307": "O arquivo '{0}' não está na lista de arquivos de projeto '{1}'. Os projetos devem listar todos os arquivos ou usar um padrão 'include'.", + "File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files_6059": "O arquivo '{0}' não está em 'rootDir' '{1}'. Espera-se que 'rootDir' contenha todos os arquivos de origem.", + "File_0_not_found_6053": "Arquivo '{0}' não encontrado.", + "File_Layout_6284": "Layout do Arquivo", + "File_Management_6245": "Gerenciamento de Arquivos", + "File_appears_to_be_binary_1490": "O arquivo parece ser binário.", + "File_change_detected_Starting_incremental_compilation_6032": "Alteração do arquivo detectada. Iniciando compilação incremental...", + "File_is_CommonJS_module_because_0_does_not_have_field_type_1460": "O arquivo é um módulo CommonJS porque '{0}' não tem o campo \"type\"", + "File_is_CommonJS_module_because_0_has_field_type_whose_value_is_not_module_1459": "O arquivo é o módulo CommonJS porque '{0}' tem o campo \"type\" cujo valor não é \"module\"", + "File_is_CommonJS_module_because_package_json_was_not_found_1461": "O arquivo é um módulo CommonJS porque 'package.json' não foi encontrado", + "File_is_ECMAScript_module_because_0_has_field_type_with_value_module_1458": "O arquivo é o módulo ECMAScript porque '{0}' tem o campo \"type\" com o valor \"module\"", + "File_is_a_CommonJS_module_it_may_be_converted_to_an_ES_module_80001": "O arquivo é um módulo CommonJS; ele pode ser convertido em um módulo ES.", + "File_is_default_library_for_target_specified_here_1426": "O arquivo é a biblioteca padrão para o destino especificado aqui.", + "File_is_entry_point_of_type_library_specified_here_1419": "O arquivo é o ponto de entrada da biblioteca de tipos especificada aqui.", + "File_is_included_via_import_here_1399": "O arquivo é incluído via importação aqui.", + "File_is_included_via_library_reference_here_1406": "O arquivo é incluído via referência de biblioteca aqui.", + "File_is_included_via_reference_here_1401": "O arquivo é incluído via referência aqui.", + "File_is_included_via_type_library_reference_here_1404": "O arquivo é incluído via referência de biblioteca de tipos.", + "File_is_library_specified_here_1423": "O arquivo é a biblioteca especificada aqui.", + "File_is_matched_by_files_list_specified_here_1410": "O arquivo corresponde à lista 'files' especificada aqui.", + "File_is_matched_by_include_pattern_specified_here_1408": "O arquivo corresponde ao padrão de inclusão especificado aqui.", + "File_is_output_from_referenced_project_specified_here_1413": "O arquivo é a saída do projeto referenciado especificado aqui.", + "File_is_output_of_project_reference_source_0_1428": "O arquivo é a saída da origem de referência do projeto '{0}'", + "File_is_source_from_referenced_project_specified_here_1416": "O arquivo é a origem do projeto referenciado especificado aqui.", + "File_name_0_differs_from_already_included_file_name_1_only_in_casing_1149": "O nome do arquivo '{0}' difere do nome de arquivo '{1}' já incluído somente em maiúsculas e minúsculas.", + "File_name_0_has_a_1_extension_looking_up_2_instead_6262": "O nome de arquivo '{0}' tem uma extensão '{1}' – procurando '{2}' em vez disso.", + "File_name_0_has_a_1_extension_stripping_it_6132": "O nome do arquivo '{0}' tem uma extensão '{1}' – remoção.", + "File_redirects_to_file_0_1429": "O arquivo redireciona para o arquivo '{0}'", + "File_specification_cannot_contain_a_parent_directory_that_appears_after_a_recursive_directory_wildca_5065": "A especificação de arquivo não pode conter um diretório pai ('..') que aparece após um curinga de diretório recursivo ('**'): '{0}'.", + "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010": "A especificação de arquivo não pode terminar em um curinga do diretório recursivo ('**'): '{0}'.", + "Filters_results_from_the_include_option_6627": "Filtra os resultados da opção 'include'.", + "Fix_all_detected_spelling_errors_95026": "Corrigir todos os erros de ortografia detectados", + "Fix_all_expressions_possibly_missing_await_95085": "Corrigir todas as expressões possivelmente com 'await' ausente", + "Fix_all_implicit_this_errors_95107": "Corrigir todos os erros de 'this' implícitos", + "Fix_all_incorrect_return_type_of_an_async_functions_90037": "Corrigir todo tipo de retorno incorreto de uma função assíncrona", + "Fix_all_with_type_only_imports_95182": "Corrigir tudo com importações somente de tipo", + "For_nodejs_Colon_6287": "Para nodejs:", + "Found_0_errors_6217": "Encontrados {0} erros.", + "Found_0_errors_Watching_for_file_changes_6194": "{0} erros encontrados. Monitorando alterações de arquivo.", + "Found_0_errors_in_1_files_6261": "Foram encontrados {0} erros em {1} arquivos.", + "Found_0_errors_in_the_same_file_starting_at_Colon_1_6260": "Foram encontrados {0} erros no mesmo arquivo, começando em: {1}", + "Found_1_error_6216": "Encontrado 1 erro.", + "Found_1_error_Watching_for_file_changes_6193": "Um erro encontrado. Monitorando alterações de arquivo.", + "Found_1_error_in_0_6259": "Encontrado 1 erro em {0}", + "Found_package_json_at_0_6099": "'package.json' encontrado em '{0}'.", + "Found_peerDependency_0_with_1_version_6282": "Foi encontrada peerDependency '{0}' com a versão '{1}'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_1250": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Class_definiti_1251": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Definições de classe estão automaticamente em modo estrito.", + "Function_declarations_are_not_allowed_inside_blocks_in_strict_mode_when_targeting_ES5_Modules_are_au_1252": "Declarações de função não são permitidas dentro de blocos em modo estrito quando o objetivo é 'ES5'. Módulos estão automaticamente em modo estrito.", + "Function_expression_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7011": "A expressão de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", + "Function_implementation_is_missing_or_not_immediately_following_the_declaration_2391": "A implementação da função está ausente ou não está imediatamente depois da declaração.", + "Function_implementation_name_must_be_0_2389": "O nome da implementação de função deve ser '{0}'.", + "Function_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_ref_7024": "A função tem o tipo de retorno 'any', de forma implícita, porque ela não tem uma anotação de tipo de retorno e é referenciada direta ou indiretamente em uma das suas expressões de retorno.", + "Function_lacks_ending_return_statement_and_return_type_does_not_include_undefined_2366": "A função não tem a instrução return final e o tipo de retorno não inclui 'undefined'.", + "Function_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9007": "A função deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", + "Function_not_implemented_95159": "Função não implementada.", + "Function_overload_must_be_static_2387": "A sobrecarga de função deve ser estática.", + "Function_overload_must_not_be_static_2388": "A sobrecarga de função não deve ser estática.", + "Function_type_notation_must_be_parenthesized_when_used_in_a_union_type_1385": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de união.", + "Function_type_notation_must_be_parenthesized_when_used_in_an_intersection_type_1387": "A notação de tipo de função precisa estar entre parênteses quando usada em um tipo de interseção.", + "Function_type_which_lacks_return_type_annotation_implicitly_has_an_0_return_type_7014": "O tipo de função, que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{0}'.", + "Function_with_bodies_can_only_merge_with_classes_that_are_ambient_2814": "A função com corpos só podem ser mescladas com classes que são ambientes.", + "Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project_6612": "Gerar arquivos d.ts de arquivos TypeScript e JavaScript em seu projeto.", + "Generate_get_and_set_accessors_95046": "Gerar acessadores 'get' e 'set'", + "Generate_get_and_set_accessors_for_all_overriding_properties_95119": "Gerar os acessadores 'get' e 'set' para todas as propriedades de substituição", + "Generates_a_CPU_profile_6223": "Gera um perfil de CPU.", + "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000": "Gera um sourcemap para cada arquivo '.d.ts' correspondente.", + "Generates_an_event_trace_and_a_list_of_types_6237": "Gera um rastreamento de eventos e uma lista de tipos.", + "Generates_corresponding_d_ts_file_6002": "Gera o arquivo '.d.ts' correspondente.", + "Generates_corresponding_map_file_6043": "Gera o arquivo '.map' correspondente.", + "Generator_implicitly_has_yield_type_0_Consider_supplying_a_return_type_annotation_7025": "O gerador tem implicitamente o tipo de rendimento \"{0}\". Considere fornecer uma anotação de tipo de retorno.", + "Generators_are_not_allowed_in_an_ambient_context_1221": "Os geradores não são permitidos em um contexto de ambiente.", + "Generic_type_0_requires_1_type_argument_s_2314": "O tipo genérico '{0}' exige {1} argumento(s) de tipo.", + "Generic_type_0_requires_between_1_and_2_type_arguments_2707": "O tipo genérico '{0}' exige argumentos de tipo entre {1} e {2}.", + "Global_module_exports_may_only_appear_at_top_level_1316": "As exportações de módulo global podem somente aparecer no nível superior.", + "Global_module_exports_may_only_appear_in_declaration_files_1315": "As exportações de módulo global podem somente aparecer em arquivos de declaração.", + "Global_module_exports_may_only_appear_in_module_files_1314": "As exportações de módulo global podem somente aparecer em arquivos de módulo.", + "Global_type_0_must_be_a_class_or_interface_type_2316": "O tipo global '{0}' deve ser um tipo de classe ou interface.", + "Global_type_0_must_have_1_type_parameter_s_2317": "O tipo global '{0}' deve ter {1} parâmetro(s) de tipo.", + "Have_recompiles_in_incremental_and_watch_assume_that_changes_within_a_file_will_only_affect_files_di_6384": "Faça com que as recompilações em '--incremental' e '--watch' presumam que as alterações dentro de um arquivo só afetarão os arquivos que dependem diretamente dele.", + "Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_wi_6606": "Ter recompilações em projetos que usam os modos 'incremental' e 'inspeção' pressupõem que as alterações em um arquivo afetarão apenas os arquivos diretamente dependendo dele.", + "Hexadecimal_digit_expected_1125": "Dígito hexadecimal esperado.", + "Identifier_expected_0_is_a_reserved_word_at_the_top_level_of_a_module_1262": "Um identificador é esperado. '{0}' é uma palavra reservada no nível superior de um módulo.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_1212": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Class_definitions_are_automatically_in_stric_1213": "Identificador esperado. '{0}' é uma palavra reservada no modo estrito. Definições de classe estão automaticamente no modo estrito.", + "Identifier_expected_0_is_a_reserved_word_in_strict_mode_Modules_are_automatically_in_strict_mode_1214": "Identificador esperado. '{0}' é uma palavra reservada em modo estrito. Os módulos ficam automaticamente em modo estrito.", + "Identifier_expected_0_is_a_reserved_word_that_cannot_be_used_here_1359": "Identificador esperado. '{0}' é uma palavra reservada que não pode ser usada aqui.", + "Identifier_expected_1003": "Identificador esperado.", + "Identifier_expected_esModule_is_reserved_as_an_exported_marker_when_transforming_ECMAScript_modules_1216": "Identificador esperado. '__esModule' é reservado como um marcador exportado ao transformar os módulos ECMAScript.", + "Identifier_or_string_literal_expected_1478": "Identificador ou literal de cadeia de caracteres esperado.", + "Identifier_string_literal_or_number_literal_expected_1496": "Identificador, literal de cadeia de caracteres ou literal de número esperado.", + "If_the_0_package_actually_exposes_this_module_consider_sending_a_pull_request_to_amend_https_Colon_S_7040": "Se o pacote '{0}' realmente expõe este módulo, considere enviar uma solicitação de pull para corrigir 'https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/{1}'", + "If_the_0_package_actually_exposes_this_module_try_adding_a_new_declaration_d_ts_file_containing_decl_7058": "Se o pacote '{0}' realmente expõe este módulo, tente adicionar um novo arquivo de declaração (.d.ts) contendo o módulo `declare '{1}';`", + "Ignore_this_error_message_90019": "Ignorar essa mensagem de erro", + "Ignoring_tsconfig_json_compiles_the_specified_files_with_default_compiler_options_6924": "Ignorar o tsconfig.json, compila os arquivos especificados com as opções do compilador padrão.", + "Implement_all_inherited_abstract_classes_95040": "Implementar todas as classes abstratas herdadas", + "Implement_all_unimplemented_interfaces_95032": "Implementar todas as interfaces não implementadas", + "Implement_inherited_abstract_class_90007": "Implementar classe abstrata herdada", + "Implement_interface_0_90006": "Implementar a interface '{0}'", + "Implements_clause_of_exported_class_0_has_or_is_using_private_name_1_4019": "A cláusula implements da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", + "Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_i_2731": "A conversão implícita de um 'symbol' em ' string' falhará em runtime. Considere o encapsulamento desta expressão em 'String(...)'.", + "Import_0_conflicts_with_global_value_used_in_this_file_so_must_be_declared_with_a_type_only_import_w_2866": "A importação '{0}' está em conflito com o valor global usado neste arquivo, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", + "Import_0_conflicts_with_local_value_so_must_be_declared_with_a_type_only_import_when_isolatedModules_2865": "A importação '{0}' está em conflito com o valor local, portanto, deve ser declarada com uma importação somente de tipo quando 'isolatedModules' está habilitado.", + "Import_0_from_1_90013": "Importar '{0}' de \"{1}\"", + "Import_assertion_values_must_be_string_literal_expressions_2837": "Os valores de asserção de importação devem ser expressões literais de cadeias de caracteres.", + "Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2836": "As declarações de importação não são permitidas em declarações que compilam para chamadas 'require' do commonjs.", + "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2821": "As declarações de importação só têm suporte quando a opção “--module” estiver definida como “esnext”, “node18”, “node20”, “nodenext” ou “preserve”.", + "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822": "As afirmações de importação não podem ser usadas com importações ou exportações somente de tipo.", + "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880": "As asserções de importação foram substituídas por atributos de importação. Use 'with' em vez de 'assert'.", + "Import_assignment_cannot_be_used_when_targeting_ECMAScript_modules_Consider_using_import_Asterisk_as_1202": "Não é possível usar a atribuição de importação durante o direcionamento para módulos de ECMAScript. Use 'importar * como ns de \"mod\"', 'importar {a} de \"mod\"', 'importar d de \"mod\"' ou outro formato de módulo em vez disso.", + "Import_attribute_values_must_be_string_literal_expressions_2858": "Os valores do atributo de importação devem ser expressões literais de cadeias de caracteres.", + "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856": "Atributos de importação não são permitidos em instruções que são compiladas para chamadas 'require' do CommonJS.", + "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_node20_nodenext__2823": "Os atributos de importação só têm suporte quando a opção “--module” estiver definida como “esnext”, “node18”, “node20”, “nodenext” ou “preserve”.", + "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857": "Os atributos de importação não podem ser usadas com importações ou exportações somente de tipo.", + "Import_declaration_0_is_using_private_name_1_4000": "A declaração da importação '{0}' está usando o nome particular '{1}'.", + "Import_declaration_conflicts_with_local_declaration_of_0_2440": "A declaração da importação está em conflito com a declaração local '{0}'.", + "Import_declarations_in_a_namespace_cannot_reference_a_module_1147": "As declarações de importação em um namespace não podem fazer referência a um módulo.", + "Import_emit_helpers_from_tslib_6139": "Importar auxiliares de emissão de 'tslib'.", + "Import_may_be_converted_to_a_default_import_80003": "A importação pode ser convertida em uma importação padrão.", + "Import_name_cannot_be_0_2438": "O nome da importação não pode ser '{0}'.", + "Import_or_export_declaration_in_an_ambient_module_declaration_cannot_reference_module_through_relati_2439": "A declaração de importação e exportação em uma declaração de módulo de ambiente não pode fazer referência ao módulo por meio do nome do módulo relativo.", + "Import_specifier_0_does_not_exist_in_package_json_scope_at_path_1_6271": "O especificador de importação '{0}' não existe no escopo package.json no caminho '{1}'.", + "Imported_via_0_from_file_1_1393": "Importado via {0} do arquivo '{1}'", + "Imported_via_0_from_file_1_to_import_importHelpers_as_specified_in_compilerOptions_1395": "Importado via {0} do arquivo '{1}' para importar 'importHelpers' conforme especificado em compilerOptions", + "Imported_via_0_from_file_1_to_import_jsx_and_jsxs_factory_functions_1397": "Importado via {0} do arquivo '{1}' para importar as funções de fábrica 'jsx' e 'jsxs'", + "Imported_via_0_from_file_1_with_packageId_2_1394": "Importado via {0} do arquivo '{1}' com packageId '{2}'", + "Imported_via_0_from_file_1_with_packageId_2_to_import_importHelpers_as_specified_in_compilerOptions_1396": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar 'importHelpers' conforme especificado em compilerOptions", + "Imported_via_0_from_file_1_with_packageId_2_to_import_jsx_and_jsxs_factory_functions_1398": "Importado via {0} do arquivo '{1}' com packageId '{2}' para importar as funções de fábrica 'jsx' e 'jsxs'", + "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543": "A importação de um arquivo JSON para um módulo ECMAScript requer um 'type: \"json\"' quando o atributo de importação \"module\" estiver definido como \"{0}\".", + "Imports_are_not_permitted_in_module_augmentations_Consider_moving_them_to_the_enclosing_external_mod_2667": "Importações não são permitidas em acréscimos de módulo. Considere movê-las para o módulo externo delimitador.", + "In_ambient_enum_declarations_member_initializer_must_be_constant_expression_1066": "Em declarações de enumeração de ambiente, o inicializador de membro deve ser uma expressão de constante.", + "In_an_enum_with_multiple_declarations_only_one_declaration_can_omit_an_initializer_for_its_first_enu_2432": "Em uma enumeração com várias declarações, somente uma declaração pode omitir um inicializador para o primeiro elemento de enumeração.", + "Include_a_list_of_files_This_does_not_support_glob_patterns_as_opposed_to_include_6635": "Incluir uma lista de arquivos. Isso não oferece suporte a padrões glob, ao contrário de 'include'.", + "Include_modules_imported_with_json_extension_6197": "Incluir módulos importados com a extensão '.json'", + "Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript_6644": "Incluir o código-fonte no sourcemaps dentro do JavaScript emitido.", + "Include_sourcemap_files_inside_the_emitted_JavaScript_6643": "Incluir arquivos sourcemap dentro do JavaScript emitido.", + "Includes_imports_of_types_referenced_by_0_90054": "Inclui importações de tipos referenciados por '{0}'", + "Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_conf_6914": "Incluir --watch, -w começará a observar o projeto atual para as alterações do arquivo. Uma vez definido, você pode configurar o modo de inspeção com:", + "Incomplete_quantifier_Digit_expected_1505": "Quantificador incompleto. Dígito esperado.", + "Index_signature_for_type_0_is_missing_in_type_1_2329": "A assinatura do índice para o tipo '{0}' está ausente no tipo '{1}'.", + "Index_signature_in_type_0_only_permits_reading_2542": "Assinatura de índice no tipo '{0}' permite somente leitura.", + "Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local_2395": "Todas as declarações individuais na declaração mesclada '{0}' devem ser exportadas ou ficar no local.", + "Infer_all_types_from_usage_95023": "Inferir todos os tipos de uso", + "Infer_function_return_type_95148": "Inferir o tipo de retorno da função", + "Infer_parameter_types_from_usage_95012": "Inferir tipos de parâmetro pelo uso", + "Infer_this_type_of_0_from_usage_95080": "Inferir tipo 'this' de '{0}' do uso", + "Infer_type_of_0_from_usage_95011": "Inferir tipo de '{0}' pelo uso", + "Inference_from_class_expressions_is_not_supported_with_isolatedDeclarations_9022": "Não há suporte para inferência de expressões de classe com --isolatedDeclarations.", + "Initialize_property_0_in_the_constructor_90020": "Inicializar a propriedade '{0}' no construtor", + "Initialize_static_property_0_90021": "Inicializar a propriedade estática '{0}'", + "Initializer_for_property_0_2811": "Inicializador para a propriedade '{0}'", + "Initializer_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2301": "O inicializador da variável de membro de instância '{0}' não pode referenciar o identificador '{1}' declarado no construtor.", + "Initializers_are_not_allowed_in_ambient_contexts_1039": "Inicializadores não são permitidos em contextos de ambiente.", + "Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file_6070": "Inicializa um projeto TypeScript e cria um arquivo tsconfig.json.", + "Inline_variable_95184": "Variável embutida", + "Insert_command_line_options_and_files_from_a_file_6030": "Inserir opções e arquivos de linha de comando de um arquivo.", + "Install_0_95014": "Instalar '{0}'", + "Install_all_missing_types_packages_95033": "Instalar todos os pacotes de tipos ausentes", + "Interface_0_cannot_simultaneously_extend_types_1_and_2_2320": "A interface '{0}' não pode estender os tipos '{1}' e '{2}' simultaneamente.", + "Interface_0_incorrectly_extends_interface_1_2430": "A interface '{0}' estende incorretamente a interface '{1}'.", + "Interface_declaration_cannot_have_implements_clause_1176": "A declaração de interface não pode ter a cláusula 'implements'.", + "Interface_must_be_given_a_name_1438": "A interface deve receber um nome.", + "Interface_name_cannot_be_0_2427": "O nome da interface não pode ser '{0}'.", + "Interop_Constraints_6252": "Restrições Interop", + "Interpret_optional_property_types_as_written_rather_than_adding_undefined_6243": "Interprete os tipos de propriedade opcionais conforme escritos, em vez de adicionar 'indefinido'.", + "Invalid_character_1127": "Caractere inválido.", + "Invalid_import_specifier_0_has_no_possible_resolutions_6272": "O especificador de importação inválido '{0}' não tem resoluções possíveis.", + "Invalid_module_name_in_augmentation_Module_0_resolves_to_an_untyped_module_at_1_which_cannot_be_augm_2665": "Nome de módulo inválido no aumento. O módulo '{0}' resolve para um módulo não tipado em '{1}', que não pode ser aumentado.", + "Invalid_module_name_in_augmentation_module_0_cannot_be_found_2664": "Nome de módulo inválido em acréscimo, o módulo '{0}' não pôde ser encontrado.", + "Invalid_optional_chain_from_new_expression_Did_you_mean_to_call_0_1209": "Cadeia opcional inválida da nova expressão. Você quis dizer chamar '{0}()'?", + "Invalid_reference_directive_syntax_1084": "Sintaxe de diretiva 'reference' inválida.", + "Invalid_syntax_in_decorator_1498": "Sintaxe inválida no decorador.", + "Invalid_use_of_0_It_cannot_be_used_inside_a_class_static_block_18039": "Uso inválido de “{0}”. Ele não pode ser usado dentro de um bloco estático de classe.", + "Invalid_use_of_0_Modules_are_automatically_in_strict_mode_1215": "Uso inválido de '{0}'. Os módulos ficam automaticamente em modo estrito.", + "Invalid_use_of_0_in_strict_mode_1100": "Uso inválido de '{0}' no modo estrito.", + "Invalid_value_for_ignoreDeprecations_5103": "Valor inválido para '--ignoreDeprecations'.", + "Invalid_value_for_jsxFactory_0_is_not_a_valid_identifier_or_qualified_name_5067": "Valor inválido para 'jsxFactory'. '{0}' não é um identificador válido ou nome qualificado.", + "Invalid_value_for_jsxFragmentFactory_0_is_not_a_valid_identifier_or_qualified_name_18035": "Valor inválido para 'jsxFragmentFactory'. '{0}' não é um identificador válido ou nome qualificado.", + "Invalid_value_for_reactNamespace_0_is_not_a_valid_identifier_5059": "Valor inválido para '--reactNamespace'. '{0}' não é um identificador válido.", + "It_is_likely_that_you_are_missing_a_comma_to_separate_these_two_template_expressions_They_form_a_tag_2796": "É provável que não haja uma vírgula para separar essas duas expressões de modelo. Elas formam uma expressão de modelo marcada que não pode ser invocada.", + "Its_element_type_0_is_not_a_valid_JSX_element_2789": "Seu tipo de elemento '{0}' não é um elemento JSX válido.", + "Its_instance_type_0_is_not_a_valid_JSX_element_2788": "Seu tipo de instância '{0}' não é um elemento JSX válido.", + "Its_return_type_0_is_not_a_valid_JSX_element_2787": "Seu tipo de retorno '{0}' não é um elemento JSX válido.", + "Its_type_0_is_not_a_valid_JSX_element_type_18053": "Seu tipo '{0}' não é um elemento JSX válido.", + "JSDoc_0_1_does_not_match_the_extends_2_clause_8023": "O '@{0} {1}' do JSDoc não corresponde à cláusula 'extends {2}'.", + "JSDoc_0_is_not_attached_to_a_class_8022": "O '@{0}' do JSDoc não está anexado a uma classe.", + "JSDoc_may_only_appear_in_the_last_parameter_of_a_signature_8028": "JSDoc '...' só pode aparecer no último parâmetro de uma assinatura.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_8024": "A marcação do JSDoc \"@param\" tem o nome \"{0}\", mas não há nenhum parâmetro com esse nome.", + "JSDoc_param_tag_has_name_0_but_there_is_no_parameter_with_that_name_It_would_match_arguments_if_it_h_8029": "A marca '@param' do JSDoc tem o nome '{0}', mas não há nenhum parâmetro com esse nome. Ela corresponderia a 'argumentos' se tivesse um tipo de matriz.", + "JSDoc_typedef_may_be_converted_to_TypeScript_type_80009": "Typedef JSDoc pode ser convertido em tipo TypeScript.", + "JSDoc_typedef_tag_should_either_have_a_type_annotation_or_be_followed_by_property_or_member_tags_8021": "A marca JSDoc \"@typedef\" deve ter uma anotação de tipo ou ser seguida pelas marcas \"@property\" or \"@member\".", + "JSDoc_typedefs_may_be_converted_to_TypeScript_types_80010": "Typedefs JSDoc podem ser convertidos em tipos TypeScript.", + "JSDoc_types_can_only_be_used_inside_documentation_comments_8020": "Os tipos de JSDoc podem ser usados somente dentro dos comentários de documentação.", + "JSDoc_types_may_be_moved_to_TypeScript_types_80004": "Tipos JSDoc podem ser movidos para tipos TypeScript.", + "JSX_attributes_must_only_be_assigned_a_non_empty_expression_17000": "Os atributos JSX só devem ser atribuídos a 'expressões' que não estejam vazias.", + "JSX_element_0_has_no_corresponding_closing_tag_17008": "O elemento JSX '{0}' não tem uma marcação de fechamento correspondente.", + "JSX_element_class_does_not_support_attributes_because_it_does_not_have_a_0_property_2607": "A classe do elemento JSX não dá suporte a atributos porque não tem uma propriedade '{0}'.", + "JSX_element_implicitly_has_type_any_because_no_interface_JSX_0_exists_7026": "O elemento JSX implicitamente tem o tipo 'any' porque não há uma interface de 'JSX.{0}'.", + "JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist_2602": "O elemento JSX implicitamente tem tipo 'any' porque o tipo global \"JSX.Element\" não existe.", + "JSX_element_type_0_does_not_have_any_construct_or_call_signatures_2604": "O tipo de elemento JSX '{0}' não tem nenhum constructo nem assinaturas de chamadas.", + "JSX_elements_cannot_have_multiple_attributes_with_the_same_name_17001": "Elementos JSX não podem ter vários atributos com o mesmo nome.", + "JSX_expressions_may_not_use_the_comma_operator_Did_you_mean_to_write_an_array_18007": "Expressões JSX não podem usar o operador vírgula. Você quis escrever uma matriz?", + "JSX_expressions_must_have_one_parent_element_2657": "As expressões JSX devem ter um elemento pai.", + "JSX_fragment_has_no_corresponding_closing_tag_17014": "O fragmento JSX não tem uma marcação de fechamento correspondente.", + "JSX_property_access_expressions_cannot_include_JSX_namespace_names_2633": "As expressões de acesso da propriedade JSX não podem incluir nomes do namespace JSX", + "JSX_spread_child_must_be_an_array_type_2609": "O filho do espalhamento JSX deve ser um tipo de matriz.", + "JavaScript_Support_6247": "Suporte do JavaScript", + "Jump_target_cannot_cross_function_boundary_1107": "O destino do salto não pode ultrapassar o limite de função.", + "KIND_6034": "TIPO", + "Keywords_cannot_contain_escape_characters_1260": "As palavras-chave não podem conter caracteres de escape.", + "LOCATION_6037": "LOCAL", + "Language_and_Environment_6254": "Idioma e Ambiente", + "Left_side_of_comma_operator_is_unused_and_has_no_side_effects_2695": "O operador antes da vírgula não é usado e não tem efeitos colaterais.", + "Library_0_specified_in_compilerOptions_1422": "Biblioteca '{0}' especificada em compilerOptions", + "Library_referenced_via_0_from_file_1_1405": "Biblioteca referenciada via '{0}' do arquivo '{1}'", + "Line_break_not_permitted_here_1142": "Quebra de linha não permitida aqui.", + "Line_terminator_not_permitted_before_arrow_1200": "Terminador de linha não permitido antes de seta.", + "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931": "Lista de sufixos de nome de arquivo a serem pesquisadas ao resolver um módulo.", + "List_of_folders_to_include_type_definitions_from_6161": "Lista de pastas das quais são incluídas as definições de tipo.", + "List_of_root_folders_whose_combined_content_represents_the_structure_of_the_project_at_runtime_6168": "Listas das pastas raiz cujo conteúdo combinado representa a estrutura do projeto no tempo de execução.", + "Loading_0_from_the_root_dir_1_candidate_location_2_6109": "Carregando '{0}' do diretório raiz '{1}', local candidato '{2}'.", + "Loading_module_0_from_node_modules_folder_target_file_types_Colon_1_6098": "Carregando o módulo '{0}' da pasta 'node_modules', tipo de arquivo de destino '{1}'.", + "Loading_module_as_file_Slash_folder_candidate_module_location_0_target_file_types_Colon_1_6095": "Carregando módulo como arquivo/pasta, local do módulo candidato '{0}', tipo de arquivo de destino {1}.", + "Locale_must_be_of_the_form_language_or_language_territory_For_example_0_or_1_6048": "A localidade deve estar no formato ou -. Por exemplo '{0}' ou '{1}'.", + "Log_paths_used_during_the_moduleResolution_process_6706": "Caminhos de log usados durante o processo 'moduleResolution'.", + "Longest_matching_prefix_for_0_is_1_6108": "O maior prefixo correspondente para '{0}' é '{1}'.", + "Looking_up_in_node_modules_folder_initial_location_0_6125": "Pesquisando na pasta 'node_modules', local inicial '{0}'.", + "Make_all_super_calls_the_first_statement_in_their_constructor_95036": "Tornar todas as chamadas 'super()' a primeira instrução nos respectivos construtores", + "Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option_6650": "Fazer com que o keyof retorne apenas cadeias de caracteres, números ou símbolos. Opção herdada.", + "Make_super_call_the_first_statement_in_the_constructor_90002": "Tornar a chamada 'super()' a primeira instrução no construtor", + "Mapped_object_type_implicitly_has_an_any_template_type_7039": "O tipo de objeto mapeado implicitamente tem um tipo de modelo 'any'.", + "Mark_array_literal_as_const_90070": "Marcar literal de matriz como const", + "Matched_0_condition_1_6403": "'{0}' correspondente à condição '{1}'.", + "Matched_by_default_include_pattern_Asterisk_Asterisk_Slash_Asterisk_1457": "Correspondido por padrão de inclusão padrão '**/*'", + "Matched_by_include_pattern_0_in_1_1407": "Correspondência pelo padrão de inclusão '{0}' em '{1}'", + "Member_0_implicitly_has_an_1_type_7008": "O membro '{0}' implicitamente tem um tipo '{1}'.", + "Member_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7045": "O membro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", + "Merge_conflict_marker_encountered_1185": "Marcador de conflito de mesclagem encontrado.", + "Merged_declaration_0_cannot_include_a_default_export_declaration_Consider_adding_a_separate_export_d_2652": "A declaração mesclada '{0}' não pode conter uma declaração de exportação padrão. Considere adicionar uma declaração 'export default {0}' independente.", + "Meta_property_0_is_only_allowed_in_the_body_of_a_function_declaration_function_expression_or_constru_17013": "A metapropriedade '{0}' só é permitida no corpo de uma declaração de função, expressão de função ou construtor.", + "Method_0_cannot_have_an_implementation_because_it_is_marked_abstract_1245": "O método '{0}' não pode ter uma implementação, pois está marcado como abstrato.", + "Method_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4101": "O método '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Method_0_of_exported_interface_has_or_is_using_private_name_1_4102": "O método '{0}' da interface exportada tem ou está usando o nome privado '{1}'.", + "Method_must_have_an_explicit_return_type_annotation_with_isolatedDeclarations_9008": "O método deve ter uma anotação de tipo de retorno explícita com --isolatedDeclarations.", + "Method_not_implemented_95158": "Método não implementado.", + "Modifiers_cannot_appear_here_1184": "Modificadores não podem aparecer aqui.", + "Module_0_can_only_be_default_imported_using_the_1_flag_1259": "O módulo '{0}' só pode ser importado por padrão usando o sinalizador '{1}'", + "Module_0_cannot_be_imported_using_this_construct_The_specifier_only_resolves_to_an_ES_module_which_c_1471": "O módulo '{0}' não pode ser importado usando esta construção. O especificador resolve apenas para um módulo ES, que não pode ser importado com 'require'. Em vez disso, use uma importação ECMAScript.", + "Module_0_declares_1_locally_but_it_is_exported_as_2_2460": "O módulo '{0}' declara '{1}' localmente, mas é exportado como '{2}'.", + "Module_0_declares_1_locally_but_it_is_not_exported_2459": "O módulo '{0}' declara '{1}' localmente, mas não é exportado.", + "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340": "O módulo '{0}' não faz referência a um tipo, mas é usado como um tipo aqui. Você quis dizer 'typeof import('{0}')'?", + "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339": "O módulo '{0}' não faz referência a um valor, mas é usado como um valor aqui.", + "Module_0_has_already_exported_a_member_named_1_Consider_explicitly_re_exporting_to_resolve_the_ambig_2308": "O módulo {0} já exportou um membro denominado '{1}'. Considere reexportar explicitamente para resolver a ambiguidade.", + "Module_0_has_no_default_export_1192": "O módulo '{0}' não tem padrão de exportação.", + "Module_0_has_no_default_export_Did_you_mean_to_use_import_1_from_0_instead_2613": "O módulo '{0}' não tem exportação padrão. Você quis dizer 'importar { {1} } de {0}' em vez disso?", + "Module_0_has_no_exported_member_1_2305": "O módulo '{0}' não tem nenhum membro exportado '{1}'.", + "Module_0_has_no_exported_member_1_Did_you_mean_to_use_import_1_from_0_instead_2614": "O módulo '{0}' não tem membro exportado '{1}'. Você quis dizer 'importar {1} de {0}' em vez disso?", + "Module_0_is_hidden_by_a_local_declaration_with_the_same_name_2437": "O módulo '{0}' está oculto por uma declaração de local com o mesmo nome.", + "Module_0_uses_export_and_cannot_be_used_with_export_Asterisk_2498": "O módulo '{0}' usa 'export =' e não pode ser usado com 'export *'.", + "Module_0_was_resolved_as_locally_declared_ambient_module_in_file_1_6144": "O módulo '{0}' foi resolvido como módulo de ambiente declarado localmente no arquivo '{1}'.", + "Module_0_was_resolved_to_1_but_allowArbitraryExtensions_is_not_set_6263": "O módulo '{0}' foi resolvido para '{1}', mas '--allowArbitraryExtensions' não está definido.", + "Module_0_was_resolved_to_1_but_jsx_is_not_set_6142": "O módulo '{0}' foi resolvido para '{1}', mas '--jsx' não está configurado.", + "Module_0_was_resolved_to_1_but_resolveJsonModule_is_not_used_7042": "O módulo '{0}' foi resolvido para '{1}', mas '--resolveJsonModule' não é usado.", + "Module_declaration_names_may_only_use_or_quoted_strings_1443": "Os nomes de declaração de módulo só podem usar ' ou “ cadeias de caracteres entre aspas.", + "Module_name_0_matched_pattern_1_6092": "Nome do módulo '{0}', padrão correspondido '{1}'.", + "Module_name_0_was_not_resolved_6090": "======== Nome do módulo '{0}' não foi resolvido. ========", + "Module_name_0_was_successfully_resolved_to_1_6089": "======== Nome do módulo '{0}' foi resolvido com sucesso '{1}'. ========", + "Module_name_0_was_successfully_resolved_to_1_with_Package_ID_2_6218": "======== O nome do módulo '{0}' foi resolvido com sucesso para '{1}' com a ID do Pacote '{2}'. ========", + "Module_resolution_kind_is_not_specified_using_0_6088": "Resolução de tipo não foi especificado, usando '{0}'.", + "Module_resolution_using_rootDirs_has_failed_6111": "Falha na resolução de módulo usando 'rootDirs'.", + "Modules_6244": "Módulos", + "Move_labeled_tuple_element_modifiers_to_labels_95117": "Mover os modificadores de elemento de tupla rotulados para rótulos", + "Move_the_expression_in_default_export_to_a_variable_and_add_a_type_annotation_to_it_9036": "Mova a expressão na exportação padrão para uma variável e adicione uma anotação de tipo a ela.", + "Move_to_a_new_file_95049": "Mover para um novo arquivo", + "Move_to_file_95178": "Mover para Arquivo", + "Multiple_consecutive_numeric_separators_are_not_permitted_6189": "Não são permitidos vários separadores numéricos consecutivos.", + "Multiple_constructor_implementations_are_not_allowed_2392": "Não são permitidas várias implementações de construtor.", + "NEWLINE_6061": "NEWLINE", + "Name_is_not_valid_95136": "Nome inválido", + "Named_capturing_groups_are_only_available_when_targeting_ES2018_or_later_1503": "Grupos de captura nomeados só estão disponíveis ao direcionar para 'ES2018' ou posterior.", + "Named_capturing_groups_with_the_same_name_must_be_mutually_exclusive_to_each_other_1515": "Grupos de captura nomeados com o mesmo nome devem ser mutuamente exclusivos entre si.", + "Named_imports_are_not_allowed_in_a_deferred_import_18059": "Importações nomeadas não são permitidas em uma importação adiada.", + "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544": "As importações nomeadas de um arquivo JSON para um módulo ECMAScript não são permitidas quando \"module\" é definido como \"{0}\".", + "Named_property_0_of_types_1_and_2_are_not_identical_2319": "As propriedades com nome '{0}' dos tipos '{1}' e '{2}' não são idênticas.", + "Namespace_0_has_no_exported_member_1_2694": "O namespace '{0}' não tem o membro exportado '{1}'.", + "Namespace_must_be_given_a_name_1437": "O Namespace deve receber um nome.", + "Namespace_name_cannot_be_0_2819": "O nome do Namespace não pode ser '{0}'.", + "Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to__1280": "Namespaces não são permitidos em arquivos de script global quando '{0}' está habilitado. Se esse arquivo não se destina a ser um script global, defina 'moduleDetection' como 'force' ou adicione uma instrução 'export {}' vazia.", + "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433": "Nem decoradores nem modificadores podem ser aplicados a parâmetros 'this'.", + "No_base_constructor_has_the_specified_number_of_type_arguments_2508": "Nenhum construtor base tem o número especificado de argumentos de tipo.", + "No_constituent_of_type_0_is_callable_2755": "Nenhum membro do tipo '{0}' pode ser chamado.", + "No_constituent_of_type_0_is_constructable_2759": "Nenhum membro do tipo '{0}' é construído.", + "No_index_signature_with_a_parameter_of_type_0_was_found_on_type_1_7054": "Nenhuma assinatura de índice com um parâmetro do tipo '{0}' foi localizada no tipo '{1}'.", + "No_inputs_were_found_in_config_file_0_Specified_include_paths_were_1_and_exclude_paths_were_2_18003": "Nenhuma entrada foi localizada no arquivo de configuração '{0}'. Os caminhos especificados foram 'incluir' '{1}' e 'excluir' '{2}'.", + "No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files_6608": "Não há mais suporte. Em versões iniciais, defina manualmente a codificação de texto para a leitura de arquivos.", + "No_overload_expects_0_arguments_but_overloads_do_exist_that_expect_either_1_or_2_arguments_2575": "Nenhuma sobrecarga espera argumentos {0}, mas existem sobrecargas que esperam argumentos {1} ou {2}.", + "No_overload_expects_0_type_arguments_but_overloads_do_exist_that_expect_either_1_or_2_type_arguments_2743": "Nenhuma sobrecarga espera argumentos do tipo {0}, mas existem sobrecargas que esperam argumentos do tipo {1} ou {2}.", + "No_overload_matches_this_call_2769": "Nenhuma sobrecarga corresponde a esta chamada.", + "No_type_could_be_extracted_from_this_type_node_95134": "Não foi possível extrair nenhum tipo deste nó de tipo", + "No_value_exists_in_scope_for_the_shorthand_property_0_Either_declare_one_or_provide_an_initializer_18004": "Não existe valor no escopo para a propriedade abreviada '{0}'. Declare um ou forneça um inicializador.", + "Non_abstract_class_0_does_not_implement_inherited_abstract_member_1_from_class_2_2515": "A classe não abstrata '{0}' não implementa o membro abstrato herdado {1} da classe '{2}'.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_2654": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2}.", + "Non_abstract_class_0_is_missing_implementations_for_the_following_members_of_1_Colon_2_and_3_more_2655": "A classe não abstrata '{0}' não tem implementações para os seguintes membros de '{1}': {2} e mais {3}.", + "Non_abstract_class_expression_does_not_implement_inherited_abstract_member_0_from_class_1_2653": "A expressão da classe não abstrata não implementa o membro abstrato herdado '{0}' da classe '{1}'.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_2656": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1}.", + "Non_abstract_class_expression_is_missing_implementations_for_the_following_members_of_0_Colon_1_and__2650": "Não há implementações de expressão de classe não abstrata para os seguintes membros de '{0}': {1} e mais {2}.", + "Non_null_assertions_can_only_be_used_in_TypeScript_files_8013": "As declarações não nulas só podem ser usadas em arquivos TypeScript.", + "Non_relative_paths_are_not_allowed_when_baseUrl_is_not_set_Did_you_forget_a_leading_Slash_5090": "Os caminhos não relativos não são permitidos quando a 'baseUrl' não está definida. Você esqueceu um './' à esquerda?", + "Non_simple_parameter_declared_here_1348": "Parâmetro não simples declarado aqui.", + "Not_all_code_paths_return_a_value_7030": "Nem todos os caminhos de código retornam um valor.", + "Not_all_constituents_of_type_0_are_callable_2756": "Nem todos os membros do tipo '{0}' podem ser chamados.", + "Not_all_constituents_of_type_0_are_constructable_2760": "Nem todos os membros do tipo '{0}' são construídos.", + "Numbers_out_of_order_in_quantifier_1506": "Números fora de ordem no quantificador.", + "Numeric_literals_with_absolute_values_equal_to_2_53_or_greater_are_too_large_to_be_represented_accur_80008": "Os literais numéricos com valores absolutos iguais a 2^53 ou mais são muito grandes para serem representados precisamente como inteiros.", + "Numeric_separators_are_not_allowed_here_6188": "Separadores numéricos não são permitidos aqui.", + "Object_is_of_type_unknown_2571": "O objeto é do tipo 'desconhecido'.", + "Object_is_possibly_null_2531": "Possivelmente, o objeto é 'nulo'.", + "Object_is_possibly_null_or_undefined_2533": "Possivelmente, o objeto é 'nulo' ou 'indefinido'.", + "Object_is_possibly_undefined_2532": "Possivelmente, o objeto é 'nulo'.", + "Object_literal_may_only_specify_known_properties_and_0_does_not_exist_in_type_1_2353": "O literal de objeto pode especificar apenas propriedades conhecidas e '{0}' não existe no tipo '{1}'.", + "Object_literal_may_only_specify_known_properties_but_0_does_not_exist_in_type_1_Did_you_mean_to_writ_2561": "O literal de objeto pode especificar somente propriedades conhecidas, mas o '{0}' não existe no tipo '{1}'. Você queria ter escrito '{2}'?", + "Object_literal_s_property_0_implicitly_has_an_1_type_7018": "A propriedade '{0}' do literal de objeto implicitamente tem um tipo '{1}'.", + "Objects_that_contain_shorthand_properties_can_t_be_inferred_with_isolatedDeclarations_9016": "Objetos que contêm propriedades abreviadas não podem ser inferidos com --isolatedDeclarations.", + "Objects_that_contain_spread_assignments_can_t_be_inferred_with_isolatedDeclarations_9015": "Os objetos que contêm atribuições de espalhamento não podem ser inferidos com --isolatedDeclarations.", + "Octal_digit_expected_1178": "Dígito octal esperado.", + "Octal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_If_this_was_intended__1536": "Sequências de escape octais e referências inversas não são permitidas em uma classe de caracteres. Se isso foi destinado a uma sequência de escape, use a sintaxe '{0}' em vez disso.", + "Octal_escape_sequences_are_not_allowed_Use_the_syntax_0_1487": "Sequências de escape octais não são permitidas. Use a sintaxe '{0}'.", + "Octal_literals_are_not_allowed_Use_the_syntax_0_1121": "Literais octais não são permitidos. Use a sintaxe '{0}'.", + "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126": "Um valor de '{0}.{1}' é a cadeia de caracteres '{2}', e o outro é considerado um valor numérico desconhecido.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_in_statement_1091": "É permitida apenas uma única declaração de variável em uma instrução 'for...in'.", + "Only_a_single_variable_declaration_is_allowed_in_a_for_of_statement_1188": "É permitida apenas uma única declaração de variável em uma instrução 'for...of'.", + "Only_a_void_function_can_be_called_with_the_new_keyword_2350": "Apenas uma função void pode ser chamada com a palavra-chave 'new'.", + "Only_ambient_modules_can_use_quoted_names_1035": "Somente os módulos de ambiente podem usar nomes entre aspas.", + "Only_amd_and_system_modules_are_supported_alongside_0_6082": "Há suporte somente aos módulos 'amd' e 'system' ao lado de --{0}.", + "Only_const_arrays_can_be_inferred_with_isolatedDeclarations_9017": "Somente matrizes const podem ser inferidas com --isolatedDeclarations.", + "Only_emit_d_ts_declaration_files_6014": "Emita somente arquivos de declaração '.d.ts'.", + "Only_output_d_ts_files_and_not_JavaScript_files_6623": "Gerar somente arquivos .d.ts e não arquivos JavaScript.", + "Only_public_and_protected_methods_of_the_base_class_are_accessible_via_the_super_keyword_2340": "Somente métodos protegidos e públicos da classe base são acessíveis pela palavra-chave 'super'.", + "Operator_0_cannot_be_applied_to_type_1_2736": "O operador '{0}' não pode ser aplicado ao tipo '{1}'.", + "Operator_0_cannot_be_applied_to_types_1_and_2_2365": "O operador '{0}' não pode ser aplicado aos tipos '{1}' e '{2}'.", + "Operators_must_not_be_mixed_within_a_character_class_Wrap_it_in_a_nested_class_instead_1519": "Os operadores não devem ser mistos em uma classe de caracteres. Encapsule-o em uma classe aninhada.", + "Opt_a_project_out_of_multi_project_reference_checking_when_editing_6619": "Recusar um projeto de verificação de referência de multiprojeto ao editar.", + "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108": "A opção '{0}={1}' foi removida. Remova-a da configuração.", + "Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDepr_5107": "A opção '{0}={1}' foi preterida e deixará de funcionar no TypeScript {2}. Especifique compilerOption '\"ignoreDeprecations\": \"{3}\"' para silenciar esse erro.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_false_or_null_on_command_line_6230": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'false' ou 'null' na linha de comando.", + "Option_0_can_only_be_specified_in_tsconfig_json_file_or_set_to_null_on_command_line_6064": "A opção '{0}' somente pode ser especificada no arquivo 'tsconfig.json' ou definida como 'null' na linha de comando.", + "Option_0_can_only_be_specified_on_command_line_6266": "A opção '{0}' só pode ser especificada na linha de comando.", + "Option_0_can_only_be_used_when_either_option_inlineSourceMap_or_option_sourceMap_is_provided_5051": "A opção '{0} só pode ser usada quando qualquer uma das opções '--inlineSourceMap' ou '--sourceMap' é fornecida.", + "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098": "A opção '{0}' só pode ser usada quando 'moduleResolution' está definido como 'node16', 'nodenext' ou 'bundler'.", + "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095": "A opção '{0}' só pode ser usada quando 'module' está definido como 'preserve' ou 'es2015' ou posterior.", + "Option_0_cannot_be_specified_when_option_jsx_is_1_5089": "A opção '{0}' não pode ser especificada quando a opção 'jsx' é '{1}'.", + "Option_0_cannot_be_specified_with_option_1_5053": "A opção '{0}' não pode ser especificada com a opção '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_5052": "A opção '{0}' não pode ser especificada sem especificar a opção '{1}'.", + "Option_0_cannot_be_specified_without_specifying_option_1_or_option_2_5069": "A opção '{0}' não pode ser especificada sem a especificação da opção '{1}' ou '{2}'.", + "Option_0_has_been_removed_Please_remove_it_from_your_configuration_5102": "A opção '{0}' foi removida. Remova-a da configuração.", + "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101": "A opção '{0}' foi preterida e deixará de funcionar no TypeScript {1}. Especifique compilerOption '\"ignoreDeprecations\": \"{2}\"' para silenciar esse erro.", + "Option_0_is_redundant_and_cannot_be_specified_with_option_1_5104": "A opção '{0}' é redundante e não pode ser especificada com a opção '{1}'.", + "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096": "A opção 'allowImportingTsExtensions' só pode ser usada quando 'noEmit' ou 'emitDeclarationOnly' está definido.", + "Option_build_must_be_the_first_command_line_argument_6369": "A opção '--build' precisa ser o primeiro argumento da linha de comando.", + "Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBui_5074": "A opção '--incremental' só pode ser especificada usando tsconfig, emitindo para um arquivo único ou quando a opção '--tsBuildInfoFile' for especificada.", + "Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES_5047": "A opção 'isolatedModules' só pode ser usada quando nenhuma opção de '--module' for fornecida ou a opção 'target' for 'ES2015' ou superior.", + "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109": "A opção 'moduleResolution' deve ser definida como '{0}' (ou deixada não especificada) quando a opção 'module' está definida como '{1}'.", + "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110": "A opção 'module' deve ser definida como '{0}' quando a opção 'moduleResolution' está definida como '{1}'.", + "Option_preserveConstEnums_cannot_be_disabled_when_0_is_enabled_5091": "A opção 'preserveConstEnums' não pode ser desabilitada quando '{0}' está habilitada.", + "Option_project_cannot_be_mixed_with_source_files_on_a_command_line_5042": "A opção 'project' não pode ser mesclada com arquivos de origem em uma linha de comando.", + "Option_resolveJsonModule_cannot_be_specified_when_moduleResolution_is_set_to_classic_5070": "A opção '--resolveJsonModule' não pode ser especificada quando 'moduleResolution' está definido como 'classic'.", + "Option_resolveJsonModule_cannot_be_specified_when_module_is_set_to_none_system_or_umd_5071": "A opção '--resolveJsonModule' não pode ser especificada quando 'module' está definido como 'none', 'system' ou 'umd'.", + "Option_verbatimModuleSyntax_cannot_be_used_when_module_is_set_to_UMD_AMD_or_System_5105": "A opção 'texttimModuleSyntax' não pode ser usada quando 'module' está definido como 'UMD', 'AMD' ou 'System'.", + "Options_0_and_1_cannot_be_combined_6370": "As opções '{0}' e '{1}' não podem ser combinadas.", + "Options_Colon_6027": "Opções:", + "Other_Outputs_6291": "Outras Saídas", + "Output_Formatting_6256": "Formatação da Saída", + "Output_compiler_performance_information_after_building_6615": "Gerar informações de desempenho do compilador após a criação.", + "Output_directory_for_generated_declaration_files_6166": "Diretório de saída para os arquivos de declaração gerados.", + "Output_file_0_has_not_been_built_from_source_file_1_6305": "O arquivo de saída '{0}' não foi compilado do arquivo de origem '{1}'.", + "Output_from_referenced_project_0_included_because_1_specified_1411": "Saída do projeto referenciado '{0}' incluída porque '{1}' está especificado", + "Output_from_referenced_project_0_included_because_module_is_specified_as_none_1412": "Saída do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", + "Output_more_detailed_compiler_performance_information_after_building_6632": "Gerar informações de desempenho do compilador mais detalhadas após a criação.", + "Overload_0_of_1_2_gave_the_following_error_2772": "A sobrecarga {0} de {1}, '{2}', gerou o seguinte erro.", + "Overload_signatures_must_all_be_abstract_or_non_abstract_2512": "Assinaturas de sobrecarga devem todas ser abstratas ou não abstratas.", + "Overload_signatures_must_all_be_ambient_or_non_ambient_2384": "Todas as assinaturas de sobrecarga devem ser ambiente ou não ambiente.", + "Overload_signatures_must_all_be_exported_or_non_exported_2383": "Assinaturas de sobrecarga devem todas ser exportadas ou não exportadas.", + "Overload_signatures_must_all_be_optional_or_required_2386": "Todas as assinaturas de sobrecarga devem ser opcionais ou obrigatórias.", + "Overload_signatures_must_all_be_public_private_or_protected_2385": "Todas as assinaturas de sobrecarga devem ser protegidas, privadas ou públicas.", + "Parameter_0_cannot_reference_identifier_1_declared_after_it_2373": "O parâmetro '{0}' não pode referenciar o identificador '{1}' declarado depois dele.", + "Parameter_0_cannot_reference_itself_2372": "O parâmetro '{0}' não pode referenciar a si mesmo.", + "Parameter_0_implicitly_has_an_1_type_7006": "O parâmetro '{0}' implicitamente tem um tipo '{1}'.", + "Parameter_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7044": "O parâmetro '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", + "Parameter_0_is_not_in_the_same_position_as_parameter_1_1227": "O parâmetro '{0}' não está na mesma posição que o parâmetro '{1}'.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4108": "O parâmetro '{0}' do acessador tem ou está usando o nome '{1}' do módulo externo '{2}', mas não pode ser nomeado.", + "Parameter_0_of_accessor_has_or_is_using_name_1_from_private_module_2_4107": "O parâmetro '{0}' do acessador tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_0_of_accessor_has_or_is_using_private_name_1_4106": "O parâmetro '{0}' do acessador tem ou está usando o nome privado '{1}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4066": "O parâmetro '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4067": "O parâmetro '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_can_4061": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_name_1_from_private_module_2_4062": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_constructor_from_exported_class_has_or_is_using_private_name_1_4063": "O parâmetro '{0}' do construtor da classe exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_name_1_from_private_mod_4064": "O parâmetro '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4065": "O parâmetro '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4076": "O parâmetro '{0}' da função exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_exported_function_has_or_is_using_name_1_from_private_module_2_4077": "O parâmetro '{0}' da função exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_exported_function_has_or_is_using_private_name_1_4078": "O parâmetro '{0}' da função exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4091": "O parâmetro '{0}' da assinatura de índice da interface exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_0_of_index_signature_from_exported_interface_has_or_is_using_private_name_1_4092": "O parâmetro '{0}' da assinatura de índice da interface exportadas tem ou está usando o nome privado '{1}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_name_1_from_private_module_2_4074": "O parâmetro '{0}' do método da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4075": "O parâmetro '{0}' do método da interface exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_c_4071": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4072": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4073": "O parâmetro '{0}' do método público da classe exportada tem ou está usando o nome particular '{1}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_external_module__4068": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_name_1_from_private_module_2_4069": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4070": "O parâmetro '{0}' do método estático público da classe exportada tem ou está usando o nome particular '{1}'.", + "Parameter_cannot_have_question_mark_and_initializer_1015": "O parâmetro não pode ter inicializador e ponto de interrogação.", + "Parameter_declaration_expected_1138": "Declaração de parâmetro esperada.", + "Parameter_has_a_name_but_no_type_Did_you_mean_0_Colon_1_7051": "O parâmetro tem um nome, mas não um tipo. Você quis dizer '{0}: {1}'?", + "Parameter_modifiers_can_only_be_used_in_TypeScript_files_8012": "Modificadores de parâmetro só podem ser usados em arquivos TypeScript.", + "Parameter_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9011": "O parâmetro deve ter uma anotação de tipo explícito com --isolatedDeclarations.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4036": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_type_of_public_setter_0_from_exported_class_has_or_is_using_private_name_1_4037": "O tipo de parâmetro do setter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_name_1_from_private_mod_4034": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Parameter_type_of_public_static_setter_0_from_exported_class_has_or_is_using_private_name_1_4035": "O tipo de parâmetro do setter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Parse_in_strict_mode_and_emit_use_strict_for_each_source_file_6141": "Analisar em modo estrito e emitir \"usar estrito\" para cada arquivo de origem.", + "Part_of_files_list_in_tsconfig_json_1409": "Parte da lista 'files' no tsconfig.json", + "Pattern_0_can_have_at_most_one_Asterisk_character_5061": "O padrão '{0}' pode ter no máximo um caractere '*'.", + "Performance_timings_for_diagnostics_or_extendedDiagnostics_are_not_available_in_this_session_A_nativ_6386": "Os tempos de desempenho de '--diagnostics' ou '--extendedDiagnostics' não estão disponíveis nesta sessão. Não foi possível encontrar uma implementação nativa da API de Desempenho Web.", + "Platform_specific_6912": "Específico da plataforma", + "Prefix_0_with_an_underscore_90025": "Prefixo '{0}' com um sublinhado", + "Prefix_all_incorrect_property_declarations_with_declare_95095": "Prefixar todas as declarações de propriedade incorretas com 'declare'", + "Prefix_all_unused_declarations_with_where_possible_95025": "Prefixar com '_' todas as declarações não usadas quando possível", + "Prefix_with_declare_95094": "Prefixar com 'declare'", + "Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed_1449": "Preserve os valores importados não usados na saída JavaScript que, de outra forma, seriam removidos.", + "Print_all_of_the_files_read_during_the_compilation_6653": "Imprimir todos os arquivos lidos durante a compilação.", + "Print_files_read_during_the_compilation_including_why_it_was_included_6631": "Arquivos de impressão lidos durante a compilação, incluindo o motivo de sua inclusão.", + "Print_names_of_files_and_the_reason_they_are_part_of_the_compilation_6505": "Imprima nomes de arquivos e o motivo pelo qual eles fazem parte da compilação.", + "Print_names_of_files_part_of_the_compilation_6155": "Nomes de impressão das partes dos arquivos da compilação.", + "Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing_6503": "Imprima nomes de arquivos que fazem parte da compilação e, em seguida, interrompa o processamento.", + "Print_names_of_generated_files_part_of_the_compilation_6154": "Nomes de impressão das partes dos arquivos gerados da compilação.", + "Print_the_compiler_s_version_6019": "Imprima a versão do compilador.", + "Print_the_final_configuration_instead_of_building_1350": "Imprima a configuração final em vez de compilar.", + "Print_the_names_of_emitted_files_after_a_compilation_6652": "Imprimir os nomes dos arquivos emitidos após uma compilação.", + "Print_this_message_6017": "Imprima esta mensagem.", + "Private_accessor_was_defined_without_a_getter_2806": "O acessador privado foi definido sem um getter.", + "Private_field_0_must_be_declared_in_an_enclosing_class_1111": "O campo particular '{0}' deve ser declarado em uma classe delimitadora.", + "Private_identifiers_are_not_allowed_in_variable_declarations_18029": "Identificadores privados não são permitidos em declarações de variáveis.", + "Private_identifiers_are_not_allowed_outside_class_bodies_18016": "Identificadores privados não são permitidos fora dos corpos de classe.", + "Private_identifiers_are_only_allowed_in_class_bodies_and_may_only_be_used_as_part_of_a_class_member__1451": "Identificadores privados são permitidos apenas em corpos de classe e só podem ser usados como parte de uma declaração de membro de classe, acesso de propriedade ou no lado esquerdo de uma expressão 'em'", + "Private_identifiers_are_only_available_when_targeting_ECMAScript_2015_and_higher_18028": "Identificadores privados só estão disponíveis ao direcionar para o ECMAScript 2015 ou superior.", + "Private_identifiers_cannot_be_used_as_parameters_18009": "Não é possível usar identificadores privados como parâmetros.", + "Private_or_protected_member_0_cannot_be_accessed_on_a_type_parameter_4105": "O membro privado ou protegido '{0}' não pode ser acessado em um parâmetro de tipo.", + "Project_0_can_t_be_built_because_its_dependency_1_has_errors_6363": "O projeto '{0}' não pode ser compilado porque sua dependência '{1}' tem erros", + "Project_0_can_t_be_built_because_its_dependency_1_was_not_built_6383": "O projeto '{0}' não pode ser criado porque sua dependência '{1}' não foi criada", + "Project_0_is_being_forcibly_rebuilt_6388": "O projeto '{0}' está sendo reconstruído forçadamente", + "Project_0_is_out_of_date_because_1_6420": "O projeto '{0}' está desatualizada porque {1}.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_file_2_was_root_file_of_compilation_6412": "O projeto '{0}' está desatualizada porque o arquivo buildinfo '{1}' indica que o arquivo '{2}' era o arquivo raiz da compilação, mas não é mais.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_program_needs_to_report_errors_6419": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que o programa precisa relatar erros.", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_that_some_of_the_changes_were_not_emitte_6399": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que algumas das alterações não foram emitidas", + "Project_0_is_out_of_date_because_buildinfo_file_1_indicates_there_is_change_in_compilerOptions_6406": "O projeto '{0}' está desatualizado porque o arquivo buildinfo '{1}' indica que há alteração em compilerOptions", + "Project_0_is_out_of_date_because_its_dependency_1_is_out_of_date_6353": "O projeto '{0}' está desatualizado porque sua dependência '{1}' está desatualizada", + "Project_0_is_out_of_date_because_output_1_is_older_than_input_2_6350": "O projeto '{0}' está desatualizado porque a saída '{1}' é mais antiga que a entrada '{2}'", + "Project_0_is_out_of_date_because_output_file_1_does_not_exist_6352": "O projeto '{0}' está desatualizado porque o arquivo de saída '{1}' não existe", + "Project_0_is_out_of_date_because_output_for_it_was_generated_with_version_1_that_differs_with_curren_6381": "O projeto '{0}' está desatualizado porque a saída foi gerada com a versão '{1}' que difere da versão atual '{2}'", + "Project_0_is_out_of_date_because_there_was_error_reading_file_1_6401": "O projeto '{0}' está desatualizado porque ocorreu um erro ao ler o arquivo '{1}'", + "Project_0_is_up_to_date_6361": "O projeto '{0}' está atualizado", + "Project_0_is_up_to_date_because_newest_input_1_is_older_than_output_2_6351": "O projeto '{0}' está atualizado porque a entrada mais recente '{1}' é mais antiga que a saída '{2}'", + "Project_0_is_up_to_date_but_needs_to_update_timestamps_of_output_files_that_are_older_than_input_fil_6400": "O projeto '{0}' está atualizado, mas precisa atualizar os registros de data e hora dos arquivos de saída mais antigos que os arquivos de entrada", + "Project_0_is_up_to_date_with_d_ts_files_from_its_dependencies_6354": "O projeto '{0}' está atualizado com os arquivos .d.ts de suas dependências", + "Project_references_may_not_form_a_circular_graph_Cycle_detected_Colon_0_6202": "Referências de projeto não podem formar um gráfico circular. Ciclo detectado: {0}", + "Projects_6255": "Projetos", + "Projects_in_this_build_Colon_0_6355": "Projetos neste build: {0}", + "Properties_with_the_accessor_modifier_are_only_available_when_targeting_ECMAScript_2015_and_higher_18045": "Propriedades com o modificador 'acessador' estão disponíveis somente quando o alvo é ECMAScript 2015 e superior.", + "Property_0_cannot_have_an_initializer_because_it_is_marked_abstract_1267": "A propriedade '{0}' não pode ter um inicializador, pois está marcado como abstrato.", + "Property_0_comes_from_an_index_signature_so_it_must_be_accessed_with_0_4111": "A propriedade '{0}' vem de uma assinatura de índice, portanto, ela precisa ser acessada com ['{0}'].", + "Property_0_does_not_exist_on_type_1_2339": "A propriedade '{0}' não existe no tipo '{1}'.", + "Property_0_does_not_exist_on_type_1_Did_you_mean_2_2551": "A propriedade '{0}' não existe no tipo '{1}'. Você quis dizer '{2}'?", + "Property_0_does_not_exist_on_type_1_Did_you_mean_to_access_the_static_member_2_instead_2576": "A propriedade '{0}' não existe no tipo '{1}'. Você queria acessar o membro estático '{2}'?", + "Property_0_does_not_exist_on_type_1_Do_you_need_to_change_your_target_library_Try_changing_the_lib_c_2550": "A propriedade '{0}' não existe no tipo '{1}'. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para '{2}' ou posterior.", + "Property_0_does_not_exist_on_type_1_Try_changing_the_lib_compiler_option_to_include_dom_2812": "A propriedade '{0}' não existe no tipo '{1}'. Tente alterar a opção de compilador 'lib' para incluir 'dom'.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_a_class_static_block_2817": "A propriedade “{0}” não tem nenhum inicializador e não está definitivamente atribuída no bloco estático de classe.", + "Property_0_has_no_initializer_and_is_not_definitely_assigned_in_the_constructor_2564": "A propriedade '{0}' não tem nenhum inicializador e não está definitivamente atribuída no construtor.", + "Property_0_implicitly_has_type_any_because_its_get_accessor_lacks_a_return_type_annotation_7033": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador get não tem uma anotação de tipo de retorno.", + "Property_0_implicitly_has_type_any_because_its_set_accessor_lacks_a_parameter_type_annotation_7032": "A propriedade '{0}' tem implicitamente o tipo 'any' porque o acessador set não tem uma anotação de tipo de parâmetro.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_get_accessor_may_be_inferred_from_usage_7048": "A propriedade '{0}' implicitamente tem o tipo 'any', mas um tipo melhor para o acessador get pode ser inferido do uso.", + "Property_0_implicitly_has_type_any_but_a_better_type_for_its_set_accessor_may_be_inferred_from_usage_7049": "A propriedade '{0}' implicitamente tem o tipo 'any', mas um tipo melhor para o acessador set pode ser inferido do uso.", + "Property_0_in_type_1_is_not_assignable_to_the_same_property_in_base_type_2_2416": "A propriedade '{0}' no tipo '{1}' não pode ser atribuída à mesma propriedade no tipo base '{2}'.", + "Property_0_in_type_1_is_not_assignable_to_type_2_2603": "A propriedade '{0}' no tipo '{1}' não pode ser atribuída ao tipo '{2}'.", + "Property_0_in_type_1_refers_to_a_different_member_that_cannot_be_accessed_from_within_type_2_18015": "A propriedade '{0}' no tipo '{1}' se refere a um membro diferente que não pode ser acessado por meio do tipo '{2}'.", + "Property_0_is_declared_but_its_value_is_never_read_6138": "A propriedade '{0}' é declarada, mas seu valor nunca é lido.", + "Property_0_is_incompatible_with_index_signature_2530": "A propriedade '{0}' é incompatível com a assinatura de índice.", + "Property_0_is_missing_in_type_1_2324": "A propriedade '{0}' está ausente no tipo '{1}'.", + "Property_0_is_missing_in_type_1_but_required_in_type_2_2741": "A propriedade '{0}' está ausente no tipo '{1}', mas é obrigatória no tipo '{2}'.", + "Property_0_is_not_accessible_outside_class_1_because_it_has_a_private_identifier_18013": "A propriedade '{0}' não é acessível fora da classe '{1}' porque tem um identificador privado.", + "Property_0_is_optional_in_type_1_but_required_in_type_2_2327": "A propriedade '{0}' é opcional no tipo '{1}', mas obrigatória no tipo '{2}'.", + "Property_0_is_private_and_only_accessible_within_class_1_2341": "A propriedade '{0}' é particular e somente é acessível na classe '{1}'.", + "Property_0_is_private_in_type_1_but_not_in_type_2_2325": "A propriedade '{0}' é particular no tipo '{1}', mas não no tipo '{2}'.", + "Property_0_is_protected_and_only_accessible_through_an_instance_of_class_1_This_is_an_instance_of_cl_2446": "A propriedade '{0}' está protegida e só pode ser acessada por meio de uma instância da classe '{1}'. Esta é uma instância da classe '{2}'.", + "Property_0_is_protected_and_only_accessible_within_class_1_and_its_subclasses_2445": "A propriedade '{0}' é protegida e somente é acessível na classe '{1}' e em suas subclasses.", + "Property_0_is_protected_but_type_1_is_not_a_class_derived_from_2_2443": "A propriedade '{0}' é protegida, mas o tipo '{1}' não é uma classe derivada de '{2}'.", + "Property_0_is_protected_in_type_1_but_public_in_type_2_2444": "A propriedade '{0}' é protegida no tipo '{1}', mas pública no tipo '{2}'.", + "Property_0_is_used_before_being_assigned_2565": "A propriedade '{0}' é usada antes de ser atribuída.", + "Property_0_is_used_before_its_initialization_2729": "A propriedade '{0}' é usada antes da inicialização.", + "Property_0_may_not_exist_on_type_1_Did_you_mean_2_2568": "A propriedade pode não existir '{0}' no tipo '{1}'. Você quis dizer '{2}'?", + "Property_0_of_JSX_spread_attribute_is_not_assignable_to_target_property_2606": "A propriedade \"{0}\" do atributo de espalhamento JSX não pode ser atribuída à propriedade de destino.", + "Property_0_of_exported_anonymous_class_type_may_not_be_private_or_protected_4094": "A propriedade '{0}' do tipo de classe anônima exportada pode não ser privada ou protegida.", + "Property_0_of_exported_interface_has_or_is_using_name_1_from_private_module_2_4032": "A propriedade '{0}' da interface exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Property_0_of_exported_interface_has_or_is_using_private_name_1_4033": "A propriedade '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", + "Property_0_of_type_1_is_not_assignable_to_2_index_type_3_2411": "A propriedade '{0}' do tipo '{1}' não pode ser atribuída ao '{2}' tipo de índice '{3}'.", + "Property_0_was_also_declared_here_2733": "A propriedade '{0}' também foi declarada aqui.", + "Property_0_will_overwrite_the_base_property_in_1_If_this_is_intentional_add_an_initializer_Otherwise_2612": "A propriedade '{0}' substituirá a propriedade base em '{1}'. Se isso for intencional, adicione um inicializador. Caso contrário, adicione um modificador 'declare' ou remova a declaração redundante.", + "Property_assignment_expected_1136": "Atribuição de propriedade esperada.", + "Property_destructuring_pattern_expected_1180": "Padrão de desestruturação de propriedade esperado.", + "Property_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9012": "A propriedade deve ter uma anotação de tipo explícita com --isolatedDeclarations.", + "Property_or_signature_expected_1131": "Propriedade ou assinatura esperada.", + "Property_value_can_only_be_string_literal_numeric_literal_true_false_null_object_literal_or_array_li_1328": "O valor da propriedade pode ser somente um literal de cadeia, um literal numérico, 'true', 'false', 'null', literal de objeto ou literal de matriz.", + "Provide_full_support_for_iterables_in_for_of_spread_and_destructuring_when_targeting_ES5_6179": "Fornecer suporte completo para os iteráveis em 'for-of', espalhamento e desestruturação ao direcionar 'ES5'.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_named_4098": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Public_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4099": "O método público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Public_method_0_of_exported_class_has_or_is_using_private_name_1_4100": "O método público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_name_4029": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", + "Public_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4030": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Public_property_0_of_exported_class_has_or_is_using_private_name_1_4031": "A propriedade pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot_be_4095": "O método estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Public_static_method_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4096": "O método estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Public_static_method_0_of_exported_class_has_or_is_using_private_name_1_4097": "O método estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_external_module_2_but_cannot__4026": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeada.", + "Public_static_property_0_of_exported_class_has_or_is_using_name_1_from_private_module_2_4027": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo particular '{2}'.", + "Public_static_property_0_of_exported_class_has_or_is_using_private_name_1_4028": "A propriedade estática pública '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", + "Qualified_name_0_is_not_allowed_without_a_leading_param_object_1_8032": "O nome qualificado '{0}' não é permitido sem um '@param {object} {1}' à esquerda.", + "Raise_an_error_when_a_function_parameter_isn_t_read_6676": "Gerar um erro quando um parâmetro de função não for lido.", + "Raise_error_on_expressions_and_declarations_with_an_implied_any_type_6052": "Gerar erro em expressões e declarações com um tipo 'any' implícito.", + "Raise_error_on_this_expressions_with_an_implied_any_type_6115": "Gerar erro em expressões 'this' com um tipo 'any' implícito.", + "Range_out_of_order_in_character_class_1517": "Intervalo fora de ordem na classe de caracteres.", + "Re_exporting_a_type_when_0_is_enabled_requires_using_export_type_1205": "Exportar novamente um tipo quando '{0}' está habilitado requer o uso de 'tipo de exportação'.", + "React_components_cannot_include_JSX_namespace_names_2639": "Os componentes react não podem incluir nomes de namespace JSX", + "Recommended_Options_6294": "Opções Recomendadas", + "Redirect_output_structure_to_the_directory_6006": "Redirecione a estrutura de saída para o diretório.", + "Reduce_the_number_of_projects_loaded_automatically_by_TypeScript_6617": "Reduzir o número de projetos carregados automaticamente pelo TypeScript.", + "Referenced_project_0_may_not_disable_emit_6310": "O projeto referenciado '{0}' pode não desabilitar a emissão.", + "Referenced_project_0_must_have_setting_composite_Colon_true_6306": "O projeto referenciado '{0}' deve ter a configuração de \"composite\": true.", + "Referenced_via_0_from_file_1_1400": "Referenciado via '{0}' do arquivo '{1}'", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Considere adicionar uma extensão ao caminho de importação.", + "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835": "Os caminhos de importação relativos precisam de extensões de arquivo explícitas nas importações do ECMAScript quando '--moduleResolution' for 'node16' ou 'nodenext'. Você quis dizer '{0}'?", + "Remove_a_list_of_directories_from_the_watch_process_6628": "Remova uma lista de diretórios do processo de inspeção.", + "Remove_a_list_of_files_from_the_watch_mode_s_processing_6629": "Remover uma lista de arquivos do processamento do modo de inspeção.", + "Remove_all_unnecessary_override_modifiers_95163": "Remover todos os modificadores 'override' desnecessários", + "Remove_all_unnecessary_uses_of_await_95087": "Remover todos os usos desnecessários de 'await'", + "Remove_all_unreachable_code_95051": "Remover todo o código inacessível", + "Remove_all_unused_labels_95054": "Remover todos os rótulos não utilizados", + "Remove_braces_from_all_arrow_function_bodies_with_relevant_issues_95115": "Remover as chaves de todos os corpos de função de seta com problemas relevantes", + "Remove_braces_from_arrow_function_95060": "Remover chaves da função de seta", + "Remove_braces_from_arrow_function_body_95112": "Remover as chaves do corpo de função de seta", + "Remove_import_from_0_90005": "Remover importação de '{0}'", + "Remove_override_modifier_95161": "Remover o modificador 'override'", + "Remove_parentheses_95126": "Remover os parênteses", + "Remove_template_tag_90011": "Remover marca de modelo", + "Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server_6618": "Remover o limite de 20MB no tamanho total do código-fonte para arquivos JavaScript no servidor de linguagem TypeScript.", + "Remove_type_from_import_declaration_from_0_90055": "Remover 'type' da declaração de importação \"{0}\"", + "Remove_type_from_import_of_0_from_1_90056": "Remover 'type' da importação de '{0}' de \"{1}\"", + "Remove_type_parameters_90012": "Remover parâmetros de tipo", + "Remove_unnecessary_await_95086": "Remover 'await' desnecessário", + "Remove_unreachable_code_95050": "Remover código inacessível", + "Remove_unused_declaration_for_Colon_0_90004": "Remover declaração não usada para: '{0}'", + "Remove_unused_declarations_for_Colon_0_90041": "Remova as declarações não usadas de: '{0}'", + "Remove_unused_destructuring_declaration_90039": "Remova a declaração de desestruturação não usada", + "Remove_unused_label_95053": "Remover rótulo não utilizado", + "Remove_variable_statement_90010": "Remover instrução de variável", + "Rename_param_tag_name_0_to_1_95173": "Renomear o nome da marca '@param' '{0}' como '{1}'", + "Replace_0_with_Promise_1_90036": "Substituir '{0}' por 'Promise<{1}>'", + "Replace_all_unused_infer_with_unknown_90031": "Substituir todos os 'infer' não usados por 'unknown'", + "Replace_import_with_0_95015": "Substitua a importação com '{0}'.", + "Replace_infer_0_with_unknown_90030": "Substituir 'infer {0}' por 'unknown'", + "Report_error_when_not_all_code_paths_in_function_return_a_value_6075": "Relate erro quando nem todos os caminhos de código na função retornarem um valor.", + "Report_errors_for_fallthrough_cases_in_switch_statement_6076": "Relate erros para casos de fallthrough na instrução switch.", + "Report_errors_in_js_files_8019": "Relatar erros em arquivos .js.", + "Report_errors_on_unused_locals_6134": "Relatar erros nos locais não utilizados.", + "Report_errors_on_unused_parameters_6135": "Relatar erros nos parâmetros não utilizados.", + "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719": "Exigir anotação suficiente em exportações para que outras ferramentas possam gerar arquivos de declaração trivialmente.", + "Require_undeclared_properties_from_index_signatures_to_use_element_accesses_6717": "Exigir que as propriedades não declaradas de assinaturas de índice usem acessos de elemento.", + "Required_type_parameters_may_not_follow_optional_type_parameters_2706": "Os parâmetros de tipo necessários podem não seguir os parâmetros de tipo opcionais.", + "Resolution_for_module_0_was_found_in_cache_from_location_1_6147": "A resolução para o módulo '{0}' foi encontrada no cache do local '{1}'.", + "Resolution_for_type_reference_directive_0_was_found_in_cache_from_location_1_6241": "A resolução para a diretiva de referência de tipo '{0}' foi encontrada no cache a partir do local '{1}'.", + "Resolution_of_non_relative_name_failed_trying_with_modern_Node_resolution_features_disabled_to_see_i_6277": "Falha na resolução de nome não relativo; tentando com recursos modernos de resolução de Nó desabilitados para ver se a biblioteca npm precisa de atualização de configuração.", + "Resolution_of_non_relative_name_failed_trying_with_moduleResolution_bundler_to_see_if_project_may_ne_6279": "Falha na resolução de nome não relativo; tentando com '--moduleResolution bundler' para ver se o projeto pode precisar de atualização de configuração.", + "Resolve_keyof_to_string_valued_property_names_only_no_numbers_or_symbols_6195": "Resolva 'keyof' somente para nomes de propriedades com valores de cadeia de caracteres (sem números nem símbolos).", + "Resolved_under_condition_0_6414": "Resolvido sob a condição '{0}'.", + "Resolving_in_0_mode_with_conditions_1_6402": "Resolvendo no modo {0} com condições {1}.", + "Resolving_module_0_from_1_6086": "======== Resolvendo módulo '{0}' de '{1}'. ========", + "Resolving_module_name_0_relative_to_base_url_1_2_6094": "Resolvendo nome de módulo '{0}' relativo à URL base '{1}' - '{2}'.", + "Resolving_real_path_for_0_result_1_6130": "Resolvendo o caminho real de '{0}', resultado '{1}'.", + "Resolving_type_reference_directive_0_containing_file_1_6242": "======== Resolvendo a diretiva de tipo de referência '{0}', contendo o arquivo '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_2_6116": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz '{2}'. ========", + "Resolving_type_reference_directive_0_containing_file_1_root_directory_not_set_6123": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido '{1}', diretório raiz não configurado. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_1_6127": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz '{1}'. ========", + "Resolving_type_reference_directive_0_containing_file_not_set_root_directory_not_set_6128": "======== Resolvendo diretiva de referência de tipo '{0}', arquivo contido não configurado, diretório raiz não configurado. ========", + "Resolving_type_reference_directive_for_program_that_specifies_custom_typeRoots_skipping_lookup_in_no_6265": "Resolvendo diretiva de referência de tipo para o programa que especifica typeRoots personalizado, ignorando a pesquisa na pasta 'node_modules'.", + "Resolving_with_primary_search_path_0_6121": "Resolvendo com caminho de pesquisa primário '{0}'.", + "Rest_parameter_0_implicitly_has_an_any_type_7019": "O parâmetro rest '{0}' implicitamente tem um tipo 'any[]'.", + "Rest_parameter_0_implicitly_has_an_any_type_but_a_better_type_may_be_inferred_from_usage_7047": "O parâmetro REST '{0}' implicitamente tem um tipo 'any[]', mas um tipo melhor pode ser inferido do uso.", + "Rest_types_may_only_be_created_from_object_types_2700": "Os tipos de rest podem ser criado somente de tipos de objeto.", + "Return_type_annotation_circularly_references_itself_2577": "A anotação de tipo de retorno faz referência circular a si mesma.", + "Return_type_must_be_inferred_from_a_function_95149": "O tipo de retorno precisa ser inferido de uma função", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4046": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_call_signature_from_exported_interface_has_or_is_using_private_name_0_4047": "O tipo de retorno da assinatura de chamada da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_name_0_from_private_mod_4044": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_0_4045": "O tipo de retorno da assinatura de construtor da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class_2409": "O tipo de retorno da assinatura de construtor deve ser atribuível ao tipo de instância da classe.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_external_module_1_but_cannot_be_named_4058": "O tipo de retorno da função exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", + "Return_type_of_exported_function_has_or_is_using_name_0_from_private_module_1_4059": "O tipo de retorno da função exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_exported_function_has_or_is_using_private_name_0_4060": "O tipo de retorno da função exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4048": "O tipo de retorno da assinatura de índice da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_index_signature_from_exported_interface_has_or_is_using_private_name_0_4049": "O tipo de retorno da assinatura de índice da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_name_0_from_private_module_1_4056": "O tipo de retorno do método da interface exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_method_from_exported_interface_has_or_is_using_private_name_0_4057": "O tipo de retorno do método da interface exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_external_module_2_but_4041": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo {2}, mas não pode ser nomeado.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_2_4042": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Return_type_of_public_getter_0_from_exported_class_has_or_is_using_private_name_1_4043": "O tipo de retorno do getter público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_external_module_1_but_c_4053": "O tipo de retorno do método público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4054": "O tipo de retorno do método público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_public_method_from_exported_class_has_or_is_using_private_name_0_4055": "O tipo de retorno do método público da classe exportada tem ou está usando o nome particular '{0}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_external_modul_4038": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo externo '{2}', mas não pode ser nomeado.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_name_1_from_private_module_4039": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome '{1}' do módulo privado '{2}'.", + "Return_type_of_public_static_getter_0_from_exported_class_has_or_is_using_private_name_1_4040": "O tipo de retorno do getter estático público '{0}' da classe exportada tem ou está usando o nome privado '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_external_module__4050": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo externo {1}, mas não pode ser nomeado.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_name_0_from_private_module_1_4051": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome '{0}' do módulo particular '{1}'.", + "Return_type_of_public_static_method_from_exported_class_has_or_is_using_private_name_0_4052": "O tipo de retorno do método estático público da classe exportada tem ou está usando o nome particular '{0}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_not_resolved_6395": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', não foi resolvido.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6393": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.", + "Reusing_resolution_of_module_0_from_1_found_in_cache_from_location_2_it_was_successfully_resolved_to_6394": "Reutilizando a resolução do módulo '{0}' de '{1}' encontrado no cache a partir da localização '{2}', foi resolvido com sucesso para '{3}' com ID do Pacote '{4}'.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_not_resolved_6389": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, não foi resolvido.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_6183": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.", + "Reusing_resolution_of_module_0_from_1_of_old_program_it_was_successfully_resolved_to_2_with_Package__6184": "Reutilizando a resolução do módulo '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com a ID do pacote '{3}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_not_re_6398": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', não foi resolvido.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6396": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso para '{3}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_found_in_cache_from_location_2_it_was_succes_6397": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' encontrado no cache de localização '{2}', foi resolvido com sucesso '{3}' com ID do Pacote '{4}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_not_resolved_6392": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, não foi resolvido.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6390": "Reutilizando a resolução do tipo diretiva de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}'.", + "Reusing_resolution_of_type_reference_directive_0_from_1_of_old_program_it_was_successfully_resolved__6391": "Reutilizando a resolução do tipo diretriz de referência '{0}' de '{1}' do antigo programa, foi resolvido com sucesso para '{2}' com ID do Pacote '{3}'.", + "Rewrite_all_as_indexed_access_types_95034": "Reescrever tudo como tipos de acesso indexados", + "Rewrite_as_the_indexed_access_type_0_90026": "Reescrever como o tipo de acesso indexado '{0}'", + "Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_i_6421": "Reescreva as extensões de arquivo \".ts\", \".tsx\", \".mts\" e \".cts\" em caminhos de importação relativos para seu equivalente em JavaScript nos arquivos de saída.", + "Right_operand_of_is_unreachable_because_the_left_operand_is_never_nullish_2869": "Operando direito de ?? está inacessível porque o operando esquerdo nunca é nulo.", + "Root_directory_cannot_be_determined_skipping_primary_search_paths_6122": "Diretório raiz não pode ser determinado, ignorando caminhos de pesquisa primários.", + "Root_file_specified_for_compilation_1427": "Arquivo raiz especificado para compilação", + "STRATEGY_6039": "ESTRATÉGIA", + "Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects_6642": "Salvar arquivos .tsbuildinfo para permitir a compilação incremental de projetos.", + "Saw_non_matching_condition_0_6405": "Viu condição de não correspondência '{0}'.", + "Scoped_package_detected_looking_in_0_6182": "Pacote com escopo detectado, procurando no '{0}'", + "Searching_all_ancestor_node_modules_directories_for_fallback_extensions_Colon_0_6418": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões de fallback: {0}.", + "Searching_all_ancestor_node_modules_directories_for_preferred_extensions_Colon_0_6417": "Pesquisando todos os diretórios node_modules ancestrais em busca de extensões preferenciais: {0}.", + "See_also_https_Colon_Slash_Slashaka_ms_Slashtsconfig_Slashmodule_6286": "Confira também https://aka.ms/tsconfig/module", + "Selection_is_not_a_valid_statement_or_statements_95155": "A seleção não é uma instrução ou instruções válidas", + "Selection_is_not_a_valid_type_node_95133": "A seleção não é um nó de tipo válido", + "Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declaratio_6705": "Definir a versão do idioma do JavaScript para o JavaScript emitido e incluir as declarações de biblioteca compatíveis.", + "Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit_6654": "Definir o idioma das mensagens do TypeScript. Isso não afeta a emissão.", + "Set_the_module_option_in_your_configuration_file_to_0_95099": "Defina a opção 'module' no arquivo de configuração para '{0}'", + "Set_the_newline_character_for_emitting_files_6659": "Definir o caractere de nova linha para a emissão de arquivos.", + "Set_the_target_option_in_your_configuration_file_to_0_95098": "Defina a opção 'target' no arquivo de configuração para '{0}'", + "Setters_cannot_return_a_value_2408": "Setters não podem retornar um valor.", + "Show_all_compiler_options_6169": "Mostrar todas as opções do compilador.", + "Show_diagnostic_information_6149": "Mostras as informações de diagnóstico.", + "Show_verbose_diagnostic_information_6150": "Mostras as informações detalhadas de diagnóstico.", + "Show_what_would_be_built_or_deleted_if_specified_with_clean_6367": "Mostrar o que seria compilado (ou excluído, se especificado com '--clean')", + "Signature_0_must_be_a_type_predicate_1224": "A assinatura '{0}' deve ser um predicado de tipo.", + "Signature_declarations_can_only_be_used_in_TypeScript_files_8017": "As declarações de assinatura só podem ser usadas em arquivos TypeScript.", + "Skip_building_downstream_projects_on_error_in_upstream_project_6640": "Ignorar a criação de projetos downstream em caso de erro no projeto upstream.", + "Skip_type_checking_all_d_ts_files_6693": "Ignorar verificação de tipo de todos os arquivos .d.ts.", + "Skip_type_checking_d_ts_files_that_are_included_with_TypeScript_6692": "Ignorar verificação de tipo de arquivos .d.ts que estão incluídos com TypeScript.", + "Skip_type_checking_of_declaration_files_6012": "Ignorar a verificação de tipo dos arquivos de declaração.", + "Skipping_build_of_project_0_because_its_dependency_1_has_errors_6362": "Ignorando o build do projeto '{0}' porque a dependência '{1}' tem erros", + "Skipping_build_of_project_0_because_its_dependency_1_was_not_built_6382": "Ignorando o build do projeto '{0}' porque a dependência '{1}' não foi criada", + "Skipping_module_0_that_looks_like_an_absolute_URI_target_file_types_Colon_1_6164": "Ignorando o módulo '{0}' que se parece com um URI absoluto, tipos de arquivo de destino: {1}.", + "Source_from_referenced_project_0_included_because_1_specified_1414": "Origem do projeto referenciado '{0}' incluída porque '{1}' está especificado", + "Source_from_referenced_project_0_included_because_module_is_specified_as_none_1415": "Origem do projeto referenciado '{0}' incluída porque '--module' está especificado como 'none'", + "Source_has_0_element_s_but_target_allows_only_1_2619": "A origem tem {0} elementos, mas o destino permite somente {1}.", + "Source_has_0_element_s_but_target_requires_1_2618": "A origem tem {0} elementos, mas o destino exige {1}.", + "Source_provides_no_match_for_required_element_at_position_0_in_target_2623": "A fonte não fornece nenhuma correspondência para o elemento necessário na posição {0} no destino.", + "Source_provides_no_match_for_variadic_element_at_position_0_in_target_2624": "A fonte não fornece nenhuma correspondência para o elemento variádico na posição {0} no destino.", + "Specify_ECMAScript_target_version_6015": "Especifique a versão de destino do ECMAScript.", + "Specify_JSX_code_generation_6080": "Especifique a geração do código JSX.", + "Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designa_6679": "Especificar um arquivo que agrupa todas as saídas em um arquivo JavaScript. Se 'declaração' for true, também designará um arquivo que incluirá todas as saídas .d.ts.", + "Specify_a_list_of_glob_patterns_that_match_files_to_be_included_in_compilation_6641": "Especificar uma lista de padrões glob que correspondam aos arquivos a serem incluídos na compilação.", + "Specify_a_list_of_language_service_plugins_to_include_6681": "Especificar uma lista de plug-ins de serviço de linguagem a incluir.", + "Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment_6651": "Especificar um conjunto de arquivos de declaração de biblioteca empacotados que descreva o ambiente de tempo de runtime de destino.", + "Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations_6680": "Especificar um conjunto de entradas que remapeiem importações para locais de pesquisa adicionais.", + "Specify_an_array_of_objects_that_specify_paths_for_projects_Used_in_project_references_6687": "Especifique uma matriz de objetos que especificam caminhos para projetos. Usado em referências de projeto.", + "Specify_an_output_folder_for_all_emitted_files_6678": "Especificar uma pasta de saída para todos os arquivos emitidos.", + "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718": "Especificar o comportamento de emissão/verificação para importações que são usadas somente para tipos.", + "Specify_file_to_store_incremental_compilation_information_6380": "Especificar arquivo para armazenar informações de compilação incremental", + "Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier_6658": "Especifique como o TypeScript procura um arquivo de um determinado especificador de módulo.", + "Specify_how_directories_are_watched_on_systems_that_lack_recursive_file_watching_functionality_6714": "Especificar como os diretórios são observados nos sistemas que não têm a funcionalidade recursiva de inspeção de arquivo.", + "Specify_how_the_TypeScript_watch_mode_works_6715": "Especifique como funciona o modo de inspeção TypeScript.", + "Specify_library_files_to_be_included_in_the_compilation_6079": "Especifique os arquivos de biblioteca a serem incluídos na compilação.", + "Specify_module_code_generation_6016": "Especifique a geração do código do módulo.", + "Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Ast_6649": "Especificar o especificador de módulo usado para importar as funções de fábrica JSX ao usar 'jsx: react-jsx*'.", + "Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types_6710": "Especificar várias pastas que agem como './node_modules/@types '.", + "Specify_one_or_more_path_or_node_module_references_to_base_configuration_files_from_which_settings_a_6633": "Especificar uma ou mais referências de módulo ou nó para os arquivos de configuração base dos quais as configurações são herdadas.", + "Specify_options_for_automatic_acquisition_of_declaration_files_6709": "Especifique opções para aquisição automática de arquivos de declaração.", + "Specify_strategy_for_creating_a_polling_watch_when_it_fails_to_create_using_file_system_events_Colon_6227": "Especifique a estratégia para criar uma inspeção de sondagem quando não conseguir criar usando eventos do sistema de arquivos: 'FixedInterval' (padrão), 'PriorityInterval', 'DynamicPriority', 'FixedChunkSize'.", + "Specify_strategy_for_watching_directory_on_platforms_that_don_t_support_recursive_watching_natively__6226": "Especifique a estratégia para observar ao diretório em plataformas que não têm suporte à observação recursiva nativamente: 'UseFsEvents' (padrão), 'FixedPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling'.", + "Specify_strategy_for_watching_file_Colon_FixedPollingInterval_default_PriorityPollingInterval_Dynami_6225": "Especifique a estratégia para observar ao arquivo: 'FixedPollingInterval' (padrão), 'PriorityPollingInterval', 'DynamicPriorityPolling', 'FixedChunkSizePolling', 'UseFsEvents', 'UseFsEventsOnParentDirectory'.", + "Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragme_6648": "Especifique a referência do fragmento JSX usada para fragmentos ao direcionar o React JSX emit, por exemplo, 'React.Fragment' ou 'Fragment'.", + "Specify_the_JSX_factory_function_to_use_when_targeting_react_JSX_emit_e_g_React_createElement_or_h_6146": "Especifique a função de fábrica JSX a ser usada ao direcionar a emissão 'react' do JSX, por ex., 'React.createElement' ou 'h'.", + "Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h_6647": "Especifique a função de fábrica JSX usada ao direcionar o React JSX emit, por exemplo, 'React.createElement' ou 'h'.", + "Specify_the_JSX_fragment_factory_function_to_use_when_targeting_react_JSX_emit_with_jsxFactory_compi_18034": "Especifique a função de alocador do fragmento JSX a ser usada no direcionamento de uma emissão de JSX 'react' com a opção do compilador 'jsxFactory' especificada, por exemplo, 'Fragment'.", + "Specify_the_base_directory_to_resolve_non_relative_module_names_6607": "Especificar o diretório base para resolver nomes de módulos não relativos.", + "Specify_the_end_of_line_sequence_to_be_used_when_emitting_files_Colon_CRLF_dos_or_LF_unix_6060": "Especifique o fim da sequência de linha a ser usado ao emitir arquivos: 'CRLF' (dos) ou 'LF' (unix).", + "Specify_the_location_where_debugger_should_locate_TypeScript_files_instead_of_source_locations_6004": "Especifique o local onde o depurador deve localizar arquivos TypeScript em vez de locais de origem.", + "Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations_6655": "Especifique o local onde o depurador deve localizar arquivos de mapa em vez de locais gerados.", + "Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicabl_6656": "Especifique a profundidade máxima da pasta usada para verificar os arquivos JavaScript de 'node_modules'. Aplicável apenas com 'allowJs'.", + "Specify_the_module_specifier_to_be_used_to_import_the_jsx_and_jsxs_factory_functions_from_eg_react_6238": "Especifique o especificador do módulo a ser utilizado para importar as funções 'jsx' e 'jsxs' de fábrica, por exemplo, react", + "Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit_6686": "Especifique o objeto invocado para 'createElement'. Isso se aplica apenas ao direcionar a emissão JSX 'react'.", + "Specify_the_output_directory_for_generated_declaration_files_6613": "Especifique o diretório de saída para os arquivos de declaração gerados.", + "Specify_the_path_to_tsbuildinfo_incremental_compilation_file_6707": "Especifique o caminho para o arquivo de compilação incremental .tsbuildinfo.", + "Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir_6058": "Especifique o diretório raiz de arquivos de entrada. Use para controlar a estrutura do diretório de saída com --outDir.", + "Specify_the_root_folder_within_your_source_files_6690": "Especifique a pasta raiz em seus arquivos de origem.", + "Specify_the_root_path_for_debuggers_to_find_the_reference_source_code_6695": "Especifique o caminho raiz para que os depuradores localizem o código-fonte de referência.", + "Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file_6711": "Especifique os nomes dos pacotes de tipo a serem incluídos sem serem referenciados em um arquivo de origem.", + "Specify_what_JSX_code_is_generated_6646": "Especifique qual código JSX é gerado.", + "Specify_what_approach_the_watcher_should_use_if_the_system_runs_out_of_native_file_watchers_6634": "Especificar qual abordagem a inspeção deverá usar se o sistema ficar sem os observadores de arquivo nativos.", + "Specify_what_module_code_is_generated_6657": "Especifique qual código do módulo é gerado.", + "Split_all_invalid_type_only_imports_1367": "Dividir todas as importações somente de tipo inválidas", + "Split_into_two_separate_import_declarations_1366": "Dividir em duas declarações de importação separadas", + "Spread_operator_in_new_expressions_is_only_available_when_targeting_ECMAScript_5_and_higher_2472": "O operador de espalhamento só está disponível em expressões 'new' no direcionamento a ECMAScript 5 e superior.", + "Spread_types_may_only_be_created_from_object_types_2698": "Os tipos de espalhamento podem ser criados apenas de tipos de objeto.", + "Starting_compilation_in_watch_mode_6031": "Iniciando compilação no modo de inspeção...", + "Statement_expected_1129": "Instrução esperada.", + "Statements_are_not_allowed_in_ambient_contexts_1036": "Instruções não são permitidas em contextos de ambiente.", + "Static_members_cannot_reference_class_type_parameters_2302": "Membros estáticos não podem fazer referência a parâmetros de tipo de classe.", + "Static_property_0_conflicts_with_built_in_property_Function_0_of_constructor_function_1_2699": "Conflitos de propriedade estática '{0}' com propriedade interna 'Function.{0}' da função de construtor '{1}'.", + "Stricter_Typechecking_Options_6292": "Opções de Verificação de Tipo Mais Estritas", + "String_literal_expected_1141": "Literal de cadeia de caracteres esperado.", + "String_literal_import_and_export_names_are_not_supported_when_the_module_flag_is_set_to_es2015_or_es_18057": "Não há suporte para nomes de importação e exportação de literal de cadeia de caracteres quando o sinalizador '--module' está definido como 'es2015' ou 'es2020'.", + "String_literal_with_double_quotes_expected_1327": "Literal de cadeia com aspas duplas é esperado.", + "Style_Options_6293": "Opções de Estilo", + "Stylize_errors_and_messages_using_color_and_context_experimental_6073": "Estilizar erros e mensagens usando cor e contexto (experimental).", + "Subpattern_flags_must_be_present_when_there_is_a_minus_sign_1504": "Sinalizadores de subpadrão devem estar presentes quando há um sinal de subtração.", + "Subsequent_property_declarations_must_have_the_same_type_Property_0_must_be_of_type_1_but_here_has_t_2717": "Declarações de propriedade subsequentes devem ter o mesmo tipo. A propriedade '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", + "Subsequent_variable_declarations_must_have_the_same_type_Variable_0_must_be_of_type_1_but_here_has_t_2403": "Declarações de variável subsequentes devem ter o mesmo tipo. A variável '{0}' deve ser do tipo '{1}', mas aqui tem o tipo '{2}'.", + "Substitution_0_for_pattern_1_has_incorrect_type_expected_string_got_2_5064": "A substituição '{0}' para o padrão '{1}' tem um tipo incorreto, 'string' esperada, obteve '{2}'.", + "Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character_5062": "A substituição '{0}' no padrão '{1}' pode ter no máximo um caractere '*'.", + "Substitutions_for_pattern_0_should_be_an_array_5063": "As substituições para o padrão '{0}' devem ser uma matriz.", + "Substitutions_for_pattern_0_shouldn_t_be_an_empty_array_5066": "Substituições para o padrão '{0}' não devem ser uma matriz vazia.", + "Successfully_created_a_tsconfig_json_file_6071": "Arquivo tsconfig.json criado com êxito.", + "Super_calls_are_not_permitted_outside_constructors_or_in_nested_functions_inside_constructors_2337": "As chamadas super não são permitidas fora dos construtores ou em funções aninhadas dentro dos construtores.", + "Suppress_excess_property_checks_for_object_literals_6072": "Verificações de propriedade de excesso de compactação para literais de objeto.", + "Suppress_noImplicitAny_errors_for_indexing_objects_lacking_index_signatures_6055": "Suprimir erros de noImplicitAny para objetos de indexação sem assinaturas de índice.", + "Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures_6703": "Suprimir erros 'noImplicitAny' ao indexar objetos que não têm assinaturas de índice.", + "Switch_each_misused_0_to_1_95138": "Mude cada '{0}' usado incorretamente para '{1}'", + "Synchronously_call_callbacks_and_update_the_state_of_directory_watchers_on_platforms_that_don_t_supp_6704": "Chame sincronicamente retornos de chamadas e atualize o estado de observadores de diretório em plataformas que não têm suporte à observação recursiva nativamente.", + "Syntax_Colon_0_6023": "Sintaxe: {0}", + "Tag_0_expects_at_least_1_arguments_but_the_JSX_factory_2_provides_at_most_3_6229": "A tag '{0}' espera no mínimo '{1}' argumentos, mas o alocador JSX '{2}' fornece no máximo '{3}'.", + "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358": "Expressões de modelo marcado não são permitidas em uma cadeia opcional.", + "Target_allows_only_0_element_s_but_source_may_have_more_2621": "O destino permite apenas {0} elementos, mas a origem pode ter mais.", + "Target_requires_0_element_s_but_source_may_have_fewer_2620": "O destino exige {0} elementos, mas a origem pode ter menos.", + "Target_signature_provides_too_few_arguments_Expected_0_or_more_but_got_1_2849": "A assinatura de destino fornece poucos argumentos. Esperava {0} ou mais, mas obteve {1}.", + "The_0_modifier_can_only_be_used_in_TypeScript_files_8009": "O modificador '{0}' só pode ser usado em arquivos TypeScript.", + "The_0_operator_cannot_be_applied_to_type_symbol_2469": "O operador '{0}' não pode ser aplicado ao tipo 'symbol'.", + "The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead_2447": "O operador '{0}' não é permitido para tipos boolianos. Considere usar '{1}'.", + "The_0_property_of_an_async_iterator_must_be_a_method_2768": "A propriedade '{0}' de um iterador assíncrono deve ser um método.", + "The_0_property_of_an_iterator_must_be_a_method_2767": "A propriedade '{0}' de um iterador deve ser um método.", + "The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead_2696": "O tipo 'Objeto' pode ser atribuído para muito poucos outros tipos. Você desejava usar o tipo 'qualquer' ao invés disso?", + "The_Unicode_u_flag_and_the_Unicode_Sets_v_flag_cannot_be_set_simultaneously_1502": "O sinalizador Unicode (u) e o sinalizador Conjuntos Unicode (v) não podem ser definidos simultaneamente.", + "The_arguments_object_cannot_be_referenced_in_an_arrow_function_in_ES5_Consider_using_a_standard_func_2496": "O objeto 'arguments' não pode ser referenciado em uma função de seta em ES5. Considere usar uma expressão de função padrão.", + "The_arguments_object_cannot_be_referenced_in_an_async_function_or_method_in_ES5_Consider_using_a_sta_2522": "O objeto 'arguments' não pode ser referenciado em uma função assíncrona ou o método no ES5. Considere usar uma função ou um método padrão.", + "The_body_of_an_if_statement_cannot_be_the_empty_statement_1313": "O corpo de uma instrução 'if' não pode ser uma instrução vazia.", + "The_call_would_have_succeeded_against_this_implementation_but_implementation_signatures_of_overloads_2793": "A chamada teria sido bem-sucedida nesta implementação, mas as assinaturas de implementação de sobrecargas não estão visíveis externamente.", + "The_character_set_of_the_input_files_6163": "O conjunto de caracteres dos arquivos de entrada.", + "The_containing_arrow_function_captures_the_global_value_of_this_7041": "A função de seta contida captura o valor global de 'this'.", + "The_containing_function_or_module_body_is_too_large_for_control_flow_analysis_2563": "O corpo da função ou do módulo contido é muito grande para a análise de fluxo de controle.", + "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309": "O arquivo atual é um módulo CommonJS e não pode usar 'await' no nível superior.", + "The_current_file_is_a_CommonJS_module_whose_imports_will_produce_require_calls_however_the_reference_1479": "O arquivo atual é um módulo CommonJS cujas importações produzirão chamadas 'require'; no entanto, o arquivo referenciado é um módulo ECMAScript e não pode ser importado com 'require'. Considere escrever uma chamada 'import(\"{0}\")' dinâmica em vez disso.", + "The_current_host_does_not_support_the_0_option_5001": "O host atual não dá suporte à opção '{0}'.", + "The_declaration_of_0_that_you_probably_intended_to_use_is_defined_here_18018": "A declaração de '{0}' que você provavelmente pretende usar é definida aqui", + "The_declaration_was_marked_as_deprecated_here_2798": "A declaração foi marcada como preterida aqui.", + "The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1_6500": "O tipo esperado vem da propriedade '{0}', que é declarada aqui no tipo '{1}'", + "The_expected_type_comes_from_the_return_type_of_this_signature_6502": "O tipo esperado vem do tipo de retorno dessa assinatura.", + "The_expected_type_comes_from_this_index_signature_6501": "O tipo esperado vem dessa assinatura de índice.", + "The_expression_of_an_export_assignment_must_be_an_identifier_or_qualified_name_in_an_ambient_context_2714": "A expressão de uma atribuição de exportação deve ser um identificador ou nome qualificado em um contexto de ambiente.", + "The_file_is_in_the_program_because_Colon_1430": "O arquivo está no programa porque:", + "The_files_list_in_config_file_0_is_empty_18002": "A lista de 'arquivos' no arquivo de configuração '{0}' está vazia.", + "The_first_export_default_is_here_2752": "O primeiro padrão de exportação está aqui.", + "The_first_parameter_of_the_then_method_of_a_promise_must_be_a_callback_1060": "O primeiro parâmetro do método 'then' de uma promessa deve ser um retorno de chamada.", + "The_global_type_JSX_0_may_not_have_more_than_one_property_2608": "O tipo global 'JSX.{0}' não pode ter mais de uma propriedade.", + "The_implementation_signature_is_declared_here_2750": "A assinatura de implementação é declarada aqui.", + "The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output_1470": "A meta da propriedade 'import.meta' não é permitida em arquivos que serão compilados na saída do CommonJS.", + "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343": "A meta-propriedade “import.meta” só é permitida quando a opção “--module” for “es2020”, “es2022”, “esnext”, “system”, “node16”, “node18”, “node20” ou “nodenext”.", + "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_a_2742": "O tipo inferido de '{0}' não pode ser nomeado sem uma referência a '{1}'. Isso provavelmente não é portátil. Uma anotação de tipo é necessária.", + "The_inferred_type_of_0_references_a_type_with_a_cyclic_structure_which_cannot_be_trivially_serialize_5088": "O tipo inferido '{0}' faz referência a um tipo com uma estrutura cíclica que não pode ser serializada trivialmente. Uma anotação de tipo é necessária.", + "The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary_2527": "O tipo inferido de '{0}' faz referência a um tipo '{1}' inacessível. Uma anotação de tipo é necessária.", + "The_inferred_type_of_this_node_exceeds_the_maximum_length_the_compiler_will_serialize_An_explicit_ty_7056": "O tipo inferido deste nó excede o tamanho máximo que o compilador serializará. Uma anotação de tipo explícita é necessária.", + "The_initializer_of_a_using_declaration_must_be_either_an_object_with_a_Symbol_dispose_method_or_be_n_2850": "O inicializador de uma declaração 'using' deve ser um objeto com um método '[Symbol.dispose]()' ou ser 'null' ou 'undefined'.", + "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851": "O inicializador de uma declaração 'await using' deve ser um objeto com um método '[Symbol.asyncDispose]()' ou '[Symbol.dispose]5D;()' ou ser 'null' ou 'undefined'.", + "The_intersection_0_was_reduced_to_never_because_property_1_exists_in_multiple_constituents_and_is_pr_18032": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' existe em vários constituintes e é privada em alguns.", + "The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituent_18031": "A interseção '{0}' foi reduzida para 'never' porque a propriedade '{1}' tem tipos conflitantes em alguns constituintes.", + "The_intrinsic_keyword_can_only_be_used_to_declare_compiler_provided_intrinsic_types_2795": "A palavra-chave 'intrinsic' só pode ser usada para declarar tipos intrínsecos fornecidos pelo compilador.", + "The_jsxFragmentFactory_compiler_option_must_be_provided_to_use_JSX_fragments_with_the_jsxFactory_com_17016": "A opção do compilador 'jsxFragmentFactory' precisa ser fornecida para que se possa usar fragmentos JSX com a opção do compilador 'jsxFactory'.", + "The_last_overload_gave_the_following_error_2770": "A última sobrecarga gerou o seguinte erro.", + "The_last_overload_is_declared_here_2771": "A última sobrecarga é declarada aqui.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_destructuring_pattern_2491": "O lado esquerdo de uma instrução 'for...in' não pode ser um padrão de desestruturação.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration_1493": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration_1494": "O lado esquerdo de uma instrução 'for...in' não pode ser uma declaração 'await using'.", + "The_left_hand_side_of_a_for_in_statement_cannot_use_a_type_annotation_2404": "O lado esquerdo de uma instrução 'for...in' não pode usar uma anotação de tipo.", + "The_left_hand_side_of_a_for_in_statement_may_not_be_an_optional_property_access_2780": "O lado esquerdo de uma instrução 'for...in' pode não ser um acesso opcional de propriedade.", + "The_left_hand_side_of_a_for_in_statement_must_be_a_variable_or_a_property_access_2406": "O lado esquerdo de uma instrução 'for...in' deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_a_for_in_statement_must_be_of_type_string_or_any_2405": "O lado esquerdo de uma instrução de 'for...in' deve ser do tipo 'string' ou 'any'.", + "The_left_hand_side_of_a_for_of_statement_cannot_use_a_type_annotation_2483": "O lado esquerdo de uma instrução 'for...of' não pode usar uma anotação de tipo.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_an_optional_property_access_2781": "O lado esquerdo de uma instrução 'for...of' pode não ser um acesso opcional de propriedade.", + "The_left_hand_side_of_a_for_of_statement_may_not_be_async_1106": "O lado esquerdo de uma instrução 'for...of' não pode ser 'assíncrono'.", + "The_left_hand_side_of_a_for_of_statement_must_be_a_variable_or_a_property_access_2487": "O lado esquerdo de uma instrução 'for...of' deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2362": "O lado esquerdo de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", + "The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access_2779": "O lado esquerdo de uma expressão de atribuição pode não ser um acesso opcional de propriedade.", + "The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access_2364": "O lado esquerdo de uma expressão de atribuição deve ser uma variável ou um acesso à propriedade.", + "The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_2860": "O lado esquerdo de uma expressão 'instanceof' deve ser atribuível ao primeiro argumento do método '[Symbol.hasInstance]' do lado direito.", + "The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_paramete_2358": "O lado esquerdo de uma expressão 'instanceof' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo.", + "The_locale_used_when_displaying_messages_to_the_user_e_g_en_us_6156": "O local usado ao exibir mensagens ao usuário (por exemplo, 'en-us')", + "The_maximum_dependency_depth_to_search_under_node_modules_and_load_JavaScript_files_6136": "A profundidade máxima de dependência a ser pesquisada em arquivos node_modules e de carregamento de JavaScript.", + "The_operand_of_a_delete_operator_cannot_be_a_private_identifier_18011": "O operando de um operador 'delete' pode não ser um identificador privado.", + "The_operand_of_a_delete_operator_cannot_be_a_read_only_property_2704": "O operando de um operador 'delete' não pode ser uma propriedade somente leitura.", + "The_operand_of_a_delete_operator_must_be_a_property_reference_2703": "O operando de um operador 'delete' deve ser uma referência de propriedade.", + "The_operand_of_a_delete_operator_must_be_optional_2790": "O operando de um operador 'delete' precisa ser opcional.", + "The_operand_of_an_increment_or_decrement_operator_may_not_be_an_optional_property_access_2777": "O operando de um operador de incremento ou decremento pode não ser um acesso opcional de propriedade.", + "The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access_2357": "O operando de um operador de incremento ou decremento deve ser uma variável ou um acesso à propriedade.", + "The_parser_expected_to_find_a_1_to_match_the_0_token_here_1007": "O analisador esperava localizar um '{1}' para corresponder ao token '{0}' aqui.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_export_map_entry_0_in_file_1_Supply_the_roo_2209": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada de mapa de exportação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", + "The_project_root_is_ambiguous_but_is_required_to_resolve_import_map_entry_0_in_file_1_Supply_the_roo_2210": "A raiz do projeto é ambígua, mas é necessária para resolver a entrada do mapa de importação '{0}' no arquivo '{1}'. Forneça a opção do compilador `rootDir` para desambiguar.", + "The_property_0_cannot_be_accessed_on_type_1_within_this_class_because_it_is_shadowed_by_another_priv_18014": "A propriedade '{0}' não pode ser acessada no tipo '{1}' dentro dessa classe porque ela é sombreada por outro identificador privado com a mesma grafia.", + "The_return_type_of_a_parameter_decorator_function_must_be_either_void_or_any_1237": "O tipo de retorno de uma função de decorador de parâmetro deve ser 'void' ou 'any'.", + "The_return_type_of_a_property_decorator_function_must_be_either_void_or_any_1236": "O tipo de retorno de uma função de decorador de propriedade deve ser 'void' ou 'any'.", + "The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_t_1058": "O tipo de retorno de uma função assíncrona deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_1065": "O tipo de retorno de uma função assíncrona ou método deve ser o tipo Promessa global.", + "The_return_type_of_an_async_function_or_method_must_be_the_global_Promise_T_type_Did_you_mean_to_wri_1064": "O tipo de retorno de uma função assíncrona ou método precisa ser o tipo Promise global. Você quis escrever 'Promise<{0}>'?", + "The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_2407": "O lado direito de uma instrução 'for...in' deve ser do tipo 'any', um tipo de objeto ou um parâmetro de tipo, mas aqui ele tem o tipo '{0}'.", + "The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type_2363": "O lado direito de uma operação aritmética deve ser do tipo 'any', 'number', 'bigint' ou um tipo enumerado.", + "The_right_hand_side_of_an_instanceof_expression_must_be_either_of_type_any_a_class_function_or_other_2359": "O lado direito de uma expressão 'instanceof' deve ser do tipo 'any', uma classe, uma função ou outro tipo atribuível ao tipo de interface 'Function' ou um tipo de objeto com um método 'Symbol.hasInstance'.", + "The_right_hand_side_of_an_instanceof_expression_must_not_be_an_instantiation_expression_2848": "O lado direito de uma expressão 'instanceof' não deve ser uma expressão de instanciação.", + "The_root_value_of_a_0_file_must_be_an_object_5092": "O valor raiz de um arquivo '{0}' precisa ser um objeto.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_0_1278": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera {0}.", + "The_runtime_will_invoke_the_decorator_with_1_arguments_but_the_decorator_expects_at_least_0_1279": "O runtime invocará o decorador com argumentos {1}, mas o decorador espera pelo menos {0}.", + "The_shadowing_declaration_of_0_is_defined_here_18017": "A declaração de sombreamento de '{0}' é definida aqui", + "The_signature_0_of_1_is_deprecated_6387": "A assinatura '{0}' de '{1}' foi preterida.", + "The_specified_path_does_not_exist_Colon_0_5058": "O caminho especificado não existe: '{0}'.", + "The_tag_was_first_specified_here_8034": "A marca foi especificada primeiro aqui.", + "The_target_of_an_object_rest_assignment_may_not_be_an_optional_property_access_2778": "O destino de uma atribuição REST de objeto pode não ser um acesso opcional de propriedade.", + "The_target_of_an_object_rest_assignment_must_be_a_variable_or_a_property_access_2701": "O destino de uma atribuição rest de objeto deve ser uma variável ou um acesso de propriedade.", + "The_this_context_of_type_0_is_not_assignable_to_method_s_this_of_type_1_2684": "O contexto 'this' de tipo '{0}' não é atribuível para o 'this' do método de tipo '{1}'.", + "The_this_types_of_each_signature_are_incompatible_2685": "Os tipos 'this' de cada assinatura são incompatíveis.", + "The_type_0_is_readonly_and_cannot_be_assigned_to_the_mutable_type_1_4104": "O tipo '{0}' é 'readonly' e não pode ser atribuído ao tipo mutável '{1}'.", + "The_type_modifier_cannot_be_used_on_a_named_export_when_export_type_is_used_on_its_export_statement_2207": "O modificador “type” não pode ser usado em uma exportação nomeada quando “export type” for usado em sua instrução de exportar.", + "The_type_modifier_cannot_be_used_on_a_named_import_when_import_type_is_used_on_its_import_statement_2206": "O modificador “type” não pode ser usado em uma importação nomeada quando “import type” for usado em sua instrução de importar.", + "The_type_of_a_function_declaration_must_match_the_function_s_signature_8030": "O tipo de uma declaração de função deve corresponder à assinatura da função.", + "The_type_of_this_node_cannot_be_serialized_because_its_property_0_cannot_be_serialized_4118": "O tipo deste nó não pode ser serializado porque sua propriedade '{0}' não pode ser serializada.", + "The_type_returned_by_the_0_method_of_an_async_iterator_must_be_a_promise_for_a_type_with_a_value_pro_2547": "O tipo retornado pelo método '{0}()' de um iterador assíncrono deve ser uma promessa para um tipo com a propriedade 'value'.", + "The_type_returned_by_the_0_method_of_an_iterator_must_have_a_value_property_2490": "O tipo retornado pelo método '{0}()' de um iterador deve ter uma propriedade 'value'.", + "The_types_of_0_are_incompatible_between_these_types_2200": "Os tipos de '{0}' são incompatíveis entre esses tipos.", + "The_types_returned_by_0_are_incompatible_between_these_types_2201": "Os tipos retornados por '{0}' são incompatíveis entre esses tipos.", + "The_value_0_cannot_be_used_here_18050": "O valor '{0}' não pode ser usado aqui.", + "The_variable_declaration_of_a_for_in_statement_cannot_have_an_initializer_1189": "A declaração de variável de uma instrução 'for...in' não pode ter um inicializador.", + "The_variable_declaration_of_a_for_of_statement_cannot_have_an_initializer_1190": "A declaração de variável de uma instrução 'for...of' não pode ter um inicializador.", + "The_with_statement_is_not_supported_All_symbols_in_a_with_block_will_have_type_any_2410": "A instrução \"with\" não tem suporte. Todos os símbolos em um bloco \"with\" terão o tipo \"any\".", + "There_are_types_at_0_but_this_result_could_not_be_resolved_under_your_current_moduleResolution_setti_6280": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido na configuração 'moduleResolution' atual. Considere atualizar para 'node16', 'nodenext' ou 'bundler'.", + "There_are_types_at_0_but_this_result_could_not_be_resolved_when_respecting_package_json_exports_The__6278": "Há tipos em '{0}', mas esse resultado não pôde ser resolvido ao respeitar as \"exportações\" do package.json. A biblioteca '{1}' pode precisar atualizar o package.json ou as digitações.", + "There_is_no_capturing_group_named_0_in_this_regular_expression_1532": "Não há nenhum grupo de captura chamado '{0}' nesta expressão regular.", + "There_is_nothing_available_for_repetition_1507": "Não há nada disponível para repetição.", + "This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found_2874": "Essa marca JSX requer que \"{0}\" esteja no escopo, mas não foi possível encontrá-la.", + "This_JSX_tag_requires_the_module_path_0_to_exist_but_none_could_be_found_Make_sure_you_have_types_fo_2875": "Essa marca JSX requer a existência do caminho do módulo \"{0}\", mas não foi possível encontrar nenhum. Verifique se você tem os tipos do pacote apropriado instalados.", + "This_JSX_tag_s_0_prop_expects_a_single_child_of_type_1_but_multiple_children_were_provided_2746": "A propriedade '{0}' da marca desse JSX espera um único filho do tipo '{1}', mas vários filhos foram fornecidos.", + "This_JSX_tag_s_0_prop_expects_type_1_which_requires_multiple_children_but_only_a_single_child_was_pr_2745": "A propriedade '{0}' da marca desse JSX espera o tipo '{1}' que requer vários filhos, mas somente um único filho foi fornecido.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_no_capturing_groups_in_this_regul_1534": "Essa referência inversa refere-se a um grupo que não existe. Não há grupos de captura nessa expressão regular.", + "This_backreference_refers_to_a_group_that_does_not_exist_There_are_only_0_capturing_groups_in_this_r_1533": "Essa referência inversa refere-se a um grupo que não existe. Há apenas {0} grupos de captura nesta expressão regular.", + "This_binary_expression_is_never_nullish_Are_you_missing_parentheses_2870": "Essa expressão binária nunca é nula. Está faltando parênteses?", + "This_character_cannot_be_escaped_in_a_regular_expression_1535": "Este caractere não pode ser escapado em uma expressão regular.", + "This_comparison_appears_to_be_unintentional_because_the_types_0_and_1_have_no_overlap_2367": "Esta comparação parece não ser intencional porque os tipos '{0}' e '{1}' não têm sobreposição.", + "This_condition_will_always_return_0_2845": "Esta condição sempre retornará '{0}'.", + "This_condition_will_always_return_0_since_JavaScript_compares_objects_by_reference_not_value_2839": "Essa condição sempre retornará '{0}', pois o JavaScript compara objetos por referência, não por valor.", + "This_condition_will_always_return_true_since_this_0_is_always_defined_2801": "Esta condição sempre retornará verdadeiro, já que este '{0}' está sempre definido.", + "This_condition_will_always_return_true_since_this_function_is_always_defined_Did_you_mean_to_call_it_2774": "Esta condição sempre retornará verdadeira, uma vez que esta função foi sempre definida. Você pretendia chamá-la em vez disso?", + "This_constructor_function_may_be_converted_to_a_class_declaration_80002": "Esta função de construtor pode ser convertida em uma declaração de classe.", + "This_expression_is_always_nullish_2871": "Essa expressão sempre é nula.", + "This_expression_is_never_nullish_2881": "Esta expressão nunca é nula.", + "This_expression_is_not_callable_2349": "Essa expressão não pode ser chamada.", + "This_expression_is_not_callable_because_it_is_a_get_accessor_Did_you_mean_to_use_it_without_6234": "Esta expressão não pode ser chamada porque é um acessador 'get'. Você quis usá-la sem '()'?", + "This_expression_is_not_constructable_2351": "Essa expressão não pode ser construída.", + "This_file_already_has_a_default_export_95130": "Este arquivo já tem uma exportação padrão", + "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878": "Não é seguro reescrever esse caminho de importação porque ele é resolvido em outro projeto, e o caminho relativo entre os arquivos de saída dos projetos não é o mesmo que o caminho relativo entre seus arquivos de entrada.", + "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877": "Essa importação usa uma extensão \"{0}\" para resolver um arquivo TypeScript de entrada, mas não será reescrita durante a emissão porque não é um caminho relativo.", + "This_is_the_declaration_being_augmented_Consider_moving_the_augmenting_declaration_into_the_same_fil_6233": "Esta é a declaração que está sendo aumentada. Considere mover a declaração em aumento para o mesmo arquivo.", + "This_kind_of_expression_is_always_falsy_2873": "Esse tipo de expressão é sempre inválido.", + "This_kind_of_expression_is_always_truthy_2872": "Esse tipo de expressão é sempre verdadeiro.", + "This_may_be_converted_to_an_async_function_80006": "Isso pode ser convertido em uma função assíncrona.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4122": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque ele não está declarado na classe base '{0}'.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_it_is_not_declared_in_the_base__4123": "Esse membro não pode ter um comentário JSDoc com uma marca 'override' porque ele não está declarado na classe base '{0}'. Você quis dizer '{1}'?", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_containing_class_0_does_not_4121": "Este membro não pode ter um comentário JSDoc com uma marca '@override' porque sua classe que contém '{0}' não estende outra classe.", + "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128": "Esse membro não pode ter um comentário JSDoc com uma marcação '@override' porque seu nome é dinâmico.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_4113": "Este membro não pode ter um modificador 'override' porque não está declarado na classe base '{0}'.", + "This_member_cannot_have_an_override_modifier_because_it_is_not_declared_in_the_base_class_0_Did_you__4117": "Esse membro não pode ter um modificador de 'substituição' porque ele não é declarado na classe base '{0}'. Você quis dizer '{1}'?", + "This_member_cannot_have_an_override_modifier_because_its_containing_class_0_does_not_extend_another__4112": "Este membro não pode ter um modificador 'override' porque a classe que o contém, '{0}', não se estende para outra classe.", + "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127": "Este membro não pode ter um modificador 'override' porque seu nome é dinâmico.", + "This_member_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_in_the_base_4119": "Essa membro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_a_member_in_the_base_class_0_4114": "Este membro precisa ter um modificador 'override' porque substitui um membro na classe base '{0}'.", + "This_member_must_have_an_override_modifier_because_it_overrides_an_abstract_method_that_is_declared__4116": "Este membro precisa ter um modificador 'override' porque substitui um método abstrato que é declarado na classe base '{0}'.", + "This_module_can_only_be_referenced_with_ECMAScript_imports_Slashexports_by_turning_on_the_0_flag_and_2497": "Esse módulo só pode ser referenciado com importações/exportações de ECMAScript ligando o sinalizador '{0}' e referenciando sua exportação padrão.", + "This_module_is_declared_with_export_and_can_only_be_used_with_a_default_import_when_using_the_0_flag_2594": "Este módulo é declarado com 'export =', e só pode ser usado com uma importação padrão ao usar o sinalizador '{0}'.", + "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807": "Essa operação pode ser simplificada. Essa mudança é idêntica a `{0} {1} {2}`.", + "This_overload_implicitly_returns_the_type_0_because_it_lacks_a_return_type_annotation_7012": "Essa sobrecarga retorna implicitamente o tipo '{0}' porque não tem uma anotação de tipo de retorno.", + "This_overload_signature_is_not_compatible_with_its_implementation_signature_2394": "Esta assinatura de sobrecarga não é compatível com sua assinatura de implementação.", + "This_parameter_is_not_allowed_with_use_strict_directive_1346": "Este parâmetro não é permitido com a diretiva 'use strict'.", + "This_parameter_property_must_have_a_JSDoc_comment_with_an_override_tag_because_it_overrides_a_member_4120": "Essa propriedade de parâmetro deve ter um comentário JSDoc com uma marca '@override' porque ela substitui um membro na classe base '{0}'.", + "This_parameter_property_must_have_an_override_modifier_because_it_overrides_a_member_in_base_class_0_4115": "Esta propriedade de parâmetro deve ter uma modificação de 'substituição' porque substitui um membro na classe base '{0}'.", + "This_regular_expression_flag_cannot_be_toggled_within_a_subpattern_1509": "Esse sinalizador de expressão regular não pode ser alternado em um subpadrão.", + "This_regular_expression_flag_is_only_available_when_targeting_0_or_later_1501": "Esse sinalizador de expressão regular só está disponível ao direcionar para '{0}' ou posterior.", + "This_relative_import_path_is_unsafe_to_rewrite_because_it_looks_like_a_file_name_but_actually_resolv_2876": "Não é seguro reescrever esse caminho de importação relativo porque ele se parece com um nome de arquivo, mas, na verdade, é resolvido como \"{0}\".", + "This_spread_always_overwrites_this_property_2785": "Essa difusão sempre substitui essa propriedade.", + "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294": "Esta sintaxe não é permitida quando 'erasableSyntaxOnly' está habilitado.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Add_a_trailing_comma_or_explicit_cons_7060": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Adicione uma vírgula final ou restrição explícita.", + "This_syntax_is_reserved_in_files_with_the_mts_or_cts_extension_Use_an_as_expression_instead_7059": "Essa sintaxe é reservada em arquivos com extensão .mts ou .cts. Em vez disso, use uma expressão `as`.", + "This_syntax_requires_an_imported_helper_but_module_0_cannot_be_found_2354": "Essa sintaxe requer um auxiliar importado, mas o módulo '{0}' não pode ser encontrado.", + "This_syntax_requires_an_imported_helper_named_1_which_does_not_exist_in_0_Consider_upgrading_your_ve_2343": "Esta sintaxe requer um auxiliar importado chamado '{1}' que não existe em '{0}'. Considere atualizar sua versão do '{0}'.", + "This_syntax_requires_an_imported_helper_named_1_with_2_parameters_which_is_not_compatible_with_the_o_2807": "Esta sintaxe exige um auxiliar importado nomeado como '{1}' com parâmetros {2}, o que não é compatível com o que está em '{0}'. Considere atualizar sua versão do '{0}'.", + "This_type_parameter_might_need_an_extends_0_constraint_2208": "Este parâmetro de tipo pode precisar de uma restrição `extends {0}`.", + "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326": "Este uso de 'importar' é inválido. Chamadas 'import()' podem ser escritas, mas devem ter parênteses e não podem ter argumentos de tipo.", + "To_convert_this_file_to_an_ECMAScript_module_add_the_field_type_Colon_module_to_0_1482": "Para converter este arquivo em um módulo ECMAScript, adicione o campo `\"type\": \"module\"` a '{0}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_add_the_field_type_Co_1481": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou adicione o campo `\"type\": \"module\"` para '{1}'.", + "To_convert_this_file_to_an_ECMAScript_module_change_its_file_extension_to_0_or_create_a_local_packag_1480": "Para converter este arquivo em um módulo ECMAScript, altere sua extensão de arquivo para '{0}' ou crie um arquivo package.json local com `{ \"type\": \"module\" }`.", + "To_convert_this_file_to_an_ECMAScript_module_create_a_local_package_json_file_with_type_Colon_module_1483": "Para converter este arquivo em um módulo ECMAScript, crie um arquivo package.json local com `{ \"type\": \"module\" }`.", + "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378": "As expressões “await” de nível superior só são permitidas quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", + "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854": "As instruções “await using” de nível superior só são permitidas quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", + "Top_level_declarations_in_d_ts_files_must_start_with_either_a_declare_or_export_modifier_1046": "As declarações de nível superior em arquivos .d.ts devem começar com um modificador 'declare' ou 'export'.", + "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432": "Os loops “for await” de nível superior só são permitidos quando a opção “module” estiver definida como “es2022”, “esnext”, “system”, “node16”, “node18”, “node20”, “nodenext” ou “preserve”, e a opção “target” estiver definida como “es2017” ou superior.", + "Trailing_comma_not_allowed_1009": "Vírgula à direita não permitida.", + "Transpile_each_file_as_a_separate_module_similar_to_ts_transpileModule_6153": "Transcompilar cada arquivo como um módulo separado (do mesmo modo que 'ts.transpileModule').", + "Try_npm_i_save_dev_types_Slash_1_if_it_exists_or_add_a_new_declaration_d_ts_file_containing_declare__7035": "Tente `npm i --save-dev @types/{1}` caso exista ou adicione um novo arquivo de declaração (.d.ts) contendo `declare module '{0}';`", + "Trying_other_entries_in_rootDirs_6110": "Tentando outras entradas em 'rootDirs'.", + "Trying_substitution_0_candidate_module_location_Colon_1_6093": "Tentando substituição '{0}', local de módulo candidato: '{1}'.", + "Tuple_type_0_of_length_1_has_no_element_at_index_2_2493": "O tipo de tupla '{0}' de comprimento '{1}' não tem nenhum elemento no índice '{2}'.", + "Tuple_type_arguments_circularly_reference_themselves_4110": "Os argumentos de tipo de tupla se referenciam circularmente.", + "Type_0_can_only_be_iterated_through_when_using_the_downlevelIteration_flag_or_with_a_target_of_es201_2802": "O tipo '{0}' só pode ser iterado usando o sinalizador '--downlevelIteration' ou um '--target' igual a 'es2015' ou superior.", + "Type_0_cannot_be_used_as_an_index_type_2538": "O tipo '{0}' não pode ser usado como um tipo de índice.", + "Type_0_cannot_be_used_to_index_type_1_2536": "O tipo '{0}' não pode ser usado para indexar o tipo '{1}'.", + "Type_0_does_not_satisfy_the_constraint_1_2344": "O tipo '{0}' não satisfaz a restrição '{1}'.", + "Type_0_does_not_satisfy_the_expected_type_1_1360": "O tipo '{0}' não atende ao tipo esperado '{1}'.", + "Type_0_has_no_call_signatures_2757": "O tipo '{0}' não tem assinaturas de chamada.", + "Type_0_has_no_construct_signatures_2761": "O tipo '{0}' não tem assinaturas de constructo.", + "Type_0_has_no_matching_index_signature_for_type_1_2537": "O tipo '{0}' não tem assinatura de índice correspondente para o tipo '{1}'.", + "Type_0_has_no_properties_in_common_with_type_1_2559": "O tipo '{0}' não tem propriedades em comum com o tipo '{1}'.", + "Type_0_has_no_signatures_for_which_the_type_argument_list_is_applicable_2635": "O tipo “{0}” não tem assinaturas para as quais a lista de argumentos de tipo é aplicável.", + "Type_0_is_generic_and_can_only_be_indexed_for_reading_2862": "O tipo '{0}' é genérico e só pode ser indexado para leitura.", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_2739": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2}", + "Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more_2740": "O tipo '{0}' não tem as propriedades a seguir do tipo '{1}': {2} e mais {3}.", + "Type_0_is_not_a_constructor_function_type_2507": "O tipo '{0}' não é um tipo de função de construtor.", + "Type_0_is_not_a_valid_async_function_return_type_in_ES5_because_it_does_not_refer_to_a_Promise_compa_1055": "O tipo '{0}' não é um tipo de retorno de função assíncrona válido no ES5, pois não se refere ao valor construtor compatível com a Promessa.", + "Type_0_is_not_an_array_type_2461": "O tipo '{0}' não é um tipo de matriz.", + "Type_0_is_not_an_array_type_or_a_string_type_2495": "O tipo '{0}' não é um tipo de matriz ou de cadeia de caracteres.", + "Type_0_is_not_an_array_type_or_a_string_type_or_does_not_have_a_Symbol_iterator_method_that_returns__2549": "O tipo '{0}' não é um tipo de matriz de um tipo de cadeia ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", + "Type_0_is_not_an_array_type_or_does_not_have_a_Symbol_iterator_method_that_returns_an_iterator_2548": "O tipo '{0}' não é um tipo de matriz ou não tem um método '[Symbol.iterator]()' que retorna um iterador.", + "Type_0_is_not_assignable_to_type_1_2322": "O tipo '{0}' não pode ser atribuído ao tipo '{1}'.", + "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820": "O tipo '' não pode ser atribuído ao tipo {0} '{1}'. Você quis dizer '{2}'?", + "Type_0_is_not_assignable_to_type_1_Two_different_types_with_this_name_exist_but_they_are_unrelated_2719": "O tipo '{0}' não é atribuível ao tipo '{1}'. Dois tipos diferentes com esse nome existem, mas eles não estão relacionados.", + "Type_0_is_not_assignable_to_type_1_as_implied_by_variance_annotation_2636": "Tipo '{0}' não é atribuível ao tipo '{1}' como implícito pela anotação de variância.", + "Type_0_is_not_assignable_to_type_1_as_required_for_computed_enum_member_values_18033": "O tipo '{0}' não é atribuível ao tipo '{1}', conforme necessário para valores de membro de enumeração computados.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2375": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' aos tipos das propriedades do destino.", + "Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefi_2412": "O tipo '{0}' não pode ser atribuído ao tipo '{1}' com 'exactOptionalPropertyTypes: true'. Considere adicionar 'undefined' ao tipo do destino.", + "Type_0_is_not_comparable_to_type_1_2678": "O tipo '{0}' não pode ser comparável ao tipo '{1}'.", + "Type_0_is_not_generic_2315": "O tipo '{0}' não é genérico.", + "Type_0_may_represent_a_primitive_value_which_is_not_permitted_as_the_right_operand_of_the_in_operato_2638": "O tipo '{0}' pode representar um valor primitivo, que não é permitido como operando direito do operador 'in'.", + "Type_0_must_have_a_Symbol_asyncIterator_method_that_returns_an_async_iterator_2504": "O tipo '{0}' deve ter um método '[Symbol.asyncIterator]()' que retorna um iterador assíncrono.", + "Type_0_must_have_a_Symbol_iterator_method_that_returns_an_iterator_2488": "O tipo '{0}' deve ter um método '[Symbol.iterator]()' que retorna um iterador.", + "Type_0_provides_no_match_for_the_signature_1_2658": "O tipo '{0}' fornece nenhuma correspondência para a assinatura '{1}'.", + "Type_0_recursively_references_itself_as_a_base_type_2310": "O tipo '{0}' referencia recursivamente a si próprio como um tipo base.", + "Type_Checking_6248": "Verificação de Tipo", + "Type_alias_0_circularly_references_itself_2456": "O alias de tipo '{0}' referencia circulamente a si próprio.", + "Type_alias_must_be_given_a_name_1439": "O alias de tipo deve receber um nome.", + "Type_alias_name_cannot_be_0_2457": "O nome do alias de tipo não pode ser '{0}'.", + "Type_aliases_can_only_be_used_in_TypeScript_files_8008": "Os aliases de tipo só podem ser usados em arquivos TypeScript.", + "Type_annotation_cannot_appear_on_a_constructor_declaration_1093": "Uma anotação de tipo não pode aparecer em uma declaração de construtor.", + "Type_annotations_can_only_be_used_in_TypeScript_files_8010": "As anotações de tipo só podem ser usadas em arquivos TypeScript.", + "Type_argument_expected_1140": "Argumento de tipo esperado.", + "Type_argument_list_cannot_be_empty_1099": "A lista de argumentos de tipo não pode estar vazia.", + "Type_arguments_can_only_be_used_in_TypeScript_files_8011": "Os argumentos de tipo só podem ser usados em arquivos TypeScript.", + "Type_arguments_for_0_circularly_reference_themselves_4109": "Os argumentos de tipo '{0}' se referenciam circularmente.", + "Type_assertion_expressions_can_only_be_used_in_TypeScript_files_8016": "As expressões de declaração de tipo só podem ser usadas em arquivos TypeScript.", + "Type_at_position_0_in_source_is_not_compatible_with_type_at_position_1_in_target_2626": "O tipo na posição {0} na fonte não é compatível com o tipo na posição {1} no destino.", + "Type_at_positions_0_through_1_in_source_is_not_compatible_with_type_at_position_2_in_target_2627": "O tipo nas posições {0} até {1} na fonte não é compatível com o tipo na posição {2} no destino.", + "Type_containing_private_name_0_can_t_be_used_with_isolatedDeclarations_9039": "O tipo que contém o nome particular '{0}' não pode ser usado com --isolatedDeclarations.", + "Type_declaration_files_to_be_included_in_compilation_6124": "Arquivos de declaração de tipo a serem incluídos em compilação.", + "Type_expected_1110": "Tipo esperado.", + "Type_import_assertions_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1456": "As asserções de importação de tipo devem ter exatamente uma chave - `resolution-mode` - com valor `import` ou` require`.", + "Type_import_attributes_should_have_exactly_one_key_resolution_mode_with_value_import_or_require_1464": "As asserções de importação de tipo devem ter exatamente uma chave - 'resolution-mode' - com valor 'import' ou 'require'.", + "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542": "A importação de tipo de um módulo ECMAScript de um módulo CommonJS deve ter um atributo 'resolution-mode'.", + "Type_instantiation_is_excessively_deep_and_possibly_infinite_2589": "A instanciação de tipo é muito profunda e possivelmente infinita.", + "Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method_1062": "O tipo é referenciado diretamente ou indiretamente em um retorno de chamada de preenchimento do seu próprio método 'then'.", + "Type_library_referenced_via_0_from_file_1_1402": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}'", + "Type_library_referenced_via_0_from_file_1_with_packageId_2_1403": "Biblioteca de tipos referenciada via '{0}' do arquivo '{1}' com packageId '{2}'", + "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320": "O tipo de operando \"await\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "Type_of_computed_property_s_value_is_0_which_is_not_assignable_to_type_1_2418": "O tipo de valor da propriedade computada é '{0}', que não pode ser atribuído ao tipo '{1}'.", + "Type_of_instance_member_variable_0_cannot_reference_identifier_1_declared_in_the_constructor_2844": "O tipo de variável '{0}' de membro de instância não pode referenciar o identificador '{1}' declarado no construtor.", + "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322": "O tipo de elementos iterados de um operando \"yield*\" deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "Type_of_property_0_circularly_references_itself_in_mapped_type_1_2615": "O tipo de propriedade '{0}' faz referência circular a si mesmo no tipo mapeado '{1}'.", + "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321": "O tipo do operando \"yield\" em um gerador assíncrono deve ser uma promessa válida ou não deve conter um membro \"then\" que pode ser chamado.", + "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541": "A importação somente de tipo de um módulo ECMAScript de um módulo CommonJS deve ter um atributo 'resolution-mode'.", + "Type_originates_at_this_import_A_namespace_style_import_cannot_be_called_or_constructed_and_will_cau_7038": "O tipo se origina nessa importação. Uma importação de estilo de namespace não pode ser chamada nem construída e causará uma falha no runtime. Considere usar uma importação padrão ou importe require aqui.", + "Type_parameter_0_has_a_circular_constraint_2313": "O parâmetro de tipo '{0}' tem uma restrição circular.", + "Type_parameter_0_has_a_circular_default_2716": "O parâmetro de tipo '{0}' tem um padrão circular.", + "Type_parameter_0_of_call_signature_from_exported_interface_has_or_is_using_private_name_1_4008": "O parâmetro de tipo '{0}' da assinatura de chamada da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1_4006": "O parâmetro de tipo '{0}' da assinatura de construtor da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002": "O parâmetro de tipo '{0}' da classe exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_function_has_or_is_using_private_name_1_4016": "O parâmetro de tipo '{0}' da função exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004": "O parâmetro de tipo '{0}' da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_exported_mapped_object_type_is_using_private_name_1_4103": "O parâmetro de tipo '{0}' do tipo de objeto mapeado exportado tem ou está usando o nome privado '{1}'.", + "Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1_4083": "O parâmetro de tipo '{0}' do alias de tipo exportado tem ou está usando o nome privado '{1}'.", + "Type_parameter_0_of_method_from_exported_interface_has_or_is_using_private_name_1_4014": "O parâmetro de tipo '{0}' do método da interface exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_public_method_from_exported_class_has_or_is_using_private_name_1_4012": "O parâmetro de tipo '{0}' do método público da classe exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_0_of_public_static_method_from_exported_class_has_or_is_using_private_name_1_4010": "O parâmetro de tipo '{0}' do método estático público da classe exportada tem ou está usando o nome particular '{1}'.", + "Type_parameter_declaration_expected_1139": "Declaração de parâmetro de tipo esperada.", + "Type_parameter_declarations_can_only_be_used_in_TypeScript_files_8004": "As declarações de parâmetro de tipo só podem ser usadas em arquivos TypeScript.", + "Type_parameter_defaults_can_only_reference_previously_declared_type_parameters_2744": "Os padrões de parâmetro de tipo só podem referenciar parâmetros de tipo declarados anteriormente.", + "Type_parameter_list_cannot_be_empty_1098": "A lista de parâmetros de tipo não pode estar vazia.", + "Type_parameter_name_cannot_be_0_2368": "O nome do parâmetro de tipo não pode ser '{0}'.", + "Type_parameters_cannot_appear_on_a_constructor_declaration_1092": "Os parâmetros de tipo não podem aparecer em uma declaração de construtor.", + "Type_predicate_0_is_not_assignable_to_1_1226": "O predicado de tipo '{0}' não pode ser atribuído a '{1}'.", + "Type_produces_a_tuple_type_that_is_too_large_to_represent_2799": "O tipo produz um tipo de tupla grande demais para ser representado.", + "Type_reference_directive_0_was_not_resolved_6120": "======== A diretiva de referência de tipo '{0}' não foi resolvida. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_primary_Colon_2_6119": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}', primário: {2}. ========", + "Type_reference_directive_0_was_successfully_resolved_to_1_with_Package_ID_2_primary_Colon_3_6219": "======== A diretiva de referência de tipo '{0}' foi resolvida com sucesso para '{1}' com a ID do Pacote '{2}', primário: {3}. ========", + "Type_satisfaction_expressions_can_only_be_used_in_TypeScript_files_8037": "As expressões de satisfação de tipo só podem ser usadas em arquivos TypeScript.", + "Types_cannot_appear_in_export_declarations_in_JavaScript_files_18043": "Os tipos não podem aparecer em declarações de exportação em arquivos JavaScript.", + "Types_have_separate_declarations_of_a_private_property_0_2442": "Tipos têm declarações separadas de uma propriedade privada '{0}'.", + "Types_of_construct_signatures_are_incompatible_2419": "Os tipos de assinaturas de constructo são incompatíveis.", + "Types_of_parameters_0_and_1_are_incompatible_2328": "Os tipos de parâmetros '{0}' e '{1}' são incompatíveis.", + "Types_of_property_0_are_incompatible_2326": "Tipos de propriedade '{0}' são incompatíveis.", + "Unable_to_open_file_0_6050": "Não é possível abrir o arquivo '{0}'.", + "Unable_to_resolve_signature_of_class_decorator_when_called_as_an_expression_1238": "Não é possível resolver a assinatura do decorador de classe quando ele é chamado como uma expressão.", + "Unable_to_resolve_signature_of_method_decorator_when_called_as_an_expression_1241": "Não é possível resolver a assinatura do decorador de método quando ele é chamado como uma expressão.", + "Unable_to_resolve_signature_of_parameter_decorator_when_called_as_an_expression_1239": "Não é possível resolver a assinatura do decorador de parâmetro quando ele é chamado como uma expressão.", + "Unable_to_resolve_signature_of_property_decorator_when_called_as_an_expression_1240": "Não é possível resolver a assinatura do decorador de propriedade quando ele é chamado como uma expressão.", + "Undetermined_character_escape_1513": "Escape de caractere indeterminado.", + "Unexpected_0_Did_you_mean_to_escape_it_with_backslash_1508": "'{0}' inesperado. Você quer escapar com barra invertida?", + "Unexpected_end_of_text_1126": "Fim inesperado do texto.", + "Unexpected_keyword_or_identifier_1434": "Palavra-chave ou identificador inesperado.", + "Unexpected_token_1012": "Token inesperado.", + "Unexpected_token_A_constructor_method_accessor_or_property_was_expected_1068": "Token inesperado. Um construtor, método, acessador ou propriedade era esperado.", + "Unexpected_token_A_type_parameter_name_was_expected_without_curly_braces_1069": "Token inesperado. Era esperado um nome de parâmetro de tipo sem chaves.", + "Unexpected_token_Did_you_mean_or_gt_1382": "Token inesperado. Você quis dizer '{'>'}' ou '>'?", + "Unexpected_token_Did_you_mean_or_rbrace_1381": "Token inesperado. Você quis dizer '{'}'}' ou '}'?", + "Unexpected_token_expected_1179": "Token inesperado. '{' esperado.", + "Unicode_escape_sequence_cannot_appear_here_17021": "A sequência de escape Unicode não pode aparecer aqui.", + "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538": "As sequências de escape Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", + "Unicode_property_value_expressions_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v__1530": "As expressões de valor da propriedade Unicode só estarão disponíveis quando o sinalizador Unicode (u) ou o sinalizador Conjuntos Unicode (v) estiver definido.", + "Unknown_Unicode_property_name_1524": "Nome da propriedade Unicode desconhecido.", + "Unknown_Unicode_property_name_or_value_1529": "Nome ou valor da propriedade Unicode desconhecido.", + "Unknown_Unicode_property_value_1526": "Valor da propriedade Unicode desconhecido.", + "Unknown_build_option_0_5072": "Opção de build '{0}' desconhecida.", + "Unknown_build_option_0_Did_you_mean_1_5077": "Opção de build '{0}' desconhecida. Você quis dizer '{1}'?", + "Unknown_compiler_option_0_5023": "Opção do compilador '{0}' desconhecida.", + "Unknown_compiler_option_0_Did_you_mean_1_5025": "Opção de compilador '{0}' desconhecida. Você quis dizer '{1}'?", + "Unknown_keyword_or_identifier_Did_you_mean_0_1435": "Palavra-chave ou identificador desconhecido. Você quis dizer '{0}'?", + "Unknown_option_excludes_Did_you_mean_exclude_6114": "Opção desconhecida 'excludes'. Você quis dizer 'exclude'?", + "Unknown_regular_expression_flag_1499": "Sinalizador de expressão regular desconhecido.", + "Unknown_type_acquisition_option_0_17010": "Opção de aquisição de tipo desconhecido '{0}'.", + "Unknown_type_acquisition_option_0_Did_you_mean_1_17018": "Opção de aquisição de tipo '{0}' desconhecida. Você quis dizer '{1}'?", + "Unknown_watch_option_0_5078": "Opção de observador '{0}' desconhecida.", + "Unknown_watch_option_0_Did_you_mean_1_5079": "Opção de observador '{0}' desconhecida. Você quis dizer '{1}'?", + "Unreachable_code_detected_7027": "Código inacessível detectado.", + "Unterminated_Unicode_escape_sequence_1199": "Sequência de escape Unicode não finalizada.", + "Unterminated_quoted_string_in_response_file_0_6045": "Cadeia de caracteres entre aspas não finalizada no arquivo de resposta '{0}'.", + "Unterminated_regular_expression_literal_1161": "Literal de expressão regular não finalizado.", + "Unterminated_string_literal_1002": "Literal de cadeia de caracteres não finalizado.", + "Unterminated_template_literal_1160": "Literal de modelo não finalizado.", + "Untyped_function_calls_may_not_accept_type_arguments_2347": "Chamadas de função não tipadas não podem aceitar argumentos de tipo.", + "Unused_label_7028": "Rótulo não utilizado.", + "Unused_ts_expect_error_directive_2578": "Diretiva '@ts-expect-error' não usada.", + "Update_import_from_0_90058": "Atualizar importação de \"{0}\"", + "Update_modifiers_of_0_90061": "Atualizar modificadores de '{0}'", + "Updating_output_timestamps_of_project_0_6359": "Atualizando os carimbos de data/hora de saída do projeto '{0}'...", + "Updating_unchanged_output_timestamps_of_project_0_6371": "Atualizando os carimbos de data/hora de saída inalterados do projeto '{0}'...", + "Use_0_95174": "Use `{0}`.", + "Use_0_instead_5106": "Use '{0}' em vez disso.", + "Use_Number_isNaN_in_all_conditions_95175": "Use `Number.isNaN` em todas as condições.", + "Use_element_access_for_0_95145": "Usar o acesso de elemento para '{0}'", + "Use_element_access_for_all_undeclared_properties_95146": "Usar o acesso de elemento para todas as propriedades não declaradas.", + "Use_import_type_95180": "Usar 'tipo de importação'", + "Use_synthetic_default_member_95016": "Use o membro sintético 'padrão'.", + "Use_the_package_json_exports_field_when_resolving_package_imports_6408": "Use o campo 'exports' do package.json ao resolver importações de pacote.", + "Use_the_package_json_imports_field_when_resolving_imports_6409": "Use o campo 'imports' no package.json ao resolver importações.", + "Use_type_0_95181": "Usar 'type {0}'", + "Using_0_subpath_1_with_target_2_6404": "Usando '{0}' subcaminho '{1}' com destino '{2}'.", + "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879": "O uso de fragmentos JSX requer que a fábrica de fragmentos \"{0}\" esteja no escopo, mas não foi possível encontrá-la.", + "Using_a_string_in_a_for_of_statement_is_only_supported_in_ECMAScript_5_and_higher_2494": "Há suporte para o uso de uma cadeia de caracteres em uma instrução 'for...of' somente no ECMAScript 5 e superior.", + "Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_tr_6915": "Usar --build, -b fará com que o tsc se comporte mais como um orquestrador de build do que como um compilador. Isso é usado para acionar a construção de projetos compostos sobre os quais você pode aprender mais em {0}", + "Using_compiler_options_of_project_reference_redirect_0_6215": "Usando as opções do compilador de redirecionamento de referência do projeto '{0}'.", + "VERSION_6036": "VERSÃO", + "Value_of_type_0_has_no_properties_in_common_with_type_1_Did_you_mean_to_call_it_2560": "O valor do tipo '{0}' não tem propriedades em comum com o tipo '{1}'. Você queria chamá-lo?", + "Value_of_type_0_is_not_callable_Did_you_mean_to_include_new_2348": "O valor do tipo '{0}' não pode ser chamado. Você pretendia incluir 'new'?", + "Variable_0_implicitly_has_an_1_type_7005": "A variável '{0}' implicitamente tem um tipo '{1}'.", + "Variable_0_implicitly_has_an_1_type_but_a_better_type_may_be_inferred_from_usage_7043": "A variável '{0}' implicitamente tem um tipo '{1}', mas um tipo melhor pode ser inferido do uso.", + "Variable_0_implicitly_has_type_1_in_some_locations_but_a_better_type_may_be_inferred_from_usage_7046": "A variável '{0}' implicitamente tem o tipo '{1}' em algumas localizações, mas um tipo melhor pode ser inferido do uso.", + "Variable_0_implicitly_has_type_1_in_some_locations_where_its_type_cannot_be_determined_7034": "A variável '{0}' tem implicitamente o tipo '{1}' em alguns locais onde o tipo não pode ser determinado.", + "Variable_0_is_used_before_being_assigned_2454": "A variável '{0}' é usada antes de ser atribuída.", + "Variable_declaration_expected_1134": "Declaração de variável esperada.", + "Variable_declaration_list_cannot_be_empty_1123": "A lista de declaração de variável não pode estar vazia.", + "Variable_declaration_not_allowed_at_this_location_1440": "A declaração de variável não é permitida neste local.", + "Variable_must_have_an_explicit_type_annotation_with_isolatedDeclarations_9010": "A variável deve ter uma anotação de tipo explícita com --isolatedDeclarations.", + "Variables_with_multiple_declarations_cannot_be_inlined_95186": "Variáveis com várias declarações não podem ser embutidas.", + "Variadic_element_at_position_0_in_source_does_not_match_element_at_position_1_in_target_2625": "O elemento variádico na posição {0} na fonte não corresponde ao elemento na posição {1} no destino.", + "Variance_annotations_are_only_supported_in_type_aliases_for_object_function_constructor_and_mapped_t_2637": "Só há suporte para anotações de variação em aliases do tipo para objetos, funções, construtores e tipos mapeados.", + "Version_0_6029": "Versão {0}", + "Visit_https_Colon_Slash_Slashaka_ms_Slashtsconfig_to_read_more_about_this_file_95110": "Visite https://aka.ms/tsconfig para ler mais sobre este arquivo", + "WATCH_OPTIONS_6918": "OPÇÕES DE INSPEÇÃO", + "Watch_and_Build_Modes_6250": "Modos Inspeção e Compilação", + "Watch_input_files_6005": "Observe os arquivos de entrada.", + "Watch_option_0_requires_a_value_of_type_1_5080": "A opção do observador '{0}' requer um valor do tipo {1}.", + "We_can_only_write_a_type_for_0_by_adding_a_type_for_the_entire_parameter_here_2843": "Só podemos gravar um tipo de '{0}' adicionando um tipo para o parâmetro inteiro aqui.", + "When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible_6698": "Ao atribuir funções, certifique-se que os parâmetros e os valores de retorno sejam compatíveis com subtipo.", + "When_type_checking_take_into_account_null_and_undefined_6699": "Quando a fizer a verificação de tipo, considere 'null' e 'undefined'.", + "Whether_to_keep_outdated_console_output_in_watch_mode_instead_of_clearing_the_screen_6191": "Se é necessário manter a saída de console desatualizada no modo de inspeção, em vez de limpar a tela.", + "Wrap_all_invalid_characters_in_an_expression_container_95109": "Encapsular todos os caracteres inválidos em um contêiner de expressão", + "Wrap_all_invalid_decorator_expressions_in_parentheses_95195": "Encapsular todas as expressões de decorador inválidas entre parênteses", + "Wrap_all_object_literal_with_parentheses_95116": "Colocar todo o literal de objeto entre parênteses", + "Wrap_all_unparented_JSX_in_JSX_fragment_95121": "Empacotar todos os JSXs sem pai no fragmento de JSX", + "Wrap_in_JSX_fragment_95120": "Encapsular o fragmento de JSX", + "Wrap_in_parentheses_95194": "Encapsular entre parênteses", + "Wrap_invalid_character_in_an_expression_container_95108": "Encapsular caractere inválido em um contêiner de expressão", + "Wrap_the_following_body_with_parentheses_which_should_be_an_object_literal_95113": "Colocar entre parênteses o corpo a seguir, que deve ser um literal de objeto", + "You_can_learn_about_all_of_the_compiler_options_at_0_6913": "Você pode aprender sobre todas as opções do compilador em {0}", + "You_cannot_rename_a_module_via_a_global_import_8031": "Não é possível renomear um módulo por meio de uma importação global.", + "You_cannot_rename_elements_that_are_defined_in_a_node_modules_folder_8035": "Não é possível renomear elementos definidos em uma pasta 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_another_node_modules_folder_8036": "Não é possível renomear elementos definidos em outra pasta 'node_modules'.", + "You_cannot_rename_elements_that_are_defined_in_the_standard_TypeScript_library_8001": "Não é possível renomear elementos que são definidos na biblioteca TypeScript padrão.", + "You_cannot_rename_this_element_8000": "Você não pode renomear este elemento.", + "_0_accepts_too_few_arguments_to_be_used_as_a_decorator_here_Did_you_mean_to_call_it_first_and_write__1329": "'{0}' aceita muito poucos argumentos para serem usados como um decorador aqui. Você quis dizer para chamá-lo primeiro e gravar '@{0}()'?", + "_0_and_1_index_signatures_are_incompatible_2330": "As assinaturas de índice '{0}' e '{1}' são incompatíveis.", + "_0_and_1_operations_cannot_be_mixed_without_parentheses_5076": "As operações '{0}' e '{1}' não podem ser combinadas sem parênteses.", + "_0_are_specified_twice_The_attribute_named_0_will_be_overwritten_2710": "'{0}' são especificados duas vezes. O atributo chamado '{0}' será substituído.", + "_0_at_the_end_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17019": "'{0}' no final de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", + "_0_at_the_start_of_a_type_is_not_valid_TypeScript_syntax_Did_you_mean_to_write_1_17020": "'{0}' no início de um tipo não é uma sintaxe TypeScript válida. Você quis escrever '{1}'?", + "_0_can_only_be_imported_by_turning_on_the_esModuleInterop_flag_and_using_a_default_import_2596": "'{0}' só pode ser importado ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", + "_0_can_only_be_imported_by_using_a_default_import_2595": "'{0}' só pode ser importado usando uma importação padrão.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_turning_on_the_esModuleInterop_flag_and_using__2598": "'{0}' só pode ser importado usando uma chamada 'require' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", + "_0_can_only_be_imported_by_using_a_require_call_or_by_using_a_default_import_2597": "'{0}' só pode ser importado usando uma chamada 'require' ou usando uma importação padrão.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_a_default_import_2616": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou uma importação padrão.", + "_0_can_only_be_imported_by_using_import_1_require_2_or_by_turning_on_the_esModuleInterop_flag_and_us_2617": "'{0}' só pode ser importado usando 'import {1} = require({2})' ou ativando o sinalizador 'esModuleInterop' e usando uma importação padrão.", + "_0_cannot_be_used_as_a_JSX_component_2786": "O módulo '{0}' não pode ser usado como um componente JSX.", + "_0_cannot_be_used_as_a_value_because_it_was_exported_using_export_type_1362": "'{0}' não pode ser usado como um valor porque foi exportado usando 'tipo de exportação'.", + "_0_cannot_be_used_as_a_value_because_it_was_imported_using_import_type_1361": "'{0}' não pode ser usado como um valor porque foi importado usando 'tipo de importação'.", + "_0_components_don_t_accept_text_as_child_elements_Text_in_JSX_has_the_type_string_but_the_expected_t_2747": "Os componentes '{0}' não aceitam texto como elementos filho. O texto em JSX tem o tipo 'cadeia de caracteres', mas o tipo esperado de '{1}' é '{2}'.", + "_0_could_be_instantiated_with_an_arbitrary_type_which_could_be_unrelated_to_1_5082": "Uma instância de '{0}' poderia ser criada com um tipo arbitrário que poderia não estar relacionado a '{1}'.", + "_0_declarations_can_only_be_declared_inside_a_block_1156": "Declarações '{0}' só podem ser declaradas dentro de um bloco.", + "_0_declarations_can_only_be_used_in_TypeScript_files_8006": "As declarações '{0}' só podem ser usadas em arquivos TypeScript.", + "_0_declarations_may_not_have_binding_patterns_1492": "Declarações '{0}' podem não ter padrões de associação.", + "_0_declarations_must_be_initialized_1155": "Declarações '{0}' devem ser inicializadas.", + "_0_expected_1005": "'{0}' esperado.", + "_0_has_a_string_type_but_must_have_syntactically_recognizable_string_syntax_when_isolatedModules_is__18055": "'{0}' tem um tipo de cadeia de caracteres, mas deve ter sintaxe de cadeia de caracteres reconhecível sintaticamente quando 'isolatedModules' está habilitado.", + "_0_has_no_exported_member_named_1_Did_you_mean_2_2724": "'{0}' não tem nenhum membro exportado chamado '{1}'. Você quis dizer '{2}'?", + "_0_implicitly_has_an_1_return_type_but_a_better_type_may_be_inferred_from_usage_7050": "'{0}' tem implicitamente um tipo de retorno '{1}', mas um tipo melhor pode ser inferido do uso.", + "_0_implicitly_has_return_type_any_because_it_does_not_have_a_return_type_annotation_and_is_reference_7023": "Implicitamente, '{0}' tem um retorno tipo 'any' porque ele não tem uma anotação de tipo de retorno e é referenciado direta ou indiretamente em uma das suas expressões de retorno.", + "_0_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_and_is_referenced_directly_or__7022": "Implicitamente, '{0}' tem o tipo 'any' porque não tem uma anotação de tipo e é referenciado direta ou indiretamente em seu próprio inicializador.", + "_0_index_signatures_are_incompatible_2634": "'{0}' assinaturas de índice são incompatíveis.", + "_0_index_type_1_is_not_assignable_to_2_index_type_3_2413": "'{0}' tipo de índice '{1}' não pode ser atribuído a '{2}' tipo de índice '{3}'.", + "_0_is_a_primitive_but_1_is_a_wrapper_object_Prefer_using_0_when_possible_2692": "'{0}' é um primitivo, mas '{1}' é um objeto de wrapper. Prefira usar '{0}' quando possível.", + "_0_is_a_type_and_cannot_be_imported_in_JavaScript_files_Use_1_in_a_JSDoc_type_annotation_18042": "'{0}' é um tipo e não pode ser importado em arquivos JavaScript. Use '{1}' em uma anotação de tipo JSDoc.", + "_0_is_a_type_and_must_be_imported_using_a_type_only_import_when_verbatimModuleSyntax_is_enabled_1484": "'{0}' é um tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", + "_0_is_an_unused_renaming_of_1_Did_you_intend_to_use_it_as_a_type_annotation_2842": "'{0}' é uma renomeação não usada de '{1}'. Você pretendia usá-lo como uma anotação de tipo?", + "_0_is_assignable_to_the_constraint_of_type_1_but_1_could_be_instantiated_with_a_different_subtype_of_5075": "'{0}' é atribuível à restrição do tipo '{1}', mas é possível criar uma instância de '{1}' com um subtipo diferente de restrição '{2}'.", + "_0_is_automatically_exported_here_18044": "'{0}' é exportado automaticamente aqui.", + "_0_is_declared_but_its_value_is_never_read_6133": "'{0}' é declarado, mas seu valor nunca é lido.", + "_0_is_declared_but_never_used_6196": "'{0}' está declarado, mas nunca foi usado.", + "_0_is_declared_here_2728": "'{0}' é declarado aqui.", + "_0_is_defined_as_a_property_in_class_1_but_is_overridden_here_in_2_as_an_accessor_2611": "'{0}' está definido como uma propriedade na classe '{1}', mas é substituído aqui em '{2}' como um acessador.", + "_0_is_defined_as_an_accessor_in_class_1_but_is_overridden_here_in_2_as_an_instance_property_2610": "'{0}' está definido como um acessador na classe '{1}', mas é substituído aqui em '{2}' como uma propriedade de instância.", + "_0_is_deprecated_6385": "'{0}' foi preterido.", + "_0_is_not_a_valid_meta_property_for_keyword_1_Did_you_mean_2_17012": "'{0}' não é uma metapropriedade para a palavra-chave '{1}'. Você quis dizer '{2}'?", + "_0_is_not_a_valid_meta_property_for_keyword_import_Did_you_mean_meta_or_defer_18061": "\"{0}\" não é uma meta-propriedade válida para a palavra-chave \"import\". Você quis dizer \"meta\" ou \"defer\"?", + "_0_is_not_allowed_as_a_parameter_name_1390": "'{0}' não é permitido como um nome de parâmetro.", + "_0_is_not_allowed_as_a_variable_declaration_name_1389": "'{0}' não é permitido como um nome de declaração de variável.", + "_0_is_of_type_unknown_18046": "'{0}' é do tipo 'desconhecido'.", + "_0_is_possibly_null_18047": "'{0}' é possivelmente 'null'.", + "_0_is_possibly_null_or_undefined_18049": "'{0}' é possivelmente 'null' ou 'undefined'.", + "_0_is_possibly_undefined_18048": "'{0}' é possivelmente 'indefinido'.", + "_0_is_referenced_directly_or_indirectly_in_its_own_base_expression_2506": "'{0}' é referenciado direta ou indiretamente em sua própria expressão base.", + "_0_is_referenced_directly_or_indirectly_in_its_own_type_annotation_2502": "'{0}' é referenciado direta ou indiretamente em sua própria anotação de tipo.", + "_0_is_specified_more_than_once_so_this_usage_will_be_overwritten_2783": "'{0}' foi especificado mais de uma vez, portanto esse uso será substituído.", + "_0_list_cannot_be_empty_1097": "A lista '{0}' não pode estar vazia.", + "_0_modifier_already_seen_1030": "O modificador '{0}' já foi visto.", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_class_interface_or_type_alias_1274": "O modificador '{0}' pode aparecer apenas em um parâmetro de tipo de uma classe, interface ou alias de tipo", + "_0_modifier_can_only_appear_on_a_type_parameter_of_a_function_method_or_class_1277": "O modificador '{0}' só pode aparecer em um parâmetro de tipo de uma função, método ou classe", + "_0_modifier_cannot_appear_on_a_constructor_declaration_1089": "O modificador '{0}' não pode aparecer em uma declaração de construtor.", + "_0_modifier_cannot_appear_on_a_module_or_namespace_element_1044": "O modificador '{0}' não pode aparecer em um módulo ou elemento de namespace.", + "_0_modifier_cannot_appear_on_a_parameter_1090": "O modificador '{0}' não pode aparecer em um parâmetro.", + "_0_modifier_cannot_appear_on_a_type_member_1070": "O modificador '{0}' não pode aparecer em um membro de tipo.", + "_0_modifier_cannot_appear_on_a_type_parameter_1273": "O modificador '{0}' não pode aparecer em um parâmetro de tipo", + "_0_modifier_cannot_appear_on_a_using_declaration_1491": "O modificador '{0}' não pode aparecer em uma declaração 'using'.", + "_0_modifier_cannot_appear_on_an_await_using_declaration_1495": "O modificador '{0}' não pode aparecer em uma declaração 'await using'.", + "_0_modifier_cannot_appear_on_an_index_signature_1071": "O modificador '{0}' não pode aparecer em uma assinatura de índice.", + "_0_modifier_cannot_appear_on_class_elements_of_this_kind_1031": "O modificador '{0}' não pode aparecer em elementos de classe deste tipo.", + "_0_modifier_cannot_be_used_here_1042": "O modificador '{0}' não pode ser usado aqui.", + "_0_modifier_cannot_be_used_in_an_ambient_context_1040": "O modificador '{0}' não pode ser usado em um contexto de ambiente.", + "_0_modifier_cannot_be_used_with_1_modifier_1243": "O modificador '{0}' não pode ser usado com um modificador '{1}'.", + "_0_modifier_cannot_be_used_with_a_private_identifier_18019": "O modificador '{0}' não pode ser usado com um identificador privado.", + "_0_modifier_must_precede_1_modifier_1029": "O modificador '{0}' deve preceder o modificador '{1}'.", + "_0_must_be_followed_by_a_Unicode_property_value_expression_enclosed_in_braces_1531": "'\\{0}' deve ser seguido por uma expressão de valor de propriedade Unicode entre chaves.", + "_0_needs_an_explicit_type_annotation_2782": "'{0}' precisa de uma anotação de tipo explícita.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_namespace_here_2702": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um namespace aqui.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_2693": "'{0}' só faz referência a um tipo, mas está sendo usado como valor no momento.", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Did_you_mean_to_use_1_in_0_2690": "'{0}' faz referência somente a um tipo, mas está sendo usado como um valor aqui. Você quis usar '{1} em {0}'?", + "_0_only_refers_to_a_type_but_is_being_used_as_a_value_here_Do_you_need_to_change_your_target_library_2585": "'{0}' refere-se apenas a um tipo, mas está sendo usado como um valor aqui. Você precisa alterar sua biblioteca de destino? Tente alterar a opção 'lib' do compilador para es2015 ou posterior.", + "_0_refers_to_a_UMD_global_but_the_current_file_is_a_module_Consider_adding_an_import_instead_2686": "'{0}' refere-se a uma UMD global, mas o arquivo atual é um módulo. Considere adicionar uma importação.", + "_0_refers_to_a_value_but_is_being_used_as_a_type_here_Did_you_mean_typeof_0_2749": "'{0}' refere-se a um valor, mas está sendo usado como um tipo aqui. Você quis dizer 'typeof {0}'?", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", + "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292": "'{0}' resolve para um tipo e deve ser marcado como somente tipo neste arquivo antes de exportar novamente quando '{1}' está habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_imported_using_a_type_only_import_when_verbatimMo_1485": "'{0}' resolve para uma declaração somente de tipo e deve ser importado usando uma importação somente de tipo quando 'texttimModuleSyntax' está habilitado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1289": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere usar o 'tipo de importação' em que '{0}' é importado.", + "_0_resolves_to_a_type_only_declaration_and_must_be_marked_type_only_in_this_file_before_re_exporting_1290": "'{0}' resolve para uma declaração somente de tipo e deve ser marcado como somente tipo nesse arquivo antes de exportar novamente quando '{1}' estiver habilitado. Considere o uso do 'tipo de exportação { {0} como padrão }'.", + "_0_resolves_to_a_type_only_declaration_and_must_be_re_exported_using_a_type_only_re_export_when_1_is_1448": "'{0}' resolve para uma declaração apenas de tipo e deve ser reexportada usando uma reexportação apenas de tipo quando '{1}' está habilitado.", + "_0_should_be_set_inside_the_compilerOptions_object_of_the_config_json_file_6258": "'{0}' deve ser colocado dentro do objeto 'compilerOptions' do arquivo config json", + "_0_tag_already_specified_1223": "A marca '{0}' já foi especificada.", + "_0_was_also_declared_here_6203": "'{0}' também foi declarado aqui.", + "_0_was_exported_here_1377": "'{0}' foi exportado aqui.", + "_0_was_imported_here_1376": "'{0}' foi importado aqui.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_return_type_7010": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de retorno '{1}'.", + "_0_which_lacks_return_type_annotation_implicitly_has_an_1_yield_type_7055": "'{0}', que não tem a anotação de tipo de retorno, implicitamente tem um tipo de rendimento '{1}'.", + "abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration_1242": "O modificador 'abstract' pode aparecer somente em uma declaração de classe, método ou propriedade.", + "accessor_modifier_can_only_appear_on_a_property_declaration_1275": "o modificador 'acessador' só pode aparecer em uma declaração de propriedade.", + "and_here_6204": "e aqui.", + "and_npm_install_D_types_Slashnode_6290": "e npm install -D @types/node", + "arguments_cannot_be_referenced_in_property_initializers_or_class_static_initialization_blocks_2815": "\"arguments\" não podem ser referenciados em inicializadores de propriedade ou blocos de inicialização estática de classe.", + "auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_w_1476": "\"auto\": trata os arquivos com import, export, import.meta, jsx (com jsx: react-jsx) ou formato esm (com module: node16+) como módulos.", + "await_expression_cannot_be_used_inside_a_class_static_block_18037": "A expressão 'await' não pode ser usada dentro de um bloco estático de classe.", + "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375": "As expressões 'await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas não tem importações ou exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308": "As expressões 'await' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", + "await_expressions_cannot_be_used_in_a_parameter_initializer_2524": "As expressões 'await' não podem ser usadas em inicializadores de parâmetros.", + "await_has_no_effect_on_the_type_of_this_expression_80007": "'await' não tem efeito sobre o tipo desta expressão.", + "await_using_declarations_are_not_allowed_in_ambient_contexts_1546": "Declarações \"await using\" não são permitidas em contextos de ambiente.", + "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853": "As instruções 'for await' só são permitidas no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852": "Instruções 'await using' só são permitidas em funções assíncronas e nos níveis superiores de módulos.", + "await_using_statements_cannot_be_used_inside_a_class_static_block_18054": "Instruções 'await using' não podem ser usadas dentro de um bloco estático de classe.", + "baseUrl_option_is_set_to_0_using_this_value_to_resolve_non_relative_module_name_1_6106": "A opção 'baseUrl' é configurada para '{0}', usando este valor para resolver o nome de módulo não relativo '{1}'.", + "c_must_be_followed_by_an_ASCII_letter_1512": "'\\c' deve ser seguido por uma letra ASCII.", + "can_only_be_used_at_the_start_of_a_file_18026": "'#!' só pode ser usado no início de um arquivo.", + "case_or_default_expected_1130": "'case' ou 'default' esperado.", + "catch_or_finally_expected_1472": "é esperado 'catch' ou 'finally'.", + "const_enum_member_initializer_was_evaluated_to_a_non_finite_value_2477": "O inicializador de membro de enumeração 'const' foi avaliado como um valor não finito.", + "const_enum_member_initializer_was_evaluated_to_disallowed_value_NaN_2478": "O inicializador de membro de enumeração 'const' foi avaliado como o valor não permitido 'NaN'.", + "const_enum_member_initializers_must_be_constant_expressions_2474": "Os inicializadores de membro de enumeração const devem ser expressões constantes.", + "const_enums_can_only_be_used_in_property_or_index_access_expressions_or_the_right_hand_side_of_an_im_2475": "Enumerações 'const' só podem ser usadas em expressões de acesso de índice ou propriedade, ou então do lado direito de uma consulta de tipo, declaração de importação ou atribuição de exportação.", + "constructor_cannot_be_used_as_a_parameter_property_name_2398": "Não é possível usar 'constructor' como nome de uma propriedade de parâmetro.", + "constructor_is_a_reserved_word_18012": "'#constructor' é uma palavra reservada.", + "default_Colon_6903": "padrão:", + "delete_cannot_be_called_on_an_identifier_in_strict_mode_1102": "'delete' não pode ser chamado em um identificador no modo estrito.", + "export_Asterisk_does_not_re_export_a_default_1195": "'export *' não exporta novamente um padrão.", + "export_can_only_be_used_in_TypeScript_files_8003": "'export =' só pode ser usado em arquivos TypeScript.", + "export_modifier_cannot_be_applied_to_ambient_modules_and_module_augmentations_since_they_are_always__2668": "O modificador 'export' não pode ser aplicado a módulos de ambiente e acréscimos de módulo, pois eles estão sempre visíveis.", + "extends_clause_already_seen_1172": "A cláusula 'extends' já foi vista.", + "extends_clause_must_precede_implements_clause_1173": "A cláusula 'extends' deve preceder a cláusula 'implements'.", + "extends_clause_of_exported_class_0_has_or_is_using_private_name_1_4020": "A cláusula 'extends' da classe exportada '{0}' tem ou está usando o nome particular '{1}'.", + "extends_clause_of_exported_class_has_or_is_using_private_name_0_4021": "A cláusula 'extends' da classe exportada tem ou está usando o nome particular '{0}'.", + "extends_clause_of_exported_interface_0_has_or_is_using_private_name_1_4022": "A cláusula 'extends' da interface exportada '{0}' tem ou está usando o nome particular '{1}'.", + "false_unless_composite_is_set_6906": "`false`, a menos que `composite` esteja definido", + "false_unless_strict_is_set_6905": "`false`, a menos que `strict` esteja definido", + "file_6025": "arquivo", + "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431": "Os loops 'for await' só são permitidos no nível superior de um arquivo quando esse arquivo é um módulo, mas este arquivo não tem importações nem exportações. Considere adicionar um 'export {}' vazio para transformar este arquivo em um módulo.", + "for_await_loops_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1103": "Os loops 'for await' só são permitidos em funções assíncronas e nos níveis superiores dos módulos.", + "for_await_loops_cannot_be_used_inside_a_class_static_block_18038": "Os loops 'for await' não podem ser usados dentro de um bloco estático de classe.", + "get_and_set_accessors_cannot_declare_this_parameters_2784": "os acessadores 'get' e 'set' não podem declarar os parâmetros 'this'.", + "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908": "`[]` se `files` for especificado, caso contrário `[\"**/*\"]5D;`", + "implements_clause_already_seen_1175": "A cláusula 'implements' já foi vista.", + "implements_clauses_can_only_be_used_in_TypeScript_files_8005": "Cláusulas 'implements' só podem ser usadas em arquivos TypeScript.", + "import_can_only_be_used_in_TypeScript_files_8002": "'import ... =' só pode ser usado em arquivos TypeScript.", + "infer_declarations_are_only_permitted_in_the_extends_clause_of_a_conditional_type_1338": "As declarações 'infer' só são permitidas na cláusula 'extends' de um tipo condicional.", + "k_must_be_followed_by_a_capturing_group_name_enclosed_in_angle_brackets_1510": "'\\k' deve ser seguido por um nome de grupo de captura entre colchetes angulares.", + "let_is_not_allowed_to_be_used_as_a_name_in_let_or_const_declarations_2480": "O uso de 'let' não é permitido como um nome em declarações 'let' ou 'const'.", + "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010": "módulo === `AMD` ou `UMD` ou `System` ou `ES6` e `Classic`. Caso contrário, `Node`", + "module_system_or_esModuleInterop_6904": "módulo === \"system\" ou esModuleInterop", + "new_expression_whose_target_lacks_a_construct_signature_implicitly_has_an_any_type_7009": "A expressão 'new', cujo destino não tem uma assinatura de constructo, implicitamente tem um tipo 'any'.", + "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907": "`[\" node_modules \",\" bower_components \",\" jspm_packages \"]`, mais o valor de `outDir`, caso seja especificado.", + "one_of_Colon_6900": "um dos:", + "one_or_more_Colon_6901": "um ou mais:", + "options_6024": "opções", + "or_JSX_element_expected_1145": "'{' ou elemento JSX esperado.", + "or_expected_1144": "'{' ou ';' esperado.", + "package_json_does_not_have_a_0_field_6100": "'package.json' não tem um campo '{0}'.", + "package_json_does_not_have_a_typesVersions_entry_that_matches_version_0_6207": "'package.json' não tem uma entrada 'typesVersions' que corresponda à versão '{0}'.", + "package_json_had_a_falsy_0_field_6220": "'package.json' teve um campo '{0}' false.", + "package_json_has_0_field_1_that_references_2_6101": "'package.json' tem '{0}' campo '{1}' que faz referência a '{2}'.", + "package_json_has_a_peerDependencies_field_6281": "'package.json' tem um campo 'peerDependencies'.", + "package_json_has_a_typesVersions_entry_0_that_is_not_a_valid_semver_range_6209": "'package.json' tem uma entrada 'typesVersions' '{0}' que não é um intervalo semver válido.", + "package_json_has_a_typesVersions_entry_0_that_matches_compiler_version_1_looking_for_a_pattern_to_ma_6208": "'package.json' tem uma entrada 'typesVersions' '{0}' que corresponde à versão do compilador '{1}', procurando por um padrão que corresponda ao nome do módulo '{2}'.", + "package_json_has_a_typesVersions_field_with_version_specific_path_mappings_6206": "'package.json' tem um campo 'typesVersions' com mapeamentos de caminho específicos à versão.", + "package_json_scope_0_explicitly_maps_specifier_1_to_null_6274": "O escopo package.json '{0}' mapeia explicitamente o especificador '{1}' para nulo.", + "package_json_scope_0_has_invalid_type_for_target_of_specifier_1_6275": "O escopo package.json '{0}' tem um tipo inválido para o destino do especificador '{1}'", + "package_json_scope_0_has_no_imports_defined_6273": "O escopo package.json '{0}' não tem importações definidas.", + "paths_option_is_specified_looking_for_a_pattern_to_match_module_name_0_6091": "A opção 'paths' é especificada, procurando por um padrão para corresponder ao nome do módulo '{0}'.", + "q_is_only_available_inside_character_class_1511": "'\\q' só está disponível dentro da classe de caracteres.", + "q_must_be_followed_by_string_alternatives_enclosed_in_braces_1521": "'\\q' deve ser seguido por alternativas de cadeia de caracteres entre chaves.", + "readonly_modifier_can_only_appear_on_a_property_declaration_or_index_signature_1024": "O modificador 'readonly' pode aparecer somente em uma declaração de propriedade ou assinatura de índice.", + "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354": "O modificador de tipo 'readonly' só é permitido em tipos literais de matriz e tupla.", + "require_call_may_be_converted_to_an_import_80005": "A chamada 'require' pode ser convertida em uma importação.", + "resolution_mode_can_only_be_set_for_type_only_imports_1454": "`resolution-mode` pode ser definido apenas para importações somente de tipo.", + "resolution_mode_is_the_only_valid_key_for_type_import_assertions_1455": "`resolution-mode` é a única chave válida para as asserções de importação de tipo.", + "resolution_mode_is_the_only_valid_key_for_type_import_attributes_1463": "'resolution-mode' é a única chave válida para os atributos de importação de tipo.", + "resolution_mode_should_be_either_require_or_import_1453": "'resolution-mode' deve ser 'require' ou 'import'.", + "rootDirs_option_is_set_using_it_to_resolve_relative_module_name_0_6107": "A opção 'rootDirs' está configurada, usando-a para resolver o nome de módulo relativo '{0}'.", + "super_can_only_be_referenced_in_a_derived_class_2335": "'super' só pode ser referenciado em uma classe derivada.", + "super_can_only_be_referenced_in_members_of_derived_classes_or_object_literal_expressions_2660": "'super' pode ser referido somente em membros de classes derivadas ou expressões literais de objeto.", + "super_cannot_be_referenced_in_a_computed_property_name_2466": "'super' não pode ser referenciado em um nome de propriedade calculado.", + "super_cannot_be_referenced_in_constructor_arguments_2336": "'super' não pode ser referenciado nos argumentos do construtor.", + "super_is_only_allowed_in_members_of_object_literal_expressions_when_option_target_is_ES2015_or_highe_2659": "'super' é permitido somente em membros de expressões literais de objeto quando a opção 'target' é 'ES2015' ou maior.", + "super_may_not_use_type_arguments_2754": "'super' não pode usar argumentos de tipo.", + "super_must_be_called_before_accessing_a_property_of_super_in_the_constructor_of_a_derived_class_17011": "'super' deve ser chamado antes de acessar uma propriedade de 'super' no construtor de uma classe derivada.", + "super_must_be_called_before_accessing_this_in_the_constructor_of_a_derived_class_17009": "'super' deve ser chamado antes de acessar 'this' no construtor de uma classe derivada.", + "super_must_be_followed_by_an_argument_list_or_member_access_1034": "'super' deve ser seguido por um acesso de membro ou lista de argumentos.", + "super_property_access_is_permitted_only_in_a_constructor_member_function_or_member_accessor_of_a_der_2338": "O acesso à propriedade 'super' só é permitido em um construtor, em funções de membros ou acessadores de membros de uma classe derivada.", + "this_cannot_be_referenced_in_a_computed_property_name_2465": "'this' não pode ser referenciado em um nome de propriedade calculado.", + "this_cannot_be_referenced_in_a_module_or_namespace_body_2331": "'this' não pode ser referenciado em um corpo de módulo ou de namespace.", + "this_cannot_be_referenced_in_a_static_property_initializer_2334": "'this' não pode ser referenciado em um inicializador de propriedade estática.", + "this_cannot_be_referenced_in_current_location_2332": "'this' não pode ser referenciado no local atual.", + "this_implicitly_has_type_any_because_it_does_not_have_a_type_annotation_2683": "'this' implicitamente tem o tipo 'any' porque não tem uma anotação de tipo.", + "true_for_ES2022_and_above_including_ESNext_6930": "'True' para ES2022 e acima, incluindo ESNext.", + "true_if_composite_false_otherwise_6909": "`true` se` composite`, `false` caso contrário", + "true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false_6411": "'true' quando 'moduleResolution' é 'node16', 'nodenext' ou 'bundler'; caso contrário, \"false\".", + "tsc_Colon_The_TypeScript_Compiler_6922": "tsc: o Compilador TypeScript", + "type_Colon_6902": "tipo:", + "unique_symbol_types_are_not_allowed_here_1335": "Tipos de 'unique symbol' não são permitidos aqui.", + "unique_symbol_types_are_only_allowed_on_variables_in_a_variable_statement_1334": "Tipos de 'unique symbol' são permitidos apenas em variáveis em uma declaração de variável.", + "unique_symbol_types_may_not_be_used_on_a_variable_declaration_with_a_binding_name_1333": "Tipos de 'unique symbol' não podem ser usados em uma declaração de variável com um nome associado.", + "use_strict_directive_cannot_be_used_with_non_simple_parameter_list_1347": "A diretiva 'use strict' não pode ser usada com uma lista de parâmetros não simples.", + "use_strict_directive_used_here_1349": "A diretiva 'use strict' usada aqui.", + "using_declarations_are_not_allowed_in_ambient_contexts_1545": "Declarações \"using\" não são permitidas em contextos de ambiente.", + "with_statements_are_not_allowed_in_an_async_function_block_1300": "As declarações 'with' não são permitidas em blocos de funções assíncronas.", + "with_statements_are_not_allowed_in_strict_mode_1101": "Instruções 'with' não são permitidas no modo estrito.", + "yield_expression_implicitly_results_in_an_any_type_because_its_containing_generator_lacks_a_return_t_7057": "Expressão 'yield' resulta implicitamente em um tipo 'any' porque seu gerador contido não tem uma anotação de tipo de retorno.", + "yield_expressions_cannot_be_used_in_a_parameter_initializer_2523": "As expressões 'yield' não podem ser usadas em inicializadores de parâmetros." +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/90/572065693ee89641dea524e2945d7059557dae753cc8035f78cc19c6f0705bd51e400bbe41d7a47eea5cab9b9c343d068d1cef547668b4ac1955abd8f4c48e b/.pnpm-store/v11/files/90/572065693ee89641dea524e2945d7059557dae753cc8035f78cc19c6f0705bd51e400bbe41d7a47eea5cab9b9c343d068d1cef547668b4ac1955abd8f4c48e new file mode 100644 index 00000000..f8de0630 --- /dev/null +++ b/.pnpm-store/v11/files/90/572065693ee89641dea524e2945d7059557dae753cc8035f78cc19c6f0705bd51e400bbe41d7a47eea5cab9b9c343d068d1cef547668b4ac1955abd8f4c48e @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2018, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/90/593a81296a4f848dcd1302eea531f848fb574232dc289230c4302ae535552ae6437bda0684ca595857e48dc5fe46ecabd82bab63925a05c63b270af4a84236 b/.pnpm-store/v11/files/90/593a81296a4f848dcd1302eea531f848fb574232dc289230c4302ae535552ae6437bda0684ca595857e48dc5fe46ecabd82bab63925a05c63b270af4a84236 new file mode 100644 index 00000000..0a7bce4f --- /dev/null +++ b/.pnpm-store/v11/files/90/593a81296a4f848dcd1302eea531f848fb574232dc289230c4302ae535552ae6437bda0684ca595857e48dc5fe46ecabd82bab63925a05c63b270af4a84236 @@ -0,0 +1,54 @@ +# 1.0.0 - 2016-01-07 + +- Removed: unused speed test +- Added: Automatic routing between previously unsupported conversions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `xxx2xxx()` and `xxx2xxxRaw()` functions +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Removed: `convert()` class +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: all functions to lookup dictionary +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Changed: `ansi` to `ansi256` +([#27](https://github.com/Qix-/color-convert/pull/27)) +- Fixed: argument grouping for functions requiring only one argument +([#27](https://github.com/Qix-/color-convert/pull/27)) + +# 0.6.0 - 2015-07-23 + +- Added: methods to handle +[ANSI](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) 16/256 colors: + - rgb2ansi16 + - rgb2ansi + - hsl2ansi16 + - hsl2ansi + - hsv2ansi16 + - hsv2ansi + - hwb2ansi16 + - hwb2ansi + - cmyk2ansi16 + - cmyk2ansi + - keyword2ansi16 + - keyword2ansi + - ansi162rgb + - ansi162hsl + - ansi162hsv + - ansi162hwb + - ansi162cmyk + - ansi162keyword + - ansi2rgb + - ansi2hsl + - ansi2hsv + - ansi2hwb + - ansi2cmyk + - ansi2keyword +([#18](https://github.com/harthur/color-convert/pull/18)) + +# 0.5.3 - 2015-06-02 + +- Fixed: hsl2hsv does not return `NaN` anymore when using `[0,0,0]` +([#15](https://github.com/harthur/color-convert/issues/15)) + +--- + +Check out commit logs for older releases diff --git a/.pnpm-store/v11/files/90/64da0eb707f98033e842e542a2f713f911da57b65370e67f9e99754416088de8004325fce789c960ef834cc92a273fc0d7b9fcf32150832d8a75f2ace12143-exec b/.pnpm-store/v11/files/90/64da0eb707f98033e842e542a2f713f911da57b65370e67f9e99754416088de8004325fce789c960ef834cc92a273fc0d7b9fcf32150832d8a75f2ace12143-exec new file mode 100755 index 00000000..556a5097 --- /dev/null +++ b/.pnpm-store/v11/files/90/64da0eb707f98033e842e542a2f713f911da57b65370e67f9e99754416088de8004325fce789c960ef834cc92a273fc0d7b9fcf32150832d8a75f2ace12143-exec @@ -0,0 +1,160 @@ +#!/usr/bin/env node + +var Parser = require('../') +var etoa = require('events-to-array') +var util = require('util') + +var args = process.argv.slice(2) +var json = null +var bail = false +var preserveWhitespace = true +var omitVersion = false + +function version () { + console.log(require('../package.json').version) + process.exit(0) +} + +args.forEach(function (arg, i) { + if (arg === '-j') { + json = args[i + 1] || 2 + } else { + var m = arg.match(/^--json(?:=([0-9]+))$/) + if (m) + json = +m[1] || args[i + 1] || 2 + } + + if (arg === '-v' || arg === '--version') + version() + else if (arg === '-o' || arg === '--omit-version') + omitVersion = true + else if (arg === '-w' || arg === '--ignore-all-whitespace') + preserveWhitespace = false + else if (arg === '-b' || arg === '--bail') + bail = true + else if (arg === '-t' || arg === '--tap') + json = 'tap' + else if (arg === '-l' || arg === '--lines') + json = 'lines' + else if (arg === '-h' || arg === '--help') + usage() + else + console.error('Unrecognized arg: %j', arg) + + if (arg === '-v' || arg === '--version') + console.log(require('../package.json').version) +}) + +function usage () { + console.log(function () {/* +Usage: + tap-parser + +Parses TAP data from stdin, and outputs the parsed result +in the format specified by the options. Default output is +uses node's `util.format()` method. + +Options: + + -j [] | --json[=indent] + Output event data as JSON with the specified indentation (default=2) + + -t | --tap + Output data as reconstituted TAP based on parsed results + + -l | --lines + Output each parsed line as it is recognized by the parser + + -b | --bail + Emit a `Bail out!` at the first failed test point encountered + + -w | --ignore-all-whitespace + Skip over blank lines outside of YAML blocks + + -o | --omit-version + Ignore the `TAP version 13` line at the start of tests +*/}.toString().split('\n').slice(1, -1).join('\n')) + + if (!process.stdin.isTTY) + process.stdin.resume() + + process.exit() +} + +var yaml = require('js-yaml') +function tapFormat (msg, indent) { + return indent + msg.map(function (item) { + switch (item[0]) { + case 'child': + var comment = item[1][0] + var child = item[1].slice(1) + return tapFormat([comment], '') + tapFormat(child, ' ') + + case 'version': + return 'TAP version ' + item[1] + '\n' + + case 'plan': + var p = item[1].start + '..' + item[1].end + if (item[1].comment) + p += ' # ' + item[1].comment + return p + '\n' + + case 'pragma': + return 'pragma ' + (item[2] ? '+' : '-') + item[1] + '\n' + + case 'bailout': + var r = item[1] === true ? '' : (' ' + item[1]) + return 'Bail out!' + r + '\n' + + case 'assert': + var res = item[1] + return (res.ok ? '' : 'not ') + 'ok ' + res.id + + (res.name ? ' - ' + res.name.replace(/ \{$/, '') : '') + + (res.skip ? ' # SKIP' + + (res.skip === true ? '' : ' ' + res.skip) : '') + + (res.todo ? ' # TODO' + + (res.todo === true ? '' : ' ' + res.todo) : '') + + (res.time ? ' # time=' + res.time + 'ms' : '') + + '\n' + + (res.diag ? + ' ---\n ' + + yaml.safeDump(res.diag).split('\n').join('\n ').trim() + + '\n ...\n' + : '') + + case 'extra': + case 'comment': + return item[1] + } + }).join('').split('\n').join('\n' + indent).trim() + '\n' +} + +function format (msg) { + if (json === 'tap') + return tapFormat(msg, '') + else if (json !== null) + return JSON.stringify(msg, null, +json) + else + return util.inspect(events, null, Infinity) +} + +var options = { + bail: bail, + preserveWhitespace: preserveWhitespace, + omitVersion: omitVersion +} + +var parser = new Parser(options) +var events = etoa(parser, [ 'pipe', 'unpipe', 'prefinish', 'finish', 'line' ]) + +process.stdin.pipe(parser) +if (json === 'lines') + parser.on('line', function (l) { + process.stdout.write(l) + }) +else + process.on('exit', function () { + console.log(format(events)) + if (!parser.ok) + process.exit(1) + }) diff --git a/.pnpm-store/v11/files/90/7ca4d62d2a157d7d12c09071c87c995120c7013f3cd7c9866585335cc3e9bdd6d08c1c57f823a643c6ab43023d1872c7b66b5853f0ecc39215968c7e3e45da b/.pnpm-store/v11/files/90/7ca4d62d2a157d7d12c09071c87c995120c7013f3cd7c9866585335cc3e9bdd6d08c1c57f823a643c6ab43023d1872c7b66b5853f0ecc39215968c7e3e45da new file mode 100644 index 00000000..d0839f77 --- /dev/null +++ b/.pnpm-store/v11/files/90/7ca4d62d2a157d7d12c09071c87c995120c7013f3cd7c9866585335cc3e9bdd6d08c1c57f823a643c6ab43023d1872c7b66b5853f0ecc39215968c7e3e45da @@ -0,0 +1 @@ +module.exports = require('./every'); diff --git a/.pnpm-store/v11/files/90/8557cc7216182ca290530c7dadfd0fcb556049a6a6c54afd08e008d0ae46bd64b35ac048d86e3929960862a606cf4bd4a9d322cd3d407235591999bf7bc888 b/.pnpm-store/v11/files/90/8557cc7216182ca290530c7dadfd0fcb556049a6a6c54afd08e008d0ae46bd64b35ac048d86e3929960862a606cf4bd4a9d322cd3d407235591999bf7bc888 new file mode 100644 index 00000000..246efe09 --- /dev/null +++ b/.pnpm-store/v11/files/90/8557cc7216182ca290530c7dadfd0fcb556049a6a6c54afd08e008d0ae46bd64b35ac048d86e3929960862a606cf4bd4a9d322cd3d407235591999bf7bc888 @@ -0,0 +1,118 @@ +# object.omit [![NPM version](https://img.shields.io/npm/v/object.omit.svg?style=flat)](https://www.npmjs.com/package/object.omit) [![NPM monthly downloads](https://img.shields.io/npm/dm/object.omit.svg?style=flat)](https://npmjs.org/package/object.omit) [![NPM total downloads](https://img.shields.io/npm/dt/object.omit.svg?style=flat)](https://npmjs.org/package/object.omit) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object.omit.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object.omit) + +> Return a copy of an object excluding the given key, or array of keys. Also accepts an optional filter function as the last argument. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save object.omit +``` + +## Usage + +```js +var omit = require('object.omit'); +``` + +Pass a string `key` to omit: + +```js +omit({a: 'a', b: 'b', c: 'c'}, 'a') +//=> { b: 'b', c: 'c' } +``` + +Pass an array of `keys` to omit: + +```js +omit({a: 'a', b: 'b', c: 'c'}, ['a', 'c']) +//=> { b: 'b' } +``` + +Returns the object if no keys are passed: + +```js +omit({a: 'a', b: 'b', c: 'c'}) +//=> {a: 'a', b: 'b', c: 'c'} +``` + +Returns an empty object if no value is passed. + +```js +omit() +//=> {} +``` + +### Filter function + +An optional filter function may be passed as the last argument, with or without keys passed on the arguments: + +**filter on keys** + +```js +var res = omit({a: 'a', b: 'b', c: 'c'}, function (val, key) { + return key === 'a'; +}); +//=> {a: 'a'} +``` + +**filter on values** + +```js +var fn = function() {}; +var obj = {a: 'a', b: 'b', c: fn}; + +var res = omit(obj, ['a'], function (val, key) { + return typeof val !== 'function'; +}); +//=> {b: 'b'} +``` + +## About + +### Related projects + +* [object.defaults](https://www.npmjs.com/package/object.defaults): Like `extend` but only copies missing properties/values to the target object. | [homepage](https://github.com/jonschlinkert/object.defaults "Like `extend` but only copies missing properties/values to the target object.") +* [object.filter](https://www.npmjs.com/package/object.filter): Create a new object filtered to have only properties for which the callback returns true. | [homepage](https://github.com/jonschlinkert/object.filter "Create a new object filtered to have only properties for which the callback returns true.") +* [object.pick](https://www.npmjs.com/package/object.pick): Returns a filtered copy of an object with only the specified keys, similar to `_.pick… [more](https://github.com/jonschlinkert/object.pick) | [homepage](https://github.com/jonschlinkert/object.pick "Returns a filtered copy of an object with only the specified keys, similar to`_.pick` from lodash / underscore.") +* [object.pluck](https://www.npmjs.com/package/object.pluck): Like pluck from underscore / lo-dash, but returns an object composed of specified properties, with… [more](https://github.com/jonschlinkert/object.pluck) | [homepage](https://github.com/jonschlinkert/object.pluck "Like pluck from underscore / lo-dash, but returns an object composed of specified properties, with values unmodified from those of the original object.") +* [object.reduce](https://www.npmjs.com/package/object.reduce): Reduces an object to a value that is the accumulated result of running each property… [more](https://github.com/jonschlinkert/object.reduce) | [homepage](https://github.com/jonschlinkert/object.reduce "Reduces an object to a value that is the accumulated result of running each property in the object through a callback.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/object.omit/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 27, 2016._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/90/897df0e70382ed72536aa3cee734268cc5a0353cd42e7dd9403d9cc9fdb6e4c755f1c0cdb439802549c5e9661f3835d1450553fa46c5c9ab340c033604dbde b/.pnpm-store/v11/files/90/897df0e70382ed72536aa3cee734268cc5a0353cd42e7dd9403d9cc9fdb6e4c755f1c0cdb439802549c5e9661f3835d1450553fa46c5c9ab340c033604dbde new file mode 100644 index 00000000..378a7908 --- /dev/null +++ b/.pnpm-store/v11/files/90/897df0e70382ed72536aa3cee734268cc5a0353cd42e7dd9403d9cc9fdb6e4c755f1c0cdb439802549c5e9661f3835d1450553fa46c5c9ab340c033604dbde @@ -0,0 +1,6 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const suman_interactive_1 = require("suman-interactive"); +exports.run = function () { + suman_interactive_1.default.start(); +}; diff --git a/.pnpm-store/v11/files/90/993256962dd6b058a45fcadd6b2e2bc1578e7c15b6b21869ea1fb30f2ef982f8ac2cb3b197e7d7acf18bcab0b2032e052558516b3eeecaa31a6970984b4744 b/.pnpm-store/v11/files/90/993256962dd6b058a45fcadd6b2e2bc1578e7c15b6b21869ea1fb30f2ef982f8ac2cb3b197e7d7acf18bcab0b2032e052558516b3eeecaa31a6970984b4744 new file mode 100644 index 00000000..235fd975 --- /dev/null +++ b/.pnpm-store/v11/files/90/993256962dd6b058a45fcadd6b2e2bc1578e7c15b6b21869ea1fb30f2ef982f8ac2cb3b197e7d7acf18bcab0b2032e052558516b3eeecaa31a6970984b4744 @@ -0,0 +1,22 @@ +/** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ +function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } + return false; +} + +module.exports = arrayIncludesWith; diff --git a/.pnpm-store/v11/files/90/d4b58a88c2a7f1f2db2f17cec46cd22a8bf1e7eb1ba1001a1c1458f69aff5d5ddfeb86f5de26f164eef942071db86053c4973cee1ed59ebb1c181e8082ad4e b/.pnpm-store/v11/files/90/d4b58a88c2a7f1f2db2f17cec46cd22a8bf1e7eb1ba1001a1c1458f69aff5d5ddfeb86f5de26f164eef942071db86053c4973cee1ed59ebb1c181e8082ad4e new file mode 100644 index 00000000..5ad7216a --- /dev/null +++ b/.pnpm-store/v11/files/90/d4b58a88c2a7f1f2db2f17cec46cd22a8bf1e7eb1ba1001a1c1458f69aff5d5ddfeb86f5de26f164eef942071db86053c4973cee1ed59ebb1c181e8082ad4e @@ -0,0 +1,384 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/** + * The decorator context types provided to class element decorators. + */ +type ClassMemberDecoratorContext = + | ClassMethodDecoratorContext + | ClassGetterDecoratorContext + | ClassSetterDecoratorContext + | ClassFieldDecoratorContext + | ClassAccessorDecoratorContext; + +/** + * The decorator context types provided to any decorator. + */ +type DecoratorContext = + | ClassDecoratorContext + | ClassMemberDecoratorContext; + +type DecoratorMetadataObject = Record & object; + +type DecoratorMetadata = typeof globalThis extends { Symbol: { readonly metadata: symbol; }; } ? DecoratorMetadataObject : DecoratorMetadataObject | undefined; + +/** + * Context provided to a class decorator. + * @template Class The type of the decorated class associated with this context. + */ +interface ClassDecoratorContext< + Class extends abstract new (...args: any) => any = abstract new (...args: any) => any, +> { + /** The kind of element that was decorated. */ + readonly kind: "class"; + + /** The name of the decorated class. */ + readonly name: string | undefined; + + /** + * Adds a callback to be invoked after the class definition has been finalized. + * + * @example + * ```ts + * function customElement(name: string): ClassDecoratorFunction { + * return (target, context) => { + * context.addInitializer(function () { + * customElements.define(name, this); + * }); + * } + * } + * + * @customElement("my-element") + * class MyElement {} + * ``` + */ + addInitializer(initializer: (this: Class) => void): void; + + readonly metadata: DecoratorMetadata; +} + +/** + * Context provided to a class method decorator. + * @template This The type on which the class element will be defined. For a static class element, this will be + * the type of the constructor. For a non-static class element, this will be the type of the instance. + * @template Value The type of the decorated class method. + */ +interface ClassMethodDecoratorContext< + This = unknown, + Value extends (this: This, ...args: any) => any = (this: This, ...args: any) => any, +> { + /** The kind of class element that was decorated. */ + readonly kind: "method"; + + /** The name of the decorated class element. */ + readonly name: string | symbol; + + /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */ + readonly static: boolean; + + /** A value indicating whether the class element has a private name. */ + readonly private: boolean; + + /** An object that can be used to access the current value of the class element at runtime. */ + readonly access: { + /** + * Determines whether an object has a property with the same name as the decorated element. + */ + has(object: This): boolean; + /** + * Gets the current value of the method from the provided object. + * + * @example + * let fn = context.access.get(instance); + */ + get(object: This): Value; + }; + + /** + * Adds a callback to be invoked either after static methods are defined but before + * static initializers are run (when decorating a `static` element), or before instance + * initializers are run (when decorating a non-`static` element). + * + * @example + * ```ts + * const bound: ClassMethodDecoratorFunction = (value, context) { + * if (context.private) throw new TypeError("Not supported on private methods."); + * context.addInitializer(function () { + * this[context.name] = this[context.name].bind(this); + * }); + * } + * + * class C { + * message = "Hello"; + * + * @bound + * m() { + * console.log(this.message); + * } + * } + * ``` + */ + addInitializer(initializer: (this: This) => void): void; + + readonly metadata: DecoratorMetadata; +} + +/** + * Context provided to a class getter decorator. + * @template This The type on which the class element will be defined. For a static class element, this will be + * the type of the constructor. For a non-static class element, this will be the type of the instance. + * @template Value The property type of the decorated class getter. + */ +interface ClassGetterDecoratorContext< + This = unknown, + Value = unknown, +> { + /** The kind of class element that was decorated. */ + readonly kind: "getter"; + + /** The name of the decorated class element. */ + readonly name: string | symbol; + + /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */ + readonly static: boolean; + + /** A value indicating whether the class element has a private name. */ + readonly private: boolean; + + /** An object that can be used to access the current value of the class element at runtime. */ + readonly access: { + /** + * Determines whether an object has a property with the same name as the decorated element. + */ + has(object: This): boolean; + /** + * Invokes the getter on the provided object. + * + * @example + * let value = context.access.get(instance); + */ + get(object: This): Value; + }; + + /** + * Adds a callback to be invoked either after static methods are defined but before + * static initializers are run (when decorating a `static` element), or before instance + * initializers are run (when decorating a non-`static` element). + */ + addInitializer(initializer: (this: This) => void): void; + + readonly metadata: DecoratorMetadata; +} + +/** + * Context provided to a class setter decorator. + * @template This The type on which the class element will be defined. For a static class element, this will be + * the type of the constructor. For a non-static class element, this will be the type of the instance. + * @template Value The type of the decorated class setter. + */ +interface ClassSetterDecoratorContext< + This = unknown, + Value = unknown, +> { + /** The kind of class element that was decorated. */ + readonly kind: "setter"; + + /** The name of the decorated class element. */ + readonly name: string | symbol; + + /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */ + readonly static: boolean; + + /** A value indicating whether the class element has a private name. */ + readonly private: boolean; + + /** An object that can be used to access the current value of the class element at runtime. */ + readonly access: { + /** + * Determines whether an object has a property with the same name as the decorated element. + */ + has(object: This): boolean; + /** + * Invokes the setter on the provided object. + * + * @example + * context.access.set(instance, value); + */ + set(object: This, value: Value): void; + }; + + /** + * Adds a callback to be invoked either after static methods are defined but before + * static initializers are run (when decorating a `static` element), or before instance + * initializers are run (when decorating a non-`static` element). + */ + addInitializer(initializer: (this: This) => void): void; + + readonly metadata: DecoratorMetadata; +} + +/** + * Context provided to a class `accessor` field decorator. + * @template This The type on which the class element will be defined. For a static class element, this will be + * the type of the constructor. For a non-static class element, this will be the type of the instance. + * @template Value The type of decorated class field. + */ +interface ClassAccessorDecoratorContext< + This = unknown, + Value = unknown, +> { + /** The kind of class element that was decorated. */ + readonly kind: "accessor"; + + /** The name of the decorated class element. */ + readonly name: string | symbol; + + /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */ + readonly static: boolean; + + /** A value indicating whether the class element has a private name. */ + readonly private: boolean; + + /** An object that can be used to access the current value of the class element at runtime. */ + readonly access: { + /** + * Determines whether an object has a property with the same name as the decorated element. + */ + has(object: This): boolean; + + /** + * Invokes the getter on the provided object. + * + * @example + * let value = context.access.get(instance); + */ + get(object: This): Value; + + /** + * Invokes the setter on the provided object. + * + * @example + * context.access.set(instance, value); + */ + set(object: This, value: Value): void; + }; + + /** + * Adds a callback to be invoked immediately after the auto `accessor` being + * decorated is initialized (regardless if the `accessor` is `static` or not). + */ + addInitializer(initializer: (this: This) => void): void; + + readonly metadata: DecoratorMetadata; +} + +/** + * Describes the target provided to class `accessor` field decorators. + * @template This The `this` type to which the target applies. + * @template Value The property type for the class `accessor` field. + */ +interface ClassAccessorDecoratorTarget { + /** + * Invokes the getter that was defined prior to decorator application. + * + * @example + * let value = target.get.call(instance); + */ + get(this: This): Value; + + /** + * Invokes the setter that was defined prior to decorator application. + * + * @example + * target.set.call(instance, value); + */ + set(this: This, value: Value): void; +} + +/** + * Describes the allowed return value from a class `accessor` field decorator. + * @template This The `this` type to which the target applies. + * @template Value The property type for the class `accessor` field. + */ +interface ClassAccessorDecoratorResult { + /** + * An optional replacement getter function. If not provided, the existing getter function is used instead. + */ + get?(this: This): Value; + + /** + * An optional replacement setter function. If not provided, the existing setter function is used instead. + */ + set?(this: This, value: Value): void; + + /** + * An optional initializer mutator that is invoked when the underlying field initializer is evaluated. + * @param value The incoming initializer value. + * @returns The replacement initializer value. + */ + init?(this: This, value: Value): Value; +} + +/** + * Context provided to a class field decorator. + * @template This The type on which the class element will be defined. For a static class element, this will be + * the type of the constructor. For a non-static class element, this will be the type of the instance. + * @template Value The type of the decorated class field. + */ +interface ClassFieldDecoratorContext< + This = unknown, + Value = unknown, +> { + /** The kind of class element that was decorated. */ + readonly kind: "field"; + + /** The name of the decorated class element. */ + readonly name: string | symbol; + + /** A value indicating whether the class element is a static (`true`) or instance (`false`) element. */ + readonly static: boolean; + + /** A value indicating whether the class element has a private name. */ + readonly private: boolean; + + /** An object that can be used to access the current value of the class element at runtime. */ + readonly access: { + /** + * Determines whether an object has a property with the same name as the decorated element. + */ + has(object: This): boolean; + + /** + * Gets the value of the field on the provided object. + */ + get(object: This): Value; + + /** + * Sets the value of the field on the provided object. + */ + set(object: This, value: Value): void; + }; + + /** + * Adds a callback to be invoked immediately after the field being decorated + * is initialized (regardless if the field is `static` or not). + */ + addInitializer(initializer: (this: This) => void): void; + + readonly metadata: DecoratorMetadata; +} diff --git a/.pnpm-store/v11/files/90/d59279dc37284b6a12566d647d535750dfc471008442eb307dd26188369a14ae0409c2452bdc847e666e8f80de9f920cf7339b5e65d5d51d980070e0e37c87 b/.pnpm-store/v11/files/90/d59279dc37284b6a12566d647d535750dfc471008442eb307dd26188369a14ae0409c2452bdc847e666e8f80de9f920cf7339b5e65d5d51d980070e0e37c87 new file mode 100644 index 00000000..39314a29 --- /dev/null +++ b/.pnpm-store/v11/files/90/d59279dc37284b6a12566d647d535750dfc471008442eb307dd26188369a14ae0409c2452bdc847e666e8f80de9f920cf7339b5e65d5d51d980070e0e37c87 @@ -0,0 +1,50 @@ +{ + "author": "Thorsten Lorenz (thlorenz.com)", + "name": "readdirp", + "description": "Recursive version of fs.readdir with streaming api.", + "version": "2.2.1", + "homepage": "https://github.com/paulmillr/readdirp", + "repository": { + "type": "git", + "url": "git://github.com/paulmillr/readdirp.git" + }, + "engines": { + "node": ">=0.10" + }, + "files": [ + "readdirp.js", + "stream-api.js" + ], + "keywords": [ + "recursive", + "fs", + "stream", + "streams", + "readdir", + "filesystem", + "find", + "filter" + ], + "main": "readdirp.js", + "scripts": { + "test-main": "(cd test && set -e; for t in ./*.js; do node $t; done)", + "test-0.10": "nave use 0.10 npm run test-main", + "test-0.12": "nave use 0.12 npm run test-main", + "test-4": "nave use 4.4 npm run test-main", + "test-6": "nave use 6.2 npm run test-main", + "test-all": "npm run test-main && npm run test-0.10 && npm run test-0.12 && npm run test-4 && npm run test-6", + "test": "npm run test-main" + }, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "devDependencies": { + "nave": "^0.5.1", + "proxyquire": "^1.7.9", + "tap": "1.3.2", + "through2": "^2.0.0" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/90/d5a53ddb9a87bec8728cfd739621f16c69be74d90eea6829fbc279de24a2343397cf2df139429f5a6adaaa44f89596d826203238cde7c4ed6f91d4d6549295 b/.pnpm-store/v11/files/90/d5a53ddb9a87bec8728cfd739621f16c69be74d90eea6829fbc279de24a2343397cf2df139429f5a6adaaa44f89596d826203238cde7c4ed6f91d4d6549295 new file mode 100644 index 00000000..e47b106e --- /dev/null +++ b/.pnpm-store/v11/files/90/d5a53ddb9a87bec8728cfd739621f16c69be74d90eea6829fbc279de24a2343397cf2df139429f5a6adaaa44f89596d826203238cde7c4ed6f91d4d6549295 @@ -0,0 +1,574 @@ +A light, featureful and explicit option parsing library for node.js. + +[Why another one? See below](#why). tl;dr: The others I've tried are one of +too loosey goosey (not explicit), too big/too many deps, or ill specified. +YMMV. + +Follow @trentmick +for updates to node-dashdash. + +# Install + + npm install dashdash + + +# Usage + +```javascript +var dashdash = require('dashdash'); + +// Specify the options. Minimally `name` (or `names`) and `type` +// must be given for each. +var options = [ + { + // `names` or a single `name`. First element is the `opts.KEY`. + names: ['help', 'h'], + // See "Option specs" below for types. + type: 'bool', + help: 'Print this help and exit.' + } +]; + +// Shortcut form. As called it infers `process.argv`. See below for +// the longer form to use methods like `.help()` on the Parser object. +var opts = dashdash.parse({options: options}); + +console.log("opts:", opts); +console.log("args:", opts._args); +``` + + +# Longer Example + +A more realistic [starter script "foo.js"](./examples/foo.js) is as follows. +This also shows using `parser.help()` for formatted option help. + +```javascript +var dashdash = require('./lib/dashdash'); + +var options = [ + { + name: 'version', + type: 'bool', + help: 'Print tool version and exit.' + }, + { + names: ['help', 'h'], + type: 'bool', + help: 'Print this help and exit.' + }, + { + names: ['verbose', 'v'], + type: 'arrayOfBool', + help: 'Verbose output. Use multiple times for more verbose.' + }, + { + names: ['file', 'f'], + type: 'string', + help: 'File to process', + helpArg: 'FILE' + } +]; + +var parser = dashdash.createParser({options: options}); +try { + var opts = parser.parse(process.argv); +} catch (e) { + console.error('foo: error: %s', e.message); + process.exit(1); +} + +console.log("# opts:", opts); +console.log("# args:", opts._args); + +// Use `parser.help()` for formatted options help. +if (opts.help) { + var help = parser.help({includeEnv: true}).trimRight(); + console.log('usage: node foo.js [OPTIONS]\n' + + 'options:\n' + + help); + process.exit(0); +} + +// ... +``` + + +Some example output from this script (foo.js): + +``` +$ node foo.js -h +# opts: { help: true, + _order: [ { name: 'help', value: true, from: 'argv' } ], + _args: [] } +# args: [] +usage: node foo.js [OPTIONS] +options: + --version Print tool version and exit. + -h, --help Print this help and exit. + -v, --verbose Verbose output. Use multiple times for more verbose. + -f FILE, --file=FILE File to process + +$ node foo.js -v +# opts: { verbose: [ true ], + _order: [ { name: 'verbose', value: true, from: 'argv' } ], + _args: [] } +# args: [] + +$ node foo.js --version arg1 +# opts: { version: true, + _order: [ { name: 'version', value: true, from: 'argv' } ], + _args: [ 'arg1' ] } +# args: [ 'arg1' ] + +$ node foo.js -f bar.txt +# opts: { file: 'bar.txt', + _order: [ { name: 'file', value: 'bar.txt', from: 'argv' } ], + _args: [] } +# args: [] + +$ node foo.js -vvv --file=blah +# opts: { verbose: [ true, true, true ], + file: 'blah', + _order: + [ { name: 'verbose', value: true, from: 'argv' }, + { name: 'verbose', value: true, from: 'argv' }, + { name: 'verbose', value: true, from: 'argv' }, + { name: 'file', value: 'blah', from: 'argv' } ], + _args: [] } +# args: [] +``` + + +See the ["examples"](examples/) dir for a number of starter examples using +some of dashdash's features. + + +# Environment variable integration + +If you want to allow environment variables to specify options to your tool, +dashdash makes this easy. We can change the 'verbose' option in the example +above to include an 'env' field: + +```javascript + { + names: ['verbose', 'v'], + type: 'arrayOfBool', + env: 'FOO_VERBOSE', // <--- add this line + help: 'Verbose output. Use multiple times for more verbose.' + }, +``` + +then the **"FOO_VERBOSE" environment variable** can be used to set this +option: + +```shell +$ FOO_VERBOSE=1 node foo.js +# opts: { verbose: [ true ], + _order: [ { name: 'verbose', value: true, from: 'env' } ], + _args: [] } +# args: [] +``` + +Boolean options will interpret the empty string as unset, '0' as false +and anything else as true. + +```shell +$ FOO_VERBOSE= node examples/foo.js # not set +# opts: { _order: [], _args: [] } +# args: [] + +$ FOO_VERBOSE=0 node examples/foo.js # '0' is false +# opts: { verbose: [ false ], + _order: [ { key: 'verbose', value: false, from: 'env' } ], + _args: [] } +# args: [] + +$ FOO_VERBOSE=1 node examples/foo.js # true +# opts: { verbose: [ true ], + _order: [ { key: 'verbose', value: true, from: 'env' } ], + _args: [] } +# args: [] + +$ FOO_VERBOSE=boogabooga node examples/foo.js # true +# opts: { verbose: [ true ], + _order: [ { key: 'verbose', value: true, from: 'env' } ], + _args: [] } +# args: [] +``` + +Non-booleans can be used as well. Strings: + +```shell +$ FOO_FILE=data.txt node examples/foo.js +# opts: { file: 'data.txt', + _order: [ { key: 'file', value: 'data.txt', from: 'env' } ], + _args: [] } +# args: [] +``` + +Numbers: + +```shell +$ FOO_TIMEOUT=5000 node examples/foo.js +# opts: { timeout: 5000, + _order: [ { key: 'timeout', value: 5000, from: 'env' } ], + _args: [] } +# args: [] + +$ FOO_TIMEOUT=blarg node examples/foo.js +foo: error: arg for "FOO_TIMEOUT" is not a positive integer: "blarg" +``` + +With the `includeEnv: true` config to `parser.help()` the environment +variable can also be included in **help output**: + + usage: node foo.js [OPTIONS] + options: + --version Print tool version and exit. + -h, --help Print this help and exit. + -v, --verbose Verbose output. Use multiple times for more verbose. + Environment: FOO_VERBOSE=1 + -f FILE, --file=FILE File to process + + +# Bash completion + +Dashdash provides a simple way to create a Bash completion file that you +can place in your "bash_completion.d" directory -- sometimes that is +"/usr/local/etc/bash_completion.d/"). Features: + +- Support for short and long opts +- Support for knowing which options take arguments +- Support for subcommands (e.g. 'git log ' to show just options for the + log subcommand). See + [node-cmdln](https://github.com/trentm/node-cmdln#bash-completion) for + how to integrate that. +- Does the right thing with "--" to stop options. +- Custom optarg and arg types for custom completions. + +Dashdash will return bash completion file content given a parser instance: + + var parser = dashdash.createParser({options: options}); + console.log( parser.bashCompletion({name: 'mycli'}) ); + +or directly from a `options` array of options specs: + + var code = dashdash.bashCompletionFromOptions({ + name: 'mycli', + options: OPTIONS + }); + +Write that content to "/usr/local/etc/bash_completion.d/mycli" and you will +have Bash completions for `mycli`. Alternatively you can write it to +any file (e.g. "~/.bashrc") and source it. + +You could add a `--completion` hidden option to your tool that emits the +completion content and document for your users to call that to install +Bash completions. + +See [examples/ddcompletion.js](examples/ddcompletion.js) for a complete +example, including how one can define bash functions for completion of custom +option types. Also see [node-cmdln](https://github.com/trentm/node-cmdln) for +how it uses this for Bash completion for full multi-subcommand tools. + +- TODO: document specExtra +- TODO: document includeHidden +- TODO: document custom types, `function complete\_FOO` guide, completionType +- TODO: document argtypes + + +# Parser config + +Parser construction (i.e. `dashdash.createParser(CONFIG)`) takes the +following fields: + +- `options` (Array of option specs). Required. See the + [Option specs](#option-specs) section below. + +- `interspersed` (Boolean). Optional. Default is true. If true this allows + interspersed arguments and options. I.e.: + + node ./tool.js -v arg1 arg2 -h # '-h' is after interspersed args + + Set it to false to have '-h' **not** get parsed as an option in the above + example. + +- `allowUnknown` (Boolean). Optional. Default is false. If false, this causes + unknown arguments to throw an error. I.e.: + + node ./tool.js -v arg1 --afe8asefksjefhas + + Set it to true to treat the unknown option as a positional + argument. + + **Caveat**: When a shortopt group, such as `-xaz` contains a mix of + known and unknown options, the *entire* group is passed through + unmolested as a positional argument. + + Consider if you have a known short option `-a`, and parse the + following command line: + + node ./tool.js -xaz + + where `-x` and `-z` are unknown. There are multiple ways to + interpret this: + + 1. `-x` takes a value: `{x: 'az'}` + 2. `-x` and `-z` are both booleans: `{x:true,a:true,z:true}` + + Since dashdash does not know what `-x` and `-z` are, it can't know + if you'd prefer to receive `{a:true,_args:['-x','-z']}` or + `{x:'az'}`, or `{_args:['-xaz']}`. Leaving the positional arg unprocessed + is the easiest mistake for the user to recover from. + + +# Option specs + +Example using all fields (required fields are noted): + +```javascript +{ + names: ['file', 'f'], // Required (one of `names` or `name`). + type: 'string', // Required. + completionType: 'filename', + env: 'MYTOOL_FILE', + help: 'Config file to load before running "mytool"', + helpArg: 'PATH', + helpWrap: false, + default: path.resolve(process.env.HOME, '.mytoolrc') +} +``` + +Each option spec in the `options` array must/can have the following fields: + +- `name` (String) or `names` (Array). Required. These give the option name + and aliases. The first name (if more than one given) is the key for the + parsed `opts` object. + +- `type` (String). Required. One of: + + - bool + - string + - number + - integer + - positiveInteger + - date (epoch seconds, e.g. 1396031701, or ISO 8601 format + `YYYY-MM-DD[THH:MM:SS[.sss][Z]]`, e.g. "2014-03-28T18:35:01.489Z") + - arrayOfBool + - arrayOfString + - arrayOfNumber + - arrayOfInteger + - arrayOfPositiveInteger + - arrayOfDate + + FWIW, these names attempt to match with asserts on + [assert-plus](https://github.com/mcavage/node-assert-plus). + You can add your own custom option types with `dashdash.addOptionType`. + See below. + +- `completionType` (String). Optional. This is used for [Bash + completion](#bash-completion) for an option argument. If not specified, + then the value of `type` is used. Any string may be specified, but only the + following values have meaning: + + - `none`: Provide no completions. + - `file`: Bash's default completion (i.e. `complete -o default`), which + includes filenames. + - *Any string FOO for which a `function complete_FOO` Bash function is + defined.* This is for custom completions for a given tool. Typically + these custom functions are provided in the `specExtra` argument to + `dashdash.bashCompletionFromOptions()`. See + ["examples/ddcompletion.js"](examples/ddcompletion.js) for an example. + +- `env` (String or Array of String). Optional. An environment variable name + (or names) that can be used as a fallback for this option. For example, + given a "foo.js" like this: + + var options = [{names: ['dry-run', 'n'], env: 'FOO_DRY_RUN'}]; + var opts = dashdash.parse({options: options}); + + Both `node foo.js --dry-run` and `FOO_DRY_RUN=1 node foo.js` would result + in `opts.dry_run = true`. + + An environment variable is only used as a fallback, i.e. it is ignored if + the associated option is given in `argv`. + +- `help` (String). Optional. Used for `parser.help()` output. + +- `helpArg` (String). Optional. Used in help output as the placeholder for + the option argument, e.g. the "PATH" in: + + ... + -f PATH, --file=PATH File to process + ... + +- `helpWrap` (Boolean). Optional, default true. Set this to `false` to have + that option's `help` *not* be text wrapped in `.help()` output. + +- `default`. Optional. A default value used for this option, if the + option isn't specified in argv. + +- `hidden` (Boolean). Optional, default false. If true, help output will not + include this option. See also the `includeHidden` option to + `bashCompletionFromOptions()` for [Bash completion](#bash-completion). + + +# Option group headings + +You can add headings between option specs in the `options` array. To do so, +simply add an object with only a `group` property -- the string to print as +the heading for the subsequent options in the array. For example: + +```javascript +var options = [ + { + group: 'Armament Options' + }, + { + names: [ 'weapon', 'w' ], + type: 'string' + }, + { + group: 'General Options' + }, + { + names: [ 'help', 'h' ], + type: 'bool' + } +]; +... +``` + +Note: You can use an empty string, `{group: ''}`, to get a blank line in help +output between groups of options. + + +# Help config + +The `parser.help(...)` function is configurable as follows: + + Options: + Armament Options: + ^^ -w WEAPON, --weapon=WEAPON Weapon with which to crush. One of: | + / sword, spear, maul | + / General Options: | + / -h, --help Print this help and exit. | + / ^^^^ ^ | + \ `-- indent `-- helpCol maxCol ---' + `-- headingIndent + +- `indent` (Number or String). Default 4. Set to a number (for that many + spaces) or a string for the literal indent. +- `headingIndent` (Number or String). Default half length of `indent`. Set to + a number (for that many spaces) or a string for the literal indent. This + indent applies to group heading lines, between normal option lines. +- `nameSort` (String). Default is 'length'. By default the names are + sorted to put the short opts first (i.e. '-h, --help' preferred + to '--help, -h'). Set to 'none' to not do this sorting. +- `maxCol` (Number). Default 80. Note that reflow is just done on whitespace + so a long token in the option help can overflow maxCol. +- `helpCol` (Number). If not set a reasonable value will be determined + between `minHelpCol` and `maxHelpCol`. +- `minHelpCol` (Number). Default 20. +- `maxHelpCol` (Number). Default 40. +- `helpWrap` (Boolean). Default true. Set to `false` to have option `help` + strings *not* be textwrapped to the helpCol..maxCol range. +- `includeEnv` (Boolean). Default false. If the option has associated + environment variables (via the `env` option spec attribute), then + append mentioned of those envvars to the help string. +- `includeDefault` (Boolean). Default false. If the option has a default value + (via the `default` option spec attribute, or a default on the option's type), + then a "Default: VALUE" string will be appended to the help string. + + +# Custom option types + +Dashdash includes a good starter set of option types that it will parse for +you. However, you can add your own via: + + var dashdash = require('dashdash'); + dashdash.addOptionType({ + name: '...', + takesArg: true, + helpArg: '...', + parseArg: function (option, optstr, arg) { + ... + }, + array: false, // optional + arrayFlatten: false, // optional + default: ..., // optional + completionType: ... // optional + }); + +For example, a simple option type that accepts 'yes', 'y', 'no' or 'n' as +a boolean argument would look like: + + var dashdash = require('dashdash'); + + function parseYesNo(option, optstr, arg) { + var argLower = arg.toLowerCase() + if (~['yes', 'y'].indexOf(argLower)) { + return true; + } else if (~['no', 'n'].indexOf(argLower)) { + return false; + } else { + throw new Error(format( + 'arg for "%s" is not "yes" or "no": "%s"', + optstr, arg)); + } + } + + dashdash.addOptionType({ + name: 'yesno' + takesArg: true, + helpArg: '', + parseArg: parseYesNo + }); + + var options = { + {names: ['answer', 'a'], type: 'yesno'} + }; + var opts = dashdash.parse({options: options}); + +See "examples/custom-option-\*.js" for other examples. +See the `addOptionType` block comment in "lib/dashdash.js" for more details. +Please let me know [with an +issue](https://github.com/trentm/node-dashdash/issues/new) if you write a +generally useful one. + + + +# Why + +Why another node.js option parsing lib? + +- `nopt` really is just for "tools like npm". Implicit opts (e.g. '--no-foo' + works for every '--foo'). Can't disable abbreviated opts. Can't do multiple + usages of same opt, e.g. '-vvv' (I think). Can't do grouped short opts. + +- `optimist` has surprise interpretation of options (at least to me). + Implicit opts mean ambiguities and poor error handling for fat-fingering. + `process.exit` calls makes it hard to use as a libary. + +- `optparse` Incomplete docs. Is this an attempted clone of Python's `optparse`. + Not clear. Some divergence. `parser.on("name", ...)` API is weird. + +- `argparse` Dep on underscore. No thanks just for option processing. + `find lib | wc -l` -> `26`. Overkill. + Argparse is a bit different anyway. Not sure I want that. + +- `posix-getopt` No type validation. Though that isn't a killer. AFAIK can't + have a long opt without a short alias. I.e. no `getopt_long` semantics. + Also, no whizbang features like generated help output. + +- ["commander.js"](https://github.com/visionmedia/commander.js): I wrote + [a critique](http://trentm.com/2014/01/a-critique-of-commander-for-nodejs.html) + a while back. It seems fine, but last I checked had + [an outstanding bug](https://github.com/visionmedia/commander.js/pull/121) + that would prevent me from using it. + + +# License + +MIT. See LICENSE.txt. diff --git a/.pnpm-store/v11/files/90/f81aa31cf22402e6908744f260a5ee0541d6275af35365c34490e38da25471743d2154956aa3a9f014d18151874bdb543656b198e9db6473fb8e68ed14f087 b/.pnpm-store/v11/files/90/f81aa31cf22402e6908744f260a5ee0541d6275af35365c34490e38da25471743d2154956aa3a9f014d18151874bdb543656b198e9db6473fb8e68ed14f087 new file mode 100644 index 00000000..e6a5ce0c --- /dev/null +++ b/.pnpm-store/v11/files/90/f81aa31cf22402e6908744f260a5ee0541d6275af35365c34490e38da25471743d2154956aa3a9f014d18151874bdb543656b198e9db6473fb8e68ed14f087 @@ -0,0 +1 @@ +module.exports = require('./isEqual'); diff --git a/.pnpm-store/v11/files/90/ffd807c88ca7a7f1a5008c42c68a68c36b7b4e073126a6134cd6393c8580d64f9dc63478032123ef0dc3ef1fda751bd57d9ad0ae58bd2a8558814c0bbaba71 b/.pnpm-store/v11/files/90/ffd807c88ca7a7f1a5008c42c68a68c36b7b4e073126a6134cd6393c8580d64f9dc63478032123ef0dc3ef1fda751bd57d9ad0ae58bd2a8558814c0bbaba71 new file mode 100644 index 00000000..8b6dc7c5 --- /dev/null +++ b/.pnpm-store/v11/files/90/ffd807c88ca7a7f1a5008c42c68a68c36b7b4e073126a6134cd6393c8580d64f9dc63478032123ef0dc3ef1fda751bd57d9ad0ae58bd2a8558814c0bbaba71 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('negate', require('../negate'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/91/0af29c89b4114ad09e287c7d347538d494ec88095b80185a2f5bfb4febab54b337c328e2a05b4bab6bc9a3fa7447d00d07cee54e42e34c88f0ef0138289e42 b/.pnpm-store/v11/files/91/0af29c89b4114ad09e287c7d347538d494ec88095b80185a2f5bfb4febab54b337c328e2a05b4bab6bc9a3fa7447d00d07cee54e42e34c88f0ef0138289e42 new file mode 100644 index 00000000..fcfc105a --- /dev/null +++ b/.pnpm-store/v11/files/91/0af29c89b4114ad09e287c7d347538d494ec88095b80185a2f5bfb4febab54b337c328e2a05b4bab6bc9a3fa7447d00d07cee54e42e34c88f0ef0138289e42 @@ -0,0 +1,214 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = Object.create(require('core-util-is')); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function afterTransform(er, data) { + var ts = this._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) { + return this.emit('error', new Error('write callback called multiple times')); + } + + ts.writechunk = null; + ts.writecb = null; + + if (data != null) // single equals check for both `null` and `undefined` + this.push(data); + + cb(er); + + var rs = this._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + this._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = { + afterTransform: afterTransform.bind(this), + needTransform: false, + transforming: false, + writecb: null, + writechunk: null, + writeencoding: null + }; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.on('prefinish', prefinish); +} + +function prefinish() { + var _this = this; + + if (typeof this._flush === 'function') { + this._flush(function (er, data) { + done(_this, er, data); + }); + } else { + done(this, null, null); + } +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +Transform.prototype._destroy = function (err, cb) { + var _this2 = this; + + Duplex.prototype._destroy.call(this, err, function (err2) { + cb(err2); + _this2.emit('close'); + }); +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data != null) // single equals check for both `null` and `undefined` + stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); + + if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} \ No newline at end of file diff --git a/.pnpm-store/v11/files/91/131a9ccde8370b903ca73af9ff6c1286f8bab77e9864919f6b2c4b92bcac50ece560bf160d5d7cd12ae9cdbc8d1a389e1d58371576482d990bbb55229063d7 b/.pnpm-store/v11/files/91/131a9ccde8370b903ca73af9ff6c1286f8bab77e9864919f6b2c4b92bcac50ece560bf160d5d7cd12ae9cdbc8d1a389e1d58371576482d990bbb55229063d7 new file mode 100644 index 00000000..e9ad6301 --- /dev/null +++ b/.pnpm-store/v11/files/91/131a9ccde8370b903ca73af9ff6c1286f8bab77e9864919f6b2c4b92bcac50ece560bf160d5d7cd12ae9cdbc8d1a389e1d58371576482d990bbb55229063d7 @@ -0,0 +1,2 @@ +"use strict"; +module.exports = require('suman-watch-plugins'); diff --git a/.pnpm-store/v11/files/91/1680c0f180ef8e37debc9583ede26bf7f4f5b50ddca70581dd00df967dbe675af676521ae6754eae257e3ff849bb7e1e4e14055f0d90e233ff399aabff2226 b/.pnpm-store/v11/files/91/1680c0f180ef8e37debc9583ede26bf7f4f5b50ddca70581dd00df967dbe675af676521ae6754eae257e3ff849bb7e1e4e14055f0d90e233ff399aabff2226 new file mode 100644 index 00000000..7a66b9c2 --- /dev/null +++ b/.pnpm-store/v11/files/91/1680c0f180ef8e37debc9583ede26bf7f4f5b50ddca70581dd00df967dbe675af676521ae6754eae257e3ff849bb7e1e4e14055f0d90e233ff399aabff2226 @@ -0,0 +1,193 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v3.0.5](https://github.com/inspect-js/is-accessor-descriptor/compare/v3.0.4...v3.0.5) - 2023-10-27 + +### Commits + +- [Fix] fix a bad merge and refactor checkProto logic [`1acdf9d`](https://github.com/inspect-js/is-accessor-descriptor/commit/1acdf9deb55f1616da5b8dd3c2991d2de56faec3) + +## [v3.0.4](https://github.com/inspect-js/is-accessor-descriptor/compare/v3.0.3...v3.0.4) - 2023-10-26 + +### Commits + +- Merge tag v0.1.7, v1.0.1 [`a5ae905`](https://github.com/inspect-js/is-accessor-descriptor/commit/a5ae9058400afa44a5e8cf9af85c096425a53128) +- [eslint] actually use eslint [`d0b9c94`](https://github.com/inspect-js/is-accessor-descriptor/commit/d0b9c94c669a8c2939566fc805e97e0a517ea1db) +- [eslint] actually use eslint [`a05c057`](https://github.com/inspect-js/is-accessor-descriptor/commit/a05c0576662de977798bcba0ffa037a1ffdb9f68) +- [meta] update package.json, etc from main [`c4fab21`](https://github.com/inspect-js/is-accessor-descriptor/commit/c4fab216ad2f011daf45e35323f1d8a872041e63) +- [readme] clean up docs, URLs, package.json, etc [`6648dcd`](https://github.com/inspect-js/is-accessor-descriptor/commit/6648dcde8c01fcb36f7d6aaa3f70e3563df54b67) +- temp [`a6392d4`](https://github.com/inspect-js/is-accessor-descriptor/commit/a6392d4159aaa89a7ba79057cb401e0e09093c06) +- [meta] update `.gitignore` [`cba0ea0`](https://github.com/inspect-js/is-accessor-descriptor/commit/cba0ea006594dd4583ba671c1643a1e96aaab7ff) +- [Tests] switch to tape [`9a0ab35`](https://github.com/inspect-js/is-accessor-descriptor/commit/9a0ab35563c55cb23e663bd5c842811c59371e31) +- [readme] remove verb [`2f07da4`](https://github.com/inspect-js/is-accessor-descriptor/commit/2f07da493d0c824b5738675999ea4a3db541c84e) +- [Tests] switch to tape [`7e39202`](https://github.com/inspect-js/is-accessor-descriptor/commit/7e392020781a23f4c1276e78da4bf8a798021d85) +- [Tests] migrate from travis to github actions [`aa436b0`](https://github.com/inspect-js/is-accessor-descriptor/commit/aa436b0bbeb03c1281e816445e4d495e582274c7) +- [Tests] migrate from travis to github actions [`6e9c4f1`](https://github.com/inspect-js/is-accessor-descriptor/commit/6e9c4f1a211697db4956743992107e67f751b433) +- [readme] remove verb [`967137d`](https://github.com/inspect-js/is-accessor-descriptor/commit/967137d64da7b14dd861f27c9092a2ac66e09564) +- [readme] use `evalmd` [`471d3b9`](https://github.com/inspect-js/is-accessor-descriptor/commit/471d3b9e33b86a856b68f67dd5e57663af39d746) +- [Fix] only one of `get` and `set` are required to be an accessor [`c8de5e7`](https://github.com/inspect-js/is-accessor-descriptor/commit/c8de5e75a9e817c2726511701c048d0f9360195b) +- [Fix] properly handle an accessor descriptor with only a setter [`04647f4`](https://github.com/inspect-js/is-accessor-descriptor/commit/04647f45870a2d3a78e2ae8adf07b0e9d47e0fc9) +- [Refactor] use `hasown` [`6151f01`](https://github.com/inspect-js/is-accessor-descriptor/commit/6151f01a4244d22545cd9fb4ca9b6b772f62a40f) +- [Refactor] properly guard for-in loop [`a0454cc`](https://github.com/inspect-js/is-accessor-descriptor/commit/a0454cca3ea0610c8cf5e0b70bd581689ded929a) +- [Fix] allow any non-primitive; arrays and functions are objects too [`853db5a`](https://github.com/inspect-js/is-accessor-descriptor/commit/853db5a1af876e7c52bee27f6069779d069b1a5c) +- [Fix] allow any non-primitive; arrays and functions are objects too [`123e3c3`](https://github.com/inspect-js/is-accessor-descriptor/commit/123e3c3da341a1a397e274805df88ed13646442f) +- Only apps should have lockfiles [`87402b1`](https://github.com/inspect-js/is-accessor-descriptor/commit/87402b118e6f391dde566cdcd51f27d0e0aa211f) +- [Refactor] use `hasown` [`7ad36a0`](https://github.com/inspect-js/is-accessor-descriptor/commit/7ad36a05be98c7f0ae3f4dc9b3a3df1fa392c7fd) +- [Fix] use correct logic for two-arg form [`3c1729e`](https://github.com/inspect-js/is-accessor-descriptor/commit/3c1729e0e5658fc8b53dbbd945e1c99b033f562a) +- [Fix] properly guard for-in loop [`442daa8`](https://github.com/inspect-js/is-accessor-descriptor/commit/442daa86d808259f62f2ced02619a2bc84f881be) +- [Tests] move tests to test dir [`18313a7`](https://github.com/inspect-js/is-accessor-descriptor/commit/18313a7d61e9bb0d3ff34b112c2d614a975be0df) +- [readme] fix incorrect example [`3ee754a`](https://github.com/inspect-js/is-accessor-descriptor/commit/3ee754af6cb65c690ccd9ade150b33e8ec2808f8) +- [Tests] move tests to test dir [`5d70880`](https://github.com/inspect-js/is-accessor-descriptor/commit/5d70880ae2256d1f5927dab02c0bf8fe78cafef3) +- [Dev Deps] add missing `npmignore` [`97ce4bc`](https://github.com/inspect-js/is-accessor-descriptor/commit/97ce4bca878e775672e3d7349906bd7fc7db5f24) +- [Robustness] use a null object just in case [`675af5b`](https://github.com/inspect-js/is-accessor-descriptor/commit/675af5b191ebe9e18fb65c0aecb2a5ae65a535e0) + +## [v3.0.3](https://github.com/inspect-js/is-accessor-descriptor/compare/v3.0.2...v3.0.3) - 2023-10-25 + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `has-property-descriptors`, `tape` [`908044d`](https://github.com/inspect-js/is-accessor-descriptor/commit/908044d05559496cddf61b8f634641e879305f24) +- [Refactor] use `hasown` [`8b94cc1`](https://github.com/inspect-js/is-accessor-descriptor/commit/8b94cc153ba580143fe27bab0437199e873e58e3) + +## [v3.0.2](https://github.com/inspect-js/is-accessor-descriptor/compare/v3.0.1...v3.0.2) - 2023-04-27 + +### Commits + +- [eslint] cleanup [`c0a3a34`](https://github.com/inspect-js/is-accessor-descriptor/commit/c0a3a34eabaed6634dd674600df2c647688d3a31) +- [Tests] travis -> Github Actions; add `safe-publish-latest`, `npmignore`, `auto-changelog`, `evalmd`, `aud` [`a45de10`](https://github.com/inspect-js/is-accessor-descriptor/commit/a45de10c8020a350df860c2c4fe7697a74cdb943) +- [readme] clean up docs, URLs, package.json, etc [`d2f3547`](https://github.com/inspect-js/is-accessor-descriptor/commit/d2f354741f4fecc8c0e1ed6a83d351028a2ce2ba) +- [New] increase support from node 6 down to node 0.4 [`825f88e`](https://github.com/inspect-js/is-accessor-descriptor/commit/825f88e69da75476b638e9879296a37d370ce9fd) +- [Tests] convert from mocha to tape [`072d097`](https://github.com/inspect-js/is-accessor-descriptor/commit/072d097f5bbe1d6383ec38c13bbe67b491c0c671) +- [Docs] remove `verb` [`7567b54`](https://github.com/inspect-js/is-accessor-descriptor/commit/7567b54961b87af9ae890584089f5f29f19d8537) +- [Tests] use `has-property-descriptors` to skip true getter tests in older engines [`0e26d80`](https://github.com/inspect-js/is-accessor-descriptor/commit/0e26d806b7f97e23f287eac39bb352e772ac3f3b) +- [Fix] when an object/key pair is provided, check arguments.length instead of key truthiness [`3962d00`](https://github.com/inspect-js/is-accessor-descriptor/commit/3962d006fbe65dce0bc0847e278af142829057cb) +- [Tests] add coverage [`6337da4`](https://github.com/inspect-js/is-accessor-descriptor/commit/6337da417af127694412e5f18ba853f47b9a4270) +- [meta] switch from `files` field to npmignore; add `exports` [`6e870be`](https://github.com/inspect-js/is-accessor-descriptor/commit/6e870be859d17221b11b8c9f2fcb3e8a1e649598) + +## [v3.0.1](https://github.com/inspect-js/is-accessor-descriptor/compare/v3.0.0...v3.0.1) - 2018-12-13 + +### Commits + +- cleanup readme [`5cce1d2`](https://github.com/inspect-js/is-accessor-descriptor/commit/5cce1d212f887f9b4afe2b29dd95d657e1ea210c) +- remove unnecessary check [`288d4b9`](https://github.com/inspect-js/is-accessor-descriptor/commit/288d4b9f407bd7a01a606456ac40b7c29d7fd407) + +## [v3.0.0](https://github.com/inspect-js/is-accessor-descriptor/compare/v2.0.0...v3.0.0) - 2018-12-13 + +### Commits + +- refactor [`d01d897`](https://github.com/inspect-js/is-accessor-descriptor/commit/d01d897175f09d3fb285a6bb22e4eb46a46a6045) + +## [v2.0.0](https://github.com/inspect-js/is-accessor-descriptor/compare/v1.0.2...v2.0.0) - 2017-12-04 + +### Commits + +- refactor to be stricter [`f7370ef`](https://github.com/inspect-js/is-accessor-descriptor/commit/f7370efe312e338c7f3175d76b973bdd838d0d27) +- update docs [`fd1764c`](https://github.com/inspect-js/is-accessor-descriptor/commit/fd1764c14dc6bfba668cb502dad57e5e03855ecf) + +## [v1.0.2](https://github.com/inspect-js/is-accessor-descriptor/compare/v1.0.1...v1.0.2) - 2026-05-09 + +### Commits + +- [meta] update workflows [`0d8f83a`](https://github.com/inspect-js/is-accessor-descriptor/commit/0d8f83a65fdb02dd0359e1a00231e11372dace02) +- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `eslint`, `npmignore`, `tape` [`6a4bbe1`](https://github.com/inspect-js/is-accessor-descriptor/commit/6a4bbe1b2c7c6a7d695f8793a319dc1644d77d78) +- [meta] use `npm audit` instead of `aud` [`3f32351`](https://github.com/inspect-js/is-accessor-descriptor/commit/3f323515d49205509739fc0e4f2fd16043991564) +- [Deps] update `hasown` [`ff8ba09`](https://github.com/inspect-js/is-accessor-descriptor/commit/ff8ba092cb149020c9f231d7b7892dceb6e44165) +- [meta] lower engines.node threshold [`4293ff7`](https://github.com/inspect-js/is-accessor-descriptor/commit/4293ff7bb43e68d39a4b831979eaf3a54ca7f4f8) + +## [v1.0.1](https://github.com/inspect-js/is-accessor-descriptor/compare/v1.0.0...v1.0.1) - 2023-10-26 + +### Commits + +- [eslint] actually use eslint [`a05c057`](https://github.com/inspect-js/is-accessor-descriptor/commit/a05c0576662de977798bcba0ffa037a1ffdb9f68) +- [readme] clean up docs, URLs, package.json, etc [`6648dcd`](https://github.com/inspect-js/is-accessor-descriptor/commit/6648dcde8c01fcb36f7d6aaa3f70e3563df54b67) +- [meta] update `.gitignore` [`cba0ea0`](https://github.com/inspect-js/is-accessor-descriptor/commit/cba0ea006594dd4583ba671c1643a1e96aaab7ff) +- [readme] remove verb [`2f07da4`](https://github.com/inspect-js/is-accessor-descriptor/commit/2f07da493d0c824b5738675999ea4a3db541c84e) +- [Tests] switch to tape [`7e39202`](https://github.com/inspect-js/is-accessor-descriptor/commit/7e392020781a23f4c1276e78da4bf8a798021d85) +- [Tests] migrate from travis to github actions [`aa436b0`](https://github.com/inspect-js/is-accessor-descriptor/commit/aa436b0bbeb03c1281e816445e4d495e582274c7) +- [Fix] properly handle an accessor descriptor with only a setter [`04647f4`](https://github.com/inspect-js/is-accessor-descriptor/commit/04647f45870a2d3a78e2ae8adf07b0e9d47e0fc9) +- [Refactor] properly guard for-in loop [`a0454cc`](https://github.com/inspect-js/is-accessor-descriptor/commit/a0454cca3ea0610c8cf5e0b70bd581689ded929a) +- [Fix] allow any non-primitive; arrays and functions are objects too [`123e3c3`](https://github.com/inspect-js/is-accessor-descriptor/commit/123e3c3da341a1a397e274805df88ed13646442f) +- [Refactor] use `hasown` [`7ad36a0`](https://github.com/inspect-js/is-accessor-descriptor/commit/7ad36a05be98c7f0ae3f4dc9b3a3df1fa392c7fd) +- [readme] fix incorrect example [`3ee754a`](https://github.com/inspect-js/is-accessor-descriptor/commit/3ee754af6cb65c690ccd9ade150b33e8ec2808f8) +- [Tests] move tests to test dir [`5d70880`](https://github.com/inspect-js/is-accessor-descriptor/commit/5d70880ae2256d1f5927dab02c0bf8fe78cafef3) +- [Dev Deps] add missing `npmignore` [`97ce4bc`](https://github.com/inspect-js/is-accessor-descriptor/commit/97ce4bca878e775672e3d7349906bd7fc7db5f24) +- [Robustness] use a null object just in case [`675af5b`](https://github.com/inspect-js/is-accessor-descriptor/commit/675af5b191ebe9e18fb65c0aecb2a5ae65a535e0) + +## [v1.0.0](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.7...v1.0.0) - 2017-11-01 + +### Merged + +- Pin mocha to version 3 to support Node 0.12 [`#3`](https://github.com/inspect-js/is-accessor-descriptor/pull/3) +- Update kind-of to version 6.0 [`#2`](https://github.com/inspect-js/is-accessor-descriptor/pull/2) + +### Commits + +- run update [`2489800`](https://github.com/inspect-js/is-accessor-descriptor/commit/2489800869cbecf53e9bc3596916abf2e6008edb) +- run verb to generate readme documentation [`22b0a26`](https://github.com/inspect-js/is-accessor-descriptor/commit/22b0a2617ccbebd131247c29e3700ca860d37d06) +- remove should [`4b10d2a`](https://github.com/inspect-js/is-accessor-descriptor/commit/4b10d2aa721021d5f7af69c47f49a1691a8c3fcd) + +## [v0.1.7](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.6...v0.1.7) - 2023-10-26 + +### Commits + +- [eslint] actually use eslint [`d0b9c94`](https://github.com/inspect-js/is-accessor-descriptor/commit/d0b9c94c669a8c2939566fc805e97e0a517ea1db) +- [meta] update package.json, etc from main [`c4fab21`](https://github.com/inspect-js/is-accessor-descriptor/commit/c4fab216ad2f011daf45e35323f1d8a872041e63) +- [Tests] switch to tape [`9a0ab35`](https://github.com/inspect-js/is-accessor-descriptor/commit/9a0ab35563c55cb23e663bd5c842811c59371e31) +- [Tests] migrate from travis to github actions [`6e9c4f1`](https://github.com/inspect-js/is-accessor-descriptor/commit/6e9c4f1a211697db4956743992107e67f751b433) +- [readme] remove verb [`967137d`](https://github.com/inspect-js/is-accessor-descriptor/commit/967137d64da7b14dd861f27c9092a2ac66e09564) +- [readme] use `evalmd` [`471d3b9`](https://github.com/inspect-js/is-accessor-descriptor/commit/471d3b9e33b86a856b68f67dd5e57663af39d746) +- [Fix] only one of `get` and `set` are required to be an accessor [`c8de5e7`](https://github.com/inspect-js/is-accessor-descriptor/commit/c8de5e75a9e817c2726511701c048d0f9360195b) +- [Refactor] use `hasown` [`6151f01`](https://github.com/inspect-js/is-accessor-descriptor/commit/6151f01a4244d22545cd9fb4ca9b6b772f62a40f) +- [Fix] allow any non-primitive; arrays and functions are objects too [`853db5a`](https://github.com/inspect-js/is-accessor-descriptor/commit/853db5a1af876e7c52bee27f6069779d069b1a5c) +- Only apps should have lockfiles [`87402b1`](https://github.com/inspect-js/is-accessor-descriptor/commit/87402b118e6f391dde566cdcd51f27d0e0aa211f) +- [Fix] use correct logic for two-arg form [`3c1729e`](https://github.com/inspect-js/is-accessor-descriptor/commit/3c1729e0e5658fc8b53dbbd945e1c99b033f562a) +- [Fix] properly guard for-in loop [`442daa8`](https://github.com/inspect-js/is-accessor-descriptor/commit/442daa86d808259f62f2ced02619a2bc84f881be) +- [Tests] move tests to test dir [`18313a7`](https://github.com/inspect-js/is-accessor-descriptor/commit/18313a7d61e9bb0d3ff34b112c2d614a975be0df) + +## [v0.1.6](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.5...v0.1.6) - 2015-12-28 + +### Commits + +- update docs [`914d85d`](https://github.com/inspect-js/is-accessor-descriptor/commit/914d85d44b914b8b693889081942bf95ea172914) +- update related projects [`92679ea`](https://github.com/inspect-js/is-accessor-descriptor/commit/92679eab1c0eb16eef052218e309aa55b10ce606) + +## [v0.1.5](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.4...v0.1.5) - 2015-12-28 + +### Commits + +- run update [`139251c`](https://github.com/inspect-js/is-accessor-descriptor/commit/139251c5225d7cdc2b6d16e5c6c713b515643ce8) +- improve checks for valid/invalid properties [`de1be1e`](https://github.com/inspect-js/is-accessor-descriptor/commit/de1be1e6250ca2f084f5d0ac43fed8dd4f607376) +- use verb layout, add verb plugin for formatting markdown [`2324242`](https://github.com/inspect-js/is-accessor-descriptor/commit/23242429e18e6f518318cf1568ec53c636bc1085) +- run verb to generate readme [`84587a4`](https://github.com/inspect-js/is-accessor-descriptor/commit/84587a4269640683049cb06aa75ae9e33165b5fe) + +## [v0.1.4](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.3...v0.1.4) - 2015-12-20 + +### Commits + +- lint [`d076464`](https://github.com/inspect-js/is-accessor-descriptor/commit/d0764648b3428e7f01303ea7835e25be9d1b5c21) +- generate docs [`12e2143`](https://github.com/inspect-js/is-accessor-descriptor/commit/12e2143ca3d93ece7ae73ee3fcbdb8952d7c5091) + +## [v0.1.3](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.2...v0.1.3) - 2015-10-04 + +### Commits + +- files prop [`0bcef73`](https://github.com/inspect-js/is-accessor-descriptor/commit/0bcef73f2c7c90be7e05f3dd56f02fbe67790897) + +## [v0.1.2](https://github.com/inspect-js/is-accessor-descriptor/compare/v0.1.1...v0.1.2) - 2015-10-04 + +### Commits + +- lazy-cache [`fc6da15`](https://github.com/inspect-js/is-accessor-descriptor/commit/fc6da15ecef4a18c20f102a412d596407bb86a5c) +- update docs [`943c0cd`](https://github.com/inspect-js/is-accessor-descriptor/commit/943c0cd4d709eff029fa3880560aec27c0d0f458) + +## v0.1.1 - 2015-08-31 + +### Commits + +- first commit [`dca2279`](https://github.com/inspect-js/is-accessor-descriptor/commit/dca22793793cf208e65d8daee9d949d76252b647) +- 0.1.1 readme [`27c92b6`](https://github.com/inspect-js/is-accessor-descriptor/commit/27c92b65b85b9bfb39945d646f223cbfd262ab41) +- 0.1.1 docs [`09beed6`](https://github.com/inspect-js/is-accessor-descriptor/commit/09beed68a3c5a5ea76128d5faf2933848181750d) +- lint [`aa03d9b`](https://github.com/inspect-js/is-accessor-descriptor/commit/aa03d9ba1e65e2e71be0add9de75d25cc981e9e2) diff --git a/.pnpm-store/v11/files/91/4a1eaca75f67e09109a8ba403cf5d07fe3107d55cfeca64592d63c5ced82e81403d699297cfc45272d4026cf094ebee301db105d868a1c952fdf0aea81d4f0 b/.pnpm-store/v11/files/91/4a1eaca75f67e09109a8ba403cf5d07fe3107d55cfeca64592d63c5ced82e81403d699297cfc45272d4026cf094ebee301db105d868a1c952fdf0aea81d4f0 new file mode 100644 index 00000000..dabfb613 --- /dev/null +++ b/.pnpm-store/v11/files/91/4a1eaca75f67e09109a8ba403cf5d07fe3107d55cfeca64592d63c5ced82e81403d699297cfc45272d4026cf094ebee301db105d868a1c952fdf0aea81d4f0 @@ -0,0 +1,46 @@ +var baseFindIndex = require('./_baseFindIndex'), + baseIsNaN = require('./_baseIsNaN'), + strictLastIndexOf = require('./_strictLastIndexOf'), + toInteger = require('./toInteger'); + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max, + nativeMin = Math.min; + +/** + * This method is like `_.indexOf` except that it iterates over elements of + * `array` from right to left. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.lastIndexOf([1, 2, 1, 2], 2); + * // => 3 + * + * // Search from the `fromIndex`. + * _.lastIndexOf([1, 2, 1, 2], 2, 2); + * // => 1 + */ +function lastIndexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); + } + return value === value + ? strictLastIndexOf(array, value, index) + : baseFindIndex(array, baseIsNaN, index, true); +} + +module.exports = lastIndexOf; diff --git a/.pnpm-store/v11/files/91/5472b679936a00137c584a43300e4f9fb104521ff6da2d179faa687bf35010db287fadd65a8c3b8af1880dab0b5a4bfe4b5b6e1408ed4049735ced8e98ad66 b/.pnpm-store/v11/files/91/5472b679936a00137c584a43300e4f9fb104521ff6da2d179faa687bf35010db287fadd65a8c3b8af1880dab0b5a4bfe4b5b6e1408ed4049735ced8e98ad66 new file mode 100644 index 00000000..fd685291 --- /dev/null +++ b/.pnpm-store/v11/files/91/5472b679936a00137c584a43300e4f9fb104521ff6da2d179faa687bf35010db287fadd65a8c3b8af1880dab0b5a4bfe4b5b6e1408ed4049735ced8e98ad66 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('omit', require('../omit')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/91/61002c908bce6029f0923fe953756f47be4bc5aeacf05fd699b00666bd99c4e4ee874cdc66eff7ec1e4eb8f81bcae585208b544dd4815851c0a1453ae62835 b/.pnpm-store/v11/files/91/61002c908bce6029f0923fe953756f47be4bc5aeacf05fd699b00666bd99c4e4ee874cdc66eff7ec1e4eb8f81bcae585208b544dd4815851c0a1453ae62835 new file mode 100644 index 00000000..0a3442ef --- /dev/null +++ b/.pnpm-store/v11/files/91/61002c908bce6029f0923fe953756f47be4bc5aeacf05fd699b00666bd99c4e4ee874cdc66eff7ec1e4eb8f81bcae585208b544dd4815851c0a1453ae62835 @@ -0,0 +1,22 @@ +define(['exports', 'module', '../exception'], function (exports, module, _exception) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + module.exports = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _Exception['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGlDQUFnQztBQUN2RSxVQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUUxQixlQUFPLFNBQVMsQ0FBQztPQUNsQixNQUFNOztBQUVMLGNBQU0sMEJBQ0osbUJBQW1CLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FDakUsQ0FBQztPQUNIO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiaGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oLyogW2FyZ3MsIF1vcHRpb25zICovKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnTWlzc2luZyBoZWxwZXI6IFwiJyArIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0ubmFtZSArICdcIidcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== diff --git a/.pnpm-store/v11/files/91/8088a2792d57c0b3151e03aa8bc3aa80d4782841162339f6bc28d81d1793abf86ccadc7b284d5c60547752b71b0d07120d42dc9b9ecf0a6b5d7f0f78f103a7 b/.pnpm-store/v11/files/91/8088a2792d57c0b3151e03aa8bc3aa80d4782841162339f6bc28d81d1793abf86ccadc7b284d5c60547752b71b0d07120d42dc9b9ecf0a6b5d7f0f78f103a7 new file mode 100644 index 00000000..6f4dc417 --- /dev/null +++ b/.pnpm-store/v11/files/91/8088a2792d57c0b3151e03aa8bc3aa80d4782841162339f6bc28d81d1793abf86ccadc7b284d5c60547752b71b0d07120d42dc9b9ecf0a6b5d7f0f78f103a7 @@ -0,0 +1,121 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +interface Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): T | undefined; +} + +interface ReadonlyArray { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): T | undefined; +} + +interface Int8Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Uint8Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Uint8ClampedArray { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Int16Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Uint16Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Int32Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Uint32Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Float32Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface Float64Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): number | undefined; +} + +interface BigInt64Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): bigint | undefined; +} + +interface BigUint64Array { + /** + * Returns the item located at the specified index. + * @param index The zero-based index of the desired code unit. A negative index will count back from the last item. + */ + at(index: number): bigint | undefined; +} diff --git a/.pnpm-store/v11/files/91/850f14cf71faa3488604a0165481dac32a2174144a5d7e070f80428096650350c9c4f8f200ef5a324140b7767761c0075b6043ba9ecdf9b70d25d18903c137 b/.pnpm-store/v11/files/91/850f14cf71faa3488604a0165481dac32a2174144a5d7e070f80428096650350c9c4f8f200ef5a324140b7767761c0075b6043ba9ecdf9b70d25d18903c137 new file mode 100644 index 00000000..be2a9d24 --- /dev/null +++ b/.pnpm-store/v11/files/91/850f14cf71faa3488604a0165481dac32a2174144a5d7e070f80428096650350c9c4f8f200ef5a324140b7767761c0075b6043ba9ecdf9b70d25d18903c137 @@ -0,0 +1 @@ +module.exports = require('./dropRightWhile'); diff --git a/.pnpm-store/v11/files/91/abd5b5783c7fed0cd4a3ac8ee7cc35fef2ca1e7565697129c20718f7ea2d98010453066379776131730b834a403e89328510415588e3bf942f13f5e015bf9a b/.pnpm-store/v11/files/91/abd5b5783c7fed0cd4a3ac8ee7cc35fef2ca1e7565697129c20718f7ea2d98010453066379776131730b834a403e89328510415588e3bf942f13f5e015bf9a new file mode 100644 index 00000000..4cef0a00 --- /dev/null +++ b/.pnpm-store/v11/files/91/abd5b5783c7fed0cd4a3ac8ee7cc35fef2ca1e7565697129c20718f7ea2d98010453066379776131730b834a403e89328510415588e3bf942f13f5e015bf9a @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('reduce', require('../reduce')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/91/c306a8d334dcba9b40219940935fd5a736acc9c612a4ddc721da996560bb9339698ab0ae449f68fafb250ffe48a066406f4e24177b504bc65def654a70e149 b/.pnpm-store/v11/files/91/c306a8d334dcba9b40219940935fd5a736acc9c612a4ddc721da996560bb9339698ab0ae449f68fafb250ffe48a066406f4e24177b504bc65def654a70e149 new file mode 100644 index 00000000..11467805 --- /dev/null +++ b/.pnpm-store/v11/files/91/c306a8d334dcba9b40219940935fd5a736acc9c612a4ddc721da996560bb9339698ab0ae449f68fafb250ffe48a066406f4e24177b504bc65def654a70e149 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('includes', require('../includes')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/91/e5cb83f99ca3b2a6c846b501bf9f6b2e3547a1982047b0e7c88cd92dbb1521d068698627150ea1ec9b4a594d6938453fcf71776ae1601427289d22f4ebec0f b/.pnpm-store/v11/files/91/e5cb83f99ca3b2a6c846b501bf9f6b2e3547a1982047b0e7c88cd92dbb1521d068698627150ea1ec9b4a594d6938453fcf71776ae1601427289d22f4ebec0f new file mode 100644 index 00000000..6b4a4a0f --- /dev/null +++ b/.pnpm-store/v11/files/91/e5cb83f99ca3b2a6c846b501bf9f6b2e3547a1982047b0e7c88cd92dbb1521d068698627150ea1ec9b4a594d6938453fcf71776ae1601427289d22f4ebec0f @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('bindAll', require('../bindAll')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/91/ea2f69c1c8e3f37513bb610b0503c85c3d8e9615471408253fd5c65c3ccef371624699141dbd3c62f06a5a31a45defc17f878b5e9791093052f6d83ba1f8ce b/.pnpm-store/v11/files/91/ea2f69c1c8e3f37513bb610b0503c85c3d8e9615471408253fd5c65c3ccef371624699141dbd3c62f06a5a31a45defc17f878b5e9791093052f6d83ba1f8ce new file mode 100644 index 00000000..6e79250a --- /dev/null +++ b/.pnpm-store/v11/files/91/ea2f69c1c8e3f37513bb610b0503c85c3d8e9615471408253fd5c65c3ccef371624699141dbd3c62f06a5a31a45defc17f878b5e9791093052f6d83ba1f8ce @@ -0,0 +1,74 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const cp = require("child_process"); +const path = require("path"); +const util = require("util"); +const assert = require("assert"); +const chalk = require("chalk"); +const _suman = global.__suman = (global.__suman || {}); +exports.runUseSh = function (strm, item, cb) { + const { projectRoot, sumanOpts } = _suman; + if (item.script) { + let exec = 'bash'; + if (typeof item.script === 'object') { + exec = item.script.interpreter || exec; + item.script = item.script.str; + } + assert(typeof item.script === 'string', ' => suman.group item has script property which does not point to a string => ' + util.inspect(item)); + let n = cp.spawn(exec, [], { + cwd: item.cwd || process.cwd() + }); + n.stdin.setEncoding('utf8'); + n.stderr.setEncoding('utf8'); + n.stdout.setEncoding('utf8'); + n.stdin.write('\n' + item.script + '\n'); + process.nextTick(function () { + n.stdin.end(); + }); + if (!sumanOpts.no_stream_to_console) { + n.stdout.pipe(process.stdout, { end: false }); + n.stderr.pipe(process.stderr, { end: false }); + } + if (!sumanOpts.no_stream_to_file) { + n.stdout.pipe(strm, { end: false }); + n.stderr.pipe(strm, { end: false }); + } + n.on('close', function (code) { + cb(null, { + code: code, + name: item.name + }); + }); + } + else if (typeof item.getPathToScript === 'function') { + const b = item.getPathToScript(); + assert(path.isAbsolute(b), ' => Path to group script must be absolute.'); + console.log(chalk.red.bold('path to script => ', b)); + let n = cp.spawn(b, [], { + cwd: item.cwd || process.cwd() + }); + n.stdin.setEncoding('utf8'); + n.stderr.setEncoding('utf8'); + n.stdout.setEncoding('utf8'); + if (!sumanOpts.no_stream_to_console) { + n.stdout.pipe(process.stdout, { end: false }); + n.stderr.pipe(process.stderr, { end: false }); + } + if (!sumanOpts.no_stream_to_file) { + n.stdout.pipe(strm, { end: false }); + n.stderr.pipe(strm, { end: false }); + } + n.on('close', function (code) { + cb(null, { + code: code, + name: item.name + }); + }); + } + else { + throw new Error(' => Suman usage error => You do not have the necessary properties on your suman.group item.\n' + + 'Please see xxx.'); + } +}; diff --git a/.pnpm-store/v11/files/92/0aea250d98e29e8005ef0185df5e34bc426d321785df07cbabace60bdbcfc6c92e2ff0c9f226a54925d2c7d595035efeababc935c7f1a4c704e7a7ef641339 b/.pnpm-store/v11/files/92/0aea250d98e29e8005ef0185df5e34bc426d321785df07cbabace60bdbcfc6c92e2ff0c9f226a54925d2c7d595035efeababc935c7f1a4c704e7a7ef641339 new file mode 100644 index 00000000..71069249 --- /dev/null +++ b/.pnpm-store/v11/files/92/0aea250d98e29e8005ef0185df5e34bc426d321785df07cbabace60bdbcfc6c92e2ff0c9f226a54925d2c7d595035efeababc935c7f1a4c704e7a7ef641339 @@ -0,0 +1,185 @@ +/** + * This is the web browser implementation of `debug()`. + * + * Expose `debug()` as the module. + */ + +exports = module.exports = require('./debug'); +exports.log = log; +exports.formatArgs = formatArgs; +exports.save = save; +exports.load = load; +exports.useColors = useColors; +exports.storage = 'undefined' != typeof chrome + && 'undefined' != typeof chrome.storage + ? chrome.storage.local + : localstorage(); + +/** + * Colors. + */ + +exports.colors = [ + 'lightseagreen', + 'forestgreen', + 'goldenrod', + 'dodgerblue', + 'darkorchid', + 'crimson' +]; + +/** + * Currently only WebKit-based Web Inspectors, Firefox >= v31, + * and the Firebug extension (any Firefox version) are known + * to support "%c" CSS customizations. + * + * TODO: add a `localStorage` variable to explicitly enable/disable colors + */ + +function useColors() { + // NB: In an Electron preload script, document will be defined but not fully + // initialized. Since we know we're in Chrome, we'll just detect this case + // explicitly + if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') { + return true; + } + + // is webkit? http://stackoverflow.com/a/16459606/376773 + // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632 + return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) || + // is firebug? http://stackoverflow.com/a/398120/376773 + (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) || + // is firefox >= v31? + // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) || + // double check webkit in userAgent just in case we are in a worker + (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)); +} + +/** + * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. + */ + +exports.formatters.j = function(v) { + try { + return JSON.stringify(v); + } catch (err) { + return '[UnexpectedJSONParseError]: ' + err.message; + } +}; + + +/** + * Colorize log arguments if enabled. + * + * @api public + */ + +function formatArgs(args) { + var useColors = this.useColors; + + args[0] = (useColors ? '%c' : '') + + this.namespace + + (useColors ? ' %c' : ' ') + + args[0] + + (useColors ? '%c ' : ' ') + + '+' + exports.humanize(this.diff); + + if (!useColors) return; + + var c = 'color: ' + this.color; + args.splice(1, 0, c, 'color: inherit') + + // the final "%c" is somewhat tricky, because there could be other + // arguments passed either before or after the %c, so we need to + // figure out the correct index to insert the CSS into + var index = 0; + var lastC = 0; + args[0].replace(/%[a-zA-Z%]/g, function(match) { + if ('%%' === match) return; + index++; + if ('%c' === match) { + // we only are interested in the *last* %c + // (the user may have provided their own) + lastC = index; + } + }); + + args.splice(lastC, 0, c); +} + +/** + * Invokes `console.log()` when available. + * No-op when `console.log` is not a "function". + * + * @api public + */ + +function log() { + // this hackery is required for IE8/9, where + // the `console.log` function doesn't have 'apply' + return 'object' === typeof console + && console.log + && Function.prototype.apply.call(console.log, console, arguments); +} + +/** + * Save `namespaces`. + * + * @param {String} namespaces + * @api private + */ + +function save(namespaces) { + try { + if (null == namespaces) { + exports.storage.removeItem('debug'); + } else { + exports.storage.debug = namespaces; + } + } catch(e) {} +} + +/** + * Load `namespaces`. + * + * @return {String} returns the previously persisted debug modes + * @api private + */ + +function load() { + var r; + try { + r = exports.storage.debug; + } catch(e) {} + + // If debug isn't set in LS, and we're in Electron, try to load $DEBUG + if (!r && typeof process !== 'undefined' && 'env' in process) { + r = process.env.DEBUG; + } + + return r; +} + +/** + * Enable namespaces listed in `localStorage.debug` initially. + */ + +exports.enable(load()); + +/** + * Localstorage attempts to return the localstorage. + * + * This is necessary because safari throws + * when a user disables cookies/localstorage + * and you attempt to access it. + * + * @return {LocalStorage} + * @api private + */ + +function localstorage() { + try { + return window.localStorage; + } catch (e) {} +} diff --git a/.pnpm-store/v11/files/92/0db417d018679052d51ca3878dab54fa30053a4fac98ed88f0639737d6eb7883b9164808ea81a247a8144f18f5fc3fcaaf5aaf0ae7cb33464f8308303589b3 b/.pnpm-store/v11/files/92/0db417d018679052d51ca3878dab54fa30053a4fac98ed88f0639737d6eb7883b9164808ea81a247a8144f18f5fc3fcaaf5aaf0ae7cb33464f8308303589b3 new file mode 100644 index 00000000..8fb39191 --- /dev/null +++ b/.pnpm-store/v11/files/92/0db417d018679052d51ca3878dab54fa30053a4fac98ed88f0639737d6eb7883b9164808ea81a247a8144f18f5fc3fcaaf5aaf0ae7cb33464f8308303589b3 @@ -0,0 +1,689 @@ +# micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Build Status](https://img.shields.io/travis/jonschlinkert/micromatch.svg?style=flat)](https://travis-ci.org/jonschlinkert/micromatch) + +> Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. + +Micromatch supports all of the same matching features as [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch). + +* [mm()](#usage) is the same as [multimatch()](https://github.com/sindresorhus/multimatch) +* [mm.match()](#match) is the same as [minimatch.match()](https://github.com/isaacs/minimatch) +* use [mm.isMatch()](#ismatch) instead of [minimatch()](https://github.com/isaacs/minimatch) + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save micromatch +``` + +## Start matching! + +```js +var mm = require('micromatch'); +console.log(mm([''])) +``` + +*** + +### Features + +* [Drop-in replacement](#switch-from-minimatch) for [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch) +* Built-in support for multiple glob patterns, like `['foo/*.js', '!bar.js']` +* [Brace Expansion](https://github.com/jonschlinkert/braces) (`foo/bar-{1..5}.md`, `one/{two,three}/four.md`) +* Typical glob patterns, like `**/*`, `a/b/*.js`, or `['foo/*.js', '!bar.js']` +* Methods like `.isMatch()`, `.contains()` and `.any()` + +**Extended globbing features:** + +* Logical `OR` (`foo/bar/(abc|xyz).js`) +* Regex character classes (`foo/bar/baz-[1-5].js`) +* POSIX [bracket expressions](https://github.com/jonschlinkert/expand-brackets) (`**/[[:alpha:][:digit:]]/`) +* [extglobs](https://github.com/jonschlinkert/extglob) (`**/+(x|y)`, `!(a|b)`, etc). + +You can combine these to create whatever matching patterns you need. + +**Example** + +```js +// double-negation! +mm(['fa', 'fb', 'f', 'fo'], '!(f!(o))'); +//=> ['fo'] +``` + +## Why switch to micromatch? + +* Native support for multiple glob patterns, no need for wrappers like [multimatch](https://github.com/sindresorhus/multimatch) +* [10-55x faster](#benchmarks) and more performant than [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch). This is achieved through a combination of caching and regex optimization strategies, a fundamentally different approach than minimatch. +* More extensive support for the Bash 4.3 specification +* More complete extglob support +* Extensive [unit tests](./test) (approx. 1,300 tests). Minimatch fails many of the tests. + +### Switch from minimatch + +Use `mm.isMatch()` instead of `minimatch()`: + +```js +mm.isMatch('foo', 'b*'); +//=> false +``` + +Use `mm.match()` instead of `minimatch.match()`: + +```js +mm.match(['foo', 'bar'], 'b*'); +//=> 'bar' +``` + +### Switch from multimatch + +Same signature: + +```js +mm(['foo', 'bar', 'baz'], ['f*', '*z']); +//=> ['foo', 'baz'] +``` + +*** + +## Usage + +Add micromatch to your node.js project: + +```js +var mm = require('micromatch'); +``` + +**Signature** + +```js +mm(array_of_strings, glob_patterns[, options]); +``` + +**Example** + +```js +mm(['foo', 'bar', 'baz'], 'b*'); +//=> ['bar', 'baz'] +``` + +### Usage examples + +**Brace expansion** + +Match files with `.js` or `.txt` extensions. + +```js +mm(['a.js', 'b.md', 'c.txt'], '*.{js,txt}'); +//=> ['a.js', 'c.txt'] +``` + +**Extglobs** + +Match anything except for files with the `.md` extension. + +```js +mm(files, '**/*.!(md)'); + +//=> ['a.js', 'c.txt'] +``` + +**Multiple patterns** + +Match using an array of patterns. + +```js +mm(['a.md', 'b.js', 'c.txt', 'd.json'], ['*.md', '*.txt']); +//=> ['a.md', 'c.txt'] +``` + +**Negation patterns:** + +Behavior is designed to be what users would expect, based on conventions that are already well-established. + +* [minimatch](https://github.com/isaacs/minimatch) behavior is used when the pattern is a string, so patterns are **inclusive by default**. +* [multimatch](https://github.com/sindresorhus/multimatch) behavior is used when an array of patterns is passed, so patterns are **exclusive by default**. + +```js +mm(['a.js', 'b.md', 'c.txt'], '!*.{js,txt}'); +//=> ['b.md'] + +mm(['a.md', 'b.js', 'c.txt', 'd.json'], ['*.*', '!*.{js,txt}']); +//=> ['a.md', 'd.json'] +``` + +*** + +## API methods + +```js +var mm = require('micromatch'); +``` + +### .match + +```js +mm.match(array, globString); +``` + +Return an array of files that match the given glob pattern. Useful if you only need to use a single glob pattern. + +**Example** + +```js +mm.match(['ab', 'a/b', 'bb', 'b/c'], '?b'); +//=> ['ab', 'bb'] + +mm.match(['ab', 'a/b', 'bb', 'b/c'], '*/b'); +//=> ['a/b'] +``` + +### .isMatch + +```js +mm.isMatch(filepath, globString); +``` + +Returns true if a file path matches the given glob pattern. + +**Example** + +```js +mm.isMatch('.verb.md', '*.md'); +//=> false + +mm.isMatch('.verb.md', '*.md', {dot: true}); +//=> true +``` + +### .contains + +Returns true if any part of a file path matches the given glob pattern. Think of this is "has path" versus "is path". + +**Example** + +`.isMatch()` would return false for both of the following: + +```js +mm.contains('a/b/c', 'a/b'); +//=> true + +mm.contains('a/b/c', 'a/*'); +//=> true +``` + +### .matcher + +Returns a function for matching using the supplied pattern. e.g. create your own "matcher". The advantage of this method is that the pattern can be compiled outside of a loop. + +**Pattern** + +Can be any of the following: + +* `glob/string` +* `regex` +* `function` + +**Example** + +```js +var isMatch = mm.matcher('*.md'); +var files = []; + +['a.md', 'b.txt', 'c.md'].forEach(function(fp) { + if (isMatch(fp)) { + files.push(fp); + } +}); +``` + +### .filter + +Returns a function that can be passed to `Array#filter()`. + +**Params** + +* `patterns` **{String|Array}**: + +**Examples** + +Single glob: + +```js +var fn = mm.filter('*.md'); +['a.js', 'b.txt', 'c.md'].filter(fn); +//=> ['c.md'] + +var fn = mm.filter('[a-c]'); +['a', 'b', 'c', 'd', 'e'].filter(fn); +//=> ['a', 'b', 'c'] +``` + +Array of glob patterns: + +```js +var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; + +var fn = mm.filter(['{1..10}', '![7-9]', '!{3..4}']); +arr.filter(fn); +//=> [1, 2, 5, 6, 10] +``` + +_(Internally this function generates the matching function by using the [matcher](#matcher) method. You can use the [matcher](#matcher) method directly to create your own filter function)_ + +### .any + +Returns true if a file path matches any of the given patterns. + +```js +mm.any(filepath, patterns, options); +``` + +**Params** + +* filepath `{String}`: The file path to test. +* patterns `{String|Array}`: One or more glob patterns +* options: `{Object}`: options to pass to the `.matcher()` method. + +**Example** + +```js +mm.any('abc', ['!*z']); +//=> true +mm.any('abc', ['a*', 'z*']); +//=> true +mm.any('abc', 'a*'); +//=> true +mm.any('abc', ['z*']); +//=> false +``` + +### .expand + +Returns an object with a regex-compatible string and tokens. + +```js +mm.expand('*.js'); + +// when `track` is enabled (for debugging), the `history` array is used +// to record each mutation to the glob pattern as it's converted to regex +{ options: { track: false, dot: undefined, makeRe: true, negated: false }, + pattern: '(.*\\/|^)bar\\/(?:(?!(?:^|\\/)\\.).)*?', + history: [], + tokens: + { path: + { whole: '**/bar/**', + dirname: '**/bar/', + filename: '**', + basename: '**', + extname: '', + ext: '' }, + is: + { glob: true, + negated: false, + globstar: true, + dotfile: false, + dotdir: false }, + match: {}, + original: '**/bar/**', + pattern: '**/bar/**', + base: '' } } +``` + +### .makeRe + +Create a regular expression for matching file paths based on the given pattern: + +```js +mm.makeRe('*.js'); +//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ +``` + +## Options + +### options.unixify + +Normalize slashes in file paths and glob patterns to forward slashes. + +Type: `{Boolean}` + +Default: `undefined` on non-windows, `true` on windows. + +### options.dot + +Match dotfiles. Same behavior as [minimatch](https://github.com/isaacs/minimatch). + +Type: `{Boolean}` + +Default: `false` + +### options.unescape + +Unescape slashes in glob patterns. Use cautiously, especially on windows. + +Type: `{Boolean}` + +Default: `undefined` + +**Example** + +```js +mm.isMatch('abc', '\\a\\b\\c', {unescape: true}); +//=> true +``` + +### options.nodupes + +Remove duplicate elements from the result array. + +Type: `{Boolean}` + +Default: `undefined` + +**Example** + +Example of using the `unescape` and `nodupes` options together: + +```js +mm.match(['abc', '\\a\\b\\c'], '\\a\\b\\c', {unescape: true}); +//=> ['abc', 'abc'] + +mm.match(['abc', '\\a\\b\\c'], '\\a\\b\\c', {unescape: true, nodupes: true}); +//=> ['abc'] +``` + +### options.matchBase + +Allow glob patterns without slashes to match a file path based on its basename. . Same behavior as [minimatch](https://github.com/isaacs/minimatch). + +Type: `{Boolean}` + +Default: `false` + +**Example** + +```js +mm(['a/b.js', 'a/c.md'], '*.js'); +//=> [] + +mm(['a/b.js', 'a/c.md'], '*.js', {matchBase: true}); +//=> ['a/b.js'] +``` + +### options.nobraces + +Don't expand braces in glob patterns. Same behavior as [minimatch](https://github.com/isaacs/minimatch) `nobrace`. + +Type: `{Boolean}` + +Default: `undefined` + +See [braces](https://github.com/jonschlinkert/braces) for more information about extended brace expansion. + +### options.nobrackets + +Don't expand POSIX bracket expressions. + +Type: `{Boolean}` + +Default: `undefined` + +See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about extended bracket expressions. + +### options.noextglob + +Don't expand extended globs. + +Type: `{Boolean}` + +Default: `undefined` + +See [extglob](https://github.com/jonschlinkert/extglob) for more information about extended globs. + +### options.nocase + +Use a case-insensitive regex for matching files. Same behavior as [minimatch](https://github.com/isaacs/minimatch). + +Type: `{Boolean}` + +Default: `false` + +### options.nonegate + +Disallow negation (`!`) patterns. + +Type: `{Boolean}` + +Default: `false` + +### options.nonull + +If `true`, when no matches are found the actual (array-ified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch). + +Type: `{Boolean}` + +Default: `false` + +### options.cache + +Cache the platform (e.g. `win32`) to prevent this from being looked up for every filepath. + +Type: `{Boolean}` + +Default: `true` + +*** + +## Other features + +Micromatch also supports the following. + +### Extended globbing + +#### extglobs + +Extended globbing, as described by the bash man page: + +| **pattern** | **regex equivalent** | **description** | +| --- | --- | --- | +| `?(pattern-list)` | `(... | ...)?` | Matches zero or one occurrence of the given patterns | +| `*(pattern-list)` | `(... | ...)*` | Matches zero or more occurrences of the given patterns | +| `+(pattern-list)` | `(... | ...)+` | Matches one or more occurrences of the given patterns | +| `@(pattern-list)` | `(... | ...)` * | Matches one of the given patterns | +| `!(pattern-list)` | N/A | Matches anything except one of the given patterns | + +* `@` isn't a RegEx character. + +Powered by [extglob](https://github.com/jonschlinkert/extglob). Visit that library for the full range of options or to report extglob related issues. + +See [extglob](https://github.com/jonschlinkert/extglob) for more information about extended globs. + +#### brace expansion + +In simple cases, brace expansion appears to work the same way as the logical `OR` operator. For example, `(a|b)` will achieve the same result as `{a,b}`. + +Here are some powerful features unique to brace expansion (versus character classes): + +* range expansion: `a{1..3}b/*.js` expands to: `['a1b/*.js', 'a2b/*.js', 'a3b/*.js']` +* nesting: `a{c,{d,e}}b/*.js` expands to: `['acb/*.js', 'adb/*.js', 'aeb/*.js']` + +Visit [braces](https://github.com/jonschlinkert/braces) to ask questions and create an issue related to brace-expansion, or to see the full range of features and options related to brace expansion. + +#### regex character classes + +With the exception of brace expansion (`{a,b}`, `{1..5}`, etc), most of the special characters convert directly to regex, so you can expect them to follow the same rules and produce the same results as regex. + +For example, given the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: + +* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']` +* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` +* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` +* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']` + +Learn about [regex character classes](http://www.regular-expressions.info/charclass.html). + +#### regex groups + +Given `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: + +* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']` +* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']` +* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']` + +As with regex, parenthese can be nested, so patterns like `((a|b)|c)/b` will work. But it might be easier to achieve your goal using brace expansion. + +#### POSIX bracket expressions + +**Example** + +```js +mm.isMatch('a1', '[[:alpha:][:digit:]]'); +//=> true +``` + +See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about extended bracket expressions. + +*** + +## Notes + +Whenever possible parsing behavior for patterns is based on globbing specifications in Bash 4.3. Patterns that aren't described by Bash follow wildmatch spec (used by git). + +## Benchmarks + +Run the [benchmarks](./benchmark): + +```bash +node benchmark +``` + +As of July 15, 2016: + +```bash +#1: basename-braces + micromatch x 26,420 ops/sec ±0.89% (91 runs sampled) + minimatch x 3,507 ops/sec ±0.64% (97 runs sampled) + +#2: basename + micromatch x 25,315 ops/sec ±0.82% (93 runs sampled) + minimatch x 4,398 ops/sec ±0.86% (94 runs sampled) + +#3: braces-no-glob + micromatch x 341,254 ops/sec ±0.78% (93 runs sampled) + minimatch x 30,197 ops/sec ±1.12% (91 runs sampled) + +#4: braces + micromatch x 54,649 ops/sec ±0.74% (94 runs sampled) + minimatch x 3,095 ops/sec ±0.82% (95 runs sampled) + +#5: immediate + micromatch x 16,719 ops/sec ±0.79% (95 runs sampled) + minimatch x 4,348 ops/sec ±0.86% (96 runs sampled) + +#6: large + micromatch x 721 ops/sec ±0.77% (94 runs sampled) + minimatch x 17.73 ops/sec ±1.08% (50 runs sampled) + +#7: long + micromatch x 5,051 ops/sec ±0.87% (97 runs sampled) + minimatch x 628 ops/sec ±0.83% (94 runs sampled) + +#8: mid + micromatch x 51,280 ops/sec ±0.80% (95 runs sampled) + minimatch x 1,923 ops/sec ±0.84% (95 runs sampled) + +#9: multi-patterns + micromatch x 22,440 ops/sec ±0.97% (94 runs sampled) + minimatch x 2,481 ops/sec ±1.10% (94 runs sampled) + +#10: no-glob + micromatch x 722,823 ops/sec ±1.30% (87 runs sampled) + minimatch x 52,967 ops/sec ±1.09% (94 runs sampled) + +#11: range + micromatch x 243,471 ops/sec ±0.79% (94 runs sampled) + minimatch x 11,736 ops/sec ±0.82% (96 runs sampled) + +#12: shallow + micromatch x 190,874 ops/sec ±0.98% (95 runs sampled) + minimatch x 21,699 ops/sec ±0.81% (97 runs sampled) + +#13: short + micromatch x 496,393 ops/sec ±3.86% (90 runs sampled) + minimatch x 53,765 ops/sec ±0.75% (95 runs sampled) +``` + +## Tests + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Coverage + +As of July 15, 2016: + +```sh +Statements : 100% (441/441) +Branches : 100% (270/270) +Functions : 100% (54/54) +Lines : 100% (429/429) +``` + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +Please be sure to run the benchmarks before/after any code changes to judge the impact before you do a PR. thanks! + +## Related + +* [braces](https://www.npmjs.com/package/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.") +* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") +* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.") +* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.") +* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or multiplier to use.") +* [gulp-micromatch](https://www.npmjs.com/package/gulp-micromatch): Filter vinyl files with glob patterns, string, regexp, array, object or matcher function. micromatch stream. | [homepage](https://github.com/tunnckocore/gulp-micromatch#readme "Filter vinyl files with glob patterns, string, regexp, array, object or matcher function. micromatch stream.") +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [parse-glob](https://www.npmjs.com/package/parse-glob): Parse a glob pattern into an object of tokens. | [homepage](https://github.com/jonschlinkert/parse-glob "Parse a glob pattern into an object of tokens.") + +## Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +## Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +## Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +## Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +## License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/micromatch/blob/master/LICENSE). + +*** + +_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on July 15, 2016._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/92/1a60d6ac50dada81657b4b9047caac518fd43d853d0b9ff6847b432d12dec179fb689c2cf5f85bd25d7451dbb8fd926b4e3b55b37e6c9c7ee1f363996701bd b/.pnpm-store/v11/files/92/1a60d6ac50dada81657b4b9047caac518fd43d853d0b9ff6847b432d12dec179fb689c2cf5f85bd25d7451dbb8fd926b4e3b55b37e6c9c7ee1f363996701bd new file mode 100644 index 00000000..c35944ab --- /dev/null +++ b/.pnpm-store/v11/files/92/1a60d6ac50dada81657b4b9047caac518fd43d853d0b9ff6847b432d12dec179fb689c2cf5f85bd25d7451dbb8fd926b4e3b55b37e6c9c7ee1f363996701bd @@ -0,0 +1,16 @@ +var copyObject = require('./_copyObject'), + getSymbols = require('./_getSymbols'); + +/** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ +function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); +} + +module.exports = copySymbols; diff --git a/.pnpm-store/v11/files/92/3604e0aaf08a9bf26621bcd17874579ed16d4209bb6dba79014c3d498543f76b6bff9fda25e757421077100f394eac42891a07b07485e0c562d39e0e6ab87c b/.pnpm-store/v11/files/92/3604e0aaf08a9bf26621bcd17874579ed16d4209bb6dba79014c3d498543f76b6bff9fda25e757421077100f394eac42891a07b07485e0c562d39e0e6ab87c new file mode 100644 index 00000000..322e03ca --- /dev/null +++ b/.pnpm-store/v11/files/92/3604e0aaf08a9bf26621bcd17874579ed16d4209bb6dba79014c3d498543f76b6bff9fda25e757421077100f394eac42891a07b07485e0c562d39e0e6ab87c @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = applyEach; + +var _slice = require('./slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _initialParams = require('./initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _wrapAsync = require('./wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function applyEach(eachfn) { + return function (fns /*, ...args*/) { + var args = (0, _slice2.default)(arguments, 1); + var go = (0, _initialParams2.default)(function (args, callback) { + var that = this; + return eachfn(fns, function (fn, cb) { + (0, _wrapAsync2.default)(fn).apply(that, args.concat(cb)); + }, callback); + }); + if (args.length) { + return go.apply(this, args); + } else { + return go; + } + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/92/3eae844e445a18c407ddd87daacff6be821679fc9efd592b128ae07429eb4cd408e797bdb94fbd31c8ef1c293e59c2255ea137608f996b422f7752e7b5f566-exec b/.pnpm-store/v11/files/92/3eae844e445a18c407ddd87daacff6be821679fc9efd592b128ae07429eb4cd408e797bdb94fbd31c8ef1c293e59c2255ea137608f996b422f7752e7b5f566-exec new file mode 100755 index 00000000..55812dfa --- /dev/null +++ b/.pnpm-store/v11/files/92/3eae844e445a18c407ddd87daacff6be821679fc9efd592b128ae07429eb4cd408e797bdb94fbd31c8ef1c293e59c2255ea137608f996b422f7752e7b5f566-exec @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.pnpm-store/v11/files/92/477f5ed8efd0ddb3b2badcd4b5e328043b46bad2bd1cfdcb9c79b00403af469f35d62d73815d5a5cac4323ec19d804563b25647e5b535cb7f82d20b7e8b84d b/.pnpm-store/v11/files/92/477f5ed8efd0ddb3b2badcd4b5e328043b46bad2bd1cfdcb9c79b00403af469f35d62d73815d5a5cac4323ec19d804563b25647e5b535cb7f82d20b7e8b84d new file mode 100644 index 00000000..3d775ba9 --- /dev/null +++ b/.pnpm-store/v11/files/92/477f5ed8efd0ddb3b2badcd4b5e328043b46bad2bd1cfdcb9c79b00403af469f35d62d73815d5a5cac4323ec19d804563b25647e5b535cb7f82d20b7e8b84d @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isNative', require('../isNative'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/92/5401951e5ae911288fb7035f32e24ea05563471ffff1fd1839a7323a78e0f52e33839da63c0fdc74ee7de8a3eef9cb1638f7530a6a1cc5476b8936d91dfa3d b/.pnpm-store/v11/files/92/5401951e5ae911288fb7035f32e24ea05563471ffff1fd1839a7323a78e0f52e33839da63c0fdc74ee7de8a3eef9cb1638f7530a6a1cc5476b8936d91dfa3d new file mode 100644 index 00000000..4e630e29 --- /dev/null +++ b/.pnpm-store/v11/files/92/5401951e5ae911288fb7035f32e24ea05563471ffff1fd1839a7323a78e0f52e33839da63c0fdc74ee7de8a3eef9cb1638f7530a6a1cc5476b8936d91dfa3d @@ -0,0 +1,3090 @@ +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["sourceMap"] = factory(); + else + root["sourceMap"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + /* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ + exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; + exports.SourceNode = __webpack_require__(10).SourceNode; + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var base64VLQ = __webpack_require__(2); + var util = __webpack_require__(4); + var ArraySet = __webpack_require__(5).ArraySet; + var MappingList = __webpack_require__(6).MappingList; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._skipValidation = util.getArg(aArgs, 'skipValidation', false); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = new MappingList(); + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source != null) { + newMapping.source = mapping.source; + if (sourceRoot != null) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name != null) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + if (!this._skipValidation) { + this._validateMapping(generated, original, source, name); + } + + if (source != null) { + source = String(source); + if (!this._sources.has(source)) { + this._sources.add(source); + } + } + + if (name != null) { + name = String(name); + if (!this._names.has(name)) { + this._names.add(name); + } + } + + this._mappings.add({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot != null) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent != null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = Object.create(null); + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else if (this._sourcesContents) { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + var sourceFile = aSourceFile; + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (aSourceFile == null) { + if (aSourceMapConsumer.file == null) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + sourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "sourceFile" relative if an absolute Url is passed. + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "sourceFile" + this._mappings.unsortedForEach(function (mapping) { + if (mapping.source === sourceFile && mapping.originalLine != null) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source != null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath != null) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot != null) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name != null) { + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source != null && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name != null && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aSourceMapPath != null) { + sourceFile = util.join(aSourceMapPath, sourceFile); + } + if (sourceRoot != null) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + // When aOriginal is truthy but has empty values for .line and .column, + // it is most likely a programmer error. In this case we throw a very + // specific error message to try to guide them the right way. + // For example: https://github.com/Polymer/polymer-bundler/pull/519 + if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { + throw new Error( + 'original.line and original.column are not numbers -- you probably meant to omit ' + + 'the original mapping entirely and only map the generated position. If so, pass ' + + 'null for the original mapping instead of an object with empty or null values.' + ); + } + + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var next; + var mapping; + var nameIdx; + var sourceIdx; + + var mappings = this._mappings.toArray(); + for (var i = 0, len = mappings.length; i < len; i++) { + mapping = mappings[i]; + next = '' + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + next += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { + continue; + } + next += ','; + } + } + + next += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source != null) { + sourceIdx = this._sources.indexOf(mapping.source); + next += base64VLQ.encode(sourceIdx - previousSource); + previousSource = sourceIdx; + + // lines are stored 0-based in SourceMap spec version 3 + next += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + next += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name != null) { + nameIdx = this._names.indexOf(mapping.name); + next += base64VLQ.encode(nameIdx - previousName); + previousName = nameIdx; + } + } + + result += next; + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot != null) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._file != null) { + map.file = this._file; + } + if (this._sourceRoot != null) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this.toJSON()); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + var base64 = __webpack_require__(3); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string via the out parameter. + */ + exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (aIndex >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + + digit = base64.decode(aStr.charCodeAt(aIndex++)); + if (digit === -1) { + throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); + } + + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + aOutParam.value = fromVLQSigned(result); + aOutParam.rest = aIndex; + }; + + +/***/ }), +/* 3 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function (number) { + if (0 <= number && number < intToCharMap.length) { + return intToCharMap[number]; + } + throw new TypeError("Must be between 0 and 63: " + number); + }; + + /** + * Decode a single base 64 character code digit to an integer. Returns -1 on + * failure. + */ + exports.decode = function (charCode) { + var bigA = 65; // 'A' + var bigZ = 90; // 'Z' + + var littleA = 97; // 'a' + var littleZ = 122; // 'z' + + var zero = 48; // '0' + var nine = 57; // '9' + + var plus = 43; // '+' + var slash = 47; // '/' + + var littleOffset = 26; + var numberOffset = 52; + + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + if (bigA <= charCode && charCode <= bigZ) { + return (charCode - bigA); + } + + // 26 - 51: abcdefghijklmnopqrstuvwxyz + if (littleA <= charCode && charCode <= littleZ) { + return (charCode - littleA + littleOffset); + } + + // 52 - 61: 0123456789 + if (zero <= charCode && charCode <= nine) { + return (charCode - zero + numberOffset); + } + + // 62: + + if (charCode == plus) { + return 62; + } + + // 63: / + if (charCode == slash) { + return 63; + } + + // Invalid base64 digit. + return -1; + }; + + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consecutive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = exports.isAbsolute(path); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + if (aPath === "") { + aPath = "."; + } + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + exports.isAbsolute = function (aPath) { + return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); + }; + + /** + * Make a path relative to a URL or another path. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be made relative to aRoot. + */ + function relative(aRoot, aPath) { + if (aRoot === "") { + aRoot = "."; + } + + aRoot = aRoot.replace(/\/$/, ''); + + // It is possible for the path to be above the root. In this case, simply + // checking whether the root is a prefix of the path won't work. Instead, we + // need to remove components from the root one by one, until either we find + // a prefix that fits, or we run out of components to remove. + var level = 0; + while (aPath.indexOf(aRoot + '/') !== 0) { + var index = aRoot.lastIndexOf("/"); + if (index < 0) { + return aPath; + } + + // If the only part of the root that is left is the scheme (i.e. http://, + // file:///, etc.), one or more slashes (/), or simply nothing at all, we + // have exhausted all components, so the path is not relative to the root. + aRoot = aRoot.slice(0, index); + if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { + return aPath; + } + + ++level; + } + + // Make sure we add a "../" for each component we removed from the root. + return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); + } + exports.relative = relative; + + var supportsNullProto = (function () { + var obj = Object.create(null); + return !('__proto__' in obj); + }()); + + function identity (s) { + return s; + } + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + if (isProtoString(aStr)) { + return '$' + aStr; + } + + return aStr; + } + exports.toSetString = supportsNullProto ? identity : toSetString; + + function fromSetString(aStr) { + if (isProtoString(aStr)) { + return aStr.slice(1); + } + + return aStr; + } + exports.fromSetString = supportsNullProto ? identity : fromSetString; + + function isProtoString(s) { + if (!s) { + return false; + } + + var length = s.length; + + if (length < 9 /* "__proto__".length */) { + return false; + } + + if (s.charCodeAt(length - 1) !== 95 /* '_' */ || + s.charCodeAt(length - 2) !== 95 /* '_' */ || + s.charCodeAt(length - 3) !== 111 /* 'o' */ || + s.charCodeAt(length - 4) !== 116 /* 't' */ || + s.charCodeAt(length - 5) !== 111 /* 'o' */ || + s.charCodeAt(length - 6) !== 114 /* 'r' */ || + s.charCodeAt(length - 7) !== 112 /* 'p' */ || + s.charCodeAt(length - 8) !== 95 /* '_' */ || + s.charCodeAt(length - 9) !== 95 /* '_' */) { + return false; + } + + for (var i = length - 10; i >= 0; i--) { + if (s.charCodeAt(i) !== 36 /* '$' */) { + return false; + } + } + + return true; + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0 || onlyCompareOriginal) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings with deflated source and name indices where + * the generated positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0 || onlyCompareGenerated) { + return cmp; + } + + cmp = mappingA.source - mappingB.source; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return mappingA.name - mappingB.name; + } + exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; + + function strcmp(aStr1, aStr2) { + if (aStr1 === aStr2) { + return 0; + } + + if (aStr1 > aStr2) { + return 1; + } + + return -1; + } + + /** + * Comparator between two mappings with inflated source and name strings where + * the generated positions are compared. + */ + function compareByGeneratedPositionsInflated(mappingA, mappingB) { + var cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp !== 0) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp !== 0) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp !== 0) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + } + exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; + + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var has = Object.prototype.hasOwnProperty; + var hasNativeMap = typeof Map !== "undefined"; + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = hasNativeMap ? new Map() : Object.create(null); + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Return how many unique items are in this ArraySet. If duplicates have been + * added, than those do not count towards the size. + * + * @returns Number + */ + ArraySet.prototype.size = function ArraySet_size() { + return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var sStr = hasNativeMap ? aStr : util.toSetString(aStr); + var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + if (hasNativeMap) { + this._set.set(aStr, idx); + } else { + this._set[sStr] = idx; + } + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + if (hasNativeMap) { + return this._set.has(aStr); + } else { + var sStr = util.toSetString(aStr); + return has.call(this._set, sStr); + } + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (hasNativeMap) { + var idx = this._set.get(aStr); + if (idx >= 0) { + return idx; + } + } else { + var sStr = util.toSetString(aStr); + if (has.call(this._set, sStr)) { + return this._set[sStr]; + } + } + + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + + /** + * Determine whether mappingB is after mappingA with respect to generated + * position. + */ + function generatedPositionAfter(mappingA, mappingB) { + // Optimized for most common case + var lineA = mappingA.generatedLine; + var lineB = mappingB.generatedLine; + var columnA = mappingA.generatedColumn; + var columnB = mappingB.generatedColumn; + return lineB > lineA || lineB == lineA && columnB >= columnA || + util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; + } + + /** + * A data structure to provide a sorted view of accumulated mappings in a + * performance conscious manner. It trades a neglibable overhead in general + * case for a large speedup in case of mappings being added in order. + */ + function MappingList() { + this._array = []; + this._sorted = true; + // Serves as infimum + this._last = {generatedLine: -1, generatedColumn: 0}; + } + + /** + * Iterate through internal items. This method takes the same arguments that + * `Array.prototype.forEach` takes. + * + * NOTE: The order of the mappings is NOT guaranteed. + */ + MappingList.prototype.unsortedForEach = + function MappingList_forEach(aCallback, aThisArg) { + this._array.forEach(aCallback, aThisArg); + }; + + /** + * Add the given source mapping. + * + * @param Object aMapping + */ + MappingList.prototype.add = function MappingList_add(aMapping) { + if (generatedPositionAfter(this._last, aMapping)) { + this._last = aMapping; + this._array.push(aMapping); + } else { + this._sorted = false; + this._array.push(aMapping); + } + }; + + /** + * Returns the flat, sorted array of mappings. The mappings are sorted by + * generated position. + * + * WARNING: This method returns internal data without copying, for + * performance. The return value must NOT be mutated, and should be treated as + * an immutable borrow. If you want to take ownership, you must make your own + * copy. + */ + MappingList.prototype.toArray = function MappingList_toArray() { + if (!this._sorted) { + this._array.sort(util.compareByGeneratedPositionsInflated); + this._sorted = true; + } + return this._array; + }; + + exports.MappingList = MappingList; + + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var util = __webpack_require__(4); + var binarySearch = __webpack_require__(8); + var ArraySet = __webpack_require__(5).ArraySet; + var base64VLQ = __webpack_require__(2); + var quickSort = __webpack_require__(9).quickSort; + + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + return sourceMap.sections != null + ? new IndexedSourceMapConsumer(sourceMap) + : new BasicSourceMapConsumer(sourceMap); + } + + SourceMapConsumer.fromSourceMap = function(aSourceMap) { + return BasicSourceMapConsumer.fromSourceMap(aSourceMap); + } + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + SourceMapConsumer.prototype._charIsMappingSeparator = + function SourceMapConsumer_charIsMappingSeparator(aStr, index) { + var c = aStr.charAt(index); + return c === ";" || c === ","; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + throw new Error("Subclasses must implement _parseMappings"); + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + SourceMapConsumer.GREATEST_LOWER_BOUND = 1; + SourceMapConsumer.LEAST_UPPER_BOUND = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source === null ? null : this._sources.at(mapping.source); + if (source != null && sourceRoot != null) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name === null ? null : this._names.at(mapping.name) + }; + }, this).forEach(aCallback, context); + }; + + /** + * Returns all generated line and column information for the original source, + * line, and column provided. If no column is provided, returns all mappings + * corresponding to a either the line we are searching for or the next + * closest line that has any mappings. Otherwise, returns all mappings + * corresponding to the given line and either the column we are searching for + * or the next closest column that has any offsets. + * + * The only argument is an object with the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: Optional. the column number in the original source. + * + * and an array of objects is returned, each with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.allGeneratedPositionsFor = + function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { + var line = util.getArg(aArgs, 'line'); + + // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping + // returns the index of the closest mapping less than the needle. By + // setting needle.originalColumn to 0, we thus find the last mapping for + // the given line, provided such a mapping exists. + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: line, + originalColumn: util.getArg(aArgs, 'column', 0) + }; + + if (this.sourceRoot != null) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + if (!this._sources.has(needle.source)) { + return []; + } + needle.source = this._sources.indexOf(needle.source); + + var mappings = []; + + var index = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + binarySearch.LEAST_UPPER_BOUND); + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (aArgs.column === undefined) { + var originalLine = mapping.originalLine; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we found. Since + // mappings are sorted, this is guaranteed to find all mappings for + // the line we found. + while (mapping && mapping.originalLine === originalLine) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } else { + var originalColumn = mapping.originalColumn; + + // Iterate until either we run out of mappings, or we run into + // a mapping for a different line than the one we were searching for. + // Since mappings are sorted, this is guaranteed to find all mappings for + // the line we are searching for. + while (mapping && + mapping.originalLine === line && + mapping.originalColumn == originalColumn) { + mappings.push({ + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }); + + mapping = this._originalMappings[++index]; + } + } + } + + return mappings; + }; + + exports.SourceMapConsumer = SourceMapConsumer; + + /** + * A BasicSourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function BasicSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + sources = sources + .map(String) + // Some source maps produce relative source paths like "./foo.js" instead of + // "foo.js". Normalize these first so that future comparisons will succeed. + // See bugzil.la/1090768. + .map(util.normalize) + // Always ensure that absolute sources are internally stored relative to + // the source root, if the source root is absolute. Not doing this would + // be particularly problematic when the source root is a prefix of the + // source (valid, but why??). See github issue #199 and bugzil.la/1188982. + .map(function (source) { + return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) + ? util.relative(sourceRoot, source) + : source; + }); + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names.map(String), true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; + + /** + * Create a BasicSourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns BasicSourceMapConsumer + */ + BasicSourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(BasicSourceMapConsumer.prototype); + + var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + // Because we are modifying the entries (by converting string sources and + // names to indices into the sources and names ArraySets), we have to make + // a copy of the entry or else bad things happen. Shared mutable state + // strikes again! See github issue #191. + + var generatedMappings = aSourceMap._mappings.toArray().slice(); + var destGeneratedMappings = smc.__generatedMappings = []; + var destOriginalMappings = smc.__originalMappings = []; + + for (var i = 0, length = generatedMappings.length; i < length; i++) { + var srcMapping = generatedMappings[i]; + var destMapping = new Mapping; + destMapping.generatedLine = srcMapping.generatedLine; + destMapping.generatedColumn = srcMapping.generatedColumn; + + if (srcMapping.source) { + destMapping.source = sources.indexOf(srcMapping.source); + destMapping.originalLine = srcMapping.originalLine; + destMapping.originalColumn = srcMapping.originalColumn; + + if (srcMapping.name) { + destMapping.name = names.indexOf(srcMapping.name); + } + + destOriginalMappings.push(destMapping); + } + + destGeneratedMappings.push(destMapping); + } + + quickSort(smc.__originalMappings, util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + BasicSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + /** + * Provide the JIT with a nice shape / hidden class. + */ + function Mapping() { + this.generatedLine = 0; + this.generatedColumn = 0; + this.source = null; + this.originalLine = null; + this.originalColumn = null; + this.name = null; + } + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + BasicSourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var length = aStr.length; + var index = 0; + var cachedSegments = {}; + var temp = {}; + var originalMappings = []; + var generatedMappings = []; + var mapping, str, segment, end, value; + + while (index < length) { + if (aStr.charAt(index) === ';') { + generatedLine++; + index++; + previousGeneratedColumn = 0; + } + else if (aStr.charAt(index) === ',') { + index++; + } + else { + mapping = new Mapping(); + mapping.generatedLine = generatedLine; + + // Because each offset is encoded relative to the previous one, + // many segments often have the same encoding. We can exploit this + // fact by caching the parsed variable length fields of each segment, + // allowing us to avoid a second parse if we encounter the same + // segment again. + for (end = index; end < length; end++) { + if (this._charIsMappingSeparator(aStr, end)) { + break; + } + } + str = aStr.slice(index, end); + + segment = cachedSegments[str]; + if (segment) { + index += str.length; + } else { + segment = []; + while (index < end) { + base64VLQ.decode(aStr, index, temp); + value = temp.value; + index = temp.rest; + segment.push(value); + } + + if (segment.length === 2) { + throw new Error('Found a source, but no line and column'); + } + + if (segment.length === 3) { + throw new Error('Found a source and line, but no column'); + } + + cachedSegments[str] = segment; + } + + // Generated column. + mapping.generatedColumn = previousGeneratedColumn + segment[0]; + previousGeneratedColumn = mapping.generatedColumn; + + if (segment.length > 1) { + // Original source. + mapping.source = previousSource + segment[1]; + previousSource += segment[1]; + + // Original line. + mapping.originalLine = previousOriginalLine + segment[2]; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + + // Original column. + mapping.originalColumn = previousOriginalColumn + segment[3]; + previousOriginalColumn = mapping.originalColumn; + + if (segment.length > 4) { + // Original name. + mapping.name = previousName + segment[4]; + previousName += segment[4]; + } + } + + generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + originalMappings.push(mapping); + } + } + } + + quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); + this.__generatedMappings = generatedMappings; + + quickSort(originalMappings, util.compareByOriginalPositions); + this.__originalMappings = originalMappings; + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + BasicSourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator, aBias) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator, aBias); + }; + + /** + * Compute the last column for each generated mapping. The last column is + * inclusive. + */ + BasicSourceMapConsumer.prototype.computeColumnSpans = + function SourceMapConsumer_computeColumnSpans() { + for (var index = 0; index < this._generatedMappings.length; ++index) { + var mapping = this._generatedMappings[index]; + + // Mappings do not contain a field for the last generated columnt. We + // can come up with an optimistic estimate, however, by assuming that + // mappings are contiguous (i.e. given two consecutive mappings, the + // first mapping ends where the second one starts). + if (index + 1 < this._generatedMappings.length) { + var nextMapping = this._generatedMappings[index + 1]; + + if (mapping.generatedLine === nextMapping.generatedLine) { + mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; + continue; + } + } + + // The last mapping for each line spans the entire line. + mapping.lastGeneratedColumn = Infinity; + } + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + BasicSourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositionsDeflated, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._generatedMappings[index]; + + if (mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source !== null) { + source = this._sources.at(source); + if (this.sourceRoot != null) { + source = util.join(this.sourceRoot, source); + } + } + var name = util.getArg(mapping, 'name', null); + if (name !== null) { + name = this._names.at(name); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: name + }; + } + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + BasicSourceMapConsumer.prototype.hasContentsOfAllSources = + function BasicSourceMapConsumer_hasContentsOfAllSources() { + if (!this.sourcesContent) { + return false; + } + return this.sourcesContent.length >= this._sources.size() && + !this.sourcesContent.some(function (sc) { return sc == null; }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + BasicSourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot != null) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot != null + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + // This function is used recursively from + // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we + // don't want to throw if we can't find the source - we just want to + // return null, so we provide a flag to exit gracefully. + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or + * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + BasicSourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var source = util.getArg(aArgs, 'source'); + if (this.sourceRoot != null) { + source = util.relative(this.sourceRoot, source); + } + if (!this._sources.has(source)) { + return { + line: null, + column: null, + lastColumn: null + }; + } + source = this._sources.indexOf(source); + + var needle = { + source: source, + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + var index = this._findMapping( + needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions, + util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) + ); + + if (index >= 0) { + var mapping = this._originalMappings[index]; + + if (mapping.source === needle.source) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null), + lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) + }; + } + } + + return { + line: null, + column: null, + lastColumn: null + }; + }; + + exports.BasicSourceMapConsumer = BasicSourceMapConsumer; + + /** + * An IndexedSourceMapConsumer instance represents a parsed source map which + * we can query for information. It differs from BasicSourceMapConsumer in + * that it takes "indexed" source maps (i.e. ones with a "sections" field) as + * input. + * + * The only parameter is a raw source map (either as a JSON string, or already + * parsed to an object). According to the spec for indexed source maps, they + * have the following attributes: + * + * - version: Which version of the source map spec this map is following. + * - file: Optional. The generated file this source map is associated with. + * - sections: A list of section definitions. + * + * Each value under the "sections" field has two fields: + * - offset: The offset into the original specified at which this section + * begins to apply, defined as an object with a "line" and "column" + * field. + * - map: A source map definition. This source map could also be indexed, + * but doesn't have to be. + * + * Instead of the "map" field, it's also possible to have a "url" field + * specifying a URL to retrieve a source map from, but that's currently + * unsupported. + * + * Here's an example source map, taken from the source map spec[0], but + * modified to omit a section which uses the "url" field. + * + * { + * version : 3, + * file: "app.js", + * sections: [{ + * offset: {line:100, column:10}, + * map: { + * version : 3, + * file: "section.js", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AAAA,E;;ABCDE;" + * } + * }], + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt + */ + function IndexedSourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sections = util.getArg(sourceMap, 'sections'); + + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + this._sources = new ArraySet(); + this._names = new ArraySet(); + + var lastOffset = { + line: -1, + column: 0 + }; + this._sections = sections.map(function (s) { + if (s.url) { + // The url field will require support for asynchronicity. + // See https://github.com/mozilla/source-map/issues/16 + throw new Error('Support for url field in sections not implemented.'); + } + var offset = util.getArg(s, 'offset'); + var offsetLine = util.getArg(offset, 'line'); + var offsetColumn = util.getArg(offset, 'column'); + + if (offsetLine < lastOffset.line || + (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { + throw new Error('Section offsets must be ordered and non-overlapping.'); + } + lastOffset = offset; + + return { + generatedOffset: { + // The offset fields are 0-based, but we use 1-based indices when + // encoding/decoding from VLQ. + generatedLine: offsetLine + 1, + generatedColumn: offsetColumn + 1 + }, + consumer: new SourceMapConsumer(util.getArg(s, 'map')) + } + }); + } + + IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); + IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; + + /** + * The version of the source mapping spec that we are consuming. + */ + IndexedSourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { + get: function () { + var sources = []; + for (var i = 0; i < this._sections.length; i++) { + for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { + sources.push(this._sections[i].consumer.sources[j]); + } + } + return sources; + } + }); + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + IndexedSourceMapConsumer.prototype.originalPositionFor = + function IndexedSourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + // Find the section containing the generated position we're trying to map + // to an original position. + var sectionIndex = binarySearch.search(needle, this._sections, + function(needle, section) { + var cmp = needle.generatedLine - section.generatedOffset.generatedLine; + if (cmp) { + return cmp; + } + + return (needle.generatedColumn - + section.generatedOffset.generatedColumn); + }); + var section = this._sections[sectionIndex]; + + if (!section) { + return { + source: null, + line: null, + column: null, + name: null + }; + } + + return section.consumer.originalPositionFor({ + line: needle.generatedLine - + (section.generatedOffset.generatedLine - 1), + column: needle.generatedColumn - + (section.generatedOffset.generatedLine === needle.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + bias: aArgs.bias + }); + }; + + /** + * Return true if we have the source content for every source in the source + * map, false otherwise. + */ + IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = + function IndexedSourceMapConsumer_hasContentsOfAllSources() { + return this._sections.every(function (s) { + return s.consumer.hasContentsOfAllSources(); + }); + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * available. + */ + IndexedSourceMapConsumer.prototype.sourceContentFor = + function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + var content = section.consumer.sourceContentFor(aSource, true); + if (content) { + return content; + } + } + if (nullOnMissing) { + return null; + } + else { + throw new Error('"' + aSource + '" is not in the SourceMap.'); + } + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + IndexedSourceMapConsumer.prototype.generatedPositionFor = + function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + + // Only consider this section if the requested source is in the list of + // sources of the consumer. + if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { + continue; + } + var generatedPosition = section.consumer.generatedPositionFor(aArgs); + if (generatedPosition) { + var ret = { + line: generatedPosition.line + + (section.generatedOffset.generatedLine - 1), + column: generatedPosition.column + + (section.generatedOffset.generatedLine === generatedPosition.line + ? section.generatedOffset.generatedColumn - 1 + : 0) + }; + return ret; + } + } + + return { + line: null, + column: null + }; + }; + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + IndexedSourceMapConsumer.prototype._parseMappings = + function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { + this.__generatedMappings = []; + this.__originalMappings = []; + for (var i = 0; i < this._sections.length; i++) { + var section = this._sections[i]; + var sectionMappings = section.consumer._generatedMappings; + for (var j = 0; j < sectionMappings.length; j++) { + var mapping = sectionMappings[j]; + + var source = section.consumer._sources.at(mapping.source); + if (section.consumer.sourceRoot !== null) { + source = util.join(section.consumer.sourceRoot, source); + } + this._sources.add(source); + source = this._sources.indexOf(source); + + var name = section.consumer._names.at(mapping.name); + this._names.add(name); + name = this._names.indexOf(name); + + // The mappings coming from the consumer for the section have + // generated positions relative to the start of the section, so we + // need to offset them to be relative to the start of the concatenated + // generated file. + var adjustedMapping = { + source: source, + generatedLine: mapping.generatedLine + + (section.generatedOffset.generatedLine - 1), + generatedColumn: mapping.generatedColumn + + (section.generatedOffset.generatedLine === mapping.generatedLine + ? section.generatedOffset.generatedColumn - 1 + : 0), + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: name + }; + + this.__generatedMappings.push(adjustedMapping); + if (typeof adjustedMapping.originalLine === 'number') { + this.__originalMappings.push(adjustedMapping); + } + } + } + + quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); + quickSort(this.__originalMappings, util.compareByOriginalPositions); + }; + + exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; + + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + exports.GREATEST_LOWER_BOUND = 1; + exports.LEAST_UPPER_BOUND = 2; + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the index of + // the next-closest element. + // + // 3. We did not find the exact element, and there is no next-closest + // element than the one we are searching for, so we return -1. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return mid; + } + else if (cmp > 0) { + // Our needle is greater than aHaystack[mid]. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); + } + + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return aHigh < aHaystack.length ? aHigh : -1; + } else { + return mid; + } + } + else { + // Our needle is less than aHaystack[mid]. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); + } + + // we are in termination case (3) or (2) and return the appropriate thing. + if (aBias == exports.LEAST_UPPER_BOUND) { + return mid; + } else { + return aLow < 0 ? -1 : aLow; + } + } + } + + /** + * This is an implementation of binary search which will always try and return + * the index of the closest element if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or + * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the + * closest element that is smaller than or greater than the one we are + * searching for, respectively, if the exact element cannot be found. + * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. + */ + exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { + if (aHaystack.length === 0) { + return -1; + } + + var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, + aCompare, aBias || exports.GREATEST_LOWER_BOUND); + if (index < 0) { + return -1; + } + + // We have found either the exact element, or the next-closest element than + // the one we are searching for. However, there may be more than one such + // element. Make sure we always return the smallest of these. + while (index - 1 >= 0) { + if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { + break; + } + --index; + } + + return index; + }; + + +/***/ }), +/* 9 */ +/***/ (function(module, exports) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + // It turns out that some (most?) JavaScript engines don't self-host + // `Array.prototype.sort`. This makes sense because C++ will likely remain + // faster than JS when doing raw CPU-intensive sorting. However, when using a + // custom comparator function, calling back and forth between the VM's C++ and + // JIT'd JS is rather slow *and* loses JIT type information, resulting in + // worse generated code for the comparator function than would be optimal. In + // fact, when sorting with a comparator, these costs outweigh the benefits of + // sorting in C++. By using our own JS-implemented Quick Sort (below), we get + // a ~3500ms mean speed-up in `bench/bench.html`. + + /** + * Swap the elements indexed by `x` and `y` in the array `ary`. + * + * @param {Array} ary + * The array. + * @param {Number} x + * The index of the first item. + * @param {Number} y + * The index of the second item. + */ + function swap(ary, x, y) { + var temp = ary[x]; + ary[x] = ary[y]; + ary[y] = temp; + } + + /** + * Returns a random integer within the range `low .. high` inclusive. + * + * @param {Number} low + * The lower bound on the range. + * @param {Number} high + * The upper bound on the range. + */ + function randomIntInRange(low, high) { + return Math.round(low + (Math.random() * (high - low))); + } + + /** + * The Quick Sort algorithm. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + * @param {Number} p + * Start index of the array + * @param {Number} r + * End index of the array + */ + function doQuickSort(ary, comparator, p, r) { + // If our lower bound is less than our upper bound, we (1) partition the + // array into two pieces and (2) recurse on each half. If it is not, this is + // the empty array and our base case. + + if (p < r) { + // (1) Partitioning. + // + // The partitioning chooses a pivot between `p` and `r` and moves all + // elements that are less than or equal to the pivot to the before it, and + // all the elements that are greater than it after it. The effect is that + // once partition is done, the pivot is in the exact place it will be when + // the array is put in sorted order, and it will not need to be moved + // again. This runs in O(n) time. + + // Always choose a random pivot so that an input array which is reverse + // sorted does not cause O(n^2) running time. + var pivotIndex = randomIntInRange(p, r); + var i = p - 1; + + swap(ary, pivotIndex, r); + var pivot = ary[r]; + + // Immediately after `j` is incremented in this loop, the following hold + // true: + // + // * Every element in `ary[p .. i]` is less than or equal to the pivot. + // + // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. + for (var j = p; j < r; j++) { + if (comparator(ary[j], pivot) <= 0) { + i += 1; + swap(ary, i, j); + } + } + + swap(ary, i + 1, j); + var q = i + 1; + + // (2) Recurse on each half. + + doQuickSort(ary, comparator, p, q - 1); + doQuickSort(ary, comparator, q + 1, r); + } + } + + /** + * Sort the given array in-place with the given comparator function. + * + * @param {Array} ary + * An array to sort. + * @param {function} comparator + * Function to use to compare two items. + */ + exports.quickSort = function (ary, comparator) { + doQuickSort(ary, comparator, 0, ary.length - 1); + }; + + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + /* -*- Mode: js; js-indent-level: 2; -*- */ + /* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + + var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; + var util = __webpack_require__(4); + + // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other + // operating systems these days (capturing the result). + var REGEX_NEWLINE = /(\r?\n)/; + + // Newline character code for charCodeAt() comparisons + var NEWLINE_CODE = 10; + + // Private symbol for identifying `SourceNode`s when multiple versions of + // the source-map library are loaded. This MUST NOT CHANGE across + // versions! + var isSourceNode = "$$$isSourceNode$$$"; + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine == null ? null : aLine; + this.column = aColumn == null ? null : aColumn; + this.source = aSource == null ? null : aSource; + this.name = aName == null ? null : aName; + this[isSourceNode] = true; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + * @param aRelativePath Optional. The path that relative sources in the + * SourceMapConsumer should be relative to. + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // All even indices of this array are one line of the generated code, + // while all odd indices are the newlines between two adjacent lines + // (since `REGEX_NEWLINE` captures its match). + // Processed fragments are accessed by calling `shiftNextLine`. + var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); + var remainingLinesIndex = 0; + var shiftNextLine = function() { + var lineContents = getNextLine(); + // The last line of a file might not have a newline. + var newLine = getNextLine() || ""; + return lineContents + newLine; + + function getNextLine() { + return remainingLinesIndex < remainingLines.length ? + remainingLines[remainingLinesIndex++] : undefined; + } + }; + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[remainingLinesIndex]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(shiftNextLine()); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[remainingLinesIndex]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLinesIndex < remainingLines.length) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + addMappingWithCode(lastMapping, shiftNextLine()); + } + // and add the remaining lines without any mapping + node.add(remainingLines.splice(remainingLinesIndex).join("")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content != null) { + if (aRelativePath != null) { + sourceFile = util.join(aRelativePath, sourceFile); + } + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + var source = aRelativePath + ? util.join(aRelativePath, mapping.source) + : mapping.source; + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk[isSourceNode] || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk[isSourceNode]) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild[isSourceNode]) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i][isSourceNode]) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + for (var idx = 0, length = chunk.length; idx < length; idx++) { + if (chunk.charCodeAt(idx) === NEWLINE_CODE) { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + } + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/.pnpm-store/v11/files/92/9e4ec48cf0d03a1b6d3c1c94b80d1db5cfc99038458d4f529f6b0304a4a7176af555b285fa571fc0e738cef065725e86305c0349ca1497f5697b84b60e4509 b/.pnpm-store/v11/files/92/9e4ec48cf0d03a1b6d3c1c94b80d1db5cfc99038458d4f529f6b0304a4a7176af555b285fa571fc0e738cef065725e86305c0349ca1497f5697b84b60e4509 new file mode 100644 index 00000000..b655dbeb --- /dev/null +++ b/.pnpm-store/v11/files/92/9e4ec48cf0d03a1b6d3c1c94b80d1db5cfc99038458d4f529f6b0304a4a7176af555b285fa571fc0e738cef065725e86305c0349ca1497f5697b84b60e4509 @@ -0,0 +1,60 @@ +{ + "name": "object.pick", + "description": "Returns a filtered copy of an object with only the specified keys, similar to `_.pick` from lodash / underscore.", + "version": "1.3.0", + "homepage": "https://github.com/jonschlinkert/object.pick", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/object.pick", + "bugs": { + "url": "https://github.com/jonschlinkert/object.pick/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "dependencies": { + "isobject": "^3.0.1" + }, + "devDependencies": { + "gulp-format-md": "^1.0.0", + "mocha": "^3.1.2", + "vinyl": "^2.0.0" + }, + "keywords": [ + "object", + "pick" + ], + "verb": { + "run": true, + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "extend-shallow", + "get-value", + "mixin-deep", + "set-value" + ], + "highlight": "object.omit" + }, + "reflinks": [ + "verb" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/.pnpm-store/v11/files/92/afc4bc46816df48349f9c2930c0477f4bd61644434bd4f295470d67bc51d0d6184170d927f48e0a5f9fba82d62b6953fa1087e87c271c678e09339764962ed b/.pnpm-store/v11/files/92/afc4bc46816df48349f9c2930c0477f4bd61644434bd4f295470d67bc51d0d6184170d927f48e0a5f9fba82d62b6953fa1087e87c271c678e09339764962ed new file mode 100644 index 00000000..ee44c31a --- /dev/null +++ b/.pnpm-store/v11/files/92/afc4bc46816df48349f9c2930c0477f4bd61644434bd4f295470d67bc51d0d6184170d927f48e0a5f9fba82d62b6953fa1087e87c271c678e09339764962ed @@ -0,0 +1,35 @@ +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor; + +/** + * The base implementation of `_.repeat` which doesn't coerce arguments. + * + * @private + * @param {string} string The string to repeat. + * @param {number} n The number of times to repeat the string. + * @returns {string} Returns the repeated string. + */ +function baseRepeat(string, n) { + var result = ''; + if (!string || n < 1 || n > MAX_SAFE_INTEGER) { + return result; + } + // Leverage the exponentiation by squaring algorithm for a faster repeat. + // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. + do { + if (n % 2) { + result += string; + } + n = nativeFloor(n / 2); + if (n) { + string += string; + } + } while (n); + + return result; +} + +module.exports = baseRepeat; diff --git a/.pnpm-store/v11/files/92/bb69072248cb8908e6e0bdba8c04d444955611c584a90ec1ef1ca307c87d3c8c4eacf95cda9908077449b75b89d103c5568d32f1ae5e3758f90d4b1e192ea4 b/.pnpm-store/v11/files/92/bb69072248cb8908e6e0bdba8c04d444955611c584a90ec1ef1ca307c87d3c8c4eacf95cda9908077449b75b89d103c5568d32f1ae5e3758f90d4b1e192ea4 new file mode 100644 index 00000000..2dfc5613 --- /dev/null +++ b/.pnpm-store/v11/files/92/bb69072248cb8908e6e0bdba8c04d444955611c584a90ec1ef1ca307c87d3c8c4eacf95cda9908077449b75b89d103c5568d32f1ae5e3758f90d4b1e192ea4 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('values', require('../values'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/92/c2dfbfff33caaef1627d0370c6f0fe6d4a01e1f40fde9efa821d67065f463a3b91eff88ab32e8a9a2ddf1faa20bc13198f7d89815d6e3f394a82df37f62c08 b/.pnpm-store/v11/files/92/c2dfbfff33caaef1627d0370c6f0fe6d4a01e1f40fde9efa821d67065f463a3b91eff88ab32e8a9a2ddf1faa20bc13198f7d89815d6e3f394a82df37f62c08 new file mode 100644 index 00000000..c93d9afb --- /dev/null +++ b/.pnpm-store/v11/files/92/c2dfbfff33caaef1627d0370c6f0fe6d4a01e1f40fde9efa821d67065f463a3b91eff88ab32e8a9a2ddf1faa20bc13198f7d89815d6e3f394a82df37f62c08 @@ -0,0 +1,13 @@ +module.exports = data => { + return { + groups: [ + { + name: '', + useContainer: true, + build: '', + pathToScript: '', + run: '' + } + ] + }; +}; diff --git a/.pnpm-store/v11/files/92/d5fb2d7070be19d2dc90e69609f2af647a1efa1b1808f212896d16cbdce4c53d18c353d362bc101d89ff5e7c666254c6ca27ecbaedbca45891f2241eef4112 b/.pnpm-store/v11/files/92/d5fb2d7070be19d2dc90e69609f2af647a1efa1b1808f212896d16cbdce4c53d18c353d362bc101d89ff5e7c666254c6ca27ecbaedbca45891f2241eef4112 new file mode 100644 index 00000000..8a2d1430 --- /dev/null +++ b/.pnpm-store/v11/files/92/d5fb2d7070be19d2dc90e69609f2af647a1efa1b1808f212896d16cbdce4c53d18c353d362bc101d89ff5e7c666254c6ca27ecbaedbca45891f2241eef4112 @@ -0,0 +1,15 @@ +# Installation +> `npm install --save @types/uuid` + +# Summary +This package contains type definitions for uuid (https://github.com/kelektiv/node-uuid). + +# Details +Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/uuid/v3. + +### Additional Details + * Last updated: Tue, 07 Nov 2023 20:08:00 GMT + * Dependencies: none + +# Credits +These definitions were written by [Oliver Hoffmann](https://github.com/iamolivinius), [Felipe Ochoa](https://github.com/felipeochoa), [Chris Barth](https://github.com/cjbarth), and [Linus Unnebäck](https://github.com/LinusU). diff --git a/.pnpm-store/v11/files/92/e0a78bb69647502ae5ce728bf2bf7f01495626fa91f554c261c47a53afdb5c6931b20e053d76d68058c7a3ffe48a773bbb11a43f9a6fd912cbb61c871d8f49 b/.pnpm-store/v11/files/92/e0a78bb69647502ae5ce728bf2bf7f01495626fa91f554c261c47a53afdb5c6931b20e053d76d68058c7a3ffe48a773bbb11a43f9a6fd912cbb61c871d8f49 new file mode 100644 index 00000000..4a7b8438 --- /dev/null +++ b/.pnpm-store/v11/files/92/e0a78bb69647502ae5ce728bf2bf7f01495626fa91f554c261c47a53afdb5c6931b20e053d76d68058c7a3ffe48a773bbb11a43f9a6fd912cbb61c871d8f49 @@ -0,0 +1,69 @@ +'use strict'; + +var parse = require('../'); +var test = require('tape'); + +test('numeric short args', function (t) { + t.plan(2); + t.deepEqual(parse(['-n123']), { n: 123, _: [] }); + t.deepEqual( + parse(['-123', '456']), + { 1: true, 2: true, 3: 456, _: [] } + ); +}); + +test('short', function (t) { + t.deepEqual( + parse(['-b']), + { b: true, _: [] }, + 'short boolean' + ); + t.deepEqual( + parse(['foo', 'bar', 'baz']), + { _: ['foo', 'bar', 'baz'] }, + 'bare' + ); + t.deepEqual( + parse(['-cats']), + { c: true, a: true, t: true, s: true, _: [] }, + 'group' + ); + t.deepEqual( + parse(['-cats', 'meow']), + { c: true, a: true, t: true, s: 'meow', _: [] }, + 'short group next' + ); + t.deepEqual( + parse(['-h', 'localhost']), + { h: 'localhost', _: [] }, + 'short capture' + ); + t.deepEqual( + parse(['-h', 'localhost', '-p', '555']), + { h: 'localhost', p: 555, _: [] }, + 'short captures' + ); + t.end(); +}); + +test('mixed short bool and capture', function (t) { + t.same( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); + +test('short and long', function (t) { + t.deepEqual( + parse(['-h', 'localhost', '-fp', '555', 'script.js']), + { + f: true, p: 555, h: 'localhost', + _: ['script.js'], + } + ); + t.end(); +}); diff --git a/.pnpm-store/v11/files/92/f05ed122869ef5329a2bf7dc7c1edebe941bf76328cfe7e5d05d9d47a5db67c4e95399dd9cb49d29ecc7740c7013d90c9de4c30a9bb190e4808f7cf4206f7e b/.pnpm-store/v11/files/92/f05ed122869ef5329a2bf7dc7c1edebe941bf76328cfe7e5d05d9d47a5db67c4e95399dd9cb49d29ecc7740c7013d90c9de4c30a9bb190e4808f7cf4206f7e new file mode 100644 index 00000000..c4f52ae0 --- /dev/null +++ b/.pnpm-store/v11/files/92/f05ed122869ef5329a2bf7dc7c1edebe941bf76328cfe7e5d05d9d47a5db67c4e95399dd9cb49d29ecc7740c7013d90c9de4c30a9bb190e4808f7cf4206f7e @@ -0,0 +1,30 @@ +var createToPairs = require('./_createToPairs'), + keys = require('./keys'); + +/** + * Creates an array of own enumerable string keyed-value pairs for `object` + * which can be consumed by `_.fromPairs`. If `object` is a map or set, its + * entries are returned. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias entries + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the key-value pairs. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.toPairs(new Foo); + * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) + */ +var toPairs = createToPairs(keys); + +module.exports = toPairs; diff --git a/.pnpm-store/v11/files/93/0d22e0ee093773ea55892e5fe6f4c5939e30687faf2a3ba71c2a001529f9ac4b5a922a80e24d1fa1babe2c9569ef2b1cfa3dbd48408e721a34af5e3e753ccf b/.pnpm-store/v11/files/93/0d22e0ee093773ea55892e5fe6f4c5939e30687faf2a3ba71c2a001529f9ac4b5a922a80e24d1fa1babe2c9569ef2b1cfa3dbd48408e721a34af5e3e753ccf new file mode 100644 index 00000000..b5bea90d --- /dev/null +++ b/.pnpm-store/v11/files/93/0d22e0ee093773ea55892e5fe6f4c5939e30687faf2a3ba71c2a001529f9ac4b5a922a80e24d1fa1babe2c9569ef2b1cfa3dbd48408e721a34af5e3e753ccf @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/93/19754da55a4cbd2af2ab79cae2694d3c79a48636aebd3e9b0c99144561102746d2e79e8cc94dd98dafed00f2f3782062a873a0206a5bd49caeec8af11f90f5 b/.pnpm-store/v11/files/93/19754da55a4cbd2af2ab79cae2694d3c79a48636aebd3e9b0c99144561102746d2e79e8cc94dd98dafed00f2f3782062a873a0206a5bd49caeec8af11f90f5 new file mode 100644 index 00000000..cbf5b410 --- /dev/null +++ b/.pnpm-store/v11/files/93/19754da55a4cbd2af2ab79cae2694d3c79a48636aebd3e9b0c99144561102746d2e79e8cc94dd98dafed00f2f3782062a873a0206a5bd49caeec8af11f90f5 @@ -0,0 +1,3 @@ +module.exports = { + 'now': require('./now') +}; diff --git a/.pnpm-store/v11/files/93/2403341e19dc0061657ff5f2b27b784e4cd348ee07663afe6cbd66a6883577db7594450bc640e52c3ff48c16f9a0be07f4f9726501f5919ac5ae24b3e739b7 b/.pnpm-store/v11/files/93/2403341e19dc0061657ff5f2b27b784e4cd348ee07663afe6cbd66a6883577db7594450bc640e52c3ff48c16f9a0be07f4f9726501f5919ac5ae24b3e739b7 new file mode 100644 index 00000000..8dbcd531 --- /dev/null +++ b/.pnpm-store/v11/files/93/2403341e19dc0061657ff5f2b27b784e4cd348ee07663afe6cbd66a6883577db7594450bc640e52c3ff48c16f9a0be07f4f9726501f5919ac5ae24b3e739b7 @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2017, Sam Verschueren (github.com/SamVerschueren) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.pnpm-store/v11/files/93/2c6ea5ee72fd093cb4bcf78fa3ced906237fcb4d3a915804a76c0aaffecd0cf52bb1a651d320bb4b7a7c90bf007069463b42a9513ddba8e925dadedf2b8eb9 b/.pnpm-store/v11/files/93/2c6ea5ee72fd093cb4bcf78fa3ced906237fcb4d3a915804a76c0aaffecd0cf52bb1a651d320bb4b7a7c90bf007069463b42a9513ddba8e925dadedf2b8eb9 new file mode 100644 index 00000000..292e6422 --- /dev/null +++ b/.pnpm-store/v11/files/93/2c6ea5ee72fd093cb4bcf78fa3ced906237fcb4d3a915804a76c0aaffecd0cf52bb1a651d320bb4b7a7c90bf007069463b42a9513ddba8e925dadedf2b8eb9 @@ -0,0 +1,193 @@ +# randomatic [![NPM version](https://img.shields.io/npm/v/randomatic.svg?style=flat)](https://www.npmjs.com/package/randomatic) [![NPM monthly downloads](https://img.shields.io/npm/dm/randomatic.svg?style=flat)](https://npmjs.org/package/randomatic) [![NPM total downloads](https://img.shields.io/npm/dt/randomatic.svg?style=flat)](https://npmjs.org/package/randomatic) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/randomatic.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/randomatic) + +> Generate randomized strings of a specified length using simple character sequences. The original generate-password. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save randomatic +``` + +## Usage + +```js +var randomize = require('randomatic'); +``` + +## API + +```js +randomize(pattern, length, options); +randomize.isCrypto; +``` + +* `pattern` **{String}**: (required) The pattern to use for randomizing +* `length` **{Number}**: (optional) The length of the string to generate +* `options` **{Object}**: (optional) See available [options](#options) +* `randomize.isCrypto` will be `true` when a cryptographically secure function is being used to generate random numbers. The value will be `false` when the function in use is `Math.random`. + +### pattern + +> The pattern to use for randomizing + +Patterns can contain any combination of the below characters, specified in any order. + +**Example:** + +To generate a 10-character randomized string using all available characters: + +```js +randomize('*', 10); +//=> 'x2_^-5_T[$' + +randomize('Aa0!', 10); +//=> 'LV3u~BSGhw' +``` + +* `a`: Lowercase alpha characters (`abcdefghijklmnopqrstuvwxyz'`) +* `A`: Uppercase alpha characters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ'`) +* `0`: Numeric characters (`0123456789'`) +* `!`: Special characters (`~!@#$%^&()_+-={}[];\',.`) +* `*`: All characters (all of the above combined) +* `?`: Custom characters (pass a string of custom characters to the options) + +### length + +> The length of the string to generate + +**Examples:** + +* `randomize('A', 5)` will generate a 5-character, uppercase, alphabetical, randomized string, e.g. `KDJWJ`. +* `randomize('0', 2)` will generate a 2-digit random number +* `randomize('0', 3)` will generate a 3-digit random number +* `randomize('0', 12)` will generate a 12-digit random number +* `randomize('A0', 16)` will generate a 16-character, alpha-numeric randomized string + +If `length` is left undefined, the length of the pattern in the first parameter will be used. For example: + +* `randomize('00')` will generate a 2-digit random number +* `randomize('000')` will generate a 3-digit random number +* `randomize('0000')` will generate a 4-digit random number... +* `randomize('AAAAA')` will generate a 5-character, uppercase alphabetical random string... + +These are just examples, [see the tests](./test.js) for more use cases and examples. + +## options + +> These are options that can be passed as the third argument. + +#### chars + +Type: `String` + +Default: `undefined` + +Define a custom string to be randomized. + +**Example:** + +* `randomize('?', 20, {chars: 'jonschlinkert'})` will generate a 20-character randomized string from the letters contained in `jonschlinkert`. +* `randomize('?', {chars: 'jonschlinkert'})` will generate a 13-character randomized string from the letters contained in `jonschlinkert`. + +#### exclude + +Type: `String|Array` + +Default: `undefined` + +Specify a string or array of characters can are excluded from the possible characters used to generate the randomized string. + +**Example:** + +* `randomize('*', 20, { exclude: '0oOiIlL1' })` will generate a 20-character randomized string using all of possible characters except for `0oOiIlL1`. + +## Usage Examples + +* `randomize('A', 4)` (_whitespace insenstive_) would result in randomized 4-digit uppercase letters, like, `ZAKH`, `UJSL`... etc. +* `randomize('AAAA')` is equivelant to `randomize('A', 4)` +* `randomize('AAA0')` and `randomize('AA00')` and `randomize('A0A0')` are equivelant to `randomize('A0', 4)` +* `randomize('aa')`: results in double-digit, randomized, lower-case letters (`abcdefghijklmnopqrstuvwxyz`) +* `randomize('AAA')`: results in triple-digit, randomized, upper-case letters (`ABCDEFGHIJKLMNOPQRSTUVWXYZ`) +* `randomize('0', 6)`: results in six-digit, randomized numbers (`0123456789`) +* `randomize('!', 5)`: results in single-digit randomized, _valid_ non-letter characters (`~!@#$%^&()_+-={}[] +* `randomize('A!a0', 9)`: results in nine-digit, randomized characters (any of the above) + +_The order in which the characters are defined is insignificant._ + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [pad-left](https://www.npmjs.com/package/pad-left): Left pad a string with zeros or a specified string. Fastest implementation. | [homepage](https://github.com/jonschlinkert/pad-left "Left pad a string with zeros or a specified string. Fastest implementation.") +* [pad-right](https://www.npmjs.com/package/pad-right): Right pad a string with zeros or a specified string. Fastest implementation. | [homepage](https://github.com/jonschlinkert/pad-right "Right pad a string with zeros or a specified string. Fastest implementation.") +* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 56 | [jonschlinkert](https://github.com/jonschlinkert) | +| 6 | [doowb](https://github.com/doowb) | +| 4 | [kivlor](https://github.com/kivlor) | +| 2 | [realityking](https://github.com/realityking) | +| 2 | [ywpark1](https://github.com/ywpark1) | +| 1 | [TrySound](https://github.com/TrySound) | +| 1 | [drag0s](https://github.com/drag0s) | +| 1 | [paulmillr](https://github.com/paulmillr) | +| 1 | [sunknudsen](https://github.com/sunknudsen) | +| 1 | [faizulhaque-tp](https://github.com/faizulhaque-tp) | +| 1 | [michaelrhodes](https://github.com/michaelrhodes) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on October 23, 2018._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/93/3a5c683b5e9c606752913a1392d1007a3b152d852569c5586844e74c7c7a5229b749501c0dd33f5e07a312d89271c674b1591437edd548377048eaec00284a b/.pnpm-store/v11/files/93/3a5c683b5e9c606752913a1392d1007a3b152d852569c5586844e74c7c7a5229b749501c0dd33f5e07a312d89271c674b1591437edd548377048eaec00284a new file mode 100644 index 00000000..67c9cda9 --- /dev/null +++ b/.pnpm-store/v11/files/93/3a5c683b5e9c606752913a1392d1007a3b152d852569c5586844e74c7c7a5229b749501c0dd33f5e07a312d89271c674b1591437edd548377048eaec00284a @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _doParallel = require('./internal/doParallel'); + +var _doParallel2 = _interopRequireDefault(_doParallel); + +var _map = require('./internal/map'); + +var _map2 = _interopRequireDefault(_map); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Produces a new collection of values by mapping each value in `coll` through + * the `iteratee` function. The `iteratee` is called with an item from `coll` + * and a callback for when it has finished processing. Each of these callback + * takes 2 arguments: an `error`, and the transformed item from `coll`. If + * `iteratee` passes an error to its callback, the main `callback` (for the + * `map` function) is immediately called with the error. + * + * Note, that since this function applies the `iteratee` to each item in + * parallel, there is no guarantee that the `iteratee` functions will complete + * in order. However, the results array will be in the same order as the + * original `coll`. + * + * If `map` is passed an Object, the results will be an Array. The results + * will roughly be in the order of the original Objects' keys (but this can + * vary across JavaScript engines). + * + * @name map + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Array|Iterable|Object} coll - A collection to iterate over. + * @param {AsyncFunction} iteratee - An async function to apply to each item in + * `coll`. + * The iteratee should complete with the transformed item. + * Invoked with (item, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. Results is an Array of the + * transformed items from the `coll`. Invoked with (err, results). + * @example + * + * async.map(['file1','file2','file3'], fs.stat, function(err, results) { + * // results is now an array of stats for each file + * }); + */ +exports.default = (0, _doParallel2.default)(_map2.default); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/93/44c3df2a8b5d3abf4f1a7be8a7a3b885445d1355b294c69f855185bc1556f179ab4e2d8657b5ccc558494a382db37df57dfabb83574604c22f8de5f7233808 b/.pnpm-store/v11/files/93/44c3df2a8b5d3abf4f1a7be8a7a3b885445d1355b294c69f855185bc1556f179ab4e2d8657b5ccc558494a382db37df57dfabb83574604c22f8de5f7233808 new file mode 100644 index 00000000..32c14b84 --- /dev/null +++ b/.pnpm-store/v11/files/93/44c3df2a8b5d3abf4f1a7be8a7a3b885445d1355b294c69f855185bc1556f179ab4e2d8657b5ccc558494a382db37df57dfabb83574604c22f8de5f7233808 @@ -0,0 +1,60 @@ +{ + "name": "mime-db", + "description": "Media Type Database", + "version": "1.52.0", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)", + "Robert Kieffer (http://github.com/broofa)" + ], + "license": "MIT", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "repository": "jshttp/mime-db", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.3", + "eslint": "7.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.1", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "media-typer": "1.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0", + "raw-body": "2.5.0", + "stream-to-array": "2.3.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/.pnpm-store/v11/files/93/6e9952a05a1f19dfd330634a05bd86f06d79b10fa9b048a4140f6163c23e5db2a13527c8dfa8b10efbbaa8ea634bbaedea2adebb40fd5db94e854d397094de b/.pnpm-store/v11/files/93/6e9952a05a1f19dfd330634a05bd86f06d79b10fa9b048a4140f6163c23e5db2a13527c8dfa8b10efbbaa8ea634bbaedea2adebb40fd5db94e854d397094de new file mode 100644 index 00000000..a6d4a502 --- /dev/null +++ b/.pnpm-store/v11/files/93/6e9952a05a1f19dfd330634a05bd86f06d79b10fa9b048a4140f6163c23e5db2a13527c8dfa8b10efbbaa8ea634bbaedea2adebb40fd5db94e854d397094de @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Yashprit + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/.pnpm-store/v11/files/93/9c9a79c960aed3005e8e1676e4c929b10581a9653a85798bd65752e01f183998e56da1f9ab1b85b4b553662a5f01f7c0a5ad5e56b09c596f39eae7106d027c b/.pnpm-store/v11/files/93/9c9a79c960aed3005e8e1676e4c929b10581a9653a85798bd65752e01f183998e56da1f9ab1b85b4b553662a5f01f7c0a5ad5e56b09c596f39eae7106d027c new file mode 100644 index 00000000..ec85897e --- /dev/null +++ b/.pnpm-store/v11/files/93/9c9a79c960aed3005e8e1676e4c929b10581a9653a85798bd65752e01f183998e56da1f9ab1b85b4b553662a5f01f7c0a5ad5e56b09c596f39eae7106d027c @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015, 2017, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/93/a470fc59aaa55177bd3fd2b067632bdc64a3254b359047ce8c278feb15340ef552a6fcdd178fcd1026b161c693f4c84b426763a8881dcf02e74e1345c63940 b/.pnpm-store/v11/files/93/a470fc59aaa55177bd3fd2b067632bdc64a3254b359047ce8c278feb15340ef552a6fcdd178fcd1026b161c693f4c84b426763a8881dcf02e74e1345c63940 new file mode 100644 index 00000000..48d2fb47 --- /dev/null +++ b/.pnpm-store/v11/files/93/a470fc59aaa55177bd3fd2b067632bdc64a3254b359047ce8c278feb15340ef552a6fcdd178fcd1026b161c693f4c84b426763a8881dcf02e74e1345c63940 @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/.pnpm-store/v11/files/93/bd0d7c62c11eac4e49530f50dc6b4c16e73f1e70cb00b474de9dcfce955f79769f814c76c8afd1f8cf7d1675012f46ebbf3bfbf7f7877df7e5701acdc75ff6 b/.pnpm-store/v11/files/93/bd0d7c62c11eac4e49530f50dc6b4c16e73f1e70cb00b474de9dcfce955f79769f814c76c8afd1f8cf7d1675012f46ebbf3bfbf7f7877df7e5701acdc75ff6 new file mode 100644 index 00000000..746340a7 --- /dev/null +++ b/.pnpm-store/v11/files/93/bd0d7c62c11eac4e49530f50dc6b4c16e73f1e70cb00b474de9dcfce955f79769f814c76c8afd1f8cf7d1675012f46ebbf3bfbf7f7877df7e5701acdc75ff6 @@ -0,0 +1,30 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/** + * Represents the completion of an asynchronous operation + */ +interface Promise { + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): Promise; +} diff --git a/.pnpm-store/v11/files/93/cd365fc9876a2cea1e7343afcff3f3f162eeb668f7e22dd79ff32fbd63c60f0a6937911716d015f1398e99b623263d9d845916f4eda0c711c5d8dfd788397f b/.pnpm-store/v11/files/93/cd365fc9876a2cea1e7343afcff3f3f162eeb668f7e22dd79ff32fbd63c60f0a6937911716d015f1398e99b623263d9d845916f4eda0c711c5d8dfd788397f new file mode 100644 index 00000000..36ad37a0 --- /dev/null +++ b/.pnpm-store/v11/files/93/cd365fc9876a2cea1e7343afcff3f3f162eeb668f7e22dd79ff32fbd63c60f0a6937911716d015f1398e99b623263d9d845916f4eda0c711c5d8dfd788397f @@ -0,0 +1,18 @@ +/** + * Converts `set` to its value-value pairs. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the value-value pairs. + */ +function setToPairs(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function(value) { + result[++index] = [value, value]; + }); + return result; +} + +module.exports = setToPairs; diff --git a/.pnpm-store/v11/files/94/59b5470408bd14c72cde99b50900097bb11f98827e68399771245a411854d87170e6c901000972afc5b9d0837bb7d63512ee2008d74866e6f6ffeb19bdfeff b/.pnpm-store/v11/files/94/59b5470408bd14c72cde99b50900097bb11f98827e68399771245a411854d87170e6c901000972afc5b9d0837bb7d63512ee2008d74866e6f6ffeb19bdfeff new file mode 100644 index 00000000..af783786 --- /dev/null +++ b/.pnpm-store/v11/files/94/59b5470408bd14c72cde99b50900097bb11f98827e68399771245a411854d87170e6c901000972afc5b9d0837bb7d63512ee2008d74866e6f6ffeb19bdfeff @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/94/63434702caeb98d9a5c609094afe3ec4ef46a86e841b5826fa598f80702655fc099b016c9d863d22790486f99b00050ac45488e7153d79be158a25943a9c90 b/.pnpm-store/v11/files/94/63434702caeb98d9a5c609094afe3ec4ef46a86e841b5826fa598f80702655fc099b016c9d863d22790486f99b00050ac45488e7153d79be158a25943a9c90 new file mode 100644 index 00000000..fe4db717 --- /dev/null +++ b/.pnpm-store/v11/files/94/63434702caeb98d9a5c609094afe3ec4ef46a86e841b5826fa598f80702655fc099b016c9d863d22790486f99b00050ac45488e7153d79be158a25943a9c90 @@ -0,0 +1,33 @@ +var LodashWrapper = require('./_LodashWrapper'); + +/** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ +function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); +} + +module.exports = wrapperCommit; diff --git a/.pnpm-store/v11/files/94/71226e9a706513e1da7b80349045a69b261f2c156b5535eb740c3088752fad95796fe66b22a303859f68c4aac1b656364e57b2218f04ae5da55a41749d04f4 b/.pnpm-store/v11/files/94/71226e9a706513e1da7b80349045a69b261f2c156b5535eb740c3088752fad95796fe66b22a303859f68c4aac1b656364e57b2218f04ae5da55a41749d04f4 new file mode 100644 index 00000000..08f0d1a6 --- /dev/null +++ b/.pnpm-store/v11/files/94/71226e9a706513e1da7b80349045a69b261f2c156b5535eb740c3088752fad95796fe66b22a303859f68c4aac1b656364e57b2218f04ae5da55a41749d04f4 @@ -0,0 +1,34 @@ +# Numerous always-ignore extensions +*.diff +*.err +*.orig +*.log +*.rej +*.swo +*.swp +*.vi +*~ +*.iml +*.ipr +*.iws + +# OS or Editor folders +.DS_Store +.cache +.project +.settings +nbproject +thumbs.db + +# Logs +.log +.pid +.sock + +# Folders to ignore +node_modules +.hg +.svn +publish +.idea +_dev diff --git a/.pnpm-store/v11/files/94/9896c073ffde372377ed4bee5fdc58cd4642f09a9d1f41577fea520b82f291860746d46c6224bd2edb19155561ca0fe2dadb3f24d020f9acda84e418471421 b/.pnpm-store/v11/files/94/9896c073ffde372377ed4bee5fdc58cd4642f09a9d1f41577fea520b82f291860746d46c6224bd2edb19155561ca0fe2dadb3f24d020f9acda84e418471421 new file mode 100644 index 00000000..814c20b5 --- /dev/null +++ b/.pnpm-store/v11/files/94/9896c073ffde372377ed4bee5fdc58cd4642f09a9d1f41577fea520b82f291860746d46c6224bd2edb19155561ca0fe2dadb3f24d020f9acda84e418471421 @@ -0,0 +1,46 @@ +# function-bind [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] + +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Implementation of function.prototype.bind + +Old versions of phantomjs, Internet Explorer < 9, and node < 0.6 don't support `Function.prototype.bind`. + +## Example + +```js +Function.prototype.bind = require("function-bind") +``` + +## Installation + +`npm install function-bind` + +## Contributors + + - Raynos + +## MIT Licenced + +[package-url]: https://npmjs.org/package/function-bind +[npm-version-svg]: https://versionbadg.es/Raynos/function-bind.svg +[deps-svg]: https://david-dm.org/Raynos/function-bind.svg +[deps-url]: https://david-dm.org/Raynos/function-bind +[dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg +[dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/function-bind.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/function-bind.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/function-bind.svg +[downloads-url]: https://npm-stat.com/charts.html?package=function-bind +[codecov-image]: https://codecov.io/gh/Raynos/function-bind/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/Raynos/function-bind/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/Raynos/function-bind +[actions-url]: https://github.com/Raynos/function-bind/actions diff --git a/.pnpm-store/v11/files/94/a4c070f76956337a4579072cd1594ca049c19872352c007ed0ea0e67efa30e93061ed557d5021b0ac3e3fe48d77e866a2fec1fc23c9702d2879c6f10628050 b/.pnpm-store/v11/files/94/a4c070f76956337a4579072cd1594ca049c19872352c007ed0ea0e67efa30e93061ed557d5021b0ac3e3fe48d77e866a2fec1fc23c9702d2879c6f10628050 new file mode 100644 index 00000000..d7390def --- /dev/null +++ b/.pnpm-store/v11/files/94/a4c070f76956337a4579072cd1594ca049c19872352c007ed0ea0e67efa30e93061ed557d5021b0ac3e3fe48d77e866a2fec1fc23c9702d2879c6f10628050 @@ -0,0 +1,29 @@ +var capitalize = require('./capitalize'), + createCompounder = require('./_createCompounder'); + +/** + * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the camel cased string. + * @example + * + * _.camelCase('Foo Bar'); + * // => 'fooBar' + * + * _.camelCase('--foo-bar--'); + * // => 'fooBar' + * + * _.camelCase('__FOO_BAR__'); + * // => 'fooBar' + */ +var camelCase = createCompounder(function(result, word, index) { + word = word.toLowerCase(); + return result + (index ? capitalize(word) : word); +}); + +module.exports = camelCase; diff --git a/.pnpm-store/v11/files/94/bf86c4b21708bb838df77b379ab9782614b8351bfb99fffe5de53c64d7f4c8a89f05499f647040f308f03ecc177bbc73911e55d77c2d63dddd85cb897ebb61 b/.pnpm-store/v11/files/94/bf86c4b21708bb838df77b379ab9782614b8351bfb99fffe5de53c64d7f4c8a89f05499f647040f308f03ecc177bbc73911e55d77c2d63dddd85cb897ebb61 new file mode 100644 index 00000000..6b545c53 --- /dev/null +++ b/.pnpm-store/v11/files/94/bf86c4b21708bb838df77b379ab9782614b8351bfb99fffe5de53c64d7f4c8a89f05499f647040f308f03ecc177bbc73911e55d77c2d63dddd85cb897ebb61 @@ -0,0 +1,161 @@ +# shell-quote [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Parse and quote shell commands. + +# example + +## quote + +``` js +var quote = require('shell-quote/quote'); +var s = quote([ 'a', 'b c d', '$f', '"g"' ]); +console.log(s); +``` + +output + +``` +a 'b c d' \$f '"g"' +``` + +## parse + +``` js +var parse = require('shell-quote/parse'); +var xs = parse('a "b c" \\$def \'it\\\'s great\''); +console.dir(xs); +``` + +output + +``` +[ 'a', 'b c', '\\$def', 'it\'s great' ] +``` + +## parse with an environment variable + +``` js +var parse = require('shell-quote/parse'); +var xs = parse('beep --boop="$PWD"', { PWD: '/home/robot' }); +console.dir(xs); +``` + +output + +``` +[ 'beep', '--boop=/home/robot' ] +``` + +## parse with custom escape character + +``` js +var parse = require('shell-quote/parse'); +var xs = parse('beep ^--boop="$PWD"', { PWD: '/home/robot' }, { escape: '^' }); +console.dir(xs); +``` + +output + +``` +[ 'beep --boop=/home/robot' ] +``` + +## parsing shell operators + +``` js +var parse = require('shell-quote/parse'); +var xs = parse('beep || boop > /byte'); +console.dir(xs); +``` + +output: + +``` +[ 'beep', { op: '||' }, 'boop', { op: '>' }, '/byte' ] +``` + +## parsing shell comment + +``` js +var parse = require('shell-quote/parse'); +var xs = parse('beep > boop # > kaboom'); +console.dir(xs); +``` + +output: + +``` +[ 'beep', { op: '>' }, 'boop', { comment: '> kaboom' } ] +``` + +# methods + +``` js +var quote = require('shell-quote/quote'); +var parse = require('shell-quote/parse'); +``` + +## quote(args) + +Return a quoted string for the array `args` suitable for using in shell +commands. + +## parse(cmd, env={}) + +Return an array of arguments from the quoted string `cmd`. + +Interpolate embedded bash-style `$VARNAME` and `${VARNAME}` variables with +the `env` object which like bash will replace undefined variables with `""`. + +`env` is usually an object but it can also be a function to perform lookups. +When `env(key)` returns a string, its result will be output just like `env[key]` +would. When `env(key)` returns an object, it will be inserted into the result +array like the operator objects. + +When a bash operator is encountered, the element in the array with be an object +with an `"op"` key set to the operator string. For example: + +``` +'beep || boop > /byte' +``` + +parses as: + +``` +[ 'beep', { op: '||' }, 'boop', { op: '>' }, '/byte' ] +``` + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install shell-quote +``` + +# license + +MIT + +[package-url]: https://npmjs.org/package/shell-quote +[npm-version-svg]: https://versionbadg.es/ljharb/shell-quote.svg +[deps-svg]: https://david-dm.org/ljharb/shell-quote.svg +[deps-url]: https://david-dm.org/ljharb/shell-quote +[dev-deps-svg]: https://david-dm.org/ljharb/shell-quote/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/shell-quote#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/shell-quote.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/shell-quote.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/shell-quote.svg +[downloads-url]: https://npm-stat.com/charts.html?package=shell-quote +[codecov-image]: https://codecov.io/gh/ljharb/shell-quote/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/shell-quote/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/shell-quote +[actions-url]: https://github.com/ljharb/shell-quote/actions diff --git a/.pnpm-store/v11/files/94/c1f24a445d0e5be926fccea1b1d99731cadb4cf82ac7e4c1aa454c40a9458e6123b192c757c851cd31c40329ea9e91d2fd10c43b63f1357bfb714f6cca3ef7 b/.pnpm-store/v11/files/94/c1f24a445d0e5be926fccea1b1d99731cadb4cf82ac7e4c1aa454c40a9458e6123b192c757c851cd31c40329ea9e91d2fd10c43b63f1357bfb714f6cca3ef7 new file mode 100644 index 00000000..61615f1a --- /dev/null +++ b/.pnpm-store/v11/files/94/c1f24a445d0e5be926fccea1b1d99731cadb4cf82ac7e4c1aa454c40a9458e6123b192c757c851cd31c40329ea9e91d2fd10c43b63f1357bfb714f6cca3ef7 @@ -0,0 +1,10 @@ +'use strict'; + +var path = require('path'); +var isglob = require('is-glob'); + +module.exports = function globParent(str) { + str += 'a'; // preserves full path in case of trailing path separator + do {str = path.dirname(str)} while (isglob(str)); + return str; +}; diff --git a/.pnpm-store/v11/files/94/d3b786e68b3f4380cb38ec7b7b2468d240dd4116ba7d0879d5d5bc4df8a2decfb33f6df6eb9658c77a8398f52ad092f12bf22d1be663a88e160d07fca8bce4 b/.pnpm-store/v11/files/94/d3b786e68b3f4380cb38ec7b7b2468d240dd4116ba7d0879d5d5bc4df8a2decfb33f6df6eb9658c77a8398f52ad092f12bf22d1be663a88e160d07fca8bce4 new file mode 100644 index 00000000..4a4eea7b --- /dev/null +++ b/.pnpm-store/v11/files/94/d3b786e68b3f4380cb38ec7b7b2468d240dd4116ba7d0879d5d5bc4df8a2decfb33f6df6eb9658c77a8398f52ad092f12bf22d1be663a88e160d07fca8bce4 @@ -0,0 +1,32 @@ +var mapCacheClear = require('./_mapCacheClear'), + mapCacheDelete = require('./_mapCacheDelete'), + mapCacheGet = require('./_mapCacheGet'), + mapCacheHas = require('./_mapCacheHas'), + mapCacheSet = require('./_mapCacheSet'); + +/** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ +function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } +} + +// Add methods to `MapCache`. +MapCache.prototype.clear = mapCacheClear; +MapCache.prototype['delete'] = mapCacheDelete; +MapCache.prototype.get = mapCacheGet; +MapCache.prototype.has = mapCacheHas; +MapCache.prototype.set = mapCacheSet; + +module.exports = MapCache; diff --git a/.pnpm-store/v11/files/94/fc9405b718c6b15df30c0cc185eb55462ef2dfb8244c3e364d122d0b20a7391afac06bf30ef50923f7cd312457e37500913eb53be605288a4956502d803c2c b/.pnpm-store/v11/files/94/fc9405b718c6b15df30c0cc185eb55462ef2dfb8244c3e364d122d0b20a7391afac06bf30ef50923f7cd312457e37500913eb53be605288a4956502d803c2c new file mode 100644 index 00000000..4459afd8 --- /dev/null +++ b/.pnpm-store/v11/files/94/fc9405b718c6b15df30c0cc185eb55462ef2dfb8244c3e364d122d0b20a7391afac06bf30ef50923f7cd312457e37500913eb53be605288a4956502d803c2c @@ -0,0 +1,70 @@ +/*! + * repeat-string + * + * Copyright (c) 2014-2015, Jon Schlinkert. + * Licensed under the MIT License. + */ + +'use strict'; + +/** + * Results cache + */ + +var res = ''; +var cache; + +/** + * Expose `repeat` + */ + +module.exports = repeat; + +/** + * Repeat the given `string` the specified `number` + * of times. + * + * **Example:** + * + * ```js + * var repeat = require('repeat-string'); + * repeat('A', 5); + * //=> AAAAA + * ``` + * + * @param {String} `string` The string to repeat + * @param {Number} `number` The number of times to repeat the string + * @return {String} Repeated string + * @api public + */ + +function repeat(str, num) { + if (typeof str !== 'string') { + throw new TypeError('expected a string'); + } + + // cover common, quick use cases + if (num === 1) return str; + if (num === 2) return str + str; + + var max = str.length * num; + if (cache !== str || typeof cache === 'undefined') { + cache = str; + res = ''; + } else if (res.length >= max) { + return res.substr(0, max); + } + + while (max > res.length && num > 1) { + if (num & 1) { + res += str; + } + + num >>= 1; + str += str; + } + + res += str; + res = res.substr(0, max); + return res; +} diff --git a/.pnpm-store/v11/files/95/0a0219ad4a5705ec2b6d954237004164f85c4fe13824dbf4664ea08d12e9cbc7cb037a32d321d54e69d99a7acd3263926ed8e0e03d3be2dd87bc383d35e709 b/.pnpm-store/v11/files/95/0a0219ad4a5705ec2b6d954237004164f85c4fe13824dbf4664ea08d12e9cbc7cb037a32d321d54e69d99a7acd3263926ed8e0e03d3be2dd87bc383d35e709 new file mode 100644 index 00000000..2300a3cd --- /dev/null +++ b/.pnpm-store/v11/files/95/0a0219ad4a5705ec2b6d954237004164f85c4fe13824dbf4664ea08d12e9cbc7cb037a32d321d54e69d99a7acd3263926ed8e0e03d3be2dd87bc383d35e709 @@ -0,0 +1,453 @@ +# snapdragon-node [![NPM version](https://img.shields.io/npm/v/snapdragon-node.svg?style=flat)](https://www.npmjs.com/package/snapdragon-node) [![NPM monthly downloads](https://img.shields.io/npm/dm/snapdragon-node.svg?style=flat)](https://npmjs.org/package/snapdragon-node) [![NPM total downloads](https://img.shields.io/npm/dt/snapdragon-node.svg?style=flat)](https://npmjs.org/package/snapdragon-node) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/snapdragon-node.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/snapdragon-node) + +> Snapdragon utility for creating a new AST node in custom code, such as plugins. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save snapdragon-node +``` + +## Usage + +With [snapdragon](https://github.com/jonschlinkert/snapdragon) v0.9.0 and higher you can use `this.node()` to create a new `Node`, whenever it makes sense. + +```js +var Node = require('snapdragon-node'); +var Snapdragon = require('snapdragon'); +var snapdragon = new Snapdragon(); + +// example usage inside a parser visitor function +snapdragon.parser.set('foo', function() { + // get the current "start" position + var pos = this.position(); + + // returns the match if regex matches the substring + // at the current position on `parser.input` + var match = this.match(/foo/); + if (match) { + // call "pos" on the node, to set the start and end + // positions, and return the node to push it onto the AST + // (snapdragon will push the node onto the correct + // nodes array, based on the stack) + return pos(new Node({type: 'bar', val: match[0]})); + } +}); +``` + +## API + +### [Node](index.js#L22) + +Create a new AST `Node` with the given `val` and `type`. + +**Params** + +* `val` **{String|Object}**: Pass a matched substring, or an object to merge onto the node. +* `type` **{String}**: The node type to use when `val` is a string. +* `returns` **{Object}**: node instance + +**Example** + +```js +var node = new Node('*', 'Star'); +var node = new Node({type: 'star', val: '*'}); +``` + +### [.isNode](index.js#L61) + +Returns true if the given value is a node. + +**Params** + +* `node` **{Object}** +* `returns` **{Boolean}** + +**Example** + +```js +var Node = require('snapdragon-node'); +var node = new Node({type: 'foo'}); +console.log(Node.isNode(node)); //=> true +console.log(Node.isNode({})); //=> false +``` + +### [.define](index.js#L80) + +Define a non-enumberable property on the node instance. Useful for adding properties that shouldn't be extended or visible during debugging. + +**Params** + +* `name` **{String}** +* `val` **{any}** +* `returns` **{Object}**: returns the node instance + +**Example** + +```js +var node = new Node(); +node.define('foo', 'something non-enumerable'); +``` + +### [.isEmpty](index.js#L100) + +Returns true if `node.val` is an empty string, or `node.nodes` does not contain any non-empty text nodes. + +**Params** + +* `fn` **{Function}**: (optional) Filter function that is called on `node` and/or child nodes. `isEmpty` will return false immediately when the filter function returns false on any nodes. +* `returns` **{Boolean}** + +**Example** + +```js +var node = new Node({type: 'text'}); +node.isEmpty(); //=> true +node.val = 'foo'; +node.isEmpty(); //=> false +``` + +### [.push](index.js#L118) + +Given node `foo` and node `bar`, push node `bar` onto `foo.nodes`, and set `foo` as `bar.parent`. + +**Params** + +* `node` **{Object}** +* `returns` **{Number}**: Returns the length of `node.nodes` + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +foo.push(bar); +``` + +### [.unshift](index.js#L140) + +Given node `foo` and node `bar`, unshift node `bar` onto `foo.nodes`, and set `foo` as `bar.parent`. + +**Params** + +* `node` **{Object}** +* `returns` **{Number}**: Returns the length of `node.nodes` + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +foo.unshift(bar); +``` + +### [.pop](index.js#L167) + +Pop a node from `node.nodes`. + +* `returns` **{Number}**: Returns the popped `node` + +**Example** + +```js +var node = new Node({type: 'foo'}); +node.push(new Node({type: 'a'})); +node.push(new Node({type: 'b'})); +node.push(new Node({type: 'c'})); +node.push(new Node({type: 'd'})); +console.log(node.nodes.length); +//=> 4 +node.pop(); +console.log(node.nodes.length); +//=> 3 +``` + +### [.shift](index.js#L190) + +Shift a node from `node.nodes`. + +* `returns` **{Object}**: Returns the shifted `node` + +**Example** + +```js +var node = new Node({type: 'foo'}); +node.push(new Node({type: 'a'})); +node.push(new Node({type: 'b'})); +node.push(new Node({type: 'c'})); +node.push(new Node({type: 'd'})); +console.log(node.nodes.length); +//=> 4 +node.shift(); +console.log(node.nodes.length); +//=> 3 +``` + +### [.remove](index.js#L205) + +Remove `node` from `node.nodes`. + +**Params** + +* `node` **{Object}** +* `returns` **{Object}**: Returns the removed node. + +**Example** + +```js +node.remove(childNode); +``` + +### [.find](index.js#L231) + +Get the first child node from `node.nodes` that matches the given `type`. If `type` is a number, the child node at that index is returned. + +**Params** + +* `type` **{String}** +* `returns` **{Object}**: Returns a child node or undefined. + +**Example** + +```js +var child = node.find(1); //<= index of the node to get +var child = node.find('foo'); //<= node.type of a child node +var child = node.find(/^(foo|bar)$/); //<= regex to match node.type +var child = node.find(['foo', 'bar']); //<= array of node.type(s) +``` + +### [.isType](index.js#L249) + +Return true if the node is the given `type`. + +**Params** + +* `type` **{String}** +* `returns` **{Boolean}** + +**Example** + +```js +var node = new Node({type: 'bar'}); +cosole.log(node.isType('foo')); // false +cosole.log(node.isType(/^(foo|bar)$/)); // true +cosole.log(node.isType(['foo', 'bar'])); // true +``` + +### [.hasType](index.js#L270) + +Return true if the `node.nodes` has the given `type`. + +**Params** + +* `type` **{String}** +* `returns` **{Boolean}** + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +foo.push(bar); + +cosole.log(foo.hasType('qux')); // false +cosole.log(foo.hasType(/^(qux|bar)$/)); // true +cosole.log(foo.hasType(['qux', 'bar'])); // true +``` + +* `returns` **{Array}** + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +foo.push(bar); +foo.push(baz); + +console.log(bar.siblings.length) // 2 +console.log(baz.siblings.length) // 2 +``` + +* `returns` **{Number}** + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +var qux = new Node({type: 'qux'}); +foo.push(bar); +foo.push(baz); +foo.unshift(qux); + +console.log(bar.index) // 1 +console.log(baz.index) // 2 +console.log(qux.index) // 0 +``` + +* `returns` **{Object}** + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +foo.push(bar); +foo.push(baz); + +console.log(baz.prev.type) // 'bar' +``` + +* `returns` **{Object}** + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +foo.push(bar); +foo.push(baz); + +console.log(bar.siblings.length) // 2 +console.log(baz.siblings.length) // 2 +``` + +* `returns` **{Object}**: The first node, or undefiend + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +var qux = new Node({type: 'qux'}); +foo.push(bar); +foo.push(baz); +foo.push(qux); + +console.log(foo.first.type) // 'bar' +``` + +* `returns` **{Object}**: The last node, or undefiend + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +var qux = new Node({type: 'qux'}); +foo.push(bar); +foo.push(baz); +foo.push(qux); + +console.log(foo.last.type) // 'qux' +``` + +* `returns` **{Object}**: The last node, or undefiend + +**Example** + +```js +var foo = new Node({type: 'foo'}); +var bar = new Node({type: 'bar'}); +var baz = new Node({type: 'baz'}); +var qux = new Node({type: 'qux'}); +foo.push(bar); +foo.push(baz); +foo.push(qux); + +console.log(foo.last.type) // 'qux' +``` + +## Release history + +Changelog entries are classified using the following labels from [keep-a-changelog](https://github.com/olivierlacan/keep-a-changelog): + +* `added`: for new features +* `changed`: for changes in existing functionality +* `deprecated`: for once-stable features removed in upcoming releases +* `removed`: for deprecated features removed in this release +* `fixed`: for any bug fixes + +Custom labels used in this changelog: + +* `dependencies`: bumps dependencies +* `housekeeping`: code re-organization, minor edits, or other changes that don't fit in one of the other categories. + +### [2.0.0] - 2017-05-01 + +**Changed** + +* `.unshiftNode` was renamed to [.unshift](#unshift) +* `.pushNode` was renamed to [.push](#push) +* `.getNode` was renamed to [.find](#find) + +**Added** + +* [.isNode](#isNode) +* [.isEmpty](#isEmpty) +* [.pop](#pop) +* [.shift](#shift) +* [.remove](#remove) + +### [0.1.0] + +First release. + +## About + +### Related projects + +* [breakdance](https://www.npmjs.com/package/breakdance): Breakdance is a node.js library for converting HTML to markdown. Highly pluggable, flexible and easy… [more](http://breakdance.io) | [homepage](http://breakdance.io "Breakdance is a node.js library for converting HTML to markdown. Highly pluggable, flexible and easy to use. It's time for your markup to get down.") +* [snapdragon-capture](https://www.npmjs.com/package/snapdragon-capture): Snapdragon plugin that adds a capture method to the parser instance. | [homepage](https://github.com/jonschlinkert/snapdragon-capture "Snapdragon plugin that adds a capture method to the parser instance.") +* [snapdragon-cheerio](https://www.npmjs.com/package/snapdragon-cheerio): Snapdragon plugin for converting a cheerio AST to a snapdragon AST. | [homepage](https://github.com/jonschlinkert/snapdragon-cheerio "Snapdragon plugin for converting a cheerio AST to a snapdragon AST.") +* [snapdragon-util](https://www.npmjs.com/package/snapdragon-util): Utilities for the snapdragon parser/compiler. | [homepage](https://github.com/jonschlinkert/snapdragon-util "Utilities for the snapdragon parser/compiler.") +* [snapdragon](https://www.npmjs.com/package/snapdragon): Easy-to-use plugin system for creating powerful, fast and versatile parsers and compilers, with built-in source-map… [more](https://github.com/jonschlinkert/snapdragon) | [homepage](https://github.com/jonschlinkert/snapdragon "Easy-to-use plugin system for creating powerful, fast and versatile parsers and compilers, with built-in source-map support.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. + +### Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +### Running tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 25, 2017._ \ No newline at end of file diff --git a/.pnpm-store/v11/files/95/12dc24d16f2fdc1b37c0b2269be3513b0937d457f8459dc59b189fbf50a6a5f92dd38dcef5261336343c393b96c2711ebf22f30443bf168d874ae804ac1252 b/.pnpm-store/v11/files/95/12dc24d16f2fdc1b37c0b2269be3513b0937d457f8459dc59b189fbf50a6a5f92dd38dcef5261336343c393b96c2711ebf22f30443bf168d874ae804ac1252 new file mode 100644 index 00000000..258e86e6 --- /dev/null +++ b/.pnpm-store/v11/files/95/12dc24d16f2fdc1b37c0b2269be3513b0937d457f8459dc59b189fbf50a6a5f92dd38dcef5261336343c393b96c2711ebf22f30443bf168d874ae804ac1252 @@ -0,0 +1,2589 @@ +/*********************************************************************** + + A JavaScript tokenizer / parser / beautifier / compressor. + https://github.com/mishoo/UglifyJS + + -------------------------------- (C) --------------------------------- + + Author: Mihai Bazon + + http://mihai.bazon.net/blog + + Distributed under the BSD license: + + Copyright 2012 (c) Mihai Bazon + Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/). + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + * Redistributions of source code must retain the above + copyright notice, this list of conditions and the following + disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials + provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. + + ***********************************************************************/ + +"use strict"; + +var KEYWORDS = "break case catch class const continue debugger default delete do else extends finally for function if in instanceof new return switch throw try typeof var void while with"; +var KEYWORDS_ATOM = "false null true"; +var RESERVED_WORDS = [ + "abstract async await boolean byte char double enum export final float goto implements import int interface let long native package private protected public short static super synchronized this throws transient volatile yield", + KEYWORDS_ATOM, + KEYWORDS, +].join(" "); +var KEYWORDS_BEFORE_EXPRESSION = "return new delete throw else case"; + +KEYWORDS = makePredicate(KEYWORDS); +RESERVED_WORDS = makePredicate(RESERVED_WORDS); +KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION); +KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM); + +var RE_BIN_NUMBER = /^0b([01]+)$/i; +var RE_HEX_NUMBER = /^0x([0-9a-f]+)$/i; +var RE_OCT_NUMBER = /^0o?([0-7]+)$/i; + +var OPERATORS = makePredicate([ + "in", + "instanceof", + "typeof", + "new", + "void", + "delete", + "++", + "--", + "+", + "-", + "!", + "~", + "&", + "|", + "^", + "*", + "/", + "%", + "**", + ">>", + "<<", + ">>>", + "<", + ">", + "<=", + ">=", + "==", + "===", + "!=", + "!==", + "?", + "=", + "+=", + "-=", + "/=", + "*=", + "%=", + "**=", + ">>=", + "<<=", + ">>>=", + "&=", + "|=", + "^=", + "&&", + "||", + "??", + "&&=", + "||=", + "??=", +]); + +var NEWLINE_CHARS = "\n\r\u2028\u2029"; +var OPERATOR_CHARS = "+-*&%=<>!?|~^"; +var PUNC_OPENERS = "[{("; +var PUNC_SEPARATORS = ",;:"; +var PUNC_CLOSERS = ")}]"; +var PUNC_AFTER_EXPRESSION = PUNC_SEPARATORS + PUNC_CLOSERS; +var PUNC_BEFORE_EXPRESSION = PUNC_OPENERS + PUNC_SEPARATORS; +var PUNC_CHARS = PUNC_BEFORE_EXPRESSION + "`" + PUNC_CLOSERS; +var WHITESPACE_CHARS = NEWLINE_CHARS + " \u00a0\t\f\u000b\u200b\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\uFEFF"; +var NON_IDENTIFIER_CHARS = makePredicate(characters("./'\"#" + OPERATOR_CHARS + PUNC_CHARS + WHITESPACE_CHARS)); + +NEWLINE_CHARS = makePredicate(characters(NEWLINE_CHARS)); +OPERATOR_CHARS = makePredicate(characters(OPERATOR_CHARS)); +PUNC_AFTER_EXPRESSION = makePredicate(characters(PUNC_AFTER_EXPRESSION)); +PUNC_BEFORE_EXPRESSION = makePredicate(characters(PUNC_BEFORE_EXPRESSION)); +PUNC_CHARS = makePredicate(characters(PUNC_CHARS)); +WHITESPACE_CHARS = makePredicate(characters(WHITESPACE_CHARS)); + +/* -----[ Tokenizer ]----- */ + +function is_surrogate_pair_head(code) { + return code >= 0xd800 && code <= 0xdbff; +} + +function is_surrogate_pair_tail(code) { + return code >= 0xdc00 && code <= 0xdfff; +} + +function is_digit(code) { + return code >= 48 && code <= 57; +} + +function is_identifier_char(ch) { + return !NON_IDENTIFIER_CHARS[ch]; +} + +function is_identifier_string(str) { + return /^[a-z_$][a-z0-9_$]*$/i.test(str); +} + +function decode_escape_sequence(seq) { + switch (seq[0]) { + case "b": return "\b"; + case "f": return "\f"; + case "n": return "\n"; + case "r": return "\r"; + case "t": return "\t"; + case "u": + var code; + if (seq[1] == "{" && seq.slice(-1) == "}") { + code = seq.slice(2, -1); + } else if (seq.length == 5) { + code = seq.slice(1); + } else { + return; + } + var num = parseInt(code, 16); + if (num < 0 || isNaN(num)) return; + if (num < 0x10000) return String.fromCharCode(num); + if (num > 0x10ffff) return; + return String.fromCharCode((num >> 10) + 0xd7c0) + String.fromCharCode((num & 0x03ff) + 0xdc00); + case "v": return "\u000b"; + case "x": + if (seq.length != 3) return; + var num = parseInt(seq.slice(1), 16); + if (num < 0 || isNaN(num)) return; + return String.fromCharCode(num); + case "\r": + case "\n": + return ""; + default: + if (seq == "0") return "\0"; + if (seq[0] >= "0" && seq[0] <= "9") return; + return seq; + } +} + +function parse_js_number(num) { + var match; + if (match = RE_BIN_NUMBER.exec(num)) return parseInt(match[1], 2); + if (match = RE_HEX_NUMBER.exec(num)) return parseInt(match[1], 16); + if (match = RE_OCT_NUMBER.exec(num)) return parseInt(match[1], 8); + var val = parseFloat(num); + if (val == num) return val; +} + +function JS_Parse_Error(message, filename, line, col, pos) { + this.message = message; + this.filename = filename; + this.line = line; + this.col = col; + this.pos = pos; + try { + throw new SyntaxError(message, filename, line, col); + } catch (cause) { + configure_error_stack(this, cause); + } +} +JS_Parse_Error.prototype = Object.create(SyntaxError.prototype); +JS_Parse_Error.prototype.constructor = JS_Parse_Error; + +function js_error(message, filename, line, col, pos) { + throw new JS_Parse_Error(message, filename, line, col, pos); +} + +function is_token(token, type, val) { + return token.type == type && (val == null || token.value == val); +} + +var EX_EOF = {}; + +function tokenizer($TEXT, filename, html5_comments, shebang) { + + var S = { + text : $TEXT, + filename : filename, + pos : 0, + tokpos : 0, + line : 1, + tokline : 0, + col : 0, + tokcol : 0, + newline_before : false, + regex_allowed : false, + comments_before : [], + directives : Object.create(null), + read_template : with_eof_error("Unterminated template literal", function(strings) { + var s = ""; + for (;;) { + var ch = read(); + switch (ch) { + case "\\": + ch += read(); + break; + case "`": + strings.push(s); + return; + case "$": + if (peek() == "{") { + next(); + strings.push(s); + S.regex_allowed = true; + return true; + } + } + s += ch; + } + + function read() { + var ch = next(true, true); + return ch == "\r" ? "\n" : ch; + } + }), + }; + var prev_was_dot = false; + + function peek() { + return S.text.charAt(S.pos); + } + + function next(signal_eof, in_string) { + var ch = S.text.charAt(S.pos++); + if (signal_eof && !ch) + throw EX_EOF; + if (NEWLINE_CHARS[ch]) { + S.col = 0; + S.line++; + if (!in_string) S.newline_before = true; + if (ch == "\r" && peek() == "\n") { + // treat `\r\n` as `\n` + S.pos++; + ch = "\n"; + } + } else { + S.col++; + } + return ch; + } + + function forward(i) { + while (i-- > 0) next(); + } + + function looking_at(str) { + return S.text.substr(S.pos, str.length) == str; + } + + function find_eol() { + var text = S.text; + for (var i = S.pos; i < S.text.length; ++i) { + if (NEWLINE_CHARS[text[i]]) return i; + } + return -1; + } + + function find(what, signal_eof) { + var pos = S.text.indexOf(what, S.pos); + if (signal_eof && pos == -1) throw EX_EOF; + return pos; + } + + function start_token() { + S.tokline = S.line; + S.tokcol = S.col; + S.tokpos = S.pos; + } + + function token(type, value, is_comment) { + S.regex_allowed = type == "operator" && !UNARY_POSTFIX[value] + || type == "keyword" && KEYWORDS_BEFORE_EXPRESSION[value] + || type == "punc" && PUNC_BEFORE_EXPRESSION[value]; + if (type == "punc" && value == ".") prev_was_dot = true; + else if (!is_comment) prev_was_dot = false; + var ret = { + type : type, + value : value, + line : S.tokline, + col : S.tokcol, + pos : S.tokpos, + endline : S.line, + endcol : S.col, + endpos : S.pos, + nlb : S.newline_before, + file : filename + }; + if (/^(?:num|string|regexp)$/i.test(type)) { + ret.raw = $TEXT.substring(ret.pos, ret.endpos); + } + if (!is_comment) { + ret.comments_before = S.comments_before; + ret.comments_after = S.comments_before = []; + } + S.newline_before = false; + return new AST_Token(ret); + } + + function skip_whitespace() { + while (WHITESPACE_CHARS[peek()]) + next(); + } + + function read_while(pred) { + var ret = "", ch; + while ((ch = peek()) && pred(ch, ret)) ret += next(); + return ret; + } + + function parse_error(err) { + js_error(err, filename, S.tokline, S.tokcol, S.tokpos); + } + + function is_octal(num) { + return /^0[0-7_]+$/.test(num); + } + + function read_num(prefix) { + var has_e = false, after_e = false, has_x = false, has_dot = prefix == "."; + var num = read_while(function(ch, str) { + switch (ch) { + case "x": case "X": + return has_x ? false : (has_x = true); + case "e": case "E": + return has_x ? true : has_e ? false : (has_e = after_e = true); + case "+": case "-": + return after_e; + case (after_e = false, "."): + return has_dot || has_e || has_x || is_octal(str) ? false : (has_dot = true); + } + return /[_0-9a-dfo]/i.test(ch); + }); + if (prefix) num = prefix + num; + if (is_octal(num)) { + if (next_token.has_directive("use strict")) parse_error("Legacy octal literals are not allowed in strict mode"); + } else { + num = num.replace(has_x ? /([1-9a-f]|.0)_(?=[0-9a-f])/gi : /([1-9]|.0)_(?=[0-9])/gi, "$1"); + } + var valid = parse_js_number(num); + if (isNaN(valid)) parse_error("Invalid syntax: " + num); + if (has_dot || has_e || peek() != "n") return token("num", valid); + next(); + return token("bigint", num.toLowerCase()); + } + + function read_escaped_char(in_string) { + var seq = next(true, in_string); + if (seq >= "0" && seq <= "7") return read_octal_escape_sequence(seq); + if (seq == "u") { + var ch = next(true, in_string); + seq += ch; + if (ch != "{") { + seq += next(true, in_string) + next(true, in_string) + next(true, in_string); + } else do { + ch = next(true, in_string); + seq += ch; + } while (ch != "}"); + } else if (seq == "x") { + seq += next(true, in_string) + next(true, in_string); + } + var str = decode_escape_sequence(seq); + if (typeof str != "string") parse_error("Invalid escape sequence: \\" + seq); + return str; + } + + function read_octal_escape_sequence(ch) { + // Read + var p = peek(); + if (p >= "0" && p <= "7") { + ch += next(true); + if (ch[0] <= "3" && (p = peek()) >= "0" && p <= "7") + ch += next(true); + } + + // Parse + if (ch === "0") return "\0"; + if (ch.length > 0 && next_token.has_directive("use strict")) + parse_error("Legacy octal escape sequences are not allowed in strict mode"); + return String.fromCharCode(parseInt(ch, 8)); + } + + var read_string = with_eof_error("Unterminated string constant", function(quote_char) { + var quote = next(), ret = ""; + for (;;) { + var ch = next(true, true); + if (ch == "\\") ch = read_escaped_char(true); + else if (NEWLINE_CHARS[ch]) parse_error("Unterminated string constant"); + else if (ch == quote) break; + ret += ch; + } + var tok = token("string", ret); + tok.quote = quote_char; + return tok; + }); + + function skip_line_comment(type) { + var regex_allowed = S.regex_allowed; + var i = find_eol(), ret; + if (i == -1) { + ret = S.text.substr(S.pos); + S.pos = S.text.length; + } else { + ret = S.text.substring(S.pos, i); + S.pos = i; + } + S.col = S.tokcol + (S.pos - S.tokpos); + S.comments_before.push(token(type, ret, true)); + S.regex_allowed = regex_allowed; + return next_token; + } + + var skip_multiline_comment = with_eof_error("Unterminated multiline comment", function() { + var regex_allowed = S.regex_allowed; + var i = find("*/", true); + var text = S.text.substring(S.pos, i).replace(/\r\n|\r|\u2028|\u2029/g, "\n"); + // update stream position + forward(text.length /* doesn't count \r\n as 2 char while S.pos - i does */ + 2); + S.comments_before.push(token("comment2", text, true)); + S.regex_allowed = regex_allowed; + return next_token; + }); + + function read_name() { + var backslash = false, ch, escaped = false, name = peek() == "#" ? next() : ""; + while (ch = peek()) { + if (!backslash) { + if (ch == "\\") escaped = backslash = true, next(); + else if (is_identifier_char(ch)) name += next(); + else break; + } else { + if (ch != "u") parse_error("Expecting UnicodeEscapeSequence -- uXXXX"); + ch = read_escaped_char(); + if (!is_identifier_char(ch)) parse_error("Unicode char: " + ch.charCodeAt(0) + " is not valid in identifier"); + name += ch; + backslash = false; + } + } + if (KEYWORDS[name] && escaped) { + var hex = name.charCodeAt(0).toString(16).toUpperCase(); + name = "\\u" + "0000".substr(hex.length) + hex + name.slice(1); + } + return name; + } + + var read_regexp = with_eof_error("Unterminated regular expression", function(source) { + var prev_backslash = false, ch, in_class = false; + while ((ch = next(true))) if (NEWLINE_CHARS[ch]) { + parse_error("Unexpected line terminator"); + } else if (prev_backslash) { + source += "\\" + ch; + prev_backslash = false; + } else if (ch == "[") { + in_class = true; + source += ch; + } else if (ch == "]" && in_class) { + in_class = false; + source += ch; + } else if (ch == "/" && !in_class) { + break; + } else if (ch == "\\") { + prev_backslash = true; + } else { + source += ch; + } + var mods = read_name(); + try { + var regexp = new RegExp(source, mods); + regexp.raw_source = source; + return token("regexp", regexp); + } catch (e) { + parse_error(e.message); + } + }); + + function read_operator(prefix) { + function grow(op) { + if (!peek()) return op; + var bigger = op + peek(); + if (OPERATORS[bigger]) { + next(); + return grow(bigger); + } else { + return op; + } + } + return token("operator", grow(prefix || next())); + } + + function handle_slash() { + next(); + switch (peek()) { + case "/": + next(); + return skip_line_comment("comment1"); + case "*": + next(); + return skip_multiline_comment(); + } + return S.regex_allowed ? read_regexp("") : read_operator("/"); + } + + function handle_dot() { + next(); + if (looking_at("..")) return token("operator", "." + next() + next()); + return is_digit(peek().charCodeAt(0)) ? read_num(".") : token("punc", "."); + } + + function read_word() { + var word = read_name(); + if (prev_was_dot) return token("name", word); + return KEYWORDS_ATOM[word] ? token("atom", word) + : !KEYWORDS[word] ? token("name", word) + : OPERATORS[word] ? token("operator", word) + : token("keyword", word); + } + + function with_eof_error(eof_error, cont) { + return function(x) { + try { + return cont(x); + } catch (ex) { + if (ex === EX_EOF) parse_error(eof_error); + else throw ex; + } + }; + } + + function next_token(force_regexp) { + if (force_regexp != null) + return read_regexp(force_regexp); + if (shebang && S.pos == 0 && looking_at("#!")) { + start_token(); + forward(2); + skip_line_comment("comment5"); + } + for (;;) { + skip_whitespace(); + start_token(); + if (html5_comments) { + if (looking_at("") && S.newline_before) { + forward(3); + skip_line_comment("comment4"); + continue; + } + } + var ch = peek(); + if (!ch) return token("eof"); + var code = ch.charCodeAt(0); + switch (code) { + case 34: case 39: return read_string(ch); + case 46: return handle_dot(); + case 47: + var tok = handle_slash(); + if (tok === next_token) continue; + return tok; + } + if (is_digit(code)) return read_num(); + if (PUNC_CHARS[ch]) return token("punc", next()); + if (looking_at("=>")) return token("punc", next() + next()); + if (OPERATOR_CHARS[ch]) return read_operator(); + if (code == 35 || code == 92 || !NON_IDENTIFIER_CHARS[ch]) return read_word(); + break; + } + parse_error("Unexpected character '" + ch + "'"); + } + + next_token.context = function(nc) { + if (nc) S = nc; + return S; + }; + + next_token.add_directive = function(directive) { + S.directives[directive] = true; + } + + next_token.push_directives_stack = function() { + S.directives = Object.create(S.directives); + } + + next_token.pop_directives_stack = function() { + S.directives = Object.getPrototypeOf(S.directives); + } + + next_token.has_directive = function(directive) { + return !!S.directives[directive]; + } + + return next_token; +} + +/* -----[ Parser (constants) ]----- */ + +var UNARY_PREFIX = makePredicate("typeof void delete -- ++ ! ~ - +"); + +var UNARY_POSTFIX = makePredicate("-- ++"); + +var ASSIGNMENT = makePredicate("= += -= /= *= %= **= >>= <<= >>>= &= |= ^= &&= ||= ??="); + +var PRECEDENCE = function(a, ret) { + for (var i = 0; i < a.length;) { + var b = a[i++]; + for (var j = 0; j < b.length; j++) { + ret[b[j]] = i; + } + } + return ret; +}([ + ["??"], + ["||"], + ["&&"], + ["|"], + ["^"], + ["&"], + ["==", "===", "!=", "!=="], + ["<", ">", "<=", ">=", "in", "instanceof"], + [">>", "<<", ">>>"], + ["+", "-"], + ["*", "/", "%"], + ["**"], +], {}); + +var ATOMIC_START_TOKEN = makePredicate("atom bigint num regexp string"); + +/* -----[ Parser ]----- */ + +function parse($TEXT, options) { + options = defaults(options, { + bare_returns : false, + expression : false, + filename : null, + html5_comments : true, + module : false, + shebang : true, + strict : false, + toplevel : null, + }, true); + + var S = { + input : typeof $TEXT == "string" + ? tokenizer($TEXT, options.filename, options.html5_comments, options.shebang) + : $TEXT, + in_async : false, + in_directives : true, + in_funarg : -1, + in_function : 0, + in_generator : false, + in_loop : 0, + labels : [], + peeked : null, + prev : null, + token : null, + }; + + S.token = next(); + + function is(type, value) { + return is_token(S.token, type, value); + } + + function peek() { + return S.peeked || (S.peeked = S.input()); + } + + function next() { + S.prev = S.token; + if (S.peeked) { + S.token = S.peeked; + S.peeked = null; + } else { + S.token = S.input(); + } + S.in_directives = S.in_directives && ( + S.token.type == "string" || is("punc", ";") + ); + return S.token; + } + + function prev() { + return S.prev; + } + + function croak(msg, line, col, pos) { + var ctx = S.input.context(); + js_error(msg, + ctx.filename, + line != null ? line : ctx.tokline, + col != null ? col : ctx.tokcol, + pos != null ? pos : ctx.tokpos); + } + + function token_error(token, msg) { + croak(msg, token.line, token.col); + } + + function token_to_string(type, value) { + return type + (value === undefined ? "" : " «" + value + "»"); + } + + function unexpected(token) { + if (token == null) token = S.token; + token_error(token, "Unexpected token: " + token_to_string(token.type, token.value)); + } + + function expect_token(type, val) { + if (is(type, val)) return next(); + token_error(S.token, "Unexpected token: " + token_to_string(S.token.type, S.token.value) + ", expected: " + token_to_string(type, val)); + } + + function expect(punc) { + return expect_token("punc", punc); + } + + function has_newline_before(token) { + return token.nlb || !all(token.comments_before, function(comment) { + return !comment.nlb; + }); + } + + function can_insert_semicolon() { + return !options.strict + && (is("eof") || is("punc", "}") || has_newline_before(S.token)); + } + + function semicolon(optional) { + if (is("punc", ";")) next(); + else if (!optional && !can_insert_semicolon()) expect(";"); + } + + function parenthesized() { + expect("("); + var exp = expression(); + expect(")"); + return exp; + } + + function embed_tokens(parser) { + return function() { + var start = S.token; + var expr = parser.apply(null, arguments); + var end = prev(); + expr.start = start; + expr.end = end; + return expr; + }; + } + + function handle_regexp() { + if (is("operator", "/") || is("operator", "/=")) { + S.peeked = null; + S.token = S.input(S.token.value.substr(1)); // force regexp + } + } + + var statement = embed_tokens(function(toplevel) { + handle_regexp(); + switch (S.token.type) { + case "string": + var dir = S.in_directives; + var body = expression(); + if (dir) { + if (body instanceof AST_String) { + var value = body.start.raw.slice(1, -1); + S.input.add_directive(value); + body.value = value; + } else { + S.in_directives = dir = false; + } + } + semicolon(); + return dir ? new AST_Directive(body) : new AST_SimpleStatement({ body: body }); + case "num": + case "bigint": + case "regexp": + case "operator": + case "atom": + return simple_statement(); + + case "name": + switch (S.token.value) { + case "async": + if (is_token(peek(), "keyword", "function")) { + next(); + next(); + if (!is("operator", "*")) return function_(AST_AsyncDefun); + next(); + return function_(AST_AsyncGeneratorDefun); + } + break; + case "await": + if (S.in_async) return simple_statement(); + break; + case "export": + if (!toplevel && options.module !== "") unexpected(); + next(); + return export_(); + case "import": + var token = peek(); + if (token.type == "punc" && /^[(.]$/.test(token.value)) break; + if (!toplevel && options.module !== "") unexpected(); + next(); + return import_(); + case "let": + if (is_vardefs()) { + next(); + var node = let_(); + semicolon(); + return node; + } + break; + case "yield": + if (S.in_generator) return simple_statement(); + break; + } + return is_token(peek(), "punc", ":") + ? labeled_statement() + : simple_statement(); + + case "punc": + switch (S.token.value) { + case "{": + return new AST_BlockStatement({ + start : S.token, + body : block_(), + end : prev() + }); + case "[": + case "(": + case "`": + return simple_statement(); + case ";": + S.in_directives = false; + next(); + return new AST_EmptyStatement(); + default: + unexpected(); + } + + case "keyword": + switch (S.token.value) { + case "break": + next(); + return break_cont(AST_Break); + + case "class": + next(); + return class_(AST_DefClass); + + case "const": + next(); + var node = const_(); + semicolon(); + return node; + + case "continue": + next(); + return break_cont(AST_Continue); + + case "debugger": + next(); + semicolon(); + return new AST_Debugger(); + + case "do": + next(); + var body = in_loop(statement); + expect_token("keyword", "while"); + var condition = parenthesized(); + semicolon(true); + return new AST_Do({ + body : body, + condition : condition, + }); + + case "while": + next(); + return new AST_While({ + condition : parenthesized(), + body : in_loop(statement), + }); + + case "for": + next(); + return for_(); + + case "function": + next(); + if (!is("operator", "*")) return function_(AST_Defun); + next(); + return function_(AST_GeneratorDefun); + + case "if": + next(); + return if_(); + + case "return": + if (S.in_function == 0 && !options.bare_returns) + croak("'return' outside of function"); + next(); + var value = null; + if (is("punc", ";")) { + next(); + } else if (!can_insert_semicolon()) { + value = expression(); + semicolon(); + } + return new AST_Return({ value: value }); + + case "switch": + next(); + return new AST_Switch({ + expression : parenthesized(), + body : in_loop(switch_body_), + }); + + case "throw": + next(); + if (has_newline_before(S.token)) + croak("Illegal newline after 'throw'"); + var value = expression(); + semicolon(); + return new AST_Throw({ value: value }); + + case "try": + next(); + return try_(); + + case "var": + next(); + var node = var_(); + semicolon(); + return node; + + case "with": + if (S.input.has_directive("use strict")) { + croak("Strict mode may not include a with statement"); + } + next(); + return new AST_With({ + expression : parenthesized(), + body : statement(), + }); + } + } + unexpected(); + }); + + function labeled_statement() { + var label = as_symbol(AST_Label); + if (!all(S.labels, function(l) { + return l.name != label.name; + })) { + // ECMA-262, 12.12: An ECMAScript program is considered + // syntactically incorrect if it contains a + // LabelledStatement that is enclosed by a + // LabelledStatement with the same Identifier as label. + croak("Label " + label.name + " defined twice"); + } + expect(":"); + S.labels.push(label); + var stat = statement(); + S.labels.pop(); + if (!(stat instanceof AST_IterationStatement)) { + // check for `continue` that refers to this label. + // those should be reported as syntax errors. + // https://github.com/mishoo/UglifyJS/issues/287 + label.references.forEach(function(ref) { + if (ref instanceof AST_Continue) { + token_error(ref.label.start, "Continue label `" + label.name + "` must refer to IterationStatement"); + } + }); + } + return new AST_LabeledStatement({ body: stat, label: label }); + } + + function simple_statement() { + var body = expression(); + semicolon(); + return new AST_SimpleStatement({ body: body }); + } + + function break_cont(type) { + var label = null, ldef; + if (!can_insert_semicolon()) { + label = as_symbol(AST_LabelRef, true); + } + if (label != null) { + ldef = find_if(function(l) { + return l.name == label.name; + }, S.labels); + if (!ldef) token_error(label.start, "Undefined label " + label.name); + label.thedef = ldef; + } else if (S.in_loop == 0) croak(type.TYPE + " not inside a loop or switch"); + semicolon(); + var stat = new type({ label: label }); + if (ldef) ldef.references.push(stat); + return stat; + } + + function has_modifier(name, no_nlb) { + if (!is("name", name)) return; + var token = peek(); + if (!token) return; + if (is_token(token, "operator", "=")) return; + if (token.type == "punc" && /^[(;}]$/.test(token.value)) return; + if (no_nlb && has_newline_before(token)) return; + return next(); + } + + function class_(ctor) { + var was_async = S.in_async; + var was_gen = S.in_generator; + S.input.push_directives_stack(); + S.input.add_directive("use strict"); + var name; + if (ctor === AST_DefClass) { + name = as_symbol(AST_SymbolDefClass); + } else { + name = as_symbol(AST_SymbolClass, true); + } + var parent = null; + if (is("keyword", "extends")) { + next(); + handle_regexp(); + parent = expr_atom(true); + } + expect("{"); + var props = []; + while (!is("punc", "}")) { + if (is("punc", ";")) { + next(); + continue; + } + var start = S.token; + var fixed = !!has_modifier("static"); + var async = has_modifier("async", true); + if (is("operator", "*")) { + next(); + var internal = is("name") && /^#/.test(S.token.value); + var key = as_property_key(); + var gen_start = S.token; + var gen = function_(async ? AST_AsyncGeneratorFunction : AST_GeneratorFunction); + gen.start = gen_start; + gen.end = prev(); + props.push(new AST_ClassMethod({ + start: start, + static: fixed, + private: internal, + key: key, + value: gen, + end: prev(), + })); + continue; + } + if (fixed && is("punc", "{")) { + props.push(new AST_ClassInit({ + start: start, + value: new AST_ClassInitBlock({ + start: start, + body: block_(), + end: prev(), + }), + end: prev(), + })); + continue; + } + var internal = is("name") && /^#/.test(S.token.value); + var key = as_property_key(); + if (is("punc", "(")) { + var func_start = S.token; + var func = function_(async ? AST_AsyncFunction : AST_Function); + func.start = func_start; + func.end = prev(); + props.push(new AST_ClassMethod({ + start: start, + static: fixed, + private: internal, + key: key, + value: func, + end: prev(), + })); + continue; + } + if (async) unexpected(async); + var value = null; + if (is("operator", "=")) { + next(); + S.in_async = false; + S.in_generator = false; + value = maybe_assign(); + S.in_generator = was_gen; + S.in_async = was_async; + } else if (!(is("punc", ";") || is("punc", "}"))) { + var type = null; + switch (key) { + case "get": + type = AST_ClassGetter; + break; + case "set": + type = AST_ClassSetter; + break; + } + if (type) { + props.push(new type({ + start: start, + static: fixed, + private: is("name") && /^#/.test(S.token.value), + key: as_property_key(), + value: create_accessor(), + end: prev(), + })); + continue; + } + } + semicolon(); + props.push(new AST_ClassField({ + start: start, + static: fixed, + private: internal, + key: key, + value: value, + end: prev(), + })); + } + next(); + S.input.pop_directives_stack(); + S.in_generator = was_gen; + S.in_async = was_async; + return new ctor({ + extends: parent, + name: name, + properties: props, + }); + } + + function for_() { + var await_token = is("name", "await") && next(); + expect("("); + var init = null; + if (await_token || !is("punc", ";")) { + init = is("keyword", "const") + ? (next(), const_(true)) + : is("name", "let") && is_vardefs() + ? (next(), let_(true)) + : is("keyword", "var") + ? (next(), var_(true)) + : expression(true); + var ctor; + if (await_token) { + expect_token("name", "of"); + ctor = AST_ForAwaitOf; + } else if (is("operator", "in")) { + next(); + ctor = AST_ForIn; + } else if (is("name", "of")) { + next(); + ctor = AST_ForOf; + } + if (ctor) { + if (init instanceof AST_Definitions) { + if (init.definitions.length > 1) { + token_error(init.start, "Only one variable declaration allowed in for..in/of loop"); + } + if (ctor !== AST_ForIn && init.definitions[0].value) { + token_error(init.definitions[0].value.start, "No initializers allowed in for..of loop"); + } + } else if (!(is_assignable(init) || (init = to_destructured(init)) instanceof AST_Destructured)) { + token_error(init.start, "Invalid left-hand side in for..in/of loop"); + } + return for_enum(ctor, init); + } + } + return regular_for(init); + } + + function regular_for(init) { + expect(";"); + var test = is("punc", ";") ? null : expression(); + expect(";"); + var step = is("punc", ")") ? null : expression(); + expect(")"); + return new AST_For({ + init : init, + condition : test, + step : step, + body : in_loop(statement) + }); + } + + function for_enum(ctor, init) { + handle_regexp(); + var obj = expression(); + expect(")"); + return new ctor({ + init : init, + object : obj, + body : in_loop(statement) + }); + } + + function to_funarg(node) { + if (node instanceof AST_Array) { + var rest = null; + if (node.elements[node.elements.length - 1] instanceof AST_Spread) { + rest = to_funarg(node.elements.pop().expression); + } + return new AST_DestructuredArray({ + start: node.start, + elements: node.elements.map(to_funarg), + rest: rest, + end: node.end, + }); + } + if (node instanceof AST_Assign) return new AST_DefaultValue({ + start: node.start, + name: to_funarg(node.left), + value: node.right, + end: node.end, + }); + if (node instanceof AST_DefaultValue) { + node.name = to_funarg(node.name); + return node; + } + if (node instanceof AST_DestructuredArray) { + node.elements = node.elements.map(to_funarg); + if (node.rest) node.rest = to_funarg(node.rest); + return node; + } + if (node instanceof AST_DestructuredObject) { + node.properties.forEach(function(prop) { + prop.value = to_funarg(prop.value); + }); + if (node.rest) node.rest = to_funarg(node.rest); + return node; + } + if (node instanceof AST_Hole) return node; + if (node instanceof AST_Object) { + var rest = null; + if (node.properties[node.properties.length - 1] instanceof AST_Spread) { + rest = to_funarg(node.properties.pop().expression); + } + return new AST_DestructuredObject({ + start: node.start, + properties: node.properties.map(function(prop) { + if (!(prop instanceof AST_ObjectKeyVal)) token_error(prop.start, "Invalid destructuring assignment"); + return new AST_DestructuredKeyVal({ + start: prop.start, + key: prop.key, + value: to_funarg(prop.value), + end: prop.end, + }); + }), + rest: rest, + end: node.end, + }); + } + if (node instanceof AST_SymbolFunarg) return node; + if (node instanceof AST_SymbolRef) return new AST_SymbolFunarg(node); + if (node instanceof AST_Yield) return new AST_SymbolFunarg({ + start: node.start, + name: "yield", + end: node.end, + }); + token_error(node.start, "Invalid arrow parameter"); + } + + function arrow(exprs, start, async) { + var was_async = S.in_async; + var was_gen = S.in_generator; + S.in_async = async; + S.in_generator = false; + var was_funarg = S.in_funarg; + S.in_funarg = S.in_function; + var argnames = exprs.map(to_funarg); + var rest = exprs.rest || null; + if (rest) rest = to_funarg(rest); + S.in_funarg = was_funarg; + expect("=>"); + var body, value; + var loop = S.in_loop; + var labels = S.labels; + ++S.in_function; + S.input.push_directives_stack(); + S.in_loop = 0; + S.labels = []; + if (is("punc", "{")) { + S.in_directives = true; + body = block_(); + value = null; + } else { + body = []; + handle_regexp(); + value = maybe_assign(); + } + var is_strict = S.input.has_directive("use strict"); + S.input.pop_directives_stack(); + --S.in_function; + S.in_loop = loop; + S.labels = labels; + S.in_generator = was_gen; + S.in_async = was_async; + var node = new (async ? AST_AsyncArrow : AST_Arrow)({ + start: start, + argnames: argnames, + rest: rest, + body: body, + value: value, + end: prev(), + }); + if (is_strict) node.each_argname(strict_verify_symbol); + return node; + } + + var function_ = function(ctor) { + var was_async = S.in_async; + var was_gen = S.in_generator; + var name; + if (/Defun$/.test(ctor.TYPE)) { + name = as_symbol(AST_SymbolDefun); + S.in_async = /^Async/.test(ctor.TYPE); + S.in_generator = /Generator/.test(ctor.TYPE); + } else { + S.in_async = /^Async/.test(ctor.TYPE); + S.in_generator = /Generator/.test(ctor.TYPE); + name = as_symbol(AST_SymbolLambda, true); + } + if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration)) + unexpected(prev()); + expect("("); + var was_funarg = S.in_funarg; + S.in_funarg = S.in_function; + var argnames = expr_list(")", !options.strict, false, function() { + return maybe_default(AST_SymbolFunarg); + }); + S.in_funarg = was_funarg; + var loop = S.in_loop; + var labels = S.labels; + ++S.in_function; + S.in_directives = true; + S.input.push_directives_stack(); + S.in_loop = 0; + S.labels = []; + var body = block_(); + var is_strict = S.input.has_directive("use strict"); + S.input.pop_directives_stack(); + --S.in_function; + S.in_loop = loop; + S.labels = labels; + S.in_generator = was_gen; + S.in_async = was_async; + var node = new ctor({ + name: name, + argnames: argnames, + rest: argnames.rest || null, + body: body, + }); + if (is_strict) { + if (name) strict_verify_symbol(name); + node.each_argname(strict_verify_symbol); + } + return node; + }; + + function if_() { + var cond = parenthesized(), body = statement(), alt = null; + if (is("keyword", "else")) { + next(); + alt = statement(); + } + return new AST_If({ + condition : cond, + body : body, + alternative : alt, + }); + } + + function is_alias() { + return is("name") || is("string") || is_identifier_string(S.token.value); + } + + function make_string(token) { + return new AST_String({ + start: token, + quote: token.quote, + value: token.value, + end: token, + }); + } + + function as_path() { + var path = S.token; + expect_token("string"); + semicolon(); + return make_string(path); + } + + function export_() { + if (is("operator", "*")) { + var key = S.token; + var alias = key; + next(); + if (is("name", "as")) { + next(); + if (!is_alias()) expect_token("name"); + alias = S.token; + next(); + } + expect_token("name", "from"); + return new AST_ExportForeign({ + aliases: [ make_string(alias) ], + keys: [ make_string(key) ], + path: as_path(), + }); + } + if (is("punc", "{")) { + next(); + var aliases = []; + var keys = []; + while (is_alias()) { + var key = S.token; + next(); + keys.push(key); + if (is("name", "as")) { + next(); + if (!is_alias()) expect_token("name"); + aliases.push(S.token); + next(); + } else { + aliases.push(key); + } + if (!is("punc", "}")) expect(","); + } + expect("}"); + if (is("name", "from")) { + next(); + return new AST_ExportForeign({ + aliases: aliases.map(make_string), + keys: keys.map(make_string), + path: as_path(), + }); + } + semicolon(); + return new AST_ExportReferences({ + properties: keys.map(function(token, index) { + if (!is_token(token, "name")) token_error(token, "Name expected"); + var sym = _make_symbol(AST_SymbolExport, token); + sym.alias = make_string(aliases[index]); + return sym; + }), + }); + } + if (is("keyword", "default")) { + next(); + var start = S.token; + var body = export_default_decl(); + if (body) { + body.start = start; + body.end = prev(); + } else { + handle_regexp(); + body = expression(); + semicolon(); + } + return new AST_ExportDefault({ body: body }); + } + return new AST_ExportDeclaration({ body: export_decl() }); + } + + function maybe_named(def, expr) { + if (expr.name) { + expr = new def(expr); + expr.name = new (def === AST_DefClass ? AST_SymbolDefClass : AST_SymbolDefun)(expr.name); + } + return expr; + } + + function export_default_decl() { + if (is("name", "async")) { + if (!is_token(peek(), "keyword", "function")) return; + next(); + next(); + if (!is("operator", "*")) return maybe_named(AST_AsyncDefun, function_(AST_AsyncFunction)); + next(); + return maybe_named(AST_AsyncGeneratorDefun, function_(AST_AsyncGeneratorFunction)); + } else if (is("keyword")) switch (S.token.value) { + case "class": + next(); + return maybe_named(AST_DefClass, class_(AST_ClassExpression)); + case "function": + next(); + if (!is("operator", "*")) return maybe_named(AST_Defun, function_(AST_Function)); + next(); + return maybe_named(AST_GeneratorDefun, function_(AST_GeneratorFunction)); + } + } + + var export_decl = embed_tokens(function() { + if (is("name")) switch (S.token.value) { + case "async": + next(); + expect_token("keyword", "function"); + if (!is("operator", "*")) return function_(AST_AsyncDefun); + next(); + return function_(AST_AsyncGeneratorDefun); + case "let": + next(); + var node = let_(); + semicolon(); + return node; + } else if (is("keyword")) switch (S.token.value) { + case "class": + next(); + return class_(AST_DefClass); + case "const": + next(); + var node = const_(); + semicolon(); + return node; + case "function": + next(); + if (!is("operator", "*")) return function_(AST_Defun); + next(); + return function_(AST_GeneratorDefun); + case "var": + next(); + var node = var_(); + semicolon(); + return node; + } + unexpected(); + }); + + function import_() { + var all = null; + var def = as_symbol(AST_SymbolImport, true); + var props = null; + var cont; + if (def) { + def.key = new AST_String({ + start: def.start, + value: "", + end: def.end, + }); + if (cont = is("punc", ",")) next(); + } else { + cont = !is("string"); + } + if (cont) { + if (is("operator", "*")) { + var key = S.token; + next(); + expect_token("name", "as"); + all = as_symbol(AST_SymbolImport); + all.key = make_string(key); + } else { + expect("{"); + props = []; + while (is_alias()) { + var alias; + if (is_token(peek(), "name", "as")) { + var key = S.token; + next(); + next(); + alias = as_symbol(AST_SymbolImport); + alias.key = make_string(key); + } else { + alias = as_symbol(AST_SymbolImport); + alias.key = new AST_String({ + start: alias.start, + value: alias.name, + end: alias.end, + }); + } + props.push(alias); + if (!is("punc", "}")) expect(","); + } + expect("}"); + } + } + if (all || def || props) expect_token("name", "from"); + return new AST_Import({ + all: all, + default: def, + path: as_path(), + properties: props, + }); + } + + function block_() { + expect("{"); + var a = []; + while (!is("punc", "}")) { + if (is("eof")) expect("}"); + a.push(statement()); + } + next(); + return a; + } + + function switch_body_() { + expect("{"); + var a = [], branch, cur, default_branch, tmp; + while (!is("punc", "}")) { + if (is("eof")) expect("}"); + if (is("keyword", "case")) { + if (branch) branch.end = prev(); + cur = []; + branch = new AST_Case({ + start : (tmp = S.token, next(), tmp), + expression : expression(), + body : cur + }); + a.push(branch); + expect(":"); + } else if (is("keyword", "default")) { + if (branch) branch.end = prev(); + if (default_branch) croak("More than one default clause in switch statement"); + cur = []; + branch = new AST_Default({ + start : (tmp = S.token, next(), expect(":"), tmp), + body : cur + }); + a.push(branch); + default_branch = branch; + } else { + if (!cur) unexpected(); + cur.push(statement()); + } + } + if (branch) branch.end = prev(); + next(); + return a; + } + + function try_() { + var body = block_(), bcatch = null, bfinally = null; + if (is("keyword", "catch")) { + var start = S.token; + next(); + var name = null; + if (is("punc", "(")) { + next(); + name = maybe_destructured(AST_SymbolCatch); + expect(")"); + } + bcatch = new AST_Catch({ + start : start, + argname : name, + body : block_(), + end : prev() + }); + } + if (is("keyword", "finally")) { + var start = S.token; + next(); + bfinally = new AST_Finally({ + start : start, + body : block_(), + end : prev() + }); + } + if (!bcatch && !bfinally) + croak("Missing catch/finally blocks"); + return new AST_Try({ + body : body, + bcatch : bcatch, + bfinally : bfinally + }); + } + + function vardefs(type, no_in) { + var a = []; + for (;;) { + var start = S.token; + var name = maybe_destructured(type); + var value = null; + if (is("operator", "=")) { + next(); + value = maybe_assign(no_in); + } else if (!no_in && (type === AST_SymbolConst || name instanceof AST_Destructured)) { + croak("Missing initializer in declaration"); + } + a.push(new AST_VarDef({ + start : start, + name : name, + value : value, + end : prev() + })); + if (!is("punc", ",")) + break; + next(); + } + return a; + } + + function is_vardefs() { + var token = peek(); + return is_token(token, "name") || is_token(token, "punc", "[") || is_token(token, "punc", "{"); + } + + var const_ = function(no_in) { + return new AST_Const({ + start : prev(), + definitions : vardefs(AST_SymbolConst, no_in), + end : prev() + }); + }; + + var let_ = function(no_in) { + return new AST_Let({ + start : prev(), + definitions : vardefs(AST_SymbolLet, no_in), + end : prev() + }); + }; + + var var_ = function(no_in) { + return new AST_Var({ + start : prev(), + definitions : vardefs(AST_SymbolVar, no_in), + end : prev() + }); + }; + + var new_ = function(allow_calls) { + var start = S.token; + expect_token("operator", "new"); + var call; + if (is("punc", ".") && is_token(peek(), "name", "target")) { + next(); + next(); + call = new AST_NewTarget(); + } else { + var exp = expr_atom(false), args; + if (is("punc", "(")) { + next(); + args = expr_list(")", !options.strict); + } else { + args = []; + } + call = new AST_New({ expression: exp, args: args }); + } + call.start = start; + call.end = prev(); + return subscripts(call, allow_calls); + }; + + function as_atom_node() { + var ret, tok = S.token, value = tok.value; + switch (tok.type) { + case "num": + if (isFinite(value)) { + ret = new AST_Number({ value: value }); + } else { + ret = new AST_Infinity(); + if (value < 0) ret = new AST_UnaryPrefix({ operator: "-", expression: ret }); + } + break; + case "bigint": + ret = new AST_BigInt({ value: value }); + break; + case "string": + ret = new AST_String({ value: value, quote: tok.quote }); + break; + case "regexp": + ret = new AST_RegExp({ value: value }); + break; + case "atom": + switch (value) { + case "false": + ret = new AST_False(); + break; + case "true": + ret = new AST_True(); + break; + case "null": + ret = new AST_Null(); + break; + default: + unexpected(); + } + break; + default: + unexpected(); + } + next(); + ret.start = ret.end = tok; + return ret; + } + + var expr_atom = function(allow_calls) { + if (is("operator", "new")) { + return new_(allow_calls); + } + var start = S.token; + if (is("punc")) { + switch (start.value) { + case "`": + return subscripts(template(null), allow_calls); + case "(": + next(); + if (is("punc", ")")) { + next(); + return arrow([], start); + } + var ex = expression(false, true); + var len = start.comments_before.length; + [].unshift.apply(ex.start.comments_before, start.comments_before); + start.comments_before.length = 0; + start.comments_before = ex.start.comments_before; + start.comments_before_length = len; + if (len == 0 && start.comments_before.length > 0) { + var comment = start.comments_before[0]; + if (!comment.nlb) { + comment.nlb = start.nlb; + start.nlb = false; + } + } + start.comments_after = ex.start.comments_after; + ex.start = start; + expect(")"); + var end = prev(); + end.comments_before = ex.end.comments_before; + end.comments_after.forEach(function(comment) { + ex.end.comments_after.push(comment); + if (comment.nlb) S.token.nlb = true; + }); + end.comments_after.length = 0; + end.comments_after = ex.end.comments_after; + ex.end = end; + if (is("punc", "=>")) return arrow(ex instanceof AST_Sequence ? ex.expressions : [ ex ], start); + return subscripts(ex, allow_calls); + case "[": + return subscripts(array_(), allow_calls); + case "{": + return subscripts(object_(), allow_calls); + } + unexpected(); + } + if (is("keyword")) switch (start.value) { + case "class": + next(); + var clazz = class_(AST_ClassExpression); + clazz.start = start; + clazz.end = prev(); + return subscripts(clazz, allow_calls); + case "function": + next(); + var func; + if (is("operator", "*")) { + next(); + func = function_(AST_GeneratorFunction); + } else { + func = function_(AST_Function); + } + func.start = start; + func.end = prev(); + return subscripts(func, allow_calls); + } + if (is("name")) { + var sym = _make_symbol(AST_SymbolRef, start); + next(); + if (sym.name == "async") { + if (is("keyword", "function")) { + next(); + var func; + if (is("operator", "*")) { + next(); + func = function_(AST_AsyncGeneratorFunction); + } else { + func = function_(AST_AsyncFunction); + } + func.start = start; + func.end = prev(); + return subscripts(func, allow_calls); + } + if (is("name") && is_token(peek(), "punc", "=>")) { + start = S.token; + sym = _make_symbol(AST_SymbolRef, start); + next(); + return arrow([ sym ], start, true); + } + if (is("punc", "(")) { + var call = subscripts(sym, allow_calls); + if (!is("punc", "=>")) return call; + var args = call.args; + if (args[args.length - 1] instanceof AST_Spread) { + args.rest = args.pop().expression; + } + return arrow(args, start, true); + } + } + return is("punc", "=>") ? arrow([ sym ], start) : subscripts(sym, allow_calls); + } + if (ATOMIC_START_TOKEN[S.token.type]) { + return subscripts(as_atom_node(), allow_calls); + } + unexpected(); + }; + + function expr_list(closing, allow_trailing_comma, allow_empty, parser) { + if (!parser) parser = maybe_assign; + var first = true, a = []; + while (!is("punc", closing)) { + if (first) first = false; else expect(","); + if (allow_trailing_comma && is("punc", closing)) break; + if (allow_empty && is("punc", ",")) { + a.push(new AST_Hole({ start: S.token, end: S.token })); + } else if (!is("operator", "...")) { + a.push(parser()); + } else if (parser === maybe_assign) { + a.push(new AST_Spread({ + start: S.token, + expression: (next(), parser()), + end: prev(), + })); + } else { + next(); + a.rest = parser(); + if (a.rest instanceof AST_DefaultValue) token_error(a.rest.start, "Invalid rest parameter"); + break; + } + } + expect(closing); + return a; + } + + var array_ = embed_tokens(function() { + expect("["); + return new AST_Array({ + elements: expr_list("]", !options.strict, true) + }); + }); + + var create_accessor = embed_tokens(function() { + return function_(AST_Accessor); + }); + + var object_ = embed_tokens(function() { + expect("{"); + var first = true, a = []; + while (!is("punc", "}")) { + if (first) first = false; else expect(","); + // allow trailing comma + if (!options.strict && is("punc", "}")) break; + var start = S.token; + if (is("operator", "*")) { + next(); + var key = as_property_key(); + var gen_start = S.token; + var gen = function_(AST_GeneratorFunction); + gen.start = gen_start; + gen.end = prev(); + a.push(new AST_ObjectMethod({ + start: start, + key: key, + value: gen, + end: prev(), + })); + continue; + } + if (is("operator", "...")) { + next(); + a.push(new AST_Spread({ + start: start, + expression: maybe_assign(), + end: prev(), + })); + continue; + } + if (is_token(peek(), "operator", "=")) { + var name = as_symbol(AST_SymbolRef); + next(); + a.push(new AST_ObjectKeyVal({ + start: start, + key: start.value, + value: new AST_Assign({ + start: start, + left: name, + operator: "=", + right: maybe_assign(), + end: prev(), + }), + end: prev(), + })); + continue; + } + if (is_token(peek(), "punc", ",") || is_token(peek(), "punc", "}")) { + a.push(new AST_ObjectKeyVal({ + start: start, + key: start.value, + value: as_symbol(AST_SymbolRef), + end: prev(), + })); + continue; + } + var key = as_property_key(); + if (is("punc", "(")) { + var func_start = S.token; + var func = function_(AST_Function); + func.start = func_start; + func.end = prev(); + a.push(new AST_ObjectMethod({ + start: start, + key: key, + value: func, + end: prev(), + })); + continue; + } + if (is("punc", ":")) { + next(); + a.push(new AST_ObjectKeyVal({ + start: start, + key: key, + value: maybe_assign(), + end: prev(), + })); + continue; + } + if (start.type == "name") switch (key) { + case "async": + var is_gen = is("operator", "*") && next(); + key = as_property_key(); + var func_start = S.token; + var func = function_(is_gen ? AST_AsyncGeneratorFunction : AST_AsyncFunction); + func.start = func_start; + func.end = prev(); + a.push(new AST_ObjectMethod({ + start: start, + key: key, + value: func, + end: prev(), + })); + continue; + case "get": + a.push(new AST_ObjectGetter({ + start: start, + key: as_property_key(), + value: create_accessor(), + end: prev(), + })); + continue; + case "set": + a.push(new AST_ObjectSetter({ + start: start, + key: as_property_key(), + value: create_accessor(), + end: prev(), + })); + continue; + } + unexpected(); + } + next(); + return new AST_Object({ properties: a }); + }); + + function as_property_key() { + var tmp = S.token; + switch (tmp.type) { + case "operator": + if (!KEYWORDS[tmp.value]) unexpected(); + case "num": + case "string": + case "name": + case "keyword": + case "atom": + next(); + return "" + tmp.value; + case "punc": + expect("["); + var key = maybe_assign(); + expect("]"); + return key; + default: + unexpected(); + } + } + + function as_name() { + var name = S.token.value; + expect_token("name"); + return name; + } + + function _make_symbol(type, token) { + var name = token.value; + switch (name) { + case "await": + if (S.in_async) unexpected(token); + break; + case "super": + type = AST_Super; + break; + case "this": + type = AST_This; + break; + case "yield": + if (S.in_generator) unexpected(token); + break; + } + return new type({ + name: "" + name, + start: token, + end: token, + }); + } + + function strict_verify_symbol(sym) { + if (sym.name == "arguments" || sym.name == "eval" || sym.name == "let") + token_error(sym.start, "Unexpected " + sym.name + " in strict mode"); + } + + function as_symbol(type, no_error) { + if (!is("name")) { + if (!no_error) croak("Name expected"); + return null; + } + var sym = _make_symbol(type, S.token); + if (S.input.has_directive("use strict") && sym instanceof AST_SymbolDeclaration) { + strict_verify_symbol(sym); + } + next(); + return sym; + } + + function maybe_destructured(type) { + var start = S.token; + if (is("punc", "[")) { + next(); + var elements = expr_list("]", !options.strict, true, function() { + return maybe_default(type); + }); + return new AST_DestructuredArray({ + start: start, + elements: elements, + rest: elements.rest || null, + end: prev(), + }); + } + if (is("punc", "{")) { + next(); + var first = true, a = [], rest = null; + while (!is("punc", "}")) { + if (first) first = false; else expect(","); + // allow trailing comma + if (!options.strict && is("punc", "}")) break; + var key_start = S.token; + if (is("punc", "[") || is_token(peek(), "punc", ":")) { + var key = as_property_key(); + expect(":"); + a.push(new AST_DestructuredKeyVal({ + start: key_start, + key: key, + value: maybe_default(type), + end: prev(), + })); + continue; + } + if (is("operator", "...")) { + next(); + rest = maybe_destructured(type); + break; + } + var name = as_symbol(type); + if (is("operator", "=")) { + next(); + name = new AST_DefaultValue({ + start: name.start, + name: name, + value: maybe_assign(), + end: prev(), + }); + } + a.push(new AST_DestructuredKeyVal({ + start: key_start, + key: key_start.value, + value: name, + end: prev(), + })); + } + expect("}"); + return new AST_DestructuredObject({ + start: start, + properties: a, + rest: rest, + end: prev(), + }); + } + return as_symbol(type); + } + + function maybe_default(type) { + var start = S.token; + var name = maybe_destructured(type); + if (!is("operator", "=")) return name; + next(); + return new AST_DefaultValue({ + start: start, + name: name, + value: maybe_assign(), + end: prev(), + }); + } + + function template(tag) { + var start = tag ? tag.start : S.token; + var read = S.input.context().read_template; + var strings = []; + var expressions = []; + while (read(strings)) { + next(); + expressions.push(expression()); + if (!is("punc", "}")) unexpected(); + } + next(); + return new AST_Template({ + start: start, + expressions: expressions, + strings: strings, + tag: tag, + end: prev(), + }); + } + + function subscripts(expr, allow_calls) { + var start = expr.start; + var optional = null; + while (true) { + if (is("operator", "?") && is_token(peek(), "punc", ".")) { + next(); + next(); + optional = expr; + } + if (is("punc", "[")) { + next(); + var prop = expression(); + expect("]"); + expr = new AST_Sub({ + start: start, + optional: optional === expr, + expression: expr, + property: prop, + end: prev(), + }); + } else if (allow_calls && is("punc", "(")) { + next(); + expr = new AST_Call({ + start: start, + optional: optional === expr, + expression: expr, + args: expr_list(")", !options.strict), + end: prev(), + }); + } else if (optional === expr || is("punc", ".")) { + if (optional !== expr) next(); + expr = new AST_Dot({ + start: start, + optional: optional === expr, + expression: expr, + property: as_name(), + end: prev(), + }); + } else if (is("punc", "`")) { + if (optional) croak("Invalid template on optional chain"); + expr = template(expr); + } else { + break; + } + } + if (optional) expr.terminal = true; + if (expr instanceof AST_Call && !expr.pure) { + var start = expr.start; + var comments = start.comments_before; + var i = HOP(start, "comments_before_length") ? start.comments_before_length : comments.length; + while (--i >= 0) { + if (/[@#]__PURE__/.test(comments[i].value)) { + expr.pure = true; + break; + } + } + } + return expr; + } + + function maybe_unary(no_in) { + var start = S.token; + if (S.in_async && is("name", "await")) { + if (S.in_funarg === S.in_function) croak("Invalid use of await in function argument"); + S.input.context().regex_allowed = true; + next(); + return new AST_Await({ + start: start, + expression: maybe_unary(no_in), + end: prev(), + }); + } + if (S.in_generator && is("name", "yield")) { + if (S.in_funarg === S.in_function) croak("Invalid use of yield in function argument"); + S.input.context().regex_allowed = true; + next(); + var exp = null; + var nested = false; + if (is("operator", "*")) { + next(); + exp = maybe_assign(no_in); + nested = true; + } else if (is("punc") ? !PUNC_AFTER_EXPRESSION[S.token.value] : !can_insert_semicolon()) { + exp = maybe_assign(no_in); + } + return new AST_Yield({ + start: start, + expression: exp, + nested: nested, + end: prev(), + }); + } + if (is("operator") && UNARY_PREFIX[start.value]) { + next(); + handle_regexp(); + var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(no_in)); + ex.start = start; + ex.end = prev(); + return ex; + } + var val = expr_atom(true); + while (is("operator") && UNARY_POSTFIX[S.token.value] && !has_newline_before(S.token)) { + val = make_unary(AST_UnaryPostfix, S.token, val); + val.start = start; + val.end = S.token; + next(); + } + return val; + } + + function make_unary(ctor, token, expr) { + var op = token.value; + switch (op) { + case "++": + case "--": + if (!is_assignable(expr)) + token_error(token, "Invalid use of " + op + " operator"); + break; + case "delete": + if (expr instanceof AST_SymbolRef && S.input.has_directive("use strict")) + token_error(expr.start, "Calling delete on expression not allowed in strict mode"); + break; + } + return new ctor({ operator: op, expression: expr }); + } + + var expr_op = function(left, min_precision, no_in) { + var op = is("operator") ? S.token.value : null; + if (op == "in" && no_in) op = null; + var precision = op != null ? PRECEDENCE[op] : null; + if (precision != null && precision > min_precision) { + next(); + var right = expr_op(maybe_unary(no_in), op == "**" ? precision - 1 : precision, no_in); + return expr_op(new AST_Binary({ + start : left.start, + left : left, + operator : op, + right : right, + end : right.end, + }), min_precision, no_in); + } + return left; + }; + + function expr_ops(no_in) { + return expr_op(maybe_unary(no_in), 0, no_in); + } + + var maybe_conditional = function(no_in) { + var start = S.token; + var expr = expr_ops(no_in); + if (is("operator", "?")) { + next(); + var yes = maybe_assign(); + expect(":"); + return new AST_Conditional({ + start : start, + condition : expr, + consequent : yes, + alternative : maybe_assign(no_in), + end : prev() + }); + } + return expr; + }; + + function is_assignable(expr) { + return expr instanceof AST_PropAccess && !expr.optional || expr instanceof AST_SymbolRef; + } + + function to_destructured(node) { + if (node instanceof AST_Array) { + var rest = null; + if (node.elements[node.elements.length - 1] instanceof AST_Spread) { + rest = to_destructured(node.elements.pop().expression); + if (!(rest instanceof AST_Destructured || is_assignable(rest))) return node; + } + var elements = node.elements.map(to_destructured); + return all(elements, function(node) { + return node instanceof AST_DefaultValue + || node instanceof AST_Destructured + || node instanceof AST_Hole + || is_assignable(node); + }) ? new AST_DestructuredArray({ + start: node.start, + elements: elements, + rest: rest, + end: node.end, + }) : node; + } + if (node instanceof AST_Assign) { + var name = to_destructured(node.left); + return name instanceof AST_Destructured || is_assignable(name) ? new AST_DefaultValue({ + start: node.start, + name: name, + value: node.right, + end: node.end, + }) : node; + } + if (!(node instanceof AST_Object)) return node; + var rest = null; + if (node.properties[node.properties.length - 1] instanceof AST_Spread) { + rest = to_destructured(node.properties.pop().expression); + if (!(rest instanceof AST_Destructured || is_assignable(rest))) return node; + } + var props = []; + for (var i = 0; i < node.properties.length; i++) { + var prop = node.properties[i]; + if (!(prop instanceof AST_ObjectKeyVal)) return node; + var value = to_destructured(prop.value); + if (!(value instanceof AST_DefaultValue || value instanceof AST_Destructured || is_assignable(value))) { + return node; + } + props.push(new AST_DestructuredKeyVal({ + start: prop.start, + key: prop.key, + value: value, + end: prop.end, + })); + } + return new AST_DestructuredObject({ + start: node.start, + properties: props, + rest: rest, + end: node.end, + }); + } + + function maybe_assign(no_in) { + var start = S.token; + var left = maybe_conditional(no_in), val = S.token.value; + if (is("operator") && ASSIGNMENT[val]) { + if (is_assignable(left) || val == "=" && (left = to_destructured(left)) instanceof AST_Destructured) { + next(); + return new AST_Assign({ + start : start, + left : left, + operator : val, + right : maybe_assign(no_in), + end : prev() + }); + } + croak("Invalid assignment"); + } + return left; + } + + function expression(no_in, maybe_arrow) { + var start = S.token; + var exprs = []; + while (true) { + if (maybe_arrow && is("operator", "...")) { + next(); + exprs.rest = maybe_destructured(AST_SymbolFunarg); + break; + } + exprs.push(maybe_assign(no_in)); + if (!is("punc", ",")) break; + next(); + if (maybe_arrow && is("punc", ")") && is_token(peek(), "punc", "=>")) break; + } + return exprs.length == 1 && !exprs.rest ? exprs[0] : new AST_Sequence({ + start: start, + expressions: exprs, + end: prev(), + }); + } + + function in_loop(cont) { + ++S.in_loop; + var ret = cont(); + --S.in_loop; + return ret; + } + + if (options.expression) { + handle_regexp(); + var exp = expression(); + expect_token("eof"); + return exp; + } + + return function() { + var start = S.token; + var body = []; + if (options.module) { + S.in_async = true; + S.input.add_directive("use strict"); + } + S.input.push_directives_stack(); + while (!is("eof")) + body.push(statement(true)); + S.input.pop_directives_stack(); + var end = prev() || start; + var toplevel = options.toplevel; + if (toplevel) { + toplevel.body = toplevel.body.concat(body); + toplevel.end = end; + } else { + toplevel = new AST_Toplevel({ start: start, body: body, end: end }); + } + return toplevel; + }(); +} diff --git a/.pnpm-store/v11/files/95/4e66ff145c7aa3a6ed3b04545abb97efc6e8e85bbc9f413335a9e18bd8810a9d2d7d0bf1ea871b16d244d6d1290814f7c8ec6436fe494910710b7b709e6fb4-exec b/.pnpm-store/v11/files/95/4e66ff145c7aa3a6ed3b04545abb97efc6e8e85bbc9f413335a9e18bd8810a9d2d7d0bf1ea871b16d244d6d1290814f7c8ec6436fe494910710b7b709e6fb4-exec new file mode 100755 index 00000000..efd3493a --- /dev/null +++ b/.pnpm-store/v11/files/95/4e66ff145c7aa3a6ed3b04545abb97efc6e8e85bbc9f413335a9e18bd8810a9d2d7d0bf1ea871b16d244d6d1290814f7c8ec6436fe494910710b7b709e6fb4-exec @@ -0,0 +1,45 @@ +{ + "name": "suman-reporters", + "version": "0.0.1015", + "description": "Suman standard reporters", + "main": "index.js", + "scripts": { + "test": "./scripts/test.sh" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sumanjs/suman-reporters.git" + }, + "keywords": [ + "suman", + "test runner", + "sumanjs", + "reporters", + "tap-json", + "tap", + "test", + "test-protocol", + "tapjs" + ], + "author": "Olegzandr VD", + "license": "MIT", + "bugs": { + "url": "https://github.com/sumanjs/suman-reporters/issues" + }, + "homepage": "https://github.com/sumanjs/suman-reporters#readme", + "dependencies": { + "chalk": "^2.4.0", + "json-stdio": "latest", + "lodash.isequal": "^4.5.0", + "progress": "^2.0.0", + "suman-browser-polyfills": "latest", + "suman-events": "latest", + "suman-utils": "latest" + }, + "devDependencies": { + "@types/core-js": "^0.9.42", + "@types/lodash.isequal": "^4.5.2", + "@types/node": "^10.1.2", + "@types/socket.io-client": "^1.4.31" + } +} diff --git a/.pnpm-store/v11/files/95/6ff7ec282a4ff2ac482482c362989d0c0b16dde106295fb0b9e1697196a7f213f4c06b8c12600bf99c60950ebfdc0c3d777290eba5de19d3aaee815644851b b/.pnpm-store/v11/files/95/6ff7ec282a4ff2ac482482c362989d0c0b16dde106295fb0b9e1697196a7f213f4c06b8c12600bf99c60950ebfdc0c3d777290eba5de19d3aaee815644851b new file mode 100644 index 00000000..6b814a9f --- /dev/null +++ b/.pnpm-store/v11/files/95/6ff7ec282a4ff2ac482482c362989d0c0b16dde106295fb0b9e1697196a7f213f4c06b8c12600bf99c60950ebfdc0c3d777290eba5de19d3aaee815644851b @@ -0,0 +1,43 @@ +var createAggregator = require('./_createAggregator'); + +/** + * Creates an array of elements split into two groups, the first of which + * contains elements `predicate` returns truthy for, the second of which + * contains elements `predicate` returns falsey for. The predicate is + * invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of grouped elements. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true }, + * { 'user': 'pebbles', 'age': 1, 'active': false } + * ]; + * + * _.partition(users, function(o) { return o.active; }); + * // => objects for [['fred'], ['barney', 'pebbles']] + * + * // The `_.matches` iteratee shorthand. + * _.partition(users, { 'age': 1, 'active': false }); + * // => objects for [['pebbles'], ['barney', 'fred']] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.partition(users, ['active', false]); + * // => objects for [['barney', 'pebbles'], ['fred']] + * + * // The `_.property` iteratee shorthand. + * _.partition(users, 'active'); + * // => objects for [['fred'], ['barney', 'pebbles']] + */ +var partition = createAggregator(function(result, value, key) { + result[key ? 0 : 1].push(value); +}, function() { return [[], []]; }); + +module.exports = partition; diff --git a/.pnpm-store/v11/files/95/792b2e92e74f5956fc901a3e27dd19c65efd2c8d07be5ea3cae631a5a01a5d93fa3d6721be990de6fb29e1edcb6f214b0f9cd74083ebc175f926545ec2c19c b/.pnpm-store/v11/files/95/792b2e92e74f5956fc901a3e27dd19c65efd2c8d07be5ea3cae631a5a01a5d93fa3d6721be990de6fb29e1edcb6f214b0f9cd74083ebc175f926545ec2c19c new file mode 100644 index 00000000..92a62377 --- /dev/null +++ b/.pnpm-store/v11/files/95/792b2e92e74f5956fc901a3e27dd19c65efd2c8d07be5ea3cae631a5a01a5d93fa3d6721be990de6fb29e1edcb6f214b0f9cd74083ebc175f926545ec2c19c @@ -0,0 +1,18 @@ +var baseGet = require('./_baseGet'), + baseSet = require('./_baseSet'); + +/** + * The base implementation of `_.update`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to update. + * @param {Function} updater The function to produce the updated value. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ +function baseUpdate(object, path, updater, customizer) { + return baseSet(object, path, updater(baseGet(object, path)), customizer); +} + +module.exports = baseUpdate; diff --git a/.pnpm-store/v11/files/95/82665c42f31dd837f9e9293842c2d3f641b189b8024424d039775493fd2d3dc3416d4ed4e882ffeef0fd141205995506c9da4fe9eb6cc36f5b29a4b9631b2e b/.pnpm-store/v11/files/95/82665c42f31dd837f9e9293842c2d3f641b189b8024424d039775493fd2d3dc3416d4ed4e882ffeef0fd141205995506c9da4fe9eb6cc36f5b29a4b9631b2e new file mode 100644 index 00000000..624d0152 --- /dev/null +++ b/.pnpm-store/v11/files/95/82665c42f31dd837f9e9293842c2d3f641b189b8024424d039775493fd2d3dc3416d4ed4e882ffeef0fd141205995506c9da4fe9eb6cc36f5b29a4b9631b2e @@ -0,0 +1,35 @@ +var apply = require('./_apply'), + baseRest = require('./_baseRest'), + isError = require('./isError'); + +/** + * Attempts to invoke `func`, returning either the result or the caught error + * object. Any additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Function} func The function to attempt. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {*} Returns the `func` result or error object. + * @example + * + * // Avoid throwing errors for invalid selectors. + * var elements = _.attempt(function(selector) { + * return document.querySelectorAll(selector); + * }, '>_>'); + * + * if (_.isError(elements)) { + * elements = []; + * } + */ +var attempt = baseRest(function(func, args) { + try { + return apply(func, undefined, args); + } catch (e) { + return isError(e) ? e : new Error(e); + } +}); + +module.exports = attempt; diff --git a/.pnpm-store/v11/files/95/84241971979583a07e2a9d79665ddba548e8da2043ee993d615b2a02daa63fa11fc57c505f493c4d14d23faccc00e5e9c8139289ef052e2b754cf6babeac9d b/.pnpm-store/v11/files/95/84241971979583a07e2a9d79665ddba548e8da2043ee993d615b2a02daa63fa11fc57c505f493c4d14d23faccc00e5e9c8139289ef052e2b754cf6babeac9d new file mode 100644 index 00000000..871ab085 --- /dev/null +++ b/.pnpm-store/v11/files/95/84241971979583a07e2a9d79665ddba548e8da2043ee993d615b2a02daa63fa11fc57c505f493c4d14d23faccc00e5e9c8139289ef052e2b754cf6babeac9d @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('chunk', require('../chunk')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/95/856826732758f67a48d8a974ef1447a71a2b57f3090784ae9b900f42f289323d21b2c54762e1f5c3ecf32d8ce5b843bc558831df39216abcac9e8a01166db3 b/.pnpm-store/v11/files/95/856826732758f67a48d8a974ef1447a71a2b57f3090784ae9b900f42f289323d21b2c54762e1f5c3ecf32d8ce5b843bc558831df39216abcac9e8a01166db3 new file mode 100644 index 00000000..4351e001 --- /dev/null +++ b/.pnpm-store/v11/files/95/856826732758f67a48d8a974ef1447a71a2b57f3090784ae9b900f42f289323d21b2c54762e1f5c3ecf32d8ce5b843bc558831df39216abcac9e8a01166db3 @@ -0,0 +1,12 @@ +import { v5 } from "./interfaces"; + +interface v5Static { + // https://github.com/kelektiv/node-uuid/blob/master/v5.js#L47 + DNS: string; + // https://github.com/kelektiv/node-uuid/blob/master/v5.js#L48 + URL: string; +} + +declare const v5: v5Static & v5; + +export = v5; diff --git a/.pnpm-store/v11/files/95/aed2ea73ab8e4e0e0e9207121f7624f82188b201c7bc5d3c2f0e9a95e72b64335b07a67d66868a1c664942d045d2e2b5d576a6e19072b7e019288e0f0039cb b/.pnpm-store/v11/files/95/aed2ea73ab8e4e0e0e9207121f7624f82188b201c7bc5d3c2f0e9a95e72b64335b07a67d66868a1c664942d045d2e2b5d576a6e19072b7e019288e0f0039cb new file mode 100644 index 00000000..5a02fd65 --- /dev/null +++ b/.pnpm-store/v11/files/95/aed2ea73ab8e4e0e0e9207121f7624f82188b201c7bc5d3c2f0e9a95e72b64335b07a67d66868a1c664942d045d2e2b5d576a6e19072b7e019288e0f0039cb @@ -0,0 +1,90 @@ +'use strict'; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const pragmatik = require('pragmatik'); +const _suman = global.__suman = (global.__suman || {}); +const rules = require("../helpers/handle-varargs"); +const suman_constants_1 = require("../config/suman-constants"); +const general_1 = require("../helpers/general"); +const general_2 = require("../helpers/general"); +const general_3 = require("../helpers/general"); +const acceptableOptions = { + '@DefineObjectOpts': true, + plan: true, + throws: true, + fatal: true, + ioc: true, + __toBeSourcedForIOC: true, + retries: true, + cb: true, + timeout: true, + skip: true, + desc: true, + title: true, + events: true, + successEvent: true, + errorEvent: true, + successEvents: true, + errorEvents: true, + __preParsed: true +}; +const handleBadOptions = function (opts, typeName) { + Object.keys(opts).forEach(function (k) { + if (!acceptableOptions[k]) { + const url = `${suman_constants_1.constants.SUMAN_TYPES_ROOT_URL}/${typeName}.d.ts`; + throw new Error(`'${k}' is not a valid option property for an ${typeName} hook. See: ${url}`); + } + }); + if (opts.plan !== undefined && !Number.isInteger(opts.plan)) { + _suman.log.error(new Error(' => Suman usage error => "plan" option is not an integer.').stack); + process.exit(suman_constants_1.constants.EXIT_CODES.OPTS_PLAN_NOT_AN_INTEGER); + return; + } +}; +exports.makeAfterEach = function (suman) { + return function afterEach($$desc, $opts) { + const typeName = afterEach.name; + const zuite = suman.ctx; + general_1.handleSetupComplete(zuite, typeName); + const isPreParsed = $opts && $opts.__preParsed; + const args = pragmatik.parse(arguments, rules.hookSignature, isPreParsed); + try { + delete $opts.__preParsed; + } + catch (err) { + } + const vetted = general_3.parseArgs(args); + const [desc, opts, fn] = vetted.args; + const arrayDeps = vetted.arrayDeps; + handleBadOptions(opts, typeName); + if (arrayDeps.length > 0) { + general_2.evalOptions(arrayDeps, opts); + } + if (opts.skip) { + suman.numHooksSkipped++; + } + else if (!fn) { + suman.numHooksStubbed++; + } + else { + zuite.getAfterEaches().push({ + ctx: zuite, + timeout: opts.timeout || 11000, + desc: desc || fn.name || '(unknown afterEach-hook name)', + cb: opts.cb === true, + successEvents: opts.successEvents, + errorEvents: opts.errorEvents, + retries: opts.retries, + events: opts.events, + throws: opts.throws, + planCountExpected: opts.plan, + fatal: opts.fatal === true, + fn: fn, + type: 'afterEach/teardownTest', + warningErr: new Error('SUMAN_TEMP_WARNING_ERROR') + }); + } + return zuite; + }; +}; diff --git a/.pnpm-store/v11/files/95/b7b34f882c0e6a44973f57f44da42caca86abf578a243c293b7cce35d769186c1ccd38c0797898d403f880a05fef9c48685681d763892bf96ffd8431a94c93 b/.pnpm-store/v11/files/95/b7b34f882c0e6a44973f57f44da42caca86abf578a243c293b7cce35d769186c1ccd38c0797898d403f880a05fef9c48685681d763892bf96ffd8431a94c93 new file mode 100644 index 00000000..021f0804 --- /dev/null +++ b/.pnpm-store/v11/files/95/b7b34f882c0e6a44973f57f44da42caca86abf578a243c293b7cce35d769186c1ccd38c0797898d403f880a05fef9c48685681d763892bf96ffd8431a94c93 @@ -0,0 +1,68 @@ +/*! + * Chai - addMethod utility + * Copyright(c) 2012-2014 Jake Luer + * MIT Licensed + */ + +var addLengthGuard = require('./addLengthGuard'); +var chai = require('../../chai'); +var flag = require('./flag'); +var proxify = require('./proxify'); +var transferFlags = require('./transferFlags'); + +/** + * ### .addMethod(ctx, name, method) + * + * Adds a method to the prototype of an object. + * + * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) { + * var obj = utils.flag(this, 'object'); + * new chai.Assertion(obj).to.be.equal(str); + * }); + * + * Can also be accessed directly from `chai.Assertion`. + * + * chai.Assertion.addMethod('foo', fn); + * + * Then can be used as any other assertion. + * + * expect(fooStr).to.be.foo('bar'); + * + * @param {Object} ctx object to which the method is added + * @param {String} name of method to add + * @param {Function} method function to be used for name + * @namespace Utils + * @name addMethod + * @api public + */ + +module.exports = function addMethod(ctx, name, method) { + var methodWrapper = function () { + // Setting the `ssfi` flag to `methodWrapper` causes this function to be the + // starting point for removing implementation frames from the stack trace of + // a failed assertion. + // + // However, we only want to use this function as the starting point if the + // `lockSsfi` flag isn't set. + // + // If the `lockSsfi` flag is set, then either this assertion has been + // overwritten by another assertion, or this assertion is being invoked from + // inside of another assertion. In the first case, the `ssfi` flag has + // already been set by the overwriting assertion. In the second case, the + // `ssfi` flag has already been set by the outer assertion. + if (!flag(this, 'lockSsfi')) { + flag(this, 'ssfi', methodWrapper); + } + + var result = method.apply(this, arguments); + if (result !== undefined) + return result; + + var newAssertion = new chai.Assertion(); + transferFlags(this, newAssertion); + return newAssertion; + }; + + addLengthGuard(methodWrapper, name, false); + ctx[name] = proxify(methodWrapper, name); +}; diff --git a/.pnpm-store/v11/files/95/bf4f45cf4f63545baf2c965d41a8d128a1081e3d0adaca91d81e29d779444487c9d749192b6c00d64d5218e6f129d4071c51ffba57bdf6ce82c4358df61136 b/.pnpm-store/v11/files/95/bf4f45cf4f63545baf2c965d41a8d128a1081e3d0adaca91d81e29d779444487c9d749192b6c00d64d5218e6f129d4071c51ffba57bdf6ce82c4358df61136 new file mode 100644 index 00000000..ac66adde --- /dev/null +++ b/.pnpm-store/v11/files/95/bf4f45cf4f63545baf2c965d41a8d128a1081e3d0adaca91d81e29d779444487c9d749192b6c00d64d5218e6f129d4071c51ffba57bdf6ce82c4358df61136 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('merge', require('../merge')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/95/c9b9ea621eb692194eadc4b967ec041d58fbda4fcdd2ef5ebd25c07c38f53e34d845b6d0b62b81ab255a06ea8a93aedb74ac4ec94ab54b3f16aa74f63619bc b/.pnpm-store/v11/files/95/c9b9ea621eb692194eadc4b967ec041d58fbda4fcdd2ef5ebd25c07c38f53e34d845b6d0b62b81ab255a06ea8a93aedb74ac4ec94ab54b3f16aa74f63619bc new file mode 100644 index 00000000..76fc866e --- /dev/null +++ b/.pnpm-store/v11/files/95/c9b9ea621eb692194eadc4b967ec041d58fbda4fcdd2ef5ebd25c07c38f53e34d845b6d0b62b81ab255a06ea8a93aedb74ac4ec94ab54b3f16aa74f63619bc @@ -0,0 +1,43 @@ +var baseClamp = require('./_baseClamp'), + baseToString = require('./_baseToString'), + toInteger = require('./toInteger'), + toString = require('./toString'); + +/** + * Checks if `string` ends with the given target string. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to inspect. + * @param {string} [target] The string to search for. + * @param {number} [position=string.length] The position to search up to. + * @returns {boolean} Returns `true` if `string` ends with `target`, + * else `false`. + * @example + * + * _.endsWith('abc', 'c'); + * // => true + * + * _.endsWith('abc', 'b'); + * // => false + * + * _.endsWith('abc', 'b', 2); + * // => true + */ +function endsWith(string, target, position) { + string = toString(string); + target = baseToString(target); + + var length = string.length; + position = position === undefined + ? length + : baseClamp(toInteger(position), 0, length); + + var end = position; + position -= target.length; + return position >= 0 && string.slice(position, end) == target; +} + +module.exports = endsWith; diff --git a/.pnpm-store/v11/files/95/cf047ea94f8f8bd574013abb51d9a92034ac9b6ce70355acaa4def0d8a0fbff50f6fdbb5a10a85cd55503acc07a5fb443a57cb211b313a0539a14cf7d07188 b/.pnpm-store/v11/files/95/cf047ea94f8f8bd574013abb51d9a92034ac9b6ce70355acaa4def0d8a0fbff50f6fdbb5a10a85cd55503acc07a5fb443a57cb211b313a0539a14cf7d07188 new file mode 100644 index 00000000..2774ab37 --- /dev/null +++ b/.pnpm-store/v11/files/95/cf047ea94f8f8bd574013abb51d9a92034ac9b6ce70355acaa4def0d8a0fbff50f6fdbb5a10a85cd55503acc07a5fb443a57cb211b313a0539a14cf7d07188 @@ -0,0 +1 @@ +module.exports = require('./overSome'); diff --git a/.pnpm-store/v11/files/95/eab20448ca98b1587e9502575200efb1ad4a1946e253f665311829762d86567cb27c838a367be4e6897f0252a3ade2cb4ecbc2ee8607d73050f0cd693092d6 b/.pnpm-store/v11/files/95/eab20448ca98b1587e9502575200efb1ad4a1946e253f665311829762d86567cb27c838a367be4e6897f0252a3ade2cb4ecbc2ee8607d73050f0cd693092d6 new file mode 100644 index 00000000..f046b05f --- /dev/null +++ b/.pnpm-store/v11/files/95/eab20448ca98b1587e9502575200efb1ad4a1946e253f665311829762d86567cb27c838a367be4e6897f0252a3ade2cb4ecbc2ee8607d73050f0cd693092d6 @@ -0,0 +1,49 @@ +module.exports = { + 'assign': require('./assign'), + 'assignIn': require('./assignIn'), + 'assignInWith': require('./assignInWith'), + 'assignWith': require('./assignWith'), + 'at': require('./at'), + 'create': require('./create'), + 'defaults': require('./defaults'), + 'defaultsDeep': require('./defaultsDeep'), + 'entries': require('./entries'), + 'entriesIn': require('./entriesIn'), + 'extend': require('./extend'), + 'extendWith': require('./extendWith'), + 'findKey': require('./findKey'), + 'findLastKey': require('./findLastKey'), + 'forIn': require('./forIn'), + 'forInRight': require('./forInRight'), + 'forOwn': require('./forOwn'), + 'forOwnRight': require('./forOwnRight'), + 'functions': require('./functions'), + 'functionsIn': require('./functionsIn'), + 'get': require('./get'), + 'has': require('./has'), + 'hasIn': require('./hasIn'), + 'invert': require('./invert'), + 'invertBy': require('./invertBy'), + 'invoke': require('./invoke'), + 'keys': require('./keys'), + 'keysIn': require('./keysIn'), + 'mapKeys': require('./mapKeys'), + 'mapValues': require('./mapValues'), + 'merge': require('./merge'), + 'mergeWith': require('./mergeWith'), + 'omit': require('./omit'), + 'omitBy': require('./omitBy'), + 'pick': require('./pick'), + 'pickBy': require('./pickBy'), + 'result': require('./result'), + 'set': require('./set'), + 'setWith': require('./setWith'), + 'toPairs': require('./toPairs'), + 'toPairsIn': require('./toPairsIn'), + 'transform': require('./transform'), + 'unset': require('./unset'), + 'update': require('./update'), + 'updateWith': require('./updateWith'), + 'values': require('./values'), + 'valuesIn': require('./valuesIn') +}; diff --git a/.pnpm-store/v11/files/95/f2fda556e0b2b5db1b4d2d053d41209a477991e1afe5a8ad8fd4606932cd50b1d3de02c8e1317c9e0dc8b0466f62b39ba7d8c7e4b880e127c8987981854855 b/.pnpm-store/v11/files/95/f2fda556e0b2b5db1b4d2d053d41209a477991e1afe5a8ad8fd4606932cd50b1d3de02c8e1317c9e0dc8b0466f62b39ba7d8c7e4b880e127c8987981854855 new file mode 100644 index 00000000..90f28077 --- /dev/null +++ b/.pnpm-store/v11/files/95/f2fda556e0b2b5db1b4d2d053d41209a477991e1afe5a8ad8fd4606932cd50b1d3de02c8e1317c9e0dc8b0466f62b39ba7d8c7e4b880e127c8987981854855 @@ -0,0 +1,47 @@ +/*! + * arr-diff + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +module.exports = function diff(arr/*, arrays*/) { + var len = arguments.length; + var idx = 0; + while (++idx < len) { + arr = diffArray(arr, arguments[idx]); + } + return arr; +}; + +function diffArray(one, two) { + if (!Array.isArray(two)) { + return one.slice(); + } + + var tlen = two.length + var olen = one.length; + var idx = -1; + var arr = []; + + while (++idx < olen) { + var ele = one[idx]; + + var hasEle = false; + for (var i = 0; i < tlen; i++) { + var val = two[i]; + + if (ele === val) { + hasEle = true; + break; + } + } + + if (hasEle === false) { + arr.push(ele); + } + } + return arr; +} diff --git a/.pnpm-store/v11/files/95/f707981a1ea8bb81bff61b9fdf13037ae1b74030ad4f096984a56deffe69a3d007703b6a16fbc440961240fee30945bf7f904f555f6adf75fb64b5d7648407 b/.pnpm-store/v11/files/95/f707981a1ea8bb81bff61b9fdf13037ae1b74030ad4f096984a56deffe69a3d007703b6a16fbc440961240fee30945bf7f904f555f6adf75fb64b5d7648407 new file mode 100644 index 00000000..46784773 --- /dev/null +++ b/.pnpm-store/v11/files/95/f707981a1ea8bb81bff61b9fdf13037ae1b74030ad4f096984a56deffe69a3d007703b6a16fbc440961240fee30945bf7f904f555f6adf75fb64b5d7648407 @@ -0,0 +1,21 @@ +var baseEach = require('./_baseEach'); + +/** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ +function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function(value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; +} + +module.exports = baseFilter; diff --git a/.pnpm-store/v11/files/96/075447d200eceb0e3adbcb6326f01388df7c4e8471c2161b310a3daa274f7d8612bceb811eb6c8b5ac9804a7e296bbe2dd0e75b057576db89830fc886b69ea b/.pnpm-store/v11/files/96/075447d200eceb0e3adbcb6326f01388df7c4e8471c2161b310a3daa274f7d8612bceb811eb6c8b5ac9804a7e296bbe2dd0e75b057576db89830fc886b69ea new file mode 100644 index 00000000..d083fd64 --- /dev/null +++ b/.pnpm-store/v11/files/96/075447d200eceb0e3adbcb6326f01388df7c4e8471c2161b310a3daa274f7d8612bceb811eb6c8b5ac9804a7e296bbe2dd0e75b057576db89830fc886b69ea @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('maxBy', require('../maxBy')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/96/10a52127cd44bd697e399082de246faeb80ea175f4572feaa2be902256ea748172d96d681e8fba0645295e0ea2739e4d43b2f7c11d160097f102f3a4670dc3 b/.pnpm-store/v11/files/96/10a52127cd44bd697e399082de246faeb80ea175f4572feaa2be902256ea748172d96d681e8fba0645295e0ea2739e4d43b2f7c11d160097f102f3a4670dc3 new file mode 100644 index 00000000..1edb32ff --- /dev/null +++ b/.pnpm-store/v11/files/96/10a52127cd44bd697e399082de246faeb80ea175f4572feaa2be902256ea748172d96d681e8fba0645295e0ea2739e4d43b2f7c11d160097f102f3a4670dc3 @@ -0,0 +1,60 @@ +var baseGetTag = require('./_baseGetTag'), + isLength = require('./isLength'), + isObjectLike = require('./isObjectLike'); + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag] = +typedArrayTags[setTag] = typedArrayTags[stringTag] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +module.exports = baseIsTypedArray; diff --git a/.pnpm-store/v11/files/96/11a2edc4e7fed9ca07c265f725e7abbf0a6cd5fe701696910d85b21dc26a67a5b21f5447771478028dfda14510487952df95a7f2c5ee7e05f625a3f0f79d05 b/.pnpm-store/v11/files/96/11a2edc4e7fed9ca07c265f725e7abbf0a6cd5fe701696910d85b21dc26a67a5b21f5447771478028dfda14510487952df95a7f2c5ee7e05f625a3f0f79d05 new file mode 100644 index 00000000..e238290a --- /dev/null +++ b/.pnpm-store/v11/files/96/11a2edc4e7fed9ca07c265f725e7abbf0a6cd5fe701696910d85b21dc26a67a5b21f5447771478028dfda14510487952df95a7f2c5ee7e05f625a3f0f79d05 @@ -0,0 +1,2 @@ +import { Suman } from "./suman"; +export declare const execSuite: (suman: Suman) => Function; diff --git a/.pnpm-store/v11/files/96/4655baa25fd0cce895653a850f479b287ce75ba96c4e07728974f1ba6c87aff6f9d6774573f20ebea27ed9623f8b94754d255238713f0e5a8a11560f979f40 b/.pnpm-store/v11/files/96/4655baa25fd0cce895653a850f479b287ce75ba96c4e07728974f1ba6c87aff6f9d6774573f20ebea27ed9623f8b94754d255238713f0e5a8a11560f979f40 new file mode 100644 index 00000000..0aece7cd --- /dev/null +++ b/.pnpm-store/v11/files/96/4655baa25fd0cce895653a850f479b287ce75ba96c4e07728974f1ba6c87aff6f9d6774573f20ebea27ed9623f8b94754d255238713f0e5a8a11560f979f40 @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./async').applyEachSeries; diff --git a/.pnpm-store/v11/files/96/5d702bd140c373f78d1e0ad0736119d77ec62f365c21ca2c23c50d5369f81afc1dedb6ed813b8aa7a805e931f4e33ba640096e6f3a19139b8580ce8a3eda6e b/.pnpm-store/v11/files/96/5d702bd140c373f78d1e0ad0736119d77ec62f365c21ca2c23c50d5369f81afc1dedb6ed813b8aa7a805e931f4e33ba640096e6f3a19139b8580ce8a3eda6e new file mode 100644 index 00000000..ae08a864 --- /dev/null +++ b/.pnpm-store/v11/files/96/5d702bd140c373f78d1e0ad0736119d77ec62f365c21ca2c23c50d5369f81afc1dedb6ed813b8aa7a805e931f4e33ba640096e6f3a19139b8580ce8a3eda6e @@ -0,0 +1,12 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); diff --git a/.pnpm-store/v11/files/96/73af67241f6db3e05e3d0fb002ee76f45bd2c7001fa5b2ea5628144ae5101052e31a5b4fec1f8278a446a9cbb919ba4a193bdf4b7427912f287316016e1bf9 b/.pnpm-store/v11/files/96/73af67241f6db3e05e3d0fb002ee76f45bd2c7001fa5b2ea5628144ae5101052e31a5b4fec1f8278a446a9cbb919ba4a193bdf4b7427912f287316016e1bf9 new file mode 100644 index 00000000..0157a0b0 --- /dev/null +++ b/.pnpm-store/v11/files/96/73af67241f6db3e05e3d0fb002ee76f45bd2c7001fa5b2ea5628144ae5101052e31a5b4fec1f8278a446a9cbb919ba4a193bdf4b7427912f287316016e1bf9 @@ -0,0 +1,6 @@ +var WeakMap = require('./_WeakMap'); + +/** Used to store function metadata. */ +var metaMap = WeakMap && new WeakMap; + +module.exports = metaMap; diff --git a/.pnpm-store/v11/files/96/7afd5c116025dfed188fecc944c2caf7cbcd51d1a06246f7f5553cd6033fb65d4b90b0ad7115c83b6371201bfd6a8ddaf8a620aede7e3e257fd18bc2023be0 b/.pnpm-store/v11/files/96/7afd5c116025dfed188fecc944c2caf7cbcd51d1a06246f7f5553cd6033fb65d4b90b0ad7115c83b6371201bfd6a8ddaf8a620aede7e3e257fd18bc2023be0 new file mode 100644 index 00000000..3d838ca1 --- /dev/null +++ b/.pnpm-store/v11/files/96/7afd5c116025dfed188fecc944c2caf7cbcd51d1a06246f7f5553cd6033fb65d4b90b0ad7115c83b6371201bfd6a8ddaf8a620aede7e3e257fd18bc2023be0 @@ -0,0 +1,63 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _mapValuesLimit = require('./mapValuesLimit'); + +var _mapValuesLimit2 = _interopRequireDefault(_mapValuesLimit); + +var _doLimit = require('./internal/doLimit'); + +var _doLimit2 = _interopRequireDefault(_doLimit); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * A relative of [`map`]{@link module:Collections.map}, designed for use with objects. + * + * Produces a new Object by mapping each value of `obj` through the `iteratee` + * function. The `iteratee` is called each `value` and `key` from `obj` and a + * callback for when it has finished processing. Each of these callbacks takes + * two arguments: an `error`, and the transformed item from `obj`. If `iteratee` + * passes an error to its callback, the main `callback` (for the `mapValues` + * function) is immediately called with the error. + * + * Note, the order of the keys in the result is not guaranteed. The keys will + * be roughly in the order they complete, (but this is very engine-specific) + * + * @name mapValues + * @static + * @memberOf module:Collections + * @method + * @category Collection + * @param {Object} obj - A collection to iterate over. + * @param {AsyncFunction} iteratee - A function to apply to each value and key + * in `coll`. + * The iteratee should complete with the transformed value as its result. + * Invoked with (value, key, callback). + * @param {Function} [callback] - A callback which is called when all `iteratee` + * functions have finished, or an error occurs. `result` is a new object consisting + * of each key from `obj`, with each transformed value on the right-hand side. + * Invoked with (err, result). + * @example + * + * async.mapValues({ + * f1: 'file1', + * f2: 'file2', + * f3: 'file3' + * }, function (file, key, callback) { + * fs.stat(file, callback); + * }, function(err, result) { + * // result is now a map of stats for each file, e.g. + * // { + * // f1: [stats for file1], + * // f2: [stats for file2], + * // f3: [stats for file3] + * // } + * }); + */ + +exports.default = (0, _doLimit2.default)(_mapValuesLimit2.default, Infinity); +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/96/aeff2884b7f1a31434dd7c357e013f5b518bda33126b485c0c020994ede7deb8972aca9e3b373f007bdf0b36a7be35e735b56380f157ac0a1c813e1a09fe72 b/.pnpm-store/v11/files/96/aeff2884b7f1a31434dd7c357e013f5b518bda33126b485c0c020994ede7deb8972aca9e3b373f007bdf0b36a7be35e735b56380f157ac0a1c813e1a09fe72 new file mode 100644 index 00000000..842218cf --- /dev/null +++ b/.pnpm-store/v11/files/96/aeff2884b7f1a31434dd7c357e013f5b518bda33126b485c0c020994ede7deb8972aca9e3b373f007bdf0b36a7be35e735b56380f157ac0a1c813e1a09fe72 @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/96/aeff2884b7f1a31434dd7c357e013f5b518bda33126b485c0c020994ede7deb8972aca9e3b373f007bdf0b36a7be35e735b56380f157ac0a1c813e1a09fe72-exec b/.pnpm-store/v11/files/96/aeff2884b7f1a31434dd7c357e013f5b518bda33126b485c0c020994ede7deb8972aca9e3b373f007bdf0b36a7be35e735b56380f157ac0a1c813e1a09fe72-exec new file mode 100755 index 00000000..842218cf --- /dev/null +++ b/.pnpm-store/v11/files/96/aeff2884b7f1a31434dd7c357e013f5b518bda33126b485c0c020994ede7deb8972aca9e3b373f007bdf0b36a7be35e735b56380f157ac0a1c813e1a09fe72-exec @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/96/c599b361c22575426db0cf98fc89b8cf47c27635dc4240c7ed7ef655606f4bbf77eabff2fae031e584ee9ce1deaf54c086925168a1c5da332873258ccb0657 b/.pnpm-store/v11/files/96/c599b361c22575426db0cf98fc89b8cf47c27635dc4240c7ed7ef655606f4bbf77eabff2fae031e584ee9ce1deaf54c086925168a1c5da332873258ccb0657 new file mode 100644 index 00000000..247b9e1b --- /dev/null +++ b/.pnpm-store/v11/files/96/c599b361c22575426db0cf98fc89b8cf47c27635dc4240c7ed7ef655606f4bbf77eabff2fae031e584ee9ce1deaf54c086925168a1c5da332873258ccb0657 @@ -0,0 +1,7 @@ +var getNative = require('./_getNative'), + root = require('./_root'); + +/* Built-in method references that are verified to be native. */ +var Promise = getNative(root, 'Promise'); + +module.exports = Promise; diff --git a/.pnpm-store/v11/files/96/d142d8907d5ba9809c9277a85e7dd1294ae78c9d01dc275920e6ea2c5faa5ee381124ab2ecba70bf5c3686ceb773643883bc4cf2f7dc8e95f85c2c8c327d8c b/.pnpm-store/v11/files/96/d142d8907d5ba9809c9277a85e7dd1294ae78c9d01dc275920e6ea2c5faa5ee381124ab2ecba70bf5c3686ceb773643883bc4cf2f7dc8e95f85c2c8c327d8c new file mode 100644 index 00000000..301de2d1 --- /dev/null +++ b/.pnpm-store/v11/files/96/d142d8907d5ba9809c9277a85e7dd1294ae78c9d01dc275920e6ea2c5faa5ee381124ab2ecba70bf5c3686ceb773643883bc4cf2f7dc8e95f85c2c8c327d8c @@ -0,0 +1,41 @@ +define(['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { + 'use strict'; + + // istanbul ignore next + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _Exception = _interopRequireDefault(_exception); + + module.exports = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _Exception['default']('#if requires exactly one argument'); + } + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _Exception['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); + }; +}); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUdlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxVQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLGNBQU0sMEJBQWMsbUNBQW1DLENBQUMsQ0FBQztPQUMxRDtBQUNELFVBQUksT0FSVSxVQUFVLENBUVQsV0FBVyxDQUFDLEVBQUU7QUFDM0IsbUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3RDOzs7OztBQUtELFVBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLE9BZjlDLE9BQU8sQ0FlK0MsV0FBVyxDQUFDLEVBQUU7QUFDdkUsZUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDLENBQUM7O0FBRUgsWUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFVBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsY0FBTSwwQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO09BQzlEO0FBQ0QsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixlQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsWUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO09BQ25CLENBQUMsQ0FBQztLQUNKLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19 diff --git a/.pnpm-store/v11/files/97/37bef746b51edd87dfaef46b48d77c6a8daf3e903dccc1b642d7ef8b7e99d6585d583bd1bccf2679d372965a88e6371d6d625e14c1bde0deaadc56d68f25c5 b/.pnpm-store/v11/files/97/37bef746b51edd87dfaef46b48d77c6a8daf3e903dccc1b642d7ef8b7e99d6585d583bd1bccf2679d372965a88e6371d6d625e14c1bde0deaadc56d68f25c5 new file mode 100644 index 00000000..9b6783bb --- /dev/null +++ b/.pnpm-store/v11/files/97/37bef746b51edd87dfaef46b48d77c6a8daf3e903dccc1b642d7ef8b7e99d6585d583bd1bccf2679d372965a88e6371d6d625e14c1bde0deaadc56d68f25c5 @@ -0,0 +1,4 @@ +export declare const constants: Readonly<{ + JSON_STDIO_SUMAN_SHELL: string; + JSON_STDIO_SUMAN_R: string; +}>; diff --git a/.pnpm-store/v11/files/97/4ab0278c652e28512929d1d229350e412018b5e2f273abb43f50d0a0beca47a3b19412d1e2f2b59e25b630d530b81e8e60cccdf1af884d50acd0f2dd2770f0 b/.pnpm-store/v11/files/97/4ab0278c652e28512929d1d229350e412018b5e2f273abb43f50d0a0beca47a3b19412d1e2f2b59e25b630d530b81e8e60cccdf1af884d50acd0f2dd2770f0 new file mode 100644 index 00000000..04669d8e --- /dev/null +++ b/.pnpm-store/v11/files/97/4ab0278c652e28512929d1d229350e412018b5e2f273abb43f50d0a0beca47a3b19412d1e2f2b59e25b630d530b81e8e60cccdf1af884d50acd0f2dd2770f0 @@ -0,0 +1,83 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +declare namespace Intl { + // http://cldr.unicode.org/index/cldr-spec/plural-rules#TOC-Determining-Plural-Categories + type LDMLPluralRule = "zero" | "one" | "two" | "few" | "many" | "other"; + type PluralRuleType = "cardinal" | "ordinal"; + + interface PluralRulesOptions { + localeMatcher?: "lookup" | "best fit" | undefined; + type?: PluralRuleType | undefined; + minimumIntegerDigits?: number | undefined; + minimumFractionDigits?: number | undefined; + maximumFractionDigits?: number | undefined; + minimumSignificantDigits?: number | undefined; + maximumSignificantDigits?: number | undefined; + } + + interface ResolvedPluralRulesOptions { + locale: string; + pluralCategories: LDMLPluralRule[]; + type: PluralRuleType; + minimumIntegerDigits: number; + minimumFractionDigits: number; + maximumFractionDigits: number; + minimumSignificantDigits?: number; + maximumSignificantDigits?: number; + } + + interface PluralRules { + resolvedOptions(): ResolvedPluralRulesOptions; + select(n: number): LDMLPluralRule; + } + + interface PluralRulesConstructor { + new (locales?: string | readonly string[], options?: PluralRulesOptions): PluralRules; + (locales?: string | readonly string[], options?: PluralRulesOptions): PluralRules; + supportedLocalesOf(locales: string | readonly string[], options?: { localeMatcher?: "lookup" | "best fit"; }): string[]; + } + + const PluralRules: PluralRulesConstructor; + + interface NumberFormatPartTypeRegistry { + literal: never; + nan: never; + infinity: never; + percent: never; + integer: never; + group: never; + decimal: never; + fraction: never; + plusSign: never; + minusSign: never; + percentSign: never; + currency: never; + } + + type NumberFormatPartTypes = keyof NumberFormatPartTypeRegistry; + + interface NumberFormatPart { + type: NumberFormatPartTypes; + value: string; + } + + interface NumberFormat { + formatToParts(number?: number | bigint): NumberFormatPart[]; + } +} diff --git a/.pnpm-store/v11/files/97/6a40a69892fce1694238b105ca07ca6d8c8ddc2dab7bded38f58dbaba734fbd4d5f85b161f33048603b20aa49c8daedb3382f2a63a4dc54ba45fcf6e617161 b/.pnpm-store/v11/files/97/6a40a69892fce1694238b105ca07ca6d8c8ddc2dab7bded38f58dbaba734fbd4d5f85b161f33048603b20aa49c8daedb3382f2a63a4dc54ba45fcf6e617161 new file mode 100644 index 00000000..098ba865 --- /dev/null +++ b/.pnpm-store/v11/files/97/6a40a69892fce1694238b105ca07ca6d8c8ddc2dab7bded38f58dbaba734fbd4d5f85b161f33048603b20aa49c8daedb3382f2a63a4dc54ba45fcf6e617161 @@ -0,0 +1,81 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = reflect; + +var _initialParams = require('./internal/initialParams'); + +var _initialParams2 = _interopRequireDefault(_initialParams); + +var _slice = require('./internal/slice'); + +var _slice2 = _interopRequireDefault(_slice); + +var _wrapAsync = require('./internal/wrapAsync'); + +var _wrapAsync2 = _interopRequireDefault(_wrapAsync); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Wraps the async function in another function that always completes with a + * result object, even when it errors. + * + * The result object has either the property `error` or `value`. + * + * @name reflect + * @static + * @memberOf module:Utils + * @method + * @category Util + * @param {AsyncFunction} fn - The async function you want to wrap + * @returns {Function} - A function that always passes null to it's callback as + * the error. The second argument to the callback will be an `object` with + * either an `error` or a `value` property. + * @example + * + * async.parallel([ + * async.reflect(function(callback) { + * // do some stuff ... + * callback(null, 'one'); + * }), + * async.reflect(function(callback) { + * // do some more stuff but error ... + * callback('bad stuff happened'); + * }), + * async.reflect(function(callback) { + * // do some more stuff ... + * callback(null, 'two'); + * }) + * ], + * // optional callback + * function(err, results) { + * // values + * // results[0].value = 'one' + * // results[1].error = 'bad stuff happened' + * // results[2].value = 'two' + * }); + */ +function reflect(fn) { + var _fn = (0, _wrapAsync2.default)(fn); + return (0, _initialParams2.default)(function reflectOn(args, reflectCallback) { + args.push(function callback(error, cbArg) { + if (error) { + reflectCallback(null, { error: error }); + } else { + var value; + if (arguments.length <= 2) { + value = cbArg; + } else { + value = (0, _slice2.default)(arguments, 1); + } + reflectCallback(null, { value: value }); + } + }); + + return _fn.apply(this, args); + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/.pnpm-store/v11/files/97/8133a6f292526f0f08a916d2906ef3e2de765873498d0e052b474eb772dff0f2ed52c2f8e8c505e74ccc558e64422e8fa4dfd84b7f42368b084bf7d1e06db3 b/.pnpm-store/v11/files/97/8133a6f292526f0f08a916d2906ef3e2de765873498d0e052b474eb772dff0f2ed52c2f8e8c505e74ccc558e64422e8fa4dfd84b7f42368b084bf7d1e06db3 new file mode 100644 index 00000000..f968807d --- /dev/null +++ b/.pnpm-store/v11/files/97/8133a6f292526f0f08a916d2906ef3e2de765873498d0e052b474eb772dff0f2ed52c2f8e8c505e74ccc558e64422e8fa4dfd84b7f42368b084bf7d1e06db3 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/97/870aefeb6aa60f4a409b54678d68607a44552f236541e1aaa03b99b11fa13bfde5bd4098d5cf8004bd9cda5e31b95b6c95570e9d7fb1dd0d4532538563cbea b/.pnpm-store/v11/files/97/870aefeb6aa60f4a409b54678d68607a44552f236541e1aaa03b99b11fa13bfde5bd4098d5cf8004bd9cda5e31b95b6c95570e9d7fb1dd0d4532538563cbea new file mode 100644 index 00000000..13a95fac --- /dev/null +++ b/.pnpm-store/v11/files/97/870aefeb6aa60f4a409b54678d68607a44552f236541e1aaa03b99b11fa13bfde5bd4098d5cf8004bd9cda5e31b95b6c95570e9d7fb1dd0d4532538563cbea @@ -0,0 +1,53 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const process = require('suman-browser-polyfills/modules/process'); +const global = require('suman-browser-polyfills/modules/global'); +const fs = require("fs"); +const path = require("path"); +const tsc_multi_watch_1 = require("tsc-multi-watch"); +const _suman = global.__suman = (global.__suman || {}); +exports.run = function (opts) { + const { projectRoot } = _suman; + const sumanMultiLock = path.resolve(projectRoot + '/suman.lock'); + fs.writeFile(sumanMultiLock, { flag: 'wx' }, function (err) { + if (err && !opts.force) { + _suman.log.error('Could not acquire lock. Perhaps another similar process is already running. Use --force to override.'); + return; + } + process.once('exit', function () { + _suman.log.info('cleaning up sumanMultiLock.'); + try { + fs.unlinkSync(sumanMultiLock); + } + catch (err) { + } + }); + const sumanMultiReadyLock = path.resolve(projectRoot + '/suman-watch.lock'); + tsc_multi_watch_1.default({}, function (err) { + if (err) { + console.error(err.stack || err); + return process.exit(1); + } + fs.writeFile(sumanMultiReadyLock, { flag: 'wx' }, function (err) { + if (err) { + _suman.log.error(err.stack || err); + } + else { + _suman.log.info('successful started multi watch process.'); + } + let cleanUp = function () { + console.log('\n'); + _suman.log.info('cleaning up sumanMultiReadyLock.'); + try { + fs.unlinkSync(sumanMultiReadyLock); + } + catch (err) { + } + process.exit(0); + }; + process.on('SIGINT', cleanUp); + process.once('exit', cleanUp); + }); + }); + }); +}; diff --git a/.pnpm-store/v11/files/97/8aebb60d4569376bb63c8cf2a2830b8b51777cf346a54c9a0cd203a3d24eafc95a04ad1e14b17c70b28cabd408caab464f1c38dde4562acb10de7e4545f110-exec b/.pnpm-store/v11/files/97/8aebb60d4569376bb63c8cf2a2830b8b51777cf346a54c9a0cd203a3d24eafc95a04ad1e14b17c70b28cabd408caab464f1c38dde4562acb10de7e4545f110-exec new file mode 100755 index 00000000..f54d352c --- /dev/null +++ b/.pnpm-store/v11/files/97/8aebb60d4569376bb63c8cf2a2830b8b51777cf346a54c9a0cd203a3d24eafc95a04ad1e14b17c70b28cabd408caab464f1c38dde4562acb10de7e4545f110-exec @@ -0,0 +1,17 @@ +declare module "querystring" { + interface StringifyOptions { + encodeURIComponent?: Function; + } + + interface ParseOptions { + maxKeys?: number; + decodeURIComponent?: Function; + } + + interface ParsedUrlQuery { [key: string]: string | string[]; } + + function stringify(obj?: {}, sep?: string, eq?: string, options?: StringifyOptions): string; + function parse(str: string, sep?: string, eq?: string, options?: ParseOptions): ParsedUrlQuery; + function escape(str: string): string; + function unescape(str: string): string; +} diff --git a/.pnpm-store/v11/files/97/99b04bdbc86daf27a009f2caa6081fd7c6aaad77548da04e6e8e7ea36f4ec8fc53146c2a42836c51aa315361084511b0334bff6f088143e8016a38753aa778 b/.pnpm-store/v11/files/97/99b04bdbc86daf27a009f2caa6081fd7c6aaad77548da04e6e8e7ea36f4ec8fc53146c2a42836c51aa315361084511b0334bff6f088143e8016a38753aa778 new file mode 100644 index 00000000..0058c5af --- /dev/null +++ b/.pnpm-store/v11/files/97/99b04bdbc86daf27a009f2caa6081fd7c6aaad77548da04e6e8e7ea36f4ec8fc53146c2a42836c51aa315361084511b0334bff6f088143e8016a38753aa778 @@ -0,0 +1,186 @@ +// this entire module is depressing. i should have spent my time learning +// how to patch v8 so that these options would just be available on the +// process object. + +var os = require('os'); +var fs = require('fs'); +var path = require('path'); +var crypto = require('crypto'); +var execFile = require('child_process').execFile; +var configPath = require('./config-path.js')(process.platform); +var version = require('./package.json').version; +var env = process.env; +var user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME || ''; +var exclusions = ['--help', '--completion_bash']; + +// This number must be incremented whenever the generated cache file changes. +var CACHE_VERSION = 2; + +var configfile = '.v8flags-' + CACHE_VERSION + '-' + process.versions.v8 + '.' + crypto.createHash('md5').update(user).digest('hex') + '.json'; + +var failureMessage = [ + 'Unable to cache a config file for v8flags to your home directory', + 'or a temporary folder. To fix this problem, please correct your', + 'environment by setting HOME=/path/to/home or TEMP=/path/to/temp.', + 'NOTE: the user running this must be able to access provided path.', + 'If all else fails, please open an issue here:', + 'http://github.com/tkellen/js-v8flags', +].join('\n'); + +function fail(err) { + err.message += '\n\n' + failureMessage; + return err; +} + +function openConfig(cb) { + fs.mkdir(configPath, function() { + tryOpenConfig(path.join(configPath, configfile), function(err, fd) { + if (err) { + return tryOpenConfig(path.join(os.tmpdir(), configfile), cb); + } + return cb(null, fd); + }); + }); +} + +function tryOpenConfig(configpath, cb) { + try { + // if the config file is valid, it should be json and therefore + // node should be able to require it directly. if this doesn't + // throw, we're done! + var content = require(configpath); + process.nextTick(function() { + cb(null, content); + }); + } catch (e) { + // if requiring the config file failed, maybe it doesn't exist, or + // perhaps it has become corrupted. instead of calling back with the + // content of the file, call back with a file descriptor that we can + // write the cached data to + fs.open(configpath, 'w+', function(err, fd) { + if (err) { + return cb(err); + } + return cb(null, fd); + }); + } +} + +// Node <= 9 outputs _ in flags with multiple words, while node 10 +// uses -. Both ways are accepted anyway, so always use `_` for better +// compatibility. +// We must not replace the first two --. +function normalizeFlagName(flag) { + return '--' + flag.slice(4).replace(/-/g, '_'); +} + +// i can't wait for the day this whole module is obsolete because these +// options are available on the process object. this executes node with +// `--v8-options` and parses the result, returning an array of command +// line flags. +function getFlags(cb) { + var errored = false; + var pending = 0; + var flags = []; + + runNode('--help'); + runNode('--v8-options'); + + function runNode(option) { + pending++; + execFile(process.execPath, [option], function(execErr, result) { + if (execErr || errored) { + if (!errored) { + errored = true; + cb(execErr); + } + return; + } + + var index = result.indexOf('\nOptions:'); + if (index >= 0) { + var regexp = /^\s\s--[\w-]+/gm; + regexp.lastIndex = index; + var matchedFlags = result.match(regexp); + if (matchedFlags) { + flags = flags.concat(matchedFlags + .map(normalizeFlagName) + .filter(function(name) { + return exclusions.indexOf(name) === -1; + }) + ); + } + } + + if (--pending === 0) { + cb(null, flags); + } + }); + } +} + +// write some json to a file descriptor. if this fails, call back +// with both the error and the data that was meant to be written. +function writeConfig(fd, flags, cb) { + var json = JSON.stringify(flags); + var buf; + if (Buffer.from && Buffer.from !== Uint8Array.from) { + // Node.js 4.5.0 or newer + buf = Buffer.from(json); + } else { + // Old Node.js versions + // The typeof safeguard below is mostly against accidental copy-pasting + // and code rewrite, it never happens as json is always a string here. + if (typeof json === 'number') { + throw new Error('Unexpected type number'); + } + buf = new Buffer(json); + } + return fs.write(fd, buf, 0, buf.length, 0 , function(writeErr) { + fs.close(fd, function(closeErr) { + var err = writeErr || closeErr; + if (err) { + return cb(fail(err), flags); + } + return cb(null, flags); + }); + }); +} + +module.exports = function(cb) { + // bail early if this is not node + var isElectron = process.versions && process.versions.electron; + if (isElectron) { + return process.nextTick(function() { + cb(null, []); + }); + } + + // attempt to open/read cache file + openConfig(function(openErr, result) { + if (!openErr && typeof result !== 'number') { + return cb(null, result); + } + // if the result is not an array, we need to go fetch + // the flags by invoking node with `--v8-options` + getFlags(function(flagsErr, flags) { + // if there was an error fetching the flags, bail immediately + if (flagsErr) { + return cb(flagsErr); + } + // if there was a problem opening the config file for writing + // throw an error but include the flags anyway so that users + // can continue to execute (at the expense of having to fetch + // flags on every run until they fix the underyling problem). + if (openErr) { + return cb(fail(openErr), flags); + } + // write the config file to disk so subsequent runs can read + // flags out of a cache file. + return writeConfig(result, flags, cb); + }); + }); +}; + +module.exports.configfile = configfile; +module.exports.configPath = configPath; diff --git a/.pnpm-store/v11/files/97/ba5242d389c5a2e85f98445ebb39e5696ea56f09de6d1c567b1029210b8f3f3306127021f0ce433cef92f4bf1578c6470189f3ebd08f6cb9199b4d3c94f923 b/.pnpm-store/v11/files/97/ba5242d389c5a2e85f98445ebb39e5696ea56f09de6d1c567b1029210b8f3f3306127021f0ce433cef92f4bf1578c6470189f3ebd08f6cb9199b4d3c94f923 new file mode 100644 index 00000000..a25c92ed --- /dev/null +++ b/.pnpm-store/v11/files/97/ba5242d389c5a2e85f98445ebb39e5696ea56f09de6d1c567b1029210b8f3f3306127021f0ce433cef92f4bf1578c6470189f3ebd08f6cb9199b4d3c94f923 @@ -0,0 +1,21 @@ +/** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ +function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; +} + +module.exports = baseSortBy; diff --git a/.pnpm-store/v11/files/97/c7d1afe0af82ca3a47a67a42b28e75aa403ed6598feb04ec14fcb73d826fec947b3903df665bca02522b2dcc42ce960acd6c2d60e22cd1a660cadc5e8ff8c9-exec b/.pnpm-store/v11/files/97/c7d1afe0af82ca3a47a67a42b28e75aa403ed6598feb04ec14fcb73d826fec947b3903df665bca02522b2dcc42ce960acd6c2d60e22cd1a660cadc5e8ff8c9-exec new file mode 100755 index 00000000..49a0d0fa --- /dev/null +++ b/.pnpm-store/v11/files/97/c7d1afe0af82ca3a47a67a42b28e75aa403ed6598feb04ec14fcb73d826fec947b3903df665bca02522b2dcc42ce960acd6c2d60e22cd1a660cadc5e8ff8c9-exec @@ -0,0 +1,81 @@ +declare module "vm" { + interface Context { + [key: string]: any; + } + interface BaseOptions { + /** + * Specifies the filename used in stack traces produced by this script. + * Default: `''`. + */ + filename?: string; + /** + * Specifies the line number offset that is displayed in stack traces produced by this script. + * Default: `0`. + */ + lineOffset?: number; + /** + * Specifies the column number offset that is displayed in stack traces produced by this script. + * @default 0 + */ + columnOffset?: number; + } + interface ScriptOptions extends BaseOptions { + displayErrors?: boolean; + timeout?: number; + cachedData?: Buffer; + /** @deprecated in favor of `script.createCachedData()` */ + produceCachedData?: boolean; + } + interface RunningScriptOptions extends BaseOptions { + /** + * When `true`, if an `Error` occurs while compiling the `code`, the line of code causing the error is attached to the stack trace. + * Default: `true`. + */ + displayErrors?: boolean; + /** + * Specifies the number of milliseconds to execute code before terminating execution. + * If execution is terminated, an `Error` will be thrown. This value must be a strictly positive integer. + */ + timeout?: number; + /** + * If `true`, the execution will be terminated when `SIGINT` (Ctrl+C) is received. + * Existing handlers for the event that have been attached via `process.on('SIGINT')` will be disabled during script execution, but will continue to work after that. + * If execution is terminated, an `Error` will be thrown. + * Default: `false`. + */ + breakOnSigint?: boolean; + } + interface CompileFunctionOptions extends BaseOptions { + /** + * Provides an optional data with V8's code cache data for the supplied source. + */ + cachedData?: Buffer; + /** + * Specifies whether to produce new cache data. + * Default: `false`, + */ + produceCachedData?: boolean; + /** + * The sandbox/context in which the said function should be compiled in. + */ + parsingContext?: Context; + + /** + * An array containing a collection of context extensions (objects wrapping the current scope) to be applied while compiling + */ + contextExtensions?: Object[]; + } + class Script { + constructor(code: string, options?: ScriptOptions); + runInContext(contextifiedSandbox: Context, options?: RunningScriptOptions): any; + runInNewContext(sandbox?: Context, options?: RunningScriptOptions): any; + runInThisContext(options?: RunningScriptOptions): any; + cachedDataRejected?: boolean; + } + function createContext(sandbox?: Context): Context; + function isContext(sandbox: Context): boolean; + function runInContext(code: string, contextifiedSandbox: Context, options?: RunningScriptOptions | string): any; + function runInNewContext(code: string, sandbox?: Context, options?: RunningScriptOptions | string): any; + function runInThisContext(code: string, options?: RunningScriptOptions | string): any; + function compileFunction(code: string, params?: ReadonlyArray, options?: CompileFunctionOptions): Function; +} diff --git a/.pnpm-store/v11/files/97/d06b41d8449be3445f64d93afbb281a267a199aa1700f60bea98764332ddfe76a51db6a715941966b234918e2abdf434567e7b48772e4f269ea5d0e8fffbcf b/.pnpm-store/v11/files/97/d06b41d8449be3445f64d93afbb281a267a199aa1700f60bea98764332ddfe76a51db6a715941966b234918e2abdf434567e7b48772e4f269ea5d0e8fffbcf new file mode 100644 index 00000000..946ca3c9 --- /dev/null +++ b/.pnpm-store/v11/files/97/d06b41d8449be3445f64d93afbb281a267a199aa1700f60bea98764332ddfe76a51db6a715941966b234918e2abdf434567e7b48772e4f269ea5d0e8fffbcf @@ -0,0 +1,18 @@ +var getMapData = require('./_getMapData'); + +/** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ +function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; +} + +module.exports = mapCacheDelete; diff --git a/.pnpm-store/v11/files/97/d0bc61e70cf3e7e7092abc48e0f633e1bca403a51375532825c3ca855cf5c38723d253c07c2714b1e862f6cf29d4b5328bb104fd19bd88066f98291eba7129 b/.pnpm-store/v11/files/97/d0bc61e70cf3e7e7092abc48e0f633e1bca403a51375532825c3ca855cf5c38723d253c07c2714b1e862f6cf29d4b5328bb104fd19bd88066f98291eba7129 new file mode 100644 index 00000000..0b56a56c --- /dev/null +++ b/.pnpm-store/v11/files/97/d0bc61e70cf3e7e7092abc48e0f633e1bca403a51375532825c3ca855cf5c38723d253c07c2714b1e862f6cf29d4b5328bb104fd19bd88066f98291eba7129 @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('set', require('../set')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/97/dd4b5ec7e198a4634f0d3c92d1f8f70cda258e22330725fc53e2593453521350156dd2ee98ee36fb58e61859188988a49d1f89aef8c6b7331ccd71c7d127aa b/.pnpm-store/v11/files/97/dd4b5ec7e198a4634f0d3c92d1f8f70cda258e22330725fc53e2593453521350156dd2ee98ee36fb58e61859188988a49d1f89aef8c6b7331ccd71c7d127aa new file mode 100644 index 00000000..da8275e8 --- /dev/null +++ b/.pnpm-store/v11/files/97/dd4b5ec7e198a4634f0d3c92d1f8f70cda258e22330725fc53e2593453521350156dd2ee98ee36fb58e61859188988a49d1f89aef8c6b7331ccd71c7d127aa @@ -0,0 +1,5 @@ +var convert = require('./convert'), + func = convert('findFrom', require('../find')); + +func.placeholder = require('./placeholder'); +module.exports = func; diff --git a/.pnpm-store/v11/files/98/2b91309d6296c6d87f4ed4d96b149df8294ebb8158f1370d51faa89e9332c27dae625a85c0a8012b5855b9ebd12e0b1f5335430c1d3111fe530b81696f8681-exec b/.pnpm-store/v11/files/98/2b91309d6296c6d87f4ed4d96b149df8294ebb8158f1370d51faa89e9332c27dae625a85c0a8012b5855b9ebd12e0b1f5335430c1d3111fe530b81696f8681-exec new file mode 100755 index 00000000..ad6b5ec4 --- /dev/null +++ b/.pnpm-store/v11/files/98/2b91309d6296c6d87f4ed4d96b149df8294ebb8158f1370d51faa89e9332c27dae625a85c0a8012b5855b9ebd12e0b1f5335430c1d3111fe530b81696f8681-exec @@ -0,0 +1 @@ +echo 'foo' diff --git a/.pnpm-store/v11/files/98/35a28d509c038e060497dbce9c316415021f38ed91b7a23744f5857215a1fceced738c85f9c14eb257f7691cc5baba62ab0dad1aec03f2c43ad4485cec6d39 b/.pnpm-store/v11/files/98/35a28d509c038e060497dbce9c316415021f38ed91b7a23744f5857215a1fceced738c85f9c14eb257f7691cc5baba62ab0dad1aec03f2c43ad4485cec6d39 new file mode 100644 index 00000000..4e1e93f5 --- /dev/null +++ b/.pnpm-store/v11/files/98/35a28d509c038e060497dbce9c316415021f38ed91b7a23744f5857215a1fceced738c85f9c14eb257f7691cc5baba62ab0dad1aec03f2c43ad4485cec6d39 @@ -0,0 +1,13 @@ +{ + "name": "bind", + "version": "1.0.0", + "description": "function binding utility", + "keywords": [ + "bind", + "utility" + ], + "dependencies": {}, + "scripts": [ + "index.js" + ] +} diff --git a/.pnpm-store/v11/files/98/35defd9dec9ee28e13409f6532f2e698bd4c0732251a2aea9c7173c0581dc000a131740cede31e90ec9998d186cacd4d81534c71336d0bfca8527512de8acb b/.pnpm-store/v11/files/98/35defd9dec9ee28e13409f6532f2e698bd4c0732251a2aea9c7173c0581dc000a131740cede31e90ec9998d186cacd4d81534c71336d0bfca8527512de8acb new file mode 100644 index 00000000..72f2861c --- /dev/null +++ b/.pnpm-store/v11/files/98/35defd9dec9ee28e13409f6532f2e698bd4c0732251a2aea9c7173c0581dc000a131740cede31e90ec9998d186cacd4d81534c71336d0bfca8527512de8acb @@ -0,0 +1,38 @@ +{ + "name": "nan", + "version": "2.27.0", + "description": "Native Abstractions for Node.js: C++ header for Node 0.8 -> 26 compatibility", + "main": "include_dirs.js", + "repository": { + "type": "git", + "url": "git://github.com/nodejs/nan.git" + }, + "scripts": { + "test": "tap --gc --stderr test/js/*-test.js", + "test:worker": "node --experimental-worker test/tap-as-worker.js --gc --stderr test/js/*-test.js", + "rebuild-tests-2015": "node-gyp rebuild --msvs_version=2015 --directory test", + "rebuild-tests": "node-gyp rebuild --directory test", + "docs": "doc/.build.sh" + }, + "contributors": [ + "Rod Vagg (https://github.com/rvagg)", + "Benjamin Byholm (https://github.com/kkoopa/)", + "Trevor Norris (https://github.com/trevnorris)", + "Nathan Rajlich (https://github.com/TooTallNate)", + "Brett Lawson (https://github.com/brett19)", + "Ben Noordhuis (https://github.com/bnoordhuis)", + "David Siegel (https://github.com/agnat)", + "Michael Ira Krufky (https://github.com/mkrufky)" + ], + "devDependencies": { + "bindings": "~1.2.1", + "commander": "^2.8.1", + "glob": "^5.0.14", + "request": "=2.81.0", + "node-gyp": "~12.1.0", + "readable-stream": "^2.1.4", + "tap": "~0.7.1", + "xtend": "~4.0.0" + }, + "license": "MIT" +} diff --git a/.pnpm-store/v11/files/98/3c8d3d79edec68bfb250d63dae70be1e0612f187517cf74bf1b708082676c17affe20f7981e9b504a1afaa92080b53f7246ee9b9927d15cdf8985e4d4f479c b/.pnpm-store/v11/files/98/3c8d3d79edec68bfb250d63dae70be1e0612f187517cf74bf1b708082676c17affe20f7981e9b504a1afaa92080b53f7246ee9b9927d15cdf8985e4d4f479c new file mode 100644 index 00000000..4d9d5806 --- /dev/null +++ b/.pnpm-store/v11/files/98/3c8d3d79edec68bfb250d63dae70be1e0612f187517cf74bf1b708082676c17affe20f7981e9b504a1afaa92080b53f7246ee9b9927d15cdf8985e4d4f479c @@ -0,0 +1,19 @@ +Copyright (C) 2011-2019 by Yehuda Katz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/.pnpm-store/v11/files/98/78f056b5e6606f1d953799c7061f2bc7cad67fee955ee77c19f12e4a947209c2ab1192badda2e88fa73c91ebcb7d954b33c66854e2e742740d5663f6aa58b2 b/.pnpm-store/v11/files/98/78f056b5e6606f1d953799c7061f2bc7cad67fee955ee77c19f12e4a947209c2ab1192badda2e88fa73c91ebcb7d954b33c66854e2e742740d5663f6aa58b2 new file mode 100644 index 00000000..5e02521b --- /dev/null +++ b/.pnpm-store/v11/files/98/78f056b5e6606f1d953799c7061f2bc7cad67fee955ee77c19f12e4a947209c2ab1192badda2e88fa73c91ebcb7d954b33c66854e2e742740d5663f6aa58b2 @@ -0,0 +1,75 @@ +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. All rights reserved. +Licensed under the Apache License, Version 2.0 (the "License"); you may not use +this file except in compliance with the License. You may obtain a copy of the +License at http://www.apache.org/licenses/LICENSE-2.0 + +THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED +WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, +MERCHANTABLITY OR NON-INFRINGEMENT. + +See the Apache Version 2.0 License for specific language governing permissions +and limitations under the License. +***************************************************************************** */ + + +/// + +/// + +interface ErrorOptions { + cause?: unknown; +} + +interface Error { + cause?: unknown; +} + +interface ErrorConstructor { + new (message?: string, options?: ErrorOptions): Error; + (message?: string, options?: ErrorOptions): Error; +} + +interface EvalErrorConstructor { + new (message?: string, options?: ErrorOptions): EvalError; + (message?: string, options?: ErrorOptions): EvalError; +} + +interface RangeErrorConstructor { + new (message?: string, options?: ErrorOptions): RangeError; + (message?: string, options?: ErrorOptions): RangeError; +} + +interface ReferenceErrorConstructor { + new (message?: string, options?: ErrorOptions): ReferenceError; + (message?: string, options?: ErrorOptions): ReferenceError; +} + +interface SyntaxErrorConstructor { + new (message?: string, options?: ErrorOptions): SyntaxError; + (message?: string, options?: ErrorOptions): SyntaxError; +} + +interface TypeErrorConstructor { + new (message?: string, options?: ErrorOptions): TypeError; + (message?: string, options?: ErrorOptions): TypeError; +} + +interface URIErrorConstructor { + new (message?: string, options?: ErrorOptions): URIError; + (message?: string, options?: ErrorOptions): URIError; +} + +interface AggregateErrorConstructor { + new ( + errors: Iterable, + message?: string, + options?: ErrorOptions, + ): AggregateError; + ( + errors: Iterable, + message?: string, + options?: ErrorOptions, + ): AggregateError; +} diff --git a/.pnpm-store/v11/files/98/7f4fbedd6ca9585c42dc10d3f4d37a87ede646090de22c7d05e744bc71c944ad93ac4cbfefb3e526bd980cd7199b189c21c6fd4862090649ef0090d71a9a3e b/.pnpm-store/v11/files/98/7f4fbedd6ca9585c42dc10d3f4d37a87ede646090de22c7d05e744bc71c944ad93ac4cbfefb3e526bd980cd7199b189c21c6fd4862090649ef0090d71a9a3e new file mode 100644 index 00000000..952a7c81 --- /dev/null +++ b/.pnpm-store/v11/files/98/7f4fbedd6ca9585c42dc10d3f4d37a87ede646090de22c7d05e744bc71c944ad93ac4cbfefb3e526bd980cd7199b189c21c6fd4862090649ef0090d71a9a3e @@ -0,0 +1,17 @@ + +/** + * Module exports. + * + * Logic borrowed from Modernizr: + * + * - https://github.com/Modernizr/Modernizr/blob/master/feature-detects/cors.js + */ + +try { + module.exports = typeof XMLHttpRequest !== 'undefined' && + 'withCredentials' in new XMLHttpRequest(); +} catch (err) { + // if XMLHttp support is disabled in IE then it will throw + // when trying to create + module.exports = false; +} diff --git a/.pnpm-store/v11/files/98/8111c675b8d078e776d66c90bb0d8f45b4c3e5d475173380cf23d280dc603b526a4e8caf3420333dc9e05c4350eefe0faa16a1a18a955a5c73a6ae8064bec3 b/.pnpm-store/v11/files/98/8111c675b8d078e776d66c90bb0d8f45b4c3e5d475173380cf23d280dc603b526a4e8caf3420333dc9e05c4350eefe0faa16a1a18a955a5c73a6ae8064bec3 new file mode 100644 index 00000000..d7c8f4eb --- /dev/null +++ b/.pnpm-store/v11/files/98/8111c675b8d078e776d66c90bb0d8f45b4c3e5d475173380cf23d280dc603b526a4e8caf3420333dc9e05c4350eefe0faa16a1a18a955a5c73a6ae8064bec3 @@ -0,0 +1,364 @@ +# node-dashdash changelog + +## not yet released + +(nothing yet) + +## 1.14.1 + +- [issue #30] Change the output used by dashdash's Bash completion support to + indicate "there are no completions for this argument" to cope with different + sorting rules on different Bash/platforms. For example: + + $ triton -v -p test2 package get # before + ##-no -tritonpackage- completions-## + + $ triton -v -p test2 package get # after + ##-no-completion- -results-## + +## 1.14.0 + +- New `synopsisFromOpt(